1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
| let wO,Qn,he,ce,Ye,xw,bt,_w,Ew,Jn,hc,lQ,sQ,uQ,cQ,Dt,nn,Cw,wb,IDe,xO,mm,Sa,_O,dQ,fQ,EO,Nt,M,BDe,PDe,gm,Rr,pQ,LDe,jDe,VDe,ua,Sw,zDe,Qe,$t,f0,kw,hQ,St,HDe,xb,$De,_b,UDe,di,WDe,GDe,yl,Hn,qDe,KDe,Mf,Eb,vQ,No,Gt,Cb,fi,Gr,qn,Sb,ca,Dw,ee,$n,YDe,mQ,vc,XDe,gQ,QDe,JDe,CO,bl,yQ,SO,ZDe,eOe,Xn,mc,Ow,kb,kO,Nf,ym,dn,yn,Vs,Rt,Ft,bQ,wd,vn,AQ,tOe,DO,Db,gc,Ff,nOe,rOe,wQ,xQ,oOe,iOe,aOe,OO,lOe,sOe,_Q,yc,bm,Kn,an,Tw,uOe,cOe,Ga,EQ,Mw,pn,mt,Ob,CQ,dOe,fOe,pOe,oo,SQ,Nw,kQ,Ke,DQ,OQ,Fw,TQ,xd,Yo,bc,TO,Zl,Xt,hOe,Al,MQ,p0,Rw,ka,Iw,xo,$i,fe,Tb,vOe,NQ,Am,mOe,FQ,RQ,rr,zs,Tn,es,MO,wl,NO,Bw,FO,RO,IO,BO,PO,LO,IQ,BQ,PQ,LQ,jQ,gOe,yOe,jO,VO,VQ,Pw,Mb,bOe,zQ,HQ,$Q,Nb,h0,Ui,da,v0,Lw,Fb,Wi,wn,Zn,qa,Ac,jw,Vw,zO,UQ,ts,ns,AOe,fa,Ut,xn,WQ,GQ,Xo,Rf,qQ,Te,zw,wm,wOe,xm,m0,Su,xOe,pa,Rb,_Oe,EOe,KQ,_d,COe,HO,Hw,SOe,kOe,DOe,Nr,OOe,YQ,Qo,TOe,MOe,NOe,XQ,FOe,QQ,Ka,ROe,IOe,Ed,xl,Hs,JQ,Ib,BOe,POe,ZQ,$O,UO,_l,_m,Bb,g0,El,LOe,eJ,tJ,y0,nJ,WO,$w,wc,Cd,GO,qO,$s,jOe,VOe,zOe,KO,Pt,rJ,HOe,YO,$Oe,oJ,_t,Le,Fe,bn,ft,ie,iJ,Un,oe,Y,UOe,Cr,de,Ya,dr,aJ,lJ,Je,XO,WOe,ku,a9t=(async()=>{if(function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const n of document.querySelectorAll('link[rel="modulepreload"]'))t(n);new MutationObserver(n=>{for(const r of n)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&t(o)}).observe(document,{childList:!0,subtree:!0})}function t(n){if(n.ep)return;n.ep=!0;const r=function(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}(n);fetch(n.href,r)}}(),typeof window<"u"){let e=function(){var t=document.body,n=document.getElementById("__svg__icons__dom__");n||((n=document.createElementNS("http://www.w3.org/2000/svg","svg")).style.position="absolute",n.style.width="0",n.style.height="0",n.id="__svg__icons__dom__",n.setAttribute("xmlns","http://www.w3.org/2000/svg"),n.setAttribute("xmlns:link","http://www.w3.org/1999/xlink")),n.innerHTML='<symbol viewBox="0 0 800 800" id="icon-403"><style>#icon-403 .st26{fill:#fff}</style><g id="icon-403_\u56FE\u5C42_11"><linearGradient id="icon-403_SVGID_1_" gradientUnits="userSpaceOnUse" x1="401.773" y1="162.104" x2="401.773" y2="717.596"><stop offset="0" stop-color="#F4F2FB" /><stop offset="1" stop-color="#E1EEF5" /></linearGradient><path d="M485.03 203.46c-38.37 30.29-120.74 33.81-181.17-2.22s-172-31.38-202.22 34.87 37.19 131.33 12.78 178.98S8.66 530.13 64.45 611.49s126.6 60.62 169.22 52.45c84.17-16.13 189.79 115.67 308.62 16.13 68.47-57.35 170.44 42.09 210.17-81.36 32.78-101.86-85.67-139.5-49.97-208.03 37.96-72.88 30.67-159.24-10.46-201.06-38.31-38.96-140.75-38.46-207 13.84z" style="fill:url(#icon-403_SVGID_1_)" /><linearGradient id="icon-403_SVGID_2_" gradientUnits="userSpaceOnUse" x1="494.782" y1="599.604" x2="494.782" y2="428.659"><stop offset=".34" stop-color="#B0B9E1" /><stop offset=".866" stop-color="#EAF0F8" /></linearGradient><path d="M406.65 428.66h216.44l-22.53 49.03s59.19 57.87-14.13 121.91c-134.28-44.17-221.74-37.1-219.98-38.87 1.77-1.76 40.2-132.07 40.2-132.07z" style="fill:url(#icon-403_SVGID_2_)" /><linearGradient id="icon-403_SVGID_3_" gradientUnits="userSpaceOnUse" x1="116.855" y1="542.49" x2="116.855" y2="405.316"><stop offset=".227" stop-color="#B7ACE0" /><stop offset=".789" stop-color="#E8E7FA" /></linearGradient><path d="M117.64 405.56s-.22-.57-.52.04c-2.7 5.49-27.15 64.96-29.09 110.86 0 0-4.08 26.37 30.11 26.02 28.54-.29 27.78-24.6 27.68-32.79-.39-33.22-28.18-104.13-28.18-104.13z" style="fill:url(#icon-403_SVGID_3_)" /><linearGradient id="icon-403_SVGID_4_" gradientUnits="userSpaceOnUse" x1="116.857" y1="420.547" x2="116.857" y2="571.681"><stop offset="0" stop-color="#ECF1FB" /><stop offset=".818" stop-color="#AFB0E7" /></linearGradient><path d="M116.86 571.68c-.55 0-1-.45-1-1V421.55c0-.55.45-1 1-1s1 .45 1 1v149.13c0 .55-.45 1-1 1z" style="fill:url(#icon-403_SVGID_4_)" /><linearGradient id="icon-403_SVGID_5_" gradientUnits="userSpaceOnUse" x1="617.984" y1="450.968" x2="617.984" y2="362.644"><stop offset=".227" stop-color="#CCD4F4" /><stop offset=".789" stop-color="#ECF1FB" /></linearGradient><path d="M618.49 362.8s-.14-.37-.33.03c-1.74 3.53-17.48 41.83-18.73 71.38 0 0-2.63 16.98 19.39 16.76 18.38-.18 17.89-15.84 17.82-21.11-.25-21.4-18.15-67.06-18.15-67.06z" style="fill:url(#icon-403_SVGID_5_)" /><linearGradient id="icon-403_SVGID_6_" gradientUnits="userSpaceOnUse" x1="617.985" y1="372.451" x2="617.985" y2="469.764"><stop offset="0" stop-color="#ECF1FB" /><stop offset="1" stop-color="#A6A8E2" /></linearGradient><path d="M617.99 469.76c-.36 0-.64-.29-.64-.64V373.1c0-.36.29-.64.64-.64s.64.29.64.64v96.02c0 .36-.29.64-.64.64z" style="fill:url(#icon-403_SVGID_6_)" /><linearGradient id="icon-403_SVGID_7_" gradientUnits="userSpaceOnUse" x1="463.902" y1="88.362" x2="429.148" y2="148.558"><stop offset="0" stop-color="#FFDB80" /><stop offset="1" stop-color="#FFBB24" /></linearGradient><circle cx="446.52" cy="118.46" r="34.75" style="fill:url(#icon-403_SVGID_7_)" /><linearGradient id="icon-403_SVGID_8_" gradientUnits="userSpaceOnUse" x1="421.565" y1="118.828" x2="421.565" y2="176.282"><stop offset="0" stop-color="#F9FAFE" /><stop offset="1" stop-color="#E5EDF7" /></linearGradient><path d="M466.3 137.41h-34.57c-2.23-10.61-11.65-18.58-22.93-18.58s-20.69 7.97-22.93 18.58h-9.05c-10.73 0-19.44 8.7-19.44 19.44 0 10.73 8.7 19.44 19.44 19.44h89.47c10.73 0 19.44-8.7 19.44-19.44.01-10.74-8.69-19.44-19.43-19.44z" style="fill:url(#icon-403_SVGID_8_)" /><linearGradient id="icon-403_SVGID_9_" gradientUnits="userSpaceOnUse" x1="688.586" y1="540.208" x2="688.586" y2="512.38"><stop offset=".227" stop-color="#AFB0E7" /><stop offset="1" stop-color="#ECF1FB" /></linearGradient><circle cx="688.59" cy="526.29" r="13.91" style="fill:url(#icon-403_SVGID_9_)" /><linearGradient id="icon-403_SVGID_10_" gradientUnits="userSpaceOnUse" x1="688.635" y1="515.894" x2="688.635" y2="560.69"><stop offset="0" stop-color="#DDE1F6" /><stop offset=".818" stop-color="#A6A8E2" /></linearGradient><path d="M688.64 560.69c-.24 0-.43-.19-.43-.43v-43.94c0-.24.19-.43.43-.43s.43.19.43.43v43.94a.44.44 0 0 1-.43.43z" style="fill:url(#icon-403_SVGID_10_)" /><linearGradient id="icon-403_SVGID_11_" gradientUnits="userSpaceOnUse" x1="2622.045" y1="266.481" x2="2451.058" y2="562.64" gradientTransform="matrix(-1 0 0 1 2941.346 0)"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><path d="M248.82 393.99c0-24.52-.03-49.03.01-73.54.02-14.37 4.24-18.36 17.97-20.53 41.87-6.61 82.03-18.72 117.91-42.29 10.38-6.82 18.3-7.59 29.06-.47 34.85 23.06 73.26 37.11 114.55 42.8 13.12 1.81 16.84 5.88 16.85 19.25.04 45.72-.4 91.44.18 137.15.34 26.77-8.17 49.99-24.02 70.73-31.46 41.17-74.88 63.76-122.21 80.03-2.5.86-5.83.67-8.36-.23-38.47-13.74-74.58-31.84-104.15-61.09-22.97-22.73-37.84-49.56-37.79-83.22.03-22.87.01-45.73 0-68.59z" style="fill:url(#icon-403_SVGID_11_)" /><linearGradient id="icon-403_SVGID_12_" gradientUnits="userSpaceOnUse" x1="2625.25" y1="279.944" x2="2462.749" y2="561.403" gradientTransform="matrix(-1 0 0 1 2941.346 0)"><stop offset=".116" stop-color="#DEE4FF" /><stop offset=".847" stop-color="#BACBEE" /></linearGradient><path d="M247.94 401.44c0-23.21-.03-46.42.01-69.63.02-13.61 4.06-17.38 17.23-19.43 40.15-6.26 78.67-17.72 113.07-40.04 9.95-6.46 17.55-7.18 27.86-.44 33.42 21.83 70.25 35.14 109.84 40.52 12.58 1.71 16.14 5.56 16.15 18.22.03 43.28-.38 86.57.18 129.84.33 25.34-7.83 47.33-23.03 66.96-30.17 38.98-71.81 60.36-117.19 75.77-2.4.81-5.59.64-8.01-.22-36.89-13.01-71.52-30.14-99.87-57.84-22.03-21.52-36.28-46.91-36.23-78.78.02-21.65-.01-43.29-.01-64.93z" style="fill:url(#icon-403_SVGID_12_)" /><linearGradient id="icon-403_SVGID_13_" gradientUnits="userSpaceOnUse" x1="361.421" y1="346.477" x2="449.513" y2="499.057"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><path d="M411.59 435.75c23.18-5.61 40.41-26.11 40.41-50.49 0-28.68-23.85-52.01-53.17-52.01s-53.17 23.33-53.17 52.01c0 24.38 17.24 44.88 40.41 50.49v85.2h25.52v-36.38h32.67v-24.96h-32.67v-23.86zm-40.41-50.49c0-14.91 12.41-27.05 27.65-27.05s27.65 12.14 27.65 27.05-12.41 27.05-27.65 27.05-27.65-12.14-27.65-27.05z" style="fill:url(#icon-403_SVGID_13_)" /><path class="st26" d="M407.67 439.03c21.8-5.39 38.01-25.1 38.01-48.54 0-27.58-22.43-50.01-50.01-50.01s-50.01 22.43-50.01 50.01c0 23.44 16.21 43.15 38.01 48.54v81.92h24v-34.98h30.73v-24h-30.73v-22.94zm-38.01-48.55c0-14.34 11.67-26.01 26.01-26.01s26.01 11.67 26.01 26.01-11.67 26.01-26.01 26.01-26.01-11.67-26.01-26.01z" /><linearGradient id="icon-403_SVGID_14_" gradientUnits="userSpaceOnUse" x1="484.836" y1="475.674" x2="565.754" y2="615.828"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><circle cx="525.3" cy="545.75" r="80.9" style="fill:url(#icon-403_SVGID_14_)" /><linearGradient id="icon-403_SVGID_15_" gradientUnits="userSpaceOnUse" x1="482.787" y1="483.323" x2="559.605" y2="616.376"><stop offset=".116" stop-color="#DEE4FF" /><stop offset=".847" stop-color="#C6D5F4" /></linearGradient><circle cx="521.2" cy="549.85" r="76.81" style="fill:url(#icon-403_SVGID_15_)" /><path class="st26" d="m538.5 547.62 23.01-23.01c4.44-4.44 4.44-11.63 0-16.06-4.44-4.44-11.63-4.44-16.06 0l-23.01 23.01-23.01-23.01c-4.44-4.44-11.63-4.44-16.06 0-4.44 4.44-4.44 11.63 0 16.06l23.01 23.01-23.01 23.01c-4.44 4.44-4.44 11.63 0 16.06 2.22 2.22 5.13 3.33 8.03 3.33 2.91 0 5.81-1.11 8.03-3.33l23.01-23.01 23.01 23.01c2.22 2.22 5.13 3.33 8.03 3.33s5.81-1.11 8.03-3.33c4.44-4.44 4.44-11.63 0-16.06l-23.01-23.01z" /><linearGradient id="icon-403_SVGID_16_" gradientUnits="userSpaceOnUse" x1="232.569" y1="558.709" x2="232.569" y2="484.191"><stop offset="0" stop-color="#C3D5FD" /><stop offset="1" stop-color="#1A90FC" /></linearGradient><path d="M224.88 484.54s-18.08-2.5-23.95 5.81-8.02 29.58-8.02 29.58l13.61-.72-1.15 24.78 25.11 14.72 35.77-19.24-5.44-22.45 11.43-2.98s-3.4-32.58-19.31-27.77c-8.17.87-10.74.73-10.74.73s-2.15 6.85-9.53 6.27c-7.38-.59-7.78-8.73-7.78-8.73z" style="fill:url(#icon-403_SVGID_16_)" /><linearGradient id="icon-403_SVGID_17_" gradientUnits="userSpaceOnUse" x1="233.602" y1="471.483" x2="233.602" y2="495.089"><stop offset="0" stop-color="#F4AE98" /><stop offset="1" stop-color="#FAD1BB" /></linearGradient><path d="m226.69 474.3-3.76 16.76c-.18.79.23 1.59.98 1.89 1.94.79 5.83 2.13 9.82 2.13 4.15 0 8.06-2.27 9.86-3.48.62-.42.88-1.19.64-1.9l-5.75-17.09a1.643 1.643 0 0 0-1.86-1.1l-8.61 1.53c-.65.11-1.18.61-1.32 1.26z" style="fill:url(#icon-403_SVGID_17_)" /><linearGradient id="icon-403_SVGID_18_" gradientUnits="userSpaceOnUse" x1="-816.068" y1="920.854" x2="-804.529" y2="839.612" gradientTransform="rotate(-8.082 -2795.015 -6505.71)"><stop offset="0" stop-color="#C3D5FD" /><stop offset="1" stop-color="#1A90FC" /></linearGradient><path d="M204.24 487.44c5.26-1.75 12.4-.58 12.69 11.22s-11.28 30.62-7.13 37.16c4.2 6.63 13.17 16.05 18.89 21.41-1.33 6.3-4.91 11.61-4.91 11.61s-21.05-9.71-30.21-19.44c-9.17-9.73-4.54-32.03-.3-47.9 3.19-11.95 10.97-14.06 10.97-14.06z" style="fill:url(#icon-403_SVGID_18_)" /><linearGradient id="icon-403_SVGID_19_" gradientUnits="userSpaceOnUse" x1="-6575.898" y1="102.823" x2="-6564.359" y2="21.581" gradientTransform="scale(-1 1) rotate(-8.082 -118.103 -44396.273)"><stop offset="0" stop-color="#C3D5FD" /><stop offset="1" stop-color="#1A90FC" /></linearGradient><path d="M259.39 487.44c-5.26-1.75-12.4-.58-12.69 11.22s11.28 30.62 7.13 37.16c-4.2 6.63-13.17 16.05-18.89 21.41 1.33 6.3 4.91 11.61 4.91 11.61s21.05-9.71 30.21-19.44c9.17-9.73 4.54-32.03.3-47.9-3.19-11.95-10.97-14.06-10.97-14.06z" style="fill:url(#icon-403_SVGID_19_)" /><linearGradient id="icon-403_SVGID_20_" gradientUnits="userSpaceOnUse" x1="232.569" y1="531.798" x2="232.569" y2="579.152"><stop offset="0" stop-color="#275C89" /><stop offset="1" stop-color="#013F7C" /></linearGradient><path d="M206.79 579.15h51.1c2.31 0 4.38-1.75 5.19-4.4l10.3-33.89c1.34-4.4-1.33-9.07-5.19-9.07h-71.23c-3.82 0-6.48 4.6-5.21 8.98l9.84 33.89c.77 2.69 2.86 4.49 5.2 4.49z" style="fill:url(#icon-403_SVGID_20_)" /><path class="st26" d="M204.75 594.74s-.79-1.74-1.4-1.93c-.61-.19-9.35-.54-12.53-1.36-3.19-.83-12.38-2.14-16.32 1.59-3.43 3.25-4.56 10.84.66 15.2 1.96 1.7 3.89 2.2 11.14 1.86 7.26-.34 17.78-.26 20.09-3.63-.07-5.55-1.64-11.73-1.64-11.73z" /><linearGradient id="icon-403_SVGID_21_" gradientUnits="userSpaceOnUse" x1="-5720.751" y1="599.589" x2="-5703.986" y2="599.589" gradientTransform="matrix(-1 0 0 1 -5504.059 0)"><stop offset="0" stop-color="#F4B9A4" /><stop offset=".652" stop-color="#FAD1BB" /></linearGradient><path d="M212.86 592.81s-8.44 1.9-11.45 1.62-.49 11.87-.49 11.87 8.05.56 15.18-1.51c2.4-9.3-3.24-11.98-3.24-11.98z" style="fill:url(#icon-403_SVGID_21_)" /><linearGradient id="icon-403_SVGID_22_" gradientUnits="userSpaceOnUse" x1="209.839" y1="581.112" x2="296.322" y2="581.112"><stop offset="0" stop-color="#18264B" /><stop offset=".652" stop-color="#2D3C65" /></linearGradient><path d="m209.84 592.37 4.39 13.64s94.25-12.41 80.78-43c-11.27-25.57-85.17 29.36-85.17 29.36z" style="fill:url(#icon-403_SVGID_22_)" /><linearGradient id="icon-403_SVGID_23_" gradientUnits="userSpaceOnUse" x1="190.339" y1="591.445" x2="190.339" y2="609.24"><stop offset="0" stop-color="#FFDB80" /><stop offset="1" stop-color="#FFBB24" /></linearGradient><path d="M203.66 593.42s3.45 1.35 3.89 6.17c.44 4.82-.99 8.05-8.33 8.94s-9.21.56-13.81.67-11.29.56-12.27-8.2c-.99-8.75 7.96-10.98 17.24-8.75 2.92.56 13.28 1.17 13.28 1.17z" style="fill:url(#icon-403_SVGID_23_)" /><path class="st26" d="M263.56 594.74s.79-1.74 1.4-1.93c.61-.19 9.35-.54 12.53-1.36 3.19-.83 11.75-2.2 16.08 1.49 4.01 3.42 4.27 11-.29 15.18-1.96 1.7-4.02 2.32-11.28 1.98-7.26-.34-17.78-.26-20.09-3.63.09-5.55 1.65-11.73 1.65-11.73z" /><linearGradient id="icon-403_SVGID_24_" gradientUnits="userSpaceOnUse" x1="251.623" y1="599.589" x2="268.387" y2="599.589"><stop offset="0" stop-color="#F4B9A4" /><stop offset=".652" stop-color="#FAD1BB" /></linearGradient><path d="M255.45 592.81s8.44 1.9 11.45 1.62.49 11.87.49 11.87-8.05.56-15.18-1.51c-2.4-9.3 3.24-11.98 3.24-11.98z" style="fill:url(#icon-403_SVGID_24_)" /><linearGradient id="icon-403_SVGID_25_" gradientUnits="userSpaceOnUse" x1="171.993" y1="581.112" x2="258.476" y2="581.112"><stop offset="0" stop-color="#445677" /><stop offset="1" stop-color="#293861" /></linearGradient><path d="M258.48 592.37 254.09 606s-94.25-12.41-80.78-43c11.26-25.56 85.17 29.37 85.17 29.37z" style="fill:url(#icon-403_SVGID_25_)" /><linearGradient id="icon-403_SVGID_26_" gradientUnits="userSpaceOnUse" x1="277.976" y1="591.445" x2="277.976" y2="609.24"><stop offset="0" stop-color="#FFDB80" /><stop offset="1" stop-color="#FFBB24" /></linearGradient><path d="M264.66 593.42s-3.45 1.35-3.89 6.17.99 8.05 8.33 8.94c7.34.89 9.21.56 13.81.67s11.29.56 12.27-8.2c.99-8.75-7.96-10.98-17.24-8.75-2.92.56-13.28 1.17-13.28 1.17z" style="fill:url(#icon-403_SVGID_26_)" /><linearGradient id="icon-403_SVGID_27_" gradientUnits="userSpaceOnUse" x1="249.053" y1="466.067" x2="218.202" y2="466.067"><stop offset="0" stop-color="#F4B9A4" /><stop offset=".652" stop-color="#FAD1BB" /></linearGradient><path d="M248.39 467.6c.56-.8.91-2.84.46-3.44-.83-.67-1.61-.28-2.21.3.14-4.88-.31-8.94-.41-9.97-.3-2.99-3.35-8.48-13.3-8.48-9.95 0-11.88 7.18-11.88 7.18s-.65 5.08-.46 11.24c-.59-.57-1.37-.93-2.18-.27-.46.6-.1 2.64.46 3.44.56.8.91 2.69 1.02 3.74.1.99-.62 3.65 2 3.31 1.56 6.25 7.89 11.47 11.82 11.47 4.3 0 10.01-5.26 11.63-11.48 2.68.37 1.95-2.31 2.04-3.31.09-1.04.45-2.93 1.01-3.73z" style="fill:url(#icon-403_SVGID_27_)" /><linearGradient id="icon-403_SVGID_28_" gradientUnits="userSpaceOnUse" x1="213.957" y1="454.142" x2="249.774" y2="454.142"><stop offset="0" stop-color="#4F5C7C" /><stop offset="1" stop-color="#274168" /></linearGradient><path d="M240.1 443.88s-1.94-6.12-9.39-4.65c-7.44 1.46-7.95 4.98-10.87 5.12-4.99.23-8.97 6.45-2.58 13.03 2.85 2.93.44 4.19 1.79 6.78s1.34 5.12 1.34 5.12 2.38-7.6.81-10.84c-.81-1.67 2.77-2.13 7.24-1.73s11.51-1.08 12.06-4.12c1.32 6.23 2.64 6.88 4.31 7.83 1.68.95 1.78 8.48 1.78 8.48s.3-5.53 1.47-6.78c.96-2.04 2.85-10.07.72-12.02s-.32-8.19-8.68-6.22z" style="fill:url(#icon-403_SVGID_28_)" /></g></symbol><symbol viewBox="0 0 800 800" id="icon-404"><style>#icon-404 .st49{fill:#d4e4fe}</style><g id="icon-404_\u56FE\u5C42_5"><linearGradient id="icon-404_SVGID_1_" gradientUnits="userSpaceOnUse" x1="401.193" y1="159.763" x2="401.193" y2="715.254"><stop offset="0" stop-color="#F4F2FB" /><stop offset="1" stop-color="#E1EEF5" /></linearGradient><path d="M484.45 201.12c-38.37 30.29-120.74 33.81-181.17-2.22s-172-31.38-202.22 34.87 37.19 131.33 12.78 178.98S8.08 527.79 63.87 609.15s126.6 60.62 169.22 52.45c84.17-16.13 189.79 115.67 308.62 16.13 68.47-57.35 170.44 42.09 210.17-81.36 32.78-101.86-85.67-139.5-49.97-208.03 37.96-72.88 30.67-159.24-10.46-201.06-38.31-38.96-140.75-38.46-207 13.84z" style="fill:url(#icon-404_SVGID_1_)" /><linearGradient id="icon-404_SVGID_2_" gradientUnits="userSpaceOnUse" x1="484.537" y1="604.68" x2="484.537" y2="493.367"><stop offset=".34" stop-color="#B0B9E1" /><stop offset=".866" stop-color="#EAF0F8" /></linearGradient><path d="M285.1 583.44c1.77-1.63 77.74-90.07 77.74-90.07h321.13l-99.5 111.31-299.37-21.24z" style="fill:url(#icon-404_SVGID_2_)" /><linearGradient id="icon-404_SVGID_3_" gradientUnits="userSpaceOnUse" x1="616.023" y1="627.266" x2="657.332" y2="555.716"><stop offset="0" stop-color="#B0B9E1" /><stop offset=".866" stop-color="#EAF0F8" /></linearGradient><path d="m604.49 620.61 54.94-63.68-26.21 67.19z" style="fill:url(#icon-404_SVGID_3_)" /><linearGradient id="icon-404_SVGID_4_" gradientUnits="userSpaceOnUse" x1="116.275" y1="540.149" x2="116.275" y2="402.974"><stop offset=".003" stop-color="#9A9ADB" /><stop offset=".789" stop-color="#CECDF1" /></linearGradient><path d="M117.06 403.22s-.22-.57-.52.04c-2.7 5.49-27.15 64.96-29.09 110.86 0 0-4.08 26.37 30.11 26.02 28.54-.29 27.78-24.6 27.68-32.79-.39-33.22-28.18-104.13-28.18-104.13z" style="fill:url(#icon-404_SVGID_4_)" /><linearGradient id="icon-404_SVGID_5_" gradientUnits="userSpaceOnUse" x1="116.277" y1="418.206" x2="116.277" y2="569.34"><stop offset="0" stop-color="#ECF1FB" /><stop offset=".818" stop-color="#AFB0E7" /></linearGradient><path d="M116.28 569.34c-.55 0-1-.45-1-1V419.21c0-.55.45-1 1-1s1 .45 1 1v149.13c0 .55-.45 1-1 1z" style="fill:url(#icon-404_SVGID_5_)" /><linearGradient id="icon-404_SVGID_6_" gradientUnits="userSpaceOnUse" x1="617.404" y1="448.627" x2="617.404" y2="360.303"><stop offset=".227" stop-color="#CCD4F4" /><stop offset=".789" stop-color="#ECF1FB" /></linearGradient><path d="M617.91 360.46s-.14-.37-.33.03c-1.74 3.53-17.48 41.83-18.73 71.38 0 0-2.63 16.98 19.39 16.76 18.38-.18 17.89-15.84 17.82-21.11-.25-21.4-18.15-67.06-18.15-67.06z" style="fill:url(#icon-404_SVGID_6_)" /><linearGradient id="icon-404_SVGID_7_" gradientUnits="userSpaceOnUse" x1="617.405" y1="370.11" x2="617.405" y2="467.422"><stop offset="0" stop-color="#ECF1FB" /><stop offset="1" stop-color="#A6A8E2" /></linearGradient><path d="M617.41 467.42c-.36 0-.64-.29-.64-.64v-96.02c0-.36.29-.64.64-.64.36 0 .64.29.64.64v96.02c0 .35-.29.64-.64.64z" style="fill:url(#icon-404_SVGID_7_)" /><linearGradient id="icon-404_SVGID_8_" gradientUnits="userSpaceOnUse" x1="463.322" y1="86.02" x2="428.568" y2="146.217"><stop offset="0" stop-color="#FFDB80" /><stop offset="1" stop-color="#FFBB24" /></linearGradient><circle cx="445.95" cy="116.12" r="34.75" style="fill:url(#icon-404_SVGID_8_)" /><linearGradient id="icon-404_SVGID_9_" gradientUnits="userSpaceOnUse" x1="420.985" y1="116.487" x2="420.985" y2="173.941"><stop offset="0" stop-color="#F9FAFE" /><stop offset="1" stop-color="#E5EDF7" /></linearGradient><path d="M465.72 135.07h-34.57c-2.23-10.61-11.65-18.58-22.93-18.58s-20.69 7.97-22.93 18.58h-9.05c-10.73 0-19.44 8.7-19.44 19.44 0 10.73 8.7 19.44 19.44 19.44h89.47c10.73 0 19.44-8.7 19.44-19.44.01-10.74-8.69-19.44-19.43-19.44z" style="fill:url(#icon-404_SVGID_9_)" /><linearGradient id="icon-404_SVGID_10_" gradientUnits="userSpaceOnUse" x1="688.006" y1="537.867" x2="688.006" y2="510.039"><stop offset=".227" stop-color="#AFB0E7" /><stop offset="1" stop-color="#ECF1FB" /></linearGradient><circle cx="688.01" cy="523.95" r="13.91" style="fill:url(#icon-404_SVGID_10_)" /><linearGradient id="icon-404_SVGID_11_" gradientUnits="userSpaceOnUse" x1="688.056" y1="513.553" x2="688.056" y2="558.349"><stop offset="0" stop-color="#DDE1F6" /><stop offset=".818" stop-color="#A6A8E2" /></linearGradient><path d="M688.06 558.35c-.24 0-.43-.19-.43-.43v-43.94c0-.24.19-.43.43-.43s.43.19.43.43v43.94a.44.44 0 0 1-.43.43z" style="fill:url(#icon-404_SVGID_11_)" /><linearGradient id="icon-404_SVGID_12_" gradientUnits="userSpaceOnUse" x1="2879.853" y1="308.382" x2="2737.462" y2="450.774" gradientTransform="matrix(-1 0 0 1 3207.18 0)"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><path d="m270.73 392.79 91.4-73.3c7.43 11.92 20.65 19.87 35.7 19.87 16.43 0 30.69-9.48 37.6-23.26l92.11 76.85 10.83-12.98-98.5-82.19c0-.16.01-.31.01-.47 0-23.18-18.86-42.04-42.05-42.04-23.18 0-42.04 18.86-42.04 42.04 0 1.8.13 3.58.35 5.32l-95.98 76.97 10.57 13.19zm101.96-95.48c0-13.86 11.28-25.14 25.14-25.14s25.14 11.28 25.14 25.14-11.28 25.14-25.14 25.14-25.14-11.27-25.14-25.14z" style="fill:url(#icon-404_SVGID_12_)" /><linearGradient id="icon-404_SVGID_13_" gradientUnits="userSpaceOnUse" x1="2814.247" y1="259.815" x2="2814.247" y2="392.836" gradientTransform="matrix(-1 0 0 1 3207.18 0)"><stop offset=".116" stop-color="#DEE4FF" /><stop offset=".847" stop-color="#C6D5F4" /></linearGradient><path d="m268.75 392.68 88.31-70.82c7.18 11.51 19.95 19.2 34.49 19.2 15.88 0 29.65-9.16 36.33-22.47l88.99 74.25 10.46-12.54-95.17-79.41c0-.15.01-.3.01-.46 0-22.4-18.22-40.62-40.62-40.62s-40.62 18.22-40.62 40.62c0 1.74.12 3.46.34 5.14l-92.73 74.37 10.21 12.74zm98.51-92.24c0-13.4 10.9-24.29 24.29-24.29 13.4 0 24.29 10.9 24.29 24.29 0 13.4-10.9 24.29-24.29 24.29-13.4 0-24.29-10.9-24.29-24.29z" style="fill:url(#icon-404_SVGID_13_)" /><linearGradient id="icon-404_SVGID_14_" gradientUnits="userSpaceOnUse" x1="2966.463" y1="329.794" x2="2654.707" y2="641.55" gradientTransform="matrix(-1 0 0 1 3203.43 0)"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><path d="M230.6 619.91h326.35c17.89 0 32.39-14.5 32.39-32.39V388.31c0-21.39-17.34-38.72-38.72-38.72H230.6c-17.89 0-32.39 14.5-32.39 32.39v205.54c-.01 17.88 14.5 32.39 32.39 32.39z" style="fill:url(#icon-404_SVGID_14_)" /><linearGradient id="icon-404_SVGID_15_" gradientUnits="userSpaceOnUse" x1="2716.773" y1="319.563" x2="2914.293" y2="661.678" gradientTransform="matrix(-1 0 0 1 3203.43 0)"><stop offset="0" stop-color="#EBF2FA" /><stop offset=".525" stop-color="#FDFEFF" /></linearGradient><path d="M223.6 619.91h328.59c14.03 0 25.4-11.37 25.4-25.4V386.73c0-14.03-11.37-25.4-25.4-25.4H223.6c-14.03 0-25.4 11.37-25.4 25.4v207.78c0 14.03 11.38 25.4 25.4 25.4z" style="fill:url(#icon-404_SVGID_15_)" /><linearGradient id="icon-404_SVGID_16_" gradientUnits="userSpaceOnUse" x1="2815.495" y1="361.334" x2="2815.495" y2="425.526" gradientTransform="matrix(-1 0 0 1 3203.43 0)"><stop offset=".116" stop-color="#DEE4FF" /><stop offset=".847" stop-color="#BACBEE" /></linearGradient><path d="M198.24 425.53h379.39v-38.79c0-14.03-11.37-25.4-25.4-25.4H223.64c-14.03 0-25.4 11.37-25.4 25.4v38.79z" style="fill:url(#icon-404_SVGID_16_)" /><linearGradient id="icon-404_SVGID_17_" gradientUnits="userSpaceOnUse" x1="276.445" y1="488.742" x2="350.685" y2="531.604"><stop offset=".116" stop-color="#DEE4FF" /><stop offset=".847" stop-color="#BACBEE" /></linearGradient><path d="M328.82 457.46H307.7c-1.27 0-2.46.59-3.24 1.59L261.91 514c-.56.72-.86 1.6-.86 2.51v23.15c0 2.26 1.83 4.09 4.09 4.09h41.34c2.26 0 4.09 1.83 4.09 4.09v13.46c0 2.26 1.83 4.09 4.09 4.09h14.14c2.26 0 4.09-1.83 4.09-4.09v-13.46c0-2.26 1.83-4.09 4.09-4.09s4.09-1.83 4.09-4.09V525.5c0-2.26-1.83-4.09-4.09-4.09s-4.09-1.83-4.09-4.09v-55.77a4.059 4.059 0 0 0-4.07-4.09zm-39.3 57.35 13.74-17.74c2.39-3.08 7.33-1.4 7.33 2.51v17.74c0 2.26-1.83 4.09-4.09 4.09h-13.74c-3.41 0-5.33-3.91-3.24-6.6z" style="fill:url(#icon-404_SVGID_17_)" /><linearGradient id="icon-404_SVGID_18_" gradientUnits="userSpaceOnUse" x1="455.095" y1="488.742" x2="529.335" y2="531.604"><stop offset=".116" stop-color="#DEE4FF" /><stop offset=".847" stop-color="#BACBEE" /></linearGradient><path d="M511.56 517.32v-55.77c0-2.26-1.83-4.09-4.09-4.09h-21.12c-1.27 0-2.46.59-3.24 1.59L440.56 514c-.56.72-.86 1.6-.86 2.51v23.15c0 2.26 1.83 4.09 4.09 4.09h41.34c2.26 0 4.09 1.83 4.09 4.09v13.46c0 2.26 1.83 4.09 4.09 4.09h14.14c2.26 0 4.09-1.83 4.09-4.09v-13.46c0-2.26 1.83-4.09 4.09-4.09s4.09-1.83 4.09-4.09V525.5c0-2.26-1.83-4.09-4.09-4.09-2.24 0-4.07-1.83-4.07-4.09zm-43.39-2.51 13.74-17.74c2.39-3.08 7.33-1.4 7.33 2.51v17.74c0 2.26-1.83 4.09-4.09 4.09H471.4c-3.4 0-5.32-3.91-3.23-6.6z" style="fill:url(#icon-404_SVGID_18_)" /><linearGradient id="icon-404_SVGID_19_" gradientUnits="userSpaceOnUse" x1="339.488" y1="482.174" x2="441.31" y2="540.961"><stop offset=".116" stop-color="#DEE4FF" /><stop offset=".847" stop-color="#BACBEE" /></linearGradient><path d="M356.4 566.16h68c2.26 0 4.09-1.83 4.09-4.09v-101c0-2.26-1.83-4.09-4.09-4.09h-68c-2.26 0-4.09 1.83-4.09 4.09v101c0 2.26 1.83 4.09 4.09 4.09zm49.76-82.76v56.34c0 2.26-1.83 4.09-4.09 4.09h-23.34c-2.26 0-4.09-1.83-4.09-4.09V483.4c0-2.26 1.83-4.09 4.09-4.09h23.34c2.26 0 4.09 1.83 4.09 4.09z" style="fill:url(#icon-404_SVGID_19_)" /><linearGradient id="icon-404_SVGID_20_" gradientUnits="userSpaceOnUse" x1="871.514" y1="4485.232" x2="872.065" y2="4498.77" gradientTransform="rotate(2.333 95904.663 -3670.234)"><stop offset="0" stop-color="#FFDB80" /><stop offset="1" stop-color="#FFBB24" /></linearGradient><path d="M605.95 610.6s3.25 4.88 10.55 1.06c3.91 2.72 8.92 4.97 12.39 5.88 3.47.91 3.68 5.4 3.12 6.61-4.66-.47-18.14.64-27.3-2.94.72-7.53 1.24-10.61 1.24-10.61z" style="fill:url(#icon-404_SVGID_20_)" /><path class="st49" d="m604.06 623.84.43-3.23s10.54 2.63 28.38 1.03c.17 1.66.35 2.48.35 2.48s-13.56 2.02-29.16-.28z" /><linearGradient id="icon-404_SVGID_21_" gradientUnits="userSpaceOnUse" x1="-1427.263" y1="-235.579" x2="-1409.896" y2="-215.318" gradientTransform="rotate(40.6 -1575.457 2818.52)"><stop offset="0" stop-color="#FFDB80" /><stop offset="1" stop-color="#FFBB24" /></linearGradient><path d="M520.47 596.12s-.05 5.81 7.27 7.94c1.95 5-3.73 11.79 5.37 12.42 3.34.23 1.75 5.12.73 5.63-10.95 4.01-14.63-10.12-19.62-18.98 4.32-5.09 6.25-7.01 6.25-7.01z" style="fill:url(#icon-404_SVGID_21_)" /><linearGradient id="icon-404_SVGID_22_" gradientUnits="userSpaceOnUse" x1="-3772.01" y1="604.486" x2="-3772.01" y2="502.198" gradientTransform="matrix(-1 0 0 1 -3222.68 0)"><stop offset="0" stop-color="#445677" /><stop offset="1" stop-color="#293861" /></linearGradient><path d="M569.3 502.2s-14.44-.26-17.67 18.85c-3.23 19.11 1.57 23.66-5.38 37.29-3.62 7.1-27.15 41.12-27.15 41.12l6.83 5.03s37.94-34.72 43.52-48.71 9.83-28.83 10.13-41.46c.28-12.62-10.28-12.12-10.28-12.12z" style="fill:url(#icon-404_SVGID_22_)" /><linearGradient id="icon-404_SVGID_23_" gradientUnits="userSpaceOnUse" x1="-3839.642" y1="559.801" x2="-3786.238" y2="559.801" gradientTransform="matrix(-1 0 0 1 -3222.68 0)"><stop offset="0" stop-color="#445677" /><stop offset="1" stop-color="#293861" /></linearGradient><path d="M572.72 506.19s14.87 3.53 15.75 3.98c.44.23 2.89 7.07 5.24 13.95 5.04 6.87 23.02 32.28 23.21 45.51.29 20.13-.96 43.67-.96 43.67l-9.24.11s-3.5-38.9-5.85-42.31c-.42-.61-1.29-1.95-2.42-3.74-5.14-6.22-16.5-16.65-28.16-27.07-16.45-14.66 2.43-34.1 2.43-34.1z" style="fill:url(#icon-404_SVGID_23_)" /><linearGradient id="icon-404_SVGID_24_" gradientUnits="userSpaceOnUse" x1="5317.908" y1="132.095" x2="5317.908" y2="56.817" gradientTransform="rotate(26.086 2112.504 -9908.036)"><stop offset="0" stop-color="#C3D5FD" /><stop offset="1" stop-color="#1A90FC" /></linearGradient><path d="M603.14 448.91s-10.69-8.37-16.99-4.36c-6.3 4-14.27 18.91-14.27 18.91l8.85 4.38-23.8 39.67 40.69 21.83 14.6-42.28 11.79.69s7.96-25.24-3.62-27.43c-5.45-2.3-7.04-3.34-7.04-3.34s-3.49 4.27-7.99 1.18-2.22-9.25-2.22-9.25z" style="fill:url(#icon-404_SVGID_24_)" /><linearGradient id="icon-404_SVGID_25_" gradientUnits="userSpaceOnUse" x1="5161.945" y1="1134.369" x2="5171.26" y2="1068.78" gradientTransform="rotate(18.006 4848.87 -13687.47)"><stop offset="0" stop-color="#C3D5FD" /><stop offset="1" stop-color="#1A90FC" /></linearGradient><path d="M589.15 443.6c3.88.61 8.04 4.05 4.56 12.85-3.48 8.8-16.66 18.5-16.06 24.82.6 6.4 3.37 16.58 5.33 22.6-2.8 4.17-6.72 6.78-6.72 6.78s-10.33-14.75-13.12-25.23 7.07-25.25 14.69-35.41c5.73-7.67 11.32-6.41 11.32-6.41z" style="fill:url(#icon-404_SVGID_25_)" /><linearGradient id="icon-404_SVGID_26_" gradientUnits="userSpaceOnUse" x1="-8924.659" y1="-865.525" x2="-8915.544" y2="-929.706" gradientTransform="scale(-1 1) rotate(-34.172 -2504.53 -13720.806)"><stop offset="0" stop-color="#C3D5FD" /><stop offset="1" stop-color="#1A90FC" /></linearGradient><path d="M624.12 463.5c-2.79-3.19-7.68-4.9-11.53 3.69s-2.35 26.64-7.02 29.97c-4.72 3.37-13.34 7.07-18.62 8.96-1.12 5.12-.49 10.33-.49 10.33s16.36.44 25.19-3.42c8.83-3.86 12.82-21.97 15.06-35.2 1.69-9.97-2.59-14.33-2.59-14.33z" style="fill:url(#icon-404_SVGID_26_)" /><linearGradient id="icon-404_SVGID_27_" gradientUnits="userSpaceOnUse" x1="-3813.896" y1="480.898" x2="-3841.811" y2="423.883" gradientTransform="matrix(-1 0 0 1 -3222.68 0)"><stop offset="0" stop-color="#4F5C7C" /><stop offset="1" stop-color="#274168" /></linearGradient><path d="M590.9 439.68c.43-4.69 4.5-7.9 9.3-7.17.4-1.31 4.44-2.98 5.38-4.6 3.5-6.03 9.26-7 14-3.56 9.79 2.79 8.01 12.2 4.75 21.55 2.8 5.61 1.52 12.41-.06 15.18 4.75 5.07 2.09 11.58-1.39 16.52-.4.56-.82 1.06-1.25 1.52-.21 5.85-8.34 7.86-11.32 4.89-3.17-3.16-3.57-4.49-9.32-1.76-5.75 2.73-11.24-1.54-11.3-7.34-.06-5.8-4.28-4.1-6.12-5.63-3.33-2.77-1.15-5.93-1.15-5.93s-4.85-.26-6.01-7.38c-1.33-16.99 11.95-17.08 14.49-16.29z" style="fill:url(#icon-404_SVGID_27_)" /><path class="st49" d="M515.38 601.24s4.92 12.03 5.91 13.61 5.9 9.27 14.26 5.05c-.04 1.49-.11 2.43-.11 2.43s-9.42 6.26-15.33-4.62c-5.91-10.88-6.75-14.63-6.75-14.63l2.02-1.84z" /></g></symbol><symbol viewBox="0 0 800 800" id="icon-500"><style>#icon-500 .st26{fill:#fff}</style><g id="icon-500_\u56FE\u5C42_16"><linearGradient id="icon-500_SVGID_1_" gradientUnits="userSpaceOnUse" x1="402.832" y1="159.843" x2="402.832" y2="715.335"><stop offset="0" stop-color="#F4F2FB" /><stop offset="1" stop-color="#E1EEF5" /></linearGradient><path d="M486.09 201.2c-38.37 30.29-120.74 33.81-181.17-2.22s-172-31.38-202.22 34.87 37.19 131.33 12.78 178.98S9.72 527.87 65.5 609.23s126.6 60.62 169.22 52.45c84.17-16.13 189.79 115.67 308.62 16.13 68.47-57.35 170.44 42.09 210.17-81.36 32.78-101.86-85.67-139.5-49.97-208.03 37.96-72.88 30.67-159.24-10.46-201.06-38.3-38.96-140.75-38.46-206.99 13.84z" style="fill:url(#icon-500_SVGID_1_)" /><linearGradient id="icon-500_SVGID_2_" gradientUnits="userSpaceOnUse" x1="117.913" y1="540.229" x2="117.913" y2="403.055"><stop offset=".227" stop-color="#B7ACE0" /><stop offset=".789" stop-color="#E8E7FA" /></linearGradient><path d="M118.7 403.3s-.22-.57-.52.04c-2.7 5.49-27.15 64.96-29.09 110.86 0 0-4.08 26.37 30.11 26.02 28.54-.29 27.78-24.6 27.68-32.79-.39-33.22-28.18-104.13-28.18-104.13z" style="fill:url(#icon-500_SVGID_2_)" /><linearGradient id="icon-500_SVGID_3_" gradientUnits="userSpaceOnUse" x1="117.915" y1="418.287" x2="117.915" y2="569.42"><stop offset="0" stop-color="#ECF1FB" /><stop offset=".818" stop-color="#AFB0E7" /></linearGradient><path d="M117.92 569.42c-.55 0-1-.45-1-1V419.29c0-.55.45-1 1-1s1 .45 1 1v149.13c0 .55-.45 1-1 1z" style="fill:url(#icon-500_SVGID_3_)" /><linearGradient id="icon-500_SVGID_4_" gradientUnits="userSpaceOnUse" x1="619.042" y1="448.707" x2="619.042" y2="360.383"><stop offset=".227" stop-color="#CCD4F4" /><stop offset=".789" stop-color="#ECF1FB" /></linearGradient><path d="M619.55 360.54s-.14-.37-.33.03c-1.74 3.53-17.48 41.83-18.73 71.38 0 0-2.63 16.98 19.39 16.76 18.38-.18 17.89-15.84 17.82-21.11-.26-21.4-18.15-67.06-18.15-67.06z" style="fill:url(#icon-500_SVGID_4_)" /><linearGradient id="icon-500_SVGID_5_" gradientUnits="userSpaceOnUse" x1="619.043" y1="370.19" x2="619.043" y2="467.503"><stop offset="0" stop-color="#ECF1FB" /><stop offset="1" stop-color="#A6A8E2" /></linearGradient><path d="M619.04 467.5c-.36 0-.64-.29-.64-.64v-96.02c0-.36.29-.64.64-.64s.64.29.64.64v96.02c.01.35-.28.64-.64.64z" style="fill:url(#icon-500_SVGID_5_)" /><linearGradient id="icon-500_SVGID_6_" gradientUnits="userSpaceOnUse" x1="464.96" y1="86.101" x2="430.206" y2="146.297"><stop offset="0" stop-color="#FFDB80" /><stop offset="1" stop-color="#FFBB24" /></linearGradient><circle cx="447.58" cy="116.2" r="34.75" style="fill:url(#icon-500_SVGID_6_)" /><linearGradient id="icon-500_SVGID_7_" gradientUnits="userSpaceOnUse" x1="422.623" y1="116.567" x2="422.623" y2="174.021"><stop offset="0" stop-color="#F9FAFE" /><stop offset="1" stop-color="#E5EDF7" /></linearGradient><path d="M467.36 135.15h-34.57c-2.23-10.61-11.65-18.58-22.93-18.58s-20.69 7.97-22.93 18.58h-9.05c-10.73 0-19.44 8.7-19.44 19.44 0 10.73 8.7 19.44 19.44 19.44h89.47c10.73 0 19.44-8.7 19.44-19.44.01-10.74-8.7-19.44-19.43-19.44z" style="fill:url(#icon-500_SVGID_7_)" /><linearGradient id="icon-500_SVGID_8_" gradientUnits="userSpaceOnUse" x1="689.644" y1="537.948" x2="689.644" y2="510.119"><stop offset=".227" stop-color="#AFB0E7" /><stop offset="1" stop-color="#ECF1FB" /></linearGradient><circle cx="689.64" cy="524.03" r="13.91" style="fill:url(#icon-500_SVGID_8_)" /><linearGradient id="icon-500_SVGID_9_" gradientUnits="userSpaceOnUse" x1="689.694" y1="513.633" x2="689.694" y2="558.429"><stop offset="0" stop-color="#DDE1F6" /><stop offset=".818" stop-color="#A6A8E2" /></linearGradient><path d="M689.69 558.43c-.24 0-.43-.19-.43-.43v-43.94c0-.24.19-.43.43-.43s.43.19.43.43V558c0 .24-.19.43-.43.43z" style="fill:url(#icon-500_SVGID_9_)" /><linearGradient id="icon-500_SVGID_10_" gradientUnits="userSpaceOnUse" x1="289.384" y1="477.19" x2="289.384" y2="411.226"><stop offset="0" stop-color="#B0B9E1" /><stop offset="1" stop-color="#E7EFF7" /></linearGradient><path d="m202.07 451.28 68.03-40.05h106.6l-61.55 65.96-77.74-1.18z" style="fill:url(#icon-500_SVGID_10_)" /><linearGradient id="icon-500_SVGID_11_" gradientUnits="userSpaceOnUse" x1="454.145" y1="502.809" x2="454.145" y2="420.65"><stop offset="0" stop-color="#B0B9E1" /><stop offset="1" stop-color="#E7EFF7" /></linearGradient><path d="m386.71 479.55 45.05-58.9h89.82l-97.77 82.16-29.44-7.66z" style="fill:url(#icon-500_SVGID_11_)" /><linearGradient id="icon-500_SVGID_12_" gradientUnits="userSpaceOnUse" x1="589.016" y1="472.132" x2="589.016" y2="397.68"><stop offset="0" stop-color="#B0B9E1" /><stop offset="1" stop-color="#E7EFF7" /></linearGradient><path d="m501.26 458.64 64.79-60.96h110.72l-48.99 66.61a19.243 19.243 0 0 1-17.85 7.7l-108.67-13.35z" style="fill:url(#icon-500_SVGID_12_)" /><linearGradient id="icon-500_SVGID_13_" gradientUnits="userSpaceOnUse" x1="314.267" y1="607.349" x2="314.267" y2="497.361"><stop offset="0" stop-color="#B0B9E1" /><stop offset="1" stop-color="#E7EFF7" /></linearGradient><path d="m212.23 592.77 91.44-95.41H416.3L297.04 607.35l-49.47-2.65z" style="fill:url(#icon-500_SVGID_13_)" /><linearGradient id="icon-500_SVGID_14_" gradientUnits="userSpaceOnUse" x1="515.604" y1="312.867" x2="613.092" y2="481.721"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><path d="M564.35 296.53c-41.79 0-75.67 33.6-75.67 75.05v51.43c0 41.45 33.88 75.05 75.67 75.05s75.67-33.6 75.67-75.05v-51.43c-.01-41.45-33.88-75.05-75.67-75.05zm23.82 137.83c0 13.05-10.67 23.63-23.82 23.63-13.16 0-23.82-10.58-23.82-23.63v-74.13c0-13.05 10.67-23.63 23.82-23.63 13.16 0 23.82 10.58 23.82 23.63v74.13z" style="fill:url(#icon-500_SVGID_14_)" /><linearGradient id="icon-500_SVGID_15_" gradientUnits="userSpaceOnUse" x1="513.839" y1="321.619" x2="606.64" y2="482.355"><stop offset=".116" stop-color="#DEE4FF" /><stop offset=".847" stop-color="#BACBEE" /></linearGradient><path d="M560.24 305.91c-39.52 0-71.56 32.04-71.56 71.56v49.03c0 39.52 32.04 71.56 71.56 71.56s71.56-32.04 71.56-71.56v-49.03c0-39.52-32.04-71.56-71.56-71.56zm22.53 131.41c0 12.44-10.09 22.53-22.53 22.53-12.44 0-22.53-10.09-22.53-22.53v-70.67c0-12.44 10.09-22.53 22.53-22.53 12.44 0 22.53 10.09 22.53 22.53v70.67z" style="fill:url(#icon-500_SVGID_15_)" /><linearGradient id="icon-500_SVGID_16_" gradientUnits="userSpaceOnUse" x1="217.031" y1="307.363" x2="316.583" y2="479.793"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><path d="M333.72 412.6c-5.55-58.15-65.99-54.01-90.14-49.98l2.26-15.28 71.49 5.88 8.98-5.88V307.2h-109l-9.09 7.47-14.81 92.41h43.6c22.73-19.99 38.77-11.37 45.38 0 6.34 10.92 7.27 43.26-19.71 43.87-23.34.53-23.13-19.92-23.13-19.92l-41.55.58-8.06 7.52s6.18 59.41 69.73 59.41 77.3-50.09 74.05-85.94z" style="fill:url(#icon-500_SVGID_16_)" /><linearGradient id="icon-500_SVGID_17_" gradientUnits="userSpaceOnUse" x1="212.735" y1="311.982" x2="309.699" y2="479.928"><stop offset=".116" stop-color="#DEE4FF" /><stop offset=".847" stop-color="#BACBEE" /></linearGradient><path d="M324.26 415.94c-5.19-55.89-61.65-51.92-84.21-48.04l2.11-14.69h75.17v-38.58H208.14l-14.95 96h40.73c21.23-19.21 36.22-10.93 42.39 0 5.92 10.49 6.79 46.38-18.41 46.97-21.8.51-24.41-19.14-24.41-19.14l-43.54.66s5.78 59.41 65.14 59.41 72.2-48.14 69.17-82.59z" style="fill:url(#icon-500_SVGID_17_)" /><linearGradient id="icon-500_SVGID_18_" gradientUnits="userSpaceOnUse" x1="368.459" y1="304.731" x2="452.448" y2="450.205"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><path d="M387.26 461.26s-54.09-36.72-56.49-83.83c-2.29-45.03 25.47-81.27 76.27-81.27 55.29 0 78.12 47.95 78.12 73.99 0 26.04-10.63 63.25-55.73 93.35-23.53 0-42.17-2.24-42.17-2.24z" style="fill:url(#icon-500_SVGID_18_)" /><linearGradient id="icon-500_SVGID_19_" gradientUnits="userSpaceOnUse" x1="366.623" y1="312.428" x2="445.175" y2="448.483"><stop offset=".116" stop-color="#DEE4FF" /><stop offset=".847" stop-color="#BACBEE" /></linearGradient><path d="M384.76 461.29s-51.7-34.94-53.99-79.77c-2.19-42.85 24.35-77.34 72.9-77.34 52.85 0 73.47 45.54 73.47 70.32 0 24.78-12.03 58.72-55.14 87.36-22.49.01-37.24-.57-37.24-.57z" style="fill:url(#icon-500_SVGID_19_)" /><linearGradient id="icon-500_SVGID_20_" gradientUnits="userSpaceOnUse" x1="400.418" y1="454.748" x2="417.994" y2="485.191"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><path d="M414.59 486.78h-16.64c-.85 0-1.64-.44-2.08-1.17l-11.39-18.8c-.7-1.15-.33-2.64.82-3.34 1.15-.69 2.64-.33 3.34.82l10.68 17.62h13.84l10.6-19.05c.65-1.17 2.13-1.6 3.31-.94 1.17.65 1.6 2.13.94 3.31l-11.29 20.3c-.44.77-1.25 1.25-2.13 1.25z" style="fill:url(#icon-500_SVGID_20_)" /><linearGradient id="icon-500_SVGID_21_" gradientUnits="userSpaceOnUse" x1="397.841" y1="454.748" x2="415.417" y2="485.191"><stop offset=".116" stop-color="#DEE4FF" /><stop offset=".847" stop-color="#BACBEE" /></linearGradient><path d="M412.01 486.78h-16.64c-.85 0-1.64-.44-2.08-1.17l-11.39-18.8c-.7-1.15-.33-2.64.82-3.34 1.15-.69 2.64-.33 3.34.82l10.68 17.62h13.84l10.6-19.05c.65-1.17 2.13-1.6 3.31-.94 1.17.65 1.6 2.13.94 3.31l-11.29 20.3c-.43.77-1.25 1.25-2.13 1.25z" style="fill:url(#icon-500_SVGID_21_)" /><linearGradient id="icon-500_SVGID_22_" gradientUnits="userSpaceOnUse" x1="395.626" y1="441.888" x2="415.816" y2="476.856"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><path d="M429.22 468.35h-47.66c-2.76 0-5-2.24-5-5V452.9h57.65v10.45c0 2.76-2.23 5-4.99 5z" style="fill:url(#icon-500_SVGID_22_)" /><linearGradient id="icon-500_SVGID_23_" gradientUnits="userSpaceOnUse" x1="395.022" y1="445.756" x2="412.776" y2="476.507"><stop offset=".116" stop-color="#DEE4FF" /><stop offset=".847" stop-color="#BACBEE" /></linearGradient><path d="M425.57 468.35h-44.01c-2.76 0-5-2.24-5-5v-6.93h54.01v6.93c0 2.76-2.24 5-5 5z" style="fill:url(#icon-500_SVGID_23_)" /><linearGradient id="icon-500_SVGID_24_" gradientUnits="userSpaceOnUse" x1="396.171" y1="472.261" x2="416.697" y2="507.813"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><path d="M418.79 505.46h-25.7c-4.09 0-7.4-3.31-7.4-7.4v-19.75h40.5v19.75c0 4.09-3.31 7.4-7.4 7.4z" style="fill:url(#icon-500_SVGID_24_)" /><linearGradient id="icon-500_SVGID_25_" gradientUnits="userSpaceOnUse" x1="395.099" y1="476.159" x2="413.018" y2="507.195"><stop offset=".116" stop-color="#DEE4FF" /><stop offset=".847" stop-color="#BACBEE" /></linearGradient><path d="M414.04 505.46h-20.95c-4.09 0-7.4-3.31-7.4-7.4v-16.47h35.75v16.47c0 4.09-3.31 7.4-7.4 7.4z" style="fill:url(#icon-500_SVGID_25_)" /><linearGradient id="icon-500_SVGID_26_" gradientUnits="userSpaceOnUse" x1="370.752" y1="345.042" x2="439.366" y2="413.656"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><path d="M404.4 311.4s-17.23 79.51 1.33 135.9c47.84-62.43-1.33-135.9-1.33-135.9z" style="fill:url(#icon-500_SVGID_26_)" /><linearGradient id="icon-500_SVGID_27_" gradientUnits="userSpaceOnUse" x1="352.936" y1="350.49" x2="415.513" y2="413.067"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><path d="M386.43 316.99s-15.24 26.94-16.34 62.72c-.75 24.43 11.93 66.85 11.93 66.85s-20.76-36.07-20.76-70.23 25.17-59.34 25.17-59.34z" style="fill:url(#icon-500_SVGID_27_)" /><linearGradient id="icon-500_SVGID_28_" gradientUnits="userSpaceOnUse" x1="389.798" y1="347.846" x2="456.792" y2="414.84"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><path d="M420.65 316.99s34.1 22.12 34.1 60.99-29.68 68.58-29.68 68.58 23.5-42.18 23.5-70.9c0-14.24-13.98-48.76-27.92-58.67z" style="fill:url(#icon-500_SVGID_28_)" /><path class="st26" d="M386.43 316.99s-62.13 47.12-4.42 129.57c-7.06-15.6-36.21-73.62 4.42-129.57zm34.22 0s62.13 47.12 4.42 129.57c7.07-15.6 36.22-73.62-4.42-129.57zm-16.25-5.59s-35.48 79.66 1.33 135.9c32.24-57.5-1.33-135.9-1.33-135.9z" /><linearGradient id="icon-500_SVGID_29_" gradientUnits="userSpaceOnUse" x1="234.692" y1="561.708" x2="234.692" y2="486.088"><stop offset="0" stop-color="#C3D5FD" /><stop offset="1" stop-color="#1A90FC" /></linearGradient><path d="M226.89 486.45s-18.35-2.54-24.31 5.89c-5.96 8.43-8.14 30.01-8.14 30.01l13.81-.73-1.16 25.14 25.48 14.94 36.3-19.52-5.52-22.78 11.6-3.03s-3.46-33.06-19.59-28.18c-8.29.89-10.9.74-10.9.74s-2.18 6.95-9.67 6.36c-7.49-.58-7.9-8.84-7.9-8.84z" style="fill:url(#icon-500_SVGID_29_)" /><linearGradient id="icon-500_SVGID_30_" gradientUnits="userSpaceOnUse" x1="235.741" y1="473.191" x2="235.741" y2="497.147"><stop offset="0" stop-color="#F4AE98" /><stop offset="1" stop-color="#FAD1BB" /></linearGradient><path d="m228.72 476.05-3.81 17.01c-.18.8.24 1.61 1 1.92 1.97.8 5.91 2.17 9.97 2.17 4.21 0 8.18-2.3 10-3.53.63-.42.89-1.21.65-1.93l-5.83-17.35a1.681 1.681 0 0 0-1.89-1.12l-8.74 1.55c-.67.11-1.2.62-1.35 1.28z" style="fill:url(#icon-500_SVGID_30_)" /><linearGradient id="icon-500_SVGID_31_" gradientUnits="userSpaceOnUse" x1="-1535.437" y1="750.954" x2="-1523.728" y2="668.51" gradientTransform="rotate(-8.082 -1929.216 -11692.611)"><stop offset="0" stop-color="#C3D5FD" /><stop offset="1" stop-color="#1A90FC" /></linearGradient><path d="M205.94 489.39c5.34-1.77 12.58-.59 12.88 11.39.29 11.98-11.45 31.07-7.24 37.71 4.26 6.73 13.37 16.29 19.17 21.73-1.35 6.4-4.99 11.78-4.99 11.78s-21.36-9.86-30.66-19.73c-9.3-9.87-4.61-32.5-.3-48.61 3.24-12.13 11.14-14.27 11.14-14.27z" style="fill:url(#icon-500_SVGID_31_)" /><linearGradient id="icon-500_SVGID_32_" gradientUnits="userSpaceOnUse" x1="-5585.118" y1="175.804" x2="-5573.409" y2="93.36" gradientTransform="scale(-1 1) rotate(-8.082 -118.041 -37329.02)"><stop offset="0" stop-color="#C3D5FD" /><stop offset="1" stop-color="#1A90FC" /></linearGradient><path d="M261.91 489.39c-5.34-1.77-12.58-.59-12.88 11.39-.29 11.98 11.45 31.07 7.24 37.71-4.26 6.73-13.37 16.29-19.17 21.73 1.35 6.4 4.99 11.78 4.99 11.78s21.36-9.86 30.66-19.73c9.3-9.87 4.61-32.5.3-48.61-3.24-12.13-11.14-14.27-11.14-14.27z" style="fill:url(#icon-500_SVGID_32_)" /><linearGradient id="icon-500_SVGID_33_" gradientUnits="userSpaceOnUse" x1="234.692" y1="534.399" x2="234.692" y2="582.454"><stop offset="0" stop-color="#275C89" /><stop offset="1" stop-color="#013F7C" /></linearGradient><path d="M208.53 582.45h51.85c2.35 0 4.45-1.78 5.26-4.46l10.45-34.39c1.36-4.46-1.35-9.21-5.26-9.21h-72.29c-3.87 0-6.58 4.67-5.29 9.11l9.98 34.39c.8 2.74 2.92 4.56 5.3 4.56z" style="fill:url(#icon-500_SVGID_33_)" /><path class="st26" d="M206.46 598.27s-.8-1.76-1.42-1.95c-.62-.19-9.49-.54-12.72-1.38s-12.56-2.17-16.56 1.61c-3.48 3.3-4.63 11 .67 15.43 1.99 1.73 3.94 2.23 11.31 1.89s18.04-.27 20.38-3.68c-.07-5.65-1.66-11.92-1.66-11.92z" /><linearGradient id="icon-500_SVGID_34_" gradientUnits="userSpaceOnUse" x1="-3991.106" y1="603.193" x2="-3974.093" y2="603.193" gradientTransform="matrix(-1 0 0 1 -3772.525 0)"><stop offset="0" stop-color="#F4B9A4" /><stop offset=".652" stop-color="#FAD1BB" /></linearGradient><path d="M214.69 596.31s-8.56 1.92-11.62 1.64c-3.06-.28-.5 12.05-.5 12.05s8.17.57 15.4-1.53c2.45-9.44-3.28-12.16-3.28-12.16z" style="fill:url(#icon-500_SVGID_34_)" /><linearGradient id="icon-500_SVGID_35_" gradientUnits="userSpaceOnUse" x1="211.625" y1="584.443" x2="299.388" y2="584.443"><stop offset="0" stop-color="#18264B" /><stop offset=".652" stop-color="#2D3C65" /></linearGradient><path d="m211.63 595.87 4.45 13.84s95.64-12.6 81.97-43.63c-11.43-25.96-86.42 29.79-86.42 29.79z" style="fill:url(#icon-500_SVGID_35_)" /><linearGradient id="icon-500_SVGID_36_" gradientUnits="userSpaceOnUse" x1="191.837" y1="594.929" x2="191.837" y2="612.987"><stop offset="0" stop-color="#FFDB80" /><stop offset="1" stop-color="#FFBB24" /></linearGradient><path d="M205.35 596.94s3.5 1.37 3.95 6.26c.44 4.89-1 8.17-8.45 9.07-7.45.91-9.34.57-14.01.68-4.67.11-11.45.57-12.46-8.32-1-8.88 8.08-11.15 17.5-8.88 2.96.56 13.47 1.19 13.47 1.19z" style="fill:url(#icon-500_SVGID_36_)" /><path class="st26" d="M266.14 598.27s.8-1.76 1.42-1.95c.62-.19 9.49-.54 12.72-1.38 3.23-.84 11.93-2.24 16.32 1.51 4.07 3.48 4.34 11.16-.3 15.4-1.99 1.73-4.08 2.35-11.44 2.01s-18.04-.27-20.38-3.68c.08-5.64 1.66-11.91 1.66-11.91z" /><linearGradient id="icon-500_SVGID_37_" gradientUnits="userSpaceOnUse" x1="254.028" y1="603.193" x2="271.04" y2="603.193"><stop offset="0" stop-color="#F4B9A4" /><stop offset=".652" stop-color="#FAD1BB" /></linearGradient><path d="M257.92 596.31s8.56 1.92 11.62 1.64c3.06-.28.5 12.05.5 12.05s-8.17.57-15.4-1.53c-2.45-9.44 3.28-12.16 3.28-12.16z" style="fill:url(#icon-500_SVGID_37_)" /><linearGradient id="icon-500_SVGID_38_" gradientUnits="userSpaceOnUse" x1="173.22" y1="584.443" x2="260.983" y2="584.443"><stop offset="0" stop-color="#445677" /><stop offset="1" stop-color="#293861" /></linearGradient><path d="m260.98 595.87-4.45 13.84s-95.64-12.6-81.97-43.63c11.43-25.96 86.42 29.79 86.42 29.79z" style="fill:url(#icon-500_SVGID_38_)" /><linearGradient id="icon-500_SVGID_39_" gradientUnits="userSpaceOnUse" x1="280.771" y1="594.929" x2="280.771" y2="612.987"><stop offset="0" stop-color="#FFDB80" /><stop offset="1" stop-color="#FFBB24" /></linearGradient><path d="M267.26 596.94s-3.5 1.37-3.95 6.26 1 8.17 8.45 9.07 9.34.57 14.01.68 11.45.57 12.46-8.32c1-8.88-8.08-11.15-17.5-8.88-2.96.56-13.47 1.19-13.47 1.19z" style="fill:url(#icon-500_SVGID_39_)" /><linearGradient id="icon-500_SVGID_40_" gradientUnits="userSpaceOnUse" x1="251.42" y1="467.696" x2="220.113" y2="467.696"><stop offset="0" stop-color="#F4B9A4" /><stop offset=".652" stop-color="#FAD1BB" /></linearGradient><path d="M250.74 469.25c.57-.81.93-2.88.46-3.49-.84-.68-1.63-.29-2.24.3.14-4.96-.31-9.07-.42-10.12-.31-3.04-3.4-8.6-13.5-8.6s-12.05 7.29-12.05 7.29-.66 5.15-.46 11.41c-.6-.58-1.39-.95-2.22-.28-.46.61-.1 2.68.46 3.49.57.81.93 2.73 1.03 3.79.1 1.01-.63 3.7 2.03 3.36 1.59 6.35 8.01 11.64 11.99 11.64 4.36 0 10.16-5.33 11.8-11.65 2.71.37 1.98-2.34 2.07-3.35.13-1.06.49-2.98 1.05-3.79z" style="fill:url(#icon-500_SVGID_40_)" /><linearGradient id="icon-500_SVGID_41_" gradientUnits="userSpaceOnUse" x1="215.804" y1="455.594" x2="252.152" y2="455.594"><stop offset="0" stop-color="#4F5C7C" /><stop offset="1" stop-color="#274168" /></linearGradient><path d="M242.34 445.19s-1.97-6.21-9.53-4.72c-7.55 1.48-8.06 5.06-11.03 5.19-5.06.24-9.11 6.54-2.61 13.22 2.89 2.97.45 4.25 1.82 6.88s1.36 5.19 1.36 5.19 2.41-7.71.82-11c-.82-1.7 2.82-2.16 7.35-1.75s11.68-1.1 12.24-4.18c1.34 6.32 2.68 6.98 4.38 7.94 1.7.96 1.8 8.6 1.8 8.6s.3-5.62 1.49-6.88c.98-2.07 2.89-10.22.73-12.19s-.34-8.31-8.82-6.3z" style="fill:url(#icon-500_SVGID_41_)" /><linearGradient id="icon-500_SVGID_42_" gradientUnits="userSpaceOnUse" x1="509.948" y1="612.061" x2="509.948" y2="547.57"><stop offset="0" stop-color="#B0B9E1" /><stop offset="1" stop-color="#E7EFF7" /></linearGradient><path d="m452.67 596.16 45.65-48.59h68.9l-60.95 64.49z" style="fill:url(#icon-500_SVGID_42_)" /><linearGradient id="icon-500_SVGID_43_" gradientUnits="userSpaceOnUse" x1="461.835" y1="563.724" x2="495.632" y2="622.263"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><circle cx="478.73" cy="592.99" r="33.79" style="fill:url(#icon-500_SVGID_43_)" /><linearGradient id="icon-500_SVGID_44_" gradientUnits="userSpaceOnUse" x1="455.798" y1="564.313" x2="489.595" y2="622.851"><stop offset=".116" stop-color="#DEE4FF" /><stop offset=".847" stop-color="#BACBEE" /></linearGradient><circle cx="472.7" cy="593.58" r="33.79" style="fill:url(#icon-500_SVGID_44_)" /><linearGradient id="icon-500_SVGID_45_" gradientUnits="userSpaceOnUse" x1="479.001" y1="231.35" x2="503.267" y2="273.38"><stop offset="0" stop-color="#C8CBF2" /><stop offset="1" stop-color="#AFB0E7" /></linearGradient><circle cx="491.13" cy="252.36" r="24.26" style="fill:url(#icon-500_SVGID_45_)" /><linearGradient id="icon-500_SVGID_46_" gradientUnits="userSpaceOnUse" x1="474.666" y1="231.772" x2="498.933" y2="273.803"><stop offset=".116" stop-color="#DEE4FF" /><stop offset=".847" stop-color="#BACBEE" /></linearGradient><circle cx="486.8" cy="252.79" r="24.26" style="fill:url(#icon-500_SVGID_46_)" /></g></symbol><symbol viewBox="0 0 128 128" id="icon-icon"><path d="M115.147.062a13 13 0 0 1 4.94.945c1.55.63 2.907 1.526 4.069 2.688a13.148 13.148 0 0 1 2.761 4.069c.678 1.55 1.017 3.245 1.017 5.086v102.3c0 3.681-1.187 6.733-3.56 9.155-2.373 2.422-5.352 3.633-8.937 3.633H12.992c-3.875 0-7-1.26-9.373-3.779-2.373-2.518-3.56-5.667-3.56-9.445V12.704c0-3.39 1.163-6.345 3.488-8.863C5.872 1.32 8.972.062 12.847.062h102.3zM81.434 109.047c1.744 0 3.003-.412 3.778-1.235.775-.824 1.163-1.914 1.163-3.27 0-1.26-.388-2.325-1.163-3.197-.775-.872-2.034-1.307-3.778-1.307H72.57c.097-.194.145-.485.145-.872V27.09h9.01c1.743 0 2.954-.436 3.633-1.308.678-.872 1.017-1.938 1.017-3.197 0-1.26-.34-2.325-1.017-3.197-.679-.872-1.89-1.308-3.633-1.308H46.268c-1.743 0-2.954.436-3.632 1.308-.678.872-1.018 1.938-1.018 3.197 0 1.26.34 2.325 1.018 3.197.678.872 1.889 1.308 3.632 1.308h8.138v72.075c0 .193.024.339.073.436.048.096.072.242.072.436H46.56c-1.744 0-3.003.435-3.778 1.307-.775.872-1.163 1.938-1.163 3.197 0 1.356.388 2.446 1.163 3.27.775.823 2.034 1.235 3.778 1.235h34.875z" /></symbol><symbol viewBox="0 0 5760 3040" id="icon-login-bg"><image width="5760" height="3040" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAFoAAAAvgAQMAAAC1QKagAAAABGdBTUEAALGPC/xhBQAAACBjSFJN AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABlBMVEUsNEr///91v/yPAAAA AWJLR0QB/wIt3gAAAAd0SU1FB+YBBQYyN1c3BnEAAAhjSURBVHja7cExAQAAAMKg9U9tDB+gAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAACAtwFzzwABY3VrRQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0wMS0wNVQwNjo1 MDo1MyswMDowMCfNlVoAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMDEtMDVUMDY6NTA6NTQrMDA6 MDCTNxNoAAAAAElFTkSuQmCC"></image></symbol><symbol viewBox="0 0 700 700" id="icon-login-box-bg"><style>#icon-login-box-bg .st0{fill:#e5e6eb}#icon-login-box-bg .st1{fill:#fff}#icon-login-box-bg .st2{fill:#84a9ff}#icon-login-box-bg .st3{fill:#050f64}#icon-login-box-bg .st4{fill:#155bcd}#icon-login-box-bg .st5{fill:#ffbd00}#icon-login-box-bg .st6{fill:#ff654f}#icon-login-box-bg .st9{fill:#f5bdc8}#icon-login-box-bg .st10{fill:#ea8096}#icon-login-box-bg .st11{opacity:0}#icon-login-box-bg .st13{fill:#dca000}</style><path class="st0" d="M101.8 176.7c21.4-19.8 48.8-33.2 77.8-37.2 92.4-12.6 158.2 78.1 240.3 104.9 40.8 13.3 85.4 12.6 125.4 28 68.5 26.2 131.4 117.8 101 191.6-23.7 57.5-79.6 71.8-134.6 54-33.5-10.9-64.1-29.4-97.6-40.5-38.1-12.6-78.7-15.1-118.9-16.7s-80.6-2.4-119.6-12-77-28.9-101.2-60.9C40.8 343.4 48 260.8 73.1 213.7c7.4-13.9 17.2-26.3 28.7-37z" /><path class="st1" d="M82 257.1c5.7-23.2 18.9-44.7 37.3-60.4l1.7-1.5 1.8-1.4 1.8-1.4 1.8-1.3c.6-.4 1.2-.9 1.8-1.3l1.9-1.3c.6-.4 1.2-.9 1.9-1.3l1.9-1.2c5.1-3.2 10.5-6 16.1-8.4 11.1-4.7 23-7.8 35.1-9 12.1-1.1 24.3-.5 36.1 1.5 5.9 1 11.8 2.4 17.6 4 .7.2 1.5.4 2.2.6l2.2.7 2.2.7 2.1.7 2.1.7 2.1.8 2.1.8 2.1.8c5.6 2.2 11.1 4.6 16.5 7.2 5.4 2.6 10.7 5.4 15.9 8.3 10.4 5.9 20.6 12.2 30.5 18.8-10.4-5.9-20.7-11.8-31.4-17.2-5.3-2.7-10.7-5.3-16.1-7.7-5.4-2.4-10.9-4.7-16.5-6.7l-2.1-.8-2.1-.7-2.1-.7-2.1-.7-2.1-.7-2.1-.6-2.1-.6-2.1-.6c-5.7-1.5-11.5-2.8-17.3-3.7-11.6-1.9-23.5-2.5-35.2-1.3-11.7 1.1-23.2 4-34.1 8.5-5.4 2.2-10.7 4.9-15.8 7.9l-1.9 1.1c-.6.4-1.2.8-1.9 1.2l-1.8 1.2c-.6.4-1.2.8-1.8 1.3l-1.8 1.3-1.8 1.3-1.8 1.3-1.7 1.4c-18.2 15.2-32 35.7-39.1 58.4z" /><path class="st2" d="M183.1 543.2c-.3 1.2-.5 1.8-.5 1.8-.7-.5-1.4-.9-2.1-1.4-120.8-82.8-72.6-232.2-72.6-232.2 115.7 67.3 80.1 213.8 75.2 231.8z" /><path class="st3" d="M183.1 543.2c-.3 1.2-.5 1.8-.5 1.8-.7-.5-1.4-.9-2.1-1.4-10.1-29.9-20.1-59.8-29.8-89.8-5-15.5-10-31.1-14.8-46.7l-3.6-11.7-3.5-11.7c-1.2-3.9-2.2-7.8-3.4-11.8-.6-2-1.1-3.9-1.6-5.9l-1.6-5.9 1.6 5.9c.5 2 1.1 3.9 1.7 5.9 1.2 3.9 2.3 7.8 3.5 11.7l3.6 11.7 3.7 11.7c5 15.5 10.2 31 15.4 46.5 10.4 30 20.8 59.9 31.4 89.7zm-45.2-158.3c-.1 0-.2 0-.4-.1-.3-.1-.4-.5-.2-.8 3.7-7.2 6-15.3 6.7-23.4 0-.3.3-.5.6-.5s.5.3.5.6c-.7 8.2-3.1 16.5-6.9 23.8 0 .3-.2.4-.3.4zm16.1 45.6h-.3c-.3-.1-.4-.5-.3-.7 3.4-8.3 7.6-16.4 12.3-24.1.2-.3.5-.3.8-.2.3.2.3.5.2.8-4.7 7.6-8.8 15.6-12.2 23.9-.1.1-.3.3-.5.3zm-16.6 9.8h-.3c-9.5-3.9-18.3-9.3-26.1-16.1-.2-.2-.3-.6-.1-.8.2-.2.6-.3.8-.1 7.7 6.7 16.3 12 25.7 15.9.3.1.4.5.3.7 0 .2-.1.3-.3.4zm-11.5-49.8c-.2.1-.4.1-.6-.1l-19.2-15c-.2-.2-.3-.6-.1-.8.2-.2.6-.3.8-.1l19.2 15c.2.2.3.6.1.8 0 .1-.1.2-.2.2zm44.8 87.9h-.3c-.3-.1-.4-.5-.3-.7l10.1-23.5c.1-.3.5-.4.7-.3.3.1.4.5.3.7l-10.1 23.5c0 .1-.2.3-.4.3zm-19.1 3.2h-.3l-24.3-10c-.3-.1-.4-.5-.3-.7.1-.3.5-.4.7-.3l24.3 10c.3.1.4.5.3.7-.1.1-.3.3-.4.3z" /><path class="st4" d="M182.3 543.2c.3 1.2.4 1.9.4 1.9-.8-.1-1.7-.2-2.5-.3C35 525 11 369.8 11 369.8c133.5 8.2 167.5 155.1 171.3 173.4z" /><path class="st1" d="M182.3 543.2c.3 1.2.4 1.9.4 1.9-.8-.1-1.7-.2-2.5-.3-22.5-22.1-44.8-44.4-66.9-66.8-11.5-11.6-22.9-23.3-34.2-35.1l-8.5-8.8-8.4-8.9c-2.8-3-5.5-6-8.3-9-1.4-1.5-2.7-3-4.1-4.6l-4-4.6 4.1 4.5c1.4 1.5 2.7 3 4.1 4.5 2.8 3 5.6 6 8.4 8.9l8.5 8.8 8.6 8.7c11.5 11.6 23 23.1 34.7 34.6 22.5 22.2 45.2 44.3 68.1 66.2zM70.7 422.1c-.1.1-.2.1-.3.1-.3 0-.6-.3-.6-.6.1-8.1-1.5-16.4-4.5-23.9-.1-.3 0-.6.3-.7.3-.1.6 0 .7.3 3 7.7 4.6 16.1 4.6 24.4 0 .1-.1.3-.2.4zm34.9 33.4c-.1.1-.2.1-.3.1-.3 0-.6-.2-.6-.5-.7-9-.6-18.1.2-27 0-.3.3-.5.6-.5s.5.3.5.6c-.8 8.9-.9 17.9-.2 26.8.1.2 0 .4-.2.5zm-10.4 16.2c-.1.1-.2.1-.3.1-10.3.8-20.5-.1-30.5-2.7-.3-.1-.5-.4-.4-.7.1-.3.4-.5.7-.4 9.9 2.5 20 3.4 30.1 2.6.3 0 .6.2.6.5 0 .4-.1.5-.2.6zm-32.6-39.3c-.1.1-.3.2-.5.2l-23.9-4.8c-.3-.1-.5-.4-.4-.7.1-.3.4-.5.7-.4l23.9 4.8c.3.1.5.4.4.7-.1.1-.1.2-.2.2zm79.5 58.4c-.1.1-.2.1-.3.1-.3 0-.6-.2-.6-.5l-1.5-25.5c0-.3.2-.6.5-.6s.6.2.6.5l1.5 25.5c0 .2-.1.4-.2.5zm-15.7 11.5c-.1.1-.2.1-.3.1l-26.2 2c-.3 0-.6-.2-.6-.5s.2-.6.5-.6l26.2-2c.3 0 .6.2.6.5 0 .2-.1.4-.2.5z" /><path class="st5" d="M259.6 503.3c1.2.5 1.8.7 1.8.7-.5.7-1.1 1.3-1.7 1.9C164 616.8 20.9 552.3 20.9 552.3c79.7-107.4 221.4-55.9 238.7-49z" /><path class="st1" d="M259.6 503.3c1.2.5 1.8.7 1.8.7-.5.7-1.1 1.3-1.7 1.9-30.8 6.8-61.6 13.3-92.5 19.7-16 3.3-32 6.5-48 9.6l-12 2.3-12 2.2c-4 .7-8 1.4-12.1 2-2 .4-4 .6-6 .9l-6.1.9 6-1c2-.3 4-.6 6-1 4-.7 8-1.4 12-2.2l12-2.3 12-2.4c16-3.3 31.9-6.7 47.9-10.2 31-6.9 61.9-13.9 92.7-21.1zM97.3 530.8c0 .1 0 .2-.1.3-.2.3-.5.3-.8.2-6.8-4.5-14.6-7.7-22.5-9.3-.3-.1-.5-.4-.4-.7.1-.3.4-.5.7-.4 8.1 1.6 16 4.9 22.9 9.5.1 0 .1.2.2.4zm47-11.1c0 .1 0 .2-.1.3-.2.3-.5.4-.8.2-7.9-4.3-15.5-9.4-22.5-14.9-.2-.2-.3-.6-.1-.8.2-.2.6-.3.8-.1 7 5.5 14.6 10.5 22.4 14.8.2.1.3.3.3.5zm7.9 17.6c0 .1 0 .2-.1.3-4.9 9-11.3 17.2-18.8 24.1-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8 7.5-6.9 13.7-14.9 18.6-23.8.2-.3.5-.4.8-.2.2.1.3.3.3.4zm-50.7 5.9c.1.2 0 .4-.1.6l-17 17.5c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8l17-17.5c.2-.2.6-.2.8 0 .1 0 .1.1.1.2zm92.3-34.8c0 .1 0 .2-.1.3-.2.3-.5.4-.8.2l-22.2-12.7c-.3-.2-.4-.5-.2-.8.2-.3.5-.4.8-.2l22.2 12.7c.2.2.3.3.3.5zm1.1 19.4c0 .1 0 .2-.1.3l-12.7 23.1c-.2.3-.5.4-.8.2-.3-.2-.4-.5-.2-.8l12.7-23.1c.2-.3.5-.4.8-.2.1.2.3.3.3.5z" /><path class="st2" d="M608.8 430.3c-1 .2-2.4-.3-4.4-1.4-3.2-1.9-8.3-4.9-10.2-6.1 3 6.3 5.8 12.7 8.3 19.2 4.5-1 7.9-.1 10.1 1.4 2.2 1.5 3.3 3.6 3.3 4.6-.1 2-1.8 2.4-4.9.3-1.6-1.1-3.7-2.6-5.5-3.9-1.3-.9-2.3-1.7-2.8-2 .8 2 1.5 4 2.2 6h.2c1.3.2 3.1 3.1 3.9 4.1 1.7 2.3 3 4.9 3.2 7.8.1 1.2-.1 2.6-1.2 3.2-1.2.6-2.6-.3-3.5-1.3-2.5-2.8-4-6.5-4.1-10.2 0-1-.1-3.3 1.2-3.5-.8-2-1.5-3.9-2.3-5.9-.1.6-.4 1.9-.7 3.4-.5 2.1-1.1 4.7-1.7 6.4-1.1 3.5-2.7 4.1-4 2.8-.7-.7-1.1-2.7-.3-5.2.8-2.4 2.6-5.3 6.6-7.7-2.7-6.4-5.6-12.7-8.8-18.9-.1.8-.3 2.2-.5 3.7-.3 2.6-.9 5.7-1.4 7.8-.5 2.1-1.2 3.4-2 4-.8.6-1.7.4-2.5-.3-.9-.7-1.6-3.1-.9-6.2.6-2.9 2.6-6.5 7-9.6-3.5-6.6-7.2-13.1-11.2-19.4v.3c0 1 0 2.5-.1 4.1-.1 1.6-.2 3.4-.3 5-.1 1.7-.4 3.3-.5 4.6-.8 5.3-3 6.6-5.2 5-1.2-.8-2.1-3.7-1.7-7.4.2-1.9.9-4 2.2-6.2 1.1-2 2.8-4.2 5.2-6.3-3.8-5.8-7.8-11.5-12-17 .1 1.2.2 2.8.2 4.6.1 1.8.1 3.9.1 5.8v2.8c0 .9-.1 1.8-.1 2.5-.4 6.1-2.8 7.8-5.5 6.2-.7-.4-1.4-1.4-1.9-2.8s-.8-3.3-.7-5.4c.1-2.2.7-4.6 1.9-7.3 1.1-2.4 2.8-5 5.2-7.6-4.2-5.4-8.5-10.5-13.1-15.5l2-1.8c4.5 5.2 8.8 10.5 12.9 16 3.1-1.6 6.1-2.5 8.8-2.7 3-.3 5.6.1 7.8.9s4 1.9 5.3 3.1c1.2 1.2 2 2.4 2.2 3.3.7 3.5-2 4.7-8 2.5-3.1-1.2-7.3-2.8-10.7-4.2-1.7-.6-3.3-1.2-4.4-1.6 4.1 5.6 8 11.5 11.6 17.4 2.9-1.2 5.6-1.7 8-1.8 2.6 0 4.8.5 6.7 1.4 3.8 1.7 5.8 4.5 6 6 .3 3.1-2 4-7.1 1.6-2.6-1.3-6.1-3-9-4.4-1.4-.7-2.8-1.3-3.7-1.8-.1 0-.1-.1-.2-.1 3.9 6.4 7.5 13 10.8 19.8 5.1-1.6 9.2-.9 12 .7 2.8 1.6 4.3 4 4.4 5.2-.7 1.1-1.2 1.8-2.2 2zM552.1 373.7c-.5 1.1-.8 1.7-.8 1.7l-1.8-1.8c-105.3-101.8-32.8-241.1-32.8-241.1 102.7 85.7 43.2 224.2 35.4 241.2z" /><path class="st1" d="M552.1 373.7c-.5 1.1-.8 1.7-.8 1.7l-1.8-1.8c-5-31.1-9.8-62.3-14.4-93.5-2.4-16.1-4.7-32.3-6.8-48.5l-1.6-12.1-1.5-12.2c-.5-4.1-.9-8.1-1.4-12.2-.2-2-.4-4.1-.6-6.1l-.5-6.1.6 6.1c.2 2 .4 4.1.7 6.1.5 4 1 8.1 1.5 12.1l1.6 12.1 1.7 12.1c2.4 16.1 4.9 32.3 7.5 48.4 5.1 31.4 10.3 62.7 15.8 93.9zM533.9 210c-.1 0-.2 0-.3-.1-.3-.2-.3-.5-.1-.8 4.9-6.5 8.5-14.1 10.6-21.9.1-.3.4-.5.7-.4.3.1.5.4.4.7-2.1 8-5.8 15.7-10.7 22.3-.3.1-.5.2-.6.2zm8.3 47.6c-.1 0-.2 0-.3-.1-.3-.2-.3-.5-.2-.8 4.8-7.6 10.2-14.9 16.2-21.7.2-.2.6-.3.8-.1.2.2.3.6.1.8-5.9 6.7-11.3 13.9-16.1 21.5-.1.3-.3.4-.5.4zm-18 6.9c-.1 0-.2 0-.3-.1-8.7-5.4-16.5-12.2-23-20.2-.2-.2-.2-.6.1-.8.2-.2.6-.2.8.1 6.4 7.9 14.1 14.6 22.7 19.9.3.2.3.5.2.8-.2.2-.4.3-.5.3zm-3-51c-.2 0-.4 0-.5-.2l-16.5-18c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l16.5 18c.2.2.2.6 0 .8-.1.2-.2.2-.3.2zm29.5 94.2c-.1 0-.2 0-.3-.1-.3-.2-.3-.5-.2-.8l13.9-21.5c.2-.3.5-.3.8-.2.3.2.3.5.2.8l-13.9 21.5c-.1.2-.3.3-.5.3zm-19.5-.1c-.1 0-.2 0-.3-.1l-22.3-13.9c-.3-.2-.3-.5-.2-.8.2-.3.5-.3.8-.2l22.3 13.9c.3.2.3.5.2.8-.1.2-.3.3-.5.3z" /><path class="st4" d="M526.6 382.8c-1 .7-1.6 1-1.6 1-.2-.8-.4-1.6-.6-2.5-35-142.2 100.5-221.5 100.5-221.5 41.5 127.2-82.7 212.8-98.3 223z" /><path class="st3" d="M526.6 382.8c-1 .7-1.6 1-1.6 1-.2-.8-.4-1.6-.6-2.5 12.3-29 24.8-58 37.5-86.8 6.6-14.9 13.3-29.8 20-44.7l5.1-11.1 5.2-11.1c1.7-3.7 3.6-7.3 5.3-11 .9-1.8 1.8-3.6 2.7-5.5l2.8-5.4-2.7 5.5c-.9 1.8-1.8 3.6-2.7 5.5-1.7 3.7-3.5 7.4-5.2 11.1l-5.1 11.1-5 11.2c-6.6 14.9-13 29.9-19.4 44.9-12.2 29.2-24.3 58.5-36.3 87.8zm71.6-148.3c-.1-.1-.2-.2-.2-.3-.1-.3 0-.6.3-.7 7.6-2.9 14.7-7.4 20.6-13 .2-.2.6-.2.8 0 .2.2.2.6 0 .8-6 5.7-13.3 10.2-21 13.2-.1.1-.3.1-.5 0zM580 279.3c-.1-.1-.2-.1-.2-.2-.1-.3 0-.6.3-.8 8.1-3.9 16.6-7.2 25.2-9.7.3-.1.6.1.7.4.1.3-.1.6-.4.7-8.6 2.5-17 5.8-25 9.7-.3 0-.5 0-.6-.1zm-19-3.8c-.1-.1-.2-.1-.2-.3-4.5-9.3-7.4-19.1-8.7-29.3 0-.3.2-.6.5-.6s.6.2.6.5c1.3 10.1 4.2 19.8 8.6 29 .1.3 0 .6-.3.8-.1 0-.3 0-.5-.1zm24.6-44.7c-.2-.1-.3-.2-.4-.4l-4.4-24c-.1-.3.1-.6.5-.7.3-.1.6.1.7.5l4.4 24c.1.3-.1.6-.5.7-.1-.1-.2-.1-.3-.1zm-25.1 95.4c-.1-.1-.2-.1-.2-.2-.1-.3 0-.6.3-.8l23.2-10.8c.3-.1.6 0 .8.3.1.3 0 .6-.3.8l-23.2 10.8c-.2 0-.4 0-.6-.1zm-16.4-10.4c-.1-.1-.2-.1-.2-.2l-11.5-23.7c-.1-.3 0-.6.3-.8.3-.1.6 0 .8.3l11.5 23.7c.1.3 0 .6-.3.8-.2 0-.5 0-.6-.1z" /><path class="st5" d="M482.2 415.1c-1.2 0-1.9-.1-1.9-.1l.9-2.4C532.4 275.4 689 286.2 689 286.2c-37.4 128.5-188.2 129.3-206.8 128.9z" /><path class="st1" d="M482.2 415.1c-1.2 0-1.9-.1-1.9-.1l.9-2.4c26.5-17 53.2-33.9 79.9-50.6 13.9-8.6 27.8-17.2 41.7-25.6l10.5-6.3 10.5-6.2c3.5-2.1 7.1-4.1 10.6-6.1 1.8-1 3.6-2 5.3-3l5.4-2.9-5.3 3c-1.8 1-3.6 2-5.3 3-3.5 2.1-7 4.1-10.5 6.2l-10.5 6.4-10.4 6.4c-13.8 8.6-27.6 17.4-41.4 26.2-26.6 17.2-53.1 34.5-79.5 52zM624.9 333c0-.1-.1-.2 0-.4.1-.3.4-.5.7-.4 7.9 1.8 16.3 2.2 24.3.9.3 0 .6.2.7.5 0 .3-.2.6-.5.7-8.2 1.3-16.7 1-24.8-.9l-.4-.4zm-40.3 26.7c0-.1-.1-.2 0-.3 0-.3.3-.5.6-.5 8.9 1.3 17.8 3.4 26.3 6.2.3.1.5.4.4.7-.1.3-.4.5-.7.4-8.5-2.7-17.3-4.8-26.1-6.1-.3-.1-.4-.3-.5-.4zm-13.5-13.8c-.1-.1-.1-.2-.1-.3 1.5-10.2 4.6-20 9.3-29.2.1-.3.5-.4.8-.2.3.1.4.5.2.8-4.6 9.1-7.7 18.7-9.2 28.8 0 .3-.3.5-.6.5-.2-.2-.4-.3-.4-.4zm45.5-23.1c-.1-.2-.1-.4-.1-.6l9.9-22.3c.1-.3.5-.4.8-.3.3.1.4.5.3.8l-9.9 22.3c-.1.3-.5.4-.8.3l-.2-.2zm-74.5 64.6c0-.1-.1-.2 0-.3.1-.3.3-.5.7-.5l25.2 4.2c.3.1.5.3.5.7-.1.3-.3.5-.7.5l-25.2-4.2c-.3-.1-.4-.2-.5-.4zm-7.7-17.8c0-.1-.1-.2 0-.3l3.9-26c0-.3.3-.5.6-.5s.5.3.5.6l-3.9 26c0 .3-.3.5-.6.5s-.4-.2-.5-.3z" /><path class="st2" d="M445 229c-.1 1 .4 2.4 1.6 4.3 2.1 3.1 5.4 8 6.6 9.9-6.4-2.7-13-5.1-19.6-7.3.8-4.5-.3-7.9-1.9-10-1.6-2.2-3.7-3.1-4.8-3-2 .2-2.3 1.9 0 4.9 1.1 1.5 2.8 3.5 4.2 5.3 1 1.2 1.8 2.2 2.2 2.7-2-.7-4.1-1.3-6.1-1.9v-.2c-.3-1.3-3.3-3-4.3-3.7-2.4-1.6-5.1-2.7-7.9-2.8-1.2 0-2.6.3-3.1 1.4-.5 1.2.5 2.6 1.5 3.4 2.9 2.4 6.7 3.6 10.4 3.5 1 0 3.3 0 3.5-1.4 2 .7 4 1.3 6 2-.6.2-1.9.5-3.4.9-2.1.6-4.6 1.4-6.3 2-3.4 1.3-4 2.9-2.6 4.2.7.6 2.8 1 5.2 0 2.4-.9 5.2-2.9 7.3-7 6.6 2.3 13 4.9 19.3 7.7-.8.1-2.2.4-3.7.7-2.5.5-5.6 1.2-7.7 1.8-2.1.6-3.3 1.4-3.9 2.2-.5.8-.4 1.7.4 2.5s3.2 1.4 6.2.5c2.9-.8 6.3-2.9 9.3-7.5 6.8 3.1 13.5 6.5 20 10.2h-.3c-1 .1-2.5.2-4.1.4-1.6.2-3.3.4-5 .6-1.7.2-3.3.5-4.6.8-5.2 1.1-6.4 3.3-4.7 5.5.9 1.1 3.8 1.9 7.5 1.3 1.9-.3 4-1.1 6.1-2.5 2-1.3 4-3 6-5.5 6 3.4 11.9 7.1 17.7 11.1h-4.6c-1.8 0-3.9.1-5.8.2-1 .1-1.9.1-2.8.2-.9.1-1.7.2-2.5.3-6.1.8-7.6 3.2-5.9 5.8.4.7 1.5 1.3 2.9 1.7 1.5.4 3.3.7 5.5.4 2.2-.3 4.6-.9 7.2-2.3 2.3-1.2 4.8-3 7.3-5.6 5.6 3.9 11 8 16.2 12.3l1.7-2.1c-5.4-4.2-11-8.2-16.7-12 1.4-3.2 2.1-6.2 2.2-8.9.1-3-.4-5.6-1.3-7.7-.9-2.1-2.1-3.9-3.4-5.1-1.3-1.2-2.5-1.9-3.4-2-3.5-.5-4.6 2.2-2 8.1 1.4 3 3.2 7.1 4.8 10.5.7 1.7 1.4 3.2 1.9 4.3-5.9-3.8-11.9-7.4-18-10.7 1-3 1.4-5.7 1.3-8.1-.1-2.6-.8-4.8-1.7-6.6-1.9-3.7-4.8-5.5-6.3-5.6-3.1-.2-3.9 2.3-1.2 7.2 1.4 2.5 3.3 5.9 4.9 8.8.8 1.4 1.5 2.7 2 3.6 0 .1.1.1.1.2-6.6-3.5-13.4-6.8-20.3-9.7 1.3-5.2.4-9.2-1.3-11.9-1.8-2.8-4.2-4.1-5.4-4.1-1.6.3-2.3.8-2.4 1.8zM100.2 255.8c1-.1 2.4.5 4.3 1.8 3 2.2 7.8 5.7 9.6 7-2.4-6.5-4.6-13.2-6.4-19.9-4.6.6-7.9-.6-9.9-2.3-2.1-1.7-3-3.9-2.8-4.9.3-2 2-2.2 4.9.2 1.5 1.2 3.4 3 5.1 4.4 1.2 1 2.2 1.9 2.6 2.3-.6-2.1-1.1-4.1-1.6-6.2h-.2c-1.3-.3-2.8-3.4-3.5-4.5-1.5-2.4-2.5-5.2-2.5-8 0-1.2.4-2.6 1.5-3 1.3-.5 2.6.6 3.4 1.6 2.3 3 3.3 6.8 3.1 10.5-.1 1-.2 3.3-1.5 3.4.6 2 1.2 4.1 1.8 6.1.2-.6.6-1.9 1-3.4.7-2.1 1.6-4.5 2.3-6.2 1.4-3.4 3.1-3.9 4.3-2.4.6.7.8 2.8-.2 5.2-1 2.4-3.1 5-7.3 7 2 6.6 4.4 13.2 6.9 19.6.2-.8.5-2.2.8-3.7.6-2.5 1.4-5.6 2.1-7.6.7-2.1 1.5-3.3 2.4-3.8.9-.5 1.7-.3 2.5.5s1.2 3.3.3 6.2c-.9 2.8-3.2 6.2-7.8 8.9 2.8 6.9 5.9 13.8 9.3 20.4v-.3c.1-1 .3-2.4.5-4s.5-3.3.8-5c.3-1.7.7-3.3 1-4.6 1.3-5.2 3.6-6.3 5.7-4.5 1.1.9 1.8 3.9 1 7.5-.4 1.8-1.3 3.9-2.8 6-1.3 1.9-3.2 3.9-5.8 5.8 3.2 6.2 6.6 12.2 10.3 18.1 0-1.2.1-2.8.2-4.6.1-1.8.3-3.9.5-5.8.1-1 .2-1.9.3-2.8.1-.9.3-1.7.4-2.5 1-6 3.5-7.5 6.1-5.6.6.5 1.2 1.5 1.6 3 .3 1.5.5 3.3.2 5.5s-1.1 4.5-2.6 7.1c-1.3 2.3-3.2 4.7-5.9 7 3.6 5.7 7.5 11.3 11.6 16.7l-2.2 1.6c-4-5.6-7.8-11.3-11.3-17.2-3.3 1.3-6.3 1.9-9 1.9-3 0-5.6-.6-7.7-1.6-2.1-1-3.8-2.3-4.9-3.6-1.1-1.3-1.8-2.6-1.8-3.4-.3-3.5 2.4-4.5 8.2-1.7 2.9 1.5 7 3.5 10.3 5.2 1.7.8 3.1 1.5 4.2 2-3.6-6-6.9-12.2-9.9-18.5-3 .9-5.7 1.2-8.1 1-2.6-.2-4.7-1-6.5-2-3.6-2-5.3-5-5.4-6.6 0-3.1 2.4-3.8 7.2-.9 2.4 1.5 5.8 3.5 8.6 5.2 1.4.9 2.6 1.6 3.5 2.1.1 0 .1.1.2.1-3.3-6.8-6.2-13.7-8.8-20.7-5.3 1.1-9.2 0-11.9-1.8-2.7-1.9-3.9-4.4-3.8-5.6-.1-.9.5-1.6 1.5-1.7z" /><path class="st4" d="M106.8 558.3c0 13.1 8.1 23.7 18.2 23.7h455c10.1 0 18.2-10.6 18.2-23.7H106.8z" /><path class="st2" d="M155.4 290.9h394.2v247.6H155.4z" /><path class="st3" d="M556.6 264.8h-408c-7.6 0-13.8 6.2-13.8 13.8V540c0 7.6 6.2 13.8 13.8 13.8h408c7.6 0 13.8-6.2 13.8-13.8V278.6c0-7.7-6.2-13.8-13.8-13.8z" /><path class="st1" d="M155.4 285.5h394.2v247.6H155.4z" /><path class="st0" d="M295.7 558.3h-99.1l.3-4.4.4-5.5h97.6zm212.9 0h-99.2l.4-4.4.4-5.5h97.6zM188 451.7h34.4v3.9H188zm47 0h34.4v3.9H235zm93.6 0h24.9v3.9h-24.9zm46.2 0h38.7v3.9h-38.7zm-32.5 13.4h17.6v3.9h-17.6zm0 10.2h17.6v3.9h-17.6zm0 10.3h17.6v3.9h-17.6zm0 10.2h17.6v3.9h-17.6z" /><path class="st6" d="M209.7 465.1h12.7v3.9h-12.7z" /><path class="st2" d="M209.7 475.3h12.7v3.9h-12.7z" /><path class="st4" d="M209.7 485.6h12.7v3.9h-12.7z" /><path class="st5" d="M209.7 495.8h12.7v3.9h-12.7z" /><path class="st0" d="M399.7 465.1h17.6v3.9h-17.6zm0 10.2h17.6v3.9h-17.6zm0 10.3h17.6v3.9h-17.6zm0 10.2h17.6v3.9h-17.6zm-165.1-30.7h17.6v3.9h-17.6zm0 10.2h26.1v3.9h-26.1zm0 10.3h32.9v3.9h-32.9zm0 10.2h15.1v3.9h-15.1zm-54.2-181.2H306v6.9H180.4z" /><path class="st4" d="M180.4 340.4h17.8v7.5h-17.8zm35.7 0h17.8v7.5h-17.8zm35.7 0h17.8v7.5h-17.8zm35.7 0h17.8v7.5h-17.8zm35.8 0h17.8v7.5h-17.8zm35.7 0h17.8v7.5H359zm35.7 0h17.8v7.5h-17.8z" /><path class="st0" d="M180.4 355.7h249.8v2.3H180.4z" /><path class="st0" d="M427.7 446.2H181v-90.4h-2v92.5h250.7v-92.5h-2v90.4z" /><path class="st0" d="M405.1 355.7h2v91.5h-2zm-22.7 0h2.1v91.5h-2.1zm-22.6 0h2v91.5h-2zm-22.6 0h2v91.5h-2zm-22.6 0h2v91.5h-2zm-22.6 0h2v91.5h-2zm-22.6 0h2v91.5h-2zm-22.6 0h2v91.5h-2zm-22.6 0h2v91.5h-2zm-22.6 0h2.1v91.5h-2.1z" /><path class="st0" d="M179 355.7h250.7v2H179zm1 22.7h248.7v2H180zm0 22.6h248.7v2H180zm0 22.6h248.7v2H180z" /><path class="st2" d="M203.6 396.2h16.2v50.1h-16.2zm45.2-10.4H265v60.5h-16.2zm45.3 24.7h16.2v35.8h-16.2zm45.2-36.8h16.2v72.6h-16.2zm45.2 19.6h16.2v53h-16.2z" /><path class="st6" d="M201.6 396.2h16.2v50.1h-16.2zm45.2-10.4H263v60.5h-16.2zm45.2 24.7h16.2v35.8H292zm45.2-36.8h16.2v72.6h-16.2zm45.3 19.6h16.2v53h-16.2z" /><path class="st0" d="M179 471.1h250.7v2.1H179zM179 481.3h250.7v2.1H179zM179 491.6h250.7v2.1H179zM179 501.8h250.7v2.1H179z" /><path class="st6" d="M473.5 352.4c.9-5.5 5.4-9.8 10.9-10.6l-.2-5.1-.5-12.6c-14.7 1.2-26.4 12.7-27.9 27.2l12.6.8 5.1.3z" /><path class="st5" d="M491.1 366.7c-1.5.6-3.1.9-4.8.9-2.9 0-5.6-.9-7.7-2.5l-3.5 3.8-8.5 9.2c5.3 4.5 12.2 7.2 19.7 7.2 4.7 0 9.1-1 13-2.9l-5.9-11.1-2.3-4.6zm25.2-5.4-12.4-2.1c-1.2 4.6-4 8.4-7.9 10.9l5.9 11.1 2.7 5.2c8.8-5.1 15.3-13.8 17.5-24.1l-5.8-1z" /><path class="st6" d="m468.2 354.9-12.6-.8-5.9-.4v.9c0 10.1 4.1 19.3 10.7 25.9l4-4.3 8.5-9.2c-2.8-3.2-4.6-7.4-4.7-12.1z" /><path class="st4" d="m495.9 339.3-2.4 4.6c3.5 2.3 5.7 6.3 5.7 10.8v.8l5.1.9 12.4 2.1c.2-1.3.2-2.5.2-3.8 0-11.3-6.1-21.2-15.2-26.5l-5.8 11.1zm-8.9-2.7c2.3.1 4.4.6 6.4 1.4l5.8-11.2 2.7-5.2c-4.7-2.3-10-3.5-15.7-3.5l.2 5.9.6 12.6z" /><path class="st0" d="M446.7 407.2h78.4v3.9h-78.4zm0 34.3h3.9v3.9h-3.9zm7.7 0h70.7v3.9h-70.7z" /><path class="st4" d="M446.7 456.1h3.9v3.9h-3.9z" /><path class="st0" d="M454.4 456.1h70.7v3.9h-70.7z" /><path d="M446.7 470.8h3.9v3.9h-3.9z" style="fill:#6292ff" /><path class="st0" d="M454.4 470.8h70.7v3.9h-70.7z" /><path d="M446.7 485.4h3.9v3.9h-3.9z" style="fill:#da5544" /><path class="st0" d="M454.4 485.4h70.7v3.9h-70.7z" /><path class="st5" d="M446.7 500h3.9v3.9h-3.9z" /><path class="st0" d="M454.4 500h70.7v3.9h-70.7zm-7.7-82.3h78.4v13h-78.4z" /><path class="st3" d="M522.8 556.7c.3-.3.7-.5 1.1-.6.4-.1.8-.1 1.3-.1 1-.1 2-.3 2.9-.8.5-.3.9-.6 1.4-.8l2.9.1c.4.4.7 1 .8 1.6.1.5.1 1.1.1 1.6v.6h-10.8v-.6c0-.4 0-.8.3-1z" /><path class="st9" d="m532.7 551.2-.3 3.3-3-.1-.2-3z" /><path class="st3" d="M494 555.5c.3-.3.7-.4 1.1-.5.4 0 .8 0 1.3.1 1 .1 2.1-.1 3-.5.5-.2 1-.5 1.5-.6l2.9.4c.4.5.5 1.1.6 1.7.1.5 0 1.1-.1 1.6l-.1.6-10.7-1.2.1-.6c0-.4.1-.8.4-1z" /><path class="st4" d="M535.3 503.7c.6-11.4.5-27.5-2.6-36.6 0-.2-23.9 2-23.9 2l-5.6 22.9c-2 8.1-2.9 16.3-2.8 24.6l.3 34.4 4 .3 7.5-45.5c2.8-5.4 5.8-11.6 8.1-17.7l8.7 63.4 4-.2c0-.1 2.3-47.6 2.3-47.6z" /><path class="st9" d="m504.5 551.2-.7 3.2-2.9-.4.1-3z" /><path class="st10" d="M481.6 394.3c.7-.3 1.6 0 1.9.7 2 4 4.2 7.8 6.6 11.5 2.4 3.7 5 7.2 7.8 10.5s5.8 6.4 9.1 9.1c1.6 1.4 3.3 2.7 5 3.9.4.3.9.6 1.3.9l1.3.9c.9.6 1.8 1.1 2.7 1.7.3.2.5.4.8.6.2.2.4.5.6.7.3.5.6 1.1.7 1.8.3 1.3.1 2.7-.7 4-.8 1.3-2 2.1-3.3 2.3-.7.1-1.4.1-2.1 0-.3-.1-.7-.2-1-.3l-.9-.6c-.9-.7-1.8-1.5-2.7-2.3l-1.3-1.2c-.4-.4-.9-.8-1.3-1.2-1.7-1.6-3.4-3.4-4.9-5.1-3.1-3.5-6-7.3-8.5-11.2-2.5-3.9-4.7-8-6.6-12.2-1.9-4.2-3.6-8.4-5.1-12.7-.5-.7-.1-1.5.6-1.8z" /><path class="st2" d="m500.2 434.6 9.4 7.3c2.8 2.2 6.8 1.9 9-.9s1.8-7.2-1.1-9.4l-9.4-7.3-7.9 10.3z" /><path class="st2" d="M521.8 428.5c-9-.1-16 7.9-14.8 16.8l1.8 23.7c10 3.6 17.5 1.6 23.9-2l1.1-25.2c.7-7.1-4.9-13.2-12-13.3z" /><path class="st1" d="m531.8 433.5-.2.2c1 1.4 1.7 3 2 4.7h.3c-.3-1.7-1-3.4-2.1-4.9zm-9.9 37.3v.3c2.2-.2 4.4-.8 6.6-1.7l-.1-.2c-2.1.8-4.2 1.3-6.5 1.6zm5.1-41.3c-1.6-.8-3.4-1.2-5.2-1.2h-.2c-4.3 0-8.5 1.9-11.3 5.2-1.7 1.9-2.8 4.2-3.3 6.6l.3.1c1.5-6.6 7.4-11.6 14.5-11.5 1.9 0 3.6.5 5.2 1.2v-.4zM508.6 466c-.1 0-.2.1-.3.1l.2 3 .2.1c2.2.8 4.5 1.4 6.6 1.7v-.3c-2.1-.3-4.2-.8-6.5-1.7l-.2-2.9zm-1.8-20.6.9 12h.3l-.9-12h-.3z" /><path class="st3" d="M524 412.1s6.2 1.5 4.7 8.4c-1 4.6-4.4 7-9.2 7.8l4.5-16.2z" /><path class="st9" d="m517.5 423.7.5 7.1c2 1.2 4 1.1 5.9-.3l-.5-7.1-5.9.3z" /><path class="st10" d="m517.6 424.6.1 2.2c.9.5 1.9.7 3 .7h.2c1-.1 2-.5 2.7-1.2l-.1-2.1-5.9.4z" /><path class="st9" d="m514.6 415.4.4 5.3.1 1.2c.3 2.9 2.7 5.1 5.6 5.1.3 0 .6 0 .9-.1.1 0 .2-.1.3-.1h.1c.4-.2.8-.4 1.1-.8.7-.8 1.1-1.6 1.5-2.5.3-.7.6-1.5.8-2.2.2-.9.4-1.8.2-2.8l-.4-4.6-9-.7-1.6 2.2z" /><path class="st3" d="M523.9 414s-10.3.6-8.2 9.7c0 0-3.2-6.5.1-10.9 3.6-4.8 8.5-3.2 10.2-.9 1.7 2.3 3 6.1-1.8 8.9-.1-.1 1.5-3.5-.3-6.8z" /><path class="st9" d="M523.7 419.5c.1 1.2 1.1 2.1 2.3 2 1.2-.1 2.1-1.1 2-2.3-.1-1.2-1.1-2.1-2.3-2-1.2.1-2.1 1.1-2 2.3z" /><path class="st3" d="m503.8 450.8-7.4-8c4.5-4.2 6.9-9.8 6.9-15.9h10.9c0 9.1-3.8 17.8-10.4 23.9z" /><path class="st4" d="M514.2 427h-10.9c0-12-9.7-21.7-21.7-21.7-2.6 0-5.1.4-7.5 1.3l-3.8-10.2c3.6-1.3 7.4-2 11.3-2 18-.1 32.6 14.6 32.6 32.6z" /><path class="st2" d="M481.6 459.6c-18 0-32.6-14.6-32.6-32.6 0-13.6 8.6-25.9 21.4-30.6l3.8 10.2c-8.5 3.1-14.2 11.3-14.2 20.4 0 12 9.7 21.7 21.7 21.7 5.5 0 10.8-2.1 14.8-5.8l7.4 8c-6.1 5.6-14 8.7-22.3 8.7z" /><path class="st9" d="M471.1 455.3c0-.8.5-1.5 1.3-1.5 4.4-.5 8.8-1.1 13.1-2.1 4.3-.9 8.5-2.1 12.6-3.5 4.1-1.5 8-3.2 11.8-5.2 1.9-1 3.7-2.1 5.5-3.3.4-.3.9-.6 1.3-.9l1.3-.9c.8-.6 1.7-1.2 2.5-1.9.3-.2.6-.4.8-.5l.9-.3c.6-.1 1.3-.1 1.9 0 1.3.2 2.6.9 3.5 2.1.9 1.2 1.2 2.6 1 3.9-.1.7-.4 1.3-.8 1.9-.2.3-.4.6-.7.8-.3.3-.6.5-.9.7-1 .6-2.1 1.2-3.1 1.7l-1.6.8c-.5.3-1.1.5-1.6.8-2.1 1-4.3 2-6.5 2.8-4.4 1.7-9 3-13.5 3.9-4.6.9-9.2 1.5-13.7 1.9-4.6.3-9.1.4-13.7.3-.8 0-1.4-.7-1.4-1.5z" /><path class="st2" d="m515.5 452.5 10.1-6.2c3.1-1.9 4.3-5.7 2.4-8.8-1.9-3.1-6.1-4.2-9.1-2.3l-10.1 6.2 6.7 11.1z" /><path class="st1" d="M529.1 439.4c-.1-.7-.4-1.4-.8-2-.9-1.5-2.5-2.7-4.3-3.1-.3-.1-.6-.1-.9-.2v.3c2 .3 3.9 1.4 4.9 3.2 1.4 2.3 1.1 5-.5 7l.2.1c1.3-1.5 1.8-3.4 1.4-5.3zm-3.3 7.1s.1 0 .1-.1l-.3-.1-3 1.8.2.2 3-1.8zm-4.2 2.6-.2-.2-2.9 1.7.2.2 2.9-1.7zm-4.4 2.6-.2-.2-1.5.9-5.2-8.5-.2.1 5.3 8.8 1.8-1.1zm.2-15.9-7.4 4.5.1.2 7.4-4.5-.1-.2z" /><path class="st10" d="M234.4 464c0-.8-.5-1.5-1.3-1.6-2.3-.3-4.6-.6-6.9-1-2.3-.4-4.5-.8-6.7-1.3s-4.3-1.2-6.2-2c-1.9-.8-3.7-1.9-5.3-3.1-3.2-2.5-5.7-6-8-9.7-.3-.5-.6-.9-.9-1.4l-.8-1.4c-.6-1-1.1-2-1.7-3-1.1-2-2.2-4-3.2-6.1-1.4-2.6-4.7-3.5-7.2-2s-3.3 4.8-1.7 7.3c1.4 1.9 2.7 3.9 4.1 5.8.7 1 1.4 1.9 2.2 2.9l1.1 1.4c.4.5.8.9 1.1 1.4 1.6 1.9 3.2 3.7 5 5.5 1.8 1.8 3.9 3.4 6.1 4.8 2.3 1.3 4.7 2.3 7.2 3 2.5.7 4.9 1.1 7.3 1.3 2.4.2 4.8.4 7.1.4 2.4.1 4.7.1 7 .1 1 0 1.7-.6 1.7-1.3z" /><path class="st3" d="m190.5 450.4-6.3-10c-1.9-3-1.3-7 1.8-8.9 3-1.9 7.3-1.1 9.2 2l6.3 10-11 6.9z" /><path class="st9" d="m181.4 505.2 8.3 49.2 2.9-.5.8-49.1z" /><path class="st4" d="m194.2 504.7-13.6.5c-3.7-9-6.9-28.9-3.1-38.1l15.2 3.4 1.5 34.2z" /><circle transform="rotate(-16.739 184.847 470.406)" class="st4" cx="184.8" cy="470.4" r="7.9" /><path class="st9" d="m165.9 503.2-4.8 50.2 3 .2 13.5-47.8z" /><path class="st4" d="M180.4 462.7c-3.2-1-6.5.2-8.5 2.7-.1.2-.3.4-.4.6-5.7 8.3-7.5 27.6-6.3 37l13.2 3 7.3-33.4c1.3-4.2-1.1-8.6-5.3-9.9z" /><path class="st2" d="m180.4 497.1-1.9 8.9-2.2-.5v.3l2.4.5 2-9.1-.3-.1zm-11.9-25.8c-1.3 3.5-2.4 7.8-3.1 12.8v.3h.3c.6-4.6 1.7-9.1 3.1-12.9l-.3-.2zm-3.9 23.7h.3c0-2.2.2-4.5.4-6.8h-.3c-.3 2.3-.4 4.6-.4 6.8zm.6 8c-.2-1.3-.3-2.8-.3-4.4h-.3c.1 1.6.2 3.1.3 4.4v.2l8 1.8.1-.2-7.8-1.8zm18.6-21.8-1.7 7.9h.3l1.7-7.9h-.3z" /><path class="st3" d="M170.4 556.6c-.2-.4-.6-.6-1-.7-.4-.1-.8-.1-1.2-.2-1-.2-2-.6-2.8-1.2-.4-.3-.8-.7-1.3-.9l-2.9-.3c-.4.4-.8.9-1 1.5-.2.5-.2 1.1-.3 1.6l-.1.6 10.7 1.2.1-.6c.1-.3 0-.7-.2-1zm29.1-1.5c-.3-.3-.7-.4-1.2-.4-.4 0-.8.1-1.3.1-1 .1-2.1 0-3-.4l-1.5-.6-2.9.5c-.3.5-.5 1.1-.5 1.7 0 .5 0 1.1.1 1.6l.1.6 10.7-1.6-.1-.6c0-.3-.1-.6-.4-.9zM182 428.8c9 .1 15.8 8.2 14.4 17.1l-3.6 24c-6.5 2.3-15.6 1.5-23.1-.7v-27.4c-.5-7.1 5.2-13.1 12.3-13z" /><path class="st1" d="M169.4 457.4v10.4h.3v-10.4h-.3zm12.6-28.8h-.1c-.4 0-.8 0-1.2.1v.3c.4 0 .8-.1 1.3-.1 2.1 0 4 .5 5.8 1.2l.1-.2c-1.8-.9-3.8-1.3-5.9-1.3zm11.3 5.3c-.8-.9-1.7-1.8-2.7-2.5l-.2.2c3.7 2.7 6.1 7.1 6.1 11.9 0 .8-.1 1.6-.2 2.4l-.8 5.3.3.1.8-5.3c.7-4.4-.5-8.8-3.3-12.1zm-.6 36c-5.9 2.1-13.9 1.6-20.9-.1v.3c4 1 8.1 1.5 11.8 1.5 3.5 0 6.6-.5 9.2-1.4l.1-.1 2.1-13.8h-.3l-2 13.6zm-16.9-39.5-.1-.3c-1.1.6-2.1 1.4-2.9 2.3-2.4 2.5-3.6 5.9-3.3 9.3v6.4h.3v-6.4c-.4-4.7 2.1-9 6-11.3z" /><path class="st9" d="m186.2 424.7-.4 7.3c-2.1 1.1-4 1-5.9-.4l.4-7.3 5.9.4z" /><path class="st10" d="M186.1 426.9v.8c-.9.5-2 .7-3.1.7h-.2c-1-.1-1.9-.5-2.6-1.2l.1-2.1 5.8 1.8z" /><path class="st9" d="m189.3 416.4-.5 5.2-.1 1.2c-.3 2.9-2.8 5.1-5.7 5-.3 0-.6-.1-.9-.1-.1 0-.2-.1-.3-.1h-.1c-.4-.2-.8-.5-1.1-.8-.6-.8-1-1.6-1.4-2.5-.3-.8-.6-1.5-.8-2.3-.2-.9-.3-1.8-.2-2.8l.2-3.6 9.3-1.5 1.6 2.3z" /><path class="st3" d="M189 424.6s0-3.1-.1-4.6c-.1-1.4-.4-2.8-1.5-2.6-2.1.4-2.9-1.4-2.9-1.4-.6 0-1.2.1-1.9.3-3.1.8-3.6 0-4-.5-.8 2.4-.5 5.5-.5 5.8 0 .1.1.3.1.4.2.8.5 1.5.8 2.3.3.7.6 1.4 1 2v.5c-2.2-.4-4.9-2.8-5.6-4.7-2.3-7.2 1.6-11.5 7.1-12.6 4.8-.9 7.4 3.5 8.4 7.5.8 2.3-.3 7-.9 7.6z" /><path class="st9" d="M180.2 420.3c-.1 1.2-1.1 2.1-2.3 2-1.2-.1-2.1-1.1-2-2.3.1-1.2 1.1-2.1 2.3-2 1.2.1 2 1.1 2 2.3z" /><path transform="rotate(-180 274.437 454.01)" class="st2" d="M269 446.1h10.8V462H269z" /><path transform="rotate(-180 260.511 447.387)" class="st2" d="M255.1 432.8h10.8v29.1h-10.8z" /><path transform="rotate(-180 246.585 443.424)" class="st4" d="M241.2 424.9H252v37h-10.8z" /><path transform="rotate(-180 232.659 439.712)" class="st4" d="M227.2 417.5H238v44.4h-10.8z" /><path transform="rotate(-180 218.732 441.217)" class="st4" d="M213.3 420.5h10.8v41.4h-10.8z" /><path transform="rotate(-180 204.806 443.424)" class="st2" d="M199.4 424.9h10.8v37h-10.8z" /><path transform="rotate(-180 190.88 447.387)" class="st4" d="M185.5 432.8h10.8v29.1h-10.8z" /><path transform="rotate(-180 232.659 462.663)" class="st3" d="M183.1 461.9h99.2v1.5h-99.2z" /><path class="st9" d="M227.5 461.9c-.1-.8-.7-1.4-1.5-1.4h-6.9c-2.3-.1-4.6-.2-6.8-.4s-4.4-.6-6.4-1.1c-2-.6-3.9-1.3-5.7-2.4-3.5-2.1-6.5-5.1-9.3-8.5-.4-.4-.7-.8-1.1-1.3l-1-1.3c-.7-.9-1.4-1.8-2-2.7-1.4-1.8-2.7-3.7-4-5.6-1.7-2.3-5.1-2.8-7.4-.9-2.3 1.8-2.6 5.3-.6 7.5 1.6 1.7 3.2 3.4 4.9 5.2.8.9 1.7 1.7 2.5 2.6l1.3 1.3c.4.4.9.8 1.3 1.2 1.8 1.7 3.7 3.3 5.8 4.8 2.1 1.5 4.3 2.8 6.7 3.9 2.4 1 5 1.7 7.5 2 2.5.3 5 .4 7.4.3 2.4-.1 4.8-.3 7.1-.6s4.7-.6 7-.9c.7-.3 1.2-1 1.2-1.7z" /><path class="st3" d="m181.9 454.2-7.7-9c-2.3-2.7-2.2-6.7.5-9.1 2.7-2.3 7.1-2.1 9.4.7l7.7 9-9.9 8.4z" /><path class="st1" d="M179.6 434.3c-1.2-.1-2.3.1-3.4.6l.1.2c2.6-1.2 5.9-.6 7.8 1.7l.7.8.2-.2-.7-.8c-1.1-1.3-2.8-2.2-4.7-2.3zm12.2 11.6-8.1 6.8.2.2 8.3-7-4.4-5.2-.2.2 4.2 5zm-18-9.1c-1.8 2.1-1.9 5.2-.4 7.7l.2-.1c-1.4-2.3-1.4-5.3.3-7.4l-.1-.2zm7.4 17 .2-.2-3.7-4.4-.2.2 3.7 4.4z" /><path class="st3" d="M630.9 587.7H74.2c-1.6 0-2.9-1.3-2.9-2.9 0-1.6 1.3-2.9 2.9-2.9H631c1.6 0 2.9 1.3 2.9 2.9-.1 1.6-1.4 2.9-3 2.9z" /><path transform="rotate(-40.957 194.403 297.627)" class="st2" d="M179.5 288.7h29.7v17.7h-29.7z" /><path transform="rotate(-40.957 148.955 337.083)" class="st4" d="M103.6 323.8h90.6v26.6h-90.6z" /><path class="st4" d="M294.2 300.4c28.1-24.4 31.2-67.2 6.7-95.3-24.4-28.1-67.2-31.2-95.3-6.7-25.9 22.5-30.5 60.4-12.1 88.2 1.6 2.4 3.4 4.8 5.4 7.1 2 2.3 4.1 4.4 6.2 6.3 25 22.1 63.3 22.9 89.1.4zm-76.9-88.6c20.7-18 52.3-15.8 70.3 5s15.8 52.3-5 70.3-52.3 15.8-70.3-5-15.8-52.3 5-70.3z" /><path class="st2" d="M212.3 282.1c-18-20.8-15.8-52.3 5-70.3 20.7-18 52.3-15.8 70.3 5s15.8 52.3-5 70.3c-20.7 17.9-52.3 15.7-70.3-5z" style="opacity:.5" /><path class="st1" d="M263.6 217c.2-.4.4-.7.8-1 1-.8 2.5-.5 3.2.5l20.8 28.3c.8 1 .5 2.5-.5 3.2-1 .8-2.5.5-3.2-.5l-20.8-28.3c-.5-.6-.6-1.5-.3-2.2zm-11.1 8.2c.2-.4.4-.7.8-1 1-.8 2.5-.5 3.2.5l20.8 28.3c.8 1 .5 2.5-.5 3.2-1 .8-2.5.5-3.2-.5l-20.8-28.3c-.5-.6-.6-1.5-.3-2.2z" /><path class="st3" d="m410 551.8-12.9 6.5c-.2-.4-.3-.9-.2-1.4.1-.6.5-1 .9-1.3.5-.3 1-.6 1.5-.8 1.2-.7 2.2-1.6 3-2.8.4-.6.7-1.2 1.2-1.8l3.6-1.7c.7.3 1.4.8 1.9 1.4.4.5.7 1.2 1 1.9zm12.6 4.6-14.4 1.9c-.1-.5 0-1 .2-1.4.3-.5.8-.8 1.3-1 .5-.2 1.1-.2 1.7-.3 1.4-.2 2.6-.8 3.7-1.6.6-.4 1.1-.9 1.7-1.3l3.9-.4c.6.5 1.1 1.2 1.3 2 .4.7.5 1.4.6 2.1zm-6.1-47.8zM416.5 508.6zm0 0z" /><path class="st2" d="m384.1 510.1 18.8 40.3 4.7-1.9-12-37.6 9.7-15.3 11 57.2 5.1-.3.1-73.2c.1-.7-30.9-2.6-30.9-2.6l-6.8 30.4c-.1 1.1 0 2 .3 3zm32.4-1.5z" /><path class="st10" d="M352.8 484.7c1.5-1.5 3-2.8 4.5-4.2.4-.3.7-.7 1.1-1 .4-.4.7-.7 1.1-1l1-1.1.5-.5.5-.5c2.7-2.9 5.1-6 7.3-9.3 1-1.7 2.1-3.3 3.1-5l.7-1.3c.1-.2.2-.4.4-.6l.3-.7 1.3-2.6c.1-.2.2-.4.3-.7l.3-.7.6-1.3.6-1.3.3-.7.2-.3.1-.3 1.1-2.7c.4-.9.7-1.8 1.1-2.8.4-1.2 1.4-2 2.6-2.4 1.2-.4 2.6-.4 3.9.2 1.3.6 2.3 1.6 2.8 2.7.5 1.2.5 2.5-.1 3.7-.5.9-1 1.8-1.6 2.8l-1.6 2.7-.2.3-.2.3-.4.7-.9 1.3-.9 1.3-.4.7c-.1.2-.3.4-.5.7l-1.8 2.6-.5.6c-.2.2-.3.4-.5.6l-1 1.3c-1.3 1.7-2.7 3.3-4.1 4.9-2.9 3.1-6 6.1-9.2 8.7l-.6.5-.6.5-1.3.9c-.4.3-.8.6-1.3.9-.4.3-.8.6-1.3.9-1.7 1.2-3.4 2.3-5 3.4-.5.4-1.3.3-1.9-.3-.3-.6-.3-1.4.2-1.9z" /><path class="st4" d="m383.8 465.5 5.6-12.2c1.7-3.7.4-8-3.3-9.7-3.7-1.7-8.4-.1-10 3.6l-5.6 12.2 13.3 6.1z" /><path class="st4" d="M389.8 435.7c-7.7 1.9-12.2 9.9-9.6 17.5l11.9 36.1c13.9 1.7 20.3-2.7 29.7-9.7l-12.4-33.5c-3-7.9-11.4-12.4-19.6-10.4z" /><path class="st1" d="M403.3 438.2c1.4 1 2.7 2.2 3.8 3.7l.3-.3c-1.1-1.4-2.4-2.7-3.8-3.7l-.3.3zm16 43.1.2.3c.8-.6 1.5-1.1 2.3-1.7l.2-.2-3.2-8.7-.4.1 3.1 8.5c-.6.5-1.4 1.1-2.2 1.7zm-27.6 8.3h.3c2.7.3 5.1.5 7.3.4l-.1-.4c-2.2.1-4.5 0-7.2-.3l-7-21.2-.4.1 7.1 21.4zm20.6-3.7c-1 .5-1.9 1-3 1.4l.2.4c1.1-.5 2.1-1 3.1-1.5l-.3-.3zm2.1-26 .4-.2-3-8-.4.2 3 8zm-32.6-.2.4-.1-2.1-6.5c-2.3-6.8 1.2-14.1 7.6-16.8.3-.1.6-.3 1-.4l-.2-.4-.9.3c-6.8 2.8-10.3 10.4-7.9 17.4l2.1 6.5z" /><path class="st4" d="M353.2 491.4c8.2 7.9 20.6 10.6 31.7 6l-11.3-26.9-20.4 20.9z" /><path class="st3" d="m373.6 470.4 29.2-1.4c-.2-3.3-.9-6.7-2.3-9.9-2.7-6.4-7.4-11.3-13.1-14.4l-13.8 25.7zm-11.4-26.9 11.3 26.9 13.9-25.7c-7.4-4-16.7-4.8-25.2-1.2z" /><path class="st3" d="m373.6 470.4 11.3 26.9c11.6-4.9 18.4-16.4 17.8-28.3l-29.1 1.4z" /><path class="st4" d="M346.7 481.8c1.6 3.7 3.8 7 6.6 9.6l20.4-21-29-3.4c-.7 4.9-.1 9.9 2 14.8z" /><path class="st9" d="M371.3 467.3c.5-.6 1.3-.7 1.9-.3 1.8 1.2 3.7 2.4 5.6 3.4.9.5 1.9 1 2.9 1.4 1 .4 1.9.8 2.9 1.1 1 .3 1.9.5 2.8.5h1.2c.4 0 .8-.1 1.1-.2.3-.1.6-.3.9-.4.3-.2.5-.4.8-.6.2-.2.5-.5.7-.8.2-.3.4-.6.6-1 .4-.7.7-1.6 1-2.5.3-.9.5-1.8.7-2.8.4-2 .6-4 .7-6.1.1-2.1.2-4.2.2-6.4 0-2.1-.1-4.3-.2-6.5 0-1.4.5-2.6 1.5-3.6.9-.9 2.2-1.5 3.7-1.5 1.4 0 2.7.6 3.7 1.6.9 1 1.4 2.3 1.3 3.7-.2 2.3-.4 4.6-.8 6.8-.3 2.3-.7 4.6-1.1 6.9-.5 2.3-1 4.6-1.8 7-.4 1.2-.8 2.3-1.4 3.5-.6 1.2-1.2 2.3-2 3.4-.4.6-.9 1.1-1.4 1.6-.5.5-1.1 1-1.7 1.4-.6.4-1.3.8-2.1 1.1-.7.3-1.5.5-2.2.6-.7.1-1.5.1-2.2.1h-.6l-.5-.1c-.3-.1-.7-.1-1-.2-1.3-.3-2.5-.7-3.6-1.2s-2.2-1.1-3.2-1.7c-1-.6-2-1.3-2.9-2-1.9-1.4-3.6-2.8-5.3-4.3-.6-.5-.7-1.3-.2-1.9z" /><path class="st4" d="m406.8 461.8.4-13.4c.1-4.1-2.8-7.6-6.8-7.7-4.1-.1-7.7 3.2-7.9 7.2l-.4 13.4 14.7.5z" /><path class="st1" d="M392.2 449.3h.4V448c0-.5.1-.9.2-1.4l-.4-.1c-.1.5-.2 1-.2 1.5v1.3zm11.3 12.8 3.7.1.1-4.1-.4-.1-.1 3.8-3.3-.1v.4zm3.7-11.4-.2 4.9h.4l.2-5-.4.1zm-12.7-7.9.4.1c1.5-1.4 3.4-2.2 5.5-2.2 1.7.1 3.3.7 4.4 1.8l.2-.3c-1.3-1.2-2.9-1.8-4.6-1.9-1.1 0-2.2.2-3.3.6-1 .5-1.9 1.1-2.6 1.9zm-2.6 15.2.4.1.1-3.4h-.4l-.1 3.3zm4.5 3.9 3.4.1v-.4l-3.3-.1-.1.4z" /><path class="st9" d="m383 434.5 4.8 8.4c2.5.2 4.3-.9 5.5-3.1l-4.8-8.4-5.5 3.1z" /><path class="st10" d="m383 434.5 2.2 3.8c.5-.1.9-.2 1.4-.4.1-.1.3-.1.4-.2 1.5-.9 2.5-2.4 2.8-4l-1.3-2.3-5.5 3.1z" /><path class="st9" d="m377.6 430.8 2.1 3.5.9 1.4c1.2 1.9 3.7 2.7 5.7 1.7.7-.3 1.3-.8 1.7-1.3.1-.1.2-.3.3-.4.1-.1.1-.2.2-.3.5-.9.8-1.8.7-2.9-.1-.9-.2-1.8-.3-2.8-.1-.6-.2-1.1-.3-1.7-.5-2.5-2.3-4.6-4.7-5.3-2.1-.6-4-.1-5.6 1.6-1.7 1.8-2 4.4-.7 6.5z" /><path class="st3" d="M385.7 429.1h-.8s0-3.2-.8-3.9c-1.2-1-4.5.3-5.9 1.4-.4.4-.7.7-.7 1.3.1 1.2.5 3.5 1.7 5.5 0 0-5-5.2-4.5-9.4.3-2.8.8-4.8 4.3-4.8 5.5 0 9.6 2.7 11.2 8.4l-3.5.2-1 1.3z" /><path class="st9" d="M385.9 429.5c.6 1 2 1.3 3.1.7s1.6-2 1-3c-.6-1-2-1.3-3.1-.7-1.2.6-1.6 2-1 3z" /><path class="st5" d="M305 499.7h70.1v58.6H305z" /><path class="st13" d="M281.2 499.7H305v58.6h-23.8z" /><path class="st13" d="m305 499.7-9.4 17.9h-26.2l11.8-17.9zm81 19.9-70 4.5-11-24.4 70.1 4.5z" /><path class="st5" d="M386 519.6h-70l-11-19.9h70.1zm-81-19.9-5.3 20-30.3-2.1h26.2z" /><path class="st0" d="M38.9 241.8c3.5-18.6 10.8-36.5 20.7-52.7 5-8.1 10.7-15.8 17.1-22.9 3.2-3.6 6.5-7 10-10.3 3.5-3.3 7.1-6.4 10.8-9.4 15-11.9 32.3-20.9 50.6-26.7 9.2-2.9 18.6-4.9 28.1-6.1 2.4-.3 4.8-.5 7.1-.8l3.6-.3c1.2-.1 2.4-.1 3.6-.2 4.8-.2 9.6-.2 14.4 0 4.8.2 9.6.7 14.3 1.3 4.8.6 9.5 1.5 14.2 2.5 2.3.5 4.7 1.1 7 1.7l3.5 1c1.2.3 2.3.7 3.4 1.1.6.2 1.1.4 1.7.5l1.7.6c1.1.4 2.3.8 3.4 1.2 1.1.4 2.2.8 3.4 1.3l3.3 1.4c.6.2 1.1.5 1.7.7l1.6.7 3.3 1.5 3.2 1.6 1.6.8 1.6.8 3.2 1.7 3.1 1.7 1.6.9 1.5.9 3.1 1.8c4.1 2.4 8.1 4.9 12.1 7.5 4 2.6 7.9 5.2 11.9 7.9 7.8 5.3 15.6 10.7 23.5 15.9 3.9 2.6 7.9 5.1 11.9 7.6 4 2.4 8.1 4.8 12.2 7.1 2 1.2 4.1 2.2 6.2 3.3 1 .6 2.1 1 3.2 1.6 1.1.5 2.1 1.1 3.2 1.5 2.1 1 4.3 2 6.5 2.8 1.1.4 2.2.9 3.3 1.3l3.3 1.2 3.3 1.2c1.1.4 2.2.8 3.4 1.1l3.4 1c.6.2 1.1.3 1.7.5l1.7.4c1.1.3 2.3.6 3.4.8l3.5.7c.6.1 1.2.2 1.7.3l1.7.3 3.5.5c-9.4-.8-18.8-2.7-27.8-5.6-9-2.9-17.8-6.7-26.3-11-4.3-2.1-8.4-4.4-12.5-6.8-4.1-2.4-8.2-4.8-12.2-7.3s-8-5.1-12-7.6l-11.9-7.7c-4-2.6-7.9-5.1-11.9-7.6s-8-4.9-12.1-7.3l-3.1-1.7-1.5-.9-1.5-.8-3.1-1.7-3.1-1.6-1.6-.8-1.6-.8-3.2-1.5-3.2-1.4-1.6-.7c-.5-.2-1.1-.4-1.6-.7-17.2-7.2-35.7-11.2-54.3-11.9-18.6-.8-37.4 1.5-55.2 6.9-4.5 1.3-8.9 2.9-13.2 4.6-4.3 1.7-8.6 3.7-12.7 5.8-8.3 4.2-16.2 9.2-23.7 14.8-7.4 5.7-14.4 11.9-20.8 18.8-6.4 6.8-12.2 14.2-17.4 22-10.6 15.9-18.3 33.3-22.9 51.7zM658 370.2c6.5 13.9 10.3 29.1 11.5 44.5 1.1 15.4-.4 31.1-4.6 46.1-4.2 14.9-11.2 29.1-20.3 41.6-9.1 12.5-20.3 23.5-33.2 31.9 11.9-9.7 22.3-21 30.7-33.6 8.4-12.6 14.9-26.4 19-41 4.1-14.5 5.9-29.7 5.3-44.9-.4-15.1-3.3-30.2-8.4-44.6z" /><path class="st1" d="M639.8 422.2c.4 9.5-.9 19.2-3.6 28.3-1.4 4.6-3.1 9.1-5.2 13.4-2.1 4.3-4.6 8.5-7.3 12.4-2.8 3.9-5.9 7.6-9.2 11.1-3.4 3.4-7 6.6-10.9 9.4-7.7 5.7-16.4 10.1-25.5 12.9 8.8-3.5 17.1-8.3 24.6-14.1 3.7-2.9 7.2-6.1 10.5-9.5 3.3-3.4 6.3-7 9-10.9 2.7-3.8 5.1-7.9 7.3-12.1 2.1-4.2 3.9-8.6 5.4-13.1 2.9-8.8 4.5-18.2 4.9-27.8z" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-member_balance"><path d="M983.8 312.7C958 251.7 921 197 874 150c-47-47-101.8-83.9-162.7-109.7C648.2 13.5 581.1 0 512 0S375.8 13.5 312.7 40.2C251.7 66 197 102.9 150 150c-47 47-83.9 101.8-109.7 162.7C13.5 375.8 0 442.9 0 512s13.5 136.2 40.2 199.3C66 772.3 102.9 827 150 874c47 47 101.8 83.9 162.7 109.7 63.1 26.7 130.2 40.2 199.3 40.2s136.2-13.5 199.3-40.2C772.3 958 827 921 874 874c47-47 83.9-101.8 109.7-162.7 26.7-63.1 40.2-130.2 40.2-199.3s-13.4-136.2-40.1-199.3zm-55.3 375.2c-22.8 53.8-55.4 102.2-96.9 143.7s-89.9 74.1-143.7 96.9C632.2 952.1 573 964 512 964s-120.2-11.9-175.9-35.5c-53.8-22.8-102.2-55.4-143.7-96.9s-74.1-89.9-96.9-143.7C71.9 632.2 60 573 60 512s11.9-120.2 35.5-175.9c22.8-53.8 55.4-102.2 96.9-143.7s89.9-74.1 143.7-96.9C391.8 71.9 451 60 512 60s120.2 11.9 175.9 35.5c53.8 22.8 102.2 55.4 143.7 96.9s74.1 89.9 96.9 143.7C952.1 391.8 964 451 964 512s-11.9 120.2-35.5 175.9z" /><path d="M706 469.1H574.7l84.2-180.6c7-15 .4-32.9-14.5-39.9-15-7-32.9-.4-39.9 14.5L512 461.5l-92.5-198.3c-7-15-24.9-21.5-39.9-14.5s-21.5 24.9-14.5 39.9l84.2 180.6H318c-16.5 0-30 13.5-30 30s13.5 30 30 30h164v64h-92.5c-20.6 0-37.5 13.5-37.5 30s16.9 30 37.5 30H482v95c0 16.5 13.5 30 30 30s30-13.5 30-30v-95h92.5c20.6 0 37.5-13.5 37.5-30s-16.9-30-37.5-30H542v-64h164c16.5 0 30-13.5 30-30 0-16.6-13.5-30.1-30-30.1z" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-member_expenditure_balance"><path d="M510.72 962.56C262.4 960 61.44 757.76 64 509.44 66.56 263.68 264.96 65.28 510.72 62.72c17.92 0 34.56 14.08 34.56 32s-14.08 34.56-32 34.56h-2.56C299.52 130.56 128 300.8 128 512s171.52 382.72 382.72 382.72S893.44 723.2 893.44 512c0-17.92 16.64-33.28 34.56-32 17.92 0 32 15.36 32 32 0 248.32-200.96 450.56-449.28 450.56z" /><path d="M645.12 480H375.04c-17.92 0-34.56-14.08-34.56-32s14.08-34.56 32-34.56h272.64c17.92 0 33.28 16.64 32 34.56 0 17.92-14.08 32-32 32zm0 130.56H375.04c-17.92 0-33.28-16.64-32-34.56 0-17.92 15.36-32 32-32h270.08c17.92 0 33.28 16.64 32 34.56 0 16.64-14.08 32-32 32z" /><path d="M510.72 746.24c-17.92 0-33.28-15.36-33.28-33.28V441.6c0-17.92 16.64-33.28 34.56-32 17.92 0 32 15.36 32 32v270.08c0 19.2-15.36 34.56-33.28 34.56z" /><path d="M510.72 458.24c-8.96 0-17.92-3.84-24.32-10.24L375.04 336.64c-14.08-12.8-15.36-33.28-2.56-47.36s33.28-15.36 47.36-2.56l2.56 2.56 111.36 111.36c12.8 12.8 12.8 34.56 0 47.36-6.4 6.4-15.36 10.24-23.04 10.24z" /><path d="M510.72 458.24c-8.96 0-17.92-3.84-24.32-10.24-12.8-12.8-12.8-34.56 0-47.36l111.36-111.36c14.08-12.8 35.84-10.24 47.36 2.56 11.52 12.8 11.52 32 0 44.8L533.76 448c-6.4 6.4-15.36 10.24-23.04 10.24zm414.72-216.32c17.92 0 33.28-15.36 33.28-33.28 0-8.96-3.84-17.92-10.24-24.32L837.12 72.96c-12.8-14.08-33.28-14.08-47.36-1.28s-14.08 33.28-1.28 47.36l1.28 1.28 111.36 111.36c7.68 6.4 15.36 10.24 24.32 10.24z" /><path d="M815.36 353.28c8.96 0 17.92-3.84 24.32-10.24l111.36-111.36c12.8-14.08 10.24-35.84-2.56-47.36-12.8-11.52-32-11.52-44.8 0L792.32 295.68c-12.8 12.8-12.8 34.56 0 47.36 5.12 6.4 14.08 10.24 23.04 10.24z" /><path d="M920.32 241.92c17.92 0 34.56-14.08 34.56-32s-14.08-34.56-32-34.56H695.04c-17.92 0-33.28 16.64-32 34.56 0 17.92 15.36 32 32 32h225.28z" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-member_level"><path d="m936.96 385.877-203.435-204.8-18.09-7.68h-406.87l-18.09 7.68-203.435 204.8c-9.728 9.899-9.899 25.942-.17 35.84l406.869 421.035c4.778 4.95 11.434 7.85 18.432 7.85 6.997 0 13.653-2.9 18.432-7.85l406.869-421.035c9.387-10.069 9.216-25.941-.512-35.84zm-68.437 3.755H726.528l-163.84-165.035h141.995l163.84 165.035zM319.317 224.768h143.019l-163.84 165.035H155.477l163.84-165.035zM176.47 440.832h132.608l18.091-7.51 185.173-186.538 185.174 186.539 18.09 7.509H847.19L512 787.968 176.47 440.832z" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-member_point"><path d="M509.092 501.653c241.775 0 424.087-78.085 424.087-181.64 0-103.543-182.312-181.628-424.087-181.628S84.994 216.47 84.994 320.015c0 103.554 182.322 181.638 424.098 181.638zm0-317.432c222.909 0 378.252 71.562 378.252 135.793S732.002 455.818 509.092 455.818c-222.92 0-378.263-71.573-378.263-135.804s155.343-135.793 378.263-135.793z" /><path d="M509.084 694.062c241.115 0 422.937-77.599 422.937-180.483 0-27.17-13.128-52.454-36.241-75.131-.149-.154-.266-.32-.419-.469-.17-.167-.285-.346-.456-.51l-.115.125c-3.717-3.407-8.576-5.608-14.017-5.608-11.543 0-20.899 9.356-20.899 20.899 0 6.11 2.722 11.481 6.901 15.302l-.083.091c13.949 14.025 21.81 31.155 21.81 45.301 0 64.785-155.814 136.966-379.42 136.966-223.595 0-379.41-72.18-379.41-136.966 0-16.14 4.538-29.952 22.324-45.67.214-.205.43-.382.635-.595.137-.118.24-.233.379-.354l-.085-.08c3.417-3.72 5.623-8.59 5.623-14.038 0-11.543-9.356-20.9-20.899-20.9-5.77 0-10.993 2.341-14.773 6.12l-.123-.119c-23.408 22.798-36.595 48.278-36.595 75.636 0 102.883 181.821 180.483 422.926 180.483z" /><path d="M895.577 629.53c-.169-.165-.282-.343-.453-.508l-.115.125c-3.717-3.408-8.577-5.609-14.018-5.609-11.54 0-20.898 9.356-20.898 20.9 0 6.11 2.72 11.482 6.901 15.302l-.084.09c13.95 14.025 21.811 31.155 21.811 45.302 0 64.787-155.814 136.966-379.42 136.966-223.595 0-379.41-72.18-379.41-136.966 0-16.14 4.538-29.953 22.322-45.67.214-.203.43-.382.635-.595.137-.119.24-.233.379-.354l-.085-.081c3.417-3.72 5.623-8.589 5.623-14.038 0-11.543-9.356-20.899-20.898-20.899-5.77 0-10.993 2.34-14.773 6.12l-.123-.119c-23.41 22.797-36.595 48.279-36.595 75.636 0 102.884 181.821 180.482 422.927 180.482 241.114 0 422.935-77.598 422.935-180.482 0-27.167-13.126-52.453-36.235-75.127-.152-.158-.272-.324-.426-.475z" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-member_recharge_balance"><path d="M512 750.51c-19.08 0-31.801-12.721-31.801-31.802V432.497c0-19.08 12.72-31.801 31.801-31.801s31.801 12.72 31.801 31.8v286.212c-6.36 19.08-19.08 31.801-31.801 31.801z" /><path d="M651.925 534.26h-286.21c-19.081 0-31.802-12.72-31.802-31.8 0-19.081 12.72-31.802 31.801-31.802h286.211c19.081 0 31.802 12.72 31.802 31.802 0 19.08-12.72 31.8-31.802 31.8zM651.925 648.745h-286.21c-19.081 0-31.802-12.72-31.802-31.8 0-19.082 12.72-31.802 31.801-31.802h286.211c19.081 0 31.802 12.72 31.802 31.801 0 19.08-12.72 31.801-31.802 31.801zM512 464.298c-6.36 0-19.08 0-25.441-6.36L352.994 324.373c-12.72-12.72-12.72-31.802 0-44.522 12.72-12.72 31.801-12.72 44.522 0L531.08 413.416c12.72 12.72 12.72 31.801 0 44.522-6.36 6.36-12.72 6.36-19.081 6.36z" /><path d="M512 464.298c-6.36 0-19.08 0-25.441-6.36-12.72-12.72-12.72-31.801 0-44.522l133.565-133.565c12.72-12.72 31.801-12.72 44.522 0 12.72 12.72 12.72 31.801 0 44.522L531.081 457.938c-6.36 6.36-12.72 6.36-19.081 6.36z" /><path d="M512 1017.64c-279.85 0-508.82-228.97-508.82-508.82S232.15 0 512 0s508.82 228.969 508.82 508.82c0 25.44 0 50.882-6.36 82.683 0 19.08-19.081 31.801-38.162 25.441-19.08 0-31.801-19.08-25.44-38.161 6.36-25.441 6.36-44.522 6.36-69.963C957.217 260.77 760.05 63.602 512 63.602S66.783 267.13 66.783 515.18 263.95 960.398 512 960.398c25.441 0 57.242 0 82.683-6.36 19.081-6.361 31.801 6.36 38.162 25.44 6.36 19.081-6.36 31.802-25.441 38.162H512z" /><path d="M989.019 864.994H671.006c-19.08 0-31.801-12.72-31.801-31.801s12.72-31.802 31.801-31.802H989.02c19.08 0 31.8 12.72 31.8 31.802s-19.08 31.8-31.8 31.8z" /><path d="M830.012 1024c-19.08 0-31.8-12.72-31.8-31.801V674.186c0-19.08 12.72-31.8 31.8-31.8s31.802 12.72 31.802 31.8V992.2c0 12.72-19.081 31.801-31.802 31.801z" /></symbol><symbol viewBox="0 0 128 128" id="icon-message"><path d="M0 20.967v59.59c0 11.59 8.537 20.966 19.075 20.966h28.613l1 26.477L76.8 101.523h32.125c10.538 0 19.075-9.377 19.075-20.966v-59.59C128 9.377 119.463 0 108.925 0h-89.85C8.538 0 0 9.377 0 20.967zm82.325 33.1c0-5.524 4.013-9.935 9.037-9.935 5.026 0 9.038 4.41 9.038 9.934 0 5.524-4.025 9.934-9.038 9.934-5.024 0-9.037-4.41-9.037-9.934zm-27.613 0c0-5.524 4.013-9.935 9.038-9.935s9.037 4.41 9.037 9.934c0 5.524-4.025 9.934-9.037 9.934-5.025 0-9.038-4.41-9.038-9.934zm-27.1 0c0-5.524 4.013-9.935 9.038-9.935s9.038 4.41 9.038 9.934c0 5.524-4.026 9.934-9.05 9.934-5.013 0-9.025-4.41-9.025-9.934z" /></symbol><symbol viewBox="0 0 128 128" id="icon-money"><path d="M54.122 127.892v-28.68H7.513V87.274h46.609v-12.4H7.513v-12.86h38.003L.099 0h22.6l32.556 45.07c3.617 5.144 6.44 9.611 8.487 13.385 1.788-3.05 4.89-7.779 9.301-14.186L103.93 0h24.01L82.385 62.013h38.34v12.862h-46.41v12.4h46.41v11.937h-46.41v28.68H54.123z" /></symbol><symbol viewBox="0 0 128 128" id="icon-peoples"><path d="M95.648 118.762c0 5.035-3.563 9.121-7.979 9.121H7.98c-4.416 0-7.979-4.086-7.979-9.121C0 100.519 15.408 83.47 31.152 76.75c-9.099-6.43-15.216-17.863-15.216-30.987v-9.128c0-20.16 14.293-36.518 31.893-36.518s31.894 16.358 31.894 36.518v9.122c0 13.137-6.123 24.556-15.216 30.993 15.738 6.726 31.141 23.769 31.141 42.012z" /><path d="M106.032 118.252h15.867c3.376 0 6.101-3.125 6.101-6.972 0-13.957-11.787-26.984-23.819-32.123 6.955-4.919 11.638-13.66 11.638-23.704v-6.985c0-15.416-10.928-27.926-24.39-27.926-1.674 0-3.306.193-4.89.561 1.936 4.713 3.018 9.974 3.018 15.526v9.121c0 13.137-3.056 23.111-11.066 30.993 14.842 4.41 27.312 23.42 27.541 41.509z" /></symbol><symbol viewBox="0 0 128 128" id="icon-shopping"><path d="M42.913 101.36c1.642 0 3.198.332 4.667.996a12.28 12.28 0 0 1 3.89 2.772c1.123 1.184 1.987 2.582 2.592 4.193.605 1.612.908 3.318.908 5.118 0 1.8-.303 3.507-.908 5.118-.605 1.611-1.469 3.01-2.593 4.194a13.3 13.3 0 0 1-3.889 2.843 10.582 10.582 0 0 1-4.667 1.066c-1.729 0-3.306-.355-4.732-1.066a13.604 13.604 0 0 1-3.825-2.843c-1.123-1.185-1.988-2.583-2.593-4.194a14.437 14.437 0 0 1-.907-5.118c0-1.8.302-3.506.907-5.118.605-1.61 1.47-3.009 2.593-4.193a12.515 12.515 0 0 1 3.825-2.772c1.426-.664 3.003-.996 4.732-.996zm53.932.285c1.643 0 3.22.331 4.733.995a11.386 11.386 0 0 1 3.889 2.772c1.08 1.185 1.945 2.583 2.593 4.194.648 1.61.972 3.317.972 5.118 0 1.8-.324 3.506-.972 5.117-.648 1.611-1.513 3.01-2.593 4.194a12.253 12.253 0 0 1-3.89 2.843 11 11 0 0 1-4.732 1.066 10.58 10.58 0 0 1-4.667-1.066 12.478 12.478 0 0 1-3.824-2.843c-1.08-1.185-1.945-2.583-2.593-4.194a13.581 13.581 0 0 1-.973-5.117c0-1.801.325-3.507.973-5.118.648-1.611 1.512-3.01 2.593-4.194a11.559 11.559 0 0 1 3.824-2.772 11.212 11.212 0 0 1 4.667-.995zm21.781-80.747c2.42 0 4.3.355 5.64 1.066 1.34.71 2.29 1.587 2.852 2.63a6.427 6.427 0 0 1 .778 3.34c-.044 1.185-.195 2.204-.454 3.057-.26.853-.8 2.606-1.62 5.26a589.268 589.268 0 0 1-2.788 8.743 1236.373 1236.373 0 0 0-3.047 9.453c-.994 3.128-1.75 5.592-2.269 7.393-1.123 3.79-2.55 6.42-4.278 7.89-1.728 1.469-3.846 2.203-6.352 2.203H39.023l1.945 12.795h65.342c4.148 0 6.223 1.943 6.223 5.828 0 1.896-.41 3.53-1.232 4.905-.821 1.374-2.442 2.061-4.862 2.061H38.505c-1.729 0-3.176-.426-4.343-1.28-1.167-.852-2.14-1.966-2.917-3.34a21.277 21.277 0 0 1-1.88-4.478 44.128 44.128 0 0 1-1.102-4.55c-.087-.568-.324-1.942-.713-4.122-.39-2.18-.865-4.904-1.426-8.174l-1.88-10.947c-.692-4.027-1.383-8.079-2.075-12.154-1.642-9.572-3.5-20.234-5.574-31.986H6.87c-1.296 0-2.377-.356-3.24-1.067a9.024 9.024 0 0 1-2.14-2.558 10.416 10.416 0 0 1-1.167-3.2C.108 8.53 0 7.488 0 6.54c0-1.896.583-3.46 1.75-4.69C2.917.615 4.494 0 6.482 0h13.095c1.728 0 3.111.284 4.148.853 1.037.569 1.858 1.28 2.463 2.132a8.548 8.548 0 0 1 1.297 2.701c.26.948.475 1.754.648 2.417.173.758.346 1.825.519 3.199.173 1.374.345 2.772.518 4.193.26 1.706.519 3.507.778 5.403h88.678z" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-pay-icon-alipay_app"><path d="M938.7 669.525V249.412c0-90.555-73.522-164.079-164.146-164.079H249.378c-90.556 0-164.079 73.49-164.079 164.08v525.209c0 90.556 73.455 164.079 164.08 164.079h525.209c80.725 0 147.865-58.368 161.553-135.1-43.52-18.842-232.107-100.284-330.377-147.183-74.786 90.59-153.088 144.93-271.12 144.93S137.83 728.644 147.284 639.693c6.247-58.402 46.285-153.907 220.297-137.523 91.682 8.601 133.666 25.736 208.418 50.415 19.354-35.43 35.43-74.514 47.616-116.02H292.045v-32.87H456.09v-58.982H256V308.53h200.124v-85.197s1.809-13.312 16.52-13.312h82.057v98.475h213.333v36.181H554.701v58.983h174.046c-16.009 65.126-40.278 124.962-70.69 177.22 50.551 18.296 280.644 88.644 280.644 88.644zm-617.13 75.47c-124.723 0-144.452-78.746-137.83-111.651 6.553-32.734 42.666-75.503 112.025-75.503 79.668 0 151.04 20.446 236.715 62.089-60.177 78.404-134.11 125.064-210.91 125.064zm0 0" fill="#1296db" /></symbol><symbol class="icon" viewBox="0 0 1036 1024" id="icon-pay-icon-alipay_bar"><defs><style>@font-face{font-family:feedback-iconfont;src:url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.eot?#iefix) format("embedded-opentype"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff2) format("woff2"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff) format("woff"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.ttf) format("truetype"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.svg#iconfont) format("svg")}</style></defs><path d="M27.587 336.62h69.148a13.979 13.979 0 0 0 13.793-13.98V13.99A13.979 13.979 0 0 0 96.735.01H27.587A13.979 13.979 0 0 0 13.795 13.99v308.65a13.979 13.979 0 0 0 13.792 13.98zm165.881 0h27.585a13.979 13.979 0 0 0 13.792-13.98V13.99A13.979 13.979 0 0 0 221.053.01h-27.585a13.979 13.979 0 0 0-13.792 13.979v308.65a13.979 13.979 0 0 0 13.792 13.98zm138.11 322.628H221.053a27.771 27.771 0 0 0-27.585 28.144v111.83a27.771 27.771 0 0 0 27.585 28.144h110.525a27.957 27.957 0 0 0 27.585-28.144v-111.83a27.957 27.957 0 0 0-27.585-28.144zM816.174 336.62h27.585a13.979 13.979 0 0 0 13.792-13.979V13.99A13.979 13.979 0 0 0 843.013.01H815.43a13.979 13.979 0 0 0-13.98 13.979v308.65a13.979 13.979 0 0 0 13.98 13.98zm-469.872 0h82.382a13.979 13.979 0 0 0 13.792-13.979V13.99A13.979 13.979 0 0 0 428.684.01h-83.127a13.979 13.979 0 0 0-13.793 13.979v308.65a13.979 13.979 0 0 0 13.793 13.98zm594.19 0h69.148a13.979 13.979 0 0 0 13.792-13.979V13.99A13.979 13.979 0 0 0 1008.894.01h-69.148a13.979 13.979 0 0 0-13.792 13.979v308.65a13.979 13.979 0 0 0 13.792 13.98zM528.212 462.8H66.914A67.47 67.47 0 0 0 .002 530.83v425.14A67.47 67.47 0 0 0 66.914 1024h418.803a67.47 67.47 0 0 0 66.911-68.03V487.776a24.789 24.789 0 0 0-24.416-24.976zm-58.338 433.9a42.682 42.682 0 0 1-42.495 43.055h-301.94A42.682 42.682 0 0 1 82.942 896.7V590.1a42.682 42.682 0 0 1 42.495-43.054h301.94a42.682 42.682 0 0 1 42.496 43.054zm525.228-433.9a41.75 41.75 0 0 0-41.377 42.123v55.915a41.377 41.377 0 1 0 82.94 0v-55.915a41.75 41.75 0 0 0-41.563-42.123zm0 223.66a41.75 41.75 0 0 0-41.377 42.123V894.65a45.477 45.477 0 0 1-45.291 45.85h-159.73a43.24 43.24 0 0 0-43.614 37.277A41.936 41.936 0 0 0 745.535 1024h233.538a57.779 57.779 0 0 0 57.406-58.338V729.328a41.75 41.75 0 0 0-41.377-41.936zM732.488 322.64V13.99A13.979 13.979 0 0 0 718.696.01h-82.94a13.979 13.979 0 0 0-13.793 13.979v308.65a13.979 13.979 0 0 0 13.792 13.98h82.94a13.979 13.979 0 0 0 13.793-13.98zM532.126.011c-11.37 0-20.688 6.337-20.688 13.979v308.65c0 7.828 9.319 13.98 20.688 13.98s20.689-6.338 20.689-13.98V13.99c0-7.642-9.32-13.979-20.689-13.979zM745.535 462.8a41.75 41.75 0 0 0-41.377 42.123v252.55a41.377 41.377 0 1 0 82.94 0v-252.55a41.75 41.75 0 0 0-41.563-42.123" fill="#1977FD" /></symbol><symbol class="icon" viewBox="0 0 1285 1024" id="icon-pay-icon-alipay_pc"><path d="M1141.76 855.04H855.04c0 40.96 30.72 71.68 71.68 71.68h107.52c20.48 0 35.84 15.36 35.84 35.84s-15.36 35.84-35.84 35.84H250.88c-20.48 0-35.84-15.36-35.84-35.84s15.36-35.84 35.84-35.84H358.4c40.96 0 71.68-30.72 71.68-71.68H143.36C66.56 855.04 0 793.6 0 711.68V143.36C0 66.56 61.44 0 143.36 0h993.28C1213.44 0 1280 61.44 1280 143.36v568.32c5.12 76.8-56.32 143.36-138.24 143.36zm71.68-711.68c0-40.96-30.72-71.68-71.68-71.68H148.48c-40.96 0-71.68 30.72-71.68 71.68v568.32c0 40.96 30.72 71.68 71.68 71.68h993.28c40.96 0 71.68-30.72 71.68-71.68V143.36zm-143.36 568.32H215.04c-40.96 0-71.68-30.72-71.68-71.68V215.04c0-40.96 30.72-71.68 71.68-71.68h855.04c40.96 0 71.68 30.72 71.68 71.68V640c0 40.96-30.72 71.68-71.68 71.68z" fill="#1977FD" /></symbol><symbol class="icon" viewBox="0 0 1115 1024" id="icon-pay-icon-alipay_qr"><defs><style>@font-face{font-family:feedback-iconfont;src:url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.eot?#iefix) format("embedded-opentype"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff2) format("woff2"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff) format("woff"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.ttf) format("truetype"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.svg#iconfont) format("svg")}</style></defs><path d="M751.388 68.267a34.133 34.133 0 0 1 0-68.267h227.556a91.022 91.022 0 0 1 91.022 91.022v227.556a34.133 34.133 0 1 1-68.266 0V91.022a22.756 22.756 0 0 0-22.756-22.755H751.388M1001.7 705.422a34.133 34.133 0 0 1 68.266 0v227.556A91.022 91.022 0 0 1 978.944 1024H748.885a34.133 34.133 0 0 1 0-68.267H978.49a22.756 22.756 0 0 0 22.755-22.755V705.422M364.09 955.733a34.133 34.133 0 1 1 0 68.267H136.533a91.022 91.022 0 0 1-91.022-91.022V705.422a34.133 34.133 0 0 1 68.267 0v227.556a22.756 22.756 0 0 0 22.755 22.755H364.09M113.778 318.578a34.133 34.133 0 1 1-68.267 0V91.022A91.022 91.022 0 0 1 136.533 0H364.09a34.133 34.133 0 0 1 0 68.267H136.533a22.756 22.756 0 0 0-22.755 22.755v227.556M34.133 477.867a34.133 34.133 0 0 0 0 68.266h168.619v-68.266zm1046.756 0H912.27v68.266h168.619a34.133 34.133 0 0 0 0-68.266zM202.752 157.24h709.746v320.627H202.752zm0 388.893h709.746V866.76H202.752z" fill="#1977FD" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-pay-icon-alipay_wap"><path d="M768.3 0H255.7c-70.8 0-128.1 57.4-128.1 128.1v767.8c0 70.8 57.4 128.1 128.1 128.1h512.6c70.8 0 128.1-57.4 128.1-128.1V128.1C896.4 57.3 839 0 768.3 0zM383.9 96.1c0-17.7 14.3-32 32-32h192.2c17.7 0 32 14.3 32 32s-14.3 32-32 32H415.9c-17.7 0-32-14.3-32-32zM512 959.9c-35.4 0-64.1-28.8-64.1-64.1 0-35.4 28.7-64.1 64.1-64.1 35.4 0 64.1 28.7 64.1 64.1 0 35.3-28.7 64.1-64.1 64.1zm320.3-204.3c0 6.7-5.4 12.2-12.2 12.2H203.9c-6.7 0-12.2-5.4-12.2-12.2V204.3c0-6.7 5.4-12.2 12.2-12.2h616.3c6.7 0 12.2 5.4 12.2 12.2v551.3z" fill="#1977FD" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-pay-icon-mock"><path d="m173.077 362.667 91.115-214.678a65.6 65.6 0 0 1 86.016-34.773c11.584 4.907 24.96 10.283 40.896 16.448 8.277 3.2 16.79 6.464 27.904 10.667 28.203 10.709 39.296 14.933 46.144 17.642l51.477-51.669c28.182-28.16 74.112-27.947 102.571.533l195.925 195.926c16.427 16.426 23.446 38.634 21.056 59.904H896a42.667 42.667 0 0 1 42.667 42.666V896A42.667 42.667 0 0 1 896 938.667H128A42.667 42.667 0 0 1 85.333 896V405.333A42.667 42.667 0 0 1 128 362.667h45.077zm48.96 0h39.104l169.195-169.771-27.328-10.39c-11.2-4.245-19.819-7.53-28.224-10.794a1459.2 1459.2 0 0 1-42.197-17.003 20.523 20.523 0 0 0-26.902 10.88l-83.648 197.078zm108.843 0h454.955a23.51 23.51 0 0 0-5.291-25.323L584.619 141.419a23.36 23.36 0 0 0-33.024-.214L330.88 362.667zM128 405.333V896h768V405.333H128zm597.333 320a85.333 85.333 0 1 1 0-170.666 85.333 85.333 0 0 1 0 170.666zm0-42.666a42.667 42.667 0 1 0 0-85.334 42.667 42.667 0 0 0 0 85.334z" fill="#4296d5" /></symbol><symbol class="icon" viewBox="0 0 1115 1024" id="icon-pay-icon-wx_app"><defs><style>@font-face{font-family:feedback-iconfont;src:url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.eot?#iefix) format("embedded-opentype"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff2) format("woff2"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff) format("woff"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.ttf) format("truetype"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.svg#iconfont) format("svg")}</style></defs><path d="M751.388 68.267a34.133 34.133 0 0 1 0-68.267h227.556a91.022 91.022 0 0 1 91.022 91.022v227.556a34.133 34.133 0 1 1-68.266 0V91.022a22.756 22.756 0 0 0-22.756-22.755H751.388M1001.7 705.422a34.133 34.133 0 0 1 68.266 0v227.556A91.022 91.022 0 0 1 978.944 1024H748.885a34.133 34.133 0 0 1 0-68.267H978.49a22.756 22.756 0 0 0 22.755-22.755V705.422M364.09 955.733a34.133 34.133 0 1 1 0 68.267H136.533a91.022 91.022 0 0 1-91.022-91.022V705.422a34.133 34.133 0 0 1 68.267 0v227.556a22.756 22.756 0 0 0 22.755 22.755H364.09M113.778 318.578a34.133 34.133 0 1 1-68.267 0V91.022A91.022 91.022 0 0 1 136.533 0H364.09a34.133 34.133 0 0 1 0 68.267H136.533a22.756 22.756 0 0 0-22.755 22.755v227.556M34.133 477.867a34.133 34.133 0 0 0 0 68.266h168.619v-68.266zm1046.756 0H912.27v68.266h168.619a34.133 34.133 0 0 0 0-68.266zM202.752 157.24h709.746v320.627H202.752zm0 388.893h709.746V866.76H202.752z" fill="#04C361" /></symbol><symbol class="icon" viewBox="0 0 1036 1024" id="icon-pay-icon-wx_bar"><defs><style>@font-face{font-family:feedback-iconfont;src:url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.eot?#iefix) format("embedded-opentype"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff2) format("woff2"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff) format("woff"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.ttf) format("truetype"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.svg#iconfont) format("svg")}</style></defs><path d="M27.587 336.62h69.148a13.979 13.979 0 0 0 13.793-13.98V13.99A13.979 13.979 0 0 0 96.735.01H27.587A13.979 13.979 0 0 0 13.795 13.99v308.65a13.979 13.979 0 0 0 13.792 13.98zm165.881 0h27.585a13.979 13.979 0 0 0 13.792-13.98V13.99A13.979 13.979 0 0 0 221.053.01h-27.585a13.979 13.979 0 0 0-13.792 13.979v308.65a13.979 13.979 0 0 0 13.792 13.98zm138.11 322.628H221.053a27.771 27.771 0 0 0-27.585 28.144v111.83a27.771 27.771 0 0 0 27.585 28.144h110.525a27.957 27.957 0 0 0 27.585-28.144v-111.83a27.957 27.957 0 0 0-27.585-28.144zM816.174 336.62h27.585a13.979 13.979 0 0 0 13.792-13.979V13.99A13.979 13.979 0 0 0 843.013.01H815.43a13.979 13.979 0 0 0-13.98 13.979v308.65a13.979 13.979 0 0 0 13.98 13.98zm-469.872 0h82.382a13.979 13.979 0 0 0 13.792-13.979V13.99A13.979 13.979 0 0 0 428.684.01h-83.127a13.979 13.979 0 0 0-13.793 13.979v308.65a13.979 13.979 0 0 0 13.793 13.98zm594.19 0h69.148a13.979 13.979 0 0 0 13.792-13.979V13.99A13.979 13.979 0 0 0 1008.894.01h-69.148a13.979 13.979 0 0 0-13.792 13.979v308.65a13.979 13.979 0 0 0 13.792 13.98zM528.212 462.8H66.914A67.47 67.47 0 0 0 .002 530.83v425.14A67.47 67.47 0 0 0 66.914 1024h418.803a67.47 67.47 0 0 0 66.911-68.03V487.776a24.789 24.789 0 0 0-24.416-24.976zm-58.338 433.9a42.682 42.682 0 0 1-42.495 43.055h-301.94A42.682 42.682 0 0 1 82.942 896.7V590.1a42.682 42.682 0 0 1 42.495-43.054h301.94a42.682 42.682 0 0 1 42.496 43.054zm525.228-433.9a41.75 41.75 0 0 0-41.377 42.123v55.915a41.377 41.377 0 1 0 82.94 0v-55.915a41.75 41.75 0 0 0-41.563-42.123zm0 223.66a41.75 41.75 0 0 0-41.377 42.123V894.65a45.477 45.477 0 0 1-45.291 45.85h-159.73a43.24 43.24 0 0 0-43.614 37.277A41.936 41.936 0 0 0 745.535 1024h233.538a57.779 57.779 0 0 0 57.406-58.338V729.328a41.75 41.75 0 0 0-41.377-41.936zM732.488 322.64V13.99A13.979 13.979 0 0 0 718.696.01h-82.94a13.979 13.979 0 0 0-13.793 13.979v308.65a13.979 13.979 0 0 0 13.792 13.98h82.94a13.979 13.979 0 0 0 13.793-13.98zM532.126.011c-11.37 0-20.688 6.337-20.688 13.979v308.65c0 7.828 9.319 13.98 20.688 13.98s20.689-6.338 20.689-13.98V13.99c0-7.642-9.32-13.979-20.689-13.979zM745.535 462.8a41.75 41.75 0 0 0-41.377 42.123v252.55a41.377 41.377 0 1 0 82.94 0v-252.55a41.75 41.75 0 0 0-41.563-42.123" fill="#04C361" /></symbol><symbol class="icon" viewBox="0 0 1024 1024" id="icon-pay-icon-wx_lite"><path d="M608.6 290.3c67.1 0 121.7 50.5 121.7 112.9 0 19.4-5.6 38.4-15.7 55.5-15.3 25-39.8 43.5-69.4 52.3-7.9 2.3-13.9 3.2-19.4 3.2-13 0-23.1-10.2-23.1-23.1 0-13 10.2-23.1 23.1-23.1.9 0 2.8 0 5.1-.9 19.9-5.6 35.6-17.1 44.4-32.4 6-9.7 8.8-20.4 8.8-31.5 0-36.6-33.8-66.6-75-66.6-14.4 0-28.2 3.7-40.7 10.6-21.8 12.5-34.7 33.3-34.7 56v193.9c0 39.3-21.8 75.4-57.9 95.8-19.4 11.1-41.2 16.7-63.4 16.7-67.1 0-121.7-50.5-121.7-112.9 0-19.4 5.6-38.4 15.7-55.5 15.3-25 39.8-43.5 69.4-52.3 8.3-2.3 13.9-3.2 19.4-3.2 13 0 23.1 10.2 23.1 23.1 0 13-10.2 23.1-23.1 23.1-.9 0-2.8 0-5.1.9-19.9 6-35.6 17.6-44.4 32.4-6 9.7-8.8 20.4-8.8 31.5 0 36.6 33.8 66.6 75.4 66.6 14.4 0 28.2-3.7 40.7-10.6 21.8-12.5 34.7-33.3 34.7-56V403.3c0-39.3 21.8-75.4 57.9-95.8 19-11.6 40.7-17.2 63-17.2zM510.8 929c231.1 0 418.4-187.3 418.4-418.4S741.9 92.1 510.8 92.1 92.4 279.5 92.4 510.6 279.7 929 510.8 929zm0 22C267.5 951 70.3 753.8 70.3 510.6S267.5 70.1 510.8 70.1s440.5 197.2 440.5 440.5S754.1 951 510.8 951z" fill="#58bf6b" /></symbol><symbol class="icon" viewBox="0 0 1115 1024" id="icon-pay-icon-wx_native"><defs><style>@font-face{font-family:feedback-iconfont;src:url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.eot?#iefix) format("embedded-opentype"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff2) format("woff2"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff) format("woff"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.ttf) format("truetype"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.svg#iconfont) format("svg")}</style></defs><path d="M751.388 68.267a34.133 34.133 0 0 1 0-68.267h227.556a91.022 91.022 0 0 1 91.022 91.022v227.556a34.133 34.133 0 1 1-68.266 0V91.022a22.756 22.756 0 0 0-22.756-22.755H751.388M1001.7 705.422a34.133 34.133 0 0 1 68.266 0v227.556A91.022 91.022 0 0 1 978.944 1024H748.885a34.133 34.133 0 0 1 0-68.267H978.49a22.756 22.756 0 0 0 22.755-22.755V705.422M364.09 955.733a34.133 34.133 0 1 1 0 68.267H136.533a91.022 91.022 0 0 1-91.022-91.022V705.422a34.133 34.133 0 0 1 68.267 0v227.556a22.756 22.756 0 0 0 22.755 22.755H364.09M113.778 318.578a34.133 34.133 0 1 1-68.267 0V91.022A91.022 91.022 0 0 1 136.533 0H364.09a34.133 34.133 0 0 1 0 68.267H136.533a22.756 22.756 0 0 0-22.755 22.755v227.556M34.133 477.867a34.133 34.133 0 0 0 0 68.266h168.619v-68.266zm1046.756 0H912.27v68.266h168.619a34.133 34.133 0 0 0 0-68.266zM202.752 157.24h709.746v320.627H202.752zm0 388.893h709.746V866.76H202.752z" fill="#04C361" /></symbol><symbol class="icon" viewBox="0 0 1260 1024" id="icon-pay-icon-wx_pub"><defs><style>@font-face{font-family:feedback-iconfont;src:url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.eot?#iefix) format("embedded-opentype"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff2) format("woff2"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff) format("woff"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.ttf) format("truetype"),url(//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.svg#iconfont) format("svg")}</style></defs><path d="M797.148 481.753A269.194 269.194 0 0 0 900.04 269.824C900.04 120.99 779.03 0 630.157 0 481.283 0 360.274 120.99 360.274 269.824c0 85.878 40.33 162.462 102.912 211.929a450.974 450.974 0 0 0-153.344 101.021c-85.543 85.524-132.608 199.208-132.608 320.236 0 25.01 0 51.712.197 76.367a44.898 44.898 0 0 0 44.82 44.623h816.01a44.8 44.8 0 0 0 44.82-44.623V903.01c0-121.009-47.066-234.732-132.609-320.236a451.072 451.072 0 0 0-153.344-101.021z" fill="#04C361" /><path d="M1186.189 580.391a378.644 378.644 0 0 0-124.377-107.361 223.783 223.783 0 0 0 64.237-157.657c0-49.742-15.872-96.67-45.746-136.074A225.34 225.34 0 0 0 964.71 99.9a37.297 37.297 0 0 0-46.14 25.718c-5.592 19.89 5.79 40.724 25.6 46.356 63.114 18.196 107.363 77.135 107.363 143.4a148.913 148.913 0 0 1-81.23 133.06 38.065 38.065 0 0 0-20.363 36.608c1.32 15.203 11.58 28.16 25.975 32.65 125.479 39.601 209.703 155.038 209.703 287.173v63.074c0 20.638 16.62 37.534 37.16 37.711h.196a37.396 37.396 0 0 0 37.337-37.336V805.06c-.197-81.644-25.777-159.35-74.142-224.69zm-901.77-62.503a36.982 36.982 0 0 0 25.955-32.65 37.455 37.455 0 0 0-20.362-36.628 148.913 148.913 0 0 1-81.231-133.06c0-66.245 44.071-125.184 107.382-143.4a37.612 37.612 0 0 0 25.58-46.356 37.376 37.376 0 0 0-46.139-25.718 225.32 225.32 0 0 0-115.593 79.4 223.252 223.252 0 0 0-45.746 136.074c0 60.258 23.533 116.381 64.237 157.676A380.475 380.475 0 0 0 74.145 580.569 373.839 373.839 0 0 0 .002 805.258v63.232c0 20.657 16.798 37.356 37.356 37.356h.197a37.317 37.317 0 0 0 37.14-37.73V805.06c0-132.332 84.401-247.769 209.723-287.173z" fill="#04C361" /></symbol>',t.insertBefore(n,t.lastChild)};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e):e()}const uJ=Object.freeze({left:0,top:0,width:16,height:16}),Uw=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),Pb=Object.freeze({...uJ,...Uw}),JO=Object.freeze({...Pb,body:"",hidden:!1});function cJ(e,t){const n=function(r,o){const i={};!r.hFlip!=!o.hFlip&&(i.hFlip=!0),!r.vFlip!=!o.vFlip&&(i.vFlip=!0);const a=((r.rotate||0)+(o.rotate||0))%4;return a&&(i.rotate=a),i}(e,t);for(const r in JO)r in Uw?r in e&&!(r in n)&&(n[r]=Uw[r]):r in t?n[r]=t[r]:r in e&&(n[r]=e[r]);return n}function KOe(e,t,n){const r=e.icons,o=e.aliases||Object.create(null);let i={};function a(l){i=cJ(r[l]||o[l],i)}return a(t),n.forEach(a),cJ(e,i)}function YOe(e,t){const n=[];if(typeof e!="object"||typeof e.icons!="object")return n;e.not_found instanceof Array&&e.not_found.forEach(o=>{t(o,null),n.push(o)});const r=function(o){const i=o.icons,a=o.aliases||Object.create(null),l=Object.create(null);return Object.keys(i).concat(Object.keys(a)).forEach(function s(u){if(i[u])return l[u]=[];if(!(u in l)){l[u]=null;const c=a[u]&&a[u].parent,d=c&&s(c);d&&(l[u]=[c].concat(d))}return l[u]}),l}(e);for(const o in r){const i=r[o];i&&(t(o,KOe(e,o,i)),n.push(o))}return n}const Lb=/^[a-z0-9]+(-[a-z0-9]+)*$/,Em=(e,t,n,r="")=>{const o=e.split(":");if(e.slice(0,1)==="@"){if(o.length<2||o.length>3)return null;r=o.shift().slice(1)}if(o.length>3||!o.length)return null;if(o.length>1){const l=o.pop(),s=o.pop(),u={provider:o.length>0?o[0]:r,prefix:s,name:l};return t&&!Ww(u)?null:u}const i=o[0],a=i.split("-");if(a.length>1){const l={provider:r,prefix:a.shift(),name:a.join("-")};return t&&!Ww(l)?null:l}if(n&&r===""){const l={provider:r,prefix:"",name:i};return t&&!Ww(l,n)?null:l}return null},Ww=(e,t)=>!!e&&!(e.provider!==""&&!e.provider.match(Lb)||!(t&&e.prefix===""||e.prefix.match(Lb))||!e.name.match(Lb)),XOe={provider:"",aliases:{},not_found:{},...uJ};function ZO(e,t){for(const n in t)if(n in e&&typeof e[n]!=typeof t[n])return!1;return!0}const Gw=Object.create(null);function xc(e,t){const n=Gw[e]||(Gw[e]=Object.create(null));return n[t]||(n[t]=function(r,o){return{provider:r,prefix:o,icons:Object.create(null),missing:new Set}}(e,t))}function eT(e,t){return function(n){if(typeof n!="object"||n===null)return null;const r=n;if(typeof r.prefix!="string"||!n.icons||typeof n.icons!="object"||!ZO(n,XOe))return null;const o=r.icons;for(const a in o){const l=o[a];if(!a.match(Lb)||typeof l.body!="string"||!ZO(l,JO))return null}const i=r.aliases||Object.create(null);for(const a in i){const l=i[a],s=l.parent;if(!a.match(Lb)||typeof s!="string"||!o[s]&&!i[s]||!ZO(l,JO))return null}return r}(t)?YOe(t,(n,r)=>{r?e.icons[n]=r:e.missing.add(n)}):[]}let tT=!1;function jb(e){const t=typeof e=="string"?Em(e,!0,tT):e;if(t){const n=xc(t.provider,t.prefix),r=t.name;return n.icons[r]||(n.missing.has(r)?null:void 0)}}function dJ(e,t){if(typeof e!="object")return!1;typeof t!="string"&&(t=e.provider||"");const n=e.prefix;return Ww({provider:t,prefix:n,name:"a"})?!!eT(xc(t,n),e):!1}const fJ=Object.freeze({width:null,height:null}),pJ=Object.freeze({...fJ,...Uw}),QOe=/(-?[0-9.]*[0-9]+[0-9.]*)/g,JOe=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function nT(e,t,n){if(t===1)return e;if(n=n||100,typeof e=="number")return Math.ceil(e*t*n)/n;if(typeof e!="string")return e;const r=e.split(QOe);if(r===null||!r.length)return e;const o=[];let i=r.shift(),a=JOe.test(i);for(;;){if(a){const l=parseFloat(i);isNaN(l)?o.push(i):o.push(Math.ceil(l*t*n)/n)}else o.push(i);if(i=r.shift(),i===void 0)return o.join("");a=!a}}const ZOe=e=>e==="unset"||e==="undefined"||e==="none";function qw(e,t){const n={...Pb,...e},r={...pJ,...t},o={left:n.left,top:n.top,width:n.width,height:n.height};let i=n.body;[n,r].forEach(m=>{const v=[],g=m.hFlip,b=m.vFlip;let y,w=m.rotate;switch(g?b?w+=2:(v.push("translate("+(o.width+o.left).toString()+" "+(0-o.top).toString()+")"),v.push("scale(-1 1)"),o.top=o.left=0):b&&(v.push("translate("+(0-o.left).toString()+" "+(o.height+o.top).toString()+")"),v.push("scale(1 -1)"),o.top=o.left=0),w<0&&(w-=4*Math.floor(w/4)),w%=4,w){case 1:y=o.height/2+o.top,v.unshift("rotate(90 "+y.toString()+" "+y.toString()+")");break;case 2:v.unshift("rotate(180 "+(o.width/2+o.left).toString()+" "+(o.height/2+o.top).toString()+")");break;case 3:y=o.width/2+o.left,v.unshift("rotate(-90 "+y.toString()+" "+y.toString()+")")}w%2==1&&(o.left!==o.top&&(y=o.left,o.left=o.top,o.top=y),o.width!==o.height&&(y=o.width,o.width=o.height,o.height=y)),v.length&&(i='<g transform="'+v.join(" ")+'">'+i+"</g>")});const a=r.width,l=r.height,s=o.width,u=o.height;let c,d;a===null?(d=l===null?"1em":l==="auto"?u:l,c=nT(d,s/u)):(c=a==="auto"?s:a,d=l===null?nT(c,u/s):l==="auto"?u:l);const f={},p=(m,v)=>{ZOe(v)||(f[m]=v.toString())};return p("width",c),p("height",d),f.viewBox=o.left.toString()+" "+o.top.toString()+" "+s.toString()+" "+u.toString(),{attributes:f,body:i}}const eTe=/\sid="(\S+)"/g,tTe="IconifyId"+Date.now().toString(16)+(16777216*Math.random()|0).toString(16);let nTe=0;function hJ(e,t=tTe){const n=[];let r;for(;r=eTe.exec(e);)n.push(r[1]);if(!n.length)return e;const o="suffix"+(16777216*Math.random()|Date.now()).toString(16);return n.forEach(i=>{const a=typeof t=="function"?t(i):t+(nTe++).toString(),l=i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+a+o+"$3")}),e=e.replace(new RegExp(o,"g"),"")}const b0={local:!0,session:!0},vJ={local:new Set,session:new Set};let rT=!1;const mJ="iconify2",Vb="iconify",gJ=Vb+"-count",yJ=Vb+"-version",bJ=36e5,rTe=168;function oT(e,t){try{return e.getItem(t)}catch{}}function iT(e,t,n){try{return e.setItem(t,n),!0}catch{}}function AJ(e,t){try{e.removeItem(t)}catch{}}function aT(e,t){return iT(e,gJ,t.toString())}function lT(e){return parseInt(oT(e,gJ))||0}let Kw=typeof window>"u"?{}:window;function wJ(e){const t=e+"Storage";try{if(Kw&&Kw[t]&&typeof Kw[t].length=="number")return Kw[t]}catch{}b0[e]=!1}function xJ(e,t){const n=wJ(e);if(!n)return;const r=oT(n,yJ);if(r!==mJ){if(r){const l=lT(n);for(let s=0;s<l;s++)AJ(n,Vb+s.toString())}return iT(n,yJ,mJ),void aT(n,0)}const o=Math.floor(Date.now()/bJ)-rTe,i=l=>{const s=Vb+l.toString(),u=oT(n,s);if(typeof u=="string"){try{const c=JSON.parse(u);if(typeof c=="object"&&typeof c.cached=="number"&&c.cached>o&&typeof c.provider=="string"&&typeof c.data=="object"&&typeof c.data.prefix=="string"&&t(c,l))return!0}catch{}AJ(n,s)}};let a=lT(n);for(let l=a-1;l>=0;l--)i(l)||(l===a-1?(a--,aT(n,a)):vJ[e].add(l))}function _J(){if(!rT){rT=!0;for(const e in b0)xJ(e,t=>{const n=t.data,r=xc(t.provider,n.prefix);if(!eT(r,n).length)return!1;const o=n.lastModified||-1;return r.lastModifiedCached=r.lastModifiedCached?Math.min(r.lastModifiedCached,o):o,!0})}}function EJ(e,t){switch(e){case"local":case"session":b0[e]=t;break;case"all":for(const n in b0)b0[n]=t}}const sT=Object.create(null);function CJ(e,t){sT[e]=t}function uT(e){return sT[e]||sT[""]}function cT(e){let t;if(typeof e.resources=="string")t=[e.resources];else if(t=e.resources,!(t instanceof Array&&t.length))return null;return{resources:t,path:e.path||"/",maxURL:e.maxURL||500,rotate:e.rotate||750,timeout:e.timeout||5e3,random:e.random===!0,index:e.index||0,dataAfterTimeout:e.dataAfterTimeout!==!1}}const Yw=Object.create(null),Xw=["https://api.simplesvg.com","https://api.unisvg.com"],dT=[];for(;Xw.length>0;)Xw.length===1||Math.random()>.5?dT.push(Xw.shift()):dT.push(Xw.pop());function SJ(e,t){const n=cT(t);return n!==null&&(Yw[e]=n,!0)}function Qw(e){return Yw[e]}Yw[""]=cT({resources:["https://api.iconify.design"].concat(dT)});let Jw=(()=>{let e;try{if(e=fetch,typeof e=="function")return e}catch{}})();const oTe={prepare:(e,t,n)=>{const r=[],o=function(s,u){const c=Qw(s);if(!c)return 0;let d;if(c.maxURL){let f=0;c.resources.forEach(m=>{f=Math.max(f,m.length)});const p=u+".json?icons=";d=c.maxURL-f-c.path.length-p.length}else d=0;return d}(e,t),i="icons";let a={type:i,provider:e,prefix:t,icons:[]},l=0;return n.forEach((s,u)=>{l+=s.length+1,l>=o&&u>0&&(r.push(a),a={type:i,provider:e,prefix:t,icons:[]},l=s.length),a.icons.push(s)}),r.push(a),r},send:(e,t,n)=>{if(!Jw)return void n("abort",424);let r=function(i){if(typeof i=="string"){const a=Qw(i);if(a)return a.path}return"/"}(t.provider);switch(t.type){case"icons":{const i=t.prefix,a=t.icons.join(",");r+=i+".json?"+new URLSearchParams({icons:a}).toString();break}case"custom":{const i=t.uri;r+=i.slice(0,1)==="/"?i.slice(1):i;break}default:return void n("abort",400)}let o=503;Jw(e+r).then(i=>{const a=i.status;if(a===200)return o=501,i.json();setTimeout(()=>{n(function(l){return l===404}(a)?"abort":"next",a)})}).then(i=>{setTimeout(typeof i=="object"&&i!==null?()=>{n("success",i)}:()=>{i===404?n("abort",i):n("next",o)})}).catch(()=>{n("next",o)})}};function kJ(e,t){e.forEach(n=>{const r=n.loaderCallbacks;r&&(n.loaderCallbacks=r.filter(o=>o.id!==t))})}let iTe=0;var aTe={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function lTe(e,t,n,r){const o=e.resources.length,i=e.random?Math.floor(Math.random()*o):e.index;let a;if(e.random){let x=e.resources.slice(0);for(a=[];x.length>1;){const _=Math.floor(Math.random()*x.length);a.push(x[_]),x=x.slice(0,_).concat(x.slice(_+1))}a=a.concat(x)}else a=e.resources.slice(i).concat(e.resources.slice(0,i));const l=Date.now();let s,u="pending",c=0,d=null,f=[],p=[];function m(){d&&(clearTimeout(d),d=null)}function v(){u==="pending"&&(u="aborted"),m(),f.forEach(x=>{x.status==="pending"&&(x.status="aborted")}),f=[]}function g(x,_){_&&(p=[]),typeof x=="function"&&p.push(x)}function b(){u="failed",p.forEach(x=>{x(void 0,s)})}function y(){f.forEach(x=>{x.status==="pending"&&(x.status="aborted")}),f=[]}function w(){if(u!=="pending")return;m();const x=a.shift();if(x===void 0)return f.length?void(d=setTimeout(()=>{m(),u==="pending"&&(y(),b())},e.timeout)):void b();const _={status:"pending",resource:x,callback:(E,C)=>{(function(T,k,I){const O=k!=="success";switch(f=f.filter(F=>F!==T),u){case"pending":break;case"failed":if(O||!e.dataAfterTimeout)return;break;default:return}if(k==="abort")return s=I,void b();if(O)return s=I,void(f.length||(a.length?w():b()));if(m(),y(),!e.random){const F=e.resources.indexOf(T.resource);F!==-1&&F!==e.index&&(e.index=F)}u="completed",p.forEach(F=>{F(I)})})(_,E,C)}};f.push(_),c++,d=setTimeout(w,e.rotate),n(x,t,_.callback)}return typeof r=="function"&&p.push(r),setTimeout(w),function(){return{startTime:l,payload:t,status:u,queriesSent:c,queriesPending:f.length,subscribe:g,abort:v}}}function DJ(e){const t={...aTe,...e};let n=[];function r(){n=n.filter(i=>i().status==="pending")}return{query:function(i,a,l){const s=lTe(t,i,a,(u,c)=>{r(),l&&l(u,c)});return n.push(s),s},find:function(i){return n.find(a=>i(a))||null},setIndex:i=>{t.index=i},getIndex:()=>t.index,cleanup:r}}function OJ(){}const fT=Object.create(null);function TJ(e,t,n){let r,o;if(typeof e=="string"){const i=uT(e);if(!i)return n(void 0,424),OJ;o=i.send;const a=function(l){if(!fT[l]){const s=Qw(l);if(!s)return;const u={config:s,redundancy:DJ(s)};fT[l]=u}return fT[l]}(e);a&&(r=a.redundancy)}else{const i=cT(e);if(i){r=DJ(i);const a=uT(e.resources?e.resources[0]:"");a&&(o=a.send)}}return r&&o?r.query(t,o,n)().abort:(n(void 0,424),OJ)}function sTe(e,t){function n(r){let o;if(!b0[r]||!(o=wJ(r)))return;const i=vJ[r];let a;if(i.size)i.delete(a=Array.from(i).shift());else if(a=lT(o),!aT(o,a+1))return;const l={cached:Math.floor(Date.now()/bJ),provider:e.provider,data:t};return iT(o,Vb+a.toString(),JSON.stringify(l))}rT||_J(),t.lastModified&&!function(r,o){const i=r.lastModifiedCached;if(i&&i>=o)return i===o;if(r.lastModifiedCached=o,i)for(const a in b0)xJ(a,l=>{const s=l.data;return l.provider!==r.provider||s.prefix!==r.prefix||s.lastModified===o});return!0}(e,t.lastModified)||Object.keys(t.icons).length&&(t.not_found&&delete(t=Object.assign({},t)).not_found,n("local")||n("session"))}function MJ(){}function uTe(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout(()=>{e.iconsLoaderFlag=!1,function(t){t.pendingCallbacksFlag||(t.pendingCallbacksFlag=!0,setTimeout(()=>{t.pendingCallbacksFlag=!1;const n=t.loaderCallbacks?t.loaderCallbacks.slice(0):[];if(!n.length)return;let r=!1;const o=t.provider,i=t.prefix;n.forEach(a=>{const l=a.icons,s=l.pending.length;l.pending=l.pending.filter(u=>{if(u.prefix!==i)return!0;const c=u.name;if(t.icons[c])l.loaded.push({provider:o,prefix:i,name:c});else{if(!t.missing.has(c))return r=!0,!0;l.missing.push({provider:o,prefix:i,name:c})}return!1}),l.pending.length!==s&&(r||kJ([t],a.id),a.callback(l.loaded.slice(0),l.missing.slice(0),l.pending.slice(0),a.abort))})}))}(e)}))}const cTe=e=>{const t=xc(e.provider,e.prefix).pendingIcons;return!(!t||!t.has(e.name))},pT=(e,t)=>{const n=function(s,u=!0,c=!1){const d=[];return s.forEach(f=>{const p=typeof f=="string"?Em(f,u,c):f;p&&d.push(p)}),d}(e,!0,tT),r=function(s){const u={loaded:[],missing:[],pending:[]},c=Object.create(null);s.sort((f,p)=>f.provider!==p.provider?f.provider.localeCompare(p.provider):f.prefix!==p.prefix?f.prefix.localeCompare(p.prefix):f.name.localeCompare(p.name));let d={provider:"",prefix:"",name:""};return s.forEach(f=>{if(d.name===f.name&&d.prefix===f.prefix&&d.provider===f.provider)return;d=f;const p=f.provider,m=f.prefix,v=f.name,g=c[p]||(c[p]=Object.create(null)),b=g[m]||(g[m]=xc(p,m));let y;y=v in b.icons?u.loaded:m===""||b.missing.has(v)?u.missing:u.pending;const w={provider:p,prefix:m,name:v};y.push(w)}),u}(n);if(!r.pending.length){let s=!0;return t&&setTimeout(()=>{s&&t(r.loaded,r.missing,r.pending,MJ)}),()=>{s=!1}}const o=Object.create(null),i=[];let a,l;return r.pending.forEach(s=>{const{provider:u,prefix:c}=s;if(c===l&&u===a)return;a=u,l=c,i.push(xc(u,c));const d=o[u]||(o[u]=Object.create(null));d[c]||(d[c]=[])}),r.pending.forEach(s=>{const{provider:u,prefix:c,name:d}=s,f=xc(u,c),p=f.pendingIcons||(f.pendingIcons=new Set);p.has(d)||(p.add(d),o[u][c].push(d))}),i.forEach(s=>{const{provider:u,prefix:c}=s;o[u][c].length&&function(d,f){d.iconsToLoad?d.iconsToLoad=d.iconsToLoad.concat(f).sort():d.iconsToLoad=f,d.iconsQueueFlag||(d.iconsQueueFlag=!0,setTimeout(()=>{d.iconsQueueFlag=!1;const{provider:p,prefix:m}=d,v=d.iconsToLoad;let g;delete d.iconsToLoad,v&&(g=uT(p))&&g.prepare(p,m,v).forEach(b=>{TJ(p,b,y=>{if(typeof y!="object")b.icons.forEach(w=>{d.missing.add(w)});else try{const w=eT(d,y);if(!w.length)return;const x=d.pendingIcons;x&&w.forEach(_=>{x.delete(_)}),sTe(d,y)}catch(w){console.error(w)}uTe(d)})})}))}(s,o[u][c])}),t?function(s,u,c){const d=iTe++,f=kJ.bind(null,c,d);if(!u.pending.length)return f;const p={id:d,icons:u,callback:s,abort:f};return c.forEach(m=>{(m.loaderCallbacks||(m.loaderCallbacks=[])).push(p)}),f}(t,r,i):MJ};function NJ(e,t){const n={...e};for(const r in t){const o=t[r],i=typeof o;r in fJ?(o===null||o&&(i==="string"||i==="number"))&&(n[r]=o):i===typeof n[r]&&(n[r]=r==="rotate"?o%4:o)}return n}const Zw={...pJ,inline:!1},hT="iconify",vT="iconify-inline",If="iconifyData"+Date.now();let A0=[];function zb(e){for(let t=0;t<A0.length;t++){const n=A0[t];if((typeof n.node=="function"?n.node():n.node)===e)return n}}function FJ(e,t=!1){let n=zb(e);return n?(n.temporary&&(n.temporary=t),n):(n={node:e,temporary:t},A0.push(n),n)}function Hb(){return A0}let $b=null;const dTe={childList:!0,subtree:!0,attributes:!0};function RJ(e){if(!e.observer)return;const t=e.observer;t.pendingScan||(t.pendingScan=setTimeout(()=>{delete t.pendingScan,$b&&$b(e)}))}function fTe(e,t){if(!e.observer)return;const n=e.observer;if(!n.pendingScan)for(let r=0;r<t.length;r++){const o=t[r];if(o.addedNodes&&o.addedNodes.length>0||o.type==="attributes"&&o.target[If]!==void 0)return void(n.paused||RJ(e))}}function IJ(e,t){e.observer.instance.observe(t,dTe)}function e7(e){let t=e.observer;if(t&&t.instance)return;const n=typeof e.node=="function"?e.node():e.node;n&&window&&(t||(t={paused:0},e.observer=t),t.instance=new window.MutationObserver(fTe.bind(null,e)),IJ(e,n),t.paused||RJ(e))}function BJ(){Hb().forEach(e7)}function PJ(e){if(!e.observer)return;const t=e.observer;t.pendingScan&&(clearTimeout(t.pendingScan),delete t.pendingScan),t.instance&&(t.instance.disconnect(),delete t.instance)}function pTe(e){const t=$b!==null;$b!==e&&($b=e,t&&Hb().forEach(PJ)),t?BJ():function(n){const r=document;r.readyState&&r.readyState!=="loading"?n():r.addEventListener("DOMContentLoaded",n)}(BJ)}function mT(e){(e?[e]:Hb()).forEach(t=>{if(!t.observer)return void(t.observer={paused:1});const n=t.observer;n.paused++,!(n.paused>1||!n.instance)&&n.instance.disconnect()})}function gT(e){(e?[e]:Hb()).forEach(t=>{if(!t.observer)return void e7(t);const n=t.observer;if(n.paused&&(n.paused--,!n.paused)){const r=typeof t.node=="function"?t.node():t.node;if(!r)return;n.instance?IJ(t,r):e7(t)}})}function LJ(e,t=!1){const n=FJ(e,t);return e7(n),n}function jJ(e){const t=zb(e);t&&(PJ(t),function(n){A0=A0.filter(r=>n!==r&&n!==(typeof r.node=="function"?r.node():r.node))}(e))}const hTe=/[\s,]+/,vTe=["width","height"],mTe=["inline","hFlip","vFlip"];function gTe(e){const t=e.getAttribute("data-icon"),n=typeof t=="string"&&Em(t,!0);if(!n)return null;const r={...Zw,inline:e.classList&&e.classList.contains(vT)};vTe.forEach(l=>{const s=e.getAttribute("data-"+l);s&&(r[l]=s)});const o=e.getAttribute("data-rotate");typeof o=="string"&&(r.rotate=function(l,s=0){const u=l.replace(/^-?[0-9.]*/,"");function c(d){for(;d<0;)d+=4;return d%4}if(u===""){const d=parseInt(l);return isNaN(d)?0:c(d)}if(u!==l){let d=0;switch(u){case"%":d=25;break;case"deg":d=90}if(d){let f=parseFloat(l.slice(0,l.length-u.length));return isNaN(f)?0:(f/=d,f%1==0?c(f):0)}}return s}(o));const i=e.getAttribute("data-flip");typeof i=="string"&&function(l,s){s.split(hTe).forEach(u=>{switch(u.trim()){case"horizontal":l.hFlip=!0;break;case"vertical":l.vFlip=!0}})}(r,i),mTe.forEach(l=>{const s="data-"+l,u=function(c,d){return c===d||c==="true"||c!==""&&c!=="false"&&null}(e.getAttribute(s),s);typeof u=="boolean"&&(r[l]=u)});const a=e.getAttribute("data-mode");return{name:t,icon:n,customisations:r,mode:a}}const yTe="svg."+hT+", i."+hT+", span."+hT+", i."+vT+", span."+vT;function VJ(e,t){let n=e.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const r in t)n+=" "+r+'="'+t[r]+'"';return'<svg xmlns="http://www.w3.org/2000/svg"'+n+">"+e+"</svg>"}let Ub;function bTe(e){return Ub===void 0&&function(){try{Ub=window.trustedTypes.createPolicy("iconify",{createHTML:t=>t})}catch{Ub=null}}(),Ub?Ub.createHTML(e):e}function zJ(e){const t=new Set(["iconify"]);return["provider","prefix"].forEach(n=>{e[n]&&t.add("iconify--"+e[n])}),t}function HJ(e,t,n,r){const o=e.classList;if(r){const a=r.classList;Array.from(a).forEach(l=>{o.add(l)})}const i=[];return t.forEach(a=>{o.contains(a)?n.has(a)&&i.push(a):(o.add(a),i.push(a))}),n.forEach(a=>{t.has(a)||o.remove(a)}),i}function $J(e,t,n){const r=e.style;(n||[]).forEach(i=>{r.removeProperty(i)});const o=[];for(const i in t)r.getPropertyValue(i)||(o.push(i),r.setProperty(i,t[i]));return o}function UJ(e,t,n){let r;try{r=document.createElement("span")}catch{return e}const o=t.customisations,i=qw(n,o),a=e[If],l=VJ(hJ(i.body),{"aria-hidden":"true",role:"img",...i.attributes});r.innerHTML=bTe(l);const s=r.childNodes[0],u=e.attributes;for(let p=0;p<u.length;p++){const m=u.item(p),v=m.name;v==="class"||s.hasAttribute(v)||s.setAttribute(v,m.value)}const c=HJ(s,zJ(t.icon),new Set(a&&a.addedClasses),e),d=$J(s,o.inline?{"vertical-align":"-0.125em"}:{},a&&a.addedStyles),f={...t,status:"loaded",addedClasses:c,addedStyles:d};return s[If]=f,e.parentNode&&e.parentNode.replaceChild(s,e),s}const ATe={display:"inline-block"},yT={"background-color":"currentColor"},WJ={"background-color":"transparent"},GJ={image:"var(--svg)",repeat:"no-repeat",size:"100% 100%"},qJ={"-webkit-mask":yT,mask:yT,background:WJ};for(const e in qJ){const t=qJ[e];for(const n in GJ)t[e+"-"+n]=GJ[n]}function KJ(e){return e+(e.match(/^[-0-9.]+$/)?"px":"")}let t7=!1;function wTe(){t7||(t7=!0,setTimeout(()=>{t7&&(t7=!1,Cm())}))}function Cm(e,t=!1){const n=Object.create(null);function r(o,i){const{provider:a,prefix:l,name:s}=o,u=xc(a,l),c=u.icons[s];if(c)return{status:"loaded",icon:c};if(u.missing.has(s))return{status:"missing"};if(i&&!cTe(o)){const d=n[a]||(n[a]=Object.create(null));(d[l]||(d[l]=new Set)).add(s)}return{status:"loading"}}(e?[e]:Hb()).forEach(o=>{const i=typeof o.node=="function"?o.node():o.node;if(!i||!i.querySelectorAll)return;let a=!1,l=!1;function s(u,c,d){if(l||(l=!0,mT(o)),u.tagName.toUpperCase()!=="SVG"){const f=c.mode,p=f==="mask"||f!=="bg"&&(f==="style"?d.body.indexOf("currentColor")!==-1:null);if(typeof p=="boolean")return void function(m,v,g,b){const y=v.customisations,w=qw(g,y),x=w.attributes,_=m[If],E=VJ(w.body,{...x,width:g.width+"",height:g.height+""}),C=HJ(m,zJ(v.icon),new Set(_&&_.addedClasses)),T=function(F){return'url("'+function(N){return"data:image/svg+xml,"+function(B){return B.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(/</g,"%3C").replace(/>/g,"%3E").replace(/\s+/g," ")}(N)}(F)+'")'}(E),k={"--svg":T,width:KJ(x.width),height:KJ(x.height),...ATe,...b?yT:WJ};y.inline&&(k["vertical-align"]="-0.125em");const I=$J(m,k,_&&_.addedStyles),O={...v,status:"loaded",addedClasses:C,addedStyles:I};m[If]=O}(u,c,{...Pb,...d},p)}UJ(u,c,d)}(function(u){const c=[];return u.querySelectorAll(yTe).forEach(d=>{const f=d[If]||d.tagName.toLowerCase()!=="svg"?gTe(d):null;f&&c.push({node:d,props:f})}),c})(i).forEach(({node:u,props:c})=>{const d=u[If];if(!d){const{status:p,icon:m}=r(c.icon,!0);return m?void s(u,c,m):(a=a||p==="loading",void(u[If]={...c,status:p}))}let f;if(function(p,m){if(p.name!==m.name||p.mode!==m.mode)return!0;const v=p.customisations,g=m.customisations;for(const b in Zw)if(v[b]!==g[b])return!0;return!1}(d,c)){if(f=r(c.icon,d.name!==c.name),!f.icon)return a=a||f.status==="loading",void Object.assign(d,{...c,status:f.status})}else{if(d.status!=="loading")return;if(f=r(c.icon,!1),!f.icon)return void(d.status=f.status)}s(u,c,f.icon)}),o.temporary&&!a?jJ(i):t&&a?LJ(i,!0):l&&o.observer&&gT(o)});for(const o in n){const i=n[o];for(const a in i){const l=i[a];pT(Array.from(l).map(s=>({provider:o,prefix:a,name:s})),wTe)}}}function YJ(e,t,n=!1){const r=jb(e);if(!r)return null;const o=Em(e),i=NJ(Zw,t||{}),a=UJ(document.createElement("span"),{name:e,icon:o,customisations:i},r);return n?a.outerHTML:a}if(typeof document<"u"&&typeof window<"u"){(function(){if(document.documentElement)return FJ(document.documentElement);A0.push({node:()=>document.documentElement})})();const e=window;if(e.IconifyPreload!==void 0){const t=e.IconifyPreload,n="Invalid IconifyPreload syntax.";typeof t=="object"&&t!==null&&(t instanceof Array?t:[t]).forEach(r=>{try{(typeof r!="object"||r===null||r instanceof Array||typeof r.icons!="object"||typeof r.prefix!="string"||!dJ(r))&&console.error(n)}catch{console.error(n)}})}setTimeout(()=>{pTe(Cm),Cm()})}if(CJ("",oTe),typeof document<"u"&&typeof window<"u"){_J();const e=window;if(e.IconifyProviders!==void 0){const t=e.IconifyProviders;if(typeof t=="object"&&t!==null)for(const n in t){const r="IconifyProviders["+n+"] is invalid.";try{const o=t[n];if(typeof o!="object"||!o||o.resources===void 0)continue;SJ(n,o)||console.error(r)}catch{console.error(r)}}}}const bT={_api:{getAPIConfig:Qw,setAPIModule:CJ,sendAPIQuery:TJ,setFetch:function(e){Jw=e},getFetch:function(){return Jw},listAPIProviders:function(){return Object.keys(Yw)}},addAPIProvider:SJ,loadIcons:pT,loadIcon:e=>new Promise((t,n)=>{const r=typeof e=="string"?Em(e,!0):e;r?pT([r||e],o=>{if(o.length&&r){const i=jb(r);if(i)return void t({...Pb,...i})}n(e)}):n(e)}),iconExists:function(e){return!!jb(e)},getIcon:function(e){const t=jb(e);return t?{...Pb,...t}:null},listIcons:function(e,t){let n=[];return(typeof e=="string"?[e]:Object.keys(Gw)).forEach(r=>{(typeof r=="string"&&typeof t=="string"?[t]:Object.keys(Gw[r]||{})).forEach(o=>{const i=xc(r,o);n=n.concat(Object.keys(i.icons).map(a=>(r!==""?"@"+r+":":"")+o+":"+a))})}),n},addIcon:function(e,t){const n=Em(e,!0,tT);return!!n&&function(r,o,i){try{if(typeof i.body=="string")return r.icons[o]={...i},!0}catch{}return!1}(xc(n.provider,n.prefix),n.name,t)},addCollection:dJ,replaceIDs:hJ,calculateSize:nT,buildIcon:qw,getVersion:function(){return"3.1.1"},renderSVG:function(e,t){return YJ(e,t,!1)},renderHTML:function(e,t){return YJ(e,t,!0)},renderIcon:function(e,t){const n=jb(e);return n?qw(n,NJ(Zw,t||{})):null},scan:function(e){e?function(t){const n=zb(t);n?Cm(n):Cm({node:t,temporary:!0},!0)}(e):Cm()},observe:LJ,stopObserving:jJ,pauseObserver:function(e){if(e){const t=zb(e);t&&mT(t)}else mT()},resumeObserver:function(e){if(e){const t=zb(e);t&&gT(t)}else gT()},enableCache:function(e,t){EJ(e,t!==!1)},disableCache:function(e){EJ(e,!0)}};try{self.Iconify===void 0&&(self.Iconify=bT)}catch{}const XJ=bT.default||bT;JSON.parse('[{"prefix":"system-uicons","width":21,"height":21,"icons":{"carousel":{"body":"<path fill=\\"none\\" stroke=\\"currentColor\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" d=\\"M14.5 5.5h-8a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-6a2 2 0 0 0-2-2m4 0v10m-16-10v10\\"/>"},"reset-alt":{"body":"<g fill=\\"none\\" fill-rule=\\"evenodd\\" stroke=\\"currentColor\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\"><path d=\\"M14.5 3.5c2.414 1.377 4 4.022 4 7a8 8 0 1 1-8-8\\"/><path d=\\"M14.5 7.5v-4h4\\"/></g>"}}},{"prefix":"ep","width":1024,"height":1024,"icons":{"arrow-down":{"body":"<path fill=\\"currentColor\\" d=\\"M831.872 340.864L512 652.672L192.128 340.864a30.59 30.59 0 0 0-42.752 0a29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728a30.59 30.59 0 0 0-42.752 0z\\"/>"},"arrow-left":{"body":"<path fill=\\"currentColor\\" d=\\"M609.408 149.376L277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0a30.59 30.59 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.59 30.59 0 0 0 0-42.688a29.12 29.12 0 0 0-41.728 0\\"/>"},"arrow-right":{"body":"<path fill=\\"currentColor\\" d=\\"M340.864 149.312a30.59 30.59 0 0 0 0 42.752L652.736 512L340.864 831.872a30.59 30.59 0 0 0 0 42.752a29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z\\"/>"},"arrow-up":{"body":"<path fill=\\"currentColor\\" d=\\"m488.832 344.32l-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872l319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0\\"/>"},"avatar":{"body":"<path fill=\\"currentColor\\" d=\\"M628.736 528.896A416 416 0 0 1 928 928H96a415.87 415.87 0 0 1 299.264-399.104L512 704zM720 304a208 208 0 1 1-416 0a208 208 0 0 1 416 0\\"/>"},"back":{"body":"<path fill=\\"currentColor\\" d=\\"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64\\"/><path fill=\\"currentColor\\" d=\\"m237.248 512l265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z\\"/>"},"basketball":{"body":"<path fill=\\"currentColor\\" d=\\"M778.752 788.224a382.46 382.46 0 0 0 116.032-245.632a256.51 256.51 0 0 0-241.728-13.952a762.9 762.9 0 0 1 125.696 259.584m-55.04 44.224a699.65 699.65 0 0 0-125.056-269.632a256.13 256.13 0 0 0-56.064 331.968a382.7 382.7 0 0 0 181.12-62.336m-254.08 61.248A320.13 320.13 0 0 1 557.76 513.6a716 716 0 0 0-48.192-48.128a320.13 320.13 0 0 1-379.264 88.384a382.4 382.4 0 0 0 110.144 229.696a382.4 382.4 0 0 0 229.184 110.08zM129.28 481.088a256.13 256.13 0 0 0 331.072-56.448a699.65 699.65 0 0 0-268.8-124.352a382.66 382.66 0 0 0-62.272 180.8m106.56-235.84a762.9 762.9 0 0 1 258.688 125.056a256.51 256.51 0 0 0-13.44-241.088A382.46 382.46 0 0 0 235.84 245.248m318.08-114.944c40.576 89.536 37.76 193.92-8.448 281.344a780 780 0 0 1 66.176 66.112a320.83 320.83 0 0 1 282.112-8.128a382.4 382.4 0 0 0-110.144-229.12a382.4 382.4 0 0 0-229.632-110.208zM828.8 828.8a448 448 0 1 1-633.6-633.6a448 448 0 0 1 633.6 633.6\\"/>"},"bell":{"body":"<path fill=\\"currentColor\\" d=\\"M512 64a64 64 0 0 1 64 64v64H448v-64a64 64 0 0 1 64-64\\"/><path fill=\\"currentColor\\" d=\\"M256 768h512V448a256 256 0 1 0-512 0zm256-640a320 320 0 0 1 320 320v384H192V448a320 320 0 0 1 320-320\\"/><path fill=\\"currentColor\\" d=\\"M96 768h832q32 0 32 32t-32 32H96q-32 0-32-32t32-32m352 128h128a64 64 0 0 1-128 0\\"/>"},"bell-filled":{"body":"<path fill=\\"currentColor\\" d=\\"M640 832a128 128 0 0 1-256 0zm192-64H134.4a38.4 38.4 0 0 1 0-76.8H192V448c0-154.88 110.08-284.16 256.32-313.6a64 64 0 1 1 127.36 0A320.13 320.13 0 0 1 832 448v243.2h57.6a38.4 38.4 0 0 1 0 76.8z\\"/>"},"calendar":{"body":"<path fill=\\"currentColor\\" d=\\"M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64\\"/>"},"caret-bottom":{"body":"<path fill=\\"currentColor\\" d=\\"m192 384l320 384l320-384z\\"/>"},"caret-top":{"body":"<path fill=\\"currentColor\\" d=\\"M512 320L192 704h639.936z\\"/>"},"cellphone":{"body":"<path fill=\\"currentColor\\" d=\\"M256 128a64 64 0 0 0-64 64v640a64 64 0 0 0 64 64h512a64 64 0 0 0 64-64V192a64 64 0 0 0-64-64zm0-64h512a128 128 0 0 1 128 128v640a128 128 0 0 1-128 128H256a128 128 0 0 1-128-128V192A128 128 0 0 1 256 64m128 128h256a32 32 0 1 1 0 64H384a32 32 0 0 1 0-64m128 640a64 64 0 1 1 0-128a64 64 0 0 1 0 128\\"/>"},"check":{"body":"<path fill=\\"currentColor\\" d=\\"M406.656 706.944L195.84 496.256a32 32 0 1 0-45.248 45.248l256 256l512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z\\"/>"},"checked":{"body":"<path fill=\\"currentColor\\" d=\\"M704 192h160v736H160V192h160.064v64H704zM311.616 537.28l-45.312 45.248L447.36 763.52l316.8-316.8l-45.312-45.184L447.36 673.024zM384 192V96h256v96z\\"/>"},"circle-check":{"body":"<path fill=\\"currentColor\\" d=\\"M512 896a384 384 0 1 0 0-768a384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896a448 448 0 0 1 0 896\\"/><path fill=\\"currentColor\\" d=\\"M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752z\\"/>"},"circle-close-filled":{"body":"<path fill=\\"currentColor\\" d=\\"M512 64a448 448 0 1 1 0 896a448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512L353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336L616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512L670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z\\"/>"},"circle-plus-filled":{"body":"<path fill=\\"currentColor\\" d=\\"M512 64a448 448 0 1 1 0 896a448 448 0 0 1 0-896m-38.4 409.6H326.4a38.4 38.4 0 1 0 0 76.8h147.2v147.2a38.4 38.4 0 0 0 76.8 0V550.4h147.2a38.4 38.4 0 0 0 0-76.8H550.4V326.4a38.4 38.4 0 1 0-76.8 0z\\"/>"},"close":{"body":"<path fill=\\"currentColor\\" d=\\"M764.288 214.592L512 466.88L259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512L214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z\\"/>"},"coin":{"body":"<path fill=\\"currentColor\\" d=\\"m161.92 580.736l29.888 58.88C171.328 659.776 160 681.728 160 704c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 615.808 928 657.664 928 704c0 129.728-188.544 224-416 224S96 833.728 96 704c0-46.592 24.32-88.576 65.92-123.264\\"/><path fill=\\"currentColor\\" d=\\"m161.92 388.736l29.888 58.88C171.328 467.84 160 489.792 160 512c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 423.808 928 465.664 928 512c0 129.728-188.544 224-416 224S96 641.728 96 512c0-46.592 24.32-88.576 65.92-123.264\\"/><path fill=\\"currentColor\\" d=\\"M512 544c-227.456 0-416-94.272-416-224S284.544 96 512 96s416 94.272 416 224s-188.544 224-416 224m0-64c196.672 0 352-77.696 352-160S708.672 160 512 160s-352 77.696-352 160s155.328 160 352 160\\"/>"},"comment":{"body":"<path fill=\\"currentColor\\" d=\\"M736 504a56 56 0 1 1 0-112a56 56 0 0 1 0 112m-224 0a56 56 0 1 1 0-112a56 56 0 0 1 0 112m-224 0a56 56 0 1 1 0-112a56 56 0 0 1 0 112M128 128v640h192v160l224-160h352V128z\\"/>"},"copy-document":{"body":"<path fill=\\"currentColor\\" d=\\"M768 832a128 128 0 0 1-128 128H192A128 128 0 0 1 64 832V384a128 128 0 0 1 128-128v64a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64z\\"/><path fill=\\"currentColor\\" d=\\"M384 128a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64V192a64 64 0 0 0-64-64zm0-64h448a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H384a128 128 0 0 1-128-128V192A128 128 0 0 1 384 64\\"/>"},"cpu":{"body":"<path fill=\\"currentColor\\" d=\\"M320 256a64 64 0 0 0-64 64v384a64 64 0 0 0 64 64h384a64 64 0 0 0 64-64V320a64 64 0 0 0-64-64zm0-64h384a128 128 0 0 1 128 128v384a128 128 0 0 1-128 128H320a128 128 0 0 1-128-128V320a128 128 0 0 1 128-128\\"/><path fill=\\"currentColor\\" d=\\"M512 64a32 32 0 0 1 32 32v128h-64V96a32 32 0 0 1 32-32m160 0a32 32 0 0 1 32 32v128h-64V96a32 32 0 0 1 32-32m-320 0a32 32 0 0 1 32 32v128h-64V96a32 32 0 0 1 32-32m160 896a32 32 0 0 1-32-32V800h64v128a32 32 0 0 1-32 32m160 0a32 32 0 0 1-32-32V800h64v128a32 32 0 0 1-32 32m-320 0a32 32 0 0 1-32-32V800h64v128a32 32 0 0 1-32 32M64 512a32 32 0 0 1 32-32h128v64H96a32 32 0 0 1-32-32m0-160a32 32 0 0 1 32-32h128v64H96a32 32 0 0 1-32-32m0 320a32 32 0 0 1 32-32h128v64H96a32 32 0 0 1-32-32m896-160a32 32 0 0 1-32 32H800v-64h128a32 32 0 0 1 32 32m0-160a32 32 0 0 1-32 32H800v-64h128a32 32 0 0 1 32 32m0 320a32 32 0 0 1-32 32H800v-64h128a32 32 0 0 1 32 32\\"/>"},"d-arrow-left":{"body":"<path fill=\\"currentColor\\" d=\\"M529.408 149.376a29.12 29.12 0 0 1 41.728 0a30.59 30.59 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.59 30.59 0 0 1-.512 43.264a29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672zm256 0a29.12 29.12 0 0 1 41.728 0a30.59 30.59 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.59 30.59 0 0 1-.512 43.264a29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672z\\"/>"},"d-arrow-right":{"body":"<path fill=\\"currentColor\\" d=\\"M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0a30.59 30.59 0 0 1 0-42.752L764.736 512L452.864 192a30.59 30.59 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0a30.59 30.59 0 0 1 0-42.752L508.736 512L196.864 192a30.59 30.59 0 0 1 0-42.688\\"/>"},"delete":{"body":"<path fill=\\"currentColor\\" d=\\"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32\\"/>"},"discount":{"body":"<path fill=\\"currentColor\\" d=\\"M224 704h576V318.336L552.512 115.84a64 64 0 0 0-81.024 0L224 318.336zm0 64v128h576V768zM593.024 66.304l259.2 212.096A32 32 0 0 1 864 303.168V928a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V303.168a32 32 0 0 1 11.712-24.768l259.2-212.096a128 128 0 0 1 162.112 0\\"/><path fill=\\"currentColor\\" d=\\"M512 448a64 64 0 1 0 0-128a64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256a128 128 0 0 1 0 256\\"/>"},"document":{"body":"<path fill=\\"currentColor\\" d=\\"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z\\"/>"},"download":{"body":"<path fill=\\"currentColor\\" d=\\"M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m384-253.696l236.288-236.352l45.248 45.248L508.8 704L192 387.2l45.248-45.248L480 584.704V128h64z\\"/>"},"edit":{"body":"<path fill=\\"currentColor\\" d=\\"M832 512a32 32 0 1 1 64 0v352a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h352a32 32 0 0 1 0 64H192v640h640z\\"/><path fill=\\"currentColor\\" d=\\"m469.952 554.24l52.8-7.552L847.104 222.4a32 32 0 1 0-45.248-45.248L477.44 501.44l-7.552 52.8zm422.4-422.4a96 96 0 0 1 0 135.808l-331.84 331.84a32 32 0 0 1-18.112 9.088L436.8 623.68a32 32 0 0 1-36.224-36.224l15.104-105.6a32 32 0 0 1 9.024-18.112l331.904-331.84a96 96 0 0 1 135.744 0z\\"/>"},"expand":{"body":"<path fill=\\"currentColor\\" d=\\"M128 192h768v128H128zm0 256h512v128H128zm0 256h768v128H128zm576-352l192 160l-192 128z\\"/>"},"fold":{"body":"<path fill=\\"currentColor\\" d=\\"M896 192H128v128h768zm0 256H384v128h512zm0 256H128v128h768zM320 384L128 512l192 128z\\"/>"},"folder-opened":{"body":"<path fill=\\"currentColor\\" d=\\"M878.08 448H241.92l-96 384h636.16zM832 384v-64H485.76L357.504 192H128v448l57.92-231.744A32 32 0 0 1 216.96 384zm-24.96 512H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h287.872l128.384 128H864a32 32 0 0 1 32 32v96h23.04a32 32 0 0 1 31.04 39.744l-112 448A32 32 0 0 1 807.04 896\\"/>"},"help-filled":{"body":"<path fill=\\"currentColor\\" d=\\"M926.784 480H701.312A192.51 192.51 0 0 0 544 322.688V97.216A416.064 416.064 0 0 1 926.784 480m0 64A416.064 416.064 0 0 1 544 926.784V701.312A192.51 192.51 0 0 0 701.312 544zM97.28 544h225.472A192.51 192.51 0 0 0 480 701.312v225.472A416.064 416.064 0 0 1 97.216 544zm0-64A416.064 416.064 0 0 1 480 97.216v225.472A192.51 192.51 0 0 0 322.688 480H97.216z\\"/>"},"hide":{"body":"<path fill=\\"currentColor\\" d=\\"M876.8 156.8c0-9.6-3.2-16-9.6-22.4s-12.8-9.6-22.4-9.6s-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8c-160 16-288 73.6-377.6 176S0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4s3.2 16 9.6 22.4s12.8 9.6 22.4 9.6s16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4m-646.4 528Q115.2 579.2 76.8 512q43.2-72 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4m140.8-96Q352 555.2 352 512c0-44.8 16-83.2 48-112s67.2-48 112-48c28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6q-43.2 72-153.6 172.8c-73.6 67.2-172.8 108.8-284.8 115.2c-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8c160-16 288-73.6 377.6-176S1024 528 1024 512s-48.001-73.6-134.401-176\\"/><path fill=\\"currentColor\\" d=\\"M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2c64 0 115.2-22.4 160-64c41.6-41.6 64-96 64-160c0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4c0 44.8-16 83.2-48 112s-67.2 48-112 48\\"/>"},"home-filled":{"body":"<path fill=\\"currentColor\\" d=\\"M512 128L128 447.936V896h255.936V640H640v256h255.936V447.936z\\"/>"},"house":{"body":"<path fill=\\"currentColor\\" d=\\"M192 413.952V896h640V413.952L512 147.328zM139.52 374.4l352-293.312a32 32 0 0 1 40.96 0l352 293.312A32 32 0 0 1 896 398.976V928a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V398.976a32 32 0 0 1 11.52-24.576\\"/>"},"info-filled":{"body":"<path fill=\\"currentColor\\" d=\\"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.99 12.99 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296c-44.096 0-108.992 44.736-148.48 101.504c0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04c67.84 0 107.904-43.648 147.456-100.416z\\"/>"},"key":{"body":"<path fill=\\"currentColor\\" d=\\"M448 456.064V96a32 32 0 0 1 32-32.064L672 64a32 32 0 0 1 0 64H512v128h160a32 32 0 0 1 0 64H512v128a256 256 0 1 1-64 8.064M512 896a192 192 0 1 0 0-384a192 192 0 0 0 0 384\\"/>"},"list":{"body":"<path fill=\\"currentColor\\" d=\\"M704 192h160v736H160V192h160v64h384zM288 512h448v-64H288zm0 256h448v-64H288zm96-576V96h256v96z\\"/>"},"lock":{"body":"<path fill=\\"currentColor\\" d=\\"M224 448a32 32 0 0 0-32 32v384a32 32 0 0 0 32 32h576a32 32 0 0 0 32-32V480a32 32 0 0 0-32-32zm0-64h576a96 96 0 0 1 96 96v384a96 96 0 0 1-96 96H224a96 96 0 0 1-96-96V480a96 96 0 0 1 96-96\\"/><path fill=\\"currentColor\\" d=\\"M512 544a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V576a32 32 0 0 1 32-32m192-160v-64a192 192 0 1 0-384 0v64zM512 64a256 256 0 0 1 256 256v128H256V320A256 256 0 0 1 512 64\\"/>"},"memo":{"body":"<path fill=\\"currentColor\\" d=\\"M480 320h192c21.33 0 32-10.67 32-32s-10.67-32-32-32H480c-21.33 0-32 10.67-32 32s10.67 32 32 32\\"/><path fill=\\"currentColor\\" d=\\"M887.01 72.99C881.01 67 873.34 64 864 64H160c-9.35 0-17.02 3-23.01 8.99C131 78.99 128 86.66 128 96v832c0 9.35 2.99 17.02 8.99 23.01S150.66 960 160 960h704c9.35 0 17.02-2.99 23.01-8.99S896 937.34 896 928V96c0-9.35-3-17.02-8.99-23.01M192 896V128h96v768zm640 0H352V128h480z\\"/><path fill=\\"currentColor\\" d=\\"M480 512h192c21.33 0 32-10.67 32-32s-10.67-32-32-32H480c-21.33 0-32 10.67-32 32s10.67 32 32 32m0 192h192c21.33 0 32-10.67 32-32s-10.67-32-32-32H480c-21.33 0-32 10.67-32 32s10.67 32 32 32\\"/>"},"menu":{"body":"<path fill=\\"currentColor\\" d=\\"M160 448a32 32 0 0 1-32-32V160.064a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V416a32 32 0 0 1-32 32zm448 0a32 32 0 0 1-32-32V160.064a32 32 0 0 1 32-32h255.936a32 32 0 0 1 32 32V416a32 32 0 0 1-32 32zM160 896a32 32 0 0 1-32-32V608a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32zm448 0a32 32 0 0 1-32-32V608a32 32 0 0 1 32-32h255.936a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32z\\"/>"},"message":{"body":"<path fill=\\"currentColor\\" d=\\"M128 224v512a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V224zm0-64h768a64 64 0 0 1 64 64v512a128 128 0 0 1-128 128H192A128 128 0 0 1 64 736V224a64 64 0 0 1 64-64\\"/><path fill=\\"currentColor\\" d=\\"M904 224L656.512 506.88a192 192 0 0 1-289.024 0L120 224zm-698.944 0l210.56 240.704a128 128 0 0 0 192.704 0L818.944 224z\\"/>"},"minus":{"body":"<path fill=\\"currentColor\\" d=\\"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64\\"/>"},"phone":{"body":"<path fill=\\"currentColor\\" d=\\"M79.36 432.256L591.744 944.64a32 32 0 0 0 35.2 6.784l253.44-108.544a32 32 0 0 0 9.984-52.032l-153.856-153.92a32 32 0 0 0-36.928-6.016l-69.888 34.944L358.08 394.24l35.008-69.888a32 32 0 0 0-5.952-36.928L233.152 133.568a32 32 0 0 0-52.032 10.048L72.512 397.056a32 32 0 0 0 6.784 35.2zm60.48-29.952l81.536-190.08L325.568 316.48l-24.64 49.216l-20.608 41.216l32.576 32.64l271.552 271.552l32.64 32.64l41.216-20.672l49.28-24.576l104.192 104.128l-190.08 81.472zM512 320v-64a256 256 0 0 1 256 256h-64a192 192 0 0 0-192-192m0-192V64a448 448 0 0 1 448 448h-64a384 384 0 0 0-384-384\\"/>"},"picture":{"body":"<path fill=\\"currentColor\\" d=\\"M160 160v704h704V160zm-32-64h768a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H128a32 32 0 0 1-32-32V128a32 32 0 0 1 32-32\\"/><path fill=\\"currentColor\\" d=\\"M384 288q64 0 64 64t-64 64t-64-64t64-64M185.408 876.992l-50.816-38.912L350.72 556.032a96 96 0 0 1 134.592-17.856l1.856 1.472l122.88 99.136a32 32 0 0 0 44.992-4.864l216-269.888l49.92 39.936l-215.808 269.824l-.256.32a96 96 0 0 1-135.04 14.464l-122.88-99.072l-.64-.512a32 32 0 0 0-44.8 5.952z\\"/>"},"plus":{"body":"<path fill=\\"currentColor\\" d=\\"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z\\"/>"},"position":{"body":"<path fill=\\"currentColor\\" d=\\"m249.6 417.088l319.744 43.072l39.168 310.272L845.12 178.88zm-129.024 47.168a32 32 0 0 1-7.68-61.44l777.792-311.04a32 32 0 0 1 41.6 41.6l-310.336 775.68a32 32 0 0 1-61.44-7.808L512 516.992z\\"/>"},"promotion":{"body":"<path fill=\\"currentColor\\" d=\\"m64 448l832-320l-128 704l-446.08-243.328L832 192L242.816 545.472zm256 512V657.024L512 768z\\"/>"},"question-filled":{"body":"<path fill=\\"currentColor\\" d=\\"M512 64a448 448 0 1 1 0 896a448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352c-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992c13.376-19.712 35.2-28.864 66.176-28.864c23.936 0 42.944 6.336 56.32 19.712c12.672 13.376 19.712 31.68 19.712 54.912c0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408c-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76c6.336-12.672 15.488-24.64 28.16-35.2c33.792-29.568 54.208-48.576 60.544-55.616c16.896-22.528 26.048-51.392 26.048-86.592q0-64.416-42.24-101.376c-28.16-25.344-65.472-37.312-111.232-37.312m-12.672 406.208a54.27 54.27 0 0 0-38.72 14.784a49.4 49.4 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.85 54.85 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72a51.97 51.97 0 0 0-15.488-38.016a55.94 55.94 0 0 0-39.424-14.784\\"/>"},"reading":{"body":"<path fill=\\"currentColor\\" d=\\"m512 863.36l384-54.848v-638.72L525.568 222.72a96 96 0 0 1-27.136 0L128 169.792v638.72zM137.024 106.432l370.432 52.928a32 32 0 0 0 9.088 0l370.432-52.928A64 64 0 0 1 960 169.792v638.72a64 64 0 0 1-54.976 63.36l-388.48 55.488a32 32 0 0 1-9.088 0l-388.48-55.488A64 64 0 0 1 64 808.512v-638.72a64 64 0 0 1 73.024-63.36\\"/><path fill=\\"currentColor\\" d=\\"M480 192h64v704h-64z\\"/>"},"refresh":{"body":"<path fill=\\"currentColor\\" d=\\"M771.776 794.88A384 384 0 0 1 128 512h64a320 320 0 0 0 555.712 216.448H654.72a32 32 0 1 1 0-64h149.056a32 32 0 0 1 32 32v148.928a32 32 0 1 1-64 0v-50.56zM276.288 295.616h92.992a32 32 0 0 1 0 64H220.16a32 32 0 0 1-32-32V178.56a32 32 0 0 1 64 0v50.56A384 384 0 0 1 896.128 512h-64a320 320 0 0 0-555.776-216.384z\\"/>"},"refresh-left":{"body":"<path fill=\\"currentColor\\" d=\\"M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88a384 384 0 0 1-383.936 384a384 384 0 0 1-384-384h64a320 320 0 1 0 640 0a320 320 0 0 0-555.712-216.448z\\"/>"},"refresh-right":{"body":"<path fill=\\"currentColor\\" d=\\"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384a384 384 0 0 1-384-384a384 384 0 0 1 643.712-282.88\\"/>"},"remove":{"body":"<path fill=\\"currentColor\\" d=\\"M352 480h320a32 32 0 1 1 0 64H352a32 32 0 0 1 0-64\\"/><path fill=\\"currentColor\\" d=\\"M512 896a384 384 0 1 0 0-768a384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896a448 448 0 0 1 0 896\\"/>"},"scale-to-original":{"body":"<path fill=\\"currentColor\\" d=\\"M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.12 30.12 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.12 30.12 0 0 0-30.118-30.118m-361.412 0a30.12 30.12 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.12 30.12 0 0 0-30.118-30.118M512 361.412a30.12 30.12 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.12 30.12 0 0 0 512 361.412M512 512a30.12 30.12 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.12 30.12 0 0 0 512 512\\"/>"},"search":{"body":"<path fill=\\"currentColor\\" d=\\"m795.904 750.72l124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704a352 352 0 0 0 0 704\\"/>"},"select":{"body":"<path fill=\\"currentColor\\" d=\\"M77.248 415.04a64 64 0 0 1 90.496 0l226.304 226.304L846.528 188.8a64 64 0 1 1 90.56 90.496l-543.04 543.04l-316.8-316.8a64 64 0 0 1 0-90.496\\"/>"},"setting":{"body":"<path fill=\\"currentColor\\" d=\\"M600.704 64a32 32 0 0 1 30.464 22.208l35.2 109.376c14.784 7.232 28.928 15.36 42.432 24.512l112.384-24.192a32 32 0 0 1 34.432 15.36L944.32 364.8a32 32 0 0 1-4.032 37.504l-77.12 85.12a357 357 0 0 1 0 49.024l77.12 85.248a32 32 0 0 1 4.032 37.504l-88.704 153.6a32 32 0 0 1-34.432 15.296L708.8 803.904c-13.44 9.088-27.648 17.28-42.368 24.512l-35.264 109.376A32 32 0 0 1 600.704 960H423.296a32 32 0 0 1-30.464-22.208L357.696 828.48a352 352 0 0 1-42.56-24.64l-112.32 24.256a32 32 0 0 1-34.432-15.36L79.68 659.2a32 32 0 0 1 4.032-37.504l77.12-85.248a357 357 0 0 1 0-48.896l-77.12-85.248A32 32 0 0 1 79.68 364.8l88.704-153.6a32 32 0 0 1 34.432-15.296l112.32 24.256c13.568-9.152 27.776-17.408 42.56-24.64l35.2-109.312A32 32 0 0 1 423.232 64H600.64zm-23.424 64H446.72l-36.352 113.088l-24.512 11.968a294 294 0 0 0-34.816 20.096l-22.656 15.36l-116.224-25.088l-65.28 113.152l79.68 88.192l-1.92 27.136a293 293 0 0 0 0 40.192l1.92 27.136l-79.808 88.192l65.344 113.152l116.224-25.024l22.656 15.296a294 294 0 0 0 34.816 20.096l24.512 11.968L446.72 896h130.688l36.48-113.152l24.448-11.904a288 288 0 0 0 34.752-20.096l22.592-15.296l116.288 25.024l65.28-113.152l-79.744-88.192l1.92-27.136a293 293 0 0 0 0-40.256l-1.92-27.136l79.808-88.128l-65.344-113.152l-116.288 24.96l-22.592-15.232a288 288 0 0 0-34.752-20.096l-24.448-11.904L577.344 128zM512 320a192 192 0 1 1 0 384a192 192 0 0 1 0-384m0 64a128 128 0 1 0 0 256a128 128 0 0 0 0-256\\"/>"},"sort":{"body":"<path fill=\\"currentColor\\" d=\\"M384 96a32 32 0 0 1 64 0v786.752a32 32 0 0 1-54.592 22.656L95.936 608a32 32 0 0 1 0-45.312h.128a32 32 0 0 1 45.184 0L384 805.632zm192 45.248a32 32 0 0 1 54.592-22.592L928.064 416a32 32 0 0 1 0 45.312h-.128a32 32 0 0 1-45.184 0L640 218.496V928a32 32 0 1 1-64 0z\\"/>"},"suitcase":{"body":"<path fill=\\"currentColor\\" d=\\"M128 384h768v-64a64 64 0 0 0-64-64H192a64 64 0 0 0-64 64zm0 64v320a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V448zm64-256h640a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H192A128 128 0 0 1 64 768V320a128 128 0 0 1 128-128\\"/><path fill=\\"currentColor\\" d=\\"M384 128v64h256v-64zm0-64h256a64 64 0 0 1 64 64v64a64 64 0 0 1-64 64H384a64 64 0 0 1-64-64v-64a64 64 0 0 1 64-64\\"/>"},"switch-button":{"body":"<path fill=\\"currentColor\\" d=\\"M352 159.872V230.4a352 352 0 1 0 320 0v-70.528A416.128 416.128 0 0 1 512 960a416 416 0 0 1-160-800.128\\"/><path fill=\\"currentColor\\" d=\\"M512 64q32 0 32 32v320q0 32-32 32t-32-32V96q0-32 32-32\\"/>"},"ticket":{"body":"<path fill=\\"currentColor\\" d=\\"M640 832H64V640a128 128 0 1 0 0-256V192h576v160h64V192h256v192a128 128 0 1 0 0 256v192H704V672h-64zm0-416v192h64V416z\\"/>"},"tools":{"body":"<path fill=\\"currentColor\\" d=\\"M764.416 254.72a351.7 351.7 0 0 1 86.336 149.184H960v192.064H850.752a351.7 351.7 0 0 1-86.336 149.312l54.72 94.72l-166.272 96l-54.592-94.72a352.64 352.64 0 0 1-172.48 0L371.136 936l-166.272-96l54.72-94.72a351.7 351.7 0 0 1-86.336-149.312H64v-192h109.248a351.7 351.7 0 0 1 86.336-149.312L204.8 160l166.208-96h.192l54.656 94.592a352.64 352.64 0 0 1 172.48 0L652.8 64h.128L819.2 160l-54.72 94.72zM704 499.968a192 192 0 1 0-384 0a192 192 0 0 0 384 0\\"/>"},"upload":{"body":"<path fill=\\"currentColor\\" d=\\"M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m384-578.304V704h-64V247.296L237.248 490.048L192 444.8L508.8 128l316.8 316.8l-45.312 45.248z\\"/>"},"upload-filled":{"body":"<path fill=\\"currentColor\\" d=\\"M544 864V672h128L512 480L352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.81 239.81 0 0 1 512 192a239.87 239.87 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6z\\"/>"},"user":{"body":"<path fill=\\"currentColor\\" d=\\"M512 512a192 192 0 1 0 0-384a192 192 0 0 0 0 384m0 64a256 256 0 1 1 0-512a256 256 0 0 1 0 512m320 320v-96a96 96 0 0 0-96-96H288a96 96 0 0 0-96 96v96a32 32 0 1 1-64 0v-96a160 160 0 0 1 160-160h448a160 160 0 0 1 160 160v96a32 32 0 1 1-64 0\\"/>"},"video-play":{"body":"<path fill=\\"currentColor\\" d=\\"M512 64a448 448 0 1 1 0 896a448 448 0 0 1 0-896m0 832a384 384 0 0 0 0-768a384 384 0 0 0 0 768m-48-247.616L668.608 512L464 375.616zm10.624-342.656l249.472 166.336a48 48 0 0 1 0 79.872L474.624 718.272A48 48 0 0 1 400 678.336V345.6a48 48 0 0 1 74.624-39.936z\\"/>"},"view":{"body":"<path fill=\\"currentColor\\" d=\\"M512 160c320 0 512 352 512 352S832 864 512 864S0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288c52.608 79.872 211.456 288 436.8 288c225.28 0 384.128-208.064 436.8-288c-52.608-79.872-211.456-288-436.8-288m0 64a224 224 0 1 1 0 448a224 224 0 0 1 0-448m0 64a160.19 160.19 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160s-71.744-160-160-160\\"/>"},"wallet-filled":{"body":"<path fill=\\"currentColor\\" d=\\"M688 512a112 112 0 1 0 0 224h208v160H128V352h768v160zm32 160h-32a48 48 0 0 1 0-96h32a48 48 0 0 1 0 96m-80-544l128 160H384z\\"/>"},"warning":{"body":"<path fill=\\"currentColor\\" d=\\"M512 64a448 448 0 1 1 0 896a448 448 0 0 1 0-896m0 832a384 384 0 0 0 0-768a384 384 0 0 0 0 768m48-176a48 48 0 1 1-96 0a48 48 0 0 1 96 0m-48-464a32 32 0 0 1 32 32v288a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32\\"/>"},"warning-filled":{"body":"<path fill=\\"currentColor\\" d=\\"M512 64a448 448 0 1 1 0 896a448 448 0 0 1 0-896m0 192a58.43 58.43 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.43 58.43 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4a51.2 51.2 0 0 0 0 102.4\\"/>"},"zoom-in":{"body":"<path fill=\\"currentColor\\" d=\\"m795.904 750.72l124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704a352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z\\"/>"},"zoom-out":{"body":"<path fill=\\"currentColor\\" d=\\"m795.904 750.72l124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704a352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64\\"/>"}}},{"prefix":"ic","width":24,"height":24,"icons":{"round-drag-indicator":{"body":"<path fill=\\"currentColor\\" d=\\"M11 18c0 1.1-.9 2-2 2s-2-.9-2-2s.9-2 2-2s2 .9 2 2m-2-8c-1.1 0-2 .9-2 2s.9 2 2 2s2-.9 2-2s-.9-2-2-2m0-6c-1.1 0-2 .9-2 2s.9 2 2 2s2-.9 2-2s-.9-2-2-2m6 4c1.1 0 2-.9 2-2s-.9-2-2-2s-2 .9-2 2s.9 2 2 2m0 2c-1.1 0-2 .9-2 2s.9 2 2 2s2-.9 2-2s-.9-2-2-2m0 6c-1.1 0-2 .9-2 2s.9 2 2 2s2-.9 2-2s-.9-2-2-2\\"/>"},"round-view-carousel":{"body":"<path fill=\\"currentColor\\" d=\\"M3 7h2c.55 0 1 .45 1 1v8c0 .55-.45 1-1 1H3c-.55 0-1-.45-1-1V8c0-.55.45-1 1-1m5 12h8c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1H8c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1M19 7h2c.55 0 1 .45 1 1v8c0 .55-.45 1-1 1h-2c-.55 0-1-.45-1-1V8c0-.55.45-1 1-1\\"/>"}}},{"prefix":"el","width":1200,"height":1200,"icons":{}},{"prefix":"bpmn","width":2048,"height":2048,"icons":{}},{"prefix":"ant-design","width":1024,"height":1024,"icons":{"align-center-outlined":{"body":"<path fill=\\"currentColor\\" d=\\"M264 230h496c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H264c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8m496 424c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H264c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm144 140H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8m0-424H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8\\"/>"},"align-left-outlined":{"body":"<path fill=\\"currentColor\\" d=\\"M120 230h496c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8m0 424h496c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8m784 140H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8m0-424H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8\\"/>"},"cloud-upload-outlined":{"body":"<path fill=\\"currentColor\\" d=\\"M518.3 459a8 8 0 0 0-12.6 0l-112 141.7a7.98 7.98 0 0 0 6.3 12.9h73.9V856c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V613.7H624c6.7 0 10.4-7.7 6.3-12.9z\\"/><path fill=\\"currentColor\\" d=\\"M811.4 366.7C765.6 245.9 648.9 160 512.2 160S258.8 245.8 213 366.6C127.3 389.1 64 467.2 64 560c0 110.5 89.5 200 199.9 200H304c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8h-40.1c-33.7 0-65.4-13.4-89-37.7c-23.5-24.2-36-56.8-34.9-90.6c.9-26.4 9.9-51.2 26.2-72.1c16.7-21.3 40.1-36.8 66.1-43.7l37.9-9.9l13.9-36.6c8.6-22.8 20.6-44.1 35.7-63.4a245.6 245.6 0 0 1 52.4-49.9c41.1-28.9 89.5-44.2 140-44.2s98.9 15.3 140 44.2c19.9 14 37.5 30.8 52.4 49.9c15.1 19.3 27.1 40.7 35.7 63.4l13.8 36.5l37.8 10C846.1 454.5 884 503.8 884 560c0 33.1-12.9 64.3-36.3 87.7a123.07 123.07 0 0 1-87.6 36.3H720c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h40.1C870.5 760 960 670.5 960 560c0-92.7-63.1-170.7-148.6-193.3\\"/>"},"reload-outlined":{"body":"<path fill=\\"currentColor\\" d=\\"m909.1 209.3l-56.4 44.1C775.8 155.1 656.2 92 521.9 92C290 92 102.3 279.5 102 511.5C101.7 743.7 289.8 932 521.9 932c181.3 0 335.8-115 394.6-276.1c1.5-4.2-.7-8.9-4.9-10.3l-56.7-19.5a8 8 0 0 0-10.1 4.8c-1.8 5-3.8 10-5.9 14.9c-17.3 41-42.1 77.8-73.7 109.4A344.8 344.8 0 0 1 655.9 829c-42.3 17.9-87.4 27-133.8 27c-46.5 0-91.5-9.1-133.8-27A341.5 341.5 0 0 1 279 755.2a342.2 342.2 0 0 1-73.7-109.4c-17.9-42.4-27-87.4-27-133.9s9.1-91.5 27-133.9c17.3-41 42.1-77.8 73.7-109.4s68.4-56.4 109.3-73.8c42.3-17.9 87.4-27 133.8-27c46.5 0 91.5 9.1 133.8 27a341.5 341.5 0 0 1 109.3 73.8c9.9 9.9 19.2 20.4 27.8 31.4l-60.2 47a8 8 0 0 0 3 14.1l175.6 43c5 1.2 9.9-2.6 9.9-7.7l.8-180.9c-.1-6.6-7.8-10.3-13-6.2\\"/>"},"rotate-left-outlined":{"body":"<path fill=\\"currentColor\\" d=\\"M672 418H144c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32m-44 402H188V494h440z\\"/><path fill=\\"currentColor\\" d=\\"M819.3 328.5c-78.8-100.7-196-153.6-314.6-154.2l-.2-64c0-6.5-7.6-10.1-12.6-6.1l-128 101c-4 3.1-3.9 9.1 0 12.3L492 318.6c5.1 4 12.7.4 12.6-6.1v-63.9c12.9.1 25.9.9 38.8 2.5c42.1 5.2 82.1 18.2 119 38.7c38.1 21.2 71.2 49.7 98.4 84.3c27.1 34.7 46.7 73.7 58.1 115.8c11 40.7 14 82.7 8.9 124.8c-.7 5.4-1.4 10.8-2.4 16.1h74.9c14.8-103.6-11.3-213-81-302.3\\"/>"},"rotate-right-outlined":{"body":"<path fill=\\"currentColor\\" d=\\"M480.5 251.2c13-1.6 25.9-2.4 38.8-2.5v63.9c0 6.5 7.5 10.1 12.6 6.1L660 217.6c4-3.2 4-9.2 0-12.3l-128-101c-5.1-4-12.6-.4-12.6 6.1l-.2 64c-118.6.5-235.8 53.4-314.6 154.2c-69.6 89.2-95.7 198.6-81.1 302.4h74.9c-.9-5.3-1.7-10.7-2.4-16.1c-5.1-42.1-2.1-84.1 8.9-124.8c11.4-42.2 31-81.1 58.1-115.8c27.2-34.7 60.3-63.2 98.4-84.3c37-20.6 76.9-33.6 119.1-38.8\\"/><path fill=\\"currentColor\\" d=\\"M880 418H352c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32m-44 402H396V494h440z\\"/>"},"scan-outlined":{"body":"<path fill=\\"currentColor\\" d=\\"M136 384h56c4.4 0 8-3.6 8-8V200h176c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H196c-37.6 0-68 30.4-68 68v180c0 4.4 3.6 8 8 8m512-184h176v176c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V196c0-37.6-30.4-68-68-68H648c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8M376 824H200V648c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v180c0 37.6 30.4 68 68 68h180c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8m512-184h-56c-4.4 0-8 3.6-8 8v176H648c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h180c37.6 0 68-30.4 68-68V648c0-4.4-3.6-8-8-8m16-164H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8\\"/>"},"upload-outlined":{"body":"<path fill=\\"currentColor\\" d=\\"M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 0 0-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13M878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8\\"/>"},"zoom-in-outlined":{"body":"<path fill=\\"currentColor\\" d=\\"M637 443H519V309c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v134H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h118v134c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V519h118c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8m284 424L775 721c122.1-148.9 113.6-369.5-26-509c-148-148.1-388.4-148.1-537 0c-148.1 148.6-148.1 389 0 537c139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11M696 696c-118.8 118.7-311.2 118.7-430 0c-118.7-118.8-118.7-311.2 0-430c118.8-118.7 311.2-118.7 430 0c118.7 118.8 118.7 311.2 0 430\\"/>"},"zoom-out-outlined":{"body":"<path fill=\\"currentColor\\" d=\\"M637 443H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h312c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8m284 424L775 721c122.1-148.9 113.6-369.5-26-509c-148-148.1-388.4-148.1-537 0c-148.1 148.6-148.1 389 0 537c139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11M696 696c-118.8 118.7-311.2 118.7-430 0c-118.7-118.8-118.7-311.2 0-430c118.8-118.7 311.2-118.7 430 0c118.7 118.8 118.7 311.2 0 430\\"/>"}}},{"prefix":"vaadin","icons":{"arrows-long-h":{"body":"<path fill=\\"currentColor\\" d=\\"m16 8l-3-3v2H3V5L0 8l3 3V9h10v2z\\"/>"},"arrows-long-v":{"body":"<path fill=\\"currentColor\\" d=\\"M9 3h2L8 0L5 3h2v10H5l3 3l3-3H9z\\"/>"},"line-h":{"body":"<path fill=\\"currentColor\\" d=\\"M0 7h16v1H0z\\"/>"},"padding":{"body":"<path fill=\\"currentColor\\" d=\\"M0 0v16h16V0zm15 3h-1v1h1v1h-1v1h1v1h-1v1h1v1h-1v1h1v1h-1v1h1v1h-1v1h1v1h-1v-1h-1v1h-1v-1h-1v1h-1v-1H9v1H8v-1H7v1H6v-1H5v1H4v-1H3v1H2v-1H1v-1h1v-1H1v-1h1v-1H1V9h1V8H1V7h1V6H1V5h1V4H1V3h1V2H1V1h1v1h1V1h1v1h1V1h1v1h1V1h1v1h1V1h1v1h1V1h1v1h1V1h1v1h1z\\"/><path fill=\\"currentColor\\" d=\\"M3 2h1v1H3zm1 1h1v1H4zm2 0h1v1H6zM5 2h1v1H5zm2 0h1v1H7zm2 0h1v1H9zM8 3h1v1H8zm2 0h1v1h-1zm2 0h1v1h-1zm-1-1h1v1h-1zm2 0h1v1h-1zm-1 3h1v1h-1zm1-1h1v1h-1zm-1 3h1v1h-1zm1-1h1v1h-1zm-1 3h1v1h-1zm1-1h1v1h-1zm-1 3h1v1h-1zm1-1h1v1h-1zm-1 3h1v1h-1zm1-1h1v1h-1zM2 3h1v1H2zm1 1h1v1H3zM2 5h1v1H2zm1 1h1v1H3zM2 7h1v1H2zm1 1h1v1H3zM2 9h1v1H2zm1 1h1v1H3zm-1 1h1v1H2zm0 2h1v1H2zm1-1h1v1H3zm1-1h1v1H4zm0 2h1v1H4zm1-1h1v1H5zm1 1h1v1H6zm1-1h1v1H7zm2 0h1v1H9zm-1 1h1v1H8zm3-1h1v1h-1zm-1 1h1v1h-1z\\"/>"}}},{"prefix":"radix-icons","width":15,"height":15,"icons":{"enter-full-screen":{"body":"<path fill=\\"currentColor\\" fill-rule=\\"evenodd\\" d=\\"M2 2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1H3v2.5a.5.5 0 0 1-1 0zm7 0a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v3a.5.5 0 0 1-1 0V3H9.5a.5.5 0 0 1-.5-.5M2.5 9a.5.5 0 0 1 .5.5V12h2.5a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 1 .5-.5m10 0a.5.5 0 0 1 .5.5v3a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1 0-1H12V9.5a.5.5 0 0 1 .5-.5\\" clip-rule=\\"evenodd\\"/>"},"exit-full-screen":{"body":"<path fill=\\"currentColor\\" fill-rule=\\"evenodd\\" d=\\"M5.5 2a.5.5 0 0 1 .5.5v3a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1 0-1H5V2.5a.5.5 0 0 1 .5-.5m4 0a.5.5 0 0 1 .5.5V5h2.5a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 1 .5-.5M2 9.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v3a.5.5 0 0 1-1 0V10H2.5a.5.5 0 0 1-.5-.5m7 0a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1H10v2.5a.5.5 0 0 1-1 0z\\" clip-rule=\\"evenodd\\"/>"}}},{"prefix":"ion","width":512,"height":512,"icons":{"create":{"body":"<path fill=\\"currentColor\\" d=\\"M459.94 53.25a16.06 16.06 0 0 0-23.22-.56L424.35 65a8 8 0 0 0 0 11.31l11.34 11.32a8 8 0 0 0 11.34 0l12.06-12c6.1-6.09 6.67-16.01.85-22.38M399.34 90L218.82 270.2a9 9 0 0 0-2.31 3.93L208.16 299a3.91 3.91 0 0 0 4.86 4.86l24.85-8.35a9 9 0 0 0 3.93-2.31L422 112.66a9 9 0 0 0 0-12.66l-9.95-10a9 9 0 0 0-12.71 0\\"/><path fill=\\"currentColor\\" d=\\"M386.34 193.66L264.45 315.79A41.1 41.1 0 0 1 247.58 326l-25.9 8.67a35.92 35.92 0 0 1-44.33-44.33l8.67-25.9a41.1 41.1 0 0 1 10.19-16.87l122.13-121.91a8 8 0 0 0-5.65-13.66H104a56 56 0 0 0-56 56v240a56 56 0 0 0 56 56h240a56 56 0 0 0 56-56V199.31a8 8 0 0 0-13.66-5.65\\"/>"},"language-sharp":{"body":"<path fill=\\"currentColor\\" d=\\"M363 176L246 464h47.24l24.49-58h90.54l24.49 58H480Zm-26.69 186L363 279.85L389.69 362ZM272 320c-.25-.19-20.59-15.77-45.42-42.67c39.58-53.64 62-114.61 71.15-143.33H352V90H214V48h-44v42H32v44h219.25c-9.52 26.95-27.05 69.5-53.79 108.36c-32.68-43.44-47.14-75.88-47.33-76.22L143 152l-38 22l6.87 13.86c.89 1.56 17.19 37.9 54.71 86.57c.92 1.21 1.85 2.39 2.78 3.57c-49.72 56.86-89.15 79.09-89.66 79.47L64 368l23 36l19.3-11.47c2.2-1.67 41.33-24 92-80.78c24.52 26.28 43.22 40.83 44.3 41.67L255 362Z\\"/>"}}},{"prefix":"fontisto","width":24,"height":24,"icons":{"email":{"body":"<path fill=\\"currentColor\\" d=\\"m16.484 11.976l6.151-5.344v10.627zm-7.926.905l2.16 1.875c.339.288.781.462 1.264.462h.017h-.001h.014c.484 0 .926-.175 1.269-.465l-.003.002l2.16-1.875l6.566 5.639H1.995zM1.986 5.365h20.03l-9.621 8.356a.6.6 0 0 1-.38.132h-.014h.001h-.014a.6.6 0 0 1-.381-.133l.001.001zm-.621 1.266l6.15 5.344l-6.15 5.28zm21.6-2.441c-.24-.12-.522-.19-.821-.19H1.859a1.9 1.9 0 0 0-.835.197l.011-.005A1.86 1.86 0 0 0 0 5.855v12.172a1.86 1.86 0 0 0 1.858 1.858h20.283a1.86 1.86 0 0 0 1.858-1.858V5.855c0-.727-.419-1.357-1.029-1.66l-.011-.005z\\"/>"}}},{"prefix":"carbon","width":32,"height":32,"icons":{"popup":{"body":"<path fill=\\"currentColor\\" d=\\"M28 4H10a2.006 2.006 0 0 0-2 2v14a2.006 2.006 0 0 0 2 2h18a2.006 2.006 0 0 0 2-2V6a2.006 2.006 0 0 0-2-2m0 16H10V6h18Z\\"/><path fill=\\"currentColor\\" d=\\"M18 26H4V16h2v-2H4a2.006 2.006 0 0 0-2 2v10a2.006 2.006 0 0 0 2 2h14a2.006 2.006 0 0 0 2-2v-2h-2Z\\"/>"},"tree-view-alt":{"body":"<path fill=\\"currentColor\\" d=\\"M23 9.005h6a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-6a2 2 0 0 0-2 2v1H11v-1a2 2 0 0 0-2-2H3a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-1h4v20a2 2 0 0 0 2 2h4v1a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-6a2 2 0 0 0-2 2v1h-4v-9h4v1a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-6a2 2 0 0 0-2 2v1h-4v-9h4v1a2 2 0 0 0 2 2m0-6h6v4h-6Zm-14 4H3v-4h6Zm14 18h6v4h-6Zm0-11h6v4h-6Z\\"/>"}}},{"prefix":"icon-park-outline","width":48,"height":48,"icons":{"peoples":{"body":"<path fill=\\"none\\" stroke=\\"currentColor\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" stroke-width=\\"4\\" d=\\"M19 20a7 7 0 1 0 0-14a7 7 0 0 0 0 14M32.608 7A7 7 0 0 1 36 13a7 7 0 0 1-3.392 6M4 40.8V42h30v-1.2c0-4.48 0-6.72-.872-8.432a8 8 0 0 0-3.496-3.496C27.92 28 25.68 28 21.2 28h-4.4c-4.48 0-6.72 0-8.432.872a8 8 0 0 0-3.496 3.496C4 34.08 4 36.32 4 40.8M44 42v-1.2c0-4.48 0-6.72-.872-8.432a8 8 0 0 0-3.496-3.496\\"/>"}}},{"prefix":"fa","width":1536,"height":1536,"icons":{"align-left":{"body":"<path fill=\\"currentColor\\" d=\\"M1792 1216v128q0 26-19 45t-45 19H64q-26 0-45-19t-19-45v-128q0-26 19-45t45-19h1664q26 0 45 19t19 45m-384-384v128q0 26-19 45t-45 19H64q-26 0-45-19T0 960V832q0-26 19-45t45-19h1280q26 0 45 19t19 45m256-384v128q0 26-19 45t-45 19H64q-26 0-45-19T0 576V448q0-26 19-45t45-19h1536q26 0 45 19t19 45M1280 64v128q0 26-19 45t-45 19H64q-26 0-45-19T0 192V64q0-26 19-45T64 0h1152q26 0 45 19t19 45\\"/>","width":1792,"height":1408}}},{"prefix":"zmdi","width":432,"height":384,"icons":{"fullscreen":{"body":"<path fill=\\"currentColor\\" d=\\"M43 235v64h64v42H0V235zM0 149V43h107v42H43v64zm256 150v-64h43v106H192v-42zM192 43h107v106h-43V85h-64z\\"/>","width":304},"fullscreen-exit":{"body":"<path fill=\\"currentColor\\" d=\\"M0 277v-42h107v106H64v-64zm64-170V43h43v106H0v-42zm128 234V235h107v42h-64v64zm43-234h64v42H192V43h43z\\"/>","width":304}}},{"prefix":"mdi","width":24,"height":24,"icons":{"account-group":{"body":"<path fill=\\"currentColor\\" d=\\"M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9A3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42c-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3a3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3a3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.54 5.54 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13zM0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9c-.59.68-.95 1.62-.95 2.65V20zm24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65c2.56.34 4.45 1.51 4.45 2.9z\\"/>"},"format-size":{"body":"<path fill=\\"currentColor\\" d=\\"M2 4v3h5v12h3V7h5V4zm19 5h-9v3h3v7h3v-7h3z\\"/>"},"calendar-time":{"body":"<path fill=\\"currentColor\\" d=\\"M15 13h1.5v2.82l2.44 1.41l-.75 1.3L15 16.69zm4-5H5v11h4.67c-.43-.91-.67-1.93-.67-3a7 7 0 0 1 7-7c1.07 0 2.09.24 3 .67zM5 21a2 2 0 0 1-2-2V5c0-1.11.89-2 2-2h1V1h2v2h8V1h2v2h1a2 2 0 0 1 2 2v6.1c1.24 1.26 2 2.99 2 4.9a7 7 0 0 1-7 7c-1.91 0-3.64-.76-4.9-2zm11-9.85A4.85 4.85 0 0 0 11.15 16c0 2.68 2.17 4.85 4.85 4.85A4.85 4.85 0 0 0 20.85 16c0-2.68-2.17-4.85-4.85-4.85\\"/>"},"user-card-details":{"body":"<path fill=\\"currentColor\\" d=\\"M2 3h20c1.05 0 2 .95 2 2v14c0 1.05-.95 2-2 2H2c-1.05 0-2-.95-2-2V5c0-1.05.95-2 2-2m12 3v1h8V6zm0 2v1h8V8zm0 2v1h7v-1zm-6 3.91C6 13.91 2 15 2 17v1h12v-1c0-2-4-3.09-6-3.09M8 6a3 3 0 0 0-3 3a3 3 0 0 0 3 3a3 3 0 0 0 3-3a3 3 0 0 0-3-3\\"/>"}}},{"prefix":"emojione-monotone","width":64,"height":64,"icons":{"crescent-moon":{"body":"<path fill=\\"currentColor\\" d=\\"M43.139 2a29.9 29.9 0 0 1 5.121 16.756c0 16.701-13.686 30.24-30.57 30.24a30.66 30.66 0 0 1-15.689-4.285C7.209 54.963 17.93 62 30.318 62C47.816 62 62 47.969 62 30.66C62 17.867 54.246 6.871 43.139 2\\"/>"},"sun":{"body":"<path fill=\\"currentColor\\" d=\\"m20.52 59.717l7.027-7.2a20.9 20.9 0 0 1-6.904-2.87zM43.48 4.284l-7.025 7.199a20.9 20.9 0 0 1 6.904 2.871zm-31.996 32.17l-7.201 7.025l10.07-.122a20.9 20.9 0 0 1-2.869-6.903m41.032-8.907l7.201-7.027l-10.07.123a20.9 20.9 0 0 1 2.869 6.904m-38.162-6.905l-10.07-.123l7.201 7.027a20.8 20.8 0 0 1 2.869-6.904m35.292 22.716l10.07.122l-7.201-7.026a20.8 20.8 0 0 1-2.869 6.904M27.547 11.483l-7.027-7.2l.123 10.07a20.9 20.9 0 0 1 6.904-2.87m8.906 41.034l7.027 7.199l-.123-10.069a20.9 20.9 0 0 1-6.904 2.87m-21.701-8.555l-3.967 9.251l9.252-3.965a21.1 21.1 0 0 1-5.285-5.286m34.496-23.923l3.965-9.252l-9.25 3.965a21.1 21.1 0 0 1 5.285 5.287M11 32c0-1.278.133-2.524.352-3.741L2 31.999l9.352 3.74A21 21 0 0 1 11 32m51 0l-9.352-3.741C52.867 29.476 53 30.722 53 32s-.133 2.525-.352 3.741zM20.039 14.751l-9.252-3.965l3.965 9.252a21.2 21.2 0 0 1 5.287-5.287m23.922 34.497l9.252 3.965l-3.965-9.251a21.1 21.1 0 0 1-5.287 5.286M35.74 11.352L32 2l-3.74 9.352C29.475 11.133 30.721 11 32 11s2.525.133 3.74.352m-7.48 41.296L32 62l3.74-9.352c-1.215.219-2.461.352-3.74.352s-2.525-.133-3.74-.352\\"/><circle cx=\\"32\\" cy=\\"32\\" r=\\"19\\" fill=\\"currentColor\\"/>"}}},{"prefix":"tdesign","width":24,"height":24,"icons":{"component-divider-vertical":{"body":"<path fill=\\"currentColor\\" d=\\"M5 2h14v7H5zm2 2v3h10V4zm-5 7h20v2H2zm3 4h14v7H5zm2 2v3h10v-3z\\"/>"},"image":{"body":"<path fill=\\"currentColor\\" d=\\"M2 2h20v20H2zm2 18h13.586L9 11.414l-5 5zm16-.414V4H4v9.586l5-5zM15.547 7a1 1 0 1 0 0 2a1 1 0 0 0 0-2m-3 1a3 3 0 1 1 6 0a3 3 0 0 1-6 0\\"/>"},"qrcode":{"body":"<path fill=\\"currentColor\\" d=\\"M2 2h9v9H2zm2 2v5h5V4zm9-2h9v9h-9zm2 2v5h5V4zM5.5 5.5h2.004v2.004H5.5zm11 0h2.004v2.004H16.5zm-3.504 7.496H15V15h-2.004zm7 0H22V15h-2.004zM2 13h9v9H2zm2 2v5h5v-5zm11.996.996H18v2h2v2h2V22h-2.004v-2h-2v-2h-2zM5.5 16.5h2.004v2.004H5.5zm7.496 3.496H15V22h-2.004z\\"/>"}}},{"prefix":"fluent","width":20,"height":20,"icons":{"table-bottom-row-16-filled":{"body":"<path fill=\\"currentColor\\" d=\\"M4.5 2A2.5 2.5 0 0 0 2 4.5V10h1V4.5A1.5 1.5 0 0 1 4.5 3h7A1.5 1.5 0 0 1 13 4.5V10h1V4.5A2.5 2.5 0 0 0 11.5 2zM3 13.5a2.5 2.5 0 0 1-1-2V11h3v3h-.5a2.5 2.5 0 0 1-1.5-.5M13.95 12q.05-.243.05-.5V11h-3v3h.5a2.5 2.5 0 0 0 2.45-2M6 14h4v-3H6z\\"/>","width":16,"height":16},"text-column-one-24-filled":{"body":"<path fill=\\"currentColor\\" d=\\"M5 6a1 1 0 0 1 1-1h12a1 1 0 1 1 0 2H6a1 1 0 0 1-1-1m0 4a1 1 0 0 1 1-1h12a1 1 0 1 1 0 2H6a1 1 0 0 1-1-1m0 4a1 1 0 0 1 1-1h12a1 1 0 1 1 0 2H6a1 1 0 0 1-1-1m0 4a1 1 0 0 1 1-1h12a1 1 0 1 1 0 2H6a1 1 0 0 1-1-1\\"/>","width":24,"height":24},"text-column-three-24-filled":{"body":"<path fill=\\"currentColor\\" d=\\"M3 6a1 1 0 0 1 1-1h3a1 1 0 0 1 0 2H4a1 1 0 0 1-1-1m6.58 0a1 1 0 0 1 1-1h3a1 1 0 1 1 0 2h-3a1 1 0 0 1-1-1M16 6a1 1 0 0 1 1-1h3a1 1 0 1 1 0 2h-3a1 1 0 0 1-1-1M3 10a1 1 0 0 1 1-1h3a1 1 0 0 1 0 2H4a1 1 0 0 1-1-1m6.58 0a1 1 0 0 1 1-1h3a1 1 0 1 1 0 2h-3a1 1 0 0 1-1-1M16 10a1 1 0 0 1 1-1h3a1 1 0 1 1 0 2h-3a1 1 0 0 1-1-1M3 14a1 1 0 0 1 1-1h3a1 1 0 1 1 0 2H4a1 1 0 0 1-1-1m6.58 0a1 1 0 0 1 1-1h3a1 1 0 1 1 0 2h-3a1 1 0 0 1-1-1M16 14a1 1 0 0 1 1-1h3a1 1 0 1 1 0 2h-3a1 1 0 0 1-1-1M3 18a1 1 0 0 1 1-1h3a1 1 0 1 1 0 2H4a1 1 0 0 1-1-1m6.58 0a1 1 0 0 1 1-1h3a1 1 0 1 1 0 2h-3a1 1 0 0 1-1-1M16 18a1 1 0 0 1 1-1h3a1 1 0 1 1 0 2h-3a1 1 0 0 1-1-1\\"/>","width":24,"height":24},"text-column-two-24-filled":{"body":"<path fill=\\"currentColor\\" d=\\"M3 6a1 1 0 0 1 1-1h6a1 1 0 1 1 0 2H4a1 1 0 0 1-1-1m0 4a1 1 0 0 1 1-1h6a1 1 0 1 1 0 2H4a1 1 0 0 1-1-1m0 4a1 1 0 0 1 1-1h6a1 1 0 1 1 0 2H4a1 1 0 0 1-1-1m0 4a1 1 0 0 1 1-1h6a1 1 0 1 1 0 2H4a1 1 0 0 1-1-1M13 6a1 1 0 0 1 1-1h6a1 1 0 1 1 0 2h-6a1 1 0 0 1-1-1m0 4a1 1 0 0 1 1-1h6a1 1 0 1 1 0 2h-6a1 1 0 0 1-1-1m0 4a1 1 0 0 1 1-1h6a1 1 0 1 1 0 2h-6a1 1 0 0 1-1-1m0 4a1 1 0 0 1 1-1h6a1 1 0 1 1 0 2h-6a1 1 0 0 1-1-1\\"/>","width":24,"height":24},"text-column-two-left-24-filled":{"body":"<path fill=\\"currentColor\\" d=\\"M21 6a1 1 0 0 0-1-1h-9a1 1 0 1 0 0 2h9a1 1 0 0 0 1-1M8 6a1 1 0 0 0-1-1H4a1 1 0 0 0 0 2h3a1 1 0 0 0 1-1m13 4a1 1 0 0 0-1-1h-9a1 1 0 1 0 0 2h9a1 1 0 0 0 1-1M8 10a1 1 0 0 0-1-1H4a1 1 0 0 0 0 2h3a1 1 0 0 0 1-1m13 4a1 1 0 0 0-1-1h-9a1 1 0 1 0 0 2h9a1 1 0 0 0 1-1M8 14a1 1 0 0 0-1-1H4a1 1 0 1 0 0 2h3a1 1 0 0 0 1-1m13 4a1 1 0 0 0-1-1h-9a1 1 0 1 0 0 2h9a1 1 0 0 0 1-1M8 18a1 1 0 0 0-1-1H4a1 1 0 1 0 0 2h3a1 1 0 0 0 1-1\\"/>","width":24,"height":24}}},{"prefix":"tabler","width":24,"height":24,"icons":{"box-padding":{"body":"<path fill=\\"none\\" stroke=\\"currentColor\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" stroke-width=\\"2\\" d=\\"M4 6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2zm4 10v.01M8 12v.01M8 8v.01M16 16v.01M16 12v.01M16 8v.01M12 8v.01M12 16v.01\\"/>"},"float-right":{"body":"<path fill=\\"none\\" stroke=\\"currentColor\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" stroke-width=\\"2\\" d=\\"M14 6a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1zM4 7h6m-6 4h6m-6 4h16M4 19h16\\"/>"},"hand-click":{"body":"<g fill=\\"none\\" stroke=\\"currentColor\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" stroke-width=\\"2\\"><path d=\\"M8 13V4.5a1.5 1.5 0 0 1 3 0V12m0-.5v-2a1.5 1.5 0 0 1 3 0V12m0-1.5a1.5 1.5 0 0 1 3 0V12\\"/><path d=\\"M17 11.5a1.5 1.5 0 0 1 3 0V16a6 6 0 0 1-6 6h-2h.208a6 6 0 0 1-5.012-2.7L7 19q-.468-.718-3.286-5.728a1.5 1.5 0 0 1 .536-2.022a1.87 1.87 0 0 1 2.28.28L8 13M5 3L4 2m0 5H3m11-4l1-1m0 4h1\\"/></g>"},"input-search":{"body":"<path fill=\\"none\\" stroke=\\"currentColor\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" stroke-width=\\"2\\" d=\\"M20 11V9a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h5m4 2a3 3 0 1 0 6 0a3 3 0 1 0-6 0m5.2 2.2L22 22\\"/>"},"layout-navbar":{"body":"<path fill=\\"none\\" stroke=\\"currentColor\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" stroke-width=\\"2\\" d=\\"M4 6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2zm0 3h16\\"/>"},"line-dashed":{"body":"<path fill=\\"none\\" stroke=\\"currentColor\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" stroke-width=\\"2\\" d=\\"M5 12h2m10 0h2m-8 0h2\\"/>"},"line-dotted":{"body":"<path fill=\\"none\\" stroke=\\"currentColor\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" stroke-width=\\"2\\" d=\\"M4 12v.01M8 12v.01m4-.01v.01m4-.01v.01m4-.01v.01\\"/>"}}},{"prefix":"entypo","width":20,"height":20,"icons":{"progress-empty":{"body":"<path fill=\\"currentColor\\" d=\\"M18 5H2C.9 5 0 5.9 0 7v6c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 8H2V7h16z\\"/>"}}},{"prefix":"bi","icons":{"columns":{"body":"<path fill=\\"currentColor\\" d=\\"M0 2a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1zm8.5 0v8H15V2zm0 9v3H15v-3zm-1-9H1v3h6.5zM1 14h6.5V6H1z\\"/>"},"grid-3x2-gap":{"body":"<path fill=\\"currentColor\\" d=\\"M4 4v2H2V4zm1 7V9a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1m0-5V4a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1m5 5V9a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1m0-5V4a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1M9 4v2H7V4zm5 0h-2v2h2zM4 9v2H2V9zm5 0v2H7V9zm5 0v2h-2V9zm-3-5a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zm1 4a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1z\\"/>"},"grid-3x3-gap":{"body":"<path fill=\\"currentColor\\" d=\\"M4 2v2H2V2zm1 12v-2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1m0-5V7a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1m0-5V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1m5 10v-2a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1m0-5V7a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1m0-5V2a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1M9 2v2H7V2zm5 0v2h-2V2zM4 7v2H2V7zm5 0v2H7V7zm5 0h-2v2h2zM4 12v2H2v-2zm5 0v2H7v-2zm5 0v2h-2v-2zM12 1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm-1 6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zm1 4a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1z\\"/>"}}},{"prefix":"fa-solid","width":512,"height":512,"icons":{"list":{"body":"<path fill=\\"currentColor\\" d=\\"M80 368H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16m0-320H16A16 16 0 0 0 0 64v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16V64a16 16 0 0 0-16-16m0 160H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16m416 176H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16m0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16m0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16\\"/>"}}},{"prefix":"ph","width":256,"height":256,"icons":{"article-medium":{"body":"<path fill=\\"currentColor\\" d=\\"M56 136a8 8 0 0 1-8 8H24a8 8 0 0 1 0-16h8V64h-8a8 8 0 0 1 0-16h16a8 8 0 0 1 6.78 3.74L80 104.91l33.22-53.15A8 8 0 0 1 120 48h16a8 8 0 0 1 0 16h-8v64h8a8 8 0 0 1 0 16h-24a8 8 0 0 1 0-16V83.89l-25.22 40.35a8 8 0 0 1-13.56 0L48 83.89V128a8 8 0 0 1 8 8m112-24h64a8 8 0 0 0 0-16h-64a8 8 0 0 0 0 16m64 16h-64a8 8 0 0 0 0 16h64a8 8 0 0 0 0-16m0 32H80a8 8 0 0 0 0 16h152a8 8 0 0 0 0-16m0 32H80a8 8 0 0 0 0 16h152a8 8 0 0 0 0-16\\"/>"}}},{"prefix":"iconoir","width":24,"height":24,"icons":{"input-search":{"body":"<path fill=\\"none\\" stroke=\\"currentColor\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" stroke-width=\\"1.5\\" d=\\"M21 12v-2a5 5 0 0 0-5-5H8a5 5 0 0 0-5 5v0a5 5 0 0 0 5 5h4m8.124 4.119a3 3 0 1 0-4.248-4.237a3 3 0 0 0 4.248 4.237m0 0L22 21\\"/>"}}},{"prefix":"icon-park-twotone","width":48,"height":48,"icons":{"theme":{"body":"<defs><mask id=\\"ipTTheme0\\"><path fill=\\"#555\\" stroke=\\"#fff\\" stroke-linejoin=\\"round\\" stroke-width=\\"4\\" d=\\"M18 6a6 6 0 0 0 12 0h5.455L42 15.818l-5.727 4.91V42H11.727V20.727L6 15.818L12.546 6z\\"/></mask></defs><path fill=\\"currentColor\\" d=\\"M0 0h48v48H0z\\" mask=\\"url(#ipTTheme0)\\"/>"}}},{"prefix":"material-symbols","width":24,"height":24,"icons":{"line-start":{"body":"<path fill=\\"currentColor\\" d=\\"M4.5 14.5q-1.05 0-1.775-.725T2 12t.725-1.775T4.5 9.5q.775 0 1.4.425T6.8 11H22v2H6.8q-.275.65-.9 1.075t-1.4.425\\"/>"}}}]').forEach(e=>XJ.addCollection(e));let AT;AT={},Ke=function(e,t,n){let r=Promise.resolve();return t&&t.length>0&&(document.getElementsByTagName("link"),r=Promise.all(t.map(o=>{if((o=function(s){return"/"+s}(o))in AT)return;AT[o]=!0;const i=o.endsWith(".css"),a=i?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${o}"]${a}`))return;const l=document.createElement("link");return l.rel=i?"stylesheet":"modulepreload",i||(l.as="script",l.crossOrigin=""),l.href=o,document.head.appendChild(l),i?new Promise((s,u)=>{l.addEventListener("load",s),l.addEventListener("error",()=>u(new Error(`Unable to preload CSS for ${o}`)))}):void 0}))),r.then(()=>e()).catch(o=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=o,window.dispatchEvent(i),!i.defaultPrevented)throw o})},kQ=(e,t)=>{const n=e[t];return n?typeof n=="function"?n():Promise.resolve(n):new Promise((r,o)=>{(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(o.bind(null,new Error("Unknown variable dynamic import: "+t)))})},_m=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},_l=function(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e},Bb=function(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var n=function r(){return this instanceof r?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(r){var o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}),n};var rs={};const QJ=typeof window<"u";let JJ,ZJ;{const e=QJ&&window.performance;e&&e.mark&&e.measure&&e.clearMarks&&e.clearMeasures&&(JJ=t=>{e.mark(t)},ZJ=(t,n,r)=>{e.measure(t,n,r),e.clearMarks(n),e.clearMarks(r)})}const xTe=/\{([0-9a-zA-Z]+)\}/g,eZ=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),_Te=Object.assign;let tZ;const ETe=Object.prototype.hasOwnProperty,wT=Array.isArray,xT=e=>typeof e=="function",Wb=e=>e!==null&&typeof e=="object",_T=Object.prototype.toString,ET=e=>_T.call(e),CT=e=>{if(!Wb(e))return!1;const t=Object.getPrototypeOf(e);return t===null||t.constructor===Object};function nZ(e,t){typeof console<"u"&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}const rZ={},n7=e=>!Wb(e)||wT(e),CTe=Object.freeze(Object.defineProperty({__proto__:null,assign:_Te,createEmitter:function(){const e=new Map;return{events:e,on(t,n){const r=e.get(t);r&&r.push(n)||e.set(t,[n])},off(t,n){const r=e.get(t);r&&r.splice(r.indexOf(n)>>>0,1)},emit(t,n){(e.get(t)||[]).slice().map(r=>r(n)),(e.get("*")||[]).slice().map(r=>r(t,n))}}},deepCopy:function(e,t){if(n7(e)||n7(t))throw new Error("Invalid value");const n=[{src:e,des:t}];for(;n.length;){const{src:r,des:o}=n.pop();Object.keys(r).forEach(i=>{n7(r[i])||n7(o[i])?o[i]=r[i]:n.push({src:r[i],des:o[i]})})}},escapeHtml:function(e){return e.replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},format:function(e,...t){return t.length===1&&Wb(t[0])&&(t=t[0]),t&&t.hasOwnProperty||(t={}),e.replace(xTe,(n,r)=>t.hasOwnProperty(r)?t[r]:"")},friendlyJSONstringify:eZ,generateCodeFrame:function(e,t=0,n=e.length){const r=e.split(/\r?\n/);let o=0;const i=[];for(let a=0;a<r.length;a++)if(o+=r[a].length+1,o>=t){for(let l=a-2;l<=a+2||n>o;l++){if(l<0||l>=r.length)continue;const s=l+1;i.push(`${s}${" ".repeat(3-String(s).length)}| ${r[l]}`);const u=r[l].length;if(l===a){const c=t-(o-u)+1,d=Math.max(1,n>o?u-c:n-t);i.push(" | "+" ".repeat(c)+"^".repeat(d))}else if(l>a){if(n>o){const c=Math.max(Math.min(n-o,u),1);i.push(" | "+"^".repeat(c))}o+=u+1}}break}return i.join(`
| `)},generateFormatCacheKey:(e,t,n)=>eZ({l:e,k:t,s:n}),getGlobalThis:()=>tZ||(tZ=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),hasOwn:function(e,t){return ETe.call(e,t)},inBrowser:QJ,incrementer:function(e){let t=e;return()=>++t},isArray:wT,isBoolean:e=>typeof e=="boolean",isDate:e=>ET(e)==="[object Date]",isEmptyObject:e=>CT(e)&&Object.keys(e).length===0,isFunction:xT,isNumber:e=>typeof e=="number"&&isFinite(e),isObject:Wb,isPlainObject:CT,isPromise:e=>Wb(e)&&xT(e.then)&&xT(e.catch),isRegExp:e=>ET(e)==="[object RegExp]",isString:e=>typeof e=="string",isSymbol:e=>typeof e=="symbol",join:function(e,t=""){return e.reduce((n,r,o)=>o===0?n+r:n+t+r,"")},makeSymbol:(e,t=!1)=>t?Symbol.for(e):Symbol(e),get mark(){return JJ},get measure(){return ZJ},objectToString:_T,toDisplayString:e=>e==null?"":wT(e)||CT(e)&&e.toString===_T?JSON.stringify(e,null,2):String(e),toTypeString:ET,warn:nZ,warnOnce:function(e){rZ[e]||(rZ[e]=!0,nZ(e))}},Symbol.toStringTag,{value:"Module"})),STe=Bb(CTe),w0=typeof window<"u";let os,x0;{const e=w0&&window.performance;e&&e.mark&&e.measure&&e.clearMarks&&e.clearMeasures&&(os=t=>{e.mark(t)},x0=(t,n,r)=>{e.measure(t,n,r),e.clearMarks(n),e.clearMarks(r)})}const kTe=/\{([0-9a-zA-Z]+)\}/g;function ST(e,...t){return t.length===1&&ki(t[0])&&(t=t[0]),t&&t.hasOwnProperty||(t={}),e.replace(kTe,(n,r)=>t.hasOwnProperty(r)?t[r]:"")}const DTe=(e,t,n)=>OTe({l:e,k:t,s:n}),OTe=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),is=e=>typeof e=="number"&&isFinite(e),TTe=e=>lZ(e)==="[object Date]",oZ=e=>lZ(e)==="[object RegExp]",kT=e=>_o(e)&&Object.keys(e).length===0,Bf=Object.assign;function iZ(e){return e.replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}const _c=Array.isArray,Si=e=>typeof e=="function",jn=e=>typeof e=="string",Xa=e=>typeof e=="boolean",ki=e=>e!==null&&typeof e=="object",MTe=e=>ki(e)&&Si(e.then)&&Si(e.catch),aZ=Object.prototype.toString,lZ=e=>aZ.call(e),_o=e=>{if(!ki(e))return!1;const t=Object.getPrototypeOf(e);return t===null||t.constructor===Object};function DT(e,t=""){return e.reduce((n,r,o)=>o===0?n+r:n+t+r,"")}const sZ=2;function Gb(e,t){typeof console<"u"&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}const uZ={};function OT(e,t,n){return{start:e,end:t}}const kn={EXPECTED_TOKEN:1,INVALID_TOKEN_IN_PLACEHOLDER:2,UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER:3,UNKNOWN_ESCAPE_SEQUENCE:4,INVALID_UNICODE_ESCAPE_SEQUENCE:5,UNBALANCED_CLOSING_BRACE:6,UNTERMINATED_CLOSING_BRACE:7,EMPTY_PLACEHOLDER:8,NOT_ALLOW_NEST_PLACEHOLDER:9,INVALID_LINKED_FORMAT:10,MUST_HAVE_MESSAGES_IN_PLURAL:11,UNEXPECTED_EMPTY_LINKED_MODIFIER:12,UNEXPECTED_EMPTY_LINKED_KEY:13,UNEXPECTED_LEXICAL_ANALYSIS:14,UNHANDLED_CODEGEN_NODE_TYPE:15,UNHANDLED_MINIFIER_NODE_TYPE:16,__EXTEND_POINT__:17},NTe={[kn.EXPECTED_TOKEN]:"Expected token: '{0}'",[kn.INVALID_TOKEN_IN_PLACEHOLDER]:"Invalid token in placeholder: '{0}'",[kn.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER]:"Unterminated single quote in placeholder",[kn.UNKNOWN_ESCAPE_SEQUENCE]:"Unknown escape sequence: \\{0}",[kn.INVALID_UNICODE_ESCAPE_SEQUENCE]:"Invalid unicode escape sequence: {0}",[kn.UNBALANCED_CLOSING_BRACE]:"Unbalanced closing brace",[kn.UNTERMINATED_CLOSING_BRACE]:"Unterminated closing brace",[kn.EMPTY_PLACEHOLDER]:"Empty placeholder",[kn.NOT_ALLOW_NEST_PLACEHOLDER]:"Not allowed nest placeholder",[kn.INVALID_LINKED_FORMAT]:"Invalid linked format",[kn.MUST_HAVE_MESSAGES_IN_PLURAL]:"Plural must have messages",[kn.UNEXPECTED_EMPTY_LINKED_MODIFIER]:"Unexpected empty linked modifier",[kn.UNEXPECTED_EMPTY_LINKED_KEY]:"Unexpected empty linked key",[kn.UNEXPECTED_LEXICAL_ANALYSIS]:"Unexpected lexical analysis in token: '{0}'",[kn.UNHANDLED_CODEGEN_NODE_TYPE]:"unhandled codegen node type: '{0}'",[kn.UNHANDLED_MINIFIER_NODE_TYPE]:"unhandled mimifier node type: '{0}'"};function Sm(e,t,n={}){const{domain:r,messages:o,args:i}=n,a=ST((o||NTe)[e]||"",...i||[]),l=new SyntaxError(String(a));return l.code=e,t&&(l.location=t),l.domain=r,l}function FTe(e){throw e}const RTe=/<\/?[\w\s="/.':;#-\/]+>/,ITe=e=>RTe.test(e),Sd=" ",BTe="\r",Qa=`
| `,PTe="\u2028",LTe="\u2029";function jTe(e){const t=e;let n=0,r=1,o=1,i=0;const a=f=>t[f]===BTe&&t[f+1]===Qa,l=f=>t[f]===LTe,s=f=>t[f]===PTe,u=f=>a(f)||(p=>t[p]===Qa)(f)||l(f)||s(f),c=f=>a(f)||l(f)||s(f)?Qa:t[f];function d(){return i=0,u(n)&&(r++,o=0),a(n)&&n++,n++,o++,t[n]}return{index:()=>n,line:()=>r,column:()=>o,peekOffset:()=>i,charAt:c,currentChar:()=>c(n),currentPeek:()=>c(n+i),next:d,peek:function(){return a(n+i)&&i++,i++,t[n+i]},reset:function(){n=0,r=1,o=1,i=0},resetPeek:function(f=0){i=f},skipToPeek:function(){const f=n+i;for(;f!==n;)d();i=0}}}const Pf=void 0,VTe=".",cZ="'",zTe="tokenizer";function HTe(e,t={}){const n=t.location!==!1,r=jTe(e),o=()=>r.index(),i=()=>{return L=r.line(),H=r.column(),U=r.index(),{line:L,column:H,offset:U};var L,H,U},a=i(),l=o(),s={currentType:14,offset:l,startLoc:a,endLoc:a,lastType:14,lastOffset:l,lastStartLoc:a,lastEndLoc:a,braceNest:0,inLinked:!1,text:""},u=()=>s,{onError:c}=t;function d(L,H,U,...G){const z=u();if(H.column+=U,H.offset+=U,c){const $=Sm(L,n?OT(z.startLoc,H):null,{domain:zTe,args:G});c($)}}function f(L,H,U){L.endLoc=i(),L.currentType=H;const G={type:H};return n&&(G.loc=OT(L.startLoc,L.endLoc)),U!=null&&(G.value=U),G}const p=L=>f(L,14);function m(L,H){return L.currentChar()===H?(L.next(),H):(d(kn.EXPECTED_TOKEN,i(),0,H),"")}function v(L){let H="";for(;L.currentPeek()===Sd||L.currentPeek()===Qa;)H+=L.currentPeek(),L.peek();return H}function g(L){const H=v(L);return L.skipToPeek(),H}function b(L){if(L===Pf)return!1;const H=L.charCodeAt(0);return H>=97&&H<=122||H>=65&&H<=90||H===95}function y(L,H){const{currentType:U}=H;if(U!==2)return!1;v(L);const G=function(z){if(z===Pf)return!1;const $=z.charCodeAt(0);return $>=48&&$<=57}(L.currentPeek()==="-"?L.peek():L.currentPeek());return L.resetPeek(),G}function w(L){v(L);const H=L.currentPeek()==="|";return L.resetPeek(),H}function x(L,H=!0){const U=(z=!1,$="",W=!1)=>{const K=L.currentPeek();return K==="{"?$!=="%"&&z:K!=="@"&&K?K==="%"?(L.peek(),U(z,"%",!0)):K==="|"?!($!=="%"&&!W)||!($===Sd||$===Qa):K===Sd?(L.peek(),U(!0,Sd,W)):K!==Qa||(L.peek(),U(!0,Qa,W)):$==="%"||z},G=U();return H&&L.resetPeek(),G}function _(L,H){const U=L.currentChar();return U===Pf?Pf:H(U)?(L.next(),U):null}function E(L){return _(L,H=>{const U=H.charCodeAt(0);return U>=97&&U<=122||U>=65&&U<=90||U>=48&&U<=57||U===95||U===36})}function C(L){return _(L,H=>{const U=H.charCodeAt(0);return U>=48&&U<=57})}function T(L){return _(L,H=>{const U=H.charCodeAt(0);return U>=48&&U<=57||U>=65&&U<=70||U>=97&&U<=102})}function k(L){let H="",U="";for(;H=C(L);)U+=H;return U}function I(L){let H="";for(;;){const U=L.currentChar();if(U==="{"||U==="}"||U==="@"||U==="|"||!U)break;if(U==="%"){if(!x(L))break;H+=U,L.next()}else if(U===Sd||U===Qa)if(x(L))H+=U,L.next();else{if(w(L))break;H+=U,L.next()}else H+=U,L.next()}return H}function O(L){const H=L.currentChar();switch(H){case"\\":case"'":return L.next(),`\\${H}`;case"u":return F(L,H,4);case"U":return F(L,H,6);default:return d(kn.UNKNOWN_ESCAPE_SEQUENCE,i(),0,H),""}}function F(L,H,U){m(L,H);let G="";for(let z=0;z<U;z++){const $=T(L);if(!$){d(kn.INVALID_UNICODE_ESCAPE_SEQUENCE,i(),0,`\\${H}${G}${L.currentChar()}`);break}G+=$}return`\\${H}${G}`}function N(L){g(L);const H=m(L,"|");return g(L),H}function B(L,H){let U=null;switch(L.currentChar()){case"{":return H.braceNest>=1&&d(kn.NOT_ALLOW_NEST_PLACEHOLDER,i(),0),L.next(),U=f(H,2,"{"),g(L),H.braceNest++,U;case"}":return H.braceNest>0&&H.currentType===2&&d(kn.EMPTY_PLACEHOLDER,i(),0),L.next(),U=f(H,3,"}"),H.braceNest--,H.braceNest>0&&g(L),H.inLinked&&H.braceNest===0&&(H.inLinked=!1),U;case"@":return H.braceNest>0&&d(kn.UNTERMINATED_CLOSING_BRACE,i(),0),U=P(L,H)||p(H),H.braceNest=0,U;default:{let G=!0,z=!0,$=!0;if(w(L))return H.braceNest>0&&d(kn.UNTERMINATED_CLOSING_BRACE,i(),0),U=f(H,1,N(L)),H.braceNest=0,H.inLinked=!1,U;if(H.braceNest>0&&(H.currentType===5||H.currentType===6||H.currentType===7))return d(kn.UNTERMINATED_CLOSING_BRACE,i(),0),H.braceNest=0,V(L,H);if(G=function(W,K){const{currentType:X}=K;if(X!==2)return!1;v(W);const te=b(W.currentPeek());return W.resetPeek(),te}(L,H))return U=f(H,5,function(W){g(W);let K="",X="";for(;K=E(W);)X+=K;return W.currentChar()===Pf&&d(kn.UNTERMINATED_CLOSING_BRACE,i(),0),X}(L)),g(L),U;if(z=y(L,H))return U=f(H,6,function(W){g(W);let K="";return W.currentChar()==="-"?(W.next(),K+=`-${k(W)}`):K+=k(W),W.currentChar()===Pf&&d(kn.UNTERMINATED_CLOSING_BRACE,i(),0),K}(L)),g(L),U;if($=function(W,K){const{currentType:X}=K;if(X!==2)return!1;v(W);const te=W.currentPeek()===cZ;return W.resetPeek(),te}(L,H))return U=f(H,7,function(W){g(W),m(W,"'");let K="",X="";const te=se=>se!==cZ&&se!==Qa;for(;K=_(W,te);)X+=K==="\\"?O(W):K;const ne=W.currentChar();return ne===Qa||ne===Pf?(d(kn.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,i(),0),ne===Qa&&(W.next(),m(W,"'")),X):(m(W,"'"),X)}(L)),g(L),U;if(!G&&!z&&!$)return U=f(H,13,function(W){g(W);let K="",X="";const te=ne=>ne!=="{"&&ne!=="}"&&ne!==Sd&&ne!==Qa;for(;K=_(W,te);)X+=K;return X}(L)),d(kn.INVALID_TOKEN_IN_PLACEHOLDER,i(),0,U.value),g(L),U;break}}return U}function P(L,H){const{currentType:U}=H;let G=null;const z=L.currentChar();switch(U!==8&&U!==9&&U!==12&&U!==10||z!==Qa&&z!==Sd||d(kn.INVALID_LINKED_FORMAT,i(),0),z){case"@":return L.next(),G=f(H,8,"@"),H.inLinked=!0,G;case".":return g(L),L.next(),f(H,9,".");case":":return g(L),L.next(),f(H,10,":");default:return w(L)?(G=f(H,1,N(L)),H.braceNest=0,H.inLinked=!1,G):function($,W){const{currentType:K}=W;if(K!==8)return!1;v($);const X=$.currentPeek()===".";return $.resetPeek(),X}(L,H)||function($,W){const{currentType:K}=W;if(K!==8&&K!==12)return!1;v($);const X=$.currentPeek()===":";return $.resetPeek(),X}(L,H)?(g(L),P(L,H)):function($,W){const{currentType:K}=W;if(K!==9)return!1;v($);const X=b($.currentPeek());return $.resetPeek(),X}(L,H)?(g(L),f(H,12,function($){let W="",K="";for(;W=E($);)K+=W;return K}(L))):function($,W){const{currentType:K}=W;if(K!==10)return!1;const X=()=>{const ne=$.currentPeek();return ne==="{"?b($.peek()):!(ne==="@"||ne==="%"||ne==="|"||ne===":"||ne==="."||ne===Sd||!ne)&&(ne===Qa?($.peek(),X()):b(ne))},te=X();return $.resetPeek(),te}(L,H)?(g(L),z==="{"?B(L,H)||G:f(H,11,function($){const W=(K=!1,X)=>{const te=$.currentChar();return te!=="{"&&te!=="%"&&te!=="@"&&te!=="|"&&te!=="("&&te!==")"&&te?te===Sd?X:te===Qa||te===VTe?(X+=te,$.next(),W(K,X)):(X+=te,$.next(),W(!0,X)):X};return W(!1,"")}(L))):(U===8&&d(kn.INVALID_LINKED_FORMAT,i(),0),H.braceNest=0,H.inLinked=!1,V(L,H))}}function V(L,H){let U={type:14};if(H.braceNest>0)return B(L,H)||p(H);if(H.inLinked)return P(L,H)||p(H);switch(L.currentChar()){case"{":return B(L,H)||p(H);case"}":return d(kn.UNBALANCED_CLOSING_BRACE,i(),0),L.next(),f(H,3,"}");case"@":return P(L,H)||p(H);default:{if(w(L))return U=f(H,1,N(L)),H.braceNest=0,H.inLinked=!1,U;const{isModulo:G,hasSpace:z}=function($){const W=v($),K=$.currentPeek()==="%"&&$.peek()==="{";return $.resetPeek(),{isModulo:K,hasSpace:W.length>0}}(L);if(G)return z?f(H,0,I(L)):f(H,4,function($){g($);const W=$.currentChar();return W!=="%"&&d(kn.EXPECTED_TOKEN,i(),0,W),$.next(),"%"}(L));if(x(L))return f(H,0,I(L));break}}return U}return{nextToken:function(){const{currentType:L,offset:H,startLoc:U,endLoc:G}=s;return s.lastType=L,s.lastOffset=H,s.lastStartLoc=U,s.lastEndLoc=G,s.offset=o(),s.startLoc=i(),r.currentChar()===Pf?f(s,14):V(r,s)},currentOffset:o,currentPosition:i,context:u}}const $Te="parser",UTe=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;function WTe(e,t,n){switch(e){case"\\\\":return"\\";case"\\'":return"'";default:{const r=parseInt(t||n,16);return r<=55295||r>=57344?String.fromCodePoint(r):"\uFFFD"}}}function GTe(e={}){const t=e.location!==!1,{onError:n}=e;function r(p,m,v,g,...b){const y=p.currentPosition();if(y.offset+=g,y.column+=g,n){const w=Sm(m,t?OT(v,y):null,{domain:$Te,args:b});n(w)}}function o(p,m,v){const g={type:p};return t&&(g.start=m,g.end=m,g.loc={start:v,end:v}),g}function i(p,m,v,g){t&&(p.end=m,p.loc&&(p.loc.end=v))}function a(p,m){const v=p.context(),g=o(3,v.offset,v.startLoc);return g.value=m,i(g,p.currentOffset(),p.currentPosition()),g}function l(p,m){const v=p.context(),{lastOffset:g,lastStartLoc:b}=v,y=o(5,g,b);return y.index=parseInt(m,10),p.nextToken(),i(y,p.currentOffset(),p.currentPosition()),y}function s(p,m){const v=p.context(),{lastOffset:g,lastStartLoc:b}=v,y=o(4,g,b);return y.key=m,p.nextToken(),i(y,p.currentOffset(),p.currentPosition()),y}function u(p,m){const v=p.context(),{lastOffset:g,lastStartLoc:b}=v,y=o(9,g,b);return y.value=m.replace(UTe,WTe),p.nextToken(),i(y,p.currentOffset(),p.currentPosition()),y}function c(p){const m=p.context(),v=o(6,m.offset,m.startLoc);let g=p.nextToken();if(g.type===9){const b=function(y){const w=y.nextToken(),x=y.context(),{lastOffset:_,lastStartLoc:E}=x,C=o(8,_,E);return w.type!==12?(r(y,kn.UNEXPECTED_EMPTY_LINKED_MODIFIER,x.lastStartLoc,0),C.value="",i(C,_,E),{nextConsumeToken:w,node:C}):(w.value==null&&r(y,kn.UNEXPECTED_LEXICAL_ANALYSIS,x.lastStartLoc,0,Ec(w)),C.value=w.value||"",i(C,y.currentOffset(),y.currentPosition()),{node:C})}(p);v.modifier=b.node,g=b.nextConsumeToken||p.nextToken()}switch(g.type!==10&&r(p,kn.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Ec(g)),g=p.nextToken(),g.type===2&&(g=p.nextToken()),g.type){case 11:g.value==null&&r(p,kn.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Ec(g)),v.key=function(b,y){const w=b.context(),x=o(7,w.offset,w.startLoc);return x.value=y,i(x,b.currentOffset(),b.currentPosition()),x}(p,g.value||"");break;case 5:g.value==null&&r(p,kn.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Ec(g)),v.key=s(p,g.value||"");break;case 6:g.value==null&&r(p,kn.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Ec(g)),v.key=l(p,g.value||"");break;case 7:g.value==null&&r(p,kn.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Ec(g)),v.key=u(p,g.value||"");break;default:{r(p,kn.UNEXPECTED_EMPTY_LINKED_KEY,m.lastStartLoc,0);const b=p.context(),y=o(7,b.offset,b.startLoc);return y.value="",i(y,b.offset,b.startLoc),v.key=y,i(v,b.offset,b.startLoc),{nextConsumeToken:g,node:v}}}return i(v,p.currentOffset(),p.currentPosition()),{node:v}}function d(p){const m=p.context(),v=o(2,m.currentType===1?p.currentOffset():m.offset,m.currentType===1?m.endLoc:m.startLoc);v.items=[];let g=null;do{const b=g||p.nextToken();switch(g=null,b.type){case 0:b.value==null&&r(p,kn.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Ec(b)),v.items.push(a(p,b.value||""));break;case 6:b.value==null&&r(p,kn.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Ec(b)),v.items.push(l(p,b.value||""));break;case 5:b.value==null&&r(p,kn.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Ec(b)),v.items.push(s(p,b.value||""));break;case 7:b.value==null&&r(p,kn.UNEXPECTED_LEXICAL_ANALYSIS,m.lastStartLoc,0,Ec(b)),v.items.push(u(p,b.value||""));break;case 8:{const y=c(p);v.items.push(y.node),g=y.nextConsumeToken||null;break}}}while(m.currentType!==14&&m.currentType!==1);return i(v,m.currentType===1?m.lastOffset:p.currentOffset(),m.currentType===1?m.lastEndLoc:p.currentPosition()),v}function f(p){const m=p.context(),{offset:v,startLoc:g}=m,b=d(p);return m.currentType===14?b:function(y,w,x,_){const E=y.context();let C=_.items.length===0;const T=o(1,w,x);T.cases=[],T.cases.push(_);do{const k=d(y);C||(C=k.items.length===0),T.cases.push(k)}while(E.currentType!==14);return C&&r(y,kn.MUST_HAVE_MESSAGES_IN_PLURAL,x,0),i(T,y.currentOffset(),y.currentPosition()),T}(p,v,g,b)}return{parse:function(p){const m=HTe(p,Bf({},e)),v=m.context(),g=o(0,v.offset,v.startLoc);return t&&g.loc&&(g.loc.source=p),g.body=f(m),e.onCacheKey&&(g.cacheKey=e.onCacheKey(p)),v.currentType!==14&&r(m,kn.UNEXPECTED_LEXICAL_ANALYSIS,v.lastStartLoc,0,p[v.offset]||""),i(g,m.currentOffset(),m.currentPosition()),g}}}function Ec(e){if(e.type===14)return"EOF";const t=(e.value||"").replace(/\r?\n/gu,"\\n");return t.length>10?t.slice(0,9)+"\u2026":t}function dZ(e,t){for(let n=0;n<e.length;n++)TT(e[n],t)}function TT(e,t){switch(e.type){case 1:dZ(e.cases,t),t.helper("plural");break;case 2:dZ(e.items,t);break;case 6:TT(e.key,t),t.helper("linked"),t.helper("type");break;case 5:t.helper("interpolate"),t.helper("list");break;case 4:t.helper("interpolate"),t.helper("named")}}function qTe(e,t={}){const n=function(o){const i={ast:o,helpers:new Set};return{context:()=>i,helper:a=>(i.helpers.add(a),a)}}(e);n.helper("normalize"),e.body&&TT(e.body,n);const r=n.context();e.helpers=Array.from(r.helpers)}function fZ(e){if(e.items.length===1){const t=e.items[0];t.type!==3&&t.type!==9||(e.static=t.value,delete t.value)}else{const t=[];for(let n=0;n<e.items.length;n++){const r=e.items[n];if(r.type!==3&&r.type!==9||r.value==null)break;t.push(r.value)}if(t.length===e.items.length){e.static=DT(t);for(let n=0;n<e.items.length;n++){const r=e.items[n];r.type!==3&&r.type!==9||delete r.value}}}}const KTe="minifier";function km(e){switch(e.t=e.type,e.type){case 0:{const t=e;km(t.body),t.b=t.body,delete t.body;break}case 1:{const t=e,n=t.cases;for(let r=0;r<n.length;r++)km(n[r]);t.c=n,delete t.cases;break}case 2:{const t=e,n=t.items;for(let r=0;r<n.length;r++)km(n[r]);t.i=n,delete t.items,t.static&&(t.s=t.static,delete t.static);break}case 3:case 9:case 8:case 7:{const t=e;t.value&&(t.v=t.value,delete t.value);break}case 6:{const t=e;km(t.key),t.k=t.key,delete t.key,t.modifier&&(km(t.modifier),t.m=t.modifier,delete t.modifier);break}case 5:{const t=e;t.i=t.index,delete t.index;break}case 4:{const t=e;t.k=t.key,delete t.key;break}default:throw Sm(kn.UNHANDLED_MINIFIER_NODE_TYPE,null,{domain:KTe,args:[e.type]})}delete e.type}const YTe="parser";function Dm(e,t){const{helper:n}=e;switch(t.type){case 0:(function(r,o){o.body?Dm(r,o.body):r.push("null")})(e,t);break;case 1:(function(r,o){const{helper:i,needIndent:a}=r;if(o.cases.length>1){r.push(`${i("plural")}([`),r.indent(a());const l=o.cases.length;for(let s=0;s<l&&(Dm(r,o.cases[s]),s!==l-1);s++)r.push(", ");r.deindent(a()),r.push("])")}})(e,t);break;case 2:(function(r,o){const{helper:i,needIndent:a}=r;r.push(`${i("normalize")}([`),r.indent(a());const l=o.items.length;for(let s=0;s<l&&(Dm(r,o.items[s]),s!==l-1);s++)r.push(", ");r.deindent(a()),r.push("])")})(e,t);break;case 6:(function(r,o){const{helper:i}=r;r.push(`${i("linked")}(`),Dm(r,o.key),o.modifier?(r.push(", "),Dm(r,o.modifier),r.push(", _type")):r.push(", undefined, _type"),r.push(")")})(e,t);break;case 8:case 7:case 9:case 3:e.push(JSON.stringify(t.value),t);break;case 5:e.push(`${n("interpolate")}(${n("list")}(${t.index}))`,t);break;case 4:e.push(`${n("interpolate")}(${n("named")}(${JSON.stringify(t.key)}))`,t);break;default:throw Sm(kn.UNHANDLED_CODEGEN_NODE_TYPE,null,{domain:YTe,args:[t.type]})}}const XTe=(e,t={})=>{const n=jn(t.mode)?t.mode:"normal",r=jn(t.filename)?t.filename:"message.intl",o=!!t.sourceMap,i=t.breakLineCode!=null?t.breakLineCode:n==="arrow"?";":`
| `,a=t.needIndent?t.needIndent:n!=="arrow",l=e.helpers||[],s=function(d,f){const{sourceMap:p,filename:m,breakLineCode:v,needIndent:g}=f,b=f.location!==!1,y={filename:m,code:"",column:1,line:1,offset:0,map:void 0,breakLineCode:v,needIndent:g,indentLevel:0};function w(_,E){y.code+=_}function x(_,E=!0){const C=E?v:"";w(g?C+" ".repeat(_):C)}return b&&d.loc&&(y.source=d.loc.source),{context:()=>y,push:w,indent:function(_=!0){const E=++y.indentLevel;_&&x(E)},deindent:function(_=!0){const E=--y.indentLevel;_&&x(E)},newline:function(){x(y.indentLevel)},helper:_=>`_${_}`,needIndent:()=>y.needIndent}}(e,{mode:n,filename:r,sourceMap:o,breakLineCode:i,needIndent:a});s.push(n==="normal"?"function __msg__ (ctx) {":"(ctx) => {"),s.indent(a),l.length>0&&(s.push(`const { ${DT(l.map(d=>`${d}: _${d}`),", ")} } = ctx`),s.newline()),s.push("return "),Dm(s,e),s.deindent(a),s.push("}"),delete e.helpers;const{code:u,map:c}=s.context();return{ast:e,code:u,map:c?c.toJSON():void 0}};function QTe(e,t={}){const n=Bf({},t),r=!!n.jit,o=!!n.minify,i=n.optimize==null||n.optimize,a=GTe(n).parse(e);return r?(i&&function(l){const s=l.body;s.type===2?fZ(s):s.cases.forEach(u=>fZ(u))}(a),o&&km(a),{ast:a,code:""}):(qTe(a,n),XTe(a,n))}const Lf=[];Lf[0]={w:[0],i:[3,0],"[":[4],o:[7]},Lf[1]={w:[1],".":[2],"[":[4],o:[7]},Lf[2]={w:[2],i:[3,0],0:[3,0]},Lf[3]={i:[3,0],0:[3,0],w:[1,1],".":[2,1],"[":[4,1],o:[7,1]},Lf[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],o:8,l:[4,0]},Lf[5]={"'":[4,0],o:8,l:[5,0]},Lf[6]={'"':[4,0],o:8,l:[6,0]};const JTe=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function ZTe(e){if(e==null)return"o";switch(e.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return e;case 95:case 36:case 45:return"i";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"w"}return"i"}function eMe(e){const t=e.trim();return(e.charAt(0)!=="0"||!isNaN(parseInt(e)))&&(n=t,JTe.test(n)?function(r){const o=r.charCodeAt(0);return o!==r.charCodeAt(r.length-1)||o!==34&&o!==39?r:r.slice(1,-1)}(t):"*"+t);var n}function pZ(e){const t=[];let n,r,o,i,a,l,s,u=-1,c=0,d=0;const f=[];function p(){const m=e[u+1];if(c===5&&m==="'"||c===6&&m==='"')return u++,o="\\"+m,f[0](),!0}for(f[0]=()=>{r===void 0?r=o:r+=o},f[1]=()=>{r!==void 0&&(t.push(r),r=void 0)},f[2]=()=>{f[0](),d++},f[3]=()=>{if(d>0)d--,c=4,f[0]();else{if(d=0,r===void 0||(r=eMe(r),r===!1))return!1;f[1]()}};c!==null;)if(u++,n=e[u],n!=="\\"||!p()){if(i=ZTe(n),s=Lf[c],a=s[i]||s.l||8,a===8||(c=a[0],a[1]!==void 0&&(l=f[a[1]],l&&(o=n,l()===!1))))return;if(c===7)return t}}const hZ=new Map;function vZ(e,t){return ki(e)?e[t]:null}const tMe=e=>e,nMe=e=>"",mZ="text",rMe=e=>e.length===0?"":DT(e),oMe=e=>e==null?"":_c(e)||_o(e)&&e.toString===aZ?JSON.stringify(e,null,2):String(e);function gZ(e,t){return e=Math.abs(e),t===2?e?e>1?1:0:1:e?Math.min(e,2):0}function yZ(e={}){const t=e.locale,n=function(d){const f=is(d.pluralIndex)?d.pluralIndex:-1;return d.named&&(is(d.named.count)||is(d.named.n))?is(d.named.count)?d.named.count:is(d.named.n)?d.named.n:f:f}(e),r=ki(e.pluralRules)&&jn(t)&&Si(e.pluralRules[t])?e.pluralRules[t]:gZ,o=ki(e.pluralRules)&&jn(t)&&Si(e.pluralRules[t])?gZ:void 0,i=e.list||[],a=e.named||{};is(e.pluralIndex)&&function(d,f){f.count||(f.count=d),f.n||(f.n=d)}(n,a);function l(d){return(Si(e.messages)?e.messages(d):!!ki(e.messages)&&e.messages[d])||(e.parent?e.parent.message(d):nMe)}const s=_o(e.processor)&&Si(e.processor.normalize)?e.processor.normalize:rMe,u=_o(e.processor)&&Si(e.processor.interpolate)?e.processor.interpolate:oMe,c={list:d=>i[d],named:d=>a[d],plural:d=>d[r(n,d.length,o)],linked:(d,...f)=>{const[p,m]=f;let v="text",g="";f.length===1?ki(p)?(g=p.modifier||g,v=p.type||v):jn(p)&&(g=p||g):f.length===2&&(jn(p)&&(g=p||g),jn(m)&&(v=m||v));const b=l(d)(c),y=v==="vnode"&&_c(b)&&g?b[0]:b;return g?(w=>e.modifiers?e.modifiers[w]:tMe)(g)(y,v):y},message:l,type:_o(e.processor)&&jn(e.processor.type)?e.processor.type:mZ,interpolate:u,normalize:s,values:Bf({},i,a)};return c}let Om=null;function bZ(e,t,n){Om&&Om.emit("i18n:init",{timestamp:Date.now(),i18n:e,version:t,meta:n})}const AZ=iMe("function:translate");function iMe(e){return t=>Om&&Om.emit(e,t)}const Ja={NOT_FOUND_KEY:1,FALLBACK_TO_TRANSLATE:2,CANNOT_FORMAT_NUMBER:3,FALLBACK_TO_NUMBER_FORMAT:4,CANNOT_FORMAT_DATE:5,FALLBACK_TO_DATE_FORMAT:6,EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER:7,__EXTEND_POINT__:8},aMe={[Ja.NOT_FOUND_KEY]:"Not found '{key}' key in '{locale}' locale messages.",[Ja.FALLBACK_TO_TRANSLATE]:"Fall back to translate '{key}' key with '{target}' locale.",[Ja.CANNOT_FORMAT_NUMBER]:"Cannot format a number value due to not supported Intl.NumberFormat.",[Ja.FALLBACK_TO_NUMBER_FORMAT]:"Fall back to number format '{key}' key with '{target}' locale.",[Ja.CANNOT_FORMAT_DATE]:"Cannot format a date value due to not supported Intl.DateTimeFormat.",[Ja.FALLBACK_TO_DATE_FORMAT]:"Fall back to datetime format '{key}' key with '{target}' locale.",[Ja.EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER]:"This project is using Custom Message Compiler, which is an experimental feature. It may receive breaking changes or be removed in the future."};function jf(e,...t){return ST(aMe[e],...t)}const wZ=kn.__EXTEND_POINT__,_0=function(e){let t=e;return()=>++t}(wZ),Gi={INVALID_ARGUMENT:wZ,INVALID_DATE_ARGUMENT:_0(),INVALID_ISO_DATE_ARGUMENT:_0(),NOT_SUPPORT_NON_STRING_MESSAGE:_0(),NOT_SUPPORT_LOCALE_PROMISE_VALUE:_0(),NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:_0(),NOT_SUPPORT_LOCALE_TYPE:_0(),__EXTEND_POINT__:_0()};function Du(e){return Sm(e,null,{messages:lMe})}const lMe={[Gi.INVALID_ARGUMENT]:"Invalid arguments",[Gi.INVALID_DATE_ARGUMENT]:"The date provided is an invalid Date object.Make sure your Date represents a valid date.",[Gi.INVALID_ISO_DATE_ARGUMENT]:"The argument provided is not a valid ISO date string",[Gi.NOT_SUPPORT_NON_STRING_MESSAGE]:"Not support non-string message",[Gi.NOT_SUPPORT_LOCALE_PROMISE_VALUE]:"cannot support promise value",[Gi.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION]:"cannot support async function",[Gi.NOT_SUPPORT_LOCALE_TYPE]:"cannot support locale type"};function r7(e,t){return t.locale!=null?NT(t.locale):NT(e.locale)}let MT;function NT(e){if(jn(e))return e;if(Si(e)){if(e.resolvedOnce&&MT!=null)return MT;if(e.constructor.name==="Function"){const t=e();if(MTe(t))throw Du(Gi.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return MT=t}throw Du(Gi.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}throw Du(Gi.NOT_SUPPORT_LOCALE_TYPE)}function xZ(e,t,n){return[...new Set([n,..._c(t)?t:ki(t)?Object.keys(t):jn(t)?[t]:[n]])]}function _Z(e,t,n){let r=!0;for(let o=0;o<t.length&&Xa(r);o++){const i=t[o];jn(i)&&(r=sMe(e,t[o],n))}return r}function sMe(e,t,n){let r;const o=t.split("-");do r=uMe(e,o.join("-"),n),o.splice(-1,1);while(o.length&&r===!0);return r}function uMe(e,t,n){let r=!1;if(!e.includes(t)&&(r=!0,t)){r=t[t.length-1]!=="!";const o=t.replace(/!/g,"");e.push(o),(_c(n)||_o(n))&&n[o]&&(r=n[o])}return r}const EZ="9.10.2",o7="en-US",CZ=e=>`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;let SZ,kZ,DZ,OZ=null;const TZ=()=>OZ;let MZ=null,NZ=0;function i7(e,t){return e instanceof RegExp?e.test(t):e}function FZ(e,t){return e instanceof RegExp?e.test(t):e}function a7(e,t,n,r,o){const{missing:i,onWarn:a}=e;{const l=e.__v_emitter;l&&l.emit("missing",{locale:n,key:t,type:o,groupId:`${o}:${t}`})}if(i!==null){const l=i(e,n,t,o);return jn(l)?l:t}return FZ(r,t)&&a(jf(Ja.NOT_FOUND_KEY,{key:t,locale:n})),t}function FT(e){return t=>function(n,r){const o=r.b||r.body;if((o.t||o.type)===1){const i=o,a=i.c||i.cases;return n.plural(a.reduce((l,s)=>[...l,RZ(n,s)],[]))}return RZ(n,o)}(t,e)}function RZ(e,t){const n=t.s||t.static;if(n)return e.type==="text"?n:e.normalize([n]);{const r=(t.i||t.items).reduce((o,i)=>[...o,RT(e,i)],[]);return e.normalize(r)}}function RT(e,t){const n=t.t||t.type;switch(n){case 3:{const r=t;return r.v||r.value}case 9:{const r=t;return r.v||r.value}case 4:{const r=t;return e.interpolate(e.named(r.k||r.key))}case 5:{const r=t;return e.interpolate(e.list(r.i!=null?r.i:r.index))}case 6:{const r=t,o=r.m||r.modifier;return e.linked(RT(e,r.k||r.key),o?RT(e,o):void 0,e.type)}case 7:{const r=t;return r.v||r.value}case 8:{const r=t;return r.v||r.value}default:throw new Error(`unhandled node type on format message part: ${n}`)}}const cMe="Detected HTML in '{source}' message. Recommend not using HTML messages to avoid XSS.";function IZ(e,t){t&&ITe(e)&&Gb(ST(cMe,{source:e}))}const BZ=e=>e;let E0=Object.create(null);const C0=e=>ki(e)&&(e.t===0||e.type===0)&&("b"in e||"body"in e);function PZ(e,t={}){let n=!1;const r=t.onError||FTe;return t.onError=o=>{n=!0,r(o)},{...QTe(e,t),detectError:n}}const LZ=()=>"",Us=e=>Si(e);function jZ(e,t,n,r,o,i){const{messages:a,onWarn:l,messageResolver:s,localeFallbacker:u}=e,c=u(e,r,n);let d,f={},p=null,m=n,v=null;const g="translate";for(let b=0;b<c.length;b++){if(d=v=c[b],n!==d&&i7(o,t)&&l(jf(Ja.FALLBACK_TO_TRANSLATE,{key:t,target:d})),n!==d){const E=e.__v_emitter;E&&E.emit("fallback",{type:g,key:t,from:m,to:v,groupId:`${g}:${t}`})}f=a[d]||{};let y,w,x=null;if(w0&&(x=window.performance.now(),y="intlify-message-resolve-start",w="intlify-message-resolve-end",os&&os(y)),(p=s(f,t))===null&&(p=f[t]),w0){const E=window.performance.now(),C=e.__v_emitter;C&&x&&p&&C.emit("message-resolve",{type:"message-resolve",key:t,message:p,time:E-x,groupId:`${g}:${t}`}),y&&w&&os&&x0&&(os(w),x0("intlify message resolve",y,w))}if(jn(p)||C0(p)||Us(p))break;const _=a7(e,t,d,i,g);_!==t&&(p=_),m=v}return[p,d,f]}function VZ(e,t,n,r,o,i){const{messageCompiler:a,warnHtmlMessage:l}=e;if(Us(r)){const f=r;return f.locale=f.locale||n,f.key=f.key||t,f}if(a==null){const f=()=>r;return f.locale=n,f.key=t,f}let s,u,c=null;w0&&(c=window.performance.now(),s="intlify-message-compilation-start",u="intlify-message-compilation-end",os&&os(s));const d=a(r,function(f,p,m,v,g,b){return{locale:p,key:m,warnHtmlMessage:g,onError:y=>{b&&b(y);{const w=function(C){if(jn(C))return C;if(C.loc&&C.loc.source)return C.loc.source}(v),x=`Message compilation error: ${y.message}`,_=y.location&&w&&function(C,T=0,k=C.length){const I=C.split(/\r?\n/);let O=0;const F=[];for(let N=0;N<I.length;N++)if(O+=I[N].length+1,O>=T){for(let B=N-sZ;B<=N+sZ||k>O;B++){if(B<0||B>=I.length)continue;const P=B+1;F.push(`${P}${" ".repeat(3-String(P).length)}| ${I[B]}`);const V=I[B].length;if(B===N){const L=T-(O-V)+1,H=Math.max(1,k>O?V-L:k-T);F.push(" | "+" ".repeat(L)+"^".repeat(H))}else if(B>N){if(k>O){const L=Math.max(Math.min(k-O,V),1);F.push(" | "+"^".repeat(L))}O+=V+1}}break}return F.join(`
| `)}(w,y.location.start.offset,y.location.end.offset),E=f.__v_emitter;E&&w&&E.emit("compile-error",{message:w,error:y.message,start:y.location&&y.location.start.offset,end:y.location&&y.location.end.offset,groupId:`translate:${m}`}),console.error(_?`${x}
| ${_}`:x)}},onCacheKey:y=>DTe(p,m,y)}}(e,n,o,r,l,i));if(w0){const f=window.performance.now(),p=e.__v_emitter;p&&c&&p.emit("message-compilation",{type:"message-compilation",message:r,time:f-c,groupId:`translate:${t}`}),s&&u&&os&&x0&&(os(u),x0("intlify message compilation",s,u))}return d.locale=n,d.key=t,d.source=r,d}function zZ(...e){const[t,n,r]=e,o={};if(!(jn(t)||is(t)||Us(t)||C0(t)))throw Du(Gi.INVALID_ARGUMENT);const i=is(t)?String(t):(Us(t),t);return is(n)?o.plural=n:jn(n)?o.default=n:_o(n)&&!kT(n)?o.named=n:_c(n)&&(o.list=n),is(r)?o.plural=r:jn(r)?o.default=r:_o(r)&&Bf(o,r),[i,o]}const HZ=typeof Intl<"u",dMe=HZ&&Intl.DateTimeFormat!==void 0,fMe=HZ&&Intl.NumberFormat!==void 0,$Z=["localeMatcher","weekday","era","year","month","day","hour","minute","second","timeZoneName","formatMatcher","hour12","timeZone","dateStyle","timeStyle","calendar","dayPeriod","numberingSystem","hourCycle","fractionalSecondDigits"];function UZ(...e){const[t,n,r,o]=e,i={};let a,l={};if(jn(t)){const s=t.match(/(\d{4}-\d{2}-\d{2})(T|\s)?(.*)/);if(!s)throw Du(Gi.INVALID_ISO_DATE_ARGUMENT);const u=s[3]?s[3].trim().startsWith("T")?`${s[1].trim()}${s[3].trim()}`:`${s[1].trim()}T${s[3].trim()}`:s[1].trim();a=new Date(u);try{a.toISOString()}catch{throw Du(Gi.INVALID_ISO_DATE_ARGUMENT)}}else if(TTe(t)){if(isNaN(t.getTime()))throw Du(Gi.INVALID_DATE_ARGUMENT);a=t}else{if(!is(t))throw Du(Gi.INVALID_ARGUMENT);a=t}return jn(n)?i.key=n:_o(n)&&Object.keys(n).forEach(s=>{$Z.includes(s)?l[s]=n[s]:i[s]=n[s]}),jn(r)?i.locale=r:_o(r)&&(l=r),_o(o)&&(l=o),[i.key||"",a,i,l]}const WZ=["localeMatcher","style","currency","currencyDisplay","currencySign","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","compactDisplay","notation","signDisplay","unit","unitDisplay","roundingMode","roundingPriority","roundingIncrement","trailingZeroDisplay"];function GZ(...e){const[t,n,r,o]=e,i={};let a={};if(!is(t))throw Du(Gi.INVALID_ARGUMENT);const l=t;return jn(n)?i.key=n:_o(n)&&Object.keys(n).forEach(s=>{WZ.includes(s)?a[s]=n[s]:i[s]=n[s]}),jn(r)?i.locale=r:_o(r)&&(a=r),_o(o)&&(a=o),[i.key||"",l,i,a]}const pMe=Object.freeze(Object.defineProperty({__proto__:null,CompileErrorCodes:kn,CoreErrorCodes:Gi,CoreWarnCodes:Ja,DATETIME_FORMAT_OPTIONS_KEYS:$Z,DEFAULT_LOCALE:o7,DEFAULT_MESSAGE_DATA_TYPE:mZ,MISSING_RESOLVE_VALUE:"",NOT_REOSLVED:-1,NUMBER_FORMAT_OPTIONS_KEYS:WZ,VERSION:EZ,clearCompileCache:function(){E0=Object.create(null)},clearDateTimeFormat:function(e,t,n){const r=e;for(const o in n){const i=`${t}__${o}`;r.__datetimeFormatters.has(i)&&r.__datetimeFormatters.delete(i)}},clearNumberFormat:function(e,t,n){const r=e;for(const o in n){const i=`${t}__${o}`;r.__numberFormatters.has(i)&&r.__numberFormatters.delete(i)}},compile:function(e,t){if(jn(e)){const n=!Xa(t.warnHtmlMessage)||t.warnHtmlMessage;IZ(e,n);const r=(t.onCacheKey||BZ)(e),o=E0[r];if(o)return o;const{ast:i,detectError:a}=PZ(e,{...t,location:!0,jit:!0}),l=FT(i);return a?l:E0[r]=l}{if(!C0(e))return Gb(`the message that is resolve with key '${t.key}' is not supported for jit compilation`),()=>e;const n=e.cacheKey;return n?E0[n]||(E0[n]=FT(e)):FT(e)}},compileToFunction:(e,t)=>{if(!jn(e))throw Du(Gi.NOT_SUPPORT_NON_STRING_MESSAGE);{IZ(e,!Xa(t.warnHtmlMessage)||t.warnHtmlMessage);const n=(t.onCacheKey||BZ)(e),r=E0[n];if(r)return r;const{code:o,detectError:i}=PZ(e,t),a=new Function(`return ${o}`)();return i?a:E0[n]=a}},createCompileError:Sm,createCoreContext:function(e={}){const t=Si(e.onWarn)?e.onWarn:Gb,n=jn(e.version)?e.version:EZ,r=jn(e.locale)||Si(e.locale)?e.locale:o7,o=Si(r)?o7:r,i=_c(e.fallbackLocale)||_o(e.fallbackLocale)||jn(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:o,a=_o(e.messages)?e.messages:{[o]:{}},l=_o(e.datetimeFormats)?e.datetimeFormats:{[o]:{}},s=_o(e.numberFormats)?e.numberFormats:{[o]:{}},u=Bf({},e.modifiers||{},{upper:(B,P)=>P==="text"&&jn(B)?B.toUpperCase():P==="vnode"&&ki(B)&&"__v_isVNode"in B?B.children.toUpperCase():B,lower:(B,P)=>P==="text"&&jn(B)?B.toLowerCase():P==="vnode"&&ki(B)&&"__v_isVNode"in B?B.children.toLowerCase():B,capitalize:(B,P)=>P==="text"&&jn(B)?CZ(B):P==="vnode"&&ki(B)&&"__v_isVNode"in B?CZ(B.children):B}),c=e.pluralRules||{},d=Si(e.missing)?e.missing:null,f=!Xa(e.missingWarn)&&!oZ(e.missingWarn)||e.missingWarn,p=!Xa(e.fallbackWarn)&&!oZ(e.fallbackWarn)||e.fallbackWarn,m=!!e.fallbackFormat,v=!!e.unresolving,g=Si(e.postTranslation)?e.postTranslation:null,b=_o(e.processor)?e.processor:null,y=!Xa(e.warnHtmlMessage)||e.warnHtmlMessage,w=!!e.escapeParameter,x=Si(e.messageCompiler)?e.messageCompiler:SZ;var _;Si(e.messageCompiler)&&(_=jf(Ja.EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER),uZ[_]||(uZ[_]=!0,Gb(_)));const E=Si(e.messageResolver)?e.messageResolver:kZ||vZ,C=Si(e.localeFallbacker)?e.localeFallbacker:DZ||xZ,T=ki(e.fallbackContext)?e.fallbackContext:void 0,k=e,I=ki(k.__datetimeFormatters)?k.__datetimeFormatters:new Map,O=ki(k.__numberFormatters)?k.__numberFormatters:new Map,F=ki(k.__meta)?k.__meta:{};NZ++;const N={version:n,cid:NZ,locale:r,fallbackLocale:i,messages:a,modifiers:u,pluralRules:c,missing:d,missingWarn:f,fallbackWarn:p,fallbackFormat:m,unresolving:v,postTranslation:g,processor:b,warnHtmlMessage:y,escapeParameter:w,messageCompiler:x,messageResolver:E,localeFallbacker:C,fallbackContext:T,onWarn:t,__meta:F};return N.datetimeFormats=l,N.numberFormats=s,N.__datetimeFormatters=I,N.__numberFormatters=O,N.__v_emitter=k.__v_emitter!=null?k.__v_emitter:void 0,bZ(N,n,F),N},createCoreError:Du,createMessageContext:yZ,datetime:function(e,...t){const{datetimeFormats:n,unresolving:r,fallbackLocale:o,onWarn:i,localeFallbacker:a}=e,{__datetimeFormatters:l}=e;if(!dMe)return i(jf(Ja.CANNOT_FORMAT_DATE)),"";const[s,u,c,d]=UZ(...t),f=Xa(c.missingWarn)?c.missingWarn:e.missingWarn,p=Xa(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn,m=!!c.part,v=r7(e,c),g=a(e,o,v);if(!jn(s)||s==="")return new Intl.DateTimeFormat(v,d).format(u);let b,y={},w=null,x=v,_=null;const E="datetime format";for(let k=0;k<g.length;k++){if(b=_=g[k],v!==b&&i7(p,s)&&i(jf(Ja.FALLBACK_TO_DATE_FORMAT,{key:s,target:b})),v!==b){const I=e.__v_emitter;I&&I.emit("fallback",{type:E,key:s,from:x,to:_,groupId:`${E}:${s}`})}if(y=n[b]||{},w=y[s],_o(w))break;a7(e,s,b,f,E),x=_}if(!_o(w)||!jn(b))return r?-1:s;let C=`${b}__${s}`;kT(d)||(C=`${C}__${JSON.stringify(d)}`);let T=l.get(C);return T||(T=new Intl.DateTimeFormat(b,Bf({},w,d)),l.set(C,T)),m?T.formatToParts(u):T.format(u)},fallbackWithLocaleChain:function(e,t,n){const r=jn(n)?n:o7,o=e;o.__localeChainCache||(o.__localeChainCache=new Map);let i=o.__localeChainCache.get(r);if(!i){i=[];let a=[n];for(;_c(a);)a=_Z(i,a,t);const l=_c(t)||!_o(t)?t:t.default?t.default:null;a=jn(l)?[l]:l,_c(a)&&_Z(i,a,!1),o.__localeChainCache.set(r,i)}return i},fallbackWithSimple:xZ,getAdditionalMeta:TZ,getDevToolsHook:function(){return Om},getFallbackContext:()=>MZ,getLocale:r7,getWarnMessage:jf,handleMissing:a7,initI18nDevTools:bZ,isMessageAST:C0,isMessageFunction:Us,isTranslateFallbackWarn:i7,isTranslateMissingWarn:FZ,number:function(e,...t){const{numberFormats:n,unresolving:r,fallbackLocale:o,onWarn:i,localeFallbacker:a}=e,{__numberFormatters:l}=e;if(!fMe)return i(jf(Ja.CANNOT_FORMAT_NUMBER)),"";const[s,u,c,d]=GZ(...t),f=Xa(c.missingWarn)?c.missingWarn:e.missingWarn,p=Xa(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn,m=!!c.part,v=r7(e,c),g=a(e,o,v);if(!jn(s)||s==="")return new Intl.NumberFormat(v,d).format(u);let b,y={},w=null,x=v,_=null;const E="number format";for(let k=0;k<g.length;k++){if(b=_=g[k],v!==b&&i7(p,s)&&i(jf(Ja.FALLBACK_TO_NUMBER_FORMAT,{key:s,target:b})),v!==b){const I=e.__v_emitter;I&&I.emit("fallback",{type:E,key:s,from:x,to:_,groupId:`${E}:${s}`})}if(y=n[b]||{},w=y[s],_o(w))break;a7(e,s,b,f,E),x=_}if(!_o(w)||!jn(b))return r?-1:s;let C=`${b}__${s}`;kT(d)||(C=`${C}__${JSON.stringify(d)}`);let T=l.get(C);return T||(T=new Intl.NumberFormat(b,Bf({},w,d)),l.set(C,T)),m?T.formatToParts(u):T.format(u)},parse:pZ,parseDateTimeArgs:UZ,parseNumberArgs:GZ,parseTranslateArgs:zZ,registerLocaleFallbacker:function(e){DZ=e},registerMessageCompiler:function(e){SZ=e},registerMessageResolver:function(e){kZ=e},resolveLocale:NT,resolveValue:function(e,t){if(!ki(e))return null;let n=hZ.get(t);if(n||(n=pZ(t),n&&hZ.set(t,n)),!n)return null;const r=n.length;let o=e,i=0;for(;i<r;){const a=o[n[i]];if(a===void 0||Si(o))return null;o=a,i++}return o},resolveWithKeyValue:vZ,setAdditionalMeta:e=>{OZ=e},setDevToolsHook:function(e){Om=e},setFallbackContext:e=>{MZ=e},translate:function(e,...t){const{fallbackFormat:n,postTranslation:r,unresolving:o,messageCompiler:i,fallbackLocale:a,messages:l}=e,[s,u]=zZ(...t),c=Xa(u.missingWarn)?u.missingWarn:e.missingWarn,d=Xa(u.fallbackWarn)?u.fallbackWarn:e.fallbackWarn,f=Xa(u.escapeParameter)?u.escapeParameter:e.escapeParameter,p=!!u.resolvedMessage,m=jn(u.default)||Xa(u.default)?Xa(u.default)?i?s:()=>s:u.default:n?i?s:()=>s:"",v=n||m!=="",g=r7(e,u);f&&function(O){_c(O.list)?O.list=O.list.map(F=>jn(F)?iZ(F):F):ki(O.named)&&Object.keys(O.named).forEach(F=>{jn(O.named[F])&&(O.named[F]=iZ(O.named[F]))})}(u);let[b,y,w]=p?[s,g,l[g]||{}]:jZ(e,s,g,a,d,c),x=b,_=s;if(p||jn(x)||C0(x)||Us(x)||v&&(x=m,_=x),!(p||(jn(x)||C0(x)||Us(x))&&jn(y)))return o?-1:s;if(jn(x)&&e.messageCompiler==null)return Gb(`The message format compilation is not supported in this build. Because message compiler isn't included. You need to pre-compilation all message format. So translate function return '${s}'.`),s;let E=!1;const C=Us(x)?x:VZ(e,s,y,x,_,()=>{E=!0});if(E)return x;const T=function(O,F,N,B){const{modifiers:P,pluralRules:V,messageResolver:L,fallbackLocale:H,fallbackWarn:U,missingWarn:G,fallbackContext:z}=O,$=K=>{let X=L(N,K);if(X==null&&z){const[,,te]=jZ(z,K,F,H,U,G);X=L(te,K)}if(jn(X)||C0(X)){let te=!1;const ne=VZ(O,K,F,X,K,()=>{te=!0});return te?LZ:ne}return Us(X)?X:LZ},W={locale:F,modifiers:P,pluralRules:V,messages:$};return O.processor&&(W.processor=O.processor),B.list&&(W.list=B.list),B.named&&(W.named=B.named),is(B.plural)&&(W.pluralIndex=B.plural),W}(e,y,w,u),k=function(O,F,N){let B,P,V=null;w0&&(V=window.performance.now(),B="intlify-message-evaluation-start",P="intlify-message-evaluation-end",os&&os(B));const L=F(N);if(w0){const H=window.performance.now(),U=O.__v_emitter;U&&V&&U.emit("message-evaluation",{type:"message-evaluation",value:L,time:H-V,groupId:`translate:${F.key}`}),B&&P&&os&&x0&&(os(P),x0("intlify message evaluation",B,P))}return L}(e,C,yZ(T)),I=r?r(k,s):k;{const O={timestamp:Date.now(),key:jn(s)?s:Us(x)?x.key:"",locale:y||(Us(x)?x.locale:""),format:jn(x)?x:Us(x)?x.source:"",message:I};O.meta=Bf({},e.__meta,TZ()||{}),AZ(O)}return I},translateDevTools:AZ,updateFallbackLocale:function(e,t,n){e.__localeChainCache=new Map,e.localeFallbacker(e,n,t)}},Symbol.toStringTag,{value:"Module"})),hMe=Bb(pMe);function l7(e,t){const n=new Set(e.split(","));return r=>n.has(r)}let Hr,S0,fr,qZ,Tm,s7,vo,u7,KZ,k0,Vf,qb,kd,D0,IT,O0,Kb,Yb,c7,T0,Xb,YZ,qi,XZ,Za,M0,Mm,Ws,N0,Qb,Nm,Jb;Hr={},S0=[],fr=()=>{},qZ=()=>!1,Tm=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),s7=e=>e.startsWith("onUpdate:"),vo=Object.assign,u7=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},KZ=Object.prototype.hasOwnProperty,Tn=(e,t)=>KZ.call(e,t),mt=Array.isArray,k0=e=>O0(e)==="[object Map]",Vf=e=>O0(e)==="[object Set]",qb=e=>O0(e)==="[object Date]",Ut=e=>typeof e=="function",an=e=>typeof e=="string",kd=e=>typeof e=="symbol",wn=e=>e!==null&&typeof e=="object",D0=e=>(wn(e)||Ut(e))&&Ut(e.then)&&Ut(e.catch),IT=Object.prototype.toString,O0=e=>IT.call(e),Kb=e=>O0(e).slice(8,-1),Yb=e=>O0(e)==="[object Object]",c7=e=>an(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,T0=l7(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Xb=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},YZ=/-(\w)/g,qi=Xb(e=>e.replace(YZ,(t,n)=>n?n.toUpperCase():"")),XZ=/\B([A-Z])/g,Za=Xb(e=>e.replace(XZ,"-$1").toLowerCase()),M0=Xb(e=>e.charAt(0).toUpperCase()+e.slice(1)),Mm=Xb(e=>e?`on${M0(e)}`:""),Ws=(e,t)=>!Object.is(e,t),N0=(e,t)=>{for(let n=0;n<e.length;n++)e[n](t)},Qb=(e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Nm=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Jb=e=>{const t=an(e)?Number(e):NaN;return isNaN(t)?e:t};let QZ;const JZ=()=>QZ||(QZ=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),vMe=l7("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error");$t=function(e){if(mt(e)){const t={};for(let n=0;n<e.length;n++){const r=e[n],o=an(r)?bMe(r):$t(r);if(o)for(const i in o)t[i]=o[i]}return t}if(an(e)||wn(e))return e};const mMe=/;(?![^(]*\))/g,gMe=/:([^]+)/,yMe=/\/\*[^]*?\*\//g;function bMe(e){const t={};return e.replace(yMe,"").split(mMe).forEach(n=>{if(n){const r=n.split(gMe);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}oe=function(e){let t="";if(an(e))t=e;else if(mt(e))for(let n=0;n<e.length;n++){const r=oe(e[n]);r&&(t+=r+" ")}else if(wn(e))for(const n in e)e[n]&&(t+=n+" ");return t.trim()},iJ=function(e){if(!e)return null;let{class:t,style:n}=e;return t&&!an(t)&&(e.class=oe(t)),n&&(e.style=$t(n)),e};const AMe=l7("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly");function ZZ(e){return!!e||e===""}function zf(e,t){if(e===t)return!0;let n=qb(e),r=qb(t);if(n||r)return!(!n||!r)&&e.getTime()===t.getTime();if(n=kd(e),r=kd(t),n||r)return e===t;if(n=mt(e),r=mt(t),n||r)return!(!n||!r)&&function(o,i){if(o.length!==i.length)return!1;let a=!0;for(let l=0;a&&l<o.length;l++)a=zf(o[l],i[l]);return a}(e,t);if(n=wn(e),r=wn(t),n||r){if(!n||!r||Object.keys(e).length!==Object.keys(t).length)return!1;for(const o in e){const i=e.hasOwnProperty(o),a=t.hasOwnProperty(o);if(i&&!a||!i&&a||!zf(e[o],t[o]))return!1}}return String(e)===String(t)}function d7(e,t){return e.findIndex(n=>zf(n,t))}let BT,f7;Ye=e=>an(e)?e:e==null?"":mt(e)||wn(e)&&(e.toString===IT||!Ut(e.toString))?JSON.stringify(e,BT,2):String(e),BT=(e,t)=>t&&t.__v_isRef?BT(e,t.value):k0(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,o],i)=>(n[f7(r,i)+" =>"]=o,n),{})}:Vf(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>f7(n))}:kd(t)?f7(t):!wn(t)||mt(t)||Yb(t)?t:String(t),f7=(e,t="")=>{var n;return kd(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let as,F0;class PT{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=as,!t&&as&&(this.index=(as.scopes||(as.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=as;try{return as=this,t()}finally{as=n}}}on(){as=this}off(){as=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n<r;n++)this.effects[n].stop();for(n=0,r=this.cleanups.length;n<r;n++)this.cleanups[n]();if(this.scopes)for(n=0,r=this.scopes.length;n<r;n++)this.scopes[n].stop(!0);if(!this.detached&&this.parent&&!t){const o=this.parent.scopes.pop();o&&o!==this&&(this.parent.scopes[this.index]=o,o.index=this.index)}this.parent=void 0,this._active=!1}}}function p7(e){return new PT(e)}function eee(e,t=as){t&&t.active&&t.effects.push(e)}function Zb(){return as}function e3(e){as&&as.cleanups.push(e)}class Fm{constructor(t,n,r,o){this.fn=t,this.trigger=n,this.scheduler=r,this.active=!0,this.deps=[],this._dirtyLevel=4,this._trackId=0,this._runnings=0,this._shouldSchedule=!1,this._depsLength=0,eee(this,o)}get dirty(){if(this._dirtyLevel===2||this._dirtyLevel===3){this._dirtyLevel=1,R0();for(let t=0;t<this._depsLength;t++){const n=this.deps[t];if(n.computed&&(n.computed.value,this._dirtyLevel>=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),I0()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Hf,n=F0;try{return Hf=!0,F0=this,this._runnings++,tee(this),this.fn()}finally{nee(this),this._runnings--,F0=n,Hf=t}}stop(){var t;this.active&&(tee(this),nee(this),(t=this.onStop)==null||t.call(this),this.active=!1)}}function tee(e){e._trackId++,e._depsLength=0}function nee(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t<e.deps.length;t++)ree(e.deps[t],e);e.deps.length=e._depsLength}}function ree(e,t){const n=e.get(t);n!==void 0&&t._trackId!==n&&(e.delete(t),e.size===0&&e.cleanup())}let Hf=!0,LT=0;const oee=[];function R0(){oee.push(Hf),Hf=!1}function I0(){const e=oee.pop();Hf=e===void 0||e}function jT(){LT++}function VT(){for(LT--;!LT&&zT.length;)zT.shift()()}function iee(e,t,n){if(t.get(e)!==e._trackId){t.set(e,e._trackId);const r=e.deps[e._depsLength];r!==t?(r&&ree(r,e),e.deps[e._depsLength++]=t):e._depsLength++}}const zT=[];function aee(e,t,n){jT();for(const r of e.keys()){let o;r._dirtyLevel<t&&(o??(o=e.get(r)===r._trackId))&&(r._shouldSchedule||(r._shouldSchedule=r._dirtyLevel===0),r._dirtyLevel=t),r._shouldSchedule&&(o??(o=e.get(r)===r._trackId))&&(r.trigger(),r._runnings&&!r.allowRecurse||r._dirtyLevel===2||(r._shouldSchedule=!1,r.scheduler&&zT.push(r.scheduler)))}VT()}const lee=(e,t)=>{const n=new Map;return n.cleanup=e,n.computed=t,n},h7=new WeakMap,B0=Symbol(""),HT=Symbol("");function Cl(e,t,n){if(Hf&&F0){let r=h7.get(e);r||h7.set(e,r=new Map);let o=r.get(n);o||r.set(n,o=lee(()=>r.delete(n))),iee(F0,o)}}function Dd(e,t,n,r,o,i){const a=h7.get(e);if(!a)return;let l=[];if(t==="clear")l=[...a.values()];else if(n==="length"&&mt(e)){const s=Number(r);a.forEach((u,c)=>{(c==="length"||!kd(c)&&c>=s)&&l.push(u)})}else switch(n!==void 0&&l.push(a.get(n)),t){case"add":mt(e)?c7(n)&&l.push(a.get("length")):(l.push(a.get(B0)),k0(e)&&l.push(a.get(HT)));break;case"delete":mt(e)||(l.push(a.get(B0)),k0(e)&&l.push(a.get(HT)));break;case"set":k0(e)&&l.push(a.get(B0))}jT();for(const s of l)s&&aee(s,4);VT()}const wMe=l7("__proto__,__v_isRef,__isVue"),see=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(kd)),uee=xMe();function xMe(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=Zn(this);for(let i=0,a=this.length;i<a;i++)Cl(r,0,i+"");const o=r[t](...n);return o===-1||o===!1?r[t](...n.map(Zn)):o}}),["push","pop","shift","unshift","splice"].forEach(t=>{e[t]=function(...n){R0(),jT();const r=Zn(this)[t].apply(this,n);return VT(),I0(),r}}),e}function _Me(e){const t=Zn(this);return Cl(t,0,e),t.hasOwnProperty(e)}class cee{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){const o=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return i;if(n==="__v_raw")return r===(o?i?Aee:bee:i?yee:gee).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const a=mt(t);if(!o){if(a&&Tn(uee,n))return Reflect.get(uee,n,r);if(n==="hasOwnProperty")return _Me}const l=Reflect.get(t,n,r);return(kd(n)?see.has(n):wMe(n))?l:(o||Cl(t,0,n),i?l:Jn(l)?a&&c7(n)?l:l.value:wn(l)?o?xd(l):Qn(l):l)}}class dee extends cee{constructor(t=!1){super(!1,t)}set(t,n,r,o){let i=t[n];if(!this._isShallow){const s=P0(i);if(t3(r)||P0(r)||(i=Zn(i),r=Zn(r)),!mt(t)&&Jn(i)&&!Jn(r))return!s&&(i.value=r,!0)}const a=mt(t)&&c7(n)?Number(n)<t.length:Tn(t,n),l=Reflect.set(t,n,r,o);return t===Zn(o)&&(a?Ws(r,i)&&Dd(t,"set",n,r):Dd(t,"add",n,r)),l}deleteProperty(t,n){const r=Tn(t,n);t[n];const o=Reflect.deleteProperty(t,n);return o&&r&&Dd(t,"delete",n,void 0),o}has(t,n){const r=Reflect.has(t,n);return kd(n)&&see.has(n)||Cl(t,0,n),r}ownKeys(t){return Cl(t,0,mt(t)?"length":B0),Reflect.ownKeys(t)}}class fee extends cee{constructor(t=!1){super(!0,t)}set(t,n){return!0}deleteProperty(t,n){return!0}}const EMe=new dee,CMe=new fee,SMe=new dee(!0),kMe=new fee(!0),$T=e=>e,v7=e=>Reflect.getPrototypeOf(e);function m7(e,t,n=!1,r=!1){const o=Zn(e=e.__v_raw),i=Zn(t);n||(Ws(t,i)&&Cl(o,0,t),Cl(o,0,i));const{has:a}=v7(o),l=r?$T:n?WT:n3;return a.call(o,t)?l(e.get(t)):a.call(o,i)?l(e.get(i)):void(e!==o&&e.get(t))}function g7(e,t=!1){const n=this.__v_raw,r=Zn(n),o=Zn(e);return t||(Ws(e,o)&&Cl(r,0,e),Cl(r,0,o)),e===o?n.has(e):n.has(e)||n.has(o)}function y7(e,t=!1){return e=e.__v_raw,!t&&Cl(Zn(e),0,B0),Reflect.get(e,"size",e)}function pee(e){e=Zn(e);const t=Zn(this);return v7(t).has.call(t,e)||(t.add(e),Dd(t,"add",e,e)),this}function hee(e,t){t=Zn(t);const n=Zn(this),{has:r,get:o}=v7(n);let i=r.call(n,e);i||(e=Zn(e),i=r.call(n,e));const a=o.call(n,e);return n.set(e,t),i?Ws(t,a)&&Dd(n,"set",e,t):Dd(n,"add",e,t),this}function vee(e){const t=Zn(this),{has:n,get:r}=v7(t);let o=n.call(t,e);o||(e=Zn(e),o=n.call(t,e)),r&&r.call(t,e);const i=t.delete(e);return o&&Dd(t,"delete",e,void 0),i}function mee(){const e=Zn(this),t=e.size!==0,n=e.clear();return t&&Dd(e,"clear",void 0,void 0),n}function b7(e,t){return function(n,r){const o=this,i=o.__v_raw,a=Zn(i),l=t?$T:e?WT:n3;return!e&&Cl(a,0,B0),i.forEach((s,u)=>n.call(r,l(s),l(u),o))}}function A7(e,t,n){return function(...r){const o=this.__v_raw,i=Zn(o),a=k0(i),l=e==="entries"||e===Symbol.iterator&&a,s=e==="keys"&&a,u=o[e](...r),c=n?$T:t?WT:n3;return!t&&Cl(i,0,s?HT:B0),{next(){const{value:d,done:f}=u.next();return f?{value:d,done:f}:{value:l?[c(d[0]),c(d[1])]:c(d),done:f}},[Symbol.iterator](){return this}}}}function $f(e){return function(...t){return e!=="delete"&&(e==="clear"?void 0:this)}}function DMe(){const e={get(o){return m7(this,o)},get size(){return y7(this)},has:g7,add:pee,set:hee,delete:vee,clear:mee,forEach:b7(!1,!1)},t={get(o){return m7(this,o,!1,!0)},get size(){return y7(this)},has:g7,add:pee,set:hee,delete:vee,clear:mee,forEach:b7(!1,!0)},n={get(o){return m7(this,o,!0)},get size(){return y7(this,!0)},has(o){return g7.call(this,o,!0)},add:$f("add"),set:$f("set"),delete:$f("delete"),clear:$f("clear"),forEach:b7(!0,!1)},r={get(o){return m7(this,o,!0,!0)},get size(){return y7(this,!0)},has(o){return g7.call(this,o,!0)},add:$f("add"),set:$f("set"),delete:$f("delete"),clear:$f("clear"),forEach:b7(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=A7(o,!1,!1),n[o]=A7(o,!0,!1),t[o]=A7(o,!1,!0),r[o]=A7(o,!0,!0)}),[e,n,t,r]}const[OMe,TMe,MMe,NMe]=DMe();function w7(e,t){const n=t?e?NMe:MMe:e?TMe:OMe;return(r,o,i)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(Tn(n,o)&&o in r?n:r,o,i)}const FMe={get:w7(!1,!1)},RMe={get:w7(!1,!0)},IMe={get:w7(!0,!1)},BMe={get:w7(!0,!0)},gee=new WeakMap,yee=new WeakMap,bee=new WeakMap,Aee=new WeakMap;Qn=function(e){return P0(e)?e:_7(e,!1,EMe,FMe,gee)};function x7(e){return _7(e,!1,SMe,RMe,yee)}xd=function(e){return _7(e,!0,CMe,IMe,bee)};function _7(e,t,n,r,o){if(!wn(e)||e.__v_raw&&(!t||!e.__v_isReactive))return e;const i=o.get(e);if(i)return i;const a=(l=e).__v_skip||!Object.isExtensible(l)?0:function(u){switch(u){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}(Kb(l));var l;if(a===0)return e;const s=new Proxy(e,a===2?r:n);return o.set(e,s),s}function Od(e){return P0(e)?Od(e.__v_raw):!(!e||!e.__v_isReactive)}function P0(e){return!(!e||!e.__v_isReadonly)}function t3(e){return!(!e||!e.__v_isShallow)}function UT(e){return Od(e)||P0(e)}Zn=function(e){const t=e&&e.__v_raw;return t?Zn(t):e};function Fo(e){return Object.isExtensible(e)&&Qb(e,"__v_skip",!0),e}const n3=e=>wn(e)?Qn(e):e,WT=e=>wn(e)?xd(e):e;class wee{constructor(t,n,r,o){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Fm(()=>t(this._value),()=>Rm(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=r}get value(){const t=Zn(this);return t._cacheable&&!t.effect.dirty||!Ws(t._value,t._value=t.effect.run())||Rm(t,4),GT(t),t.effect._dirtyLevel>=2&&Rm(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function xee(e,t,n=!1){let r,o;const i=Ut(e);return i?(r=e,o=fr):(r=e.get,o=e.set),new wee(r,o,i||!o,n)}function GT(e){var t;Hf&&F0&&(e=Zn(e),iee(F0,(t=e.dep)!=null?t:e.dep=lee(()=>e.dep=void 0,e instanceof wee?e:void 0)))}function Rm(e,t=4,n){const r=(e=Zn(e)).dep;r&&aee(r,t)}Jn=function(e){return!(!e||e.__v_isRef!==!0)},de=function(e){return _ee(e,!1)},Qo=function(e){return _ee(e,!0)};function _ee(e,t){return Jn(e)?e:new PMe(e,t)}class PMe{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:Zn(t),this._value=n?t:n3(t)}get value(){return GT(this),this._value}set value(t){const n=this.__v_isShallow||t3(t)||P0(t);t=n?t:Zn(t),Ws(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:n3(t),Rm(this,4))}}M=function(e){return Jn(e)?e.value:e};const LMe={get:(e,t,n)=>M(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return Jn(o)&&!Jn(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function qT(e){return Od(e)?e:new Proxy(e,LMe)}class jMe{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>GT(this),()=>Rm(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function KT(e){return new jMe(e)}di=function(e){const t=mt(e)?new Array(e.length):{};for(const n in e)t[n]=Eee(e,n);return t};class VMe{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return function(t,n){var r;return(r=h7.get(t))==null?void 0:r.get(n)}(Zn(this._object),this._key)}}class zMe{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}dr=function(e,t,n){return Jn(e)?e:Ut(e)?new zMe(e):wn(e)&&arguments.length>1?Eee(e,t,n):de(e)};function Eee(e,t,n){const r=e[t];return Jn(r)?r:new VMe(e,t,n)}const HMe={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",0:"setup function",1:"render function",2:"watcher getter",3:"watcher callback",4:"watcher cleanup function",5:"native event handler",6:"component event handler",7:"vnode hook",8:"directive hook",9:"transition hook",10:"app errorHandler",11:"app warnHandler",12:"ref function",13:"async component loader",14:"scheduler flush. This is likely a Vue internals bug. Please open an issue at https://github.com/vuejs/core ."};function Td(e,t,n,r){try{return r?e(...r):e()}catch(o){L0(o,t,n)}}function ls(e,t,n,r){if(Ut(e)){const i=Td(e,t,n,r);return i&&D0(i)&&i.catch(a=>{L0(a,t,n)}),i}const o=[];for(let i=0;i<e.length;i++)o.push(ls(e[i],t,n,r));return o}function L0(e,t,n,r=!0){if(t&&t.vnode,t){let o=t.parent;const i=t.proxy,a=`https://vuejs.org/error-reference/#runtime-${n}`;for(;o;){const s=o.ec;if(s){for(let u=0;u<s.length;u++)if(s[u](e,i,a)===!1)return}o=o.parent}const l=t.appContext.config.errorHandler;if(l)return void Td(l,null,10,[e,i,a])}(function(o){console.error(o)})(e,0,0,r)}let r3=!1,YT=!1;const Da=[];let Cc=0;const Im=[];let Uf=null,j0=0;const Cee=Promise.resolve();let XT=null;St=function(e){const t=XT||Cee;return e?t.then(this?e.bind(this):e):t};function E7(e){Da.length&&Da.includes(e,r3&&e.allowRecurse?Cc+1:Cc)||(e.id==null?Da.push(e):Da.splice(function(t){let n=Cc+1,r=Da.length;for(;n<r;){const o=n+r>>>1,i=Da[o],a=o3(i);a<t||a===t&&i.pre?n=o+1:r=o}return n}(e.id),0,e),See())}function See(){r3||YT||(YT=!0,XT=Cee.then(Dee))}function C7(e){mt(e)?Im.push(...e):Uf&&Uf.includes(e,e.allowRecurse?j0+1:j0)||Im.push(e),See()}function kee(e,t,n=r3?Cc+1:0){for(;n<Da.length;n++){const r=Da[n];if(r&&r.pre){if(e&&r.id!==e.uid)continue;Da.splice(n,1),n--,r()}}}function S7(e){if(Im.length){const t=[...new Set(Im)].sort((n,r)=>o3(n)-o3(r));if(Im.length=0,Uf)return void Uf.push(...t);for(Uf=t,j0=0;j0<Uf.length;j0++)Uf[j0]();Uf=null,j0=0}}const o3=e=>e.id==null?1/0:e.id,$Me=(e,t)=>{const n=o3(e)-o3(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Dee(e){YT=!1,r3=!0,Da.sort($Me);try{for(Cc=0;Cc<Da.length;Cc++){const t=Da[Cc];t&&t.active!==!1&&Td(t,null,14)}}finally{Cc=0,Da.length=0,S7(),r3=!1,XT=null,(Da.length||Im.length)&&Dee()}}let Bm,k7=[];function UMe(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||Hr;let o=n;const i=t.startsWith("update:"),a=i&&t.slice(7);if(a&&a in r){const c=`${a==="modelValue"?"model":a}Modifiers`,{number:d,trim:f}=r[c]||Hr;f&&(o=n.map(p=>an(p)?p.trim():p)),d&&(o=n.map(Nm))}let l,s=r[l=Mm(t)]||r[l=Mm(qi(t))];!s&&i&&(s=r[l=Mm(Za(t))]),s&&ls(s,e,6,o);const u=r[l+"Once"];if(u){if(e.emitted){if(e.emitted[l])return}else e.emitted={};e.emitted[l]=!0,ls(u,e,6,o)}}function Oee(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(o!==void 0)return o;const i=e.emits;let a={},l=!1;if(!Ut(e)){const s=u=>{const c=Oee(u,t,!0);c&&(l=!0,vo(a,c))};!n&&t.mixins.length&&t.mixins.forEach(s),e.extends&&s(e.extends),e.mixins&&e.mixins.forEach(s)}return i||l?(mt(i)?i.forEach(s=>a[s]=null):vo(a,i),wn(e)&&r.set(e,a),a):(wn(e)&&r.set(e,null),null)}function D7(e,t){return!(!e||!Tm(t))&&(t=t.slice(2).replace(/Once$/,""),Tn(e,t[0].toLowerCase()+t.slice(1))||Tn(e,Za(t))||Tn(e,t))}let pi=null,O7=null;function i3(e){const t=pi;return pi=e,O7=e&&e.type.__scopeId||null,t}xw=function(e){O7=e},_w=function(){O7=null},he=function(e,t=pi,n){if(!t||e._n)return e;const r=(...o)=>{r._d&&_M(-1);const i=i3(t);let a;try{a=e(...o)}finally{i3(i),r._d&&_M(1)}return a};return r._n=!0,r._c=!0,r._d=!0,r};function T7(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:i,propsOptions:[a],slots:l,attrs:s,emit:u,render:c,renderCache:d,data:f,setupState:p,ctx:m,inheritAttrs:v}=e;let g,b;const y=i3(e);try{if(4&n.shapeFlag){const x=o||r,_=x;g=ss(c.call(_,x,d,i,p,f,m)),b=s}else{const x=t;g=ss(x.length>1?x(i,{attrs:s,slots:l,emit:u}):x(i,null)),b=t.props?s:WMe(s)}}catch(x){zm.length=0,L0(x,e,1),g=ie(hi)}let w=g;if(b&&v!==!1){const x=Object.keys(b),{shapeFlag:_}=w;x.length&&7&_&&(a&&x.some(s7)&&(b=GMe(b,a)),w=Tu(w,b))}return n.dirs&&(w=Tu(w),w.dirs=w.dirs?w.dirs.concat(n.dirs):n.dirs),n.transition&&(w.transition=n.transition),g=w,i3(y),g}const WMe=e=>{let t;for(const n in e)(n==="class"||n==="style"||Tm(n))&&((t||(t={}))[n]=e[n]);return t},GMe=(e,t)=>{const n={};for(const r in e)s7(r)&&r.slice(9)in t||(n[r]=e[r]);return n};function Tee(e,t,n){const r=Object.keys(t);if(r.length!==Object.keys(e).length)return!0;for(let o=0;o<r.length;o++){const i=r[o];if(t[i]!==e[i]&&!D7(n,i))return!0}return!1}function QT({vnode:e,parent:t},n){for(;t;){const r=t.subTree;if(r.suspense&&r.suspense.activeBranch===e&&(r.el=e.el),r!==e)break;(e=t.vnode).el=n,t=t.parent}}const JT="components",qMe="directives";Qe=function(e,t){return ZT(JT,e,!0,t)||e};const Mee=Symbol.for("v-ndc");Hn=function(e){return an(e)?ZT(JT,e,!1)||e:e||Mee},gm=function(e){return ZT(qMe,e)};function ZT(e,t,n=!0,r=!1){const o=pi||Di;if(o){const i=o.type;if(e===JT){const l=OM(i,!1);if(l&&(l===t||l===qi(t)||l===M0(qi(t))))return i}const a=Nee(o[e]||i[e],t)||Nee(o.appContext[e],t);return!a&&r?i:a}}function Nee(e,t){return e&&(e[t]||e[qi(t)]||e[M0(qi(t))])}const Fee=e=>e.__isSuspense;let eM=0;const KMe={name:"Suspense",__isSuspense:!0,process(e,t,n,r,o,i,a,l,s,u){if(e==null)(function(c,d,f,p,m,v,g,b,y){const{p:w,o:{createElement:x}}=y,_=x("div"),E=c.suspense=tM(c,m,p,d,_,f,v,g,b,y);w(null,E.pendingBranch=c.ssContent,_,null,p,E,v,g),E.deps>0?(a3(c,"onPending"),a3(c,"onFallback"),w(null,c.ssFallback,d,f,p,null,v,g),Pm(E,c.ssFallback)):E.resolve(!1,!0)})(t,n,r,o,i,a,l,s,u);else{if(i&&i.deps>0&&!e.suspense.isInFallback)return t.suspense=e.suspense,t.suspense.vnode=t,void(t.el=e.el);(function(c,d,f,p,m,v,g,b,{p:y,um:w,o:{createElement:x}}){const _=d.suspense=c.suspense;_.vnode=d,d.el=c.el;const E=d.ssContent,C=d.ssFallback,{activeBranch:T,pendingBranch:k,isInFallback:I,isHydrating:O}=_;if(k)_.pendingBranch=E,Ou(E,k)?(y(k,E,_.hiddenContainer,null,m,_,v,g,b),_.deps<=0?_.resolve():I&&(O||(y(T,C,f,p,m,null,v,g,b),Pm(_,C)))):(_.pendingId=eM++,O?(_.isHydrating=!1,_.activeBranch=k):w(k,m,_),_.deps=0,_.effects.length=0,_.hiddenContainer=x("div"),I?(y(null,E,_.hiddenContainer,null,m,_,v,g,b),_.deps<=0?_.resolve():(y(T,C,f,p,m,null,v,g,b),Pm(_,C))):T&&Ou(E,T)?(y(T,E,f,p,m,_,v,g,b),_.resolve(!0)):(y(null,E,_.hiddenContainer,null,m,_,v,g,b),_.deps<=0&&_.resolve()));else if(T&&Ou(E,T))y(T,E,f,p,m,_,v,g,b),Pm(_,E);else if(a3(d,"onPending"),_.pendingBranch=E,512&E.shapeFlag?_.pendingId=E.component.suspenseId:_.pendingId=eM++,y(null,E,_.hiddenContainer,null,m,_,v,g,b),_.deps<=0)_.resolve();else{const{timeout:F,pendingId:N}=_;F>0?setTimeout(()=>{_.pendingId===N&&_.fallback(C)},F):F===0&&_.fallback(C)}})(e,t,n,r,o,a,l,s,u)}},hydrate:function(e,t,n,r,o,i,a,l,s){const u=t.suspense=tM(t,r,n,e.parentNode,document.createElement("div"),null,o,i,a,l,!0),c=s(e,u.pendingBranch=t.ssContent,n,u,i,a);return u.deps===0&&u.resolve(!1,!0),c},create:tM,normalize:function(e){const{shapeFlag:t,children:n}=e,r=32&t;e.ssContent=Ree(r?n.default:n),e.ssFallback=r?Ree(n.fallback):ie(hi)}},YMe=KMe;function a3(e,t){const n=e.props&&e.props[t];Ut(n)&&n()}function tM(e,t,n,r,o,i,a,l,s,u,c=!1){const{p:d,m:f,um:p,n:m,o:{parentNode:v,remove:g}}=u;let b;const y=function(E){var C;return((C=E.props)==null?void 0:C.suspensible)!=null&&E.props.suspensible!==!1}(e);y&&(t!=null&&t.pendingBranch)&&(b=t.pendingId,t.deps++);const w=e.props?Jb(e.props.timeout):void 0,x=i,_={vnode:e,parent:t,parentComponent:n,namespace:a,container:r,hiddenContainer:o,deps:0,pendingId:eM++,timeout:typeof w=="number"?w:-1,activeBranch:null,pendingBranch:null,isInFallback:!c,isHydrating:c,isUnmounted:!1,effects:[],resolve(E=!1,C=!1){const{vnode:T,activeBranch:k,pendingBranch:I,pendingId:O,effects:F,parentComponent:N,container:B}=_;let P=!1;_.isHydrating?_.isHydrating=!1:E||(P=k&&I.transition&&I.transition.mode==="out-in",P&&(k.transition.afterLeave=()=>{O===_.pendingId&&(f(I,B,i===x?m(k):i,0),C7(F))}),k&&(v(k.el)!==_.hiddenContainer&&(i=m(k)),p(k,N,_,!0)),P||f(I,B,i,0)),Pm(_,I),_.pendingBranch=null,_.isInFallback=!1;let V=_.parent,L=!1;for(;V;){if(V.pendingBranch){V.effects.push(...F),L=!0;break}V=V.parent}L||P||C7(F),_.effects=[],y&&t&&t.pendingBranch&&b===t.pendingId&&(t.deps--,t.deps!==0||C||t.resolve()),a3(T,"onResolve")},fallback(E){if(!_.pendingBranch)return;const{vnode:C,activeBranch:T,parentComponent:k,container:I,namespace:O}=_;a3(C,"onFallback");const F=m(T),N=()=>{_.isInFallback&&(d(null,E,I,F,k,null,O,l,s),Pm(_,E))},B=E.transition&&E.transition.mode==="out-in";B&&(T.transition.afterLeave=N),_.isInFallback=!0,p(T,k,null,!0),B||N()},move(E,C,T){_.activeBranch&&f(_.activeBranch,E,C,T),_.container=E},next:()=>_.activeBranch&&m(_.activeBranch),registerDep(E,C){const T=!!_.pendingBranch;T&&_.deps++;const k=E.vnode.el;E.asyncDep.catch(I=>{L0(I,E,0)}).then(I=>{if(E.isUnmounted||_.isUnmounted||_.pendingId!==E.suspenseId)return;E.asyncResolved=!0;const{vnode:O}=E;DM(E,I,!1),k&&(O.el=k);const F=!k&&E.subTree.el;C(E,O,v(k||E.subTree.el),k?null:m(E.subTree),_,a,s),F&&g(F),QT(E,O.el),T&&--_.deps==0&&_.resolve()})},unmount(E,C){_.isUnmounted=!0,_.activeBranch&&p(_.activeBranch,n,E,C),_.pendingBranch&&p(_.pendingBranch,n,E,C)}};return _}function Ree(e){let t;if(Ut(e)){const n=U0&&e._c;n&&(e._d=!1,Y()),e=e(),n&&(e._d=!0,t=Sl,Ate())}return mt(e)&&(e=function(r){let o;for(let i=0;i<r.length;i++){const a=r[i];if(!oo(a))return;if(a.type!==hi||a.children==="v-if"){if(o)return;o=a}}return o}(e)),e=ss(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function Iee(e,t){t&&t.pendingBranch?mt(e)?t.effects.push(...e):t.effects.push(e):C7(e)}function Pm(e,t){e.activeBranch=t;const{vnode:n,parentComponent:r}=e;let o=t.el;for(;!o&&t.component;)o=(t=t.component.subTree).el;n.el=o,r&&r.subTree===n&&(r.vnode.el=o,QT(r,o))}const Bee=Symbol.for("v-scx"),Pee=()=>Rt(Bee);yl=function(e,t){return l3(e,null,t)};function Lee(e,t){return l3(e,null,{flush:"post"})}function jee(e,t){return l3(e,null,{flush:"sync"})}const M7={};Je=function(e,t,n){return l3(e,t,n)};function l3(e,t,{immediate:n,deep:r,flush:o,once:i,onTrack:a,onTrigger:l}=Hr){if(t&&i){const E=t;t=(...C)=>{E(...C),_()}}const s=Di,u=E=>r===!0?E:V0(E,r===!1?1:void 0);let c,d,f=!1,p=!1;if(Jn(e)?(c=()=>e.value,f=t3(e)):Od(e)?(c=()=>u(e),f=!0):mt(e)?(p=!0,f=e.some(E=>Od(E)||t3(E)),c=()=>e.map(E=>Jn(E)?E.value:Od(E)?u(E):Ut(E)?Td(E,s,2):void 0)):c=Ut(e)?t?()=>Td(e,s,2):()=>(d&&d(),ls(e,s,3,[v])):fr,t&&r){const E=c;c=()=>V0(E())}let m,v=E=>{d=w.onStop=()=>{Td(E,s,4),d=w.onStop=void 0}};if(h3){if(v=fr,t?n&&ls(t,s,3,[c(),p?[]:void 0,v]):c(),o!=="sync")return fr;{const E=Pee();m=E.__watcherHandles||(E.__watcherHandles=[])}}let g=p?new Array(e.length).fill(M7):M7;const b=()=>{if(w.active&&w.dirty)if(t){const E=w.run();(r||f||(p?E.some((C,T)=>Ws(C,g[T])):Ws(E,g)))&&(d&&d(),ls(t,s,3,[E,g===M7?void 0:p&&g[0]===M7?[]:g,v]),g=E)}else w.run()};let y;b.allowRecurse=!!t,o==="sync"?y=b:o==="post"?y=()=>ha(b,s&&s.suspense):(b.pre=!0,s&&(b.id=s.uid),y=()=>E7(b));const w=new Fm(c,fr,y),x=Zb(),_=()=>{w.stop(),x&&u7(x.effects,w)};return t?n?b():g=w.run():o==="post"?ha(w.run.bind(w),s&&s.suspense):w.run(),m&&m.push(_),_}function XMe(e,t,n){const r=this.proxy,o=an(e)?e.includes(".")?Vee(r,e):()=>r[e]:e.bind(r,r);let i;Ut(t)?i=t:(i=t.handler,n=t);const a=W0(this),l=l3(o,i.bind(r),n);return a(),l}function Vee(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;o<n.length&&r;o++)r=r[n[o]];return r}}function V0(e,t,n=0,r){if(!wn(e)||e.__v_skip)return e;if(t&&t>0){if(n>=t)return e;n++}if((r=r||new Set).has(e))return e;if(r.add(e),Jn(e))V0(e.value,t,n,r);else if(mt(e))for(let o=0;o<e.length;o++)V0(e[o],t,n,r);else if(Vf(e)||k0(e))e.forEach(o=>{V0(o,t,n,r)});else if(Yb(e))for(const o in e)V0(e[o],t,n,r);return e}nn=function(e,t){if(pi===null)return e;const n=U7(pi)||pi.proxy,r=e.dirs||(e.dirs=[]);for(let o=0;o<t.length;o++){let[i,a,l,s=Hr]=t[o];i&&(Ut(i)&&(i={mounted:i,updated:i}),i.deep&&V0(a),r.push({dir:i,instance:n,value:a,oldValue:void 0,arg:l,modifiers:s}))}return e};function Sc(e,t,n,r){const o=e.dirs,i=t&&t.dirs;for(let a=0;a<o.length;a++){const l=o[a];i&&(l.oldValue=i[a].value);let s=l.dir[r];s&&(R0(),ls(s,n,8,[e.el,l,e,t]),I0())}}const Wf=Symbol("_leaveCb"),N7=Symbol("_enterCb");function nM(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return yn(()=>{e.isMounted=!0}),xo(()=>{e.isUnmounting=!0}),e}const Gs=[Function,Array],rM={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Gs,onEnter:Gs,onAfterEnter:Gs,onEnterCancelled:Gs,onBeforeLeave:Gs,onLeave:Gs,onAfterLeave:Gs,onLeaveCancelled:Gs,onBeforeAppear:Gs,onAppear:Gs,onAfterAppear:Gs,onAppearCancelled:Gs},QMe={name:"BaseTransition",props:rM,setup(e,{slots:t}){const n=dn(),r=nM();return()=>{const o=t.default&&F7(t.default(),!0);if(!o||!o.length)return;let i=o[0];if(o.length>1){for(const f of o)if(f.type!==hi){i=f;break}}const a=Zn(e),{mode:l}=a;if(r.isLeaving)return oM(i);const s=$ee(i);if(!s)return oM(i);const u=Lm(s,a,r,n);z0(s,u);const c=n.subTree,d=c&&$ee(c);if(d&&d.type!==hi&&!Ou(s,d)){const f=Lm(d,a,r,n);if(z0(d,f),l==="out-in")return r.isLeaving=!0,f.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},oM(i);l==="in-out"&&s.type!==hi&&(f.delayLeave=(p,m,v)=>{Hee(r,d)[String(d.key)]=d,p[Wf]=()=>{m(),p[Wf]=void 0,delete u.delayedLeave},u.delayedLeave=v})}return i}}},zee=QMe;function Hee(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function Lm(e,t,n,r){const{appear:o,mode:i,persisted:a=!1,onBeforeEnter:l,onEnter:s,onAfterEnter:u,onEnterCancelled:c,onBeforeLeave:d,onLeave:f,onAfterLeave:p,onLeaveCancelled:m,onBeforeAppear:v,onAppear:g,onAfterAppear:b,onAppearCancelled:y}=t,w=String(e.key),x=Hee(n,e),_=(T,k)=>{T&&ls(T,r,9,k)},E=(T,k)=>{const I=k[1];_(T,k),mt(T)?T.every(O=>O.length<=1)&&I():T.length<=1&&I()},C={mode:i,persisted:a,beforeEnter(T){let k=l;if(!n.isMounted){if(!o)return;k=v||l}T[Wf]&&T[Wf](!0);const I=x[w];I&&Ou(e,I)&&I.el[Wf]&&I.el[Wf](),_(k,[T])},enter(T){let k=s,I=u,O=c;if(!n.isMounted){if(!o)return;k=g||s,I=b||u,O=y||c}let F=!1;const N=T[N7]=B=>{F||(F=!0,_(B?O:I,[T]),C.delayedLeave&&C.delayedLeave(),T[N7]=void 0)};k?E(k,[T,N]):N()},leave(T,k){const I=String(e.key);if(T[N7]&&T[N7](!0),n.isUnmounting)return k();_(d,[T]);let O=!1;const F=T[Wf]=N=>{O||(O=!0,k(),_(N?m:p,[T]),T[Wf]=void 0,x[I]===e&&delete x[I])};x[I]=e,f?E(f,[T,F]):F()},clone:T=>Lm(T,t,n,r)};return C}function oM(e){if(jm(e))return(e=Tu(e)).children=null,e}function $ee(e){return jm(e)?e.children?e.children[0]:void 0:e}function z0(e,t){6&e.shapeFlag&&e.component?z0(e.component.subTree,t):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function F7(e,t=!1,n){let r=[],o=0;for(let i=0;i<e.length;i++){let a=e[i];const l=n==null?a.key:String(n)+String(a.key!=null?a.key:i);a.type===bt?(128&a.patchFlag&&o++,r=r.concat(F7(a.children,t,l))):(t||a.type!==hi)&&r.push(l!=null?Tu(a,{key:l}):a)}if(o>1)for(let i=0;i<r.length;i++)r[i].patchFlag=-2;return r}Te=function(e,t){return Ut(e)?vo({name:e.name},t,{setup:e}):e};const H0=e=>!!e.type.__asyncLoader;function Uee(e){Ut(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,timeout:i,suspensible:a=!0,onError:l}=e;let s,u=null,c=0;const d=()=>{let f;return u||(f=u=t().catch(p=>{if(p=p instanceof Error?p:new Error(String(p)),l)return new Promise((m,v)=>{l(p,()=>m((c++,u=null,d())),()=>v(p),c+1)});throw p}).then(p=>f!==u&&u?u:(p&&(p.__esModule||p[Symbol.toStringTag]==="Module")&&(p=p.default),s=p,p)))};return Te({name:"AsyncComponentWrapper",__asyncLoader:d,get __asyncResolved(){return s},setup(){const f=Di;if(s)return()=>iM(s,f);const p=b=>{u=null,L0(b,f,13,!r)};if(a&&f.suspense||h3)return d().then(b=>()=>iM(b,f)).catch(b=>(p(b),()=>r?ie(r,{error:b}):null));const m=de(!1),v=de(),g=de(!!o);return o&&setTimeout(()=>{g.value=!1},o),i!=null&&setTimeout(()=>{if(!m.value&&!v.value){const b=new Error(`Async component timed out after ${i}ms.`);p(b),v.value=b}},i),d().then(()=>{m.value=!0,f.parent&&jm(f.parent.vnode)&&(f.parent.effect.dirty=!0,E7(f.parent.update))}).catch(b=>{p(b),v.value=b}),()=>m.value&&s?iM(s,f):v.value&&r?ie(r,{error:v.value}):n&&!g.value?ie(n):void 0}})}function iM(e,t){const{ref:n,props:r,children:o,ce:i}=t.vnode,a=ie(e,r,o);return a.ref=n,a.ce=i,delete t.vnode.ce,a}let jm,Wee;jm=e=>e.type.__isKeepAlive,Wee={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=dn(),r=n.ctx;if(!r.renderer)return()=>{const y=t.default&&t.default();return y&&y.length===1?y[0]:y};const o=new Map,i=new Set;let a=null;const l=n.suspense,{renderer:{p:s,m:u,um:c,o:{createElement:d}}}=r,f=d("div");function p(y){lM(y),c(y,n,l,!0)}function m(y){o.forEach((w,x)=>{const _=OM(w.type);!_||y&&y(_)||v(x)})}function v(y){const w=o.get(y);a&&Ou(w,a)?a&&lM(a):p(w),o.delete(y),i.delete(y)}r.activate=(y,w,x,_,E)=>{const C=y.component;u(y,w,x,0,l),s(C.vnode,y,w,x,C,l,_,y.slotScopeIds,E),ha(()=>{C.isDeactivated=!1,C.a&&N0(C.a);const T=y.props&&y.props.onVnodeMounted;T&&kl(T,C.parent,y)},l)},r.deactivate=y=>{const w=y.component;u(y,f,null,1,l),ha(()=>{w.da&&N0(w.da);const x=y.props&&y.props.onVnodeUnmounted;x&&kl(x,w.parent,y),w.isDeactivated=!0},l)},Je(()=>[e.include,e.exclude],([y,w])=>{y&&m(x=>s3(y,x)),w&&m(x=>!s3(w,x))},{flush:"post",deep:!0});let g=null;const b=()=>{g!=null&&o.set(g,sM(n.subTree))};return yn(b),zs(b),xo(()=>{o.forEach(y=>{const{subTree:w,suspense:x}=n,_=sM(w);if(y.type!==_.type||y.key!==_.key)p(y);else{lM(_);const E=_.component.da;E&&ha(E,x)}})}),()=>{if(g=null,!t.default)return null;const y=t.default(),w=y[0];if(y.length>1)return a=null,y;if(!(oo(w)&&(4&w.shapeFlag||128&w.shapeFlag)))return a=null,w;let x=sM(w);const _=x.type,E=OM(H0(x)?x.type.__asyncResolved||{}:_),{include:C,exclude:T,max:k}=e;if(C&&(!E||!s3(C,E))||T&&E&&s3(T,E))return a=x,w;const I=x.key==null?_:x.key,O=o.get(I);return x.el&&(x=Tu(x),128&w.shapeFlag&&(w.ssContent=x)),g=I,O?(x.el=O.el,x.component=O.component,x.transition&&z0(x,x.transition),x.shapeFlag|=512,i.delete(I),i.add(I)):(i.add(I),k&&i.size>parseInt(k,10)&&v(i.values().next().value)),x.shapeFlag|=256,a=x,Fee(w.type)?w:x}}},oJ=Wee;function s3(e,t){return mt(e)?e.some(n=>s3(n,t)):an(e)?e.split(",").includes(t):O0(e)==="[object RegExp]"&&e.test(t)}KO=function(e,t){Gee(e,"a",t)};function aM(e,t){Gee(e,"da",t)}function Gee(e,t,n=Di){const r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(R7(t,r,n),n){let o=n.parent;for(;o&&o.parent;)jm(o.parent.vnode)&&JMe(r,t,n,o),o=o.parent}}function JMe(e,t,n,r){const o=R7(t,e,r,!0);Vs(()=>{u7(r[t],o)},n)}function lM(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function sM(e){return 128&e.shapeFlag?e.ssContent:e}function R7(e,t,n=Di,r=!1){if(n){const o=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...a)=>{if(n.isUnmounted)return;R0();const l=W0(n),s=ls(t,n,e,a);return l(),I0(),s});return r?o.unshift(i):o.push(i),i}}let kc,u3,uM,cM,dM;kc=e=>(t,n=Di)=>(!h3||e==="sp")&&R7(e,(...r)=>t(...r),n),g0=kc("bm"),yn=kc("m"),u3=kc("bu"),zs=kc("u"),xo=kc("bum"),Vs=kc("um"),uM=kc("sp"),cM=kc("rtg"),dM=kc("rtc");function qee(e,t=Di){R7("ec",e,t)}bn=function(e,t,n,r){let o;const i=n&&n[r];if(mt(e)||an(e)){o=new Array(e.length);for(let a=0,l=e.length;a<l;a++)o[a]=t(e[a],a,void 0,i&&i[a])}else if(typeof e=="number"){o=new Array(e);for(let a=0;a<e;a++)o[a]=t(a+1,a,void 0,i&&i[a])}else if(wn(e))if(e[Symbol.iterator])o=Array.from(e,(a,l)=>t(a,l,void 0,i&&i[l]));else{const a=Object.keys(e);o=new Array(a.length);for(let l=0,s=a.length;l<s;l++){const u=a[l];o[l]=t(e[u],u,l,i&&i[l])}}else o=[];return n&&(n[r]=o),o},Ff=function(e,t){for(let n=0;n<t.length;n++){const r=t[n];if(mt(r))for(let o=0;o<r.length;o++)e[r[o].name]=r[o].fn;else r&&(e[r.name]=r.key?(...o)=>{const i=r.fn(...o);return i&&(i.key=r.key),i}:r.fn)}return e},ft=function(e,t,n={},r,o){if(pi.isCE||pi.parent&&H0(pi.parent)&&pi.parent.isCE)return t!=="default"&&(n.name=t),ie("slot",n,r&&r());let i=e[t];i&&i._c&&(i._d=!1),Y();const a=i&&Kee(i(n)),l=Le(bt,{key:n.key||a&&a.key||`_${t}`},a||(r?r():[]),a&&e._===1?64:-2);return!o&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),i&&i._c&&(i._d=!0),l};function Kee(e){return e.some(t=>!oo(t)||t.type!==hi&&!(t.type===bt&&!Kee(t.children)))?e:null}function Yee(e,t){const n={};for(const r in e)n[t&&/[A-Z]/.test(r)?`on:${r}`:Mm(r)]=e[r];return n}const fM=e=>e?Ete(e)?U7(e)||e.proxy:fM(e.parent):null,c3=vo(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>fM(e.parent),$root:e=>fM(e.root),$emit:e=>e.emit,$options:e=>mM(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,E7(e.update)}),$nextTick:e=>e.n||(e.n=St.bind(e.proxy)),$watch:e=>XMe.bind(e)}),pM=(e,t)=>e!==Hr&&!e.__isScriptSetup&&Tn(e,t),hM={get({_:e},t){const{ctx:n,setupState:r,data:o,props:i,accessCache:a,type:l,appContext:s}=e;let u;if(t[0]!=="$"){const p=a[t];if(p!==void 0)switch(p){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return i[t]}else{if(pM(r,t))return a[t]=1,r[t];if(o!==Hr&&Tn(o,t))return a[t]=2,o[t];if((u=e.propsOptions[0])&&Tn(u,t))return a[t]=3,i[t];if(n!==Hr&&Tn(n,t))return a[t]=4,n[t];vM&&(a[t]=0)}}const c=c3[t];let d,f;return c?(t==="$attrs"&&Cl(e,0,t),c(e)):(d=l.__cssModules)&&(d=d[t])?d:n!==Hr&&Tn(n,t)?(a[t]=4,n[t]):(f=s.config.globalProperties,Tn(f,t)?f[t]:void 0)},set({_:e},t,n){const{data:r,setupState:o,ctx:i}=e;return pM(o,t)?(o[t]=n,!0):r!==Hr&&Tn(r,t)?(r[t]=n,!0):!Tn(e.props,t)&&(t[0]!=="$"||!(t.slice(1)in e))&&(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:i}},a){let l;return!!n[a]||e!==Hr&&Tn(e,a)||pM(t,a)||(l=i[0])&&Tn(l,a)||Tn(r,a)||Tn(c3,a)||Tn(o.config.globalProperties,a)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Tn(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}},ZMe=vo({},hM,{get(e,t){if(t!==Symbol.unscopables)return hM.get(e,t,e)},has:(e,t)=>t[0]!=="_"&&!vMe(t)});Ga=function(){return Xee().slots},yc=function(){return Xee().attrs};function Xee(){const e=dn();return e.setupContext||(e.setupContext=kte(e))}function d3(e){return mt(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let vM=!0;function eNe(e){const t=mM(e),n=e.proxy,r=e.ctx;vM=!1,t.beforeCreate&&Qee(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:a,watch:l,provide:s,inject:u,created:c,beforeMount:d,mounted:f,beforeUpdate:p,updated:m,activated:v,deactivated:g,beforeDestroy:b,beforeUnmount:y,destroyed:w,unmounted:x,render:_,renderTracked:E,renderTriggered:C,errorCaptured:T,serverPrefetch:k,expose:I,inheritAttrs:O,components:F,directives:N,filters:B}=t;if(u&&function(V,L){mt(V)&&(V=gM(V));for(const H in V){const U=V[H];let G;G=wn(U)?"default"in U?Rt(U.from||H,U.default,!0):Rt(U.from||H):Rt(U),Jn(G)?Object.defineProperty(L,H,{enumerable:!0,configurable:!0,get:()=>G.value,set:z=>G.value=z}):L[H]=G}}(u,r,null),a)for(const V in a){const L=a[V];Ut(L)&&(r[V]=L.bind(n))}if(o){const V=o.call(n,n);wn(V)&&(e.data=Qn(V))}if(vM=!0,i)for(const V in i){const L=i[V],H=Ut(L)?L.bind(n,n):Ut(L.get)?L.get.bind(n,n):fr,U=!Ut(L)&&Ut(L.set)?L.set.bind(n):fr,G=ee({get:H,set:U});Object.defineProperty(r,V,{enumerable:!0,configurable:!0,get:()=>G.value,set:z=>G.value=z})}if(l)for(const V in l)Jee(l[V],r,n,V);if(s){const V=Ut(s)?s.call(n):s;Reflect.ownKeys(V).forEach(L=>{qn(L,V[L])})}function P(V,L){mt(L)?L.forEach(H=>V(H.bind(n))):L&&V(L.bind(n))}if(c&&Qee(c,e,"c"),P(g0,d),P(yn,f),P(u3,p),P(zs,m),P(KO,v),P(aM,g),P(qee,T),P(dM,E),P(cM,C),P(xo,y),P(Vs,x),P(uM,k),mt(I))if(I.length){const V=e.exposed||(e.exposed={});I.forEach(L=>{Object.defineProperty(V,L,{get:()=>n[L],set:H=>n[L]=H})})}else e.exposed||(e.exposed={});_&&e.render===fr&&(e.render=_),O!=null&&(e.inheritAttrs=O),F&&(e.components=F),N&&(e.directives=N)}function Qee(e,t,n){ls(mt(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Jee(e,t,n,r){const o=r.includes(".")?Vee(n,r):()=>n[r];if(an(e)){const i=t[e];Ut(i)&&Je(o,i)}else if(Ut(e))Je(o,e.bind(n));else if(wn(e))if(mt(e))e.forEach(i=>Jee(i,t,n,r));else{const i=Ut(e.handler)?e.handler.bind(n):t[e.handler];Ut(i)&&Je(o,i,e)}}function mM(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:i,config:{optionMergeStrategies:a}}=e.appContext,l=i.get(t);let s;return l?s=l:o.length||n||r?(s={},o.length&&o.forEach(u=>I7(s,u,a,!0)),I7(s,t,a)):s=t,wn(t)&&i.set(t,s),s}function I7(e,t,n,r=!1){const{mixins:o,extends:i}=t;i&&I7(e,i,n,!0),o&&o.forEach(a=>I7(e,a,n,!0));for(const a in t)if(!(r&&a==="expose")){const l=tNe[a]||n&&n[a];e[a]=l?l(e[a],t[a]):t[a]}return e}const tNe={data:Zee,props:ete,emits:ete,methods:f3,computed:f3,beforeCreate:el,created:el,beforeMount:el,mounted:el,beforeUpdate:el,updated:el,beforeDestroy:el,beforeUnmount:el,destroyed:el,unmounted:el,activated:el,deactivated:el,errorCaptured:el,serverPrefetch:el,components:f3,directives:f3,watch:function(e,t){if(!e)return t;if(!t)return e;const n=vo(Object.create(null),e);for(const r in t)n[r]=el(e[r],t[r]);return n},provide:Zee,inject:function(e,t){return f3(gM(e),gM(t))}};function Zee(e,t){return t?e?function(){return vo(Ut(e)?e.call(this,this):e,Ut(t)?t.call(this,this):t)}:t:e}function gM(e){if(mt(e)){const t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n];return t}return e}function el(e,t){return e?[...new Set([].concat(e,t))]:t}function f3(e,t){return e?vo(Object.create(null),e,t):t}function ete(e,t){return e?mt(e)&&mt(t)?[...new Set([...e,...t])]:vo(Object.create(null),d3(e),d3(t??{})):t}function tte(){return{app:null,config:{isNativeTag:qZ,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let nNe=0;function rNe(e,t){return function(n,r=null){Ut(n)||(n=vo({},n)),r==null||wn(r)||(r=null);const o=tte(),i=new WeakSet;let a=!1;const l=o.app={_uid:nNe++,_component:n,_props:r,_container:null,_context:o,_instance:null,version:TM,get config(){return o.config},set config(s){},use:(s,...u)=>(i.has(s)||(s&&Ut(s.install)?(i.add(s),s.install(l,...u)):Ut(s)&&(i.add(s),s(l,...u))),l),mixin:s=>(o.mixins.includes(s)||o.mixins.push(s),l),component:(s,u)=>u?(o.components[s]=u,l):o.components[s],directive:(s,u)=>u?(o.directives[s]=u,l):o.directives[s],mount(s,u,c){if(!a){const d=ie(n,r);return d.appContext=o,c===!0?c="svg":c===!1&&(c=void 0),u&&t?t(d,s):e(d,s,c),a=!0,l._container=s,s.__vue_app__=l,U7(d.component)||d.component.proxy}},unmount(){a&&(e(null,l._container),delete l._container.__vue_app__)},provide:(s,u)=>(o.provides[s]=u,l),runWithContext(s){const u=Vm;Vm=l;try{return s()}finally{Vm=u}}};return l}}let Vm=null;qn=function(e,t){if(Di){let n=Di.provides;const r=Di.parent&&Di.parent.provides;r===n&&(n=Di.provides=Object.create(r)),n[e]=t}},Rt=function(e,t,n=!1){const r=Di||pi;if(r||Vm){const o=r?r.parent==null?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides:Vm._context.provides;if(o&&e in o)return o[e];if(arguments.length>1)return n&&Ut(t)?t.call(r&&r.proxy):t}};function nte(){return!!(Di||pi||Vm)}function rte(e,t,n,r){const[o,i]=e.propsOptions;let a,l=!1;if(t)for(let s in t){if(T0(s))continue;const u=t[s];let c;o&&Tn(o,c=qi(s))?i&&i.includes(c)?(a||(a={}))[c]=u:n[c]=u:D7(e.emitsOptions,s)||s in r&&u===r[s]||(r[s]=u,l=!0)}if(i){const s=Zn(n),u=a||Hr;for(let c=0;c<i.length;c++){const d=i[c];n[d]=yM(o,s,d,u[d],e,!Tn(u,d))}}return l}function yM(e,t,n,r,o,i){const a=e[n];if(a!=null){const l=Tn(a,"default");if(l&&r===void 0){const s=a.default;if(a.type!==Function&&!a.skipFactory&&Ut(s)){const{propsDefaults:u}=o;if(n in u)r=u[n];else{const c=W0(o);r=u[n]=s.call(null,t),c()}}else r=s}a[0]&&(i&&!l?r=!1:!a[1]||r!==""&&r!==Za(n)||(r=!0))}return r}function ote(e,t,n=!1){const r=t.propsCache,o=r.get(e);if(o)return o;const i=e.props,a={},l=[];let s=!1;if(!Ut(e)){const c=d=>{s=!0;const[f,p]=ote(d,t,!0);vo(a,f),p&&l.push(...p)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!i&&!s)return wn(e)&&r.set(e,S0),S0;if(mt(i))for(let c=0;c<i.length;c++){const d=qi(i[c]);ite(d)&&(a[d]=Hr)}else if(i)for(const c in i){const d=qi(c);if(ite(d)){const f=i[c],p=a[d]=mt(f)||Ut(f)?{type:f}:vo({},f);if(p){const m=ste(Boolean,p.type),v=ste(String,p.type);p[0]=m>-1,p[1]=v<0||m<v,(m>-1||Tn(p,"default"))&&l.push(d)}}}const u=[a,l];return wn(e)&&r.set(e,u),u}function ite(e){return e[0]!=="$"&&!T0(e)}function ate(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function lte(e,t){return ate(e)===ate(t)}function ste(e,t){return mt(t)?t.findIndex(n=>lte(n,e)):Ut(t)&<e(t,e)?0:-1}const ute=e=>e[0]==="_"||e==="$stable",bM=e=>mt(e)?e.map(ss):[ss(e)],oNe=(e,t,n)=>{if(t._n)return t;const r=he((...o)=>bM(t(...o)),n);return r._c=!1,r},cte=(e,t,n)=>{const r=e._ctx;for(const o in e){if(ute(o))continue;const i=e[o];if(Ut(i))t[o]=oNe(0,i,r);else if(i!=null){const a=bM(i);t[o]=()=>a}}},dte=(e,t)=>{const n=bM(t);e.slots.default=()=>n},iNe=(e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=Zn(t),Qb(t,"_",n)):cte(t,e.slots={})}else e.slots={},t&&dte(e,t);Qb(e.slots,V7,1)},aNe=(e,t,n)=>{const{vnode:r,slots:o}=e;let i=!0,a=Hr;if(32&r.shapeFlag){const l=t._;l?n&&l===1?i=!1:(vo(o,t),n||l!==1||delete o._):(i=!t.$stable,cte(t,o)),a=t}else t&&(dte(e,t),a={default:1});if(i)for(const l in o)ute(l)||a[l]!=null||delete o[l]};function B7(e,t,n,r,o=!1){if(mt(e))return void e.forEach((f,p)=>B7(f,t&&(mt(t)?t[p]:t),n,r,o));if(H0(r)&&!o)return;const i=4&r.shapeFlag?U7(r.component)||r.component.proxy:r.el,a=o?null:i,{i:l,r:s}=e,u=t&&t.r,c=l.refs===Hr?l.refs={}:l.refs,d=l.setupState;if(u!=null&&u!==s&&(an(u)?(c[u]=null,Tn(d,u)&&(d[u]=null)):Jn(u)&&(u.value=null)),Ut(s))Td(s,l,12,[a,c]);else{const f=an(s),p=Jn(s);if(f||p){const m=()=>{if(e.f){const v=f?Tn(d,s)?d[s]:c[s]:s.value;o?mt(v)&&u7(v,i):mt(v)?v.includes(i)||v.push(i):f?(c[s]=[i],Tn(d,s)&&(d[s]=c[s])):(s.value=[i],e.k&&(c[e.k]=s.value))}else f?(c[s]=a,Tn(d,s)&&(d[s]=a)):p&&(s.value=a,e.k&&(c[e.k]=a))};a?(m.id=-1,ha(m,n)):m()}}}let Gf=!1;const P7=e=>(t=>t.namespaceURI.includes("svg")&&t.tagName!=="foreignObject")(e)?"svg":(t=>t.namespaceURI.includes("MathML"))(e)?"mathml":void 0,L7=e=>e.nodeType===8;function lNe(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:i,parentNode:a,remove:l,insert:s,createComment:u}}=e,c=(y,w,x,_,E,C=!1)=>{const T=L7(y)&&y.data==="[",k=()=>m(y,w,x,_,E,T),{type:I,ref:O,shapeFlag:F,patchFlag:N}=w;let B=y.nodeType;w.el=y,N===-2&&(C=!1,w.dynamicChildren=null);let P=null;switch(I){case Dc:B!==3?w.children===""?(s(w.el=o(""),a(y),y),P=y):P=k():(y.data!==w.children&&(Gf=!0,y.data=w.children),P=i(y));break;case hi:b(y)?(P=i(y),g(w.el=y.content.firstChild,y,x)):P=B!==8||T?k():i(y);break;case qf:if(T&&(B=(y=i(y)).nodeType),B===1||B===3){P=y;const V=!w.children.length;for(let L=0;L<w.staticCount;L++)V&&(w.children+=P.nodeType===1?P.outerHTML:P.data),L===w.staticCount-1&&(w.anchor=P),P=i(P);return T?i(P):P}k();break;case bt:P=T?p(y,w,x,_,E,C):k();break;default:if(1&F)P=B===1&&w.type.toLowerCase()===y.tagName.toLowerCase()||b(y)?d(y,w,x,_,E,C):k();else if(6&F){w.slotScopeIds=E;const V=a(y);if(P=T?v(y):L7(y)&&y.data==="teleport start"?v(y,y.data,"teleport end"):i(y),t(w,V,null,x,_,P7(V),C),H0(w)){let L;T?(L=ie(bt),L.anchor=P?P.previousSibling:V.lastChild):L=y.nodeType===3?Dt(""):ie("div"),L.el=y,w.component.subTree=L}}else 64&F?P=B!==8?k():w.type.hydrate(y,w,x,_,E,C,e,f):128&F&&(P=w.type.hydrate(y,w,x,_,P7(a(y)),E,C,e,c))}return O!=null&&B7(O,null,_,w),P},d=(y,w,x,_,E,C)=>{C=C||!!w.dynamicChildren;const{type:T,props:k,patchFlag:I,shapeFlag:O,dirs:F,transition:N}=w,B=T==="input"||T==="option";if(B||I!==-1){F&&Sc(w,null,x,"created");let P,V=!1;if(b(y)){V=vte(_,N)&&x&&x.vnode.props&&x.vnode.props.appear;const L=y.content.firstChild;V&&N.beforeEnter(L),g(L,y,x),w.el=y=L}if(16&O&&(!k||!k.innerHTML&&!k.textContent)){let L=f(y.firstChild,w,y,x,_,E,C);for(;L;){Gf=!0;const H=L;L=L.nextSibling,l(H)}}else 8&O&&y.textContent!==w.children&&(Gf=!0,y.textContent=w.children);if(k)if(B||!C||48&I)for(const L in k)(B&&(L.endsWith("value")||L==="indeterminate")||Tm(L)&&!T0(L)||L[0]===".")&&r(y,L,null,k[L],void 0,void 0,x);else k.onClick&&r(y,"onClick",null,k.onClick,void 0,void 0,x);(P=k&&k.onVnodeBeforeMount)&&kl(P,x,w),F&&Sc(w,null,x,"beforeMount"),((P=k&&k.onVnodeMounted)||F||V)&&Iee(()=>{P&&kl(P,x,w),V&&N.enter(y),F&&Sc(w,null,x,"mounted")},_)}return y.nextSibling},f=(y,w,x,_,E,C,T)=>{T=T||!!w.dynamicChildren;const k=w.children,I=k.length;for(let O=0;O<I;O++){const F=T?k[O]:k[O]=ss(k[O]);if(y)y=c(y,F,_,E,C,T);else{if(F.type===Dc&&!F.children)continue;Gf=!0,n(null,F,x,null,_,E,P7(x),C)}}return y},p=(y,w,x,_,E,C)=>{const{slotScopeIds:T}=w;T&&(E=E?E.concat(T):T);const k=a(y),I=f(i(y),w,k,x,_,E,C);return I&&L7(I)&&I.data==="]"?i(w.anchor=I):(Gf=!0,s(w.anchor=u("]"),k,I),I)},m=(y,w,x,_,E,C)=>{if(Gf=!0,w.el=null,C){const I=v(y);for(;;){const O=i(y);if(!O||O===I)break;l(O)}}const T=i(y),k=a(y);return l(y),n(null,w,k,T,x,_,P7(k),E),T},v=(y,w="[",x="]")=>{let _=0;for(;y;)if((y=i(y))&&L7(y)&&(y.data===w&&_++,y.data===x)){if(_===0)return i(y);_--}return y},g=(y,w,x)=>{const _=w.parentNode;_&&_.replaceChild(y,w);let E=x;for(;E;)E.vnode.el===w&&(E.vnode.el=E.subTree.el=y),E=E.parent},b=y=>y.nodeType===1&&y.tagName.toLowerCase()==="template";return[(y,w)=>{if(!w.hasChildNodes())return n(null,y,w),S7(),void(w._vnode=y);Gf=!1,c(w.firstChild,y,null,null,null),S7(),w._vnode=y,Gf&&console.error("Hydration completed but contains mismatches.")},c]}const ha=Iee;function fte(e){return hte(e)}function pte(e){return hte(e,lNe)}function hte(e,t){JZ().__VUE__=!0;const{insert:n,remove:r,patchProp:o,createElement:i,createText:a,createComment:l,setText:s,setElementText:u,parentNode:c,nextSibling:d,setScopeId:f=fr,insertStaticContent:p}=e,m=(J,Z,ye,be=null,ve=null,Ae=null,Ce=void 0,_e=null,ke=!!Z.dynamicChildren)=>{if(J===Z)return;J&&!Ou(J,Z)&&(be=K(J),U(J,ve,Ae,!0),J=null),Z.patchFlag===-2&&(ke=!1,Z.dynamicChildren=null);const{type:Be,ref:$e,shapeFlag:rt}=Z;switch(Be){case Dc:v(J,Z,ye,be);break;case hi:g(J,Z,ye,be);break;case qf:J==null&&b(Z,ye,be,Ce);break;case bt:k(J,Z,ye,be,ve,Ae,Ce,_e,ke);break;default:1&rt?y(J,Z,ye,be,ve,Ae,Ce,_e,ke):6&rt?I(J,Z,ye,be,ve,Ae,Ce,_e,ke):(64&rt||128&rt)&&Be.process(J,Z,ye,be,ve,Ae,Ce,_e,ke,ne)}$e!=null&&ve&&B7($e,J&&J.ref,Ae,Z||J,!Z)},v=(J,Z,ye,be)=>{if(J==null)n(Z.el=a(Z.children),ye,be);else{const ve=Z.el=J.el;Z.children!==J.children&&s(ve,Z.children)}},g=(J,Z,ye,be)=>{J==null?n(Z.el=l(Z.children||""),ye,be):Z.el=J.el},b=(J,Z,ye,be)=>{[J.el,J.anchor]=p(J.children,Z,ye,be,J.el,J.anchor)},y=(J,Z,ye,be,ve,Ae,Ce,_e,ke)=>{Z.type==="svg"?Ce="svg":Z.type==="math"&&(Ce="mathml"),J==null?w(Z,ye,be,ve,Ae,Ce,_e,ke):E(J,Z,ve,Ae,Ce,_e,ke)},w=(J,Z,ye,be,ve,Ae,Ce,_e)=>{let ke,Be;const{props:$e,shapeFlag:rt,transition:ge,dirs:We}=J;if(ke=J.el=i(J.type,Ae,$e&&$e.is,$e),8&rt?u(ke,J.children):16&rt&&_(J.children,ke,null,be,ve,AM(J,Ae),Ce,_e),We&&Sc(J,null,be,"created"),x(ke,J,J.scopeId,Ce,be),$e){for(const At in $e)At==="value"||T0(At)||o(ke,At,null,$e[At],Ae,J.children,be,ve,W);"value"in $e&&o(ke,"value",null,$e.value,Ae),(Be=$e.onVnodeBeforeMount)&&kl(Be,be,J)}We&&Sc(J,null,be,"beforeMount");const st=vte(ve,ge);st&&ge.beforeEnter(ke),n(ke,Z,ye),((Be=$e&&$e.onVnodeMounted)||st||We)&&ha(()=>{Be&&kl(Be,be,J),st&&ge.enter(ke),We&&Sc(J,null,be,"mounted")},ve)},x=(J,Z,ye,be,ve)=>{if(ye&&f(J,ye),be)for(let Ae=0;Ae<be.length;Ae++)f(J,be[Ae]);if(ve&&Z===ve.subTree){const Ae=ve.vnode;x(J,Ae,Ae.scopeId,Ae.slotScopeIds,ve.parent)}},_=(J,Z,ye,be,ve,Ae,Ce,_e,ke=0)=>{for(let Be=ke;Be<J.length;Be++){const $e=J[Be]=_e?Kf(J[Be]):ss(J[Be]);m(null,$e,Z,ye,be,ve,Ae,Ce,_e)}},E=(J,Z,ye,be,ve,Ae,Ce)=>{const _e=Z.el=J.el;let{patchFlag:ke,dynamicChildren:Be,dirs:$e}=Z;ke|=16&J.patchFlag;const rt=J.props||Hr,ge=Z.props||Hr;let We;if(ye&&$0(ye,!1),(We=ge.onVnodeBeforeUpdate)&&kl(We,ye,Z,J),$e&&Sc(Z,J,ye,"beforeUpdate"),ye&&$0(ye,!0),Be?C(J.dynamicChildren,Be,_e,ye,be,AM(Z,ve),Ae):Ce||P(J,Z,_e,null,ye,be,AM(Z,ve),Ae,!1),ke>0){if(16&ke)T(_e,Z,rt,ge,ye,be,ve);else if(2&ke&&rt.class!==ge.class&&o(_e,"class",null,ge.class,ve),4&ke&&o(_e,"style",rt.style,ge.style,ve),8&ke){const st=Z.dynamicProps;for(let At=0;At<st.length;At++){const Ve=st[At],it=rt[Ve],dt=ge[Ve];dt===it&&Ve!=="value"||o(_e,Ve,it,dt,ve,J.children,ye,be,W)}}1&ke&&J.children!==Z.children&&u(_e,Z.children)}else Ce||Be!=null||T(_e,Z,rt,ge,ye,be,ve);((We=ge.onVnodeUpdated)||$e)&&ha(()=>{We&&kl(We,ye,Z,J),$e&&Sc(Z,J,ye,"updated")},be)},C=(J,Z,ye,be,ve,Ae,Ce)=>{for(let _e=0;_e<Z.length;_e++){const ke=J[_e],Be=Z[_e],$e=ke.el&&(ke.type===bt||!Ou(ke,Be)||70&ke.shapeFlag)?c(ke.el):ye;m(ke,Be,$e,null,be,ve,Ae,Ce,!0)}},T=(J,Z,ye,be,ve,Ae,Ce)=>{if(ye!==be){if(ye!==Hr)for(const _e in ye)T0(_e)||_e in be||o(J,_e,ye[_e],null,Ce,Z.children,ve,Ae,W);for(const _e in be){if(T0(_e))continue;const ke=be[_e],Be=ye[_e];ke!==Be&&_e!=="value"&&o(J,_e,Be,ke,Ce,Z.children,ve,Ae,W)}"value"in be&&o(J,"value",ye.value,be.value,Ce)}},k=(J,Z,ye,be,ve,Ae,Ce,_e,ke)=>{const Be=Z.el=J?J.el:a(""),$e=Z.anchor=J?J.anchor:a("");let{patchFlag:rt,dynamicChildren:ge,slotScopeIds:We}=Z;We&&(_e=_e?_e.concat(We):We),J==null?(n(Be,ye,be),n($e,ye,be),_(Z.children||[],ye,$e,ve,Ae,Ce,_e,ke)):rt>0&&64&rt&&ge&&J.dynamicChildren?(C(J.dynamicChildren,ge,ye,ve,Ae,Ce,_e),(Z.key!=null||ve&&Z===ve.subTree)&&wM(J,Z,!0)):P(J,Z,ye,$e,ve,Ae,Ce,_e,ke)},I=(J,Z,ye,be,ve,Ae,Ce,_e,ke)=>{Z.slotScopeIds=_e,J==null?512&Z.shapeFlag?ve.ctx.activate(Z,ye,be,Ce,ke):O(Z,ye,be,ve,Ae,Ce,ke):F(J,Z,ke)},O=(J,Z,ye,be,ve,Ae,Ce)=>{const _e=J.component=_te(J,be,ve);if(jm(J)&&(_e.ctx.renderer=ne),Cte(_e),_e.asyncDep){if(ve&&ve.registerDep(_e,N),!J.el){const ke=_e.subTree=ie(hi);g(null,ke,Z,ye)}}else N(_e,J,Z,ye,ve,Ae,Ce)},F=(J,Z,ye)=>{const be=Z.component=J.component;if(function(ve,Ae,Ce){const{props:_e,children:ke,component:Be}=ve,{props:$e,children:rt,patchFlag:ge}=Ae,We=Be.emitsOptions;if(Ae.dirs||Ae.transition)return!0;if(!(Ce&&ge>=0))return!(!ke&&!rt||rt&&rt.$stable)||_e!==$e&&(_e?!$e||Tee(_e,$e,We):!!$e);if(1024&ge)return!0;if(16&ge)return _e?Tee(_e,$e,We):!!$e;if(8&ge){const st=Ae.dynamicProps;for(let At=0;At<st.length;At++){const Ve=st[At];if($e[Ve]!==_e[Ve]&&!D7(We,Ve))return!0}}return!1}(J,Z,ye)){if(be.asyncDep&&!be.asyncResolved)return void B(be,Z,ye);be.next=Z,function(ve){const Ae=Da.indexOf(ve);Ae>Cc&&Da.splice(Ae,1)}(be.update),be.effect.dirty=!0,be.update()}else Z.el=J.el,be.vnode=Z},N=(J,Z,ye,be,ve,Ae,Ce)=>{const _e=()=>{if(J.isMounted){let{next:$e,bu:rt,u:ge,parent:We,vnode:st}=J;{const ot=mte(J);if(ot)return $e&&($e.el=st.el,B(J,$e,Ce)),void ot.asyncDep.then(()=>{J.isUnmounted||_e()})}let At,Ve=$e;$0(J,!1),$e?($e.el=st.el,B(J,$e,Ce)):$e=st,rt&&N0(rt),(At=$e.props&&$e.props.onVnodeBeforeUpdate)&&kl(At,We,$e,st),$0(J,!0);const it=T7(J),dt=J.subTree;J.subTree=it,m(dt,it,c(dt.el),K(dt),J,ve,Ae),$e.el=it.el,Ve===null&&QT(J,it.el),ge&&ha(ge,ve),(At=$e.props&&$e.props.onVnodeUpdated)&&ha(()=>kl(At,We,$e,st),ve)}else{let $e;const{el:rt,props:ge}=Z,{bm:We,m:st,parent:At}=J,Ve=H0(Z);if($0(J,!1),We&&N0(We),!Ve&&($e=ge&&ge.onVnodeBeforeMount)&&kl($e,At,Z),$0(J,!0),rt&&le){const it=()=>{J.subTree=T7(J),le(rt,J.subTree,J,ve,null)};Ve?Z.type.__asyncLoader().then(()=>!J.isUnmounted&&it()):it()}else{const it=J.subTree=T7(J);m(null,it,ye,be,J,ve,Ae),Z.el=it.el}if(st&&ha(st,ve),!Ve&&($e=ge&&ge.onVnodeMounted)){const it=Z;ha(()=>kl($e,At,it),ve)}(256&Z.shapeFlag||At&&H0(At.vnode)&&256&At.vnode.shapeFlag)&&J.a&&ha(J.a,ve),J.isMounted=!0,Z=ye=be=null}},ke=J.effect=new Fm(_e,fr,()=>E7(Be),J.scope),Be=J.update=()=>{ke.dirty&&ke.run()};Be.id=J.uid,$0(J,!0),Be()},B=(J,Z,ye)=>{Z.component=J;const be=J.vnode.props;J.vnode=Z,J.next=null,function(ve,Ae,Ce,_e){const{props:ke,attrs:Be,vnode:{patchFlag:$e}}=ve,rt=Zn(ke),[ge]=ve.propsOptions;let We=!1;if(!(_e||$e>0)||16&$e){let st;rte(ve,Ae,ke,Be)&&(We=!0);for(const At in rt)Ae&&(Tn(Ae,At)||(st=Za(At))!==At&&Tn(Ae,st))||(ge?!Ce||Ce[At]===void 0&&Ce[st]===void 0||(ke[At]=yM(ge,rt,At,void 0,ve,!0)):delete ke[At]);if(Be!==rt)for(const At in Be)Ae&&Tn(Ae,At)||(delete Be[At],We=!0)}else if(8&$e){const st=ve.vnode.dynamicProps;for(let At=0;At<st.length;At++){let Ve=st[At];if(D7(ve.emitsOptions,Ve))continue;const it=Ae[Ve];if(ge)if(Tn(Be,Ve))it!==Be[Ve]&&(Be[Ve]=it,We=!0);else{const dt=qi(Ve);ke[dt]=yM(ge,rt,dt,it,ve,!1)}else it!==Be[Ve]&&(Be[Ve]=it,We=!0)}}We&&Dd(ve,"set","$attrs")}(J,Z.props,be,ye),aNe(J,Z.children,ye),R0(),kee(J),I0()},P=(J,Z,ye,be,ve,Ae,Ce,_e,ke=!1)=>{const Be=J&&J.children,$e=J?J.shapeFlag:0,rt=Z.children,{patchFlag:ge,shapeFlag:We}=Z;if(ge>0){if(128&ge)return void L(Be,rt,ye,be,ve,Ae,Ce,_e,ke);if(256&ge)return void V(Be,rt,ye,be,ve,Ae,Ce,_e,ke)}8&We?(16&$e&&W(Be,ve,Ae),rt!==Be&&u(ye,rt)):16&$e?16&We?L(Be,rt,ye,be,ve,Ae,Ce,_e,ke):W(Be,ve,Ae,!0):(8&$e&&u(ye,""),16&We&&_(rt,ye,be,ve,Ae,Ce,_e,ke))},V=(J,Z,ye,be,ve,Ae,Ce,_e,ke)=>{Z=Z||S0;const Be=(J=J||S0).length,$e=Z.length,rt=Math.min(Be,$e);let ge;for(ge=0;ge<rt;ge++){const We=Z[ge]=ke?Kf(Z[ge]):ss(Z[ge]);m(J[ge],We,ye,null,ve,Ae,Ce,_e,ke)}Be>$e?W(J,ve,Ae,!0,!1,rt):_(Z,ye,be,ve,Ae,Ce,_e,ke,rt)},L=(J,Z,ye,be,ve,Ae,Ce,_e,ke)=>{let Be=0;const $e=Z.length;let rt=J.length-1,ge=$e-1;for(;Be<=rt&&Be<=ge;){const We=J[Be],st=Z[Be]=ke?Kf(Z[Be]):ss(Z[Be]);if(!Ou(We,st))break;m(We,st,ye,null,ve,Ae,Ce,_e,ke),Be++}for(;Be<=rt&&Be<=ge;){const We=J[rt],st=Z[ge]=ke?Kf(Z[ge]):ss(Z[ge]);if(!Ou(We,st))break;m(We,st,ye,null,ve,Ae,Ce,_e,ke),rt--,ge--}if(Be>rt){if(Be<=ge){const We=ge+1,st=We<$e?Z[We].el:be;for(;Be<=ge;)m(null,Z[Be]=ke?Kf(Z[Be]):ss(Z[Be]),ye,st,ve,Ae,Ce,_e,ke),Be++}}else if(Be>ge)for(;Be<=rt;)U(J[Be],ve,Ae,!0),Be++;else{const We=Be,st=Be,At=new Map;for(Be=st;Be<=ge;Be++){const me=Z[Be]=ke?Kf(Z[Be]):ss(Z[Be]);me.key!=null&&At.set(me.key,Be)}let Ve,it=0;const dt=ge-st+1;let ot=!1,je=0;const we=new Array(dt);for(Be=0;Be<dt;Be++)we[Be]=0;for(Be=We;Be<=rt;Be++){const me=J[Be];if(it>=dt){U(me,ve,Ae,!0);continue}let Me;if(me.key!=null)Me=At.get(me.key);else for(Ve=st;Ve<=ge;Ve++)if(we[Ve-st]===0&&Ou(me,Z[Ve])){Me=Ve;break}Me===void 0?U(me,ve,Ae,!0):(we[Me-st]=Be+1,Me>=je?je=Me:ot=!0,m(me,Z[Me],ye,null,ve,Ae,Ce,_e,ke),it++)}const ze=ot?function(me){const Me=me.slice(),Ie=[0];let ht,gt,vt,qt,mn;const Zt=me.length;for(ht=0;ht<Zt;ht++){const rn=me[ht];if(rn!==0){if(gt=Ie[Ie.length-1],me[gt]<rn){Me[ht]=gt,Ie.push(ht);continue}for(vt=0,qt=Ie.length-1;vt<qt;)mn=vt+qt>>1,me[Ie[mn]]<rn?vt=mn+1:qt=mn;rn<me[Ie[vt]]&&(vt>0&&(Me[ht]=Ie[vt-1]),Ie[vt]=ht)}}for(vt=Ie.length,qt=Ie[vt-1];vt-- >0;)Ie[vt]=qt,qt=Me[qt];return Ie}(we):S0;for(Ve=ze.length-1,Be=dt-1;Be>=0;Be--){const me=st+Be,Me=Z[me],Ie=me+1<$e?Z[me+1].el:be;we[Be]===0?m(null,Me,ye,Ie,ve,Ae,Ce,_e,ke):ot&&(Ve<0||Be!==ze[Ve]?H(Me,ye,Ie,2):Ve--)}}},H=(J,Z,ye,be,ve=null)=>{const{el:Ae,type:Ce,transition:_e,children:ke,shapeFlag:Be}=J;if(6&Be)return void H(J.component.subTree,Z,ye,be);if(128&Be)return void J.suspense.move(Z,ye,be);if(64&Be)return void Ce.move(J,Z,ye,ne);if(Ce===bt){n(Ae,Z,ye);for(let $e=0;$e<ke.length;$e++)H(ke[$e],Z,ye,be);return void n(J.anchor,Z,ye)}if(Ce===qf)return void(({el:$e,anchor:rt},ge,We)=>{let st;for(;$e&&$e!==rt;)st=d($e),n($e,ge,We),$e=st;n(rt,ge,We)})(J,Z,ye);if(be!==2&&1&Be&&_e)if(be===0)_e.beforeEnter(Ae),n(Ae,Z,ye),ha(()=>_e.enter(Ae),ve);else{const{leave:$e,delayLeave:rt,afterLeave:ge}=_e,We=()=>n(Ae,Z,ye),st=()=>{$e(Ae,()=>{We(),ge&&ge()})};rt?rt(Ae,We,st):st()}else n(Ae,Z,ye)},U=(J,Z,ye,be=!1,ve=!1)=>{const{type:Ae,props:Ce,ref:_e,children:ke,dynamicChildren:Be,shapeFlag:$e,patchFlag:rt,dirs:ge}=J;if(_e!=null&&B7(_e,null,ye,J,!0),256&$e)return void Z.ctx.deactivate(J);const We=1&$e&&ge,st=!H0(J);let At;if(st&&(At=Ce&&Ce.onVnodeBeforeUnmount)&&kl(At,Z,J),6&$e)$(J.component,ye,be);else{if(128&$e)return void J.suspense.unmount(ye,be);We&&Sc(J,null,Z,"beforeUnmount"),64&$e?J.type.remove(J,Z,ye,ve,ne,be):Be&&(Ae!==bt||rt>0&&64&rt)?W(Be,Z,ye,!1,!0):(Ae===bt&&384&rt||!ve&&16&$e)&&W(ke,Z,ye),be&&G(J)}(st&&(At=Ce&&Ce.onVnodeUnmounted)||We)&&ha(()=>{At&&kl(At,Z,J),We&&Sc(J,null,Z,"unmounted")},ye)},G=J=>{const{type:Z,el:ye,anchor:be,transition:ve}=J;if(Z===bt)return void z(ye,be);if(Z===qf)return void(({el:Ce,anchor:_e})=>{let ke;for(;Ce&&Ce!==_e;)ke=d(Ce),r(Ce),Ce=ke;r(_e)})(J);const Ae=()=>{r(ye),ve&&!ve.persisted&&ve.afterLeave&&ve.afterLeave()};if(1&J.shapeFlag&&ve&&!ve.persisted){const{leave:Ce,delayLeave:_e}=ve,ke=()=>Ce(ye,Ae);_e?_e(J.el,Ae,ke):ke()}else Ae()},z=(J,Z)=>{let ye;for(;J!==Z;)ye=d(J),r(J),J=ye;r(Z)},$=(J,Z,ye)=>{const{bum:be,scope:ve,update:Ae,subTree:Ce,um:_e}=J;be&&N0(be),ve.stop(),Ae&&(Ae.active=!1,U(Ce,J,Z,ye)),_e&&ha(_e,Z),ha(()=>{J.isUnmounted=!0},Z),Z&&Z.pendingBranch&&!Z.isUnmounted&&J.asyncDep&&!J.asyncResolved&&J.suspenseId===Z.pendingId&&(Z.deps--,Z.deps===0&&Z.resolve())},W=(J,Z,ye,be=!1,ve=!1,Ae=0)=>{for(let Ce=Ae;Ce<J.length;Ce++)U(J[Ce],Z,ye,be,ve)},K=J=>6&J.shapeFlag?K(J.component.subTree):128&J.shapeFlag?J.suspense.next():d(J.anchor||J.el);let X=!1;const te=(J,Z,ye)=>{J==null?Z._vnode&&U(Z._vnode,null,null,!0):m(Z._vnode||null,J,Z,null,null,null,ye),X||(X=!0,kee(),S7(),X=!1),Z._vnode=J},ne={p:m,um:U,m:H,r:G,mt:O,mc:_,pc:P,pbc:C,n:K,o:e};let se,le;return t&&([se,le]=t(ne)),{render:te,hydrate:se,createApp:rNe(te,se)}}function AM({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function $0({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function vte(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function wM(e,t,n=!1){const r=e.children,o=t.children;if(mt(r)&&mt(o))for(let i=0;i<r.length;i++){const a=r[i];let l=o[i];1&l.shapeFlag&&!l.dynamicChildren&&((l.patchFlag<=0||l.patchFlag===32)&&(l=o[i]=Kf(o[i]),l.el=a.el),n||wM(a,l)),l.type===Dc&&(l.el=a.el)}}function mte(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:mte(t)}const p3=e=>e&&(e.disabled||e.disabled===""),gte=e=>typeof SVGElement<"u"&&e instanceof SVGElement,yte=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,xM=(e,t)=>{const n=e&&e.to;return an(n)?t?t(n):null:n},sNe={name:"Teleport",__isTeleport:!0,process(e,t,n,r,o,i,a,l,s,u){const{mc:c,pc:d,pbc:f,o:{insert:p,querySelector:m,createText:v,createComment:g}}=u,b=p3(t.props);let{shapeFlag:y,children:w,dynamicChildren:x}=t;if(e==null){const _=t.el=v(""),E=t.anchor=v("");p(_,n,r),p(E,n,r);const C=t.target=xM(t.props,m),T=t.targetAnchor=v("");C&&(p(T,C),a==="svg"||gte(C)?a="svg":(a==="mathml"||yte(C))&&(a="mathml"));const k=(I,O)=>{16&y&&c(w,I,O,o,i,a,l,s)};b?k(n,E):C&&k(C,T)}else{t.el=e.el;const _=t.anchor=e.anchor,E=t.target=e.target,C=t.targetAnchor=e.targetAnchor,T=p3(e.props),k=T?n:E,I=T?_:C;if(a==="svg"||gte(E)?a="svg":(a==="mathml"||yte(E))&&(a="mathml"),x?(f(e.dynamicChildren,x,k,o,i,a,l),wM(e,t,!0)):s||d(e,t,k,I,o,i,a,l,!1),b)T?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):j7(t,n,_,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const O=t.target=xM(t.props,m);O&&j7(t,O,null,u,0)}else T&&j7(t,E,C,u,1)}bte(t)},remove(e,t,n,r,{um:o,o:{remove:i}},a){const{shapeFlag:l,children:s,anchor:u,targetAnchor:c,target:d,props:f}=e;if(d&&i(c),a&&i(u),16&l){const p=a||!p3(f);for(let m=0;m<s.length;m++){const v=s[m];o(v,t,n,p,!!v.dynamicChildren)}}},move:j7,hydrate:function(e,t,n,r,o,i,{o:{nextSibling:a,parentNode:l,querySelector:s}},u){const c=t.target=xM(t.props,s);if(c){const d=c._lpa||c.firstChild;if(16&t.shapeFlag)if(p3(t.props))t.anchor=u(a(e),t,l(e),n,r,o,i),t.targetAnchor=d;else{t.anchor=a(e);let f=d;for(;f;)if(f=a(f),f&&f.nodeType===8&&f.data==="teleport anchor"){t.targetAnchor=f,c._lpa=t.targetAnchor&&a(t.targetAnchor);break}u(d,t,c,n,r,o,i)}bte(t)}return t.anchor&&a(t.anchor)}};function j7(e,t,n,{o:{insert:r},m:o},i=2){i===0&&r(e.targetAnchor,t,n);const{el:a,anchor:l,shapeFlag:s,children:u,props:c}=e,d=i===2;if(d&&r(a,t,n),(!d||p3(c))&&16&s)for(let f=0;f<u.length;f++)o(u[f],t,n,2);d&&r(l,t,n)}Db=sNe;function bte(e){const t=e.ctx;if(t&&t.ut){let n=e.children[0].el;for(;n&&n!==e.targetAnchor;)n.nodeType===1&&n.setAttribute("data-v-owner",t.uid),n=n.nextSibling;t.ut()}}let Dc,hi,qf,zm;bt=Symbol.for("v-fgt"),Dc=Symbol.for("v-txt"),hi=Symbol.for("v-cmt"),qf=Symbol.for("v-stc"),zm=[];let Sl=null;Y=function(e=!1){zm.push(Sl=e?null:[])};function Ate(){zm.pop(),Sl=zm[zm.length-1]||null}let U0=1;function _M(e){U0+=e}function wte(e){return e.dynamicChildren=U0>0?Sl||S0:null,Ate(),U0>0&&Sl&&Sl.push(e),e}fe=function(e,t,n,r,o,i){return wte(ce(e,t,n,r,o,i,!0))},Le=function(e,t,n,r,o){return wte(ie(e,t,n,r,o,!0))},oo=function(e){return!!e&&e.__v_isVNode===!0};function Ou(e,t){return e.type===t.type&&e.key===t.key}const V7="__vInternal",xte=({key:e})=>e??null,z7=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?an(e)||Jn(e)||Ut(e)?{i:pi,r:e,k:t,f:!!n}:e:null);ce=function(e,t=null,n=null,r=0,o=null,i=e===bt?0:1,a=!1,l=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&xte(t),ref:t&&z7(t),scopeId:O7,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:pi};return l?(EM(s,n),128&i&&e.normalize(s)):n&&(s.shapeFlag|=an(n)?8:16),U0>0&&!a&&Sl&&(s.patchFlag>0||6&i)&&s.patchFlag!==32&&Sl.push(s),s},ie=function(e,t=null,n=null,r=0,o=null,i=!1){if(e&&e!==Mee||(e=hi),oo(e)){const s=Tu(e,t,!0);return n&&EM(s,n),U0>0&&!i&&Sl&&(6&s.shapeFlag?Sl[Sl.indexOf(e)]=s:Sl.push(s)),s.patchFlag|=-2,s}a=e,Ut(a)&&"__vccOpts"in a&&(e=e.__vccOpts);var a;if(t){t=TO(t);let{class:s,style:u}=t;s&&!an(s)&&(t.class=oe(s)),wn(u)&&(UT(u)&&!mt(u)&&(u=vo({},u)),t.style=$t(u))}const l=an(e)?1:Fee(e)?128:(s=>s.__isTeleport)(e)?64:wn(e)?4:Ut(e)?2:0;return ce(e,t,n,r,o,l,i,!0)},TO=function(e){return e?UT(e)||V7 in e?vo({},e):e:null};function Tu(e,t,n=!1){const{props:r,ref:o,patchFlag:i,children:a}=e,l=t?Un(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&xte(l),ref:t&&t.ref?n&&o?mt(o)?o.concat(z7(t)):[o,z7(t)]:z7(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==bt?i===-1?16:16|i:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Tu(e.ssContent),ssFallback:e.ssFallback&&Tu(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}Dt=function(e=" ",t=0){return ie(Dc,null,e,t)},Fe=function(e="",t=!1){return t?(Y(),Le(hi,null,e)):ie(hi,null,e)};function ss(e){return e==null||typeof e=="boolean"?ie(hi):mt(e)?ie(bt,null,e.slice()):typeof e=="object"?Kf(e):ie(Dc,null,String(e))}function Kf(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Tu(e)}function EM(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(mt(t))n=16;else if(typeof t=="object"){if(65&r){const o=t.default;return void(o&&(o._c&&(o._d=!1),EM(e,o()),o._c&&(o._d=!0)))}{n=32;const o=t._;o||V7 in t?o===3&&pi&&(pi.slots._===1?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=pi}}else Ut(t)?(t={default:t,_ctx:pi},n=32):(t=String(t),64&r?(n=16,t=[Dt(t)]):n=8);e.children=t,e.shapeFlag|=n}Un=function(...e){const t={};for(let n=0;n<e.length;n++){const r=e[n];for(const o in r)if(o==="class")t.class!==r.class&&(t.class=oe([t.class,r.class]));else if(o==="style")t.style=$t([t.style,r.style]);else if(Tm(o)){const i=t[o],a=r[o];!a||i===a||mt(i)&&i.includes(a)||(t[o]=i?[].concat(i,a):a)}else o!==""&&(t[o]=r[o])}return t};function kl(e,t,n,r=null){ls(e,t,7,[n,r])}const uNe=tte();let cNe=0;function _te(e,t,n){const r=e.type,o=(t?t.appContext:e.appContext)||uNe,i={uid:cNe++,vnode:e,type:r,parent:t,appContext:o,root:null,next:null,subTree:null,effect:null,update:null,scope:new PT(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(o.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:ote(r,o),emitsOptions:Oee(r,o),emit:null,emitted:null,propsDefaults:Hr,inheritAttrs:r.inheritAttrs,ctx:Hr,data:Hr,props:Hr,attrs:Hr,slots:Hr,refs:Hr,setupState:Hr,setupContext:null,attrsProxy:null,slotsProxy:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return i.ctx={_:i},i.root=t?t.root:i,i.emit=UMe.bind(null,i),e.ce&&e.ce(i),i}let Di=null;dn=()=>Di||pi;let H7,CM;{const e=JZ(),t=(n,r)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(r),i=>{o.length>1?o.forEach(a=>a(i)):o[0](i)}};H7=t("__VUE_INSTANCE_SETTERS__",n=>Di=n),CM=t("__VUE_SSR_SETTERS__",n=>h3=n)}const W0=e=>{const t=Di;return H7(e),e.scope.on(),()=>{e.scope.off(),H7(t)}},SM=()=>{Di&&Di.scope.off(),H7(null)};function Ete(e){return 4&e.vnode.shapeFlag}let $7,kM,h3=!1;function Cte(e,t=!1){t&&CM(t);const{props:n,children:r}=e.vnode,o=Ete(e);(function(a,l,s,u=!1){const c={},d={};Qb(d,V7,1),a.propsDefaults=Object.create(null),rte(a,l,c,d);for(const f in a.propsOptions[0])f in c||(c[f]=void 0);s?a.props=u?c:x7(c):a.type.props?a.props=c:a.props=d,a.attrs=d})(e,n,o,t),iNe(e,r);const i=o?function(a,l){const s=a.type;a.accessCache=Object.create(null),a.proxy=Fo(new Proxy(a.ctx,hM));const{setup:u}=s;if(u){const c=a.setupContext=u.length>1?kte(a):null,d=W0(a);R0();const f=Td(u,a,0,[a.props,c]);if(I0(),d(),D0(f)){if(f.then(SM,SM),l)return f.then(p=>{DM(a,p,l)}).catch(p=>{L0(p,a,0)});a.asyncDep=f}else DM(a,f,l)}else Ste(a,l)}(e,t):void 0;return t&&CM(!1),i}function DM(e,t,n){Ut(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:wn(t)&&(e.setupState=qT(t)),Ste(e,n)}function Ste(e,t,n){const r=e.type;if(!e.render){if(!t&&$7&&!r.render){const o=r.template||mM(e).template;if(o){const{isCustomElement:i,compilerOptions:a}=e.appContext.config,{delimiters:l,compilerOptions:s}=r,u=vo(vo({isCustomElement:i,delimiters:l},a),s);r.render=$7(o,u)}}e.render=r.render||fr,kM&&kM(e)}{const o=W0(e);R0();try{eNe(e)}finally{I0(),o()}}}function kte(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return function(n){return n.attrsProxy||(n.attrsProxy=new Proxy(n.attrs,{get:(r,o)=>(Cl(n,0,"$attrs"),r[o])}))}(e)},slots:e.slots,emit:e.emit,expose:t}}function U7(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(qT(Fo(e.exposed)),{get:(t,n)=>n in t?t[n]:n in c3?c3[n](e):void 0,has:(t,n)=>n in t||n in c3}))}function OM(e,t=!0){return Ut(e)?e.displayName||e.name:e.name||t&&e.__name}ee=(e,t)=>xee(e,0,h3),pn=function(e,t,n){const r=arguments.length;return r===2?wn(t)&&!mt(t)?oo(t)?ie(e,null,[t]):ie(e,t):ie(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&oo(n)&&(n=[n]),ie(e,t,n))};function Dte(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let r=0;r<n.length;r++)if(Ws(n[r],t[r]))return!1;return U0>0&&Sl&&Sl.push(e),!0}let TM,MM,Ote,Tte,Mte,Nte,Md,NM,Fte,Nd,Hm,G0;TM="3.4.21",MM=fr,Ote=HMe,Tte=Bm,Mte=function e(t,n){var r,o;Bm=t,Bm?(Bm.enabled=!0,k7.forEach(({event:i,args:a})=>Bm.emit(i,...a)),k7=[]):typeof window<"u"&&window.HTMLElement&&!((o=(r=window.navigator)==null?void 0:r.userAgent)!=null&&o.includes("jsdom"))?((n.__VUE_DEVTOOLS_HOOK_REPLAY__=n.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(i=>{e(i,n)}),setTimeout(()=>{Bm||(n.__VUE_DEVTOOLS_HOOK_REPLAY__=null,k7=[])},3e3)):k7=[]},Nte={createComponentInstance:_te,setupComponent:Cte,renderComponentRoot:T7,setCurrentRenderingInstance:i3,isVNode:oo,normalizeVNode:ss},Md=typeof document<"u"?document:null,NM=Md&&Md.createElement("template"),Fte={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t==="svg"?Md.createElementNS("http://www.w3.org/2000/svg",e):t==="mathml"?Md.createElementNS("http://www.w3.org/1998/Math/MathML",e):Md.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>Md.createTextNode(e),createComment:e=>Md.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Md.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,i){const a=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),o!==i&&(o=o.nextSibling););else{NM.innerHTML=r==="svg"?`<svg>${e}</svg>`:r==="mathml"?`<math>${e}</math>`:e;const l=NM.content;if(r==="svg"||r==="mathml"){const s=l.firstChild;for(;s.firstChild;)l.appendChild(s.firstChild);l.removeChild(s)}t.insertBefore(l,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Nd="transition",Hm="animation",G0=Symbol("_vtc"),ca=(e,{slots:t})=>pn(zee,Bte(e),t),ca.displayName="Transition";const Rte={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},dNe=ca.props=vo({},rM,Rte),q0=(e,t=[])=>{mt(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ite=e=>!!e&&(mt(e)?e.some(t=>t.length>1):e.length>1);function Bte(e){const t={};for(const F in e)F in Rte||(t[F]=e[F]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:i=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:s=i,appearActiveClass:u=a,appearToClass:c=l,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:f=`${n}-leave-active`,leaveToClass:p=`${n}-leave-to`}=e,m=function(F){if(F==null)return null;if(wn(F))return[FM(F.enter),FM(F.leave)];{const N=FM(F);return[N,N]}}(o),v=m&&m[0],g=m&&m[1],{onBeforeEnter:b,onEnter:y,onEnterCancelled:w,onLeave:x,onLeaveCancelled:_,onBeforeAppear:E=b,onAppear:C=y,onAppearCancelled:T=w}=t,k=(F,N,B)=>{Yf(F,N?c:l),Yf(F,N?u:a),B&&B()},I=(F,N)=>{F._isLeaving=!1,Yf(F,d),Yf(F,p),Yf(F,f),N&&N()},O=F=>(N,B)=>{const P=F?C:y,V=()=>k(N,F,B);q0(P,[N,V]),Pte(()=>{Yf(N,F?s:i),Fd(N,F?c:l),Ite(P)||Lte(N,r,v,V)})};return vo(t,{onBeforeEnter(F){q0(b,[F]),Fd(F,i),Fd(F,a)},onBeforeAppear(F){q0(E,[F]),Fd(F,s),Fd(F,u)},onEnter:O(!1),onAppear:O(!0),onLeave(F,N){F._isLeaving=!0;const B=()=>I(F,N);Fd(F,d),Hte(),Fd(F,f),Pte(()=>{F._isLeaving&&(Yf(F,d),Fd(F,p),Ite(x)||Lte(F,r,g,B))}),q0(x,[F,B])},onEnterCancelled(F){k(F,!1),q0(w,[F])},onAppearCancelled(F){k(F,!0),q0(T,[F])},onLeaveCancelled(F){I(F),q0(_,[F])}})}function FM(e){return Jb(e)}function Fd(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[G0]||(e[G0]=new Set)).add(t)}function Yf(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[G0];n&&(n.delete(t),n.size||(e[G0]=void 0))}function Pte(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let fNe=0;function Lte(e,t,n,r){const o=e._endId=++fNe,i=()=>{o===e._endId&&r()};if(n)return setTimeout(i,n);const{type:a,timeout:l,propCount:s}=jte(e,t);if(!a)return r();const u=a+"end";let c=0;const d=()=>{e.removeEventListener(u,f),i()},f=p=>{p.target===e&&++c>=s&&d()};setTimeout(()=>{c<s&&d()},l+1),e.addEventListener(u,f)}function jte(e,t){const n=window.getComputedStyle(e),r=p=>(n[p]||"").split(", "),o=r(`${Nd}Delay`),i=r(`${Nd}Duration`),a=Vte(o,i),l=r(`${Hm}Delay`),s=r(`${Hm}Duration`),u=Vte(l,s);let c=null,d=0,f=0;return t===Nd?a>0&&(c=Nd,d=a,f=i.length):t===Hm?u>0&&(c=Hm,d=u,f=s.length):(d=Math.max(a,u),c=d>0?a>u?Nd:Hm:null,f=c?c===Nd?i.length:s.length:0),{type:c,timeout:d,propCount:f,hasTransform:c===Nd&&/\b(transform|all)(,|$)/.test(r(`${Nd}Property`).toString())}}function Vte(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((n,r)=>zte(n)+zte(e[r])))}function zte(e){return e==="auto"?0:1e3*Number(e.slice(0,-1).replace(",","."))}function Hte(){return document.body.offsetHeight}let v3,RM;v3=Symbol("_vod"),RM=Symbol("_vsh"),$n={beforeMount(e,{value:t},{transition:n}){e[v3]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):m3(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),m3(e,!0),r.enter(e)):r.leave(e,()=>{m3(e,!1)}):m3(e,t))},beforeUnmount(e,{value:t}){m3(e,t)}};function m3(e,t){e.style.display=t?e[v3]:"none",e[RM]=!t}const $te=Symbol("");function IM(e){const t=dn();if(!t)return;const n=t.ut=(o=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(i=>PM(i,o))},r=()=>{const o=e(t.proxy);BM(t.subTree,o),n(o)};Lee(r),yn(()=>{const o=new MutationObserver(r);o.observe(t.subTree.el.parentNode,{childList:!0}),Vs(()=>o.disconnect())})}function BM(e,t){if(128&e.shapeFlag){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{BM(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(1&e.shapeFlag&&e.el)PM(e.el,t);else if(e.type===bt)e.children.forEach(n=>BM(n,t));else if(e.type===qf){let{el:n,anchor:r}=e;for(;n&&(PM(n,t),n!==r);)n=n.nextSibling}}function PM(e,t){if(e.nodeType===1){const n=e.style;let r="";for(const o in t)n.setProperty(`--${o}`,t[o]),r+=`--${o}: ${t[o]};`;n[$te]=r}}const pNe=/(^|;)\s*display\s*:/,Ute=/\s*!important$/;function W7(e,t,n){if(mt(n))n.forEach(r=>W7(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=function(o,i){const a=LM[i];if(a)return a;let l=qi(i);if(l!=="filter"&&l in o)return LM[i]=l;l=M0(l);for(let s=0;s<Wte.length;s++){const u=Wte[s]+l;if(u in o)return LM[i]=u}return i}(e,t);Ute.test(n)?e.setProperty(Za(r),n.replace(Ute,""),"important"):e[r]=n}}const Wte=["Webkit","Moz","ms"],LM={},Gte="http://www.w3.org/1999/xlink";function Rd(e,t,n,r){e.addEventListener(t,n,r)}const qte=Symbol("_vei");function hNe(e,t,n,r,o=null){const i=e[qte]||(e[qte]={}),a=i[t];if(r&&a)a.value=r;else{const[l,s]=function(u){let c;if(Kte.test(u)){let f;for(c={};f=u.match(Kte);)u=u.slice(0,u.length-f[0].length),c[f[0].toLowerCase()]=!0}return[u[2]===":"?u.slice(3):Za(u.slice(2)),c]}(t);if(r){const u=i[t]=function(c,d){const f=p=>{if(p._vts){if(p._vts<=f.attached)return}else p._vts=Date.now();ls(function(m,v){if(mt(v)){const g=m.stopImmediatePropagation;return m.stopImmediatePropagation=()=>{g.call(m),m._stopped=!0},v.map(b=>y=>!y._stopped&&b&&b(y))}return v}(p,f.value),d,5,[p])};return f.value=c,f.attached=mNe(),f}(r,o);Rd(e,l,u,s)}else a&&(function(u,c,d,f){u.removeEventListener(c,d,f)}(e,l,a,s),i[t]=void 0)}}const Kte=/(?:Once|Passive|Capture)$/;let jM=0;const vNe=Promise.resolve(),mNe=()=>jM||(vNe.then(()=>jM=0),jM=Date.now()),Yte=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123;function Xte(e,t){const n=Te(e);class r extends G7{constructor(i){super(n,i,t)}}return r.def=n,r}const gNe=typeof HTMLElement<"u"?HTMLElement:class{};class G7 extends gNe{constructor(t,n={},r){super(),this._def=t,this._props=n,this._instance=null,this._connected=!1,this._resolved=!1,this._numberProps=null,this._ob=null,this.shadowRoot&&r?r(this._createVNode(),this.shadowRoot):(this.attachShadow({mode:"open"}),this._def.__asyncLoader||this._resolveProps(this._def))}connectedCallback(){this._connected=!0,this._instance||(this._resolved?this._update():this._resolveDef())}disconnectedCallback(){this._connected=!1,this._ob&&(this._ob.disconnect(),this._ob=null),St(()=>{this._connected||(qs(null,this.shadowRoot),this._instance=null)})}_resolveDef(){this._resolved=!0;for(let r=0;r<this.attributes.length;r++)this._setAttr(this.attributes[r].name);this._ob=new MutationObserver(r=>{for(const o of r)this._setAttr(o.attributeName)}),this._ob.observe(this,{attributes:!0});const t=(r,o=!1)=>{const{props:i,styles:a}=r;let l;if(i&&!mt(i))for(const s in i){const u=i[s];(u===Number||u&&u.type===Number)&&(s in this._props&&(this._props[s]=Jb(this._props[s])),(l||(l=Object.create(null)))[qi(s)]=!0)}this._numberProps=l,o&&this._resolveProps(r),this._applyStyles(a),this._update()},n=this._def.__asyncLoader;n?n().then(r=>t(r,!0)):t(this._def)}_resolveProps(t){const{props:n}=t,r=mt(n)?n:Object.keys(n||{});for(const o of Object.keys(this))o[0]!=="_"&&r.includes(o)&&this._setProp(o,this[o],!0,!1);for(const o of r.map(qi))Object.defineProperty(this,o,{get(){return this._getProp(o)},set(i){this._setProp(o,i)}})}_setAttr(t){let n=this.getAttribute(t);const r=qi(t);this._numberProps&&this._numberProps[r]&&(n=Jb(n)),this._setProp(r,n,!1)}_getProp(t){return this._props[t]}_setProp(t,n,r=!0,o=!0){n!==this._props[t]&&(this._props[t]=n,o&&this._instance&&this._update(),r&&(n===!0?this.setAttribute(Za(t),""):typeof n=="string"||typeof n=="number"?this.setAttribute(Za(t),n+""):n||this.removeAttribute(Za(t))))}_update(){qs(this._createVNode(),this.shadowRoot)}_createVNode(){const t=ie(this._def,vo({},this._props));return this._instance||(t.ce=n=>{this._instance=n,n.isCE=!0;const r=(i,a)=>{this.dispatchEvent(new CustomEvent(i,{detail:a}))};n.emit=(i,...a)=>{r(i,a),Za(i)!==i&&r(Za(i),a)};let o=this;for(;o=o&&(o.parentNode||o.host);)if(o instanceof G7){n.parent=o._instance,n.provides=o._instance.provides;break}}),t}_applyStyles(t){t&&t.forEach(n=>{const r=document.createElement("style");r.textContent=n,this.shadowRoot.appendChild(r)})}}let VM,zM,g3,HM,Qte;VM=new WeakMap,zM=new WeakMap,g3=Symbol("_moveCb"),HM=Symbol("_enterCb"),Qte={name:"TransitionGroup",props:vo({},dNe,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=dn(),r=nM();let o,i;return zs(()=>{if(!o.length)return;const a=e.moveClass||`${e.name||"v"}-move`;if(!function(s,u,c){const d=s.cloneNode(),f=s[G0];f&&f.forEach(v=>{v.split(/\s+/).forEach(g=>g&&d.classList.remove(g))}),c.split(/\s+/).forEach(v=>v&&d.classList.add(v)),d.style.display="none";const p=u.nodeType===1?u:u.parentNode;p.appendChild(d);const{hasTransform:m}=jte(d);return p.removeChild(d),m}(o[0].el,n.vnode.el,a))return;o.forEach(yNe),o.forEach(bNe);const l=o.filter(ANe);Hte(),l.forEach(s=>{const u=s.el,c=u.style;Fd(u,a),c.transform=c.webkitTransform=c.transitionDuration="";const d=u[g3]=f=>{f&&f.target!==u||f&&!/transform$/.test(f.propertyName)||(u.removeEventListener("transitionend",d),u[g3]=null,Yf(u,a))};u.addEventListener("transitionend",d)})}),()=>{const a=Zn(e),l=Bte(a);let s=a.tag||bt;o=i,i=t.default?F7(t.default()):[];for(let u=0;u<i.length;u++){const c=i[u];c.key!=null&&z0(c,Lm(c,l,r,n))}if(o)for(let u=0;u<o.length;u++){const c=o[u];z0(c,Lm(c,l,r,n)),VM.set(c,c.el.getBoundingClientRect())}return ie(s,null,i)}}},Sb=Qte;function yNe(e){const t=e.el;t[g3]&&t[g3](),t[HM]&&t[HM]()}function bNe(e){zM.set(e,e.el.getBoundingClientRect())}function ANe(e){const t=VM.get(e),n=zM.get(e),r=t.left-n.left,o=t.top-n.top;if(r||o){const i=e.el.style;return i.transform=i.webkitTransform=`translate(${r}px,${o}px)`,i.transitionDuration="0s",e}}const Xf=e=>{const t=e.props["onUpdate:modelValue"]||!1;return mt(t)?n=>N0(t,n):t};function wNe(e){e.target.composing=!0}function Jte(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}let us,Qf;us=Symbol("_assign"),f0={created(e,{modifiers:{lazy:t,trim:n,number:r}},o){e[us]=Xf(o);const i=r||o.props&&o.props.type==="number";Rd(e,t?"change":"input",a=>{if(a.target.composing)return;let l=e.value;n&&(l=l.trim()),i&&(l=Nm(l)),e[us](l)}),n&&Rd(e,"change",()=>{e.value=e.value.trim()}),t||(Rd(e,"compositionstart",wNe),Rd(e,"compositionend",Jte),Rd(e,"change",Jte))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:r,number:o}},i){if(e[us]=Xf(i),e.composing)return;const a=t??"";if((o||e.type==="number"?Nm(e.value):e.value)!==a){if(document.activeElement===e&&e.type!=="range"&&(n||r&&e.value.trim()===a))return;e.value=a}}},Qf={deep:!0,created(e,t,n){e[us]=Xf(n),Rd(e,"change",()=>{const r=e._modelValue,o=$m(e),i=e.checked,a=e[us];if(mt(r)){const l=d7(r,o),s=l!==-1;if(i&&!s)a(r.concat(o));else if(!i&&s){const u=[...r];u.splice(l,1),a(u)}}else if(Vf(r)){const l=new Set(r);i?l.add(o):l.delete(o),a(l)}else a(nne(e,i))})},mounted:Zte,beforeUpdate(e,t,n){e[us]=Xf(n),Zte(e,t,n)}};function Zte(e,{value:t,oldValue:n},r){e._modelValue=t,mt(t)?e.checked=d7(t,r.props.value)>-1:Vf(t)?e.checked=t.has(r.props.value):t!==n&&(e.checked=zf(t,nne(e,!0)))}const y3={created(e,{value:t},n){e.checked=zf(t,n.props.value),e[us]=Xf(n),Rd(e,"change",()=>{e[us]($m(e))})},beforeUpdate(e,{value:t,oldValue:n},r){e[us]=Xf(r),t!==n&&(e.checked=zf(t,r.props.value))}},ene={deep:!0,created(e,{value:t,modifiers:{number:n}},r){const o=Vf(t);Rd(e,"change",()=>{const i=Array.prototype.filter.call(e.options,a=>a.selected).map(a=>n?Nm($m(a)):$m(a));e[us](e.multiple?o?new Set(i):i:i[0]),e._assigning=!0,St(()=>{e._assigning=!1})}),e[us]=Xf(r)},mounted(e,{value:t,modifiers:{number:n}}){tne(e,t,n)},beforeUpdate(e,t,n){e[us]=Xf(n)},updated(e,{value:t,modifiers:{number:n}}){e._assigning||tne(e,t,n)}};function tne(e,t,n){const r=e.multiple,o=mt(t);if(!r||o||Vf(t)){for(let i=0,a=e.options.length;i<a;i++){const l=e.options[i],s=$m(l);if(r)if(o){const u=typeof s;l.selected=u==="string"||u==="number"?t.includes(n?Nm(s):s):d7(t,s)>-1}else l.selected=t.has(s);else if(zf($m(l),t))return void(e.selectedIndex!==i&&(e.selectedIndex=i))}r||e.selectedIndex===-1||(e.selectedIndex=-1)}}function $m(e){return"_value"in e?e._value:e.value}function nne(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const rne={created(e,t,n){q7(e,t,n,null,"created")},mounted(e,t,n){q7(e,t,n,null,"mounted")},beforeUpdate(e,t,n,r){q7(e,t,n,r,"beforeUpdate")},updated(e,t,n,r){q7(e,t,n,r,"updated")}};function one(e,t){switch(e){case"SELECT":return ene;case"TEXTAREA":return f0;default:switch(t){case"checkbox":return Qf;case"radio":return y3;default:return f0}}}function q7(e,t,n,r,o){const i=one(e.tagName,n.props&&n.props.type)[o];i&&i(e,t,n,r)}let ine,ane,lne,$M;ine=["ctrl","shift","alt","meta"],ane={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ine.some(n=>e[`${n}Key`]&&!t.includes(n))},Gt=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(o,...i)=>{for(let a=0;a<t.length;a++){const l=ane[t[a]];if(l&&l(o,t))return}return e(o,...i)})},lne={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Rr=(e,t)=>{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=o=>{if(!("key"in o))return;const i=Za(o.key);return t.some(a=>a===i||lne[a]===i)?e(o):void 0})},$M=vo({patchProp:(e,t,n,r,o,i,a,l,s)=>{const u=o==="svg";t==="class"?function(c,d,f){const p=c[G0];p&&(d=(d?[d,...p]:[...p]).join(" ")),d==null?c.removeAttribute("class"):f?c.setAttribute("class",d):c.className=d}(e,r,u):t==="style"?function(c,d,f){const p=c.style,m=an(f);let v=!1;if(f&&!m){if(d)if(an(d))for(const g of d.split(";")){const b=g.slice(0,g.indexOf(":")).trim();f[b]==null&&W7(p,b,"")}else for(const g in d)f[g]==null&&W7(p,g,"");for(const g in f)g==="display"&&(v=!0),W7(p,g,f[g])}else if(m){if(d!==f){const g=p[$te];g&&(f+=";"+g),p.cssText=f,v=pNe.test(f)}}else d&&c.removeAttribute("style");v3 in c&&(c[v3]=v?p.display:"",c[RM]&&(p.display="none"))}(e,n,r):Tm(t)?s7(t)||hNe(e,t,0,r,a):(t[0]==="."?(t=t.slice(1),1):t[0]==="^"?(t=t.slice(1),0):function(c,d,f,p){if(p)return d==="innerHTML"||d==="textContent"||!!(d in c&&Yte(d)&&Ut(f));if(d==="spellcheck"||d==="draggable"||d==="translate"||d==="form"||d==="list"&&c.tagName==="INPUT"||d==="type"&&c.tagName==="TEXTAREA")return!1;if(d==="width"||d==="height"){const m=c.tagName;if(m==="IMG"||m==="VIDEO"||m==="CANVAS"||m==="SOURCE")return!1}return Yte(d)&&an(f)?!1:d in c}(e,t,r,u))?function(c,d,f,p,m,v,g){if(d==="innerHTML"||d==="textContent")return p&&g(p,m,v),void(c[d]=f??"");const b=c.tagName;if(d==="value"&&b!=="PROGRESS"&&!b.includes("-")){const w=f??"";return(b==="OPTION"?c.getAttribute("value")||"":c.value)===w&&"_value"in c||(c.value=w),f==null&&c.removeAttribute(d),void(c._value=f)}let y=!1;if(f===""||f==null){const w=typeof c[d];w==="boolean"?f=ZZ(f):f==null&&w==="string"?(f="",y=!0):w==="number"&&(f=0,y=!0)}try{c[d]=f}catch{}y&&c.removeAttribute(d)}(e,t,r,i,a,l,s):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),function(c,d,f,p){if(p&&d.startsWith("xlink:"))f==null?c.removeAttributeNS(Gte,d.slice(6,d.length)):c.setAttributeNS(Gte,d,f);else{const m=AMe(d);f==null||m&&!ZZ(f)?c.removeAttribute(d):c.setAttribute(d,m?"":f)}}(e,t,r,u))}},Fte);let b3,sne=!1;function une(){return b3||(b3=fte($M))}function cne(){return b3=sne?b3:pte($M),sne=!0,b3}const qs=(...e)=>{une().render(...e)},dne=(...e)=>{cne().hydrate(...e)},K7=(...e)=>{const t=une().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=pne(r);if(!o)return;const i=t._component;Ut(i)||i.render||i.template||(i.template=o.innerHTML),o.innerHTML="";const a=n(o,!1,fne(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),a},t};function fne(e){return e instanceof SVGElement?"svg":typeof MathMLElement=="function"&&e instanceof MathMLElement?"mathml":void 0}function pne(e){return an(e)?document.querySelector(e):e}let hne=!1;const xNe=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:zee,BaseTransitionPropsValidators:rM,Comment:hi,DeprecationTypes:null,EffectScope:PT,ErrorCodes:{SETUP_FUNCTION:0,0:"SETUP_FUNCTION",RENDER_FUNCTION:1,1:"RENDER_FUNCTION",WATCH_GETTER:2,2:"WATCH_GETTER",WATCH_CALLBACK:3,3:"WATCH_CALLBACK",WATCH_CLEANUP:4,4:"WATCH_CLEANUP",NATIVE_EVENT_HANDLER:5,5:"NATIVE_EVENT_HANDLER",COMPONENT_EVENT_HANDLER:6,6:"COMPONENT_EVENT_HANDLER",VNODE_HOOK:7,7:"VNODE_HOOK",DIRECTIVE_HOOK:8,8:"DIRECTIVE_HOOK",TRANSITION_HOOK:9,9:"TRANSITION_HOOK",APP_ERROR_HANDLER:10,10:"APP_ERROR_HANDLER",APP_WARN_HANDLER:11,11:"APP_WARN_HANDLER",FUNCTION_REF:12,12:"FUNCTION_REF",ASYNC_COMPONENT_LOADER:13,13:"ASYNC_COMPONENT_LOADER",SCHEDULER:14,14:"SCHEDULER"},ErrorTypeStrings:Ote,Fragment:bt,KeepAlive:oJ,ReactiveEffect:Fm,Static:qf,Suspense:YMe,Teleport:Db,Text:Dc,TrackOpTypes:{GET:"get",HAS:"has",ITERATE:"iterate"},Transition:ca,TransitionGroup:Sb,TriggerOpTypes:{SET:"set",ADD:"add",DELETE:"delete",CLEAR:"clear"},VueElement:G7,assertNumber:function(e,t){},callWithAsyncErrorHandling:ls,callWithErrorHandling:Td,camelize:qi,capitalize:M0,cloneVNode:Tu,compatUtils:null,compile:()=>{},computed:ee,createApp:K7,createBlock:Le,createCommentVNode:Fe,createElementBlock:fe,createElementVNode:ce,createHydrationRenderer:pte,createPropsRestProxy:function(e,t){const n={};for(const r in e)t.includes(r)||Object.defineProperty(n,r,{enumerable:!0,get:()=>e[r]});return n},createRenderer:fte,createSSRApp:(...e)=>{const t=cne().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=pne(r);if(o)return n(o,!0,fne(o))},t},createSlots:Ff,createStaticVNode:function(e,t){const n=ie(qf,null,e);return n.staticCount=t,n},createTextVNode:Dt,createVNode:ie,customRef:KT,defineAsyncComponent:Uee,defineComponent:Te,defineCustomElement:Xte,defineEmits:function(){return null},defineExpose:function(e){},defineModel:function(){},defineOptions:function(e){},defineProps:function(){return null},defineSSRCustomElement:e=>Xte(e,dne),defineSlots:function(){return null},devtools:Tte,effect:function(e,t){e.effect instanceof Fm&&(e=e.effect.fn);const n=new Fm(e,fr,()=>{n.dirty&&n.run()});t&&(vo(n,t),t.scope&&eee(n,t.scope)),t&&t.lazy||n.run();const r=n.run.bind(n);return r.effect=n,r},effectScope:p7,getCurrentInstance:dn,getCurrentScope:Zb,getTransitionRawChildren:F7,guardReactiveProps:TO,h:pn,handleError:L0,hasInjectionContext:nte,hydrate:dne,initCustomFormatter:function(){},initDirectivesForSSR:()=>{hne||(hne=!0,f0.getSSRProps=({value:e})=>({value:e}),y3.getSSRProps=({value:e},t)=>{if(t.props&&zf(t.props.value,e))return{checked:!0}},Qf.getSSRProps=({value:e},t)=>{if(mt(e)){if(t.props&&d7(e,t.props.value)>-1)return{checked:!0}}else if(Vf(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},rne.getSSRProps=(e,t)=>{if(typeof t.type!="string")return;const n=one(t.type.toUpperCase(),t.props&&t.props.type);return n.getSSRProps?n.getSSRProps(e,t):void 0},$n.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}})},inject:Rt,isMemoSame:Dte,isProxy:UT,isReactive:Od,isReadonly:P0,isRef:Jn,isRuntimeOnly:()=>!$7,isShallow:t3,isVNode:oo,markRaw:Fo,mergeDefaults:function(e,t){const n=d3(e);for(const r in t){if(r.startsWith("__skip"))continue;let o=n[r];o?mt(o)||Ut(o)?o=n[r]={type:o,default:t[r]}:o.default=t[r]:o===null&&(o=n[r]={default:t[r]}),o&&t[`__skip_${r}`]&&(o.skipFactory=!0)}return n},mergeModels:function(e,t){return e&&t?mt(e)&&mt(t)?e.concat(t):vo({},d3(e),d3(t)):e||t},mergeProps:Un,nextTick:St,normalizeClass:oe,normalizeProps:iJ,normalizeStyle:$t,onActivated:KO,onBeforeMount:g0,onBeforeUnmount:xo,onBeforeUpdate:u3,onDeactivated:aM,onErrorCaptured:qee,onMounted:yn,onRenderTracked:dM,onRenderTriggered:cM,onScopeDispose:e3,onServerPrefetch:uM,onUnmounted:Vs,onUpdated:zs,openBlock:Y,popScopeId:_w,provide:qn,proxyRefs:qT,pushScopeId:xw,queuePostFlushCb:C7,reactive:Qn,readonly:xd,ref:de,registerRuntimeCompiler:function(e){$7=e,kM=t=>{t.render._rc&&(t.withProxy=new Proxy(t.ctx,ZMe))}},render:qs,renderList:bn,renderSlot:ft,resolveComponent:Qe,resolveDirective:gm,resolveDynamicComponent:Hn,resolveFilter:null,resolveTransitionHooks:Lm,setBlockTracking:_M,setDevtoolsHook:Mte,setTransitionHooks:z0,shallowReactive:x7,shallowReadonly:function(e){return _7(e,!0,kMe,BMe,Aee)},shallowRef:Qo,ssrContextKey:Bee,ssrUtils:Nte,stop:function(e){e.effect.stop()},toDisplayString:Ye,toHandlerKey:Mm,toHandlers:Yee,toRaw:Zn,toRef:dr,toRefs:di,toValue:function(e){return Ut(e)?e():M(e)},transformVNodeArgs:function(e){},triggerRef:function(e){Rm(e,4)},unref:M,useAttrs:yc,useCssModule:function(e="$style"){{const t=dn();if(!t)return Hr;const n=t.type.__cssModules;return n&&n[e]||Hr}},useCssVars:IM,useModel:function(e,t,n=Hr){const r=dn(),o=qi(t),i=Za(t),a=KT((s,u)=>{let c;return jee(()=>{const d=e[t];Ws(c,d)&&(c=d,u())}),{get:()=>(s(),n.get?n.get(c):c),set(d){const f=r.vnode.props;f&&(t in f||o in f||i in f)&&(`onUpdate:${t}`in f||`onUpdate:${o}`in f||`onUpdate:${i}`in f)||!Ws(d,c)||(c=d,u()),r.emit(`update:${t}`,n.set?n.set(d):d)}}}),l=t==="modelValue"?"modelModifiers":`${t}Modifiers`;return a[Symbol.iterator]=()=>{let s=0;return{next:()=>s<2?{value:s++?e[l]||{}:a,done:!1}:{done:!0}}},a},useSSRContext:Pee,useSlots:Ga,useTransitionState:nM,vModelCheckbox:Qf,vModelDynamic:rne,vModelRadio:y3,vModelSelect:ene,vModelText:f0,vShow:$n,version:TM,warn:MM,watch:Je,watchEffect:yl,watchPostEffect:Lee,watchSyncEffect:jee,withAsyncContext:function(e){const t=dn();let n=e();return SM(),D0(n)&&(n=n.catch(r=>{throw W0(t),r})),[n,()=>W0(t)]},withCtx:he,withDefaults:function(e,t){return null},withDirectives:nn,withKeys:Rr,withMemo:function(e,t,n,r){const o=n[r];if(o&&Dte(o,e))return o;const i=t();return i.memo=e.slice(),n[r]=i},withModifiers:Gt,withScopeId:e=>he},Symbol.toStringTag,{value:"Module"}));var Xe=STe,Dn=hMe,or=Bb(xNe);const vne="9.10.2",mne=Dn.CoreWarnCodes.__EXTEND_POINT__,Id=Xe.incrementer(mne),Eo={FALLBACK_TO_ROOT:mne,NOT_SUPPORTED_PRESERVE:Id(),NOT_SUPPORTED_FORMATTER:Id(),NOT_SUPPORTED_PRESERVE_DIRECTIVE:Id(),NOT_SUPPORTED_GET_CHOICE_INDEX:Id(),COMPONENT_NAME_LEGACY_COMPATIBLE:Id(),NOT_FOUND_PARENT_SCOPE:Id(),IGNORE_OBJ_FLATTEN:Id(),NOTICE_DROP_ALLOW_COMPOSITION:Id(),NOTICE_DROP_TRANSLATE_EXIST_COMPATIBLE_FLAG:Id()},_Ne={[Eo.FALLBACK_TO_ROOT]:"Fall back to {type} '{key}' with root locale.",[Eo.NOT_SUPPORTED_PRESERVE]:"Not supported 'preserve'.",[Eo.NOT_SUPPORTED_FORMATTER]:"Not supported 'formatter'.",[Eo.NOT_SUPPORTED_PRESERVE_DIRECTIVE]:"Not supported 'preserveDirectiveContent'.",[Eo.NOT_SUPPORTED_GET_CHOICE_INDEX]:"Not supported 'getChoiceIndex'.",[Eo.COMPONENT_NAME_LEGACY_COMPATIBLE]:"Component name legacy compatible: '{name}' -> 'i18n'",[Eo.NOT_FOUND_PARENT_SCOPE]:"Not found parent scope. use the global scope.",[Eo.IGNORE_OBJ_FLATTEN]:"Ignore object flatten: '{key}' key has an string value",[Eo.NOTICE_DROP_ALLOW_COMPOSITION]:"'allowComposition' option will be dropped in the next major version. For more information, please see \u{1F449} https://tinyurl.com/2p97mcze",[Eo.NOTICE_DROP_TRANSLATE_EXIST_COMPATIBLE_FLAG]:"'translateExistCompatible' option will be dropped in the next major version."};function Dl(e,...t){return Xe.format(_Ne[e],...t)}const gne=Dn.CoreErrorCodes.__EXTEND_POINT__,Ol=Xe.incrementer(gne),Fr={UNEXPECTED_RETURN_TYPE:gne,INVALID_ARGUMENT:Ol(),MUST_BE_CALL_SETUP_TOP:Ol(),NOT_INSTALLED:Ol(),NOT_AVAILABLE_IN_LEGACY_MODE:Ol(),REQUIRED_VALUE:Ol(),INVALID_VALUE:Ol(),CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:Ol(),NOT_INSTALLED_WITH_PROVIDE:Ol(),UNEXPECTED_ERROR:Ol(),NOT_COMPATIBLE_LEGACY_VUE_I18N:Ol(),BRIDGE_SUPPORT_VUE_2_ONLY:Ol(),MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION:Ol(),NOT_AVAILABLE_COMPOSITION_IN_LEGACY:Ol(),__EXTEND_POINT__:Ol()};function Oi(e,...t){return Dn.createCompileError(e,null,{messages:ENe,args:t})}const ENe={[Fr.UNEXPECTED_RETURN_TYPE]:"Unexpected return type in composer",[Fr.INVALID_ARGUMENT]:"Invalid argument",[Fr.MUST_BE_CALL_SETUP_TOP]:"Must be called at the top of a `setup` function",[Fr.NOT_INSTALLED]:"Need to install with `app.use` function",[Fr.UNEXPECTED_ERROR]:"Unexpected error",[Fr.NOT_AVAILABLE_IN_LEGACY_MODE]:"Not available in legacy mode",[Fr.REQUIRED_VALUE]:"Required in value: {0}",[Fr.INVALID_VALUE]:"Invalid value",[Fr.CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN]:"Cannot setup vue-devtools plugin",[Fr.NOT_INSTALLED_WITH_PROVIDE]:"Need to install with `provide` function",[Fr.NOT_COMPATIBLE_LEGACY_VUE_I18N]:"Not compatible legacy VueI18n.",[Fr.BRIDGE_SUPPORT_VUE_2_ONLY]:"vue-i18n-bridge support Vue 2.x only",[Fr.MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION]:"Must define \u2018i18n\u2019 option or custom block in Composition API with using local scope in Legacy API mode",[Fr.NOT_AVAILABLE_COMPOSITION_IN_LEGACY]:"Not available Compostion API in Legacy API mode. Please make sure that the legacy API mode is working properly"},UM=Xe.makeSymbol("__translateVNode"),WM=Xe.makeSymbol("__datetimeParts"),GM=Xe.makeSymbol("__numberParts"),qM=Xe.makeSymbol("__enableEmitter"),KM=Xe.makeSymbol("__disableEmitter"),yne=Xe.makeSymbol("__setPluralRules");Xe.makeSymbol("__intlifyMeta");const bne=Xe.makeSymbol("__injectWithOption"),YM=Xe.makeSymbol("__dispose");function A3(e){if(!Xe.isObject(e))return e;for(const t in e)if(Xe.hasOwn(e,t))if(t.includes(".")){const n=t.split("."),r=n.length-1;let o=e,i=!1;for(let a=0;a<r;a++){if(n[a]in o||(o[n[a]]={}),!Xe.isObject(o[n[a]])){Xe.warn(Dl(Eo.IGNORE_OBJ_FLATTEN,{key:n[a]})),i=!0;break}o=o[n[a]]}i||(o[n[r]]=e[t],delete e[t]),Xe.isObject(o[n[r]])&&A3(o[n[r]])}else Xe.isObject(e[t])&&A3(e[t]);return e}function Y7(e,t){const{messages:n,__i18n:r,messageResolver:o,flatJson:i}=t,a=Xe.isPlainObject(n)?n:Xe.isArray(r)?{}:{[e]:{}};if(Xe.isArray(r)&&r.forEach(l=>{if("locale"in l&&"resource"in l){const{locale:s,resource:u}=l;s?(a[s]=a[s]||{},Xe.deepCopy(u,a[s])):Xe.deepCopy(u,a)}else Xe.isString(l)&&Xe.deepCopy(JSON.parse(l),a)}),o==null&&i)for(const l in a)Xe.hasOwn(a,l)&&A3(a[l]);return a}function Ane(e){return e.type}function wne(e,t,n){let r=Xe.isObject(t.messages)?t.messages:{};"__i18nGlobal"in n&&(r=Y7(e.locale.value,{messages:r,__i18n:n.__i18nGlobal}));const o=Object.keys(r);if(o.length&&o.forEach(i=>{e.mergeLocaleMessage(i,r[i])}),Xe.isObject(t.datetimeFormats)){const i=Object.keys(t.datetimeFormats);i.length&&i.forEach(a=>{e.mergeDateTimeFormat(a,t.datetimeFormats[a])})}if(Xe.isObject(t.numberFormats)){const i=Object.keys(t.numberFormats);i.length&&i.forEach(a=>{e.mergeNumberFormat(a,t.numberFormats[a])})}}function xne(e){return or.createVNode(or.Text,null,e,0)}const _ne="__INTLIFY_META__",Ene=()=>[],CNe=()=>!1;let Cne=0;function Sne(e){return(t,n,r,o)=>e(n,r,or.getCurrentInstance()||void 0,o)}const SNe=()=>{const e=or.getCurrentInstance();let t=null;return e&&(t=Ane(e)[_ne])?{[_ne]:t}:null};function XM(e={},t){const{__root:n,__injectWithOption:r}=e,o=n===void 0,i=e.flatJson,a=Xe.inBrowser?or.ref:or.shallowRef,l=!!e.translateExistCompatible;l&&Xe.warnOnce(Dl(Eo.NOTICE_DROP_TRANSLATE_EXIST_COMPATIBLE_FLAG));let s=!Xe.isBoolean(e.inheritLocale)||e.inheritLocale;const u=a(n&&s?n.locale.value:Xe.isString(e.locale)?e.locale:Dn.DEFAULT_LOCALE),c=a(n&&s?n.fallbackLocale.value:Xe.isString(e.fallbackLocale)||Xe.isArray(e.fallbackLocale)||Xe.isPlainObject(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:u.value),d=a(Y7(u.value,e)),f=a(Xe.isPlainObject(e.datetimeFormats)?e.datetimeFormats:{[u.value]:{}}),p=a(Xe.isPlainObject(e.numberFormats)?e.numberFormats:{[u.value]:{}});let m=n?n.missingWarn:!Xe.isBoolean(e.missingWarn)&&!Xe.isRegExp(e.missingWarn)||e.missingWarn,v=n?n.fallbackWarn:!Xe.isBoolean(e.fallbackWarn)&&!Xe.isRegExp(e.fallbackWarn)||e.fallbackWarn,g=n?n.fallbackRoot:!Xe.isBoolean(e.fallbackRoot)||e.fallbackRoot,b=!!e.fallbackFormat,y=Xe.isFunction(e.missing)?e.missing:null,w=Xe.isFunction(e.missing)?Sne(e.missing):null,x=Xe.isFunction(e.postTranslation)?e.postTranslation:null,_=n?n.warnHtmlMessage:!Xe.isBoolean(e.warnHtmlMessage)||e.warnHtmlMessage,E=!!e.escapeParameter;const C=n?n.modifiers:Xe.isPlainObject(e.modifiers)?e.modifiers:{};let T,k=e.pluralRules||n&&n.pluralRules;T=(()=>{o&&Dn.setFallbackContext(null);const G={version:vne,locale:u.value,fallbackLocale:c.value,messages:d.value,modifiers:C,pluralRules:k,missing:w===null?void 0:w,missingWarn:m,fallbackWarn:v,fallbackFormat:b,unresolving:!0,postTranslation:x===null?void 0:x,warnHtmlMessage:_,escapeParameter:E,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:"vue"}};G.datetimeFormats=f.value,G.numberFormats=p.value,G.__datetimeFormatters=Xe.isPlainObject(T)?T.__datetimeFormatters:void 0,G.__numberFormatters=Xe.isPlainObject(T)?T.__numberFormatters:void 0,G.__v_emitter=Xe.isPlainObject(T)?T.__v_emitter:void 0;const z=Dn.createCoreContext(G);return o&&Dn.setFallbackContext(z),z})(),Dn.updateFallbackLocale(T,u.value,c.value);const I=or.computed({get:()=>u.value,set:G=>{u.value=G,T.locale=u.value}}),O=or.computed({get:()=>c.value,set:G=>{c.value=G,T.fallbackLocale=c.value,Dn.updateFallbackLocale(T,u.value,G)}}),F=or.computed(()=>d.value),N=or.computed(()=>f.value),B=or.computed(()=>p.value),P=(G,z,$,W,K,X)=>{let te;u.value,c.value,d.value,f.value,p.value;try{Dn.setAdditionalMeta(SNe()),o||(T.fallbackContext=n?Dn.getFallbackContext():void 0),te=G(T)}finally{Dn.setAdditionalMeta(null),o||(T.fallbackContext=void 0)}if($!=="translate exists"&&Xe.isNumber(te)&&te===Dn.NOT_REOSLVED||$==="translate exists"&&!te){const[ne,se]=z();if(n&&Xe.isString(ne)&&function(le,J){return le!=="translate"||!J.resolvedMessage}($,se)){g&&(Dn.isTranslateFallbackWarn(v,ne)||Dn.isTranslateMissingWarn(m,ne))&&Xe.warn(Dl(Eo.FALLBACK_TO_ROOT,{key:ne,type:$}));{const{__v_emitter:le}=T;le&&g&&le.emit("fallback",{type:$,key:ne,to:"global",groupId:`${$}:${ne}`})}}return n&&g?W(n):K(ne)}if(X(te))return te;throw Oi(Fr.UNEXPECTED_RETURN_TYPE)};function V(...G){return P(z=>Reflect.apply(Dn.translate,null,[z,...G]),()=>Dn.parseTranslateArgs(...G),"translate",z=>Reflect.apply(z.t,z,[...G]),z=>z,z=>Xe.isString(z))}const L={normalize:function(G){return G.map(z=>Xe.isString(z)||Xe.isNumber(z)||Xe.isBoolean(z)?xne(String(z)):z)},interpolate:G=>G,type:"vnode"};function H(G){return d.value[G]||{}}Cne++,n&&Xe.inBrowser&&(or.watch(n.locale,G=>{s&&(u.value=G,T.locale=G,Dn.updateFallbackLocale(T,u.value,c.value))}),or.watch(n.fallbackLocale,G=>{s&&(c.value=G,T.fallbackLocale=G,Dn.updateFallbackLocale(T,u.value,c.value))}));const U={id:Cne,locale:I,fallbackLocale:O,get inheritLocale(){return s},set inheritLocale(G){s=G,G&&n&&(u.value=n.locale.value,c.value=n.fallbackLocale.value,Dn.updateFallbackLocale(T,u.value,c.value))},get availableLocales(){return Object.keys(d.value).sort()},messages:F,get modifiers(){return C},get pluralRules(){return k||{}},get isGlobal(){return o},get missingWarn(){return m},set missingWarn(G){m=G,T.missingWarn=m},get fallbackWarn(){return v},set fallbackWarn(G){v=G,T.fallbackWarn=v},get fallbackRoot(){return g},set fallbackRoot(G){g=G},get fallbackFormat(){return b},set fallbackFormat(G){b=G,T.fallbackFormat=b},get warnHtmlMessage(){return _},set warnHtmlMessage(G){_=G,T.warnHtmlMessage=G},get escapeParameter(){return E},set escapeParameter(G){E=G,T.escapeParameter=G},t:V,getLocaleMessage:H,setLocaleMessage:function(G,z){if(i){const $={[G]:z};for(const W in $)Xe.hasOwn($,W)&&A3($[W]);z=$[G]}d.value[G]=z,T.messages=d.value},mergeLocaleMessage:function(G,z){d.value[G]=d.value[G]||{};const $={[G]:z};if(i)for(const W in $)Xe.hasOwn($,W)&&A3($[W]);z=$[G],Xe.deepCopy(z,d.value[G]),T.messages=d.value},getPostTranslationHandler:function(){return Xe.isFunction(x)?x:null},setPostTranslationHandler:function(G){x=G,T.postTranslation=G},getMissingHandler:function(){return y},setMissingHandler:function(G){G!==null&&(w=Sne(G)),y=G,T.missing=w},[yne]:function(G){k=G,T.pluralRules=k}};return U.datetimeFormats=N,U.numberFormats=B,U.rt=function(...G){const[z,$,W]=G;if(W&&!Xe.isObject(W))throw Oi(Fr.INVALID_ARGUMENT);return V(z,$,Xe.assign({resolvedMessage:!0},W||{}))},U.te=function(G,z){return P(()=>{if(!G)return!1;const $=H(Xe.isString(z)?z:u.value),W=T.messageResolver($,G);return l?W!=null:Dn.isMessageAST(W)||Dn.isMessageFunction(W)||Xe.isString(W)},()=>[G],"translate exists",$=>Reflect.apply($.te,$,[G,z]),CNe,$=>Xe.isBoolean($))},U.tm=function(G){const z=function($){let W=null;const K=Dn.fallbackWithLocaleChain(T,c.value,u.value);for(let X=0;X<K.length;X++){const te=d.value[K[X]]||{},ne=T.messageResolver(te,$);if(ne!=null){W=ne;break}}return W}(G);return z??(n&&n.tm(G)||{})},U.d=function(...G){return P(z=>Reflect.apply(Dn.datetime,null,[z,...G]),()=>Dn.parseDateTimeArgs(...G),"datetime format",z=>Reflect.apply(z.d,z,[...G]),()=>Dn.MISSING_RESOLVE_VALUE,z=>Xe.isString(z))},U.n=function(...G){return P(z=>Reflect.apply(Dn.number,null,[z,...G]),()=>Dn.parseNumberArgs(...G),"number format",z=>Reflect.apply(z.n,z,[...G]),()=>Dn.MISSING_RESOLVE_VALUE,z=>Xe.isString(z))},U.getDateTimeFormat=function(G){return f.value[G]||{}},U.setDateTimeFormat=function(G,z){f.value[G]=z,T.datetimeFormats=f.value,Dn.clearDateTimeFormat(T,G,z)},U.mergeDateTimeFormat=function(G,z){f.value[G]=Xe.assign(f.value[G]||{},z),T.datetimeFormats=f.value,Dn.clearDateTimeFormat(T,G,z)},U.getNumberFormat=function(G){return p.value[G]||{}},U.setNumberFormat=function(G,z){p.value[G]=z,T.numberFormats=p.value,Dn.clearNumberFormat(T,G,z)},U.mergeNumberFormat=function(G,z){p.value[G]=Xe.assign(p.value[G]||{},z),T.numberFormats=p.value,Dn.clearNumberFormat(T,G,z)},U[bne]=r,U[UM]=function(...G){return P(z=>{let $;const W=z;try{W.processor=L,$=Reflect.apply(Dn.translate,null,[W,...G])}finally{W.processor=null}return $},()=>Dn.parseTranslateArgs(...G),"translate",z=>z[UM](...G),z=>[xne(z)],z=>Xe.isArray(z))},U[WM]=function(...G){return P(z=>Reflect.apply(Dn.datetime,null,[z,...G]),()=>Dn.parseDateTimeArgs(...G),"datetime format",z=>z[WM](...G),Ene,z=>Xe.isString(z)||Xe.isArray(z))},U[GM]=function(...G){return P(z=>Reflect.apply(Dn.number,null,[z,...G]),()=>Dn.parseNumberArgs(...G),"number format",z=>z[GM](...G),Ene,z=>Xe.isString(z)||Xe.isArray(z))},U[qM]=G=>{T.__v_emitter=G},U[KM]=()=>{T.__v_emitter=void 0},U}function QM(e={},t){{const n=XM(function(i){const a=Xe.isString(i.locale)?i.locale:Dn.DEFAULT_LOCALE,l=Xe.isString(i.fallbackLocale)||Xe.isArray(i.fallbackLocale)||Xe.isPlainObject(i.fallbackLocale)||i.fallbackLocale===!1?i.fallbackLocale:a,s=Xe.isFunction(i.missing)?i.missing:void 0,u=!Xe.isBoolean(i.silentTranslationWarn)&&!Xe.isRegExp(i.silentTranslationWarn)||!i.silentTranslationWarn,c=!Xe.isBoolean(i.silentFallbackWarn)&&!Xe.isRegExp(i.silentFallbackWarn)||!i.silentFallbackWarn,d=!Xe.isBoolean(i.fallbackRoot)||i.fallbackRoot,f=!!i.formatFallbackMessages,p=Xe.isPlainObject(i.modifiers)?i.modifiers:{},m=i.pluralizationRules,v=Xe.isFunction(i.postTranslation)?i.postTranslation:void 0,g=!Xe.isString(i.warnHtmlInMessage)||i.warnHtmlInMessage!=="off",b=!!i.escapeParameterHtml,y=!Xe.isBoolean(i.sync)||i.sync;i.formatter&&Xe.warn(Dl(Eo.NOT_SUPPORTED_FORMATTER)),i.preserveDirectiveContent&&Xe.warn(Dl(Eo.NOT_SUPPORTED_PRESERVE_DIRECTIVE));let w=i.messages;if(Xe.isPlainObject(i.sharedMessages)){const O=i.sharedMessages;w=Object.keys(O).reduce((F,N)=>{const B=F[N]||(F[N]={});return Xe.assign(B,O[N]),F},w||{})}const{__i18n:x,__root:_,__injectWithOption:E}=i,C=i.datetimeFormats,T=i.numberFormats,k=i.flatJson,I=i.translateExistCompatible;return{locale:a,fallbackLocale:l,messages:w,flatJson:k,datetimeFormats:C,numberFormats:T,missing:s,missingWarn:u,fallbackWarn:c,fallbackRoot:d,fallbackFormat:f,modifiers:p,pluralRules:m,postTranslation:v,warnHtmlMessage:g,escapeParameter:b,messageResolver:i.messageResolver,inheritLocale:y,translateExistCompatible:I,__i18n:x,__root:_,__injectWithOption:E}}(e)),{__extender:r}=e,o={id:n.id,get locale(){return n.locale.value},set locale(i){n.locale.value=i},get fallbackLocale(){return n.fallbackLocale.value},set fallbackLocale(i){n.fallbackLocale.value=i},get messages(){return n.messages.value},get datetimeFormats(){return n.datetimeFormats.value},get numberFormats(){return n.numberFormats.value},get availableLocales(){return n.availableLocales},get formatter(){return Xe.warn(Dl(Eo.NOT_SUPPORTED_FORMATTER)),{interpolate:()=>[]}},set formatter(i){Xe.warn(Dl(Eo.NOT_SUPPORTED_FORMATTER))},get missing(){return n.getMissingHandler()},set missing(i){n.setMissingHandler(i)},get silentTranslationWarn(){return Xe.isBoolean(n.missingWarn)?!n.missingWarn:n.missingWarn},set silentTranslationWarn(i){n.missingWarn=Xe.isBoolean(i)?!i:i},get silentFallbackWarn(){return Xe.isBoolean(n.fallbackWarn)?!n.fallbackWarn:n.fallbackWarn},set silentFallbackWarn(i){n.fallbackWarn=Xe.isBoolean(i)?!i:i},get modifiers(){return n.modifiers},get formatFallbackMessages(){return n.fallbackFormat},set formatFallbackMessages(i){n.fallbackFormat=i},get postTranslation(){return n.getPostTranslationHandler()},set postTranslation(i){n.setPostTranslationHandler(i)},get sync(){return n.inheritLocale},set sync(i){n.inheritLocale=i},get warnHtmlInMessage(){return n.warnHtmlMessage?"warn":"off"},set warnHtmlInMessage(i){n.warnHtmlMessage=i!=="off"},get escapeParameterHtml(){return n.escapeParameter},set escapeParameterHtml(i){n.escapeParameter=i},get preserveDirectiveContent(){return Xe.warn(Dl(Eo.NOT_SUPPORTED_PRESERVE_DIRECTIVE)),!0},set preserveDirectiveContent(i){Xe.warn(Dl(Eo.NOT_SUPPORTED_PRESERVE_DIRECTIVE))},get pluralizationRules(){return n.pluralRules||{}},__composer:n,t(...i){const[a,l,s]=i,u={};let c=null,d=null;if(!Xe.isString(a))throw Oi(Fr.INVALID_ARGUMENT);const f=a;return Xe.isString(l)?u.locale=l:Xe.isArray(l)?c=l:Xe.isPlainObject(l)&&(d=l),Xe.isArray(s)?c=s:Xe.isPlainObject(s)&&(d=s),Reflect.apply(n.t,n,[f,c||d||{},u])},rt:(...i)=>Reflect.apply(n.rt,n,[...i]),tc(...i){const[a,l,s]=i,u={plural:1};let c=null,d=null;if(!Xe.isString(a))throw Oi(Fr.INVALID_ARGUMENT);const f=a;return Xe.isString(l)?u.locale=l:Xe.isNumber(l)?u.plural=l:Xe.isArray(l)?c=l:Xe.isPlainObject(l)&&(d=l),Xe.isString(s)?u.locale=s:Xe.isArray(s)?c=s:Xe.isPlainObject(s)&&(d=s),Reflect.apply(n.t,n,[f,c||d||{},u])},te:(i,a)=>n.te(i,a),tm:i=>n.tm(i),getLocaleMessage:i=>n.getLocaleMessage(i),setLocaleMessage(i,a){n.setLocaleMessage(i,a)},mergeLocaleMessage(i,a){n.mergeLocaleMessage(i,a)},d:(...i)=>Reflect.apply(n.d,n,[...i]),getDateTimeFormat:i=>n.getDateTimeFormat(i),setDateTimeFormat(i,a){n.setDateTimeFormat(i,a)},mergeDateTimeFormat(i,a){n.mergeDateTimeFormat(i,a)},n:(...i)=>Reflect.apply(n.n,n,[...i]),getNumberFormat:i=>n.getNumberFormat(i),setNumberFormat(i,a){n.setNumberFormat(i,a)},mergeNumberFormat(i,a){n.mergeNumberFormat(i,a)},getChoiceIndex:(i,a)=>(Xe.warn(Dl(Eo.NOT_SUPPORTED_GET_CHOICE_INDEX)),-1)};return o.__extender=r,o.__enableEmitter=i=>{const a=n;a[qM]&&a[qM](i)},o.__disableEmitter=()=>{const i=n;i[KM]&&i[KM]()},o}}const JM={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e==="parent"||e==="global",default:"parent"},i18n:{type:Object}};function kne(e){return or.Fragment}const kNe=or.defineComponent({name:"i18n-t",props:Xe.assign({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>Xe.isNumber(e)||!isNaN(e)}},JM),setup(e,t){const{slots:n,attrs:r}=t,o=e.i18n||J7({useScope:e.scope,__useComponent:!0});return()=>{const i=Object.keys(n).filter(d=>d!=="_"),a={};e.locale&&(a.locale=e.locale),e.plural!==void 0&&(a.plural=Xe.isString(e.plural)?+e.plural:e.plural);const l=function({slots:d},f){return f.length===1&&f[0]==="default"?(d.default?d.default():[]).reduce((p,m)=>[...p,...m.type===or.Fragment?m.children:[m]],[]):f.reduce((p,m)=>{const v=d[m];return v&&(p[m]=v()),p},{})}(t,i),s=o[UM](e.keypath,l,a),u=Xe.assign({},r),c=Xe.isString(e.tag)||Xe.isObject(e.tag)?e.tag:kne();return or.h(c,u,s)}}}),w3=kNe,DNe=w3;function Dne(e,t,n,r){const{slots:o,attrs:i}=t;return()=>{const a={part:!0};let l={};e.locale&&(a.locale=e.locale),Xe.isString(e.format)?a.key=e.format:Xe.isObject(e.format)&&(Xe.isString(e.format.key)&&(a.key=e.format.key),l=Object.keys(e.format).reduce((f,p)=>n.includes(p)?Xe.assign({},f,{[p]:e.format[p]}):f,{}));const s=r(e.value,a,l);let u=[a.key];Xe.isArray(s)?u=s.map((f,p)=>{const m=o[f.type],v=m?m({[f.type]:f.value,index:p,parts:s}):[f.value];var g;return g=v,Xe.isArray(g)&&!Xe.isString(g[0])&&(v[0].key=`${f.type}-${p}`),v}):Xe.isString(s)&&(u=[s]);const c=Xe.assign({},i),d=Xe.isString(e.tag)||Xe.isObject(e.tag)?e.tag:kne();return or.h(d,c,u)}}const ONe=or.defineComponent({name:"i18n-n",props:Xe.assign({value:{type:Number,required:!0},format:{type:[String,Object]}},JM),setup(e,t){const n=e.i18n||J7({useScope:"parent",__useComponent:!0});return Dne(e,t,Dn.NUMBER_FORMAT_OPTIONS_KEYS,(...r)=>n[GM](...r))}}),X7=ONe,TNe=X7,MNe=or.defineComponent({name:"i18n-d",props:Xe.assign({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},JM),setup(e,t){const n=e.i18n||J7({useScope:"parent",__useComponent:!0});return Dne(e,t,Dn.DATETIME_FORMAT_OPTIONS_KEYS,(...r)=>n[WM](...r))}}),Q7=MNe,NNe=Q7;function One(e){const t=n=>{const{instance:r,modifiers:o,value:i}=n;if(!r||!r.$)throw Oi(Fr.UNEXPECTED_ERROR);const a=function(s,u){const c=s;if(s.mode==="composition")return c.__getInstance(u)||s.global;{const d=c.__getInstance(u);return d!=null?d.__composer:s.global.__composer}}(e,r.$);o.preserve&&Xe.warn(Dl(Eo.NOT_SUPPORTED_PRESERVE));const l=Tne(i);return[Reflect.apply(a.t,a,[...Mne(l)]),a]};return{created:(n,r)=>{const[o,i]=t(r);Xe.inBrowser&&e.global===i&&(n.__i18nWatcher=or.watch(i.locale,()=>{r.instance&&r.instance.$forceUpdate()})),n.__composer=i,n.textContent=o},unmounted:n=>{Xe.inBrowser&&n.__i18nWatcher&&(n.__i18nWatcher(),n.__i18nWatcher=void 0,delete n.__i18nWatcher),n.__composer&&(n.__composer=void 0,delete n.__composer)},beforeUpdate:(n,{value:r})=>{if(n.__composer){const o=n.__composer,i=Tne(r);n.textContent=Reflect.apply(o.t,o,[...Mne(i)])}},getSSRProps:n=>{const[r]=t(n);return{textContent:r}}}}function Tne(e){if(Xe.isString(e))return{path:e};if(Xe.isPlainObject(e)){if(!("path"in e))throw Oi(Fr.REQUIRED_VALUE,"path");return e}throw Oi(Fr.INVALID_VALUE)}function Mne(e){const{path:t,locale:n,args:r,choice:o,plural:i}=e,a={},l=r||{};return Xe.isString(n)&&(a.locale=n),Xe.isNumber(o)&&(a.plural=o),Xe.isNumber(i)&&(a.plural=i),[t,l,a]}function Nne(e,t){e.locale=t.locale||e.locale,e.fallbackLocale=t.fallbackLocale||e.fallbackLocale,e.missing=t.missing||e.missing,e.silentTranslationWarn=t.silentTranslationWarn||e.silentFallbackWarn,e.silentFallbackWarn=t.silentFallbackWarn||e.silentFallbackWarn,e.formatFallbackMessages=t.formatFallbackMessages||e.formatFallbackMessages,e.postTranslation=t.postTranslation||e.postTranslation,e.warnHtmlInMessage=t.warnHtmlInMessage||e.warnHtmlInMessage,e.escapeParameterHtml=t.escapeParameterHtml||e.escapeParameterHtml,e.sync=t.sync||e.sync,e.__composer[yne](t.pluralizationRules||e.pluralizationRules);const n=Y7(e.locale,{messages:t.messages,__i18n:t.__i18n});return Object.keys(n).forEach(r=>e.mergeLocaleMessage(r,n[r])),t.datetimeFormats&&Object.keys(t.datetimeFormats).forEach(r=>e.mergeDateTimeFormat(r,t.datetimeFormats[r])),t.numberFormats&&Object.keys(t.numberFormats).forEach(r=>e.mergeNumberFormat(r,t.numberFormats[r])),e}const Fne=Xe.makeSymbol("global-vue-i18n");function J7(e={}){const t=or.getCurrentInstance();if(t==null)throw Oi(Fr.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw Oi(Fr.NOT_INSTALLED);const n=function(s){{const u=or.inject(s.isCE?Fne:s.appContext.app.__VUE_I18N_SYMBOL__);if(!u)throw Oi(s.isCE?Fr.NOT_INSTALLED_WITH_PROVIDE:Fr.UNEXPECTED_ERROR);return u}}(t),r=function(s){return s.mode==="composition"?s.global:s.global.__composer}(n),o=Ane(t),i=function(s,u){return Xe.isEmptyObject(s)?"__i18n"in u?"local":"global":s.useScope?s.useScope:"local"}(e,o);if(n.mode==="legacy"&&!e.__useComponent){if(!n.allowComposition)throw Oi(Fr.NOT_AVAILABLE_IN_LEGACY_MODE);return function(s,u,c,d={}){const f=u==="local",p=or.shallowRef(null);if(f&&s.proxy&&!s.proxy.$options.i18n&&!s.proxy.$options.__i18n)throw Oi(Fr.MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION);const m=Xe.isBoolean(d.inheritLocale)?d.inheritLocale:!Xe.isString(d.locale),v=or.ref(!f||m?c.locale.value:Xe.isString(d.locale)?d.locale:Dn.DEFAULT_LOCALE),g=or.ref(!f||m?c.fallbackLocale.value:Xe.isString(d.fallbackLocale)||Xe.isArray(d.fallbackLocale)||Xe.isPlainObject(d.fallbackLocale)||d.fallbackLocale===!1?d.fallbackLocale:v.value),b=or.ref(Y7(v.value,d)),y=or.ref(Xe.isPlainObject(d.datetimeFormats)?d.datetimeFormats:{[v.value]:{}}),w=or.ref(Xe.isPlainObject(d.numberFormats)?d.numberFormats:{[v.value]:{}}),x=f?c.missingWarn:!Xe.isBoolean(d.missingWarn)&&!Xe.isRegExp(d.missingWarn)||d.missingWarn,_=f?c.fallbackWarn:!Xe.isBoolean(d.fallbackWarn)&&!Xe.isRegExp(d.fallbackWarn)||d.fallbackWarn,E=f?c.fallbackRoot:!Xe.isBoolean(d.fallbackRoot)||d.fallbackRoot,C=!!d.fallbackFormat,T=Xe.isFunction(d.missing)?d.missing:null,k=Xe.isFunction(d.postTranslation)?d.postTranslation:null,I=f?c.warnHtmlMessage:!Xe.isBoolean(d.warnHtmlMessage)||d.warnHtmlMessage,O=!!d.escapeParameter,F=f?c.modifiers:Xe.isPlainObject(d.modifiers)?d.modifiers:{},N=d.pluralRules||f&&c.pluralRules;function B(){return[v.value,g.value,b.value,y.value,w.value]}const P=or.computed({get:()=>p.value?p.value.locale.value:v.value,set:ge=>{p.value&&(p.value.locale.value=ge),v.value=ge}}),V=or.computed({get:()=>p.value?p.value.fallbackLocale.value:g.value,set:ge=>{p.value&&(p.value.fallbackLocale.value=ge),g.value=ge}}),L=or.computed(()=>p.value?p.value.messages.value:b.value),H=or.computed(()=>y.value),U=or.computed(()=>w.value);function G(){return p.value?p.value.getPostTranslationHandler():k}function z(ge){p.value&&p.value.setPostTranslationHandler(ge)}function $(){return p.value?p.value.getMissingHandler():T}function W(ge){p.value&&p.value.setMissingHandler(ge)}function K(ge){return B(),ge()}function X(...ge){return p.value?K(()=>Reflect.apply(p.value.t,null,[...ge])):K(()=>"")}function te(...ge){return p.value?Reflect.apply(p.value.rt,null,[...ge]):""}function ne(...ge){return p.value?K(()=>Reflect.apply(p.value.d,null,[...ge])):K(()=>"")}function se(...ge){return p.value?K(()=>Reflect.apply(p.value.n,null,[...ge])):K(()=>"")}function le(ge){return p.value?p.value.tm(ge):{}}function J(ge,We){return!!p.value&&p.value.te(ge,We)}function Z(ge){return p.value?p.value.getLocaleMessage(ge):{}}function ye(ge,We){p.value&&(p.value.setLocaleMessage(ge,We),b.value[ge]=We)}function be(ge,We){p.value&&p.value.mergeLocaleMessage(ge,We)}function ve(ge){return p.value?p.value.getDateTimeFormat(ge):{}}function Ae(ge,We){p.value&&(p.value.setDateTimeFormat(ge,We),y.value[ge]=We)}function Ce(ge,We){p.value&&p.value.mergeDateTimeFormat(ge,We)}function _e(ge){return p.value?p.value.getNumberFormat(ge):{}}function ke(ge,We){p.value&&(p.value.setNumberFormat(ge,We),w.value[ge]=We)}function Be(ge,We){p.value&&p.value.mergeNumberFormat(ge,We)}const $e={get id(){return p.value?p.value.id:-1},locale:P,fallbackLocale:V,messages:L,datetimeFormats:H,numberFormats:U,get inheritLocale(){return p.value?p.value.inheritLocale:m},set inheritLocale(ge){p.value&&(p.value.inheritLocale=ge)},get availableLocales(){return p.value?p.value.availableLocales:Object.keys(b.value)},get modifiers(){return p.value?p.value.modifiers:F},get pluralRules(){return p.value?p.value.pluralRules:N},get isGlobal(){return!!p.value&&p.value.isGlobal},get missingWarn(){return p.value?p.value.missingWarn:x},set missingWarn(ge){p.value&&(p.value.missingWarn=ge)},get fallbackWarn(){return p.value?p.value.fallbackWarn:_},set fallbackWarn(ge){p.value&&(p.value.missingWarn=ge)},get fallbackRoot(){return p.value?p.value.fallbackRoot:E},set fallbackRoot(ge){p.value&&(p.value.fallbackRoot=ge)},get fallbackFormat(){return p.value?p.value.fallbackFormat:C},set fallbackFormat(ge){p.value&&(p.value.fallbackFormat=ge)},get warnHtmlMessage(){return p.value?p.value.warnHtmlMessage:I},set warnHtmlMessage(ge){p.value&&(p.value.warnHtmlMessage=ge)},get escapeParameter(){return p.value?p.value.escapeParameter:O},set escapeParameter(ge){p.value&&(p.value.escapeParameter=ge)},t:X,getPostTranslationHandler:G,setPostTranslationHandler:z,getMissingHandler:$,setMissingHandler:W,rt:te,d:ne,n:se,tm:le,te:J,getLocaleMessage:Z,setLocaleMessage:ye,mergeLocaleMessage:be,getDateTimeFormat:ve,setDateTimeFormat:Ae,mergeDateTimeFormat:Ce,getNumberFormat:_e,setNumberFormat:ke,mergeNumberFormat:Be};function rt(ge){ge.locale.value=v.value,ge.fallbackLocale.value=g.value,Object.keys(b.value).forEach(We=>{ge.mergeLocaleMessage(We,b.value[We])}),Object.keys(y.value).forEach(We=>{ge.mergeDateTimeFormat(We,y.value[We])}),Object.keys(w.value).forEach(We=>{ge.mergeNumberFormat(We,w.value[We])}),ge.escapeParameter=O,ge.fallbackFormat=C,ge.fallbackRoot=E,ge.fallbackWarn=_,ge.missingWarn=x,ge.warnHtmlMessage=I}return or.onBeforeMount(()=>{if(s.proxy==null||s.proxy.$i18n==null)throw Oi(Fr.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const ge=p.value=s.proxy.$i18n.__composer;u==="global"?(v.value=ge.locale.value,g.value=ge.fallbackLocale.value,b.value=ge.messages.value,y.value=ge.datetimeFormats.value,w.value=ge.numberFormats.value):f&&rt(ge)}),$e}(t,i,r,e)}if(i==="global")return wne(r,e,o),r;if(i==="parent"){let s=function(u,c,d=!1){let f=null;const p=c.root;let m=function(v,g=!1){return v==null?null:g&&v.vnode.ctx||v.parent}(c,d);for(;m!=null;){const v=u;if(u.mode==="composition")f=v.__getInstance(m);else{const g=v.__getInstance(m);g!=null&&(f=g.__composer,d&&f&&!f[bne]&&(f=null))}if(f!=null||p===m)break;m=m.parent}return f}(n,t,e.__useComponent);return s==null&&(Xe.warn(Dl(Eo.NOT_FOUND_PARENT_SCOPE)),s=r),s}const a=n;let l=a.__getInstance(t);if(l==null){const s=Xe.assign({},e);"__i18n"in o&&(s.__i18n=o.__i18n),r&&(s.__root=r),l=XM(s),a.__composerExtend&&(l[YM]=a.__composerExtend(l)),function(u,c,d){or.onMounted(()=>{},c),or.onUnmounted(()=>{const f=d;u.__deleteInstance(c);const p=f[YM];p&&(p(),delete f[YM])},c)}(a,t,l),a.__setInstance(t,l)}return l}const FNe=["locale","fallbackLocale","availableLocales"],Rne=["t","rt","d","n","tm","te"];Dn.registerMessageCompiler(Dn.compile),Dn.registerMessageResolver(Dn.resolveValue),Dn.registerLocaleFallbacker(Dn.fallbackWithLocaleChain);{const e=Xe.getGlobalThis();e.__INTLIFY__=!0,Dn.setDevToolsHook(e.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__)}rs.DatetimeFormat=Q7,rs.I18nD=NNe,rs.I18nInjectionKey=Fne,rs.I18nN=TNe,rs.I18nT=DNe,rs.NumberFormat=X7,rs.Translation=w3,rs.VERSION=vne,rs.castToVueI18n=e=>{if(!("__VUE_I18N_BRIDGE__"in e))throw Oi(Fr.NOT_COMPATIBLE_LEGACY_VUE_I18N);return e},rs.createI18n=function(e={},t){const n=!Xe.isBoolean(e.legacy)||e.legacy,r=!Xe.isBoolean(e.globalInjection)||e.globalInjection,o=!n||!!e.allowComposition,i=new Map,[a,l]=function(u,c){const d=or.effectScope();{const f=c?d.run(()=>QM(u)):d.run(()=>XM(u));if(f==null)throw Oi(Fr.UNEXPECTED_ERROR);return[d,f]}}(e,n),s=Xe.makeSymbol("vue-i18n");n&&o&&Xe.warn(Dl(Eo.NOTICE_DROP_ALLOW_COMPOSITION));{const u={get mode(){return n?"legacy":"composition"},get allowComposition(){return o},async install(c,...d){if(c.__VUE_I18N_SYMBOL__=s,c.provide(c.__VUE_I18N_SYMBOL__,u),Xe.isPlainObject(d[0])){const m=d[0];u.__composerExtend=m.__composerExtend,u.__vueI18nExtend=m.__vueI18nExtend}let f=null;!n&&r&&(f=function(m,v){const g=Object.create(null);return FNe.forEach(y=>{const w=Object.getOwnPropertyDescriptor(v,y);if(!w)throw Oi(Fr.UNEXPECTED_ERROR);const x=or.isRef(w.value)?{get:()=>w.value.value,set(_){w.value.value=_}}:{get:()=>w.get&&w.get()};Object.defineProperty(g,y,x)}),m.config.globalProperties.$i18n=g,Rne.forEach(y=>{const w=Object.getOwnPropertyDescriptor(v,y);if(!w||!w.value)throw Oi(Fr.UNEXPECTED_ERROR);Object.defineProperty(m.config.globalProperties,`$${y}`,w)}),()=>{delete m.config.globalProperties.$i18n,Rne.forEach(y=>{delete m.config.globalProperties[`$${y}`]})}}(c,u.global)),function(m,v,...g){const b=Xe.isPlainObject(g[0])?g[0]:{},y=!!b.useI18nComponentName,w=!Xe.isBoolean(b.globalInstall)||b.globalInstall;w&&y&&Xe.warn(Dl(Eo.COMPONENT_NAME_LEGACY_COMPATIBLE,{name:w3.name})),w&&([y?"i18n":w3.name,"I18nT"].forEach(x=>m.component(x,w3)),[X7.name,"I18nN"].forEach(x=>m.component(x,X7)),[Q7.name,"I18nD"].forEach(x=>m.component(x,Q7))),m.directive("t",One(v))}(c,u,...d),n&&c.mixin(function(m,v,g){return{beforeCreate(){const b=or.getCurrentInstance();if(!b)throw Oi(Fr.UNEXPECTED_ERROR);const y=this.$options;if(y.i18n){const w=y.i18n;if(y.__i18n&&(w.__i18n=y.__i18n),w.__root=v,this===this.$root)this.$i18n=Nne(m,w);else{w.__injectWithOption=!0,w.__extender=g.__vueI18nExtend,this.$i18n=QM(w);const x=this.$i18n;x.__extender&&(x.__disposer=x.__extender(this.$i18n))}}else if(y.__i18n)if(this===this.$root)this.$i18n=Nne(m,y);else{this.$i18n=QM({__i18n:y.__i18n,__injectWithOption:!0,__extender:g.__vueI18nExtend,__root:v});const w=this.$i18n;w.__extender&&(w.__disposer=w.__extender(this.$i18n))}else this.$i18n=m;y.__i18nGlobal&&wne(v,y,y),this.$t=(...w)=>this.$i18n.t(...w),this.$rt=(...w)=>this.$i18n.rt(...w),this.$tc=(...w)=>this.$i18n.tc(...w),this.$te=(w,x)=>this.$i18n.te(w,x),this.$d=(...w)=>this.$i18n.d(...w),this.$n=(...w)=>this.$i18n.n(...w),this.$tm=w=>this.$i18n.tm(w),g.__setInstance(b,this.$i18n)},mounted(){},unmounted(){const b=or.getCurrentInstance();if(!b)throw Oi(Fr.UNEXPECTED_ERROR);const y=this.$i18n;delete this.$t,delete this.$rt,delete this.$tc,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,y.__disposer&&(y.__disposer(),delete y.__disposer,delete y.__extender),g.__deleteInstance(b),delete this.$i18n}}}(l,l.__composer,u));const p=c.unmount;c.unmount=()=>{f&&f(),u.dispose(),p()}},get global(){return l},dispose(){a.stop()},__instances:i,__getInstance:function(c){return i.get(c)||null},__setInstance:function(c,d){i.set(c,d)},__deleteInstance:function(c){i.delete(c)}};return u}},rs.useI18n=J7,rs.vTDirective=One,NQ=rs;let Ine;const Z7=e=>Ine=e,Bne=Symbol();function ZM(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var x3,eN;(eN=x3||(x3={})).direct="direct",eN.patchObject="patch object",eN.patchFunction="patch function";const Pne=()=>{};function Lne(e,t,n,r=Pne){e.push(t);const o=()=>{const i=e.indexOf(t);i>-1&&(e.splice(i,1),r())};return!n&&Zb()&&e3(o),o}function Um(e,...t){e.slice().forEach(n=>{n(...t)})}const RNe=e=>e(),jne=Symbol(),tN=Symbol();function nN(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,r)=>e.set(r,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const r=t[n],o=e[n];ZM(o)&&ZM(r)&&e.hasOwnProperty(n)&&!Jn(r)&&!Od(r)?e[n]=nN(o,r):e[n]=r}return e}const INe=Symbol(),{assign:Jf}=Object;function BNe(e){return!(!Jn(e)||!e.effect)}function Vne(e,t,n={},r,o,i){let a;const l=Jf({actions:{}},n),s={deep:!0};let u,c,d,f=[],p=[];const m=r.state.value[e];let v;function g(C){let T;u=c=!1,typeof C=="function"?(C(r.state.value[e]),T={type:x3.patchFunction,storeId:e,events:d}):(nN(r.state.value[e],C),T={type:x3.patchObject,payload:C,storeId:e,events:d});const k=v=Symbol();St().then(()=>{v===k&&(u=!0)}),c=!0,Um(f,T,r.state.value[e])}i||m||(r.state.value[e]={}),de({});const b=i?function(){const{state:C}=n,T=C?C():{};this.$patch(k=>{Jf(k,T)})}:Pne,y=(C,T="")=>{if(jne in C)return C[tN]=T,C;const k=function(){Z7(r);const I=Array.from(arguments),O=[],F=[];let N;Um(p,{args:I,name:k[tN],store:x,after:function(B){O.push(B)},onError:function(B){F.push(B)}});try{N=C.apply(this&&this.$id===e?this:x,I)}catch(B){throw Um(F,B),B}return N instanceof Promise?N.then(B=>(Um(O,B),B)).catch(B=>(Um(F,B),Promise.reject(B))):(Um(O,N),N)};return k[jne]=!0,k[tN]=T,k},w={_p:r,$id:e,$onAction:Lne.bind(null,p),$patch:g,$reset:b,$subscribe(C,T={}){const k=Lne(f,C,T.detached,()=>I()),I=a.run(()=>Je(()=>r.state.value[e],O=>{(T.flush==="sync"?c:u)&&C({storeId:e,type:x3.direct,events:d},O)},Jf({},s,T)));return k},$dispose:function(){a.stop(),f=[],p=[],r._s.delete(e)}},x=Qn(w);r._s.set(e,x);const _=(r._a&&r._a.runWithContext||RNe)(()=>r._e.run(()=>(a=p7()).run(()=>t({action:y}))));for(const C in _){const T=_[C];if(Jn(T)&&!BNe(T)||Od(T))i||(!m||ZM(E=T)&&E.hasOwnProperty(INe)||(Jn(T)?T.value=m[C]:nN(T,m[C])),r.state.value[e][C]=T);else if(typeof T=="function"){const k=y(T,C);_[C]=k,l.actions[C]=T}}var E;return Jf(x,_),Jf(Zn(x),_),Object.defineProperty(x,"$state",{get:()=>r.state.value[e],set:C=>{g(T=>{Jf(T,C)})}}),r._p.forEach(C=>{Jf(x,a.run(()=>C({store:x,app:r._a,pinia:r,options:l})))}),m&&i&&n.hydrate&&n.hydrate(x.$state,m),u=!0,c=!0,x}ym=function(e,t,n){let r,o;const i=typeof t=="function";function a(l,s){const u=nte();return(l=l||(u?Rt(Bne,null):null))&&Z7(l),(l=Ine)._s.has(r)||(i?Vne(r,t,o,l):function(c,d,f){const{state:p,actions:m,getters:v}=d,g=f.state.value[c];let b;b=Vne(c,function(){g||(f.state.value[c]=p?p():{});const y=di(f.state.value[c]);return Jf(y,m,Object.keys(v||{}).reduce((w,x)=>(w[x]=Fo(ee(()=>{Z7(f);const _=f._s.get(c);return v[x].call(_,_)})),w),{}))},d,f,0,!0)}(r,o,l)),l._s.get(r)}return typeof e=="string"?(r=e,o=i?n:t):(o=e,r=e.id),a.$id=r,a};function zne(e,t){return e=function(n){return typeof n=="object"&&n!==null}(e)?e:Object.create(null),new Proxy(e,{get:(n,r,o)=>r==="key"?Reflect.get(n,r,o):Reflect.get(n,r,o)||Reflect.get(t,r,o)})}function Hne(e,{storage:t,serializer:n,key:r,debug:o}){try{const i=t==null?void 0:t.getItem(r);i&&e.$patch(n==null?void 0:n.deserialize(i))}catch(i){o&&console.error("[pinia-plugin-persistedstate]",i)}}function $ne(e,{storage:t,serializer:n,key:r,paths:o,debug:i}){try{const a=Array.isArray(o)?function(l,s){return s.reduce((u,c)=>{const d=c.split(".");return function(f,p,m){return p.slice(0,-1).reduce((v,g)=>/^(__proto__)$/.test(g)?{}:v[g]=v[g]||{},f)[p[p.length-1]]=m,f}(u,d,function(f,p){return p.reduce((m,v)=>m==null?void 0:m[v],f)}(l,d))},{})}(e,o):e;t.setItem(r,n.serialize(a))}catch(a){i&&console.error("[pinia-plugin-persistedstate]",a)}}var PNe=function(e={}){return t=>{const{auto:n=!1}=e,{options:{persist:r=n},store:o,pinia:i}=t;if(!r)return;if(!(o.$id in i.state.value)){const l=i._s.get(o.$id.replace("__hot:",""));return void(l&&Promise.resolve().then(()=>l.$persist()))}const a=(Array.isArray(r)?r.map(l=>zne(l,e)):[zne(r,e)]).map(function(l,s){return u=>{var c;try{const{storage:d=localStorage,beforeRestore:f,afterRestore:p,serializer:m={serialize:JSON.stringify,deserialize:JSON.parse},key:v=s.$id,paths:g=null,debug:b=!1}=u;return{storage:d,beforeRestore:f,afterRestore:p,serializer:m,key:((c=l.key)!=null?c:y=>y)(typeof v=="string"?v:v(s.$id)),paths:g,debug:b}}catch(d){return u.debug&&console.error("[pinia-plugin-persistedstate]",d),null}}}(e,o)).filter(Boolean);o.$persist=()=>{a.forEach(l=>{$ne(o.$state,l)})},o.$hydrate=({runHooks:l=!0}={})=>{a.forEach(s=>{const{beforeRestore:u,afterRestore:c}=s;l&&(u==null||u(t)),Hne(o,s),l&&(c==null||c(t))})},a.forEach(l=>{const{beforeRestore:s,afterRestore:u}=l;s==null||s(t),Hne(o,l),u==null||u(t),o.$subscribe((c,d)=>{$ne(d,l)},{detached:!0})})}}();Nf=function(){const e=p7(!0),t=e.run(()=>de({}));let n=[],r=[];const o=Fo({install(i){Z7(o),o._a=i,i.provide(Bne,o),i.config.globalProperties.$pinia=o,r.forEach(a=>n.push(a)),r=[]},use(i){return this._a?n.push(i):r.push(i),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return o}(),Nf.use(PNe);var Une={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color."},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"}}},Wne={exports:{}};Wne.exports=function(){function e(g,b){for(var y in b)g[y]=b[y];return g}function t(g){var b=!1;if(g&&g.setItem){b=!0;var y="__"+Math.round(1e7*Math.random());try{g.setItem(y,y),g.removeItem(y)}catch{b=!1}}return b}function n(g){return typeof g=="string"&&window[g]instanceof Storage?window[g]:g}function r(g){return Object.prototype.toString.call(g)==="[object Date]"&&!isNaN(g.getTime())}function o(g,b){if(b=b||new Date,typeof g=="number"?g=g===1/0?d:new Date(b.getTime()+1e3*g):typeof g=="string"&&(g=new Date(g)),g&&!r(g))throw new Error("`expires` parameter cannot be converted to a valid Date instance");return g}function i(g){var b=!1;if(g)if(g.code)switch(g.code){case 22:b=!0;break;case 1014:g.name==="NS_ERROR_DOM_QUOTA_REACHED"&&(b=!0)}else g.number===-2147024882&&(b=!0);return b}function a(g,b){this.c=new Date().getTime();var y=o(b=b||f);this.e=y.getTime(),this.v=g}function l(g){return typeof g=="object"&&!!(g&&"c"in g&&"e"in g&&"v"in g)}function s(g){return new Date().getTime()<g.e}function u(g){return typeof g!="string"&&(console.warn(g+" used as a key, but it is not a string."),g=String(g)),g}function c(g){var b=e({storage:"localStorage",exp:1/0},g),y=b.exp;if(y&&typeof y!="number"&&!r(y))throw new Error("Constructor `exp` parameter cannot be converted to a valid Date instance");f=y;var w=n(b.storage),x=t(w);this.isSupported=function(){return x},x?(this.storage=w,this.quotaExceedHandler=function(_,E,C){if(console.warn("Quota exceeded!"),C&&C.force===!0){var T=this.deleteAllExpires();console.warn("delete all expires CacheItem : ["+T+"] and try execute `set` method again!");try{C.force=!1,this.set(_,E,C)}catch(k){console.warn(k)}}}):e(this,m)}var d=new Date("Fri, 31 Dec 9999 23:59:59 UTC"),f=d,p={serialize:function(g){return JSON.stringify(g)},deserialize:function(g){return g&&JSON.parse(g)}},m={set:function(){},get:function(){},delete:function(){},deleteAllExpires:function(){},clear:function(){},add:function(){},replace:function(){},touch:function(){}},v={set:function(g,b,y){if(g=u(g),typeof y=="number"&&(y={exp:y}),y=e({force:!0},y),b===void 0)return this.delete(g);var w=p.serialize(b),x=new a(w,y.exp);try{this.storage.setItem(g,p.serialize(x))}catch(_){i(_)?this.quotaExceedHandler(g,w,y,_):console.error(_)}return b},get:function(g){g=u(g);var b=null;try{b=p.deserialize(this.storage.getItem(g))}catch{return null}if(l(b)){if(s(b)){var y=b.v;return p.deserialize(y)}this.delete(g)}return null},delete:function(g){return g=u(g),this.storage.removeItem(g),g},deleteAllExpires:function(){for(var g=this.storage.length,b=[],y=this,w=0;g>w;w++){var x=this.storage.key(w),_=null;try{_=p.deserialize(this.storage.getItem(x))}catch{}_!==null&&_.e!==void 0&&new Date().getTime()>=_.e&&b.push(x)}return b.forEach(function(E){y.delete(E)}),b},clear:function(){this.storage.clear()},add:function(g,b,y){g=u(g),typeof y=="number"&&(y={exp:y}),y=e({force:!0},y);try{var w=p.deserialize(this.storage.getItem(g));if(!l(w)||!s(w))return this.set(g,b,y),!0}catch{return this.set(g,b,y),!0}return!1},replace:function(g,b,y){g=u(g);var w=null;try{w=p.deserialize(this.storage.getItem(g))}catch{return!1}if(l(w)){if(s(w))return this.set(g,b,y),!0;this.delete(g)}return!1},touch:function(g,b){g=u(g);var y=null;try{y=p.deserialize(this.storage.getItem(g))}catch{return!1}if(l(y)){if(s(y))return this.set(g,this.get(g),{exp:b}),!0;this.delete(g)}return!1}};return c.prototype=v,c}();let Gne,e9,rN;Gne=_l(Wne.exports),Nr={ROLE_ROUTERS:"roleRouters",USER:"user",IS_DARK:"isDark",LANG:"lang",THEME:"theme",LAYOUT:"layout",DICT_CACHE:"dictCache",LoginForm:"loginForm",TenantId:"tenantId"},ku=(e="localStorage")=>({wsCache:new Gne({storage:e})}),DO=()=>{const{wsCache:e}=ku();e.delete(Nr.USER),e.delete(Nr.ROLE_ROUTERS)},{wsCache:e9}=ku(),rN={"zh-CN":{name:"zh-cn",el:{breadcrumb:{label:"\u9762\u5305\u5C51"},colorpicker:{confirm:"\u786E\u5B9A",clear:"\u6E05\u7A7A"},datepicker:{now:"\u6B64\u523B",today:"\u4ECA\u5929",cancel:"\u53D6\u6D88",clear:"\u6E05\u7A7A",confirm:"\u786E\u5B9A",selectDate:"\u9009\u62E9\u65E5\u671F",selectTime:"\u9009\u62E9\u65F6\u95F4",startDate:"\u5F00\u59CB\u65E5\u671F",startTime:"\u5F00\u59CB\u65F6\u95F4",endDate:"\u7ED3\u675F\u65E5\u671F",endTime:"\u7ED3\u675F\u65F6\u95F4",prevYear:"\u524D\u4E00\u5E74",nextYear:"\u540E\u4E00\u5E74",prevMonth:"\u4E0A\u4E2A\u6708",nextMonth:"\u4E0B\u4E2A\u6708",year:"\u5E74",month1:"1 \u6708",month2:"2 \u6708",month3:"3 \u6708",month4:"4 \u6708",month5:"5 \u6708",month6:"6 \u6708",month7:"7 \u6708",month8:"8 \u6708",month9:"9 \u6708",month10:"10 \u6708",month11:"11 \u6708",month12:"12 \u6708",weeks:{sun:"\u65E5",mon:"\u4E00",tue:"\u4E8C",wed:"\u4E09",thu:"\u56DB",fri:"\u4E94",sat:"\u516D"},months:{jan:"\u4E00\u6708",feb:"\u4E8C\u6708",mar:"\u4E09\u6708",apr:"\u56DB\u6708",may:"\u4E94\u6708",jun:"\u516D\u6708",jul:"\u4E03\u6708",aug:"\u516B\u6708",sep:"\u4E5D\u6708",oct:"\u5341\u6708",nov:"\u5341\u4E00\u6708",dec:"\u5341\u4E8C\u6708"}},select:{loading:"\u52A0\u8F7D\u4E2D",noMatch:"\u65E0\u5339\u914D\u6570\u636E",noData:"\u65E0\u6570\u636E",placeholder:"\u8BF7\u9009\u62E9"},cascader:{noMatch:"\u65E0\u5339\u914D\u6570\u636E",loading:"\u52A0\u8F7D\u4E2D",placeholder:"\u8BF7\u9009\u62E9",noData:"\u6682\u65E0\u6570\u636E"},pagination:{goto:"\u524D\u5F80",pagesize:"\u6761/\u9875",total:"\u5171 {total} \u6761",pageClassifier:"\u9875",page:"\u9875",prev:"\u4E0A\u4E00\u9875",next:"\u4E0B\u4E00\u9875",currentPage:"\u7B2C {pager} \u9875",prevPages:"\u5411\u524D {pager} \u9875",nextPages:"\u5411\u540E {pager} \u9875",deprecationWarning:"\u4F60\u4F7F\u7528\u4E86\u4E00\u4E9B\u5DF2\u88AB\u5E9F\u5F03\u7684\u7528\u6CD5\uFF0C\u8BF7\u53C2\u8003 el-pagination \u7684\u5B98\u65B9\u6587\u6863"},messagebox:{title:"\u63D0\u793A",confirm:"\u786E\u5B9A",cancel:"\u53D6\u6D88",error:"\u8F93\u5165\u7684\u6570\u636E\u4E0D\u5408\u6CD5!"},upload:{deleteTip:"\u6309 delete \u952E\u53EF\u5220\u9664",delete:"\u5220\u9664",preview:"\u67E5\u770B\u56FE\u7247",continue:"\u7EE7\u7EED\u4E0A\u4F20"},table:{emptyText:"\u6682\u65E0\u6570\u636E",confirmFilter:"\u7B5B\u9009",resetFilter:"\u91CD\u7F6E",clearFilter:"\u5168\u90E8",sumText:"\u5408\u8BA1"},tour:{next:"\u4E0B\u4E00\u6B65",previous:"\u4E0A\u4E00\u6B65",finish:"\u7ED3\u675F\u5BFC\u89C8"},tree:{emptyText:"\u6682\u65E0\u6570\u636E"},transfer:{noMatch:"\u65E0\u5339\u914D\u6570\u636E",noData:"\u65E0\u6570\u636E",titles:["\u5217\u8868 1","\u5217\u8868 2"],filterPlaceholder:"\u8BF7\u8F93\u5165\u641C\u7D22\u5185\u5BB9",noCheckedFormat:"\u5171 {total} \u9879",hasCheckedFormat:"\u5DF2\u9009 {checked}/{total} \u9879"},image:{error:"\u52A0\u8F7D\u5931\u8D25"},pageHeader:{title:"\u8FD4\u56DE"},popconfirm:{confirmButtonText:"\u786E\u5B9A",cancelButtonText:"\u53D6\u6D88"},carousel:{leftArrow:"\u4E0A\u4E00\u5F20\u5E7B\u706F\u7247",rightArrow:"\u4E0B\u4E00\u5F20\u5E7B\u706F\u7247",indicator:"\u5E7B\u706F\u7247\u5207\u6362\u81F3\u7D22\u5F15 {index}"}}},en:Une},Fw=ym("locales",{state:()=>({currentLocale:{lang:e9.get(Nr.LANG)||"zh-CN",elLocale:rN[e9.get(Nr.LANG)||"zh-CN"]},localeMap:[{lang:"zh-CN",name:"\u7B80\u4F53\u4E2D\u6587"},{lang:"en",name:"English"}]}),getters:{getCurrentLocale(){return this.currentLocale},getLocaleMap(){return this.localeMap}},actions:{setCurrentLocale(e){this.currentLocale.lang=e==null?void 0:e.lang,this.currentLocale.elLocale=rN[e==null?void 0:e.lang],e9.set(Nr.LANG,e==null?void 0:e.lang)}}}),DQ=()=>Fw(Nf),OQ=e=>{var t;(t=document.querySelector("html"))==null||t.setAttribute("lang",e)};let qne,oN,Kne,iN,aN,_3;qne=async e=>{const t=await(async()=>{const n=DQ(),r=n.getCurrentLocale,o=n.getLocaleMap,i=(await kQ(Object.assign({"../../locales/en.ts":()=>Ke(()=>import("./en-Dc3Fg5U0.js"),__vite__mapDeps([])),"../../locales/zh-CN.ts":()=>Ke(()=>import("./zh-CN-CV_XEAPe.js"),__vite__mapDeps([]))}),`../../locales/${r.lang}.ts`)).default??{};return OQ(r.lang),n.setCurrentLocale({lang:r.lang}),{legacy:!1,locale:r.lang,fallbackLocale:r.lang,messages:{[r.lang]:i},availableLocales:o.map(a=>a.lang),sync:!0,silentTranslationWarn:!0,missingWarn:!1,silentFallbackWarn:!0}})();Nw=NQ.createI18n(t),e.use(Nw)},oN=e=>Array.from(e.querySelectorAll('a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])')).filter(t=>Kne(t)&&(n=>getComputedStyle(n).position!=="fixed"&&n.offsetParent!==null)(t)),Kne=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.disabled)return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},IOe=function(e,t,...n){let r;r=t.includes("mouse")||t.includes("click")?"MouseEvents":t.includes("key")?"KeyboardEvent":"HTMLEvents";const o=document.createEvent(r);return o.initEvent(t,...n),e.dispatchEvent(o),e},iN=e=>!e.getAttribute("aria-owns"),aN=(e,t,n)=>{const{parentNode:r}=e;if(!r)return null;const o=r.querySelectorAll(n);return o[Array.prototype.indexOf.call(o,e)+t]||null},_3=e=>{e&&(e.focus(),!iN(e)&&e.click())},bc=(e,t,{checkForDefaultPrevented:n=!0}={})=>r=>{const o=e==null?void 0:e(r);if(n===!1||!o)return t==null?void 0:t(r)},iOe=e=>t=>t.pointerType==="mouse"?e(t):void 0;var Yne,LNe=Object.defineProperty,jNe=Object.defineProperties,VNe=Object.getOwnPropertyDescriptors,Xne=Object.getOwnPropertySymbols,zNe=Object.prototype.hasOwnProperty,HNe=Object.prototype.propertyIsEnumerable,Qne=(e,t,n)=>t in e?LNe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;function Jne(e,t){const n=Qo();return yl(()=>{n.value=e()},((r,o)=>jNe(r,VNe(o)))(((r,o)=>{for(var i in o||(o={}))zNe.call(o,i)&&Qne(r,i,o[i]);if(Xne)for(var i of Xne(o))HNe.call(o,i)&&Qne(r,i,o[i]);return r})({},t),{flush:"sync"})),xd(n)}let Zne,K0,ere;rr=typeof window<"u",Zne=e=>typeof e=="string",K0=()=>{},ere=rr&&((Yne=window==null?void 0:window.navigator)==null?void 0:Yne.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function Zf(e){return typeof e=="function"?e():M(e)}function tre(e,t){return function(...n){return new Promise((r,o)=>{Promise.resolve(e(()=>t.apply(this,n),{fn:t,thisArg:this,args:n})).then(r).catch(o)})}}function E3(e){return!!Zb()&&(e3(e),!0)}function $Ne(e,t=200,n={}){return tre(function(r,o={}){let i,a,l=K0;const s=u=>{clearTimeout(u),l(),l=K0};return u=>{const c=Zf(r),d=Zf(o.maxWait);return i&&s(i),c<=0||d!==void 0&&d<=0?(a&&(s(a),a=null),Promise.resolve(u())):new Promise((f,p)=>{l=o.rejectOnCancel?p:f,d&&!a&&(a=setTimeout(()=>{i&&s(i),a=null,f(u())},d)),i=setTimeout(()=>{a&&s(a),a=null,f(u())},c)})}}(t,n),e)}zOe=function(e,t=200,n=!1,r=!0,o=!1){return tre(function(i,a=!0,l=!0,s=!1){let u,c,d=0,f=!0,p=K0;const m=()=>{u&&(clearTimeout(u),u=void 0,p(),p=K0)};return v=>{const g=Zf(i),b=Date.now()-d,y=()=>c=v();return m(),g<=0?(d=Date.now(),y()):(b>g&&(l||!f)?(d=Date.now(),y()):a&&(c=new Promise((w,x)=>{p=s?x:w,u=setTimeout(()=>{d=Date.now(),f=!0,w(y()),m()},Math.max(0,g-b))})),l||u||(u=setTimeout(()=>f=!0,g)),f=!1,c)}}(t,n,r,o),e)},Ib=function(e,t,n={}){const{immediate:r=!0}=n,o=de(!1);let i=null;function a(){i&&(clearTimeout(i),i=null)}function l(){o.value=!1,a()}function s(...u){a(),o.value=!0,i=setTimeout(()=>{o.value=!1,i=null,e(...u)},Zf(t))}return r&&(o.value=!0,rr&&s()),E3(l),{isPending:xd(o),start:s,stop:l}};function Oc(e){var t;const n=Zf(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Wm=rr?window:void 0,UNe=rr?window.document:void 0;Yo=function(...e){let t,n,r,o;if(Zne(e[0])||Array.isArray(e[0])?([n,r,o]=e,t=Wm):[t,n,r,o]=e,!t)return K0;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const i=[],a=()=>{i.forEach(u=>u()),i.length=0},l=Je(()=>[Oc(t),Zf(o)],([u,c])=>{a(),u&&i.push(...n.flatMap(d=>r.map(f=>((p,m,v,g)=>(p.addEventListener(m,v,g),()=>p.removeEventListener(m,v,g)))(u,d,f,c))))},{immediate:!0,flush:"post"}),s=()=>{l(),a()};return E3(s),s};let nre=!1;function lN(e,t,n={}){const{window:r=Wm,ignore:o=[],capture:i=!0,detectIframe:a=!1}=n;if(!r)return;ere&&!nre&&(nre=!0,Array.from(r.document.body.children).forEach(c=>c.addEventListener("click",K0)));let l=!0;const s=c=>o.some(d=>{if(typeof d=="string")return Array.from(r.document.querySelectorAll(d)).some(f=>f===c.target||c.composedPath().includes(f));{const f=Oc(d);return f&&(c.target===f||c.composedPath().includes(f))}}),u=[Yo(r,"click",c=>{const d=Oc(e);d&&d!==c.target&&!c.composedPath().includes(d)&&(c.detail===0&&(l=!s(c)),l?t(c):l=!0)},{passive:!0,capture:i}),Yo(r,"pointerdown",c=>{const d=Oc(e);d&&(l=!c.composedPath().includes(d)&&!s(c))},{passive:!0}),a&&Yo(r,"blur",c=>{var d;const f=Oc(e);((d=r.document.activeElement)==null?void 0:d.tagName)!=="IFRAME"||f!=null&&f.contains(r.document.activeElement)||t(c)})].filter(Boolean);return()=>u.forEach(c=>c())}function rre(e,t=!1){const n=de(),r=()=>n.value=!!e();return r(),function(o,i=!0){dn()?yn(o):i?o():St(o)}(r,t),n}const ore=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},ire="__vueuse_ssr_handlers__";ore[ire]=ore[ire]||{};var are=Object.getOwnPropertySymbols,WNe=Object.prototype.hasOwnProperty,GNe=Object.prototype.propertyIsEnumerable,qNe=(e,t)=>{var n={};for(var r in e)WNe.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&are)for(var r of are(e))t.indexOf(r)<0&&GNe.call(e,r)&&(n[r]=e[r]);return n};fa=function(e,t,n={}){const r=n,{window:o=Wm}=r,i=qNe(r,["window"]);let a;const l=rre(()=>o&&"ResizeObserver"in o),s=()=>{a&&(a.disconnect(),a=void 0)},u=Je(()=>Oc(e),d=>{s(),l.value&&o&&d&&(a=new ResizeObserver(t),a.observe(d,i))},{immediate:!0,flush:"post"}),c=()=>{s(),u()};return E3(c),{isSupported:l,stop:c}};var lre,C3,sre=Object.getOwnPropertySymbols,KNe=Object.prototype.hasOwnProperty,YNe=Object.prototype.propertyIsEnumerable;function XNe(e,t,n={}){const r=n,{window:o=Wm}=r,i=((d,f)=>{var p={};for(var m in d)KNe.call(d,m)&&f.indexOf(m)<0&&(p[m]=d[m]);if(d!=null&&sre)for(var m of sre(d))f.indexOf(m)<0&&YNe.call(d,m)&&(p[m]=d[m]);return p})(r,["window"]);let a;const l=rre(()=>o&&"MutationObserver"in o),s=()=>{a&&(a.disconnect(),a=void 0)},u=Je(()=>Oc(e),d=>{s(),l.value&&o&&d&&(a=new MutationObserver(t),a.observe(d,i))},{immediate:!0}),c=()=>{s(),u()};return E3(c),{isSupported:l,stop:c}}(C3=lre||(lre={})).UP="UP",C3.RIGHT="RIGHT",C3.DOWN="DOWN",C3.LEFT="LEFT",C3.NONE="NONE";var QNe=Object.defineProperty,ure=Object.getOwnPropertySymbols,JNe=Object.prototype.hasOwnProperty,ZNe=Object.prototype.propertyIsEnumerable,cre=(e,t,n)=>t in e?QNe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;function eFe(e,t,n,r={}){var o,i,a;const{clone:l=!1,passive:s=!1,eventName:u,deep:c=!1,defaultValue:d}=r,f=dn(),p=(f==null?void 0:f.emit)||((o=f==null?void 0:f.$emit)==null?void 0:o.bind(f))||((a=(i=f==null?void 0:f.proxy)==null?void 0:i.$emit)==null?void 0:a.bind(f==null?void 0:f.proxy));let m=u;m=u||m||`update:${t.toString()}`;const v=b=>{return l?(w=>typeof w=="function")(l)?l(b):(y=b,JSON.parse(JSON.stringify(y))):b;var y},g=()=>e[t]!==void 0?v(e[t]):d;if(s){const b=de(g());return Je(()=>e[t],y=>b.value=v(y)),Je(b,y=>{(y!==e[t]||c)&&p(m,y)},{deep:c}),b}return ee({get:()=>g(),set(b){p(m,b)}})}((e,t)=>{for(var n in t||(t={}))JNe.call(t,n)&&cre(e,n,t[n]);if(ure)for(var n of ure(t))ZNe.call(t,n)&&cre(e,n,t[n])})({linear:function(e){return e}},{easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]});let t9;FQ=()=>rr&&/firefox/i.test(window.navigator.userAgent),VOe=(e,t)=>{if(!rr||!e||!t)return!1;const n=e.getBoundingClientRect();let r;return r=t instanceof Element?t.getBoundingClientRect():{top:0,right:window.innerWidth,bottom:window.innerHeight,left:0},n.top<r.bottom&&n.bottom>r.top&&n.right>r.left&&n.left<r.right},t9=e=>{let t,n;return e.type==="touchend"?(n=e.changedTouches[0].clientY,t=e.changedTouches[0].clientX):e.type.startsWith("touch")?(n=e.touches[0].clientY,t=e.touches[0].clientX):(n=e.clientY,t=e.clientX),{clientX:t,clientY:n}};var dre=typeof global=="object"&&global&&global.Object===Object&&global,tFe=typeof self=="object"&&self&&self.Object===Object&&self,Mu=dre||tFe||Function("return this")(),Ks=Mu.Symbol,fre=Object.prototype,nFe=fre.hasOwnProperty,rFe=fre.toString,S3=Ks?Ks.toStringTag:void 0,oFe=Object.prototype.toString,iFe="[object Null]",aFe="[object Undefined]",pre=Ks?Ks.toStringTag:void 0;function Y0(e){return e==null?e===void 0?aFe:iFe:pre&&pre in Object(e)?function(t){var n=nFe.call(t,S3),r=t[S3];try{t[S3]=void 0;var o=!0}catch{}var i=rFe.call(t);return o&&(n?t[S3]=r:delete t[S3]),i}(e):function(t){return oFe.call(t)}(e)}function Tc(e){return e!=null&&typeof e=="object"}var lFe="[object Symbol]";function n9(e){return typeof e=="symbol"||Tc(e)&&Y0(e)==lFe}function sN(e,t){for(var n=-1,r=e==null?0:e.length,o=Array(r);++n<r;)o[n]=t(e[n],n,e);return o}var tl=Array.isArray,sFe=1/0,hre=Ks?Ks.prototype:void 0,vre=hre?hre.toString:void 0;function mre(e){if(typeof e=="string")return e;if(tl(e))return sN(e,mre)+"";if(n9(e))return vre?vre.call(e):"";var t=e+"";return t=="0"&&1/e==-sFe?"-0":t}var uFe=/\s/,cFe=/^\s+/;function dFe(e){return e&&e.slice(0,function(t){for(var n=t.length;n--&&uFe.test(t.charAt(n)););return n}(e)+1).replace(cFe,"")}function nl(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var gre=NaN,fFe=/^[-+]0x[0-9a-f]+$/i,pFe=/^0b[01]+$/i,hFe=/^0o[0-7]+$/i,vFe=parseInt;function yre(e){if(typeof e=="number")return e;if(n9(e))return gre;if(nl(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=nl(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=dFe(e);var n=pFe.test(e);return n||hFe.test(e)?vFe(e.slice(2),n?2:8):fFe.test(e)?gre:+e}function uN(e){return e}var mFe="[object AsyncFunction]",gFe="[object Function]",yFe="[object GeneratorFunction]",bFe="[object Proxy]";function cN(e){if(!nl(e))return!1;var t=Y0(e);return t==gFe||t==yFe||t==mFe||t==bFe}var dN=Mu["__core-js_shared__"],bre=function(){var e=/[^.]+$/.exec(dN&&dN.keys&&dN.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),AFe=Function.prototype.toString;function X0(e){if(e!=null){try{return AFe.call(e)}catch{}try{return e+""}catch{}}return""}var wFe=/^\[object .+?Constructor\]$/,xFe=Function.prototype,_Fe=Object.prototype,EFe=xFe.toString,CFe=_Fe.hasOwnProperty,SFe=RegExp("^"+EFe.call(CFe).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function kFe(e){return!(!nl(e)||(t=e,bre&&bre in t))&&(cN(e)?SFe:wFe).test(X0(e));var t}function Q0(e,t){var n=function(r,o){return r==null?void 0:r[o]}(e,t);return kFe(n)?n:void 0}var fN=Q0(Mu,"WeakMap"),Are=Object.create,DFe=function(){function e(){}return function(t){if(!nl(t))return{};if(Are)return Are(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function wre(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}var OFe=Date.now,r9=function(){try{var e=Q0(Object,"defineProperty");return e({},"",{}),e}catch{}}(),TFe=r9?function(e,t){return r9(e,"toString",{configurable:!0,enumerable:!1,value:(n=t,function(){return n}),writable:!0});var n}:uN,xre=function(e){var t=0,n=0;return function(){var r=OFe(),o=16-(r-n);if(n=r,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(TFe);function _re(e,t,n,r){for(var o=e.length,i=n+(r?1:-1);r?i--:++i<o;)if(t(e[i],i,e))return i;return-1}function MFe(e){return e!=e}function NFe(e,t){return!!(e!=null&&e.length)&&function(n,r,o){return r==r?function(i,a,l){for(var s=l-1,u=i.length;++s<u;)if(i[s]===a)return s;return-1}(n,r,o):_re(n,MFe,o)}(e,t,0)>-1}var FFe=9007199254740991,RFe=/^(?:0|[1-9]\d*)$/;function o9(e,t){var n=typeof e;return!!(t=t??FFe)&&(n=="number"||n!="symbol"&&RFe.test(e))&&e>-1&&e%1==0&&e<t}function pN(e,t,n){t=="__proto__"&&r9?r9(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function k3(e,t){return e===t||e!=e&&t!=t}var IFe=Object.prototype.hasOwnProperty;function hN(e,t,n){var r=e[t];IFe.call(e,t)&&k3(r,n)&&(n!==void 0||t in e)||pN(e,t,n)}function Gm(e,t,n,r){var o=!n;n||(n={});for(var i=-1,a=t.length;++i<a;){var l=t[i],s=void 0;s===void 0&&(s=e[l]),o?pN(n,l,s):hN(n,l,s)}return n}var Ere=Math.max;function Cre(e,t,n){return t=Ere(t===void 0?e.length-1:t,0),function(){for(var r=arguments,o=-1,i=Ere(r.length-t,0),a=Array(i);++o<i;)a[o]=r[t+o];o=-1;for(var l=Array(t+1);++o<t;)l[o]=r[o];return l[t]=n(a),function(s,u,c){switch(c.length){case 0:return s.call(u);case 1:return s.call(u,c[0]);case 2:return s.call(u,c[0],c[1]);case 3:return s.call(u,c[0],c[1],c[2])}return s.apply(u,c)}(e,this,l)}}function Sre(e,t){return xre(Cre(e,t,uN),e+"")}var BFe=9007199254740991;function vN(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=BFe}function qm(e){return e!=null&&vN(e.length)&&!cN(e)}var PFe=Object.prototype;function mN(e){var t=e&&e.constructor;return e===(typeof t=="function"&&t.prototype||PFe)}function kre(e){return Tc(e)&&Y0(e)=="[object Arguments]"}var Dre=Object.prototype,LFe=Dre.hasOwnProperty,jFe=Dre.propertyIsEnumerable,D3=kre(function(){return arguments}())?kre:function(e){return Tc(e)&&LFe.call(e,"callee")&&!jFe.call(e,"callee")},Ore=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Tre=Ore&&typeof module=="object"&&module&&!module.nodeType&&module,Mre=Tre&&Tre.exports===Ore?Mu.Buffer:void 0,O3=(Mre?Mre.isBuffer:void 0)||function(){return!1},mo={};function gN(e){return function(t){return e(t)}}mo["[object Float32Array]"]=mo["[object Float64Array]"]=mo["[object Int8Array]"]=mo["[object Int16Array]"]=mo["[object Int32Array]"]=mo["[object Uint8Array]"]=mo["[object Uint8ClampedArray]"]=mo["[object Uint16Array]"]=mo["[object Uint32Array]"]=!0,mo["[object Arguments]"]=mo["[object Array]"]=mo["[object ArrayBuffer]"]=mo["[object Boolean]"]=mo["[object DataView]"]=mo["[object Date]"]=mo["[object Error]"]=mo["[object Function]"]=mo["[object Map]"]=mo["[object Number]"]=mo["[object Object]"]=mo["[object RegExp]"]=mo["[object Set]"]=mo["[object String]"]=mo["[object WeakMap]"]=!1;var Nre=typeof exports=="object"&&exports&&!exports.nodeType&&exports,T3=Nre&&typeof module=="object"&&module&&!module.nodeType&&module,yN=T3&&T3.exports===Nre&&dre.process,Km=function(){try{var e=T3&&T3.require&&T3.require("util").types;return e||yN&&yN.binding&&yN.binding("util")}catch{}}(),Fre=Km&&Km.isTypedArray,bN=Fre?gN(Fre):function(e){return Tc(e)&&vN(e.length)&&!!mo[Y0(e)]},VFe=Object.prototype.hasOwnProperty;function Rre(e,t){var n=tl(e),r=!n&&D3(e),o=!n&&!r&&O3(e),i=!n&&!r&&!o&&bN(e),a=n||r||o||i,l=a?function(c,d){for(var f=-1,p=Array(c);++f<c;)p[f]=d(f);return p}(e.length,String):[],s=l.length;for(var u in e)!t&&!VFe.call(e,u)||a&&(u=="length"||o&&(u=="offset"||u=="parent")||i&&(u=="buffer"||u=="byteLength"||u=="byteOffset")||o9(u,s))||l.push(u);return l}function Ire(e,t){return function(n){return e(t(n))}}var zFe=Ire(Object.keys,Object),HFe=Object.prototype.hasOwnProperty;function M3(e){return qm(e)?Rre(e):function(t){if(!mN(t))return zFe(t);var n=[];for(var r in Object(t))HFe.call(t,r)&&r!="constructor"&&n.push(r);return n}(e)}var $Fe=Object.prototype.hasOwnProperty;function UFe(e){if(!nl(e))return function(o){var i=[];if(o!=null)for(var a in Object(o))i.push(a);return i}(e);var t=mN(e),n=[];for(var r in e)(r!="constructor"||!t&&$Fe.call(e,r))&&n.push(r);return n}function N3(e){return qm(e)?Rre(e,!0):UFe(e)}var WFe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,GFe=/^\w*$/;function AN(e,t){if(tl(e))return!1;var n=typeof e;return!(n!="number"&&n!="symbol"&&n!="boolean"&&e!=null&&!n9(e))||GFe.test(e)||!WFe.test(e)||t!=null&&e in Object(t)}var F3=Q0(Object,"create"),qFe=Object.prototype.hasOwnProperty,KFe=Object.prototype.hasOwnProperty;function J0(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function i9(e,t){for(var n=e.length;n--;)if(k3(e[n][0],t))return n;return-1}J0.prototype.clear=function(){this.__data__=F3?F3(null):{},this.size=0},J0.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},J0.prototype.get=function(e){var t=this.__data__;if(F3){var n=t[e];return n==="__lodash_hash_undefined__"?void 0:n}return qFe.call(t,e)?t[e]:void 0},J0.prototype.has=function(e){var t=this.__data__;return F3?t[e]!==void 0:KFe.call(t,e)},J0.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=F3&&t===void 0?"__lodash_hash_undefined__":t,this};var YFe=Array.prototype.splice;function Bd(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}Bd.prototype.clear=function(){this.__data__=[],this.size=0},Bd.prototype.delete=function(e){var t=this.__data__,n=i9(t,e);return!(n<0)&&(n==t.length-1?t.pop():YFe.call(t,n,1),--this.size,!0)},Bd.prototype.get=function(e){var t=this.__data__,n=i9(t,e);return n<0?void 0:t[n][1]},Bd.prototype.has=function(e){return i9(this.__data__,e)>-1},Bd.prototype.set=function(e,t){var n=this.__data__,r=i9(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this};var R3=Q0(Mu,"Map");function a9(e,t){var n=e.__data__;return function(r){var o=typeof r;return o=="string"||o=="number"||o=="symbol"||o=="boolean"?r!=="__proto__":r===null}(t)?n[typeof t=="string"?"string":"hash"]:n.map}function Pd(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}Pd.prototype.clear=function(){this.size=0,this.__data__={hash:new J0,map:new(R3||Bd),string:new J0}},Pd.prototype.delete=function(e){var t=a9(this,e).delete(e);return this.size-=t?1:0,t},Pd.prototype.get=function(e){return a9(this,e).get(e)},Pd.prototype.has=function(e){return a9(this,e).has(e)},Pd.prototype.set=function(e,t){var n=a9(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this};var XFe="Expected a function";Pw=function(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(XFe);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=e.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(Pw.Cache||Pd),n},Pw.Cache=Pd;var QFe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,JFe=/\\(\\)?/g,ZFe=function(e){var t=Pw(e,function(r){return n.size===500&&n.clear(),r}),n=t.cache;return t}(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(QFe,function(n,r,o,i){t.push(o?i.replace(JFe,"$1"):r||n)}),t});function Ym(e,t){return tl(e)?e:AN(e,t)?[e]:ZFe(function(n){return n==null?"":mre(n)}(e))}var eRe=1/0;function Xm(e){if(typeof e=="string"||n9(e))return e;var t=e+"";return t=="0"&&1/e==-eRe?"-0":t}function l9(e,t){for(var n=0,r=(t=Ym(t,e)).length;e!=null&&n<r;)e=e[Xm(t[n++])];return n&&n==r?e:void 0}es=function(e,t,n){var r=e==null?void 0:l9(e,t);return r===void 0?n:r};function wN(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];return e}var Bre=Ks?Ks.isConcatSpreadable:void 0;function tRe(e){return tl(e)||D3(e)||!!(Bre&&e&&e[Bre])}function I3(e,t,n,r,o){var i=-1,a=e.length;for(n||(n=tRe),o||(o=[]);++i<a;){var l=e[i];t>0&&n(l)?t>1?I3(l,t-1,n,r,o):wN(o,l):r||(o[o.length]=l)}return o}function Pre(e){return e!=null&&e.length?I3(e,1):[]}function Lre(e){return xre(Cre(e,void 0,Pre),e+"")}var xN=Ire(Object.getPrototypeOf,Object),nRe="[object Object]",rRe=Function.prototype,oRe=Object.prototype,jre=rRe.toString,iRe=oRe.hasOwnProperty,aRe=jre.call(Object);function Vre(e){if(!Tc(e)||Y0(e)!=nRe)return!1;var t=xN(e);if(t===null)return!0;var n=iRe.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&jre.call(n)==aRe}Iw=function(){if(!arguments.length)return[];var e=arguments[0];return tl(e)?e:[e]};function Nu(e){var t=this.__data__=new Bd(e);this.size=t.size}Nu.prototype.clear=function(){this.__data__=new Bd,this.size=0},Nu.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Nu.prototype.get=function(e){return this.__data__.get(e)},Nu.prototype.has=function(e){return this.__data__.has(e)},Nu.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Bd){var r=n.__data__;if(!R3||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Pd(r)}return n.set(e,t),this.size=n.size,this};var zre=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Hre=zre&&typeof module=="object"&&module&&!module.nodeType&&module,$re=Hre&&Hre.exports===zre?Mu.Buffer:void 0,Ure=$re?$re.allocUnsafe:void 0;function Wre(e,t){if(t)return e.slice();var n=e.length,r=Ure?Ure(n):new e.constructor(n);return e.copy(r),r}function Gre(){return[]}var lRe=Object.prototype.propertyIsEnumerable,qre=Object.getOwnPropertySymbols,_N=qre?function(e){return e==null?[]:(e=Object(e),function(t,n){for(var r=-1,o=t==null?0:t.length,i=0,a=[];++r<o;){var l=t[r];n(l,r,t)&&(a[i++]=l)}return a}(qre(e),function(t){return lRe.call(e,t)}))}:Gre,Kre=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)wN(t,_N(e)),e=xN(e);return t}:Gre;function Yre(e,t,n){var r=t(e);return tl(e)?r:wN(r,n(e))}function EN(e){return Yre(e,M3,_N)}function Xre(e){return Yre(e,N3,Kre)}var CN=Q0(Mu,"DataView"),SN=Q0(Mu,"Promise"),Qm=Q0(Mu,"Set"),Qre="[object Map]",Jre="[object Promise]",Zre="[object Set]",eoe="[object WeakMap]",toe="[object DataView]",sRe=X0(CN),uRe=X0(R3),cRe=X0(SN),dRe=X0(Qm),fRe=X0(fN),Fu=Y0;(CN&&Fu(new CN(new ArrayBuffer(1)))!=toe||R3&&Fu(new R3)!=Qre||SN&&Fu(SN.resolve())!=Jre||Qm&&Fu(new Qm)!=Zre||fN&&Fu(new fN)!=eoe)&&(Fu=function(e){var t=Y0(e),n=t=="[object Object]"?e.constructor:void 0,r=n?X0(n):"";if(r)switch(r){case sRe:return toe;case uRe:return Qre;case cRe:return Jre;case dRe:return Zre;case fRe:return eoe}return t});var pRe=Object.prototype.hasOwnProperty,s9=Mu.Uint8Array;function kN(e){var t=new e.constructor(e.byteLength);return new s9(t).set(new s9(e)),t}var hRe=/\w*$/,noe=Ks?Ks.prototype:void 0,roe=noe?noe.valueOf:void 0;function ooe(e,t){var n=t?kN(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}var vRe="[object Boolean]",mRe="[object Date]",gRe="[object Map]",yRe="[object Number]",bRe="[object RegExp]",ARe="[object Set]",wRe="[object String]",xRe="[object Symbol]",_Re="[object ArrayBuffer]",ERe="[object DataView]",CRe="[object Float32Array]",SRe="[object Float64Array]",kRe="[object Int8Array]",DRe="[object Int16Array]",ORe="[object Int32Array]",TRe="[object Uint8Array]",MRe="[object Uint8ClampedArray]",NRe="[object Uint16Array]",FRe="[object Uint32Array]";function RRe(e,t,n){var r,o,i,a=e.constructor;switch(t){case _Re:return kN(e);case vRe:case mRe:return new a(+e);case ERe:return function(l,s){var u=s?kN(l.buffer):l.buffer;return new l.constructor(u,l.byteOffset,l.byteLength)}(e,n);case CRe:case SRe:case kRe:case DRe:case ORe:case TRe:case MRe:case NRe:case FRe:return ooe(e,n);case gRe:return new a;case yRe:case wRe:return new a(e);case bRe:return(i=new(o=e).constructor(o.source,hRe.exec(o))).lastIndex=o.lastIndex,i;case ARe:return new a;case xRe:return r=e,roe?Object(roe.call(r)):{}}}function ioe(e){return typeof e.constructor!="function"||mN(e)?{}:DFe(xN(e))}var aoe=Km&&Km.isMap,IRe=aoe?gN(aoe):function(e){return Tc(e)&&Fu(e)=="[object Map]"},loe=Km&&Km.isSet,BRe=loe?gN(loe):function(e){return Tc(e)&&Fu(e)=="[object Set]"},PRe=1,LRe=2,jRe=4,soe="[object Arguments]",uoe="[object Function]",VRe="[object GeneratorFunction]",coe="[object Object]",lo={};function Jm(e,t,n,r,o,i){var a,l=t&PRe,s=t&LRe,u=t&jRe;if(n&&(a=o?n(e,r,o,i):n(e)),a!==void 0)return a;if(!nl(e))return e;var c=tl(e);if(c){if(a=function(v){var g=v.length,b=new v.constructor(g);return g&&typeof v[0]=="string"&&pRe.call(v,"index")&&(b.index=v.index,b.input=v.input),b}(e),!l)return wre(e,a)}else{var d=Fu(e),f=d==uoe||d==VRe;if(O3(e))return Wre(e,l);if(d==coe||d==soe||f&&!o){if(a=s||f?{}:ioe(e),!l)return s?function(v,g){return Gm(v,Kre(v),g)}(e,function(v,g){return v&&Gm(g,N3(g),v)}(a,e)):function(v,g){return Gm(v,_N(v),g)}(e,function(v,g){return v&&Gm(g,M3(g),v)}(a,e))}else{if(!lo[d])return o?e:{};a=RRe(e,d,l)}}i||(i=new Nu);var p=i.get(e);if(p)return p;i.set(e,a),BRe(e)?e.forEach(function(v){a.add(Jm(v,t,n,v,e,i))}):IRe(e)&&e.forEach(function(v,g){a.set(g,Jm(v,t,n,g,e,i))});var m=c?void 0:(u?s?Xre:EN:s?N3:M3)(e);return function(v,g){for(var b=-1,y=v==null?0:v.length;++b<y&&g(v[b],b,v)!==!1;);}(m||e,function(v,g){m&&(v=e[g=v]),hN(a,g,Jm(v,t,n,g,e,i))}),a}lo[soe]=lo["[object Array]"]=lo["[object ArrayBuffer]"]=lo["[object DataView]"]=lo["[object Boolean]"]=lo["[object Date]"]=lo["[object Float32Array]"]=lo["[object Float64Array]"]=lo["[object Int8Array]"]=lo["[object Int16Array]"]=lo["[object Int32Array]"]=lo["[object Map]"]=lo["[object Number]"]=lo[coe]=lo["[object RegExp]"]=lo["[object Set]"]=lo["[object String]"]=lo["[object Symbol]"]=lo["[object Uint8Array]"]=lo["[object Uint8ClampedArray]"]=lo["[object Uint16Array]"]=lo["[object Uint32Array]"]=!0,lo["[object Error]"]=lo[uoe]=lo["[object WeakMap]"]=!1;function doe(e){return Jm(e,4)}Mf=function(e){return Jm(e,5)};function B3(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new Pd;++t<n;)this.add(e[t])}function zRe(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}function foe(e,t){return e.has(t)}B3.prototype.add=B3.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},B3.prototype.has=function(e){return this.__data__.has(e)};var HRe=1,$Re=2;function poe(e,t,n,r,o,i){var a=n&HRe,l=e.length,s=t.length;if(l!=s&&!(a&&s>l))return!1;var u=i.get(e),c=i.get(t);if(u&&c)return u==t&&c==e;var d=-1,f=!0,p=n&$Re?new B3:void 0;for(i.set(e,t),i.set(t,e);++d<l;){var m=e[d],v=t[d];if(r)var g=a?r(v,m,d,t,e,i):r(m,v,d,e,t,i);if(g!==void 0){if(g)continue;f=!1;break}if(p){if(!zRe(t,function(b,y){if(!foe(p,y)&&(m===b||o(m,b,n,r,i)))return p.push(y)})){f=!1;break}}else if(m!==v&&!o(m,v,n,r,i)){f=!1;break}}return i.delete(e),i.delete(t),f}function URe(e){var t=-1,n=Array(e.size);return e.forEach(function(r,o){n[++t]=[o,r]}),n}function DN(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}var WRe=1,GRe=2,qRe="[object Boolean]",KRe="[object Date]",YRe="[object Error]",XRe="[object Map]",QRe="[object Number]",JRe="[object RegExp]",ZRe="[object Set]",eIe="[object String]",tIe="[object Symbol]",nIe="[object ArrayBuffer]",rIe="[object DataView]",hoe=Ks?Ks.prototype:void 0,ON=hoe?hoe.valueOf:void 0,oIe=1,iIe=Object.prototype.hasOwnProperty,aIe=1,voe="[object Arguments]",moe="[object Array]",u9="[object Object]",goe=Object.prototype.hasOwnProperty;function lIe(e,t,n,r,o,i){var a=tl(e),l=tl(t),s=a?moe:Fu(e),u=l?moe:Fu(t),c=(s=s==voe?u9:s)==u9,d=(u=u==voe?u9:u)==u9,f=s==u;if(f&&O3(e)){if(!O3(t))return!1;a=!0,c=!1}if(f&&!c)return i||(i=new Nu),a||bN(e)?poe(e,t,n,r,o,i):function(b,y,w,x,_,E,C){switch(w){case rIe:if(b.byteLength!=y.byteLength||b.byteOffset!=y.byteOffset)return!1;b=b.buffer,y=y.buffer;case nIe:return!(b.byteLength!=y.byteLength||!E(new s9(b),new s9(y)));case qRe:case KRe:case QRe:return k3(+b,+y);case YRe:return b.name==y.name&&b.message==y.message;case JRe:case eIe:return b==y+"";case XRe:var T=URe;case ZRe:var k=x&WRe;if(T||(T=DN),b.size!=y.size&&!k)return!1;var I=C.get(b);if(I)return I==y;x|=GRe,C.set(b,y);var O=poe(T(b),T(y),x,_,E,C);return C.delete(b),O;case tIe:if(ON)return ON.call(b)==ON.call(y)}return!1}(e,t,s,n,r,o,i);if(!(n&aIe)){var p=c&&goe.call(e,"__wrapped__"),m=d&&goe.call(t,"__wrapped__");if(p||m){var v=p?e.value():e,g=m?t.value():t;return i||(i=new Nu),o(v,g,n,r,i)}}return!!f&&(i||(i=new Nu),function(b,y,w,x,_,E){var C=w&oIe,T=EN(b),k=T.length;if(k!=EN(y).length&&!C)return!1;for(var I=k;I--;){var O=T[I];if(!(C?O in y:iIe.call(y,O)))return!1}var F=E.get(b),N=E.get(y);if(F&&N)return F==y&&N==b;var B=!0;E.set(b,y),E.set(y,b);for(var P=C;++I<k;){var V=b[O=T[I]],L=y[O];if(x)var H=C?x(L,V,O,y,b,E):x(V,L,O,b,y,E);if(!(H===void 0?V===L||_(V,L,w,x,E):H)){B=!1;break}P||(P=O=="constructor")}if(B&&!P){var U=b.constructor,G=y.constructor;U==G||!("constructor"in b)||!("constructor"in y)||typeof U=="function"&&U instanceof U&&typeof G=="function"&&G instanceof G||(B=!1)}return E.delete(b),E.delete(y),B}(e,t,n,r,o,i))}function c9(e,t,n,r,o){return e===t||(e==null||t==null||!Tc(e)&&!Tc(t)?e!=e&&t!=t:lIe(e,t,n,r,c9,o))}var sIe=1,uIe=2;function yoe(e){return e==e&&!nl(e)}function boe(e,t){return function(n){return n!=null&&n[e]===t&&(t!==void 0||e in Object(n))}}function cIe(e){var t=function(n){for(var r=M3(n),o=r.length;o--;){var i=r[o],a=n[i];r[o]=[i,a,yoe(a)]}return r}(e);return t.length==1&&t[0][2]?boe(t[0][0],t[0][1]):function(n){return n===e||function(r,o,i,a){var l=i.length,s=l;if(r==null)return!s;for(r=Object(r);l--;){var u=i[l];if(u[2]?u[1]!==r[u[0]]:!(u[0]in r))return!1}for(;++l<s;){var c=(u=i[l])[0],d=r[c],f=u[1];if(u[2]){if(d===void 0&&!(c in r))return!1}else{var p=new Nu;if(!c9(f,d,sIe|uIe,a,p))return!1}}return!0}(n,0,t)}}function dIe(e,t){return e!=null&&t in Object(e)}function Aoe(e,t){return e!=null&&function(n,r,o){for(var i=-1,a=(r=Ym(r,n)).length,l=!1;++i<a;){var s=Xm(r[i]);if(!(l=n!=null&&o(n,s)))break;n=n[s]}return l||++i!=a?l:!!(a=n==null?0:n.length)&&vN(a)&&o9(s,a)&&(tl(n)||D3(n))}(e,t,dIe)}var fIe=1,pIe=2;function hIe(e){return AN(e)?(t=Xm(e),function(n){return n==null?void 0:n[t]}):function(n){return function(r){return l9(r,n)}}(e);var t}function woe(e){return typeof e=="function"?e:e==null?uN:typeof e=="object"?tl(e)?(t=e[0],n=e[1],AN(t)&&yoe(n)?boe(Xm(t),n):function(r){var o=es(r,t);return o===void 0&&o===n?Aoe(r,t):c9(n,o,fIe|pIe)}):cIe(e):hIe(e);var t,n}var xoe=function(e,t,n){for(var r=-1,o=Object(e),i=n(e),a=i.length;a--;){var l=i[++r];if(t(o[l],l,o)===!1)break}return e},_oe,vIe=(_oe=function(e,t){return e&&xoe(e,t,M3)},function(e,t){if(e==null)return e;if(!qm(e))return _oe(e,t);for(var n=e.length,r=-1,o=Object(e);++r<n&&t(o[r],r,o)!==!1;);return e}),TN=function(){return Mu.Date.now()},mIe="Expected a function",gIe=Math.max,yIe=Math.min;ts=function(e,t,n){var r,o,i,a,l,s,u=0,c=!1,d=!1,f=!0;if(typeof e!="function")throw new TypeError(mIe);function p(y){var w=r,x=o;return r=o=void 0,u=y,a=e.apply(x,w)}function m(y){var w=y-s;return s===void 0||w>=t||w<0||d&&y-u>=i}function v(){var y=TN();if(m(y))return g(y);l=setTimeout(v,function(w){var x=t-(w-s);return d?yIe(x,i-(w-u)):x}(y))}function g(y){return l=void 0,f&&r?p(y):(r=o=void 0,a)}function b(){var y=TN(),w=m(y);if(r=arguments,o=this,s=y,w){if(l===void 0)return function(x){return u=x,l=setTimeout(v,t),c?p(x):a}(s);if(d)return clearTimeout(l),l=setTimeout(v,t),p(s)}return l===void 0&&(l=setTimeout(v,t)),a}return t=yre(t)||0,nl(n)&&(c=!!n.leading,i=(d="maxWait"in n)?gIe(yre(n.maxWait)||0,t):i,f="trailing"in n?!!n.trailing:f),b.cancel=function(){l!==void 0&&clearTimeout(l),u=0,r=s=o=l=void 0},b.flush=function(){return l===void 0?a:g(TN())},b};function MN(e,t,n){(n!==void 0&&!k3(e[t],n)||n===void 0&&!(t in e))&&pN(e,t,n)}function Eoe(e){return Tc(e)&&qm(e)}function NN(e,t){if((t!=="constructor"||typeof e[t]!="function")&&t!="__proto__")return e[t]}function bIe(e,t,n,r,o,i,a){var l=NN(e,n),s=NN(t,n),u=a.get(s);if(u)MN(e,n,u);else{var c,d=i?i(l,s,n+"",e,t,a):void 0,f=d===void 0;if(f){var p=tl(s),m=!p&&O3(s),v=!p&&!m&&bN(s);d=s,p||m||v?tl(l)?d=l:Eoe(l)?d=wre(l):m?(f=!1,d=Wre(s,!0)):v?(f=!1,d=ooe(s,!0)):d=[]:Vre(s)||D3(s)?(d=l,D3(l)?d=Gm(c=l,N3(c)):nl(l)&&!cN(l)||(d=ioe(s))):f=!1}f&&(a.set(s,d),o(d,s,r,i,a),a.delete(s)),MN(e,n,d)}}function Coe(e,t,n,r,o){e!==t&&xoe(t,function(i,a){if(o||(o=new Nu),nl(i))bIe(e,t,a,n,Coe,r,o);else{var l=r?r(NN(e,a),i,a+"",e,t,o):void 0;l===void 0&&(l=i),MN(e,a,l)}},N3)}WQ=function(e,t,n){var r=e==null?0:e.length;if(!r)return-1;var o=r-1;return _re(e,woe(t),o,!0)};function AIe(e,t){var n=-1,r=qm(e)?Array(e.length):[];return vIe(e,function(o,i,a){r[++n]=t(o,i,a)}),r}function wIe(e,t){return I3(function(n,r){return(tl(n)?sN:AIe)(n,woe(r))}(e,t),1)}var xIe=1/0;function d9(e){for(var t=-1,n=e==null?0:e.length,r={};++t<n;){var o=e[t];r[o[0]]=o[1]}return r}function _Ie(e,t){return t.length<2?e:l9(e,function(n,r,o){var i=-1,a=n.length;r<0&&(r=-r>a?0:a+r),(o=o>a?a:o)<0&&(o+=a),a=r>o?0:o-r>>>0,r>>>=0;for(var l=Array(a);++i<a;)l[i]=n[i+r];return l}(t,0,-1))}ns=function(e,t){return c9(e,t)},pa=function(e){return e==null};function Soe(e){return e===void 0}let FN;XQ=(FN=function(e,t,n){Coe(e,t,n)},Sre(function(e,t){var n=-1,r=t.length,o=r>1?t[r-1]:void 0,i=r>2?t[2]:void 0;for(o=FN.length>3&&typeof o=="function"?(r--,o):void 0,i&&function(l,s,u){if(!nl(u))return!1;var c=typeof s;return!!(c=="number"?qm(u)&&o9(s,u.length):c=="string"&&s in u)&&k3(u[s],l)}(t[0],t[1],i)&&(o=r<3?void 0:o,r=1),e=Object(e);++n<r;){var a=t[n];a&&FN(e,a,n,o)}return e}));function EIe(e,t){return(e=_Ie(e,t=Ym(t,e)))==null||delete e[Xm((n=t,r=n==null?0:n.length,r?n[r-1]:void 0))];var n,r}function CIe(e){return Vre(e)?void 0:e}var SIe=Lre(function(e,t){var n={};if(e==null)return n;var r=!1;t=sN(t,function(i){return i=Ym(i,e),r||(r=i.length>1),i}),Gm(e,Xre(e),n),r&&(n=Jm(n,7,CIe));for(var o=t.length;o--;)EIe(n,t[o]);return n});function koe(e,t,n,r){if(!nl(e))return e;for(var o=-1,i=(t=Ym(t,e)).length,a=i-1,l=e;l!=null&&++o<i;){var s=Xm(t[o]),u=n;if(s==="__proto__"||s==="constructor"||s==="prototype")return e;if(o!=a){var c=l[s];(u=void 0)==void 0&&(u=nl(c)?c:o9(t[o+1])?[]:{})}hN(l,s,u),l=l[s]}return e}function kIe(e,t){return function(n,r,o){for(var i=-1,a=r.length,l={};++i<a;){var s=r[i],u=l9(n,s);o(u,s)&&koe(l,Ym(s,n),u)}return l}(e,t,function(n,r){return Aoe(e,r)})}HQ=Lre(function(e,t){return e==null?{}:kIe(e,t)}),VQ=function(e,t,n){return e==null?e:koe(e,t,n)};function RN(e,t,n){var r=!0,o=!0;if(typeof e!="function")throw new TypeError("Expected a function");return nl(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),ts(e,t,{leading:r,maxWait:t,trailing:o})}var DIe=Qm&&1/DN(new Qm([,-0]))[1]==1/0?function(e){return new Qm(e)}:function(){},IN=Sre(function(e){return function(t,n,r){var o=-1,i=NFe,a=t.length,l=!0,s=[],u=s;if(a>=200){var c=DIe(t);if(c)return DN(c);l=!1,i=foe,u=new B3}else u=s;e:for(;++o<a;){var d=t[o],f=d;if(d=d!==0?d:0,l&&f==f){for(var p=u.length;p--;)if(u[p]===f)continue e;s.push(d)}else i(u,f,r)||(u!==s&&u.push(f),s.push(d))}return s}(I3(e,1,Eoe,!0))});let Ki,cs,Z0,Ru,P3,L3;Wi=e=>e===void 0,Ki=e=>typeof e=="boolean",Kn=e=>typeof e=="number",cs=e=>!e&&e!==0||mt(e)&&e.length===0||wn(e)&&!Object.keys(e).length,$s=e=>typeof Element<"u"&&e instanceof Element,Z0=e=>pa(e),RQ=e=>rr?window.requestAnimationFrame(e):setTimeout(e,16),mOe=e=>rr?window.cancelAnimationFrame(e):clearTimeout(e),GQ=(e="")=>e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d"),Ru=e=>M0(e),P3=e=>Object.keys(e),L3=(e,t,n)=>({get value(){return es(e,t,n)},set value(r){VQ(e,t,r)}});class OIe extends Error{constructor(t){super(t),this.name="ElementPlusError"}}Ka=function(e,t){throw new OIe(`[${e}] ${t}`)},AOe=function(e,t){};let BN,Ld;BN=(e="")=>e.split(" ").filter(t=>!!t.trim()),Hs=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},Ed=(e,t)=>{e&&t.trim()&&e.classList.add(...BN(t))},xl=(e,t)=>{e&&t.trim()&&e.classList.remove(...BN(t))},Ld=(e,t)=>{var n;if(!rr||!e||!t)return"";let r=qi(t);r==="float"&&(r="cssFloat");try{const o=e.style[r];if(o)return o;const i=(n=document.defaultView)==null?void 0:n.getComputedStyle(e,"");return i?i[r]:""}catch{return e.style[r]}},ka=function(e,t="px"){return e?Kn(e)||an(n=e)&&!Number.isNaN(Number(n))?`${e}${t}`:an(e)?e:void 0:"";var n};let Doe;Doe=(e,t)=>{if(!rr)return!1;const n={undefined:"overflow",true:"overflow-y",false:"overflow-x"}[String(t)],r=Ld(e,n);return["scroll","auto","overlay"].some(o=>r.includes(o))},jOe=(e,t)=>{if(!rr)return;let n=e;for(;n;){if([window,document,document.documentElement].includes(n))return window;if(Doe(n,t))return n;n=n.parentNode}return n};let f9;YQ=e=>{var t;if(!rr)return 0;if(f9!==void 0)return f9;const n=document.createElement("div");n.className=`${e}-scrollbar__wrap`,n.style.visibility="hidden",n.style.width="100px",n.style.position="absolute",n.style.top="-9999px",document.body.appendChild(n);const r=n.offsetWidth;n.style.overflow="scroll";const o=document.createElement("div");o.style.width="100%",n.appendChild(o);const i=o.offsetWidth;return(t=n.parentNode)==null||t.removeChild(n),f9=r-i,f9};function Ooe(e,t){if(!rr)return;if(!t)return void(e.scrollTop=0);const n=[];let r=t.offsetParent;for(;r!==null&&e!==r&&e.contains(r);)n.push(r),r=r.offsetParent;const o=t.offsetTop+n.reduce((s,u)=>s+u.offsetTop,0),i=o+t.offsetHeight,a=e.scrollTop,l=a+e.clientHeight;o<a?e.scrollTop=o:i>l&&(e.scrollTop=i-e.clientHeight)}let p9,Toe,Moe,j3,h9,PN,Noe,Foe,Roe,Ioe,LN,jd,Boe,jN,Poe,Loe,joe,Voe,zoe,V3,Hoe,VN,$oe,v9,zN,Uoe;p0=Te({name:"ArrowDown",__name:"arrow-down",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z"})]))}),m0=Te({name:"ArrowLeft",__name:"arrow-left",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.592 30.592 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.592 30.592 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0z"})]))}),Su=Te({name:"ArrowRight",__name:"arrow-right",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})]))}),p9=Te({name:"ArrowUp",__name:"arrow-up",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"})]))}),Toe=Te({name:"Calendar",__name:"calendar",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64"})]))}),Moe=Te({name:"CaretRight",__name:"caret-right",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M384 192v640l384-320.064z"})]))}),ROe=Te({name:"CaretTop",__name:"caret-top",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M512 320 192 704h639.936z"})]))}),j3=Te({name:"Check",__name:"check",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z"})]))}),h9=Te({name:"CircleCheck",__name:"circle-check",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),ce("path",{fill:"currentColor",d:"M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752l265.344-265.408z"})]))}),PN=Te({name:"CircleCloseFilled",__name:"circle-close-filled",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}),h0=Te({name:"CircleClose",__name:"circle-close",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z"}),ce("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}),qQ=Te({name:"Clock",__name:"clock",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),ce("path",{fill:"currentColor",d:"M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"}),ce("path",{fill:"currentColor",d:"M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32"})]))}),wc=Te({name:"Close",__name:"close",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}),wm=Te({name:"DArrowLeft",__name:"d-arrow-left",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224zm256 0a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224z"})]))}),xm=Te({name:"DArrowRight",__name:"d-arrow-right",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L764.736 512 452.864 192a30.592 30.592 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L508.736 512 196.864 192a30.592 30.592 0 0 1 0-42.688z"})]))}),Noe=Te({name:"Delete",__name:"delete",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32"})]))}),Foe=Te({name:"Document",__name:"document",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z"})]))}),Roe=Te({name:"FullScreen",__name:"full-screen",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64l192-.192zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"})]))}),Ioe=Te({name:"Hide",__name:"hide",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M876.8 156.8c0-9.6-3.2-16-9.6-22.4-6.4-6.4-12.8-9.6-22.4-9.6-9.6 0-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176C44.8 438.4 0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4 0 9.6 3.2 16 9.6 22.4 6.4 6.4 12.8 9.6 22.4 9.6 9.6 0 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4Zm-646.4 528c-76.8-70.4-128-128-153.6-172.8 28.8-48 80-105.6 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4Zm140.8-96c-12.8-22.4-19.2-48-19.2-76.8 0-44.8 16-83.2 48-112 32-28.8 67.2-48 112-48 28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6-28.8 48-80 105.6-153.6 172.8-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176C979.199 585.6 1024 528 1024 512s-48.001-73.6-134.401-176Z"}),ce("path",{fill:"currentColor",d:"M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112-32 28.8-67.2 48-112 48Z"})]))}),LN=Te({name:"InfoFilled",__name:"info-filled",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.992 12.992 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}),jd=Te({name:"Loading",__name:"loading",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"})]))}),Boe=Te({name:"Minus",__name:"minus",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"})]))}),wOe=Te({name:"MoreFilled",__name:"more-filled",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224"})]))}),BOe=Te({name:"More",__name:"more",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"})]))}),UOe=Te({name:"PictureFilled",__name:"picture-filled",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384"})]))}),jN=Te({name:"Plus",__name:"plus",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"})]))}),Poe=Te({name:"QuestionFilled",__name:"question-filled",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z"})]))}),Loe=Te({name:"RefreshLeft",__name:"refresh-left",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z"})]))}),joe=Te({name:"RefreshRight",__name:"refresh-right",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z"})]))}),Voe=Te({name:"ScaleToOriginal",__name:"scale-to-original",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118zm-361.412 0a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118M512 361.412a30.118 30.118 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.118 30.118 0 0 0 512 361.412M512 512a30.118 30.118 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.118 30.118 0 0 0 512 512"})]))}),zoe=Te({name:"Search",__name:"search",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704"})]))}),MOe=Te({name:"SortDown",__name:"sort-down",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0"})]))}),TOe=Te({name:"SortUp",__name:"sort-up",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248"})]))}),V3=Te({name:"StarFilled",__name:"star-filled",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M283.84 867.84 512 747.776l228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72z"})]))}),Hoe=Te({name:"Star",__name:"star",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"})]))}),VN=Te({name:"SuccessFilled",__name:"success-filled",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}),$oe=Te({name:"View",__name:"view",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160"})]))}),v9=Te({name:"WarningFilled",__name:"warning-filled",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}),zN=Te({name:"ZoomIn",__name:"zoom-in",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z"})]))}),Uoe=Te({name:"ZoomOut",__name:"zoom-out",setup:e=>(t,n)=>(Y(),fe("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ce("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64"})]))});let HN,$N,m9,Vd,UN,Tl,WN;HN="__epPropKey",BDe=e=>e,Mb=(e,t)=>{if(!wn(e)||wn(n=e)&&n[HN])return e;var n;const{values:r,required:o,default:i,type:a,validator:l}=e,s=r||l?c=>{let d=!1,f=[];if(r&&(f=Array.from(r),Tn(e,"default")&&f.push(i),d||(d=f.includes(c))),l&&(d||(d=l(c))),!d&&f.length>0){const p=[...new Set(f)].map(m=>JSON.stringify(m)).join(", ");MM(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${p}], got value ${JSON.stringify(c)}.`)}return d}:void 0,u={type:a,required:!!o,validator:s,[HN]:!0};return Tn(e,"default")&&(u.default=i),u},Pt=e=>d9(Object.entries(e).map(([t,n])=>[t,Mb(n,t)])),fi=[String,Object,Function],$N={Close:wc},m9={Close:wc,SuccessFilled:VN,InfoFilled:LN,WarningFilled:v9,CircleCloseFilled:PN},Vd={success:VN,warning:v9,error:PN,info:LN},zO={validating:jd,success:h9,error:h0},Cr=(e,t)=>{if(e.install=n=>{for(const r of[e,...Object.values(t??{})])n.component(r.name,r)},t)for(const[n,r]of Object.entries(t))e[n]=r;return e},UN=(e,t)=>(e.install=n=>{e._context=n._context,n.config.globalProperties[t]=e},e),Ya=e=>(e.install=fr,e),xQ=(...e)=>t=>{e.forEach(n=>{Ut(n)?n(t):n.value=t})},Xt={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"},xn="update:modelValue",Xo="change",Tl="input",bm=["","default","small","large"],WN=e=>["",...bm].includes(e),Ob=(e=>(e[e.TEXT=1]="TEXT",e[e.CLASS=2]="CLASS",e[e.STYLE=4]="STYLE",e[e.PROPS=8]="PROPS",e[e.FULL_PROPS=16]="FULL_PROPS",e[e.HYDRATE_EVENTS=32]="HYDRATE_EVENTS",e[e.STABLE_FRAGMENT=64]="STABLE_FRAGMENT",e[e.KEYED_FRAGMENT=128]="KEYED_FRAGMENT",e[e.UNKEYED_FRAGMENT=256]="UNKEYED_FRAGMENT",e[e.NEED_PATCH=512]="NEED_PATCH",e[e.DYNAMIC_SLOTS=1024]="DYNAMIC_SLOTS",e[e.HOISTED=-1]="HOISTED",e[e.BAIL=-2]="BAIL",e))(Ob||{}),CQ=function(e){return oo(e)&&e.type===bt},dOe=function(e){return oo(e)&&!CQ(e)&&!function(t){return oo(t)&&t.type===hi}(e)};let GN,Ml,g9,Woe,Goe,qN,qoe,Koe,KN,Zm,ep,YN,y9,XN,Yoe,Xoe,QN;xOe=e=>{if(!oo(e))return{};const t=e.props||{},n=(oo(e.type)?e.type.props:void 0)||{},r={};return Object.keys(n).forEach(o=>{Tn(n[o],"default")&&(r[o]=n[o].default)}),Object.keys(t).forEach(o=>{r[qi(o)]=t[o]}),r},Rb=e=>{const t=mt(e)?e:[e],n=[];return t.forEach(r=>{var o;mt(r)?n.push(...Rb(r)):oo(r)&&mt(r.children)?n.push(...Rb(r.children)):(n.push(r),oo(r)&&((o=r.component)!=null&&o.subTree)&&n.push(...Rb(r.component.subTree)))}),n},GN=e=>[...new Set(e)],Ml=e=>e||e===0?Array.isArray(e)?e:[e]:[],g9=e=>/([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(e),bOe=e=>e,Woe=["class","style"],Goe=/^on[A-Z]/,GO=(e={})=>{const{excludeListeners:t=!1,excludeKeys:n}=e,r=ee(()=>((n==null?void 0:n.value)||[]).concat(Woe)),o=dn();return ee(o?()=>{var i;return d9(Object.entries((i=o.proxy)==null?void 0:i.$attrs).filter(([a])=>!(r.value.includes(a)||t&&Goe.test(a))))}:()=>({}))},y0=({from:e,replacement:t,scope:n,version:r,ref:o,type:i="API"},a)=>{Je(()=>M(a),l=>{},{immediate:!0})},qN=(e,t,n,r)=>{let o={offsetX:0,offsetY:0};const i=l=>{const s=l.clientX,u=l.clientY,{offsetX:c,offsetY:d}=o,f=e.value.getBoundingClientRect(),p=f.left,m=f.top,v=f.width,g=f.height,b=document.documentElement.clientWidth,y=document.documentElement.clientHeight,w=-p+c,x=-m+d,_=b-p-v+c,E=y-m-g+d,C=k=>{let I=c+k.clientX-s,O=d+k.clientY-u;r!=null&&r.value||(I=Math.min(Math.max(I,w),_),O=Math.min(Math.max(O,x),E)),o={offsetX:I,offsetY:O},e.value&&(e.value.style.transform=`translate(${ka(I)}, ${ka(O)})`)},T=()=>{document.removeEventListener("mousemove",C),document.removeEventListener("mouseup",T)};document.addEventListener("mousemove",C),document.addEventListener("mouseup",T)},a=()=>{t.value&&e.value&&t.value.removeEventListener("mousedown",i)};yn(()=>{yl(()=>{n.value?t.value&&e.value&&t.value.addEventListener("mousedown",i):a()})}),xo(()=>{a()})},qoe=e=>(t,n)=>Koe(t,n,M(e)),Koe=(e,t,n)=>es(n,e,e).replace(/\{(\w+)\}/g,(r,o)=>{var i;return`${(i=t==null?void 0:t[o])!=null?i:`{${o}}`}`}),KN=Symbol("localeContextKey"),Gr=e=>{const t=e||Rt(KN,de());return(n=>({lang:ee(()=>M(n).name),locale:Jn(n)?n:de(n),t:qoe(n)}))(ee(()=>t.value||Une))},Zm="el",ep=(e,t,n,r,o)=>{let i=`${e}-${t}`;return n&&(i+=`-${n}`),r&&(i+=`__${r}`),o&&(i+=`--${o}`),i},YN=Symbol("namespaceContextKey"),y9=e=>{const t=e||(dn()?Rt(YN,de(Zm)):de(Zm));return ee(()=>M(t)||Zm)},_t=(e,t)=>{const n=y9(t);return{namespace:n,b:(r="")=>ep(n.value,e,r,"",""),e:r=>r?ep(n.value,e,"",r,""):"",m:r=>r?ep(n.value,e,"","",r):"",be:(r,o)=>r&&o?ep(n.value,e,r,o,""):"",em:(r,o)=>r&&o?ep(n.value,e,"",r,o):"",bm:(r,o)=>r&&o?ep(n.value,e,r,"",o):"",bem:(r,o,i)=>r&&o&&i?ep(n.value,e,r,o,i):"",is:(r,...o)=>{const i=!(o.length>=1)||o[0];return r&&i?`is-${r}`:""},cssVar:r=>{const o={};for(const i in r)r[i]&&(o[`--${n.value}-${i}`]=r[i]);return o},cssVarName:r=>`--${n.value}-${r}`,cssVarBlock:r=>{const o={};for(const i in r)r[i]&&(o[`--${n.value}-${e}-${i}`]=r[i]);return o},cssVarBlockName:r=>`--${n.value}-${e}-${r}`}},XN=(e,t={})=>{Jn(e)||Ka("[useLockscreen]","You need to pass a ref param to this function");const n=t.ns||_t("popup"),r=xee(()=>n.bm("parent","hidden"));if(!rr||Hs(document.body,r.value))return;let o=0,i=!1,a="0";const l=()=>{setTimeout(()=>{xl(document==null?void 0:document.body,r.value),i&&document&&(document.body.style.width=a)},200)};Je(e,s=>{if(!s)return void l();i=!Hs(document.body,r.value),i&&(a=document.body.style.width),o=YQ(n.namespace.value);const u=document.documentElement.clientHeight<document.body.scrollHeight,c=Ld(document.body,"overflowY");o>0&&(u||c==="scroll")&&i&&(document.body.style.width=`calc(100% - ${o}px)`),Ed(document.body,r.value)}),e3(()=>l())},Yoe=Mb({type:Boolean,default:null}),Xoe=Mb({type:Function}),QN=e=>{const t=`update:${e}`,n=`onUpdate:${e}`,r=[t];return{useModelToggle:({indicator:o,toggleReason:i,shouldHideWhenRouteChanges:a,shouldProceed:l,onShow:s,onHide:u})=>{const c=dn(),{emit:d}=c,f=c.props,p=ee(()=>Ut(f[n])),m=ee(()=>f[e]===null),v=x=>{o.value!==!0&&(o.value=!0,i&&(i.value=x),Ut(s)&&s(x))},g=x=>{o.value!==!1&&(o.value=!1,i&&(i.value=x),Ut(u)&&u(x))},b=x=>{if(f.disabled===!0||Ut(l)&&!l())return;const _=p.value&&rr;_&&d(t,!0),!m.value&&_||v(x)},y=x=>{if(f.disabled===!0||!rr)return;const _=p.value&&rr;_&&d(t,!1),!m.value&&_||g(x)},w=x=>{Ki(x)&&(f.disabled&&x?p.value&&d(t,!1):o.value!==x&&(x?v():g()))};return Je(()=>f[e],w),a&&c.appContext.config.globalProperties.$route!==void 0&&Je(()=>({...c.proxy.$route}),()=>{a.value&&o.value&&y()}),yn(()=>{w(f[e])}),{hide:y,show:b,toggle:()=>{o.value?y():b()},hasUpdateHandler:p}},useModelToggleProps:{[e]:Yoe,[n]:Xoe},useModelToggleEmits:r}},QN("modelValue");const Qoe=e=>{const t=dn();return ee(()=>{var n,r;return(r=(n=t==null?void 0:t.proxy)==null?void 0:n.$props)==null?void 0:r[e]})};let rl,ds,fs,ol,b9,eg,e1,tg,Joe,JN,ng,Zoe,ZN,eie;rl="top",ds="bottom",fs="right",ol="left",b9="auto",eg=[rl,ds,fs,ol],e1="start",tg="end",Joe="clippingParents",JN="viewport",ng="popper",Zoe="reference",ZN=eg.reduce(function(e,t){return e.concat([t+"-"+e1,t+"-"+tg])},[]),v0=[].concat(eg,[b9]).reduce(function(e,t){return e.concat([t,t+"-"+e1,t+"-"+tg])},[]),eie=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function Mc(e){return e?(e.nodeName||"").toLowerCase():null}function Iu(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function rg(e){return e instanceof Iu(e).Element||e instanceof Element}function Ys(e){return e instanceof Iu(e).HTMLElement||e instanceof HTMLElement}function eF(e){return typeof ShadowRoot<"u"&&(e instanceof Iu(e).ShadowRoot||e instanceof ShadowRoot)}var tie={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach(function(n){var r=t.styles[n]||{},o=t.attributes[n]||{},i=t.elements[n];!Ys(i)||!Mc(i)||(Object.assign(i.style,r),Object.keys(o).forEach(function(a){var l=o[a];l===!1?i.removeAttribute(a):i.setAttribute(a,l===!0?"":l)}))})},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(r){var o=t.elements[r],i=t.attributes[r]||{},a=Object.keys(t.styles.hasOwnProperty(r)?t.styles[r]:n[r]).reduce(function(l,s){return l[s]="",l},{});!Ys(o)||!Mc(o)||(Object.assign(o.style,a),Object.keys(i).forEach(function(l){o.removeAttribute(l)}))})}},requires:["computeStyles"]};function Nc(e){return e.split("-")[0]}var t1=Math.max,A9=Math.min,og=Math.round;function ig(e,t){t===void 0&&(t=!1);var n=e.getBoundingClientRect(),r=1,o=1;if(Ys(e)&&t){var i=e.offsetHeight,a=e.offsetWidth;a>0&&(r=og(n.width)/a||1),i>0&&(o=og(n.height)/i||1)}return{width:n.width/r,height:n.height/o,top:n.top/o,right:n.right/r,bottom:n.bottom/o,left:n.left/r,x:n.left/r,y:n.top/o}}function tF(e){var t=ig(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function nie(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&eF(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function zd(e){return Iu(e).getComputedStyle(e)}function TIe(e){return["table","td","th"].indexOf(Mc(e))>=0}function tp(e){return((rg(e)?e.ownerDocument:e.document)||window.document).documentElement}function w9(e){return Mc(e)==="html"?e:e.assignedSlot||e.parentNode||(eF(e)?e.host:null)||tp(e)}function rie(e){return Ys(e)&&zd(e).position!=="fixed"?e.offsetParent:null}function z3(e){for(var t=Iu(e),n=rie(e);n&&TIe(n)&&zd(n).position==="static";)n=rie(n);return n&&(Mc(n)==="html"||Mc(n)==="body"&&zd(n).position==="static")?t:n||function(r){var o=navigator.userAgent.toLowerCase().indexOf("firefox")!==-1;if(navigator.userAgent.indexOf("Trident")!==-1&&Ys(r)&&zd(r).position==="fixed")return null;var i=w9(r);for(eF(i)&&(i=i.host);Ys(i)&&["html","body"].indexOf(Mc(i))<0;){var a=zd(i);if(a.transform!=="none"||a.perspective!=="none"||a.contain==="paint"||["transform","perspective"].indexOf(a.willChange)!==-1||o&&a.willChange==="filter"||o&&a.filter&&a.filter!=="none")return i;i=i.parentNode}return null}(e)||t}function nF(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function H3(e,t,n){return t1(e,A9(t,n))}function oie(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function iie(e,t){return t.reduce(function(n,r){return n[r]=e,n},{})}var MIe={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,l=Nc(n.placement),s=nF(l),u=[ol,fs].indexOf(l)>=0?"height":"width";if(i&&a){var c=function(T,k){return oie(typeof(T=typeof T=="function"?T(Object.assign({},k.rects,{placement:k.placement})):T)!="number"?T:iie(T,eg))}(o.padding,n),d=tF(i),f=s==="y"?rl:ol,p=s==="y"?ds:fs,m=n.rects.reference[u]+n.rects.reference[s]-a[s]-n.rects.popper[u],v=a[s]-n.rects.reference[s],g=z3(i),b=g?s==="y"?g.clientHeight||0:g.clientWidth||0:0,y=m/2-v/2,w=c[f],x=b-d[u]-c[p],_=b/2-d[u]/2+y,E=H3(w,_,x),C=s;n.modifiersData[r]=((t={})[C]=E,t.centerOffset=E-_,t)}},effect:function(e){var t=e.state,n=e.options.element,r=n===void 0?"[data-popper-arrow]":n;r!=null&&(typeof r=="string"&&!(r=t.elements.popper.querySelector(r))||!nie(t.elements.popper,r)||(t.elements.arrow=r))},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ag(e){return e.split("-")[1]}var NIe={top:"auto",right:"auto",bottom:"auto",left:"auto"};function aie(e){var t,n=e.popper,r=e.popperRect,o=e.placement,i=e.variation,a=e.offsets,l=e.position,s=e.gpuAcceleration,u=e.adaptive,c=e.roundOffsets,d=e.isFixed,f=a.x,p=f===void 0?0:f,m=a.y,v=m===void 0?0:m,g=typeof c=="function"?c({x:p,y:v}):{x:p,y:v};p=g.x,v=g.y;var b=a.hasOwnProperty("x"),y=a.hasOwnProperty("y"),w=ol,x=rl,_=window;if(u){var E=z3(n),C="clientHeight",T="clientWidth";E===Iu(n)&&zd(E=tp(n)).position!=="static"&&l==="absolute"&&(C="scrollHeight",T="scrollWidth"),(o===rl||(o===ol||o===fs)&&i===tg)&&(x=ds,v-=(d&&E===_&&_.visualViewport?_.visualViewport.height:E[C])-r.height,v*=s?1:-1),(o===ol||(o===rl||o===ds)&&i===tg)&&(w=fs,p-=(d&&E===_&&_.visualViewport?_.visualViewport.width:E[T])-r.width,p*=s?1:-1)}var k,I=Object.assign({position:l},u&&NIe),O=c===!0?function(F){var N=F.x,B=F.y,P=window.devicePixelRatio||1;return{x:og(N*P)/P||0,y:og(B*P)/P||0}}({x:p,y:v}):{x:p,y:v};return p=O.x,v=O.y,s?Object.assign({},I,((k={})[x]=y?"0":"",k[w]=b?"0":"",k.transform=(_.devicePixelRatio||1)<=1?"translate("+p+"px, "+v+"px)":"translate3d("+p+"px, "+v+"px, 0)",k)):Object.assign({},I,((t={})[x]=y?v+"px":"",t[w]=b?p+"px":"",t.transform="",t))}var lie={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=r===void 0||r,i=n.adaptive,a=i===void 0||i,l=n.roundOffsets,s=l===void 0||l,u={placement:Nc(t.placement),variation:ag(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,aie(Object.assign({},u,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:s})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,aie(Object.assign({},u,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:s})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},x9={passive:!0},sie={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,r=e.options,o=r.scroll,i=o===void 0||o,a=r.resize,l=a===void 0||a,s=Iu(t.elements.popper),u=[].concat(t.scrollParents.reference,t.scrollParents.popper);return i&&u.forEach(function(c){c.addEventListener("scroll",n.update,x9)}),l&&s.addEventListener("resize",n.update,x9),function(){i&&u.forEach(function(c){c.removeEventListener("scroll",n.update,x9)}),l&&s.removeEventListener("resize",n.update,x9)}},data:{}},FIe={left:"right",right:"left",bottom:"top",top:"bottom"};function _9(e){return e.replace(/left|right|bottom|top/g,function(t){return FIe[t]})}var RIe={start:"end",end:"start"};function uie(e){return e.replace(/start|end/g,function(t){return RIe[t]})}function rF(e){var t=Iu(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function oF(e){return ig(tp(e)).left+rF(e).scrollLeft}function iF(e){var t=zd(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function cie(e){return["html","body","#document"].indexOf(Mc(e))>=0?e.ownerDocument.body:Ys(e)&&iF(e)?e:cie(w9(e))}function $3(e,t){var n;t===void 0&&(t=[]);var r=cie(e),o=r===((n=e.ownerDocument)==null?void 0:n.body),i=Iu(r),a=o?[i].concat(i.visualViewport||[],iF(r)?r:[]):r,l=t.concat(a);return o?l:l.concat($3(w9(a)))}function aF(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function die(e,t){return t===JN?aF(function(n){var r=Iu(n),o=tp(n),i=r.visualViewport,a=o.clientWidth,l=o.clientHeight,s=0,u=0;return i&&(a=i.width,l=i.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(s=i.offsetLeft,u=i.offsetTop)),{width:a,height:l,x:s+oF(n),y:u}}(e)):rg(t)?function(n){var r=ig(n);return r.top=r.top+n.clientTop,r.left=r.left+n.clientLeft,r.bottom=r.top+n.clientHeight,r.right=r.left+n.clientWidth,r.width=n.clientWidth,r.height=n.clientHeight,r.x=r.left,r.y=r.top,r}(t):aF(function(n){var r,o=tp(n),i=rF(n),a=(r=n.ownerDocument)==null?void 0:r.body,l=t1(o.scrollWidth,o.clientWidth,a?a.scrollWidth:0,a?a.clientWidth:0),s=t1(o.scrollHeight,o.clientHeight,a?a.scrollHeight:0,a?a.clientHeight:0),u=-i.scrollLeft+oF(n),c=-i.scrollTop;return zd(a||o).direction==="rtl"&&(u+=t1(o.clientWidth,a?a.clientWidth:0)-l),{width:l,height:s,x:u,y:c}}(tp(e)))}function IIe(e,t,n){var r=t==="clippingParents"?function(l){var s=$3(w9(l)),u=["absolute","fixed"].indexOf(zd(l).position)>=0&&Ys(l)?z3(l):l;return rg(u)?s.filter(function(c){return rg(c)&&nie(c,u)&&Mc(c)!=="body"}):[]}(e):[].concat(t),o=[].concat(r,[n]),i=o[0],a=o.reduce(function(l,s){var u=die(e,s);return l.top=t1(u.top,l.top),l.right=A9(u.right,l.right),l.bottom=A9(u.bottom,l.bottom),l.left=t1(u.left,l.left),l},die(e,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function fie(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?Nc(o):null,a=o?ag(o):null,l=n.x+n.width/2-r.width/2,s=n.y+n.height/2-r.height/2;switch(i){case rl:t={x:l,y:n.y-r.height};break;case ds:t={x:l,y:n.y+n.height};break;case fs:t={x:n.x+n.width,y:s};break;case ol:t={x:n.x-r.width,y:s};break;default:t={x:n.x,y:n.y}}var u=i?nF(i):null;if(u!=null){var c=u==="y"?"height":"width";switch(a){case e1:t[u]=t[u]-(n[c]/2-r[c]/2);break;case tg:t[u]=t[u]+(n[c]/2-r[c]/2)}}return t}function U3(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=r===void 0?e.placement:r,i=n.boundary,a=i===void 0?Joe:i,l=n.rootBoundary,s=l===void 0?JN:l,u=n.elementContext,c=u===void 0?ng:u,d=n.altBoundary,f=d!==void 0&&d,p=n.padding,m=p===void 0?0:p,v=oie(typeof m!="number"?m:iie(m,eg)),g=c===ng?Zoe:ng,b=e.rects.popper,y=e.elements[f?g:c],w=IIe(rg(y)?y:y.contextElement||tp(e.elements.popper),a,s),x=ig(e.elements.reference),_=fie({reference:x,element:b,strategy:"absolute",placement:o}),E=aF(Object.assign({},b,_)),C=c===ng?E:x,T={top:w.top-C.top+v.top,bottom:C.bottom-w.bottom+v.bottom,left:w.left-C.left+v.left,right:C.right-w.right+v.right},k=e.modifiersData.offset;if(c===ng&&k){var I=k[o];Object.keys(T).forEach(function(O){var F=[fs,ds].indexOf(O)>=0?1:-1,N=[rl,ds].indexOf(O)>=0?"y":"x";T[O]+=I[N]*F})}return T}var BIe={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=o===void 0||o,a=n.altAxis,l=a===void 0||a,s=n.fallbackPlacements,u=n.padding,c=n.boundary,d=n.rootBoundary,f=n.altBoundary,p=n.flipVariations,m=p===void 0||p,v=n.allowedAutoPlacements,g=t.options.placement,b=Nc(g),y=s||(b===g||!m?[_9(g)]:function(z){if(Nc(z)===b9)return[];var $=_9(z);return[uie(z),$,uie($)]}(g)),w=[g].concat(y).reduce(function(z,$){return z.concat(Nc($)===b9?function(W,K){K===void 0&&(K={});var X=K,te=X.placement,ne=X.boundary,se=X.rootBoundary,le=X.padding,J=X.flipVariations,Z=X.allowedAutoPlacements,ye=Z===void 0?v0:Z,be=ag(te),ve=be?J?ZN:ZN.filter(function(_e){return ag(_e)===be}):eg,Ae=ve.filter(function(_e){return ye.indexOf(_e)>=0});Ae.length===0&&(Ae=ve);var Ce=Ae.reduce(function(_e,ke){return _e[ke]=U3(W,{placement:ke,boundary:ne,rootBoundary:se,padding:le})[Nc(ke)],_e},{});return Object.keys(Ce).sort(function(_e,ke){return Ce[_e]-Ce[ke]})}(t,{placement:$,boundary:c,rootBoundary:d,padding:u,flipVariations:m,allowedAutoPlacements:v}):$)},[]),x=t.rects.reference,_=t.rects.popper,E=new Map,C=!0,T=w[0],k=0;k<w.length;k++){var I=w[k],O=Nc(I),F=ag(I)===e1,N=[rl,ds].indexOf(O)>=0,B=N?"width":"height",P=U3(t,{placement:I,boundary:c,rootBoundary:d,altBoundary:f,padding:u}),V=N?F?fs:ol:F?ds:rl;x[B]>_[B]&&(V=_9(V));var L=_9(V),H=[];if(i&&H.push(P[O]<=0),l&&H.push(P[V]<=0,P[L]<=0),H.every(function(z){return z})){T=I,C=!1;break}E.set(I,H)}if(C)for(var U=function(z){var $=w.find(function(W){var K=E.get(W);if(K)return K.slice(0,z).every(function(X){return X})});if($)return T=$,"break"},G=m?3:1;G>0&&U(G)!=="break";G--);t.placement!==T&&(t.modifiersData[r]._skip=!0,t.placement=T,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function pie(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function hie(e){return[rl,fs,ds,ol].some(function(t){return e[t]>=0})}var PIe={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=U3(t,{elementContext:"reference"}),l=U3(t,{altBoundary:!0}),s=pie(a,r),u=pie(l,o,i),c=hie(s),d=hie(u);t.modifiersData[n]={referenceClippingOffsets:s,popperEscapeOffsets:u,isReferenceHidden:c,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":c,"data-popper-escaped":d})}},LIe={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.offset,i=o===void 0?[0,0]:o,a=v0.reduce(function(c,d){return c[d]=function(f,p,m){var v=Nc(f),g=[ol,rl].indexOf(v)>=0?-1:1,b=typeof m=="function"?m(Object.assign({},p,{placement:f})):m,y=b[0],w=b[1];return y=y||0,w=(w||0)*g,[ol,fs].indexOf(v)>=0?{x:w,y}:{x:y,y:w}}(d,t.rects,i),c},{}),l=a[t.placement],s=l.x,u=l.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=s,t.modifiersData.popperOffsets.y+=u),t.modifiersData[r]=a}},vie={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=fie({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},jIe={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,i=o===void 0||o,a=n.altAxis,l=a!==void 0&&a,s=n.boundary,u=n.rootBoundary,c=n.altBoundary,d=n.padding,f=n.tether,p=f===void 0||f,m=n.tetherOffset,v=m===void 0?0:m,g=U3(t,{boundary:s,rootBoundary:u,padding:d,altBoundary:c}),b=Nc(t.placement),y=ag(t.placement),w=!y,x=nF(b),_=function(dt){return dt==="x"?"y":"x"}(x),E=t.modifiersData.popperOffsets,C=t.rects.reference,T=t.rects.popper,k=typeof v=="function"?v(Object.assign({},t.rects,{placement:t.placement})):v,I=typeof k=="number"?{mainAxis:k,altAxis:k}:Object.assign({mainAxis:0,altAxis:0},k),O=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,F={x:0,y:0};if(E){if(i){var N,B=x==="y"?rl:ol,P=x==="y"?ds:fs,V=x==="y"?"height":"width",L=E[x],H=L+g[B],U=L-g[P],G=p?-T[V]/2:0,z=y===e1?C[V]:T[V],$=y===e1?-T[V]:-C[V],W=t.elements.arrow,K=p&&W?tF(W):{width:0,height:0},X=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=X[B],ne=X[P],se=H3(0,C[V],K[V]),le=w?C[V]/2-G-se-te-I.mainAxis:z-se-te-I.mainAxis,J=w?-C[V]/2+G+se+ne+I.mainAxis:$+se+ne+I.mainAxis,Z=t.elements.arrow&&z3(t.elements.arrow),ye=Z?x==="y"?Z.clientTop||0:Z.clientLeft||0:0,be=(N=O==null?void 0:O[x])!=null?N:0,ve=L+J-be,Ae=H3(p?A9(H,L+le-be-ye):H,L,p?t1(U,ve):U);E[x]=Ae,F[x]=Ae-L}if(l){var Ce,_e=x==="x"?rl:ol,ke=x==="x"?ds:fs,Be=E[_],$e=_==="y"?"height":"width",rt=Be+g[_e],ge=Be-g[ke],We=[rl,ol].indexOf(b)!==-1,st=(Ce=O==null?void 0:O[_])!=null?Ce:0,At=We?rt:Be-C[$e]-T[$e]-st+I.altAxis,Ve=We?Be+C[$e]+T[$e]-st-I.altAxis:ge,it=p&&We?function(dt,ot,je){var we=H3(dt,ot,je);return we>je?je:we}(At,Be,Ve):H3(p?At:rt,Be,p?Ve:ge);E[_]=it,F[_]=it-Be}t.modifiersData[r]=F}},requiresIfExists:["offset"]};function VIe(e,t,n){n===void 0&&(n=!1);var r=Ys(t),o=Ys(t)&&function(u){var c=u.getBoundingClientRect(),d=og(c.width)/u.offsetWidth||1,f=og(c.height)/u.offsetHeight||1;return d!==1||f!==1}(t),i=tp(t),a=ig(e,o),l={scrollLeft:0,scrollTop:0},s={x:0,y:0};return(r||!r&&!n)&&((Mc(t)!=="body"||iF(i))&&(l=function(u){return u!==Iu(u)&&Ys(u)?function(c){return{scrollLeft:c.scrollLeft,scrollTop:c.scrollTop}}(u):rF(u)}(t)),Ys(t)?((s=ig(t,!0)).x+=t.clientLeft,s.y+=t.clientTop):i&&(s.x=oF(i))),{x:a.left+l.scrollLeft-s.x,y:a.top+l.scrollTop-s.y,width:a.width,height:a.height}}function zIe(e){var t=new Map,n=new Set,r=[];function o(i){n.add(i.name),[].concat(i.requires||[],i.requiresIfExists||[]).forEach(function(a){if(!n.has(a)){var l=t.get(a);l&&o(l)}}),r.push(i)}return e.forEach(function(i){t.set(i.name,i)}),e.forEach(function(i){n.has(i.name)||o(i)}),r}function HIe(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}var mie={placement:"bottom",modifiers:[],strategy:"absolute"};function gie(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some(function(r){return!(r&&typeof r.getBoundingClientRect=="function")})}function lF(e){e===void 0&&(e={});var t=e,n=t.defaultModifiers,r=n===void 0?[]:n,o=t.defaultOptions,i=o===void 0?mie:o;return function(a,l,s){s===void 0&&(s=i);var u={placement:"bottom",orderedModifiers:[],options:Object.assign({},mie,i),modifiersData:{},elements:{reference:a,popper:l},attributes:{},styles:{}},c=[],d=!1,f={state:u,setOptions:function(m){var v=typeof m=="function"?m(u.options):m;p(),u.options=Object.assign({},i,u.options,v),u.scrollParents={reference:rg(a)?$3(a):a.contextElement?$3(a.contextElement):[],popper:$3(l)};var g=function(b){var y=zIe(b);return eie.reduce(function(w,x){return w.concat(y.filter(function(_){return _.phase===x}))},[])}(function(b){var y=b.reduce(function(w,x){var _=w[x.name];return w[x.name]=_?Object.assign({},_,x,{options:Object.assign({},_.options,x.options),data:Object.assign({},_.data,x.data)}):x,w},{});return Object.keys(y).map(function(w){return y[w]})}([].concat(r,u.options.modifiers)));return u.orderedModifiers=g.filter(function(b){return b.enabled}),u.orderedModifiers.forEach(function(b){var y=b.name,w=b.options,x=w===void 0?{}:w,_=b.effect;if(typeof _=="function"){var E=_({state:u,name:y,instance:f,options:x}),C=function(){};c.push(E||C)}}),f.update()},forceUpdate:function(){if(!d){var m=u.elements,v=m.reference,g=m.popper;if(gie(v,g)){u.rects={reference:VIe(v,z3(g),u.options.strategy==="fixed"),popper:tF(g)},u.reset=!1,u.placement=u.options.placement,u.orderedModifiers.forEach(function(C){return u.modifiersData[C.name]=Object.assign({},C.data)});for(var b=0;b<u.orderedModifiers.length;b++)if(u.reset!==!0){var y=u.orderedModifiers[b],w=y.fn,x=y.options,_=x===void 0?{}:x,E=y.name;typeof w=="function"&&(u=w({state:u,options:_,name:E,instance:f})||u)}else u.reset=!1,b=-1}}},update:HIe(function(){return new Promise(function(m){f.forceUpdate(),m(u)})}),destroy:function(){p(),d=!0}};if(!gie(a,l))return f;function p(){c.forEach(function(m){return m()}),c=[]}return f.setOptions(s).then(function(m){!d&&s.onFirstUpdate&&s.onFirstUpdate(m)}),f}}lF(),lF({defaultModifiers:[sie,vie,lie,tie]});var $Ie=lF({defaultModifiers:[sie,vie,lie,tie,LIe,BIe,jIe,MIe,PIe]});const UIe=(e,t,n={})=>{const r={name:"updateState",enabled:!0,phase:"write",fn:({state:s})=>{const u=function(c){const d=Object.keys(c.elements),f=d9(d.map(m=>[m,c.styles[m]||{}])),p=d9(d.map(m=>[m,c.attributes[m]]));return{styles:f,attributes:p}}(s);Object.assign(a.value,u)},requires:["computeStyles"]},o=ee(()=>{const{onFirstUpdate:s,placement:u,strategy:c,modifiers:d}=M(n);return{onFirstUpdate:s,placement:u||"bottom",strategy:c||"absolute",modifiers:[...d||[],r,{name:"applyStyles",enabled:!1}]}}),i=Qo(),a=de({styles:{popper:{position:M(o).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),l=()=>{i.value&&(i.value.destroy(),i.value=void 0)};return Je(o,s=>{const u=M(i);u&&u.setOptions(s)},{deep:!0}),Je([e,t],([s,u])=>{l(),s&&u&&(i.value=$Ie(s,u,M(o)))}),xo(()=>{l()}),{state:ee(()=>{var s;return{...((s=M(i))==null?void 0:s.state)||{}}}),styles:ee(()=>M(a).styles),attributes:ee(()=>M(a).attributes),update:()=>{var s;return(s=M(i))==null?void 0:s.update()},forceUpdate:()=>{var s;return(s=M(i))==null?void 0:s.forceUpdate()},instanceRef:ee(()=>M(i))}},sF=e=>{if(!e)return{onClick:fr,onMousedown:fr,onMouseup:fr};let t=!1,n=!1;return{onClick:r=>{t&&n&&e(r),t=n=!1},onMousedown:r=>{t=r.target===r.currentTarget},onMouseup:r=>{n=r.target===r.currentTarget}}};function yie(){let e;const t=()=>window.clearTimeout(e);return E3(()=>t()),{registerTimeout:(n,r)=>{t(),e=window.setTimeout(n,r)},cancelTimeout:t}}let uF,bie;uF={prefix:Math.floor(1e4*Math.random()),current:0},bie=Symbol("elIdInjection"),$O=()=>dn()?Rt(bie,uF):uF,Zl=e=>{const t=$O(),n=y9();return ee(()=>M(e)||`${n.value}-id-${t.prefix}-${t.current++}`)};let lg=[];const Aie=e=>{const t=e;t.key===Xt.esc&&lg.forEach(n=>n(t))};let wie;const xie=()=>{const e=y9(),t=$O(),n=ee(()=>`${e.value}-popper-container-${t.prefix}`),r=ee(()=>`#${n.value}`);return{id:n,selector:r}},WIe=()=>{const{id:e,selector:t}=xie();return g0(()=>{rr&&(wie||document.body.querySelector(t.value)||(wie=(n=>{const r=document.createElement("div");return r.id=n,document.body.appendChild(r),r})(e.value)))}),{id:e,selector:t}},GIe=Pt({showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0}}),_ie=Symbol("elForwardRef"),Eie={current:0},Cie=de(0),Sie=2e3,kie=Symbol("elZIndexContextKey"),Die=Symbol("zIndexContextKey"),E9=e=>{const t=dn()?Rt(kie,Eie):Eie,n=e||(dn()?Rt(Die,void 0):void 0),r=ee(()=>{const i=M(n);return Kn(i)?i:Sie}),o=ee(()=>r.value+Cie.value);return!rr&&Rt(kie),{initialZIndex:r,currentZIndex:o,nextZIndex:()=>(t.current++,Cie.value=t.current,o.value)}};let Oie,cF;Oie=(e,t)=>{const n={},r=Qo([]);return{children:r,addChild:o=>{n[o.uid]=o,r.value=((i,a,l)=>Rb(i.subTree).filter(c=>{var d;return oo(c)&&((d=c.type)==null?void 0:d.name)===a&&!!c.component}).map(c=>c.component.uid).map(c=>l[c]).filter(c=>!!c))(e,t,n)},removeChild:o=>{delete n[o],r.value=r.value.filter(i=>i.uid!==o)}}},da=Mb({type:String,values:bm,required:!1}),cF=Symbol("size"),Vw=function(e,{afterFocus:t,beforeBlur:n,afterBlur:r}={}){const o=dn(),{emit:i}=o,a=Qo(),l=de(!1);return Je(a,s=>{s&&s.setAttribute("tabindex","-1")}),Yo(a,"click",()=>{var s;(s=e.value)==null||s.focus()}),{wrapperRef:a,isFocused:l,handleFocus:s=>{l.value||(l.value=!0,i("focus",s),t==null||t())},handleBlur:s=>{var u;Ut(n)&&n(s)||s.relatedTarget&&((u=a.value)!=null&&u.contains(s.relatedTarget))||(l.value=!1,i("blur",s),r==null||r())}}};let Tie,dF,W3;Tie=["",void 0,null],Fb=Pt({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:e=>Ut(e)?!e():!e}}),jw=(e,t)=>{const n=G3();n.value=n.value||{};const r=ee(()=>e.emptyValues||n.value.emptyValues||Tie),o=ee(()=>Ut(e.valueOnClear)?e.valueOnClear():e.valueOnClear!==void 0?e.valueOnClear:Ut(n.value.valueOnClear)?n.value.valueOnClear():n.value.valueOnClear!==void 0?n.value.valueOnClear:t!==void 0?t:void 0);return r.value.includes(o.value),{emptyValues:r,valueOnClear:o,isEmptyValue:i=>r.value.includes(i)}},dF=Symbol(),W3=de();function G3(e,t=void 0){const n=dn()?Rt(dF,W3):W3;return e?ee(()=>{var r,o;return(o=(r=n.value)==null?void 0:r[e])!=null?o:t}):n}function C9(e,t){const n=G3(),r=_t(e,ee(()=>{var l;return((l=n.value)==null?void 0:l.namespace)||Zm})),o=Gr(ee(()=>{var l;return(l=n.value)==null?void 0:l.locale})),i=E9(ee(()=>{var l;return((l=n.value)==null?void 0:l.zIndex)||Sie})),a=ee(()=>{var l;return M(t)||((l=n.value)==null?void 0:l.size)||""});return Mie(ee(()=>M(n)||{})),{ns:r,locale:o,zIndex:i,size:a}}const Mie=(e,t,n=!1)=>{const r=!!dn(),o=r?G3():void 0,i=r?qn:void 0;if(!i)return;const a=ee(()=>{const l=M(e);return o!=null&&o.value?qIe(o.value,l):l});return i(dF,a),i(KN,ee(()=>a.value.locale)),i(YN,ee(()=>a.value.namespace)),i(Die,ee(()=>a.value.zIndex)),i(cF,{size:ee(()=>a.value.size||"")}),!n&&W3.value||(W3.value=a.value),a},qIe=(e,t)=>{const n=[...new Set([...P3(e),...P3(t)])],r={};for(const o of n)r[o]=t[o]!==void 0?t[o]:e[o];return r},KIe=Pt({a11y:{type:Boolean,default:!0},locale:{type:Object},size:da,button:{type:Object},experimentalFeatures:{type:Object},keyboardNavigation:{type:Boolean,default:!0},message:{type:Object},zIndex:Number,namespace:{type:String,default:"el"},...Fb}),fF={},YIe=Te({name:"ElConfigProvider",props:KIe,setup(e,{slots:t}){Je(()=>e.message,r=>{Object.assign(fF,r??{})},{immediate:!0,deep:!0});const n=Mie(e);return()=>ft(t,"default",{config:n==null?void 0:n.value})}}),XIe=Cr(YIe);Nt=(e,t)=>{const n=e.__vccOpts||e;for(const[r,o]of t)n[r]=o;return n};const QIe=Pt({size:{type:[Number,String]},color:{type:String}}),JIe=Te({name:"ElIcon",inheritAttrs:!1}),ZIe=Te({...JIe,props:QIe,setup(e){const t=e,n=_t("icon"),r=ee(()=>{const{size:o,color:i}=t;return o||i?{fontSize:Wi(o)?void 0:ka(o),"--color":i}:{}});return(o,i)=>(Y(),fe("i",Un({class:M(n).b(),style:M(r)},o.$attrs),[ft(o.$slots,"default")],16))}});let Nie,Fie,Rie,Iie;Ft=Cr(Nt(ZIe,[["__file","icon.vue"]])),Nie=Pt({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:P3(Vd),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:["light","dark"],default:"light"}}),Fie={close:e=>e instanceof MouseEvent},Rie=Te({name:"ElAlert"}),Iie=Te({...Rie,props:Nie,emits:Fie,setup(e,{emit:t}){const n=e,{Close:r}=m9,o=Ga(),i=_t("alert"),a=de(!0),l=ee(()=>Vd[n.type]),s=ee(()=>[i.e("icon"),{[i.is("big")]:!!n.description||!!o.default}]),u=ee(()=>({"with-description":n.description||o.default})),c=d=>{a.value=!1,t("close",d)};return(d,f)=>(Y(),Le(ca,{name:M(i).b("fade"),persisted:""},{default:he(()=>[nn(ce("div",{class:oe([M(i).b(),M(i).m(d.type),M(i).is("center",d.center),M(i).is(d.effect)]),role:"alert"},[d.showIcon&&M(l)?(Y(),Le(M(Ft),{key:0,class:oe(M(s))},{default:he(()=>[(Y(),Le(Hn(M(l))))]),_:1},8,["class"])):Fe("v-if",!0),ce("div",{class:oe(M(i).e("content"))},[d.title||d.$slots.title?(Y(),fe("span",{key:0,class:oe([M(i).e("title"),M(u)])},[ft(d.$slots,"title",{},()=>[Dt(Ye(d.title),1)])],2)):Fe("v-if",!0),d.$slots.default||d.description?(Y(),fe("p",{key:1,class:oe(M(i).e("description"))},[ft(d.$slots,"default",{},()=>[Dt(Ye(d.description),1)])],2)):Fe("v-if",!0),d.closable?(Y(),fe(bt,{key:2},[d.closeText?(Y(),fe("div",{key:0,class:oe([M(i).e("close-btn"),M(i).is("customed")]),onClick:c},Ye(d.closeText),3)):(Y(),Le(M(Ft),{key:1,class:oe(M(i).e("close-btn")),onClick:c},{default:he(()=>[ie(M(r))]),_:1},8,["class"]))],64)):Fe("v-if",!0)],2)],2),[[$n,a.value]])]),_:3},8,["name"]))}});let Bie,np,Fc,Pie,Lie,jie;Bie=Cr(Nt(Iie,[["__file","alert.vue"]])),np=Symbol("formContextKey"),Fc=Symbol("formItemContextKey"),$i=(e,t={})=>{const n=de(void 0),r=t.prop?n:Qoe("size"),o=t.global?n:(()=>{const l=Rt(cF,{});return ee(()=>M(l.size)||"")})(),i=t.form?{size:void 0}:Rt(np,void 0),a=t.formItem?{size:void 0}:Rt(Fc,void 0);return ee(()=>r.value||M(e)||(a==null?void 0:a.size)||(i==null?void 0:i.size)||o.value||"")},wl=e=>{const t=Qoe("disabled"),n=Rt(np,void 0);return ee(()=>t.value||M(e)||(n==null?void 0:n.disabled)||!1)},qa=()=>({form:Rt(np,void 0),formItem:Rt(Fc,void 0)}),Ac=(e,{formItemContext:t,disableIdGeneration:n,disableIdManagement:r})=>{n||(n=de(!1)),r||(r=de(!1));const o=de();let i;const a=ee(()=>{var l;return!!(!e.label&&t&&t.inputIds&&((l=t.inputIds)==null?void 0:l.length)<=1)});return yn(()=>{i=Je([dr(e,"id"),n],([l,s])=>{const u=l??(s?void 0:Zl().value);u!==o.value&&(t!=null&&t.removeInputId&&(o.value&&t.removeInputId(o.value),r!=null&&r.value||s||!u||t.addInputId(u)),o.value=u)},{immediate:!0})}),Vs(()=>{i&&i(),t!=null&&t.removeInputId&&o.value&&t.removeInputId(o.value)}),{isLabeledByFormItem:a,inputId:o}},Pie=Pt({size:{type:String,values:bm},disabled:Boolean}),Lie=Pt({...Pie,model:Object,rules:{type:Object},labelPosition:{type:String,values:["left","right","top"],default:"right"},requireAsteriskPosition:{type:String,values:["left","right"],default:"left"},labelWidth:{type:[String,Number],default:""},labelSuffix:{type:String,default:""},inline:Boolean,inlineMessage:Boolean,statusIcon:Boolean,showMessage:{type:Boolean,default:!0},validateOnRuleChange:{type:Boolean,default:!0},hideRequiredAsterisk:Boolean,scrollToError:Boolean,scrollIntoViewOptions:{type:[Object,Boolean]}}),jie={validate:(e,t,n)=>(mt(e)||an(e))&&Ki(t)&&an(n)};function eBe(){const e=de([]),t=ee(()=>{if(!e.value.length)return"0";const r=Math.max(...e.value);return r?`${r}px`:""});function n(r){const o=e.value.indexOf(r);return o===-1&&t.value,o}return{autoLabelWidth:t,registerLabelWidth:function(r,o){if(r&&o){const i=n(o);e.value.splice(i,1,r)}else r&&e.value.push(r)},deregisterLabelWidth:function(r){const o=n(r);o>-1&&e.value.splice(o,1)}}}const S9=(e,t)=>{const n=Iw(t);return n.length>0?e.filter(r=>r.prop&&n.includes(r.prop)):e},tBe=Te({name:"ElForm"}),nBe=Te({...tBe,props:Lie,emits:jie,setup(e,{expose:t,emit:n}){const r=e,o=[],i=$i(),a=_t("form"),l=ee(()=>{const{labelPosition:v,inline:g}=r;return[a.b(),a.m(i.value||"default"),{[a.m(`label-${v}`)]:v,[a.m("inline")]:g}]}),s=(v=[])=>{r.model&&S9(o,v).forEach(g=>g.resetField())},u=(v=[])=>{S9(o,v).forEach(g=>g.clearValidate())},c=ee(()=>!!r.model),d=async v=>p(void 0,v),f=async(v=[])=>{if(!c.value)return!1;const g=(y=>{if(o.length===0)return[];const w=S9(o,y);return w.length?w:[]})(v);if(g.length===0)return!0;let b={};for(const y of g)try{await y.validate("")}catch(w){b={...b,...w}}return Object.keys(b).length===0||Promise.reject(b)},p=async(v=[],g)=>{const b=!Ut(g);try{const y=await f(v);return y===!0&&(g==null||g(y)),y}catch(y){if(y instanceof Error)throw y;const w=y;return r.scrollToError&&m(Object.keys(w)[0]),g==null||g(!1,w),b&&Promise.reject(w)}},m=v=>{var g;const b=S9(o,v)[0];b&&((g=b.$el)==null||g.scrollIntoView(r.scrollIntoViewOptions))};return Je(()=>r.rules,()=>{r.validateOnRuleChange&&d().catch(v=>{})},{deep:!0}),qn(np,Qn({...di(r),emit:n,resetFields:s,clearValidate:u,validateField:p,getField:v=>o.find(g=>g.prop===v),addField:v=>{o.push(v)},removeField:v=>{v.prop&&o.splice(o.indexOf(v),1)},...eBe()})),t({validate:d,validateField:p,resetFields:s,clearValidate:u,scrollToField:m}),(v,g)=>(Y(),fe("form",{class:oe(M(l))},[ft(v.$slots,"default")],2))}});var rBe=Nt(nBe,[["__file","form.vue"]]);function n1(){return n1=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},n1.apply(this,arguments)}function pF(e){return pF=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},pF(e)}function q3(e,t){return q3=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,r){return n.__proto__=r,n},q3(e,t)}function hF(e,t,n){return hF=function(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}()?Reflect.construct.bind():function(r,o,i){var a=[null];a.push.apply(a,o);var l=new(Function.bind.apply(r,a));return i&&q3(l,i.prototype),l},hF.apply(null,arguments)}function vF(e){var t=typeof Map=="function"?new Map:void 0;return vF=function(n){if(n===null||!function(o){return Function.toString.call(o).indexOf("[native code]")!==-1}(n))return n;if(typeof n!="function")throw new TypeError("Super expression must either be null or a function");if(t!==void 0){if(t.has(n))return t.get(n);t.set(n,r)}function r(){return hF(n,arguments,pF(this).constructor)}return r.prototype=Object.create(n.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),q3(r,n)},vF(e)}var oBe=/%[sdj%]/g,iBe=function(){};function mF(e){if(!e||!e.length)return null;var t={};return e.forEach(function(n){var r=n.field;t[r]=t[r]||[],t[r].push(n)}),t}function ps(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=0,i=n.length;if(typeof e=="function")return e.apply(null,n);if(typeof e=="string"){var a=e.replace(oBe,function(l){if(l==="%%")return"%";if(o>=i)return l;switch(l){case"%s":return String(n[o++]);case"%d":return Number(n[o++]);case"%j":try{return JSON.stringify(n[o++])}catch{return"[Circular]"}break;default:return l}});return a}return e}function Ti(e,t){return e==null||!(t!=="array"||!Array.isArray(e)||e.length)||!(!function(n){return n==="string"||n==="url"||n==="hex"||n==="email"||n==="date"||n==="pattern"}(t)||typeof e!="string"||e)}function Vie(e,t,n){var r=0,o=e.length;(function i(a){if(a&&a.length)n(a);else{var l=r;r+=1,l<o?t(e[l],i):n([])}})([])}var zie=function(e){var t,n;function r(o,i){var a;return(a=e.call(this,"Async Validation Error")||this).errors=o,a.fields=i,a}return n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,q3(t,n),r}(vF(Error));function aBe(e,t,n,r,o){if(t.first){var i=new Promise(function(f,p){var m=function(v){var g=[];return Object.keys(v).forEach(function(b){g.push.apply(g,v[b]||[])}),g}(e);Vie(m,n,function(v){return r(v),v.length?p(new zie(v,mF(v))):f(o)})});return i.catch(function(f){return f}),i}var a=t.firstFields===!0?Object.keys(e):t.firstFields||[],l=Object.keys(e),s=l.length,u=0,c=[],d=new Promise(function(f,p){var m=function(v){if(c.push.apply(c,v),++u===s)return r(c),c.length?p(new zie(c,mF(c))):f(o)};l.length||(r(c),f(o)),l.forEach(function(v){var g=e[v];a.indexOf(v)!==-1?Vie(g,n,m):function(b,y,w){var x=[],_=0,E=b.length;function C(T){x.push.apply(x,T||[]),++_===E&&w(x)}b.forEach(function(T){y(T,C)})}(g,n,m)})});return d.catch(function(f){return f}),d}function Hie(e,t){return function(n){var r,o;return r=e.fullFields?function(i,a){for(var l=i,s=0;s<a.length;s++){if(l==null)return l;l=l[a[s]]}return l}(t,e.fullFields):t[n.field||e.fullField],(o=n)&&o.message!==void 0?(n.field=n.field||e.fullField,n.fieldValue=r,n):{message:typeof n=="function"?n():n,fieldValue:r,field:n.field||e.fullField}}}function $ie(e,t){if(t){for(var n in t)if(t.hasOwnProperty(n)){var r=t[n];typeof r=="object"&&typeof e[n]=="object"?e[n]=n1({},e[n],r):e[n]=r}}return e}var gF,Uie=function(e,t,n,r,o,i){!e.required||n.hasOwnProperty(e.field)&&!Ti(t,i||e.type)||r.push(ps(o.messages.required,e.fullField))},lBe=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,sBe=/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i,K3={integer:function(e){return K3.number(e)&&parseInt(e,10)===e},float:function(e){return K3.number(e)&&!K3.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return!!new RegExp(e)}catch{return!1}},date:function(e){return typeof e.getTime=="function"&&typeof e.getMonth=="function"&&typeof e.getYear=="function"&&!isNaN(e.getTime())},number:function(e){return!isNaN(e)&&typeof e=="number"},object:function(e){return typeof e=="object"&&!K3.array(e)},method:function(e){return typeof e=="function"},email:function(e){return typeof e=="string"&&e.length<=320&&!!e.match(lBe)},url:function(e){return typeof e=="string"&&e.length<=2048&&!!e.match(function(){if(gF)return gF;var t="[a-fA-F\\d:]",n=function(f){return f&&f.includeBoundaries?"(?:(?<=\\s|^)(?="+t+")|(?<="+t+")(?=\\s|$))":""},r="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",o="[a-fA-F\\d]{1,4}",i=(`
| (?:
| (?:`+o+":){7}(?:"+o+`|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
| (?:`+o+":){6}(?:"+r+"|:"+o+`|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
| (?:`+o+":){5}(?::"+r+"|(?::"+o+`){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4
| (?:`+o+":){4}(?:(?::"+o+"){0,1}:"+r+"|(?::"+o+`){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4
| (?:`+o+":){3}(?:(?::"+o+"){0,2}:"+r+"|(?::"+o+`){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4
| (?:`+o+":){2}(?:(?::"+o+"){0,3}:"+r+"|(?::"+o+`){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
| (?:`+o+":){1}(?:(?::"+o+"){0,4}:"+r+"|(?::"+o+`){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
| (?::(?:(?::`+o+"){0,5}:"+r+"|(?::"+o+`){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
| )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
| `).replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),a=new RegExp("(?:^"+r+"$)|(?:^"+i+"$)"),l=new RegExp("^"+r+"$"),s=new RegExp("^"+i+"$"),u=function(f){return f&&f.exact?a:new RegExp("(?:"+n(f)+r+n(f)+")|(?:"+n(f)+i+n(f)+")","g")};u.v4=function(f){return f&&f.exact?l:new RegExp(""+n(f)+r+n(f),"g")},u.v6=function(f){return f&&f.exact?s:new RegExp(""+n(f)+i+n(f),"g")};var c=u.v4().source,d=u.v6().source;return gF=new RegExp("(?:^(?:(?:(?:[a-z]+:)?//)|www\\.)(?:\\S+(?::\\S*)?@)?(?:localhost|"+c+"|"+d+'|(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:[/?#][^\\s"]*)?$)',"i")}())},hex:function(e){return typeof e=="string"&&!!e.match(sBe)}},sg="enum",wr={required:Uie,whitespace:function(e,t,n,r,o){(/^\s+$/.test(t)||t==="")&&r.push(ps(o.messages.whitespace,e.fullField))},type:function(e,t,n,r,o){if(e.required&&t===void 0)Uie(e,t,n,r,o);else{var i=e.type;["integer","float","array","regexp","object","method","email","number","date","url","hex"].indexOf(i)>-1?K3[i](t)||r.push(ps(o.messages.types[i],e.fullField,e.type)):i&&typeof t!==e.type&&r.push(ps(o.messages.types[i],e.fullField,e.type))}},range:function(e,t,n,r,o){var i=typeof e.len=="number",a=typeof e.min=="number",l=typeof e.max=="number",s=t,u=null,c=typeof t=="number",d=typeof t=="string",f=Array.isArray(t);if(c?u="number":d?u="string":f&&(u="array"),!u)return!1;f&&(s=t.length),d&&(s=t.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"_").length),i?s!==e.len&&r.push(ps(o.messages[u].len,e.fullField,e.len)):a&&!l&&s<e.min?r.push(ps(o.messages[u].min,e.fullField,e.min)):l&&!a&&s>e.max?r.push(ps(o.messages[u].max,e.fullField,e.max)):a&&l&&(s<e.min||s>e.max)&&r.push(ps(o.messages[u].range,e.fullField,e.min,e.max))},enum:function(e,t,n,r,o){e[sg]=Array.isArray(e[sg])?e[sg]:[],e[sg].indexOf(t)===-1&&r.push(ps(o.messages[sg],e.fullField,e[sg].join(", ")))},pattern:function(e,t,n,r,o){e.pattern&&(e.pattern instanceof RegExp?(e.pattern.lastIndex=0,e.pattern.test(t)||r.push(ps(o.messages.pattern.mismatch,e.fullField,t,e.pattern))):typeof e.pattern=="string"&&(new RegExp(e.pattern).test(t)||r.push(ps(o.messages.pattern.mismatch,e.fullField,t,e.pattern))))}},yF=function(e,t,n,r,o){var i=e.type,a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(Ti(t,i)&&!e.required)return n();wr.required(e,t,r,a,o,i),Ti(t,i)||wr.type(e,t,r,a,o)}n(a)},Y3={string:function(e,t,n,r,o){var i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(Ti(t,"string")&&!e.required)return n();wr.required(e,t,r,i,o,"string"),Ti(t,"string")||(wr.type(e,t,r,i,o),wr.range(e,t,r,i,o),wr.pattern(e,t,r,i,o),e.whitespace===!0&&wr.whitespace(e,t,r,i,o))}n(i)},method:function(e,t,n,r,o){var i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(Ti(t)&&!e.required)return n();wr.required(e,t,r,i,o),t!==void 0&&wr.type(e,t,r,i,o)}n(i)},number:function(e,t,n,r,o){var i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(t===""&&(t=void 0),Ti(t)&&!e.required)return n();wr.required(e,t,r,i,o),t!==void 0&&(wr.type(e,t,r,i,o),wr.range(e,t,r,i,o))}n(i)},boolean:function(e,t,n,r,o){var i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(Ti(t)&&!e.required)return n();wr.required(e,t,r,i,o),t!==void 0&&wr.type(e,t,r,i,o)}n(i)},regexp:function(e,t,n,r,o){var i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(Ti(t)&&!e.required)return n();wr.required(e,t,r,i,o),Ti(t)||wr.type(e,t,r,i,o)}n(i)},integer:function(e,t,n,r,o){var i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(Ti(t)&&!e.required)return n();wr.required(e,t,r,i,o),t!==void 0&&(wr.type(e,t,r,i,o),wr.range(e,t,r,i,o))}n(i)},float:function(e,t,n,r,o){var i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(Ti(t)&&!e.required)return n();wr.required(e,t,r,i,o),t!==void 0&&(wr.type(e,t,r,i,o),wr.range(e,t,r,i,o))}n(i)},array:function(e,t,n,r,o){var i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(t==null&&!e.required)return n();wr.required(e,t,r,i,o,"array"),t!=null&&(wr.type(e,t,r,i,o),wr.range(e,t,r,i,o))}n(i)},object:function(e,t,n,r,o){var i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(Ti(t)&&!e.required)return n();wr.required(e,t,r,i,o),t!==void 0&&wr.type(e,t,r,i,o)}n(i)},enum:function(e,t,n,r,o){var i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(Ti(t)&&!e.required)return n();wr.required(e,t,r,i,o),t!==void 0&&wr.enum(e,t,r,i,o)}n(i)},pattern:function(e,t,n,r,o){var i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(Ti(t,"string")&&!e.required)return n();wr.required(e,t,r,i,o),Ti(t,"string")||wr.pattern(e,t,r,i,o)}n(i)},date:function(e,t,n,r,o){var i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(Ti(t,"date")&&!e.required)return n();var a;wr.required(e,t,r,i,o),!Ti(t,"date")&&(a=t instanceof Date?t:new Date(t),wr.type(e,a,r,i,o),a&&wr.range(e,a.getTime(),r,i,o))}n(i)},url:yF,hex:yF,email:yF,required:function(e,t,n,r,o){var i=[],a=Array.isArray(t)?"array":typeof t;wr.required(e,t,r,i,o,a),n(i)},any:function(e,t,n,r,o){var i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(Ti(t)&&!e.required)return n();wr.required(e,t,r,i,o)}n(i)}};function bF(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var e=JSON.parse(JSON.stringify(this));return e.clone=this.clone,e}}}var AF=bF(),X3=function(){function e(n){this.rules=null,this._messages=AF,this.define(n)}var t=e.prototype;return t.define=function(n){var r=this;if(!n)throw new Error("Cannot configure a schema with no rules");if(typeof n!="object"||Array.isArray(n))throw new Error("Rules must be an object");this.rules={},Object.keys(n).forEach(function(o){var i=n[o];r.rules[o]=Array.isArray(i)?i:[i]})},t.messages=function(n){return n&&(this._messages=$ie(bF(),n)),this._messages},t.validate=function(n,r,o){var i=this;r===void 0&&(r={}),o===void 0&&(o=function(){});var a=n,l=r,s=o;if(typeof l=="function"&&(s=l,l={}),!this.rules||Object.keys(this.rules).length===0)return s&&s(null,a),Promise.resolve(a);if(l.messages){var u=this.messages();u===AF&&(u=bF()),$ie(u,l.messages),l.messages=u}else l.messages=this.messages();var c={};(l.keys||Object.keys(this.rules)).forEach(function(f){var p=i.rules[f],m=a[f];p.forEach(function(v){var g=v;typeof g.transform=="function"&&(a===n&&(a=n1({},a)),m=a[f]=g.transform(m)),(g=typeof g=="function"?{validator:g}:n1({},g)).validator=i.getValidationMethod(g),g.validator&&(g.field=f,g.fullField=g.fullField||f,g.type=i.getType(g),c[f]=c[f]||[],c[f].push({rule:g,value:m,source:a,field:f}))})});var d={};return aBe(c,l,function(f,p){var m,v=f.rule,g=!(v.type!=="object"&&v.type!=="array"||typeof v.fields!="object"&&typeof v.defaultField!="object");function b(w,x){return n1({},x,{fullField:v.fullField+"."+w,fullFields:v.fullFields?[].concat(v.fullFields,[w]):[w]})}function y(w){w===void 0&&(w=[]);var x=Array.isArray(w)?w:[w];!l.suppressWarning&&x.length&&e.warning("async-validator:",x),x.length&&v.message!==void 0&&(x=[].concat(v.message));var _=x.map(Hie(v,a));if(l.first&&_.length)return d[v.field]=1,p(_);if(g){if(v.required&&!f.value)return v.message!==void 0?_=[].concat(v.message).map(Hie(v,a)):l.error&&(_=[l.error(v,ps(l.messages.required,v.field))]),p(_);var E={};v.defaultField&&Object.keys(f.value).map(function(k){E[k]=v.defaultField}),E=n1({},E,f.rule.fields);var C={};Object.keys(E).forEach(function(k){var I=E[k],O=Array.isArray(I)?I:[I];C[k]=O.map(b.bind(null,k))});var T=new e(C);T.messages(l.messages),f.rule.options&&(f.rule.options.messages=l.messages,f.rule.options.error=l.error),T.validate(f.value,f.rule.options||l,function(k){var I=[];_&&_.length&&I.push.apply(I,_),k&&k.length&&I.push.apply(I,k),p(I.length?I:null)})}else p(_)}if(g=g&&(v.required||!v.required&&f.value),v.field=f.field,v.asyncValidator)m=v.asyncValidator(v,f.value,y,f.source,l);else if(v.validator){try{m=v.validator(v,f.value,y,f.source,l)}catch(w){console.error==null||console.error(w),l.suppressValidatorError||setTimeout(function(){throw w},0),y(w.message)}m===!0?y():m===!1?y(typeof v.message=="function"?v.message(v.fullField||v.field):v.message||(v.fullField||v.field)+" fails"):m instanceof Array?y(m):m instanceof Error&&y(m.message)}m&&m.then&&m.then(function(){return y()},function(w){return y(w)})},function(f){(function(p){var m=[],v={};function g(y){var w;Array.isArray(y)?m=(w=m).concat.apply(w,y):m.push(y)}for(var b=0;b<p.length;b++)g(p[b]);m.length?(v=mF(m),s(m,v)):s(null,a)})(f)},a)},t.getType=function(n){if(n.type===void 0&&n.pattern instanceof RegExp&&(n.type="pattern"),typeof n.validator!="function"&&n.type&&!Y3.hasOwnProperty(n.type))throw new Error(ps("Unknown rule type %s",n.type));return n.type||"string"},t.getValidationMethod=function(n){if(typeof n.validator=="function")return n.validator;var r=Object.keys(n),o=r.indexOf("message");return o!==-1&&r.splice(o,1),r.length===1&&r[0]==="required"?Y3.required:Y3[this.getType(n)]||void 0},e}();X3.register=function(e,t){if(typeof t!="function")throw new Error("Cannot register a validator by type, validator is not a function");Y3[e]=t},X3.warning=iBe,X3.messages=AF,X3.validators=Y3;const uBe=Pt({label:String,labelWidth:{type:[String,Number],default:""},prop:{type:[String,Array]},required:{type:Boolean,default:void 0},rules:{type:[Object,Array]},error:String,validateStatus:{type:String,values:["","error","validating","success"]},for:String,inlineMessage:{type:[String,Boolean],default:""},showMessage:{type:Boolean,default:!0},size:{type:String,values:bm}}),Wie="ElLabelWrap";var cBe=Te({name:Wie,props:{isAutoWidth:Boolean,updateAll:Boolean},setup(e,{slots:t}){const n=Rt(np,void 0),r=Rt(Fc);r||Ka(Wie,"usage: <el-form-item><label-wrap /></el-form-item>");const o=_t("form"),i=de(),a=de(0),l=(u="update")=>{St(()=>{t.default&&e.isAutoWidth&&(u==="update"?a.value=(()=>{var c;if((c=i.value)!=null&&c.firstElementChild){const d=window.getComputedStyle(i.value.firstElementChild).width;return Math.ceil(Number.parseFloat(d))}return 0})():u==="remove"&&(n==null||n.deregisterLabelWidth(a.value)))})},s=()=>l("update");return yn(()=>{s()}),xo(()=>{l("remove")}),zs(()=>s()),Je(a,(u,c)=>{e.updateAll&&(n==null||n.registerLabelWidth(u,c))}),fa(ee(()=>{var u,c;return(c=(u=i.value)==null?void 0:u.firstElementChild)!=null?c:null}),s),()=>{var u,c;if(!t)return null;const{isAutoWidth:d}=e;if(d){const f=n==null?void 0:n.autoLabelWidth,p={};if(r!=null&&r.hasLabel&&f&&f!=="auto"){const m=Math.max(0,Number.parseInt(f,10)-a.value),v=n.labelPosition==="left"?"marginRight":"marginLeft";m&&(p[v]=`${m}px`)}return ie("div",{ref:i,class:[o.be("item","label-wrap")],style:p},[(u=t.default)==null?void 0:u.call(t)])}return ie(bt,{ref:i},[(c=t.default)==null?void 0:c.call(t)])}}});const dBe=["role","aria-labelledby"],fBe=Te({name:"ElFormItem"}),pBe=Te({...fBe,props:uBe,setup(e,{expose:t}){const n=e,r=Ga(),o=Rt(np,void 0),i=Rt(Fc,void 0),a=$i(void 0,{formItem:!1}),l=_t("form-item"),s=Zl().value,u=de([]),c=de(""),d=function($,W=200,K={}){const X=de($.value),te=$Ne(()=>{X.value=$.value},W,K);return Je($,()=>te()),X}(c,100),f=de(""),p=de();let m,v=!1;const g=ee(()=>{if((o==null?void 0:o.labelPosition)==="top")return{};const $=ka(n.labelWidth||(o==null?void 0:o.labelWidth)||"");return $?{width:$}:{}}),b=ee(()=>{if((o==null?void 0:o.labelPosition)==="top"||o!=null&&o.inline)return{};if(!n.label&&!n.labelWidth&&k)return{};const $=ka(n.labelWidth||(o==null?void 0:o.labelWidth)||"");return n.label||r.label?{}:{marginLeft:$}}),y=ee(()=>[l.b(),l.m(a.value),l.is("error",c.value==="error"),l.is("validating",c.value==="validating"),l.is("success",c.value==="success"),l.is("required",N.value||n.required),l.is("no-asterisk",o==null?void 0:o.hideRequiredAsterisk),(o==null?void 0:o.requireAsteriskPosition)==="right"?"asterisk-right":"asterisk-left",{[l.m("feedback")]:o==null?void 0:o.statusIcon}]),w=ee(()=>Ki(n.inlineMessage)?n.inlineMessage:(o==null?void 0:o.inlineMessage)||!1),x=ee(()=>[l.e("error"),{[l.em("error","inline")]:w.value}]),_=ee(()=>n.prop?an(n.prop)?n.prop:n.prop.join("."):""),E=ee(()=>!(!n.label&&!r.label)),C=ee(()=>n.for||(u.value.length===1?u.value[0]:void 0)),T=ee(()=>!C.value&&E.value),k=!!i,I=ee(()=>{const $=o==null?void 0:o.model;if($&&n.prop)return L3($,n.prop).value}),O=ee(()=>{const{required:$}=n,W=[];n.rules&&W.push(...Iw(n.rules));const K=o==null?void 0:o.rules;if(K&&n.prop){const X=L3(K,n.prop).value;X&&W.push(...Iw(X))}if($!==void 0){const X=W.map((te,ne)=>[te,ne]).filter(([te])=>Object.keys(te).includes("required"));if(X.length>0)for(const[te,ne]of X)te.required!==$&&(W[ne]={...te,required:$});else W.push({required:$})}return W}),F=ee(()=>O.value.length>0),N=ee(()=>O.value.some($=>$.required)),B=ee(()=>{var $;return d.value==="error"&&n.showMessage&&(($=o==null?void 0:o.showMessage)==null||$)}),P=ee(()=>`${n.label||""}${(o==null?void 0:o.labelSuffix)||""}`),V=$=>{c.value=$},L=async $=>{const W=_.value;return new X3({[W]:$}).validate({[W]:I.value},{firstFields:!0}).then(()=>(V("success"),o==null||o.emit("validate",n.prop,!0,""),!0)).catch(K=>((X=>{var te,ne;const{errors:se,fields:le}=X;se&&le||console.error(X),V("error"),f.value=se?(ne=(te=se==null?void 0:se[0])==null?void 0:te.message)!=null?ne:`${n.prop} is required`:"",o==null||o.emit("validate",n.prop,!1,f.value)})(K),Promise.reject(K)))},H=async($,W)=>{if(v||!n.prop)return!1;const K=Ut(W);if(!F.value)return W==null||W(!1),!1;const X=(te=>O.value.filter(ne=>!ne.trigger||!te||(Array.isArray(ne.trigger)?ne.trigger.includes(te):ne.trigger===te)).map(({trigger:ne,...se})=>se))($);return X.length===0?(W==null||W(!0),!0):(V("validating"),L(X).then(()=>(W==null||W(!0),!0)).catch(te=>{const{fields:ne}=te;return W==null||W(!1,ne),!K&&Promise.reject(ne)}))},U=()=>{V(""),f.value="",v=!1},G=async()=>{const $=o==null?void 0:o.model;if(!$||!n.prop)return;const W=L3($,n.prop);v=!0,W.value=doe(m),await St(),U(),v=!1};Je(()=>n.error,$=>{f.value=$||"",V($?"error":"")},{immediate:!0}),Je(()=>n.validateStatus,$=>V($||""));const z=Qn({...di(n),$el:p,size:a,validateState:c,labelId:s,inputIds:u,isGroup:T,hasLabel:E,fieldValue:I,addInputId:$=>{u.value.includes($)||u.value.push($)},removeInputId:$=>{u.value=u.value.filter(W=>W!==$)},resetField:G,clearValidate:U,validate:H});return qn(Fc,z),yn(()=>{n.prop&&(o==null||o.addField(z),m=doe(I.value))}),xo(()=>{o==null||o.removeField(z)}),t({size:a,validateMessage:f,validateState:c,validate:H,clearValidate:U,resetField:G}),($,W)=>{var K;return Y(),fe("div",{ref_key:"formItemRef",ref:p,class:oe(M(y)),role:M(T)?"group":void 0,"aria-labelledby":M(T)?M(s):void 0},[ie(M(cBe),{"is-auto-width":M(g).width==="auto","update-all":((K=M(o))==null?void 0:K.labelWidth)==="auto"},{default:he(()=>[M(E)?(Y(),Le(Hn(M(C)?"label":"div"),{key:0,id:M(s),for:M(C),class:oe(M(l).e("label")),style:$t(M(g))},{default:he(()=>[ft($.$slots,"label",{label:M(P)},()=>[Dt(Ye(M(P)),1)])]),_:3},8,["id","for","class","style"])):Fe("v-if",!0)]),_:3},8,["is-auto-width","update-all"]),ce("div",{class:oe(M(l).e("content")),style:$t(M(b))},[ft($.$slots,"default"),ie(Sb,{name:`${M(l).namespace.value}-zoom-in-top`},{default:he(()=>[M(B)?ft($.$slots,"error",{key:0,error:f.value},()=>[ce("div",{class:oe(M(x))},Ye(f.value),3)]):Fe("v-if",!0)]),_:3},8,["name"])],6)],10,dBe)}}});var Gie=Nt(pBe,[["__file","form-item.vue"]]);_O=Cr(rBe,{FormItem:Gie}),IDe=Ya(Gie);let Bu;const hBe=`
| height:0 !important;
| visibility:hidden !important;
| ${FQ()?"":"overflow:hidden !important;"}
| position:absolute !important;
| z-index:-1000 !important;
| top:0 !important;
| right:0 !important;
| `,vBe=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function qie(e,t=1,n){var r;Bu||(Bu=document.createElement("textarea"),document.body.appendChild(Bu));const{paddingSize:o,borderSize:i,boxSizing:a,contextStyle:l}=function(d){const f=window.getComputedStyle(d),p=f.getPropertyValue("box-sizing"),m=Number.parseFloat(f.getPropertyValue("padding-bottom"))+Number.parseFloat(f.getPropertyValue("padding-top")),v=Number.parseFloat(f.getPropertyValue("border-bottom-width"))+Number.parseFloat(f.getPropertyValue("border-top-width"));return{contextStyle:vBe.map(b=>`${b}:${f.getPropertyValue(b)}`).join(";"),paddingSize:m,borderSize:v,boxSizing:p}}(e);Bu.setAttribute("style",`${l};${hBe}`),Bu.value=e.value||e.placeholder||"";let s=Bu.scrollHeight;const u={};a==="border-box"?s+=i:a==="content-box"&&(s-=o),Bu.value="";const c=Bu.scrollHeight-o;if(Kn(t)){let d=c*t;a==="border-box"&&(d=d+o+i),s=Math.max(d,s),u.minHeight=`${d}px`}if(Kn(n)){let d=c*n;a==="border-box"&&(d=d+o+i),s=Math.min(d,s)}return u.height=`${s}px`,(r=Bu.parentNode)==null||r.removeChild(Bu),Bu=void 0,u}const mBe=Pt({id:{type:String,default:void 0},size:da,disabled:Boolean,modelValue:{type:[String,Number,Object],default:""},maxlength:{type:[String,Number]},minlength:{type:[String,Number]},type:{type:String,default:"text"},resize:{type:String,values:["none","both","horizontal","vertical"]},autosize:{type:[Boolean,Object],default:!1},autocomplete:{type:String,default:"off"},formatter:{type:Function},parser:{type:Function},placeholder:{type:String},form:{type:String},readonly:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},showPassword:{type:Boolean,default:!1},showWordLimit:{type:Boolean,default:!1},suffixIcon:{type:fi},prefixIcon:{type:fi},containerRole:{type:String,default:void 0},label:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},validateEvent:{type:Boolean,default:!0},inputStyle:{type:[Object,Array,String],default:()=>({})},autofocus:{type:Boolean,default:!1}}),gBe={[xn]:e=>an(e),input:e=>an(e),change:e=>an(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,mouseleave:e=>e instanceof MouseEvent,mouseenter:e=>e instanceof MouseEvent,keydown:e=>e instanceof Event,compositionstart:e=>e instanceof CompositionEvent,compositionupdate:e=>e instanceof CompositionEvent,compositionend:e=>e instanceof CompositionEvent},yBe=["role"],bBe=["id","minlength","maxlength","type","disabled","readonly","autocomplete","tabindex","aria-label","placeholder","form","autofocus"],ABe=["id","minlength","maxlength","tabindex","disabled","readonly","autocomplete","aria-label","placeholder","form","autofocus"],wBe=Te({name:"ElInput",inheritAttrs:!1}),xBe=Te({...wBe,props:mBe,emits:gBe,setup(e,{expose:t,emit:n}){const r=e,o=yc(),i=Ga(),a=ee(()=>{const ge={};return r.containerRole==="combobox"&&(ge["aria-haspopup"]=o["aria-haspopup"],ge["aria-owns"]=o["aria-owns"],ge["aria-expanded"]=o["aria-expanded"]),ge}),l=ee(()=>[r.type==="textarea"?g.b():v.b(),v.m(p.value),v.is("disabled",m.value),v.is("exceed",K.value),{[v.b("group")]:i.prepend||i.append,[v.bm("group","append")]:i.append,[v.bm("group","prepend")]:i.prepend,[v.m("prefix")]:i.prefix||r.prefixIcon,[v.m("suffix")]:i.suffix||r.suffixIcon||r.clearable||r.showPassword,[v.bm("suffix","password-clear")]:G.value&&z.value,[v.b("hidden")]:r.type==="hidden"},o.class]),s=ee(()=>[v.e("wrapper"),v.is("focus",I.value)]),u=GO({excludeKeys:ee(()=>Object.keys(a.value))}),{form:c,formItem:d}=qa(),{inputId:f}=Ac(r,{formItemContext:d}),p=$i(),m=wl(),v=_t("input"),g=_t("textarea"),b=Qo(),y=Qo(),w=de(!1),x=de(!1),_=de(!1),E=de(),C=Qo(r.inputStyle),T=ee(()=>b.value||y.value),{wrapperRef:k,isFocused:I,handleFocus:O,handleBlur:F}=Vw(T,{afterBlur(){var ge;r.validateEvent&&((ge=d==null?void 0:d.validate)==null||ge.call(d,"blur").catch(We=>{}))}}),N=ee(()=>{var ge;return(ge=c==null?void 0:c.statusIcon)!=null&&ge}),B=ee(()=>(d==null?void 0:d.validateState)||""),P=ee(()=>B.value&&zO[B.value]),V=ee(()=>_.value?$oe:Ioe),L=ee(()=>[o.style]),H=ee(()=>[r.inputStyle,C.value,{resize:r.resize}]),U=ee(()=>pa(r.modelValue)?"":String(r.modelValue)),G=ee(()=>r.clearable&&!m.value&&!r.readonly&&!!U.value&&(I.value||w.value)),z=ee(()=>r.showPassword&&!m.value&&!r.readonly&&!!U.value&&(!!U.value||I.value)),$=ee(()=>r.showWordLimit&&!!r.maxlength&&(r.type==="text"||r.type==="textarea")&&!m.value&&!r.readonly&&!r.showPassword),W=ee(()=>U.value.length),K=ee(()=>!!$.value&&W.value>Number(r.maxlength)),X=ee(()=>!!i.suffix||!!r.suffixIcon||G.value||r.showPassword||$.value||!!B.value&&N.value),[te,ne]=function(ge){const We=de();return[function(){if(ge.value==null)return;const{selectionStart:st,selectionEnd:At,value:Ve}=ge.value;if(st==null||At==null)return;const it=Ve.slice(0,Math.max(0,st)),dt=Ve.slice(Math.max(0,At));We.value={selectionStart:st,selectionEnd:At,value:Ve,beforeTxt:it,afterTxt:dt}},function(){if(ge.value==null||We.value==null)return;const{value:st}=ge.value,{beforeTxt:At,afterTxt:Ve,selectionStart:it}=We.value;if(At==null||Ve==null||it==null)return;let dt=st.length;if(st.endsWith(Ve))dt=st.length-Ve.length;else if(st.startsWith(At))dt=At.length;else{const ot=At[it-1],je=st.indexOf(ot,it-1);je!==-1&&(dt=je+1)}ge.value.setSelectionRange(dt,dt)}]}(b);fa(y,ge=>{if(le(),!$.value||r.resize!=="both")return;const We=ge[0],{width:st}=We.contentRect;E.value={right:`calc(100% - ${st+15+6}px)`}});const se=()=>{const{type:ge,autosize:We}=r;if(rr&&ge==="textarea"&&y.value)if(We){const st=wn(We)?We.minRows:void 0,At=wn(We)?We.maxRows:void 0,Ve=qie(y.value,st,At);C.value={overflowY:"hidden",...Ve},St(()=>{y.value.offsetHeight,C.value=Ve})}else C.value={minHeight:qie(y.value).minHeight}},le=(ge=>{let We=!1;return()=>{var st;We||!r.autosize||((st=y.value)==null?void 0:st.offsetParent)===null||(ge(),We=!0)}})(se),J=()=>{const ge=T.value,We=r.formatter?r.formatter(U.value):U.value;ge&&ge.value!==We&&(ge.value=We)},Z=async ge=>{te();let{value:We}=ge.target;r.formatter&&(We=r.parser?r.parser(We):We),x.value||(We!==U.value?(n(xn,We),n("input",We),await St(),J(),ne()):J())},ye=ge=>{n("change",ge.target.value)},be=ge=>{n("compositionstart",ge),x.value=!0},ve=ge=>{var We;n("compositionupdate",ge);const st=(We=ge.target)==null?void 0:We.value,At=st[st.length-1]||"";x.value=!g9(At)},Ae=ge=>{n("compositionend",ge),x.value&&(x.value=!1,Z(ge))},Ce=()=>{_.value=!_.value,_e()},_e=async()=>{var ge;await St(),(ge=T.value)==null||ge.focus()},ke=ge=>{w.value=!1,n("mouseleave",ge)},Be=ge=>{w.value=!0,n("mouseenter",ge)},$e=ge=>{n("keydown",ge)},rt=()=>{n(xn,""),n("change",""),n("clear"),n("input","")};return Je(()=>r.modelValue,()=>{var ge;St(()=>se()),r.validateEvent&&((ge=d==null?void 0:d.validate)==null||ge.call(d,"change").catch(We=>{}))}),Je(U,()=>J()),Je(()=>r.type,async()=>{await St(),J(),se()}),yn(()=>{!r.formatter&&r.parser,J(),St(se)}),t({input:b,textarea:y,ref:T,textareaStyle:H,autosize:dr(r,"autosize"),focus:_e,blur:()=>{var ge;return(ge=T.value)==null?void 0:ge.blur()},select:()=>{var ge;(ge=T.value)==null||ge.select()},clear:rt,resizeTextarea:se}),(ge,We)=>(Y(),fe("div",Un(M(a),{class:M(l),style:M(L),role:ge.containerRole,onMouseenter:Be,onMouseleave:ke}),[Fe(" input "),ge.type!=="textarea"?(Y(),fe(bt,{key:0},[Fe(" prepend slot "),ge.$slots.prepend?(Y(),fe("div",{key:0,class:oe(M(v).be("group","prepend"))},[ft(ge.$slots,"prepend")],2)):Fe("v-if",!0),ce("div",{ref_key:"wrapperRef",ref:k,class:oe(M(s))},[Fe(" prefix slot "),ge.$slots.prefix||ge.prefixIcon?(Y(),fe("span",{key:0,class:oe(M(v).e("prefix"))},[ce("span",{class:oe(M(v).e("prefix-inner"))},[ft(ge.$slots,"prefix"),ge.prefixIcon?(Y(),Le(M(Ft),{key:0,class:oe(M(v).e("icon"))},{default:he(()=>[(Y(),Le(Hn(ge.prefixIcon)))]),_:1},8,["class"])):Fe("v-if",!0)],2)],2)):Fe("v-if",!0),ce("input",Un({id:M(f),ref_key:"input",ref:b,class:M(v).e("inner")},M(u),{minlength:ge.minlength,maxlength:ge.maxlength,type:ge.showPassword?_.value?"text":"password":ge.type,disabled:M(m),readonly:ge.readonly,autocomplete:ge.autocomplete,tabindex:ge.tabindex,"aria-label":ge.label,placeholder:ge.placeholder,style:ge.inputStyle,form:ge.form,autofocus:ge.autofocus,onCompositionstart:be,onCompositionupdate:ve,onCompositionend:Ae,onInput:Z,onFocus:We[0]||(We[0]=(...st)=>M(O)&&M(O)(...st)),onBlur:We[1]||(We[1]=(...st)=>M(F)&&M(F)(...st)),onChange:ye,onKeydown:$e}),null,16,bBe),Fe(" suffix slot "),M(X)?(Y(),fe("span",{key:1,class:oe(M(v).e("suffix"))},[ce("span",{class:oe(M(v).e("suffix-inner"))},[M(G)&&M(z)&&M($)?Fe("v-if",!0):(Y(),fe(bt,{key:0},[ft(ge.$slots,"suffix"),ge.suffixIcon?(Y(),Le(M(Ft),{key:0,class:oe(M(v).e("icon"))},{default:he(()=>[(Y(),Le(Hn(ge.suffixIcon)))]),_:1},8,["class"])):Fe("v-if",!0)],64)),M(G)?(Y(),Le(M(Ft),{key:1,class:oe([M(v).e("icon"),M(v).e("clear")]),onMousedown:Gt(M(fr),["prevent"]),onClick:rt},{default:he(()=>[ie(M(h0))]),_:1},8,["class","onMousedown"])):Fe("v-if",!0),M(z)?(Y(),Le(M(Ft),{key:2,class:oe([M(v).e("icon"),M(v).e("password")]),onClick:Ce},{default:he(()=>[(Y(),Le(Hn(M(V))))]),_:1},8,["class"])):Fe("v-if",!0),M($)?(Y(),fe("span",{key:3,class:oe(M(v).e("count"))},[ce("span",{class:oe(M(v).e("count-inner"))},Ye(M(W))+" / "+Ye(ge.maxlength),3)],2)):Fe("v-if",!0),M(B)&&M(P)&&M(N)?(Y(),Le(M(Ft),{key:4,class:oe([M(v).e("icon"),M(v).e("validateIcon"),M(v).is("loading",M(B)==="validating")])},{default:he(()=>[(Y(),Le(Hn(M(P))))]),_:1},8,["class"])):Fe("v-if",!0)],2)],2)):Fe("v-if",!0)],2),Fe(" append slot "),ge.$slots.append?(Y(),fe("div",{key:1,class:oe(M(v).be("group","append"))},[ft(ge.$slots,"append")],2)):Fe("v-if",!0)],64)):(Y(),fe(bt,{key:1},[Fe(" textarea "),ce("textarea",Un({id:M(f),ref_key:"textarea",ref:y,class:M(g).e("inner")},M(u),{minlength:ge.minlength,maxlength:ge.maxlength,tabindex:ge.tabindex,disabled:M(m),readonly:ge.readonly,autocomplete:ge.autocomplete,style:M(H),"aria-label":ge.label,placeholder:ge.placeholder,form:ge.form,autofocus:ge.autofocus,onCompositionstart:be,onCompositionupdate:ve,onCompositionend:Ae,onInput:Z,onFocus:We[2]||(We[2]=(...st)=>M(O)&&M(O)(...st)),onBlur:We[3]||(We[3]=(...st)=>M(F)&&M(F)(...st)),onChange:ye,onKeydown:$e}),null,16,ABe),M($)?(Y(),fe("span",{key:0,style:$t(E.value),class:oe(M(v).e("count"))},Ye(M(W))+" / "+Ye(ge.maxlength),7)):Fe("v-if",!0)],64))],16,yBe))}});let k9,Kie,Yie;ua=Cr(Nt(xBe,[["__file","input.vue"]])),zQ={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}},k9=Symbol("scrollbarContextKey"),Kie=Pt({vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean}),Yie=Te({__name:"thumb",props:Kie,setup(e){const t=e,n=Rt(k9),r=_t("scrollbar");n||Ka("Thumb","can not inject scrollbar context");const o=de(),i=de(),a=de({}),l=de(!1);let s=!1,u=!1,c=rr?document.onselectstart:null;const d=ee(()=>zQ[t.vertical?"vertical":"horizontal"]),f=ee(()=>(({move:x,size:_,bar:E})=>({[E.size]:_,transform:`translate${E.axis}(${x}%)`}))({size:t.size,move:t.move,bar:d.value})),p=ee(()=>o.value[d.value.offset]**2/n.wrapElement[d.value.scrollSize]/t.ratio/i.value[d.value.offset]),m=x=>{var _;if(x.stopPropagation(),x.ctrlKey||[1,2].includes(x.button))return;(_=window.getSelection())==null||_.removeAllRanges(),g(x);const E=x.currentTarget;E&&(a.value[d.value.axis]=E[d.value.offset]-(x[d.value.client]-E.getBoundingClientRect()[d.value.direction]))},v=x=>{if(!i.value||!o.value||!n.wrapElement)return;const _=100*(Math.abs(x.target.getBoundingClientRect()[d.value.direction]-x[d.value.client])-i.value[d.value.offset]/2)*p.value/o.value[d.value.offset];n.wrapElement[d.value.scroll]=_*n.wrapElement[d.value.scrollSize]/100},g=x=>{x.stopImmediatePropagation(),s=!0,document.addEventListener("mousemove",b),document.addEventListener("mouseup",y),c=document.onselectstart,document.onselectstart=()=>!1},b=x=>{if(!o.value||!i.value||s===!1)return;const _=a.value[d.value.axis];if(!_)return;const E=100*(-1*(o.value.getBoundingClientRect()[d.value.direction]-x[d.value.client])-(i.value[d.value.offset]-_))*p.value/o.value[d.value.offset];n.wrapElement[d.value.scroll]=E*n.wrapElement[d.value.scrollSize]/100},y=()=>{s=!1,a.value[d.value.axis]=0,document.removeEventListener("mousemove",b),document.removeEventListener("mouseup",y),w(),u&&(l.value=!1)};xo(()=>{w(),document.removeEventListener("mouseup",y)});const w=()=>{document.onselectstart!==c&&(document.onselectstart=c)};return Yo(dr(n,"scrollbarElement"),"mousemove",()=>{u=!1,l.value=!!t.size}),Yo(dr(n,"scrollbarElement"),"mouseleave",()=>{u=!0,l.value=s}),(x,_)=>(Y(),Le(ca,{name:M(r).b("fade"),persisted:""},{default:he(()=>[nn(ce("div",{ref_key:"instance",ref:o,class:oe([M(r).e("bar"),M(r).is(M(d).key)]),onMousedown:v},[ce("div",{ref_key:"thumb",ref:i,class:oe(M(r).e("thumb")),style:$t(M(f)),onMousedown:m},null,38)],34),[[$n,x.always||l.value]])]),_:1},8,["name"]))}});var Xie=Nt(Yie,[["__file","thumb.vue"]]),_Be=Nt(Te({__name:"bar",props:Pt({always:{type:Boolean,default:!0},minSize:{type:Number,required:!0}}),setup(e,{expose:t}){const n=e,r=Rt(k9),o=de(0),i=de(0),a=de(""),l=de(""),s=de(1),u=de(1);return t({handleScroll:c=>{if(c){const d=c.offsetHeight-4,f=c.offsetWidth-4;i.value=100*c.scrollTop/d*s.value,o.value=100*c.scrollLeft/f*u.value}},update:()=>{const c=r==null?void 0:r.wrapElement;if(!c)return;const d=c.offsetHeight-4,f=c.offsetWidth-4,p=d**2/c.scrollHeight,m=f**2/c.scrollWidth,v=Math.max(p,n.minSize),g=Math.max(m,n.minSize);s.value=p/(d-p)/(v/(d-v)),u.value=m/(f-m)/(g/(f-g)),l.value=v+4<d?`${v}px`:"",a.value=g+4<f?`${g}px`:""}}),(c,d)=>(Y(),fe(bt,null,[ie(Xie,{move:o.value,ratio:u.value,size:a.value,always:c.always},null,8,["move","ratio","size","always"]),ie(Xie,{move:i.value,ratio:s.value,size:l.value,vertical:"",always:c.always},null,8,["move","ratio","size","always"])],64))}}),[["__file","bar.vue"]]);const EBe=Pt({height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:{type:Boolean,default:!1},wrapStyle:{type:[String,Object,Array],default:""},wrapClass:{type:[String,Array],default:""},viewClass:{type:[String,Array],default:""},viewStyle:{type:[String,Array,Object],default:""},noresize:Boolean,tag:{type:String,default:"div"},always:Boolean,minSize:{type:Number,default:20},id:String,role:String,ariaLabel:String,ariaOrientation:{type:String,values:["horizontal","vertical"]}}),CBe={scroll:({scrollTop:e,scrollLeft:t})=>[e,t].every(Kn)},SBe=Te({name:"ElScrollbar"}),kBe=Te({...SBe,props:EBe,emits:CBe,setup(e,{expose:t,emit:n}){const r=e,o=_t("scrollbar");let i,a;const l=de(),s=de(),u=de(),c=de(),d=ee(()=>{const g={};return r.height&&(g.height=ka(r.height)),r.maxHeight&&(g.maxHeight=ka(r.maxHeight)),[r.wrapStyle,g]}),f=ee(()=>[r.wrapClass,o.e("wrap"),{[o.em("wrap","hidden-default")]:!r.native}]),p=ee(()=>[o.e("view"),r.viewClass]),m=()=>{var g;s.value&&((g=c.value)==null||g.handleScroll(s.value),n("scroll",{scrollTop:s.value.scrollTop,scrollLeft:s.value.scrollLeft}))},v=()=>{var g;(g=c.value)==null||g.update()};return Je(()=>r.noresize,g=>{g?(i==null||i(),a==null||a()):({stop:i}=fa(u,v),a=Yo("resize",v))},{immediate:!0}),Je(()=>[r.maxHeight,r.height],()=>{r.native||St(()=>{var g;v(),s.value&&((g=c.value)==null||g.handleScroll(s.value))})}),qn(k9,Qn({scrollbarElement:l,wrapElement:s})),yn(()=>{r.native||St(()=>{v()})}),zs(()=>v()),t({wrapRef:s,update:v,scrollTo:function(g,b){wn(g)?s.value.scrollTo(g):Kn(g)&&Kn(b)&&s.value.scrollTo(g,b)},setScrollTop:g=>{Kn(g)&&(s.value.scrollTop=g)},setScrollLeft:g=>{Kn(g)&&(s.value.scrollLeft=g)},handleScroll:m}),(g,b)=>(Y(),fe("div",{ref_key:"scrollbarRef",ref:l,class:oe(M(o).b())},[ce("div",{ref_key:"wrapRef",ref:s,class:oe(M(f)),style:$t(M(d)),onScroll:m},[(Y(),Le(Hn(g.tag),{id:g.id,ref_key:"resizeRef",ref:u,class:oe(M(p)),style:$t(g.viewStyle),role:g.role,"aria-label":g.ariaLabel,"aria-orientation":g.ariaOrientation},{default:he(()=>[ft(g.$slots,"default")]),_:3},8,["id","class","style","role","aria-label","aria-orientation"]))],38),g.native?Fe("v-if",!0):(Y(),Le(_Be,{key:0,ref_key:"barRef",ref:c,always:g.always,"min-size":g.minSize},null,8,["always","min-size"]))],2))}});let D9,wF,xF,Qie;wd=Cr(Nt(kBe,[["__file","scrollbar.vue"]])),D9=Symbol("popper"),wF=Symbol("popperContent"),xF=Pt({role:{type:String,values:["dialog","grid","group","listbox","menu","navigation","tooltip","tree"],default:"tooltip"}}),Qie=Te({name:"ElPopper",inheritAttrs:!1});var DBe=Nt(Te({...Qie,props:xF,setup(e,{expose:t}){const n=e,r={triggerRef:de(),popperInstanceRef:de(),contentRef:de(),referenceRef:de(),role:ee(()=>n.role)};return t(r),qn(D9,r),(o,i)=>ft(o.$slots,"default")}}),[["__file","popper.vue"]]);const Jie=Pt({arrowOffset:{type:Number,default:5}}),OBe=Te({name:"ElPopperArrow",inheritAttrs:!1}),TBe=Te({...OBe,props:Jie,setup(e,{expose:t}){const n=e,r=_t("popper"),{arrowOffset:o,arrowRef:i,arrowStyle:a}=Rt(wF,void 0);return Je(()=>n.arrowOffset,l=>{o.value=l}),xo(()=>{i.value=void 0}),t({arrowRef:i}),(l,s)=>(Y(),fe("span",{ref_key:"arrowRef",ref:i,class:oe(M(r).e("arrow")),style:$t(M(a)),"data-popper-arrow":""},null,6))}});var MBe=Nt(TBe,[["__file","arrow.vue"]]);MQ=Te({name:"ElOnlyChild",setup(e,{slots:t,attrs:n}){var r;const o=Rt(_ie),i=(a=(r=o==null?void 0:o.setForwardRef)!=null?r:fr,{mounted(l){a(l)},updated(l){a(l)},unmounted(){a(null)}});var a;return()=>{var l;const s=(l=t.default)==null?void 0:l.call(t,n);if(!s||s.length>1)return null;const u=Zie(s);return u?nn(Tu(u,n),[[i]]):null}}});function Zie(e){if(!e)return null;const t=e;for(const n of t){if(wn(n))switch(n.type){case hi:continue;case Dc:case"svg":return eae(n);case bt:return Zie(n.children);default:return n}return eae(n)}return null}function eae(e){const t=_t("only-child");return ie("span",{class:t.e("content")},[e])}const tae=Pt({virtualRef:{type:Object},virtualTriggering:Boolean,onMouseenter:{type:Function},onMouseleave:{type:Function},onClick:{type:Function},onKeydown:{type:Function},onFocus:{type:Function},onBlur:{type:Function},onContextmenu:{type:Function},id:String,open:Boolean}),NBe=Te({name:"ElPopperTrigger",inheritAttrs:!1}),FBe=Te({...NBe,props:tae,setup(e,{expose:t}){const n=e,{role:r,triggerRef:o}=Rt(D9,void 0);var i;i=o,qn(_ie,{setForwardRef:d=>{i.value=d}});const a=ee(()=>s.value?n.id:void 0),l=ee(()=>{if(r&&r.value==="tooltip")return n.open&&n.id?n.id:void 0}),s=ee(()=>{if(r&&r.value!=="tooltip")return r.value}),u=ee(()=>s.value?`${n.open}`:void 0);let c;return yn(()=>{Je(()=>n.virtualRef,d=>{d&&(o.value=Oc(d))},{immediate:!0}),Je(o,(d,f)=>{c==null||c(),c=void 0,$s(d)&&(["onMouseenter","onMouseleave","onClick","onKeydown","onFocus","onBlur","onContextmenu"].forEach(p=>{var m;const v=n[p];v&&(d.addEventListener(p.slice(2).toLowerCase(),v),(m=f==null?void 0:f.removeEventListener)==null||m.call(f,p.slice(2).toLowerCase(),v))}),c=Je([a,l,s,u],p=>{["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach((m,v)=>{pa(p[v])?d.removeAttribute(m):d.setAttribute(m,p[v])})},{immediate:!0})),$s(f)&&["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach(p=>f.removeAttribute(p))},{immediate:!0})}),xo(()=>{c==null||c(),c=void 0}),t({triggerRef:o}),(d,f)=>d.virtualTriggering?Fe("v-if",!0):(Y(),Le(M(MQ),Un({key:0},d.$attrs,{"aria-controls":M(a),"aria-describedby":M(l),"aria-expanded":M(u),"aria-haspopup":M(s)}),{default:he(()=>[ft(d.$slots,"default")]),_:3},16,["aria-controls","aria-describedby","aria-expanded","aria-haspopup"]))}});var RBe=Nt(FBe,[["__file","trigger.vue"]]);let O9,T9,_F,nae,EF,CF,M9,Q3,N9;O9="focus-trap.focus-after-trapped",T9="focus-trap.focus-after-released",_F={cancelable:!0,bubbles:!1},nae={cancelable:!0,bubbles:!1},EF="focusAfterTrapped",CF="focusAfterReleased",OO=Symbol("elFocusTrap"),M9=de(),Q3=de(0),N9=de(0);let F9=0;const rae=e=>{const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const o=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||o?NodeFilter.FILTER_SKIP:r.tabIndex>=0||r===document.activeElement?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t},oae=(e,t)=>{for(const n of e)if(!IBe(n,t))return n},IBe=(e,t)=>{if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1},rp=(e,t)=>{if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),N9.value=window.performance.now(),e!==n&&(r=>r instanceof HTMLInputElement&&"select"in r)(e)&&t&&e.select()}};function iae(e,t){const n=[...e],r=e.indexOf(t);return r!==-1&&n.splice(r,1),n}const aae=(()=>{let e=[];return{push:t=>{const n=e[0];n&&t!==n&&n.pause(),e=iae(e,t),e.unshift(t)},remove:t=>{var n,r;e=iae(e,t),(r=(n=e[0])==null?void 0:n.resume)==null||r.call(n)}}})(),R9=()=>{M9.value="pointer",Q3.value=window.performance.now()},lae=()=>{M9.value="keyboard",Q3.value=window.performance.now()},BBe=()=>(yn(()=>{F9===0&&(document.addEventListener("mousedown",R9),document.addEventListener("touchstart",R9),document.addEventListener("keydown",lae)),F9++}),xo(()=>{F9--,F9<=0&&(document.removeEventListener("mousedown",R9),document.removeEventListener("touchstart",R9),document.removeEventListener("keydown",lae))}),{focusReason:M9,lastUserFocusTimestamp:Q3,lastAutomatedFocusTimestamp:N9}),I9=e=>new CustomEvent("focus-trap.focusout-prevented",{...nae,detail:e}),PBe=Te({name:"ElFocusTrap",inheritAttrs:!1,props:{loop:Boolean,trapped:Boolean,focusTrapEl:Object,focusStartEl:{type:[Object,String],default:"first"}},emits:[EF,CF,"focusin","focusout","focusout-prevented","release-requested"],setup(e,{emit:t}){const n=de();let r,o;const{focusReason:i}=BBe();var a;a=v=>{e.trapped&&!l.paused&&t("release-requested",v)},yn(()=>{lg.length===0&&document.addEventListener("keydown",Aie),rr&&lg.push(a)}),xo(()=>{lg=lg.filter(v=>v!==a),lg.length===0&&rr&&document.removeEventListener("keydown",Aie)});const l={paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}},s=v=>{if(!e.loop&&!e.trapped||l.paused)return;const{key:g,altKey:b,ctrlKey:y,metaKey:w,currentTarget:x,shiftKey:_}=v,{loop:E}=e,C=g===Xt.tab&&!b&&!y&&!w,T=document.activeElement;if(C&&T){const k=x,[I,O]=(F=>{const N=rae(F);return[oae(N,F),oae(N.reverse(),F)]})(k);if(I&&O)if(_||T!==O){if(_&&[I,k].includes(T)){const F=I9({focusReason:i.value});t("focusout-prevented",F),F.defaultPrevented||(v.preventDefault(),E&&rp(O,!0))}}else{const F=I9({focusReason:i.value});t("focusout-prevented",F),F.defaultPrevented||(v.preventDefault(),E&&rp(I,!0))}else if(T===k){const F=I9({focusReason:i.value});t("focusout-prevented",F),F.defaultPrevented||v.preventDefault()}}};qn(OO,{focusTrapRef:n,onKeydown:s}),Je(()=>e.focusTrapEl,v=>{v&&(n.value=v)},{immediate:!0}),Je([n],([v],[g])=>{v&&(v.addEventListener("keydown",s),v.addEventListener("focusin",d),v.addEventListener("focusout",f)),g&&(g.removeEventListener("keydown",s),g.removeEventListener("focusin",d),g.removeEventListener("focusout",f))});const u=v=>{t(EF,v)},c=v=>t(CF,v),d=v=>{const g=M(n);if(!g)return;const b=v.target,y=v.relatedTarget,w=b&&g.contains(b);e.trapped||y&&g.contains(y)||(r=y),w&&t("focusin",v),l.paused||e.trapped&&(w?o=b:rp(o,!0))},f=v=>{const g=M(n);if(!l.paused&&g)if(e.trapped){const b=v.relatedTarget;pa(b)||g.contains(b)||setTimeout(()=>{if(!l.paused&&e.trapped){const y=I9({focusReason:i.value});t("focusout-prevented",y),y.defaultPrevented||rp(o,!0)}},0)}else{const b=v.target;b&&g.contains(b)||t("focusout",v)}};async function p(){await St();const v=M(n);if(v){aae.push(l);const g=v.contains(document.activeElement)?r:document.activeElement;if(r=g,!v.contains(g)){const b=new Event(O9,_F);v.addEventListener(O9,u),v.dispatchEvent(b),b.defaultPrevented||St(()=>{let y=e.focusStartEl;an(y)||(rp(y),document.activeElement!==y&&(y="first")),y==="first"&&((w,x=!1)=>{const _=document.activeElement;for(const E of w)if(rp(E,x),document.activeElement!==_)return})(rae(v),!0),document.activeElement!==g&&y!=="container"||rp(v)})}}}function m(){const v=M(n);if(v){v.removeEventListener(O9,u);const g=new CustomEvent(T9,{..._F,detail:{focusReason:i.value}});v.addEventListener(T9,c),v.dispatchEvent(g),g.defaultPrevented||i.value!="keyboard"&&Q3.value>N9.value&&!v.contains(document.activeElement)||rp(r??document.body),v.removeEventListener(T9,c),aae.remove(l)}}return yn(()=>{e.trapped&&p(),Je(()=>e.trapped,v=>{v?p():m()})}),xo(()=>{e.trapped&&m()}),{onKeydown:s}}});$w=Nt(PBe,[["render",function(e,t,n,r,o,i){return ft(e.$slots,"default",{handleKeydown:e.onKeydown})}],["__file","focus-trap.vue"]]);const LBe=Pt({boundariesPadding:{type:Number,default:0},fallbackPlacements:{type:Array,default:void 0},gpuAcceleration:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:String,values:v0,default:"bottom"},popperOptions:{type:Object,default:()=>({})},strategy:{type:String,values:["fixed","absolute"],default:"absolute"}}),sae=Pt({...LBe,id:String,style:{type:[String,Array,Object]},className:{type:[String,Array,Object]},effect:{type:String,default:"dark"},visible:Boolean,enterable:{type:Boolean,default:!0},pure:Boolean,focusOnShow:{type:Boolean,default:!1},trapping:{type:Boolean,default:!1},popperClass:{type:[String,Array,Object]},popperStyle:{type:[String,Array,Object]},referenceEl:{type:Object},triggerTargetEl:{type:Object},stopPopperMouseEvent:{type:Boolean,default:!0},ariaLabel:{type:String,default:void 0},virtualTriggering:Boolean,zIndex:Number}),jBe={mouseenter:e=>e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,focus:()=>!0,blur:()=>!0,close:()=>!0},VBe=(e,t=[])=>{const{placement:n,strategy:r,popperOptions:o}=e,i={placement:n,strategy:r,...o,modifiers:[...zBe(e),...t]};return function(a,l){l&&(a.modifiers=[...a.modifiers,...l??[]])}(i,o==null?void 0:o.modifiers),i};function zBe(e){const{offset:t,gpuAcceleration:n,fallbackPlacements:r}=e;return[{name:"offset",options:{offset:[0,t??12]}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5,fallbackPlacements:r}},{name:"computeStyles",options:{gpuAcceleration:n}}]}const HBe=e=>{const{popperInstanceRef:t,contentRef:n,triggerRef:r,role:o}=Rt(D9,void 0),i=de(),a=de(),l=ee(()=>({name:"eventListeners",enabled:!!e.visible})),s=ee(()=>{var b;const y=M(i),w=(b=M(a))!=null?b:0;return{name:"arrow",enabled:!Soe(y),options:{element:y,padding:w}}}),u=ee(()=>({onFirstUpdate:()=>{m()},...VBe(e,[M(s),M(l)])})),c=ee(()=>(b=>{if(rr)return Oc(b)})(e.referenceEl)||M(r)),{attributes:d,state:f,styles:p,update:m,forceUpdate:v,instanceRef:g}=UIe(c,n,u);return Je(g,b=>t.value=b),yn(()=>{Je(()=>{var b;return(b=M(c))==null?void 0:b.getBoundingClientRect()},()=>{m()})}),{attributes:d,arrowRef:i,contentRef:n,instanceRef:g,state:f,styles:p,role:o,forceUpdate:v,update:m}},$Be=Te({name:"ElPopperContent"}),UBe=Te({...$Be,props:sae,emits:jBe,setup(e,{expose:t,emit:n}){const r=e,{focusStartRef:o,trapped:i,onFocusAfterReleased:a,onFocusAfterTrapped:l,onFocusInTrap:s,onFocusoutPrevented:u,onReleaseRequested:c}=((N,B)=>{const P=de(!1),V=de();return{focusStartRef:V,trapped:P,onFocusAfterReleased:L=>{var H;((H=L.detail)==null?void 0:H.focusReason)!=="pointer"&&(V.value="first",B("blur"))},onFocusAfterTrapped:()=>{B("focus")},onFocusInTrap:L=>{N.visible&&!P.value&&(L.target&&(V.value=L.target),P.value=!0)},onFocusoutPrevented:L=>{N.trapping||(L.detail.focusReason==="pointer"&&L.preventDefault(),P.value=!1)},onReleaseRequested:()=>{P.value=!1,B("close")}}})(r,n),{attributes:d,arrowRef:f,contentRef:p,styles:m,instanceRef:v,role:g,update:b}=HBe(r),{ariaModal:y,arrowStyle:w,contentAttrs:x,contentClass:_,contentStyle:E,updateZIndex:C}=((N,{attributes:B,styles:P,role:V})=>{const{nextZIndex:L}=E9(),H=_t("popper"),U=ee(()=>M(B).popper),G=de(Kn(N.zIndex)?N.zIndex:L()),z=ee(()=>[H.b(),H.is("pure",N.pure),H.is(N.effect),N.popperClass]),$=ee(()=>[{zIndex:M(G)},M(P).popper,N.popperStyle||{}]);return{ariaModal:ee(()=>V.value==="dialog"?"false":void 0),arrowStyle:ee(()=>M(P).arrow||{}),contentAttrs:U,contentClass:z,contentStyle:$,contentZIndex:G,updateZIndex:()=>{G.value=Kn(N.zIndex)?N.zIndex:L()}}})(r,{styles:m,attributes:d,role:g}),T=Rt(Fc,void 0),k=de();let I;qn(wF,{arrowStyle:w,arrowRef:f,arrowOffset:k}),T&&(T.addInputId||T.removeInputId)&&qn(Fc,{...T,addInputId:fr,removeInputId:fr});const O=(N=!0)=>{b(),N&&C()},F=()=>{O(!1),r.visible&&r.focusOnShow?i.value=!0:r.visible===!1&&(i.value=!1)};return yn(()=>{Je(()=>r.triggerTargetEl,(N,B)=>{I==null||I(),I=void 0;const P=M(N||p.value),V=M(B||p.value);$s(P)&&(I=Je([g,()=>r.ariaLabel,y,()=>r.id],L=>{["role","aria-label","aria-modal","id"].forEach((H,U)=>{pa(L[U])?P.removeAttribute(H):P.setAttribute(H,L[U])})},{immediate:!0})),V!==P&&$s(V)&&["role","aria-label","aria-modal","id"].forEach(L=>{V.removeAttribute(L)})},{immediate:!0}),Je(()=>r.visible,F,{immediate:!0})}),xo(()=>{I==null||I(),I=void 0}),t({popperContentRef:p,popperInstanceRef:v,updatePopper:O,contentStyle:E}),(N,B)=>(Y(),fe("div",Un({ref_key:"contentRef",ref:p},M(x),{style:M(E),class:M(_),tabindex:"-1",onMouseenter:B[0]||(B[0]=P=>N.$emit("mouseenter",P)),onMouseleave:B[1]||(B[1]=P=>N.$emit("mouseleave",P))}),[ie(M($w),{trapped:M(i),"trap-on-focus-in":!0,"focus-trap-el":M(p),"focus-start-el":M(o),onFocusAfterTrapped:M(l),onFocusAfterReleased:M(a),onFocusin:M(s),onFocusoutPrevented:M(u),onReleaseRequested:M(c)},{default:he(()=>[ft(N.$slots,"default")]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusin","onFocusoutPrevented","onReleaseRequested"])],16))}});var WBe=Nt(UBe,[["__file","content.vue"]]);let uae,J3,ug,cae,dae,fae,pae,hae,r1,vae,mae;uae=Cr(DBe),J3=Symbol("elTooltip"),Ui=Pt({...GIe,...sae,appendTo:{type:[String,Object]},content:{type:String,default:""},rawContent:{type:Boolean,default:!1},persistent:Boolean,ariaLabel:String,visible:{type:Boolean,default:null},transition:String,teleported:{type:Boolean,default:!0},disabled:Boolean}),ug=Pt({...tae,disabled:Boolean,trigger:{type:[String,Array],default:"hover"},triggerKeys:{type:Array,default:()=>[Xt.enter,Xt.space]}}),{useModelToggleProps:cae,useModelToggleEmits:dae,useModelToggle:fae}=QN("visible"),pae=Pt({...xF,...cae,...Ui,...ug,...Jie,showArrow:{type:Boolean,default:!0}}),hae=[...dae,"before-show","before-hide","show","hide","open","close"],r1=(e,t,n)=>r=>{((o,i)=>mt(o)?o.includes(i):o===i)(M(e),t)&&n(r)},vae=Te({name:"ElTooltipTrigger"}),mae=Te({...vae,props:ug,setup(e,{expose:t}){const n=e,r=_t("tooltip"),{controlled:o,id:i,open:a,onOpen:l,onClose:s,onToggle:u}=Rt(J3,void 0),c=de(null),d=()=>{if(M(o)||n.disabled)return!0},f=dr(n,"trigger"),p=bc(d,r1(f,"hover",l)),m=bc(d,r1(f,"hover",s)),v=bc(d,r1(f,"click",x=>{x.button===0&&u(x)})),g=bc(d,r1(f,"focus",l)),b=bc(d,r1(f,"focus",s)),y=bc(d,r1(f,"contextmenu",x=>{x.preventDefault(),u(x)})),w=bc(d,x=>{const{code:_}=x;n.triggerKeys.includes(_)&&(x.preventDefault(),u(x))});return t({triggerRef:c}),(x,_)=>(Y(),Le(M(RBe),{id:M(i),"virtual-ref":x.virtualRef,open:M(a),"virtual-triggering":x.virtualTriggering,class:oe(M(r).e("trigger")),onBlur:M(b),onClick:M(v),onContextmenu:M(y),onFocus:M(g),onMouseenter:M(p),onMouseleave:M(m),onKeydown:M(w)},{default:he(()=>[ft(x.$slots,"default")]),_:3},8,["id","virtual-ref","open","virtual-triggering","class","onBlur","onClick","onContextmenu","onFocus","onMouseenter","onMouseleave","onKeydown"]))}});var GBe=Nt(mae,[["__file","trigger.vue"]]);const qBe=Te({name:"ElTooltipContent",inheritAttrs:!1}),KBe=Te({...qBe,props:Ui,setup(e,{expose:t}){const n=e,{selector:r}=xie(),o=_t("tooltip"),i=de(null),a=de(!1),{controlled:l,id:s,open:u,trigger:c,onClose:d,onOpen:f,onShow:p,onHide:m,onBeforeShow:v,onBeforeHide:g}=Rt(J3,void 0),b=ee(()=>n.transition||`${o.namespace.value}-fade-in-linear`),y=ee(()=>n.persistent);xo(()=>{a.value=!0});const w=ee(()=>!!M(y)||M(u)),x=ee(()=>!n.disabled&&M(u)),_=ee(()=>n.appendTo||r.value),E=ee(()=>{var L;return(L=n.style)!=null?L:{}}),C=ee(()=>!M(u)),T=()=>{m()},k=()=>{if(M(l))return!0},I=bc(k,()=>{n.enterable&&M(c)==="hover"&&f()}),O=bc(k,()=>{M(c)==="hover"&&d()}),F=()=>{var L,H;(H=(L=i.value)==null?void 0:L.updatePopper)==null||H.call(L),v==null||v()},N=()=>{g==null||g()},B=()=>{p(),V=lN(ee(()=>{var L;return(L=i.value)==null?void 0:L.popperContentRef}),()=>{M(l)||M(c)!=="hover"&&d()})},P=()=>{n.virtualTriggering||d()};let V;return Je(()=>M(u),L=>{L||V==null||V()},{flush:"post"}),Je(()=>n.content,()=>{var L,H;(H=(L=i.value)==null?void 0:L.updatePopper)==null||H.call(L)}),t({contentRef:i}),(L,H)=>(Y(),Le(Db,{disabled:!L.teleported,to:M(_)},[ie(ca,{name:M(b),onAfterLeave:T,onBeforeEnter:F,onAfterEnter:B,onBeforeLeave:N},{default:he(()=>[M(w)?nn((Y(),Le(M(WBe),Un({key:0,id:M(s),ref_key:"contentRef",ref:i},L.$attrs,{"aria-label":L.ariaLabel,"aria-hidden":M(C),"boundaries-padding":L.boundariesPadding,"fallback-placements":L.fallbackPlacements,"gpu-acceleration":L.gpuAcceleration,offset:L.offset,placement:L.placement,"popper-options":L.popperOptions,strategy:L.strategy,effect:L.effect,enterable:L.enterable,pure:L.pure,"popper-class":L.popperClass,"popper-style":[L.popperStyle,M(E)],"reference-el":L.referenceEl,"trigger-target-el":L.triggerTargetEl,visible:M(x),"z-index":L.zIndex,onMouseenter:M(I),onMouseleave:M(O),onBlur:P,onClose:M(d)}),{default:he(()=>[a.value?Fe("v-if",!0):ft(L.$slots,"default",{key:0})]),_:3},16,["id","aria-label","aria-hidden","boundaries-padding","fallback-placements","gpu-acceleration","offset","placement","popper-options","strategy","effect","enterable","pure","popper-class","popper-style","reference-el","trigger-target-el","visible","z-index","onMouseenter","onMouseleave","onClose"])),[[$n,M(x)]]):Fe("v-if",!0)]),_:3},8,["name"])],8,["disabled","to"]))}});var YBe=Nt(KBe,[["__file","content.vue"]]);const XBe=["innerHTML"],QBe={key:1},JBe=Te({name:"ElTooltip"}),ZBe=Te({...JBe,props:pae,emits:hae,setup(e,{expose:t,emit:n}){const r=e;WIe();const o=Zl(),i=de(),a=de(),l=()=>{var g;const b=M(i);b&&((g=b.popperInstanceRef)==null||g.update())},s=de(!1),u=de(),{show:c,hide:d,hasUpdateHandler:f}=fae({indicator:s,toggleReason:u}),{onOpen:p,onClose:m}=(({showAfter:g,hideAfter:b,autoClose:y,open:w,close:x})=>{const{registerTimeout:_}=yie(),{registerTimeout:E,cancelTimeout:C}=yie();return{onOpen:T=>{_(()=>{w(T);const k=M(y);Kn(k)&&k>0&&E(()=>{x(T)},k)},M(g))},onClose:T=>{C(),_(()=>{x(T)},M(b))}}})({showAfter:dr(r,"showAfter"),hideAfter:dr(r,"hideAfter"),autoClose:dr(r,"autoClose"),open:c,close:d}),v=ee(()=>Ki(r.visible)&&!f.value);return qn(J3,{controlled:v,id:o,open:xd(s),trigger:dr(r,"trigger"),onOpen:g=>{p(g)},onClose:g=>{m(g)},onToggle:g=>{M(s)?m(g):p(g)},onShow:()=>{n("show",u.value)},onHide:()=>{n("hide",u.value)},onBeforeShow:()=>{n("before-show",u.value)},onBeforeHide:()=>{n("before-hide",u.value)},updatePopper:l}),Je(()=>r.disabled,g=>{g&&s.value&&(s.value=!1)}),aM(()=>s.value&&d()),t({popperRef:i,contentRef:a,isFocusInsideContent:g=>{var b,y;const w=(y=(b=a.value)==null?void 0:b.contentRef)==null?void 0:y.popperContentRef,x=(g==null?void 0:g.relatedTarget)||document.activeElement;return w&&w.contains(x)},updatePopper:l,onOpen:p,onClose:m,hide:d}),(g,b)=>(Y(),Le(M(uae),{ref_key:"popperRef",ref:i,role:g.role},{default:he(()=>[ie(GBe,{disabled:g.disabled,trigger:g.trigger,"trigger-keys":g.triggerKeys,"virtual-ref":g.virtualRef,"virtual-triggering":g.virtualTriggering},{default:he(()=>[g.$slots.default?ft(g.$slots,"default",{key:0}):Fe("v-if",!0)]),_:3},8,["disabled","trigger","trigger-keys","virtual-ref","virtual-triggering"]),ie(YBe,{ref_key:"contentRef",ref:a,"aria-label":g.ariaLabel,"boundaries-padding":g.boundariesPadding,content:g.content,disabled:g.disabled,effect:g.effect,enterable:g.enterable,"fallback-placements":g.fallbackPlacements,"hide-after":g.hideAfter,"gpu-acceleration":g.gpuAcceleration,offset:g.offset,persistent:g.persistent,"popper-class":g.popperClass,"popper-style":g.popperStyle,placement:g.placement,"popper-options":g.popperOptions,pure:g.pure,"raw-content":g.rawContent,"reference-el":g.referenceEl,"trigger-target-el":g.triggerTargetEl,"show-after":g.showAfter,strategy:g.strategy,teleported:g.teleported,transition:g.transition,"virtual-triggering":g.virtualTriggering,"z-index":g.zIndex,"append-to":g.appendTo},{default:he(()=>[ft(g.$slots,"content",{},()=>[g.rawContent?(Y(),fe("span",{key:0,innerHTML:g.content},null,8,XBe)):(Y(),fe("span",QBe,Ye(g.content),1))]),g.showArrow?(Y(),Le(M(MBe),{key:0,"arrow-offset":g.arrowOffset},null,8,["arrow-offset"])):Fe("v-if",!0)]),_:3},8,["aria-label","boundaries-padding","content","disabled","effect","enterable","fallback-placements","hide-after","gpu-acceleration","offset","persistent","popper-class","popper-style","placement","popper-options","pure","raw-content","reference-el","trigger-target-el","show-after","strategy","teleported","transition","virtual-triggering","z-index","append-to"])]),_:3},8,["role"]))}});let gae,yae,bae,Aae,wae,SF,xae,_ae;Al=Cr(Nt(ZBe,[["__file","tooltip.vue"]])),gae=Pt({valueKey:{type:String,default:"value"},modelValue:{type:[String,Number],default:""},debounce:{type:Number,default:300},placement:{type:String,values:["top","top-start","top-end","bottom","bottom-start","bottom-end"],default:"bottom-start"},fetchSuggestions:{type:[Function,Array],default:fr},popperClass:{type:String,default:""},triggerOnFocus:{type:Boolean,default:!0},selectWhenUnmatched:{type:Boolean,default:!1},hideLoading:{type:Boolean,default:!1},label:{type:String},teleported:Ui.teleported,highlightFirstItem:{type:Boolean,default:!1},fitInputWidth:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},name:String}),yae={[xn]:e=>an(e),[Tl]:e=>an(e),[Xo]:e=>an(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,select:e=>wn(e)},bae=["aria-expanded","aria-owns"],Aae={key:0},wae=["id","aria-selected","onClick"],SF="ElAutocomplete",xae=Te({name:SF,inheritAttrs:!1}),_ae=Te({...xae,props:gae,emits:yae,setup(e,{expose:t,emit:n}){const r=e,o=GO(),i=yc(),a=wl(),l=_t("autocomplete"),s=de(),u=de(),c=de(),d=de();let f=!1,p=!1;const m=de([]),v=de(-1),g=de(""),b=de(!1),y=de(!1),w=de(!1),x=Zl(),_=ee(()=>i.style),E=ee(()=>(m.value.length>0||w.value)&&b.value),C=ee(()=>!r.hideLoading&&w.value),T=ee(()=>s.value?Array.from(s.value.$el.querySelectorAll("input")):[]),k=()=>{E.value&&(g.value=`${s.value.$el.offsetWidth}px`)},I=()=>{v.value=-1},O=ts(async W=>{if(y.value)return;const K=X=>{w.value=!1,y.value||(mt(X)?(m.value=X,v.value=r.highlightFirstItem?0:-1):Ka(SF,"autocomplete suggestions must be an array"))};if(w.value=!0,mt(r.fetchSuggestions))K(r.fetchSuggestions);else{const X=await r.fetchSuggestions(W,K);mt(X)&&K(X)}},r.debounce),F=W=>{const K=!!W;if(n(Tl,W),n(xn,W),y.value=!1,b.value||(b.value=K),!r.triggerOnFocus&&!W)return y.value=!0,void(m.value=[]);O(W)},N=W=>{var K;a.value||(((K=W.target)==null?void 0:K.tagName)!=="INPUT"||T.value.includes(document.activeElement))&&(b.value=!0)},B=W=>{n(Xo,W)},P=W=>{p?p=!1:(b.value=!0,n("focus",W),r.triggerOnFocus&&!f&&O(String(r.modelValue)))},V=W=>{setTimeout(()=>{var K;(K=c.value)!=null&&K.isFocusInsideContent()?p=!0:(b.value&&G(),n("blur",W))})},L=()=>{b.value=!1,n(xn,""),n("clear")},H=async()=>{E.value&&v.value>=0&&v.value<m.value.length?z(m.value[v.value]):r.selectWhenUnmatched&&(n("select",{value:r.modelValue}),m.value=[],v.value=-1)},U=W=>{E.value&&(W.preventDefault(),W.stopPropagation(),G())},G=()=>{b.value=!1},z=async W=>{n(Tl,W[r.valueKey]),n(xn,W[r.valueKey]),n("select",W),m.value=[],v.value=-1},$=W=>{if(!E.value||w.value)return;if(W<0)return void(v.value=-1);W>=m.value.length&&(W=m.value.length-1);const K=u.value.querySelector(`.${l.be("suggestion","wrap")}`),X=K.querySelectorAll(`.${l.be("suggestion","list")} li`)[W],te=K.scrollTop,{offsetTop:ne,scrollHeight:se}=X;ne+se>te+K.clientHeight&&(K.scrollTop+=se),ne<te&&(K.scrollTop-=se),v.value=W,s.value.ref.setAttribute("aria-activedescendant",`${x.value}-item-${v.value}`)};return lN(d,()=>{E.value&&G()}),yn(()=>{s.value.ref.setAttribute("role","textbox"),s.value.ref.setAttribute("aria-autocomplete","list"),s.value.ref.setAttribute("aria-controls","id"),s.value.ref.setAttribute("aria-activedescendant",`${x.value}-item-${v.value}`),f=s.value.ref.hasAttribute("readonly")}),t({highlightedIndex:v,activated:b,loading:w,inputRef:s,popperRef:c,suggestions:m,handleSelect:z,handleKeyEnter:H,focus:()=>{var W;(W=s.value)==null||W.focus()},blur:()=>{var W;(W=s.value)==null||W.blur()},close:G,highlight:$}),(W,K)=>(Y(),Le(M(Al),{ref_key:"popperRef",ref:c,visible:M(E),placement:W.placement,"fallback-placements":["bottom-start","top-start"],"popper-class":[M(l).e("popper"),W.popperClass],teleported:W.teleported,"gpu-acceleration":!1,pure:"","manual-mode":"",effect:"light",trigger:"click",transition:`${M(l).namespace.value}-zoom-in-top`,persistent:"",role:"listbox",onBeforeShow:k,onHide:I},{content:he(()=>[ce("div",{ref_key:"regionRef",ref:u,class:oe([M(l).b("suggestion"),M(l).is("loading",M(C))]),style:$t({[W.fitInputWidth?"width":"minWidth"]:g.value,outline:"none"}),role:"region"},[ie(M(wd),{id:M(x),tag:"ul","wrap-class":M(l).be("suggestion","wrap"),"view-class":M(l).be("suggestion","list"),role:"listbox"},{default:he(()=>[M(C)?(Y(),fe("li",Aae,[ft(W.$slots,"loading",{},()=>[ie(M(Ft),{class:oe(M(l).is("loading"))},{default:he(()=>[ie(M(jd))]),_:1},8,["class"])])])):(Y(!0),fe(bt,{key:1},bn(m.value,(X,te)=>(Y(),fe("li",{id:`${M(x)}-item-${te}`,key:te,class:oe({highlighted:v.value===te}),role:"option","aria-selected":v.value===te,onClick:ne=>z(X)},[ft(W.$slots,"default",{item:X},()=>[Dt(Ye(X[W.valueKey]),1)])],10,wae))),128))]),_:3},8,["id","wrap-class","view-class"])],6)]),default:he(()=>[ce("div",{ref_key:"listboxRef",ref:d,class:oe([M(l).b(),W.$attrs.class]),style:$t(M(_)),role:"combobox","aria-haspopup":"listbox","aria-expanded":M(E),"aria-owns":M(x)},[ie(M(ua),Un({ref_key:"inputRef",ref:s},M(o),{clearable:W.clearable,disabled:M(a),name:W.name,"model-value":W.modelValue,onInput:F,onChange:B,onFocus:P,onBlur:V,onClear:L,onKeydown:[K[0]||(K[0]=Rr(Gt(X=>$(v.value-1),["prevent"]),["up"])),K[1]||(K[1]=Rr(Gt(X=>$(v.value+1),["prevent"]),["down"])),Rr(H,["enter"]),Rr(G,["tab"]),Rr(U,["esc"])],onMousedown:N}),Ff({_:2},[W.$slots.prepend?{name:"prepend",fn:he(()=>[ft(W.$slots,"prepend")])}:void 0,W.$slots.append?{name:"append",fn:he(()=>[ft(W.$slots,"append")])}:void 0,W.$slots.prefix?{name:"prefix",fn:he(()=>[ft(W.$slots,"prefix")])}:void 0,W.$slots.suffix?{name:"suffix",fn:he(()=>[ft(W.$slots,"suffix")])}:void 0]),1040,["clearable","disabled","name","model-value","onKeydown"])],14,bae)]),_:3},8,["visible","placement","popper-class","teleported","transition"]))}});let Eae,Cae,Sae,kae;NO=Cr(Nt(_ae,[["__file","autocomplete.vue"]])),Eae=Pt({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String,dotStyle:{type:[String,Object,Array]},offset:{type:Array,default:[0,0]},dotClass:{type:String}}),Cae=["textContent"],Sae=Te({name:"ElBadge"}),kae=Te({...Sae,props:Eae,setup(e,{expose:t}){const n=e,r=_t("badge"),o=ee(()=>n.isDot?"":Kn(n.value)&&Kn(n.max)?n.max<n.value?`${n.max}+`:n.value!==0||n.showZero?`${n.value}`:"":`${n.value}`),i=ee(()=>{var a,l,s,u,c;return[{backgroundColor:n.color,marginRight:ka(-((l=(a=n.offset)==null?void 0:a[0])!=null?l:0)),marginTop:ka((u=(s=n.offset)==null?void 0:s[1])!=null?u:0)},(c=n.dotStyle)!=null?c:{}]});return t({content:o}),(a,l)=>(Y(),fe("div",{class:oe(M(r).b())},[ft(a.$slots,"default"),ie(ca,{name:`${M(r).namespace.value}-zoom-in-center`,persisted:""},{default:he(()=>[nn(ce("sup",{class:oe([M(r).e("content"),M(r).em("content",a.type),M(r).is("fixed",!!a.$slots.default),M(r).is("dot",a.isDot),a.dotClass]),style:$t(M(i)),textContent:Ye(M(o))},null,14,Cae),[[$n,!a.hidden&&(M(o)||a.isDot)]])]),_:1},8,["name"])],2))}});let kF,B9,P9,Dae;bQ=Cr(Nt(kae,[["__file","badge.vue"]])),kF=Symbol("buttonGroupContextKey"),B9=["default","primary","success","warning","info","danger","text",""],P9=Pt({size:da,disabled:Boolean,type:{type:String,values:B9,default:""},icon:{type:fi},nativeType:{type:String,values:["button","submit","reset"],default:"button"},loading:Boolean,loadingIcon:{type:fi,default:()=>jd},plain:Boolean,text:Boolean,link:Boolean,bg:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean,color:String,dark:Boolean,autoInsertSpace:{type:Boolean,default:void 0},tag:{type:[String,Object],default:"button"}}),Dae={click:e=>e instanceof MouseEvent};function va(e,t){(function(r){return typeof r=="string"&&r.indexOf(".")!==-1&&parseFloat(r)===1})(e)&&(e="100%");var n=function(r){return typeof r=="string"&&r.indexOf("%")!==-1}(e);return e=t===360?e:Math.min(t,Math.max(0,parseFloat(e))),n&&(e=parseInt(String(e*t),10)/100),Math.abs(e-t)<1e-6?1:e=t===360?(e<0?e%t+t:e%t)/parseFloat(String(t)):e%t/parseFloat(String(t))}function L9(e){return Math.min(1,Math.max(0,e))}function Oae(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function j9(e){return e<=1?"".concat(100*Number(e),"%"):e}function o1(e){return e.length===1?"0"+e:String(e)}function Tae(e,t,n){e=va(e,255),t=va(t,255),n=va(n,255);var r=Math.max(e,t,n),o=Math.min(e,t,n),i=0,a=0,l=(r+o)/2;if(r===o)a=0,i=0;else{var s=r-o;switch(a=l>.5?s/(2-r-o):s/(r+o),r){case e:i=(t-n)/s+(t<n?6:0);break;case t:i=(n-e)/s+2;break;case n:i=(e-t)/s+4}i/=6}return{h:i,s:a,l}}function DF(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<.16666666666666666?e+6*n*(t-e):n<.5?t:n<.6666666666666666?e+(t-e)*(.6666666666666666-n)*6:e}function Mae(e,t,n){e=va(e,255),t=va(t,255),n=va(n,255);var r=Math.max(e,t,n),o=Math.min(e,t,n),i=0,a=r,l=r-o,s=r===0?0:l/r;if(r===o)i=0;else{switch(r){case e:i=(t-n)/l+(t<n?6:0);break;case t:i=(n-e)/l+2;break;case n:i=(e-t)/l+4}i/=6}return{h:i,s,v:a}}function Nae(e,t,n,r){var o=[o1(Math.round(e).toString(16)),o1(Math.round(t).toString(16)),o1(Math.round(n).toString(16))];return r&&o[0].startsWith(o[0].charAt(1))&&o[1].startsWith(o[1].charAt(1))&&o[2].startsWith(o[2].charAt(1))?o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0):o.join("")}function ePe(e){return Math.round(255*parseFloat(e)).toString(16)}function Fae(e){return hs(e)/255}function hs(e){return parseInt(e,16)}var OF={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function tPe(e){var t={r:0,g:0,b:0},n=1,r=null,o=null,i=null,a=!1,l=!1;return typeof e=="string"&&(e=function(s){if(s=s.trim().toLowerCase(),s.length===0)return!1;var u=!1;if(OF[s])s=OF[s],u=!0;else if(s==="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var c=Pu.rgb.exec(s);return c?{r:c[1],g:c[2],b:c[3]}:(c=Pu.rgba.exec(s),c?{r:c[1],g:c[2],b:c[3],a:c[4]}:(c=Pu.hsl.exec(s),c?{h:c[1],s:c[2],l:c[3]}:(c=Pu.hsla.exec(s),c?{h:c[1],s:c[2],l:c[3],a:c[4]}:(c=Pu.hsv.exec(s),c?{h:c[1],s:c[2],v:c[3]}:(c=Pu.hsva.exec(s),c?{h:c[1],s:c[2],v:c[3],a:c[4]}:(c=Pu.hex8.exec(s),c?{r:hs(c[1]),g:hs(c[2]),b:hs(c[3]),a:Fae(c[4]),format:u?"name":"hex8"}:(c=Pu.hex6.exec(s),c?{r:hs(c[1]),g:hs(c[2]),b:hs(c[3]),format:u?"name":"hex"}:(c=Pu.hex4.exec(s),c?{r:hs(c[1]+c[1]),g:hs(c[2]+c[2]),b:hs(c[3]+c[3]),a:Fae(c[4]+c[4]),format:u?"name":"hex8"}:(c=Pu.hex3.exec(s),c?{r:hs(c[1]+c[1]),g:hs(c[2]+c[2]),b:hs(c[3]+c[3]),format:u?"name":"hex"}:!1)))))))))}(e)),typeof e=="object"&&(Hd(e.r)&&Hd(e.g)&&Hd(e.b)?(t=function(s,u,c){return{r:255*va(s,255),g:255*va(u,255),b:255*va(c,255)}}(e.r,e.g,e.b),a=!0,l=String(e.r).substr(-1)==="%"?"prgb":"rgb"):Hd(e.h)&&Hd(e.s)&&Hd(e.v)?(r=j9(e.s),o=j9(e.v),t=function(s,u,c){s=6*va(s,360),u=va(u,100),c=va(c,100);var d=Math.floor(s),f=s-d,p=c*(1-u),m=c*(1-f*u),v=c*(1-(1-f)*u),g=d%6;return{r:255*[c,m,p,p,v,c][g],g:255*[v,c,c,m,p,p][g],b:255*[p,p,v,c,c,m][g]}}(e.h,r,o),a=!0,l="hsv"):Hd(e.h)&&Hd(e.s)&&Hd(e.l)&&(r=j9(e.s),i=j9(e.l),t=function(s,u,c){var d,f,p;if(s=va(s,360),u=va(u,100),c=va(c,100),u===0)f=c,p=c,d=c;else{var m=c<.5?c*(1+u):c+u-c*u,v=2*c-m;d=DF(v,m,s+.3333333333333333),f=DF(v,m,s),p=DF(v,m,s-.3333333333333333)}return{r:255*d,g:255*f,b:255*p}}(e.h,r,i),a=!0,l="hsl"),Object.prototype.hasOwnProperty.call(e,"a")&&(n=e.a)),n=Oae(n),{ok:a,format:e.format||l,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:n}}var op="(?:".concat("[-\\+]?\\d*\\.\\d+%?",")|(?:").concat("[-\\+]?\\d+%?",")"),TF="[\\s|\\(]+(".concat(op,")[,|\\s]+(").concat(op,")[,|\\s]+(").concat(op,")\\s*\\)?"),MF="[\\s|\\(]+(".concat(op,")[,|\\s]+(").concat(op,")[,|\\s]+(").concat(op,")[,|\\s]+(").concat(op,")\\s*\\)?"),Pu={CSS_UNIT:new RegExp(op),rgb:new RegExp("rgb"+TF),rgba:new RegExp("rgba"+MF),hsl:new RegExp("hsl"+TF),hsla:new RegExp("hsla"+MF),hsv:new RegExp("hsv"+TF),hsva:new RegExp("hsva"+MF),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function Hd(e){return!!Pu.CSS_UNIT.exec(String(e))}JQ=function(){function e(t,n){var r;if(t===void 0&&(t=""),n===void 0&&(n={}),t instanceof e)return t;typeof t=="number"&&(t=function(i){return{r:i>>16,g:(65280&i)>>8,b:255&i}}(t)),this.originalInput=t;var o=tPe(t);this.originalInput=t,this.r=o.r,this.g=o.g,this.b=o.b,this.a=o.a,this.roundA=Math.round(100*this.a)/100,this.format=(r=n.format)!==null&&r!==void 0?r:o.format,this.gradientType=n.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=o.ok}return e.prototype.isDark=function(){return this.getBrightness()<128},e.prototype.isLight=function(){return!this.isDark()},e.prototype.getBrightness=function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},e.prototype.getLuminance=function(){var t=this.toRgb(),n=t.r/255,r=t.g/255,o=t.b/255;return .2126*(n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4))+.7152*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))+.0722*(o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4))},e.prototype.getAlpha=function(){return this.a},e.prototype.setAlpha=function(t){return this.a=Oae(t),this.roundA=Math.round(100*this.a)/100,this},e.prototype.isMonochrome=function(){return this.toHsl().s===0},e.prototype.toHsv=function(){var t=Mae(this.r,this.g,this.b);return{h:360*t.h,s:t.s,v:t.v,a:this.a}},e.prototype.toHsvString=function(){var t=Mae(this.r,this.g,this.b),n=Math.round(360*t.h),r=Math.round(100*t.s),o=Math.round(100*t.v);return this.a===1?"hsv(".concat(n,", ").concat(r,"%, ").concat(o,"%)"):"hsva(".concat(n,", ").concat(r,"%, ").concat(o,"%, ").concat(this.roundA,")")},e.prototype.toHsl=function(){var t=Tae(this.r,this.g,this.b);return{h:360*t.h,s:t.s,l:t.l,a:this.a}},e.prototype.toHslString=function(){var t=Tae(this.r,this.g,this.b),n=Math.round(360*t.h),r=Math.round(100*t.s),o=Math.round(100*t.l);return this.a===1?"hsl(".concat(n,", ").concat(r,"%, ").concat(o,"%)"):"hsla(".concat(n,", ").concat(r,"%, ").concat(o,"%, ").concat(this.roundA,")")},e.prototype.toHex=function(t){return t===void 0&&(t=!1),Nae(this.r,this.g,this.b,t)},e.prototype.toHexString=function(t){return t===void 0&&(t=!1),"#"+this.toHex(t)},e.prototype.toHex8=function(t){return t===void 0&&(t=!1),function(n,r,o,i,a){var l=[o1(Math.round(n).toString(16)),o1(Math.round(r).toString(16)),o1(Math.round(o).toString(16)),o1(ePe(i))];return a&&l[0].startsWith(l[0].charAt(1))&&l[1].startsWith(l[1].charAt(1))&&l[2].startsWith(l[2].charAt(1))&&l[3].startsWith(l[3].charAt(1))?l[0].charAt(0)+l[1].charAt(0)+l[2].charAt(0)+l[3].charAt(0):l.join("")}(this.r,this.g,this.b,this.a,t)},e.prototype.toHex8String=function(t){return t===void 0&&(t=!1),"#"+this.toHex8(t)},e.prototype.toHexShortString=function(t){return t===void 0&&(t=!1),this.a===1?this.toHexString(t):this.toHex8String(t)},e.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},e.prototype.toRgbString=function(){var t=Math.round(this.r),n=Math.round(this.g),r=Math.round(this.b);return this.a===1?"rgb(".concat(t,", ").concat(n,", ").concat(r,")"):"rgba(".concat(t,", ").concat(n,", ").concat(r,", ").concat(this.roundA,")")},e.prototype.toPercentageRgb=function(){var t=function(n){return"".concat(Math.round(100*va(n,255)),"%")};return{r:t(this.r),g:t(this.g),b:t(this.b),a:this.a}},e.prototype.toPercentageRgbString=function(){var t=function(n){return Math.round(100*va(n,255))};return this.a===1?"rgb(".concat(t(this.r),"%, ").concat(t(this.g),"%, ").concat(t(this.b),"%)"):"rgba(".concat(t(this.r),"%, ").concat(t(this.g),"%, ").concat(t(this.b),"%, ").concat(this.roundA,")")},e.prototype.toName=function(){if(this.a===0)return"transparent";if(this.a<1)return!1;for(var t="#"+Nae(this.r,this.g,this.b,!1),n=0,r=Object.entries(OF);n<r.length;n++){var o=r[n],i=o[0];if(t===o[1])return i}return!1},e.prototype.toString=function(t){var n=!!t;t=t??this.format;var r=!1,o=this.a<1&&this.a>=0;return n||!o||!t.startsWith("hex")&&t!=="name"?(t==="rgb"&&(r=this.toRgbString()),t==="prgb"&&(r=this.toPercentageRgbString()),t!=="hex"&&t!=="hex6"||(r=this.toHexString()),t==="hex3"&&(r=this.toHexString(!0)),t==="hex4"&&(r=this.toHex8String(!0)),t==="hex8"&&(r=this.toHex8String()),t==="name"&&(r=this.toName()),t==="hsl"&&(r=this.toHslString()),t==="hsv"&&(r=this.toHsvString()),r||this.toHexString()):t==="name"&&this.a===0?this.toName():this.toRgbString()},e.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},e.prototype.clone=function(){return new e(this.toString())},e.prototype.lighten=function(t){t===void 0&&(t=10);var n=this.toHsl();return n.l+=t/100,n.l=L9(n.l),new e(n)},e.prototype.brighten=function(t){t===void 0&&(t=10);var n=this.toRgb();return n.r=Math.max(0,Math.min(255,n.r-Math.round(-t/100*255))),n.g=Math.max(0,Math.min(255,n.g-Math.round(-t/100*255))),n.b=Math.max(0,Math.min(255,n.b-Math.round(-t/100*255))),new e(n)},e.prototype.darken=function(t){t===void 0&&(t=10);var n=this.toHsl();return n.l-=t/100,n.l=L9(n.l),new e(n)},e.prototype.tint=function(t){return t===void 0&&(t=10),this.mix("white",t)},e.prototype.shade=function(t){return t===void 0&&(t=10),this.mix("black",t)},e.prototype.desaturate=function(t){t===void 0&&(t=10);var n=this.toHsl();return n.s-=t/100,n.s=L9(n.s),new e(n)},e.prototype.saturate=function(t){t===void 0&&(t=10);var n=this.toHsl();return n.s+=t/100,n.s=L9(n.s),new e(n)},e.prototype.greyscale=function(){return this.desaturate(100)},e.prototype.spin=function(t){var n=this.toHsl(),r=(n.h+t)%360;return n.h=r<0?360+r:r,new e(n)},e.prototype.mix=function(t,n){n===void 0&&(n=50);var r=this.toRgb(),o=new e(t).toRgb(),i=n/100;return new e({r:(o.r-r.r)*i+r.r,g:(o.g-r.g)*i+r.g,b:(o.b-r.b)*i+r.b,a:(o.a-r.a)*i+r.a})},e.prototype.analogous=function(t,n){t===void 0&&(t=6),n===void 0&&(n=30);var r=this.toHsl(),o=360/n,i=[this];for(r.h=(r.h-(o*t>>1)+720)%360;--t;)r.h=(r.h+o)%360,i.push(new e(r));return i},e.prototype.complement=function(){var t=this.toHsl();return t.h=(t.h+180)%360,new e(t)},e.prototype.monochromatic=function(t){t===void 0&&(t=6);for(var n=this.toHsv(),r=n.h,o=n.s,i=n.v,a=[],l=1/t;t--;)a.push(new e({h:r,s:o,v:i})),i=(i+l)%1;return a},e.prototype.splitcomplement=function(){var t=this.toHsl(),n=t.h;return[this,new e({h:(n+72)%360,s:t.s,l:t.l}),new e({h:(n+216)%360,s:t.s,l:t.l})]},e.prototype.onBackground=function(t){var n=this.toRgb(),r=new e(t).toRgb(),o=n.a+r.a*(1-n.a);return new e({r:(n.r*n.a+r.r*r.a*(1-n.a))/o,g:(n.g*n.a+r.g*r.a*(1-n.a))/o,b:(n.b*n.a+r.b*r.a*(1-n.a))/o,a:o})},e.prototype.triad=function(){return this.polyad(3)},e.prototype.tetrad=function(){return this.polyad(4)},e.prototype.polyad=function(t){for(var n=this.toHsl(),r=n.h,o=[this],i=360/t,a=1;a<t;a++)o.push(new e({h:(r+a*i)%360,s:n.s,l:n.l}));return o},e.prototype.equals=function(t){return this.toRgbString()===new e(t).toRgbString()},e}();function ip(e,t=20){return e.mix("#141414",t).toString()}const nPe=Te({name:"ElButton"}),rPe=Te({...nPe,props:P9,emits:Dae,setup(e,{expose:t,emit:n}){const r=e,o=function(m){const v=wl(),g=_t("button");return ee(()=>{let b={};const y=m.color;if(y){const w=new JQ(y),x=m.dark?w.tint(20).toString():ip(w,20);if(m.plain)b=g.cssVarBlock({"bg-color":m.dark?ip(w,90):w.tint(90).toString(),"text-color":y,"border-color":m.dark?ip(w,50):w.tint(50).toString(),"hover-text-color":`var(${g.cssVarName("color-white")})`,"hover-bg-color":y,"hover-border-color":y,"active-bg-color":x,"active-text-color":`var(${g.cssVarName("color-white")})`,"active-border-color":x}),v.value&&(b[g.cssVarBlockName("disabled-bg-color")]=m.dark?ip(w,90):w.tint(90).toString(),b[g.cssVarBlockName("disabled-text-color")]=m.dark?ip(w,50):w.tint(50).toString(),b[g.cssVarBlockName("disabled-border-color")]=m.dark?ip(w,80):w.tint(80).toString());else{const _=m.dark?ip(w,30):w.tint(30).toString(),E=w.isDark()?`var(${g.cssVarName("color-white")})`:`var(${g.cssVarName("color-black")})`;if(b=g.cssVarBlock({"bg-color":y,"text-color":E,"border-color":y,"hover-bg-color":_,"hover-text-color":E,"hover-border-color":_,"active-bg-color":x,"active-border-color":x}),v.value){const C=m.dark?ip(w,50):w.tint(50).toString();b[g.cssVarBlockName("disabled-bg-color")]=C,b[g.cssVarBlockName("disabled-text-color")]=m.dark?"rgba(255, 255, 255, 0.5)":`var(${g.cssVarName("color-white")})`,b[g.cssVarBlockName("disabled-border-color")]=C}}}return b})}(r),i=_t("button"),{_ref:a,_size:l,_type:s,_disabled:u,_props:c,shouldAddSpace:d,handleClick:f}=((m,v)=>{y0({from:"type.text",replacement:"link",version:"3.0.0",scope:"props",ref:"https://element-plus.org/en-US/component/button.html#button-attributes"},ee(()=>m.type==="text"));const g=Rt(kF,void 0),b=G3("button"),{form:y}=qa(),w=$i(ee(()=>g==null?void 0:g.size)),x=wl(),_=de(),E=Ga(),C=ee(()=>m.type||(g==null?void 0:g.type)||""),T=ee(()=>{var O,F,N;return(N=(F=m.autoInsertSpace)!=null?F:(O=b.value)==null?void 0:O.autoInsertSpace)!=null&&N}),k=ee(()=>m.tag==="button"?{ariaDisabled:x.value||m.loading,disabled:x.value||m.loading,autofocus:m.autofocus,type:m.nativeType}:{}),I=ee(()=>{var O;const F=(O=E.default)==null?void 0:O.call(E);if(T.value&&(F==null?void 0:F.length)===1){const N=F[0];if((N==null?void 0:N.type)===Dc){const B=N.children;return new RegExp("^\\p{Unified_Ideograph}{2}$","u").test(B.trim())}}return!1});return{_disabled:x,_size:w,_type:C,_ref:_,_props:k,shouldAddSpace:I,handleClick:O=>{m.nativeType==="reset"&&(y==null||y.resetFields()),v("click",O)}}})(r,n),p=ee(()=>[i.b(),i.m(s.value),i.m(l.value),i.is("disabled",u.value),i.is("loading",r.loading),i.is("plain",r.plain),i.is("round",r.round),i.is("circle",r.circle),i.is("text",r.text),i.is("link",r.link),i.is("has-bg",r.bg)]);return t({ref:a,size:l,type:s,disabled:u,shouldAddSpace:d}),(m,v)=>(Y(),Le(Hn(m.tag),Un({ref_key:"_ref",ref:a},M(c),{class:M(p),style:M(o),onClick:M(f)}),{default:he(()=>[m.loading?(Y(),fe(bt,{key:0},[m.$slots.loading?ft(m.$slots,"loading",{key:0}):(Y(),Le(M(Ft),{key:1,class:oe(M(i).is("loading"))},{default:he(()=>[(Y(),Le(Hn(m.loadingIcon)))]),_:1},8,["class"]))],64)):m.icon||m.$slots.icon?(Y(),Le(M(Ft),{key:1},{default:he(()=>[m.icon?(Y(),Le(Hn(m.icon),{key:0})):ft(m.$slots,"icon",{key:1})]),_:3})):Fe("v-if",!0),m.$slots.default?(Y(),fe("span",{key:2,class:oe({[M(i).em("text","expand")]:M(d)})},[ft(m.$slots,"default")],2)):Fe("v-if",!0)]),_:3},16,["class","style","onClick"]))}});var oPe=Nt(rPe,[["__file","button.vue"]]);const iPe={size:P9.size,type:P9.type},aPe=Te({name:"ElButtonGroup"}),lPe=Te({...aPe,props:iPe,setup(e){const t=e;qn(kF,Qn({size:dr(t,"size"),type:dr(t,"type")}));const n=_t("button");return(r,o)=>(Y(),fe("div",{class:oe(`${M(n).b("group")}`)},[ft(r.$slots,"default")],2))}});var Rae=Nt(lPe,[["__file","button-group.vue"]]);Sa=Cr(oPe,{ButtonGroup:Rae}),LOe=Ya(Rae);var Iae={exports:{}};Iae.exports=function(){var e=1e3,t=6e4,n=36e5,r="millisecond",o="second",i="minute",a="hour",l="day",s="week",u="month",c="quarter",d="year",f="date",p="Invalid Date",m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,v=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,g={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(F){var N=["th","st","nd","rd"],B=F%100;return"["+F+(N[(B-20)%10]||N[B]||N[0])+"]"}},b=function(F,N,B){var P=String(F);return!P||P.length>=N?F:""+Array(N+1-P.length).join(B)+F},y={s:b,z:function(F){var N=-F.utcOffset(),B=Math.abs(N),P=Math.floor(B/60),V=B%60;return(N<=0?"+":"-")+b(P,2,"0")+":"+b(V,2,"0")},m:function F(N,B){if(N.date()<B.date())return-F(B,N);var P=12*(B.year()-N.year())+(B.month()-N.month()),V=N.clone().add(P,u),L=B-V<0,H=N.clone().add(P+(L?-1:1),u);return+(-(P+(B-V)/(L?V-H:H-V))||0)},a:function(F){return F<0?Math.ceil(F)||0:Math.floor(F)},p:function(F){return{M:u,y:d,w:s,d:l,D:f,h:a,m:i,s:o,ms:r,Q:c}[F]||String(F||"").toLowerCase().replace(/s$/,"")},u:function(F){return F===void 0}},w="en",x={};x[w]=g;var _="$isDayjsObject",E=function(F){return F instanceof I||!(!F||!F[_])},C=function F(N,B,P){var V;if(!N)return w;if(typeof N=="string"){var L=N.toLowerCase();x[L]&&(V=L),B&&(x[L]=B,V=L);var H=N.split("-");if(!V&&H.length>1)return F(H[0])}else{var U=N.name;x[U]=N,V=U}return!P&&V&&(w=V),V||!P&&w},T=function(F,N){if(E(F))return F.clone();var B=typeof N=="object"?N:{};return B.date=F,B.args=arguments,new I(B)},k=y;k.l=C,k.i=E,k.w=function(F,N){return T(F,{locale:N.$L,utc:N.$u,x:N.$x,$offset:N.$offset})};var I=function(){function F(B){this.$L=C(B.locale,null,!0),this.parse(B),this.$x=this.$x||B.x||{},this[_]=!0}var N=F.prototype;return N.parse=function(B){this.$d=function(P){var V=P.date,L=P.utc;if(V===null)return new Date(NaN);if(k.u(V))return new Date;if(V instanceof Date)return new Date(V);if(typeof V=="string"&&!/Z$/i.test(V)){var H=V.match(m);if(H){var U=H[2]-1||0,G=(H[7]||"0").substring(0,3);return L?new Date(Date.UTC(H[1],U,H[3]||1,H[4]||0,H[5]||0,H[6]||0,G)):new Date(H[1],U,H[3]||1,H[4]||0,H[5]||0,H[6]||0,G)}}return new Date(V)}(B),this.init()},N.init=function(){var B=this.$d;this.$y=B.getFullYear(),this.$M=B.getMonth(),this.$D=B.getDate(),this.$W=B.getDay(),this.$H=B.getHours(),this.$m=B.getMinutes(),this.$s=B.getSeconds(),this.$ms=B.getMilliseconds()},N.$utils=function(){return k},N.isValid=function(){return this.$d.toString()!==p},N.isSame=function(B,P){var V=T(B);return this.startOf(P)<=V&&V<=this.endOf(P)},N.isAfter=function(B,P){return T(B)<this.startOf(P)},N.isBefore=function(B,P){return this.endOf(P)<T(B)},N.$g=function(B,P,V){return k.u(B)?this[P]:this.set(V,B)},N.unix=function(){return Math.floor(this.valueOf()/1e3)},N.valueOf=function(){return this.$d.getTime()},N.startOf=function(B,P){var V=this,L=!!k.u(P)||P,H=k.p(B),U=function(ne,se){var le=k.w(V.$u?Date.UTC(V.$y,se,ne):new Date(V.$y,se,ne),V);return L?le:le.endOf(l)},G=function(ne,se){return k.w(V.toDate()[ne].apply(V.toDate("s"),(L?[0,0,0,0]:[23,59,59,999]).slice(se)),V)},z=this.$W,$=this.$M,W=this.$D,K="set"+(this.$u?"UTC":"");switch(H){case d:return L?U(1,0):U(31,11);case u:return L?U(1,$):U(0,$+1);case s:var X=this.$locale().weekStart||0,te=(z<X?z+7:z)-X;return U(L?W-te:W+(6-te),$);case l:case f:return G(K+"Hours",0);case a:return G(K+"Minutes",1);case i:return G(K+"Seconds",2);case o:return G(K+"Milliseconds",3);default:return this.clone()}},N.endOf=function(B){return this.startOf(B,!1)},N.$set=function(B,P){var V,L=k.p(B),H="set"+(this.$u?"UTC":""),U=(V={},V[l]=H+"Date",V[f]=H+"Date",V[u]=H+"Month",V[d]=H+"FullYear",V[a]=H+"Hours",V[i]=H+"Minutes",V[o]=H+"Seconds",V[r]=H+"Milliseconds",V)[L],G=L===l?this.$D+(P-this.$W):P;if(L===u||L===d){var z=this.clone().set(f,1);z.$d[U](G),z.init(),this.$d=z.set(f,Math.min(this.$D,z.daysInMonth())).$d}else U&&this.$d[U](G);return this.init(),this},N.set=function(B,P){return this.clone().$set(B,P)},N.get=function(B){return this[k.p(B)]()},N.add=function(B,P){var V,L=this;B=Number(B);var H=k.p(P),U=function($){var W=T(L);return k.w(W.date(W.date()+Math.round($*B)),L)};if(H===u)return this.set(u,this.$M+B);if(H===d)return this.set(d,this.$y+B);if(H===l)return U(1);if(H===s)return U(7);var G=(V={},V[i]=t,V[a]=n,V[o]=e,V)[H]||1,z=this.$d.getTime()+B*G;return k.w(z,this)},N.subtract=function(B,P){return this.add(-1*B,P)},N.format=function(B){var P=this,V=this.$locale();if(!this.isValid())return V.invalidDate||p;var L=B||"YYYY-MM-DDTHH:mm:ssZ",H=k.z(this),U=this.$H,G=this.$m,z=this.$M,$=V.weekdays,W=V.months,K=V.meridiem,X=function(se,le,J,Z){return se&&(se[le]||se(P,L))||J[le].slice(0,Z)},te=function(se){return k.s(U%12||12,se,"0")},ne=K||function(se,le,J){var Z=se<12?"AM":"PM";return J?Z.toLowerCase():Z};return L.replace(v,function(se,le){return le||function(J){switch(J){case"YY":return String(P.$y).slice(-2);case"YYYY":return k.s(P.$y,4,"0");case"M":return z+1;case"MM":return k.s(z+1,2,"0");case"MMM":return X(V.monthsShort,z,W,3);case"MMMM":return X(W,z);case"D":return P.$D;case"DD":return k.s(P.$D,2,"0");case"d":return String(P.$W);case"dd":return X(V.weekdaysMin,P.$W,$,2);case"ddd":return X(V.weekdaysShort,P.$W,$,3);case"dddd":return $[P.$W];case"H":return String(U);case"HH":return k.s(U,2,"0");case"h":return te(1);case"hh":return te(2);case"a":return ne(U,G,!0);case"A":return ne(U,G,!1);case"m":return String(G);case"mm":return k.s(G,2,"0");case"s":return String(P.$s);case"ss":return k.s(P.$s,2,"0");case"SSS":return k.s(P.$ms,3,"0");case"Z":return H}return null}(se)||H.replace(":","")})},N.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},N.diff=function(B,P,V){var L,H=this,U=k.p(P),G=T(B),z=(G.utcOffset()-this.utcOffset())*t,$=this-G,W=function(){return k.m(H,G)};switch(U){case d:L=W()/12;break;case u:L=W();break;case c:L=W()/3;break;case s:L=($-z)/6048e5;break;case l:L=($-z)/864e5;break;case a:L=$/n;break;case i:L=$/t;break;case o:L=$/e;break;default:L=$}return V?L:k.a(L)},N.daysInMonth=function(){return this.endOf(u).$D},N.$locale=function(){return x[this.$L]},N.locale=function(B,P){if(!B)return this.$L;var V=this.clone(),L=C(B,P,!0);return L&&(V.$L=L),V},N.clone=function(){return k.w(this.$d,this)},N.toDate=function(){return new Date(this.valueOf())},N.toJSON=function(){return this.isValid()?this.toISOString():null},N.toISOString=function(){return this.$d.toISOString()},N.toString=function(){return this.$d.toUTCString()},F}(),O=I.prototype;return T.prototype=O,[["$ms",r],["$s",o],["$m",i],["$H",a],["$W",l],["$M",u],["$y",d],["$D",f]].forEach(function(F){O[F[1]]=function(N){return this.$g(N,F[0],F[1])}}),T.extend=function(F,N){return F.$i||(F(N,I,T),F.$i=!0),T},T.locale=C,T.isDayjs=E,T.unix=function(F){return T(1e3*F)},T.en=x[w],T.Ls=x,T.p={},T}(),vn=_l(Iae.exports);var Bae={exports:{}};Bae.exports=function(){var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d/,r=/\d\d/,o=/\d\d?/,i=/\d*[^-_:/,()\s\d]+/,a={},l=function(m){return(m=+m)+(m>68?1900:2e3)},s=function(m){return function(v){this[m]=+v}},u=[/[+-]\d\d:?(\d\d)?|Z/,function(m){(this.zone||(this.zone={})).offset=function(v){if(!v||v==="Z")return 0;var g=v.match(/([+-]|\d\d)/g),b=60*g[1]+(+g[2]||0);return b===0?0:g[0]==="+"?-b:b}(m)}],c=function(m){var v=a[m];return v&&(v.indexOf?v:v.s.concat(v.f))},d=function(m,v){var g,b=a.meridiem;if(b){for(var y=1;y<=24;y+=1)if(m.indexOf(b(y,0,v))>-1){g=y>12;break}}else g=m===(v?"pm":"PM");return g},f={A:[i,function(m){this.afternoon=d(m,!1)}],a:[i,function(m){this.afternoon=d(m,!0)}],Q:[n,function(m){this.month=3*(m-1)+1}],S:[n,function(m){this.milliseconds=100*+m}],SS:[r,function(m){this.milliseconds=10*+m}],SSS:[/\d{3}/,function(m){this.milliseconds=+m}],s:[o,s("seconds")],ss:[o,s("seconds")],m:[o,s("minutes")],mm:[o,s("minutes")],H:[o,s("hours")],h:[o,s("hours")],HH:[o,s("hours")],hh:[o,s("hours")],D:[o,s("day")],DD:[r,s("day")],Do:[i,function(m){var v=a.ordinal,g=m.match(/\d+/);if(this.day=g[0],v)for(var b=1;b<=31;b+=1)v(b).replace(/\[|\]/g,"")===m&&(this.day=b)}],w:[o,s("week")],ww:[r,s("week")],M:[o,s("month")],MM:[r,s("month")],MMM:[i,function(m){var v=c("months"),g=(c("monthsShort")||v.map(function(b){return b.slice(0,3)})).indexOf(m)+1;if(g<1)throw new Error;this.month=g%12||g}],MMMM:[i,function(m){var v=c("months").indexOf(m)+1;if(v<1)throw new Error;this.month=v%12||v}],Y:[/[+-]?\d+/,s("year")],YY:[r,function(m){this.year=l(m)}],YYYY:[/\d{4}/,s("year")],Z:u,ZZ:u};function p(m){var v,g;v=m,g=a&&a.formats;for(var b=(m=v.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(T,k,I){var O=I&&I.toUpperCase();return k||g[I]||e[I]||g[O].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(F,N,B){return N||B.slice(1)})})).match(t),y=b.length,w=0;w<y;w+=1){var x=b[w],_=f[x],E=_&&_[0],C=_&&_[1];b[w]=C?{regex:E,parser:C}:x.replace(/^\[|\]$/g,"")}return function(T){for(var k={},I=0,O=0;I<y;I+=1){var F=b[I];if(typeof F=="string")O+=F.length;else{var N=F.regex,B=F.parser,P=T.slice(O),V=N.exec(P)[0];B.call(k,V),T=T.replace(V,"")}}return function(L){var H=L.afternoon;if(H!==void 0){var U=L.hours;H?U<12&&(L.hours+=12):U===12&&(L.hours=0),delete L.afternoon}}(k),k}}return function(m,v,g){g.p.customParseFormat=!0,m&&m.parseTwoDigitYear&&(l=m.parseTwoDigitYear);var b=v.prototype,y=b.parse;b.parse=function(w){var x=w.date,_=w.utc,E=w.args;this.$u=_;var C=E[1];if(typeof C=="string"){var T=E[2]===!0,k=E[3]===!0,I=T||k,O=E[2];k&&(O=E[2]),a=this.$locale(),!T&&O&&(a=g.Ls[O]),this.$d=function(P,V,L,H){try{if(["x","X"].indexOf(V)>-1)return new Date((V==="X"?1e3:1)*P);var U=p(V)(P),G=U.year,z=U.month,$=U.day,W=U.hours,K=U.minutes,X=U.seconds,te=U.milliseconds,ne=U.zone,se=U.week,le=new Date,J=$||(G||z?1:le.getDate()),Z=G||le.getFullYear(),ye=0;G&&!z||(ye=z>0?z-1:le.getMonth());var be,ve=W||0,Ae=K||0,Ce=X||0,_e=te||0;return ne?new Date(Date.UTC(Z,ye,J,ve,Ae,Ce,_e+60*ne.offset*1e3)):L?new Date(Date.UTC(Z,ye,J,ve,Ae,Ce,_e)):(be=new Date(Z,ye,J,ve,Ae,Ce,_e),se&&(be=H(be).week(se).toDate()),be)}catch{return new Date("")}}(x,C,_,g),this.init(),O&&O!==!0&&(this.$L=this.locale(O).$L),I&&x!=this.format(C)&&(this.$d=new Date("")),a={}}else if(C instanceof Array)for(var F=C.length,N=1;N<=F;N+=1){E[1]=C[N-1];var B=g.apply(this,E);if(B.isValid()){this.$d=B.$d,this.$L=B.$L,this.init();break}N===F&&(this.$d=new Date(""))}else y.call(this,w)}}}();let NF,V9,i1,Pae,z9,FF,RF,IF,BF,PF,LF,jF,H9,VF,zF,$9,Lae,jae,Vae,zae;MO=_l(Bae.exports),NF=["hours","minutes","seconds"],V9="HH:mm:ss",i1="YYYY-MM-DD",Pae={date:i1,dates:i1,week:"gggg[w]ww",year:"YYYY",years:"YYYY",month:"YYYY-MM",datetime:`${i1} ${V9}`,monthrange:"YYYY-MM",daterange:i1,datetimerange:`${i1} ${V9}`},z9=(e,t)=>[e>0?e-1:void 0,e,e<t?e+1:void 0],FF=e=>Array.from(Array.from({length:e}).keys()),RF=e=>e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim(),IF=e=>e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g,"").trim(),BF=function(e,t){const n=qb(e),r=qb(t);return n&&r?e.getTime()===t.getTime():!n&&!r&&e===t},PF=function(e,t){const n=mt(e),r=mt(t);return n&&r?e.length===t.length&&e.every((o,i)=>BF(o,t[i])):!n&&!r&&BF(e,t)},LF=function(e,t,n){const r=cs(t)||t==="x"?vn(e).locale(n):vn(e,t).locale(n);return r.isValid()?r:void 0},jF=function(e,t,n){return cs(t)?e:t==="x"?+e:vn(e).locale(n).format(t)},H9=(e,t)=>{var n;const r=[],o=t==null?void 0:t();for(let i=0;i<e;i++)r.push((n=o==null?void 0:o.includes(i))!=null&&n);return r},VF=Pt({disabledHours:{type:Function},disabledMinutes:{type:Function},disabledSeconds:{type:Function}}),zF=Pt({visible:Boolean,actualVisible:{type:Boolean,default:void 0},format:{type:String,default:""}}),$9=Pt({id:{type:[Array,String]},name:{type:[Array,String],default:""},popperClass:{type:String,default:""},format:String,valueFormat:String,dateFormat:String,timeFormat:String,type:{type:String,default:""},clearable:{type:Boolean,default:!0},clearIcon:{type:[String,Object],default:h0},editable:{type:Boolean,default:!0},prefixIcon:{type:[String,Object],default:""},size:da,readonly:Boolean,disabled:Boolean,placeholder:{type:String,default:""},popperOptions:{type:Object,default:()=>({})},modelValue:{type:[Date,Array,String,Number],default:""},rangeSeparator:{type:String,default:"-"},startPlaceholder:String,endPlaceholder:String,defaultValue:{type:[Date,Array]},defaultTime:{type:[Date,Array]},isRange:Boolean,...VF,disabledDate:{type:Function},cellClassName:{type:Function},shortcuts:{type:Array,default:()=>[]},arrowControl:Boolean,label:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},validateEvent:{type:Boolean,default:!0},unlinkPanels:Boolean,...Fb}),Lae=["id","name","placeholder","value","disabled","readonly"],jae=["id","name","placeholder","value","disabled","readonly"],Vae=Te({name:"Picker"}),zae=Te({...Vae,props:$9,emits:["update:modelValue","change","focus","blur","calendar-change","panel-change","visible-change","keydown"],setup(e,{expose:t,emit:n}){const r=e,o=yc(),{lang:i}=Gr(),a=_t("date"),l=_t("input"),s=_t("range"),{form:u,formItem:c}=qa(),d=Rt("ElPopperOptions",{}),{valueOnClear:f}=jw(r,null),p=de(),m=de(),v=de(!1),g=de(!1),b=de(null);let y=!1,w=!1;const x=ee(()=>[a.b("editor"),a.bm("editor",r.type),l.e("wrapper"),a.is("disabled",U.value),a.is("active",v.value),s.b("editor"),Ae?s.bm("editor",Ae.value):"",o.class]),_=ee(()=>[l.e("icon"),s.e("close-icon"),ne.value?"":s.e("close-icon--hidden")]);Je(v,me=>{me?St(()=>{me&&(b.value=r.modelValue)}):(ke.value=null,St(()=>{E(r.modelValue)}))});const E=(me,Me)=>{!Me&&PF(me,b.value)||(n("change",me),r.validateEvent&&(c==null||c.validate("change").catch(Ie=>{})))},C=me=>{if(!PF(r.modelValue,me)){let Me;mt(me)?Me=me.map(Ie=>jF(Ie,r.valueFormat,i.value)):me&&(Me=jF(me,r.valueFormat,i.value)),n("update:modelValue",me&&Me,i.value)}},T=ee(()=>{if(m.value){const me=ve.value?m.value:m.value.$el;return Array.from(me.querySelectorAll("input"))}return[]}),k=(me,Me,Ie)=>{const ht=T.value;ht.length&&(Ie&&Ie!=="min"?Ie==="max"&&(ht[1].setSelectionRange(me,Me),ht[1].focus()):(ht[0].setSelectionRange(me,Me),ht[0].focus()))},I=(me="",Me=!1)=>{let Ie;Me||(w=!0),v.value=Me,Ie=mt(me)?me.map(ht=>ht.toDate()):me&&me.toDate(),ke.value=null,C(Ie)},O=()=>{g.value=!0},F=()=>{n("visible-change",!0)},N=me=>{(me==null?void 0:me.key)===Xt.esc&&P(!0,!0)},B=()=>{g.value=!1,v.value=!1,w=!1,n("visible-change",!1)},P=(me=!0,Me=!1)=>{w=Me;const[Ie,ht]=M(T);let gt=Ie;!me&&ve.value&&(gt=ht),gt&>.focus()},V=me=>{r.readonly||U.value||v.value||w||(v.value=!0,n("focus",me))};let L;const H=me=>{const Me=async()=>{setTimeout(()=>{var Ie;L===Me&&((Ie=p.value)!=null&&Ie.isFocusInsideContent()&&!y||T.value.filter(ht=>ht.contains(document.activeElement)).length!==0||(Be(),v.value=!1,n("blur",me),r.validateEvent&&(c==null||c.validate("blur").catch(ht=>{}))),y=!1)},0)};L=Me,Me()},U=ee(()=>r.disabled||(u==null?void 0:u.disabled)),G=ee(()=>{let me;if(le.value?ot.value.getDefaultValue&&(me=ot.value.getDefaultValue()):me=mt(r.modelValue)?r.modelValue.map(Me=>LF(Me,r.valueFormat,i.value)):LF(r.modelValue,r.valueFormat,i.value),ot.value.getRangeAvailableTime){const Me=ot.value.getRangeAvailableTime(me);ns(Me,me)||(me=Me,C(mt(me)?me.map(Ie=>Ie.toDate()):me.toDate()))}return mt(me)&&me.some(Me=>!Me)&&(me=[]),me}),z=ee(()=>{if(!ot.value.panelReady)return"";const me=rt(G.value);return mt(ke.value)?[ke.value[0]||me&&me[0]||"",ke.value[1]||me&&me[1]||""]:ke.value!==null?ke.value:!W.value&&le.value||!v.value&&le.value?"":me?K.value||X.value?me.join(", "):me:""}),$=ee(()=>r.type.includes("time")),W=ee(()=>r.type.startsWith("time")),K=ee(()=>r.type==="dates"),X=ee(()=>r.type==="years"),te=ee(()=>r.prefixIcon||($.value?qQ:Toe)),ne=de(!1),se=me=>{r.readonly||U.value||ne.value&&(me.stopPropagation(),P(!0,!0),St(()=>{w=!1}),C(f.value),E(f.value,!0),ne.value=!1,v.value=!1,ot.value.handleClear&&ot.value.handleClear())},le=ee(()=>{const{modelValue:me}=r;return!me||mt(me)&&!me.filter(Boolean).length}),J=async me=>{var Me;r.readonly||U.value||(((Me=me.target)==null?void 0:Me.tagName)!=="INPUT"||T.value.includes(document.activeElement))&&(v.value=!0)},Z=()=>{r.readonly||U.value||!le.value&&r.clearable&&(ne.value=!0)},ye=()=>{ne.value=!1},be=me=>{var Me;r.readonly||U.value||(((Me=me.touches[0].target)==null?void 0:Me.tagName)!=="INPUT"||T.value.includes(document.activeElement))&&(v.value=!0)},ve=ee(()=>r.type.includes("range")),Ae=$i(),Ce=ee(()=>{var me,Me;return(Me=(me=M(p))==null?void 0:me.popperRef)==null?void 0:Me.contentRef}),_e=ee(()=>{var me;return M(ve)?M(m):(me=M(m))==null?void 0:me.$el});lN(_e,me=>{const Me=M(Ce),Ie=M(_e);Me&&(me.target===Me||me.composedPath().includes(Me))||me.target===Ie||me.composedPath().includes(Ie)||(v.value=!1)});const ke=de(null),Be=()=>{if(ke.value){const me=$e(z.value);me&&ge(me)&&(C(mt(me)?me.map(Me=>Me.toDate()):me.toDate()),ke.value=null)}ke.value===""&&(C(f.value),E(f.value),ke.value=null)},$e=me=>me?ot.value.parseUserInput(me):null,rt=me=>me?ot.value.formatToString(me):null,ge=me=>ot.value.isValidValue(me),We=async me=>{if(r.readonly||U.value)return;const{code:Me}=me;if((Ie=>{n("keydown",Ie)})(me),Me!==Xt.esc)if(Me===Xt.down&&(ot.value.handleFocusPicker&&(me.preventDefault(),me.stopPropagation()),v.value===!1&&(v.value=!0,await St()),ot.value.handleFocusPicker))ot.value.handleFocusPicker();else{if(Me!==Xt.tab)return Me===Xt.enter||Me===Xt.numpadEnter?((ke.value===null||ke.value===""||ge($e(z.value)))&&(Be(),v.value=!1),void me.stopPropagation()):void(ke.value?me.stopPropagation():ot.value.handleKeydownInput&&ot.value.handleKeydownInput(me));y=!0}else v.value===!0&&(v.value=!1,me.preventDefault(),me.stopPropagation())},st=me=>{ke.value=me,v.value||(v.value=!0)},At=me=>{const Me=me.target;ke.value?ke.value=[Me.value,ke.value[1]]:ke.value=[Me.value,null]},Ve=me=>{const Me=me.target;ke.value?ke.value=[ke.value[0],Me.value]:ke.value=[null,Me.value]},it=()=>{var me;const Me=ke.value,Ie=$e(Me&&Me[0]),ht=M(G);if(Ie&&Ie.isValid()){ke.value=[rt(Ie),((me=z.value)==null?void 0:me[1])||null];const gt=[Ie,ht&&(ht[1]||null)];ge(gt)&&(C(gt),ke.value=null)}},dt=()=>{var me;const Me=M(ke),Ie=$e(Me&&Me[1]),ht=M(G);if(Ie&&Ie.isValid()){ke.value=[((me=M(z))==null?void 0:me[0])||null,rt(Ie)];const gt=[ht&&ht[0],Ie];ge(gt)&&(C(gt),ke.value=null)}},ot=de({}),je=me=>{ot.value[me[0]]=me[1],ot.value.panelReady=!0},we=me=>{n("calendar-change",me)},ze=(me,Me,Ie)=>{n("panel-change",me,Me,Ie)};return qn("EP_PICKER_BASE",{props:r}),t({focus:P,handleFocusInput:V,handleBlurInput:H,handleOpen:()=>{v.value=!0},handleClose:()=>{v.value=!1},onPick:I}),(me,Me)=>(Y(),Le(M(Al),Un({ref_key:"refPopper",ref:p,visible:v.value,effect:"light",pure:"",trigger:"click"},me.$attrs,{role:"dialog",teleported:"",transition:`${M(a).namespace.value}-zoom-in-top`,"popper-class":[`${M(a).namespace.value}-picker__popper`,me.popperClass],"popper-options":M(d),"fallback-placements":["bottom","top","right","left"],"gpu-acceleration":!1,"stop-popper-mouse-event":!1,"hide-after":0,persistent:"",onBeforeShow:O,onShow:F,onHide:B}),{default:he(()=>[M(ve)?(Y(),fe("div",{key:1,ref_key:"inputRef",ref:m,class:oe(M(x)),style:$t(me.$attrs.style),onClick:V,onMouseenter:Z,onMouseleave:ye,onTouchstart:be,onKeydown:We},[M(te)?(Y(),Le(M(Ft),{key:0,class:oe([M(l).e("icon"),M(s).e("icon")]),onMousedown:Gt(J,["prevent"]),onTouchstart:be},{default:he(()=>[(Y(),Le(Hn(M(te))))]),_:1},8,["class","onMousedown"])):Fe("v-if",!0),ce("input",{id:me.id&&me.id[0],autocomplete:"off",name:me.name&&me.name[0],placeholder:me.startPlaceholder,value:M(z)&&M(z)[0],disabled:M(U),readonly:!me.editable||me.readonly,class:oe(M(s).b("input")),onMousedown:J,onInput:At,onChange:it,onFocus:V,onBlur:H},null,42,Lae),ft(me.$slots,"range-separator",{},()=>[ce("span",{class:oe(M(s).b("separator"))},Ye(me.rangeSeparator),3)]),ce("input",{id:me.id&&me.id[1],autocomplete:"off",name:me.name&&me.name[1],placeholder:me.endPlaceholder,value:M(z)&&M(z)[1],disabled:M(U),readonly:!me.editable||me.readonly,class:oe(M(s).b("input")),onMousedown:J,onFocus:V,onBlur:H,onInput:Ve,onChange:dt},null,42,jae),me.clearIcon?(Y(),Le(M(Ft),{key:1,class:oe(M(_)),onClick:se},{default:he(()=>[(Y(),Le(Hn(me.clearIcon)))]),_:1},8,["class"])):Fe("v-if",!0)],38)):(Y(),Le(M(ua),{key:0,id:me.id,ref_key:"inputRef",ref:m,"container-role":"combobox","model-value":M(z),name:me.name,size:M(Ae),disabled:M(U),placeholder:me.placeholder,class:oe([M(a).b("editor"),M(a).bm("editor",me.type),me.$attrs.class]),style:$t(me.$attrs.style),readonly:!me.editable||me.readonly||M(K)||M(X)||me.type==="week",label:me.label,tabindex:me.tabindex,"validate-event":!1,onInput:st,onFocus:V,onBlur:H,onKeydown:We,onChange:Be,onMousedown:J,onMouseenter:Z,onMouseleave:ye,onTouchstart:be,onClick:Me[0]||(Me[0]=Gt(()=>{},["stop"]))},{prefix:he(()=>[M(te)?(Y(),Le(M(Ft),{key:0,class:oe(M(l).e("icon")),onMousedown:Gt(J,["prevent"]),onTouchstart:be},{default:he(()=>[(Y(),Le(Hn(M(te))))]),_:1},8,["class","onMousedown"])):Fe("v-if",!0)]),suffix:he(()=>[ne.value&&me.clearIcon?(Y(),Le(M(Ft),{key:0,class:oe(`${M(l).e("icon")} clear-icon`),onClick:Gt(se,["stop"])},{default:he(()=>[(Y(),Le(Hn(me.clearIcon)))]),_:1},8,["class","onClick"])):Fe("v-if",!0)]),_:1},8,["id","model-value","name","size","disabled","placeholder","class","style","readonly","label","tabindex","onKeydown"]))]),content:he(()=>[ft(me.$slots,"default",{visible:v.value,actualVisible:g.value,parsedValue:M(G),format:me.format,dateFormat:me.dateFormat,timeFormat:me.timeFormat,unlinkPanels:me.unlinkPanels,type:me.type,defaultValue:me.defaultValue,onPick:I,onSelectRange:k,onSetPickerOption:je,onCalendarChange:we,onPanelChange:ze,onKeydown:N,onMousedown:Me[1]||(Me[1]=Gt(()=>{},["stop"]))})]),_:3},16,["visible","transition","popper-class","popper-options"]))}});var Hae=Nt(zae,[["__file","picker.vue"]]);const sPe=Pt({...zF,datetimeRole:String,parsedValue:{type:Object}}),$ae=({getAvailableHours:e,getAvailableMinutes:t,getAvailableSeconds:n})=>{const r={};return{timePickerOptions:r,getAvailableTime:(o,i,a,l)=>{const s={hour:e,minute:t,second:n};let u=o;return["hour","minute","second"].forEach(c=>{if(s[c]){let d;const f=s[c];switch(c){case"minute":d=f(u.hour(),i,l);break;case"second":d=f(u.hour(),u.minute(),i,l);break;default:d=f(i,l)}if(d!=null&&d.length&&!d.includes(u[c]())){const p=a?0:d.length-1;u=u[c](d[p])}}}),u},onSetOption:([o,i])=>{r[o]=i}}},HF=e=>e.map((t,n)=>t||n).filter(t=>t!==!0),Uae=(e,t,n)=>({getHoursList:(r,o)=>H9(24,e&&(()=>e==null?void 0:e(r,o))),getMinutesList:(r,o,i)=>H9(60,t&&(()=>t==null?void 0:t(r,o,i))),getSecondsList:(r,o,i,a)=>H9(60,n&&(()=>n==null?void 0:n(r,o,i,a)))}),Wae=(e,t,n)=>{const{getHoursList:r,getMinutesList:o,getSecondsList:i}=Uae(e,t,n);return{getAvailableHours:(a,l)=>HF(r(a,l)),getAvailableMinutes:(a,l,s)=>HF(o(a,l,s)),getAvailableSeconds:(a,l,s,u)=>HF(i(a,l,s,u))}},Gae=e=>{const t=de(e.parsedValue);return Je(()=>e.visible,n=>{n||(t.value=e.parsedValue)}),t},ap=new Map;let qae;function Kae(e,t){let n=[];return Array.isArray(t.arg)?n=t.arg:$s(t.arg)&&n.push(t.arg),function(r,o){const i=t.instance.popperRef,a=r.target,l=o==null?void 0:o.target,s=!t||!t.instance,u=!a||!l,c=e.contains(a)||e.contains(l),d=e===a,f=n.length&&n.some(m=>m==null?void 0:m.contains(a))||n.length&&n.includes(l),p=i&&(i.contains(a)||i.contains(l));s||u||c||d||f||p||t.value(r,o)}}rr&&(document.addEventListener("mousedown",e=>qae=e),document.addEventListener("mouseup",e=>{for(const t of ap.values())for(const{documentHandler:n}of t)n(e,qae)}));let Yae,Xae,Z3,U9,lp,$F,Qae;Rf={beforeMount(e,t){ap.has(e)||ap.set(e,[]),ap.get(e).push({documentHandler:Kae(e,t),bindingFn:t.value})},updated(e,t){ap.has(e)||ap.set(e,[]);const n=ap.get(e),r=n.findIndex(i=>i.bindingFn===t.oldValue),o={documentHandler:Kae(e,t),bindingFn:t.value};r>=0?n.splice(r,1,o):n.push(o)},unmounted(e){ap.delete(e)}},Yae=100,Xae=600,Z3={beforeMount(e,t){const n=t.value,{interval:r=Yae,delay:o=Xae}=Ut(n)?{}:n;let i,a;const l=()=>Ut(n)?n():n.handler(),s=()=>{a&&(clearTimeout(a),a=void 0),i&&(clearInterval(i),i=void 0)};e.addEventListener("mousedown",u=>{u.button===0&&(s(),l(),document.addEventListener("mouseup",()=>s(),{once:!0}),a=setTimeout(()=>{i=setInterval(()=>{l()},r)},o))})}},U9="_trap-focus-children",lp=[],$F=e=>{if(lp.length===0)return;const t=lp[lp.length-1][U9];if(t.length>0&&e.code===Xt.tab){if(t.length===1)return e.preventDefault(),void(document.activeElement!==t[0]&&t[0].focus());const n=e.shiftKey,r=e.target===t[0],o=e.target===t[t.length-1];r&&n&&(e.preventDefault(),t[t.length-1].focus()),o&&!n&&(e.preventDefault(),t[0].focus())}},Qae={beforeMount(e){e[U9]=oN(e),lp.push(e),lp.length<=1&&document.addEventListener("keydown",$F)},updated(e){St(()=>{e[U9]=oN(e)})},unmounted(){lp.shift(),lp.length===0&&document.removeEventListener("keydown",$F)}};var cg,UF,WF,GF,W9,Jae,G9,qF,KF,YF,Zae,XF,QF,ele,tle,nle=!1;function Nl(){if(!nle){nle=!0;var e=navigator.userAgent,t=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e),n=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(XF=/\b(iPhone|iP[ao]d)/.exec(e),QF=/\b(iP[ao]d)/.exec(e),YF=/Android/i.exec(e),ele=/FBAN\/\w+;/i.exec(e),tle=/Mobile/i.exec(e),Zae=!!/Win64/.exec(e),t){(cg=t[1]?parseFloat(t[1]):t[5]?parseFloat(t[5]):NaN)&&document&&document.documentMode&&(cg=document.documentMode);var r=/(?:Trident\/(\d+.\d+))/.exec(e);Jae=r?parseFloat(r[1])+4:cg,UF=t[2]?parseFloat(t[2]):NaN,WF=t[3]?parseFloat(t[3]):NaN,(GF=t[4]?parseFloat(t[4]):NaN)?(t=/(?:Chrome\/(\d+\.\d+))/.exec(e),W9=t&&t[1]?parseFloat(t[1]):NaN):W9=NaN}else cg=UF=WF=W9=GF=NaN;if(n){if(n[1]){var o=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);G9=!o||parseFloat(o[1].replace("_","."))}else G9=!1;qF=!!n[2],KF=!!n[3]}else G9=qF=KF=!1}}var rle,JF={ie:function(){return Nl()||cg},ieCompatibilityMode:function(){return Nl()||Jae>cg},ie64:function(){return JF.ie()&&Zae},firefox:function(){return Nl()||UF},opera:function(){return Nl()||WF},webkit:function(){return Nl()||GF},safari:function(){return JF.webkit()},chrome:function(){return Nl()||W9},windows:function(){return Nl()||qF},osx:function(){return Nl()||G9},linux:function(){return Nl()||KF},iphone:function(){return Nl()||XF},mobile:function(){return Nl()||XF||QF||YF||tle},nativeApp:function(){return Nl()||ele},android:function(){return Nl()||YF},ipad:function(){return Nl()||QF}},uPe=JF,q9=!!(typeof window<"u"&&window.document&&window.document.createElement),ole={canUseDOM:q9,canUseWorkers:typeof Worker<"u",canUseEventListeners:q9&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:q9&&!!window.screen,isInWorker:!q9};ole.canUseDOM&&(rle=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0);var cPe=function(e,t){if(!ole.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,r=n in document;if(!r){var o=document.createElement("div");o.setAttribute(n,"return;"),r=typeof o[n]=="function"}return!r&&rle&&e==="wheel"&&(r=document.implementation.hasFeature("Events.wheel","3.0")),r};function ile(e){var t=0,n=0,r=0,o=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=n,n=0),r=10*t,o=10*n,"deltaY"in e&&(o=e.deltaY),"deltaX"in e&&(r=e.deltaX),(r||o)&&e.deltaMode&&(e.deltaMode==1?(r*=40,o*=40):(r*=800,o*=800)),r&&!t&&(t=r<1?-1:1),o&&!n&&(n=o<1?-1:1),{spinX:t,spinY:n,pixelX:r,pixelY:o}}ile.getEventType=function(){return uPe.firefox()?"DOMMouseScroll":cPe("wheel")?"wheel":"mousewheel"};var dPe=ile;const fPe={beforeMount(e,t){(function(n,r){if(n&&n.addEventListener){const o=function(i){const a=dPe(i);r&&Reflect.apply(r,this,[i,a])};n.addEventListener("wheel",o,{passive:!0})}})(e,t.value)}},pPe=Pt({role:{type:String,required:!0},spinnerDate:{type:Object,required:!0},showSeconds:{type:Boolean,default:!0},arrowControl:Boolean,amPmMode:{type:String,default:""},...VF}),hPe=["onClick"],vPe=["onMouseenter"],mPe=Te({__name:"basic-time-spinner",props:pPe,emits:["change","select-range","set-option"],setup(e,{emit:t}){const n=e,r=_t("time"),{getHoursList:o,getMinutesList:i,getSecondsList:a}=Uae(n.disabledHours,n.disabledMinutes,n.disabledSeconds);let l=!1;const s=de(),u={hours:de(),minutes:de(),seconds:de()},c=ee(()=>n.showSeconds?NF:NF.slice(0,2)),d=ee(()=>{const{spinnerDate:N}=n;return{hours:N.hour(),minutes:N.minute(),seconds:N.second()}}),f=ee(()=>{const{hours:N,minutes:B}=M(d);return{hours:o(n.role),minutes:i(N,n.role),seconds:a(N,B,n.role)}}),p=ee(()=>{const{hours:N,minutes:B,seconds:P}=M(d);return{hours:z9(N,23),minutes:z9(B,59),seconds:z9(P,59)}}),m=ts(N=>{l=!1,b(N)},200),v=N=>{if(!n.amPmMode)return"";let B=N<12?" am":" pm";return n.amPmMode==="A"&&(B=B.toUpperCase()),B},g=N=>{let B;switch(N){case"hours":B=[0,2];break;case"minutes":B=[3,5];break;case"seconds":B=[6,8]}const[P,V]=B;t("select-range",P,V),s.value=N},b=N=>{x(N,M(d)[N])},y=()=>{b("hours"),b("minutes"),b("seconds")},w=N=>N.querySelector(`.${r.namespace.value}-scrollbar__wrap`),x=(N,B)=>{if(n.arrowControl)return;const P=M(u[N]);P&&P.$el&&(w(P.$el).scrollTop=Math.max(0,B*_(N)))},_=N=>{const B=M(u[N]),P=B==null?void 0:B.$el.querySelector("li");return P&&Number.parseFloat(Ld(P,"height"))||0},E=()=>{T(1)},C=()=>{T(-1)},T=N=>{s.value||g("hours");const B=s.value,P=M(d)[B],V=s.value==="hours"?24:60,L=k(B,P,N,V);I(B,L),x(B,L),St(()=>g(B))},k=(N,B,P,V)=>{let L=(B+P+V)%V;const H=M(f)[N];for(;H[L]&&L!==B;)L=(L+P+V)%V;return L},I=(N,B)=>{if(M(f)[N][B])return;const{hours:P,minutes:V,seconds:L}=M(d);let H;switch(N){case"hours":H=n.spinnerDate.hour(B).minute(V).second(L);break;case"minutes":H=n.spinnerDate.hour(P).minute(B).second(L);break;case"seconds":H=n.spinnerDate.hour(P).minute(V).second(B)}t("change",H)},O=N=>M(u[N]).$el.offsetHeight,F=()=>{const N=B=>{const P=M(u[B]);P&&P.$el&&(w(P.$el).onscroll=()=>{(V=>{l=!0,m(V);const L=Math.min(Math.round((w(M(u[V]).$el).scrollTop-(.5*O(V)-10)/_(V)+3)/_(V)),V==="hours"?23:59);I(V,L)})(B)})};N("hours"),N("minutes"),N("seconds")};return yn(()=>{St(()=>{!n.arrowControl&&F(),y(),n.role==="start"&&g("hours")})}),t("set-option",[`${n.role}_scrollDown`,T]),t("set-option",[`${n.role}_emitSelectRange`,g]),Je(()=>n.spinnerDate,()=>{l||y()}),(N,B)=>(Y(),fe("div",{class:oe([M(r).b("spinner"),{"has-seconds":N.showSeconds}])},[N.arrowControl?Fe("v-if",!0):(Y(!0),fe(bt,{key:0},bn(M(c),P=>(Y(),Le(M(wd),{key:P,ref_for:!0,ref:V=>((L,H)=>{u[H].value=L})(V,P),class:oe(M(r).be("spinner","wrapper")),"wrap-style":"max-height: inherit;","view-class":M(r).be("spinner","list"),noresize:"",tag:"ul",onMouseenter:V=>g(P),onMousemove:V=>b(P)},{default:he(()=>[(Y(!0),fe(bt,null,bn(M(f)[P],(V,L)=>(Y(),fe("li",{key:L,class:oe([M(r).be("spinner","item"),M(r).is("active",L===M(d)[P]),M(r).is("disabled",V)]),onClick:H=>((U,{value:G,disabled:z})=>{z||(I(U,G),g(U),x(U,G))})(P,{value:L,disabled:V})},[P==="hours"?(Y(),fe(bt,{key:0},[Dt(Ye(("0"+(N.amPmMode?L%12||12:L)).slice(-2))+Ye(v(L)),1)],64)):(Y(),fe(bt,{key:1},[Dt(Ye(("0"+L).slice(-2)),1)],64))],10,hPe))),128))]),_:2},1032,["class","view-class","onMouseenter","onMousemove"]))),128)),N.arrowControl?(Y(!0),fe(bt,{key:1},bn(M(c),P=>(Y(),fe("div",{key:P,class:oe([M(r).be("spinner","wrapper"),M(r).is("arrow")]),onMouseenter:V=>g(P)},[nn((Y(),Le(M(Ft),{class:oe(["arrow-up",M(r).be("spinner","arrow")])},{default:he(()=>[ie(M(p9))]),_:1},8,["class"])),[[M(Z3),C]]),nn((Y(),Le(M(Ft),{class:oe(["arrow-down",M(r).be("spinner","arrow")])},{default:he(()=>[ie(M(p0))]),_:1},8,["class"])),[[M(Z3),E]]),ce("ul",{class:oe(M(r).be("spinner","list"))},[(Y(!0),fe(bt,null,bn(M(p)[P],(V,L)=>(Y(),fe("li",{key:L,class:oe([M(r).be("spinner","item"),M(r).is("active",V===M(d)[P]),M(r).is("disabled",M(f)[P][V])])},[typeof V=="number"?(Y(),fe(bt,{key:0},[P==="hours"?(Y(),fe(bt,{key:0},[Dt(Ye(("0"+(N.amPmMode?V%12||12:V)).slice(-2))+Ye(v(V)),1)],64)):(Y(),fe(bt,{key:1},[Dt(Ye(("0"+V).slice(-2)),1)],64))],64)):Fe("v-if",!0)],2))),128))],2)],42,vPe))),128)):Fe("v-if",!0)],2))}});var ZF=Nt(mPe,[["__file","basic-time-spinner.vue"]]);const gPe=Te({__name:"panel-time-pick",props:sPe,emits:["pick","select-range","set-picker-option"],setup(e,{emit:t}){const n=e,r=Rt("EP_PICKER_BASE"),{arrowControl:o,disabledHours:i,disabledMinutes:a,disabledSeconds:l,defaultValue:s}=r.props,{getAvailableHours:u,getAvailableMinutes:c,getAvailableSeconds:d}=Wae(i,a,l),f=_t("time"),{t:p,lang:m}=Gr(),v=de([0,2]),g=Gae(n),b=ee(()=>Wi(n.actualVisible)?`${f.namespace.value}-zoom-in-top`:""),y=ee(()=>n.format.includes("ss")),w=ee(()=>n.format.includes("A")?"A":n.format.includes("a")?"a":""),x=()=>{t("pick",g.value,!1)},_=O=>{if(!n.visible)return;const F=I(O).millisecond(0);t("pick",F,!0)},E=(O,F)=>{t("select-range",O,F),v.value=[O,F]},{timePickerOptions:C,onSetOption:T,getAvailableTime:k}=$ae({getAvailableHours:u,getAvailableMinutes:c,getAvailableSeconds:d}),I=O=>k(O,n.datetimeRole||"",!0);return t("set-picker-option",["isValidValue",O=>{const F=vn(O).locale(m.value),N=I(F);return F.isSame(N)}]),t("set-picker-option",["formatToString",O=>O?O.format(n.format):null]),t("set-picker-option",["parseUserInput",O=>O?vn(O,n.format).locale(m.value):null]),t("set-picker-option",["handleKeydownInput",O=>{const F=O.code,{left:N,right:B,up:P,down:V}=Xt;if([N,B].includes(F))return(L=>{const H=[0,3].concat(y.value?[6]:[]),U=["hours","minutes"].concat(y.value?["seconds"]:[]),G=(H.indexOf(v.value[0])+L+H.length)%H.length;C.start_emitSelectRange(U[G])})(F===N?-1:1),void O.preventDefault();if([P,V].includes(F)){const L=F===P?-1:1;return C.start_scrollDown(L),void O.preventDefault()}}]),t("set-picker-option",["getRangeAvailableTime",I]),t("set-picker-option",["getDefaultValue",()=>vn(s).locale(m.value)]),(O,F)=>(Y(),Le(ca,{name:M(b)},{default:he(()=>[O.actualVisible||O.visible?(Y(),fe("div",{key:0,class:oe(M(f).b("panel"))},[ce("div",{class:oe([M(f).be("panel","content"),{"has-seconds":M(y)}])},[ie(ZF,{ref:"spinner",role:O.datetimeRole||"start","arrow-control":M(o),"show-seconds":M(y),"am-pm-mode":M(w),"spinner-date":O.parsedValue,"disabled-hours":M(i),"disabled-minutes":M(a),"disabled-seconds":M(l),onChange:_,onSetOption:M(T),onSelectRange:E},null,8,["role","arrow-control","show-seconds","am-pm-mode","spinner-date","disabled-hours","disabled-minutes","disabled-seconds","onSetOption"])],2),ce("div",{class:oe(M(f).be("panel","footer"))},[ce("button",{type:"button",class:oe([M(f).be("panel","btn"),"cancel"]),onClick:x},Ye(M(p)("el.datepicker.cancel")),3),ce("button",{type:"button",class:oe([M(f).be("panel","btn"),"confirm"]),onClick:F[0]||(F[0]=N=>((B=!1,P=!1)=>{P||t("pick",n.parsedValue,B)})())},Ye(M(p)("el.datepicker.confirm")),3)],2)],2)):Fe("v-if",!0)]),_:1},8,["name"]))}});var K9=Nt(gPe,[["__file","panel-time-pick.vue"]]);const yPe=Pt({...zF,parsedValue:{type:Array}}),bPe=["disabled"],APe=Te({__name:"panel-time-range",props:yPe,emits:["pick","select-range","set-picker-option"],setup(e,{emit:t}){const n=e,r=(W,K)=>{const X=[];for(let te=W;te<=K;te++)X.push(te);return X},{t:o,lang:i}=Gr(),a=_t("time"),l=_t("picker"),s=Rt("EP_PICKER_BASE"),{arrowControl:u,disabledHours:c,disabledMinutes:d,disabledSeconds:f,defaultValue:p}=s.props,m=ee(()=>[a.be("range-picker","body"),a.be("panel","content"),a.is("arrow",u),w.value?"has-seconds":""]),v=ee(()=>[a.be("range-picker","body"),a.be("panel","content"),a.is("arrow",u),w.value?"has-seconds":""]),g=ee(()=>n.parsedValue[0]),b=ee(()=>n.parsedValue[1]),y=Gae(n),w=ee(()=>n.format.includes("ss")),x=ee(()=>n.format.includes("A")?"A":n.format.includes("a")?"a":""),_=W=>{C(W.millisecond(0),b.value)},E=W=>{C(g.value,W.millisecond(0))},C=(W,K)=>{t("pick",[W,K],!0)},T=ee(()=>g.value>b.value),k=de([0,2]),I=(W,K)=>{t("select-range",W,K,"min"),k.value=[W,K]},O=ee(()=>w.value?11:8),F=(W,K)=>{t("select-range",W,K,"max");const X=M(O);k.value=[W+X,K+X]},N=(W,K)=>{const X=c?c(W):[],te=W==="start",ne=(K||(te?b.value:g.value)).hour(),se=te?r(ne+1,23):r(0,ne-1);return IN(X,se)},B=(W,K,X)=>{const te=d?d(W,K):[],ne=K==="start",se=X||(ne?b.value:g.value);if(W!==se.hour())return te;const le=se.minute(),J=ne?r(le+1,59):r(0,le-1);return IN(te,J)},P=(W,K,X,te)=>{const ne=f?f(W,K,X):[],se=X==="start",le=te||(se?b.value:g.value),J=le.hour(),Z=le.minute();if(W!==J||K!==Z)return ne;const ye=le.second(),be=se?r(ye+1,59):r(0,ye-1);return IN(ne,be)},V=([W,K])=>[z(W,"start",!0,K),z(K,"end",!1,W)],{getAvailableHours:L,getAvailableMinutes:H,getAvailableSeconds:U}=Wae(N,B,P),{timePickerOptions:G,getAvailableTime:z,onSetOption:$}=$ae({getAvailableHours:L,getAvailableMinutes:H,getAvailableSeconds:U});return t("set-picker-option",["formatToString",W=>W?mt(W)?W.map(K=>K.format(n.format)):W.format(n.format):null]),t("set-picker-option",["parseUserInput",W=>W?mt(W)?W.map(K=>vn(K,n.format).locale(i.value)):vn(W,n.format).locale(i.value):null]),t("set-picker-option",["isValidValue",W=>{const K=W.map(te=>vn(te).locale(i.value)),X=V(K);return K[0].isSame(X[0])&&K[1].isSame(X[1])}]),t("set-picker-option",["handleKeydownInput",W=>{const K=W.code,{left:X,right:te,up:ne,down:se}=Xt;if([X,te].includes(K))return(le=>{const J=w.value?[0,3,6,11,14,17]:[0,3,8,11],Z=["hours","minutes"].concat(w.value?["seconds"]:[]),ye=(J.indexOf(k.value[0])+le+J.length)%J.length,be=J.length/2;ye<be?G.start_emitSelectRange(Z[ye]):G.end_emitSelectRange(Z[ye-be])})(K===X?-1:1),void W.preventDefault();if([ne,se].includes(K)){const le=K===ne?-1:1,J=k.value[0]<O.value?"start":"end";return G[`${J}_scrollDown`](le),void W.preventDefault()}}]),t("set-picker-option",["getDefaultValue",()=>{if(mt(p))return p.map(K=>vn(K).locale(i.value));const W=vn(p).locale(i.value);return[W,W.add(60,"m")]}]),t("set-picker-option",["getRangeAvailableTime",V]),(W,K)=>W.actualVisible?(Y(),fe("div",{key:0,class:oe([M(a).b("range-picker"),M(l).b("panel")])},[ce("div",{class:oe(M(a).be("range-picker","content"))},[ce("div",{class:oe(M(a).be("range-picker","cell"))},[ce("div",{class:oe(M(a).be("range-picker","header"))},Ye(M(o)("el.datepicker.startTime")),3),ce("div",{class:oe(M(m))},[ie(ZF,{ref:"minSpinner",role:"start","show-seconds":M(w),"am-pm-mode":M(x),"arrow-control":M(u),"spinner-date":M(g),"disabled-hours":N,"disabled-minutes":B,"disabled-seconds":P,onChange:_,onSetOption:M($),onSelectRange:I},null,8,["show-seconds","am-pm-mode","arrow-control","spinner-date","onSetOption"])],2)],2),ce("div",{class:oe(M(a).be("range-picker","cell"))},[ce("div",{class:oe(M(a).be("range-picker","header"))},Ye(M(o)("el.datepicker.endTime")),3),ce("div",{class:oe(M(v))},[ie(ZF,{ref:"maxSpinner",role:"end","show-seconds":M(w),"am-pm-mode":M(x),"arrow-control":M(u),"spinner-date":M(b),"disabled-hours":N,"disabled-minutes":B,"disabled-seconds":P,onChange:E,onSetOption:M($),onSelectRange:F},null,8,["show-seconds","am-pm-mode","arrow-control","spinner-date","onSetOption"])],2)],2)],2),ce("div",{class:oe(M(a).be("panel","footer"))},[ce("button",{type:"button",class:oe([M(a).be("panel","btn"),"cancel"]),onClick:K[0]||(K[0]=X=>{t("pick",y.value,!1)})},Ye(M(o)("el.datepicker.cancel")),3),ce("button",{type:"button",class:oe([M(a).be("panel","btn"),"confirm"]),disabled:M(T),onClick:K[1]||(K[1]=X=>((te=!1)=>{t("pick",[g.value,b.value],te)})())},Ye(M(o)("el.datepicker.confirm")),11,bPe)],2)],2)):Fe("v-if",!0)}});var wPe=Nt(APe,[["__file","panel-time-range.vue"]]);vn.extend(MO);var xPe=Te({name:"ElTimePicker",install:null,props:{...$9,isRange:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,t){const n=de(),[r,o]=e.isRange?["timerange",wPe]:["time",K9],i=a=>t.emit("update:modelValue",a);return qn("ElPopperOptions",e.popperOptions),t.expose({focus:a=>{var l;(l=n.value)==null||l.handleFocusInput(a)},blur:a=>{var l;(l=n.value)==null||l.handleBlurInput(a)},handleOpen:()=>{var a;(a=n.value)==null||a.handleOpen()},handleClose:()=>{var a;(a=n.value)==null||a.handleClose()}}),()=>{var a;const l=(a=e.format)!=null?a:V9;return ie(Hae,Un(e,{ref:n,type:r,format:l,"onUpdate:modelValue":i}),{default:s=>ie(o,s,null)})}}});const Y9=xPe;Y9.install=e=>{e.component(Y9.name,Y9)},BO=Y9;var ale={exports:{}};ale.exports=function(e,t,n){var r=t.prototype,o=function(u){return u&&(u.indexOf?u:u.s)},i=function(u,c,d,f,p){var m=u.name?u:u.$locale(),v=o(m[c]),g=o(m[d]),b=v||g.map(function(w){return w.slice(0,f)});if(!p)return b;var y=m.weekStart;return b.map(function(w,x){return b[(x+(y||0))%7]})},a=function(){return n.Ls[n.locale()]},l=function(u,c){return u.formats[c]||function(d){return d.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(f,p,m){return p||m.slice(1)})}(u.formats[c.toUpperCase()])},s=function(){var u=this;return{months:function(c){return c?c.format("MMMM"):i(u,"months")},monthsShort:function(c){return c?c.format("MMM"):i(u,"monthsShort","months",3)},firstDayOfWeek:function(){return u.$locale().weekStart||0},weekdays:function(c){return c?c.format("dddd"):i(u,"weekdays")},weekdaysMin:function(c){return c?c.format("dd"):i(u,"weekdaysMin","weekdays",2)},weekdaysShort:function(c){return c?c.format("ddd"):i(u,"weekdaysShort","weekdays",3)},longDateFormat:function(c){return l(u.$locale(),c)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};r.localeData=function(){return s.bind(this)()},n.localeData=function(){var u=a();return{firstDayOfWeek:function(){return u.weekStart||0},weekdays:function(){return n.weekdays()},weekdaysShort:function(){return n.weekdaysShort()},weekdaysMin:function(){return n.weekdaysMin()},months:function(){return n.months()},monthsShort:function(){return n.monthsShort()},longDateFormat:function(c){return l(u,c)},meridiem:u.meridiem,ordinal:u.ordinal}},n.months=function(){return i(a(),"months")},n.monthsShort=function(){return i(a(),"monthsShort","months",3)},n.weekdays=function(u){return i(a(),"weekdays",null,null,u)},n.weekdaysShort=function(u){return i(a(),"weekdaysShort","weekdays",3,u)},n.weekdaysMin=function(u){return i(a(),"weekdaysMin","weekdays",2,u)}};const _Pe=_l(ale.exports),lle={modelValue:{type:[Number,String,Boolean],default:void 0},label:{type:[String,Boolean,Number,Object],default:void 0},value:{type:[String,Boolean,Number,Object],default:void 0},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:{type:String,default:void 0},trueValue:{type:[String,Number],default:void 0},falseValue:{type:[String,Number],default:void 0},trueLabel:{type:[String,Number],default:void 0},falseLabel:{type:[String,Number],default:void 0},id:{type:String,default:void 0},controls:{type:String,default:void 0},border:Boolean,size:da,tabindex:[String,Number],validateEvent:{type:Boolean,default:!0}},sle={[xn]:e=>an(e)||Kn(e)||Ki(e),change:e=>an(e)||Kn(e)||Ki(e)},dg=Symbol("checkboxGroupContextKey"),EPe=(e,{model:t,isLimitExceeded:n,hasOwnLabel:r,isDisabled:o,isLabeledByFormItem:i})=>{const a=Rt(dg,void 0),{formItem:l}=qa(),{emit:s}=dn();function u(d){var f,p,m,v;return[!0,e.trueValue,e.trueLabel].includes(d)?(p=(f=e.trueValue)!=null?f:e.trueLabel)==null||p:(v=(m=e.falseValue)!=null?m:e.falseLabel)!=null&&v}const c=ee(()=>(a==null?void 0:a.validateEvent)||e.validateEvent);return Je(()=>e.modelValue,()=>{c.value&&(l==null||l.validate("change").catch(d=>{}))}),{handleChange:function(d){if(n.value)return;const f=d.target;s("change",u(f.checked),d)},onClickRoot:async function(d){!n.value&&!r.value&&!o.value&&i.value&&(d.composedPath().some(f=>f.tagName==="LABEL")||(t.value=u([!1,e.falseValue,e.falseLabel].includes(t.value)),await St(),function(f,p){s("change",u(f),p)}(t.value,d)))}}},ule=(e,t)=>{const{formItem:n}=qa(),{model:r,isGroup:o,isLimitExceeded:i}=(b=>{const y=de(!1),{emit:w}=dn(),x=Rt(dg,void 0),_=ee(()=>Wi(x)===!1),E=de(!1),C=ee({get(){var T,k;return _.value?(T=x==null?void 0:x.modelValue)==null?void 0:T.value:(k=b.modelValue)!=null?k:y.value},set(T){var k,I;_.value&&mt(T)?(E.value=((k=x==null?void 0:x.max)==null?void 0:k.value)!==void 0&&T.length>(x==null?void 0:x.max.value)&&T.length>C.value.length,E.value===!1&&((I=x==null?void 0:x.changeEvent)==null||I.call(x,T))):(w(xn,T),y.value=T)}});return{model:C,isGroup:_,isLimitExceeded:E}})(e),{isFocused:a,isChecked:l,checkboxButtonSize:s,checkboxSize:u,hasOwnLabel:c,actualValue:d}=((b,y,{model:w})=>{const x=Rt(dg,void 0),_=de(!1),E=ee(()=>Z0(b.value)?b.label:b.value),C=ee(()=>{const I=w.value;return Ki(I)?I:mt(I)?wn(E.value)?I.map(Zn).some(O=>ns(O,E.value)):I.map(Zn).includes(E.value):I!=null?I===b.trueValue||I===b.trueLabel:!!I}),T=$i(ee(()=>{var I;return(I=x==null?void 0:x.size)==null?void 0:I.value}),{prop:!0}),k=$i(ee(()=>{var I;return(I=x==null?void 0:x.size)==null?void 0:I.value}));return{checkboxButtonSize:T,isChecked:C,isFocused:_,checkboxSize:k,hasOwnLabel:ee(()=>!!y.default||!Z0(E.value)),actualValue:E}})(e,t,{model:r}),{isDisabled:f}=(({model:b,isChecked:y})=>{const w=Rt(dg,void 0),x=ee(()=>{var _,E;const C=(_=w==null?void 0:w.max)==null?void 0:_.value,T=(E=w==null?void 0:w.min)==null?void 0:E.value;return!Wi(C)&&b.value.length>=C&&!y.value||!Wi(T)&&b.value.length<=T&&y.value});return{isDisabled:wl(ee(()=>(w==null?void 0:w.disabled.value)||x.value)),isLimitDisabled:x}})({model:r,isChecked:l}),{inputId:p,isLabeledByFormItem:m}=Ac(e,{formItemContext:n,disableIdGeneration:c,disableIdManagement:o}),{handleChange:v,onClickRoot:g}=EPe(e,{model:r,isLimitExceeded:i,hasOwnLabel:c,isDisabled:f,isLabeledByFormItem:m});return e.checked&&function(){var b,y;mt(r.value)&&!r.value.includes(d.value)?r.value.push(d.value):r.value=(y=(b=e.trueValue)!=null?b:e.trueLabel)==null||y}(),y0({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},ee(()=>o.value&&Z0(e.value))),y0({from:"true-label",replacement:"true-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},ee(()=>!!e.trueLabel)),y0({from:"false-label",replacement:"false-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},ee(()=>!!e.falseLabel)),{inputId:p,isLabeledByFormItem:m,isChecked:l,isDisabled:f,isFocused:a,checkboxButtonSize:s,checkboxSize:u,hasOwnLabel:c,model:r,actualValue:d,handleChange:v,onClickRoot:g}},CPe=["id","indeterminate","name","tabindex","disabled","true-value","false-value"],SPe=["id","indeterminate","disabled","value","name","tabindex"],kPe=Te({name:"ElCheckbox"}),DPe=Te({...kPe,props:lle,emits:sle,setup(e){const t=e,n=Ga(),{inputId:r,isLabeledByFormItem:o,isChecked:i,isDisabled:a,isFocused:l,checkboxSize:s,hasOwnLabel:u,model:c,actualValue:d,handleChange:f,onClickRoot:p}=ule(t,n),m=_t("checkbox"),v=ee(()=>[m.b(),m.m(s.value),m.is("disabled",a.value),m.is("bordered",t.border),m.is("checked",i.value)]),g=ee(()=>[m.e("input"),m.is("disabled",a.value),m.is("checked",i.value),m.is("indeterminate",t.indeterminate),m.is("focus",l.value)]);return(b,y)=>(Y(),Le(Hn(!M(u)&&M(o)?"span":"label"),{class:oe(M(v)),"aria-controls":b.indeterminate?b.controls:null,onClick:M(p)},{default:he(()=>{var w,x;return[ce("span",{class:oe(M(g))},[b.trueValue||b.falseValue||b.trueLabel||b.falseLabel?nn((Y(),fe("input",{key:0,id:M(r),"onUpdate:modelValue":y[0]||(y[0]=_=>Jn(c)?c.value=_:null),class:oe(M(m).e("original")),type:"checkbox",indeterminate:b.indeterminate,name:b.name,tabindex:b.tabindex,disabled:M(a),"true-value":(w=b.trueValue)!=null?w:b.trueLabel,"false-value":(x=b.falseValue)!=null?x:b.falseLabel,onChange:y[1]||(y[1]=(..._)=>M(f)&&M(f)(..._)),onFocus:y[2]||(y[2]=_=>l.value=!0),onBlur:y[3]||(y[3]=_=>l.value=!1),onClick:y[4]||(y[4]=Gt(()=>{},["stop"]))},null,42,CPe)),[[Qf,M(c)]]):nn((Y(),fe("input",{key:1,id:M(r),"onUpdate:modelValue":y[5]||(y[5]=_=>Jn(c)?c.value=_:null),class:oe(M(m).e("original")),type:"checkbox",indeterminate:b.indeterminate,disabled:M(a),value:M(d),name:b.name,tabindex:b.tabindex,onChange:y[6]||(y[6]=(..._)=>M(f)&&M(f)(..._)),onFocus:y[7]||(y[7]=_=>l.value=!0),onBlur:y[8]||(y[8]=_=>l.value=!1),onClick:y[9]||(y[9]=Gt(()=>{},["stop"]))},null,42,SPe)),[[Qf,M(c)]]),ce("span",{class:oe(M(m).e("inner"))},null,2)],2),M(u)?(Y(),fe("span",{key:0,class:oe(M(m).e("label"))},[ft(b.$slots,"default"),b.$slots.default?Fe("v-if",!0):(Y(),fe(bt,{key:0},[Dt(Ye(b.label),1)],64))],2)):Fe("v-if",!0)]}),_:3},8,["class","aria-controls","onClick"]))}});var OPe=Nt(DPe,[["__file","checkbox.vue"]]);const TPe=["name","tabindex","disabled","true-value","false-value"],MPe=["name","tabindex","disabled","value"],NPe=Te({name:"ElCheckboxButton"}),FPe=Te({...NPe,props:lle,emits:sle,setup(e){const t=e,n=Ga(),{isFocused:r,isChecked:o,isDisabled:i,checkboxButtonSize:a,model:l,actualValue:s,handleChange:u}=ule(t,n),c=Rt(dg,void 0),d=_t("checkbox"),f=ee(()=>{var m,v,g,b;const y=(v=(m=c==null?void 0:c.fill)==null?void 0:m.value)!=null?v:"";return{backgroundColor:y,borderColor:y,color:(b=(g=c==null?void 0:c.textColor)==null?void 0:g.value)!=null?b:"",boxShadow:y?`-1px 0 0 0 ${y}`:void 0}}),p=ee(()=>[d.b("button"),d.bm("button",a.value),d.is("disabled",i.value),d.is("checked",o.value),d.is("focus",r.value)]);return(m,v)=>{var g,b;return Y(),fe("label",{class:oe(M(p))},[m.trueValue||m.falseValue||m.trueLabel||m.falseLabel?nn((Y(),fe("input",{key:0,"onUpdate:modelValue":v[0]||(v[0]=y=>Jn(l)?l.value=y:null),class:oe(M(d).be("button","original")),type:"checkbox",name:m.name,tabindex:m.tabindex,disabled:M(i),"true-value":(g=m.trueValue)!=null?g:m.trueLabel,"false-value":(b=m.falseValue)!=null?b:m.falseLabel,onChange:v[1]||(v[1]=(...y)=>M(u)&&M(u)(...y)),onFocus:v[2]||(v[2]=y=>r.value=!0),onBlur:v[3]||(v[3]=y=>r.value=!1),onClick:v[4]||(v[4]=Gt(()=>{},["stop"]))},null,42,TPe)),[[Qf,M(l)]]):nn((Y(),fe("input",{key:1,"onUpdate:modelValue":v[5]||(v[5]=y=>Jn(l)?l.value=y:null),class:oe(M(d).be("button","original")),type:"checkbox",name:m.name,tabindex:m.tabindex,disabled:M(i),value:M(s),onChange:v[6]||(v[6]=(...y)=>M(u)&&M(u)(...y)),onFocus:v[7]||(v[7]=y=>r.value=!0),onBlur:v[8]||(v[8]=y=>r.value=!1),onClick:v[9]||(v[9]=Gt(()=>{},["stop"]))},null,42,MPe)),[[Qf,M(l)]]),m.$slots.default||m.label?(Y(),fe("span",{key:2,class:oe(M(d).be("button","inner")),style:$t(M(o)?M(f):void 0)},[ft(m.$slots,"default",{},()=>[Dt(Ye(m.label),1)])],6)):Fe("v-if",!0)],2)}}});var cle=Nt(FPe,[["__file","checkbox-button.vue"]]);const RPe=Pt({modelValue:{type:Array,default:()=>[]},disabled:Boolean,min:Number,max:Number,size:da,label:String,fill:String,textColor:String,tag:{type:String,default:"div"},validateEvent:{type:Boolean,default:!0}}),IPe={[xn]:e=>mt(e),change:e=>mt(e)},BPe=Te({name:"ElCheckboxGroup"}),PPe=Te({...BPe,props:RPe,emits:IPe,setup(e,{emit:t}){const n=e,r=_t("checkbox"),{formItem:o}=qa(),{inputId:i,isLabeledByFormItem:a}=Ac(n,{formItemContext:o}),l=async u=>{t(xn,u),await St(),t("change",u)},s=ee({get:()=>n.modelValue,set(u){l(u)}});return qn(dg,{...HQ(di(n),["size","min","max","disabled","validateEvent","fill","textColor"]),modelValue:s,changeEvent:l}),Je(()=>n.modelValue,()=>{n.validateEvent&&(o==null||o.validate("change").catch(u=>{}))}),(u,c)=>{var d;return Y(),Le(Hn(u.tag),{id:M(i),class:oe(M(r).b("group")),role:"group","aria-label":M(a)?void 0:u.label||"checkbox-group","aria-labelledby":M(a)?(d=M(o))==null?void 0:d.labelId:void 0},{default:he(()=>[ft(u.$slots,"default")]),_:3},8,["id","class","aria-label","aria-labelledby"])}}});var dle=Nt(PPe,[["__file","checkbox-group.vue"]]);let eR,fle,tR,nR,rR,ple,hle,vle;bl=Cr(OPe,{CheckboxButton:cle,CheckboxGroup:dle}),VO=Ya(cle),Cb=Ya(dle),eR=Pt({modelValue:{type:[String,Number,Boolean],default:void 0},size:da,disabled:Boolean,label:{type:[String,Number,Boolean],default:void 0},value:{type:[String,Number,Boolean],default:void 0},name:{type:String,default:void 0}}),fle=Pt({...eR,border:Boolean}),tR={[xn]:e=>an(e)||Kn(e)||Ki(e),[Xo]:e=>an(e)||Kn(e)||Ki(e)},nR=Symbol("radioGroupKey"),rR=(e,t)=>{const n=de(),r=Rt(nR,void 0),o=ee(()=>!!r),i=ee(()=>Z0(e.value)?e.label:e.value),a=ee({get:()=>o.value?r.modelValue:e.modelValue,set(d){o.value?r.changeEvent(d):t&&t(xn,d),n.value.checked=e.modelValue===i.value}}),l=$i(ee(()=>r==null?void 0:r.size)),s=wl(ee(()=>r==null?void 0:r.disabled)),u=de(!1),c=ee(()=>s.value||o.value&&a.value!==i.value?-1:0);return y0({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-radio",ref:"https://element-plus.org/en-US/component/radio.html"},ee(()=>o.value&&Z0(e.value))),{radioRef:n,isGroup:o,radioGroup:r,focus:u,size:l,disabled:s,tabIndex:c,modelValue:a,actualValue:i}},ple=["value","name","disabled"],hle=Te({name:"ElRadio"}),vle=Te({...hle,props:fle,emits:tR,setup(e,{emit:t}){const n=e,r=_t("radio"),{radioRef:o,radioGroup:i,focus:a,size:l,disabled:s,modelValue:u,actualValue:c}=rR(n,t);function d(){St(()=>t("change",u.value))}return(f,p)=>{var m;return Y(),fe("label",{class:oe([M(r).b(),M(r).is("disabled",M(s)),M(r).is("focus",M(a)),M(r).is("bordered",f.border),M(r).is("checked",M(u)===M(c)),M(r).m(M(l))])},[ce("span",{class:oe([M(r).e("input"),M(r).is("disabled",M(s)),M(r).is("checked",M(u)===M(c))])},[nn(ce("input",{ref_key:"radioRef",ref:o,"onUpdate:modelValue":p[0]||(p[0]=v=>Jn(u)?u.value=v:null),class:oe(M(r).e("original")),value:M(c),name:f.name||((m=M(i))==null?void 0:m.name),disabled:M(s),type:"radio",onFocus:p[1]||(p[1]=v=>a.value=!0),onBlur:p[2]||(p[2]=v=>a.value=!1),onChange:d,onClick:p[3]||(p[3]=Gt(()=>{},["stop"]))},null,42,ple),[[y3,M(u)]]),ce("span",{class:oe(M(r).e("inner"))},null,2)],2),ce("span",{class:oe(M(r).e("label")),onKeydown:p[4]||(p[4]=Gt(()=>{},["stop"]))},[ft(f.$slots,"default",{},()=>[Dt(Ye(f.label),1)])],34)],2)}}});var LPe=Nt(vle,[["__file","radio.vue"]]);const jPe=Pt({...eR}),VPe=["value","name","disabled"],zPe=Te({name:"ElRadioButton"}),HPe=Te({...zPe,props:jPe,setup(e){const t=e,n=_t("radio"),{radioRef:r,focus:o,size:i,disabled:a,modelValue:l,radioGroup:s,actualValue:u}=rR(t),c=ee(()=>({backgroundColor:(s==null?void 0:s.fill)||"",borderColor:(s==null?void 0:s.fill)||"",boxShadow:s!=null&&s.fill?`-1px 0 0 0 ${s.fill}`:"",color:(s==null?void 0:s.textColor)||""}));return(d,f)=>{var p;return Y(),fe("label",{class:oe([M(n).b("button"),M(n).is("active",M(l)===M(u)),M(n).is("disabled",M(a)),M(n).is("focus",M(o)),M(n).bm("button",M(i))])},[nn(ce("input",{ref_key:"radioRef",ref:r,"onUpdate:modelValue":f[0]||(f[0]=m=>Jn(l)?l.value=m:null),class:oe(M(n).be("button","original-radio")),value:M(u),type:"radio",name:d.name||((p=M(s))==null?void 0:p.name),disabled:M(a),onFocus:f[1]||(f[1]=m=>o.value=!0),onBlur:f[2]||(f[2]=m=>o.value=!1),onClick:f[3]||(f[3]=Gt(()=>{},["stop"]))},null,42,VPe),[[y3,M(l)]]),ce("span",{class:oe(M(n).be("button","inner")),style:$t(M(l)===M(u)?M(c):{}),onKeydown:f[4]||(f[4]=Gt(()=>{},["stop"]))},[ft(d.$slots,"default",{},()=>[Dt(Ye(d.label),1)])],38)],2)}}});var mle=Nt(HPe,[["__file","radio-button.vue"]]);const $Pe=Pt({id:{type:String,default:void 0},size:da,disabled:Boolean,modelValue:{type:[String,Number,Boolean],default:void 0},fill:{type:String,default:""},label:{type:String,default:void 0},textColor:{type:String,default:""},name:{type:String,default:void 0},validateEvent:{type:Boolean,default:!0}}),UPe=tR,WPe=["id","aria-label","aria-labelledby"],GPe=Te({name:"ElRadioGroup"}),qPe=Te({...GPe,props:$Pe,emits:UPe,setup(e,{emit:t}){const n=e,r=_t("radio"),o=Zl(),i=de(),{formItem:a}=qa(),{inputId:l,isLabeledByFormItem:s}=Ac(n,{formItemContext:a});yn(()=>{const c=i.value.querySelectorAll("[type=radio]"),d=c[0];!Array.from(c).some(f=>f.checked)&&d&&(d.tabIndex=0)});const u=ee(()=>n.name||o.value);return qn(nR,Qn({...di(n),changeEvent:c=>{t(xn,c),St(()=>t("change",c))},name:u})),Je(()=>n.modelValue,()=>{n.validateEvent&&(a==null||a.validate("change").catch(c=>{}))}),(c,d)=>(Y(),fe("div",{id:M(l),ref_key:"radioGroupRef",ref:i,class:oe(M(r).b("group")),role:"radiogroup","aria-label":M(s)?void 0:c.label||"radio-group","aria-labelledby":M(s)?M(a).labelId:void 0},[ft(c.$slots,"default")],10,WPe))}});var gle=Nt(qPe,[["__file","radio-group.vue"]]);kb=Cr(LPe,{RadioButton:mle,RadioGroup:gle}),Ow=Ya(gle),jO=Ya(mle);var KPe=Te({name:"NodeContent",setup:()=>({ns:_t("cascader-node")}),render(){const{ns:e}=this,{node:t,panel:n}=this.$parent,{data:r,label:o}=t,{renderLabelFn:i}=n;return pn("span",{class:e.e("label")},i?i({node:t,data:r}):o)}});const oR=Symbol(),YPe=Te({name:"ElCascaderNode",components:{ElCheckbox:bl,ElRadio:kb,NodeContent:KPe,ElIcon:Ft,Check:j3,Loading:jd,ArrowRight:Su},props:{node:{type:Object,required:!0},menuId:String},emits:["expand"],setup(e,{emit:t}){const n=Rt(oR),r=_t("cascader-node"),o=ee(()=>n.isHoverMenu),i=ee(()=>n.config.multiple),a=ee(()=>n.config.checkStrictly),l=ee(()=>{var w;return(w=n.checkedNodes[0])==null?void 0:w.uid}),s=ee(()=>e.node.isDisabled),u=ee(()=>e.node.isLeaf),c=ee(()=>a.value&&!u.value||!s.value),d=ee(()=>p(n.expandingNode)),f=ee(()=>a.value&&n.checkedNodes.some(p)),p=w=>{var x;const{level:_,uid:E}=e.node;return((x=w==null?void 0:w.pathNodes[_-1])==null?void 0:x.uid)===E},m=()=>{d.value||n.expandNode(e.node)},v=w=>{const{node:x}=e;w!==x.checked&&n.handleCheckChange(x,w)},g=()=>{n.lazyLoad(e.node,()=>{u.value||m()})},b=()=>{const{node:w}=e;c.value&&!w.loading&&(w.loaded?m():g())},y=w=>{e.node.loaded?(v(w),!a.value&&m()):g()};return{panel:n,isHoverMenu:o,multiple:i,checkStrictly:a,checkedNodeId:l,isDisabled:s,isLeaf:u,expandable:c,inExpandingPath:d,inCheckedPath:f,ns:r,handleHoverExpand:w=>{o.value&&(b(),!u.value&&t("expand",w))},handleExpand:b,handleClick:()=>{o.value&&!u.value||(!u.value||s.value||a.value||i.value?b():y(!0))},handleCheck:y,handleSelectCheck:w=>{a.value?(v(w),e.node.loaded&&m()):y(w)}}}}),XPe=["id","aria-haspopup","aria-owns","aria-expanded","tabindex"],QPe=ce("span",null,null,-1),JPe=Te({name:"ElCascaderMenu",components:{Loading:jd,ElIcon:Ft,ElScrollbar:wd,ElCascaderNode:Nt(YPe,[["render",function(e,t,n,r,o,i){const a=Qe("el-checkbox"),l=Qe("el-radio"),s=Qe("check"),u=Qe("el-icon"),c=Qe("node-content"),d=Qe("loading"),f=Qe("arrow-right");return Y(),fe("li",{id:`${e.menuId}-${e.node.uid}`,role:"menuitem","aria-haspopup":!e.isLeaf,"aria-owns":e.isLeaf?null:e.menuId,"aria-expanded":e.inExpandingPath,tabindex:e.expandable?-1:void 0,class:oe([e.ns.b(),e.ns.is("selectable",e.checkStrictly),e.ns.is("active",e.node.checked),e.ns.is("disabled",!e.expandable),e.inExpandingPath&&"in-active-path",e.inCheckedPath&&"in-checked-path"]),onMouseenter:t[2]||(t[2]=(...p)=>e.handleHoverExpand&&e.handleHoverExpand(...p)),onFocus:t[3]||(t[3]=(...p)=>e.handleHoverExpand&&e.handleHoverExpand(...p)),onClick:t[4]||(t[4]=(...p)=>e.handleClick&&e.handleClick(...p))},[Fe(" prefix "),e.multiple?(Y(),Le(a,{key:0,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:e.isDisabled,onClick:t[0]||(t[0]=Gt(()=>{},["stop"])),"onUpdate:modelValue":e.handleSelectCheck},null,8,["model-value","indeterminate","disabled","onUpdate:modelValue"])):e.checkStrictly?(Y(),Le(l,{key:1,"model-value":e.checkedNodeId,label:e.node.uid,disabled:e.isDisabled,"onUpdate:modelValue":e.handleSelectCheck,onClick:t[1]||(t[1]=Gt(()=>{},["stop"]))},{default:he(()=>[Fe(`
| Add an empty element to avoid render label,
| do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485
| `),QPe]),_:1},8,["model-value","label","disabled","onUpdate:modelValue"])):e.isLeaf&&e.node.checked?(Y(),Le(u,{key:2,class:oe(e.ns.e("prefix"))},{default:he(()=>[ie(s)]),_:1},8,["class"])):Fe("v-if",!0),Fe(" content "),ie(c),Fe(" postfix "),e.isLeaf?Fe("v-if",!0):(Y(),fe(bt,{key:3},[e.node.loading?(Y(),Le(u,{key:0,class:oe([e.ns.is("loading"),e.ns.e("postfix")])},{default:he(()=>[ie(d)]),_:1},8,["class"])):(Y(),Le(u,{key:1,class:oe(["arrow-right",e.ns.e("postfix")])},{default:he(()=>[ie(f)]),_:1},8,["class"]))],64))],42,XPe)}],["__file","node.vue"]])},props:{nodes:{type:Array,required:!0},index:{type:Number,required:!0}},setup(e){const t=dn(),n=_t("cascader-menu"),{t:r}=Gr(),o=Zl();let i=null,a=null;const l=Rt(oR),s=de(null),u=ee(()=>!e.nodes.length),c=ee(()=>!l.initialLoaded),d=ee(()=>`${o.value}-${e.index}`),f=()=>{a&&(clearTimeout(a),a=null)},p=()=>{s.value&&(s.value.innerHTML="",f())};return{ns:n,panel:l,hoverZone:s,isEmpty:u,isLoading:c,menuId:d,t:r,handleExpand:m=>{i=m.target},handleMouseMove:m=>{if(l.isHoverMenu&&i&&s.value)if(i.contains(m.target)){f();const v=t.vnode.el,{left:g}=v.getBoundingClientRect(),{offsetWidth:b,offsetHeight:y}=v,w=m.clientX-g,x=i.offsetTop,_=x+i.offsetHeight;s.value.innerHTML=`
| <path style="pointer-events: auto;" fill="transparent" d="M${w} ${x} L${b} 0 V${x} Z" />
| <path style="pointer-events: auto;" fill="transparent" d="M${w} ${_} L${b} ${y} V${_} Z" />
| `}else a||(a=window.setTimeout(p,l.config.hoverThreshold))},clearHoverZone:p}}});var ZPe=Nt(JPe,[["render",function(e,t,n,r,o,i){const a=Qe("el-cascader-node"),l=Qe("loading"),s=Qe("el-icon"),u=Qe("el-scrollbar");return Y(),Le(u,{key:e.menuId,tag:"ul",role:"menu",class:oe(e.ns.b()),"wrap-class":e.ns.e("wrap"),"view-class":[e.ns.e("list"),e.ns.is("empty",e.isEmpty)],onMousemove:e.handleMouseMove,onMouseleave:e.clearHoverZone},{default:he(()=>{var c;return[(Y(!0),fe(bt,null,bn(e.nodes,d=>(Y(),Le(a,{key:d.uid,node:d,"menu-id":e.menuId,onExpand:e.handleExpand},null,8,["node","menu-id","onExpand"]))),128)),e.isLoading?(Y(),fe("div",{key:0,class:oe(e.ns.e("empty-text"))},[ie(s,{size:"14",class:oe(e.ns.is("loading"))},{default:he(()=>[ie(l)]),_:1},8,["class"]),Dt(" "+Ye(e.t("el.cascader.loading")),1)],2)):e.isEmpty?(Y(),fe("div",{key:1,class:oe(e.ns.e("empty-text"))},Ye(e.t("el.cascader.noData")),3)):(c=e.panel)!=null&&c.isHoverMenu?(Y(),fe("svg",{key:2,ref:"hoverZone",class:oe(e.ns.e("hover-zone"))},null,2)):Fe("v-if",!0)]}),_:1},8,["class","wrap-class","view-class","onMousemove","onMouseleave"])}],["__file","menu.vue"]]);let eLe=0,iR=class sJ{constructor(t,n,r,o=!1){this.data=t,this.config=n,this.parent=r,this.root=o,this.uid=eLe++,this.checked=!1,this.indeterminate=!1,this.loading=!1;const{value:i,label:a,children:l}=n,s=t[l],u=(c=>{const d=[c];let{parent:f}=c;for(;f;)d.unshift(f),f=f.parent;return d})(this);this.level=o?0:r?r.level+1:1,this.value=t[i],this.label=t[a],this.pathNodes=u,this.pathValues=u.map(c=>c.value),this.pathLabels=u.map(c=>c.label),this.childrenData=s,this.children=(s||[]).map(c=>new sJ(c,n,this)),this.loaded=!n.lazy||this.isLeaf||!cs(s)}get isDisabled(){const{data:t,parent:n,config:r}=this,{disabled:o,checkStrictly:i}=r;return(Ut(o)?o(t,this):!!t[o])||!i&&(n==null?void 0:n.isDisabled)}get isLeaf(){const{data:t,config:n,childrenData:r,loaded:o}=this,{lazy:i,leaf:a}=n,l=Ut(a)?a(t,this):t[a];return Wi(l)?!(i&&!o)&&!(Array.isArray(r)&&r.length):!!l}get valueByOption(){return this.config.emitPath?this.pathValues:this.value}appendChild(t){const{childrenData:n,children:r}=this,o=new sJ(t,this.config,this);return Array.isArray(n)?n.push(t):this.childrenData=[t],r.push(o),o}calcText(t,n){const r=t?this.pathLabels.join(n):this.label;return this.text=r,r}broadcast(t,...n){const r=`onParent${Ru(t)}`;this.children.forEach(o=>{o&&(o.broadcast(t,...n),o[r]&&o[r](...n))})}emit(t,...n){const{parent:r}=this,o=`onChild${Ru(t)}`;r&&(r[o]&&r[o](...n),r.emit(t,...n))}onParentCheck(t){this.isDisabled||this.setCheckState(t)}onChildCheck(){const{children:t}=this,n=t.filter(o=>!o.isDisabled),r=!!n.length&&n.every(o=>o.checked);this.setCheckState(r)}setCheckState(t){const n=this.children.length,r=this.children.reduce((o,i)=>o+(i.checked?1:i.indeterminate?.5:0),0);this.checked=this.loaded&&this.children.filter(o=>!o.isDisabled).every(o=>o.loaded&&o.checked)&&t,this.indeterminate=this.loaded&&r!==n&&r>0}doCheck(t){if(this.checked===t)return;const{checkStrictly:n,multiple:r}=this.config;n||!r?this.checked=t:(this.broadcast("check",t),this.setCheckState(t),this.emit("check"))}};const aR=(e,t)=>e.reduce((n,r)=>(r.isLeaf?n.push(r):(!t&&n.push(r),n=n.concat(aR(r.children,t))),n),[]);class yle{constructor(t,n){this.config=n;const r=(t||[]).map(o=>new iR(o,this.config));this.nodes=r,this.allNodes=aR(r,!1),this.leafNodes=aR(r,!0)}getNodes(){return this.nodes}getFlattedNodes(t){return t?this.leafNodes:this.allNodes}appendNode(t,n){const r=n?n.appendChild(t):new iR(t,this.config);n||this.nodes.push(r),this.allNodes.push(r),r.isLeaf&&this.leafNodes.push(r)}appendNodes(t,n){t.forEach(r=>this.appendNode(r,n))}getNodeByValue(t,n=!1){return!t&&t!==0?null:this.getFlattedNodes(n).find(r=>ns(r.value,t)||ns(r.pathValues,t))||null}getSameNode(t){return t&&this.getFlattedNodes(!1).find(({value:n,level:r})=>ns(t.value,n)&&t.level===r)||null}}const ble=Pt({modelValue:{type:[Number,String,Array]},options:{type:Array,default:()=>[]},props:{type:Object,default:()=>({})}}),tLe={expandTrigger:"click",multiple:!1,checkStrictly:!1,emitPath:!0,lazy:!1,lazyLoad:fr,value:"value",label:"label",children:"children",leaf:"leaf",disabled:"disabled",hoverThreshold:500},Ale=e=>{if(!e)return 0;const t=e.id.split("-");return Number(t[t.length-2])},nLe=Te({name:"ElCascaderPanel",components:{ElCascaderMenu:ZPe},props:{...ble,border:{type:Boolean,default:!0},renderLabel:Function},emits:[xn,Xo,"close","expand-change"],setup(e,{emit:t,slots:n}){let r=!1;const o=_t("cascader"),i=(k=>ee(()=>({...tLe,...k.props})))(e);let a=null;const l=de(!0),s=de([]),u=de(null),c=de([]),d=de(null),f=de([]),p=ee(()=>i.value.expandTrigger==="hover"),m=ee(()=>e.renderLabel||n.default),v=(k,I)=>{const O=i.value;(k=k||new iR({},O,void 0,!0)).loading=!0,O.lazyLoad(k,F=>{const N=k,B=N.root?null:N;F&&(a==null||a.appendNodes(F,B)),N.loading=!1,N.loaded=!0,N.childrenData=N.childrenData||[],I&&I(F)})},g=(k,I)=>{var O;const{level:F}=k,N=c.value.slice(0,F);let B;k.isLeaf?B=k.pathNodes[F-2]:(B=k,N.push(k.children)),((O=d.value)==null?void 0:O.uid)!==(B==null?void 0:B.uid)&&(d.value=k,c.value=N,!I&&t("expand-change",(k==null?void 0:k.pathValues)||[]))},b=(k,I,O=!0)=>{const{checkStrictly:F,multiple:N}=i.value,B=f.value[0];r=!0,!N&&(B==null||B.doCheck(!1)),k.doCheck(I),_(),O&&!N&&!F&&t("close"),!O&&!N&&!F&&y(k)},y=k=>{k&&(k=k.parent,y(k),k&&g(k))},w=k=>a==null?void 0:a.getFlattedNodes(k),x=k=>{var I;return(I=w(k))==null?void 0:I.filter(O=>O.checked!==!1)},_=()=>{var k;const{checkStrictly:I,multiple:O}=i.value,F=((B,P)=>{const V=P.slice(0),L=V.map(U=>U.uid),H=B.reduce((U,G)=>{const z=L.indexOf(G.uid);return z>-1&&(U.push(G),V.splice(z,1),L.splice(z,1)),U},[]);return H.push(...V),H})(f.value,x(!I)),N=F.map(B=>B.valueByOption);f.value=F,u.value=O?N:(k=N[0])!=null?k:null},E=(k=!1,I=!1)=>{const{modelValue:O}=e,{lazy:F,multiple:N,checkStrictly:B}=i.value,P=!B;var V;if(l.value&&!r&&(I||!ns(O,u.value)))if(F&&!k){const L=GN((V=Ml(O))!=null&&V.length?I3(V,xIe):[]).map(H=>a==null?void 0:a.getNodeByValue(H)).filter(H=>!!H&&!H.loaded&&!H.loading);L.length?L.forEach(H=>{v(H,()=>E(!1,I))}):E(!0,I)}else{const L=N?Ml(O):[O],H=GN(L.map(U=>a==null?void 0:a.getNodeByValue(U,P)));C(H,I),u.value=Mf(O)}},C=(k,I=!0)=>{const{checkStrictly:O}=i.value,F=f.value,N=k.filter(V=>!!V&&(O||V.isLeaf)),B=a==null?void 0:a.getSameNode(d.value),P=I&&B||N[0];P?P.pathNodes.forEach(V=>g(V,!0)):d.value=null,F.forEach(V=>V.doCheck(!1)),Qn(N).forEach(V=>V.doCheck(!0)),f.value=N,St(T)},T=()=>{rr&&s.value.forEach(k=>{const I=k==null?void 0:k.$el;I&&Ooe(I.querySelector(`.${o.namespace.value}-scrollbar__wrap`),I.querySelector(`.${o.b("node")}.${o.is("active")}`)||I.querySelector(`.${o.b("node")}.in-active-path`))})};return qn(oR,Qn({config:i,expandingNode:d,checkedNodes:f,isHoverMenu:p,initialLoaded:l,renderLabelFn:m,lazyLoad:v,expandNode:g,handleCheckChange:b})),Je([i,()=>e.options],()=>{const{options:k}=e,I=i.value;r=!1,a=new yle(k,I),c.value=[a.getNodes()],I.lazy&&cs(e.options)?(l.value=!1,v(void 0,O=>{O&&(a=new yle(O,I),c.value=[a.getNodes()]),l.value=!0,E(!1,!0)})):E(!1,!0)},{deep:!0,immediate:!0}),Je(()=>e.modelValue,()=>{r=!1,E()},{deep:!0}),Je(()=>u.value,k=>{ns(k,e.modelValue)||(t(xn,k),t(Xo,k))}),u3(()=>s.value=[]),yn(()=>!cs(e.modelValue)&&E()),{ns:o,menuList:s,menus:c,checkedNodes:f,handleKeyDown:k=>{const I=k.target,{code:O}=k;switch(O){case Xt.up:case Xt.down:{k.preventDefault();const F=O===Xt.up?-1:1;_3(aN(I,F,`.${o.b("node")}[tabindex="-1"]`));break}case Xt.left:{k.preventDefault();const F=s.value[Ale(I)-1],N=F==null?void 0:F.$el.querySelector(`.${o.b("node")}[aria-expanded="true"]`);_3(N);break}case Xt.right:{k.preventDefault();const F=s.value[Ale(I)+1],N=F==null?void 0:F.$el.querySelector(`.${o.b("node")}[tabindex="-1"]`);_3(N);break}case Xt.enter:(F=>{if(!F)return;const N=F.querySelector("input");N?N.click():iN(F)&&F.click()})(I)}},handleCheckChange:b,getFlattedNodes:w,getCheckedNodes:x,clearCheckedNodes:()=>{f.value.forEach(k=>k.doCheck(!1)),_(),c.value=c.value.slice(0,1),d.value=null,t("expand-change",[])},calculateCheckedValue:_,scrollToExpandingNode:T}}});var X9=Nt(nLe,[["render",function(e,t,n,r,o,i){const a=Qe("el-cascader-menu");return Y(),fe("div",{class:oe([e.ns.b("panel"),e.ns.is("bordered",e.border)]),onKeydown:t[0]||(t[0]=(...l)=>e.handleKeyDown&&e.handleKeyDown(...l))},[(Y(!0),fe(bt,null,bn(e.menus,(l,s)=>(Y(),Le(a,{key:s,ref_for:!0,ref:u=>e.menuList[s]=u,index:s,nodes:[...l]},null,8,["index","nodes"]))),128))],34)}],["__file","index.vue"]]);X9.install=e=>{e.component(X9.name,X9)};let wle,xle,_le,Ele;wle=X9,Lw=Pt({type:{type:String,values:["primary","success","info","warning","danger"],default:"primary"},closable:Boolean,disableTransitions:Boolean,hit:Boolean,color:String,size:{type:String,values:bm},effect:{type:String,values:["dark","light","plain"],default:"light"},round:Boolean}),xle={close:e=>e instanceof MouseEvent,click:e=>e instanceof MouseEvent},_le=Te({name:"ElTag"}),Ele=Te({..._le,props:Lw,emits:xle,setup(e,{emit:t}){const n=e,r=$i(),o=_t("tag"),i=ee(()=>{const{type:s,hit:u,effect:c,closable:d,round:f}=n;return[o.b(),o.is("closable",d),o.m(s||"primary"),o.m(r.value),o.m(c),o.is("hit",u),o.is("round",f)]}),a=s=>{t("close",s)},l=s=>{t("click",s)};return(s,u)=>s.disableTransitions?(Y(),fe("span",{key:0,class:oe(M(i)),style:$t({backgroundColor:s.color}),onClick:l},[ce("span",{class:oe(M(o).e("content"))},[ft(s.$slots,"default")],2),s.closable?(Y(),Le(M(Ft),{key:0,class:oe(M(o).e("close")),onClick:Gt(a,["stop"])},{default:he(()=>[ie(M(wc))]),_:1},8,["class","onClick"])):Fe("v-if",!0)],6)):(Y(),Le(ca,{key:1,name:`${M(o).namespace.value}-zoom-in-center`,appear:""},{default:he(()=>[ce("span",{class:oe(M(i)),style:$t({backgroundColor:s.color}),onClick:l},[ce("span",{class:oe(M(o).e("content"))},[ft(s.$slots,"default")],2),s.closable?(Y(),Le(M(Ft),{key:0,class:oe(M(o).e("close")),onClick:Gt(a,["stop"])},{default:he(()=>[ie(M(wc))]),_:1},8,["class","onClick"])):Fe("v-if",!0)],6)]),_:3},8,["name"]))}});let Cle,Sle,kle,Dle,Ole,Tle,Mle;kw=Cr(Nt(Ele,[["__file","tag.vue"]])),Cle=Pt({...ble,size:da,placeholder:String,disabled:Boolean,clearable:Boolean,filterable:Boolean,filterMethod:{type:Function,default:(e,t)=>e.text.includes(t)},separator:{type:String,default:" / "},showAllLevels:{type:Boolean,default:!0},collapseTags:Boolean,maxCollapseTags:{type:Number,default:1},collapseTagsTooltip:{type:Boolean,default:!1},debounce:{type:Number,default:300},beforeFilter:{type:Function,default:()=>!0},popperClass:{type:String,default:""},teleported:Ui.teleported,tagType:{...Lw.type,default:"info"},validateEvent:{type:Boolean,default:!0},...Fb}),Sle={[xn]:e=>!0,[Xo]:e=>!0,focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,visibleChange:e=>Ki(e),expandChange:e=>!!e,removeTag:e=>!!e},kle={key:0},Dle=["placeholder","onKeydown"],Ole=["onClick"],Tle=Te({name:"ElCascader"}),Mle=Te({...Tle,props:Cle,emits:Sle,setup(e,{expose:t,emit:n}){const r=e,o={modifiers:[{name:"arrowPosition",enabled:!0,phase:"main",fn:({state:we})=>{const{modifiersData:ze,placement:me}=we;["right","left","bottom","top"].includes(me)||(ze.arrow.x=35)},requires:["arrow"]}]},i=yc();let a=0,l=0;const s=_t("cascader"),u=_t("input"),{t:c}=Gr(),{form:d,formItem:f}=qa(),{valueOnClear:p}=jw(r),m=de(null),v=de(null),g=de(null),b=de(null),y=de(null),w=de(!1),x=de(!1),_=de(!1),E=de(!1),C=de(""),T=de(""),k=de([]),I=de([]),O=de([]),F=de(!1),N=ee(()=>i.style),B=ee(()=>r.disabled||(d==null?void 0:d.disabled)),P=ee(()=>r.placeholder||c("el.cascader.placeholder")),V=ee(()=>T.value||k.value.length>0||F.value?"":P.value),L=$i(),H=ee(()=>["small"].includes(L.value)?"small":"default"),U=ee(()=>!!r.props.multiple),G=ee(()=>!r.filterable||U.value),z=ee(()=>U.value?T.value:C.value),$=ee(()=>{var we;return((we=b.value)==null?void 0:we.checkedNodes)||[]}),W=ee(()=>!(!r.clearable||B.value||_.value||!x.value)&&!!$.value.length),K=ee(()=>{const{showAllLevels:we,separator:ze}=r,me=$.value;return me.length?U.value?"":me[0].calcText(we,ze):""}),X=ee(()=>(f==null?void 0:f.validateState)||""),te=ee({get:()=>Mf(r.modelValue),set(we){const ze=we||p.value;n(xn,ze),n(Xo,ze),r.validateEvent&&(f==null||f.validate("change").catch(me=>{}))}}),ne=ee(()=>[s.b(),s.m(L.value),s.is("disabled",B.value),i.class]),se=ee(()=>[u.e("icon"),"icon-arrow-down",s.is("reverse",w.value)]),le=ee(()=>s.is("focus",w.value||E.value)),J=ee(()=>{var we,ze;return(ze=(we=m.value)==null?void 0:we.popperRef)==null?void 0:ze.contentRef}),Z=we=>{var ze,me,Me;B.value||(we=we??!w.value)!==w.value&&(w.value=we,(me=(ze=v.value)==null?void 0:ze.input)==null||me.setAttribute("aria-expanded",`${we}`),we?(ye(),St((Me=b.value)==null?void 0:Me.scrollToExpandingNode)):r.filterable&&We(),n("visibleChange",we))},ye=()=>{St(()=>{var we;(we=m.value)==null||we.updatePopper()})},be=()=>{_.value=!1},ve=we=>{const{showAllLevels:ze,separator:me}=r;return{node:we,key:we.uid,text:we.calcText(ze,me),hitState:!1,closable:!B.value&&!we.isDisabled,isCollapseTag:!1}},Ae=we=>{var ze;const me=we.node;me.doCheck(!1),(ze=b.value)==null||ze.calculateCheckedValue(),n("removeTag",me.valueByOption)},Ce=()=>{var we,ze;const{filterMethod:me,showAllLevels:Me,separator:Ie}=r,ht=(ze=(we=b.value)==null?void 0:we.getFlattedNodes(!r.props.checkStrictly))==null?void 0:ze.filter(gt=>!gt.isDisabled&&(gt.calcText(Me,Ie),me(gt,z.value)));U.value&&(k.value.forEach(gt=>{gt.hitState=!1}),I.value.forEach(gt=>{gt.hitState=!1})),_.value=!0,O.value=ht,ye()},_e=()=>{var we;let ze;ze=_.value&&y.value?y.value.$el.querySelector(`.${s.e("suggestion-item")}`):(we=b.value)==null?void 0:we.$el.querySelector(`.${s.b("node")}[tabindex="-1"]`),ze&&(ze.focus(),!_.value&&ze.click())},ke=()=>{var we,ze;const me=(we=v.value)==null?void 0:we.input,Me=g.value,Ie=(ze=y.value)==null?void 0:ze.$el;if(rr&&me&&(Ie&&(Ie.querySelector(`.${s.e("suggestion-list")}`).style.minWidth=`${me.offsetWidth}px`),Me)){const{offsetHeight:ht}=Me,gt=k.value.length>0?`${Math.max(ht+6,a)}px`:`${a}px`;me.style.height=gt,ye()}},Be=we=>{ye(),n("expandChange",we)},$e=we=>{var ze;const me=(ze=we.target)==null?void 0:ze.value;if(we.type==="compositionend")F.value=!1,St(()=>ot(me));else{const Me=me[me.length-1]||"";F.value=!g9(Me)}},rt=we=>{if(!F.value)switch(we.code){case Xt.enter:Z();break;case Xt.down:Z(!0),St(_e),we.preventDefault();break;case Xt.esc:w.value===!0&&(we.preventDefault(),we.stopPropagation(),Z(!1));break;case Xt.tab:Z(!1)}},ge=()=>{var we;(we=b.value)==null||we.clearCheckedNodes(),!w.value&&r.filterable&&We(),Z(!1)},We=()=>{const{value:we}=K;C.value=we,T.value=we},st=we=>{const ze=we.target,{code:me}=we;switch(me){case Xt.up:case Xt.down:{const Me=me===Xt.up?-1:1;_3(aN(ze,Me,`.${s.e("suggestion-item")}[tabindex="-1"]`));break}case Xt.enter:ze.click()}},At=()=>{const we=k.value,ze=we[we.length-1];l=T.value?0:l+1,!ze||!l||r.collapseTags&&we.length>1||(ze.hitState?Ae(ze):ze.hitState=!0)},Ve=we=>{const ze=we.target,me=s.e("search-input");ze.className===me&&(E.value=!0),n("focus",we)},it=we=>{E.value=!1,n("blur",we)},dt=ts(()=>{const{value:we}=z;if(!we)return;const ze=r.beforeFilter(we);D0(ze)?ze.then(Ce).catch(()=>{}):ze!==!1?Ce():be()},r.debounce),ot=(we,ze)=>{!w.value&&Z(!0),ze!=null&&ze.isComposing||(we?dt():be())},je=we=>Number.parseFloat(function(ze,me,{window:Me=Wm,initialValue:Ie=""}={}){const ht=de(Ie),gt=ee(()=>{var vt;return Oc(me)||((vt=Me==null?void 0:Me.document)==null?void 0:vt.documentElement)});return Je([gt,()=>Zf(ze)],([vt,qt])=>{var mn;if(vt&&Me){const Zt=(mn=Me.getComputedStyle(vt).getPropertyValue(qt))==null?void 0:mn.trim();ht.value=Zt||Ie}},{immediate:!0}),Je(ht,vt=>{var qt;(qt=gt.value)!=null&&qt.style&>.value.style.setProperty(Zf(ze),vt)}),ht}(u.cssVarName("input-height"),we).value)-2;return Je(_,ye),Je([$,B],()=>{if(!U.value)return;const we=$.value,ze=[],me=[];if(we.forEach(Me=>me.push(ve(Me))),I.value=me,we.length){we.slice(0,r.maxCollapseTags).forEach(ht=>ze.push(ve(ht)));const Me=we.slice(r.maxCollapseTags),Ie=Me.length;Ie&&(r.collapseTags?ze.push({key:-1,text:`+ ${Ie}`,closable:!1,isCollapseTag:!0}):Me.forEach(ht=>ze.push(ve(ht))))}k.value=ze}),Je(k,()=>{St(()=>ke())}),Je(L,async()=>{await St();const we=v.value.input;a=je(we)||a,ke()}),Je(K,We,{immediate:!0}),yn(()=>{const we=v.value.input,ze=je(we);a=we.offsetHeight||ze,fa(we,ke)}),t({getCheckedNodes:we=>{var ze;return(ze=b.value)==null?void 0:ze.getCheckedNodes(we)},cascaderPanelRef:b,togglePopperVisible:Z,contentRef:J}),(we,ze)=>(Y(),Le(M(Al),{ref_key:"tooltipRef",ref:m,visible:w.value,teleported:we.teleported,"popper-class":[M(s).e("dropdown"),we.popperClass],"popper-options":o,"fallback-placements":["bottom-start","bottom","top-start","top","right","left"],"stop-popper-mouse-event":!1,"gpu-acceleration":!1,placement:"bottom-start",transition:`${M(s).namespace.value}-zoom-in-top`,effect:"light",pure:"",persistent:"",onHide:be},{default:he(()=>[nn((Y(),fe("div",{class:oe(M(ne)),style:$t(M(N)),onClick:ze[5]||(ze[5]=()=>Z(!M(G)||void 0)),onKeydown:rt,onMouseenter:ze[6]||(ze[6]=me=>x.value=!0),onMouseleave:ze[7]||(ze[7]=me=>x.value=!1)},[ie(M(ua),{ref_key:"input",ref:v,modelValue:C.value,"onUpdate:modelValue":ze[1]||(ze[1]=me=>C.value=me),placeholder:M(V),readonly:M(G),disabled:M(B),"validate-event":!1,size:M(L),class:oe(M(le)),tabindex:M(U)&&we.filterable&&!M(B)?-1:void 0,onCompositionstart:$e,onCompositionupdate:$e,onCompositionend:$e,onFocus:Ve,onBlur:it,onInput:ot},{suffix:he(()=>[M(W)?(Y(),Le(M(Ft),{key:"clear",class:oe([M(u).e("icon"),"icon-circle-close"]),onClick:Gt(ge,["stop"])},{default:he(()=>[ie(M(h0))]),_:1},8,["class","onClick"])):(Y(),Le(M(Ft),{key:"arrow-down",class:oe(M(se)),onClick:ze[0]||(ze[0]=Gt(me=>Z(),["stop"]))},{default:he(()=>[ie(M(p0))]),_:1},8,["class"]))]),_:1},8,["modelValue","placeholder","readonly","disabled","size","class","tabindex"]),M(U)?(Y(),fe("div",{key:0,ref_key:"tagWrapper",ref:g,class:oe([M(s).e("tags"),M(s).is("validate",!!M(X))])},[(Y(!0),fe(bt,null,bn(k.value,me=>(Y(),Le(M(kw),{key:me.key,type:we.tagType,size:M(H),hit:me.hitState,closable:me.closable,"disable-transitions":"",onClose:Me=>Ae(me)},{default:he(()=>[me.isCollapseTag===!1?(Y(),fe("span",kle,Ye(me.text),1)):(Y(),Le(M(Al),{key:1,disabled:w.value||!we.collapseTagsTooltip,"fallback-placements":["bottom","top","right","left"],placement:"bottom",effect:"light"},{default:he(()=>[ce("span",null,Ye(me.text),1)]),content:he(()=>[ce("div",{class:oe(M(s).e("collapse-tags"))},[(Y(!0),fe(bt,null,bn(I.value.slice(we.maxCollapseTags),(Me,Ie)=>(Y(),fe("div",{key:Ie,class:oe(M(s).e("collapse-tag"))},[(Y(),Le(M(kw),{key:Me.key,class:"in-tooltip",type:we.tagType,size:M(H),hit:Me.hitState,closable:Me.closable,"disable-transitions":"",onClose:ht=>Ae(Me)},{default:he(()=>[ce("span",null,Ye(Me.text),1)]),_:2},1032,["type","size","hit","closable","onClose"]))],2))),128))],2)]),_:2},1032,["disabled"]))]),_:2},1032,["type","size","hit","closable","onClose"]))),128)),we.filterable&&!M(B)?nn((Y(),fe("input",{key:0,"onUpdate:modelValue":ze[2]||(ze[2]=me=>T.value=me),type:"text",class:oe(M(s).e("search-input")),placeholder:M(K)?"":M(P),onInput:ze[3]||(ze[3]=me=>ot(T.value,me)),onClick:ze[4]||(ze[4]=Gt(me=>Z(!0),["stop"])),onKeydown:Rr(At,["delete"]),onCompositionstart:$e,onCompositionupdate:$e,onCompositionend:$e,onFocus:Ve,onBlur:it},null,42,Dle)),[[f0,T.value]]):Fe("v-if",!0)],2)):Fe("v-if",!0)],38)),[[M(Rf),()=>Z(!1),M(J)]])]),content:he(()=>[nn(ie(M(wle),{ref_key:"cascaderPanelRef",ref:b,modelValue:M(te),"onUpdate:modelValue":ze[8]||(ze[8]=me=>Jn(te)?te.value=me:null),options:we.options,props:r.props,border:!1,"render-label":we.$slots.default,onExpandChange:Be,onClose:ze[9]||(ze[9]=me=>we.$nextTick(()=>Z(!1)))},null,8,["modelValue","options","props","render-label"]),[[$n,!_.value]]),we.filterable?nn((Y(),Le(M(wd),{key:0,ref_key:"suggestionPanel",ref:y,tag:"ul",class:oe(M(s).e("suggestion-panel")),"view-class":M(s).e("suggestion-list"),onKeydown:st},{default:he(()=>[O.value.length?(Y(!0),fe(bt,{key:0},bn(O.value,me=>(Y(),fe("li",{key:me.uid,class:oe([M(s).e("suggestion-item"),M(s).is("checked",me.checked)]),tabindex:-1,onClick:Me=>(Ie=>{var ht,gt;const{checked:vt}=Ie;U.value?(ht=b.value)==null||ht.handleCheckChange(Ie,!vt,!1):(!vt&&((gt=b.value)==null||gt.handleCheckChange(Ie,!0,!1)),Z(!1))})(me)},[ce("span",null,Ye(me.text),1),me.checked?(Y(),Le(M(Ft),{key:0},{default:he(()=>[ie(M(j3))]),_:1})):Fe("v-if",!0)],10,Ole))),128)):ft(we.$slots,"empty",{key:1},()=>[ce("li",{class:oe(M(s).e("empty-text"))},Ye(M(c)("el.cascader.noMatch")),3)])]),_:3},8,["class","view-class"])),[[$n,_.value]]):Fe("v-if",!0)]),_:3},8,["visible","teleported","popper-class","transition"]))}});var Q9=Nt(Mle,[["__file","cascader.vue"]]);Q9.install=e=>{e.component(Q9.name,Q9)};let lR,Nle,Fle,Rle;FO=Q9,lR=Symbol("rowContextKey"),Nle=Pt({tag:{type:String,default:"div"},gutter:{type:Number,default:0},justify:{type:String,values:["start","center","end","space-around","space-between","space-evenly"],default:"start"},align:{type:String,values:["top","middle","bottom"]}}),Fle=Te({name:"ElRow"}),Rle=Te({...Fle,props:Nle,setup(e){const t=e,n=_t("row"),r=ee(()=>t.gutter);qn(lR,{gutter:r});const o=ee(()=>{const a={};return t.gutter&&(a.marginRight=a.marginLeft=`-${t.gutter/2}px`),a}),i=ee(()=>[n.b(),n.is(`justify-${t.justify}`,t.justify!=="start"),n.is(`align-${t.align}`,!!t.align)]);return(a,l)=>(Y(),Le(Hn(a.tag),{class:oe(M(i)),style:$t(M(o))},{default:he(()=>[ft(a.$slots,"default")]),_:3},8,["class","style"]))}});let Ile,Ble,Ple;SO=Cr(Nt(Rle,[["__file","row.vue"]])),Ile=Pt({tag:{type:String,default:"div"},span:{type:Number,default:24},offset:{type:Number,default:0},pull:{type:Number,default:0},push:{type:Number,default:0},xs:{type:[Number,Object],default:()=>({})},sm:{type:[Number,Object],default:()=>({})},md:{type:[Number,Object],default:()=>({})},lg:{type:[Number,Object],default:()=>({})},xl:{type:[Number,Object],default:()=>({})}}),Ble=Te({name:"ElCol"}),Ple=Te({...Ble,props:Ile,setup(e){const t=e,{gutter:n}=Rt(lR,{gutter:ee(()=>0)}),r=_t("col"),o=ee(()=>{const a={};return n.value&&(a.paddingLeft=a.paddingRight=n.value/2+"px"),a}),i=ee(()=>{const a=[];return["span","offset","pull","push"].forEach(l=>{const s=t[l];Kn(s)&&(l==="span"?a.push(r.b(`${t[l]}`)):s>0&&a.push(r.b(`${l}-${t[l]}`)))}),["xs","sm","md","lg","xl"].forEach(l=>{Kn(t[l])?a.push(r.b(`${l}-${t[l]}`)):wn(t[l])&&Object.entries(t[l]).forEach(([s,u])=>{a.push(s!=="span"?r.b(`${l}-${s}-${u}`):r.b(`${l}-${u}`))})}),n.value&&a.push(r.is("guttered")),[r.b(),a]});return(a,l)=>(Y(),Le(Hn(a.tag),{class:oe(M(i)),style:$t(M(o))},{default:he(()=>[ft(a.$slots,"default")]),_:3},8,["class","style"]))}});let Lle,jle;CO=Cr(Nt(Ple,[["__file","col.vue"]])),Lle=Te({name:"ElCollapseTransition"}),jle=Te({...Lle,setup(e){const t=_t("collapse-transition"),n=o=>{o.style.maxHeight="",o.style.overflow=o.dataset.oldOverflow,o.style.paddingTop=o.dataset.oldPaddingTop,o.style.paddingBottom=o.dataset.oldPaddingBottom},r={beforeEnter(o){o.dataset||(o.dataset={}),o.dataset.oldPaddingTop=o.style.paddingTop,o.dataset.oldPaddingBottom=o.style.paddingBottom,o.style.height&&(o.dataset.elExistsHeight=o.style.height),o.style.maxHeight=0,o.style.paddingTop=0,o.style.paddingBottom=0},enter(o){requestAnimationFrame(()=>{o.dataset.oldOverflow=o.style.overflow,o.dataset.elExistsHeight?o.style.maxHeight=o.dataset.elExistsHeight:o.scrollHeight!==0?o.style.maxHeight=`${o.scrollHeight}px`:o.style.maxHeight=0,o.style.paddingTop=o.dataset.oldPaddingTop,o.style.paddingBottom=o.dataset.oldPaddingBottom,o.style.overflow="hidden"})},afterEnter(o){o.style.maxHeight="",o.style.overflow=o.dataset.oldOverflow},enterCancelled(o){n(o)},beforeLeave(o){o.dataset||(o.dataset={}),o.dataset.oldPaddingTop=o.style.paddingTop,o.dataset.oldPaddingBottom=o.style.paddingBottom,o.dataset.oldOverflow=o.style.overflow,o.style.maxHeight=`${o.scrollHeight}px`,o.style.overflow="hidden"},leave(o){o.scrollHeight!==0&&(o.style.maxHeight=0,o.style.paddingTop=0,o.style.paddingBottom=0)},afterLeave(o){n(o)},leaveCancelled(o){n(o)}};return(o,i)=>(Y(),Le(ca,Un({name:M(t).b()},Yee(r)),{default:he(()=>[ft(o.$slots,"default")]),_:3},16,["name"]))}});var J9=Nt(jle,[["__file","collapse-transition.vue"]]);J9.install=e=>{e.component(J9.name,J9)};let Vle;UO=J9,NOe=UO,Vle=Pt({color:{type:Object,required:!0},vertical:{type:Boolean,default:!1}});let sR=!1;function e4(e,t){if(!rr)return;const n=function(i){var a;(a=t.drag)==null||a.call(t,i)},r=function(i){var a;document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",r),document.removeEventListener("touchmove",n),document.removeEventListener("touchend",r),document.onselectstart=null,document.ondragstart=null,sR=!1,(a=t.end)==null||a.call(t,i)},o=function(i){var a;sR||(i.preventDefault(),document.onselectstart=()=>!1,document.ondragstart=()=>!1,document.addEventListener("mousemove",n),document.addEventListener("mouseup",r),document.addEventListener("touchmove",n),document.addEventListener("touchend",r),sR=!0,(a=t.start)==null||a.call(t,i))};e.addEventListener("mousedown",o),e.addEventListener("touchstart",o)}const rLe=(e,{bar:t,thumb:n,handleDrag:r})=>{const o=dn(),i=_t("color-alpha-slider"),a=de(0),l=de(0),s=de();function u(){a.value=function(){if(!n.value||e.vertical)return 0;const p=o.vnode.el,m=e.color.get("alpha");return p?Math.round(m*(p.offsetWidth-n.value.offsetWidth/2)/100):0}(),l.value=function(){if(!n.value)return 0;const p=o.vnode.el;if(!e.vertical)return 0;const m=e.color.get("alpha");return p?Math.round(m*(p.offsetHeight-n.value.offsetHeight/2)/100):0}(),s.value=function(){if(e.color&&e.color.value){const{r:p,g:m,b:v}=e.color.toRgb();return`linear-gradient(to right, rgba(${p}, ${m}, ${v}, 0) 0%, rgba(${p}, ${m}, ${v}, 1) 100%)`}return""}()}yn(()=>{if(!t.value||!n.value)return;const p={drag:m=>{r(m)},end:m=>{r(m)}};e4(t.value,p),e4(n.value,p),u()}),Je(()=>e.color.get("alpha"),()=>u()),Je(()=>e.color.value,()=>u());const c=ee(()=>[i.b(),i.is("vertical",e.vertical)]),d=ee(()=>i.e("bar")),f=ee(()=>i.e("thumb"));return{rootKls:c,barKls:d,barStyle:ee(()=>({background:s.value})),thumbKls:f,thumbStyle:ee(()=>({left:ka(a.value),top:ka(l.value)})),update:u}},oLe=Te({name:"ElColorAlphaSlider"}),iLe=Te({...oLe,props:Vle,setup(e,{expose:t}){const n=e,{bar:r,thumb:o,handleDrag:i,handleClick:a}=(p=>{const m=dn(),v=Qo(),g=Qo();function b(y){if(!g.value||!v.value)return;const w=m.vnode.el.getBoundingClientRect(),{clientX:x,clientY:_}=t9(y);if(p.vertical){let E=_-w.top;E=Math.max(v.value.offsetHeight/2,E),E=Math.min(E,w.height-v.value.offsetHeight/2),p.color.set("alpha",Math.round((E-v.value.offsetHeight/2)/(w.height-v.value.offsetHeight)*100))}else{let E=x-w.left;E=Math.max(v.value.offsetWidth/2,E),E=Math.min(E,w.width-v.value.offsetWidth/2),p.color.set("alpha",Math.round((E-v.value.offsetWidth/2)/(w.width-v.value.offsetWidth)*100))}}return{thumb:v,bar:g,handleDrag:b,handleClick:function(y){y.target!==v.value&&b(y)}}})(n),{rootKls:l,barKls:s,barStyle:u,thumbKls:c,thumbStyle:d,update:f}=rLe(n,{bar:r,thumb:o,handleDrag:i});return t({update:f,bar:r,thumb:o}),(p,m)=>(Y(),fe("div",{class:oe(M(l))},[ce("div",{ref_key:"bar",ref:r,class:oe(M(s)),style:$t(M(u)),onClick:m[0]||(m[0]=(...v)=>M(a)&&M(a)(...v))},null,6),ce("div",{ref_key:"thumb",ref:o,class:oe(M(c)),style:$t(M(d))},null,6)],2))}});var aLe=Nt(iLe,[["__file","alpha-slider.vue"]]);const lLe=Te({name:"ElColorHueSlider",props:{color:{type:Object,required:!0},vertical:Boolean},setup(e){const t=_t("color-hue-slider"),n=dn(),r=de(),o=de(),i=de(0),a=de(0),l=ee(()=>e.color.get("hue"));function s(c){if(!o.value||!r.value)return;const d=n.vnode.el.getBoundingClientRect(),{clientX:f,clientY:p}=t9(c);let m;if(e.vertical){let v=p-d.top;v=Math.min(v,d.height-r.value.offsetHeight/2),v=Math.max(r.value.offsetHeight/2,v),m=Math.round((v-r.value.offsetHeight/2)/(d.height-r.value.offsetHeight)*360)}else{let v=f-d.left;v=Math.min(v,d.width-r.value.offsetWidth/2),v=Math.max(r.value.offsetWidth/2,v),m=Math.round((v-r.value.offsetWidth/2)/(d.width-r.value.offsetWidth)*360)}e.color.set("hue",m)}function u(){i.value=function(){if(!r.value)return 0;const c=n.vnode.el;if(e.vertical)return 0;const d=e.color.get("hue");return c?Math.round(d*(c.offsetWidth-r.value.offsetWidth/2)/360):0}(),a.value=function(){if(!r.value)return 0;const c=n.vnode.el;if(!e.vertical)return 0;const d=e.color.get("hue");return c?Math.round(d*(c.offsetHeight-r.value.offsetHeight/2)/360):0}()}return Je(()=>l.value,()=>{u()}),yn(()=>{if(!o.value||!r.value)return;const c={drag:d=>{s(d)},end:d=>{s(d)}};e4(o.value,c),e4(r.value,c),u()}),{bar:o,thumb:r,thumbLeft:i,thumbTop:a,hueValue:l,handleClick:function(c){c.target!==r.value&&s(c)},update:u,ns:t}}});var sLe=Nt(lLe,[["render",function(e,t,n,r,o,i){return Y(),fe("div",{class:oe([e.ns.b(),e.ns.is("vertical",e.vertical)])},[ce("div",{ref:"bar",class:oe(e.ns.e("bar")),onClick:t[0]||(t[0]=(...a)=>e.handleClick&&e.handleClick(...a))},null,2),ce("div",{ref:"thumb",class:oe(e.ns.e("thumb")),style:$t({left:e.thumbLeft+"px",top:e.thumbTop+"px"})},null,6)],2)}],["__file","hue-slider.vue"]]);const uLe=Pt({modelValue:String,id:String,showAlpha:Boolean,colorFormat:String,disabled:Boolean,size:da,popperClass:{type:String,default:""},label:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},predefine:{type:Array},validateEvent:{type:Boolean,default:!0}}),cLe={[xn]:e=>an(e)||pa(e),[Xo]:e=>an(e)||pa(e),activeChange:e=>an(e)||pa(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent},zle=Symbol("colorPickerContextKey"),Hle=function(e,t,n){return[e,t*n/((e=(2-t)*n)<1?e:2-e)||0,e/2]},fg=function(e,t){(function(r){return typeof r=="string"&&r.includes(".")&&Number.parseFloat(r)===1})(e)&&(e="100%");const n=function(r){return typeof r=="string"&&r.includes("%")}(e);return e=Math.min(t,Math.max(0,Number.parseFloat(`${e}`))),n&&(e=Number.parseInt(""+e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/Number.parseFloat(t)},$le={10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"},Z9=e=>{e=Math.min(Math.round(e),255);const t=Math.floor(e/16),n=e%16;return`${$le[t]||t}${$le[n]||n}`},Ule=function({r:e,g:t,b:n}){return Number.isNaN(+e)||Number.isNaN(+t)||Number.isNaN(+n)?"":`#${Z9(e)}${Z9(t)}${Z9(n)}`},uR={A:10,B:11,C:12,D:13,E:14,F:15},a1=function(e){return e.length===2?16*(uR[e[0].toUpperCase()]||+e[0])+(uR[e[1].toUpperCase()]||+e[1]):uR[e[1].toUpperCase()]||+e[1]},Wle=(e,t,n)=>{e=fg(e,255),t=fg(t,255),n=fg(n,255);const r=Math.max(e,t,n),o=Math.min(e,t,n);let i;const a=r,l=r-o,s=r===0?0:l/r;if(r===o)i=0;else{switch(r){case e:i=(t-n)/l+(t<n?6:0);break;case t:i=(n-e)/l+2;break;case n:i=(e-t)/l+4}i/=6}return{h:360*i,s:100*s,v:100*a}},t4=function(e,t,n){e=6*fg(e,360),t=fg(t,100),n=fg(n,100);const r=Math.floor(e),o=e-r,i=n*(1-t),a=n*(1-o*t),l=n*(1-(1-o)*t),s=r%6,u=[n,a,i,i,l,n][s],c=[l,n,n,a,i,i][s],d=[i,i,l,n,n,a][s];return{r:Math.round(255*u),g:Math.round(255*c),b:Math.round(255*d)}};class n4{constructor(t={}){this._hue=0,this._saturation=100,this._value=100,this._alpha=100,this.enableAlpha=!1,this.format="hex",this.value="";for(const n in t)Tn(t,n)&&(this[n]=t[n]);t.value?this.fromString(t.value):this.doOnChange()}set(t,n){if(arguments.length!==1||typeof t!="object")this[`_${t}`]=n,this.doOnChange();else for(const r in t)Tn(t,r)&&this.set(r,t[r])}get(t){return t==="alpha"?Math.floor(this[`_${t}`]):this[`_${t}`]}toRgb(){return t4(this._hue,this._saturation,this._value)}fromString(t){if(!t)return this._hue=0,this._saturation=100,this._value=100,void this.doOnChange();const n=(r,o,i)=>{this._hue=Math.max(0,Math.min(360,r)),this._saturation=Math.max(0,Math.min(100,o)),this._value=Math.max(0,Math.min(100,i)),this.doOnChange()};if(t.includes("hsl")){const r=t.replace(/hsla|hsl|\(|\)/gm,"").split(/\s|,/g).filter(o=>o!=="").map((o,i)=>i>2?Number.parseFloat(o):Number.parseInt(o,10));if(r.length===4?this._alpha=100*Number.parseFloat(r[3]):r.length===3&&(this._alpha=100),r.length>=3){const{h:o,s:i,v:a}=function(l,s,u){u/=100;let c=s/=100;const d=Math.max(u,.01);return s*=(u*=2)<=1?u:2-u,c*=d<=1?d:2-d,{h:l,s:100*(u===0?2*c/(d+c):2*s/(u+s)),v:(u+s)/2*100}}(r[0],r[1],r[2]);n(o,i,a)}}else if(t.includes("hsv")){const r=t.replace(/hsva|hsv|\(|\)/gm,"").split(/\s|,/g).filter(o=>o!=="").map((o,i)=>i>2?Number.parseFloat(o):Number.parseInt(o,10));r.length===4?this._alpha=100*Number.parseFloat(r[3]):r.length===3&&(this._alpha=100),r.length>=3&&n(r[0],r[1],r[2])}else if(t.includes("rgb")){const r=t.replace(/rgba|rgb|\(|\)/gm,"").split(/\s|,/g).filter(o=>o!=="").map((o,i)=>i>2?Number.parseFloat(o):Number.parseInt(o,10));if(r.length===4?this._alpha=100*Number.parseFloat(r[3]):r.length===3&&(this._alpha=100),r.length>=3){const{h:o,s:i,v:a}=Wle(r[0],r[1],r[2]);n(o,i,a)}}else if(t.includes("#")){const r=t.replace("#","").trim();if(!/^[0-9a-fA-F]{3}$|^[0-9a-fA-F]{6}$|^[0-9a-fA-F]{8}$/.test(r))return;let o,i,a;r.length===3?(o=a1(r[0]+r[0]),i=a1(r[1]+r[1]),a=a1(r[2]+r[2])):r.length!==6&&r.length!==8||(o=a1(r.slice(0,2)),i=a1(r.slice(2,4)),a=a1(r.slice(4,6))),r.length===8?this._alpha=a1(r.slice(6))/255*100:r.length!==3&&r.length!==6||(this._alpha=100);const{h:l,s,v:u}=Wle(o,i,a);n(l,s,u)}}compare(t){return Math.abs(t._hue-this._hue)<2&&Math.abs(t._saturation-this._saturation)<1&&Math.abs(t._value-this._value)<1&&Math.abs(t._alpha-this._alpha)<1}doOnChange(){const{_hue:t,_saturation:n,_value:r,_alpha:o,format:i}=this;if(this.enableAlpha)switch(i){case"hsl":{const a=Hle(t,n/100,r/100);this.value=`hsla(${t}, ${Math.round(100*a[1])}%, ${Math.round(100*a[2])}%, ${this.get("alpha")/100})`;break}case"hsv":this.value=`hsva(${t}, ${Math.round(n)}%, ${Math.round(r)}%, ${this.get("alpha")/100})`;break;case"hex":this.value=`${Ule(t4(t,n,r))}${Z9(255*o/100)}`;break;default:{const{r:a,g:l,b:s}=t4(t,n,r);this.value=`rgba(${a}, ${l}, ${s}, ${this.get("alpha")/100})`}}else switch(i){case"hsl":{const a=Hle(t,n/100,r/100);this.value=`hsl(${t}, ${Math.round(100*a[1])}%, ${Math.round(100*a[2])}%)`;break}case"hsv":this.value=`hsv(${t}, ${Math.round(n)}%, ${Math.round(r)}%)`;break;case"rgb":{const{r:a,g:l,b:s}=t4(t,n,r);this.value=`rgb(${a}, ${l}, ${s})`;break}default:this.value=Ule(t4(t,n,r))}}}const dLe=Te({props:{colors:{type:Array,required:!0},color:{type:Object,required:!0}},setup(e){const t=_t("color-predefine"),{currentColor:n}=Rt(zle),r=de(o(e.colors,e.color));function o(i,a){return i.map(l=>{const s=new n4;return s.enableAlpha=!0,s.format="rgba",s.fromString(l),s.selected=s.value===a.value,s})}return Je(()=>n.value,i=>{const a=new n4;a.fromString(i),r.value.forEach(l=>{l.selected=a.compare(l)})}),yl(()=>{r.value=o(e.colors,e.color)}),{rgbaColors:r,handleSelect:function(i){e.color.fromString(e.colors[i])},ns:t}}}),fLe=["onClick"];var pLe=Nt(dLe,[["render",function(e,t,n,r,o,i){return Y(),fe("div",{class:oe(e.ns.b())},[ce("div",{class:oe(e.ns.e("colors"))},[(Y(!0),fe(bt,null,bn(e.rgbaColors,(a,l)=>(Y(),fe("div",{key:e.colors[l],class:oe([e.ns.e("color-selector"),e.ns.is("alpha",a._alpha<100),{selected:a.selected}]),onClick:s=>e.handleSelect(l)},[ce("div",{style:$t({backgroundColor:a.value})},null,4)],10,fLe))),128))],2)],2)}],["__file","predefine.vue"]]);const hLe=Te({name:"ElSlPanel",props:{color:{type:Object,required:!0}},setup(e){const t=_t("color-svpanel"),n=dn(),r=de(0),o=de(0),i=de("hsl(0, 100%, 50%)"),a=ee(()=>({hue:e.color.get("hue"),value:e.color.get("value")}));function l(){const u=e.color.get("saturation"),c=e.color.get("value"),d=n.vnode.el,{clientWidth:f,clientHeight:p}=d;o.value=u*f/100,r.value=(100-c)*p/100,i.value=`hsl(${e.color.get("hue")}, 100%, 50%)`}function s(u){const c=n.vnode.el.getBoundingClientRect(),{clientX:d,clientY:f}=t9(u);let p=d-c.left,m=f-c.top;p=Math.max(0,p),p=Math.min(p,c.width),m=Math.max(0,m),m=Math.min(m,c.height),o.value=p,r.value=m,e.color.set({saturation:p/c.width*100,value:100-m/c.height*100})}return Je(()=>a.value,()=>{l()}),yn(()=>{e4(n.vnode.el,{drag:u=>{s(u)},end:u=>{s(u)}}),l()}),{cursorTop:r,cursorLeft:o,background:i,colorValue:a,handleDrag:s,update:l,ns:t}}}),vLe=[ce("div",null,null,-1)];var mLe=Nt(hLe,[["render",function(e,t,n,r,o,i){return Y(),fe("div",{class:oe(e.ns.b()),style:$t({backgroundColor:e.background})},[ce("div",{class:oe(e.ns.e("white"))},null,2),ce("div",{class:oe(e.ns.e("black"))},null,2),ce("div",{class:oe(e.ns.e("cursor")),style:$t({top:e.cursorTop+"px",left:e.cursorLeft+"px"})},vLe,6)],6)}],["__file","sv-panel.vue"]]);const gLe=["onKeydown"],yLe=["id","aria-label","aria-labelledby","aria-description","aria-disabled","tabindex"],bLe=Te({name:"ElColorPicker"}),ALe=Te({...bLe,props:uLe,emits:cLe,setup(e,{expose:t,emit:n}){const r=e,{t:o}=Gr(),i=_t("color"),{formItem:a}=qa(),l=$i(),s=wl(),{inputId:u,isLabeledByFormItem:c}=Ac(r,{formItemContext:a}),d=de(),f=de(),p=de(),m=de(),v=de(),g=de(),{isFocused:b,handleFocus:y,handleBlur:w}=Vw(v,{beforeBlur(se){var le;return(le=m.value)==null?void 0:le.isFocusInsideContent(se)},afterBlur(){P(!1),U()}}),x=se=>{if(s.value)return ne();y(se)};let _=!0;const E=Qn(new n4({enableAlpha:r.showAlpha,format:r.colorFormat||"",value:r.modelValue})),C=de(!1),T=de(!1),k=de(""),I=ee(()=>r.modelValue||T.value?function(se,le){if(!(se instanceof n4))throw new TypeError("color should be instance of _color Class");const{r:J,g:Z,b:ye}=se.toRgb();return le?`rgba(${J}, ${Z}, ${ye}, ${se.get("alpha")/100})`:`rgb(${J}, ${Z}, ${ye})`}(E,r.showAlpha):"transparent"),O=ee(()=>r.modelValue||T.value?E.value:""),F=ee(()=>c.value?void 0:r.label||o("el.colorpicker.defaultLabel")),N=ee(()=>c.value?a==null?void 0:a.labelId:void 0),B=ee(()=>[i.b("picker"),i.is("disabled",s.value),i.bm("picker",l.value),i.is("focused",b.value)]);function P(se){C.value=se}const V=ts(P,100,{leading:!0});function L(){s.value||P(!0)}function H(){V(!1),U()}function U(){St(()=>{r.modelValue?E.fromString(r.modelValue):(E.value="",St(()=>{T.value=!1}))})}function G(){s.value||V(!C.value)}function z(){E.fromString(k.value)}function $(){const se=E.value;n(xn,se),n("change",se),r.validateEvent&&(a==null||a.validate("change").catch(le=>{})),V(!1),St(()=>{const le=new n4({enableAlpha:r.showAlpha,format:r.colorFormat||"",value:r.modelValue});E.compare(le)||U()})}function W(){V(!1),n(xn,null),n("change",null),r.modelValue!==null&&r.validateEvent&&(a==null||a.validate("change").catch(se=>{})),U()}function K(se){if(C.value&&(H(),b.value)){const le=new FocusEvent("focus",se);w(le)}}function X(se){se.preventDefault(),se.stopPropagation(),P(!1),U()}function te(se){switch(se.code){case Xt.enter:case Xt.space:se.preventDefault(),se.stopPropagation(),L(),g.value.focus();break;case Xt.esc:X(se)}}function ne(){v.value.blur()}return yn(()=>{r.modelValue&&(k.value=O.value)}),Je(()=>r.modelValue,se=>{se?se&&se!==E.value&&(_=!1,E.fromString(se)):T.value=!1}),Je(()=>O.value,se=>{k.value=se,_&&n("activeChange",se),_=!0}),Je(()=>E.value,()=>{r.modelValue||T.value||(T.value=!0)}),Je(()=>C.value,()=>{St(()=>{var se,le,J;(se=d.value)==null||se.update(),(le=f.value)==null||le.update(),(J=p.value)==null||J.update()})}),qn(zle,{currentColor:O}),t({color:E,show:L,hide:H,focus:function(){v.value.focus()},blur:ne}),(se,le)=>(Y(),Le(M(Al),{ref_key:"popper",ref:m,visible:C.value,"show-arrow":!1,"fallback-placements":["bottom","top","right","left"],offset:0,"gpu-acceleration":!1,"popper-class":[M(i).be("picker","panel"),M(i).b("dropdown"),se.popperClass],"stop-popper-mouse-event":!1,effect:"light",trigger:"click",transition:`${M(i).namespace.value}-zoom-in-top`,persistent:"",onHide:le[2]||(le[2]=J=>P(!1))},{content:he(()=>[nn((Y(),fe("div",{onKeydown:Rr(X,["esc"])},[ce("div",{class:oe(M(i).be("dropdown","main-wrapper"))},[ie(sLe,{ref_key:"hue",ref:d,class:"hue-slider",color:M(E),vertical:""},null,8,["color"]),ie(mLe,{ref_key:"sv",ref:f,color:M(E)},null,8,["color"])],2),se.showAlpha?(Y(),Le(aLe,{key:0,ref_key:"alpha",ref:p,color:M(E)},null,8,["color"])):Fe("v-if",!0),se.predefine?(Y(),Le(pLe,{key:1,ref:"predefine",color:M(E),colors:se.predefine},null,8,["color","colors"])):Fe("v-if",!0),ce("div",{class:oe(M(i).be("dropdown","btns"))},[ce("span",{class:oe(M(i).be("dropdown","value"))},[ie(M(ua),{ref_key:"inputRef",ref:g,modelValue:k.value,"onUpdate:modelValue":le[0]||(le[0]=J=>k.value=J),"validate-event":!1,size:"small",onKeyup:Rr(z,["enter"]),onBlur:z},null,8,["modelValue","onKeyup"])],2),ie(M(Sa),{class:oe(M(i).be("dropdown","link-btn")),text:"",size:"small",onClick:W},{default:he(()=>[Dt(Ye(M(o)("el.colorpicker.clear")),1)]),_:1},8,["class"]),ie(M(Sa),{plain:"",size:"small",class:oe(M(i).be("dropdown","btn")),onClick:$},{default:he(()=>[Dt(Ye(M(o)("el.colorpicker.confirm")),1)]),_:1},8,["class"])],2)],40,gLe)),[[M(Rf),K]])]),default:he(()=>[ce("div",{id:M(u),ref_key:"triggerRef",ref:v,class:oe(M(B)),role:"button","aria-label":M(F),"aria-labelledby":M(N),"aria-description":M(o)("el.colorpicker.description",{color:se.modelValue||""}),"aria-disabled":M(s),tabindex:M(s)?-1:se.tabindex,onKeydown:te,onFocus:x,onBlur:le[1]||(le[1]=(...J)=>M(w)&&M(w)(...J))},[M(s)?(Y(),fe("div",{key:0,class:oe(M(i).be("picker","mask"))},null,2)):Fe("v-if",!0),ce("div",{class:oe(M(i).be("picker","trigger")),onClick:G},[ce("span",{class:oe([M(i).be("picker","color"),M(i).is("alpha",se.showAlpha)])},[ce("span",{class:oe(M(i).be("picker","color-inner")),style:$t({backgroundColor:M(I)})},[nn(ie(M(Ft),{class:oe([M(i).be("picker","icon"),M(i).is("icon-arrow-down")])},{default:he(()=>[ie(M(p0))]),_:1},8,["class"]),[[$n,se.modelValue||T.value]]),nn(ie(M(Ft),{class:oe([M(i).be("picker","empty"),M(i).is("icon-close")])},{default:he(()=>[ie(M(wc))]),_:1},8,["class"]),[[$n,!se.modelValue&&!T.value]])],6)],2)],2)],42,yLe)]),_:1},8,["visible","popper-class","transition"]))}});let Gle,qle;LO=Cr(Nt(ALe,[["__file","color-picker.vue"]])),Gle=Te({name:"ElContainer"}),qle=Te({...Gle,props:{direction:{type:String}},setup(e){const t=e,n=Ga(),r=_t("container"),o=ee(()=>t.direction==="vertical"?!0:t.direction==="horizontal"?!1:n&&n.default?n.default().some(i=>{const a=i.type.name;return a==="ElHeader"||a==="ElFooter"}):!1);return(i,a)=>(Y(),fe("section",{class:oe([M(r).b(),M(r).is("vertical",M(o))])},[ft(i.$slots,"default")],2))}});var wLe=Nt(qle,[["__file","container.vue"]]);const xLe=Te({name:"ElAside"}),_Le=Te({...xLe,props:{width:{type:String,default:null}},setup(e){const t=e,n=_t("aside"),r=ee(()=>t.width?n.cssVarBlock({width:t.width}):{});return(o,i)=>(Y(),fe("aside",{class:oe(M(n).b()),style:$t(M(r))},[ft(o.$slots,"default")],6))}});var Kle=Nt(_Le,[["__file","aside.vue"]]);const ELe=Te({name:"ElFooter"}),CLe=Te({...ELe,props:{height:{type:String,default:null}},setup(e){const t=e,n=_t("footer"),r=ee(()=>t.height?n.cssVarBlock({height:t.height}):{});return(o,i)=>(Y(),fe("footer",{class:oe(M(n).b()),style:$t(M(r))},[ft(o.$slots,"default")],6))}});var Yle=Nt(CLe,[["__file","footer.vue"]]);const SLe=Te({name:"ElHeader"}),kLe=Te({...SLe,props:{height:{type:String,default:null}},setup(e){const t=e,n=_t("header"),r=ee(()=>t.height?n.cssVarBlock({height:t.height}):{});return(o,i)=>(Y(),fe("header",{class:oe(M(n).b()),style:$t(M(r))},[ft(o.$slots,"default")],6))}});var Xle=Nt(kLe,[["__file","header.vue"]]);const DLe=Te({name:"ElMain"}),OLe=Te({...DLe,setup(e){const t=_t("main");return(n,r)=>(Y(),fe("main",{class:oe(M(t).b())},[ft(n.$slots,"default")],2))}});var Qle=Nt(OLe,[["__file","main.vue"]]);const TLe=Cr(wLe,{Aside:Kle,Footer:Yle,Header:Xle,Main:Qle}),MLe=Ya(Kle);Ya(Yle);const NLe=Ya(Xle),FLe=Ya(Qle);var Jle={exports:{}};Jle.exports=function(e,t){var n=t.prototype,r=n.format;n.format=function(o){var i=this,a=this.$locale();if(!this.isValid())return r.bind(this)(o);var l=this.$utils(),s=(o||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(u){switch(u){case"Q":return Math.ceil((i.$M+1)/3);case"Do":return a.ordinal(i.$D);case"gggg":return i.weekYear();case"GGGG":return i.isoWeekYear();case"wo":return a.ordinal(i.week(),"W");case"w":case"ww":return l.s(i.week(),u==="w"?1:2,"0");case"W":case"WW":return l.s(i.isoWeek(),u==="W"?1:2,"0");case"k":case"kk":return l.s(String(i.$H===0?24:i.$H),u==="k"?1:2,"0");case"X":return Math.floor(i.$d.getTime()/1e3);case"x":return i.$d.getTime();case"z":return"["+i.offsetName()+"]";case"zzz":return"["+i.offsetName("long")+"]";default:return u}});return r.bind(this)(s)}};const RLe=_l(Jle.exports);var Zle={exports:{}};Zle.exports=function(){var e="week",t="year";return function(n,r,o){var i=r.prototype;i.week=function(a){if(a===void 0&&(a=null),a!==null)return this.add(7*(a-this.week()),"day");var l=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var s=o(this).startOf(t).add(1,t).date(l),u=o(this).endOf(e);if(s.isBefore(u))return 1}var c=o(this).startOf(t).date(l).startOf(e).subtract(1,"millisecond"),d=this.diff(c,e,!0);return d<0?o(this).startOf("week").week():Math.ceil(d)},i.weeks=function(a){return a===void 0&&(a=null),this.week(a)}}}();const ILe=_l(Zle.exports);var ese={exports:{}};ese.exports=function(e,t){t.prototype.weekYear=function(){var n=this.month(),r=this.week(),o=this.year();return r===1&&n===11?o+1:n===0&&r>=52?o-1:o}};const BLe=_l(ese.exports);var tse={exports:{}};tse.exports=function(e,t,n){t.prototype.dayOfYear=function(r){var o=Math.round((n(this).startOf("day")-n(this).startOf("year"))/864e5)+1;return r==null?o:this.add(r-o,"day")}};const PLe=_l(tse.exports);var nse={exports:{}};nse.exports=function(e,t){t.prototype.isSameOrAfter=function(n,r){return this.isSame(n,r)||this.isAfter(n,r)}};const LLe=_l(nse.exports);var rse={exports:{}};rse.exports=function(e,t){t.prototype.isSameOrBefore=function(n,r){return this.isSame(n,r)||this.isBefore(n,r)}};const jLe=_l(rse.exports),cR=Symbol(),VLe=Pt({...$9,type:{type:String,default:"date"}}),zLe=["date","dates","year","years","month","week","range"],dR=Pt({disabledDate:{type:Function},date:{type:Object,required:!0},minDate:{type:Object},maxDate:{type:Object},parsedValue:{type:[Object,Array]},rangeState:{type:Object,default:()=>({endDate:null,selecting:!1})}}),ose=Pt({type:{type:String,required:!0,values:["year","years","month","date","dates","week","datetime","datetimerange","daterange","monthrange"]},dateFormat:String,timeFormat:String}),ise=Pt({unlinkPanels:Boolean,parsedValue:{type:Array}}),fR=e=>({type:String,values:zLe,default:e}),HLe=Pt({...ose,parsedValue:{type:[Object,Array]},visible:{type:Boolean},format:{type:String,default:""}}),$Le=Pt({...dR,cellClassName:{type:Function},showWeekNumber:Boolean,selectionMode:fR("date")}),pR=e=>{if(!mt(e))return!1;const[t,n]=e;return vn.isDayjs(t)&&vn.isDayjs(n)&&t.isSameOrBefore(n)},ase=(e,{lang:t,unit:n,unlinkPanels:r})=>{let o;if(mt(e)){let[i,a]=e.map(l=>vn(l).locale(t));return r||(a=i.add(1,n)),[i,a]}return o=e?vn(e):vn(),o=o.locale(t),[o,o.add(1,n)]},hR=(e="")=>["normal","today"].includes(e),ULe=(e,t)=>{const{lang:n}=Gr(),r=de(),o=de(),i=de(),a=de(),l=de([[],[],[],[],[],[]]);let s=!1;const u=e.date.$locale().weekStart||7,c=e.date.locale("en").localeData().weekdaysShort().map(I=>I.toLowerCase()),d=ee(()=>u>3?7-u:-u),f=ee(()=>{const I=e.date.startOf("month");return I.subtract(I.day()||7,"day")}),p=ee(()=>c.concat(c).slice(u,u+7)),m=ee(()=>Pre(M(w)).some(I=>I.isCurrent)),v=ee(()=>{const I=e.date.startOf("month");return{startOfMonthDay:I.day()||7,dateCountOfMonth:I.daysInMonth(),dateCountOfLastMonth:I.subtract(1,"month").daysInMonth()}}),g=ee(()=>e.selectionMode==="dates"?Ml(e.parsedValue):[]),b=(I,{columnIndex:O,rowIndex:F},N)=>{const{disabledDate:B,cellClassName:P}=e,V=M(g),L=((U,{count:G,rowIndex:z,columnIndex:$})=>{const{startOfMonthDay:W,dateCountOfMonth:K,dateCountOfLastMonth:X}=M(v),te=M(d);if(!(z>=0&&z<=1))return G<=K?U.text=G:(U.text=G-K,U.type="next-month"),!0;{const ne=W+te<0?7+W+te:W+te;if($+7*z>=ne)return U.text=G,!0;U.text=X-(ne-$%7)+1+7*z,U.type="prev-month"}return!1})(I,{count:N,rowIndex:F,columnIndex:O}),H=I.dayjs.toDate();return I.selected=V.find(U=>U.isSame(I.dayjs,"day")),I.isSelected=!!I.selected,I.isCurrent=_(I),I.disabled=B==null?void 0:B(H),I.customClass=P==null?void 0:P(H),L},y=I=>{if(e.selectionMode==="week"){const[O,F]=e.showWeekNumber?[1,7]:[0,6],N=k(I[O+1]);I[O].inRange=N,I[O].start=N,I[F].inRange=N,I[F].end=N}},w=ee(()=>{const{minDate:I,maxDate:O,rangeState:F,showWeekNumber:N}=e,B=M(d),P=M(l),V="day";let L=1;if(N)for(let H=0;H<6;H++)P[H][0]||(P[H][0]={type:"week",text:M(f).add(7*H+1,V).week()});return((H,U,{columnIndexOffset:G,startDate:z,nextEndDate:$,now:W,unit:K,relativeDateGetter:X,setCellMetadata:te,setRowMetadata:ne})=>{for(let se=0;se<H.row;se++){const le=U[se];for(let J=0;J<H.column;J++){let Z=le[J+G];Z||(Z={row:se,column:J,type:"normal",inRange:!1,start:!1,end:!1});const ye=X(se*H.column+J);Z.dayjs=ye,Z.date=ye.toDate(),Z.timestamp=ye.valueOf(),Z.type="normal",Z.inRange=!!(z&&ye.isSameOrAfter(z,K)&&$&&ye.isSameOrBefore($,K))||!!(z&&ye.isSameOrBefore(z,K)&&$&&ye.isSameOrAfter($,K)),z!=null&&z.isSameOrAfter($)?(Z.start=!!$&&ye.isSame($,K),Z.end=z&&ye.isSame(z,K)):(Z.start=!!z&&ye.isSame(z,K),Z.end=!!$&&ye.isSame($,K)),ye.isSame(W,K)&&(Z.type="today"),te==null||te(Z,{rowIndex:se,columnIndex:J}),le[J+G]=Z}ne==null||ne(le)}})({row:6,column:7},P,{startDate:I,columnIndexOffset:N?1:0,nextEndDate:F.endDate||O||F.selecting&&I||null,now:vn().locale(M(n)).startOf(V),unit:V,relativeDateGetter:H=>M(f).add(H-B,V),setCellMetadata:(...H)=>{b(...H,L)&&(L+=1)},setRowMetadata:y}),P});Je(()=>e.date,async()=>{var I;(I=M(r))!=null&&I.contains(document.activeElement)&&(await St(),await x())});const x=async()=>{var I;return(I=M(o))==null?void 0:I.focus()},_=I=>e.selectionMode==="date"&&hR(I.type)&&E(I,e.parsedValue),E=(I,O)=>!!O&&vn(O).locale(M(n)).isSame(e.date.date(Number(I.text)),"day"),C=(I,O)=>{const F=7*I+(O-(e.showWeekNumber?1:0))-M(d);return M(f).add(F,"day")},T=(I,O=!1)=>{const F=I.target.closest("td");if(!F)return;const N=F.parentNode.rowIndex-1,B=F.cellIndex,P=M(w)[N][B];if(P.disabled||P.type==="week")return;const V=C(N,B);switch(e.selectionMode){case"range":(L=>{e.rangeState.selecting&&e.minDate?(L>=e.minDate?t("pick",{minDate:e.minDate,maxDate:L}):t("pick",{minDate:L,maxDate:e.minDate}),t("select",!1)):(t("pick",{minDate:L,maxDate:null}),t("select",!0))})(V);break;case"date":t("pick",V,O);break;case"week":(L=>{const H=L.week(),U=`${L.year()}w${H}`;t("pick",{year:L.year(),week:H,value:U,date:L.startOf("week")})})(V);break;case"dates":((L,H)=>{const U=H?Ml(e.parsedValue).filter(G=>(G==null?void 0:G.valueOf())!==L.valueOf()):Ml(e.parsedValue).concat([L]);t("pick",U)})(V,!!P.selected)}},k=I=>{if(e.selectionMode!=="week")return!1;let O=e.date.startOf("day");if(I.type==="prev-month"&&(O=O.subtract(1,"month")),I.type==="next-month"&&(O=O.add(1,"month")),O=O.date(Number.parseInt(I.text,10)),e.parsedValue&&!Array.isArray(e.parsedValue)){const F=(e.parsedValue.day()-u+7)%7-1;return e.parsedValue.subtract(F,"day").isSame(O,"day")}return!1};return{WEEKS:p,rows:w,tbodyRef:r,currentCellRef:o,focus:x,isCurrent:_,isWeekActive:k,isSelectedCell:I=>!M(m)&&(I==null?void 0:I.text)===1&&I.type==="normal"||I.isCurrent,handlePickDate:T,handleMouseUp:I=>{I.target.closest("td")&&(s=!1)},handleMouseDown:I=>{I.target.closest("td")&&(s=!0)},handleMouseMove:I=>{var O;if(!e.rangeState.selecting)return;let F=I.target;if(F.tagName==="SPAN"&&(F=(O=F.parentNode)==null?void 0:O.parentNode),F.tagName==="DIV"&&(F=F.parentNode),F.tagName!=="TD")return;const N=F.parentNode.rowIndex-1,B=F.cellIndex;M(w)[N][B].disabled||N===M(i)&&B===M(a)||(i.value=N,a.value=B,t("changerange",{selecting:!0,endDate:C(N,B)}))},handleFocus:I=>{s||M(m)||e.selectionMode!=="date"||T(I,!0)}}};var WLe=Te({name:"ElDatePickerCell",props:Pt({cell:{type:Object}}),setup(e){const t=_t("date-table-cell"),{slots:n}=Rt(cR);return()=>{const{cell:r}=e;return ft(n,"default",{...r},()=>[ie("div",{class:t.b()},[ie("span",{class:t.e("text")},[r==null?void 0:r.text])])])}}});const GLe=["aria-label"],qLe={key:0,scope:"col"},KLe=["aria-label"],YLe=["aria-current","aria-selected","tabindex"],XLe=Te({__name:"basic-date-table",props:$Le,emits:["changerange","pick","select"],setup(e,{expose:t,emit:n}){const r=e,{WEEKS:o,rows:i,tbodyRef:a,currentCellRef:l,focus:s,isCurrent:u,isWeekActive:c,isSelectedCell:d,handlePickDate:f,handleMouseUp:p,handleMouseDown:m,handleMouseMove:v,handleFocus:g}=ULe(r,n),{tableLabel:b,tableKls:y,weekLabel:w,getCellClasses:x,getRowKls:_,t:E}=((C,{isCurrent:T,isWeekActive:k})=>{const I=_t("date-table"),{t:O}=Gr();return{tableKls:ee(()=>[I.b(),{"is-week-mode":C.selectionMode==="week"}]),tableLabel:ee(()=>O("el.datepicker.dateTablePrompt")),weekLabel:ee(()=>O("el.datepicker.week")),getCellClasses:F=>{const N=[];return hR(F.type)&&!F.disabled?(N.push("available"),F.type==="today"&&N.push("today")):N.push(F.type),T(F)&&N.push("current"),F.inRange&&(hR(F.type)||C.selectionMode==="week")&&(N.push("in-range"),F.start&&N.push("start-date"),F.end&&N.push("end-date")),F.disabled&&N.push("disabled"),F.selected&&N.push("selected"),F.customClass&&N.push(F.customClass),N.join(" ")},getRowKls:F=>[I.e("row"),{current:k(F)}],t:O}})(r,{isCurrent:u,isWeekActive:c});return t({focus:s}),(C,T)=>(Y(),fe("table",{"aria-label":M(b),class:oe(M(y)),cellspacing:"0",cellpadding:"0",role:"grid",onClick:T[1]||(T[1]=(...k)=>M(f)&&M(f)(...k)),onMousemove:T[2]||(T[2]=(...k)=>M(v)&&M(v)(...k)),onMousedown:T[3]||(T[3]=Gt((...k)=>M(m)&&M(m)(...k),["prevent"])),onMouseup:T[4]||(T[4]=(...k)=>M(p)&&M(p)(...k))},[ce("tbody",{ref_key:"tbodyRef",ref:a},[ce("tr",null,[C.showWeekNumber?(Y(),fe("th",qLe,Ye(M(w)),1)):Fe("v-if",!0),(Y(!0),fe(bt,null,bn(M(o),(k,I)=>(Y(),fe("th",{key:I,"aria-label":M(E)("el.datepicker.weeksFull."+k),scope:"col"},Ye(M(E)("el.datepicker.weeks."+k)),9,KLe))),128))]),(Y(!0),fe(bt,null,bn(M(i),(k,I)=>(Y(),fe("tr",{key:I,class:oe(M(_)(k[1]))},[(Y(!0),fe(bt,null,bn(k,(O,F)=>(Y(),fe("td",{key:`${I}.${F}`,ref_for:!0,ref:N=>M(d)(O)&&(l.value=N),class:oe(M(x)(O)),"aria-current":O.isCurrent?"date":void 0,"aria-selected":O.isCurrent,tabindex:M(d)(O)?0:-1,onFocus:T[0]||(T[0]=(...N)=>M(g)&&M(g)(...N))},[ie(M(WLe),{cell:O},null,8,["cell"])],42,YLe))),128))],2))),128))],512)],42,GLe))}});var vR=Nt(XLe,[["__file","basic-date-table.vue"]]);const QLe=Pt({...dR,selectionMode:fR("month")}),JLe=["aria-label"],ZLe=["aria-selected","aria-label","tabindex","onKeydown"],eje={class:"cell"},tje=Te({__name:"basic-month-table",props:QLe,emits:["changerange","pick","select"],setup(e,{expose:t,emit:n}){const r=e,o=_t("month-table"),{t:i,lang:a}=Gr(),l=de(),s=de(),u=de(r.date.locale("en").localeData().monthsShort().map(y=>y.toLowerCase())),c=de([[],[],[]]),d=de(),f=de(),p=ee(()=>{var y,w;const x=c.value,_=vn().locale(a.value).startOf("month");for(let E=0;E<3;E++){const C=x[E];for(let T=0;T<4;T++){const k=C[T]||(C[T]={row:E,column:T,type:"normal",inRange:!1,start:!1,end:!1,text:-1,disabled:!1});k.type="normal";const I=4*E+T,O=r.date.startOf("year").month(I),F=r.rangeState.endDate||r.maxDate||r.rangeState.selecting&&r.minDate||null;k.inRange=!!(r.minDate&&O.isSameOrAfter(r.minDate,"month")&&F&&O.isSameOrBefore(F,"month"))||!!(r.minDate&&O.isSameOrBefore(r.minDate,"month")&&F&&O.isSameOrAfter(F,"month")),(y=r.minDate)!=null&&y.isSameOrAfter(F)?(k.start=!(!F||!O.isSame(F,"month")),k.end=r.minDate&&O.isSame(r.minDate,"month")):(k.start=!(!r.minDate||!O.isSame(r.minDate,"month")),k.end=!(!F||!O.isSame(F,"month"))),_.isSame(O)&&(k.type="today"),k.text=I,k.disabled=((w=r.disabledDate)==null?void 0:w.call(r,O.toDate()))||!1}}return x}),m=y=>{const w={},x=r.date.year(),_=new Date,E=y.text;return w.disabled=!!r.disabledDate&&((C,T,k)=>{const I=vn().locale(k).startOf("month").month(T).year(C),O=I.daysInMonth();return FF(O).map(F=>I.add(F,"day").toDate())})(x,E,a.value).every(r.disabledDate),w.current=Ml(r.parsedValue).findIndex(C=>vn.isDayjs(C)&&C.year()===x&&C.month()===E)>=0,w.today=_.getFullYear()===x&&_.getMonth()===E,y.inRange&&(w["in-range"]=!0,y.start&&(w["start-date"]=!0),y.end&&(w["end-date"]=!0)),w},v=y=>{const w=r.date.year(),x=y.text;return Ml(r.date).findIndex(_=>_.year()===w&&_.month()===x)>=0},g=y=>{var w;if(!r.rangeState.selecting)return;let x=y.target;if(x.tagName==="SPAN"&&(x=(w=x.parentNode)==null?void 0:w.parentNode),x.tagName==="DIV"&&(x=x.parentNode),x.tagName!=="TD")return;const _=x.parentNode.rowIndex,E=x.cellIndex;p.value[_][E].disabled||_===d.value&&E===f.value||(d.value=_,f.value=E,n("changerange",{selecting:!0,endDate:r.date.startOf("year").month(4*_+E)}))},b=y=>{var w;const x=(w=y.target)==null?void 0:w.closest("td");if((x==null?void 0:x.tagName)!=="TD"||Hs(x,"disabled"))return;const _=x.cellIndex,E=4*x.parentNode.rowIndex+_,C=r.date.startOf("year").month(E);r.selectionMode==="range"?r.rangeState.selecting?(r.minDate&&C>=r.minDate?n("pick",{minDate:r.minDate,maxDate:C}):n("pick",{minDate:C,maxDate:r.minDate}),n("select",!1)):(n("pick",{minDate:C,maxDate:null}),n("select",!0)):n("pick",E)};return Je(()=>r.date,async()=>{var y,w;(y=l.value)!=null&&y.contains(document.activeElement)&&(await St(),(w=s.value)==null||w.focus())}),t({focus:()=>{var y;(y=s.value)==null||y.focus()}}),(y,w)=>(Y(),fe("table",{role:"grid","aria-label":M(i)("el.datepicker.monthTablePrompt"),class:oe(M(o).b()),onClick:b,onMousemove:g},[ce("tbody",{ref_key:"tbodyRef",ref:l},[(Y(!0),fe(bt,null,bn(M(p),(x,_)=>(Y(),fe("tr",{key:_},[(Y(!0),fe(bt,null,bn(x,(E,C)=>(Y(),fe("td",{key:C,ref_for:!0,ref:T=>v(E)&&(s.value=T),class:oe(m(E)),"aria-selected":`${v(E)}`,"aria-label":M(i)("el.datepicker.month"+(+E.text+1)),tabindex:v(E)?0:-1,onKeydown:[Rr(Gt(b,["prevent","stop"]),["space"]),Rr(Gt(b,["prevent","stop"]),["enter"])]},[ce("div",null,[ce("span",eje,Ye(M(i)("el.datepicker.months."+u.value[E.text])),1)])],42,ZLe))),128))]))),128))],512)],42,JLe))}});var mR=Nt(tje,[["__file","basic-month-table.vue"]]);const{date:nje,disabledDate:rje,parsedValue:oje}=dR,ije=Pt({date:nje,disabledDate:rje,parsedValue:oje,selectionMode:fR("year")}),aje=["aria-label"],lje=["aria-selected","tabindex","onKeydown"],sje={class:"cell"},uje={key:1},cje=Te({__name:"basic-year-table",props:ije,emits:["pick"],setup(e,{expose:t,emit:n}){const r=e,o=_t("year-table"),{t:i,lang:a}=Gr(),l=de(),s=de(),u=ee(()=>10*Math.floor(r.date.year()/10)),c=p=>{const m={},v=vn().locale(a.value);return m.disabled=!!r.disabledDate&&((g,b)=>{const y=vn(String(g)).locale(b).startOf("year"),w=y.endOf("year").dayOfYear();return FF(w).map(x=>y.add(x,"day").toDate())})(p,a.value).every(r.disabledDate),m.current=Ml(r.parsedValue).findIndex(g=>g.year()===p)>=0,m.today=v.year()===p,m},d=p=>p===u.value&&r.date.year()<u.value&&r.date.year()>u.value+9||Ml(r.date).findIndex(m=>m.year()===p)>=0||Ml(r.parsedValue).findIndex(m=>(m==null?void 0:m.year())===p)>=0,f=p=>{const m=p.target.closest("td");if(m&&m.textContent){if(Hs(m,"disabled"))return;const v=m.textContent||m.innerText;if(r.selectionMode==="years"){if(p.type==="keydown")return void n("pick",Ml(r.parsedValue),!1);const g=Hs(m,"current")?Ml(r.parsedValue).filter(b=>(b==null?void 0:b.year())!==Number(v)):Ml(r.parsedValue).concat([vn(v)]);n("pick",g)}else n("pick",Number(v))}};return Je(()=>r.date,async()=>{var p,m;(p=l.value)!=null&&p.contains(document.activeElement)&&(await St(),(m=s.value)==null||m.focus())}),t({focus:()=>{var p;(p=s.value)==null||p.focus()}}),(p,m)=>(Y(),fe("table",{role:"grid","aria-label":M(i)("el.datepicker.yearTablePrompt"),class:oe(M(o).b()),onClick:f},[ce("tbody",{ref_key:"tbodyRef",ref:l},[(Y(),fe(bt,null,bn(3,(v,g)=>ce("tr",{key:g},[(Y(),fe(bt,null,bn(4,(b,y)=>(Y(),fe(bt,{key:g+"_"+y},[4*g+y<10?(Y(),fe("td",{key:0,ref_for:!0,ref:w=>d(M(u)+4*g+y)&&(s.value=w),class:oe(["available",c(M(u)+4*g+y)]),"aria-selected":`${d(M(u)+4*g+y)}`,tabindex:d(M(u)+4*g+y)?0:-1,onKeydown:[Rr(Gt(f,["prevent","stop"]),["space"]),Rr(Gt(f,["prevent","stop"]),["enter"])]},[ce("div",null,[ce("span",sje,Ye(M(u)+4*g+y),1)])],42,lje)):(Y(),fe("td",uje))],64))),64))])),64))],512)],10,aje))}});var dje=Nt(cje,[["__file","basic-year-table.vue"]]);const fje=["onClick"],pje=["aria-label"],hje=["aria-label"],vje=["aria-label"],mje=["aria-label"],gje=Te({__name:"panel-date-pick",props:HLe,emits:["pick","set-picker-option","panel-change"],setup(e,{emit:t}){const n=e,r=_t("picker-panel"),o=_t("date-picker"),i=yc(),a=Ga(),{t:l,lang:s}=Gr(),u=Rt("EP_PICKER_BASE"),c=Rt(J3),{shortcuts:d,disabledDate:f,cellClassName:p,defaultTime:m}=u.props,v=dr(u.props,"defaultValue"),g=de(),b=de(vn().locale(s.value)),y=de(!1);let w=!1;const x=ee(()=>vn(m).locale(s.value)),_=ee(()=>b.value.month()),E=ee(()=>b.value.year()),C=de([]),T=de(null),k=de(null),I=Ve=>!(C.value.length>0)||(C.value,n.format,!0),O=Ve=>!m||ye.value||y.value||w?K.value?Ve.millisecond(0):Ve.startOf("day"):x.value.year(Ve.year()).month(Ve.month()).date(Ve.date()),F=(Ve,...it)=>{if(Ve)if(mt(Ve)){const dt=Ve.map(O);t("pick",dt,...it)}else t("pick",O(Ve),...it);else t("pick",Ve,...it);T.value=null,k.value=null,y.value=!1,w=!1},N=async(Ve,it)=>{if(H.value==="date"){let dt=n.parsedValue?n.parsedValue.year(Ve.year()).month(Ve.month()).date(Ve.date()):Ve;I()||(dt=C.value[0][0].year(Ve.year()).month(Ve.month()).date(Ve.date())),b.value=dt,F(dt,K.value||it),n.type==="datetime"&&(await St(),ge())}else H.value==="week"?F(Ve.date):H.value==="dates"&&F(Ve,!0)},B=Ve=>{const it=Ve?"add":"subtract";b.value=b.value[it](1,"month"),At("month")},P=Ve=>{const it=b.value,dt=Ve?"add":"subtract";b.value=V.value==="year"?it[dt](10,"year"):it[dt](1,"year"),At("year")},V=de("date"),L=ee(()=>{const Ve=l("el.datepicker.year");if(V.value==="year"){const it=10*Math.floor(E.value/10);return Ve?`${it} ${Ve} - ${it+9} ${Ve}`:`${it} - ${it+9}`}return`${E.value} ${Ve}`}),H=ee(()=>{const{type:Ve}=n;return["week","month","year","years","dates"].includes(Ve)?Ve:"date"}),U=ee(()=>H.value==="date"?V.value:H.value),G=ee(()=>!!d.length),z=async Ve=>{b.value=b.value.startOf("month").month(Ve),H.value==="month"?F(b.value,!1):(V.value="date",["month","year","date","week"].includes(H.value)&&(F(b.value,!0),await St(),ge())),At("month")},$=async(Ve,it)=>{H.value==="year"?(b.value=b.value.startOf("year").year(Ve),F(b.value,!1)):H.value==="years"?F(Ve,it==null||it):(b.value=b.value.year(Ve),V.value="month",["month","year","date","week"].includes(H.value)&&(F(b.value,!0),await St(),ge())),At("year")},W=async Ve=>{V.value=Ve,await St(),ge()},K=ee(()=>n.type==="datetime"||n.type==="datetimerange"),X=ee(()=>{const Ve=K.value||H.value==="dates",it=H.value==="years",dt=V.value==="date",ot=V.value==="year";return Ve&&dt||it&&ot}),te=ee(()=>!!f&&(!n.parsedValue||(mt(n.parsedValue)?f(n.parsedValue[0].toDate()):f(n.parsedValue.toDate())))),ne=()=>{if(H.value==="dates"||H.value==="years")F(n.parsedValue);else{let Ve=n.parsedValue;if(!Ve){const it=vn(m).locale(s.value),dt=rt();Ve=it.year(dt.year()).month(dt.month()).date(dt.date())}b.value=Ve,F(Ve)}},se=ee(()=>!!f&&f(vn().locale(s.value).toDate())),le=()=>{const Ve=vn().locale(s.value).toDate();y.value=!0,f&&f(Ve)||!I()||(b.value=vn().locale(s.value),F(b.value))},J=ee(()=>n.timeFormat||IF(n.format)),Z=ee(()=>n.dateFormat||RF(n.format)),ye=ee(()=>k.value?k.value:n.parsedValue||v.value?(n.parsedValue||b.value).format(J.value):void 0),be=ee(()=>T.value?T.value:n.parsedValue||v.value?(n.parsedValue||b.value).format(Z.value):void 0),ve=de(!1),Ae=()=>{ve.value=!0},Ce=()=>{ve.value=!1},_e=Ve=>({hour:Ve.hour(),minute:Ve.minute(),second:Ve.second(),year:Ve.year(),month:Ve.month(),date:Ve.date()}),ke=(Ve,it,dt)=>{const{hour:ot,minute:je,second:we}=_e(Ve),ze=n.parsedValue?n.parsedValue.hour(ot).minute(je).second(we):Ve;b.value=ze,F(b.value,!0),dt||(ve.value=it)},Be=Ve=>{const it=vn(Ve,J.value).locale(s.value);if(it.isValid()&&I()){const{year:dt,month:ot,date:je}=_e(b.value);b.value=it.year(dt).month(ot).date(je),k.value=null,ve.value=!1,F(b.value,!0)}},$e=Ve=>{const it=vn(Ve,Z.value).locale(s.value);if(it.isValid()){if(f&&f(it.toDate()))return;const{hour:dt,minute:ot,second:je}=_e(b.value);b.value=it.hour(dt).minute(ot).second(je),T.value=null,F(b.value,!0)}},rt=()=>{const Ve=vn(v.value).locale(s.value);if(!v.value){const it=x.value;return vn().hour(it.hour()).minute(it.minute()).second(it.second()).locale(s.value)}return Ve},ge=async()=>{var Ve;["week","month","year","date"].includes(H.value)&&((Ve=g.value)==null||Ve.focus(),H.value==="week"&&st(Xt.down))},We=Ve=>{const{code:it}=Ve;[Xt.up,Xt.down,Xt.left,Xt.right,Xt.home,Xt.end,Xt.pageUp,Xt.pageDown].includes(it)&&(st(it),Ve.stopPropagation(),Ve.preventDefault()),[Xt.enter,Xt.space,Xt.numpadEnter].includes(it)&&T.value===null&&k.value===null&&(Ve.preventDefault(),F(b.value,!1))},st=Ve=>{var it;const{up:dt,down:ot,left:je,right:we,home:ze,end:me,pageUp:Me,pageDown:Ie}=Xt,ht={year:{[dt]:-4,[ot]:4,[je]:-1,[we]:1,offset:(vt,qt)=>vt.setFullYear(vt.getFullYear()+qt)},month:{[dt]:-4,[ot]:4,[je]:-1,[we]:1,offset:(vt,qt)=>vt.setMonth(vt.getMonth()+qt)},week:{[dt]:-1,[ot]:1,[je]:-1,[we]:1,offset:(vt,qt)=>vt.setDate(vt.getDate()+7*qt)},date:{[dt]:-7,[ot]:7,[je]:-1,[we]:1,[ze]:vt=>-vt.getDay(),[me]:vt=>6-vt.getDay(),[Me]:vt=>-new Date(vt.getFullYear(),vt.getMonth(),0).getDate(),[Ie]:vt=>new Date(vt.getFullYear(),vt.getMonth()+1,0).getDate(),offset:(vt,qt)=>vt.setDate(vt.getDate()+qt)}},gt=b.value.toDate();for(;Math.abs(b.value.diff(gt,"year",!0))<1;){const vt=ht[U.value];if(!vt)return;if(vt.offset(gt,Ut(vt[Ve])?vt[Ve](gt):(it=vt[Ve])!=null?it:0),f&&f(gt))break;const qt=vn(gt).locale(s.value);b.value=qt,t("pick",qt,!0);break}},At=Ve=>{t("panel-change",b.value.toDate(),Ve,V.value)};return Je(()=>H.value,Ve=>{["month","year"].includes(Ve)?V.value=Ve:V.value=Ve!=="years"?"date":"year"},{immediate:!0}),Je(()=>V.value,()=>{c==null||c.updatePopper()}),Je(()=>v.value,Ve=>{Ve&&(b.value=rt())},{immediate:!0}),Je(()=>n.parsedValue,Ve=>{if(Ve){if(H.value==="dates"||H.value==="years"||Array.isArray(Ve))return;b.value=Ve}else b.value=rt()},{immediate:!0}),t("set-picker-option",["isValidValue",Ve=>vn.isDayjs(Ve)&&Ve.isValid()&&(!f||!f(Ve.toDate()))]),t("set-picker-option",["formatToString",Ve=>mt(Ve)?Ve.map(it=>it.format(n.format)):Ve.format(n.format)]),t("set-picker-option",["parseUserInput",Ve=>vn(Ve,n.format).locale(s.value)]),t("set-picker-option",["handleFocusPicker",ge]),(Ve,it)=>(Y(),fe("div",{class:oe([M(r).b(),M(o).b(),{"has-sidebar":Ve.$slots.sidebar||M(G),"has-time":M(K)}])},[ce("div",{class:oe(M(r).e("body-wrapper"))},[ft(Ve.$slots,"sidebar",{class:oe(M(r).e("sidebar"))}),M(G)?(Y(),fe("div",{key:0,class:oe(M(r).e("sidebar"))},[(Y(!0),fe(bt,null,bn(M(d),(dt,ot)=>(Y(),fe("button",{key:ot,type:"button",class:oe(M(r).e("shortcut")),onClick:je=>(we=>{const ze=Ut(we.value)?we.value():we.value;if(ze)return w=!0,void F(vn(ze).locale(s.value));we.onClick&&we.onClick({attrs:i,slots:a,emit:t})})(dt)},Ye(dt.text),11,fje))),128))],2)):Fe("v-if",!0),ce("div",{class:oe(M(r).e("body"))},[M(K)?(Y(),fe("div",{key:0,class:oe(M(o).e("time-header"))},[ce("span",{class:oe(M(o).e("editor-wrap"))},[ie(M(ua),{placeholder:M(l)("el.datepicker.selectDate"),"model-value":M(be),size:"small","validate-event":!1,onInput:it[0]||(it[0]=dt=>T.value=dt),onChange:$e},null,8,["placeholder","model-value"])],2),nn((Y(),fe("span",{class:oe(M(o).e("editor-wrap"))},[ie(M(ua),{placeholder:M(l)("el.datepicker.selectTime"),"model-value":M(ye),size:"small","validate-event":!1,onFocus:Ae,onInput:it[1]||(it[1]=dt=>k.value=dt),onChange:Be},null,8,["placeholder","model-value"]),ie(M(K9),{visible:ve.value,format:M(J),"parsed-value":b.value,onPick:ke},null,8,["visible","format","parsed-value"])],2)),[[M(Rf),Ce]])],2)):Fe("v-if",!0),nn(ce("div",{class:oe([M(o).e("header"),(V.value==="year"||V.value==="month")&&M(o).e("header--bordered")])},[ce("span",{class:oe(M(o).e("prev-btn"))},[ce("button",{type:"button","aria-label":M(l)("el.datepicker.prevYear"),class:oe(["d-arrow-left",M(r).e("icon-btn")]),onClick:it[2]||(it[2]=dt=>P(!1))},[ie(M(Ft),null,{default:he(()=>[ie(M(wm))]),_:1})],10,pje),nn(ce("button",{type:"button","aria-label":M(l)("el.datepicker.prevMonth"),class:oe([M(r).e("icon-btn"),"arrow-left"]),onClick:it[3]||(it[3]=dt=>B(!1))},[ie(M(Ft),null,{default:he(()=>[ie(M(m0))]),_:1})],10,hje),[[$n,V.value==="date"]])],2),ce("span",{role:"button",class:oe(M(o).e("header-label")),"aria-live":"polite",tabindex:"0",onKeydown:it[4]||(it[4]=Rr(dt=>W("year"),["enter"])),onClick:it[5]||(it[5]=dt=>W("year"))},Ye(M(L)),35),nn(ce("span",{role:"button","aria-live":"polite",tabindex:"0",class:oe([M(o).e("header-label"),{active:V.value==="month"}]),onKeydown:it[6]||(it[6]=Rr(dt=>W("month"),["enter"])),onClick:it[7]||(it[7]=dt=>W("month"))},Ye(M(l)(`el.datepicker.month${M(_)+1}`)),35),[[$n,V.value==="date"]]),ce("span",{class:oe(M(o).e("next-btn"))},[nn(ce("button",{type:"button","aria-label":M(l)("el.datepicker.nextMonth"),class:oe([M(r).e("icon-btn"),"arrow-right"]),onClick:it[8]||(it[8]=dt=>B(!0))},[ie(M(Ft),null,{default:he(()=>[ie(M(Su))]),_:1})],10,vje),[[$n,V.value==="date"]]),ce("button",{type:"button","aria-label":M(l)("el.datepicker.nextYear"),class:oe([M(r).e("icon-btn"),"d-arrow-right"]),onClick:it[9]||(it[9]=dt=>P(!0))},[ie(M(Ft),null,{default:he(()=>[ie(M(xm))]),_:1})],10,mje)],2)],2),[[$n,V.value!=="time"]]),ce("div",{class:oe(M(r).e("content")),onKeydown:We},[V.value==="date"?(Y(),Le(vR,{key:0,ref_key:"currentViewRef",ref:g,"selection-mode":M(H),date:b.value,"parsed-value":Ve.parsedValue,"disabled-date":M(f),"cell-class-name":M(p),onPick:N},null,8,["selection-mode","date","parsed-value","disabled-date","cell-class-name"])):Fe("v-if",!0),V.value==="year"?(Y(),Le(dje,{key:1,ref_key:"currentViewRef",ref:g,"selection-mode":M(H),date:b.value,"disabled-date":M(f),"parsed-value":Ve.parsedValue,onPick:$},null,8,["selection-mode","date","disabled-date","parsed-value"])):Fe("v-if",!0),V.value==="month"?(Y(),Le(mR,{key:2,ref_key:"currentViewRef",ref:g,date:b.value,"parsed-value":Ve.parsedValue,"disabled-date":M(f),onPick:z},null,8,["date","parsed-value","disabled-date"])):Fe("v-if",!0)],34)],2)],2),nn(ce("div",{class:oe(M(r).e("footer"))},[nn(ie(M(Sa),{text:"",size:"small",class:oe(M(r).e("link-btn")),disabled:M(se),onClick:le},{default:he(()=>[Dt(Ye(M(l)("el.datepicker.now")),1)]),_:1},8,["class","disabled"]),[[$n,M(H)!=="dates"&&M(H)!=="years"]]),ie(M(Sa),{plain:"",size:"small",class:oe(M(r).e("link-btn")),disabled:M(te),onClick:ne},{default:he(()=>[Dt(Ye(M(l)("el.datepicker.confirm")),1)]),_:1},8,["class","disabled"])],2),[[$n,M(X)]])],2))}});var yje=Nt(gje,[["__file","panel-date-pick.vue"]]);const bje=Pt({...ose,...ise}),lse=(e,{defaultValue:t,leftDate:n,rightDate:r,unit:o,onParsedValueChanged:i})=>{const{emit:a}=dn(),{pickerNs:l}=Rt(cR),s=_t("date-range-picker"),{t:u,lang:c}=Gr(),d=(g=>{const{emit:b}=dn(),y=yc(),w=Ga();return x=>{const _=Ut(x.value)?x.value():x.value;_?b("pick",[vn(_[0]).locale(g.value),vn(_[1]).locale(g.value)]):x.onClick&&x.onClick({attrs:y,slots:w,emit:b})}})(c),f=de(),p=de(),m=de({endDate:null,selecting:!1}),v=()=>{const[g,b]=ase(M(t),{lang:M(c),unit:o,unlinkPanels:e.unlinkPanels});f.value=void 0,p.value=void 0,n.value=g,r.value=b};return Je(t,g=>{g&&v()},{immediate:!0}),Je(()=>e.parsedValue,g=>{if(mt(g)&&g.length===2){const[b,y]=g;f.value=b,n.value=b,p.value=y,i(M(f),M(p))}else v()},{immediate:!0}),{minDate:f,maxDate:p,rangeState:m,lang:c,ppNs:l,drpNs:s,handleChangeRange:g=>{m.value=g},handleRangeConfirm:(g=!1)=>{const b=M(f),y=M(p);pR([b,y])&&a("pick",[b,y],g)},handleShortcutClick:d,onSelect:g=>{m.value.selecting=g,g||(m.value.endDate=null)},t:u}},Aje=["onClick"],wje=["aria-label"],xje=["aria-label"],_je=["disabled","aria-label"],Eje=["disabled","aria-label"],Cje=["disabled","aria-label"],Sje=["disabled","aria-label"],kje=["aria-label"],Dje=["aria-label"],ex="month",Oje=Te({__name:"panel-date-range",props:bje,emits:["pick","set-picker-option","calendar-change","panel-change"],setup(e,{emit:t}){const n=e,r=Rt("EP_PICKER_BASE"),{disabledDate:o,cellClassName:i,format:a,defaultTime:l,clearable:s}=r.props,u=dr(r.props,"shortcuts"),c=dr(r.props,"defaultValue"),{lang:d}=Gr(),f=de(vn().locale(d.value)),p=de(vn().locale(d.value).add(1,ex)),{minDate:m,maxDate:v,rangeState:g,ppNs:b,drpNs:y,handleChangeRange:w,handleRangeConfirm:x,handleShortcutClick:_,onSelect:E,t:C}=lse(n,{defaultValue:c,leftDate:f,rightDate:p,unit:ex,onParsedValueChanged:function(ot,je){if(n.unlinkPanels&&je){const we=(ot==null?void 0:ot.year())||0,ze=(ot==null?void 0:ot.month())||0,me=je.year(),Me=je.month();p.value=we===me&&ze===Me?je.add(1,ex):je}else p.value=f.value.add(1,ex),je&&(p.value=p.value.hour(je.hour()).minute(je.minute()).second(je.second()))}}),T=de({min:null,max:null}),k=de({min:null,max:null}),I=ee(()=>`${f.value.year()} ${C("el.datepicker.year")} ${C(`el.datepicker.month${f.value.month()+1}`)}`),O=ee(()=>`${p.value.year()} ${C("el.datepicker.year")} ${C(`el.datepicker.month${p.value.month()+1}`)}`),F=ee(()=>f.value.year()),N=ee(()=>f.value.month()),B=ee(()=>p.value.year()),P=ee(()=>p.value.month()),V=ee(()=>!!u.value.length),L=ee(()=>T.value.min!==null?T.value.min:m.value?m.value.format($.value):""),H=ee(()=>T.value.max!==null?T.value.max:v.value||m.value?(v.value||m.value).format($.value):""),U=ee(()=>k.value.min!==null?k.value.min:m.value?m.value.format(z.value):""),G=ee(()=>k.value.max!==null?k.value.max:v.value||m.value?(v.value||m.value).format(z.value):""),z=ee(()=>n.timeFormat||IF(a)),$=ee(()=>n.dateFormat||RF(a)),W=()=>{f.value=f.value.subtract(1,"year"),n.unlinkPanels||(p.value=f.value.add(1,"month")),Z("year")},K=()=>{f.value=f.value.subtract(1,"month"),n.unlinkPanels||(p.value=f.value.add(1,"month")),Z("month")},X=()=>{n.unlinkPanels?p.value=p.value.add(1,"year"):(f.value=f.value.add(1,"year"),p.value=f.value.add(1,"month")),Z("year")},te=()=>{n.unlinkPanels?p.value=p.value.add(1,"month"):(f.value=f.value.add(1,"month"),p.value=f.value.add(1,"month")),Z("month")},ne=()=>{f.value=f.value.add(1,"year"),Z("year")},se=()=>{f.value=f.value.add(1,"month"),Z("month")},le=()=>{p.value=p.value.subtract(1,"year"),Z("year")},J=()=>{p.value=p.value.subtract(1,"month"),Z("month")},Z=ot=>{t("panel-change",[f.value.toDate(),p.value.toDate()],ot)},ye=ee(()=>{const ot=(N.value+1)%12,je=N.value+1>=12?1:0;return n.unlinkPanels&&new Date(F.value+je,ot)<new Date(B.value,P.value)}),be=ee(()=>n.unlinkPanels&&12*B.value+P.value-(12*F.value+N.value+1)>=12),ve=ee(()=>!(m.value&&v.value&&!g.value.selecting&&pR([m.value,v.value]))),Ae=ee(()=>n.type==="datetime"||n.type==="datetimerange"),Ce=(ot,je)=>{if(ot)return l?vn(l[je]||l).locale(d.value).year(ot.year()).month(ot.month()).date(ot.date()):ot},_e=(ot,je=!0)=>{const we=ot.minDate,ze=ot.maxDate,me=Ce(we,0),Me=Ce(ze,1);v.value===Me&&m.value===me||(t("calendar-change",[we.toDate(),ze&&ze.toDate()]),v.value=Me,m.value=me,je&&!Ae.value&&x())},ke=de(!1),Be=de(!1),$e=()=>{ke.value=!1},rt=()=>{Be.value=!1},ge=(ot,je)=>{T.value[je]=ot;const we=vn(ot,$.value).locale(d.value);if(we.isValid()){if(o&&o(we.toDate()))return;je==="min"?(f.value=we,m.value=(m.value||f.value).year(we.year()).month(we.month()).date(we.date()),n.unlinkPanels||v.value&&!v.value.isBefore(m.value)||(p.value=we.add(1,"month"),v.value=m.value.add(1,"month"))):(p.value=we,v.value=(v.value||p.value).year(we.year()).month(we.month()).date(we.date()),n.unlinkPanels||m.value&&!m.value.isAfter(v.value)||(f.value=we.subtract(1,"month"),m.value=v.value.subtract(1,"month")))}},We=(ot,je)=>{T.value[je]=null},st=(ot,je)=>{k.value[je]=ot;const we=vn(ot,z.value).locale(d.value);we.isValid()&&(je==="min"?(ke.value=!0,m.value=(m.value||f.value).hour(we.hour()).minute(we.minute()).second(we.second()),v.value&&!v.value.isBefore(m.value)||(v.value=m.value)):(Be.value=!0,v.value=(v.value||p.value).hour(we.hour()).minute(we.minute()).second(we.second()),p.value=v.value,v.value&&v.value.isBefore(m.value)&&(m.value=v.value)))},At=(ot,je)=>{k.value[je]=null,je==="min"?(f.value=m.value,ke.value=!1):(p.value=v.value,Be.value=!1)},Ve=(ot,je,we)=>{k.value.min||(ot&&(f.value=ot,m.value=(m.value||f.value).hour(ot.hour()).minute(ot.minute()).second(ot.second())),we||(ke.value=je),v.value&&!v.value.isBefore(m.value)||(v.value=m.value,p.value=ot))},it=(ot,je,we)=>{k.value.max||(ot&&(p.value=ot,v.value=(v.value||p.value).hour(ot.hour()).minute(ot.minute()).second(ot.second())),we||(Be.value=je),v.value&&v.value.isBefore(m.value)&&(m.value=v.value))},dt=()=>{f.value=ase(M(c),{lang:M(d),unit:"month",unlinkPanels:n.unlinkPanels})[0],p.value=f.value.add(1,"month"),v.value=void 0,m.value=void 0,t("pick",null)};return t("set-picker-option",["isValidValue",ot=>pR(ot)&&(!o||!o(ot[0].toDate())&&!o(ot[1].toDate()))]),t("set-picker-option",["parseUserInput",ot=>mt(ot)?ot.map(je=>vn(je,a).locale(d.value)):vn(ot,a).locale(d.value)]),t("set-picker-option",["formatToString",ot=>mt(ot)?ot.map(je=>je.format(a)):ot.format(a)]),t("set-picker-option",["handleClear",dt]),(ot,je)=>(Y(),fe("div",{class:oe([M(b).b(),M(y).b(),{"has-sidebar":ot.$slots.sidebar||M(V),"has-time":M(Ae)}])},[ce("div",{class:oe(M(b).e("body-wrapper"))},[ft(ot.$slots,"sidebar",{class:oe(M(b).e("sidebar"))}),M(V)?(Y(),fe("div",{key:0,class:oe(M(b).e("sidebar"))},[(Y(!0),fe(bt,null,bn(M(u),(we,ze)=>(Y(),fe("button",{key:ze,type:"button",class:oe(M(b).e("shortcut")),onClick:me=>M(_)(we)},Ye(we.text),11,Aje))),128))],2)):Fe("v-if",!0),ce("div",{class:oe(M(b).e("body"))},[M(Ae)?(Y(),fe("div",{key:0,class:oe(M(y).e("time-header"))},[ce("span",{class:oe(M(y).e("editors-wrap"))},[ce("span",{class:oe(M(y).e("time-picker-wrap"))},[ie(M(ua),{size:"small",disabled:M(g).selecting,placeholder:M(C)("el.datepicker.startDate"),class:oe(M(y).e("editor")),"model-value":M(L),"validate-event":!1,onInput:je[0]||(je[0]=we=>ge(we,"min")),onChange:je[1]||(je[1]=we=>We(0,"min"))},null,8,["disabled","placeholder","class","model-value"])],2),nn((Y(),fe("span",{class:oe(M(y).e("time-picker-wrap"))},[ie(M(ua),{size:"small",class:oe(M(y).e("editor")),disabled:M(g).selecting,placeholder:M(C)("el.datepicker.startTime"),"model-value":M(U),"validate-event":!1,onFocus:je[2]||(je[2]=we=>ke.value=!0),onInput:je[3]||(je[3]=we=>st(we,"min")),onChange:je[4]||(je[4]=we=>At(0,"min"))},null,8,["class","disabled","placeholder","model-value"]),ie(M(K9),{visible:ke.value,format:M(z),"datetime-role":"start","parsed-value":f.value,onPick:Ve},null,8,["visible","format","parsed-value"])],2)),[[M(Rf),$e]])],2),ce("span",null,[ie(M(Ft),null,{default:he(()=>[ie(M(Su))]),_:1})]),ce("span",{class:oe([M(y).e("editors-wrap"),"is-right"])},[ce("span",{class:oe(M(y).e("time-picker-wrap"))},[ie(M(ua),{size:"small",class:oe(M(y).e("editor")),disabled:M(g).selecting,placeholder:M(C)("el.datepicker.endDate"),"model-value":M(H),readonly:!M(m),"validate-event":!1,onInput:je[5]||(je[5]=we=>ge(we,"max")),onChange:je[6]||(je[6]=we=>We(0,"max"))},null,8,["class","disabled","placeholder","model-value","readonly"])],2),nn((Y(),fe("span",{class:oe(M(y).e("time-picker-wrap"))},[ie(M(ua),{size:"small",class:oe(M(y).e("editor")),disabled:M(g).selecting,placeholder:M(C)("el.datepicker.endTime"),"model-value":M(G),readonly:!M(m),"validate-event":!1,onFocus:je[7]||(je[7]=we=>M(m)&&(Be.value=!0)),onInput:je[8]||(je[8]=we=>st(we,"max")),onChange:je[9]||(je[9]=we=>At(0,"max"))},null,8,["class","disabled","placeholder","model-value","readonly"]),ie(M(K9),{"datetime-role":"end",visible:Be.value,format:M(z),"parsed-value":p.value,onPick:it},null,8,["visible","format","parsed-value"])],2)),[[M(Rf),rt]])],2)],2)):Fe("v-if",!0),ce("div",{class:oe([[M(b).e("content"),M(y).e("content")],"is-left"])},[ce("div",{class:oe(M(y).e("header"))},[ce("button",{type:"button",class:oe([M(b).e("icon-btn"),"d-arrow-left"]),"aria-label":M(C)("el.datepicker.prevYear"),onClick:W},[ie(M(Ft),null,{default:he(()=>[ie(M(wm))]),_:1})],10,wje),ce("button",{type:"button",class:oe([M(b).e("icon-btn"),"arrow-left"]),"aria-label":M(C)("el.datepicker.prevMonth"),onClick:K},[ie(M(Ft),null,{default:he(()=>[ie(M(m0))]),_:1})],10,xje),ot.unlinkPanels?(Y(),fe("button",{key:0,type:"button",disabled:!M(be),class:oe([[M(b).e("icon-btn"),{"is-disabled":!M(be)}],"d-arrow-right"]),"aria-label":M(C)("el.datepicker.nextYear"),onClick:ne},[ie(M(Ft),null,{default:he(()=>[ie(M(xm))]),_:1})],10,_je)):Fe("v-if",!0),ot.unlinkPanels?(Y(),fe("button",{key:1,type:"button",disabled:!M(ye),class:oe([[M(b).e("icon-btn"),{"is-disabled":!M(ye)}],"arrow-right"]),"aria-label":M(C)("el.datepicker.nextMonth"),onClick:se},[ie(M(Ft),null,{default:he(()=>[ie(M(Su))]),_:1})],10,Eje)):Fe("v-if",!0),ce("div",null,Ye(M(I)),1)],2),ie(vR,{"selection-mode":"range",date:f.value,"min-date":M(m),"max-date":M(v),"range-state":M(g),"disabled-date":M(o),"cell-class-name":M(i),onChangerange:M(w),onPick:_e,onSelect:M(E)},null,8,["date","min-date","max-date","range-state","disabled-date","cell-class-name","onChangerange","onSelect"])],2),ce("div",{class:oe([[M(b).e("content"),M(y).e("content")],"is-right"])},[ce("div",{class:oe(M(y).e("header"))},[ot.unlinkPanels?(Y(),fe("button",{key:0,type:"button",disabled:!M(be),class:oe([[M(b).e("icon-btn"),{"is-disabled":!M(be)}],"d-arrow-left"]),"aria-label":M(C)("el.datepicker.prevYear"),onClick:le},[ie(M(Ft),null,{default:he(()=>[ie(M(wm))]),_:1})],10,Cje)):Fe("v-if",!0),ot.unlinkPanels?(Y(),fe("button",{key:1,type:"button",disabled:!M(ye),class:oe([[M(b).e("icon-btn"),{"is-disabled":!M(ye)}],"arrow-left"]),"aria-label":M(C)("el.datepicker.prevMonth"),onClick:J},[ie(M(Ft),null,{default:he(()=>[ie(M(m0))]),_:1})],10,Sje)):Fe("v-if",!0),ce("button",{type:"button","aria-label":M(C)("el.datepicker.nextYear"),class:oe([M(b).e("icon-btn"),"d-arrow-right"]),onClick:X},[ie(M(Ft),null,{default:he(()=>[ie(M(xm))]),_:1})],10,kje),ce("button",{type:"button",class:oe([M(b).e("icon-btn"),"arrow-right"]),"aria-label":M(C)("el.datepicker.nextMonth"),onClick:te},[ie(M(Ft),null,{default:he(()=>[ie(M(Su))]),_:1})],10,Dje),ce("div",null,Ye(M(O)),1)],2),ie(vR,{"selection-mode":"range",date:p.value,"min-date":M(m),"max-date":M(v),"range-state":M(g),"disabled-date":M(o),"cell-class-name":M(i),onChangerange:M(w),onPick:_e,onSelect:M(E)},null,8,["date","min-date","max-date","range-state","disabled-date","cell-class-name","onChangerange","onSelect"])],2)],2)],2),M(Ae)?(Y(),fe("div",{key:0,class:oe(M(b).e("footer"))},[M(s)?(Y(),Le(M(Sa),{key:0,text:"",size:"small",class:oe(M(b).e("link-btn")),onClick:dt},{default:he(()=>[Dt(Ye(M(C)("el.datepicker.clear")),1)]),_:1},8,["class"])):Fe("v-if",!0),ie(M(Sa),{plain:"",size:"small",class:oe(M(b).e("link-btn")),disabled:M(ve),onClick:je[10]||(je[10]=we=>M(x)(!1))},{default:he(()=>[Dt(Ye(M(C)("el.datepicker.confirm")),1)]),_:1},8,["class","disabled"])],2)):Fe("v-if",!0)],2))}});var Tje=Nt(Oje,[["__file","panel-date-range.vue"]]);const Mje=Pt({...ise}),Nje=["onClick"],Fje=["disabled"],Rje=["disabled"],tx="year",Ije=Te({name:"DatePickerMonthRange"}),Bje=Te({...Ije,props:Mje,emits:["pick","set-picker-option","calendar-change"],setup(e,{emit:t}){const n=e,{lang:r}=Gr(),o=Rt("EP_PICKER_BASE"),{shortcuts:i,disabledDate:a,format:l}=o.props,s=dr(o.props,"defaultValue"),u=de(vn().locale(r.value)),c=de(vn().locale(r.value).add(1,tx)),{minDate:d,maxDate:f,rangeState:p,ppNs:m,drpNs:v,handleChangeRange:g,handleRangeConfirm:b,handleShortcutClick:y,onSelect:w}=lse(n,{defaultValue:s,leftDate:u,rightDate:c,unit:tx,onParsedValueChanged:function(P,V){if(n.unlinkPanels&&V){const L=(P==null?void 0:P.year())||0,H=V.year();c.value=L===H?V.add(1,tx):V}else c.value=u.value.add(1,tx)}}),x=ee(()=>!!i.length),{leftPrevYear:_,rightNextYear:E,leftNextYear:C,rightPrevYear:T,leftLabel:k,rightLabel:I,leftYear:O,rightYear:F}=(({unlinkPanels:P,leftDate:V,rightDate:L})=>{const{t:H}=Gr();return{leftPrevYear:()=>{V.value=V.value.subtract(1,"year"),P.value||(L.value=L.value.subtract(1,"year"))},rightNextYear:()=>{P.value||(V.value=V.value.add(1,"year")),L.value=L.value.add(1,"year")},leftNextYear:()=>{V.value=V.value.add(1,"year")},rightPrevYear:()=>{L.value=L.value.subtract(1,"year")},leftLabel:ee(()=>`${V.value.year()} ${H("el.datepicker.year")}`),rightLabel:ee(()=>`${L.value.year()} ${H("el.datepicker.year")}`),leftYear:ee(()=>V.value.year()),rightYear:ee(()=>L.value.year()===V.value.year()?V.value.year()+1:L.value.year())}})({unlinkPanels:dr(n,"unlinkPanels"),leftDate:u,rightDate:c}),N=ee(()=>n.unlinkPanels&&F.value>O.value+1),B=(P,V=!0)=>{const L=P.minDate,H=P.maxDate;f.value===H&&d.value===L||(t("calendar-change",[L.toDate(),H&&H.toDate()]),f.value=H,d.value=L,V&&b())};return t("set-picker-option",["formatToString",P=>P.map(V=>V.format(l))]),(P,V)=>(Y(),fe("div",{class:oe([M(m).b(),M(v).b(),{"has-sidebar":!!P.$slots.sidebar||M(x)}])},[ce("div",{class:oe(M(m).e("body-wrapper"))},[ft(P.$slots,"sidebar",{class:oe(M(m).e("sidebar"))}),M(x)?(Y(),fe("div",{key:0,class:oe(M(m).e("sidebar"))},[(Y(!0),fe(bt,null,bn(M(i),(L,H)=>(Y(),fe("button",{key:H,type:"button",class:oe(M(m).e("shortcut")),onClick:U=>M(y)(L)},Ye(L.text),11,Nje))),128))],2)):Fe("v-if",!0),ce("div",{class:oe(M(m).e("body"))},[ce("div",{class:oe([[M(m).e("content"),M(v).e("content")],"is-left"])},[ce("div",{class:oe(M(v).e("header"))},[ce("button",{type:"button",class:oe([M(m).e("icon-btn"),"d-arrow-left"]),onClick:V[0]||(V[0]=(...L)=>M(_)&&M(_)(...L))},[ie(M(Ft),null,{default:he(()=>[ie(M(wm))]),_:1})],2),P.unlinkPanels?(Y(),fe("button",{key:0,type:"button",disabled:!M(N),class:oe([[M(m).e("icon-btn"),{[M(m).is("disabled")]:!M(N)}],"d-arrow-right"]),onClick:V[1]||(V[1]=(...L)=>M(C)&&M(C)(...L))},[ie(M(Ft),null,{default:he(()=>[ie(M(xm))]),_:1})],10,Fje)):Fe("v-if",!0),ce("div",null,Ye(M(k)),1)],2),ie(mR,{"selection-mode":"range",date:u.value,"min-date":M(d),"max-date":M(f),"range-state":M(p),"disabled-date":M(a),onChangerange:M(g),onPick:B,onSelect:M(w)},null,8,["date","min-date","max-date","range-state","disabled-date","onChangerange","onSelect"])],2),ce("div",{class:oe([[M(m).e("content"),M(v).e("content")],"is-right"])},[ce("div",{class:oe(M(v).e("header"))},[P.unlinkPanels?(Y(),fe("button",{key:0,type:"button",disabled:!M(N),class:oe([[M(m).e("icon-btn"),{"is-disabled":!M(N)}],"d-arrow-left"]),onClick:V[2]||(V[2]=(...L)=>M(T)&&M(T)(...L))},[ie(M(Ft),null,{default:he(()=>[ie(M(wm))]),_:1})],10,Rje)):Fe("v-if",!0),ce("button",{type:"button",class:oe([M(m).e("icon-btn"),"d-arrow-right"]),onClick:V[3]||(V[3]=(...L)=>M(E)&&M(E)(...L))},[ie(M(Ft),null,{default:he(()=>[ie(M(xm))]),_:1})],2),ce("div",null,Ye(M(I)),1)],2),ie(mR,{"selection-mode":"range",date:c.value,"min-date":M(d),"max-date":M(f),"range-state":M(p),"disabled-date":M(a),onChangerange:M(g),onPick:B,onSelect:M(w)},null,8,["date","min-date","max-date","range-state","disabled-date","onChangerange","onSelect"])],2)],2)],2)],2))}});var Pje=Nt(Bje,[["__file","panel-month-range.vue"]]);vn.extend(_Pe),vn.extend(RLe),vn.extend(MO),vn.extend(ILe),vn.extend(BLe),vn.extend(PLe),vn.extend(LLe),vn.extend(jLe);var Lje=Te({name:"ElDatePicker",install:null,props:VLe,emits:["update:modelValue"],setup(e,{expose:t,emit:n,slots:r}){const o=_t("picker-panel");qn("ElPopperOptions",Qn(dr(e,"popperOptions"))),qn(cR,{slots:r,pickerNs:o});const i=de();t({focus:(s=!0)=>{var u;(u=i.value)==null||u.focus(s)},handleOpen:()=>{var s;(s=i.value)==null||s.handleOpen()},handleClose:()=>{var s;(s=i.value)==null||s.handleClose()}});const l=s=>{n("update:modelValue",s)};return()=>{var s;const u=(s=e.format)!=null?s:Pae[e.type]||i1,c=function(d){switch(d){case"daterange":case"datetimerange":return Tje;case"monthrange":return Pje;default:return yje}}(e.type);return ie(Hae,Un(e,{format:u,type:e.type,ref:i,"onUpdate:modelValue":l}),{default:d=>ie(c,d,null),"range-separator":r["range-separator"]})}}});const nx=Lje;nx.install=e=>{e.component(nx.name,nx)};let sse;xO=nx,sse=Pt({mask:{type:Boolean,default:!0},customMaskEvent:{type:Boolean,default:!1},overlayClass:{type:[String,Array,Object]},zIndex:{type:[String,Number]}});var jje=Te({name:"ElOverlay",props:sse,emits:{click:e=>e instanceof MouseEvent},setup(e,{slots:t,emit:n}){const r=_t("overlay"),{onClick:o,onMousedown:i,onMouseup:a}=sF(e.customMaskEvent?void 0:l=>{n("click",l)});return()=>e.mask?ie("div",{class:[r.b(),e.overlayClass],style:{zIndex:e.zIndex},onClick:o,onMousedown:i,onMouseup:a},[ft(t,"default")],Ob.STYLE|Ob.CLASS|Ob.PROPS,["onClick","onMouseup","onMousedown"]):pn("div",{class:e.overlayClass,style:{zIndex:e.zIndex,position:"fixed",top:"0px",right:"0px",bottom:"0px",left:"0px"}},[ft(t,"default")])}});let gR,yR,use,cse,dse,fse,pse;WO=jje,gR=Symbol("dialogInjectionKey"),yR=Pt({center:Boolean,alignCenter:Boolean,closeIcon:{type:fi},draggable:Boolean,overflow:Boolean,fullscreen:Boolean,showClose:{type:Boolean,default:!0},title:{type:String,default:""},ariaLevel:{type:String,default:"2"}}),use=["aria-level"],cse=["aria-label"],dse=["id"],fse=Te({name:"ElDialogContent"}),pse=Te({...fse,props:yR,emits:{close:()=>!0},setup(e){const t=e,{t:n}=Gr(),{Close:r}=$N,{dialogRef:o,headerRef:i,bodyId:a,ns:l,style:s}=Rt(gR),{focusTrapRef:u}=Rt(OO),c=ee(()=>[l.b(),l.is("fullscreen",t.fullscreen),l.is("draggable",t.draggable),l.is("align-center",t.alignCenter),{[l.m("center")]:t.center}]),d=xQ(u,o),f=ee(()=>t.draggable),p=ee(()=>t.overflow);return qN(o,i,f,p),(m,v)=>(Y(),fe("div",{ref:M(d),class:oe(M(c)),style:$t(M(s)),tabindex:"-1"},[ce("header",{ref_key:"headerRef",ref:i,class:oe([M(l).e("header"),{"show-close":m.showClose}])},[ft(m.$slots,"header",{},()=>[ce("span",{role:"heading","aria-level":m.ariaLevel,class:oe(M(l).e("title"))},Ye(m.title),11,use)]),m.showClose?(Y(),fe("button",{key:0,"aria-label":M(n)("el.dialog.close"),class:oe(M(l).e("headerbtn")),type:"button",onClick:v[0]||(v[0]=g=>m.$emit("close"))},[ie(M(Ft),{class:oe(M(l).e("close"))},{default:he(()=>[(Y(),Le(Hn(m.closeIcon||M(r))))]),_:1},8,["class"])],10,cse)):Fe("v-if",!0)],2),ce("div",{id:M(a),class:oe(M(l).e("body"))},[ft(m.$slots,"default")],10,dse),m.$slots.footer?(Y(),fe("footer",{key:0,class:oe(M(l).e("footer"))},[ft(m.$slots,"footer")],2)):Fe("v-if",!0)],6))}});var Vje=Nt(pse,[["__file","dialog-content.vue"]]);let hse,vse,mse;eJ=Pt({...yR,appendToBody:Boolean,appendTo:{type:String,default:"body"},beforeClose:{type:Function},destroyOnClose:Boolean,closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},modal:{type:Boolean,default:!0},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:0},top:{type:String},modelValue:Boolean,modalClass:String,width:{type:[String,Number]},zIndex:{type:Number},trapFocus:{type:Boolean,default:!1},headerAriaLevel:{type:String,default:"2"}}),tJ={open:()=>!0,opened:()=>!0,close:()=>!0,closed:()=>!0,[xn]:e=>Ki(e),openAutoFocus:()=>!0,closeAutoFocus:()=>!0},nJ=(e,t)=>{var n;const r=dn().emit,{nextZIndex:o}=E9();let i="";const a=Zl(),l=Zl(),s=de(!1),u=de(!1),c=de(!1),d=de((n=e.zIndex)!=null?n:o());let f,p;const m=G3("namespace",Zm),v=ee(()=>{const E={},C=`--${m.value}-dialog`;return e.fullscreen||(e.top&&(E[`${C}-margin-top`]=e.top),e.width&&(E[`${C}-width`]=ka(e.width))),E}),g=ee(()=>e.alignCenter?{display:"flex"}:{});function b(){p==null||p(),f==null||f(),e.openDelay&&e.openDelay>0?{stop:f}=Ib(()=>x(),e.openDelay):x()}function y(){f==null||f(),p==null||p(),e.closeDelay&&e.closeDelay>0?{stop:p}=Ib(()=>_(),e.closeDelay):_()}function w(){e.beforeClose?e.beforeClose(function(E){E||(u.value=!0,s.value=!1)}):y()}function x(){rr&&(s.value=!0)}function _(){s.value=!1}return e.lockScroll&&XN(s),Je(()=>e.modelValue,E=>{E?(u.value=!1,b(),c.value=!0,d.value=Soe(e.zIndex)?o():d.value++,St(()=>{r("open"),t.value&&(t.value.scrollTop=0)})):s.value&&y()}),Je(()=>e.fullscreen,E=>{t.value&&(E?(i=t.value.style.transform,t.value.style.transform=""):t.value.style.transform=i)}),yn(()=>{e.modelValue&&(s.value=!0,c.value=!0,b())}),{afterEnter:function(){r("opened")},afterLeave:function(){r("closed"),r(xn,!1),e.destroyOnClose&&(c.value=!1)},beforeLeave:function(){r("close")},handleClose:w,onModalClick:function(){e.closeOnClickModal&&w()},close:y,doClose:_,onOpenAutoFocus:function(){r("openAutoFocus")},onCloseAutoFocus:function(){r("closeAutoFocus")},onCloseRequested:function(){e.closeOnPressEscape&&w()},onFocusoutPrevented:function(E){var C;((C=E.detail)==null?void 0:C.focusReason)==="pointer"&&E.preventDefault()},titleId:a,bodyId:l,closed:u,style:v,overlayDialogStyle:g,rendered:c,visible:s,zIndex:d}},hse=["aria-label","aria-labelledby","aria-describedby"],vse=Te({name:"ElDialog",inheritAttrs:!1}),mse=Te({...vse,props:eJ,emits:tJ,setup(e,{expose:t}){const n=e,r=Ga();y0({scope:"el-dialog",from:"the title slot",replacement:"the header slot",version:"3.0.0",ref:"https://element-plus.org/en-US/component/dialog.html#slots"},ee(()=>!!r.title));const o=_t("dialog"),i=de(),a=de(),l=de(),{visible:s,titleId:u,bodyId:c,style:d,overlayDialogStyle:f,rendered:p,zIndex:m,afterEnter:v,afterLeave:g,beforeLeave:b,handleClose:y,onModalClick:w,onOpenAutoFocus:x,onCloseAutoFocus:_,onCloseRequested:E,onFocusoutPrevented:C}=nJ(n,i);qn(gR,{dialogRef:i,headerRef:a,bodyId:c,ns:o,rendered:p,style:d});const T=sF(w),k=ee(()=>n.draggable&&!n.fullscreen);return t({visible:s,dialogContentRef:l}),(I,O)=>(Y(),Le(Db,{to:I.appendTo,disabled:I.appendTo==="body"&&!I.appendToBody},[ie(ca,{name:"dialog-fade",onAfterEnter:M(v),onAfterLeave:M(g),onBeforeLeave:M(b),persisted:""},{default:he(()=>[nn(ie(M(WO),{"custom-mask-event":"",mask:I.modal,"overlay-class":I.modalClass,"z-index":M(m)},{default:he(()=>[ce("div",{role:"dialog","aria-modal":"true","aria-label":I.title||void 0,"aria-labelledby":I.title?void 0:M(u),"aria-describedby":M(c),class:oe(`${M(o).namespace.value}-overlay-dialog`),style:$t(M(f)),onClick:O[0]||(O[0]=(...F)=>M(T).onClick&&M(T).onClick(...F)),onMousedown:O[1]||(O[1]=(...F)=>M(T).onMousedown&&M(T).onMousedown(...F)),onMouseup:O[2]||(O[2]=(...F)=>M(T).onMouseup&&M(T).onMouseup(...F))},[ie(M($w),{loop:"",trapped:M(s),"focus-start-el":"container",onFocusAfterTrapped:M(x),onFocusAfterReleased:M(_),onFocusoutPrevented:M(C),onReleaseRequested:M(E)},{default:he(()=>[M(p)?(Y(),Le(Vje,Un({key:0,ref_key:"dialogContentRef",ref:l},I.$attrs,{center:I.center,"align-center":I.alignCenter,"close-icon":I.closeIcon,draggable:M(k),overflow:I.overflow,fullscreen:I.fullscreen,"show-close":I.showClose,title:I.title,"aria-level":I.headerAriaLevel,onClose:M(y)}),Ff({header:he(()=>[I.$slots.title?ft(I.$slots,"title",{key:1}):ft(I.$slots,"header",{key:0,close:M(y),titleId:M(u),titleClass:M(o).e("title")})]),default:he(()=>[ft(I.$slots,"default")]),_:2},[I.$slots.footer?{name:"footer",fn:he(()=>[ft(I.$slots,"footer")])}:void 0]),1040,["center","align-center","close-icon","draggable","overflow","fullscreen","show-close","title","aria-level","onClose"])):Fe("v-if",!0)]),_:3},8,["trapped","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])],46,hse)]),_:3},8,["mask","overlay-class","z-index"]),[[$n,M(s)]])]),_:3},8,["onAfterEnter","onAfterLeave","onBeforeLeave"])],8,["to","disabled"]))}});let gse,yse,bse;Mw=Cr(Nt(mse,[["__file","dialog.vue"]])),gse=Pt({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},contentPosition:{type:String,values:["left","center","right"],default:"center"},borderStyle:{type:String,default:"solid"}}),yse=Te({name:"ElDivider"}),bse=Te({...yse,props:gse,setup(e){const t=e,n=_t("divider"),r=ee(()=>n.cssVar({"border-style":t.borderStyle}));return(o,i)=>(Y(),fe("div",{class:oe([M(n).b(),M(n).m(o.direction)]),style:$t(M(r)),role:"separator"},[o.$slots.default&&o.direction!=="vertical"?(Y(),fe("div",{key:0,class:oe([M(n).e("text"),M(n).is(o.contentPosition)])},[ft(o.$slots,"default")],2)):Fe("v-if",!0)],6))}}),vQ=Cr(Nt(bse,[["__file","divider.vue"]]));var zje=Nt(Te({inheritAttrs:!1}),[["render",function(e,t,n,r,o,i){return ft(e.$slots,"default")}],["__file","collection.vue"]]),Hje=Nt(Te({name:"ElCollectionItem",inheritAttrs:!1}),[["render",function(e,t,n,r,o,i){return ft(e.$slots,"default")}],["__file","collection-item.vue"]]);let Ase,wse,xse,_se,Ese,Cse;wQ="data-el-collection-item",TQ=e=>{const t=`El${e}Collection`,n=`${t}Item`,r=Symbol(t),o=Symbol(n),i={...zje,name:t,setup(){const l=de(null),s=new Map;qn(r,{itemMap:s,getItems:()=>{const u=M(l);if(!u)return[];const c=Array.from(u.querySelectorAll(`[${wQ}]`));return[...s.values()].sort((d,f)=>c.indexOf(d.ref)-c.indexOf(f.ref))},collectionRef:l})}},a={...Hje,name:n,setup(l,{attrs:s}){const u=de(null),c=Rt(r,void 0);qn(o,{collectionItemRef:u}),yn(()=>{const d=M(u);d&&c.itemMap.set(d,{ref:d,...s})}),xo(()=>{const d=M(u);c.itemMap.delete(d)})}};return{COLLECTION_INJECTION_KEY:r,COLLECTION_ITEM_INJECTION_KEY:o,ElCollection:i,ElCollectionItem:a}},Rw=Pt({trigger:ug.trigger,effect:{...Ui.effect,default:"light"},type:{type:String},placement:{type:String,default:"bottom"},popperOptions:{type:Object,default:()=>({})},id:String,size:{type:String,default:""},splitButton:Boolean,hideOnClick:{type:Boolean,default:!0},loop:{type:Boolean,default:!0},showTimeout:{type:Number,default:150},hideTimeout:{type:Number,default:150},tabindex:{type:[Number,String],default:0},maxHeight:{type:[Number,String],default:""},popperClass:{type:String,default:""},disabled:{type:Boolean,default:!1},role:{type:String,default:"menu"},buttonProps:{type:Object},teleported:Ui.teleported}),nOe=Pt({command:{type:[Object,String,Number],default:()=>({})},disabled:Boolean,divided:Boolean,textValue:String,icon:{type:fi}}),aOe=Pt({onKeydown:{type:Function}}),Ase=[Xt.down,Xt.pageDown,Xt.home],_Q=[Xt.up,Xt.pageUp,Xt.end],sOe=[...Ase,..._Q],{ElCollection:hOe,ElCollectionItem:oOe,COLLECTION_INJECTION_KEY:lOe,COLLECTION_ITEM_INJECTION_KEY:rOe}=TQ("Dropdown"),wse=Pt({urlList:{type:Array,default:()=>[]},zIndex:{type:Number},initialIndex:{type:Number,default:0},infinite:{type:Boolean,default:!0},hideOnClickModal:Boolean,teleported:Boolean,closeOnPressEscape:{type:Boolean,default:!0},zoomRate:{type:Number,default:1.2},minScale:{type:Number,default:.2},maxScale:{type:Number,default:7},crossorigin:{type:String}}),xse={close:()=>!0,switch:e=>Kn(e),rotate:e=>Kn(e)},_se=["src","crossorigin"],Ese=Te({name:"ElImageViewer"}),Cse=Te({...Ese,props:wse,emits:xse,setup(e,{expose:t,emit:n}){var r;const o=e,i={CONTAIN:{name:"contain",icon:Fo(Roe)},ORIGINAL:{name:"original",icon:Fo(Voe)}},{t:a}=Gr(),l=_t("image-viewer"),{nextZIndex:s}=E9(),u=de(),c=de([]),d=p7(),f=de(!0),p=de(o.initialIndex),m=Qo(i.CONTAIN),v=de({scale:1,deg:0,offsetX:0,offsetY:0,enableTransition:!1}),g=de((r=o.zIndex)!=null?r:s()),b=ee(()=>{const{urlList:H}=o;return H.length<=1}),y=ee(()=>p.value===0),w=ee(()=>p.value===o.urlList.length-1),x=ee(()=>o.urlList[p.value]),_=ee(()=>[l.e("btn"),l.e("prev"),l.is("disabled",!o.infinite&&y.value)]),E=ee(()=>[l.e("btn"),l.e("next"),l.is("disabled",!o.infinite&&w.value)]),C=ee(()=>{const{scale:H,deg:U,offsetX:G,offsetY:z,enableTransition:$}=v.value;let W=G/H,K=z/H;switch(U%360){case 90:case-270:[W,K]=[K,-W];break;case 180:case-180:[W,K]=[-W,-K];break;case 270:case-90:[W,K]=[-K,W]}const X={transform:`scale(${H}) rotate(${U}deg) translate(${W}px, ${K}px)`,transition:$?"transform .3s":""};return m.value.name===i.CONTAIN.name&&(X.maxWidth=X.maxHeight="100%"),X});function T(){d.stop(),n("close")}function k(){f.value=!1}function I(H){f.value=!1,H.target.alt=a("el.image.error")}function O(H){if(f.value||H.button!==0||!u.value)return;v.value.enableTransition=!1;const{offsetX:U,offsetY:G}=v.value,z=H.pageX,$=H.pageY,W=RN(X=>{v.value={...v.value,offsetX:U+X.pageX-z,offsetY:G+X.pageY-$}}),K=Yo(document,"mousemove",W);Yo(document,"mouseup",()=>{K()}),H.preventDefault()}function F(){v.value={scale:1,deg:0,offsetX:0,offsetY:0,enableTransition:!1}}function N(){if(f.value)return;const H=P3(i),U=Object.values(i),G=m.value.name,z=U.findIndex(W=>W.name===G),$=(z+1)%H.length;m.value=i[H[$]],F()}function B(H){const U=o.urlList.length;p.value=(H+U)%U}function P(){y.value&&!o.infinite||B(p.value-1)}function V(){w.value&&!o.infinite||B(p.value+1)}function L(H,U={}){if(f.value)return;const{minScale:G,maxScale:z}=o,{zoomRate:$,rotateDeg:W,enableTransition:K}={zoomRate:o.zoomRate,rotateDeg:90,enableTransition:!0,...U};switch(H){case"zoomOut":v.value.scale>G&&(v.value.scale=Number.parseFloat((v.value.scale/$).toFixed(3)));break;case"zoomIn":v.value.scale<z&&(v.value.scale=Number.parseFloat((v.value.scale*$).toFixed(3)));break;case"clockwise":v.value.deg+=W,n("rotate",v.value.deg);break;case"anticlockwise":v.value.deg-=W,n("rotate",v.value.deg)}v.value.enableTransition=K}return Je(x,()=>{St(()=>{const H=c.value[0];H!=null&&H.complete||(f.value=!0)})}),Je(p,H=>{F(),n("switch",H)}),yn(()=>{var H,U;(function(){const G=RN($=>{switch($.code){case Xt.esc:o.closeOnPressEscape&&T();break;case Xt.space:N();break;case Xt.left:P();break;case Xt.up:L("zoomIn");break;case Xt.right:V();break;case Xt.down:L("zoomOut")}}),z=RN($=>{L(($.deltaY||$.deltaX)<0?"zoomIn":"zoomOut",{zoomRate:o.zoomRate,enableTransition:!1})});d.run(()=>{Yo(document,"keydown",G),Yo(document,"wheel",z)})})(),(U=(H=u.value)==null?void 0:H.focus)==null||U.call(H)}),t({setActiveItem:B}),(H,U)=>(Y(),Le(Db,{to:"body",disabled:!H.teleported},[ie(ca,{name:"viewer-fade",appear:""},{default:he(()=>[ce("div",{ref_key:"wrapper",ref:u,tabindex:-1,class:oe(M(l).e("wrapper")),style:$t({zIndex:g.value})},[ce("div",{class:oe(M(l).e("mask")),onClick:U[0]||(U[0]=Gt(G=>H.hideOnClickModal&&T(),["self"]))},null,2),Fe(" CLOSE "),ce("span",{class:oe([M(l).e("btn"),M(l).e("close")]),onClick:T},[ie(M(Ft),null,{default:he(()=>[ie(M(wc))]),_:1})],2),Fe(" ARROW "),M(b)?Fe("v-if",!0):(Y(),fe(bt,{key:0},[ce("span",{class:oe(M(_)),onClick:P},[ie(M(Ft),null,{default:he(()=>[ie(M(m0))]),_:1})],2),ce("span",{class:oe(M(E)),onClick:V},[ie(M(Ft),null,{default:he(()=>[ie(M(Su))]),_:1})],2)],64)),Fe(" ACTIONS "),ce("div",{class:oe([M(l).e("btn"),M(l).e("actions")])},[ce("div",{class:oe(M(l).e("actions__inner"))},[ie(M(Ft),{onClick:U[1]||(U[1]=G=>L("zoomOut"))},{default:he(()=>[ie(M(Uoe))]),_:1}),ie(M(Ft),{onClick:U[2]||(U[2]=G=>L("zoomIn"))},{default:he(()=>[ie(M(zN))]),_:1}),ce("i",{class:oe(M(l).e("actions__divider"))},null,2),ie(M(Ft),{onClick:N},{default:he(()=>[(Y(),Le(Hn(M(m).icon)))]),_:1}),ce("i",{class:oe(M(l).e("actions__divider"))},null,2),ie(M(Ft),{onClick:U[3]||(U[3]=G=>L("anticlockwise"))},{default:he(()=>[ie(M(Loe))]),_:1}),ie(M(Ft),{onClick:U[4]||(U[4]=G=>L("clockwise"))},{default:he(()=>[ie(M(joe))]),_:1})],2)],2),Fe(" CANVAS "),ce("div",{class:oe(M(l).e("canvas"))},[(Y(!0),fe(bt,null,bn(H.urlList,(G,z)=>nn((Y(),fe("img",{ref_for:!0,ref:$=>c.value[z]=$,key:G,src:G,style:$t(M(C)),class:oe(M(l).e("img")),crossorigin:H.crossorigin,onLoad:k,onError:I,onMousedown:O},null,46,_se)),[[$n,z===p.value]])),128))],2),ft(H.$slots,"default")],6)]),_:3})],8,["disabled"]))}});let Sse,kse,Dse,Ose,Tse,Mse;qO=Cr(Nt(Cse,[["__file","image-viewer.vue"]])),Sse=Pt({id:{type:String,default:void 0},step:{type:Number,default:1},stepStrictly:Boolean,max:{type:Number,default:Number.POSITIVE_INFINITY},min:{type:Number,default:Number.NEGATIVE_INFINITY},modelValue:Number,readonly:Boolean,disabled:Boolean,size:da,controls:{type:Boolean,default:!0},controlsPosition:{type:String,default:"",values:["","right"]},valueOnClear:{type:[String,Number,null],validator:e=>e===null||Kn(e)||["min","max"].includes(e),default:null},name:String,label:String,placeholder:String,precision:{type:Number,validator:e=>e>=0&&e===Number.parseInt(`${e}`,10)},validateEvent:{type:Boolean,default:!0}}),kse={[Xo]:(e,t)=>t!==e,blur:e=>e instanceof FocusEvent,focus:e=>e instanceof FocusEvent,[Tl]:e=>Kn(e)||pa(e),[xn]:e=>Kn(e)||pa(e)},Dse=["aria-label","onKeydown"],Ose=["aria-label","onKeydown"],Tse=Te({name:"ElInputNumber"}),Mse=Te({...Tse,props:Sse,emits:kse,setup(e,{expose:t,emit:n}){const r=e,{t:o}=Gr(),i=_t("input-number"),a=de(),l=Qn({currentValue:r.modelValue,userInput:null}),{formItem:s}=qa(),u=ee(()=>Kn(r.modelValue)&&r.modelValue<=r.min),c=ee(()=>Kn(r.modelValue)&&r.modelValue>=r.max),d=ee(()=>{const N=b(r.step);return Wi(r.precision)?Math.max(b(r.modelValue),N):(r.precision,r.precision)}),f=ee(()=>r.controls&&r.controlsPosition==="right"),p=$i(),m=wl(),v=ee(()=>{if(l.userInput!==null)return l.userInput;let N=l.currentValue;if(pa(N))return"";if(Kn(N)){if(Number.isNaN(N))return"";Wi(r.precision)||(N=N.toFixed(r.precision))}return N}),g=(N,B)=>{if(Wi(B)&&(B=d.value),B===0)return Math.round(N);let P=String(N);const V=P.indexOf(".");if(V===-1||!P.replace(".","").split("")[V+B])return N;const L=P.length;return P.charAt(L-1)==="5"&&(P=`${P.slice(0,Math.max(0,L-1))}6`),Number.parseFloat(Number(P).toFixed(B))},b=N=>{if(pa(N))return 0;const B=N.toString(),P=B.indexOf(".");let V=0;return P!==-1&&(V=B.length-P-1),V},y=(N,B=1)=>Kn(N)?g(N+r.step*B):l.currentValue,w=()=>{if(r.readonly||m.value||c.value)return;const N=Number(v.value)||0,B=y(N);E(B),n(Tl,l.currentValue),O()},x=()=>{if(r.readonly||m.value||u.value)return;const N=Number(v.value)||0,B=y(N,-1);E(B),n(Tl,l.currentValue),O()},_=(N,B)=>{const{max:P,min:V,step:L,precision:H,stepStrictly:U,valueOnClear:G}=r;P<V&&Ka("InputNumber","min should not be greater than max.");let z=Number(N);if(pa(N)||Number.isNaN(z))return null;if(N===""){if(G===null)return null;z=an(G)?{min:V,max:P}[G]:G}return U&&(z=g(Math.round(z/L)*L,H)),Wi(H)||(z=g(z,H)),(z>P||z<V)&&(z=z>P?P:V,B&&n(xn,z)),z},E=(N,B=!0)=>{var P;const V=l.currentValue,L=_(N);B?V===L&&N||(l.userInput=null,n(xn,L),V!==L&&n(Xo,L,V),r.validateEvent&&((P=s==null?void 0:s.validate)==null||P.call(s,"change").catch(H=>{})),l.currentValue=L):n(xn,L)},C=N=>{l.userInput=N;const B=N===""?null:Number(N);n(Tl,B),E(B,!1)},T=N=>{const B=N!==""?Number(N):"";(Kn(B)&&!Number.isNaN(B)||N==="")&&E(B),O(),l.userInput=null},k=N=>{n("focus",N)},I=N=>{var B;l.userInput=null,n("blur",N),r.validateEvent&&((B=s==null?void 0:s.validate)==null||B.call(s,"blur").catch(P=>{}))},O=()=>{l.currentValue!==r.modelValue&&(l.currentValue=r.modelValue)},F=N=>{document.activeElement===N.target&&N.preventDefault()};return Je(()=>r.modelValue,(N,B)=>{const P=_(N,!0);l.userInput===null&&P!==B&&(l.currentValue=P)},{immediate:!0}),yn(()=>{var N;const{min:B,max:P,modelValue:V}=r,L=(N=a.value)==null?void 0:N.input;if(L.setAttribute("role","spinbutton"),Number.isFinite(P)?L.setAttribute("aria-valuemax",String(P)):L.removeAttribute("aria-valuemax"),Number.isFinite(B)?L.setAttribute("aria-valuemin",String(B)):L.removeAttribute("aria-valuemin"),L.setAttribute("aria-valuenow",l.currentValue||l.currentValue===0?String(l.currentValue):""),L.setAttribute("aria-disabled",String(m.value)),!Kn(V)&&V!=null){let H=Number(V);Number.isNaN(H)&&(H=null),n(xn,H)}}),zs(()=>{var N,B;const P=(N=a.value)==null?void 0:N.input;P==null||P.setAttribute("aria-valuenow",`${(B=l.currentValue)!=null?B:""}`)}),t({focus:()=>{var N,B;(B=(N=a.value)==null?void 0:N.focus)==null||B.call(N)},blur:()=>{var N,B;(B=(N=a.value)==null?void 0:N.blur)==null||B.call(N)}}),(N,B)=>(Y(),fe("div",{class:oe([M(i).b(),M(i).m(M(p)),M(i).is("disabled",M(m)),M(i).is("without-controls",!N.controls),M(i).is("controls-right",M(f))]),onDragstart:B[0]||(B[0]=Gt(()=>{},["prevent"]))},[N.controls?nn((Y(),fe("span",{key:0,role:"button","aria-label":M(o)("el.inputNumber.decrease"),class:oe([M(i).e("decrease"),M(i).is("disabled",M(u))]),onKeydown:Rr(x,["enter"])},[ft(N.$slots,"decrease-icon",{},()=>[ie(M(Ft),null,{default:he(()=>[M(f)?(Y(),Le(M(p0),{key:0})):(Y(),Le(M(Boe),{key:1}))]),_:1})])],42,Dse)),[[M(Z3),x]]):Fe("v-if",!0),N.controls?nn((Y(),fe("span",{key:1,role:"button","aria-label":M(o)("el.inputNumber.increase"),class:oe([M(i).e("increase"),M(i).is("disabled",M(c))]),onKeydown:Rr(w,["enter"])},[ft(N.$slots,"increase-icon",{},()=>[ie(M(Ft),null,{default:he(()=>[M(f)?(Y(),Le(M(p9),{key:0})):(Y(),Le(M(jN),{key:1}))]),_:1})])],42,Ose)),[[M(Z3),w]]):Fe("v-if",!0),ie(M(ua),{id:N.id,ref_key:"input",ref:a,type:"number",step:N.step,"model-value":M(v),placeholder:N.placeholder,readonly:N.readonly,disabled:M(m),size:M(p),max:N.max,min:N.min,name:N.name,label:N.label,"validate-event":!1,onWheel:F,onKeydown:[Rr(Gt(w,["prevent"]),["up"]),Rr(Gt(x,["prevent"]),["down"])],onBlur:I,onFocus:k,onInput:C,onChange:T},null,8,["id","step","model-value","placeholder","readonly","disabled","size","max","min","name","label","onKeydown"])],34))}});let Nse,Fse,Rse,Ise,Bse;Bw=Cr(Nt(Mse,[["__file","input-number.vue"]])),Nse=Pt({type:{type:String,values:["primary","success","warning","info","danger","default"],default:"default"},underline:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},href:{type:String,default:""},target:{type:String,default:"_self"},icon:{type:fi}}),Fse={click:e=>e instanceof MouseEvent},Rse=["href","target"],Ise=Te({name:"ElLink"}),Bse=Te({...Ise,props:Nse,emits:Fse,setup(e,{emit:t}){const n=e,r=_t("link"),o=ee(()=>[r.b(),r.m(n.type),r.is("disabled",n.disabled),r.is("underline",n.underline&&!n.disabled)]);function i(a){n.disabled||t("click",a)}return(a,l)=>(Y(),fe("a",{class:oe(M(o)),href:a.disabled||!a.href?void 0:a.href,target:a.disabled||!a.href?void 0:a.target,onClick:i},[a.icon?(Y(),Le(M(Ft),{key:0},{default:he(()=>[(Y(),Le(Hn(a.icon)))]),_:1})):Fe("v-if",!0),a.$slots.default?(Y(),fe("span",{key:1,class:oe(M(r).e("inner"))},[ft(a.$slots,"default")],2)):Fe("v-if",!0),a.$slots.icon?ft(a.$slots,"icon",{key:2}):Fe("v-if",!0)],10,Rse))}});let bR;yQ=Cr(Nt(Bse,[["__file","link.vue"]])),bR=Symbol("ElSelectGroup"),Nb=Symbol("ElSelect");const $je=Te({name:"ElOption",componentName:"ElOption",props:{value:{required:!0,type:[String,Number,Boolean,Object]},label:[String,Number],created:Boolean,disabled:Boolean},setup(e){const t=_t("select"),n=Zl(),r=ee(()=>[t.be("dropdown","item"),t.is("disabled",M(l)),t.is("selected",M(a)),t.is("hovering",M(f))]),o=Qn({index:-1,groupDisabled:!1,visible:!0,hover:!1}),{currentLabel:i,itemSelected:a,isDisabled:l,select:s,hoverItem:u,updateOption:c}=function(m,v){const g=Rt(Nb),b=Rt(bR,{disabled:!1}),y=ee(()=>g.props.multiple?T(g.props.modelValue,m.value):T([g.props.modelValue],m.value)),w=ee(()=>{if(g.props.multiple){const k=g.props.modelValue||[];return!y.value&&k.length>=g.props.multipleLimit&&g.props.multipleLimit>0}return!1}),x=ee(()=>m.label||(wn(m.value)?"":m.value)),_=ee(()=>m.value||m.label||""),E=ee(()=>m.disabled||v.groupDisabled||w.value),C=dn(),T=(k=[],I)=>{if(wn(m.value)){const O=g.props.valueKey;return k&&k.some(F=>Zn(es(F,O))===es(I,O))}return k&&k.includes(I)};return Je(()=>x.value,()=>{m.created||g.props.remote||g.setSelected()}),Je(()=>m.value,(k,I)=>{const{remote:O,valueKey:F}=g.props;if(ns(k,I)||(g.onOptionDestroy(I,C.proxy),g.onOptionCreate(C.proxy)),!m.created&&!O){if(F&&wn(k)&&wn(I)&&k[F]===I[F])return;g.setSelected()}}),Je(()=>b.disabled,()=>{v.groupDisabled=b.disabled},{immediate:!0}),{select:g,currentLabel:x,currentValue:_,itemSelected:y,isDisabled:E,hoverItem:()=>{m.disabled||b.disabled||(g.states.hoveringIndex=g.optionsArray.indexOf(C.proxy))},updateOption:k=>{const I=new RegExp(GQ(k),"i");v.visible=I.test(x.value)||m.created}}}(e,o),{visible:d,hover:f}=di(o),p=dn().proxy;return s.onOptionCreate(p),xo(()=>{const m=p.value,{selected:v}=s.states,g=(s.props.multiple?v:[v]).some(b=>b.value===p.value);St(()=>{s.states.cachedOptions.get(m)!==p||g||s.states.cachedOptions.delete(m)}),s.onOptionDestroy(m,p)}),{ns:t,id:n,containerKls:r,currentLabel:i,itemSelected:a,isDisabled:l,select:s,hoverItem:u,updateOption:c,visible:d,hover:f,selectOptionClick:function(){e.disabled!==!0&&o.groupDisabled!==!0&&s.handleOptionSelect(p)},states:o}}}),Uje=["id","aria-disabled","aria-selected"];var AR=Nt($je,[["render",function(e,t,n,r,o,i){return nn((Y(),fe("li",{id:e.id,class:oe(e.containerKls),role:"option","aria-disabled":e.isDisabled||void 0,"aria-selected":e.itemSelected,onMouseenter:t[0]||(t[0]=(...a)=>e.hoverItem&&e.hoverItem(...a)),onClick:t[1]||(t[1]=Gt((...a)=>e.selectOptionClick&&e.selectOptionClick(...a),["stop"]))},[ft(e.$slots,"default",{},()=>[ce("span",null,Ye(e.currentLabel),1)])],42,Uje)),[[$n,e.visible]])}],["__file","option.vue"]]);const Wje=Te({name:"ElSelectDropdown",componentName:"ElSelectDropdown",setup(){const e=Rt(Nb),t=_t("select"),n=ee(()=>e.props.popperClass),r=ee(()=>e.props.multiple),o=ee(()=>e.props.fitInputWidth),i=de("");function a(){var l;i.value=`${(l=e.selectRef)==null?void 0:l.offsetWidth}px`}return yn(()=>{a(),fa(e.selectRef,a)}),{ns:t,minWidth:i,popperClass:n,isMultiple:r,isFitInputWidth:o}}});var Gje=Nt(Wje,[["render",function(e,t,n,r,o,i){return Y(),fe("div",{class:oe([e.ns.b("dropdown"),e.ns.is("multiple",e.isMultiple),e.popperClass]),style:$t({[e.isFitInputWidth?"width":"minWidth"]:e.minWidth})},[e.$slots.header?(Y(),fe("div",{key:0,class:oe(e.ns.be("dropdown","header"))},[ft(e.$slots,"header")],2)):Fe("v-if",!0),ft(e.$slots,"default"),e.$slots.footer?(Y(),fe("div",{key:1,class:oe(e.ns.be("dropdown","footer"))},[ft(e.$slots,"footer")],2)):Fe("v-if",!0)],6)}],["__file","select-dropdown.vue"]]);UQ=function(e){const t=de(!1);return{handleCompositionStart:()=>{t.value=!0},handleCompositionUpdate:n=>{const r=n.target.value,o=r[r.length-1]||"";t.value=!g9(o)},handleCompositionEnd:n=>{t.value&&(t.value=!1,Ut(e)&&e(n))}}};const qje=(e,t)=>{const{t:n}=Gr(),r=Zl(),o=_t("select"),i=_t("input"),a=Qn({inputValue:"",options:new Map,cachedOptions:new Map,disabledOptions:new Map,optionValues:[],selected:e.multiple?[]:{},selectionWidth:0,calculatorWidth:0,collapseItemWidth:0,selectedLabel:"",hoveringIndex:-1,previousQuery:null,inputHovering:!1,menuVisibleOnFocus:!1,isBeforeHide:!1}),l=de(null),s=de(null),u=de(null),c=de(null),d=de(null),f=de(null),p=de(null),m=de(null),v=de(null),g=de(null),b=de(null),y=de(null),{wrapperRef:w,isFocused:x,handleFocus:_,handleBlur:E}=Vw(d,{afterFocus(){e.automaticDropdown&&!C.value&&(C.value=!0,a.menuVisibleOnFocus=!0)},beforeBlur(tt){var kt,An;return((kt=u.value)==null?void 0:kt.isFocusInsideContent(tt))||((An=c.value)==null?void 0:An.isFocusInsideContent(tt))},afterBlur(){C.value=!1,a.menuVisibleOnFocus=!1}}),C=de(!1),T=de(),{form:k,formItem:I}=qa(),{inputId:O}=Ac(e,{formItemContext:I}),{valueOnClear:F,isEmptyValue:N}=jw(e),B=ee(()=>e.disabled||(k==null?void 0:k.disabled)),P=ee(()=>e.multiple?mt(e.modelValue)&&e.modelValue.length>0:!N(e.modelValue)),V=ee(()=>e.clearable&&!B.value&&a.inputHovering&&P.value),L=ee(()=>e.remote&&e.filterable&&!e.remoteShowSuffix?"":e.suffixIcon),H=ee(()=>o.is("reverse",L.value&&C.value)),U=ee(()=>(I==null?void 0:I.validateState)||""),G=ee(()=>zO[U.value]),z=ee(()=>e.remote?300:0),$=ee(()=>e.loading?e.loadingText||n("el.select.loading"):!(e.remote&&!a.inputValue&&a.options.size===0)&&(e.filterable&&a.inputValue&&a.options.size>0&&W.value===0?e.noMatchText||n("el.select.noMatch"):a.options.size===0?e.noDataText||n("el.select.noData"):null)),W=ee(()=>K.value.filter(tt=>tt.visible).length),K=ee(()=>{const tt=Array.from(a.options.values()),kt=[];return a.optionValues.forEach(An=>{const _n=tt.findIndex(po=>po.value===An);_n>-1&&kt.push(tt[_n])}),kt.length>=tt.length?kt:tt}),X=ee(()=>Array.from(a.cachedOptions.values())),te=ee(()=>{const tt=K.value.filter(kt=>!kt.created).some(kt=>kt.currentLabel===a.inputValue);return e.filterable&&e.allowCreate&&a.inputValue!==""&&!tt}),ne=()=>{e.filterable&&Ut(e.filterMethod)||e.filterable&&e.remote&&Ut(e.remoteMethod)||K.value.forEach(tt=>{var kt;(kt=tt.updateOption)==null||kt.call(tt,a.inputValue)})},se=$i(),le=ee(()=>["small"].includes(se.value)?"small":"default"),J=ee({get:()=>C.value&&$.value!==!1,set(tt){C.value=tt}}),Z=ee(()=>mt(e.modelValue)?e.modelValue.length===0&&!a.inputValue:!e.filterable||!a.inputValue),ye=ee(()=>{var tt;const kt=(tt=e.placeholder)!=null?tt:n("el.select.placeholder");return e.multiple||!P.value?kt:a.selectedLabel});Je(()=>e.modelValue,(tt,kt)=>{e.multiple&&e.filterable&&!e.reserveKeyword&&(a.inputValue="",be("")),Ae(),!ns(tt,kt)&&e.validateEvent&&(I==null||I.validate("change").catch(An=>{}))},{flush:"post",deep:!0}),Je(()=>C.value,tt=>{tt?be(a.inputValue):(a.inputValue="",a.previousQuery=null,a.isBeforeHide=!0),t("visible-change",tt)}),Je(()=>a.options.entries(),()=>{var tt;if(!rr)return;const kt=((tt=l.value)==null?void 0:tt.querySelectorAll("input"))||[];(e.filterable||e.defaultFirstOption||Wi(e.modelValue))&&Array.from(kt).includes(document.activeElement)||Ae(),e.defaultFirstOption&&(e.filterable||e.remote)&&W.value&&ve()},{flush:"post"}),Je(()=>a.hoveringIndex,tt=>{Kn(tt)&&tt>-1?T.value=K.value[tt]||{}:T.value={},K.value.forEach(kt=>{kt.hover=T.value===kt})}),yl(()=>{a.isBeforeHide||ne()});const be=tt=>{a.previousQuery!==tt&&(a.previousQuery=tt,e.filterable&&Ut(e.filterMethod)?e.filterMethod(tt):e.filterable&&e.remote&&Ut(e.remoteMethod)&&e.remoteMethod(tt),e.defaultFirstOption&&(e.filterable||e.remote)&&W.value?St(ve):St(_e))},ve=()=>{const tt=K.value.filter(_n=>_n.visible&&!_n.disabled&&!_n.states.groupDisabled),kt=tt.find(_n=>_n.created),An=tt[0];a.hoveringIndex=it(K.value,kt||An)},Ae=()=>{if(!e.multiple){const kt=Ce(e.modelValue);return a.selectedLabel=kt.currentLabel,void(a.selected=kt)}a.selectedLabel="";const tt=[];mt(e.modelValue)&&e.modelValue.forEach(kt=>{tt.push(Ce(kt))}),a.selected=tt},Ce=tt=>{let kt;const An=Kb(tt).toLowerCase()==="object",_n=Kb(tt).toLowerCase()==="null",po=Kb(tt).toLowerCase()==="undefined";for(let Qr=a.cachedOptions.size-1;Qr>=0;Qr--){const Ar=X.value[Qr];if(An?es(Ar.value,e.valueKey)===es(tt,e.valueKey):Ar.value===tt){kt={value:tt,currentLabel:Ar.currentLabel,isDisabled:Ar.isDisabled};break}}return kt||{value:tt,currentLabel:An?tt.label:_n||po?"":tt}},_e=()=>{e.multiple?a.hoveringIndex=K.value.findIndex(tt=>a.selected.some(kt=>ht(kt)===ht(tt))):a.hoveringIndex=K.value.findIndex(tt=>ht(tt)===ht(a.selected))},ke=()=>{a.calculatorWidth=f.value.getBoundingClientRect().width},Be=()=>{var tt,kt;(kt=(tt=u.value)==null?void 0:tt.updatePopper)==null||kt.call(tt)},$e=()=>{var tt,kt;(kt=(tt=c.value)==null?void 0:tt.updatePopper)==null||kt.call(tt)},rt=()=>{a.inputValue.length>0&&!C.value&&(C.value=!0),be(a.inputValue)},ge=tt=>{if(a.inputValue=tt.target.value,!e.remote)return rt();We()},We=ts(()=>{rt()},z.value),st=tt=>{ns(e.modelValue,tt)||t(Xo,tt)},At=tt=>{tt.stopPropagation();const kt=e.multiple?[]:F.value;if(e.multiple)for(const An of a.selected)An.isDisabled&&kt.push(An.value);t(xn,kt),st(kt),a.hoveringIndex=-1,C.value=!1,t("clear"),me()},Ve=tt=>{if(e.multiple){const kt=(e.modelValue||[]).slice(),An=it(kt,tt.value);An>-1?kt.splice(An,1):(e.multipleLimit<=0||kt.length<e.multipleLimit)&&kt.push(tt.value),t(xn,kt),st(kt),tt.created&&be(""),e.filterable&&!e.reserveKeyword&&(a.inputValue="")}else t(xn,tt.value),st(tt.value),C.value=!1;me(),C.value||St(()=>{dt(tt)})},it=(tt=[],kt)=>{if(!wn(kt))return tt.indexOf(kt);const An=e.valueKey;let _n=-1;return tt.some((po,Qr)=>Zn(es(po,An))===es(kt,An)&&(_n=Qr,!0)),_n},dt=tt=>{var kt,An,_n,po,Qr;const Ar=mt(tt)?tt[0]:tt;let Jr=null;if(Ar!=null&&Ar.value){const Ao=K.value.filter(pl=>pl.value===Ar.value);Ao.length>0&&(Jr=Ao[0].$el)}if(u.value&&Jr){const Ao=(po=(_n=(An=(kt=u.value)==null?void 0:kt.popperRef)==null?void 0:An.contentRef)==null?void 0:_n.querySelector)==null?void 0:po.call(_n,`.${o.be("dropdown","wrap")}`);Ao&&Ooe(Ao,Jr)}(Qr=y.value)==null||Qr.handleScroll()},{handleCompositionStart:ot,handleCompositionUpdate:je,handleCompositionEnd:we}=UQ(tt=>ge(tt)),ze=ee(()=>{var tt,kt;return(kt=(tt=u.value)==null?void 0:tt.popperRef)==null?void 0:kt.contentRef}),me=()=>{var tt;(tt=d.value)==null||tt.focus()},Me=tt=>{if(C.value=!1,x.value){const kt=new FocusEvent("focus",tt);St(()=>E(kt))}},Ie=()=>{B.value||(a.menuVisibleOnFocus?a.menuVisibleOnFocus=!1:C.value=!C.value)},ht=tt=>wn(tt.value)?es(tt.value,e.valueKey):tt.value,gt=ee(()=>K.value.filter(tt=>tt.visible).every(tt=>tt.disabled)),vt=ee(()=>e.multiple?e.collapseTags?a.selected.slice(0,e.maxCollapseTags):a.selected:[]),qt=ee(()=>e.multiple&&e.collapseTags?a.selected.slice(e.maxCollapseTags):[]),mn=tt=>{if(C.value){if(a.options.size!==0&&W.value!==0&&!gt.value){tt==="next"?(a.hoveringIndex++,a.hoveringIndex===a.options.size&&(a.hoveringIndex=0)):tt==="prev"&&(a.hoveringIndex--,a.hoveringIndex<0&&(a.hoveringIndex=a.options.size-1));const kt=K.value[a.hoveringIndex];kt.disabled!==!0&&kt.states.groupDisabled!==!0&&kt.visible||mn(tt),St(()=>dt(T.value))}}else C.value=!0},Zt=ee(()=>{const tt=(()=>{if(!s.value)return 0;const kt=window.getComputedStyle(s.value);return Number.parseFloat(kt.gap||"6px")})();return{maxWidth:`${b.value&&e.maxCollapseTags===1?a.selectionWidth-a.collapseItemWidth-tt:a.selectionWidth}px`}}),rn=ee(()=>({maxWidth:`${a.selectionWidth}px`})),zn=ee(()=>({width:`${Math.max(a.calculatorWidth,11)}px`}));return e.multiple&&!mt(e.modelValue)&&t(xn,[]),!e.multiple&&mt(e.modelValue)&&t(xn,""),fa(s,()=>{a.selectionWidth=s.value.getBoundingClientRect().width}),fa(f,ke),fa(v,Be),fa(w,Be),fa(g,$e),fa(b,()=>{a.collapseItemWidth=b.value.getBoundingClientRect().width}),yn(()=>{Ae()}),{inputId:O,contentId:r,nsSelect:o,nsInput:i,states:a,isFocused:x,expanded:C,optionsArray:K,hoverOption:T,selectSize:se,filteredOptionsCount:W,resetCalculatorWidth:ke,updateTooltip:Be,updateTagTooltip:$e,debouncedOnInputChange:We,onInput:ge,deletePrevTag:tt=>{if(e.multiple&&tt.code!==Xt.delete&&tt.target.value.length<=0){const kt=e.modelValue.slice(),An=(_n=>WQ(_n,po=>!a.disabledOptions.has(po)))(kt);if(An<0)return;kt.splice(An,1),t(xn,kt),st(kt)}},deleteTag:(tt,kt)=>{const An=a.selected.indexOf(kt);if(An>-1&&!B.value){const _n=e.modelValue.slice();_n.splice(An,1),t(xn,_n),st(_n),t("remove-tag",kt.value)}tt.stopPropagation(),me()},deleteSelected:At,handleOptionSelect:Ve,scrollToOption:dt,hasModelValue:P,shouldShowPlaceholder:Z,currentPlaceholder:ye,showClose:V,iconComponent:L,iconReverse:H,validateState:U,validateIcon:G,showNewOption:te,updateOptions:ne,collapseTagSize:le,setSelected:Ae,selectDisabled:B,emptyText:$,handleCompositionStart:ot,handleCompositionUpdate:je,handleCompositionEnd:we,onOptionCreate:tt=>{a.options.set(tt.value,tt),a.cachedOptions.set(tt.value,tt),tt.disabled&&a.disabledOptions.set(tt.value,tt)},onOptionDestroy:(tt,kt)=>{a.options.get(tt)===kt&&a.options.delete(tt)},handleMenuEnter:()=>{a.isBeforeHide=!1,St(()=>dt(a.selected))},handleFocus:_,focus:me,blur:()=>{Me()},handleBlur:E,handleClearClick:tt=>{At(tt)},handleClickOutside:Me,handleEsc:()=>{a.inputValue.length>0?a.inputValue="":C.value=!1},toggleMenu:Ie,selectOption:()=>{C.value?K.value[a.hoveringIndex]&&Ve(K.value[a.hoveringIndex]):Ie()},getValueKey:ht,navigateOptions:mn,dropdownMenuVisible:J,showTagList:vt,collapseTagList:qt,tagStyle:Zt,collapseTagStyle:rn,inputStyle:zn,popperRef:ze,inputRef:d,tooltipRef:u,tagTooltipRef:c,calculatorRef:f,prefixRef:p,suffixRef:m,selectRef:l,wrapperRef:w,selectionRef:s,scrollbarRef:y,menuRef:v,tagMenuRef:g,collapseItemRef:b}};var Kje=Te({name:"ElOptions",setup(e,{slots:t}){const n=Rt(Nb);let r=[];return()=>{var o,i;const a=(o=t.default)==null?void 0:o.call(t),l=[];return a.length&&function s(u){mt(u)&&u.forEach(c=>{var d,f,p,m;const v=(d=(c==null?void 0:c.type)||{})==null?void 0:d.name;v==="ElOptionGroup"?s(an(c.children)||mt(c.children)||!Ut((f=c.children)==null?void 0:f.default)?c.children:(p=c.children)==null?void 0:p.default()):v==="ElOption"?l.push((m=c.props)==null?void 0:m.value):mt(c.children)&&s(c.children)})}((i=a[0])==null?void 0:i.children),ns(l,r)||(r=l,n&&(n.states.optionValues=l)),a}}});const Yje=Pt({name:String,id:String,modelValue:{type:[Array,String,Number,Boolean,Object],default:void 0},autocomplete:{type:String,default:"off"},automaticDropdown:Boolean,size:da,effect:{type:String,default:"light"},disabled:Boolean,clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:{type:String,default:""},popperOptions:{type:Object,default:()=>({})},remote:Boolean,loadingText:String,noMatchText:String,noDataText:String,remoteMethod:Function,filterMethod:Function,multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String},defaultFirstOption:Boolean,reserveKeyword:{type:Boolean,default:!0},valueKey:{type:String,default:"value"},collapseTags:Boolean,collapseTagsTooltip:Boolean,maxCollapseTags:{type:Number,default:1},teleported:Ui.teleported,persistent:{type:Boolean,default:!0},clearIcon:{type:fi,default:h0},fitInputWidth:Boolean,suffixIcon:{type:fi,default:p0},tagType:{...Lw.type,default:"info"},validateEvent:{type:Boolean,default:!0},remoteShowSuffix:Boolean,placement:{type:String,values:v0,default:"bottom-start"},fallbackPlacements:{type:Array,default:["bottom-start","top-start","right","left"]},ariaLabel:{type:String,default:void 0},...Fb}),Pse="ElSelect",Xje=Te({name:Pse,componentName:Pse,components:{ElInput:ua,ElSelectMenu:Gje,ElOption:AR,ElOptions:Kje,ElTag:kw,ElScrollbar:wd,ElTooltip:Al,ElIcon:Ft},directives:{ClickOutside:Rf},props:Yje,emits:[xn,Xo,"remove-tag","clear","visible-change","focus","blur"],setup(e,{emit:t}){const n=qje(e,t);return qn(Nb,Qn({props:e,states:n.states,optionsArray:n.optionsArray,handleOptionSelect:n.handleOptionSelect,onOptionCreate:n.onOptionCreate,onOptionDestroy:n.onOptionDestroy,selectRef:n.selectRef,setSelected:n.setSelected})),{...n}}}),Qje=["id","disabled","autocomplete","readonly","aria-activedescendant","aria-controls","aria-expanded","aria-label"],Jje=["textContent"];var Zje=Nt(Xje,[["render",function(e,t,n,r,o,i){const a=Qe("el-tag"),l=Qe("el-tooltip"),s=Qe("el-icon"),u=Qe("el-option"),c=Qe("el-options"),d=Qe("el-scrollbar"),f=Qe("el-select-menu"),p=gm("click-outside");return nn((Y(),fe("div",{ref:"selectRef",class:oe([e.nsSelect.b(),e.nsSelect.m(e.selectSize)]),onMouseenter:t[16]||(t[16]=m=>e.states.inputHovering=!0),onMouseleave:t[17]||(t[17]=m=>e.states.inputHovering=!1),onClick:t[18]||(t[18]=Gt((...m)=>e.toggleMenu&&e.toggleMenu(...m),["prevent","stop"]))},[ie(l,{ref:"tooltipRef",visible:e.dropdownMenuVisible,placement:e.placement,teleported:e.teleported,"popper-class":[e.nsSelect.e("popper"),e.popperClass],"popper-options":e.popperOptions,"fallback-placements":e.fallbackPlacements,effect:e.effect,pure:"",trigger:"click",transition:`${e.nsSelect.namespace.value}-zoom-in-top`,"stop-popper-mouse-event":!1,"gpu-acceleration":!1,persistent:e.persistent,onBeforeShow:e.handleMenuEnter,onHide:t[15]||(t[15]=m=>e.states.isBeforeHide=!1)},{default:he(()=>{var m;return[ce("div",{ref:"wrapperRef",class:oe([e.nsSelect.e("wrapper"),e.nsSelect.is("focused",e.isFocused),e.nsSelect.is("hovering",e.states.inputHovering),e.nsSelect.is("filterable",e.filterable),e.nsSelect.is("disabled",e.selectDisabled)])},[e.$slots.prefix?(Y(),fe("div",{key:0,ref:"prefixRef",class:oe(e.nsSelect.e("prefix"))},[ft(e.$slots,"prefix")],2)):Fe("v-if",!0),ce("div",{ref:"selectionRef",class:oe([e.nsSelect.e("selection"),e.nsSelect.is("near",e.multiple&&!e.$slots.prefix&&!!e.states.selected.length)])},[e.multiple?ft(e.$slots,"tag",{key:0},()=>[(Y(!0),fe(bt,null,bn(e.showTagList,v=>(Y(),fe("div",{key:e.getValueKey(v),class:oe(e.nsSelect.e("selected-item"))},[ie(a,{closable:!e.selectDisabled&&!v.isDisabled,size:e.collapseTagSize,type:e.tagType,"disable-transitions":"",style:$t(e.tagStyle),onClose:g=>e.deleteTag(g,v)},{default:he(()=>[ce("span",{class:oe(e.nsSelect.e("tags-text"))},Ye(v.currentLabel),3)]),_:2},1032,["closable","size","type","style","onClose"])],2))),128)),e.collapseTags&&e.states.selected.length>e.maxCollapseTags?(Y(),Le(l,{key:0,ref:"tagTooltipRef",disabled:e.dropdownMenuVisible||!e.collapseTagsTooltip,"fallback-placements":["bottom","top","right","left"],effect:e.effect,placement:"bottom",teleported:e.teleported},{default:he(()=>[ce("div",{ref:"collapseItemRef",class:oe(e.nsSelect.e("selected-item"))},[ie(a,{closable:!1,size:e.collapseTagSize,type:e.tagType,"disable-transitions":"",style:$t(e.collapseTagStyle)},{default:he(()=>[ce("span",{class:oe(e.nsSelect.e("tags-text"))}," + "+Ye(e.states.selected.length-e.maxCollapseTags),3)]),_:1},8,["size","type","style"])],2)]),content:he(()=>[ce("div",{ref:"tagMenuRef",class:oe(e.nsSelect.e("selection"))},[(Y(!0),fe(bt,null,bn(e.collapseTagList,v=>(Y(),fe("div",{key:e.getValueKey(v),class:oe(e.nsSelect.e("selected-item"))},[ie(a,{class:"in-tooltip",closable:!e.selectDisabled&&!v.isDisabled,size:e.collapseTagSize,type:e.tagType,"disable-transitions":"",onClose:g=>e.deleteTag(g,v)},{default:he(()=>[ce("span",{class:oe(e.nsSelect.e("tags-text"))},Ye(v.currentLabel),3)]),_:2},1032,["closable","size","type","onClose"])],2))),128))],2)]),_:1},8,["disabled","effect","teleported"])):Fe("v-if",!0)]):Fe("v-if",!0),e.selectDisabled?Fe("v-if",!0):(Y(),fe("div",{key:1,class:oe([e.nsSelect.e("selected-item"),e.nsSelect.e("input-wrapper"),e.nsSelect.is("hidden",!e.filterable)])},[nn(ce("input",{id:e.inputId,ref:"inputRef","onUpdate:modelValue":t[0]||(t[0]=v=>e.states.inputValue=v),type:"text",class:oe([e.nsSelect.e("input"),e.nsSelect.is(e.selectSize)]),disabled:e.selectDisabled,autocomplete:e.autocomplete,style:$t(e.inputStyle),role:"combobox",readonly:!e.filterable,spellcheck:"false","aria-activedescendant":((m=e.hoverOption)==null?void 0:m.id)||"","aria-controls":e.contentId,"aria-expanded":e.dropdownMenuVisible,"aria-label":e.ariaLabel,"aria-autocomplete":"none","aria-haspopup":"listbox",onFocus:t[1]||(t[1]=(...v)=>e.handleFocus&&e.handleFocus(...v)),onBlur:t[2]||(t[2]=(...v)=>e.handleBlur&&e.handleBlur(...v)),onKeydown:[t[3]||(t[3]=Rr(Gt(v=>e.navigateOptions("next"),["stop","prevent"]),["down"])),t[4]||(t[4]=Rr(Gt(v=>e.navigateOptions("prev"),["stop","prevent"]),["up"])),t[5]||(t[5]=Rr(Gt((...v)=>e.handleEsc&&e.handleEsc(...v),["stop","prevent"]),["esc"])),t[6]||(t[6]=Rr(Gt((...v)=>e.selectOption&&e.selectOption(...v),["stop","prevent"]),["enter"])),t[7]||(t[7]=Rr(Gt((...v)=>e.deletePrevTag&&e.deletePrevTag(...v),["stop"]),["delete"]))],onCompositionstart:t[8]||(t[8]=(...v)=>e.handleCompositionStart&&e.handleCompositionStart(...v)),onCompositionupdate:t[9]||(t[9]=(...v)=>e.handleCompositionUpdate&&e.handleCompositionUpdate(...v)),onCompositionend:t[10]||(t[10]=(...v)=>e.handleCompositionEnd&&e.handleCompositionEnd(...v)),onInput:t[11]||(t[11]=(...v)=>e.onInput&&e.onInput(...v)),onClick:t[12]||(t[12]=Gt((...v)=>e.toggleMenu&&e.toggleMenu(...v),["stop"]))},null,46,Qje),[[f0,e.states.inputValue]]),e.filterable?(Y(),fe("span",{key:0,ref:"calculatorRef","aria-hidden":"true",class:oe(e.nsSelect.e("input-calculator")),textContent:Ye(e.states.inputValue)},null,10,Jje)):Fe("v-if",!0)],2)),e.shouldShowPlaceholder?(Y(),fe("div",{key:2,class:oe([e.nsSelect.e("selected-item"),e.nsSelect.e("placeholder"),e.nsSelect.is("transparent",!e.hasModelValue||e.expanded&&!e.states.inputValue)])},[ce("span",null,Ye(e.currentPlaceholder),1)],2)):Fe("v-if",!0)],2),ce("div",{ref:"suffixRef",class:oe(e.nsSelect.e("suffix"))},[e.iconComponent&&!e.showClose?(Y(),Le(s,{key:0,class:oe([e.nsSelect.e("caret"),e.nsSelect.e("icon"),e.iconReverse])},{default:he(()=>[(Y(),Le(Hn(e.iconComponent)))]),_:1},8,["class"])):Fe("v-if",!0),e.showClose&&e.clearIcon?(Y(),Le(s,{key:1,class:oe([e.nsSelect.e("caret"),e.nsSelect.e("icon")]),onClick:e.handleClearClick},{default:he(()=>[(Y(),Le(Hn(e.clearIcon)))]),_:1},8,["class","onClick"])):Fe("v-if",!0),e.validateState&&e.validateIcon?(Y(),Le(s,{key:2,class:oe([e.nsInput.e("icon"),e.nsInput.e("validateIcon")])},{default:he(()=>[(Y(),Le(Hn(e.validateIcon)))]),_:1},8,["class"])):Fe("v-if",!0)],2)],2)]}),content:he(()=>[ie(f,{ref:"menuRef"},{default:he(()=>[e.$slots.header?(Y(),fe("div",{key:0,class:oe(e.nsSelect.be("dropdown","header")),onClick:t[13]||(t[13]=Gt(()=>{},["stop"]))},[ft(e.$slots,"header")],2)):Fe("v-if",!0),nn(ie(d,{id:e.contentId,ref:"scrollbarRef",tag:"ul","wrap-class":e.nsSelect.be("dropdown","wrap"),"view-class":e.nsSelect.be("dropdown","list"),class:oe([e.nsSelect.is("empty",e.filteredOptionsCount===0)]),role:"listbox","aria-label":e.ariaLabel,"aria-orientation":"vertical"},{default:he(()=>[e.showNewOption?(Y(),Le(u,{key:0,value:e.states.inputValue,created:!0},null,8,["value"])):Fe("v-if",!0),ie(c,null,{default:he(()=>[ft(e.$slots,"default")]),_:3})]),_:3},8,["id","wrap-class","view-class","class","aria-label"]),[[$n,e.states.options.size>0&&!e.loading]]),e.$slots.loading&&e.loading?(Y(),fe("div",{key:1,class:oe(e.nsSelect.be("dropdown","loading"))},[ft(e.$slots,"loading")],2)):e.loading||e.filteredOptionsCount===0?(Y(),fe("div",{key:2,class:oe(e.nsSelect.be("dropdown","empty"))},[ft(e.$slots,"empty",{},()=>[ce("span",null,Ye(e.emptyText),1)])],2)):Fe("v-if",!0),e.$slots.footer?(Y(),fe("div",{key:3,class:oe(e.nsSelect.be("dropdown","footer")),onClick:t[14]||(t[14]=Gt(()=>{},["stop"]))},[ft(e.$slots,"footer")],2)):Fe("v-if",!0)]),_:3},512)]),_:3},8,["visible","placement","teleported","popper-class","popper-options","fallback-placements","effect","transition","persistent","onBeforeShow"])],34)),[[p,e.handleClickOutside,e.popperRef]])}],["__file","select.vue"]]);const eVe=Te({name:"ElOptionGroup",componentName:"ElOptionGroup",props:{label:String,disabled:Boolean},setup(e){const t=_t("select"),n=de(null),r=dn(),o=de([]);qn(bR,Qn({...di(e)}));const i=ee(()=>o.value.some(s=>s.visible===!0)),a=s=>{const u=[];return mt(s.children)&&s.children.forEach(c=>{var d,f;c.type&&c.type.name==="ElOption"&&c.component&&c.component.proxy?u.push(c.component.proxy):(d=c.children)!=null&&d.length?u.push(...a(c)):(f=c.component)!=null&&f.subTree&&u.push(...a(c.component.subTree))}),u},l=()=>{o.value=a(r.subTree)};return yn(()=>{l()}),XNe(n,l,{attributes:!0,subtree:!0,childList:!0}),{groupRef:n,visible:i,ns:t}}});var Lse=Nt(eVe,[["render",function(e,t,n,r,o,i){return nn((Y(),fe("ul",{ref:"groupRef",class:oe(e.ns.be("group","wrap"))},[ce("li",{class:oe(e.ns.be("group","title"))},Ye(e.label),3),ce("li",null,[ce("ul",{class:oe(e.ns.b("group"))},[ft(e.$slots,"default")],2)])],2)),[[$n,e.visible]])}],["__file","option-group.vue"]]);let jse,Vse,zse,Hse;wb=Cr(Zje,{Option:AR,OptionGroup:Lse}),wO=Ya(AR),yOe=Ya(Lse),jse=Pt({title:String,confirmButtonText:String,cancelButtonText:String,confirmButtonType:{type:String,values:B9,default:"primary"},cancelButtonType:{type:String,values:B9,default:"text"},icon:{type:fi,default:()=>Poe},iconColor:{type:String,default:"#f90"},hideIcon:{type:Boolean,default:!1},hideAfter:{type:Number,default:200},teleported:Ui.teleported,persistent:Ui.persistent,width:{type:[String,Number],default:150}}),Vse={confirm:e=>e instanceof MouseEvent,cancel:e=>e instanceof MouseEvent},zse=Te({name:"ElPopconfirm"}),Hse=Te({...zse,props:jse,emits:Vse,setup(e,{emit:t}){const n=e,{t:r}=Gr(),o=_t("popconfirm"),i=de(),a=()=>{var f,p;(p=(f=i.value)==null?void 0:f.onClose)==null||p.call(f)},l=ee(()=>({width:ka(n.width)})),s=f=>{t("confirm",f),a()},u=f=>{t("cancel",f),a()},c=ee(()=>n.confirmButtonText||r("el.popconfirm.confirmButtonText")),d=ee(()=>n.cancelButtonText||r("el.popconfirm.cancelButtonText"));return(f,p)=>(Y(),Le(M(Al),Un({ref_key:"tooltipRef",ref:i,trigger:"click",effect:"light"},f.$attrs,{"popper-class":`${M(o).namespace.value}-popover`,"popper-style":M(l),teleported:f.teleported,"fallback-placements":["bottom","top","right","left"],"hide-after":f.hideAfter,persistent:f.persistent}),{content:he(()=>[ce("div",{class:oe(M(o).b())},[ce("div",{class:oe(M(o).e("main"))},[!f.hideIcon&&f.icon?(Y(),Le(M(Ft),{key:0,class:oe(M(o).e("icon")),style:$t({color:f.iconColor})},{default:he(()=>[(Y(),Le(Hn(f.icon)))]),_:1},8,["class","style"])):Fe("v-if",!0),Dt(" "+Ye(f.title),1)],2),ce("div",{class:oe(M(o).e("action"))},[ie(M(Sa),{size:"small",type:f.cancelButtonType==="text"?"":f.cancelButtonType,text:f.cancelButtonType==="text",onClick:u},{default:he(()=>[Dt(Ye(M(d)),1)]),_:1},8,["type","text"]),ie(M(Sa),{size:"small",type:f.confirmButtonType==="text"?"":f.confirmButtonType,text:f.confirmButtonType==="text",onClick:s},{default:he(()=>[Dt(Ye(M(c)),1)]),_:1},8,["type","text"])],2)],2)]),default:he(()=>[f.$slots.reference?ft(f.$slots,"reference",{key:0}):Fe("v-if",!0)]),_:3},16,["popper-class","popper-style","teleported","hide-after","persistent"]))}});const tVe=Cr(Nt(Hse,[["__file","popconfirm.vue"]])),nVe=Pt({trigger:ug.trigger,placement:Rw.placement,disabled:ug.disabled,visible:Ui.visible,transition:Ui.transition,popperOptions:Rw.popperOptions,tabindex:Rw.tabindex,content:Ui.content,popperStyle:Ui.popperStyle,popperClass:Ui.popperClass,enterable:{...Ui.enterable,default:!0},effect:{...Ui.effect,default:"light"},teleported:Ui.teleported,title:String,width:{type:[String,Number],default:150},offset:{type:Number,default:void 0},showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0},showArrow:{type:Boolean,default:!0},persistent:{type:Boolean,default:!0},"onUpdate:visible":{type:Function}}),rVe={"update:visible":e=>Ki(e),"before-enter":()=>!0,"before-leave":()=>!0,"after-enter":()=>!0,"after-leave":()=>!0},oVe=Te({name:"ElPopover"}),iVe=Te({...oVe,props:nVe,emits:rVe,setup(e,{expose:t,emit:n}){const r=e,o=ee(()=>r["onUpdate:visible"]),i=_t("popover"),a=de(),l=ee(()=>{var v;return(v=M(a))==null?void 0:v.popperRef}),s=ee(()=>[{width:ka(r.width)},r.popperStyle]),u=ee(()=>[i.b(),r.popperClass,{[i.m("plain")]:!!r.content}]),c=ee(()=>r.transition===`${i.namespace.value}-fade-in-linear`),d=()=>{n("before-enter")},f=()=>{n("before-leave")},p=()=>{n("after-enter")},m=()=>{n("update:visible",!1),n("after-leave")};return t({popperRef:l,hide:()=>{var v;(v=a.value)==null||v.hide()}}),(v,g)=>(Y(),Le(M(Al),Un({ref_key:"tooltipRef",ref:a},v.$attrs,{trigger:v.trigger,placement:v.placement,disabled:v.disabled,visible:v.visible,transition:v.transition,"popper-options":v.popperOptions,tabindex:v.tabindex,content:v.content,offset:v.offset,"show-after":v.showAfter,"hide-after":v.hideAfter,"auto-close":v.autoClose,"show-arrow":v.showArrow,"aria-label":v.title,effect:v.effect,enterable:v.enterable,"popper-class":M(u),"popper-style":M(s),teleported:v.teleported,persistent:v.persistent,"gpu-acceleration":M(c),"onUpdate:visible":M(o),onBeforeShow:d,onBeforeHide:f,onShow:p,onHide:m}),{content:he(()=>[v.title?(Y(),fe("div",{key:0,class:oe(M(i).e("title")),role:"title"},Ye(v.title),3)):Fe("v-if",!0),ft(v.$slots,"default",{},()=>[Dt(Ye(v.content),1)])]),default:he(()=>[v.$slots.reference?ft(v.$slots,"reference",{key:0}):Fe("v-if",!0)]),_:3},16,["trigger","placement","disabled","visible","transition","popper-options","tabindex","content","offset","show-after","hide-after","auto-close","show-arrow","aria-label","effect","enterable","popper-class","popper-style","teleported","persistent","gpu-acceleration","onUpdate:visible"]))}});var aVe=Nt(iVe,[["__file","popover.vue"]]);const $se=(e,t)=>{const n=t.arg||t.value,r=n==null?void 0:n.popperRef;r&&(r.triggerRef=e)};var lVe={mounted(e,t){$se(e,t)},updated(e,t){$se(e,t)}};let Use,Wse,Gse,qse,Kse,Yse,Xse,Qse,Jse;Use=((e,t)=>(e.install=n=>{n.directive(t,e)},e))(lVe,"popover"),kO=Cr(aVe,{directive:Use}),Wse=Pt({type:{type:String,default:"line",values:["line","circle","dashboard"]},percentage:{type:Number,default:0,validator:e=>e>=0&&e<=100},status:{type:String,default:"",values:["","success","exception","warning"]},indeterminate:{type:Boolean,default:!1},duration:{type:Number,default:3},strokeWidth:{type:Number,default:6},strokeLinecap:{type:String,default:"round"},textInside:{type:Boolean,default:!1},width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:[String,Array,Function],default:""},striped:Boolean,stripedFlow:Boolean,format:{type:Function,default:e=>`${e}%`}}),Gse=["aria-valuenow"],qse={viewBox:"0 0 100 100"},Kse=["d","stroke","stroke-linecap","stroke-width"],Yse=["d","stroke","opacity","stroke-linecap","stroke-width"],Xse={key:0},Qse=Te({name:"ElProgress"}),Jse=Te({...Qse,props:Wse,setup(e){const t=e,n={success:"#13ce66",exception:"#ff4949",warning:"#e6a23c",default:"#20a0ff"},r=_t("progress"),o=ee(()=>({width:`${t.percentage}%`,animationDuration:`${t.duration}s`,backgroundColor:b(t.percentage)})),i=ee(()=>(t.strokeWidth/t.width*100).toFixed(1)),a=ee(()=>["circle","dashboard"].includes(t.type)?Number.parseInt(""+(50-Number.parseFloat(i.value)/2),10):0),l=ee(()=>{const y=a.value,w=t.type==="dashboard";return`
| M 50 50
| m 0 ${w?"":"-"}${y}
| a ${y} ${y} 0 1 1 0 ${w?"-":""}${2*y}
| a ${y} ${y} 0 1 1 0 ${w?"":"-"}${2*y}
| `}),s=ee(()=>2*Math.PI*a.value),u=ee(()=>t.type==="dashboard"?.75:1),c=ee(()=>`${-1*s.value*(1-u.value)/2}px`),d=ee(()=>({strokeDasharray:`${s.value*u.value}px, ${s.value}px`,strokeDashoffset:c.value})),f=ee(()=>({strokeDasharray:`${s.value*u.value*(t.percentage/100)}px, ${s.value}px`,strokeDashoffset:c.value,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease, opacity ease 0.6s"})),p=ee(()=>{let y;return y=t.color?b(t.percentage):n[t.status]||n.default,y}),m=ee(()=>t.status==="warning"?v9:t.type==="line"?t.status==="success"?h9:h0:t.status==="success"?j3:wc),v=ee(()=>t.type==="line"?12+.4*t.strokeWidth:.111111*t.width+2),g=ee(()=>t.format(t.percentage)),b=y=>{var w;const{color:x}=t;if(Ut(x))return x(y);if(an(x))return x;{const _=function(E){const C=100/E.length;return E.map((T,k)=>an(T)?{color:T,percentage:(k+1)*C}:T).sort((T,k)=>T.percentage-k.percentage)}(x);for(const E of _)if(E.percentage>y)return E.color;return(w=_[_.length-1])==null?void 0:w.color}};return(y,w)=>(Y(),fe("div",{class:oe([M(r).b(),M(r).m(y.type),M(r).is(y.status),{[M(r).m("without-text")]:!y.showText,[M(r).m("text-inside")]:y.textInside}]),role:"progressbar","aria-valuenow":y.percentage,"aria-valuemin":"0","aria-valuemax":"100"},[y.type==="line"?(Y(),fe("div",{key:0,class:oe(M(r).b("bar"))},[ce("div",{class:oe(M(r).be("bar","outer")),style:$t({height:`${y.strokeWidth}px`})},[ce("div",{class:oe([M(r).be("bar","inner"),{[M(r).bem("bar","inner","indeterminate")]:y.indeterminate},{[M(r).bem("bar","inner","striped")]:y.striped},{[M(r).bem("bar","inner","striped-flow")]:y.stripedFlow}]),style:$t(M(o))},[(y.showText||y.$slots.default)&&y.textInside?(Y(),fe("div",{key:0,class:oe(M(r).be("bar","innerText"))},[ft(y.$slots,"default",{percentage:y.percentage},()=>[ce("span",null,Ye(M(g)),1)])],2)):Fe("v-if",!0)],6)],6)],2)):(Y(),fe("div",{key:1,class:oe(M(r).b("circle")),style:$t({height:`${y.width}px`,width:`${y.width}px`})},[(Y(),fe("svg",qse,[ce("path",{class:oe(M(r).be("circle","track")),d:M(l),stroke:`var(${M(r).cssVarName("fill-color-light")}, #e5e9f2)`,"stroke-linecap":y.strokeLinecap,"stroke-width":M(i),fill:"none",style:$t(M(d))},null,14,Kse),ce("path",{class:oe(M(r).be("circle","path")),d:M(l),stroke:M(p),fill:"none",opacity:y.percentage?1:0,"stroke-linecap":y.strokeLinecap,"stroke-width":M(i),style:$t(M(f))},null,14,Yse)]))],6)),!y.showText&&!y.$slots.default||y.textInside?Fe("v-if",!0):(Y(),fe("div",{key:2,class:oe(M(r).e("text")),style:$t({fontSize:`${M(v)}px`})},[ft(y.$slots,"default",{percentage:y.percentage},()=>[y.status?(Y(),Le(M(Ft),{key:1},{default:he(()=>[(Y(),Le(Hn(M(m))))]),_:1})):(Y(),fe("span",Xse,Ye(M(g)),1))])],6))],10,Gse))}});const wR=Cr(Nt(Jse,[["__file","progress.vue"]])),sVe=Pt({modelValue:{type:Number,default:0},id:{type:String,default:void 0},lowThreshold:{type:Number,default:2},highThreshold:{type:Number,default:4},max:{type:Number,default:5},colors:{type:[Array,Object],default:()=>["","",""]},voidColor:{type:String,default:""},disabledVoidColor:{type:String,default:""},icons:{type:[Array,Object],default:()=>[V3,V3,V3]},voidIcon:{type:fi,default:()=>Hoe},disabledVoidIcon:{type:fi,default:()=>V3},disabled:Boolean,allowHalf:Boolean,showText:Boolean,showScore:Boolean,textColor:{type:String,default:""},texts:{type:Array,default:()=>["Extremely bad","Disappointed","Fair","Satisfied","Surprise"]},scoreTemplate:{type:String,default:"{value}"},size:da,label:{type:String,default:void 0},clearable:{type:Boolean,default:!1}}),uVe={[Xo]:e=>Kn(e),[xn]:e=>Kn(e)},cVe=["id","aria-label","aria-labelledby","aria-valuenow","aria-valuetext","aria-valuemax"],dVe=["onMousemove","onClick"],fVe=Te({name:"ElRate"}),pVe=Te({...fVe,props:sVe,emits:uVe,setup(e,{expose:t,emit:n}){const r=e;function o(P,V){const L=G=>wn(G),H=Object.keys(V).map(G=>+G).filter(G=>{const z=V[G];return L(z)&&z.excluded?P<G:P<=G}).sort((G,z)=>G-z),U=V[H[0]];return L(U)&&U.value||U}const i=Rt(np,void 0),a=Rt(Fc,void 0),l=$i(),s=_t("rate"),{inputId:u,isLabeledByFormItem:c}=Ac(r,{formItemContext:a}),d=de(r.modelValue),f=de(-1),p=de(!0),m=ee(()=>[s.b(),s.m(l.value)]),v=ee(()=>r.disabled||(i==null?void 0:i.disabled)),g=ee(()=>s.cssVarBlock({"void-color":r.voidColor,"disabled-void-color":r.disabledVoidColor,"fill-color":x.value})),b=ee(()=>{let P="";return r.showScore?P=r.scoreTemplate.replace(/\{\s*value\s*\}/,v.value?`${r.modelValue}`:`${d.value}`):r.showText&&(P=r.texts[Math.ceil(d.value)-1]),P}),y=ee(()=>100*r.modelValue-100*Math.floor(r.modelValue)),w=ee(()=>mt(r.colors)?{[r.lowThreshold]:r.colors[0],[r.highThreshold]:{value:r.colors[1],excluded:!0},[r.max]:r.colors[2]}:r.colors),x=ee(()=>{const P=o(d.value,w.value);return wn(P)?"":P}),_=ee(()=>{let P="";return v.value?P=`${y.value}%`:r.allowHalf&&(P="50%"),{color:x.value,width:P}}),E=ee(()=>{let P=mt(r.icons)?[...r.icons]:{...r.icons};return P=Fo(P),mt(P)?{[r.lowThreshold]:P[0],[r.highThreshold]:{value:P[1],excluded:!0},[r.max]:P[2]}:P}),C=ee(()=>o(r.modelValue,E.value)),T=ee(()=>v.value?an(r.disabledVoidIcon)?r.disabledVoidIcon:Fo(r.disabledVoidIcon):an(r.voidIcon)?r.voidIcon:Fo(r.voidIcon)),k=ee(()=>o(d.value,E.value));function I(P){const V=v.value&&y.value>0&&P-1<r.modelValue&&P>r.modelValue,L=r.allowHalf&&p.value&&P-.5<=d.value&&P>d.value;return V||L}function O(P){r.clearable&&P===r.modelValue&&(P=0),n(xn,P),r.modelValue!==P&&n("change",P)}function F(P){if(v.value)return;let V=d.value;const L=P.code;return L===Xt.up||L===Xt.right?(r.allowHalf?V+=.5:V+=1,P.stopPropagation(),P.preventDefault()):L!==Xt.left&&L!==Xt.down||(r.allowHalf?V-=.5:V-=1,P.stopPropagation(),P.preventDefault()),V=V<0?0:V,V=V>r.max?r.max:V,n(xn,V),n("change",V),V}function N(P,V){if(!v.value){if(r.allowHalf&&V){let L=V.target;Hs(L,s.e("item"))&&(L=L.querySelector(`.${s.e("icon")}`)),(L.clientWidth===0||Hs(L,s.e("decimal")))&&(L=L.parentNode),p.value=2*V.offsetX<=L.clientWidth,d.value=p.value?P-.5:P}else d.value=P;f.value=P}}function B(){v.value||(r.allowHalf&&(p.value=r.modelValue!==Math.floor(r.modelValue)),d.value=r.modelValue,f.value=-1)}return Je(()=>r.modelValue,P=>{d.value=P,p.value=r.modelValue!==Math.floor(r.modelValue)}),r.modelValue||n(xn,0),t({setCurrentValue:N,resetCurrentValue:B}),(P,V)=>{var L;return Y(),fe("div",{id:M(u),class:oe([M(m),M(s).is("disabled",M(v))]),role:"slider","aria-label":M(c)?void 0:P.label||"rating","aria-labelledby":M(c)?(L=M(a))==null?void 0:L.labelId:void 0,"aria-valuenow":d.value,"aria-valuetext":M(b)||void 0,"aria-valuemin":"0","aria-valuemax":P.max,tabindex:"0",style:$t(M(g)),onKeydown:F},[(Y(!0),fe(bt,null,bn(P.max,(H,U)=>(Y(),fe("span",{key:U,class:oe(M(s).e("item")),onMousemove:G=>N(H,G),onMouseleave:B,onClick:G=>{return z=H,void(v.value||(r.allowHalf&&p.value?O(d.value):O(z)));var z}},[ie(M(Ft),{class:oe([M(s).e("icon"),{hover:f.value===H},M(s).is("active",H<=d.value)])},{default:he(()=>[I(H)?Fe("v-if",!0):(Y(),fe(bt,{key:0},[nn((Y(),Le(Hn(M(k)),null,null,512)),[[$n,H<=d.value]]),nn((Y(),Le(Hn(M(T)),null,null,512)),[[$n,!(H<=d.value)]])],64)),I(H)?(Y(),fe(bt,{key:1},[(Y(),Le(Hn(M(T)),{class:oe([M(s).em("decimal","box")])},null,8,["class"])),ie(M(Ft),{style:$t(M(_)),class:oe([M(s).e("icon"),M(s).e("decimal")])},{default:he(()=>[(Y(),Le(Hn(M(C))))]),_:1},8,["style","class"])],64)):Fe("v-if",!0)]),_:2},1032,["class"])],42,dVe))),128)),P.showText||P.showScore?(Y(),fe("span",{key:0,class:oe(M(s).e("text")),style:$t({color:P.textColor})},Ye(M(b)),7)):Fe("v-if",!0)],46,cVe)}}});let xR,Zse,rx,eue,tue,nue,rue,oue,iue,aue,lue,sue,uue,cue,due,fue,pue,hue,vue;PO=Cr(Nt(pVe,[["__file","rate.vue"]])),xR=Symbol("sliderContextKey"),Zse=Pt({modelValue:{type:[Number,Array],default:0},id:{type:String,default:void 0},min:{type:Number,default:0},max:{type:Number,default:100},step:{type:Number,default:1},showInput:Boolean,showInputControls:{type:Boolean,default:!0},size:da,inputSize:da,showStops:Boolean,showTooltip:{type:Boolean,default:!0},formatTooltip:{type:Function,default:void 0},disabled:Boolean,range:Boolean,vertical:Boolean,height:String,debounce:{type:Number,default:300},label:{type:String,default:void 0},rangeStartLabel:{type:String,default:void 0},rangeEndLabel:{type:String,default:void 0},formatValueText:{type:Function,default:void 0},tooltipClass:{type:String,default:void 0},placement:{type:String,values:v0,default:"top"},marks:{type:Object},validateEvent:{type:Boolean,default:!0}}),rx=e=>Kn(e)||mt(e)&&e.every(Kn),eue={[xn]:rx,[Tl]:rx,[Xo]:rx},tue=(e,t,n)=>{const{form:r,formItem:o}=qa(),i=Qo(),a=de(),l=de(),s={firstButton:a,secondButton:l},u=ee(()=>e.disabled||(r==null?void 0:r.disabled)||!1),c=ee(()=>Math.min(t.firstValue,t.secondValue)),d=ee(()=>Math.max(t.firstValue,t.secondValue)),f=ee(()=>e.range?100*(d.value-c.value)/(e.max-e.min)+"%":100*(t.firstValue-e.min)/(e.max-e.min)+"%"),p=ee(()=>e.range?100*(c.value-e.min)/(e.max-e.min)+"%":"0%"),m=ee(()=>e.vertical?{height:e.height}:{}),v=ee(()=>e.vertical?{height:f.value,bottom:p.value}:{width:f.value,left:p.value}),g=()=>{i.value&&(t.sliderSize=i.value["client"+(e.vertical?"Height":"Width")])},b=_=>{const E=(C=>{const T=e.min+C*(e.max-e.min)/100;if(!e.range)return a;let k;return k=Math.abs(c.value-T)<Math.abs(d.value-T)?t.firstValue<t.secondValue?"firstButton":"secondButton":t.firstValue>t.secondValue?"firstButton":"secondButton",s[k]})(_);return E.value.setPosition(_),E},y=_=>{n(xn,_),n(Tl,_)},w=async()=>{await St(),n(Xo,e.range?[c.value,d.value]:e.modelValue)},x=_=>{var E,C,T,k,I,O;if(u.value||t.dragging)return;g();let F=0;if(e.vertical){const N=(T=(C=(E=_.touches)==null?void 0:E.item(0))==null?void 0:C.clientY)!=null?T:_.clientY;F=(i.value.getBoundingClientRect().bottom-N)/t.sliderSize*100}else F=(((O=(I=(k=_.touches)==null?void 0:k.item(0))==null?void 0:I.clientX)!=null?O:_.clientX)-i.value.getBoundingClientRect().left)/t.sliderSize*100;return F<0||F>100?void 0:b(F)};return{elFormItem:o,slider:i,firstButton:a,secondButton:l,sliderDisabled:u,minValue:c,maxValue:d,runwayStyle:m,barStyle:v,resetSize:g,setPosition:b,emitChange:w,onSliderWrapperPrevent:_=>{var E,C;((E=s.firstButton.value)!=null&&E.dragging||(C=s.secondButton.value)!=null&&C.dragging)&&_.preventDefault()},onSliderClick:_=>{x(_)&&w()},onSliderDown:async _=>{const E=x(_);E&&(await St(),E.value.onButtonDown(_))},setFirstValue:_=>{t.firstValue=_,y(e.range?[c.value,d.value]:_)},setSecondValue:_=>{t.secondValue=_,e.range&&y([c.value,d.value])}}},{left:nue,down:rue,right:oue,up:iue,home:aue,end:lue,pageUp:sue,pageDown:uue}=Xt,cue=(e,t,n)=>{const{disabled:r,min:o,max:i,step:a,showTooltip:l,precision:s,sliderSize:u,formatTooltip:c,emitChange:d,resetSize:f,updateDragging:p}=Rt(xR),{tooltip:m,tooltipVisible:v,formatValue:g,displayTooltip:b,hideTooltip:y}=((F,N,B)=>{const P=de(),V=de(!1),L=ee(()=>N.value instanceof Function),H=ee(()=>L.value&&N.value(F.modelValue)||F.modelValue),U=ts(()=>{B.value&&(V.value=!0)},50),G=ts(()=>{B.value&&(V.value=!1)},50);return{tooltip:P,tooltipVisible:V,formatValue:H,displayTooltip:U,hideTooltip:G}})(e,c,l),w=de(),x=ee(()=>(e.modelValue-o.value)/(i.value-o.value)*100+"%"),_=ee(()=>e.vertical?{bottom:x.value}:{left:x.value}),E=F=>{r.value||(t.newPosition=Number.parseFloat(x.value)+F/(i.value-o.value)*100,O(t.newPosition),d())},C=F=>{let N,B;return F.type.startsWith("touch")?(B=F.touches[0].clientY,N=F.touches[0].clientX):(B=F.clientY,N=F.clientX),{clientX:N,clientY:B}},T=F=>{t.dragging=!0,t.isClick=!0;const{clientX:N,clientY:B}=C(F);e.vertical?t.startY=B:t.startX=N,t.startPosition=Number.parseFloat(x.value),t.newPosition=t.startPosition},k=F=>{if(t.dragging){let N;t.isClick=!1,b(),f();const{clientX:B,clientY:P}=C(F);e.vertical?(t.currentY=P,N=(t.startY-t.currentY)/u.value*100):(t.currentX=B,N=(t.currentX-t.startX)/u.value*100),t.newPosition=t.startPosition+N,O(t.newPosition)}},I=()=>{t.dragging&&(setTimeout(()=>{t.dragging=!1,t.hovering||y(),t.isClick||O(t.newPosition),d()},0),window.removeEventListener("mousemove",k),window.removeEventListener("touchmove",k),window.removeEventListener("mouseup",I),window.removeEventListener("touchend",I),window.removeEventListener("contextmenu",I))},O=async F=>{if(F===null||Number.isNaN(+F))return;F<0?F=0:F>100&&(F=100);const N=100/((i.value-o.value)/a.value);let B=Math.round(F/N)*N*(i.value-o.value)*.01+o.value;B=Number.parseFloat(B.toFixed(s.value)),B!==e.modelValue&&n(xn,B),t.dragging||e.modelValue===t.oldValue||(t.oldValue=e.modelValue),await St(),t.dragging&&b(),m.value.updatePopper()};return Je(()=>t.dragging,F=>{p(F)}),{disabled:r,button:w,tooltip:m,tooltipVisible:v,showTooltip:l,wrapperStyle:_,formatValue:g,handleMouseEnter:()=>{t.hovering=!0,b()},handleMouseLeave:()=>{t.hovering=!1,t.dragging||y()},onButtonDown:F=>{r.value||(F.preventDefault(),T(F),window.addEventListener("mousemove",k),window.addEventListener("touchmove",k),window.addEventListener("mouseup",I),window.addEventListener("touchend",I),window.addEventListener("contextmenu",I),w.value.focus())},onKeyDown:F=>{let N=!0;[nue,rue].includes(F.key)?E(-a.value):[oue,iue].includes(F.key)?E(a.value):F.key===aue?r.value||(O(0),d()):F.key===lue?r.value||(O(100),d()):F.key===uue?E(4*-a.value):F.key===sue?E(4*a.value):N=!1,N&&F.preventDefault()},setPosition:O}},due=Pt({modelValue:{type:Number,default:0},vertical:Boolean,tooltipClass:String,placement:{type:String,values:v0,default:"top"}}),fue={[xn]:e=>Kn(e)},pue=["tabindex"],hue=Te({name:"ElSliderButton"}),vue=Te({...hue,props:due,emits:fue,setup(e,{expose:t,emit:n}){const r=e,o=_t("slider"),i=Qn({hovering:!1,dragging:!1,isClick:!1,startX:0,currentX:0,startY:0,currentY:0,startPosition:0,newPosition:0,oldValue:r.modelValue}),{disabled:a,button:l,tooltip:s,showTooltip:u,tooltipVisible:c,wrapperStyle:d,formatValue:f,handleMouseEnter:p,handleMouseLeave:m,onButtonDown:v,onKeyDown:g,setPosition:b}=cue(r,i,n),{hovering:y,dragging:w}=di(i);return t({onButtonDown:v,onKeyDown:g,setPosition:b,hovering:y,dragging:w}),(x,_)=>(Y(),fe("div",{ref_key:"button",ref:l,class:oe([M(o).e("button-wrapper"),{hover:M(y),dragging:M(w)}]),style:$t(M(d)),tabindex:M(a)?-1:0,onMouseenter:_[0]||(_[0]=(...E)=>M(p)&&M(p)(...E)),onMouseleave:_[1]||(_[1]=(...E)=>M(m)&&M(m)(...E)),onMousedown:_[2]||(_[2]=(...E)=>M(v)&&M(v)(...E)),onTouchstart:_[3]||(_[3]=(...E)=>M(v)&&M(v)(...E)),onFocus:_[4]||(_[4]=(...E)=>M(p)&&M(p)(...E)),onBlur:_[5]||(_[5]=(...E)=>M(m)&&M(m)(...E)),onKeydown:_[6]||(_[6]=(...E)=>M(g)&&M(g)(...E))},[ie(M(Al),{ref_key:"tooltip",ref:s,visible:M(c),placement:x.placement,"fallback-placements":["top","bottom","right","left"],"stop-popper-mouse-event":!1,"popper-class":x.tooltipClass,disabled:!M(u),persistent:""},{content:he(()=>[ce("span",null,Ye(M(f)),1)]),default:he(()=>[ce("div",{class:oe([M(o).e("button"),{hover:M(y),dragging:M(w)}])},null,2)]),_:1},8,["visible","placement","popper-class","disabled"])],46,pue))}});var mue=Nt(vue,[["__file","button.vue"]]),hVe=Te({name:"ElSliderMarker",props:Pt({mark:{type:[String,Object],default:void 0}}),setup(e){const t=_t("slider"),n=ee(()=>an(e.mark)?e.mark:e.mark.label),r=ee(()=>an(e.mark)?void 0:e.mark.style);return()=>pn("div",{class:t.e("marks-text"),style:r.value},n.value)}});const vVe=["id","role","aria-label","aria-labelledby"],mVe={key:1},gVe=Te({name:"ElSlider"}),yVe=Te({...gVe,props:Zse,emits:eue,setup(e,{expose:t,emit:n}){const r=e,o=_t("slider"),{t:i}=Gr(),a=Qn({firstValue:0,secondValue:0,oldValue:0,dragging:!1,sliderSize:1}),{elFormItem:l,slider:s,firstButton:u,secondButton:c,sliderDisabled:d,minValue:f,maxValue:p,runwayStyle:m,barStyle:v,resetSize:g,emitChange:b,onSliderWrapperPrevent:y,onSliderClick:w,onSliderDown:x,setFirstValue:_,setSecondValue:E}=tue(r,a,n),{stops:C,getStopStyle:T}=((X,te,ne,se)=>({stops:ee(()=>{if(!X.showStops||X.min>X.max)return[];if(X.step===0)return[];const le=(X.max-X.min)/X.step,J=100*X.step/(X.max-X.min),Z=Array.from({length:le-1}).map((ye,be)=>(be+1)*J);return X.range?Z.filter(ye=>ye<100*(ne.value-X.min)/(X.max-X.min)||ye>100*(se.value-X.min)/(X.max-X.min)):Z.filter(ye=>ye>100*(te.firstValue-X.min)/(X.max-X.min))}),getStopStyle:le=>X.vertical?{bottom:`${le}%`}:{left:`${le}%`}}))(r,a,f,p),{inputId:k,isLabeledByFormItem:I}=Ac(r,{formItemContext:l}),O=$i(),F=ee(()=>r.inputSize||O.value),N=ee(()=>r.label||i("el.slider.defaultLabel",{min:r.min,max:r.max})),B=ee(()=>r.range?r.rangeStartLabel||i("el.slider.defaultRangeStartLabel"):N.value),P=ee(()=>r.formatValueText?r.formatValueText($.value):`${$.value}`),V=ee(()=>r.rangeEndLabel||i("el.slider.defaultRangeEndLabel")),L=ee(()=>r.formatValueText?r.formatValueText(W.value):`${W.value}`),H=ee(()=>[o.b(),o.m(O.value),o.is("vertical",r.vertical),{[o.m("with-input")]:r.showInput}]),U=(X=>ee(()=>X.marks?Object.keys(X.marks).map(Number.parseFloat).sort((te,ne)=>te-ne).filter(te=>te<=X.max&&te>=X.min).map(te=>({point:te,position:100*(te-X.min)/(X.max-X.min),mark:X.marks[te]})):[]))(r);((X,te,ne,se,le,J)=>{const Z=ve=>{le(xn,ve),le(Tl,ve)},ye=()=>X.range?![ne.value,se.value].every((ve,Ae)=>ve===te.oldValue[Ae]):X.modelValue!==te.oldValue,be=()=>{var ve,Ae;X.min>X.max&&Ka("Slider","min should not be greater than max.");const Ce=X.modelValue;X.range&&Array.isArray(Ce)?Ce[1]<X.min?Z([X.min,X.min]):Ce[0]>X.max?Z([X.max,X.max]):Ce[0]<X.min?Z([X.min,Ce[1]]):Ce[1]>X.max?Z([Ce[0],X.max]):(te.firstValue=Ce[0],te.secondValue=Ce[1],ye()&&(X.validateEvent&&((ve=J==null?void 0:J.validate)==null||ve.call(J,"change").catch(_e=>{})),te.oldValue=Ce.slice())):X.range||typeof Ce!="number"||Number.isNaN(Ce)||(Ce<X.min?Z(X.min):Ce>X.max?Z(X.max):(te.firstValue=Ce,ye()&&(X.validateEvent&&((Ae=J==null?void 0:J.validate)==null||Ae.call(J,"change").catch(_e=>{})),te.oldValue=Ce)))};be(),Je(()=>te.dragging,ve=>{ve||be()}),Je(()=>X.modelValue,(ve,Ae)=>{te.dragging||Array.isArray(ve)&&Array.isArray(Ae)&&ve.every((Ce,_e)=>Ce===Ae[_e])&&te.firstValue===ve[0]&&te.secondValue===ve[1]||be()},{deep:!0}),Je(()=>[X.min,X.max],()=>{be()})})(r,a,f,p,n,l);const G=ee(()=>{const X=[r.min,r.max,r.step].map(te=>{const ne=`${te}`.split(".")[1];return ne?ne.length:0});return Math.max.apply(null,X)}),{sliderWrapper:z}=((X,te,ne)=>{const se=de();return yn(async()=>{X.range?(Array.isArray(X.modelValue)?(te.firstValue=Math.max(X.min,X.modelValue[0]),te.secondValue=Math.min(X.max,X.modelValue[1])):(te.firstValue=X.min,te.secondValue=X.max),te.oldValue=[te.firstValue,te.secondValue]):(typeof X.modelValue!="number"||Number.isNaN(X.modelValue)?te.firstValue=X.min:te.firstValue=Math.min(X.max,Math.max(X.min,X.modelValue)),te.oldValue=te.firstValue),Yo(window,"resize",ne),await St(),ne()}),{sliderWrapper:se}})(r,a,g),{firstValue:$,secondValue:W,sliderSize:K}=di(a);return qn(xR,{...di(r),sliderSize:K,disabled:d,precision:G,emitChange:b,resetSize:g,updateDragging:X=>{a.dragging=X}}),t({onSliderClick:w}),(X,te)=>{var ne,se;return Y(),fe("div",{id:X.range?M(k):void 0,ref_key:"sliderWrapper",ref:z,class:oe(M(H)),role:X.range?"group":void 0,"aria-label":X.range&&!M(I)?M(N):void 0,"aria-labelledby":X.range&&M(I)?(ne=M(l))==null?void 0:ne.labelId:void 0,onTouchstart:te[2]||(te[2]=(...le)=>M(y)&&M(y)(...le)),onTouchmove:te[3]||(te[3]=(...le)=>M(y)&&M(y)(...le))},[ce("div",{ref_key:"slider",ref:s,class:oe([M(o).e("runway"),{"show-input":X.showInput&&!X.range},M(o).is("disabled",M(d))]),style:$t(M(m)),onMousedown:te[0]||(te[0]=(...le)=>M(x)&&M(x)(...le)),onTouchstart:te[1]||(te[1]=(...le)=>M(x)&&M(x)(...le))},[ce("div",{class:oe(M(o).e("bar")),style:$t(M(v))},null,6),ie(mue,{id:X.range?void 0:M(k),ref_key:"firstButton",ref:u,"model-value":M($),vertical:X.vertical,"tooltip-class":X.tooltipClass,placement:X.placement,role:"slider","aria-label":X.range||!M(I)?M(B):void 0,"aria-labelledby":!X.range&&M(I)?(se=M(l))==null?void 0:se.labelId:void 0,"aria-valuemin":X.min,"aria-valuemax":X.range?M(W):X.max,"aria-valuenow":M($),"aria-valuetext":M(P),"aria-orientation":X.vertical?"vertical":"horizontal","aria-disabled":M(d),"onUpdate:modelValue":M(_)},null,8,["id","model-value","vertical","tooltip-class","placement","aria-label","aria-labelledby","aria-valuemin","aria-valuemax","aria-valuenow","aria-valuetext","aria-orientation","aria-disabled","onUpdate:modelValue"]),X.range?(Y(),Le(mue,{key:0,ref_key:"secondButton",ref:c,"model-value":M(W),vertical:X.vertical,"tooltip-class":X.tooltipClass,placement:X.placement,role:"slider","aria-label":M(V),"aria-valuemin":M($),"aria-valuemax":X.max,"aria-valuenow":M(W),"aria-valuetext":M(L),"aria-orientation":X.vertical?"vertical":"horizontal","aria-disabled":M(d),"onUpdate:modelValue":M(E)},null,8,["model-value","vertical","tooltip-class","placement","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","aria-valuetext","aria-orientation","aria-disabled","onUpdate:modelValue"])):Fe("v-if",!0),X.showStops?(Y(),fe("div",mVe,[(Y(!0),fe(bt,null,bn(M(C),(le,J)=>(Y(),fe("div",{key:J,class:oe(M(o).e("stop")),style:$t(M(T)(le))},null,6))),128))])):Fe("v-if",!0),M(U).length>0?(Y(),fe(bt,{key:2},[ce("div",null,[(Y(!0),fe(bt,null,bn(M(U),(le,J)=>(Y(),fe("div",{key:J,style:$t(M(T)(le.position)),class:oe([M(o).e("stop"),M(o).e("marks-stop")])},null,6))),128))]),ce("div",{class:oe(M(o).e("marks"))},[(Y(!0),fe(bt,null,bn(M(U),(le,J)=>(Y(),Le(M(hVe),{key:J,mark:le.mark,style:$t(M(T)(le.position))},null,8,["mark","style"]))),128))],2)],64)):Fe("v-if",!0)],38),X.showInput&&!X.range?(Y(),Le(M(Bw),{key:0,ref:"input","model-value":M($),class:oe(M(o).e("input")),step:X.step,disabled:M(d),controls:X.showInputControls,min:X.min,max:X.max,debounce:X.debounce,size:M(F),"onUpdate:modelValue":M(_),onChange:M(b)},null,8,["model-value","class","step","disabled","controls","min","max","debounce","size","onUpdate:modelValue","onChange"])):Fe("v-if",!0)],42,vVe)}}});let gue,yue,bue,Aue,wue,xue,_ue,_R,Eue,Cue;IO=Cr(Nt(yVe,[["__file","slider.vue"]])),gue=Pt({modelValue:{type:[Boolean,String,Number],default:!1},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},size:{type:String,validator:WN},width:{type:[String,Number],default:""},inlinePrompt:{type:Boolean,default:!1},inactiveActionIcon:{type:fi},activeActionIcon:{type:fi},activeIcon:{type:fi},inactiveIcon:{type:fi},activeText:{type:String,default:""},inactiveText:{type:String,default:""},activeValue:{type:[Boolean,String,Number],default:!0},inactiveValue:{type:[Boolean,String,Number],default:!1},name:{type:String,default:""},validateEvent:{type:Boolean,default:!0},beforeChange:{type:Function},id:String,tabindex:{type:[String,Number]},label:{type:String,default:void 0}}),yue={[xn]:e=>Ki(e)||an(e)||Kn(e),[Xo]:e=>Ki(e)||an(e)||Kn(e),[Tl]:e=>Ki(e)||an(e)||Kn(e)},bue=["onClick"],Aue=["id","aria-checked","aria-disabled","aria-label","name","true-value","false-value","disabled","tabindex","onKeydown"],wue=["aria-hidden"],xue=["aria-hidden"],_ue=["aria-hidden"],_R="ElSwitch",Eue=Te({name:_R}),Cue=Te({...Eue,props:gue,emits:yue,setup(e,{expose:t,emit:n}){const r=e,{formItem:o}=qa(),i=$i(),a=_t("switch"),{inputId:l}=Ac(r,{formItemContext:o}),s=wl(ee(()=>r.loading)),u=de(r.modelValue!==!1),c=de(),d=de(),f=ee(()=>[a.b(),a.m(i.value),a.is("disabled",s.value),a.is("checked",b.value)]),p=ee(()=>[a.e("label"),a.em("label","left"),a.is("active",!b.value)]),m=ee(()=>[a.e("label"),a.em("label","right"),a.is("active",b.value)]),v=ee(()=>({width:ka(r.width)}));Je(()=>r.modelValue,()=>{u.value=!0});const g=ee(()=>!!u.value&&r.modelValue),b=ee(()=>g.value===r.activeValue);[r.activeValue,r.inactiveValue].includes(g.value)||(n(xn,r.inactiveValue),n(Xo,r.inactiveValue),n(Tl,r.inactiveValue)),Je(b,x=>{var _;c.value.checked=x,r.validateEvent&&((_=o==null?void 0:o.validate)==null||_.call(o,"change").catch(E=>{}))});const y=()=>{const x=b.value?r.inactiveValue:r.activeValue;n(xn,x),n(Xo,x),n(Tl,x),St(()=>{c.value.checked=b.value})},w=()=>{if(s.value)return;const{beforeChange:x}=r;if(!x)return void y();const _=x();[D0(_),Ki(_)].includes(!0)||Ka(_R,"beforeChange must return type `Promise<boolean>` or `boolean`"),D0(_)?_.then(E=>{E&&y()}).catch(E=>{}):_&&y()};return yn(()=>{c.value.checked=b.value}),t({focus:()=>{var x,_;(_=(x=c.value)==null?void 0:x.focus)==null||_.call(x)},checked:b}),(x,_)=>(Y(),fe("div",{class:oe(M(f)),onClick:Gt(w,["prevent"])},[ce("input",{id:M(l),ref_key:"input",ref:c,class:oe(M(a).e("input")),type:"checkbox",role:"switch","aria-checked":M(b),"aria-disabled":M(s),"aria-label":x.label,name:x.name,"true-value":x.activeValue,"false-value":x.inactiveValue,disabled:M(s),tabindex:x.tabindex,onChange:y,onKeydown:Rr(w,["enter"])},null,42,Aue),x.inlinePrompt||!x.inactiveIcon&&!x.inactiveText?Fe("v-if",!0):(Y(),fe("span",{key:0,class:oe(M(p))},[x.inactiveIcon?(Y(),Le(M(Ft),{key:0},{default:he(()=>[(Y(),Le(Hn(x.inactiveIcon)))]),_:1})):Fe("v-if",!0),!x.inactiveIcon&&x.inactiveText?(Y(),fe("span",{key:1,"aria-hidden":M(b)},Ye(x.inactiveText),9,wue)):Fe("v-if",!0)],2)),ce("span",{ref_key:"core",ref:d,class:oe(M(a).e("core")),style:$t(M(v))},[x.inlinePrompt?(Y(),fe("div",{key:0,class:oe(M(a).e("inner"))},[x.activeIcon||x.inactiveIcon?(Y(),Le(M(Ft),{key:0,class:oe(M(a).is("icon"))},{default:he(()=>[(Y(),Le(Hn(M(b)?x.activeIcon:x.inactiveIcon)))]),_:1},8,["class"])):x.activeText||x.inactiveText?(Y(),fe("span",{key:1,class:oe(M(a).is("text")),"aria-hidden":!M(b)},Ye(M(b)?x.activeText:x.inactiveText),11,xue)):Fe("v-if",!0)],2)):Fe("v-if",!0),ce("div",{class:oe(M(a).e("action"))},[x.loading?(Y(),Le(M(Ft),{key:0,class:oe(M(a).is("loading"))},{default:he(()=>[ie(M(jd))]),_:1},8,["class"])):M(b)?ft(x.$slots,"active-action",{key:1},()=>[x.activeActionIcon?(Y(),Le(M(Ft),{key:0},{default:he(()=>[(Y(),Le(Hn(x.activeActionIcon)))]),_:1})):Fe("v-if",!0)]):M(b)?Fe("v-if",!0):ft(x.$slots,"inactive-action",{key:2},()=>[x.inactiveActionIcon?(Y(),Le(M(Ft),{key:0},{default:he(()=>[(Y(),Le(Hn(x.inactiveActionIcon)))]),_:1})):Fe("v-if",!0)])],2)],6),x.inlinePrompt||!x.activeIcon&&!x.activeText?Fe("v-if",!0):(Y(),fe("span",{key:1,class:oe(M(m))},[x.activeIcon?(Y(),Le(M(Ft),{key:0},{default:he(()=>[(Y(),Le(Hn(x.activeIcon)))]),_:1})):Fe("v-if",!0),!x.activeIcon&&x.activeText?(Y(),fe("span",{key:1,"aria-hidden":!M(b)},Ye(x.activeText),9,_ue)):Fe("v-if",!0)],2))],10,bue))}});let ox,Sue,ER,kue,CR,Yi,sp;RO=Cr(Nt(Cue,[["__file","switch.vue"]])),ox=function(e){var t;return(t=e.target)==null?void 0:t.closest("td")},Sue=function(e,t,n,r,o){if(!t&&!r&&(!o||Array.isArray(o)&&!o.length))return e;n=typeof n=="string"?n==="descending"?-1:1:n&&n<0?-1:1;const i=r?null:function(a,l){return o?(Array.isArray(o)||(o=[o]),o.map(s=>typeof s=="string"?es(a,s):s(a,l,e))):(t!=="$key"&&wn(a)&&"$value"in a&&(a=a.$value),[wn(a)?es(a,t):a])};return e.map((a,l)=>({value:a,index:l,key:i?i(a,l):null})).sort((a,l)=>{let s=function(u,c){if(r)return r(u.value,c.value);for(let d=0,f=u.key.length;d<f;d++){if(u.key[d]<c.key[d])return-1;if(u.key[d]>c.key[d])return 1}return 0}(a,l);return s||(s=a.index-l.index),s*+n}).map(a=>a.value)},ER=function(e,t){let n=null;return e.columns.forEach(r=>{r.id===t&&(n=r)}),n},kue=function(e,t){let n=null;for(let r=0;r<e.columns.length;r++){const o=e.columns[r];if(o.columnKey===t){n=o;break}}return n||Ka("ElTable",`No column matching with column-key: ${t}`),n},CR=function(e,t,n){const r=(t.className||"").match(new RegExp(`${n}-table_[^\\s]+`,"gm"));return r?ER(e,r[0]):null},Yi=(e,t)=>{if(!e)throw new Error("Row is required when get row identity");if(typeof t=="string"){if(!t.includes("."))return`${e[t]}`;const n=t.split(".");let r=e;for(const o of n)r=r[o];return`${r}`}if(typeof t=="function")return t.call(null,e)},sp=function(e,t){const n={};return(e||[]).forEach((r,o)=>{n[Yi(r,t)]={row:r,index:o}}),n};function SR(e){return e===""||e!==void 0&&(e=Number.parseInt(e,10),Number.isNaN(e)&&(e="")),e}function Due(e){return e===""||e!==void 0&&(e=SR(e),Number.isNaN(e)&&(e=80)),e}function r4(e,t,n){let r=!1;const o=e.indexOf(t),i=o!==-1,a=l=>{l==="add"?e.push(t):e.splice(o,1),r=!0,mt(t.children)&&t.children.forEach(s=>{r4(e,s,n??!i)})};return Ki(n)?n&&!i?a("add"):!n&&i&&a("remove"):a(i?"remove":"add"),r}function bVe(e,t,n="children",r="hasChildren"){const o=a=>!(Array.isArray(a)&&a.length);function i(a,l,s){t(a,l,s),l.forEach(u=>{if(u[r])return void t(u,null,s+1);const c=u[n];o(c)||i(u,c,s+1)})}e.forEach(a=>{if(a[r])return void t(a,null,0);const l=a[n];o(l)||i(a,l,0)})}let Xs=null;function Oue(e){return e.children?wIe(e.children,Oue):[e]}function Tue(e,t){return e+t.colSpan}const Mue=(e,t,n,r)=>{let o=0,i=e;const a=n.states.columns.value;if(r){const s=Oue(r[e]);o=a.slice(0,a.indexOf(s[0])).reduce(Tue,0),i=o+s.reduce(Tue,0)-1}else o=e;let l;switch(t){case"left":i<n.states.fixedLeafColumnsLength.value&&(l="left");break;case"right":o>=a.length-n.states.rightFixedLeafColumnsLength.value&&(l="right");break;default:i<n.states.fixedLeafColumnsLength.value?l="left":o>=a.length-n.states.rightFixedLeafColumnsLength.value&&(l="right")}return l?{direction:l,start:o,after:i}:{}},kR=(e,t,n,r,o,i=0)=>{const a=[],{direction:l,start:s,after:u}=Mue(t,n,r,o);if(l){const c=l==="left";a.push(`${e}-fixed-column--${l}`),c&&u+i===r.states.fixedLeafColumnsLength.value-1?a.push("is-last-column"):c||s-i!=r.states.columns.value.length-r.states.rightFixedLeafColumnsLength.value||a.push("is-first-column")}return a};function Nue(e,t){return e+(t.realWidth===null||Number.isNaN(t.realWidth)?Number(t.width):t.realWidth)}const DR=(e,t,n,r)=>{const{direction:o,start:i=0,after:a=0}=Mue(e,t,n,r);if(!o)return;const l={},s=o==="left",u=n.states.columns.value;return s?l.left=u.slice(0,i).reduce(Nue,0):l.right=u.slice(a+1).reverse().reduce(Nue,0),l},pg=(e,t)=>{e&&(Number.isNaN(e[t])||(e[t]=`${e[t]}px`))},AVe=(e,t)=>{const n=t.sortingColumn;return n&&typeof n.sortable!="string"?Sue(e,t.sortProp,t.sortOrder,n.sortMethod,n.sortBy):e},ix=e=>{const t=[];return e.forEach(n=>{n.children&&n.children.length>0?t.push.apply(t,ix(n.children)):t.push(n)}),t};function wVe(){var e;const t=dn(),{size:n}=di((e=t.proxy)==null?void 0:e.$props),r=de(null),o=de([]),i=de([]),a=de(!1),l=de([]),s=de([]),u=de([]),c=de([]),d=de([]),f=de([]),p=de([]),m=de([]),v=de(0),g=de(0),b=de(0),y=de(!1),w=de([]),x=de(!1),_=de(!1),E=de(null),C=de({}),T=de(null),k=de(null),I=de(null),O=de(null),F=de(null);Je(o,()=>t.state&&P(!1),{deep:!0});const N=ve=>{var Ae;(Ae=ve.children)==null||Ae.forEach(Ce=>{Ce.fixed=ve.fixed,N(Ce)})},B=()=>{l.value.forEach(ke=>{N(ke)}),c.value=l.value.filter(ke=>ke.fixed===!0||ke.fixed==="left"),d.value=l.value.filter(ke=>ke.fixed==="right"),c.value.length>0&&l.value[0]&&l.value[0].type==="selection"&&!l.value[0].fixed&&(l.value[0].fixed=!0,c.value.unshift(l.value[0]));const ve=l.value.filter(ke=>!ke.fixed);s.value=[].concat(c.value).concat(ve).concat(d.value);const Ae=ix(ve),Ce=ix(c.value),_e=ix(d.value);v.value=Ae.length,g.value=Ce.length,b.value=_e.length,u.value=[].concat(Ce).concat(Ae).concat(_e),a.value=c.value.length>0||d.value.length>0},P=(ve,Ae=!1)=>{ve&&B(),Ae?t.state.doLayout():t.state.debouncedUpdateLayout()},V=ve=>{var Ae;if(!t||!t.store)return 0;const{treeData:Ce}=t.store.states;let _e=0;const ke=(Ae=Ce.value[ve])==null?void 0:Ae.children;return ke&&(_e+=ke.length,ke.forEach(Be=>{_e+=V(Be)})),_e},L=(ve,Ae,Ce)=>{k.value&&k.value!==ve&&(k.value.order=null),k.value=ve,I.value=Ae,O.value=Ce},H=()=>{let ve=M(i);Object.keys(C.value).forEach(Ae=>{const Ce=C.value[Ae];if(!Ce||Ce.length===0)return;const _e=ER({columns:u.value},Ae);_e&&_e.filterMethod&&(ve=ve.filter(ke=>Ce.some(Be=>_e.filterMethod.call(null,Be,ke,_e))))}),T.value=ve},U=()=>{o.value=AVe(T.value,{sortingColumn:k.value,sortProp:I.value,sortOrder:O.value})},{setExpandRowKeys:G,toggleRowExpansion:z,updateExpandRows:$,states:W,isRowExpanded:K}=function(ve){const Ae=dn(),Ce=de(!1),_e=de([]);return{updateExpandRows:()=>{const ke=ve.data.value||[],Be=ve.rowKey.value;if(Ce.value)_e.value=ke.slice();else if(Be){const $e=sp(_e.value,Be);_e.value=ke.reduce((rt,ge)=>{const We=Yi(ge,Be);return $e[We]&&rt.push(ge),rt},[])}else _e.value=[]},toggleRowExpansion:(ke,Be)=>{r4(_e.value,ke,Be)&&Ae.emit("expand-change",ke,_e.value.slice())},setExpandRowKeys:ke=>{Ae.store.assertRowKey();const Be=ve.data.value||[],$e=ve.rowKey.value,rt=sp(Be,$e);_e.value=ke.reduce((ge,We)=>{const st=rt[We];return st&&ge.push(st.row),ge},[])},isRowExpanded:ke=>{const Be=ve.rowKey.value;return Be?!!sp(_e.value,Be)[Yi(ke,Be)]:_e.value.includes(ke)},states:{expandRows:_e,defaultExpandAll:Ce}}}({data:o,rowKey:r}),{updateTreeExpandKeys:X,toggleTreeExpansion:te,updateTreeData:ne,loadOrToggle:se,states:le}=function(ve){const Ae=de([]),Ce=de({}),_e=de(16),ke=de(!1),Be=de({}),$e=de("hasChildren"),rt=de("children"),ge=dn(),We=ee(()=>{if(!ve.rowKey.value)return{};const ot=ve.data.value||[];return At(ot)}),st=ee(()=>{const ot=ve.rowKey.value,je=Object.keys(Be.value),we={};return je.length&&je.forEach(ze=>{if(Be.value[ze].length){const me={children:[]};Be.value[ze].forEach(Me=>{const Ie=Yi(Me,ot);me.children.push(Ie),Me[$e.value]&&!we[Ie]&&(we[Ie]={children:[]})}),we[ze]=me}}),we}),At=ot=>{const je=ve.rowKey.value,we={};return bVe(ot,(ze,me,Me)=>{const Ie=Yi(ze,je);Array.isArray(me)?we[Ie]={children:me.map(ht=>Yi(ht,je)),level:Me}:ke.value&&(we[Ie]={children:[],lazy:!0,level:Me})},rt.value,$e.value),we},Ve=(ot=!1,je=(we=>(we=ge.store)==null?void 0:we.states.defaultExpandAll.value)())=>{var we;const ze=We.value,me=st.value,Me=Object.keys(ze),Ie={};if(Me.length){const ht=M(Ce),gt=[],vt=(mn,Zt)=>{if(ot)return Ae.value?je||Ae.value.includes(Zt):!(!je&&!(mn!=null&&mn.expanded));{const rn=je||Ae.value&&Ae.value.includes(Zt);return!(!(mn!=null&&mn.expanded)&&!rn)}};Me.forEach(mn=>{const Zt=ht[mn],rn={...ze[mn]};if(rn.expanded=vt(Zt,mn),rn.lazy){const{loaded:zn=!1,loading:tt=!1}=Zt||{};rn.loaded=!!zn,rn.loading=!!tt,gt.push(mn)}Ie[mn]=rn});const qt=Object.keys(me);ke.value&&qt.length&>.length&&qt.forEach(mn=>{const Zt=ht[mn],rn=me[mn].children;if(gt.includes(mn)){if(Ie[mn].children.length!==0)throw new Error("[ElTable]children must be an empty array.");Ie[mn].children=rn}else{const{loaded:zn=!1,loading:tt=!1}=Zt||{};Ie[mn]={lazy:!0,loaded:!!zn,loading:!!tt,expanded:vt(Zt,mn),children:rn,level:""}}})}Ce.value=Ie,(we=ge.store)==null||we.updateTableScrollY()};Je(()=>Ae.value,()=>{Ve(!0)}),Je(()=>We.value,()=>{Ve()}),Je(()=>st.value,()=>{Ve()});const it=(ot,je)=>{ge.store.assertRowKey();const we=ve.rowKey.value,ze=Yi(ot,we),me=ze&&Ce.value[ze];if(ze&&me&&"expanded"in me){const Me=me.expanded;je=je===void 0?!me.expanded:je,Ce.value[ze].expanded=je,Me!==je&&ge.emit("expand-change",ot,je),ge.store.updateTableScrollY()}},dt=(ot,je,we)=>{const{load:ze}=ge.props;ze&&!Ce.value[je].loaded&&(Ce.value[je].loading=!0,ze(ot,we,me=>{if(!Array.isArray(me))throw new TypeError("[ElTable] data must be an array");Ce.value[je].loading=!1,Ce.value[je].loaded=!0,Ce.value[je].expanded=!0,me.length&&(Be.value[je]=me),ge.emit("expand-change",ot,!0)}))};return{loadData:dt,loadOrToggle:ot=>{ge.store.assertRowKey();const je=ve.rowKey.value,we=Yi(ot,je),ze=Ce.value[we];ke.value&&ze&&"loaded"in ze&&!ze.loaded?dt(ot,we,ze):it(ot,void 0)},toggleTreeExpansion:it,updateTreeExpandKeys:ot=>{Ae.value=ot,Ve()},updateTreeData:Ve,normalize:At,states:{expandRowKeys:Ae,treeData:Ce,indent:_e,lazy:ke,lazyTreeNodeMap:Be,lazyColumnIdentifier:$e,childrenColumnName:rt}}}({data:o,rowKey:r}),{updateCurrentRowData:J,updateCurrentRow:Z,setCurrentRowKey:ye,states:be}=function(ve){const Ae=dn(),Ce=de(null),_e=de(null),ke=()=>{Ce.value=null},Be=$e=>{const{data:rt,rowKey:ge}=ve;let We=null;ge.value&&(We=(M(rt)||[]).find(st=>Yi(st,ge.value)===$e)),_e.value=We,Ae.emit("current-change",_e.value,null)};return{setCurrentRowKey:$e=>{Ae.store.assertRowKey(),Ce.value=$e,Be($e)},restoreCurrentRowKey:ke,setCurrentRowByKey:Be,updateCurrentRow:$e=>{const rt=_e.value;if($e&&$e!==rt)return _e.value=$e,void Ae.emit("current-change",_e.value,rt);!$e&&rt&&(_e.value=null,Ae.emit("current-change",null,rt))},updateCurrentRowData:()=>{const $e=ve.rowKey.value,rt=ve.data.value||[],ge=_e.value;if(!rt.includes(ge)&&ge){if($e){const We=Yi(ge,$e);Be(We)}else _e.value=null;_e.value===null&&Ae.emit("current-change",null,ge)}else Ce.value&&(Be(Ce.value),ke())},states:{_currentRowKey:Ce,currentRow:_e}}}({data:o,rowKey:r});return{assertRowKey:()=>{if(!r.value)throw new Error("[ElTable] prop row-key is required")},updateColumns:B,scheduleLayout:P,isSelected:ve=>w.value.includes(ve),clearSelection:()=>{y.value=!1,w.value.length&&(w.value=[],t.emit("selection-change",[]))},cleanSelection:()=>{let ve;if(r.value){ve=[];const Ae=sp(w.value,r.value),Ce=sp(o.value,r.value);for(const _e in Ae)Tn(Ae,_e)&&!Ce[_e]&&ve.push(Ae[_e].row)}else ve=w.value.filter(Ae=>!o.value.includes(Ae));if(ve.length){const Ae=w.value.filter(Ce=>!ve.includes(Ce));w.value=Ae,t.emit("selection-change",Ae.slice())}},getSelectionRows:()=>(w.value||[]).slice(),toggleRowSelection:(ve,Ae=void 0,Ce=!0)=>{if(r4(w.value,ve,Ae)){const _e=(w.value||[]).slice();Ce&&t.emit("select",_e,ve),t.emit("selection-change",_e)}},_toggleAllSelection:()=>{var ve,Ae;const Ce=_.value?!y.value:!(y.value||w.value.length);y.value=Ce;let _e=!1,ke=0;const Be=(Ae=(ve=t==null?void 0:t.store)==null?void 0:ve.states)==null?void 0:Ae.rowKey.value;o.value.forEach(($e,rt)=>{const ge=rt+ke;E.value?E.value.call(null,$e,ge)&&r4(w.value,$e,Ce)&&(_e=!0):r4(w.value,$e,Ce)&&(_e=!0),ke+=V(Yi($e,Be))}),_e&&t.emit("selection-change",w.value?w.value.slice():[]),t.emit("select-all",w.value)},toggleAllSelection:null,updateSelectionByRowKey:()=>{const ve=sp(w.value,r.value);o.value.forEach(Ae=>{const Ce=Yi(Ae,r.value),_e=ve[Ce];_e&&(w.value[_e.index]=Ae)})},updateAllSelected:()=>{var ve,Ae,Ce;if(((ve=o.value)==null?void 0:ve.length)===0)return void(y.value=!1);let _e;r.value&&(_e=sp(w.value,r.value));const ke=function(ge){return _e?!!_e[Yi(ge,r.value)]:w.value.includes(ge)};let Be=!0,$e=0,rt=0;for(let ge=0,We=(o.value||[]).length;ge<We;ge++){const st=(Ce=(Ae=t==null?void 0:t.store)==null?void 0:Ae.states)==null?void 0:Ce.rowKey.value,At=ge+rt,Ve=o.value[ge],it=E.value&&E.value.call(null,Ve,At);if(ke(Ve))$e++;else if(!E.value||it){Be=!1;break}rt+=V(Yi(Ve,st))}$e===0&&(Be=!1),y.value=Be},updateFilters:(ve,Ae)=>{Array.isArray(ve)||(ve=[ve]);const Ce={};return ve.forEach(_e=>{C.value[_e.id]=Ae,Ce[_e.columnKey||_e.id]=Ae}),Ce},updateCurrentRow:Z,updateSort:L,execFilter:H,execSort:U,execQuery:(ve=void 0)=>{ve&&ve.filter||H(),U()},clearFilter:ve=>{const{tableHeaderRef:Ae}=t.refs;if(!Ae)return;const Ce=Object.assign({},Ae.filterPanels),_e=Object.keys(Ce);if(_e.length)if(typeof ve=="string"&&(ve=[ve]),Array.isArray(ve)){const ke=ve.map(Be=>kue({columns:u.value},Be));_e.forEach(Be=>{const $e=ke.find(rt=>rt.id===Be);$e&&($e.filteredValue=[])}),t.store.commit("filterChange",{column:ke,values:[],silent:!0,multi:!0})}else _e.forEach(ke=>{const Be=u.value.find($e=>$e.id===ke);Be&&(Be.filteredValue=[])}),C.value={},t.store.commit("filterChange",{column:{},values:[],silent:!0})},clearSort:()=>{k.value&&(L(null,null,null),t.store.commit("changeSortCondition",{silent:!0}))},toggleRowExpansion:z,setExpandRowKeysAdapter:ve=>{G(ve),X(ve)},setCurrentRowKey:ye,toggleRowExpansionAdapter:(ve,Ae)=>{u.value.some(({type:_e})=>_e==="expand")?z(ve,Ae):te(ve,Ae)},isRowExpanded:K,updateExpandRows:$,updateCurrentRowData:J,loadOrToggle:se,updateTreeData:ne,states:{tableSize:n,rowKey:r,data:o,_data:i,isComplex:a,_columns:l,originColumns:s,columns:u,fixedColumns:c,rightFixedColumns:d,leafColumns:f,fixedLeafColumns:p,rightFixedLeafColumns:m,updateOrderFns:[],leafColumnsLength:v,fixedLeafColumnsLength:g,rightFixedLeafColumnsLength:b,isAllSelected:y,selection:w,reserveSelection:x,selectOnIndeterminate:_,selectable:E,filters:C,filteredData:T,sortingColumn:k,sortProp:I,sortOrder:O,hoverRow:F,...W,...le,...be}}}function OR(e,t){return e.map(n=>{var r;return n.id===t.id?t:((r=n.children)!=null&&r.length&&(n.children=OR(n.children,t)),n)})}function TR(e){e.forEach(t=>{var n,r;t.no=(n=t.getColumnIndex)==null?void 0:n.call(t),(r=t.children)!=null&&r.length&&TR(t.children)}),e.sort((t,n)=>t.no-n.no)}const o4={rowKey:"rowKey",defaultExpandAll:"defaultExpandAll",selectOnIndeterminate:"selectOnIndeterminate",indent:"indent",lazy:"lazy",data:"data","treeProps.hasChildren":{key:"lazyColumnIdentifier",default:"hasChildren"},"treeProps.children":{key:"childrenColumnName",default:"children"}};function xVe(e,t){if(!e)throw new Error("Table is required.");const n=function(){const r=dn(),o=wVe();return{ns:_t("table"),...o,mutations:{setData(l,s){const u=M(l._data)!==s;l.data.value=s,l._data.value=s,r.store.execQuery(),r.store.updateCurrentRowData(),r.store.updateExpandRows(),r.store.updateTreeData(r.store.states.defaultExpandAll.value),M(l.reserveSelection)?(r.store.assertRowKey(),r.store.updateSelectionByRowKey()):u?r.store.clearSelection():r.store.cleanSelection(),r.store.updateAllSelected(),r.$ready&&r.store.scheduleLayout()},insertColumn(l,s,u,c){const d=M(l._columns);let f=[];u?(u&&!u.children&&(u.children=[]),u.children.push(s),f=OR(d,u)):(d.push(s),f=d),TR(f),l._columns.value=f,l.updateOrderFns.push(c),s.type==="selection"&&(l.selectable.value=s.selectable,l.reserveSelection.value=s.reserveSelection),r.$ready&&(r.store.updateColumns(),r.store.scheduleLayout())},updateColumnOrder(l,s){var u;((u=s.getColumnIndex)==null?void 0:u.call(s))!==s.no&&(TR(l._columns.value),r.$ready&&r.store.updateColumns())},removeColumn(l,s,u,c){const d=M(l._columns)||[];if(u)u.children.splice(u.children.findIndex(p=>p.id===s.id),1),St(()=>{var p;((p=u.children)==null?void 0:p.length)===0&&delete u.children}),l._columns.value=OR(d,u);else{const p=d.indexOf(s);p>-1&&(d.splice(p,1),l._columns.value=d)}const f=l.updateOrderFns.indexOf(c);f>-1&&l.updateOrderFns.splice(f,1),r.$ready&&(r.store.updateColumns(),r.store.scheduleLayout())},sort(l,s){const{prop:u,order:c,init:d}=s;if(u){const f=M(l.columns).find(p=>p.property===u);f&&(f.order=c,r.store.updateSort(f,u,c),r.store.commit("changeSortCondition",{init:d}))}},changeSortCondition(l,s){const{sortingColumn:u,sortProp:c,sortOrder:d}=l,f=M(u),p=M(c),m=M(d);m===null&&(l.sortingColumn.value=null,l.sortProp.value=null),r.store.execQuery({filter:!0}),s&&(s.silent||s.init)||r.emit("sort-change",{column:f,prop:p,order:m}),r.store.updateTableScrollY()},filterChange(l,s){const{column:u,values:c,silent:d}=s,f=r.store.updateFilters(u,c);r.store.execQuery(),d||r.emit("filter-change",f),r.store.updateTableScrollY()},toggleAllSelection(){r.store.toggleAllSelection()},rowSelectedChanged(l,s){r.store.toggleRowSelection(s),r.store.updateAllSelected()},setHoverRow(l,s){l.hoverRow.value=s},setCurrentRow(l,s){r.store.updateCurrentRow(s)}},commit:function(l,...s){const u=r.store.mutations;if(!u[l])throw new Error(`Action not found: ${l}`);u[l].apply(r,[r.store.states].concat(s))},updateTableScrollY:function(){St(()=>r.layout.updateScrollY.apply(r.layout))}}}();return n.toggleAllSelection=ts(n._toggleAllSelection,10),Object.keys(o4).forEach(r=>{Fue(Rue(t,r),r,n)}),function(r,o){Object.keys(o4).forEach(i=>{Je(()=>Rue(o,i),a=>{Fue(a,i,r)})})}(n,t),n}function Fue(e,t,n){let r=e,o=o4[t];typeof o4[t]=="object"&&(o=o.key,r=r||o4[t].default),n.states[o].value=r}function Rue(e,t){if(t.includes(".")){const n=t.split(".");let r=e;return n.forEach(o=>{r=r[o]}),r}return e[t]}class _Ve{constructor(t){this.observers=[],this.table=null,this.store=null,this.columns=[],this.fit=!0,this.showHeader=!0,this.height=de(null),this.scrollX=de(!1),this.scrollY=de(!1),this.bodyWidth=de(null),this.fixedWidth=de(null),this.rightFixedWidth=de(null),this.gutterWidth=0;for(const n in t)Tn(t,n)&&(Jn(this[n])?this[n].value=t[n]:this[n]=t[n]);if(!this.table)throw new Error("Table is required for Table Layout");if(!this.store)throw new Error("Store is required for Table Layout")}updateScrollY(){if(this.height.value===null)return!1;const t=this.table.refs.scrollBarRef;if(this.table.vnode.el&&(t!=null&&t.wrapRef)){let n=!0;const r=this.scrollY.value;return n=t.wrapRef.scrollHeight>t.wrapRef.clientHeight,this.scrollY.value=n,r!==n}return!1}setHeight(t,n="height"){if(!rr)return;const r=this.table.vnode.el;var o;if(t=typeof(o=t)=="number"?o:typeof o=="string"?/^\d+(?:px)?$/.test(o)?Number.parseInt(o,10):o:null,this.height.value=Number(t),!r&&(t||t===0))return St(()=>this.setHeight(t,n));typeof t=="number"?(r.style[n]=`${t}px`,this.updateElsHeight()):typeof t=="string"&&(r.style[n]=t,this.updateElsHeight())}setMaxHeight(t){this.setHeight(t,"max-height")}getFlattenColumns(){const t=[];return this.table.store.states.columns.value.forEach(n=>{n.isColumnGroup?t.push.apply(t,n.columns):t.push(n)}),t}updateElsHeight(){this.updateScrollY(),this.notifyObservers("scrollable")}headerDisplayNone(t){if(!t)return!0;let n=t;for(;n.tagName!=="DIV";){if(getComputedStyle(n).display==="none")return!0;n=n.parentElement}return!1}updateColumnsWidth(){if(!rr)return;const t=this.fit,n=this.table.vnode.el.clientWidth;let r=0;const o=this.getFlattenColumns(),i=o.filter(s=>typeof s.width!="number");if(o.forEach(s=>{typeof s.width=="number"&&s.realWidth&&(s.realWidth=null)}),i.length>0&&t){if(o.forEach(s=>{r+=Number(s.width||s.minWidth||80)}),r<=n){this.scrollX.value=!1;const s=n-r;if(i.length===1)i[0].realWidth=Number(i[0].minWidth||80)+s;else{const u=s/i.reduce((d,f)=>d+Number(f.minWidth||80),0);let c=0;i.forEach((d,f)=>{if(f===0)return;const p=Math.floor(Number(d.minWidth||80)*u);c+=p,d.realWidth=Number(d.minWidth||80)+p}),i[0].realWidth=Number(i[0].minWidth||80)+s-c}}else this.scrollX.value=!0,i.forEach(s=>{s.realWidth=Number(s.minWidth)});this.bodyWidth.value=Math.max(r,n),this.table.state.resizeState.value.width=this.bodyWidth.value}else o.forEach(s=>{s.width||s.minWidth?s.realWidth=Number(s.width||s.minWidth):s.realWidth=80,r+=s.realWidth}),this.scrollX.value=r>n,this.bodyWidth.value=r;const a=this.store.states.fixedColumns.value;if(a.length>0){let s=0;a.forEach(u=>{s+=Number(u.realWidth||u.width)}),this.fixedWidth.value=s}const l=this.store.states.rightFixedColumns.value;if(l.length>0){let s=0;l.forEach(u=>{s+=Number(u.realWidth||u.width)}),this.rightFixedWidth.value=s}this.notifyObservers("columns")}addObserver(t){this.observers.push(t)}removeObserver(t){const n=this.observers.indexOf(t);n!==-1&&this.observers.splice(n,1)}notifyObservers(t){this.observers.forEach(n=>{var r,o;switch(t){case"columns":(r=n.state)==null||r.onColumnsChange(this);break;case"scrollable":(o=n.state)==null||o.onScrollableChange(this);break;default:throw new Error(`Table Layout don't have event ${t}.`)}})}}const{CheckboxGroup:EVe}=bl,CVe=Te({name:"ElTableFilterPanel",components:{ElCheckbox:bl,ElCheckboxGroup:EVe,ElScrollbar:wd,ElTooltip:Al,ElIcon:Ft,ArrowDown:p0,ArrowUp:p9},directives:{ClickOutside:Rf},props:{placement:{type:String,default:"bottom-start"},store:{type:Object},column:{type:Object},upDataColumn:{type:Function}},setup(e){const t=dn(),{t:n}=Gr(),r=_t("table-filter"),o=t==null?void 0:t.parent;o.filterPanels.value[e.column.id]||(o.filterPanels.value[e.column.id]=t);const i=de(!1),a=de(null),l=ee(()=>e.column&&e.column.filters),s=ee(()=>e.column.filterClassName?`${r.b()} ${e.column.filterClassName}`:r.b()),u=ee({get:()=>{var v;return(((v=e.column)==null?void 0:v.filteredValue)||[])[0]},set:v=>{c.value&&(v!=null?c.value.splice(0,1,v):c.value.splice(0,1))}}),c=ee({get:()=>e.column&&e.column.filteredValue||[],set(v){e.column&&e.upDataColumn("filteredValue",v)}}),d=ee(()=>!e.column||e.column.filterMultiple),f=()=>{i.value=!1},p=v=>{e.store.commit("filterChange",{column:e.column,values:v}),e.store.updateAllSelected()};Je(i,v=>{e.column&&e.upDataColumn("filterOpened",v)},{immediate:!0});const m=ee(()=>{var v,g;return(g=(v=a.value)==null?void 0:v.popperRef)==null?void 0:g.contentRef});return{tooltipVisible:i,multiple:d,filterClassName:s,filteredValue:c,filterValue:u,filters:l,handleConfirm:()=>{p(c.value),f()},handleReset:()=>{c.value=[],p(c.value),f()},handleSelect:v=>{u.value=v,p(v!=null?c.value:[]),f()},isActive:v=>v.value===u.value,t:n,ns:r,showFilterPanel:v=>{v.stopPropagation(),i.value=!i.value},hideFilterPanel:()=>{i.value=!1},popperPaneRef:m,tooltip:a}}}),SVe={key:0},kVe=["disabled"],DVe=["label","onClick"];var OVe=Nt(CVe,[["render",function(e,t,n,r,o,i){const a=Qe("el-checkbox"),l=Qe("el-checkbox-group"),s=Qe("el-scrollbar"),u=Qe("arrow-up"),c=Qe("arrow-down"),d=Qe("el-icon"),f=Qe("el-tooltip"),p=gm("click-outside");return Y(),Le(f,{ref:"tooltip",visible:e.tooltipVisible,offset:0,placement:e.placement,"show-arrow":!1,"stop-popper-mouse-event":!1,teleported:"",effect:"light",pure:"","popper-class":e.filterClassName,persistent:""},{content:he(()=>[e.multiple?(Y(),fe("div",SVe,[ce("div",{class:oe(e.ns.e("content"))},[ie(s,{"wrap-class":e.ns.e("wrap")},{default:he(()=>[ie(l,{modelValue:e.filteredValue,"onUpdate:modelValue":t[0]||(t[0]=m=>e.filteredValue=m),class:oe(e.ns.e("checkbox-group"))},{default:he(()=>[(Y(!0),fe(bt,null,bn(e.filters,m=>(Y(),Le(a,{key:m.value,value:m.value},{default:he(()=>[Dt(Ye(m.text),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue","class"])]),_:1},8,["wrap-class"])],2),ce("div",{class:oe(e.ns.e("bottom"))},[ce("button",{class:oe({[e.ns.is("disabled")]:e.filteredValue.length===0}),disabled:e.filteredValue.length===0,type:"button",onClick:t[1]||(t[1]=(...m)=>e.handleConfirm&&e.handleConfirm(...m))},Ye(e.t("el.table.confirmFilter")),11,kVe),ce("button",{type:"button",onClick:t[2]||(t[2]=(...m)=>e.handleReset&&e.handleReset(...m))},Ye(e.t("el.table.resetFilter")),1)],2)])):(Y(),fe("ul",{key:1,class:oe(e.ns.e("list"))},[ce("li",{class:oe([e.ns.e("list-item"),{[e.ns.is("active")]:e.filterValue===void 0||e.filterValue===null}]),onClick:t[3]||(t[3]=m=>e.handleSelect(null))},Ye(e.t("el.table.clearFilter")),3),(Y(!0),fe(bt,null,bn(e.filters,m=>(Y(),fe("li",{key:m.value,class:oe([e.ns.e("list-item"),e.ns.is("active",e.isActive(m))]),label:m.value,onClick:v=>e.handleSelect(m.value)},Ye(m.text),11,DVe))),128))],2))]),default:he(()=>[nn((Y(),fe("span",{class:oe([`${e.ns.namespace.value}-table__column-filter-trigger`,`${e.ns.namespace.value}-none-outline`]),onClick:t[4]||(t[4]=(...m)=>e.showFilterPanel&&e.showFilterPanel(...m))},[ie(d,null,{default:he(()=>[e.column.filterOpened?(Y(),Le(u,{key:0})):(Y(),Le(c,{key:1}))]),_:1})],2)),[[p,e.hideFilterPanel,e.popperPaneRef]])]),_:1},8,["visible","placement","popper-class"])}],["__file","filter-panel.vue"]]);function Iue(e){const t=dn();g0(()=>{n.value.addObserver(t)}),yn(()=>{r(n.value),o(n.value)}),zs(()=>{r(n.value),o(n.value)}),Vs(()=>{n.value.removeObserver(t)});const n=ee(()=>{const i=e.layout;if(!i)throw new Error("Can not find table layout.");return i}),r=i=>{var a;const l=((a=e.vnode.el)==null?void 0:a.querySelectorAll("colgroup > col"))||[];if(!l.length)return;const s=i.getFlattenColumns(),u={};s.forEach(c=>{u[c.id]=c});for(let c=0,d=l.length;c<d;c++){const f=l[c],p=f.getAttribute("name"),m=u[p];m&&f.setAttribute("width",m.realWidth||m.width)}},o=i=>{var a,l;const s=((a=e.vnode.el)==null?void 0:a.querySelectorAll("colgroup > col[name=gutter]"))||[];for(let c=0,d=s.length;c<d;c++)s[c].setAttribute("width",i.scrollY.value?i.gutterWidth:"0");const u=((l=e.vnode.el)==null?void 0:l.querySelectorAll("th.gutter"))||[];for(let c=0,d=u.length;c<d;c++){const f=u[c];f.style.width=i.scrollY.value?`${i.gutterWidth}px`:"0",f.style.display=i.scrollY.value?"":"none"}};return{tableLayout:n.value,onColumnsChange:r,onScrollableChange:o}}const Rc=Symbol("ElTable"),Bue=e=>{const t=[];return e.forEach(n=>{n.children?(t.push(n),t.push.apply(t,Bue(n.children))):t.push(n)}),t};function TVe(e){const t=Rt(Rc),n=ee(()=>(r=>{let o=1;const i=(l,s)=>{if(s&&(l.level=s.level+1,o<l.level&&(o=l.level)),l.children){let u=0;l.children.forEach(c=>{i(c,l),u+=c.colSpan}),l.colSpan=u}else l.colSpan=1};r.forEach(l=>{l.level=1,i(l,void 0)});const a=[];for(let l=0;l<o;l++)a.push([]);return Bue(r).forEach(l=>{l.children?(l.rowSpan=1,l.children.forEach(s=>s.isSubColumn=!0)):l.rowSpan=o-l.level+1,a[l.level-1].push(l)}),a})(e.store.states.originColumns.value));return{isGroup:ee(()=>{const r=n.value.length>1;return r&&t&&(t.state.isGroup.value=!0),r}),toggleAllSelection:r=>{r.stopPropagation(),t==null||t.store.commit("toggleAllSelection")},columnRows:n}}var MVe=Te({name:"ElTableHeader",components:{ElCheckbox:bl},props:{fixed:{type:String,default:""},store:{required:!0,type:Object},border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e,{emit:t}){const n=dn(),r=Rt(Rc),o=_t("table"),i=de({}),{onColumnsChange:a,onScrollableChange:l}=Iue(r);yn(async()=>{await St(),await St();const{prop:E,order:C}=e.defaultSort;r==null||r.store.commit("sort",{prop:E,order:C,init:!0})});const{handleHeaderClick:s,handleHeaderContextMenu:u,handleMouseDown:c,handleMouseMove:d,handleMouseOut:f,handleSortClick:p,handleFilterClick:m}=function(E,C){const T=dn(),k=Rt(Rc),I=P=>{P.stopPropagation()},O=de(null),F=de(!1),N=de({}),B=(P,V,L)=>{var H;P.stopPropagation();const U=V.order===L?null:L||(({order:X,sortOrders:te})=>{if(X==="")return te[0];const ne=te.indexOf(X||null);return te[ne>te.length-2?0:ne+1]})(V),G=(H=P.target)==null?void 0:H.closest("th");if(G&&Hs(G,"noclick"))return void xl(G,"noclick");if(!V.sortable)return;const z=E.store.states;let $,W=z.sortProp.value;const K=z.sortingColumn.value;(K!==V||K===V&&K.order===null)&&(K&&(K.order=null),z.sortingColumn.value=V,W=V.property),$=V.order=U||null,z.sortProp.value=W,z.sortOrder.value=$,k==null||k.store.commit("changeSortCondition")};return{handleHeaderClick:(P,V)=>{!V.filters&&V.sortable?B(P,V,!1):V.filterable&&!V.sortable&&I(P),k==null||k.emit("header-click",V,P)},handleHeaderContextMenu:(P,V)=>{k==null||k.emit("header-contextmenu",V,P)},handleMouseDown:(P,V)=>{if(rr&&!(V.children&&V.children.length>0)&&O.value&&E.border){F.value=!0;const L=k;C("set-drag-visible",!0);const H=(L==null?void 0:L.vnode.el).getBoundingClientRect().left,U=T.vnode.el.querySelector(`th.${V.id}`),G=U.getBoundingClientRect(),z=G.left-H+30;Ed(U,"noclick"),N.value={startMouseLeft:P.clientX,startLeft:G.right-H,startColumnLeft:G.left-H,tableLeft:H};const $=L==null?void 0:L.refs.resizeProxy;$.style.left=`${N.value.startLeft}px`,document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};const W=X=>{const te=X.clientX-N.value.startMouseLeft,ne=N.value.startLeft+te;$.style.left=`${Math.max(z,ne)}px`},K=()=>{if(F.value){const{startColumnLeft:X,startLeft:te}=N.value,ne=Number.parseInt($.style.left,10)-X;V.width=V.realWidth=ne,L==null||L.emit("header-dragend",V.width,te-X,V,P),requestAnimationFrame(()=>{E.store.scheduleLayout(!1,!0)}),document.body.style.cursor="",F.value=!1,O.value=null,N.value={},C("set-drag-visible",!1)}document.removeEventListener("mousemove",W),document.removeEventListener("mouseup",K),document.onselectstart=null,document.ondragstart=null,setTimeout(()=>{xl(U,"noclick")},0)};document.addEventListener("mousemove",W),document.addEventListener("mouseup",K)}},handleMouseMove:(P,V)=>{if(V.children&&V.children.length>0)return;const L=P.target;if(!$s(L))return;const H=L==null?void 0:L.closest("th");if(V&&V.resizable&&!F.value&&E.border){const U=H.getBoundingClientRect(),G=document.body.style;U.width>12&&U.right-P.pageX<8?(G.cursor="col-resize",Hs(H,"is-sortable")&&(H.style.cursor="col-resize"),O.value=V):F.value||(G.cursor="",Hs(H,"is-sortable")&&(H.style.cursor="pointer"),O.value=null)}},handleMouseOut:()=>{rr&&(document.body.style.cursor="")},handleSortClick:B,handleFilterClick:I}}(e,t),{getHeaderRowStyle:v,getHeaderRowClass:g,getHeaderCellStyle:b,getHeaderCellClass:y}=function(E){const C=Rt(Rc),T=_t("table");return{getHeaderRowStyle:k=>{const I=C==null?void 0:C.props.headerRowStyle;return typeof I=="function"?I.call(null,{rowIndex:k}):I},getHeaderRowClass:k=>{const I=[],O=C==null?void 0:C.props.headerRowClassName;return typeof O=="string"?I.push(O):typeof O=="function"&&I.push(O.call(null,{rowIndex:k})),I.join(" ")},getHeaderCellStyle:(k,I,O,F)=>{var N;let B=(N=C==null?void 0:C.props.headerCellStyle)!=null?N:{};typeof B=="function"&&(B=B.call(null,{rowIndex:k,columnIndex:I,row:O,column:F}));const P=DR(I,F.fixed,E.store,O);return pg(P,"left"),pg(P,"right"),Object.assign({},B,P)},getHeaderCellClass:(k,I,O,F)=>{const N=kR(T.b(),I,F.fixed,E.store,O),B=[F.id,F.order,F.headerAlign,F.className,F.labelClassName,...N];F.children||B.push("is-leaf"),F.sortable&&B.push("is-sortable");const P=C==null?void 0:C.props.headerCellClassName;return typeof P=="string"?B.push(P):typeof P=="function"&&B.push(P.call(null,{rowIndex:k,columnIndex:I,row:O,column:F})),B.push(T.e("cell")),B.filter(V=>!!V).join(" ")}}}(e),{isGroup:w,toggleAllSelection:x,columnRows:_}=TVe(e);return n.state={onColumnsChange:a,onScrollableChange:l},n.filterPanels=i,{ns:o,filterPanels:i,onColumnsChange:a,onScrollableChange:l,columnRows:_,getHeaderRowClass:g,getHeaderRowStyle:v,getHeaderCellClass:y,getHeaderCellStyle:b,handleHeaderClick:s,handleHeaderContextMenu:u,handleMouseDown:c,handleMouseMove:d,handleMouseOut:f,handleSortClick:p,handleFilterClick:m,isGroup:w,toggleAllSelection:x}},render(){const{ns:e,isGroup:t,columnRows:n,getHeaderCellStyle:r,getHeaderCellClass:o,getHeaderRowClass:i,getHeaderRowStyle:a,handleHeaderClick:l,handleHeaderContextMenu:s,handleMouseDown:u,handleMouseMove:c,handleSortClick:d,handleMouseOut:f,store:p,$parent:m}=this;let v=1;return pn("thead",{class:{[e.is("group")]:t}},n.map((g,b)=>pn("tr",{class:i(b),key:b,style:a(b)},g.map((y,w)=>(y.rowSpan>v&&(v=y.rowSpan),pn("th",{class:o(b,w,g,y),colspan:y.colSpan,key:`${y.id}-thead`,rowspan:y.rowSpan,style:r(b,w,g,y),onClick:x=>l(x,y),onContextmenu:x=>s(x,y),onMousedown:x=>u(x,y),onMousemove:x=>c(x,y),onMouseout:f},[pn("div",{class:["cell",y.filteredValue&&y.filteredValue.length>0?"highlight":""]},[y.renderHeader?y.renderHeader({column:y,$index:w,store:p,_self:m}):y.label,y.sortable&&pn("span",{onClick:x=>d(x,y),class:"caret-wrapper"},[pn("i",{onClick:x=>d(x,y,"ascending"),class:"sort-caret ascending"}),pn("i",{onClick:x=>d(x,y,"descending"),class:"sort-caret descending"})]),y.filterable&&pn(OVe,{store:p,placement:y.filterPlacement||"bottom-start",column:y,upDataColumn:(x,_)=>{y[x]=_}})])]))))))}});function NVe(e){const t=Rt(Rc),n=de(""),r=de(pn("div")),o=(s,u,c)=>{var d;const f=t,p=ox(s);let m;const v=(d=f==null?void 0:f.vnode.el)==null?void 0:d.dataset.prefix;p&&(m=CR({columns:e.store.states.columns.value},p,v),m&&(f==null||f.emit(`cell-${c}`,u,m,p,s))),f==null||f.emit(`row-${c}`,u,m,s)},i=ts(s=>{e.store.commit("setHoverRow",s)},30),a=ts(()=>{e.store.commit("setHoverRow",null)},30),l=(s,u,c)=>{let d=u.target.parentNode;for(;s>1&&(d=d==null?void 0:d.nextSibling,d&&d.nodeName==="TR");)c(d,"hover-row hover-fixed-row"),s--};return{handleDoubleClick:(s,u)=>{o(s,u,"dblclick")},handleClick:(s,u)=>{e.store.commit("setCurrentRow",u),o(s,u,"click")},handleContextMenu:(s,u)=>{o(s,u,"contextmenu")},handleMouseEnter:i,handleMouseLeave:a,handleCellMouseEnter:(s,u,c)=>{var d;const f=t,p=ox(s),m=(d=f==null?void 0:f.vnode.el)==null?void 0:d.dataset.prefix;if(p){const T=CR({columns:e.store.states.columns.value},p,m);p.rowSpan>1&&l(p.rowSpan,s,Ed);const k=f.hoverState={cell:p,column:T,row:u};f==null||f.emit("cell-mouse-enter",k.row,k.column,k.cell,s)}if(!c)return;const v=s.target.querySelector(".cell");if(!Hs(v,`${m}-tooltip`)||!v.childNodes.length)return;const g=document.createRange();g.setStart(v,0),g.setEnd(v,v.childNodes.length);let b=g.getBoundingClientRect().width,y=g.getBoundingClientRect().height;b-Math.floor(b)<.001&&(b=Math.floor(b)),y-Math.floor(y)<.001&&(y=Math.floor(y));const{top:w,left:x,right:_,bottom:E}=(T=>{const k=window.getComputedStyle(T,null);return{left:Number.parseInt(k.paddingLeft,10)||0,right:Number.parseInt(k.paddingRight,10)||0,top:Number.parseInt(k.paddingTop,10)||0,bottom:Number.parseInt(k.paddingBottom,10)||0}})(v),C=w+E;(b+(x+_)>v.offsetWidth||y+C>v.offsetHeight||v.scrollWidth>v.offsetWidth)&&function(T,k,I,O){if((Xs==null?void 0:Xs.trigger)===I)return;Xs==null||Xs();const F=O==null?void 0:O.refs.tableWrapper,N=F==null?void 0:F.dataset.prefix,B={strategy:"fixed",...T.popperOptions},P=ie(Al,{content:k,virtualTriggering:!0,virtualRef:I,appendTo:F,placement:"top",transition:"none",offset:0,hideAfter:0,...T,popperOptions:B,onHide:()=>{Xs==null||Xs()}});P.appContext={...O.appContext,...O};const V=document.createElement("div");qs(P,V),P.component.exposed.onOpen();const L=F==null?void 0:F.querySelector(`.${N}-scrollbar__wrap`);Xs=()=>{qs(null,V),L==null||L.removeEventListener("scroll",Xs),Xs=null},Xs.trigger=I,L==null||L.addEventListener("scroll",Xs)}(c,p.innerText||p.textContent,p,f)},handleCellMouseLeave:s=>{const u=ox(s);if(!u)return;u.rowSpan>1&&l(u.rowSpan,s,xl);const c=t==null?void 0:t.hoverState;t==null||t.emit("cell-mouse-leave",c==null?void 0:c.row,c==null?void 0:c.column,c==null?void 0:c.cell,s)},tooltipContent:n,tooltipTrigger:r}}function FVe(e){const t=Rt(Rc),n=_t("table"),{handleDoubleClick:r,handleClick:o,handleContextMenu:i,handleMouseEnter:a,handleMouseLeave:l,handleCellMouseEnter:s,handleCellMouseLeave:u,tooltipContent:c,tooltipTrigger:d}=NVe(e),{getRowStyle:f,getRowClass:p,getCellStyle:m,getCellClass:v,getSpan:g,getColspanRealWidth:b}=function(E){const C=Rt(Rc),T=_t("table");return{getRowStyle:(k,I)=>{const O=C==null?void 0:C.props.rowStyle;return typeof O=="function"?O.call(null,{row:k,rowIndex:I}):O||null},getRowClass:(k,I)=>{const O=[T.e("row")];C!=null&&C.props.highlightCurrentRow&&k===E.store.states.currentRow.value&&O.push("current-row"),E.stripe&&I%2==1&&O.push(T.em("row","striped"));const F=C==null?void 0:C.props.rowClassName;return typeof F=="string"?O.push(F):typeof F=="function"&&O.push(F.call(null,{row:k,rowIndex:I})),O},getCellStyle:(k,I,O,F)=>{const N=C==null?void 0:C.props.cellStyle;let B=N??{};typeof N=="function"&&(B=N.call(null,{rowIndex:k,columnIndex:I,row:O,column:F}));const P=DR(I,E==null?void 0:E.fixed,E.store);return pg(P,"left"),pg(P,"right"),Object.assign({},B,P)},getCellClass:(k,I,O,F,N)=>{const B=kR(T.b(),I,E==null?void 0:E.fixed,E.store,void 0,N),P=[F.id,F.align,F.className,...B],V=C==null?void 0:C.props.cellClassName;return typeof V=="string"?P.push(V):typeof V=="function"&&P.push(V.call(null,{rowIndex:k,columnIndex:I,row:O,column:F})),P.push(T.e("cell")),P.filter(L=>!!L).join(" ")},getSpan:(k,I,O,F)=>{let N=1,B=1;const P=C==null?void 0:C.props.spanMethod;if(typeof P=="function"){const V=P({row:k,column:I,rowIndex:O,columnIndex:F});Array.isArray(V)?(N=V[0],B=V[1]):typeof V=="object"&&(N=V.rowspan,B=V.colspan)}return{rowspan:N,colspan:B}},getColspanRealWidth:(k,I,O)=>{if(I<1)return k[O].realWidth;const F=k.map(({realWidth:N,width:B})=>N||B).slice(O,O+I);return Number(F.reduce((N,B)=>Number(N)+Number(B),-1))}}}(e),y=ee(()=>e.store.states.columns.value.findIndex(({type:E})=>E==="default")),w=(E,C)=>{const T=t.props.rowKey;return T?Yi(E,T):C},x=(E,C,T,k=!1)=>{const{tooltipEffect:I,tooltipOptions:O,store:F}=e,{indent:N,columns:B}=F.states,P=p(E,C);let V=!0;return T&&(P.push(n.em("row",`level-${T.level}`)),V=T.display),pn("tr",{style:[V?null:{display:"none"},f(E,C)],class:P,key:w(E,C),onDblclick:L=>r(L,E),onClick:L=>o(L,E),onContextmenu:L=>i(L,E),onMouseenter:()=>a(C),onMouseleave:l},B.value.map((L,H)=>{const{rowspan:U,colspan:G}=g(E,L,C,H);if(!U||!G)return null;const z=Object.assign({},L);z.realWidth=b(B.value,G,H);const $={store:e.store,_self:e.context||t,column:z,row:E,$index:C,cellIndex:H,expanded:k};H===y.value&&T&&($.treeNode={indent:T.level*N.value,level:T.level},typeof T.expanded=="boolean"&&($.treeNode.expanded=T.expanded,"loading"in T&&($.treeNode.loading=T.loading),"noLazyChildren"in T&&($.treeNode.noLazyChildren=T.noLazyChildren)));const W=`${C},${H}`,K=z.columnKey||z.rawColumnKey||"",X=_(H,L,$),te=L.showOverflowTooltip&&XQ({effect:I},O,L.showOverflowTooltip);return pn("td",{style:m(C,H,E,L),class:v(C,H,E,L,G-1),key:`${K}${W}`,rowspan:U,colspan:G,onMouseenter:ne=>s(ne,E,te),onMouseleave:u},[X])}))},_=(E,C,T)=>C.renderCell(T);return{wrappedRowRender:(E,C)=>{const T=e.store,{isRowExpanded:k,assertRowKey:I}=T,{treeData:O,lazyTreeNodeMap:F,childrenColumnName:N,rowKey:B}=T.states,P=T.states.columns.value;if(P.some(({type:L})=>L==="expand")){const L=k(E),H=x(E,C,void 0,L),U=t.renderExpanded;return L?U?[[H,pn("tr",{key:`expanded-row__${H.key}`},[pn("td",{colspan:P.length,class:`${n.e("cell")} ${n.e("expanded-cell")}`},[U({row:E,$index:C,store:T,expanded:L})])])]]:(console.error("[Element Error]renderExpanded is required."),H):[[H]]}if(Object.keys(O.value).length){I();const L=Yi(E,B.value);let H=O.value[L],U=null;H&&(U={expanded:H.expanded,level:H.level,display:!0},typeof H.lazy=="boolean"&&(typeof H.loaded=="boolean"&&H.loaded&&(U.noLazyChildren=!(H.children&&H.children.length)),U.loading=H.loading));const G=[x(E,C,U)];if(H){let z=0;const $=(K,X)=>{K&&K.length&&X&&K.forEach(te=>{const ne={display:X.display&&X.expanded,level:X.level+1,expanded:!1,noLazyChildren:!1,loading:!1},se=Yi(te,B.value);if(se==null)throw new Error("For nested data item, row-key is required.");if(H={...O.value[se]},H&&(ne.expanded=H.expanded,H.level=H.level||ne.level,H.display=!(!H.expanded||!ne.display),typeof H.lazy=="boolean"&&(typeof H.loaded=="boolean"&&H.loaded&&(ne.noLazyChildren=!(H.children&&H.children.length)),ne.loading=H.loading)),z++,G.push(x(te,C+z,ne)),H){const le=F.value[se]||te[N.value];$(le,H)}})};H.display=!0;const W=F.value[L]||E[N.value];$(W,H)}return G}return x(E,C,void 0)},tooltipContent:c,tooltipTrigger:d}}var RVe=Te({name:"ElTableBody",props:{store:{required:!0,type:Object},stripe:Boolean,tooltipEffect:String,tooltipOptions:{type:Object},context:{default:()=>({}),type:Object},rowClassName:[String,Function],rowStyle:[Object,Function],fixed:{type:String,default:""},highlight:Boolean},setup(e){const t=dn(),n=Rt(Rc),r=_t("table"),{wrappedRowRender:o,tooltipContent:i,tooltipTrigger:a}=FVe(e),{onColumnsChange:l,onScrollableChange:s}=Iue(n),u=[];return Je(e.store.states.hoverRow,(c,d)=>{var f;const p=t==null?void 0:t.vnode.el,m=Array.from((p==null?void 0:p.children)||[]).filter(b=>b==null?void 0:b.classList.contains(`${r.e("row")}`));let v=c;const g=(f=m[v])==null?void 0:f.childNodes;if(g!=null&&g.length){let b=0;Array.from(g).reduce((w,x,_)=>{var E,C;return((E=g[_])==null?void 0:E.colSpan)>1&&(b=(C=g[_])==null?void 0:C.colSpan),x.nodeName!=="TD"&&b===0&&w.push(_),b>0&&b--,w},[]).forEach(w=>{for(var x;v>0;){const _=(x=m[v-1])==null?void 0:x.childNodes;if(_[w]&&_[w].nodeName==="TD"&&_[w].rowSpan>1){Ed(_[w],"hover-cell"),u.push(_[w]);break}v--}})}else u.forEach(b=>xl(b,"hover-cell")),u.length=0;e.store.states.isComplex.value&&rr&&RQ(()=>{const b=m[d],y=m[c];b&&!b.classList.contains("hover-fixed-row")&&xl(b,"hover-row"),y&&Ed(y,"hover-row")})}),Vs(()=>{var c;(c=Xs)==null||c()}),{ns:r,onColumnsChange:l,onScrollableChange:s,wrappedRowRender:o,tooltipContent:i,tooltipTrigger:a}},render(){const{wrappedRowRender:e,store:t}=this;return pn("tbody",{tabIndex:-1},[(t.states.data.value||[]).reduce((n,r)=>n.concat(e(r,n.length)),[])])}});function IVe(e){const{columns:t}=function(){const r=Rt(Rc),o=r==null?void 0:r.store;return{leftFixedLeafCount:ee(()=>o.states.fixedLeafColumnsLength.value),rightFixedLeafCount:ee(()=>o.states.rightFixedColumns.value.length),columnsCount:ee(()=>o.states.columns.value.length),leftFixedCount:ee(()=>o.states.fixedColumns.value.length),rightFixedCount:ee(()=>o.states.rightFixedColumns.value.length),columns:o.states.columns}}(),n=_t("table");return{getCellClasses:(r,o)=>{const i=r[o],a=[n.e("cell"),i.id,i.align,i.labelClassName,...kR(n.b(),o,i.fixed,e.store)];return i.className&&a.push(i.className),i.children||a.push(n.is("leaf")),a},getCellStyles:(r,o)=>{const i=DR(o,r.fixed,e.store);return pg(i,"left"),pg(i,"right"),i},columns:t}}var BVe=Te({name:"ElTableFooter",props:{fixed:{type:String,default:""},store:{required:!0,type:Object},summaryMethod:Function,sumText:String,border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e){const{getCellClasses:t,getCellStyles:n,columns:r}=IVe(e);return{ns:_t("table"),getCellClasses:t,getCellStyles:n,columns:r}},render(){const{columns:e,getCellStyles:t,getCellClasses:n,summaryMethod:r,sumText:o}=this,i=this.store.states.data.value;let a=[];return r?a=r({columns:e,data:i}):e.forEach((l,s)=>{if(s===0)return void(a[s]=o);const u=i.map(p=>Number(p[l.property])),c=[];let d=!0;u.forEach(p=>{if(!Number.isNaN(+p)){d=!1;const m=`${p}`.split(".")[1];c.push(m?m.length:0)}});const f=Math.max.apply(null,c);a[s]=d?"":u.reduce((p,m)=>{const v=Number(m);return Number.isNaN(+v)?p:Number.parseFloat((p+m).toFixed(Math.min(f,20)))},0)}),pn(pn("tfoot",[pn("tr",{},[...e.map((l,s)=>pn("td",{key:s,colspan:l.colSpan,rowspan:l.rowSpan,class:n(e,s),style:t(l,s)},[pn("div",{class:["cell",l.labelClassName]},[a[s]])]))])]))}});function PVe(e,t,n,r){const o=de(!1),i=de(null),a=de(!1),l=de({width:null,height:null,headerHeight:null}),s=de(!1),u=de(),c=de(0),d=de(0),f=de(0),p=de(0),m=de(0);yl(()=>{t.setHeight(e.height)}),yl(()=>{t.setMaxHeight(e.maxHeight)}),Je(()=>[e.currentRowKey,n.states.rowKey],([F,N])=>{M(N)&&M(F)&&n.setCurrentRowKey(`${F}`)},{immediate:!0}),Je(()=>e.data,F=>{r.store.commit("setData",F)},{immediate:!0,deep:!0}),yl(()=>{e.expandRowKeys&&n.setExpandRowKeysAdapter(e.expandRowKeys)});const v=ee(()=>e.height||e.maxHeight||n.states.fixedColumns.value.length>0||n.states.rightFixedColumns.value.length>0),g=ee(()=>({width:t.bodyWidth.value?`${t.bodyWidth.value}px`:""})),b=()=>{v.value&&t.updateElsHeight(),t.updateColumnsWidth(),requestAnimationFrame(w)};yn(async()=>{await St(),n.updateColumns(),x(),requestAnimationFrame(b);const F=r.vnode.el,N=r.refs.headerWrapper;e.flexible&&F&&F.parentElement&&(F.parentElement.style.minWidth="0"),l.value={width:u.value=F.offsetWidth,height:F.offsetHeight,headerHeight:e.showHeader&&N?N.offsetHeight:null},n.states.columns.value.forEach(B=>{B.filteredValue&&B.filteredValue.length&&r.store.commit("filterChange",{column:B,values:B.filteredValue,silent:!0})}),r.$ready=!0});const y=F=>{const{tableWrapper:N}=r.refs;((B,P)=>{if(!B)return;const V=Array.from(B.classList).filter(L=>!L.startsWith("is-scrolling-"));V.push(t.scrollX.value?P:"is-scrolling-none"),B.className=V.join(" ")})(N,F)},w=function(){if(!r.refs.scrollBarRef)return;if(!t.scrollX.value){const H="is-scrolling-none";return void((U=>{const{tableWrapper:G}=r.refs;return!(!G||!G.classList.contains(U))})(H)||y(H))}const F=r.refs.scrollBarRef.wrapRef;if(!F)return;const{scrollLeft:N,offsetWidth:B,scrollWidth:P}=F,{headerWrapper:V,footerWrapper:L}=r.refs;V&&(V.scrollLeft=N),L&&(L.scrollLeft=N),y(N>=P-B-1?"is-scrolling-right":N===0?"is-scrolling-left":"is-scrolling-middle")},x=()=>{r.refs.scrollBarRef&&(r.refs.scrollBarRef.wrapRef&&Yo(r.refs.scrollBarRef.wrapRef,"scroll",w,{passive:!0}),e.fit?fa(r.vnode.el,_):Yo(window,"resize",_),fa(r.refs.bodyWrapper,()=>{var F,N;_(),(N=(F=r.refs)==null?void 0:F.scrollBarRef)==null||N.update()}))},_=()=>{var F,N,B,P;const V=r.vnode.el;if(!r.$ready||!V)return;let L=!1;const{width:H,height:U,headerHeight:G}=l.value,z=u.value=V.offsetWidth;H!==z&&(L=!0);const $=V.offsetHeight;(e.height||v.value)&&U!==$&&(L=!0);const W=e.tableLayout==="fixed"?r.refs.headerWrapper:(F=r.refs.tableHeaderRef)==null?void 0:F.$el;e.showHeader&&(W==null?void 0:W.offsetHeight)!==G&&(L=!0),c.value=((N=r.refs.tableWrapper)==null?void 0:N.scrollHeight)||0,f.value=(W==null?void 0:W.scrollHeight)||0,p.value=((B=r.refs.footerWrapper)==null?void 0:B.offsetHeight)||0,m.value=((P=r.refs.appendWrapper)==null?void 0:P.offsetHeight)||0,d.value=c.value-f.value-p.value-m.value,L&&(l.value={width:z,height:$,headerHeight:e.showHeader&&(W==null?void 0:W.offsetHeight)||0},b())},E=$i(),C=ee(()=>{const{bodyWidth:F,scrollY:N,gutterWidth:B}=t;return F.value?F.value-(N.value?B:0)+"px":""}),T=ee(()=>e.maxHeight?"fixed":e.tableLayout),k=ee(()=>{if(e.data&&e.data.length)return null;let F="100%";e.height&&d.value&&(F=`${d.value}px`);const N=u.value;return{width:N?`${N}px`:"",height:F}}),I=ee(()=>e.height?{height:Number.isNaN(Number(e.height))?e.height:`${e.height}px`}:e.maxHeight?{maxHeight:Number.isNaN(Number(e.maxHeight))?e.maxHeight:`${e.maxHeight}px`}:{}),O=ee(()=>e.height?{height:"100%"}:e.maxHeight?Number.isNaN(Number(e.maxHeight))?{maxHeight:`calc(${e.maxHeight} - ${f.value+p.value}px)`}:{maxHeight:e.maxHeight-f.value-p.value+"px"}:{});return{isHidden:o,renderExpanded:i,setDragVisible:F=>{a.value=F},isGroup:s,handleMouseLeave:()=>{r.store.commit("setHoverRow",null),r.hoverState&&(r.hoverState=null)},handleHeaderFooterMousewheel:(F,N)=>{const{pixelX:B,pixelY:P}=N;Math.abs(B)>=Math.abs(P)&&(r.refs.bodyWrapper.scrollLeft+=N.pixelX/5)},tableSize:E,emptyBlockStyle:k,handleFixedMousewheel:(F,N)=>{const B=r.refs.bodyWrapper;if(Math.abs(N.spinY)>0){const P=B.scrollTop;N.pixelY<0&&P!==0&&F.preventDefault(),N.pixelY>0&&B.scrollHeight-B.clientHeight>P&&F.preventDefault(),B.scrollTop+=Math.ceil(N.pixelY/5)}else B.scrollLeft+=Math.ceil(N.pixelX/5)},resizeProxyVisible:a,bodyWidth:C,resizeState:l,doLayout:b,tableBodyStyles:g,tableLayout:T,scrollbarViewStyle:{display:"inline-block",verticalAlign:"middle"},tableInnerStyle:I,scrollbarStyle:O}}function LVe(e){const t=de();yn(()=>{(()=>{const n=e.vnode.el.querySelector(".hidden-columns"),r=e.store.states.updateOrderFns;t.value=new MutationObserver(()=>{r.forEach(o=>o())}),t.value.observe(n,{childList:!0,subtree:!0})})()}),Vs(()=>{var n;(n=t.value)==null||n.disconnect()})}var jVe={data:{type:Array,default:()=>[]},size:da,width:[String,Number],height:[String,Number],maxHeight:[String,Number],fit:{type:Boolean,default:!0},stripe:Boolean,border:Boolean,rowKey:[String,Function],showHeader:{type:Boolean,default:!0},showSummary:Boolean,sumText:String,summaryMethod:Function,rowClassName:[String,Function],rowStyle:[Object,Function],cellClassName:[String,Function],cellStyle:[Object,Function],headerRowClassName:[String,Function],headerRowStyle:[Object,Function],headerCellClassName:[String,Function],headerCellStyle:[Object,Function],highlightCurrentRow:Boolean,currentRowKey:[String,Number],emptyText:String,expandRowKeys:Array,defaultExpandAll:Boolean,defaultSort:Object,tooltipEffect:String,tooltipOptions:Object,spanMethod:Function,selectOnIndeterminate:{type:Boolean,default:!0},indent:{type:Number,default:16},treeProps:{type:Object,default:()=>({hasChildren:"hasChildren",children:"children"})},lazy:Boolean,load:Function,style:{type:Object,default:()=>({})},className:{type:String,default:""},tableLayout:{type:String,default:"fixed"},scrollbarAlwaysOn:Boolean,flexible:Boolean,showOverflowTooltip:[Boolean,Object]};function Pue(e){const t=e.tableLayout==="auto";let n=e.columns||[];return t&&n.every(r=>r.width===void 0)&&(n=[]),pn("colgroup",{},n.map(r=>pn("col",(o=>{const i={key:`${e.tableLayout}_${o.id}`,style:{},name:void 0};return t?i.style={width:`${o.width}px`}:i.name=o.id,i})(r))))}Pue.props=["columns","tableLayout"];let VVe=1;const zVe=Te({name:"ElTable",directives:{Mousewheel:fPe},components:{TableHeader:MVe,TableBody:RVe,TableFooter:BVe,ElScrollbar:wd,hColgroup:Pue},props:jVe,emits:["select","select-all","selection-change","cell-mouse-enter","cell-mouse-leave","cell-contextmenu","cell-click","cell-dblclick","row-click","row-contextmenu","row-dblclick","header-click","header-contextmenu","sort-change","filter-change","current-change","header-dragend","expand-change"],setup(e){const{t}=Gr(),n=_t("table"),r=dn();qn(Rc,r);const o=xVe(r,e);r.store=o;const i=new _Ve({store:r.store,table:r,fit:e.fit,showHeader:e.showHeader});r.layout=i;const a=ee(()=>(o.states.data.value||[]).length===0),{setCurrentRow:l,getSelectionRows:s,toggleRowSelection:u,clearSelection:c,clearFilter:d,toggleAllSelection:f,toggleRowExpansion:p,clearSort:m,sort:v}=function(te){return{setCurrentRow:ne=>{te.commit("setCurrentRow",ne)},getSelectionRows:()=>te.getSelectionRows(),toggleRowSelection:(ne,se)=>{te.toggleRowSelection(ne,se,!1),te.updateAllSelected()},clearSelection:()=>{te.clearSelection()},clearFilter:ne=>{te.clearFilter(ne)},toggleAllSelection:()=>{te.commit("toggleAllSelection")},toggleRowExpansion:(ne,se)=>{te.toggleRowExpansionAdapter(ne,se)},clearSort:()=>{te.clearSort()},sort:(ne,se)=>{te.commit("sort",{prop:ne,order:se})}}}(o),{isHidden:g,renderExpanded:b,setDragVisible:y,isGroup:w,handleMouseLeave:x,handleHeaderFooterMousewheel:_,tableSize:E,emptyBlockStyle:C,handleFixedMousewheel:T,resizeProxyVisible:k,bodyWidth:I,resizeState:O,doLayout:F,tableBodyStyles:N,tableLayout:B,scrollbarViewStyle:P,tableInnerStyle:V,scrollbarStyle:L}=PVe(e,i,o,r),{scrollBarRef:H,scrollTo:U,setScrollLeft:G,setScrollTop:z}=(()=>{const te=de(),ne=(se,le)=>{const J=te.value;J&&Kn(le)&&["Top","Left"].includes(se)&&J[`setScroll${se}`](le)};return{scrollBarRef:te,scrollTo:(se,le)=>{const J=te.value;J&&J.scrollTo(se,le)},setScrollTop:se=>ne("Top",se),setScrollLeft:se=>ne("Left",se)}})(),$=ts(F,50),W=`${n.namespace.value}-table_${VVe++}`;r.tableId=W,r.state={isGroup:w,resizeState:O,doLayout:F,debouncedUpdateLayout:$};const K=ee(()=>e.sumText||t("el.table.sumText")),X=ee(()=>e.emptyText||t("el.table.emptyText"));return LVe(r),{ns:n,layout:i,store:o,handleHeaderFooterMousewheel:_,handleMouseLeave:x,tableId:W,tableSize:E,isHidden:g,isEmpty:a,renderExpanded:b,resizeProxyVisible:k,resizeState:O,isGroup:w,bodyWidth:I,tableBodyStyles:N,emptyBlockStyle:C,debouncedUpdateLayout:$,handleFixedMousewheel:T,setCurrentRow:l,getSelectionRows:s,toggleRowSelection:u,clearSelection:c,clearFilter:d,toggleAllSelection:f,toggleRowExpansion:p,clearSort:m,doLayout:F,sort:v,t,setDragVisible:y,context:r,computedSumText:K,computedEmptyText:X,tableLayout:B,scrollbarViewStyle:P,tableInnerStyle:V,scrollbarStyle:L,scrollBarRef:H,scrollTo:U,setScrollLeft:G,setScrollTop:z}}}),HVe=["data-prefix"],$Ve={ref:"hiddenColumns",class:"hidden-columns"};var UVe=Nt(zVe,[["render",function(e,t,n,r,o,i){const a=Qe("hColgroup"),l=Qe("table-header"),s=Qe("table-body"),u=Qe("table-footer"),c=Qe("el-scrollbar"),d=gm("mousewheel");return Y(),fe("div",{ref:"tableWrapper",class:oe([{[e.ns.m("fit")]:e.fit,[e.ns.m("striped")]:e.stripe,[e.ns.m("border")]:e.border||e.isGroup,[e.ns.m("hidden")]:e.isHidden,[e.ns.m("group")]:e.isGroup,[e.ns.m("fluid-height")]:e.maxHeight,[e.ns.m("scrollable-x")]:e.layout.scrollX.value,[e.ns.m("scrollable-y")]:e.layout.scrollY.value,[e.ns.m("enable-row-hover")]:!e.store.states.isComplex.value,[e.ns.m("enable-row-transition")]:(e.store.states.data.value||[]).length!==0&&(e.store.states.data.value||[]).length<100,"has-footer":e.showSummary},e.ns.m(e.tableSize),e.className,e.ns.b(),e.ns.m(`layout-${e.tableLayout}`)]),style:$t(e.style),"data-prefix":e.ns.namespace.value,onMouseleave:t[0]||(t[0]=(...f)=>e.handleMouseLeave&&e.handleMouseLeave(...f))},[ce("div",{class:oe(e.ns.e("inner-wrapper")),style:$t(e.tableInnerStyle)},[ce("div",$Ve,[ft(e.$slots,"default")],512),e.showHeader&&e.tableLayout==="fixed"?nn((Y(),fe("div",{key:0,ref:"headerWrapper",class:oe(e.ns.e("header-wrapper"))},[ce("table",{ref:"tableHeader",class:oe(e.ns.e("header")),style:$t(e.tableBodyStyles),border:"0",cellpadding:"0",cellspacing:"0"},[ie(a,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),ie(l,{ref:"tableHeaderRef",border:e.border,"default-sort":e.defaultSort,store:e.store,onSetDragVisible:e.setDragVisible},null,8,["border","default-sort","store","onSetDragVisible"])],6)],2)),[[d,e.handleHeaderFooterMousewheel]]):Fe("v-if",!0),ce("div",{ref:"bodyWrapper",class:oe(e.ns.e("body-wrapper"))},[ie(c,{ref:"scrollBarRef","view-style":e.scrollbarViewStyle,"wrap-style":e.scrollbarStyle,always:e.scrollbarAlwaysOn},{default:he(()=>[ce("table",{ref:"tableBody",class:oe(e.ns.e("body")),cellspacing:"0",cellpadding:"0",border:"0",style:$t({width:e.bodyWidth,tableLayout:e.tableLayout})},[ie(a,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),e.showHeader&&e.tableLayout==="auto"?(Y(),Le(l,{key:0,ref:"tableHeaderRef",class:oe(e.ns.e("body-header")),border:e.border,"default-sort":e.defaultSort,store:e.store,onSetDragVisible:e.setDragVisible},null,8,["class","border","default-sort","store","onSetDragVisible"])):Fe("v-if",!0),ie(s,{context:e.context,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"tooltip-effect":e.tooltipEffect,"tooltip-options":e.tooltipOptions,"row-style":e.rowStyle,store:e.store,stripe:e.stripe},null,8,["context","highlight","row-class-name","tooltip-effect","tooltip-options","row-style","store","stripe"]),e.showSummary&&e.tableLayout==="auto"?(Y(),Le(u,{key:1,class:oe(e.ns.e("body-footer")),border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["class","border","default-sort","store","sum-text","summary-method"])):Fe("v-if",!0)],6),e.isEmpty?(Y(),fe("div",{key:0,ref:"emptyBlock",style:$t(e.emptyBlockStyle),class:oe(e.ns.e("empty-block"))},[ce("span",{class:oe(e.ns.e("empty-text"))},[ft(e.$slots,"empty",{},()=>[Dt(Ye(e.computedEmptyText),1)])],2)],6)):Fe("v-if",!0),e.$slots.append?(Y(),fe("div",{key:1,ref:"appendWrapper",class:oe(e.ns.e("append-wrapper"))},[ft(e.$slots,"append")],2)):Fe("v-if",!0)]),_:3},8,["view-style","wrap-style","always"])],2),e.showSummary&&e.tableLayout==="fixed"?nn((Y(),fe("div",{key:1,ref:"footerWrapper",class:oe(e.ns.e("footer-wrapper"))},[ce("table",{class:oe(e.ns.e("footer")),cellspacing:"0",cellpadding:"0",border:"0",style:$t(e.tableBodyStyles)},[ie(a,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),ie(u,{border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["border","default-sort","store","sum-text","summary-method"])],6)],2)),[[$n,!e.isEmpty],[d,e.handleHeaderFooterMousewheel]]):Fe("v-if",!0),e.border||e.isGroup?(Y(),fe("div",{key:2,class:oe(e.ns.e("border-left-patch"))},null,2)):Fe("v-if",!0)],6),nn(ce("div",{ref:"resizeProxy",class:oe(e.ns.e("column-resize-proxy"))},null,2),[[$n,e.resizeProxyVisible]])],46,HVe)}],["__file","table.vue"]]);const WVe={selection:"table-column--selection",expand:"table__expand-column"},GVe={default:{order:""},selection:{width:48,minWidth:48,realWidth:48,order:""},expand:{width:48,minWidth:48,realWidth:48,order:""},index:{width:48,minWidth:48,realWidth:48,order:""}},qVe={selection:{renderHeader:({store:e,column:t})=>pn(bl,{disabled:e.states.data.value&&e.states.data.value.length===0,size:e.states.tableSize.value,indeterminate:e.states.selection.value.length>0&&!e.states.isAllSelected.value,"onUpdate:modelValue":e.toggleAllSelection,modelValue:e.states.isAllSelected.value,ariaLabel:t.label}),renderCell:({row:e,column:t,store:n,$index:r})=>pn(bl,{disabled:!!t.selectable&&!t.selectable.call(null,e,r),size:n.states.tableSize.value,onChange:()=>{n.commit("rowSelectedChanged",e)},onClick:o=>o.stopPropagation(),modelValue:n.isSelected(e),ariaLabel:t.label}),sortable:!1,resizable:!1},index:{renderHeader:({column:e})=>e.label||"#",renderCell({column:e,$index:t}){let n=t+1;const r=e.index;return typeof r=="number"?n=t+r:typeof r=="function"&&(n=r(t)),pn("div",{},[n])},sortable:!1},expand:{renderHeader:({column:e})=>e.label||"",renderCell({row:e,store:t,expanded:n}){const{ns:r}=t,o=[r.e("expand-icon")];return n&&o.push(r.em("expand-icon","expanded")),pn("div",{class:o,onClick:function(i){i.stopPropagation(),t.toggleRowExpansion(e)}},{default:()=>[pn(Ft,null,{default:()=>[pn(Su)]})]})},sortable:!1,resizable:!1}};function KVe({row:e,column:t,$index:n}){var r;const o=t.property,i=o&&L3(e,o).value;return t&&t.formatter?t.formatter(e,t,i,n):((r=i==null?void 0:i.toString)==null?void 0:r.call(i))||""}function Lue(e,t){return e.reduce((n,r)=>(n[r]=r,n),t)}function YVe(e,t,n){const r=dn(),o=de(""),i=de(!1),a=de(),l=de(),s=_t("table");yl(()=>{a.value=e.align?`is-${e.align}`:null,a.value}),yl(()=>{l.value=e.headerAlign?`is-${e.headerAlign}`:a.value,l.value});const u=ee(()=>{let p=r.vnode.vParent||r.parent;for(;p&&!p.tableId&&!p.columnId;)p=p.vnode.vParent||p.parent;return p}),c=ee(()=>{const{store:p}=r.parent;if(!p)return!1;const{treeData:m}=p.states,v=m.value;return v&&Object.keys(v).length>0}),d=de(SR(e.width)),f=de(Due(e.minWidth));return{columnId:o,realAlign:a,isSubColumn:i,realHeaderAlign:l,columnOrTableParent:u,setColumnWidth:p=>(d.value&&(p.width=d.value),f.value&&(p.minWidth=f.value),!d.value&&f.value&&(p.width=void 0),p.minWidth||(p.minWidth=80),p.realWidth=Number(p.width===void 0?p.minWidth:p.width),p),setColumnForcedProps:p=>{const m=p.type,v=qVe[m]||{};Object.keys(v).forEach(b=>{const y=v[b];b!=="className"&&y!==void 0&&(p[b]=y)});const g=(b=>WVe[b]||"")(m);if(g){const b=`${M(s.namespace)}-${g}`;p.className=p.className?`${p.className} ${b}`:b}return p},setColumnRenders:p=>{e.renderHeader||p.type!=="selection"&&(p.renderHeader=v=>(r.columnConfig.value.label,ft(t,"header",v,()=>[p.label])));let m=p.renderCell;return p.type==="expand"?(p.renderCell=v=>pn("div",{class:"cell"},[m(v)]),n.value.renderExpanded=v=>t.default?t.default(v):t.default):(m=m||KVe,p.renderCell=v=>{let g=null;if(t.default){const _=t.default(v);g=_.some(E=>E.type!==hi)?_:m(v)}else g=m(v);const{columns:b}=n.value.store.states,y=b.value.findIndex(_=>_.type==="default"),w=function({row:_,treeNode:E,store:C},T=!1){const{ns:k}=C;if(!E)return T?[pn("span",{class:k.e("placeholder")})]:null;const I=[],O=function(F){F.stopPropagation(),E.loading||C.loadOrToggle(_)};if(E.indent&&I.push(pn("span",{class:k.e("indent"),style:{"padding-left":`${E.indent}px`}})),typeof E.expanded!="boolean"||E.noLazyChildren)I.push(pn("span",{class:k.e("placeholder")}));else{const F=[k.e("expand-icon"),E.expanded?k.em("expand-icon","expanded"):""];let N=Su;E.loading&&(N=jd),I.push(pn("div",{class:F,onClick:O},{default:()=>[pn(Ft,{class:{[k.is("loading")]:E.loading}},{default:()=>[pn(N)]})]}))}return I}(v,c.value&&v.cellIndex===y),x={class:"cell",style:{}};return p.showOverflowTooltip&&(x.class=`${x.class} ${M(s.namespace)}-tooltip`,x.style={width:(v.column.realWidth||Number(v.column.width))-1+"px"}),(_=>{function E(C){var T;((T=C==null?void 0:C.type)==null?void 0:T.name)==="ElTableColumn"&&(C.vParent=r)}Array.isArray(_)?_.forEach(C=>E(C)):E(_)})(g),pn("div",x,[w,g])}),p},getPropsData:(...p)=>p.reduce((m,v)=>(Array.isArray(v)&&v.forEach(g=>{m[g]=e[g]}),m),{}),getColumnElIndex:(p,m)=>Array.prototype.indexOf.call(p,m),updateColumnOrder:()=>{n.value.store.commit("updateColumnOrder",r.columnConfig.value)}}}var XVe={type:{type:String,default:"default"},label:String,className:String,labelClassName:String,property:String,prop:String,width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},renderHeader:Function,sortable:{type:[Boolean,String],default:!1},sortMethod:Function,sortBy:[String,Function,Array],resizable:{type:Boolean,default:!0},columnKey:String,align:String,headerAlign:String,showOverflowTooltip:{type:[Boolean,Object],default:void 0},fixed:[Boolean,String],formatter:Function,selectable:Function,reserveSelection:Boolean,filterMethod:Function,filteredValue:Array,filters:Array,filterPlacement:String,filterMultiple:{type:Boolean,default:!0},filterClassName:String,index:[Number,Function],sortOrders:{type:Array,default:()=>["ascending","descending",null],validator:e=>e.every(t=>["ascending","descending",null].includes(t))}};let QVe=1;var jue=Te({name:"ElTableColumn",components:{ElCheckbox:bl},props:XVe,setup(e,{slots:t}){const n=dn(),r=de({}),o=ee(()=>{let w=n.parent;for(;w&&!w.tableId;)w=w.parent;return w}),{registerNormalWatchers:i,registerComplexWatchers:a}=function(w,x){const _=dn();return{registerComplexWatchers:()=>{const E={realWidth:"width",realMinWidth:"minWidth"},C=Lue(["fixed"],E);Object.keys(C).forEach(T=>{const k=E[T];Tn(x,k)&&Je(()=>x[k],I=>{let O=I;k==="width"&&T==="realWidth"&&(O=SR(I)),k==="minWidth"&&T==="realMinWidth"&&(O=Due(I)),_.columnConfig.value[k]=O,_.columnConfig.value[T]=O;const F=k==="fixed";w.value.store.scheduleLayout(F)})})},registerNormalWatchers:()=>{const E={property:"prop",align:"realAlign",headerAlign:"realHeaderAlign"},C=Lue(["label","filters","filterMultiple","filteredValue","sortable","index","formatter","className","labelClassName","filterClassName","showOverflowTooltip"],E);Object.keys(C).forEach(T=>{const k=E[T];Tn(x,k)&&Je(()=>x[k],I=>{_.columnConfig.value[T]=I})})}}}(o,e),{columnId:l,isSubColumn:s,realHeaderAlign:u,columnOrTableParent:c,setColumnWidth:d,setColumnForcedProps:f,setColumnRenders:p,getPropsData:m,getColumnElIndex:v,realAlign:g,updateColumnOrder:b}=YVe(e,t,o),y=c.value;l.value=`${y.tableId||y.columnId}_column_${QVe++}`,g0(()=>{s.value=o.value!==y;const w=e.type||"default",x=e.sortable===""||e.sortable,_=Wi(e.showOverflowTooltip)?y.props.showOverflowTooltip:e.showOverflowTooltip,E={...GVe[w],id:l.value,type:w,property:e.prop||e.property,align:g,headerAlign:u,showOverflowTooltip:_,filterable:e.filters||e.filterMethod,filteredValue:[],filterPlacement:"",filterClassName:"",isColumnGroup:!1,isSubColumn:!1,filterOpened:!1,sortable:x,index:e.index,rawColumnKey:n.vnode.key};let C=m(["columnKey","label","className","labelClassName","type","renderHeader","formatter","fixed","resizable"],["sortMethod","sortBy","sortOrders"],["selectable","reserveSelection"],["filterMethod","filters","filterMultiple","filterOpened","filteredValue","filterPlacement","filterClassName"]);C=function(k,I){const O={};let F;for(F in k)O[F]=k[F];for(F in I)if(Tn(I,F)){const N=I[F];N!==void 0&&(O[F]=N)}return O}(E,C),C=function(...k){return k.length===0?I=>I:k.length===1?k[0]:k.reduce((I,O)=>(...F)=>I(O(...F)))}(p,d,f)(C),r.value=C,i(),a()}),yn(()=>{var w;const x=c.value,_=s.value?x.vnode.el.children:(w=x.refs.hiddenColumns)==null?void 0:w.children,E=()=>v(_||[],n.vnode.el);r.value.getColumnIndex=E,E()>-1&&o.value.store.commit("insertColumn",r.value,s.value?x.columnConfig.value:null,b)}),xo(()=>{o.value.store.commit("removeColumn",r.value,s.value?y.columnConfig.value:null,b)}),n.columnId=l.value,n.columnConfig=r},render(){var e,t,n;try{const r=(t=(e=this.$slots).default)==null?void 0:t.call(e,{row:{},column:{},$index:-1}),o=[];if(Array.isArray(r))for(const i of r)((n=i.type)==null?void 0:n.name)==="ElTableColumn"||2&i.shapeFlag?o.push(i):i.type===bt&&Array.isArray(i.children)&&i.children.forEach(a=>{(a==null?void 0:a.patchFlag)===1024||an(a==null?void 0:a.children)||o.push(a)});return pn("div",o)}catch{return pn("div",[])}}});let i4,Vue,MR,zue,Hue;fQ=Cr(UVe,{TableColumn:jue}),dQ=Ya(jue),i4=Symbol("tabsRootContextKey"),Vue=Pt({tabs:{type:Array,default:()=>[]}}),MR="ElTabBar",zue=Te({name:MR}),Hue=Te({...zue,props:Vue,setup(e,{expose:t}){const n=e,r=dn(),o=Rt(i4);o||Ka(MR,"<el-tabs><el-tab-bar /></el-tabs>");const i=_t("tabs"),a=de(),l=de(),s=()=>l.value=(()=>{let u=0,c=0;const d=["top","bottom"].includes(o.props.tabPosition)?"width":"height",f=d==="width"?"x":"y",p=f==="x"?"left":"top";return n.tabs.every(m=>{var v,g;const b=(g=(v=r.parent)==null?void 0:v.refs)==null?void 0:g[`tab-${m.uid}`];if(!b)return!1;if(!m.active)return!0;u=b[`offset${Ru(p)}`],c=b[`client${Ru(d)}`];const y=window.getComputedStyle(b);return d==="width"&&(n.tabs.length>1&&(c-=Number.parseFloat(y.paddingLeft)+Number.parseFloat(y.paddingRight)),u+=Number.parseFloat(y.paddingLeft)),!1}),{[d]:`${c}px`,transform:`translate${Ru(f)}(${u}px)`}})();return Je(()=>n.tabs,async()=>{await St(),s()},{immediate:!0}),fa(a,()=>s()),t({ref:a,update:s}),(u,c)=>(Y(),fe("div",{ref_key:"barRef",ref:a,class:oe([M(i).e("active-bar"),M(i).is(M(o).props.tabPosition)]),style:$t(l.value)},null,6))}});var JVe=Nt(Hue,[["__file","tab-bar.vue"]]);const ZVe=Pt({panes:{type:Array,default:()=>[]},currentName:{type:[String,Number],default:""},editable:Boolean,type:{type:String,values:["card","border-card",""],default:""},stretch:Boolean}),eze={tabClick:(e,t,n)=>n instanceof Event,tabRemove:(e,t)=>t instanceof Event},$ue="ElTabNav",tze=Te({name:$ue,props:ZVe,emits:eze,setup(e,{expose:t,emit:n}){const r=dn(),o=Rt(i4);o||Ka($ue,"<el-tabs><tab-nav /></el-tabs>");const i=_t("tabs"),a=function({document:k=UNe}={}){if(!k)return de("visible");const I=de(k.visibilityState);return Yo(k,"visibilitychange",()=>{I.value=k.visibilityState}),I}(),l=function({window:k=Wm}={}){if(!k)return de(!1);const I=de(k.document.hasFocus());return Yo(k,"blur",()=>{I.value=!1}),Yo(k,"focus",()=>{I.value=!0}),I}(),s=de(),u=de(),c=de(),d=de(),f=de(!1),p=de(0),m=de(!1),v=de(!0),g=ee(()=>["top","bottom"].includes(o.props.tabPosition)?"width":"height"),b=ee(()=>({transform:`translate${g.value==="width"?"X":"Y"}(-${p.value}px)`})),y=()=>{if(!s.value)return;const k=s.value[`offset${Ru(g.value)}`],I=p.value;if(!I)return;const O=I>k?I-k:0;p.value=O},w=()=>{if(!s.value||!u.value)return;const k=u.value[`offset${Ru(g.value)}`],I=s.value[`offset${Ru(g.value)}`],O=p.value;if(k-O<=I)return;const F=k-O>2*I?O+I:k-I;p.value=F},x=async()=>{const k=u.value;if(!(f.value&&c.value&&s.value&&k))return;await St();const I=c.value.querySelector(".is-active");if(!I)return;const O=s.value,F=["top","bottom"].includes(o.props.tabPosition),N=I.getBoundingClientRect(),B=O.getBoundingClientRect(),P=F?k.offsetWidth-B.width:k.offsetHeight-B.height,V=p.value;let L=V;F?(N.left<B.left&&(L=V-(B.left-N.left)),N.right>B.right&&(L=V+N.right-B.right)):(N.top<B.top&&(L=V-(B.top-N.top)),N.bottom>B.bottom&&(L=V+(N.bottom-B.bottom))),L=Math.max(L,0),p.value=Math.min(L,P)},_=()=>{var k;if(!u.value||!s.value)return;e.stretch&&((k=d.value)==null||k.update());const I=u.value[`offset${Ru(g.value)}`],O=s.value[`offset${Ru(g.value)}`],F=p.value;O<I?(f.value=f.value||{},f.value.prev=F,f.value.next=F+O<I,I-F<O&&(p.value=I-O)):(f.value=!1,F>0&&(p.value=0))},E=k=>{const I=k.code,{up:O,down:F,left:N,right:B}=Xt;if(![O,F,N,B].includes(I))return;const P=Array.from(k.currentTarget.querySelectorAll("[role=tab]:not(.is-disabled)")),V=P.indexOf(k.target);let L;L=I===N||I===O?V===0?P.length-1:V-1:V<P.length-1?V+1:0,P[L].focus({preventScroll:!0}),P[L].click(),C()},C=()=>{v.value&&(m.value=!0)},T=()=>m.value=!1;return Je(a,k=>{k==="hidden"?v.value=!1:k==="visible"&&setTimeout(()=>v.value=!0,50)}),Je(l,k=>{k?setTimeout(()=>v.value=!0,50):v.value=!1}),fa(c,_),yn(()=>setTimeout(()=>x(),0)),zs(()=>_()),t({scrollToActiveTab:x,removeFocus:T}),Je(()=>e.panes,()=>r.update(),{flush:"post",deep:!0}),()=>{const k=f.value?[ie("span",{class:[i.e("nav-prev"),i.is("disabled",!f.value.prev)],onClick:y},[ie(Ft,null,{default:()=>[ie(m0,null,null)]})]),ie("span",{class:[i.e("nav-next"),i.is("disabled",!f.value.next)],onClick:w},[ie(Ft,null,{default:()=>[ie(Su,null,null)]})])]:null,I=e.panes.map((O,F)=>{var N,B,P,V;const L=O.uid,H=O.props.disabled,U=(B=(N=O.props.name)!=null?N:O.index)!=null?B:`${F}`,G=!H&&(O.isClosable||e.editable);O.index=`${F}`;const z=G?ie(Ft,{class:"is-icon-close",onClick:K=>n("tabRemove",O,K)},{default:()=>[ie(wc,null,null)]}):null,$=((V=(P=O.slots).label)==null?void 0:V.call(P))||O.props.label,W=!H&&O.active?0:-1;return ie("div",{ref:`tab-${L}`,class:[i.e("item"),i.is(o.props.tabPosition),i.is("active",O.active),i.is("disabled",H),i.is("closable",G),i.is("focus",m.value)],id:`tab-${U}`,key:`tab-${L}`,"aria-controls":`pane-${U}`,role:"tab","aria-selected":O.active,tabindex:W,onFocus:()=>C(),onBlur:()=>T(),onClick:K=>{T(),n("tabClick",O,U,K)},onKeydown:K=>{!G||K.code!==Xt.delete&&K.code!==Xt.backspace||n("tabRemove",O,K)}},[$,z])});return ie("div",{ref:c,class:[i.e("nav-wrap"),i.is("scrollable",!!f.value),i.is(o.props.tabPosition)]},[k,ie("div",{class:i.e("nav-scroll"),ref:s},[ie("div",{class:[i.e("nav"),i.is(o.props.tabPosition),i.is("stretch",e.stretch&&["top","bottom"].includes(o.props.tabPosition))],ref:u,style:b.value,role:"tablist",onKeydown:E},[e.type?null:ie(JVe,{ref:d,tabs:[...e.panes]},null),I])])])}}}),nze=Pt({type:{type:String,values:["card","border-card",""],default:""},closable:Boolean,addable:Boolean,modelValue:{type:[String,Number]},editable:Boolean,tabPosition:{type:String,values:["top","right","bottom","left"],default:"top"},beforeLeave:{type:Function,default:()=>!0},stretch:Boolean}),NR=e=>an(e)||Kn(e),rze={[xn]:e=>NR(e),tabClick:(e,t)=>t instanceof Event,tabChange:e=>NR(e),edit:(e,t)=>["remove","add"].includes(t),tabRemove:e=>NR(e),tabAdd:()=>!0},oze=Te({name:"ElTabs",props:nze,emits:rze,setup(e,{emit:t,slots:n,expose:r}){var o;const i=_t("tabs"),{children:a,addChild:l,removeChild:s}=Oie(dn(),"ElTabPane"),u=de(),c=de((o=e.modelValue)!=null?o:"0"),d=async(v,g=!1)=>{var b,y,w;if(c.value!==v&&!Wi(v))try{await((b=e.beforeLeave)==null?void 0:b.call(e,v,c.value))!==!1&&(c.value=v,g&&(t(xn,v),t("tabChange",v)),(w=(y=u.value)==null?void 0:y.removeFocus)==null||w.call(y))}catch{}},f=(v,g,b)=>{v.props.disabled||(d(g,!0),t("tabClick",v,b))},p=(v,g)=>{v.props.disabled||Wi(v.props.name)||(g.stopPropagation(),t("edit",v.props.name,"remove"),t("tabRemove",v.props.name))},m=()=>{t("edit",void 0,"add"),t("tabAdd")};return Je(()=>e.modelValue,v=>d(v)),Je(c,async()=>{var v;await St(),(v=u.value)==null||v.scrollToActiveTab()}),qn(i4,{props:e,currentName:c,registerPane:l,unregisterPane:s}),r({currentName:c}),()=>{const v=n["add-icon"],g=e.editable||e.addable?ie("span",{class:i.e("new-tab"),tabindex:"0",onClick:m,onKeydown:w=>{w.code===Xt.enter&&m()}},[v?ft(n,"add-icon"):ie(Ft,{class:i.is("icon-plus")},{default:()=>[ie(jN,null,null)]})]):null,b=ie("div",{class:[i.e("header"),i.is(e.tabPosition)]},[g,ie(tze,{ref:u,currentName:c.value,editable:e.editable,type:e.type,panes:a.value,stretch:e.stretch,onTabClick:f,onTabRemove:p},null)]),y=ie("div",{class:i.e("content")},[ft(n,"default")]);return ie("div",{class:[i.b(),i.m(e.tabPosition),{[i.m("card")]:e.type==="card",[i.m("border-card")]:e.type==="border-card"}]},[...e.tabPosition!=="bottom"?[b,y]:[y,b]])}}}),ize=Pt({label:{type:String,default:""},name:{type:[String,Number]},closable:Boolean,disabled:Boolean,lazy:Boolean}),aze=["id","aria-hidden","aria-labelledby"],Uue="ElTabPane",lze=Te({name:Uue}),sze=Te({...lze,props:ize,setup(e){const t=e,n=dn(),r=Ga(),o=Rt(i4);o||Ka(Uue,"usage: <el-tabs><el-tab-pane /></el-tabs/>");const i=_t("tab-pane"),a=de(),l=ee(()=>t.closable||o.props.closable),s=Jne(()=>{var p;return o.currentName.value===((p=t.name)!=null?p:a.value)}),u=de(s.value),c=ee(()=>{var p;return(p=t.name)!=null?p:a.value}),d=Jne(()=>!t.lazy||u.value||s.value);Je(s,p=>{p&&(u.value=!0)});const f=Qn({uid:n.uid,slots:r,props:t,paneName:c,active:s,index:a,isClosable:l});return yn(()=>{o.registerPane(f)}),Vs(()=>{o.unregisterPane(f.uid)}),(p,m)=>M(d)?nn((Y(),fe("div",{key:0,id:`pane-${M(c)}`,class:oe(M(i).b()),role:"tabpanel","aria-hidden":!M(s),"aria-labelledby":`tab-${M(c)}`},[ft(p.$slots,"default")],10,aze)),[[$n,M(s)]]):Fe("v-if",!0)}});var Wue=Nt(sze,[["__file","tab-pane.vue"]]);let FR,RR,l1,ax,Gue,lx,que,Kue,hg,Yue,Xue;sQ=Cr(oze,{TabPane:Wue}),lQ=Ya(Wue),FR="left-check-change",RR="right-check-change",l1=Pt({data:{type:Array,default:()=>[]},titles:{type:Array,default:()=>[]},buttonTexts:{type:Array,default:()=>[]},filterPlaceholder:String,filterMethod:{type:Function},leftDefaultChecked:{type:Array,default:()=>[]},rightDefaultChecked:{type:Array,default:()=>[]},renderContent:{type:Function},modelValue:{type:Array,default:()=>[]},format:{type:Object,default:()=>({})},filterable:Boolean,props:{type:Object,default:()=>({label:"label",key:"key",disabled:"disabled"})},targetOrder:{type:String,values:["original","push","unshift"],default:"original"},validateEvent:{type:Boolean,default:!0}}),ax=(e,t)=>[e,t].every(mt)||mt(e)&&pa(t),Gue={[Xo]:(e,t,n)=>[e,n].every(mt)&&["left","right"].includes(t),[xn]:e=>mt(e),[FR]:ax,[RR]:ax},lx="checked-change",que=Pt({data:l1.data,optionRender:{type:Function},placeholder:String,title:String,filterable:Boolean,format:l1.format,filterMethod:l1.filterMethod,defaultChecked:l1.leftDefaultChecked,props:l1.props}),Kue={[lx]:ax},hg=e=>{const t={label:"label",key:"key",disabled:"disabled"};return ee(()=>({...t,...e.props}))},Yue=Te({name:"ElTransferPanel"}),Xue=Te({...Yue,props:que,emits:Kue,setup(e,{expose:t,emit:n}){const r=e,o=Ga(),i=({option:w})=>w,{t:a}=Gr(),l=_t("transfer"),s=Qn({checked:[],allChecked:!1,query:"",checkChangeByUser:!0}),u=hg(r),{filteredData:c,checkedSummary:d,isIndeterminate:f,handleAllCheckedChange:p}=((w,x,_)=>{const E=hg(w),C=ee(()=>w.data.filter(F=>Ut(w.filterMethod)?w.filterMethod(x.query,F):String(F[E.value.label]||F[E.value.key]).toLowerCase().includes(x.query.toLowerCase()))),T=ee(()=>C.value.filter(F=>!F[E.value.disabled])),k=ee(()=>{const F=x.checked.length,N=w.data.length,{noChecked:B,hasChecked:P}=w.format;return B&&P?F>0?P.replace(/\${checked}/g,F.toString()).replace(/\${total}/g,N.toString()):B.replace(/\${total}/g,N.toString()):`${F}/${N}`}),I=ee(()=>{const F=x.checked.length;return F>0&&F<T.value.length}),O=()=>{const F=T.value.map(N=>N[E.value.key]);x.allChecked=F.length>0&&F.every(N=>x.checked.includes(N))};return Je(()=>x.checked,(F,N)=>{if(O(),x.checkChangeByUser){const B=F.concat(N).filter(P=>!F.includes(P)||!N.includes(P));_(lx,F,B)}else _(lx,F),x.checkChangeByUser=!0}),Je(T,()=>{O()}),Je(()=>w.data,()=>{const F=[],N=C.value.map(B=>B[E.value.key]);x.checked.forEach(B=>{N.includes(B)&&F.push(B)}),x.checkChangeByUser=!1,x.checked=F}),Je(()=>w.defaultChecked,(F,N)=>{if(N&&F.length===N.length&&F.every(V=>N.includes(V)))return;const B=[],P=T.value.map(V=>V[E.value.key]);F.forEach(V=>{P.includes(V)&&B.push(V)}),x.checkChangeByUser=!1,x.checked=B},{immediate:!0}),{filteredData:C,checkableData:T,checkedSummary:k,isIndeterminate:I,updateAllChecked:O,handleAllCheckedChange:F=>{x.checked=F?T.value.map(N=>N[E.value.key]):[]}}})(r,s,n),m=ee(()=>!cs(s.query)&&cs(c.value)),v=ee(()=>!cs(o.default()[0].children)),{checked:g,allChecked:b,query:y}=di(s);return t({query:y}),(w,x)=>(Y(),fe("div",{class:oe(M(l).b("panel"))},[ce("p",{class:oe(M(l).be("panel","header"))},[ie(M(bl),{modelValue:M(b),"onUpdate:modelValue":x[0]||(x[0]=_=>Jn(b)?b.value=_:null),indeterminate:M(f),"validate-event":!1,onChange:M(p)},{default:he(()=>[Dt(Ye(w.title)+" ",1),ce("span",null,Ye(M(d)),1)]),_:1},8,["modelValue","indeterminate","onChange"])],2),ce("div",{class:oe([M(l).be("panel","body"),M(l).is("with-footer",M(v))])},[w.filterable?(Y(),Le(M(ua),{key:0,modelValue:M(y),"onUpdate:modelValue":x[1]||(x[1]=_=>Jn(y)?y.value=_:null),class:oe(M(l).be("panel","filter")),size:"default",placeholder:w.placeholder,"prefix-icon":M(zoe),clearable:"","validate-event":!1},null,8,["modelValue","class","placeholder","prefix-icon"])):Fe("v-if",!0),nn(ie(M(Cb),{modelValue:M(g),"onUpdate:modelValue":x[2]||(x[2]=_=>Jn(g)?g.value=_:null),"validate-event":!1,class:oe([M(l).is("filterable",w.filterable),M(l).be("panel","list")])},{default:he(()=>[(Y(!0),fe(bt,null,bn(M(c),_=>(Y(),Le(M(bl),{key:_[M(u).key],class:oe(M(l).be("panel","item")),value:_[M(u).key],disabled:_[M(u).disabled],"validate-event":!1},{default:he(()=>{var E;return[ie(i,{option:(E=w.optionRender)==null?void 0:E.call(w,_)},null,8,["option"])]}),_:2},1032,["class","value","disabled"]))),128))]),_:1},8,["modelValue","class"]),[[$n,!M(m)&&!M(cs)(w.data)]]),nn(ce("p",{class:oe(M(l).be("panel","empty"))},Ye(M(m)?M(a)("el.transfer.noMatch"):M(a)("el.transfer.noData")),3),[[$n,M(m)||M(cs)(w.data)]])],2),M(v)?(Y(),fe("p",{key:0,class:oe(M(l).be("panel","footer"))},[ft(w.$slots,"default")],2)):Fe("v-if",!0)],2))}});var Que=Nt(Xue,[["__file","transfer-panel.vue"]]);const uze={key:0},cze={key:0},dze=Te({name:"ElTransfer"}),fze=Te({...dze,props:l1,emits:Gue,setup(e,{expose:t,emit:n}){const r=e,o=Ga(),{t:i}=Gr(),a=_t("transfer"),{formItem:l}=qa(),s=Qn({leftChecked:[],rightChecked:[]}),u=hg(r),{sourceData:c,targetData:d}=(C=>{const T=hg(C),k=ee(()=>C.data.reduce((I,O)=>(I[O[T.value.key]]=O)&&I,{}));return{sourceData:ee(()=>C.data.filter(I=>!C.modelValue.includes(I[T.value.key]))),targetData:ee(()=>C.targetOrder==="original"?C.data.filter(I=>C.modelValue.includes(I[T.value.key])):C.modelValue.reduce((I,O)=>{const F=k.value[O];return F&&I.push(F),I},[]))}})(r),{onSourceCheckedChange:f,onTargetCheckedChange:p}=((C,T)=>({onSourceCheckedChange:(k,I)=>{C.leftChecked=k,I&&T(FR,k,I)},onTargetCheckedChange:(k,I)=>{C.rightChecked=k,I&&T(RR,k,I)}}))(s,n),{addToLeft:m,addToRight:v}=((C,T,k)=>{const I=hg(C),O=(F,N,B)=>{k(xn,F),k(Xo,F,N,B)};return{addToLeft:()=>{const F=C.modelValue.slice();T.rightChecked.forEach(N=>{const B=F.indexOf(N);B>-1&&F.splice(B,1)}),O(F,"left",T.rightChecked)},addToRight:()=>{let F=C.modelValue.slice();const N=C.data.filter(B=>{const P=B[I.value.key];return T.leftChecked.includes(P)&&!C.modelValue.includes(P)}).map(B=>B[I.value.key]);F=C.targetOrder==="unshift"?N.concat(F):F.concat(N),C.targetOrder==="original"&&(F=C.data.filter(B=>F.includes(B[I.value.key])).map(B=>B[I.value.key])),O(F,"right",T.leftChecked)}}})(r,s,n),g=de(),b=de(),y=ee(()=>r.buttonTexts.length===2),w=ee(()=>r.titles[0]||i("el.transfer.titles.0")),x=ee(()=>r.titles[1]||i("el.transfer.titles.1")),_=ee(()=>r.filterPlaceholder||i("el.transfer.filterPlaceholder"));Je(()=>r.modelValue,()=>{var C;r.validateEvent&&((C=l==null?void 0:l.validate)==null||C.call(l,"change").catch(T=>{}))});const E=ee(()=>C=>r.renderContent?r.renderContent(pn,C):o.default?o.default({option:C}):pn("span",C[u.value.label]||C[u.value.key]));return t({clearQuery:C=>{switch(C){case"left":g.value.query="";break;case"right":b.value.query=""}},leftPanel:g,rightPanel:b}),(C,T)=>(Y(),fe("div",{class:oe(M(a).b())},[ie(Que,{ref_key:"leftPanel",ref:g,data:M(c),"option-render":M(E),placeholder:M(_),title:M(w),filterable:C.filterable,format:C.format,"filter-method":C.filterMethod,"default-checked":C.leftDefaultChecked,props:r.props,onCheckedChange:M(f)},{default:he(()=>[ft(C.$slots,"left-footer")]),_:3},8,["data","option-render","placeholder","title","filterable","format","filter-method","default-checked","props","onCheckedChange"]),ce("div",{class:oe(M(a).e("buttons"))},[ie(M(Sa),{type:"primary",class:oe([M(a).e("button"),M(a).is("with-texts",M(y))]),disabled:M(cs)(s.rightChecked),onClick:M(m)},{default:he(()=>[ie(M(Ft),null,{default:he(()=>[ie(M(m0))]),_:1}),M(Wi)(C.buttonTexts[0])?Fe("v-if",!0):(Y(),fe("span",uze,Ye(C.buttonTexts[0]),1))]),_:1},8,["class","disabled","onClick"]),ie(M(Sa),{type:"primary",class:oe([M(a).e("button"),M(a).is("with-texts",M(y))]),disabled:M(cs)(s.leftChecked),onClick:M(v)},{default:he(()=>[M(Wi)(C.buttonTexts[1])?Fe("v-if",!0):(Y(),fe("span",cze,Ye(C.buttonTexts[1]),1)),ie(M(Ft),null,{default:he(()=>[ie(M(Su))]),_:1})]),_:1},8,["class","disabled","onClick"])],2),ie(Que,{ref_key:"rightPanel",ref:b,data:M(d),"option-render":M(E),placeholder:M(_),filterable:C.filterable,format:C.format,"filter-method":C.filterMethod,title:M(x),"default-checked":C.rightDefaultChecked,props:r.props,onCheckedChange:M(p)},{default:he(()=>[ft(C.$slots,"right-footer")]),_:3},8,["data","option-render","placeholder","filterable","format","filter-method","title","default-checked","props","onCheckedChange"])],2))}});let s1,IR,sx,ux,cx,vg,a4;IQ=Cr(Nt(fze,[["__file","transfer.vue"]])),s1="$treeNodeId",IR=function(e,t){t&&!t[s1]&&Object.defineProperty(t,s1,{value:e.id,enumerable:!1,configurable:!1,writable:!1})},sx=function(e,t){return e?t[e]:t[s1]},ux=(e,t,n)=>{const r=e.value.currentNode;n();const o=e.value.currentNode;r!==o&&t("current-change",o?o.data:null,o)},cx=e=>{let t=!0,n=!0,r=!0;for(let o=0,i=e.length;o<i;o++){const a=e[o];(a.checked!==!0||a.indeterminate)&&(t=!1,a.disabled||(r=!1)),(a.checked!==!1||a.indeterminate)&&(n=!1)}return{all:t,none:n,allWithoutDisable:r,half:!t&&!n}},vg=function(e){if(e.childNodes.length===0||e.loading)return;const{all:t,none:n,half:r}=cx(e.childNodes);t?(e.checked=!0,e.indeterminate=!1):r?(e.checked=!1,e.indeterminate=!0):n&&(e.checked=!1,e.indeterminate=!1);const o=e.parent;o&&o.level!==0&&(e.store.checkStrictly||vg(o))},a4=function(e,t){const n=e.store.props,r=e.data||{},o=n[t];if(typeof o=="function")return o(r,e);if(typeof o=="string")return r[o];if(o===void 0){const i=r[t];return i===void 0?"":i}};let pze=0,BR=class QO{constructor(t){this.id=pze++,this.text=null,this.checked=!1,this.indeterminate=!1,this.data=null,this.expanded=!1,this.parent=null,this.visible=!0,this.isCurrent=!1,this.canFocus=!1;for(const n in t)Tn(t,n)&&(this[n]=t[n]);this.level=0,this.loaded=!1,this.childNodes=[],this.loading=!1,this.parent&&(this.level=this.parent.level+1)}initialize(){const t=this.store;if(!t)throw new Error("[Node]store is required!");t.registerNode(this);const n=t.props;if(n&&n.isLeaf!==void 0){const i=a4(this,"isLeaf");typeof i=="boolean"&&(this.isLeafByUser=i)}if(t.lazy!==!0&&this.data?(this.setData(this.data),t.defaultExpandAll&&(this.expanded=!0,this.canFocus=!0)):this.level>0&&t.lazy&&t.defaultExpandAll&&this.expand(),Array.isArray(this.data)||IR(this,this.data),!this.data)return;const r=t.defaultExpandedKeys,o=t.key;o&&r&&r.includes(this.key)&&this.expand(null,t.autoExpandParent),o&&t.currentNodeKey!==void 0&&this.key===t.currentNodeKey&&(t.currentNode=this,t.currentNode.isCurrent=!0),t.lazy&&t._initDefaultCheckedNode(this),this.updateLeafState(),!this.parent||this.level!==1&&this.parent.expanded!==!0||(this.canFocus=!0)}setData(t){let n;Array.isArray(t)||IR(this,t),this.data=t,this.childNodes=[],n=this.level===0&&Array.isArray(this.data)?this.data:a4(this,"children")||[];for(let r=0,o=n.length;r<o;r++)this.insertChild({data:n[r]})}get label(){return a4(this,"label")}get key(){const t=this.store.key;return this.data?this.data[t]:null}get disabled(){return a4(this,"disabled")}get nextSibling(){const t=this.parent;if(t){const n=t.childNodes.indexOf(this);if(n>-1)return t.childNodes[n+1]}return null}get previousSibling(){const t=this.parent;if(t){const n=t.childNodes.indexOf(this);if(n>-1)return n>0?t.childNodes[n-1]:null}return null}contains(t,n=!0){return(this.childNodes||[]).some(r=>r===t||n&&r.contains(t))}remove(){const t=this.parent;t&&t.removeChild(this)}insertChild(t,n,r){if(!t)throw new Error("InsertChild error: child is required.");if(!(t instanceof QO)){if(!r){const o=this.getChildren(!0);o.includes(t.data)||(n===void 0||n<0?o.push(t.data):o.splice(n,0,t.data))}Object.assign(t,{parent:this,store:this.store}),(t=Qn(new QO(t)))instanceof QO&&t.initialize()}t.level=this.level+1,n===void 0||n<0?this.childNodes.push(t):this.childNodes.splice(n,0,t),this.updateLeafState()}insertBefore(t,n){let r;n&&(r=this.childNodes.indexOf(n)),this.insertChild(t,r)}insertAfter(t,n){let r;n&&(r=this.childNodes.indexOf(n),r!==-1&&(r+=1)),this.insertChild(t,r)}removeChild(t){const n=this.getChildren()||[],r=n.indexOf(t.data);r>-1&&n.splice(r,1);const o=this.childNodes.indexOf(t);o>-1&&(this.store&&this.store.deregisterNode(t),t.parent=null,this.childNodes.splice(o,1)),this.updateLeafState()}removeChildByData(t){let n=null;for(let r=0;r<this.childNodes.length;r++)if(this.childNodes[r].data===t){n=this.childNodes[r];break}n&&this.removeChild(n)}expand(t,n){const r=()=>{if(n){let o=this.parent;for(;o.level>0;)o.expanded=!0,o=o.parent}this.expanded=!0,t&&t(),this.childNodes.forEach(o=>{o.canFocus=!0})};this.shouldLoadData()?this.loadData(o=>{Array.isArray(o)&&(this.checked?this.setChecked(!0,!0):this.store.checkStrictly||vg(this),r())}):r()}doCreateChildren(t,n={}){t.forEach(r=>{this.insertChild(Object.assign({data:r},n),void 0,!0)})}collapse(){this.expanded=!1,this.childNodes.forEach(t=>{t.canFocus=!1})}shouldLoadData(){return this.store.lazy===!0&&this.store.load&&!this.loaded}updateLeafState(){if(this.store.lazy===!0&&this.loaded!==!0&&this.isLeafByUser!==void 0)return void(this.isLeaf=this.isLeafByUser);const t=this.childNodes;!this.store.lazy||this.store.lazy===!0&&this.loaded===!0?this.isLeaf=!t||t.length===0:this.isLeaf=!1}setChecked(t,n,r,o){if(this.indeterminate=t==="half",this.checked=t===!0,this.store.checkStrictly)return;if(!this.shouldLoadData()||this.store.checkDescendants){const{all:a,allWithoutDisable:l}=cx(this.childNodes);this.isLeaf||a||!l||(this.checked=!1,t=!1);const s=()=>{if(n){const u=this.childNodes;for(let f=0,p=u.length;f<p;f++){const m=u[f];o=o||t!==!1;const v=m.disabled?m.checked:o;m.setChecked(v,n,!0,o)}const{half:c,all:d}=cx(u);d||(this.checked=d,this.indeterminate=c)}};if(this.shouldLoadData())return void this.loadData(()=>{s(),vg(this)},{checked:t!==!1});s()}const i=this.parent;i&&i.level!==0&&(r||vg(i))}getChildren(t=!1){if(this.level===0)return this.data;const n=this.data;if(!n)return null;const r=this.store.props;let o="children";return r&&(o=r.children||"children"),n[o]===void 0&&(n[o]=null),t&&!n[o]&&(n[o]=[]),n[o]}updateChildren(){const t=this.getChildren()||[],n=this.childNodes.map(i=>i.data),r={},o=[];t.forEach((i,a)=>{const l=i[s1];l&&n.findIndex(s=>s[s1]===l)>=0?r[l]={index:a,data:i}:o.push({index:a,data:i})}),this.store.lazy||n.forEach(i=>{r[i[s1]]||this.removeChildByData(i)}),o.forEach(({index:i,data:a})=>{this.insertChild({data:a},i)}),this.updateLeafState()}loadData(t,n={}){if(this.store.lazy!==!0||!this.store.load||this.loaded||this.loading&&!Object.keys(n).length)t&&t.call(this);else{this.loading=!0;const r=i=>{this.childNodes=[],this.doCreateChildren(i,n),this.loaded=!0,this.loading=!1,this.updateLeafState(),t&&t.call(this,i)},o=()=>{this.loading=!1};this.store.load(this,r,o)}}eachNode(t){const n=[this];for(;n.length;){const r=n.shift();n.unshift(...r.childNodes),t(r)}}reInitChecked(){this.store.checkStrictly||vg(this)}};class hze{constructor(t){this.currentNode=null,this.currentNodeKey=null;for(const n in t)Tn(t,n)&&(this[n]=t[n]);this.nodesMap={}}initialize(){this.root=new BR({data:this.data,store:this}),this.root.initialize(),this.lazy&&this.load?(0,this.load)(this.root,t=>{this.root.doCreateChildren(t),this._initDefaultCheckedNodes()}):this._initDefaultCheckedNodes()}filter(t){const n=this.filterNodeMethod,r=this.lazy,o=function(i){const a=i.root?i.root.childNodes:i.childNodes;if(a.forEach(l=>{l.visible=n.call(l,t,l.data,l),o(l)}),!i.visible&&a.length){let l=!0;l=!a.some(s=>s.visible),i.root?i.root.visible=l===!1:i.visible=l===!1}t&&i.visible&&!i.isLeaf&&(r&&!i.loaded||i.expand())};o(this)}setData(t){t!==this.root.data?(this.root.setData(t),this._initDefaultCheckedNodes()):this.root.updateChildren()}getNode(t){if(t instanceof BR)return t;const n=wn(t)?sx(this.key,t):t;return this.nodesMap[n]||null}insertBefore(t,n){const r=this.getNode(n);r.parent.insertBefore({data:t},r)}insertAfter(t,n){const r=this.getNode(n);r.parent.insertAfter({data:t},r)}remove(t){const n=this.getNode(t);n&&n.parent&&(n===this.currentNode&&(this.currentNode=null),n.parent.removeChild(n))}append(t,n){const r=Z0(n)?this.root:this.getNode(n);r&&r.insertChild({data:t})}_initDefaultCheckedNodes(){const t=this.defaultCheckedKeys||[],n=this.nodesMap;t.forEach(r=>{const o=n[r];o&&o.setChecked(!0,!this.checkStrictly)})}_initDefaultCheckedNode(t){(this.defaultCheckedKeys||[]).includes(t.key)&&t.setChecked(!0,!this.checkStrictly)}setDefaultCheckedKey(t){t!==this.defaultCheckedKeys&&(this.defaultCheckedKeys=t,this._initDefaultCheckedNodes())}registerNode(t){const n=this.key;t&&t.data&&(n?t.key!==void 0&&(this.nodesMap[t.key]=t):this.nodesMap[t.id]=t)}deregisterNode(t){this.key&&t&&t.data&&(t.childNodes.forEach(n=>{this.deregisterNode(n)}),delete this.nodesMap[t.key])}getCheckedNodes(t=!1,n=!1){const r=[],o=function(i){(i.root?i.root.childNodes:i.childNodes).forEach(a=>{(a.checked||n&&a.indeterminate)&&(!t||t&&a.isLeaf)&&r.push(a.data),o(a)})};return o(this),r}getCheckedKeys(t=!1){return this.getCheckedNodes(t).map(n=>(n||{})[this.key])}getHalfCheckedNodes(){const t=[],n=function(r){(r.root?r.root.childNodes:r.childNodes).forEach(o=>{o.indeterminate&&t.push(o.data),n(o)})};return n(this),t}getHalfCheckedKeys(){return this.getHalfCheckedNodes().map(t=>(t||{})[this.key])}_getAllNodes(){const t=[],n=this.nodesMap;for(const r in n)Tn(n,r)&&t.push(n[r]);return t}updateChildren(t,n){const r=this.nodesMap[t];if(!r)return;const o=r.childNodes;for(let i=o.length-1;i>=0;i--){const a=o[i];this.remove(a.data)}for(let i=0,a=n.length;i<a;i++){const l=n[i];this.append(l,r.data)}}_setCheckedKeys(t,n=!1,r){const o=this._getAllNodes().sort((s,u)=>s.level-u.level),i=Object.create(null),a=Object.keys(r);o.forEach(s=>s.setChecked(!1,!1));const l=s=>{s.childNodes.forEach(u=>{var c;i[u.data[t]]=!0,(c=u.childNodes)!=null&&c.length&&l(u)})};for(let s=0,u=o.length;s<u;s++){const c=o[s],d=c.data[t].toString();if(a.includes(d)){if(c.childNodes.length&&l(c),c.isLeaf||this.checkStrictly)c.setChecked(!0,!1);else if(c.setChecked(!0,!0),n){c.setChecked(!1,!1);const f=function(p){p.childNodes.forEach(m=>{m.isLeaf||m.setChecked(!1,!1),f(m)})};f(c)}}else c.checked&&!i[d]&&c.setChecked(!1,!1)}}setCheckedNodes(t,n=!1){const r=this.key,o={};t.forEach(i=>{o[(i||{})[r]]=!0}),this._setCheckedKeys(r,n,o)}setCheckedKeys(t,n=!1){this.defaultCheckedKeys=t;const r=this.key,o={};t.forEach(i=>{o[i]=!0}),this._setCheckedKeys(r,n,o)}setDefaultExpandedKeys(t){t=t||[],this.defaultExpandedKeys=t,t.forEach(n=>{const r=this.getNode(n);r&&r.expand(null,this.autoExpandParent)})}setChecked(t,n,r){const o=this.getNode(t);o&&o.setChecked(!!n,r)}getCurrentNode(){return this.currentNode}setCurrentNode(t){const n=this.currentNode;n&&(n.isCurrent=!1),this.currentNode=t,this.currentNode.isCurrent=!0}setUserCurrentNode(t,n=!0){const r=t[this.key],o=this.nodesMap[r];this.setCurrentNode(o),n&&this.currentNode.level>1&&this.currentNode.parent.expand(null,!0)}setCurrentNodeKey(t,n=!0){if(t==null)return this.currentNode&&(this.currentNode.isCurrent=!1),void(this.currentNode=null);const r=this.getNode(t);r&&(this.setCurrentNode(r),n&&this.currentNode.level>1&&this.currentNode.parent.expand(null,!0))}}const vze=Te({name:"ElTreeNodeContent",props:{node:{type:Object,required:!0},renderContent:Function},setup(e){const t=_t("tree"),n=Rt("NodeInstance"),r=Rt("RootTree");return()=>{const o=e.node,{data:i,store:a}=o;return e.renderContent?e.renderContent(pn,{_self:n,node:o,data:i,store:a}):ft(r.ctx.slots,"default",{node:o,data:i},()=>[pn("span",{class:t.be("node","label")},[o.label])])}}});var mze=Nt(vze,[["__file","tree-node-content.vue"]]);function Jue(e){const t=Rt("TreeNodeMap",null),n={treeNodeExpand:r=>{e.node!==r&&e.node.collapse()},children:[]};return t&&t.children.push(n),qn("TreeNodeMap",n),{broadcastExpanded:r=>{if(e.accordion)for(const o of n.children)o.treeNodeExpand(r)}}}const Zue=Symbol("dragEvents"),gze=Te({name:"ElTreeNode",components:{ElCollapseTransition:UO,ElCheckbox:bl,NodeContent:mze,ElIcon:Ft,Loading:jd},props:{node:{type:BR,default:()=>({})},props:{type:Object,default:()=>({})},accordion:Boolean,renderContent:Function,renderAfterExpand:Boolean,showCheckbox:{type:Boolean,default:!1}},emits:["node-expand"],setup(e,t){const n=_t("tree"),{broadcastExpanded:r}=Jue(e),o=Rt("RootTree"),i=de(!1),a=de(!1),l=de(null),s=de(null),u=de(null),c=Rt(Zue),d=dn();qn("NodeInstance",d),e.node.expanded&&(i.value=!0,a.value=!0);const f=o.props.props.children||"children";Je(()=>{const g=e.node.data[f];return g&&[...g]},()=>{e.node.updateChildren()}),Je(()=>e.node.indeterminate,g=>{p(e.node.checked,g)}),Je(()=>e.node.checked,g=>{p(g,e.node.indeterminate)}),Je(()=>e.node.childNodes.length,()=>e.node.reInitChecked()),Je(()=>e.node.expanded,g=>{St(()=>i.value=g),g&&(a.value=!0)});const p=(g,b)=>{l.value===g&&s.value===b||o.ctx.emit("check-change",e.node.data,g,b),l.value=g,s.value=b},m=()=>{e.node.isLeaf||(i.value?(o.ctx.emit("node-collapse",e.node.data,e.node,d),e.node.collapse()):(e.node.expand(),t.emit("node-expand",e.node.data,e.node,d)))},v=(g,b)=>{e.node.setChecked(b.target.checked,!o.props.checkStrictly),St(()=>{const y=o.store.value;o.ctx.emit("check",e.node.data,{checkedNodes:y.getCheckedNodes(),checkedKeys:y.getCheckedKeys(),halfCheckedNodes:y.getHalfCheckedNodes(),halfCheckedKeys:y.getHalfCheckedKeys()})})};return{ns:n,node$:u,tree:o,expanded:i,childNodeRendered:a,oldChecked:l,oldIndeterminate:s,getNodeKey:g=>sx(o.props.nodeKey,g.data),getNodeClass:g=>{const b=e.props.class;if(!b)return{};let y;if(Ut(b)){const{data:w}=g;y=b(w,g)}else y=b;return an(y)?{[y]:!0}:y},handleSelectChange:p,handleClick:g=>{ux(o.store,o.ctx.emit,()=>o.store.value.setCurrentNode(e.node)),o.currentNode.value=e.node,o.props.expandOnClickNode&&m(),o.props.checkOnClickNode&&!e.node.disabled&&v(null,{target:{checked:!e.node.checked}}),o.ctx.emit("node-click",e.node.data,e.node,d,g)},handleContextMenu:g=>{o.instance.vnode.props.onNodeContextmenu&&(g.stopPropagation(),g.preventDefault()),o.ctx.emit("node-contextmenu",g,e.node.data,e.node,d)},handleExpandIconClick:m,handleCheckChange:v,handleChildNodeExpand:(g,b,y)=>{r(b),o.ctx.emit("node-expand",g,b,y)},handleDragStart:g=>{o.props.draggable&&c.treeNodeDragStart({event:g,treeNode:e})},handleDragOver:g=>{g.preventDefault(),o.props.draggable&&c.treeNodeDragOver({event:g,treeNode:{$el:u.value,node:e.node}})},handleDrop:g=>{g.preventDefault()},handleDragEnd:g=>{o.props.draggable&&c.treeNodeDragEnd(g)},CaretRight:Moe}}}),yze=["aria-expanded","aria-disabled","aria-checked","draggable","data-key"],bze=["aria-expanded"],Aze=Te({name:"ElTree",components:{ElTreeNode:Nt(gze,[["render",function(e,t,n,r,o,i){const a=Qe("el-icon"),l=Qe("el-checkbox"),s=Qe("loading"),u=Qe("node-content"),c=Qe("el-tree-node"),d=Qe("el-collapse-transition");return nn((Y(),fe("div",{ref:"node$",class:oe([e.ns.b("node"),e.ns.is("expanded",e.expanded),e.ns.is("current",e.node.isCurrent),e.ns.is("hidden",!e.node.visible),e.ns.is("focusable",!e.node.disabled),e.ns.is("checked",!e.node.disabled&&e.node.checked),e.getNodeClass(e.node)]),role:"treeitem",tabindex:"-1","aria-expanded":e.expanded,"aria-disabled":e.node.disabled,"aria-checked":e.node.checked,draggable:e.tree.props.draggable,"data-key":e.getNodeKey(e.node),onClick:t[1]||(t[1]=Gt((...f)=>e.handleClick&&e.handleClick(...f),["stop"])),onContextmenu:t[2]||(t[2]=(...f)=>e.handleContextMenu&&e.handleContextMenu(...f)),onDragstart:t[3]||(t[3]=Gt((...f)=>e.handleDragStart&&e.handleDragStart(...f),["stop"])),onDragover:t[4]||(t[4]=Gt((...f)=>e.handleDragOver&&e.handleDragOver(...f),["stop"])),onDragend:t[5]||(t[5]=Gt((...f)=>e.handleDragEnd&&e.handleDragEnd(...f),["stop"])),onDrop:t[6]||(t[6]=Gt((...f)=>e.handleDrop&&e.handleDrop(...f),["stop"]))},[ce("div",{class:oe(e.ns.be("node","content")),style:$t({paddingLeft:(e.node.level-1)*e.tree.props.indent+"px"})},[e.tree.props.icon||e.CaretRight?(Y(),Le(a,{key:0,class:oe([e.ns.be("node","expand-icon"),e.ns.is("leaf",e.node.isLeaf),{expanded:!e.node.isLeaf&&e.expanded}]),onClick:Gt(e.handleExpandIconClick,["stop"])},{default:he(()=>[(Y(),Le(Hn(e.tree.props.icon||e.CaretRight)))]),_:1},8,["class","onClick"])):Fe("v-if",!0),e.showCheckbox?(Y(),Le(l,{key:1,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:!!e.node.disabled,onClick:t[0]||(t[0]=Gt(()=>{},["stop"])),onChange:e.handleCheckChange},null,8,["model-value","indeterminate","disabled","onChange"])):Fe("v-if",!0),e.node.loading?(Y(),Le(a,{key:2,class:oe([e.ns.be("node","loading-icon"),e.ns.is("loading")])},{default:he(()=>[ie(s)]),_:1},8,["class"])):Fe("v-if",!0),ie(u,{node:e.node,"render-content":e.renderContent},null,8,["node","render-content"])],6),ie(d,null,{default:he(()=>[!e.renderAfterExpand||e.childNodeRendered?nn((Y(),fe("div",{key:0,class:oe(e.ns.be("node","children")),role:"group","aria-expanded":e.expanded},[(Y(!0),fe(bt,null,bn(e.node.childNodes,f=>(Y(),Le(c,{key:e.getNodeKey(f),"render-content":e.renderContent,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,node:f,accordion:e.accordion,props:e.props,onNodeExpand:e.handleChildNodeExpand},null,8,["render-content","render-after-expand","show-checkbox","node","accordion","props","onNodeExpand"]))),128))],10,bze)),[[$n,e.expanded]]):Fe("v-if",!0)]),_:1})],42,yze)),[[$n,e.node.visible]])}],["__file","tree-node.vue"]])},props:{data:{type:Array,default:()=>[]},emptyText:{type:String},renderAfterExpand:{type:Boolean,default:!0},nodeKey:String,checkStrictly:Boolean,defaultExpandAll:Boolean,expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkDescendants:{type:Boolean,default:!1},autoExpandParent:{type:Boolean,default:!0},defaultCheckedKeys:Array,defaultExpandedKeys:Array,currentNodeKey:[String,Number],renderContent:Function,showCheckbox:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},allowDrag:Function,allowDrop:Function,props:{type:Object,default:()=>({children:"children",label:"label",disabled:"disabled"})},lazy:{type:Boolean,default:!1},highlightCurrent:Boolean,load:Function,filterNodeMethod:Function,accordion:Boolean,indent:{type:Number,default:18},icon:{type:fi}},emits:["check-change","current-change","node-click","node-contextmenu","node-collapse","node-expand","check","node-drag-start","node-drag-end","node-drop","node-drag-leave","node-drag-enter","node-drag-over"],setup(e,t){const{t:n}=Gr(),r=_t("tree"),o=de(new hze({key:e.nodeKey,data:e.data,lazy:e.lazy,props:e.props,load:e.load,currentNodeKey:e.currentNodeKey,checkStrictly:e.checkStrictly,checkDescendants:e.checkDescendants,defaultCheckedKeys:e.defaultCheckedKeys,defaultExpandedKeys:e.defaultExpandedKeys,autoExpandParent:e.autoExpandParent,defaultExpandAll:e.defaultExpandAll,filterNodeMethod:e.filterNodeMethod}));o.value.initialize();const i=de(o.value.root),a=de(null),l=de(null),s=de(null),{broadcastExpanded:u}=Jue(e),{dragState:c}=function({props:p,ctx:m,el$:v,dropIndicator$:g,store:b}){const y=_t("tree"),w=de({showDropIndicator:!1,draggingNode:null,dropNode:null,allowDrop:!0,dropType:null});return qn(Zue,{treeNodeDragStart:({event:x,treeNode:_})=>{if(typeof p.allowDrag=="function"&&!p.allowDrag(_.node))return x.preventDefault(),!1;x.dataTransfer.effectAllowed="move";try{x.dataTransfer.setData("text/plain","")}catch{}w.value.draggingNode=_,m.emit("node-drag-start",_.node,x)},treeNodeDragOver:({event:x,treeNode:_})=>{const E=_,C=w.value.dropNode;C&&C.node.id!==E.node.id&&xl(C.$el,y.is("drop-inner"));const T=w.value.draggingNode;if(!T||!E)return;let k=!0,I=!0,O=!0,F=!0;typeof p.allowDrop=="function"&&(k=p.allowDrop(T.node,E.node,"prev"),F=I=p.allowDrop(T.node,E.node,"inner"),O=p.allowDrop(T.node,E.node,"next")),x.dataTransfer.dropEffect=I||k||O?"move":"none",(k||I||O)&&(C==null?void 0:C.node.id)!==E.node.id&&(C&&m.emit("node-drag-leave",T.node,C.node,x),m.emit("node-drag-enter",T.node,E.node,x)),w.value.dropNode=k||I||O?E:null,E.node.nextSibling===T.node&&(O=!1),E.node.previousSibling===T.node&&(k=!1),E.node.contains(T.node,!1)&&(I=!1),(T.node===E.node||T.node.contains(E.node))&&(k=!1,I=!1,O=!1);const N=E.$el.querySelector(`.${y.be("node","content")}`).getBoundingClientRect(),B=v.value.getBoundingClientRect();let P;const V=k?I?.25:O?.45:1:-1,L=O?I?.75:k?.55:0:1;let H=-9999;const U=x.clientY-N.top;P=U<N.height*V?"before":U>N.height*L?"after":I?"inner":"none";const G=E.$el.querySelector(`.${y.be("node","expand-icon")}`).getBoundingClientRect(),z=g.value;P==="before"?H=G.top-B.top:P==="after"&&(H=G.bottom-B.top),z.style.top=`${H}px`,z.style.left=G.right-B.left+"px",P==="inner"?Ed(E.$el,y.is("drop-inner")):xl(E.$el,y.is("drop-inner")),w.value.showDropIndicator=P==="before"||P==="after",w.value.allowDrop=w.value.showDropIndicator||F,w.value.dropType=P,m.emit("node-drag-over",T.node,E.node,x)},treeNodeDragEnd:x=>{const{draggingNode:_,dropType:E,dropNode:C}=w.value;if(x.preventDefault(),x.dataTransfer.dropEffect="move",_&&C){const T={data:_.node.data};E!=="none"&&_.node.remove(),E==="before"?C.node.parent.insertBefore(T,C.node):E==="after"?C.node.parent.insertAfter(T,C.node):E==="inner"&&C.node.insertChild(T),E!=="none"&&(b.value.registerNode(T),b.value.key&&_.node.eachNode(k=>{var I;(I=b.value.nodesMap[k.data[b.value.key]])==null||I.setChecked(k.checked,!b.value.checkStrictly)})),xl(C.$el,y.is("drop-inner")),m.emit("node-drag-end",_.node,C.node,E,x),E!=="none"&&m.emit("node-drop",_.node,C.node,E,x)}_&&!C&&m.emit("node-drag-end",_.node,null,E,x),w.value.showDropIndicator=!1,w.value.draggingNode=null,w.value.dropNode=null,w.value.allowDrop=!0}}),{dragState:w}}({props:e,ctx:t,el$:l,dropIndicator$:s,store:o});(function({el$:p},m){const v=_t("tree"),g=Qo([]),b=Qo([]);yn(()=>{y()}),zs(()=>{g.value=Array.from(p.value.querySelectorAll("[role=treeitem]")),b.value=Array.from(p.value.querySelectorAll("input[type=checkbox]"))}),Je(b,w=>{w.forEach(x=>{x.setAttribute("tabindex","-1")})}),Yo(p,"keydown",w=>{const x=w.target;if(!x.className.includes(v.b("node")))return;const _=w.code;g.value=Array.from(p.value.querySelectorAll(`.${v.is("focusable")}[role=treeitem]`));const E=g.value.indexOf(x);let C;if([Xt.up,Xt.down].includes(_)){if(w.preventDefault(),_===Xt.up){C=E===-1?0:E!==0?E-1:g.value.length-1;const k=C;for(;!m.value.getNode(g.value[C].dataset.key).canFocus;){if(C--,C===k){C=-1;break}C<0&&(C=g.value.length-1)}}else{C=E===-1?0:E<g.value.length-1?E+1:0;const k=C;for(;!m.value.getNode(g.value[C].dataset.key).canFocus;){if(C++,C===k){C=-1;break}C>=g.value.length&&(C=0)}}C!==-1&&g.value[C].focus()}[Xt.left,Xt.right].includes(_)&&(w.preventDefault(),x.click());const T=x.querySelector('[type="checkbox"]');[Xt.enter,Xt.space].includes(_)&&T&&(w.preventDefault(),T.click())});const y=()=>{var w;g.value=Array.from(p.value.querySelectorAll(`.${v.is("focusable")}[role=treeitem]`)),b.value=Array.from(p.value.querySelectorAll("input[type=checkbox]"));const x=p.value.querySelectorAll(`.${v.is("checked")}[role=treeitem]`);x.length?x[0].setAttribute("tabindex","0"):(w=g.value[0])==null||w.setAttribute("tabindex","0")}})({el$:l},o);const d=ee(()=>{const{childNodes:p}=i.value;return!p||p.length===0||p.every(({visible:m})=>!m)});Je(()=>e.currentNodeKey,p=>{o.value.setCurrentNodeKey(p)}),Je(()=>e.defaultCheckedKeys,p=>{o.value.setDefaultCheckedKey(p)}),Je(()=>e.defaultExpandedKeys,p=>{o.value.setDefaultExpandedKeys(p)}),Je(()=>e.data,p=>{o.value.setData(p)},{deep:!0}),Je(()=>e.checkStrictly,p=>{o.value.checkStrictly=p});const f=()=>{const p=o.value.getCurrentNode();return p?p.data:null};return qn("RootTree",{ctx:t,props:e,store:o,root:i,currentNode:a,instance:dn()}),qn(Fc,void 0),{ns:r,store:o,root:i,currentNode:a,dragState:c,el$:l,dropIndicator$:s,isEmpty:d,filter:p=>{if(!e.filterNodeMethod)throw new Error("[Tree] filterNodeMethod is required when filter");o.value.filter(p)},getNodeKey:p=>sx(e.nodeKey,p.data),getNodePath:p=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in getNodePath");const m=o.value.getNode(p);if(!m)return[];const v=[m.data];let g=m.parent;for(;g&&g!==i.value;)v.push(g.data),g=g.parent;return v.reverse()},getCheckedNodes:(p,m)=>o.value.getCheckedNodes(p,m),getCheckedKeys:p=>o.value.getCheckedKeys(p),getCurrentNode:f,getCurrentKey:()=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in getCurrentKey");const p=f();return p?p[e.nodeKey]:null},setCheckedNodes:(p,m)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedNodes");o.value.setCheckedNodes(p,m)},setCheckedKeys:(p,m)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedKeys");o.value.setCheckedKeys(p,m)},setChecked:(p,m,v)=>{o.value.setChecked(p,m,v)},getHalfCheckedNodes:()=>o.value.getHalfCheckedNodes(),getHalfCheckedKeys:()=>o.value.getHalfCheckedKeys(),setCurrentNode:(p,m=!0)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentNode");ux(o,t.emit,()=>o.value.setUserCurrentNode(p,m))},setCurrentKey:(p,m=!0)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentKey");ux(o,t.emit,()=>o.value.setCurrentNodeKey(p,m))},t:n,getNode:p=>o.value.getNode(p),remove:p=>{o.value.remove(p)},append:(p,m)=>{o.value.append(p,m)},insertBefore:(p,m)=>{o.value.insertBefore(p,m)},insertAfter:(p,m)=>{o.value.insertAfter(p,m)},handleNodeExpand:(p,m,v)=>{u(m),t.emit("node-expand",p,m,v)},updateKeyChildren:(p,m)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in updateKeyChild");o.value.updateChildren(p,m)}}}});var dx=Nt(Aze,[["render",function(e,t,n,r,o,i){const a=Qe("el-tree-node");return Y(),fe("div",{ref:"el$",class:oe([e.ns.b(),e.ns.is("dragging",!!e.dragState.draggingNode),e.ns.is("drop-not-allow",!e.dragState.allowDrop),e.ns.is("drop-inner",e.dragState.dropType==="inner"),{[e.ns.m("highlight-current")]:e.highlightCurrent}]),role:"tree"},[(Y(!0),fe(bt,null,bn(e.root.childNodes,l=>(Y(),Le(a,{key:e.getNodeKey(l),node:l,props:e.props,accordion:e.accordion,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,"render-content":e.renderContent,onNodeExpand:e.handleNodeExpand},null,8,["node","props","accordion","render-after-expand","show-checkbox","render-content","onNodeExpand"]))),128)),e.isEmpty?(Y(),fe("div",{key:0,class:oe(e.ns.e("empty-block"))},[ft(e.$slots,"empty",{},()=>{var l;return[ce("span",{class:oe(e.ns.e("empty-text"))},Ye((l=e.emptyText)!=null?l:e.t("el.tree.emptyText")),3)]})],2)):Fe("v-if",!0),nn(ce("div",{ref:"dropIndicator$",class:oe(e.ns.e("drop-indicator"))},null,2),[[$n,e.dragState.showDropIndicator]])],2)}],["__file","tree.vue"]]);dx.install=e=>{e.component(dx.name,dx)};let PR;$Q=dx,HO=$Q,PR=Symbol("uploadContextKey");class wze extends Error{constructor(t,n,r,o){super(t),this.name="UploadAjaxError",this.status=n,this.method=r,this.url=o}}function ece(e,t,n){let r;return r=n.response?`${n.response.error||n.response}`:n.responseText?`${n.responseText}`:`fail to ${t.method} ${e} ${n.status}`,new wze(r,n.status,t.method,e)}const tce=["text","picture","picture-card"];let xze=1;const LR=()=>Date.now()+xze++,nce=Pt({action:{type:String,default:"#"},headers:{type:Object},method:{type:String,default:"post"},data:{type:[Object,Function,Promise],default:()=>({})},multiple:{type:Boolean,default:!1},name:{type:String,default:"file"},drag:{type:Boolean,default:!1},withCredentials:Boolean,showFileList:{type:Boolean,default:!0},accept:{type:String,default:""},fileList:{type:Array,default:()=>[]},autoUpload:{type:Boolean,default:!0},listType:{type:String,values:tce,default:"text"},httpRequest:{type:Function,default:e=>{typeof XMLHttpRequest>"u"&&Ka("ElUpload","XMLHttpRequest is undefined");const t=new XMLHttpRequest,n=e.action;t.upload&&t.upload.addEventListener("progress",i=>{const a=i;a.percent=i.total>0?i.loaded/i.total*100:0,e.onProgress(a)});const r=new FormData;if(e.data)for(const[i,a]of Object.entries(e.data))mt(a)&&a.length?r.append(i,...a):r.append(i,a);r.append(e.filename,e.file,e.file.name),t.addEventListener("error",()=>{e.onError(ece(n,e,t))}),t.addEventListener("load",()=>{if(t.status<200||t.status>=300)return e.onError(ece(n,e,t));e.onSuccess(function(i){const a=i.responseText||i.response;if(!a)return a;try{return JSON.parse(a)}catch{return a}}(t))}),t.open(e.method,n,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);const o=e.headers||{};if(o instanceof Headers)o.forEach((i,a)=>t.setRequestHeader(a,i));else for(const[i,a]of Object.entries(o))pa(a)||t.setRequestHeader(i,String(a));return t.send(r),t}},disabled:Boolean,limit:Number}),_ze=Pt({...nce,beforeUpload:{type:Function,default:fr},beforeRemove:{type:Function},onRemove:{type:Function,default:fr},onChange:{type:Function,default:fr},onPreview:{type:Function,default:fr},onSuccess:{type:Function,default:fr},onProgress:{type:Function,default:fr},onError:{type:Function,default:fr},onExceed:{type:Function,default:fr},crossorigin:{type:String}}),Eze=Pt({files:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},handlePreview:{type:Function,default:fr},listType:{type:String,values:tce,default:"text"},crossorigin:{type:String}}),Cze=["onKeydown"],Sze=["src","crossorigin"],kze=["onClick"],Dze=["title"],Oze=["onClick"],Tze=["onClick"],Mze=Te({name:"ElUploadList"}),Nze=Te({...Mze,props:Eze,emits:{remove:e=>!!e},setup(e,{emit:t}){const n=e,{t:r}=Gr(),o=_t("upload"),i=_t("icon"),a=_t("list"),l=wl(),s=de(!1),u=ee(()=>[o.b("list"),o.bm("list",n.listType),o.is("disabled",n.disabled)]),c=d=>{t("remove",d)};return(d,f)=>(Y(),Le(Sb,{tag:"ul",class:oe(M(u)),name:M(a).b()},{default:he(()=>[(Y(!0),fe(bt,null,bn(d.files,p=>(Y(),fe("li",{key:p.uid||p.name,class:oe([M(o).be("list","item"),M(o).is(p.status),{focusing:s.value}]),tabindex:"0",onKeydown:Rr(m=>!M(l)&&c(p),["delete"]),onFocus:f[0]||(f[0]=m=>s.value=!0),onBlur:f[1]||(f[1]=m=>s.value=!1),onClick:f[2]||(f[2]=m=>s.value=!1)},[ft(d.$slots,"default",{file:p},()=>[d.listType==="picture"||p.status!=="uploading"&&d.listType==="picture-card"?(Y(),fe("img",{key:0,class:oe(M(o).be("list","item-thumbnail")),src:p.url,crossorigin:d.crossorigin,alt:""},null,10,Sze)):Fe("v-if",!0),p.status==="uploading"||d.listType!=="picture-card"?(Y(),fe("div",{key:1,class:oe(M(o).be("list","item-info"))},[ce("a",{class:oe(M(o).be("list","item-name")),onClick:Gt(m=>d.handlePreview(p),["prevent"])},[ie(M(Ft),{class:oe(M(i).m("document"))},{default:he(()=>[ie(M(Foe))]),_:1},8,["class"]),ce("span",{class:oe(M(o).be("list","item-file-name")),title:p.name},Ye(p.name),11,Dze)],10,kze),p.status==="uploading"?(Y(),Le(M(wR),{key:0,type:d.listType==="picture-card"?"circle":"line","stroke-width":d.listType==="picture-card"?6:2,percentage:Number(p.percentage),style:$t(d.listType==="picture-card"?"":"margin-top: 0.5rem")},null,8,["type","stroke-width","percentage","style"])):Fe("v-if",!0)],2)):Fe("v-if",!0),ce("label",{class:oe(M(o).be("list","item-status-label"))},[d.listType==="text"?(Y(),Le(M(Ft),{key:0,class:oe([M(i).m("upload-success"),M(i).m("circle-check")])},{default:he(()=>[ie(M(h9))]),_:1},8,["class"])):["picture-card","picture"].includes(d.listType)?(Y(),Le(M(Ft),{key:1,class:oe([M(i).m("upload-success"),M(i).m("check")])},{default:he(()=>[ie(M(j3))]),_:1},8,["class"])):Fe("v-if",!0)],2),M(l)?Fe("v-if",!0):(Y(),Le(M(Ft),{key:2,class:oe(M(i).m("close")),onClick:m=>c(p)},{default:he(()=>[ie(M(wc))]),_:2},1032,["class","onClick"])),Fe(" Due to close btn only appears when li gets focused disappears after li gets blurred, thus keyboard navigation can never reach close btn"),Fe(" This is a bug which needs to be fixed "),Fe(" TODO: Fix the incorrect navigation interaction "),M(l)?Fe("v-if",!0):(Y(),fe("i",{key:3,class:oe(M(i).m("close-tip"))},Ye(M(r)("el.upload.deleteTip")),3)),d.listType==="picture-card"?(Y(),fe("span",{key:4,class:oe(M(o).be("list","item-actions"))},[ce("span",{class:oe(M(o).be("list","item-preview")),onClick:m=>d.handlePreview(p)},[ie(M(Ft),{class:oe(M(i).m("zoom-in"))},{default:he(()=>[ie(M(zN))]),_:1},8,["class"])],10,Oze),M(l)?Fe("v-if",!0):(Y(),fe("span",{key:0,class:oe(M(o).be("list","item-delete")),onClick:m=>c(p)},[ie(M(Ft),{class:oe(M(i).m("delete"))},{default:he(()=>[ie(M(Noe))]),_:1},8,["class"])],10,Tze))],2)):Fe("v-if",!0)])],42,Cze))),128)),ft(d.$slots,"append")]),_:3},8,["class","name"]))}});var rce=Nt(Nze,[["__file","upload-list.vue"]]);const Fze=Pt({disabled:{type:Boolean,default:!1}}),Rze={file:e=>mt(e)},Ize=["onDrop","onDragover"],oce="ElUploadDrag",Bze=Te({name:oce}),Pze=Te({...Bze,props:Fze,emits:Rze,setup(e,{emit:t}){Rt(PR)||Ka(oce,"usage: <el-upload><el-upload-dragger /></el-upload>");const n=_t("upload"),r=de(!1),o=wl(),i=l=>{if(o.value)return;r.value=!1,l.stopPropagation();const s=Array.from(l.dataTransfer.files);t("file",s)},a=()=>{o.value||(r.value=!0)};return(l,s)=>(Y(),fe("div",{class:oe([M(n).b("dragger"),M(n).is("dragover",r.value)]),onDrop:Gt(i,["prevent"]),onDragover:Gt(a,["prevent"]),onDragleave:s[0]||(s[0]=Gt(u=>r.value=!1,["prevent"]))},[ft(l.$slots,"default")],42,Ize))}});var Lze=Nt(Pze,[["__file","upload-dragger.vue"]]);const jze=Pt({...nce,beforeUpload:{type:Function,default:fr},onRemove:{type:Function,default:fr},onStart:{type:Function,default:fr},onSuccess:{type:Function,default:fr},onProgress:{type:Function,default:fr},onError:{type:Function,default:fr},onExceed:{type:Function,default:fr}}),Vze=["onKeydown"],zze=["name","multiple","accept"],Hze=Te({name:"ElUploadContent",inheritAttrs:!1}),$ze=Te({...Hze,props:jze,setup(e,{expose:t}){const n=e,r=_t("upload"),o=wl(),i=Qo({}),a=Qo(),l=p=>{if(p.length===0)return;const{autoUpload:m,limit:v,fileList:g,multiple:b,onStart:y,onExceed:w}=n;if(v&&g.length+p.length>v)w(p,g);else{b||(p=p.slice(0,1));for(const x of p){const _=x;_.uid=LR(),y(_),m&&s(_)}}},s=async p=>{if(a.value.value="",!n.beforeUpload)return u(p);let m,v={};try{const b=n.data,y=n.beforeUpload(p);v=Yb(n.data)?Mf(n.data):n.data,m=await y,Yb(n.data)&&ns(b,v)&&(v=Mf(n.data))}catch{m=!1}if(m===!1)return void n.onRemove(p);let g=p;m instanceof Blob&&(g=m instanceof File?m:new File([m],p.name,{type:p.type})),u(Object.assign(g,{uid:p.uid}),v)},u=async(p,m)=>{const{headers:v,data:g,method:b,withCredentials:y,name:w,action:x,onProgress:_,onSuccess:E,onError:C,httpRequest:T}=n;try{m=await(async(F,N)=>Ut(F)?F(N):F)(m??g,p)}catch{return void n.onRemove(p)}const{uid:k}=p,I={headers:v||{},withCredentials:y,file:p,data:m,method:b,filename:w,action:x,onProgress:F=>{_(F,p)},onSuccess:F=>{E(F,p),delete i.value[k]},onError:F=>{C(F,p),delete i.value[k]}},O=T(I);i.value[k]=O,O instanceof Promise&&O.then(I.onSuccess,I.onError)},c=p=>{const m=p.target.files;m&&l(Array.from(m))},d=()=>{o.value||(a.value.value="",a.value.click())},f=()=>{d()};return t({abort:p=>{const m=(v=i.value,Object.entries(v)).filter(p?([g])=>String(p.uid)===g:()=>!0);var v;m.forEach(([g,b])=>{b instanceof XMLHttpRequest&&b.abort(),delete i.value[g]})},upload:s}),(p,m)=>(Y(),fe("div",{class:oe([M(r).b(),M(r).m(p.listType),M(r).is("drag",p.drag)]),tabindex:"0",onClick:d,onKeydown:Rr(Gt(f,["self"]),["enter","space"])},[p.drag?(Y(),Le(Lze,{key:0,disabled:M(o),onFile:l},{default:he(()=>[ft(p.$slots,"default")]),_:3},8,["disabled"])):ft(p.$slots,"default",{key:1}),ce("input",{ref_key:"inputRef",ref:a,class:oe(M(r).e("input")),name:p.name,multiple:p.multiple,accept:p.accept,type:"file",onChange:c,onClick:m[0]||(m[0]=Gt(()=>{},["stop"]))},null,42,zze)],42,Vze))}});var ice=Nt($ze,[["__file","upload-content.vue"]]);const Uze="ElUpload",ace=e=>{var t;(t=e.url)!=null&&t.startsWith("blob:")&&URL.revokeObjectURL(e.url)},Wze=(e,t)=>{const n=eFe(e,"fileList",0,{passive:!0}),r=i=>n.value.find(a=>a.uid===i.uid);function o(i){var a;(a=t.value)==null||a.abort(i)}return Je(()=>e.listType,i=>{i!=="picture-card"&&i!=="picture"||(n.value=n.value.map(a=>{const{raw:l,url:s}=a;if(!s&&l)try{a.url=URL.createObjectURL(l)}catch(u){e.onError(u,a,n.value)}return a}))}),Je(n,i=>{for(const a of i)a.uid||(a.uid=LR()),a.status||(a.status="success")},{immediate:!0,deep:!0}),{uploadFiles:n,abort:o,clearFiles:function(i=["ready","uploading","success","fail"]){n.value=n.value.filter(a=>!i.includes(a.status))},handleError:(i,a)=>{const l=r(a);l&&(console.error(i),l.status="fail",n.value.splice(n.value.indexOf(l),1),e.onError(i,l,n.value),e.onChange(l,n.value))},handleProgress:(i,a)=>{const l=r(a);l&&(e.onProgress(i,l,n.value),l.status="uploading",l.percentage=Math.round(i.percent))},handleStart:i=>{pa(i.uid)&&(i.uid=LR());const a={name:i.name,percentage:0,status:"ready",size:i.size,raw:i,uid:i.uid};if(e.listType==="picture-card"||e.listType==="picture")try{a.url=URL.createObjectURL(i)}catch(l){l.message,e.onError(l,a,n.value)}n.value=[...n.value,a],e.onChange(a,n.value)},handleSuccess:(i,a)=>{const l=r(a);l&&(l.status="success",l.response=i,e.onSuccess(i,l,n.value),e.onChange(l,n.value))},handleRemove:async i=>{const a=i instanceof File?r(i):i;a||Ka(Uze,"file to be removed not found");const l=s=>{o(s);const u=n.value;u.splice(u.indexOf(s),1),e.onRemove(s,u),ace(s)};e.beforeRemove?await e.beforeRemove(a,n.value)!==!1&&l(a):l(a)},submit:function(){n.value.filter(({status:i})=>i==="ready").forEach(({raw:i})=>{var a;return i&&((a=t.value)==null?void 0:a.upload(i))})},revokeFileObjectURL:ace}},Gze=Te({name:"ElUpload"}),qze=Te({...Gze,props:_ze,setup(e,{expose:t}){const n=e,r=wl(),o=Qo(),{abort:i,submit:a,clearFiles:l,uploadFiles:s,handleStart:u,handleError:c,handleRemove:d,handleSuccess:f,handleProgress:p,revokeFileObjectURL:m}=Wze(n,o),v=ee(()=>n.listType==="picture-card"),g=ee(()=>({...n,fileList:s.value,onStart:u,onProgress:p,onSuccess:f,onError:c,onRemove:d}));return xo(()=>{s.value.forEach(m)}),qn(PR,{accept:dr(n,"accept")}),t({abort:i,submit:a,clearFiles:l,handleStart:u,handleRemove:d}),(b,y)=>(Y(),fe("div",null,[M(v)&&b.showFileList?(Y(),Le(rce,{key:0,disabled:M(r),"list-type":b.listType,files:M(s),crossorigin:b.crossorigin,"handle-preview":b.onPreview,onRemove:M(d)},Ff({append:he(()=>[ie(ice,Un({ref_key:"uploadRef",ref:o},M(g)),{default:he(()=>[b.$slots.trigger?ft(b.$slots,"trigger",{key:0}):Fe("v-if",!0),!b.$slots.trigger&&b.$slots.default?ft(b.$slots,"default",{key:1}):Fe("v-if",!0)]),_:3},16)]),_:2},[b.$slots.file?{name:"default",fn:he(({file:w})=>[ft(b.$slots,"file",{file:w})])}:void 0]),1032,["disabled","list-type","files","crossorigin","handle-preview","onRemove"])):Fe("v-if",!0),!M(v)||M(v)&&!b.showFileList?(Y(),Le(ice,Un({key:1,ref_key:"uploadRef",ref:o},M(g)),{default:he(()=>[b.$slots.trigger?ft(b.$slots,"trigger",{key:0}):Fe("v-if",!0),!b.$slots.trigger&&b.$slots.default?ft(b.$slots,"default",{key:1}):Fe("v-if",!0)]),_:3},16)):Fe("v-if",!0),b.$slots.trigger?ft(b.$slots,"default",{key:2}):Fe("v-if",!0),ft(b.$slots,"tip"),!M(v)&&b.showFileList?(Y(),Le(rce,{key:3,disabled:M(r),"list-type":b.listType,files:M(s),crossorigin:b.crossorigin,"handle-preview":b.onPreview,onRemove:M(d)},Ff({_:2},[b.$slots.file?{name:"default",fn:he(({file:w})=>[ft(b.$slots,"file",{file:w})])}:void 0]),1032,["disabled","list-type","files","crossorigin","handle-preview","onRemove"])):Fe("v-if",!0)]))}});Am=Cr(Nt(qze,[["__file","upload.vue"]]));function Kze(e){let t;const n=de(!1),r=Qn({...e,originalPosition:"",originalOverflow:"",visible:!1});function o(){var u,c;(c=(u=s.$el)==null?void 0:u.parentNode)==null||c.removeChild(s.$el)}function i(){if(!n.value)return;const u=r.parent;n.value=!1,u.vLoadingAddClassList=void 0,function(){const c=r.parent,d=s.ns;if(!c.vLoadingAddClassList){let f=c.getAttribute("loading-number");f=Number.parseInt(f)-1,f?c.setAttribute("loading-number",f.toString()):(xl(c,d.bm("parent","relative")),c.removeAttribute("loading-number")),xl(c,d.bm("parent","hidden"))}o(),l.unmount()}()}const a=Te({name:"ElLoading",setup(u,{expose:c}){const{ns:d,zIndex:f}=C9("loading");return c({ns:d,zIndex:f}),()=>{const p=r.spinner||r.svg,m=pn("svg",{class:"circular",viewBox:r.svgViewBox?r.svgViewBox:"0 0 50 50",...p?{innerHTML:p}:{}},[pn("circle",{class:"path",cx:"25",cy:"25",r:"20",fill:"none"})]),v=r.text?pn("p",{class:d.b("text")},[r.text]):void 0;return pn(ca,{name:d.b("fade"),onAfterLeave:i},{default:he(()=>[nn(ie("div",{style:{backgroundColor:r.background||""},class:[d.b("mask"),r.customClass,r.fullscreen?"is-fullscreen":""]},[pn("div",{class:d.b("spinner")},[m,v])]),[[$n,r.visible]])])})}}}),l=K7(a),s=l.mount(document.createElement("div"));return{...di(r),setText:function(u){r.text=u},removeElLoadingChild:o,close:function(){var u;e.beforeClose&&!e.beforeClose()||(n.value=!0,clearTimeout(t),t=window.setTimeout(i,400),r.visible=!1,(u=e.closed)==null||u.call(e))},handleAfterLeave:i,vm:s,get $el(){return s.$el}}}let fx,px,lce,sce,jR,l4,VR,zR,ma,uce,Qs,cce,dce,fce,pce,hce;px=function(e={}){if(!rr)return;const t=lce(e);if(t.fullscreen&&fx)return fx;const n=Kze({...t,closed:()=>{var o;(o=t.closed)==null||o.call(t),t.fullscreen&&(fx=void 0)}});sce(t,t.parent,n),jR(t,t.parent,n),t.parent.vLoadingAddClassList=()=>jR(t,t.parent,n);let r=t.parent.getAttribute("loading-number");return r=r?`${Number.parseInt(r)+1}`:"1",t.parent.setAttribute("loading-number",r),t.parent.appendChild(n.$el),St(()=>n.visible.value=t.visible),t.fullscreen&&(fx=n),n},lce=e=>{var t,n,r,o;let i;return i=an(e.target)?(t=document.querySelector(e.target))!=null?t:document.body:e.target||document.body,{parent:i===document.body||e.body?document.body:i,background:e.background||"",svg:e.svg||"",svgViewBox:e.svgViewBox||"",spinner:e.spinner||!1,text:e.text||"",fullscreen:i===document.body&&((n=e.fullscreen)==null||n),lock:(r=e.lock)!=null&&r,customClass:e.customClass||"",visible:(o=e.visible)==null||o,target:i}},sce=async(e,t,n)=>{const{nextZIndex:r}=n.vm.zIndex||n.vm._.exposed.zIndex,o={};if(e.fullscreen)n.originalPosition.value=Ld(document.body,"position"),n.originalOverflow.value=Ld(document.body,"overflow"),o.zIndex=r();else if(e.parent===document.body){n.originalPosition.value=Ld(document.body,"position"),await St();for(const i of["top","left"]){const a=i==="top"?"scrollTop":"scrollLeft";o[i]=e.target.getBoundingClientRect()[i]+document.body[a]+document.documentElement[a]-Number.parseInt(Ld(document.body,`margin-${i}`),10)+"px"}for(const i of["height","width"])o[i]=`${e.target.getBoundingClientRect()[i]}px`}else n.originalPosition.value=Ld(t,"position");for(const[i,a]of Object.entries(o))n.$el.style[i]=a},jR=(e,t,n)=>{const r=n.vm.ns||n.vm._.exposed.ns;["absolute","fixed","sticky"].includes(n.originalPosition.value)?xl(t,r.bm("parent","relative")):Ed(t,r.bm("parent","relative")),e.fullscreen&&e.lock?Ed(t,r.bm("parent","hidden")):xl(t,r.bm("parent","hidden"))},l4=Symbol("ElLoading"),VR=(e,t)=>{var n,r,o,i;const a=t.instance,l=d=>wn(t.value)?t.value[d]:void 0,s=d=>(f=>{const p=an(f)&&(a==null?void 0:a[f])||f;return p&&de(p)})(l(d)||e.getAttribute(`element-loading-${Za(d)}`)),u=(n=l("fullscreen"))!=null?n:t.modifiers.fullscreen,c={text:s("text"),svg:s("svg"),svgViewBox:s("svgViewBox"),spinner:s("spinner"),background:s("background"),customClass:s("customClass"),fullscreen:u,target:(r=l("target"))!=null?r:u?void 0:e,body:(o=l("body"))!=null?o:t.modifiers.body,lock:(i=l("lock"))!=null?i:t.modifiers.lock};e[l4]={options:c,instance:px(c)}},EO={mounted(e,t){t.value&&VR(e,t)},updated(e,t){const n=e[l4];t.oldValue!==t.value&&(t.value&&!t.oldValue?VR(e,t):t.value&&t.oldValue?wn(t.value)&&((r,o)=>{for(const i of Object.keys(o))Jn(o[i])&&(o[i].value=r[i])})(t.value,n.options):n==null||n.instance.close())},unmounted(e){var t;(t=e[l4])==null||t.instance.close(),e[l4]=null}},gQ={install(e){e.directive("loading",EO),e.config.globalProperties.$loading=px},directive:EO,service:px},zR=["success","info","warning","error"],ma={customClass:"",center:!1,dangerouslyUseHTMLString:!1,duration:3e3,icon:void 0,id:"",message:"",onClose:void 0,showClose:!1,type:"info",plain:!1,offset:16,zIndex:0,grouping:!1,repeatNum:1,appendTo:rr?document.body:void 0},uce=Pt({customClass:{type:String,default:ma.customClass},center:{type:Boolean,default:ma.center},dangerouslyUseHTMLString:{type:Boolean,default:ma.dangerouslyUseHTMLString},duration:{type:Number,default:ma.duration},icon:{type:fi,default:ma.icon},id:{type:String,default:ma.id},message:{type:[String,Object,Function],default:ma.message},onClose:{type:Function,default:ma.onClose},showClose:{type:Boolean,default:ma.showClose},type:{type:String,values:zR,default:ma.type},plain:{type:Boolean,default:ma.plain},offset:{type:Number,default:ma.offset},zIndex:{type:Number,default:ma.zIndex},grouping:{type:Boolean,default:ma.grouping},repeatNum:{type:Number,default:ma.repeatNum}}),Qs=x7([]),cce=e=>{const{prev:t}=(n=>{const r=Qs.findIndex(a=>a.id===n),o=Qs[r];let i;return r>0&&(i=Qs[r-1]),{current:o,prev:i}})(e);return t?t.vm.exposed.bottom.value:0},dce=["id"],fce=["innerHTML"],pce=Te({name:"ElMessage"}),hce=Te({...pce,props:uce,emits:{destroy:()=>!0},setup(e,{expose:t}){const n=e,{Close:r}=m9,{ns:o,zIndex:i}=C9("message"),{currentZIndex:a,nextZIndex:l}=i,s=de(),u=de(!1),c=de(0);let d;const f=ee(()=>n.type?n.type==="error"?"danger":n.type:"info"),p=ee(()=>{const E=n.type;return{[o.bm("icon",E)]:E&&Vd[E]}}),m=ee(()=>n.icon||Vd[n.type]||""),v=ee(()=>cce(n.id)),g=ee(()=>((E,C)=>Qs.findIndex(k=>k.id===E)>0?16:C)(n.id,n.offset)+v.value),b=ee(()=>c.value+g.value),y=ee(()=>({top:`${g.value}px`,zIndex:a.value}));function w(){n.duration!==0&&({stop:d}=Ib(()=>{_()},n.duration))}function x(){d==null||d()}function _(){u.value=!1}return yn(()=>{w(),l(),u.value=!0}),Je(()=>n.repeatNum,()=>{x(),w()}),Yo(document,"keydown",function({code:E}){E===Xt.esc&&_()}),fa(s,()=>{c.value=s.value.getBoundingClientRect().height}),t({visible:u,bottom:b,close:_}),(E,C)=>(Y(),Le(ca,{name:M(o).b("fade"),onBeforeLeave:E.onClose,onAfterLeave:C[0]||(C[0]=T=>E.$emit("destroy")),persisted:""},{default:he(()=>[nn(ce("div",{id:E.id,ref_key:"messageRef",ref:s,class:oe([M(o).b(),{[M(o).m(E.type)]:E.type},M(o).is("center",E.center),M(o).is("closable",E.showClose),M(o).is("plain",E.plain),E.customClass]),style:$t(M(y)),role:"alert",onMouseenter:x,onMouseleave:w},[E.repeatNum>1?(Y(),Le(M(bQ),{key:0,value:E.repeatNum,type:M(f),class:oe(M(o).e("badge"))},null,8,["value","type","class"])):Fe("v-if",!0),M(m)?(Y(),Le(M(Ft),{key:1,class:oe([M(o).e("icon"),M(p)])},{default:he(()=>[(Y(),Le(Hn(M(m))))]),_:1},8,["class"])):Fe("v-if",!0),ft(E.$slots,"default",{},()=>[E.dangerouslyUseHTMLString?(Y(),fe(bt,{key:1},[Fe(" Caution here, message could've been compromised, never use user's input as message "),ce("p",{class:oe(M(o).e("content")),innerHTML:E.message},null,10,fce)],2112)):(Y(),fe("p",{key:0,class:oe(M(o).e("content"))},Ye(E.message),3))]),E.showClose?(Y(),Le(M(Ft),{key:2,class:oe(M(o).e("closeBtn")),onClick:Gt(_,["stop"])},{default:he(()=>[ie(M(r))]),_:1},8,["class","onClick"])):Fe("v-if",!0)],46,dce),[[$n,u.value]])]),_:3},8,["name","onBeforeLeave"]))}});var Yze=Nt(hce,[["__file","message.vue"]]);let Xze=1;const vce=e=>{const t=!e||an(e)||oo(e)||Ut(e)?{message:e}:e,n={...ma,...t};if(n.appendTo){if(an(n.appendTo)){let r=document.querySelector(n.appendTo);$s(r)||(r=document.body),n.appendTo=r}}else n.appendTo=document.body;return n},Qze=({appendTo:e,...t},n)=>{const r="message_"+Xze++,o=t.onClose,i=document.createElement("div"),a={...t,id:r,onClose:()=>{o==null||o(),(d=>{const f=Qs.indexOf(d);if(f===-1)return;Qs.splice(f,1);const{handler:p}=d;p.close()})(c)},onDestroy:()=>{qs(null,i)}},l=ie(Yze,a,Ut(a.message)||oo(a.message)?{default:Ut(a.message)?a.message:()=>a.message}:null);l.appContext=n||mg._context,qs(l,i),e.appendChild(i.firstElementChild);const s=l.component,u={close:()=>{s.exposed.visible.value=!1}},c={id:r,vnode:l,vm:s,handler:u,props:l.component.props};return c},mg=(e={},t)=>{if(!rr)return{close:()=>{}};if(Kn(fF.max)&&Qs.length>=fF.max)return{close:()=>{}};const n=vce(e);if(n.grouping&&Qs.length){const o=Qs.find(({vnode:i})=>{var a;return((a=i.props)==null?void 0:a.message)===n.message});if(o)return o.props.repeatNum+=1,o.props.type=n.type,o.handler}const r=Qze(n,t);return Qs.push(r),r.handler};zR.forEach(e=>{mg[e]=(t={},n)=>{const r=vce(t);return mg({...r,type:e},n)}}),mg.closeAll=function(e){for(const t of Qs)e&&e!==t.props.type||t.handler.close()},mg._context=null;let mce,gce,yce,bce;El=UN(mg,"$message"),mce=Te({name:"ElMessageBox",directives:{TrapFocus:Qae},components:{ElButton:Sa,ElFocusTrap:$w,ElInput:ua,ElOverlay:WO,ElIcon:Ft,...m9},inheritAttrs:!1,props:{buttonSize:{type:String,validator:WN},modal:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},closeOnHashChange:{type:Boolean,default:!0},center:Boolean,draggable:Boolean,overflow:Boolean,roundButton:{default:!1,type:Boolean},container:{type:String,default:"body"},boxType:{type:String,default:""}},emits:["vanish","action"],setup(e,{emit:t}){const{locale:n,zIndex:r,ns:o,size:i}=C9("message-box",ee(()=>e.buttonSize)),{t:a}=n,{nextZIndex:l}=r,s=de(!1),u=Qn({autofocus:!0,beforeClose:null,callback:null,cancelButtonText:"",cancelButtonClass:"",confirmButtonText:"",confirmButtonClass:"",customClass:"",customStyle:{},dangerouslyUseHTMLString:!1,distinguishCancelAndClose:!1,icon:"",inputPattern:null,inputPlaceholder:"",inputType:"text",inputValue:null,inputValidator:null,inputErrorMessage:"",message:null,modalFade:!0,modalClass:"",showCancelButton:!1,showConfirmButton:!0,type:"",title:void 0,showInput:!1,action:"",confirmButtonLoading:!1,cancelButtonLoading:!1,confirmButtonDisabled:!1,editorErrorMessage:"",validateError:!1,zIndex:l()}),c=ee(()=>{const B=u.type;return{[o.bm("icon",B)]:B&&Vd[B]}}),d=Zl(),f=Zl(),p=ee(()=>u.icon||Vd[u.type]||""),m=ee(()=>!!u.message),v=de(),g=de(),b=de(),y=de(),w=de(),x=ee(()=>u.confirmButtonClass);Je(()=>u.inputValue,async B=>{await St(),e.boxType==="prompt"&&B!==null&&O()},{immediate:!0}),Je(()=>s.value,B=>{var P,V;B&&(e.boxType!=="prompt"&&(u.autofocus?b.value=(V=(P=w.value)==null?void 0:P.$el)!=null?V:v.value:b.value=v.value),u.zIndex=l()),e.boxType==="prompt"&&(B?St().then(()=>{var L;y.value&&y.value.$el&&(u.autofocus?b.value=(L=F())!=null?L:v.value:b.value=v.value)}):(u.editorErrorMessage="",u.validateError=!1))});const _=ee(()=>e.draggable),E=ee(()=>e.overflow);function C(){s.value&&(s.value=!1,St(()=>{u.action&&t("action",u.action)}))}qN(v,g,_,E),yn(async()=>{await St(),e.closeOnHashChange&&window.addEventListener("hashchange",C)}),xo(()=>{e.closeOnHashChange&&window.removeEventListener("hashchange",C)});const T=()=>{e.closeOnClickModal&&I(u.distinguishCancelAndClose?"close":"cancel")},k=sF(T),I=B=>{var P;(e.boxType!=="prompt"||B!=="confirm"||O())&&(u.action=B,u.beforeClose?(P=u.beforeClose)==null||P.call(u,B,u,C):C())},O=()=>{if(e.boxType==="prompt"){const B=u.inputPattern;if(B&&!B.test(u.inputValue||""))return u.editorErrorMessage=u.inputErrorMessage||a("el.messagebox.error"),u.validateError=!0,!1;const P=u.inputValidator;if(typeof P=="function"){const V=P(u.inputValue);if(V===!1)return u.editorErrorMessage=u.inputErrorMessage||a("el.messagebox.error"),u.validateError=!0,!1;if(typeof V=="string")return u.editorErrorMessage=V,u.validateError=!0,!1}}return u.editorErrorMessage="",u.validateError=!1,!0},F=()=>{const B=y.value.$refs;return B.input||B.textarea},N=()=>{I("close")};return e.lockScroll&&XN(s),{...di(u),ns:o,overlayEvent:k,visible:s,hasMessage:m,typeClass:c,contentId:d,inputId:f,btnSize:i,iconComponent:p,confirmButtonClasses:x,rootRef:v,focusStartRef:b,headerRef:g,inputRef:y,confirmRef:w,doClose:C,handleClose:N,onCloseRequested:()=>{e.closeOnPressEscape&&N()},handleWrapperClick:T,handleInputEnter:B=>{if(u.inputType!=="textarea")return B.preventDefault(),I("confirm")},handleAction:I,t:a}}}),gce=["aria-label","aria-describedby"],yce=["aria-label"],bce=["id"];var Jze=Nt(mce,[["render",function(e,t,n,r,o,i){const a=Qe("el-icon"),l=Qe("close"),s=Qe("el-input"),u=Qe("el-button"),c=Qe("el-focus-trap"),d=Qe("el-overlay");return Y(),Le(ca,{name:"fade-in-linear",onAfterLeave:t[11]||(t[11]=f=>e.$emit("vanish")),persisted:""},{default:he(()=>[nn(ie(d,{"z-index":e.zIndex,"overlay-class":[e.ns.is("message-box"),e.modalClass],mask:e.modal},{default:he(()=>[ce("div",{role:"dialog","aria-label":e.title,"aria-modal":"true","aria-describedby":e.showInput?void 0:e.contentId,class:oe(`${e.ns.namespace.value}-overlay-message-box`),onClick:t[8]||(t[8]=(...f)=>e.overlayEvent.onClick&&e.overlayEvent.onClick(...f)),onMousedown:t[9]||(t[9]=(...f)=>e.overlayEvent.onMousedown&&e.overlayEvent.onMousedown(...f)),onMouseup:t[10]||(t[10]=(...f)=>e.overlayEvent.onMouseup&&e.overlayEvent.onMouseup(...f))},[ie(c,{loop:"",trapped:e.visible,"focus-trap-el":e.rootRef,"focus-start-el":e.focusStartRef,onReleaseRequested:e.onCloseRequested},{default:he(()=>[ce("div",{ref:"rootRef",class:oe([e.ns.b(),e.customClass,e.ns.is("draggable",e.draggable),{[e.ns.m("center")]:e.center}]),style:$t(e.customStyle),tabindex:"-1",onClick:t[7]||(t[7]=Gt(()=>{},["stop"]))},[e.title!==null&&e.title!==void 0?(Y(),fe("div",{key:0,ref:"headerRef",class:oe([e.ns.e("header"),{"show-close":e.showClose}])},[ce("div",{class:oe(e.ns.e("title"))},[e.iconComponent&&e.center?(Y(),Le(a,{key:0,class:oe([e.ns.e("status"),e.typeClass])},{default:he(()=>[(Y(),Le(Hn(e.iconComponent)))]),_:1},8,["class"])):Fe("v-if",!0),ce("span",null,Ye(e.title),1)],2),e.showClose?(Y(),fe("button",{key:0,type:"button",class:oe(e.ns.e("headerbtn")),"aria-label":e.t("el.messagebox.close"),onClick:t[0]||(t[0]=f=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel")),onKeydown:t[1]||(t[1]=Rr(Gt(f=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel"),["prevent"]),["enter"]))},[ie(a,{class:oe(e.ns.e("close"))},{default:he(()=>[ie(l)]),_:1},8,["class"])],42,yce)):Fe("v-if",!0)],2)):Fe("v-if",!0),ce("div",{id:e.contentId,class:oe(e.ns.e("content"))},[ce("div",{class:oe(e.ns.e("container"))},[e.iconComponent&&!e.center&&e.hasMessage?(Y(),Le(a,{key:0,class:oe([e.ns.e("status"),e.typeClass])},{default:he(()=>[(Y(),Le(Hn(e.iconComponent)))]),_:1},8,["class"])):Fe("v-if",!0),e.hasMessage?(Y(),fe("div",{key:1,class:oe(e.ns.e("message"))},[ft(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(Y(),Le(Hn(e.showInput?"label":"p"),{key:1,for:e.showInput?e.inputId:void 0,innerHTML:e.message},null,8,["for","innerHTML"])):(Y(),Le(Hn(e.showInput?"label":"p"),{key:0,for:e.showInput?e.inputId:void 0},{default:he(()=>[Dt(Ye(e.dangerouslyUseHTMLString?"":e.message),1)]),_:1},8,["for"]))])],2)):Fe("v-if",!0)],2),nn(ce("div",{class:oe(e.ns.e("input"))},[ie(s,{id:e.inputId,ref:"inputRef",modelValue:e.inputValue,"onUpdate:modelValue":t[2]||(t[2]=f=>e.inputValue=f),type:e.inputType,placeholder:e.inputPlaceholder,"aria-invalid":e.validateError,class:oe({invalid:e.validateError}),onKeydown:Rr(e.handleInputEnter,["enter"])},null,8,["id","modelValue","type","placeholder","aria-invalid","class","onKeydown"]),ce("div",{class:oe(e.ns.e("errormsg")),style:$t({visibility:e.editorErrorMessage?"visible":"hidden"})},Ye(e.editorErrorMessage),7)],2),[[$n,e.showInput]])],10,bce),ce("div",{class:oe(e.ns.e("btns"))},[e.showCancelButton?(Y(),Le(u,{key:0,loading:e.cancelButtonLoading,class:oe([e.cancelButtonClass]),round:e.roundButton,size:e.btnSize,onClick:t[3]||(t[3]=f=>e.handleAction("cancel")),onKeydown:t[4]||(t[4]=Rr(Gt(f=>e.handleAction("cancel"),["prevent"]),["enter"]))},{default:he(()=>[Dt(Ye(e.cancelButtonText||e.t("el.messagebox.cancel")),1)]),_:1},8,["loading","class","round","size"])):Fe("v-if",!0),nn(ie(u,{ref:"confirmRef",type:"primary",loading:e.confirmButtonLoading,class:oe([e.confirmButtonClasses]),round:e.roundButton,disabled:e.confirmButtonDisabled,size:e.btnSize,onClick:t[5]||(t[5]=f=>e.handleAction("confirm")),onKeydown:t[6]||(t[6]=Rr(Gt(f=>e.handleAction("confirm"),["prevent"]),["enter"]))},{default:he(()=>[Dt(Ye(e.confirmButtonText||e.t("el.messagebox.confirm")),1)]),_:1},8,["loading","class","round","disabled","size"]),[[$n,e.showConfirmButton]])],2)],6)]),_:3},8,["trapped","focus-trap-el","focus-start-el","onReleaseRequested"])],42,gce)]),_:3},8,["z-index","overlay-class","mask"]),[[$n,e.visible]])]),_:3})}],["__file","index.vue"]]);const s4=new Map,Zze=(e,t,n=null)=>{const r=ie(Jze,e,Ut(e.message)||oo(e.message)?{default:Ut(e.message)?e.message:()=>e.message}:null);return r.appContext=n,qs(r,t),(o=>{let i=document.body;return o.appendTo&&(an(o.appendTo)&&(i=document.querySelector(o.appendTo)),$s(o.appendTo)&&(i=o.appendTo),$s(i)||(i=document.body)),i})(e).appendChild(t.firstElementChild),r.component},eHe=(e,t)=>{const n=document.createElement("div");e.onVanish=()=>{qs(null,n),s4.delete(o)},e.onAction=i=>{const a=s4.get(o);let l;l=e.showInput?{value:o.inputValue,action:i}:i,e.callback?e.callback(l,r.proxy):i==="cancel"||i==="close"?e.distinguishCancelAndClose&&i!=="cancel"?a.reject("close"):a.reject("cancel"):a.resolve(l)};const r=Zze(e,n,t),o=r.proxy;for(const i in e)Tn(e,i)&&!Tn(o.$props,i)&&(o[i]=e[i]);return o.visible=!0,o};function gg(e,t=null){if(!rr)return Promise.reject();let n;return an(e)||oo(e)?e={message:e}:n=e.callback,new Promise((r,o)=>{const i=eHe(e,t??gg._context);s4.set(i,{options:e,callback:n,resolve:r,reject:o})})}const tHe={alert:{closeOnPressEscape:!1,closeOnClickModal:!1},confirm:{showCancelButton:!0},prompt:{showCancelButton:!0,showInput:!0}};["alert","confirm","prompt"].forEach(e=>{gg[e]=function(t){return(n,r,o,i)=>{let a="";return wn(r)?(o=r,a=""):a=Wi(r)?"":r,gg(Object.assign({title:a,message:n,type:"",...tHe[t]},o,{boxType:t}),i)}}(e)}),gg.close=()=>{s4.forEach((e,t)=>{t.doClose()}),s4.clear()},gg._context=null;const up=gg;up.install=e=>{up._context=e._context,e.config.globalProperties.$msgbox=up,e.config.globalProperties.$messageBox=up,e.config.globalProperties.$alert=up.alert,e.config.globalProperties.$confirm=up.confirm,e.config.globalProperties.$prompt=up.prompt};let HR,Ace,wce,xce,_ce,Ece,Cce,Sce;gc=up,HR=["success","info","warning","error"],Ace=Pt({customClass:{type:String,default:""},dangerouslyUseHTMLString:{type:Boolean,default:!1},duration:{type:Number,default:4500},icon:{type:fi},id:{type:String,default:""},message:{type:[String,Object],default:""},offset:{type:Number,default:0},onClick:{type:Function,default:()=>{}},onClose:{type:Function,required:!0},position:{type:String,values:["top-right","top-left","bottom-right","bottom-left"],default:"top-right"},showClose:{type:Boolean,default:!0},title:{type:String,default:""},type:{type:String,values:[...HR,""],default:""},zIndex:Number}),wce=["id"],xce=["textContent"],_ce={key:0},Ece=["innerHTML"],Cce=Te({name:"ElNotification"}),Sce=Te({...Cce,props:Ace,emits:{destroy:()=>!0},setup(e,{expose:t}){const n=e,{ns:r,zIndex:o}=C9("notification"),{nextZIndex:i,currentZIndex:a}=o,{Close:l}=$N,s=de(!1);let u;const c=ee(()=>{const y=n.type;return y&&Vd[n.type]?r.m(y):""}),d=ee(()=>n.type&&Vd[n.type]||n.icon),f=ee(()=>n.position.endsWith("right")?"right":"left"),p=ee(()=>n.position.startsWith("top")?"top":"bottom"),m=ee(()=>{var y;return{[p.value]:`${n.offset}px`,zIndex:(y=n.zIndex)!=null?y:a.value}});function v(){n.duration>0&&({stop:u}=Ib(()=>{s.value&&b()},n.duration))}function g(){u==null||u()}function b(){s.value=!1}return yn(()=>{v(),i(),s.value=!0}),Yo(document,"keydown",function({code:y}){y===Xt.delete||y===Xt.backspace?g():y===Xt.esc?s.value&&b():v()}),t({visible:s,close:b}),(y,w)=>(Y(),Le(ca,{name:M(r).b("fade"),onBeforeLeave:y.onClose,onAfterLeave:w[1]||(w[1]=x=>y.$emit("destroy")),persisted:""},{default:he(()=>[nn(ce("div",{id:y.id,class:oe([M(r).b(),y.customClass,M(f)]),style:$t(M(m)),role:"alert",onMouseenter:g,onMouseleave:v,onClick:w[0]||(w[0]=(...x)=>y.onClick&&y.onClick(...x))},[M(d)?(Y(),Le(M(Ft),{key:0,class:oe([M(r).e("icon"),M(c)])},{default:he(()=>[(Y(),Le(Hn(M(d))))]),_:1},8,["class"])):Fe("v-if",!0),ce("div",{class:oe(M(r).e("group"))},[ce("h2",{class:oe(M(r).e("title")),textContent:Ye(y.title)},null,10,xce),nn(ce("div",{class:oe(M(r).e("content")),style:$t(y.title?void 0:{margin:0})},[ft(y.$slots,"default",{},()=>[y.dangerouslyUseHTMLString?(Y(),fe(bt,{key:1},[Fe(" Caution here, message could've been compromised, never use user's input as message "),ce("p",{innerHTML:y.message},null,8,Ece)],2112)):(Y(),fe("p",_ce,Ye(y.message),1))])],6),[[$n,y.message]]),y.showClose?(Y(),Le(M(Ft),{key:0,class:oe(M(r).e("closeBtn")),onClick:Gt(b,["stop"])},{default:he(()=>[ie(M(l))]),_:1},8,["class","onClick"])):Fe("v-if",!0)],2)],46,wce),[[$n,s.value]])]),_:3},8,["name","onBeforeLeave"]))}});var nHe=Nt(Sce,[["__file","notification.vue"]]);const hx={"top-left":[],"top-right":[],"bottom-left":[],"bottom-right":[]};let rHe=1;const yg=function(e={},t=null){if(!rr)return{close:()=>{}};(typeof e=="string"||oo(e))&&(e={message:e});const n=e.position||"top-right";let r=e.offset||0;hx[n].forEach(({vm:c})=>{var d;r+=(((d=c.el)==null?void 0:d.offsetHeight)||0)+16}),r+=16;const o="notification_"+rHe++,i=e.onClose,a={...e,offset:r,id:o,onClose:()=>{(function(c,d,f){const p=hx[d],m=p.findIndex(({vm:w})=>{var x;return((x=w.component)==null?void 0:x.props.id)===c});if(m===-1)return;const{vm:v}=p[m];if(!v)return;f==null||f(v);const g=v.el.offsetHeight,b=d.split("-")[0];p.splice(m,1);const y=p.length;if(!(y<1))for(let w=m;w<y;w++){const{el:x,component:_}=p[w].vm,E=Number.parseInt(x.style[b],10)-g-16;_.props.offset=E}})(o,n,i)}};let l=document.body;$s(e.appendTo)?l=e.appendTo:an(e.appendTo)&&(l=document.querySelector(e.appendTo)),$s(l)||(l=document.body);const s=document.createElement("div"),u=ie(nHe,a,oo(a.message)?{default:()=>a.message}:null);return u.appContext=t??yg._context,u.props.onDestroy=()=>{qs(null,s)},qs(u,s),hx[n].push({vm:u}),l.appendChild(s.firstElementChild),{close:()=>{u.component.exposed.visible.value=!1}}};HR.forEach(e=>{yg[e]=(t={})=>((typeof t=="string"||oo(t))&&(t={message:t}),yg({...t,type:e}))}),yg.closeAll=function(){for(const e of Object.values(hx))e.forEach(({vm:t})=>{t.component.exposed.visible.value=!1})},yg._context=null;const $d=UN(yg,"$notify");function kce(e){return Object.prototype.toString.call(e)==="[object Object]"}function u4(){return u4=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},u4.apply(this,arguments)}function Dce(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}const oHe={silent:!1,logLevel:"warn"},iHe=["validator"],Oce=Object.prototype,Tce=Oce.toString,aHe=Oce.hasOwnProperty,Mce=/^\s*function (\w+)/;function Nce(e){var t;const n=(t=e==null?void 0:e.type)!==null&&t!==void 0?t:e;if(n){const r=n.toString().match(Mce);return r?r[1]:""}return""}const u1=function(e){var t,n;return kce(e)!==!1&&((t=e.constructor)===void 0||kce(n=t.prototype)!==!1&&n.hasOwnProperty("isPrototypeOf")!==!1)};let vi=function(){};const bg=(e,t)=>aHe.call(e,t),lHe=Number.isInteger||function(e){return typeof e=="number"&&isFinite(e)&&Math.floor(e)===e},Ag=Array.isArray||function(e){return Tce.call(e)==="[object Array]"},wg=e=>Tce.call(e)==="[object Function]",vx=(e,t)=>u1(e)&&bg(e,"_vueTypes_name")&&(!t||e._vueTypes_name===t),Fce=e=>u1(e)&&(bg(e,"type")||["_vueTypes_name","validator","default","required"].some(t=>bg(e,t)));function $R(e,t){return Object.defineProperty(e.bind(t),"__original",{value:e})}function c1(e,t,n=!1){let r,o=!0,i="";r=u1(e)?e:{type:e};const a=vx(r)?r._vueTypes_name+" - ":"";if(Fce(r)&&r.type!==null){if(r.type===void 0||r.type===!0||!r.required&&t==null)return o;Ag(r.type)?(o=r.type.some(l=>c1(l,t,!0)===!0),i=r.type.map(l=>Nce(l)).join(" or ")):(i=Nce(r),o=i==="Array"?Ag(t):i==="Object"?u1(t):i==="String"||i==="Number"||i==="Boolean"||i==="Function"?function(l){if(l==null)return"";const s=l.constructor.toString().match(Mce);return s?s[1].replace(/^Async/,""):""}(t)===i:t instanceof r.type)}if(!o){const l=`${a}value "${t}" should be of type "${i}"`;return n===!1?(vi(l),!1):l}if(bg(r,"validator")&&wg(r.validator)){const l=vi,s=[];if(vi=u=>{s.push(u)},o=r.validator(t),vi=l,!o){const u=(s.length>1?"* ":"")+s.join(`
| * `);return s.length=0,n===!1?(vi(u),o):u}}return o}function vs(e,t){const n=Object.defineProperties(t,{_vueTypes_name:{value:e,writable:!0},isRequired:{get(){return this.required=!0,this}},def:{value(o){return o===void 0?this.type===Boolean||Array.isArray(this.type)&&this.type.includes(Boolean)?void(this.default=void 0):(bg(this,"default")&&delete this.default,this):wg(o)||c1(this,o,!0)===!0?(this.default=Ag(o)?()=>[...o]:u1(o)?()=>Object.assign({},o):o,this):(vi(`${this._vueTypes_name} - invalid default value: "${o}"`),this)}}}),{validator:r}=n;return wg(r)&&(n.validator=$R(r,n)),n}function Lu(e,t){const n=vs(e,t);return Object.defineProperty(n,"validate",{value(r){return wg(this.validator)&&vi(`${this._vueTypes_name} - calling .validate() will overwrite the current custom validator function. Validator info:
| ${JSON.stringify(this)}`),this.validator=$R(r,this),this}})}function Rce(e,t,n){const r=function(s){const u={};return Object.getOwnPropertyNames(s).forEach(c=>{u[c]=Object.getOwnPropertyDescriptor(s,c)}),Object.defineProperties({},u)}(t);if(r._vueTypes_name=e,!u1(n))return r;const{validator:o}=n,i=Dce(n,iHe);if(wg(o)){let{validator:s}=r;s&&(s=(l=(a=s).__original)!==null&&l!==void 0?l:a),r.validator=$R(s?function(u){return s.call(this,u)&&o.call(this,u)}:o,r)}var a,l;return Object.assign(r,i)}function mx(e){return e.replace(/^(?!\s*$)/gm," ")}const Ice=()=>Lu("boolean",{type:Boolean});function sHe(e,t="custom validation failed"){if(typeof e!="function")throw new TypeError("[VueTypes error]: You must provide a function as argument");return vs(e.name||"<<anonymous function>>",{type:null,validator(n){const r=e(n);return r||vi(`${this._vueTypes_name} - ${t}`),r}})}function uHe(e){if(!Ag(e))throw new TypeError("[VueTypes error]: You must provide an array as argument.");const t=`oneOf - value should be one of "${e.map(r=>typeof r=="symbol"?r.toString():r).join('", "')}".`,n={validator(r){const o=e.indexOf(r)!==-1;return o||vi(t),o}};if(e.indexOf(null)===-1){const r=e.reduce((o,i)=>{if(i!=null){const a=i.constructor;o.indexOf(a)===-1&&o.push(a)}return o},[]);r.length>0&&(n.type=r)}return vs("oneOf",n)}function cHe(e){if(!Ag(e))throw new TypeError("[VueTypes error]: You must provide an array as argument");let t=!1,n=!1,r=[];for(let i=0;i<e.length;i+=1){const a=e[i];if(Fce(a)){if(wg(a.validator)&&(t=!0),vx(a,"oneOf")&&a.type){r=r.concat(a.type);continue}if(vx(a,"nullable")){n=!0;continue}if(a.type===!0||!a.type){vi('oneOfType - invalid usage of "true" and "null" as types.');continue}r=r.concat(a.type)}else r.push(a)}r=r.filter((i,a)=>r.indexOf(i)===a);const o=n===!1&&r.length>0?r:null;return vs("oneOfType",t?{type:o,validator(i){const a=[],l=e.some(s=>{const u=c1(s,i,!0);return typeof u=="string"&&a.push(u),u===!0});return l||vi(`oneOfType - provided value does not match any of the ${a.length} passed-in validators:
| ${mx(a.join(`
| `))}`),l}}:{type:o})}function dHe(e){return vs("arrayOf",{type:Array,validator(t){let n="";const r=t.every(o=>(n=c1(e,o,!0),n===!0));return r||vi(`arrayOf - value validation error:
| ${mx(n)}`),r}})}function fHe(e){return vs("instanceOf",{type:e})}function pHe(e){return vs("objectOf",{type:Object,validator(t){let n="";const r=Object.keys(t).every(o=>(n=c1(e,t[o],!0),n===!0));return r||vi(`objectOf - value validation error:
| ${mx(n)}`),r}})}function hHe(e){const t=Object.keys(e),n=t.filter(o=>{var i;return!((i=e[o])===null||i===void 0||!i.required)}),r=vs("shape",{type:Object,validator(o){if(!u1(o))return!1;const i=Object.keys(o);if(n.length>0&&n.some(a=>i.indexOf(a)===-1)){const a=n.filter(l=>i.indexOf(l)===-1);return vi(a.length===1?`shape - required property "${a[0]}" is not defined.`:`shape - required properties "${a.join('", "')}" are not defined.`),!1}return i.every(a=>{if(t.indexOf(a)===-1)return this._vueTypes_isLoose===!0||(vi(`shape - shape definition does not include a "${a}" property. Allowed keys: "${t.join('", "')}".`),!1);const l=c1(e[a],o[a],!0);return typeof l=="string"&&vi(`shape - "${a}" property validation error:
| ${mx(l)}`),l===!0})}});return Object.defineProperty(r,"_vueTypes_isLoose",{writable:!0,value:!1}),Object.defineProperty(r,"loose",{get(){return this._vueTypes_isLoose=!0,this}}),r}const vHe=["name","validate","getter"],mHe=(e=>((e=class{static get any(){return Lu("any",{})}static get func(){return Lu("function",{type:Function}).def(this.defaults.func)}static get bool(){return this.defaults.bool===void 0?Ice():Ice().def(this.defaults.bool)}static get string(){return Lu("string",{type:String}).def(this.defaults.string)}static get number(){return Lu("number",{type:Number}).def(this.defaults.number)}static get array(){return Lu("array",{type:Array}).def(this.defaults.array)}static get object(){return Lu("object",{type:Object}).def(this.defaults.object)}static get integer(){return vs("integer",{type:Number,validator(t){const n=lHe(t);return n===!1&&vi(`integer - "${t}" is not an integer`),n}}).def(this.defaults.integer)}static get symbol(){return vs("symbol",{validator(t){const n=typeof t=="symbol";return n===!1&&vi(`symbol - invalid value "${t}"`),n}})}static get nullable(){return Object.defineProperty({type:null,validator(t){const n=t===null;return n===!1&&vi("nullable - value should be null"),n}},"_vueTypes_name",{value:"nullable"})}static extend(t){if(vi("VueTypes.extend is deprecated. Use the ES6+ method instead. See https://dwightjack.github.io/vue-types/advanced/extending-vue-types.html#extending-namespaced-validators-in-es6 for details."),Ag(t))return t.forEach(s=>this.extend(s)),this;const{name:n,validate:r=!1,getter:o=!1}=t,i=Dce(t,vHe);if(bg(this,n))throw new TypeError(`[VueTypes error]: Type "${n}" already defined`);const{type:a}=i;if(vx(a))return delete i.type,Object.defineProperty(this,n,o?{get:()=>Rce(n,a,i)}:{value(...s){const u=Rce(n,a,i);return u.validator&&(u.validator=u.validator.bind(u,...s)),u}});let l;return l=o?{get(){const s=Object.assign({},i);return r?Lu(n,s):vs(n,s)},enumerable:!0}:{value(...s){const u=Object.assign({},i);let c;return c=r?Lu(n,u):vs(n,u),u.validator&&(c.validator=u.validator.bind(c,...s)),c},enumerable:!0},Object.defineProperty(this,n,l)}}).defaults={},e.sensibleDefaults=void 0,e.config=oHe,e.custom=sHe,e.oneOf=uHe,e.instanceOf=fHe,e.oneOfType=cHe,e.arrayOf=dHe,e.objectOf=pHe,e.shape=hHe,e.utils={validate:(t,n)=>c1(n,t,!0)===!0,toType:(t,n,r=!1)=>r?Lu(t,n):vs(t,n)},e))();function Bce(e={func:()=>{},bool:!0,string:"",number:0,array:()=>[],object:()=>({}),integer:0}){var t;return(t=class extends mHe{static get sensibleDefaults(){return u4({},this.defaults)}static set sensibleDefaults(n){this.defaults=n!==!1?u4({},n!==!0?n:e):{}}}).defaults=u4({},e),t}Bce();const gHe=Bce({func:void 0,bool:void 0,string:void 0,number:void 0,object:void 0,integer:void 0});Xn=class extends gHe{static get style(){return Lu("style",{type:[String,Object]})}};let Pce,Lce,jce,Vce,zce;Pce={namespace:"v",elNamespace:"el"},Dw=()=>{const e=Pce;return{variables:e,getPrefixCls:t=>`${e.namespace}-${t}`}},Lce=["xlink:href"],jce=["data-icon"],mm=Te({name:"Icon",__name:"Icon",props:{icon:Xn.string,color:Xn.string,size:Xn.number.def(16),svgClass:Xn.string.def("")},setup(e){const{getPrefixCls:t}=Dw(),n=t("icon"),r=e,o=de(null),i=ee(()=>{var u;return(u=r.icon)==null?void 0:u.startsWith("svg-icon:")}),a=ee(()=>M(i)?`#icon-${r.icon.split("svg-icon:")[1]}`:r.icon),l=ee(()=>{const{color:u,size:c}=r;return{fontSize:`${c}px`,height:"1em",color:u}}),s=ee(()=>{const{svgClass:u}=r;return`iconify ${u}`});return Je(()=>r.icon,u=>{(async c=>{if(M(i))return;const d=M(o);if(!d||(await St(),!c))return;const f=XJ.renderSVG(c,{});if(f)d.textContent="",d.appendChild(f);else{const p=document.createElement("span");p.className="iconify",p.dataset.icon=c,d.textContent="",d.appendChild(p)}})(u)}),(u,c)=>{const d=Ft;return Y(),Le(d,{class:oe(M(n)),color:e.color,size:e.size},{default:he(()=>[M(i)?(Y(),fe("svg",{key:0,class:oe(M(s)),"aria-hidden":"true"},[ce("use",{"xlink:href":M(a)},null,8,Lce)],2)):(Y(),fe("span",{key:1,ref_key:"elRef",ref:o,class:oe(u.$attrs.class),style:$t(M(l))},[ce("span",{class:oe(M(s)),"data-icon":M(a)},null,10,jce)],6))]),_:1},8,["class","color","size"])}}}),Ew=(e,t)=>{const n=e.__vccOpts||e;for(const[r,o]of t)n[r]=o;return n},Vce=[gQ],zce=[wd,Sa];function Hce(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function hn(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Hce(Object(n),!0).forEach(function(r){Xi(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Hce(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function ga(e){return ga=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ga(e)}function Xi(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gx(e){return gx=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},gx(e)}function UR(e,t){return UR=Object.setPrototypeOf||function(n,r){return n.__proto__=r,n},UR(e,t)}function yHe(e,t){if(t&&(typeof t=="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return function(n){if(n===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return n}(e)}function bHe(e){var t=function(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var n,r=gx(e);if(t){var o=gx(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return yHe(this,n)}}function xr(e){return function(t){if(Array.isArray(t))return WR(t)}(e)||function(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}(e)||function(t,n){if(t){if(typeof t=="string")return WR(t,n);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return WR(t,n)}}(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
| In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function WR(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function yx(e,t){return Object.keys(e).reduce(function(n,r){return t&&t.indexOf(r)!==-1||n.push(e[r]),n},[])}function Fl(e){return Array.isArray(e)?e:[null,void 0,""].indexOf(e)>-1?[]:[e]}var AHe=Te({name:"fcCheckbox",inheritAttrs:!1,props:{formCreateInject:Object,modelValue:{type:Array,default:function(){return[]}},type:String,input:Boolean,inputValue:String},emits:["update:modelValue","fc.el"],setup:function(e,t){var n=dr(e.formCreateInject,"options",[]),r=dr(e,"modelValue"),o=dr(e,"inputValue",""),i=de(o.value),a=dr(e,"input",!1),l=function(u){var c=xr(Fl(r.value)),d=c.indexOf(i.value);i.value=u,d>-1&&(c.splice(d,1),c.push(u),s(c))};Je(o,function(u){a.value?l(u):i.value=u});var s=function(u){t.emit("update:modelValue",u)};return{options:function(){return Array.isArray(n.value)?n.value:[]},value:r,onInput:s,updateCustomValue:l,makeInput:function(u){if(a.value)return ie(u,{value:i.value||void 0,label:i.value||void 0},{default:function(){return[ie(Qe("ElInput"),{size:"small",modelValue:i.value,"onUpdate:modelValue":l},null)]}})}}},render:function(){var e,t,n=this,r=this.type==="button"?"ElCheckboxButton":"ElCheckbox",o=Qe(r);return ie(Qe("ElCheckboxGroup"),Un(this.$attrs,{modelValue:this.value,"onUpdate:modelValue":this.onInput,ref:"el"}),hn({default:function(){return[n.options().map(function(i,a){var l=hn({},i),s=l.value,u=l.label;return delete l.value,delete l.label,ie(o,Un(l,{label:s,value:s,key:r+a+"-"+s}),{default:function(){return[u||s||""]}})}),(e=(t=n.$slots).default)===null||e===void 0?void 0:e.call(t),n.makeInput(o)]}},yx(this.$slots,["default"])))},mounted:function(){this.$emit("fc.el",this.$refs.el)}});function $ce(e){e=e||new Map;var t={$on:function(n,r){var o=e.get(n);o&&o.push(r)||e.set(n,[r])},$once:function(n,r){r._once=!0,t.$on(n,r)},$off:function(n,r){var o=e.get(n);o&&o.splice(o.indexOf(r)>>>0,1)},$emit:function(n){for(var r=arguments.length,o=new Array(r>1?r-1:0),i=1;i<r;i++)o[i-1]=arguments[i];(e.get(n)||[]).slice().map(function(a){a._once&&(t.$off(n,a),delete a._once),a.apply(void 0,o)}),(e.get("*")||[]).slice().map(function(a){a(n,o)})}};return t}function bx(e,t){t===void 0&&(t={});var n=t.insertAt;if(e&&typeof document<"u"){var r=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",n==="top"&&r.firstChild?r.insertBefore(o,r.firstChild):r.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}bx("._fc-frame ._fc-files img{display:inline-block;height:100%;vertical-align:top;width:100%}._fc-frame ._fc-upload-btn{border:1px dashed #c0ccda;cursor:pointer}._fc-frame._fc-disabled ._fc-upload-btn,._fc-frame._fc-disabled .el-button{color:#999;cursor:not-allowed!important}._fc-frame ._fc-upload-cover{background:rgba(0,0,0,.6);bottom:0;left:0;opacity:0;position:absolute;right:0;top:0;-webkit-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}._fc-frame ._fc-upload-cover i{color:#fff;cursor:pointer;font-size:20px;margin:0 2px}._fc-frame ._fc-files:hover ._fc-upload-cover{opacity:1}._fc-frame .el-upload{display:block}._fc-frame ._fc-upload-icon{cursor:pointer}._fc-files,._fc-frame ._fc-upload-btn{background:#fff;border:1px solid #c0ccda;border-radius:4px;-webkit-box-shadow:2px 2px 5px rgba(0,0,0,.1);box-shadow:2px 2px 5px rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;height:58px;line-height:58px;margin-right:4px;overflow:hidden;position:relative;text-align:center;width:58px}");var Uce={name:"IconCircleClose"},wHe={class:"icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},xHe=[ce("path",{fill:"currentColor",d:"M466.752 512l-90.496-90.496a32 32 0 0145.248-45.248L512 466.752l90.496-90.496a32 32 0 1145.248 45.248L557.248 512l90.496 90.496a32 32 0 11-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 01-45.248-45.248L466.752 512z"},null,-1),ce("path",{fill:"currentColor",d:"M512 896a384 384 0 100-768 384 384 0 000 768zm0 64a448 448 0 110-896 448 448 0 010 896z"},null,-1)];Uce.render=function(e,t,n,r,o,i){return Y(),fe("svg",wHe,xHe)};var Wce={name:"IconDocument"},_He={class:"icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},EHe=[ce("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640V384zm-26.496-64L640 154.496V320h165.504zM160 64h480l256 256v608a32 32 0 01-32 32H160a32 32 0 01-32-32V96a32 32 0 0132-32zm160 448h384v64H320v-64zm0-192h160v64H320v-64zm0 384h384v64H320v-64z"},null,-1)];Wce.render=function(e,t,n,r,o,i){return Y(),fe("svg",_He,EHe)};var Gce={name:"IconDelete"},CHe={class:"icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},SHe=[ce("path",{fill:"currentColor",d:"M160 256H96a32 32 0 010-64h256V95.936a32 32 0 0132-32h256a32 32 0 0132 32V192h256a32 32 0 110 64h-64v672a32 32 0 01-32 32H192a32 32 0 01-32-32V256zm448-64v-64H416v64h192zM224 896h576V256H224v640zm192-128a32 32 0 01-32-32V416a32 32 0 0164 0v320a32 32 0 01-32 32zm192 0a32 32 0 01-32-32V416a32 32 0 0164 0v320a32 32 0 01-32 32z"},null,-1)];Gce.render=function(e,t,n,r,o,i){return Y(),fe("svg",CHe,SHe)};var qce={name:"IconView"},kHe={class:"icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},DHe=[ce("path",{fill:"currentColor",d:"M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352zm0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 110 448 224 224 0 010-448zm0 64a160.192 160.192 0 00-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160z"},null,-1)];qce.render=function(e,t,n,r,o,i){return Y(),fe("svg",kHe,DHe)};var Kce={name:"IconFolderOpened"},OHe={class:"icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},THe=[ce("path",{fill:"currentColor",d:"M878.08 448H241.92l-96 384h636.16l96-384zM832 384v-64H485.76L357.504 192H128v448l57.92-231.744A32 32 0 01216.96 384H832zm-24.96 512H96a32 32 0 01-32-32V160a32 32 0 0132-32h287.872l128.384 128H864a32 32 0 0132 32v96h23.04a32 32 0 0131.04 39.744l-112 448A32 32 0 01807.04 896z"},null,-1)];function Yce(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!oo(e)}Kce.render=function(e,t,n,r,o,i){return Y(),fe("svg",OHe,THe)};var MHe=Te({name:"fcFrame",props:{type:{type:String,default:"input"},field:String,helper:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},src:{type:String,required:!0},icon:{type:String,default:"IconFolderOpened"},width:{type:String,default:"500px"},height:{type:String,default:"370px"},maxLength:{type:Number,default:0},okBtnText:{type:String,default:"\u786E\u5B9A"},closeBtnText:{type:String,default:"\u5173\u95ED"},modalTitle:String,handleIcon:{type:[String,Boolean],default:void 0},title:String,allowRemove:{type:Boolean,default:!0},onOpen:{type:Function,default:function(){}},onOk:{type:Function,default:function(){}},onCancel:{type:Function,default:function(){}},onLoad:{type:Function,default:function(){}},onBeforeRemove:{type:Function,default:function(){}},onRemove:{type:Function,default:function(){}},onHandle:Function,modal:{type:Object,default:function(){return{}}},srcKey:[String,Number],modelValue:[Array,String,Number,Object],previewMask:void 0,footer:{type:Boolean,default:!0},reload:{type:Boolean,default:!0},closeBtn:{type:Boolean,default:!0},okBtn:{type:Boolean,default:!0},formCreateInject:Object},emits:["update:modelValue","change"],components:{IconFolderOpened:Kce,IconView:qce},data:function(){return{fileList:Fl(this.modelValue),previewVisible:!1,frameVisible:!1,previewImage:"",bus:new $ce}},watch:{modelValue:function(e){this.fileList=Fl(e)}},methods:{close:function(){this.closeModel(!0)},closeModel:function(e){this.bus.$emit(e?"$close":"$ok"),this.reload&&(this.bus.$off("$ok"),this.bus.$off("$close")),this.frameVisible=!1},handleCancel:function(){this.previewVisible=!1},showModel:function(){this.disabled||this.onOpen()===!1||(this.frameVisible=!0)},input:function(){var e=this.fileList,t=this.maxLength===1?e[0]||"":e;this.$emit("update:modelValue",t),this.$emit("change",t)},makeInput:function(){var e=this;return ie(Qe("ElInput"),Un({type:"text",modelValue:this.fileList.map(function(t){return e.getSrc(t)}).toString(),readonly:!0},{key:1}),{append:function(){return ie(Qe("ElButton"),{icon:Qe(e.icon),onClick:function(){return e.showModel()}},null)},suffix:function(){return e.fileList.length&&!e.disabled?ie(Qe("ElIcon"),{class:"el-input__icon _fc-upload-icon",onClick:function(){e.fileList=[],e.input()}},{default:function(){return[ie(Uce,null,null)]}}):null}})},makeGroup:function(e){return(!this.maxLength||this.fileList.length<this.maxLength)&&e.push(this.makeBtn()),ie("div",{key:2},[e])},makeItem:function(e,t){return ie("div",{class:"_fc-files",key:"3"+e},[t])},valid:function(e){var t=this.formCreateInject.field||this.field;if(t&&e!==t)throw new Error("[frame]\u65E0\u6548\u7684\u5B57\u6BB5\u503C")},makeIcons:function(e,t){if(this.handleIcon!==!1||this.allowRemove===!0){var n=[];return(this.type!=="file"&&this.handleIcon!==!1||this.type==="file"&&this.handleIcon)&&n.push(this.makeHandleIcon(e,t)),this.allowRemove&&n.push(this.makeRemoveIcon(e,t)),ie("div",{class:"_fc-upload-cover",key:4},[n])}},makeHandleIcon:function(e,t){var n=this,r=Qe(this.handleIcon===!0||this.handleIcon===void 0?"icon-view":this.handleIcon);return ie(Qe("ElIcon"),{onClick:function(){return n.handleClick(e)},key:"5"+t},{default:function(){return[ie(r,null,null)]}})},makeRemoveIcon:function(e,t){var n=this;return ie(Qe("ElIcon"),{onClick:function(){return n.handleRemove(e)},key:"6"+t},{default:function(){return[ie(Gce,null,null)]}})},makeFiles:function(){var e=this;return this.makeGroup(this.fileList.map(function(t,n){return e.makeItem(n,[ie(Qe("ElIcon"),{onClick:function(){return e.handleClick(t)}},{default:function(){return[ie(Wce,null,null)]}}),e.makeIcons(t,n)])}))},makeImages:function(){var e=this;return this.makeGroup(this.fileList.map(function(t,n){return e.makeItem(n,[ie("img",{src:e.getSrc(t)},null),e.makeIcons(t,n)])}))},makeBtn:function(){var e=this,t=Qe(this.icon);return ie("div",{class:"_fc-upload-btn",onClick:function(){return e.showModel()},key:7},[ie(Qe("ElIcon"),null,{default:function(){return[ie(t,null,null)]}})])},handleClick:function(e){if(this.onHandle)return this.onHandle(e);this.previewImage=this.getSrc(e),this.previewVisible=!0},handleRemove:function(e){this.disabled||this.onBeforeRemove(e)!==!1&&(this.fileList.splice(this.fileList.indexOf(e),1),this.input(),this.onRemove(e))},getSrc:function(e){return this.srcKey?e[this.srcKey]:e},frameLoad:function(e){var t=this;this.onLoad(e);try{this.helper===!0&&(e.form_create_helper={api:this.formCreateInject.api,close:function(n){t.valid(n),t.closeModel()},set:function(n,r){t.valid(n),!t.disabled&&t.$emit("update:modelValue",r)},get:function(n){return t.valid(n),t.modelValue},onOk:function(n){return t.bus.$on("$ok",n)},onClose:function(n){return t.bus.$on("$close",n)}})}catch(n){console.error(n)}},makeFooter:function(){var e=this,t=this.$props,n=t.okBtnText,r=t.closeBtnText,o=t.closeBtn,i=t.okBtn;if(t.footer)return ie("div",null,[o?ie(Qe("ElButton"),{onClick:function(){return e.onCancel()!==!1&&(e.frameVisible=!1)}},Yce(r)?r:{default:function(){return[r]}}):null,i?ie(Qe("ElButton"),{type:"primary",onClick:function(){return e.onOk()!==!1&&e.closeModel()}},Yce(n)?n:{default:function(){return[n]}}):null])}},render:function(){var e,t=this,n=this.type;e=n==="input"?this.makeInput():n==="image"?this.makeImages():this.makeFiles();var r=this.$props,o=r.width,i=o===void 0?"30%":o,a=r.height,l=r.src,s=r.title,u=r.modalTitle;return St(function(){t.$refs.frame&&t.frameLoad(t.$refs.frame.contentWindow||{})}),ie("div",{class:{"_fc-frame":!0,"_fc-disabled":this.disabled}},[e,ie(Qe("ElDialog"),{appendToBody:!0,modal:this.previewMask,title:u,modelValue:this.previewVisible,onClose:this.handleCancel},{default:function(){return[ie("img",{style:"width: 100%",src:t.previewImage},null)]}}),ie(Qe("ElDialog"),Un({appendToBody:!0},hn({width:i,title:s},this.modal),{modelValue:this.frameVisible,onClose:function(){return t.closeModel(!0)}}),{default:function(){return[t.frameVisible||!t.reload?ie("iframe",{ref:"frame",src:l,frameBorder:"0",style:{height:a,border:"0 none",width:"100%"}},null):null]},footer:function(){return t.makeFooter()}})])},beforeMount:function(){var e=this.formCreateInject,t=e.name,n=e.field,r=e.api;t&&r.on("fc:closeModal:"+t,this.close),n&&r.on("fc:closeModal:"+n,this.close)},beforeUnmount:function(){var e=this.formCreateInject,t=e.name,n=e.field,r=e.api;t&&r.off("fc:closeModal:"+t,this.close),n&&r.off("fc:closeModal:"+n,this.close)}}),NHe=Te({name:"fcRadio",inheritAttrs:!1,props:{formCreateInject:Object,modelValue:{type:[String,Number,Boolean],default:""},type:String,input:Boolean,inputValue:String},emits:["update:modelValue","fc.el"],setup:function(e,t){var n=dr(e.formCreateInject,"options",[]),r=dr(e,"modelValue"),o=dr(e,"inputValue",""),i=de(o.value),a=dr(e,"input",!1);Je(o,function(u){a.value?s(u):i.value=u});var l=function(u){t.emit("update:modelValue",u)},s=function(u){var c=i.value;i.value=u,r.value===c&&l(u)};return{options:function(){return Array.isArray(n.value)?n.value:[]},value:r,onInput:l,updateCustomValue:s,customValue:i,makeInput:function(u){if(a.value)return ie(u,{checked:!1,value:i.value||void 0,label:i.value||void 0},{default:function(){return[ie(Qe("ElInput"),{size:"small",modelValue:i.value,"onUpdate:modelValue":s},null)]}})}}},render:function(){var e,t,n=this,r=this.type==="button"?"ElRadioButton":"ElRadio",o=Qe(r);return ie(Qe("ElRadioGroup"),Un(this.$attrs,{modelValue:this.value,"onUpdate:modelValue":this.onInput,ref:"el"}),hn({default:function(){return[n.options().map(function(i,a){var l=hn({},i),s=l.value,u=l.label;return delete l.value,delete l.label,ie(o,Un(l,{label:s,value:s,key:r+a+"-"+s}),{default:function(){return[u||s||""]}})}),(e=(t=n.$slots).default)===null||e===void 0?void 0:e.call(t),n.makeInput(o)]}},yx(this.$slots,["default"])))},mounted:function(){this.$emit("fc.el",this.$refs.el)}}),Bt={type:function(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"},Undef:function(e){return e==null},Element:function(e){return ga(e)==="object"&&e!==null&&e.nodeType===1&&!Bt.Object(e)},trueArray:function(e){return Array.isArray(e)&&e.length>0},Function:function(e){var t=this.getType(e);return t==="Function"||t==="AsyncFunction"},getType:function(e){var t=Object.prototype.toString.call(e);return/^\[object (.*)\]$/.exec(t)[1]},empty:function(e){return e==null||!(!Array.isArray(e)||!Array.isArray(e)||e.length)||typeof e=="string"&&!e}};function Jo(e,t){return{}.hasOwnProperty.call(e,t)}["Date","Object","String","Boolean","Array","Number"].forEach(function(e){Bt[e]=function(t){return Bt.type(t,e)}});var FHe=Te({name:"fcSelect",inheritAttrs:!1,props:{formCreateInject:Object,modelValue:{type:[Array,String,Number,Boolean,Object],default:void 0},type:String},emits:["update:modelValue","fc.el"],setup:function(e){var t=dr(e.formCreateInject,"options",[]);return{options:function(){return Array.isArray(t.value)?t.value:[]},value:dr(e,"modelValue")}},render:function(){var e,t,n=this,r=function(i,a){return ie(Qe("ElOption"),Un(i,{key:a+"-"+i.value}),null)},o=this.options();return ie(Qe("ElSelect"),Un(this.$attrs,{modelValue:this.value,"onUpdate:modelValue":function(i){return n.$emit("update:modelValue",i)},ref:"el"}),hn({default:function(){return[o.map(function(i,a){return Jo(i||"","options")?function(l,s){return ie(Qe("ElOptionGroup"),{label:l.label,key:s+"-"+l.label},{default:function(){return[Bt.trueArray(l.options)&&l.options.map(function(u,c){return r(u,c)})]}})}(i,a):r(i,a)}),(e=(t=n.$slots).default)===null||e===void 0?void 0:e.call(t)]}},yx(this.$slots,["default"])))},mounted:function(){this.$emit("fc.el",this.$refs.el)}}),RHe=Te({name:"fcTree",inheritAttrs:!1,formCreateParser:{mergeProp:function(e){var t=e.prop.props;t.nodeKey||(t.nodeKey="id"),t.props||(t.props={label:"title"})}},props:{type:String,modelValue:{type:[Array,String,Number],default:function(){return[]}}},emits:["update:modelValue","fc.el"],watch:{modelValue:function(){this.setValue()}},methods:{updateValue:function(){var e;this.$refs.tree&&(e=this.type==="selected"?this.$refs.tree.getCurrentKey():this.$refs.tree.getCheckedKeys(),this.$emit("update:modelValue",e))},setValue:function(){this.$refs.tree&&(this.type==="selected"?this.$refs.tree.setCurrentKey(this.modelValue):this.$refs.tree.setCheckedKeys(Fl(this.modelValue)))}},render:function(){return ie(Qe("ElTree"),Un(this.$attrs,{ref:"tree",onCheck:this.updateValue,"onNode-click":this.updateValue}),this.$slots)},mounted:function(){this.setValue(),this.$emit("fc.el",this.$refs.tree)}});bx("._fc-upload{width:100%}._fc-exceed .el-upload{display:none}.el-upload-list.is-disabled .el-upload{cursor:not-allowed!important}");var Xce={name:"IconUpload"},IHe={class:"icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},BHe=[ce("path",{fill:"currentColor",d:"M160 832h704a32 32 0 110 64H160a32 32 0 110-64zm384-578.304V704h-64V247.296L237.248 490.048 192 444.8 508.8 128l316.8 316.8-45.312 45.248L544 253.696z"},null,-1)];function Qce(e,t){return{url:e,name:PHe(e),uid:t}}function PHe(e){return(""+e).split("/").pop()}Xce.render=function(e,t,n,r,o,i){return Y(),fe("svg",IHe,BHe)};var LHe=Te({name:"fcUpload",inheritAttrs:!1,formCreateParser:{toFormValue:function(e){return Fl(e)},toValue:function(e,t){return t.prop.props.limit===1?e[0]||"":e}},props:{previewMask:void 0,onPreview:Function,modalTitle:String,listType:String,modelValue:[Array,String]},emits:["update:modelValue","change","remove","fc.el"],data:function(){return{previewVisible:!1,previewImage:"",fileList:[]}},created:function(){this.fileList=Fl(this.modelValue).map(Qce)},watch:{modelValue:function(e){this.fileList=Fl(e).map(Qce)}},methods:{handlePreview:function(e){this.onPreview?this.onPreview.apply(this,arguments):this.listType==="text"?window.open(e.url):(this.previewImage=e.url,this.previewVisible=!0)},update:function(e){var t=e.map(function(n){return n.url}).filter(function(n){return n!==void 0});this.$emit("update:modelValue",t)},handleCancel:function(){this.previewVisible=!1},handleChange:function(e,t){this.$emit.apply(this,["change"].concat(Array.prototype.slice.call(arguments))),e.status==="success"&&this.update(t)},handleRemove:function(e,t){this.$emit.apply(this,["remove"].concat(Array.prototype.slice.call(arguments))),this.update(t)}},render:function(){var e,t,n=this,r=Fl(this.modelValue).length;return ie("div",{class:"_fc-upload"},[ie(Qe("ElUpload"),Un({key:r},this.$attrs,{"list-type":this.listType||"picture-card",class:{"_fc-exceed":!!this.$attrs.limit&&this.$attrs.limit<=r},onPreview:this.handlePreview,onChange:this.handleChange,onRemove:this.handleRemove,fileList:this.fileList,ref:"upload"}),hn({default:function(){return[(e=(t=n.$slots).default)!==null&&e!==void 0&&e.call(t)||["text","picture"].indexOf(n.listType)===-1?ie(Qe("ElIcon"),null,{default:function(){return[ie(Xce,null,null)]}}):ie(Qe("ElButton"),{type:"primary"},{default:function(){return[Dt("\u70B9\u51FB\u4E0A\u4F20")]}})]}},yx(this.$slots,["default"]))),ie(Qe("ElDialog"),{appendToBody:!0,modal:this.previewMask,title:this.modalTitle,modelValue:this.previewVisible,onClose:this.handleCancel},{default:function(){return[ie("img",{style:"width: 100%",src:n.previewImage},null)]}})])},mounted:function(){this.$emit("fc.el",this.$refs.upload)}});function Js(e,t,n){e[t]=n}function d1(e,t){delete e[t]}function c4(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,r=!1;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=t[o];if((r=Array.isArray(i))||Bt.Object(i)){var a=e[o]===void 0;if(r)r=!1,a&&Js(e,o,[]);else if(i._clone&&n!==void 0){if(!n){Js(e,o,i._clone());continue}i=i.getRule(),a&&Js(e,o,{})}else a&&Js(e,o,{});e[o]=c4(e[o],i,n)}else Js(e,o,i),Bt.Undef(i)||(Bt.Undef(i.__json)||(e[o].__json=i.__json),Bt.Undef(i.__origin)||(e[o].__origin=i.__origin))}return n!==void 0&&Array.isArray(e)?e.filter(function(l){return!l||!l.__ctrl}):e}function Zs(e){return c4({},{value:e}).value}var jHe=Object.assign||function(e){for(var t,n=1;n<arguments.length;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&Js(e,r,t[r]);return e};function Sn(){return jHe.apply(this,arguments)}function GR(e){return ga(e)!=="object"||e===null?e:e instanceof Array?xr(e):hn({},e)}bx('._fc-group{display:flex;flex-direction:column;justify-content:center;min-height:38px;width:100%}._fc-group-disabled ._fc-group-add,._fc-group-disabled ._fc-group-btn{cursor:not-allowed}._fc-group-handle{background-color:#fff;border:1px dashed #d9d9d9;border-radius:15px;bottom:-15px;display:flex;flex-direction:row;padding:3px 8px;position:absolute;right:30px}._fc-group-btn{cursor:pointer}._fc-group-idx{align-items:center;background:#eee;border-radius:15px;bottom:-15px;display:flex;font-weight:700;height:30px;justify-content:center;left:10px;position:absolute;width:30px}._fc-group-handle ._fc-group-btn+._fc-group-btn{margin-left:7px}._fc-group-container{border:1px dashed #d9d9d9;border-radius:5px;display:flex;flex-direction:column;margin:5px 5px 25px;padding:20px 20px 25px;position:relative}._fc-group-arrow{height:20px;position:relative;width:20px}._fc-group-arrow:before{border-left:2px solid #999;border-top:2px solid #999;content:"";height:9px;left:5px;position:absolute;top:8px;transform:rotate(45deg);width:9px}._fc-group-arrow._fc-group-down{transform:rotate(180deg)}._fc-group-plus-minus{cursor:pointer;height:20px;position:relative;width:20px}._fc-group-plus-minus:after,._fc-group-plus-minus:before{background-color:#409eff;content:"";height:2px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:60%}._fc-group-plus-minus:before{transform:translate(-50%,-50%) rotate(90deg)}._fc-group-plus-minus._fc-group-minus:before{display:none}._fc-group-plus-minus._fc-group-minus:after{background-color:#f56c6c}._fc-group-add{border:1px solid rgba(64,158,255,.5);border-radius:15px;cursor:pointer;height:25px;width:25px}._fc-group-add._fc-group-plus-minus:after,._fc-group-add._fc-group-plus-minus:before{width:50%}');var VHe=Te({name:"fcGroup",props:{field:String,rule:Array,expand:Number,options:Object,button:{type:Boolean,default:!0},max:{type:Number,default:0},min:{type:Number,default:0},modelValue:{type:Array,default:function(){return[]}},defaultValue:Object,sortBtn:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},syncDisabled:{type:Boolean,default:!0},onBeforeRemove:{type:Function,default:function(){}},onBeforeAdd:{type:Function,default:function(){}},formCreateInject:Object,parse:Function},data:function(){return{len:0,cacheRule:{},cacheValue:{},sort:[],form:Fo(this.formCreateInject.form.$form())}},emits:["update:modelValue","change","itemMounted","remove","add"],watch:{rule:{handler:function(e,t){var n=this;Object.keys(this.cacheRule).forEach(function(r){var o=n.cacheRule[r];if(o.$f){var i=o.$f.formData();if(e===t)o.$f.deferSyncValue(function(){c4(o.rule,e),o.$f.setValue(i)},!0);else{var a=o.$f.formData();o.$f.once("reloading",function(){o.$f.setValue(a)}),o.rule=Zs(e)}}})},deep:!0},expand:function(e){var t=e-this.modelValue.length;t>0&&this.expandRule(t)},modelValue:{handler:function(e){var t=this;e=e||[];var n=this.sort,r=n.length,o=r-e.length;if(o<0){for(var i=o;i<0;i++)this.addRule(e.length+i,!0);for(var a=0;a<r;a++)this.setValue(n[a],e[a])}else{if(o>0)for(var l=0;l<o;l++)this.removeRule(n[r-l-1]);e.forEach(function(s,u){t.setValue(n[u],e[u])})}},deep:!0}},methods:{_value:function(e){return e&&Jo(e,this.field)?e[this.field]:e},cache:function(e,t){this.cacheValue[e]=JSON.stringify(t)},input:function(e){this.$emit("update:modelValue",e),this.$emit("change",e)},formData:function(e,t){var n=this,r=this.cacheRule,o=this.sort;if(o.filter(function(a){return r[a].$f}).length===o.length){var i=o.map(function(a){var l=e===a?t:hn({},n.cacheRule[a].$f.form),s=n.field?l[n.field]||null:l;return n.cache(a,s),s});this.input(i)}},setValue:function(e,t){var n=this.field;n&&(t=Xi({},n,this._value(t))),this.cacheValue[e]!==JSON.stringify(n?t[n]:t)&&this.cache(e,t)},addRule:function(e,t){var n=this,r=this.formCreateInject.form.copyRules(this.rule||[]),o=this.options?hn({},this.options):{submitBtn:!1,resetBtn:!1};if(this.defaultValue){o.formData||(o.formData={});var i=Zs(this.defaultValue);Sn(o.formData,this.field?Xi({},this.field,i):i)}this.parse&&this.parse({rule:r,options:o,index:this.sort.length}),this.cacheRule[++this.len]={rule:r,options:o},t&&St(function(){return n.$emit("add",r,Object.keys(n.cacheRule).length-1)})},add$f:function(e,t,n){var r=this;this.cacheRule[t].$f=n,St(function(){r.$emit("itemMounted",n,Object.keys(r.cacheRule).indexOf(t))})},removeRule:function(e,t){var n=this,r=Object.keys(this.cacheRule).indexOf(e);delete this.cacheRule[e],delete this.cacheValue[e],t&&St(function(){return n.$emit("remove",r)})},add:function(e){if(!this.disabled&&this.onBeforeAdd(this.modelValue)!==!1){var t=xr(this.modelValue);t.push(this.defaultValue?Zs(this.defaultValue):this.field?null:{}),this.input(t)}},del:function(e,t){if(!this.disabled&&this.onBeforeRemove(this.modelValue,e)!==!1){this.removeRule(t,!0);var n=xr(this.modelValue);n.splice(e,1),this.input(n)}},addIcon:function(e){return ie("div",{class:"_fc-group-btn _fc-group-plus-minus",onClick:this.add},null)},delIcon:function(e,t){var n=this;return ie("div",{class:"_fc-group-btn _fc-group-plus-minus _fc-group-minus",onClick:function(){return n.del(e,t)}},null)},sortUpIcon:function(e){var t=this;return ie("div",{class:"_fc-group-btn _fc-group-arrow _fc-group-up",onClick:function(){return t.changeSort(e,-1)}},null)},sortDownIcon:function(e){var t=this;return ie("div",{class:"_fc-group-btn _fc-group-arrow _fc-group-down",onClick:function(){return t.changeSort(e,1)}},null)},changeSort:function(e,t){var n=this,r=this.sort[e];this.sort[e]=this.sort[e+t],this.sort[e+t]=r,this.formCreateInject.subForm(this.sort.map(function(o){return n.cacheRule[o].$f})),this.formData(0)},makeIcon:function(e,t,n){var r=this;if(this.$slots.button)return this.$slots.button({total:e,index:t,vm:this,key:n,del:function(){return r.del(t,n)},add:this.add});var o=[];return(!this.max||e<this.max)&&e===t+1&&o.push(this.addIcon(n)),e>this.min&&o.push(this.delIcon(t,n)),this.sortBtn&&t&&o.push(this.sortUpIcon(t)),this.sortBtn&&t!==e-1&&o.push(this.sortDownIcon(t)),o},emitEvent:function(e,t,n,r){this.$emit.apply(this,[e].concat(xr(t),[this.cacheRule[r].$f,n]))},expandRule:function(e){for(var t=0;t<e;t++)this.addRule(t)}},created:function(){var e=this;Je(function(){return hn({},e.cacheRule)},function(r){e.sort=Object.keys(r)},{immediate:!0});for(var t=(this.expand||0)-this.modelValue.length,n=0;n<this.modelValue.length;n++)this.addRule(n);t>0&&this.expandRule(t)},render:function(){var e=this,t=this.sort,n=this.button,r=this.form,o=this.disabled,i=t.length===0?this.$slots.default?this.$slots.default({vm:this,add:this.add}):ie("div",{key:"a_def",class:"_fc-group-plus-minus _fc-group-add fc-clock",onClick:this.add},null):t.map(function(a,l){var s=e.cacheRule[a],u=s.rule,c=s.options,d=n&&!o?e.makeIcon(t.length,l,a):[];return ie("div",{class:"_fc-group-container",key:a},[ie(r,Un({key:a},{disabled:o,"onUpdate:modelValue":function(f){return e.formData(a,f)},"onEmit-event":function(f){for(var p=arguments.length,m=new Array(p>1?p-1:0),v=1;v<p;v++)m[v-1]=arguments[v];return e.emitEvent(f,m,l,a)},"onUpdate:api":function(f){return e.add$f(l,a,f)},inFor:!0,modelValue:e.field?Xi({},e.field,e._value(e.modelValue[l])):e.modelValue[l],rule:u,option:c,extendOption:!0}),null),ie("div",{class:"_fc-group-idx"},[l+1]),d.length?ie("div",{class:"_fc-group-handle fc-clock"},[d]):null])});return ie("div",{key:"con",class:"_fc-group "+(o?"_fc-group-disabled":"")},[i])}}),zHe=Te({name:"fcSubForm",props:{rule:Array,options:{type:Object,default:function(){return Qn({submitBtn:!1,resetBtn:!1})}},modelValue:{type:Object,default:function(){return{}}},disabled:{type:Boolean,default:!1},syncDisabled:{type:Boolean,default:!0},formCreateInject:Object},data:function(){return{cacheValue:{},subApi:{},form:Fo(this.formCreateInject.form.$form())}},emits:["fc:subform","update:modelValue","change","itemMounted"],watch:{modelValue:function(e){this.setValue(e)}},methods:{formData:function(e){this.cacheValue=JSON.stringify(e),this.$emit("update:modelValue",e),this.$emit("change",e)},setValue:function(e){var t=JSON.stringify(e);this.cacheValue!==t&&(this.cacheValue=t,this.subApi.coverValue(e||{}))},add$f:function(e){var t=this;this.subApi=e,St(function(){t.$emit("itemMounted",e)})}},render:function(){var e=this.form;return ie(e,{disabled:this.disabled,"onUpdate:modelValue":this.formData,modelValue:this.modelValue,"onEmit-event":this.$emit,"onUpdate:api":this.add$f,rule:this.rule,option:this.options,extendOption:!0},null)}}),Jce={name:"IconWarning"},HHe={class:"icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},$He=[ce("path",{fill:"currentColor",d:"M512 64a448 448 0 110 896 448 448 0 010-896zm0 832a384 384 0 000-768 384 384 0 000 768zm48-176a48 48 0 11-96 0 48 48 0 0196 0zm-48-464a32 32 0 0132 32v288a32 32 0 01-64 0V288a32 32 0 0132-32z"},null,-1)];Jce.render=function(e,t,n,r,o,i){return Y(),fe("svg",HHe,$He)};var UHe=[AHe,MHe,NHe,FHe,RHe,LHe,VHe,zHe,Jce];function xg(e,t){var n=null;return function(){for(var r=this,o=arguments.length,i=new Array(o),a=0;a<o;a++)i[a]=arguments[a];n!==null&&clearTimeout(n),n=setTimeout(function(){return e.call.apply(e,[r].concat(i))},t)}}function d4(e){var t=e.replace(/([A-Z])/g,"-$1").toLocaleLowerCase();return t.indexOf("-")===0&&(t=t.substr(1)),t}var Ax=function(e,t){if(e&&e!==t)return e.props.formCreateInject?e.props.formCreateInject:e.parent?Ax(e.parent,t):void 0};function WHe(e,t,n){return Te({name:"FormCreate"+(e.isMobile?"Mobile":""),components:t,directives:n,props:{rule:{type:Array,required:!0,default:function(){return[]}},option:{type:Object,default:function(){return{}}},extendOption:Boolean,driver:[String,Object],modelValue:Object,disabled:{type:Boolean,default:void 0},preview:{type:Boolean,default:void 0},index:[String,Number],api:Object,name:String,subForm:{type:Boolean,default:!0},inFor:Boolean},emits:["update:api","update:modelValue","mounted","submit","change","emit-event","control","remove-rule","remove-field","sync","reload","repeat-field","update","validate-field-fail","validate-fail","created"],render:function(){return this.fc.render()},setup:function(r){var o=dn();qn("parentFC",o);var i=Rt("parentFC",null),a=di(r),l=a.rule,s=a.modelValue,u=a.subForm,c=a.inFor,d=Qn({ctxInject:{},destroyed:!1,isShow:!0,unique:1,renderRule:xr(l.value||[]),updateValue:JSON.stringify(s.value||{})}),f=new e(o),p=f.api(),m=c.value,v=function(){var x=Ax(o,i);if(x)if(m){var _=Fl(x.getSubForm()),E=_.indexOf(p);E>-1&&_.splice(E,1)}else x.subForm()},g=null;g0(function(){yl(function(){var x="",_=r.option&&r.option.globalClass||{};Object.keys(_).forEach(function(E){var C="";_[E].style&&Object.keys(_[E].style).forEach(function(T){C+=d4(T)+":"+_[E].style[T]+";"}),_[E].content&&(C+=_[E].content+";"),C&&(x+=".".concat(E,"{").concat(C,"}"))}),r.option&&r.option.style&&(x+=r.option.style),g||((g=document.createElement("style")).type="text/css",document.head.appendChild(g)),g.innerHTML=x||""})});var b=xg(function(){f.bus.$emit("$loadData.$topForm")},100),y=xg(function(){f.bus.$emit("$loadData.$form")},100),w=function(x){f.bus.$emit("change-$form."+x)};return yn(function(){i&&(p.top.bus.$on("$loadData.$form",b),p.top.bus.$on("change",w)),f.mounted()}),xo(function(){i&&(p.top.bus.$off("$loadData.$form",b),p.top.bus.$off("change",w)),g&&document.head.removeChild(g),v(),d.destroyed=!0,f.unmount()}),zs(function(){f.updated()}),Je(u,function(x){x?function(){if(i){var _,E=Ax(o,i);E&&(m?(_=Fl(E.getSubForm())).push(p):_=p,E.subForm(_))}}():v()},{immediate:!0}),Je(function(){return xr(l.value)},function(x){f.$handle.isBreakWatch()||x.length===d.renderRule.length&&x.every(function(_){return d.renderRule.indexOf(_)>-1})||(f.$handle.reloadRule(l.value),o.setupState.renderRule())}),Je(function(){return r.option},function(){f.initOptions(),p.refresh()},{deep:!0}),Je(function(){return[r.disabled,r.preview]},function(){p.refresh()}),Je(s,function(x){JSON.stringify(x||{})!==d.updateValue&&(p.config.forceCoverValue?p.coverValue(x||{}):p.setValue(x||{}))},{deep:!0}),Je(function(){return r.index},function(){p.coverValue({}),St(function(){St(function(){p.clearValidateState()})})},{flush:"sync"}),hn(hn({fc:Fo(f),parent:i&&Fo(i),fapi:Fo(p)},di(d)),{},{getGroupInject:function(){return Ax(o,i)},refresh:function(){++d.unique},renderRule:function(){d.renderRule=xr(l.value||[])},updateValue:function(x){if(!d.destroyed){var _=JSON.stringify(x);d.updateValue!==_&&(d.updateValue=_,o.emit("update:modelValue",x),St(function(){y(),i||b()}))}}})},created:function(){var r=dn();r.emit("update:api",r.setupState.fapi),r.setupState.fc.init()}})}var Zce=["props"],ede=["class","style","directives"],tde=["on"],cp=function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=[].concat(Zce,xr(r.normal||[])),i=[].concat(ede,xr(r.array||[])),a=[].concat(tde,xr(r.functional||[])),l=r.props||[];return t.reduce(function(s,u){for(var c in u)if(s[c])if(l.indexOf(c)>-1)s[c]=e([u[c]],s[c]);else if(o.indexOf(c)>-1)s[c]=hn(hn({},s[c]),u[c]);else if(i.indexOf(c)>-1){var d=s[c]instanceof Array?s[c]:[s[c]],f=u[c]instanceof Array?u[c]:[u[c]];s[c]=[].concat(xr(d),xr(f))}else if(a.indexOf(c)>-1)for(var p in u[c])if(s[c][p]){var m=s[c][p]instanceof Array?s[c][p]:[s[c][p]],v=u[c][p]instanceof Array?u[c][p]:[u[c][p]];s[c][p]=[].concat(xr(m),xr(v))}else s[c][p]=u[c][p];else if(c==="hook")for(var g in u[c])s[c][g]?s[c][g]=GHe(s[c][g],u[c][g]):s[c][g]=u[c][g];else s[c]=u[c];else o.indexOf(c)>-1||a.indexOf(c)>-1||l.indexOf(c)>-1?s[c]=hn({},u[c]):i.indexOf(c)>-1?s[c]=u[c]instanceof Array?xr(u[c]):ga(u[c])==="object"?hn({},u[c]):u[c]:s[c]=u[c];return s},n)},GHe=function(e,t){return function(){e&&e.apply(this,arguments),t&&t.apply(this,arguments)}},qR=["type","slot","emitPrefix","value","name","native","hidden","display","inject","options","emit","link","prefix","suffix","update","sync","optionsTo","key","slotUpdate","computed","preview","component","cache","modelEmit"],wx=["validate","children","control"],xx=["effect","deep"];function nde(){return[].concat(qR,xr(Zce),xr(ede),xr(tde),wx,xx)}function rde(e,t,n){return"[form-create ".concat(e,"]: ").concat(t)+""}function KR(e,t){console.error(rde("err",e))}var YR="[[FORM-CREATE-PREFIX-",XR="-FORM-CREATE-SUFFIX]]",ode="$FN:",ide="$FNX:",ade="$GLOBAL:",f4="function";function lde(e,t){return JSON.stringify(c4(Array.isArray(e)?[]:{},e,!0),function(n,r){if(!r||r._isVue!==!0){if(ga(r)!==f4)return r;if(r.__json)return r.__json;if(r.__origin&&(r=r.__origin),!r.__emit)return YR+r+XR}},t)}function sde(e){return new Function("return "+e)()}function Ud(e,t){if(e&&Bt.String(e)&&e.length>4){var n=e.trim(),r=!1;try{if(n.indexOf(XR)>0&&n.indexOf(YR)===0)n=n.replace(XR,"").replace(YR,""),r=!0;else if(n.indexOf(ode)===0)n=n.replace(ode,""),r=!0;else{if(n.indexOf(ade)===0){var o=n.replace(ade,"");return n=function(){for(var a=arguments.length,l=new Array(a),s=0;s<a;s++)l[s]=arguments[s];var u=l[0].api.getGlobalEvent(o);if(u)return u.call.apply(u,[this].concat(l))},n.__json=e,n.__inject=!0,n}if(n.indexOf(ide)===0)return(n=sde("function($inject){"+n.replace(ide,"")+"}")).__json=e,n.__inject=!0,n;t||n.indexOf(f4)!==0||n===f4||(r=!0)}if(!r)return e;var i=sde(n.indexOf(f4)===-1&&n.indexOf("(")!==0?f4+" "+n:n);return i.__json=e,i}catch(a){return void KR("\u89E3\u6790\u5931\u8D25:".concat(n,`
|
| err: `).concat(a))}}return e}function qHe(e,t){return JSON.parse(e,function(n,r){return Bt.Undef(r)||!r.indexOf?r:Ud(r,t)})}function ude(e,t){return{value:e,enumerable:!1,configurable:!1,writable:!!t}}function QR(e,t){return cde([e],t||!1)[0]}function cde(e,t){return c4([],xr(e),t||!1)}function dp(e,t){return cp(Array.isArray(t)?t:[t],e,{array:wx,normal:xx}),e}function dde(e){var t=Bt.Function(e.getRule)?e.getRule():e;return t.type||(t.type="input"),t}function fde(e,t){Object.defineProperties(e,Object.keys(t).reduce(function(n,r){return n[r]={get:function(){return t[r]()}},n},{}))}function _g(e){return e.__fc__||(e.__origin__?e.__origin__.__fc__:null)}function Po(e,t){try{t=e()}catch(n){(function(r){KR(r.toString()),console.error(r)})(n)}return t}function JR(){var e={},t=function(n){return n||"default"};return{setSlot:function(n,r){n=t(n),!r||Array.isArray(r)&&r.length||(e[n]||(e[n]=[]),e[n].push(r))},getSlot:function(n,r){n=t(n);var o=[];return(e[n]||[]).forEach(function(i){if(Array.isArray(i))o.push.apply(o,xr(i));else if(Bt.Function(i)){var a=i.apply(void 0,xr(r||[]));Array.isArray(a)?o.push.apply(o,xr(a)):o.push(a)}else Bt.Undef(i)||o.push(i)}),o},getSlots:function(){var n=this,r={};return Object.keys(e).forEach(function(o){r[o]=function(){for(var i=arguments.length,a=new Array(i),l=0;l<i;l++)a[l]=arguments[l];return n.getSlot(o,a)}}),r},slotLen:function(n){return n=t(n),e[n]?e[n].length:0},mergeBag:function(n){var r=this;if(!n)return this;var o=Bt.Function(n.getSlots)?n.getSlots():n;return Array.isArray(n)||oo(n)?this.setSlot(void 0,function(){return n}):Object.keys(o).forEach(function(i){r.setSlot(i,o[i])}),this}}}function pde(e){var t=hn({},e.props||{});return Object.keys(e.on||{}).forEach(function(n){var r,o="on".concat((r=n).replace(r[0],r[0].toLocaleUpperCase()));Array.isArray(t[o])?t[o]=[].concat(xr(t[o]),[e.on[n]]):t[o]?t[o]=[t[o],e.on[n]]:t[o]=e.on[n]}),t.key=e.key,t.ref=e.ref,t.class=e.class,t.id=e.id,t.style=e.style,t.slot&&delete t.slot,t}function ZR(e,t){return Object.setPrototypeOf(e,t),e}var hde=function(e,t){return typeof e=="string"?String(t):typeof e=="number"?Number(t):t},f1={"==":function(e,t){return JSON.stringify(e)===JSON.stringify(hde(e,t))},"!=":function(e,t){return!f1["=="](e,t)},">":function(e,t){return e>t},">=":function(e,t){return e>=t},"<":function(e,t){return e<t},"<=":function(e,t){return e<=t},on:function(e,t){return e&&e.indexOf&&e.indexOf(hde(e[0],t))>-1},notOn:function(e,t){return!f1.on(e,t)},in:function(e,t){return t&&t.indexOf&&t.indexOf(e)>-1},notIn:function(e,t){return!f1.in(e,t)},between:function(e,t){return e>t[0]&&e<t[1]},notBetween:function(e,t){return e<t[0]||e>t[1]},empty:function(e){return Bt.empty(e)},notEmpty:function(e){return!Bt.empty(e)},pattern:function(e,t){return new RegExp(t,"g").test(e)}};function p1(e,t){return(Array.isArray(t)?t:(t||"").split(".")).forEach(function(n){e!=null&&(e=e[n])}),e}function Oa(e,t){return function(n,r,o){var i=new eI(e,n,r,o,arguments.length>3&&arguments[3]!==void 0?arguments[3]:{});return t&&(Bt.Function(t)?t(i):i.props(t)),i}}function eI(e,t,n,r,o){this._data=Sn({props:{},on:{},options:[],children:[],hidden:!1,display:!0,value:void 0},{type:e,title:t,field:n,value:r,props:o||{}}),this.event=this.on}function vde(e){e.forEach(function(t){eI.prototype[t]=function(n){return dp(this._data,Xi({},t,arguments.length<2?n:Xi({},n,arguments[1]))),this}})}Sn(eI.prototype,{getRule:function(){return this._data},setProp:function(e,t){return Js(this._data,e,t),this},modelField:function(e){return this._data.modelField=e,this},_clone:function(){var e=new this.constructor;return e._data=QR(this._data),e}}),vde(nde());var KHe=Oa("");function YHe(e,t,n){var r=KHe("",t);return r._data.type=e,r._data.title=n,r}function mde(e){var t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch{return t}}function gde(e){if(typeof XMLHttpRequest<"u"){var t,n=new XMLHttpRequest,r=e.action;n.onerror=function(i){e.onError(i)},n.onload=function(){if(n.status<200||n.status>=300)return e.onError(function(i,a,l){var s="fail to ".concat(i," ").concat(l.status,"'"),u=new Error(s);return u.status=l.status,u.url=i,u}(r,0,n),mde(n));e.onSuccess(mde(n))},n.open(e.method||"get",r,!0),e.data&&((e.dataType||"").toLowerCase()!=="json"?(t=new FormData,Object.keys(e.data).map(function(i){t.append(i,e.data[i])})):(t=JSON.stringify(e.data),n.setRequestHeader("content-type","application/json"))),e.withCredentials&&"withCredentials"in n&&(n.withCredentials=!0);var o=e.headers||{};Object.keys(o).forEach(function(i){o[i]!=null&&n.setRequestHeader(i,o[i])}),n.send(t)}}function yde(e,t){return new Promise(function(n,r){(t||gde)(hn(hn({},e),{},{onSuccess:function(o){var i=function(l){return l},a=Ud(e.parse);Bt.Function(a)?i=a:a&&Bt.String(a)&&(i=function(l){return p1(l,a)}),n(i(o))},onError:function(o){r(o)}}))})}function p4(e){return Zs(e)}function Ic(e){var t=e.replace(/(-[a-z])/g,function(n){return n.replace("-","").toLocaleUpperCase()});return bde(t)}function bde(e){return e.replace(e[0],e[0].toLowerCase())}function Ade(e){return e==null?"":ga(e)==="object"?JSON.stringify(e,null,2):String(e)}var XHe=0;function _x(){var e=370+ ++XHe;return"F"+Math.random().toString(36).substr(3,3)+Number("".concat(Date.now())).toString(36)+e.toString(36)+"c"}function h4(e,t,n){var r,o=e;return(t||"").split(".").forEach(function(i){r&&(o[r]&&ga(o[r])=="object"||(o[r]={}),o=o[r]),r=i}),o[r]=n,o}var QHe=1;function tI(e){Sn(this,{$handle:e,fc:e.fc,vm:e.vm,$manager:e.$manager,vNode:new e.fc.CreateNode(e.vm),id:QHe++}),fde(this,{options:function(){return e.options},sort:function(){return e.sort}}),this.initCache(),this.initRender()}(function(e){Sn(e.prototype,{initCache:function(){this.clearCacheAll()},clearCache:function(t){t.rule.cache||(this.cache[t.id]?((this.cache[t.id].use===!0||this.cache[t.id].parent)&&this.$handle.refresh(),this.cache[t.id].parent&&this.clearCache(this.cache[t.id].parent),this.cache[t.id]=null):t.parent&&this.clearCache(t.parent))},clearCacheAll:function(){this.cache={}},setCache:function(t,n,r){this.cache[t.id]={vnode:n,use:!1,parent:r,slot:t.rule.slot}},getCache:function(t){var n=this.cache[t.id];if(n)return n.use=!0,n.vnode}})})(tI),function(e){Sn(e.prototype,{initRender:function(){this.cacheConfig={}},getTypeSlot:function(t){return function n(r){if(r){var o=void 0;return t.rule.field&&(o=r.slots["field-"+d4(t.rule.field)]||r.slots["field-"+t.rule.field]),o||(o=r.slots["type-"+d4(t.type)]||r.slots["type-"+t.type]),o||n(r.setupState.parent)}}(this.vm)},render:function(){var t=this;if(this.vm.setupState.isShow){this.$manager.beforeRender();var n=JR();return this.sort.forEach(function(r){t.renderSlot(n,t.$handle.ctxs[r])}),this.$manager.render(n)}},renderSlot:function(t,n,r){if(this.isFragment(n)){n.initProp(),this.mergeGlobal(n),n.initNone();var o=this.renderChildren(n.loadChildrenPending(),n),i=o.default;i&&t.setSlot(n.rule.slot,function(){return i()}),delete o.default,t.mergeBag(o)}else t.setSlot(n.rule.slot,this.renderCtx(n,r))},mergeGlobal:function(t){var n=this;this.$handle.options.global&&(this.cacheConfig[t.trueType]||(this.cacheConfig[t.trueType]=ee(function(){var r=n.$handle.options.global;return dp({},[r["*"],r[t.originType]||r[t.type]||r[t.type]||{}])})),t.prop=dp({},[this.cacheConfig[t.trueType].value,t.prop]))},setOptions:function(t){var n=t.loadPending({key:"options",origin:t.prop.options,def:[]});t.prop.options=n,t.prop.optionsTo&&n&&h4(t.prop,t.prop.optionsTo,n)},deepSet:function(t){var n=t.rule.deep;n&&Object.keys(n).sort(function(r,o){return r.length<o.length?-1:1}).forEach(function(r){h4(t.prop,r,n[r])})},parseSide:function(t,n){return Bt.Object(t)?dp({props:{formCreateInject:n.prop.props.formCreateInject}},t):t},renderSides:function(t,n,r){var o=n[r?"rule":"prop"];return[this.renderRule(this.parseSide(o.prefix,n)),t,this.renderRule(this.parseSide(o.suffix,n))]},renderId:function(t,n){var r=this,o=this.$handle[n==="field"?"fieldCtx":"nameCtx"][t];return o?o.map(function(i){return r.renderCtx(i,i.parent)}):void 0},renderCtx:function(t,n){var r=this;try{if(t.type==="hidden")return;var o=t.rule;if(!this.cache[t.id]||this.cache[t.id].slot!==o.slot){var i;t.initProp(),this.mergeGlobal(t),t.initNone(),this.$manager.tidyRule(t),this.deepSet(t),this.setOptions(t),this.ctxProp(t);var a=t.prop;a.preview=!!(a.preview!=null?a.preview:this.vm.props.preview!==void 0?this.vm.props.preview:this.options.preview),a.props.formCreateInject=this.injectProp(t);var l=a.cache!==!1,s=a.preview;if(a.hidden)return void this.setCache(t,void 0,n);i=function(){for(var u=arguments.length,c=new Array(u),d=0;d<u;d++)c[d]=arguments[d];var f={rule:o,prop:a,preview:s,api:r.$handle.api,model:a.model||{},slotValue:c};c.length&&o.slotUpdate&&Po(function(){return o.slotUpdate(f)});var p={},m=t.loadChildrenPending();t.parser.renderChildren?p=t.parser.renderChildren(m,t):t.parser.loadChildren!==!1&&(p=r.renderChildren(m,t));var v,g=r.getTypeSlot(t);return g?(f.children=p,v=g(f)):v=s?t.parser.preview(GR(p),t):t.parser.render(GR(p),t),v=r.renderSides(v,t),!t.input&&Bt.Undef(a.native)||a.native===!0||(r.fc.targetFormDriver("updateWrap",t),v=r.$manager.makeWrap(t,v)),t.none&&(v=Array.isArray(v)?v.map(function(b){return b&&b.__v_isVNode?r.none(b):b}):r.none(v)),l&&r.setCache(t,function(){return r.stable(v)},n),v},this.setCache(t,i,n)}return function(){var u=r.getCache(t);if(u)return u.apply(void 0,arguments);if(!r.cache[t.id]){var c=r.renderCtx(t,t.parent);return c?c():void 0}}}catch(u){return void console.error(u)}},none:function(t){if(t)return Array.isArray(t.props.class)?t.props.class.push("fc-none"):t.props.class=t.props.class?[t.props.class,"fc-none"]:"fc-none",t},stable:function(t){var n=this;return(Array.isArray(t)?t:[t]).forEach(function(r){r&&r.__v_isVNode&&r.children&&ga(r.children)==="object"&&(r.children.$stable=!0,n.stable(r.children))}),t},getModelField:function(t){return t.prop.modelField||t.parser.modelField||this.fc.modelFields[this.vNode.aliasMap[t.type]]||this.fc.modelFields[t.type]||this.fc.modelFields[t.originType]||"modelValue"},isFragment:function(t){return t.type==="fragment"||t.type==="template"},injectProp:function(t){var n=this,r=this.vm.setupState;r.ctxInject[t.id]||(r.ctxInject[t.id]={api:this.$handle.api,form:this.fc.create,subForm:function(i){n.$handle.addSubForm(t,i)},getSubForm:function(){return n.$handle.subForm[t.id]},options:[],children:[],preview:!1,id:t.id,field:t.field,rule:t.rule,input:t.input});var o=r.ctxInject[t.id];return Sn(o,{preview:t.prop.preview,options:t.prop.options,children:t.loadChildrenPending()}),o},ctxProp:function(t){var n=this,r=t.ref,o=t.key,i=t.rule;this.$manager.mergeProp(t),t.parser.mergeProp(t);var a=[{ref:r,key:i.key||"".concat(o,"fc"),slot:void 0,on:{vnodeMounted:function(u){u.el.__rule__=t.rule,n.onMounted(t,u.el)},"fc.updateValue":function(u){n.$handle.onUpdateValue(t,u)},"fc.el":function(u){t.exportEl=u,u&&((u.$el||u).__rule__=t.rule)}}}];if(t.input){this.vm.props.disabled===!0&&(t.prop.props.disabled=!0);var l=this.getModelField(t),s={callback:function(u){n.onInput(t,u)},value:this.$handle.getFormData(t)};a.push({on:hn(Xi({},"update:".concat(l),s.callback),t.prop.modelEmit?Xi({},t.prop.modelEmit,function(){return n.onEmitInput(t)}):{}),props:Xi({},l,s.value)}),t.prop.model=s}return cp(a,t.prop),t.prop},onMounted:function(t,n){t.el=this.vm.refs[t.ref]||n,t.parser.mounted(t),this.$handle.effect(t,"mounted")},onInput:function(t,n){t.prop.modelEmit?this.$handle.onBaseInput(t,n):this.$handle.onInput(t,n)},onEmitInput:function(t){this.$handle.setValue(t,t.parser.toValue(t.modelValue,t),t.modelValue)},renderChildren:function(t,n){var r=this;if(!Bt.trueArray(t))return{};var o=JR();return t.map(function(i){if(i)return Bt.String(i)?o.setSlot(null,i):i.__fc__?r.renderSlot(o,i.__fc__,n):void(i.type&&St(function(){r.$handle.loadChildren(t,n),r.$handle.refresh()}))}),o.getSlots()},defaultRender:function(t,n){var r=t.prop;return r.component?typeof r.component=="string"?this.vNode.make(r.component,r,n):this.vNode.makeComponent(r.component,r,n):this.vNode[t.type]?this.vNode[t.type](r,n):this.vNode[t.originType]?this.vNode[t.originType](r,n):this.vNode.make(bde(r.type),r,n)},renderRule:function(t,n,r){var o=this;if(t){if(Bt.String(t))return t;var i;if(r)i=t.type;else if(i=t.is,t.type){i=Ic(t.type);var a=this.vNode.aliasMap[i];a&&(i=Ic(a))}if(i){var l=JR();Bt.trueArray(t.children)&&t.children.forEach(function(u){u&&l.setSlot(u==null?void 0:u.slot,function(){return o.renderRule(u)})});var s=hn({},t);return delete s.type,delete s.is,this.vNode.make(i,s,l.mergeBag(n).getSlots())}}}})}(tI);var wde=["hook:updated","hook:mounted"];function xde(e,t,n){var r,o=_x(),i=!!t.field;Sn(this,{id:o,ref:o,wrapRef:o+"fi",rule:t,origin:t.__origin__||t,name:t.name,pending:{},none:!1,watch:[],linkOn:[],root:[],ctrlRule:[],children:[],parent:null,group:t.subRule?this:null,cacheConfig:null,prop:hn({},t),computed:{},payload:{},refRule:{},input:i,el:void 0,exportEl:void 0,defaultValue:i?Zs(n):void 0,field:t.field||void 0}),this.updateKey(),r=this,Object.defineProperties(r.origin,{__fc__:ude(Fo(r),!0)}),this.update(e,!0)}function JHe(e,t){for(var n=0;n<e.ctrlRule.length;n++){var r=e.ctrlRule[n];if(r.children===t)return r}}function _de(e){return!!e.rule.__ctrl}function Ede(e,t){return typeof t=="function"?""+t:t}Sn(xde.prototype,{getParentGroup:function(){for(var e=this.parent;e;){if(e.group)return e;e=e.parent}},loadChildrenPending:function(){var e=this,t=this.rule.children||[];return Array.isArray(t)?t:this.loadPending({key:"children",origin:t,def:[],onLoad:function(n){e.$handle&&e.$handle.loadChildren(n,e)},onUpdate:function(n,r){e.$handle&&(n===r?e.$handle.loadChildren(n,e):e.$handle.updateChildren(e,n,r))},onReload:function(n){e.$handle?e.$handle.updateChildren(e,[],n):delete e.pending.children}})},loadPending:function(e){var t=this,n=e.key,r=e.origin,o=e.def,i=e.onLoad,a=e.onReload,l=e.onUpdate;if(this.pending[n]&&this.pending[n].origin===r)return this.getPending(n,o);delete this.pending[n];var s=r;if(Bt.Function(r)){var u=Po(function(){return r({rule:t.rule,api:t.$api,update:function(c){var d=c||o,f=t.getPending(n,o);t.setPending(n,r,d),l&&l(d,f)},reload:function(){var c=t.getPending(n,o);delete t.pending[n],a&&a(c),t.$api&&t.$api.sync(t.rule)}})});u&&Bt.Function(u.then)?(u.then(function(c){var d=c||o;t.setPending(n,r,d),i&&i(d),t.$api&&t.$api.sync(t.rule)}).catch(function(c){console.error(c)}),s=o,this.setPending(n,r,s)):(s=u||o,this.setPending(n,r,s),i&&i(s))}return s},getPending:function(e,t){return this.pending[e]&&this.pending[e].value||t},setPending:function(e,t,n){this.pending[e]={origin:t,value:Qn(n)}},effectData:function(e){return this.payload[e]||(this.payload[e]={}),this.payload[e]},clearEffectData:function(e){e===void 0?this.payload={}:delete this.payload[e]},updateKey:function(e){this.key=_x(),e&&this.parent&&this.parent.updateKey(e)},updateType:function(){this.originType=this.rule.type,this.type=Ic(this.rule.type),this.trueType=this.$handle.getType(this.originType)},setParser:function(e){this.parser=e,e.init(this)},initProp:function(){var e=this,t=hn({},this.rule);delete t.children,this.prop=dp({},[t].concat(xr(Object.keys(this.payload).map(function(n){return e.payload[n]})),[this.computed]))},initNone:function(){this.none=!(Bt.Undef(this.prop.display)||this.prop.display)},injectValidate:function(){var e=this;return Fl(this.prop.validate).map(function(t){if(Bt.Function(t.validator)){var n=hn({},t),r=e;return n.validator=function(){for(var o,i=arguments.length,a=new Array(i),l=0;l<i;l++)a[l]=arguments[l];return(o=t.validator).call.apply(o,[{that:this,id:r.id,field:r.field,rule:r.rule,api:r.$handle.api}].concat(a))},n}return t})},check:function(e){return this.vm===e.vm},unwatch:function(){this.watch.forEach(function(e){return e()}),this.watch=[],this.refRule={}},unlink:function(){this.linkOn.forEach(function(e){return e()}),this.linkOn=[]},link:function(){this.unlink(),this.$handle.appendLink(this)},watchTo:function(){this.$handle.watchCtx(this)},delete:function(){this.unwatch(),this.unlink(),this.rmCtrl(),this.parent&&this.parent.children.splice(this.parent.children.indexOf(this)>>>0,1),Sn(this,{deleted:!0,computed:{},parent:null,children:[],cacheConfig:null,none:!1})},rmCtrl:function(){this.ctrlRule.forEach(function(e){return e.__fc__&&e.__fc__.rm()}),this.ctrlRule=[]},rm:function(){var e=this,t=function(){var n=e.root.indexOf(e.origin);n>-1&&(e.root.splice(n,1),e.$handle&&e.$handle.refresh())};this.deleted?t():this.$handle.noWatch(function(){e.$handle.deferSyncValue(function(){e.rmCtrl(),t(),e.$handle.rmCtx(e),Sn(e,{root:[]})},e.input)})},update:function(e,t){Sn(this,{deleted:!1,$handle:e,$render:e.$render,$api:e.api,vm:e.vm,vNode:e.$render.vNode,updated:!1,cacheValue:this.rule.value}),!t&&this.unwatch(),this.watchTo(),this.link(),this.updateType()}});var Ex={init:function(e){},toFormValue:function(e,t){return e},toValue:function(e,t){return e},mounted:function(e){},render:function(e,t){return t.$handle.fc.renderDriver&&t.$handle.fc.renderDriver.defaultRender?t.$handle.fc.renderDriver.defaultRender(t,e):t.$render.defaultRender(t,e)},preview:function(e,t){return t.$handle.fc.renderDriver&&t.$handle.fc.renderDriver.defaultPreview?t.$handle.fc.renderDriver.defaultPreview(t,e):this.render(e,t)},mergeProp:function(e){}},ZHe=["field","value","vm","template","name","config","control","inject","sync","payload","optionsTo","update","slotUpdate","computed","component","cache"];function Bc(e){var t=this;fde(this,{options:function(){return e.options.value||{}},bus:function(){return e.bus}}),Sn(this,{fc:e,vm:e.vm,watching:!1,loading:!1,reloading:!1,noWatchFn:null,deferSyncFn:null,isMounted:!1,formData:Qn({}),subRuleData:Qn({}),subForm:{},form:Qn({}),appendData:{},providers:{},cycleLoad:null,loadedId:1,nextTick:null,changeStatus:!1,pageEnd:!0,nextReload:function(){t.lifecycle("reload")}}),this.initData(e.rules),this.$manager=new e.manager(this),this.$render=new tI(this),this.api=e.extendApiFn.reduce(function(n,r){return Sn(n,Po(function(){return r(n,t)},{})),n},function(n){function r(l){return Bt.Undef(l)?l=n.fields():Array.isArray(l)||(l=[l]),l}function o(l,s,u){r(l).forEach(function(c){n.getCtxs(c).forEach(function(d){Js(d.rule,s,u),n.$render.clearCache(d)})})}function i(){var l=n.subForm;return Object.keys(l).reduce(function(s,u){var c=l[u];return c&&(Array.isArray(c)?s.push.apply(s,xr(c)):s.push(c)),s},[])}var a={get config(){return n.options},set config(l){n.fc.options.value=l},get options(){return n.options},set options(l){n.fc.options.value=l},get form(){return n.form},get rule(){return n.rules},get parent(){return n.vm.setupState.parent&&n.vm.setupState.parent.setupState.fapi},get top(){return a.parent?a.parent.top:a},get children(){return i()},get siblings(){var l=n.vm.setupState.getGroupInject();if(l){var s=l.getSubForm();if(Array.isArray(s))return xr(s)}},get index(){var l=a.siblings;if(l){var s=l.indexOf(a);return s>-1?s:void 0}},formData:function(l){return r(l).reduce(function(s,u){var c=n.getFieldCtx(u);return c&&(s[c.field]=p4(c.rule.value)),s},n.options.appendValue!==!1?p4(n.appendData):{})},getValue:function(l){var s=n.getFieldCtx(l);if(s)return p4(s.rule.value)},coverValue:function(l){var s=hn({},l||{});n.deferSyncValue(function(){n.appendData={},a.fields().forEach(function(u){var c=n.fieldCtx[u];if(c){var d=Jo(l,u);c.forEach(function(f){f.rule.value=d?l[u]:void 0}),delete s[u]}}),Sn(n.appendData,s)},!0)},setValue:function(l){var s=l;arguments.length>=2&&(s=Xi({},l,arguments[1])),n.deferSyncValue(function(){Object.keys(s).forEach(function(u){var c=n.fieldCtx[u];if(!c)return n.appendData[u]=s[u];c.forEach(function(d){d.rule.value=s[u]})})},!0)},removeField:function(l){var s=n.getCtx(l);return n.deferSyncValue(function(){n.getCtxs(l).forEach(function(u){u.rm()})},!0),s?s.origin:void 0},removeRule:function(l){var s=l&&_g(l);if(s)return s.rm(),s.origin},fields:function(){return n.fields()},append:function(l,s,u){var c,d=n.sort.length-1,f=n.getCtx(s);if(f)if(u){if(c=f.getPending("children",f.rule.children),!Array.isArray(c))return;d=f.rule.children.length-1}else d=f.root.indexOf(f.origin),c=f.root;else c=n.rules;c.splice(d+1,0,l)},prepend:function(l,s,u){var c,d=0,f=n.getCtx(s);if(f)if(u){if(c=f.getPending("children",f.rule.children),!Array.isArray(c))return}else d=f.root.indexOf(f.origin),c=f.root;else c=n.rules;c.splice(d,0,l)},hidden:function(l,s){o(s,"hidden",!!l),n.refresh()},hiddenStatus:function(l){var s=n.getCtx(l);if(s)return!!s.rule.hidden},display:function(l,s){o(s,"display",!!l),n.refresh()},displayStatus:function(l){var s=n.getCtx(l);if(s)return!!s.rule.display},disabled:function(l,s){r(s).forEach(function(u){n.getCtxs(u).forEach(function(c){Js(c.rule.props,"disabled",!!l)})}),n.refresh()},all:function(l){return Object.keys(n.ctxs).map(function(s){var u=n.ctxs[s];return l?u.origin:u.rule})},model:function(l){return n.fields().reduce(function(s,u){var c=n.fieldCtx[u][0];return s[u]=l?c.origin:c.rule,s},{})},component:function(l){return Object.keys(n.nameCtx).reduce(function(s,u){var c=n.nameCtx[u].map(function(d){return l?d.origin:d.rule});return s[u]=c.length===1?c[0]:c,s},{})},bind:function(){return a.form},reload:function(l){n.reloadRule(l)},updateOptions:function(l){n.fc.updateOptions(l),a.refresh()},onSubmit:function(l){a.updateOptions({onSubmit:l})},sync:function(l){if(Array.isArray(l))l.forEach(function(u){return a.sync(u)});else{var s=Bt.Object(l)?_g(l):n.getCtxs(l);s&&((s=Array.isArray(s)?s:[s]).forEach(function(u){if(!u.deleted){var c=n.subForm[u.id];c&&(Array.isArray(c)?c.forEach(function(d){d.refresh()}):c&&c.refresh()),n.$render.clearCache(u)}}),n.refresh())}},refresh:function(){i().forEach(function(l){l.refresh()}),n.$render.clearCacheAll(),n.refresh()},refreshOptions:function(){n.$manager.updateOptions(n.options),a.refresh()},hideForm:function(l){n.vm.setupState.isShow=!l},changeStatus:function(){return n.changeStatus},clearChangeStatus:function(){n.changeStatus=!1},updateRule:function(l,s){n.getCtxs(l).forEach(function(u){Sn(u.rule,s)})},updateRules:function(l){Object.keys(l).forEach(function(s){a.updateRule(s,l[s])})},mergeRule:function(l,s){n.getCtxs(l).forEach(function(u){dp(u.rule,s)})},mergeRules:function(l){Object.keys(l).forEach(function(s){a.mergeRule(s,l[s])})},getRule:function(l,s){var u=n.getCtx(l);if(u)return s?u.origin:u.rule},getRenderRule:function(l){var s=n.getCtx(l);if(s)return s.prop},getRefRule:function(l){var s=n.getCtxs(l);if(s){var u=s.map(function(c){return c.rule});return u.length===1?u[0]:u}},setEffect:function(l,s,u){var c=n.getCtx(l);c&&s&&(s[0]==="$"&&(s=s.substr(1)),Jo(c.rule,"$"+s)&&Js(c.rule,"$"+s,u),Jo(c.rule,"effect")||(c.rule.effect={}),Js(c.rule.effect,s,u))},clearEffectData:function(l,s){var u=n.getCtx(l);u&&(s&&s[0]==="$"&&(s=s.substr(1)),u.clearEffectData(s),a.sync(l))},updateValidate:function(l,s,u){u?a.mergeRule(l,{validate:s}):o(l,"validate",s)},updateValidates:function(l,s){Object.keys(l).forEach(function(u){a.updateValidate(u,l[u],s)})},refreshValidate:function(){a.refresh()},resetFields:function(l){r(l).forEach(function(s){n.getCtxs(s).forEach(function(u){n.$render.clearCache(u),u.rule.value=p4(u.defaultValue)})}),St(function(){a.clearValidateState()})},method:function(l,s){var u=a.el(l);if(!u||!u[s])throw new Error(rde("err","".concat(s,"\u65B9\u6CD5\u4E0D\u5B58\u5728")));return function(){return u[s].apply(u,arguments)}},exec:function(l,s){for(var u=arguments.length,c=new Array(u>2?u-2:0),d=2;d<u;d++)c[d-2]=arguments[d];return Po(function(){return a.method(l,s).apply(void 0,c)})},toJson:function(l){return lde(a.rule,l)},trigger:function(l,s){for(var u=a.el(l),c=arguments.length,d=new Array(c>2?c-2:0),f=2;f<c;f++)d[f-2]=arguments[f];u&&u.$emit.apply(u,[s].concat(d))},el:function(l){var s=n.getCtx(l);if(s)return s.el||n.vm.refs[s.ref]},closeModal:function(l){n.bus.$emit("fc:closeModal:"+l)},getSubForm:function(l){var s=n.getCtx(l);return s?n.subForm[s.id]:void 0},getChildrenRuleList:function(l){var s=ga(l)==="object",u=s?_g(l):n.getCtx(l),c=u?u.rule:s?l:a.getRule(l);if(!c)return[];var d,f=[];return(d=u?u.loadChildrenPending():c.children)&&d.forEach(function(p){ga(p)==="object"&&(p.field&&f.push(p),f.push.apply(f,xr(a.getChildrenRuleList(p))))}),f},getParentSubRule:function(l){var s=ga(l)==="object"?_g(l):n.getCtx(l);if(s){var u=s.getParentGroup();if(u)return u.rule}},getChildrenFormData:function(l){return a.getChildrenRuleList(l).reduce(function(s,u){return s[u.field]=p4(u.value),s},{})},setChildrenFormData:function(l,s,u){var c=a.getChildrenRuleList(l);n.deferSyncValue(function(){c.forEach(function(d){Jo(s,d.field)?d.value=s[d.field]:u&&(d.value=void 0)})})},getGlobalEvent:function(l){var s=a.options.globalEvent[l];if(s)return ga(s)==="object"&&(s=s.handle),Ud(s)},getGlobalData:function(l){return new Promise(function(s,u){var c=a.options.globalData[l];c||s(n.fc.loadData[l]),c.type==="fetch"?a.fetch(c).then(function(d){s(d)}).catch(u):s(c.data)})},nextTick:function(l){n.bus.$once("next-tick",l),n.refresh()},nextRefresh:function(l){n.nextRefresh(),l&&Po(l)},deferSyncValue:function(l,s){n.deferSyncValue(l,s)},emit:function(l){for(var s,u=arguments.length,c=new Array(u>1?u-1:0),d=1;d<u;d++)c[d-1]=arguments[d];(s=n.vm).emit.apply(s,[l].concat(c))},bus:n.bus,fetch:function(l){return new Promise(function(s,u){l=Zs(l),l=n.loadFetchVar(l),n.beforeFetch(l).then(function(){return yde(l,n.fc.create.fetch).then(s).catch(u)})})},watchFetch:function(l,s,u){return n.fc.watchLoadData(function(c,d){var f=Zs(l);f=n.loadFetchVar(f,c),n.beforeFetch(f).then(function(){return yde(f,n.fc.create.fetch).then(function(p){s&&s(p,d)}).catch(function(p){u&&u(p)})})})},getData:function(l,s){return n.fc.getLoadData(l,s)},setData:function(l,s){return n.fc.setData(l,s)},refreshData:function(l){return n.fc.refreshData(l)},helper:{tidyFields:r,props:o}};return["on","once","off"].forEach(function(l){a[l]=function(){var s;(s=n.bus)["$".concat(l)].apply(s,arguments)}}),a.changeValue=a.changeField=a.setValue,a}(this))}Sn(Bc.prototype,{initData:function(e){Sn(this,{ctxs:{},fieldCtx:{},nameCtx:{},sort:[],rules:e})},init:function(){this.appendData=hn(hn(hn({},this.options.formData||{}),this.fc.vm.props.modelValue||{}),this.appendData),this.useProvider(),this.usePage(),this.loadRule(),this.$manager.__init(),this.lifecycle("created")},isBreakWatch:function(){return this.loading||this.noWatchFn||this.reloading},beforeFetch:function(e){var t=this;return new Promise(function(n){var r=t.options.beforeFetch&&Po(function(){return t.options.beforeFetch(e,{api:t.api})});r&&Bt.Function(r.then)?r.then(n):n()})}}),function(e){Sn(e.prototype,{parseInjectEvent:function(t,n){var r=t.inject||this.options.injectEvent;return this.parseEventLst(t,n,r)},parseEventLst:function(t,n,r,o){var i=this;return Object.keys(n).forEach(function(a){var l=i.parseEvent(t,n[a],r,o);l&&(n[a]=l)}),n},parseEvent:function(t,n,r,o){if(Bt.Function(n)&&(r!==!1&&!Bt.Undef(r)||n.__inject))return this.inject(t,n,r);if(!o&&Array.isArray(n)&&n[0]&&(Bt.String(n[0])||Bt.Function(n[0])))return this.parseEventLst(t,n,r,!0);if(Bt.String(n)){var i=Ud(n);if(i&&n!==i)return i.__inject?this.parseEvent(t,i,r,!0):i}},parseEmit:function(t){var n=this,r={},o=t.rule,i=o.emitPrefix,a=o.field,l=o.name,s=o.inject,u=o.emit||[];return Bt.trueArray(u)&&u.forEach(function(c){if(c){var d,f=i||a||l;if(Bt.Object(c)&&(d=c.inject,f=(c=c.name).prefix||f),f){var p=d4("".concat(f,"-").concat(c)),m=function(){var g,b,y;n.vm.emitsOptions&&(n.vm.emitsOptions[p]=null);for(var w=arguments.length,x=new Array(w),_=0;_<w;_++)x[_]=arguments[_];(g=n.vm).emit.apply(g,[p].concat(x)),(b=n.vm).emit.apply(b,["emit-event",p].concat(x)),(y=n.bus).$emit.apply(y,[p].concat(x))};if(m.__emit=!0,d||s!==!1){var v=d||s||n.options.injectEvent;r[c]=Bt.Undef(v)?m:n.inject(o,m,v)}else r[c]=m}}}),t.computed.on=r,r},getInjectData:function(t,n){var r=t.__fc__&&t.__fc__.$api,o=(t.__fc__&&t.__fc__.$handle.vm||this.vm.props).props,i=o.option,a=o.rule;return{$f:r||this.api,api:r||this.api,rule:a,self:t.__origin__,option:i,inject:n}},inject:function(t,n,r){if(n.__origin){if(this.watching&&!this.loading)return n;n=n.__origin}var o=this,i=function(){for(var a=o.getInjectData(t,r),l=arguments.length,s=new Array(l),u=0;u<l;u++)s[u]=arguments[u];return a.args=[].concat(s),s.unshift(a),n.apply(this,s)};return i.__origin=n,i.__json=n.__json,i},loadStrVar:function(t,n){var r=this;if(t&&typeof t=="string"&&t.indexOf("{{")>-1&&t.indexOf("}}")>-1){var o,i=t,a=function(l){for(var s,u=/{{\s*(.*?)\s*}}/g,c={};(s=u.exec(l))!==null;)s[1]&&(c[s[1]]=!0);return Object.keys(c)}(t);if(a.forEach(function(l){var s=l.split("||"),u=s[0].trim();if(u){var c=(s[1]||"").trim(),d=n?n(u,c):r.fc.getLoadData(u,c);o=d,t=t.replaceAll("{{".concat(l,"}}"),d??"")}}),a.length===1&&i==="{{".concat(a[0],"}}"))return o}return t},loadFetchVar:function(t,n){var r=this,o=function(l){return r.loadStrVar(l,n)};if(t.action=o(t.action),t.headers){var i={};Object.keys(t.headers).forEach(function(l){i[o(l)]=o(t.headers[l])}),t.headers=i}if(t.data){var a={};Object.keys(t.data).forEach(function(l){a[o(l)]=o(t.data[l])}),t.data=a}return t}})}(Bc),function(e){Sn(e.prototype,{usePage:function(){var t=this,n=this.options.page;if(n){var r=25,o=function(i){return i.length<31?31:Math.ceil(i.length/3)}(this.rules);Bt.Object(n)&&(n.first&&(r=parseInt(n.first,10)||r),n.limit&&(o=parseInt(n.limit,10)||o)),Sn(this,{first:r,limit:o,pageEnd:this.rules.length<=r}),this.bus.$on("page-end",function(){return t.vm.emit("page-end",t.api)}),this.pageLoad()}},pageLoad:function(){var t=this;this.bus.$on(wde,function n(){t.pageEnd?(t.bus.$off(wde,n),t.bus.$emit("page-end")):(t.first+=t.limit,t.pageEnd=t.rules.length<=t.first,t.loadRule(),t.refresh())})}})}(Bc),function(e){Sn(e.prototype,{clearNextTick:function(){this.nextTick&&clearTimeout(this.nextTick),this.nextTick=null},bindNextTick:function(t){var n=this;this.clearNextTick(),this.nextTick=setTimeout(function(){t(),n.nextTick=null},10)},render:function(){return++this.loadedId,this.vm.setupState.unique>0?this.$render.render():(this.vm.setupState.unique=1,[])}})}(Bc),function(e){Sn(e.prototype,{nextRefresh:function(t){var n=this,r=this.loadedId;St(function(){r===n.loadedId&&(t?t():n.refresh())})},parseRule:function(t){var n=this,r=dde(t);return Object.defineProperties(r,{__origin__:ude(t,!0)}),function(o){var i={props:{},on:{},options:[],children:[],hidden:!1,display:!0,value:void 0};Object.keys(i).forEach(function(a){Jo(o,a)||(o[a]=i[a])})}(r),this.appendValue(r),[r,r.prefix,r.suffix].forEach(function(o){o&&n.loadFn(o,r)}),this.loadCtrl(r),r.update&&(r.update=Ud(r.update)),r},loadFn:function(t,n){var r=this;["on","props","deep"].forEach(function(o){t[o]&&r.parseInjectEvent(n,t[o])})},loadCtrl:function(t){t.control&&t.control.forEach(function(n){n.handle&&(n.handle=Ud(n.handle))})},syncProp:function(t){var n=this,r=t.rule;Bt.trueArray(r.sync)&&cp([{on:r.sync.reduce(function(o,i){return o["update:".concat(i)]=function(a){r.props[i]=a,n.vm.emit("sync",i,a,r,n.fapi)},o},{})}],t.computed)},loadRule:function(){var t=this;this.cycleLoad=!1,this.loading=!0,this.pageEnd&&this.bus.$emit("load-start"),this.deferSyncValue(function(){if(t._loadRule(t.rules),t.loading=!1,t.cycleLoad&&t.pageEnd)return t.loadRule();t.syncForm(),t.pageEnd&&t.bus.$emit("load-end"),t.vm.setupState.renderRule()})},loadChildren:function(t,n){if(this.cycleLoad=!1,this.loading=!0,this.bus.$emit("load-start"),this._loadRule(t,n),this.loading=!1,this.cycleLoad)return this.loadRule();this.syncForm(),this.bus.$emit("load-end"),this.$render.clearCache(n)},_loadRule:function(t,n){var r=this,o=function l(s){var u=t[s-1];if(!u||!u.__fc__)return s>0?l(s-1):-1;var c=r.sort.indexOf(u.__fc__.id);return c>-1?c:l(s-1)},i=function(l,s){Bt.trueArray(l)&&r._loadRule(l,s)},a=t.map(function(l,s){if((!n||Bt.Object(l))&&(r.pageEnd||n||!(s>=r.first))){if(l.__fc__&&l.__fc__.root===t&&r.ctxs[l.__fc__.id])return i(l.__fc__.loadChildrenPending(),l.__fc__),l.__fc__;var u,c=dde(l),d=function(){return!(!c.field||!r.fieldCtx[c.field]||r.fieldCtx[c.field][0]===l.__fc__)};r.fc.targetFormDriver("loadRule",{rule:c,api:r.api},r.fc),r.ruleEffect(c,"init",{repeat:d()}),d()&&r.vm.emit("repeat-field",l,r.api);var f=!1,p=!!l.__fc__,m=c.value;if(p){if(m=(u=l.__fc__).defaultValue,u.deleted){if(_de(u))return;u.update(r)}else if(!u.check(r)){if(_de(u))return;t[s]=l=l._clone?l._clone():QR(l),u=null,f=!0}}if(u)u.originType!==u.rule.type&&u.updateType(),r.bindParser(u),r.appendValue(u.rule),u.parent&&u.parent!==n&&r.rmSubRuleData(u);else{var v=r.parseRule(l);u=new xde(r,v,m),r.bindParser(u)}r.parseEmit(u),r.syncProp(u),u.parent=n||null,u.root=t,r.setCtx(u),!f&&!p&&r.effect(u,"load"),r.effect(u,"created");var g=u.loadChildrenPending();if(u.parser.loadChildren===!1||i(g,u),!n){var b=o(s);b>-1||!s?r.sort.splice(b+1,0,u.id):r.sort.push(u.id)}var y=u.rule;return u.updated||(u.updated=!0,Bt.Function(y.update)&&r.bus.$once("load-end",function(){r.refreshUpdate(u,y.value,"init")}),r.effect(u,"loaded")),r.refreshControl(u)&&(r.cycleLoad=!0),u}}).filter(function(l){return!!l});n&&(n.children=a)},refreshControl:function(t){return t.input&&t.rule.control&&this.useCtrl(t)},useCtrl:function(t){var n=this,r=function(c){var d=c.rule.control||[];return Bt.Object(d)?[d]:d}(t),o=[],i=this.api;if(!r.length)return!1;for(var a=function(c){var d=r[c],f=d.handle||function(m){return(f1[d.condition||"=="]||f1["=="])(m,d.value)};if(!Bt.trueArray(d.rule))return"continue";var p=hn(hn({},d),{},{valid:Po(function(){return f(t.rule.value,i)}),ctrl:JHe(t,d.rule),isHidden:Bt.String(d.rule[0])});if(p.valid&&p.ctrl||!p.valid&&!p.ctrl&&!p.isHidden)return"continue";o.push(p)},l=0;l<r.length;l++)a(l);if(!o.length)return!1;var s=[],u=!1;return this.deferSyncValue(function(){o.reverse().forEach(function(c){var d=c.isHidden,f=c.valid,p=c.rule,m=c.prepend,v=c.append,g=c.child,b=c.ctrl,y=c.method;if(d)return f?t.ctrlRule.push({__ctrl:!0,children:p,valid:f}):t.ctrlRule.splice(t.ctrlRule.indexOf(b),1),void s[f?"push":"unshift"](function(){y==="disabled"?n.api.disabled(!f,p):y==="display"?n.api.display(f,p):y==="required"?(p.forEach(function(_){n.api.setEffect(_,"required",f)}),f||n.api.clearValidateState(p)):n.api.hidden(!f,p)});if(f){u=!0;var w={type:"fragment",native:!0,__ctrl:!0,children:p};t.ctrlRule.push(w),n.bus.$once("load-start",function(){m?i.prepend(w,m,g):v||g?i.append(w,v||t.id,g):t.root.splice(t.root.indexOf(t.origin)+1,0,w)})}else{t.ctrlRule.splice(t.ctrlRule.indexOf(b),1);var x=_g(b);x&&x.rm()}})}),s.length&&St(function(){s.forEach(function(c){return c()})}),this.vm.emit("control",t.origin,this.api),this.effect(t,"control"),u},reloadRule:function(t){return this._reloadRule(t)},_reloadRule:function(t){var n=this;t||(t=this.rules);var r=hn({},this.ctxs);this.clearNextTick(),this.initData(t),this.fc.rules=t,this.deferSyncValue(function(){n.bus.$once("load-end",function(){Object.keys(r).filter(function(o){return n.ctxs[o]===void 0}).forEach(function(o){return n.rmCtx(r[o])}),n.$render.clearCacheAll()}),n.reloading=!0,n.loadRule(),n.reloading=!1,n.refresh(),n.bus.$emit("reloading",n.api)}),this.bus.$off("next-tick",this.nextReload),this.bus.$once("next-tick",this.nextReload),this.bus.$emit("update",this.api)},refresh:function(){this.vm.setupState.refresh()}})}(Bc),function(e){Sn(e.prototype,{setValue:function(t,n,r,o){t.deleted||(t.rule.value=n,this.changeStatus=!0,this.nextRefresh(),this.$render.clearCache(t),this.setFormData(t,r),this.syncValue(),this.valueChange(t,n),this.vm.emit("change",t.field,n,t.origin,this.api,o||!1),this.effect(t,"value"),this.emitEvent("change",t.field,n,{rule:t.origin,api:this.api,setFlag:o||!1}))},onInput:function(t,n){var r;t.input&&(this.isQuote(t,r=t.parser.toValue(n,t))||this.isChange(t,n))&&this.setValue(t,r,n)},onUpdateValue:function(t,n){var r=this;this.deferSyncValue(function(){var o=t.getParentGroup(),i=o?r.subRuleData[o.id]:null,a={};Object.keys(n||{}).forEach(function(l){i&&Jo(i,l)?a[l]=n[l]:Jo(r.api.form,l)?r.api.form[l]=n[l]:r.api.top!==r.api&&Jo(r.api.top.form,l)&&(r.api.top.form[l]=n[l])}),Object.keys(a).length&&r.api.setChildrenFormData(o.rule,a)})},onBaseInput:function(t,n){this.setFormData(t,n),t.modelValue=n,this.nextRefresh(),this.$render.clearCache(t)},setFormData:function(t,n){t.modelValue=n;var r=t.getParentGroup();r&&(this.subRuleData[r.id]||(this.subRuleData[r.id]={}),this.subRuleData[r.id][t.field]=t.rule.value),Js(this.formData,t.id,n)},rmSubRuleData:function(t){var n=t.getParentGroup();n&&this.subRuleData[n.id]&&delete this.subRuleData[n.id][t.field]},getFormData:function(t){return this.formData[t.id]},syncForm:function(){var t=this,n=Qn({}),r=this.fields();this.options.appendValue!==!1&&Object.keys(this.appendData).reduce(function(o,i){return r.indexOf(i)===-1&&(o[i]=dr(t.appendData,i)),o},n),r.reduce(function(o,i){var a=t.getCtx(i);return o[i]=dr(a.rule,"value"),o},n),this.form=n,this.syncValue()},appendValue:function(t){t.field&&Jo(this.appendData,t.field)&&(t.value=this.appendData[t.field],delete this.appendData[t.field])},addSubForm:function(t,n){this.subForm[t.id]=n},deferSyncValue:function(t,n){this.deferSyncFn||(this.deferSyncFn=t),this.deferSyncFn.sync||(this.deferSyncFn.sync=n),Po(t),this.deferSyncFn===t&&(this.deferSyncFn=null,t.sync&&this.syncForm())},syncValue:function(){if(this.deferSyncFn)return this.deferSyncFn.sync=!0;this.vm.setupState.updateValue(hn({},this.form))},isChange:function(t,n){return JSON.stringify(this.getFormData(t),Ede)!==JSON.stringify(n,Ede)},isQuote:function(t,n){return(Bt.Object(n)||Array.isArray(n))&&n===t.rule.value},refreshUpdate:function(t,n,r,o){var i=this;if(Bt.Function(t.rule.update)){var a=Po(function(){return t.rule.update(n,t.origin,i.api,{origin:r||"change",linkField:o})});if(a===void 0)return;t.rule.hidden=a===!0}},valueChange:function(t,n){this.refreshRule(t,n),this.bus.$emit("change-"+t.field,n)},refreshRule:function(t,n,r,o){this.refreshControl(t)&&(this.$render.clearCacheAll(),this.loadRule(),this.bus.$emit("update",this.api),this.refresh()),this.refreshUpdate(t,n,r,o)},appendLink:function(t){var n=this,r=t.rule.link;Bt.trueArray(r)&&r.forEach(function(o){var i=function(){return n.refreshRule(t,t.rule.value,"link",o)};n.bus.$on("change-"+o,i),t.linkOn.push(function(){return n.bus.$off("change-"+o,i)})})},fields:function(){return Object.keys(this.fieldCtx)}})}(Bc),function(e){Sn(e.prototype,{getCtx:function(t){return this.getFieldCtx(t)||this.getNameCtx(t)[0]||this.ctxs[t]},getCtxs:function(t){return this.fieldCtx[t]||this.nameCtx[t]||(this.ctxs[t]?[this.ctxs[t]]:[])},setIdCtx:function(t,n,r){var o="".concat(r,"Ctx");this[o][n]?this[o][n].push(t):this[o][n]=[t]},rmIdCtx:function(t,n,r){var o="".concat(r,"Ctx"),i=this[o][n];if(!i)return!1;var a=i.splice(i.indexOf(t)>>>0,1).length>0;return i.length||delete this[o][n],a},getFieldCtx:function(t){return(this.fieldCtx[t]||[])[0]},getNameCtx:function(t){return this.nameCtx[t]||[]},setCtx:function(t){var n=t.id,r=t.field,o=t.name,i=t.rule;this.ctxs[n]=t,o&&this.setIdCtx(t,o,"name"),t.input&&(this.setIdCtx(t,r,"field"),this.setFormData(t,t.parser.toFormValue(i.value,t)),this.isMounted&&!this.reloading&&this.vm.emit("change",t.field,i.value,t.origin,this.api))},getParser:function(t){var n=this.fc.parsers,r=this.fc.renderDriver;if(r){var o=r.parsers||{},i=o[t.originType]||o[Ic(t.type)]||o[t.trueType];if(i)return i}return n[t.originType]||n[Ic(t.type)]||n[t.trueType]||Ex},bindParser:function(t){t.setParser(this.getParser(t))},getType:function(t){var n=this.fc.CreateNode.aliasMap,r=n[t]||n[Ic(t)]||t;return Ic(r)},noWatch:function(t){this.noWatchFn||(this.noWatchFn=t),Po(t),this.noWatchFn===t&&(this.noWatchFn=null)},watchCtx:function(t){var n=this;if(nde().filter(function(o){return o[0]!=="_"&&o[0]!=="$"&&ZHe.indexOf(o)===-1}).forEach(function(o){var i=dr(t.rule,o),a=o==="children";t.refRule[o]=i,t.watch.push(Je(a?function(){return Bt.Function(i.value)?i.value:xr(i.value||[])}:function(){return i.value},function(l,s){var u=i.value;if(!n.isBreakWatch()){if(a&&t.parser.loadChildren===!1)return n.$render.clearCache(t),void n.nextRefresh();n.watching=!0,o!=="link"?(["props","on","deep"].indexOf(o)>-1?(n.parseInjectEvent(t.rule,u||{}),o==="props"&&t.input&&n.setFormData(t,t.parser.toFormValue(t.rule.value,t))):o==="emit"?n.parseEmit(t):o==="hidden"&&!!u!=!!s?n.$render.clearCacheAll():["prefix","suffix"].indexOf(o)>-1?u&&n.loadFn(u,t.rule):o==="type"?(t.updateType(),n.bindParser(t)):a&&(Bt.Function(s)&&(s=t.getPending("children",[])),Bt.Function(u)&&(u=t.loadChildrenPending()),n.updateChildren(t,u,s)),n.$render.clearCache(t),n.refresh(),n.watching=!1):t.link()}},{deep:!a,sync:a}))}),t.input){var r=dr(t.rule,"value");t.watch.push(Je(function(){return r.value},function(){var o=t.parser.toFormValue(r.value,t);n.isChange(t,o)&&n.setValue(t,r.value,o,!0)}))}this.bus.$once("load-end",function(){var o=t.rule.computed;o&&(ga(o)!=="object"&&(o={value:o}),Object.keys(o).forEach(function(i){t.watch.push(Je(function(){var a=o[i];if(a){var l;if(ga(a)==="object"){var s=t.getParentGroup(),u=function d(f){if(f=Array.isArray(f)?{mode:"AND",group:f}:f,!Bt.trueArray(f.group))return!0;for(var p=f.mode==="OR",m=!0,v=0;v<f.group.length;v++){var g=f.group[v],b=void 0;if(b=g.mode?d(g):!!f1[g.condition]&&new Function("_$","_$val","$form","_group","with($form){with(this){with(_group){ return _$['".concat(g.condition,"'](").concat(g.field,", ").concat(g.compare?g.compare:"_$val","); }}}")).call(n.api.form,f1,g.value,n.api.top.form,s&&n.subRuleData[s.id]||{}),p&&b)return!0;p||(m=m&&b)}return!p&&m}(a);return a.invert===!0?!u:u}if(Bt.Function(a))l=function(){return a(n.api.form,n.api)};else{var c=t.getParentGroup();l=function(){return new Function("_formulas","$form","_group","$rule","$api","with($form){with(this){with(_group){with(_formulas){ return ".concat(a," }}}}")).call(n.api.form,n.fc.formulas,n.api.top.form,c&&n.subRuleData[c.id]||{},t.rule,n.api)}}return Po(l,void 0)}},function(a){setTimeout(function(){i==="value"?n.onInput(t,a):i[0]==="$"?n.api.setEffect(t.id,i,a):h4(t.rule,i,a)})},{immediate:i!=="value"||[void 0,null,""].indexOf(t.rule.value)>-1}))}))}),this.watchEffect(t)},updateChildren:function(t,n,r){var o=this;this.deferSyncValue(function(){r&&r.forEach(function(i){(n||[]).indexOf(i)===-1&&i&&!Bt.String(i)&&i.__fc__&&i.__fc__.parent===t&&o.rmCtx(i.__fc__)}),Bt.trueArray(n)&&(o.loadChildren(n,t),o.bus.$emit("update",o.api))})},rmSub:function(t){var n=this;Bt.trueArray(t)&&t.forEach(function(r){r&&r.__fc__&&n.rmCtx(r.__fc__)})},rmCtx:function(t){var n=this;if(!t.deleted){var r=t.id,o=t.field,i=t.input,a=t.name;d1(this.ctxs,r),d1(this.formData,r),d1(this.subForm,r),d1(this.vm.setupState.ctxInject,r);var l=t.getParentGroup();l&&this.subRuleData[l.id]&&d1(this.subRuleData[l.id],o),t.group&&d1(this.subRuleData,r),i&&this.rmIdCtx(t,o,"field"),a&&this.rmIdCtx(t,a,"name"),i&&!Jo(this.fieldCtx,o)&&d1(this.form,o),this.deferSyncValue(function(){if(!n.reloading){if(t.parser.loadChildren!==!1){var u=t.getPending("children",t.rule.children);Bt.trueArray(u)&&u.forEach(function(c){return c.__fc__&&n.rmCtx(c.__fc__)})}t.root===n.rules&&n.vm.setupState.renderRule()}},i);var s=this.sort.indexOf(r);return s>-1&&this.sort.splice(s,1),this.$render.clearCache(t),t.delete(),this.effect(t,"deleted"),i&&!this.fieldCtx[o]&&this.vm.emit("remove-field",o,t.rule,this.api),t.rule.__ctrl||this.vm.emit("remove-rule",t.rule,this.api),t}}})}(Bc),function(e){Sn(e.prototype,{mounted:function(){var t=this,n=function(){t.isMounted=!0,t.lifecycle("mounted")};this.pageEnd?n():this.bus.$once("page-end",n)},lifecycle:function(t){this.fc.targetFormDriver(t,this.api,this.fc),this.vm.emit(t,this.api),this.emitEvent(t,this.api)},emitEvent:function(t){for(var n,r=arguments.length,o=new Array(r>1?r-1:0),i=1;i<r;i++)o[i-1]=arguments[i];var a=this.options[t]||this.options[Ic("on-"+t)];if(a){var l=Ud(a);Bt.Function(l)&&Po(function(){return l.apply(void 0,o)})}(n=this.bus).$emit.apply(n,[t].concat(o))}})}(Bc),function(e){Sn(e.prototype,{useProvider:function(){var t=this,n=this.fc.providers;Object.keys(n).forEach(function(r){var o=n[r];Bt.Function(o)&&(o=o(t.fc)),o._c=function(i){var a=i.components;if(Array.isArray(a)){var l=function(s){return s.filter(function(u,c,d){return d.indexOf(u,0)===c})}(a.filter(function(s){return s!=="*"}));return!!l.length&&l}return!!Bt.String(a)&&[a]}(o),t.onEffect(o),t.providers[r]=o})},onEffect:function(t){var n=this,r=[];(t._c||["*"]).forEach(function(o){var i=o==="*"?"*":n.getType(o);r.indexOf(i)>-1||(r.push(i),n.bus.$on("p:".concat(t.name,":").concat(i,":").concat(t.input?1:0),function(a,l){t[a]&&t[a].apply(t,xr(l))}))}),t._used=r},watchEffect:function(t){var n=this,r={required:function(){var o,i;return(Jo(t.rule,"$required")?t.rule.$required:(o=t.rule)===null||o===void 0||(i=o.effect)===null||i===void 0?void 0:i.required)||!1}};Object.keys(t.rule.effect||{}).forEach(function(o){r[o]=function(){return t.rule.effect[o]}}),Object.keys(t.rule).forEach(function(o){o[0]==="$"&&(r[o.substr(1)]=function(){return t.rule[o]})}),Object.keys(r).forEach(function(o){t.watch.push(Je(r[o],function(i){n.effect(t,"watch",Xi({},o,i))},{deep:!0}))})},ruleEffect:function(t,n,r){this.emitEffect({rule:t,input:!!t.field,type:this.getType(t.type)},n,r)},effect:function(t,n,r){this.emitEffect({rule:t.rule,input:t.input,type:t.trueType,ctx:t,custom:r},n)},getEffect:function(t,n){return Jo(t,"$"+n)?t["$"+n]:Jo(t,"effect")&&Jo(t.effect,n)?t.effect[n]:void 0},emitEffect:function(t,n,r){var o=this,i=t.ctx,a=t.rule,l=t.input,s=t.type,u=t.custom;if(s&&!(["fcFragment","fragment"].indexOf(s)>-1)){var c=u||Object.keys(a).reduce(function(d,f){return f[0]==="$"&&(d[f.substr(1)]=a[f]),d},hn({},a.effect||{}));Object.keys(c).forEach(function(d){var f=o.providers[d];if(f&&(!f.input||l)){var p;if(f._c){if(!(f._used.indexOf(s)>-1))return;p=s}else p="*";var m=hn({value:c[d],getValue:function(){return o.getEffect(a,d)}},r||{});i&&(m.getProp=function(){return i.effectData(d)},m.clearProp=function(){return i.clearEffectData(d)},m.mergeProp=function(v){return dp(m.getProp(),[v])},m.id=i.id),o.bus.$emit("p:".concat(d,":").concat(p,":").concat(f.input?1:0),n,[m,a,o.api])}})}}})}(Bc);var nI=Te({name:"fcFragment",inheritAttrs:!1,props:["vnode"],render:function(){return this.vnode}});function Cde(e,t){var n=e.directives;return n?(Array.isArray(n)||(n=[n]),nn(t,n.reduce(function(r,o){return r.concat(function(i){return Object.keys(i).map(function(a){var l=i[a],s=gm(a);if(s)return[s,l.value,l.arg,l.modifiers]}).filter(function(a){return!!a})}(o))},[]))):t}function e$e(e){var t=function(){(function(o,i){if(typeof i!="function"&&i!==null)throw new TypeError("Super expression must either be null or a function");o.prototype=Object.create(i&&i.prototype,{constructor:{value:o,writable:!0,configurable:!0}}),i&&UR(o,i)})(r,Sde);var n=bHe(r);function r(){return function(o,i){if(!(o instanceof i))throw new TypeError("Cannot call a class as a function")}(this,r),n.apply(this,arguments)}return r}();return Object.assign(t.prototype,e),t}function Sde(e){Sn(this,{$handle:e,vm:e.vm,options:{},ref:"fcForm",mergeOptionsRule:{normal:["form","row","info","submitBtn","resetBtn"]}}),this.updateKey(),this.init()}Sn(Sde.prototype,{__init:function(){var e=this;this.$render=this.$handle.$render,this.$r=function(){var t;return(t=e.$render).renderRule.apply(t,arguments)}},updateKey:function(){this.key=_x()},init:function(){},update:function(){},beforeRender:function(){},form:function(){return this.vm.refs[this.ref]},getSlot:function(e){return function t(n){if(n){var r=n.slots[e];return r||t(n.setupState.parent)}}(this.vm)},mergeOptions:function(e,t){var n=this;return cp(e.map(function(r){return n.tidyOptions(r)}),t,this.mergeOptionsRule)},updateOptions:function(e){this.$handle.fc.targetFormDriver("updateOptions",e,{handle:this.$handle,api:this.$handle.api}),this.options=this.mergeOptions([e],this.getDefaultOptions()),this.update()},tidyOptions:function(e){return e},tidyRule:function(e){},mergeProp:function(e){},getDefaultOptions:function(){return{}},render:function(e){}});var rI={name:"componentValidate",load:function(e,t,n){var r=e.getValue();r?e.getProp().validate=[{validator:function(){var o=_g(t);if(o){for(var i=arguments.length,a=new Array(i),l=0;l<i;l++)a[l]=arguments[l];return n.exec.apply(n,[o.id,r===!0?"formCreateValidate":r].concat(a,[{attr:e,rule:t,api:n}]))}}}]:(e.clearProp(),n.clearValidateState([t.field]))},watch:function(){rI.load.apply(rI,arguments)}},t$e={fetch:function(e){function t(r,o,i){var a=r.value;n.deleted(r),Bt.Function(a)&&(a=a(o,i)),a=function(d){return Bt.String(d)&&(d={action:d,to:"options"}),d}(a);var l=function(d){d===void 0?r.clearProp():h4(r.getProp(),a.to||"options",d),i.sync(o)};if(a&&(a.action||a.key)){if((a=Zs(a)).to||(a.to="options"),a.key){var s=e.$handle.options.globalData[a.key];if(!s)return void l(void 0);if(s.type==="static")return void l(s.data);a=hn(hn({},a),s)}var u=a.onError,c=function(){if(!r.getValue())return r.clearProp(),i.sync(o),!0};n._fn[r.id]=e.watchLoadData(xg(function(d,f){if(f&&a.watch===!1)return n._fn[r.id]();var p=e.$handle.loadFetchVar(Zs(a),d),m=hn(hn({headers:{}},p),{},{onSuccess:function(v,g){if(!c()){var b=function(w){return g?w:Jo(w,"data")?w.data:w},y=Ud(p.parse);Bt.Function(y)?b=y:y&&Bt.String(y)&&(b=function(w){return p1(w,y)}),l(b(v,o,i)),i.sync(o)}},onError:function(v){l(void 0),c()||(u||function(g){return KR(g.message||"fetch fail "+p.action)})(v,o,i)}});e.$handle.beforeFetch(m,{rule:o,api:i}).then(function(){Bt.Function(p.action)?p.action(o,i).then(function(v){m.onSuccess(v,!0)}).catch(function(v){m.onError(v)}):Po(function(){return e.create.fetch(m,{inject:r,rule:o,api:i})})})},a.wait||600))}else l(void 0)}var n={name:"fetch",_fn:[],mounted:function(){t.apply(void 0,arguments)},watch:function(){t.apply(void 0,arguments)},deleted:function(r){this._fn[r.id]&&this._fn[r.id](),r.clearProp()}};return n},loadData:function(e){var t={name:"loadData",_fn:[],mounted:function(n,r,o){this.deleted(n);var i=Fl(n.getValue()),a=[];i.forEach(function(l){if(l&&(l.attr||l.template)){var s=e.watchLoadData(xg(function(u){var c;c=l.template?e.$handle.loadStrVar(l.template,u):u(l.attr,l.default),l.copy!==!1&&(c=Zs(c));var d=l.modify?r:n.getProp();l.to==="child"?d.children?d.children[0]=c:d.children=[c]:h4(d,l.to||"options",c),o.sync(r)},l.wait||300));l.watch!==!1?a.push(s):s()}}),this._fn[n.id]=a},deleted:function(n){this._fn[n.id]&&this._fn[n.id].forEach(function(r){r()}),n.clearProp()}};return t.watch=t.created,t},componentValidate:rI},n$e={name:"html",loadChildren:!1,render:function(e,t){return t.prop.props.innerHTML=e.default(),t.vNode.make(t.prop.props.tag||"div",t.prop)},renderChildren:function(e){return{default:function(){return e.filter(function(t){return Bt.String(t)}).join("")}}}};function r$e(e){e+="=";for(var t=decodeURIComponent(document.cookie).split(";"),n=0;n<t.length;n++){for(var r=t[n];r.charAt(0)===" ";)r=r.substring(1);if(r.indexOf(e)===0){r=r.substring(e.length,r.length);try{return JSON.parse(r)}catch{return r}}}return null}function o$e(e){var t=localStorage.getItem(e);if(t)try{return JSON.parse(t)}catch{return t}return null}function kde(e,t){if(!t)return null;var n=t.split("."),r=e(n.shift());return n.length?r==null?null:p1(r,n):r}function i$e(e){return kde(r$e,e)}function a$e(e){return kde(o$e,e)}function l$e(e,t){var n;return arguments.length===2?t=(n=arguments[1])[e]:n=arguments[2],{id:t,prop:n}}function oI(){return l$e.apply(void 0,["name"].concat(Array.prototype.slice.call(arguments)))}var s$e=1,eu={};function Dde(e){var t,n=Xi({},nI.name,nI),r={},o={},i={},a={},l=[],s=[],u=[e.extendApi],c=hn({},t$e),d={create:YHe,factory:Oa},f={global:{}},p=Qn({}),m=function(){var ne={};function se(){}return Sn(se.prototype,{make:function(le,J,Z){return Cde(J,this.h(le,pde(J),Z))},makeComponent:function(le,J,Z){try{return Cde(J,ie(le,pde(J),Z))}catch(ye){return console.error(ye),ie("")}},h:function(le,J,Z){var ye=dn().appContext.config.isNativeTag(le);ye&&delete J.formCreateInject;try{return ie(ye?le:Qe(le),J,Z)}catch(be){return console.error(be),ie("")}},aliasMap:ne}),Sn(se,{aliasMap:ne,alias:function(le,J){ne[le]=J},use:function(le){Object.keys(le).forEach(function(J){var Z=d4(J),ye=Ade(J).toLocaleLowerCase(),be=le[J];[J,Z,ye].forEach(function(ve){se.alias(J,be),se.prototype[ve]=function(Ae,Ce){return this.make(be,Ae,Ce)}})})}}),se}(),v={},g=e.isMobile===!0;function b(ne){var se=eu[ne];return Array.isArray(se)?se.map(function(le){return le.api()}):se?se.api():void 0}function y(ne){l.push(ne)}function w(){var ne=oI.apply(void 0,arguments);ne.id&&ne.prop&&(o[ne.id]=ne.prop)}function x(){var ne=oI.apply(void 0,arguments);ne.id&&ne.prop&&(c[ne.id]=hn(hn({},ne.prop),{},{name:ne.id}))}function _(ne){m.use(ne)}function E(){var ne=oI.apply(void 0,arguments);if(!ne.id||!ne.prop)return Ex;var se=Ic(ne.id),le=ne.prop,J=le.merge===!0?r[se]:void 0;r[se]=ZR(le,J||Ex),d[se]=Oa(se),le.maker&&Sn(d,le.maker)}function C(ne,se){var le;if(Bt.String(ne)){if(le=ne,se===void 0)return n[le]}else le=ne.displayName||ne.name,se=ne;if(le&&se){var J=Ic(le);n[le]=se,n[J]=se,delete m.aliasMap[le],delete m.aliasMap[J],delete r[le],delete r[J],se.formCreateParser&&E(le,se.formCreateParser)}}function T(){return WHe(W,n,o)}function k(){return nI}function I(ne,se){return Bt.Function(ne.install)?ne.install(O,se):Bt.Function(ne)&&ne(O,se),this}function O(ne,se){var le=function(Z,ye){var be=T();return K7({data:function(){return Qn({rule:Z,option:ye})},render:function(){return pn(be,hn({ref:"fc"},this.$data))}})}(ne,se||{});l.forEach(function(Z){Po(function(){return Z(O,le)})});var J=document.createElement("div");return((se==null?void 0:se.el)||document.body).appendChild(J),le.mount(J).$refs.fc.fapi}function F(ne){var se=hn({},e);return ne?se.inherit={components:n,parsers:r,directives:o,modelFields:i,providers:c,useApps:l,maker:d,formulas:v,loadData:p}:delete se.inherit,Dde(se)}function N(ne,se){i[ne]=se}function B(ne,se){v[ne]=se}function P(ne,se){var le=a[ne]||{},J=le.parsers||{};se.parsers&&Object.keys(se.parsers).forEach(function(Z){J[Z]=ZR(se.parsers[Z],Ex)}),se.name=ne,a[ne]=hn(hn(hn({},le),se),{},{parsers:J})}function V(ne){ne&&Object.keys(eu).forEach(function(se){(Array.isArray(eu[se])?eu[se]:[eu[se]]).forEach(function(le){le.bus.$emit("$loadData."+ne)})})}function L(ne,se){p[ne]=se,V(ne)}function H(ne,se){var le=function(){for(var J=arguments.length,Z=new Array(J),ye=0;ye<J;ye++)Z[ye]=arguments[ye];return Po(function(){return se.apply(void 0,Z)})};le._driver=!0,L(ne,le)}function U(ne,se){var le=(ne||"").split(".");ne=le.shift();var J=le.join(".");if(Jo(p,ne)){var Z=p[ne];return Z&&Z._driver?Z=Z(J):le.length&&(Z=p1(Z,le)),Z==null||Z===""?se:Z}return se}function G(ne){u.push(ne)}function z(ne){delete p[ne],V(ne)}function $(ne,se){s.push({name:ne,callback:se})}function W(ne){var se=this;Sn(this,{id:s$e++,create:O,vm:ne,manager:e$e(e.manager),parsers:r,providers:c,modelFields:i,formulas:v,isMobile:g,rules:ne.props.rule,name:ne.props.name||_x(),inFor:ne.props.inFor,prop:{components:n,directives:o},drivers:a,renderDriver:null,setData:L,getData:U,refreshData:V,loadData:p,CreateNode:m,bus:new $ce,unwatch:[],options:de({}),extendApiFn:u,fetchCache:new WeakMap}),s.forEach(function(le){se.bus.$on(le.name,le.callback)}),St(function(){Je(se.options,function(){se.$handle.$manager.updateOptions(se.options.value),se.api().refresh()},{deep:!0})}),Sn(ne.appContext.components,n),Sn(ne.appContext.directives,o),this.$handle=new Bc(this),this.name&&(this.inFor?(eu[this.name]||(eu[this.name]=[]),eu[this.name].push(this)):eu[this.name]=this)}function K(ne){Sn(ne,{version:e.version,ui:e.ui,extendApi:G,getData:U,setDataDriver:H,setData:L,removeData:z,refreshData:V,maker:d,component:C,directive:w,setModelField:N,setFormula:B,setDriver:P,register:x,$vnode:k,parser:E,use:I,factory:F,componentAlias:_,copyRule:QR,copyRules:cde,fetch:gde,$form:T,parseFn:Ud,parseJson:qHe,toJson:lde,useApp:y,getApi:b,on:$})}if(function(ne){var se=ne.key||[],le=ne.array||[],J=ne.normal||[];qR.push.apply(qR,xr(se)),wx.push.apply(wx,xr(le)),xx.push.apply(xx,xr(J)),vde([].concat(xr(se),xr(le),xr(J)))}(e.attrs||{}),W.isMobile=g,Sn(W.prototype,{init:function(){var ne=this;this.isSub()&&this.unwatch.push(Je(function(){return ne.vm.setupState.parent.setupState.fc.options.value},function(){ne.initOptions(),ne.$handle.api.refresh()},{deep:!0})),this.vm.props.driver&&(this.renderDriver=ga(this.vm.props.driver)==="object"?this.vm.props.driver:this.drivers[this.vm.props.driver]),!this.renderDriver&&this.vm.setupState.parent&&(this.renderDriver=this.vm.setupState.parent.setupState.fc.renderDriver),this.renderDriver||(this.renderDriver=this.drivers.default),this.initOptions(),this.$handle.init()},targetFormDriver:function(ne){for(var se=this,le=arguments.length,J=new Array(le>1?le-1:0),Z=1;Z<le;Z++)J[Z-1]=arguments[Z];if(this.renderDriver&&this.renderDriver[ne])return Po(function(){var ye;return(ye=se.renderDriver)[ne].apply(ye,J)})},globalDataDriver:function(ne){var se=this,le=ne.split("."),J=le.shift(),Z=this.options.value.globalData&&this.options.value.globalData[J];if(Z){if(Z.type==="static")return p1(Z.data,le);var ye,be=this.fetchCache.get(Z);if(be){if(be.status&&(ye=p1(be.data,le)),!be.loading)return ye;be.loading=!1,this.fetchCache.set(Z,be)}else this.fetchCache.set(Z,{status:!1});var ve=xg(function(){Ce();var _e=se.fetchCache.get(Z);se.options.value.globalData&&Object.values(se.options.value.globalData).indexOf(Z)!==-1?(_e&&(_e.loading=!0,se.fetchCache.set(Z,_e)),se.bus.$emit("$loadData.$globalData."+J)):se.fetchCache.delete(Z)},Z.wait||600),Ae=function(_e){se.fetchCache.set(Z,{status:!0,data:_e}),se.bus.$emit("$loadData.$globalData."+J)},Ce=this.watchLoadData(function(_e,ke){if(ke&&Z.watch===!1)return Ce();if(ke)ve();else{var Be=se.$handle.loadFetchVar(GR(Z),_e);se.$handle.api.fetch(Be).then(function($e){Ae($e)}).catch(function($e){Ae(null)})}});return this.unwatch.push(Ce),ye}},globalVarDriver:function(ne){var se=this,le=ne.split(".").shift(),J=this.options.value.globalVariable&&this.options.value.globalVariable[le];if(J){var Z=Bt.Function(J)?J:J.handle;if(Z){var ye,be=this.watchLoadData(function(ve,Ae){if(Ae)return be(),se.bus.$emit("$loadData.$var."+le),ye;ye=Po(function(){return Z(ve,se.$handle.api)})});return this.unwatch.push(be),ye}}},getLoadData:function(ne,se){var le=null;if(ne!=null){var J=ne.split("."),Z=J.shift();Z==="$form"?le=this.$handle.api.top.formData():Z==="$subForm"?le=this.$handle.api.formData():Z==="$options"?le=this.options.value:Z==="$globalData"?(le=this.globalDataDriver(J.join(".")),J=[]):Z==="$var"?(le=this.globalVarDriver(J.join(".")),J=[]):(le=U(ne,se),J=[]),J.length&&(le=p1(le,J))}return le==null||le===""?se:le},watchLoadData:function(ne){var se=this,le={},J=function(be){Po(function(){ne(Z,be)})},Z=function(be,ve){if(le[be])return le[be].val;var Ae=se.getLoadData(be,ve),Ce=be.split("."),_e=Ce.shift(),ke=Ce.shift()||"",Be=xg(function(){if(_e!==be){var $e=se.getLoadData(be,ve);JSON.stringify($e)!==JSON.stringify(le[be].val)&&(le[be].val=$e,J(!0))}else J(!0)},0);return se.bus.$on("$loadData."+_e,Be),ke&&se.bus.$on("$loadData."+_e+"."+ke,Be),le[be]={fn:function(){se.bus.$off("$loadData."+_e,Be),ke&&se.bus.$off("$loadData."+_e+"."+ke,Be)},val:Ae},Ae};J(!1);var ye=function(){Object.keys(le).forEach(function(be){return le[be].fn()}),le={}};return this.unwatch.push(ye),ye},isSub:function(){return this.vm.setupState.parent&&this.vm.props.extendOption},initOptions:function(){this.options.value={};var ne=hn({formData:{},submitBtn:{},resetBtn:{},globalEvent:{},globalData:{}},Zs(f));this.isSub()&&(ne=this.mergeOptions(ne,this.vm.setupState.parent.setupState.fc.options.value||{},!0)),ne=this.mergeOptions(ne,this.vm.props.option),this.updateOptions(ne)},mergeOptions:function(ne,se,le){return se=Zs(se),le&&["page","onSubmit","mounted","reload","formData","el","globalClass","style"].forEach(function(J){delete se[J]}),se.global&&(ne.global=function(J,Z){return J?(Object.keys(Z||{}).forEach(function(ye){Z[ye]&&(J[ye]=dp(J[ye]||{},Z[ye]))}),J):Z}(ne.global,se.global),delete se.global),this.$handle.$manager.mergeOptions([se],ne),ne},updateOptions:function(ne){this.options.value=this.mergeOptions(this.options.value,ne),this.$handle.$manager.updateOptions(this.options.value),this.bus.$emit("$loadData.$options")},api:function(){return this.$handle.api},render:function(){return this.$handle.render()},mounted:function(){this.$handle.mounted()},unmount:function(){var ne=this;if(this.name)if(this.inFor){var se=eu[this.name].indexOf(this);eu[this.name].splice(se,1)}else delete eu[this.name];s.forEach(function(le){ne.bus.$off(le.name,le.callback)}),this.unwatch.forEach(function(le){return le()}),this.unwatch=[],this.$handle.reloadRule([])},updated:function(){var ne=this;this.$handle.bindNextTick(function(){return ne.bus.$emit("next-tick",ne.$handle.api)})}}),K(O),Sn(t=O,{create:O,isMobile:g,install:function(ne,se){f=hn(hn({},f),se||{});var le="_installedFormCreate_"+e.ui;if(ne[le]!==!0){ne[le]=!0;var J=function(ye){return O(ye,arguments.length>1&&arguments[1]!==void 0?arguments[1]:{})};K(J),ne.config.globalProperties.$formCreate=J;var Z=T();ne.component(Z.name,Z),l.forEach(function(ye){Po(function(){return ye(t,ne)})})}}}),H("$cookie",i$e),H("$localStorage",a$e),m.use({fragment:"fcFragment"}),e.install&&O.use(e),y(function(ne,se){se.mixin({props:["formCreateInject"]})}),E(n$e),e.inherit){var X=e.inherit;X.components&&Sn(n,X.components),X.parsers&&Sn(r,X.parsers),X.directives&&Sn(o,X.directives),X.modelFields&&Sn(i,X.modelFields),X.providers&&Sn(c,X.providers),X.useApps&&Sn(l,X.useApps),X.maker&&Sn(d,X.maker),X.loadData&&Sn(p,X.loadData),X.formulas&&Sn(v,X.formulas)}var te=T();return ZR(te,O),Object.defineProperties(te,{fetch:{get:function(){return O.fetch},set:function(ne){O.fetch=ne}}}),te.util=O,te}var iI,Ode={date:"YYYY-MM-DD",month:"YYYY-MM",datetime:"YYYY-MM-DD HH:mm:ss",timerange:"HH:mm:ss",daterange:"YYYY-MM-DD",monthrange:"YYYY-MM",datetimerange:"YYYY-MM-DD HH:mm:ss",year:"YYYY"},Tde="datePicker",u$e={name:Tde,maker:["year","month","date","dates","week","datetime","datetimeRange","dateRange","monthRange"].reduce(function(e,t){return e[t]=Oa(Tde,{type:t.toLowerCase()}),e},{}),mergeProp:function(e){var t=e.prop.props;t.valueFormat||(t.valueFormat=Ode[t.type]||Ode.date)}},aI="hidden",c$e={name:aI,maker:Xi({},aI,function(e,t){return Oa(aI)("",e,t)}),render:function(){return[]}},lI="input",d$e={name:lI,maker:(iI=["password","url","email","text","textarea"].reduce(function(e,t){return e[t]=Oa(lI,{type:t}),e},{}),iI.idate=Oa(lI,{type:"date"}),iI),mergeProp:function(e){var t=e.prop.props;t&&t.autosize&&t.autosize.minRows&&(t.rows=t.autosize.minRows||2)}},Mde="slider",f$e={name:Mde,maker:{sliderRange:Oa(Mde,{range:!0})},toFormValue:function(e,t){var n=Array.isArray(e),r=t.prop.props,o=r.min||0;return r.range===!0?n?e:[o,parseFloat(e)||o]:n?parseFloat(e[0])||o:parseFloat(e)}},sI="timePicker",p$e={name:sI,maker:{time:Oa(sI,function(e){return e.props.isRange=!1}),timeRange:Oa(sI,function(e){return e.props.isRange=!0})},mergeProp:function(e){var t=e.prop.props;t.valueFormat||(t.valueFormat="HH:mm:ss")}},h$e=[u$e,c$e,d$e,f$e,p$e,{name:"FcRow",render:function(e,t){return t.vNode.col({props:{span:24}},{default:function(){return[t.vNode.row(t.prop,e)]}})}},{name:"select",toFormValue:function(e,t){return t.prop.props.multiple&&!Array.isArray(e)?Fl(e):e}}],v$e={button:"el-button",icon:"el-icon",slider:"el-slider",rate:"el-rate",upload:"fc-upload",cascader:"el-cascader",popover:"el-popover",tooltip:"el-tooltip",colorPicker:"el-colorPicker",timePicker:"el-time-picker",timeSelect:"el-time-select",datePicker:"el-date-picker",switch:"el-switch",select:"fc-select",checkbox:"fc-checkbox",radio:"fc-radio",inputNumber:"el-input-number",number:"el-input-number",input:"el-input",formItem:"el-form-item",form:"el-form",frame:"fc-frame",col:"el-col",row:"el-row",tree:"fc-tree",autoComplete:"el-autocomplete",auto:"el-autocomplete",group:"fc-group",object:"fc-sub-form",subForm:"fc-sub-form"};function Nde(e,t){var n;Jo(e,t)&&Bt.String(e[t])&&(e[t]=(Xi(n={},t,e[t]),Xi(n,"show",!0),n))}function Wd(e){return e===!1}function uI(e){var t=hn({},e);return delete t.children,t}var m$e={validate:function(){var e=this.form();return e?e.validate():new Promise(function(t){return t()})},validateField:function(e){var t=this;return new Promise(function(n,r){var o=t.form();o?o.validateField(e,function(i,a){a?r(a):n(i)}):n()})},clearValidateState:function(e){var t=this.vm.refs[e.wrapRef];t&&t.clearValidate()},tidyOptions:function(e){return["submitBtn","resetBtn","row","info","wrap","col","title"].forEach(function(t){(function(n,r){Jo(n,r)&&!Bt.Object(n[r])&&(n[r]={show:!!n[r]})})(e,t)}),e},tidyRule:function(e){var t=e.prop;return Nde(t,"title"),Nde(t,"info"),t},mergeProp:function(e){e.prop=cp([{info:this.options.info||{},wrap:this.options.wrap||{},col:this.options.col||{},title:this.options.title||{}},e.prop],{info:{trigger:"hover",placement:"top-start",icon:!0},title:{},col:{span:24},wrap:{}},{normal:["title","info","col","wrap"]})},getDefaultOptions:function(){return{form:{inline:!1,labelPosition:"right",labelWidth:"125px",disabled:!1,size:void 0},row:{show:!0,gutter:0},submitBtn:{type:"primary",loading:!1,disabled:!1,innerText:"\u63D0\u4EA4",show:!0,col:void 0,click:void 0},resetBtn:{type:"default",loading:!1,disabled:!1,innerText:"\u91CD\u7F6E",show:!1,col:void 0,click:void 0}}},update:function(){var e=this.options.form;this.rule={props:hn({},e),on:{submit:function(t){t.preventDefault()}},class:[e.className,e.class,"form-create",this.options.preview?"is-preview":""],style:e.style,type:"form"}},beforeRender:function(){var e=this.key,t=this.ref,n=this.$handle;Sn(this.rule,{key:e,ref:t}),Sn(this.rule.props,{model:n.formData})},render:function(e){var t=this;return e.slotLen()&&!this.options.preview&&e.setSlot(void 0,function(){return t.makeFormBtn()}),this.$r(this.rule,Wd(this.options.row.show)?e.getSlots():[this.makeRow(e)])},makeWrap:function(e,t){var n=this,r=e.prop,o="".concat(this.key).concat(e.key),i=r.col,a=this.isTitle(r)&&r.wrap.title!==!1,l=i.labelWidth||a?i.labelWidth:0,s=this.rule.props,u=s.inline,c=s.col;delete r.wrap.title;var d=Wd(r.wrap.show)?t:this.$r(cp([r.wrap,{props:hn(hn({labelWidth:l===void 0?l:Ade(l),label:a?r.title.title:void 0},uI(r.wrap||{})),{},{prop:e.id,rules:e.injectValidate()}),class:r.className,key:"".concat(o,"fi"),ref:e.wrapRef,type:"formItem"}]),hn({default:function(){return t}},a?{label:function(){return n.makeInfo(r,o,e)}}:{}));return u===!0||Wd(c)||Wd(i.show)?d:this.makeCol(r,o,[d])},isTitle:function(e){if(this.options.form.title===!1)return!1;var t=e.title;return!(!t.title&&!t.native||Wd(t.show))},makeInfo:function(e,t,n){var r=this,o=hn({},e.title),i=hn({},e.info),a=i.type==="tooltip",l=this.options.form,s=this.getSlot("title"),u=[s?s({title:o.title||"",rule:n.rule,options:this.options}):(o.title||"")+(l.labelSuffix||l["label-suffix"]||"")];if(!Wd(i.show)&&(i.info||i.native)&&!Wd(i.icon)){var c={type:i.type||"popover",props:uI(i),key:"".concat(t,"pop")};delete c.props.icon,delete c.props.show,delete c.props.info,delete c.props.align,delete c.props.native;var d="content";i.info&&!Jo(c.props,d)&&(c.props[d]=i.info),u[i.align!=="left"?"unshift":"push"](this.$r(cp([i,c]),Xi({},o.slot||(a?"default":"reference"),function(){return r.$r({type:"ElIcon",style:"top:2px",key:"".concat(t,"i")},{default:function(){return r.$r({type:i.icon===!0?"icon-warning":i.icon})}},!0)})))}var f=cp([o,{props:uI(o),key:"".concat(t,"tit"),type:o.type||"span"}]);return delete f.props.show,delete f.props.title,delete f.props.native,this.$r(f,u)},makeCol:function(e,t,n){var r=e.col;return this.$r({class:r.class,type:"col",props:r||{span:24},key:"".concat(t,"col")},n)},makeRow:function(e){var t=this.options.row||{};return this.$r({type:"row",props:t,class:t.class,key:"".concat(this.key,"row")},e)},makeFormBtn:function(){var e=[];if(Wd(this.options.submitBtn.show)||e.push(this.makeSubmitBtn()),Wd(this.options.resetBtn.show)||e.push(this.makeResetBtn()),e.length){var t=this.$r({type:"formItem",key:"".concat(this.key,"fb")},e);return this.rule.props.inline===!0?t:this.$r({type:"col",props:{span:24},key:"".concat(this.key,"fc")},[t])}},makeResetBtn:function(){var e=this,t=hn({},this.options.resetBtn),n=t.innerText;return delete t.innerText,delete t.click,delete t.col,delete t.show,this.$r({type:"button",props:t,class:"_fc-reset-btn",style:{width:t.width},on:{click:function(){var r=e.$handle.api;e.options.resetBtn.click?e.options.resetBtn.click(r):r.resetFields()}},key:"".concat(this.key,"b2")},[n])},makeSubmitBtn:function(){var e=this,t=hn({},this.options.submitBtn),n=t.innerText;return delete t.innerText,delete t.click,delete t.col,delete t.show,this.$r({type:"button",props:t,class:"_fc-submit-btn",style:{width:t.width},on:{click:function(){var r=e.$handle.api;e.options.submitBtn.click?e.options.submitBtn.click(r):r.submit().catch(function(){})}},key:"".concat(this.key,"b1")},[n])}},h1={};(function(e){["group","tree","switch","upload","autoComplete","checkbox","cascader","colorPicker","datePicker","frame","inputNumber","radio","rate"].forEach(function(t){e[t]=Oa(t)}),e.auto=e.autoComplete,e.number=e.inputNumber,e.color=e.colorPicker})(h1),function(e){var t="select",n="multiple";e.selectMultiple=Oa(t,Xi({},n,!0)),e.selectOne=Oa(t,Xi({},n,!1))}(h1),function(e){var t={treeSelected:"selected",treeChecked:"checked"};Object.keys(t).reduce(function(n,r){return n[r]=Oa("tree",{type:t[r]}),n},e)}(h1),function(e){var t={image:["image",0],file:["file",0],uploadFileOne:["file",1],uploadImageOne:["image",1]};Object.keys(t).reduce(function(n,r){return n[r]=Oa("upload",function(o){return o.props({uploadType:t[r][0],maxLength:t[r][1]})}),n},e),e.uploadImage=e.image,e.uploadFile=e.file}(h1),function(e){var t={frameInputs:["input",0],frameFiles:["file",0],frameImages:["image",0],frameInputOne:["input",1],frameFileOne:["file",1],frameImageOne:["image",1]};Object.keys(t).reduce(function(n,r){return n[r]=Oa("frame",function(o){return o.props({type:t[r][0],maxLength:t[r][1]})}),n},e),e.frameInput=e.frameInputs,e.frameFile=e.frameFiles,e.frameImage=e.frameImages}(h1);function Fde(e,t){return Bt.Boolean(e)?e={show:e}:Bt.Undef(e)||Bt.Object(e)||(e={show:t}),e}function g$e(e,t){return{formEl:function(){return t.$manager.form()},wrapEl:function(n){var r=t.getFieldCtx(n);if(r)return t.vm.refs[r.wrapRef]},validate:function(n){return new Promise(function(r,o){var i=e.children,a=[t.$manager.validate()];i.forEach(function(l){a.push(l.validate())}),Promise.all(a).then(function(){r(!0),n&&n(!0)}).catch(function(l){o(l),n&&n(l),t.vm.emit("validate-fail",l,{api:e})})})},validateField:function(n,r){return new Promise(function(o,i){var a=t.getFieldCtx(n);if(a){var l=t.subForm[a.id],s=[t.$manager.validateField(a.id)];Fl(l).forEach(function(u){s.push(u.validate())}),Promise.all(s).then(function(){o(null),r&&r(null)}).catch(function(u){i(u),r&&r(u),t.vm.emit("validate-field-fail",u,{field:n,api:e})})}})},clearValidateState:function(n){var r=this,o=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];e.helper.tidyFields(n).forEach(function(i){o&&r.clearSubValidateState(i),t.getCtxs(i).forEach(function(a){t.$manager.clearValidateState(a)})})},clearSubValidateState:function(n){e.helper.tidyFields(n).forEach(function(r){t.getCtxs(r).forEach(function(o){var i=t.subForm[o.id];i&&(Array.isArray(i)?i.forEach(function(a){a.clearValidateState()}):i&&i.clearValidateState())})})},btn:{loading:function(){var n=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];e.submitBtnProps({loading:!!n})},disabled:function(){var n=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];e.submitBtnProps({disabled:!!n})},show:function(){var n=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];e.submitBtnProps({show:!!n})}},resetBtn:{loading:function(){var n=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];e.resetBtnProps({loading:!!n})},disabled:function(){var n=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];e.resetBtnProps({disabled:!!n})},show:function(){var n=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];e.resetBtnProps({show:!!n})}},submitBtnProps:function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=Fde(t.options.submitBtn,!0);Sn(r,n),t.options.submitBtn=r,e.refreshOptions()},resetBtnProps:function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=Fde(t.options.resetBtn,!1);Sn(r,n),t.options.resetBtn=r,e.refreshOptions()},submit:function(n,r){return new Promise(function(o,i){e.validate().then(function(){var a=e.formData();Bt.Function(n)&&Po(function(){return n(a,e)}),Bt.Function(t.options.onSubmit)&&Po(function(){return t.options.onSubmit(a,e)}),t.vm.emit("submit",a,e),o(a)}).catch(function(){for(var a=arguments.length,l=new Array(a),s=0;s<a;s++)l[s]=arguments[s];Bt.Function(r)&&Po(function(){return r.apply(void 0,[e].concat(l))}),i.apply(void 0,l)})})}}}bx(".form-create .form-create .el-form-item{margin-bottom:22px}.form-create{width:100%}.form-create .fc-none,.form-create.is-preview .el-form-item.is-required>.el-form-item__label-wrap>.el-form-item__label:before,.form-create.is-preview .el-form-item.is-required>.el-form-item__label:before,.form-create.is-preview .fc-clock{display:none!important}.fc-wrap-left .el-form-item__label{justify-content:flex-start;justify-content:flex-end}.fc-wrap-top.el-form-item{display:block}.fc-wrap-top.el-form-item .el-form-item__label{display:block;height:auto;line-height:22px;margin-bottom:8px;text-align:left}.el-form--large .fc-wrap-top.el-form-item .el-form-item__label{line-height:22px;margin-bottom:12px}.el-form--default .fc-wrap-top.el-form-item .el-form-item__label{line-height:22px;margin-bottom:8px}.el-form--small .fc-wrap-top.el-form-item .el-form-item__label{line-height:20px;margin-bottom:4px}");var cI={name:"required",load:function(e,t,n){var r=function(a){return Bt.Boolean(a)?{required:a}:Bt.String(a)?{message:a}:Bt.Undef(a)?{required:!1}:Bt.Function(a)?{validator:a}:Bt.Object(a)?a:{}}(e.getValue());if(r.required===!1)e.clearProp(),n.clearValidateState([t.field]);else{var o=hn({required:!0,validator:function(a,l,s){Bt.empty(l)?s(o.message):s()}},r);if(!o.message){var i=t.title||"";o.message=((ga(i)==="object"?i.title:i)||"")+"\u4E0D\u80FD\u4E3A\u7A7A"}e.getProp().validate=[o]}n.sync(t)},watch:function(){cI.load.apply(cI,arguments)}};function y$e(e){e.componentAlias(v$e),UHe.forEach(function(t){e.component(t.name,t)}),e.register(cI),h$e.forEach(function(t){e.parser(t)}),Object.keys(h1).forEach(function(t){e.maker[t]=h1[t]}),typeof window<"u"&&window.ElementPlus&&e.useApp(function(t,n){n.use(window.ElementPlus)})}_d=Dde({ui:"element-ui",version:"3.2.8",manager:m$e,extendApi:g$e,install:y$e,attrs:{normal:["col","wrap"],array:["className"],key:["title","info"]}}),typeof window<"u"&&(window.formCreate=_d),_d.maker,function(){try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode('.CodeMirror{color:#000;direction:ltr;font-family:monospace;height:300px}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{background-color:#f7f7f7;border-right:1px solid #ddd;white-space:nowrap}.CodeMirror-linenumber{color:#999;min-width:20px;padding:0 3px 0 5px;text-align:right;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;border:0!important;width:auto}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:transparent}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:transparent}.cm-fat-cursor{caret-color:transparent}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:-50px}.CodeMirror-ruler{border-left:1px solid #ccc;bottom:0;position:absolute;top:0}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;overflow:hidden;position:relative}.CodeMirror-scroll{height:100%;margin-bottom:-50px;margin-right:-50px;outline:none;overflow:scroll!important;padding-bottom:50px;position:relative;z-index:0}.CodeMirror-sizer{border-right:50px solid transparent;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{display:none;outline:none;position:absolute;z-index:5}.CodeMirror-vscrollbar{overflow-x:hidden;overflow-y:scroll;right:0;top:0}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-x:scroll;overflow-y:hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{left:0;min-height:100%;position:absolute;top:0;z-index:3}.CodeMirror-gutter{display:inline-block;height:100%;margin-bottom:-50px;vertical-align:top;white-space:normal}.CodeMirror-gutter-wrapper{background:none!important;border:none!important;position:absolute;z-index:4}.CodeMirror-gutter-background{bottom:0;position:absolute;top:0;z-index:4}.CodeMirror-gutter-elt{cursor:default;position:absolute;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{word-wrap:normal;-webkit-tap-highlight-color:transparent;background:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-variant-ligatures:contextual;line-height:inherit;margin:0;overflow:visible;position:relative;white-space:pre;z-index:2}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{bottom:0;left:0;position:absolute;right:0;top:0;z-index:0}.CodeMirror-linewidget{padding:.1px;position:relative;z-index:2}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{position:relative;visibility:hidden;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:#ff06}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.CodeMirror-hints{background:#fff;border:1px solid silver;border-radius:3px;box-shadow:2px 3px 5px #0003;font-family:monospace;font-size:90%;list-style:none;margin:0;max-height:20em;overflow:hidden;overflow-y:auto;padding:2px;position:absolute;z-index:1}.CodeMirror-hint{border-radius:2px;color:#000;cursor:pointer;margin:0;padding:0 4px;white-space:pre}li.CodeMirror-hint-active{background:#08f;color:#fff}._fd-fn{display:flex;flex-direction:column;height:100%;position:relative;width:100%}._fd-fn .el-button{bottom:3px;box-shadow:0 6px 16px #00000014,0 3px 6px -4px #0000001f,0 9px 28px 8px #0000000d;position:absolute;right:5px}._fd-fn-editor{display:flex;flex:1;overflow:scroll;width:100%}._fd-fn-editor .CodeMirror{height:100%;width:100%}._fd-fn-tip{color:#000;direction:ltr;font-family:monospace}._fd-fn-tip .cm-keyword{color:#708;line-height:24px;overflow-x:auto;white-space:nowrap}._fd-fn-tip .cm-keyword::-webkit-scrollbar{background-color:transparent;height:0;width:0}._fd-fn-ind{background-color:#f7f7f7;border-right:1px solid #ddd;display:inline-block;float:left;height:24px;margin-right:4px;width:29px}._fd-fn-arg{cursor:pointer;text-decoration:underline}._fd-fn-arg i{color:#3073ff;font-size:12px}._fd-event .el-button{border-color:#2e73ff;color:#2e73ff;font-weight:400;width:100%}._fd-event .el-badge{width:100%}._fd-event-dialog .el-dialog__body{padding:10px 20px}._fd-event-con .el-main{padding:0}._fd-event-l,._fd-event-r{border:1px solid #ececec;display:flex;flex:1;flex-direction:column;height:100%}._fd-event-dropdown .el-dropdown-menu{max-height:500px;overflow:scroll}._fd-event-head{align-items:center;background:#f8f9ff;border-bottom:1px solid #eee;display:flex;padding:5px 15px}._fd-event-head .el-button.is-link{color:#2f73ff}._fd-event-r{border-left:0}._fd-event-r ._fd-event-head{justify-content:space-between}._fd-event-l>.el-main,._fd-event-r>.el-main{box-sizing:border-box;display:flex;flex:1;flex-basis:auto;flex-direction:row;min-width:0;width:100%}._fd-event-item,._fd-event-r>.el-main{flex-direction:column}._fd-event-item{display:flex;font-size:14px;justify-content:center;max-width:250px;overflow:hidden;white-space:pre-wrap}._fd-event-l .el-menu{border-right:0;border-top:0;overflow:auto;padding:0 10px 5px;width:100%}._fd-event-l .el-menu-item.is-active{background:#e4e7ed;color:#303133}._fd-event-l .el-menu-item{border:1px solid #ececec;border-radius:5px;height:auto;line-height:1em;margin-top:5px;padding:0}._fd-event-method{color:#9d238c;display:flex;flex-direction:column;font-family:monospace;font-size:14px;justify-content:center;overflow:hidden;white-space:pre-wrap;width:225px}._fd-event-method>span:first-child,._fd-fn-list-method>span:first-child{color:#9d238c}._fd-event-method>span:first-child>span,._fd-fn-list-method>span:first-child>span{color:#000;margin-left:10px}._fd-event-title{align-items:center;display:flex;justify-content:space-between;padding:10px 0;width:100%}._fd-event-title .fc-icon{color:#282828;font-size:18px;margin-right:6px}._fd-event-title .el-input{width:200px}._fd-event-title .el-input__wrapper{box-shadow:none}._fd-event-title .el-menu-item.is-active i{color:#282828}._fd-event-con .CodeMirror{height:100%;width:100%}._fd-event-con .CodeMirror-wrap pre.CodeMirror-line{padding-left:20px}._fd-drag-tool{word-wrap:break-word;box-sizing:border-box;display:block;min-height:20px;outline:1px dashed var(--fc-tool-border-color);overflow:hidden;padding:2px;position:relative;transition:outline-color .3s ease;word-break:break-all}._fd-drag-tool ._fd-drag-tool{height:calc(100% - 6px);margin:3px}._fd-drag-tool+._fd-drag-tool{margin-top:5px}._fd-drag-tool.active{outline:2px solid #2e73ff}._fd-drag-tool.active>div>._fd-drag-btn{display:flex}._fd-drag-tool._fd-drop-hover ._fd-drag-box{padding-bottom:15px!important;padding-top:15px!important}._fd-drag-tool ._fd-drag-btn{display:none}.drag-r{bottom:2px;right:2px}._fd-drag-l,.drag-r{position:absolute;z-index:2}._fd-drag-l{left:0;top:0}._fd-drag-btn{background-color:#2e73ff;color:#fff;cursor:pointer;float:left;height:18px;justify-content:center;line-height:20px;padding-bottom:1px;text-align:center;width:18px}._fd-drag-btn+._fd-drag-btn{margin-left:2px}._fd-drag-danger{background-color:#ff2e2e}._fd-drag-btn i{font-size:14px}._fd-drag-mask{bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}._fd-struct,._fd-struct .el-badge{width:100%}._fd-struct .el-button{border-color:#2e73ff;color:#2e73ff;font-weight:400;width:100%}._fd-struct .CodeMirror{height:450px}._fd-struct .CodeMirror-line{font-size:13px!important;line-height:16px!important}._fd-struct-con .CodeMirror-lint-tooltip{z-index:1!important}._fd-struct-con .el-dialog__body{padding:0 20px}._fd-row,._fd-html-editor{width:100%}._fd-html-editor .el-button{border-color:#2e73ff;color:#2e73ff;font-weight:400;width:100%}._fd-html-editor-con .CodeMirror{height:450px}._fd-html-editor-con .CodeMirror-line{font-size:13px!important;line-height:16px!important}._fd-html-editor-con .CodeMirror-lint-tooltip{z-index:1!important}._fd-html-editor-con .el-dialog__body{padding:0 20px}._fd-struct-editor{flex:1;width:100%}._fd-struct-editor>div{height:100%}._fd-gfc,._fd-gfc .el-badge{width:100%}._fd-gfc .el-button{border-color:#2e73ff;color:#2e73ff;font-weight:400;width:100%}._fd-gfc-dialog .el-tabs__header{margin-bottom:0}._fd-gfc-dialog .form-create{margin-top:15px}._fd-gfc-con .CodeMirror{height:100%;width:100%}._fd-gfc-con .CodeMirror-wrap pre.CodeMirror-line{padding-left:20px}._fd-color-input{width:150px}._fd-color-input .el-input .el-color-picker{margin:0}._fd-color-input .el-input .el-input-group__append{padding:0;width:24px}._fd-color-input .el-input .el-color-picker__trigger{border-left:0;border-radius:0 3px 3px 0}._fd-size-input{align-items:center;display:flex}._fd-size-input .el-input-number--small{width:122px}._fd-size-input .el-button{font-size:14px;margin-left:3px;padding:5px;width:25px}._fd-field-input{width:100%}._fd-field-input .el-input-group__append{color:#606266;cursor:pointer;margin:0;padding:0;width:25px}._fd-fn-list,._fd-fn-list .el-badge{width:100%}._fd-fn-list .el-button{border-color:#2e73ff;color:#2e73ff;font-weight:400;width:100%}._fd-fn-list-dialog .el-dialog__body{padding:10px 20px}._fd-fn-list-con .el-main{padding:0}._fd-fn-list-l,._fd-fn-list-r{border:1px solid #ececec;display:flex;flex:1;flex-direction:column;height:100%}._fd-fn-list-head{align-items:center;background:#f8f9ff;border-bottom:1px solid #eee;display:flex;padding:5px 15px}._fd-fn-list-head .el-button.is-link{color:#2f73ff}._fd-fn-list-r{border-left:0}._fd-fn-list-r ._fd-fn-list-head{justify-content:flex-end}._fd-fn-list-l>.el-main,._fd-fn-list-r>.el-main{box-sizing:border-box;display:flex;flex:1;flex-basis:auto;flex-direction:row;min-width:0;width:100%}._fd-fn-list-r>.el-main{flex-direction:column}._fd-fn-list-l .el-menu{border-right:0;border-top:0;overflow:auto;padding:0 10px 5px;width:100%}._fd-fn-list-l .el-menu-item.is-active{background:#e4e7ed;color:#303133}._fd-fn-list-l .el-menu-item{border:1px solid #ececec;border-radius:5px;height:auto;line-height:1em;margin-top:5px;padding:0}._fd-fn-list-method{display:flex;flex-direction:column;font-family:monospace;font-size:14px;justify-content:center;line-height:1em;overflow:hidden;padding:10px 0;white-space:pre-wrap;width:100%}._fd-fn-list-method-info>span:first-child,._fd-fn-list-method>span:first-child{color:#9d238c}._fd-fn-list-method-info>span:first-child>span,._fd-fn-list-method>span:first-child>span{color:#000;margin-left:10px}._fd-fn-list-con .CodeMirror{height:100%;width:100%}._fd-fn-list-con .CodeMirror-wrap pre.CodeMirror-line{padding-left:20px}._fd-table-view{overflow:auto}._fd-table-view-cell{background:#fff;border:1px inset rgba(0,0,0,.1);height:100%;min-height:50px}._fd-table-view-cell>._fd-drag-tool{border:0;height:100%;margin:0}._fd-table-view-btn{flex-direction:column;padding:0}._fd-table-view-btn .fc-icon{color:#fff;font-size:16px;width:18px}._fd-table-view-icon{color:#fff;display:flex;height:100%;justify-content:center;margin-top:1px;width:100%}._fd-table-view>table{border-bottom:1px solid #ebeef5;border-right:1px solid #ebeef5;border-color:#ebeef5 currentcolor currentcolor #ebeef5;border-style:solid none none solid;border-width:1px 0 0 1px;height:100%;overflow:hidden;table-layout:fixed;width:100%}._fd-table-view tr{min-height:50px}._fd-table-view td{border-bottom:0;border-right:0;border-color:currentcolor #ebeef5 #ebeef5 currentcolor;border-style:none solid solid none;border-width:0 1px 1px 0;box-sizing:border-box;min-height:50px;min-width:80px;overflow-wrap:break-word;padding:5px;position:relative;white-space:nowrap}._fd-tableCell-drag{height:100%}._fc-table{overflow:auto}._fc-table>table{border-bottom:1px solid #ebeef5;border-right:1px solid #ebeef5;border-color:#ebeef5 currentcolor currentcolor #ebeef5;border-style:solid none none solid;border-width:1px 0 0 1px;height:100%;overflow:hidden;table-layout:fixed;width:100%}._fc-table td,._fc-table tr{min-height:50px}._fc-table td{border-bottom:0;border-right:0;border-color:currentcolor #ebeef5 #ebeef5 currentcolor;border-style:none solid solid none;border-width:0 1px 1px 0;box-sizing:border-box;min-width:80px;overflow:hidden;overflow-wrap:break-word;padding:5px;position:relative}._fd-validate .append-msg{cursor:pointer}._fd-validate .el-input-group__append{padding:0 10px}._fd-required{align-items:center;display:flex;width:100%}._fd-required .el-input{margin-left:15px}._fd-required .el-switch{height:28px}._td-table-opt[data-v-75561980]{width:100%}._td-table-opt-handle[data-v-75561980]{align-items:center;display:flex;justify-content:space-between;padding-right:5px}._fd-tree-opt ._fd-tree-opt-btn{background-color:#2f73ff;color:#fff;cursor:pointer;float:left;height:19px;justify-content:center;line-height:20px;padding-bottom:1px;text-align:center;width:18px}._fd-tree-opt-node{align-items:center;display:flex}._fd-tree-opt-first{margin-right:5px;width:60px}._fd-tree-opt-last{width:110px}._fd-tree-opt ._fd-tree-opt-danger{background-color:#ff2d2e;border-radius:0 2px 2px 0}._fd-tree-opt .el-tree-node__content{height:28px;margin-bottom:3px}._fd-tree-opt .el-input__inner{border-right:0}._fd-tree-opt .el-input-group__append{background:#fff;padding-left:1px;padding-right:2px;width:90px}._fd-table-form{background:#fff;border:1px solid #ececec;width:100%}._fc-child-empty,._fd-table-form{min-height:130px}._fd-tf-wrap{display:flex;overflow:auto}._fd-tf-wrap>._fd-drag-tool{display:flex;flex-shrink:0;height:auto;margin:2px}._fc-table-form{color:#666;overflow:auto}._fc-table-form .form-create .el-form-item{margin-bottom:1px}._fc-table-form .form-create .el-form-item.is-error{margin-bottom:22px}._fc-table-form .el-form-item__label{display:none!important}._fc-table-form .el-form-item__content{display:flex;margin-left:0!important;width:100%!important}._fc-tf-head-idx,._fc-tf-idx{font-weight:500;min-width:40px;text-align:center;width:40px}._fc-tf-btn,._fc-tf-edit{min-width:70px;text-align:center;width:70px}._fc-tf-btn .fc-icon{cursor:pointer}._fc-table-form._fc-disabled ._fc-tf-btn .fc-icon,._fc-table-form._fc-disabled>.el-button{cursor:not-allowed}._fc-tf-table{border:1px solid #ebeef5;border-bottom:0;height:100%;overflow:hidden;table-layout:fixed;width:100%}._fc-table-form ._fc-tf-table>thead>tr>th{border:0;border-bottom:1px solid #ebeef5;font-weight:500;height:40px}._fc-table-form ._fc-tf-table>thead>tr>th+th{border-left:1px solid #ebeef5}._fc-table-form tr{min-height:50px}._fc-table-form ._fc-read-view{text-align:center;width:100%}._fc-table-form td{border:0;border-bottom:1px solid #ebeef5;box-sizing:border-box;min-height:50px;min-width:80px;overflow:hidden;overflow-wrap:break-word;padding:5px;position:relative}._fc-table-form td+td{border-left:1px solid #ebeef5}._fc-tf-table .el-cascader,._fc-tf-table .el-date-editor,._fc-tf-table .el-input-number,._fc-tf-table .el-select,._fc-tf-table .el-slider{width:100%}._fd-tf-col ._fd-tf-con .el-form-item{margin-bottom:1px}._fd-tf-col{display:flex;flex-direction:column;flex-shrink:0;flex-wrap:wrap;width:180px}._fd-tf-con .el-form-item__label{display:none!important}._fd-tf-con{display:flex;flex:1;width:100%}._fd-tf-con .el-form-item__content{display:flex;margin-left:0!important;width:100%!important}._fd-tf-title{align-items:center;border-bottom:1px solid #ebeef5;display:flex;height:40px;margin-bottom:0;padding-left:5px;width:100%!important}._fd-tf-con ._fc-l-item{display:flex;flex-shrink:0;margin-top:4px;width:100%}._fd-tf-con ._fc-l-item>*{display:none!important}._fd-tf-con .el-cascader,._fd-tf-con .el-date-editor,._fd-tf-con .el-input-number,._fd-tf-con .el-select,._fd-tf-con .el-slider{width:100%}._fc-designer{--fc-drag-empty:"\\62d6\\62fd\\5de6\\4fa7\\5217\\8868\\4e2d\\7684\\7ec4\\4ef6\\5230\\6b64\\5904";--fc-child-empty:"\\70b9\\51fb\\53f3\\4e0b\\89d2 \\e789 \\6309\\94ae\\6dfb\\52a0\\4e00\\5217";--fc-tool-border-color:#2e73ff;background-color:#fff;cursor:default;height:100%;min-height:500px;overflow:hidden;position:relative}._fc-designer>.el-main{bottom:0;left:0;padding:0;position:absolute;right:0;top:0}._fc-m .form-create ._fc-l-item{align-items:center;background:#f5f5f5;border:1px dashed #000;border-radius:4px;color:#000;display:flex!important;height:30px;justify-content:center;margin:5px 0;overflow:hidden;padding-bottom:0;transition:all .3s ease;width:100%}._fc-m .form-create ._fc-l-item ._fc-l-icon{display:inline-block!important;padding:0 4px}._fc-m .form-create ._fc-l-item ._fc-l-name{display:inline-block!important;font-size:12px}._fc-l,._fc-m,._fc-r{border-top:1px solid #ececec;box-sizing:border-box}._fc-r{--el-color-primary:#2e73ff}._fc-r-tab-props{padding:0 20px}._fc-r-title{color:#333;font-size:12px;margin:15px 0 5px}._fc-r-sub ._fc-r-title{align-items:center;display:flex;justify-content:space-between}._fc-r-sub .fc-icon{cursor:pointer}._fc-r-sub ._fd-config-item+._fd-config-item{margin-top:8px}._fc-r-sub>._fd-config-item>._fd-ci-head{padding-left:8px;position:relative}._fc-r-sub>._fd-config-item>._fd-ci-head:before{background-color:#333;border-radius:25px;content:" ";height:5px;left:0;position:absolute;width:5px}._fc-r-name-input .el-input-group__append{color:#606266;cursor:pointer;margin:0;padding:0;width:25px}._fc-r .el-main{padding-bottom:100px}._fc-l .el-main{padding:0}._fc-l .el-tree-node__label{color:#333;font-weight:400;padding:3px}._fc-l .el-tree-node__content{height:30px;margin-top:5px}._fc-l .el-tree-node__content>.el-tree-node__expand-icon{color:#333}._fc-l .el-tree-node__expand-icon.is-leaf{color:transparent}@keyframes a{0%{transform:rotate(0)}to{transform:rotate(1turn)}}._fc-loading{animation:a 2s linear infinite}._fc-tree-node{align-items:center;display:flex;height:26px;justify-content:space-between;line-height:26px;padding-right:5px;width:100%}._fc-tree-node.active,._fc-tree-node.active .icon-more{color:#2e73ff}._fc-tree-label{align-items:center;display:flex}._fc-tree-label>i{font-weight:700;margin-right:5px}._fc-tree-more{align-items:center;display:flex;font-weight:700;padding:0 15px}._fc-l-tabs{border-bottom:1px solid #ececec;display:flex;padding:0}._fc-l-tab{box-sizing:border-box;color:#303133;display:inline-block;flex:1;font-size:14px;font-weight:600;height:40px;line-height:40px;list-style:none;position:relative;text-align:center}._fc-l ._fc-l-tab.active{border-bottom:2px solid #409eff;color:#409eff}._fc-l-group{border:1px solid #eee;margin:12px;padding:0;user-select:none}._fc-l-group ._fc-l-list{align-items:stretch;display:grid;grid-template-columns:repeat(3,1fr)}._fc-l-title{align-items:center;cursor:pointer;display:flex;font-weight:600;justify-content:space-between;margin:0;padding:12px}._fc-l-title,._fc-l-title i{font-size:14px}._fc-l-title i.down{transform:rotate(90deg)}._fc-l-item{background:#fff;color:#000;cursor:pointer;display:inline-block;line-height:1;padding-bottom:10px;text-align:center;transition:all .2s ease}._fc-l-item i{display:inline-block;font-size:21px}._fc-l-item ._fc-l-name{font-size:12px}._fc-l-item ._fc-l-icon{padding:10px 5px 12px}._fc-l-item:hover{background:#2e73ff;color:#fff}._fc-m-tools{border:1px solid #ececec;border-top:0;height:40px;justify-content:space-between;white-space:nowrap}._fc-m-tools,._fc-m-tools-l,._fc-m-tools-r{align-items:center;display:flex}._fc-m-tools-r{overflow:auto}._fc-m-tools-l svg{cursor:pointer;width:18px}._fc-m-tools-l svg+svg{margin-left:10px}._fc-m-tools .line{background:#d8d8d8;height:24px;margin:0 10px;width:1px}._fc-m-tools .el-button{align-items:center;border-radius:5px;display:flex;padding:5px 10px}._fc-m-tools .el-button>span{align-items:center;display:inline-flex;justify-content:center}._fc-m-tools .el-button+.el-button,._fc-m-tools .el-dropdown{margin-left:10px}._fc-m-tools ._fd-m-extend{background-color:#f1f1f1;border-color:#ccc;border-radius:5px;color:#666;padding:5px}._fc-m-tools ._fd-m-extend .fc-icon{margin-right:0}._fc-m-tools ._fd-input-btn{align-items:center;display:flex;font-size:12px;justify-content:space-between}._fc-m-tools ._fd-input-btn .icon-check{color:#67c23a;font-size:18px}._fc-m-tools-r .fc-icon{font-size:14px;margin-right:2px}._fc-m-tools-l .fc-icon{cursor:pointer;font-size:18px}._fc-m-tools-l .fc-icon+.fc-icon{margin-left:10px}._fc-m-tools-l .fc-icon.disabled{color:#999;cursor:not-allowed}._fc-r .el-tabs__nav-wrap:after{background-color:#ececec;height:1px}._fc-r ._fc-r-tabs{border-bottom:1px solid #ececec;display:flex;padding:0}._fc-r .el-button,._fc-r .el-radio-button__inner,._fc-r .el-table__cell .cell{font-weight:400}._fc-r ._fc-r-tab{box-sizing:border-box;color:#303133;display:inline-block;flex:1;font-size:14px;font-weight:600;height:40px;line-height:40px;list-style:none;position:relative;text-align:center}._fc-r ._fc-r-tab.active{border-bottom:2px solid #409eff;color:#409eff}._fc-m-con{background:#f5f5f5;padding:20px 20px 36px;position:relative}._fc-m-drag{box-sizing:border-box;margin:0 auto;overflow:auto;padding:2px}._fc-m-input{padding:5px 5px 80px}._fc-m-input-handle{background:#fff;bottom:17px;box-shadow:0 -8px 14px #0000001a;left:0;margin:20px;padding:12px;position:absolute;right:0;text-align:center;z-index:2}._fc-m-drag.mobile{width:350px}._fc-m-drag.pad{width:770px}._fc-m-drag,.draggable-drag{background:#fff;height:100%;position:relative}._fc-m-drag>form,._fc-m-drag>form>.el-row{height:100%}._fc-m-drag .el-tree{width:100%}._fd-drag-box{height:100%;min-height:60px;transition:padding-bottom,padding-top .3s ease;width:100%}._fd-drag-box ._fd-drag-box{outline:1px dashed #ececec}._fd-drag-tool>._fd-drag-box{outline:none}._fd-drag-box>div[data-draggable]{margin-bottom:1px}._fc-r ._fc-group-container+._fc-group-container{margin-top:20px}._fc-r ._fc-group-container{margin:0;padding:10px}._fc-r ._fc-group-handle{right:15px}._fc-r .el-form-item{margin-bottom:10px!important}._fc-r .el-form-item__label{color:#333}._fc-upload-preview{border-radius:5px;display:inline-block;height:120px;overflow:hidden;width:120px}._fc-tabs .el-tabs__item{font-weight:400}._fc-tabs .el-tabs__nav-scroll{padding:0 15px}._fc-tabs .el-tab-pane{margin-right:15px}._fc-tabs .el-tabs__nav-wrap:after{height:1px}.form-create .fc-none{display:none}._fd-draggable-drag.drag-holder,._fd-elCard-drag.drag-holder,._fd-elCollapseItem-drag.drag-holder,._fd-elTabPane-drag.drag-holder,._fd-group-drag.drag-holder,._fd-subForm-drag.drag-holder,._fd-tableFormColumn-drag.drag-holder{background:#f5f5f5;background-size:0;min-height:90px;position:relative}._fc-child-empty:after,._fd-draggable-drag.drag-holder:after,._fd-elCard-drag.drag-holder:after,._fd-elCollapseItem-drag.drag-holder:after,._fd-elTabPane-drag.drag-holder:after,._fd-group-drag.drag-holder:after,._fd-subForm-drag.drag-holder:after,._fd-tableFormColumn-drag.drag-holder:after{align-items:center;bottom:0;color:#aaa;content:var(--fc-drag-empty);display:flex;font-size:12px;justify-content:center;left:0;position:absolute;right:0;top:0}._fc-designer ._fc-m-drag ._fd-draggable-drag{overflow:scroll;padding:2px 2px 100px}._fc-m-drag._fd-drop-hover ._fd-draggable-drag{padding-top:20px}._fd-draggable-drag.drag-holder{background-color:#fff}._fd-draggable-drag.drag-holder:after{font-size:16px}._fc-child-empty:after{content:var(--fc-child-empty);font-family:fc-icon!important}.fc-configured{color:#999;margin-left:5px}._fc-manage-text{color:#2f73ff;cursor:pointer;font-size:12px;margin-left:4px}._fc-manage-text i{font-size:12px}._fc-message-error{background-color:#fff;border-color:#fff;border-radius:8px;box-shadow:0 6px 16px #00000014,0 3px 6px -4px #0000001f,0 9px 28px 8px #0000000d;padding:9px 13px;top:16px;z-index:3}._fc-message-error>.el-icon{font-size:18px}._fc-message-error .el-message__content{color:#000000e0;font-size:14px}._fd-preview-dialog{border-radius:6px;padding-top:0}._fd-preview-dialog .el-dialog__header{float:right;position:absolute;right:0;top:0;z-index:1}._fd-preview-code{margin-top:0;max-height:510px;overflow:scroll}._fd-preview-tabs .el-tabs__nav-wrap:after{height:1px}._fd-preview-tabs .el-tabs__item{height:46px}._fd-preview-code>code{white-space:pre-wrap}._fd-row-line{background:#d8d8d8;height:1px;margin:10px 0;width:100%}.CodeMirror-hints{z-index:4}@font-face{font-family:fc-icon;src:url(data:font/woff;base64,d09GRgABAAAAADWQAAsAAAAAXHwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAARAAAAGA8FU5NY21hcAAAAYgAAAM/AAAH2BVluylnbHlmAAAEyAAAKykAAEkQjfbIOGhlYWQAAC/0AAAAMQAAADYoBh5haGhlYQAAMCgAAAAeAAAAJAffBEVobXR4AAAwSAAAADUAAAGMjgf//WxvY2EAADCAAAAAyAAAAMhtS338bWF4cAAAMUgAAAAfAAAAIAF/AMFuYW1lAAAxaAAAAUAAAAJnEKM8sHBvc3QAADKoAAAC5wAABOwNtdIjeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGFhZZzAwMrAwNTJdIaBgaEfQjO+ZjBi5ACKMrAyM2AFAWmuKQwHnjG8rmBu+N/AwMB8hwFIMjCiKGICAHJADOJ4nN3VV3OUZRjG8f8m60Y3MVbQaCBiQ6UYiL3FktgSe4FQQnT0iAOwboi9C5ZoEM75Bhwxg4OFIUHMhC/gcHzfM7tHDB8Ar/e9MnwBzthnfpl3d2affct9XQEuAtpltVR12EVFR7TV9Gml/Lydevl5tfKf3j+qpe9ENTqiM7qjJ/piIAZjOEZjLMZjInbEVEzHTByIk7k99+ehPJxHcz5P55nmXPNUq96aPHtWOxC1qJc79Ea/dhiKkXM7NBZ3WNAOO8sdjuSxcofZcodGscN5vSq6jqd5ltFyvcxGrU1sObfeXFxvaR0s1++cKNd8ueB6enVniru0jOX00cYt3MAKbuQmlnAtd9PDddzKSi7Wna1xG0u5hju5giu5iqvp0n28mcu4nEvZyjgPsY0JHuYN/eojDGo9ybCOntJ5PqMzHdF5PsfzvMCLvMSQzvkVXcOrvMbrbNDZj+n8N+uTtdzDvdzH/TzAg/SzjvUMcBe361mu4Q5WcQkdPM4TdNPJY7pWKrXzvJsXwqur+FNdWHz3djGhpidNVEzPnGizIhfRbkWGompFbqJmmg2iwzQlRN00L0SnUezXbZohosc0TUSvaa6IZaYJI5abZo3oM00d0W+aP2KdaRKJ9Uax94BpOolB05wSQ6aJJYZNs0uMWNEPMWoU1zdmmmxi3DTjxIRp2okdprknGqYEEJOmLBC7TKkgpkz5IKateDIxY2X3HDClh1gw5Yg4aUoUud2ULXKnKWXkO6a8ke+akke+Z8og+b4pjeQHplySH5oSSjZMWSUnTVkld5nSS05ZefyRKdPkx6Z0k59Y+d1PTYknPzNln/zc1ALkF6Y+IL80NQP5lakjyK9NbUF+Y+oN8ltTg5DfmbqE/N7UKuRuU7+Qe0xNQ/5g6hzyR1PXkD+Zeoj82dRI5LSpm8hfTC1F/mrqK3LG1FzkXlOHkb+Z2ozcZ+Vv7Tc1HHnI1HXkYVPrkUdM/Uf+YWpC8k9TJ5J/mdqR/NvUk+RRU2OSx0zdSc6aWpScM/UpedzUrOQ/VvwfzROmtiX/NfUuOW9qYPK0qYvJM6ZWpjlr6meac6ampnnK1Nm06qb2ptUw9TitSWPL/0appeUAeJytfAmcFMW9cFfV9DE9Pd3T0zPdszM7984My16zO0fDLizLIaAcCygIC8oqBhDBiEeWaIyLkRjyqaCiiSYafNF4fM8cGqMxHqjfM/k08fESjxdfPKPoMx6J5sWo2833r+6ZvYAk7/2+2e6qf1X96676X1W9jIdhDv+K/JzMZUJMMzOVqTIM6jJ0Qw/xHM9lCvlCvmxWzaqRoeEQTemi4TJNQaV0V7gzlE1nKp1lLO3YdEbPjBk9Z2z6Yx3YsXH1yq5SqWvl6l+e7AIn20+k0dZ02t6XJnMm4DrAXIryywmZ7LvS8GPgRxxnNxGYGFNguqGlGS6sptV0V7Wch0ZAIKRDk6oVtZwnupFAPOJNVDUqeR5xYR4SoemoCi0vkBOkoHUHapWCQcn+CXXxPnCnyqLgYe2fd3hQheNSuv0479X8g14e9RqeaEMe3Qzoz+LVwQjksLbSfAhKQu1I5MJe+ylPB6qwaAYy7Mc5cb1f8yIOzYjOj8Rp24Mw1n8ltxAvozBJpsSUmT5mNrOEWcoMMGuZTcxm5nzmAmYn8y3mdubHdB70OApx0LH8TFSulnLQQ4hweggReS1cT8yG67ETZiTdg2igBdGACVmznRnIWOrsQuNTwscM5DIcFEznG6a95IwyXQYwfkaXDpVn8gVYClm6XmBxQLBcJdODsVjQeoS6eI71SGtPTyueAy5yY7vdoHWJiirBoP20ii5UV6nwLFHhZ09XX1AnPWhFLJWKKXpANxRdiaZTMdXQAhC8XAlqspiSA371CjHgD0hy0KcEVfxMLPhTWj04PTNaf9o6w3Hs6itaNKq98goNv4KMoKoG6duirgoGV6n2d2j9x1FnHo3eniln/N5QyOsHQJECIdEf1eKhsF8RfD5Bkbx+LaGNrsnL8L1MmGmDOWVQO87IiJdxApfSvaQdkXQ76UWzcC/EJHECyagD8YZZwC9zvaefc9osrrQ0L3WvLaNN5dWmWFi8wf5utruJj5bTU3mude6i2VNZttg1TVo00jNj6Mcz0LvT1pbLa6dJ8wY3r+zC5ZWbTp1rP4gy0+bNahG8XbmeNM7OzLf45JWfm7+/p2fHj2cwHqeNm/F/Qms12DsJhtFg2+TSXTrsGGcNwY6panxWK2nZDlQqvI2L1h14WDUM1aLuSHrN7ctuX5PevbmMv2kdxMVltQSVItmpZWivfc6yZcP18TgXfwj0JOdQk6MRDk1GmXZc7sVdCRziCF/Iw0pLIr1rFoJFlsHMGatO6uzq6jxp1S/qwJdazx8+f3WxuNr1znpum6ArwiWCzr8tKDr+0wRkB7B+0DqKTj3U8dxWQIU8wttCOFBv61b8WybCdDA9dMclEIyIjFpgAmGa6AJXy72oxNaIC2yOJIJelFwawwM+x2cz7ahqEm+0PRZrj95VkTL+6d8rTCexthj6xObpqrtb8ZXKXuknsCy/6wsgv+93InXxv0MeewhylSXsM6sFtAfgalSzh7SoWCoJOKqh3Vr0d0pYRTK8DMM5bT4Lv8cEmCyM73ygHNug5TCoQOOMkLNRgcbl2pETE67H9CI2X2gHisjVUcxigc1zDk4tJs+WCxWKpUBRDhrMh4nyGQgDUajF9CLyOVbTtcOMHyl+1hPwI+K3/4T9oq7aV0kBiWUVP1pmxBAi2JtT7H2SoAoCxJ0pIWRf4kv6bNuviBLNKCJ0IUJIKChn+THWeV6WtorIek1KgC/5eF7xbfUh/FSIEzTblhR/yIP8iFXCXpnwQftKKejTPEhCK/S4JbAyq9jXyDmBSOgsSUbLJeSzLb+i+QTI40v8M8aIw5oAdakRgfi2iQHc6QNP9mss8W2VkozqjO8zBIMnMX6mgYkyeWYGsxjo9Bqg0xuBTp/H7GZuYL4Ho/6PUVsTlgmEZQyI7RjiaitqPDGfQJH/flFotCh8RFE5OuelMF2WwBDCGjpR0+y7NXSzdqoGz0oNfisT5aSamqpbt+lTUyoE8FoAk0kdr9UTCXuZ9kAw+ICGyLgsHclyAhDtYaM5paqpZgMN28M0C6KudXMkeOLSRCmBz9Jqvw4382bIt72eZzuUMDMZ3k7zbQ8nrU8nIW+C9O21tjmZZgAetAic5G/eDEZxX6Ir8SbMDXbmqR+/AbuYh5lw6Jmaxi/ZnXi2tQTfi8+1O9G/nmstYWg64J6Jf+rQvylMhZnD9MO+gfkLZ3MTxYYsS4c0XScEdJhRRQPum3Y4HpDK8PgAckmoS0CzbsCB8c233Waf1ZjPN6I/xgqFmLVfTcKQ/TFBBzFhB5KlhCh78ZWi3y9a53nl8TB6ByBNlkdEv2H48dX3/aAQs7fRUtC1scIcvZnOWMLeBmUkSknU7GL/GArR/H50ExTyhCjLIp7pFPiE7PfLFK7RjvPwR4wPxiEF67obZA8GZSvZcKlSgjdrUBd8tkCjjJLJ00gnnTjLrFRxu+9AeXKkBJJFZHkut7ypaU53rudGZOR6crnWHMr1XJG7Yqa1ryHTqvpxv6S2ZkRVsn7kB6ABb4VodMXy59avfy5x//2Jq69+7s4777rruQceeC6OnslGNq+RVFVaszmStTZRkYtCEEu746nxm+ehR3GQCikHTgMDholI0O3Zi2A22hHrNDkNjUcOt0vDPOWyVLyBrQYsB//ZjmamZ+BBhzLdmUy39Vd0KNFi7Z6KPXY0MRUPtdj7b/Ipio86+DlAtPsz3el0dwb9CAKVqYnu7sRU65GWBJprP5xo+QrIKvBQHnP4M/J1UoExN4D3MsgE3s8bfMGLC3yBCgKm4cWmgQq4MC/yla99hZ23FKh0yP70lXkiBCPz1tmf2n9A3Efz7E/noS84OOK8ExFn/8H+9K4xHCDafJHiMALUuZ+8SgZh5fsYGeROHahYggEhGlXSains7hUD5rdQcl6zUDEqzlsiKYs5QJiRYTxsDR+4ZO3wnmH6tg3D75JL8P4DTrKTdgmNaxveOzxAkS5hxNF6PU7NCsyJ4cgbGVhrMC8w7HyhhIxsoQccs2KECbw0PmxkaTsQjYIGkAN9p51mb4Wi39k7vLcbqhk5QNuzadPjAKMvD5PBkT5y4JbTrD4I/3DP8B60BRyct4bXbBoexpftHN7JMCy059vkQ3KGI29nYW3Moqt9lJU7Gz49KcyrWRWlJ4revFl1dnYHypfRF16KT5kSf6mxuRm9+lEkk4lQp/Mxu400cqLIjbzBe703/dAbDHp/yJMNU+L2fEBtRA/Gp2QidpFmQAcjmRPt09HN1lKR7+RFx2m8DAD7Y9HLXcaq9ba/5bRdO1bbaVtzk+Imt53lXYIE0lUI7RzXYHyA9qGR9mbkW6QRWs2PvAE9IE+ONv6IBp84vjsjn4213ryM84rICwGn9W77byBvkHPHj32u4uppdW6lTgoX0pU0grb21MgqMMC8Ucg7BAdEkAw+rbnRnk+HHz3Y2HxE61Bo0nBCg5zhbBjtKSbjRsDaepQpq7X9Kmj7pgnr5n/Qds3QnXkAKarrv9F2ZzBhKTiDicXR9Wanxq+3+482Z5TGH76WvEe2jcovcWffU4lCdSQK1RUv6oFCSc0iePFXBwbWrBkYsN4CB0B4yfDAAL5ywL5xYABtHKj7r47kyYsjeZf2wn7/A+x3GfZ4GzOTYQyHE/bWBGlOK40NRkXNV9HEZDQp+eRgVApFQr6GlvsFr48DB/tIyY2UovanY7GD0SDZLIUkeEa+GYwSVWCtB1hBYPFCVhj54G+luu1+hnxEToIRUkFvi8KUp6ny6vB9LptDJYOYlXSYmCWUJb8cGQzoeoDsD+jICIz8Fml9wosG2vI0uxAFd3XqKcNI6T/Ezw1Z/3TfWWehO4esFke3oPOAr2S8DhVkUH1ppMegQjqcxm3l3ECuYn9k31ABoGx/dC8dXlzKVSo560p0gPp2X9uAsy6h4PfwW+PmduLMsuMDvFO6O5v2De7sumUfWmMdWrMGRyGmPqkDtfl01w6p0W+HZtOXQFmqUx7y06ZS1ynLebWRF0ke3uGBkRdH22nj00fLAU3ZBOJfqr25+ppD3AXOM7Lk/PPxZ5///HfQ43Zv/V2IuuxnUBcDI8gcvofYZOm48ihfoXuTMSaVm/tb9Vi/OP98e8bkWpega+yz6+/xiHl0Uvgwg5iarHF42MOQ4bHxMbJqqT5GGsB9fX0gFh9AfegAdYf7+iDDyH58wOrDB0b2O9KKszaGyf7RchgWWkvHh/6hV6GIvhGaGXIyfWR4ZJi+R8s3Oju0j4Oozz5gD1MXqsWv0hqtPmCUTp3s4cO0A1DE2OgxaKIBADQJKA94Srr2kgOxXC42Mkxdtx3W/gPoAH0Ik4tZTgIGt88axn02COX1lxEm1Fdw9Os5zAnM8qPXSnSQiPIFjteNqmnwXDZfqOa0bCHLZ7V0STdCkADLWjVAEu0y87kszymoVMhBsGrmj2znZRsSc7DSPt9DFkwT5+CGM6/gefvEcxfp5+snbEdnCqeyPbO82/ftPm5eFwh41yGEPdnVedTe29sKWuvkvqHXyYDCNRPPqetZNCckrOeuv9Zj/3rOHNTOzqkG/dPXoPa7lzcXviiI4qYz4wtR3rVXThiD7DF6PinuyL4M+jXNb/VR9yijrvltJwkd8FN7FOcuVJxmyswiZhVzBrOV+TxwXlfpr5rVWaiSpRYZnqOGmEIeqLFZpcq+UarQMIgTNJHqkHzV7EWFcr5QASm6TA0KMAOlLlIyEkRGfNbIVkqUkoc4Ohs5ECVJlpRMI0tCRjyd1UKgnEuGoIiiX0mmAn6F9waiaioF6ooqhhvjWjDXFzZEf8R40NDUEMqn9KiW1eLx4T1N64WCEhSQN+wr8rwpN0pe2Rcs2V+92Bi4+IwvrV459cT/0kUfxizhxKUSzwseYOSSXwvPaG7gfCLL+5SlokRIRDeSmaapvUaWU/xTjGwzR7yFhnAmSIj9z0hHiAtqmoD2rBSCAUnjWIT4eWiF/f2RCymNZQ6/BvstCfwtBFwixTSB9tjKFGFspzEzmD7YVhVnUCulEA8jwiFHkWKpvhRGVJ+q0AULIx6mcUbtpVgmvHT1opup1Xzm/CmFq9YN2nf1dybwG/3JEas/8UXTxLs7rY5O+kNPDQ4+NDhoXz44mFzgWNY3r1+3pzCF9PYnEpDJOgucRCfeaJp9g4MPw7N+Pb7cycpQ6nX4MP41cawblNGZXhBkq10GiIQ84tAcQeLQ2fY1nKRy6CKOs3dxPoC2oW2c6mPty7gAjarbyw7gW2AcFjIrYVVlXSueq0MB13EGIWQkaEwvgiWD3FVTU7QSOCTj0ZBJV16ZdcUnV5hCBzY3L+3NZnuXNm+mi3pztdzVrxuG3v85c7NX9oJu/Kre31WuuqkTcc0SxbVOhb1wGY2wv+TX9mf7lq9eMSurRTXDWFaqnlstLWv3KqoioP7SMsOA+OysFTWMiE4xpkPeWDBYo7ePkMfJHCbCVJhe52QkgejRCO1mpkD7VnZ6YcCmMXrp9g7RJJ4qynRj0X2TJ7S/jpLJrF5+0s5MOp2+9KTlP1x+0qUAZgBcs2CVd7ZQWTE9NFtSed9Mr5ZsTw4sAqEjpetkdjqz86QVP1x+ooM+Cj66eCEPiy8XynTL4VAsF8ynoo1TpmWmr7AX0nwpnZLhw38ke0kAqL1ZP9cJl8r1bV6hWnsPrM5ehEoh1+BXNemmBg0iW5FB3aComFnbv7i1vdcsD5yydfN91Zma/8mh9hvtp3vbWxf3r11zY/vQk35tZvW+zVtPGSib+NftrUv61207ZaBibly96+d+rXfxavv76/oXt7WvXtyr+X++a/VGszJwiqMvHiD3kWyNPhaglT2wrxYyx9PVNZla0q1kHCXuaHgTLHMmJGc7qUhEjz5uM9Jpw34rkk5HPn7++cxY6E9PPYUO14KpVOTDp5+2n+9AU4tF8P5c7Ogokkw9DTUY6YHn7oTgIZoBRY304FNo6sQw3kYzXUez02IcO9Thv5BbCA/8twCUpAyrip7/ULszpuYm10BIJWQ8anKuG6bYCac047tHCTCVoEHL0Mn0UD4eCMTzIeuROkSPYdzjGHCtF+K3JRK3xeNoQzxu3xTHHpHvlwShXwgTHrDD1qNhN18Yz6ZQT1SzHqU2bDxbi54ZTyTiF1DH/mM/L4Yhm+DqS38kXyB+kKVbmG6Yvc9Bn8KjHQg7RjTHkJ4es7BXakZ0gFiDWkQMahkxC7xZmhjUqLHN4Ty621EqP6vOaVMJ/dl+MxiNBlHMfrOR2t8bsRnriMFzxhk0/gx7B2kTimkt3qili0IbOReCHSkNmI8TfIoallpbqXv1GIj/V3eDZv8gGJ0OBaLlje2N8Ng/gAqmQ1XLtYbu33QGDX9OaW5Wcn4j2DkxhFaqEdU6GRx48J3gMMBBKEG5Ar85Ye7nMEsdS+Q6ZjNzCbPHXQkTTcVH2nfZf/CM79hoR9ijj6yEZMKFuKrGC2Hr/XAhEQgkCmEctN7XYjENB2E9WO+oqDcYtB9X0WXB1UF4+umBmt02OfqSxs743ygHv0mjttTTHGBGTNtCEcBZ4Z7SBdU2tzR7dv3g7koo95jZQDui4305/uCI8T4LJKIdzBeZXf+DfTdhGAvjR1vTQwplDVymg/KGdjQLmEOve1zUZR7zhJXkQtmYosSyIev3dQjHrd8HI5EgjoNrfRz7Vgwe5HX9XY2xWGO7IGSzQkAXmrKCoSChqUlAiiFkmwR9vYvmPvh9t2StiZbcpOE4rcOMBMcq+Botj75L3Cz2o4JbbICWGnALDdDquBj8tlHUMbvrz/DPgYqHmQzI9wzCKQLMP5jSqmwmX6Ds0JARycgolKiJAwQGxlX/gQSQ719lHbiK467CfVdJ9vwv3jtr1r0fUufi4vKOjuWD1Ck69vIZ1EE3olb7WalRsp9FrVH74p07L6Yv+n4NFRz71RouOKNtfIxITB7mfhGzwT0no8wPOHgCZqbksER6eJ1AlPc5f5VqGbnnkY5c65yE0cNLgzLxAjIoX8xXylXN4Y70BNyEuHDILcLgyEOhprkrzr04m5UVLixphVMH5s3IJxoKAtYkXmaNkCJ5WUv3RjVx7YLeVJRwnJPjkwsGvXFNtBdtFmNyok2atX7NvJm5RCxTmXmmFsrPysc6Q6efgq6dUjylu5/zhKIK8UxrOb6tq7VDjCkc25jQQwHEK+gCUYuKa6vLWjpYv5rvXDe9f/mgNxgV0ZrNotSWkGP2b2i+zvbmuS1nap2NUHQ4eHpfXTf9jOzCf3VsX21H01km7g/T2UNZenSSruBbqa3KTjpmrtfsJMuBRP2ah+MuqLESu4o3Tmm0E44N8fXGKd2cx05Auge97uGeptzKLqKDwVg3U9dlyDb8kdOWVmY6M5/ZdGSLcpNvfmRdFgFoOj2dPUYAOYe3YViKjktPpFHVrMACddxeRCS1oUG1XqcuTlivN0+b1owTzaZ5+R8kWfGBgxX/KBiQxkD7m1KIFX1eUfSCKhKKOAGfzwngh8bKVBvMac1QsGnSgqfZfw7ockCU5J2OLwa+DL7i86pohhLRuV5WDameOZweUWhwjgeCbC8N1uZt7B7P4v/OLR7eOc1x92QLohIsjIRZyXLOXgX5sFz9B+/2bJS167yKF57rhEAw4EXXeVUvPNdp/+Bdn/2aDAUEA0I9I/IGaEimqi2VF6Gj/wf28/iz2ULtJg2jjWd46v+ASV5exC8Vi1a2WEStIPU9W0TvFD8qwvPbIvysmfVkInUWi532XcXa74sult1JA247Dz9D9pFZR28nGi+OpscH1PEBw22U28AJeci+Evzs60q1386SbZdKCJfsEA2S3tLIX8ATAedxiO8tWX+tY7xFEfAHdYT6HtuFnh7X1gKMZZaqLFTpB/LNTgrUqTmEnlzU2tsayk7JhtCu8aDju4HhZGtrMkRDoTEoVEsNZaFeoXYu+fYE+14j6NuMmVbTbDhbQTU/5/jpCrXqqRpEXIlm2Y8hzy+Qic6zr0TmiL0CvW4n0O32deg3Lzz7zXURtLTnhRfs9xzv82jpDAi8j5ba96DgCy/UeQQ9E5WBxpSBwgCPyDhKLKIGk0qZD3GOplfIm70YNg6LHIWWCkugQAPJp3dWcg5ZoQo1PacooHwFHcqui2cyapPRkkvMTuqSxHEIs0QNa5KCrrLfndJ6qGteMEAXo9GivpWx1iaMQ8DNQ4pyKNCm2O8quJrJxNdlA3Ii19LWpqU4Ivj8ApAShfVwyjwUyszrOmS0qva7mWDgrczpvzcSNFtb4JBCizHG+PQ2/F7tztm8v3+vTD3KvbKCSe/lKGj0og7xqxEQcg9RF0etQw4Ni4LrRtZCB5fxcpDv6+ODMr8MaN9PIurdlPTd7WDc3ew69qqDtJiDB2n44IPLKDbkgZzLHFOyz+nDTvzncXxgAXMicxIzyJzm3H75/8QRxq9z45gBknL4wqFAQ0OAdn3KtGlTnK5/9T8pB/hPhy+MggFpDLS/1RSOh8WAFhCbjgLhh6HYtxzW0KA2VM1m6y1nWBtgiD5WKEvwycOO7w1crDisIYB0ORyWxYDXG7jchYBvfH0Ucs6DPiPrgWbqQIOmMu1Ml3vH05V80d+QfFHN5m/WrMH4r1SjbOxotEaAmysKVRE91oijG3pA2bJuw3utc+j7YQ9q6iGSq042FhuPoU3aMPBMz3R7FnqMvo5+/BnZAm2lMnsLyJR9zHLm9H9QToeW0j9t8ko1/m4EwaNK88io0gw9c5RmD1WaR3v2Sh8nyVypxCo+ro8EuL8ZrI/A31CoH+u+uwct6+NkH2TjfDLX53mjj5UlGpJkts/z7iyuHuJmeRj3JILsJ4SeqOfC9OoJ7Nl2GBlDlzE9oKYXtBIYBNe0IwGQ/Q1NDU1zV3fY+3b4UCTtPyBJ/+LV9QDHCReizasXndDS+skzwYaG4DPFk+fmvujPGFh61J/1/4vAcQFDFy5sbTl+ca3eWwim9Zphuh1cxTENsjOmJLADtSMZ60mUdoSMwVq1aOtYtYLhVmt/8xjVSk2TqnVsWN8hBXKae4qEJt1ZNOiJRQC9Ru8T2Uk9lTSo2ElOS+ojd+qplE5O1pNnWaG67fId/BhAfmoHNelacUpL18pRyH+M5Pbhe0PxkT/EQ/hea8n2LnxpPGy9jhPheJftyCC0PTeTU8gGtz3aUdrzW7yUNse6x7lPtdS6h5wOzbndSCYNstqA5gSZ+hnZeUDTVjCngvZ/LvNl93w/jrIyql3gcuyk4XrYIUHjTpjrdVLrK2VJMt0j9NZpVy/dI+2YL9XMshzN7yJxk6B6Ov54X7LlY3pt6OOPfbLs+9iFFU1RREhpSdpB6j4pBwLykw1tWU3LtjWg92vQvn0ixaMZ98nw26fIsjIOqqfij1oTG5AMdOciJaRc5ECdzl2llCjX60DvJ1saGmj5dnBiTXfLYRme6xrgt89x3IjavBz2INIC89IA8+JeU4Ld7V5WYkcpRUtSR1P0wDbCojv05AgEyVl6Erc8pacgMqWf0GJXnFttT9fumP0VyqS3xhiNuIM9WihQILadUlCOJ5wz8FVTq+aXL4e1qCtnEw/6sp602tMlcjVvSCPvBeMsRCqGRDQKelj0hv087qlXPCUi+nTV3iJFQuCj66UI49ruPyBXEpHJUTroyF1ZesEJppSe0SRQ3dRO55GnV/7wyx3LisVlHfY88NsKK/q0VaUH2/vb4XmwdKKmaujg1IUrF04FZ77+i/nn6K3V5oWrFk7tapanRu4ZvdP8U/x1GMsUcAz3RlX9PhW9TdVbs+VT838VZSEyX6hpEPge+18X7liwYMdC1On41n8lFi1fNCOVmuF66LWri9Vq8erpg+a0Qbx7/o69O+Y7zvkJirPihJnJ5MwTViyyH85tu3Bbfvr67evNuuy/A38GvKGVmQn6/PHAG05itjBfYC51JABnONJH2IJhUFQnoWoClyikQZTLTRKAHL4B0iWIk9lK2nBOHU2jwJtd1F5OVSjHAkChFlQxHENBpUzPNcKuiJinMPrfikF0BTU3dXY2WQ9ku7qy//ZvNCqA+x3P/lWiBaNbVaNBsV9UIw0BlLdfhHfB7MRspC7KqCvUzKKORPLtQFjw836fn+WJGAqkViWLokx43i8XTb8sc6DTm/gzPbBTieCuJnsXrQkvzna16gHrR05N6MuQRFob72kIrAwaDYEVqjFl1V9it98ee7xYfHxo5cohjoetJ/s9hHh4MRxXxMdXsNij+nn+Cp7VBD/hR2XHs/H7wIsXMZ9jvupQKFdeciTF+v0Xql65pll3PN3xpZc6ynWhEhIdfbOdrld3+HOwR2sg1cbylJ+7nxEYGcrIzCrdauGQgiGOchfKrRP0ZjaJPCQpAd9DkhbyWQepG2tUfTE68LjY1NllL/ArjWgFHwrxb3PII0sezL6d7GhL21d0LugK+MJGOMayHt6vJkRxl2E0HNfQ5sEYKhc8ptCg8Ls4jsUy+lzAkEK+12gFr/mDEUnpbHqZVvJapmh/H4qJiOeIMNBeqMDTld3e1Hnwk0yxmHlUUmKPiuGwaH/EIqQ8LO4x5hvRaMkj8l6eYLYkECUNA63ygpcZ5QV0nKl828KYMNp0z02Qb8avarrKybjbi/w4mNTP0miE6vIMolov56vVPM6AayjWy4phKDijGFuuFVVVBCfgG4VuoYD9B+puV0Mqfq+aH8ttXVrPaij225Cs6srXQG1VQXFJUD+s2k/SrKi7Tke2OP3Sjm5LUtM5E8QVpCBC75hnS1mYeWo2xSYpGamUYV1P+SbeYl2Pt9jXvyAYChHIuwSjrI/nNwokoAtk5Qv4vSTFBHy8xUhWret/9Qkkhbwe+wOCEOYv5fWAQDZ+4t7hsMmlIMdQO4lJ9SF2zD4yZjMpjNlHxmwm5qj5MizjwqgSDJQRM1sGTu6qVLpOHni2DmxZu3RRW3t726KlP6kDaxcMHXfc0FVDx6H5Fyww15vm+rPXm9VT8Vi+0uqBX1OgNCGfA/TPH7pyaP78oQULh+aVnJzm+s+fatbvQl8OfWoFrYjJuSbogmODbqeHkLNwLyizwCvo9yeGzlFLNcdDvwogrkFHOwCzWsh3YBCLcYb2NQkzAl5XxdQN/FhQv+GGQHtcU0l6R0DihFzkjsW+5oa47Avg4++INLGCFNwR54IhoFdBDBvLI7E55XIvx3oPrmWj7NqDPI8Qe4OviSfKw+SUiLhkiSj72xtu3R5o0xuSJH5DOKqwId8NcZLWwx2h7d+NtKjE040R8nCBX8rDXklkmx7x+R7LCTLh2KuCP/EJhKzHxTE74Sb8zuh9vR56Y+8I2WzyTW+1pBphemJPKX/JueRMj+ZVeOm159dwNzVYWE8m2toSjpDS7fP7fdabpSd2/azaDy9Kbrnlli1bdu3C77QlrCcpNu5OtJVk0XqSouJuUd5hr0O3tu7+cGXiax+uTNoPmOge83azNmdb8P1MlCnSW8G1reoYmWEPwI6GDQFTUGUpjU1XKH0c09Lz6KYl/oi8hA/L/BDnZyX8BUHgNfSo5Lf2yhFZlvB+0BgwM2jfLUEInTjIy2F+L/HgvXyYZ9GjsvS979GUA44Tpc3ha3ToLSYM49jMlJnjmJXOWR5dO+Puw7tHeWz94qlau3qaTauUAXIOF0jWuEGd3AOznBiR5SeFCd+clAPR9pj1QawtBg+WrQ+oDvYztIZ69n9cwnEzWa+X/Qt1XjuWgw8l/KB2WbH2KBSG6Xc4pVjQ+jQYw4PWflDpuGDMugn9hmWL2MOu4zxkhZeN0ZwJTrhC4Bwwxgl7BLaRXhpsZIU6jT4Jv+DQsjRIRT3HoGegftHdhWRQMKssqoJUxMOYAIUhEwIpPR7XrYepi+daDztvVo7wXo9iveT4CKMTvErIa//Eq/j4w+h4byAk2vd7A6KAnx/Lq8dL1sNxyMt6xbBsvaSwIm/EICsKBrz2T71I4IOojOZ7kRoQ7Qch7A04uvYn5J9ICPjNycwgcyZoIBcxlznUMJsvjP6Zo9eDgCaEdffeELBg+nElVyjpZgWQqGW5BOTROT7pQLWszi0Jms3JTdw7EBnOPAIwjgDQS9kQae/INUX1AJnl5XOZr6xYvWbDyjltERVH5rSc0JxrDIksKyIhc7PnvDjieDGQmknUkNaox4JFDfnDU2cuWrVk6YLtyQzLT1c0PZmack1saixeaKzG83F49sILEftdb5kbyREuGk4ZMY07deO6VcuHYnE5cFxl+dRO1nP5nGaW8GxYiorGVOX4kjZXVEJ6OQixwGQ4r1rchqbkF3f0+KVo5Iy5i5evHQgaoUbNQDNDjY2FeOzLGq0hPhO8QmOjGxm/1vWYUbn77Bq/nHqM+2LZ2vcm2dqNVWq5ypZIsaGpqcHaT128wboRb7zpomBD8CJ/MOhHJX8QqwGC3xvFAO2827oRfd8+6CAUATUo+YPj+aMKmn6R3umlmiXolaBVlum3YYWjHizQNhWoPMe7u9nd25iZe9G6Smn9RbuoV2y/aO6WCVyO8r0bG5IhEk3qRWhJNBjE/1pHp157sVSagO1wyYcUQw+ACLI5KH1E2/+RFByzdW7Bj8BIBpkEHcGjfOdo0FbWPtrRxsFP4iHrbHyX4PcL1irB/7Jf8cPzrhTw+wMSvsp6Eec7JMG6lSLgdaEE/RDFekDSNAkvHIPH5LmT8F2wy1QmBppbh8ON6DFDWSt1OQcR5Wp6FMqOQryLBdBT+MxUyvpGKnUmfVSsuP6fal4tVcV3lcuHmXJUkuuvVWqQ5Npa2lSTKauTuWH+SG5owFZPugbsvCN+Ax3Lh8YxQdyaHuOCdvNPH2BDHBGEX/FB9ikgk5qI8XsU02GDZrqtOp4N3vfkkzwGdEP8Dx6zIMeJIhYwrvHu3fgxgPxMHLjOdOA6DOINypE1s0AZNJnwjUM1T2o3nKneMfn7h/Fp6INFiwYHQ4sXr1//6PWNU/Kx62N5nA36rhfF633ok2/EcvnoN2L5QkD8hggPnlXtzuXt/d3gopdzjZbVmMsDA2nMWQ9Ac3lRnF2IHhlZ002pnBtgMiB9HAea6SlAUem33HfCyNetdA6ro4rP6A6pa1No9G4LRYOJYkcvutSVpNzoN2flqjkOzo27FmMeA3ZuenET2a1r3x+HVCqXnpDDMF17/DLMWZ5qiEN0+vYQ6+whOvN7IASC737egXxDgGA9hH5Ek+x+GjMORm176ll8R4EOFv20qschHJKLEZq2gaZF8MNDtPprnKqaOTfHELTLWkdziHtp+NZxbbueKrIheT1NDfsvcr3BCZEvPBGjuB2jTuQJN53UZcct+PfOXm2A+WsBuWdst47ux3pMjo4VHTVyBHAfvjaTsbZlMjU/GKgBuDva1FRqajoUzWbL2ew7bgg/XK1ar5sxv4L81epDNKrUZH8w0R+Tb/8Zv+Ts5XXMVuZi5krHFjpOC+d0c0z1dja5e6UnTe9Z1TTwmrLuXsoaO/DJ1hDH4qr5CZIbFHaENMeOrVfHIIleQXco4bBir1bCRI8JLBqiwpO9mxXQt+x/V8L224ai68rpFMmQBNSjy2iKk+PfZd1+E0XCCg0T3X5WYD+mecGxh6kw1kNDPfjqsXjcrssbaOYNsn4ejZtGnX1Q8j5IUHVdhQR7Hi8ZFMmt83kH3iCF7MdHcyCrBkAVH43Gjp5JUl5MT81MZi6zDEb+TOYLzveSrjBeF8qz40lpO2Jr1vF0zS/R80p6bjnhAlsdrvSisUC5OoZUmYRFihuAP9rPBqPqKiObNfAGI4sz1lvAulEbOButK/DZ1jV4u62WfKriL/kC8u3UAUgl8h11ULWfLYHy5YOw8r0S3U40XcH3RygXi7hu1rAOOpUUG9JmiPLYkOtu3Gj9X3TTRqVBqT1+qQbdpIb9iuRVah4zUdfO176i+nv/DSAsIzRegtCyY8NVV7LHywO7OqiwUKbCwoWnlEnJfsMVI/ZfS5t7rV/VyFG0a2tPR9kVM6g3e/ZF6HZVfJPmeFNU7ZepNNQQrMkTvaBXjsoTznceE00x/BgtLrHjYCL/gyIDftDaja+hMgdg3TVZ8nDlicMj5HzCgl6WYyowjv3QEudeteIorPW1B/pr/WOq2q7UJoULprvckmhyCn6gXzF2R+RlPzspG0FPRzKr7AaBTdDtAM5eLxvnBIEDZ28rF/LN84W41u6xSLznDFU9o816jn6ghlvarPdpAhqirr17DP6W6YWfOT7Ztd1bZCehPfU633JX0moBJDey0/ou+sC0vouvtraejfNnA3SKiz9Cvk08MB4d9NsG+m8K6LcJLpELg2jMGWy2vkXrhG/0U/tPiBd/iXDsctYzx8MuBwUQhwGwznHCwOH+JIfZ3xHybdaLzvewrMe+QvRcwJG77iIcR16kh6svklq7XyG3kBSs785jrW1H853A7WscHTY6Zrafdqo5fbp56mmv14HjQ/4dWmNoSNY0uQaQ1AQMB7AHZW1HDacOjOkQO0GeisBaaa/dA3IuOdUEdueCk3MXaNzFPGcR0+ZhZvHxc83yzN7ytDkn7DthzrRy78yyOff4Rc0LmpsXnEid5lRbW19bGz6QipeK55x6TrEcT6fjZQcsxVPfaTnh5ONbWo4/+YSW5R1zOuBhaucYt5LfkXWO3lzIU7JJOVOH+98lnHMumCvFMfLqDtWECaz9SxB6R5ief9FjRvLCTZx8eDXPs5d4fJ5LWF442Za5b7Pst3n/4dUCjZZGo2/yoK+PwZ6bjorigQLtk93o/wdP25MCAAAAeJxjYGRgYADiE2rBbvH8Nl8ZuFkYQOBRca4RjP7//38DCyNzA5DLwcAEEgUAKmgLLwAAAHicY2BkYGBu+N/AEMOS9B8IWBgZgCIoIBkAqrQHKwAAeJxjYWBgYNEBYmQaHScyMDC/wCFHMf7/H4HxqIO5zQCHO0FinmhirLRyM4k4iTh1AH8gCosAAAAAAAAAAFYAtgGgAfICKAJ+AtgDiARcBHIE9gVgBbAF6gYmBm4GzAcsB4oH6AgeCHoIrAjWCQYJKglSCZYJugnWCfQKLAquCugLjgvyDBYMjgzuDT4Ntg4iDrQPbBAcEG4RCBFOEeQSVhKqEwATQhOAE/AUUhTwFUYV2BYUFlAWdBaYFrwXZBeOF9AYChhUGQ4ZwhouGnga4htiG7wcBhyUHPwdxh4IHmYeqh7sH0AfoiCAINIhjCIuIo4i0iNCI1ojniPoJDQkiHicY2BkYGBIZtjKIMQAAkxAzAWEDAz/wXwGACYGAkEAeJyFkT1uwkAQhZ/BkASUKEqkNGlWKSgSyfyUSKlQoKegB7PmR7bXWi9I1DlNjpAT5AjpaHOKSHnYQwNFvNrZb96+mR3JAO6wh4fyu+cu2cMls5IruMCjcJX6k7BPfhauoYmecJ36q3ADL3gTbrJjxg6ef8WshXdhD7f4EK7gBp/CVepfwj75W7iGB/wI16n/Cjcw8a6Fm2h54cDqqdNzNdupVWjSyKTueI71YhNP7ak80TZfmVR1g85RGulU22ObfLvoORepyJpEDXmr49iozJq1Dl2wdC7rt9uR6EFoEgxgoTGFY5xDYYYd4wohDFJERXRn+ZjuBTaIWWn/dU/otsipH3KFLgJ0zlwjutLCeTpNji1f61F1dCtuy5qENJRazUlisuIPPNytqYTUAyyLqgx9tLmiE39QzJD8AdiTb1d4nG1T53/bNhDVS01qWk4cu013m+5xHUn3StOk6d57FyRPEmoIYAFQsv/7Hkj9XLkNPwB3j4fDvXeH3rle9416t/9KnMMd2EGGHH0MMMQIY0ywiyn2cB4XsI+LOMAh7sRduIS7cQ/uxX24Hw/gQTyEh3EZj+BRPIbH8QSexFN4Gs/gWRCew/N4AS/iCq7iJbyMV/AqXsPreANv4i28jXdwDe/iOt7DDdzE+7iFD/AhPsLH+ASf4jN8ji/wJb7C1/gG3+I7fI8f8CN+ws/4Bb/iN/yOP/AnFAqUqHpTqthwZCq1Lw1nxJWOE4qqMEwz55dXJxTUislZo638V010OZULLo8GFJ0zUdcjWqvIfqn80fbRKxmVbEzeQRkt4tIIpHyVkXHlUZ/CQlVuvbvZSdvA8ZAq7bmM2lnybu15xT7w9Cx6YcstnWmW9tL/kM3JA/qrCVHPTijUqmTlXWOrw7NgwXHNbA9IGT23OvIyUKECJ8oXt8GZ4WO21f42VrIV8mfCQvQcy8WkjScrLJSI1DrJPP/v7V3g3inQJds/9dOZEJWPu8Iv1EZ10MGpp9u+FEnP6SnYunv/iemTV5VuQk7Ki4TSA22PhvR3wyGpNiDPM89hMSDpQtR2PqTIx3I3qyHVKoS189V4q785rZRpeIf4hEdpodK4wDnNRWPhGyLXbeCYVFVtJqzf2tFvdhmFpfMyHInVjiSfywR5ZqnBSDeFNYfS6zpVGMZUqai6Coapy0bVQazac3vZiKwU3JpTSVtoKVTJSKykvLrcmGPhUm1sodoUqcK+1Gkq9pPNTq5mO+rKXmhTyaiutTQqVVj0qWhidDYXYesmDrvXULjjvFXYZbJFIWqbZcFCtKmNU5WEqVAqSZ53Q5cnBs5nyZNcyrCPO2m4B9K4la7S0U4FaYRXNswSkt6nS39MishasbKki6xRL2Wdey31ds9anpurT/qkl7VL2YXQIMm10rxOyq+41/sHfwJ7pAA=) format("woff")}.fc-icon{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:fc-icon!important;font-size:16px;font-style:normal}.icon-data-table:before{content:"\\e7be"}.icon-delete-circle:before{content:"\\e604"}.icon-edit:before{content:"\\e60b"}.icon-save-online:before{content:"\\e64b"}.icon-auto:before{content:"\\e692"}.icon-check:before{content:"\\e64c"}.icon-tooltip:before{content:"\\e7f3"}.icon-watermark:before{content:"\\e645"}.icon-table-form3:before{content:"\\e603"}.icon-table-form2:before{content:"\\e7f1"}.icon-card:before{content:"\\e76b"}.icon-lock:before{content:"\\eadc"}.icon-shadow:before{content:"\\e6cc"}.icon-shadow-inset:before{content:"\\e6cd"}.icon-alignitems-flexstart:before{content:"\\e630";display:inline-block;transform:rotate(180deg)}.icon-align-center:before{content:"\\e607";display:inline-block;transform:rotate(90deg)}.icon-align-flexstart:before{content:"\\e60a";display:inline-block;transform:rotate(90deg)}.icon-align-spacearound:before{content:"\\e61f";display:inline-block;transform:rotate(-90deg)}.icon-align-spacebetween:before{content:"\\e65e";display:inline-block;transform:rotate(-90deg)}.icon-align-stretch:before{content:"\\e606";display:inline-block;transform:rotate(-90deg)}.icon-align-flexend:before{content:"\\e60a";display:inline-block;transform:rotate(-90deg)}.icon-justify-flexend:before{content:"\\e60a";display:inline-block;transform:rotate(180deg)}.icon-direction-rowreverse:before{content:"\\e677"}.icon-direction-row:before{content:"\\e678"}.icon-direction-column:before{content:"\\e679"}.icon-direction-columnreverse:before{content:"\\e67a"}.icon-justify-spacearound:before{content:"\\e61f"}.icon-justify-spacebetween:before{content:"\\e65e"}.icon-alignitems-baseline:before{content:"\\e660"}.icon-alignitems-flexend:before{content:"\\e630"}.icon-alignitems-center:before{content:"\\e632"}.icon-alignitems-stretch:before{content:"\\e633"}.icon-flex-nowrap:before{content:"\\e600"}.icon-flex-wrap:before{content:"\\e601"}.icon-justify-stretch:before{content:"\\e606"}.icon-justify-center:before{content:"\\e607"}.icon-justify-flexstart:before{content:"\\e60a"}.icon-display-flex:before{content:"\\e619"}.icon-display-inlineblock:before{content:"\\e61c"}.icon-display-block:before{content:"\\e61d"}.icon-display-inline:before{content:"\\e61e"}.icon-radius:before{content:"\\e6a1"}.icon-arrow:before{content:"\\e60e"}.icon-link:before{content:"\\e63f"}.icon-question:before{content:"\\e644"}.icon-refresh:before{content:"\\e659"}.icon-setting:before{content:"\\e7c6"}.icon-textarea:before{content:"\\e7c9"}.icon-password:before{content:"\\e7ca"}.icon-table-form:before{content:"\\e7c7"}.icon-value:before{content:"\\e7c8"}.icon-eye:before{content:"\\e796"}.icon-eye-close:before{content:"\\e66f"}.icon-cell:before{content:"\\e602"}.icon-group:before{content:"\\e7c0"}.icon-step-form:before{content:"\\e7c1"}.icon-add-circle:before{content:"\\e7c3"}.icon-add-tr:before{content:"\\e7c4"}.icon-add-td:before{content:"\\e7c5"}.icon-more:before{content:"\\e631"}.icon-flex:before{content:"\\e7b6"}.icon-tag:before{content:"\\e7b9"}.icon-html:before{content:"\\e68f"}.icon-tree-select:before{content:"\\e7bc"}.icon-descriptions:before{content:"\\e7bd"}.icon-table:before{content:"\\eb0a"}.icon-collapse:before{content:"\\e7bf"}.icon-pre-step:before{content:"\\e772"}.icon-next-step:before{content:"\\e775"}.icon-mobile-active:before{content:"\\e778"}.icon-pc-active:before{content:"\\e779"}.icon-pc:before{content:"\\e77a"}.icon-mobile:before{content:"\\e77d"}.icon-pad-active:before{content:"\\e78c"}.icon-pad:before{content:"\\e795"}.icon-subform:before{content:"\\eb77"}.icon-add-child:before{content:"\\e789"}.icon-switch:before{content:"\\e77c"}.icon-tab:before{content:"\\e77b"}.icon-button:before{content:"\\e77e"}.icon-input:before{content:"\\e77f"}.icon-checkbox:before{content:"\\e780"}.icon-radio:before{content:"\\e781"}.icon-rate:before{content:"\\e782"}.icon-number:before{content:"\\e783"}.icon-upload:before{content:"\\e784"}.icon-cascader:before{content:"\\e785"}.icon-space:before{content:"\\e786"}.icon-color:before{content:"\\e787"}.icon-span:before{content:"\\e788"}.icon-alert:before{content:"\\e78a"}.icon-row:before{content:"\\e78b"}.icon-divider:before{content:"\\e78d"}.icon-select:before{content:"\\e78e"}.icon-transfer:before{content:"\\e78f"}.icon-editor:before{content:"\\e790"}.icon-slider:before{content:"\\e791"}.icon-tree:before{content:"\\e792"}.icon-date:before{content:"\\e793"}.icon-time:before{content:"\\e794"}.icon-grid:before{content:"\\eb78"}.icon-delete:before{content:"\\e770"}.icon-copy:before{content:"\\e771"}.icon-import:before{content:"\\e773"}.icon-add:before{content:"\\e774"}.icon-preview:before{content:"\\e776"}.icon-move:before{content:"\\e777"}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.hljs-subst,.hljs-title{color:#000;font-weight:400}.hljs-title.function_{color:#7a7a43}.hljs-code,.hljs-comment,.hljs-quote{color:#8c8c8c;font-style:italic}.hljs-meta{color:#9e880d}.hljs-section{color:#871094}.hljs-built_in,.hljs-keyword,.hljs-literal,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag,.hljs-symbol,.hljs-template-tag,.hljs-type,.hljs-variable.language_{color:#0033b3}.hljs-attr,.hljs-property{color:#871094}.hljs-attribute{color:#174ad4}.hljs-number{color:#1750eb}.hljs-regexp{color:#264eff}.hljs-link{color:#006dcc;text-decoration:underline}.hljs-meta .hljs-string,.hljs-string{color:#067d17}.hljs-char.escape_{color:#0037a6}.hljs-doctag{text-decoration:underline}.hljs-template-variable{color:#248f8f}.hljs-addition{background:#bee6be}.hljs-deletion{background:#d6d6d6}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}')),document.head.appendChild(e)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}}();const Pr={type:(e,t)=>Object.prototype.toString.call(e)==="[object "+t+"]",Undef:e=>e==null,Element:e=>typeof e=="object"&&e!==null&&e.nodeType===1&&!Pr.Object(e),trueArray:e=>Array.isArray(e)&&e.length>0,Function(e){const t=this.getType(e);return t==="Function"||t==="AsyncFunction"},getType(e){const t=Object.prototype.toString.call(e);return/^\[object (.*)\]$/.exec(t)[1]},empty:e=>!!(e==null||Array.isArray(e)&&Array.isArray(e)&&!e.length)||typeof e=="string"&&!e};function v4(e,t){return{}.hasOwnProperty.call(e,t)}function m4(e,t,n){e[t]=n}function Cx(e,t={},n){let r=!1;for(let o in t)if(Object.prototype.hasOwnProperty.call(t,o)){let i=t[o];if((r=Array.isArray(i))||Pr.Object(i)){let a=e[o]===void 0;if(r)r=!1,a&&m4(e,o,[]);else if(i._clone&&n!==void 0){if(!n){m4(e,o,i._clone());continue}i=i.getRule(),a&&m4(e,o,{})}else a&&m4(e,o,{});e[o]=Cx(e[o],i,n)}else m4(e,o,i),Pr.Undef(i)||(Pr.Undef(i.__json)||(e[o].__json=i.__json),Pr.Undef(i.__origin)||(e[o].__origin=i.__origin))}return n!==void 0&&Array.isArray(e)?e.filter(o=>!o||!o.__ctrl):e}function Mi(e){return Cx({},{value:e}).value}["Date","Object","String","Boolean","Array","Number"].forEach(e=>{Pr[e]=function(t){return Pr.type(t,e)}});const Rde="[[FORM-CREATE-PREFIX-",Ide="-FORM-CREATE-SUFFIX]]",Bde="$FN:",Pde="$FNX:",Lde="$GLOBAL:",Sx="function";function jde(e){return new Function("return "+e)()}function b$e(e,t){if(e&&Pr.String(e)&&e.length>4){let n=e.trim(),r=!1;try{if(n.indexOf(Ide)>0&&n.indexOf(Rde)===0)n=n.replace(Ide,"").replace(Rde,""),r=!0;else if(n.indexOf(Bde)===0)n=n.replace(Bde,""),r=!0;else{if(n.indexOf(Lde)===0){const i=n.replace(Lde,"");return n=function(...a){const l=a[0].api.getGlobalEvent(i);if(l)return l.call(this,...a)},n.__json=e,n.__inject=!0,n}if(n.indexOf(Pde)===0)return n=jde("function($inject){"+n.replace(Pde,"")+"}"),n.__json=e,n.__inject=!0,n;!t&&n.indexOf(Sx)===0&&n!==Sx&&(r=!0)}if(!r)return e;const o=jde(n.indexOf(Sx)===-1&&n.indexOf("(")!==0?Sx+" "+n:n);return o.__json=e,o}catch(o){return void function(i){console.error(function(a,l){return`[form-create err]: ${l}`}(0,i))}(`\u89E3\u6790\u5931\u8D25:${n}
|
| err: ${o}`)}}return e}function dI(e){return e.replace(e[0],e[0].toLowerCase())}const Vde={name:"zh-cn",form:{field:"\u5B57\u6BB5 ID",title:"\u5B57\u6BB5\u540D\u79F0",info:"\u63D0\u793A\u4FE1\u606F",control:"\u8054\u52A8\u6570\u636E",labelPosition:"\u6807\u7B7E\u7684\u4F4D\u7F6E",labelStyle:"\u6807\u7B7E\u7684\u6837\u5F0F",labelSuffix:"\u6807\u7B7E\u7684\u540E\u7F00",size:"\u8868\u5355\u7684\u5C3A\u5BF8",event:"\u8868\u5355\u4E8B\u4EF6",labelWidth:"\u6807\u7B7E\u7684\u5BBD\u5EA6",hideRequiredAsterisk:"\u9690\u85CF\u5FC5\u586B\u5B57\u6BB5\u7684\u6807\u7B7E\u65C1\u8FB9\u7684\u7EA2\u8272\u661F\u53F7",showMessage:"\u663E\u793A\u6821\u9A8C\u9519\u8BEF\u4FE1\u606F",inlineMessage:"\u4EE5\u884C\u5185\u5F62\u5F0F\u5C55\u793A\u6821\u9A8C\u4FE1\u606F",submitBtn:"\u662F\u5426\u663E\u793A\u8868\u5355\u63D0\u4EA4\u6309\u94AE",resetBtn:"\u662F\u5426\u663E\u793A\u8868\u5355\u91CD\u7F6E\u6309\u94AE",appendChild:"\u6DFB\u52A0\u5B50\u7EA7",formMode:"\u8868\u5355\u6A21\u5F0F",formName:"\u8868\u5355\u540D\u79F0",componentMode:"\u751F\u6210\u7EC4\u4EF6",document:"\u5E2E\u52A9\u6587\u6863"},computed:{fieldUsed:"\u3010{label}\u3011\u5728\u8BA1\u7B97\u516C\u5F0F\u4E2D\u88AB\u4F7F\u7528\uFF0C\u8BF7\u5148\u4FEE\u6539\u5BF9\u5E94\u516C\u5F0F",fieldExist:"\u3010{label}\u3011\u5B57\u6BB5\u5DF2\u5B58\u5728",fieldEmpty:"\u5B57\u6BB5\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A",fieldChar:"\u5B57\u6BB5\u540D\u79F0\u5FC5\u987B\u4EE5\u5B57\u6BCD\u5F00\u5934"},validate:{type:"\u5B57\u6BB5\u7C7B\u578B",typePlaceholder:"\u8BF7\u9009\u62E9",trigger:"\u89E6\u53D1\u65B9\u5F0F",mode:"\u9A8C\u8BC1\u65B9\u5F0F",modes:{required:"\u5FC5\u586B",pattern:"\u6B63\u5219\u8868\u8FBE\u5F0F",min:"\u6700\u5C0F\u503C",max:"\u6700\u5927\u503C",len:"\u957F\u5EA6"},types:{string:"\u5B57\u7B26\u4E32",array:"\u591A\u9009",number:"\u6570\u5B57",integer:"\u6574\u6570",float:"\u5C0F\u6570",object:"\u5408\u96C6",date:"\u65E5\u671F",url:"URL\u94FE\u63A5",email:"\u90AE\u7BB1\u5730\u5740"},message:"\u9519\u8BEF\u4FE1\u606F",auto:"\u81EA\u52A8\u83B7\u53D6",autoRequired:"\u8BF7\u8F93\u5165{title}",autoMode:"\u8BF7\u8F93\u5165\u6B63\u786E\u7684{title}",requiredPlaceholder:"\u8BF7\u8F93\u5165\u63D0\u793A\u8BED",required:"\u662F\u5426\u5FC5\u586B",rule:"\u9A8C\u8BC1\u89C4\u5219"},tableOptions:{handle:"\u64CD\u4F5C",add:"\u6DFB\u52A0",empty1:"\u70B9\u51FB\u53F3\u4E0B\u89D2",empty2:"\u6309\u94AE\u6DFB\u52A0\u4E00\u5217",rmCol:"\u5220\u9664\u5F53\u524D\u5217",rmRow:"\u5220\u9664\u5F53\u524D\u884C",splitRow:"\u62C6\u5206\u6210\u884C",splitCol:"\u62C6\u5206\u6210\u5217",mergeBottom:"\u5411\u4E0B\u5408\u5E76",mergeRight:"\u5411\u53F3\u5408\u5E76",addTop:"\u6DFB\u52A0\u4E0A\u5217",addBottom:"\u6DFB\u52A0\u4E0B\u5217",addLeft:"\u6DFB\u52A0\u5DE6\u5217",addRight:"\u6DFB\u52A0\u53F3\u5217",keyValue:"\u952E\u503C\u5BF9"},struct:{title:"\u7F16\u8F91\u6570\u636E",only:"\u3010{label}\u3011\u53EA\u5141\u8BB8\u6DFB\u52A0\u4E00\u4E2A",errorMsg:"\u8F93\u5165\u7684\u5185\u5BB9\u8BED\u6CD5\u9519\u8BEF",configured:"\u5DF2\u914D\u7F6E"},event:{title:"\u8BBE\u7F6E\u4E8B\u4EF6",create:"\u521B\u5EFA\u4E8B\u4EF6",list:"\u4E8B\u4EF6\u5217\u8868",placeholder:"\u8BF7\u8F93\u5165\u4E8B\u4EF6\u7684\u540D\u79F0",saveMsg:"\u8BF7\u5148\u4FDD\u5B58\u5F53\u524D\u6B63\u5728\u7F16\u8F91\u7684\u4E8B\u4EF6",type:"\u7C7B\u578B",info:"\u8BF4\u660E",label:"\u5B57\u6BB5",inject:{api:"\u5F53\u524D\u8868\u5355\u7684api",rule:"\u5F53\u524D\u8868\u5355\u7684\u751F\u6210\u89C4\u5219",self:"\u7EC4\u4EF6\u7684\u751F\u6210\u89C4\u5219",option:"\u8868\u5355\u7684\u914D\u7F6E",args:"\u4E8B\u4EF6\u7684\u539F\u59CB\u53C2\u6570"}},fetch:{title:"\u8BBE\u7F6E\u6570\u636E\u6E90",create:"\u521B\u5EFA\u6570\u636E\u6E90",config:"\u8BF7\u6C42\u914D\u7F6E",action:"\u8BF7\u6C42\u94FE\u63A5",actionRequired:"\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u94FE\u63A5",placeholder:"\u8BF7\u8F93\u5165\u6570\u636E\u6E90\u7684\u540D\u79F0",method:"\u8BF7\u6C42\u65B9\u5F0F",data:"\u9644\u5E26\u6570\u636E",headers:"\u8BF7\u6C42\u5934\u90E8",parse:"\u6570\u636E\u5904\u7406",response:"\u63A5\u53E3\u8FD4\u56DE\u7684\u6570\u636E",onError:"\u9519\u8BEF\u5904\u7406",remote:"\u8FDC\u7A0B\u6570\u636E",static:"\u9759\u6001\u6570\u636E",optionsType:{fetch:"\u8FDC\u7A0B\u6570\u636E",struct:"\u9759\u6001\u6570\u636E"}},designer:{component:"\u7EC4\u4EF6\u914D\u7F6E",id:"\u552F\u4E00\u503C",name:"\u7F16\u53F7",type:"\u7EC4\u4EF6\u7C7B\u578B",form:"\u8868\u5355\u914D\u7F6E",style:"\u7EC4\u4EF6\u6837\u5F0F\u914D\u7F6E",rule:"\u57FA\u7840\u914D\u7F6E",advanced:"\u9AD8\u7EA7\u914D\u7F6E",props:"\u5C5E\u6027\u914D\u7F6E",validate:"\u9A8C\u8BC1\u914D\u7F6E",event:"\u4E8B\u4EF6\u914D\u7F6E",clearWarn:"\u6E05\u7A7A\u540E\u5C06\u4E0D\u80FD\u6062\u590D\uFF0C\u786E\u5B9A\u8981\u6E05\u7A7A\u5417\uFF1F",childEmpty:"\u70B9\u51FB\u53F3\u4E0B\u89D2 \\e789 \u6309\u94AE\u6DFB\u52A0\u4E00\u5217",dragEmpty:"\u62D6\u62FD\u5DE6\u4FA7\u5217\u8868\u4E2D\u7684\u7EC4\u4EF6\u5230\u6B64\u5904",unload:"\u786E\u5B9A\u79BB\u5F00\u5F53\u524D\u9875\u9762\u5417?"},menu:{main:"\u57FA\u7840\u7EC4\u4EF6",aide:"\u8F85\u52A9\u7EC4\u4EF6",layout:"\u5E03\u5C40\u7EC4\u4EF6",component:"\u7EC4\u4EF6",subform:"\u5B50\u8868\u5355\u7EC4\u4EF6",tree:"\u5927\u7EB2"},props:{title:"\u6807\u9898",content:"\u5185\u5BB9",collection:"\u5408\u96C6",group:"\u5206\u7EC4",custom:"\u81EA\u5B9A\u4E49",change:"\u6539\u53D8",blur:"\u5931\u53BB\u7126\u70B9",preview:"\u9884\u89C8",clear:"\u6E05\u7A7A",cancel:"\u53D6\u6D88",close:"\u5173\u95ED",ok:"\u786E\u5B9A",height:"\u9AD8\u5EA6",width:"\u5BBD\u5EA6",class:"Class",save:"\u4FDD\u5B58",refresh:"\u5237\u65B0",submit:"\u63D0\u4EA4",reset:"\u91CD\u7F6E",copy:"\u590D\u5236",delete:"\u5220\u9664",hide:"\u9690\u85CF",position:"\u4F4D\u7F6E",render:"\u6E32\u67D3",large:"\u5927",default:"\u9ED8\u8BA4",small:"\u5C0F",always:"\u5E38\u663E",never:"\u4E0D\u663E\u793A",hover:"\u60AC\u6D6E",click:"\u70B9\u51FB",button:"\u6309\u94AE",year:"\u5E74\u4EFD",month:"\u6708\u4EFD",date:"\u65E5\u671F",dates:"\u65E5\u671F\u591A\u9009",week:"\u4E00\u5468",datetime:"\u65E5\u671F\u65F6\u95F4",datetimerange:"\u65E5\u671F\u65F6\u95F4\u533A\u95F4",daterange:"\u65E5\u671F\u533A\u95F4",monthrange:"\u6708\u4EFD\u533A\u95F4",left:"\u5DE6\u5BF9\u9F50",right:"\u53F3\u5BF9\u9F50",top:"\u9876\u90E8",text:"\u6587\u5B57",picture:"\u56FE\u7247","picture-card":"\u5361\u7247",center:"\u5C45\u4E2D",vertical:"\u7AD6\u5411",horizontal:"\u6A2A\u5411",manage:"\u7BA1\u7406",key:"\u952E\u540D",name:"\u540D\u79F0",value:"\u503C",inputData:"\u5F55\u5165\u6570\u636E",options:"\u9009\u9879\u6570\u636E",option:"\u9009\u9879",_self:"\u5F53\u524D\u7A97\u53E3",_blank:"\u65B0\u7684\u7A97\u53E3",_parent:"\u7236\u7EA7\u7A97\u53E3",_top:"\u9876\u7EA7\u7A97\u53E3"},com:{cascader:{name:"\u7EA7\u8054\u9009\u62E9\u5668",event:{expandChange:"\u5F53\u5C55\u5F00\u8282\u70B9\u53D1\u751F\u53D8\u5316\u65F6\u89E6\u53D1",removeTag:"\u5728\u591A\u9009\u6A21\u5F0F\u4E0B\uFF0C\u79FB\u9664Tag\u65F6\u89E6\u53D1"},props:{props:"\u914D\u7F6E\u9009\u9879",placeholder:"\u8F93\u5165\u6846\u5360\u4F4D\u6587\u672C",disabled:"\u662F\u5426\u7981\u7528",clearable:"\u662F\u5426\u652F\u6301\u6E05\u7A7A\u9009\u9879",showAllLevels:"\u8F93\u5165\u6846\u4E2D\u662F\u5426\u663E\u793A\u9009\u4E2D\u503C\u7684\u5B8C\u6574\u8DEF\u5F84",collapseTags:"\u591A\u9009\u6A21\u5F0F\u4E0B\u662F\u5426\u6298\u53E0Tag",collapseTagsTooltip:"\u5F53\u9F20\u6807\u60AC\u505C\u4E8E\u6298\u53E0\u6807\u7B7E\u7684\u6587\u672C\u65F6\uFF0C\u662F\u5426\u663E\u793A\u6240\u6709\u9009\u4E2D\u7684\u6807\u7B7E",separator:"\u9009\u9879\u5206\u9694\u7B26",filterable:"\u8BE5\u9009\u9879\u662F\u5426\u53EF\u4EE5\u88AB\u641C\u7D22",tagType:"\u6807\u7B7E\u7C7B\u578B"},propsOpt:{multiple:"\u662F\u5426\u591A\u9009",expandTrigger:"\u6B21\u7EA7\u83DC\u5355\u7684\u5C55\u5F00\u65B9\u5F0F",checkStrictly:"\u662F\u5426\u4E25\u683C\u7684\u9075\u5B88\u7236\u5B50\u8282\u70B9\u4E0D\u4E92\u76F8\u5173\u8054",emitPath:"\u5728\u9009\u4E2D\u8282\u70B9\u6539\u53D8\u65F6\uFF0C\u662F\u5426\u8FD4\u56DE\u7531\u8BE5\u8282\u70B9\u6240\u5728\u7684\u5404\u7EA7\u83DC\u5355\u7684\u503C\u6240\u7EC4\u6210\u7684\u6570\u7EC4",value:"\u6307\u5B9A\u9009\u9879\u7684\u503C\u4E3A\u9009\u9879\u5BF9\u8C61\u7684\u67D0\u4E2A\u5C5E\u6027\u503C",label:"\u6307\u5B9A\u9009\u9879\u6807\u7B7E\u4E3A\u9009\u9879\u5BF9\u8C61\u7684\u67D0\u4E2A\u5C5E\u6027\u503C",children:"\u6307\u5B9A\u9009\u9879\u7684\u5B50\u9009\u9879\u4E3A\u9009\u9879\u5BF9\u8C61\u7684\u67D0\u4E2A\u5C5E\u6027\u503C",disabled:"\u6307\u5B9A\u9009\u9879\u7684\u7981\u7528\u4E3A\u9009\u9879\u5BF9\u8C61\u7684\u67D0\u4E2A\u5C5E\u6027\u503C",leaf:"\u6307\u5B9A\u9009\u9879\u7684\u53F6\u5B50\u8282\u70B9\u7684\u6807\u5FD7\u4F4D\u4E3A\u9009\u9879\u5BF9\u8C61\u7684\u67D0\u4E2A\u5C5E\u6027\u503C"}},checkbox:{name:"\u591A\u9009\u6846",props:{type:"\u6309\u94AE\u7C7B\u578B",disabled:"\u662F\u5426\u7981\u7528",min:"\u53EF\u88AB\u52FE\u9009\u7684\u6700\u5C0F\u6570\u91CF",max:"\u53EF\u88AB\u52FE\u9009\u7684\u6700\u5927\u6570\u91CF",textColor:"\u5F53\u6309\u94AE\u4E3A\u6D3B\u8DC3\u72B6\u6001\u65F6\u7684\u5B57\u4F53\u989C\u8272",fill:"\u5F53\u6309\u94AE\u4E3A\u6D3B\u8DC3\u72B6\u6001\u65F6\u7684\u8FB9\u6846\u548C\u80CC\u666F\u989C\u8272"}},col:{name:"\u5E03\u5C40\u683C\u5B50",props:{span:"\u6805\u683C\u5360\u636E\u7684\u5217\u6570",offset:"\u6805\u683C\u5DE6\u4FA7\u7684\u95F4\u9694\u683C\u6570",push:"\u6805\u683C\u5411\u53F3\u79FB\u52A8\u683C\u6570",pull:"\u6805\u683C\u5411\u5DE6\u79FB\u52A8\u683C\u6570"}},colorPicker:{name:"\u989C\u8272\u9009\u62E9\u5668",event:{activeChange:"\u9762\u677F\u4E2D\u5F53\u524D\u663E\u793A\u7684\u989C\u8272\u53D1\u751F\u6539\u53D8\u65F6\u89E6\u53D1"},props:{disabled:"\u662F\u5426\u7981\u7528",showAlpha:"\u662F\u5426\u652F\u6301\u900F\u660E\u5EA6\u9009\u62E9",colorFormat:"\u989C\u8272\u7684\u683C\u5F0F",predefine:"\u9884\u5B9A\u4E49\u989C\u8272"}},datePicker:{name:"\u65E5\u671F",props:{pickerOptions:"\u5F53\u524D\u65F6\u95F4\u65E5\u671F\u9009\u62E9\u5668\u7279\u6709\u7684\u9009\u9879",readonly:"\u5B8C\u5168\u53EA\u8BFB",disabled:"\u7981\u7528",type:"\u663E\u793A\u7C7B\u578B",editable:"\u6587\u672C\u6846\u53EF\u8F93\u5165",clearable:"\u662F\u5426\u663E\u793A\u6E05\u9664\u6309\u94AE",placeholder:"\u975E\u8303\u56F4\u9009\u62E9\u65F6\u7684\u5360\u4F4D\u5185\u5BB9",startPlaceholder:"\u8303\u56F4\u9009\u62E9\u65F6\u5F00\u59CB\u65E5\u671F\u7684\u5360\u4F4D\u5185\u5BB9",endPlaceholder:"\u8303\u56F4\u9009\u62E9\u65F6\u7ED3\u675F\u65E5\u671F\u7684\u5360\u4F4D\u5185\u5BB9",format:"\u663E\u793A\u5728\u8F93\u5165\u6846\u4E2D\u7684\u683C\u5F0F",align:"\u5BF9\u9F50\u65B9\u5F0F",rangeSeparator:"\u9009\u62E9\u8303\u56F4\u65F6\u7684\u5206\u9694\u7B26",unlinkPanels:"\u5728\u8303\u56F4\u9009\u62E9\u5668\u91CC\u53D6\u6D88\u4E24\u4E2A\u65E5\u671F\u9762\u677F\u4E4B\u95F4\u7684\u8054\u52A8"}},dateRange:{name:"\u65E5\u671F\u533A\u95F4"},timeRange:{name:"\u65F6\u95F4\u533A\u95F4"},elAlert:{name:"\u63D0\u793A",description:"\u8BF4\u660E\u6587\u5B57",props:{title:"\u6807\u9898",type:"\u4E3B\u9898",description:"\u8F85\u52A9\u6027\u6587\u5B57",closable:"\u662F\u5426\u53EF\u5173\u95ED",center:"\u6587\u5B57\u662F\u5426\u5C45\u4E2D",closeText:"\u5173\u95ED\u6309\u94AE\u81EA\u5B9A\u4E49\u6587\u672C",showIcon:"\u662F\u5426\u663E\u793A\u56FE\u6807",effect:"\u9009\u62E9\u63D0\u4F9B\u7684\u4E3B\u9898"}},elButton:{name:"\u6309\u94AE",props:{formCreateChild:"\u5185\u5BB9",size:"\u5C3A\u5BF8",type:"\u7C7B\u578B",plain:"\u662F\u5426\u6734\u7D20\u6309\u94AE",round:"\u662F\u5426\u5706\u89D2\u6309\u94AE",circle:"\u662F\u5426\u5706\u5F62\u6309\u94AE",loading:"\u662F\u5426\u52A0\u8F7D\u4E2D\u72B6\u6001",disabled:"\u662F\u5426\u7981\u7528\u72B6\u6001"}},elCard:{name:"\u5361\u7247",props:{header:"\u6807\u9898",shadow:"\u9634\u5F71\u663E\u793A\u65F6\u673A"}},elCollapse:{name:"\u6298\u53E0\u9762\u677F",event:{change:"\u5207\u6362\u5F53\u524D\u6D3B\u52A8\u9762\u677F\uFF0C\u5728\u624B\u98CE\u7434\u6A21\u5F0F\u4E0B\u5176\u7C7B\u578B\u662Fstring\uFF0C\u5728\u5176\u4ED6\u6A21\u5F0F\u4E0B\u662Farray"},props:{accordion:"\u662F\u5426\u624B\u98CE\u7434\u6A21\u5F0F"}},elCollapseItem:{name:"\u9762\u677F",props:{title:"\u9762\u677F\u6807\u9898",name:"\u552F\u4E00\u6807\u5FD7\u7B26",disabled:"\u662F\u5426\u7981\u7528"}},elDivider:{name:"\u5206\u5272\u7EBF",props:{formCreateChild:"\u8BBE\u7F6E\u5206\u5272\u7EBF\u6587\u6848",contentPosition:"\u8BBE\u7F6E\u5206\u5272\u7EBF\u6587\u6848\u7684\u4F4D\u7F6E"}},elTabPane:{name:"\u9009\u9879\u5361",props:{label:"\u9009\u9879\u5361\u6807\u9898",disabled:"\u662F\u5426\u7981\u7528",name:"\u9009\u9879\u5361\u7684\u6807\u8BC6\u7B26",lazy:"\u6807\u7B7E\u662F\u5426\u5EF6\u8FDF\u6E32\u67D3"}},elTabs:{name:"\u6807\u7B7E\u9875",event:{tabClick:"tab \u88AB\u9009\u4E2D\u65F6\u89E6\u53D1",tabChange:"activeName \u6539\u53D8\u65F6\u89E6\u53D1",tabRemove:"\u70B9\u51FB tab \u79FB\u9664\u6309\u94AE\u65F6\u89E6\u53D1",tabAdd:"\u70B9\u51FB tab \u65B0\u589E\u6309\u94AE\u65F6\u89E6\u53D1",edit:"\u70B9\u51FB tab \u7684\u65B0\u589E\u6216\u79FB\u9664\u6309\u94AE\u540E\u89E6\u53D1"},props:{type:"\u98CE\u683C\u7C7B\u578B",closable:"\u6807\u7B7E\u662F\u5426\u53EF\u5173\u95ED",tabPosition:"\u9009\u9879\u5361\u6240\u5728\u4F4D\u7F6E",stretch:"\u6807\u7B7E\u7684\u5BBD\u5EA6\u662F\u5426\u81EA\u6491\u5F00"}},elTag:{name:"\u6807\u7B7E",props:{formCreateNative:"\u662F\u5426\u663E\u793A\u6807\u9898",formCreateTitle:"\u6807\u9898",formCreateChild:"\u6807\u7B7E\u5185\u5BB9",type:"\u6807\u7B7E\u7684\u7C7B\u578B",size:"\u6807\u7B7E\u7684\u5C3A\u5BF8",effect:"\u6807\u7B7E\u7684\u4E3B\u9898",closable:"\u662F\u5426\u53EF\u5173\u95ED",disableTransitions:"\u662F\u5426\u7981\u7528\u6E10\u53D8\u52A8\u753B",hit:"\u662F\u5426\u6709\u8FB9\u6846\u63CF\u8FB9",round:"\u662F\u5426\u4E3A\u5706\u5F62",color:"\u80CC\u666F\u8272"}},elTransfer:{name:"\u7A7F\u68AD\u6846",event:{leftCheckChange:"\u5DE6\u4FA7\u5217\u8868\u5143\u7D20\u88AB\u7528\u6237\u9009\u4E2D / \u53D6\u6D88\u9009\u4E2D\u65F6\u89E6\u53D1",rightCheckChange:"\u53F3\u4FA7\u5217\u8868\u5143\u7D20\u88AB\u7528\u6237\u9009\u4E2D / \u53D6\u6D88\u9009\u4E2D\u65F6\u89E6\u53D1"},props:{filterable:"\u662F\u5426\u53EF\u641C\u7D22",filterPlaceholder:"\u641C\u7D22\u6846\u5360\u4F4D\u7B26",targetOrder:"\u53F3\u4FA7\u5217\u8868\u5143\u7D20\u7684\u6392\u5E8F\u7B56\u7565",targetOrderInfo:"\u82E5\u4E3A original\uFF0C\u5219\u4FDD\u6301\u4E0E\u6570\u636E\u76F8\u540C\u7684\u987A\u5E8F\uFF1B\u82E5\u4E3A push\uFF0C\u5219\u65B0\u52A0\u5165\u7684\u5143\u7D20\u6392\u5728\u6700\u540E\uFF1B\u82E5\u4E3A unshift\uFF0C\u5219\u65B0\u52A0\u5165\u7684\u5143\u7D20\u6392\u5728\u6700\u524D",titles:"\u81EA\u5B9A\u4E49\u5217\u8868\u6807\u9898",buttonTexts:"\u81EA\u5B9A\u4E49\u6309\u94AE\u6587\u6848",props:"\u6570\u636E\u6E90\u7684\u5B57\u6BB5\u522B\u540D"}},elTreeSelect:{name:"\u6811\u5F62\u9009\u62E9",event:{removeTag:"\u591A\u9009\u6A21\u5F0F\u4E0B\u79FB\u9664tag\u65F6\u89E6\u53D1"},props:{multiple:"\u662F\u5426\u591A\u9009",disabled:"\u662F\u5426\u7981\u7528",clearable:"\u662F\u5426\u53EF\u4EE5\u6E05\u7A7A\u9009\u9879",collapseTags:"\u591A\u9009\u65F6\u662F\u5426\u5C06\u9009\u4E2D\u503C\u6309\u6587\u5B57\u7684\u5F62\u5F0F\u5C55\u793A",multipleLimit:"\u591A\u9009\u65F6\u7528\u6237\u6700\u591A\u53EF\u4EE5\u9009\u62E9\u7684\u9879\u76EE\u6570\uFF0C\u4E3A 0 \u5219\u4E0D\u9650\u5236",placeholder:"\u5360\u4F4D\u7B26",props:"\u914D\u7F6E\u9009\u9879",renderAfterExpand:"\u662F\u5426\u5728\u7B2C\u4E00\u6B21\u5C55\u5F00\u67D0\u4E2A\u6811\u8282\u70B9\u540E\u624D\u6E32\u67D3\u5176\u5B50\u8282\u70B9",defaultExpandAll:"\u662F\u5426\u9ED8\u8BA4\u5C55\u5F00\u6240\u6709\u8282\u70B9",expandOnClickNode:"\u662F\u5426\u5728\u70B9\u51FB\u8282\u70B9\u7684\u65F6\u5019\u5C55\u5F00\u6216\u8005\u6536\u7F29\u8282\u70B9",checkOnClickNode:"\u662F\u5426\u5728\u70B9\u51FB\u8282\u70B9\u7684\u65F6\u5019\u9009\u4E2D\u8282\u70B9",nodeKey:"\u6BCF\u4E2A\u6811\u8282\u70B9\u7528\u6765\u4F5C\u4E3A\u552F\u4E00\u6807\u8BC6\u7684\u5C5E\u6027\uFF0C\u6574\u68F5\u6811\u5E94\u8BE5\u662F\u552F\u4E00\u7684"}},fcEditor:{name:"\u5BCC\u6587\u672C\u6846",props:{disabled:"\u662F\u5426\u7981\u7528"}},fcRow:{name:"\u6805\u683C\u5E03\u5C40",props:{gutter:"\u6805\u683C\u95F4\u9694",type:"flex\u5E03\u5C40\u6A21\u5F0F",justify:"flex\u5E03\u5C40\u4E0B\u7684\u6C34\u5E73\u6392\u5217\u65B9\u5F0F",align:"flex\u5E03\u5C40\u4E0B\u7684\u5782\u76F4\u6392\u5217\u65B9\u5F0F"}},fcTable:{name:"\u8868\u683C\u5E03\u5C40",props:{border:"\u662F\u5426\u663E\u793A\u8FB9\u6846",borderColor:"\u8FB9\u6846\u989C\u8272",borderWidth:"\u8FB9\u6846\u5BBD\u5EA6"}},fcTableGrid:{name:"\u683C\u5B50"},group:{name:"\u5B50\u8868\u5355",props:{disabled:"\u662F\u5426\u7981\u7528",syncDisabled:"\u662F\u5426\u4E0E\u5B50\u8868\u5355\u5F3A\u5236\u540C\u6B65\u7981\u7528\u72B6\u6001",expand:"\u8BBE\u7F6E\u9ED8\u8BA4\u5C55\u5F00\u51E0\u9879",button:"\u662F\u5426\u663E\u793A\u64CD\u4F5C\u6309\u94AE",sortBtn:"\u662F\u5426\u663E\u793A\u6392\u5E8F\u6309\u94AE",min:"\u8BBE\u7F6E\u6700\u5C0F\u6DFB\u52A0\u51E0\u9879",max:"\u8BBE\u7F6E\u6700\u591A\u6DFB\u52A0\u51E0\u9879"}},html:{name:"HTML",props:{formCreateNative:"\u662F\u5426\u663E\u793A\u6807\u9898",formCreateTitle:"\u6807\u9898",formCreateChild:"\u5185\u5BB9"}},input:{name:"\u8F93\u5165\u6846",event:{change:"\u5F53\u503C\u6539\u53D8\u65F6\uFF0C\u5F53\u7EC4\u4EF6\u5931\u53BB\u7126\u70B9\u6216\u7528\u6237\u6309Enter\u65F6\u89E6\u53D1"},props:{maxlength:"\u6700\u5927\u8F93\u5165\u957F\u5EA6",minlength:"\u6700\u5C0F\u8F93\u5165\u957F\u5EA6",placeholder:"\u8F93\u5165\u6846\u5360\u4F4D\u6587\u672C",clearable:"\u662F\u5426\u663E\u793A\u6E05\u9664\u6309\u94AE",disabled:"\u662F\u5426\u7981\u7528",readonly:"\u662F\u5426\u53EA\u8BFB"}},inputNumber:{name:"\u8BA1\u6570\u5668",props:{min:"\u8BBE\u7F6E\u8BA1\u6570\u5668\u5141\u8BB8\u7684\u6700\u5C0F\u503C",max:"\u8BBE\u7F6E\u8BA1\u6570\u5668\u5141\u8BB8\u7684\u6700\u5927\u503C",step:"\u8BA1\u6570\u5668\u6B65\u957F",stepStrictly:"\u662F\u5426\u53EA\u80FD\u8F93\u5165 step \u7684\u500D\u6570",disabled:"\u662F\u5426\u7981\u7528\u8BA1\u6570\u5668",controls:"\u662F\u5426\u4F7F\u7528\u63A7\u5236\u6309\u94AE",controlsPosition:"\u63A7\u5236\u6309\u94AE\u4F4D\u7F6E",placeholder:"\u8F93\u5165\u6846\u5360\u4F4D\u6587\u672C"}},password:{name:"\u5BC6\u7801\u8F93\u5165\u6846",event:{change:"\u5F53\u503C\u6539\u53D8\u65F6\uFF0C\u5F53\u7EC4\u4EF6\u5931\u53BB\u7126\u70B9\u6216\u7528\u6237\u6309Enter\u65F6\u89E6\u53D1"},props:{disabled:"\u662F\u5426\u7981\u7528",readonly:"\u662F\u5426\u53EA\u8BFB",maxlength:"\u6700\u5927\u8F93\u5165\u957F\u5EA6",minlength:"\u6700\u5C0F\u8F93\u5165\u957F\u5EA6",placeholder:"\u8F93\u5165\u6846\u5360\u4F4D\u6587\u672C",clearable:"\u662F\u5426\u663E\u793A\u6E05\u9664\u6309\u94AE"}},radio:{name:"\u5355\u9009\u6846",props:{disabled:"\u662F\u5426\u7981\u7528",type:"\u6309\u94AE\u5F62\u5F0F",textColor:"\u6309\u94AE\u5F62\u5F0F\u6FC0\u6D3B\u65F6\u7684\u6587\u672C\u989C\u8272",fill:"\u6309\u94AE\u5F62\u5F0F\u6FC0\u6D3B\u65F6\u7684\u586B\u5145\u8272\u548C\u8FB9\u6846\u8272"}},rate:{name:"\u8BC4\u5206",props:{max:"\u6700\u5927\u5206\u503C",disabled:"\u662F\u5426\u7981\u7528",allowHalf:"\u662F\u5426\u5141\u8BB8\u534A\u9009",voidColor:"\u672A\u9009\u4E2D\u65F6\u56FE\u6807\u7684\u989C\u8272",disabledVoidColor:"\u53EA\u8BFB\u65F6\u672A\u9009\u4E2D\u65F6\u56FE\u6807\u7684\u989C\u8272",voidIconClass:"\u672A\u9009\u4E2D\u65F6\u56FE\u6807\u7684\u7C7B\u540D",disabledVoidIconClass:"\u53EA\u8BFB\u65F6\u672A\u9009\u4E2D\u65F6\u56FE\u6807\u7684\u7C7B\u540D",showScore:"\u662F\u5426\u663E\u793A\u5F53\u524D\u5206\u6570",textColor:"\u8F85\u52A9\u6587\u5B57\u7684\u989C\u8272",scoreTemplate:"\u5206\u6570\u663E\u793A\u6A21\u677F"}},select:{name:"\u9009\u62E9\u5668",event:{removeTag:"\u591A\u9009\u6A21\u5F0F\u4E0B\u79FB\u9664tag\u65F6\u89E6\u53D1"},props:{multiple:"\u662F\u5426\u591A\u9009",disabled:"\u662F\u5426\u7981\u7528",clearable:"\u662F\u5426\u53EF\u4EE5\u6E05\u7A7A\u9009\u9879",collapseTags:"\u591A\u9009\u65F6\u662F\u5426\u5C06\u9009\u4E2D\u503C\u6309\u6587\u5B57\u7684\u5F62\u5F0F\u5C55\u793A",multipleLimit:"\u591A\u9009\u65F6\u7528\u6237\u6700\u591A\u53EF\u4EE5\u9009\u62E9\u7684\u9879\u76EE\u6570\uFF0C\u4E3A 0 \u5219\u4E0D\u9650\u5236",placeholder:"\u5360\u4F4D\u7B26",filterable:"\u662F\u5426\u53EF\u641C\u7D22",allowCreate:"\u662F\u5426\u5141\u8BB8\u7528\u6237\u521B\u5EFA\u65B0\u6761\u76EE",noMatchText:"\u641C\u7D22\u6761\u4EF6\u65E0\u5339\u914D\u65F6\u663E\u793A\u7684\u6587\u5B57",noDataText:"\u9009\u9879\u4E3A\u7A7A\u65F6\u663E\u793A\u7684\u6587\u5B57",reserveKeyword:"\u591A\u9009\u4E14\u53EF\u641C\u7D22\u65F6\uFF0C\u662F\u5426\u5728\u9009\u4E2D\u4E00\u4E2A\u9009\u9879\u540E\u4FDD\u7559\u5F53\u524D\u7684\u641C\u7D22\u5173\u952E\u8BCD",defaultFirstOption:"\u5728\u8F93\u5165\u6846\u6309\u4E0B\u56DE\u8F66\uFF0C\u9009\u62E9\u7B2C\u4E00\u4E2A\u5339\u914D\u9879",remote:"\u5176\u4E2D\u7684\u9009\u9879\u662F\u5426\u4ECE\u670D\u52A1\u5668\u8FDC\u7A0B\u52A0\u8F7D",remoteMethod:"\u81EA\u5B9A\u4E49\u8FDC\u7A0B\u641C\u7D22\u65B9\u6CD5"}},slider:{name:"\u6ED1\u5757",props:{min:"\u6700\u5C0F\u503C",max:"\u6700\u5927\u503C",disabled:"\u662F\u5426\u7981\u7528",step:"\u6B65\u957F",showInput:"\u662F\u5426\u663E\u793A\u8F93\u5165\u6846\uFF0C\u4EC5\u5728\u975E\u8303\u56F4\u9009\u62E9\u65F6\u6709\u6548",showInputControls:"\u5728\u663E\u793A\u8F93\u5165\u6846\u7684\u60C5\u51B5\u4E0B\uFF0C\u662F\u5426\u663E\u793A\u8F93\u5165\u6846\u7684\u63A7\u5236\u6309\u94AE",showStops:"\u662F\u5426\u663E\u793A\u95F4\u65AD\u70B9",range:"\u662F\u5426\u4E3A\u8303\u56F4\u9009\u62E9",vertical:"\u662F\u5426\u7AD6\u5411\u6A21\u5F0F",height:"Slider \u9AD8\u5EA6\uFF0C\u7AD6\u5411\u6A21\u5F0F\u65F6\u5FC5\u586B"}},space:{name:"\u95F4\u8DDD",props:{height:"\u9AD8\u5EA6"}},subForm:{name:"\u5206\u7EC4",props:{disabled:"\u662F\u5426\u7981\u7528",syncDisabled:"\u662F\u5426\u4E0E\u5B50\u8868\u5355\u5F3A\u5236\u540C\u6B65\u7981\u7528\u72B6\u6001"}},switch:{name:"\u5F00\u5173",props:{disabled:"\u662F\u5426\u7981\u7528",width:"\u5BBD\u5EA6\uFF08px\uFF09",activeText:"\u6253\u5F00\u65F6\u7684\u6587\u5B57\u63CF\u8FF0",inactiveText:"\u5173\u95ED\u65F6\u7684\u6587\u5B57\u63CF\u8FF0",activeValue:"\u6253\u5F00\u65F6\u7684\u503C",inactiveValue:"\u5173\u95ED\u65F6\u7684\u503C",activeColor:"\u6253\u5F00\u65F6\u7684\u80CC\u666F\u8272",inactiveColor:"\u5173\u95ED\u65F6\u7684\u80CC\u666F\u8272"}},tableForm:{name:"\u8868\u683C\u8868\u5355",props:{disabled:"\u662F\u5426\u7981\u7528",max:"\u6700\u591A\u6DFB\u52A0\u51E0\u884C\uFF0C\u4E3A 0 \u5219\u4E0D\u9650\u5236"}},tableFormColumn:{name:"\u8868\u683C\u683C\u5B50",label:"\u81EA\u5B9A\u4E49\u540D\u79F0",props:{label:"\u6807\u9898",width:"\u5BBD\u5EA6",color:"\u989C\u8272"}},text:{name:"\u6587\u5B57",props:{formCreateNative:"\u662F\u5426\u663E\u793A\u6807\u9898",formCreateTitle:"\u6807\u9898",formCreateChild:"\u5185\u5BB9"}},textarea:{name:"\u591A\u884C\u8F93\u5165\u6846",event:{change:"\u5F53\u503C\u6539\u53D8\u65F6\uFF0C\u5F53\u7EC4\u4EF6\u5931\u53BB\u7126\u70B9\u6216\u7528\u6237\u6309Enter\u65F6\u89E6\u53D1"},props:{disabled:"\u662F\u5426\u7981\u7528",readonly:"\u662F\u5426\u53EA\u8BFB",maxlength:"\u6700\u5927\u8F93\u5165\u957F\u5EA6",minlength:"\u6700\u5C0F\u8F93\u5165\u957F\u5EA6",showWordLimit:"\u662F\u5426\u663E\u793A\u7EDF\u8BA1\u5B57\u6570",placeholder:"\u8F93\u5165\u6846\u5360\u4F4D\u6587\u672C",rows:"\u8F93\u5165\u6846\u884C\u6570",autosize:"\u9AD8\u5EA6\u662F\u5426\u81EA\u9002\u5E94"}},timePicker:{name:"\u65F6\u95F4",props:{pickerOptions:"\u5F53\u524D\u65F6\u95F4\u65E5\u671F\u9009\u62E9\u5668\u7279\u6709\u7684\u9009\u9879",readonly:"\u5B8C\u5168\u53EA\u8BFB",disabled:"\u7981\u7528",editable:"\u6587\u672C\u6846\u53EF\u8F93\u5165",clearable:"\u662F\u5426\u663E\u793A\u6E05\u9664\u6309\u94AE",placeholder:"\u975E\u8303\u56F4\u9009\u62E9\u65F6\u7684\u5360\u4F4D\u5185\u5BB9",startPlaceholder:"\u8303\u56F4\u9009\u62E9\u65F6\u5F00\u59CB\u65E5\u671F\u7684\u5360\u4F4D\u5185\u5BB9",endPlaceholder:"\u8303\u56F4\u9009\u62E9\u65F6\u5F00\u59CB\u65E5\u671F\u7684\u5360\u4F4D\u5185\u5BB9",isRange:"\u662F\u5426\u4E3A\u65F6\u95F4\u8303\u56F4\u9009\u62E9",arrowControl:"\u662F\u5426\u4F7F\u7528\u7BAD\u5934\u8FDB\u884C\u65F6\u95F4\u9009\u62E9",align:"\u5BF9\u9F50\u65B9\u5F0F"}},tree:{name:"\u6811\u5F62\u63A7\u4EF6",event:{nodeClick:"\u5F53\u8282\u70B9\u88AB\u70B9\u51FB\u7684\u65F6\u5019\u89E6\u53D1",nodeContextmenu:"\u5F53\u67D0\u4E00\u8282\u70B9\u88AB\u9F20\u6807\u53F3\u952E\u70B9\u51FB\u65F6\u4F1A\u89E6\u53D1\u8BE5\u4E8B\u4EF6",checkChange:"\u5F53\u590D\u9009\u6846\u88AB\u70B9\u51FB\u7684\u65F6\u5019\u89E6\u53D1",check:"\u70B9\u51FB\u8282\u70B9\u590D\u9009\u6846\u4E4B\u540E\u89E6\u53D1",currentChange:"\u5F53\u524D\u9009\u4E2D\u8282\u70B9\u53D8\u5316\u65F6\u89E6\u53D1\u7684\u4E8B\u4EF6",nodeExpand:"\u8282\u70B9\u88AB\u5C55\u5F00\u65F6\u89E6\u53D1\u7684\u4E8B\u4EF6",nodeCollapse:"\u8282\u70B9\u88AB\u5173\u95ED\u65F6\u89E6\u53D1\u7684\u4E8B\u4EF6",nodeDragStart:"\u8282\u70B9\u5F00\u59CB\u62D6\u62FD\u65F6\u89E6\u53D1\u7684\u4E8B\u4EF6",nodeDragEnter:"\u62D6\u62FD\u8FDB\u5165\u5176\u4ED6\u8282\u70B9\u65F6\u89E6\u53D1\u7684\u4E8B\u4EF6",nodeDragLeave:"\u62D6\u62FD\u79BB\u5F00\u67D0\u4E2A\u8282\u70B9\u65F6\u89E6\u53D1\u7684\u4E8B\u4EF6",nodeDragOver:"\u5728\u62D6\u62FD\u8282\u70B9\u65F6\u89E6\u53D1\u7684\u4E8B\u4EF6\uFF08\u7C7B\u4F3C\u6D4F\u89C8\u5668\u7684 mouseover \u4E8B\u4EF6\uFF09",nodeDragEnd:"\u62D6\u62FD\u7ED3\u675F\u65F6\uFF08\u53EF\u80FD\u672A\u6210\u529F\uFF09\u89E6\u53D1\u7684\u4E8B\u4EF6",nodeDrop:"\u62D6\u62FD\u6210\u529F\u5B8C\u6210\u65F6\u89E6\u53D1\u7684\u4E8B\u4EF6"},props:{emptyText:"\u5185\u5BB9\u4E3A\u7A7A\u7684\u65F6\u5019\u5C55\u793A\u7684\u6587\u672C",props:"\u914D\u7F6E\u9009\u9879",renderAfterExpand:"\u662F\u5426\u5728\u7B2C\u4E00\u6B21\u5C55\u5F00\u67D0\u4E2A\u6811\u8282\u70B9\u540E\u624D\u6E32\u67D3\u5176\u5B50\u8282\u70B9",defaultExpandAll:"\u662F\u5426\u9ED8\u8BA4\u5C55\u5F00\u6240\u6709\u8282\u70B9",expandOnClickNode:"\u662F\u5426\u5728\u70B9\u51FB\u8282\u70B9\u7684\u65F6\u5019\u5C55\u5F00\u6216\u8005\u6536\u7F29\u8282\u70B9\uFF0C\u5982\u679C\u4E3A false\uFF0C\u5219\u53EA\u6709\u70B9\u7BAD\u5934\u56FE\u6807\u7684\u65F6\u5019\u624D\u4F1A\u5C55\u5F00\u6216\u8005\u6536\u7F29\u8282\u70B9\u3002",checkOnClickNode:"\u662F\u5426\u5728\u70B9\u51FB\u8282\u70B9\u7684\u65F6\u5019\u9009\u4E2D\u8282\u70B9",autoExpandParent:"\u5C55\u5F00\u5B50\u8282\u70B9\u7684\u65F6\u5019\u662F\u5426\u81EA\u52A8\u5C55\u5F00\u7236\u8282\u70B9",checkStrictly:"\u5728\u663E\u793A\u590D\u9009\u6846\u7684\u60C5\u51B5\u4E0B\uFF0C\u662F\u5426\u4E25\u683C\u7684\u9075\u5FAA\u7236\u5B50\u4E0D\u4E92\u76F8\u5173\u8054\u7684\u505A\u6CD5",accordion:"\u662F\u5426\u6BCF\u6B21\u53EA\u6253\u5F00\u4E00\u4E2A\u540C\u7EA7\u6811\u8282\u70B9\u5C55\u5F00",indent:"\u76F8\u90BB\u7EA7\u8282\u70B9\u95F4\u7684\u6C34\u5E73\u7F29\u8FDB(px)",nodeKey:"\u6BCF\u4E2A\u6811\u8282\u70B9\u7528\u6765\u4F5C\u4E3A\u552F\u4E00\u6807\u8BC6\u7684\u5C5E\u6027\uFF0C\u6574\u68F5\u6811\u5E94\u8BE5\u662F\u552F\u4E00\u7684"}},upload:{name:"\u4E0A\u4F20",info:"\u5728onSuccess\u65B9\u6CD5\u4E2D\u5C06\u63A5\u53E3\u8FD4\u56DE\u7684url\u8D4B\u503C\u7ED9file.url",event:{remove:"\u6587\u4EF6\u5217\u8868\u79FB\u9664\u6587\u4EF6\u65F6\u89E6\u53D1"},props:{listType:"\u4E0A\u4F20\u7C7B\u578B",multiple:"\u662F\u5426\u652F\u6301\u591A\u9009\u6587\u4EF6",action:"\u4E0A\u4F20\u7684\u5730\u5740(\u5FC5\u586B)",onSuccess:"\u4E0A\u4F20\u6210\u529F\u56DE\u8C03",headers:"\u8BBE\u7F6E\u4E0A\u4F20\u7684\u8BF7\u6C42\u5934\u90E8",data:"\u4E0A\u4F20\u65F6\u9644\u5E26\u7684\u989D\u5916\u53C2\u6570",name:"\u4E0A\u4F20\u7684\u6587\u4EF6\u5B57\u6BB5\u540D",withCredentials:"\u652F\u6301\u53D1\u9001 cookie \u51ED\u8BC1\u4FE1\u606F",accept:"\u63A5\u53D7\u4E0A\u4F20\u7684\u6587\u4EF6\u7C7B\u578B",autoUpload:"\u662F\u5426\u5728\u9009\u53D6\u6587\u4EF6\u540E\u7ACB\u5373\u8FDB\u884C\u4E0A\u4F20",disabled:"\u662F\u5426\u7981\u7528",limit:"\u6700\u5927\u5141\u8BB8\u4E0A\u4F20\u4E2A\u6570"}}}};function fp(e,t,n,r=[]){t.id||(t.id=1),n&&n--;for(let o=0;o<3;o++){const i={[t.label]:e+10*n+o,[t.value]:""+t.id++};n&&fp(e,t,n,i.children=[]),r.push(i)}return r}function kx(e,t){const n=[{label:e("fetch.optionsType.struct"),value:2},{label:e("fetch.optionsType.fetch"),value:1}],r=[{value:1,rule:[{type:"FetchConfig",field:"formCreateEffect>fetch",props:{to:t}}]},{value:2,rule:[{type:"TableOptions",field:"formCreate"+g4(t).replace(".",">"),props:{keyValue:"label"}}]}];return{type:"radio",title:e("props.options"),field:"_optionType",value:2,options:n,props:{type:"button"},control:r}}function Dx({t:e,to:t,label:n,value:r}){const o=[{label:e("fetch.optionsType.struct"),value:2},{label:e("fetch.optionsType.fetch"),value:1}],i=[{value:1,rule:[{type:"FetchConfig",field:"formCreateEffect>fetch",props:{to:t}}]},{value:2,rule:[{type:"TreeOptions",field:"formCreate"+g4(t).replace(".",">"),props:{columns:{label:n,value:r},keyValue:n}}]}];return{type:"radio",title:e("props.options"),field:"_optionType",value:2,options:o,props:{type:"button"},control:i}}function g4(e){return e.replace(e[0],e[0].toLocaleUpperCase())}const pp=function(e){const t=/object ([a-zA-Z]*)/.exec(Object.prototype.toString.call(e));return t&&zde[t[1].toLowerCase()]?zde[t[1].toLowerCase()](e):e},zde={object:function(e){var t=[];for(var n in e)!v4(e,n)||t.push(pp(n)+": "+(e[n]!=null?pp(e[n]):"null"));return`{
| `+t.join(`,
| `)+`
| }`},function:function(e){var t=/^ *([\w]+) *\(/.exec(e=""+e);return t&&t[1]!=="function"?"function "+e:e},array:function(e){for(var t=0,n=[];t<e.length;t++)n[t]=e[t]!=null?pp(e[t]):"null";return"["+n.join(", ")+"]"},string:function(e){for(var t=e.split(""),n=0;n<t.length;n++){var r=t[n];r>=" "?r==="\\"?t[n]="\\\\":r==='"'&&(t[n]='\\"'):t[n]=r===`
| `?"\\n":r==="\r"?"\\r":r===" "?"\\t":r==="\b"?"\\b":r==="\f"?"\\f":"\\u00"+((r=r.charCodeAt())>15?1:0)+r%16}return'"'+t.join("")+'"'}},Hde=function(e){if(e&&typeof e=="object"){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let n=e[t];(Array.isArray(n)||Pr.Object(n))&&Hde(n),Pr.String(n)&&(e[t]=b$e(n))}}return e},A$e=e=>(t,n)=>w$e(t,n,M(e)),w$e=(e,t,n)=>function(r,o,i){let a=0,l=(o=(o||"").split(".")).length;for(;r!=null&&a<l;)r=r[o[a++]];return a&&a===l&&r!==void 0?r:i}(n,e,"").replace(/\{(\w+)\}/g,(r,o)=>{var i;return`${(i=t==null?void 0:t[o])!=null?i:`{${o}}`}`}),x$e=e=>{const t=ee(()=>M(e).name),n=ee(()=>g4(function(o){const i=o.replace(/(-[a-z])/g,function(a){return a.replace("-","").toLocaleUpperCase()});return dI(i)}(t.value||""))),r=Jn(e)?e:de(e);return{lang:t,name:n,locale:r,t:A$e(e)}},fI=e=>x$e(ee(()=>e.value||Vde)),ya=(e,t,n)=>t.map(r=>(r.label=e("props."+r.value)||r.label,r)),er=(e,t,n)=>n.map(r=>(r.field==="formCreate$required"?r.title=e("validate.required")||r.title:r.field&&r.field!=="_optionType"&&(r.title=e("com."+t+"."+r.field)||r.title),r.type==="template"&&Pr.trueArray(r.children)&&(r.children=er(e,t,r.children)),r)),pI=e=>{const t=[];return e&&e.forEach(n=>{if(n._fc_drag_tag){const r={id:n.__fc__.id,rule:n,children:pI(n.children)};r.children.length||delete r.children,t.push(r)}else t.push(...pI(n.children))}),t},$de=e=>{const t=n=>{const r=[];return n&&n.forEach(o=>{o.field?(o.children=t(o.children||[]),o.children.length||delete o.children,r.push(o)):r.push(...t(o.children||[]))}),r};return t(e)},Ude=e=>{const t=n=>{const r=[];return n&&n.forEach(o=>{if(typeof o=="object")if(o._fc_drag_tag){const i={_fc_id:o._fc_id,type:o.type,field:o.field,title:o.title,name:o.name,slot:o.slot,props:{...o.props||{}},children:t(o.children||[])};o.children&&typeof o.children[0]=="string"&&(i.content=o.children[0]),i.children.length||delete i.children,r.push(i)}else r.push(...t(o.children))}),r};return t(e)};function Wde(e){return{name:"$inject",columns:[{label:"$inject.api",info:e("event.inject.api"),type:"Api"},{label:"$inject.rule",info:e("event.inject.rule"),type:"Rule[]"},{label:"$inject.self",info:e("event.inject.self"),type:"Rule"},{label:"$inject.option",info:e("event.inject.option"),type:"Object"},{label:"$inject.args",info:e("event.inject.args"),type:"Array"}]}}function Eg(e){return["",null,void 0].indexOf(e)!==-1}function Gde({t:e}){return[{type:"input",field:">formName",value:"",title:e("form.formName")},{type:"radio",field:"labelPosition",value:"left",title:e("form.labelPosition"),options:ya(e,[{value:"left",label:"left"},{value:"right",label:"right"},{value:"top",label:"top"}])},{type:"radio",field:"size",value:"small",title:e("form.size"),options:ya(e,[{value:"large",label:"large"},{value:"default",label:"default"},{value:"small",label:"small"}])},{type:"input",field:"labelSuffix",value:"",title:e("form.labelSuffix"),style:{width:"150px"}},{type:"SizeInput",field:"labelWidth",value:"125px",title:e("form.labelWidth")},{type:"switch",field:"hideRequiredAsterisk",value:!1,title:e("form.hideRequiredAsterisk")},{type:"switch",field:"showMessage",value:!0,title:e("form.showMessage")},{type:"switch",field:"inlineMessage",value:!1,title:e("form.inlineMessage")},{type:"switch",field:"_submitBtn>show",value:!0,title:e("form.submitBtn")},{type:"switch",field:"_resetBtn>show",value:!1,title:e("form.resetBtn")},{type:"FnConfig",field:">_event",info:{type:"tooltip",native:!0,effect:"light",align:"left",content:e("form.document")+'\uFF1A<a target="_blank" href="https://form-create.com/v3/guide/global-event">https://form-create.com/v3/guide/global-event</a>',rawContent:!0},value:{},col:{show:!0},props:{eventConfig:[{name:"onSubmit",args:["formData","api"]},{name:"onCreated",args:["api"]},{name:"onMounted",args:["api"]},{name:"onChange",args:["field","value","options"]},{name:"beforeFetch",args:["config","data"]}]},title:e("form.event")}]}function y4({t:e}){return[{type:"FieldInput",field:"field",value:"",title:e("form.field")},{type:"input",field:"title",value:"",title:e("form.title")},{type:"input",field:"info",value:"",title:e("form.info")},{type:"SizeInput",field:"formCreateWrap>labelWidth",value:"",title:e("form.labelWidth")},{type:"Struct",field:"_control",value:[],title:e("form.control"),info:{type:"tooltip",native:!0,effect:"light",align:"left",content:e("form.document")+'\uFF1A<a target="_blank" href="https://form-create.com/v3/guide/control">https://form-create.com/v3/guide/control</a>',rawContent:!0},props:{defaultValue:[],validate:t=>!!Array.isArray(t)&&(!t.length||!t.some(({rule:n})=>!Array.isArray(n)))}}]}function qde({t:e}){return[{type:"Required",field:"$required",title:e("validate.required")},{type:"validate",field:"validate",title:e("validate.rule"),value:[]}]}function _$e(e){e=e||new Map;const t={$on(n,r){const o=e.get(n);o&&o.push(r)||e.set(n,[r])},$once(n,r){r._once=!0,t.$on(n,r)},$off(n,r){const o=e.get(n);o&&o.splice(o.indexOf(r)>>>0,1)},$emit(n,...r){(e.get(n)||[]).slice().map(o=>{o._once&&(t.$off(n,o),delete o._once),o(...r)}),(e.get("*")||[]).slice().map(o=>{o(n,r)})}};return t}let E$e=0;function vr(){const e=370+ ++E$e;return"F"+Math.random().toString(36).substr(3,3)+(+`${Date.now()}`).toString(36)+e.toString(36)+"c"}const hI="radio",C$e={menu:"main",icon:"icon-radio",label:"\u5355\u9009\u6846",name:hI,event:["change"],validate:["string","number"],rule:({t:e})=>({type:hI,field:vr(),title:e("com.radio.name"),info:"",effect:{fetch:""},$required:!1,props:{},options:fp(e("props.option"),{label:"label",value:"value"},1)}),props:(e,{t})=>er(t,hI+".props",[kx(t,"options"),{type:"switch",field:"disabled"},{type:"switch",field:"type",props:{activeValue:"button",inactiveValue:"default"}},{type:"ColorInput",field:"textColor"},{type:"ColorInput",field:"fill"}])},vI="checkbox",S$e={menu:"main",icon:"icon-checkbox",label:"\u591A\u9009\u6846",name:vI,event:["change"],validate:["array"],rule:({t:e})=>({type:vI,field:vr(),title:e("com.checkbox.name"),info:"",effect:{fetch:""},$required:!1,props:{},options:fp(e("props.option"),{label:"label",value:"value"},1)}),props:(e,{t})=>er(t,vI+".props",[kx(t,"options"),{type:"switch",field:"disabled"},{type:"switch",field:"type",props:{activeValue:"button",inactiveValue:"default"}},{field:"min",type:"inputNumber",props:{min:0}},{field:"max",type:"inputNumber",props:{min:0}},{type:"ColorInput",field:"textColor"},{type:"ColorInput",field:"fill"}])},mI="input",k$e={menu:"main",icon:"icon-input",label:"\u8F93\u5165\u6846",name:mI,event:["blur","focus","change","input","clear"],validate:["string","url","email"],rule:({t:e})=>({type:mI,field:vr(),title:e("com.input.name"),info:"",$required:!1,props:{}}),props:(e,{t})=>er(t,mI+".props",[{type:"switch",field:"disabled"},{type:"switch",field:"readonly"},{type:"inputNumber",field:"maxlength",props:{min:0}},{type:"inputNumber",field:"minlength",props:{min:0}},{type:"input",field:"placeholder"},{type:"switch",field:"clearable"}])},Kde="textarea",D$e={menu:"main",icon:"icon-textarea",label:"\u591A\u884C\u8F93\u5165\u6846",name:Kde,event:["blur","focus","change","input"],validate:["string"],rule:({t:e})=>({type:"input",field:vr(),title:e("com.textarea.name"),info:"",$required:!1,props:{type:"textarea"}}),props:(e,{t})=>er(t,Kde+".props",[{type:"switch",field:"disabled"},{type:"switch",field:"readonly"},{type:"inputNumber",field:"maxlength",props:{min:0}},{type:"inputNumber",field:"minlength",props:{min:0}},{type:"switch",field:"showWordLimit"},{type:"input",field:"placeholder"},{type:"inputNumber",field:"rows",props:{min:0}},{type:"switch",field:"autosize"}])},Yde="password",O$e={menu:"main",icon:"icon-password",label:"\u5BC6\u7801\u8F93\u5165\u6846",name:Yde,event:["blur","focus","change","input","clear"],validate:["string"],rule:({t:e})=>({type:"input",field:vr(),title:e("com.password.name"),info:"",$required:!1,props:{type:"password"}}),props:(e,{t})=>er(t,Yde+".props",[{type:"switch",field:"disabled"},{type:"switch",field:"readonly"},{type:"inputNumber",field:"maxlength",props:{min:0}},{type:"inputNumber",field:"minlength",props:{min:0}},{type:"input",field:"placeholder"},{type:"switch",field:"clearable"}])},gI="inputNumber",T$e={menu:"main",icon:"icon-number",label:"\u8BA1\u6570\u5668",name:gI,event:["blur","focus","change"],validate:["number","integer","float"],rule:({t:e})=>({type:gI,field:vr(),title:e("com.inputNumber.name"),info:"",$required:!1,props:{}}),props:(e,{t})=>er(t,gI+".props",[{type:"switch",field:"disabled"},{type:"inputNumber",field:"min"},{type:"inputNumber",field:"max"},{type:"inputNumber",field:"step",props:{min:0}},{type:"switch",field:"stepStrictly"},{type:"switch",field:"controls",value:!0},{type:"select",field:"controlsPosition",options:ya(t,[{label:"default",value:""},{label:"right",value:"right"}])},{type:"input",field:"placeholder"}])},yI="select",M$e={menu:"main",icon:"icon-select",label:"\u9009\u62E9\u5668",name:yI,event:["change","visibleChange","removeTag","clear","blur","focus"],validate:["string","number","array"],rule:({t:e})=>({type:yI,field:vr(),title:e("com.select.name"),info:"",effect:{fetch:""},$required:!1,props:{},options:fp(e("props.option"),{label:"label",value:"value"},1)}),watch:{multiple({rule:e}){e.key=vr()}},props:(e,{t})=>er(t,yI+".props",[kx(t,"options"),{type:"switch",field:"multiple"},{type:"switch",field:"disabled"},{type:"switch",field:"clearable"},{type:"switch",field:"collapseTags"},{type:"inputNumber",field:"multipleLimit",props:{min:0}},{type:"input",field:"placeholder"},{type:"switch",field:"filterable"},{type:"switch",field:"remote"},{type:"FnEditor",field:"remoteMethod",props:{body:!0,button:!0,fnx:!0,name:"remoteMethod",args:[Wde(t)]}},{type:"switch",field:"allowCreate"},{type:"input",field:"noMatchText"},{type:"input",field:"noDataText"},{type:"switch",field:"reserveKeyword"},{type:"switch",field:"defaultFirstOption"}])},bI="switch",N$e={menu:"main",icon:"icon-switch",label:"\u5F00\u5173",name:bI,event:["change"],rule:({t:e})=>({type:bI,field:vr(),title:e("com.switch.name"),info:"",$required:!1,props:{}}),props:(e,{t})=>er(t,bI+".props",[{type:"switch",field:"disabled"},{type:"inputNumber",field:"width",props:{min:0}},{type:"input",field:"activeText"},{type:"input",field:"inactiveText"},{type:"input",field:"activeValue"},{type:"input",field:"inactiveValue"},{type:"ColorInput",field:"activeColor"},{type:"ColorInput",field:"inactiveColor"}])},AI="slider",F$e={menu:"main",icon:"icon-slider",label:"\u6ED1\u5757",name:AI,event:["change","input"],validate:["number","array"],rule:({t:e})=>({type:AI,field:vr(),title:e("com.slider.name"),info:"",$required:!1,props:{}}),props:(e,{t})=>er(t,AI+".props",[{type:"switch",field:"disabled"},{type:"switch",field:"range"},{type:"inputNumber",field:"min",props:{min:0}},{type:"inputNumber",field:"max",props:{min:0}},{type:"inputNumber",field:"step",props:{min:0}},{type:"switch",field:"showInput"},{type:"switch",field:"showInputControls",value:!0},{type:"switch",field:"showStops"},{type:"switch",field:"vertical"},{type:"input",field:"height"}])},wI="timePicker",R$e={menu:"main",icon:"icon-time",label:"\u65F6\u95F4",name:wI,event:["change","blur","focus","visibleChange"],rule:({t:e})=>({type:wI,field:vr(),title:e("com.timePicker.name"),info:"",$required:!1,props:{}}),watch:{isRange({rule:e}){e.key=vr()}},props:(e,{t})=>er(t,wI+".props",[{type:"switch",field:"readonly"},{type:"switch",field:"disabled"},{type:"switch",field:"isRange"},{type:"switch",field:"clearable",value:!0},{type:"Struct",field:"pickerOptions",props:{defaultValue:{}}},{type:"switch",field:"editable",value:!0},{type:"input",field:"placeholder"},{type:"input",field:"startPlaceholder"},{type:"input",field:"endPlaceholder"},{type:"switch",field:"arrowControl"},{type:"select",field:"align",options:ya(t,[{label:"left",value:"left"},{label:"center",value:"center"},{label:"right",value:"right"}])}])},I$e={menu:"main",icon:"icon-time",label:"\u65F6\u95F4\u533A\u95F4",name:"timeRange",event:["change","blur","focus","visibleChange"],rule:({t:e})=>({type:"timePicker",field:vr(),title:e("com.timeRange.name"),info:"",$required:!1,props:{isRange:!0}}),props:(e,{t})=>er(t,"timePicker.props",[{type:"switch",field:"readonly"},{type:"switch",field:"disabled"},{type:"switch",field:"clearable",value:!0},{type:"Struct",field:"pickerOptions",props:{defaultValue:{}}},{type:"switch",field:"editable",value:!0},{type:"input",field:"startPlaceholder"},{type:"input",field:"endPlaceholder"},{type:"switch",field:"arrowControl"},{type:"select",field:"align",options:ya(t,[{label:"left",value:"left"},{label:"center",value:"center"},{label:"right",value:"right"}])}])},xI="datePicker",B$e={menu:"main",icon:"icon-date",label:"\u65E5\u671F",name:xI,event:["change","blur","focus","calendarChange","panelChange","visibleChange"],rule:({t:e})=>({type:xI,field:vr(),title:e("com.datePicker.name"),info:"",$required:!1,props:{}}),props:(e,{t})=>er(t,xI+".props",[{type:"switch",field:"readonly"},{type:"switch",field:"disabled"},{type:"select",field:"type",options:ya(t,[{label:"year",value:"year"},{label:"month",value:"month"},{label:"date",value:"date"},{label:"dates",value:"dates"},{label:"week",value:"week"},{label:"datetime",value:"datetime"},{label:"datetimerange",value:"datetimerange"},{label:"daterange",value:"daterange"},{label:"monthrange",value:"monthrange"}])},{type:"switch",field:"clearable",value:!0},{type:"Struct",field:"pickerOptions",props:{defaultValue:{}}},{type:"switch",field:"editable",value:!0},{type:"input",field:"placeholder"},{type:"input",field:"startPlaceholder"},{type:"input",field:"endPlaceholder"},{type:"input",field:"format"},{type:"select",field:"align",options:ya(t,[{label:"left",value:"left"},{label:"center",value:"center"},{label:"right",value:"right"}])},{type:"input",field:"rangeSeparator"},{type:"switch",field:"unlinkPanels"}])},P$e={menu:"main",icon:"icon-date",label:"\u65E5\u671F\u533A\u95F4",name:"dateRange",event:["change","blur","focus","calendarChange","panelChange","visibleChange"],rule:({t:e})=>({type:"datePicker",field:vr(),title:e("com.dateRange.name"),info:"",$required:!1,props:{type:"datetimerange"}}),props:(e,{t})=>er(t,"datePicker.props",[{type:"switch",field:"readonly"},{type:"switch",field:"disabled"},{type:"select",field:"type",options:ya(t,[{label:"datetimerange",value:"datetimerange"},{label:"daterange",value:"daterange"},{label:"monthrange",value:"monthrange"}])},{type:"switch",field:"clearable",value:!0},{type:"Struct",field:"pickerOptions",props:{defaultValue:{}}},{type:"switch",field:"editable",value:!0},{type:"input",field:"startPlaceholder"},{type:"input",field:"endPlaceholder"},{type:"input",field:"format"},{type:"select",field:"align",options:ya(t,[{label:"left",value:"left"},{label:"center",value:"center"},{label:"right",value:"right"}])},{type:"input",field:"rangeSeparator"},{type:"switch",field:"unlinkPanels"}])},_I="rate",L$e={menu:"main",icon:"icon-rate",label:"\u8BC4\u5206",name:_I,event:["change"],validate:["number"],rule:({t:e})=>({type:_I,field:vr(),title:e("com.rate.name"),info:"",$required:!1,props:{}}),props:(e,{t})=>er(t,_I+".props",[{type:"inputNumber",field:"max",props:{min:0}},{type:"switch",field:"disabled"},{type:"switch",field:"allowHalf"},{type:"ColorInput",field:"voidColor"},{type:"ColorInput",field:"disabledVoidColor"},{type:"input",field:"voidIconClass"},{type:"input",field:"disabledVoidIconClass"},{type:"switch",field:"showScore"},{type:"ColorInput",field:"textColor"},{type:"input",field:"scoreTemplate"}])},EI="colorPicker",j$e={menu:"main",icon:"icon-color",label:"\u989C\u8272\u9009\u62E9\u5668",name:EI,event:["change","activeChange","focus","blur"],validate:["string"],rule:({t:e})=>({type:EI,field:vr(),title:e("com.colorPicker.name"),info:"",$required:!1,props:{}}),props:(e,{t})=>er(t,EI+".props",[{type:"switch",field:"disabled"},{type:"switch",field:"showAlpha"},{type:"select",field:"colorFormat",options:[{label:"hsl",value:"hsl"},{label:"hsv",value:"hsv"},{label:"hex",value:"hex"},{label:"rgb",value:"rgb"}]},{type:"tableOptions",field:"predefine",props:{column:[{label:t("props.value"),key:"value"}],valueType:"string"}}])},CI="fcRow",V$e={menu:"layout",icon:"icon-row",label:"\u6805\u683C\u5E03\u5C40",name:CI,mask:!1,children:"col",childrenLen:2,rule:()=>({type:CI,props:{},children:[]}),props:(e,{t})=>er(t,CI+".props",[{type:"inputNumber",field:"gutter",props:{min:0}},{type:"switch",field:"type",props:{activeValue:"flex",inactiveValue:"default"}},{type:"select",field:"justify",options:[{label:"start",value:"start"},{label:"end",value:"end"},{label:"center",value:"center"},{label:"space-around",value:"space-around"},{label:"space-between",value:"space-between"}]},{type:"select",field:"align",options:[{label:"top",value:"top"},{label:"middle",value:"middle"},{label:"bottom",value:"bottom"}]}])},SI="col",z$e={name:SI,label:"\u683C\u5B50",drag:!0,dragBtn:!1,inside:!0,mask:!1,rule:()=>({type:SI,props:{span:12},children:[]}),props:(e,{t})=>er(t,SI+".props",[{type:"slider",field:"span",value:12,props:{min:0,max:24}},{type:"slider",field:"offset",props:{min:0,max:24}},{type:"slider",field:"push",props:{min:0,max:24}},{type:"slider",field:"pull",props:{min:0,max:24}}])},kI="elTabPane",H$e={label:"\u9009\u9879\u5361",name:kI,inside:!0,drag:!0,dragBtn:!1,mask:!1,rule:({t:e})=>({type:kI,props:{label:e("com.elTabPane.name")},children:[]}),props:(e,{t})=>er(t,kI+".props",[{type:"input",field:"label"},{type:"switch",field:"disabled"},{type:"input",field:"name"},{type:"switch",field:"lazy"}])},DI="elDivider",$$e={menu:"aide",icon:"icon-divider",label:"\u5206\u5272\u7EBF",name:DI,rule:({t:e})=>({type:DI,props:{},children:[e("com.elDivider.name")]}),props:(e,{t})=>er(t,DI+".props",[{type:"input",field:"formCreateChild"},{type:"select",field:"contentPosition",options:ya(t,[{label:"left",value:"left"},{label:"right",value:"right"},{label:"center",value:"center"}])}])},Ox="cascader",U$e={menu:"main",icon:"icon-cascader",label:"\u7EA7\u8054\u9009\u62E9\u5668",name:Ox,event:["change","expandChange","blur","focus","visibleChange","removeTag"],validate:["string","number","array"],rule:({t:e})=>({type:Ox,field:vr(),title:e("com.cascader.name"),info:"",effect:{fetch:""},$required:!1,props:{options:fp(e("props.option"),{label:"label",value:"value"},3)}}),props:(e,{t})=>er(t,Ox+".props",[Dx({t,to:"props.options"}),{type:"switch",field:"disabled"},{type:"switch",field:"clearable"},{type:"input",field:"placeholder"},{type:"Object",field:"props",props:{rule:er(t,Ox+".propsOpt",[{type:"switch",field:"multiple"},{type:"select",field:"expandTrigger",options:ya(t,[{label:"click",value:"click"},{label:"hover",value:"hover"}])},{type:"switch",field:"checkStrictly"},{type:"switch",field:"emitPath",value:!0},{type:"input",field:"value",value:"value"},{type:"input",field:"label",value:"label"},{type:"input",field:"children",value:"children"},{type:"input",field:"disabled",value:"disabled"},{type:"input",field:"leaf"}])}},{type:"switch",field:"showAllLevels",value:!0},{type:"switch",field:"collapseTags"},{type:"switch",field:"collapseTagsTooltip"},{type:"input",field:"separator"},{type:"switch",field:"filterable"},{type:"select",field:"tagType",options:[{label:"success",value:"success"},{label:"info",value:"info"},{label:"warning",value:"warning"},{label:"danger",value:"danger"}]}])},OI="upload",W$e={menu:"main",icon:"icon-upload",label:"\u4E0A\u4F20",name:OI,event:["change","remove"],validate:["array"],rule:({t:e})=>({type:OI,field:vr(),title:e("com.upload.name"),info:"",$required:!1,props:{action:"/",onSuccess(t,n){n.url=t.data.url}}}),props:(e,{t})=>er(t,OI+".props",[{type:"switch",field:"disabled"},{type:"select",field:"listType",value:"text",options:ya(t,[{label:"text",value:"text"},{label:"picture",value:"picture"},{label:"picture-card",value:"picture-card"}])},{type:"switch",field:"multiple"},{type:"input",field:"action"},{type:"FnEditor",field:"onSuccess",info:t("com.upload.info"),props:{args:["res","file"],name:"onSuccess",button:!0}},{type:"TableOptions",field:"headers",props:{column:[{label:t("props.key"),key:"label"},{label:t("props.value"),key:"value"}],valueType:"object"}},{type:"TableOptions",field:"data",props:{column:[{label:t("props.key"),key:"label"},{label:t("props.value"),key:"value"}],valueType:"object"}},{type:"input",field:"name"},{type:"switch",field:"withCredentials"},{type:"input",field:"accept"},{type:"switch",field:"autoUpload",value:!0},{type:"inputNumber",field:"limit",props:{min:0}}])},TI="elTransfer",G$e={menu:"main",icon:"icon-transfer",label:"\u7A7F\u68AD\u6846",name:TI,event:["change","leftCheckChange","rightCheckChange"],validate:["string","number","array"],rule:({t:e})=>({type:TI,field:vr(),title:e("com.elTransfer.name"),info:"",$required:!1,props:{data:fp(e("props.option"),{label:"label",value:"key"},1)}}),props:(e,{t})=>er(t,TI+".props",[Dx({t,to:"props.data",label:"label",value:"key"}),{type:"switch",field:"filterable"},{type:"input",field:"filterPlaceholder"},{type:"select",field:"targetOrder",info:t("com.elTransfer.targetOrderInfo"),options:[{label:"original",value:"original"},{label:"push",value:"push"},{label:"unshift",value:"unshift"}]},{type:"TableOptions",field:"titles",props:{column:[{label:t("props.value"),key:"value"}],valueType:"string",max:2}},{type:"TableOptions",field:"buttonTexts",props:{column:[{label:t("props.value"),key:"value"}],valueType:"string",max:2}}])},MI="tree",q$e={menu:"main",icon:"icon-tree",label:"\u6811\u5F62\u63A7\u4EF6",name:MI,event:["nodeClick","nodeContextmenu","checkChange","check","currentChange","nodeExpand","nodeCollapse","nodeDragStart","nodeDragEnter","nodeDragLeave","nodeDragOver","nodeDragEnd","nodeDrop"],validate:["string","number","array"],rule:({t:e})=>({type:MI,field:vr(),title:e("com.tree.name"),info:"",effect:{fetch:""},$required:!1,props:{props:{label:"label"},showCheckbox:!0,nodeKey:"id",data:fp(e("props.option"),{label:"label",value:"id"},3)}}),props:(e,{t})=>er(t,MI+".props",[Dx({t,to:"props.data",label:"label",value:"id"}),{type:"input",field:"emptyText"},{type:"TableOptions",field:"props",props:{column:[{label:t("props.key"),key:"label"},{label:t("props.value"),key:"value"}],valueType:"object"}},{type:"switch",field:"renderAfterExpand",value:!0},{type:"switch",field:"defaultExpandAll"},{type:"switch",field:"expandOnClickNode",value:!0},{type:"switch",field:"checkOnClickNode"},{type:"switch",field:"autoExpandParent",value:!0},{type:"switch",field:"checkStrictly"},{type:"switch",field:"accordion"},{type:"inputNumber",field:"indent"},{type:"input",field:"nodeKey"}])},NI="elAlert",K$e={menu:"aide",icon:"icon-alert",label:"\u63D0\u793A",name:NI,event:["close"],rule:({t:e})=>({type:NI,props:{title:e("com.elAlert.name"),description:e("com.elAlert.description"),type:"success",effect:"dark"},children:[]}),props:(e,{t})=>er(t,NI+".props",[{type:"input",field:"title"},{type:"select",field:"type",options:[{label:"success",value:"success"},{label:"warning",value:"warning"},{label:"info",value:"info"},{label:"error",value:"error"}]},{type:"input",field:"description"},{type:"switch",field:"closable",value:!0},{type:"switch",field:"center",value:!0},{type:"input",field:"closeText"},{type:"switch",field:"showIcon"},{type:"select",field:"effect",options:[{label:"light",value:"light"},{label:"dark",value:"dark"}]}])},Xde="text",Y$e={menu:"aide",icon:"icon-span",label:"\u6587\u5B57",name:Xde,rule:({t:e})=>({type:"div",title:"",native:!0,children:[e("com.text.name")]}),watch:{formCreateNative({value:e,rule:t}){e&&(t.title="")}},props:(e,{t})=>er(t,Xde+".props",[{type:"switch",field:"formCreateNative",props:{activeValue:!1,inactiveValue:!0},control:[{value:!1,rule:["formCreateTitle"]}]},{type:"input",field:"formCreateTitle"},{type:"input",field:"formCreateChild",props:{type:"textarea"}}])},Qde="space",X$e={menu:"layout",icon:"icon-space",label:"\u95F4\u8DDD",name:Qde,rule:()=>({type:"div",wrap:{show:!1},native:!0,style:{width:"100%",height:"20px"},children:[]}),props:(e,{t})=>[{type:"object",field:"formCreateStyle",native:!0,props:{rule:er(t,Qde+".props",[{type:"input",field:"height",title:"height"}])}}]},FI="elTabs",Q$e={menu:"layout",icon:"icon-tab",label:"\u6807\u7B7E\u9875",name:FI,mask:!1,event:["tabClick","tabChange","tabRemove","tabAdd","edit"],children:"elTabPane",rule:()=>({type:FI,style:{width:"100%"},children:[]}),props:(e,{t})=>er(t,FI+".props",[{type:"select",field:"type",options:[{label:"card",value:"card"},{label:"border-card",value:"border-card"}]},{type:"switch",field:"closable"},{type:"select",field:"tabPosition",options:ya(t,[{label:"top",value:"top"},{label:"right",value:"right"},{label:"left",value:"left"}])},{type:"switch",field:"stretch"}])},RI="elButton",J$e={menu:"aide",icon:"icon-button",label:"\u6309\u94AE",name:RI,mask:!0,event:["click"],rule:({t:e})=>({type:RI,props:{},children:[e("com.elButton.name")]}),props:(e,{t})=>er(t,RI+".props",[{type:"input",field:"formCreateChild"},{type:"select",field:"size",options:ya(t,[{label:"large",value:"large"},{label:"default",value:"default"},{label:"small",value:"small"}])},{type:"select",field:"type",options:[{label:"primary",value:"primary"},{label:"success",value:"success"},{label:"warning",value:"warning"},{label:"danger",value:"danger"},{label:"info",value:"info"}]},{type:"switch",field:"plain"},{type:"switch",field:"round"},{type:"switch",field:"circle"},{type:"switch",field:"loading"},{type:"switch",field:"disabled"}])},II="fcEditor",Z$e={menu:"main",icon:"icon-editor",label:"\u5BCC\u6587\u672C\u6846",name:II,event:["change"],validate:["string"],rule:({t:e})=>({type:II,field:vr(),title:e("com.fcEditor.name"),info:"",$required:!1,props:{}}),props:(e,{t})=>er(t,II+".props",[{type:"switch",field:"disabled"}])},Jde="group",eUe={menu:"subform",icon:"icon-subform",label:"\u5B50\u8868\u5355",name:Jde,inside:!1,drag:!0,dragBtn:!0,mask:!1,event:["change"],subForm:"array",loadRule(e){e.children=e.props.rule||[],e.type="FcRow",delete e.props.rule},parseRule(e){e.props.rule=e.children,e.type="group",delete e.children,delete e.props.mode},rule:({t:e})=>({type:"fcRow",field:vr(),title:e("com.group.name"),info:"",$required:!1,props:{},children:[]}),props:(e,{t})=>er(t,Jde+".props",[{type:"switch",field:"disabled"},{type:"switch",field:"syncDisabled",value:!0},{type:"switch",field:"button",value:!0},{type:"switch",field:"sortBtn",value:!0},{type:"inputNumber",field:"expand"},{type:"inputNumber",field:"min"},{type:"inputNumber",field:"max"}])},Zde="subForm",tUe={menu:"subform",icon:"icon-group",label:"\u5206\u7EC4",name:Zde,inside:!1,drag:!0,dragBtn:!0,mask:!1,subForm:"object",event:["change"],loadRule(e){e.children=e.props.rule||[],e.type="FcRow",delete e.props.rule},parseRule(e){e.props.rule=e.children,e.type="subForm",delete e.children},rule:({t:e})=>({type:"fcRow",field:vr(),title:e("com.subForm.name"),info:"",$required:!1,props:{},children:[]}),props:(e,{t})=>er(t,Zde+".props",[{type:"switch",field:"disabled"},{type:"switch",field:"syncDisabled",value:!0}])},BI="elCard",nUe={menu:"layout",icon:"icon-card",label:"\u5361\u7247",name:BI,drag:!0,inside:!1,mask:!1,rule:({t:e})=>({type:BI,props:{header:e("com.elCard.props.header")},style:{width:"100%"},children:[]}),props:(e,{t})=>er(t,BI+".props",[{type:"input",field:"header"},{type:"select",field:"shadow",value:"always",options:ya(t,[{label:"always",value:"always"},{label:"never",value:"never"},{label:"hover",value:"hover"}])}])},PI="elCollapse",rUe={menu:"layout",icon:"icon-collapse",label:"\u6298\u53E0\u9762\u677F",name:PI,mask:!1,children:"elCollapseItem",event:["change"],rule:()=>({type:PI,props:{},style:{width:"100%"},children:[]}),props:(e,{t})=>er(t,PI+".props",[{type:"switch",field:"accordion"}])},LI="elCollapseItem",oUe={icon:"icon-cell",label:"\u9762\u677F",name:LI,drag:!0,dragBtn:!1,inside:!0,mask:!1,rule:({t:e})=>({type:LI,props:{title:e("com.elCollapseItem.name")},style:{},children:[]}),props:(e,{t})=>er(t,LI+".props",[{type:"input",field:"title"},{type:"input",field:"name"},{type:"switch",field:"disabled"}])},jI="elTreeSelect",iUe={menu:"main",icon:"icon-tree-select",label:"\u6811\u5F62\u9009\u62E9",name:jI,event:["change","visibleChange","removeTag","clear","blur","focus"],validate:["string","number","array"],rule:({t:e})=>({type:jI,field:vr(),title:e("com.elTreeSelect.name"),info:"",effect:{fetch:""},$required:!1,props:{nodeKey:"value",showCheckbox:!0,data:fp(e("props.option"),{label:"label",value:"value"},3)}}),watch:{multiple({rule:e}){e.key=vr()}},props:(e,{t})=>er(t,jI+".props",[Dx({t,to:"props.data",label:"label",value:"value"}),{type:"switch",field:"multiple"},{type:"switch",field:"disabled"},{type:"switch",field:"clearable"},{type:"switch",field:"collapseTags"},{type:"inputNumber",field:"multipleLimit",props:{min:0}},{type:"input",field:"placeholder"},{type:"TableOptions",field:"props",props:{column:[{label:t("props.key"),key:"label"},{label:t("props.value"),key:"value"}],valueType:"object"}},{type:"switch",field:"renderAfterExpand",value:!0},{type:"switch",field:"defaultExpandAll"},{type:"switch",field:"expandOnClickNode",value:!0},{type:"switch",field:"checkOnClickNode"},{type:"input",field:"nodeKey"}])},VI="elTag",aUe={menu:"aide",icon:"icon-tag",label:"\u6807\u7B7E",name:VI,mask:!0,event:["click","close"],rule:({t:e})=>({type:VI,title:"",native:!0,children:[e("com.elTag.name")]}),watch:{formCreateNative({value:e,rule:t}){e&&(t.title="")}},props:(e,{t})=>er(t,VI+".props",[{type:"switch",field:"formCreateNative",props:{activeValue:!1,inactiveValue:!0},control:[{value:!1,rule:["formCreateTitle"]}]},{type:"input",field:"formCreateTitle"},{type:"input",field:"formCreateChild"},{type:"select",field:"type",options:[{label:"primary",value:"primary"},{label:"success",value:"success"},{label:"warning",value:"warning"},{label:"danger",value:"danger"},{label:"info",value:"info"}]},{type:"select",field:"size",options:ya(t,[{label:"large",value:"large"},{label:"default",value:"default"},{label:"small",value:"small"}])},{type:"select",field:"effect",options:[{label:"dark",value:"dark"},{label:"light",value:"light"},{label:"plain",value:"plain"}]},{type:"switch",field:"closable"},{type:"switch",field:"disableTransitions"},{type:"switch",field:"hit"},{type:"switch",field:"round"},{type:"ColorInput",field:"color"}])},zI="html",lUe={menu:"aide",icon:"icon-html",label:"HTML",name:zI,rule:()=>({type:zI,title:"",native:!0,attrs:{innerHTML:""},children:[`<div style="color:blue;">
| html html html html html html html html html
| </div>`]}),watch:{formCreateNative({value:e,rule:t}){e&&(t.title="")}},props:(e,{t})=>er(t,zI+".props",[{type:"switch",field:"formCreateNative",props:{activeValue:!1,inactiveValue:!0},control:[{value:!1,rule:["formCreateTitle"]}]},{type:"input",field:"formCreateTitle"},{type:"HtmlEditor",field:"formCreateChild"}])},HI="fcTable",sUe={menu:"layout",icon:"icon-table",label:"\u8868\u683C\u5E03\u5C40",name:HI,inside:!1,mask:!1,rule:()=>({type:HI,props:{rule:{row:3,col:4,style:{},class:{},layout:[]}},children:[]}),props:(e,{t})=>er(t,HI+".props",[{type:"switch",field:"border",value:!0},{type:"ColorInput",field:"borderColor"},{type:"input",field:"borderWidth"}])},$I="tableForm",uUe={menu:"subform",icon:"icon-table-form",label:"\u8868\u683C\u8868\u5355",name:$I,mask:!1,subForm:"array",event:["change","add","delete"],children:"tableFormColumn",loadRule(e){e.props||(e.props={});const t=e.props.columns||[];e.children=t.map(n=>({type:"tableFormColumn",_fc_drag_tag:"tableFormColumn",props:{label:n.label,width:n.style.width||"",color:n.style.color||""},children:n.rule||[]})),delete e.props.columns},parseRule(e){const t=e.children||[];e.props.columns=t.map(n=>({label:n.props.label,style:{width:n.props.width,color:n.props.color},rule:n.children||[]})),e.children=[]},rule:({t:e})=>({type:$I,field:vr(),title:e("com.tableForm.name"),info:"",props:{},children:[]}),props:(e,{t})=>er(t,$I+".props",[{type:"switch",field:"disabled"},{type:"inputNumber",field:"max",props:{min:0}}])},UI="tableFormColumn",cUe={icon:"icon-cell",name:UI,drag:!0,dragBtn:!1,mask:!1,rule:({t:e})=>({type:UI,props:{label:e("com.tableFormColumn.label"),width:"auto"},children:[]}),props:(e,{t})=>er(t,UI+".props",[{type:"input",field:"label"},{type:"input",field:"width"},{type:"ColorInput",field:"color"}])},dUe=[k$e,D$e,O$e,T$e,C$e,S$e,M$e,N$e,L$e,R$e,I$e,F$e,B$e,P$e,j$e,U$e,W$e,G$e,q$e,iUe,Z$e,eUe,tUe,uUe,cUe,K$e,J$e,Y$e,lUe,$$e,aUe,V$e,sUe,Q$e,X$e,nUe,rUe,z$e,H$e,oUe];function efe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Pc(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?efe(Object(n),!0).forEach(function(r){fUe(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):efe(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function WI(e){return WI=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},WI(e)}function fUe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Gd(){return Gd=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Gd.apply(this,arguments)}function pUe(e,t){if(e==null)return{};var n,r,o=function(a,l){if(a==null)return{};var s,u,c={},d=Object.keys(a);for(u=0;u<d.length;u++)s=d[u],!(l.indexOf(s)>=0)&&(c[s]=a[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],!(t.indexOf(n)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,n)||(o[n]=e[n]))}return o}function qd(e){if(typeof window<"u"&&window.navigator)return!!navigator.userAgent.match(e)}var Kd=qd(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),b4=qd(/Edge/i),tfe=qd(/firefox/i),A4=qd(/safari/i)&&!qd(/chrome/i)&&!qd(/android/i),nfe=qd(/iP(ad|od|hone)/i),hUe=qd(/chrome/i)&&qd(/android/i),rfe={capture:!1,passive:!1};function $r(e,t,n){e.addEventListener(t,n,!Kd&&rfe)}function Ir(e,t,n){e.removeEventListener(t,n,!Kd&&rfe)}function Tx(e,t){if(t){if(t[0]===">"&&(t=t.substring(1)),e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch{return!1}return!1}}function vUe(e){return e.host&&e!==document&&e.host.nodeType?e.host:e.parentNode}function Lc(e,t,n,r){if(e){n=n||document;do{if(t!=null&&(t[0]===">"?e.parentNode===n&&Tx(e,t):Tx(e,t))||r&&e===n)return e;if(e===n)break}while(e=vUe(e))}return null}var w4,ofe=/\s+/g;function ms(e,t,n){if(e&&t)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(ofe," ").replace(" "+t+" "," ");e.className=(r+(n?" "+t:"")).replace(ofe," ")}}function Rn(e,t,n){var r=e&&e.style;if(r){if(n===void 0)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(e,""):e.currentStyle&&(n=e.currentStyle),t===void 0?n:n[t];!(t in r)&&t.indexOf("webkit")===-1&&(t="-webkit-"+t),r[t]=n+(typeof n=="string"?"":"px")}}function Cg(e,t){var n="";if(typeof e=="string")n=e;else do{var r=Rn(e,"transform");r&&r!=="none"&&(n=r+" "+n)}while(!t&&(e=e.parentNode));var o=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return o&&new o(n)}function ife(e,t,n){if(e){var r=e.getElementsByTagName(t),o=0,i=r.length;if(n)for(;o<i;o++)n(r[o],o);return r}return[]}function jc(){return document.scrollingElement||document.documentElement}function Ni(e,t,n,r,o){if(e.getBoundingClientRect||e===window){var i,a,l,s,u,c,d;if(e!==window&&e.parentNode&&e!==jc()?(a=(i=e.getBoundingClientRect()).top,l=i.left,s=i.bottom,u=i.right,c=i.height,d=i.width):(a=0,l=0,s=window.innerHeight,u=window.innerWidth,c=window.innerHeight,d=window.innerWidth),(t||n)&&e!==window&&(o=o||e.parentNode,!Kd))do if(o&&o.getBoundingClientRect&&(Rn(o,"transform")!=="none"||n&&Rn(o,"position")!=="static")){var f=o.getBoundingClientRect();a-=f.top+parseInt(Rn(o,"border-top-width")),l-=f.left+parseInt(Rn(o,"border-left-width")),s=a+i.height,u=l+i.width;break}while(o=o.parentNode);if(r&&e!==window){var p=Cg(o||e),m=p&&p.a,v=p&&p.d;p&&(s=(a/=v)+(c/=v),u=(l/=m)+(d/=m))}return{top:a,left:l,bottom:s,right:u,width:d,height:c}}}function afe(e,t,n){for(var r=hp(e,!0),o=Ni(e)[t];r;){if(!(o>=Ni(r)[n]))return r;if(r===jc())break;r=hp(r,!1)}return!1}function Sg(e,t,n,r){for(var o=0,i=0,a=e.children;i<a.length;){if(a[i].style.display!=="none"&&a[i]!==In.ghost&&(r||a[i]!==In.dragged)&&Lc(a[i],n.draggable,e,!1)){if(o===t)return a[i];o++}i++}return null}function GI(e,t){for(var n=e.lastElementChild;n&&(n===In.ghost||Rn(n,"display")==="none"||t&&!Tx(n,t));)n=n.previousElementSibling;return n||null}function tu(e,t){var n=0;if(!e||!e.parentNode)return-1;for(;e=e.previousElementSibling;)e.nodeName.toUpperCase()!=="TEMPLATE"&&e!==In.clone&&(!t||Tx(e,t))&&n++;return n}function lfe(e){var t=0,n=0,r=jc();if(e)do{var o=Cg(e),i=o.a,a=o.d;t+=e.scrollLeft*i,n+=e.scrollTop*a}while(e!==r&&(e=e.parentNode));return[t,n]}function hp(e,t){if(!e||!e.getBoundingClientRect)return jc();var n=e,r=!1;do if(n.clientWidth<n.scrollWidth||n.clientHeight<n.scrollHeight){var o=Rn(n);if(n.clientWidth<n.scrollWidth&&(o.overflowX=="auto"||o.overflowX=="scroll")||n.clientHeight<n.scrollHeight&&(o.overflowY=="auto"||o.overflowY=="scroll")){if(!n.getBoundingClientRect||n===document.body)return jc();if(r||t)return n;r=!0}}while(n=n.parentNode);return jc()}function qI(e,t){return Math.round(e.top)===Math.round(t.top)&&Math.round(e.left)===Math.round(t.left)&&Math.round(e.height)===Math.round(t.height)&&Math.round(e.width)===Math.round(t.width)}function sfe(e,t){return function(){if(!w4){var n=arguments;n.length===1?e.call(this,n[0]):e.apply(this,n),w4=setTimeout(function(){w4=void 0},t)}}}function ufe(e,t,n){e.scrollLeft+=t,e.scrollTop+=n}function cfe(e){var t=window.Polymer,n=window.jQuery||window.Zepto;return t&&t.dom?t.dom(e).cloneNode(!0):n?n(e).clone(!0)[0]:e.cloneNode(!0)}var gs="Sortable"+new Date().getTime();function mUe(){var e,t=[];return{captureAnimationState:function(){t=[],this.options.animation&&[].slice.call(this.el.children).forEach(function(n){if(Rn(n,"display")!=="none"&&n!==In.ghost){t.push({target:n,rect:Ni(n)});var r=Pc({},t[t.length-1].rect);if(n.thisAnimationDuration){var o=Cg(n,!0);o&&(r.top-=o.f,r.left-=o.e)}n.fromRect=r}})},addAnimationState:function(n){t.push(n)},removeAnimationState:function(n){t.splice(function(r,o){for(var i in r)if(r.hasOwnProperty(i)){for(var a in o)if(o.hasOwnProperty(a)&&o[a]===r[i][a])return Number(i)}return-1}(t,{target:n}),1)},animateAll:function(n){var r=this;if(!this.options.animation)return clearTimeout(e),void(typeof n=="function"&&n());var o=!1,i=0;t.forEach(function(a){var l=0,s=a.target,u=s.fromRect,c=Ni(s),d=s.prevFromRect,f=s.prevToRect,p=a.rect,m=Cg(s,!0);m&&(c.top-=m.f,c.left-=m.e),s.toRect=c,s.thisAnimationDuration&&qI(d,c)&&!qI(u,c)&&(p.top-c.top)/(p.left-c.left)==(u.top-c.top)/(u.left-c.left)&&(l=function(v,g,b,y){return Math.sqrt(Math.pow(g.top-v.top,2)+Math.pow(g.left-v.left,2))/Math.sqrt(Math.pow(g.top-b.top,2)+Math.pow(g.left-b.left,2))*y.animation}(p,d,f,r.options)),qI(c,u)||(s.prevFromRect=u,s.prevToRect=c,l||(l=r.options.animation),r.animate(s,p,c,l)),l&&(o=!0,i=Math.max(i,l),clearTimeout(s.animationResetTimer),s.animationResetTimer=setTimeout(function(){s.animationTime=0,s.prevFromRect=null,s.fromRect=null,s.prevToRect=null,s.thisAnimationDuration=null},l),s.thisAnimationDuration=l)}),clearTimeout(e),o?e=setTimeout(function(){typeof n=="function"&&n()},i):typeof n=="function"&&n(),t=[]},animate:function(n,r,o,i){if(i){Rn(n,"transition",""),Rn(n,"transform","");var a=Cg(this.el),l=a&&a.a,s=a&&a.d,u=(r.left-o.left)/(l||1),c=(r.top-o.top)/(s||1);n.animatingX=!!u,n.animatingY=!!c,Rn(n,"transform","translate3d("+u+"px,"+c+"px,0)"),this.forRepaintDummy=function(d){return d.offsetWidth}(n),Rn(n,"transition","transform "+i+"ms"+(this.options.easing?" "+this.options.easing:"")),Rn(n,"transform","translate3d(0,0,0)"),typeof n.animated=="number"&&clearTimeout(n.animated),n.animated=setTimeout(function(){Rn(n,"transition",""),Rn(n,"transform",""),n.animated=!1,n.animatingX=!1,n.animatingY=!1},i)}}}}var kg=[],KI={initializeByDefault:!0},x4={mount:function(e){for(var t in KI)KI.hasOwnProperty(t)&&!(t in e)&&(e[t]=KI[t]);kg.forEach(function(n){if(n.pluginName===e.pluginName)throw"Sortable: Cannot mount plugin ".concat(e.pluginName," more than once")}),kg.push(e)},pluginEvent:function(e,t,n){var r=this;this.eventCanceled=!1,n.cancel=function(){r.eventCanceled=!0};var o=e+"Global";kg.forEach(function(i){!t[i.pluginName]||(t[i.pluginName][o]&&t[i.pluginName][o](Pc({sortable:t},n)),t.options[i.pluginName]&&t[i.pluginName][e]&&t[i.pluginName][e](Pc({sortable:t},n)))})},initializePlugins:function(e,t,n,r){for(var o in kg.forEach(function(a){var l=a.pluginName;if(e.options[l]||a.initializeByDefault){var s=new a(e,t,e.options);s.sortable=e,s.options=e.options,e[l]=s,Gd(n,s.defaults)}}),e.options)if(e.options.hasOwnProperty(o)){var i=this.modifyOption(e,o,e.options[o]);typeof i<"u"&&(e.options[o]=i)}},getEventProperties:function(e,t){var n={};return kg.forEach(function(r){typeof r.eventProperties=="function"&&Gd(n,r.eventProperties.call(t[r.pluginName],e))}),n},modifyOption:function(e,t,n){var r;return kg.forEach(function(o){!e[o.pluginName]||o.optionListeners&&typeof o.optionListeners[t]=="function"&&(r=o.optionListeners[t].call(e[o.pluginName],n))}),r}},gUe=["evt"],Rl=function(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=n.evt,o=pUe(n,gUe);x4.pluginEvent.bind(In)(e,t,Pc({dragEl:Wt,parentEl:Lo,ghostEl:ir,rootEl:Co,nextEl:v1,lastDownEl:Mx,cloneEl:Zo,cloneHidden:vp,dragStarted:E4,putSortable:ba,activeSortable:In.active,originalEvent:r,oldIndex:Dg,oldDraggableIndex:_4,newIndex:ys,newDraggableIndex:mp,hideGhostForTarget:gfe,unhideGhostForTarget:yfe,cloneNowHidden:function(){vp=!0},cloneNowShown:function(){vp=!1},dispatchSortableEvent:function(i){il({sortable:t,name:i,originalEvent:r})}},o))};function il(e){(function(t){var n=t.sortable,r=t.rootEl,o=t.name,i=t.targetEl,a=t.cloneEl,l=t.toEl,s=t.fromEl,u=t.oldIndex,c=t.newIndex,d=t.oldDraggableIndex,f=t.newDraggableIndex,p=t.originalEvent,m=t.putSortable,v=t.extraEventProperties;if(n=n||r&&r[gs]){var g,b=n.options,y="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||Kd||b4?(g=document.createEvent("Event")).initEvent(o,!0,!0):g=new CustomEvent(o,{bubbles:!0,cancelable:!0}),g.to=l||r,g.from=s||r,g.item=i||r,g.clone=a,g.oldIndex=u,g.newIndex=c,g.oldDraggableIndex=d,g.newDraggableIndex=f,g.originalEvent=p,g.pullMode=m?m.lastPutMode:void 0;var w=Pc(Pc({},v),x4.getEventProperties(o,n));for(var x in w)g[x]=w[x];r&&r.dispatchEvent(g),b[y]&&b[y].call(n,g)}})(Pc({putSortable:ba,cloneEl:Zo,targetEl:Wt,rootEl:Co,oldIndex:Dg,oldDraggableIndex:_4,newIndex:ys,newDraggableIndex:mp},e))}var Wt,Lo,ir,Co,v1,Mx,Zo,vp,Dg,ys,_4,mp,Nx,ba,m1,ju,YI,XI,dfe,ffe,E4,Og,C4,Fx,Ta,Tg=!1,Rx=!1,Ix=[],S4=!1,Bx=!1,QI=[],JI=!1,Px=[],Lx=typeof document<"u",jx=nfe,pfe=b4||Kd?"cssFloat":"float",yUe=Lx&&!hUe&&!nfe&&"draggable"in document.createElement("div"),hfe=function(){if(Lx){if(Kd)return!1;var e=document.createElement("x");return e.style.cssText="pointer-events:auto",e.style.pointerEvents==="auto"}}(),vfe=function(e,t){var n=Rn(e),r=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),o=Sg(e,0,t),i=Sg(e,1,t),a=o&&Rn(o),l=i&&Rn(i),s=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+Ni(o).width,u=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+Ni(i).width;if(n.display==="flex")return n.flexDirection==="column"||n.flexDirection==="column-reverse"?"vertical":"horizontal";if(n.display==="grid")return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(o&&a.float&&a.float!=="none"){var c=a.float==="left"?"left":"right";return!i||l.clear!=="both"&&l.clear!==c?"horizontal":"vertical"}return o&&(a.display==="block"||a.display==="flex"||a.display==="table"||a.display==="grid"||s>=r&&n[pfe]==="none"||i&&n[pfe]==="none"&&s+u>r)?"vertical":"horizontal"},mfe=function(e){function t(o,i){return function(a,l,s,u){var c=a.options.group.name&&l.options.group.name&&a.options.group.name===l.options.group.name;if(o==null&&(i||c))return!0;if(o==null||o===!1)return!1;if(i&&o==="clone")return o;if(typeof o=="function")return t(o(a,l,s,u),i)(a,l,s,u);var d=(i?a:l).options.group.name;return o===!0||typeof o=="string"&&o===d||o.join&&o.indexOf(d)>-1}}var n={},r=e.group;(!r||WI(r)!="object")&&(r={name:r}),n.name=r.name,n.checkPull=t(r.pull,!0),n.checkPut=t(r.put),n.revertClone=r.revertClone,e.group=n},gfe=function(){!hfe&&ir&&Rn(ir,"display","none")},yfe=function(){!hfe&&ir&&Rn(ir,"display","")};Lx&&document.addEventListener("click",function(e){if(Rx)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),Rx=!1,!1},!0);var g1=function(e){if(Wt){var t=function(o,i){var a;return Ix.some(function(l){var s=l[gs].options.emptyInsertThreshold;if(s&&!GI(l)){var u=Ni(l),c=o>=u.left-s&&o<=u.right+s,d=i>=u.top-s&&i<=u.bottom+s;if(c&&d)return a=l}}),a}((e=e.touches?e.touches[0]:e).clientX,e.clientY);if(t){var n={};for(var r in e)e.hasOwnProperty(r)&&(n[r]=e[r]);n.target=n.rootEl=t,n.preventDefault=void 0,n.stopPropagation=void 0,t[gs]._onDragOver(n)}}},bUe=function(e){Wt&&Wt.parentNode[gs]._isOutsideThisEl(e.target)};function In(e,t){if(!e||!e.nodeType||e.nodeType!==1)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(e));this.el=e,this.options=t=Gd({},t),e[gs]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(e.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return vfe(e,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(i,a){i.setData("Text",a.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:In.supportPointer!==!1&&"PointerEvent"in window&&!A4,emptyInsertThreshold:5};for(var r in x4.initializePlugins(this,e,n),n)!(r in t)&&(t[r]=n[r]);for(var o in mfe(t),this)o.charAt(0)==="_"&&typeof this[o]=="function"&&(this[o]=this[o].bind(this));this.nativeDraggable=!t.forceFallback&&yUe,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?$r(e,"pointerdown",this._onTapStart):($r(e,"mousedown",this._onTapStart),$r(e,"touchstart",this._onTapStart)),this.nativeDraggable&&($r(e,"dragover",this),$r(e,"dragenter",this)),Ix.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),Gd(this,mUe())}function Vx(e,t,n,r,o,i,a,l){var s,u,c=e[gs],d=c.options.onMove;return!window.CustomEvent||Kd||b4?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=t,s.from=e,s.dragged=n,s.draggedRect=r,s.related=o||t,s.relatedRect=i||Ni(t),s.willInsertAfter=l,s.originalEvent=a,e.dispatchEvent(s),d&&(u=d.call(c,s,a)),u}function ZI(e){e.draggable=!1}function AUe(){JI=!1}function wUe(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,n=t.length,r=0;n--;)r+=t.charCodeAt(n);return r.toString(36)}function zx(e){return setTimeout(e,0)}function eB(e){return clearTimeout(e)}In.prototype={constructor:In,_isOutsideThisEl:function(e){!this.el.contains(e)&&e!==this.el&&(Og=null)},_getDirection:function(e,t){return typeof this.options.direction=="function"?this.options.direction.call(this,e,t,Wt):this.options.direction},_onTapStart:function(e){if(e.cancelable){var t=this,n=this.el,r=this.options,o=r.preventOnFilter,i=e.type,a=e.touches&&e.touches[0]||e.pointerType&&e.pointerType==="touch"&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,u=r.filter;if(function(c){Px.length=0;for(var d=c.getElementsByTagName("input"),f=d.length;f--;){var p=d[f];p.checked&&Px.push(p)}}(n),!Wt&&!(/mousedown|pointerdown/.test(i)&&e.button!==0||r.disabled)&&!s.isContentEditable&&(this.nativeDraggable||!A4||!l||l.tagName.toUpperCase()!=="SELECT")&&!((l=Lc(l,r.draggable,n,!1))&&l.animated||Mx===l)){if(Dg=tu(l),_4=tu(l,r.draggable),typeof u=="function"){if(u.call(this,e,l,this))return il({sortable:t,rootEl:s,name:"filter",targetEl:l,toEl:n,fromEl:n}),Rl("filter",t,{evt:e}),void(o&&e.cancelable&&e.preventDefault())}else if(u&&(u=u.split(",").some(function(c){if(c=Lc(s,c.trim(),n,!1))return il({sortable:t,rootEl:c,name:"filter",targetEl:l,fromEl:n,toEl:n}),Rl("filter",t,{evt:e}),!0}),u))return void(o&&e.cancelable&&e.preventDefault());r.handle&&!Lc(s,r.handle,n,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(e,t,n){var r,o=this,i=o.el,a=o.options,l=i.ownerDocument;if(n&&!Wt&&n.parentNode===i){var s=Ni(n);if(Co=i,Lo=(Wt=n).parentNode,v1=Wt.nextSibling,Mx=n,Nx=a.group,In.dragged=Wt,m1={target:Wt,clientX:(t||e).clientX,clientY:(t||e).clientY},dfe=m1.clientX-s.left,ffe=m1.clientY-s.top,this._lastX=(t||e).clientX,this._lastY=(t||e).clientY,Wt.style["will-change"]="all",r=function(){Rl("delayEnded",o,{evt:e}),In.eventCanceled?o._onDrop():(o._disableDelayedDragEvents(),!tfe&&o.nativeDraggable&&(Wt.draggable=!0),o._triggerDragStart(e,t),il({sortable:o,name:"choose",originalEvent:e}),ms(Wt,a.chosenClass,!0))},a.ignore.split(",").forEach(function(u){ife(Wt,u.trim(),ZI)}),$r(l,"dragover",g1),$r(l,"mousemove",g1),$r(l,"touchmove",g1),$r(l,"mouseup",o._onDrop),$r(l,"touchend",o._onDrop),$r(l,"touchcancel",o._onDrop),tfe&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Wt.draggable=!0),Rl("delayStart",this,{evt:e}),!a.delay||a.delayOnTouchOnly&&!t||this.nativeDraggable&&(b4||Kd))r();else{if(In.eventCanceled)return void this._onDrop();$r(l,"mouseup",o._disableDelayedDrag),$r(l,"touchend",o._disableDelayedDrag),$r(l,"touchcancel",o._disableDelayedDrag),$r(l,"mousemove",o._delayedDragTouchMoveHandler),$r(l,"touchmove",o._delayedDragTouchMoveHandler),a.supportPointer&&$r(l,"pointermove",o._delayedDragTouchMoveHandler),o._dragStartTimer=setTimeout(r,a.delay)}}},_delayedDragTouchMoveHandler:function(e){var t=e.touches?e.touches[0]:e;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Wt&&ZI(Wt),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;Ir(e,"mouseup",this._disableDelayedDrag),Ir(e,"touchend",this._disableDelayedDrag),Ir(e,"touchcancel",this._disableDelayedDrag),Ir(e,"mousemove",this._delayedDragTouchMoveHandler),Ir(e,"touchmove",this._delayedDragTouchMoveHandler),Ir(e,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,t){t=t||e.pointerType=="touch"&&e,!this.nativeDraggable||t?this.options.supportPointer?$r(document,"pointermove",this._onTouchMove):$r(document,t?"touchmove":"mousemove",this._onTouchMove):($r(Wt,"dragend",this),$r(Co,"dragstart",this._onDragStart));try{document.selection?zx(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(e,t){if(Tg=!1,Co&&Wt){Rl("dragStarted",this,{evt:t}),this.nativeDraggable&&$r(document,"dragover",bUe);var n=this.options;!e&&ms(Wt,n.dragClass,!1),ms(Wt,n.ghostClass,!0),In.active=this,e&&this._appendGhost(),il({sortable:this,name:"start",originalEvent:t})}else this._nulling()},_emulateDragOver:function(){if(ju){this._lastX=ju.clientX,this._lastY=ju.clientY,gfe();for(var e=document.elementFromPoint(ju.clientX,ju.clientY),t=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(ju.clientX,ju.clientY))!==t;)t=e;if(Wt.parentNode[gs]._isOutsideThisEl(e),t)do{if(t[gs]&&t[gs]._onDragOver({clientX:ju.clientX,clientY:ju.clientY,target:e,rootEl:t})&&!this.options.dragoverBubble)break;e=t}while(t=t.parentNode);yfe()}},_onTouchMove:function(e){if(m1){var t=this.options,n=t.fallbackTolerance,r=t.fallbackOffset,o=e.touches?e.touches[0]:e,i=ir&&Cg(ir,!0),a=ir&&i&&i.a,l=ir&&i&&i.d,s=jx&&Ta&&lfe(Ta),u=(o.clientX-m1.clientX+r.x)/(a||1)+(s?s[0]-QI[0]:0)/(a||1),c=(o.clientY-m1.clientY+r.y)/(l||1)+(s?s[1]-QI[1]:0)/(l||1);if(!In.active&&!Tg){if(n&&Math.max(Math.abs(o.clientX-this._lastX),Math.abs(o.clientY-this._lastY))<n)return;this._onDragStart(e,!0)}if(ir){i?(i.e+=u-(YI||0),i.f+=c-(XI||0)):i={a:1,b:0,c:0,d:1,e:u,f:c};var d="matrix(".concat(i.a,",").concat(i.b,",").concat(i.c,",").concat(i.d,",").concat(i.e,",").concat(i.f,")");Rn(ir,"webkitTransform",d),Rn(ir,"mozTransform",d),Rn(ir,"msTransform",d),Rn(ir,"transform",d),YI=u,XI=c,ju=o}e.cancelable&&e.preventDefault()}},_appendGhost:function(){if(!ir){var e=this.options.fallbackOnBody?document.body:Co,t=Ni(Wt,!0,jx,!0,e),n=this.options;if(jx){for(Ta=e;Rn(Ta,"position")==="static"&&Rn(Ta,"transform")==="none"&&Ta!==document;)Ta=Ta.parentNode;Ta!==document.body&&Ta!==document.documentElement?(Ta===document&&(Ta=jc()),t.top+=Ta.scrollTop,t.left+=Ta.scrollLeft):Ta=jc(),QI=lfe(Ta)}ms(ir=Wt.cloneNode(!0),n.ghostClass,!1),ms(ir,n.fallbackClass,!0),ms(ir,n.dragClass,!0),Rn(ir,"transition",""),Rn(ir,"transform",""),Rn(ir,"box-sizing","border-box"),Rn(ir,"margin",0),Rn(ir,"top",t.top),Rn(ir,"left",t.left),Rn(ir,"width",t.width),Rn(ir,"height",t.height),Rn(ir,"opacity","0.8"),Rn(ir,"position",jx?"absolute":"fixed"),Rn(ir,"zIndex","100000"),Rn(ir,"pointerEvents","none"),In.ghost=ir,e.appendChild(ir),Rn(ir,"transform-origin",dfe/parseInt(ir.style.width)*100+"% "+ffe/parseInt(ir.style.height)*100+"%")}},_onDragStart:function(e,t){var n=this,r=e.dataTransfer,o=n.options;Rl("dragStart",this,{evt:e}),In.eventCanceled?this._onDrop():(Rl("setupClone",this),In.eventCanceled||((Zo=cfe(Wt)).draggable=!1,Zo.style["will-change"]="",this._hideClone(),ms(Zo,this.options.chosenClass,!1),In.clone=Zo),n.cloneId=zx(function(){Rl("clone",n),!In.eventCanceled&&(n.options.removeCloneOnHide||Co.insertBefore(Zo,Wt),n._hideClone(),il({sortable:n,name:"clone"}))}),!t&&ms(Wt,o.dragClass,!0),t?(Rx=!0,n._loopId=setInterval(n._emulateDragOver,50)):(Ir(document,"mouseup",n._onDrop),Ir(document,"touchend",n._onDrop),Ir(document,"touchcancel",n._onDrop),r&&(r.effectAllowed="move",o.setData&&o.setData.call(n,r,Wt)),$r(document,"drop",n),Rn(Wt,"transform","translateZ(0)")),Tg=!0,n._dragStartId=zx(n._dragStarted.bind(n,t,e)),$r(document,"selectstart",n),E4=!0,A4&&Rn(document.body,"user-select","none"))},_onDragOver:function(e){var t,n,r,o,i=this.el,a=e.target,l=this.options,s=l.group,u=In.active,c=Nx===s,d=l.sort,f=ba||u,p=this,m=!1;if(!JI){if(e.preventDefault!==void 0&&e.cancelable&&e.preventDefault(),a=Lc(a,l.draggable,i,!0),N("dragOver"),In.eventCanceled)return m;if(Wt.contains(e.target)||a.animated&&a.animatingX&&a.animatingY||p._ignoreWhileAnimating===a)return P(!1);if(Rx=!1,u&&!l.disabled&&(c?d||(r=Lo!==Co):ba===this||(this.lastPutMode=Nx.checkPull(this,u,Wt,e))&&s.checkPut(this,u,Wt,e))){if(o=this._getDirection(e,a)==="vertical",t=Ni(Wt),N("dragOverValid"),In.eventCanceled)return m;if(r)return Lo=Co,B(),this._hideClone(),N("revert"),In.eventCanceled||(v1?Co.insertBefore(Wt,v1):Co.appendChild(Wt)),P(!0);var v=GI(i,l.draggable);if(!v||function(L,H,U){var G=Ni(GI(U.el,U.options.draggable)),z=10;return H?L.clientX>G.right+z||L.clientX<=G.right&&L.clientY>G.bottom&&L.clientX>=G.left:L.clientX>G.right&&L.clientY>G.top||L.clientX<=G.right&&L.clientY>G.bottom+z}(e,o,this)&&!v.animated){if(v===Wt)return P(!1);if(v&&i===e.target&&(a=v),a&&(n=Ni(a)),Vx(Co,i,Wt,t,a,n,e,!!a)!==!1)return B(),i.appendChild(Wt),Lo=i,V(),P(!0)}else if(v&&function(L,H,U){var G=Ni(Sg(U.el,0,U.options,!0)),z=10;return H?L.clientX<G.left-z||L.clientY<G.top&&L.clientX<G.right:L.clientY<G.top-z||L.clientY<G.bottom&&L.clientX<G.left}(e,o,this)){var g=Sg(i,0,l,!0);if(g===Wt)return P(!1);if(n=Ni(a=g),Vx(Co,i,Wt,t,a,n,e,!1)!==!1)return B(),i.insertBefore(Wt,g),Lo=i,V(),P(!0)}else if(a.parentNode===i){n=Ni(a);var b,y,w,x=Wt.parentNode!==i,_=!function(L,H,U){var G=U?L.left:L.top,z=U?L.right:L.bottom,$=U?L.width:L.height,W=U?H.left:H.top,K=U?H.right:H.bottom,X=U?H.width:H.height;return G===W||z===K||G+$/2===W+X/2}(Wt.animated&&Wt.toRect||t,a.animated&&a.toRect||n,o),E=o?"top":"left",C=afe(a,"top","top")||afe(Wt,"top","top"),T=C?C.scrollTop:void 0;if(Og!==a&&(y=n[E],S4=!1,Bx=!_&&l.invertSwap||x),b=function(L,H,U,G,z,$,W,K){var X=G?L.clientY:L.clientX,te=G?U.height:U.width,ne=G?U.top:U.left,se=G?U.bottom:U.right,le=!1;if(!W){if(K&&Fx<te*z){if(!S4&&(C4===1?X>ne+te*$/2:X<se-te*$/2)&&(S4=!0),S4)le=!0;else if(C4===1?X<ne+Fx:X>se-Fx)return-C4}else if(X>ne+te*(1-z)/2&&X<se-te*(1-z)/2)return function(J){return tu(Wt)<tu(J)?1:-1}(H)}return le=le||W,le&&(X<ne+te*$/2||X>se-te*$/2)?X>ne+te/2?1:-1:0}(e,a,n,o,_?1:l.swapThreshold,l.invertedSwapThreshold==null?l.swapThreshold:l.invertedSwapThreshold,Bx,Og===a),b!==0){var k=tu(Wt);do k-=b,w=Lo.children[k];while(w&&(Rn(w,"display")==="none"||w===ir))}if(b===0||w===a)return P(!1);Og=a,C4=b;var I=a.nextElementSibling,O=!1,F=Vx(Co,i,Wt,t,a,n,e,O=b===1);if(F!==!1)return(F===1||F===-1)&&(O=F===1),JI=!0,setTimeout(AUe,30),B(),O&&!I?i.appendChild(Wt):a.parentNode.insertBefore(Wt,O?I:a),C&&ufe(C,0,T-C.scrollTop),Lo=Wt.parentNode,y!==void 0&&!Bx&&(Fx=Math.abs(y-Ni(a)[E])),V(),P(!0)}if(i.contains(Wt))return P(!1)}return!1}function N(L,H){Rl(L,p,Pc({evt:e,isOwner:c,axis:o?"vertical":"horizontal",revert:r,dragRect:t,targetRect:n,canSort:d,fromSortable:f,target:a,completed:P,onMove:function(U,G){return Vx(Co,i,Wt,t,U,Ni(U),e,G)},changed:V},H))}function B(){N("dragOverAnimationCapture"),p.captureAnimationState(),p!==f&&f.captureAnimationState()}function P(L){return N("dragOverCompleted",{insertion:L}),L&&(c?u._hideClone():u._showClone(p),p!==f&&(ms(Wt,ba?ba.options.ghostClass:u.options.ghostClass,!1),ms(Wt,l.ghostClass,!0)),ba!==p&&p!==In.active?ba=p:p===In.active&&ba&&(ba=null),f===p&&(p._ignoreWhileAnimating=a),p.animateAll(function(){N("dragOverAnimationComplete"),p._ignoreWhileAnimating=null}),p!==f&&(f.animateAll(),f._ignoreWhileAnimating=null)),(a===Wt&&!Wt.animated||a===i&&!a.animated)&&(Og=null),!l.dragoverBubble&&!e.rootEl&&a!==document&&(Wt.parentNode[gs]._isOutsideThisEl(e.target),!L&&g1(e)),!l.dragoverBubble&&e.stopPropagation&&e.stopPropagation(),m=!0}function V(){ys=tu(Wt),mp=tu(Wt,l.draggable),il({sortable:p,name:"change",toEl:i,newIndex:ys,newDraggableIndex:mp,originalEvent:e})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){Ir(document,"mousemove",this._onTouchMove),Ir(document,"touchmove",this._onTouchMove),Ir(document,"pointermove",this._onTouchMove),Ir(document,"dragover",g1),Ir(document,"mousemove",g1),Ir(document,"touchmove",g1)},_offUpEvents:function(){var e=this.el.ownerDocument;Ir(e,"mouseup",this._onDrop),Ir(e,"touchend",this._onDrop),Ir(e,"pointerup",this._onDrop),Ir(e,"touchcancel",this._onDrop),Ir(document,"selectstart",this)},_onDrop:function(e){var t=this.el,n=this.options;ys=tu(Wt),mp=tu(Wt,n.draggable),Rl("drop",this,{evt:e}),Lo=Wt&&Wt.parentNode,ys=tu(Wt),mp=tu(Wt,n.draggable),In.eventCanceled||(Tg=!1,Bx=!1,S4=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),eB(this.cloneId),eB(this._dragStartId),this.nativeDraggable&&(Ir(document,"drop",this),Ir(t,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),A4&&Rn(document.body,"user-select",""),Rn(Wt,"transform",""),e&&(E4&&(e.cancelable&&e.preventDefault(),!n.dropBubble&&e.stopPropagation()),ir&&ir.parentNode&&ir.parentNode.removeChild(ir),(Co===Lo||ba&&ba.lastPutMode!=="clone")&&Zo&&Zo.parentNode&&Zo.parentNode.removeChild(Zo),Wt&&(this.nativeDraggable&&Ir(Wt,"dragend",this),ZI(Wt),Wt.style["will-change"]="",E4&&!Tg&&ms(Wt,ba?ba.options.ghostClass:this.options.ghostClass,!1),ms(Wt,this.options.chosenClass,!1),il({sortable:this,name:"unchoose",toEl:Lo,newIndex:null,newDraggableIndex:null,originalEvent:e}),Co!==Lo?(ys>=0&&(il({rootEl:Lo,name:"add",toEl:Lo,fromEl:Co,originalEvent:e}),il({sortable:this,name:"remove",toEl:Lo,originalEvent:e}),il({rootEl:Lo,name:"sort",toEl:Lo,fromEl:Co,originalEvent:e}),il({sortable:this,name:"sort",toEl:Lo,originalEvent:e})),ba&&ba.save()):ys!==Dg&&ys>=0&&(il({sortable:this,name:"update",toEl:Lo,originalEvent:e}),il({sortable:this,name:"sort",toEl:Lo,originalEvent:e})),In.active&&((ys==null||ys===-1)&&(ys=Dg,mp=_4),il({sortable:this,name:"end",toEl:Lo,originalEvent:e}),this.save())))),this._nulling()},_nulling:function(){Rl("nulling",this),Co=Wt=Lo=ir=v1=Zo=Mx=vp=m1=ju=E4=ys=mp=Dg=_4=Og=C4=ba=Nx=In.dragged=In.ghost=In.clone=In.active=null,Px.forEach(function(e){e.checked=!0}),Px.length=YI=XI=0},handleEvent:function(e){switch(e.type){case"drop":case"dragend":this._onDrop(e);break;case"dragenter":case"dragover":Wt&&(this._onDragOver(e),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move"),t.cancelable&&t.preventDefault()}(e));break;case"selectstart":e.preventDefault()}},toArray:function(){for(var e,t=[],n=this.el.children,r=0,o=n.length,i=this.options;r<o;r++)Lc(e=n[r],i.draggable,this.el,!1)&&t.push(e.getAttribute(i.dataIdAttr)||wUe(e));return t},sort:function(e,t){var n={},r=this.el;this.toArray().forEach(function(o,i){var a=r.children[i];Lc(a,this.options.draggable,r,!1)&&(n[o]=a)},this),t&&this.captureAnimationState(),e.forEach(function(o){n[o]&&(r.removeChild(n[o]),r.appendChild(n[o]))}),t&&this.animateAll()},save:function(){var e=this.options.store;e&&e.set&&e.set(this)},closest:function(e,t){return Lc(e,t||this.options.draggable,this.el,!1)},option:function(e,t){var n=this.options;if(t===void 0)return n[e];var r=x4.modifyOption(this,e,t);n[e]=typeof r<"u"?r:t,e==="group"&&mfe(n)},destroy:function(){Rl("destroy",this);var e=this.el;e[gs]=null,Ir(e,"mousedown",this._onTapStart),Ir(e,"touchstart",this._onTapStart),Ir(e,"pointerdown",this._onTapStart),this.nativeDraggable&&(Ir(e,"dragover",this),Ir(e,"dragenter",this)),Array.prototype.forEach.call(e.querySelectorAll("[draggable]"),function(t){t.removeAttribute("draggable")}),this._onDrop(),this._disableDelayedDragEvents(),Ix.splice(Ix.indexOf(this.el),1),this.el=e=null},_hideClone:function(){if(!vp){if(Rl("hideClone",this),In.eventCanceled)return;Rn(Zo,"display","none"),this.options.removeCloneOnHide&&Zo.parentNode&&Zo.parentNode.removeChild(Zo),vp=!0}},_showClone:function(e){if(e.lastPutMode==="clone"){if(vp){if(Rl("showClone",this),In.eventCanceled)return;Wt.parentNode!=Co||this.options.group.revertClone?v1?Co.insertBefore(Zo,v1):Co.appendChild(Zo):Co.insertBefore(Zo,Wt),this.options.group.revertClone&&this.animate(Wt,Zo),Rn(Zo,"display",""),vp=!1}}else this._hideClone()}},Lx&&$r(document,"touchmove",function(e){(In.active||Tg)&&e.cancelable&&e.preventDefault()}),In.utils={on:$r,off:Ir,css:Rn,find:ife,is:function(e,t){return!!Lc(e,t,e,!1)},extend:function(e,t){if(e&&t)for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e},throttle:sfe,closest:Lc,toggleClass:ms,clone:cfe,index:tu,nextTick:zx,cancelNextTick:eB,detectDirection:vfe,getChild:Sg},In.get=function(e){return e[gs]},In.mount=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];t[0].constructor===Array&&(t=t[0]),t.forEach(function(r){if(!r.prototype||!r.prototype.constructor)throw"Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(r));r.utils&&(In.utils=Pc(Pc({},In.utils),r.utils)),x4.mount(r)})},In.create=function(e,t){return new In(e,t)},In.version="1.14.0";var k4,tB,nB,rB,Hx,D4,mi=[],oB=!1;function $x(){mi.forEach(function(e){clearInterval(e.pid)}),mi=[]}function bfe(){clearInterval(D4)}var iB=sfe(function(e,t,n,r){if(t.scroll){var o,i=(e.touches?e.touches[0]:e).clientX,a=(e.touches?e.touches[0]:e).clientY,l=t.scrollSensitivity,s=t.scrollSpeed,u=jc(),c=!1;tB!==n&&(tB=n,$x(),k4=t.scroll,o=t.scrollFn,k4===!0&&(k4=hp(n,!0)));var d=0,f=k4;do{var p=f,m=Ni(p),v=m.top,g=m.bottom,b=m.left,y=m.right,w=m.width,x=m.height,_=void 0,E=void 0,C=p.scrollWidth,T=p.scrollHeight,k=Rn(p),I=p.scrollLeft,O=p.scrollTop;p===u?(_=w<C&&(k.overflowX==="auto"||k.overflowX==="scroll"||k.overflowX==="visible"),E=x<T&&(k.overflowY==="auto"||k.overflowY==="scroll"||k.overflowY==="visible")):(_=w<C&&(k.overflowX==="auto"||k.overflowX==="scroll"),E=x<T&&(k.overflowY==="auto"||k.overflowY==="scroll"));var F=_&&(Math.abs(y-i)<=l&&I+w<C)-(Math.abs(b-i)<=l&&!!I),N=E&&(Math.abs(g-a)<=l&&O+x<T)-(Math.abs(v-a)<=l&&!!O);if(!mi[d])for(var B=0;B<=d;B++)mi[B]||(mi[B]={});(mi[d].vx!=F||mi[d].vy!=N||mi[d].el!==p)&&(mi[d].el=p,mi[d].vx=F,mi[d].vy=N,clearInterval(mi[d].pid),(F!=0||N!=0)&&(c=!0,mi[d].pid=setInterval((function(){r&&this.layer===0&&In.active._onTouchMove(Hx);var P=mi[this.layer].vy?mi[this.layer].vy*s:0,V=mi[this.layer].vx?mi[this.layer].vx*s:0;typeof o=="function"&&o.call(In.dragged.parentNode[gs],V,P,e,Hx,mi[this.layer].el)!=="continue"||ufe(mi[this.layer].el,V,P)}).bind({layer:d}),24))),d++}while(t.bubbleScroll&&f!==u&&(f=hp(f,!1)));oB=c}},30),Afe=function(e){var t=e.originalEvent,n=e.putSortable,r=e.dragEl,o=e.activeSortable,i=e.dispatchSortableEvent,a=e.hideGhostForTarget,l=e.unhideGhostForTarget;if(t){var s=n||o;a();var u=t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t,c=document.elementFromPoint(u.clientX,u.clientY);l(),s&&!s.el.contains(c)&&(i("spill"),this.onSpill({dragEl:r,putSortable:n}))}};function aB(){}function lB(){}function sB(e){e.parentElement!==null&&e.parentElement.removeChild(e)}function wfe(e,t,n){const r=n===0?e.children[0]:e.children[n-1].nextSibling;e.insertBefore(t,r)}aB.prototype={startIndex:null,dragStart:function(e){var t=e.oldDraggableIndex;this.startIndex=t},onSpill:function(e){var t=e.dragEl,n=e.putSortable;this.sortable.captureAnimationState(),n&&n.captureAnimationState();var r=Sg(this.sortable.el,this.startIndex,this.options);r?this.sortable.el.insertBefore(t,r):this.sortable.el.appendChild(t),this.sortable.animateAll(),n&&n.animateAll()},drop:Afe},Gd(aB,{pluginName:"revertOnSpill"}),lB.prototype={onSpill:function(e){var t=e.dragEl,n=e.putSortable||this.sortable;n.captureAnimationState(),t.parentNode&&t.parentNode.removeChild(t),n.animateAll()},drop:Afe},Gd(lB,{pluginName:"removeOnSpill"}),In.mount(new function(){function e(){for(var t in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)t.charAt(0)==="_"&&typeof this[t]=="function"&&(this[t]=this[t].bind(this))}return e.prototype={dragStarted:function(t){var n=t.originalEvent;this.sortable.nativeDraggable?$r(document,"dragover",this._handleAutoScroll):this.options.supportPointer?$r(document,"pointermove",this._handleFallbackAutoScroll):n.touches?$r(document,"touchmove",this._handleFallbackAutoScroll):$r(document,"mousemove",this._handleFallbackAutoScroll)},dragOverCompleted:function(t){var n=t.originalEvent;!this.options.dragOverBubble&&!n.rootEl&&this._handleAutoScroll(n)},drop:function(){this.sortable.nativeDraggable?Ir(document,"dragover",this._handleAutoScroll):(Ir(document,"pointermove",this._handleFallbackAutoScroll),Ir(document,"touchmove",this._handleFallbackAutoScroll),Ir(document,"mousemove",this._handleFallbackAutoScroll)),bfe(),$x(),clearTimeout(w4),w4=void 0},nulling:function(){Hx=tB=k4=oB=D4=nB=rB=null,mi.length=0},_handleFallbackAutoScroll:function(t){this._handleAutoScroll(t,!0)},_handleAutoScroll:function(t,n){var r=this,o=(t.touches?t.touches[0]:t).clientX,i=(t.touches?t.touches[0]:t).clientY,a=document.elementFromPoint(o,i);if(Hx=t,n||this.options.forceAutoScrollFallback||b4||Kd||A4){iB(t,this.options,a,n);var l=hp(a,!0);oB&&(!D4||o!==nB||i!==rB)&&(D4&&bfe(),D4=setInterval(function(){var s=hp(document.elementFromPoint(o,i),!0);s!==l&&(l=s,$x()),iB(t,r.options,s,n)},10),nB=o,rB=i)}else{if(!this.options.bubbleScroll||hp(a,!0)===jc())return void $x();iB(t,this.options,hp(a,!1),!1)}}},Gd(e,{pluginName:"scroll",initializeByDefault:!0})}),In.mount(lB,aB);const xUe=typeof window<"u"?window.console:global.console,_Ue=/-(\w)/g,EUe=function(e){const t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}(e=>e.replace(_Ue,(t,n)=>n.toUpperCase())),xfe=["Start","Add","Remove","Update","End"],_fe=["Choose","Unchoose","Sort","Filter","Clone"],Efe=["Move"],CUe=[Efe,xfe,_fe].flatMap(e=>e).map(e=>`on${e}`),uB={manage:Efe,manageAndEmit:xfe,emit:_fe},SUe=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","link","main","map","mark","math","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rb","rp","rt","rtc","ruby","s","samp","script","section","select","slot","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"];function Cfe(e){return["id","class","role","style"].includes(e)||e.startsWith("data-")||e.startsWith("aria-")||e.startsWith("on")}function Sfe(e){return e.reduce((t,[n,r])=>(t[n]=r,t),{})}function kfe(e){return Object.entries(e).filter(([t,n])=>!Cfe(t)).map(([t,n])=>[EUe(t),n]).filter(([t,n])=>!function(r){return CUe.indexOf(r)!==-1}(t))}const Dfe=({el:e})=>e,Ofe=e=>e.__draggable_context;let kUe=class{constructor({nodes:{header:e,default:t,footer:n},root:r,realList:o}){this.defaultNodes=t,this.children=[...e,...t,...n],this.externalComponent=r.externalComponent,this.rootTransition=r.transition,this.tag=r.tag,this.realList=o}get _isRootComponent(){return this.externalComponent||this.rootTransition}render(e,t){const{tag:n,children:r,_isRootComponent:o}=this;return e(n,t,o?{default:()=>r}:r)}updated(){const{defaultNodes:e,realList:t}=this;e.forEach((n,r)=>{((o,i)=>{o.__draggable_context=i})(Dfe(n),{element:t[r],index:r})})}getUnderlyingVm(e){return Ofe(e)}getVmIndexFromDomIndex(e,t){const{defaultNodes:n}=this,{length:r}=n,o=t.children,i=o.item(e);if(i===null)return r;const a=Ofe(i);if(a)return a.index;if(r===0)return 0;const l=Dfe(n[0]),s=[...o].findIndex(u=>u===l);return e<s?0:r}};function DUe(e){const t=function(r){return["transition-group","TransitionGroup"].includes(r)}(e),n=!function(r){return SUe.includes(r)}(e)&&!t;return{transition:t,externalComponent:n,tag:n?Qe(e):t?Sb:e}}function OUe({$slots:e,tag:t,realList:n,getKey:r}){const o=function({$slots:a,realList:l,getKey:s}){const u=l||[],[c,d]=["header","footer"].map(m=>function(v,g){const b=v[g];return b?b():[]}(a,m)),{item:f}=a;if(!f)throw new Error("draggable element must have an item slot");const p=u.flatMap((m,v)=>f({element:m,index:v}).map(g=>(g.key=s(m),g.props={...g.props||{},"data-draggable":!0},g)));if(p.length!==u.length)throw new Error("Item slot must have only one child");return{header:c,footer:d,default:p}}({$slots:e,realList:n,getKey:r}),i=DUe(t);return new kUe({nodes:o,root:i,realList:n})}function Tfe(e,t){St(()=>this.$emit(e.toLowerCase(),t))}function Mfe(e){return(t,n)=>{if(this.realList!==null)return this[`onDrag${e}`](t,n)}}function TUe(e){const t=Mfe.call(this,e);return(n,r)=>{t.call(this,n,r),Tfe.call(this,e,n)}}let cB=null;const MUe={list:{type:Array,required:!1,default:null},modelValue:{type:Array,required:!1,default:null},itemKey:{type:[String,Function],required:!0},clone:{type:Function,default:e=>e},tag:{type:String,default:"div"},move:{type:Function,default:null},componentData:{type:Object,required:!1,default:null}},NUe=["update:modelValue","change",...[...uB.manageAndEmit,...uB.emit].map(e=>e.toLowerCase())],dB=Te({name:"draggable",inheritAttrs:!1,props:MUe,emits:NUe,data:()=>({error:!1}),render(){try{this.error=!1;const{$slots:e,$attrs:t,tag:n,componentData:r,realList:o,getKey:i}=this,a=OUe({$slots:e,tag:n,realList:o,getKey:i});this.componentStructure=a;const l=function({$attrs:s,componentData:u={}}){return{...Sfe(Object.entries(s).filter(([c,d])=>Cfe(c))),...u}}({$attrs:t,componentData:r});return a.render(pn,l)}catch(e){return this.error=!0,pn("pre",{style:{color:"red"}},e.stack)}},created(){this.list!==null&&this.modelValue!==null&&xUe.error("modelValue and list props are mutually exclusive! Please set one or another.")},mounted(){if(this.error)return;const{$attrs:e,$el:t,componentStructure:n}=this;n.updated();const r=function({$attrs:i,callBackBuilder:a}){const l=Sfe(kfe(i));Object.entries(a).forEach(([u,c])=>{uB[u].forEach(d=>{l[`on${d}`]=c(d)})});const s=`[data-draggable]${l.draggable||""}`;return{...l,draggable:s}}({$attrs:e,callBackBuilder:{manageAndEmit:i=>TUe.call(this,i),emit:i=>Tfe.bind(this,i),manage:i=>Mfe.call(this,i)}}),o=t.nodeType===1?t:t.parentElement;this._sortable=new In(o,r),this.targetDomElement=o,o.__draggable_component__=this},updated(){this.componentStructure.updated()},beforeUnmount(){this._sortable!==void 0&&this._sortable.destroy()},computed:{realList(){const{list:e}=this;return e||this.modelValue},getKey(){const{itemKey:e}=this;return typeof e=="function"?e:t=>t[e]}},watch:{$attrs:{handler(e){const{_sortable:t}=this;!t||kfe(e).forEach(([n,r])=>{t.option(n,r)})},deep:!0}},methods:{getUnderlyingVm(e){return this.componentStructure.getUnderlyingVm(e)||null},getUnderlyingPotencialDraggableComponent:e=>e.__draggable_component__,emitChanges(e){St(()=>this.$emit("change",e))},alterList(e){if(this.list)return void e(this.list);const t=[...this.modelValue];e(t),this.$emit("update:modelValue",t)},spliceList(){this.alterList(e=>e.splice(...arguments))},updatePosition(e,t){this.alterList(n=>n.splice(t,0,n.splice(e,1)[0]))},getRelatedContextFromMoveEvent({to:e,related:t}){const n=this.getUnderlyingPotencialDraggableComponent(e);if(!n)return{component:n};const r=n.realList,o={list:r,component:n};return e!==t&&r?{...n.getUnderlyingVm(t)||{},...o}:o},getVmIndexFromDomIndex(e){return this.componentStructure.getVmIndexFromDomIndex(e,this.targetDomElement)},onDragStart(e){this.context=this.getUnderlyingVm(e.item),e.item._underlying_vm_=this.clone(this.context.element),cB=e.item},onDragAdd(e){const t=e.item._underlying_vm_;if(t===void 0)return;sB(e.item);const n=this.getVmIndexFromDomIndex(e.newIndex);this.spliceList(n,0,t);const r={element:t,newIndex:n};this.emitChanges({added:r})},onDragRemove(e){if(wfe(this.$el,e.item,e.oldIndex),e.pullMode==="clone")return void sB(e.clone);const{index:t,element:n}=this.context;this.spliceList(t,1);const r={element:n,oldIndex:t};this.emitChanges({removed:r})},onDragUpdate(e){sB(e.item),wfe(e.from,e.item,e.oldIndex);const t=this.context.index,n=this.getVmIndexFromDomIndex(e.newIndex);this.updatePosition(t,n);const r={element:this.context.element,oldIndex:t,newIndex:n};this.emitChanges({moved:r})},computeFutureIndex(e,t){if(!e.element)return 0;const n=[...t.to.children].filter(i=>i.style.display!=="none"),r=n.indexOf(t.related),o=e.component.getVmIndexFromDomIndex(r);return n.indexOf(cB)===-1&&t.willInsertAfter?o+1:o},onDragMove(e,t){const{move:n,realList:r}=this;if(!n||!r)return!0;const o=this.getRelatedContextFromMoveEvent(e),i=this.computeFutureIndex(o,e),a={...this.context,futureIndex:i};return n({...e,relatedContext:o,draggedContext:a},t)},onDragEnd(){cB=null}}}),Ux=_d,Br=_d.factory();let Nfe=null,Ffe=de(null);function fB(...e){return Nfe(...e)}const Rfe=e=>{Ffe.value=e||Vde;const t=fI(Ffe);return Nfe=t.t,t};Rfe(),typeof globalThis<"u"||typeof window<"u"||(typeof global<"u"?global:typeof self<"u");var Ife,Bfe={exports:{}};function Wx(){return Ife||(Ife=1,Bfe.exports=function(){var e=navigator.userAgent,t=navigator.platform,n=/gecko\/\d/i.test(e),r=/MSIE \d/.test(e),o=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),i=/Edge\/(\d+)/.exec(e),a=r||o||i,l=a&&(r?document.documentMode||6:+(i||o)[1]),s=!i&&/WebKit\//.test(e),u=s&&/Qt\/\d+\.\d+/.test(e),c=!i&&/Chrome\/(\d+)/.exec(e),d=c&&+c[1],f=/Opera\//.test(e),p=/Apple Computer/.test(navigator.vendor),m=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),v=/PhantomJS/.test(e),g=p&&(/Mobile\/\w+/.test(e)||navigator.maxTouchPoints>2),b=/Android/.test(e),y=g||b||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),w=g||/Mac/.test(t),x=/\bCrOS\b/.test(e),_=/win/i.test(t),E=f&&e.match(/Version\/(\d*\.\d*)/);E&&(E=Number(E[1])),E&&E>=15&&(f=!1,s=!0);var C=w&&(u||f&&(E==null||E<12.11)),T=n||a&&l>=9;function k(h){return new RegExp("(^|\\s)"+h+"(?:$|\\s)\\s*")}var I,O=function(h,A){var D=h.className,S=k(A).exec(D);if(S){var R=D.slice(S.index+S[0].length);h.className=D.slice(0,S.index)+(R?S[1]+R:"")}};function F(h){for(var A=h.childNodes.length;A>0;--A)h.removeChild(h.firstChild);return h}function N(h,A){return F(h).appendChild(A)}function B(h,A,D,S){var R=document.createElement(h);if(D&&(R.className=D),S&&(R.style.cssText=S),typeof A=="string")R.appendChild(document.createTextNode(A));else if(A)for(var j=0;j<A.length;++j)R.appendChild(A[j]);return R}function P(h,A,D,S){var R=B(h,A,D,S);return R.setAttribute("role","presentation"),R}function V(h,A){if(A.nodeType==3&&(A=A.parentNode),h.contains)return h.contains(A);do if(A.nodeType==11&&(A=A.host),A==h)return!0;while(A=A.parentNode)}function L(h){var A;try{A=h.activeElement}catch{A=h.body||null}for(;A&&A.shadowRoot&&A.shadowRoot.activeElement;)A=A.shadowRoot.activeElement;return A}function H(h,A){var D=h.className;k(A).test(D)||(h.className+=(D?" ":"")+A)}function U(h,A){for(var D=h.split(" "),S=0;S<D.length;S++)D[S]&&!k(D[S]).test(A)&&(A+=" "+D[S]);return A}I=document.createRange?function(h,A,D,S){var R=document.createRange();return R.setEnd(S||h,D),R.setStart(h,A),R}:function(h,A,D){var S=document.body.createTextRange();try{S.moveToElementText(h.parentNode)}catch{return S}return S.collapse(!0),S.moveEnd("character",D),S.moveStart("character",A),S};var G=function(h){h.select()};function z(h){return h.display.wrapper.ownerDocument}function $(h){return z(h).defaultView}function W(h){var A=Array.prototype.slice.call(arguments,1);return function(){return h.apply(null,A)}}function K(h,A,D){for(var S in A||(A={}),h)h.hasOwnProperty(S)&&(D!==!1||!A.hasOwnProperty(S))&&(A[S]=h[S]);return A}function X(h,A,D,S,R){A==null&&(A=h.search(/[^\s\u00a0]/))==-1&&(A=h.length);for(var j=S||0,q=R||0;;){var Q=h.indexOf(" ",j);if(Q<0||Q>=A)return q+(A-j);q+=Q-j,q+=D-q%D,j=Q+1}}g?G=function(h){h.selectionStart=0,h.selectionEnd=h.value.length}:a&&(G=function(h){try{h.select()}catch{}});var te=function(){this.id=null,this.f=null,this.time=0,this.handler=W(this.onTimeout,this)};function ne(h,A){for(var D=0;D<h.length;++D)if(h[D]==A)return D;return-1}te.prototype.onTimeout=function(h){h.id=0,h.time<=+new Date?h.f():setTimeout(h.handler,h.time-+new Date)},te.prototype.set=function(h,A){this.f=A;var D=+new Date+h;(!this.id||D<this.time)&&(clearTimeout(this.id),this.id=setTimeout(this.handler,h),this.time=D)};var se=50,le={toString:function(){return"CodeMirror.Pass"}},J={scroll:!1},Z={origin:"*mouse"},ye={origin:"+move"};function be(h,A,D){for(var S=0,R=0;;){var j=h.indexOf(" ",S);j==-1&&(j=h.length);var q=j-S;if(j==h.length||R+q>=A)return S+Math.min(q,A-R);if(R+=j-S,S=j+1,(R+=D-R%D)>=A)return S}}var ve=[""];function Ae(h){for(;ve.length<=h;)ve.push(Ce(ve)+" ");return ve[h]}function Ce(h){return h[h.length-1]}function _e(h,A){for(var D=[],S=0;S<h.length;S++)D[S]=A(h[S],S);return D}function ke(h,A,D){for(var S=0,R=D(A);S<h.length&&D(h[S])<=R;)S++;h.splice(S,0,A)}function Be(){}function $e(h,A){var D;return Object.create?D=Object.create(h):(Be.prototype=h,D=new Be),A&&K(A,D),D}var rt=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;function ge(h){return/\w/.test(h)||h>"\x80"&&(h.toUpperCase()!=h.toLowerCase()||rt.test(h))}function We(h,A){return A?!!(A.source.indexOf("\\w")>-1&&ge(h))||A.test(h):ge(h)}function st(h){for(var A in h)if(h.hasOwnProperty(A)&&h[A])return!1;return!0}var At=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function Ve(h){return h.charCodeAt(0)>=768&&At.test(h)}function it(h,A,D){for(;(D<0?A>0:A<h.length)&&Ve(h.charAt(A));)A+=D;return A}function dt(h,A,D){for(var S=A>D?-1:1;;){if(A==D)return A;var R=(A+D)/2,j=S<0?Math.ceil(R):Math.floor(R);if(j==A)return h(j)?A:D;h(j)?D=j:A=j+S}}function ot(h,A,D,S){if(!h)return S(A,D,"ltr",0);for(var R=!1,j=0;j<h.length;++j){var q=h[j];(q.from<D&&q.to>A||A==D&&q.to==A)&&(S(Math.max(q.from,A),Math.min(q.to,D),q.level==1?"rtl":"ltr",j),R=!0)}R||S(A,D,"ltr")}var je=null;function we(h,A,D){var S;je=null;for(var R=0;R<h.length;++R){var j=h[R];if(j.from<A&&j.to>A)return R;j.to==A&&(j.from!=j.to&&D=="before"?S=R:je=R),j.from==A&&(j.from!=j.to&&D!="before"?S=R:je=R)}return S??je}var ze=function(){var h="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",A="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function D(ae){return ae<=247?h.charAt(ae):1424<=ae&&ae<=1524?"R":1536<=ae&&ae<=1785?A.charAt(ae-1536):1774<=ae&&ae<=2220?"r":8192<=ae&&ae<=8203?"w":ae==8204?"b":"L"}var S=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,R=/[stwN]/,j=/[LRr]/,q=/[Lb1n]/,Q=/[1n]/;function re(ae,Se,De){this.level=ae,this.from=Se,this.to=De}return function(ae,Se){var De=Se=="ltr"?"L":"R";if(ae.length==0||Se=="ltr"&&!S.test(ae))return!1;for(var Ue=ae.length,Ge=[],at=0;at<Ue;++at)Ge.push(D(ae.charCodeAt(at)));for(var yt=0,Ot=De;yt<Ue;++yt){var Yt=Ge[yt];Yt=="m"?Ge[yt]=Ot:Ot=Yt}for(var Jt=0,It=De;Jt<Ue;++Jt){var tn=Ge[Jt];tn=="1"&&It=="r"?Ge[Jt]="n":j.test(tn)&&(It=tn,tn=="r"&&(Ge[Jt]="R"))}for(var en=1,fn=Ge[0];en<Ue-1;++en){var ro=Ge[en];ro=="+"&&fn=="1"&&Ge[en+1]=="1"?Ge[en]="1":ro==","&&fn==Ge[en+1]&&(fn=="1"||fn=="n")&&(Ge[en]=fn),fn=ro}for(var Zr=0;Zr<Ue;++Zr){var Ql=Ge[Zr];if(Ql==",")Ge[Zr]="N";else if(Ql=="%"){var ho=void 0;for(ho=Zr+1;ho<Ue&&Ge[ho]=="%";++ho);for(var Cu=Zr&&Ge[Zr-1]=="!"||ho<Ue&&Ge[ho]=="1"?"1":"N",Jl=Zr;Jl<ho;++Jl)Ge[Jl]=Cu;Zr=ho-1}}for(var Bo=0,ml=De;Bo<Ue;++Bo){var Ua=Ge[Bo];ml=="L"&&Ua=="1"?Ge[Bo]="L":j.test(Ua)&&(ml=Ua)}for(var si=0;si<Ue;++si)if(R.test(Ge[si])){var Ko=void 0;for(Ko=si+1;Ko<Ue&&R.test(Ge[Ko]);++Ko);for(var ui=(si?Ge[si-1]:De)=="L",gl=ui==((Ko<Ue?Ge[Ko]:De)=="L")?ui?"L":"R":De,d0=si;d0<Ko;++d0)Ge[d0]=gl;si=Ko-1}for(var pc,Ca=[],ci=0;ci<Ue;)if(q.test(Ge[ci])){var iQ=ci;for(++ci;ci<Ue&&q.test(Ge[ci]);++ci);Ca.push(new re(0,iQ,ci))}else{var Tf=ci,hm=Ca.length,vm=Se=="rtl"?1:0;for(++ci;ci<Ue&&Ge[ci]!="L";++ci);for(var Wa=Tf;Wa<ci;)if(Q.test(Ge[Wa])){Tf<Wa&&(Ca.splice(hm,0,new re(1,Tf,Wa)),hm+=vm);var Ab=Wa;for(++Wa;Wa<ci&&Q.test(Ge[Wa]);++Wa);Ca.splice(hm,0,new re(2,Ab,Wa)),hm+=vm,Tf=Wa}else++Wa;Tf<ci&&Ca.splice(hm,0,new re(1,Tf,ci))}return Se=="ltr"&&(Ca[0].level==1&&(pc=ae.match(/^\s+/))&&(Ca[0].from=pc[0].length,Ca.unshift(new re(0,0,pc[0].length))),Ce(Ca).level==1&&(pc=ae.match(/\s+$/))&&(Ce(Ca).to-=pc[0].length,Ca.push(new re(0,Ue-pc[0].length,Ue)))),Se=="rtl"?Ca.reverse():Ca}}();function me(h,A){var D=h.order;return D==null&&(D=h.order=ze(h.text,A)),D}var Me=[],Ie=function(h,A,D){if(h.addEventListener)h.addEventListener(A,D,!1);else if(h.attachEvent)h.attachEvent("on"+A,D);else{var S=h._handlers||(h._handlers={});S[A]=(S[A]||Me).concat(D)}};function ht(h,A){return h._handlers&&h._handlers[A]||Me}function gt(h,A,D){if(h.removeEventListener)h.removeEventListener(A,D,!1);else if(h.detachEvent)h.detachEvent("on"+A,D);else{var S=h._handlers,R=S&&S[A];if(R){var j=ne(R,D);j>-1&&(S[A]=R.slice(0,j).concat(R.slice(j+1)))}}}function vt(h,A){var D=ht(h,A);if(D.length)for(var S=Array.prototype.slice.call(arguments,2),R=0;R<D.length;++R)D[R].apply(null,S)}function qt(h,A,D){return typeof A=="string"&&(A={type:A,preventDefault:function(){this.defaultPrevented=!0}}),vt(h,D||A.type,h,A),kt(A)||A.codemirrorIgnore}function mn(h){var A=h._handlers&&h._handlers.cursorActivity;if(A)for(var D=h.curOp.cursorActivityHandlers||(h.curOp.cursorActivityHandlers=[]),S=0;S<A.length;++S)ne(D,A[S])==-1&&D.push(A[S])}function Zt(h,A){return ht(h,A).length>0}function rn(h){h.prototype.on=function(A,D){Ie(this,A,D)},h.prototype.off=function(A,D){gt(this,A,D)}}function zn(h){h.preventDefault?h.preventDefault():h.returnValue=!1}function tt(h){h.stopPropagation?h.stopPropagation():h.cancelBubble=!0}function kt(h){return h.defaultPrevented!=null?h.defaultPrevented:h.returnValue==0}function An(h){zn(h),tt(h)}function _n(h){return h.target||h.srcElement}function po(h){var A=h.which;return A==null&&(1&h.button?A=1:2&h.button?A=3:4&h.button&&(A=2)),w&&h.ctrlKey&&A==1&&(A=3),A}var Qr,Ar,Jr=function(){if(a&&l<9)return!1;var h=B("div");return"draggable"in h||"dragDrop"in h}();function Ao(h){if(Qr==null){var A=B("span","\u200B");N(h,B("span",[A,document.createTextNode("x")])),h.firstChild.offsetHeight!=0&&(Qr=A.offsetWidth<=1&&A.offsetHeight>2&&!(a&&l<8))}var D=Qr?B("span","\u200B"):B("span","\xA0",null,"display: inline-block; width: 1px; margin-right: -1px");return D.setAttribute("cm-text",""),D}function pl(h){if(Ar!=null)return Ar;var A=N(h,document.createTextNode("A\u062EA")),D=I(A,0,1).getBoundingClientRect(),S=I(A,1,2).getBoundingClientRect();return F(h),!(!D||D.left==D.right)&&(Ar=S.right-D.right<3)}var Go=`
|
| b`.split(/\n/).length!=3?function(h){for(var A=0,D=[],S=h.length;A<=S;){var R=h.indexOf(`
| `,A);R==-1&&(R=h.length);var j=h.slice(A,h.charAt(R-1)=="\r"?R-1:R),q=j.indexOf("\r");q!=-1?(D.push(j.slice(0,q)),A+=q+1):(D.push(j),A=R+1)}return D}:function(h){return h.split(/\r\n?|\n/)},za=window.getSelection?function(h){try{return h.selectionStart!=h.selectionEnd}catch{return!1}}:function(h){var A;try{A=h.ownerDocument.selection.createRange()}catch{}return!(!A||A.parentElement()!=h)&&A.compareEndPoints("StartToEnd",A)!=0},sa=function(){var h=B("div");return"oncopy"in h||(h.setAttribute("oncopy","return;"),typeof h.oncopy=="function")}(),He=null;function lt(h){if(He!=null)return He;var A=N(h,B("span","x")),D=A.getBoundingClientRect(),S=I(A,0,1).getBoundingClientRect();return He=Math.abs(D.left-S.left)>1}var Et={},Kt={};function gr(h,A){arguments.length>2&&(A.dependencies=Array.prototype.slice.call(arguments,2)),Et[h]=A}function Bn(h,A){Kt[h]=A}function Ne(h){if(typeof h=="string"&&Kt.hasOwnProperty(h))h=Kt[h];else if(h&&typeof h.name=="string"&&Kt.hasOwnProperty(h.name)){var A=Kt[h.name];typeof A=="string"&&(A={name:A}),(h=$e(A,h)).name=A.name}else{if(typeof h=="string"&&/^[\w\-]+\/[\w\-]+\+xml$/.test(h))return Ne("application/xml");if(typeof h=="string"&&/^[\w\-]+\/[\w\-]+\+json$/.test(h))return Ne("application/json")}return typeof h=="string"?{name:h}:h||{name:"null"}}function Tt(h,A){A=Ne(A);var D=Et[A.name];if(!D)return Tt(h,"text/plain");var S=D(h,A);if(Oe.hasOwnProperty(A.name)){var R=Oe[A.name];for(var j in R)!R.hasOwnProperty(j)||(S.hasOwnProperty(j)&&(S["_"+j]=S[j]),S[j]=R[j])}if(S.name=A.name,A.helperType&&(S.helperType=A.helperType),A.modeProps)for(var q in A.modeProps)S[q]=A.modeProps[q];return S}var Oe={};function nt(h,A){K(A,Oe.hasOwnProperty(h)?Oe[h]:Oe[h]={})}function ut(h,A){if(A===!0)return A;if(h.copyState)return h.copyState(A);var D={};for(var S in A){var R=A[S];R instanceof Array&&(R=R.concat([])),D[S]=R}return D}function xt(h,A){for(var D;h.innerMode&&(D=h.innerMode(A))&&D.mode!=h;)A=D.state,h=D.mode;return D||{mode:h,state:A}}function En(h,A,D){return!h.startState||h.startState(A,D)}var ln=function(h,A,D){this.pos=this.start=0,this.string=h,this.tabSize=A||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=D};function Ct(h,A){if((A-=h.first)<0||A>=h.size)throw new Error("There is no line "+(A+h.first)+" in the document.");for(var D=h;!D.lines;)for(var S=0;;++S){var R=D.children[S],j=R.chunkSize();if(A<j){D=R;break}A-=j}return D.lines[A]}function Fn(h,A,D){var S=[],R=A.line;return h.iter(A.line,D.line+1,function(j){var q=j.text;R==D.line&&(q=q.slice(0,D.ch)),R==A.line&&(q=q.slice(A.ch)),S.push(q),++R}),S}function Mo(h,A,D){var S=[];return h.iter(A,D,function(R){S.push(R.text)}),S}function jr(h,A){var D=A-h.height;if(D)for(var S=h;S;S=S.parent)S.height+=D}function cr(h){if(h.parent==null)return null;for(var A=h.parent,D=ne(A.lines,h),S=A.parent;S;A=S,S=S.parent)for(var R=0;S.children[R]!=A;++R)D+=S.children[R].chunkSize();return D+A.first}function Ha(h,A){var D=h.first;e:do{for(var S=0;S<h.children.length;++S){var R=h.children[S],j=R.height;if(A<j){h=R;continue e}A-=j,D+=R.chunkSize()}return D}while(!h.lines);for(var q=0;q<h.lines.length;++q){var Q=h.lines[q].height;if(A<Q)break;A-=Q}return D+q}function pe(h,A){return A>=h.first&&A<h.first+h.size}function xe(h,A){return String(h.lineNumberFormatter(A+h.firstLineNumber))}function Ee(h,A,D){if(D===void 0&&(D=null),!(this instanceof Ee))return new Ee(h,A,D);this.line=h,this.ch=A,this.sticky=D}function Ze(h,A){return h.line-A.line||h.ch-A.ch}function Vt(h,A){return h.sticky==A.sticky&&Ze(h,A)==0}function Cn(h){return Ee(h.line,h.ch)}function on(h,A){return Ze(h,A)<0?A:h}function Ln(h,A){return Ze(h,A)<0?h:A}function Mr(h,A){return Math.max(h.first,Math.min(A,h.first+h.size-1))}function gn(h,A){if(A.line<h.first)return Ee(h.first,0);var D=h.first+h.size-1;return A.line>D?Ee(D,Ct(h,D).text.length):Ef(A,Ct(h,A.line).text.length)}function Ef(h,A){var D=h.ch;return D==null||D>A?Ee(h.line,A):D<0?Ee(h.line,0):h}function gd(h,A){for(var D=[],S=0;S<A.length;S++)D[S]=gn(h,A[S]);return D}ln.prototype.eol=function(){return this.pos>=this.string.length},ln.prototype.sol=function(){return this.pos==this.lineStart},ln.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},ln.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},ln.prototype.eat=function(h){var A=this.string.charAt(this.pos);if(typeof h=="string"?A==h:A&&(h.test?h.test(A):h(A)))return++this.pos,A},ln.prototype.eatWhile=function(h){for(var A=this.pos;this.eat(h););return this.pos>A},ln.prototype.eatSpace=function(){for(var h=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>h},ln.prototype.skipToEnd=function(){this.pos=this.string.length},ln.prototype.skipTo=function(h){var A=this.string.indexOf(h,this.pos);if(A>-1)return this.pos=A,!0},ln.prototype.backUp=function(h){this.pos-=h},ln.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=X(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?X(this.string,this.lineStart,this.tabSize):0)},ln.prototype.indentation=function(){return X(this.string,null,this.tabSize)-(this.lineStart?X(this.string,this.lineStart,this.tabSize):0)},ln.prototype.match=function(h,A,D){if(typeof h!="string"){var S=this.string.slice(this.pos).match(h);return S&&S.index>0?null:(S&&A!==!1&&(this.pos+=S[0].length),S)}var R=function(j){return D?j.toLowerCase():j};if(R(this.string.substr(this.pos,h.length))==R(h))return A!==!1&&(this.pos+=h.length),!0},ln.prototype.current=function(){return this.string.slice(this.start,this.pos)},ln.prototype.hideFirstChars=function(h,A){this.lineStart+=h;try{return A()}finally{this.lineStart-=h}},ln.prototype.lookAhead=function(h){var A=this.lineOracle;return A&&A.lookAhead(h)},ln.prototype.baseToken=function(){var h=this.lineOracle;return h&&h.baseToken(this.pos)};var Yl=function(h,A){this.state=h,this.lookAhead=A},Ls=function(h,A,D,S){this.state=A,this.doc=h,this.line=D,this.maxLookAhead=S||0,this.baseTokens=null,this.baseTokenPos=1};function om(h,A,D,S){var R=[h.state.modeGen],j={};$Se(h,A.text,h.doc.mode,D,function(ae,Se){return R.push(ae,Se)},j,S);for(var q=D.state,Q=function(ae){D.baseTokens=R;var Se=h.state.overlays[ae],De=1,Ue=0;D.state=!0,$Se(h,A.text,Se.mode,D,function(Ge,at){for(var yt=De;Ue<Ge;){var Ot=R[De];Ot>Ge&&R.splice(De,1,Ge,R[De+1],Ot),De+=2,Ue=Math.min(Ge,Ot)}if(at)if(Se.opaque)R.splice(yt,De-yt,Ge,"overlay "+at),De=yt+2;else for(;yt<De;yt+=2){var Yt=R[yt+1];R[yt+1]=(Yt?Yt+" ":"")+"overlay "+at}},j),D.state=q,D.baseTokens=null,D.baseTokenPos=1},re=0;re<h.state.overlays.length;++re)Q(re);return{styles:R,classes:j.bgClass||j.textClass?j:null}}function nb(h,A,D){if(!A.styles||A.styles[0]!=h.state.modeGen){var S=yd(h,cr(A)),R=A.text.length>h.options.maxHighlightLength&&ut(h.doc.mode,S.state),j=om(h,A,S);R&&(S.state=R),A.stateAfter=S.save(!R),A.styles=j.styles,j.classes?A.styleClasses=j.classes:A.styleClasses&&(A.styleClasses=null),D===h.doc.highlightFrontier&&(h.doc.modeFrontier=Math.max(h.doc.modeFrontier,++h.doc.highlightFrontier))}return A.styles}function yd(h,A,D){var S=h.doc,R=h.display;if(!S.mode.startState)return new Ls(S,!0,A);var j=swt(h,A,D),q=j>S.first&&Ct(S,j-1).stateAfter,Q=q?Ls.fromSaved(S,q,j):new Ls(S,En(S.mode),j);return S.iter(j,A,function(re){t0(h,re.text,Q);var ae=Q.line;re.stateAfter=ae==A-1||ae%5==0||ae>=R.viewFrom&&ae<R.viewTo?Q.save():null,Q.nextLine()}),D&&(S.modeFrontier=Q.line),Q}function t0(h,A,D,S){var R=h.doc.mode,j=new ln(A,h.options.tabSize,D);for(j.start=j.pos=S||0,A==""&&YA(R,D.state);!j.eol();)n0(R,j,D.state),j.start=j.pos}function YA(h,A){if(h.blankLine)return h.blankLine(A);if(h.innerMode){var D=xt(h,A);if(D.mode.blankLine)return D.mode.blankLine(D.state)}}function n0(h,A,D,S){for(var R=0;R<10;R++){S&&(S[0]=xt(h,D).mode);var j=h.token(A,D);if(A.pos>A.start)return j}throw new Error("Mode "+h.name+" failed to advance stream.")}Ls.prototype.lookAhead=function(h){var A=this.doc.getLine(this.line+h);return A!=null&&h>this.maxLookAhead&&(this.maxLookAhead=h),A},Ls.prototype.baseToken=function(h){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=h;)this.baseTokenPos+=2;var A=this.baseTokens[this.baseTokenPos+1];return{type:A&&A.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-h}},Ls.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},Ls.fromSaved=function(h,A,D){return A instanceof Yl?new Ls(h,ut(h.mode,A.state),D,A.lookAhead):new Ls(h,ut(h.mode,A),D)},Ls.prototype.save=function(h){var A=h!==!1?ut(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new Yl(A,this.maxLookAhead):A};var im=function(h,A,D){this.start=h.start,this.end=h.pos,this.string=h.current(),this.type=A||null,this.state=D};function zSe(h,A,D,S){var R,j,q=h.doc,Q=q.mode,re=Ct(q,(A=gn(q,A)).line),ae=yd(h,A.line,D),Se=new ln(re.text,h.options.tabSize,ae);for(S&&(j=[]);(S||Se.pos<A.ch)&&!Se.eol();)Se.start=Se.pos,R=n0(Q,Se,ae.state),S&&j.push(new im(Se,R,ut(q.mode,ae.state)));return S?j:new im(Se,R,ae.state)}function HSe(h,A){if(h)for(;;){var D=h.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!D)break;h=h.slice(0,D.index)+h.slice(D.index+D[0].length);var S=D[1]?"bgClass":"textClass";A[S]==null?A[S]=D[2]:new RegExp("(?:^|\\s)"+D[2]+"(?:$|\\s)").test(A[S])||(A[S]+=" "+D[2])}return h}function $Se(h,A,D,S,R,j,q){var Q=D.flattenSpans;Q==null&&(Q=h.options.flattenSpans);var re,ae=0,Se=null,De=new ln(A,h.options.tabSize,S),Ue=h.options.addModeClass&&[null];for(A==""&&HSe(YA(D,S.state),j);!De.eol();){if(De.pos>h.options.maxHighlightLength?(Q=!1,q&&t0(h,A,S,De.pos),De.pos=A.length,re=null):re=HSe(n0(D,De,S.state,Ue),j),Ue){var Ge=Ue[0].name;Ge&&(re="m-"+(re?Ge+" "+re:Ge))}if(!Q||Se!=re){for(;ae<De.start;)R(ae=Math.min(De.start,ae+5e3),Se);Se=re}De.start=De.pos}for(;ae<De.pos;){var at=Math.min(De.pos,ae+5e3);R(at,Se),ae=at}}function swt(h,A,D){for(var S,R,j=h.doc,q=D?-1:A-(h.doc.mode.innerMode?1e3:100),Q=A;Q>q;--Q){if(Q<=j.first)return j.first;var re=Ct(j,Q-1),ae=re.stateAfter;if(ae&&(!D||Q+(ae instanceof Yl?ae.lookAhead:0)<=j.modeFrontier))return Q;var Se=X(re.text,null,h.options.tabSize);(R==null||S>Se)&&(R=Q-1,S=Se)}return R}function uwt(h,A){if(h.modeFrontier=Math.min(h.modeFrontier,A),!(h.highlightFrontier<A-10)){for(var D=h.first,S=A-1;S>D;S--){var R=Ct(h,S).stateAfter;if(R&&(!(R instanceof Yl)||S+R.lookAhead<A)){D=S+1;break}}h.highlightFrontier=Math.min(h.highlightFrontier,D)}}var USe=!1,Cf=!1;function cwt(){USe=!0}function dwt(){Cf=!0}function GD(h,A,D){this.marker=h,this.from=A,this.to=D}function XA(h,A){if(h)for(var D=0;D<h.length;++D){var S=h[D];if(S.marker==A)return S}}function fwt(h,A){for(var D,S=0;S<h.length;++S)h[S]!=A&&(D||(D=[])).push(h[S]);return D}function pwt(h,A,D){var S=D&&window.WeakSet&&(D.markedSpans||(D.markedSpans=new WeakSet));S&&h.markedSpans&&S.has(h.markedSpans)?h.markedSpans.push(A):(h.markedSpans=h.markedSpans?h.markedSpans.concat([A]):[A],S&&S.add(h.markedSpans)),A.marker.attachLine(h)}function hwt(h,A,D){var S;if(h)for(var R=0;R<h.length;++R){var j=h[R],q=j.marker;if(j.from==null||(q.inclusiveLeft?j.from<=A:j.from<A)||j.from==A&&q.type=="bookmark"&&(!D||!j.marker.insertLeft)){var Q=j.to==null||(q.inclusiveRight?j.to>=A:j.to>A);(S||(S=[])).push(new GD(q,j.from,Q?null:j.to))}}return S}function vwt(h,A,D){var S;if(h)for(var R=0;R<h.length;++R){var j=h[R],q=j.marker;if(j.to==null||(q.inclusiveRight?j.to>=A:j.to>A)||j.from==A&&q.type=="bookmark"&&(!D||j.marker.insertLeft)){var Q=j.from==null||(q.inclusiveLeft?j.from<=A:j.from<A);(S||(S=[])).push(new GD(q,Q?null:j.from-A,j.to==null?null:j.to-A))}}return S}function gX(h,A){if(A.full)return null;var D=pe(h,A.from.line)&&Ct(h,A.from.line).markedSpans,S=pe(h,A.to.line)&&Ct(h,A.to.line).markedSpans;if(!D&&!S)return null;var R=A.from.ch,j=A.to.ch,q=Ze(A.from,A.to)==0,Q=hwt(D,R,q),re=vwt(S,j,q),ae=A.text.length==1,Se=Ce(A.text).length+(ae?R:0);if(Q)for(var De=0;De<Q.length;++De){var Ue=Q[De];if(Ue.to==null){var Ge=XA(re,Ue.marker);Ge?ae&&(Ue.to=Ge.to==null?null:Ge.to+Se):Ue.to=R}}if(re)for(var at=0;at<re.length;++at){var yt=re[at];yt.to!=null&&(yt.to+=Se),yt.from==null?XA(Q,yt.marker)||(yt.from=Se,ae&&(Q||(Q=[])).push(yt)):(yt.from+=Se,ae&&(Q||(Q=[])).push(yt))}Q&&(Q=WSe(Q)),re&&re!=Q&&(re=WSe(re));var Ot=[Q];if(!ae){var Yt,Jt=A.text.length-2;if(Jt>0&&Q)for(var It=0;It<Q.length;++It)Q[It].to==null&&(Yt||(Yt=[])).push(new GD(Q[It].marker,null,null));for(var tn=0;tn<Jt;++tn)Ot.push(Yt);Ot.push(re)}return Ot}function WSe(h){for(var A=0;A<h.length;++A){var D=h[A];D.from!=null&&D.from==D.to&&D.marker.clearWhenEmpty!==!1&&h.splice(A--,1)}return h.length?h:null}function mwt(h,A,D){var S=null;if(h.iter(A.line,D.line+1,function(Ge){if(Ge.markedSpans)for(var at=0;at<Ge.markedSpans.length;++at){var yt=Ge.markedSpans[at].marker;yt.readOnly&&(!S||ne(S,yt)==-1)&&(S||(S=[])).push(yt)}}),!S)return null;for(var R=[{from:A,to:D}],j=0;j<S.length;++j)for(var q=S[j],Q=q.find(0),re=0;re<R.length;++re){var ae=R[re];if(!(Ze(ae.to,Q.from)<0||Ze(ae.from,Q.to)>0)){var Se=[re,1],De=Ze(ae.from,Q.from),Ue=Ze(ae.to,Q.to);(De<0||!q.inclusiveLeft&&!De)&&Se.push({from:ae.from,to:Q.from}),(Ue>0||!q.inclusiveRight&&!Ue)&&Se.push({from:Q.to,to:ae.to}),R.splice.apply(R,Se),re+=Se.length-3}}return R}function GSe(h){var A=h.markedSpans;if(A){for(var D=0;D<A.length;++D)A[D].marker.detachLine(h);h.markedSpans=null}}function qSe(h,A){if(A){for(var D=0;D<A.length;++D)A[D].marker.attachLine(h);h.markedSpans=A}}function qD(h){return h.inclusiveLeft?-1:0}function KD(h){return h.inclusiveRight?1:0}function yX(h,A){var D=h.lines.length-A.lines.length;if(D!=0)return D;var S=h.find(),R=A.find(),j=Ze(S.from,R.from)||qD(h)-qD(A);return j?-j:Ze(S.to,R.to)||KD(h)-KD(A)||A.id-h.id}function KSe(h,A){var D,S=Cf&&h.markedSpans;if(S)for(var R=void 0,j=0;j<S.length;++j)(R=S[j]).marker.collapsed&&(A?R.from:R.to)==null&&(!D||yX(D,R.marker)<0)&&(D=R.marker);return D}function YSe(h){return KSe(h,!0)}function YD(h){return KSe(h,!1)}function gwt(h,A){var D,S=Cf&&h.markedSpans;if(S)for(var R=0;R<S.length;++R){var j=S[R];j.marker.collapsed&&(j.from==null||j.from<A)&&(j.to==null||j.to>A)&&(!D||yX(D,j.marker)<0)&&(D=j.marker)}return D}function XSe(h,A,D,S,R){var j=Ct(h,A),q=Cf&&j.markedSpans;if(q)for(var Q=0;Q<q.length;++Q){var re=q[Q];if(re.marker.collapsed){var ae=re.marker.find(0),Se=Ze(ae.from,D)||qD(re.marker)-qD(R),De=Ze(ae.to,S)||KD(re.marker)-KD(R);if(!(Se>=0&&De<=0||Se<=0&&De>=0)&&(Se<=0&&(re.marker.inclusiveRight&&R.inclusiveLeft?Ze(ae.to,D)>=0:Ze(ae.to,D)>0)||Se>=0&&(re.marker.inclusiveRight&&R.inclusiveLeft?Ze(ae.from,S)<=0:Ze(ae.from,S)<0)))return!0}}}function uc(h){for(var A;A=YSe(h);)h=A.find(-1,!0).line;return h}function ywt(h){for(var A;A=YD(h);)h=A.find(1,!0).line;return h}function bwt(h){for(var A,D;A=YD(h);)h=A.find(1,!0).line,(D||(D=[])).push(h);return D}function bX(h,A){var D=Ct(h,A),S=uc(D);return D==S?A:cr(S)}function QSe(h,A){if(A>h.lastLine())return A;var D,S=Ct(h,A);if(!r0(h,S))return A;for(;D=YD(S);)S=D.find(1,!0).line;return cr(S)+1}function r0(h,A){var D=Cf&&A.markedSpans;if(D){for(var S=void 0,R=0;R<D.length;++R)if((S=D[R]).marker.collapsed&&(S.from==null||!S.marker.widgetNode&&S.from==0&&S.marker.inclusiveLeft&&AX(h,A,S)))return!0}}function AX(h,A,D){if(D.to==null){var S=D.marker.find(1,!0);return AX(h,S.line,XA(S.line.markedSpans,D.marker))}if(D.marker.inclusiveRight&&D.to==A.text.length)return!0;for(var R=void 0,j=0;j<A.markedSpans.length;++j)if((R=A.markedSpans[j]).marker.collapsed&&!R.marker.widgetNode&&R.from==D.to&&(R.to==null||R.to!=D.from)&&(R.marker.inclusiveLeft||D.marker.inclusiveRight)&&AX(h,A,R))return!0}function Sf(h){for(var A=0,D=(h=uc(h)).parent,S=0;S<D.lines.length;++S){var R=D.lines[S];if(R==h)break;A+=R.height}for(var j=D.parent;j;j=(D=j).parent)for(var q=0;q<j.children.length;++q){var Q=j.children[q];if(Q==D)break;A+=Q.height}return A}function XD(h){if(h.height==0)return 0;for(var A,D=h.text.length,S=h;A=YSe(S);){var R=A.find(0,!0);S=R.from.line,D+=R.from.ch-R.to.ch}for(S=h;A=YD(S);){var j=A.find(0,!0);D-=S.text.length-j.from.ch,D+=(S=j.to.line).text.length-j.to.ch}return D}function wX(h){var A=h.display,D=h.doc;A.maxLine=Ct(D,D.first),A.maxLineLength=XD(A.maxLine),A.maxLineChanged=!0,D.iter(function(S){var R=XD(S);R>A.maxLineLength&&(A.maxLineLength=R,A.maxLine=S)})}var rb=function(h,A,D){this.text=h,qSe(this,A),this.height=D?D(this):1};function Awt(h,A,D,S){h.text=A,h.stateAfter&&(h.stateAfter=null),h.styles&&(h.styles=null),h.order!=null&&(h.order=null),GSe(h),qSe(h,D);var R=S?S(h):1;R!=h.height&&jr(h,R)}function wwt(h){h.parent=null,GSe(h)}rb.prototype.lineNo=function(){return cr(this)},rn(rb);var xwt={},_wt={};function JSe(h,A){if(!h||/^\s*$/.test(h))return null;var D=A.addModeClass?_wt:xwt;return D[h]||(D[h]=h.replace(/\S+/g,"cm-$&"))}function ZSe(h,A){var D=P("span",null,null,s?"padding-right: .1px":null),S={pre:P("pre",[D],"CodeMirror-line"),content:D,col:0,pos:0,cm:h,trailingSpace:!1,splitSpaces:h.getOption("lineWrapping")};A.measure={};for(var R=0;R<=(A.rest?A.rest.length:0);R++){var j=R?A.rest[R-1]:A.line,q=void 0;S.pos=0,S.addToken=Cwt,pl(h.display.measure)&&(q=me(j,h.doc.direction))&&(S.addToken=kwt(S.addToken,q)),S.map=[],Dwt(j,S,nb(h,j,A!=h.display.externalMeasured&&cr(j))),j.styleClasses&&(j.styleClasses.bgClass&&(S.bgClass=U(j.styleClasses.bgClass,S.bgClass||"")),j.styleClasses.textClass&&(S.textClass=U(j.styleClasses.textClass,S.textClass||""))),S.map.length==0&&S.map.push(0,0,S.content.appendChild(Ao(h.display.measure))),R==0?(A.measure.map=S.map,A.measure.cache={}):((A.measure.maps||(A.measure.maps=[])).push(S.map),(A.measure.caches||(A.measure.caches=[])).push({}))}if(s){var Q=S.content.lastChild;(/\bcm-tab\b/.test(Q.className)||Q.querySelector&&Q.querySelector(".cm-tab"))&&(S.content.className="cm-tab-wrap-hack")}return vt(h,"renderLine",h,A.line,S.pre),S.pre.className&&(S.textClass=U(S.pre.className,S.textClass||"")),S}function Ewt(h){var A=B("span","\u2022","cm-invalidchar");return A.title="\\u"+h.charCodeAt(0).toString(16),A.setAttribute("aria-label",A.title),A}function Cwt(h,A,D,S,R,j,q){if(A){var Q,re=h.splitSpaces?Swt(A,h.trailingSpace):A,ae=h.cm.state.specialChars,Se=!1;if(ae.test(A)){Q=document.createDocumentFragment();for(var De=0;;){ae.lastIndex=De;var Ue=ae.exec(A),Ge=Ue?Ue.index-De:A.length-De;if(Ge){var at=document.createTextNode(re.slice(De,De+Ge));a&&l<9?Q.appendChild(B("span",[at])):Q.appendChild(at),h.map.push(h.pos,h.pos+Ge,at),h.col+=Ge,h.pos+=Ge}if(!Ue)break;De+=Ge+1;var yt=void 0;if(Ue[0]==" "){var Ot=h.cm.options.tabSize,Yt=Ot-h.col%Ot;(yt=Q.appendChild(B("span",Ae(Yt),"cm-tab"))).setAttribute("role","presentation"),yt.setAttribute("cm-text"," "),h.col+=Yt}else Ue[0]=="\r"||Ue[0]==`
| `?((yt=Q.appendChild(B("span",Ue[0]=="\r"?"\u240D":"\u2424","cm-invalidchar"))).setAttribute("cm-text",Ue[0]),h.col+=1):((yt=h.cm.options.specialCharPlaceholder(Ue[0])).setAttribute("cm-text",Ue[0]),a&&l<9?Q.appendChild(B("span",[yt])):Q.appendChild(yt),h.col+=1);h.map.push(h.pos,h.pos+1,yt),h.pos++}}else h.col+=A.length,Q=document.createTextNode(re),h.map.push(h.pos,h.pos+A.length,Q),a&&l<9&&(Se=!0),h.pos+=A.length;if(h.trailingSpace=re.charCodeAt(A.length-1)==32,D||S||R||Se||j||q){var Jt=D||"";S&&(Jt+=S),R&&(Jt+=R);var It=B("span",[Q],Jt,j);if(q)for(var tn in q)q.hasOwnProperty(tn)&&tn!="style"&&tn!="class"&&It.setAttribute(tn,q[tn]);return h.content.appendChild(It)}h.content.appendChild(Q)}}function Swt(h,A){if(h.length>1&&!/ /.test(h))return h;for(var D=A,S="",R=0;R<h.length;R++){var j=h.charAt(R);j==" "&&D&&(R==h.length-1||h.charCodeAt(R+1)==32)&&(j="\xA0"),S+=j,D=j==" "}return S}function kwt(h,A){return function(D,S,R,j,q,Q,re){R=R?R+" cm-force-border":"cm-force-border";for(var ae=D.pos,Se=ae+S.length;;){for(var De=void 0,Ue=0;Ue<A.length&&!((De=A[Ue]).to>ae&&De.from<=ae);Ue++);if(De.to>=Se)return h(D,S,R,j,q,Q,re);h(D,S.slice(0,De.to-ae),R,j,null,Q,re),j=null,S=S.slice(De.to-ae),ae=De.to}}}function eke(h,A,D,S){var R=!S&&D.widgetNode;R&&h.map.push(h.pos,h.pos+A,R),!S&&h.cm.display.input.needsContentAttribute&&(R||(R=h.content.appendChild(document.createElement("span"))),R.setAttribute("cm-marker",D.id)),R&&(h.cm.display.input.setUneditable(R),h.content.appendChild(R)),h.pos+=A,h.trailingSpace=!1}function Dwt(h,A,D){var S=h.markedSpans,R=h.text,j=0;if(S)for(var q,Q,re,ae,Se,De,Ue,Ge=R.length,at=0,yt=1,Ot="",Yt=0;;){if(Yt==at){re=ae=Se=Q="",Ue=null,De=null,Yt=1/0;for(var Jt=[],It=void 0,tn=0;tn<S.length;++tn){var en=S[tn],fn=en.marker;if(fn.type=="bookmark"&&en.from==at&&fn.widgetNode)Jt.push(fn);else if(en.from<=at&&(en.to==null||en.to>at||fn.collapsed&&en.to==at&&en.from==at)){if(en.to!=null&&en.to!=at&&Yt>en.to&&(Yt=en.to,ae=""),fn.className&&(re+=" "+fn.className),fn.css&&(Q=(Q?Q+";":"")+fn.css),fn.startStyle&&en.from==at&&(Se+=" "+fn.startStyle),fn.endStyle&&en.to==Yt&&(It||(It=[])).push(fn.endStyle,en.to),fn.title&&((Ue||(Ue={})).title=fn.title),fn.attributes)for(var ro in fn.attributes)(Ue||(Ue={}))[ro]=fn.attributes[ro];fn.collapsed&&(!De||yX(De.marker,fn)<0)&&(De=en)}else en.from>at&&Yt>en.from&&(Yt=en.from)}if(It)for(var Zr=0;Zr<It.length;Zr+=2)It[Zr+1]==Yt&&(ae+=" "+It[Zr]);if(!De||De.from==at)for(var Ql=0;Ql<Jt.length;++Ql)eke(A,0,Jt[Ql]);if(De&&(De.from||0)==at){if(eke(A,(De.to==null?Ge+1:De.to)-at,De.marker,De.from==null),De.to==null)return;De.to==at&&(De=!1)}}if(at>=Ge)break;for(var ho=Math.min(Ge,Yt);;){if(Ot){var Cu=at+Ot.length;if(!De){var Jl=Cu>ho?Ot.slice(0,ho-at):Ot;A.addToken(A,Jl,q?q+re:re,Se,at+Jl.length==Yt?ae:"",Q,Ue)}if(Cu>=ho){Ot=Ot.slice(ho-at),at=ho;break}at=Cu,Se=""}Ot=R.slice(j,j=D[yt++]),q=JSe(D[yt++],A.cm.options)}}else for(var Bo=1;Bo<D.length;Bo+=2)A.addToken(A,R.slice(j,j=D[Bo]),JSe(D[Bo+1],A.cm.options))}function tke(h,A,D){this.line=A,this.rest=bwt(A),this.size=this.rest?cr(Ce(this.rest))-D+1:1,this.node=this.text=null,this.hidden=r0(h,A)}function QD(h,A,D){for(var S,R=[],j=A;j<D;j=S){var q=new tke(h.doc,Ct(h.doc,j),j);S=j+q.size,R.push(q)}return R}var ob=null;function Owt(h){ob?ob.ops.push(h):h.ownsGroup=ob={ops:[h],delayedCallbacks:[]}}function Twt(h){var A=h.delayedCallbacks,D=0;do{for(;D<A.length;D++)A[D].call(null);for(var S=0;S<h.ops.length;S++){var R=h.ops[S];if(R.cursorActivityHandlers)for(;R.cursorActivityCalled<R.cursorActivityHandlers.length;)R.cursorActivityHandlers[R.cursorActivityCalled++].call(null,R.cm)}}while(D<A.length)}function Mwt(h,A){var D=h.ownsGroup;if(D)try{Twt(D)}finally{ob=null,A(D)}}var QA=null;function Vi(h,A){var D=ht(h,A);if(D.length){var S,R=Array.prototype.slice.call(arguments,2);ob?S=ob.delayedCallbacks:QA?S=QA:(S=QA=[],setTimeout(Nwt,0));for(var j=function(Q){S.push(function(){return D[Q].apply(null,R)})},q=0;q<D.length;++q)j(q)}}function Nwt(){var h=QA;QA=null;for(var A=0;A<h.length;++A)h[A]()}function nke(h,A,D,S){for(var R=0;R<A.changes.length;R++){var j=A.changes[R];j=="text"?Rwt(h,A):j=="gutter"?oke(h,A,D,S):j=="class"?xX(h,A):j=="widget"&&Iwt(h,A,S)}A.changes=null}function JA(h){return h.node==h.text&&(h.node=B("div",null,null,"position: relative"),h.text.parentNode&&h.text.parentNode.replaceChild(h.node,h.text),h.node.appendChild(h.text),a&&l<8&&(h.node.style.zIndex=2)),h.node}function Fwt(h,A){var D=A.bgClass?A.bgClass+" "+(A.line.bgClass||""):A.line.bgClass;if(D&&(D+=" CodeMirror-linebackground"),A.background)D?A.background.className=D:(A.background.parentNode.removeChild(A.background),A.background=null);else if(D){var S=JA(A);A.background=S.insertBefore(B("div",null,D),S.firstChild),h.display.input.setUneditable(A.background)}}function rke(h,A){var D=h.display.externalMeasured;return D&&D.line==A.line?(h.display.externalMeasured=null,A.measure=D.measure,D.built):ZSe(h,A)}function Rwt(h,A){var D=A.text.className,S=rke(h,A);A.text==A.node&&(A.node=S.pre),A.text.parentNode.replaceChild(S.pre,A.text),A.text=S.pre,S.bgClass!=A.bgClass||S.textClass!=A.textClass?(A.bgClass=S.bgClass,A.textClass=S.textClass,xX(h,A)):D&&(A.text.className=D)}function xX(h,A){Fwt(h,A),A.line.wrapClass?JA(A).className=A.line.wrapClass:A.node!=A.text&&(A.node.className="");var D=A.textClass?A.textClass+" "+(A.line.textClass||""):A.line.textClass;A.text.className=D||""}function oke(h,A,D,S){if(A.gutter&&(A.node.removeChild(A.gutter),A.gutter=null),A.gutterBackground&&(A.node.removeChild(A.gutterBackground),A.gutterBackground=null),A.line.gutterClass){var R=JA(A);A.gutterBackground=B("div",null,"CodeMirror-gutter-background "+A.line.gutterClass,"left: "+(h.options.fixedGutter?S.fixedPos:-S.gutterTotalWidth)+"px; width: "+S.gutterTotalWidth+"px"),h.display.input.setUneditable(A.gutterBackground),R.insertBefore(A.gutterBackground,A.text)}var j=A.line.gutterMarkers;if(h.options.lineNumbers||j){var q=JA(A),Q=A.gutter=B("div",null,"CodeMirror-gutter-wrapper","left: "+(h.options.fixedGutter?S.fixedPos:-S.gutterTotalWidth)+"px");if(Q.setAttribute("aria-hidden","true"),h.display.input.setUneditable(Q),q.insertBefore(Q,A.text),A.line.gutterClass&&(Q.className+=" "+A.line.gutterClass),h.options.lineNumbers&&(!j||!j["CodeMirror-linenumbers"])&&(A.lineNumber=Q.appendChild(B("div",xe(h.options,D),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+S.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+h.display.lineNumInnerWidth+"px"))),j)for(var re=0;re<h.display.gutterSpecs.length;++re){var ae=h.display.gutterSpecs[re].className,Se=j.hasOwnProperty(ae)&&j[ae];Se&&Q.appendChild(B("div",[Se],"CodeMirror-gutter-elt","left: "+S.gutterLeft[ae]+"px; width: "+S.gutterWidth[ae]+"px"))}}}function Iwt(h,A,D){A.alignable&&(A.alignable=null);for(var S=k("CodeMirror-linewidget"),R=A.node.firstChild,j=void 0;R;R=j)j=R.nextSibling,S.test(R.className)&&A.node.removeChild(R);ike(h,A,D)}function Bwt(h,A,D,S){var R=rke(h,A);return A.text=A.node=R.pre,R.bgClass&&(A.bgClass=R.bgClass),R.textClass&&(A.textClass=R.textClass),xX(h,A),oke(h,A,D,S),ike(h,A,S),A.node}function ike(h,A,D){if(ake(h,A.line,A,D,!0),A.rest)for(var S=0;S<A.rest.length;S++)ake(h,A.rest[S],A,D,!1)}function ake(h,A,D,S,R){if(A.widgets)for(var j=JA(D),q=0,Q=A.widgets;q<Q.length;++q){var re=Q[q],ae=B("div",[re.node],"CodeMirror-linewidget"+(re.className?" "+re.className:""));re.handleMouseEvents||ae.setAttribute("cm-ignore-events","true"),Pwt(re,ae,D,S),h.display.input.setUneditable(ae),R&&re.above?j.insertBefore(ae,D.gutter||D.text):j.appendChild(ae),Vi(re,"redraw")}}function Pwt(h,A,D,S){if(h.noHScroll){(D.alignable||(D.alignable=[])).push(A);var R=S.wrapperWidth;A.style.left=S.fixedPos+"px",h.coverGutter||(R-=S.gutterTotalWidth,A.style.paddingLeft=S.gutterTotalWidth+"px"),A.style.width=R+"px"}h.coverGutter&&(A.style.zIndex=5,A.style.position="relative",h.noHScroll||(A.style.marginLeft=-S.gutterTotalWidth+"px"))}function ZA(h){if(h.height!=null)return h.height;var A=h.doc.cm;if(!A)return 0;if(!V(document.body,h.node)){var D="position: relative;";h.coverGutter&&(D+="margin-left: -"+A.display.gutters.offsetWidth+"px;"),h.noHScroll&&(D+="width: "+A.display.wrapper.clientWidth+"px;"),N(A.display.measure,B("div",[h.node],null,D))}return h.height=h.node.parentNode.offsetHeight}function kf(h,A){for(var D=_n(A);D!=h.wrapper;D=D.parentNode)if(!D||D.nodeType==1&&D.getAttribute("cm-ignore-events")=="true"||D.parentNode==h.sizer&&D!=h.mover)return!0}function JD(h){return h.lineSpace.offsetTop}function _X(h){return h.mover.offsetHeight-h.lineSpace.offsetHeight}function lke(h){if(h.cachedPaddingH)return h.cachedPaddingH;var A=N(h.measure,B("pre","x","CodeMirror-line-like")),D=window.getComputedStyle?window.getComputedStyle(A):A.currentStyle,S={left:parseInt(D.paddingLeft),right:parseInt(D.paddingRight)};return!isNaN(S.left)&&!isNaN(S.right)&&(h.cachedPaddingH=S),S}function bd(h){return se-h.display.nativeBarWidth}function am(h){return h.display.scroller.clientWidth-bd(h)-h.display.barWidth}function EX(h){return h.display.scroller.clientHeight-bd(h)-h.display.barHeight}function Lwt(h,A,D){var S=h.options.lineWrapping,R=S&&am(h);if(!A.measure.heights||S&&A.measure.width!=R){var j=A.measure.heights=[];if(S){A.measure.width=R;for(var q=A.text.firstChild.getClientRects(),Q=0;Q<q.length-1;Q++){var re=q[Q],ae=q[Q+1];Math.abs(re.bottom-ae.bottom)>2&&j.push((re.bottom+ae.top)/2-D.top)}}j.push(D.bottom-D.top)}}function ske(h,A,D){if(h.line==A)return{map:h.measure.map,cache:h.measure.cache};if(h.rest){for(var S=0;S<h.rest.length;S++)if(h.rest[S]==A)return{map:h.measure.maps[S],cache:h.measure.caches[S]};for(var R=0;R<h.rest.length;R++)if(cr(h.rest[R])>D)return{map:h.measure.maps[R],cache:h.measure.caches[R],before:!0}}}function jwt(h,A){var D=cr(A=uc(A)),S=h.display.externalMeasured=new tke(h.doc,A,D);S.lineN=D;var R=S.built=ZSe(h,S);return S.text=R.pre,N(h.display.lineMeasure,R.pre),S}function uke(h,A,D,S){return Ad(h,ib(h,A),D,S)}function CX(h,A){if(A>=h.display.viewFrom&&A<h.display.viewTo)return h.display.view[um(h,A)];var D=h.display.externalMeasured;return D&&A>=D.lineN&&A<D.lineN+D.size?D:void 0}function ib(h,A){var D=cr(A),S=CX(h,D);S&&!S.text?S=null:S&&S.changes&&(nke(h,S,D,TX(h)),h.curOp.forceUpdate=!0),S||(S=jwt(h,A));var R=ske(S,A,D);return{line:A,view:S,rect:null,map:R.map,cache:R.cache,before:R.before,hasHeights:!1}}function Ad(h,A,D,S,R){A.before&&(D=-1);var j,q=D+(S||"");return A.cache.hasOwnProperty(q)?j=A.cache[q]:(A.rect||(A.rect=A.view.text.getBoundingClientRect()),A.hasHeights||(Lwt(h,A.view,A.rect),A.hasHeights=!0),(j=zwt(h,A,D,S)).bogus||(A.cache[q]=j)),{left:j.left,right:j.right,top:R?j.rtop:j.top,bottom:R?j.rbottom:j.bottom}}var lm,cke={left:0,right:0,top:0,bottom:0};function dke(h,A,D){for(var S,R,j,q,Q,re,ae=0;ae<h.length;ae+=3)if(Q=h[ae],re=h[ae+1],A<Q?(R=0,j=1,q="left"):A<re?j=1+(R=A-Q):(ae==h.length-3||A==re&&h[ae+3]>A)&&(R=(j=re-Q)-1,A>=re&&(q="right")),R!=null){if(S=h[ae+2],Q==re&&D==(S.insertLeft?"left":"right")&&(q=D),D=="left"&&R==0)for(;ae&&h[ae-2]==h[ae-3]&&h[ae-1].insertLeft;)S=h[2+(ae-=3)],q="left";if(D=="right"&&R==re-Q)for(;ae<h.length-3&&h[ae+3]==h[ae+4]&&!h[ae+5].insertLeft;)S=h[(ae+=3)+2],q="right";break}return{node:S,start:R,end:j,collapse:q,coverStart:Q,coverEnd:re}}function Vwt(h,A){var D=cke;if(A=="left")for(var S=0;S<h.length&&(D=h[S]).left==D.right;S++);else for(var R=h.length-1;R>=0&&(D=h[R]).left==D.right;R--);return D}function zwt(h,A,D,S){var R,j=dke(A.map,D,S),q=j.node,Q=j.start,re=j.end,ae=j.collapse;if(q.nodeType==3){for(var Se=0;Se<4;Se++){for(;Q&&Ve(A.line.text.charAt(j.coverStart+Q));)--Q;for(;j.coverStart+re<j.coverEnd&&Ve(A.line.text.charAt(j.coverStart+re));)++re;if((R=a&&l<9&&Q==0&&re==j.coverEnd-j.coverStart?q.parentNode.getBoundingClientRect():Vwt(I(q,Q,re).getClientRects(),S)).left||R.right||Q==0)break;re=Q,Q-=1,ae="right"}a&&l<11&&(R=Hwt(h.display.measure,R))}else{var De;Q>0&&(ae=S="right"),R=h.options.lineWrapping&&(De=q.getClientRects()).length>1?De[S=="right"?De.length-1:0]:q.getBoundingClientRect()}if(a&&l<9&&!Q&&(!R||!R.left&&!R.right)){var Ue=q.parentNode.getClientRects()[0];R=Ue?{left:Ue.left,right:Ue.left+lb(h.display),top:Ue.top,bottom:Ue.bottom}:cke}for(var Ge=R.top-A.rect.top,at=R.bottom-A.rect.top,yt=(Ge+at)/2,Ot=A.view.measure.heights,Yt=0;Yt<Ot.length-1&&!(yt<Ot[Yt]);Yt++);var Jt=Yt?Ot[Yt-1]:0,It=Ot[Yt],tn={left:(ae=="right"?R.right:R.left)-A.rect.left,right:(ae=="left"?R.left:R.right)-A.rect.left,top:Jt,bottom:It};return!R.left&&!R.right&&(tn.bogus=!0),h.options.singleCursorHeightPerLine||(tn.rtop=Ge,tn.rbottom=at),tn}function Hwt(h,A){if(!window.screen||screen.logicalXDPI==null||screen.logicalXDPI==screen.deviceXDPI||!lt(h))return A;var D=screen.logicalXDPI/screen.deviceXDPI,S=screen.logicalYDPI/screen.deviceYDPI;return{left:A.left*D,right:A.right*D,top:A.top*S,bottom:A.bottom*S}}function fke(h){if(h.measure&&(h.measure.cache={},h.measure.heights=null,h.rest))for(var A=0;A<h.rest.length;A++)h.measure.caches[A]={}}function pke(h){h.display.externalMeasure=null,F(h.display.lineMeasure);for(var A=0;A<h.display.view.length;A++)fke(h.display.view[A])}function ew(h){pke(h),h.display.cachedCharWidth=h.display.cachedTextHeight=h.display.cachedPaddingH=null,h.options.lineWrapping||(h.display.maxLineChanged=!0),h.display.lineNumChars=null}function hke(h){return c&&b?-(h.body.getBoundingClientRect().left-parseInt(getComputedStyle(h.body).marginLeft)):h.defaultView.pageXOffset||(h.documentElement||h.body).scrollLeft}function vke(h){return c&&b?-(h.body.getBoundingClientRect().top-parseInt(getComputedStyle(h.body).marginTop)):h.defaultView.pageYOffset||(h.documentElement||h.body).scrollTop}function SX(h){var A=uc(h).widgets,D=0;if(A)for(var S=0;S<A.length;++S)A[S].above&&(D+=ZA(A[S]));return D}function ZD(h,A,D,S,R){if(!R){var j=SX(A);D.top+=j,D.bottom+=j}if(S=="line")return D;S||(S="local");var q=Sf(A);if(S=="local"?q+=JD(h.display):q-=h.display.viewOffset,S=="page"||S=="window"){var Q=h.display.lineSpace.getBoundingClientRect();q+=Q.top+(S=="window"?0:vke(z(h)));var re=Q.left+(S=="window"?0:hke(z(h)));D.left+=re,D.right+=re}return D.top+=q,D.bottom+=q,D}function mke(h,A,D){if(D=="div")return A;var S=A.left,R=A.top;if(D=="page")S-=hke(z(h)),R-=vke(z(h));else if(D=="local"||!D){var j=h.display.sizer.getBoundingClientRect();S+=j.left,R+=j.top}var q=h.display.lineSpace.getBoundingClientRect();return{left:S-q.left,top:R-q.top}}function eO(h,A,D,S,R){return S||(S=Ct(h.doc,A.line)),ZD(h,S,uke(h,S,A.ch,R),D)}function cc(h,A,D,S,R,j){function q(at,yt){var Ot=Ad(h,R,at,yt?"right":"left",j);return yt?Ot.left=Ot.right:Ot.right=Ot.left,ZD(h,S,Ot,D)}S=S||Ct(h.doc,A.line),R||(R=ib(h,S));var Q=me(S,h.doc.direction),re=A.ch,ae=A.sticky;if(re>=S.text.length?(re=S.text.length,ae="before"):re<=0&&(re=0,ae="after"),!Q)return q(ae=="before"?re-1:re,ae=="before");function Se(at,yt,Ot){return q(Ot?at-1:at,Q[yt].level==1!=Ot)}var De=we(Q,re,ae),Ue=je,Ge=Se(re,De,ae=="before");return Ue!=null&&(Ge.other=Se(re,Ue,ae!="before")),Ge}function gke(h,A){var D=0;A=gn(h.doc,A),h.options.lineWrapping||(D=lb(h.display)*A.ch);var S=Ct(h.doc,A.line),R=Sf(S)+JD(h.display);return{left:D,right:D,top:R,bottom:R+S.height}}function kX(h,A,D,S,R){var j=Ee(h,A,D);return j.xRel=R,S&&(j.outside=S),j}function DX(h,A,D){var S=h.doc;if((D+=h.display.viewOffset)<0)return kX(S.first,0,null,-1,-1);var R=Ha(S,D),j=S.first+S.size-1;if(R>j)return kX(S.first+S.size-1,Ct(S,j).text.length,null,1,1);A<0&&(A=0);for(var q=Ct(S,R);;){var Q=$wt(h,q,R,A,D),re=gwt(q,Q.ch+(Q.xRel>0||Q.outside>0?1:0));if(!re)return Q;var ae=re.find(1);if(ae.line==R)return ae;q=Ct(S,R=ae.line)}}function yke(h,A,D,S){S-=SX(A);var R=A.text.length,j=dt(function(q){return Ad(h,D,q-1).bottom<=S},R,0);return R=dt(function(q){return Ad(h,D,q).top>S},j,R),{begin:j,end:R}}function bke(h,A,D,S){return D||(D=ib(h,A)),yke(h,A,D,ZD(h,A,Ad(h,D,S),"line").top)}function OX(h,A,D,S){return!(h.bottom<=D)&&(h.top>D||(S?h.left:h.right)>A)}function $wt(h,A,D,S,R){R-=Sf(A);var j=ib(h,A),q=SX(A),Q=0,re=A.text.length,ae=!0,Se=me(A,h.doc.direction);if(Se){var De=(h.options.lineWrapping?Wwt:Uwt)(h,A,D,j,Se,S,R);Q=(ae=De.level!=1)?De.from:De.to-1,re=ae?De.to:De.from-1}var Ue,Ge,at=null,yt=null,Ot=dt(function(en){var fn=Ad(h,j,en);return fn.top+=q,fn.bottom+=q,!!OX(fn,S,R,!1)&&(fn.top<=R&&fn.left<=S&&(at=en,yt=fn),!0)},Q,re),Yt=!1;if(yt){var Jt=S-yt.left<yt.right-S,It=Jt==ae;Ot=at+(It?0:1),Ge=It?"after":"before",Ue=Jt?yt.left:yt.right}else{!ae&&(Ot==re||Ot==Q)&&Ot++,Ge=Ot==0?"after":Ot==A.text.length?"before":Ad(h,j,Ot-(ae?1:0)).bottom+q<=R==ae?"after":"before";var tn=cc(h,Ee(D,Ot,Ge),"line",A,j);Ue=tn.left,Yt=R<tn.top?-1:R>=tn.bottom?1:0}return kX(D,Ot=it(A.text,Ot,1),Ge,Yt,S-Ue)}function Uwt(h,A,D,S,R,j,q){var Q=dt(function(De){var Ue=R[De],Ge=Ue.level!=1;return OX(cc(h,Ee(D,Ge?Ue.to:Ue.from,Ge?"before":"after"),"line",A,S),j,q,!0)},0,R.length-1),re=R[Q];if(Q>0){var ae=re.level!=1,Se=cc(h,Ee(D,ae?re.from:re.to,ae?"after":"before"),"line",A,S);OX(Se,j,q,!0)&&Se.top>q&&(re=R[Q-1])}return re}function Wwt(h,A,D,S,R,j,q){var Q=yke(h,A,S,q),re=Q.begin,ae=Q.end;/\s/.test(A.text.charAt(ae-1))&&ae--;for(var Se=null,De=null,Ue=0;Ue<R.length;Ue++){var Ge=R[Ue];if(!(Ge.from>=ae||Ge.to<=re)){var at=Ad(h,S,Ge.level!=1?Math.min(ae,Ge.to)-1:Math.max(re,Ge.from)).right,yt=at<j?j-at+1e9:at-j;(!Se||De>yt)&&(Se=Ge,De=yt)}}return Se||(Se=R[R.length-1]),Se.from<re&&(Se={from:re,to:Se.to,level:Se.level}),Se.to>ae&&(Se={from:Se.from,to:ae,level:Se.level}),Se}function ab(h){if(h.cachedTextHeight!=null)return h.cachedTextHeight;if(lm==null){lm=B("pre",null,"CodeMirror-line-like");for(var A=0;A<49;++A)lm.appendChild(document.createTextNode("x")),lm.appendChild(B("br"));lm.appendChild(document.createTextNode("x"))}N(h.measure,lm);var D=lm.offsetHeight/50;return D>3&&(h.cachedTextHeight=D),F(h.measure),D||1}function lb(h){if(h.cachedCharWidth!=null)return h.cachedCharWidth;var A=B("span","xxxxxxxxxx"),D=B("pre",[A],"CodeMirror-line-like");N(h.measure,D);var S=A.getBoundingClientRect(),R=(S.right-S.left)/10;return R>2&&(h.cachedCharWidth=R),R||10}function TX(h){for(var A=h.display,D={},S={},R=A.gutters.clientLeft,j=A.gutters.firstChild,q=0;j;j=j.nextSibling,++q){var Q=h.display.gutterSpecs[q].className;D[Q]=j.offsetLeft+j.clientLeft+R,S[Q]=j.clientWidth}return{fixedPos:MX(A),gutterTotalWidth:A.gutters.offsetWidth,gutterLeft:D,gutterWidth:S,wrapperWidth:A.wrapper.clientWidth}}function MX(h){return h.scroller.getBoundingClientRect().left-h.sizer.getBoundingClientRect().left}function Ake(h){var A=ab(h.display),D=h.options.lineWrapping,S=D&&Math.max(5,h.display.scroller.clientWidth/lb(h.display)-3);return function(R){if(r0(h.doc,R))return 0;var j=0;if(R.widgets)for(var q=0;q<R.widgets.length;q++)R.widgets[q].height&&(j+=R.widgets[q].height);return D?j+(Math.ceil(R.text.length/S)||1)*A:j+A}}function NX(h){var A=h.doc,D=Ake(h);A.iter(function(S){var R=D(S);R!=S.height&&jr(S,R)})}function sm(h,A,D,S){var R=h.display;if(!D&&_n(A).getAttribute("cm-not-content")=="true")return null;var j,q,Q=R.lineSpace.getBoundingClientRect();try{j=A.clientX-Q.left,q=A.clientY-Q.top}catch{return null}var re,ae=DX(h,j,q);if(S&&ae.xRel>0&&(re=Ct(h.doc,ae.line).text).length==ae.ch){var Se=X(re,re.length,h.options.tabSize)-re.length;ae=Ee(ae.line,Math.max(0,Math.round((j-lke(h.display).left)/lb(h.display))-Se))}return ae}function um(h,A){if(A>=h.display.viewTo||(A-=h.display.viewFrom)<0)return null;for(var D=h.display.view,S=0;S<D.length;S++)if((A-=D[S].size)<0)return S}function hl(h,A,D,S){A==null&&(A=h.doc.first),D==null&&(D=h.doc.first+h.doc.size),S||(S=0);var R=h.display;if(S&&D<R.viewTo&&(R.updateLineNumbers==null||R.updateLineNumbers>A)&&(R.updateLineNumbers=A),h.curOp.viewChanged=!0,A>=R.viewTo)Cf&&bX(h.doc,A)<R.viewTo&&i0(h);else if(D<=R.viewFrom)Cf&&QSe(h.doc,D+S)>R.viewFrom?i0(h):(R.viewFrom+=S,R.viewTo+=S);else if(A<=R.viewFrom&&D>=R.viewTo)i0(h);else if(A<=R.viewFrom){var j=tO(h,D,D+S,1);j?(R.view=R.view.slice(j.index),R.viewFrom=j.lineN,R.viewTo+=S):i0(h)}else if(D>=R.viewTo){var q=tO(h,A,A,-1);q?(R.view=R.view.slice(0,q.index),R.viewTo=q.lineN):i0(h)}else{var Q=tO(h,A,A,-1),re=tO(h,D,D+S,1);Q&&re?(R.view=R.view.slice(0,Q.index).concat(QD(h,Q.lineN,re.lineN)).concat(R.view.slice(re.index)),R.viewTo+=S):i0(h)}var ae=R.externalMeasured;ae&&(D<ae.lineN?ae.lineN+=S:A<ae.lineN+ae.size&&(R.externalMeasured=null))}function o0(h,A,D){h.curOp.viewChanged=!0;var S=h.display,R=h.display.externalMeasured;if(R&&A>=R.lineN&&A<R.lineN+R.size&&(S.externalMeasured=null),!(A<S.viewFrom||A>=S.viewTo)){var j=S.view[um(h,A)];if(j.node!=null){var q=j.changes||(j.changes=[]);ne(q,D)==-1&&q.push(D)}}}function i0(h){h.display.viewFrom=h.display.viewTo=h.doc.first,h.display.view=[],h.display.viewOffset=0}function tO(h,A,D,S){var R,j=um(h,A),q=h.display.view;if(!Cf||D==h.doc.first+h.doc.size)return{index:j,lineN:D};for(var Q=h.display.viewFrom,re=0;re<j;re++)Q+=q[re].size;if(Q!=A){if(S>0){if(j==q.length-1)return null;R=Q+q[j].size-A,j++}else R=Q-A;A+=R,D+=R}for(;bX(h.doc,D)!=D;){if(j==(S<0?0:q.length-1))return null;D+=S*q[j-(S<0?1:0)].size,j+=S}return{index:j,lineN:D}}function Gwt(h,A,D){var S=h.display;S.view.length==0||A>=S.viewTo||D<=S.viewFrom?(S.view=QD(h,A,D),S.viewFrom=A):(S.viewFrom>A?S.view=QD(h,A,S.viewFrom).concat(S.view):S.viewFrom<A&&(S.view=S.view.slice(um(h,A))),S.viewFrom=A,S.viewTo<D?S.view=S.view.concat(QD(h,S.viewTo,D)):S.viewTo>D&&(S.view=S.view.slice(0,um(h,D)))),S.viewTo=D}function wke(h){for(var A=h.display.view,D=0,S=0;S<A.length;S++){var R=A[S];!R.hidden&&(!R.node||R.changes)&&++D}return D}function tw(h){h.display.input.showSelection(h.display.input.prepareSelection())}function xke(h,A){A===void 0&&(A=!0);var D=h.doc,S={},R=S.cursors=document.createDocumentFragment(),j=S.selection=document.createDocumentFragment(),q=h.options.$customCursor;q&&(A=!0);for(var Q=0;Q<D.sel.ranges.length;Q++)if(A||Q!=D.sel.primIndex){var re=D.sel.ranges[Q];if(!(re.from().line>=h.display.viewTo||re.to().line<h.display.viewFrom)){var ae=re.empty();if(q){var Se=q(h,re);Se&&FX(h,Se,R)}else(ae||h.options.showCursorWhenSelecting)&&FX(h,re.head,R);ae||qwt(h,re,j)}}return S}function FX(h,A,D){var S=cc(h,A,"div",null,null,!h.options.singleCursorHeightPerLine),R=D.appendChild(B("div","\xA0","CodeMirror-cursor"));if(R.style.left=S.left+"px",R.style.top=S.top+"px",R.style.height=Math.max(0,S.bottom-S.top)*h.options.cursorHeight+"px",/\bcm-fat-cursor\b/.test(h.getWrapperElement().className)){var j=eO(h,A,"div",null,null),q=j.right-j.left;R.style.width=(q>0?q:h.defaultCharWidth())+"px"}if(S.other){var Q=D.appendChild(B("div","\xA0","CodeMirror-cursor CodeMirror-secondarycursor"));Q.style.display="",Q.style.left=S.other.left+"px",Q.style.top=S.other.top+"px",Q.style.height=.85*(S.other.bottom-S.other.top)+"px"}}function nO(h,A){return h.top-A.top||h.left-A.left}function qwt(h,A,D){var S=h.display,R=h.doc,j=document.createDocumentFragment(),q=lke(h.display),Q=q.left,re=Math.max(S.sizerWidth,am(h)-S.sizer.offsetLeft)-q.right,ae=R.direction=="ltr";function Se(It,tn,en,fn){tn<0&&(tn=0),tn=Math.round(tn),fn=Math.round(fn),j.appendChild(B("div",null,"CodeMirror-selected","position: absolute; left: "+It+`px;
| top: `+tn+"px; width: "+(en??re-It)+`px;
| height: `+(fn-tn)+"px"))}function De(It,tn,en){var fn,ro,Zr=Ct(R,It),Ql=Zr.text.length;function ho(Bo,ml){return eO(h,Ee(It,Bo),"div",Zr,ml)}function Cu(Bo,ml,Ua){var si=bke(h,Zr,null,Bo),Ko=ml=="ltr"==(Ua=="after")?"left":"right";return ho(Ua=="after"?si.begin:si.end-(/\s/.test(Zr.text.charAt(si.end-1))?2:1),Ko)[Ko]}var Jl=me(Zr,R.direction);return ot(Jl,tn||0,en??Ql,function(Bo,ml,Ua,si){var Ko=Ua=="ltr",ui=ho(Bo,Ko?"left":"right"),gl=ho(ml-1,Ko?"right":"left"),d0=tn==null&&Bo==0,pc=en==null&&ml==Ql,Ca=si==0,ci=!Jl||si==Jl.length-1;if(gl.top-ui.top<=3){var iQ=(ae?pc:d0)&&ci,Tf=(ae?d0:pc)&&Ca?Q:(Ko?ui:gl).left,hm=iQ?re:(Ko?gl:ui).right;Se(Tf,ui.top,hm-Tf,ui.bottom)}else{var vm,Wa,Ab,aQ;Ko?(vm=ae&&d0&&Ca?Q:ui.left,Wa=ae?re:Cu(Bo,Ua,"before"),Ab=ae?Q:Cu(ml,Ua,"after"),aQ=ae&&pc&&ci?re:gl.right):(vm=ae?Cu(Bo,Ua,"before"):Q,Wa=!ae&&d0&&Ca?re:ui.right,Ab=!ae&&pc&&ci?Q:gl.left,aQ=ae?Cu(ml,Ua,"after"):re),Se(vm,ui.top,Wa-vm,ui.bottom),ui.bottom<gl.top&&Se(Q,ui.bottom,null,gl.top),Se(Ab,gl.top,aQ-Ab,gl.bottom)}(!fn||nO(ui,fn)<0)&&(fn=ui),nO(gl,fn)<0&&(fn=gl),(!ro||nO(ui,ro)<0)&&(ro=ui),nO(gl,ro)<0&&(ro=gl)}),{start:fn,end:ro}}var Ue=A.from(),Ge=A.to();if(Ue.line==Ge.line)De(Ue.line,Ue.ch,Ge.ch);else{var at=Ct(R,Ue.line),yt=Ct(R,Ge.line),Ot=uc(at)==uc(yt),Yt=De(Ue.line,Ue.ch,Ot?at.text.length+1:null).end,Jt=De(Ge.line,Ot?0:null,Ge.ch).start;Ot&&(Yt.top<Jt.top-2?(Se(Yt.right,Yt.top,null,Yt.bottom),Se(Q,Jt.top,Jt.left,Jt.bottom)):Se(Yt.right,Yt.top,Jt.left-Yt.right,Yt.bottom)),Yt.bottom<Jt.top&&Se(Q,Yt.bottom,null,Jt.top)}D.appendChild(j)}function RX(h){if(h.state.focused){var A=h.display;clearInterval(A.blinker);var D=!0;A.cursorDiv.style.visibility="",h.options.cursorBlinkRate>0?A.blinker=setInterval(function(){h.hasFocus()||sb(h),A.cursorDiv.style.visibility=(D=!D)?"":"hidden"},h.options.cursorBlinkRate):h.options.cursorBlinkRate<0&&(A.cursorDiv.style.visibility="hidden")}}function _ke(h){h.hasFocus()||(h.display.input.focus(),h.state.focused||BX(h))}function IX(h){h.state.delayingBlurEvent=!0,setTimeout(function(){h.state.delayingBlurEvent&&(h.state.delayingBlurEvent=!1,h.state.focused&&sb(h))},100)}function BX(h,A){h.state.delayingBlurEvent&&!h.state.draggingText&&(h.state.delayingBlurEvent=!1),h.options.readOnly!="nocursor"&&(h.state.focused||(vt(h,"focus",h,A),h.state.focused=!0,H(h.display.wrapper,"CodeMirror-focused"),!h.curOp&&h.display.selForContextMenu!=h.doc.sel&&(h.display.input.reset(),s&&setTimeout(function(){return h.display.input.reset(!0)},20)),h.display.input.receivedFocus()),RX(h))}function sb(h,A){h.state.delayingBlurEvent||(h.state.focused&&(vt(h,"blur",h,A),h.state.focused=!1,O(h.display.wrapper,"CodeMirror-focused")),clearInterval(h.display.blinker),setTimeout(function(){h.state.focused||(h.display.shift=!1)},150))}function rO(h){for(var A=h.display,D=A.lineDiv.offsetTop,S=Math.max(0,A.scroller.getBoundingClientRect().top),R=A.lineDiv.getBoundingClientRect().top,j=0,q=0;q<A.view.length;q++){var Q=A.view[q],re=h.options.lineWrapping,ae=void 0,Se=0;if(!Q.hidden){if(R+=Q.line.height,a&&l<8){var De=Q.node.offsetTop+Q.node.offsetHeight;ae=De-D,D=De}else{var Ue=Q.node.getBoundingClientRect();ae=Ue.bottom-Ue.top,!re&&Q.text.firstChild&&(Se=Q.text.firstChild.getBoundingClientRect().right-Ue.left-1)}var Ge=Q.line.height-ae;if((Ge>.005||Ge<-.005)&&(R<S&&(j-=Ge),jr(Q.line,ae),Eke(Q.line),Q.rest))for(var at=0;at<Q.rest.length;at++)Eke(Q.rest[at]);if(Se>h.display.sizerWidth){var yt=Math.ceil(Se/lb(h.display));yt>h.display.maxLineLength&&(h.display.maxLineLength=yt,h.display.maxLine=Q.line,h.display.maxLineChanged=!0)}}}Math.abs(j)>2&&(A.scroller.scrollTop+=j)}function Eke(h){if(h.widgets)for(var A=0;A<h.widgets.length;++A){var D=h.widgets[A],S=D.node.parentNode;S&&(D.height=S.offsetHeight)}}function oO(h,A,D){var S=D&&D.top!=null?Math.max(0,D.top):h.scroller.scrollTop;S=Math.floor(S-JD(h));var R=D&&D.bottom!=null?D.bottom:S+h.wrapper.clientHeight,j=Ha(A,S),q=Ha(A,R);if(D&&D.ensure){var Q=D.ensure.from.line,re=D.ensure.to.line;Q<j?(j=Q,q=Ha(A,Sf(Ct(A,Q))+h.wrapper.clientHeight)):Math.min(re,A.lastLine())>=q&&(j=Ha(A,Sf(Ct(A,re))-h.wrapper.clientHeight),q=re)}return{from:j,to:Math.max(q,j+1)}}function Kwt(h,A){if(!qt(h,"scrollCursorIntoView")){var D=h.display,S=D.sizer.getBoundingClientRect(),R=null,j=D.wrapper.ownerDocument;if(A.top+S.top<0?R=!0:A.bottom+S.top>(j.defaultView.innerHeight||j.documentElement.clientHeight)&&(R=!1),R!=null&&!v){var q=B("div","\u200B",null,`position: absolute;
| top: `+(A.top-D.viewOffset-JD(h.display))+`px;
| height: `+(A.bottom-A.top+bd(h)+D.barHeight)+`px;
| left: `+A.left+"px; width: "+Math.max(2,A.right-A.left)+"px;");h.display.lineSpace.appendChild(q),q.scrollIntoView(R),h.display.lineSpace.removeChild(q)}}}function Ywt(h,A,D,S){var R;S==null&&(S=0),!h.options.lineWrapping&&A==D&&(D=A.sticky=="before"?Ee(A.line,A.ch+1,"before"):A,A=A.ch?Ee(A.line,A.sticky=="before"?A.ch-1:A.ch,"after"):A);for(var j=0;j<5;j++){var q=!1,Q=cc(h,A),re=D&&D!=A?cc(h,D):Q,ae=PX(h,R={left:Math.min(Q.left,re.left),top:Math.min(Q.top,re.top)-S,right:Math.max(Q.left,re.left),bottom:Math.max(Q.bottom,re.bottom)+S}),Se=h.doc.scrollTop,De=h.doc.scrollLeft;if(ae.scrollTop!=null&&(rw(h,ae.scrollTop),Math.abs(h.doc.scrollTop-Se)>1&&(q=!0)),ae.scrollLeft!=null&&(cm(h,ae.scrollLeft),Math.abs(h.doc.scrollLeft-De)>1&&(q=!0)),!q)break}return R}function Xwt(h,A){var D=PX(h,A);D.scrollTop!=null&&rw(h,D.scrollTop),D.scrollLeft!=null&&cm(h,D.scrollLeft)}function PX(h,A){var D=h.display,S=ab(h.display);A.top<0&&(A.top=0);var R=h.curOp&&h.curOp.scrollTop!=null?h.curOp.scrollTop:D.scroller.scrollTop,j=EX(h),q={};A.bottom-A.top>j&&(A.bottom=A.top+j);var Q=h.doc.height+_X(D),re=A.top<S,ae=A.bottom>Q-S;if(A.top<R)q.scrollTop=re?0:A.top;else if(A.bottom>R+j){var Se=Math.min(A.top,(ae?Q:A.bottom)-j);Se!=R&&(q.scrollTop=Se)}var De=h.options.fixedGutter?0:D.gutters.offsetWidth,Ue=h.curOp&&h.curOp.scrollLeft!=null?h.curOp.scrollLeft:D.scroller.scrollLeft-De,Ge=am(h)-D.gutters.offsetWidth,at=A.right-A.left>Ge;return at&&(A.right=A.left+Ge),A.left<10?q.scrollLeft=0:A.left<Ue?q.scrollLeft=Math.max(0,A.left+De-(at?0:10)):A.right>Ge+Ue-3&&(q.scrollLeft=A.right+(at?0:10)-Ge),q}function LX(h,A){A!=null&&(iO(h),h.curOp.scrollTop=(h.curOp.scrollTop==null?h.doc.scrollTop:h.curOp.scrollTop)+A)}function ub(h){iO(h);var A=h.getCursor();h.curOp.scrollToPos={from:A,to:A,margin:h.options.cursorScrollMargin}}function nw(h,A,D){(A!=null||D!=null)&&iO(h),A!=null&&(h.curOp.scrollLeft=A),D!=null&&(h.curOp.scrollTop=D)}function Qwt(h,A){iO(h),h.curOp.scrollToPos=A}function iO(h){var A=h.curOp.scrollToPos;A&&(h.curOp.scrollToPos=null,Cke(h,gke(h,A.from),gke(h,A.to),A.margin))}function Cke(h,A,D,S){var R=PX(h,{left:Math.min(A.left,D.left),top:Math.min(A.top,D.top)-S,right:Math.max(A.right,D.right),bottom:Math.max(A.bottom,D.bottom)+S});nw(h,R.scrollLeft,R.scrollTop)}function rw(h,A){Math.abs(h.doc.scrollTop-A)<2||(n||VX(h,{top:A}),Ske(h,A,!0),n&&VX(h),aw(h,100))}function Ske(h,A,D){A=Math.max(0,Math.min(h.display.scroller.scrollHeight-h.display.scroller.clientHeight,A)),(h.display.scroller.scrollTop!=A||D)&&(h.doc.scrollTop=A,h.display.scrollbars.setScrollTop(A),h.display.scroller.scrollTop!=A&&(h.display.scroller.scrollTop=A))}function cm(h,A,D,S){A=Math.max(0,Math.min(A,h.display.scroller.scrollWidth-h.display.scroller.clientWidth)),(!(D?A==h.doc.scrollLeft:Math.abs(h.doc.scrollLeft-A)<2)||S)&&(h.doc.scrollLeft=A,Mke(h),h.display.scroller.scrollLeft!=A&&(h.display.scroller.scrollLeft=A),h.display.scrollbars.setScrollLeft(A))}function ow(h){var A=h.display,D=A.gutters.offsetWidth,S=Math.round(h.doc.height+_X(h.display));return{clientHeight:A.scroller.clientHeight,viewHeight:A.wrapper.clientHeight,scrollWidth:A.scroller.scrollWidth,clientWidth:A.scroller.clientWidth,viewWidth:A.wrapper.clientWidth,barLeft:h.options.fixedGutter?D:0,docHeight:S,scrollHeight:S+bd(h)+A.barHeight,nativeBarWidth:A.nativeBarWidth,gutterWidth:D}}var dm=function(h,A,D){this.cm=D;var S=this.vert=B("div",[B("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),R=this.horiz=B("div",[B("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");S.tabIndex=R.tabIndex=-1,h(S),h(R),Ie(S,"scroll",function(){S.clientHeight&&A(S.scrollTop,"vertical")}),Ie(R,"scroll",function(){R.clientWidth&&A(R.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,a&&l<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};dm.prototype.update=function(h){var A=h.scrollWidth>h.clientWidth+1,D=h.scrollHeight>h.clientHeight+1,S=h.nativeBarWidth;if(D){this.vert.style.display="block",this.vert.style.bottom=A?S+"px":"0";var R=h.viewHeight-(A?S:0);this.vert.firstChild.style.height=Math.max(0,h.scrollHeight-h.clientHeight+R)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(A){this.horiz.style.display="block",this.horiz.style.right=D?S+"px":"0",this.horiz.style.left=h.barLeft+"px";var j=h.viewWidth-h.barLeft-(D?S:0);this.horiz.firstChild.style.width=Math.max(0,h.scrollWidth-h.clientWidth+j)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&h.clientHeight>0&&(S==0&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:D?S:0,bottom:A?S:0}},dm.prototype.setScrollLeft=function(h){this.horiz.scrollLeft!=h&&(this.horiz.scrollLeft=h),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},dm.prototype.setScrollTop=function(h){this.vert.scrollTop!=h&&(this.vert.scrollTop=h),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},dm.prototype.zeroWidthHack=function(){var h=w&&!m?"12px":"18px";this.horiz.style.height=this.vert.style.width=h,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new te,this.disableVert=new te},dm.prototype.enableZeroWidthBar=function(h,A,D){function S(){var R=h.getBoundingClientRect();(D=="vert"?document.elementFromPoint(R.right-1,(R.top+R.bottom)/2):document.elementFromPoint((R.right+R.left)/2,R.bottom-1))!=h?h.style.visibility="hidden":A.set(1e3,S)}h.style.visibility="",A.set(1e3,S)},dm.prototype.clear=function(){var h=this.horiz.parentNode;h.removeChild(this.horiz),h.removeChild(this.vert)};var iw=function(){};function cb(h,A){A||(A=ow(h));var D=h.display.barWidth,S=h.display.barHeight;kke(h,A);for(var R=0;R<4&&D!=h.display.barWidth||S!=h.display.barHeight;R++)D!=h.display.barWidth&&h.options.lineWrapping&&rO(h),kke(h,ow(h)),D=h.display.barWidth,S=h.display.barHeight}function kke(h,A){var D=h.display,S=D.scrollbars.update(A);D.sizer.style.paddingRight=(D.barWidth=S.right)+"px",D.sizer.style.paddingBottom=(D.barHeight=S.bottom)+"px",D.heightForcer.style.borderBottom=S.bottom+"px solid transparent",S.right&&S.bottom?(D.scrollbarFiller.style.display="block",D.scrollbarFiller.style.height=S.bottom+"px",D.scrollbarFiller.style.width=S.right+"px"):D.scrollbarFiller.style.display="",S.bottom&&h.options.coverGutterNextToScrollbar&&h.options.fixedGutter?(D.gutterFiller.style.display="block",D.gutterFiller.style.height=S.bottom+"px",D.gutterFiller.style.width=A.gutterWidth+"px"):D.gutterFiller.style.display=""}iw.prototype.update=function(){return{bottom:0,right:0}},iw.prototype.setScrollLeft=function(){},iw.prototype.setScrollTop=function(){},iw.prototype.clear=function(){};var Dke={native:dm,null:iw};function Oke(h){h.display.scrollbars&&(h.display.scrollbars.clear(),h.display.scrollbars.addClass&&O(h.display.wrapper,h.display.scrollbars.addClass)),h.display.scrollbars=new Dke[h.options.scrollbarStyle](function(A){h.display.wrapper.insertBefore(A,h.display.scrollbarFiller),Ie(A,"mousedown",function(){h.state.focused&&setTimeout(function(){return h.display.input.focus()},0)}),A.setAttribute("cm-not-content","true")},function(A,D){D=="horizontal"?cm(h,A):rw(h,A)},h),h.display.scrollbars.addClass&&H(h.display.wrapper,h.display.scrollbars.addClass)}var Jwt=0;function fm(h){h.curOp={cm:h,viewChanged:!1,startHeight:h.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Jwt,markArrays:null},Owt(h.curOp)}function pm(h){var A=h.curOp;A&&Mwt(A,function(D){for(var S=0;S<D.ops.length;S++)D.ops[S].cm.curOp=null;Zwt(D)})}function Zwt(h){for(var A=h.ops,D=0;D<A.length;D++)e7t(A[D]);for(var S=0;S<A.length;S++)t7t(A[S]);for(var R=0;R<A.length;R++)n7t(A[R]);for(var j=0;j<A.length;j++)r7t(A[j]);for(var q=0;q<A.length;q++)o7t(A[q])}function e7t(h){var A=h.cm,D=A.display;a7t(A),h.updateMaxLine&&wX(A),h.mustUpdate=h.viewChanged||h.forceUpdate||h.scrollTop!=null||h.scrollToPos&&(h.scrollToPos.from.line<D.viewFrom||h.scrollToPos.to.line>=D.viewTo)||D.maxLineChanged&&A.options.lineWrapping,h.update=h.mustUpdate&&new aO(A,h.mustUpdate&&{top:h.scrollTop,ensure:h.scrollToPos},h.forceUpdate)}function t7t(h){h.updatedDisplay=h.mustUpdate&&jX(h.cm,h.update)}function n7t(h){var A=h.cm,D=A.display;h.updatedDisplay&&rO(A),h.barMeasure=ow(A),D.maxLineChanged&&!A.options.lineWrapping&&(h.adjustWidthTo=uke(A,D.maxLine,D.maxLine.text.length).left+3,A.display.sizerWidth=h.adjustWidthTo,h.barMeasure.scrollWidth=Math.max(D.scroller.clientWidth,D.sizer.offsetLeft+h.adjustWidthTo+bd(A)+A.display.barWidth),h.maxScrollLeft=Math.max(0,D.sizer.offsetLeft+h.adjustWidthTo-am(A))),(h.updatedDisplay||h.selectionChanged)&&(h.preparedSelection=D.input.prepareSelection())}function r7t(h){var A=h.cm;h.adjustWidthTo!=null&&(A.display.sizer.style.minWidth=h.adjustWidthTo+"px",h.maxScrollLeft<A.doc.scrollLeft&&cm(A,Math.min(A.display.scroller.scrollLeft,h.maxScrollLeft),!0),A.display.maxLineChanged=!1);var D=h.focus&&h.focus==L(z(A));h.preparedSelection&&A.display.input.showSelection(h.preparedSelection,D),(h.updatedDisplay||h.startHeight!=A.doc.height)&&cb(A,h.barMeasure),h.updatedDisplay&&HX(A,h.barMeasure),h.selectionChanged&&RX(A),A.state.focused&&h.updateInput&&A.display.input.reset(h.typing),D&&_ke(h.cm)}function o7t(h){var A=h.cm,D=A.display,S=A.doc;h.updatedDisplay&&Tke(A,h.update),D.wheelStartX!=null&&(h.scrollTop!=null||h.scrollLeft!=null||h.scrollToPos)&&(D.wheelStartX=D.wheelStartY=null),h.scrollTop!=null&&Ske(A,h.scrollTop,h.forceScroll),h.scrollLeft!=null&&cm(A,h.scrollLeft,!0,!0),h.scrollToPos&&Kwt(A,Ywt(A,gn(S,h.scrollToPos.from),gn(S,h.scrollToPos.to),h.scrollToPos.margin));var R=h.maybeHiddenMarkers,j=h.maybeUnhiddenMarkers;if(R)for(var q=0;q<R.length;++q)R[q].lines.length||vt(R[q],"hide");if(j)for(var Q=0;Q<j.length;++Q)j[Q].lines.length&&vt(j[Q],"unhide");D.wrapper.offsetHeight&&(S.scrollTop=A.display.scroller.scrollTop),h.changeObjs&&vt(A,"changes",A,h.changeObjs),h.update&&h.update.finish()}function Xl(h,A){if(h.curOp)return A();fm(h);try{return A()}finally{pm(h)}}function zi(h,A){return function(){if(h.curOp)return A.apply(h,arguments);fm(h);try{return A.apply(h,arguments)}finally{pm(h)}}}function $a(h){return function(){if(this.curOp)return h.apply(this,arguments);fm(this);try{return h.apply(this,arguments)}finally{pm(this)}}}function Hi(h){return function(){var A=this.cm;if(!A||A.curOp)return h.apply(this,arguments);fm(A);try{return h.apply(this,arguments)}finally{pm(A)}}}function aw(h,A){h.doc.highlightFrontier<h.display.viewTo&&h.state.highlight.set(A,W(i7t,h))}function i7t(h){var A=h.doc;if(!(A.highlightFrontier>=h.display.viewTo)){var D=+new Date+h.options.workTime,S=yd(h,A.highlightFrontier),R=[];A.iter(S.line,Math.min(A.first+A.size,h.display.viewTo+500),function(j){if(S.line>=h.display.viewFrom){var q=j.styles,Q=j.text.length>h.options.maxHighlightLength?ut(A.mode,S.state):null,re=om(h,j,S,!0);Q&&(S.state=Q),j.styles=re.styles;var ae=j.styleClasses,Se=re.classes;Se?j.styleClasses=Se:ae&&(j.styleClasses=null);for(var De=!q||q.length!=j.styles.length||ae!=Se&&(!ae||!Se||ae.bgClass!=Se.bgClass||ae.textClass!=Se.textClass),Ue=0;!De&&Ue<q.length;++Ue)De=q[Ue]!=j.styles[Ue];De&&R.push(S.line),j.stateAfter=S.save(),S.nextLine()}else j.text.length<=h.options.maxHighlightLength&&t0(h,j.text,S),j.stateAfter=S.line%5==0?S.save():null,S.nextLine();if(+new Date>D)return aw(h,h.options.workDelay),!0}),A.highlightFrontier=S.line,A.modeFrontier=Math.max(A.modeFrontier,S.line),R.length&&Xl(h,function(){for(var j=0;j<R.length;j++)o0(h,R[j],"text")})}}var aO=function(h,A,D){var S=h.display;this.viewport=A,this.visible=oO(S,h.doc,A),this.editorIsHidden=!S.wrapper.offsetWidth,this.wrapperHeight=S.wrapper.clientHeight,this.wrapperWidth=S.wrapper.clientWidth,this.oldDisplayWidth=am(h),this.force=D,this.dims=TX(h),this.events=[]};function a7t(h){var A=h.display;!A.scrollbarsClipped&&A.scroller.offsetWidth&&(A.nativeBarWidth=A.scroller.offsetWidth-A.scroller.clientWidth,A.heightForcer.style.height=bd(h)+"px",A.sizer.style.marginBottom=-A.nativeBarWidth+"px",A.sizer.style.borderRightWidth=bd(h)+"px",A.scrollbarsClipped=!0)}function l7t(h){if(h.hasFocus())return null;var A=L(z(h));if(!A||!V(h.display.lineDiv,A))return null;var D={activeElt:A};if(window.getSelection){var S=$(h).getSelection();S.anchorNode&&S.extend&&V(h.display.lineDiv,S.anchorNode)&&(D.anchorNode=S.anchorNode,D.anchorOffset=S.anchorOffset,D.focusNode=S.focusNode,D.focusOffset=S.focusOffset)}return D}function s7t(h){if(h&&h.activeElt&&h.activeElt!=L(h.activeElt.ownerDocument)&&(h.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(h.activeElt.nodeName)&&h.anchorNode&&V(document.body,h.anchorNode)&&V(document.body,h.focusNode))){var A=h.activeElt.ownerDocument,D=A.defaultView.getSelection(),S=A.createRange();S.setEnd(h.anchorNode,h.anchorOffset),S.collapse(!1),D.removeAllRanges(),D.addRange(S),D.extend(h.focusNode,h.focusOffset)}}function jX(h,A){var D=h.display,S=h.doc;if(A.editorIsHidden)return i0(h),!1;if(!A.force&&A.visible.from>=D.viewFrom&&A.visible.to<=D.viewTo&&(D.updateLineNumbers==null||D.updateLineNumbers>=D.viewTo)&&D.renderedView==D.view&&wke(h)==0)return!1;Nke(h)&&(i0(h),A.dims=TX(h));var R=S.first+S.size,j=Math.max(A.visible.from-h.options.viewportMargin,S.first),q=Math.min(R,A.visible.to+h.options.viewportMargin);D.viewFrom<j&&j-D.viewFrom<20&&(j=Math.max(S.first,D.viewFrom)),D.viewTo>q&&D.viewTo-q<20&&(q=Math.min(R,D.viewTo)),Cf&&(j=bX(h.doc,j),q=QSe(h.doc,q));var Q=j!=D.viewFrom||q!=D.viewTo||D.lastWrapHeight!=A.wrapperHeight||D.lastWrapWidth!=A.wrapperWidth;Gwt(h,j,q),D.viewOffset=Sf(Ct(h.doc,D.viewFrom)),h.display.mover.style.top=D.viewOffset+"px";var re=wke(h);if(!Q&&re==0&&!A.force&&D.renderedView==D.view&&(D.updateLineNumbers==null||D.updateLineNumbers>=D.viewTo))return!1;var ae=l7t(h);return re>4&&(D.lineDiv.style.display="none"),u7t(h,D.updateLineNumbers,A.dims),re>4&&(D.lineDiv.style.display=""),D.renderedView=D.view,s7t(ae),F(D.cursorDiv),F(D.selectionDiv),D.gutters.style.height=D.sizer.style.minHeight=0,Q&&(D.lastWrapHeight=A.wrapperHeight,D.lastWrapWidth=A.wrapperWidth,aw(h,400)),D.updateLineNumbers=null,!0}function Tke(h,A){for(var D=A.viewport,S=!0;;S=!1){if(S&&h.options.lineWrapping&&A.oldDisplayWidth!=am(h))S&&(A.visible=oO(h.display,h.doc,D));else if(D&&D.top!=null&&(D={top:Math.min(h.doc.height+_X(h.display)-EX(h),D.top)}),A.visible=oO(h.display,h.doc,D),A.visible.from>=h.display.viewFrom&&A.visible.to<=h.display.viewTo)break;if(!jX(h,A))break;rO(h);var R=ow(h);tw(h),cb(h,R),HX(h,R),A.force=!1}A.signal(h,"update",h),(h.display.viewFrom!=h.display.reportedViewFrom||h.display.viewTo!=h.display.reportedViewTo)&&(A.signal(h,"viewportChange",h,h.display.viewFrom,h.display.viewTo),h.display.reportedViewFrom=h.display.viewFrom,h.display.reportedViewTo=h.display.viewTo)}function VX(h,A){var D=new aO(h,A);if(jX(h,D)){rO(h),Tke(h,D);var S=ow(h);tw(h),cb(h,S),HX(h,S),D.finish()}}function u7t(h,A,D){var S=h.display,R=h.options.lineNumbers,j=S.lineDiv,q=j.firstChild;function Q(at){var yt=at.nextSibling;return s&&w&&h.display.currentWheelTarget==at?at.style.display="none":at.parentNode.removeChild(at),yt}for(var re=S.view,ae=S.viewFrom,Se=0;Se<re.length;Se++){var De=re[Se];if(!De.hidden)if(De.node&&De.node.parentNode==j){for(;q!=De.node;)q=Q(q);var Ue=R&&A!=null&&A<=ae&&De.lineNumber;De.changes&&(ne(De.changes,"gutter")>-1&&(Ue=!1),nke(h,De,ae,D)),Ue&&(F(De.lineNumber),De.lineNumber.appendChild(document.createTextNode(xe(h.options,ae)))),q=De.node.nextSibling}else{var Ge=Bwt(h,De,ae,D);j.insertBefore(Ge,q)}ae+=De.size}for(;q;)q=Q(q)}function zX(h){var A=h.gutters.offsetWidth;h.sizer.style.marginLeft=A+"px",Vi(h,"gutterChanged",h)}function HX(h,A){h.display.sizer.style.minHeight=A.docHeight+"px",h.display.heightForcer.style.top=A.docHeight+"px",h.display.gutters.style.height=A.docHeight+h.display.barHeight+bd(h)+"px"}function Mke(h){var A=h.display,D=A.view;if(A.alignWidgets||A.gutters.firstChild&&h.options.fixedGutter){for(var S=MX(A)-A.scroller.scrollLeft+h.doc.scrollLeft,R=A.gutters.offsetWidth,j=S+"px",q=0;q<D.length;q++)if(!D[q].hidden){h.options.fixedGutter&&(D[q].gutter&&(D[q].gutter.style.left=j),D[q].gutterBackground&&(D[q].gutterBackground.style.left=j));var Q=D[q].alignable;if(Q)for(var re=0;re<Q.length;re++)Q[re].style.left=j}h.options.fixedGutter&&(A.gutters.style.left=S+R+"px")}}function Nke(h){if(!h.options.lineNumbers)return!1;var A=h.doc,D=xe(h.options,A.first+A.size-1),S=h.display;if(D.length!=S.lineNumChars){var R=S.measure.appendChild(B("div",[B("div",D)],"CodeMirror-linenumber CodeMirror-gutter-elt")),j=R.firstChild.offsetWidth,q=R.offsetWidth-j;return S.lineGutter.style.width="",S.lineNumInnerWidth=Math.max(j,S.lineGutter.offsetWidth-q)+1,S.lineNumWidth=S.lineNumInnerWidth+q,S.lineNumChars=S.lineNumInnerWidth?D.length:-1,S.lineGutter.style.width=S.lineNumWidth+"px",zX(h.display),!0}return!1}function $X(h,A){for(var D=[],S=!1,R=0;R<h.length;R++){var j=h[R],q=null;if(typeof j!="string"&&(q=j.style,j=j.className),j=="CodeMirror-linenumbers"){if(!A)continue;S=!0}D.push({className:j,style:q})}return A&&!S&&D.push({className:"CodeMirror-linenumbers",style:null}),D}function Fke(h){var A=h.gutters,D=h.gutterSpecs;F(A),h.lineGutter=null;for(var S=0;S<D.length;++S){var R=D[S],j=R.className,q=R.style,Q=A.appendChild(B("div",null,"CodeMirror-gutter "+j));q&&(Q.style.cssText=q),j=="CodeMirror-linenumbers"&&(h.lineGutter=Q,Q.style.width=(h.lineNumWidth||1)+"px")}A.style.display=D.length?"":"none",zX(h)}function lw(h){Fke(h.display),hl(h),Mke(h)}function c7t(h,A,D,S){var R=this;this.input=D,R.scrollbarFiller=B("div",null,"CodeMirror-scrollbar-filler"),R.scrollbarFiller.setAttribute("cm-not-content","true"),R.gutterFiller=B("div",null,"CodeMirror-gutter-filler"),R.gutterFiller.setAttribute("cm-not-content","true"),R.lineDiv=P("div",null,"CodeMirror-code"),R.selectionDiv=B("div",null,null,"position: relative; z-index: 1"),R.cursorDiv=B("div",null,"CodeMirror-cursors"),R.measure=B("div",null,"CodeMirror-measure"),R.lineMeasure=B("div",null,"CodeMirror-measure"),R.lineSpace=P("div",[R.measure,R.lineMeasure,R.selectionDiv,R.cursorDiv,R.lineDiv],null,"position: relative; outline: none");var j=P("div",[R.lineSpace],"CodeMirror-lines");R.mover=B("div",[j],null,"position: relative"),R.sizer=B("div",[R.mover],"CodeMirror-sizer"),R.sizerWidth=null,R.heightForcer=B("div",null,null,"position: absolute; height: "+se+"px; width: 1px;"),R.gutters=B("div",null,"CodeMirror-gutters"),R.lineGutter=null,R.scroller=B("div",[R.sizer,R.heightForcer,R.gutters],"CodeMirror-scroll"),R.scroller.setAttribute("tabIndex","-1"),R.wrapper=B("div",[R.scrollbarFiller,R.gutterFiller,R.scroller],"CodeMirror"),R.wrapper.setAttribute("translate","no"),a&&l<8&&(R.gutters.style.zIndex=-1,R.scroller.style.paddingRight=0),!s&&!(n&&y)&&(R.scroller.draggable=!0),h&&(h.appendChild?h.appendChild(R.wrapper):h(R.wrapper)),R.viewFrom=R.viewTo=A.first,R.reportedViewFrom=R.reportedViewTo=A.first,R.view=[],R.renderedView=null,R.externalMeasured=null,R.viewOffset=0,R.lastWrapHeight=R.lastWrapWidth=0,R.updateLineNumbers=null,R.nativeBarWidth=R.barHeight=R.barWidth=0,R.scrollbarsClipped=!1,R.lineNumWidth=R.lineNumInnerWidth=R.lineNumChars=null,R.alignWidgets=!1,R.cachedCharWidth=R.cachedTextHeight=R.cachedPaddingH=null,R.maxLine=null,R.maxLineLength=0,R.maxLineChanged=!1,R.wheelDX=R.wheelDY=R.wheelStartX=R.wheelStartY=null,R.shift=!1,R.selForContextMenu=null,R.activeTouch=null,R.gutterSpecs=$X(S.gutters,S.lineNumbers),Fke(R),D.init(R)}aO.prototype.signal=function(h,A){Zt(h,A)&&this.events.push(arguments)},aO.prototype.finish=function(){for(var h=0;h<this.events.length;h++)vt.apply(null,this.events[h])};var lO=0,Df=null;function Rke(h){var A=h.wheelDeltaX,D=h.wheelDeltaY;return A==null&&h.detail&&h.axis==h.HORIZONTAL_AXIS&&(A=h.detail),D==null&&h.detail&&h.axis==h.VERTICAL_AXIS?D=h.detail:D==null&&(D=h.wheelDelta),{x:A,y:D}}function d7t(h){var A=Rke(h);return A.x*=Df,A.y*=Df,A}function Ike(h,A){c&&d==102&&(h.display.chromeScrollHack==null?h.display.sizer.style.pointerEvents="none":clearTimeout(h.display.chromeScrollHack),h.display.chromeScrollHack=setTimeout(function(){h.display.chromeScrollHack=null,h.display.sizer.style.pointerEvents=""},100));var D=Rke(A),S=D.x,R=D.y,j=Df;A.deltaMode===0&&(S=A.deltaX,R=A.deltaY,j=1);var q=h.display,Q=q.scroller,re=Q.scrollWidth>Q.clientWidth,ae=Q.scrollHeight>Q.clientHeight;if(S&&re||R&&ae){if(R&&w&&s){e:for(var Se=A.target,De=q.view;Se!=Q;Se=Se.parentNode)for(var Ue=0;Ue<De.length;Ue++)if(De[Ue].node==Se){h.display.currentWheelTarget=Se;break e}}if(S&&!n&&!f&&j!=null)return R&&ae&&rw(h,Math.max(0,Q.scrollTop+R*j)),cm(h,Math.max(0,Q.scrollLeft+S*j)),(!R||R&&ae)&&zn(A),void(q.wheelStartX=null);if(R&&j!=null){var Ge=R*j,at=h.doc.scrollTop,yt=at+q.wrapper.clientHeight;Ge<0?at=Math.max(0,at+Ge-50):yt=Math.min(h.doc.height,yt+Ge+50),VX(h,{top:at,bottom:yt})}lO<20&&A.deltaMode!==0&&(q.wheelStartX==null?(q.wheelStartX=Q.scrollLeft,q.wheelStartY=Q.scrollTop,q.wheelDX=S,q.wheelDY=R,setTimeout(function(){if(q.wheelStartX!=null){var Ot=Q.scrollLeft-q.wheelStartX,Yt=Q.scrollTop-q.wheelStartY,Jt=Yt&&q.wheelDY&&Yt/q.wheelDY||Ot&&q.wheelDX&&Ot/q.wheelDX;q.wheelStartX=q.wheelStartY=null,Jt&&(Df=(Df*lO+Jt)/(lO+1),++lO)}},200)):(q.wheelDX+=S,q.wheelDY+=R))}}a?Df=-.53:n?Df=15:c?Df=-.7:p&&(Df=-.3333333333333333);var js=function(h,A){this.ranges=h,this.primIndex=A};js.prototype.primary=function(){return this.ranges[this.primIndex]},js.prototype.equals=function(h){if(h==this)return!0;if(h.primIndex!=this.primIndex||h.ranges.length!=this.ranges.length)return!1;for(var A=0;A<this.ranges.length;A++){var D=this.ranges[A],S=h.ranges[A];if(!Vt(D.anchor,S.anchor)||!Vt(D.head,S.head))return!1}return!0},js.prototype.deepCopy=function(){for(var h=[],A=0;A<this.ranges.length;A++)h[A]=new Vr(Cn(this.ranges[A].anchor),Cn(this.ranges[A].head));return new js(h,this.primIndex)},js.prototype.somethingSelected=function(){for(var h=0;h<this.ranges.length;h++)if(!this.ranges[h].empty())return!0;return!1},js.prototype.contains=function(h,A){A||(A=h);for(var D=0;D<this.ranges.length;D++){var S=this.ranges[D];if(Ze(A,S.from())>=0&&Ze(h,S.to())<=0)return D}return-1};var Vr=function(h,A){this.anchor=h,this.head=A};function dc(h,A,D){var S=h&&h.options.selectionsMayTouch,R=A[D];A.sort(function(Ue,Ge){return Ze(Ue.from(),Ge.from())}),D=ne(A,R);for(var j=1;j<A.length;j++){var q=A[j],Q=A[j-1],re=Ze(Q.to(),q.from());if(S&&!q.empty()?re>0:re>=0){var ae=Ln(Q.from(),q.from()),Se=on(Q.to(),q.to()),De=Q.empty()?q.from()==q.head:Q.from()==Q.head;j<=D&&--D,A.splice(--j,2,new Vr(De?Se:ae,De?ae:Se))}}return new js(A,D)}function a0(h,A){return new js([new Vr(h,A||h)],0)}function l0(h){return h.text?Ee(h.from.line+h.text.length-1,Ce(h.text).length+(h.text.length==1?h.from.ch:0)):h.to}function Bke(h,A){if(Ze(h,A.from)<0)return h;if(Ze(h,A.to)<=0)return l0(A);var D=h.line+A.text.length-(A.to.line-A.from.line)-1,S=h.ch;return h.line==A.to.line&&(S+=l0(A).ch-A.to.ch),Ee(D,S)}function UX(h,A){for(var D=[],S=0;S<h.sel.ranges.length;S++){var R=h.sel.ranges[S];D.push(new Vr(Bke(R.anchor,A),Bke(R.head,A)))}return dc(h.cm,D,h.sel.primIndex)}function Pke(h,A,D){return h.line==A.line?Ee(D.line,h.ch-A.ch+D.ch):Ee(D.line+(h.line-A.line),h.ch)}function f7t(h,A,D){for(var S=[],R=Ee(h.first,0),j=R,q=0;q<A.length;q++){var Q=A[q],re=Pke(Q.from,R,j),ae=Pke(l0(Q),R,j);if(R=Q.to,j=ae,D=="around"){var Se=h.sel.ranges[q],De=Ze(Se.head,Se.anchor)<0;S[q]=new Vr(De?ae:re,De?re:ae)}else S[q]=new Vr(re,re)}return new js(S,h.sel.primIndex)}function WX(h){h.doc.mode=Tt(h.options,h.doc.modeOption),sw(h)}function sw(h){h.doc.iter(function(A){A.stateAfter&&(A.stateAfter=null),A.styles&&(A.styles=null)}),h.doc.modeFrontier=h.doc.highlightFrontier=h.doc.first,aw(h,100),h.state.modeGen++,h.curOp&&hl(h)}function Lke(h,A){return A.from.ch==0&&A.to.ch==0&&Ce(A.text)==""&&(!h.cm||h.cm.options.wholeLineUpdateBefore)}function GX(h,A,D,S){function R(Jt){return D?D[Jt]:null}function j(Jt,It,tn){Awt(Jt,It,tn,S),Vi(Jt,"change",Jt,A)}function q(Jt,It){for(var tn=[],en=Jt;en<It;++en)tn.push(new rb(ae[en],R(en),S));return tn}var Q=A.from,re=A.to,ae=A.text,Se=Ct(h,Q.line),De=Ct(h,re.line),Ue=Ce(ae),Ge=R(ae.length-1),at=re.line-Q.line;if(A.full)h.insert(0,q(0,ae.length)),h.remove(ae.length,h.size-ae.length);else if(Lke(h,A)){var yt=q(0,ae.length-1);j(De,De.text,Ge),at&&h.remove(Q.line,at),yt.length&&h.insert(Q.line,yt)}else if(Se==De)if(ae.length==1)j(Se,Se.text.slice(0,Q.ch)+Ue+Se.text.slice(re.ch),Ge);else{var Ot=q(1,ae.length-1);Ot.push(new rb(Ue+Se.text.slice(re.ch),Ge,S)),j(Se,Se.text.slice(0,Q.ch)+ae[0],R(0)),h.insert(Q.line+1,Ot)}else if(ae.length==1)j(Se,Se.text.slice(0,Q.ch)+ae[0]+De.text.slice(re.ch),R(0)),h.remove(Q.line+1,at);else{j(Se,Se.text.slice(0,Q.ch)+ae[0],R(0)),j(De,Ue+De.text.slice(re.ch),Ge);var Yt=q(1,ae.length-1);at>1&&h.remove(Q.line+1,at-1),h.insert(Q.line+1,Yt)}Vi(h,"change",h,A)}function s0(h,A,D){function S(R,j,q){if(R.linked)for(var Q=0;Q<R.linked.length;++Q){var re=R.linked[Q];if(re.doc!=j){var ae=q&&re.sharedHist;D&&!ae||(A(re.doc,ae),S(re.doc,R,ae))}}}S(h,null,!0)}function jke(h,A){if(A.cm)throw new Error("This document is already in use.");h.doc=A,A.cm=h,NX(h),WX(h),Vke(h),h.options.direction=A.direction,h.options.lineWrapping||wX(h),h.options.mode=A.modeOption,hl(h)}function Vke(h){(h.doc.direction=="rtl"?H:O)(h.display.lineDiv,"CodeMirror-rtl")}function p7t(h){Xl(h,function(){Vke(h),hl(h)})}function sO(h){this.done=[],this.undone=[],this.undoDepth=h?h.undoDepth:1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=h?h.maxGeneration:1}function qX(h,A){var D={from:Cn(A.from),to:l0(A),text:Fn(h,A.from,A.to)};return $ke(h,D,A.from.line,A.to.line+1),s0(h,function(S){return $ke(S,D,A.from.line,A.to.line+1)},!0),D}function zke(h){for(;h.length&&Ce(h).ranges;)h.pop()}function h7t(h,A){return A?(zke(h.done),Ce(h.done)):h.done.length&&!Ce(h.done).ranges?Ce(h.done):h.done.length>1&&!h.done[h.done.length-2].ranges?(h.done.pop(),Ce(h.done)):void 0}function Hke(h,A,D,S){var R=h.history;R.undone.length=0;var j,q,Q=+new Date;if((R.lastOp==S||R.lastOrigin==A.origin&&A.origin&&(A.origin.charAt(0)=="+"&&R.lastModTime>Q-(h.cm?h.cm.options.historyEventDelay:500)||A.origin.charAt(0)=="*"))&&(j=h7t(R,R.lastOp==S)))q=Ce(j.changes),Ze(A.from,A.to)==0&&Ze(A.from,q.to)==0?q.to=l0(A):j.changes.push(qX(h,A));else{var re=Ce(R.done);for((!re||!re.ranges)&&uO(h.sel,R.done),j={changes:[qX(h,A)],generation:R.generation},R.done.push(j);R.done.length>R.undoDepth;)R.done.shift(),R.done[0].ranges||R.done.shift()}R.done.push(D),R.generation=++R.maxGeneration,R.lastModTime=R.lastSelTime=Q,R.lastOp=R.lastSelOp=S,R.lastOrigin=R.lastSelOrigin=A.origin,q||vt(h,"historyAdded")}function v7t(h,A,D,S){var R=A.charAt(0);return R=="*"||R=="+"&&D.ranges.length==S.ranges.length&&D.somethingSelected()==S.somethingSelected()&&new Date-h.history.lastSelTime<=(h.cm?h.cm.options.historyEventDelay:500)}function m7t(h,A,D,S){var R=h.history,j=S&&S.origin;D==R.lastSelOp||j&&R.lastSelOrigin==j&&(R.lastModTime==R.lastSelTime&&R.lastOrigin==j||v7t(h,j,Ce(R.done),A))?R.done[R.done.length-1]=A:uO(A,R.done),R.lastSelTime=+new Date,R.lastSelOrigin=j,R.lastSelOp=D,S&&S.clearRedo!==!1&&zke(R.undone)}function uO(h,A){var D=Ce(A);D&&D.ranges&&D.equals(h)||A.push(h)}function $ke(h,A,D,S){var R=A["spans_"+h.id],j=0;h.iter(Math.max(h.first,D),Math.min(h.first+h.size,S),function(q){q.markedSpans&&((R||(R=A["spans_"+h.id]={}))[j]=q.markedSpans),++j})}function g7t(h){if(!h)return null;for(var A,D=0;D<h.length;++D)h[D].marker.explicitlyCleared?A||(A=h.slice(0,D)):A&&A.push(h[D]);return A?A.length?A:null:h}function y7t(h,A){var D=A["spans_"+h.id];if(!D)return null;for(var S=[],R=0;R<A.text.length;++R)S.push(g7t(D[R]));return S}function Uke(h,A){var D=y7t(h,A),S=gX(h,A);if(!D)return S;if(!S)return D;for(var R=0;R<D.length;++R){var j=D[R],q=S[R];if(j&&q)e:for(var Q=0;Q<q.length;++Q){for(var re=q[Q],ae=0;ae<j.length;++ae)if(j[ae].marker==re.marker)continue e;j.push(re)}else q&&(D[R]=q)}return D}function db(h,A,D){for(var S=[],R=0;R<h.length;++R){var j=h[R];if(j.ranges)S.push(D?js.prototype.deepCopy.call(j):j);else{var q=j.changes,Q=[];S.push({changes:Q});for(var re=0;re<q.length;++re){var ae=q[re],Se=void 0;if(Q.push({from:ae.from,to:ae.to,text:ae.text}),A)for(var De in ae)(Se=De.match(/^spans_(\d+)$/))&&ne(A,Number(Se[1]))>-1&&(Ce(Q)[De]=ae[De],delete ae[De])}}}return S}function KX(h,A,D,S){if(S){var R=h.anchor;if(D){var j=Ze(A,R)<0;j!=Ze(D,R)<0?(R=A,A=D):j!=Ze(A,D)<0&&(A=D)}return new Vr(R,A)}return new Vr(D||A,A)}function cO(h,A,D,S,R){R==null&&(R=h.cm&&(h.cm.display.shift||h.extend)),Ea(h,new js([KX(h.sel.primary(),A,D,R)],0),S)}function Wke(h,A,D){for(var S=[],R=h.cm&&(h.cm.display.shift||h.extend),j=0;j<h.sel.ranges.length;j++)S[j]=KX(h.sel.ranges[j],A[j],null,R);Ea(h,dc(h.cm,S,h.sel.primIndex),D)}function YX(h,A,D,S){var R=h.sel.ranges.slice(0);R[A]=D,Ea(h,dc(h.cm,R,h.sel.primIndex),S)}function Gke(h,A,D,S){Ea(h,a0(A,D),S)}function b7t(h,A,D){var S={ranges:A.ranges,update:function(R){this.ranges=[];for(var j=0;j<R.length;j++)this.ranges[j]=new Vr(gn(h,R[j].anchor),gn(h,R[j].head))},origin:D&&D.origin};return vt(h,"beforeSelectionChange",h,S),h.cm&&vt(h.cm,"beforeSelectionChange",h.cm,S),S.ranges!=A.ranges?dc(h.cm,S.ranges,S.ranges.length-1):A}function qke(h,A,D){var S=h.history.done,R=Ce(S);R&&R.ranges?(S[S.length-1]=A,dO(h,A,D)):Ea(h,A,D)}function Ea(h,A,D){dO(h,A,D),m7t(h,h.sel,h.cm?h.cm.curOp.id:NaN,D)}function dO(h,A,D){(Zt(h,"beforeSelectionChange")||h.cm&&Zt(h.cm,"beforeSelectionChange"))&&(A=b7t(h,A,D));var S=D&&D.bias||(Ze(A.primary().head,h.sel.primary().head)<0?-1:1);Kke(h,Xke(h,A,S,!0)),(!D||D.scroll!==!1)&&h.cm&&h.cm.getOption("readOnly")!="nocursor"&&ub(h.cm)}function Kke(h,A){A.equals(h.sel)||(h.sel=A,h.cm&&(h.cm.curOp.updateInput=1,h.cm.curOp.selectionChanged=!0,mn(h.cm)),Vi(h,"cursorActivity",h))}function Yke(h){Kke(h,Xke(h,h.sel,null,!1))}function Xke(h,A,D,S){for(var R,j=0;j<A.ranges.length;j++){var q=A.ranges[j],Q=A.ranges.length==h.sel.ranges.length&&h.sel.ranges[j],re=fO(h,q.anchor,Q&&Q.anchor,D,S),ae=q.head==q.anchor?re:fO(h,q.head,Q&&Q.head,D,S);(R||re!=q.anchor||ae!=q.head)&&(R||(R=A.ranges.slice(0,j)),R[j]=new Vr(re,ae))}return R?dc(h.cm,R,A.primIndex):A}function fb(h,A,D,S,R){var j=Ct(h,A.line);if(j.markedSpans)for(var q=0;q<j.markedSpans.length;++q){var Q=j.markedSpans[q],re=Q.marker,ae="selectLeft"in re?!re.selectLeft:re.inclusiveLeft,Se="selectRight"in re?!re.selectRight:re.inclusiveRight;if((Q.from==null||(ae?Q.from<=A.ch:Q.from<A.ch))&&(Q.to==null||(Se?Q.to>=A.ch:Q.to>A.ch))){if(R&&(vt(re,"beforeCursorEnter"),re.explicitlyCleared)){if(j.markedSpans){--q;continue}break}if(!re.atomic)continue;if(D){var De=re.find(S<0?1:-1),Ue=void 0;if((S<0?Se:ae)&&(De=Qke(h,De,-S,De&&De.line==A.line?j:null)),De&&De.line==A.line&&(Ue=Ze(De,D))&&(S<0?Ue<0:Ue>0))return fb(h,De,A,S,R)}var Ge=re.find(S<0?-1:1);return(S<0?ae:Se)&&(Ge=Qke(h,Ge,S,Ge.line==A.line?j:null)),Ge?fb(h,Ge,A,S,R):null}}return A}function fO(h,A,D,S,R){var j=S||1;return fb(h,A,D,j,R)||!R&&fb(h,A,D,j,!0)||fb(h,A,D,-j,R)||!R&&fb(h,A,D,-j,!0)||(h.cantEdit=!0,Ee(h.first,0))}function Qke(h,A,D,S){return D<0&&A.ch==0?A.line>h.first?gn(h,Ee(A.line-1)):null:D>0&&A.ch==(S||Ct(h,A.line)).text.length?A.line<h.first+h.size-1?Ee(A.line+1,0):null:new Ee(A.line,A.ch+D)}function Jke(h){h.setSelection(Ee(h.firstLine(),0),Ee(h.lastLine()),J)}function Zke(h,A,D){var S={canceled:!1,from:A.from,to:A.to,text:A.text,origin:A.origin,cancel:function(){return S.canceled=!0}};return D&&(S.update=function(R,j,q,Q){R&&(S.from=gn(h,R)),j&&(S.to=gn(h,j)),q&&(S.text=q),Q!==void 0&&(S.origin=Q)}),vt(h,"beforeChange",h,S),h.cm&&vt(h.cm,"beforeChange",h.cm,S),S.canceled?(h.cm&&(h.cm.curOp.updateInput=2),null):{from:S.from,to:S.to,text:S.text,origin:S.origin}}function pb(h,A,D){if(h.cm){if(!h.cm.curOp)return zi(h.cm,pb)(h,A,D);if(h.cm.state.suppressEdits)return}if(!(Zt(h,"beforeChange")||h.cm&&Zt(h.cm,"beforeChange"))||(A=Zke(h,A,!0))){var S=USe&&!D&&mwt(h,A.from,A.to);if(S)for(var R=S.length-1;R>=0;--R)eDe(h,{from:S[R].from,to:S[R].to,text:R?[""]:A.text,origin:A.origin});else eDe(h,A)}}function eDe(h,A){if(A.text.length!=1||A.text[0]!=""||Ze(A.from,A.to)!=0){var D=UX(h,A);Hke(h,A,D,h.cm?h.cm.curOp.id:NaN),uw(h,A,D,gX(h,A));var S=[];s0(h,function(R,j){!j&&ne(S,R.history)==-1&&(oDe(R.history,A),S.push(R.history)),uw(R,A,null,gX(R,A))})}}function pO(h,A,D){var S=h.cm&&h.cm.state.suppressEdits;if(!S||D){for(var R,j=h.history,q=h.sel,Q=A=="undo"?j.done:j.undone,re=A=="undo"?j.undone:j.done,ae=0;ae<Q.length&&(R=Q[ae],!(D?R.ranges&&!R.equals(h.sel):!R.ranges));ae++);if(ae!=Q.length){for(j.lastOrigin=j.lastSelOrigin=null;;){if(!(R=Q.pop()).ranges){if(S)return void Q.push(R);break}if(uO(R,re),D&&!R.equals(h.sel))return void Ea(h,R,{clearRedo:!1});q=R}var Se=[];uO(q,re),re.push({changes:Se,generation:j.generation}),j.generation=R.generation||++j.maxGeneration;for(var De=Zt(h,"beforeChange")||h.cm&&Zt(h.cm,"beforeChange"),Ue=function(yt){var Ot=R.changes[yt];if(Ot.origin=A,De&&!Zke(h,Ot,!1))return Q.length=0,{};Se.push(qX(h,Ot));var Yt=yt?UX(h,Ot):Ce(Q);uw(h,Ot,Yt,Uke(h,Ot)),!yt&&h.cm&&h.cm.scrollIntoView({from:Ot.from,to:l0(Ot)});var Jt=[];s0(h,function(It,tn){!tn&&ne(Jt,It.history)==-1&&(oDe(It.history,Ot),Jt.push(It.history)),uw(It,Ot,null,Uke(It,Ot))})},Ge=R.changes.length-1;Ge>=0;--Ge){var at=Ue(Ge);if(at)return at.v}}}}function tDe(h,A){if(A!=0&&(h.first+=A,h.sel=new js(_e(h.sel.ranges,function(R){return new Vr(Ee(R.anchor.line+A,R.anchor.ch),Ee(R.head.line+A,R.head.ch))}),h.sel.primIndex),h.cm)){hl(h.cm,h.first,h.first-A,A);for(var D=h.cm.display,S=D.viewFrom;S<D.viewTo;S++)o0(h.cm,S,"gutter")}}function uw(h,A,D,S){if(h.cm&&!h.cm.curOp)return zi(h.cm,uw)(h,A,D,S);if(A.to.line<h.first)tDe(h,A.text.length-1-(A.to.line-A.from.line));else if(!(A.from.line>h.lastLine())){if(A.from.line<h.first){var R=A.text.length-1-(h.first-A.from.line);tDe(h,R),A={from:Ee(h.first,0),to:Ee(A.to.line+R,A.to.ch),text:[Ce(A.text)],origin:A.origin}}var j=h.lastLine();A.to.line>j&&(A={from:A.from,to:Ee(j,Ct(h,j).text.length),text:[A.text[0]],origin:A.origin}),A.removed=Fn(h,A.from,A.to),D||(D=UX(h,A)),h.cm?A7t(h.cm,A,S):GX(h,A,S),dO(h,D,J),h.cantEdit&&fO(h,Ee(h.firstLine(),0))&&(h.cantEdit=!1)}}function A7t(h,A,D){var S=h.doc,R=h.display,j=A.from,q=A.to,Q=!1,re=j.line;h.options.lineWrapping||(re=cr(uc(Ct(S,j.line))),S.iter(re,q.line+1,function(Ge){if(Ge==R.maxLine)return Q=!0,!0})),S.sel.contains(A.from,A.to)>-1&&mn(h),GX(S,A,D,Ake(h)),h.options.lineWrapping||(S.iter(re,j.line+A.text.length,function(Ge){var at=XD(Ge);at>R.maxLineLength&&(R.maxLine=Ge,R.maxLineLength=at,R.maxLineChanged=!0,Q=!1)}),Q&&(h.curOp.updateMaxLine=!0)),uwt(S,j.line),aw(h,400);var ae=A.text.length-(q.line-j.line)-1;A.full?hl(h):j.line!=q.line||A.text.length!=1||Lke(h.doc,A)?hl(h,j.line,q.line+1,ae):o0(h,j.line,"text");var Se=Zt(h,"changes"),De=Zt(h,"change");if(De||Se){var Ue={from:j,to:q,text:A.text,removed:A.removed,origin:A.origin};De&&Vi(h,"change",h,Ue),Se&&(h.curOp.changeObjs||(h.curOp.changeObjs=[])).push(Ue)}h.display.selForContextMenu=null}function hb(h,A,D,S,R){var j;S||(S=D),Ze(S,D)<0&&(D=(j=[S,D])[0],S=j[1]),typeof A=="string"&&(A=h.splitLines(A)),pb(h,{from:D,to:S,text:A,origin:R})}function nDe(h,A,D,S){D<h.line?h.line+=S:A<h.line&&(h.line=A,h.ch=0)}function rDe(h,A,D,S){for(var R=0;R<h.length;++R){var j=h[R],q=!0;if(j.ranges){j.copied||((j=h[R]=j.deepCopy()).copied=!0);for(var Q=0;Q<j.ranges.length;Q++)nDe(j.ranges[Q].anchor,A,D,S),nDe(j.ranges[Q].head,A,D,S)}else{for(var re=0;re<j.changes.length;++re){var ae=j.changes[re];if(D<ae.from.line)ae.from=Ee(ae.from.line+S,ae.from.ch),ae.to=Ee(ae.to.line+S,ae.to.ch);else if(A<=ae.to.line){q=!1;break}}q||(h.splice(0,R+1),R=0)}}}function oDe(h,A){var D=A.from.line,S=A.to.line,R=A.text.length-(S-D)-1;rDe(h.done,D,S,R),rDe(h.undone,D,S,R)}function cw(h,A,D,S){var R=A,j=A;return typeof A=="number"?j=Ct(h,Mr(h,A)):R=cr(A),R==null?null:(S(j,R)&&h.cm&&o0(h.cm,R,D),j)}function dw(h){this.lines=h,this.parent=null;for(var A=0,D=0;D<h.length;++D)h[D].parent=this,A+=h[D].height;this.height=A}function fw(h){this.children=h;for(var A=0,D=0,S=0;S<h.length;++S){var R=h[S];A+=R.chunkSize(),D+=R.height,R.parent=this}this.size=A,this.height=D,this.parent=null}Vr.prototype.from=function(){return Ln(this.anchor,this.head)},Vr.prototype.to=function(){return on(this.anchor,this.head)},Vr.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},dw.prototype={chunkSize:function(){return this.lines.length},removeInner:function(h,A){for(var D=h,S=h+A;D<S;++D){var R=this.lines[D];this.height-=R.height,wwt(R),Vi(R,"delete")}this.lines.splice(h,A)},collapse:function(h){h.push.apply(h,this.lines)},insertInner:function(h,A,D){this.height+=D,this.lines=this.lines.slice(0,h).concat(A).concat(this.lines.slice(h));for(var S=0;S<A.length;++S)A[S].parent=this},iterN:function(h,A,D){for(var S=h+A;h<S;++h)if(D(this.lines[h]))return!0}},fw.prototype={chunkSize:function(){return this.size},removeInner:function(h,A){this.size-=A;for(var D=0;D<this.children.length;++D){var S=this.children[D],R=S.chunkSize();if(h<R){var j=Math.min(A,R-h),q=S.height;if(S.removeInner(h,j),this.height-=q-S.height,R==j&&(this.children.splice(D--,1),S.parent=null),(A-=j)==0)break;h=0}else h-=R}if(this.size-A<25&&(this.children.length>1||!(this.children[0]instanceof dw))){var Q=[];this.collapse(Q),this.children=[new dw(Q)],this.children[0].parent=this}},collapse:function(h){for(var A=0;A<this.children.length;++A)this.children[A].collapse(h)},insertInner:function(h,A,D){this.size+=A.length,this.height+=D;for(var S=0;S<this.children.length;++S){var R=this.children[S],j=R.chunkSize();if(h<=j){if(R.insertInner(h,A,D),R.lines&&R.lines.length>50){for(var q=R.lines.length%25+25,Q=q;Q<R.lines.length;){var re=new dw(R.lines.slice(Q,Q+=25));R.height-=re.height,this.children.splice(++S,0,re),re.parent=this}R.lines=R.lines.slice(0,q),this.maybeSpill()}break}h-=j}},maybeSpill:function(){if(!(this.children.length<=10)){var h=this;do{var A=new fw(h.children.splice(h.children.length-5,5));if(h.parent){h.size-=A.size,h.height-=A.height;var D=ne(h.parent.children,h);h.parent.children.splice(D+1,0,A)}else{var S=new fw(h.children);S.parent=h,h.children=[S,A],h=S}A.parent=h.parent}while(h.children.length>10);h.parent.maybeSpill()}},iterN:function(h,A,D){for(var S=0;S<this.children.length;++S){var R=this.children[S],j=R.chunkSize();if(h<j){var q=Math.min(A,j-h);if(R.iterN(h,q,D))return!0;if((A-=q)==0)break;h=0}else h-=j}}};var pw=function(h,A,D){if(D)for(var S in D)D.hasOwnProperty(S)&&(this[S]=D[S]);this.doc=h,this.node=A};function iDe(h,A,D){Sf(A)<(h.curOp&&h.curOp.scrollTop||h.doc.scrollTop)&&LX(h,D)}function w7t(h,A,D,S){var R=new pw(h,D,S),j=h.cm;return j&&R.noHScroll&&(j.display.alignWidgets=!0),cw(h,A,"widget",function(q){var Q=q.widgets||(q.widgets=[]);if(R.insertAt==null?Q.push(R):Q.splice(Math.min(Q.length,Math.max(0,R.insertAt)),0,R),R.line=q,j&&!r0(h,q)){var re=Sf(q)<h.scrollTop;jr(q,q.height+ZA(R)),re&&LX(j,R.height),j.curOp.forceUpdate=!0}return!0}),j&&Vi(j,"lineWidgetAdded",j,R,typeof A=="number"?A:cr(A)),R}pw.prototype.clear=function(){var h=this.doc.cm,A=this.line.widgets,D=this.line,S=cr(D);if(S!=null&&A){for(var R=0;R<A.length;++R)A[R]==this&&A.splice(R--,1);A.length||(D.widgets=null);var j=ZA(this);jr(D,Math.max(0,D.height-j)),h&&(Xl(h,function(){iDe(h,D,-j),o0(h,S,"widget")}),Vi(h,"lineWidgetCleared",h,this,S))}},pw.prototype.changed=function(){var h=this,A=this.height,D=this.doc.cm,S=this.line;this.height=null;var R=ZA(this)-A;!R||(r0(this.doc,S)||jr(S,S.height+R),D&&Xl(D,function(){D.curOp.forceUpdate=!0,iDe(D,S,R),Vi(D,"lineWidgetChanged",D,h,cr(S))}))},rn(pw);var aDe=0,u0=function(h,A){this.lines=[],this.type=A,this.doc=h,this.id=++aDe};function vb(h,A,D,S,R){if(S&&S.shared)return x7t(h,A,D,S,R);if(h.cm&&!h.cm.curOp)return zi(h.cm,vb)(h,A,D,S,R);var j=new u0(h,R),q=Ze(A,D);if(S&&K(S,j,!1),q>0||q==0&&j.clearWhenEmpty!==!1)return j;if(j.replacedWith&&(j.collapsed=!0,j.widgetNode=P("span",[j.replacedWith],"CodeMirror-widget"),S.handleMouseEvents||j.widgetNode.setAttribute("cm-ignore-events","true"),S.insertLeft&&(j.widgetNode.insertLeft=!0)),j.collapsed){if(XSe(h,A.line,A,D,j)||A.line!=D.line&&XSe(h,D.line,A,D,j))throw new Error("Inserting collapsed marker partially overlapping an existing one");dwt()}j.addToHistory&&Hke(h,{from:A,to:D,origin:"markText"},h.sel,NaN);var Q,re=A.line,ae=h.cm;if(h.iter(re,D.line+1,function(De){ae&&j.collapsed&&!ae.options.lineWrapping&&uc(De)==ae.display.maxLine&&(Q=!0),j.collapsed&&re!=A.line&&jr(De,0),pwt(De,new GD(j,re==A.line?A.ch:null,re==D.line?D.ch:null),h.cm&&h.cm.curOp),++re}),j.collapsed&&h.iter(A.line,D.line+1,function(De){r0(h,De)&&jr(De,0)}),j.clearOnEnter&&Ie(j,"beforeCursorEnter",function(){return j.clear()}),j.readOnly&&(cwt(),(h.history.done.length||h.history.undone.length)&&h.clearHistory()),j.collapsed&&(j.id=++aDe,j.atomic=!0),ae){if(Q&&(ae.curOp.updateMaxLine=!0),j.collapsed)hl(ae,A.line,D.line+1);else if(j.className||j.startStyle||j.endStyle||j.css||j.attributes||j.title)for(var Se=A.line;Se<=D.line;Se++)o0(ae,Se,"text");j.atomic&&Yke(ae.doc),Vi(ae,"markerAdded",ae,j)}return j}u0.prototype.clear=function(){if(!this.explicitlyCleared){var h=this.doc.cm,A=h&&!h.curOp;if(A&&fm(h),Zt(this,"clear")){var D=this.find();D&&Vi(this,"clear",D.from,D.to)}for(var S=null,R=null,j=0;j<this.lines.length;++j){var q=this.lines[j],Q=XA(q.markedSpans,this);h&&!this.collapsed?o0(h,cr(q),"text"):h&&(Q.to!=null&&(R=cr(q)),Q.from!=null&&(S=cr(q))),q.markedSpans=fwt(q.markedSpans,Q),Q.from==null&&this.collapsed&&!r0(this.doc,q)&&h&&jr(q,ab(h.display))}if(h&&this.collapsed&&!h.options.lineWrapping)for(var re=0;re<this.lines.length;++re){var ae=uc(this.lines[re]),Se=XD(ae);Se>h.display.maxLineLength&&(h.display.maxLine=ae,h.display.maxLineLength=Se,h.display.maxLineChanged=!0)}S!=null&&h&&this.collapsed&&hl(h,S,R+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,h&&Yke(h.doc)),h&&Vi(h,"markerCleared",h,this,S,R),A&&pm(h),this.parent&&this.parent.clear()}},u0.prototype.find=function(h,A){h==null&&this.type=="bookmark"&&(h=1);for(var D,S,R=0;R<this.lines.length;++R){var j=this.lines[R],q=XA(j.markedSpans,this);if(q.from!=null&&(D=Ee(A?j:cr(j),q.from),h==-1))return D;if(q.to!=null&&(S=Ee(A?j:cr(j),q.to),h==1))return S}return D&&{from:D,to:S}},u0.prototype.changed=function(){var h=this,A=this.find(-1,!0),D=this,S=this.doc.cm;!A||!S||Xl(S,function(){var R=A.line,j=cr(A.line),q=CX(S,j);if(q&&(fke(q),S.curOp.selectionChanged=S.curOp.forceUpdate=!0),S.curOp.updateMaxLine=!0,!r0(D.doc,R)&&D.height!=null){var Q=D.height;D.height=null;var re=ZA(D)-Q;re&&jr(R,R.height+re)}Vi(S,"markerChanged",S,h)})},u0.prototype.attachLine=function(h){if(!this.lines.length&&this.doc.cm){var A=this.doc.cm.curOp;(!A.maybeHiddenMarkers||ne(A.maybeHiddenMarkers,this)==-1)&&(A.maybeUnhiddenMarkers||(A.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(h)},u0.prototype.detachLine=function(h){if(this.lines.splice(ne(this.lines,h),1),!this.lines.length&&this.doc.cm){var A=this.doc.cm.curOp;(A.maybeHiddenMarkers||(A.maybeHiddenMarkers=[])).push(this)}},rn(u0);var hw=function(h,A){this.markers=h,this.primary=A;for(var D=0;D<h.length;++D)h[D].parent=this};function x7t(h,A,D,S,R){(S=K(S)).shared=!1;var j=[vb(h,A,D,S,R)],q=j[0],Q=S.widgetNode;return s0(h,function(re){Q&&(S.widgetNode=Q.cloneNode(!0)),j.push(vb(re,gn(re,A),gn(re,D),S,R));for(var ae=0;ae<re.linked.length;++ae)if(re.linked[ae].isParent)return;q=Ce(j)}),new hw(j,q)}function lDe(h){return h.findMarks(Ee(h.first,0),h.clipPos(Ee(h.lastLine())),function(A){return A.parent})}function _7t(h,A){for(var D=0;D<A.length;D++){var S=A[D],R=S.find(),j=h.clipPos(R.from),q=h.clipPos(R.to);if(Ze(j,q)){var Q=vb(h,j,q,S.primary,S.primary.type);S.markers.push(Q),Q.parent=S}}}function E7t(h){for(var A=function(S){var R=h[S],j=[R.primary.doc];s0(R.primary.doc,function(re){return j.push(re)});for(var q=0;q<R.markers.length;q++){var Q=R.markers[q];ne(j,Q.doc)==-1&&(Q.parent=null,R.markers.splice(q--,1))}},D=0;D<h.length;D++)A(D)}hw.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var h=0;h<this.markers.length;++h)this.markers[h].clear();Vi(this,"clear")}},hw.prototype.find=function(h,A){return this.primary.find(h,A)},rn(hw);var C7t=0,vl=function(h,A,D,S,R){if(!(this instanceof vl))return new vl(h,A,D,S,R);D==null&&(D=0),fw.call(this,[new dw([new rb("",null)])]),this.first=D,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=D;var j=Ee(D,0);this.sel=a0(j),this.history=new sO(null),this.id=++C7t,this.modeOption=A,this.lineSep=S,this.direction=R=="rtl"?"rtl":"ltr",this.extend=!1,typeof h=="string"&&(h=this.splitLines(h)),GX(this,{from:j,to:j,text:h}),Ea(this,a0(j),J)};vl.prototype=$e(fw.prototype,{constructor:vl,iter:function(h,A,D){D?this.iterN(h-this.first,A-h,D):this.iterN(this.first,this.first+this.size,h)},insert:function(h,A){for(var D=0,S=0;S<A.length;++S)D+=A[S].height;this.insertInner(h-this.first,A,D)},remove:function(h,A){this.removeInner(h-this.first,A)},getValue:function(h){var A=Mo(this,this.first,this.first+this.size);return h===!1?A:A.join(h||this.lineSeparator())},setValue:Hi(function(h){var A=Ee(this.first,0),D=this.first+this.size-1;pb(this,{from:A,to:Ee(D,Ct(this,D).text.length),text:this.splitLines(h),origin:"setValue",full:!0},!0),this.cm&&nw(this.cm,0,0),Ea(this,a0(A),J)}),replaceRange:function(h,A,D,S){hb(this,h,A=gn(this,A),D=D?gn(this,D):A,S)},getRange:function(h,A,D){var S=Fn(this,gn(this,h),gn(this,A));return D===!1?S:D===""?S.join(""):S.join(D||this.lineSeparator())},getLine:function(h){var A=this.getLineHandle(h);return A&&A.text},getLineHandle:function(h){if(pe(this,h))return Ct(this,h)},getLineNumber:function(h){return cr(h)},getLineHandleVisualStart:function(h){return typeof h=="number"&&(h=Ct(this,h)),uc(h)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(h){return gn(this,h)},getCursor:function(h){var A=this.sel.primary();return h==null||h=="head"?A.head:h=="anchor"?A.anchor:h=="end"||h=="to"||h===!1?A.to():A.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Hi(function(h,A,D){Gke(this,gn(this,typeof h=="number"?Ee(h,A||0):h),null,D)}),setSelection:Hi(function(h,A,D){Gke(this,gn(this,h),gn(this,A||h),D)}),extendSelection:Hi(function(h,A,D){cO(this,gn(this,h),A&&gn(this,A),D)}),extendSelections:Hi(function(h,A){Wke(this,gd(this,h),A)}),extendSelectionsBy:Hi(function(h,A){Wke(this,gd(this,_e(this.sel.ranges,h)),A)}),setSelections:Hi(function(h,A,D){if(h.length){for(var S=[],R=0;R<h.length;R++)S[R]=new Vr(gn(this,h[R].anchor),gn(this,h[R].head||h[R].anchor));A==null&&(A=Math.min(h.length-1,this.sel.primIndex)),Ea(this,dc(this.cm,S,A),D)}}),addSelection:Hi(function(h,A,D){var S=this.sel.ranges.slice(0);S.push(new Vr(gn(this,h),gn(this,A||h))),Ea(this,dc(this.cm,S,S.length-1),D)}),getSelection:function(h){for(var A,D=this.sel.ranges,S=0;S<D.length;S++){var R=Fn(this,D[S].from(),D[S].to());A=A?A.concat(R):R}return h===!1?A:A.join(h||this.lineSeparator())},getSelections:function(h){for(var A=[],D=this.sel.ranges,S=0;S<D.length;S++){var R=Fn(this,D[S].from(),D[S].to());h!==!1&&(R=R.join(h||this.lineSeparator())),A[S]=R}return A},replaceSelection:function(h,A,D){for(var S=[],R=0;R<this.sel.ranges.length;R++)S[R]=h;this.replaceSelections(S,A,D||"+input")},replaceSelections:Hi(function(h,A,D){for(var S=[],R=this.sel,j=0;j<R.ranges.length;j++){var q=R.ranges[j];S[j]={from:q.from(),to:q.to(),text:this.splitLines(h[j]),origin:D}}for(var Q=A&&A!="end"&&f7t(this,S,A),re=S.length-1;re>=0;re--)pb(this,S[re]);Q?qke(this,Q):this.cm&&ub(this.cm)}),undo:Hi(function(){pO(this,"undo")}),redo:Hi(function(){pO(this,"redo")}),undoSelection:Hi(function(){pO(this,"undo",!0)}),redoSelection:Hi(function(){pO(this,"redo",!0)}),setExtending:function(h){this.extend=h},getExtending:function(){return this.extend},historySize:function(){for(var h=this.history,A=0,D=0,S=0;S<h.done.length;S++)h.done[S].ranges||++A;for(var R=0;R<h.undone.length;R++)h.undone[R].ranges||++D;return{undo:A,redo:D}},clearHistory:function(){var h=this;this.history=new sO(this.history),s0(this,function(A){return A.history=h.history},!0)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(h){return h&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(h){return this.history.generation==(h||this.cleanGeneration)},getHistory:function(){return{done:db(this.history.done),undone:db(this.history.undone)}},setHistory:function(h){var A=this.history=new sO(this.history);A.done=db(h.done.slice(0),null,!0),A.undone=db(h.undone.slice(0),null,!0)},setGutterMarker:Hi(function(h,A,D){return cw(this,h,"gutter",function(S){var R=S.gutterMarkers||(S.gutterMarkers={});return R[A]=D,!D&&st(R)&&(S.gutterMarkers=null),!0})}),clearGutter:Hi(function(h){var A=this;this.iter(function(D){D.gutterMarkers&&D.gutterMarkers[h]&&cw(A,D,"gutter",function(){return D.gutterMarkers[h]=null,st(D.gutterMarkers)&&(D.gutterMarkers=null),!0})})}),lineInfo:function(h){var A;if(typeof h=="number"){if(!(pe(this,h)&&(A=h,h=Ct(this,h))))return null}else if((A=cr(h))==null)return null;return{line:A,handle:h,text:h.text,gutterMarkers:h.gutterMarkers,textClass:h.textClass,bgClass:h.bgClass,wrapClass:h.wrapClass,widgets:h.widgets}},addLineClass:Hi(function(h,A,D){return cw(this,h,A=="gutter"?"gutter":"class",function(S){var R=A=="text"?"textClass":A=="background"?"bgClass":A=="gutter"?"gutterClass":"wrapClass";if(S[R]){if(k(D).test(S[R]))return!1;S[R]+=" "+D}else S[R]=D;return!0})}),removeLineClass:Hi(function(h,A,D){return cw(this,h,A=="gutter"?"gutter":"class",function(S){var R=A=="text"?"textClass":A=="background"?"bgClass":A=="gutter"?"gutterClass":"wrapClass",j=S[R];if(!j)return!1;if(D==null)S[R]=null;else{var q=j.match(k(D));if(!q)return!1;var Q=q.index+q[0].length;S[R]=j.slice(0,q.index)+(q.index&&Q!=j.length?" ":"")+j.slice(Q)||null}return!0})}),addLineWidget:Hi(function(h,A,D){return w7t(this,h,A,D)}),removeLineWidget:function(h){h.clear()},markText:function(h,A,D){return vb(this,gn(this,h),gn(this,A),D,D&&D.type||"range")},setBookmark:function(h,A){var D={replacedWith:A&&(A.nodeType==null?A.widget:A),insertLeft:A&&A.insertLeft,clearWhenEmpty:!1,shared:A&&A.shared,handleMouseEvents:A&&A.handleMouseEvents};return vb(this,h=gn(this,h),h,D,"bookmark")},findMarksAt:function(h){var A=[],D=Ct(this,(h=gn(this,h)).line).markedSpans;if(D)for(var S=0;S<D.length;++S){var R=D[S];(R.from==null||R.from<=h.ch)&&(R.to==null||R.to>=h.ch)&&A.push(R.marker.parent||R.marker)}return A},findMarks:function(h,A,D){h=gn(this,h),A=gn(this,A);var S=[],R=h.line;return this.iter(h.line,A.line+1,function(j){var q=j.markedSpans;if(q)for(var Q=0;Q<q.length;Q++){var re=q[Q];!(re.to!=null&&R==h.line&&h.ch>=re.to||re.from==null&&R!=h.line||re.from!=null&&R==A.line&&re.from>=A.ch)&&(!D||D(re.marker))&&S.push(re.marker.parent||re.marker)}++R}),S},getAllMarks:function(){var h=[];return this.iter(function(A){var D=A.markedSpans;if(D)for(var S=0;S<D.length;++S)D[S].from!=null&&h.push(D[S].marker)}),h},posFromIndex:function(h){var A,D=this.first,S=this.lineSeparator().length;return this.iter(function(R){var j=R.text.length+S;if(j>h)return A=h,!0;h-=j,++D}),gn(this,Ee(D,A))},indexFromPos:function(h){var A=(h=gn(this,h)).ch;if(h.line<this.first||h.ch<0)return 0;var D=this.lineSeparator().length;return this.iter(this.first,h.line,function(S){A+=S.text.length+D}),A},copy:function(h){var A=new vl(Mo(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return A.scrollTop=this.scrollTop,A.scrollLeft=this.scrollLeft,A.sel=this.sel,A.extend=!1,h&&(A.history.undoDepth=this.history.undoDepth,A.setHistory(this.getHistory())),A},linkedDoc:function(h){h||(h={});var A=this.first,D=this.first+this.size;h.from!=null&&h.from>A&&(A=h.from),h.to!=null&&h.to<D&&(D=h.to);var S=new vl(Mo(this,A,D),h.mode||this.modeOption,A,this.lineSep,this.direction);return h.sharedHist&&(S.history=this.history),(this.linked||(this.linked=[])).push({doc:S,sharedHist:h.sharedHist}),S.linked=[{doc:this,isParent:!0,sharedHist:h.sharedHist}],_7t(S,lDe(this)),S},unlinkDoc:function(h){if(h instanceof wo&&(h=h.doc),this.linked){for(var A=0;A<this.linked.length;++A)if(this.linked[A].doc==h){this.linked.splice(A,1),h.unlinkDoc(this),E7t(lDe(this));break}}if(h.history==this.history){var D=[h.id];s0(h,function(S){return D.push(S.id)},!0),h.history=new sO(null),h.history.done=db(this.history.done,D),h.history.undone=db(this.history.undone,D)}},iterLinkedDocs:function(h){s0(this,h)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(h){return this.lineSep?h.split(this.lineSep):Go(h)},lineSeparator:function(){return this.lineSep||`
| `},setDirection:Hi(function(h){h!="rtl"&&(h="ltr"),h!=this.direction&&(this.direction=h,this.iter(function(A){return A.order=null}),this.cm&&p7t(this.cm))})}),vl.prototype.eachLine=vl.prototype.iter;var sDe=0;function S7t(h){var A=this;if(uDe(A),!qt(A,h)&&!kf(A.display,h)){zn(h),a&&(sDe=+new Date);var D=sm(A,h,!0),S=h.dataTransfer.files;if(D&&!A.isReadOnly())if(S&&S.length&&window.FileReader&&window.File)for(var R=S.length,j=Array(R),q=0,Q=function(){++q==R&&zi(A,function(){var Ge={from:D=gn(A.doc,D),to:D,text:A.doc.splitLines(j.filter(function(at){return at!=null}).join(A.doc.lineSeparator())),origin:"paste"};pb(A.doc,Ge),qke(A.doc,a0(gn(A.doc,D),gn(A.doc,l0(Ge))))})()},re=function(Ge,at){if(A.options.allowDropFileTypes&&ne(A.options.allowDropFileTypes,Ge.type)==-1)Q();else{var yt=new FileReader;yt.onerror=function(){return Q()},yt.onload=function(){var Ot=yt.result;/[\x00-\x08\x0e-\x1f]{2}/.test(Ot)||(j[at]=Ot),Q()},yt.readAsText(Ge)}},ae=0;ae<S.length;ae++)re(S[ae],ae);else{if(A.state.draggingText&&A.doc.sel.contains(D)>-1)return A.state.draggingText(h),void setTimeout(function(){return A.display.input.focus()},20);try{var Se=h.dataTransfer.getData("Text");if(Se){var De;if(A.state.draggingText&&!A.state.draggingText.copy&&(De=A.listSelections()),dO(A.doc,a0(D,D)),De)for(var Ue=0;Ue<De.length;++Ue)hb(A.doc,"",De[Ue].anchor,De[Ue].head,"drag");A.replaceSelection(Se,"around","paste"),A.display.input.focus()}}catch{}}}}function k7t(h,A){if(a&&(!h.state.draggingText||+new Date-sDe<100))An(A);else if(!qt(h,A)&&!kf(h.display,A)&&(A.dataTransfer.setData("Text",h.getSelection()),A.dataTransfer.effectAllowed="copyMove",A.dataTransfer.setDragImage&&!p)){var D=B("img",null,null,"position: fixed; left: 0; top: 0;");D.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",f&&(D.width=D.height=1,h.display.wrapper.appendChild(D),D._top=D.offsetTop),A.dataTransfer.setDragImage(D,0,0),f&&D.parentNode.removeChild(D)}}function D7t(h,A){var D=sm(h,A);if(D){var S=document.createDocumentFragment();FX(h,D,S),h.display.dragCursor||(h.display.dragCursor=B("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),h.display.lineSpace.insertBefore(h.display.dragCursor,h.display.cursorDiv)),N(h.display.dragCursor,S)}}function uDe(h){h.display.dragCursor&&(h.display.lineSpace.removeChild(h.display.dragCursor),h.display.dragCursor=null)}function cDe(h){if(document.getElementsByClassName){for(var A=document.getElementsByClassName("CodeMirror"),D=[],S=0;S<A.length;S++){var R=A[S].CodeMirror;R&&D.push(R)}D.length&&D[0].operation(function(){for(var j=0;j<D.length;j++)h(D[j])})}}var dDe=!1;function O7t(){dDe||(T7t(),dDe=!0)}function T7t(){var h;Ie(window,"resize",function(){h==null&&(h=setTimeout(function(){h=null,cDe(M7t)},100))}),Ie(window,"blur",function(){return cDe(sb)})}function M7t(h){var A=h.display;A.cachedCharWidth=A.cachedTextHeight=A.cachedPaddingH=null,A.scrollbarsClipped=!1,h.setSize()}for(var c0={3:"Pause",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",145:"ScrollLock",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",224:"Mod",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},vw=0;vw<10;vw++)c0[vw+48]=c0[vw+96]=String(vw);for(var hO=65;hO<=90;hO++)c0[hO]=String.fromCharCode(hO);for(var mw=1;mw<=12;mw++)c0[mw+111]=c0[mw+63235]="F"+mw;var Of={};function N7t(h){var A=h.split(/-(?!$)/);h=A[A.length-1];for(var D,S,R,j,q=0;q<A.length-1;q++){var Q=A[q];if(/^(cmd|meta|m)$/i.test(Q))j=!0;else if(/^a(lt)?$/i.test(Q))D=!0;else if(/^(c|ctrl|control)$/i.test(Q))S=!0;else{if(!/^s(hift)?$/i.test(Q))throw new Error("Unrecognized modifier name: "+Q);R=!0}}return D&&(h="Alt-"+h),S&&(h="Ctrl-"+h),j&&(h="Cmd-"+h),R&&(h="Shift-"+h),h}function F7t(h){var A={};for(var D in h)if(h.hasOwnProperty(D)){var S=h[D];if(/^(name|fallthrough|(de|at)tach)$/.test(D))continue;if(S=="..."){delete h[D];continue}for(var R=_e(D.split(" "),N7t),j=0;j<R.length;j++){var q=void 0,Q=void 0;j==R.length-1?(Q=R.join(" "),q=S):(Q=R.slice(0,j+1).join(" "),q="...");var re=A[Q];if(re){if(re!=q)throw new Error("Inconsistent bindings for "+Q)}else A[Q]=q}delete h[D]}for(var ae in A)h[ae]=A[ae];return h}function mb(h,A,D,S){var R=(A=vO(A)).call?A.call(h,S):A[h];if(R===!1)return"nothing";if(R==="...")return"multi";if(R!=null&&D(R))return"handled";if(A.fallthrough){if(Object.prototype.toString.call(A.fallthrough)!="[object Array]")return mb(h,A.fallthrough,D,S);for(var j=0;j<A.fallthrough.length;j++){var q=mb(h,A.fallthrough[j],D,S);if(q)return q}}}function fDe(h){var A=typeof h=="string"?h:c0[h.keyCode];return A=="Ctrl"||A=="Alt"||A=="Shift"||A=="Mod"}function pDe(h,A,D){var S=h;return A.altKey&&S!="Alt"&&(h="Alt-"+h),(C?A.metaKey:A.ctrlKey)&&S!="Ctrl"&&(h="Ctrl-"+h),(C?A.ctrlKey:A.metaKey)&&S!="Mod"&&(h="Cmd-"+h),!D&&A.shiftKey&&S!="Shift"&&(h="Shift-"+h),h}function hDe(h,A){if(f&&h.keyCode==34&&h.char)return!1;var D=c0[h.keyCode];return D!=null&&!h.altGraphKey&&(h.keyCode==3&&h.code&&(D=h.code),pDe(D,h,A))}function vO(h){return typeof h=="string"?Of[h]:h}function gb(h,A){for(var D=h.doc.sel.ranges,S=[],R=0;R<D.length;R++){for(var j=A(D[R]);S.length&&Ze(j.from,Ce(S).to)<=0;){var q=S.pop();if(Ze(q.from,j.from)<0){j.from=q.from;break}}S.push(j)}Xl(h,function(){for(var Q=S.length-1;Q>=0;Q--)hb(h.doc,"",S[Q].from,S[Q].to,"+delete");ub(h)})}function XX(h,A,D){var S=it(h.text,A+D,D);return S<0||S>h.text.length?null:S}function QX(h,A,D){var S=XX(h,A.ch,D);return S==null?null:new Ee(A.line,S,D<0?"after":"before")}function JX(h,A,D,S,R){if(h){A.doc.direction=="rtl"&&(R=-R);var j=me(D,A.doc.direction);if(j){var q,Q=R<0?Ce(j):j[0],re=R<0==(Q.level==1)?"after":"before";if(Q.level>0||A.doc.direction=="rtl"){var ae=ib(A,D);q=R<0?D.text.length-1:0;var Se=Ad(A,ae,q).top;q=dt(function(De){return Ad(A,ae,De).top==Se},R<0==(Q.level==1)?Q.from:Q.to-1,q),re=="before"&&(q=XX(D,q,1))}else q=R<0?Q.to:Q.from;return new Ee(S,q,re)}}return new Ee(S,R<0?D.text.length:0,R<0?"before":"after")}function R7t(h,A,D,S){var R=me(A,h.doc.direction);if(!R)return QX(A,D,S);D.ch>=A.text.length?(D.ch=A.text.length,D.sticky="before"):D.ch<=0&&(D.ch=0,D.sticky="after");var j=we(R,D.ch,D.sticky),q=R[j];if(h.doc.direction=="ltr"&&q.level%2==0&&(S>0?q.to>D.ch:q.from<D.ch))return QX(A,D,S);var Q,re=function(Yt,Jt){return XX(A,Yt instanceof Ee?Yt.ch:Yt,Jt)},ae=function(Yt){return h.options.lineWrapping?(Q=Q||ib(h,A),bke(h,A,Q,Yt)):{begin:0,end:A.text.length}},Se=ae(D.sticky=="before"?re(D,-1):D.ch);if(h.doc.direction=="rtl"||q.level==1){var De=q.level==1==S<0,Ue=re(D,De?1:-1);if(Ue!=null&&(De?Ue<=q.to&&Ue<=Se.end:Ue>=q.from&&Ue>=Se.begin)){var Ge=De?"before":"after";return new Ee(D.line,Ue,Ge)}}var at=function(Yt,Jt,It){for(var tn=function(Zr,Ql){return Ql?new Ee(D.line,re(Zr,1),"before"):new Ee(D.line,Zr,"after")};Yt>=0&&Yt<R.length;Yt+=Jt){var en=R[Yt],fn=Jt>0==(en.level!=1),ro=fn?It.begin:re(It.end,-1);if(en.from<=ro&&ro<en.to||(ro=fn?en.from:re(en.to,-1),It.begin<=ro&&ro<It.end))return tn(ro,fn)}},yt=at(j+S,S,Se);if(yt)return yt;var Ot=S>0?Se.end:re(Se.begin,-1);return Ot==null||S>0&&Ot==A.text.length||!(yt=at(S>0?0:R.length-1,S,ae(Ot)))?null:yt}Of.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Of.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Of.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Of.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Of.default=w?Of.macDefault:Of.pcDefault;var gw={selectAll:Jke,singleSelection:function(h){return h.setSelection(h.getCursor("anchor"),h.getCursor("head"),J)},killLine:function(h){return gb(h,function(A){if(A.empty()){var D=Ct(h.doc,A.head.line).text.length;return A.head.ch==D&&A.head.line<h.lastLine()?{from:A.head,to:Ee(A.head.line+1,0)}:{from:A.head,to:Ee(A.head.line,D)}}return{from:A.from(),to:A.to()}})},deleteLine:function(h){return gb(h,function(A){return{from:Ee(A.from().line,0),to:gn(h.doc,Ee(A.to().line+1,0))}})},delLineLeft:function(h){return gb(h,function(A){return{from:Ee(A.from().line,0),to:A.from()}})},delWrappedLineLeft:function(h){return gb(h,function(A){var D=h.charCoords(A.head,"div").top+5;return{from:h.coordsChar({left:0,top:D},"div"),to:A.from()}})},delWrappedLineRight:function(h){return gb(h,function(A){var D=h.charCoords(A.head,"div").top+5,S=h.coordsChar({left:h.display.lineDiv.offsetWidth+100,top:D},"div");return{from:A.from(),to:S}})},undo:function(h){return h.undo()},redo:function(h){return h.redo()},undoSelection:function(h){return h.undoSelection()},redoSelection:function(h){return h.redoSelection()},goDocStart:function(h){return h.extendSelection(Ee(h.firstLine(),0))},goDocEnd:function(h){return h.extendSelection(Ee(h.lastLine()))},goLineStart:function(h){return h.extendSelectionsBy(function(A){return vDe(h,A.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(h){return h.extendSelectionsBy(function(A){return mDe(h,A.head)},{origin:"+move",bias:1})},goLineEnd:function(h){return h.extendSelectionsBy(function(A){return I7t(h,A.head.line)},{origin:"+move",bias:-1})},goLineRight:function(h){return h.extendSelectionsBy(function(A){var D=h.cursorCoords(A.head,"div").top+5;return h.coordsChar({left:h.display.lineDiv.offsetWidth+100,top:D},"div")},ye)},goLineLeft:function(h){return h.extendSelectionsBy(function(A){var D=h.cursorCoords(A.head,"div").top+5;return h.coordsChar({left:0,top:D},"div")},ye)},goLineLeftSmart:function(h){return h.extendSelectionsBy(function(A){var D=h.cursorCoords(A.head,"div").top+5,S=h.coordsChar({left:0,top:D},"div");return S.ch<h.getLine(S.line).search(/\S/)?mDe(h,A.head):S},ye)},goLineUp:function(h){return h.moveV(-1,"line")},goLineDown:function(h){return h.moveV(1,"line")},goPageUp:function(h){return h.moveV(-1,"page")},goPageDown:function(h){return h.moveV(1,"page")},goCharLeft:function(h){return h.moveH(-1,"char")},goCharRight:function(h){return h.moveH(1,"char")},goColumnLeft:function(h){return h.moveH(-1,"column")},goColumnRight:function(h){return h.moveH(1,"column")},goWordLeft:function(h){return h.moveH(-1,"word")},goGroupRight:function(h){return h.moveH(1,"group")},goGroupLeft:function(h){return h.moveH(-1,"group")},goWordRight:function(h){return h.moveH(1,"word")},delCharBefore:function(h){return h.deleteH(-1,"codepoint")},delCharAfter:function(h){return h.deleteH(1,"char")},delWordBefore:function(h){return h.deleteH(-1,"word")},delWordAfter:function(h){return h.deleteH(1,"word")},delGroupBefore:function(h){return h.deleteH(-1,"group")},delGroupAfter:function(h){return h.deleteH(1,"group")},indentAuto:function(h){return h.indentSelection("smart")},indentMore:function(h){return h.indentSelection("add")},indentLess:function(h){return h.indentSelection("subtract")},insertTab:function(h){return h.replaceSelection(" ")},insertSoftTab:function(h){for(var A=[],D=h.listSelections(),S=h.options.tabSize,R=0;R<D.length;R++){var j=D[R].from(),q=X(h.getLine(j.line),j.ch,S);A.push(Ae(S-q%S))}h.replaceSelections(A)},defaultTab:function(h){h.somethingSelected()?h.indentSelection("add"):h.execCommand("insertTab")},transposeChars:function(h){return Xl(h,function(){for(var A=h.listSelections(),D=[],S=0;S<A.length;S++)if(A[S].empty()){var R=A[S].head,j=Ct(h.doc,R.line).text;if(j){if(R.ch==j.length&&(R=new Ee(R.line,R.ch-1)),R.ch>0)R=new Ee(R.line,R.ch+1),h.replaceRange(j.charAt(R.ch-1)+j.charAt(R.ch-2),Ee(R.line,R.ch-2),R,"+transpose");else if(R.line>h.doc.first){var q=Ct(h.doc,R.line-1).text;q&&(R=new Ee(R.line,1),h.replaceRange(j.charAt(0)+h.doc.lineSeparator()+q.charAt(q.length-1),Ee(R.line-1,q.length-1),R,"+transpose"))}}D.push(new Vr(R,R))}h.setSelections(D)})},newlineAndIndent:function(h){return Xl(h,function(){for(var A=h.listSelections(),D=A.length-1;D>=0;D--)h.replaceRange(h.doc.lineSeparator(),A[D].anchor,A[D].head,"+input");A=h.listSelections();for(var S=0;S<A.length;S++)h.indentLine(A[S].from().line,null,!0);ub(h)})},openLine:function(h){return h.replaceSelection(`
| `,"start")},toggleOverwrite:function(h){return h.toggleOverwrite()}};function vDe(h,A){var D=Ct(h.doc,A),S=uc(D);return S!=D&&(A=cr(S)),JX(!0,h,S,A,1)}function I7t(h,A){var D=Ct(h.doc,A),S=ywt(D);return S!=D&&(A=cr(S)),JX(!0,h,D,A,-1)}function mDe(h,A){var D=vDe(h,A.line),S=Ct(h.doc,D.line),R=me(S,h.doc.direction);if(!R||R[0].level==0){var j=Math.max(D.ch,S.text.search(/\S/)),q=A.line==D.line&&A.ch<=j&&A.ch;return Ee(D.line,q?0:j,D.sticky)}return D}function mO(h,A,D){if(typeof A=="string"&&!(A=gw[A]))return!1;h.display.input.ensurePolled();var S=h.display.shift,R=!1;try{h.isReadOnly()&&(h.state.suppressEdits=!0),D&&(h.display.shift=!1),R=A(h)!=le}finally{h.display.shift=S,h.state.suppressEdits=!1}return R}function B7t(h,A,D){for(var S=0;S<h.state.keyMaps.length;S++){var R=mb(A,h.state.keyMaps[S],D,h);if(R)return R}return h.options.extraKeys&&mb(A,h.options.extraKeys,D,h)||mb(A,h.options.keyMap,D,h)}var P7t=new te;function yw(h,A,D,S){var R=h.state.keySeq;if(R){if(fDe(A))return"handled";if(/\'$/.test(A)?h.state.keySeq=null:P7t.set(50,function(){h.state.keySeq==R&&(h.state.keySeq=null,h.display.input.reset())}),gDe(h,R+" "+A,D,S))return!0}return gDe(h,A,D,S)}function gDe(h,A,D,S){var R=B7t(h,A,S);return R=="multi"&&(h.state.keySeq=A),R=="handled"&&Vi(h,"keyHandled",h,A,D),(R=="handled"||R=="multi")&&(zn(D),RX(h)),!!R}function yDe(h,A){var D=hDe(A,!0);return!!D&&(A.shiftKey&&!h.state.keySeq?yw(h,"Shift-"+D,A,function(S){return mO(h,S,!0)})||yw(h,D,A,function(S){if(typeof S=="string"?/^go[A-Z]/.test(S):S.motion)return mO(h,S)}):yw(h,D,A,function(S){return mO(h,S)}))}function L7t(h,A,D){return yw(h,"'"+D+"'",A,function(S){return mO(h,S,!0)})}var ZX=null;function bDe(h){var A=this;if(!(h.target&&h.target!=A.display.input.getField()||(A.curOp.focus=L(z(A)),qt(A,h)))){a&&l<11&&h.keyCode==27&&(h.returnValue=!1);var D=h.keyCode;A.display.shift=D==16||h.shiftKey;var S=yDe(A,h);f&&(ZX=S?D:null,!S&&D==88&&!sa&&(w?h.metaKey:h.ctrlKey)&&A.replaceSelection("",null,"cut")),n&&!w&&!S&&D==46&&h.shiftKey&&!h.ctrlKey&&document.execCommand&&document.execCommand("cut"),D==18&&!/\bCodeMirror-crosshair\b/.test(A.display.lineDiv.className)&&j7t(A)}}function j7t(h){var A=h.display.lineDiv;function D(S){(S.keyCode==18||!S.altKey)&&(O(A,"CodeMirror-crosshair"),gt(document,"keyup",D),gt(document,"mouseover",D))}H(A,"CodeMirror-crosshair"),Ie(document,"keyup",D),Ie(document,"mouseover",D)}function ADe(h){h.keyCode==16&&(this.doc.sel.shift=!1),qt(this,h)}function wDe(h){var A=this;if(!(h.target&&h.target!=A.display.input.getField()||kf(A.display,h)||qt(A,h)||h.ctrlKey&&!h.altKey||w&&h.metaKey)){var D=h.keyCode,S=h.charCode;if(f&&D==ZX)return ZX=null,void zn(h);if(!f||h.which&&!(h.which<10)||!yDe(A,h)){var R=String.fromCharCode(S??D);R!="\b"&&(L7t(A,h,R)||A.display.input.onKeyPress(h))}}}var bw,Aw,V7t=400,eQ=function(h,A,D){this.time=h,this.pos=A,this.button=D};function z7t(h,A){var D=+new Date;return Aw&&Aw.compare(D,h,A)?(bw=Aw=null,"triple"):bw&&bw.compare(D,h,A)?(Aw=new eQ(D,h,A),bw=null,"double"):(bw=new eQ(D,h,A),Aw=null,"single")}function xDe(h){var A=this,D=A.display;if(!(qt(A,h)||D.activeTouch&&D.input.supportsTouch())){if(D.input.ensurePolled(),D.shift=h.shiftKey,kf(D,h))return void(s||(D.scroller.draggable=!1,setTimeout(function(){return D.scroller.draggable=!0},100)));if(!tQ(A,h)){var S=sm(A,h),R=po(h),j=S?z7t(S,R):"single";$(A).focus(),R==1&&A.state.selectingText&&A.state.selectingText(h),(!S||!H7t(A,R,S,j,h))&&(R==1?S?U7t(A,S,j,h):_n(h)==D.scroller&&zn(h):R==2?(S&&cO(A.doc,S),setTimeout(function(){return D.input.focus()},20)):R==3&&(T?A.display.input.onContextMenu(h):IX(A)))}}}function H7t(h,A,D,S,R){var j="Click";return S=="double"?j="Double"+j:S=="triple"&&(j="Triple"+j),yw(h,pDe(j=(A==1?"Left":A==2?"Middle":"Right")+j,R),R,function(q){if(typeof q=="string"&&(q=gw[q]),!q)return!1;var Q=!1;try{h.isReadOnly()&&(h.state.suppressEdits=!0),Q=q(h,D)!=le}finally{h.state.suppressEdits=!1}return Q})}function $7t(h,A,D){var S=h.getOption("configureMouse"),R=S?S(h,A,D):{};if(R.unit==null){var j=x?D.shiftKey&&D.metaKey:D.altKey;R.unit=j?"rectangle":A=="single"?"char":A=="double"?"word":"line"}return(R.extend==null||h.doc.extend)&&(R.extend=h.doc.extend||D.shiftKey),R.addNew==null&&(R.addNew=w?D.metaKey:D.ctrlKey),R.moveOnDrag==null&&(R.moveOnDrag=!(w?D.altKey:D.ctrlKey)),R}function U7t(h,A,D,S){a?setTimeout(W(_ke,h),0):h.curOp.focus=L(z(h));var R,j=$7t(h,D,S),q=h.doc.sel;h.options.dragDrop&&Jr&&!h.isReadOnly()&&D=="single"&&(R=q.contains(A))>-1&&(Ze((R=q.ranges[R]).from(),A)<0||A.xRel>0)&&(Ze(R.to(),A)>0||A.xRel<0)?W7t(h,S,A,j):G7t(h,S,A,j)}function W7t(h,A,D,S){var R=h.display,j=!1,q=zi(h,function(ae){s&&(R.scroller.draggable=!1),h.state.draggingText=!1,h.state.delayingBlurEvent&&(h.hasFocus()?h.state.delayingBlurEvent=!1:IX(h)),gt(R.wrapper.ownerDocument,"mouseup",q),gt(R.wrapper.ownerDocument,"mousemove",Q),gt(R.scroller,"dragstart",re),gt(R.scroller,"drop",q),j||(zn(ae),S.addNew||cO(h.doc,D,null,null,S.extend),s&&!p||a&&l==9?setTimeout(function(){R.wrapper.ownerDocument.body.focus({preventScroll:!0}),R.input.focus()},20):R.input.focus())}),Q=function(ae){j=j||Math.abs(A.clientX-ae.clientX)+Math.abs(A.clientY-ae.clientY)>=10},re=function(){return j=!0};s&&(R.scroller.draggable=!0),h.state.draggingText=q,q.copy=!S.moveOnDrag,Ie(R.wrapper.ownerDocument,"mouseup",q),Ie(R.wrapper.ownerDocument,"mousemove",Q),Ie(R.scroller,"dragstart",re),Ie(R.scroller,"drop",q),h.state.delayingBlurEvent=!0,setTimeout(function(){return R.input.focus()},20),R.scroller.dragDrop&&R.scroller.dragDrop()}function _De(h,A,D){if(D=="char")return new Vr(A,A);if(D=="word")return h.findWordAt(A);if(D=="line")return new Vr(Ee(A.line,0),gn(h.doc,Ee(A.line+1,0)));var S=D(h,A);return new Vr(S.from,S.to)}function G7t(h,A,D,S){a&&IX(h);var R=h.display,j=h.doc;zn(A);var q,Q,re=j.sel,ae=re.ranges;if(S.addNew&&!S.extend?(Q=j.sel.contains(D),q=Q>-1?ae[Q]:new Vr(D,D)):(q=j.sel.primary(),Q=j.sel.primIndex),S.unit=="rectangle")S.addNew||(q=new Vr(D,D)),D=sm(h,A,!0,!0),Q=-1;else{var Se=_De(h,D,S.unit);q=S.extend?KX(q,Se.anchor,Se.head,S.extend):Se}S.addNew?Q==-1?(Q=ae.length,Ea(j,dc(h,ae.concat([q]),Q),{scroll:!1,origin:"*mouse"})):ae.length>1&&ae[Q].empty()&&S.unit=="char"&&!S.extend?(Ea(j,dc(h,ae.slice(0,Q).concat(ae.slice(Q+1)),0),{scroll:!1,origin:"*mouse"}),re=j.sel):YX(j,Q,q,Z):(Q=0,Ea(j,new js([q],0),Z),re=j.sel);var De=D;function Ue(It){if(Ze(De,It)!=0)if(De=It,S.unit=="rectangle"){for(var tn=[],en=h.options.tabSize,fn=X(Ct(j,D.line).text,D.ch,en),ro=X(Ct(j,It.line).text,It.ch,en),Zr=Math.min(fn,ro),Ql=Math.max(fn,ro),ho=Math.min(D.line,It.line),Cu=Math.min(h.lastLine(),Math.max(D.line,It.line));ho<=Cu;ho++){var Jl=Ct(j,ho).text,Bo=be(Jl,Zr,en);Zr==Ql?tn.push(new Vr(Ee(ho,Bo),Ee(ho,Bo))):Jl.length>Bo&&tn.push(new Vr(Ee(ho,Bo),Ee(ho,be(Jl,Ql,en))))}tn.length||tn.push(new Vr(D,D)),Ea(j,dc(h,re.ranges.slice(0,Q).concat(tn),Q),{origin:"*mouse",scroll:!1}),h.scrollIntoView(It)}else{var ml,Ua=q,si=_De(h,It,S.unit),Ko=Ua.anchor;Ze(si.anchor,Ko)>0?(ml=si.head,Ko=Ln(Ua.from(),si.anchor)):(ml=si.anchor,Ko=on(Ua.to(),si.head));var ui=re.ranges.slice(0);ui[Q]=q7t(h,new Vr(gn(j,Ko),ml)),Ea(j,dc(h,ui,Q),Z)}}var Ge=R.wrapper.getBoundingClientRect(),at=0;function yt(It){var tn=++at,en=sm(h,It,!0,S.unit=="rectangle");if(en)if(Ze(en,De)!=0){h.curOp.focus=L(z(h)),Ue(en);var fn=oO(R,j);(en.line>=fn.to||en.line<fn.from)&&setTimeout(zi(h,function(){at==tn&&yt(It)}),150)}else{var ro=It.clientY<Ge.top?-20:It.clientY>Ge.bottom?20:0;ro&&setTimeout(zi(h,function(){at==tn&&(R.scroller.scrollTop+=ro,yt(It))}),50)}}function Ot(It){h.state.selectingText=!1,at=1/0,It&&(zn(It),R.input.focus()),gt(R.wrapper.ownerDocument,"mousemove",Yt),gt(R.wrapper.ownerDocument,"mouseup",Jt),j.history.lastSelOrigin=null}var Yt=zi(h,function(It){It.buttons!==0&&po(It)?yt(It):Ot(It)}),Jt=zi(h,Ot);h.state.selectingText=Jt,Ie(R.wrapper.ownerDocument,"mousemove",Yt),Ie(R.wrapper.ownerDocument,"mouseup",Jt)}function q7t(h,A){var D=A.anchor,S=A.head,R=Ct(h.doc,D.line);if(Ze(D,S)==0&&D.sticky==S.sticky)return A;var j=me(R);if(!j)return A;var q=we(j,D.ch,D.sticky),Q=j[q];if(Q.from!=D.ch&&Q.to!=D.ch)return A;var re,ae=q+(Q.from==D.ch==(Q.level!=1)?0:1);if(ae==0||ae==j.length)return A;if(S.line!=D.line)re=(S.line-D.line)*(h.doc.direction=="ltr"?1:-1)>0;else{var Se=we(j,S.ch,S.sticky),De=Se-q||(S.ch-D.ch)*(Q.level==1?-1:1);re=Se==ae-1||Se==ae?De<0:De>0}var Ue=j[ae+(re?-1:0)],Ge=re==(Ue.level==1),at=Ge?Ue.from:Ue.to,yt=Ge?"after":"before";return D.ch==at&&D.sticky==yt?A:new Vr(new Ee(D.line,at,yt),S)}function EDe(h,A,D,S){var R,j;if(A.touches)R=A.touches[0].clientX,j=A.touches[0].clientY;else try{R=A.clientX,j=A.clientY}catch{return!1}if(R>=Math.floor(h.display.gutters.getBoundingClientRect().right))return!1;S&&zn(A);var q=h.display,Q=q.lineDiv.getBoundingClientRect();if(j>Q.bottom||!Zt(h,D))return kt(A);j-=Q.top-q.viewOffset;for(var re=0;re<h.display.gutterSpecs.length;++re){var ae=q.gutters.childNodes[re];if(ae&&ae.getBoundingClientRect().right>=R)return vt(h,D,h,Ha(h.doc,j),h.display.gutterSpecs[re].className,A),kt(A)}}function tQ(h,A){return EDe(h,A,"gutterClick",!0)}function CDe(h,A){kf(h.display,A)||K7t(h,A)||qt(h,A,"contextmenu")||T||h.display.input.onContextMenu(A)}function K7t(h,A){return!!Zt(h,"gutterContextMenu")&&EDe(h,A,"gutterContextMenu",!1)}function SDe(h){h.display.wrapper.className=h.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+h.options.theme.replace(/(^|\s)\s*/g," cm-s-"),ew(h)}eQ.prototype.compare=function(h,A,D){return this.time+V7t>h&&Ze(A,this.pos)==0&&D==this.button};var yb={toString:function(){return"CodeMirror.Init"}},kDe={},gO={};function Y7t(h){var A=h.optionHandlers;function D(S,R,j,q){h.defaults[S]=R,j&&(A[S]=q?function(Q,re,ae){ae!=yb&&j(Q,re,ae)}:j)}h.defineOption=D,h.Init=yb,D("value","",function(S,R){return S.setValue(R)},!0),D("mode",null,function(S,R){S.doc.modeOption=R,WX(S)},!0),D("indentUnit",2,WX,!0),D("indentWithTabs",!1),D("smartIndent",!0),D("tabSize",4,function(S){sw(S),ew(S),hl(S)},!0),D("lineSeparator",null,function(S,R){if(S.doc.lineSep=R,R){var j=[],q=S.doc.first;S.doc.iter(function(re){for(var ae=0;;){var Se=re.text.indexOf(R,ae);if(Se==-1)break;ae=Se+R.length,j.push(Ee(q,Se))}q++});for(var Q=j.length-1;Q>=0;Q--)hb(S.doc,R,j[Q],Ee(j[Q].line,j[Q].ch+R.length))}}),D("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,function(S,R,j){S.state.specialChars=new RegExp(R.source+(R.test(" ")?"":"| "),"g"),j!=yb&&S.refresh()}),D("specialCharPlaceholder",Ewt,function(S){return S.refresh()},!0),D("electricChars",!0),D("inputStyle",y?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),D("spellcheck",!1,function(S,R){return S.getInputField().spellcheck=R},!0),D("autocorrect",!1,function(S,R){return S.getInputField().autocorrect=R},!0),D("autocapitalize",!1,function(S,R){return S.getInputField().autocapitalize=R},!0),D("rtlMoveVisually",!_),D("wholeLineUpdateBefore",!0),D("theme","default",function(S){SDe(S),lw(S)},!0),D("keyMap","default",function(S,R,j){var q=vO(R),Q=j!=yb&&vO(j);Q&&Q.detach&&Q.detach(S,q),q.attach&&q.attach(S,Q||null)}),D("extraKeys",null),D("configureMouse",null),D("lineWrapping",!1,Q7t,!0),D("gutters",[],function(S,R){S.display.gutterSpecs=$X(R,S.options.lineNumbers),lw(S)},!0),D("fixedGutter",!0,function(S,R){S.display.gutters.style.left=R?MX(S.display)+"px":"0",S.refresh()},!0),D("coverGutterNextToScrollbar",!1,function(S){return cb(S)},!0),D("scrollbarStyle","native",function(S){Oke(S),cb(S),S.display.scrollbars.setScrollTop(S.doc.scrollTop),S.display.scrollbars.setScrollLeft(S.doc.scrollLeft)},!0),D("lineNumbers",!1,function(S,R){S.display.gutterSpecs=$X(S.options.gutters,R),lw(S)},!0),D("firstLineNumber",1,lw,!0),D("lineNumberFormatter",function(S){return S},lw,!0),D("showCursorWhenSelecting",!1,tw,!0),D("resetSelectionOnContextMenu",!0),D("lineWiseCopyCut",!0),D("pasteLinesPerSelection",!0),D("selectionsMayTouch",!1),D("readOnly",!1,function(S,R){R=="nocursor"&&(sb(S),S.display.input.blur()),S.display.input.readOnlyChanged(R)}),D("screenReaderLabel",null,function(S,R){R=R===""?null:R,S.display.input.screenReaderLabelChanged(R)}),D("disableInput",!1,function(S,R){R||S.display.input.reset()},!0),D("dragDrop",!0,X7t),D("allowDropFileTypes",null),D("cursorBlinkRate",530),D("cursorScrollMargin",0),D("cursorHeight",1,tw,!0),D("singleCursorHeightPerLine",!0,tw,!0),D("workTime",100),D("workDelay",100),D("flattenSpans",!0,sw,!0),D("addModeClass",!1,sw,!0),D("pollInterval",100),D("undoDepth",200,function(S,R){return S.doc.history.undoDepth=R}),D("historyEventDelay",1250),D("viewportMargin",10,function(S){return S.refresh()},!0),D("maxHighlightLength",1e4,sw,!0),D("moveInputWithCursor",!0,function(S,R){R||S.display.input.resetPosition()}),D("tabindex",null,function(S,R){return S.display.input.getField().tabIndex=R||""}),D("autofocus",null),D("direction","ltr",function(S,R){return S.doc.setDirection(R)},!0),D("phrases",null)}function X7t(h,A,D){if(!A!=!(D&&D!=yb)){var S=h.display.dragFunctions,R=A?Ie:gt;R(h.display.scroller,"dragstart",S.start),R(h.display.scroller,"dragenter",S.enter),R(h.display.scroller,"dragover",S.over),R(h.display.scroller,"dragleave",S.leave),R(h.display.scroller,"drop",S.drop)}}function Q7t(h){h.options.lineWrapping?(H(h.display.wrapper,"CodeMirror-wrap"),h.display.sizer.style.minWidth="",h.display.sizerWidth=null):(O(h.display.wrapper,"CodeMirror-wrap"),wX(h)),NX(h),hl(h),ew(h),setTimeout(function(){return cb(h)},100)}function wo(h,A){var D=this;if(!(this instanceof wo))return new wo(h,A);this.options=A=A?K(A):{},K(kDe,A,!1);var S=A.value;typeof S=="string"?S=new vl(S,A.mode,null,A.lineSeparator,A.direction):A.mode&&(S.modeOption=A.mode),this.doc=S;var R=new wo.inputStyles[A.inputStyle](this),j=this.display=new c7t(h,S,R,A);for(var q in j.wrapper.CodeMirror=this,SDe(this),A.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Oke(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new te,keySeq:null,specialChars:null},A.autofocus&&!y&&j.input.focus(),a&&l<11&&setTimeout(function(){return D.display.input.reset(!0)},20),J7t(this),O7t(),fm(this),this.curOp.forceUpdate=!0,jke(this,S),A.autofocus&&!y||this.hasFocus()?setTimeout(function(){D.hasFocus()&&!D.state.focused&&BX(D)},20):sb(this),gO)gO.hasOwnProperty(q)&&gO[q](this,A[q],yb);Nke(this),A.finishInit&&A.finishInit(this);for(var Q=0;Q<nQ.length;++Q)nQ[Q](this);pm(this),s&&A.lineWrapping&&getComputedStyle(j.lineDiv).textRendering=="optimizelegibility"&&(j.lineDiv.style.textRendering="auto")}function J7t(h){var A=h.display;Ie(A.scroller,"mousedown",zi(h,xDe)),Ie(A.scroller,"dblclick",a&&l<11?zi(h,function(re){if(!qt(h,re)){var ae=sm(h,re);if(ae&&!tQ(h,re)&&!kf(h.display,re)){zn(re);var Se=h.findWordAt(ae);cO(h.doc,Se.anchor,Se.head)}}}):function(re){return qt(h,re)||zn(re)}),Ie(A.scroller,"contextmenu",function(re){return CDe(h,re)}),Ie(A.input.getField(),"contextmenu",function(re){A.scroller.contains(re.target)||CDe(h,re)});var D,S={end:0};function R(){A.activeTouch&&(D=setTimeout(function(){return A.activeTouch=null},1e3),(S=A.activeTouch).end=+new Date)}function j(re){if(re.touches.length!=1)return!1;var ae=re.touches[0];return ae.radiusX<=1&&ae.radiusY<=1}function q(re,ae){if(ae.left==null)return!0;var Se=ae.left-re.left,De=ae.top-re.top;return Se*Se+De*De>400}Ie(A.scroller,"touchstart",function(re){if(!qt(h,re)&&!j(re)&&!tQ(h,re)){A.input.ensurePolled(),clearTimeout(D);var ae=+new Date;A.activeTouch={start:ae,moved:!1,prev:ae-S.end<=300?S:null},re.touches.length==1&&(A.activeTouch.left=re.touches[0].pageX,A.activeTouch.top=re.touches[0].pageY)}}),Ie(A.scroller,"touchmove",function(){A.activeTouch&&(A.activeTouch.moved=!0)}),Ie(A.scroller,"touchend",function(re){var ae=A.activeTouch;if(ae&&!kf(A,re)&&ae.left!=null&&!ae.moved&&new Date-ae.start<300){var Se,De=h.coordsChar(A.activeTouch,"page");Se=!ae.prev||q(ae,ae.prev)?new Vr(De,De):!ae.prev.prev||q(ae,ae.prev.prev)?h.findWordAt(De):new Vr(Ee(De.line,0),gn(h.doc,Ee(De.line+1,0))),h.setSelection(Se.anchor,Se.head),h.focus(),zn(re)}R()}),Ie(A.scroller,"touchcancel",R),Ie(A.scroller,"scroll",function(){A.scroller.clientHeight&&(rw(h,A.scroller.scrollTop),cm(h,A.scroller.scrollLeft,!0),vt(h,"scroll",h))}),Ie(A.scroller,"mousewheel",function(re){return Ike(h,re)}),Ie(A.scroller,"DOMMouseScroll",function(re){return Ike(h,re)}),Ie(A.wrapper,"scroll",function(){return A.wrapper.scrollTop=A.wrapper.scrollLeft=0}),A.dragFunctions={enter:function(re){qt(h,re)||An(re)},over:function(re){qt(h,re)||(D7t(h,re),An(re))},start:function(re){return k7t(h,re)},drop:zi(h,S7t),leave:function(re){qt(h,re)||uDe(h)}};var Q=A.input.getField();Ie(Q,"keyup",function(re){return ADe.call(h,re)}),Ie(Q,"keydown",zi(h,bDe)),Ie(Q,"keypress",zi(h,wDe)),Ie(Q,"focus",function(re){return BX(h,re)}),Ie(Q,"blur",function(re){return sb(h,re)})}wo.defaults=kDe,wo.optionHandlers=gO;var nQ=[];function ww(h,A,D,S){var R,j=h.doc;D==null&&(D="add"),D=="smart"&&(j.mode.indent?R=yd(h,A).state:D="prev");var q=h.options.tabSize,Q=Ct(j,A),re=X(Q.text,null,q);Q.stateAfter&&(Q.stateAfter=null);var ae,Se=Q.text.match(/^\s*/)[0];if(S||/\S/.test(Q.text)){if(D=="smart"&&((ae=j.mode.indent(R,Q.text.slice(Se.length),Q.text))==le||ae>150)){if(!S)return;D="prev"}}else ae=0,D="not";D=="prev"?ae=A>j.first?X(Ct(j,A-1).text,null,q):0:D=="add"?ae=re+h.options.indentUnit:D=="subtract"?ae=re-h.options.indentUnit:typeof D=="number"&&(ae=re+D),ae=Math.max(0,ae);var De="",Ue=0;if(h.options.indentWithTabs)for(var Ge=Math.floor(ae/q);Ge;--Ge)Ue+=q,De+=" ";if(Ue<ae&&(De+=Ae(ae-Ue)),De!=Se)return hb(j,De,Ee(A,0),Ee(A,Se.length),"+input"),Q.stateAfter=null,!0;for(var at=0;at<j.sel.ranges.length;at++){var yt=j.sel.ranges[at];if(yt.head.line==A&&yt.head.ch<Se.length){var Ot=Ee(A,Se.length);YX(j,at,new Vr(Ot,Ot));break}}}wo.defineInitHook=function(h){return nQ.push(h)};var fc=null;function yO(h){fc=h}function rQ(h,A,D,S,R){var j=h.doc;h.display.shift=!1,S||(S=j.sel);var q=+new Date-200,Q=R=="paste"||h.state.pasteIncoming>q,re=Go(A),ae=null;if(Q&&S.ranges.length>1)if(fc&&fc.text.join(`
| `)==A){if(S.ranges.length%fc.text.length==0){ae=[];for(var Se=0;Se<fc.text.length;Se++)ae.push(j.splitLines(fc.text[Se]))}}else re.length==S.ranges.length&&h.options.pasteLinesPerSelection&&(ae=_e(re,function(Yt){return[Yt]}));for(var De=h.curOp.updateInput,Ue=S.ranges.length-1;Ue>=0;Ue--){var Ge=S.ranges[Ue],at=Ge.from(),yt=Ge.to();Ge.empty()&&(D&&D>0?at=Ee(at.line,at.ch-D):h.state.overwrite&&!Q?yt=Ee(yt.line,Math.min(Ct(j,yt.line).text.length,yt.ch+Ce(re).length)):Q&&fc&&fc.lineWise&&fc.text.join(`
| `)==re.join(`
| `)&&(at=yt=Ee(at.line,0)));var Ot={from:at,to:yt,text:ae?ae[Ue%ae.length]:re,origin:R||(Q?"paste":h.state.cutIncoming>q?"cut":"+input")};pb(h.doc,Ot),Vi(h,"inputRead",h,Ot)}A&&!Q&&ODe(h,A),ub(h),h.curOp.updateInput<2&&(h.curOp.updateInput=De),h.curOp.typing=!0,h.state.pasteIncoming=h.state.cutIncoming=-1}function DDe(h,A){var D=h.clipboardData&&h.clipboardData.getData("Text");if(D)return h.preventDefault(),!A.isReadOnly()&&!A.options.disableInput&&A.hasFocus()&&Xl(A,function(){return rQ(A,D,0,null,"paste")}),!0}function ODe(h,A){if(h.options.electricChars&&h.options.smartIndent)for(var D=h.doc.sel,S=D.ranges.length-1;S>=0;S--){var R=D.ranges[S];if(!(R.head.ch>100||S&&D.ranges[S-1].head.line==R.head.line)){var j=h.getModeAt(R.head),q=!1;if(j.electricChars){for(var Q=0;Q<j.electricChars.length;Q++)if(A.indexOf(j.electricChars.charAt(Q))>-1){q=ww(h,R.head.line,"smart");break}}else j.electricInput&&j.electricInput.test(Ct(h.doc,R.head.line).text.slice(0,R.head.ch))&&(q=ww(h,R.head.line,"smart"));q&&Vi(h,"electricInput",h,R.head.line)}}}function TDe(h){for(var A=[],D=[],S=0;S<h.doc.sel.ranges.length;S++){var R=h.doc.sel.ranges[S].head.line,j={anchor:Ee(R,0),head:Ee(R+1,0)};D.push(j),A.push(h.getRange(j.anchor,j.head))}return{text:A,ranges:D}}function MDe(h,A,D,S){h.setAttribute("autocorrect",D?"":"off"),h.setAttribute("autocapitalize",S?"":"off"),h.setAttribute("spellcheck",!!A)}function NDe(){var h=B("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none"),A=B("div",[h],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return s?h.style.width="1000px":h.setAttribute("wrap","off"),g&&(h.style.border="1px solid black"),MDe(h),A}function Z7t(h){var A=h.optionHandlers,D=h.helpers={};h.prototype={constructor:h,focus:function(){$(this).focus(),this.display.input.focus()},setOption:function(S,R){var j=this.options,q=j[S];j[S]==R&&S!="mode"||(j[S]=R,A.hasOwnProperty(S)&&zi(this,A[S])(this,R,q),vt(this,"optionChange",this,S))},getOption:function(S){return this.options[S]},getDoc:function(){return this.doc},addKeyMap:function(S,R){this.state.keyMaps[R?"push":"unshift"](vO(S))},removeKeyMap:function(S){for(var R=this.state.keyMaps,j=0;j<R.length;++j)if(R[j]==S||R[j].name==S)return R.splice(j,1),!0},addOverlay:$a(function(S,R){var j=S.token?S:h.getMode(this.options,S);if(j.startState)throw new Error("Overlays may not be stateful.");ke(this.state.overlays,{mode:j,modeSpec:S,opaque:R&&R.opaque,priority:R&&R.priority||0},function(q){return q.priority}),this.state.modeGen++,hl(this)}),removeOverlay:$a(function(S){for(var R=this.state.overlays,j=0;j<R.length;++j){var q=R[j].modeSpec;if(q==S||typeof S=="string"&&q.name==S)return R.splice(j,1),this.state.modeGen++,void hl(this)}}),indentLine:$a(function(S,R,j){typeof R!="string"&&typeof R!="number"&&(R=R==null?this.options.smartIndent?"smart":"prev":R?"add":"subtract"),pe(this.doc,S)&&ww(this,S,R,j)}),indentSelection:$a(function(S){for(var R=this.doc.sel.ranges,j=-1,q=0;q<R.length;q++){var Q=R[q];if(Q.empty())Q.head.line>j&&(ww(this,Q.head.line,S,!0),j=Q.head.line,q==this.doc.sel.primIndex&&ub(this));else{var re=Q.from(),ae=Q.to(),Se=Math.max(j,re.line);j=Math.min(this.lastLine(),ae.line-(ae.ch?0:1))+1;for(var De=Se;De<j;++De)ww(this,De,S);var Ue=this.doc.sel.ranges;re.ch==0&&R.length==Ue.length&&Ue[q].from().ch>0&&YX(this.doc,q,new Vr(re,Ue[q].to()),J)}}}),getTokenAt:function(S,R){return zSe(this,S,R)},getLineTokens:function(S,R){return zSe(this,Ee(S),R,!0)},getTokenTypeAt:function(S){S=gn(this.doc,S);var R,j=nb(this,Ct(this.doc,S.line)),q=0,Q=(j.length-1)/2,re=S.ch;if(re==0)R=j[2];else for(;;){var ae=q+Q>>1;if((ae?j[2*ae-1]:0)>=re)Q=ae;else{if(!(j[2*ae+1]<re)){R=j[2*ae+2];break}q=ae+1}}var Se=R?R.indexOf("overlay "):-1;return Se<0?R:Se==0?null:R.slice(0,Se-1)},getModeAt:function(S){var R=this.doc.mode;return R.innerMode?h.innerMode(R,this.getTokenAt(S).state).mode:R},getHelper:function(S,R){return this.getHelpers(S,R)[0]},getHelpers:function(S,R){var j=[];if(!D.hasOwnProperty(R))return j;var q=D[R],Q=this.getModeAt(S);if(typeof Q[R]=="string")q[Q[R]]&&j.push(q[Q[R]]);else if(Q[R])for(var re=0;re<Q[R].length;re++){var ae=q[Q[R][re]];ae&&j.push(ae)}else Q.helperType&&q[Q.helperType]?j.push(q[Q.helperType]):q[Q.name]&&j.push(q[Q.name]);for(var Se=0;Se<q._global.length;Se++){var De=q._global[Se];De.pred(Q,this)&&ne(j,De.val)==-1&&j.push(De.val)}return j},getStateAfter:function(S,R){var j=this.doc;return yd(this,(S=Mr(j,S??j.first+j.size-1))+1,R).state},cursorCoords:function(S,R){var j=this.doc.sel.primary();return cc(this,S==null?j.head:typeof S=="object"?gn(this.doc,S):S?j.from():j.to(),R||"page")},charCoords:function(S,R){return eO(this,gn(this.doc,S),R||"page")},coordsChar:function(S,R){return DX(this,(S=mke(this,S,R||"page")).left,S.top)},lineAtHeight:function(S,R){return S=mke(this,{top:S,left:0},R||"page").top,Ha(this.doc,S+this.display.viewOffset)},heightAtLine:function(S,R,j){var q,Q=!1;if(typeof S=="number"){var re=this.doc.first+this.doc.size-1;S<this.doc.first?S=this.doc.first:S>re&&(S=re,Q=!0),q=Ct(this.doc,S)}else q=S;return ZD(this,q,{top:0,left:0},R||"page",j||Q).top+(Q?this.doc.height-Sf(q):0)},defaultTextHeight:function(){return ab(this.display)},defaultCharWidth:function(){return lb(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(S,R,j,q,Q){var re=this.display,ae=(S=cc(this,gn(this.doc,S))).bottom,Se=S.left;if(R.style.position="absolute",R.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(R),re.sizer.appendChild(R),q=="over")ae=S.top;else if(q=="above"||q=="near"){var De=Math.max(re.wrapper.clientHeight,this.doc.height),Ue=Math.max(re.sizer.clientWidth,re.lineSpace.clientWidth);(q=="above"||S.bottom+R.offsetHeight>De)&&S.top>R.offsetHeight?ae=S.top-R.offsetHeight:S.bottom+R.offsetHeight<=De&&(ae=S.bottom),Se+R.offsetWidth>Ue&&(Se=Ue-R.offsetWidth)}R.style.top=ae+"px",R.style.left=R.style.right="",Q=="right"?(Se=re.sizer.clientWidth-R.offsetWidth,R.style.right="0px"):(Q=="left"?Se=0:Q=="middle"&&(Se=(re.sizer.clientWidth-R.offsetWidth)/2),R.style.left=Se+"px"),j&&Xwt(this,{left:Se,top:ae,right:Se+R.offsetWidth,bottom:ae+R.offsetHeight})},triggerOnKeyDown:$a(bDe),triggerOnKeyPress:$a(wDe),triggerOnKeyUp:ADe,triggerOnMouseDown:$a(xDe),execCommand:function(S){if(gw.hasOwnProperty(S))return gw[S].call(null,this)},triggerElectric:$a(function(S){ODe(this,S)}),findPosH:function(S,R,j,q){var Q=1;R<0&&(Q=-1,R=-R);for(var re=gn(this.doc,S),ae=0;ae<R&&!(re=oQ(this.doc,re,Q,j,q)).hitSide;++ae);return re},moveH:$a(function(S,R){var j=this;this.extendSelectionsBy(function(q){return j.display.shift||j.doc.extend||q.empty()?oQ(j.doc,q.head,S,R,j.options.rtlMoveVisually):S<0?q.from():q.to()},ye)}),deleteH:$a(function(S,R){var j=this.doc.sel,q=this.doc;j.somethingSelected()?q.replaceSelection("",null,"+delete"):gb(this,function(Q){var re=oQ(q,Q.head,S,R,!1);return S<0?{from:re,to:Q.head}:{from:Q.head,to:re}})}),findPosV:function(S,R,j,q){var Q=1,re=q;R<0&&(Q=-1,R=-R);for(var ae=gn(this.doc,S),Se=0;Se<R;++Se){var De=cc(this,ae,"div");if(re==null?re=De.left:De.left=re,(ae=FDe(this,De,Q,j)).hitSide)break}return ae},moveV:$a(function(S,R){var j=this,q=this.doc,Q=[],re=!this.display.shift&&!q.extend&&q.sel.somethingSelected();if(q.extendSelectionsBy(function(Se){if(re)return S<0?Se.from():Se.to();var De=cc(j,Se.head,"div");Se.goalColumn!=null&&(De.left=Se.goalColumn),Q.push(De.left);var Ue=FDe(j,De,S,R);return R=="page"&&Se==q.sel.primary()&&LX(j,eO(j,Ue,"div").top-De.top),Ue},ye),Q.length)for(var ae=0;ae<q.sel.ranges.length;ae++)q.sel.ranges[ae].goalColumn=Q[ae]}),findWordAt:function(S){var R=Ct(this.doc,S.line).text,j=S.ch,q=S.ch;if(R){var Q=this.getHelper(S,"wordChars");S.sticky!="before"&&q!=R.length||!j?++q:--j;for(var re=R.charAt(j),ae=We(re,Q)?function(Se){return We(Se,Q)}:/\s/.test(re)?function(Se){return/\s/.test(Se)}:function(Se){return!/\s/.test(Se)&&!We(Se)};j>0&&ae(R.charAt(j-1));)--j;for(;q<R.length&&ae(R.charAt(q));)++q}return new Vr(Ee(S.line,j),Ee(S.line,q))},toggleOverwrite:function(S){S!=null&&S==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?H(this.display.cursorDiv,"CodeMirror-overwrite"):O(this.display.cursorDiv,"CodeMirror-overwrite"),vt(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==L(z(this))},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:$a(function(S,R){nw(this,S,R)}),getScrollInfo:function(){var S=this.display.scroller;return{left:S.scrollLeft,top:S.scrollTop,height:S.scrollHeight-bd(this)-this.display.barHeight,width:S.scrollWidth-bd(this)-this.display.barWidth,clientHeight:EX(this),clientWidth:am(this)}},scrollIntoView:$a(function(S,R){S==null?(S={from:this.doc.sel.primary().head,to:null},R==null&&(R=this.options.cursorScrollMargin)):typeof S=="number"?S={from:Ee(S,0),to:null}:S.from==null&&(S={from:S,to:null}),S.to||(S.to=S.from),S.margin=R||0,S.from.line!=null?Qwt(this,S):Cke(this,S.from,S.to,S.margin)}),setSize:$a(function(S,R){var j=this,q=function(re){return typeof re=="number"||/^\d+$/.test(String(re))?re+"px":re};S!=null&&(this.display.wrapper.style.width=q(S)),R!=null&&(this.display.wrapper.style.height=q(R)),this.options.lineWrapping&&pke(this);var Q=this.display.viewFrom;this.doc.iter(Q,this.display.viewTo,function(re){if(re.widgets){for(var ae=0;ae<re.widgets.length;ae++)if(re.widgets[ae].noHScroll){o0(j,Q,"widget");break}}++Q}),this.curOp.forceUpdate=!0,vt(this,"refresh",this)}),operation:function(S){return Xl(this,S)},startOperation:function(){return fm(this)},endOperation:function(){return pm(this)},refresh:$a(function(){var S=this.display.cachedTextHeight;hl(this),this.curOp.forceUpdate=!0,ew(this),nw(this,this.doc.scrollLeft,this.doc.scrollTop),zX(this.display),(S==null||Math.abs(S-ab(this.display))>.5||this.options.lineWrapping)&&NX(this),vt(this,"refresh",this)}),swapDoc:$a(function(S){var R=this.doc;return R.cm=null,this.state.selectingText&&this.state.selectingText(),jke(this,S),ew(this),this.display.input.reset(),nw(this,S.scrollLeft,S.scrollTop),this.curOp.forceScroll=!0,Vi(this,"swapDoc",this,R),R}),phrase:function(S){var R=this.options.phrases;return R&&Object.prototype.hasOwnProperty.call(R,S)?R[S]:S},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},rn(h),h.registerHelper=function(S,R,j){D.hasOwnProperty(S)||(D[S]=h[S]={_global:[]}),D[S][R]=j},h.registerGlobalHelper=function(S,R,j,q){h.registerHelper(S,R,q),D[S]._global.push({pred:j,val:q})}}function oQ(h,A,D,S,R){var j=A,q=D,Q=Ct(h,A.line),re=R&&h.direction=="rtl"?-D:D;function ae(){var Jt=A.line+re;return!(Jt<h.first||Jt>=h.first+h.size)&&(A=new Ee(Jt,A.ch,A.sticky),Q=Ct(h,Jt))}function Se(Jt){var It;if(S=="codepoint"){var tn=Q.text.charCodeAt(A.ch+(D>0?0:-1));if(isNaN(tn))It=null;else{var en=D>0?tn>=55296&&tn<56320:tn>=56320&&tn<57343;It=new Ee(A.line,Math.max(0,Math.min(Q.text.length,A.ch+D*(en?2:1))),-D)}}else It=R?R7t(h.cm,Q,A,D):QX(Q,A,D);if(It==null){if(Jt||!ae())return!1;A=JX(R,h.cm,Q,A.line,re)}else A=It;return!0}if(S=="char"||S=="codepoint")Se();else if(S=="column")Se(!0);else if(S=="word"||S=="group")for(var De=null,Ue=S=="group",Ge=h.cm&&h.cm.getHelper(A,"wordChars"),at=!0;!(D<0)||Se(!at);at=!1){var yt=Q.text.charAt(A.ch)||`
| `,Ot=We(yt,Ge)?"w":Ue&&yt==`
| `?"n":!Ue||/\s/.test(yt)?null:"p";if(Ue&&!at&&!Ot&&(Ot="s"),De&&De!=Ot){D<0&&(D=1,Se(),A.sticky="after");break}if(Ot&&(De=Ot),D>0&&!Se(!at))break}var Yt=fO(h,A,j,q,!0);return Vt(j,Yt)&&(Yt.hitSide=!0),Yt}function FDe(h,A,D,S){var R,j,q=h.doc,Q=A.left;if(S=="page"){var re=Math.min(h.display.wrapper.clientHeight,$(h).innerHeight||q(h).documentElement.clientHeight),ae=Math.max(re-.5*ab(h.display),3);R=(D>0?A.bottom:A.top)+D*ae}else S=="line"&&(R=D>0?A.bottom+3:A.top-3);for(;(j=DX(h,Q,R)).outside;){if(D<0?R<=0:R>=q.height){j.hitSide=!0;break}R+=5*D}return j}var Wr=function(h){this.cm=h,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new te,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function RDe(h,A){var D=CX(h,A.line);if(!D||D.hidden)return null;var S=Ct(h.doc,A.line),R=ske(D,S,A.line),j=me(S,h.doc.direction),q="left";j&&(q=we(j,A.ch)%2?"right":"left");var Q=dke(R.map,A.ch,q);return Q.offset=Q.collapse=="right"?Q.end:Q.start,Q}function e9t(h){for(var A=h;A;A=A.parentNode)if(/CodeMirror-gutter-wrapper/.test(A.className))return!0;return!1}function bb(h,A){return A&&(h.bad=!0),h}function t9t(h,A,D,S,R){var j="",q=!1,Q=h.doc.lineSeparator(),re=!1;function ae(Ge){return function(at){return at.id==Ge}}function Se(){q&&(j+=Q,re&&(j+=Q),q=re=!1)}function De(Ge){Ge&&(Se(),j+=Ge)}function Ue(Ge){if(Ge.nodeType==1){var at=Ge.getAttribute("cm-text");if(at)return void De(at);var yt,Ot=Ge.getAttribute("cm-marker");if(Ot){var Yt=h.findMarks(Ee(S,0),Ee(R+1,0),ae(+Ot));return void(Yt.length&&(yt=Yt[0].find(0))&&De(Fn(h.doc,yt.from,yt.to).join(Q)))}if(Ge.getAttribute("contenteditable")=="false")return;var Jt=/^(pre|div|p|li|table|br)$/i.test(Ge.nodeName);if(!/^br$/i.test(Ge.nodeName)&&Ge.textContent.length==0)return;Jt&&Se();for(var It=0;It<Ge.childNodes.length;It++)Ue(Ge.childNodes[It]);/^(pre|p)$/i.test(Ge.nodeName)&&(re=!0),Jt&&(q=!0)}else Ge.nodeType==3&&De(Ge.nodeValue.replace(/\u200b/g,"").replace(/\u00a0/g," "))}for(;Ue(A),A!=D;)A=A.nextSibling,re=!1;return j}function bO(h,A,D){var S;if(A==h.display.lineDiv){if(!(S=h.display.lineDiv.childNodes[D]))return bb(h.clipPos(Ee(h.display.viewTo-1)),!0);A=null,D=0}else for(S=A;;S=S.parentNode){if(!S||S==h.display.lineDiv)return null;if(S.parentNode&&S.parentNode==h.display.lineDiv)break}for(var R=0;R<h.display.view.length;R++){var j=h.display.view[R];if(j.node==S)return n9t(j,A,D)}}function n9t(h,A,D){var S=h.text.firstChild,R=!1;if(!A||!V(S,A))return bb(Ee(cr(h.line),0),!0);if(A==S&&(R=!0,A=S.childNodes[D],D=0,!A)){var j=h.rest?Ce(h.rest):h.line;return bb(Ee(cr(j),j.text.length),R)}var q=A.nodeType==3?A:null,Q=A;for(!q&&A.childNodes.length==1&&A.firstChild.nodeType==3&&(q=A.firstChild,D&&(D=q.nodeValue.length));Q.parentNode!=S;)Q=Q.parentNode;var re=h.measure,ae=re.maps;function Se(Ot,Yt,Jt){for(var It=-1;It<(ae?ae.length:0);It++)for(var tn=It<0?re.map:ae[It],en=0;en<tn.length;en+=3){var fn=tn[en+2];if(fn==Ot||fn==Yt){var ro=cr(It<0?h.line:h.rest[It]),Zr=tn[en]+Jt;return(Jt<0||fn!=Ot)&&(Zr=tn[en+(Jt?1:0)]),Ee(ro,Zr)}}}var De=Se(q,Q,D);if(De)return bb(De,R);for(var Ue=Q.nextSibling,Ge=q?q.nodeValue.length-D:0;Ue;Ue=Ue.nextSibling){if(De=Se(Ue,Ue.firstChild,0))return bb(Ee(De.line,De.ch-Ge),R);Ge+=Ue.textContent.length}for(var at=Q.previousSibling,yt=D;at;at=at.previousSibling){if(De=Se(at,at.firstChild,-1))return bb(Ee(De.line,De.ch+yt),R);yt+=at.textContent.length}}Wr.prototype.init=function(h){var A=this,D=this,S=D.cm,R=D.div=h.lineDiv;function j(Q){for(var re=Q.target;re;re=re.parentNode){if(re==R)return!0;if(/\bCodeMirror-(?:line)?widget\b/.test(re.className))break}return!1}function q(Q){if(j(Q)&&!qt(S,Q)){if(S.somethingSelected())yO({lineWise:!1,text:S.getSelections()}),Q.type=="cut"&&S.replaceSelection("",null,"cut");else{if(!S.options.lineWiseCopyCut)return;var re=TDe(S);yO({lineWise:!0,text:re.text}),Q.type=="cut"&&S.operation(function(){S.setSelections(re.ranges,0,J),S.replaceSelection("",null,"cut")})}if(Q.clipboardData){Q.clipboardData.clearData();var ae=fc.text.join(`
| `);if(Q.clipboardData.setData("Text",ae),Q.clipboardData.getData("Text")==ae)return void Q.preventDefault()}var Se=NDe(),De=Se.firstChild;S.display.lineSpace.insertBefore(Se,S.display.lineSpace.firstChild),De.value=fc.text.join(`
| `);var Ue=L(R.ownerDocument);G(De),setTimeout(function(){S.display.lineSpace.removeChild(Se),Ue.focus(),Ue==R&&D.showPrimarySelection()},50)}}R.contentEditable=!0,MDe(R,S.options.spellcheck,S.options.autocorrect,S.options.autocapitalize),Ie(R,"paste",function(Q){!j(Q)||qt(S,Q)||DDe(Q,S)||l<=11&&setTimeout(zi(S,function(){return A.updateFromDOM()}),20)}),Ie(R,"compositionstart",function(Q){A.composing={data:Q.data,done:!1}}),Ie(R,"compositionupdate",function(Q){A.composing||(A.composing={data:Q.data,done:!1})}),Ie(R,"compositionend",function(Q){A.composing&&(Q.data!=A.composing.data&&A.readFromDOMSoon(),A.composing.done=!0)}),Ie(R,"touchstart",function(){return D.forceCompositionEnd()}),Ie(R,"input",function(){A.composing||A.readFromDOMSoon()}),Ie(R,"copy",q),Ie(R,"cut",q)},Wr.prototype.screenReaderLabelChanged=function(h){h?this.div.setAttribute("aria-label",h):this.div.removeAttribute("aria-label")},Wr.prototype.prepareSelection=function(){var h=xke(this.cm,!1);return h.focus=L(this.div.ownerDocument)==this.div,h},Wr.prototype.showSelection=function(h,A){!h||!this.cm.display.view.length||((h.focus||A)&&this.showPrimarySelection(),this.showMultipleSelections(h))},Wr.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},Wr.prototype.showPrimarySelection=function(){var h=this.getSelection(),A=this.cm,D=A.doc.sel.primary(),S=D.from(),R=D.to();if(A.display.viewTo==A.display.viewFrom||S.line>=A.display.viewTo||R.line<A.display.viewFrom)h.removeAllRanges();else{var j=bO(A,h.anchorNode,h.anchorOffset),q=bO(A,h.focusNode,h.focusOffset);if(!j||j.bad||!q||q.bad||Ze(Ln(j,q),S)!=0||Ze(on(j,q),R)!=0){var Q=A.display.view,re=S.line>=A.display.viewFrom&&RDe(A,S)||{node:Q[0].measure.map[2],offset:0},ae=R.line<A.display.viewTo&&RDe(A,R);if(!ae){var Se=Q[Q.length-1].measure,De=Se.maps?Se.maps[Se.maps.length-1]:Se.map;ae={node:De[De.length-1],offset:De[De.length-2]-De[De.length-3]}}if(!re||!ae)return void h.removeAllRanges();var Ue,Ge=h.rangeCount&&h.getRangeAt(0);try{Ue=I(re.node,re.offset,ae.offset,ae.node)}catch{}Ue&&(!n&&A.state.focused?(h.collapse(re.node,re.offset),Ue.collapsed||(h.removeAllRanges(),h.addRange(Ue))):(h.removeAllRanges(),h.addRange(Ue)),Ge&&h.anchorNode==null?h.addRange(Ge):n&&this.startGracePeriod()),this.rememberSelection()}}},Wr.prototype.startGracePeriod=function(){var h=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){h.gracePeriod=!1,h.selectionChanged()&&h.cm.operation(function(){return h.cm.curOp.selectionChanged=!0})},20)},Wr.prototype.showMultipleSelections=function(h){N(this.cm.display.cursorDiv,h.cursors),N(this.cm.display.selectionDiv,h.selection)},Wr.prototype.rememberSelection=function(){var h=this.getSelection();this.lastAnchorNode=h.anchorNode,this.lastAnchorOffset=h.anchorOffset,this.lastFocusNode=h.focusNode,this.lastFocusOffset=h.focusOffset},Wr.prototype.selectionInEditor=function(){var h=this.getSelection();if(!h.rangeCount)return!1;var A=h.getRangeAt(0).commonAncestorContainer;return V(this.div,A)},Wr.prototype.focus=function(){this.cm.options.readOnly!="nocursor"&&((!this.selectionInEditor()||L(this.div.ownerDocument)!=this.div)&&this.showSelection(this.prepareSelection(),!0),this.div.focus())},Wr.prototype.blur=function(){this.div.blur()},Wr.prototype.getField=function(){return this.div},Wr.prototype.supportsTouch=function(){return!0},Wr.prototype.receivedFocus=function(){var h=this,A=this;function D(){A.cm.state.focused&&(A.pollSelection(),A.polling.set(A.cm.options.pollInterval,D))}this.selectionInEditor()?setTimeout(function(){return h.pollSelection()},20):Xl(this.cm,function(){return A.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,D)},Wr.prototype.selectionChanged=function(){var h=this.getSelection();return h.anchorNode!=this.lastAnchorNode||h.anchorOffset!=this.lastAnchorOffset||h.focusNode!=this.lastFocusNode||h.focusOffset!=this.lastFocusOffset},Wr.prototype.pollSelection=function(){if(this.readDOMTimeout==null&&!this.gracePeriod&&this.selectionChanged()){var h=this.getSelection(),A=this.cm;if(b&&c&&this.cm.display.gutterSpecs.length&&e9t(h.anchorNode))return this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var D=bO(A,h.anchorNode,h.anchorOffset),S=bO(A,h.focusNode,h.focusOffset);D&&S&&Xl(A,function(){Ea(A.doc,a0(D,S),J),(D.bad||S.bad)&&(A.curOp.selectionChanged=!0)})}}},Wr.prototype.pollContent=function(){this.readDOMTimeout!=null&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var h,A,D,S=this.cm,R=S.display,j=S.doc.sel.primary(),q=j.from(),Q=j.to();if(q.ch==0&&q.line>S.firstLine()&&(q=Ee(q.line-1,Ct(S.doc,q.line-1).length)),Q.ch==Ct(S.doc,Q.line).text.length&&Q.line<S.lastLine()&&(Q=Ee(Q.line+1,0)),q.line<R.viewFrom||Q.line>R.viewTo-1)return!1;q.line==R.viewFrom||(h=um(S,q.line))==0?(A=cr(R.view[0].line),D=R.view[0].node):(A=cr(R.view[h].line),D=R.view[h-1].node.nextSibling);var re,ae,Se=um(S,Q.line);if(Se==R.view.length-1?(re=R.viewTo-1,ae=R.lineDiv.lastChild):(re=cr(R.view[Se+1].line)-1,ae=R.view[Se+1].node.previousSibling),!D)return!1;for(var De=S.doc.splitLines(t9t(S,D,ae,A,re)),Ue=Fn(S.doc,Ee(A,0),Ee(re,Ct(S.doc,re).text.length));De.length>1&&Ue.length>1;)if(Ce(De)==Ce(Ue))De.pop(),Ue.pop(),re--;else{if(De[0]!=Ue[0])break;De.shift(),Ue.shift(),A++}for(var Ge=0,at=0,yt=De[0],Ot=Ue[0],Yt=Math.min(yt.length,Ot.length);Ge<Yt&&yt.charCodeAt(Ge)==Ot.charCodeAt(Ge);)++Ge;for(var Jt=Ce(De),It=Ce(Ue),tn=Math.min(Jt.length-(De.length==1?Ge:0),It.length-(Ue.length==1?Ge:0));at<tn&&Jt.charCodeAt(Jt.length-at-1)==It.charCodeAt(It.length-at-1);)++at;if(De.length==1&&Ue.length==1&&A==q.line)for(;Ge&&Ge>q.ch&&Jt.charCodeAt(Jt.length-at-1)==It.charCodeAt(It.length-at-1);)Ge--,at++;De[De.length-1]=Jt.slice(0,Jt.length-at).replace(/^\u200b+/,""),De[0]=De[0].slice(Ge).replace(/\u200b+$/,"");var en=Ee(A,Ge),fn=Ee(re,Ue.length?Ce(Ue).length-at:0);return De.length>1||De[0]||Ze(en,fn)?(hb(S.doc,De,en,fn,"+input"),!0):void 0},Wr.prototype.ensurePolled=function(){this.forceCompositionEnd()},Wr.prototype.reset=function(){this.forceCompositionEnd()},Wr.prototype.forceCompositionEnd=function(){!this.composing||(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Wr.prototype.readFromDOMSoon=function(){var h=this;this.readDOMTimeout==null&&(this.readDOMTimeout=setTimeout(function(){if(h.readDOMTimeout=null,h.composing){if(!h.composing.done)return;h.composing=null}h.updateFromDOM()},80))},Wr.prototype.updateFromDOM=function(){var h=this;(this.cm.isReadOnly()||!this.pollContent())&&Xl(this.cm,function(){return hl(h.cm)})},Wr.prototype.setUneditable=function(h){h.contentEditable="false"},Wr.prototype.onKeyPress=function(h){h.charCode==0||this.composing||(h.preventDefault(),this.cm.isReadOnly()||zi(this.cm,rQ)(this.cm,String.fromCharCode(h.charCode==null?h.keyCode:h.charCode),0))},Wr.prototype.readOnlyChanged=function(h){this.div.contentEditable=String(h!="nocursor")},Wr.prototype.onContextMenu=function(){},Wr.prototype.resetPosition=function(){},Wr.prototype.needsContentAttribute=!0;var qo=function(h){this.cm=h,this.prevInput="",this.pollingFast=!1,this.polling=new te,this.hasSelection=!1,this.composing=null};function r9t(h,A){if((A=A?K(A):{}).value=h.value,!A.tabindex&&h.tabIndex&&(A.tabindex=h.tabIndex),!A.placeholder&&h.placeholder&&(A.placeholder=h.placeholder),A.autofocus==null){var D=L(h.ownerDocument);A.autofocus=D==h||h.getAttribute("autofocus")!=null&&D==document.body}function S(){h.value=Q.getValue()}var R;if(h.form&&(Ie(h.form,"submit",S),!A.leaveSubmitMethodAlone)){var j=h.form;R=j.submit;try{var q=j.submit=function(){S(),j.submit=R,j.submit(),j.submit=q}}catch{}}A.finishInit=function(re){re.save=S,re.getTextArea=function(){return h},re.toTextArea=function(){re.toTextArea=isNaN,S(),h.parentNode.removeChild(re.getWrapperElement()),h.style.display="",h.form&&(gt(h.form,"submit",S),!A.leaveSubmitMethodAlone&&typeof h.form.submit=="function"&&(h.form.submit=R))}},h.style.display="none";var Q=wo(function(re){return h.parentNode.insertBefore(re,h.nextSibling)},A);return Q}function o9t(h){h.off=gt,h.on=Ie,h.wheelEventPixels=d7t,h.Doc=vl,h.splitLines=Go,h.countColumn=X,h.findColumn=be,h.isWordChar=ge,h.Pass=le,h.signal=vt,h.Line=rb,h.changeEnd=l0,h.scrollbarModel=Dke,h.Pos=Ee,h.cmpPos=Ze,h.modes=Et,h.mimeModes=Kt,h.resolveMode=Ne,h.getMode=Tt,h.modeExtensions=Oe,h.extendMode=nt,h.copyState=ut,h.startState=En,h.innerMode=xt,h.commands=gw,h.keyMap=Of,h.keyName=hDe,h.isModifierKey=fDe,h.lookupKey=mb,h.normalizeKeyMap=F7t,h.StringStream=ln,h.SharedTextMarker=hw,h.TextMarker=u0,h.LineWidget=pw,h.e_preventDefault=zn,h.e_stopPropagation=tt,h.e_stop=An,h.addClass=H,h.contains=V,h.rmClass=O,h.keyNames=c0}qo.prototype.init=function(h){var A=this,D=this,S=this.cm;this.createField(h);var R=this.textarea;function j(q){if(!qt(S,q)){if(S.somethingSelected())yO({lineWise:!1,text:S.getSelections()});else{if(!S.options.lineWiseCopyCut)return;var Q=TDe(S);yO({lineWise:!0,text:Q.text}),q.type=="cut"?S.setSelections(Q.ranges,null,J):(D.prevInput="",R.value=Q.text.join(`
| `),G(R))}q.type=="cut"&&(S.state.cutIncoming=+new Date)}}h.wrapper.insertBefore(this.wrapper,h.wrapper.firstChild),g&&(R.style.width="0px"),Ie(R,"input",function(){a&&l>=9&&A.hasSelection&&(A.hasSelection=null),D.poll()}),Ie(R,"paste",function(q){qt(S,q)||DDe(q,S)||(S.state.pasteIncoming=+new Date,D.fastPoll())}),Ie(R,"cut",j),Ie(R,"copy",j),Ie(h.scroller,"paste",function(q){if(!kf(h,q)&&!qt(S,q)){if(!R.dispatchEvent)return S.state.pasteIncoming=+new Date,void D.focus();var Q=new Event("paste");Q.clipboardData=q.clipboardData,R.dispatchEvent(Q)}}),Ie(h.lineSpace,"selectstart",function(q){kf(h,q)||zn(q)}),Ie(R,"compositionstart",function(){var q=S.getCursor("from");D.composing&&D.composing.range.clear(),D.composing={start:q,range:S.markText(q,S.getCursor("to"),{className:"CodeMirror-composing"})}}),Ie(R,"compositionend",function(){D.composing&&(D.poll(),D.composing.range.clear(),D.composing=null)})},qo.prototype.createField=function(h){this.wrapper=NDe(),this.textarea=this.wrapper.firstChild},qo.prototype.screenReaderLabelChanged=function(h){h?this.textarea.setAttribute("aria-label",h):this.textarea.removeAttribute("aria-label")},qo.prototype.prepareSelection=function(){var h=this.cm,A=h.display,D=h.doc,S=xke(h);if(h.options.moveInputWithCursor){var R=cc(h,D.sel.primary().head,"div"),j=A.wrapper.getBoundingClientRect(),q=A.lineDiv.getBoundingClientRect();S.teTop=Math.max(0,Math.min(A.wrapper.clientHeight-10,R.top+q.top-j.top)),S.teLeft=Math.max(0,Math.min(A.wrapper.clientWidth-10,R.left+q.left-j.left))}return S},qo.prototype.showSelection=function(h){var A=this.cm.display;N(A.cursorDiv,h.cursors),N(A.selectionDiv,h.selection),h.teTop!=null&&(this.wrapper.style.top=h.teTop+"px",this.wrapper.style.left=h.teLeft+"px")},qo.prototype.reset=function(h){if(!this.contextMenuPending&&!this.composing){var A=this.cm;if(A.somethingSelected()){this.prevInput="";var D=A.getSelection();this.textarea.value=D,A.state.focused&&G(this.textarea),a&&l>=9&&(this.hasSelection=D)}else h||(this.prevInput=this.textarea.value="",a&&l>=9&&(this.hasSelection=null))}},qo.prototype.getField=function(){return this.textarea},qo.prototype.supportsTouch=function(){return!1},qo.prototype.focus=function(){if(this.cm.options.readOnly!="nocursor"&&(!y||L(this.textarea.ownerDocument)!=this.textarea))try{this.textarea.focus()}catch{}},qo.prototype.blur=function(){this.textarea.blur()},qo.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},qo.prototype.receivedFocus=function(){this.slowPoll()},qo.prototype.slowPoll=function(){var h=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){h.poll(),h.cm.state.focused&&h.slowPoll()})},qo.prototype.fastPoll=function(){var h=!1,A=this;function D(){A.poll()||h?(A.pollingFast=!1,A.slowPoll()):(h=!0,A.polling.set(60,D))}A.pollingFast=!0,A.polling.set(20,D)},qo.prototype.poll=function(){var h=this,A=this.cm,D=this.textarea,S=this.prevInput;if(this.contextMenuPending||!A.state.focused||za(D)&&!S&&!this.composing||A.isReadOnly()||A.options.disableInput||A.state.keySeq)return!1;var R=D.value;if(R==S&&!A.somethingSelected())return!1;if(a&&l>=9&&this.hasSelection===R||w&&/[\uf700-\uf7ff]/.test(R))return A.display.input.reset(),!1;if(A.doc.sel==A.display.selForContextMenu){var j=R.charCodeAt(0);if(j==8203&&!S&&(S="\u200B"),j==8666)return this.reset(),this.cm.execCommand("undo")}for(var q=0,Q=Math.min(S.length,R.length);q<Q&&S.charCodeAt(q)==R.charCodeAt(q);)++q;return Xl(A,function(){rQ(A,R.slice(q),S.length-q,null,h.composing?"*compose":null),R.length>1e3||R.indexOf(`
| `)>-1?D.value=h.prevInput="":h.prevInput=R,h.composing&&(h.composing.range.clear(),h.composing.range=A.markText(h.composing.start,A.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},qo.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},qo.prototype.onKeyPress=function(){a&&l>=9&&(this.hasSelection=null),this.fastPoll()},qo.prototype.onContextMenu=function(h){var A=this,D=A.cm,S=D.display,R=A.textarea;A.contextMenuPending&&A.contextMenuPending();var j=sm(D,h),q=S.scroller.scrollTop;if(j&&!f){D.options.resetSelectionOnContextMenu&&D.doc.sel.contains(j)==-1&&zi(D,Ea)(D.doc,a0(j),J);var Q,re=R.style.cssText,ae=A.wrapper.style.cssText,Se=A.wrapper.offsetParent.getBoundingClientRect();if(A.wrapper.style.cssText="position: static",R.style.cssText=`position: absolute; width: 30px; height: 30px;
| top: `+(h.clientY-Se.top-5)+"px; left: "+(h.clientX-Se.left-5)+`px;
| z-index: 1000; background: `+(a?"rgba(255, 255, 255, .05)":"transparent")+`;
| outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);`,s&&(Q=R.ownerDocument.defaultView.scrollY),S.input.focus(),s&&R.ownerDocument.defaultView.scrollTo(null,Q),S.input.reset(),D.somethingSelected()||(R.value=A.prevInput=" "),A.contextMenuPending=Ge,S.selForContextMenu=D.doc.sel,clearTimeout(S.detectingSelectAll),a&&l>=9&&Ue(),T){An(h);var De=function(){gt(window,"mouseup",De),setTimeout(Ge,20)};Ie(window,"mouseup",De)}else setTimeout(Ge,50)}function Ue(){if(R.selectionStart!=null){var at=D.somethingSelected(),yt="\u200B"+(at?R.value:"");R.value="\u21DA",R.value=yt,A.prevInput=at?"":"\u200B",R.selectionStart=1,R.selectionEnd=yt.length,S.selForContextMenu=D.doc.sel}}function Ge(){if(A.contextMenuPending==Ge&&(A.contextMenuPending=!1,A.wrapper.style.cssText=ae,R.style.cssText=re,a&&l<9&&S.scrollbars.setScrollTop(S.scroller.scrollTop=q),R.selectionStart!=null)){(!a||a&&l<9)&&Ue();var at=0,yt=function(){S.selForContextMenu==D.doc.sel&&R.selectionStart==0&&R.selectionEnd>0&&A.prevInput=="\u200B"?zi(D,Jke)(D):at++<10?S.detectingSelectAll=setTimeout(yt,500):(S.selForContextMenu=null,S.input.reset())};S.detectingSelectAll=setTimeout(yt,200)}}},qo.prototype.readOnlyChanged=function(h){h||this.reset(),this.textarea.disabled=h=="nocursor",this.textarea.readOnly=!!h},qo.prototype.setUneditable=function(){},qo.prototype.needsContentAttribute=!1,Y7t(wo),Z7t(wo);var i9t="iter insert remove copy getEditor constructor".split(" ");for(var AO in vl.prototype)vl.prototype.hasOwnProperty(AO)&&ne(i9t,AO)<0&&(wo.prototype[AO]=function(h){return function(){return h.apply(this.doc,arguments)}}(vl.prototype[AO]));return rn(vl),wo.inputStyles={textarea:qo,contenteditable:Wr},wo.defineMode=function(h){!wo.defaults.mode&&h!="null"&&(wo.defaults.mode=h),gr.apply(this,arguments)},wo.defineMIME=Bn,wo.defineMode("null",function(){return{token:function(h){return h.skipToEnd()}}}),wo.defineMIME("text/plain","null"),wo.defineExtension=function(h,A){wo.prototype[h]=A},wo.defineDocExtension=function(h,A){vl.prototype[h]=A},wo.fromTextArea=r9t,o9t(wo),wo.version="6.65.7",wo}()),Bfe.exports}var Mg=Wx();(function(e){e.defineMode("javascript",function(t,n){var r,o,i=t.indentUnit,a=n.statementIndent,l=n.jsonld,s=n.json||l,u=n.trackScope!==!1,c=n.typescript,d=n.wordCharacters||/[\w$\xa1-\uffff]/,f=function(){function pe(Ln){return{type:Ln,style:"keyword"}}var xe=pe("keyword a"),Ee=pe("keyword b"),Ze=pe("keyword c"),Vt=pe("keyword d"),Cn=pe("operator"),on={type:"atom",style:"atom"};return{if:pe("if"),while:xe,with:xe,else:Ee,do:Ee,try:Ee,finally:Ee,return:Vt,break:Vt,continue:Vt,new:pe("new"),delete:Ze,void:Ze,throw:Ze,debugger:pe("debugger"),var:pe("var"),const:pe("var"),let:pe("var"),function:pe("function"),catch:pe("catch"),for:pe("for"),switch:pe("switch"),case:pe("case"),default:pe("default"),in:Cn,typeof:Cn,instanceof:Cn,true:on,false:on,null:on,undefined:on,NaN:on,Infinity:on,this:pe("this"),class:pe("class"),super:pe("atom"),yield:Ze,export:pe("export"),import:pe("import"),extends:Ze,await:Ze}}(),p=/[+\-*&%=<>!?|~^@]/,m=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function v(pe){for(var xe,Ee=!1,Ze=!1;(xe=pe.next())!=null;){if(!Ee){if(xe=="/"&&!Ze)return;xe=="["?Ze=!0:Ze&&xe=="]"&&(Ze=!1)}Ee=!Ee&&xe=="\\"}}function g(pe,xe,Ee){return r=pe,o=Ee,xe}function b(pe,xe){var Ee=pe.next();if(Ee=='"'||Ee=="'")return xe.tokenize=y(Ee),xe.tokenize(pe,xe);if(Ee=="."&&pe.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return g("number","number");if(Ee=="."&&pe.match(".."))return g("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(Ee))return g(Ee);if(Ee=="="&&pe.eat(">"))return g("=>","operator");if(Ee=="0"&&pe.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return g("number","number");if(/\d/.test(Ee))return pe.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),g("number","number");if(Ee=="/")return pe.eat("*")?(xe.tokenize=w,w(pe,xe)):pe.eat("/")?(pe.skipToEnd(),g("comment","comment")):Ha(pe,xe,1)?(v(pe),pe.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),g("regexp","string-2")):(pe.eat("="),g("operator","operator",pe.current()));if(Ee=="`")return xe.tokenize=x,x(pe,xe);if(Ee=="#"&&pe.peek()=="!")return pe.skipToEnd(),g("meta","meta");if(Ee=="#"&&pe.eatWhile(d))return g("variable","property");if(Ee=="<"&&pe.match("!--")||Ee=="-"&&pe.match("->")&&!/\S/.test(pe.string.slice(0,pe.start)))return pe.skipToEnd(),g("comment","comment");if(p.test(Ee))return(Ee!=">"||!xe.lexical||xe.lexical.type!=">")&&(pe.eat("=")?(Ee=="!"||Ee=="=")&&pe.eat("="):/[<>*+\-|&?]/.test(Ee)&&(pe.eat(Ee),Ee==">"&&pe.eat(Ee))),Ee=="?"&&pe.eat(".")?g("."):g("operator","operator",pe.current());if(d.test(Ee)){pe.eatWhile(d);var Ze=pe.current();if(xe.lastType!="."){if(f.propertyIsEnumerable(Ze)){var Vt=f[Ze];return g(Vt.type,Vt.style,Ze)}if(Ze=="async"&&pe.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/,!1))return g("async","keyword",Ze)}return g("variable","variable",Ze)}}function y(pe){return function(xe,Ee){var Ze,Vt=!1;if(l&&xe.peek()=="@"&&xe.match(m))return Ee.tokenize=b,g("jsonld-keyword","meta");for(;(Ze=xe.next())!=null&&(Ze!=pe||Vt);)Vt=!Vt&&Ze=="\\";return Vt||(Ee.tokenize=b),g("string","string")}}function w(pe,xe){for(var Ee,Ze=!1;Ee=pe.next();){if(Ee=="/"&&Ze){xe.tokenize=b;break}Ze=Ee=="*"}return g("comment","comment")}function x(pe,xe){for(var Ee,Ze=!1;(Ee=pe.next())!=null;){if(!Ze&&(Ee=="`"||Ee=="$"&&pe.eat("{"))){xe.tokenize=b;break}Ze=!Ze&&Ee=="\\"}return g("quasi","string-2",pe.current())}var _="([{}])";function E(pe,xe){xe.fatArrowAt&&(xe.fatArrowAt=null);var Ee=pe.string.indexOf("=>",pe.start);if(!(Ee<0)){if(c){var Ze=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(pe.string.slice(pe.start,Ee));Ze&&(Ee=Ze.index)}for(var Vt=0,Cn=!1,on=Ee-1;on>=0;--on){var Ln=pe.string.charAt(on),Mr=_.indexOf(Ln);if(Mr>=0&&Mr<3){if(!Vt){++on;break}if(--Vt==0){Ln=="("&&(Cn=!0);break}}else if(Mr>=3&&Mr<6)++Vt;else if(d.test(Ln))Cn=!0;else if(/["'\/`]/.test(Ln))for(;;--on){if(on==0)return;if(pe.string.charAt(on-1)==Ln&&pe.string.charAt(on-2)!="\\"){on--;break}}else if(Cn&&!Vt){++on;break}}Cn&&!Vt&&(xe.fatArrowAt=on)}}var C={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,import:!0,"jsonld-keyword":!0};function T(pe,xe,Ee,Ze,Vt,Cn){this.indented=pe,this.column=xe,this.type=Ee,this.prev=Vt,this.info=Cn,Ze!=null&&(this.align=Ze)}function k(pe,xe){if(!u)return!1;for(var Ee=pe.localVars;Ee;Ee=Ee.next)if(Ee.name==xe)return!0;for(var Ze=pe.context;Ze;Ze=Ze.prev)for(Ee=Ze.vars;Ee;Ee=Ee.next)if(Ee.name==xe)return!0}function I(pe,xe,Ee,Ze,Vt){var Cn=pe.cc;for(O.state=pe,O.stream=Vt,O.marked=null,O.cc=Cn,O.style=xe,pe.lexical.hasOwnProperty("align")||(pe.lexical.align=!0);;)if((Cn.length?Cn.pop():s?le:ne)(Ee,Ze)){for(;Cn.length&&Cn[Cn.length-1].lex;)Cn.pop()();return O.marked?O.marked:Ee=="variable"&&k(pe,Ze)?"variable-2":xe}}var O={state:null,column:null,marked:null,cc:null};function F(){for(var pe=arguments.length-1;pe>=0;pe--)O.cc.push(arguments[pe])}function N(){return F.apply(null,arguments),!0}function B(pe,xe){for(var Ee=xe;Ee;Ee=Ee.next)if(Ee.name==pe)return!0;return!1}function P(pe){var xe=O.state;if(O.marked="def",u){if(xe.context){if(xe.lexical.info=="var"&&xe.context&&xe.context.block){var Ee=V(pe,xe.context);if(Ee!=null)return void(xe.context=Ee)}else if(!B(pe,xe.localVars))return void(xe.localVars=new U(pe,xe.localVars))}n.globalVars&&!B(pe,xe.globalVars)&&(xe.globalVars=new U(pe,xe.globalVars))}}function V(pe,xe){if(xe){if(xe.block){var Ee=V(pe,xe.prev);return Ee?Ee==xe.prev?xe:new H(Ee,xe.vars,!0):null}return B(pe,xe.vars)?xe:new H(xe.prev,new U(pe,xe.vars),!1)}return null}function L(pe){return pe=="public"||pe=="private"||pe=="protected"||pe=="abstract"||pe=="readonly"}function H(pe,xe,Ee){this.prev=pe,this.vars=xe,this.block=Ee}function U(pe,xe){this.name=pe,this.next=xe}var G=new U("this",new U("arguments",null));function z(){O.state.context=new H(O.state.context,O.state.localVars,!1),O.state.localVars=G}function $(){O.state.context=new H(O.state.context,O.state.localVars,!0),O.state.localVars=null}function W(){O.state.localVars=O.state.context.vars,O.state.context=O.state.context.prev}function K(pe,xe){var Ee=function(){var Ze=O.state,Vt=Ze.indented;if(Ze.lexical.type=="stat")Vt=Ze.lexical.indented;else for(var Cn=Ze.lexical;Cn&&Cn.type==")"&&Cn.align;Cn=Cn.prev)Vt=Cn.indented;Ze.lexical=new T(Vt,O.stream.column(),pe,null,Ze.lexical,xe)};return Ee.lex=!0,Ee}function X(){var pe=O.state;pe.lexical.prev&&(pe.lexical.type==")"&&(pe.indented=pe.lexical.indented),pe.lexical=pe.lexical.prev)}function te(pe){function xe(Ee){return Ee==pe?N():pe==";"||Ee=="}"||Ee==")"||Ee=="]"?F():N(xe)}return xe}function ne(pe,xe){return pe=="var"?N(K("vardef",xe),An,te(";"),X):pe=="keyword a"?N(K("form"),Z,ne,X):pe=="keyword b"?N(K("form"),ne,X):pe=="keyword d"?O.stream.match(/^\s*$/,!1)?N():N(K("stat"),be,te(";"),X):pe=="debugger"?N(te(";")):pe=="{"?N(K("}"),$,je,X,W):pe==";"?N():pe=="if"?(O.state.lexical.info=="else"&&O.state.cc[O.state.cc.length-1]==X&&O.state.cc.pop()(),N(K("form"),Z,ne,X,Ao)):pe=="function"?N(sa):pe=="for"?N(K("form"),$,pl,ne,W,X):pe=="class"||c&&xe=="interface"?(O.marked="keyword",N(K("form",pe=="class"?pe:xe),gr,X)):pe=="variable"?c&&xe=="declare"?(O.marked="keyword",N(ne)):c&&(xe=="module"||xe=="enum"||xe=="type")&&O.stream.match(/^\s*\w/,!1)?(O.marked="keyword",xe=="enum"?N(Mo):xe=="type"?N(lt,te("operator"),Ie,te(";")):N(K("form"),_n,te("{"),K("}"),je,X,X)):c&&xe=="namespace"?(O.marked="keyword",N(K("form"),le,ne,X)):c&&xe=="abstract"?(O.marked="keyword",N(ne)):N(K("stat"),We):pe=="switch"?N(K("form"),Z,te("{"),K("}","switch"),$,je,X,X,W):pe=="case"?N(le,te(":")):pe=="default"?N(te(":")):pe=="catch"?N(K("form"),z,se,ne,X,W):pe=="export"?N(K("stat"),Oe,X):pe=="import"?N(K("stat"),ut,X):pe=="async"?N(ne):xe=="@"?N(le,ne):F(K("stat"),le,te(";"),X)}function se(pe){if(pe=="(")return N(Et,te(")"))}function le(pe,xe){return ye(pe,xe,!1)}function J(pe,xe){return ye(pe,xe,!0)}function Z(pe){return pe!="("?F():N(K(")"),be,te(")"),X)}function ye(pe,xe,Ee){if(O.state.fatArrowAt==O.stream.start){var Ze=Ee?Be:ke;if(pe=="(")return N(z,K(")"),dt(Et,")"),X,te("=>"),Ze,W);if(pe=="variable")return F(z,_n,te("=>"),Ze,W)}var Vt=Ee?Ae:ve;return C.hasOwnProperty(pe)?N(Vt):pe=="function"?N(sa,Vt):pe=="class"||c&&xe=="interface"?(O.marked="keyword",N(K("form"),Kt,X)):pe=="keyword c"||pe=="async"?N(Ee?J:le):pe=="("?N(K(")"),be,te(")"),X,Vt):pe=="operator"||pe=="spread"?N(Ee?J:le):pe=="["?N(K("]"),Fn,X,Vt):pe=="{"?ot(At,"}",null,Vt):pe=="quasi"?F(Ce,Vt):pe=="new"?N($e(Ee)):N()}function be(pe){return pe.match(/[;\}\)\],]/)?F():F(le)}function ve(pe,xe){return pe==","?N(be):Ae(pe,xe,!1)}function Ae(pe,xe,Ee){var Ze=Ee==0?ve:Ae,Vt=Ee==0?le:J;if(pe=="=>")return N(z,Ee?Be:ke,W);if(pe=="operator")return/\+\+|--/.test(xe)||c&&xe=="!"?N(Ze):c&&xe=="<"&&O.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/,!1)?N(K(">"),dt(Ie,">"),X,Ze):xe=="?"?N(le,te(":"),Vt):N(Vt);if(pe=="quasi")return F(Ce,Ze);if(pe!=";"){if(pe=="(")return ot(J,")","call",Ze);if(pe==".")return N(st,Ze);if(pe=="[")return N(K("]"),be,te("]"),X,Ze);if(c&&xe=="as")return O.marked="keyword",N(Ie,Ze);if(pe=="regexp")return O.state.lastType=O.marked="operator",O.stream.backUp(O.stream.pos-O.stream.start-1),N(Vt)}}function Ce(pe,xe){return pe!="quasi"?F():xe.slice(xe.length-2)!="${"?N(Ce):N(be,_e)}function _e(pe){if(pe=="}")return O.marked="string-2",O.state.tokenize=x,N(Ce)}function ke(pe){return E(O.stream,O.state),F(pe=="{"?ne:le)}function Be(pe){return E(O.stream,O.state),F(pe=="{"?ne:J)}function $e(pe){return function(xe){return xe=="."?N(pe?ge:rt):xe=="variable"&&c?N(zn,pe?Ae:ve):F(pe?J:le)}}function rt(pe,xe){if(xe=="target")return O.marked="keyword",N(ve)}function ge(pe,xe){if(xe=="target")return O.marked="keyword",N(Ae)}function We(pe){return pe==":"?N(X,ne):F(ve,te(";"),X)}function st(pe){if(pe=="variable")return O.marked="property",N()}function At(pe,xe){return pe=="async"?(O.marked="property",N(At)):pe=="variable"||O.style=="keyword"?(O.marked="property",xe=="get"||xe=="set"?N(Ve):(c&&O.state.fatArrowAt==O.stream.start&&(Ee=O.stream.match(/^\s*:\s*/,!1))&&(O.state.fatArrowAt=O.stream.pos+Ee[0].length),N(it))):pe=="number"||pe=="string"?(O.marked=l?"property":O.style+" property",N(it)):pe=="jsonld-keyword"?N(it):c&&L(xe)?(O.marked="keyword",N(At)):pe=="["?N(le,we,te("]"),it):pe=="spread"?N(J,it):xe=="*"?(O.marked="keyword",N(At)):pe==":"?F(it):void 0;var Ee}function Ve(pe){return pe!="variable"?F(it):(O.marked="property",N(sa))}function it(pe){return pe==":"?N(J):pe=="("?F(sa):void 0}function dt(pe,xe,Ee){function Ze(Vt,Cn){if(Ee?Ee.indexOf(Vt)>-1:Vt==","){var on=O.state.lexical;return on.info=="call"&&(on.pos=(on.pos||0)+1),N(function(Ln,Mr){return Ln==xe||Mr==xe?F():F(pe)},Ze)}return Vt==xe||Cn==xe?N():Ee&&Ee.indexOf(";")>-1?F(pe):N(te(xe))}return function(Vt,Cn){return Vt==xe||Cn==xe?N():F(pe,Ze)}}function ot(pe,xe,Ee){for(var Ze=3;Ze<arguments.length;Ze++)O.cc.push(arguments[Ze]);return N(K(xe,Ee),dt(pe,xe),X)}function je(pe){return pe=="}"?N():F(ne,je)}function we(pe,xe){if(c){if(pe==":")return N(Ie);if(xe=="?")return N(we)}}function ze(pe,xe){if(c&&(pe==":"||xe=="in"))return N(Ie)}function me(pe){if(c&&pe==":")return O.stream.match(/^\s*\w+\s+is\b/,!1)?N(le,Me,Ie):N(Ie)}function Me(pe,xe){if(xe=="is")return O.marked="keyword",N()}function Ie(pe,xe){return xe=="keyof"||xe=="typeof"||xe=="infer"||xe=="readonly"?(O.marked="keyword",N(xe=="typeof"?J:Ie)):pe=="variable"||xe=="void"?(O.marked="type",N(rn)):xe=="|"||xe=="&"?N(Ie):pe=="string"||pe=="number"||pe=="atom"?N(rn):pe=="["?N(K("]"),dt(Ie,"]",","),X,rn):pe=="{"?N(K("}"),gt,X,rn):pe=="("?N(dt(Zt,")"),ht,rn):pe=="<"?N(dt(Ie,">"),Ie):pe=="quasi"?F(qt,rn):void 0}function ht(pe){if(pe=="=>")return N(Ie)}function gt(pe){return pe.match(/[\}\)\]]/)?N():pe==","||pe==";"?N(gt):F(vt,gt)}function vt(pe,xe){return pe=="variable"||O.style=="keyword"?(O.marked="property",N(vt)):xe=="?"||pe=="number"||pe=="string"?N(vt):pe==":"?N(Ie):pe=="["?N(te("variable"),ze,te("]"),vt):pe=="("?F(He,vt):pe.match(/[;\}\)\],]/)?void 0:N()}function qt(pe,xe){return pe!="quasi"?F():xe.slice(xe.length-2)!="${"?N(qt):N(Ie,mn)}function mn(pe){if(pe=="}")return O.marked="string-2",O.state.tokenize=x,N(qt)}function Zt(pe,xe){return pe=="variable"&&O.stream.match(/^\s*[?:]/,!1)||xe=="?"?N(Zt):pe==":"?N(Ie):pe=="spread"?N(Zt):F(Ie)}function rn(pe,xe){return xe=="<"?N(K(">"),dt(Ie,">"),X,rn):xe=="|"||pe=="."||xe=="&"?N(Ie):pe=="["?N(Ie,te("]"),rn):xe=="extends"||xe=="implements"?(O.marked="keyword",N(Ie)):xe=="?"?N(Ie,te(":"),Ie):void 0}function zn(pe,xe){if(xe=="<")return N(K(">"),dt(Ie,">"),X,rn)}function tt(){return F(Ie,kt)}function kt(pe,xe){if(xe=="=")return N(Ie)}function An(pe,xe){return xe=="enum"?(O.marked="keyword",N(Mo)):F(_n,we,Ar,Jr)}function _n(pe,xe){return c&&L(xe)?(O.marked="keyword",N(_n)):pe=="variable"?(P(xe),N()):pe=="spread"?N(_n):pe=="["?ot(Qr,"]"):pe=="{"?ot(po,"}"):void 0}function po(pe,xe){return pe!="variable"||O.stream.match(/^\s*:/,!1)?(pe=="variable"&&(O.marked="property"),pe=="spread"?N(_n):pe=="}"?F():pe=="["?N(le,te("]"),te(":"),po):N(te(":"),_n,Ar)):(P(xe),N(Ar))}function Qr(){return F(_n,Ar)}function Ar(pe,xe){if(xe=="=")return N(J)}function Jr(pe){if(pe==",")return N(An)}function Ao(pe,xe){if(pe=="keyword b"&&xe=="else")return N(K("form","else"),ne,X)}function pl(pe,xe){return xe=="await"?N(pl):pe=="("?N(K(")"),Go,X):void 0}function Go(pe){return pe=="var"?N(An,za):pe=="variable"?N(za):F(za)}function za(pe,xe){return pe==")"?N():pe==";"?N(za):xe=="in"||xe=="of"?(O.marked="keyword",N(le,za)):F(le,za)}function sa(pe,xe){return xe=="*"?(O.marked="keyword",N(sa)):pe=="variable"?(P(xe),N(sa)):pe=="("?N(z,K(")"),dt(Et,")"),X,me,ne,W):c&&xe=="<"?N(K(">"),dt(tt,">"),X,sa):void 0}function He(pe,xe){return xe=="*"?(O.marked="keyword",N(He)):pe=="variable"?(P(xe),N(He)):pe=="("?N(z,K(")"),dt(Et,")"),X,me,W):c&&xe=="<"?N(K(">"),dt(tt,">"),X,He):void 0}function lt(pe,xe){return pe=="keyword"||pe=="variable"?(O.marked="type",N(lt)):xe=="<"?N(K(">"),dt(tt,">"),X):void 0}function Et(pe,xe){return xe=="@"&&N(le,Et),pe=="spread"?N(Et):c&&L(xe)?(O.marked="keyword",N(Et)):c&&pe=="this"?N(we,Ar):F(_n,we,Ar)}function Kt(pe,xe){return pe=="variable"?gr(pe,xe):Bn(pe,xe)}function gr(pe,xe){if(pe=="variable")return P(xe),N(Bn)}function Bn(pe,xe){return xe=="<"?N(K(">"),dt(tt,">"),X,Bn):xe=="extends"||xe=="implements"||c&&pe==","?(xe=="implements"&&(O.marked="keyword"),N(c?Ie:le,Bn)):pe=="{"?N(K("}"),Ne,X):void 0}function Ne(pe,xe){return pe=="async"||pe=="variable"&&(xe=="static"||xe=="get"||xe=="set"||c&&L(xe))&&O.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(O.marked="keyword",N(Ne)):pe=="variable"||O.style=="keyword"?(O.marked="property",N(Tt,Ne)):pe=="number"||pe=="string"?N(Tt,Ne):pe=="["?N(le,we,te("]"),Tt,Ne):xe=="*"?(O.marked="keyword",N(Ne)):c&&pe=="("?F(He,Ne):pe==";"||pe==","?N(Ne):pe=="}"?N():xe=="@"?N(le,Ne):void 0}function Tt(pe,xe){if(xe=="!"||xe=="?")return N(Tt);if(pe==":")return N(Ie,Ar);if(xe=="=")return N(J);var Ee=O.state.lexical.prev;return F(Ee&&Ee.info=="interface"?He:sa)}function Oe(pe,xe){return xe=="*"?(O.marked="keyword",N(Ct,te(";"))):xe=="default"?(O.marked="keyword",N(le,te(";"))):pe=="{"?N(dt(nt,"}"),Ct,te(";")):F(ne)}function nt(pe,xe){return xe=="as"?(O.marked="keyword",N(te("variable"))):pe=="variable"?F(J,nt):void 0}function ut(pe){return pe=="string"?N():pe=="("?F(le):pe=="."?F(ve):F(xt,En,Ct)}function xt(pe,xe){return pe=="{"?ot(xt,"}"):(pe=="variable"&&P(xe),xe=="*"&&(O.marked="keyword"),N(ln))}function En(pe){if(pe==",")return N(xt,En)}function ln(pe,xe){if(xe=="as")return O.marked="keyword",N(xt)}function Ct(pe,xe){if(xe=="from")return O.marked="keyword",N(le)}function Fn(pe){return pe=="]"?N():F(dt(J,"]"))}function Mo(){return F(K("form"),_n,te("{"),K("}"),dt(jr,"}"),X,X)}function jr(){return F(_n,Ar)}function cr(pe,xe){return pe.lastType=="operator"||pe.lastType==","||p.test(xe.charAt(0))||/[,.]/.test(xe.charAt(0))}function Ha(pe,xe,Ee){return xe.tokenize==b&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(xe.lastType)||xe.lastType=="quasi"&&/\{\s*$/.test(pe.string.slice(0,pe.pos-(Ee||0)))}return z.lex=$.lex=!0,W.lex=!0,X.lex=!0,{startState:function(pe){var xe={tokenize:b,lastType:"sof",cc:[],lexical:new T((pe||0)-i,0,"block",!1),localVars:n.localVars,context:n.localVars&&new H(null,null,!1),indented:pe||0};return n.globalVars&&typeof n.globalVars=="object"&&(xe.globalVars=n.globalVars),xe},token:function(pe,xe){if(pe.sol()&&(xe.lexical.hasOwnProperty("align")||(xe.lexical.align=!1),xe.indented=pe.indentation(),E(pe,xe)),xe.tokenize!=w&&pe.eatSpace())return null;var Ee=xe.tokenize(pe,xe);return r=="comment"?Ee:(xe.lastType=r!="operator"||o!="++"&&o!="--"?r:"incdec",I(xe,Ee,r,o,pe))},indent:function(pe,xe){if(pe.tokenize==w||pe.tokenize==x)return e.Pass;if(pe.tokenize!=b)return 0;var Ee,Ze=xe&&xe.charAt(0),Vt=pe.lexical;if(!/^\s*else\b/.test(xe))for(var Cn=pe.cc.length-1;Cn>=0;--Cn){var on=pe.cc[Cn];if(on==X)Vt=Vt.prev;else if(on!=Ao&&on!=W)break}for(;(Vt.type=="stat"||Vt.type=="form")&&(Ze=="}"||(Ee=pe.cc[pe.cc.length-1])&&(Ee==ve||Ee==Ae)&&!/^[,\.=+\-*:?[\(]/.test(xe));)Vt=Vt.prev;a&&Vt.type==")"&&Vt.prev.type=="stat"&&(Vt=Vt.prev);var Ln=Vt.type,Mr=Ze==Ln;return Ln=="vardef"?Vt.indented+(pe.lastType=="operator"||pe.lastType==","?Vt.info.length+1:0):Ln=="form"&&Ze=="{"?Vt.indented:Ln=="form"?Vt.indented+i:Ln=="stat"?Vt.indented+(cr(pe,xe)?a||i:0):Vt.info!="switch"||Mr||n.doubleIndentSwitch==0?Vt.align?Vt.column+(Mr?0:1):Vt.indented+(Mr?0:i):Vt.indented+(/^(?:case|default)\b/.test(xe)?i:2*i)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:s?null:"/*",blockCommentEnd:s?null:"*/",blockCommentContinue:s?null:" * ",lineComment:s?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:s?"json":"javascript",jsonldMode:l,jsonMode:s,expressionAllowed:Ha,skipExpression:function(pe){I(pe,"atom","atom","true",new e.StringStream("",2,null))}}}),e.registerHelper("wordChars","javascript",/[\w$]/),e.defineMIME("text/javascript","javascript"),e.defineMIME("text/ecmascript","javascript"),e.defineMIME("application/javascript","javascript"),e.defineMIME("application/x-javascript","javascript"),e.defineMIME("application/ecmascript","javascript"),e.defineMIME("application/json",{name:"javascript",json:!0}),e.defineMIME("application/x-json",{name:"javascript",json:!0}),e.defineMIME("application/manifest+json",{name:"javascript",json:!0}),e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),e.defineMIME("text/typescript",{name:"javascript",typescript:!0}),e.defineMIME("application/typescript",{name:"javascript",typescript:!0})})(Wx()),function(e){var t="CodeMirror-hint",n="CodeMirror-hint-active";function r(v,g){if(this.cm=v,this.options=g,this.widget=null,this.debounce=0,this.tick=0,this.startPos=this.cm.getCursor("start"),this.startLen=this.cm.getLine(this.startPos.line).length-this.cm.getSelection().length,this.options.updateOnCursorActivity){var b=this;v.on("cursorActivity",this.activityFunc=function(){b.cursorActivity()})}}e.showHint=function(v,g,b){if(!g)return v.showHint(b);b&&b.async&&(g.async=!0);var y={hint:g};if(b)for(var w in b)y[w]=b[w];return v.showHint(y)},e.defineExtension("showHint",function(v){v=a(this,this.getCursor("start"),v);var g=this.listSelections();if(!(g.length>1)){if(this.somethingSelected()){if(!v.hint.supportsSelection)return;for(var b=0;b<g.length;b++)if(g[b].head.line!=g[b].anchor.line)return}this.state.completionActive&&this.state.completionActive.close();var y=this.state.completionActive=new r(this,v);!y.options.hint||(e.signal(this,"startCompletion",this),y.update(!0))}}),e.defineExtension("closeHint",function(){this.state.completionActive&&this.state.completionActive.close()});var o=window.requestAnimationFrame||function(v){return setTimeout(v,1e3/60)},i=window.cancelAnimationFrame||clearTimeout;function a(v,g,b){var y=v.options.hintOptions,w={};for(var x in m)w[x]=m[x];if(y)for(var x in y)y[x]!==void 0&&(w[x]=y[x]);if(b)for(var x in b)b[x]!==void 0&&(w[x]=b[x]);return w.hint.resolve&&(w.hint=w.hint.resolve(v,g)),w}function l(v){return typeof v=="string"?v:v.text}function s(v,g){var b={Up:function(){g.moveFocus(-1)},Down:function(){g.moveFocus(1)},PageUp:function(){g.moveFocus(1-g.menuSize(),!0)},PageDown:function(){g.moveFocus(g.menuSize()-1,!0)},Home:function(){g.setFocus(0)},End:function(){g.setFocus(g.length-1)},Enter:g.pick,Tab:g.pick,Esc:g.close};/Mac/.test(navigator.platform)&&(b["Ctrl-P"]=function(){g.moveFocus(-1)},b["Ctrl-N"]=function(){g.moveFocus(1)});var y=v.options.customKeys,w=y?{}:b;function x(C,T){var k;k=typeof T!="string"?function(I){return T(I,g)}:b.hasOwnProperty(T)?b[T]:T,w[C]=k}if(y)for(var _ in y)y.hasOwnProperty(_)&&x(_,y[_]);var E=v.options.extraKeys;if(E)for(var _ in E)E.hasOwnProperty(_)&&x(_,E[_]);return w}function u(v,g){for(;g&&g!=v;){if(g.nodeName.toUpperCase()==="LI"&&g.parentNode==v)return g;g=g.parentNode}}function c(v,g){this.id="cm-complete-"+Math.floor(Math.random(1e6)),this.completion=v,this.data=g,this.picked=!1;var b=this,y=v.cm,w=y.getInputField().ownerDocument,x=w.defaultView||w.parentWindow,_=this.hints=w.createElement("ul");_.setAttribute("role","listbox"),_.setAttribute("aria-expanded","true"),_.id=this.id;var E=v.cm.options.theme;_.className="CodeMirror-hints "+E,this.selectedHint=g.selectedHint||0;for(var C=g.list,T=0;T<C.length;++T){var k=_.appendChild(w.createElement("li")),I=C[T],O=t+(T!=this.selectedHint?"":" "+n);I.className!=null&&(O=I.className+" "+O),k.className=O,T==this.selectedHint&&k.setAttribute("aria-selected","true"),k.id=this.id+"-"+T,k.setAttribute("role","option"),I.render?I.render(k,g,I):k.appendChild(w.createTextNode(I.displayText||l(I))),k.hintId=T}var F=v.options.container||w.body,N=y.cursorCoords(v.options.alignWithWord?g.from:null),B=N.left,P=N.bottom,V=!0,L=0,H=0;if(F!==w.body){var U=["absolute","relative","fixed"].indexOf(x.getComputedStyle(F).position)!==-1?F:F.offsetParent,G=U.getBoundingClientRect(),z=w.body.getBoundingClientRect();L=G.left-z.left-U.scrollLeft,H=G.top-z.top-U.scrollTop}_.style.left=B-L+"px",_.style.top=P-H+"px";var $=x.innerWidth||Math.max(w.body.offsetWidth,w.documentElement.offsetWidth),W=x.innerHeight||Math.max(w.body.offsetHeight,w.documentElement.offsetHeight);F.appendChild(_),y.getInputField().setAttribute("aria-autocomplete","list"),y.getInputField().setAttribute("aria-owns",this.id),y.getInputField().setAttribute("aria-activedescendant",this.id+"-"+this.selectedHint);var K,X=v.options.moveOnOverlap?_.getBoundingClientRect():new DOMRect,te=!!v.options.paddingForScrollbar&&_.scrollHeight>_.clientHeight+1;if(setTimeout(function(){K=y.getScrollInfo()}),X.bottom-W>0){var ne=X.bottom-X.top;if(N.top-(N.bottom-X.top)-ne>0)_.style.top=(P=N.top-ne-H)+"px",V=!1;else if(ne>W){_.style.height=W-5+"px",_.style.top=(P=N.bottom-X.top-H)+"px";var se=y.getCursor();g.from.ch!=se.ch&&(N=y.cursorCoords(se),_.style.left=(B=N.left-L)+"px",X=_.getBoundingClientRect())}}var le,J=X.right-$;if(te&&(J+=y.display.nativeBarWidth),J>0&&(X.right-X.left>$&&(_.style.width=$-5+"px",J-=X.right-X.left-$),_.style.left=(B=Math.max(N.left-J-L,0))+"px"),te)for(var Z=_.firstChild;Z;Z=Z.nextSibling)Z.style.paddingRight=y.display.nativeBarWidth+"px";y.addKeyMap(this.keyMap=s(v,{moveFocus:function(be,ve){b.changeActive(b.selectedHint+be,ve)},setFocus:function(be){b.changeActive(be)},menuSize:function(){return b.screenAmount()},length:C.length,close:function(){v.close()},pick:function(){b.pick()},data:g})),v.options.closeOnUnfocus&&(y.on("blur",this.onBlur=function(){le=setTimeout(function(){v.close()},100)}),y.on("focus",this.onFocus=function(){clearTimeout(le)})),y.on("scroll",this.onScroll=function(){var be=y.getScrollInfo(),ve=y.getWrapperElement().getBoundingClientRect();K||(K=y.getScrollInfo());var Ae=P+K.top-be.top,Ce=Ae-(x.pageYOffset||(w.documentElement||w.body).scrollTop);if(V||(Ce+=_.offsetHeight),Ce<=ve.top||Ce>=ve.bottom)return v.close();_.style.top=Ae+"px",_.style.left=B+K.left-be.left+"px"}),e.on(_,"dblclick",function(be){var ve=u(_,be.target||be.srcElement);ve&&ve.hintId!=null&&(b.changeActive(ve.hintId),b.pick())}),e.on(_,"click",function(be){var ve=u(_,be.target||be.srcElement);ve&&ve.hintId!=null&&(b.changeActive(ve.hintId),v.options.completeOnSingleClick&&b.pick())}),e.on(_,"mousedown",function(){setTimeout(function(){y.focus()},20)});var ye=this.getSelectedHintRange();return(ye.from!==0||ye.to!==0)&&this.scrollToActive(),e.signal(g,"select",C[this.selectedHint],_.childNodes[this.selectedHint]),!0}function d(v,g){if(!v.somethingSelected())return g;for(var b=[],y=0;y<g.length;y++)g[y].supportsSelection&&b.push(g[y]);return b}function f(v,g,b,y){if(v.async)v(g,y,b);else{var w=v(g,b);w&&w.then?w.then(y):y(w)}}function p(v,g){var b,y=v.getHelpers(g,"hint");if(y.length){var w=function(x,_,E){var C=d(x,y);function T(k){if(k==C.length)return _(null);f(C[k],x,E,function(I){I&&I.list.length>0?_(I):T(k+1)})}T(0)};return w.async=!0,w.supportsSelection=!0,w}return(b=v.getHelper(v.getCursor(),"hintWords"))?function(x){return e.hint.fromList(x,{words:b})}:e.hint.anyword?function(x,_){return e.hint.anyword(x,_)}:function(){}}r.prototype={close:function(){!this.active()||(this.cm.state.completionActive=null,this.tick=null,this.options.updateOnCursorActivity&&this.cm.off("cursorActivity",this.activityFunc),this.widget&&this.data&&e.signal(this.data,"close"),this.widget&&this.widget.close(),e.signal(this.cm,"endCompletion",this.cm))},active:function(){return this.cm.state.completionActive==this},pick:function(v,g){var b=v.list[g],y=this;this.cm.operation(function(){b.hint?b.hint(y.cm,v,b):y.cm.replaceRange(l(b),b.from||v.from,b.to||v.to,"complete"),e.signal(v,"pick",b),y.cm.scrollIntoView()}),this.options.closeOnPick&&this.close()},cursorActivity:function(){this.debounce&&(i(this.debounce),this.debounce=0);var v=this.startPos;this.data&&(v=this.data.from);var g=this.cm.getCursor(),b=this.cm.getLine(g.line);if(g.line!=this.startPos.line||b.length-g.ch!=this.startLen-this.startPos.ch||g.ch<v.ch||this.cm.somethingSelected()||!g.ch||this.options.closeCharacters.test(b.charAt(g.ch-1)))this.close();else{var y=this;this.debounce=o(function(){y.update()}),this.widget&&this.widget.disable()}},update:function(v){if(this.tick!=null){var g=this,b=++this.tick;f(this.options.hint,this.cm,this.options,function(y){g.tick==b&&g.finishUpdate(y,v)})}},finishUpdate:function(v,g){this.data&&e.signal(this.data,"update");var b=this.widget&&this.widget.picked||g&&this.options.completeSingle;this.widget&&this.widget.close(),this.data=v,v&&v.list.length&&(b&&v.list.length==1?this.pick(v,0):(this.widget=new c(this,v),e.signal(v,"shown")))}},c.prototype={close:function(){if(this.completion.widget==this){this.completion.widget=null,this.hints.parentNode&&this.hints.parentNode.removeChild(this.hints),this.completion.cm.removeKeyMap(this.keyMap);var v=this.completion.cm.getInputField();v.removeAttribute("aria-activedescendant"),v.removeAttribute("aria-owns");var g=this.completion.cm;this.completion.options.closeOnUnfocus&&(g.off("blur",this.onBlur),g.off("focus",this.onFocus)),g.off("scroll",this.onScroll)}},disable:function(){this.completion.cm.removeKeyMap(this.keyMap);var v=this;this.keyMap={Enter:function(){v.picked=!0}},this.completion.cm.addKeyMap(this.keyMap)},pick:function(){this.completion.pick(this.data,this.selectedHint)},changeActive:function(v,g){if(v>=this.data.list.length?v=g?this.data.list.length-1:0:v<0&&(v=g?0:this.data.list.length-1),this.selectedHint!=v){var b=this.hints.childNodes[this.selectedHint];b&&(b.className=b.className.replace(" "+n,""),b.removeAttribute("aria-selected")),(b=this.hints.childNodes[this.selectedHint=v]).className+=" "+n,b.setAttribute("aria-selected","true"),this.completion.cm.getInputField().setAttribute("aria-activedescendant",b.id),this.scrollToActive(),e.signal(this.data,"select",this.data.list[this.selectedHint],b)}},scrollToActive:function(){var v=this.getSelectedHintRange(),g=this.hints.childNodes[v.from],b=this.hints.childNodes[v.to],y=this.hints.firstChild;g.offsetTop<this.hints.scrollTop?this.hints.scrollTop=g.offsetTop-y.offsetTop:b.offsetTop+b.offsetHeight>this.hints.scrollTop+this.hints.clientHeight&&(this.hints.scrollTop=b.offsetTop+b.offsetHeight-this.hints.clientHeight+y.offsetTop)},screenAmount:function(){return Math.floor(this.hints.clientHeight/this.hints.firstChild.offsetHeight)||1},getSelectedHintRange:function(){var v=this.completion.options.scrollMargin||0;return{from:Math.max(0,this.selectedHint-v),to:Math.min(this.data.list.length-1,this.selectedHint+v)}}},e.registerHelper("hint","auto",{resolve:p}),e.registerHelper("hint","fromList",function(v,g){var b,y=v.getCursor(),w=v.getTokenAt(y),x=e.Pos(y.line,w.start),_=y;w.start<y.ch&&/\w/.test(w.string.charAt(y.ch-w.start-1))?b=w.string.substr(0,y.ch-w.start):(b="",x=y);for(var E=[],C=0;C<g.words.length;C++){var T=g.words[C];T.slice(0,b.length)==b&&E.push(T)}if(E.length)return{list:E,from:x,to:_}}),e.commands.autocomplete=e.showHint;var m={hint:e.hint.auto,completeSingle:!0,alignWithWord:!0,closeCharacters:/[\s()\[\]{};:>,]/,closeOnPick:!0,closeOnUnfocus:!0,updateOnCursorActivity:!0,completeOnSingleClick:!0,container:null,customKeys:null,extraKeys:null,paddingForScrollbar:!0,moveOnOverlap:!0};e.defineOption("hintOptions",null)}(Wx()),function(e){var t=e.Pos;function n(v,g){for(var b=0,y=v.length;b<y;++b)g(v[b])}function r(v,g){if(!Array.prototype.indexOf){for(var b=v.length;b--;)if(v[b]===g)return!0;return!1}return v.indexOf(g)!=-1}function o(v,g,b,y){var w=v.getCursor(),x=b(v,w);if(!/\b(?:string|comment)\b/.test(x.type)){var _=e.innerMode(v.getMode(),x.state);if(_.mode.helperType!=="json"){x.state=_.state,/^[\w$_]*$/.test(x.string)?x.end>w.ch&&(x.end=w.ch,x.string=x.string.slice(0,w.ch-x.start)):x={start:w.ch,end:w.ch,string:"",state:x.state,type:x.string=="."?"property":null};for(var E=x;E.type=="property";){if((E=b(v,t(w.line,E.start))).string!=".")return;if(E=b(v,t(w.line,E.start)),!C)var C=[];C.push(E)}return{list:m(x,C,g,y),from:t(w.line,x.start),to:t(w.line,x.end)}}}}function i(v,g){return o(v,d,function(b,y){return b.getTokenAt(y)},g)}function a(v,g){var b=v.getTokenAt(g);return g.ch==b.start+1&&b.string.charAt(0)=="."?(b.end=b.start,b.string=".",b.type="property"):/^\.[\w$_]*$/.test(b.string)&&(b.type="property",b.start++,b.string=b.string.replace(/\./,"")),b}function l(v,g){return o(v,f,a,g)}e.registerHelper("hint","javascript",i),e.registerHelper("hint","coffeescript",l);var s="charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight toUpperCase toLowerCase split concat match replace search".split(" "),u="length concat join splice push pop shift unshift slice reverse sort indexOf lastIndexOf every some filter forEach map reduce reduceRight ".split(" "),c="prototype apply call bind".split(" "),d="break case catch class const continue debugger default delete do else export extends false finally for function if in import instanceof new null return super switch this throw true try typeof var void while with yield".split(" "),f="and break catch class continue delete do else extends false finally for if in instanceof isnt new no not null of off on or return switch then throw true try typeof until void while with yes".split(" ");function p(v,g){if(Object.getOwnPropertyNames&&Object.getPrototypeOf)for(var b=v;b;b=Object.getPrototypeOf(b))Object.getOwnPropertyNames(b).forEach(g);else for(var y in v)g(y)}function m(v,g,b,y){var w=[],x=v.string,_=y&&y.globalScope||window;function E(N){N.lastIndexOf(x,0)==0&&!r(w,N)&&w.push(N)}function C(N){typeof N=="string"?n(s,E):N instanceof Array?n(u,E):N instanceof Function&&n(c,E),p(N,E)}if(g&&g.length){var T,k=g.pop();for(k.type&&k.type.indexOf("variable")===0?(y&&y.additionalContext&&(T=y.additionalContext[k.string]),(!y||y.useGlobalScope!==!1)&&(T=T||_[k.string])):k.type=="string"?T="":k.type=="atom"?T=1:k.type=="function"&&(_.jQuery==null||k.string!="$"&&k.string!="jQuery"||typeof _.jQuery!="function"?_._!=null&&k.string=="_"&&typeof _._=="function"&&(T=_._()):T=_.jQuery());T!=null&&g.length;)T=T[g.pop().string];T!=null&&C(T)}else{for(var I=v.state.localVars;I;I=I.next)E(I.name);for(var O=v.state.context;O;O=O.prev)for(I=O.vars;I;I=I.next)E(I.name);for(I=v.state.globalVars;I;I=I.next)E(I.name);if(y&&y.additionalContext!=null)for(var F in y.additionalContext)E(F);(!y||y.useGlobalScope!==!1)&&C(_),n(b,E)}return w}}(Wx());const nu=e=>El({message:e,type:"error",customClass:"_fc-message-error"}),jo=(e,t)=>{const n=e.__vccOpts||e;for(const[r,o]of t)n[r]=o;return n},Pfe="[[FORM-CREATE-PREFIX-",Lfe="-FORM-CREATE-SUFFIX]]",FUe=Te({name:"FnEditor",emits:["update:modelValue","change"],props:{modelValue:[String,Function],name:String,args:Array,body:Boolean,button:Boolean,fnx:Boolean},inject:["designer"],data:()=>({editor:null,fn:"",visible:!1,value:""}),watch:{modelValue(e){e!=this.value&&(!e||!e.__json||e.__json&&e.__json!=this.value)&&this.editor&&this.editor.setValue(this.tidyValue())}},computed:{t(){return this.designer.setupState.t},argStr(){return(this.args||[]).map(e=>typeof e=="string"?e:e.name).join(", ")},argList(){return this.args.map(e=>typeof e=="string"?{name:e,type:"string"}:e)}},mounted(){this.$nextTick(()=>{this.load()})},methods:{save(){const e=this.editor.getValue()||"";if(e.trim()==="")this.fn="";else{let t;try{t=new Function("return function "+this.name+"("+this.argStr+"){"+e+"}")()}catch(n){return console.error(n),nu(this.t("struct.errorMsg")),!1}this.body?this.fn=(this.fnx?"$FNX:":"")+e:this.fn=Pfe+t+Lfe}return this.submit(),!0},submit(){this.$emit("update:modelValue",this.fn),this.$emit("change",this.fn),this.value=this.fn,this.visible=!1},tidyValue(){let e=this.modelValue||"";return e.__json&&(e=e.__json),this.fnx&&e.indexOf("$FNX:")===0&&(e=e.slice(5)),typeof e=="function"?(e=pp(e),e=/(?:function\s*\w*\s*\(.*?\)|\(\s*.*?\s*\)\s*=>)\s*{([\s\S]*)}/g.exec(e)[1].trim()):this.body||(e=e.replace(Pfe+"function "+this.name+"("+this.argStr+"){","").replace("}"+Lfe,"")),this.value=e,e},load(){this.$nextTick(()=>{let e=this.tidyValue();this.editor=Fo(Mg(this.$refs.editor,{lineNumbers:!0,mode:{name:"javascript",globalVars:!0},extraKeys:{"Ctrl-Space":"autocomplete"},line:!0,tabSize:2,lineWrapping:!0,value:e})),this.editor.on("inputRead",(t,n)=>{n.keyCode===32&&n.ctrlKey&&Mg.showHint(t,Mg.hint.javascript)}),this.editor.on("change",()=>{this.visible=!0}),function(t){t.addKeyMap({name:"autoParentheses","'('":n=>{const r=n.getCursor();n.replaceRange("()",r,r,"+insert"),n.doc.setCursor({line:r.line,ch:r.ch+1})}}),t.addKeyMap({name:"autoBraces","'{'":n=>{const r=n.getCursor();n.replaceRange("{}",r,r,"+insert"),n.doc.setCursor({line:r.line,ch:r.ch+1})}}),t.addKeyMap({name:"autoBrackets","'['":n=>{const r=n.getCursor();n.replaceRange("[]",r,r,"+insert"),n.doc.setCursor({line:r.line,ch:r.ch+1})}})}(this.editor)})}}}),RUe={class:"_fd-fn"},IUe={class:"_fd-fn-tip"},BUe=ce("div",{class:"_fd-fn-ind"},null,-1),PUe={class:"cm-keyword"},LUe={key:0},jUe={class:"_fd-fn-arg"},VUe=ce("i",{class:"fc-icon icon-question"},null,-1),zUe={ref:"editor",class:"_fd-fn-editor"},HUe=ce("div",{class:"_fd-fn-tip"},[ce("div",{class:"_fd-fn-ind"}),ce("div",{class:"cm-keyword"},"}")],-1),Gx=jo(FUe,[["render",function(e,t,n,r,o,i){const a=Qe("el-table-column"),l=Qe("el-table"),s=Qe("el-popover"),u=Qe("el-button");return Y(),fe("div",RUe,[ce("div",IUe,[BUe,ce("div",PUe,[ce("span",null,[Dt("function "+Ye(e.name)+"(",1),(Y(!0),fe(bt,null,bn(e.argList,(c,d)=>(Y(),fe(bt,null,[Dt(Ye(d>0?", ":""),1),c.type==="string"?(Y(),fe("span",LUe,Ye(c.name),1)):(Y(),Le(s,{key:1,placement:"top-start",width:400,trigger:"click",title:c.name,content:c.info||""},{reference:he(()=>[ce("span",jUe,[Dt(Ye(c.name),1),VUe])]),default:he(()=>[c.columns?(Y(),Le(l,{key:0,data:c.columns,border:""},{default:he(()=>[ie(a,{width:"120",property:"label",label:e.t("event.label")},null,8,["label"]),ie(a,{property:"info",label:e.t("event.info")},null,8,["label"]),ie(a,{width:"80",property:"type",label:e.t("event.type")},null,8,["label"])]),_:2},1032,["data"])):Fe("",!0)]),_:2},1032,["title","content"]))],64))),256)),Dt(") {")])])]),ce("div",zUe,null,512),HUe,e.visible&&e.button?(Y(),Le(u,{key:0,type:"primary",size:"small",onClick:e.save},{default:he(()=>[Dt(Ye(e.t("props.save")),1)]),_:1},8,["onClick"])):Fe("",!0)])}]]),Ng="$FNX:",qx=e=>Pr.String(e)&&e.indexOf(Ng)===0,$Ue=Te({name:"EventConfig",emits:["update:modelValue"],props:{modelValue:[Object,void 0,null],componentName:"",eventName:{type:Array,default:()=>[]}},inject:["designer"],components:{FnEditor:Gx},data:()=>({visible:!1,activeData:null,val:null,defActive:"no",event:{},cus:!1,cusValue:"",eventStr:""}),computed:{t(){return this.designer.setupState.t},eventNum(){let e=0;return Object.keys(this.modelValue||{}).forEach(t=>{e+=Array.isArray(this.modelValue[t])?this.modelValue[t].length:1}),e},fnArgs(){return[Wde(this.t)]}},watch:{visible(e){this.event=e?this.loadFN(Cx({},this.modelValue||{})):{},e||(this.destroy(),this.closeCus())}},methods:{addCus(){const e=this.cusValue&&this.cusValue.trim();e&&(this.closeCus(),this.add(e))},closeCus(){this.cus=!1,this.cusValue=""},cusEvent(){this.cus=!0},loadFN(e){const t={};return Object.keys(e).forEach(n=>{if(Array.isArray(e[n])){const r=[];e[n].forEach(o=>{qx(o)?r.push(o.replace(Ng,"")):Pr.Function(o)&&qx(o.__json)?r.push(o.__json.replace(Ng,"")):o&&o.indexOf("$GLOBAL:")===0&&r.push(o)}),t[n]=r}else qx(e[n])?t[n]=[e[n].replace(Ng,"")]:Pr.Function(e[n])&&qx(e[n].__json)?t[n]=[e[n].__json.replace(Ng,"")]:e[n]&&e[n].indexOf("$GLOBAL:")===0&&(t[n]=[e[n]])}),t},parseFN(e){const t={};return Object.keys(e).forEach(n=>{const r=[];e[n].forEach((o,i)=>{r[i]=o.indexOf("$GLOBAL:")!==0?Ng+o:o}),r.length>0&&(t[n]=r.length===1?r[0]:r)}),t},add(e){let t={};if(Array.isArray(this.event[e]))this.event[e].push(""),t={name:e,item:this.event[e],index:this.event[e].length-1};else if(this.event[e]){const n=[this.event[e],""];this.event[e]=n,t={name:e,item:n,index:1}}else{const n=[""];this.event[e]=n,t={name:e,item:n,index:0}}this.activeData||this.edit(t)},edit(e){e.key=vr(),e.item?this.val=e.item[e.index]:this.val=this.event[e.name],this.activeData=e,this.eventStr=this.val,this.defActive=e.name+(e.index||0)},save(){if(!this.$refs.fn.save())return;const e=this.eventStr;this.activeData.item?this.activeData.item[this.activeData.index]=e:this.event[this.activeData.name]=e,this.destroy()},rm(e){e.index!==void 0?e.item.splice(e.index,1):this.$delete(this.event,e.name),this.defActive===e.name+(e.index||0)&&this.destroy()},destroy(){this.activeData=null,this.val=null,this.defActive="no"},close(){this.destroy()},submit(){if(this.activeData)return nu(this.t("event.saveMsg"));this.$emit("update:modelValue",this.parseFN(this.event)),this.visible=!1,this.destroy(),this.closeCus()}},beforeCreate(){window.$inject={$f:{},rule:[],self:{},option:{},inject:{},args:[]}}}),UUe={class:"_fd-event"},WUe={class:"el-dropdown-link"},GUe=ce("i",{class:"el-icon-arrow-down el-icon--right"},null,-1),qUe={class:"_fd-event-item"},KUe=["onClick"],YUe={class:"_fd-event-method"},XUe=["onClick"],QUe=["onClick"],JUe={class:"_fd-event-method"},ZUe=["onClick"],eWe={target:"_blank",href:"https://form-create.com/v3/instance"},jfe=jo($Ue,[["render",function(e,t,n,r,o,i){const a=Qe("el-button"),l=Qe("el-badge"),s=Qe("el-dropdown-item"),u=Qe("el-dropdown-menu"),c=Qe("el-dropdown"),d=Qe("el-header"),f=Qe("el-menu-item"),p=Qe("el-input"),m=Qe("el-menu"),v=Qe("el-main"),g=Qe("el-container"),b=Qe("el-aside"),y=Qe("FnEditor"),w=Qe("el-dialog");return Y(),fe("div",UUe,[ie(l,{value:e.eventNum,type:"warning",hidden:e.eventNum<1},{default:he(()=>[ie(a,{size:"small",onClick:t[0]||(t[0]=x=>e.visible=!0)},{default:he(()=>[Dt(Ye(e.t("event.title")),1)]),_:1})]),_:1},8,["value","hidden"]),ie(w,{class:"_fd-event-dialog",title:e.t("event.title"),modelValue:e.visible,"onUpdate:modelValue":t[8]||(t[8]=x=>e.visible=x),"destroy-on-close":"","close-on-click-modal":!1,"append-to-body":"",width:"980px"},{footer:he(()=>[ce("div",null,[ie(a,{size:"default",onClick:t[7]||(t[7]=x=>e.visible=!1)},{default:he(()=>[Dt(Ye(e.t("props.cancel")),1)]),_:1}),ie(a,{type:"primary",size:"default",onClick:e.submit,color:"#2f73ff"},{default:he(()=>[Dt(Ye(e.t("props.ok")),1)]),_:1},8,["onClick"])])]),default:he(()=>[ie(g,{class:"_fd-event-con",style:{height:"600px"}},{default:he(()=>[ie(b,{style:{width:"300px"}},{default:he(()=>[ie(g,{class:"_fd-event-l"},{default:he(()=>[ie(d,{class:"_fd-event-head",height:"40px"},{default:he(()=>[ie(c,{"popper-class":"_fd-event-dropdown",trigger:"click",size:"default",placement:"bottom-start"},{dropdown:he(()=>[ie(u,null,{default:he(()=>[(Y(!0),fe(bt,null,bn(e.eventName,x=>(Y(),Le(s,{key:x,onClick:_=>e.add(x)},{default:he(()=>[ce("div",qUe,[ce("span",null,Ye(x),1)])]),_:2},1032,["onClick"]))),128)),ie(s,{divided:e.eventName.length>0,onClick:e.cusEvent},{default:he(()=>[ce("div",null,Ye(e.t("props.custom")),1)]),_:1},8,["divided","onClick"])]),_:1})]),default:he(()=>[ce("span",WUe,[ie(a,{link:"",type:"primary",size:"default"},{default:he(()=>[Dt(Ye(e.t("event.create")),1),GUe]),_:1})])]),_:1})]),_:1}),ie(v,null,{default:he(()=>[ie(m,{"default-active":e.defActive,modelValue:e.activeData,"onUpdate:modelValue":t[5]||(t[5]=x=>e.activeData=x)},{default:he(()=>[(Y(!0),fe(bt,null,bn(e.event,(x,_)=>(Y(),fe(bt,null,[Array.isArray(x)?(Y(!0),fe(bt,{key:0},bn(x,(E,C)=>(Y(),Le(f,{key:_+C,index:_+C},{default:he(()=>[ce("div",{class:"_fd-event-title",onClick:Gt(T=>e.edit({name:_,item:x,index:C}),["stop"])},[ce("div",YUe,[ce("span",null,[Dt("function"),ce("span",null,Ye(_),1)])]),ce("i",{class:"fc-icon icon-delete",onClick:Gt(T=>e.rm({name:_,item:x,index:C}),["stop"])},null,8,XUe)],8,KUe)]),_:2},1032,["index"]))),128)):(Y(),Le(f,{key:1,index:_+0},{default:he(()=>[ce("div",{class:"_fd-event-title",onClick:Gt(E=>e.edit({name:_}),["stop"])},[ce("div",JUe,[ce("span",null,[Dt("function"),ce("span",null,Ye(_),1)])]),ce("i",{class:"fc-icon icon-delete",onClick:Gt(E=>e.rm({name:_}),["stop"])},null,8,ZUe)],8,QUe)]),_:2},1032,["index"]))],64))),256)),e.cus?(Y(),Le(f,{key:0,style:{"padding-left":"10px"},index:"custom"},{default:he(()=>[ce("div",{class:"_fd-event-title",onClick:t[4]||(t[4]=Gt(()=>{},["stop"]))},[ie(p,{type:"text",modelValue:e.cusValue,"onUpdate:modelValue":t[1]||(t[1]=x=>e.cusValue=x),size:"default",onKeydown:Rr(e.addCus,["enter"]),placeholder:e.t("event.placeholder")},null,8,["modelValue","onKeydown","placeholder"]),ce("div",null,[ce("i",{class:"fc-icon icon-add",onClick:t[2]||(t[2]=Gt((...x)=>e.addCus&&e.addCus(...x),["stop"]))}),ce("i",{class:"fc-icon icon-delete",onClick:t[3]||(t[3]=Gt((...x)=>e.closeCus&&e.closeCus(...x),["stop"]))})])])]),_:1})):Fe("",!0)]),_:1},8,["default-active","modelValue"])]),_:1})]),_:1})]),_:1}),ie(v,null,{default:he(()=>[ie(g,{class:"_fd-event-r"},{default:he(()=>[e.activeData?(Y(),Le(d,{key:0,class:"_fd-event-head",height:"40px"},{default:he(()=>[ce("div",null,[ce("a",eWe,Ye(e.t("form.document")),1)]),ce("div",null,[ie(a,{size:"small",onClick:e.close},{default:he(()=>[Dt(Ye(e.t("props.cancel")),1)]),_:1},8,["onClick"]),ie(a,{size:"small",type:"primary",onClick:e.save,color:"#2f73ff"},{default:he(()=>[Dt(Ye(e.t("props.save")),1)]),_:1},8,["onClick"])])]),_:1})):Fe("",!0),e.activeData?(Y(),Le(v,{key:1},{default:he(()=>[ie(y,{ref:"fn",modelValue:e.eventStr,"onUpdate:modelValue":t[6]||(t[6]=x=>e.eventStr=x),body:"",name:e.activeData.name,args:e.fnArgs,style:{height:"519px"}},null,8,["modelValue","name","args"])]),_:1})):Fe("",!0)]),_:1})]),_:1})]),_:1})]),_:1},8,["title","modelValue"])])}]]);function tWe(e,t){var n=null;return function(...r){n!==null&&clearTimeout(n),n=setTimeout(()=>e.call(this,...r),t)}}function Vfe(e){return e instanceof Map?e.clear=e.delete=e.set=()=>{throw Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=()=>{throw Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach(t=>{const n=e[t],r=typeof n;r!=="object"&&r!=="function"||Object.isFrozen(n)||Vfe(n)}),e}let zfe=class{constructor(e){e.data===void 0&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}};function Hfe(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function gp(e,...t){const n=Object.create(null);for(const r in e)n[r]=e[r];return t.forEach(r=>{for(const o in r)n[o]=r[o]}),n}const $fe=e=>!!e.scope;let nWe=class{constructor(e,t){this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){this.buffer+=Hfe(e)}openNode(e){if(!$fe(e))return;const t=((n,{prefix:r})=>{if(n.startsWith("language:"))return n.replace("language:","language-");if(n.includes(".")){const o=n.split(".");return[`${r}${o.shift()}`,...o.map((i,a)=>`${i}${"_".repeat(a+1)}`)].join(" ")}return`${r}${n}`})(e.scope,{prefix:this.classPrefix});this.span(t)}closeNode(e){$fe(e)&&(this.buffer+="</span>")}value(){return this.buffer}span(e){this.buffer+=`<span class="${e}">`}};const Ufe=(e={})=>{const t={children:[]};return Object.assign(t,e),t};let rWe=class GOe{constructor(){this.rootNode=Ufe(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(t){this.top.children.push(t)}openNode(t){const n=Ufe({scope:t});this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(t){return this.constructor._walk(t,this.rootNode)}static _walk(t,n){return typeof n=="string"?t.addText(n):n.children&&(t.openNode(n),n.children.forEach(r=>this._walk(t,r)),t.closeNode(n)),t}static _collapse(t){typeof t!="string"&&t.children&&(t.children.every(n=>typeof n=="string")?t.children=[t.children.join("")]:t.children.forEach(n=>{GOe._collapse(n)}))}},oWe=class extends rWe{constructor(e){super(),this.options=e}addText(e){e!==""&&this.add(e)}startScope(e){this.openNode(e)}endScope(){this.closeNode()}__addSublanguage(e,t){const n=e.root;t&&(n.scope="language:"+t),this.add(n)}toHTML(){return new nWe(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}};function O4(e){return e?typeof e=="string"?e:e.source:null}function Wfe(e){return y1("(?=",e,")")}function iWe(e){return y1("(?:",e,")*")}function aWe(e){return y1("(?:",e,")?")}function y1(...e){return e.map(t=>O4(t)).join("")}function pB(...e){return"("+((t=>{const n=t[t.length-1];return typeof n=="object"&&n.constructor===Object?(t.splice(t.length-1,1),n):{}})(e).capture?"":"?:")+e.map(t=>O4(t)).join("|")+")"}function Gfe(e){return RegExp(e.toString()+"|").exec("").length-1}const lWe=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function hB(e,{joinWith:t}){let n=0;return e.map(r=>{n+=1;const o=n;let i=O4(r),a="";for(;i.length>0;){const l=lWe.exec(i);if(!l){a+=i;break}a+=i.substring(0,l.index),i=i.substring(l.index+l[0].length),l[0][0]==="\\"&&l[1]?a+="\\"+(Number(l[1])+o):(a+=l[0],l[0]==="("&&n++)}return a}).map(r=>`(${r})`).join(t)}const qfe="[a-zA-Z]\\w*",vB="[a-zA-Z_]\\w*",Kfe="\\b\\d+(\\.\\d+)?",Yfe="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",Xfe="\\b(0b[01]+)",T4={begin:"\\\\[\\s\\S]",relevance:0},sWe={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[T4]},uWe={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[T4]},Kx=(e,t,n={})=>{const r=gp({scope:"comment",begin:e,end:t,contains:[]},n);r.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const o=pB("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return r.contains.push({begin:y1(/[ ]+/,"(",o,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),r},cWe=Kx("//","$"),dWe=Kx("/\\*","\\*/"),fWe=Kx("#","$");var Yx=Object.freeze({__proto__:null,APOS_STRING_MODE:sWe,BACKSLASH_ESCAPE:T4,BINARY_NUMBER_MODE:{scope:"number",begin:Xfe,relevance:0},BINARY_NUMBER_RE:Xfe,COMMENT:Kx,C_BLOCK_COMMENT_MODE:dWe,C_LINE_COMMENT_MODE:cWe,C_NUMBER_MODE:{scope:"number",begin:Yfe,relevance:0},C_NUMBER_RE:Yfe,END_SAME_AS_BEGIN:e=>Object.assign(e,{"on:begin":(t,n)=>{n.data._beginMatch=t[1]},"on:end":(t,n)=>{n.data._beginMatch!==t[1]&&n.ignoreMatch()}}),HASH_COMMENT_MODE:fWe,IDENT_RE:qfe,MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+vB,relevance:0},NUMBER_MODE:{scope:"number",begin:Kfe,relevance:0},NUMBER_RE:Kfe,PHRASAL_WORDS_MODE:{begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},QUOTE_STRING_MODE:uWe,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[T4,{begin:/\[/,end:/\]/,relevance:0,contains:[T4]}]},RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const t=/^#![ ]*\//;return e.binary&&(e.begin=y1(t,/.*\b/,e.binary,/\b.*/)),gp({scope:"meta",begin:t,end:/$/,relevance:0,"on:begin":(n,r)=>{n.index!==0&&r.ignoreMatch()}},e)},TITLE_MODE:{scope:"title",begin:qfe,relevance:0},UNDERSCORE_IDENT_RE:vB,UNDERSCORE_TITLE_MODE:{scope:"title",begin:vB,relevance:0}});function pWe(e,t){e.input[e.index-1]==="."&&t.ignoreMatch()}function hWe(e,t){e.className!==void 0&&(e.scope=e.className,delete e.className)}function vWe(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=pWe,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,e.relevance===void 0&&(e.relevance=0))}function mWe(e,t){Array.isArray(e.illegal)&&(e.illegal=pB(...e.illegal))}function gWe(e,t){if(e.match){if(e.begin||e.end)throw Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function yWe(e,t){e.relevance===void 0&&(e.relevance=1)}const bWe=(e,t)=>{if(!e.beforeMatch)return;if(e.starts)throw Error("beforeMatch cannot be used with starts");const n=Object.assign({},e);Object.keys(e).forEach(r=>{delete e[r]}),e.keywords=n.keywords,e.begin=y1(n.beforeMatch,Wfe(n.begin)),e.starts={relevance:0,contains:[Object.assign(n,{endsParent:!0})]},e.relevance=0,delete n.beforeMatch},AWe=["of","and","for","in","not","or","if","then","parent","list","value"],wWe="keyword";function Qfe(e,t,n=wWe){const r=Object.create(null);return typeof e=="string"?o(n,e.split(" ")):Array.isArray(e)?o(n,e):Object.keys(e).forEach(i=>{Object.assign(r,Qfe(e[i],t,i))}),r;function o(i,a){t&&(a=a.map(l=>l.toLowerCase())),a.forEach(l=>{const s=l.split("|");r[s[0]]=[i,xWe(s[0],s[1])]})}}function xWe(e,t){return t?Number(t):(n=>AWe.includes(n.toLowerCase()))(e)?0:1}const Jfe={},b1=e=>{console.error(e)},Zfe=(e,...t)=>{console.log("WARN: "+e,...t)},Fg=(e,t)=>{Jfe[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),Jfe[`${e}/${t}`]=!0)},Xx=Error();function epe(e,t,{key:n}){let r=0;const o=e[n],i={},a={};for(let l=1;l<=t.length;l++)a[l+r]=o[l],i[l+r]=!0,r+=Gfe(t[l-1]);e[n]=a,e[n]._emit=i,e[n]._multi=!0}function _We(e){(t=>{t.scope&&typeof t.scope=="object"&&t.scope!==null&&(t.beginScope=t.scope,delete t.scope)})(e),typeof e.beginScope=="string"&&(e.beginScope={_wrap:e.beginScope}),typeof e.endScope=="string"&&(e.endScope={_wrap:e.endScope}),(t=>{if(Array.isArray(t.begin)){if(t.skip||t.excludeBegin||t.returnBegin)throw b1("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),Xx;if(typeof t.beginScope!="object"||t.beginScope===null)throw b1("beginScope must be object"),Xx;epe(t,t.begin,{key:"beginScope"}),t.begin=hB(t.begin,{joinWith:""})}})(e),(t=>{if(Array.isArray(t.end)){if(t.skip||t.excludeEnd||t.returnEnd)throw b1("skip, excludeEnd, returnEnd not compatible with endScope: {}"),Xx;if(typeof t.endScope!="object"||t.endScope===null)throw b1("endScope must be object"),Xx;epe(t,t.end,{key:"endScope"}),t.end=hB(t.end,{joinWith:""})}})(e)}function EWe(e){function t(o,i){return RegExp(O4(o),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(i?"g":""))}class n{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(i,a){a.position=this.position++,this.matchIndexes[this.matchAt]=a,this.regexes.push([a,i]),this.matchAt+=Gfe(i)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const i=this.regexes.map(a=>a[1]);this.matcherRe=t(hB(i,{joinWith:"|"}),!0),this.lastIndex=0}exec(i){this.matcherRe.lastIndex=this.lastIndex;const a=this.matcherRe.exec(i);if(!a)return null;const l=a.findIndex((u,c)=>c>0&&u!==void 0),s=this.matchIndexes[l];return a.splice(0,l),Object.assign(a,s)}}class r{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(i){if(this.multiRegexes[i])return this.multiRegexes[i];const a=new n;return this.rules.slice(i).forEach(([l,s])=>a.addRule(l,s)),a.compile(),this.multiRegexes[i]=a,a}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(i,a){this.rules.push([i,a]),a.type==="begin"&&this.count++}exec(i){const a=this.getMatcher(this.regexIndex);a.lastIndex=this.lastIndex;let l=a.exec(i);if(this.resumingScanAtSamePosition()&&(!l||l.index!==this.lastIndex)){const s=this.getMatcher(0);s.lastIndex=this.lastIndex+1,l=s.exec(i)}return l&&(this.regexIndex+=l.position+1,this.regexIndex===this.count&&this.considerAll()),l}}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=gp(e.classNameAliases||{}),function o(i,a){const l=i;if(i.isCompiled)return l;[hWe,gWe,_We,bWe].forEach(u=>u(i,a)),e.compilerExtensions.forEach(u=>u(i,a)),i.__beforeBegin=null,[vWe,mWe,yWe].forEach(u=>u(i,a)),i.isCompiled=!0;let s=null;return typeof i.keywords=="object"&&i.keywords.$pattern&&(i.keywords=Object.assign({},i.keywords),s=i.keywords.$pattern,delete i.keywords.$pattern),s=s||/\w+/,i.keywords&&(i.keywords=Qfe(i.keywords,e.case_insensitive)),l.keywordPatternRe=t(s,!0),a&&(i.begin||(i.begin=/\B|\b/),l.beginRe=t(l.begin),i.end||i.endsWithParent||(i.end=/\B|\b/),i.end&&(l.endRe=t(l.end)),l.terminatorEnd=O4(l.end)||"",i.endsWithParent&&a.terminatorEnd&&(l.terminatorEnd+=(i.end?"|":"")+a.terminatorEnd)),i.illegal&&(l.illegalRe=t(i.illegal)),i.contains||(i.contains=[]),i.contains=[].concat(...i.contains.map(u=>(c=>(c.variants&&!c.cachedVariants&&(c.cachedVariants=c.variants.map(d=>gp(c,{variants:null},d))),c.cachedVariants?c.cachedVariants:tpe(c)?gp(c,{starts:c.starts?gp(c.starts):null}):Object.isFrozen(c)?gp(c):c))(u==="self"?i:u))),i.contains.forEach(u=>{o(u,l)}),i.starts&&o(i.starts,a),l.matcher=(u=>{const c=new r;return u.contains.forEach(d=>c.addRule(d.begin,{rule:d,type:"begin"})),u.terminatorEnd&&c.addRule(u.terminatorEnd,{type:"end"}),u.illegal&&c.addRule(u.illegal,{type:"illegal"}),c})(l),l}(e)}function tpe(e){return!!e&&(e.endsWithParent||tpe(e.starts))}let CWe=class extends Error{constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}};const mB=Hfe,npe=gp,rpe=Symbol("nomatch"),ope=e=>{const t=Object.create(null),n=Object.create(null),r=[];let o=!0;const i="Could not find the language '{}', did you forget to load/include a language module?",a={disableAutodetect:!0,name:"Plain text",contains:[]};let l={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:oWe};function s(w){return l.noHighlightRe.test(w)}function u(w,x,_){let E="",C="";typeof x=="object"?(E=w,_=x.ignoreIllegals,C=x.language):(Fg("10.7.0","highlight(lang, code, ...args) has been deprecated."),Fg("10.7.0",`Please use highlight(code, options) instead.
| https://github.com/highlightjs/highlight.js/issues/2277`),C=w,E=x),_===void 0&&(_=!0);const T={code:E,language:C};y("before:highlight",T);const k=T.result?T.result:c(T.language,T.code,_);return k.code=T.code,y("after:highlight",k),k}function c(w,x,_,E){const C=Object.create(null);function T(){if(!z.keywords)return W.addText(K);let le=0;z.keywordPatternRe.lastIndex=0;let J=z.keywordPatternRe.exec(K),Z="";for(;J;){Z+=K.substring(le,J.index);const be=H.case_insensitive?J[0].toLowerCase():J[0],ve=(ye=be,z.keywords[ye]);if(ve){const[Ae,Ce]=ve;if(W.addText(Z),Z="",C[be]=(C[be]||0)+1,C[be]<=7&&(X+=Ce),Ae.startsWith("_"))Z+=J[0];else{const _e=H.classNameAliases[Ae]||Ae;I(J[0],_e)}}else Z+=J[0];le=z.keywordPatternRe.lastIndex,J=z.keywordPatternRe.exec(K)}var ye;Z+=K.substring(le),W.addText(Z)}function k(){z.subLanguage!=null?(()=>{if(K==="")return;let le=null;if(typeof z.subLanguage=="string"){if(!t[z.subLanguage])return W.addText(K);le=c(z.subLanguage,K,!0,$[z.subLanguage]),$[z.subLanguage]=le._top}else le=d(K,z.subLanguage.length?z.subLanguage:null);z.relevance>0&&(X+=le.relevance),W.__addSublanguage(le._emitter,le.language)})():T(),K=""}function I(le,J){le!==""&&(W.startScope(J),W.addText(le),W.endScope())}function O(le,J){let Z=1;const ye=J.length-1;for(;Z<=ye;){if(!le._emit[Z]){Z++;continue}const be=H.classNameAliases[le[Z]]||le[Z],ve=J[Z];be?I(ve,be):(K=ve,T(),K=""),Z++}}function F(le,J){return le.scope&&typeof le.scope=="string"&&W.openNode(H.classNameAliases[le.scope]||le.scope),le.beginScope&&(le.beginScope._wrap?(I(K,H.classNameAliases[le.beginScope._wrap]||le.beginScope._wrap),K=""):le.beginScope._multi&&(O(le.beginScope,J),K="")),z=Object.create(le,{parent:{value:z}}),z}function N(le,J,Z){let ye=((be,ve)=>{const Ae=be&&be.exec(ve);return Ae&&Ae.index===0})(le.endRe,Z);if(ye){if(le["on:end"]){const be=new zfe(le);le["on:end"](J,be),be.isMatchIgnored&&(ye=!1)}if(ye){for(;le.endsParent&&le.parent;)le=le.parent;return le}}if(le.endsWithParent)return N(le.parent,J,Z)}function B(le){return z.matcher.regexIndex===0?(K+=le[0],1):(se=!0,0)}function P(le){const J=le[0],Z=x.substring(le.index),ye=N(z,le,Z);if(!ye)return rpe;const be=z;z.endScope&&z.endScope._wrap?(k(),I(J,z.endScope._wrap)):z.endScope&&z.endScope._multi?(k(),O(z.endScope,le)):be.skip?K+=J:(be.returnEnd||be.excludeEnd||(K+=J),k(),be.excludeEnd&&(K=J));do z.scope&&W.closeNode(),z.skip||z.subLanguage||(X+=z.relevance),z=z.parent;while(z!==ye.parent);return ye.starts&&F(ye.starts,le),be.returnEnd?0:J.length}let V={};function L(le,J){const Z=J&&J[0];if(K+=le,Z==null)return k(),0;if(V.type==="begin"&&J.type==="end"&&V.index===J.index&&Z===""){if(K+=x.slice(J.index,J.index+1),!o){const ye=Error(`0 width match regex (${w})`);throw ye.languageName=w,ye.badRule=V.rule,ye}return 1}if(V=J,J.type==="begin")return(ye=>{const be=ye[0],ve=ye.rule,Ae=new zfe(ve),Ce=[ve.__beforeBegin,ve["on:begin"]];for(const _e of Ce)if(_e&&(_e(ye,Ae),Ae.isMatchIgnored))return B(be);return ve.skip?K+=be:(ve.excludeBegin&&(K+=be),k(),ve.returnBegin||ve.excludeBegin||(K=be)),F(ve,ye),ve.returnBegin?0:be.length})(J);if(J.type==="illegal"&&!_){const ye=Error('Illegal lexeme "'+Z+'" for mode "'+(z.scope||"<unnamed>")+'"');throw ye.mode=z,ye}if(J.type==="end"){const ye=P(J);if(ye!==rpe)return ye}if(J.type==="illegal"&&Z==="")return 1;if(ne>1e5&&ne>3*J.index)throw Error("potential infinite loop, way more iterations than matches");return K+=Z,Z.length}const H=v(w);if(!H)throw b1(i.replace("{}",w)),Error('Unknown language: "'+w+'"');const U=EWe(H);let G="",z=E||U;const $={},W=new l.__emitter(l);(()=>{const le=[];for(let J=z;J!==H;J=J.parent)J.scope&&le.unshift(J.scope);le.forEach(J=>W.openNode(J))})();let K="",X=0,te=0,ne=0,se=!1;try{if(H.__emitTokens)H.__emitTokens(x,W);else{for(z.matcher.considerAll();;){ne++,se?se=!1:z.matcher.considerAll(),z.matcher.lastIndex=te;const le=z.matcher.exec(x);if(!le)break;const J=L(x.substring(te,le.index),le);te=le.index+J}L(x.substring(te))}return W.finalize(),G=W.toHTML(),{language:w,value:G,relevance:X,illegal:!1,_emitter:W,_top:z}}catch(le){if(le.message&&le.message.includes("Illegal"))return{language:w,value:mB(x),illegal:!0,relevance:0,_illegalBy:{message:le.message,index:te,context:x.slice(te-100,te+100),mode:le.mode,resultSoFar:G},_emitter:W};if(o)return{language:w,value:mB(x),illegal:!1,relevance:0,errorRaised:le,_emitter:W,_top:z};throw le}}function d(w,x){x=x||l.languages||Object.keys(t);const _=(O=>{const F={value:mB(O),illegal:!1,relevance:0,_top:a,_emitter:new l.__emitter(l)};return F._emitter.addText(O),F})(w),E=x.filter(v).filter(b).map(O=>c(O,w,!1));E.unshift(_);const C=E.sort((O,F)=>{if(O.relevance!==F.relevance)return F.relevance-O.relevance;if(O.language&&F.language){if(v(O.language).supersetOf===F.language)return 1;if(v(F.language).supersetOf===O.language)return-1}return 0}),[T,k]=C,I=T;return I.secondBest=k,I}function f(w){let x=null;const _=(T=>{let k=T.className+" ";k+=T.parentNode?T.parentNode.className:"";const I=l.languageDetectRe.exec(k);if(I){const O=v(I[1]);return O||(Zfe(i.replace("{}",I[1])),Zfe("Falling back to no-highlight mode for this block.",T)),O?I[1]:"no-highlight"}return k.split(/\s+/).find(O=>s(O)||v(O))})(w);if(s(_))return;if(y("before:highlightElement",{el:w,language:_}),w.dataset.highlighted)return console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",w);if(w.children.length>0&&(l.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(w)),l.throwUnescapedHTML))throw new CWe("One of your code blocks includes unescaped HTML.",w.innerHTML);x=w;const E=x.textContent,C=_?u(E,{language:_,ignoreIllegals:!0}):d(E);w.innerHTML=C.value,w.dataset.highlighted="yes",((T,k,I)=>{const O=k&&n[k]||I;T.classList.add("hljs"),T.classList.add("language-"+O)})(w,_,C.language),w.result={language:C.language,re:C.relevance,relevance:C.relevance},C.secondBest&&(w.secondBest={language:C.secondBest.language,relevance:C.secondBest.relevance}),y("after:highlightElement",{el:w,result:C,text:E})}let p=!1;function m(){document.readyState!=="loading"?document.querySelectorAll(l.cssSelector).forEach(f):p=!0}function v(w){return w=(w||"").toLowerCase(),t[w]||t[n[w]]}function g(w,{languageName:x}){typeof w=="string"&&(w=[w]),w.forEach(_=>{n[_.toLowerCase()]=x})}function b(w){const x=v(w);return x&&!x.disableAutodetect}function y(w,x){const _=w;r.forEach(E=>{E[_]&&E[_](x)})}typeof window<"u"&&window.addEventListener&&window.addEventListener("DOMContentLoaded",()=>{p&&m()},!1),Object.assign(e,{highlight:u,highlightAuto:d,highlightAll:m,highlightElement:f,highlightBlock:w=>(Fg("10.7.0","highlightBlock will be removed entirely in v12.0"),Fg("10.7.0","Please use highlightElement now."),f(w)),configure:w=>{l=npe(l,w)},initHighlighting:()=>{m(),Fg("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},initHighlightingOnLoad:()=>{m(),Fg("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")},registerLanguage:(w,x)=>{let _=null;try{_=x(e)}catch(E){if(b1("Language definition for '{}' could not be registered.".replace("{}",w)),!o)throw E;b1(E),_=a}_.name||(_.name=w),t[w]=_,_.rawDefinition=x.bind(null,e),_.aliases&&g(_.aliases,{languageName:w})},unregisterLanguage:w=>{delete t[w];for(const x of Object.keys(n))n[x]===w&&delete n[x]},listLanguages:()=>Object.keys(t),getLanguage:v,registerAliases:g,autoDetection:b,inherit:npe,addPlugin:w=>{(x=>{x["before:highlightBlock"]&&!x["before:highlightElement"]&&(x["before:highlightElement"]=_=>{x["before:highlightBlock"](Object.assign({block:_.el},_))}),x["after:highlightBlock"]&&!x["after:highlightElement"]&&(x["after:highlightElement"]=_=>{x["after:highlightBlock"](Object.assign({block:_.el},_))})})(w),r.push(w)},removePlugin:w=>{const x=r.indexOf(w);x!==-1&&r.splice(x,1)}}),e.debugMode=()=>{o=!1},e.safeMode=()=>{o=!0},e.versionString="11.9.0",e.regex={concat:y1,lookahead:Wfe,either:pB,optional:aWe,anyNumberOfTimes:iWe};for(const w in Yx)typeof Yx[w]=="object"&&Vfe(Yx[w]);return Object.assign(e,Yx),e},Qx=ope({});Qx.newInstance=()=>ope({});var SWe=e=>{const t=e.regex,n=t.concat(/[\p{L}_]/u,t.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),r={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},o={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},i=e.inherit(o,{begin:/\(/,end:/\)/}),a=e.inherit(e.APOS_STRING_MODE,{className:"string"}),l=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),s={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:/[\p{L}0-9._:-]+/u,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[r]},{begin:/'/,end:/'/,contains:[r]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,relevance:10,contains:[o,l,a,i,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,contains:[o,i,l,a]}]}]},e.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},r,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[l]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[s],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[s],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:t.concat(/</,t.lookahead(t.concat(n,t.either(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:n,relevance:0,starts:s}]},{className:"tag",begin:t.concat(/<\//,t.lookahead(t.concat(n,/>/))),contains:[{className:"name",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}},kWe=(()=>{const e="[A-Za-z$_][0-9A-Za-z$_]*",t=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],r=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],o=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],i=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],a=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],l=[].concat(i,r,o);return s=>{const u=s.regex,c=e,d={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(G,z)=>{const $=G[0].length+G.index,W=G.input[$];if(W==="<"||W===",")return void z.ignoreMatch();let K;W===">"&&(((te,{after:ne})=>{const se="</"+te[0].slice(1);return te.input.indexOf(se,ne)!==-1})(G,{after:$})||z.ignoreMatch());const X=G.input.substring($);((K=X.match(/^\s*=/))||(K=X.match(/^\s+extends\s+/))&&K.index===0)&&z.ignoreMatch()}},f={$pattern:e,keyword:t,literal:n,built_in:l,"variable.language":a},p="[0-9](_?[0-9])*",m=`\\.(${p})`,v="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",g={className:"number",variants:[{begin:`(\\b(${v})((${m})|\\.)?|(${m}))[eE][+-]?(${p})\\b`},{begin:`\\b(${v})\\b((${m})\\b|\\.)?|(${m})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},b={className:"subst",begin:"\\$\\{",end:"\\}",keywords:f,contains:[]},y={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[s.BACKSLASH_ESCAPE,b],subLanguage:"xml"}},w={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[s.BACKSLASH_ESCAPE,b],subLanguage:"css"}},x={begin:"gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[s.BACKSLASH_ESCAPE,b],subLanguage:"graphql"}},_={className:"string",begin:"`",end:"`",contains:[s.BACKSLASH_ESCAPE,b]},E={className:"comment",variants:[s.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:c+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),s.C_BLOCK_COMMENT_MODE,s.C_LINE_COMMENT_MODE]},C=[s.APOS_STRING_MODE,s.QUOTE_STRING_MODE,y,w,x,_,{match:/\$\d+/},g];b.contains=C.concat({begin:/\{/,end:/\}/,keywords:f,contains:["self"].concat(C)});const T=[].concat(E,b.contains),k=T.concat([{begin:/\(/,end:/\)/,keywords:f,contains:["self"].concat(T)}]),I={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:f,contains:k},O={variants:[{match:[/class/,/\s+/,c,/\s+/,/extends/,/\s+/,u.concat(c,"(",u.concat(/\./,c),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,c],scope:{1:"keyword",3:"title.class"}}]},F={relevance:0,match:u.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...r,...o]}},N={variants:[{match:[/function/,/\s+/,c,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[I],illegal:/%/},B={match:u.concat(/\b/,(P=[...i,"super","import"],u.concat("(?!",P.join("|"),")")),c,u.lookahead(/\(/)),className:"title.function",relevance:0};var P;const V={begin:u.concat(/\./,u.lookahead(u.concat(c,/(?![0-9A-Za-z$_(])/))),end:c,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},L={match:[/get|set/,/\s+/,c,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},I]},H="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+s.UNDERSCORE_IDENT_RE+")\\s*=>",U={match:[/const|var|let/,/\s+/,c,/\s*/,/=\s*/,/(async\s*)?/,u.lookahead(H)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[I]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:f,exports:{PARAMS_CONTAINS:k,CLASS_REFERENCE:F},illegal:/#(?![$_A-z])/,contains:[s.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},s.APOS_STRING_MODE,s.QUOTE_STRING_MODE,y,w,x,_,E,{match:/\$\d+/},g,F,{className:"attr",begin:c+u.lookahead(":"),relevance:0},U,{begin:"("+s.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[E,s.REGEXP_MODE,{className:"function",begin:H,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:s.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:f,contains:k}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:"</>"},{match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:d.begin,"on:begin":d.isTrulyOpeningTag,end:d.end}],subLanguage:"xml",contains:[{begin:d.begin,end:d.end,skip:!0,contains:["self"]}]}]},N,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+s.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[I,s.inherit(s.TITLE_MODE,{begin:c,className:"title.function"})]},{match:/\.\.\./,relevance:0},V,{match:"\\$"+c,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[I]},B,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},O,L,{match:/\$[(.]/}]}}})();Qx.registerLanguage("javascript",kWe),Qx.registerLanguage("xml",SWe);const DWe=Te({name:"FcDesigner",components:{fcDraggable:dB,DragForm:Br.$form(),ViewForm:Ux.$form(),EventConfig:jfe},props:{menu:Array,height:[String,Number],config:{type:Object,default:()=>({})},mask:{type:Boolean,default:void 0},locale:Object,handle:Array},emits:["active","create","copy","delete","drag","inputData","save"],setup(e){const{menu:t,height:n,mask:r,locale:o,handle:i}=di(e),a=dn(),l=Qn({active:null});qn("fcx",l),qn("designer",a);const s=dr(e,"config",{}),u=dr(s.value,"baseRule",null),c=dr(s.value,"componentRule",{}),d=dr(s.value,"validateRule",null),f=dr(s.value,"formRule",null),p=ee(()=>{const O=n.value;return O?Pr.Number(O)?`${O}px`:O:"100%"}),m=ee(()=>s.value.fieldReadonly!==!1),v=ee(()=>s.value.hiddenMenu||[]),g=ee(()=>s.value.hiddenItem||[]),b=ee(()=>s.value.hiddenDragMenu===!0),y=ee(()=>s.value.hiddenDragBtn===!0);let w=fB;o.value&&(w=fI(o).t);const x=(...O)=>w(...O),_=(O,F,...N)=>{if(F){if(Pr.Function(F))return F(...N);if(F.rule){let B=F.rule(...N);return F.prepend?B=[...B,...O(...N)]:F.append&&(B=[...O(...N),...B]),B}}return O(...N)},E=Qn({cacheProps:{},operation:{idx:-1,list:[]},moveRule:null,addRule:null,added:null,bus:_$e(),device:"pc",activeTab:"form",activeMenuTab:"menu",activeRule:null,children:de([]),treeInfo:[],menuList:t.value||[{name:"main",title:"\u57FA\u7840\u7EC4\u4EF6",list:[]},{name:"subform",title:"\u5B50\u8868\u5355\u7EC4\u4EF6",list:[]},{name:"aide",title:"\u8F85\u52A9\u7EC4\u4EF6",list:[]},{name:"layout",title:"\u5E03\u5C40\u7EC4\u4EF6",list:[]}],dragRuleList:{},eventShow:!1,unloadStatus:!1,previewStatus:"form",t:x,preview:{state:!1,rule:[],option:{},api:{}},inputForm:{state:!1,rule:[],option:{},api:{},data:{},key:""},dragForm:de({rule:[],api:{}}),formOptions:{},oldOptionsKeys:[],form:{rule:_(Gde,f.value,{t:x}),api:{},option:{form:{labelPosition:"top",size:"small"},submitBtn:!1},value:{form:{},submitBtn:!1}},baseForm:{isShow:!1,rule:_(y4,u.value,{t:x}),api:{},value:{},options:{global:{input:{modelEmit:"blur"}},form:{labelPosition:"top",size:"small"},submitBtn:!1,mounted:O=>{O.activeRule=E.activeRule,O.setValue(O.options.formData||{})}}},validateForm:{isShow:!1,rule:_(qde,d.value,{t:x}),api:{},value:[],options:{global:{input:{modelEmit:"blur"}},form:{labelPosition:"top",size:"small"},submitBtn:!1,mounted:O=>{O.activeRule=E.activeRule,O.setValue(O.options.formData||{})}}},propsForm:{isShow:!1,rule:[],api:{},value:{},options:{global:{input:{modelEmit:"blur"},inputNumber:{props:{controlsPosition:"right"}}},form:{labelPosition:"top",size:"small"},submitBtn:!1,mounted:O=>{O.activeRule=E.activeRule,O.setValue(O.options.formData||{})}}},customForm:{isShow:!1,config:null,key:"",rule:[],api:{},options:{global:{input:{modelEmit:"blur"}},form:{labelPosition:"top",size:"small"},submitBtn:!1}}});Je(()=>E.preview.state,function(O){O||St(()=>{E.previewStatus="form",E.preview.rule=E.preview.option=null})});let C=null;const T=(O,F)=>{if(O[10]!==">"){if(!(O=O.replace("formCreate","")))return;O=dI(O)}else O=O.replace("formCreate>","");const N=O.split(">"),B=N.pop();let P=E.activeRule;N.forEach((V,L)=>{L||(V=dI(V)),P[V]||(P[V]={}),P=P[V]}),F({source:P,field:B})};Je(()=>o.value,O=>{w=O?fI(o).t:fB;const F=E.form.api.formData&&E.form.api.formData(),N=E.baseForm.api.formData&&E.baseForm.api.formData(),B=E.validateForm.api.formData&&E.validateForm.api.formData();E.validateForm.rule=_(qde,d.value,{t:x}),E.baseForm.rule=_(y4,u.value,{t:x}),E.form.rule=_(Gde,f.value,{t:x}),E.cacheProps={};const P=E.activeRule;let V=null;P&&(V=E.propsForm.api.formData&&E.propsForm.api.formData(),E.propsForm.rule=E.cacheProps[P._fc_id]=k.getPropsRule(P)),St(()=>{F&&E.form.api.setValue(F),N&&E.baseForm.api.setValue(N),B&&E.validateForm.api.setValue(B),V&&E.propsForm.api.setValue(V)})});const k={unWatchActiveRule(){C&&C(),C=null},watchActiveRule(){k.unWatchActiveRule(),C=Je(()=>E.activeRule,function(O){O&&k.updateRuleFormData()},{deep:!0,flush:"post"})},makeChildren:O=>Qn({children:O}).children,addMenu(O){if(!O.name||!O.list)return;let F=!0;E.menuList.forEach((N,B)=>{N.name===O.name&&(E.menuList[B]=O,F=!1)}),F&&E.menuList.push(O)},removeMenu(O){[...E.menuList].forEach((F,N)=>{F.name===O&&E.menuList.splice(N,1)})},setMenuItem(O,F){E.menuList.forEach(N=>{N.name===O&&(N.list=F)})},appendMenuItem(O,F){E.menuList.forEach(N=>{N.name===O&&N.list.push(...Array.isArray(F)?F:[F])})},removeMenuItem(O){E.menuList.forEach(F=>{let N;Pr.String(O)?[...F.list].forEach((B,P)=>{B.name===O&&F.list.splice(P,1)}):(N=F.list.indexOf(O))>-1&&F.list.splice(N,1)})},addComponent(O){Array.isArray(O)?O.forEach(F=>{E.dragRuleList[F.name]=F,F.menu&&k.appendMenuItem(F.menu,F)}):(E.dragRuleList[O.name]=O,O.menu&&k.appendMenuItem(O.menu,O))},openInputData(O){E.inputForm.state=O===void 0?!E.inputForm.state:!!O,E.inputForm.state&&(E.inputForm.rule=Br.parseJson(k.getJson()),E.inputForm.option=Br.parseJson(k.getOptionsJson()),E.inputForm.option.formData=Mi(E.inputForm.data),E.inputForm.option.submitBtn.show=!1,E.inputForm.option.resetBtn.show=!1,k.clearActiveRule())},inputSave(){const O=E.inputForm.api.formData();Object.keys(O).forEach(N=>{Eg(O[N])&&delete O[N]});const F=JSON.stringify(E.inputForm.data)!==JSON.stringify(O);E.inputForm.data=O,E.inputForm.state=!1,a.emit("inputData",O),F&&k.addOperationRecord()},inputClear(){k.inputReset({})},inputReset(O){E.inputForm.rule=Br.parseJson(k.getJson()),E.inputForm.option.formData=O||Mi(E.inputForm.data),E.inputForm.key=vr()},setFormData(O){E.inputForm.data=O||{}},getFormData:()=>E.inputForm.data,getParent(O){let F=O.__fc__.parent.rule;const N=F._menu;return N&&N.inside&&(O=F,F=F.__fc__.parent.rule),{root:F,parent:O}},updateName(){this.activeRule.name="ref_"+vr()},makeDrag:(O,F,N,B,P)=>({type:"DragBox",wrap:{show:!1},col:{show:!1},inject:!0,props:{rule:{props:{tag:"el-col",group:O===!0?"default":O,ghostClass:"ghost",animation:150,handle:"._fd-drag-btn",emptyInsertThreshold:0,direction:"vertical",itemKey:"type"}},tag:F},children:N,slot:P,on:B}),clearDragRule(){k.setRule([]),k.addOperationRecord(),E.unloadStatus=!1},makeDragRule:O=>k.makeChildren([k.makeDrag(!0,"draggable",O,{add:(F,N)=>k.dragAdd(O,N),end:(F,N)=>k.dragEnd(O,N),start:(F,N)=>k.dragStart(O,N),unchoose:(F,N)=>k.dragUnchoose(O,N)})]),handleSave(){a.emit("save",{rule:k.getJson(),options:k.getOptionsJson()})},openPreview(){E.preview.state=!0;const O=k.getJson(),F=k.getOptionsJson();E.preview.rule=Br.parseJson(O),E.preview.option=Br.parseJson(F),E.preview.html=Qx.highlight(function(N,B){return`<template>
| <form-create
| v-model="formData"
| v-model:api="fapi"
| :rule="rule"
| :option="option"
| @submit="onSubmit"
| ></form-create>
| </template>
|
| <script>
| import formCreate from "@form-create/element-ui";
|
| export default {
| components: {
| formCreate: formCreate.$form()
| },
| data () {
| const option = formCreate.parseJson('${B.replaceAll("\\","\\\\").replaceAll("'","\\")}');
| return {
| formData: {},
| fapi: null,
| rule: formCreate.parseJson('${N.replaceAll("\\","\\\\").replaceAll("'","\\")}'),
| option: option
| }
| },
| methods: {
| onSubmit (formData) {
| //todo \u63D0\u4EA4\u8868\u5355
| }
| }
| }
| <\/script>`}(O,F),{language:"xml"}).value},getRule:()=>k.parseRule(Mi(E.dragForm.rule[0].children)),getJson:()=>Br.toJson(k.getRule()),getOption(){const O=Mi(E.formOptions);Object.keys(O._event||{}).forEach(N=>{O._event[N]&&(O[N]=O._event[N])}),delete O._event,O.submitBtn=O._submitBtn,O.resetBtn=O._resetBtn,O.resetBtn.innerText=x("props.reset"),O.submitBtn.innerText=x("props.submit");const F=Mi(E.inputForm.data);return Object.keys(F).length>0&&(O.formData=F),delete O._submitBtn,delete O._resetBtn,O},getOptions(){k.getOption()},getOptionsJson(){return Br.toJson([this.getOption()]).slice(1).slice(0,-1)},setRule(O){O||(O=[]),E.children=de(k.loadRule(Pr.String(O)?Br.parseJson(O):Mi(O))),k.clearActiveRule(),E.dragForm.rule=k.makeDragRule(k.makeChildren(E.children)),k.updateTree()},setBaseRuleConfig(O,F){u.value={rule:O,append:F},E.baseForm.rule=_(y4,u.value,{t:x})},setComponentRuleConfig(O,F,N){c.value[O]={rule:F,append:N},E.cacheProps={};const B=E.activeRule;if(B){const P=E.propsForm.api.formData&&E.propsForm.api.formData();E.propsForm.rule=E.cacheProps[B._fc_id]=_(B._menu.props,c.value&&c.value[B._menu.name],B,{t:x,api:E.dragForm.api}),St(()=>{P&&E.propsForm.api.setValue(P)})}},setValidateRuleConfig(O,F){d.value={rule:O,append:F},E.validateForm.rule=_(y4,d.value,{t:x})},setFormRuleConfig(O,F){f.value={rule:O,append:F},E.form.rule=_(y4,f.value,{t:x})},clearActiveRule(){E.activeRule=null,E.customForm.config=null,E.activeTab="form",l.active=""},setOption(O){let F=Pr.String(O)?JSON.parse(O):Mi(O||{});F.form={inline:!1,hideRequiredAsterisk:!1,labelPosition:"right",size:"default",labelWidth:"125px",...F.form||{}},F._event={onSubmit:F.onSubmit||"",onCreated:F.onCreated||"",onMounted:F.onMounted||"",onChange:F.onChange||"",beforeFetch:F.beforeFetch||""},F._resetBtn=typeof F.resetBtn=="object"?F.resetBtn:{show:F.resetBtn===!0},F._submitBtn=typeof F.submitBtn=="object"?F.submitBtn:{show:F.submitBtn!==!1},F.submitBtn=F.resetBtn=!1,E.inputForm.data=F.formData||{},E.oldOptionsKeys=Object.keys(E.form.value),delete F.formData,E.formOptions=F,k.updateOptionsValue()},setOptions(O){k.setOption(O)},updateOptionsValue(){const O={};E.oldOptionsKeys.forEach(N=>{O[N]=void 0});const F={...O,...E.formOptions.form};Object.keys(E.formOptions).forEach(N=>{const B=E.formOptions[N];F[">"+N]=B,typeof B=="object"&&Object.keys(B).forEach(P=>{F[N+">"+P]=B[P]})}),E.form.value=F},loadRule(O,F,N){const B=[];return O.forEach(P=>{if(Pr.String(P))return B.push(P);let V=E.dragRuleList[P._fc_drag_tag]||E.dragRuleList[P.type];if(V||(V=function(L){return{icon:L.field?"icon-input":"icon-cell",label:L.field||L.type,name:"_",mask:!0,handleBtn:["delete"],rule:()=>L,props:()=>[]}}(P),P._fc_drag_tag="_"),N&&(P._fc_template=N),V&&V.loadRule&&V.loadRule(P),P.children=k.loadRule(P.children||[],V,N),P.control&&(P._control=P.control,delete P.control),P.computed&&(P._computed=P.computed,delete P.computed),P.on&&(P._on=P.on,delete P.on),V){const L=P.slot;let H;F&&F.slot&&L&&L!=="default"&&(H=k.getSlotConfig(F,L,V)),delete P.slot,P=k.makeRule(H||V,P),L&&(P.slot=L)}B.push(P)}),B},parseRule:(O,F)=>[...O].reduce((N,B)=>{let P=F;if(Pr.String(B))return N.push(B),N;if(B.type==="DragBox")return N.push(...k.parseRule(B.children,P||B.slot)),N;if(B.type==="DragTool"){if(P=B.slot||F,B=B.children[0],Pr.String(B))return N.push(B),N;if(B.type==="DragBox")return N.push(...k.parseRule(B.children,P||B.slot)),N}return B&&(B={...B},P&&P!=="default"&&(B.slot=P),B.children&&B.children.length&&(B.children=k.parseRule(B.children)),delete B.key,delete B.component,B._menu&&(B._menu.parseRule&&B._menu.parseRule(B),delete B._menu),B._fc_drag_tag==="_"&&delete B._fc_drag_tag,B._control&&(B.control=B._control,delete B._control),B._computed&&(B.computed=B._computed,delete B._computed),B.slot||delete B.slot,B._on&&(B.on=B._on,delete B._on),B.props&&Object.keys(B.props).forEach(V=>{Eg(B.props[V])&&delete B.props[V]}),Object.keys(B).filter(V=>V.indexOf("__")===0||Array.isArray(B[V])&&B[V].length===0||Pr.Object(B[V])&&Object.keys(B[V]).length===0).forEach(V=>{delete B[V]}),N.push(B)),N},[]),fields:()=>E.dragForm.api.all().map(O=>O.field).filter(O=>!!O),baseChange(O,F,N,B){k.handleChange("",O,F,N,B)},formOptChange(O,F){E.form.value[O]=F,O.indexOf(">")===-1&&(O="form>"+O);let N=E.formOptions;const B=O.split(">"),P=B.pop();B.forEach(V=>{V&&(N[V]||(N[V]={}),N=N[V])}),N[P]=F},propRemoveField(O,F,N){var B,P,V;if(E.activeRule&&N[E.activeRule._fc_id]===E.activeRule){k.unWatchActiveRule();const L=O;E.dragForm.api.sync(E.activeRule),O.indexOf("__")!==0&&(O==="formCreateChild"?delete E.activeRule.children[0]:O.indexOf("formCreate")===0||O.indexOf(">")>0?(O.indexOf("formCreate")<0&&(O="props>"+O),T(O,({source:H,field:U})=>{delete H[U]})):delete E.activeRule.props[O]),k.watchActiveRule(),(V=(P=(B=E.activeRule._menu)==null?void 0:B.watch)==null?void 0:P[L])==null||V.call(P,{field:L,value:void 0,api:N,rule:E.activeRule,ctx:a})}},propChange(O,F,N,B){k.handleChange("props",O,F,N,B)},handleChange(O,F,N,B,P){var V,L,H;if(E.activeRule&&P[E.activeRule._fc_id]===E.activeRule){k.unWatchActiveRule();const U=F;F.indexOf("__")!==0&&(F==="formCreateChild"?E.activeRule.children[0]=N:F.indexOf("formCreate")===0||F.indexOf(">")>0?(F.indexOf("formCreate")<0&&(F=(O?O+">":"")+F),T(F,({source:G,field:z})=>{Eg(N)?delete G[z]:G[z]=N})):O&&Eg(N)?delete E.activeRule[O][F]:(O?E.activeRule[O]:E.activeRule)[F]=N),k.watchActiveRule(),(H=(L=(V=E.activeRule._menu)==null?void 0:V.watch)==null?void 0:L[U])==null||H.call(L,{field:U,value:N,api:P,rule:E.activeRule,ctx:a})}},validateChange(O,F,N,B){!E.activeRule||E.validateForm.api[E.activeRule._fc_id]!==E.activeRule||(k.handleChange("",O,F,N,B),E.dragForm.api.refreshValidate(),E.dragForm.api.nextTick(()=>{E.dragForm.api.clearValidateState(E.activeRule.__fc__.id)}))},triggerActive(O){let F;if(F=O._menu.inside?O.children[0]:O.__fc__.parent.rule,F&&F.type==="DragTool"){const N=E.dragForm.api.el(F.__fc__.id);N&&(l.active=N.id,a.emit("active",O),k.toolActive(O))}},customFormChange(O,F){E.customForm.config&&E.customForm.config.change(O,F)},customActive(O){E.baseForm.isShow=!1,E.propsForm.isShow=!1,E.eventShow=!1,E.validateForm.isShow=!1,E.activeRule=null,E.customForm.config=O,E.customForm.isShow=!0,E.customForm.propsShow=O.props&&k.getConfig("showPropsForm")!==!1,E.customForm.key=vr(),E.customForm.rule=E.customForm.propsShow?O.props({t:x}):[],E.customForm.options.formData=O.formData,St(()=>{E.activeTab="props"})},getPropsRule(O){let F=_(O._menu.props,c.value&&c.value[O._menu.name],O,{t:x,api:E.dragForm.api});if(c.value&&c.value.default){const N=c.value.default;F=_(()=>F,Pr.Function(N)?{rule:N,append:!0}:N,O,{t:x,api:E.dragForm.api})}return F},toolActive(O){k.unWatchActiveRule(),E.customForm.isShow=!1,E.customForm.config=null,E.activeRule&&(delete E.propsForm.api[E.activeRule._fc_id],delete E.baseForm.api[E.activeRule._fc_id],delete E.validateForm.api[E.activeRule._fc_id],delete E.dragForm.api.activeRule),E.activeRule=O,E.dragForm.api.activeRule=O,St(()=>{E.activeTab="props",St(()=>{E.propsForm.api[E.activeRule._fc_id]=E.activeRule,E.baseForm.api[E.activeRule._fc_id]=E.activeRule,E.validateForm.api[E.activeRule._fc_id]=E.activeRule})}),E.cacheProps[O._fc_id]||(E.cacheProps[O._fc_id]=k.getPropsRule(O));const F=O._menu.hiddenBaseField||[];E.baseForm.api.hidden(!1),F.length&&E.baseForm.api.hidden(!0,F),this.getConfig("showControl",!0)||E.baseForm.api.hidden(!0,"_control");const N=v4(O,"field");E.baseForm.isShow=N&&O.input!==!1&&k.getConfig("showBaseForm")!==!1,E.propsForm.isShow=E.cacheProps[O._fc_id].length>0&&k.getConfig("showPropsForm")!==!1,E.eventShow=O._menu.event&&O._menu.event.length>0&&k.getConfig("showEventForm")!==!1,E.validateForm.isShow=E.baseForm.isShow&&O._menu.validate!==!1&&k.getConfig("showValidateForm")!==!1,E.propsForm.rule=E.cacheProps[O._fc_id],k.updateRuleFormData(),k.watchActiveRule()},getConfig:(O,F)=>s.value&&v4(s.value,O)?s.value[O]:F,updateRuleFormData(){const O=E.activeRule;let F={formCreateChild:""+O.children[0],"formCreateWrap>labelWidth":""};const N=s.value.appendConfigData;Pr.Function(N)?F={...F,...N(O)}:Array.isArray(N)&&N.forEach(P=>{F[P]=void 0}),Object.keys(O).forEach(P=>{["effect","config","payload","id","type","_menu"].indexOf(P)<0&&(F["formCreate"+g4(P)]=Mi(O[P]))}),Object.keys(O.props).forEach(P=>{const V=O.props[P];F[P]=Mi(V),Pr.Object(V)&&Object.keys(V).forEach(L=>{F[P+">"+L]=Mi(V[L])})}),["props","effect","attrs","style","wrap"].forEach(P=>{O[P]&&typeof O[P]=="object"&&Object.keys(O[P]).forEach(V=>{F["formCreate"+g4(P)+">"+V]=Mi(O[P][V])})});const B=O._menu.attrs||{};Object.keys(B).forEach(P=>{F["__"+P]=B[P]({rule:O})}),E.propsForm.value=F,E.baseForm.isShow&&(E.baseForm.value={field:O.field,title:O.title||"",info:O.info,_control:O._control,...F},E.validateForm.value={validate:O.validate?[...O.validate]:[],$required:F.formCreate$required},E.dragForm.api.refreshValidate(),E.dragForm.api.nextTick(()=>{E.dragForm.api.clearValidateState(O.__fc__.id)}))},dragStart(O){E.moveRule=O,E.added=!1},dragUnchoose(O,F){E.addRule={children:O,oldIndex:F.oldIndex}},clickMenu(O){k.dragMenu({menu:O,children:E.children,index:E.children.length})},checkOnly(O){let F=!1;return E.dragForm.api.all().forEach(N=>{F=F||N._fc_template===O.name||N._menu&&N._menu.name===O.name}),F&&nu(E.t("struct.only",{label:x("com."+O.name+".name")||O.label})),F},dragMenu({menu:O,children:F,index:N,slot:B}){if(E.inputForm.state||O.only&&k.checkOnly(O))return;k.handleAddBefore();const P=E.dragRuleList[O.name];a.emit("drag",{item:O,dragRule:P});const V=k.makeRule(E.dragRuleList[P.name]);B&&(V.slot=B),F.splice(N,0,V),k.handleAddAfter({rule:V})},replaceField(O){const F=["array","object"].indexOf(O._menu.subForm)>-1;let N=k.parseRule(Mi([O]))[0];return F&&(N.field=vr()),N=Br.toJson(N),N=F?k.batchReplaceUni(N):k.batchReplaceField(N),k.loadRule([Br.parseJson(N)])[0]},batchReplaceField:O=>(O=O.replace(/"field"\s*:\s*"(\w[\w\d]+)"/g,(F,N)=>`"field":"${vr()}"`),k.batchReplaceUni(O)),batchReplaceUni:O=>O=O.replace(/"_fc_id"\s*:\s*"(\w[\w\d]+)"/g,()=>`"_fc_id":"id_${vr()}"`),dragAdd(O,F,N){const B=F.newIndex,P=F.item._underlying_vm_;if(P&&P.__fc__){if(E.addRule){k.handleSortBefore();const V=E.addRule.children.splice(E.addRule.children.indexOf(P),1)[0];N?V.slot=N:delete V.slot,O.splice(B,0,V),k.handleSortAfter({rule:V})}}else k.dragMenu({menu:P,children:O,index:B,slot:N});E.added=!0},dragEnd(O,{newIndex:F,oldIndex:N},B){if(!E.added&&(E.moveRule!==O||F!==N)){k.handleSortBefore();const P=E.moveRule.splice(N,1);B&&(P.slot=B),O.splice(F,0,P[0]),k.handleSortAfter({rule:P[0]})}E.moveRule=null,E.addRule=null,E.added=!1},getSlotConfig(O,F,N){let B={};return(O.slot||[]).forEach(P=>{P.name===F&&(B=P.config||{})}),{...N,dragBtn:!1,handleBtn:!!N.children&&["addChild"],...B}},makeRule(O,F){const N=F||O.rule({t:x});N._menu=Fo(O),N._fc_id||(N._fc_id="id_"+vr()),N.name||(N.name="ref_"+vr()),O.component&&(N.component=Fo(O.component)),N._computed||(N._computed={}),N.effect||(N.effect={}),v4(N,"display")||(N.display=!0),v4(N,"hidden")||(N.hidden=!1),N._fc_drag_tag=O.name;let B,P=O.only===!0;const V=N.children||[];if(O.drag&&(N.children=[B=k.makeDrag(O.drag,N._menu?N._menu.name:N.type,V,{end:(H,U)=>k.dragEnd(H.self.children,U),add:(H,U)=>k.dragAdd(H.self.children,U),start:(H,U)=>k.dragStart(H.self.children,U),unchoose:(H,U)=>k.dragUnchoose(H.self.children,U)})]),O.children&&!F&&!V.length)for(let H=0;H<(O.childrenLen||1);H++){const U=k.makeRule(E.dragRuleList[O.children]);(B||N).children.push(U)}const L=r.value!==void 0?r.value!==!1:O.mask!==!1;return O.tool===!1?N:O.inside?(N.children=k.makeChildren([{type:"DragTool",props:{dragBtn:O.dragBtn!==!1,children:O.children,mask:L,handleBtn:O.handleBtn,only:P},inject:!0,on:{delete:({self:H})=>{const U=k.getParent(H).parent;k.handleRemoveBefore({parent:U,rule:U})!==!1&&(U.__fc__.rm(),a.emit("delete",U),E.activeRule===U&&k.clearActiveRule(),k.handleRemoveAfter({rule:U}))},create:({self:H})=>{k.handleAddBefore();const U=k.getParent(H);a.emit("create",U.parent);const G=k.makeRule(U.parent._menu);U.parent.slot&&(G.slot=U.parent.slot),U.root.children.splice(U.root.children.indexOf(U.parent)+1,0,G),k.handleAddAfter({rule:U.parent})},addChild:({self:H})=>{k.handleAddBefore();const U=k.getParent(H),G=U.parent._menu,z=E.dragRuleList[G.children];if(!z)return;const $=k.makeRule(z);(G.drag?U.parent.children[0]:U.parent).children[0].children.push($),k.handleAddAfter({rule:$})},copy:({self:H})=>{k.handleCopyBefore();const U=k.getParent(H);a.emit("copy",U.parent);const G=k.replaceField(U.parent);U.root.children.splice(U.root.children.indexOf(U.parent)+1,0,G),k.handleCopyAfter({rule:U.parent})},active:({self:H})=>{const U=k.getParent(H);a.emit("active",U.parent),setTimeout(()=>{k.toolActive(U.parent)},10)}},children:N.children}]),N):{type:"DragTool",props:{dragBtn:O.dragBtn!==!1,children:O.children,mask:L,handleBtn:O.handleBtn,only:P},inject:!0,display:!!N.display,on:{delete:({self:H})=>{k.handleRemoveBefore({parent:H,rule:H.children[0]})!==!1&&(a.emit("delete",H.children[0]),H.__fc__.rm(),E.activeRule===H.children[0]&&k.clearActiveRule(),k.handleRemoveAfter({rule:H.children[0]}))},create:({self:H})=>{k.handleAddBefore(),a.emit("create",H.children[0]);const U=k.getParent(H),G=k.makeRule(H.children[0]._menu);U.parent.slot&&(G.slot=U.parent.slot),U.root.children.splice(U.root.children.indexOf(U.parent)+1,0,G),k.handleAddAfter({rule:G})},addChild:({self:H})=>{k.handleAddBefore();const U=H.children[0]._menu,G=E.dragRuleList[U.children];if(!G)return;const z=k.makeRule(G);(U.drag?H.children[0]:H).children[0].children.push(z),k.handleAddAfter({rule:z})},copy:({self:H})=>{k.handleCopyBefore(),a.emit("copy",H.children[0]);const U=k.getParent(H),G=k.replaceField(H.children[0]);H.slot&&(G.slot=H.slot),U.root.children.splice(U.root.children.indexOf(U.parent)+1,0,G),k.handleCopyAfter({rule:H.children[0]})},active:({self:H})=>{a.emit("active",H.children[0]),setTimeout(()=>{k.toolActive(H.children[0])},10)}},children:k.makeChildren([N])}},toolHandle(O,F){if(!O._fc_drag_tag||O._menu.tool===!1)return void O.__fc__.rm();let N;N=O._menu.inside?O.children[0].__fc__.exportEl:O.__fc__.parent.exportEl,N.$emit(F)},handleAddBefore(){},handleRemoveBefore(){},handleCopyBefore(){},handleSortBefore(){},addOperationRecord(){const O=k.getJson(),F=Mi(E.inputForm.data),N=E.operation.list.slice(0,E.operation.idx+1);N.push({rule:O,formData:F}),E.operation.list=N,E.operation.idx=N.length-1,E.unloadStatus=N.length!==1},prevOperationRecord(){if(!E.operation.list[E.operation.idx-1])return;const O=E.operation.list[--E.operation.idx];k.useOperationRecord(O),k.clearActiveRule()},nextOperationRecord(){if(!E.operation.list[E.operation.idx+1])return;const O=E.operation.list[++E.operation.idx];k.useOperationRecord(O),k.clearActiveRule()},useOperationRecord(O){E.inputForm.data=O.formData,k.setRule(O.rule)},handleAddAfter(){k.addOperationRecord(),k.updateTree()},handleRemoveAfter(){k.addOperationRecord(),k.updateTree()},handleCopyAfter(){k.addOperationRecord(),k.updateTree()},handleSortAfter(){k.addOperationRecord(),k.updateTree()},treeChange(O){k.triggerActive(O.rule)},getFormDescription:()=>$de(k.getDescription()),getDescription:()=>Ude(E.dragForm.rule[0].children),getSubFormDescription(O){let F=O.__fc__&&O.__fc__.parent;for(;F;){if(F.rule._menu&&["array","object"].indexOf(F.rule._menu.subForm)>-1)return $de(Ude(F.rule.children));F=F.parent}return null},getSubFormChildren(O){let F=O.__fc__&&O.__fc__.parent;for(;F;){if(F.rule._menu&&["array","object"].indexOf(F.rule._menu.subForm)>-1)return F.rule.children||[];F=F.parent}return null},updateTree:tWe(function(){St(()=>{E.treeInfo=pI(E.dragForm.rule[0].children)})},300),findTree(O){let F;const N=B=>{B.forEach(P=>{P.rule.field===O?F=P.children:P.children&&N(P.children)})};return N(E.treeInfo),F||[]},handleDragenter(O){E.bus.$emit("dragenter",O)},handleDragleave(O){E.bus.$emit("dragleave",O)},handleDrop(O){E.bus.$emit("drop",O)},changeEvent(O){E.activeRule._on=O},triggerHandle(O){O.handle()}};E.dragForm.rule=k.makeDragRule(k.makeChildren(E.children)),k.setOption({}),k.addComponent(dUe);const I=ee(()=>Object.keys(E.inputForm.data).length>0);return{...di(E),...k,dragHeight:p,t:x,handle:i,inputCheckStatus:I,fieldReadonly:m,hiddenMenu:v,hiddenItem:g,hiddenDragMenu:b,hiddenDragBtn:y}},created(){document.body.ondrop=e=>{e.preventDefault(),e.stopPropagation()},window.onbeforeunload=e=>{this.unloadStatus&&(e.returnValue=this.t("designer.unload"))}}}),OWe=["onClick"],TWe=["onClick"],MWe={class:"_fc-l-icon"},NWe={class:"_fc-l-name"},FWe={class:"_fc-tree-label"},RWe=ce("i",{class:"fc-icon icon-more"},null,-1),IWe={class:"_fc-m-tools-l"},BWe=[ce("path",{d:"M15.04 783.36h986.88v49.28H15.04zM163.2 191.36h690.88c27.2 0 49.28 22.08 49.28 49.28v542.72H113.92V240.64c0-27.2 22.08-49.28 49.28-49.28z",fill:"#7F7F7F"},null,-1),ce("path",{d:"M163.2 240.64h690.88v493.44H163.2z",fill:"#E5E5E5"},null,-1)],PWe={key:1,class:"icon",viewBox:"0 0 1024 1024"},LWe=[ce("path",{d:"M15.04 783.36h986.88v49.28H15.04zM163.2 191.36h690.88c27.2 0 49.28 22.08 49.28 49.28v542.72H113.92V240.64c0-27.2 22.08-49.28 49.28-49.28z",fill:"#2E73FF"},null,-1),ce("path",{d:"M163.2 240.64h690.88v493.44H163.2z",fill:"#E0EAFF"},null,-1)],jWe=[ce("path",{d:"M217.28 29.76h589.44c29.44 0 53.44 24 53.44 53.44v857.28c0 29.44-24 53.44-53.44 53.44H217.28c-29.44 0-53.44-24-53.44-53.44V83.52c0-29.76 24-53.76 53.44-53.76z",fill:"#7F7F7F"},null,-1),ce("path",{d:"M217.28 136.96h589.44v750.08H217.28z",fill:"#E5E5E5"},null,-1)],VWe={key:3,class:"icon",viewBox:"0 0 1024 1024"},zWe=[ce("path",{d:"M217.28 29.76h589.44c29.44 0 53.44 24 53.44 53.44v857.28c0 29.44-24 53.44-53.44 53.44H217.28c-29.44 0-53.44-24-53.44-53.44V83.52c0-29.76 24-53.76 53.44-53.76z",fill:"#2E73FF"},null,-1),ce("path",{d:"M217.28 136.96h589.44v750.08H217.28z",fill:"#E0EAFF"},null,-1)],HWe=[ce("path",{d:"M271.68 31.04h480.96c29.44 0 53.44 24 53.44 53.44v854.72c0 29.44-24 53.44-53.44 53.44H271.68c-29.44 0-53.44-24-53.44-53.44V84.48c0-29.44 23.68-53.44 53.44-53.44z",fill:"#7F7F7F"},null,-1),ce("path",{d:"M271.68 137.92h480.96v747.84H271.68z",fill:"#E5E5E5"},null,-1)],$We={key:5,class:"icon",viewBox:"0 0 1024 1024"},UWe=[ce("path",{d:"M271.68 31.04h480.96c29.44 0 53.44 24 53.44 53.44v854.72c0 29.44-24 53.44-53.44 53.44H271.68c-29.44 0-53.44-24-53.44-53.44V84.48c0-29.44 23.68-53.44 53.44-53.44z",fill:"#2E73FF"},null,-1),ce("path",{d:"M271.68 137.92h480.96v747.84H271.68z",fill:"#E0EAFF"},null,-1)],WWe=ce("div",{class:"line"},null,-1),GWe={class:"_fc-m-tools-r"},qWe=ce("i",{class:"fc-icon icon-save-online"},null,-1),KWe=ce("i",{class:"fc-icon icon-preview"},null,-1),YWe=ce("i",{class:"fc-icon icon-delete"},null,-1),XWe=ce("i",{class:"fc-icon icon-more"},null,-1),QWe=ce("div",{class:"line"},null,-1),JWe={class:"_fd-input-btn"},ZWe={key:0,class:"fc-icon icon-check"},eGe={key:0,class:"_fc-m-input"},tGe={key:0,class:"_fc-m-input-handle"},nGe={class:"_fc-r-title"},rGe={class:"_fc-r-title"},oGe={key:1,class:"_fd-preview-code"},iGe=["innerHTML"];let ipe,ape,lpe,spe,upe,cpe,dpe,fpe,ppe,hpe;mc=jo(DWe,[["render",function(e,t,n,r,o,i){const a=Qe("el-header"),l=Qe("fcDraggable"),s=Qe("el-main"),u=Qe("el-dropdown-item"),c=Qe("el-dropdown-menu"),d=Qe("el-dropdown"),f=Qe("el-tree"),p=Qe("el-container"),m=Qe("el-aside"),v=Qe("el-button"),g=Qe("el-popconfirm"),b=Qe("el-switch"),y=Qe("ViewForm"),w=Qe("DragForm"),x=Qe("el-tag"),_=Qe("el-input"),E=Qe("el-divider"),C=Qe("EventConfig"),T=Qe("el-tab-pane"),k=Qe("el-tabs"),I=Qe("el-dialog");return Y(),Le(p,{class:"_fc-designer",style:$t(e.height?`height:${e.dragHeight};flex:0;`:""),onDragenter:e.handleDragenter,onDragleave:e.handleDragleave,onDrop:e.handleDrop},{default:he(()=>[ie(s,null,{default:he(()=>[(Y(),Le(p,{style:{height:"100%"},key:e.locale&&e.locale.name},{default:he(()=>[ie(m,{class:"_fc-l",width:"266px"},{default:he(()=>[ie(p,{style:{height:"100%"}},{default:he(()=>[ie(a,{height:"40px",class:"_fc-l-tabs"},{default:he(()=>[ce("div",{class:oe(["_fc-l-tab",{active:e.activeMenuTab==="menu"}]),onClick:t[0]||(t[0]=O=>e.activeMenuTab="menu")},Ye(e.t("menu.component")),3),ce("div",{class:oe(["_fc-l-tab",{active:e.activeMenuTab==="tree"}]),onClick:t[1]||(t[1]=O=>e.activeMenuTab="tree")},Ye(e.t("menu.tree")),3)]),_:1}),nn(ie(s,null,{default:he(()=>[(Y(!0),fe(bt,null,bn(e.menuList,(O,F)=>(Y(),fe(bt,null,[e.hiddenMenu.indexOf(O.name)===-1?(Y(),fe("div",{class:"_fc-l-group",key:F},[ce("h4",{class:"_fc-l-title",onClick:N=>O.hidden=!O.hidden},[Dt(Ye(e.t("menu."+O.name)||O.title)+" ",1),ce("i",{class:oe(["fc-icon icon-arrow",{down:!O.hidden}])},null,2)],8,OWe),nn(ie(l,{group:{name:"default",pull:"clone",put:!1},sort:!1,itemKey:"name",class:"_fc-l-list",list:O.list},{item:he(({element:N})=>[e.hiddenItem.indexOf(N.name)===-1?(Y(),fe("div",{key:0,class:"_fc-l-item",onClick:B=>e.clickMenu(N)},[ce("div",MWe,[ce("i",{class:oe(["fc-icon",N.icon||"icon-input"])},null,2)]),ce("span",NWe,Ye(e.t("com."+N.name+".name")||N.label),1)],8,TWe)):Fe("",!0)]),_:2},1032,["list"]),[[$n,!O.hidden]])])):Fe("",!0)],64))),256))]),_:1},512),[[$n,e.activeMenuTab==="menu"]]),e.activeMenuTab==="tree"?(Y(),Le(s,{key:0},{default:he(()=>[ie(f,{ref:"treeRef",data:e.treeInfo,"default-expand-all":"","expand-on-click-node":!1,onCurrentChange:e.treeChange},{default:he(({node:O,data:F})=>[ce("div",{class:oe(["_fc-tree-node",{active:e.activeRule===F.rule}])},[ce("div",FWe,[ce("i",{class:oe(["fc-icon",F.rule._menu&&F.rule._menu.icon||"icon-cell"])},null,2),ce("span",null,Ye((F.rule.title||"").trim()||F.rule.props&&F.rule.props.label||e.t("com."+(F.rule._menu&&F.rule._menu.name)+".name")||F.rule.type),1)]),F.slot?Fe("",!0):(Y(),fe("div",{key:0,class:"_fc-tree-more",onClick:t[2]||(t[2]=Gt(()=>{},["stop"]))},[ie(d,{trigger:"click",size:"default"},{dropdown:he(()=>[ie(c,null,{default:he(()=>[F.rule._fc_drag_tag!=="_"?(Y(),Le(u,{key:"1",onClick:N=>e.toolHandle(F.rule,"copy")},{default:he(()=>[Dt(Ye(e.t("props.copy")),1)]),_:2},1032,["onClick"])):Fe("",!0),F.rule._menu&&F.rule._menu.children&&F.rule._fc_drag_tag!=="_"?(Y(),Le(u,{key:"2",onClick:N=>e.toolHandle(F.rule,"addChild")},{default:he(()=>[Dt(Ye(e.t("form.appendChild")),1)]),_:2},1032,["onClick"])):Fe("",!0),ie(u,{key:"3",onClick:N=>e.toolHandle(F.rule,"delete")},{default:he(()=>[Dt(Ye(e.t("props.delete")),1)]),_:2},1032,["onClick"])]),_:2},1024)]),default:he(()=>[RWe]),_:2},1024)]))],2)]),_:1},8,["data","onCurrentChange"])]),_:1})):Fe("",!0)]),_:1})]),_:1}),ie(p,{class:"_fc-m"},{default:he(()=>[ie(a,{class:"_fc-m-tools",height:"45"},{default:he(()=>[ce("div",IWe,[e.inputForm.state?Fe("",!0):(Y(),fe(bt,{key:0},[e.getConfig("showDevice")!==!1?(Y(),fe(bt,{key:0},[e.device!=="pc"?(Y(),fe("svg",{key:0,onClick:t[3]||(t[3]=O=>e.device="pc"),class:"icon",viewBox:"0 0 1024 1024"},BWe)):Fe("",!0),e.device==="pc"?(Y(),fe("svg",PWe,LWe)):Fe("",!0),e.device!=="pad"?(Y(),fe("svg",{key:2,onClick:t[4]||(t[4]=O=>e.device="pad"),class:"icon",viewBox:"0 0 1024 1024"},jWe)):Fe("",!0),e.device==="pad"?(Y(),fe("svg",VWe,zWe)):Fe("",!0),e.device!=="mobile"?(Y(),fe("svg",{key:4,onClick:t[5]||(t[5]=O=>e.device="mobile"),class:"icon",viewBox:"0 0 1024 1024"},HWe)):Fe("",!0),e.device==="mobile"?(Y(),fe("svg",$We,UWe)):Fe("",!0),WWe],64)):Fe("",!0),ce("div",null,[ce("i",{class:oe(["fc-icon icon-pre-step",{disabled:!e.operation.list[e.operation.idx-1]}]),onClick:t[6]||(t[6]=(...O)=>e.prevOperationRecord&&e.prevOperationRecord(...O))},null,2),ce("i",{class:oe(["fc-icon icon-next-step",{disabled:!e.operation.list[e.operation.idx+1]}]),onClick:t[7]||(t[7]=(...O)=>e.nextOperationRecord&&e.nextOperationRecord(...O))},null,2)])],64))]),ce("div",GWe,[e.inputForm.state?Fe("",!0):(Y(),fe(bt,{key:0},[ft(e.$slots,"handle"),e.getConfig("showSaveBtn",!1)?(Y(),Le(v,{key:0,type:"success",plain:"",size:"small",onClick:e.handleSave},{default:he(()=>[qWe,Dt(" "+Ye(e.t("props.save")),1)]),_:1},8,["onClick"])):Fe("",!0),ie(v,{type:"primary",plain:"",size:"small",onClick:e.openPreview},{default:he(()=>[KWe,Dt(" "+Ye(e.t("props.preview")),1)]),_:1},8,["onClick"]),ie(g,{title:e.t("designer.clearWarn"),width:"200px","confirm-button-text":e.t("props.clear"),"cancel-button-text":e.t("props.cancel"),onConfirm:e.clearDragRule},{reference:he(()=>[ie(v,{type:"danger",plain:"",size:"small"},{default:he(()=>[YWe,Dt(Ye(e.t("props.clear")),1)]),_:1})]),_:1},8,["title","confirm-button-text","cancel-button-text","onConfirm"]),e.handle&&e.handle.length?(Y(),Le(d,{key:1,trigger:"click",size:"default"},{dropdown:he(()=>[ie(c,null,{default:he(()=>[(Y(!0),fe(bt,null,bn(e.handle,O=>(Y(),Le(u,{onClick:Gt(F=>e.triggerHandle(O),["stop"])},{default:he(()=>[ce("div",null,Ye(O.label),1)]),_:2},1032,["onClick"]))),256))]),_:1})]),default:he(()=>[ie(v,{class:"_fd-m-extend",plain:"",size:"small"},{default:he(()=>[XWe]),_:1})]),_:1})):Fe("",!0)],64)),QWe,ce("div",JWe,[e.inputCheckStatus?(Y(),fe("i",ZWe)):Fe("",!0),ce("span",null,Ye(e.t("props.inputData"))+"\uFF1A",1),ie(b,{size:"small","model-value":e.inputForm.state,"inline-prompt":"","onUpdate:modelValue":e.openInputData},null,8,["model-value","onUpdate:modelValue"])])])]),_:3}),ie(s,{class:"_fc-m-con"},{default:he(()=>[(Y(),fe("a",{key:e.activeRule?e.activeRule._fc_id:"",style:{"background-image":"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAAiCAYAAAAu2wBPAAABG2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+l1vpCgAAAAFzUkdCAK7OHOkAAAAEc0JJVAgICAh8CGSIAAAQoElEQVR4nO1dW3KbSBf+usGM335lBQMjKVV6imYFI6/Azgoir2CcFdhegZMVRF5BnBVYs4I4T1QJMMwKwrw5GLr/B53GRwhdLTuZDF9VKgj6crr79OlzAwMNGjRo0KBBgwYNGjRo0KBBgwYNGjT4mSHiOP4MoL+Dtg48zxsDQBzH1wAGqyoopc7b7fbZDvpu0KBBg40hi6J4v4N2bpjwG2AN4QcAUsqrHfTdoEGDBltBWpY1fmwjSqlP7HqwZrWx53k3j+27QYMGDbaF7XleEsfxCMCQ3R8DSNZtREr5jl3/yR4l1BYAuJjVDBvtr0GDBt8VNgDkeX5p2/bQ3CyK4rLT6Yw2bYzM3xa7dVzxCxqkAC63aL91d3fXWlam1+slm7bbYDnCMBxqrV0A6Ha7Z+vUieO4lef5CQAIIW46nc53PfB833c3Kf8z8ZHv++7e3l7fsqxf6VZ6d3f31880xm1hA0C32x3HcZxgqqXBsqw3AEZbtHfKrlMm/FqY1f5GnuelW7R/6DjOUrqiKIIQYqyU2kqIN6jFGynlgK7P1qlwd3fXchzH8MMI31njdxznGsTfayAB4D0ZMc8EEnwfhBADAFBKlc8cx8Ht7e24KIrzbrc7/k4kbgVzmO1CgEt2zRl0EMexu0lDVSGnlHrPrk8qxT/hCaG1HgghPkRR9OEp+2nQ4EdFEARnjuPERvjVQWs9kFJeB0Fw9nyUbY/JZNKPouij4zixbdvuLtq02fV7AKWgKopigA20QKXUiZQP8lRKOWbX3C9YaoaPxEgpNWNG27b9a57nHvXXAjAMw/CvRhNswKGUOvjeNDwlgiAYSCm5NTZSSl3atn0DTLVz27aHZp9IKU/DMEx+9H0ihDgCcLTLNksBSMGQMUiLsyzrIo7j0wX1AAB5nh8b9VlKecgejStpMaXfjmuGj4FS6u9FqnsQBGMppfE5bmvON/hJ8W8z+TZBHMctpVRp+Witj2sEWwrgbDKZXFmW9RkAhBCn+A/uE64BoiiKS8uyBvSzhdmARhWpOVFIyPFkam5Ov+GVeMT4qdDtdsdRFKUAWkKI2iTvMAyPhBB/aK37QogUQKKU+lTdHEEQDGzb/hUA6hzHYRgeWZb1v6Io/qk6+n3fd/f39/8AgDzPZwQ2+WcGQohDrXVLCJFIKW8AXFb9o+ReOASA+/v7L3t7e0me50MhxKEQIsmy7JzT5fu+6zjOn3jweaVKqctVGz8MwyHNiSuESNapswmofXNQ1tIUx3HJL57n1QbKVq3JU4CtF5+fv/M8H9X1z2n0PO+S+O0NAGitP3U6ndGCMoeY7ruZ+SFeOmRpZkmWZe+rfRdFMRBCuPRztEyre/ny5U0URSNMM0DcIAgGpj+zDoav+doppd5XeblCW7qIlzmozVda6z4ALNoDZp6UUq9Y9UEcx+Xc8XY5Pav21owA7HQ6oziOL7Bc8MFMQrvdNo1x7a+M8NLG5SrreMvgxzZIUSPESTiUDnEhRPlMSnlye3s7FkK8NnQKIVxzotq2fQ4WBKDT9qNSCiREZwSg4zinSqkh1R2a+5PJpG9Z1scqDeSkPgvD8C1nXAoojADAsqx3SqkjKaVrntu2fQlKWwqC4Kxi/pixDW9vb8ffvn07rm6aRXMipRwGQXBebWsbRFF0AeZi4TTx+aZNNKSx1Gr5UsqPSqkWgHR/f//JgxVkUn7A/PzAcZzTIAjedrvdmYNdCHFqBEIQBC+EEBfsWQpgVCnjkRZWQko5jKLoXZZl7x3HuVZKufy54zjDMAyP+cHLDhhUXUR1kFK+zfP8EgDyPE9Y3RFdjqMoOsRsmtwXUHqb4TceYKH6AHAymUxev3z5cibfd9kerKvH54nRzfssxxkEwYmU8sI8q+ytOXpmBCDhCvM5gXMwb3GQkJspz4TcGzABtKO3TlaCBJNLP5PKfR4NvFFKfZJS/g/TMbS01gMAHwEcAMD9/f3YcRwAgBDiD94PnbbmZ4ufoAQj/FNQ4Mf3fdeyrGs8zMuVUuqLlPJXKt8SQnwIwzBdkDoyxIIDqiJkEpBAFkL0tdYDrfWAGK8UGjVzkiilLmlOqr6kbTEEAK31WGv9V3W+tdYXAI6B6aaVUg4BQEr5BhX+C4JggIfxb5tNsDZI+PEULrNe5RiklBdBELQWpQitM4dUJgEwFkK4xIcAcOI4zhDTMV8BSMx6YsorF77v37BDzdRL19Heaf4WliMLalD3jDRWM7YUwJjm5hWmvOxalnXt+/7v/NDlws/wBABYlvUHjcslBcEjGlKaG67QpPSvSs8Fu3W1ip45AbhFTuCMkMM0mGLAtb90F2+dLAPlnvW5D4SfgnmenzDN6V273X7L6p5TvSOt9SAMw2Gn0xn1er0kDMOxEGIghBjEcdxi2uGMQLRt+xWImShU36JyN6bOL7/88kFr3SLaDiqmxLlhDlrIOgHYwlRIHZsTe39/PyXBYITfTZZlrznTmZMRgGvGRo/e4EH4jdrt9jGfTzMnNXRsBKXUORcQNN+fqe9hEASX3W53TO6LxNz3fX/GvOcBNf4G0iaIokgvey6lHBqzijQ/APP+NN/335v1klKe+r5faw4DaCmlzvM8H9U8AwAIIca//fZbGZxh62Xqz2iZlOEwBODu7e0N8OC/4wJiF2gBSLTW55ZlXZk83IqvMc2ybEbIkZXzGYBJhzqmem+YcvKu0+mUe7A6LqNQtNvt18CsdaOUes33zrb08DQYAKWDuKxIOYHLMCPkWPCjenLs9LSWUp5GUaT5P6XUVzqtXSqW2LZd95ZKKqWcMe08z0uzLCsXQwjBI9elEKXouIEZ+4ielXOxv79/yOqcA9NFMCe7EGJcPaF7vV7CfKQuCbUq0izLDrrd7rjX6yW9Xi/xPC/lQSil1NvqRqTNk1THprUuaZZSzjBjdU4egbSqHXmelyqlSmHL6ddal2tDmxvAbKpV3fztGjT/rumvqgj0er2E00p+1zq863a7Z2a96oRknucz82zbNu8rqZrY/GAXQnDf2K4FIJRSx51OZ+R5XsroN75KKKXmfJFkZpoDfEhrBwCfsizzlFIHWZbNWYRa6/JQI4ViXaxDz6hKT50JjKIozi3LMtJ0EMex63leUi1HuYID87uS+3fE02LwxLl/NRhRcCAFpsIHzOysE8Zc2wPQN9pexQw+BHBFGp4LIC2K4r1lWUOuITLBUgaL9vb2XnFfSV3+lVLKZOvPaJQMVwu0DC7IDhcIT4M+o9OUS9aYk20xqrtp2/aNmQ/jCAdm3Q6YjeKX1oYQYuvEamNiL8Ld3d1fdDkw94QQo7qylmVdGc2Dj6HS30o/atVP5nleGkWR+Tm3Llprfq/OJbLSj78mkrqDhvvkpJSv6nhZCNHSeqps53nex4N7LAWQTCaTfhzHf+Z5/oJcQCDz39R5sS6RSqly7pfQ41bpqRWANaZqqTJWOh1Wcv/qtC2ApcXsEFd1X5PJ8/xv27ZvqptZCFEyhFLq70WNkr8BwDT4ACCtCIEBMNXwKPhxQ9G0GwB9M7FsM5TClnIUAZRJqINlA+SLug7tDCeVw2cO9/f3bhzHCRNAyaKyfE62gVLqn7r7tMlTTH1Zrrnf6/USE50UQgx833dJ2+I+1Y1fpWT9rlXXbEpgylcL2qodQ7XMFmSWqAg7AEBRFKllWXXFbzDNyKilZYu+kwWPuIA9klLOuUmMsAGmObrmmgdBlFLgvMrrbIit6KkVgJQTeIUHrWJQV65GyKVA7TvBW5/Wi6CU+tJut7faBOTA3hSXmM6D6/u+a4QT00RuAPRJ+wIe1PFFNF4ppb4s61AIcbPs+SIopVZqHEVRpC9fvuRaxkJQKsE2pABYOd+1mgoPhjiO8yf5DAf0+LmyCdbtY+dm5yOQgFLSaoJyc+BBnqqfdgOMVh3M5jn54uaCgLZtx0CpJDw28LY2PbUCEChzAo0ArDrOVwm5mXeC8YjTelfI8zxhZpW7pOiA/k+5qcnNMvJLHVG7X4Cp70IIMaT6RuMpzV9gTqAlWzJbLbTWidFAtNZXVZNqCRJMgy615hswNR0eSV5t/coHCmborQRDjsD80rtKpl8FrfUXI/gXuCOMa8UgeQ66loH48Aioj6JXYVnWKdOMlpatIOF9drvdtZQcy7LMW1q1SdoUJNmAjBLl4aO1/qvb7Y4WF33AQjuJUjAS87smGFIr5Mi5yJniOXP/FoKEWUI/j+q+DsJTLKraF5lgY3p2SuXKVAPmNugzh/6Mr/H+/p63WRtZjaLowgR1VvjxquBO8bm24zhuRVH0ldr+zB4Zult1/fFAwCNQO98824C/OmnAAgyuUuqMrmt9Uk+B+/v7sp+a99kBlBsaQP0YnhskUBL6OVz2ni995WcAbB5U4hF4nnvIcXt7e214mQVBBhVaZ6C1Hq5Lwy7oWe4omj0Ryg8k1Ag5HuFdlhbzXVGJ2F3zDR+G4VBK+dH8NpHbCoyQcen/8tSjgMKYfvaBefOXhPDItBFF0UfGGAiC4AQslWUThqTNmgLTCHkQBCembTLZS7OD05VlWTlOKeUHPieTyaTP00AeA8dxPnIhSPNdRuVRYyXwMdXR/tRYtl5xHLdIuAzpeYIfwNIBAK11GVGWUp7e3t5ex3H8ZjKZ9CeTST8Mw6Moij4IIcq0kW/fvs35+Jehki0yjKLogvNbEARnLMBWygfuU+S85vu+G0XRB1ZnDrZtf2XjOgyCYGB4qkLP0TJ6hBClUrZKAFaFgJGsVSHHI7xc+9jVhw92gk6nM2L+MVdKeU1a0VdiBrPJ3tYJH64RAPMnvmVZ3AyYMX9ZnbdgC6WU+mo0M5b3lWZZ9nqTsZGGytNKLkzbjuPEeDiwRjylotfrJYvmhPKmXDzet5UC6DuOE0dRFFfnW2v9dlEEGhX/MU9reg7Qepl1NOsVU8qVsYKSoihe/wiWDjC13ogXjNAZKKVGlmV9tizrsxDiI5jgLoriYJvXCbMsO8ADL59wfuNzU0mvKg8J4rXPURR9Jh4dYokb4e7ujsuZEynlNfvk2tr0CCHKvbVUAFLqy5h3Sv9zIZcs+nsgz+Wr2QTdbvdMKfUWs5qFEeaJ1vp1NefKgJvBhJnUHuMPJNSm2lDO3u8kdGa0G8KomsS5LjqdzpVS6kAIwWksx6amf4Rq7qRfNidE56OCWFLKMzBNCpX5XpZoz98e4if3c4HW66CyXi4rMsqy7GADn+uzoNPpjLIs+x3TtVs0Z4+ivdfrJVmWLeK3sn2+ZqSEcF7r078UwLuiKBYe/HRYcwXi0fSsDO2FYThkOYFQSp3zKI1if9mN3iPmvpIXP8qpWAcy8VytdZrneW2C6lMijuPW/f29u7e392pR+s62MF8BBqZpFOua05PJpP8U9ADT8RZFMdBap1rrdJ2NV8n+P3gu/18dzHp9T57ZFobXgc34YV2Yt7Ao9y9dxTvV8t+LnpUCkOzor0uKvPA8L6VyMR4k7tjzvIMl9Ro0WIkoir6CAk7tdnvtxNgGDdbBKh+gSeIcLXjMTZI+njj3r8F/Czwq/yO6Uxr8+7FSAALTDyTU3a983eWHy/1r8O+GZVklTz138KPBfwNrCcDqBxII5ddddvhHjxo0AFCm7oCCTg0/NXgSLHwTpAp6NWnm7wywj1hW3z197g8fNPjJQMGFxofcoEGDBg0aNGjQoEGDHeL/8DGxPwUCk/oAAAAASUVORK5CYII=) !important","background-repeat":"no-repeat !important","background-size":"cover !important","background-position":"center !important",position:"absolute !important",overflow:"hidden !important",left:"50% !important",width:"160px!important",right:"0 !important",top:"auto !important",bottom:"9px !important",display:"block !important",height:"17px !important","text-align":"center !important",opacity:"1 !important",visibility:"visible !important",margin:"0 0 0 -80px !important",padding:"0 !important"},target:"_blank",href:"https://form-create.com/"})),ce("div",{class:oe(["_fc-m-drag",e.device]),ref:"dragCon",style:$t({"--fc-drag-empty":`'${e.t("designer.dragEmpty")}'`,"--fc-child-empty":`'${e.t("designer.childEmpty")}'`})},[e.inputForm.state?(Y(),fe("div",eGe,[(Y(),Le(y,{key:e.inputForm.key,rule:e.inputForm.rule,option:e.inputForm.option,api:e.inputForm.api,"onUpdate:api":t[8]||(t[8]=O=>e.inputForm.api=O),disabled:!1},null,8,["rule","option","api"]))])):(Y(),Le(w,{key:1,rule:e.dragForm.rule,option:e.formOptions,api:e.dragForm.api,"onUpdate:api":t[9]||(t[9]=O=>e.dragForm.api=O)},null,8,["rule","option","api"]))],6),e.inputForm.state?(Y(),fe("div",tGe,[ie(v,{plain:"",onClick:t[10]||(t[10]=O=>e.inputClear())},{default:he(()=>[Dt(Ye(e.t("props.clear")),1)]),_:1}),ie(v,{plain:"",onClick:t[11]||(t[11]=O=>e.inputReset())},{default:he(()=>[Dt(Ye(e.t("props.reset")),1)]),_:1}),ie(v,{type:"primary",plain:"",onClick:t[12]||(t[12]=O=>e.inputSave())},{default:he(()=>[Dt(Ye(e.t("props.save")),1)]),_:1})])):Fe("",!0)]),_:1})]),_:3}),e.config&&e.config.showConfig===!1?Fe("",!0):(Y(),Le(m,{key:0,class:"_fc-r",width:"320px"},{default:he(()=>[ie(p,{style:{height:"100%"}},{default:he(()=>[ie(a,{height:"40px",class:"_fc-r-tabs"},{default:he(()=>[e.activeRule||e.customForm.isShow||e.config&&e.config.showFormConfig===!1?(Y(),fe("div",{key:0,class:oe(["_fc-r-tab",{active:e.activeTab==="props"}]),onClick:t[13]||(t[13]=O=>e.activeTab="props")},Ye(e.t("designer.component")),3)):Fe("",!0),e.config&&e.config.showFormConfig===!1?Fe("",!0):(Y(),fe("div",{key:1,class:oe(["_fc-r-tab",{active:e.activeTab==="form"&&(!!e.activeRule||e.customForm.isShow)}]),onClick:t[14]||(t[14]=O=>e.activeTab="form")},Ye(e.t("designer.form")),3))]),_:1}),e.config&&e.config.showFormConfig===!1?Fe("",!0):nn((Y(),Le(s,{key:0,class:"_fc-r-tab-form"},{default:he(()=>[ie(w,{rule:e.form.rule,option:e.form.option,modelValue:e.form.value,onChange:e.formOptChange,api:e.form.api,"onUpdate:api":t[15]||(t[15]=O=>e.form.api=O)},null,8,["rule","option","modelValue","onChange","api"])]),_:1},512)),[[$n,e.activeTab==="form"]]),nn((Y(),Le(s,{class:"_fc-r-tab-props",key:e.activeRule?e.activeRule._fc_id:e.customForm.config?e.customForm.key:""},{default:he(()=>[e.activeRule||e.customForm.config&&(e.customForm.config.name||e.customForm.config.label)?(Y(),fe(bt,{key:0},[ce("p",nGe,Ye(e.t("designer.type")),1),ie(x,{type:"success",effect:"plain","disable-transitions":""},{default:he(()=>[e.activeRule?(Y(),fe(bt,{key:0},[Dt(Ye(e.t("com."+e.activeRule._menu.name+".name")||e.activeRule._menu.label),1)],64)):(Y(),fe(bt,{key:1},[Dt(Ye(e.t("com."+e.customForm.config.name+".name")||e.customForm.config.label||e.customForm.config.name),1)],64))]),_:1}),e.activeRule&&e.activeRule.name?(Y(),fe(bt,{key:0},[ce("p",rGe,Ye(e.t("designer.name")),1),ie(_,{size:"small",class:"_fc-r-name-input","model-value":e.activeRule.name,readonly:""},{append:he(()=>[ce("i",{class:"fc-icon icon-auto",onClick:t[16]||(t[16]=(...O)=>e.updateName&&e.updateName(...O))})]),_:1},8,["model-value"])],64)):Fe("",!0)],64)):Fe("",!0),e.baseForm.isShow?(Y(),Le(E,{key:1},{default:he(()=>[Dt(Ye(e.t("designer.rule")),1)]),_:1})):Fe("",!0),nn(ie(w,{api:e.baseForm.api,"onUpdate:api":t[17]||(t[17]=O=>e.baseForm.api=O),rule:e.baseForm.rule,option:e.baseForm.options,modelValue:e.baseForm.value,onChange:e.baseChange},null,8,["api","rule","option","modelValue","onChange"]),[[$n,e.baseForm.isShow]]),e.propsForm.isShow?(Y(),Le(E,{key:2},{default:he(()=>[Dt(Ye(e.t("designer.props")),1)]),_:1})):Fe("",!0),nn(ie(w,{api:e.propsForm.api,"onUpdate:api":t[18]||(t[18]=O=>e.propsForm.api=O),rule:e.propsForm.rule,option:e.propsForm.options,modelValue:e.propsForm.value,onChange:e.propChange,onRemoveField:e.propRemoveField},null,8,["api","rule","option","modelValue","onChange","onRemoveField"]),[[$n,e.propsForm.isShow]]),e.customForm.isShow&&e.customForm.propsShow?(Y(),Le(E,{key:3},{default:he(()=>[Dt(Ye(e.t("designer.props")),1)]),_:1})):Fe("",!0),e.customForm.isShow&&e.customForm.propsShow?(Y(),Le(w,{api:e.customForm.api,"onUpdate:api":t[19]||(t[19]=O=>e.customForm.api=O),rule:e.customForm.rule,option:e.customForm.options,key:e.customForm.key,onChange:e.customFormChange},null,8,["api","rule","option","onChange"])):Fe("",!0),e.eventShow?(Y(),Le(E,{key:5},{default:he(()=>[Dt(Ye(e.t("designer.event")),1)]),_:1})):Fe("",!0),e.eventShow?(Y(),Le(C,{key:6,"event-name":e.activeRule&&e.activeRule._menu.event||[],"component-name":e.activeRule&&e.activeRule._menu.name||"","model-value":e.activeRule&&e.activeRule._on||{},"onUpdate:modelValue":e.changeEvent},null,8,["event-name","component-name","model-value","onUpdate:modelValue"])):Fe("",!0),e.activeRule?(Y(),fe(bt,{key:7},[e.validateForm.isShow?(Y(),Le(E,{key:0},{default:he(()=>[Dt(Ye(e.t("designer.validate")),1)]),_:1})):Fe("",!0),e.validateForm.isShow?(Y(),Le(w,{api:e.validateForm.api,"onUpdate:api":t[20]||(t[20]=O=>e.validateForm.api=O),rule:e.validateForm.rule,option:e.validateForm.options,modelValue:e.validateForm.value,onChange:e.validateChange,key:e.activeRule._fc_id},null,8,["api","rule","option","modelValue","onChange"])):Fe("",!0)],64)):Fe("",!0)]),_:1})),[[$n,e.activeTab==="props"]])]),_:1})]),_:1})),ie(I,{modelValue:e.preview.state,"onUpdate:modelValue":t[23]||(t[23]=O=>e.preview.state=O),width:"800px",class:"_fd-preview-dialog","append-to-body":""},{default:he(()=>[ie(k,{class:"_fd-preview-tabs",modelValue:e.previewStatus,"onUpdate:modelValue":t[21]||(t[21]=O=>e.previewStatus=O)},{default:he(()=>[ie(T,{label:e.t("form.formMode"),name:"form"},null,8,["label"]),ie(T,{label:e.t("form.componentMode"),name:"component"},null,8,["label"])]),_:1},8,["modelValue"]),e.previewStatus==="form"?(Y(),fe(bt,{key:0},[e.preview.state?(Y(),Le(y,{key:0,rule:e.preview.rule,option:e.preview.option,api:e.preview.api,"onUpdate:api":t[22]||(t[22]=O=>e.preview.api=O)},null,8,["rule","option","api"])):Fe("",!0)],64)):(Y(),fe("pre",oGe,[ce("code",{innerHTML:e.preview.html},null,8,iGe)]))]),_:1},8,["modelValue"])]),_:3}))]),_:3})]),_:3},8,["style","onDragenter","onDragleave","onDrop"])}]]),ipe=Te({name:"DragTool",emits:["create","copy","addChild","delete","active","fc.el"],props:{dragBtn:Boolean,children:String,mask:Boolean,handleBtn:[Boolean,Array],formCreateInject:Object,unique:String,only:Boolean},inject:{fcx:{default:null},designer:{default:null},dragTool:{default:null}},provide(){return{dragTool:this}},computed:{isCreate(){return!!this.dragTool&&!!this.dragTool.children},btns(){return Array.isArray(this.handleBtn)?!!this.handleBtn.length&&this.handleBtn:this.handleBtn!==!1},id(){return this.unique||this.formCreateInject.id},hiddenMenu(){return this.designer.ctx.hiddenDragMenu},hiddenBtn(){return this.designer.ctx.hiddenDragBtn}},methods:{active(){this.fcx.active!==this.id&&(this.fcx.active=this.id,this.$emit("active"))}},mounted(){this.$emit("fc.el",this)}}),ape={key:0,class:"_fd-drag-mask"},lpe={key:1,class:"_fd-drag-l"},spe={key:0,class:"_fd-drag-btn",style:{cursor:"move"}},upe=[ce("i",{class:"fc-icon icon-move"},null,-1)],cpe={key:2,class:"drag-r"},dpe=[ce("i",{class:"fc-icon icon-add"},null,-1)],fpe=[ce("i",{class:"fc-icon icon-copy"},null,-1)],ppe=[ce("i",{class:"fc-icon icon-add-child"},null,-1)],hpe=[ce("i",{class:"fc-icon icon-delete"},null,-1)];const vpe=jo(ipe,[["render",function(e,t,n,r,o,i){return Y(),fe("div",{class:oe(["_fd-drag-tool",{active:e.fcx.active===e.id}]),onClick:t[4]||(t[4]=Gt((...a)=>e.active&&e.active(...a),["stop"]))},[e.mask?(Y(),fe("div",ape)):Fe("",!0),e.hiddenBtn?Fe("",!0):(Y(),fe("div",lpe,[e.fcx.active===e.id&&e.dragBtn!==!1?(Y(),fe("div",spe,upe)):Fe("",!0)])),e.btns===!1||e.hiddenMenu?Fe("",!0):(Y(),fe("div",cpe,[ft(e.$slots,"handle",{},()=>[e.isCreate&&(e.btns===!0||e.btns.indexOf("create")>-1)?(Y(),fe("div",{key:0,class:"_fd-drag-btn",onClick:t[0]||(t[0]=a=>e.$emit("create"))},dpe)):Fe("",!0),!e.only&&(e.btns===!0||e.btns.indexOf("copy")>-1)?(Y(),fe("div",{key:1,class:"_fd-drag-btn",onClick:t[1]||(t[1]=a=>e.$emit("copy"))},fpe)):Fe("",!0),e.children&&(e.btns===!0||e.btns.indexOf("addChild")>-1)?(Y(),fe("div",{key:2,class:"_fd-drag-btn",onClick:t[2]||(t[2]=a=>e.$emit("addChild"))},ppe)):Fe("",!0),e.btns===!0||e.btns.indexOf("delete")>-1?(Y(),fe("div",{key:3,class:"_fd-drag-btn _fd-drag-danger",onClick:t[3]||(t[3]=a=>e.$emit("delete"))},hpe)):Fe("",!0)])])),ft(e.$slots,"default")],2)}]]),aGe=Te({name:"Struct",emits:["update:modelValue"],props:{modelValue:[Object,Array,Function],title:String,defaultValue:{require:!1},validate:Function},inject:["designer"],computed:{t(){return this.designer.setupState.t},configured(){return!Pr.empty(this.modelValue)}},data:()=>({editor:null,visible:!1,oldVal:null}),watch:{modelValue(){this.load()},visible(e){e&&this.load()}},methods:{load(){const e=pp(Hde(this.modelValue?Mi(this.modelValue):this.defaultValue));this.oldVal=e,this.$nextTick(()=>{this.editor=Fo(Mg(this.$refs.editor,{lineNumbers:!0,mode:"javascript",lint:!0,line:!0,tabSize:2,lineWrapping:!0,value:e||""}))})},onOk(){const e=this.editor.getValue();let t;try{t=new Function("return "+e)()}catch(n){return console.error(n),nu(this.t("struct.errorMsg")),!1}return this.validate&&this.validate(t)===!1?(nu(this.t("struct.errorMsg")),!1):(this.visible=!1,pp(t)!==this.oldVal&&this.$emit("update:modelValue",t),!0)}}}),lGe={class:"_fd-struct"},sGe={key:0,ref:"editor"},uGe=jo(aGe,[["render",function(e,t,n,r,o,i){const a=Qe("el-button"),l=Qe("el-badge"),s=Qe("el-dialog");return Y(),fe("div",lGe,[ie(l,{type:"warning","is-dot":"",hidden:!e.configured},{default:he(()=>[ie(a,{onClick:t[0]||(t[0]=u=>e.visible=!0),size:"small"},{default:he(()=>[Dt(Ye(e.title||e.t("struct.title")),1)]),_:1})]),_:1},8,["hidden"]),ie(s,{class:"_fd-struct-con",title:e.title||e.t("struct.title"),modelValue:e.visible,"onUpdate:modelValue":t[2]||(t[2]=u=>e.visible=u),"destroy-on-close":"","close-on-click-modal":!1,"append-to-body":""},{footer:he(()=>[ce("div",null,[ie(a,{onClick:t[1]||(t[1]=u=>e.visible=!1),size:"default"},{default:he(()=>[Dt(Ye(e.t("props.cancel")),1)]),_:1}),ie(a,{type:"primary",onClick:e.onOk,size:"default",color:"#2f73ff"},{default:he(()=>[Dt(Ye(e.t("props.ok")),1)]),_:1},8,["onClick"])])]),default:he(()=>[e.visible?(Y(),fe("div",sGe,null,512)):Fe("",!0)]),_:1},8,["title","modelValue"])])}]]),cGe=jo(Te({name:"fcRow",mounted(){}}),[["render",function(e,t,n,r,o,i){const a=Qe("el-col");return Y(),Le(a,{span:24},{default:he(()=>[ce("div",Un({class:["_fd-row el-row",{"_fc-child-empty":!e.$slots.default}]},e.$attrs),[ft(e.$slots,"default")],16)]),_:3})}]]),dGe=Te({name:"HtmlEditor",emits:["update:modelValue"],props:{modelValue:String,title:String,defaultValue:{require:!1}},inject:["designer"],computed:{t(){return this.designer.setupState.t}},data:()=>({editor:null,visible:!1,oldVal:null}),watch:{modelValue(){this.load()},visible(e){e&&this.load()}},methods:{validateXML(e){var t;const n=new DOMParser().parseFromString(e,"application/xml").getElementsByTagName("parsererror");return n.length>0&&(t=n[0].innerText.split(`
| `)[0])!=null?t:""},load(){this.oldVal=this.modelValue,this.$nextTick(()=>{this.editor=Fo(Mg(this.$refs.editor,{lineNumbers:!0,mode:"xml",lint:!0,line:!0,tabSize:2,lineWrapping:!0,value:this.modelValue||""}))})},onOk(){const e=this.editor.getValue();return this.validateXML(e)?(nu(this.t("struct.errorMsg")),!1):(this.visible=!1,e!==this.oldVal&&this.$emit("update:modelValue",e),!0)}}}),fGe={class:"_fd-html-editor"},pGe={key:0,ref:"editor"},hGe=jo(dGe,[["render",function(e,t,n,r,o,i){const a=Qe("el-button"),l=Qe("el-dialog");return Y(),fe("div",fGe,[ie(a,{onClick:t[0]||(t[0]=s=>e.visible=!0),style:{width:"100%"}},{default:he(()=>[Dt(Ye(e.title||e.t("struct.title")),1)]),_:1}),ie(l,{class:"_fd-html-editor-con",title:e.title||e.t("struct.title"),modelValue:e.visible,"onUpdate:modelValue":t[2]||(t[2]=s=>e.visible=s),"close-on-click-modal":!1,"append-to-body":""},{footer:he(()=>[ce("div",null,[ie(a,{onClick:t[1]||(t[1]=s=>e.visible=!1),size:"default"},{default:he(()=>[Dt(Ye(e.t("props.cancel")),1)]),_:1}),ie(a,{type:"primary",onClick:e.onOk,size:"default"},{default:he(()=>[Dt(Ye(e.t("props.ok")),1)]),_:1},8,["onClick"])])]),default:he(()=>[e.visible?(Y(),fe("div",pGe,null,512)):Fe("",!0)]),_:1},8,["title","modelValue"])])}]]),vGe=Te({name:"StructEditor",props:{modelValue:[Object,Array,Function],defaultValue:{require:!1}},inject:["designer"],data:()=>({editor:null,visible:!1,err:!1,oldVal:null}),computed:{t(){return this.designer.setupState.t}},mounted(){this.$nextTick(()=>{this.load()})},methods:{load(){const e=this.modelValue?pp(this.modelValue):"";this.oldVal=e,this.$nextTick(()=>{this.editor=Fo(Mg(this.$refs.editor,{lineNumbers:!0,mode:"javascript",lint:!0,line:!0,tabSize:2,lineWrapping:!0,value:e||""}))})},save(){const e=this.editor.getValue();let t;try{t=new Function("return "+e)()}catch(n){return console.error(n),nu(this.t("struct.errorMsg")),!1}return this.validate&&this.validate(t)===!1?(this.err=!0,!1):(this.visible=!1,pp(t)!==this.oldVal&&this.$emit("update:modelValue",t),!0)}}}),mGe={class:"_fd-struct-editor"},gGe={ref:"editor"},yGe=jo(vGe,[["render",function(e,t,n,r,o,i){return Y(),fe("div",mGe,[ce("div",gGe,null,512)])}]]),bGe=Te({name:"FetchConfig",emits:["update:modelValue"],props:{modelValue:[Object,String],to:String},components:{DragForm:Br.$form(),FnEditor:Gx,StructEditor:yGe},inject:["designer"],data(){return{visible:!1,value:Mi(this.modelValue||{}),form:{api:{},formData:{},rule:[],options:{form:{labelWidth:"90px",size:"default"},submitBtn:!1,resetBtn:!1}}}},computed:{t(){return this.designer.setupState.t},configured(){return!Pr.empty(this.modelValue)}},watch:{visible(e){e&&(this.value=Mi(this.modelValue||{}))}},methods:{open(){this.visible=!0},active(){const e=this.value;this.form.rule=e.type==="static"?[]:(t=>[{type:"input",field:"action",title:t("fetch.action"),value:"",props:{size:"default"},validate:[{required:!0,message:t("fetch.actionRequired"),trigger:"blur"}]},{type:"radio",field:"method",title:t("fetch.method"),value:"GET",props:{size:"default"},options:[{label:"GET",value:"GET"},{label:"POST",value:"POST"}],$required:!0},{type:"TableOptions",field:"headers",title:t("fetch.headers"),value:{},props:{column:[{label:t("props.key"),key:"label"},{label:t("props.value"),key:"value"}],valueType:"object",size:"default"}},{type:"TableOptions",field:"data",title:t("fetch.data"),value:{},props:{column:[{label:t("props.key"),key:"label"},{label:t("props.value"),key:"value"}],valueType:"object",size:"default"}}])(this.t),this.form.formData={...e},this.form.label=e.label,this.form.type=e.type,this.form.data=e.data,this.form.parse=e.parse||"",this.form.onError=e.onError||""},save(){this.form.api.validate().then(()=>{const e={...this.form.formData};this.$refs.parse&&!this.$refs.parse.save()||this.$refs.error&&!this.$refs.error.save()||(e.parse=this.form.parse,e.onError=this.form.onError,e.label=this.form.label,e.type=this.form.type,e.to=this.to||"options",this.$emit("update:modelValue",e),this.visible=!1)}).catch(e=>{console.error(e),nu(e[Object.keys(e)[0]][0].message)})}},created(){this.active()}}),AGe={class:"_fd-gfc"},wGe=jo(bGe,[["render",function(e,t,n,r,o,i){const a=Qe("el-button"),l=Qe("el-badge"),s=Qe("DragForm"),u=Qe("el-tab-pane"),c=Qe("FnEditor"),d=Qe("el-tabs"),f=Qe("el-container"),p=Qe("el-dialog");return Y(),fe("div",AGe,[ie(l,{type:"warning","is-dot":"",hidden:!e.configured},{default:he(()=>[ie(a,{onClick:t[0]||(t[0]=m=>e.visible=!0),size:"small"},{default:he(()=>[Dt(Ye(e.t("struct.title")),1)]),_:1})]),_:1},8,["hidden"]),ie(p,{class:"_fd-gfc-dialog",title:e.t("fetch.optionsType.fetch"),modelValue:e.visible,"onUpdate:modelValue":t[6]||(t[6]=m=>e.visible=m),"destroy-on-close":"","close-on-click-modal":!1,"append-to-body":"",width:"980px"},{footer:he(()=>[ce("div",null,[ie(a,{size:"default",onClick:t[5]||(t[5]=m=>e.visible=!1)},{default:he(()=>[Dt(Ye(e.t("props.cancel")),1)]),_:1}),ie(a,{type:"primary",size:"default",onClick:e.save,color:"#2f73ff"},{default:he(()=>[Dt(Ye(e.t("props.ok")),1)]),_:1},8,["onClick"])])]),default:he(()=>[ie(f,{class:"_fd-gfc-con",style:{height:"450px"}},{default:he(()=>[ie(d,{"model-value":"first",class:"_fc-tabs",style:{width:"100%"}},{default:he(()=>[ie(u,{label:e.t("fetch.config"),name:"first"},{default:he(()=>[ie(s,{api:e.form.api,"onUpdate:api":t[1]||(t[1]=m=>e.form.api=m),modelValue:e.form.formData,"onUpdate:modelValue":t[2]||(t[2]=m=>e.form.formData=m),rule:e.form.rule,option:e.form.options},null,8,["api","modelValue","rule","option"])]),_:1},8,["label"]),ie(u,{lazy:"",label:e.t("fetch.parse"),name:"second"},{default:he(()=>[ie(c,{style:{height:"415px"},modelValue:e.form.parse,"onUpdate:modelValue":t[3]||(t[3]=m=>e.form.parse=m),name:"parse",args:[{name:"res",info:e.t("fetch.response")}],ref:"parse"},null,8,["modelValue","args"])]),_:1},8,["label"]),ie(u,{lazy:"",label:e.t("fetch.onError"),name:"third"},{default:he(()=>[ie(c,{style:{height:"415px"},modelValue:e.form.onError,"onUpdate:modelValue":t[4]||(t[4]=m=>e.form.onError=m),name:"onError",args:["e"],ref:"error"},null,8,["modelValue"])]),_:1},8,["label"])]),_:1})]),_:1})]),_:1},8,["title","modelValue"])])}]]),xGe=Te({name:"ColorInput",inject:["designer"],emits:["update:modelValue","change"],props:{modelValue:String},watch:{modelValue(){this.value=this.modelValue||""},value(e){this.$emit("update:modelValue",e),this.$emit("change",e)}},data(){return{value:this.modelValue||""}},methods:{},created(){}}),_Ge={class:"_fd-color-input"},EGe=jo(xGe,[["render",function(e,t,n,r,o,i){const a=Qe("el-color-picker"),l=Qe("el-input");return Y(),fe("div",_Ge,[ie(l,{clearable:"",modelValue:e.value,"onUpdate:modelValue":t[1]||(t[1]=s=>e.value=s)},{append:he(()=>[ie(a,{"show-alpha":"","color-format":"hex",modelValue:e.value,"onUpdate:modelValue":t[0]||(t[0]=s=>e.value=s)},null,8,["modelValue"])]),_:1},8,["modelValue"])])}]]),CGe=Te({name:"SizeInput",inject:["designer"],emits:["update:modelValue","change"],props:{modelValue:String,size:String,unit:{type:Array,default:()=>["auto","px","%","vh","vw","em","rem"]},defaultUnit:{type:String,default:"px"}},watch:{modelValue(){this.parseValue()}},data(){return{idx:1,num:0,oldValue:this.modelValue||""}},methods:{parseValue(){this.modelValue!=="auto"?(this.idx=Math.max(this.unit.indexOf(this.defaultUnit),0),this.unit.forEach((e,t)=>{(this.modelValue||"").indexOf(e)>-1&&(this.idx=t)}),this.num=Eg(this.modelValue)?null:parseFloat(this.modelValue||0)):(this.idx=0,this.num=0)},submit(){this.oldValue=Eg(this.num)?"":""+this.num+this.unit[this.idx],this.$emit("update:modelValue",this.oldValue),this.$emit("change",this.oldValue)},changeType(e){if(e!==void 0){if(this.idx===e)return;this.idx=e}else this.idx++,this.idx>4&&(this.idx=0);this.unit[this.idx]==="auto"?(this.oldValue="auto",this.$emit("update:modelValue","auto"),this.$emit("change","auto")):this.submit()}},created(){this.parseValue()}}),SGe={class:"_fd-size-input"},kGe=jo(CGe,[["render",function(e,t,n,r,o,i){const a=Qe("el-button"),l=Qe("el-inputNumber"),s=Qe("el-dropdown-item"),u=Qe("el-dropdown-menu"),c=Qe("el-dropdown");return Y(),fe("div",SGe,[e.unit[e.idx]==="auto"?(Y(),Le(a,{key:0,size:e.size,style:{width:"150px"},onClick:t[0]||(t[0]=d=>e.changeType())},{default:he(()=>[Dt(Ye(e.unit[e.idx]),1)]),_:1},8,["size"])):(Y(),fe(bt,{key:1},[ie(l,{size:e.size,modelValue:e.num,"onUpdate:modelValue":t[1]||(t[1]=d=>e.num=d),onChange:e.submit,"controls-position":"right"},null,8,["size","modelValue","onChange"]),ie(c,{trigger:"click",size:"small"},{dropdown:he(()=>[ie(u,null,{default:he(()=>[(Y(!0),fe(bt,null,bn(e.unit,(d,f)=>(Y(),Le(s,{key:d,onClick:p=>e.changeType(f)},{default:he(()=>[ce("div",null,Ye(d),1)]),_:2},1032,["onClick"]))),128))]),_:1})]),default:he(()=>[ie(a,{size:e.size},{default:he(()=>[Dt(Ye(e.unit[e.idx]),1)]),_:1},8,["size"])]),_:1})],64))])}]]),DGe=Te({name:"FieldInput",inject:["designer"],emits:["update:modelValue"],props:{modelValue:String},computed:{fieldReadonly(){return this.designer.setupState.fieldReadonly},activeRule(){return this.designer.setupState.activeRule},t(){return this.designer.setupState.t}},data(){return{value:this.modelValue||"",oldValue:""}},watch:{modelValue(e){this.value=e}},methods:{getSubChildren(){let e=this.designer.setupState.getSubFormChildren(this.activeRule)||[];return e=Pr.trueArray(e)?e:this.designer.setupState.children,e},getSubFieldChildren(){const e=this.getSubChildren(),t=[],n=r=>(r&&r.forEach(o=>{o&&o._fc_drag_tag&&o.field?t.push({...o,children:[]}):o&&o.children&&n(o.children)}),t);return n(e)},checkValue(){const e=this.oldValue;let t=(this.value||"").replace(/[\s ]/g,"");if(!t)return nu(this.t("computed.fieldEmpty")),e;if(!/^[a-zA-Z]/.test(t))return nu(this.t("computed.fieldChar")),e;if(e!==t){const n=t.indexOf(".")>-1;if(n&&(t=t.replaceAll(".","_")),this.getSubFieldChildren().filter(r=>r.field===t).length>0)return nu(this.t("computed.fieldExist",{label:t})),e;if(n)return t}return this.oldValue="",t},onFocus(){this.oldValue=this.value},makeField(){this.oldValue=this.value,this.value=vr(),this.onInput()},onInput(){this.value!==this.modelValue&&(this.value=this.checkValue(),this.value!==this.modelValue&&this.$emit("update:modelValue",this.value))}}}),OGe={class:"_fd-field-input"},TGe=jo(DGe,[["render",function(e,t,n,r,o,i){const a=Qe("el-input");return Y(),fe("div",OGe,[ie(a,{modelValue:e.value,"onUpdate:modelValue":t[1]||(t[1]=l=>e.value=l),readonly:e.fieldReadonly,disabled:e.fieldReadonly,onFocus:e.onFocus,onBlur:e.onInput},Ff({_:2},[e.fieldReadonly?void 0:{name:"append",fn:he(()=>[ce("i",{class:"fc-icon icon-auto",onClick:t[0]||(t[0]=(...l)=>e.makeField&&e.makeField(...l))})]),key:"0"}]),1032,["modelValue","readonly","disabled","onFocus","onBlur"])])}]]),MGe=Te({name:"FnConfig",emits:["update:modelValue"],props:{modelValue:[Object,void 0,null],eventConfig:{type:Array,default:()=>[]}},inject:["designer"],components:{FnEditor:Gx},data:()=>({visible:!1,activeData:null,defActive:"no",event:{},cus:!1,eventStr:""}),computed:{t(){return this.designer.setupState.t},eventNum(){let e=0;return Object.keys(this.modelValue||{}).forEach(t=>{this.modelValue[t]&&e++}),e}},watch:{visible(e){this.event=e?this.loadFN(Cx({},this.modelValue||{})):{},e||this.destroy()}},methods:{getArgs:e=>e.args.join(", "),loadFN(e){const t={};return this.eventConfig.forEach(n=>{const r=n.name,o=e[r]||"";t[r]={item:n,fn:o}}),t},parseFN(e){const t={};return Object.keys(e).forEach(n=>{e[n].fn&&(t[n]=e[n].fn)}),t},edit(e){e.key=vr(),this.activeData=e,this.eventStr=e.fn||`[[FORM-CREATE-PREFIX-function ${e.item.name}(${this.getArgs(e.item)}){}-FORM-CREATE-SUFFIX]]`,this.defActive=e.item.name},save(){this.$refs.fn.save()&&(this.activeData.fn=this.eventStr,this.destroy())},destroy(){this.activeData=null,this.defActive="no"},close(){this.destroy()},submit(){if(this.activeData)return nu(this.t("event.saveMsg"));this.$emit("update:modelValue",this.parseFN(this.event)),this.visible=!1,this.destroy()}}}),NGe={class:"_fd-fn-list"},FGe=["onClick"],RGe=jo(MGe,[["render",function(e,t,n,r,o,i){const a=Qe("el-button"),l=Qe("el-badge"),s=Qe("el-text"),u=Qe("el-header"),c=Qe("el-menu-item"),d=Qe("el-menu"),f=Qe("el-main"),p=Qe("el-container"),m=Qe("el-aside"),v=Qe("FnEditor"),g=Qe("el-dialog");return Y(),fe("div",NGe,[ie(l,{value:e.eventNum,type:"warning",hidden:e.eventNum<1},{default:he(()=>[ie(a,{onClick:t[0]||(t[0]=b=>e.visible=!0),size:"small"},{default:he(()=>[Dt(Ye(e.t("event.title")),1)]),_:1})]),_:1},8,["value","hidden"]),ie(g,{class:"_fd-fn-list-dialog",title:e.t("event.title"),modelValue:e.visible,"onUpdate:modelValue":t[4]||(t[4]=b=>e.visible=b),"destroy-on-close":"","close-on-click-modal":!1,"append-to-body":"",width:"980px"},{footer:he(()=>[ce("div",null,[ie(a,{size:"default",onClick:t[3]||(t[3]=b=>e.visible=!1)},{default:he(()=>[Dt(Ye(e.t("props.cancel")),1)]),_:1}),ie(a,{type:"primary",size:"default",onClick:e.submit,color:"#2f73ff"},{default:he(()=>[Dt(Ye(e.t("props.ok")),1)]),_:1},8,["onClick"])])]),default:he(()=>[ie(p,{class:"_fd-fn-list-con",style:{height:"600px"}},{default:he(()=>[ie(m,{style:{width:"300px"}},{default:he(()=>[ie(p,{class:"_fd-fn-list-l"},{default:he(()=>[ie(u,{class:"_fd-fn-list-head",height:"40px"},{default:he(()=>[ie(s,{type:"primary",size:"default"},{default:he(()=>[Dt(Ye(e.t("event.list")),1)]),_:1})]),_:1}),ie(f,null,{default:he(()=>[ie(d,{"default-active":e.defActive,modelValue:e.activeData,"onUpdate:modelValue":t[1]||(t[1]=b=>e.activeData=b)},{default:he(()=>[(Y(!0),fe(bt,null,bn(e.event,(b,y)=>(Y(),Le(c,{index:y},{default:he(()=>[ce("div",{class:"_fd-fn-list-method",onClick:Gt(w=>e.edit(b),["stop"])},[ce("span",null,[Dt("function"),ce("span",null,Ye(y),1)])],8,FGe)]),_:2},1032,["index"]))),256))]),_:1},8,["default-active","modelValue"])]),_:1})]),_:1})]),_:1}),ie(f,null,{default:he(()=>[ie(p,{class:"_fd-fn-list-r"},{default:he(()=>[e.activeData?(Y(),Le(u,{key:0,class:"_fd-fn-list-head",height:"40px"},{default:he(()=>[ie(a,{size:"small",onClick:e.close},{default:he(()=>[Dt(Ye(e.t("props.cancel")),1)]),_:1},8,["onClick"]),ie(a,{size:"small",type:"primary",onClick:e.save,color:"#2f73ff"},{default:he(()=>[Dt(Ye(e.t("props.save")),1)]),_:1},8,["onClick"])]),_:1})):Fe("",!0),e.activeData?(Y(),Le(f,{key:1},{default:he(()=>[ie(v,{ref:"fn",modelValue:e.eventStr,"onUpdate:modelValue":t[2]||(t[2]=b=>e.eventStr=b),name:e.activeData.item.name,args:e.activeData.item.args},null,8,["modelValue","name","args"])]),_:1})):Fe("",!0)]),_:1})]),_:1})]),_:1})]),_:1},8,["title","modelValue"])])}]]),mpe=Te({name:"DragBox",props:["rule","tag","formCreateInject","list"],render(e){const t={...e.$props.rule.props,...e.$attrs};let n="_fd-"+e.$props.tag+"-drag _fd-drag-box";Object.keys(e.$slots).length||(n+=" drag-holder"),t.class=n,t.modelValue=e.$props.list||[...e.$props.formCreateInject.children];const r={};return e.$slots.default&&e.$slots.default().forEach(o=>{o.key&&(r[o.key]=o)}),pn(dB,t,{item:({element:o,index:i})=>{var a;const l=(a=o==null?void 0:o.__fc__)==null?void 0:a.key;if(l){let s=r["_"+o.slot];if(s?s.children.forEach(u=>{u.key===l+"fc"&&(s=u)}):s=r[l+"fc"],s)return pn("div",{class:"_fc-"+e.$props.tag+"-item _fd-drag-item",key:l},s)}return pn("div",{class:"_fc-"+e.$props.tag+"-item _fd-drag-item",key:i},null)}})}}),IGe=Te({name:"FcTableView",props:{label:String,width:[Number,String],formCreateInject:Object,border:{type:Boolean,default:!0},borderWidth:String,borderColor:String,rule:{type:Object,default:()=>({row:1,col:1})}},inject:["designer"],components:{DragTool:vpe,DragBox:mpe},watch:{rule:{handler(){this.initRule(),this.style=this.rule.style},immediate:!0}},data:()=>({unique:{},style:{},dragProp:{rule:{props:{tag:"el-col",group:"default",ghostClass:"ghost",animation:150,handle:"._fd-drag-btn",emptyInsertThreshold:0,direction:"vertical",itemKey:"type"}},tag:"tableCell"},lattice:{},uni:{}}),computed:{t(){return this.designer.setupState.t},tableColor(){const e={};return this.border===!1?e.border="0 none":(this.borderColor&&(e.borderColor=this.borderColor),this.borderWidth&&(e.borderWidth=this.borderWidth)),e}},methods:{getUnique(e){return this.unique[e]||(this.unique[e]=vr()),this.unique[e]},getSlotChildren(e){const t=[];return this.formCreateInject.children.forEach(n=>{e.indexOf(n.slot)>-1&&t.push(n)}),t},dragAdd(e,t){const n=this.designer.setupState,r=this.formCreateInject.children,o=`${t.pid}:${t.idx}`,i=e.item._underlying_vm_,a=n.addRule&&n.addRule.children===n.moveRule;a&&n.moveRule.splice(n.moveRule.indexOf(i),1);let l=0;const s="drag"+t.pid+t.idx;if(this.$refs[s][0].list.length){let u=this.$refs[s][0].list[e.newIndex?e.newIndex-1:0];l=r.indexOf(u)+(e.newIndex?1:0)}else if(r.length){const u=Object.keys(this.$refs);for(let c=u.indexOf(s)-1;c>=0;c--){if(!this.$refs[u[c]]||!this.$refs[u[c]].length)continue;const d=this.$refs[u[c]][0].list||[];if(d.length){l=r.indexOf(d[d.length-1])+1;break}}}e.newIndex=l,a?(i.slot=o,r.splice(e.newIndex,0,i),n.added=!0,n.handleSortAfter({rule:i})):n.dragAdd(r,e,`${t.pid}:${t.idx}`)},dragEnd(e,t){const n=this.designer.setupState,r=this.formCreateInject.children,o=e.item._underlying_vm_,i=r.indexOf(o);e.newIndex=i+(e.newIndex-e.oldIndex),e.oldIndex=i,n.dragEnd(this.formCreateInject.children,e,`${t.pid}:${t.idx}`)},dragStart(){this.designer.setupState.dragStart(this.formCreateInject.children)},dragUnchoose(e){this.designer.setupState.dragUnchoose(this.formCreateInject.children,e)},initRule(){const e=this.rule;e.style||(e.style={}),e.class||(e.class={}),e.layout||(e.layout=[]),e.row||(e.row=1),e.col||(e.col=1)},active(e){const t=`${e.pid}:${e.idx}`,n=this.rule.style[t]||{};this.designer.setupState.customActive({name:"fcTableGrid",props:()=>[{type:"input",field:"width",title:this.t("props.width")},{type:"input",field:"height",title:this.t("props.height")},{type:"input",field:"class",title:this.t("props.class")}],change:(r,o)=>{this.rule.style[t]||(this.rule.style[t]={}),this.rule.style[t][r]=o},formData:{height:n.height||"",width:n.width||"",class:n.class||""}})},command(e){this[e[0]](...e[1])},rmSlot(e,t){const n=Object.keys(e),r=this.formCreateInject.children;let o=0;[...r].forEach((i,a)=>{if(!i.slot)return;let l;t.indexOf(i.slot)>-1?(r.splice(a-o,1),o++):(l=n.indexOf(i.slot))>-1&&(i.slot=e[n[l]])}),t.forEach(i=>{delete this.style[i]}),this.loadRule()},rmRow(e){this.rule.row--;const t={},n=[];for(let i=e.pid;i<this.rule.row+1;i++)for(let a=0;a<this.rule.col;a++)i===e.pid?n.push(`${e.pid}:${a}`):t[`${i}:${a}`]=`${i-1}:${a}`;let r=0;const o=this.rule.layout;[...o].forEach((i,a)=>{i.top===e.pid&&(o.splice(a-r,1),r++)}),o.forEach(i=>{i.top>e.pid&&i.top--}),this.rmSlot(t,n)},rmCol(e){this.rule.col--;const t={},n=[];for(let i=0;i<this.rule.row;i++){for(let a=e.idx+1;a<this.rule.col+1;a++)t[`${i}:${a}`]=`${i}:${a-1}`;n.push(`${i}:${e.idx}`)}let r=0;const o=this.rule.layout;[...o].forEach((i,a)=>{i.left===e.idx&&(o.splice(a-r,1),r++)}),o.forEach(i=>{i.left>e.idx&&i.left--}),this.rmSlot(t,n)},splitRow(e){const t=e.data.layout,n=t.row;if(t.row=0,n>1)for(let r=1;r<n;r++)this.rule.layout.push({...t,top:t.top+r});this.loadRule()},splitCol(e){const t=e.data.layout,n=t.col;if(t.col=0,n>1)for(let r=1;r<n;r++)this.rule.layout.push({...t,left:t.left+r});this.loadRule()},makeMap(e){let t=[];for(let n=e.top;n<(e.row||e.top+1);n++)for(let r=e.left;r<(e.col||e.left+1);r++)t.push(`${n}:${r}`);return t},mergeRight(e){let t;if(e.data.layout){const r=(e.data.layout.col||1)+1;e.data.layout.col=r+e.idx>this.rule.col?this.rule.col-e.idx:r,t=e.data.layout}else t={top:e.pid,left:e.idx,col:2},this.rule.layout.push(t);const n=this.makeMap(t);this.formCreateInject.children.forEach(r=>{!r.slot||n.indexOf(r.slot)>-1&&(r.slot=`${e.pid}:${e.idx}`)}),this.loadRule()},mergeBottom(e){let t;if(e.data.layout){const r=(e.data.layout.row||1)+1;e.data.layout.row=r+r.pid>this.rule.col?this.rule.col-e.pid:r,t=e.data.layout}else t={top:e.pid,left:e.idx,row:2},this.rule.layout.push(t);const n=this.makeMap(t);this.formCreateInject.children.forEach(r=>{!r.slot||n.indexOf(r.slot)>-1&&(r.slot=`${e.pid}:${e.idx}`)}),this.loadRule()},addCol(e,t){if(this.rule.col++,this.rule.layout.forEach(n=>{n.left>(t?e.idx-1:e.idx)&&n.left++}),t||e.idx<this.rule.col-2){const n={};for(let o=0;o<this.rule.row;o++)for(let i=t?e.idx-1:e.idx+1;i<this.rule.col-1;i++)n[`${o}:${i}`]=`${o}:${i+1}`;const r=Object.keys(n);this.formCreateInject.children.forEach(o=>{let i;o.slot&&(i=r.indexOf(o.slot))>-1&&(o.slot=n[r[i]])}),r.forEach(o=>{this.style[o]&&(this.style[n[o]]=this.style[o],delete this.style[o])})}this.loadRule()},addRow(e,t){if(this.rule.row++,this.rule.layout.forEach(n=>{n.top>(t?e.pid-1:e.pid)&&n.top++}),t||e.pid<this.rule.row-2){const n={};for(let o=t?e.pid-1:e.pid+1;o<this.rule.row;o++)for(let i=0;i<this.rule.col;i++)n[`${o}:${i}`]=`${o+1}:${i}`;const r=Object.keys(n);this.formCreateInject.children.forEach(o=>{let i;o.slot&&(i=r.indexOf(o.slot))>-1&&(o.slot=n[r[i]])}),r.reverse().forEach(o=>{this.style[o]&&(this.style[n[o]]=this.style[o],delete this.style[o])})}this.loadRule()},loadRule(){const e=[],t=this.rule||{row:1,col:1};for(let r=0;r<t.row;r++){const o=[];e.push(o);for(let i=0;i<t.col;i++)o.push({rowspan:1,colspan:1,slot:[],show:!0,id:this.getUnique(`${r}${i}`)})}[...t.layout||[]].forEach((r,o)=>{if((!r.row||r.row<=0)&&(!r.col||r.col<=0)||!e[r.top]||!e[r.top][r.left]||!e[r.top][r.left].show)return void t.layout.splice(o,1);const i=e[r.top][r.left];i.layout=r;let a=1,l=1;if(r.col&&(a=r.col+r.left>t.col?t.col-r.left:r.col,i.colspan=a),r.row&&(l=r.row+r.top>t.row?t.row-r.top:r.row,i.rowspan=l),l&&a)for(let s=0;s<l;s++){const u=e[r.top+s];if(u)for(let c=0;c<a;c++)!c&&!s||(u[r.left+c]&&(u[r.left+c].show=!1),i.slot.push(`${r.top+s}:${r.left+c}`))}});const n=r=>!(r&&!r.layout&&r.show);e.forEach((r,o)=>{r.forEach((i,a)=>{let l=!1,s=!1;if(i.layout){const u=i.layout.col||1,c=i.layout.row||1;for(let d=0;d<u;d++)if(!e[o+c]||n(e[o+c][a+d])){s=!0;continue}for(let d=0;d<c;d++)if(!e[o+d]||n(e[o+d][a+u])){l=!0;continue}}else l=n(r[a+1]),s=!e[o+1]||n(e[o+1][a]);i.right=l,i.bottom=s})}),this.lattice=e,this.formCreateInject.rule.props.rule=t}},beforeMount(){this.loadRule()}}),BGe={class:"_fd-table-view"},PGe={class:"_fd-table-view-cell"},LGe=["onClick"],jGe=[ce("i",{class:"fc-icon icon-add-tr"},null,-1)],VGe=["onClick"],zGe=[ce("i",{class:"fc-icon icon-add-tr",style:{transform:"rotate(90deg)"}},null,-1)],HGe={class:"_fd-drag-btn _fd-table-view-btn"},$Ge=ce("i",{class:"fc-icon icon-setting"},null,-1),UGe=jo(IGe,[["render",function(e,t,n,r,o,i){const a=Qe("DragBox"),l=Qe("el-dropdown-item"),s=Qe("el-dropdown-menu"),u=Qe("el-dropdown"),c=Qe("DragTool");return Y(),fe("div",BGe,[ce("table",{border:"1",cellspacing:"0",cellpadding:"0",style:$t(e.tableColor)},[(Y(!0),fe(bt,null,bn(e.rule.row,(d,f)=>(Y(),fe("tr",{key:f},[(Y(!0),fe(bt,null,bn(e.rule.col,(p,m)=>(Y(),fe(bt,null,[e.lattice[f][m].show?(Y(),fe("td",Un({key:`${f}${m}`,ref_for:!0},e.lattice[f][m]?{colspan:e.lattice[f][m].colspan,rowspan:e.lattice[f][m].rowspan}:{},{style:[e.tableColor,e.style&&e.style[`${f}:${m}`]||{}],class:e.rule.class&&e.rule.class[`${f}:${m}`]||""}),[ce("div",PGe,[ie(c,{"drag-btn":!1,"handle-btn":!0,onActive:v=>e.active({pid:f,idx:m}),unique:e.lattice[f][m].id},{handle:he(()=>[ce("div",{class:"_fd-drag-btn _fd-table-view-btn",onClick:v=>e.addRow({pid:f,idx:m,data:e.lattice[f][m]},0)},jGe,8,LGe),ce("div",{class:"_fd-drag-btn _fd-table-view-btn",onClick:v=>e.addCol({pid:f,idx:m,data:e.lattice[f][m]},0)},zGe,8,VGe),ce("div",HGe,[ie(u,{trigger:"click",onCommand:e.command},{dropdown:he(()=>[ie(s,null,{default:he(()=>[ie(l,{command:["addCol",[{pid:f,idx:m,data:e.lattice[f][m]},1]]},{default:he(()=>[Dt(Ye(e.t("tableOptions.addLeft")),1)]),_:2},1032,["command"]),ie(l,{command:["addCol",[{pid:f,idx:m,data:e.lattice[f][m]},0]]},{default:he(()=>[Dt(Ye(e.t("tableOptions.addRight")),1)]),_:2},1032,["command"]),ie(l,{command:["addRow",[{pid:f,idx:m,data:e.lattice[f][m]},1]]},{default:he(()=>[Dt(Ye(e.t("tableOptions.addTop")),1)]),_:2},1032,["command"]),ie(l,{command:["addRow",[{pid:f,idx:m,data:e.lattice[f][m]},0]]},{default:he(()=>[Dt(Ye(e.t("tableOptions.addBottom")),1)]),_:2},1032,["command"]),ie(l,{divided:"",disabled:e.lattice[f][m].right,command:["mergeRight",[{pid:f,idx:m,data:e.lattice[f][m]}]]},{default:he(()=>[Dt(Ye(e.t("tableOptions.mergeRight")),1)]),_:2},1032,["disabled","command"]),ie(l,{disabled:e.lattice[f][m].bottom,command:["mergeBottom",[{pid:f,idx:m,data:e.lattice[f][m]}]]},{default:he(()=>[Dt(Ye(e.t("tableOptions.mergeBottom")),1)]),_:2},1032,["disabled","command"]),ie(l,{divided:"",disabled:!(e.lattice[f][m].layout&&e.lattice[f][m].layout.col>1),command:["splitCol",[{pid:f,idx:m,data:e.lattice[f][m]}]]},{default:he(()=>[Dt(Ye(e.t("tableOptions.splitCol")),1)]),_:2},1032,["disabled","command"]),ie(l,{disabled:!(e.lattice[f][m].layout&&e.lattice[f][m].layout.row>1),command:["splitRow",[{pid:f,idx:m,data:e.lattice[f][m]}]]},{default:he(()=>[Dt(Ye(e.t("tableOptions.splitRow")),1)]),_:2},1032,["disabled","command"]),ie(l,{divided:"",disabled:e.rule.col<2,command:["rmCol",[{pid:f,idx:m,data:e.lattice[f][m]}]]},{default:he(()=>[Dt(Ye(e.t("tableOptions.rmCol")),1)]),_:2},1032,["disabled","command"]),ie(l,{disabled:e.rule.row<2,command:["rmRow",[{pid:f,idx:m,data:e.lattice[f][m]}]]},{default:he(()=>[Dt(Ye(e.t("tableOptions.rmRow")),1)]),_:2},1032,["disabled","command"])]),_:2},1024)]),default:he(()=>[$Ge]),_:2},1032,["onCommand"])])]),default:he(()=>[ie(a,Un({ref_for:!0},e.dragProp,{onAdd:v=>e.dragAdd(v,{pid:f,idx:m}),ref_for:!0,ref:"drag"+f+m,onEnd:v=>e.dragEnd(v,{pid:f,idx:m}),onStart:t[0]||(t[0]=v=>e.dragStart(v)),onUnchoose:t[1]||(t[1]=v=>e.dragUnchoose(v)),list:e.getSlotChildren([`${f}:${m}`,...e.lattice[f][m].slot])}),{default:he(()=>[ft(e.$slots,`${f}:${m}`)]),_:2},1040,["onAdd","onEnd","list"])]),_:2},1032,["onActive","unique"])])],16)):Fe("",!0)],64))),256))]))),128))],4)])}]]),WGe={name:"FcTable",props:{label:String,width:[Number,String],border:{type:Boolean,default:!0},borderWidth:String,borderColor:String,rule:{type:Object,default:()=>({row:1,col:1})}},watch:{rule:{handler(){this.initRule(),this.loadRule(),this.tdStyle=this.rule.style||{},this.tdClass=this.rule.class||{}},immediate:!0,deep:!0}},data:()=>({tdStyle:{},tdClass:{},lattice:{}}),computed:{tableColor(){const e={};return this.border===!1?e.border="0 none":(this.borderColor&&(e.borderColor=this.borderColor),this.borderWidth&&(e.borderWidth=this.borderWidth)),e}},methods:{initRule(){const e=this.rule;e.style||(e.style={}),e.layout||(e.layout=[]),e.row||(e.row=1),e.col||(e.col=1)},loadRule(){const e=[],t=this.rule||{row:1,col:1};for(let r=0;r<t.row;r++){const o=[];e.push(o);for(let i=0;i<t.col;i++)o.push({rowspan:1,colspan:1,slot:[],show:!0})}[...t.layout||[]].forEach((r,o)=>{if((!r.row||r.row<=0)&&(!r.col||r.col<=0)||!e[r.top]||!e[r.top][r.left]||!e[r.top][r.left].show)return void t.layout.splice(o,1);const i=e[r.top][r.left];i.layout=r;let a=1,l=1;if(r.col&&(a=r.col+r.left>t.col?t.col-r.left:r.col,i.colspan=a),r.row&&(l=r.row+r.top>t.row?t.row-r.top:r.row,i.rowspan=l),l&&a)for(let s=0;s<l;s++){const u=e[r.top+s];if(u)for(let c=0;c<a;c++)!c&&!s||(u[r.left+c]&&(u[r.left+c].show=!1),i.slot.push(`${r.top+s}:${r.left+c}`))}});const n=r=>!(r&&!r.layout&&r.show);e.forEach((r,o)=>{r.forEach((i,a)=>{let l=!1,s=!1;if(i.layout){const u=i.layout.col||1,c=i.layout.row||1;for(let d=0;d<u;d++)if(!e[o+c]||n(e[o+c][a+d])){s=!0;continue}for(let d=0;d<c;d++)if(!e[o+d]||n(e[o+d][a+u])){l=!0;continue}}else l=n(r[a+1]),s=!e[o+1]||n(e[o+1][a]);i.right=l,i.bottom=s})}),this.lattice=e}}},GGe={class:"_fc-table"},qGe=jo(WGe,[["render",function(e,t,n,r,o,i){const a=Qe("el-col");return Y(),Le(a,{span:24},{default:he(()=>[ce("div",GGe,[ce("table",{border:"1",cellspacing:"0",cellpadding:"0",style:$t(i.tableColor)},[(Y(!0),fe(bt,null,bn(n.rule.row,(l,s)=>(Y(),fe("tr",{key:s},[(Y(!0),fe(bt,null,bn(n.rule.col,(u,c)=>(Y(),fe(bt,{key:`${s}${c}`},[o.lattice[s][c].show?(Y(),fe("td",Un({key:0,ref_for:!0},o.lattice[s][c]?{colspan:o.lattice[s][c].colspan,rowspan:o.lattice[s][c].rowspan}:{},{valign:"top",class:o.tdClass&&o.tdClass[`${s}:${c}`]||"",style:[i.tableColor,o.tdStyle&&o.tdStyle[`${s}:${c}`]||{}]}),[ft(e.$slots,`${s}:${c}`),(Y(!0),fe(bt,null,bn(o.lattice[s][c].slot,d=>ft(e.$slots,`${d}`)),256))],16)):Fe("",!0)],64))),128))]))),128))],4)])]),_:3})}]]),KGe=Te({name:"Validate",inject:["designer"],props:{modelValue:Array},components:{DragForm:Br.$form()},watch:{modelValue(e){this.formValue=this.parseValue(e)}},data(){const e=this.designer.setupState.t,t=this.designer.setupState.activeRule._menu.validate||[],n={string:e("validate.types.string"),array:e("validate.types.array"),number:e("validate.types.number"),integer:e("validate.types.integer"),float:e("validate.types.float"),object:e("validate.types.object"),date:e("validate.types.date"),url:e("validate.types.url"),email:e("validate.types.email")},r=(o=>{const i=[];return o&&o.forEach(a=>{i.push({label:n[a],value:a})}),i.push({label:e("props.custom"),value:"validator"}),i})(t);return{formValue:{},t:e,option:{form:{labelPosition:"top",size:"small",labelWidth:"90px"},submitBtn:!1,appendValue:!0,formData:this.parseValue(this.modelValue)},rule:[{type:"group",field:"validate",props:{expand:1,sortBtn:!1,defaultValue:{type:r[0].value},rule:[{type:r.length===1?"hidden":"select",field:"type",value:"",title:e("validate.type"),props:{placeholder:e("validate.typePlaceholder")},control:[{value:["url","date","email","object","validator"],condition:"notIn",rule:["mode","min","max","len","pattern"]},{value:"validator",rule:["validator"]}],options:r},{type:"select",title:e("validate.trigger"),field:"trigger",value:"change",options:ya(e,[{label:"blur",value:"blur"},{label:"change",value:"change"},{label:"submit",value:"submit"}])},{type:"FnEditor",field:"validator",value:"",props:{name:"validator",args:["rule","value","callback"],button:!0},style:"height:300px;"},{type:"select",title:e("validate.mode"),field:"mode",options:[{value:"min",label:e("validate.modes.min")},{value:"max",label:e("validate.modes.max")},{value:"len",label:e("validate.modes.len")},{value:"pattern",label:e("validate.modes.pattern")}],value:"min",control:[{value:"pattern",rule:[{type:"input",field:"pattern",props:{size:"small"},title:e("validate.modes.pattern")}]},{value:"min",rule:[{type:"inputNumber",field:"min",title:e("validate.modes.min")}]},{value:"max",rule:[{type:"inputNumber",field:"max",title:e("validate.modes.max")}]},{value:"len",rule:[{type:"inputNumber",field:"len",title:e("validate.modes.len")}]}]},{type:"input",title:e("validate.message"),field:"message",value:"",children:[{type:"span",slot:"append",inject:!0,class:"append-msg",on:{click:o=>{const i=this.designer.setupState.activeRule.title;this.designer.setupState.activeRule&&o.api.setValue("message",e(o.api.form.mode!=="required"?"validate.autoMode":"validate.autoRequired",{title:i}))}},children:[e("validate.auto")]}]}]},value:[]}]}},methods:{onInput:function(e,t){const n=Mi(t),r=[];(n||[]).forEach(o=>{if(!o||!Object.keys(o).length)return!1;if(o.type==="validator"&&!o.validator)return;const i={...o};o.validator||delete i.validator,r.push(i)}),this.$emit("update:modelValue",r)},parseValue(e){let t={validate:e?[...e]:[],type:e.length?e[0].type||"string":void 0};return t.validate.forEach(n=>{n.mode||Object.keys(n).forEach(r=>{["message","type","trigger","mode"].indexOf(r)<0&&(n.mode=r)})}),t}}}),YGe=jo(KGe,[["render",function(e,t,n,r,o,i){const a=Qe("DragForm");return Y(),Le(a,{class:"_fd-validate",rule:e.rule,option:e.option,modelValue:e.formValue,onChange:e.onInput},null,8,["rule","option","modelValue","onChange"])}]]),XGe=Te({name:"Required",emits:["update:modelValue"],props:{modelValue:{}},inject:["designer"],watch:{required(){this.update()},requiredMsg(){this.update()},modelValue(e){const t=Pr.String(e);this.required=e!==void 0&&(!!t||!!e),this.requiredMsg=t?e:""}},computed:{t(){return this.designer.setupState.t}},data(){const e=Pr.String(this.modelValue);return{required:this.modelValue!==void 0&&(!!e||!!this.modelValue),requiredMsg:e?this.modelValue:""}},methods:{update(){let e;e=this.required!==!1&&(this.requiredMsg||!0),this.$emit("update:modelValue",e)}}}),QGe={class:"_fd-required"},JGe=jo(XGe,[["render",function(e,t,n,r,o,i){const a=Qe("el-switch"),l=Qe("el-input");return Y(),fe("div",QGe,[ie(a,{modelValue:e.required,"onUpdate:modelValue":t[0]||(t[0]=s=>e.required=s)},null,8,["modelValue"]),e.required?(Y(),Le(l,{key:0,modelValue:e.requiredMsg,"onUpdate:modelValue":t[1]||(t[1]=s=>e.requiredMsg=s),placeholder:e.t("validate.requiredPlaceholder")},null,8,["modelValue","placeholder"])):Fe("",!0)])}]]),ZGe=Te({name:"TableOptions",emits:["update:modelValue","change"],props:{modelValue:[Array,Object],column:{type:Array,default:()=>[{label:"label",key:"label"},{label:"value",key:"value"}]},valueType:String,max:Number,size:String},inject:["designer"],watch:{modelValue(){this.value=this.tidyModelValue()}},computed:{t(){return this.designer.setupState.t}},data(){return{value:this.tidyModelValue()}},methods:{tidyModelValue(){const e=this.modelValue;return this.valueType==="string"?(e||[]).map(t=>({value:""+t})):this.valueType==="object"?Object.keys(e||{}).map(t=>({label:t,value:e[t]})):[...e||[]].map(t=>function(n){return typeof n!="object"||n===null?n:n instanceof Array?[...n]:{...n}}(t))},tidyValue(){if(this.valueType==="object"){const e={};return this.value.forEach(t=>{t.label&&t.value&&(e[t.label]=t.value)}),e}return this.value.map(e=>this.valueType==="string"?e.value:{...e})},onInput(e){(this.column.length!==1||e[this.column[0].key])&&this.column.every(t=>t.required===!1||(["object","string"].indexOf(this.valueType)>-1?e[t.key]!==void 0&&e[t.key]!==""&&e[t.key]!==null:e[t.key]!==void 0))&&this.input()},input(){const e=this.tidyValue();this.$emit("update:modelValue",e),this.$emit("change",e)},add(){this.value.push(this.column.reduce((e,t)=>(e[t.key]="",e),{}))},del(e){this.value.splice(e,1),this.input()}}}),eqe=e=>(xw("data-v-75561980"),e=e(),_w(),e),tqe={class:"_td-table-opt"},nqe=["onClick"],rqe={class:"_td-table-opt-handle"},oqe=eqe(()=>ce("i",{class:"fc-icon icon-add"},null,-1)),iqe=jo(ZGe,[["render",function(e,t,n,r,o,i){const a=Qe("el-input"),l=Qe("el-table-column"),s=Qe("el-table"),u=Qe("el-button");return Y(),fe("div",tqe,[ie(s,{data:e.value,border:"",size:e.size||"small",style:{width:"100%"}},{default:he(()=>[(Y(!0),fe(bt,null,bn(e.column,(c,d)=>(Y(),Le(l,{key:c.label+d,label:c.label},{default:he(f=>[ie(a,{size:e.size||"small",modelValue:f.row[c.key]||"","onUpdate:modelValue":p=>f.row[c.key]=p,onBlur:p=>e.onInput(f.row)},null,8,["size","modelValue","onUpdate:modelValue","onBlur"])]),_:2},1032,["label"]))),128)),ie(l,{width:"70",align:"center",fixed:"right",label:e.t("tableOptions.handle")},{default:he(c=>[ce("i",{class:"fc-icon icon-delete",onClick:d=>e.del(c.$index)},null,8,nqe)]),_:1},8,["label"])]),_:1},8,["data","size"]),ce("div",rqe,[!e.max||e.max>e.value.length?(Y(),Le(u,{key:0,link:"",type:"primary",onClick:e.add},{default:he(()=>[oqe,Dt(" "+Ye(e.t("tableOptions.add")),1)]),_:1},8,["onClick"])):Fe("",!0)])])}],["__scopeId","data-v-75561980"]]),aqe=Te({name:"TreeOptions",emits:["update:modelValue"],props:{modelValue:Array,columns:Object},inject:["designer"],data(){return{value:[...Mi(this.modelValue||[])]}},computed:{t(){return this.designer.setupState.t},overColumns(){return this.columns?{label:this.columns.label||"label",value:this.columns.value||"value"}:{label:"label",value:"value"}}},created(){this.value.length||(this.value=[{}])},methods:{tidyValue(){return Mi(this.value)},change(){this.$emit("update:modelValue",this.tidyValue())},add(e){const t=e.parent;(t.data.children||t.data).push({})},append(e){e.children||(e.children=[]),e.children.push({})},remove(e,t){const n=e.parent;n.data.children?(n.data.children.splice(n.data.children.indexOf(t),1),n.data.children.length||delete n.data.children):n.data.splice(n.data.indexOf(t),1),this.change()}}}),lqe={class:"_fd-tree-opt"},sqe={class:"_fd-tree-opt-node"},uqe=["onClick"],cqe=[ce("i",{class:"fc-icon icon-add"},null,-1)],dqe=["onClick"],fqe=[ce("i",{class:"fc-icon icon-add-child"},null,-1)],pqe=["onClick"],hqe=[ce("i",{class:"fc-icon icon-delete"},null,-1)],vqe=jo(aqe,[["render",function(e,t,n,r,o,i){const a=Qe("el-input"),l=Qe("el-tree");return Y(),fe("div",lqe,[ie(l,{data:e.value,"node-key":"index","expand-on-click-node":!1},{default:he(({node:s,data:u})=>[ce("div",sqe,[ie(a,{class:"_fd-tree-opt-first",modelValue:u[e.overColumns.label],"onUpdate:modelValue":c=>u[e.overColumns.label]=c,onBlur:e.change},null,8,["modelValue","onUpdate:modelValue","onBlur"]),ie(a,{class:"_fd-tree-opt-last",modelValue:u[e.overColumns.value],"onUpdate:modelValue":c=>u[e.overColumns.value]=c,onBlur:e.change},{append:he(()=>[ce("div",{class:"_fd-tree-opt-btn",onClick:c=>e.add(s,u)},cqe,8,uqe),ce("div",{class:"_fd-tree-opt-btn",onClick:c=>e.append(u)},fqe,8,dqe),ce("div",{class:"_fd-tree-opt-btn _fd-tree-opt-danger",onClick:c=>e.remove(s,u)},hqe,8,pqe)]),_:2},1032,["modelValue","onUpdate:modelValue","onBlur"])])]),_:1},8,["data"])])}]]),mqe=Te({name:"TableFormView",data:()=>({})}),gqe={class:"_fd-table-form"},yqe={key:0,class:"_fd-tf-wrap"},bqe={key:1,class:"_fc-child-empty"},Aqe=jo(mqe,[["render",function(e,t,n,r,o,i){return Y(),fe("div",gqe,[e.$slots.default?(Y(),fe("div",yqe,[ft(e.$slots,"default")])):(Y(),fe("div",bqe))])}]]),wqe={name:"TableForm",emits:["change","add","delete","update:modelValue"],props:{formCreateInject:Object,modelValue:{type:Array,default:()=>[]},columns:{type:Array,required:!0,default:()=>[]},options:{type:Object,default:()=>Qn({submitBtn:!1,resetBtn:!1})},max:Number,disabled:Boolean},watch:{modelValue:{handler(){this.updateTable()},deep:!0}},data(){return{rule:[],trs:[],fapi:{},Form:Fo(this.formCreateInject.form.$form()),copyTrs:"",oldValue:""}},methods:{formChange(e,t,n,r,o){o===!1&&this.updateValue()},updateValue(){const e=this.trs.map((n,r)=>({...this.modelValue[r]||{},...this.fapi.getChildrenFormData(n)})).filter(n=>{if(n==null)return!1;let r=!1;return Object.keys(n).forEach(o=>{r=r||n[o]!==void 0&&n[o]!==""&&n[o]!==null}),r}),t=JSON.stringify(e);t!==this.oldValue&&(this.oldValue=t,this.$emit("update:modelValue",e),this.$emit("change",e))},setRawData(e,t){const n=this.trs[e];this.fapi.setChildrenFormData(n,t,!0)},updateTable(){const e=JSON.stringify(this.modelValue);this.oldValue!==e&&(this.oldValue=e,this.trs=this.trs.splice(0,this.modelValue.length),this.modelValue.length||this.addRaw(),this.modelValue.forEach((t,n)=>{this.trs[n]||this.addRaw(),this.setRawData(n,t)}),this.rule[0].children[1].children=this.trs)},delRaw(e){this.disabled||(this.trs.splice(e,1),this.updateValue(),this.trs.length?this.trs.forEach(t=>this.updateRaw(t)):this.addRaw(),this.$emit("delete",e))},addRaw(e){if(e&&this.disabled)return;const t=_d.parseJson(this.copyTrs)[0];this.trs.push(t),this.updateRaw(t),e&&this.$emit("add",this.trs.length)},updateRaw(e){const t=this.trs.indexOf(e);e.children[0].props.innerText=t+1,e.children[e.children.length-1].children[0].props.onClick=()=>{this.delRaw(t)}},loadRule(){const e=[{type:"th",native:!0,class:"_fc-tf-head-idx",props:{innerText:"#"}}];let t=[{type:"td",class:"_fc-tf-idx",native:!0,props:{innerText:"0"}}];this.columns.forEach(n=>{e.push({type:"th",native:!0,style:n.style,props:{innerText:n.label||""}}),t.push({type:"td",native:!0,children:[...n.rule||[]]})}),e.push({type:"th",native:!0,class:"_fc-tf-edit fc-clock",props:{innerText:"\u64CD\u4F5C"}}),t.push({type:"td",native:!0,class:"_fc-tf-btn fc-clock",children:[{type:"i",native:!0,class:"fc-icon icon-delete",props:{}}]}),this.copyTrs=_d.toJson([{type:"tr",native:!0,subRule:!0,children:t}]),this.rule=[{type:"table",native:!0,class:"_fc-tf-table",props:{border:"1",cellspacing:"0",cellpadding:"0"},children:[{type:"thead",native:!0,children:[{type:"tr",native:!0,children:e}]},{type:"tbody",native:!0,children:this.trs}]}],this.addRaw()}},created(){this.loadRule()},mounted(){this.updateTable()}},xqe=ce("i",{class:"fc-icon icon-add-circle",style:{"font-weight":"700"}},null,-1),_qe=jo(wqe,[["render",function(e,t,n,r,o,i){const a=Qe("el-button");return Y(),fe("div",{class:oe(["_fc-table-form",{"_fc-disabled":n.disabled}])},[(Y(),Le(Hn(o.Form),{option:n.options,rule:o.rule,extendOption:!0,disabled:n.disabled,onChange:i.formChange,api:o.fapi,"onUpdate:api":t[0]||(t[0]=l=>o.fapi=l),onEmitEvent:e.$emit},null,40,["option","rule","disabled","onChange","api","onEmitEvent"])),!n.max||n.max>this.trs.length?(Y(),Le(a,{key:0,link:"",type:"primary",class:"fc-clock",onClick:t[1]||(t[1]=l=>i.addRaw(!0))},{default:he(()=>[xqe,Dt(" \u6DFB\u52A0 ")]),_:1})):Fe("",!0)],2)}]]),Eqe=Te({name:"TableFormColumnView",props:{label:String,width:[Number,String],color:String},computed:{colStyle(){const e=this.width,t={width:Pr.Number(e)?`${e}px`:e&&e!=="auto"?e:"180px"};return this.color&&(t.color=this.color),t}},data:()=>({})}),Cqe={class:"_fd-tf-title"},Sqe={class:"_fd-tf-con"},kqe=jo(Eqe,[["render",function(e,t,n,r,o,i){return Y(),fe("div",{class:"_fd-tf-col",style:$t(e.colStyle)},[ce("div",Cqe,Ye(e.label||""),1),ce("div",Sqe,[ft(e.$slots,"default")])],4)}]]);function gpe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Qi(e){return Qi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Qi(e)}function Dqe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Oqe(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var ype={exports:{}};ype.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(r,o,i){n.o(r,o)||Object.defineProperty(r,o,{enumerable:!0,get:i})},n.r=function(r){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},n.t=function(r,o){if(1&o&&(r=n(r)),8&o||4&o&&Qi(r)==="object"&&r&&r.__esModule)return r;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:r}),2&o&&typeof r!="string")for(var a in r)n.d(i,a,(function(l){return r[l]}).bind(null,a));return i},n.n=function(r){var o=r&&r.__esModule?function(){return r.default}:function(){return r};return n.d(o,"a",o),o},n.o=function(r,o){return Object.prototype.hasOwnProperty.call(r,o)},n.p="",n(n.s=141)}([function(e,t){function n(r){return r&&r.__esModule?r:{default:r}}e.exports=n},function(e,t,n){e.exports=n(142)},function(e,t,n){n.r(t),n.d(t,"__extends",function(){return o}),n.d(t,"__assign",function(){return i}),n.d(t,"__rest",function(){return a}),n.d(t,"__decorate",function(){return l}),n.d(t,"__param",function(){return s}),n.d(t,"__metadata",function(){return u}),n.d(t,"__awaiter",function(){return c}),n.d(t,"__generator",function(){return d}),n.d(t,"__createBinding",function(){return f}),n.d(t,"__exportStar",function(){return p}),n.d(t,"__values",function(){return m}),n.d(t,"__read",function(){return v}),n.d(t,"__spread",function(){return g}),n.d(t,"__spreadArrays",function(){return b}),n.d(t,"__spreadArray",function(){return y}),n.d(t,"__await",function(){return w}),n.d(t,"__asyncGenerator",function(){return x}),n.d(t,"__asyncDelegator",function(){return _}),n.d(t,"__asyncValues",function(){return E}),n.d(t,"__makeTemplateObject",function(){return C}),n.d(t,"__importStar",function(){return k}),n.d(t,"__importDefault",function(){return I}),n.d(t,"__classPrivateFieldGet",function(){return O}),n.d(t,"__classPrivateFieldSet",function(){return F});var r=function(N,B){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(P,V){P.__proto__=V}||function(P,V){for(var L in V)Object.prototype.hasOwnProperty.call(V,L)&&(P[L]=V[L])},r(N,B)};function o(N,B){if(typeof B!="function"&&B!==null)throw new TypeError("Class extends value "+String(B)+" is not a constructor or null");function P(){this.constructor=N}r(N,B),N.prototype=B===null?Object.create(B):(P.prototype=B.prototype,new P)}var i=function(){return i=Object.assign||function(N){for(var B,P=1,V=arguments.length;P<V;P++)for(var L in B=arguments[P])Object.prototype.hasOwnProperty.call(B,L)&&(N[L]=B[L]);return N},i.apply(this,arguments)};function a(N,B){var P={};for(var V in N)Object.prototype.hasOwnProperty.call(N,V)&&B.indexOf(V)<0&&(P[V]=N[V]);if(N!=null&&typeof Object.getOwnPropertySymbols=="function"){var L=0;for(V=Object.getOwnPropertySymbols(N);L<V.length;L++)B.indexOf(V[L])<0&&Object.prototype.propertyIsEnumerable.call(N,V[L])&&(P[V[L]]=N[V[L]])}return P}function l(N,B,P,V){var L,H=arguments.length,U=H<3?B:V===null?V=Object.getOwnPropertyDescriptor(B,P):V;if((typeof Reflect>"u"?"undefined":Qi(Reflect))==="object"&&typeof Reflect.decorate=="function")U=Reflect.decorate(N,B,P,V);else for(var G=N.length-1;G>=0;G--)(L=N[G])&&(U=(H<3?L(U):H>3?L(B,P,U):L(B,P))||U);return H>3&&U&&Object.defineProperty(B,P,U),U}function s(N,B){return function(P,V){B(P,V,N)}}function u(N,B){if((typeof Reflect>"u"?"undefined":Qi(Reflect))==="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(N,B)}function c(N,B,P,V){function L(H){return H instanceof P?H:new P(function(U){U(H)})}return new(P||(P=Promise))(function(H,U){function G(W){try{$(V.next(W))}catch(K){U(K)}}function z(W){try{$(V.throw(W))}catch(K){U(K)}}function $(W){W.done?H(W.value):L(W.value).then(G,z)}$((V=V.apply(N,B||[])).next())})}function d(N,B){var P,V,L,H,U={label:0,sent:function(){if(1&L[0])throw L[1];return L[1]},trys:[],ops:[]};return H={next:G(0),throw:G(1),return:G(2)},typeof Symbol=="function"&&(H[Symbol.iterator]=function(){return this}),H;function G($){return function(W){return z([$,W])}}function z($){if(P)throw new TypeError("Generator is already executing.");for(;U;)try{if(P=1,V&&(L=2&$[0]?V.return:$[0]?V.throw||((L=V.return)&&L.call(V),0):V.next)&&!(L=L.call(V,$[1])).done)return L;switch(V=0,L&&($=[2&$[0],L.value]),$[0]){case 0:case 1:L=$;break;case 4:return U.label++,{value:$[1],done:!1};case 5:U.label++,V=$[1],$=[0];continue;case 7:$=U.ops.pop(),U.trys.pop();continue;default:if(!(L=(L=U.trys).length>0&&L[L.length-1])&&($[0]===6||$[0]===2)){U=0;continue}if($[0]===3&&(!L||$[1]>L[0]&&$[1]<L[3])){U.label=$[1];break}if($[0]===6&&U.label<L[1]){U.label=L[1],L=$;break}if(L&&U.label<L[2]){U.label=L[2],U.ops.push($);break}L[2]&&U.ops.pop(),U.trys.pop();continue}$=B.call(N,U)}catch(W){$=[6,W],V=0}finally{P=L=0}if(5&$[0])throw $[1];return{value:$[0]?$[1]:void 0,done:!0}}}var f=Object.create?function(N,B,P,V){V===void 0&&(V=P),Object.defineProperty(N,V,{enumerable:!0,get:function(){return B[P]}})}:function(N,B,P,V){V===void 0&&(V=P),N[V]=B[P]};function p(N,B){for(var P in N)P!=="default"&&!Object.prototype.hasOwnProperty.call(B,P)&&f(B,N,P)}function m(N){var B=typeof Symbol=="function"&&Symbol.iterator,P=B&&N[B],V=0;if(P)return P.call(N);if(N&&typeof N.length=="number")return{next:function(){return N&&V>=N.length&&(N=void 0),{value:N&&N[V++],done:!N}}};throw new TypeError(B?"Object is not iterable.":"Symbol.iterator is not defined.")}function v(N,B){var P=typeof Symbol=="function"&&N[Symbol.iterator];if(!P)return N;var V,L,H=P.call(N),U=[];try{for(;(B===void 0||B-- >0)&&!(V=H.next()).done;)U.push(V.value)}catch(G){L={error:G}}finally{try{V&&!V.done&&(P=H.return)&&P.call(H)}finally{if(L)throw L.error}}return U}function g(){for(var N=[],B=0;B<arguments.length;B++)N=N.concat(v(arguments[B]));return N}function b(){for(var N=0,B=0,P=arguments.length;B<P;B++)N+=arguments[B].length;var V=Array(N),L=0;for(B=0;B<P;B++)for(var H=arguments[B],U=0,G=H.length;U<G;U++,L++)V[L]=H[U];return V}function y(N,B){for(var P=0,V=B.length,L=N.length;P<V;P++,L++)N[L]=B[P];return N}function w(N){return this instanceof w?(this.v=N,this):new w(N)}function x(N,B,P){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var V,L=P.apply(N,B||[]),H=[];return V={},U("next"),U("throw"),U("return"),V[Symbol.asyncIterator]=function(){return this},V;function U(X){L[X]&&(V[X]=function(te){return new Promise(function(ne,se){H.push([X,te,ne,se])>1||G(X,te)})})}function G(X,te){try{z(L[X](te))}catch(ne){K(H[0][3],ne)}}function z(X){X.value instanceof w?Promise.resolve(X.value.v).then($,W):K(H[0][2],X)}function $(X){G("next",X)}function W(X){G("throw",X)}function K(X,te){X(te),H.shift(),H.length&&G(H[0][0],H[0][1])}}function _(N){var B,P;return B={},V("next"),V("throw",function(L){throw L}),V("return"),B[Symbol.iterator]=function(){return this},B;function V(L,H){B[L]=N[L]?function(U){return(P=!P)?{value:w(N[L](U)),done:L==="return"}:H?H(U):U}:H}}function E(N){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var B,P=N[Symbol.asyncIterator];return P?P.call(N):(N=typeof m=="function"?m(N):N[Symbol.iterator](),B={},V("next"),V("throw"),V("return"),B[Symbol.asyncIterator]=function(){return this},B);function V(H){B[H]=N[H]&&function(U){return new Promise(function(G,z){L(G,z,(U=N[H](U)).done,U.value)})}}function L(H,U,G,z){Promise.resolve(z).then(function($){H({value:$,done:G})},U)}}function C(N,B){return Object.defineProperty?Object.defineProperty(N,"raw",{value:B}):N.raw=B,N}var T=Object.create?function(N,B){Object.defineProperty(N,"default",{enumerable:!0,value:B})}:function(N,B){N.default=B};function k(N){if(N&&N.__esModule)return N;var B={};if(N!=null)for(var P in N)P!=="default"&&Object.prototype.hasOwnProperty.call(N,P)&&f(B,N,P);return T(B,N),B}function I(N){return N&&N.__esModule?N:{default:N}}function O(N,B){if(!B.has(N))throw new TypeError("attempted to get private field on non-instance");return B.get(N)}function F(N,B,P){if(!B.has(N))throw new TypeError("attempted to set private field on non-instance");return B.set(N,P),P}},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(89)),a=r(n(4)),l=r(n(26)),s=r(n(17)),u=r(n(120)),c=r(n(27)),d=r(n(91)),f=r(n(70)),p=r(n(44)),m=r(n(57));(0,o.default)(t,"__esModule",{value:!0}),t.DomElement=void 0;var v=n(2),g=n(6),b=[];function y(T){var k=document.createElement("div");k.innerHTML=T;var I=k.children;return g.toArray(I)}function w(T){return!!T&&(T instanceof HTMLCollection||T instanceof NodeList)}function x(T){var k=document.querySelectorAll(T);return g.toArray(k)}function _(T){var k=[],I=[];return k=(0,i.default)(T)?T:T.split(";"),(0,a.default)(k).call(k,function(O){var F,N=(0,l.default)(F=O.split(":")).call(F,function(B){return(0,s.default)(B).call(B)});N.length===2&&I.push(N[0]+":"+N[1])}),I}var E=function(){function T(k){if(this.elems=[],this.length=this.elems.length,this.dataSource=new u.default,k){if(k instanceof T)return k;var I=[],O=k instanceof Node?k.nodeType:-1;if(this.selector=k,O===1||O===9)I=[k];else if(w(k))I=g.toArray(k);else if(k instanceof Array)I=k;else if(typeof k=="string"){var F,N=(0,s.default)(F=k.replace(`/
| /mg`,"")).call(F);I=(0,c.default)(N).call(N,"<")===0?y(N):x(N)}var B=I.length;if(!B)return this;for(var P=0;P<B;P++)this.elems.push(I[P]);this.length=B}}return(0,o.default)(T.prototype,"id",{get:function(){return this.elems[0].id},enumerable:!1,configurable:!0}),T.prototype.forEach=function(k){for(var I=0;I<this.length;I++){var O=this.elems[I];if(k.call(O,O,I)===!1)break}return this},T.prototype.clone=function(k){var I;k===void 0&&(k=!1);var O=[];return(0,a.default)(I=this.elems).call(I,function(F){O.push(F.cloneNode(!!k))}),C(O)},T.prototype.get=function(k){k===void 0&&(k=0);var I=this.length;return k>=I&&(k%=I),C(this.elems[k])},T.prototype.first=function(){return this.get(0)},T.prototype.last=function(){var k=this.length;return this.get(k-1)},T.prototype.on=function(k,I,O){var F;return k?(typeof I=="function"&&(O=I,I=""),(0,a.default)(F=this).call(F,function(N){if(I){var B=function(P){var V=P.target;V.matches(I)&&O.call(V,P)};N.addEventListener(k,B),b.push({elem:N,selector:I,fn:O,agentFn:B})}else N.addEventListener(k,O)})):this},T.prototype.off=function(k,I,O){var F;return k?(typeof I=="function"&&(O=I,I=""),(0,a.default)(F=this).call(F,function(N){if(I){for(var B=-1,P=0;P<b.length;P++){var V=b[P];if(V.selector===I&&V.fn===O&&V.elem===N){B=P;break}}if(B!==-1){var L=(0,d.default)(b).call(b,B,1)[0].agentFn;N.removeEventListener(k,L)}}else N.removeEventListener(k,O)})):this},T.prototype.attr=function(k,I){var O;return I==null?this.elems[0].getAttribute(k)||"":(0,a.default)(O=this).call(O,function(F){F.setAttribute(k,I)})},T.prototype.removeAttr=function(k){var I;(0,a.default)(I=this).call(I,function(O){O.removeAttribute(k)})},T.prototype.addClass=function(k){var I;return k?(0,a.default)(I=this).call(I,function(O){if(O.className){var F=O.className.split(/\s/);F=(0,f.default)(F).call(F,function(N){return!!(0,s.default)(N).call(N)}),(0,c.default)(F).call(F,k)<0&&F.push(k),O.className=F.join(" ")}else O.className=k}):this},T.prototype.removeClass=function(k){var I;return k?(0,a.default)(I=this).call(I,function(O){if(O.className){var F=O.className.split(/\s/);F=(0,f.default)(F).call(F,function(N){return!(!(N=(0,s.default)(N).call(N))||N===k)}),O.className=F.join(" ")}}):this},T.prototype.hasClass=function(k){if(!k)return!1;var I=this.elems[0];if(!I.className)return!1;var O=I.className.split(/\s/);return(0,p.default)(O).call(O,k)},T.prototype.css=function(k,I){var O,F;return F=I==""?"":k+":"+I+";",(0,a.default)(O=this).call(O,function(N){var B,P=(0,s.default)(B=N.getAttribute("style")||"").call(B);if(P){var V=_(P);V=(0,l.default)(V).call(V,function(L){return(0,c.default)(L).call(L,k)===0?F:L}),F!=""&&(0,c.default)(V).call(V,F)<0&&V.push(F),F==""&&(V=_(V)),N.setAttribute("style",V.join("; "))}else N.setAttribute("style",F)})},T.prototype.getBoundingClientRect=function(){return this.elems[0].getBoundingClientRect()},T.prototype.show=function(){return this.css("display","block")},T.prototype.hide=function(){return this.css("display","none")},T.prototype.children=function(){var k=this.elems[0];return k?C(k.children):null},T.prototype.childNodes=function(){var k=this.elems[0];return k?C(k.childNodes):null},T.prototype.replaceChildAll=function(k){for(var I=this.getNode(),O=this.elems[0];O.hasChildNodes();)I.firstChild&&O.removeChild(I.firstChild);this.append(k)},T.prototype.append=function(k){var I;return(0,a.default)(I=this).call(I,function(O){(0,a.default)(k).call(k,function(F){O.appendChild(F)})})},T.prototype.remove=function(){var k;return(0,a.default)(k=this).call(k,function(I){if(I.remove)I.remove();else{var O=I.parentElement;O&&O.removeChild(I)}})},T.prototype.isContain=function(k){var I=this.elems[0],O=k.elems[0];return I.contains(O)},T.prototype.getNodeName=function(){return this.elems[0].nodeName},T.prototype.getNode=function(k){return k===void 0&&(k=0),this.elems[k]},T.prototype.find=function(k){return C(this.elems[0].querySelectorAll(k))},T.prototype.text=function(k){var I;return k?(0,a.default)(I=this).call(I,function(O){O.innerHTML=k}):this.elems[0].innerHTML.replace(/<[^>]+>/g,function(){return""})},T.prototype.html=function(k){var I=this.elems[0];return k?(I.innerHTML=k,this):I.innerHTML},T.prototype.val=function(){var k,I=this.elems[0];return(0,s.default)(k=I.value).call(k)},T.prototype.focus=function(){var k;return(0,a.default)(k=this).call(k,function(I){I.focus()})},T.prototype.prev=function(){return C(this.elems[0].previousElementSibling)},T.prototype.next=function(){return C(this.elems[0].nextElementSibling)},T.prototype.getNextSibling=function(){return C(this.elems[0].nextSibling)},T.prototype.parent=function(){return C(this.elems[0].parentElement)},T.prototype.parentUntil=function(k,I){var O=I||this.elems[0];if(O.nodeName==="BODY")return null;var F=O.parentElement;return F===null?null:F.matches(k)?C(F):this.parentUntil(k,F)},T.prototype.parentUntilEditor=function(k,I,O){var F=O||this.elems[0];if(C(F).equal(I.$textContainerElem)||C(F).equal(I.$toolbarElem))return null;var N=F.parentElement;return N===null?null:N.matches(k)?C(N):this.parentUntilEditor(k,I,N)},T.prototype.equal=function(k){return k instanceof T?this.elems[0]===k.elems[0]:k instanceof HTMLElement&&this.elems[0]===k},T.prototype.insertBefore=function(k){var I,O=C(k).elems[0];return O?(0,a.default)(I=this).call(I,function(F){var N=O.parentNode;N==null||N.insertBefore(F,O)}):this},T.prototype.insertAfter=function(k){var I,O=C(k).elems[0],F=O&&O.nextSibling;return O?(0,a.default)(I=this).call(I,function(N){var B=O.parentNode;F?B.insertBefore(N,F):B.appendChild(N)}):this},T.prototype.data=function(k,I){if(I==null)return this.dataSource.get(k);this.dataSource.set(k,I)},T.prototype.getNodeTop=function(k){if(this.length<1)return this;var I=this.parent();return k.$textElem.equal(this)||k.$textElem.equal(I)?this:(I.prior=this,I.getNodeTop(k))},T.prototype.getOffsetData=function(){var k=this.elems[0];return{top:k.offsetTop,left:k.offsetLeft,width:k.offsetWidth,height:k.offsetHeight,parent:k.offsetParent}},T.prototype.scrollTop=function(k){this.elems[0].scrollTo({top:k})},T}();function C(){for(var T=[],k=0;k<arguments.length;k++)T[k]=arguments[k];return new((0,m.default)(E).apply(E,v.__spreadArrays([void 0],T)))}t.DomElement=E,t.default=C},function(e,t,n){e.exports=n(180)},function(e,t,n){var r=n(8),o=n(71).f,i=n(100),a=n(9),l=n(39),s=n(19),u=n(16),c=function(d){var f=function(p,m,v){if(this instanceof d){switch(arguments.length){case 0:return new d;case 1:return new d(p);case 2:return new d(p,m)}return new d(p,m,v)}return d.apply(this,arguments)};return f.prototype=d.prototype,f};e.exports=function(d,f){var p,m,v,g,b,y,w,x,_=d.target,E=d.global,C=d.stat,T=d.proto,k=E?r:C?r[_]:(r[_]||{}).prototype,I=E?a:a[_]||(a[_]={}),O=I.prototype;for(v in f)p=!i(E?v:_+(C?".":"#")+v,d.forced)&&k&&u(k,v),b=I[v],p&&(y=d.noTargetGet?(x=o(k,v))&&x.value:k[v]),g=p&&y?y:f[v],(!p||Qi(b)!==Qi(g))&&(w=d.bind&&p?l(g,r):d.wrap&&p?c(g):T&&typeof g=="function"?l(Function.call,g):g,(d.sham||g&&g.sham||b&&b.sham)&&s(w,"sham",!0),I[v]=w,T&&(u(a,m=_+"Prototype")||s(a,m,{}),a[m][v]=g,d.real&&O&&!O[v]&&s(O,v,g)))}},function(e,t,n){var r=n(0),o=r(n(92)),i=r(n(1)),a=r(n(256)),l=r(n(45)),s=r(n(46)),u=r(n(89)),c=r(n(26));(0,i.default)(t,"__esModule",{value:!0}),t.hexToRgb=t.getRandomCode=t.toArray=t.deepClone=t.isFunction=t.debounce=t.throttle=t.arrForEach=t.forEach=t.replaceSpecialSymbol=t.replaceHtmlSymbol=t.getRandom=t.UA=void 0;var d=n(2),f=function(){function k(){this._ua=navigator.userAgent;var I=this._ua.match(/(Edge?)\/(\d+)/);this.isOldEdge=!!(I&&I[1]=="Edge"&&(0,a.default)(I[2])<19),this.isFirefox=!(!/Firefox\/\d+/.test(this._ua)||/Seamonkey\/\d+/.test(this._ua))}return k.prototype.isIE=function(){return"ActiveXObject"in window},k.prototype.isWebkit=function(){return/webkit/i.test(this._ua)},k}();function p(k){var I;return k===void 0&&(k=""),k+(0,l.default)(I=Math.random().toString()).call(I,2)}function m(k){return k.replace(/</gm,"<").replace(/>/gm,">").replace(/"/gm,""").replace(/(\r\n|\r|\n)/g,"<br/>")}function v(k){return k.replace(/</gm,"<").replace(/>/gm,">").replace(/"/gm,'"')}function g(k,I){for(var O in k)if(Object.prototype.hasOwnProperty.call(k,O)&&I(O,k[O])===!1)break}function b(k,I){var O,F,N=k.length||0;for(O=0;O<N&&(F=k[O],I.call(k,F,O)!==!1);O++);}function y(k,I){I===void 0&&(I=200);var O=!1;return function(){for(var F=this,N=[],B=0;B<arguments.length;B++)N[B]=arguments[B];O||(O=!0,(0,s.default)(function(){O=!1,k.call.apply(k,d.__spreadArrays([F],N))},I))}}function w(k,I){I===void 0&&(I=200);var O=0;return function(){for(var F=this,N=[],B=0;B<arguments.length;B++)N[B]=arguments[B];O&&window.clearTimeout(O),O=(0,s.default)(function(){O=0,k.call.apply(k,d.__spreadArrays([F],N))},I)}}function x(k){return typeof k=="function"}function _(k){if((0,o.default)(k)!=="object"||typeof k=="function"||k===null)return k;var I;for(var O in(0,u.default)(k)&&(I=[]),(0,u.default)(k)||(I={}),k)Object.prototype.hasOwnProperty.call(k,O)&&(I[O]=_(k[O]));return I}function E(k){return(0,l.default)(Array.prototype).call(k)}function C(){var k;return(0,l.default)(k=Math.random().toString(36)).call(k,-5)}function T(k){var I=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(k);if(I==null)return null;var O=(0,c.default)(I).call(I,function(F){return(0,a.default)(F,16)});return"rgb("+O[1]+", "+O[2]+", "+O[3]+")"}t.UA=new f,t.getRandom=p,t.replaceHtmlSymbol=m,t.replaceSpecialSymbol=v,t.forEach=g,t.arrForEach=b,t.throttle=y,t.debounce=w,t.isFunction=x,t.deepClone=_,t.toArray=E,t.getRandomCode=C,t.hexToRgb=T},function(e,t,n){function r(){}(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.EMPTY_P_REGEX=t.EMPTY_P_LAST_REGEX=t.EMPTY_P=t.urlRegex=t.EMPTY_FN=void 0,t.EMPTY_FN=r,t.urlRegex=/^(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-.,@?^=%&:/~+#]*[\w\-@?^=%&/~+#])?/,t.EMPTY_P='<p data-we-empty-p=""><br></p>',t.EMPTY_P_LAST_REGEX=/<p data-we-empty-p=""><br\/?><\/p>$/gim,t.EMPTY_P_REGEX=/<p data-we-empty-p="">/gim},function(e,t,n){(function(r){var o=function(i){return i&&i.Math==Math&&i};e.exports=o((typeof globalThis>"u"?"undefined":Qi(globalThis))=="object"&&globalThis)||o((typeof window>"u"?"undefined":Qi(window))=="object"&&window)||o((typeof self>"u"?"undefined":Qi(self))=="object"&&self)||o(Qi(r)=="object"&&r)||Function("return this")()}).call(this,n(145))},function(e,t){e.exports={}},function(e,t,n){var r=n(8),o=n(74),i=n(16),a=n(64),l=n(76),s=n(105),u=o("wks"),c=r.Symbol,d=s?c:c&&c.withoutSetter||a;e.exports=function(f){return i(u,f)||(l&&i(c,f)?u[f]=c[f]:u[f]=d("Symbol."+f)),u[f]}},function(e,t){e.exports=function(n){try{return!!n()}catch{return!0}}},function(e,t,n){var r=n(9),o=n(16),i=n(93),a=n(18).f;e.exports=function(l){var s=r.Symbol||(r.Symbol={});o(s,l)||a(s,l,{value:i.f(l)})}},function(e,t){e.exports=function(n){return Qi(n)==="object"?n!==null:typeof n=="function"}},function(e,t,n){var r=n(11);e.exports=!r(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7})},function(e,t,n){var r=n(9);e.exports=function(o){return r[o+"Prototype"]}},function(e,t){var n={}.hasOwnProperty;e.exports=function(r,o){return n.call(r,o)}},function(e,t,n){e.exports=n(192)},function(e,t,n){var r=n(14),o=n(99),i=n(25),a=n(60),l=Object.defineProperty;t.f=r?l:function(s,u,c){if(i(s),u=a(u,!0),i(c),o)try{return l(s,u,c)}catch{}if("get"in c||"set"in c)throw TypeError("Accessors not supported");return"value"in c&&(s[u]=c.value),s}},function(e,t,n){var r=n(14),o=n(18),i=n(48);e.exports=r?function(a,l,s){return o.f(a,l,i(1,s))}:function(a,l,s){return a[l]=s,a}},function(e,t,n){var r=function(){var g;return function(){return typeof g>"u"&&(g=!!(window&&document&&document.all&&!window.atob)),g}}(),o=function(){var g={};return function(b){if(typeof g[b]>"u"){var y=document.querySelector(b);if(window.HTMLIFrameElement&&y instanceof window.HTMLIFrameElement)try{y=y.contentDocument.head}catch{y=null}g[b]=y}return g[b]}}(),i=[];function a(g){for(var b=-1,y=0;y<i.length;y++)if(i[y].identifier===g){b=y;break}return b}function l(g,b){for(var y={},w=[],x=0;x<g.length;x++){var _=g[x],E=b.base?_[0]+b.base:_[0],C=y[E]||0,T="".concat(E," ").concat(C);y[E]=C+1;var k=a(T),I={css:_[1],media:_[2],sourceMap:_[3]};k!==-1?(i[k].references++,i[k].updater(I)):i.push({identifier:T,updater:v(I,b),references:1}),w.push(T)}return w}function s(g){var b=document.createElement("style"),y=g.attributes||{};if(typeof y.nonce>"u"){var w=n.nc;w&&(y.nonce=w)}if(Object.keys(y).forEach(function(_){b.setAttribute(_,y[_])}),typeof g.insert=="function")g.insert(b);else{var x=o(g.insert||"head");if(!x)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");x.appendChild(b)}return b}function u(g){if(g.parentNode===null)return!1;g.parentNode.removeChild(g)}var c=function(){var g=[];return function(b,y){return g[b]=y,g.filter(Boolean).join(`
| `)}}();function d(g,b,y,w){var x=y?"":w.media?"@media ".concat(w.media," {").concat(w.css,"}"):w.css;if(g.styleSheet)g.styleSheet.cssText=c(b,x);else{var _=document.createTextNode(x),E=g.childNodes;E[b]&&g.removeChild(E[b]),E.length?g.insertBefore(_,E[b]):g.appendChild(_)}}function f(g,b,y){var w=y.css,x=y.media,_=y.sourceMap;if(x?g.setAttribute("media",x):g.removeAttribute("media"),_&&typeof btoa<"u"&&(w+=`
| /*# sourceMappingURL=data:application/json;base64,`.concat(btoa(unescape(encodeURIComponent(JSON.stringify(_))))," */")),g.styleSheet)g.styleSheet.cssText=w;else{for(;g.firstChild;)g.removeChild(g.firstChild);g.appendChild(document.createTextNode(w))}}var p=null,m=0;function v(g,b){var y,w,x;if(b.singleton){var _=m++;y=p||(p=s(b)),w=d.bind(null,y,_,!1),x=d.bind(null,y,_,!0)}else y=s(b),w=f.bind(null,y,b),x=function(){u(y)};return w(g),function(E){if(E){if(E.css===g.css&&E.media===g.media&&E.sourceMap===g.sourceMap)return;w(g=E)}else x()}}e.exports=function(g,b){!(b=b||{}).singleton&&typeof b.singleton!="boolean"&&(b.singleton=r());var y=l(g=g||[],b);return function(w){if(w=w||[],Object.prototype.toString.call(w)==="[object Array]"){for(var x=0;x<y.length;x++){var _=a(y[x]);i[_].references--}for(var E=l(w,b),C=0;C<y.length;C++){var T=a(y[C]);i[T].references===0&&(i[T].updater(),i.splice(T,1))}y=E}}}},function(e,t,n){function r(i,a){var l=i[1]||"",s=i[3];if(!s)return l;if(a&&typeof btoa=="function"){var u=o(s),c=s.sources.map(function(d){return"/*# sourceURL=".concat(s.sourceRoot||"").concat(d," */")});return[l].concat(c).concat([u]).join(`
| `)}return[l].join(`
| `)}function o(i){var a=btoa(unescape(encodeURIComponent(JSON.stringify(i)))),l="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(a);return"/*# ".concat(l," */")}e.exports=function(i){var a=[];return a.toString=function(){return this.map(function(l){var s=r(l,i);return l[2]?"@media ".concat(l[2]," {").concat(s,"}"):s}).join("")},a.i=function(l,s,u){typeof l=="string"&&(l=[[null,l,""]]);var c={};if(u)for(var d=0;d<this.length;d++){var f=this[d][0];f!=null&&(c[f]=!0)}for(var p=0;p<l.length;p++){var m=[].concat(l[p]);u&&c[m[0]]||(s&&(m[2]?m[2]="".concat(s," and ").concat(m[2]):m[2]=s),a.push(m))}},a}},function(e,t,n){var r=n(14),o=n(11),i=n(16),a=Object.defineProperty,l={},s=function(u){throw u};e.exports=function(u,c){if(i(l,u))return l[u];c||(c={});var d=[][u],f=!!i(c,"ACCESSORS")&&c.ACCESSORS,p=i(c,0)?c[0]:s,m=i(c,1)?c[1]:void 0;return l[u]=!!d&&!o(function(){if(f&&!r)return!0;var v={length:-1};f?a(v,1,{enumerable:!0,get:s}):v[1]=1,d.call(v,p,m)})}},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=function(i){function a(l,s){return i.call(this,l,s)||this}return r.__extends(a,i),a}(r.__importDefault(n(95)).default);t.default=o},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4)),a=r(n(46));(0,o.default)(t,"__esModule",{value:!0});var l=n(2),s=l.__importDefault(n(3)),u=l.__importDefault(n(95)),c=l.__importDefault(n(133)),d=function(f){function p(m,v,g){var b=f.call(this,m,v)||this;g.title=v.i18next.t("menus.dropListMenu."+g.title);var y,w=v.config.lang==="zh-CN"?"":"w-e-drop-list-tl";w!==""&&g.type==="list"&&(0,i.default)(y=g.list).call(y,function(_){var E=_.$elem,C=s.default(E.children());if(C.length>0){var T=C==null?void 0:C.getNodeName();T&&T==="I"&&E.addClass(w)}});var x=new c.default(b,g);return b.dropList=x,m.on("click",function(){var _;v.selection.getRange()!=null&&(m.css("z-index",v.zIndex.get("menu")),(0,i.default)(_=v.txt.eventHooks.dropListMenuHoverEvents).call(_,function(E){return E()}),x.show())}).on("mouseleave",function(){m.css("z-index","auto"),x.hideTimeoutId=(0,a.default)(function(){x.hide()})}),b}return l.__extends(p,f),p}(u.default);t.default=d},function(e,t,n){var r=n(13);e.exports=function(o){if(!r(o))throw TypeError(String(o)+" is not an object");return o}},function(e,t,n){e.exports=n(188)},function(e,t,n){e.exports=n(201)},function(e,t,n){var r=n(72),o=n(49);e.exports=function(i){return r(o(i))}},function(e,t,n){var r=n(49);e.exports=function(o){return Object(r(o))}},function(e,t,n){var r=n(39),o=n(72),i=n(29),a=n(34),l=n(88),s=[].push,u=function(c){var d=c==1,f=c==2,p=c==3,m=c==4,v=c==6,g=c==5||v;return function(b,y,w,x){for(var _,E,C=i(b),T=o(C),k=r(y,w,3),I=a(T.length),O=0,F=x||l,N=d?F(b,I):f?F(b,0):void 0;I>O;O++)if((g||O in T)&&(E=k(_=T[O],O,C),c)){if(d)N[O]=E;else if(E)switch(c){case 3:return!0;case 5:return _;case 6:return O;case 2:s.call(N,_)}else if(m)return!1}return v?-1:p||m?m:N}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6)}},function(e,t,n){e.exports=n(283)},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4)),a=r(n(31)),l=r(n(131));(0,o.default)(t,"__esModule",{value:!0});var s=n(2),u=s.__importDefault(n(3)),c=n(7),d=function(){function f(p,m){this.menu=p,this.conf=m,this.$container=u.default('<div class="w-e-panel-container"></div>');var v=p.editor;v.txt.eventHooks.clickEvents.push(f.hideCurAllPanels),v.txt.eventHooks.toolbarClickEvents.push(f.hideCurAllPanels),v.txt.eventHooks.dropListMenuHoverEvents.push(f.hideCurAllPanels)}return f.prototype.create=function(){var p=this,m=this.menu;if(!f.createdMenus.has(m)){var v=this.conf,g=this.$container,b=v.width||300,y=m.editor.$toolbarElem.getBoundingClientRect(),w=m.$elem.getBoundingClientRect(),x=y.height+y.top-w.top,_=(y.width-b)/2+y.left-w.left,E=300;Math.abs(_)>E&&(_=w.left<document.documentElement.clientWidth/2?-w.width/2:-b+w.width/2),g.css("width",b+"px").css("margin-top",x+"px").css("margin-left",_+"px").css("z-index",m.editor.zIndex.get("panel"));var C=u.default('<i class="w-e-icon-close w-e-panel-close"></i>');g.append(C),C.on("click",function(){p.remove()});var T=u.default('<ul class="w-e-panel-tab-title"></ul>'),k=u.default('<div class="w-e-panel-tab-content"></div>');g.append(T).append(k);var I=v.height;I&&k.css("height",I+"px").css("overflow-y","auto");var O=v.tabs||[],F=[],N=[];(0,i.default)(O).call(O,function(P,V){if(P){var L=P.title||"",H=P.tpl||"",U=u.default('<li class="w-e-item">'+L+"</li>");T.append(U);var G=u.default(H);k.append(G),F.push(U),N.push(G),V===0?(U.data("active",!0),U.addClass("w-e-active")):G.hide(),U.on("click",function(){U.data("active")||((0,i.default)(F).call(F,function(z){z.data("active",!1),z.removeClass("w-e-active")}),(0,i.default)(N).call(N,function(z){z.hide()}),U.data("active",!0),U.addClass("w-e-active"),G.show())})}}),g.on("click",function(P){P.stopPropagation()}),m.$elem.append(g),(0,i.default)(O).call(O,function(P,V){if(P){var L=P.events||[];(0,i.default)(L).call(L,function(H){var U,G=H.selector,z=H.type,$=H.fn||c.EMPTY_FN,W=N[V],K=(U=H.bindEnter)!==null&&U!==void 0&&U,X=function(te){return s.__awaiter(p,void 0,void 0,function(){return s.__generator(this,function(ne){switch(ne.label){case 0:return te.stopPropagation(),[4,$(te)];case 1:return ne.sent()&&this.remove(),[2]}})})};(0,a.default)(W).call(W,G).on(z,X),K&&z==="click"&&W.on("keyup",function(te){te.keyCode==13&&X(te)})})}});var B=(0,a.default)(g).call(g,"input[type=text],textarea");B.length&&B.get(0).focus(),f.hideCurAllPanels(),m.setPanel(this),f.createdMenus.add(m)}},f.prototype.remove=function(){var p=this.menu,m=this.$container;m&&m.remove(),f.createdMenus.delete(p)},f.hideCurAllPanels=function(){var p;f.createdMenus.size!==0&&(0,i.default)(p=f.createdMenus).call(p,function(m){var v=m.panel;v&&v.remove()})},f.createdMenus=new l.default,f}();t.default=d},function(e,t){var n={}.toString;e.exports=function(r){return n.call(r).slice(8,-1)}},function(e,t,n){var r=n(62),o=Math.min;e.exports=function(i){return i>0?o(r(i),9007199254740991):0}},function(e,t,n){var r=n(9),o=n(8),i=function(a){return typeof a=="function"?a:void 0};e.exports=function(a,l){return arguments.length<2?i(r[a])||i(o[a]):r[a]&&r[a][l]||o[a]&&o[a][l]}},function(e,t,n){var r=n(81),o=n(18).f,i=n(19),a=n(16),l=n(170),s=n(10)("toStringTag");e.exports=function(u,c,d,f){if(u){var p=d?u:u.prototype;a(p,s)||o(p,s,{configurable:!0,value:c}),f&&!r&&i(p,"toString",l)}}},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=function(i){function a(l,s){return i.call(this,l,s)||this}return r.__extends(a,i),a.prototype.setPanel=function(l){this.panel=l},a}(r.__importDefault(n(95)).default);t.default=o},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4)),a=r(n(57));(0,o.default)(t,"__esModule",{value:!0});var l=n(2).__importDefault(n(3)),s=function(){function u(c,d,f){this.editor=c,this.$targetElem=d,this.conf=f,this._show=!1,this._isInsertTextContainer=!1;var p=l.default("<div></div>");p.addClass("w-e-tooltip"),this.$container=p}return u.prototype.getPositionData=function(){var c=this.$container,d=0,f=0,p=20,m=document.documentElement.scrollTop,v=this.$targetElem.getBoundingClientRect(),g=this.editor.$textElem.getBoundingClientRect(),b=this.$targetElem.getOffsetData(),y=l.default(b.parent),w=this.editor.$textElem.elems[0].scrollTop;if(this._isInsertTextContainer=y.equal(this.editor.$textContainerElem),this._isInsertTextContainer){var x=y.getBoundingClientRect().height,_=b.top,E=b.left,C=b.height,T=_-w;T>p+5?(d=T-p-15,c.addClass("w-e-tooltip-up")):T+C+p<x?(d=T+C+10,c.addClass("w-e-tooltip-down")):(d=(T>0?T:0)+p+10,c.addClass("w-e-tooltip-down")),f=E<0?0:E}else v.top<p||v.top-g.top<p?(d=v.bottom+m+5,c.addClass("w-e-tooltip-down")):(d=v.top+m-p-15,c.addClass("w-e-tooltip-up")),f=v.left<0?0:v.left;return{top:d,left:f}},u.prototype.appendMenus=function(){var c=this,d=this.conf,f=this.editor,p=this.$targetElem,m=this.$container;(0,i.default)(d).call(d,function(v,g){var b=v.$elem,y=l.default("<div></div>");y.addClass("w-e-tooltip-item-wrapper "),y.append(b),m.append(y),b.on("click",function(w){w.preventDefault(),v.onClick(f,p)&&c.remove()})})},u.prototype.create=function(){var c,d,f=this.editor,p=this.$container;this.appendMenus();var m=this.getPositionData(),v=m.top,g=m.left;p.css("top",v+"px"),p.css("left",g+"px"),p.css("z-index",f.zIndex.get("tooltip")),this._isInsertTextContainer?this.editor.$textContainerElem.append(p):l.default("body").append(p),this._show=!0,f.beforeDestroy((0,a.default)(c=this.remove).call(c,this)),f.txt.eventHooks.onBlurEvents.push((0,a.default)(d=this.remove).call(d,this))},u.prototype.remove=function(){this.$container.remove(),this._show=!1},(0,o.default)(u.prototype,"isShow",{get:function(){return this._show},enumerable:!1,configurable:!0}),u}();t.default=s},function(e,t,n){var r=n(40);e.exports=function(o,i,a){if(r(o),i===void 0)return o;switch(a){case 0:return function(){return o.call(i)};case 1:return function(l){return o.call(i,l)};case 2:return function(l,s){return o.call(i,l,s)};case 3:return function(l,s,u){return o.call(i,l,s,u)}}return function(){return o.apply(i,arguments)}}},function(e,t){e.exports=function(n){if(typeof n!="function")throw TypeError(String(n)+" is not a function");return n}},function(e,t,n){var r,o,i,a=n(165),l=n(8),s=n(13),u=n(19),c=n(16),d=n(63),f=n(51),p=l.WeakMap,m=function(_){return i(_)?o(_):r(_,{})},v=function(_){return function(E){var C;if(!s(E)||(C=o(E)).type!==_)throw TypeError("Incompatible receiver, "+_+" required");return C}};if(a){var g=new p,b=g.get,y=g.has,w=g.set;r=function(_,E){return w.call(g,_,E),E},o=function(_){return b.call(g,_)||{}},i=function(_){return y.call(g,_)}}else{var x=d("state");f[x]=!0,r=function(_,E){return u(_,x,E),E},o=function(_){return c(_,x)?_[x]:{}},i=function(_){return c(_,x)}}e.exports={set:r,get:o,has:i,enforce:m,getterFor:v}},function(e,t){e.exports=!0},function(e,t){e.exports={}},function(e,t,n){e.exports=n(213)},function(e,t,n){e.exports=n(261)},function(e,t,n){e.exports=n(265)},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0}),t.createElementFragment=t.createDocumentFragment=t.createElement=t.insertBefore=t.getEndPoint=t.getStartPoint=t.updateRange=t.filterSelectionNodes=void 0;var a=n(2),l=n(137),s=a.__importDefault(n(3));function u(b){var y=[];return(0,i.default)(b).call(b,function(w){var x=w.getNodeName();if(x!==l.ListType.OrderedList&&x!==l.ListType.UnorderedList)y.push(w);else if(w.prior)y.push(w.prior);else{var _=w.children();_==null||(0,i.default)(_).call(_,function(E){y.push(s.default(E))})}}),y}function c(b,y,w){var x=b.selection,_=document.createRange();y.length>1?(_.setStart(y.elems[0],0),_.setEnd(y.elems[y.length-1],y.elems[y.length-1].childNodes.length)):_.selectNodeContents(y.elems[0]),w&&_.collapse(!1),x.saveRange(_),x.restoreSelection()}function d(b){var y;return b.prior?b.prior:s.default((y=b.children())===null||y===void 0?void 0:y.elems[0])}function f(b){var y;return b.prior?b.prior:s.default((y=b.children())===null||y===void 0?void 0:y.last().elems[0])}function p(b,y,w){w===void 0&&(w=null),b.parent().elems[0].insertBefore(y,w)}function m(b){return document.createElement(b)}function v(){return document.createDocumentFragment()}function g(b,y,w){return w===void 0&&(w="li"),(0,i.default)(b).call(b,function(x){var _=m(w);_.innerHTML=x.html(),y.appendChild(_),x.remove()}),y}t.filterSelectionNodes=u,t.updateRange=c,t.getStartPoint=d,t.getEndPoint=f,t.insertBefore=p,t.createElement=m,t.createDocumentFragment=v,t.createElementFragment=g},function(e,t){e.exports=function(n,r){return{enumerable:!(1&n),configurable:!(2&n),writable:!(4&n),value:r}}},function(e,t){e.exports=function(n){if(n==null)throw TypeError("Can't call method on "+n);return n}},function(e,t,n){var r=n(164).charAt,o=n(41),i=n(75),a="String Iterator",l=o.set,s=o.getterFor(a);i(String,"String",function(u){l(this,{type:a,string:String(u),index:0})},function(){var u,c=s(this),d=c.string,f=c.index;return f>=d.length?{value:void 0,done:!0}:(u=r(d,f),c.index+=u.length,{value:u,done:!1})})},function(e,t){e.exports={}},function(e,t,n){var r=n(106),o=n(80);e.exports=Object.keys||function(i){return r(i,o)}},function(e,t,n){var r=n(19);e.exports=function(o,i,a,l){l&&l.enumerable?o[i]=a:r(o,i,a)}},function(e,t,n){n(173);var r=n(174),o=n(8),i=n(65),a=n(19),l=n(43),s=n(10)("toStringTag");for(var u in r){var c=o[u],d=c&&c.prototype;d&&i(d)!==s&&a(d,s,u),l[u]=l.Array}},function(e,t,n){var r=n(33);e.exports=Array.isArray||function(o){return r(o)=="Array"}},function(e,t,n){var r=n(11),o=n(10),i=n(86),a=o("species");e.exports=function(l){return i>=51||!r(function(){var s=[];return(s.constructor={})[a]=function(){return{foo:1}},s[l](Boolean).foo!==1})}},function(e,t,n){e.exports=n(222)},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.ListHandle=void 0;var r=n(2).__importDefault(n(373)),o=function(){function i(a){this.options=a,this.selectionRangeElem=new r.default}return i}();t.ListHandle=o},function(e,t,n){var r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!r.call({1:2},1);t.f=i?function(a){var l=o(this,a);return!!l&&l.enumerable}:r},function(e,t,n){var r=n(13);e.exports=function(o,i){if(!r(o))return o;var a,l;if(i&&typeof(a=o.toString)=="function"&&!r(l=a.call(o))||typeof(a=o.valueOf)=="function"&&!r(l=a.call(o))||!i&&typeof(a=o.toString)=="function"&&!r(l=a.call(o)))return l;throw TypeError("Can't convert object to primitive value")}},function(e,t){},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(o){return isNaN(o=+o)?0:(o>0?r:n)(o)}},function(e,t,n){var r=n(74),o=n(64),i=r("keys");e.exports=function(a){return i[a]||(i[a]=o(a))}},function(e,t){var n=0,r=Math.random();e.exports=function(o){return"Symbol("+String(o===void 0?"":o)+")_"+(++n+r).toString(36)}},function(e,t,n){var r=n(81),o=n(33),i=n(10)("toStringTag"),a=o(function(){return arguments}())=="Arguments",l=function(s,u){try{return s[u]}catch{}};e.exports=r?o:function(s){var u,c,d;return s===void 0?"Undefined":s===null?"Null":typeof(c=l(u=Object(s),i))=="string"?c:a?o(u):(d=o(u))=="Object"&&typeof u.callee=="function"?"Arguments":d}},function(e,t,n){var r=n(25),o=n(111),i=n(34),a=n(39),l=n(112),s=n(113),u=function(d,f){this.stopped=d,this.result=f},c=e.exports=function(d,f,p,m,v){var g,b,y,w,x,_,E,C=a(f,p,m?2:1);if(v)g=d;else{if(typeof(b=l(d))!="function")throw TypeError("Target is not iterable");if(o(b)){for(y=0,w=i(d.length);w>y;y++)if((x=m?C(r(E=d[y])[0],E[1]):C(d[y]))&&x instanceof u)return x;return new u(!1)}g=b.call(d)}for(_=g.next;!(E=_.call(g)).done;)if(Qi(x=s(g,C,E.value,m))=="object"&&x&&x instanceof u)return x;return new u(!1)};c.stop=function(d){return new u(!0,d)}},function(e,t,n){var r=n(11);e.exports=function(o,i){var a=[][o];return!!a&&r(function(){a.call(null,i||function(){throw 1},1)})}},function(e,t){e.exports=`
| \v\f\r \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF`},function(e,t,n){var r=n(60),o=n(18),i=n(48);e.exports=function(a,l,s){var u=r(l);u in a?o.f(a,u,i(0,s)):a[u]=s}},function(e,t,n){e.exports=n(209)},function(e,t,n){var r=n(14),o=n(59),i=n(48),a=n(28),l=n(60),s=n(16),u=n(99),c=Object.getOwnPropertyDescriptor;t.f=r?c:function(d,f){if(d=a(d),f=l(f,!0),u)try{return c(d,f)}catch{}if(s(d,f))return i(!o.f.call(d,f),d[f])}},function(e,t,n){var r=n(11),o=n(33),i="".split;e.exports=r(function(){return!Object("z").propertyIsEnumerable(0)})?function(a){return o(a)=="String"?i.call(a,""):Object(a)}:Object},function(e,t,n){var r=n(8),o=n(13),i=r.document,a=o(i)&&o(i.createElement);e.exports=function(l){return a?i.createElement(l):{}}},function(e,t,n){var r=n(42),o=n(102);(e.exports=function(i,a){return o[i]||(o[i]=a!==void 0?a:{})})("versions",[]).push({version:"3.6.4",mode:r?"pure":"global",copyright:"\xA9 2020 Denis Pushkarev (zloirock.ru)"})},function(e,t,n){var r=n(5),o=n(167),i=n(104),a=n(171),l=n(36),s=n(19),u=n(53),c=n(10),d=n(42),f=n(43),p=n(103),m=p.IteratorPrototype,v=p.BUGGY_SAFARI_ITERATORS,g=c("iterator"),b="keys",y="values",w="entries",x=function(){return this};e.exports=function(_,E,C,T,k,I,O){o(C,E,T);var F,N,B,P=function($){if($===k&&G)return G;if(!v&&$ in H)return H[$];switch($){case b:case y:case w:return function(){return new C(this,$)}}return function(){return new C(this)}},V=E+" Iterator",L=!1,H=_.prototype,U=H[g]||H["@@iterator"]||k&&H[k],G=!v&&U||P(k),z=E=="Array"&&H.entries||U;if(z&&(F=i(z.call(new _)),m!==Object.prototype&&F.next&&(!d&&i(F)!==m&&(a?a(F,m):typeof F[g]!="function"&&s(F,g,x)),l(F,V,!0,!0),d&&(f[V]=x))),k==y&&U&&U.name!==y&&(L=!0,G=function(){return U.call(this)}),(!d||O)&&H[g]!==G&&s(H,g,G),f[E]=G,k)if(N={values:P(y),keys:I?G:P(b),entries:P(w)},O)for(B in N)(v||L||!(B in H))&&u(H,B,N[B]);else r({target:E,proto:!0,forced:v||L},N);return N}},function(e,t,n){var r=n(11);e.exports=!!Object.getOwnPropertySymbols&&!r(function(){return!String(Symbol())})},function(e,t,n){var r,o=n(25),i=n(169),a=n(80),l=n(51),s=n(107),u=n(73),c=n(63),d=">",f="<",p="prototype",m="script",v=c("IE_PROTO"),g=function(){},b=function(_){return f+m+d+_+f+"/"+m+d},y=function(_){_.write(b("")),_.close();var E=_.parentWindow.Object;return _=null,E},w=function(){var _,E=u("iframe"),C="java"+m+":";return E.style.display="none",s.appendChild(E),E.src=String(C),(_=E.contentWindow.document).open(),_.write(b("document.F=Object")),_.close(),_.F},x=function(){try{r=document.domain&&new ActiveXObject("htmlfile")}catch{}x=r?y(r):w();for(var _=a.length;_--;)delete x[p][a[_]];return x()};l[v]=!0,e.exports=Object.create||function(_,E){var C;return _!==null?(g[p]=o(_),C=new g,g[p]=null,C[v]=_):C=x(),E===void 0?C:i(C,E)}},function(e,t,n){var r=n(28),o=n(34),i=n(79),a=function(l){return function(s,u,c){var d,f=r(s),p=o(f.length),m=i(c,p);if(l&&u!=u){for(;p>m;)if((d=f[m++])!=d)return!0}else for(;p>m;m++)if((l||m in f)&&f[m]===u)return l||m||0;return!l&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},function(e,t,n){var r=n(62),o=Math.max,i=Math.min;e.exports=function(a,l){var s=r(a);return s<0?o(s+l,0):i(s,l)}},function(e,t){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(e,t,n){var r={};r[n(10)("toStringTag")]="z",e.exports=String(r)==="[object z]"},function(e,t){e.exports=function(){}},function(e,t){e.exports=function(n,r,o){if(!(n instanceof r))throw TypeError("Incorrect "+(o?o+" ":"")+"invocation");return n}},function(e,t,n){var r=n(35);e.exports=r("navigator","userAgent")||""},function(e,t,n){var r=n(40),o=function(i){var a,l;this.promise=new i(function(s,u){if(a!==void 0||l!==void 0)throw TypeError("Bad Promise constructor");a=s,l=u}),this.resolve=r(a),this.reject=r(l)};e.exports.f=function(i){return new o(i)}},function(e,t,n){var r,o,i=n(8),a=n(84),l=i.process,s=l&&l.versions,u=s&&s.v8;u?o=(r=u.split("."))[0]+r[1]:a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=r[1]),e.exports=o&&+o},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=a.__importDefault(n(3)),s=n(6),u=a.__importDefault(n(267)),c=a.__importDefault(n(280)),d=a.__importDefault(n(281)),f=a.__importDefault(n(282)),p=a.__importDefault(n(301)),m=a.__importStar(n(416)),v=a.__importDefault(n(417)),g=a.__importDefault(n(418)),b=a.__importDefault(n(419)),y=a.__importStar(n(420)),w=a.__importDefault(n(423)),x=a.__importDefault(n(424)),_=a.__importDefault(n(425)),E=a.__importDefault(n(427)),C=a.__importDefault(n(437)),T=a.__importDefault(n(440)),k=a.__importStar(n(441)),I=a.__importDefault(n(23)),O=a.__importDefault(n(133)),F=a.__importDefault(n(24)),N=a.__importDefault(n(32)),B=a.__importDefault(n(37)),P=a.__importDefault(n(38)),V=1,L=function(){function H(U,G){this.pluginsFunctionList={},this.beforeDestroyHooks=[],this.id="wangEditor-"+V++,this.toolbarSelector=U,this.textSelector=G,m.selectorValidator(this),this.config=s.deepClone(u.default),this.$toolbarElem=l.default("<div></div>"),this.$textContainerElem=l.default("<div></div>"),this.$textElem=l.default("<div></div>"),this.toolbarElemId="",this.textElemId="",this.isFocus=!1,this.isComposing=!1,this.isCompatibleMode=!1,this.selection=new c.default(this),this.cmd=new d.default(this),this.txt=new f.default(this),this.menus=new p.default(this),this.zIndex=new x.default,this.change=new _.default(this),this.history=new E.default(this),this.onSelectionChange=new T.default(this);var z=C.default(this),$=z.disable,W=z.enable;this.disable=$,this.enable=W,this.isEnable=!0}return H.prototype.initSelection=function(U){v.default(this,U)},H.prototype.create=function(){this.zIndex.init(this),this.isCompatibleMode=this.config.compatibleMode(),this.isCompatibleMode||(this.config.onchangeTimeout=30),b.default(this),m.default(this),this.txt.init(),this.menus.init(),y.default(this),this.initSelection(!0),g.default(this),this.change.observe(),this.history.observe(),k.default(this)},H.prototype.beforeDestroy=function(U){return this.beforeDestroyHooks.push(U),this},H.prototype.destroy=function(){var U,G=this;(0,i.default)(U=this.beforeDestroyHooks).call(U,function(z){return z.call(G)}),this.$toolbarElem.remove(),this.$textContainerElem.remove()},H.prototype.fullScreen=function(){y.setFullScreen(this)},H.prototype.unFullScreen=function(){y.setUnFullScreen(this)},H.prototype.scrollToHead=function(U){w.default(this,U)},H.registerMenu=function(U,G){!G||typeof G!="function"||(H.globalCustomMenuConstructorList[U]=G)},H.prototype.registerPlugin=function(U,G){k.registerPlugin(U,G,this.pluginsFunctionList)},H.registerPlugin=function(U,G){k.registerPlugin(U,G,H.globalPluginsFunctionList)},H.$=l.default,H.BtnMenu=I.default,H.DropList=O.default,H.DropListMenu=F.default,H.Panel=N.default,H.PanelMenu=B.default,H.Tooltip=P.default,H.globalCustomMenuConstructorList={},H.globalPluginsFunctionList={},H}();t.default=L},function(e,t,n){var r=n(13),o=n(55),i=n(10)("species");e.exports=function(a,l){var s;return o(a)&&(typeof(s=a.constructor)!="function"||s!==Array&&!o(s.prototype)?r(s)&&(s=s[i])===null&&(s=void 0):s=void 0),new(s===void 0?Array:s)(l===0?0:l)}},function(e,t,n){e.exports=n(185)},function(e,t,n){var r=n(49),o="["+n(68)+"]",i=RegExp("^"+o+o+"*"),a=RegExp(o+o+"*$"),l=function(s){return function(u){var c=String(r(u));return 1&s&&(c=c.replace(i,"")),2&s&&(c=c.replace(a,"")),c}};e.exports={start:l(1),end:l(2),trim:l(3)}},function(e,t,n){e.exports=n(205)},function(e,t,n){var r=n(227),o=n(230);function i(a){return e.exports=i=typeof o=="function"&&typeof r=="symbol"?function(l){return typeof l}:function(l){return l&&typeof o=="function"&&l.constructor===o&&l!==o.prototype?"symbol":typeof l},i(a)}e.exports=i},function(e,t,n){var r=n(10);t.f=r},function(e,t,n){e.exports=n(306)},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=n(2).__importDefault(n(32)),l=function(){function s(u,c){var d=this;this.$elem=u,this.editor=c,this._active=!1,u.on("click",function(f){var p;a.default.hideCurAllPanels(),(0,i.default)(p=c.txt.eventHooks.menuClickEvents).call(p,function(m){return m()}),f.stopPropagation(),c.selection.getRange()!=null&&d.clickHandler(f)})}return s.prototype.clickHandler=function(u){},s.prototype.active=function(){this._active=!0,this.$elem.addClass("w-e-active")},s.prototype.unActive=function(){this._active=!1,this.$elem.removeClass("w-e-active")},(0,o.default)(s.prototype,"isActive",{get:function(){return this._active},enumerable:!1,configurable:!0}),s}();t.default=l},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(57)),a=r(n(4)),l=r(n(27));(0,o.default)(t,"__esModule",{value:!0});var s=n(2),u=n(6),c=s.__importDefault(n(135)),d=s.__importDefault(n(136)),f=function(){function p(m){this.editor=m}return p.prototype.insertImg=function(m,v,g){var b=this.editor,y=b.config,w="validate.",x=function(T,k){return k===void 0&&(k=w),b.i18next.t(k+T)},_=v?'alt="'+v+'" ':"",E=g?'data-href="'+encodeURIComponent(g)+'" ':"";b.cmd.do("insertHTML",'<img src="'+m+'" '+_+E+'style="max-width:100%;" contenteditable="false"/>'),y.linkImgCallback(m,v,g);var C=document.createElement("img");C.onload=function(){C=null},C.onerror=function(){y.customAlert(x("\u63D2\u5165\u56FE\u7247\u9519\u8BEF"),"error","wangEditor: "+x("\u63D2\u5165\u56FE\u7247\u9519\u8BEF")+"\uFF0C"+x("\u56FE\u7247\u94FE\u63A5")+' "'+m+'"\uFF0C'+x("\u4E0B\u8F7D\u94FE\u63A5\u5931\u8D25")),C=null},C.onabort=function(){return C=null},C.src=m},p.prototype.uploadImg=function(m){var v=this;if(m.length){var g=this.editor,b=g.config,y="validate.",w=function(K){return g.i18next.t(y+K)},x=b.uploadImgServer,_=b.uploadImgShowBase64,E=b.uploadImgMaxSize,C=E/1024/1024,T=b.uploadImgMaxLength,k=b.uploadFileName,I=b.uploadImgParams,O=b.uploadImgParamsWithUrl,F=b.uploadImgHeaders,N=b.uploadImgHooks,B=b.uploadImgTimeout,P=b.withCredentials,V=b.customUploadImg;if(V||x||_){var L,H=[],U=[];if(u.arrForEach(m,function(K){if(K){var X=K.name||K.type.replace("/","."),te=K.size;if(X&&te){var ne=g.config.uploadImgAccept.join("|");if(new RegExp(".("+ne+")$","i").test(X)===!1)return void U.push("\u3010"+X+"\u3011"+w("\u4E0D\u662F\u56FE\u7247"));if(E<te)return void U.push("\u3010"+X+"\u3011"+w("\u5927\u4E8E")+" "+C+"M");H.push(K)}}}),U.length)return void b.customAlert(w("\u56FE\u7247\u9A8C\u8BC1\u672A\u901A\u8FC7")+`:
| `+U.join(`
| `),"warning");if(H.length===0)return void b.customAlert(w("\u4F20\u5165\u7684\u6587\u4EF6\u4E0D\u5408\u6CD5"),"warning");if(H.length>T)return void b.customAlert(w("\u4E00\u6B21\u6700\u591A\u4E0A\u4F20")+T+w("\u5F20\u56FE\u7247"),"warning");if(V&&typeof V=="function")return void V(H,(0,i.default)(L=this.insertImg).call(L,this));var G=new FormData;if((0,a.default)(H).call(H,function(K,X){var te=k||K.name;H.length>1&&(te+=X+1),G.append(te,K)}),x){var z=x.split("#");x=z[0];var $=z[1]||"";(0,a.default)(u).call(u,I,function(K,X){O&&((0,l.default)(x).call(x,"?")>0?x+="&":x+="?",x=x+K+"="+X),G.append(K,X)}),$&&(x+="#"+$);var W=c.default(x,{timeout:B,formData:G,headers:F,withCredentials:!!P,beforeSend:function(K){if(N.before)return N.before(K,g,H)},onTimeout:function(K){b.customAlert(w("\u4E0A\u4F20\u56FE\u7247\u8D85\u65F6"),"error"),N.timeout&&N.timeout(K,g)},onProgress:function(K,X){var te=new d.default(g);X.lengthComputable&&(K=X.loaded/X.total,te.show(K))},onError:function(K){b.customAlert(w("\u4E0A\u4F20\u56FE\u7247\u9519\u8BEF"),"error",w("\u4E0A\u4F20\u56FE\u7247\u9519\u8BEF")+"\uFF0C"+w("\u670D\u52A1\u5668\u8FD4\u56DE\u72B6\u6001")+": "+K.status),N.error&&N.error(K,g)},onFail:function(K,X){b.customAlert(w("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25"),"error",w("\u4E0A\u4F20\u56FE\u7247\u8FD4\u56DE\u7ED3\u679C\u9519\u8BEF")+"\uFF0C"+w("\u8FD4\u56DE\u7ED3\u679C")+": "+X),N.fail&&N.fail(K,g,X)},onSuccess:function(K,X){if(N.customInsert){var te;N.customInsert((0,i.default)(te=v.insertImg).call(te,v),X,g)}else{if(X.errno!="0")return b.customAlert(w("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25"),"error",w("\u4E0A\u4F20\u56FE\u7247\u8FD4\u56DE\u7ED3\u679C\u9519\u8BEF")+"\uFF0C"+w("\u8FD4\u56DE\u7ED3\u679C")+" errno="+X.errno),void(N.fail&&N.fail(K,g,X));var ne=X.data;(0,a.default)(ne).call(ne,function(se){typeof se=="string"?v.insertImg(se):v.insertImg(se.url,se.alt,se.href)}),N.success&&N.success(K,g,X)}}});return void(typeof W=="string"&&b.customAlert(W,"error"))}_&&u.arrForEach(m,function(K){var X=v,te=new FileReader;te.readAsDataURL(K),te.onload=function(){if(this.result){var ne=this.result.toString();X.insertImg(ne,ne)}}})}}},p}();t.default=f},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(410)),a=r(n(4)),l=r(n(45));function s(p){return!!p.length&&p.attr("class")==="w-e-todo"}function u(p){var m=p.selection.getSelectionRangeTopNodes();if(m.length!==0)return(0,i.default)(m).call(m,function(v){return s(v)})}function c(p,m,v){var g;if(p.hasChildNodes()){var b=p.cloneNode(),y=!1;m.nodeValue===""&&(y=!0);var w=[];return(0,a.default)(g=p.childNodes).call(g,function(x){if(!d(x,m)&&y&&(b.appendChild(x.cloneNode(!0)),x.nodeName!=="BR"&&w.push(x)),d(x,m)){if(x.nodeType===1){var _=c(x,m,v);_&&_.textContent!==""&&(b==null||b.appendChild(_))}if(x.nodeType===3&&m.isEqualNode(x)){var E=f(x,v);b.textContent=E}y=!0}}),(0,a.default)(w).call(w,function(x){x.remove()}),b}}function d(p,m){return p.nodeType===3?p.nodeValue===m.nodeValue:p.contains(m)}function f(p,m,v){v===void 0&&(v=!0);var g=p.nodeValue,b=g==null?void 0:(0,l.default)(g).call(g,0,m);if(g=g==null?void 0:(0,l.default)(g).call(g,m),!v){var y=g;g=b,b=y}return p.nodeValue=b,g}(0,o.default)(t,"__esModule",{value:!0}),t.dealTextNode=t.isAllTodo=t.isTodo=t.getCursorNextNode=void 0,t.isTodo=s,t.isAllTodo=u,t.getCursorNextNode=c,t.dealTextNode=f},function(e,t,n){var r=n(0)(n(1));(0,r.default)(t,"__esModule",{value:!0});var o=n(430),i=function(){function a(l){this.maxSize=l,this.isRe=!1,this.data=new o.CeilStack(l),this.revokeData=new o.CeilStack(l)}return(0,r.default)(a.prototype,"size",{get:function(){return[this.data.size,this.revokeData.size]},enumerable:!1,configurable:!0}),a.prototype.resetMaxSize=function(l){this.data.resetMax(l),this.revokeData.resetMax(l)},a.prototype.save=function(l){return this.isRe&&(this.revokeData.clear(),this.isRe=!1),this.data.instack(l),this},a.prototype.revoke=function(l){!this.isRe&&(this.isRe=!0);var s=this.data.outstack();return!!s&&(this.revokeData.instack(s),l(s),!0)},a.prototype.restore=function(l){!this.isRe&&(this.isRe=!0);var s=this.revokeData.outstack();return!!s&&(this.data.instack(s),l(s),!0)},a}();t.default=i},function(e,t,n){var r=n(14),o=n(11),i=n(73);e.exports=!r&&!o(function(){return Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a!=7})},function(e,t,n){var r=n(11),o=/#|\.prototype\./,i=function(c,d){var f=l[a(c)];return f==u||f!=s&&(typeof d=="function"?r(d):!!d)},a=i.normalize=function(c){return String(c).replace(o,".").toLowerCase()},l=i.data={},s=i.NATIVE="N",u=i.POLYFILL="P";e.exports=i},function(e,t,n){var r=n(102),o=Function.toString;typeof r.inspectSource!="function"&&(r.inspectSource=function(i){return o.call(i)}),e.exports=r.inspectSource},function(e,t,n){var r=n(8),o=n(166),i="__core-js_shared__",a=r[i]||o(i,{});e.exports=a},function(e,t,n){var r,o,i,a=n(104),l=n(19),s=n(16),u=n(10),c=n(42),d=u("iterator"),f=!1,p=function(){return this};[].keys&&("next"in(i=[].keys())?(o=a(a(i)))!==Object.prototype&&(r=o):f=!0),r==null&&(r={}),!c&&!s(r,d)&&l(r,d,p),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:f}},function(e,t,n){var r=n(16),o=n(29),i=n(63),a=n(168),l=i("IE_PROTO"),s=Object.prototype;e.exports=a?Object.getPrototypeOf:function(u){return u=o(u),r(u,l)?u[l]:typeof u.constructor=="function"&&u instanceof u.constructor?u.constructor.prototype:u instanceof Object?s:null}},function(e,t,n){var r=n(76);e.exports=r&&!Symbol.sham&&Qi(Symbol.iterator)=="symbol"},function(e,t,n){var r=n(16),o=n(28),i=n(78).indexOf,a=n(51);e.exports=function(l,s){var u,c=o(l),d=0,f=[];for(u in c)!r(a,u)&&r(c,u)&&f.push(u);for(;s.length>d;)r(c,u=s[d++])&&(~i(f,u)||f.push(u));return f}},function(e,t,n){var r=n(35);e.exports=r("document","documentElement")},function(e,t,n){var r=n(8);e.exports=r.Promise},function(e,t,n){var r=n(53);e.exports=function(o,i,a){for(var l in i)a&&a.unsafe&&o[l]?o[l]=i[l]:r(o,l,i[l],a);return o}},function(e,t,n){var r=n(35),o=n(18),i=n(10),a=n(14),l=i("species");e.exports=function(s){var u=r(s),c=o.f;a&&u&&!u[l]&&c(u,l,{configurable:!0,get:function(){return this}})}},function(e,t,n){var r=n(10),o=n(43),i=r("iterator"),a=Array.prototype;e.exports=function(l){return l!==void 0&&(o.Array===l||a[i]===l)}},function(e,t,n){var r=n(65),o=n(43),i=n(10)("iterator");e.exports=function(a){if(a!=null)return a[i]||a["@@iterator"]||o[r(a)]}},function(e,t,n){var r=n(25);e.exports=function(o,i,a,l){try{return l?i(r(a)[0],a[1]):i(a)}catch(u){var s=o.return;throw s!==void 0&&r(s.call(o)),u}}},function(e,t,n){var r=n(10)("iterator"),o=!1;try{var i=0,a={next:function(){return{done:!!i++}},return:function(){o=!0}};a[r]=function(){return this},Array.from(a,function(){throw 2})}catch{}e.exports=function(l,s){if(!s&&!o)return!1;var u=!1;try{var c={};c[r]=function(){return{next:function(){return{done:u=!0}}}},l(c)}catch{}return u}},function(e,t,n){var r=n(25),o=n(40),i=n(10)("species");e.exports=function(a,l){var s,u=r(a).constructor;return u===void 0||(s=r(u)[i])==null?l:o(s)}},function(e,t,n){var r,o,i,a=n(8),l=n(11),s=n(33),u=n(39),c=n(107),d=n(73),f=n(117),p=a.location,m=a.setImmediate,v=a.clearImmediate,g=a.process,b=a.MessageChannel,y=a.Dispatch,w=0,x={},_="onreadystatechange",E=function(I){if(x.hasOwnProperty(I)){var O=x[I];delete x[I],O()}},C=function(I){return function(){E(I)}},T=function(I){E(I.data)},k=function(I){a.postMessage(I+"",p.protocol+"//"+p.host)};(!m||!v)&&(m=function(I){for(var O=[],F=1;arguments.length>F;)O.push(arguments[F++]);return x[++w]=function(){(typeof I=="function"?I:Function(I)).apply(void 0,O)},r(w),w},v=function(I){delete x[I]},s(g)=="process"?r=function(I){g.nextTick(C(I))}:y&&y.now?r=function(I){y.now(C(I))}:b&&!f?(i=(o=new b).port2,o.port1.onmessage=T,r=u(i.postMessage,i,1)):!a.addEventListener||typeof postMessage!="function"||a.importScripts||l(k)||p.protocol==="file:"?r=_ in d("script")?function(I){c.appendChild(d("script"))[_]=function(){c.removeChild(this),E(I)}}:function(I){setTimeout(C(I),0)}:(r=k,a.addEventListener("message",T,!1))),e.exports={set:m,clear:v}},function(e,t,n){var r=n(84);e.exports=/(iphone|ipod|ipad).*applewebkit/i.test(r)},function(e,t,n){var r=n(25),o=n(13),i=n(85);e.exports=function(a,l){if(r(a),o(l)&&l.constructor===a)return l;var s=i.f(a);return(0,s.resolve)(l),s.promise}},function(e,t){e.exports=function(n){try{return{error:!1,value:n()}}catch(r){return{error:!0,value:r}}}},function(e,t,n){e.exports=n(197)},function(e,t,n){var r=n(5),o=n(8),i=n(122),a=n(11),l=n(19),s=n(66),u=n(83),c=n(13),d=n(36),f=n(18).f,p=n(30).forEach,m=n(14),v=n(41),g=v.set,b=v.getterFor;e.exports=function(y,w,x){var _,E=y.indexOf("Map")!==-1,C=y.indexOf("Weak")!==-1,T=E?"set":"add",k=o[y],I=k&&k.prototype,O={};if(m&&typeof k=="function"&&(C||I.forEach&&!a(function(){new k().entries().next()}))){_=w(function(N,B){g(u(N,_,y),{type:y,collection:new k}),B!=null&&s(B,N[T],N,E)});var F=b(y);p(["add","clear","delete","forEach","get","has","set","keys","values","entries"],function(N){var B=N=="add"||N=="set";N in I&&(!C||N!="clear")&&l(_.prototype,N,function(P,V){var L=F(this).collection;if(!B&&C&&!c(P))return N=="get"&&void 0;var H=L[N](P===0?0:P,V);return B?this:H})}),C||f(_.prototype,"size",{configurable:!0,get:function(){return F(this).collection.size}})}else _=x.getConstructor(w,y,E,T),i.REQUIRED=!0;return d(_,y,!1,!0),O[y]=_,r({global:!0,forced:!0},O),C||x.setStrong(_,y,E),_}},function(e,t,n){var r=n(51),o=n(13),i=n(16),a=n(18).f,l=n(64),s=n(200),u=l("meta"),c=0,d=Object.isExtensible||function(){return!0},f=function(b){a(b,u,{value:{objectID:"O"+ ++c,weakData:{}}})},p=function(b,y){if(!o(b))return Qi(b)=="symbol"?b:(typeof b=="string"?"S":"P")+b;if(!i(b,u)){if(!d(b))return"F";if(!y)return"E";f(b)}return b[u].objectID},m=function(b,y){if(!i(b,u)){if(!d(b))return!0;if(!y)return!1;f(b)}return b[u].weakData},v=function(b){return s&&g.REQUIRED&&d(b)&&!i(b,u)&&f(b),b},g=e.exports={REQUIRED:!1,fastKey:p,getWeakData:m,onFreeze:v};r[u]=!0},function(e,t,n){var r=n(18).f,o=n(77),i=n(109),a=n(39),l=n(83),s=n(66),u=n(75),c=n(110),d=n(14),f=n(122).fastKey,p=n(41),m=p.set,v=p.getterFor;e.exports={getConstructor:function(g,b,y,w){var x=g(function(T,k){l(T,x,b),m(T,{type:b,index:o(null),first:void 0,last:void 0,size:0}),d||(T.size=0),k!=null&&s(k,T[w],T,y)}),_=v(b),E=function(T,k,I){var O,F,N=_(T),B=C(T,k);return B?B.value=I:(N.last=B={index:F=f(k,!0),key:k,value:I,previous:O=N.last,next:void 0,removed:!1},N.first||(N.first=B),O&&(O.next=B),d?N.size++:T.size++,F!=="F"&&(N.index[F]=B)),T},C=function(T,k){var I,O=_(T),F=f(k);if(F!=="F")return O.index[F];for(I=O.first;I;I=I.next)if(I.key==k)return I};return i(x.prototype,{clear:function(){for(var T=this,k=_(T),I=k.index,O=k.first;O;)O.removed=!0,O.previous&&(O.previous=O.previous.next=void 0),delete I[O.index],O=O.next;k.first=k.last=void 0,d?k.size=0:T.size=0},delete:function(T){var k=this,I=_(k),O=C(k,T);if(O){var F=O.next,N=O.previous;delete I.index[O.index],O.removed=!0,N&&(N.next=F),F&&(F.previous=N),I.first==O&&(I.first=F),I.last==O&&(I.last=N),d?I.size--:k.size--}return!!O},forEach:function(T){for(var k,I=_(this),O=a(T,arguments.length>1?arguments[1]:void 0,3);k=k?k.next:I.first;)for(O(k.value,k.key,this);k&&k.removed;)k=k.previous},has:function(T){return!!C(this,T)}}),i(x.prototype,y?{get:function(T){var k=C(this,T);return k&&k.value},set:function(T,k){return E(this,T===0?0:T,k)}}:{add:function(T){return E(this,T=T===0?0:T,T)}}),d&&r(x.prototype,"size",{get:function(){return _(this).size}}),x},setStrong:function(g,b,y){var w=b+" Iterator",x=v(b),_=v(w);u(g,b,function(E,C){m(this,{type:w,target:E,state:x(E),kind:C,last:void 0})},function(){for(var E=_(this),C=E.kind,T=E.last;T&&T.removed;)T=T.previous;return E.target&&(E.last=T=T?T.next:E.state.first)?C=="keys"?{value:T.key,done:!1}:C=="values"?{value:T.value,done:!1}:{value:[T.key,T.value],done:!1}:(E.target=void 0,{value:void 0,done:!0})},y?"entries":"values",!y,!0),c(b)}}},function(e,t,n){n(12)("iterator")},function(e,t,n){var r=n(106),o=n(80).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(i){return r(i,o)}},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t,n){e.exports=n(268)},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.default={zIndex:1e4}},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.default={focus:!0,height:300,placeholder:"\u8BF7\u8F93\u5165\u6B63\u6587",zIndexFullScreen:10002,showFullScreen:!0}},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0}),t.getPasteImgs=t.getPasteHtml=t.getPasteText=void 0;var a=n(2),l=n(6),s=a.__importDefault(n(292));function u(f){var p=f.clipboardData,m="";return m=p==null?window.clipboardData&&window.clipboardData.getData("text"):p.getData("text/plain"),l.replaceHtmlSymbol(m)}function c(f,p,m){p===void 0&&(p=!0),m===void 0&&(m=!1);var v=f.clipboardData,g="";if(v&&(g=v.getData("text/html")),!g){var b=u(f);if(!b)return"";g="<p>"+b+"</p>"}return g=g.replace(/<(\d)/gm,function(y,w){return"<"+w}),g=g.replace(/<(\/?meta.*?)>/gim,""),g=s.default(g,p,m)}function d(f){var p,m=[];if(u(f))return m;var v=(p=f.clipboardData)===null||p===void 0?void 0:p.items;return v&&(0,i.default)(l).call(l,v,function(g,b){var y=b.type;/image/i.test(y)&&m.push(b.getAsFile())}),m}t.getPasteText=u,t.getPasteHtml=c,t.getPasteImgs=d},function(e,t,n){e.exports=n(294)},function(e,t,n){e.exports=n(310)},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4)),a=r(n(46));(0,o.default)(t,"__esModule",{value:!0});var l=n(2).__importDefault(n(3)),s=n(7),u=function(){function c(d,f){var p=this;this.hideTimeoutId=0,this.menu=d,this.conf=f;var m=l.default('<div class="w-e-droplist"></div>'),v=l.default("<p>"+f.title+"</p>");v.addClass("w-e-dp-title"),m.append(v);var g=f.list||[],b=f.type||"list",y=f.clickHandler||s.EMPTY_FN,w=l.default('<ul class="'+(b==="list"?"w-e-list":"w-e-block")+'"></ul>');(0,i.default)(g).call(g,function(x){var _=x.$elem,E=x.value,C=l.default('<li class="w-e-item"></li>');_&&(C.append(_),w.append(C),C.on("click",function(T){y(E),T.stopPropagation(),p.hideTimeoutId=(0,a.default)(function(){p.hide()})}))}),m.append(w),m.on("mouseleave",function(){p.hideTimeoutId=(0,a.default)(function(){p.hide()})}),this.$container=m,this.rendered=!1,this._show=!1}return c.prototype.show=function(){this.hideTimeoutId&&clearTimeout(this.hideTimeoutId);var d=this.menu.$elem,f=this.$container;if(!this._show){if(this.rendered)f.show();else{var p=d.getBoundingClientRect().height||0,m=this.conf.width||100;f.css("margin-top",p+"px").css("width",m+"px"),d.append(f),this.rendered=!0}this._show=!0}},c.prototype.hide=function(){var d=this.$container;!this._show||(d.hide(),this._show=!1)},(0,o.default)(c.prototype,"isShow",{get:function(){return this._show},enumerable:!1,configurable:!0}),c}();t.default=u},function(e,t,n){function r(o){var i=o.selection.getSelectionContainerElem();return!(i==null||!i.length)&&i.getNodeName()==="A"}(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.default=r},function(e,t,n){var r=n(0),o=r(n(92)),i=r(n(1)),a=r(n(4));(0,i.default)(t,"__esModule",{value:!0});var l=n(6);function s(u,c){var d=new XMLHttpRequest;if(d.open("POST",u),d.timeout=c.timeout||1e4,d.ontimeout=function(){console.error("wangEditor - \u8BF7\u6C42\u8D85\u65F6"),c.onTimeout&&c.onTimeout(d)},d.upload&&(d.upload.onprogress=function(p){var m=p.loaded/p.total;c.onProgress&&c.onProgress(m,p)}),c.headers&&(0,a.default)(l).call(l,c.headers,function(p,m){d.setRequestHeader(p,m)}),d.withCredentials=!!c.withCredentials,c.beforeSend){var f=c.beforeSend(d);if(f&&(0,o.default)(f)==="object"&&f.prevent)return f.msg}return d.onreadystatechange=function(){if(d.readyState===4){var p=d.status;if(!(p<200||p>=300&&p<400)){if(p>=400)return console.error("wangEditor - XHR \u62A5\u9519\uFF0C\u72B6\u6001\u7801 "+p),void(c.onError&&c.onError(d));var m,v=d.responseText;if((0,o.default)(v)!=="object")try{m=JSON.parse(v)}catch{return console.error("wangEditor - \u8FD4\u56DE\u7ED3\u679C\u4E0D\u662F JSON \u683C\u5F0F",v),void(c.onFail&&c.onFail(d,v))}else m=v;c.onSuccess(d,m)}}},d.send(c.formData||null),d}t.default=s},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(342)),a=r(n(46));(0,o.default)(t,"__esModule",{value:!0});var l=n(2).__importDefault(n(3)),s=function(){function u(c){this.editor=c,this.$textContainer=c.$textContainerElem,this.$bar=l.default('<div class="w-e-progress"></div>'),this.isShow=!1,this.time=0,this.timeoutId=0}return u.prototype.show=function(c){var d=this;if(!this.isShow){this.isShow=!0;var f=this.$bar;this.$textContainer.append(f),(0,i.default)()-this.time>100&&c<=1&&(f.css("width",100*c+"%"),this.time=(0,i.default)());var p=this.timeoutId;p&&clearTimeout(p),this.timeoutId=(0,a.default)(function(){d.hide()},500)}},u.prototype.hide=function(){this.$bar.remove(),this.isShow=!1,this.time=0,this.timeoutId=0},u}();t.default=s},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.ListType=void 0;var r,o=n(2),i=o.__importDefault(n(3)),a=o.__importDefault(n(24)),l=n(47),s=o.__importStar(n(371));(function(c){c.OrderedList="OL",c.UnorderedList="UL"})(r=t.ListType||(t.ListType={}));var u=function(c){function d(f){var p=this,m=i.default(`<div class="w-e-menu" data-title="\u5E8F\u5217">
| <i class="w-e-icon-list2"></i>
| </div>`),v={width:130,title:"\u5E8F\u5217",type:"list",list:[{$elem:i.default(`
| <p>
| <i class="w-e-icon-list2 w-e-drop-list-item"></i>
| `+f.i18next.t("menus.dropListMenu.list.\u65E0\u5E8F\u5217\u8868")+`
| <p>`),value:r.UnorderedList},{$elem:i.default(`<p>
| <i class="w-e-icon-list-numbered w-e-drop-list-item"></i>
| `+f.i18next.t("menus.dropListMenu.list.\u6709\u5E8F\u5217\u8868")+`
| <p>`),value:r.OrderedList}],clickHandler:function(g){p.command(g)}};return p=c.call(this,m,f,v)||this}return o.__extends(d,c),d.prototype.command=function(f){this.editor.selection.getSelectionContainerElem()!==void 0&&(this.handleSelectionRangeNodes(f),this.tryChangeActive())},d.prototype.validator=function(f,p,m){return!(!f.length||!p.length||m.equal(f)||m.equal(p))},d.prototype.handleSelectionRangeNodes=function(f){var p=this.editor,m=p.selection,v=f.toLowerCase(),g=m.getSelectionContainerElem(),b=m.getSelectionStartElem().getNodeTop(p),y=m.getSelectionEndElem().getNodeTop(p);if(this.validator(b,y,p.$textElem)){var w=m.getRange(),x=w==null?void 0:w.collapsed;p.$textElem.equal(g)||(g=g.getNodeTop(p));var _,E={editor:p,listType:f,listTarget:v,$selectionElem:g,$startElem:b,$endElem:y};_=this.isOrderElem(g)?s.ClassType.Wrap:this.isOrderElem(b)&&this.isOrderElem(y)?s.ClassType.Join:this.isOrderElem(b)?s.ClassType.StartJoin:this.isOrderElem(y)?s.ClassType.EndJoin:s.ClassType.Other;var C=new s.default(s.createListHandle(_,E,w));l.updateRange(p,C.getSelectionRangeElem(),!!x)}},d.prototype.isOrderElem=function(f){var p=f.getNodeName();return p===r.OrderedList||p===r.UnorderedList},d.prototype.tryChangeActive=function(){},d}(a.default);t.default=u},function(e,t,n){e.exports=n(395)},function(e,t,n){function r(o){var i=o.selection.getSelectionContainerElem();return!(i==null||!i.length||i.getNodeName()!="CODE"&&i.getNodeName()!="PRE"&&i.parent().getNodeName()!="CODE"&&i.parent().getNodeName()!="PRE"&&!/hljs/.test(i.parent().attr("class")))}(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.default=r},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(31));(0,o.default)(t,"__esModule",{value:!0}),t.todo=void 0;var a=n(2).__importDefault(n(3)),l=function(){function u(c){var d;this.template='<ul class="w-e-todo"><li><span contenteditable="false"><input type="checkbox"></span></li></ul>',this.checked=!1,this.$todo=a.default(this.template),this.$child=(d=c==null?void 0:c.childNodes())===null||d===void 0?void 0:d.clone(!0)}return u.prototype.init=function(){var c=this.$child,d=this.getInputContainer();c&&c.insertAfter(d)},u.prototype.getInput=function(){var c=this.$todo;return(0,i.default)(c).call(c,"input")},u.prototype.getInputContainer=function(){return this.getInput().parent()},u.prototype.getTodo=function(){return this.$todo},u}();function s(u){var c=new l(u);return c.init(),c}t.todo=l,t.default=s},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2);n(146),n(148),n(152),n(154),n(156),n(158),n(160);var o=r.__importDefault(n(87));r.__exportStar(n(442),t),t.default=o.default},function(e,t,n){var r=n(143);e.exports=r},function(e,t,n){n(144);var r=n(9).Object,o=e.exports=function(i,a,l){return r.defineProperty(i,a,l)};r.defineProperty.sham&&(o.sham=!0)},function(e,t,n){var r=n(5),o=n(14);r({target:"Object",stat:!0,forced:!o,sham:!o},{defineProperty:n(18).f})},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch{(typeof window>"u"?"undefined":Qi(window))==="object"&&(n=window)}e.exports=n},function(e,t,n){var r=n(20),o=n(147);typeof(o=o.__esModule?o.default:o)=="string"&&(o=[[e.i,o,""]]);var i={insert:"head",singleton:!1};r(o,i),e.exports=o.locals||{}},function(e,t,n){(t=n(21)(!1)).push([e.i,`.w-e-toolbar,
| .w-e-text-container,
| .w-e-menu-panel {
| padding: 0;
| margin: 0;
| box-sizing: border-box;
| background-color: #fff;
| /*\u8868\u60C5\u83DC\u5355\u6837\u5F0F*/
| /*\u5206\u5272\u7EBF\u6837\u5F0F*/
| }
| .w-e-toolbar h1,
| .w-e-text-container h1,
| .w-e-menu-panel h1 {
| font-size: 32px !important;
| }
| .w-e-toolbar h2,
| .w-e-text-container h2,
| .w-e-menu-panel h2 {
| font-size: 24px !important;
| }
| .w-e-toolbar h3,
| .w-e-text-container h3,
| .w-e-menu-panel h3 {
| font-size: 18.72px !important;
| }
| .w-e-toolbar h4,
| .w-e-text-container h4,
| .w-e-menu-panel h4 {
| font-size: 16px !important;
| }
| .w-e-toolbar h5,
| .w-e-text-container h5,
| .w-e-menu-panel h5 {
| font-size: 13.28px !important;
| }
| .w-e-toolbar p,
| .w-e-text-container p,
| .w-e-menu-panel p {
| font-size: 16px !important;
| }
| .w-e-toolbar .eleImg,
| .w-e-text-container .eleImg,
| .w-e-menu-panel .eleImg {
| cursor: pointer;
| display: inline-block;
| font-size: 18px;
| padding: 0 3px;
| }
| .w-e-toolbar *,
| .w-e-text-container *,
| .w-e-menu-panel * {
| padding: 0;
| margin: 0;
| box-sizing: border-box;
| }
| .w-e-toolbar hr,
| .w-e-text-container hr,
| .w-e-menu-panel hr {
| cursor: pointer;
| display: block;
| height: 0px;
| border: 0;
| border-top: 3px solid #ccc;
| margin: 20px 0;
| }
| .w-e-clear-fix:after {
| content: "";
| display: table;
| clear: both;
| }
| .w-e-drop-list-item {
| position: relative;
| top: 1px;
| padding-right: 7px;
| color: #333 !important;
| }
| .w-e-drop-list-tl {
| padding-left: 10px;
| text-align: left;
| }
| `,""]),e.exports=t},function(e,t,n){var r=n(20),o=n(149);typeof(o=o.__esModule?o.default:o)=="string"&&(o=[[e.i,o,""]]);var i={insert:"head",singleton:!1};r(o,i),e.exports=o.locals||{}},function(e,t,n){var r=n(21),o=n(150),i=n(151);t=r(!1);var a=o(i);t.push([e.i,`@font-face {
| font-family: 'w-e-icon';
| src: url(`+a+`) format('truetype');
| font-weight: normal;
| font-style: normal;
| }
| [class^="w-e-icon-"],
| [class*=" w-e-icon-"] {
| /* use !important to prevent issues with browser extensions that change fonts */
| font-family: 'w-e-icon' !important;
| speak: none;
| font-style: normal;
| font-weight: normal;
| font-variant: normal;
| text-transform: none;
| line-height: 1;
| /* Better Font Rendering =========== */
| -webkit-font-smoothing: antialiased;
| -moz-osx-font-smoothing: grayscale;
| }
| .w-e-icon-close:before {
| content: "\\f00d";
| }
| .w-e-icon-upload2:before {
| content: "\\e9c6";
| }
| .w-e-icon-trash-o:before {
| content: "\\f014";
| }
| .w-e-icon-header:before {
| content: "\\f1dc";
| }
| .w-e-icon-pencil2:before {
| content: "\\e906";
| }
| .w-e-icon-paint-brush:before {
| content: "\\f1fc";
| }
| .w-e-icon-image:before {
| content: "\\e90d";
| }
| .w-e-icon-play:before {
| content: "\\e912";
| }
| .w-e-icon-location:before {
| content: "\\e947";
| }
| .w-e-icon-undo:before {
| content: "\\e965";
| }
| .w-e-icon-redo:before {
| content: "\\e966";
| }
| .w-e-icon-quotes-left:before {
| content: "\\e977";
| }
| .w-e-icon-list-numbered:before {
| content: "\\e9b9";
| }
| .w-e-icon-list2:before {
| content: "\\e9bb";
| }
| .w-e-icon-link:before {
| content: "\\e9cb";
| }
| .w-e-icon-happy:before {
| content: "\\e9df";
| }
| .w-e-icon-bold:before {
| content: "\\ea62";
| }
| .w-e-icon-underline:before {
| content: "\\ea63";
| }
| .w-e-icon-italic:before {
| content: "\\ea64";
| }
| .w-e-icon-strikethrough:before {
| content: "\\ea65";
| }
| .w-e-icon-table2:before {
| content: "\\ea71";
| }
| .w-e-icon-paragraph-left:before {
| content: "\\ea77";
| }
| .w-e-icon-paragraph-center:before {
| content: "\\ea78";
| }
| .w-e-icon-paragraph-right:before {
| content: "\\ea79";
| }
| .w-e-icon-paragraph-justify:before {
| content: "\\ea7a";
| }
| .w-e-icon-terminal:before {
| content: "\\f120";
| }
| .w-e-icon-page-break:before {
| content: "\\ea68";
| }
| .w-e-icon-cancel-circle:before {
| content: "\\ea0d";
| }
| .w-e-icon-font:before {
| content: "\\ea5c";
| }
| .w-e-icon-text-heigh:before {
| content: "\\ea5f";
| }
| .w-e-icon-paint-format:before {
| content: "\\e90c";
| }
| .w-e-icon-indent-increase:before {
| content: "\\ea7b";
| }
| .w-e-icon-indent-decrease:before {
| content: "\\ea7c";
| }
| .w-e-icon-row-height:before {
| content: "\\e9be";
| }
| .w-e-icon-fullscreen_exit:before {
| content: "\\e900";
| }
| .w-e-icon-fullscreen:before {
| content: "\\e901";
| }
| .w-e-icon-split-line:before {
| content: "\\ea0b";
| }
| .w-e-icon-checkbox-checked:before {
| content: "\\ea52";
| }
| `,""]),e.exports=t},function(e,t,n){e.exports=function(r,o){return o||(o={}),typeof(r=r&&r.__esModule?r.default:r)!="string"?r:(/^['"].*['"]$/.test(r)&&(r=r.slice(1,-1)),o.hash&&(r+=o.hash),/["'() \t\n]/.test(r)||o.needQuotes?'"'.concat(r.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):r)}},function(e,t,n){n.r(t),t.default="data:font/woff;base64,d09GRgABAAAAABskAAsAAAAAGtgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIPFWNtYXAAAAFoAAABHAAAARz2mfAgZ2FzcAAAAoQAAAAIAAAACAAAABBnbHlmAAACjAAAFXwAABV8IH7+mGhlYWQAABgIAAAANgAAADYb6gumaGhlYQAAGEAAAAAkAAAAJAkjBWlobXR4AAAYZAAAAKQAAACkmYcEbmxvY2EAABkIAAAAVAAAAFReAmKYbWF4cAAAGVwAAAAgAAAAIAA0ALZuYW1lAAAZfAAAAYYAAAGGmUoJ+3Bvc3QAABsEAAAAIAAAACAAAwAAAAMD7wGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8fwDwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEAQAAAAA8ACAABAAcAAEAIOkB6QbpDekS6UfpZul36bnpu+m+6cbpy+nf6gvqDepS6lzqX+pl6nHqfPAN8BTxIPHc8fz//f//AAAAAAAg6QDpBukM6RLpR+ll6Xfpuem76b7pxunL6d/qC+oN6lLqXOpf6mLqcep38A3wFPEg8dzx/P/9//8AAf/jFwQXABb7FvcWwxamFpYWVRZUFlIWSxZHFjQWCRYIFcQVuxW5FbcVrBWnEBcQEQ8GDksOLAADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAAEAEEAAQO/A38ABQALABEAFwAAATMVIREzAxEhFSMVATUzESE1ETUhESM1Av/A/sJ+fgE+wP4Cfv7CAT5+Ar9+AT78ggE+fsACvsD+wn7+An7+wsAAAAAABABBAAEDvwN/AAUACwARABcAAAEhESM1IxM1MxEhNQERIRUjFREVMxUhEQKBAT5+wMB+/sL9wAE+wMD+wgN//sLA/X7A/sJ+AcIBPn7A/v7AfgE+AAAAAAIAAP/ABAADwAAEABMAAAE3AScBAy4BJxM3ASMBAyUBNQEHAYCAAcBA/kCfFzsyY4ABgMD+gMACgAGA/oBOAUBAAcBA/kD+nTI7FwERTgGA/oD9gMABgMD+gIAAAgAA/8AEAAOAACkALQAAAREjNTQmIyEiBh0BFBYzITI2PQEzESEVIyIGFREUFjsBMjY1ETQmKwE1ASE1IQQAwCYa/UAaJiYaAsAaJoD9wCANExMNgA0TEw0gAUD9QALAAYABgEAaJiYawBomJhpA/wCAEw3+wA0TEw0BQA0TQAGAQAAABAAAAAAEAAOAABAAIQAtADQAAAE4ATEROAExITgBMRE4ATEhNSEiBhURFBYzITI2NRE0JiMHFAYjIiY1NDYzMhYTITUTATM3A8D8gAOA/IAaJiYaA4AaJiYagDgoKDg4KCg4QP0A4AEAQOADQP0AAwBAJhr9ABomJhoDABom4Cg4OCgoODj9uIABgP7AwAAAAgAAAEAEAANAADgAPAAAASYnLgEnJiMiBw4BBwYHBgcOAQcGFRQXHgEXFhcWFx4BFxYzMjc+ATc2NzY3PgE3NjU0Jy4BJyYnARENAQPVNjg5djw9Pz89PHY5ODYLBwgLAwMDAwsIBws2ODl2PD0/Pz08djk4NgsHCAsDAwMDCwgHC/2rAUD+wAMgCAYGCAICAgIIBgYIKSoqWS0uLy8uLVkqKikIBgYIAgICAggGBggpKipZLS4vLy4tWSoqKf3gAYDAwAAAAAACAMD/wANAA8AAGwAnAAABIgcOAQcGFRQXHgEXFjEwNz4BNzY1NCcuAScmAyImNTQ2MzIWFRQGAgBCOzpXGRkyMngyMjIyeDIyGRlXOjtCUHBwUFBwcAPAGRlXOjtCeH19zEFBQUHMfX14Qjs6VxkZ/gBwUFBwcFBQcAAAAQAAAAAEAAOAACsAAAEiBw4BBwYHJxEhJz4BMzIXHgEXFhUUBw4BBwYHFzY3PgE3NjU0Jy4BJyYjAgA1MjJcKSkjlgGAkDWLUFBFRmkeHgkJIhgYHlUoICAtDAwoKIteXWoDgAoLJxscI5b+gJA0PB4eaUZFUCsoKUkgIRpgIysrYjY2OWpdXosoKAABAAAAAAQAA4AAKgAAExQXHgEXFhc3JicuAScmNTQ3PgE3NjMyFhcHIREHJicuAScmIyIHDgEHBgAMDC0gIChVHhgYIgkJHh5pRkVQUIs1kAGAliMpKVwyMjVqXV6LKCgBgDk2NmIrKyNgGiEgSSkoK1BFRmkeHjw0kAGAliMcGycLCigoi15dAAAAAAIAAABABAEDAAAmAE0AABMyFx4BFxYVFAcOAQcGIyInLgEnJjUnNDc+ATc2MxUiBgcOAQc+ASEyFx4BFxYVFAcOAQcGIyInLgEnJjUnNDc+ATc2MxUiBgcOAQc+AeEuKSk9ERISET0pKS4uKSk9ERIBIyN6UlFdQHUtCRAHCBICSS4pKT0REhIRPSkpLi4pKT0REgEjI3pSUV1AdS0JEAcIEgIAEhE9KSkuLikpPRESEhE9KSkuIF1RUnojI4AwLggTCgIBEhE9KSkuLikpPRESEhE9KSkuIF1RUnojI4AwLggTCgIBAAAGAED/wAQAA8AAAwAHAAsAEQAdACkAACUhFSERIRUhESEVIScRIzUjNRMVMxUjNTc1IzUzFRURIzUzNSM1MzUjNQGAAoD9gAKA/YACgP2AwEBAQIDAgIDAwICAgICAgAIAgAIAgMD/AMBA/fIyQJI8MkCS7v7AQEBAQEAABgAA/8AEAAPAAAMABwALABcAIwAvAAABIRUhESEVIREhFSEBNDYzMhYVFAYjIiYRNDYzMhYVFAYjIiYRNDYzMhYVFAYjIiYBgAKA/YACgP2AAoD9gP6ASzU1S0s1NUtLNTVLSzU1S0s1NUtLNTVLA4CA/wCA/wCAA0A1S0s1NUtL/rU1S0s1NUtL/rU1S0s1NUtLAAUAAABABWADAAADAAcACwAOABEAABMhFSEVIRUhFSEVIQEXNzUnBwADgPyAA4D8gAOA/IAD4MDAwMADAMBAwEDAAUDAwEDAwAAAAAADAAAAAAQAA6AAAwANABQAADchFSElFSE1EyEVITUhJQkBIxEjEQAEAPwABAD8AIABAAEAAQD9YAEgASDggEBAwEBAAQCAgMABIP7g/wABAAAAAAACAB7/zAPiA7QAMwBkAAABIiYnJicmNDc2PwE+ATMyFhcWFxYUBwYPAQYiJyY0PwE2NCcuASMiBg8BBhQXFhQHDgEjAyImJyYnJjQ3Nj8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFxYUBwYPAQ4BIwG4ChMIIxISEhIjwCNZMTFZIyMSEhISI1gPLA8PD1gpKRQzHBwzFMApKQ8PCBMKuDFZIyMSEhISI1gPLA8PD1gpKRQzHBwzFMApKQ8PDysQIxISEhIjwCNZMQFECAckLS1eLS0kwCIlJSIkLS1eLS0kVxAQDysPWCl0KRQVFRTAKXQpDysQBwj+iCUiJC0tXi0tJFcQEA8rD1gpdCkUFRUUwCl0KQ8rEA8PJC0tXi0tJMAiJQAAAAAFAAD/wAQAA8AAGwA3AFMAXwBrAAAFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWEzIXHgEXFhUUBw4BBwYjIicuAScmNTQ3PgE3NhMyNz4BNzY3BgcOAQcGIyInLgEnJicWFx4BFxYnNDYzMhYVFAYjIiYlNDYzMhYVFAYjIiYCAGpdXosoKCgoi15dampdXosoKCgoi15dalZMTHEgISEgcUxMVlZMTHEgISEgcUxMVisrKlEmJiMFHBtWODc/Pzc4VhscBSMmJlEqK9UlGxslJRsbJQGAJRsbJSUbGyVAKCiLXl1qal1eiygoKCiLXl1qal1eiygoA6AhIHFMTFZWTExxICEhIHFMTFZWTExxICH+CQYGFRAQFEM6OlYYGRkYVjo6QxQQEBUGBvcoODgoKDg4KCg4OCgoODgAAAEAAAFABAACQAAPAAATFRQWMyEyNj0BNCYjISIGABMNA8ANExMN/EANEwIgwA0TEw3ADRMTAAAAAwAA/8AEAAPAABsANwBDAAABIgcOAQcGFRQXHgEXFjMyNz4BNzY1NCcuAScmAyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBhMHJwcXBxc3FzcnNwIAal1eiygoKCiLXl1qal1eiygoKCiLXl1qVkxMcSAhISBxTExWVkxMcSAhISBxTExKoKBgoKBgoKBgoKADwCgoi15dampdXosoKCgoi15dampdXosoKPxgISBxTExWVkxMcSAhISBxTExWVkxMcSAhAqCgoGCgoGCgoGCgoAACAAD/wAQAA8AADwAVAAABISIGFREUFjMhMjY1ETQmASc3FwEXA4D9ADVLSzUDADVLS/4L7VqTATNaA8BLNf0ANUtLNQMANUv85e5akgEyWgAAAAABAGX/wAObA8AAKQAAASImIyIHDgEHBhUUFjMuATU0NjcwBwYCBwYHFSETMzcjNx4BMzI2Nw4BAyBEaEZxU1RtGhtJSAYNZUoQEEs8PFkBPWzGLNc0LVUmLlAYHT0DsBAeHWE+P0FNOwsmN5lvA31+/sWPkCMZAgCA9gkPN2sJBwAAAAACAAAAAAQAA4AACQAXAAAlMwcnMxEjNxcjJREnIxEzFSE1MxEjBxEDgICgoICAoKCA/wBAwID+gIDAQMDAwAIAwMDA/wCA/UBAQALAgAEAAAMAwAAAA0ADgAAWAB8AKAAAAT4BNTQnLgEnJiMhESEyNz4BNzY1NCYBMzIWFRQGKwETIxEzMhYVFAYCxBwgFBRGLi81/sABgDUvLkYUFET+hGUqPDwpZp+fnyw+PgHbIlQvNS8uRhQU/IAUFEYuLzVGdAFGSzU1S/6AAQBLNTVLAAAAAAIAwAAAA0ADgAAfACMAAAEzERQHDgEHBiMiJy4BJyY1ETMRFBYXHgEzMjY3PgE1ASEVIQLAgBkZVzo7QkI7OlcZGYAbGBxJKChJHBgb/gACgP2AA4D+YDw0NU4WFxcWTjU0PAGg/mAeOBcYGxsYFzge/qCAAAAAAAEAgAAAA4ADgAALAAABFSMBMxUhNTMBIzUDgID+wID+QIABQIADgED9AEBAAwBAAAEAAAAABAADgAA9AAABFSMeARUUBgcOASMiJicuATUzFBYzMjY1NCYjITUhLgEnLgE1NDY3PgEzMhYXHgEVIzQmIyIGFRQWMzIWFwQA6xUWNTAscT4+cSwwNYByTk5yck7+AAEsAgQBMDU1MCxxPj5xLDA1gHJOTnJyTjtuKwHAQB1BIjViJCEkJCEkYjU0TEw0NExAAQMBJGI1NWIkISQkISRiNTRMTDQ0TCEfAAAACgAAAAAEAAOAAAMABwALAA8AEwAXABsAHwAjACcAABMRIREBNSEVHQEhNQEVITUjFSE1ESEVISUhFSERNSEVASEVISE1IRUABAD9gAEA/wABAP8AQP8AAQD/AAKAAQD/AAEA/IABAP8AAoABAAOA/IADgP3AwMBAwMACAMDAwMD/AMDAwAEAwMD+wMDAwAAABQAAAAAEAAOAAAMABwALAA8AEwAAEyEVIRUhFSERIRUhESEVIREhFSEABAD8AAKA/YACgP2ABAD8AAQA/AADgIBAgP8AgAFAgP8AgAAAAAAFAAAAAAQAA4AAAwAHAAsADwATAAATIRUhFyEVIREhFSEDIRUhESEVIQAEAPwAwAKA/YACgP2AwAQA/AAEAPwAA4CAQID/AIABQID/AIAAAAUAAAAABAADgAADAAcACwAPABMAABMhFSEFIRUhESEVIQEhFSERIRUhAAQA/AABgAKA/YACgP2A/oAEAPwABAD8AAOAgECA/wCAAUCA/wCAAAAAAAUAAAAABAADgAADAAcACwAPABMAABMhFSEVIRUhFSEVIRUhFSEVIRUhAAQA/AAEAPwABAD8AAQA/AAEAPwAA4CAQIBAgECAQIAAAAAGAAAAAAQAA4AAAwAHAAsADwATABYAABMhFSEFIRUhFSEVIRUhFSEFIRUhGQEFAAQA/AABgAKA/YACgP2AAoD9gP6ABAD8AAEAA4CAQIBAgECAQIABAAGAwAAAAAYAAAAABAADgAADAAcACwAPABMAFgAAEyEVIQUhFSEVIRUhFSEVIQUhFSEBESUABAD8AAGAAoD9gAKA/YACgP2A/oAEAPwAAQD/AAOAgECAQIBAgECAAoD+gMAAAQA/AD8C5gLmACwAACUUDwEGIyIvAQcGIyIvASY1ND8BJyY1ND8BNjMyHwE3NjMyHwEWFRQPARcWFQLmEE4QFxcQqKgQFxYQThAQqKgQEE4QFhcQqKgQFxcQThAQqKgQwxYQThAQqKgQEE4QFhcQqKgQFxcQThAQqKgQEE4QFxcQqKgQFwAAAAYAAAAAAyUDbgAUACgAPABNAFUAggAAAREUBwYrASInJjURNDc2OwEyFxYVMxEUBwYrASInJjURNDc2OwEyFxYXERQHBisBIicmNRE0NzY7ATIXFhMRIREUFxYXFjMhMjc2NzY1ASEnJicjBgcFFRQHBisBERQHBiMhIicmNREjIicmPQE0NzY7ATc2NzY7ATIXFh8BMzIXFhUBJQYFCCQIBQYGBQgkCAUGkgUFCCUIBQUFBQglCAUFkgUFCCUIBQUFBQglCAUFSf4ABAQFBAIB2wIEBAQE/oABABsEBrUGBAH3BgUINxobJv4lJhsbNwgFBQUFCLEoCBcWF7cXFhYJKLAIBQYCEv63CAUFBQUIAUkIBQYGBQj+twgFBQUFCAFJCAUGBgUI/rcIBQUFBQgBSQgFBgYF/lsCHf3jDQsKBQUFBQoLDQJmQwUCAgVVJAgGBf3jMCIjISIvAiAFBggkCAUFYBUPDw8PFWAFBQgAAgAHAEkDtwKvABoALgAACQEGIyIvASY1ND8BJyY1ND8BNjMyFwEWFRQHARUUBwYjISInJj0BNDc2MyEyFxYBTv72BgcIBR0GBuHhBgYdBQgHBgEKBgYCaQUFCP3bCAUFBQUIAiUIBQUBhf72BgYcBggHBuDhBgcHBh0FBf71BQgHBv77JQgFBQUFCCUIBQUFBQAAAAEAIwAAA90DbgCzAAAlIicmIyIHBiMiJyY1NDc2NzY3Njc2PQE0JyYjISIHBh0BFBcWFxYzFhcWFRQHBiMiJyYjIgcGIyInJjU0NzY3Njc2NzY9ARE0NTQ1NCc0JyYnJicmJyYnJiMiJyY1NDc2MzIXFjMyNzYzMhcWFRQHBiMGBwYHBh0BFBcWMyEyNzY9ATQnJicmJyY1NDc2MzIXFjMyNzYzMhcWFRQHBgciBwYHBhURFBcWFxYXMhcWFRQHBiMDwRkzMhoZMjMZDQgHCQoNDBEQChIBBxX+fhYHARUJEhMODgwLBwcOGzU1GhgxMRgNBwcJCQsMEA8JEgECAQIDBAQFCBIRDQ0KCwcHDho1NRoYMDEYDgcHCQoMDRAQCBQBBw8BkA4HARQKFxcPDgcHDhkzMhkZMTEZDgcHCgoNDRARCBQUCRERDg0KCwcHDgACAgICDAsPEQkJAQEDAwUMROAMBQMDBQzUUQ0GAQIBCAgSDwwNAgICAgwMDhEICQECAwMFDUUhAdACDQ0ICA4OCgoLCwcHAwYBAQgIEg8MDQICAgINDA8RCAgBAgEGDFC2DAcBAQcMtlAMBgEBBgcWDwwNAgICAg0MDxEICAEBAgYNT/3mRAwGAgIBCQgRDwwNAAACAAD/twP/A7cAEwA5AAABMhcWFRQHAgcGIyInJjU0NwE2MwEWFxYfARYHBiMiJyYnJicmNRYXFhcWFxYzMjc2NzY3Njc2NzY3A5soHh4avkw3RUg0NDUBbSEp/fgXJicvAQJMTHtHNjYhIRARBBMUEBASEQkXCA8SExUVHR0eHikDtxsaKCQz/plGNDU0SUkwAUsf/bErHx8NKHpNTBobLi86OkQDDw4LCwoKFiUbGhERCgsEBAIAAQAAAAAAAIWwaoFfDzz1AAsEAAAAAADbteOZAAAAANu145kAAP+3BWADwAAAAAgAAgAAAAAAAAABAAADwP/AAAAFgAAA//8FYAABAAAAAAAAAAAAAAAAAAAAKQQAAAAAAAAAAAAAAAIAAAAEAABBBAAAQQQAAAAEAAAABAAAAAQAAAAEAADABAAAAAQAAAAEAAAABAAAQAQAAAAFgAAABAAAAAQAAB4EAAAABAAAAAQAAAAEAAAABAAAZQQAAAAEAADABAAAwAQAAIAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAMlAD8DJQAAA74ABwQAACMD/wAAAAAAAAAKABQAHgBKAHYApADmAS4BkgHQAhYCXALQAw4DWAN+A6gEPgTeBPoFZAWOBdAF+AY6BnYGjgbmBy4HVgd+B6gHzgf8CCoIbgkmCXAKYgq+AAEAAAApALQACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAHAAAAAQAAAAAAAgAHAGAAAQAAAAAAAwAHADYAAQAAAAAABAAHAHUAAQAAAAAABQALABUAAQAAAAAABgAHAEsAAQAAAAAACgAaAIoAAwABBAkAAQAOAAcAAwABBAkAAgAOAGcAAwABBAkAAwAOAD0AAwABBAkABAAOAHwAAwABBAkABQAWACAAAwABBAkABgAOAFIAAwABBAkACgA0AKRpY29tb29uAGkAYwBvAG0AbwBvAG5WZXJzaW9uIDEuMABWAGUAcgBzAGkAbwBuACAAMQAuADBpY29tb29uAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG5SZWd1bGFyAFIAZQBnAHUAbABhAHJpY29tb29uAGkAYwBvAG0AbwBvAG5Gb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"},function(e,t,n){var r=n(20),o=n(153);typeof(o=o.__esModule?o.default:o)=="string"&&(o=[[e.i,o,""]]);var i={insert:"head",singleton:!1};r(o,i),e.exports=o.locals||{}},function(e,t,n){(t=n(21)(!1)).push([e.i,`.w-e-toolbar {
| display: flex;
| padding: 0 6px;
| flex-wrap: wrap;
| position: relative;
| /* \u5355\u4E2A\u83DC\u5355 */
| }
| .w-e-toolbar .w-e-menu {
| position: relative;
| display: flex;
| width: 40px;
| height: 40px;
| align-items: center;
| justify-content: center;
| text-align: center;
| cursor: pointer;
| }
| .w-e-toolbar .w-e-menu i {
| color: #999;
| }
| .w-e-toolbar .w-e-menu:hover {
| background-color: #F6F6F6;
| }
| .w-e-toolbar .w-e-menu:hover i {
| color: #333;
| }
| .w-e-toolbar .w-e-active i {
| color: #1e88e5;
| }
| .w-e-toolbar .w-e-active:hover i {
| color: #1e88e5;
| }
| .w-e-menu-tooltip {
| position: absolute;
| display: flex;
| color: #f1f1f1;
| background-color: rgba(0, 0, 0, 0.75);
| box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.15);
| border-radius: 4px;
| padding: 4px 5px 6px;
| justify-content: center;
| align-items: center;
| }
| .w-e-menu-tooltip-up::after {
| content: "";
| position: absolute;
| top: 100%;
| left: 50%;
| margin-left: -5px;
| border: 5px solid rgba(0, 0, 0, 0);
| border-top-color: rgba(0, 0, 0, 0.73);
| }
| .w-e-menu-tooltip-down::after {
| content: "";
| position: absolute;
| bottom: 100%;
| left: 50%;
| margin-left: -5px;
| border: 5px solid rgba(0, 0, 0, 0);
| border-bottom-color: rgba(0, 0, 0, 0.73);
| }
| .w-e-menu-tooltip-item-wrapper {
| font-size: 14px;
| margin: 0 5px;
| }
| `,""]),e.exports=t},function(e,t,n){var r=n(20),o=n(155);typeof(o=o.__esModule?o.default:o)=="string"&&(o=[[e.i,o,""]]);var i={insert:"head",singleton:!1};r(o,i),e.exports=o.locals||{}},function(e,t,n){(t=n(21)(!1)).push([e.i,`.w-e-text-container {
| position: relative;
| height: 100%;
| }
| .w-e-text-container .w-e-progress {
| position: absolute;
| background-color: #1e88e5;
| top: 0;
| left: 0;
| height: 1px;
| }
| .w-e-text-container .placeholder {
| color: #D4D4D4;
| position: absolute;
| font-size: 11pt;
| line-height: 22px;
| left: 10px;
| top: 10px;
| -webkit-user-select: none;
| -moz-user-select: none;
| -ms-user-select: none;
| user-select: none;
| z-index: -1;
| }
| .w-e-text {
| padding: 0 10px;
| overflow-y: auto;
| }
| .w-e-text p,
| .w-e-text h1,
| .w-e-text h2,
| .w-e-text h3,
| .w-e-text h4,
| .w-e-text h5,
| .w-e-text table,
| .w-e-text pre {
| margin: 10px 0;
| line-height: 1.5;
| }
| .w-e-text ul,
| .w-e-text ol {
| margin: 10px 0 10px 20px;
| }
| .w-e-text blockquote {
| display: block;
| border-left: 8px solid #d0e5f2;
| padding: 5px 10px;
| margin: 10px 0;
| line-height: 1.4;
| font-size: 100%;
| background-color: #f1f1f1;
| }
| .w-e-text code {
| display: inline-block;
| background-color: #f1f1f1;
| border-radius: 3px;
| padding: 3px 5px;
| margin: 0 3px;
| }
| .w-e-text pre code {
| display: block;
| }
| .w-e-text table {
| border-top: 1px solid #ccc;
| border-left: 1px solid #ccc;
| }
| .w-e-text table td,
| .w-e-text table th {
| border-bottom: 1px solid #ccc;
| border-right: 1px solid #ccc;
| padding: 3px 5px;
| min-height: 30px;
| height: 30px;
| }
| .w-e-text table th {
| border-bottom: 2px solid #ccc;
| text-align: center;
| background-color: #f1f1f1;
| }
| .w-e-text:focus {
| outline: none;
| }
| .w-e-text img {
| cursor: pointer;
| }
| .w-e-text img:hover {
| box-shadow: 0 0 5px #333;
| }
| .w-e-text .w-e-todo {
| margin: 0 0 0 20px;
| }
| .w-e-text .w-e-todo li {
| list-style: none;
| font-size: 1em;
| }
| .w-e-text .w-e-todo li span:nth-child(1) {
| position: relative;
| left: -18px;
| }
| .w-e-text .w-e-todo li span:nth-child(1) input {
| position: absolute;
| margin-right: 3px;
| }
| .w-e-text .w-e-todo li span:nth-child(1) input[type=checkbox] {
| top: 50%;
| margin-top: -6px;
| }
| .w-e-tooltip {
| position: absolute;
| display: flex;
| color: #f1f1f1;
| background-color: rgba(0, 0, 0, 0.75);
| box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.15);
| border-radius: 4px;
| padding: 4px 5px 6px;
| justify-content: center;
| align-items: center;
| }
| .w-e-tooltip-up::after {
| content: "";
| position: absolute;
| top: 100%;
| left: 50%;
| margin-left: -5px;
| border: 5px solid rgba(0, 0, 0, 0);
| border-top-color: rgba(0, 0, 0, 0.73);
| }
| .w-e-tooltip-down::after {
| content: "";
| position: absolute;
| bottom: 100%;
| left: 50%;
| margin-left: -5px;
| border: 5px solid rgba(0, 0, 0, 0);
| border-bottom-color: rgba(0, 0, 0, 0.73);
| }
| .w-e-tooltip-item-wrapper {
| cursor: pointer;
| font-size: 14px;
| margin: 0 5px;
| }
| .w-e-tooltip-item-wrapper:hover {
| color: #ccc;
| text-decoration: underline;
| }
| `,""]),e.exports=t},function(e,t,n){var r=n(20),o=n(157);typeof(o=o.__esModule?o.default:o)=="string"&&(o=[[e.i,o,""]]);var i={insert:"head",singleton:!1};r(o,i),e.exports=o.locals||{}},function(e,t,n){(t=n(21)(!1)).push([e.i,`.w-e-menu .w-e-panel-container {
| position: absolute;
| top: 0;
| left: 50%;
| border: 1px solid #ccc;
| border-top: 0;
| box-shadow: 1px 1px 2px #ccc;
| color: #333;
| background-color: #fff;
| text-align: left;
| /* \u4E3A emotion panel \u5B9A\u5236\u7684\u6837\u5F0F */
| /* \u4E0A\u4F20\u56FE\u7247\u3001\u4E0A\u4F20\u89C6\u9891\u7684 panel \u5B9A\u5236\u6837\u5F0F */
| }
| .w-e-menu .w-e-panel-container .w-e-panel-close {
| position: absolute;
| right: 0;
| top: 0;
| padding: 5px;
| margin: 2px 5px 0 0;
| cursor: pointer;
| color: #999;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-close:hover {
| color: #333;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-title {
| list-style: none;
| display: flex;
| font-size: 14px;
| margin: 2px 10px 0 10px;
| border-bottom: 1px solid #f1f1f1;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-title .w-e-item {
| padding: 3px 5px;
| color: #999;
| cursor: pointer;
| margin: 0 3px;
| position: relative;
| top: 1px;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-title .w-e-active {
| color: #333;
| border-bottom: 1px solid #333;
| cursor: default;
| font-weight: 700;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content {
| padding: 10px 15px 10px 15px;
| font-size: 16px;
| /* \u8F93\u5165\u6846\u7684\u6837\u5F0F */
| /* \u6309\u94AE\u7684\u6837\u5F0F */
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content input:focus,
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content textarea:focus,
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content button:focus {
| outline: none;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content textarea {
| width: 100%;
| border: 1px solid #ccc;
| padding: 5px;
| margin-top: 10px;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content textarea:focus {
| border-color: #1e88e5;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text] {
| border: none;
| border-bottom: 1px solid #ccc;
| font-size: 14px;
| height: 20px;
| color: #333;
| text-align: left;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text].small {
| width: 30px;
| text-align: center;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text].block {
| display: block;
| width: 100%;
| margin: 10px 0;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text]:focus {
| border-bottom: 2px solid #1e88e5;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button {
| font-size: 14px;
| color: #1e88e5;
| border: none;
| padding: 5px 10px;
| background-color: #fff;
| cursor: pointer;
| border-radius: 3px;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.left {
| float: left;
| margin-right: 10px;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.right {
| float: right;
| margin-left: 10px;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.gray {
| color: #999;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.red {
| color: #c24f4a;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button:hover {
| background-color: #f1f1f1;
| }
| .w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container:after {
| content: "";
| display: table;
| clear: both;
| }
| .w-e-menu .w-e-panel-container .w-e-emoticon-container .w-e-item {
| cursor: pointer;
| font-size: 18px;
| padding: 0 3px;
| display: inline-block;
| }
| .w-e-menu .w-e-panel-container .w-e-up-img-container,
| .w-e-menu .w-e-panel-container .w-e-up-video-container {
| text-align: center;
| }
| .w-e-menu .w-e-panel-container .w-e-up-img-container .w-e-up-btn,
| .w-e-menu .w-e-panel-container .w-e-up-video-container .w-e-up-btn {
| display: inline-block;
| color: #999;
| cursor: pointer;
| font-size: 60px;
| line-height: 1;
| }
| .w-e-menu .w-e-panel-container .w-e-up-img-container .w-e-up-btn:hover,
| .w-e-menu .w-e-panel-container .w-e-up-video-container .w-e-up-btn:hover {
| color: #333;
| }
| `,""]),e.exports=t},function(e,t,n){var r=n(20),o=n(159);typeof(o=o.__esModule?o.default:o)=="string"&&(o=[[e.i,o,""]]);var i={insert:"head",singleton:!1};r(o,i),e.exports=o.locals||{}},function(e,t,n){(t=n(21)(!1)).push([e.i,`.w-e-toolbar .w-e-droplist {
| position: absolute;
| left: 0;
| top: 0;
| background-color: #fff;
| border: 1px solid #f1f1f1;
| border-right-color: #ccc;
| border-bottom-color: #ccc;
| }
| .w-e-toolbar .w-e-droplist .w-e-dp-title {
| text-align: center;
| color: #999;
| line-height: 2;
| border-bottom: 1px solid #f1f1f1;
| font-size: 13px;
| }
| .w-e-toolbar .w-e-droplist ul.w-e-list {
| list-style: none;
| line-height: 1;
| }
| .w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item {
| color: #333;
| padding: 5px 0;
| }
| .w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item:hover {
| background-color: #f1f1f1;
| }
| .w-e-toolbar .w-e-droplist ul.w-e-block {
| list-style: none;
| text-align: left;
| padding: 5px;
| }
| .w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item {
| display: inline-block;
| padding: 3px 5px;
| }
| .w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item:hover {
| background-color: #f1f1f1;
| }
| `,""]),e.exports=t},function(e,t,n){var r=n(0)(n(161));Element.prototype.matches||(Element.prototype.matches=function(o){for(var i=this.ownerDocument.querySelectorAll(o),a=i.length;a>=0&&i.item(a)!==this;a--);return a>-1}),r.default||(window.Promise=r.default)},function(e,t,n){e.exports=n(162)},function(e,t,n){var r=n(163);e.exports=r},function(e,t,n){n(61),n(50),n(54),n(175),n(178),n(179);var r=n(9);e.exports=r.Promise},function(e,t,n){var r=n(62),o=n(49),i=function(a){return function(l,s){var u,c,d=String(o(l)),f=r(s),p=d.length;return f<0||f>=p?a?"":void 0:(u=d.charCodeAt(f))<55296||u>56319||f+1===p||(c=d.charCodeAt(f+1))<56320||c>57343?a?d.charAt(f):u:a?d.slice(f,f+2):c-56320+(u-55296<<10)+65536}};e.exports={codeAt:i(!1),charAt:i(!0)}},function(e,t,n){var r=n(8),o=n(101),i=r.WeakMap;e.exports=typeof i=="function"&&/native code/.test(o(i))},function(e,t,n){var r=n(8),o=n(19);e.exports=function(i,a){try{o(r,i,a)}catch{r[i]=a}return a}},function(e,t,n){var r=n(103).IteratorPrototype,o=n(77),i=n(48),a=n(36),l=n(43),s=function(){return this};e.exports=function(u,c,d){var f=c+" Iterator";return u.prototype=o(r,{next:i(1,d)}),a(u,f,!1,!0),l[f]=s,u}},function(e,t,n){var r=n(11);e.exports=!r(function(){function o(){}return o.prototype.constructor=null,Object.getPrototypeOf(new o)!==o.prototype})},function(e,t,n){var r=n(14),o=n(18),i=n(25),a=n(52);e.exports=r?Object.defineProperties:function(l,s){i(l);for(var u,c=a(s),d=c.length,f=0;d>f;)o.f(l,u=c[f++],s[u]);return l}},function(e,t,n){var r=n(81),o=n(65);e.exports=r?{}.toString:function(){return"[object "+o(this)+"]"}},function(e,t,n){var r=n(25),o=n(172);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var i,a=!1,l={};try{(i=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(l,[]),a=l instanceof Array}catch{}return function(s,u){return r(s),o(u),a?i.call(s,u):s.__proto__=u,s}}():void 0)},function(e,t,n){var r=n(13);e.exports=function(o){if(!r(o)&&o!==null)throw TypeError("Can't set "+String(o)+" as a prototype");return o}},function(e,t,n){var r=n(28),o=n(82),i=n(43),a=n(41),l=n(75),s="Array Iterator",u=a.set,c=a.getterFor(s);e.exports=l(Array,"Array",function(d,f){u(this,{type:s,target:r(d),index:0,kind:f})},function(){var d=c(this),f=d.target,p=d.kind,m=d.index++;return!f||m>=f.length?(d.target=void 0,{value:void 0,done:!0}):p=="keys"?{value:m,done:!1}:p=="values"?{value:f[m],done:!1}:{value:[m,f[m]],done:!1}},"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},function(e,t){e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},function(e,t,n){var r,o,i,a,l=n(5),s=n(42),u=n(8),c=n(35),d=n(108),f=n(53),p=n(109),m=n(36),v=n(110),g=n(13),b=n(40),y=n(83),w=n(33),x=n(101),_=n(66),E=n(114),C=n(115),T=n(116).set,k=n(176),I=n(118),O=n(177),F=n(85),N=n(119),B=n(41),P=n(100),V=n(10),L=n(86),H=V("species"),U="Promise",G=B.get,z=B.set,$=B.getterFor(U),W=d,K=u.TypeError,X=u.document,te=u.process,ne=c("fetch"),se=F.f,le=se,J=w(te)=="process",Z=!!(X&&X.createEvent&&u.dispatchEvent),ye="unhandledrejection",be="rejectionhandled",ve=0,Ae=1,Ce=2,_e=1,ke=2,Be=P(U,function(){if(x(W)===String(W)&&(L===66||!J&&typeof PromiseRejectionEvent!="function")||s&&!W.prototype.finally)return!0;if(L>=51&&/native code/.test(W))return!1;var je=W.resolve(1),we=function(ze){ze(function(){},function(){})};return(je.constructor={})[H]=we,!(je.then(function(){})instanceof we)}),$e=Be||!E(function(je){W.all(je).catch(function(){})}),rt=function(je){var we;return!(!g(je)||typeof(we=je.then)!="function")&&we},ge=function(je,we,ze){if(!we.notified){we.notified=!0;var me=we.reactions;k(function(){for(var Me=we.value,Ie=we.state==Ae,ht=0;me.length>ht;){var gt,vt,qt,mn=me[ht++],Zt=Ie?mn.ok:mn.fail,rn=mn.resolve,zn=mn.reject,tt=mn.domain;try{Zt?(Ie||(we.rejection===ke&&Ve(je,we),we.rejection=_e),Zt===!0?gt=Me:(tt&&tt.enter(),gt=Zt(Me),tt&&(tt.exit(),qt=!0)),gt===mn.promise?zn(K("Promise-chain cycle")):(vt=rt(gt))?vt.call(gt,rn,zn):rn(gt)):zn(Me)}catch(kt){tt&&!qt&&tt.exit(),zn(kt)}}we.reactions=[],we.notified=!1,ze&&!we.rejection&&st(je,we)})}},We=function(je,we,ze){var me,Me;Z?((me=X.createEvent("Event")).promise=we,me.reason=ze,me.initEvent(je,!1,!0),u.dispatchEvent(me)):me={promise:we,reason:ze},(Me=u["on"+je])?Me(me):je===ye&&O("Unhandled promise rejection",ze)},st=function(je,we){T.call(u,function(){var ze,me=we.value;if(At(we)&&(ze=N(function(){J?te.emit("unhandledRejection",me,je):We(ye,je,me)}),we.rejection=J||At(we)?ke:_e,ze.error))throw ze.value})},At=function(je){return je.rejection!==_e&&!je.parent},Ve=function(je,we){T.call(u,function(){J?te.emit("rejectionHandled",je):We(be,je,we.value)})},it=function(je,we,ze,me){return function(Me){je(we,ze,Me,me)}},dt=function(je,we,ze,me){we.done||(we.done=!0,me&&(we=me),we.value=ze,we.state=Ce,ge(je,we,!0))},ot=function je(we,ze,me,Me){if(!ze.done){ze.done=!0,Me&&(ze=Me);try{if(we===me)throw K("Promise can't be resolved itself");var Ie=rt(me);Ie?k(function(){var ht={done:!1};try{Ie.call(me,it(je,we,ht,ze),it(dt,we,ht,ze))}catch(gt){dt(we,ht,gt,ze)}}):(ze.value=me,ze.state=Ae,ge(we,ze,!1))}catch(ht){dt(we,{done:!1},ht,ze)}}};Be&&(W=function(je){y(this,W,U),b(je),r.call(this);var we=G(this);try{je(it(ot,this,we),it(dt,this,we))}catch(ze){dt(this,we,ze)}},(r=function(je){z(this,{type:U,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:ve,value:void 0})}).prototype=p(W.prototype,{then:function(je,we){var ze=$(this),me=se(C(this,W));return me.ok=typeof je!="function"||je,me.fail=typeof we=="function"&&we,me.domain=J?te.domain:void 0,ze.parent=!0,ze.reactions.push(me),ze.state!=ve&&ge(this,ze,!1),me.promise},catch:function(je){return this.then(void 0,je)}}),o=function(){var je=new r,we=G(je);this.promise=je,this.resolve=it(ot,je,we),this.reject=it(dt,je,we)},F.f=se=function(je){return je===W||je===i?new o(je):le(je)},!s&&typeof d=="function"&&(a=d.prototype.then,f(d.prototype,"then",function(je,we){var ze=this;return new W(function(me,Me){a.call(ze,me,Me)}).then(je,we)},{unsafe:!0}),typeof ne=="function"&&l({global:!0,enumerable:!0,forced:!0},{fetch:function(je){return I(W,ne.apply(u,arguments))}}))),l({global:!0,wrap:!0,forced:Be},{Promise:W}),m(W,U,!1,!0),v(U),i=c(U),l({target:U,stat:!0,forced:Be},{reject:function(je){var we=se(this);return we.reject.call(void 0,je),we.promise}}),l({target:U,stat:!0,forced:s||Be},{resolve:function(je){return I(s&&this===i?W:this,je)}}),l({target:U,stat:!0,forced:$e},{all:function(je){var we=this,ze=se(we),me=ze.resolve,Me=ze.reject,Ie=N(function(){var ht=b(we.resolve),gt=[],vt=0,qt=1;_(je,function(mn){var Zt=vt++,rn=!1;gt.push(void 0),qt++,ht.call(we,mn).then(function(zn){rn||(rn=!0,gt[Zt]=zn,--qt||me(gt))},Me)}),--qt||me(gt)});return Ie.error&&Me(Ie.value),ze.promise},race:function(je){var we=this,ze=se(we),me=ze.reject,Me=N(function(){var Ie=b(we.resolve);_(je,function(ht){Ie.call(we,ht).then(ze.resolve,me)})});return Me.error&&me(Me.value),ze.promise}})},function(e,t,n){var r,o,i,a,l,s,u,c,d=n(8),f=n(71).f,p=n(33),m=n(116).set,v=n(117),g=d.MutationObserver||d.WebKitMutationObserver,b=d.process,y=d.Promise,w=p(b)=="process",x=f(d,"queueMicrotask"),_=x&&x.value;_||(r=function(){var E,C;for(w&&(E=b.domain)&&E.exit();o;){C=o.fn,o=o.next;try{C()}catch(T){throw o?a():i=void 0,T}}i=void 0,E&&E.enter()},w?a=function(){b.nextTick(r)}:g&&!v?(l=!0,s=document.createTextNode(""),new g(r).observe(s,{characterData:!0}),a=function(){s.data=l=!l}):y&&y.resolve?(u=y.resolve(void 0),c=u.then,a=function(){c.call(u,r)}):a=function(){m.call(d,r)}),e.exports=_||function(E){var C={fn:E,next:void 0};i&&(i.next=C),o||(o=C,a()),i=C}},function(e,t,n){var r=n(8);e.exports=function(o,i){var a=r.console;a&&a.error&&(arguments.length===1?a.error(o):a.error(o,i))}},function(e,t,n){var r=n(5),o=n(40),i=n(85),a=n(119),l=n(66);r({target:"Promise",stat:!0},{allSettled:function(s){var u=this,c=i.f(u),d=c.resolve,f=c.reject,p=a(function(){var m=o(u.resolve),v=[],g=0,b=1;l(s,function(y){var w=g++,x=!1;v.push(void 0),b++,m.call(u,y).then(function(_){x||(x=!0,v[w]={status:"fulfilled",value:_},--b||d(v))},function(_){x||(x=!0,v[w]={status:"rejected",reason:_},--b||d(v))})}),--b||d(v)});return p.error&&f(p.value),c.promise}})},function(e,t,n){var r=n(5),o=n(42),i=n(108),a=n(11),l=n(35),s=n(115),u=n(118),c=n(53);r({target:"Promise",proto:!0,real:!0,forced:!!i&&a(function(){i.prototype.finally.call({then:function(){}},function(){})})},{finally:function(d){var f=s(this,l("Promise")),p=typeof d=="function";return this.then(p?function(m){return u(f,d()).then(function(){return m})}:d,p?function(m){return u(f,d()).then(function(){throw m})}:d)}}),!o&&typeof i=="function"&&!i.prototype.finally&&c(i.prototype,"finally",l("Promise").prototype.finally)},function(e,t,n){n(54);var r=n(181),o=n(65),i=Array.prototype,a={DOMTokenList:!0,NodeList:!0};e.exports=function(l){var s=l.forEach;return l===i||l instanceof Array&&s===i.forEach||a.hasOwnProperty(o(l))?r:s}},function(e,t,n){var r=n(182);e.exports=r},function(e,t,n){n(183);var r=n(15);e.exports=r("Array").forEach},function(e,t,n){var r=n(5),o=n(184);r({target:"Array",proto:!0,forced:[].forEach!=o},{forEach:o})},function(e,t,n){var r=n(30).forEach,o=n(67),i=n(22),a=o("forEach"),l=i("forEach");e.exports=a&&l?[].forEach:function(s){return r(this,s,arguments.length>1?arguments[1]:void 0)}},function(e,t,n){var r=n(186);e.exports=r},function(e,t,n){n(187);var r=n(9);e.exports=r.Array.isArray},function(e,t,n){n(5)({target:"Array",stat:!0},{isArray:n(55)})},function(e,t,n){var r=n(189);e.exports=r},function(e,t,n){var r=n(190),o=Array.prototype;e.exports=function(i){var a=i.map;return i===o||i instanceof Array&&a===o.map?r:a}},function(e,t,n){n(191);var r=n(15);e.exports=r("Array").map},function(e,t,n){var r=n(5),o=n(30).map,i=n(56),a=n(22),l=i("map"),s=a("map");r({target:"Array",proto:!0,forced:!l||!s},{map:function(u){return o(this,u,arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){var r=n(193);e.exports=r},function(e,t,n){var r=n(194),o=String.prototype;e.exports=function(i){var a=i.trim;return typeof i=="string"||i===o||i instanceof String&&a===o.trim?r:a}},function(e,t,n){n(195);var r=n(15);e.exports=r("String").trim},function(e,t,n){var r=n(5),o=n(90).trim;r({target:"String",proto:!0,forced:n(196)("trim")},{trim:function(){return o(this)}})},function(e,t,n){var r=n(11),o=n(68),i="\u200B\x85\u180E";e.exports=function(a){return r(function(){return!!o[a]()||i[a]()!=i||o[a].name!==a})}},function(e,t,n){var r=n(198);e.exports=r},function(e,t,n){n(199),n(61),n(50),n(54);var r=n(9);e.exports=r.Map},function(e,t,n){var r=n(121),o=n(123);e.exports=r("Map",function(i){return function(){return i(this,arguments.length?arguments[0]:void 0)}},o)},function(e,t,n){var r=n(11);e.exports=!r(function(){return Object.isExtensible(Object.preventExtensions({}))})},function(e,t,n){var r=n(202);e.exports=r},function(e,t,n){var r=n(203),o=Array.prototype;e.exports=function(i){var a=i.indexOf;return i===o||i instanceof Array&&a===o.indexOf?r:a}},function(e,t,n){n(204);var r=n(15);e.exports=r("Array").indexOf},function(e,t,n){var r=n(5),o=n(78).indexOf,i=n(67),a=n(22),l=[].indexOf,s=!!l&&1/[1].indexOf(1,-0)<0,u=i("indexOf"),c=a("indexOf",{ACCESSORS:!0,1:0});r({target:"Array",proto:!0,forced:s||!u||!c},{indexOf:function(d){return s?l.apply(this,arguments)||0:o(this,d,arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){var r=n(206);e.exports=r},function(e,t,n){var r=n(207),o=Array.prototype;e.exports=function(i){var a=i.splice;return i===o||i instanceof Array&&a===o.splice?r:a}},function(e,t,n){n(208);var r=n(15);e.exports=r("Array").splice},function(e,t,n){var r=n(5),o=n(79),i=n(62),a=n(34),l=n(29),s=n(88),u=n(69),c=n(56),d=n(22),f=c("splice"),p=d("splice",{ACCESSORS:!0,0:0,1:2}),m=Math.max,v=Math.min,g=9007199254740991,b="Maximum allowed length exceeded";r({target:"Array",proto:!0,forced:!f||!p},{splice:function(y,w){var x,_,E,C,T,k,I=l(this),O=a(I.length),F=o(y,O),N=arguments.length;if(N===0?x=_=0:N===1?(x=0,_=O-F):(x=N-2,_=v(m(i(w),0),O-F)),O+x-_>g)throw TypeError(b);for(E=s(I,_),C=0;C<_;C++)(T=F+C)in I&&u(E,C,I[T]);if(E.length=_,x<_){for(C=F;C<O-_;C++)k=C+x,(T=C+_)in I?I[k]=I[T]:delete I[k];for(C=O;C>O-_+x;C--)delete I[C-1]}else if(x>_)for(C=O-_;C>F;C--)k=C+x-1,(T=C+_-1)in I?I[k]=I[T]:delete I[k];for(C=0;C<x;C++)I[C+F]=arguments[C+2];return I.length=O-_+x,E}})},function(e,t,n){var r=n(210);e.exports=r},function(e,t,n){var r=n(211),o=Array.prototype;e.exports=function(i){var a=i.filter;return i===o||i instanceof Array&&a===o.filter?r:a}},function(e,t,n){n(212);var r=n(15);e.exports=r("Array").filter},function(e,t,n){var r=n(5),o=n(30).filter,i=n(56),a=n(22),l=i("filter"),s=a("filter");r({target:"Array",proto:!0,forced:!l||!s},{filter:function(u){return o(this,u,arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){var r=n(214);e.exports=r},function(e,t,n){var r=n(215),o=n(217),i=Array.prototype,a=String.prototype;e.exports=function(l){var s=l.includes;return l===i||l instanceof Array&&s===i.includes?r:typeof l=="string"||l===a||l instanceof String&&s===a.includes?o:s}},function(e,t,n){n(216);var r=n(15);e.exports=r("Array").includes},function(e,t,n){var r=n(5),o=n(78).includes,i=n(82);r({target:"Array",proto:!0,forced:!n(22)("indexOf",{ACCESSORS:!0,1:0})},{includes:function(a){return o(this,a,arguments.length>1?arguments[1]:void 0)}}),i("includes")},function(e,t,n){n(218);var r=n(15);e.exports=r("String").includes},function(e,t,n){var r=n(5),o=n(219),i=n(49);r({target:"String",proto:!0,forced:!n(221)("includes")},{includes:function(a){return!!~String(i(this)).indexOf(o(a),arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){var r=n(220);e.exports=function(o){if(r(o))throw TypeError("The method doesn't accept regular expressions");return o}},function(e,t,n){var r=n(13),o=n(33),i=n(10)("match");e.exports=function(a){var l;return r(a)&&((l=a[i])!==void 0?!!l:o(a)=="RegExp")}},function(e,t,n){var r=n(10)("match");e.exports=function(o){var i=/./;try{"/./"[o](i)}catch{try{return i[r]=!1,"/./"[o](i)}catch{}}return!1}},function(e,t,n){var r=n(223);e.exports=r},function(e,t,n){var r=n(224),o=Function.prototype;e.exports=function(i){var a=i.bind;return i===o||i instanceof Function&&a===o.bind?r:a}},function(e,t,n){n(225);var r=n(15);e.exports=r("Function").bind},function(e,t,n){n(5)({target:"Function",proto:!0},{bind:n(226)})},function(e,t,n){var r=n(40),o=n(13),i=[].slice,a={},l=function(s,u,c){if(!(u in a)){for(var d=[],f=0;f<u;f++)d[f]="a["+f+"]";a[u]=Function("C,a","return new C("+d.join(",")+")")}return a[u](s,c)};e.exports=Function.bind||function(s){var u=r(this),c=i.call(arguments,1),d=function(){var f=c.concat(i.call(arguments));return this instanceof d?l(u,f.length,f):u.apply(s,f)};return o(u.prototype)&&(d.prototype=u.prototype),d}},function(e,t,n){e.exports=n(228)},function(e,t,n){var r=n(229);e.exports=r},function(e,t,n){n(124),n(50),n(54);var r=n(93);e.exports=r.f("iterator")},function(e,t,n){e.exports=n(231)},function(e,t,n){var r=n(232);n(251),n(252),n(253),n(254),n(255),e.exports=r},function(e,t,n){n(233),n(61),n(234),n(236),n(237),n(238),n(239),n(124),n(240),n(241),n(242),n(243),n(244),n(245),n(246),n(247),n(248),n(249),n(250);var r=n(9);e.exports=r.Symbol},function(e,t,n){var r=n(5),o=n(11),i=n(55),a=n(13),l=n(29),s=n(34),u=n(69),c=n(88),d=n(56),f=n(10),p=n(86),m=f("isConcatSpreadable"),v=9007199254740991,g="Maximum allowed index exceeded",b=p>=51||!o(function(){var x=[];return x[m]=!1,x.concat()[0]!==x}),y=d("concat"),w=function(x){if(!a(x))return!1;var _=x[m];return _!==void 0?!!_:i(x)};r({target:"Array",proto:!0,forced:!b||!y},{concat:function(x){var _,E,C,T,k,I=l(this),O=c(I,0),F=0;for(_=-1,C=arguments.length;_<C;_++)if(w(k=_===-1?I:arguments[_])){if(F+(T=s(k.length))>v)throw TypeError(g);for(E=0;E<T;E++,F++)E in k&&u(O,F,k[E])}else{if(F>=v)throw TypeError(g);u(O,F++,k)}return O.length=F,O}})},function(e,t,n){var r=n(5),o=n(8),i=n(35),a=n(42),l=n(14),s=n(76),u=n(105),c=n(11),d=n(16),f=n(55),p=n(13),m=n(25),v=n(29),g=n(28),b=n(60),y=n(48),w=n(77),x=n(52),_=n(125),E=n(235),C=n(126),T=n(71),k=n(18),I=n(59),O=n(19),F=n(53),N=n(74),B=n(63),P=n(51),V=n(64),L=n(10),H=n(93),U=n(12),G=n(36),z=n(41),$=n(30).forEach,W=B("hidden"),K="Symbol",X="prototype",te=L("toPrimitive"),ne=z.set,se=z.getterFor(K),le=Object[X],J=o.Symbol,Z=i("JSON","stringify"),ye=T.f,be=k.f,ve=E.f,Ae=I.f,Ce=N("symbols"),_e=N("op-symbols"),ke=N("string-to-symbol-registry"),Be=N("symbol-to-string-registry"),$e=N("wks"),rt=o.QObject,ge=!rt||!rt[X]||!rt[X].findChild,We=l&&c(function(){return w(be({},"a",{get:function(){return be(this,"a",{value:7}).a}})).a!=7})?function(Me,Ie,ht){var gt=ye(le,Ie);gt&&delete le[Ie],be(Me,Ie,ht),gt&&Me!==le&&be(le,Ie,gt)}:be,st=function(Me,Ie){var ht=Ce[Me]=w(J[X]);return ne(ht,{type:K,tag:Me,description:Ie}),l||(ht.description=Ie),ht},At=u?function(Me){return Qi(Me)=="symbol"}:function(Me){return Object(Me)instanceof J},Ve=function(Me,Ie,ht){Me===le&&Ve(_e,Ie,ht),m(Me);var gt=b(Ie,!0);return m(ht),d(Ce,gt)?(ht.enumerable?(d(Me,W)&&Me[W][gt]&&(Me[W][gt]=!1),ht=w(ht,{enumerable:y(0,!1)})):(d(Me,W)||be(Me,W,y(1,{})),Me[W][gt]=!0),We(Me,gt,ht)):be(Me,gt,ht)},it=function(Me,Ie){m(Me);var ht=g(Ie),gt=x(ht).concat(ze(ht));return $(gt,function(vt){(!l||ot.call(ht,vt))&&Ve(Me,vt,ht[vt])}),Me},dt=function(Me,Ie){return Ie===void 0?w(Me):it(w(Me),Ie)},ot=function(Me){var Ie=b(Me,!0),ht=Ae.call(this,Ie);return!(this===le&&d(Ce,Ie)&&!d(_e,Ie))&&(!(ht||!d(this,Ie)||!d(Ce,Ie)||d(this,W)&&this[W][Ie])||ht)},je=function(Me,Ie){var ht=g(Me),gt=b(Ie,!0);if(ht!==le||!d(Ce,gt)||d(_e,gt)){var vt=ye(ht,gt);return vt&&d(Ce,gt)&&!(d(ht,W)&&ht[W][gt])&&(vt.enumerable=!0),vt}},we=function(Me){var Ie=ve(g(Me)),ht=[];return $(Ie,function(gt){!d(Ce,gt)&&!d(P,gt)&&ht.push(gt)}),ht},ze=function(Me){var Ie=Me===le,ht=ve(Ie?_e:g(Me)),gt=[];return $(ht,function(vt){d(Ce,vt)&&(!Ie||d(le,vt))&>.push(Ce[vt])}),gt};if(s||(J=function(){if(this instanceof J)throw TypeError("Symbol is not a constructor");var Me=arguments.length&&arguments[0]!==void 0?String(arguments[0]):void 0,Ie=V(Me),ht=function gt(vt){this===le&>.call(_e,vt),d(this,W)&&d(this[W],Ie)&&(this[W][Ie]=!1),We(this,Ie,y(1,vt))};return l&&ge&&We(le,Ie,{configurable:!0,set:ht}),st(Ie,Me)},F(J[X],"toString",function(){return se(this).tag}),F(J,"withoutSetter",function(Me){return st(V(Me),Me)}),I.f=ot,k.f=Ve,T.f=je,_.f=E.f=we,C.f=ze,H.f=function(Me){return st(L(Me),Me)},l&&(be(J[X],"description",{configurable:!0,get:function(){return se(this).description}}),a||F(le,"propertyIsEnumerable",ot,{unsafe:!0}))),r({global:!0,wrap:!0,forced:!s,sham:!s},{Symbol:J}),$(x($e),function(Me){U(Me)}),r({target:K,stat:!0,forced:!s},{for:function(Me){var Ie=String(Me);if(d(ke,Ie))return ke[Ie];var ht=J(Ie);return ke[Ie]=ht,Be[ht]=Ie,ht},keyFor:function(Me){if(!At(Me))throw TypeError(Me+" is not a symbol");if(d(Be,Me))return Be[Me]},useSetter:function(){ge=!0},useSimple:function(){ge=!1}}),r({target:"Object",stat:!0,forced:!s,sham:!l},{create:dt,defineProperty:Ve,defineProperties:it,getOwnPropertyDescriptor:je}),r({target:"Object",stat:!0,forced:!s},{getOwnPropertyNames:we,getOwnPropertySymbols:ze}),r({target:"Object",stat:!0,forced:c(function(){C.f(1)})},{getOwnPropertySymbols:function(Me){return C.f(v(Me))}}),Z){var me=!s||c(function(){var Me=J();return Z([Me])!="[null]"||Z({a:Me})!="{}"||Z(Object(Me))!="{}"});r({target:"JSON",stat:!0,forced:me},{stringify:function(Me,Ie,ht){for(var gt,vt=[Me],qt=1;arguments.length>qt;)vt.push(arguments[qt++]);if(gt=Ie,(p(Ie)||Me!==void 0)&&!At(Me))return f(Ie)||(Ie=function(mn,Zt){if(typeof gt=="function"&&(Zt=gt.call(this,mn,Zt)),!At(Zt))return Zt}),vt[1]=Ie,Z.apply(null,vt)}})}J[X][te]||O(J[X],te,J[X].valueOf),G(J,K),P[W]=!0},function(e,t,n){var r=n(28),o=n(125).f,i={}.toString,a=(typeof window>"u"?"undefined":Qi(window))=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],l=function(s){try{return o(s)}catch{return a.slice()}};e.exports.f=function(s){return a&&i.call(s)=="[object Window]"?l(s):o(r(s))}},function(e,t,n){n(12)("asyncIterator")},function(e,t){},function(e,t,n){n(12)("hasInstance")},function(e,t,n){n(12)("isConcatSpreadable")},function(e,t,n){n(12)("match")},function(e,t,n){n(12)("matchAll")},function(e,t,n){n(12)("replace")},function(e,t,n){n(12)("search")},function(e,t,n){n(12)("species")},function(e,t,n){n(12)("split")},function(e,t,n){n(12)("toPrimitive")},function(e,t,n){n(12)("toStringTag")},function(e,t,n){n(12)("unscopables")},function(e,t,n){n(36)(Math,"Math",!0)},function(e,t,n){var r=n(8);n(36)(r.JSON,"JSON",!0)},function(e,t,n){n(12)("asyncDispose")},function(e,t,n){n(12)("dispose")},function(e,t,n){n(12)("observable")},function(e,t,n){n(12)("patternMatch")},function(e,t,n){n(12)("replaceAll")},function(e,t,n){e.exports=n(257)},function(e,t,n){var r=n(258);e.exports=r},function(e,t,n){n(259);var r=n(9);e.exports=r.parseInt},function(e,t,n){var r=n(5),o=n(260);r({global:!0,forced:parseInt!=o},{parseInt:o})},function(e,t,n){var r=n(8),o=n(90).trim,i=n(68),a=r.parseInt,l=/^[+-]?0[Xx]/,s=a(i+"08")!==8||a(i+"0x16")!==22;e.exports=s?function(u,c){var d=o(String(u));return a(d,c>>>0||(l.test(d)?16:10))}:a},function(e,t,n){var r=n(262);e.exports=r},function(e,t,n){var r=n(263),o=Array.prototype;e.exports=function(i){var a=i.slice;return i===o||i instanceof Array&&a===o.slice?r:a}},function(e,t,n){n(264);var r=n(15);e.exports=r("Array").slice},function(e,t,n){var r=n(5),o=n(13),i=n(55),a=n(79),l=n(34),s=n(28),u=n(69),c=n(10),d=n(56),f=n(22),p=d("slice"),m=f("slice",{ACCESSORS:!0,0:0,1:2}),v=c("species"),g=[].slice,b=Math.max;r({target:"Array",proto:!0,forced:!p||!m},{slice:function(y,w){var x,_,E,C=s(this),T=l(C.length),k=a(y,T),I=a(w===void 0?T:w,T);if(i(C)&&(typeof(x=C.constructor)!="function"||x!==Array&&!i(x.prototype)?o(x)&&(x=x[v])===null&&(x=void 0):x=void 0,x===Array||x===void 0))return g.call(C,k,I);for(_=new(x===void 0?Array:x)(b(I-k,0)),E=0;k<I;k++,E++)k in C&&u(_,E,C[k]);return _.length=E,_}})},function(e,t,n){n(266);var r=n(9);e.exports=r.setTimeout},function(e,t,n){var r=n(5),o=n(8),i=n(84),a=[].slice,l=function(s){return function(u,c){var d=arguments.length>2,f=d?a.call(arguments,2):void 0;return s(d?function(){(typeof u=="function"?u:Function(u)).apply(this,f)}:u,c)}};r({global:!0,bind:!0,forced:/MSIE .\./.test(i)},{setTimeout:l(o.setTimeout),setInterval:l(o.setInterval)})},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(127));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=a.__importDefault(n(272)),s=a.__importDefault(n(273)),u=a.__importDefault(n(128)),c=a.__importDefault(n(274)),d=a.__importDefault(n(275)),f=a.__importDefault(n(276)),p=a.__importDefault(n(129)),m=a.__importDefault(n(277)),v=a.__importDefault(n(278)),g=a.__importDefault(n(279)),b=(0,i.default)({},l.default,s.default,u.default,d.default,c.default,f.default,p.default,m.default,v.default,g.default,{linkCheck:function(y,w){return!0}});t.default=b},function(e,t,n){var r=n(269);e.exports=r},function(e,t,n){n(270);var r=n(9);e.exports=r.Object.assign},function(e,t,n){var r=n(5),o=n(271);r({target:"Object",stat:!0,forced:Object.assign!==o},{assign:o})},function(e,t,n){var r=n(14),o=n(11),i=n(52),a=n(126),l=n(59),s=n(29),u=n(72),c=Object.assign,d=Object.defineProperty;e.exports=!c||o(function(){if(r&&c({b:1},c(d({},"a",{enumerable:!0,get:function(){d(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var f={},p={},m=Symbol(),v="abcdefghijklmnopqrst";return f[m]=7,v.split("").forEach(function(g){p[g]=g}),c({},f)[m]!=7||i(c({},p)).join("")!=v})?function(f,p){for(var m=s(f),v=arguments.length,g=1,b=a.f,y=l.f;v>g;)for(var w,x=u(arguments[g++]),_=b?i(x).concat(b(x)):i(x),E=_.length,C=0;E>C;)w=_[C++],(!r||y.call(x,w))&&(m[w]=x[w]);return m}:c},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.default={menus:["head","bold","fontSize","fontName","italic","underline","strikeThrough","indent","lineHeight","foreColor","backColor","link","list","todo","justify","quote","emoticon","image","video","table","code","splitLine","undo","redo"],fontNames:["\u9ED1\u4F53","\u4EFF\u5B8B","\u6977\u4F53","\u6807\u6977\u4F53","\u534E\u6587\u4EFF\u5B8B","\u534E\u6587\u6977\u4F53","\u5B8B\u4F53","\u5FAE\u8F6F\u96C5\u9ED1","Arial","Tahoma","Verdana","Times New Roman","Courier New"],fontSizes:{"x-small":{name:"10px",value:"1"},small:{name:"13px",value:"2"},normal:{name:"16px",value:"3"},large:{name:"18px",value:"4"},"x-large":{name:"24px",value:"5"},"xx-large":{name:"32px",value:"6"},"xxx-large":{name:"48px",value:"7"}},colors:["#000000","#ffffff","#eeece0","#1c487f","#4d80bf","#c24f4a","#8baa4a","#7b5ba1","#46acc8","#f9963b"],languageType:["Bash","C","C#","C++","CSS","Java","JavaScript","JSON","TypeScript","Plain text","Html","XML","SQL","Go","Kotlin","Lua","Markdown","PHP","Python","Shell Session","Ruby"],languageTab:"\u3000\u3000\u3000\u3000",emotions:[{title:"\u8868\u60C5",type:"emoji",content:"\u{1F600} \u{1F603} \u{1F604} \u{1F601} \u{1F606} \u{1F605} \u{1F602} \u{1F923} \u{1F60A} \u{1F607} \u{1F642} \u{1F643} \u{1F609} \u{1F60C} \u{1F60D} \u{1F618} \u{1F617} \u{1F619} \u{1F61A} \u{1F60B} \u{1F61B} \u{1F61D} \u{1F61C} \u{1F913} \u{1F60E} \u{1F60F} \u{1F612} \u{1F61E} \u{1F614} \u{1F61F} \u{1F615} \u{1F641} \u{1F623} \u{1F616} \u{1F62B} \u{1F629} \u{1F622} \u{1F62D} \u{1F624} \u{1F620} \u{1F621} \u{1F633} \u{1F631} \u{1F628} \u{1F917} \u{1F914} \u{1F636} \u{1F611} \u{1F62C} \u{1F644} \u{1F62F} \u{1F634} \u{1F637} \u{1F911} \u{1F608} \u{1F921} \u{1F4A9} \u{1F47B} \u{1F480} \u{1F440} \u{1F463}".split(/\s/)},{title:"\u624B\u52BF",type:"emoji",content:"\u{1F450} \u{1F64C} \u{1F44F} \u{1F91D} \u{1F44D} \u{1F44E} \u{1F44A} \u270A \u{1F91B} \u{1F91C} \u{1F91E} \u270C\uFE0F \u{1F918} \u{1F44C} \u{1F448} \u{1F449} \u{1F446} \u{1F447} \u261D\uFE0F \u270B \u{1F91A} \u{1F590} \u{1F596} \u{1F44B} \u{1F919} \u{1F4AA} \u{1F595} \u270D\uFE0F \u{1F64F}".split(/\s/)}],lineHeights:["1","1.15","1.6","2","2.5","3"],undoLimit:20,indentation:"2em",showMenuTooltips:!0,menuTooltipPosition:"up"}},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(7);function o(i,a,l){window.alert(i),l&&console.error("wangEditor: "+l)}t.default={onchangeTimeout:200,onchange:null,onfocus:r.EMPTY_FN,onblur:r.EMPTY_FN,onCatalogChange:null,customAlert:o}},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.default={pasteFilterStyle:!0,pasteIgnoreImg:!1,pasteTextHandle:function(r){return r}}},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.default={styleWithCSS:!1}},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(7);t.default={linkImgCheck:function(o,i,a){return!0},showLinkImg:!0,showLinkImgAlt:!0,showLinkImgHref:!0,linkImgCallback:r.EMPTY_FN,uploadImgAccept:["jpg","jpeg","png","gif","bmp"],uploadImgServer:"",uploadImgShowBase64:!1,uploadImgMaxSize:5242880,uploadImgMaxLength:100,uploadFileName:"",uploadImgParams:{},uploadImgParamsWithUrl:!1,uploadImgHeaders:{},uploadImgHooks:{},uploadImgTimeout:1e4,withCredentials:!1,customUploadImg:null,uploadImgFromMedia:null}},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.default={lang:"zh-CN",languages:{"zh-CN":{wangEditor:{\u91CD\u7F6E:"\u91CD\u7F6E",\u63D2\u5165:"\u63D2\u5165",\u9ED8\u8BA4:"\u9ED8\u8BA4",\u521B\u5EFA:"\u521B\u5EFA",\u4FEE\u6539:"\u4FEE\u6539",\u5982:"\u5982",\u8BF7\u8F93\u5165\u6B63\u6587:"\u8BF7\u8F93\u5165\u6B63\u6587",menus:{title:{\u6807\u9898:"\u6807\u9898",\u52A0\u7C97:"\u52A0\u7C97",\u5B57\u53F7:"\u5B57\u53F7",\u5B57\u4F53:"\u5B57\u4F53",\u659C\u4F53:"\u659C\u4F53",\u4E0B\u5212\u7EBF:"\u4E0B\u5212\u7EBF",\u5220\u9664\u7EBF:"\u5220\u9664\u7EBF",\u7F29\u8FDB:"\u7F29\u8FDB",\u884C\u9AD8:"\u884C\u9AD8",\u6587\u5B57\u989C\u8272:"\u6587\u5B57\u989C\u8272",\u80CC\u666F\u8272:"\u80CC\u666F\u8272",\u94FE\u63A5:"\u94FE\u63A5",\u5E8F\u5217:"\u5E8F\u5217",\u5BF9\u9F50:"\u5BF9\u9F50",\u5F15\u7528:"\u5F15\u7528",\u8868\u60C5:"\u8868\u60C5",\u56FE\u7247:"\u56FE\u7247",\u89C6\u9891:"\u89C6\u9891",\u8868\u683C:"\u8868\u683C",\u4EE3\u7801:"\u4EE3\u7801",\u5206\u5272\u7EBF:"\u5206\u5272\u7EBF",\u6062\u590D:"\u6062\u590D",\u64A4\u9500:"\u64A4\u9500",\u5168\u5C4F:"\u5168\u5C4F",\u53D6\u6D88\u5168\u5C4F:"\u53D6\u6D88\u5168\u5C4F",\u5F85\u529E\u4E8B\u9879:"\u5F85\u529E\u4E8B\u9879"},dropListMenu:{\u8BBE\u7F6E\u6807\u9898:"\u8BBE\u7F6E\u6807\u9898",\u80CC\u666F\u989C\u8272:"\u80CC\u666F\u989C\u8272",\u6587\u5B57\u989C\u8272:"\u6587\u5B57\u989C\u8272",\u8BBE\u7F6E\u5B57\u53F7:"\u8BBE\u7F6E\u5B57\u53F7",\u8BBE\u7F6E\u5B57\u4F53:"\u8BBE\u7F6E\u5B57\u4F53",\u8BBE\u7F6E\u7F29\u8FDB:"\u8BBE\u7F6E\u7F29\u8FDB",\u5BF9\u9F50\u65B9\u5F0F:"\u5BF9\u9F50\u65B9\u5F0F",\u8BBE\u7F6E\u884C\u9AD8:"\u8BBE\u7F6E\u884C\u9AD8",\u5E8F\u5217:"\u5E8F\u5217",head:{\u6B63\u6587:"\u6B63\u6587"},indent:{\u589E\u52A0\u7F29\u8FDB:"\u589E\u52A0\u7F29\u8FDB",\u51CF\u5C11\u7F29\u8FDB:"\u51CF\u5C11\u7F29\u8FDB"},justify:{\u9760\u5DE6:"\u9760\u5DE6",\u5C45\u4E2D:"\u5C45\u4E2D",\u9760\u53F3:"\u9760\u53F3",\u4E24\u7AEF:"\u4E24\u7AEF"},list:{\u65E0\u5E8F\u5217\u8868:"\u65E0\u5E8F\u5217\u8868",\u6709\u5E8F\u5217\u8868:"\u6709\u5E8F\u5217\u8868"}},panelMenus:{emoticon:{\u9ED8\u8BA4:"\u9ED8\u8BA4",\u65B0\u6D6A:"\u65B0\u6D6A",emoji:"emoji",\u624B\u52BF:"\u624B\u52BF"},image:{\u4E0A\u4F20\u56FE\u7247:"\u4E0A\u4F20\u56FE\u7247",\u7F51\u7EDC\u56FE\u7247:"\u7F51\u7EDC\u56FE\u7247",\u56FE\u7247\u5730\u5740:"\u56FE\u7247\u5730\u5740",\u56FE\u7247\u6587\u5B57\u8BF4\u660E:"\u56FE\u7247\u6587\u5B57\u8BF4\u660E",\u8DF3\u8F6C\u94FE\u63A5:"\u8DF3\u8F6C\u94FE\u63A5"},link:{\u94FE\u63A5:"\u94FE\u63A5",\u94FE\u63A5\u6587\u5B57:"\u94FE\u63A5\u6587\u5B57",\u53D6\u6D88\u94FE\u63A5:"\u53D6\u6D88\u94FE\u63A5",\u67E5\u770B\u94FE\u63A5:"\u67E5\u770B\u94FE\u63A5"},video:{\u63D2\u5165\u89C6\u9891:"\u63D2\u5165\u89C6\u9891",\u4E0A\u4F20\u89C6\u9891:"\u4E0A\u4F20\u89C6\u9891"},table:{\u884C:"\u884C",\u5217:"\u5217",\u7684:"\u7684",\u8868\u683C:"\u8868\u683C",\u6DFB\u52A0\u884C:"\u6DFB\u52A0\u884C",\u5220\u9664\u884C:"\u5220\u9664\u884C",\u6DFB\u52A0\u5217:"\u6DFB\u52A0\u5217",\u5220\u9664\u5217:"\u5220\u9664\u5217",\u8BBE\u7F6E\u8868\u5934:"\u8BBE\u7F6E\u8868\u5934",\u53D6\u6D88\u8868\u5934:"\u53D6\u6D88\u8868\u5934",\u63D2\u5165\u8868\u683C:"\u63D2\u5165\u8868\u683C",\u5220\u9664\u8868\u683C:"\u5220\u9664\u8868\u683C"},code:{\u5220\u9664\u4EE3\u7801:"\u5220\u9664\u4EE3\u7801",\u4FEE\u6539\u4EE3\u7801:"\u4FEE\u6539\u4EE3\u7801",\u63D2\u5165\u4EE3\u7801:"\u63D2\u5165\u4EE3\u7801"}}},validate:{\u5F20\u56FE\u7247:"\u5F20\u56FE\u7247",\u5927\u4E8E:"\u5927\u4E8E",\u56FE\u7247\u94FE\u63A5:"\u56FE\u7247\u94FE\u63A5",\u4E0D\u662F\u56FE\u7247:"\u4E0D\u662F\u56FE\u7247",\u8FD4\u56DE\u7ED3\u679C:"\u8FD4\u56DE\u7ED3\u679C",\u4E0A\u4F20\u56FE\u7247\u8D85\u65F6:"\u4E0A\u4F20\u56FE\u7247\u8D85\u65F6",\u4E0A\u4F20\u56FE\u7247\u9519\u8BEF:"\u4E0A\u4F20\u56FE\u7247\u9519\u8BEF",\u4E0A\u4F20\u56FE\u7247\u5931\u8D25:"\u4E0A\u4F20\u56FE\u7247\u5931\u8D25",\u63D2\u5165\u56FE\u7247\u9519\u8BEF:"\u63D2\u5165\u56FE\u7247\u9519\u8BEF",\u4E00\u6B21\u6700\u591A\u4E0A\u4F20:"\u4E00\u6B21\u6700\u591A\u4E0A\u4F20",\u4E0B\u8F7D\u94FE\u63A5\u5931\u8D25:"\u4E0B\u8F7D\u94FE\u63A5\u5931\u8D25",\u56FE\u7247\u9A8C\u8BC1\u672A\u901A\u8FC7:"\u56FE\u7247\u9A8C\u8BC1\u672A\u901A\u8FC7",\u670D\u52A1\u5668\u8FD4\u56DE\u72B6\u6001:"\u670D\u52A1\u5668\u8FD4\u56DE\u72B6\u6001",\u4E0A\u4F20\u56FE\u7247\u8FD4\u56DE\u7ED3\u679C\u9519\u8BEF:"\u4E0A\u4F20\u56FE\u7247\u8FD4\u56DE\u7ED3\u679C\u9519\u8BEF",\u8BF7\u66FF\u6362\u4E3A\u652F\u6301\u7684\u56FE\u7247\u7C7B\u578B:"\u8BF7\u66FF\u6362\u4E3A\u652F\u6301\u7684\u56FE\u7247\u7C7B\u578B",\u60A8\u63D2\u5165\u7684\u7F51\u7EDC\u56FE\u7247\u65E0\u6CD5\u8BC6\u522B:"\u60A8\u63D2\u5165\u7684\u7F51\u7EDC\u56FE\u7247\u65E0\u6CD5\u8BC6\u522B",\u60A8\u521A\u624D\u63D2\u5165\u7684\u56FE\u7247\u94FE\u63A5\u672A\u901A\u8FC7\u7F16\u8F91\u5668\u6821\u9A8C:"\u60A8\u521A\u624D\u63D2\u5165\u7684\u56FE\u7247\u94FE\u63A5\u672A\u901A\u8FC7\u7F16\u8F91\u5668\u6821\u9A8C",\u63D2\u5165\u89C6\u9891\u9519\u8BEF:"\u63D2\u5165\u89C6\u9891\u9519\u8BEF",\u89C6\u9891\u94FE\u63A5:"\u89C6\u9891\u94FE\u63A5",\u4E0D\u662F\u89C6\u9891:"\u4E0D\u662F\u89C6\u9891",\u89C6\u9891\u9A8C\u8BC1\u672A\u901A\u8FC7:"\u89C6\u9891\u9A8C\u8BC1\u672A\u901A\u8FC7",\u4E2A\u89C6\u9891:"\u4E2A\u89C6\u9891",\u4E0A\u4F20\u89C6\u9891\u8D85\u65F6:"\u4E0A\u4F20\u89C6\u9891\u8D85\u65F6",\u4E0A\u4F20\u89C6\u9891\u9519\u8BEF:"\u4E0A\u4F20\u89C6\u9891\u9519\u8BEF",\u4E0A\u4F20\u89C6\u9891\u5931\u8D25:"\u4E0A\u4F20\u89C6\u9891\u5931\u8D25",\u4E0A\u4F20\u89C6\u9891\u8FD4\u56DE\u7ED3\u679C\u9519\u8BEF:"\u4E0A\u4F20\u89C6\u9891\u8FD4\u56DE\u7ED3\u679C\u9519\u8BEF"}}},en:{wangEditor:{\u91CD\u7F6E:"reset",\u63D2\u5165:"insert",\u9ED8\u8BA4:"default",\u521B\u5EFA:"create",\u4FEE\u6539:"edit",\u5982:"like",\u8BF7\u8F93\u5165\u6B63\u6587:"please enter the text",menus:{title:{\u6807\u9898:"head",\u52A0\u7C97:"bold",\u5B57\u53F7:"font size",\u5B57\u4F53:"font family",\u659C\u4F53:"italic",\u4E0B\u5212\u7EBF:"underline",\u5220\u9664\u7EBF:"strikethrough",\u7F29\u8FDB:"indent",\u884C\u9AD8:"line heihgt",\u6587\u5B57\u989C\u8272:"font color",\u80CC\u666F\u8272:"background",\u94FE\u63A5:"link",\u5E8F\u5217:"numbered list",\u5BF9\u9F50:"align",\u5F15\u7528:"quote",\u8868\u60C5:"emoticons",\u56FE\u7247:"image",\u89C6\u9891:"media",\u8868\u683C:"table",\u4EE3\u7801:"code",\u5206\u5272\u7EBF:"split line",\u6062\u590D:"undo",\u64A4\u9500:"redo",\u5168\u5C4F:"fullscreen",\u53D6\u6D88\u5168\u5C4F:"cancel fullscreen",\u5F85\u529E\u4E8B\u9879:"todo"},dropListMenu:{\u8BBE\u7F6E\u6807\u9898:"title",\u80CC\u666F\u989C\u8272:"background",\u6587\u5B57\u989C\u8272:"font color",\u8BBE\u7F6E\u5B57\u53F7:"font size",\u8BBE\u7F6E\u5B57\u4F53:"font family",\u8BBE\u7F6E\u7F29\u8FDB:"indent",\u5BF9\u9F50\u65B9\u5F0F:"align",\u8BBE\u7F6E\u884C\u9AD8:"line heihgt",\u5E8F\u5217:"list",head:{\u6B63\u6587:"text"},indent:{\u589E\u52A0\u7F29\u8FDB:"indent",\u51CF\u5C11\u7F29\u8FDB:"outdent"},justify:{\u9760\u5DE6:"left",\u5C45\u4E2D:"center",\u9760\u53F3:"right",\u4E24\u7AEF:"justify"},list:{\u65E0\u5E8F\u5217\u8868:"unordered",\u6709\u5E8F\u5217\u8868:"ordered"}},panelMenus:{emoticon:{\u8868\u60C5:"emoji",\u624B\u52BF:"gesture"},image:{\u4E0A\u4F20\u56FE\u7247:"upload image",\u7F51\u7EDC\u56FE\u7247:"network image",\u56FE\u7247\u5730\u5740:"image link",\u56FE\u7247\u6587\u5B57\u8BF4\u660E:"image alt",\u8DF3\u8F6C\u94FE\u63A5:"hyperlink"},link:{\u94FE\u63A5:"link",\u94FE\u63A5\u6587\u5B57:"link text",\u53D6\u6D88\u94FE\u63A5:"unlink",\u67E5\u770B\u94FE\u63A5:"view links"},video:{\u63D2\u5165\u89C6\u9891:"insert video",\u4E0A\u4F20\u89C6\u9891:"upload local video"},table:{\u884C:"rows",\u5217:"columns",\u7684:" ",\u8868\u683C:"table",\u6DFB\u52A0\u884C:"insert row",\u5220\u9664\u884C:"delete row",\u6DFB\u52A0\u5217:"insert column",\u5220\u9664\u5217:"delete column",\u8BBE\u7F6E\u8868\u5934:"set header",\u53D6\u6D88\u8868\u5934:"cancel header",\u63D2\u5165\u8868\u683C:"insert table",\u5220\u9664\u8868\u683C:"delete table"},code:{\u5220\u9664\u4EE3\u7801:"delete code",\u4FEE\u6539\u4EE3\u7801:"edit code",\u63D2\u5165\u4EE3\u7801:"insert code"}}},validate:{\u5F20\u56FE\u7247:"images",\u5927\u4E8E:"greater than",\u56FE\u7247\u94FE\u63A5:"image link",\u4E0D\u662F\u56FE\u7247:"is not image",\u8FD4\u56DE\u7ED3\u679C:"return results",\u4E0A\u4F20\u56FE\u7247\u8D85\u65F6:"upload image timeout",\u4E0A\u4F20\u56FE\u7247\u9519\u8BEF:"upload image error",\u4E0A\u4F20\u56FE\u7247\u5931\u8D25:"upload image failed",\u63D2\u5165\u56FE\u7247\u9519\u8BEF:"insert image error",\u4E00\u6B21\u6700\u591A\u4E0A\u4F20:"once most at upload",\u4E0B\u8F7D\u94FE\u63A5\u5931\u8D25:"download link failed",\u56FE\u7247\u9A8C\u8BC1\u672A\u901A\u8FC7:"image validate failed",\u670D\u52A1\u5668\u8FD4\u56DE\u72B6\u6001:"server return status",\u4E0A\u4F20\u56FE\u7247\u8FD4\u56DE\u7ED3\u679C\u9519\u8BEF:"upload image return results error",\u8BF7\u66FF\u6362\u4E3A\u652F\u6301\u7684\u56FE\u7247\u7C7B\u578B:"please replace with a supported image type",\u60A8\u63D2\u5165\u7684\u7F51\u7EDC\u56FE\u7247\u65E0\u6CD5\u8BC6\u522B:"the network picture you inserted is not recognized",\u60A8\u521A\u624D\u63D2\u5165\u7684\u56FE\u7247\u94FE\u63A5\u672A\u901A\u8FC7\u7F16\u8F91\u5668\u6821\u9A8C:"the image link you just inserted did not pass the editor verification",\u63D2\u5165\u89C6\u9891\u9519\u8BEF:"insert video error",\u89C6\u9891\u94FE\u63A5:"video link",\u4E0D\u662F\u89C6\u9891:"is not video",\u89C6\u9891\u9A8C\u8BC1\u672A\u901A\u8FC7:"video validate failed",\u4E2A\u89C6\u9891:"videos",\u4E0A\u4F20\u89C6\u9891\u8D85\u65F6:"upload video timeout",\u4E0A\u4F20\u89C6\u9891\u9519\u8BEF:"upload video error",\u4E0A\u4F20\u89C6\u9891\u5931\u8D25:"upload video failed",\u4E0A\u4F20\u89C6\u9891\u8FD4\u56DE\u7ED3\u679C\u9519\u8BEF:"upload video return results error"}}}}}},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(6);function o(){return!(!r.UA.isIE()&&!r.UA.isOldEdge)}t.default={compatibleMode:o,historyMaxSize:30}},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(7);t.default={onlineVideoCheck:function(o){return!0},onlineVideoCallback:r.EMPTY_FN,showLinkVideo:!0,uploadVideoAccept:["mp4"],uploadVideoServer:"",uploadVideoMaxSize:1073741824,uploadVideoName:"",uploadVideoParams:{},uploadVideoParamsWithUrl:!1,uploadVideoHeaders:{},uploadVideoHooks:{},uploadVideoTimeout:72e5,withVideoCredentials:!1,customUploadVideo:null,customInsertVideo:null}},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(17));(0,o.default)(t,"__esModule",{value:!0});var a=n(2).__importDefault(n(3)),l=n(6),s=n(7),u=function(){function c(d){this._currentRange=null,this.editor=d}return c.prototype.getRange=function(){return this._currentRange},c.prototype.saveRange=function(d){if(d)this._currentRange=d;else{var f=window.getSelection();if(f.rangeCount!==0){var p=f.getRangeAt(0),m=this.getSelectionContainerElem(p);if(m!=null&&m.length&&m.attr("contenteditable")!=="false"&&!m.parentUntil("[contenteditable=false]")){var v=this.editor,g=v.$textElem;if(g.isContain(m)){var b;if(g.elems[0]===m.elems[0]&&(0,i.default)(b=g.html()).call(b)===s.EMPTY_P){var y=g.children(),w=y==null?void 0:y.last();v.selection.createRangeByElem(w,!0,!0),v.selection.restoreSelection()}this._currentRange=p}}}}},c.prototype.collapseRange=function(d){d===void 0&&(d=!1);var f=this._currentRange;f&&f.collapse(d)},c.prototype.getSelectionText=function(){var d=this._currentRange;return d?d.toString():""},c.prototype.getSelectionContainerElem=function(d){var f,p;if(f=d||this._currentRange)return p=f.commonAncestorContainer,a.default(p.nodeType===1?p:p.parentNode)},c.prototype.getSelectionStartElem=function(d){var f,p;if(f=d||this._currentRange)return p=f.startContainer,a.default(p.nodeType===1?p:p.parentNode)},c.prototype.getSelectionEndElem=function(d){var f,p;if(f=d||this._currentRange)return p=f.endContainer,a.default(p.nodeType===1?p:p.parentNode)},c.prototype.isSelectionEmpty=function(){var d=this._currentRange;return!(!d||!d.startContainer||d.startContainer!==d.endContainer||d.startOffset!==d.endOffset)},c.prototype.restoreSelection=function(){var d=window.getSelection(),f=this._currentRange;d&&f&&(d.removeAllRanges(),d.addRange(f))},c.prototype.createEmptyRange=function(){var d,f=this.editor,p=this.getRange();if(p&&this.isSelectionEmpty())try{l.UA.isWebkit()?(f.cmd.do("insertHTML","​"),p.setEnd(p.endContainer,p.endOffset+1),this.saveRange(p)):(d=a.default("<strong>​</strong>"),f.cmd.do("insertElem",d),this.createRangeByElem(d,!0))}catch{}},c.prototype.createRangeByElems=function(d,f){var p=window.getSelection?window.getSelection():document.getSelection();p==null||p.removeAllRanges();var m=document.createRange();m.setStart(d,0),m.setEnd(f,f.childNodes.length||1),this.saveRange(m),this.restoreSelection()},c.prototype.createRangeByElem=function(d,f,p){if(d.length){var m=d.elems[0],v=document.createRange();p?v.selectNodeContents(m):v.selectNode(m),f!=null&&(v.collapse(f),f||(this.saveRange(v),this.editor.selection.moveCursor(m))),this.saveRange(v)}},c.prototype.getSelectionRangeTopNodes=function(){var d,f,p=(d=this.getSelectionStartElem())===null||d===void 0?void 0:d.getNodeTop(this.editor),m=(f=this.getSelectionEndElem())===null||f===void 0?void 0:f.getNodeTop(this.editor);return this.recordSelectionNodes(a.default(p),a.default(m))},c.prototype.moveCursor=function(d,f){var p,m=this.getRange(),v=d.nodeType===3?(p=d.nodeValue)===null||p===void 0?void 0:p.length:d.childNodes.length;(l.UA.isFirefox||l.UA.isIE())&&v!==0&&(d.nodeType===3||d.childNodes[v-1].nodeName==="BR")&&(v-=1);var g=f??v;!m||d&&(m.setStart(d,g),m.setEnd(d,g),this.restoreSelection())},c.prototype.getCursorPos=function(){var d=window.getSelection();return d==null?void 0:d.anchorOffset},c.prototype.clearWindowSelectionRange=function(){var d=window.getSelection();d&&d.removeAllRanges()},c.prototype.recordSelectionNodes=function(d,f){var p=[],m=!0;try{for(var v=d,g=this.editor.$textElem;m;){var b=v==null?void 0:v.getNodeTop(this.editor);b.getNodeName()==="BODY"&&(m=!1),b.length>0&&(p.push(a.default(v)),f!=null&&f.equal(b)||g.equal(b)?m=!1:v=b.getNextSibling())}}catch{m=!1}return p},c.prototype.setRangeToElem=function(d){var f=this.getRange();f==null||f.setStart(d,0),f==null||f.setEnd(d,0)},c}();t.default=u},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2).__importDefault(n(3)),o=function(){function i(a){this.editor=a}return i.prototype.do=function(a,l){var s=this.editor;s.config.styleWithCSS&&document.execCommand("styleWithCSS",!1,"true");var u=s.selection;if(u.getRange()){switch(u.restoreSelection(),a){case"insertHTML":this.insertHTML(l);break;case"insertElem":this.insertElem(l);break;default:this.execCommand(a,l)}s.menus.changeActive(),u.saveRange(),u.restoreSelection()}},i.prototype.insertHTML=function(a){var l=this.editor,s=l.selection.getRange();if(s!=null){if(this.queryCommandSupported("insertHTML"))this.execCommand("insertHTML",a);else if(s.insertNode){if(s.deleteContents(),r.default(a).elems.length>0)s.insertNode(r.default(a).elems[0]);else{var u=document.createElement("p");u.appendChild(document.createTextNode(a)),s.insertNode(u)}l.selection.collapseRange()}}},i.prototype.insertElem=function(a){var l=this.editor.selection.getRange();l!=null&&l.insertNode&&(l.deleteContents(),l.insertNode(a.elems[0]))},i.prototype.execCommand=function(a,l){document.execCommand(a,!1,l)},i.prototype.queryCommandValue=function(a){return document.queryCommandValue(a)},i.prototype.queryCommandState=function(a){return document.queryCommandState(a)},i.prototype.queryCommandSupported=function(a){return document.queryCommandSupported(a)},i}();t.default=o},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(31)),a=r(n(4)),l=r(n(17)),s=r(n(27)),u=r(n(46));(0,o.default)(t,"__esModule",{value:!0});var c=n(2),d=c.__importDefault(n(3)),f=c.__importDefault(n(287)),p=n(6),m=c.__importDefault(n(299)),v=c.__importDefault(n(300)),g=n(7),b=function(){function y(w){this.editor=w,this.eventHooks={onBlurEvents:[],changeEvents:[],dropEvents:[],clickEvents:[],keydownEvents:[],keyupEvents:[],tabUpEvents:[],tabDownEvents:[],enterUpEvents:[],enterDownEvents:[],deleteUpEvents:[],deleteDownEvents:[],pasteEvents:[],linkClickEvents:[],codeClickEvents:[],textScrollEvents:[],toolbarClickEvents:[],imgClickEvents:[],imgDragBarMouseDownEvents:[],tableClickEvents:[],menuClickEvents:[],dropListMenuHoverEvents:[],splitLineEvents:[],videoClickEvents:[]}}return y.prototype.init=function(){this._saveRange(),this._bindEventHooks(),f.default(this)},y.prototype.togglePlaceholder=function(){var w,x=this.html(),_=(0,i.default)(w=this.editor.$textContainerElem).call(w,".placeholder");_.hide(),!this.editor.isComposing&&(!x||x===" ")&&_.show()},y.prototype.clear=function(){this.html(g.EMPTY_P)},y.prototype.html=function(w){var x=this.editor,_=x.$textElem;if(w==null){var E=_.html(),C=(E=(E=(E=(E=E.replace(/\u200b/gm,"")).replace(/<p><\/p>/gim,"")).replace(g.EMPTY_P_LAST_REGEX,"")).replace(g.EMPTY_P_REGEX,"<p>")).match(/<(img|br|hr|input)[^>]*>/gi);return C!==null&&(0,a.default)(C).call(C,function(T){T.match(/\/>/)||(E=E.replace(T,T.substring(0,T.length-1)+"/>"))}),E}(w=(0,l.default)(w).call(w))===""&&(w=g.EMPTY_P),(0,s.default)(w).call(w,"<")!==0&&(w="<p>"+w+"</p>"),_.html(w),x.initSelection()},y.prototype.setJSON=function(w){var x=v.default(w).children(),_=this.editor.$textElem;!x||_.replaceChildAll(x)},y.prototype.getJSON=function(){var w=this.editor.$textElem;return m.default(w)},y.prototype.text=function(w){var x=this.editor,_=x.$textElem;if(w==null){var E=_.text();return E=E.replace(/\u200b/gm,"")}_.text("<p>"+w+"</p>"),x.initSelection()},y.prototype.append=function(w){var x=this.editor;(0,s.default)(w).call(w,"<")!==0&&(w="<p>"+w+"</p>"),this.html(this.html()+w),x.initSelection()},y.prototype._saveRange=function(){var w=this.editor,x=w.$textElem,_=d.default(document);function E(){w.selection.saveRange(),w.menus.changeActive()}function C(){E(),x.off("click",C)}function T(){E(),_.off("mouseup",T)}function k(){_.on("mouseup",T),x.off("mouseleave",k)}x.on("keyup",E),x.on("click",C),x.on("mousedown",function(){x.on("mouseleave",k)}),x.on("mouseup",function(I){x.off("mouseleave",k),(0,u.default)(function(){w.selection.getRange()!==null&&E()},0)})},y.prototype._bindEventHooks=function(){var w=this.editor,x=w.$textElem,_=this.eventHooks;function E(C){C.preventDefault()}x.on("click",function(C){var T=_.clickEvents;(0,a.default)(T).call(T,function(k){return k(C)})}),x.on("keyup",function(C){if(C.keyCode===13){var T=_.enterUpEvents;(0,a.default)(T).call(T,function(k){return k(C)})}}),x.on("keyup",function(C){var T=_.keyupEvents;(0,a.default)(T).call(T,function(k){return k(C)})}),x.on("keydown",function(C){var T=_.keydownEvents;(0,a.default)(T).call(T,function(k){return k(C)})}),x.on("keyup",function(C){if(C.keyCode===8||C.keyCode===46){var T=_.deleteUpEvents;(0,a.default)(T).call(T,function(k){return k(C)})}}),x.on("keydown",function(C){if(C.keyCode===8||C.keyCode===46){var T=_.deleteDownEvents;(0,a.default)(T).call(T,function(k){return k(C)})}}),x.on("paste",function(C){if(!p.UA.isIE()){C.preventDefault();var T=_.pasteEvents;(0,a.default)(T).call(T,function(k){return k(C)})}}),x.on("keydown",function(C){(w.isFocus||w.isCompatibleMode)&&(C.ctrlKey||C.metaKey)&&C.keyCode===90&&(C.preventDefault(),C.shiftKey?w.history.restore():w.history.revoke())}),x.on("keyup",function(C){if(C.keyCode===9){C.preventDefault();var T=_.tabUpEvents;(0,a.default)(T).call(T,function(k){return k(C)})}}),x.on("keydown",function(C){if(C.keyCode===9){C.preventDefault();var T=_.tabDownEvents;(0,a.default)(T).call(T,function(k){return k(C)})}}),x.on("scroll",p.throttle(function(C){var T=_.textScrollEvents;(0,a.default)(T).call(T,function(k){return k(C)})},100)),d.default(document).on("dragleave",E).on("drop",E).on("dragenter",E).on("dragover",E),w.beforeDestroy(function(){d.default(document).off("dragleave",E).off("drop",E).off("dragenter",E).off("dragover",E)}),x.on("drop",function(C){C.preventDefault();var T=_.dropEvents;(0,a.default)(T).call(T,function(k){return k(C)})}),x.on("click",function(C){var T=null,k=C.target,I=d.default(k);if(I.getNodeName()==="A")T=I;else{var O=I.parentUntil("a");O!=null&&(T=O)}if(T){var F=_.linkClickEvents;(0,a.default)(F).call(F,function(N){return N(T)})}}),x.on("click",function(C){var T=null,k=C.target,I=d.default(k);if(I.getNodeName()==="IMG"&&!I.elems[0].getAttribute("data-emoji")&&(C.stopPropagation(),T=I),T){var O=_.imgClickEvents;(0,a.default)(O).call(O,function(F){return F(T)})}}),x.on("click",function(C){var T=null,k=C.target,I=d.default(k);if(I.getNodeName()==="PRE")T=I;else{var O=I.parentUntil("pre");O!==null&&(T=O)}if(T){var F=_.codeClickEvents;(0,a.default)(F).call(F,function(N){return N(T)})}}),x.on("click",function(C){var T=null,k=C.target,I=d.default(k);if(I.getNodeName()==="HR"&&(T=I),T){w.selection.createRangeByElem(T),w.selection.restoreSelection();var O=_.splitLineEvents;(0,a.default)(O).call(O,function(F){return F(T)})}}),w.$toolbarElem.on("click",function(C){var T=_.toolbarClickEvents;(0,a.default)(T).call(T,function(k){return k(C)})}),w.$textContainerElem.on("mousedown",function(C){var T=C.target;if(d.default(T).hasClass("w-e-img-drag-rb")){var k=_.imgDragBarMouseDownEvents;(0,a.default)(k).call(k,function(I){return I()})}}),x.on("click",function(C){var T=null,k=C.target;if(T=d.default(k).parentUntilEditor("TABLE",w,k)){var I=_.tableClickEvents;(0,a.default)(I).call(I,function(O){return O(T,C)})}}),x.on("keydown",function(C){if(C.keyCode===13){var T=_.enterDownEvents;(0,a.default)(T).call(T,function(k){return k(C)})}}),x.on("click",function(C){var T=null,k=C.target,I=d.default(k);if(I.getNodeName()==="VIDEO"&&(C.stopPropagation(),T=I),T){var O=_.videoClickEvents;(0,a.default)(O).call(O,function(F){return F(T)})}})},y}();t.default=b},function(e,t,n){var r=n(284);e.exports=r},function(e,t,n){var r=n(285),o=Array.prototype;e.exports=function(i){var a=i.find;return i===o||i instanceof Array&&a===o.find?r:a}},function(e,t,n){n(286);var r=n(15);e.exports=r("Array").find},function(e,t,n){var r=n(5),o=n(30).find,i=n(82),a=n(22),l="find",s=!0,u=a(l);l in[]&&Array(1)[l](function(){s=!1}),r({target:"Array",proto:!0,forced:s||!u},{find:function(c){return o(this,c,arguments.length>1?arguments[1]:void 0)}}),i(l)},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(288)),i=r.__importStar(n(289)),a=r.__importDefault(n(290)),l=r.__importDefault(n(291)),s=r.__importDefault(n(298));function u(c){var d=c.editor,f=c.eventHooks;o.default(d,f.enterUpEvents,f.enterDownEvents),i.default(d,f.deleteUpEvents,f.deleteDownEvents),i.cutToKeepP(d,f.keyupEvents),a.default(d,f.tabDownEvents),l.default(d,f.pasteEvents),s.default(d,f.imgClickEvents)}t.default=u},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(27));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=n(7),s=a.__importDefault(n(3));function u(c,d,f){function p(g){var b,y=s.default(l.EMPTY_P);y.insertBefore(g),(0,i.default)(b=g.html()).call(b,"<img")>=0?y.remove():(c.selection.createRangeByElem(y,!0,!0),c.selection.restoreSelection(),g.remove())}function m(){var g=c.$textElem,b=c.selection.getSelectionContainerElem(),y=b.parent();y.html()==="<code><br></code>"||b.getNodeName()==="FONT"&&b.text()===""&&b.attr("face")==="monospace"?p(y):y.equal(g)&&(b.getNodeName()==="P"&&b.attr("data-we-empty-p")===null||b.text()||p(b))}function v(g){var b;c.selection.saveRange((b=getSelection())===null||b===void 0?void 0:b.getRangeAt(0)),c.selection.getSelectionContainerElem().id===c.textElemId&&(g.preventDefault(),c.cmd.do("insertHTML","<p><br></p>"))}d.push(m),f.push(v)}t.default=u},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(17)),a=r(n(44));(0,o.default)(t,"__esModule",{value:!0}),t.cutToKeepP=void 0;var l=n(2),s=n(7),u=l.__importDefault(n(3));function c(f,p,m){function v(){var b=f.$textElem,y=f.$textElem.html(),w=f.$textElem.text(),x=(0,i.default)(y).call(y),_=["<p><br></p>","<br>",'<p data-we-empty-p=""></p>',s.EMPTY_P];/^\s*$/.test(w)&&(!x||(0,a.default)(_).call(_,x))&&(b.html(s.EMPTY_P),f.selection.createRangeByElem(b,!1,!0),f.selection.restoreSelection(),f.selection.moveCursor(b.getNode(),0))}function g(b){var y,w=f.$textElem;(0,i.default)(y=w.html().toLowerCase()).call(y)!==s.EMPTY_P||b.preventDefault()}p.push(v),m.push(g)}function d(f,p){function m(v){var g;if(v.keyCode===88){var b=f.$textElem,y=(0,i.default)(g=b.html().toLowerCase()).call(g);if(!y||y==="<br>"){var w=u.default(s.EMPTY_P);b.html(" "),b.append(w),f.selection.createRangeByElem(w,!1,!0),f.selection.restoreSelection(),f.selection.moveCursor(w.getNode(),0)}}}p.push(m)}t.cutToKeepP=d,t.default=c},function(e,t,n){function r(o,i){function a(){if(o.cmd.queryCommandSupported("insertHTML")){var l=o.selection.getSelectionContainerElem();if(l){var s=l.parent(),u=l.getNodeName(),c=s.getNodeName();u=="CODE"||c==="CODE"||c==="PRE"||/hljs/.test(c)?o.cmd.do("insertHTML",o.config.languageTab):o.cmd.do("insertHTML"," ")}}}i.push(a)}(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.default=r},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(17));(0,o.default)(t,"__esModule",{value:!0});var a=n(130),l=n(6),s=n(7);function u(m){var v,g=(0,i.default)(v=m.replace(/<div>/gim,"<p>").replace(/<\/div>/gim,"</p>")).call(v),b=document.createElement("div");return b.innerHTML=g,b.innerHTML.replace(/<p><\/p>/gim,"")}function c(m){return m.replace(/<br>|<br\/>/gm,`
| `).replace(/<[^>]+>/gm,"")}function d(m){var v;if(m==="")return!1;var g=document.createElement("div");return g.innerHTML=m,((v=g.firstChild)===null||v===void 0?void 0:v.nodeName)==="P"}function f(m){if(m==null||!m.length)return!1;var v=m.elems[0];return v.nodeName==="P"&&v.innerHTML==="<br>"}function p(m,v){function g(b){var y=m.config,w=y.pasteFilterStyle,x=y.pasteIgnoreImg,_=y.pasteTextHandle,E=a.getPasteHtml(b,w,x),C=a.getPasteText(b);C=C.replace(/\n/gm,"<br>");var T=m.selection.getSelectionContainerElem();if(T){var k=T==null?void 0:T.getNodeName(),I=T==null?void 0:T.getNodeTop(m),O="";if(I.elems[0]&&(O=I==null?void 0:I.getNodeName()),k==="CODE"||O==="PRE")return _&&l.isFunction(_)&&(C=""+(_(C)||"")),void m.cmd.do("insertHTML",c(C));if(s.urlRegex.test(C)&&w){_&&l.isFunction(_)&&(C=""+(_(C)||""));var F=s.urlRegex.exec(C)[0],N=C.replace(s.urlRegex,"");return m.cmd.do("insertHTML",'<a href="'+F+'" target="_blank">'+F+"</a>"+N)}if(E)try{if(_&&l.isFunction(_)&&(E=""+(_(E)||"")),/[\.\#\@]?\w+[ ]+\{[^}]*\}/.test(E)&&w)m.cmd.do("insertHTML",""+u(C));else{var B=u(E);if(d(B)){var P=m.$textElem;if(m.cmd.do("insertHTML",B),P.equal(T))return void m.selection.createEmptyRange();f(I)&&I.remove()}else/^<img [^>]*src=['"]([^'"]+)[^>]*>$/g.test(B)||m.cmd.do("insertHTML",B)}}catch{_&&l.isFunction(_)&&(C=""+(_(C)||"")),m.cmd.do("insertHTML",""+u(C))}}}v.push(g)}t.default=p},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(17)),a=r(n(4)),l=r(n(44));(0,o.default)(t,"__esModule",{value:!0});var s=n(2),u=n(293),c=s.__importDefault(n(297));function d(g){var b=/<span>.*?<\/span>/gi,y=/<span>(.*?)<\/span>/;return g.replace(b,function(w){var x=w.match(y);return x==null?"":x[1]})}function f(g,b){var y;return g=(0,i.default)(y=g.toLowerCase()).call(y),!!(u.IGNORE_TAGS.has(g)||b&&g==="img")}function p(g,b){var y="";y="<"+g;var w=[];return(0,a.default)(b).call(b,function(x){w.push(x.name+'="'+x.value+'"')}),w.length>0&&(y=y+" "+w.join(" ")),y=y+(u.EMPTY_TAGS.has(g)?"/":"")+">"}function m(g){return"</"+g+">"}function v(g,b,y){b===void 0&&(b=!0),y===void 0&&(y=!1);var w=[],x="";function _(T){(T=(0,i.default)(T).call(T))&&(u.EMPTY_TAGS.has(T)||(x=T))}function E(){x=""}new c.default().parse(g,{startElement:function(T,k){if(_(T),!f(T,y)){var I=u.NECESSARY_ATTRS.get(T)||[],O=[];(0,a.default)(k).call(k,function(N){var B=N.name;B!=="style"?(0,l.default)(I).call(I,B)!==!1&&O.push(N):b||O.push(N)});var F=p(T,O);w.push(F)}},characters:function(T){!T||f(x,y)||w.push(T)},endElement:function(T){if(!f(T,y)){var k=m(T);w.push(k),E()}},comment:function(T){_(T)}});var C=w.join("");return C=d(C)}t.default=v},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(131)),a=r(n(120));(0,o.default)(t,"__esModule",{value:!0}),t.TOP_LEVEL_TAGS=t.EMPTY_TAGS=t.NECESSARY_ATTRS=t.IGNORE_TAGS=void 0,t.IGNORE_TAGS=new i.default(["doctype","!doctype","html","head","meta","body","script","style","link","frame","iframe","title","svg","center","o:p"]),t.NECESSARY_ATTRS=new a.default([["img",["src","alt"]],["a",["href","target"]],["td",["colspan","rowspan"]],["th",["colspan","rowspan"]]]),t.EMPTY_TAGS=new i.default(["area","base","basefont","br","col","hr","img","input","isindex","embed"]),t.TOP_LEVEL_TAGS=new i.default(["h1","h2","h3","h4","h5","p","ul","ol","table","blockquote","pre","hr","form"])},function(e,t,n){var r=n(295);e.exports=r},function(e,t,n){n(296),n(61),n(50),n(54);var r=n(9);e.exports=r.Set},function(e,t,n){var r=n(121),o=n(123);e.exports=r("Set",function(i){return function(){return i(this,arguments.length?arguments[0]:void 0)}},o)},function(e,t){function n(){}n.prototype={handler:null,startTagRe:/^<([^>\s\/]+)((\s+[^=>\s]+(\s*=\s*((\"[^"]*\")|(\'[^']*\')|[^>\s]+))?)*)\s*\/?\s*>/m,endTagRe:/^<\/([^>\s]+)[^>]*>/m,attrRe:/([^=\s]+)(\s*=\s*((\"([^"]*)\")|(\'([^']*)\')|[^>\s]+))?/gm,parse:function(r,o){o&&(this.contentHandler=o);for(var i,a,l,s=!1,u=this;r.length>0;)r.substring(0,4)=="<!--"?(l=r.indexOf("-->"))!=-1?(this.contentHandler.comment(r.substring(4,l)),r=r.substring(l+3),s=!1):s=!0:r.substring(0,2)=="</"?this.endTagRe.test(r)?(i=RegExp.lastMatch,a=RegExp.rightContext,i.replace(this.endTagRe,function(){return u.parseEndTag.apply(u,arguments)}),r=a,s=!1):s=!0:r.charAt(0)=="<"&&(this.startTagRe.test(r)?(i=RegExp.lastMatch,a=RegExp.rightContext,i.replace(this.startTagRe,function(){return u.parseStartTag.apply(u,arguments)}),r=a,s=!1):s=!0),s&&((l=r.indexOf("<"))==-1?(this.contentHandler.characters(r),r=""):(this.contentHandler.characters(r.substring(0,l)),r=r.substring(l))),s=!0},parseStartTag:function(r,o,i){var a=this.parseAttributes(o,i);this.contentHandler.startElement(o,a)},parseEndTag:function(r,o){this.contentHandler.endElement(o)},parseAttributes:function(r,o){var i=this,a=[];return o.replace(this.attrRe,function(l,s,u,c,d,f,p,m){a.push(i.parseAttribute(r,l,s,u,c,d,f,p,m))}),a},parseAttribute:function(r,o,i){var a="";return arguments[7]?a=arguments[8]:arguments[5]?a=arguments[6]:arguments[3]&&(a=arguments[4]),{name:i,value:a||arguments[3]?a:null}}},e.exports=n},function(e,t,n){function r(o,i){function a(l){o.selection.createRangeByElem(l),o.selection.restoreSelection()}i.push(a)}(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.default=r},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=n(6),s=a.__importDefault(n(3));function u(c){var d=[],f=c.childNodes()||[];return(0,i.default)(f).call(f,function(p){var m,v=p.nodeType;if(v===3&&(m=p.textContent||"",m=l.replaceHtmlSymbol(m)),v===1){(m={}).tag=p.nodeName.toLowerCase();for(var g=[],b=p.attributes,y=b.length||0,w=0;w<y;w++){var x=b[w];g.push({name:x.name,value:x.value})}m.attrs=g,m.children=u(s.default(p))}m&&d.push(m)}),d}t.default=u},function(e,t,n){var r=n(0),o=r(n(92)),i=r(n(1)),a=r(n(4));(0,i.default)(t,"__esModule",{value:!0});var l=n(2).__importDefault(n(3));function s(u,c){c===void 0&&(c=document.createElement("div"));var d=c;return(0,a.default)(u).call(u,function(f){var p,m;typeof f=="string"&&(p=document.createTextNode(f)),(0,o.default)(f)==="object"&&(p=document.createElement(f.tag),(0,a.default)(m=f.attrs).call(m,function(v){l.default(p).attr(v.name,v.value)}),f.children&&f.children.length>0&&s(f.children,p.getRootNode())),p&&d.appendChild(p)}),l.default(d)}t.default=s},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(89)),a=r(n(70)),l=r(n(44)),s=r(n(302)),u=r(n(4)),c=r(n(94)),d=r(n(132)),f=r(n(46)),p=r(n(57));(0,o.default)(t,"__esModule",{value:!0});var m=n(2),v=m.__importDefault(n(87)),g=m.__importDefault(n(314)),b=m.__importDefault(n(3)),y=function(){function w(x){this.editor=x,this.menuList=[],this.constructorList=g.default}return w.prototype.extend=function(x,_){!_||typeof _!="function"||(this.constructorList[x]=_)},w.prototype.init=function(){var x,_,E=this,C=this.editor.config,T=C.excludeMenus;(0,i.default)(T)===!1&&(T=[]),C.menus=(0,a.default)(x=C.menus).call(x,function(P){return(0,l.default)(T).call(T,P)===!1});var k=(0,s.default)(v.default.globalCustomMenuConstructorList);k=(0,a.default)(k).call(k,function(P){return(0,l.default)(T).call(T,P)}),(0,u.default)(k).call(k,function(P){delete v.default.globalCustomMenuConstructorList[P]}),(0,u.default)(_=C.menus).call(_,function(P){var V=E.constructorList[P];E._initMenuList(P,V)});for(var I=0,O=(0,c.default)(v.default.globalCustomMenuConstructorList);I<O.length;I++){var F=O[I],N=F[0],B=F[1];this._initMenuList(N,B)}this._addToToolbar(),C.showMenuTooltips&&this._bindMenuTooltips()},w.prototype._initMenuList=function(x,_){var E;if(_!=null&&typeof _=="function")if((0,d.default)(E=this.menuList).call(E,function(T){return T.key===x}))console.warn("\u83DC\u5355\u540D\u79F0\u91CD\u590D:"+x);else{var C=new _(this.editor);C.key=x,this.menuList.push(C)}},w.prototype._bindMenuTooltips=function(){var x=this.editor,_=x.$toolbarElem,E=x.config.menuTooltipPosition,C=b.default('<div class="w-e-menu-tooltip w-e-menu-tooltip-'+E+`">
| <div class="w-e-menu-tooltip-item-wrapper">
| <div></div>
| </div>
| </div>`);C.css("visibility","hidden"),_.append(C),C.css("z-index",x.zIndex.get("tooltip"));var T=0;function k(){T&&clearTimeout(T)}function I(){k(),C.css("visibility","hidden")}_.on("mouseover",function(O){var F,N,B=O.target,P=b.default(B);if(P.isContain(_))I();else{if(P.parentUntil(".w-e-droplist")!=null)I();else if(P.attr("data-title"))F=P.attr("data-title"),N=P;else{var V=P.parentUntil(".w-e-menu");V!=null&&(F=V.attr("data-title"),N=V)}if(F&&N){k();var L=N.getOffsetData();C.text(x.i18next.t("menus.title."+F));var H=C.getOffsetData(),U=L.left+L.width/2-H.width/2;C.css("left",U+"px"),E==="up"?C.css("top",L.top-H.height-8+"px"):E==="down"&&C.css("top",L.top+L.height+8+"px"),T=(0,f.default)(function(){C.css("visibility","visible")},200)}else I()}}).on("mouseleave",function(){I()})},w.prototype._addToToolbar=function(){var x,_=this.editor.$toolbarElem;(0,u.default)(x=this.menuList).call(x,function(E){var C=E.$elem;C&&_.append(C)})},w.prototype.menuFind=function(x){for(var _=this.menuList,E=0,C=_.length;E<C;E++)if(_[E].key===x)return _[E];return _[0]},w.prototype.changeActive=function(){var x;(0,u.default)(x=this.menuList).call(x,function(_){var E;(0,f.default)((0,p.default)(E=_.tryChangeActive).call(E,_),100)})},w}();t.default=y},function(e,t,n){e.exports=n(303)},function(e,t,n){var r=n(304);e.exports=r},function(e,t,n){n(305);var r=n(9);e.exports=r.Object.keys},function(e,t,n){var r=n(5),o=n(29),i=n(52);r({target:"Object",stat:!0,forced:n(11)(function(){i(1)})},{keys:function(a){return i(o(a))}})},function(e,t,n){var r=n(307);e.exports=r},function(e,t,n){n(308);var r=n(9);e.exports=r.Object.entries},function(e,t,n){var r=n(5),o=n(309).entries;r({target:"Object",stat:!0},{entries:function(i){return o(i)}})},function(e,t,n){var r=n(14),o=n(52),i=n(28),a=n(59).f,l=function(s){return function(u){for(var c,d=i(u),f=o(d),p=f.length,m=0,v=[];p>m;)c=f[m++],(!r||a.call(d,c))&&v.push(s?[c,d[c]]:d[c]);return v}};e.exports={entries:l(!0),values:l(!1)}},function(e,t,n){var r=n(311);e.exports=r},function(e,t,n){var r=n(312),o=Array.prototype;e.exports=function(i){var a=i.some;return i===o||i instanceof Array&&a===o.some?r:a}},function(e,t,n){n(313);var r=n(15);e.exports=r("Array").some},function(e,t,n){var r=n(5),o=n(30).some,i=n(67),a=n(22),l=i("some"),s=a("some");r({target:"Array",proto:!0,forced:!l||!s},{some:function(u){return o(this,u,arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(315)),i=r.__importDefault(n(316)),a=r.__importDefault(n(321)),l=r.__importDefault(n(326)),s=r.__importDefault(n(327)),u=r.__importDefault(n(328)),c=r.__importDefault(n(329)),d=r.__importDefault(n(331)),f=r.__importDefault(n(333)),p=r.__importDefault(n(334)),m=r.__importDefault(n(337)),v=r.__importDefault(n(338)),g=r.__importDefault(n(339)),b=r.__importDefault(n(350)),y=r.__importDefault(n(365)),w=r.__importDefault(n(369)),x=r.__importDefault(n(137)),_=r.__importDefault(n(378)),E=r.__importDefault(n(380)),C=r.__importDefault(n(381)),T=r.__importDefault(n(382)),k=r.__importDefault(n(401)),I=r.__importDefault(n(406)),O=r.__importDefault(n(409));t.default={bold:o.default,head:i.default,italic:l.default,link:a.default,underline:s.default,strikeThrough:u.default,fontName:c.default,fontSize:d.default,justify:f.default,quote:p.default,backColor:m.default,foreColor:v.default,video:g.default,image:b.default,indent:y.default,emoticon:w.default,list:x.default,lineHeight:_.default,undo:E.default,redo:C.default,table:T.default,code:k.default,splitLine:I.default,todo:O.default}},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(23)),i=r.__importDefault(n(3)),a=function(l){function s(u){var c=i.default(`<div class="w-e-menu" data-title="\u52A0\u7C97">
| <i class="w-e-icon-bold"></i>
| </div>`);return l.call(this,c,u)||this}return r.__extends(s,l),s.prototype.clickHandler=function(){var u=this.editor,c=u.selection.isSelectionEmpty();c&&u.selection.createEmptyRange(),u.cmd.do("bold"),c&&(u.selection.collapseRange(),u.selection.restoreSelection())},s.prototype.tryChangeActive=function(){this.editor.cmd.queryCommandState("bold")?this.active():this.unActive()},s}(o.default);t.default=a},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(27)),a=r(n(31)),l=r(n(4)),s=r(n(317)),u=r(n(44));(0,o.default)(t,"__esModule",{value:!0});var c=n(2),d=c.__importDefault(n(24)),f=c.__importDefault(n(3)),p=n(6),m=n(7),v=function(g){function b(y){var w=this,x=f.default('<div class="w-e-menu" data-title="\u6807\u9898"><i class="w-e-icon-header"></i></div>'),_={width:100,title:"\u8BBE\u7F6E\u6807\u9898",type:"list",list:[{$elem:f.default("<h1>H1</h1>"),value:"<h1>"},{$elem:f.default("<h2>H2</h2>"),value:"<h2>"},{$elem:f.default("<h3>H3</h3>"),value:"<h3>"},{$elem:f.default("<h4>H4</h4>"),value:"<h4>"},{$elem:f.default("<h5>H5</h5>"),value:"<h5>"},{$elem:f.default("<p>"+y.i18next.t("menus.dropListMenu.head.\u6B63\u6587")+"</p>"),value:"<p>"}],clickHandler:function(E){w.command(E)}};return w=g.call(this,x,y,_)||this,y.config.onCatalogChange&&(w.oldCatalogs=[],w.addListenerCatalog(),w.getCatalogs()),w}return c.__extends(b,g),b.prototype.command=function(y){var w=this.editor,x=w.selection.getSelectionContainerElem();if(x&&w.$textElem.equal(x))this.setMultilineHead(y);else{var _;if((0,i.default)(_=["OL","UL","LI","TABLE","TH","TR","CODE","HR"]).call(_,f.default(x).getNodeName())>-1)return;w.cmd.do("formatBlock",y)}y!=="<p>"&&this.addUidForSelectionElem()},b.prototype.addUidForSelectionElem=function(){var y=this.editor.selection.getSelectionContainerElem(),w=p.getRandomCode();f.default(y).attr("id",w)},b.prototype.addListenerCatalog=function(){var y=this;this.editor.txt.eventHooks.changeEvents.push(function(){y.getCatalogs()})},b.prototype.getCatalogs=function(){var y=this.editor,w=this.editor.$textElem,x=y.config.onCatalogChange,_=(0,a.default)(w).call(w,"h1,h2,h3,h4,h5"),E=[];(0,l.default)(_).call(_,function(C,T){var k=f.default(C),I=k.attr("id"),O=k.getNodeName(),F=k.text();I||(I=p.getRandomCode(),k.attr("id",I)),F&&E.push({tag:O,id:I,text:F})}),(0,s.default)(this.oldCatalogs)!==(0,s.default)(E)&&(this.oldCatalogs=E,x&&x(E))},b.prototype.setMultilineHead=function(y){var w,x,_=this,E=this.editor,C=E.selection,T=(w=C.getSelectionContainerElem())===null||w===void 0?void 0:w.elems[0],k=["IMG","VIDEO","TABLE","TH","TR","UL","OL","PRE","HR","BLOCKQUOTE"],I=f.default(C.getSelectionStartElem()),O=f.default(C.getSelectionEndElem());O.elems[0].outerHTML===f.default(m.EMPTY_P).elems[0].outerHTML&&!O.elems[0].nextSibling&&(O=O.prev());var F=[];F.push(I.getNodeTop(E));var N=[],B=(x=C.getRange())===null||x===void 0?void 0:x.commonAncestorContainer.childNodes;B==null||(0,l.default)(B).call(B,function(L,H){L===F[0].getNode()&&N.push(H),L===O.getNodeTop(E).getNode()&&N.push(H)});for(var P=0;F[P].getNode()!==O.getNodeTop(E).getNode();){if(!F[P].elems[0])return;var V=f.default(F[P].next().getNode());F.push(V),P++}F==null||(0,l.default)(F).call(F,function(L,H){if(!_.hasTag(L,k)){var U=f.default(y),G=L.parent().getNode();U.html(""+L.html()),G.insertBefore(U.getNode(),L.getNode()),L.remove()}}),C.createRangeByElems(T.children[N[0]],T.children[N[1]])},b.prototype.hasTag=function(y,w){var x,_=this;if(!y)return!1;if((0,u.default)(w).call(w,y==null?void 0:y.getNodeName()))return!0;var E=!1;return(x=y.children())===null||x===void 0||(0,l.default)(x).call(x,function(C){E=_.hasTag(f.default(C),w)}),E},b.prototype.tryChangeActive=function(){var y=/^h/i,w=this.editor.cmd.queryCommandValue("formatBlock");y.test(w)?this.active():this.unActive()},b}(d.default);t.default=v},function(e,t,n){e.exports=n(318)},function(e,t,n){var r=n(319);e.exports=r},function(e,t,n){n(320);var r=n(9);r.JSON||(r.JSON={stringify:JSON.stringify}),e.exports=function(o,i,a){return r.JSON.stringify.apply(null,arguments)}},function(e,t,n){var r=n(5),o=n(35),i=n(11),a=o("JSON","stringify"),l=/[\uD800-\uDFFF]/g,s=/^[\uD800-\uDBFF]$/,u=/^[\uDC00-\uDFFF]$/,c=function(f,p,m){var v=m.charAt(p-1),g=m.charAt(p+1);return s.test(f)&&!u.test(g)||u.test(f)&&!s.test(v)?"\\u"+f.charCodeAt(0).toString(16):f},d=i(function(){return a("\uDF06\uD834")!=='"\uDF06\uD834"'||a("\uDEAD")!=='"\uDEAD"'});a&&r({target:"JSON",stat:!0,forced:d},{stringify:function(f,p,m){var v=a.apply(null,arguments);return typeof v=="string"?v.replace(l,c):v}})},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(17));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=a.__importDefault(n(37)),s=a.__importDefault(n(3)),u=a.__importDefault(n(322)),c=a.__importDefault(n(134)),d=a.__importDefault(n(32)),f=a.__importDefault(n(324)),p=n(7),m=function(v){function g(b){var y=this,w=s.default('<div class="w-e-menu" data-title="\u94FE\u63A5"><i class="w-e-icon-link"></i></div>');return y=v.call(this,w,b)||this,f.default(b),y}return a.__extends(g,v),g.prototype.clickHandler=function(){var b,y=this.editor,w=y.selection.getSelectionContainerElem(),x=y.$textElem,_=x.html();if((0,i.default)(_).call(_)===p.EMPTY_P){var E=x.children();y.selection.createRangeByElem(E,!0,!0),w=y.selection.getSelectionContainerElem()}if(!w||!y.$textElem.equal(w))if(this.isActive){if(!(b=y.selection.getSelectionContainerElem()))return;this.createPanel(b.text(),b.attr("href"))}else y.selection.isSelectionEmpty()?this.createPanel("",""):this.createPanel(y.selection.getSelectionText(),"")},g.prototype.createPanel=function(b,y){var w=u.default(this.editor,b,y);new d.default(this,w).create()},g.prototype.tryChangeActive=function(){var b=this.editor;c.default(b)?this.active():this.unActive()},g}(l.default);t.default=m},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(17));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=n(6),s=a.__importDefault(n(3)),u=a.__importDefault(n(134)),c=n(323);function d(f,p,m){var v,g=l.getRandom("input-link"),b=l.getRandom("input-text"),y=l.getRandom("btn-ok"),w=l.getRandom("btn-del"),x=u.default(f)?"inline-block":"none";function _(){if(u.default(f)){var I=f.selection.getSelectionContainerElem();!I||(f.selection.createRangeByElem(I),f.selection.restoreSelection(),v=I)}}function E(I,O){var F=new RegExp(/(<\/*ul>)|(<\/*li>)|(<\/*ol>)/g);I=I.replace(F,""),u.default(f)&&_(),f.cmd.do("insertHTML",'<a href="'+O+'" target="_blank">'+I+"</a>")}function C(){if(u.default(f)){_();var I=v.text();f.cmd.do("insertHTML","<span>"+I+"</span>")}}function T(I,O){var F=f.config.linkCheck(I,O);if(F!==void 0){if(F===!0)return!0;f.config.customAlert(F,"warning")}return!1}var k={width:300,height:0,tabs:[{title:f.i18next.t("menus.panelMenus.link.\u94FE\u63A5"),tpl:`<div>
| <input
| id="`+b+`"
| type="text"
| class="block"
| value="`+p+`"
| placeholder="`+f.i18next.t("menus.panelMenus.link.\u94FE\u63A5\u6587\u5B57")+`"/>
| </td>
| <input
| id="`+g+`"
| type="text"
| class="block"
| value="`+m+`"
| placeholder="`+f.i18next.t("\u5982")+` https://..."/>
| </td>
| <div class="w-e-button-container">
| <button type="button" id="`+y+`" class="right">
| `+f.i18next.t("\u63D2\u5165")+`
| </button>
| <button type="button" id="`+w+'" class="gray right" style="display:'+x+`">
| `+f.i18next.t("menus.panelMenus.link.\u53D6\u6D88\u94FE\u63A5")+`
| </button>
| </div>
| </div>`,events:[{selector:"#"+y,type:"click",fn:function(){var I,O,F,N;f.selection.restoreSelection();var B=f.selection.getSelectionRangeTopNodes()[0].getNode(),P=window.getSelection(),V=s.default("#"+g),L=s.default("#"+b),H=(0,i.default)(I=V.val()).call(I),U=(0,i.default)(O=L.val()).call(O),G="";P&&(P==null||!P.isCollapsed)&&(G=(F=c.insertHtml(P,B))===null||F===void 0?void 0:(0,i.default)(F).call(F));var z=G==null?void 0:G.replace(/<.*?>/g,""),$=(N=z==null?void 0:z.length)!==null&&N!==void 0?N:0;if($<=U.length){var W=U.substring(0,$),K=U.substring($);z===W&&(U=G+K)}if(H&&(U||(U=H),T(U,H)))return E(U,H),!0},bindEnter:!0},{selector:"#"+w,type:"click",fn:function(){return C(),!0}}]}]};return k}t.default=d},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));function a(f,p){var m=f,v=f;do{if(m.textContent===p)break;v=m,m.parentNode&&(m=m==null?void 0:m.parentNode)}while((m==null?void 0:m.nodeName)!=="P");return v}function l(f,p){var m=f.nodeName,v="";if(f.nodeType===3||/^(h|H)[1-6]$/.test(m))return p;if(f.nodeType===1){var g=f.getAttribute("style"),b=f.getAttribute("face"),y=f.getAttribute("color");g&&(v=v+' style="'+g+'"'),b&&(v=v+' face="'+b+'"'),y&&(v=v+' color="'+y+'"')}return"<"+(m=m.toLowerCase())+v+">"+p+"</"+m+">"}function s(f,p,m,v){var g,b=(g=p.textContent)===null||g===void 0?void 0:g.substring(m,v),y=p,w="";do b=w=l(y,b??""),y=y==null?void 0:y.parentElement;while(y&&y.textContent!==f);return w}function u(f,p){var m,v,g,b,y,w=f.anchorNode,x=f.focusNode,_=f.anchorOffset,E=f.focusOffset,C=(m=p.textContent)!==null&&m!==void 0?m:"",T=c(p),k="",I="",O="",F=w,N=x,B=w;if(w!=null&&w.isEqualNode(x??null)){var P=s(C,w,_,E);return P=d(T,P)}for(w&&(k=s(C,w,_??0)),x&&(O=s(C,x,0,E)),w&&(F=a(w,C)),x&&(N=a(x,C)),B=(v=F==null?void 0:F.nextSibling)!==null&&v!==void 0?v:w;B==null||!B.isEqualNode(N??null);){if((B==null?void 0:B.nodeName)==="#text")I+=B==null?void 0:B.textContent;else{var V=(b=(g=B==null?void 0:B.firstChild)===null||g===void 0?void 0:g.parentElement)===null||b===void 0?void 0:b.innerHTML;B&&(I+=l(B,V??""))}var L=(y=B==null?void 0:B.nextSibling)!==null&&y!==void 0?y:B;if(L===B)break;B=L}return d(T,""+k+I+O)}function c(f){for(var p,m=(p=f.textContent)!==null&&p!==void 0?p:"",v=[];(f==null?void 0:f.textContent)===m;)f.nodeName!=="P"&&f.nodeName!=="TABLE"&&v.push(f),f=f.childNodes[0];return v}function d(f,p){return(0,i.default)(f).call(f,function(m){p=l(m,p)}),p}(0,o.default)(t,"__esModule",{value:!0}),t.insertHtml=t.createPartHtml=t.makeHtmlString=t.getTopNode=void 0,t.getTopNode=a,t.makeHtmlString=l,t.createPartHtml=s,t.insertHtml=u},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2).__importDefault(n(325));function o(i){r.default(i)}t.default=o},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(3)),i=r.__importDefault(n(38));function a(s){var u;function c(f){var p=[{$elem:o.default("<span>"+s.i18next.t("menus.panelMenus.link.\u67E5\u770B\u94FE\u63A5")+"</span>"),onClick:function(m,v){var g=v.attr("href");return window.open(g,"_target"),!0}},{$elem:o.default("<span>"+s.i18next.t("menus.panelMenus.link.\u53D6\u6D88\u94FE\u63A5")+"</span>"),onClick:function(m,v){var g,b;m.selection.createRangeByElem(v),m.selection.restoreSelection();var y=v.childNodes();if((y==null?void 0:y.getNodeName())==="IMG"){var w=(b=(g=m.selection.getSelectionContainerElem())===null||g===void 0?void 0:g.children())===null||b===void 0?void 0:b.elems[0].children[0];m.cmd.do("insertHTML",`<img
| src=`+(w==null?void 0:w.getAttribute("src"))+`
| style=`+(w==null?void 0:w.getAttribute("style"))+">")}else{var x=v.text();m.cmd.do("insertHTML","<span>"+x+"</span>")}return!0}}];(u=new i.default(s,f,p)).create()}function d(){u&&(u.remove(),u=null)}return{showLinkTooltip:c,hideLinkTooltip:d}}function l(s){var u=a(s),c=u.showLinkTooltip,d=u.hideLinkTooltip;s.txt.eventHooks.linkClickEvents.push(c),s.txt.eventHooks.clickEvents.push(d),s.txt.eventHooks.keyupEvents.push(d),s.txt.eventHooks.toolbarClickEvents.push(d),s.txt.eventHooks.menuClickEvents.push(d),s.txt.eventHooks.textScrollEvents.push(d)}t.default=l},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(23)),i=r.__importDefault(n(3)),a=function(l){function s(u){var c=i.default(`<div class="w-e-menu" data-title="\u659C\u4F53">
| <i class="w-e-icon-italic"></i>
| </div>`);return l.call(this,c,u)||this}return r.__extends(s,l),s.prototype.clickHandler=function(){var u=this.editor,c=u.selection.isSelectionEmpty();c&&u.selection.createEmptyRange(),u.cmd.do("italic"),c&&(u.selection.collapseRange(),u.selection.restoreSelection())},s.prototype.tryChangeActive=function(){this.editor.cmd.queryCommandState("italic")?this.active():this.unActive()},s}(o.default);t.default=a},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(23)),i=r.__importDefault(n(3)),a=function(l){function s(u){var c=i.default(`<div class="w-e-menu" data-title="\u4E0B\u5212\u7EBF">
| <i class="w-e-icon-underline"></i>
| </div>`);return l.call(this,c,u)||this}return r.__extends(s,l),s.prototype.clickHandler=function(){var u=this.editor,c=u.selection.isSelectionEmpty();c&&u.selection.createEmptyRange(),u.cmd.do("underline"),c&&(u.selection.collapseRange(),u.selection.restoreSelection())},s.prototype.tryChangeActive=function(){this.editor.cmd.queryCommandState("underline")?this.active():this.unActive()},s}(o.default);t.default=a},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(23)),i=r.__importDefault(n(3)),a=function(l){function s(u){var c=i.default(`<div class="w-e-menu" data-title="\u5220\u9664\u7EBF">
| <i class="w-e-icon-strikethrough"></i>
| </div>`);return l.call(this,c,u)||this}return r.__extends(s,l),s.prototype.clickHandler=function(){var u=this.editor,c=u.selection.isSelectionEmpty();c&&u.selection.createEmptyRange(),u.cmd.do("strikeThrough"),c&&(u.selection.collapseRange(),u.selection.restoreSelection())},s.prototype.tryChangeActive=function(){this.editor.cmd.queryCommandState("strikeThrough")?this.active():this.unActive()},s}(o.default);t.default=a},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(24)),i=r.__importDefault(n(3)),a=r.__importDefault(n(330)),l=function(s){function u(c){var d=this,f=i.default(`<div class="w-e-menu" data-title="\u5B57\u4F53">
| <i class="w-e-icon-font"></i>
| </div>`),p={width:100,title:"\u8BBE\u7F6E\u5B57\u4F53",type:"list",list:new a.default(c.config.fontNames).getItemList(),clickHandler:function(m){d.command(m)}};return d=s.call(this,f,c,p)||this}return r.__extends(u,s),u.prototype.command=function(c){var d,f=this.editor,p=f.selection.isSelectionEmpty(),m=(d=f.selection.getSelectionContainerElem())===null||d===void 0?void 0:d.elems[0];if(m!=null){var v=(m==null?void 0:m.nodeName.toLowerCase())!=="p",g=(m==null?void 0:m.getAttribute("face"))===c;if(p){if(v&&!g){var b=f.selection.getSelectionRangeTopNodes();f.selection.createRangeByElem(b[0]),f.selection.moveCursor(b[0].elems[0])}f.selection.setRangeToElem(m),f.selection.createEmptyRange()}f.cmd.do("fontName",c),p&&(f.selection.collapseRange(),f.selection.restoreSelection())}},u.prototype.tryChangeActive=function(){},u}(o.default);t.default=l},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=n(2).__importDefault(n(3)),l=function(){function s(u){var c=this;this.itemList=[],(0,i.default)(u).call(u,function(d){var f=typeof d=="string"?d:d.value,p=typeof d=="string"?d:d.name;c.itemList.push({$elem:a.default(`<p style="font-family:'`+f+`'">`+p+"</p>"),value:p})})}return s.prototype.getItemList=function(){return this.itemList},s}();t.default=l},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(24)),i=r.__importDefault(n(3)),a=r.__importDefault(n(332)),l=function(s){function u(c){var d=this,f=i.default(`<div class="w-e-menu" data-title="\u5B57\u53F7">
| <i class="w-e-icon-text-heigh"></i>
| </div>`),p={width:160,title:"\u8BBE\u7F6E\u5B57\u53F7",type:"list",list:new a.default(c.config.fontSizes).getItemList(),clickHandler:function(m){d.command(m)}};return d=s.call(this,f,c,p)||this}return r.__extends(u,s),u.prototype.command=function(c){var d,f=this.editor,p=f.selection.isSelectionEmpty();((d=f.selection.getSelectionContainerElem())===null||d===void 0?void 0:d.elems[0])!=null&&(f.cmd.do("fontSize",c),p&&(f.selection.collapseRange(),f.selection.restoreSelection()))},u.prototype.tryChangeActive=function(){},u}(o.default);t.default=l},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2).__importDefault(n(3)),o=function(){function i(a){for(var l in this.itemList=[],a){var s=a[l];this.itemList.push({$elem:r.default('<p style="font-size:'+l+'">'+s.name+"</p>"),value:s.value})}}return i.prototype.getItemList=function(){return this.itemList},i}();t.default=o},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4)),a=r(n(27));(0,o.default)(t,"__esModule",{value:!0});var l=n(2),s=l.__importDefault(n(24)),u=l.__importDefault(n(3)),c=["LI"],d=["UL","BLOCKQUOTE"],f=function(p){function m(v){var g=this,b=u.default('<div class="w-e-menu" data-title="\u5BF9\u9F50"><i class="w-e-icon-paragraph-left"></i></div>'),y={width:100,title:"\u5BF9\u9F50\u65B9\u5F0F",type:"list",list:[{$elem:u.default(`<p>
| <i class="w-e-icon-paragraph-left w-e-drop-list-item"></i>
| `+v.i18next.t("menus.dropListMenu.justify.\u9760\u5DE6")+`
| </p>`),value:"left"},{$elem:u.default(`<p>
| <i class="w-e-icon-paragraph-center w-e-drop-list-item"></i>
| `+v.i18next.t("menus.dropListMenu.justify.\u5C45\u4E2D")+`
| </p>`),value:"center"},{$elem:u.default(`<p>
| <i class="w-e-icon-paragraph-right w-e-drop-list-item"></i>
| `+v.i18next.t("menus.dropListMenu.justify.\u9760\u53F3")+`
| </p>`),value:"right"},{$elem:u.default(`<p>
| <i class="w-e-icon-paragraph-justify w-e-drop-list-item"></i>
| `+v.i18next.t("menus.dropListMenu.justify.\u4E24\u7AEF")+`
| </p>`),value:"justify"}],clickHandler:function(w){g.command(w)}};return g=p.call(this,b,v,y)||this}return l.__extends(m,p),m.prototype.command=function(v){var g=this.editor,b=g.selection,y=b.getSelectionContainerElem();b.saveRange();var w=g.selection.getSelectionRangeTopNodes();if(y!=null&&y.length)if(this.isSpecialNode(y,w[0])||this.isSpecialTopNode(w[0])){var x=this.getSpecialNodeUntilTop(y,w[0]);if(x==null)return;u.default(x).css("text-align",v)}else(0,i.default)(w).call(w,function(_){_.css("text-align",v)});b.restoreSelection()},m.prototype.getSpecialNodeUntilTop=function(v,g){for(var b=v.elems[0],y=g.elems[0];b!=null;){if((0,a.default)(c).call(c,b==null?void 0:b.nodeName)!==-1||b.parentNode===y)return b;b=b.parentNode}return b},m.prototype.isSpecialNode=function(v,g){var b=this.getSpecialNodeUntilTop(v,g);return b!=null&&(0,a.default)(c).call(c,b.nodeName)!==-1},m.prototype.isSpecialTopNode=function(v){var g;return v!=null&&(0,a.default)(d).call(d,(g=v.elems[0])===null||g===void 0?void 0:g.nodeName)!==-1},m.prototype.tryChangeActive=function(){},m}(s.default);t.default=f},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=a.__importDefault(n(3)),s=a.__importDefault(n(23)),u=a.__importDefault(n(335)),c=a.__importDefault(n(336)),d=n(7),f=function(p){function m(v){var g=this,b=l.default(`<div class="w-e-menu" data-title="\u5F15\u7528">
| <i class="w-e-icon-quotes-left"></i>
| </div>`);return g=p.call(this,b,v)||this,u.default(v),g}return a.__extends(m,p),m.prototype.clickHandler=function(){var v,g,b=this.editor,y=b.selection.isSelectionEmpty(),w=b.selection.getSelectionRangeTopNodes(),x=w[w.length-1];if(this.getTopNodeName()!=="BLOCKQUOTE"){var _=c.default(w);if(b.$textElem.equal(x)){var E=(v=b.selection.getSelectionContainerElem())===null||v===void 0?void 0:v.elems[0];b.selection.createRangeByElems(E.children[0],E.children[0]),w=b.selection.getSelectionRangeTopNodes(),_=c.default(w),x.append(_)}else _.insertAfter(x);this.delSelectNode(w);var C=(g=_.childNodes())===null||g===void 0?void 0:g.last().getNode();return C==null?void 0:(C.textContent?b.selection.moveCursor(C):b.selection.moveCursor(C,0),this.tryChangeActive(),void l.default(d.EMPTY_P).insertAfter(_))}var T=l.default(x.childNodes()),k=T.length,I=x;(0,i.default)(T).call(T,function(O){var F=l.default(O);F.insertAfter(I),I=F}),x.remove(),b.selection.moveCursor(T.elems[k-1]),this.tryChangeActive(),y&&(b.selection.collapseRange(),b.selection.restoreSelection())},m.prototype.tryChangeActive=function(){var v;((v=this.editor.selection.getSelectionRangeTopNodes()[0])===null||v===void 0?void 0:v.getNodeName())==="BLOCKQUOTE"?this.active():this.unActive()},m.prototype.getTopNodeName=function(){var v=this.editor.selection.getSelectionRangeTopNodes()[0];return v==null?void 0:v.getNodeName()},m.prototype.delSelectNode=function(v){(0,i.default)(v).call(v,function(g){g.remove()})},m}(s.default);t.default=f},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=n(7),i=r.__importDefault(n(3));function a(l){function s(u){var c,d=l.selection.getSelectionContainerElem(),f=l.selection.getSelectionRangeTopNodes()[0];if((f==null?void 0:f.getNodeName())==="BLOCKQUOTE"){if(d.getNodeName()==="BLOCKQUOTE"){var p=(c=d.childNodes())===null||c===void 0?void 0:c.getNode();l.selection.moveCursor(p)}if(d.text()===""){u.preventDefault(),d.remove();var m=i.default(o.EMPTY_P);m.insertAfter(f),l.selection.moveCursor(m.getNode(),0)}f.text()===""&&f.remove()}}l.txt.eventHooks.enterDownEvents.push(s)}t.default=a},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=n(2).__importDefault(n(3));function l(s){var u=a.default("<blockquote></blockquote>");return(0,i.default)(s).call(s,function(c){u.append(c.clone(!0))}),u}t.default=l},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(26));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=a.__importDefault(n(24)),s=a.__importDefault(n(3)),u=n(6),c=function(d){function f(p){var m,v=this,g=s.default(`<div class="w-e-menu" data-title="\u80CC\u666F\u8272">
| <i class="w-e-icon-paint-brush"></i>
| </div>`),b={width:120,title:"\u80CC\u666F\u989C\u8272",type:"inline-block",list:(0,i.default)(m=p.config.colors).call(m,function(y){return{$elem:s.default('<i style="color:'+y+';" class="w-e-icon-paint-brush"></i>'),value:y}}),clickHandler:function(y){v.command(y)}};return v=d.call(this,g,p,b)||this}return a.__extends(f,d),f.prototype.command=function(p){var m,v=this.editor,g=v.selection.isSelectionEmpty(),b=(m=v.selection.getSelectionContainerElem())===null||m===void 0?void 0:m.elems[0];if(b!=null){var y=(b==null?void 0:b.nodeName.toLowerCase())!=="p",w=b==null?void 0:b.style.backgroundColor,x=u.hexToRgb(p)===w;if(g){if(y&&!x){var _=v.selection.getSelectionRangeTopNodes();v.selection.createRangeByElem(_[0]),v.selection.moveCursor(_[0].elems[0])}v.selection.createEmptyRange()}v.cmd.do("backColor",p),g&&(v.selection.collapseRange(),v.selection.restoreSelection())}},f.prototype.tryChangeActive=function(){},f}(l.default);t.default=c},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(26));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=a.__importDefault(n(24)),s=a.__importDefault(n(3)),u=function(c){function d(f){var p,m=this,v=s.default(`<div class="w-e-menu" data-title="\u6587\u5B57\u989C\u8272">
| <i class="w-e-icon-pencil2"></i>
| </div>`),g={width:120,title:"\u6587\u5B57\u989C\u8272",type:"inline-block",list:(0,i.default)(p=f.config.colors).call(p,function(b){return{$elem:s.default('<i style="color:'+b+';" class="w-e-icon-pencil2"></i>'),value:b}}),clickHandler:function(b){m.command(b)}};return m=c.call(this,v,f,g)||this}return a.__extends(d,c),d.prototype.command=function(f){var p,m=this.editor,v=m.selection.isSelectionEmpty(),g=(p=m.selection.getSelectionContainerElem())===null||p===void 0?void 0:p.elems[0];if(g!=null){var b=m.selection.getSelectionText();if(g.nodeName==="A"&&g.textContent===b){var y=s.default("<span>​</span>").getNode();g.appendChild(y)}m.cmd.do("foreColor",f),v&&(m.selection.collapseRange(),m.selection.restoreSelection())}},d.prototype.tryChangeActive=function(){},d}(l.default);t.default=u},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(3)),i=r.__importDefault(n(32)),a=r.__importDefault(n(37)),l=r.__importDefault(n(340)),s=r.__importDefault(n(346)),u=function(c){function d(f){var p=this,m=o.default(`<div class="w-e-menu" data-title="\u89C6\u9891">
| <i class="w-e-icon-play"></i>
| </div>`);return p=c.call(this,m,f)||this,s.default(f),p}return r.__extends(d,c),d.prototype.clickHandler=function(){this.createPanel("")},d.prototype.createPanel=function(f){var p=l.default(this.editor,f);new i.default(this,p).create()},d.prototype.tryChangeActive=function(){},d}(a.default);t.default=u},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(17));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=n(6),s=a.__importDefault(n(3)),u=a.__importDefault(n(341)),c=n(7);function d(f,p){var m=f.config,v=new u.default(f),g=l.getRandom("input-iframe"),b=l.getRandom("btn-ok"),y=l.getRandom("input-upload"),w=l.getRandom("btn-local-ok");function x(T){f.cmd.do("insertHTML",T+c.EMPTY_P),f.config.onlineVideoCallback(T)}function _(T){var k=f.config.onlineVideoCheck(T);return k===!0||(typeof k=="string"&&f.config.customAlert(k,"error"),!1)}var E=[{title:f.i18next.t("menus.panelMenus.video.\u4E0A\u4F20\u89C6\u9891"),tpl:`<div class="w-e-up-video-container">
| <div id="`+w+`" class="w-e-up-btn">
| <i class="w-e-icon-upload2"></i>
| </div>
| <div style="display:none;">
| <input id="`+y+`" type="file" accept="video/*"/>
| </div>
| </div>`,events:[{selector:"#"+w,type:"click",fn:function(){var T=s.default("#"+y).elems[0];if(!T)return!0;T.click()}},{selector:"#"+y,type:"change",fn:function(){var T=s.default("#"+y).elems[0];if(!T)return!0;var k=T.files;return k.length&&v.uploadVideo(k),!0}}]},{title:f.i18next.t("menus.panelMenus.video.\u63D2\u5165\u89C6\u9891"),tpl:`<div>
| <input
| id="`+g+`"
| type="text"
| class="block"
| placeholder="`+f.i18next.t("\u5982")+`\uFF1A<iframe src=... ></iframe>"/>
| </td>
| <div class="w-e-button-container">
| <button type="button" id="`+b+`" class="right">
| `+f.i18next.t("\u63D2\u5165")+`
| </button>
| </div>
| </div>`,events:[{selector:"#"+b,type:"click",fn:function(){var T,k=s.default("#"+g),I=(0,i.default)(T=k.val()).call(T);if(I&&_(I))return x(I),!0},bindEnter:!0}]}],C={width:300,height:0,tabs:[]};return window.FileReader&&(m.uploadVideoServer||m.customUploadVideo)&&C.tabs.push(E[0]),m.showLinkVideo&&C.tabs.push(E[1]),C}t.default=d},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(132)),a=r(n(57)),l=r(n(4)),s=r(n(27));(0,o.default)(t,"__esModule",{value:!0});var u=n(2),c=n(6),d=u.__importDefault(n(135)),f=u.__importDefault(n(136)),p=n(7),m=n(6),v=function(){function g(b){this.editor=b}return g.prototype.uploadVideo=function(b){var y=this;if(b.length){var w,x=this.editor,_=x.config,E="validate.",C=function(X){return x.i18next.t(E+X)},T=_.uploadVideoServer,k=_.uploadVideoMaxSize/1024,I=_.uploadVideoName,O=_.uploadVideoParams,F=_.uploadVideoParamsWithUrl,N=_.uploadVideoHeaders,B=_.uploadVideoHooks,P=_.uploadVideoTimeout,V=_.withVideoCredentials,L=_.customUploadVideo,H=_.uploadVideoAccept,U=[],G=[];if(c.arrForEach(b,function(X){var te=X.name,ne=X.size/1024/1024;if(te&&ne){if(!(H instanceof Array))return void G.push("\u3010"+H+"\u3011"+C("uploadVideoAccept \u4E0D\u662FArray"));if(!(0,i.default)(H).call(H,function(se){return se===te.split(".")[te.split(".").length-1]}))return void G.push("\u3010"+te+"\u3011"+C("\u4E0D\u662F\u89C6\u9891"));if(k<ne)return void G.push("\u3010"+te+"\u3011"+C("\u5927\u4E8E")+" "+k+"M");U.push(X)}}),G.length)return void _.customAlert(C("\u89C6\u9891\u9A8C\u8BC1\u672A\u901A\u8FC7")+`:
| `+G.join(`
| `),"warning");if(U.length===0)return void _.customAlert(C("\u4F20\u5165\u7684\u6587\u4EF6\u4E0D\u5408\u6CD5"),"warning");if(L&&typeof L=="function")return void L(U,(0,a.default)(w=this.insertVideo).call(w,this));var z=new FormData;if((0,l.default)(U).call(U,function(X,te){var ne=I||X.name;U.length>1&&(ne+=te+1),z.append(ne,X)}),T){var $=T.split("#");T=$[0];var W=$[1]||"";(0,l.default)(c).call(c,O,function(X,te){F&&((0,s.default)(T).call(T,"?")>0?T+="&":T+="?",T=T+X+"="+te),z.append(X,te)}),W&&(T+="#"+W);var K=d.default(T,{timeout:P,formData:z,headers:N,withCredentials:!!V,beforeSend:function(X){if(B.before)return B.before(X,x,U)},onTimeout:function(X){_.customAlert(C("\u4E0A\u4F20\u89C6\u9891\u8D85\u65F6"),"error"),B.timeout&&B.timeout(X,x)},onProgress:function(X,te){var ne=new f.default(x);te.lengthComputable&&(X=te.loaded/te.total,ne.show(X))},onError:function(X){_.customAlert(C("\u4E0A\u4F20\u89C6\u9891\u9519\u8BEF"),"error",C("\u4E0A\u4F20\u89C6\u9891\u9519\u8BEF")+"\uFF0C"+C("\u670D\u52A1\u5668\u8FD4\u56DE\u72B6\u6001")+": "+X.status),B.error&&B.error(X,x)},onFail:function(X,te){_.customAlert(C("\u4E0A\u4F20\u89C6\u9891\u5931\u8D25"),"error",C("\u4E0A\u4F20\u89C6\u9891\u8FD4\u56DE\u7ED3\u679C\u9519\u8BEF")+"\uFF0C"+C("\u8FD4\u56DE\u7ED3\u679C")+": "+te),B.fail&&B.fail(X,x,te)},onSuccess:function(X,te){if(B.customInsert){var ne;B.customInsert((0,a.default)(ne=y.insertVideo).call(ne,y),te,x)}else{if(te.errno!="0")return _.customAlert(C("\u4E0A\u4F20\u89C6\u9891\u5931\u8D25"),"error",C("\u4E0A\u4F20\u89C6\u9891\u8FD4\u56DE\u7ED3\u679C\u9519\u8BEF")+"\uFF0C"+C("\u8FD4\u56DE\u7ED3\u679C")+" errno="+te.errno),void(B.fail&&B.fail(X,x,te));var se=te.data;y.insertVideo(se.url),B.success&&B.success(X,x,te)}}});typeof K=="string"&&_.customAlert(K,"error")}}},g.prototype.insertVideo=function(b){var y=this.editor,w=y.config,x="validate.",_=function(C,T){return T===void 0&&(T=x),y.i18next.t(T+C)};if(w.customInsertVideo)w.customInsertVideo(b);else{m.UA.isFirefox?y.cmd.do("insertHTML",'<p data-we-video-p="true"><video src="'+b+'" controls="controls" style="max-width:100%"></video></p><p>​</p>'):y.cmd.do("insertHTML",'<video src="'+b+'" controls="controls" style="max-width:100%"></video>'+p.EMPTY_P);var E=document.createElement("video");E.onload=function(){E=null},E.onerror=function(){w.customAlert(_("\u63D2\u5165\u89C6\u9891\u9519\u8BEF"),"error","wangEditor: "+_("\u63D2\u5165\u89C6\u9891\u9519\u8BEF")+"\uFF0C"+_("\u89C6\u9891\u94FE\u63A5")+' "'+b+'"\uFF0C'+_("\u4E0B\u8F7D\u94FE\u63A5\u5931\u8D25")),E=null},E.onabort=function(){return E=null},E.src=b}},g}();t.default=v},function(e,t,n){e.exports=n(343)},function(e,t,n){var r=n(344);e.exports=r},function(e,t,n){n(345);var r=n(9);e.exports=r.Date.now},function(e,t,n){n(5)({target:"Date",stat:!0},{now:function(){return new Date().getTime()}})},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(347)),i=r.__importDefault(n(349));function a(l){o.default(l),i.default(l)}t.default=a},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.createShowHideFn=void 0;var r=n(2),o=r.__importDefault(n(3)),i=r.__importDefault(n(38)),a=r.__importDefault(n(348));function l(u){var c,d=function(m,v){return v===void 0&&(v=""),u.i18next.t(v+m)};function f(m){var v=[{$elem:o.default("<span class='w-e-icon-trash-o'></span>"),onClick:function(g,b){return b.remove(),!0}},{$elem:o.default("<span>100%</span>"),onClick:function(g,b){return b.attr("width","100%"),b.removeAttr("height"),!0}},{$elem:o.default("<span>50%</span>"),onClick:function(g,b){return b.attr("width","50%"),b.removeAttr("height"),!0}},{$elem:o.default("<span>30%</span>"),onClick:function(g,b){return b.attr("width","30%"),b.removeAttr("height"),!0}},{$elem:o.default("<span>"+d("\u91CD\u7F6E")+"</span>"),onClick:function(g,b){return b.removeAttr("width"),b.removeAttr("height"),!0}},{$elem:o.default("<span>"+d("menus.justify.\u9760\u5DE6")+"</span>"),onClick:function(g,b){return a.default(b,"left"),!0}},{$elem:o.default("<span>"+d("menus.justify.\u5C45\u4E2D")+"</span>"),onClick:function(g,b){return a.default(b,"center"),!0}},{$elem:o.default("<span>"+d("menus.justify.\u9760\u53F3")+"</span>"),onClick:function(g,b){return a.default(b,"right"),!0}}];(c=new i.default(u,m,v)).create()}function p(){c&&(c.remove(),c=null)}return{showVideoTooltip:f,hideVideoTooltip:p}}function s(u){var c=l(u),d=c.showVideoTooltip,f=c.hideVideoTooltip;u.txt.eventHooks.videoClickEvents.push(d),u.txt.eventHooks.clickEvents.push(f),u.txt.eventHooks.keyupEvents.push(f),u.txt.eventHooks.toolbarClickEvents.push(f),u.txt.eventHooks.menuClickEvents.push(f),u.txt.eventHooks.textScrollEvents.push(f),u.txt.eventHooks.changeEvents.push(f)}t.createShowHideFn=l,t.default=s},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(44));(0,o.default)(t,"__esModule",{value:!0});var a=n(2).__importDefault(n(3));function l(u,c){var d=s(u,["P"]);d&&a.default(d).css("text-align",c)}function s(u,c){for(var d,f=u.elems[0];f!=null;){if((0,i.default)(c).call(c,f==null?void 0:f.nodeName))return f;if(((d=f==null?void 0:f.parentNode)===null||d===void 0?void 0:d.nodeName)==="BODY")return null;f=f.parentNode}return f}t.default=l},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(6);function o(i){if(r.UA.isFirefox){var a=i.txt,l=i.selection;a.eventHooks.keydownEvents.push(function(s){var u=l.getSelectionContainerElem();if(u){var c=u.getNodeTop(i),d=c.length&&c.prev().length?c.prev():null;d&&d.attr("data-we-video-p")&&l.getCursorPos()===0&&s.keyCode===8&&d.remove()}})}}t.default=o},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(26));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=n(7),s=a.__importDefault(n(3)),u=a.__importDefault(n(32)),c=a.__importDefault(n(37)),d=a.__importDefault(n(351)),f=a.__importDefault(n(364)),p=function(m){function v(g){var b,y=this,w=s.default('<div class="w-e-menu" data-title="\u56FE\u7247"><i class="w-e-icon-image"></i></div>'),x=f.default(g);return x.onlyUploadConf&&(w=x.onlyUploadConf.$elem,(0,i.default)(b=x.onlyUploadConf.events).call(b,function(_){var E=_.type,C=_.fn||l.EMPTY_FN;w.on(E,function(T){T.stopPropagation(),C(T)})})),(y=m.call(this,w,g)||this).imgPanelConfig=x,d.default(g),y}return a.__extends(v,m),v.prototype.clickHandler=function(){this.imgPanelConfig.onlyUploadConf||this.createPanel()},v.prototype.createPanel=function(){var g=this.imgPanelConfig,b=new u.default(this,g);this.setPanel(b),b.create()},v.prototype.tryChangeActive=function(){},v}(c.default);t.default=p},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(352)),i=r.__importDefault(n(353)),a=r.__importDefault(n(354)),l=r.__importDefault(n(362)),s=r.__importDefault(n(363));function u(c){o.default(c),i.default(c),a.default(c),l.default(c),s.default(c)}t.default=u},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=n(130),i=r.__importDefault(n(96));function a(c,d){var f=c.config,p=f.pasteFilterStyle,m=f.pasteIgnoreImg;return!!o.getPasteHtml(d,p,m)||!!o.getPasteText(d)}function l(c,d){for(var f,p=((f=d.clipboardData)===null||f===void 0?void 0:f.types)||[],m=0;m<p.length;m++)if(p[m]==="Files")return!0;return!1}function s(c,d){if(l(d,c)||!a(d,c)){var f=o.getPasteImgs(c);f.length&&new i.default(d).uploadImg(f)}}function u(c){c.txt.eventHooks.pasteEvents.unshift(function(d){s(d,c)})}t.default=u},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2).__importDefault(n(96));function o(i){function a(l){var s=l.dataTransfer&&l.dataTransfer.files;s&&s.length&&new r.default(i).uploadImg(s)}i.txt.eventHooks.dropEvents.push(a)}t.default=o},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(31)),a=r(n(355));(0,o.default)(t,"__esModule",{value:!0}),t.createShowHideFn=void 0;var l=n(2).__importDefault(n(3));n(360);var s=n(6);function u(m,v,g,b,y){m.attr("style","width:"+v+"px; height:"+g+"px; left:"+b+"px; top:"+y+"px;")}function c(m,v){var g=l.default(`<div class="w-e-img-drag-mask">
| <div class="w-e-img-drag-show-size"></div>
| <div class="w-e-img-drag-rb"></div>
| </div>`);return g.hide(),v.append(g),g}function d(m,v,g){var b=m.getBoundingClientRect(),y=g.getBoundingClientRect(),w=y.width.toFixed(2),x=y.height.toFixed(2);(0,i.default)(v).call(v,".w-e-img-drag-show-size").text(w+"px * "+x+"px"),u(v,(0,a.default)(w),(0,a.default)(x),y.left-b.left,y.top-b.top),v.show()}function f(m){var v,g=m.$textContainerElem,b=c(m,g);function y(_,E){_.on("click",function(C){C.stopPropagation()}),_.on("mousedown",".w-e-img-drag-rb",function(C){if(C.preventDefault(),v){var T=C.clientX,k=C.clientY,I=E.getBoundingClientRect(),O=v.getBoundingClientRect(),F=O.width,N=O.height,B=O.left-I.left,P=O.top-I.top,V=F/N,L=F,H=N,U=l.default(document);U.on("mousemove",z),U.on("mouseup",$),U.on("mouseleave",G)}function G(){U.off("mousemove",z),U.off("mouseup",$)}function z(W){W.stopPropagation(),W.preventDefault(),L=F+(W.clientX-T),H=N+(W.clientY-k),L/H!=V&&(H=L/V),L=(0,a.default)(L.toFixed(2)),H=(0,a.default)(H.toFixed(2)),(0,i.default)(_).call(_,".w-e-img-drag-show-size").text(L.toFixed(2).replace(".00","")+"px * "+H.toFixed(2).replace(".00","")+"px"),u(_,L,H,B,P)}function $(){v.attr("width",L+""),v.attr("height",H+"");var W=v.getBoundingClientRect();u(_,L,H,W.left-I.left,W.top-I.top),G()}})}function w(_){if(s.UA.isIE())return!1;_&&d(g,b,v=_)}function x(){(0,i.default)(g).call(g,".w-e-img-drag-mask").hide()}return y(b,g),l.default(document).on("click",x),m.beforeDestroy(function(){l.default(document).off("click",x)}),{showDrag:w,hideDrag:x}}function p(m){var v=f(m),g=v.showDrag,b=v.hideDrag;m.txt.eventHooks.imgClickEvents.push(g),m.txt.eventHooks.textScrollEvents.push(b),m.txt.eventHooks.keyupEvents.push(b),m.txt.eventHooks.toolbarClickEvents.push(b),m.txt.eventHooks.menuClickEvents.push(b),m.txt.eventHooks.changeEvents.push(b)}t.createShowHideFn=f,t.default=p},function(e,t,n){e.exports=n(356)},function(e,t,n){var r=n(357);e.exports=r},function(e,t,n){n(358);var r=n(9);e.exports=r.parseFloat},function(e,t,n){var r=n(5),o=n(359);r({global:!0,forced:parseFloat!=o},{parseFloat:o})},function(e,t,n){var r=n(8),o=n(90).trim,i=n(68),a=r.parseFloat,l=1/a(i+"-0")!=-1/0;e.exports=l?function(s){var u=o(String(s)),c=a(u);return c===0&&u.charAt(0)=="-"?-0:c}:a},function(e,t,n){var r=n(20),o=n(361);typeof(o=o.__esModule?o.default:o)=="string"&&(o=[[e.i,o,""]]);var i={insert:"head",singleton:!1};r(o,i),e.exports=o.locals||{}},function(e,t,n){(t=n(21)(!1)).push([e.i,`.w-e-text-container {
| overflow: hidden;
| }
| .w-e-img-drag-mask {
| position: absolute;
| z-index: 1;
| border: 1px dashed #ccc;
| box-sizing: border-box;
| }
| .w-e-img-drag-mask .w-e-img-drag-rb {
| position: absolute;
| right: -5px;
| bottom: -5px;
| width: 16px;
| height: 16px;
| border-radius: 50%;
| background: #ccc;
| cursor: se-resize;
| }
| .w-e-img-drag-mask .w-e-img-drag-show-size {
| min-width: 110px;
| height: 22px;
| line-height: 22px;
| font-size: 14px;
| color: #999;
| position: absolute;
| left: 0;
| top: 0;
| background-color: #999;
| color: #fff;
| border-radius: 2px;
| padding: 0 5px;
| }
| `,""]),e.exports=t},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.createShowHideFn=void 0;var r=n(2),o=r.__importDefault(n(3)),i=r.__importDefault(n(38));function a(s){var u,c=function(p,m){return m===void 0&&(m=""),s.i18next.t(m+p)};function d(p){var m=[{$elem:o.default("<span class='w-e-icon-trash-o'></span>"),onClick:function(v,g){return v.selection.createRangeByElem(g),v.selection.restoreSelection(),v.cmd.do("delete"),!0}},{$elem:o.default("<span>30%</span>"),onClick:function(v,g){return g.attr("width","30%"),g.removeAttr("height"),!0}},{$elem:o.default("<span>50%</span>"),onClick:function(v,g){return g.attr("width","50%"),g.removeAttr("height"),!0}},{$elem:o.default("<span>100%</span>"),onClick:function(v,g){return g.attr("width","100%"),g.removeAttr("height"),!0}}];m.push({$elem:o.default("<span>"+c("\u91CD\u7F6E")+"</span>"),onClick:function(v,g){return g.removeAttr("width"),g.removeAttr("height"),!0}}),p.attr("data-href")&&m.push({$elem:o.default("<span>"+c("\u67E5\u770B\u94FE\u63A5")+"</span>"),onClick:function(v,g){var b=g.attr("data-href");return b&&(b=decodeURIComponent(b),window.open(b,"_target")),!0}}),(u=new i.default(s,p,m)).create()}function f(){u&&(u.remove(),u=null)}return{showImgTooltip:d,hideImgTooltip:f}}function l(s){var u=a(s),c=u.showImgTooltip,d=u.hideImgTooltip;s.txt.eventHooks.imgClickEvents.push(c),s.txt.eventHooks.clickEvents.push(d),s.txt.eventHooks.keyupEvents.push(d),s.txt.eventHooks.toolbarClickEvents.push(d),s.txt.eventHooks.menuClickEvents.push(d),s.txt.eventHooks.textScrollEvents.push(d),s.txt.eventHooks.imgDragBarMouseDownEvents.push(d),s.txt.eventHooks.changeEvents.push(d)}t.createShowHideFn=a,t.default=l},function(e,t,n){function r(o){var i=o.txt,a=o.selection;i.eventHooks.keydownEvents.push(function(l){var s=a.getSelectionContainerElem(),u=a.getRange();if(u&&s&&l.keyCode===8&&a.isSelectionEmpty()){var c=u.startContainer,d=u.startOffset,f=null;if(d===0)for(;c!==s.elems[0]&&s.elems[0].contains(c)&&c.parentNode&&!f;){if(c.previousSibling){f=c.previousSibling;break}c=c.parentNode}else c.nodeType!==3&&(f=c.childNodes[d-1]);if(f){for(var p=f;p.childNodes.length;)p=p.childNodes[p.childNodes.length-1];p instanceof HTMLElement&&p.tagName==="IMG"&&(p.remove(),l.preventDefault())}}})}(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.default=r},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(26)),a=r(n(17));(0,o.default)(t,"__esModule",{value:!0});var l=n(2),s=l.__importDefault(n(3)),u=n(6),c=l.__importDefault(n(96));function d(f){var p,m=f.config,v=new c.default(f),g=u.getRandom("up-trigger-id"),b=u.getRandom("up-file-id"),y=u.getRandom("input-link-url"),w=u.getRandom("input-link-url-alt"),x=u.getRandom("input-link-url-href"),_=u.getRandom("btn-link"),E="menus.panelMenus.image.",C=function(V,L){return L===void 0&&(L=E),f.i18next.t(L+V)};function T(V,L,H){var U=m.linkImgCheck(V);return U===!0||(typeof U=="string"&&m.customAlert(U,"error"),!1)}var k=m.uploadImgMaxLength===1?"":'multiple="multiple"',I=(0,i.default)(p=m.uploadImgAccept).call(p,function(V){return"image/"+V}).join(","),O=function(V,L,H){return'<div class="'+V+'" data-title="'+H+`">
| <div id="`+g+`" class="w-e-up-btn">
| <i class="`+L+`"></i>
| </div>
| <div style="display:none;">
| <input id="`+b+'" type="file" '+k+' accept="'+I+`"/>
| </div>
| </div>`},F=[{selector:"#"+g,type:"click",fn:function(){var V=m.uploadImgFromMedia;if(V&&typeof V=="function")return V(),!0;var L=s.default("#"+b).elems[0];if(!L)return!0;L.click()}},{selector:"#"+b,type:"change",fn:function(){var V=s.default("#"+b).elems[0];if(!V)return!0;var L=V.files;return L!=null&&L.length&&v.uploadImg(L),V&&(V.value=""),!0}}],N=[`<input
| id="`+y+`"
| type="text"
| class="block"
| placeholder="`+C("\u56FE\u7247\u5730\u5740")+'"/>'];m.showLinkImgAlt&&N.push(`
| <input
| id="`+w+`"
| type="text"
| class="block"
| placeholder="`+C("\u56FE\u7247\u6587\u5B57\u8BF4\u660E")+'"/>'),m.showLinkImgHref&&N.push(`
| <input
| id="`+x+`"
| type="text"
| class="block"
| placeholder="`+C("\u8DF3\u8F6C\u94FE\u63A5")+'"/>');var B=[{title:C("\u4E0A\u4F20\u56FE\u7247"),tpl:O("w-e-up-img-container","w-e-icon-upload2",""),events:F},{title:C("\u7F51\u7EDC\u56FE\u7247"),tpl:`<div>
| `+N.join("")+`
| <div class="w-e-button-container">
| <button type="button" id="`+_+'" class="right">'+C("\u63D2\u5165","")+`</button>
| </div>
| </div>`,events:[{selector:"#"+_,type:"click",fn:function(){var V,L,H,U,G,z=s.default("#"+y),$=(0,a.default)(V=z.val()).call(V);if($&&(m.showLinkImgAlt&&(L=(0,a.default)(H=s.default("#"+w).val()).call(H)),m.showLinkImgHref&&(U=(0,a.default)(G=s.default("#"+x).val()).call(G)),T($)))return v.insertImg($,L,U),!0},bindEnter:!0}]}],P={width:300,height:0,tabs:[],onlyUploadConf:{$elem:s.default(O("w-e-menu","w-e-icon-image","\u56FE\u7247")),events:F}};return window.FileReader&&(m.uploadImgShowBase64||m.uploadImgServer||m.customUploadImg||m.uploadImgFromMedia)&&P.tabs.push(B[0]),m.showLinkImg&&(P.tabs.push(B[1]),P.onlyUploadConf=void 0),P}t.default=d},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=a.__importDefault(n(3)),s=a.__importDefault(n(24)),u=a.__importDefault(n(366)),c=function(d){function f(p){var m=this,v=l.default(`<div class="w-e-menu" data-title="\u7F29\u8FDB">
| <i class="w-e-icon-indent-increase"></i>
| </div>`),g={width:130,title:"\u8BBE\u7F6E\u7F29\u8FDB",type:"list",list:[{$elem:l.default(`<p>
| <i class="w-e-icon-indent-increase w-e-drop-list-item"></i>
| `+p.i18next.t("menus.dropListMenu.indent.\u589E\u52A0\u7F29\u8FDB")+`
| <p>`),value:"increase"},{$elem:l.default(`<p>
| <i class="w-e-icon-indent-decrease w-e-drop-list-item"></i>
| `+p.i18next.t("menus.dropListMenu.indent.\u51CF\u5C11\u7F29\u8FDB")+`
| <p>`),value:"decrease"}],clickHandler:function(b){m.command(b)}};return m=d.call(this,v,p,g)||this}return a.__extends(f,d),f.prototype.command=function(p){var m=this.editor,v=m.selection.getSelectionContainerElem();if(v&&m.$textElem.equal(v)){var g=m.selection.getSelectionRangeTopNodes();g.length>0&&(0,i.default)(g).call(g,function(b){u.default(l.default(b),p,m)})}else v&&v.length>0&&(0,i.default)(v).call(v,function(b){u.default(l.default(b),p,m)});m.selection.restoreSelection(),this.tryChangeActive()},f.prototype.tryChangeActive=function(){var p=this.editor,m=p.selection.getSelectionStartElem(),v=l.default(m).getNodeTop(p);v.length<=0||(v.elems[0].style.paddingLeft!=""?this.active():this.unActive())},f}(s.default);t.default=c},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(45)),a=r(n(17));(0,o.default)(t,"__esModule",{value:!0});var l=n(2),s=l.__importDefault(n(367)),u=l.__importDefault(n(368)),c=/^(\d+)(\w+)$/,d=/^(\d+)%$/;function f(m){var v=m.config.indentation;if(typeof v=="string"){if(c.test(v)){var g,b=(0,i.default)(g=(0,a.default)(v).call(v).match(c)).call(g,1,3),y=b[0],w=b[1];return{value:Number(y),unit:w}}if(d.test(v))return{value:Number((0,a.default)(v).call(v).match(d)[1]),unit:"%"}}else if(v.value!==void 0&&v.unit)return v;return{value:2,unit:"em"}}function p(m,v,g){var b=m.getNodeTop(g);/^(P|H[0-9]*)$/.test(b.getNodeName())&&(v==="increase"?s.default(b,f(g)):v==="decrease"&&u.default(b,f(g)))}t.default=p},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(45));function a(l,s){var u=l.elems[0];if(u.style.paddingLeft==="")l.css("padding-left",s.value+s.unit);else{var c=u.style.paddingLeft,d=(0,i.default)(c).call(c,0,c.length-s.unit.length),f=Number(d)+s.value;l.css("padding-left",""+f+s.unit)}}(0,o.default)(t,"__esModule",{value:!0}),t.default=a},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(45));function a(l,s){var u=l.elems[0];if(u.style.paddingLeft!==""){var c=u.style.paddingLeft,d=(0,i.default)(c).call(c,0,c.length-s.unit.length),f=Number(d)-s.value;f>0?l.css("padding-left",""+f+s.unit):l.css("padding-left","")}}(0,o.default)(t,"__esModule",{value:!0}),t.default=a},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(3)),i=r.__importDefault(n(37)),a=r.__importDefault(n(32)),l=r.__importDefault(n(370)),s=function(u){function c(d){var f=o.default(`<div class="w-e-menu" data-title="\u8868\u60C5">
| <i class="w-e-icon-happy"></i>
| </div>`);return u.call(this,f,d)||this}return r.__extends(c,u),c.prototype.createPanel=function(){var d=l.default(this.editor);new a.default(this,d).create()},c.prototype.clickHandler=function(){this.createPanel()},c.prototype.tryChangeActive=function(){},c}(i.default);t.default=s},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(26)),a=r(n(70)),l=r(n(17));(0,o.default)(t,"__esModule",{value:!0});var s=n(2).__importDefault(n(3));function u(c){var d=c.config.emotions;function f(m){var v,g,b=[];return m.type=="image"?(b=(0,i.default)(v=m.content).call(v,function(y){return typeof y=="string"?"":'<span title="'+y.alt+`">
| <img class="eleImg" data-emoji="`+y.alt+'" style src="'+y.src+'" alt="['+y.alt+`]">
| </span>`}),b=(0,a.default)(b).call(b,function(y){return y!==""})):b=(0,i.default)(g=m.content).call(g,function(y){return'<span class="eleImg" title="'+y+'">'+y+"</span>"}),b.join("").replace(/ /g,"")}var p=(0,i.default)(d).call(d,function(m){return{title:c.i18next.t("menus.panelMenus.emoticon."+m.title),tpl:"<div>"+f(m)+"</div>",events:[{selector:".eleImg",type:"click",fn:function(v){var g,b,y=s.default(v.target);return g=y.getNodeName()==="IMG"?(0,l.default)(b=y.parent().html()).call(b):"<span>"+y.html()+"</span>",c.cmd.do("insertHTML",g),!0}}]}});return{width:300,height:230,tabs:p}}t.default=u},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.createListHandle=t.ClassType=void 0;var r,o=n(2),i=o.__importDefault(n(3)),a=o.__importDefault(n(372)),l=o.__importDefault(n(374)),s=o.__importDefault(n(375)),u=o.__importDefault(n(376)),c=o.__importDefault(n(377));(function(m){m.Wrap="WrapListHandle",m.Join="JoinListHandle",m.StartJoin="StartJoinListHandle",m.EndJoin="EndJoinListHandle",m.Other="OtherListHandle"})(r=t.ClassType||(t.ClassType={}));var d={WrapListHandle:a.default,JoinListHandle:l.default,StartJoinListHandle:s.default,EndJoinListHandle:u.default,OtherListHandle:c.default};function f(m,v,g){if(m===r.Other&&g===void 0)throw new Error("other \u7C7B\u9700\u8981\u4F20\u5165 range");return m!==r.Other?new d[m](v):new d[m](v,g)}t.createListHandle=f;var p=function(){function m(v){this.handle=v,this.handle.exec()}return m.prototype.getSelectionRangeElem=function(){return i.default(this.handle.selectionRangeElem.get())},m}();t.default=p},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=a.__importDefault(n(3)),s=n(58),u=n(47),c=function(d){function f(p){return d.call(this,p)||this}return a.__extends(f,d),f.prototype.exec=function(){var p,m=this.options,v=m.listType,g=m.listTarget,b=m.$selectionElem,y=m.$startElem,w=m.$endElem,x=[],_=b==null?void 0:b.getNodeName(),E=y.prior,C=w.prior;if((y.prior||w.prior)&&(E!=null&&E.prev().length||C!=null&&C.next().length)){for(var T=E;T.length;)x.push(T),T=C!=null&&C.equal(T)?l.default(void 0):T.next();var k=E.prev(),I=C.next();if(_===v?p=u.createElementFragment(x,u.createDocumentFragment(),"p"):(p=u.createElement(g),(0,i.default)(x).call(x,function(P){p.append(P.elems[0])})),k.length&&I.length){for(var O=[];I.length;)O.push(I),I=I.next();var F=u.createElement(_);(0,i.default)(O).call(O,function(P){F.append(P.elems[0])}),l.default(F).insertAfter(b),this.selectionRangeElem.set(p),(N=b.next()).length?u.insertBefore(b,p,N.elems[0]):b.parent().elems[0].append(p)}else if(k.length){var N;this.selectionRangeElem.set(p),(N=b.next()).length?u.insertBefore(b,p,N.elems[0]):b.parent().elems[0].append(p)}else this.selectionRangeElem.set(p),u.insertBefore(b,p,b.elems[0])}else{var B;(0,i.default)(B=b==null?void 0:b.children()).call(B,function(P){x.push(l.default(P))}),_===v?p=u.createElementFragment(x,u.createDocumentFragment(),"p"):(p=u.createElement(g),(0,i.default)(x).call(x,function(P){p.appendChild(P.elems[0])})),this.selectionRangeElem.set(p),u.insertBefore(b,p,b.elems[0]),b.remove()}},f}(s.ListHandle);t.default=c},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=function(){function l(){this._element=null}return l.prototype.set=function(s){if(s instanceof DocumentFragment){var u,c=[];(0,i.default)(u=s.childNodes).call(u,function(d){c.push(d)}),s=c}this._element=s},l.prototype.get=function(){return this._element},l.prototype.clear=function(){this._element=null},l}();t.default=a},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=a.__importDefault(n(3)),s=n(58),u=n(47),c=function(d){function f(p){return d.call(this,p)||this}return a.__extends(f,d),f.prototype.exec=function(){var p,m,v,g,b,y,w,x,_=this.options,E=_.editor,C=_.listType,T=_.listTarget,k=_.$startElem,I=_.$endElem,O=E.selection.getSelectionRangeTopNodes(),F=k==null?void 0:k.getNodeName();if(F===(I==null?void 0:I.getNodeName()))if(O.length>2)if(O.shift(),O.pop(),x=u.createElementFragment(u.filterSelectionNodes(O),u.createDocumentFragment()),F===C)(p=I.children())===null||p===void 0||(0,i.default)(p).call(p,function(W){x.append(W)}),I.remove(),this.selectionRangeElem.set(x),k.elems[0].append(x);else{for(var N=document.createDocumentFragment(),B=document.createDocumentFragment(),P=u.getStartPoint(k);P.length;){var V=P.elems[0];P=P.next(),N.append(V)}for(var L=u.getEndPoint(I),H=[];L.length;)H.unshift(L.elems[0]),L=L.prev();(0,i.default)(H).call(H,function(W){B.append(W)});var U=u.createElement(T);U.append(N),U.append(x),U.append(B),x=U,this.selectionRangeElem.set(x),l.default(U).insertAfter(k),!((m=k.children())!==null&&m!==void 0&&m.length)&&k.remove(),((v=I.children())===null||v===void 0||!v.length)&&I.remove()}else{for(O.length=0,P=u.getStartPoint(k);P.length;)O.push(P),P=P.next();for(L=u.getEndPoint(I),H=[];L.length;)H.unshift(L),L=L.prev();O.push.apply(O,H),F===C?(x=u.createElementFragment(O,u.createDocumentFragment(),"p"),this.selectionRangeElem.set(x),u.insertBefore(k,x,I.elems[0])):(x=u.createElement(T),(0,i.default)(O).call(O,function(W){x.append(W.elems[0])}),this.selectionRangeElem.set(x),l.default(x).insertAfter(k)),!((g=k.children())!==null&&g!==void 0&&g.length)&&I.remove(),((b=I.children())===null||b===void 0||!b.length)&&I.remove()}else{var G=[];for(L=u.getEndPoint(I);L.length;)G.unshift(L),L=L.prev();var z=[];for(P=u.getStartPoint(k);P.length;)z.push(P),P=P.next();if(x=u.createDocumentFragment(),O.shift(),O.pop(),(0,i.default)(z).call(z,function(W){return x.append(W.elems[0])}),x=u.createElementFragment(u.filterSelectionNodes(O),x),(0,i.default)(G).call(G,function(W){return x.append(W.elems[0])}),this.selectionRangeElem.set(x),F===C)k.elems[0].append(x),((y=I.children())===null||y===void 0||!y.length)&&I.remove();else if((w=I.children())!==null&&w!==void 0&&w.length){var $=I.children();u.insertBefore($,x,$.elems[0])}else I.elems[0].append(x)}},f}(s.ListHandle);t.default=c},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=a.__importDefault(n(3)),s=n(58),u=n(47),c=function(d){function f(p){return d.call(this,p)||this}return a.__extends(f,d),f.prototype.exec=function(){var p,m,v=this.options,g=v.editor,b=v.listType,y=v.listTarget,w=v.$startElem,x=g.selection.getSelectionRangeTopNodes(),_=w==null?void 0:w.getNodeName();x.shift();for(var E=[],C=u.getStartPoint(w);C.length;)E.push(C),C=C.next();_===b?(m=u.createDocumentFragment(),(0,i.default)(E).call(E,function(T){return m.append(T.elems[0])}),m=u.createElementFragment(u.filterSelectionNodes(x),m),this.selectionRangeElem.set(m),w.elems[0].append(m)):(m=u.createElement(y),(0,i.default)(E).call(E,function(T){return m.append(T.elems[0])}),m=u.createElementFragment(u.filterSelectionNodes(x),m),this.selectionRangeElem.set(m),l.default(m).insertAfter(w),((p=w.children())===null||p===void 0||!p.length)&&w.remove())},f}(s.ListHandle);t.default=c},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=a.__importDefault(n(3)),s=n(58),u=n(47),c=function(d){function f(p){return d.call(this,p)||this}return a.__extends(f,d),f.prototype.exec=function(){var p,m,v,g=this.options,b=g.editor,y=g.listType,w=g.listTarget,x=g.$endElem,_=b.selection.getSelectionRangeTopNodes(),E=x==null?void 0:x.getNodeName();_.pop();for(var C=[],T=u.getEndPoint(x);T.length;)C.unshift(T),T=T.prev();if(E===y)if(v=u.createElementFragment(u.filterSelectionNodes(_),u.createDocumentFragment()),(0,i.default)(C).call(C,function(O){return v.append(O.elems[0])}),this.selectionRangeElem.set(v),(p=x.children())!==null&&p!==void 0&&p.length){var k=x.children();u.insertBefore(k,v,k.elems[0])}else x.elems[0].append(v);else{var I=u.filterSelectionNodes(_);I.push.apply(I,C),v=u.createElementFragment(I,u.createElement(w)),this.selectionRangeElem.set(v),l.default(v).insertBefore(x),((m=x.children())===null||m===void 0||!m.length)&&x.remove()}},f}(s.ListHandle);t.default=c},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=n(58),i=n(47),a=function(l){function s(u,c){var d=l.call(this,u)||this;return d.range=c,d}return r.__extends(s,l),s.prototype.exec=function(){var u=this.options,c=u.editor,d=u.listTarget,f=c.selection.getSelectionRangeTopNodes(),p=i.createElementFragment(i.filterSelectionNodes(f),i.createElement(d));this.selectionRangeElem.set(p),this.range.insertNode(p)},s}(o.ListHandle);t.default=a},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4)),a=r(n(27));(0,o.default)(t,"__esModule",{value:!0});var l=n(2),s=l.__importDefault(n(24)),u=l.__importDefault(n(3)),c=l.__importDefault(n(379)),d=n(6),f=function(p){function m(v){var g=this,b=u.default(`<div class="w-e-menu" data-title="\u884C\u9AD8">
| <i class="w-e-icon-row-height"></i>
| </div>`),y={width:100,title:"\u8BBE\u7F6E\u884C\u9AD8",type:"list",list:new c.default(v,v.config.lineHeights).getItemList(),clickHandler:function(w){v.selection.saveRange(),g.command(w)}};return g=p.call(this,b,v,y)||this}return l.__extends(m,p),m.prototype.command=function(v){var g,b=this,y=window.getSelection?window.getSelection():document.getSelection(),w=["P"],x=this.editor,_="";x.selection.restoreSelection();var E=u.default(x.selection.getSelectionContainerElem());if(E!=null&&E.length){var C=u.default(x.selection.getSelectionContainerElem()),T=u.default(x.selection.getSelectionStartElem()).elems[0],k="",I=[],O="";if(E&&x.$textElem.equal(E)){var F=d.UA.isIE(),N=[],B=[],P=[],V=u.default(x.selection.getSelectionStartElem()),L=u.default(x.selection.getSelectionEndElem()),H=(g=x.selection.getRange())===null||g===void 0?void 0:g.commonAncestorContainer.childNodes;B.push(this.getDom(V.elems[0])),H==null||(0,i.default)(H).call(H,function(W,K){W===b.getDom(V.elems[0])&&N.push(K),W===b.getDom(L.elems[0])&&N.push(K)});var U=0,G=void 0;for(P.push(this.getDom(V.elems[0]));B[U]!==this.getDom(L.elems[0]);)G=u.default(B[U].nextElementSibling).elems[0],(0,a.default)(w).call(w,u.default(G).getNodeName())!==-1&&P.push(G),B.push(G),U++;if(u.default(B[0]).getNodeName()!=="P"){U=0;for(var z=0;z<B.length;z++)if(u.default(B[z]).getNodeName()==="P"){U=z;break}if(U===0)return;for(var $=0;$!==U;)B.shift(),$++}return this.setRange(B[0],B[B.length-1]),(0,i.default)(B).call(B,function(W){k=W.getAttribute("style"),I=k?k.split(";"):[],O=b.styleProcessing(I),u.default(W).getNodeName()==="P"&&v&&(O+=v?"line-height:"+v+";":""),F?u.default(W).css("line-height",v):_+="<"+u.default(W).getNodeName().toLowerCase()+' style="'+O+'">'+W.innerHTML+"</"+u.default(W).getNodeName().toLowerCase()+">"}),_&&this.action(_,x),T=C.elems[0],void this.setRange(T.children[N[0]],T.children[N[1]])}if(T=this.getDom(T),(0,a.default)(w).call(w,u.default(T).getNodeName())!==-1){if(k=T.getAttribute("style"),I=k?k.split(";"):[],y==null||y.selectAllChildren(T),x.selection.saveRange(),!v)return void(k&&(O=this.styleProcessing(I),_=O===""?"<"+u.default(T).getNodeName().toLowerCase()+">"+T.innerHTML+"</"+u.default(T).getNodeName().toLowerCase()+">":"<"+u.default(T).getNodeName().toLowerCase()+' style="'+O+'">'+T.innerHTML+"</"+u.default(T).getNodeName().toLowerCase()+">",this.action(_,x)));O=k?this.styleProcessing(I)+"line-height:"+v+";":"line-height:"+v+";",_="<"+u.default(T).getNodeName().toLowerCase()+' style="'+O+'">'+T.innerHTML+"</"+u.default(T).getNodeName().toLowerCase()+">",u.default(T).getNodeName()==="BLOCKQUOTE"||d.UA.isIE()?u.default(T).css("line-height",v):this.action(_,x)}}},m.prototype.getDom=function(v){var g=u.default(v).elems[0];if(!g.parentNode)return g;function b(y,w){var x=u.default(y.parentNode);return w.$textElem.equal(x)?y:b(x.elems[0],w)}return g=b(g,this.editor)},m.prototype.action=function(v,g){g.cmd.do("insertHTML",v)},m.prototype.styleProcessing=function(v){var g="";return(0,i.default)(v).call(v,function(b){b!==""&&(0,a.default)(b).call(b,"line-height")===-1&&(g=g+b+";")}),g},m.prototype.setRange=function(v,g){var b=this.editor,y=window.getSelection?window.getSelection():document.getSelection();y==null||y.removeAllRanges();var w=document.createRange(),x=v,_=g;w.setStart(x,0),w.setEnd(_,1),y==null||y.addRange(w),b.selection.saveRange(),y==null||y.removeAllRanges(),b.selection.restoreSelection()},m.prototype.tryChangeActive=function(){var v=this.editor,g=v.selection.getSelectionContainerElem();if(!g||!v.$textElem.equal(g)){var b=u.default(v.selection.getSelectionStartElem());if(b.length!==0){var y=(b=this.getDom(b.elems[0])).getAttribute("style")?b.getAttribute("style"):"";y&&(0,a.default)(y).call(y,"line-height")!==-1?this.active():this.unActive()}}},m}(s.default);t.default=f},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=n(2).__importDefault(n(3)),l=function(){function s(u,c){var d=this;this.itemList=[{$elem:a.default("<span>"+u.i18next.t("\u9ED8\u8BA4")+"</span>"),value:""}],(0,i.default)(c).call(c,function(f){d.itemList.push({$elem:a.default("<span>"+f+"</span>"),value:f})})}return s.prototype.getItemList=function(){return this.itemList},s}();t.default=l},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(3)),i=function(a){function l(s){var u=o.default(`<div class="w-e-menu" data-title="\u64A4\u9500">
| <i class="w-e-icon-undo"></i>
| </div>`);return a.call(this,u,s)||this}return r.__extends(l,a),l.prototype.clickHandler=function(){var s=this.editor;s.history.revoke();var u=s.$textElem.children();if(u!=null&&u.length){var c=u.last();s.selection.createRangeByElem(c,!1,!0),s.selection.restoreSelection()}},l.prototype.tryChangeActive=function(){this.editor.isCompatibleMode||(this.editor.history.size[0]?this.active():this.unActive())},l}(r.__importDefault(n(23)).default);t.default=i},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(3)),i=function(a){function l(s){var u=o.default(`<div class="w-e-menu" data-title="\u6062\u590D">
| <i class="w-e-icon-redo"></i>
| </div>`);return a.call(this,u,s)||this}return r.__extends(l,a),l.prototype.clickHandler=function(){var s=this.editor;s.history.restore();var u=s.$textElem.children();if(u!=null&&u.length){var c=u.last();s.selection.createRangeByElem(c,!1,!0),s.selection.restoreSelection()}},l.prototype.tryChangeActive=function(){this.editor.isCompatibleMode||(this.editor.history.size[1]?this.active():this.unActive())},l}(r.__importDefault(n(23)).default);t.default=i},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(37)),i=r.__importDefault(n(3)),a=r.__importDefault(n(383)),l=r.__importDefault(n(32)),s=r.__importDefault(n(392)),u=function(c){function d(f){var p=this,m=i.default('<div class="w-e-menu" data-title="\u8868\u683C"><i class="w-e-icon-table2"></i></div>');return p=c.call(this,m,f)||this,s.default(f),p}return r.__extends(d,c),d.prototype.clickHandler=function(){this.createPanel()},d.prototype.createPanel=function(){var f=a.default(this.editor);new l.default(this,f).create()},d.prototype.tryChangeActive=function(){},d}(o.default);t.default=u},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(384));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=n(6),s=a.__importDefault(n(3));n(389);var u=a.__importDefault(n(391));function c(f){return f>0&&(0,i.default)(f)}function d(f){var p=new u.default(f),m=l.getRandom("w-col-id"),v=l.getRandom("w-row-id"),g=l.getRandom("btn-link"),b="menus.panelMenus.table.",y=function(_){return f.i18next.t(_)},w=[{title:y(b+"\u63D2\u5165\u8868\u683C"),tpl:`<div>
| <div class="w-e-table">
| <span>`+y("\u521B\u5EFA")+`</span>
| <input id="`+v+`" type="text" class="w-e-table-input" value="5"/></td>
| <span>`+y(b+"\u884C")+`</span>
| <input id="`+m+`" type="text" class="w-e-table-input" value="5"/></td>
| <span>`+(y(b+"\u5217")+y(b+"\u7684")+y(b+"\u8868\u683C"))+`</span>
| </div>
| <div class="w-e-button-container">
| <button type="button" id="`+g+'" class="right">'+y("\u63D2\u5165")+`</button>
| </div>
| </div>`,events:[{selector:"#"+g,type:"click",fn:function(){var _=Number(s.default("#"+m).val()),E=Number(s.default("#"+v).val());return c(E)&&c(_)?(p.createAction(E,_),!0):(f.config.customAlert("\u8868\u683C\u884C\u5217\u8BF7\u8F93\u5165\u6B63\u6574\u6570","warning"),!1)},bindEnter:!0}]}],x={width:330,height:0,tabs:[]};return x.tabs.push(w[0]),x}t.default=d},function(e,t,n){e.exports=n(385)},function(e,t,n){var r=n(386);e.exports=r},function(e,t,n){n(387);var r=n(9);e.exports=r.Number.isInteger},function(e,t,n){n(5)({target:"Number",stat:!0},{isInteger:n(388)})},function(e,t,n){var r=n(13),o=Math.floor;e.exports=function(i){return!r(i)&&isFinite(i)&&o(i)===i}},function(e,t,n){var r=n(20),o=n(390);typeof(o=o.__esModule?o.default:o)=="string"&&(o=[[e.i,o,""]]);var i={insert:"head",singleton:!1};r(o,i),e.exports=o.locals||{}},function(e,t,n){(t=n(21)(!1)).push([e.i,`.w-e-table {
| display: flex;
| }
| .w-e-table .w-e-table-input {
| width: 40px;
| text-align: center!important;
| margin: 0 5px;
| }
| `,""]),e.exports=t},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=n(7),i=r.__importDefault(n(3)),a=function(){function l(s){this.editor=s}return l.prototype.createAction=function(s,u){var c=this.editor,d=i.default(c.selection.getSelectionContainerElem()),f=i.default(d.elems[0]).parentUntilEditor("UL",c),p=i.default(d.elems[0]).parentUntilEditor("OL",c);if(!f&&!p){var m=this.createTableHtml(s,u);c.cmd.do("insertHTML",m)}},l.prototype.createTableHtml=function(s,u){for(var c="",d="",f=0;f<s;f++){d="";for(var p=0;p<u;p++)d+=f===0?"<th></th>":"<td></td>";c=c+"<tr>"+d+"</tr>"}return'<table border="0" width="100%" cellpadding="0" cellspacing="0"><tbody>'+c+"</tbody></table>"+o.EMPTY_P},l}();t.default=a},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2).__importDefault(n(393)),o=n(400);function i(a){r.default(a),o.bindEventKeyboardEvent(a),o.bindClickEvent(a)}t.default=i},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(3)),i=r.__importDefault(n(38)),a=r.__importDefault(n(394)),l=r.__importDefault(n(399)),s=n(7);function u(p){var m;function v(b){var y=new l.default(p),w="menus.panelMenus.table.",x=function(E,C){return C===void 0&&(C=w),p.i18next.t(C+E)},_=[{$elem:o.default("<span>"+x("\u5220\u9664\u8868\u683C")+"</span>"),onClick:function(E,C){return E.selection.createRangeByElem(C),E.selection.restoreSelection(),E.cmd.do("insertHTML",s.EMPTY_P),!0}},{$elem:o.default("<span>"+x("\u6DFB\u52A0\u884C")+"</span>"),onClick:function(E,C){if(c(E))return!0;var T=o.default(E.selection.getSelectionStartElem()),k=y.getRowNode(T.elems[0]);if(!k)return!0;var I=Number(y.getCurrentRowIndex(C.elems[0],k)),O=y.getTableHtml(C.elems[0]),F=y.getTableHtml(a.default.ProcessingRow(o.default(O),I).elems[0]);return F=f(C,F),E.selection.createRangeByElem(C),E.selection.restoreSelection(),E.cmd.do("insertHTML",F),!0}},{$elem:o.default("<span>"+x("\u5220\u9664\u884C")+"</span>"),onClick:function(E,C){if(c(E))return!0;var T=o.default(E.selection.getSelectionStartElem()),k=y.getRowNode(T.elems[0]);if(!k)return!0;var I=Number(y.getCurrentRowIndex(C.elems[0],k)),O=y.getTableHtml(C.elems[0]),F=a.default.DeleteRow(o.default(O),I).elems[0].children[0].children.length,N="";return E.selection.createRangeByElem(C),E.selection.restoreSelection(),N=f(C,N=F===0?s.EMPTY_P:y.getTableHtml(a.default.DeleteRow(o.default(O),I).elems[0])),E.cmd.do("insertHTML",N),!0}},{$elem:o.default("<span>"+x("\u6DFB\u52A0\u5217")+"</span>"),onClick:function(E,C){if(c(E))return!0;var T=o.default(E.selection.getSelectionStartElem()),k=y.getCurrentColIndex(T.elems[0]),I=y.getTableHtml(C.elems[0]),O=y.getTableHtml(a.default.ProcessingCol(o.default(I),k).elems[0]);return O=f(C,O),E.selection.createRangeByElem(C),E.selection.restoreSelection(),E.cmd.do("insertHTML",O),!0}},{$elem:o.default("<span>"+x("\u5220\u9664\u5217")+"</span>"),onClick:function(E,C){if(c(E))return!0;var T=o.default(E.selection.getSelectionStartElem()),k=y.getCurrentColIndex(T.elems[0]),I=y.getTableHtml(C.elems[0]),O=a.default.DeleteCol(o.default(I),k),F=O.elems[0].children[0].children[0].children.length,N="";return E.selection.createRangeByElem(C),E.selection.restoreSelection(),N=f(C,N=F===0?s.EMPTY_P:y.getTableHtml(O.elems[0])),E.cmd.do("insertHTML",N),!0}},{$elem:o.default("<span>"+x("\u8BBE\u7F6E\u8868\u5934")+"</span>"),onClick:function(E,C){if(c(E))return!0;var T=o.default(E.selection.getSelectionStartElem()),k=y.getRowNode(T.elems[0]);if(!k)return!0;var I=Number(y.getCurrentRowIndex(C.elems[0],k));I!==0&&(I=0);var O=y.getTableHtml(C.elems[0]),F=y.getTableHtml(a.default.setTheHeader(o.default(O),I,"th").elems[0]);return F=f(C,F),E.selection.createRangeByElem(C),E.selection.restoreSelection(),E.cmd.do("insertHTML",F),!0}},{$elem:o.default("<span>"+x("\u53D6\u6D88\u8868\u5934")+"</span>"),onClick:function(E,C){var T=o.default(E.selection.getSelectionStartElem()),k=y.getRowNode(T.elems[0]);if(!k)return!0;var I=Number(y.getCurrentRowIndex(C.elems[0],k));I!==0&&(I=0);var O=y.getTableHtml(C.elems[0]),F=y.getTableHtml(a.default.setTheHeader(o.default(O),I,"td").elems[0]);return F=f(C,F),E.selection.createRangeByElem(C),E.selection.restoreSelection(),E.cmd.do("insertHTML",F),!0}}];(m=new i.default(p,b,_)).create()}function g(){m&&(m.remove(),m=null)}return{showTableTooltip:v,hideTableTooltip:g}}function c(p){var m=p.selection.getSelectionStartElem(),v=p.selection.getSelectionEndElem();return(m==null?void 0:m.elems[0])!==(v==null?void 0:v.elems[0])}function d(p){var m=u(p),v=m.showTableTooltip,g=m.hideTableTooltip;p.txt.eventHooks.tableClickEvents.push(v),p.txt.eventHooks.clickEvents.push(g),p.txt.eventHooks.keyupEvents.push(g),p.txt.eventHooks.toolbarClickEvents.push(g),p.txt.eventHooks.menuClickEvents.push(g),p.txt.eventHooks.textScrollEvents.push(g)}function f(p,m){var v=p.elems[0].nextSibling;return(!v||v.innerHTML==="<br>")&&(m+=""+s.EMPTY_P),m}t.default=d},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(45)),a=r(n(91)),l=r(n(4)),s=r(n(138));(0,o.default)(t,"__esModule",{value:!0});var u=n(2).__importDefault(n(3));function c(b,y){for(var w=g(b),x=(0,i.default)(Array.prototype).apply(w.children),_=x[0].children.length,E=document.createElement("tr"),C=0;C<_;C++){var T=document.createElement("td");E.appendChild(T)}return(0,a.default)(x).call(x,y+1,0,E),v(w,x),u.default(w.parentNode)}function d(b,y){for(var w=g(b),x=(0,i.default)(Array.prototype).apply(w.children),_=function(C){var T,k=[];for((0,l.default)(T=(0,s.default)(x[C].children)).call(T,function(F){k.push(F)});x[C].children.length!==0;)x[C].removeChild(x[C].children[0]);var I=u.default(k[0]).getNodeName()!=="TH"?document.createElement("td"):document.createElement("th");(0,a.default)(k).call(k,y+1,0,I);for(var O=0;O<k.length;O++)x[C].appendChild(k[O])},E=0;E<x.length;E++)_(E);return v(w,x),u.default(w.parentNode)}function f(b,y){var w=g(b),x=(0,i.default)(Array.prototype).apply(w.children);return(0,a.default)(x).call(x,y,1),v(w,x),u.default(w.parentNode)}function p(b,y){for(var w=g(b),x=(0,i.default)(Array.prototype).apply(w.children),_=function(C){var T,k=[];for((0,l.default)(T=(0,s.default)(x[C].children)).call(T,function(O){k.push(O)});x[C].children.length!==0;)x[C].removeChild(x[C].children[0]);(0,a.default)(k).call(k,y,1);for(var I=0;I<k.length;I++)x[C].appendChild(k[I])},E=0;E<x.length;E++)_(E);return v(w,x),u.default(w.parentNode)}function m(b,y,w){for(var x=g(b),_=(0,i.default)(Array.prototype).apply(x.children),E=_[y].children,C=document.createElement("tr"),T=function(I){var O,F=document.createElement(w),N=E[I];(0,l.default)(O=(0,s.default)(N.childNodes)).call(O,function(B){F.appendChild(B)}),C.appendChild(F)},k=0;k<E.length;k++)T(k);return(0,a.default)(_).call(_,y,1,C),v(x,_),u.default(x.parentNode)}function v(b,y){for(;b.children.length!==0;)b.removeChild(b.children[0]);for(var w=0;w<y.length;w++)b.appendChild(y[w])}function g(b){var y=b.elems[0].children[0];return y.nodeName==="COLGROUP"&&(y=b.elems[0].children[b.elems[0].children.length-1]),y}t.default={ProcessingRow:c,ProcessingCol:d,DeleteRow:f,DeleteCol:p,setTheHeader:m}},function(e,t,n){var r=n(396);e.exports=r},function(e,t,n){n(50),n(397);var r=n(9);e.exports=r.Array.from},function(e,t,n){var r=n(5),o=n(398),i=!n(114)(function(a){Array.from(a)});r({target:"Array",stat:!0,forced:i},{from:o})},function(e,t,n){var r=n(39),o=n(29),i=n(113),a=n(111),l=n(34),s=n(69),u=n(112);e.exports=function(c){var d,f,p,m,v,g,b=o(c),y=typeof this=="function"?this:Array,w=arguments.length,x=w>1?arguments[1]:void 0,_=x!==void 0,E=u(b),C=0;if(_&&(x=r(x,w>2?arguments[2]:void 0,2)),E==null||y==Array&&a(E))for(f=new y(d=l(b.length));d>C;C++)g=_?x(b[C],C):b[C],s(f,C,g);else for(v=(m=E.call(b)).next,f=new y;!(p=v.call(m)).done;C++)g=_?i(m,x,[p.value,C],!0):p.value,s(f,C,g);return f.length=C,f}},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4)),a=r(n(138));(0,o.default)(t,"__esModule",{value:!0});var l=n(2).__importDefault(n(3)),s=function(){function u(c){this.editor=c}return u.prototype.getRowNode=function(c){var d,f=l.default(c).elems[0];return f.parentNode&&(f=(d=l.default(f).parentUntil("TR",f))===null||d===void 0?void 0:d.elems[0]),f},u.prototype.getCurrentRowIndex=function(c,d){var f,p=0,m=c.children[0];return m.nodeName==="COLGROUP"&&(m=c.children[c.children.length-1]),(0,i.default)(f=(0,a.default)(m.children)).call(f,function(v,g){v===d&&(p=g)}),p},u.prototype.getCurrentColIndex=function(c){var d,f,p=0,m=l.default(c).getNodeName()==="TD"||l.default(c).getNodeName()==="TH"?c:(f=l.default(c).parentUntil("TD",c))===null||f===void 0?void 0:f.elems[0],v=l.default(m).parent();return(0,i.default)(d=(0,a.default)(v.elems[0].children)).call(d,function(g,b){g===m&&(p=b)}),p},u.prototype.getTableHtml=function(c){return'<table border="0" width="100%" cellpadding="0" cellspacing="0">'+l.default(c).html()+"</table>"},u}();t.default=s},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.bindEventKeyboardEvent=t.bindClickEvent=void 0;var r=n(2).__importDefault(n(3));function o(l){if(!l.length)return!1;var s=l.elems[0];return s.nodeName==="P"&&s.innerHTML==="<br>"}function i(l){function s(u,c){if(c.detail>=3){var d=window.getSelection();if(d){var f=d.focusNode,p=d.anchorNode,m=r.default(p==null?void 0:p.parentElement);if(!u.isContain(r.default(f))){var v=m.elems[0].tagName==="TD"?m:m.parentUntilEditor("td",l);if(v){var g=l.selection.getRange();g==null||g.setEnd(v.elems[0],v.elems[0].childNodes.length),l.selection.restoreSelection()}}}}}l.txt.eventHooks.tableClickEvents.push(s)}function a(l){var s=l.txt,u=l.selection;s.eventHooks.keydownEvents.push(function(c){l.selection.saveRange();var d=u.getSelectionContainerElem();if(d){var f=d.getNodeTop(l),p=f.length&&f.prev().length?f.prev():null;if(p&&p.getNodeName()==="TABLE"&&u.isSelectionEmpty()&&u.getCursorPos()===0&&c.keyCode===8){var m=f.next();m.length&&o(f)&&(f.remove(),l.selection.setRangeToElem(m.elems[0])),c.preventDefault()}}})}t.bindClickEvent=i,t.bindEventKeyboardEvent=a},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(26));(0,o.default)(t,"__esModule",{value:!0}),t.formatCodeHtml=void 0;var a=n(2),l=a.__importDefault(n(37)),s=a.__importDefault(n(3)),u=n(6),c=a.__importDefault(n(402)),d=a.__importDefault(n(139)),f=a.__importDefault(n(32)),p=a.__importDefault(n(403));function m(g,b){return b&&(b=y(b=w(b)),b=u.replaceSpecialSymbol(b));function y(x){var _=x.match(/<pre[\s|\S]+?\/pre>/g);return _===null||(0,i.default)(_).call(_,function(E){x=x.replace(E,E.replace(/<\/code><code>/g,`
| `).replace(/<br>/g,""))}),x}function w(x){var _,E=x.match(/<span\sclass="hljs[\s|\S]+?\/span>/gm);if(!E||!E.length)return x;for(var C=(0,i.default)(_=u.deepClone(E)).call(_,function(k){return(k=k.replace(/<span\sclass="hljs[^>]+>/,"")).replace(/<\/span>/,"")}),T=0;T<E.length;T++)x=x.replace(E[T],C[T]);return w(x)}}t.formatCodeHtml=m;var v=function(g){function b(y){var w=this,x=s.default('<div class="w-e-menu" data-title="\u4EE3\u7801"><i class="w-e-icon-terminal"></i></div>');return w=g.call(this,x,y)||this,p.default(y),w}return a.__extends(b,g),b.prototype.insertLineCode=function(y){var w=this.editor,x=s.default("<code>"+y+"</code>");w.cmd.do("insertElem",x),w.selection.createRangeByElem(x,!1),w.selection.restoreSelection()},b.prototype.clickHandler=function(){var y=this.editor,w=y.selection.getSelectionText();this.isActive||(y.selection.isSelectionEmpty()?this.createPanel("",""):this.insertLineCode(w))},b.prototype.createPanel=function(y,w){var x=c.default(this.editor,y,w);new f.default(this,x).create()},b.prototype.tryChangeActive=function(){var y=this.editor;d.default(y)?this.active():this.unActive()},b}(l.default);t.default=v},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(26));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=n(6),s=a.__importDefault(n(3)),u=a.__importDefault(n(139)),c=n(7);function d(f,p,m){var v,g=l.getRandom("input-iframe"),b=l.getRandom("select"),y=l.getRandom("btn-ok");function w(C){var T;u.default(f)&&x(),!((T=f.selection.getSelectionStartElem())===null||T===void 0)&&T.elems[0].innerHTML&&f.cmd.do("insertHTML",c.EMPTY_P),f.cmd.do("insertHTML",C);var k=f.selection.getSelectionStartElem(),I=k==null?void 0:k.getNodeTop(f);(I==null?void 0:I.getNextSibling().elems.length)===0&&s.default(c.EMPTY_P).insertAfter(I)}function x(){if(u.default(f)){var C=f.selection.getSelectionStartElem(),T=C==null?void 0:C.getNodeTop(f);!T||(f.selection.createRangeByElem(T),f.selection.restoreSelection())}}var _=function(C){return f.i18next.t(C)},E={width:500,height:0,tabs:[{title:_("menus.panelMenus.code.\u63D2\u5165\u4EE3\u7801"),tpl:`<div>
| <select name="" id="`+b+`">
| `+(0,i.default)(v=f.config.languageType).call(v,function(C){return"<option "+(m==C?"selected":"")+' value ="'+C+'">'+C+"</option>"})+`
| </select>
| <textarea id="`+g+'" type="text" class="wang-code-textarea" placeholder="" style="height: 160px">'+p.replace(/"/g,'"')+`</textarea>
| <div class="w-e-button-container">
| <button type="button" id="`+y+'" class="right">'+(u.default(f)?_("\u4FEE\u6539"):_("\u63D2\u5165"))+`</button>
| </div>
| </div>`,events:[{selector:"#"+y,type:"click",fn:function(){var C,T=document.getElementById(g),k=s.default("#"+b).val(),I=T.value;if(C=f.highlight?f.highlight.highlightAuto(I).value:"<xmp>"+I+"</xmp>",I)return!u.default(f)&&(w('<pre><code class="'+k+'">'+C+"</code></pre>"),!0)}}]}]};return E}t.default=d},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(404)),i=r.__importDefault(n(405));function a(l){o.default(l),i.default(l)}t.default=a},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.createShowHideFn=void 0;var r=n(2),o=r.__importDefault(n(3)),i=r.__importDefault(n(38));function a(s){var u;function c(f){var p="menus.panelMenus.code.",m=function(g,b){return b===void 0&&(b=p),s.i18next.t(b+g)},v=[{$elem:o.default("<span>"+m("\u5220\u9664\u4EE3\u7801")+"</span>"),onClick:function(g,b){return b.remove(),!0}}];(u=new i.default(s,f,v)).create()}function d(){u&&(u.remove(),u=null)}return{showCodeTooltip:c,hideCodeTooltip:d}}function l(s){var u=a(s),c=u.showCodeTooltip,d=u.hideCodeTooltip;s.txt.eventHooks.codeClickEvents.push(c),s.txt.eventHooks.clickEvents.push(d),s.txt.eventHooks.toolbarClickEvents.push(d),s.txt.eventHooks.menuClickEvents.push(d),s.txt.eventHooks.textScrollEvents.push(d)}t.createShowHideFn=a,t.default=l},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=n(7),i=r.__importDefault(n(3));function a(l){var s=l.$textElem,u=l.selection,c=l.txt.eventHooks.keydownEvents;c.push(function(d){var f;if(d.keyCode===40){var p=u.getSelectionContainerElem(),m=(f=s.children())===null||f===void 0?void 0:f.last();if((p==null?void 0:p.elems[0].tagName)==="XMP"&&(m==null?void 0:m.elems[0].tagName)==="PRE"){var v=i.default(o.EMPTY_P);s.append(v)}}}),c.push(function(d){l.selection.saveRange();var f=u.getSelectionContainerElem();if(f){var p=f.getNodeTop(l),m=p==null?void 0:p.prev(),v=p==null?void 0:p.getNextSibling();if(m.length&&(m==null?void 0:m.getNodeName())==="PRE"&&v.length===0&&u.getCursorPos()===0&&d.keyCode===8){var g=i.default(o.EMPTY_P);s.append(g)}}})}t.default=a},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(23)),i=r.__importDefault(n(3)),a=r.__importDefault(n(407)),l=n(6),s=n(7),u=function(c){function d(f){var p=this,m=i.default('<div class="w-e-menu" data-title="\u5206\u5272\u7EBF"><i class="w-e-icon-split-line"></i></div>');return p=c.call(this,m,f)||this,a.default(f),p}return r.__extends(d,c),d.prototype.clickHandler=function(){var f=this.editor,p=f.selection.getRange(),m=f.selection.getSelectionContainerElem();if(m!=null&&m.length){var v=i.default(m.elems[0]),g=v.parentUntil("TABLE",m.elems[0]),b=v.children();v.getNodeName()!=="CODE"&&(g&&i.default(g.elems[0]).getNodeName()==="TABLE"||b&&b.length!==0&&i.default(b.elems[0]).getNodeName()==="IMG"&&(p==null||!p.collapsed)||this.createSplitLine())}},d.prototype.createSplitLine=function(){var f="<hr/>"+s.EMPTY_P;l.UA.isFirefox&&(f="<hr/><p></p>"),this.editor.cmd.do("insertHTML",f)},d.prototype.tryChangeActive=function(){},d}(o.default);t.default=u},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2).__importDefault(n(408));function o(i){r.default(i)}t.default=o},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(3)),i=r.__importDefault(n(38));function a(s){var u;function c(f){var p=[{$elem:o.default("<span>"+s.i18next.t("menus.panelMenus.\u5220\u9664")+"</span>"),onClick:function(m,v){return m.selection.createRangeByElem(v),m.selection.restoreSelection(),m.cmd.do("delete"),!0}}];(u=new i.default(s,f,p)).create()}function d(){u&&(u.remove(),u=null)}return{showSplitLineTooltip:c,hideSplitLineTooltip:d}}function l(s){var u=a(s),c=u.showSplitLineTooltip,d=u.hideSplitLineTooltip;s.txt.eventHooks.splitLineEvents.push(c),s.txt.eventHooks.clickEvents.push(d),s.txt.eventHooks.keyupEvents.push(d),s.txt.eventHooks.toolbarClickEvents.push(d),s.txt.eventHooks.menuClickEvents.push(d),s.txt.eventHooks.textScrollEvents.push(d)}t.default=l},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=a.__importDefault(n(3)),s=a.__importDefault(n(23)),u=n(97),c=a.__importDefault(n(415)),d=a.__importDefault(n(140)),f=function(p){function m(v){var g=this,b=l.default(`<div class="w-e-menu" data-title="\u5F85\u529E\u4E8B\u9879">
| <i class="w-e-icon-checkbox-checked"></i>
| </div>`);return g=p.call(this,b,v)||this,c.default(v),g}return a.__extends(m,p),m.prototype.clickHandler=function(){var v=this.editor;u.isAllTodo(v)?(this.cancelTodo(),this.tryChangeActive()):this.setTodo()},m.prototype.tryChangeActive=function(){u.isAllTodo(this.editor)?this.active():this.unActive()},m.prototype.setTodo=function(){var v=this.editor,g=v.selection.getSelectionRangeTopNodes();(0,i.default)(g).call(g,function(b){var y;if((b==null?void 0:b.getNodeName())==="P"){var w=d.default(b).getTodo(),x=(y=w.children())===null||y===void 0?void 0:y.getNode();w.insertAfter(b),v.selection.moveCursor(x),b.remove()}}),this.tryChangeActive()},m.prototype.cancelTodo=function(){var v=this.editor,g=v.selection.getSelectionRangeTopNodes();(0,i.default)(g).call(g,function(b){var y,w,x,_=(w=(y=b.childNodes())===null||y===void 0?void 0:y.childNodes())===null||w===void 0?void 0:w.clone(!0),E=l.default("<p></p>");E.append(_),E.insertAfter(b),(x=E.childNodes())===null||x===void 0||x.get(0).remove(),v.selection.moveCursor(E.getNode()),b.remove()})},m}(s.default);t.default=f},function(e,t,n){e.exports=n(411)},function(e,t,n){var r=n(412);e.exports=r},function(e,t,n){var r=n(413),o=Array.prototype;e.exports=function(i){var a=i.every;return i===o||i instanceof Array&&a===o.every?r:a}},function(e,t,n){n(414);var r=n(15);e.exports=r("Array").every},function(e,t,n){var r=n(5),o=n(30).every,i=n(67),a=n(22),l=i("every"),s=a("every");r({target:"Array",proto:!0,forced:!l||!s},{every:function(u){return o(this,u,arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=n(2),l=a.__importDefault(n(3)),s=n(97),u=a.__importDefault(n(140)),c=n(97),d=n(7);function f(p){function m(y){var w,x;if(s.isAllTodo(p)){y.preventDefault();var _=p.selection,E=_.getSelectionRangeTopNodes()[0],C=(w=E.childNodes())===null||w===void 0?void 0:w.get(0),T=(x=window.getSelection())===null||x===void 0?void 0:x.anchorNode,k=_.getRange();if(k==null||!k.collapsed){var I=k==null?void 0:k.commonAncestorContainer.childNodes,O=k==null?void 0:k.startContainer,F=k==null?void 0:k.endContainer,N=k==null?void 0:k.startOffset,B=k==null?void 0:k.endOffset,P=0,V=0,L=[];I==null||(0,i.default)(I).call(I,function(te,ne){te.contains(O)&&(P=ne),te.contains(F)&&(V=ne)}),V-P>1&&(I==null||(0,i.default)(I).call(I,function(te,ne){ne<=P||ne>=V||L.push(te)}),(0,i.default)(L).call(L,function(te){te.remove()})),c.dealTextNode(O,N),c.dealTextNode(F,B,!1),p.selection.moveCursor(F,0)}if(E.text()===""){var H=l.default(d.EMPTY_P);return H.insertAfter(E),_.moveCursor(H.getNode()),void E.remove()}var U=_.getCursorPos(),G=s.getCursorNextNode(C==null?void 0:C.getNode(),T,U),z=u.default(l.default(G)),$=z.getInputContainer(),W=$.parent().getNode(),K=z.getTodo(),X=$.getNode().nextSibling;(C==null?void 0:C.text())===""&&(C==null||C.append(l.default("<br>"))),K.insertAfter(E),X&&(X==null?void 0:X.textContent)!==""?_.moveCursor(W):((X==null?void 0:X.nodeName)!=="BR"&&l.default("<br>").insertAfter($),_.moveCursor(W,1))}}function v(y){var w,x;if(s.isAllTodo(p)){var _,E=p.selection,C=E.getSelectionRangeTopNodes()[0],T=(w=C.childNodes())===null||w===void 0?void 0:w.getNode(),k=l.default("<p></p>"),I=k.getNode(),O=(x=window.getSelection())===null||x===void 0?void 0:x.anchorNode,F=E.getCursorPos(),N=O.previousSibling;if(C.text()===""){y.preventDefault();var B=l.default(d.EMPTY_P);return B.insertAfter(C),C.remove(),void E.moveCursor(B.getNode(),0)}(N==null?void 0:N.nodeName)==="SPAN"&&N.childNodes[0].nodeName==="INPUT"&&F===0&&(y.preventDefault(),T==null||(0,i.default)(_=T.childNodes).call(_,function(P,V){V!==0&&I.appendChild(P.cloneNode(!0))}),k.insertAfter(C),C.remove())}}function g(){var y=p.selection.getSelectionRangeTopNodes()[0];y&&c.isTodo(y)&&y.text()===""&&(l.default(d.EMPTY_P).insertAfter(y),y.remove())}function b(y){y&&y.target instanceof HTMLInputElement&&y.target.type==="checkbox"&&(y.target.checked?y.target.setAttribute("checked","true"):y.target.removeAttribute("checked"))}p.txt.eventHooks.enterDownEvents.push(m),p.txt.eventHooks.deleteUpEvents.push(g),p.txt.eventHooks.deleteDownEvents.push(v),p.txt.eventHooks.clickEvents.push(b)}t.default=f},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.selectorValidator=void 0;var r=n(2),o=r.__importDefault(n(3)),i=n(6),a=n(7),l=r.__importDefault(n(129)),s={border:"1px solid #c9d8db",toolbarBgColor:"#FFF",toolbarBottomBorder:"1px solid #EEE"};function u(d){var f,p,m=d.toolbarSelector,v=o.default(m),g=d.textSelector,b=d.config.height,y=d.i18next,w=o.default("<div></div>"),x=o.default("<div></div>"),_=null;g==null?(p=v.children(),v.append(w).append(x),w.css("background-color",s.toolbarBgColor).css("border",s.border).css("border-bottom",s.toolbarBottomBorder),x.css("border",s.border).css("border-top","none").css("height",b+"px")):(v.append(w),_=o.default(g).children(),o.default(g).append(x),p=x.children()),(f=o.default("<div></div>")).attr("contenteditable","true").css("width","100%").css("height","100%");var E,C=d.config.placeholder;(E=C!==l.default.placeholder?o.default("<div>"+C+"</div>"):o.default("<div>"+y.t(C)+"</div>")).addClass("placeholder"),p&&p.length?(f.append(p),E.hide()):f.append(o.default(a.EMPTY_P)),_&&_.length&&(f.append(_),E.hide()),x.append(f),x.append(E),w.addClass("w-e-toolbar").css("z-index",d.zIndex.get("toolbar")),x.addClass("w-e-text-container"),x.css("z-index",d.zIndex.get()),f.addClass("w-e-text");var T=i.getRandom("toolbar-elem");w.attr("id",T);var k=i.getRandom("text-elem");f.attr("id",k);var I=x.getBoundingClientRect().height;I!==f.getBoundingClientRect().height&&f.css("min-height",I+"px"),d.$toolbarElem=w,d.$textContainerElem=x,d.$textElem=f,d.toolbarElemId=T,d.textElemId=k}function c(d){var f="data-we-id",p=/^wangEditor-\d+$/,m=d.textSelector,v=d.toolbarSelector,g={bar:o.default("<div></div>"),text:o.default("<div></div>")};if(v==null)throw new Error("\u9519\u8BEF\uFF1A\u521D\u59CB\u5316\u7F16\u8F91\u5668\u65F6\u5019\u672A\u4F20\u5165\u4EFB\u4F55\u53C2\u6570\uFF0C\u8BF7\u67E5\u9605\u6587\u6863");if(g.bar=o.default(v),!g.bar.elems.length)throw new Error("\u65E0\u6548\u7684\u8282\u70B9\u9009\u62E9\u5668\uFF1A"+v);if(p.test(g.bar.attr(f)))throw new Error("\u521D\u59CB\u5316\u8282\u70B9\u5DF2\u5B58\u5728\u7F16\u8F91\u5668\u5B9E\u4F8B\uFF0C\u65E0\u6CD5\u91CD\u590D\u521B\u5EFA\u7F16\u8F91\u5668");if(m){if(g.text=o.default(m),!g.text.elems.length)throw new Error("\u65E0\u6548\u7684\u8282\u70B9\u9009\u62E9\u5668\uFF1A"+m);if(p.test(g.text.attr(f)))throw new Error("\u521D\u59CB\u5316\u8282\u70B9\u5DF2\u5B58\u5728\u7F16\u8F91\u5668\u5B9E\u4F8B\uFF0C\u65E0\u6CD5\u91CD\u590D\u521B\u5EFA\u7F16\u8F91\u5668")}g.bar.attr(f,d.id),g.text.attr(f,d.id),d.beforeDestroy(function(){g.bar.removeAttr(f),g.text.removeAttr(f)})}t.default=u,t.selectorValidator=c},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2).__importDefault(n(3)),o=n(7);function i(a,l){var s=a.$textElem,u=s.children();if(!u||!u.length)return s.append(r.default(o.EMPTY_P)),void i(a);var c=u.last();if(l){var d=c.html().toLowerCase(),f=c.getNodeName();if(d!=="<br>"&&d!=="<br/>"||f!=="P")return s.append(r.default(o.EMPTY_P)),void i(a)}a.selection.createRangeByElem(c,!1,!0),a.config.focus?a.selection.restoreSelection():a.selection.clearWindowSelectionRange()}t.default=i},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var a=n(2).__importDefault(n(3));function l(p){s(p),u(p),c(p)}function s(p){p.txt.eventHooks.changeEvents.push(function(){var m=p.config.onchange;if(m){var v=p.txt.html()||"";p.isFocus=!0,m(v)}p.txt.togglePlaceholder()})}function u(p){function m(v){var g=v.target,b=a.default(g),y=p.$textElem,w=p.$toolbarElem,x=y.isContain(b),_=w.isContain(b),E=w.elems[0]==v.target;if(x)p.isFocus||f(p),p.isFocus=!0;else{if(_&&!E||!p.isFocus)return;d(p),p.isFocus=!1}}p.isFocus=!1,document.activeElement===p.$textElem.elems[0]&&p.config.focus&&(f(p),p.isFocus=!0),a.default(document).on("click",m),p.beforeDestroy(function(){a.default(document).off("click",m)})}function c(p){p.$textElem.on("compositionstart",function(){p.isComposing=!0,p.txt.togglePlaceholder()}).on("compositionend",function(){p.isComposing=!1,p.txt.togglePlaceholder()})}function d(p){var m,v=p.config.onblur,g=p.txt.html()||"";(0,i.default)(m=p.txt.eventHooks.onBlurEvents).call(m,function(b){return b()}),v(g)}function f(p){(0,p.config.onfocus)(p.txt.html()||"")}t.default=l},function(e,t,n){function r(o){var i=o.config,a=i.lang,l=i.languages;if(o.i18next==null)o.i18next={t:function(s){var u=s.split(".");return u[u.length-1]}};else try{o.i18next.init({ns:"wangEditor",lng:a,defaultNS:"wangEditor",resources:l})}catch(s){throw new Error("i18next:"+s)}}(0,n(0)(n(1)).default)(t,"__esModule",{value:!0}),t.default=r},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(31));(0,o.default)(t,"__esModule",{value:!0}),t.setUnFullScreen=t.setFullScreen=void 0;var a=n(2).__importDefault(n(3));n(421);var l="w-e-icon-fullscreen",s="w-e-icon-fullscreen_exit",u="w-e-full-screen-editor";t.setFullScreen=function(d){var f=a.default(d.toolbarSelector),p=d.$textContainerElem,m=d.$toolbarElem,v=(0,i.default)(m).call(m,"i."+l),g=d.config;v.removeClass(l),v.addClass(s),f.addClass(u),f.css("z-index",g.zIndexFullScreen);var b=m.getBoundingClientRect();p.css("height","calc(100% - "+b.height+"px)")},t.setUnFullScreen=function(d){var f=a.default(d.toolbarSelector),p=d.$textContainerElem,m=d.$toolbarElem,v=(0,i.default)(m).call(m,"i."+s),g=d.config;v.removeClass(s),v.addClass(l),f.removeClass(u),f.css("z-index","auto"),p.css("height",g.height+"px")};var c=function(d){if(!d.textSelector&&d.config.showFullScreen){var f=d.$toolbarElem,p=a.default(`<div class="w-e-menu" data-title="\u5168\u5C4F">
| <i class="`+l+`"></i>
| </div>`);p.on("click",function(m){var v;(0,i.default)(v=a.default(m.currentTarget)).call(v,"i").hasClass(l)?(p.attr("data-title","\u53D6\u6D88\u5168\u5C4F"),t.setFullScreen(d)):(p.attr("data-title","\u5168\u5C4F"),t.setUnFullScreen(d))}),f.append(p)}};t.default=c},function(e,t,n){var r=n(20),o=n(422);typeof(o=o.__esModule?o.default:o)=="string"&&(o=[[e.i,o,""]]);var i={insert:"head",singleton:!1};r(o,i),e.exports=o.locals||{}},function(e,t,n){(t=n(21)(!1)).push([e.i,`.w-e-full-screen-editor {
| position: fixed;
| width: 100%!important;
| height: 100%!important;
| left: 0;
| top: 0;
| }
| `,""]),e.exports=t},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(31));(0,o.default)(t,"__esModule",{value:!0});var a=function(l,s){var u,c=l.isEnable?l.$textElem:(0,i.default)(u=l.$textContainerElem).call(u,".w-e-content-mantle"),d=(0,i.default)(c).call(c,"[id='"+s+"']").getOffsetData().top;c.scrollTop(d)};t.default=a},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2).__importDefault(n(128)),o={menu:2,panel:2,toolbar:1,tooltip:1,textContainer:1},i=function(){function a(){this.tier=o,this.baseZIndex=r.default.zIndex}return a.prototype.get=function(l){return l&&this.tier[l]?this.baseZIndex+this.tier[l]:this.baseZIndex},a.prototype.init=function(l){this.baseZIndex==r.default.zIndex&&(this.baseZIndex=l.config.zIndex)},a}();t.default=i},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(70)),a=r(n(4));(0,o.default)(t,"__esModule",{value:!0});var l=n(2),s=l.__importDefault(n(426)),u=n(6),c=n(7);function d(p,m){return(0,i.default)(p).call(p,function(v){var g=v.type,b=v.target,y=v.attributeName;return g!="attributes"||g=="attributes"&&(y=="contenteditable"||b!=m)})}var f=function(p){function m(v){var g=p.call(this,function(b,y){var w;if(b=d(b,y.target),(w=g.data).push.apply(w,b),v.isCompatibleMode)g.asyncSave();else if(!v.isComposing)return g.asyncSave()})||this;return g.editor=v,g.data=[],g.asyncSave=c.EMPTY_FN,g}return l.__extends(m,p),m.prototype.save=function(){this.data.length&&(this.editor.history.save(this.data),this.data.length=0,this.emit())},m.prototype.emit=function(){var v;(0,a.default)(v=this.editor.txt.eventHooks.changeEvents).call(v,function(g){return g()})},m.prototype.observe=function(){var v=this;p.prototype.observe.call(this,this.editor.$textElem.elems[0]);var g=this.editor.config.onchangeTimeout;this.asyncSave=u.debounce(function(){v.save()},g),this.editor.isCompatibleMode||this.editor.$textElem.on("compositionend",function(){v.asyncSave()})},m}(s.default);t.default=f},function(e,t,n){var r=n(0)(n(1));(0,r.default)(t,"__esModule",{value:!0});var o=function(){function i(a,l){var s=this;this.options={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,characterData:!0,characterDataOldValue:!0},this.callback=function(u){a(u,s)},this.observer=new MutationObserver(this.callback),l&&(this.options=l)}return(0,r.default)(i.prototype,"target",{get:function(){return this.node},enumerable:!1,configurable:!0}),i.prototype.observe=function(a){this.node instanceof Node||(this.node=a,this.connect())},i.prototype.connect=function(){if(this.node)return this.observer.observe(this.node,this.options),this;throw new Error("\u8FD8\u672A\u521D\u59CB\u5316\u7ED1\u5B9A\uFF0C\u8BF7\u60A8\u5148\u7ED1\u5B9A\u6709\u6548\u7684 Node \u8282\u70B9")},i.prototype.disconnect=function(){var a=this.observer.takeRecords();a.length&&this.callback(a),this.observer.disconnect()},i}();t.default=o},function(e,t,n){var r=n(0)(n(1));(0,r.default)(t,"__esModule",{value:!0});var o=n(2),i=o.__importDefault(n(428)),a=o.__importDefault(n(435)),l=o.__importDefault(n(436)),s=function(){function u(c){this.editor=c,this.content=new i.default(c),this.scroll=new a.default(c),this.range=new l.default(c)}return(0,r.default)(u.prototype,"size",{get:function(){return this.scroll.size},enumerable:!1,configurable:!0}),u.prototype.observe=function(){this.content.observe(),this.scroll.observe(),!this.editor.isCompatibleMode&&this.range.observe()},u.prototype.save=function(c){c.length&&(this.content.save(c),this.scroll.save(),!this.editor.isCompatibleMode&&this.range.save())},u.prototype.revoke=function(){this.editor.change.disconnect();var c=this.content.revoke();c&&(this.scroll.revoke(),this.editor.isCompatibleMode||(this.range.revoke(),this.editor.$textElem.focus())),this.editor.change.connect(),c&&this.editor.change.emit()},u.prototype.restore=function(){this.editor.change.disconnect();var c=this.content.restore();c&&(this.scroll.restore(),this.editor.isCompatibleMode||(this.range.restore(),this.editor.$textElem.focus())),this.editor.change.connect(),c&&this.editor.change.emit()},u}();t.default=s},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(429)),i=r.__importDefault(n(433)),a=function(){function l(s){this.editor=s}return l.prototype.observe=function(){this.editor.isCompatibleMode?this.cache=new i.default(this.editor):this.cache=new o.default(this.editor),this.cache.observe()},l.prototype.save=function(s){this.editor.isCompatibleMode?this.cache.save():this.cache.compile(s)},l.prototype.revoke=function(){var s;return(s=this.cache)===null||s===void 0?void 0:s.revoke()},l.prototype.restore=function(){var s;return(s=this.cache)===null||s===void 0?void 0:s.restore()},l}();t.default=a},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=r.__importDefault(n(98)),i=r.__importDefault(n(431)),a=n(432),l=function(s){function u(c){var d=s.call(this,c.config.historyMaxSize)||this;return d.editor=c,d}return r.__extends(u,s),u.prototype.observe=function(){this.resetMaxSize(this.editor.config.historyMaxSize)},u.prototype.compile=function(c){return this.save(i.default(c)),this},u.prototype.revoke=function(){return s.prototype.revoke.call(this,function(c){a.revoke(c)})},u.prototype.restore=function(){return s.prototype.restore.call(this,function(c){a.restore(c)})},u}(o.default);t.default=l},function(e,t,n){var r=n(0)(n(1));(0,r.default)(t,"__esModule",{value:!0}),t.CeilStack=void 0;var o=function(){function i(a){a===void 0&&(a=0),this.data=[],this.max=0,this.reset=!1,(a=Math.abs(a))&&(this.max=a)}return i.prototype.resetMax=function(a){a=Math.abs(a),!this.reset&&!isNaN(a)&&(this.max=a,this.reset=!0)},(0,r.default)(i.prototype,"size",{get:function(){return this.data.length},enumerable:!1,configurable:!0}),i.prototype.instack=function(a){return this.data.unshift(a),this.max&&this.size>this.max&&(this.data.length=this.max),this},i.prototype.outstack=function(){return this.data.shift()},i.prototype.clear=function(){return this.data.length=0,this},i}();t.CeilStack=o},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4)),a=r(n(27));(0,o.default)(t,"__esModule",{value:!0}),t.compliePosition=t.complieNodes=t.compileValue=t.compileType=void 0;var l=n(6);function s(v){switch(v){case"childList":return"node";case"attributes":return"attr";default:return"text"}}function u(v){switch(v.type){case"attributes":return v.target.getAttribute(v.attributeName)||"";case"characterData":return v.target.textContent;default:return""}}function c(v){var g={};return v.addedNodes.length&&(g.add=l.toArray(v.addedNodes)),v.removedNodes.length&&(g.remove=l.toArray(v.removedNodes)),g}function d(v){return v.previousSibling?{type:"before",target:v.previousSibling}:v.nextSibling?{type:"after",target:v.nextSibling}:{type:"parent",target:v.target}}t.compileType=s,t.compileValue=u,t.complieNodes=c,t.compliePosition=d;var f=["UL","OL","H1","H2","H3","H4","H5","H6"];function p(v){var g=[],b=!1,y=[];return(0,i.default)(v).call(v,function(w,x){var _={type:s(w.type),target:w.target,attr:w.attributeName||"",value:u(w)||"",oldValue:w.oldValue||"",nodes:c(w),position:d(w)};if(g.push(_),l.UA.isFirefox){if(b&&w.addedNodes.length&&w.addedNodes[0].nodeType==1){var E=w.addedNodes[0],C={type:"node",target:E,attr:"",value:"",oldValue:"",nodes:{add:[b]},position:{type:"parent",target:E}};(0,a.default)(f).call(f,E.nodeName)!=-1?(C.nodes.add=l.toArray(E.childNodes),g.push(C)):b.nodeType==3?(m(E,y)&&(C.nodes.add=l.toArray(E.childNodes)),g.push(C)):(0,a.default)(f).call(f,w.target.nodeName)==-1&&m(E,y)&&(C.nodes.add=l.toArray(E.childNodes),g.push(C))}_.type=="node"&&w.removedNodes.length==1?(b=w.removedNodes[0],y.push(b)):(b=!1,y.length=0)}}),g}function m(v,g){for(var b=0,y=g.length-1;y>0&&v.contains(g[y]);y--)b++;return b}t.default=p},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(4)),a=r(n(94));function l(y,w){var x=y.position.target;switch(y.position.type){case"before":x.nextSibling?(x=x.nextSibling,(0,i.default)(w).call(w,function(_){y.target.insertBefore(_,x)})):(0,i.default)(w).call(w,function(_){y.target.appendChild(_)});break;case"after":(0,i.default)(w).call(w,function(_){y.target.insertBefore(_,x)});break;default:(0,i.default)(w).call(w,function(_){x.appendChild(_)})}}function s(y){for(var w=0,x=(0,a.default)(y.nodes);w<x.length;w++){var _=x[w],E=_[0],C=_[1];E==="add"?(0,i.default)(C).call(C,function(T){y.target.removeChild(T)}):l(y,C)}}function u(y){var w=y.target;y.oldValue==null?w.removeAttribute(y.attr):w.setAttribute(y.attr,y.oldValue)}function c(y){y.target.textContent=y.oldValue}(0,o.default)(t,"__esModule",{value:!0}),t.restore=t.revoke=void 0;var d={node:s,text:c,attr:u};function f(y){for(var w=y.length-1;w>-1;w--){var x=y[w];d[x.type](x)}}function p(y){for(var w=0,x=(0,a.default)(y.nodes);w<x.length;w++){var _=x[w],E=_[0],C=_[1];E==="add"?l(y,C):(0,i.default)(C).call(C,function(T){T.parentNode.removeChild(T)})}}function m(y){y.target.textContent=y.value}function v(y){y.target.setAttribute(y.attr,y.value)}t.revoke=f;var g={node:p,text:m,attr:v};function b(y){for(var w=0,x=y;w<x.length;w++){var _=x[w];g[_.type](_)}}t.restore=b},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(434),o=function(){function i(a){this.editor=a,this.data=new r.TailChain}return i.prototype.observe=function(){this.data.resetMax(this.editor.config.historyMaxSize),this.data.insertLast(this.editor.$textElem.html())},i.prototype.save=function(){return this.data.insertLast(this.editor.$textElem.html()),this},i.prototype.revoke=function(){var a=this.data.prev();return!!a&&(this.editor.$textElem.html(a),!0)},i.prototype.restore=function(){var a=this.data.next();return!!a&&(this.editor.$textElem.html(a),!0)},i}();t.default=o},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(91));(0,o.default)(t,"__esModule",{value:!0}),t.TailChain=void 0;var a=function(){function l(){this.data=[],this.max=0,this.point=0,this.isRe=!1}return l.prototype.resetMax=function(s){(s=Math.abs(s))&&(this.max=s)},(0,o.default)(l.prototype,"size",{get:function(){return this.data.length},enumerable:!1,configurable:!0}),l.prototype.insertLast=function(s){var u;for(this.isRe&&((0,i.default)(u=this.data).call(u,this.point+1),this.isRe=!1),this.data.push(s);this.max&&this.size>this.max;)this.data.shift();return this.point=this.size-1,this},l.prototype.current=function(){return this.data[this.point]},l.prototype.prev=function(){if(!this.isRe&&(this.isRe=!0),this.point--,!(this.point<0))return this.current();this.point=0},l.prototype.next=function(){if(!this.isRe&&(this.isRe=!0),this.point++,!(this.point>=this.size))return this.current();this.point=this.size-1},l}();t.TailChain=a},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=n(2),o=function(i){function a(l){var s=i.call(this,l.config.historyMaxSize)||this;return s.editor=l,s.last=0,s.target=l.$textElem.elems[0],s}return r.__extends(a,i),a.prototype.observe=function(){var l=this;this.target=this.editor.$textElem.elems[0],this.editor.$textElem.on("scroll",function(){l.last=l.target.scrollTop}),this.resetMaxSize(this.editor.config.historyMaxSize)},a.prototype.save=function(){return i.prototype.save.call(this,[this.last,this.target.scrollTop]),this},a.prototype.revoke=function(){var l=this;return i.prototype.revoke.call(this,function(s){l.target.scrollTop=s[0]})},a.prototype.restore=function(){var l=this;return i.prototype.restore.call(this,function(s){l.target.scrollTop=s[1]})},a}(r.__importDefault(n(98)).default);t.default=o},function(e,t,n){var r=n(0)(n(1));(0,r.default)(t,"__esModule",{value:!0});var o=n(2),i=o.__importDefault(n(98)),a=o.__importDefault(n(3)),l=n(6);function s(c){return{start:[c.startContainer,c.startOffset],end:[c.endContainer,c.endOffset],root:c.commonAncestorContainer,collapsed:c.collapsed}}var u=function(c){function d(f){var p=c.call(this,f.config.historyMaxSize)||this;return p.editor=f,p.lastRange=s(document.createRange()),p.root=f.$textElem.elems[0],p.updateLastRange=l.debounce(function(){p.lastRange=s(p.rangeHandle)},f.config.onchangeTimeout),p}return o.__extends(d,c),(0,r.default)(d.prototype,"rangeHandle",{get:function(){var f=document.getSelection();return f&&f.rangeCount?f.getRangeAt(0):document.createRange()},enumerable:!1,configurable:!0}),d.prototype.observe=function(){var f=this;function p(){var v=f.rangeHandle;(f.root===v.commonAncestorContainer||f.root.contains(v.commonAncestorContainer))&&(f.editor.isComposing||f.updateLastRange())}function m(v){(v.key=="Backspace"||v.key=="Delete")&&f.updateLastRange()}this.root=this.editor.$textElem.elems[0],this.resetMaxSize(this.editor.config.historyMaxSize),a.default(document).on("selectionchange",p),this.editor.beforeDestroy(function(){a.default(document).off("selectionchange",p)}),f.editor.$textElem.on("keydown",m)},d.prototype.save=function(){var f=s(this.rangeHandle);return c.prototype.save.call(this,[this.lastRange,f]),this.lastRange=f,this},d.prototype.set=function(f){try{if(f){var p=this.rangeHandle;return p.setStart.apply(p,f.start),p.setEnd.apply(p,f.end),this.editor.menus.changeActive(),!0}}catch{return!1}return!1},d.prototype.revoke=function(){var f=this;return c.prototype.revoke.call(this,function(p){f.set(p[0])})},d.prototype.restore=function(){var f=this;return c.prototype.restore.call(this,function(p){f.set(p[1])})},d}(i.default);t.default=u},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(31));(0,o.default)(t,"__esModule",{value:!0});var a=n(2).__importDefault(n(3));function l(s){var u,c,d=!1;function f(){if(!d){s.$textElem.hide();var m=s.zIndex.get("textContainer"),v=s.txt.html();u=a.default('<div class="w-e-content-mantle" style="z-index:'+m+`">
| <div class="w-e-content-preview w-e-text">`+v+`</div>
| </div>`),s.$textContainerElem.append(u);var g=s.zIndex.get("menu");c=a.default('<div class="w-e-menue-mantle" style="z-index:'+g+'"></div>'),s.$toolbarElem.append(c),d=!0,s.isEnable=!1}}function p(){!d||(u.remove(),c.remove(),s.$textElem.show(),d=!1,s.isEnable=!0)}return s.txt.eventHooks.changeEvents.push(function(){d&&(0,i.default)(u).call(u,".w-e-content-preview").html(s.$textElem.html())}),{disable:f,enable:p}}n(438),t.default=l},function(e,t,n){var r=n(20),o=n(439);typeof(o=o.__esModule?o.default:o)=="string"&&(o=[[e.i,o,""]]);var i={insert:"head",singleton:!1};r(o,i),e.exports=o.locals||{}},function(e,t,n){(t=n(21)(!1)).push([e.i,`.w-e-content-mantle {
| width: 100%;
| height: 100%;
| overflow-y: auto;
| }
| .w-e-content-mantle .w-e-content-preview {
| width: 100%;
| min-height: 100%;
| padding: 0 10px;
| line-height: 1.5;
| }
| .w-e-content-mantle .w-e-content-preview img {
| cursor: default;
| }
| .w-e-content-mantle .w-e-content-preview img:hover {
| box-shadow: none;
| }
| .w-e-menue-mantle {
| position: absolute;
| height: 100%;
| width: 100%;
| top: 0;
| left: 0;
| }
| `,""]),e.exports=t},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0});var r=function(){function o(i){var a=this;this.editor=i;var l=function(){document.activeElement===i.$textElem.elems[0]&&a.emit()};window.document.addEventListener("selectionchange",l),this.editor.beforeDestroy(function(){window.document.removeEventListener("selectionchange",l)})}return o.prototype.emit=function(){var i,a=this.editor.config.onSelectionChange;if(a){var l=this.editor.selection;l.saveRange(),l.isSelectionEmpty()||a({text:l.getSelectionText(),html:(i=l.getSelectionContainerElem())===null||i===void 0?void 0:i.elems[0].innerHTML,selection:l})}},o}();t.default=r},function(e,t,n){var r=n(0),o=r(n(1)),i=r(n(127)),a=r(n(94)),l=r(n(4));(0,o.default)(t,"__esModule",{value:!0}),t.registerPlugin=void 0;var s=n(2).__importDefault(n(87)),u=n(6);function c(f,p,m){if(!f)throw new TypeError("name is not define");if(!p)throw new TypeError("options is not define");if(!p.intention)throw new TypeError("options.intention is not define");if(p.intention&&typeof p.intention!="function")throw new TypeError("options.intention is not function");m[f]&&console.warn("plugin "+f+" \u5DF2\u5B58\u5728\uFF0C\u5DF2\u8986\u76D6\u3002"),m[f]=p}function d(f){var p=(0,i.default)({},u.deepClone(s.default.globalPluginsFunctionList),u.deepClone(f.pluginsFunctionList)),m=(0,a.default)(p);(0,l.default)(m).call(m,function(v){var g=v[0],b=v[1];console.info("plugin "+g+" initializing");var y=b.intention,w=b.config;y(f,w),console.info("plugin "+g+" initialization complete")})}t.registerPlugin=c,t.default=d},function(e,t,n){(0,n(0)(n(1)).default)(t,"__esModule",{value:!0})}]).default;var Tqe=Oqe(ype.exports),Mqe=1,Nqe=Object.assign||function(e){for(var t,n=1;n<arguments.length;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},Fqe=Te({name:"fcEditor",props:{modelValue:String,init:Function,disabled:Boolean,config:Object},inheritAttrs:!1,emits:["update:modelValue"],data:function(){return{editor:{},uni:Mqe++}},watch:{disabled:function(){this.enable()},modelValue:function(e){e!==this.editor.txt.html()&&this.editor.txt.html(e)}},methods:{enable:function(){this.disabled?this.editor.disable():this.editor.enable()},result:function(){this.$emit("update:modelValue",this.editor.txt.html())}},mounted:function(){var e=this;this.$nextTick(function(){e.editor=new Tqe("#editor".concat(e.uni)),e.editor.config.zIndex=2,e.config&&Nqe(e.editor.config,e.config),e.init&&e.init(e.editor),e.editor.create(),e.enable(),e.editor.txt.html(e.modelValue)})},render:function(){var e=function(t){for(var n=1;n<arguments.length;n++){var r=arguments[n]!=null?arguments[n]:{};n%2?gpe(Object(r),!0).forEach(function(o){Dqe(t,o,r[o])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):gpe(Object(r)).forEach(function(o){Object.defineProperty(t,o,Object.getOwnPropertyDescriptor(r,o))})}return t}({},this.$attrs);return delete e.id,ie("div",Un(e,{onInput:this.result,id:"editor".concat(this.uni),style:"line-height: normal;"}),null)},beforeDestroy:function(){this.editor&&this.editor.destroy(),this.editor=null}});const Jx=(e,t,n)=>{Br.component(e,n||t),Ux.component(e,t)};Br.component("draggable",dB),Br.component("DragTool",vpe),Br.component("DragBox",mpe),Br.component("Validate",YGe),Br.component("Struct",uGe),Br.component("HtmlEditor",hGe),Br.component("FetchConfig",wGe),Br.component("FnEditor",Gx),Br.component("Required",JGe),Br.component("TableOptions",iqe),Br.component("TreeOptions",vqe),Br.component("TableFormColumn",kqe),Br.component("EventConfig",jfe),Br.component("ColorInput",EGe),Br.component("SizeInput",kGe),Br.component("FieldInput",TGe),Br.component("FnConfig",RGe),Br.component("FcRow",cGe),Jx("FcEditor",Fqe),Jx("TableForm",_qe,Aqe),Jx("FcTable",qGe,UGe);function Rqe(e){e.useApp((t,n)=>{n.component(_O.name)||n.use(_O),n.component(Sa.name)||n.use(Sa),n.component(SO.name)||n.use(SO),n.component(CO.name)||n.use(CO),n.component(ua.name)||n.use(ua),n.component(Bw.name)||n.use(Bw),n.component(FO.name)||n.use(FO),n.component(kO.name)||n.use(kO),n.component(Al.name)||n.use(Al),n.component(NO.name)||n.use(NO),n.component(Cb.name)||n.use(Cb),n.component(VO.name)||n.use(VO),n.component(Ow.name)||n.use(Ow),n.component(jO.name)||n.use(jO),n.component(kb.name)||n.use(kb),n.component(Mw.name)||n.use(Mw),n.component(bl.name)||n.use(bl),n.component(wb.name)||n.use(wb),n.component(HO.name)||n.use(HO),n.component(Am.name)||n.use(Am),n.component(IO.name)||n.use(IO),n.component(PO.name)||n.use(PO),n.component(LO.name)||n.use(LO),n.component(RO.name)||n.use(RO),n.component(xO.name)||n.use(xO),n.component(Ft.name)||n.use(Ft),n.component(BO.name)||n.use(BO),n.component(wR.name)||n.use(wR)})}mc.install=function(e){e.component("FcDesigner",mc)},mc.makeOptionsRule=kx,mc.formCreate=Ux,mc.designerForm=Br,mc.component=Jx,mc.useLocale=Rfe,mc.t=fB,function(e,t){const n=e.split("."),r=t.split("."),o=Math.min(n.length,r.length);for(var i=0;i<o;i++){var a=parseInt(n[i],10)-parseInt(r[i],10);if(a>0)return 1;if(a<0)return-1}return n.length===r.length?0:n.length<r.length?-1:1}("3.1.27",Ux.version)===1&&console.warn("Please use FormCreate version 3.1.27 or greater, see https://github.com/xaboy/form-create."),zDe=e=>e?e.replace(/\-(\w)/g,(t,n)=>n.toUpperCase()):"",zw=(e,t,n=document.documentElement)=>{n.style.setProperty(e,t)},cOe=(e,t)=>{if(e.findIndex)return e.findIndex(t);let n=-1;return e.some((r,o,i)=>{const a=t(r,o,i);if(a)return n=o,a}),n},HOe=e=>e.replace(/(^\s*)|(\s*$)/g,""),ZQ=()=>{if(typeof crypto=="object"){if(typeof crypto.randomUUID=="function")return crypto.randomUUID();if(typeof crypto.getRandomValues=="function"&&typeof Uint8Array=="function"){const n=r=>{const o=Number(r);return(o^crypto.getRandomValues(new Uint8Array(1))[0]&15>>o/4).toString(16)};return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,n)}}let e=new Date().getTime(),t=typeof performance<"u"&&performance.now&&1e3*performance.now()||0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,n=>{let r=16*Math.random();return e>0?(r=(e+r)%16|0,e=Math.floor(e/16)):(r=(t+r)%16|0,t=Math.floor(t/16)),(n==="x"?r:3&r|8).toString(16)})},SOe=(e,t,n)=>{const r=parseFloat(n),o=Math.floor(Math.log(r)/Math.log(1024));return(r/Math.pow(1024,o)).toFixed(2)+" "+["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"][o]};let bpe,Ape,Zx,wpe,xpe;bpe=Te({name:"ImageViewer",__name:"ImageViewer",props:{urlList:{type:Array,default:()=>[]},zIndex:Xn.number.def(200),initialIndex:Xn.number.def(0),infinite:Xn.bool.def(!0),hideOnClickModal:Xn.bool.def(!1),teleported:Xn.bool.def(!1),show:Xn.bool.def(!1)},setup(e){const t=e,n=ee(()=>{const i={...t};return delete i.show,i}),r=de(t.show),o=()=>{r.value=!1};return(i,a)=>{const l=qO;return M(r)?(Y(),Le(l,Un({key:0},M(n),{onClose:o}),null,16)):Fe("",!0)}}}),Ape=Object.prototype.toString,Zx=(e,t)=>Ape.call(e)===`[object ${t}]`,xb=e=>e===null||(wpe(e)||Eb(e)?e.length===0:e instanceof Map||e instanceof Set?e.size===0:!!(t=>t!==null&&Zx(t,"Object"))(e)&&Object.keys(e).length===0),EQ=e=>Zx(e,"Number"),Eb=e=>Zx(e,"String"),gOe=e=>typeof e=="function",wpe=e=>e&&Array.isArray(e),xpe=!(typeof window>"u"),YO=e=>/(((^https?:(?:\/\/)?)(?:[-:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&%@.\w_]*)#?(?:[\w]*))?)$/.test(e);let _pe=null;QQ=function(e){if(!xpe)return;const{urlList:t,initialIndex:n=0,infinite:r=!0,hideOnClickModal:o=!1,teleported:i=!1,zIndex:a=2e3,show:l=!0}=e,s={},u=document.createElement("div");s.urlList=t,s.initialIndex=n,s.infinite=r,s.hideOnClickModal=o,s.teleported=i,s.zIndex=a,s.show=l,document.body.appendChild(u),_pe=ie(bpe,s),qs(_pe,u)};function Epe(e,t){return function(){return e.apply(t,arguments)}}const{toString:Iqe}=Object.prototype,{getPrototypeOf:gB}=Object,e_=(e=>t=>{const n=Iqe.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Vu=e=>(e=e.toLowerCase(),t=>e_(t)===e),t_=e=>t=>typeof t===e,{isArray:Rg}=Array,M4=t_("undefined"),Cpe=Vu("ArrayBuffer"),Bqe=t_("string"),bs=t_("function"),Spe=t_("number"),n_=e=>e!==null&&typeof e=="object",r_=e=>{if(e_(e)!=="object")return!1;const t=gB(e);return!(t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null||Symbol.toStringTag in e||Symbol.iterator in e)},Pqe=Vu("Date"),Lqe=Vu("File"),jqe=Vu("Blob"),Vqe=Vu("FileList"),zqe=Vu("URLSearchParams"),[Hqe,$qe,Uqe,Wqe]=["ReadableStream","Request","Response","Headers"].map(Vu);function N4(e,t,{allOwnKeys:n=!1}={}){if(e==null)return;let r,o;if(typeof e!="object"&&(e=[e]),Rg(e))for(r=0,o=e.length;r<o;r++)t.call(null,e[r],r,e);else{const i=n?Object.getOwnPropertyNames(e):Object.keys(e),a=i.length;let l;for(r=0;r<a;r++)l=i[r],t.call(null,e[l],l,e)}}function kpe(e,t){t=t.toLowerCase();const n=Object.keys(e);let r,o=n.length;for(;o-- >0;)if(r=n[o],t===r.toLowerCase())return r;return null}const A1=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Dpe=e=>!M4(e)&&e!==A1,Gqe=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&gB(Uint8Array)),qqe=Vu("HTMLFormElement"),Ope=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),Kqe=Vu("RegExp"),Tpe=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};N4(n,(o,i)=>{let a;(a=t(o,i,e))!==!1&&(r[i]=a||o)}),Object.defineProperties(e,r)},yB="abcdefghijklmnopqrstuvwxyz",Mpe="0123456789",Npe={DIGIT:Mpe,ALPHA:yB,ALPHA_DIGIT:yB+yB.toUpperCase()+Mpe},Yqe=Vu("AsyncFunction"),Fpe=(Rpe=typeof setImmediate=="function",Ipe=bs(A1.postMessage),Rpe?setImmediate:Ipe?(bB=`axios@${Math.random()}`,o_=[],A1.addEventListener("message",({source:e,data:t})=>{e===A1&&t===bB&&o_.length&&o_.shift()()},!1),e=>{o_.push(e),A1.postMessage(bB,"*")}):e=>setTimeout(e));var Rpe,Ipe,bB,o_;const Xqe=typeof queueMicrotask<"u"?queueMicrotask.bind(A1):typeof process<"u"&&process.nextTick||Fpe,pt={isArray:Rg,isArrayBuffer:Cpe,isBuffer:function(e){return e!==null&&!M4(e)&&e.constructor!==null&&!M4(e.constructor)&&bs(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||bs(e.append)&&((t=e_(e))==="formdata"||t==="object"&&bs(e.toString)&&e.toString()==="[object FormData]"))},isArrayBufferView:function(e){let t;return t=typeof ArrayBuffer<"u"&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Cpe(e.buffer),t},isString:Bqe,isNumber:Spe,isBoolean:e=>e===!0||e===!1,isObject:n_,isPlainObject:r_,isReadableStream:Hqe,isRequest:$qe,isResponse:Uqe,isHeaders:Wqe,isUndefined:M4,isDate:Pqe,isFile:Lqe,isBlob:jqe,isRegExp:Kqe,isFunction:bs,isStream:e=>n_(e)&&bs(e.pipe),isURLSearchParams:zqe,isTypedArray:Gqe,isFileList:Vqe,forEach:N4,merge:function e(){const{caseless:t}=Dpe(this)&&this||{},n={},r=(o,i)=>{const a=t&&kpe(n,i)||i;r_(n[a])&&r_(o)?n[a]=e(n[a],o):r_(o)?n[a]=e({},o):Rg(o)?n[a]=o.slice():n[a]=o};for(let o=0,i=arguments.length;o<i;o++)arguments[o]&&N4(arguments[o],r);return n},extend:(e,t,n,{allOwnKeys:r}={})=>(N4(t,(o,i)=>{n&&bs(o)?e[i]=Epe(o,n):e[i]=o},{allOwnKeys:r}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,i,a;const l={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)a=o[i],r&&!r(a,e,t)||l[a]||(t[a]=e[a],l[a]=!0);e=n!==!1&&gB(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:e_,kindOfTest:Vu,endsWith:(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},toArray:e=>{if(!e)return null;if(Rg(e))return e;let t=e.length;if(!Spe(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let r;for(;(r=n.next())&&!r.done;){const o=r.value;t.call(e,o[0],o[1])}},matchAll:(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},isHTMLForm:qqe,hasOwnProperty:Ope,hasOwnProp:Ope,reduceDescriptors:Tpe,freezeMethods:e=>{Tpe(e,(t,n)=>{if(bs(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const r=e[n];bs(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))})},toObjectSet:(e,t)=>{const n={},r=o=>{o.forEach(i=>{n[i]=!0})};return Rg(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(t,n,r){return n.toUpperCase()+r}),noop:()=>{},toFiniteNumber:(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,findKey:kpe,global:A1,isContextDefined:Dpe,ALPHABET:Npe,generateString:(e=16,t=Npe.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n},isSpecCompliantForm:function(e){return!!(e&&bs(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(r,o)=>{if(n_(r)){if(t.indexOf(r)>=0)return;if(!("toJSON"in r)){t[o]=r;const i=Rg(r)?[]:{};return N4(r,(a,l)=>{const s=n(a,o+1);!M4(s)&&(i[l]=s)}),t[o]=void 0,i}}return r};return n(e,0)},isAsyncFn:Yqe,isThenable:e=>e&&(n_(e)||bs(e))&&bs(e.then)&&bs(e.catch),setImmediate:Fpe,asap:Xqe};function tr(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status?o.status:null)}pt.inherits(tr,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:pt.toJSONObject(this.config),code:this.code,status:this.status}}});const Bpe=tr.prototype,Ppe={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{Ppe[e]={value:e}}),Object.defineProperties(tr,Ppe),Object.defineProperty(Bpe,"isAxiosError",{value:!0}),tr.from=(e,t,n,r,o,i)=>{const a=Object.create(Bpe);return pt.toFlatObject(e,a,function(l){return l!==Error.prototype},l=>l!=="isAxiosError"),tr.call(a,e.message,t,n,r,o),a.cause=e,a.name=e.name,i&&Object.assign(a,i),a};function AB(e){return pt.isPlainObject(e)||pt.isArray(e)}function Lpe(e){return pt.endsWith(e,"[]")?e.slice(0,-2):e}function jpe(e,t,n){return e?e.concat(t).map(function(r,o){return r=Lpe(r),!n&&o?"["+r+"]":r}).join(n?".":""):t}const Qqe=pt.toFlatObject(pt,{},null,function(e){return/^is[A-Z]/.test(e)});function i_(e,t,n){if(!pt.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=pt.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(f,p){return!pt.isUndefined(p[f])})).metaTokens,o=n.visitor||u,i=n.dots,a=n.indexes,l=(n.Blob||typeof Blob<"u"&&Blob)&&pt.isSpecCompliantForm(t);if(!pt.isFunction(o))throw new TypeError("visitor must be a function");function s(f){if(f===null)return"";if(pt.isDate(f))return f.toISOString();if(!l&&pt.isBlob(f))throw new tr("Blob is not supported. Use a Buffer instead.");return pt.isArrayBuffer(f)||pt.isTypedArray(f)?l&&typeof Blob=="function"?new Blob([f]):Buffer.from(f):f}function u(f,p,m){let v=f;if(f&&!m&&typeof f=="object"){if(pt.endsWith(p,"{}"))p=r?p:p.slice(0,-2),f=JSON.stringify(f);else if(pt.isArray(f)&&function(g){return pt.isArray(g)&&!g.some(AB)}(f)||(pt.isFileList(f)||pt.endsWith(p,"[]"))&&(v=pt.toArray(f)))return p=Lpe(p),v.forEach(function(g,b){!pt.isUndefined(g)&&g!==null&&t.append(a===!0?jpe([p],b,i):a===null?p:p+"[]",s(g))}),!1}return!!AB(f)||(t.append(jpe(m,p,i),s(f)),!1)}const c=[],d=Object.assign(Qqe,{defaultVisitor:u,convertValue:s,isVisitable:AB});if(!pt.isObject(e))throw new TypeError("data must be an object");return function f(p,m){if(!pt.isUndefined(p)){if(c.indexOf(p)!==-1)throw Error("Circular reference detected in "+m.join("."));c.push(p),pt.forEach(p,function(v,g){(!(pt.isUndefined(v)||v===null)&&o.call(t,v,pt.isString(g)?g.trim():g,m,d))===!0&&f(v,m?m.concat(g):[g])}),c.pop()}}(e),t}function Vpe(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(n){return t[n]})}function wB(e,t){this._pairs=[],e&&i_(e,this,t)}const zpe=wB.prototype;function Jqe(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Hpe(e,t,n){if(!t)return e;const r=n&&n.encode||Jqe,o=n&&n.serialize;let i;if(i=o?o(t,n):pt.isURLSearchParams(t)?t.toString():new wB(t,n).toString(r),i){const a=e.indexOf("#");a!==-1&&(e=e.slice(0,a)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}zpe.append=function(e,t){this._pairs.push([e,t])},zpe.toString=function(e){const t=e?function(n){return e.call(this,n,Vpe)}:Vpe;return this._pairs.map(function(n){return t(n[0])+"="+t(n[1])},"").join("&")};class $pe{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){pt.forEach(this.handlers,function(n){n!==null&&t(n)})}}const Upe={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Zqe={isBrowser:!0,classes:{URLSearchParams:typeof URLSearchParams<"u"?URLSearchParams:wB,FormData:typeof FormData<"u"?FormData:null,Blob:typeof Blob<"u"?Blob:null},protocols:["http","https","file","blob","url","data"]},xB=typeof window<"u"&&typeof document<"u",_B=typeof navigator=="object"&&navigator||void 0,eKe=xB&&(!_B||["ReactNative","NativeScript","NS"].indexOf(_B.product)<0),tKe=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",nKe=xB&&window.location.href||"http://localhost",Il={...Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:xB,hasStandardBrowserEnv:eKe,hasStandardBrowserWebWorkerEnv:tKe,navigator:_B,origin:nKe},Symbol.toStringTag,{value:"Module"})),...Zqe};function Wpe(e){function t(n,r,o,i){let a=n[i++];if(a==="__proto__")return!0;const l=Number.isFinite(+a),s=i>=n.length;return a=!a&&pt.isArray(o)?o.length:a,s?(pt.hasOwnProp(o,a)?o[a]=[o[a],r]:o[a]=r,!l):(o[a]&&pt.isObject(o[a])||(o[a]=[]),t(n,r,o[a],i)&&pt.isArray(o[a])&&(o[a]=function(u){const c={},d=Object.keys(u);let f;const p=d.length;let m;for(f=0;f<p;f++)m=d[f],c[m]=u[m];return c}(o[a])),!l)}if(pt.isFormData(e)&&pt.isFunction(e.entries)){const n={};return pt.forEachEntry(e,(r,o)=>{t(function(i){return pt.matchAll(/\w+|\[(\w*)]/g,i).map(a=>a[0]==="[]"?"":a[1]||a[0])}(r),o,n,0)}),n}return null}const F4={transitional:Upe,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=pt.isObject(e);if(o&&pt.isHTMLForm(e)&&(e=new FormData(e)),pt.isFormData(e))return r?JSON.stringify(Wpe(e)):e;if(pt.isArrayBuffer(e)||pt.isBuffer(e)||pt.isStream(e)||pt.isFile(e)||pt.isBlob(e)||pt.isReadableStream(e))return e;if(pt.isArrayBufferView(e))return e.buffer;if(pt.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let i;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(a,l){return i_(a,new Il.classes.URLSearchParams,Object.assign({visitor:function(s,u,c,d){return Il.isNode&&pt.isBuffer(s)?(this.append(u,s.toString("base64")),!1):d.defaultVisitor.apply(this,arguments)}},l))}(e,this.formSerializer).toString();if((i=pt.isFileList(e))||n.indexOf("multipart/form-data")>-1){const a=this.env&&this.env.FormData;return i_(i?{"files[]":e}:e,a&&new a,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(a,l,s){if(pt.isString(a))try{return(l||JSON.parse)(a),pt.trim(a)}catch(u){if(u.name!=="SyntaxError")throw u}return(s||JSON.stringify)(a)}(e)):e}],transformResponse:[function(e){const t=this.transitional||F4.transitional,n=t&&t.forcedJSONParsing,r=this.responseType==="json";if(pt.isResponse(e)||pt.isReadableStream(e))return e;if(e&&pt.isString(e)&&(n&&!this.responseType||r)){const o=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(i){if(o)throw i.name==="SyntaxError"?tr.from(i,tr.ERR_BAD_RESPONSE,this,null,this.response):i}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Il.classes.FormData,Blob:Il.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};pt.forEach(["delete","get","head","post","put","patch"],e=>{F4.headers[e]={}});const rKe=pt.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Gpe=Symbol("internals");function R4(e){return e&&String(e).trim().toLowerCase()}function a_(e){return e===!1||e==null?e:pt.isArray(e)?e.map(a_):String(e)}function EB(e,t,n,r,o){return pt.isFunction(r)?r.call(this,t,n):(o&&(t=n),pt.isString(t)?pt.isString(r)?t.indexOf(r)!==-1:pt.isRegExp(r)?r.test(t):void 0:void 0)}class Bl{constructor(t){t&&this.set(t)}set(t,n,r){const o=this;function i(l,s,u){const c=R4(s);if(!c)throw new Error("header name must be a non-empty string");const d=pt.findKey(o,c);(!d||o[d]===void 0||u===!0||u===void 0&&o[d]!==!1)&&(o[d||s]=a_(l))}const a=(l,s)=>pt.forEach(l,(u,c)=>i(u,c,s));if(pt.isPlainObject(t)||t instanceof this.constructor)a(t,n);else if(pt.isString(t)&&(t=t.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim()))a((l=>{const s={};let u,c,d;return l&&l.split(`
| `).forEach(function(f){d=f.indexOf(":"),u=f.substring(0,d).trim().toLowerCase(),c=f.substring(d+1).trim(),!u||s[u]&&rKe[u]||(u==="set-cookie"?s[u]?s[u].push(c):s[u]=[c]:s[u]=s[u]?s[u]+", "+c:c)}),s})(t),n);else if(pt.isHeaders(t))for(const[l,s]of t.entries())i(s,l,r);else t!=null&&i(n,t,r);return this}get(t,n){if(t=R4(t)){const r=pt.findKey(this,t);if(r){const o=this[r];if(!n)return o;if(n===!0)return function(i){const a=Object.create(null),l=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=l.exec(i);)a[s[1]]=s[2];return a}(o);if(pt.isFunction(n))return n.call(this,o,r);if(pt.isRegExp(n))return n.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=R4(t)){const r=pt.findKey(this,t);return!(!r||this[r]===void 0||n&&!EB(0,this[r],r,n))}return!1}delete(t,n){const r=this;let o=!1;function i(a){if(a=R4(a)){const l=pt.findKey(r,a);!l||n&&!EB(0,r[l],l,n)||(delete r[l],o=!0)}}return pt.isArray(t)?t.forEach(i):i(t),o}clear(t){const n=Object.keys(this);let r=n.length,o=!1;for(;r--;){const i=n[r];t&&!EB(0,this[i],i,t,!0)||(delete this[i],o=!0)}return o}normalize(t){const n=this,r={};return pt.forEach(this,(o,i)=>{const a=pt.findKey(r,i);if(a)return n[a]=a_(o),void delete n[i];const l=t?function(s){return s.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(u,c,d)=>c.toUpperCase()+d)}(i):String(i).trim();l!==i&&delete n[i],n[l]=a_(o),r[l]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return pt.forEach(this,(r,o)=>{r!=null&&r!==!1&&(n[o]=t&&pt.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(`
| `)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const r=new this(t);return n.forEach(o=>r.set(o)),r}static accessor(t){const n=(this[Gpe]=this[Gpe]={accessors:{}}).accessors,r=this.prototype;function o(i){const a=R4(i);n[a]||(function(l,s){const u=pt.toCamelCase(" "+s);["get","set","has"].forEach(c=>{Object.defineProperty(l,c+u,{value:function(d,f,p){return this[c].call(this,s,d,f,p)},configurable:!0})})}(r,i),n[a]=!0)}return pt.isArray(t)?t.forEach(o):o(t),this}}function CB(e,t){const n=this||F4,r=t||n,o=Bl.from(r.headers);let i=r.data;return pt.forEach(e,function(a){i=a.call(n,i,o.normalize(),t?t.status:void 0)}),o.normalize(),i}function qpe(e){return!(!e||!e.__CANCEL__)}function Ig(e,t,n){tr.call(this,e??"canceled",tr.ERR_CANCELED,t,n),this.name="CanceledError"}function Kpe(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new tr("Request failed with status code "+n.status,[tr.ERR_BAD_REQUEST,tr.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}Bl.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),pt.reduceDescriptors(Bl.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}}),pt.freezeMethods(Bl),pt.inherits(Ig,tr,{__CANCEL__:!0});const l_=(e,t,n=3)=>{let r=0;const o=function(i,a){i=i||10;const l=new Array(i),s=new Array(i);let u,c=0,d=0;return a=a!==void 0?a:1e3,function(f){const p=Date.now(),m=s[d];u||(u=p),l[c]=f,s[c]=p;let v=d,g=0;for(;v!==c;)g+=l[v++],v%=i;if(c=(c+1)%i,c===d&&(d=(d+1)%i),p-u<a)return;const b=m&&p-m;return b?Math.round(1e3*g/b):void 0}}(50,250);return function(i,a){let l,s,u=0,c=1e3/a;const d=(f,p=Date.now())=>{u=p,l=null,s&&(clearTimeout(s),s=null),i.apply(null,f)};return[(...f)=>{const p=Date.now(),m=p-u;m>=c?d(f,p):(l=f,s||(s=setTimeout(()=>{s=null,d(l)},c-m)))},()=>l&&d(l)]}(i=>{const a=i.loaded,l=i.lengthComputable?i.total:void 0,s=a-r,u=o(s);r=a,e({loaded:a,total:l,progress:l?a/l:void 0,bytes:s,rate:u||void 0,estimated:u&&l&&a<=l?(l-a)/u:void 0,event:i,lengthComputable:l!=null,[t?"download":"upload"]:!0})},n)},Ype=(e,t)=>{const n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Xpe=e=>(...t)=>pt.asap(()=>e(...t)),oKe=Il.hasStandardBrowserEnv?function(){const e=Il.navigator&&/(msie|trident)/i.test(Il.navigator.userAgent),t=document.createElement("a");let n;function r(o){let i=o;return e&&(t.setAttribute("href",i),i=t.href),t.setAttribute("href",i),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:t.pathname.charAt(0)==="/"?t.pathname:"/"+t.pathname}}return n=r(window.location.href),function(o){const i=pt.isString(o)?r(o):o;return i.protocol===n.protocol&&i.host===n.host}}():function(){return!0},iKe=Il.hasStandardBrowserEnv?{write(e,t,n,r,o,i){const a=[e+"="+encodeURIComponent(t)];pt.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),pt.isString(r)&&a.push("path="+r),pt.isString(o)&&a.push("domain="+o),i===!0&&a.push("secure"),document.cookie=a.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function Qpe(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(n,r){return r?n.replace(/\/?\/$/,"")+"/"+r.replace(/^\/+/,""):n}(e,t):t}const Jpe=e=>e instanceof Bl?{...e}:e;function w1(e,t){t=t||{};const n={};function r(u,c,d){return pt.isPlainObject(u)&&pt.isPlainObject(c)?pt.merge.call({caseless:d},u,c):pt.isPlainObject(c)?pt.merge({},c):pt.isArray(c)?c.slice():c}function o(u,c,d){return pt.isUndefined(c)?pt.isUndefined(u)?void 0:r(void 0,u,d):r(u,c,d)}function i(u,c){if(!pt.isUndefined(c))return r(void 0,c)}function a(u,c){return pt.isUndefined(c)?pt.isUndefined(u)?void 0:r(void 0,u):r(void 0,c)}function l(u,c,d){return d in t?r(u,c):d in e?r(void 0,u):void 0}const s={url:i,method:i,data:i,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:l,headers:(u,c)=>o(Jpe(u),Jpe(c),!0)};return pt.forEach(Object.keys(Object.assign({},e,t)),function(u){const c=s[u]||o,d=c(e[u],t[u],u);pt.isUndefined(d)&&c!==l||(n[u]=d)}),n}const Zpe=e=>{const t=w1({},e);let n,{data:r,withXSRFToken:o,xsrfHeaderName:i,xsrfCookieName:a,headers:l,auth:s}=t;if(t.headers=l=Bl.from(l),t.url=Hpe(Qpe(t.baseURL,t.url),e.params,e.paramsSerializer),s&&l.set("Authorization","Basic "+btoa((s.username||"")+":"+(s.password?unescape(encodeURIComponent(s.password)):""))),pt.isFormData(r)){if(Il.hasStandardBrowserEnv||Il.hasStandardBrowserWebWorkerEnv)l.setContentType(void 0);else if((n=l.getContentType())!==!1){const[u,...c]=n?n.split(";").map(d=>d.trim()).filter(Boolean):[];l.setContentType([u||"multipart/form-data",...c].join("; "))}}if(Il.hasStandardBrowserEnv&&(o&&pt.isFunction(o)&&(o=o(t)),o||o!==!1&&oKe(t.url))){const u=i&&a&&iKe.read(a);u&&l.set(i,u)}return t},aKe=typeof XMLHttpRequest<"u"&&function(e){return new Promise(function(t,n){const r=Zpe(e);let o=r.data;const i=Bl.from(r.headers).normalize();let a,l,s,u,c,{responseType:d,onUploadProgress:f,onDownloadProgress:p}=r;function m(){u&&u(),c&&c(),r.cancelToken&&r.cancelToken.unsubscribe(a),r.signal&&r.signal.removeEventListener("abort",a)}let v=new XMLHttpRequest;function g(){if(!v)return;const y=Bl.from("getAllResponseHeaders"in v&&v.getAllResponseHeaders());Kpe(function(w){t(w),m()},function(w){n(w),m()},{data:d&&d!=="text"&&d!=="json"?v.response:v.responseText,status:v.status,statusText:v.statusText,headers:y,config:e,request:v}),v=null}v.open(r.method.toUpperCase(),r.url,!0),v.timeout=r.timeout,"onloadend"in v?v.onloadend=g:v.onreadystatechange=function(){v&&v.readyState===4&&(v.status!==0||v.responseURL&&v.responseURL.indexOf("file:")===0)&&setTimeout(g)},v.onabort=function(){v&&(n(new tr("Request aborted",tr.ECONNABORTED,e,v)),v=null)},v.onerror=function(){n(new tr("Network Error",tr.ERR_NETWORK,e,v)),v=null},v.ontimeout=function(){let y=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const w=r.transitional||Upe;r.timeoutErrorMessage&&(y=r.timeoutErrorMessage),n(new tr(y,w.clarifyTimeoutError?tr.ETIMEDOUT:tr.ECONNABORTED,e,v)),v=null},o===void 0&&i.setContentType(null),"setRequestHeader"in v&&pt.forEach(i.toJSON(),function(y,w){v.setRequestHeader(w,y)}),pt.isUndefined(r.withCredentials)||(v.withCredentials=!!r.withCredentials),d&&d!=="json"&&(v.responseType=r.responseType),p&&([s,c]=l_(p,!0),v.addEventListener("progress",s)),f&&v.upload&&([l,u]=l_(f),v.upload.addEventListener("progress",l),v.upload.addEventListener("loadend",u)),(r.cancelToken||r.signal)&&(a=y=>{v&&(n(!y||y.type?new Ig(null,e,v):y),v.abort(),v=null)},r.cancelToken&&r.cancelToken.subscribe(a),r.signal&&(r.signal.aborted?a():r.signal.addEventListener("abort",a)));const b=function(y){const w=/^([-+\w]{1,25})(:?\/\/|:)/.exec(y);return w&&w[1]||""}(r.url);b&&Il.protocols.indexOf(b)===-1?n(new tr("Unsupported protocol "+b+":",tr.ERR_BAD_REQUEST,e)):v.send(o||null)})},lKe=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let r,o=new AbortController;const i=function(u){if(!r){r=!0,l();const c=u instanceof Error?u:this.reason;o.abort(c instanceof tr?c:new Ig(c instanceof Error?c.message:c))}};let a=t&&setTimeout(()=>{a=null,i(new tr(`timeout ${t} of ms exceeded`,tr.ETIMEDOUT))},t);const l=()=>{e&&(a&&clearTimeout(a),a=null,e.forEach(u=>{u.unsubscribe?u.unsubscribe(i):u.removeEventListener("abort",i)}),e=null)};e.forEach(u=>u.addEventListener("abort",i));const{signal:s}=o;return s.unsubscribe=()=>pt.asap(l),s}},sKe=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let r,o=0;for(;o<n;)r=o+t,yield e.slice(o,r),o=r},uKe=async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:n,value:r}=await t.read();if(n)break;yield r}}finally{await t.cancel()}},ehe=(e,t,n,r)=>{const o=async function*(s,u){for await(const c of uKe(s))yield*sKe(c,u)}(e,t);let i,a=0,l=s=>{i||(i=!0,r&&r(s))};return new ReadableStream({async pull(s){try{const{done:u,value:c}=await o.next();if(u)return l(),void s.close();let d=c.byteLength;if(n){let f=a+=d;n(f)}s.enqueue(new Uint8Array(c))}catch(u){throw l(u),u}},cancel:s=>(l(s),o.return())},{highWaterMark:2})},s_=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",the=s_&&typeof ReadableStream=="function",cKe=s_&&(typeof TextEncoder=="function"?(nhe=new TextEncoder,e=>nhe.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var nhe;const rhe=(e,...t)=>{try{return!!e(...t)}catch{return!1}},dKe=the&&rhe(()=>{let e=!1;const t=new Request(Il.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),SB=the&&rhe(()=>pt.isReadableStream(new Response("").body)),u_={stream:SB&&(e=>e.body)};var ohe;s_&&(ohe=new Response,["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!u_[e]&&(u_[e]=pt.isFunction(ohe[e])?t=>t[e]():(t,n)=>{throw new tr(`Response type '${e}' is not supported`,tr.ERR_NOT_SUPPORT,n)})}));const fKe=async(e,t)=>{const n=pt.toFiniteNumber(e.getContentLength());return n??(async r=>r==null?0:pt.isBlob(r)?r.size:pt.isSpecCompliantForm(r)?(await new Request(Il.origin,{method:"POST",body:r}).arrayBuffer()).byteLength:pt.isArrayBufferView(r)||pt.isArrayBuffer(r)?r.byteLength:(pt.isURLSearchParams(r)&&(r+=""),pt.isString(r)?(await cKe(r)).byteLength:void 0))(t)},pKe=s_&&(async e=>{let{url:t,method:n,data:r,signal:o,cancelToken:i,timeout:a,onDownloadProgress:l,onUploadProgress:s,responseType:u,headers:c,withCredentials:d="same-origin",fetchOptions:f}=Zpe(e);u=u?(u+"").toLowerCase():"text";let p,m=lKe([o,i&&i.toAbortSignal()],a);const v=m&&m.unsubscribe&&(()=>{m.unsubscribe()});let g;try{if(s&&dKe&&n!=="get"&&n!=="head"&&(g=await fKe(c,r))!==0){let _,E=new Request(t,{method:"POST",body:r,duplex:"half"});if(pt.isFormData(r)&&(_=E.headers.get("content-type"))&&c.setContentType(_),E.body){const[C,T]=Ype(g,l_(Xpe(s)));r=ehe(E.body,65536,C,T)}}pt.isString(d)||(d=d?"include":"omit");const b="credentials"in Request.prototype;p=new Request(t,{...f,signal:m,method:n.toUpperCase(),headers:c.normalize().toJSON(),body:r,duplex:"half",credentials:b?d:void 0});let y=await fetch(p);const w=SB&&(u==="stream"||u==="response");if(SB&&(l||w&&v)){const _={};["status","statusText","headers"].forEach(k=>{_[k]=y[k]});const E=pt.toFiniteNumber(y.headers.get("content-length")),[C,T]=l&&Ype(E,l_(Xpe(l),!0))||[];y=new Response(ehe(y.body,65536,C,()=>{T&&T(),v&&v()}),_)}u=u||"text";let x=await u_[pt.findKey(u_,u)||"text"](y,e);return!w&&v&&v(),await new Promise((_,E)=>{Kpe(_,E,{data:x,headers:Bl.from(y.headers),status:y.status,statusText:y.statusText,config:e,request:p})})}catch(b){throw v&&v(),b&&b.name==="TypeError"&&/fetch/i.test(b.message)?Object.assign(new tr("Network Error",tr.ERR_NETWORK,e,p),{cause:b.cause||b}):tr.from(b,b&&b.code,e,p)}}),ihe={http:null,xhr:aKe,fetch:pKe};pt.forEach(ihe,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const ahe=e=>`- ${e}`,hKe=e=>pt.isFunction(e)||e===null||e===!1,lhe=e=>{e=pt.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let i=0;i<t;i++){let a;if(n=e[i],r=n,!hKe(n)&&(r=ihe[(a=String(n)).toLowerCase()],r===void 0))throw new tr(`Unknown adapter '${a}'`);if(r)break;o[a||"#"+i]=r}if(!r){const i=Object.entries(o).map(([a,l])=>`adapter ${a} `+(l===!1?"is not supported by the environment":"is not available in the build"));throw new tr("There is no suitable adapter to dispatch the request "+(t?i.length>1?`since :
| `+i.map(ahe).join(`
| `):" "+ahe(i[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return r};function kB(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Ig(null,e)}function she(e){return kB(e),e.headers=Bl.from(e.headers),e.data=CB.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),lhe(e.adapter||F4.adapter)(e).then(function(t){return kB(e),t.data=CB.call(e,e.transformResponse,t),t.headers=Bl.from(t.headers),t},function(t){return qpe(t)||(kB(e),t&&t.response&&(t.response.data=CB.call(e,e.transformResponse,t.response),t.response.headers=Bl.from(t.response.headers))),Promise.reject(t)})}const vKe="1.7.7",DB={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{DB[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const uhe={};DB.transitional=function(e,t,n){function r(o,i){return"[Axios v1.7.7] Transitional option '"+o+"'"+i+(n?". "+n:"")}return(o,i,a)=>{if(e===!1)throw new tr(r(i," has been removed"+(t?" in "+t:"")),tr.ERR_DEPRECATED);return t&&!uhe[i]&&(uhe[i]=!0,console.warn(r(i," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(o,i,a)}};const OB={assertOptions:function(e,t,n){if(typeof e!="object")throw new tr("options must be an object",tr.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const i=r[o],a=t[i];if(a){const l=e[i],s=l===void 0||a(l,i,e);if(s!==!0)throw new tr("option "+i+" must be "+s,tr.ERR_BAD_OPTION_VALUE)}else if(n!==!0)throw new tr("Unknown option "+i,tr.ERR_BAD_OPTION)}},validators:DB},yp=OB.validators;class x1{constructor(t){this.defaults=t,this.interceptors={request:new $pe,response:new $pe}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error){let o;Error.captureStackTrace?Error.captureStackTrace(o={}):o=new Error;const i=o.stack?o.stack.replace(/^.+\n/,""):"";try{r.stack?i&&!String(r.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(r.stack+=`
| `+i):r.stack=i}catch{}}throw r}}_request(t,n){typeof t=="string"?(n=n||{}).url=t:n=t||{},n=w1(this.defaults,n);const{transitional:r,paramsSerializer:o,headers:i}=n;r!==void 0&&OB.assertOptions(r,{silentJSONParsing:yp.transitional(yp.boolean),forcedJSONParsing:yp.transitional(yp.boolean),clarifyTimeoutError:yp.transitional(yp.boolean)},!1),o!=null&&(pt.isFunction(o)?n.paramsSerializer={serialize:o}:OB.assertOptions(o,{encode:yp.function,serialize:yp.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let a=i&&pt.merge(i.common,i[n.method]);i&&pt.forEach(["delete","get","head","post","put","patch","common"],m=>{delete i[m]}),n.headers=Bl.concat(a,i);const l=[];let s=!0;this.interceptors.request.forEach(function(m){typeof m.runWhen=="function"&&m.runWhen(n)===!1||(s=s&&m.synchronous,l.unshift(m.fulfilled,m.rejected))});const u=[];let c;this.interceptors.response.forEach(function(m){u.push(m.fulfilled,m.rejected)});let d,f=0;if(!s){const m=[she.bind(this),void 0];for(m.unshift.apply(m,l),m.push.apply(m,u),d=m.length,c=Promise.resolve(n);f<d;)c=c.then(m[f++],m[f++]);return c}d=l.length;let p=n;for(f=0;f<d;){const m=l[f++],v=l[f++];try{p=m(p)}catch(g){v.call(this,g);break}}try{c=she.call(this,p)}catch(m){return Promise.reject(m)}for(f=0,d=u.length;f<d;)c=c.then(u[f++],u[f++]);return c}getUri(t){return Hpe(Qpe((t=w1(this.defaults,t)).baseURL,t.url),t.params,t.paramsSerializer)}}pt.forEach(["delete","get","head","options"],function(e){x1.prototype[e]=function(t,n){return this.request(w1(n||{},{method:e,url:t,data:(n||{}).data}))}}),pt.forEach(["post","put","patch"],function(e){function t(n){return function(r,o,i){return this.request(w1(i||{},{method:e,headers:n?{"Content-Type":"multipart/form-data"}:{},url:r,data:o}))}}x1.prototype[e]=t(),x1.prototype[e+"Form"]=t(!0)});class TB{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let n;this.promise=new Promise(function(o){n=o});const r=this;this.promise.then(o=>{if(!r._listeners)return;let i=r._listeners.length;for(;i-- >0;)r._listeners[i](o);r._listeners=null}),this.promise.then=o=>{let i;const a=new Promise(l=>{r.subscribe(l),i=l}).then(o);return a.cancel=function(){r.unsubscribe(i)},a},t(function(o,i,a){r.reason||(r.reason=new Ig(o,i,a),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=r=>{t.abort(r)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new TB(function(r){t=r}),cancel:t}}}const MB={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(MB).forEach(([e,t])=>{MB[t]=e});const Vo=function e(t){const n=new x1(t),r=Epe(x1.prototype.request,n);return pt.extend(r,x1.prototype,n,{allOwnKeys:!0}),pt.extend(r,n,null,{allOwnKeys:!0}),r.create=function(o){return e(w1(t,o))},r}(F4);Vo.Axios=x1,Vo.CanceledError=Ig,Vo.CancelToken=TB,Vo.isCancel=qpe,Vo.VERSION=vKe,Vo.toFormData=i_,Vo.AxiosError=tr,Vo.Cancel=Vo.CanceledError,Vo.all=function(e){return Promise.all(e)},Vo.spread=function(e){return function(t){return e.apply(null,t)}},Vo.isAxiosError=function(e){return pt.isObject(e)&&e.isAxiosError===!0},Vo.mergeConfig=w1,Vo.AxiosHeaders=Bl,Vo.formToJSON=e=>Wpe(pt.isHTMLForm(e)?new FormData(e):e),Vo.getAdapter=lhe,Vo.HttpStatusCode=MB,Vo.default=Vo;var Sr,mKe=Error,gKe=EvalError,yKe=RangeError,bKe=ReferenceError,che=SyntaxError,I4=TypeError,AKe=URIError,dhe=typeof Symbol<"u"&&Symbol,wKe=function(){if(typeof Symbol!="function"||typeof Object.getOwnPropertySymbols!="function")return!1;if(typeof Symbol.iterator=="symbol")return!0;var e={},t=Symbol("test"),n=Object(t);if(typeof t=="string"||Object.prototype.toString.call(t)!=="[object Symbol]"||Object.prototype.toString.call(n)!=="[object Symbol]")return!1;for(t in e[t]=42,e)return!1;if(typeof Object.keys=="function"&&Object.keys(e).length!==0||typeof Object.getOwnPropertyNames=="function"&&Object.getOwnPropertyNames(e).length!==0)return!1;var r=Object.getOwnPropertySymbols(e);if(r.length!==1||r[0]!==t||!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if(typeof Object.getOwnPropertyDescriptor=="function"){var o=Object.getOwnPropertyDescriptor(e,t);if(o.value!==42||o.enumerable!==!0)return!1}return!0},NB={__proto__:null,foo:{}},xKe=Object,_Ke=Object.prototype.toString,EKe=Math.max,fhe=function(e,t){for(var n=[],r=0;r<e.length;r+=1)n[r]=e[r];for(var o=0;o<t.length;o+=1)n[o+e.length]=t[o];return n},CKe=function(e){var t=this;if(typeof t!="function"||_Ke.apply(t)!=="[object Function]")throw new TypeError("Function.prototype.bind called on incompatible "+t);for(var n,r=function(s,u){for(var c=[],d=u,f=0;d<s.length;d+=1,f+=1)c[f]=s[d];return c}(arguments,1),o=EKe(0,t.length-r.length),i=[],a=0;a<o;a++)i[a]="$"+a;if(n=Function("binder","return function ("+function(s,u){for(var c="",d=0;d<s.length;d+=1)c+=s[d],d+1<s.length&&(c+=u);return c}(i,",")+"){ return binder.apply(this,arguments); }")(function(){if(this instanceof n){var s=t.apply(this,fhe(r,arguments));return Object(s)===s?s:this}return t.apply(e,fhe(r,arguments))}),t.prototype){var l=function(){};l.prototype=t.prototype,n.prototype=new l,l.prototype=null}return n},FB=Function.prototype.bind||CKe,SKe=Function.prototype.call,kKe=Object.prototype.hasOwnProperty,DKe=FB.call(SKe,kKe),OKe=mKe,TKe=gKe,MKe=yKe,NKe=bKe,Bg=che,Pg=I4,FKe=AKe,phe=Function,RB=function(e){try{return phe('"use strict"; return ('+e+").constructor;")()}catch{}},_1=Object.getOwnPropertyDescriptor;if(_1)try{_1({},"")}catch{_1=null}var IB=function(){throw new Pg},RKe=_1?function(){try{return IB}catch{try{return _1(arguments,"callee").get}catch{return IB}}}():IB,Lg=typeof dhe=="function"&&typeof Symbol=="function"&&typeof dhe("foo")=="symbol"&&typeof Symbol("bar")=="symbol"&&wKe(),IKe={__proto__:NB}.foo===NB.foo&&!(NB instanceof xKe),Ji=Object.getPrototypeOf||(IKe?function(e){return e.__proto__}:null),jg={},BKe=typeof Uint8Array<"u"&&Ji?Ji(Uint8Array):Sr,E1={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?Sr:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?Sr:ArrayBuffer,"%ArrayIteratorPrototype%":Lg&&Ji?Ji([][Symbol.iterator]()):Sr,"%AsyncFromSyncIteratorPrototype%":Sr,"%AsyncFunction%":jg,"%AsyncGenerator%":jg,"%AsyncGeneratorFunction%":jg,"%AsyncIteratorPrototype%":jg,"%Atomics%":typeof Atomics>"u"?Sr:Atomics,"%BigInt%":typeof BigInt>"u"?Sr:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?Sr:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?Sr:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?Sr:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":OKe,"%eval%":eval,"%EvalError%":TKe,"%Float32Array%":typeof Float32Array>"u"?Sr:Float32Array,"%Float64Array%":typeof Float64Array>"u"?Sr:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?Sr:FinalizationRegistry,"%Function%":phe,"%GeneratorFunction%":jg,"%Int8Array%":typeof Int8Array>"u"?Sr:Int8Array,"%Int16Array%":typeof Int16Array>"u"?Sr:Int16Array,"%Int32Array%":typeof Int32Array>"u"?Sr:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":Lg&&Ji?Ji(Ji([][Symbol.iterator]())):Sr,"%JSON%":typeof JSON=="object"?JSON:Sr,"%Map%":typeof Map>"u"?Sr:Map,"%MapIteratorPrototype%":typeof Map<"u"&&Lg&&Ji?Ji(new Map()[Symbol.iterator]()):Sr,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?Sr:Promise,"%Proxy%":typeof Proxy>"u"?Sr:Proxy,"%RangeError%":MKe,"%ReferenceError%":NKe,"%Reflect%":typeof Reflect>"u"?Sr:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?Sr:Set,"%SetIteratorPrototype%":typeof Set<"u"&&Lg&&Ji?Ji(new Set()[Symbol.iterator]()):Sr,"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?Sr:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":Lg&&Ji?Ji(""[Symbol.iterator]()):Sr,"%Symbol%":Lg?Symbol:Sr,"%SyntaxError%":Bg,"%ThrowTypeError%":RKe,"%TypedArray%":BKe,"%TypeError%":Pg,"%Uint8Array%":typeof Uint8Array>"u"?Sr:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?Sr:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?Sr:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?Sr:Uint32Array,"%URIError%":FKe,"%WeakMap%":typeof WeakMap>"u"?Sr:WeakMap,"%WeakRef%":typeof WeakRef>"u"?Sr:WeakRef,"%WeakSet%":typeof WeakSet>"u"?Sr:WeakSet};if(Ji)try{null.error}catch(e){var PKe=Ji(Ji(e));E1["%Error.prototype%"]=PKe}var hhe,vhe,LKe=function e(t){var n;if(t==="%AsyncFunction%")n=RB("async function () {}");else if(t==="%GeneratorFunction%")n=RB("function* () {}");else if(t==="%AsyncGeneratorFunction%")n=RB("async function* () {}");else if(t==="%AsyncGenerator%"){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if(t==="%AsyncIteratorPrototype%"){var o=e("%AsyncGenerator%");o&&Ji&&(n=Ji(o.prototype))}return E1[t]=n,n},mhe={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},B4=FB,c_=DKe,jKe=B4.call(Function.call,Array.prototype.concat),VKe=B4.call(Function.apply,Array.prototype.splice),ghe=B4.call(Function.call,String.prototype.replace),d_=B4.call(Function.call,String.prototype.slice),zKe=B4.call(Function.call,RegExp.prototype.exec),HKe=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,$Ke=/\\(\\)?/g,UKe=function(e,t){var n,r=e;if(c_(mhe,r)&&(r="%"+(n=mhe[r])[0]+"%"),c_(E1,r)){var o=E1[r];if(o===jg&&(o=LKe(r)),o===void 0&&!t)throw new Pg("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:o}}throw new Bg("intrinsic "+e+" does not exist!")},Vg=function(e,t){if(typeof e!="string"||e.length===0)throw new Pg("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof t!="boolean")throw new Pg('"allowMissing" argument must be a boolean');if(zKe(/^%?[^%]*%?$/,e)===null)throw new Bg("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=function(v){var g=d_(v,0,1),b=d_(v,-1);if(g==="%"&&b!=="%")throw new Bg("invalid intrinsic syntax, expected closing `%`");if(b==="%"&&g!=="%")throw new Bg("invalid intrinsic syntax, expected opening `%`");var y=[];return ghe(v,HKe,function(w,x,_,E){y[y.length]=_?ghe(E,$Ke,"$1"):x||w}),y}(e),r=n.length>0?n[0]:"",o=UKe("%"+r+"%",t),i=o.name,a=o.value,l=!1,s=o.alias;s&&(r=s[0],VKe(n,jKe([0,1],s)));for(var u=1,c=!0;u<n.length;u+=1){var d=n[u],f=d_(d,0,1),p=d_(d,-1);if((f==='"'||f==="'"||f==="`"||p==='"'||p==="'"||p==="`")&&f!==p)throw new Bg("property names with quotes must have matching quotes");if(d!=="constructor"&&c||(l=!0),c_(E1,i="%"+(r+="."+d)+"%"))a=E1[i];else if(a!=null){if(!(d in a)){if(!t)throw new Pg("base intrinsic for "+e+" exists, but the property is not available.");return}if(_1&&u+1>=n.length){var m=_1(a,d);a=(c=!!m)&&"get"in m&&!("originalValue"in m.get)?m.get:a[d]}else c=c_(a,d),a=a[d];c&&!l&&(E1[i]=a)}}return a},yhe={exports:{}};function BB(){if(vhe)return hhe;vhe=1;var e=Vg("%Object.defineProperty%",!0)||!1;if(e)try{e({},"a",{value:1})}catch{e=!1}return hhe=e}var f_=Vg("%Object.getOwnPropertyDescriptor%",!0);if(f_)try{f_([],"length")}catch{f_=null}var bhe=f_,Ahe=BB(),WKe=che,zg=I4,whe=bhe,PB=BB(),xhe=function(){return!!PB};xhe.hasArrayLengthDefineBug=function(){if(!PB)return null;try{return PB([],"length",{value:1}).length!==1}catch{return!0}};var GKe=Vg,_he=function(e,t,n){if(!e||typeof e!="object"&&typeof e!="function")throw new zg("`obj` must be an object or a function`");if(typeof t!="string"&&typeof t!="symbol")throw new zg("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new zg("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new zg("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new zg("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new zg("`loose`, if provided, must be a boolean");var r=arguments.length>3?arguments[3]:null,o=arguments.length>4?arguments[4]:null,i=arguments.length>5?arguments[5]:null,a=arguments.length>6&&arguments[6],l=!!whe&&whe(e,t);if(Ahe)Ahe(e,t,{configurable:i===null&&l?l.configurable:!i,enumerable:r===null&&l?l.enumerable:!r,value:n,writable:o===null&&l?l.writable:!o});else{if(!a&&(r||o||i))throw new WKe("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");e[t]=n}},qKe=xhe(),Ehe=bhe,Che=I4,KKe=GKe("%Math.floor%"),YKe=function(e,t){if(typeof e!="function")throw new Che("`fn` is not a function");if(typeof t!="number"||t<0||t>4294967295||KKe(t)!==t)throw new Che("`length` must be a positive 32-bit integer");var n=arguments.length>2&&!!arguments[2],r=!0,o=!0;if("length"in e&&Ehe){var i=Ehe(e,"length");i&&!i.configurable&&(r=!1),i&&!i.writable&&(o=!1)}return(r||o||!n)&&(qKe?_he(e,"length",t,!0,!0):_he(e,"length",t)),e};(function(e){var t=FB,n=Vg,r=YKe,o=I4,i=n("%Function.prototype.apply%"),a=n("%Function.prototype.call%"),l=n("%Reflect.apply%",!0)||t.call(a,i),s=BB(),u=n("%Math.max%");e.exports=function(d){if(typeof d!="function")throw new o("a function is required");var f=l(t,a,arguments);return r(f,1+u(0,d.length-(arguments.length-1)),!0)};var c=function(){return l(t,i,arguments)};s?s(e.exports,"apply",{value:c}):e.exports.apply=c})(yhe);var She=Vg,khe=yhe.exports,XKe=khe(She("String.prototype.indexOf"));const Dhe=Bb(Object.freeze(Object.defineProperty({__proto__:null,default:{}},Symbol.toStringTag,{value:"Module"})));var LB=typeof Map=="function"&&Map.prototype,jB=Object.getOwnPropertyDescriptor&&LB?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,p_=LB&&jB&&typeof jB.get=="function"?jB.get:null,Ohe=LB&&Map.prototype.forEach,VB=typeof Set=="function"&&Set.prototype,zB=Object.getOwnPropertyDescriptor&&VB?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,h_=VB&&zB&&typeof zB.get=="function"?zB.get:null,The=VB&&Set.prototype.forEach,P4=typeof WeakMap=="function"&&WeakMap.prototype?WeakMap.prototype.has:null,L4=typeof WeakSet=="function"&&WeakSet.prototype?WeakSet.prototype.has:null,Mhe=typeof WeakRef=="function"&&WeakRef.prototype?WeakRef.prototype.deref:null,QKe=Boolean.prototype.valueOf,JKe=Object.prototype.toString,ZKe=Function.prototype.toString,eYe=String.prototype.match,HB=String.prototype.slice,bp=String.prototype.replace,tYe=String.prototype.toUpperCase,Nhe=String.prototype.toLowerCase,Fhe=RegExp.prototype.test,Rhe=Array.prototype.concat,Vc=Array.prototype.join,nYe=Array.prototype.slice,Ihe=Math.floor,$B=typeof BigInt=="function"?BigInt.prototype.valueOf:null,UB=Object.getOwnPropertySymbols,WB=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Symbol.prototype.toString:null,Hg=typeof Symbol=="function"&&typeof Symbol.iterator=="object",Ma=typeof Symbol=="function"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===Hg||!0)?Symbol.toStringTag:null,Bhe=Object.prototype.propertyIsEnumerable,Phe=(typeof Reflect=="function"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function Lhe(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||Fhe.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof e=="number"){var r=e<0?-Ihe(-e):Ihe(e);if(r!==e){var o=String(r),i=HB.call(t,o.length+1);return bp.call(o,n,"$&_")+"."+bp.call(bp.call(i,/([0-9]{3})/g,"$&_"),/_$/,"")}}return bp.call(t,n,"$&_")}var GB=Dhe,jhe=GB.custom,Vhe=$he(jhe)?jhe:null;function zhe(e,t,n){var r=(n.quoteStyle||t)==="double"?'"':"'";return r+e+r}function rYe(e){return bp.call(String(e),/"/g,""")}function qB(e){return!(wp(e)!=="[object Array]"||Ma&&typeof e=="object"&&Ma in e)}function Hhe(e){return!(wp(e)!=="[object RegExp]"||Ma&&typeof e=="object"&&Ma in e)}function $he(e){if(Hg)return e&&typeof e=="object"&&e instanceof Symbol;if(typeof e=="symbol")return!0;if(!e||typeof e!="object"||!WB)return!1;try{return WB.call(e),!0}catch{}return!1}var oYe=Object.prototype.hasOwnProperty||function(e){return e in this};function Ap(e,t){return oYe.call(e,t)}function wp(e){return JKe.call(e)}function Uhe(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}function Whe(e,t){if(e.length>t.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return Whe(HB.call(e,0,t.maxStringLength),t)+r}return zhe(bp.call(bp.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,iYe),"single",t)}function iYe(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+tYe.call(t.toString(16))}function j4(e){return"Object("+e+")"}function KB(e){return e+" { ? }"}function Ghe(e,t,n,r){return e+" ("+t+") {"+(r?YB(n,r):Vc.call(n,", "))+"}"}function YB(e,t){if(e.length===0)return"";var n=`
| `+t.prev+t.base;return n+Vc.call(e,","+n)+`
| `+t.prev}function v_(e,t){var n=qB(e),r=[];if(n){r.length=e.length;for(var o=0;o<e.length;o++)r[o]=Ap(e,o)?t(e[o],e):""}var i,a=typeof UB=="function"?UB(e):[];if(Hg){i={};for(var l=0;l<a.length;l++)i["$"+a[l]]=a[l]}for(var s in e)Ap(e,s)&&(n&&String(Number(s))===s&&s<e.length||Hg&&i["$"+s]instanceof Symbol||(Fhe.call(/[^\w$]/,s)?r.push(t(s,e)+": "+t(e[s],e)):r.push(s+": "+t(e[s],e))));if(typeof UB=="function")for(var u=0;u<a.length;u++)Bhe.call(e,a[u])&&r.push("["+t(a[u])+"]: "+t(e[a[u]],e));return r}var qhe=Vg,$g=function(e,t){var n=She(e,!!t);return typeof n=="function"&&XKe(e,".prototype.")>-1?khe(n):n},aYe=function e(t,n,r,o){var i=n||{};if(Ap(i,"quoteStyle")&&i.quoteStyle!=="single"&&i.quoteStyle!=="double")throw new TypeError('option "quoteStyle" must be "single" or "double"');if(Ap(i,"maxStringLength")&&(typeof i.maxStringLength=="number"?i.maxStringLength<0&&i.maxStringLength!==1/0:i.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var a=!Ap(i,"customInspect")||i.customInspect;if(typeof a!="boolean"&&a!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(Ap(i,"indent")&&i.indent!==null&&i.indent!==" "&&!(parseInt(i.indent,10)===i.indent&&i.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(Ap(i,"numericSeparator")&&typeof i.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var l=i.numericSeparator;if(t===void 0)return"undefined";if(t===null)return"null";if(typeof t=="boolean")return t?"true":"false";if(typeof t=="string")return Whe(t,i);if(typeof t=="number"){if(t===0)return 1/0/t>0?"0":"-0";var s=String(t);return l?Lhe(t,s):s}if(typeof t=="bigint"){var u=String(t)+"n";return l?Lhe(t,u):u}var c=i.depth===void 0?5:i.depth;if(r===void 0&&(r=0),r>=c&&c>0&&typeof t=="object")return qB(t)?"[Array]":"[Object]";var d=function(F,N){var B;if(F.indent===" ")B=" ";else{if(!(typeof F.indent=="number"&&F.indent>0))return null;B=Vc.call(Array(F.indent+1)," ")}return{base:B,prev:Vc.call(Array(N+1),B)}}(i,r);if(o===void 0)o=[];else if(Uhe(o,t)>=0)return"[Circular]";function f(F,N,B){if(N&&(o=nYe.call(o)).push(N),B){var P={depth:i.depth};return Ap(i,"quoteStyle")&&(P.quoteStyle=i.quoteStyle),e(F,P,r+1,o)}return e(F,i,r+1,o)}if(typeof t=="function"&&!Hhe(t)){var p=function(F){if(F.name)return F.name;var N=eYe.call(ZKe.call(F),/^function\s*([\w$]+)/);return N?N[1]:null}(t),m=v_(t,f);return"[Function"+(p?": "+p:" (anonymous)")+"]"+(m.length>0?" { "+Vc.call(m,", ")+" }":"")}if($he(t)){var v=Hg?bp.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):WB.call(t);return typeof t!="object"||Hg?v:j4(v)}if(function(F){return!F||typeof F!="object"?!1:typeof HTMLElement<"u"&&F instanceof HTMLElement?!0:typeof F.nodeName=="string"&&typeof F.getAttribute=="function"}(t)){for(var g="<"+Nhe.call(String(t.nodeName)),b=t.attributes||[],y=0;y<b.length;y++)g+=" "+b[y].name+"="+zhe(rYe(b[y].value),"double",i);return g+=">",t.childNodes&&t.childNodes.length&&(g+="..."),g+="</"+Nhe.call(String(t.nodeName))+">"}if(qB(t)){if(t.length===0)return"[]";var w=v_(t,f);return d&&!function(F){for(var N=0;N<F.length;N++)if(Uhe(F[N],`
| `)>=0)return!1;return!0}(w)?"["+YB(w,d)+"]":"[ "+Vc.call(w,", ")+" ]"}if(function(F){return!(wp(F)!=="[object Error]"||Ma&&typeof F=="object"&&Ma in F)}(t)){var x=v_(t,f);return"cause"in Error.prototype||!("cause"in t)||Bhe.call(t,"cause")?x.length===0?"["+String(t)+"]":"{ ["+String(t)+"] "+Vc.call(x,", ")+" }":"{ ["+String(t)+"] "+Vc.call(Rhe.call("[cause]: "+f(t.cause),x),", ")+" }"}if(typeof t=="object"&&a){if(Vhe&&typeof t[Vhe]=="function"&&GB)return GB(t,{depth:c-r});if(a!=="symbol"&&typeof t.inspect=="function")return t.inspect()}if(function(F){if(!p_||!F||typeof F!="object")return!1;try{p_.call(F);try{h_.call(F)}catch{return!0}return F instanceof Map}catch{}return!1}(t)){var _=[];return Ohe&&Ohe.call(t,function(F,N){_.push(f(N,t,!0)+" => "+f(F,t))}),Ghe("Map",p_.call(t),_,d)}if(function(F){if(!h_||!F||typeof F!="object")return!1;try{h_.call(F);try{p_.call(F)}catch{return!0}return F instanceof Set}catch{}return!1}(t)){var E=[];return The&&The.call(t,function(F){E.push(f(F,t))}),Ghe("Set",h_.call(t),E,d)}if(function(F){if(!P4||!F||typeof F!="object")return!1;try{P4.call(F,P4);try{L4.call(F,L4)}catch{return!0}return F instanceof WeakMap}catch{}return!1}(t))return KB("WeakMap");if(function(F){if(!L4||!F||typeof F!="object")return!1;try{L4.call(F,L4);try{P4.call(F,P4)}catch{return!0}return F instanceof WeakSet}catch{}return!1}(t))return KB("WeakSet");if(function(F){if(!Mhe||!F||typeof F!="object")return!1;try{return Mhe.call(F),!0}catch{}return!1}(t))return KB("WeakRef");if(function(F){return!(wp(F)!=="[object Number]"||Ma&&typeof F=="object"&&Ma in F)}(t))return j4(f(Number(t)));if(function(F){if(!F||typeof F!="object"||!$B)return!1;try{return $B.call(F),!0}catch{}return!1}(t))return j4(f($B.call(t)));if(function(F){return!(wp(F)!=="[object Boolean]"||Ma&&typeof F=="object"&&Ma in F)}(t))return j4(QKe.call(t));if(function(F){return!(wp(F)!=="[object String]"||Ma&&typeof F=="object"&&Ma in F)}(t))return j4(f(String(t)));if(typeof window<"u"&&t===window)return"{ [object Window] }";if(typeof globalThis<"u"&&t===globalThis||_m!==void 0&&t===_m)return"{ [object globalThis] }";if(!function(F){return!(wp(F)!=="[object Date]"||Ma&&typeof F=="object"&&Ma in F)}(t)&&!Hhe(t)){var C=v_(t,f),T=Phe?Phe(t)===Object.prototype:t instanceof Object||t.constructor===Object,k=t instanceof Object?"":"null prototype",I=!T&&Ma&&Object(t)===t&&Ma in t?HB.call(wp(t),8,-1):k?"Object":"",O=(T||typeof t.constructor!="function"?"":t.constructor.name?t.constructor.name+" ":"")+(I||k?"["+Vc.call(Rhe.call([],I||[],k||[]),": ")+"] ":"");return C.length===0?O+"{}":d?O+"{"+YB(C,d)+"}":O+"{ "+Vc.call(C,", ")+" }"}return String(t)},lYe=I4,m_=qhe("%WeakMap%",!0),g_=qhe("%Map%",!0),sYe=$g("WeakMap.prototype.get",!0),uYe=$g("WeakMap.prototype.set",!0),cYe=$g("WeakMap.prototype.has",!0),dYe=$g("Map.prototype.get",!0),fYe=$g("Map.prototype.set",!0),pYe=$g("Map.prototype.has",!0),XB=function(e,t){for(var n,r=e;(n=r.next)!==null;r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n},hYe=String.prototype.replace,vYe=/%20/g,Khe="RFC3986",QB={default:Khe,formatters:{RFC1738:function(e){return hYe.call(e,vYe,"+")},RFC3986:function(e){return String(e)}},RFC1738:"RFC1738",RFC3986:Khe},mYe=QB,JB=Object.prototype.hasOwnProperty,C1=Array.isArray,zc=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),Yhe=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r<e.length;++r)e[r]!==void 0&&(n[r]=e[r]);return n},ZB=1024,Xhe={arrayToObject:Yhe,assign:function(e,t){return Object.keys(t).reduce(function(n,r){return n[r]=t[r],n},e)},combine:function(e,t){return[].concat(e,t)},compact:function(e){for(var t=[{obj:{o:e},prop:"o"}],n=[],r=0;r<t.length;++r)for(var o=t[r],i=o.obj[o.prop],a=Object.keys(i),l=0;l<a.length;++l){var s=a[l],u=i[s];typeof u=="object"&&u!==null&&n.indexOf(u)===-1&&(t.push({obj:i,prop:s}),n.push(u))}return function(c){for(;c.length>1;){var d=c.pop(),f=d.obj[d.prop];if(C1(f)){for(var p=[],m=0;m<f.length;++m)f[m]!==void 0&&p.push(f[m]);d.obj[d.prop]=p}}}(t),e},decode:function(e,t,n){var r=e.replace(/\+/g," ");if(n==="iso-8859-1")return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch{return r}},encode:function(e,t,n,r,o){if(e.length===0)return e;var i=e;if(typeof e=="symbol"?i=Symbol.prototype.toString.call(e):typeof e!="string"&&(i=String(e)),n==="iso-8859-1")return escape(i).replace(/%u[0-9a-f]{4}/gi,function(f){return"%26%23"+parseInt(f.slice(2),16)+"%3B"});for(var a="",l=0;l<i.length;l+=ZB){for(var s=i.length>=ZB?i.slice(l,l+ZB):i,u=[],c=0;c<s.length;++c){var d=s.charCodeAt(c);d===45||d===46||d===95||d===126||d>=48&&d<=57||d>=65&&d<=90||d>=97&&d<=122||o===mYe.RFC1738&&(d===40||d===41)?u[u.length]=s.charAt(c):d<128?u[u.length]=zc[d]:d<2048?u[u.length]=zc[192|d>>6]+zc[128|63&d]:d<55296||d>=57344?u[u.length]=zc[224|d>>12]+zc[128|d>>6&63]+zc[128|63&d]:(c+=1,d=65536+((1023&d)<<10|1023&s.charCodeAt(c)),u[u.length]=zc[240|d>>18]+zc[128|d>>12&63]+zc[128|d>>6&63]+zc[128|63&d])}a+=u.join("")}return a},isBuffer:function(e){return!(!e||typeof e!="object")&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return Object.prototype.toString.call(e)==="[object RegExp]"},maybeMap:function(e,t){if(C1(e)){for(var n=[],r=0;r<e.length;r+=1)n.push(t(e[r]));return n}return t(e)},merge:function e(t,n,r){if(!n)return t;if(typeof n!="object"){if(C1(t))t.push(n);else{if(!t||typeof t!="object")return[t,n];(r&&(r.plainObjects||r.allowPrototypes)||!JB.call(Object.prototype,n))&&(t[n]=!0)}return t}if(!t||typeof t!="object")return[t].concat(n);var o=t;return C1(t)&&!C1(n)&&(o=Yhe(t,r)),C1(t)&&C1(n)?(n.forEach(function(i,a){if(JB.call(t,a)){var l=t[a];l&&typeof l=="object"&&i&&typeof i=="object"?t[a]=e(l,i,r):t.push(i)}else t[a]=i}),t):Object.keys(n).reduce(function(i,a){var l=n[a];return JB.call(i,a)?i[a]=e(i[a],l,r):i[a]=l,i},o)}},Qhe=function(){var e,t,n,r={assert:function(o){if(!r.has(o))throw new lYe("Side channel does not contain "+aYe(o))},get:function(o){if(m_&&o&&(typeof o=="object"||typeof o=="function")){if(e)return sYe(e,o)}else if(g_){if(t)return dYe(t,o)}else if(n)return function(i,a){var l=XB(i,a);return l&&l.value}(n,o)},has:function(o){if(m_&&o&&(typeof o=="object"||typeof o=="function")){if(e)return cYe(e,o)}else if(g_){if(t)return pYe(t,o)}else if(n)return function(i,a){return!!XB(i,a)}(n,o);return!1},set:function(o,i){m_&&o&&(typeof o=="object"||typeof o=="function")?(e||(e=new m_),uYe(e,o,i)):g_?(t||(t=new g_),fYe(t,o,i)):(n||(n={key:{},next:null}),function(a,l,s){var u=XB(a,l);u?u.value=s:a.next={key:l,next:a.next,value:s}}(n,o,i))}};return r},y_=Xhe,V4=QB,gYe=Object.prototype.hasOwnProperty,Jhe={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},Hc=Array.isArray,yYe=Array.prototype.push,Zhe=function(e,t){yYe.apply(e,Hc(t)?t:[t])},bYe=Date.prototype.toISOString,e0e=V4.default,Fi={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:y_.encode,encodeValuesOnly:!1,format:e0e,formatter:V4.formatters[e0e],indices:!1,serializeDate:function(e){return bYe.call(e)},skipNulls:!1,strictNullHandling:!1},eP={},AYe=function e(t,n,r,o,i,a,l,s,u,c,d,f,p,m,v,g,b,y){for(var w=t,x=y,_=0,E=!1;(x=x.get(eP))!==void 0&&!E;){var C=x.get(t);if(_+=1,C!==void 0){if(C===_)throw new RangeError("Cyclic object value");E=!0}x.get(eP)===void 0&&(_=0)}if(typeof c=="function"?w=c(n,w):w instanceof Date?w=p(w):r==="comma"&&Hc(w)&&(w=y_.maybeMap(w,function(U){return U instanceof Date?p(U):U})),w===null){if(a)return u&&!g?u(n,Fi.encoder,b,"key",m):n;w=""}if(function(U){return typeof U=="string"||typeof U=="number"||typeof U=="boolean"||typeof U=="symbol"||typeof U=="bigint"}(w)||y_.isBuffer(w))return u?[v(g?n:u(n,Fi.encoder,b,"key",m))+"="+v(u(w,Fi.encoder,b,"value",m))]:[v(n)+"="+v(String(w))];var T,k=[];if(w===void 0)return k;if(r==="comma"&&Hc(w))g&&u&&(w=y_.maybeMap(w,u)),T=[{value:w.length>0?w.join(",")||null:void 0}];else if(Hc(c))T=c;else{var I=Object.keys(w);T=d?I.sort(d):I}var O=s?n.replace(/\./g,"%2E"):n,F=o&&Hc(w)&&w.length===1?O+"[]":O;if(i&&Hc(w)&&w.length===0)return F+"[]";for(var N=0;N<T.length;++N){var B=T[N],P=typeof B=="object"&&B.value!==void 0?B.value:w[B];if(!l||P!==null){var V=f&&s?B.replace(/\./g,"%2E"):B,L=Hc(w)?typeof r=="function"?r(F,V):F:F+(f?"."+V:"["+V+"]");y.set(t,_);var H=Qhe();H.set(eP,y),Zhe(k,e(P,L,r,o,i,a,l,s,r==="comma"&&g&&Hc(w)?null:u,c,d,f,p,m,v,g,b,H))}}return k},Ug=Xhe,tP=Object.prototype.hasOwnProperty,wYe=Array.isArray,zo={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:Ug.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictDepth:!1,strictNullHandling:!1},xYe=function(e){return e.replace(/&#(\d+);/g,function(t,n){return String.fromCharCode(parseInt(n,10))})},t0e=function(e,t){return e&&typeof e=="string"&&t.comma&&e.indexOf(",")>-1?e.split(","):e},_Ye=function(e,t,n,r){if(e){var o=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/g,a=n.depth>0&&/(\[[^[\]]*])/.exec(o),l=a?o.slice(0,a.index):o,s=[];if(l){if(!n.plainObjects&&tP.call(Object.prototype,l)&&!n.allowPrototypes)return;s.push(l)}for(var u=0;n.depth>0&&(a=i.exec(o))!==null&&u<n.depth;){if(u+=1,!n.plainObjects&&tP.call(Object.prototype,a[1].slice(1,-1))&&!n.allowPrototypes)return;s.push(a[1])}if(a){if(n.strictDepth===!0)throw new RangeError("Input depth exceeded depth option of "+n.depth+" and strictDepth is true");s.push("["+o.slice(a.index)+"]")}return function(c,d,f,p){for(var m=p?d:t0e(d,f),v=c.length-1;v>=0;--v){var g,b=c[v];if(b==="[]"&&f.parseArrays)g=f.allowEmptyArrays&&(m===""||f.strictNullHandling&&m===null)?[]:[].concat(m);else{g=f.plainObjects?Object.create(null):{};var y=b.charAt(0)==="["&&b.charAt(b.length-1)==="]"?b.slice(1,-1):b,w=f.decodeDotInKeys?y.replace(/%2E/g,"."):y,x=parseInt(w,10);f.parseArrays||w!==""?!isNaN(x)&&b!==w&&String(x)===w&&x>=0&&f.parseArrays&&x<=f.arrayLimit?(g=[])[x]=m:w!=="__proto__"&&(g[w]=m):g={0:m}}m=g}return m}(s,t,n,r)}},EYe=function(e,t){var n,r=e,o=function(p){if(!p)return Fi;if(p.allowEmptyArrays!==void 0&&typeof p.allowEmptyArrays!="boolean")throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(p.encodeDotInKeys!==void 0&&typeof p.encodeDotInKeys!="boolean")throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(p.encoder!==null&&p.encoder!==void 0&&typeof p.encoder!="function")throw new TypeError("Encoder has to be a function.");var m=p.charset||Fi.charset;if(p.charset!==void 0&&p.charset!=="utf-8"&&p.charset!=="iso-8859-1")throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var v=V4.default;if(p.format!==void 0){if(!gYe.call(V4.formatters,p.format))throw new TypeError("Unknown format option provided.");v=p.format}var g,b=V4.formatters[v],y=Fi.filter;if((typeof p.filter=="function"||Hc(p.filter))&&(y=p.filter),g=p.arrayFormat in Jhe?p.arrayFormat:"indices"in p?p.indices?"indices":"repeat":Fi.arrayFormat,"commaRoundTrip"in p&&typeof p.commaRoundTrip!="boolean")throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var w=p.allowDots===void 0?p.encodeDotInKeys===!0||Fi.allowDots:!!p.allowDots;return{addQueryPrefix:typeof p.addQueryPrefix=="boolean"?p.addQueryPrefix:Fi.addQueryPrefix,allowDots:w,allowEmptyArrays:typeof p.allowEmptyArrays=="boolean"?!!p.allowEmptyArrays:Fi.allowEmptyArrays,arrayFormat:g,charset:m,charsetSentinel:typeof p.charsetSentinel=="boolean"?p.charsetSentinel:Fi.charsetSentinel,commaRoundTrip:p.commaRoundTrip,delimiter:p.delimiter===void 0?Fi.delimiter:p.delimiter,encode:typeof p.encode=="boolean"?p.encode:Fi.encode,encodeDotInKeys:typeof p.encodeDotInKeys=="boolean"?p.encodeDotInKeys:Fi.encodeDotInKeys,encoder:typeof p.encoder=="function"?p.encoder:Fi.encoder,encodeValuesOnly:typeof p.encodeValuesOnly=="boolean"?p.encodeValuesOnly:Fi.encodeValuesOnly,filter:y,format:v,formatter:b,serializeDate:typeof p.serializeDate=="function"?p.serializeDate:Fi.serializeDate,skipNulls:typeof p.skipNulls=="boolean"?p.skipNulls:Fi.skipNulls,sort:typeof p.sort=="function"?p.sort:null,strictNullHandling:typeof p.strictNullHandling=="boolean"?p.strictNullHandling:Fi.strictNullHandling}}(t);typeof o.filter=="function"?r=(0,o.filter)("",r):Hc(o.filter)&&(n=o.filter);var i=[];if(typeof r!="object"||r===null)return"";var a=Jhe[o.arrayFormat],l=a==="comma"&&o.commaRoundTrip;n||(n=Object.keys(r)),o.sort&&n.sort(o.sort);for(var s=Qhe(),u=0;u<n.length;++u){var c=n[u];o.skipNulls&&r[c]===null||Zhe(i,AYe(r[c],c,a,l,o.allowEmptyArrays,o.strictNullHandling,o.skipNulls,o.encodeDotInKeys,o.encode?o.encoder:null,o.filter,o.sort,o.allowDots,o.serializeDate,o.format,o.formatter,o.encodeValuesOnly,o.charset,s))}var d=i.join(o.delimiter),f=o.addQueryPrefix===!0?"?":"";return o.charsetSentinel&&(o.charset==="iso-8859-1"?f+="utf8=%26%2310003%3B&":f+="utf8=%E2%9C%93&"),d.length>0?f+d:""},CYe=function(e,t){var n=function(u){if(!u)return zo;if(u.allowEmptyArrays!==void 0&&typeof u.allowEmptyArrays!="boolean")throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(u.decodeDotInKeys!==void 0&&typeof u.decodeDotInKeys!="boolean")throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");if(u.decoder!==null&&u.decoder!==void 0&&typeof u.decoder!="function")throw new TypeError("Decoder has to be a function.");if(u.charset!==void 0&&u.charset!=="utf-8"&&u.charset!=="iso-8859-1")throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var c=u.charset===void 0?zo.charset:u.charset,d=u.duplicates===void 0?zo.duplicates:u.duplicates;if(d!=="combine"&&d!=="first"&&d!=="last")throw new TypeError("The duplicates option must be either combine, first, or last");return{allowDots:u.allowDots===void 0?u.decodeDotInKeys===!0||zo.allowDots:!!u.allowDots,allowEmptyArrays:typeof u.allowEmptyArrays=="boolean"?!!u.allowEmptyArrays:zo.allowEmptyArrays,allowPrototypes:typeof u.allowPrototypes=="boolean"?u.allowPrototypes:zo.allowPrototypes,allowSparse:typeof u.allowSparse=="boolean"?u.allowSparse:zo.allowSparse,arrayLimit:typeof u.arrayLimit=="number"?u.arrayLimit:zo.arrayLimit,charset:c,charsetSentinel:typeof u.charsetSentinel=="boolean"?u.charsetSentinel:zo.charsetSentinel,comma:typeof u.comma=="boolean"?u.comma:zo.comma,decodeDotInKeys:typeof u.decodeDotInKeys=="boolean"?u.decodeDotInKeys:zo.decodeDotInKeys,decoder:typeof u.decoder=="function"?u.decoder:zo.decoder,delimiter:typeof u.delimiter=="string"||Ug.isRegExp(u.delimiter)?u.delimiter:zo.delimiter,depth:typeof u.depth=="number"||u.depth===!1?+u.depth:zo.depth,duplicates:d,ignoreQueryPrefix:u.ignoreQueryPrefix===!0,interpretNumericEntities:typeof u.interpretNumericEntities=="boolean"?u.interpretNumericEntities:zo.interpretNumericEntities,parameterLimit:typeof u.parameterLimit=="number"?u.parameterLimit:zo.parameterLimit,parseArrays:u.parseArrays!==!1,plainObjects:typeof u.plainObjects=="boolean"?u.plainObjects:zo.plainObjects,strictDepth:typeof u.strictDepth=="boolean"?!!u.strictDepth:zo.strictDepth,strictNullHandling:typeof u.strictNullHandling=="boolean"?u.strictNullHandling:zo.strictNullHandling}}(t);if(e===""||e==null)return n.plainObjects?Object.create(null):{};for(var r=typeof e=="string"?function(u,c){var d={__proto__:null},f=c.ignoreQueryPrefix?u.replace(/^\?/,""):u;f=f.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var p,m=c.parameterLimit===1/0?void 0:c.parameterLimit,v=f.split(c.delimiter,m),g=-1,b=c.charset;if(c.charsetSentinel)for(p=0;p<v.length;++p)v[p].indexOf("utf8=")===0&&(v[p]==="utf8=%E2%9C%93"?b="utf-8":v[p]==="utf8=%26%2310003%3B"&&(b="iso-8859-1"),g=p,p=v.length);for(p=0;p<v.length;++p)if(p!==g){var y,w,x=v[p],_=x.indexOf("]="),E=_===-1?x.indexOf("="):_+1;E===-1?(y=c.decoder(x,zo.decoder,b,"key"),w=c.strictNullHandling?null:""):(y=c.decoder(x.slice(0,E),zo.decoder,b,"key"),w=Ug.maybeMap(t0e(x.slice(E+1),c),function(T){return c.decoder(T,zo.decoder,b,"value")})),w&&c.interpretNumericEntities&&b==="iso-8859-1"&&(w=xYe(w)),x.indexOf("[]=")>-1&&(w=wYe(w)?[w]:w);var C=tP.call(d,y);C&&c.duplicates==="combine"?d[y]=Ug.combine(d[y],w):C&&c.duplicates!=="last"||(d[y]=w)}return d}(e,n):e,o=n.plainObjects?Object.create(null):{},i=Object.keys(r),a=0;a<i.length;++a){var l=i[a],s=_Ye(l,r[l],n,typeof e=="string");o=Ug.merge(o,s,n)}return n.allowSparse===!0?o:Ug.compact(o)};let nP;Tw=_l({formats:QB,parse:CYe,stringify:EYe}),nP={base_url:"http://localhost:48080/admin-api",result_code:200,request_timeout:3e4,default_headers:"application/json"};var SYe="0123456789abcdefghijklmnopqrstuvwxyz";function Yd(e){return SYe.charAt(e)}function kYe(e,t){return e&t}function b_(e,t){return e|t}function n0e(e,t){return e^t}function r0e(e,t){return e&~t}function DYe(e){if(e==0)return-1;var t=0;return 65535&e||(e>>=16,t+=16),255&e||(e>>=8,t+=8),15&e||(e>>=4,t+=4),3&e||(e>>=2,t+=2),1&e||++t,t}function OYe(e){for(var t=0;e!=0;)e&=e-1,++t;return t}var Wg,Gg="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function A_(e){var t,n,r="";for(t=0;t+3<=e.length;t+=3)n=parseInt(e.substring(t,t+3),16),r+=Gg.charAt(n>>6)+Gg.charAt(63&n);for(t+1==e.length?(n=parseInt(e.substring(t,t+1),16),r+=Gg.charAt(n<<2)):t+2==e.length&&(n=parseInt(e.substring(t,t+2),16),r+=Gg.charAt(n>>2)+Gg.charAt((3&n)<<4));(3&r.length)>0;)r+="=";return r}function o0e(e){var t,n="",r=0,o=0;for(t=0;t<e.length&&e.charAt(t)!="=";++t){var i=Gg.indexOf(e.charAt(t));i<0||(r==0?(n+=Yd(i>>2),o=3&i,r=1):r==1?(n+=Yd(o<<2|i>>4),o=15&i,r=2):r==2?(n+=Yd(o),n+=Yd(i>>2),o=3&i,r=3):(n+=Yd(o<<2|i>>4),n+=Yd(15&i),r=0))}return r==1&&(n+=Yd(o<<2)),n}var S1,TYe=function(e){var t;if(Wg===void 0){var n="0123456789ABCDEF",r=` \f
| \r \xA0\u2028\u2029`;for(Wg={},t=0;t<16;++t)Wg[n.charAt(t)]=t;for(n=n.toLowerCase(),t=10;t<16;++t)Wg[n.charAt(t)]=t;for(t=0;t<8;++t)Wg[r.charAt(t)]=-1}var o=[],i=0,a=0;for(t=0;t<e.length;++t){var l=e.charAt(t);if(l=="=")break;if((l=Wg[l])!=-1){if(l===void 0)throw new Error("Illegal character at offset "+t);i|=l,++a>=2?(o[o.length]=i,i=0,a=0):i<<=4}}if(a)throw new Error("Hex encoding incomplete: 4 bits missing");return o},rP={decode:function(e){var t;if(S1===void 0){var n=`= \f
| \r \xA0\u2028\u2029`;for(S1=Object.create(null),t=0;t<64;++t)S1["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t)]=t;for(S1["-"]=62,S1._=63,t=0;t<9;++t)S1[n.charAt(t)]=-1}var r=[],o=0,i=0;for(t=0;t<e.length;++t){var a=e.charAt(t);if(a=="=")break;if((a=S1[a])!=-1){if(a===void 0)throw new Error("Illegal character at offset "+t);o|=a,++i>=4?(r[r.length]=o>>16,r[r.length]=o>>8&255,r[r.length]=255&o,o=0,i=0):o<<=6}}switch(i){case 1:throw new Error("Base64 encoding incomplete: at least 2 bits missing");case 2:r[r.length]=o>>10;break;case 3:r[r.length]=o>>16,r[r.length]=o>>8&255}return r},re:/-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+\/=\s]+)====/,unarmor:function(e){var t=rP.re.exec(e);if(t)if(t[1])e=t[1];else{if(!t[2])throw new Error("RegExp out of sync");e=t[2]}return rP.decode(e)}},qg=1e13,z4=function(){function e(t){this.buf=[+t||0]}return e.prototype.mulAdd=function(t,n){var r,o,i=this.buf,a=i.length;for(r=0;r<a;++r)(o=i[r]*t+n)<qg?n=0:o-=(n=0|o/qg)*qg,i[r]=o;n>0&&(i[r]=n)},e.prototype.sub=function(t){var n,r,o=this.buf,i=o.length;for(n=0;n<i;++n)(r=o[n]-t)<0?(r+=qg,t=1):t=0,o[n]=r;for(;o[o.length-1]===0;)o.pop()},e.prototype.toString=function(t){if((t||10)!=10)throw new Error("only base 10 is supported");for(var n=this.buf,r=n[n.length-1].toString(),o=n.length-2;o>=0;--o)r+=(qg+n[o]).toString().substring(1);return r},e.prototype.valueOf=function(){for(var t=this.buf,n=0,r=t.length-1;r>=0;--r)n=n*qg+t[r];return n},e.prototype.simplify=function(){var t=this.buf;return t.length==1?t[0]:this},e}(),MYe=/^(\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/,NYe=/^(\d\d\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/;function Kg(e,t){return e.length>t&&(e=e.substring(0,t)+"\u2026"),e}var xp,oP=function(){function e(t,n){this.hexDigits="0123456789ABCDEF",t instanceof e?(this.enc=t.enc,this.pos=t.pos):(this.enc=t,this.pos=n)}return e.prototype.get=function(t){if(t===void 0&&(t=this.pos++),t>=this.enc.length)throw new Error("Requesting byte offset ".concat(t," on a stream of length ").concat(this.enc.length));return typeof this.enc=="string"?this.enc.charCodeAt(t):this.enc[t]},e.prototype.hexByte=function(t){return this.hexDigits.charAt(t>>4&15)+this.hexDigits.charAt(15&t)},e.prototype.hexDump=function(t,n,r){for(var o="",i=t;i<n;++i)if(o+=this.hexByte(this.get(i)),r!==!0)switch(15&i){case 7:o+=" ";break;case 15:o+=`
| `;break;default:o+=" "}return o},e.prototype.isASCII=function(t,n){for(var r=t;r<n;++r){var o=this.get(r);if(o<32||o>176)return!1}return!0},e.prototype.parseStringISO=function(t,n){for(var r="",o=t;o<n;++o)r+=String.fromCharCode(this.get(o));return r},e.prototype.parseStringUTF=function(t,n){for(var r="",o=t;o<n;){var i=this.get(o++);r+=i<128?String.fromCharCode(i):i>191&&i<224?String.fromCharCode((31&i)<<6|63&this.get(o++)):String.fromCharCode((15&i)<<12|(63&this.get(o++))<<6|63&this.get(o++))}return r},e.prototype.parseStringBMP=function(t,n){for(var r,o,i="",a=t;a<n;)r=this.get(a++),o=this.get(a++),i+=String.fromCharCode(r<<8|o);return i},e.prototype.parseTime=function(t,n,r){var o=this.parseStringISO(t,n),i=(r?MYe:NYe).exec(o);return i?(r&&(i[1]=+i[1],i[1]+=+i[1]<70?2e3:1900),o=i[1]+"-"+i[2]+"-"+i[3]+" "+i[4],i[5]&&(o+=":"+i[5],i[6]&&(o+=":"+i[6],i[7]&&(o+="."+i[7]))),i[8]&&(o+=" UTC",i[8]!="Z"&&(o+=i[8],i[9]&&(o+=":"+i[9]))),o):"Unrecognized time: "+o},e.prototype.parseInteger=function(t,n){for(var r,o=this.get(t),i=o>127,a=i?255:0,l="";o==a&&++t<n;)o=this.get(t);if((r=n-t)===0)return i?-1:0;if(r>4){for(l=o,r<<=3;!(128&(+l^a));)l=+l<<1,--r;l="("+r+` bit)
| `}i&&(o-=256);for(var s=new z4(o),u=t+1;u<n;++u)s.mulAdd(256,this.get(u));return l+s.toString()},e.prototype.parseBitString=function(t,n,r){for(var o=this.get(t),i="("+((n-t-1<<3)-o)+` bit)
| `,a="",l=t+1;l<n;++l){for(var s=this.get(l),u=l==n-1?o:0,c=7;c>=u;--c)a+=s>>c&1?"1":"0";if(a.length>r)return i+Kg(a,r)}return i+a},e.prototype.parseOctetString=function(t,n,r){if(this.isASCII(t,n))return Kg(this.parseStringISO(t,n),r);var o=n-t,i="("+o+` byte)
| `;o>(r/=2)&&(n=t+r);for(var a=t;a<n;++a)i+=this.hexByte(this.get(a));return o>r&&(i+="\u2026"),i},e.prototype.parseOID=function(t,n,r){for(var o="",i=new z4,a=0,l=t;l<n;++l){var s=this.get(l);if(i.mulAdd(128,127&s),a+=7,!(128&s)){if(o==="")if((i=i.simplify())instanceof z4)i.sub(80),o="2."+i.toString();else{var u=i<80?i<40?0:1:2;o=u+"."+(i-40*u)}else o+="."+i.toString();if(o.length>r)return Kg(o,r);i=new z4,a=0}}return a>0&&(o+=".incomplete"),o},e}(),FYe=function(){function e(t,n,r,o,i){if(!(o instanceof i0e))throw new Error("Invalid tag value.");this.stream=t,this.header=n,this.length=r,this.tag=o,this.sub=i}return e.prototype.typeName=function(){switch(this.tag.tagClass){case 0:switch(this.tag.tagNumber){case 0:return"EOC";case 1:return"BOOLEAN";case 2:return"INTEGER";case 3:return"BIT_STRING";case 4:return"OCTET_STRING";case 5:return"NULL";case 6:return"OBJECT_IDENTIFIER";case 7:return"ObjectDescriptor";case 8:return"EXTERNAL";case 9:return"REAL";case 10:return"ENUMERATED";case 11:return"EMBEDDED_PDV";case 12:return"UTF8String";case 16:return"SEQUENCE";case 17:return"SET";case 18:return"NumericString";case 19:return"PrintableString";case 20:return"TeletexString";case 21:return"VideotexString";case 22:return"IA5String";case 23:return"UTCTime";case 24:return"GeneralizedTime";case 25:return"GraphicString";case 26:return"VisibleString";case 27:return"GeneralString";case 28:return"UniversalString";case 30:return"BMPString"}return"Universal_"+this.tag.tagNumber.toString();case 1:return"Application_"+this.tag.tagNumber.toString();case 2:return"["+this.tag.tagNumber.toString()+"]";case 3:return"Private_"+this.tag.tagNumber.toString()}},e.prototype.content=function(t){if(this.tag===void 0)return null;t===void 0&&(t=1/0);var n=this.posContent(),r=Math.abs(this.length);if(!this.tag.isUniversal())return this.sub!==null?"("+this.sub.length+" elem)":this.stream.parseOctetString(n,n+r,t);switch(this.tag.tagNumber){case 1:return this.stream.get(n)===0?"false":"true";case 2:return this.stream.parseInteger(n,n+r);case 3:return this.sub?"("+this.sub.length+" elem)":this.stream.parseBitString(n,n+r,t);case 4:return this.sub?"("+this.sub.length+" elem)":this.stream.parseOctetString(n,n+r,t);case 6:return this.stream.parseOID(n,n+r,t);case 16:case 17:return this.sub!==null?"("+this.sub.length+" elem)":"(no elem)";case 12:return Kg(this.stream.parseStringUTF(n,n+r),t);case 18:case 19:case 20:case 21:case 22:case 26:return Kg(this.stream.parseStringISO(n,n+r),t);case 30:return Kg(this.stream.parseStringBMP(n,n+r),t);case 23:case 24:return this.stream.parseTime(n,n+r,this.tag.tagNumber==23)}return null},e.prototype.toString=function(){return this.typeName()+"@"+this.stream.pos+"[header:"+this.header+",length:"+this.length+",sub:"+(this.sub===null?"null":this.sub.length)+"]"},e.prototype.toPrettyString=function(t){t===void 0&&(t="");var n=t+this.typeName()+" @"+this.stream.pos;if(this.length>=0&&(n+="+"),n+=this.length,this.tag.tagConstructed?n+=" (constructed)":!this.tag.isUniversal()||this.tag.tagNumber!=3&&this.tag.tagNumber!=4||this.sub===null||(n+=" (encapsulates)"),n+=`
| `,this.sub!==null){t+=" ";for(var r=0,o=this.sub.length;r<o;++r)n+=this.sub[r].toPrettyString(t)}return n},e.prototype.posStart=function(){return this.stream.pos},e.prototype.posContent=function(){return this.stream.pos+this.header},e.prototype.posEnd=function(){return this.stream.pos+this.header+Math.abs(this.length)},e.prototype.toHexString=function(){return this.stream.hexDump(this.posStart(),this.posEnd(),!0)},e.decodeLength=function(t){var n=t.get(),r=127&n;if(r==n)return r;if(r>6)throw new Error("Length over 48 bits not supported at position "+(t.pos-1));if(r===0)return null;n=0;for(var o=0;o<r;++o)n=256*n+t.get();return n},e.prototype.getHexStringValue=function(){var t=this.toHexString(),n=2*this.header,r=2*this.length;return t.substr(n,r)},e.decode=function(t){var n;n=t instanceof oP?t:new oP(t,0);var r=new oP(n),o=new i0e(n),i=e.decodeLength(n),a=n.pos,l=a-r.pos,s=null,u=function(){var d=[];if(i!==null){for(var f=a+i;n.pos<f;)d[d.length]=e.decode(n);if(n.pos!=f)throw new Error("Content size is not correct for container starting at offset "+a)}else try{for(;;){var p=e.decode(n);if(p.tag.isEOC())break;d[d.length]=p}i=a-n.pos}catch(m){throw new Error("Exception while decoding undefined length content: "+m)}return d};if(o.tagConstructed)s=u();else if(o.isUniversal()&&(o.tagNumber==3||o.tagNumber==4))try{if(o.tagNumber==3&&n.get()!=0)throw new Error("BIT STRINGs with unused bits cannot encapsulate.");s=u();for(var c=0;c<s.length;++c)if(s[c].tag.isEOC())throw new Error("EOC is not supposed to be actual content.")}catch{s=null}if(s===null){if(i===null)throw new Error("We can't skip over an invalid tag with undefined length at offset "+a);n.pos=a+Math.abs(i)}return new e(r,l,i,o,s)},e}(),i0e=function(){function e(t){var n=t.get();if(this.tagClass=n>>6,this.tagConstructed=!!(32&n),this.tagNumber=31&n,this.tagNumber==31){var r=new z4;do n=t.get(),r.mulAdd(128,127&n);while(128&n);this.tagNumber=r.simplify()}}return e.prototype.isUniversal=function(){return this.tagClass===0},e.prototype.isEOC=function(){return this.tagClass===0&&this.tagNumber===0},e}(),al=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],RYe=(1<<26)/al[al.length-1],ar=function(){function e(t,n,r){t!=null&&(typeof t=="number"?this.fromNumber(t,n,r):n==null&&typeof t!="string"?this.fromString(t,256):this.fromString(t,n))}return e.prototype.toString=function(t){if(this.s<0)return"-"+this.negate().toString(t);var n;if(t==16)n=4;else if(t==8)n=3;else if(t==2)n=1;else if(t==32)n=5;else{if(t!=4)return this.toRadix(t);n=2}var r,o=(1<<n)-1,i=!1,a="",l=this.t,s=this.DB-l*this.DB%n;if(l-- >0)for(s<this.DB&&(r=this[l]>>s)>0&&(i=!0,a=Yd(r));l>=0;)s<n?(r=(this[l]&(1<<s)-1)<<n-s,r|=this[--l]>>(s+=this.DB-n)):(r=this[l]>>(s-=n)&o,s<=0&&(s+=this.DB,--l)),r>0&&(i=!0),i&&(a+=Yd(r));return i?a:"0"},e.prototype.negate=function(){var t=yr();return e.ZERO.subTo(this,t),t},e.prototype.abs=function(){return this.s<0?this.negate():this},e.prototype.compareTo=function(t){var n=this.s-t.s;if(n!=0)return n;var r=this.t;if((n=r-t.t)!=0)return this.s<0?-n:n;for(;--r>=0;)if((n=this[r]-t[r])!=0)return n;return 0},e.prototype.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+x_(this[this.t-1]^this.s&this.DM)},e.prototype.mod=function(t){var n=yr();return this.abs().divRemTo(t,null,n),this.s<0&&n.compareTo(e.ZERO)>0&&t.subTo(n,n),n},e.prototype.modPowInt=function(t,n){var r;return r=t<256||n.isEven()?new a0e(n):new l0e(n),this.exp(t,r)},e.prototype.clone=function(){var t=yr();return this.copyTo(t),t},e.prototype.intValue=function(){if(this.s<0){if(this.t==1)return this[0]-this.DV;if(this.t==0)return-1}else{if(this.t==1)return this[0];if(this.t==0)return 0}return(this[1]&(1<<32-this.DB)-1)<<this.DB|this[0]},e.prototype.byteValue=function(){return this.t==0?this.s:this[0]<<24>>24},e.prototype.shortValue=function(){return this.t==0?this.s:this[0]<<16>>16},e.prototype.signum=function(){return this.s<0?-1:this.t<=0||this.t==1&&this[0]<=0?0:1},e.prototype.toByteArray=function(){var t=this.t,n=[];n[0]=this.s;var r,o=this.DB-t*this.DB%8,i=0;if(t-- >0)for(o<this.DB&&(r=this[t]>>o)!=(this.s&this.DM)>>o&&(n[i++]=r|this.s<<this.DB-o);t>=0;)o<8?(r=(this[t]&(1<<o)-1)<<8-o,r|=this[--t]>>(o+=this.DB-8)):(r=this[t]>>(o-=8)&255,o<=0&&(o+=this.DB,--t)),128&r&&(r|=-256),i==0&&(128&this.s)!=(128&r)&&++i,(i>0||r!=this.s)&&(n[i++]=r);return n},e.prototype.equals=function(t){return this.compareTo(t)==0},e.prototype.min=function(t){return this.compareTo(t)<0?this:t},e.prototype.max=function(t){return this.compareTo(t)>0?this:t},e.prototype.and=function(t){var n=yr();return this.bitwiseTo(t,kYe,n),n},e.prototype.or=function(t){var n=yr();return this.bitwiseTo(t,b_,n),n},e.prototype.xor=function(t){var n=yr();return this.bitwiseTo(t,n0e,n),n},e.prototype.andNot=function(t){var n=yr();return this.bitwiseTo(t,r0e,n),n},e.prototype.not=function(){for(var t=yr(),n=0;n<this.t;++n)t[n]=this.DM&~this[n];return t.t=this.t,t.s=~this.s,t},e.prototype.shiftLeft=function(t){var n=yr();return t<0?this.rShiftTo(-t,n):this.lShiftTo(t,n),n},e.prototype.shiftRight=function(t){var n=yr();return t<0?this.lShiftTo(-t,n):this.rShiftTo(t,n),n},e.prototype.getLowestSetBit=function(){for(var t=0;t<this.t;++t)if(this[t]!=0)return t*this.DB+DYe(this[t]);return this.s<0?this.t*this.DB:-1},e.prototype.bitCount=function(){for(var t=0,n=this.s&this.DM,r=0;r<this.t;++r)t+=OYe(this[r]^n);return t},e.prototype.testBit=function(t){var n=Math.floor(t/this.DB);return n>=this.t?this.s!=0:!!(this[n]&1<<t%this.DB)},e.prototype.setBit=function(t){return this.changeBit(t,b_)},e.prototype.clearBit=function(t){return this.changeBit(t,r0e)},e.prototype.flipBit=function(t){return this.changeBit(t,n0e)},e.prototype.add=function(t){var n=yr();return this.addTo(t,n),n},e.prototype.subtract=function(t){var n=yr();return this.subTo(t,n),n},e.prototype.multiply=function(t){var n=yr();return this.multiplyTo(t,n),n},e.prototype.divide=function(t){var n=yr();return this.divRemTo(t,n,null),n},e.prototype.remainder=function(t){var n=yr();return this.divRemTo(t,null,n),n},e.prototype.divideAndRemainder=function(t){var n=yr(),r=yr();return this.divRemTo(t,n,r),[n,r]},e.prototype.modPow=function(t,n){var r,o,i=t.bitLength(),a=_p(1);if(i<=0)return a;r=i<18?1:i<48?3:i<144?4:i<768?5:6,o=i<8?new a0e(n):n.isEven()?new BYe(n):new l0e(n);var l=[],s=3,u=r-1,c=(1<<r)-1;if(l[1]=o.convert(this),r>1){var d=yr();for(o.sqrTo(l[1],d);s<=c;)l[s]=yr(),o.mulTo(d,l[s-2],l[s]),s+=2}var f,p,m=t.t-1,v=!0,g=yr();for(i=x_(t[m])-1;m>=0;){for(i>=u?f=t[m]>>i-u&c:(f=(t[m]&(1<<i+1)-1)<<u-i,m>0&&(f|=t[m-1]>>this.DB+i-u)),s=r;!(1&f);)f>>=1,--s;if((i-=s)<0&&(i+=this.DB,--m),v)l[f].copyTo(a),v=!1;else{for(;s>1;)o.sqrTo(a,g),o.sqrTo(g,a),s-=2;s>0?o.sqrTo(a,g):(p=a,a=g,g=p),o.mulTo(g,l[f],a)}for(;m>=0&&!(t[m]&1<<i);)o.sqrTo(a,g),p=a,a=g,g=p,--i<0&&(i=this.DB-1,--m)}return o.revert(a)},e.prototype.modInverse=function(t){var n=t.isEven();if(this.isEven()&&n||t.signum()==0)return e.ZERO;for(var r=t.clone(),o=this.clone(),i=_p(1),a=_p(0),l=_p(0),s=_p(1);r.signum()!=0;){for(;r.isEven();)r.rShiftTo(1,r),n?(i.isEven()&&a.isEven()||(i.addTo(this,i),a.subTo(t,a)),i.rShiftTo(1,i)):a.isEven()||a.subTo(t,a),a.rShiftTo(1,a);for(;o.isEven();)o.rShiftTo(1,o),n?(l.isEven()&&s.isEven()||(l.addTo(this,l),s.subTo(t,s)),l.rShiftTo(1,l)):s.isEven()||s.subTo(t,s),s.rShiftTo(1,s);r.compareTo(o)>=0?(r.subTo(o,r),n&&i.subTo(l,i),a.subTo(s,a)):(o.subTo(r,o),n&&l.subTo(i,l),s.subTo(a,s))}return o.compareTo(e.ONE)!=0?e.ZERO:s.compareTo(t)>=0?s.subtract(t):s.signum()<0?(s.addTo(t,s),s.signum()<0?s.add(t):s):s},e.prototype.pow=function(t){return this.exp(t,new IYe)},e.prototype.gcd=function(t){var n=this.s<0?this.negate():this.clone(),r=t.s<0?t.negate():t.clone();if(n.compareTo(r)<0){var o=n;n=r,r=o}var i=n.getLowestSetBit(),a=r.getLowestSetBit();if(a<0)return n;for(i<a&&(a=i),a>0&&(n.rShiftTo(a,n),r.rShiftTo(a,r));n.signum()>0;)(i=n.getLowestSetBit())>0&&n.rShiftTo(i,n),(i=r.getLowestSetBit())>0&&r.rShiftTo(i,r),n.compareTo(r)>=0?(n.subTo(r,n),n.rShiftTo(1,n)):(r.subTo(n,r),r.rShiftTo(1,r));return a>0&&r.lShiftTo(a,r),r},e.prototype.isProbablePrime=function(t){var n,r=this.abs();if(r.t==1&&r[0]<=al[al.length-1]){for(n=0;n<al.length;++n)if(r[0]==al[n])return!0;return!1}if(r.isEven())return!1;for(n=1;n<al.length;){for(var o=al[n],i=n+1;i<al.length&&o<RYe;)o*=al[i++];for(o=r.modInt(o);n<i;)if(o%al[n++]==0)return!1}return r.millerRabin(t)},e.prototype.copyTo=function(t){for(var n=this.t-1;n>=0;--n)t[n]=this[n];t.t=this.t,t.s=this.s},e.prototype.fromInt=function(t){this.t=1,this.s=t<0?-1:0,t>0?this[0]=t:t<-1?this[0]=t+this.DV:this.t=0},e.prototype.fromString=function(t,n){var r;if(n==16)r=4;else if(n==8)r=3;else if(n==256)r=8;else if(n==2)r=1;else if(n==32)r=5;else{if(n!=4)return void this.fromRadix(t,n);r=2}this.t=0,this.s=0;for(var o=t.length,i=!1,a=0;--o>=0;){var l=r==8?255&+t[o]:u0e(t,o);l<0?t.charAt(o)=="-"&&(i=!0):(i=!1,a==0?this[this.t++]=l:a+r>this.DB?(this[this.t-1]|=(l&(1<<this.DB-a)-1)<<a,this[this.t++]=l>>this.DB-a):this[this.t-1]|=l<<a,(a+=r)>=this.DB&&(a-=this.DB))}r==8&&128&+t[0]&&(this.s=-1,a>0&&(this[this.t-1]|=(1<<this.DB-a)-1<<a)),this.clamp(),i&&e.ZERO.subTo(this,this)},e.prototype.clamp=function(){for(var t=this.s&this.DM;this.t>0&&this[this.t-1]==t;)--this.t},e.prototype.dlShiftTo=function(t,n){var r;for(r=this.t-1;r>=0;--r)n[r+t]=this[r];for(r=t-1;r>=0;--r)n[r]=0;n.t=this.t+t,n.s=this.s},e.prototype.drShiftTo=function(t,n){for(var r=t;r<this.t;++r)n[r-t]=this[r];n.t=Math.max(this.t-t,0),n.s=this.s},e.prototype.lShiftTo=function(t,n){for(var r=t%this.DB,o=this.DB-r,i=(1<<o)-1,a=Math.floor(t/this.DB),l=this.s<<r&this.DM,s=this.t-1;s>=0;--s)n[s+a+1]=this[s]>>o|l,l=(this[s]&i)<<r;for(s=a-1;s>=0;--s)n[s]=0;n[a]=l,n.t=this.t+a+1,n.s=this.s,n.clamp()},e.prototype.rShiftTo=function(t,n){n.s=this.s;var r=Math.floor(t/this.DB);if(r>=this.t)n.t=0;else{var o=t%this.DB,i=this.DB-o,a=(1<<o)-1;n[0]=this[r]>>o;for(var l=r+1;l<this.t;++l)n[l-r-1]|=(this[l]&a)<<i,n[l-r]=this[l]>>o;o>0&&(n[this.t-r-1]|=(this.s&a)<<i),n.t=this.t-r,n.clamp()}},e.prototype.subTo=function(t,n){for(var r=0,o=0,i=Math.min(t.t,this.t);r<i;)o+=this[r]-t[r],n[r++]=o&this.DM,o>>=this.DB;if(t.t<this.t){for(o-=t.s;r<this.t;)o+=this[r],n[r++]=o&this.DM,o>>=this.DB;o+=this.s}else{for(o+=this.s;r<t.t;)o-=t[r],n[r++]=o&this.DM,o>>=this.DB;o-=t.s}n.s=o<0?-1:0,o<-1?n[r++]=this.DV+o:o>0&&(n[r++]=o),n.t=r,n.clamp()},e.prototype.multiplyTo=function(t,n){var r=this.abs(),o=t.abs(),i=r.t;for(n.t=i+o.t;--i>=0;)n[i]=0;for(i=0;i<o.t;++i)n[i+r.t]=r.am(0,o[i],n,i,0,r.t);n.s=0,n.clamp(),this.s!=t.s&&e.ZERO.subTo(n,n)},e.prototype.squareTo=function(t){for(var n=this.abs(),r=t.t=2*n.t;--r>=0;)t[r]=0;for(r=0;r<n.t-1;++r){var o=n.am(r,n[r],t,2*r,0,1);(t[r+n.t]+=n.am(r+1,2*n[r],t,2*r+1,o,n.t-r-1))>=n.DV&&(t[r+n.t]-=n.DV,t[r+n.t+1]=1)}t.t>0&&(t[t.t-1]+=n.am(r,n[r],t,2*r,0,1)),t.s=0,t.clamp()},e.prototype.divRemTo=function(t,n,r){var o=t.abs();if(!(o.t<=0)){var i=this.abs();if(i.t<o.t)return n!=null&&n.fromInt(0),void(r!=null&&this.copyTo(r));r==null&&(r=yr());var a=yr(),l=this.s,s=t.s,u=this.DB-x_(o[o.t-1]);u>0?(o.lShiftTo(u,a),i.lShiftTo(u,r)):(o.copyTo(a),i.copyTo(r));var c=a.t,d=a[c-1];if(d!=0){var f=d*(1<<this.F1)+(c>1?a[c-2]>>this.F2:0),p=this.FV/f,m=(1<<this.F1)/f,v=1<<this.F2,g=r.t,b=g-c,y=n??yr();for(a.dlShiftTo(b,y),r.compareTo(y)>=0&&(r[r.t++]=1,r.subTo(y,r)),e.ONE.dlShiftTo(c,y),y.subTo(a,a);a.t<c;)a[a.t++]=0;for(;--b>=0;){var w=r[--g]==d?this.DM:Math.floor(r[g]*p+(r[g-1]+v)*m);if((r[g]+=a.am(0,w,r,b,0,c))<w)for(a.dlShiftTo(b,y),r.subTo(y,r);r[g]<--w;)r.subTo(y,r)}n!=null&&(r.drShiftTo(c,n),l!=s&&e.ZERO.subTo(n,n)),r.t=c,r.clamp(),u>0&&r.rShiftTo(u,r),l<0&&e.ZERO.subTo(r,r)}}},e.prototype.invDigit=function(){if(this.t<1)return 0;var t=this[0];if(!(1&t))return 0;var n=3&t;return(n=(n=(n=(n=n*(2-(15&t)*n)&15)*(2-(255&t)*n)&255)*(2-((65535&t)*n&65535))&65535)*(2-t*n%this.DV)%this.DV)>0?this.DV-n:-n},e.prototype.isEven=function(){return(this.t>0?1&this[0]:this.s)==0},e.prototype.exp=function(t,n){if(t>4294967295||t<1)return e.ONE;var r=yr(),o=yr(),i=n.convert(this),a=x_(t)-1;for(i.copyTo(r);--a>=0;)if(n.sqrTo(r,o),(t&1<<a)>0)n.mulTo(o,i,r);else{var l=r;r=o,o=l}return n.revert(r)},e.prototype.chunkSize=function(t){return Math.floor(Math.LN2*this.DB/Math.log(t))},e.prototype.toRadix=function(t){if(t==null&&(t=10),this.signum()==0||t<2||t>36)return"0";var n=this.chunkSize(t),r=Math.pow(t,n),o=_p(r),i=yr(),a=yr(),l="";for(this.divRemTo(o,i,a);i.signum()>0;)l=(r+a.intValue()).toString(t).substr(1)+l,i.divRemTo(o,i,a);return a.intValue().toString(t)+l},e.prototype.fromRadix=function(t,n){this.fromInt(0),n==null&&(n=10);for(var r=this.chunkSize(n),o=Math.pow(n,r),i=!1,a=0,l=0,s=0;s<t.length;++s){var u=u0e(t,s);u<0?t.charAt(s)=="-"&&this.signum()==0&&(i=!0):(l=n*l+u,++a>=r&&(this.dMultiply(o),this.dAddOffset(l,0),a=0,l=0))}a>0&&(this.dMultiply(Math.pow(n,a)),this.dAddOffset(l,0)),i&&e.ZERO.subTo(this,this)},e.prototype.fromNumber=function(t,n,r){if(typeof n=="number")if(t<2)this.fromInt(1);else for(this.fromNumber(t,r),this.testBit(t-1)||this.bitwiseTo(e.ONE.shiftLeft(t-1),b_,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(n);)this.dAddOffset(2,0),this.bitLength()>t&&this.subTo(e.ONE.shiftLeft(t-1),this);else{var o=[],i=7&t;o.length=1+(t>>3),n.nextBytes(o),i>0?o[0]&=(1<<i)-1:o[0]=0,this.fromString(o,256)}},e.prototype.bitwiseTo=function(t,n,r){var o,i,a=Math.min(t.t,this.t);for(o=0;o<a;++o)r[o]=n(this[o],t[o]);if(t.t<this.t){for(i=t.s&this.DM,o=a;o<this.t;++o)r[o]=n(this[o],i);r.t=this.t}else{for(i=this.s&this.DM,o=a;o<t.t;++o)r[o]=n(i,t[o]);r.t=t.t}r.s=n(this.s,t.s),r.clamp()},e.prototype.changeBit=function(t,n){var r=e.ONE.shiftLeft(t);return this.bitwiseTo(r,n,r),r},e.prototype.addTo=function(t,n){for(var r=0,o=0,i=Math.min(t.t,this.t);r<i;)o+=this[r]+t[r],n[r++]=o&this.DM,o>>=this.DB;if(t.t<this.t){for(o+=t.s;r<this.t;)o+=this[r],n[r++]=o&this.DM,o>>=this.DB;o+=this.s}else{for(o+=this.s;r<t.t;)o+=t[r],n[r++]=o&this.DM,o>>=this.DB;o+=t.s}n.s=o<0?-1:0,o>0?n[r++]=o:o<-1&&(n[r++]=this.DV+o),n.t=r,n.clamp()},e.prototype.dMultiply=function(t){this[this.t]=this.am(0,t-1,this,0,0,this.t),++this.t,this.clamp()},e.prototype.dAddOffset=function(t,n){if(t!=0){for(;this.t<=n;)this[this.t++]=0;for(this[n]+=t;this[n]>=this.DV;)this[n]-=this.DV,++n>=this.t&&(this[this.t++]=0),++this[n]}},e.prototype.multiplyLowerTo=function(t,n,r){var o=Math.min(this.t+t.t,n);for(r.s=0,r.t=o;o>0;)r[--o]=0;for(var i=r.t-this.t;o<i;++o)r[o+this.t]=this.am(0,t[o],r,o,0,this.t);for(i=Math.min(t.t,n);o<i;++o)this.am(0,t[o],r,o,0,n-o);r.clamp()},e.prototype.multiplyUpperTo=function(t,n,r){--n;var o=r.t=this.t+t.t-n;for(r.s=0;--o>=0;)r[o]=0;for(o=Math.max(n-this.t,0);o<t.t;++o)r[this.t+o-n]=this.am(n-o,t[o],r,0,0,this.t+o-n);r.clamp(),r.drShiftTo(1,r)},e.prototype.modInt=function(t){if(t<=0)return 0;var n=this.DV%t,r=this.s<0?t-1:0;if(this.t>0)if(n==0)r=this[0]%t;else for(var o=this.t-1;o>=0;--o)r=(n*r+this[o])%t;return r},e.prototype.millerRabin=function(t){var n=this.subtract(e.ONE),r=n.getLowestSetBit();if(r<=0)return!1;var o=n.shiftRight(r);(t=t+1>>1)>al.length&&(t=al.length);for(var i=yr(),a=0;a<t;++a){i.fromInt(al[Math.floor(Math.random()*al.length)]);var l=i.modPow(o,this);if(l.compareTo(e.ONE)!=0&&l.compareTo(n)!=0){for(var s=1;s++<r&&l.compareTo(n)!=0;)if((l=l.modPowInt(2,this)).compareTo(e.ONE)==0)return!1;if(l.compareTo(n)!=0)return!1}}return!0},e.prototype.square=function(){var t=yr();return this.squareTo(t),t},e.prototype.gcda=function(t,n){var r=this.s<0?this.negate():this.clone(),o=t.s<0?t.negate():t.clone();if(r.compareTo(o)<0){var i=r;r=o,o=i}var a=r.getLowestSetBit(),l=o.getLowestSetBit();if(l<0)n(r);else{a<l&&(l=a),l>0&&(r.rShiftTo(l,r),o.rShiftTo(l,o));var s=function(){(a=r.getLowestSetBit())>0&&r.rShiftTo(a,r),(a=o.getLowestSetBit())>0&&o.rShiftTo(a,o),r.compareTo(o)>=0?(r.subTo(o,r),r.rShiftTo(1,r)):(o.subTo(r,o),o.rShiftTo(1,o)),r.signum()>0?setTimeout(s,0):(l>0&&o.lShiftTo(l,o),setTimeout(function(){n(o)},0))};setTimeout(s,10)}},e.prototype.fromNumberAsync=function(t,n,r,o){if(typeof n=="number")if(t<2)this.fromInt(1);else{this.fromNumber(t,r),this.testBit(t-1)||this.bitwiseTo(e.ONE.shiftLeft(t-1),b_,this),this.isEven()&&this.dAddOffset(1,0);var i=this,a=function(){i.dAddOffset(2,0),i.bitLength()>t&&i.subTo(e.ONE.shiftLeft(t-1),i),i.isProbablePrime(n)?setTimeout(function(){o()},0):setTimeout(a,0)};setTimeout(a,0)}else{var l=[],s=7&t;l.length=1+(t>>3),n.nextBytes(l),s>0?l[0]&=(1<<s)-1:l[0]=0,this.fromString(l,256)}},e}(),IYe=function(){function e(){}return e.prototype.convert=function(t){return t},e.prototype.revert=function(t){return t},e.prototype.mulTo=function(t,n,r){t.multiplyTo(n,r)},e.prototype.sqrTo=function(t,n){t.squareTo(n)},e}(),a0e=function(){function e(t){this.m=t}return e.prototype.convert=function(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t},e.prototype.revert=function(t){return t},e.prototype.reduce=function(t){t.divRemTo(this.m,null,t)},e.prototype.mulTo=function(t,n,r){t.multiplyTo(n,r),this.reduce(r)},e.prototype.sqrTo=function(t,n){t.squareTo(n),this.reduce(n)},e}(),l0e=function(){function e(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<<t.DB-15)-1,this.mt2=2*t.t}return e.prototype.convert=function(t){var n=yr();return t.abs().dlShiftTo(this.m.t,n),n.divRemTo(this.m,null,n),t.s<0&&n.compareTo(ar.ZERO)>0&&this.m.subTo(n,n),n},e.prototype.revert=function(t){var n=yr();return t.copyTo(n),this.reduce(n),n},e.prototype.reduce=function(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var n=0;n<this.m.t;++n){var r=32767&t[n],o=r*this.mpl+((r*this.mph+(t[n]>>15)*this.mpl&this.um)<<15)&t.DM;for(t[r=n+this.m.t]+=this.m.am(0,o,t,n,0,this.m.t);t[r]>=t.DV;)t[r]-=t.DV,t[++r]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)},e.prototype.mulTo=function(t,n,r){t.multiplyTo(n,r),this.reduce(r)},e.prototype.sqrTo=function(t,n){t.squareTo(n),this.reduce(n)},e}(),BYe=function(){function e(t){this.m=t,this.r2=yr(),this.q3=yr(),ar.ONE.dlShiftTo(2*t.t,this.r2),this.mu=this.r2.divide(t)}return e.prototype.convert=function(t){if(t.s<0||t.t>2*this.m.t)return t.mod(this.m);if(t.compareTo(this.m)<0)return t;var n=yr();return t.copyTo(n),this.reduce(n),n},e.prototype.revert=function(t){return t},e.prototype.reduce=function(t){for(t.drShiftTo(this.m.t-1,this.r2),t.t>this.m.t+1&&(t.t=this.m.t+1,t.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);t.compareTo(this.r2)<0;)t.dAddOffset(1,this.m.t+1);for(t.subTo(this.r2,t);t.compareTo(this.m)>=0;)t.subTo(this.m,t)},e.prototype.mulTo=function(t,n,r){t.multiplyTo(n,r),this.reduce(r)},e.prototype.sqrTo=function(t,n){t.squareTo(n),this.reduce(n)},e}();function yr(){return new ar(null)}function Ho(e,t){return new ar(e,t)}var s0e=typeof navigator<"u";s0e&&navigator.appName=="Microsoft Internet Explorer"?(ar.prototype.am=function(e,t,n,r,o,i){for(var a=32767&t,l=t>>15;--i>=0;){var s=32767&this[e],u=this[e++]>>15,c=l*s+u*a;o=((s=a*s+((32767&c)<<15)+n[r]+(1073741823&o))>>>30)+(c>>>15)+l*u+(o>>>30),n[r++]=1073741823&s}return o},xp=30):s0e&&navigator.appName!="Netscape"?(ar.prototype.am=function(e,t,n,r,o,i){for(;--i>=0;){var a=t*this[e++]+n[r]+o;o=Math.floor(a/67108864),n[r++]=67108863&a}return o},xp=26):(ar.prototype.am=function(e,t,n,r,o,i){for(var a=16383&t,l=t>>14;--i>=0;){var s=16383&this[e],u=this[e++]>>14,c=l*s+u*a;o=((s=a*s+((16383&c)<<14)+n[r]+o)>>28)+(c>>14)+l*u,n[r++]=268435455&s}return o},xp=28),ar.prototype.DB=xp,ar.prototype.DM=(1<<xp)-1,ar.prototype.DV=1<<xp,ar.prototype.FV=Math.pow(2,52),ar.prototype.F1=52-xp,ar.prototype.F2=2*xp-52;var Yg,ru,w_=[];for(Yg=48,ru=0;ru<=9;++ru)w_[Yg++]=ru;for(Yg=97,ru=10;ru<36;++ru)w_[Yg++]=ru;for(Yg=65,ru=10;ru<36;++ru)w_[Yg++]=ru;function u0e(e,t){var n=w_[e.charCodeAt(t)];return n??-1}function _p(e){var t=yr();return t.fromInt(e),t}function x_(e){var t,n=1;return(t=e>>>16)!=0&&(e=t,n+=16),(t=e>>8)!=0&&(e=t,n+=8),(t=e>>4)!=0&&(e=t,n+=4),(t=e>>2)!=0&&(e=t,n+=2),(t=e>>1)!=0&&(e=t,n+=1),n}ar.ZERO=_p(0),ar.ONE=_p(1);var PYe=function(){function e(){this.i=0,this.j=0,this.S=[]}return e.prototype.init=function(t){var n,r,o;for(n=0;n<256;++n)this.S[n]=n;for(r=0,n=0;n<256;++n)r=r+this.S[n]+t[n%t.length]&255,o=this.S[n],this.S[n]=this.S[r],this.S[r]=o;this.i=0,this.j=0},e.prototype.next=function(){var t;return this.i=this.i+1&255,this.j=this.j+this.S[this.i]&255,t=this.S[this.i],this.S[this.i]=this.S[this.j],this.S[this.j]=t,this.S[t+this.S[this.i]&255]},e}(),__,zu,Ep=null;if(Ep==null){Ep=[],zu=0;var E_=void 0;if(typeof window<"u"&&window.crypto&&window.crypto.getRandomValues){var iP=new Uint32Array(256);for(window.crypto.getRandomValues(iP),E_=0;E_<iP.length;++E_)Ep[zu++]=255&iP[E_]}var aP=0,C_=function(e){if((aP=aP||0)>=256||zu>=256)window.removeEventListener?window.removeEventListener("mousemove",C_,!1):window.detachEvent&&window.detachEvent("onmousemove",C_);else try{var t=e.x+e.y;Ep[zu++]=255&t,aP+=1}catch{}};typeof window<"u"&&(window.addEventListener?window.addEventListener("mousemove",C_,!1):window.attachEvent&&window.attachEvent("onmousemove",C_))}function LYe(){if(__==null){for(__=new PYe;zu<256;){var e=Math.floor(65536*Math.random());Ep[zu++]=255&e}for(__.init(Ep),zu=0;zu<Ep.length;++zu)Ep[zu]=0;zu=0}return __.next()}var lP=function(){function e(){}return e.prototype.nextBytes=function(t){for(var n=0;n<t.length;++n)t[n]=LYe()},e}(),jYe=function(){function e(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}return e.prototype.doPublic=function(t){return t.modPowInt(this.e,this.n)},e.prototype.doPrivate=function(t){if(this.p==null||this.q==null)return t.modPow(this.d,this.n);for(var n=t.mod(this.p).modPow(this.dmp1,this.p),r=t.mod(this.q).modPow(this.dmq1,this.q);n.compareTo(r)<0;)n=n.add(this.p);return n.subtract(r).multiply(this.coeff).mod(this.p).multiply(this.q).add(r)},e.prototype.setPublic=function(t,n){t!=null&&n!=null&&t.length>0&&n.length>0?(this.n=Ho(t,16),this.e=parseInt(n,16)):console.error("Invalid RSA public key")},e.prototype.encrypt=function(t){var n=this.n.bitLength()+7>>3,r=function(s,u){if(u<s.length+11)return console.error("Message too long for RSA"),null;for(var c=[],d=s.length-1;d>=0&&u>0;){var f=s.charCodeAt(d--);f<128?c[--u]=f:f>127&&f<2048?(c[--u]=63&f|128,c[--u]=f>>6|192):(c[--u]=63&f|128,c[--u]=f>>6&63|128,c[--u]=f>>12|224)}c[--u]=0;for(var p=new lP,m=[];u>2;){for(m[0]=0;m[0]==0;)p.nextBytes(m);c[--u]=m[0]}return c[--u]=2,c[--u]=0,new ar(c)}(t,n);if(r==null)return null;var o=this.doPublic(r);if(o==null)return null;for(var i=o.toString(16),a=i.length,l=0;l<2*n-a;l++)i="0"+i;return i},e.prototype.setPrivate=function(t,n,r){t!=null&&n!=null&&t.length>0&&n.length>0?(this.n=Ho(t,16),this.e=parseInt(n,16),this.d=Ho(r,16)):console.error("Invalid RSA private key")},e.prototype.setPrivateEx=function(t,n,r,o,i,a,l,s){t!=null&&n!=null&&t.length>0&&n.length>0?(this.n=Ho(t,16),this.e=parseInt(n,16),this.d=Ho(r,16),this.p=Ho(o,16),this.q=Ho(i,16),this.dmp1=Ho(a,16),this.dmq1=Ho(l,16),this.coeff=Ho(s,16)):console.error("Invalid RSA private key")},e.prototype.generate=function(t,n){var r=new lP,o=t>>1;this.e=parseInt(n,16);for(var i=new ar(n,16);;){for(;this.p=new ar(t-o,1,r),this.p.subtract(ar.ONE).gcd(i).compareTo(ar.ONE)!=0||!this.p.isProbablePrime(10););for(;this.q=new ar(o,1,r),this.q.subtract(ar.ONE).gcd(i).compareTo(ar.ONE)!=0||!this.q.isProbablePrime(10););if(this.p.compareTo(this.q)<=0){var a=this.p;this.p=this.q,this.q=a}var l=this.p.subtract(ar.ONE),s=this.q.subtract(ar.ONE),u=l.multiply(s);if(u.gcd(i).compareTo(ar.ONE)==0){this.n=this.p.multiply(this.q),this.d=i.modInverse(u),this.dmp1=this.d.mod(l),this.dmq1=this.d.mod(s),this.coeff=this.q.modInverse(this.p);break}}},e.prototype.decrypt=function(t){var n=Ho(t,16),r=this.doPrivate(n);return r==null?null:function(o,i){for(var a=o.toByteArray(),l=0;l<a.length&&a[l]==0;)++l;if(a.length-l!=i-1||a[l]!=2)return null;for(++l;a[l]!=0;)if(++l>=a.length)return null;for(var s="";++l<a.length;){var u=255&a[l];u<128?s+=String.fromCharCode(u):u>191&&u<224?(s+=String.fromCharCode((31&u)<<6|63&a[l+1]),++l):(s+=String.fromCharCode((15&u)<<12|(63&a[l+1])<<6|63&a[l+2]),l+=2)}return s}(r,this.n.bitLength()+7>>3)},e.prototype.generateAsync=function(t,n,r){var o=new lP,i=t>>1;this.e=parseInt(n,16);var a=new ar(n,16),l=this,s=function(){var u=function(){if(l.p.compareTo(l.q)<=0){var f=l.p;l.p=l.q,l.q=f}var p=l.p.subtract(ar.ONE),m=l.q.subtract(ar.ONE),v=p.multiply(m);v.gcd(a).compareTo(ar.ONE)==0?(l.n=l.p.multiply(l.q),l.d=a.modInverse(v),l.dmp1=l.d.mod(p),l.dmq1=l.d.mod(m),l.coeff=l.q.modInverse(l.p),setTimeout(function(){r()},0)):setTimeout(s,0)},c=function(){l.q=yr(),l.q.fromNumberAsync(i,1,o,function(){l.q.subtract(ar.ONE).gcda(a,function(f){f.compareTo(ar.ONE)==0&&l.q.isProbablePrime(10)?setTimeout(u,0):setTimeout(c,0)})})},d=function(){l.p=yr(),l.p.fromNumberAsync(t-i,1,o,function(){l.p.subtract(ar.ONE).gcda(a,function(f){f.compareTo(ar.ONE)==0&&l.p.isProbablePrime(10)?setTimeout(c,0):setTimeout(d,0)})})};setTimeout(d,0)};setTimeout(s,0)},e.prototype.sign=function(t,n,r){var o=function(s){return S_[s]||""}(r),i=function(s,u){if(u<s.length+22)return console.error("Message too long for RSA"),null;for(var c=u-s.length-6,d="",f=0;f<c;f+=2)d+="ff";return Ho("0001"+d+"00"+s,16)}(o+n(t).toString(),this.n.bitLength()/4);if(i==null)return null;var a=this.doPrivate(i);if(a==null)return null;var l=a.toString(16);return 1&l.length?"0"+l:l},e.prototype.verify=function(t,n,r){var o=Ho(n,16),i=this.doPublic(o);return i==null?null:function(a){for(var l in S_)if(S_.hasOwnProperty(l)){var s=S_[l],u=s.length;if(a.substr(0,u)==s)return a.substr(u)}return a}(i.toString(16).replace(/^1f+00/,""))==r(t).toString()},e}(),S_={md2:"3020300c06082a864886f70d020205000410",md5:"3020300c06082a864886f70d020505000410",sha1:"3021300906052b0e03021a05000414",sha224:"302d300d06096086480165030402040500041c",sha256:"3031300d060960864801650304020105000420",sha384:"3041300d060960864801650304020205000430",sha512:"3051300d060960864801650304020305000440",ripemd160:"3021300906052b2403020105000414"},ei={};ei.lang={extend:function(e,t,n){if(!t||!e)throw new Error("YAHOO.lang.extend failed, please check that all dependencies are included.");var r=function(){};if(r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e,e.superclass=t.prototype,t.prototype.constructor==Object.prototype.constructor&&(t.prototype.constructor=t),n){var o;for(o in n)e.prototype[o]=n[o];var i=function(){},a=["toString","valueOf"];try{/MSIE/.test(navigator.userAgent)&&(i=function(l,s){for(o=0;o<a.length;o+=1){var u=a[o],c=s[u];typeof c=="function"&&c!=Object.prototype[u]&&(l[u]=c)}})}catch{}i(e.prototype,n)}}};var wt={};wt.asn1!==void 0&&wt.asn1||(wt.asn1={}),wt.asn1.ASN1Util=new function(){this.integerToByteHex=function(e){var t=e.toString(16);return t.length%2==1&&(t="0"+t),t},this.bigIntToMinTwosComplementsHex=function(e){var t=e.toString(16);if(t.substr(0,1)!="-")t.length%2==1?t="0"+t:t.match(/^[0-7]/)||(t="00"+t);else{var n=t.substr(1).length;n%2==1?n+=1:t.match(/^[0-7]/)||(n+=2);for(var r="",o=0;o<n;o++)r+="f";t=new ar(r,16).xor(e).add(ar.ONE).toString(16).replace(/^-/,"")}return t},this.getPEMStringFromHex=function(e,t){return hextopem(e,t)},this.newObject=function(e){var t=wt.asn1,n=t.DERBoolean,r=t.DERInteger,o=t.DERBitString,i=t.DEROctetString,a=t.DERNull,l=t.DERObjectIdentifier,s=t.DEREnumerated,u=t.DERUTF8String,c=t.DERNumericString,d=t.DERPrintableString,f=t.DERTeletexString,p=t.DERIA5String,m=t.DERUTCTime,v=t.DERGeneralizedTime,g=t.DERSequence,b=t.DERSet,y=t.DERTaggedObject,w=t.ASN1Util.newObject,x=Object.keys(e);if(x.length!=1)throw"key of param shall be only one.";var _=x[0];if(":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:".indexOf(":"+_+":")==-1)throw"undefined key: "+_;if(_=="bool")return new n(e[_]);if(_=="int")return new r(e[_]);if(_=="bitstr")return new o(e[_]);if(_=="octstr")return new i(e[_]);if(_=="null")return new a(e[_]);if(_=="oid")return new l(e[_]);if(_=="enum")return new s(e[_]);if(_=="utf8str")return new u(e[_]);if(_=="numstr")return new c(e[_]);if(_=="prnstr")return new d(e[_]);if(_=="telstr")return new f(e[_]);if(_=="ia5str")return new p(e[_]);if(_=="utctime")return new m(e[_]);if(_=="gentime")return new v(e[_]);if(_=="seq"){for(var E=e[_],C=[],T=0;T<E.length;T++){var k=w(E[T]);C.push(k)}return new g({array:C})}if(_=="set"){for(E=e[_],C=[],T=0;T<E.length;T++)k=w(E[T]),C.push(k);return new b({array:C})}if(_=="tag"){var I=e[_];if(Object.prototype.toString.call(I)==="[object Array]"&&I.length==3){var O=w(I[2]);return new y({tag:I[0],explicit:I[1],obj:O})}var F={};if(I.explicit!==void 0&&(F.explicit=I.explicit),I.tag!==void 0&&(F.tag=I.tag),I.obj===void 0)throw"obj shall be specified for 'tag'.";return F.obj=w(I.obj),new y(F)}},this.jsonToASN1HEX=function(e){return this.newObject(e).getEncodedHex()}},wt.asn1.ASN1Util.oidHexToInt=function(e){for(var t="",n=parseInt(e.substr(0,2),16),r=(t=Math.floor(n/40)+"."+n%40,""),o=2;o<e.length;o+=2){var i=("00000000"+parseInt(e.substr(o,2),16).toString(2)).slice(-8);r+=i.substr(1,7),i.substr(0,1)=="0"&&(t=t+"."+new ar(r,2).toString(10),r="")}return t},wt.asn1.ASN1Util.oidIntToHex=function(e){var t=function(l){var s=l.toString(16);return s.length==1&&(s="0"+s),s},n=function(l){var s="",u=new ar(l,10).toString(2),c=7-u.length%7;c==7&&(c=0);for(var d="",f=0;f<c;f++)d+="0";for(u=d+u,f=0;f<u.length-1;f+=7){var p=u.substr(f,7);f!=u.length-7&&(p="1"+p),s+=t(parseInt(p,2))}return s};if(!e.match(/^[0-9.]+$/))throw"malformed oid string: "+e;var r="",o=e.split("."),i=40*parseInt(o[0])+parseInt(o[1]);r+=t(i),o.splice(0,2);for(var a=0;a<o.length;a++)r+=n(o[a]);return r},wt.asn1.ASN1Object=function(){this.getLengthHexFromValue=function(){if(this.hV===void 0||this.hV==null)throw"this.hV is null or undefined.";if(this.hV.length%2==1)throw"value hex must be even length: n=0,v="+this.hV;var e=this.hV.length/2,t=e.toString(16);if(t.length%2==1&&(t="0"+t),e<128)return t;var n=t.length/2;if(n>15)throw"ASN.1 length too long to represent by 8x: n = "+e.toString(16);return(128+n).toString(16)+t},this.getEncodedHex=function(){return(this.hTLV==null||this.isModified)&&(this.hV=this.getFreshValueHex(),this.hL=this.getLengthHexFromValue(),this.hTLV=this.hT+this.hL+this.hV,this.isModified=!1),this.hTLV},this.getValueHex=function(){return this.getEncodedHex(),this.hV},this.getFreshValueHex=function(){return""}},wt.asn1.DERAbstractString=function(e){wt.asn1.DERAbstractString.superclass.constructor.call(this),this.getString=function(){return this.s},this.setString=function(t){this.hTLV=null,this.isModified=!0,this.s=t,this.hV=stohex(this.s)},this.setStringHex=function(t){this.hTLV=null,this.isModified=!0,this.s=null,this.hV=t},this.getFreshValueHex=function(){return this.hV},e!==void 0&&(typeof e=="string"?this.setString(e):e.str!==void 0?this.setString(e.str):e.hex!==void 0&&this.setStringHex(e.hex))},ei.lang.extend(wt.asn1.DERAbstractString,wt.asn1.ASN1Object),wt.asn1.DERAbstractTime=function(e){wt.asn1.DERAbstractTime.superclass.constructor.call(this),this.localDateToUTC=function(t){return utc=t.getTime()+6e4*t.getTimezoneOffset(),new Date(utc)},this.formatDate=function(t,n,r){var o=this.zeroPadding,i=this.localDateToUTC(t),a=String(i.getFullYear());n=="utc"&&(a=a.substr(2,2));var l=a+o(String(i.getMonth()+1),2)+o(String(i.getDate()),2)+o(String(i.getHours()),2)+o(String(i.getMinutes()),2)+o(String(i.getSeconds()),2);if(r===!0){var s=i.getMilliseconds();if(s!=0){var u=o(String(s),3);l=l+"."+(u=u.replace(/[0]+$/,""))}}return l+"Z"},this.zeroPadding=function(t,n){return t.length>=n?t:new Array(n-t.length+1).join("0")+t},this.getString=function(){return this.s},this.setString=function(t){this.hTLV=null,this.isModified=!0,this.s=t,this.hV=stohex(t)},this.setByDateValue=function(t,n,r,o,i,a){var l=new Date(Date.UTC(t,n-1,r,o,i,a,0));this.setByDate(l)},this.getFreshValueHex=function(){return this.hV}},ei.lang.extend(wt.asn1.DERAbstractTime,wt.asn1.ASN1Object),wt.asn1.DERAbstractStructured=function(e){wt.asn1.DERAbstractString.superclass.constructor.call(this),this.setByASN1ObjectArray=function(t){this.hTLV=null,this.isModified=!0,this.asn1Array=t},this.appendASN1Object=function(t){this.hTLV=null,this.isModified=!0,this.asn1Array.push(t)},this.asn1Array=new Array,e!==void 0&&e.array!==void 0&&(this.asn1Array=e.array)},ei.lang.extend(wt.asn1.DERAbstractStructured,wt.asn1.ASN1Object),wt.asn1.DERBoolean=function(){wt.asn1.DERBoolean.superclass.constructor.call(this),this.hT="01",this.hTLV="0101ff"},ei.lang.extend(wt.asn1.DERBoolean,wt.asn1.ASN1Object),wt.asn1.DERInteger=function(e){wt.asn1.DERInteger.superclass.constructor.call(this),this.hT="02",this.setByBigInteger=function(t){this.hTLV=null,this.isModified=!0,this.hV=wt.asn1.ASN1Util.bigIntToMinTwosComplementsHex(t)},this.setByInteger=function(t){var n=new ar(String(t),10);this.setByBigInteger(n)},this.setValueHex=function(t){this.hV=t},this.getFreshValueHex=function(){return this.hV},e!==void 0&&(e.bigint!==void 0?this.setByBigInteger(e.bigint):e.int!==void 0?this.setByInteger(e.int):typeof e=="number"?this.setByInteger(e):e.hex!==void 0&&this.setValueHex(e.hex))},ei.lang.extend(wt.asn1.DERInteger,wt.asn1.ASN1Object),wt.asn1.DERBitString=function(e){if(e!==void 0&&e.obj!==void 0){var t=wt.asn1.ASN1Util.newObject(e.obj);e.hex="00"+t.getEncodedHex()}wt.asn1.DERBitString.superclass.constructor.call(this),this.hT="03",this.setHexValueIncludingUnusedBits=function(n){this.hTLV=null,this.isModified=!0,this.hV=n},this.setUnusedBitsAndHexValue=function(n,r){if(n<0||7<n)throw"unused bits shall be from 0 to 7: u = "+n;var o="0"+n;this.hTLV=null,this.isModified=!0,this.hV=o+r},this.setByBinaryString=function(n){var r=8-(n=n.replace(/0+$/,"")).length%8;r==8&&(r=0);for(var o=0;o<=r;o++)n+="0";var i="";for(o=0;o<n.length-1;o+=8){var a=n.substr(o,8),l=parseInt(a,2).toString(16);l.length==1&&(l="0"+l),i+=l}this.hTLV=null,this.isModified=!0,this.hV="0"+r+i},this.setByBooleanArray=function(n){for(var r="",o=0;o<n.length;o++)n[o]==1?r+="1":r+="0";this.setByBinaryString(r)},this.newFalseArray=function(n){for(var r=new Array(n),o=0;o<n;o++)r[o]=!1;return r},this.getFreshValueHex=function(){return this.hV},e!==void 0&&(typeof e=="string"&&e.toLowerCase().match(/^[0-9a-f]+$/)?this.setHexValueIncludingUnusedBits(e):e.hex!==void 0?this.setHexValueIncludingUnusedBits(e.hex):e.bin!==void 0?this.setByBinaryString(e.bin):e.array!==void 0&&this.setByBooleanArray(e.array))},ei.lang.extend(wt.asn1.DERBitString,wt.asn1.ASN1Object),wt.asn1.DEROctetString=function(e){if(e!==void 0&&e.obj!==void 0){var t=wt.asn1.ASN1Util.newObject(e.obj);e.hex=t.getEncodedHex()}wt.asn1.DEROctetString.superclass.constructor.call(this,e),this.hT="04"},ei.lang.extend(wt.asn1.DEROctetString,wt.asn1.DERAbstractString),wt.asn1.DERNull=function(){wt.asn1.DERNull.superclass.constructor.call(this),this.hT="05",this.hTLV="0500"},ei.lang.extend(wt.asn1.DERNull,wt.asn1.ASN1Object),wt.asn1.DERObjectIdentifier=function(e){var t=function(r){var o=r.toString(16);return o.length==1&&(o="0"+o),o},n=function(r){var o="",i=new ar(r,10).toString(2),a=7-i.length%7;a==7&&(a=0);for(var l="",s=0;s<a;s++)l+="0";for(i=l+i,s=0;s<i.length-1;s+=7){var u=i.substr(s,7);s!=i.length-7&&(u="1"+u),o+=t(parseInt(u,2))}return o};wt.asn1.DERObjectIdentifier.superclass.constructor.call(this),this.hT="06",this.setValueHex=function(r){this.hTLV=null,this.isModified=!0,this.s=null,this.hV=r},this.setValueOidString=function(r){if(!r.match(/^[0-9.]+$/))throw"malformed oid string: "+r;var o="",i=r.split("."),a=40*parseInt(i[0])+parseInt(i[1]);o+=t(a),i.splice(0,2);for(var l=0;l<i.length;l++)o+=n(i[l]);this.hTLV=null,this.isModified=!0,this.s=null,this.hV=o},this.setValueName=function(r){var o=wt.asn1.x509.OID.name2oid(r);if(o==="")throw"DERObjectIdentifier oidName undefined: "+r;this.setValueOidString(o)},this.getFreshValueHex=function(){return this.hV},e!==void 0&&(typeof e=="string"?e.match(/^[0-2].[0-9.]+$/)?this.setValueOidString(e):this.setValueName(e):e.oid!==void 0?this.setValueOidString(e.oid):e.hex!==void 0?this.setValueHex(e.hex):e.name!==void 0&&this.setValueName(e.name))},ei.lang.extend(wt.asn1.DERObjectIdentifier,wt.asn1.ASN1Object),wt.asn1.DEREnumerated=function(e){wt.asn1.DEREnumerated.superclass.constructor.call(this),this.hT="0a",this.setByBigInteger=function(t){this.hTLV=null,this.isModified=!0,this.hV=wt.asn1.ASN1Util.bigIntToMinTwosComplementsHex(t)},this.setByInteger=function(t){var n=new ar(String(t),10);this.setByBigInteger(n)},this.setValueHex=function(t){this.hV=t},this.getFreshValueHex=function(){return this.hV},e!==void 0&&(e.int!==void 0?this.setByInteger(e.int):typeof e=="number"?this.setByInteger(e):e.hex!==void 0&&this.setValueHex(e.hex))},ei.lang.extend(wt.asn1.DEREnumerated,wt.asn1.ASN1Object),wt.asn1.DERUTF8String=function(e){wt.asn1.DERUTF8String.superclass.constructor.call(this,e),this.hT="0c"},ei.lang.extend(wt.asn1.DERUTF8String,wt.asn1.DERAbstractString),wt.asn1.DERNumericString=function(e){wt.asn1.DERNumericString.superclass.constructor.call(this,e),this.hT="12"},ei.lang.extend(wt.asn1.DERNumericString,wt.asn1.DERAbstractString),wt.asn1.DERPrintableString=function(e){wt.asn1.DERPrintableString.superclass.constructor.call(this,e),this.hT="13"},ei.lang.extend(wt.asn1.DERPrintableString,wt.asn1.DERAbstractString),wt.asn1.DERTeletexString=function(e){wt.asn1.DERTeletexString.superclass.constructor.call(this,e),this.hT="14"},ei.lang.extend(wt.asn1.DERTeletexString,wt.asn1.DERAbstractString),wt.asn1.DERIA5String=function(e){wt.asn1.DERIA5String.superclass.constructor.call(this,e),this.hT="16"},ei.lang.extend(wt.asn1.DERIA5String,wt.asn1.DERAbstractString),wt.asn1.DERUTCTime=function(e){wt.asn1.DERUTCTime.superclass.constructor.call(this,e),this.hT="17",this.setByDate=function(t){this.hTLV=null,this.isModified=!0,this.date=t,this.s=this.formatDate(this.date,"utc"),this.hV=stohex(this.s)},this.getFreshValueHex=function(){return this.date===void 0&&this.s===void 0&&(this.date=new Date,this.s=this.formatDate(this.date,"utc"),this.hV=stohex(this.s)),this.hV},e!==void 0&&(e.str!==void 0?this.setString(e.str):typeof e=="string"&&e.match(/^[0-9]{12}Z$/)?this.setString(e):e.hex!==void 0?this.setStringHex(e.hex):e.date!==void 0&&this.setByDate(e.date))},ei.lang.extend(wt.asn1.DERUTCTime,wt.asn1.DERAbstractTime),wt.asn1.DERGeneralizedTime=function(e){wt.asn1.DERGeneralizedTime.superclass.constructor.call(this,e),this.hT="18",this.withMillis=!1,this.setByDate=function(t){this.hTLV=null,this.isModified=!0,this.date=t,this.s=this.formatDate(this.date,"gen",this.withMillis),this.hV=stohex(this.s)},this.getFreshValueHex=function(){return this.date===void 0&&this.s===void 0&&(this.date=new Date,this.s=this.formatDate(this.date,"gen",this.withMillis),this.hV=stohex(this.s)),this.hV},e!==void 0&&(e.str!==void 0?this.setString(e.str):typeof e=="string"&&e.match(/^[0-9]{14}Z$/)?this.setString(e):e.hex!==void 0?this.setStringHex(e.hex):e.date!==void 0&&this.setByDate(e.date),e.millis===!0&&(this.withMillis=!0))},ei.lang.extend(wt.asn1.DERGeneralizedTime,wt.asn1.DERAbstractTime),wt.asn1.DERSequence=function(e){wt.asn1.DERSequence.superclass.constructor.call(this,e),this.hT="30",this.getFreshValueHex=function(){for(var t="",n=0;n<this.asn1Array.length;n++)t+=this.asn1Array[n].getEncodedHex();return this.hV=t,this.hV}},ei.lang.extend(wt.asn1.DERSequence,wt.asn1.DERAbstractStructured),wt.asn1.DERSet=function(e){wt.asn1.DERSet.superclass.constructor.call(this,e),this.hT="31",this.sortFlag=!0,this.getFreshValueHex=function(){for(var t=new Array,n=0;n<this.asn1Array.length;n++){var r=this.asn1Array[n];t.push(r.getEncodedHex())}return this.sortFlag==1&&t.sort(),this.hV=t.join(""),this.hV},e!==void 0&&e.sortflag!==void 0&&e.sortflag==0&&(this.sortFlag=!1)},ei.lang.extend(wt.asn1.DERSet,wt.asn1.DERAbstractStructured),wt.asn1.DERTaggedObject=function(e){wt.asn1.DERTaggedObject.superclass.constructor.call(this),this.hT="a0",this.hV="",this.isExplicit=!0,this.asn1Object=null,this.setASN1Object=function(t,n,r){this.hT=n,this.isExplicit=t,this.asn1Object=r,this.isExplicit?(this.hV=this.asn1Object.getEncodedHex(),this.hTLV=null,this.isModified=!0):(this.hV=null,this.hTLV=r.getEncodedHex(),this.hTLV=this.hTLV.replace(/^../,n),this.isModified=!1)},this.getFreshValueHex=function(){return this.hV},e!==void 0&&(e.tag!==void 0&&(this.hT=e.tag),e.explicit!==void 0&&(this.isExplicit=e.explicit),e.obj!==void 0&&(this.asn1Object=e.obj,this.setASN1Object(this.isExplicit,this.hT,this.asn1Object)))},ei.lang.extend(wt.asn1.DERTaggedObject,wt.asn1.ASN1Object);var k_,sP,VYe=(k_=function(e,t){return k_=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(n[o]=r[o])},k_(e,t)},function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}k_(e,t),e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}),c0e=function(e){function t(n){var r=e.call(this)||this;return n&&(typeof n=="string"?r.parseKey(n):(t.hasPrivateKeyProperty(n)||t.hasPublicKeyProperty(n))&&r.parsePropertiesFrom(n)),r}return VYe(t,e),t.prototype.parseKey=function(n){try{var r=0,o=0,i=/^\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\s*)+$/.test(n)?TYe(n):rP.unarmor(n),a=FYe.decode(i);if(a.sub.length===3&&(a=a.sub[2].sub[0]),a.sub.length===9){r=a.sub[1].getHexStringValue(),this.n=Ho(r,16),o=a.sub[2].getHexStringValue(),this.e=parseInt(o,16);var l=a.sub[3].getHexStringValue();this.d=Ho(l,16);var s=a.sub[4].getHexStringValue();this.p=Ho(s,16);var u=a.sub[5].getHexStringValue();this.q=Ho(u,16);var c=a.sub[6].getHexStringValue();this.dmp1=Ho(c,16);var d=a.sub[7].getHexStringValue();this.dmq1=Ho(d,16);var f=a.sub[8].getHexStringValue();this.coeff=Ho(f,16)}else{if(a.sub.length!==2)return!1;if(a.sub[0].sub){var p=a.sub[1].sub[0];r=p.sub[0].getHexStringValue(),this.n=Ho(r,16),o=p.sub[1].getHexStringValue(),this.e=parseInt(o,16)}else r=a.sub[0].getHexStringValue(),this.n=Ho(r,16),o=a.sub[1].getHexStringValue(),this.e=parseInt(o,16)}return!0}catch{return!1}},t.prototype.getPrivateBaseKey=function(){var n={array:[new wt.asn1.DERInteger({int:0}),new wt.asn1.DERInteger({bigint:this.n}),new wt.asn1.DERInteger({int:this.e}),new wt.asn1.DERInteger({bigint:this.d}),new wt.asn1.DERInteger({bigint:this.p}),new wt.asn1.DERInteger({bigint:this.q}),new wt.asn1.DERInteger({bigint:this.dmp1}),new wt.asn1.DERInteger({bigint:this.dmq1}),new wt.asn1.DERInteger({bigint:this.coeff})]};return new wt.asn1.DERSequence(n).getEncodedHex()},t.prototype.getPrivateBaseKeyB64=function(){return A_(this.getPrivateBaseKey())},t.prototype.getPublicBaseKey=function(){var n=new wt.asn1.DERSequence({array:[new wt.asn1.DERObjectIdentifier({oid:"1.2.840.113549.1.1.1"}),new wt.asn1.DERNull]}),r=new wt.asn1.DERSequence({array:[new wt.asn1.DERInteger({bigint:this.n}),new wt.asn1.DERInteger({int:this.e})]}),o=new wt.asn1.DERBitString({hex:"00"+r.getEncodedHex()});return new wt.asn1.DERSequence({array:[n,o]}).getEncodedHex()},t.prototype.getPublicBaseKeyB64=function(){return A_(this.getPublicBaseKey())},t.wordwrap=function(n,r){if(!n)return n;var o="(.{1,"+(r=r||64)+`})( +|$
| ?)|(.{1,`+r+"})";return n.match(RegExp(o,"g")).join(`
| `)},t.prototype.getPrivateKey=function(){var n=`-----BEGIN RSA PRIVATE KEY-----
| `;return n+=t.wordwrap(this.getPrivateBaseKeyB64())+`
| `,n+="-----END RSA PRIVATE KEY-----"},t.prototype.getPublicKey=function(){var n=`-----BEGIN PUBLIC KEY-----
| `;return n+=t.wordwrap(this.getPublicBaseKeyB64())+`
| `,n+="-----END PUBLIC KEY-----"},t.hasPublicKeyProperty=function(n){return(n=n||{}).hasOwnProperty("n")&&n.hasOwnProperty("e")},t.hasPrivateKeyProperty=function(n){return(n=n||{}).hasOwnProperty("n")&&n.hasOwnProperty("e")&&n.hasOwnProperty("d")&&n.hasOwnProperty("p")&&n.hasOwnProperty("q")&&n.hasOwnProperty("dmp1")&&n.hasOwnProperty("dmq1")&&n.hasOwnProperty("coeff")},t.prototype.parsePropertiesFrom=function(n){this.n=n.n,this.e=n.e,n.hasOwnProperty("d")&&(this.d=n.d,this.p=n.p,this.q=n.q,this.dmp1=n.dmp1,this.dmq1=n.dmq1,this.coeff=n.coeff)},t}(jYe),zYe=typeof process<"u"?(sP={})===null||sP===void 0?void 0:sP.npm_package_version:void 0,d0e=function(){function e(t){t===void 0&&(t={}),t=t||{},this.default_key_size=t.default_key_size?parseInt(t.default_key_size,10):1024,this.default_public_exponent=t.default_public_exponent||"010001",this.log=t.log||!1,this.key=null}return e.prototype.setKey=function(t){this.log&&this.key&&console.warn("A key was already set, overriding existing."),this.key=new c0e(t)},e.prototype.setPrivateKey=function(t){this.setKey(t)},e.prototype.setPublicKey=function(t){this.setKey(t)},e.prototype.decrypt=function(t){try{return this.getKey().decrypt(o0e(t))}catch{return!1}},e.prototype.encrypt=function(t){try{return A_(this.getKey().encrypt(t))}catch{return!1}},e.prototype.sign=function(t,n,r){try{return A_(this.getKey().sign(t,n,r))}catch{return!1}},e.prototype.verify=function(t,n,r){try{return this.getKey().verify(t,o0e(n),r)}catch{return!1}},e.prototype.getKey=function(t){if(!this.key){if(this.key=new c0e,t&&{}.toString.call(t)==="[object Function]")return void this.key.generateAsync(this.default_key_size,this.default_public_exponent,t);this.key.generate(this.default_key_size,this.default_public_exponent)}return this.key},e.prototype.getPrivateKey=function(){return this.getKey().getPrivateKey()},e.prototype.getPrivateKeyB64=function(){return this.getKey().getPrivateBaseKeyB64()},e.prototype.getPublicKey=function(){return this.getKey().getPublicKey()},e.prototype.getPublicKeyB64=function(){return this.getKey().getPublicBaseKeyB64()},e.version=zYe,e}();let Pl,H4,D_,uP,cP,k1;({wsCache:Pl}=ku()),H4="ACCESS_TOKEN",D_="REFRESH_TOKEN",Cd=()=>Pl.get(H4)?Pl.get(H4):Pl.get("ACCESS_TOKEN"),XO=()=>Pl.get(D_),mQ=e=>{Pl.set(D_,e.refreshToken),Pl.set(H4,e.accessToken)},uP=()=>{Pl.delete(H4),Pl.delete(D_)},WOe=()=>{const e=Pl.get(Nr.LoginForm);return e&&(e.password=(t=>{const n=new d0e;return n.setPrivateKey(`MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY
| 7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN
| PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA
| kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow
| cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv
| DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh
| YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3
| UP8iWi1Qw0Y=`),n.decrypt(t)})(e.password)),e},QDe=e=>{e.password=(t=>{const n=new d0e;return n.setPublicKey(`MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH
| nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==`),n.encrypt(t)})(e.password),Pl.set(Nr.LoginForm,e,{exp:2592e3})},JDe=()=>{Pl.delete(Nr.LoginForm)},_b=()=>Pl.get(Nr.TenantId),eOe=e=>{Pl.set(Nr.TenantId,e)},cP={401:"\u8BA4\u8BC1\u5931\u8D25\uFF0C\u65E0\u6CD5\u8BBF\u95EE\u7CFB\u7EDF\u8D44\u6E90",403:"\u5F53\u524D\u64CD\u4F5C\u6CA1\u6709\u6743\u9650",404:"\u8BBF\u95EE\u8D44\u6E90\u4E0D\u5B58\u5728",default:"\u7CFB\u7EDF\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u53CD\u9988\u7ED9\u7BA1\u7406\u5458"},k1=typeof document<"u";const qr=Object.assign;function dP(e,t){const n={};for(const r in t){const o=t[r];n[r]=Hu(o)?o.map(e):e(o)}return n}const $4=()=>{},Hu=Array.isArray,f0e=/#/g,HYe=/&/g,$Ye=/\//g,UYe=/=/g,WYe=/\?/g,p0e=/\+/g,GYe=/%5B/g,qYe=/%5D/g,h0e=/%5E/g,KYe=/%60/g,v0e=/%7B/g,YYe=/%7C/g,m0e=/%7D/g,XYe=/%20/g;function fP(e){return encodeURI(""+e).replace(YYe,"|").replace(GYe,"[").replace(qYe,"]")}function QYe(e){return fP(e).replace(v0e,"{").replace(m0e,"}").replace(h0e,"^")}function pP(e){return fP(e).replace(p0e,"%2B").replace(XYe,"+").replace(f0e,"%23").replace(HYe,"%26").replace(KYe,"`").replace(v0e,"{").replace(m0e,"}").replace(h0e,"^")}function JYe(e){return pP(e).replace(UYe,"%3D")}function ZYe(e){return e==null?"":function(t){return fP(t).replace(f0e,"%23").replace(WYe,"%3F")}(e).replace($Ye,"%2F")}function U4(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const eXe=/\/$/,tXe=e=>e.replace(eXe,"");function hP(e,t,n="/"){let r,o={},i="",a="";const l=t.indexOf("#");let s=t.indexOf("?");return l<s&&l>=0&&(s=-1),s>-1&&(r=t.slice(0,s),i=t.slice(s+1,l>-1?l:t.length),o=e(i)),l>-1&&(r=r||t.slice(0,l),a=t.slice(l,t.length)),r=function(u,c){if(u.startsWith("/"))return u;if(!u)return c;const d=c.split("/"),f=u.split("/"),p=f[f.length-1];p!==".."&&p!=="."||f.push("");let m,v,g=d.length-1;for(m=0;m<f.length;m++)if(v=f[m],v!=="."){if(v!=="..")break;g>1&&g--}return d.slice(0,g).join("/")+"/"+f.slice(m).join("/")}(r??t,n),{fullPath:r+(i&&"?")+i+a,path:r,query:o,hash:U4(a)}}function g0e(e,t){return t&&e.toLowerCase().startsWith(t.toLowerCase())?e.slice(t.length)||"/":e}function Xg(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function y0e(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!nXe(e[n],t[n]))return!1;return!0}function nXe(e,t){return Hu(e)?b0e(e,t):Hu(t)?b0e(t,e):e===t}function b0e(e,t){return Hu(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}const Cp={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var W4,A0e,G4,vP;(A0e=W4||(W4={})).pop="pop",A0e.push="push",(vP=G4||(G4={})).back="back",vP.forward="forward",vP.unknown="";const rXe=/^[^#]+#/;function oXe(e,t){return e.replace(rXe,"#")+t}const O_=()=>({left:window.scrollX,top:window.scrollY});function iXe(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=function(i,a){const l=document.documentElement.getBoundingClientRect(),s=i.getBoundingClientRect();return{behavior:a.behavior,left:s.left-l.left-(a.left||0),top:s.top-l.top-(a.top||0)}}(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function w0e(e,t){return(history.state?history.state.position-t:-1)+e}const mP=new Map;let aXe=()=>location.protocol+"//"+location.host;function x0e(e,t){const{pathname:n,search:r,hash:o}=t,i=e.indexOf("#");if(i>-1){let a=o.includes(e.slice(i))?e.slice(i).length:1,l=o.slice(a);return l[0]!=="/"&&(l="/"+l),g0e(l,"")}return g0e(n,e)+r+o}function _0e(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?O_():null}}function E0e(e){const t=function(o){const{history:i,location:a}=window,l={value:x0e(o,a)},s={value:i.state};function u(c,d,f){const p=o.indexOf("#"),m=p>-1?(a.host&&document.querySelector("base")?o:o.slice(p))+c:aXe()+o+c;try{i[f?"replaceState":"pushState"](d,"",m),s.value=d}catch(v){console.error(v),a[f?"replace":"assign"](m)}}return s.value||u(l.value,{back:null,current:l.value,forward:null,position:i.length-1,replaced:!0,scroll:null},!0),{location:l,state:s,push:function(c,d){const f=qr({},s.value,i.state,{forward:c,scroll:O_()});u(f.current,f,!0),u(c,qr({},_0e(l.value,c,null),{position:f.position+1},d),!1),l.value=c},replace:function(c,d){u(c,qr({},i.state,_0e(s.value.back,c,s.value.forward,!0),d,{position:s.value.position}),!0),l.value=c}}}(e=function(o){if(!o)if(k1){const i=document.querySelector("base");o=(o=i&&i.getAttribute("href")||"/").replace(/^\w+:\/\/[^\/]+/,"")}else o="/";return o[0]!=="/"&&o[0]!=="#"&&(o="/"+o),tXe(o)}(e)),n=function(o,i,a,l){let s=[],u=[],c=null;const d=({state:p})=>{const m=x0e(o,location),v=a.value,g=i.value;let b=0;if(p){if(a.value=m,i.value=p,c&&c===v)return void(c=null);b=g?p.position-g.position:0}else l(m);s.forEach(y=>{y(a.value,v,{delta:b,type:W4.pop,direction:b?b>0?G4.forward:G4.back:G4.unknown})})};function f(){const{history:p}=window;p.state&&p.replaceState(qr({},p.state,{scroll:O_()}),"")}return window.addEventListener("popstate",d),window.addEventListener("beforeunload",f,{passive:!0}),{pauseListeners:function(){c=a.value},listen:function(p){s.push(p);const m=()=>{const v=s.indexOf(p);v>-1&&s.splice(v,1)};return u.push(m),m},destroy:function(){for(const p of u)p();u=[],window.removeEventListener("popstate",d),window.removeEventListener("beforeunload",f)}}}(e,t.state,t.location,t.replace),r=qr({location:"",base:e,go:function(o,i=!0){i||n.pauseListeners(),history.go(o)},createHref:oXe.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function C0e(e){return typeof e=="string"||typeof e=="symbol"}const S0e=Symbol("");var k0e,Qg;function Jg(e,t){return qr(new Error,{type:e,[S0e]:!0},t)}function Xd(e,t){return e instanceof Error&&S0e in e&&(t==null||!!(e.type&t))}(Qg=k0e||(k0e={}))[Qg.aborted=4]="aborted",Qg[Qg.cancelled=8]="cancelled",Qg[Qg.duplicated=16]="duplicated";const D0e="[^/]+?",lXe={sensitive:!1,strict:!1,start:!0,end:!0},sXe=/[.+*?^${}()[\]/\\]/g;function uXe(e,t){let n=0;for(;n<e.length&&n<t.length;){const r=t[n]-e[n];if(r)return r;n++}return e.length<t.length?e.length===1&&e[0]===80?-1:1:e.length>t.length?t.length===1&&t[0]===80?1:-1:0}function O0e(e,t){let n=0;const r=e.score,o=t.score;for(;n<r.length&&n<o.length;){const i=uXe(r[n],o[n]);if(i)return i;n++}if(Math.abs(o.length-r.length)===1){if(T0e(r))return 1;if(T0e(o))return-1}return o.length-r.length}function T0e(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const cXe={type:0,value:""},dXe=/[a-zA-Z0-9_]/;function fXe(e,t,n){const r=function(i,a){const l=qr({},lXe,a),s=[];let u=l.start?"^":"";const c=[];for(const f of i){const p=f.length?[]:[90];l.strict&&!f.length&&(u+="/");for(let m=0;m<f.length;m++){const v=f[m];let g=40+(l.sensitive?.25:0);if(v.type===0)m||(u+="/"),u+=v.value.replace(sXe,"\\$&"),g+=40;else if(v.type===1){const{value:b,repeatable:y,optional:w,regexp:x}=v;c.push({name:b,repeatable:y,optional:w});const _=x||D0e;if(_!==D0e){g+=10;try{new RegExp(`(${_})`)}catch(C){throw new Error(`Invalid custom RegExp for param "${b}" (${_}): `+C.message)}}let E=y?`((?:${_})(?:/(?:${_}))*)`:`(${_})`;m||(E=w&&f.length<2?`(?:/${E})`:"/"+E),w&&(E+="?"),u+=E,g+=20,w&&(g+=-8),y&&(g+=-20),_===".*"&&(g+=-50)}p.push(g)}s.push(p)}if(l.strict&&l.end){const f=s.length-1;s[f][s[f].length-1]+=.7000000000000001}l.strict||(u+="/?"),l.end?u+="$":l.strict&&(u+="(?:/|$)");const d=new RegExp(u,l.sensitive?"":"i");return{re:d,score:s,keys:c,parse:function(f){const p=f.match(d),m={};if(!p)return null;for(let v=1;v<p.length;v++){const g=p[v]||"",b=c[v-1];m[b.name]=g&&b.repeatable?g.split("/"):g}return m},stringify:function(f){let p="",m=!1;for(const v of i){m&&p.endsWith("/")||(p+="/"),m=!1;for(const g of v)if(g.type===0)p+=g.value;else if(g.type===1){const{value:b,repeatable:y,optional:w}=g,x=b in f?f[b]:"";if(Hu(x)&&!y)throw new Error(`Provided param "${b}" is an array but it is not repeatable (* or + modifiers)`);const _=Hu(x)?x.join("/"):x;if(!_){if(!w)throw new Error(`Missing required param "${b}"`);v.length<2&&(p.endsWith("/")?p=p.slice(0,-1):m=!0)}p+=_}}return p||"/"}}}(function(i){if(!i)return[[]];if(i==="/")return[[cXe]];if(!i.startsWith("/"))throw new Error(`Invalid path "${i}"`);function a(y){throw new Error(`ERR (${l})/"${m}": ${y}`)}let l=0,s=l;const u=[];let c;function d(){c&&u.push(c),c=[]}let f,p=0,m="",v="";function g(){m&&(l===0?c.push({type:0,value:m}):l===1||l===2||l===3?(c.length>1&&(f==="*"||f==="+")&&a(`A repeatable param (${m}) must be alone in its segment. eg: '/:ids+.`),c.push({type:1,value:m,regexp:v,repeatable:f==="*"||f==="+",optional:f==="*"||f==="?"})):a("Invalid state to consume buffer"),m="")}function b(){m+=f}for(;p<i.length;)if(f=i[p++],f!=="\\"||l===2)switch(l){case 0:f==="/"?(m&&g(),d()):f===":"?(g(),l=1):b();break;case 4:b(),l=s;break;case 1:f==="("?l=2:dXe.test(f)?b():(g(),l=0,f!=="*"&&f!=="?"&&f!=="+"&&p--);break;case 2:f===")"?v[v.length-1]=="\\"?v=v.slice(0,-1)+f:l=3:v+=f;break;case 3:g(),l=0,f!=="*"&&f!=="?"&&f!=="+"&&p--,v="";break;default:a("Unknown state")}else s=l,l=4;return l===2&&a(`Unfinished custom RegExp for param "${m}"`),g(),d(),u}(e.path),n),o=qr(r,{record:e,parent:t,children:[],alias:[]});return t&&!o.record.aliasOf==!t.record.aliasOf&&t.children.push(o),o}function pXe(e,t){const n=[],r=new Map;function o(l,s,u){const c=!u,d=function(g){return{path:g.path,redirect:g.redirect,name:g.name,meta:g.meta||{},aliasOf:void 0,beforeEnter:g.beforeEnter,props:hXe(g),children:g.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in g?g.components||null:g.component&&{default:g.component}}}(l);d.aliasOf=u&&u.record;const f=F0e(t,l),p=[d];if("alias"in l){const g=typeof l.alias=="string"?[l.alias]:l.alias;for(const b of g)p.push(qr({},d,{components:u?u.record.components:d.components,path:b,aliasOf:u?u.record:d}))}let m,v;for(const g of p){const{path:b}=g;if(s&&b[0]!=="/"){const y=s.record.path,w=y[y.length-1]==="/"?"":"/";g.path=s.record.path+(b&&w+b)}if(m=fXe(g,s,f),u?u.alias.push(m):(v=v||m,v!==m&&v.alias.push(m),c&&l.name&&!N0e(m)&&i(l.name)),R0e(m)&&a(m),d.children){const y=d.children;for(let w=0;w<y.length;w++)o(y[w],m,u&&u.children[w])}u=u||m}return v?()=>{i(v)}:$4}function i(l){if(C0e(l)){const s=r.get(l);s&&(r.delete(l),n.splice(n.indexOf(s),1),s.children.forEach(i),s.alias.forEach(i))}else{const s=n.indexOf(l);s>-1&&(n.splice(s,1),l.record.name&&r.delete(l.record.name),l.children.forEach(i),l.alias.forEach(i))}}function a(l){const s=function(u,c){let d=0,f=c.length;for(;d!==f;){const m=d+f>>1;O0e(u,c[m])<0?f=m:d=m+1}const p=function(m){let v=m;for(;v=v.parent;)if(R0e(v)&&O0e(m,v)===0)return v}(u);return p&&(f=c.lastIndexOf(p,f-1)),f}(l,n);n.splice(s,0,l),l.record.name&&!N0e(l)&&r.set(l.record.name,l)}return t=F0e({strict:!1,end:!0,sensitive:!1},t),e.forEach(l=>o(l)),{addRoute:o,resolve:function(l,s){let u,c,d,f={};if("name"in l&&l.name){if(u=r.get(l.name),!u)throw Jg(1,{location:l});d=u.record.name,f=qr(M0e(s.params,u.keys.filter(v=>!v.optional).concat(u.parent?u.parent.keys.filter(v=>v.optional):[]).map(v=>v.name)),l.params&&M0e(l.params,u.keys.map(v=>v.name))),c=u.stringify(f)}else if(l.path!=null)c=l.path,u=n.find(v=>v.re.test(c)),u&&(f=u.parse(c),d=u.record.name);else{if(u=s.name?r.get(s.name):n.find(v=>v.re.test(s.path)),!u)throw Jg(1,{location:l,currentLocation:s});d=u.record.name,f=qr({},s.params,l.params),c=u.stringify(f)}const p=[];let m=u;for(;m;)p.unshift(m.record),m=m.parent;return{name:d,path:c,params:f,matched:p,meta:vXe(p)}},removeRoute:i,clearRoutes:function(){n.length=0,r.clear()},getRoutes:function(){return n},getRecordMatcher:function(l){return r.get(l)}}}function M0e(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function hXe(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function N0e(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function vXe(e){return e.reduce((t,n)=>qr(t,n.meta),{})}function F0e(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function R0e({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function mXe(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;r<n.length;++r){const o=n[r].replace(p0e," "),i=o.indexOf("="),a=U4(i<0?o:o.slice(0,i)),l=i<0?null:U4(o.slice(i+1));if(a in t){let s=t[a];Hu(s)||(s=t[a]=[s]),s.push(l)}else t[a]=l}return t}function I0e(e){let t="";for(let n in e){const r=e[n];if(n=JYe(n),r==null){r!==void 0&&(t+=(t.length?"&":"")+n);continue}(Hu(r)?r.map(i=>i&&pP(i)):[r&&pP(r)]).forEach(i=>{i!==void 0&&(t+=(t.length?"&":"")+n,i!=null&&(t+="="+i))})}return t}function gXe(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=Hu(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const yXe=Symbol(""),B0e=Symbol(""),T_=Symbol(""),gP=Symbol(""),yP=Symbol("");function q4(){let e=[];return{add:function(t){return e.push(t),()=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)}},list:()=>e.slice(),reset:function(){e=[]}}}function Sp(e,t,n,r,o,i=a=>a()){const a=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((l,s)=>{const u=f=>{var p;f===!1?s(Jg(4,{from:n,to:t})):f instanceof Error?s(f):typeof(p=f)=="string"||p&&typeof p=="object"?s(Jg(2,{from:t,to:f})):(a&&r.enterCallbacks[o]===a&&typeof f=="function"&&a.push(f),l())},c=i(()=>e.call(r&&r.instances[o],t,n,u));let d=Promise.resolve(c);e.length<3&&(d=d.then(u)),d.catch(f=>s(f))})}function bP(e,t,n,r,o=i=>i()){const i=[];for(const l of e)for(const s in l.components){let u=l.components[s];if(t==="beforeRouteEnter"||l.instances[s])if(typeof(a=u)=="object"||"displayName"in a||"props"in a||"__vccOpts"in a){const c=(u.__vccOpts||u)[t];c&&i.push(Sp(c,n,r,l,s,o))}else{let c=u();i.push(()=>c.then(d=>{if(!d)return Promise.reject(new Error(`Couldn't resolve component "${s}" at "${l.path}"`));const f=(p=d).__esModule||p[Symbol.toStringTag]==="Module"?d.default:d;var p;l.components[s]=f;const m=(f.__vccOpts||f)[t];return m&&Sp(m,n,r,l,s,o)()}))}}var a;return i}function P0e(e){const t=Rt(T_),n=Rt(gP),r=ee(()=>{const l=M(e.to);return t.resolve(l)}),o=ee(()=>{const{matched:l}=r.value,{length:s}=l,u=l[s-1],c=n.matched;if(!u||!c.length)return-1;const d=c.findIndex(Xg.bind(null,u));if(d>-1)return d;const f=L0e(l[s-2]);return s>1&&L0e(u)===f&&c[c.length-1].path!==f?c.findIndex(Xg.bind(null,l[s-2])):d}),i=ee(()=>o.value>-1&&function(l,s){for(const u in s){const c=s[u],d=l[u];if(typeof c=="string"){if(c!==d)return!1}else if(!Hu(d)||d.length!==c.length||c.some((f,p)=>f!==d[p]))return!1}return!0}(n.params,r.value.params)),a=ee(()=>o.value>-1&&o.value===n.matched.length-1&&y0e(n.params,r.value.params));return{route:r,href:ee(()=>r.value.href),isActive:i,isExactActive:a,navigate:function(l={}){return function(s){if(!(s.metaKey||s.altKey||s.ctrlKey||s.shiftKey)&&!s.defaultPrevented&&!(s.button!==void 0&&s.button!==0)){if(s.currentTarget&&s.currentTarget.getAttribute){const u=s.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(u))return}return s.preventDefault&&s.preventDefault(),!0}}(l)?t[M(e.replace)?"replace":"push"](M(e.to)).catch($4):Promise.resolve()}}}const bXe=Te({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:P0e,setup(e,{slots:t}){const n=Qn(P0e(e)),{options:r}=Rt(T_),o=ee(()=>({[j0e(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[j0e(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&t.default(n);return e.custom?i:pn("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},i)}}});function L0e(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const j0e=(e,t,n)=>e??t??n,AXe=Te({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Rt(yP),o=ee(()=>e.route||r.value),i=Rt(B0e,0),a=ee(()=>{let u=M(i);const{matched:c}=o.value;let d;for(;(d=c[u])&&!d.components;)u++;return u}),l=ee(()=>o.value.matched[a.value]);qn(B0e,ee(()=>a.value+1)),qn(yXe,l),qn(yP,o);const s=de();return Je(()=>[s.value,l.value,e.name],([u,c,d],[f,p,m])=>{c&&(c.instances[d]=u,p&&p!==c&&u&&u===f&&(c.leaveGuards.size||(c.leaveGuards=p.leaveGuards),c.updateGuards.size||(c.updateGuards=p.updateGuards))),!u||!c||p&&Xg(c,p)&&f||(c.enterCallbacks[d]||[]).forEach(v=>v(u))},{flush:"post"}),()=>{const u=o.value,c=e.name,d=l.value,f=d&&d.components[c];if(!f)return V0e(n.default,{Component:f,route:u});const p=d.props[c],m=p?p===!0?u.params:typeof p=="function"?p(u):p:null,v=pn(f,qr({},m,t,{onVnodeUnmounted:g=>{g.component.isUnmounted&&(d.instances[c]=null)},ref:s}));return V0e(n.default,{Component:v,route:u})||v}}});function V0e(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const wXe=AXe;function z0e(e){const t=pXe(e.routes,e),n=e.parseQuery||mXe,r=e.stringifyQuery||I0e,o=e.history,i=q4(),a=q4(),l=q4(),s=Qo(Cp);let u=Cp;k1&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=dP.bind(null,z=>""+z),d=dP.bind(null,ZYe),f=dP.bind(null,U4);function p(z,$){if($=qr({},$||s.value),typeof z=="string"){const se=hP(n,z,$.path),le=t.resolve({path:se.path},$),J=o.createHref(se.fullPath);return qr(se,le,{params:f(le.params),hash:U4(se.hash),redirectedFrom:void 0,href:J})}let W;if(z.path!=null)W=qr({},z,{path:hP(n,z.path,$.path).path});else{const se=qr({},z.params);for(const le in se)se[le]==null&&delete se[le];W=qr({},z,{params:d(se)}),$.params=d($.params)}const K=t.resolve(W,$),X=z.hash||"";K.params=c(f(K.params));const te=function(se,le){const J=le.query?se(le.query):"";return le.path+(J&&"?")+J+(le.hash||"")}(r,qr({},z,{hash:QYe(X),path:K.path})),ne=o.createHref(te);return qr({fullPath:te,hash:X,query:r===I0e?gXe(z.query):z.query||{}},K,{redirectedFrom:void 0,href:ne})}function m(z){return typeof z=="string"?hP(n,z,s.value.path):qr({},z)}function v(z,$){if(u!==z)return Jg(8,{from:$,to:z})}function g(z){return y(z)}function b(z){const $=z.matched[z.matched.length-1];if($&&$.redirect){const{redirect:W}=$;let K=typeof W=="function"?W(z):W;return typeof K=="string"&&(K=K.includes("?")||K.includes("#")?K=m(K):{path:K},K.params={}),qr({query:z.query,hash:z.hash,params:K.path!=null?{}:z.params},K)}}function y(z,$){const W=u=p(z),K=s.value,X=z.state,te=z.force,ne=z.replace===!0,se=b(W);if(se)return y(qr(m(se),{state:typeof se=="object"?qr({},X,se.state):X,force:te,replace:ne}),$||W);const le=W;let J;return le.redirectedFrom=$,!te&&function(Z,ye,be){const ve=ye.matched.length-1,Ae=be.matched.length-1;return ve>-1&&ve===Ae&&Xg(ye.matched[ve],be.matched[Ae])&&y0e(ye.params,be.params)&&Z(ye.query)===Z(be.query)&&ye.hash===be.hash}(r,K,W)&&(J=Jg(16,{to:le,from:K}),P(K,K,!0,!1)),(J?Promise.resolve(J):_(le,K)).catch(Z=>Xd(Z)?Xd(Z,2)?Z:B(Z):N(Z,le,K)).then(Z=>{if(Z){if(Xd(Z,2))return y(qr({replace:ne},m(Z.to),{state:typeof Z.to=="object"?qr({},X,Z.to.state):X,force:te}),$||le)}else Z=C(le,K,!0,ne,X);return E(le,K,Z),Z})}function w(z,$){const W=v(z,$);return W?Promise.reject(W):Promise.resolve()}function x(z){const $=H.values().next().value;return $&&typeof $.runWithContext=="function"?$.runWithContext(z):z()}function _(z,$){let W;const[K,X,te]=function(se,le){const J=[],Z=[],ye=[],be=Math.max(le.matched.length,se.matched.length);for(let ve=0;ve<be;ve++){const Ae=le.matched[ve];Ae&&(se.matched.find(_e=>Xg(_e,Ae))?Z.push(Ae):J.push(Ae));const Ce=se.matched[ve];Ce&&(le.matched.find(_e=>Xg(_e,Ce))||ye.push(Ce))}return[J,Z,ye]}(z,$);W=bP(K.reverse(),"beforeRouteLeave",z,$);for(const se of K)se.leaveGuards.forEach(le=>{W.push(Sp(le,z,$))});const ne=w.bind(null,z,$);return W.push(ne),G(W).then(()=>{W=[];for(const se of i.list())W.push(Sp(se,z,$));return W.push(ne),G(W)}).then(()=>{W=bP(X,"beforeRouteUpdate",z,$);for(const se of X)se.updateGuards.forEach(le=>{W.push(Sp(le,z,$))});return W.push(ne),G(W)}).then(()=>{W=[];for(const se of te)if(se.beforeEnter)if(Hu(se.beforeEnter))for(const le of se.beforeEnter)W.push(Sp(le,z,$));else W.push(Sp(se.beforeEnter,z,$));return W.push(ne),G(W)}).then(()=>(z.matched.forEach(se=>se.enterCallbacks={}),W=bP(te,"beforeRouteEnter",z,$,x),W.push(ne),G(W))).then(()=>{W=[];for(const se of a.list())W.push(Sp(se,z,$));return W.push(ne),G(W)}).catch(se=>Xd(se,8)?se:Promise.reject(se))}function E(z,$,W){l.list().forEach(K=>x(()=>K(z,$,W)))}function C(z,$,W,K,X){const te=v(z,$);if(te)return te;const ne=$===Cp,se=k1?history.state:{};W&&(K||ne?o.replace(z.fullPath,qr({scroll:ne&&se&&se.scroll},X)):o.push(z.fullPath,X)),s.value=z,P(z,$,W,ne),B()}let T;function k(){T||(T=o.listen((z,$,W)=>{if(!U.listening)return;const K=p(z),X=b(K);if(X)return void y(qr(X,{replace:!0}),K).catch($4);u=K;const te=s.value;var ne,se;k1&&(ne=w0e(te.fullPath,W.delta),se=O_(),mP.set(ne,se)),_(K,te).catch(le=>Xd(le,12)?le:Xd(le,2)?(y(le.to,K).then(J=>{Xd(J,20)&&!W.delta&&W.type===W4.pop&&o.go(-1,!1)}).catch($4),Promise.reject()):(W.delta&&o.go(-W.delta,!1),N(le,K,te))).then(le=>{(le=le||C(K,te,!1))&&(W.delta&&!Xd(le,8)?o.go(-W.delta,!1):W.type===W4.pop&&Xd(le,20)&&o.go(-1,!1)),E(K,te,le)}).catch($4)}))}let I,O=q4(),F=q4();function N(z,$,W){B(z);const K=F.list();return K.length?K.forEach(X=>X(z,$,W)):console.error(z),Promise.reject(z)}function B(z){return I||(I=!z,k(),O.list().forEach(([$,W])=>z?W(z):$()),O.reset()),z}function P(z,$,W,K){const{scrollBehavior:X}=e;if(!k1||!X)return Promise.resolve();const te=!W&&function(ne){const se=mP.get(ne);return mP.delete(ne),se}(w0e(z.fullPath,0))||(K||!W)&&history.state&&history.state.scroll||null;return St().then(()=>X(z,$,te)).then(ne=>ne&&iXe(ne)).catch(ne=>N(ne,z,$))}const V=z=>o.go(z);let L;const H=new Set,U={currentRoute:s,listening:!0,addRoute:function(z,$){let W,K;return C0e(z)?(W=t.getRecordMatcher(z),K=$):K=z,t.addRoute(K,W)},removeRoute:function(z){const $=t.getRecordMatcher(z);$&&t.removeRoute($)},clearRoutes:t.clearRoutes,hasRoute:function(z){return!!t.getRecordMatcher(z)},getRoutes:function(){return t.getRoutes().map(z=>z.record)},resolve:p,options:e,push:g,replace:function(z){return g(qr(m(z),{replace:!0}))},go:V,back:()=>V(-1),forward:()=>V(1),beforeEach:i.add,beforeResolve:a.add,afterEach:l.add,onError:F.add,isReady:function(){return I&&s.value!==Cp?Promise.resolve():new Promise((z,$)=>{O.add([z,$])})},install(z){z.component("RouterLink",bXe),z.component("RouterView",wXe),z.config.globalProperties.$router=this,Object.defineProperty(z.config.globalProperties,"$route",{enumerable:!0,get:()=>M(s)}),k1&&!L&&s.value===Cp&&(L=!0,g(o.location).catch(K=>{}));const $={};for(const K in Cp)Object.defineProperty($,K,{get:()=>s.value[K],enumerable:!0});z.provide(T_,this),z.provide(gP,x7($)),z.provide(yP,s);const W=z.unmount;H.add(z),z.unmount=function(){H.delete(z),H.size<1&&(u=Cp,T&&T(),T=null,s.value=Cp,L=!1,I=!1),W()}}};function G(z){return z.reduce(($,W)=>$.then(()=>x(W)),Promise.resolve())}return U}aJ=function(){return Rt(T_)},PDe=function(e){return Rt(gP)};let Zg,$u,AP,wP,H0e,$0e,U0e,xP,M_,_P,e2,EP,W0e,CP,G0e,q0e,t2;Zg=Object.assign({"../views/Error/403.vue":()=>Ke(()=>import("./403-C8iCA59K.js"),__vite__mapDeps([0,1])),"../views/Error/404.vue":()=>Ke(()=>import("./404-BjPNd3kL.js"),__vite__mapDeps([2,1])),"../views/Error/500.vue":()=>Ke(()=>import("./500-DgM9xbBr.js"),__vite__mapDeps([3,1])),"../views/Home/Index.vue":()=>Ke(()=>import("./Index-QpCgKAgR.js"),__vite__mapDeps([])),"../views/Home/Index2.vue":()=>Ke(()=>import("./Index2-BhO9Jp95.js"),__vite__mapDeps([4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23])),"../views/Login/Login.vue":()=>Ke(()=>import("./Login-D9xrXs6a.js"),__vite__mapDeps([24,25,26,27,28,29,20,13,14,21,30,31,32,7,8,33,34,35,36,37,38,39,40,41,42,43,44,45,18,46,47,48,49,50])),"../views/Login/SocialLogin.vue":()=>Ke(()=>import("./SocialLogin-CcXhIKCR.js"),__vite__mapDeps([51,31,32,7,8,25,26,28,27,29,20,13,14,21,33,34,52])),"../views/Login/components/LoginForm.vue":()=>Ke(()=>import("./LoginForm-DqRfYWNS.js"),__vite__mapDeps([30,31,32,7,8,33,28,34,35])),"../views/Login/components/LoginFormTitle.vue":()=>Ke(()=>import("./LoginFormTitle-D_Pam66p.js"),__vite__mapDeps([53,33])),"../views/Login/components/MobileForm.vue":()=>Ke(()=>import("./MobileForm--BIF7efa.js"),__vite__mapDeps([36,7,8,28,33,34,37])),"../views/Login/components/QrCodeForm.vue":()=>Ke(()=>import("./QrCodeForm-BDA5Uy9t.js"),__vite__mapDeps([54,46,7,8,47,48,25,33,49])),"../views/Login/components/RegisterForm.vue":()=>Ke(()=>import("./RegisterForm-D9mHgHZH.js"),__vite__mapDeps([55,56,38,39,40,41,42,43,44,45,7,8,57,18,33])),"../views/Login/components/SSOLogin.vue":()=>Ke(()=>import("./SSOLogin-DLznLpIf.js"),__vite__mapDeps([58,33])),"../views/Profile/Index.vue":()=>Ke(()=>import("./Index-RVIgbABi.js"),__vite__mapDeps([59,47,48,60,7,8,56,38,39,40,41,42,43,44,45,61,62,11,63,9,10,16,17,64,65,66,67,68,69,70,71])),"../views/Profile/components/BasicInfo.vue":()=>Ke(()=>import("./BasicInfo-kE_beqVZ.js"),__vite__mapDeps([72,60,7,8,56,38,39,40,41,42,43,44,45,61])),"../views/Profile/components/ProfileUser.vue":()=>Ke(()=>import("./ProfileUser-Tyqt21gY.js"),__vite__mapDeps([62,11,63,61,9,10,16,17,7,8,64,65])),"../views/Profile/components/ResetPwd.vue":()=>Ke(()=>import("./ResetPwd-77x1SrMH.js"),__vite__mapDeps([73,66,7,8,43,44,61])),"../views/Profile/components/UserAvatar.vue":()=>Ke(()=>import("./UserAvatar-DqHUKCHy.js"),__vite__mapDeps([63,61,9,10,16,17,7,8,64])),"../views/Profile/components/UserSocial.vue":()=>Ke(()=>import("./UserSocial-BwD5mO_9.js"),__vite__mapDeps([74,67,68,69,70,61])),"../views/Redirect/Redirect.vue":()=>Ke(()=>import("./Redirect-DpPS1Fyv.js"),__vite__mapDeps([])),"../views/bpm/category/CategoryForm.vue":()=>Ke(()=>import("./CategoryForm-BQH8bknp.js"),__vite__mapDeps([75,76,16,17,77])),"../views/bpm/category/index.vue":()=>Ke(()=>import("./index-8-MJAuYY.js"),__vite__mapDeps([78,79,80,81,82,83,47,48,11,77,76,16,17])),"../views/bpm/definition/index.vue":()=>Ke(()=>import("./index-BoLRyt57.js"),__vite__mapDeps([84,16,17,83,47,48,79,80,11,85,68,69,7,8,86,41,42,19,87,88,89,90,91,70,92,93,94,81,82,95,96,21,97,98])),"../views/bpm/form/editor/index.vue":()=>Ke(()=>import("./index-_f0OG2Ul.js"),__vite__mapDeps([99,16,17,83,47,48,70,86,98,15,100,101])),"../views/bpm/form/index.vue":()=>Ke(()=>import("./index-CNWjis1i.js"),__vite__mapDeps([102,16,17,79,80,81,82,83,47,48,11,86,98])),"../views/bpm/group/UserGroupForm.vue":()=>Ke(()=>import("./UserGroupForm-DAme4cIT.js"),__vite__mapDeps([103,104,16,17,70,91,90])),"../views/bpm/group/index.vue":()=>Ke(()=>import("./index-BbXIL6bb.js"),__vite__mapDeps([105,79,80,81,82,83,47,48,11,91,90,104,16,17,70])),"../views/bpm/model/ModelForm.vue":()=>Ke(()=>import("./ModelForm-T2kDeoPF.js"),__vite__mapDeps([106,107,16,17,108,86,77])),"../views/bpm/model/ModelImportForm.vue":()=>Ke(()=>import("./ModelImportForm-C9Hl2PQT.js"),__vite__mapDeps([109,110,16,17])),"../views/bpm/model/editor/index.vue":()=>Ke(()=>import("./index-Blo2eY_h.js"),__vite__mapDeps([111,83,47,48,85,16,17,68,69,7,8,86,41,42,19,87,88,89,90,91,79,80,70,92,93,94,81,82,95,11,96,21,108,112])),"../views/bpm/model/index.vue":()=>Ke(()=>import("./index-CS5KEqs5.js"),__vite__mapDeps([113,16,17,79,80,114,115,83,47,48,11,85,68,69,7,8,86,41,42,19,87,88,89,90,91,70,92,93,94,81,82,95,96,21,108,107,77,110,98])),"../views/bpm/oa/leave/create.vue":()=>Ke(()=>import("./create-fm9OqWwY.js"),__vite__mapDeps([116,47,48,117,15,97,90])),"../views/bpm/oa/leave/detail.vue":()=>Ke(()=>import("./detail-DdhYk8X9.js"),__vite__mapDeps([118,83,47,48,119,120,81,82,11,117])),"../views/bpm/oa/leave/index.vue":()=>Ke(()=>import("./index-CpbFKzkR.js"),__vite__mapDeps([121,79,80,81,82,83,47,48,11,117,122])),"../views/bpm/processExpression/ProcessExpressionForm.vue":()=>Ke(()=>import("./ProcessExpressionForm-2PwBjezV.js"),__vite__mapDeps([123,124,16,17,92,70])),"../views/bpm/processExpression/index.vue":()=>Ke(()=>import("./index-DRYykaob.js"),__vite__mapDeps([125,79,80,81,82,83,47,48,11,92,124,16,17,70])),"../views/bpm/processInstance/create/index.vue":()=>Ke(()=>import("./index-iqiA4v_B.js"),__vite__mapDeps([126,83,47,48,114,115,97,122,98,127,85,16,17,68,69,7,8,86,41,42,19,87,88,89,90,91,79,80,70,92,93,94,81,82,95,11,96,21,128,77,15,129])),"../views/bpm/processInstance/detail/ProcessInstanceBpmnViewer.vue":()=>Ke(()=>import("./ProcessInstanceBpmnViewer-BQQ-o1CW.js"),__vite__mapDeps([130,127,47,48,85,16,17,68,69,7,8,86,41,42,19,87,88,89,90,91,83,79,80,70,92,93,94,81,82,95,11,96,21,128])),"../views/bpm/processInstance/detail/ProcessInstanceTaskList.vue":()=>Ke(()=>import("./ProcessInstanceTaskList-DOQvtXIL.js"),__vite__mapDeps([131,132,16,17,133,134,47,48,81,82,11,135,93,94,136,137,98])),"../views/bpm/processInstance/detail/dialog/TaskDelegateForm.vue":()=>Ke(()=>import("./TaskDelegateForm-D0Vus2Ax.js"),__vite__mapDeps([138,139,16,17,137,90])),"../views/bpm/processInstance/detail/dialog/TaskReturnForm.vue":()=>Ke(()=>import("./TaskReturnForm-cIVEqWrK.js"),__vite__mapDeps([140,141,16,17,137])),"../views/bpm/processInstance/detail/dialog/TaskSignCreateForm.vue":()=>Ke(()=>import("./TaskSignCreateForm-CWftMp61.js"),__vite__mapDeps([142,143,16,17,137,90])),"../views/bpm/processInstance/detail/dialog/TaskSignDeleteForm.vue":()=>Ke(()=>import("./TaskSignDeleteForm-DhI5eoMJ.js"),__vite__mapDeps([144,136,16,17,137])),"../views/bpm/processInstance/detail/dialog/TaskSignList.vue":()=>Ke(()=>import("./TaskSignList-l8OjvdHP.js"),__vite__mapDeps([145,135,93,94,81,82,11,136,16,17,137])),"../views/bpm/processInstance/detail/dialog/TaskTransferForm.vue":()=>Ke(()=>import("./TaskTransferForm-D9vjzd9E.js"),__vite__mapDeps([146,147,16,17,137,90])),"../views/bpm/processInstance/detail/index.vue":()=>Ke(()=>import("./index-BuzgkpCT.js"),__vite__mapDeps([148,83,47,48,98,97,122,137,127,85,16,17,68,69,7,8,86,41,42,19,87,88,89,90,91,79,80,70,92,93,94,81,82,95,11,96,21,128,132,133,134,135,136,141,139,147,143])),"../views/bpm/processInstance/index.vue":()=>Ke(()=>import("./index-NeKT-tN8.js"),__vite__mapDeps([149,79,80,81,82,83,47,48,11,122,77,97])),"../views/bpm/processInstance/manager/index.vue":()=>Ke(()=>import("./index-BXFvpXfN.js"),__vite__mapDeps([150,79,80,81,82,83,47,48,11,122,77,90])),"../views/bpm/processListener/ProcessListenerForm.vue":()=>Ke(()=>import("./ProcessListenerForm-C3IVYYN-.js"),__vite__mapDeps([151,152,16,17,95,70])),"../views/bpm/processListener/index.vue":()=>Ke(()=>import("./index-kfDlR1eP.js"),__vite__mapDeps([153,79,80,81,82,83,47,48,11,95,152,16,17,70])),"../views/bpm/simpleWorkflow/index.vue":()=>Ke(()=>import("./index-DxMohf9V.js"),__vite__mapDeps([154,155])),"../views/bpm/task/copy/index.vue":()=>Ke(()=>import("./index-CIduYwej.js"),__vite__mapDeps([156,79,80,83,47,48,11,122])),"../views/bpm/task/done/index.vue":()=>Ke(()=>import("./index-OgG00ErA.js"),__vite__mapDeps([157,79,80,81,82,83,47,48,11,137])),"../views/bpm/task/manager/index.vue":()=>Ke(()=>import("./index-B0GR4_Kh.js"),__vite__mapDeps([158,79,80,81,82,83,47,48,11,137])),"../views/bpm/task/todo/index.vue":()=>Ke(()=>import("./index-DZIpPV5e.js"),__vite__mapDeps([159,79,80,83,47,48,11,137])),"../views/data/channel/modbus/ModBusDeviceForm.vue":()=>Ke(()=>import("./ModBusDeviceForm-BUUKSQxu.js"),__vite__mapDeps([160,161,16,17])),"../views/data/channel/modbus/index.vue":()=>Ke(()=>import("./index-C15B77Xz.js"),__vite__mapDeps([162,79,80,83,47,48,161,16,17])),"../views/data/job/ScheduleJobForm.vue":()=>Ke(()=>import("./ScheduleJobForm-DEQ_1syn.js"),__vite__mapDeps([163,164,16,17])),"../views/data/job/index.vue":()=>Ke(()=>import("./index-BvtaGty8.js"),__vite__mapDeps([165,79,80,83,47,48,164,16,17])),"../views/infra/apiAccessLog/ApiAccessLogDetail.vue":()=>Ke(()=>import("./ApiAccessLogDetail-D5Z5ZHCJ.js"),__vite__mapDeps([166,167,16,17,119,120,81,82,11])),"../views/infra/apiAccessLog/index.vue":()=>Ke(()=>import("./index-Blj2-sVT.js"),__vite__mapDeps([168,79,80,81,82,83,47,48,169,11,167,16,17,119,120])),"../views/infra/apiErrorLog/ApiErrorLogDetail.vue":()=>Ke(()=>import("./ApiErrorLogDetail-DEsNJFCC.js"),__vite__mapDeps([170,171,16,17,119,120,81,82,11])),"../views/infra/apiErrorLog/index.vue":()=>Ke(()=>import("./index-CaftD76h.js"),__vite__mapDeps([172,79,80,81,82,83,47,48,11,169,171,16,17,119,120,70])),"../views/infra/build/index.vue":()=>Ke(()=>import("./index-Dwv241w9.js"),__vite__mapDeps([173,16,17,83,47,48,100,101,174,175])),"../views/infra/codegen/EditTable.vue":()=>Ke(()=>import("./EditTable-BomNwQhg.js"),__vite__mapDeps([176,83,47,48,15,177,34,178,101,179,13,14,41,42,19,180,181,21])),"../views/infra/codegen/ImportTable.vue":()=>Ke(()=>import("./ImportTable-NL_VNSSV.js"),__vite__mapDeps([182,183,16,17,180,184])),"../views/infra/codegen/PreviewCode.vue":()=>Ke(()=>import("./PreviewCode-DPkPDWsp.js"),__vite__mapDeps([185,186,16,17,47,48,19,180,174,175,187])),"../views/infra/codegen/components/BasicInfoForm.vue":()=>Ke(()=>import("./BasicInfoForm-CIrLYCr-.js"),__vite__mapDeps([188,177,34])),"../views/infra/codegen/components/ColumInfoForm.vue":()=>Ke(()=>import("./ColumInfoForm-ntguWpaV.js"),__vite__mapDeps([189,178,101])),"../views/infra/codegen/components/GenerateInfoForm.vue":()=>Ke(()=>import("./GenerateInfoForm-Bk4ryTSL.js"),__vite__mapDeps([190,179,13,14,41,42,19,180,181,34,21])),"../views/infra/codegen/index.vue":()=>Ke(()=>import("./index-GY8ao1hz.js"),__vite__mapDeps([191,79,80,83,47,48,11,169,180,184,183,16,17,186,19,174,175,187])),"../views/infra/config/ConfigForm.vue":()=>Ke(()=>import("./ConfigForm-DYkumNgt.js"),__vite__mapDeps([192,193,16,17,194])),"../views/infra/config/index.vue":()=>Ke(()=>import("./index-BrkwA9_d.js"),__vite__mapDeps([195,79,80,81,82,83,47,48,11,169,194,193,16,17])),"../views/infra/dataSourceConfig/DataSourceConfigForm.vue":()=>Ke(()=>import("./DataSourceConfigForm-DQH97ylZ.js"),__vite__mapDeps([196,197,16,17,184])),"../views/infra/dataSourceConfig/index.vue":()=>Ke(()=>import("./index-CyBFHM-q.js"),__vite__mapDeps([198,83,47,48,11,184,197,16,17])),"../views/infra/druid/index.vue":()=>Ke(()=>import("./index-KKEcbXMD.js"),__vite__mapDeps([199,83,47,48,200,194])),"../views/infra/file/FileForm.vue":()=>Ke(()=>import("./FileForm-BgATIEyV.js"),__vite__mapDeps([201,202,16,17])),"../views/infra/file/index.vue":()=>Ke(()=>import("./index-C6po-tCZ.js"),__vite__mapDeps([203,79,80,114,115,83,47,48,11,202,16,17])),"../views/infra/fileConfig/FileConfigForm.vue":()=>Ke(()=>import("./FileConfigForm-LImRniKU.js"),__vite__mapDeps([204,205,16,17])),"../views/infra/fileConfig/index.vue":()=>Ke(()=>import("./index-C4v2eHBN.js"),__vite__mapDeps([206,79,80,81,82,83,47,48,205,16,17,11])),"../views/infra/job/JobDetail.vue":()=>Ke(()=>import("./JobDetail-ExiPr7Rl.js"),__vite__mapDeps([207,208,16,17,119,120,133,134,81,82,11,209])),"../views/infra/job/JobForm.vue":()=>Ke(()=>import("./JobForm-kyvocEIx.js"),__vite__mapDeps([210,211,16,17,209,212])),"../views/infra/job/index.vue":()=>Ke(()=>import("./index-CyJ771mM.js"),__vite__mapDeps([213,79,80,13,14,81,82,83,47,48,214,211,16,17,209,212,208,119,120,133,134,11,169,70,21])),"../views/infra/job/logger/JobLogDetail.vue":()=>Ke(()=>import("./JobLogDetail-Dr6dZixy.js"),__vite__mapDeps([215,216,16,17,119,120,81,82,11])),"../views/infra/job/logger/index.vue":()=>Ke(()=>import("./index-BJKFPqmZ.js"),__vite__mapDeps([217,79,80,81,82,83,47,48,11,169,216,16,17,119,120])),"../views/infra/redis/index.vue":()=>Ke(()=>import("./index-bvEckNGm.js"),__vite__mapDeps([218,219,47,48,119,120])),"../views/infra/server/index.vue":()=>Ke(()=>import("./index-B9fmu6B4.js"),__vite__mapDeps([220,83,47,48,200,194])),"../views/infra/skywalking/index.vue":()=>Ke(()=>import("./index-CUOVvfYG.js"),__vite__mapDeps([221,83,47,48,200,194])),"../views/infra/storage/index_rec.vue":()=>Ke(()=>import("./index_rec-BrPkkECT.js"),__vite__mapDeps([222,47,48,219])),"../views/infra/swagger/index.vue":()=>Ke(()=>import("./index-C7Dr0dMV.js"),__vite__mapDeps([223,83,47,48,200,194])),"../views/infra/webSocket/index.vue":()=>Ke(()=>import("./index-CgjZW1vn.js"),__vite__mapDeps([224,47,48,11,90])),"../views/report/goview/index.vue":()=>Ke(()=>import("./index-DrL1bS6m.js"),__vite__mapDeps([225,83,47,48,200])),"../views/report/jmreport/index.vue":()=>Ke(()=>import("./index-CAZdk-yF.js"),__vite__mapDeps([226,83,47,48,200])),"../views/system/app/AppForm.vue":()=>Ke(()=>import("./AppForm-CqScyftC.js"),__vite__mapDeps([227,228,16,17,5,70,229,230])),"../views/system/app/index.vue":()=>Ke(()=>import("./index-CbfASQiQ.js"),__vite__mapDeps([231,79,80,81,82,83,47,48,11,169,5,228,16,17,70,229,230])),"../views/system/appgroup/AppGroupForm.vue":()=>Ke(()=>import("./AppGroupForm-BGV5aGGs.js"),__vite__mapDeps([232,233,16,17,230])),"../views/system/appgroup/index.vue":()=>Ke(()=>import("./index-IY3qdast.js"),__vite__mapDeps([234,79,80,83,47,48,11,230,233,16,17])),"../views/system/appmenu/AppMenuForm.vue":()=>Ke(()=>import("./AppMenuForm-bzwcBhJk.js"),__vite__mapDeps([235,236,16,17,237,80,41,42,181,70,19])),"../views/system/appmenu/index.vue":()=>Ke(()=>import("./index-DDerEEdu.js"),__vite__mapDeps([238,81,82,83,47,48,19,181,236,16,17,237,80,41,42,70])),"../views/system/area/AreaForm.vue":()=>Ke(()=>import("./AreaForm-BPNI2w0z.js"),__vite__mapDeps([239,240,16,17])),"../views/system/area/index.vue":()=>Ke(()=>import("./index-DUEQyPAm.js"),__vite__mapDeps([241,39,40,83,47,48,240,16,17,242])),"../views/system/dept/DeptForm.vue":()=>Ke(()=>import("./DeptForm-BPY6qlXR.js"),__vite__mapDeps([243,244,16,17,41,42,19,88,90,70])),"../views/system/dept/index.vue":()=>Ke(()=>import("./index-D6iwlJJR.js"),__vite__mapDeps([245,81,82,83,47,48,11,19,88,244,16,17,41,42,90,70])),"../views/system/dict/DictTypeForm.vue":()=>Ke(()=>import("./DictTypeForm-DvppSWW_.js"),__vite__mapDeps([246,247,16,17,101,70])),"../views/system/dict/data/DictDataForm.vue":()=>Ke(()=>import("./DictDataForm-BGc67T5V.js"),__vite__mapDeps([248,249,16,17,70])),"../views/system/dict/data/index.vue":()=>Ke(()=>import("./index-DjvJKCQO.js"),__vite__mapDeps([250,79,80,81,82,83,47,48,11,169,101,249,16,17,70])),"../views/system/dict/index.vue":()=>Ke(()=>import("./index-B7sK3C2p.js"),__vite__mapDeps([251,79,80,81,82,83,47,48,11,101,247,16,17,70,169])),"../views/system/loginlog/LoginLogDetail.vue":()=>Ke(()=>import("./LoginLogDetail-Bwac3J67.js"),__vite__mapDeps([252,253,16,17,119,120,81,82,11])),"../views/system/loginlog/index.vue":()=>Ke(()=>import("./index-BStuHNUp.js"),__vite__mapDeps([254,79,80,81,82,83,47,48,11,169,253,16,17,119,120])),"../views/system/mail/account/MailAccountDetail.vue":()=>Ke(()=>import("./MailAccountDetail-9goXtXsq.js"),__vite__mapDeps([255,256,16,17,257,119,120,81,82,258,259,19,260,11,34])),"../views/system/mail/account/MailAccountForm.vue":()=>Ke(()=>import("./MailAccountForm-03329dWV.js"),__vite__mapDeps([261,262,16,17,56,38,39,40,41,42,43,44,45,259,19,81,82,260,11,34])),"../views/system/mail/account/index.vue":()=>Ke(()=>import("./index-PHVZwl45.js"),__vite__mapDeps([263,264,38,39,40,41,42,43,44,45,80,56,57,169,265,83,47,48,260,11,34,259,19,81,82,262,16,17,256,257,119,120,258])),"../views/system/mail/log/MailLogDetail.vue":()=>Ke(()=>import("./MailLogDetail-zSwQEp6y.js").then(async e=>(await e.__tla,e)),__vite__mapDeps([266,267,16,17,257,119,120,81,82,258,11,259,19])),"../views/system/mail/log/index.vue":()=>Ke(()=>import("./index-C14HW3Mp.js").then(async e=>(await e.__tla,e)),__vite__mapDeps([268,264,38,39,40,41,42,43,44,45,80,56,57,169,265,83,47,48,267,16,17,257,119,120,81,82,258,11,259,19])),"../views/system/mail/template/MailTemplateForm.vue":()=>Ke(()=>import("./MailTemplateForm-C1mw75Ri.js").then(async e=>(await e.__tla,e)),__vite__mapDeps([269,270,16,17,56,38,39,40,41,42,43,44,45,271,11,259,19,81,82,34])),"../views/system/mail/template/MailTemplateSendForm.vue":()=>Ke(()=>import("./MailTemplateSendForm-BJeAVjUb.js"),__vite__mapDeps([272,273,16,17,271])),"../views/system/mail/template/index.vue":()=>Ke(()=>import("./index-COVJZZBk.js").then(async e=>(await e.__tla,e)),__vite__mapDeps([274,264,38,39,40,41,42,43,44,45,80,56,57,169,265,83,47,48,270,16,17,271,11,259,19,81,82,34,273])),"../views/system/menu/MenuForm.vue":()=>Ke(()=>import("./MenuForm-D78x3xWo.js"),__vite__mapDeps([275,276,16,17,237,80,41,42,181,70,19])),"../views/system/menu/index.vue":()=>Ke(()=>import("./index-CcbvS0Rz.js"),__vite__mapDeps([277,81,82,83,47,48,19,181,276,16,17,237,80,41,42,70])),"../views/system/notice/NoticeForm.vue":()=>Ke(()=>import("./NoticeForm-BiHV2oM8.js"),__vite__mapDeps([278,279,16,17,70])),"../views/system/notice/index.vue":()=>Ke(()=>import("./index-DyAZe_Zk.js"),__vite__mapDeps([280,79,80,81,82,83,47,48,11,279,16,17,70])),"../views/system/notify/message/NotifyMessageDetail.vue":()=>Ke(()=>import("./NotifyMessageDetail-CukGtX6m.js"),__vite__mapDeps([281,282,16,17,119,120,81,82,11])),"../views/system/notify/message/index.vue":()=>Ke(()=>import("./index-1Jsg16er.js"),__vite__mapDeps([283,79,80,81,82,83,47,48,11,12,282,16,17,119,120])),"../views/system/notify/my/MyNotifyMessageDetail.vue":()=>Ke(()=>import("./MyNotifyMessageDetail-BaV8oqrl.js"),__vite__mapDeps([284,285,16,17,119,120,81,82,11])),"../views/system/notify/my/index.vue":()=>Ke(()=>import("./index-BxWLwkdW.js"),__vite__mapDeps([286,79,80,81,82,83,47,48,11,12,285,16,17,119,120])),"../views/system/notify/template/NotifyTemplateForm.vue":()=>Ke(()=>import("./NotifyTemplateForm-CeVzdtl0.js"),__vite__mapDeps([287,288,16,17,289,70])),"../views/system/notify/template/NotifyTemplateSendForm.vue":()=>Ke(()=>import("./NotifyTemplateSendForm-CZkqf1Tv.js"),__vite__mapDeps([290,291,16,17,90,289])),"../views/system/notify/template/index.vue":()=>Ke(()=>import("./index-DCeUt54J.js"),__vite__mapDeps([292,79,80,81,82,83,47,48,11,289,288,16,17,70,291,90])),"../views/system/oauth2/client/ClientForm.vue":()=>Ke(()=>import("./ClientForm-ICwTiRlm.js"),__vite__mapDeps([293,294,16,17,70])),"../views/system/oauth2/client/index.vue":()=>Ke(()=>import("./index-CSk7phrL.js"),__vite__mapDeps([295,79,80,81,82,83,47,48,11,294,16,17,70])),"../views/system/oauth2/token/index.vue":()=>Ke(()=>import("./index-ZJppwTXV.js"),__vite__mapDeps([296,79,80,81,82,83,47,48,11])),"../views/system/operatelog/OperateLogDetail.vue":()=>Ke(()=>import("./OperateLogDetail-DAnFORUV.js"),__vite__mapDeps([297,298,16,17,119,120,11])),"../views/system/operatelog/index.vue":()=>Ke(()=>import("./index-ie1BgzMW.js"),__vite__mapDeps([299,79,80,83,47,48,11,169,298,16,17,119,120,90])),"../views/system/post/PostForm.vue":()=>Ke(()=>import("./PostForm-DI5Y5C1h.js"),__vite__mapDeps([300,301,16,17,70,89])),"../views/system/post/index.vue":()=>Ke(()=>import("./index-CelbU7Sw.js"),__vite__mapDeps([302,79,80,81,82,83,47,48,11,169,89,301,16,17,70])),"../views/system/role/RoleAssignMenuForm.vue":()=>Ke(()=>import("./RoleAssignMenuForm-PpPyQf_t.js"),__vite__mapDeps([303,16,17,47,48,19,181,304,305])),"../views/system/role/RoleDataPermissionForm.vue":()=>Ke(()=>import("./RoleDataPermissionForm-DiY0K-ow.js"),__vite__mapDeps([306,307,16,17,47,48,19,70,88,304])),"../views/system/role/RoleForm.vue":()=>Ke(()=>import("./RoleForm-txywwzOJ.js"),__vite__mapDeps([308,309,16,17,70,87])),"../views/system/role/index.vue":()=>Ke(()=>import("./index-KBaTkrH-.js"),__vite__mapDeps([310,79,80,81,82,83,47,48,11,169,87,309,16,17,70,303,19,181,304,305,307,88])),"../views/system/sms/channel/SmsChannelForm.vue":()=>Ke(()=>import("./SmsChannelForm-Be9iZFoQ.js"),__vite__mapDeps([311,312,16,17,313,70])),"../views/system/sms/channel/index.vue":()=>Ke(()=>import("./index-DLShP1ih.js"),__vite__mapDeps([314,79,80,81,82,83,47,48,11,313,312,16,17,70])),"../views/system/sms/log/SmsLogDetail.vue":()=>Ke(()=>import("./SmsLogDetail-C00oLE1L.js"),__vite__mapDeps([315,316,16,17,119,120,81,82,11,313])),"../views/system/sms/log/index.vue":()=>Ke(()=>import("./index-DOt0_VlS.js"),__vite__mapDeps([317,79,80,81,82,83,47,48,11,169,313,316,16,17,119,120])),"../views/system/sms/template/SmsTemplateForm.vue":()=>Ke(()=>import("./SmsTemplateForm-BUwigA6S.js"),__vite__mapDeps([318,319,16,17,320,313,70])),"../views/system/sms/template/SmsTemplateSendForm.vue":()=>Ke(()=>import("./SmsTemplateSendForm-B3bb_6b-.js"),__vite__mapDeps([321,322,16,17,320])),"../views/system/sms/template/index.vue":()=>Ke(()=>import("./index-B49AJOv3.js"),__vite__mapDeps([323,79,80,81,82,83,47,48,11,320,313,169,319,16,17,70,322])),"../views/system/social/client/SocialClientForm.vue":()=>Ke(()=>import("./SocialClientForm-Bgd8ZaI0.js"),__vite__mapDeps([324,325,16,17])),"../views/system/social/client/index.vue":()=>Ke(()=>import("./index-DKmT4phT.js"),__vite__mapDeps([326,79,80,81,82,83,47,48,11,325,16,17])),"../views/system/social/user/SocialUserDetail.vue":()=>Ke(()=>import("./SocialUserDetail-CKC3v2_b.js"),__vite__mapDeps([327,328,16,17,119,120,114,115,81,82])),"../views/system/social/user/index.vue":()=>Ke(()=>import("./index-CN7I6JGQ.js"),__vite__mapDeps([329,79,80,114,115,81,82,83,47,48,11,328,16,17,119,120])),"../views/system/tenant/TenantForm.vue":()=>Ke(()=>import("./TenantForm-DxnKfOXk.js"),__vite__mapDeps([330,331,16,17,229,70,332,184])),"../views/system/tenant/index.vue":()=>Ke(()=>import("./index-DSUG4UQq.js"),__vite__mapDeps([333,79,80,81,82,83,47,48,11,169,229,332,331,16,17,70,184])),"../views/system/tenantPackage/TenantPackageForm.vue":()=>Ke(()=>import("./TenantPackageForm-D-hRgYoZ.js"),__vite__mapDeps([334,16,17,47,48,70,19,332,181,335])),"../views/system/tenantPackage/index.vue":()=>Ke(()=>import("./index-BRRFhxJZ.js"),__vite__mapDeps([336,79,80,81,82,83,47,48,11,332,334,16,17,70,19,181,335])),"../views/system/user/DeptTree.vue":()=>Ke(()=>import("./DeptTree-Dmhp8-60.js"),__vite__mapDeps([337,338,88,19])),"../views/system/user/UserAssignRoleForm.vue":()=>Ke(()=>import("./UserAssignRoleForm-CzgXRyws.js"),__vite__mapDeps([339,340,16,17,304,87])),"../views/system/user/UserForm.vue":()=>Ke(()=>import("./UserForm-BoSpKvzM.js"),__vite__mapDeps([341,342,16,17,41,42,70,19,89,88,90])),"../views/system/user/UserImportForm.vue":()=>Ke(()=>import("./UserImportForm-DMghhJQl.js"),__vite__mapDeps([343,344,16,17,90,169])),"../views/system/user/index.vue":()=>Ke(()=>import("./index-CDqO-m3a.js"),__vite__mapDeps([345,79,80,13,14,83,47,48,214,11,169,70,90,342,16,17,41,42,19,89,88,344,340,304,87,338,21]))}),HDe=e=>{for(const t in Zg)if(t.includes(e))return Uee(Zg[t])},$u=()=>Ke(()=>import("./Layout-BMQBzFLu.js"),__vite__mapDeps([346,93,94,82,27,28,29,19,15,13,14,25,6,7,8,9,10,11,12,16,17,18,20,21,22,347])),uOe=e=>{if(!e)return e;const{matched:t,...n}=e;return{...n,matched:t?t.map(r=>({meta:r.meta,name:r.name,path:r.path})):void 0}},AP=e=>{const t=[],n=Object.keys(Zg);for(const r of e){const o={title:r.name,icon:r.icon,hidden:!r.visible,noCache:!r.keepAlive,alwaysShow:r.children&&r.children.length===1&&(r.alwaysShow===void 0||r.alwaysShow)};if(r.component&&r.component.indexOf("?")>-1){const a=r.component.split("?")[1];r.component=r.component.split("?")[0],o.query=Tw.parse(a)}let i={path:r.path.indexOf("?")>-1?r.path.split("?")[0]:r.path,name:r.componentName&&r.componentName.length>0?r.componentName:M_(r.path),redirect:r.redirect,meta:o};if(!r.children&&r.parentId==0&&r.component){i.component=$u,i.meta={},i.name=M_(r.path)+"Parent",i.redirect="",o.alwaysShow=!0;const a={path:"",name:r.componentName&&r.componentName.length>0?r.componentName:M_(r.path),redirect:r.redirect,meta:o},l=r!=null&&r.component?n.findIndex(s=>s.includes(r.component)):n.findIndex(s=>s.includes(r.path));a.component=Zg[n[l]],i.children=[a]}else{if(r.children)i.component=$u,i.redirect=wP(r.path,r.children);else if(YO(r.path))i={path:"/external-link",component:$u,meta:{name:r.name},children:[i]};else{const a=r!=null&&r.component?n.findIndex(l=>l.includes(r.component)):n.findIndex(l=>l.includes(r.path));i.component=Zg[n[a]]}r.children&&(i.children=AP(r.children))}t.push(i)}return t},wP=(e,t)=>{if(!t||t.length==0)return e;const n=H0e(e,t[0].path);return t[0].children?wP(n,t[0].children):void 0},H0e=(e,t)=>(e.endsWith("/")&&(e=e.slice(0,-1)),t.startsWith("/")||(t="/"+t),e+t),pOe=(e,t)=>YO(t)?t:`${e}${t.startsWith("/")||!t?t:`/${t}`}`.replace(/\/\//g,"/"),$0e=e=>{var r,o;if(!e||!Reflect.has(e,"children")||!((r=e.children)!=null&&r.length))return!1;const t=e.children;let n=!1;for(let i=0;i<t.length;i++)if((o=t[i].children)!=null&&o.length){n=!0;break}return n},U0e=e=>{var o;let t=z0e({routes:[e],history:((n=location.host?n||location.pathname+location.search:"").includes("#")||(n+="#"),E0e(n))});var n;const r=t.getRoutes();xP(r,e.children||[],e),t=null,e.children=(o=e.children)==null?void 0:o.map(i=>SIe(i,"children"))},xP=(e,t,n)=>{var r,o;for(let i=0;i<t.length;i++){const a=t[i],l=e.find(s=>s.name===a.name);l&&(n.children=n.children||[],n.children.find(s=>s.name===l.name)||((r=n.children)==null||r.push(l)),(o=a.children)!=null&&o.length&&xP(e,a.children,n))}},M_=(e,t)=>((e=(e||"").replace(/-(.)/g,function(n){return n.toUpperCase()}).replaceAll("-",""))&&(e=e.charAt(0).toUpperCase()+e.slice(1)),e),_P=(e,t)=>t,hc=e=>{if(!Nw)return{t:r=>_P(0,r)};const{t,...n}=Nw.global;return{...n,t:(r,...o)=>r?r.includes(".")||e?t(_P(0,r),...o):r:""}},{t:e2}=hc(),EP=[{path:"/redirect",component:$u,name:"Redirect",children:[{path:"/redirect/:path(.*)",name:"Redirect",component:()=>Ke(()=>import("./Redirect-DpPS1Fyv.js"),__vite__mapDeps([])),meta:{}}],meta:{hidden:!0,noTagsView:!0}},{path:"/home2",component:()=>Ke(()=>import("./Index2-BhO9Jp95.js"),__vite__mapDeps([4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23])),name:"Home2",meta:{hidden:!0,noTagsView:!0}},{path:"/",component:$u,name:"Home",meta:{hidden:!0,noTagsView:!0},children:[{path:"index",component:()=>Ke(()=>import("./Index-QpCgKAgR.js"),__vite__mapDeps([])),name:"Index",meta:{title:e2("router.home"),icon:"ep:home-filled",noCache:!1,affix:!0}}]},{path:"/user",component:$u,name:"UserInfo",meta:{hidden:!0},children:[{path:"profile",component:()=>Ke(()=>import("./Index-RVIgbABi.js"),__vite__mapDeps([59,47,48,60,7,8,56,38,39,40,41,42,43,44,45,61,62,11,63,9,10,16,17,64,65,66,67,68,69,70,71])),name:"Profile",meta:{canTo:!0,hidden:!0,noTagsView:!1,icon:"ep:user",title:e2("common.profile")}},{path:"notify-message",component:()=>Ke(()=>import("./index-BxWLwkdW.js"),__vite__mapDeps([286,79,80,81,82,83,47,48,11,12,285,16,17,119,120])),name:"MyNotifyMessage",meta:{canTo:!0,hidden:!0,noTagsView:!1,icon:"ep:message",title:"\u6211\u7684\u7AD9\u5185\u4FE1"}}]},{path:"/dict",component:$u,name:"dict",meta:{hidden:!0},children:[{path:"type/data/:dictType",component:()=>Ke(()=>import("./index-DjvJKCQO.js"),__vite__mapDeps([250,79,80,81,82,83,47,48,11,169,101,249,16,17,70])),name:"SystemDictData",meta:{title:"\u5B57\u5178\u6570\u636E",noCache:!0,hidden:!0,canTo:!0,icon:"",activeMenu:"/system/dict"}}]},{path:"/codegen",component:$u,name:"CodegenEdit",meta:{hidden:!0},children:[{path:"edit",component:()=>Ke(()=>import("./EditTable-BomNwQhg.js"),__vite__mapDeps([176,83,47,48,15,177,34,178,101,179,13,14,41,42,19,180,181,21])),name:"InfraCodegenEditTable",meta:{noCache:!0,hidden:!0,canTo:!0,icon:"ep:edit",title:"\u4FEE\u6539\u751F\u6210\u914D\u7F6E",activeMenu:"infra/codegen/index"}}]},{path:"/job",component:$u,name:"JobL",meta:{hidden:!0},children:[{path:"job-log",component:()=>Ke(()=>import("./index-BJKFPqmZ.js"),__vite__mapDeps([217,79,80,81,82,83,47,48,11,169,216,16,17,119,120])),name:"InfraJobLog",meta:{noCache:!0,hidden:!0,canTo:!0,icon:"ep:edit",title:"\u8C03\u5EA6\u65E5\u5FD7",activeMenu:"infra/job/index"}}]},{path:"/login",component:()=>Ke(()=>import("./Login-D9xrXs6a.js"),__vite__mapDeps([24,25,26,27,28,29,20,13,14,21,30,31,32,7,8,33,34,35,36,37,38,39,40,41,42,43,44,45,18,46,47,48,49,50])),name:"Login",meta:{hidden:!0,title:e2("router.login"),noTagsView:!0}},{path:"/sso",component:()=>Ke(()=>import("./Login-D9xrXs6a.js"),__vite__mapDeps([24,25,26,27,28,29,20,13,14,21,30,31,32,7,8,33,34,35,36,37,38,39,40,41,42,43,44,45,18,46,47,48,49,50])),name:"SSOLogin",meta:{hidden:!0,title:e2("router.login"),noTagsView:!0}},{path:"/social-login",component:()=>Ke(()=>import("./SocialLogin-CcXhIKCR.js"),__vite__mapDeps([51,31,32,7,8,25,26,28,27,29,20,13,14,21,33,34,52])),name:"SocialLogin",meta:{hidden:!0,title:e2("router.socialLogin"),noTagsView:!0}},{path:"/403",component:()=>Ke(()=>import("./403-C8iCA59K.js"),__vite__mapDeps([0,1])),name:"NoAccess",meta:{hidden:!0,title:"403",noTagsView:!0}},{path:"/404",component:()=>Ke(()=>import("./404-BjPNd3kL.js"),__vite__mapDeps([2,1])),name:"NoFound",meta:{hidden:!0,title:"404",noTagsView:!0}},{path:"/500",component:()=>Ke(()=>import("./500-DgM9xbBr.js"),__vite__mapDeps([3,1])),name:"Error",meta:{hidden:!0,title:"500",noTagsView:!0}},{path:"/bpm",component:$u,name:"bpm",meta:{hidden:!0},children:[{path:"manager/form/edit",component:()=>Ke(()=>import("./index-_f0OG2Ul.js"),__vite__mapDeps([99,16,17,83,47,48,70,86,98,15,100,101])),name:"BpmFormEditor",meta:{noCache:!0,hidden:!0,canTo:!0,title:"\u8BBE\u8BA1\u6D41\u7A0B\u8868\u5355",activeMenu:"/bpm/manager/form"}},{path:"manager/model/edit",component:()=>Ke(()=>import("./index-Blo2eY_h.js"),__vite__mapDeps([111,83,47,48,85,16,17,68,69,7,8,86,41,42,19,87,88,89,90,91,79,80,70,92,93,94,81,82,95,11,96,21,108,112])),name:"BpmModelEditor",meta:{noCache:!0,hidden:!0,canTo:!0,title:"\u8BBE\u8BA1\u6D41\u7A0B",activeMenu:"/bpm/manager/model"}},{path:"manager/simple/workflow/model/edit",component:()=>Ke(()=>import("./index-DxMohf9V.js"),__vite__mapDeps([154,155])),name:"SimpleWorkflowDesignEditor",meta:{noCache:!0,hidden:!0,canTo:!0,title:"\u4EFF\u9489\u9489\u8BBE\u8BA1\u6D41\u7A0B",activeMenu:"/bpm/manager/model"}},{path:"manager/definition",component:()=>Ke(()=>import("./index-BoLRyt57.js"),__vite__mapDeps([84,16,17,83,47,48,79,80,11,85,68,69,7,8,86,41,42,19,87,88,89,90,91,70,92,93,94,81,82,95,96,21,97,98])),name:"BpmProcessDefinition",meta:{noCache:!0,hidden:!0,canTo:!0,title:"\u6D41\u7A0B\u5B9A\u4E49",activeMenu:"/bpm/manager/model"}},{path:"process-instance/detail",component:()=>Ke(()=>import("./index-BuzgkpCT.js"),__vite__mapDeps([148,83,47,48,98,97,122,137,127,85,16,17,68,69,7,8,86,41,42,19,87,88,89,90,91,79,80,70,92,93,94,81,82,95,11,96,21,128,132,133,134,135,136,141,139,147,143])),name:"BpmProcessInstanceDetail",meta:{noCache:!0,hidden:!0,canTo:!0,title:"\u6D41\u7A0B\u8BE6\u60C5",activeMenu:"/bpm/task/my"}},{path:"oa/leave/create",component:()=>Ke(()=>import("./create-fm9OqWwY.js"),__vite__mapDeps([116,47,48,117,15,97,90])),name:"OALeaveCreate",meta:{noCache:!0,hidden:!0,canTo:!0,title:"\u53D1\u8D77 OA \u8BF7\u5047",activeMenu:"/bpm/oa/leave"}},{path:"oa/leave/detail",component:()=>Ke(()=>import("./detail-DdhYk8X9.js"),__vite__mapDeps([118,83,47,48,119,120,81,82,11,117])),name:"OALeaveDetail",meta:{noCache:!0,hidden:!0,canTo:!0,title:"\u67E5\u770B OA \u8BF7\u5047",activeMenu:"/bpm/oa/leave"}}]}],vc=z0e({history:E0e(),strict:!0,routes:EP,scrollBehavior:()=>({left:0,top:0})}),{result_code:W0e,base_url:CP,request_timeout:G0e}=nP,q0e=["\u65E0\u6548\u7684\u5237\u65B0\u4EE4\u724C","\u5237\u65B0\u4EE4\u724C\u5DF2\u8FC7\u671F"],t2={show:!1};let K4=[],SP=!1;const xXe=["/login","/refresh-token"],Y4=Vo.create({baseURL:CP,timeout:G0e,withCredentials:!1});Y4.interceptors.request.use(e=>{var o,i;let t=(e.headers||{}).isToken===!1;xXe.some(a=>{if(e.url)return e.url.indexOf(a),t=!1}),Cd()&&!t&&(e.headers.Authorization="Bearer "+Cd());{const a=_b();a&&(e.headers["tenant-id"]=a)}const n=e.params||{},r=e.data||!1;if(((o=e.method)==null?void 0:o.toUpperCase())==="POST"&&e.headers["Content-Type"]==="application/x-www-form-urlencoded"&&(e.data=Tw.stringify(r)),((i=e.method)==null?void 0:i.toUpperCase())==="GET"&&n){e.params={};const a=Tw.stringify(n,{allowDots:!0});a&&(e.url=e.url+"?"+a)}return e},e=>(console.log(e),Promise.reject(e))),Y4.interceptors.response.use(async e=>{let{data:t}=e;const n=e.config;if(!t)throw new Error;const{t:r}=hc();if(e.request.responseType==="blob"||e.request.responseType==="arraybuffer"){if(e.data.type!=="application/json")return e.data;t=await new Response(e.data).json()}const o=t.code||W0e,i=t.msg||cP[o]||cP.default;if(q0e.indexOf(i)!==-1)return Promise.reject(i);if(o!==401)return o===500?(El.error(r("sys.api.errMsg500")),Promise.reject(new Error(i))):o===901?(El.error({offset:300,dangerouslyUseHTMLString:!0,message:"<div>"+r("sys.api.errMsg901")+"</div><div> </div><div>\u53C2\u8003 https://xxxx/ \u6559\u7A0B</div><div> </div><div>5 \u5206\u949F\u642D\u5EFA\u672C\u5730\u73AF\u5883</div>"}),Promise.reject(new Error(i))):o!==200?i==="\u65E0\u6548\u7684\u5237\u65B0\u4EE4\u724C"?(console.log(i),N_()):($d.error({title:i}),Promise.reject("error")):t;if(SP)return new Promise(a=>{K4.push(()=>{n.headers.Authorization="Bearer "+Cd(),a(Y4(n))})});if(SP=!0,!XO())return N_();try{const a=await K0e();return mQ((await a).data.data),n.headers.Authorization="Bearer "+Cd(),K4.forEach(l=>{l()}),K4=[],Y4(n)}catch{return K4.forEach(l=>{l()}),N_()}finally{K4=[],SP=!1}},e=>{console.log("err"+e);let{message:t}=e;const{t:n}=hc();return t==="Network Error"?t=n("sys.api.errorMessage"):t.includes("timeout")?t=n("sys.api.apiTimeoutMessage"):t.includes("Request failed with status code")&&(t=n("sys.api.apiRequestFailed")+t.substr(t.length-3)),El.error(t),Promise.reject(e)});let K0e,N_,Y0e,kp;K0e=async()=>(Vo.defaults.headers.common["tenant-id"]=_b(),await Vo.post(CP+"/system/auth/refresh-token?refreshToken="+XO())),N_=()=>{const{t:e}=hc();if(!t2.show){if(window.location.href.includes("login?redirect="))return;t2.show=!0,gc.confirm(e("sys.api.timeoutMessage"),e("common.confirmTitle"),{showCancelButton:!1,closeOnClickModal:!1,showClose:!1,confirmButtonText:e("login.relogin"),type:"warning"}).then(()=>{(()=>{const t=["Redirect","Login","NoFind","Root"];vc.getRoutes().forEach(n=>{const{name:r}=n;r&&!t.includes(r)&&vc.hasRoute(r)&&vc.removeRoute(r)})})(),DO(),uP(),t2.show=!1,window.location.href=window.location.href})}return Promise.reject(e("sys.api.timeoutMessage"))},{default_headers:Y0e}=nP,kp=e=>{const{url:t,method:n,params:r,data:o,headersType:i,responseType:a,...l}=e;return Y4({url:t,method:n,params:r,data:o,...l,responseType:a,headers:{"Content-Type":i||Y0e}})},No={get:async e=>(await kp({method:"GET",...e})).data,post:async e=>(await kp({method:"POST",...e})).data,postOriginal:async e=>await kp({method:"POST",...e}),delete:async e=>(await kp({method:"DELETE",...e})).data,put:async e=>(await kp({method:"PUT",...e})).data,download:async e=>await kp({method:"GET",responseType:"blob",...e}),upload:async e=>(e.headersType="multipart/form-data",await kp({method:"POST",...e}))},kOe=e=>No.get({url:"/infra/file/page",params:e}),DOe=e=>No.delete({url:"/infra/file/delete?id="+e});var X0e={exports:{}},Q0e,J0e={exports:{}};function kr(){return Q0e||(Q0e=1,J0e.exports=function(){var e=e||function(t,n){var r;if(typeof window<"u"&&window.crypto&&(r=window.crypto),typeof self<"u"&&self.crypto&&(r=self.crypto),typeof globalThis<"u"&&globalThis.crypto&&(r=globalThis.crypto),!r&&typeof window<"u"&&window.msCrypto&&(r=window.msCrypto),!r&&_m!==void 0&&_m.crypto&&(r=_m.crypto),!r)try{r=Dhe}catch{}var o=function(){if(r){if(typeof r.getRandomValues=="function")try{return r.getRandomValues(new Uint32Array(1))[0]}catch{}if(typeof r.randomBytes=="function")try{return r.randomBytes(4).readInt32LE()}catch{}}throw new Error("Native crypto module could not be used to get secure random number.")},i=Object.create||function(){function g(){}return function(b){var y;return g.prototype=b,y=new g,g.prototype=null,y}}(),a={},l=a.lib={},s=l.Base={extend:function(g){var b=i(this);return g&&b.mixIn(g),b.hasOwnProperty("init")&&this.init!==b.init||(b.init=function(){b.$super.init.apply(this,arguments)}),b.init.prototype=b,b.$super=this,b},create:function(){var g=this.extend();return g.init.apply(g,arguments),g},init:function(){},mixIn:function(g){for(var b in g)g.hasOwnProperty(b)&&(this[b]=g[b]);g.hasOwnProperty("toString")&&(this.toString=g.toString)},clone:function(){return this.init.prototype.extend(this)}},u=l.WordArray=s.extend({init:function(g,b){g=this.words=g||[],this.sigBytes=b!=n?b:4*g.length},toString:function(g){return(g||d).stringify(this)},concat:function(g){var b=this.words,y=g.words,w=this.sigBytes,x=g.sigBytes;if(this.clamp(),w%4)for(var _=0;_<x;_++){var E=y[_>>>2]>>>24-_%4*8&255;b[w+_>>>2]|=E<<24-(w+_)%4*8}else for(var C=0;C<x;C+=4)b[w+C>>>2]=y[C>>>2];return this.sigBytes+=x,this},clamp:function(){var g=this.words,b=this.sigBytes;g[b>>>2]&=4294967295<<32-b%4*8,g.length=t.ceil(b/4)},clone:function(){var g=s.clone.call(this);return g.words=this.words.slice(0),g},random:function(g){for(var b=[],y=0;y<g;y+=4)b.push(o());return new u.init(b,g)}}),c=a.enc={},d=c.Hex={stringify:function(g){for(var b=g.words,y=g.sigBytes,w=[],x=0;x<y;x++){var _=b[x>>>2]>>>24-x%4*8&255;w.push((_>>>4).toString(16)),w.push((15&_).toString(16))}return w.join("")},parse:function(g){for(var b=g.length,y=[],w=0;w<b;w+=2)y[w>>>3]|=parseInt(g.substr(w,2),16)<<24-w%8*4;return new u.init(y,b/2)}},f=c.Latin1={stringify:function(g){for(var b=g.words,y=g.sigBytes,w=[],x=0;x<y;x++){var _=b[x>>>2]>>>24-x%4*8&255;w.push(String.fromCharCode(_))}return w.join("")},parse:function(g){for(var b=g.length,y=[],w=0;w<b;w++)y[w>>>2]|=(255&g.charCodeAt(w))<<24-w%4*8;return new u.init(y,b)}},p=c.Utf8={stringify:function(g){try{return decodeURIComponent(escape(f.stringify(g)))}catch{throw new Error("Malformed UTF-8 data")}},parse:function(g){return f.parse(unescape(encodeURIComponent(g)))}},m=l.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new u.init,this._nDataBytes=0},_append:function(g){typeof g=="string"&&(g=p.parse(g)),this._data.concat(g),this._nDataBytes+=g.sigBytes},_process:function(g){var b,y=this._data,w=y.words,x=y.sigBytes,_=this.blockSize,E=x/(4*_),C=(E=g?t.ceil(E):t.max((0|E)-this._minBufferSize,0))*_,T=t.min(4*C,x);if(C){for(var k=0;k<C;k+=_)this._doProcessBlock(w,k);b=w.splice(0,C),y.sigBytes-=T}return new u.init(b,T)},clone:function(){var g=s.clone.call(this);return g._data=this._data.clone(),g},_minBufferSize:0});l.Hasher=m.extend({cfg:s.extend(),init:function(g){this.cfg=this.cfg.extend(g),this.reset()},reset:function(){m.reset.call(this),this._doReset()},update:function(g){return this._append(g),this._process(),this},finalize:function(g){return g&&this._append(g),this._doFinalize()},blockSize:16,_createHelper:function(g){return function(b,y){return new g.init(y).finalize(b)}},_createHmacHelper:function(g){return function(b,y){return new v.HMAC.init(g,y).finalize(b)}}});var v=a.algo={};return a}(Math);return e}()),J0e.exports}var Z0e,e1e={exports:{}};function F_(){return Z0e||(Z0e=1,e1e.exports=function(e){return function(t){var n=e,r=n.lib,o=r.Base,i=r.WordArray,a=n.x64={};a.Word=o.extend({init:function(l,s){this.high=l,this.low=s}}),a.WordArray=o.extend({init:function(l,s){l=this.words=l||[],this.sigBytes=s!=t?s:8*l.length},toX32:function(){for(var l=this.words,s=l.length,u=[],c=0;c<s;c++){var d=l[c];u.push(d.high),u.push(d.low)}return i.create(u,this.sigBytes)},clone:function(){for(var l=o.clone.call(this),s=l.words=this.words.slice(0),u=s.length,c=0;c<u;c++)s[c]=s[c].clone();return l}})}(),e}(kr())),e1e.exports}var t1e,n1e={exports:{}};function _Xe(){return t1e||(t1e=1,n1e.exports=function(e){return function(){if(typeof ArrayBuffer=="function"){var t=e.lib.WordArray,n=t.init,r=t.init=function(o){if(o instanceof ArrayBuffer&&(o=new Uint8Array(o)),(o instanceof Int8Array||typeof Uint8ClampedArray<"u"&&o instanceof Uint8ClampedArray||o instanceof Int16Array||o instanceof Uint16Array||o instanceof Int32Array||o instanceof Uint32Array||o instanceof Float32Array||o instanceof Float64Array)&&(o=new Uint8Array(o.buffer,o.byteOffset,o.byteLength)),o instanceof Uint8Array){for(var i=o.byteLength,a=[],l=0;l<i;l++)a[l>>>2]|=o[l]<<24-l%4*8;n.call(this,a,i)}else n.apply(this,arguments)};r.prototype=t}}(),e.lib.WordArray}(kr())),n1e.exports}var r1e,o1e={exports:{}};function EXe(){return r1e||(r1e=1,o1e.exports=function(e){return function(){var t=e,n=t.lib.WordArray,r=t.enc;function o(i){return i<<8&4278255360|i>>>8&16711935}r.Utf16=r.Utf16BE={stringify:function(i){for(var a=i.words,l=i.sigBytes,s=[],u=0;u<l;u+=2){var c=a[u>>>2]>>>16-u%4*8&65535;s.push(String.fromCharCode(c))}return s.join("")},parse:function(i){for(var a=i.length,l=[],s=0;s<a;s++)l[s>>>1]|=i.charCodeAt(s)<<16-s%2*16;return n.create(l,2*a)}},r.Utf16LE={stringify:function(i){for(var a=i.words,l=i.sigBytes,s=[],u=0;u<l;u+=2){var c=o(a[u>>>2]>>>16-u%4*8&65535);s.push(String.fromCharCode(c))}return s.join("")},parse:function(i){for(var a=i.length,l=[],s=0;s<a;s++)l[s>>>1]|=o(i.charCodeAt(s)<<16-s%2*16);return n.create(l,2*a)}}}(),e.enc.Utf16}(kr())),o1e.exports}var i1e,a1e={exports:{}};function D1(){return i1e||(i1e=1,a1e.exports=function(e){return function(){var t=e,n=t.lib.WordArray;function r(o,i,a){for(var l=[],s=0,u=0;u<i;u++)if(u%4){var c=a[o.charCodeAt(u-1)]<<u%4*2|a[o.charCodeAt(u)]>>>6-u%4*2;l[s>>>2]|=c<<24-s%4*8,s++}return n.create(l,s)}t.enc.Base64={stringify:function(o){var i=o.words,a=o.sigBytes,l=this._map;o.clamp();for(var s=[],u=0;u<a;u+=3)for(var c=(i[u>>>2]>>>24-u%4*8&255)<<16|(i[u+1>>>2]>>>24-(u+1)%4*8&255)<<8|i[u+2>>>2]>>>24-(u+2)%4*8&255,d=0;d<4&&u+.75*d<a;d++)s.push(l.charAt(c>>>6*(3-d)&63));var f=l.charAt(64);if(f)for(;s.length%4;)s.push(f);return s.join("")},parse:function(o){var i=o.length,a=this._map,l=this._reverseMap;if(!l){l=this._reverseMap=[];for(var s=0;s<a.length;s++)l[a.charCodeAt(s)]=s}var u=a.charAt(64);if(u){var c=o.indexOf(u);c!==-1&&(i=c)}return r(o,i,l)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),e.enc.Base64}(kr())),a1e.exports}var l1e,s1e={exports:{}};function CXe(){return l1e||(l1e=1,s1e.exports=function(e){return function(){var t=e,n=t.lib.WordArray;function r(o,i,a){for(var l=[],s=0,u=0;u<i;u++)if(u%4){var c=a[o.charCodeAt(u-1)]<<u%4*2|a[o.charCodeAt(u)]>>>6-u%4*2;l[s>>>2]|=c<<24-s%4*8,s++}return n.create(l,s)}t.enc.Base64url={stringify:function(o,i){i===void 0&&(i=!0);var a=o.words,l=o.sigBytes,s=i?this._safe_map:this._map;o.clamp();for(var u=[],c=0;c<l;c+=3)for(var d=(a[c>>>2]>>>24-c%4*8&255)<<16|(a[c+1>>>2]>>>24-(c+1)%4*8&255)<<8|a[c+2>>>2]>>>24-(c+2)%4*8&255,f=0;f<4&&c+.75*f<l;f++)u.push(s.charAt(d>>>6*(3-f)&63));var p=s.charAt(64);if(p)for(;u.length%4;)u.push(p);return u.join("")},parse:function(o,i){i===void 0&&(i=!0);var a=o.length,l=i?this._safe_map:this._map,s=this._reverseMap;if(!s){s=this._reverseMap=[];for(var u=0;u<l.length;u++)s[l.charCodeAt(u)]=u}var c=l.charAt(64);if(c){var d=o.indexOf(c);d!==-1&&(a=d)}return r(o,a,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",_safe_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"}}(),e.enc.Base64url}(kr())),s1e.exports}var u1e,c1e={exports:{}};function O1(){return u1e||(u1e=1,c1e.exports=function(e){return function(t){var n=e,r=n.lib,o=r.WordArray,i=r.Hasher,a=n.algo,l=[];(function(){for(var p=0;p<64;p++)l[p]=4294967296*t.abs(t.sin(p+1))|0})();var s=a.MD5=i.extend({_doReset:function(){this._hash=new o.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(p,m){for(var v=0;v<16;v++){var g=m+v,b=p[g];p[g]=16711935&(b<<8|b>>>24)|4278255360&(b<<24|b>>>8)}var y=this._hash.words,w=p[m+0],x=p[m+1],_=p[m+2],E=p[m+3],C=p[m+4],T=p[m+5],k=p[m+6],I=p[m+7],O=p[m+8],F=p[m+9],N=p[m+10],B=p[m+11],P=p[m+12],V=p[m+13],L=p[m+14],H=p[m+15],U=y[0],G=y[1],z=y[2],$=y[3];U=u(U,G,z,$,w,7,l[0]),$=u($,U,G,z,x,12,l[1]),z=u(z,$,U,G,_,17,l[2]),G=u(G,z,$,U,E,22,l[3]),U=u(U,G,z,$,C,7,l[4]),$=u($,U,G,z,T,12,l[5]),z=u(z,$,U,G,k,17,l[6]),G=u(G,z,$,U,I,22,l[7]),U=u(U,G,z,$,O,7,l[8]),$=u($,U,G,z,F,12,l[9]),z=u(z,$,U,G,N,17,l[10]),G=u(G,z,$,U,B,22,l[11]),U=u(U,G,z,$,P,7,l[12]),$=u($,U,G,z,V,12,l[13]),z=u(z,$,U,G,L,17,l[14]),U=c(U,G=u(G,z,$,U,H,22,l[15]),z,$,x,5,l[16]),$=c($,U,G,z,k,9,l[17]),z=c(z,$,U,G,B,14,l[18]),G=c(G,z,$,U,w,20,l[19]),U=c(U,G,z,$,T,5,l[20]),$=c($,U,G,z,N,9,l[21]),z=c(z,$,U,G,H,14,l[22]),G=c(G,z,$,U,C,20,l[23]),U=c(U,G,z,$,F,5,l[24]),$=c($,U,G,z,L,9,l[25]),z=c(z,$,U,G,E,14,l[26]),G=c(G,z,$,U,O,20,l[27]),U=c(U,G,z,$,V,5,l[28]),$=c($,U,G,z,_,9,l[29]),z=c(z,$,U,G,I,14,l[30]),U=d(U,G=c(G,z,$,U,P,20,l[31]),z,$,T,4,l[32]),$=d($,U,G,z,O,11,l[33]),z=d(z,$,U,G,B,16,l[34]),G=d(G,z,$,U,L,23,l[35]),U=d(U,G,z,$,x,4,l[36]),$=d($,U,G,z,C,11,l[37]),z=d(z,$,U,G,I,16,l[38]),G=d(G,z,$,U,N,23,l[39]),U=d(U,G,z,$,V,4,l[40]),$=d($,U,G,z,w,11,l[41]),z=d(z,$,U,G,E,16,l[42]),G=d(G,z,$,U,k,23,l[43]),U=d(U,G,z,$,F,4,l[44]),$=d($,U,G,z,P,11,l[45]),z=d(z,$,U,G,H,16,l[46]),U=f(U,G=d(G,z,$,U,_,23,l[47]),z,$,w,6,l[48]),$=f($,U,G,z,I,10,l[49]),z=f(z,$,U,G,L,15,l[50]),G=f(G,z,$,U,T,21,l[51]),U=f(U,G,z,$,P,6,l[52]),$=f($,U,G,z,E,10,l[53]),z=f(z,$,U,G,N,15,l[54]),G=f(G,z,$,U,x,21,l[55]),U=f(U,G,z,$,O,6,l[56]),$=f($,U,G,z,H,10,l[57]),z=f(z,$,U,G,k,15,l[58]),G=f(G,z,$,U,V,21,l[59]),U=f(U,G,z,$,C,6,l[60]),$=f($,U,G,z,B,10,l[61]),z=f(z,$,U,G,_,15,l[62]),G=f(G,z,$,U,F,21,l[63]),y[0]=y[0]+U|0,y[1]=y[1]+G|0,y[2]=y[2]+z|0,y[3]=y[3]+$|0},_doFinalize:function(){var p=this._data,m=p.words,v=8*this._nDataBytes,g=8*p.sigBytes;m[g>>>5]|=128<<24-g%32;var b=t.floor(v/4294967296),y=v;m[15+(g+64>>>9<<4)]=16711935&(b<<8|b>>>24)|4278255360&(b<<24|b>>>8),m[14+(g+64>>>9<<4)]=16711935&(y<<8|y>>>24)|4278255360&(y<<24|y>>>8),p.sigBytes=4*(m.length+1),this._process();for(var w=this._hash,x=w.words,_=0;_<4;_++){var E=x[_];x[_]=16711935&(E<<8|E>>>24)|4278255360&(E<<24|E>>>8)}return w},clone:function(){var p=i.clone.call(this);return p._hash=this._hash.clone(),p}});function u(p,m,v,g,b,y,w){var x=p+(m&v|~m&g)+b+w;return(x<<y|x>>>32-y)+m}function c(p,m,v,g,b,y,w){var x=p+(m&g|v&~g)+b+w;return(x<<y|x>>>32-y)+m}function d(p,m,v,g,b,y,w){var x=p+(m^v^g)+b+w;return(x<<y|x>>>32-y)+m}function f(p,m,v,g,b,y,w){var x=p+(v^(m|~g))+b+w;return(x<<y|x>>>32-y)+m}n.MD5=i._createHelper(s),n.HmacMD5=i._createHmacHelper(s)}(Math),e.MD5}(kr())),c1e.exports}var d1e,f1e={exports:{}};function p1e(){return d1e||(d1e=1,f1e.exports=function(e){return function(){var t=e,n=t.lib,r=n.WordArray,o=n.Hasher,i=t.algo,a=[],l=i.SHA1=o.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(s,u){for(var c=this._hash.words,d=c[0],f=c[1],p=c[2],m=c[3],v=c[4],g=0;g<80;g++){if(g<16)a[g]=0|s[u+g];else{var b=a[g-3]^a[g-8]^a[g-14]^a[g-16];a[g]=b<<1|b>>>31}var y=(d<<5|d>>>27)+v+a[g];y+=g<20?1518500249+(f&p|~f&m):g<40?1859775393+(f^p^m):g<60?(f&p|f&m|p&m)-1894007588:(f^p^m)-899497514,v=m,m=p,p=f<<30|f>>>2,f=d,d=y}c[0]=c[0]+d|0,c[1]=c[1]+f|0,c[2]=c[2]+p|0,c[3]=c[3]+m|0,c[4]=c[4]+v|0},_doFinalize:function(){var s=this._data,u=s.words,c=8*this._nDataBytes,d=8*s.sigBytes;return u[d>>>5]|=128<<24-d%32,u[14+(d+64>>>9<<4)]=Math.floor(c/4294967296),u[15+(d+64>>>9<<4)]=c,s.sigBytes=4*u.length,this._process(),this._hash},clone:function(){var s=o.clone.call(this);return s._hash=this._hash.clone(),s}});t.SHA1=o._createHelper(l),t.HmacSHA1=o._createHmacHelper(l)}(),e.SHA1}(kr())),f1e.exports}var h1e,v1e={exports:{}};function kP(){return h1e||(h1e=1,v1e.exports=function(e){return function(t){var n=e,r=n.lib,o=r.WordArray,i=r.Hasher,a=n.algo,l=[],s=[];(function(){function d(v){for(var g=t.sqrt(v),b=2;b<=g;b++)if(!(v%b))return!1;return!0}function f(v){return 4294967296*(v-(0|v))|0}for(var p=2,m=0;m<64;)d(p)&&(m<8&&(l[m]=f(t.pow(p,.5))),s[m]=f(t.pow(p,.3333333333333333)),m++),p++})();var u=[],c=a.SHA256=i.extend({_doReset:function(){this._hash=new o.init(l.slice(0))},_doProcessBlock:function(d,f){for(var p=this._hash.words,m=p[0],v=p[1],g=p[2],b=p[3],y=p[4],w=p[5],x=p[6],_=p[7],E=0;E<64;E++){if(E<16)u[E]=0|d[f+E];else{var C=u[E-15],T=(C<<25|C>>>7)^(C<<14|C>>>18)^C>>>3,k=u[E-2],I=(k<<15|k>>>17)^(k<<13|k>>>19)^k>>>10;u[E]=T+u[E-7]+I+u[E-16]}var O=m&v^m&g^v&g,F=(m<<30|m>>>2)^(m<<19|m>>>13)^(m<<10|m>>>22),N=_+((y<<26|y>>>6)^(y<<21|y>>>11)^(y<<7|y>>>25))+(y&w^~y&x)+s[E]+u[E];_=x,x=w,w=y,y=b+N|0,b=g,g=v,v=m,m=N+(F+O)|0}p[0]=p[0]+m|0,p[1]=p[1]+v|0,p[2]=p[2]+g|0,p[3]=p[3]+b|0,p[4]=p[4]+y|0,p[5]=p[5]+w|0,p[6]=p[6]+x|0,p[7]=p[7]+_|0},_doFinalize:function(){var d=this._data,f=d.words,p=8*this._nDataBytes,m=8*d.sigBytes;return f[m>>>5]|=128<<24-m%32,f[14+(m+64>>>9<<4)]=t.floor(p/4294967296),f[15+(m+64>>>9<<4)]=p,d.sigBytes=4*f.length,this._process(),this._hash},clone:function(){var d=i.clone.call(this);return d._hash=this._hash.clone(),d}});n.SHA256=i._createHelper(c),n.HmacSHA256=i._createHmacHelper(c)}(Math),e.SHA256}(kr())),v1e.exports}var m1e,SXe={exports:{}},g1e,y1e={exports:{}};function b1e(){return g1e||(g1e=1,y1e.exports=function(e){return function(){var t=e,n=t.lib.Hasher,r=t.x64,o=r.Word,i=r.WordArray,a=t.algo;function l(){return o.create.apply(o,arguments)}var s=[l(1116352408,3609767458),l(1899447441,602891725),l(3049323471,3964484399),l(3921009573,2173295548),l(961987163,4081628472),l(1508970993,3053834265),l(2453635748,2937671579),l(2870763221,3664609560),l(3624381080,2734883394),l(310598401,1164996542),l(607225278,1323610764),l(1426881987,3590304994),l(1925078388,4068182383),l(2162078206,991336113),l(2614888103,633803317),l(3248222580,3479774868),l(3835390401,2666613458),l(4022224774,944711139),l(264347078,2341262773),l(604807628,2007800933),l(770255983,1495990901),l(1249150122,1856431235),l(1555081692,3175218132),l(1996064986,2198950837),l(2554220882,3999719339),l(2821834349,766784016),l(2952996808,2566594879),l(3210313671,3203337956),l(3336571891,1034457026),l(3584528711,2466948901),l(113926993,3758326383),l(338241895,168717936),l(666307205,1188179964),l(773529912,1546045734),l(1294757372,1522805485),l(1396182291,2643833823),l(1695183700,2343527390),l(1986661051,1014477480),l(2177026350,1206759142),l(2456956037,344077627),l(2730485921,1290863460),l(2820302411,3158454273),l(3259730800,3505952657),l(3345764771,106217008),l(3516065817,3606008344),l(3600352804,1432725776),l(4094571909,1467031594),l(275423344,851169720),l(430227734,3100823752),l(506948616,1363258195),l(659060556,3750685593),l(883997877,3785050280),l(958139571,3318307427),l(1322822218,3812723403),l(1537002063,2003034995),l(1747873779,3602036899),l(1955562222,1575990012),l(2024104815,1125592928),l(2227730452,2716904306),l(2361852424,442776044),l(2428436474,593698344),l(2756734187,3733110249),l(3204031479,2999351573),l(3329325298,3815920427),l(3391569614,3928383900),l(3515267271,566280711),l(3940187606,3454069534),l(4118630271,4000239992),l(116418474,1914138554),l(174292421,2731055270),l(289380356,3203993006),l(460393269,320620315),l(685471733,587496836),l(852142971,1086792851),l(1017036298,365543100),l(1126000580,2618297676),l(1288033470,3409855158),l(1501505948,4234509866),l(1607167915,987167468),l(1816402316,1246189591)],u=[];(function(){for(var d=0;d<80;d++)u[d]=l()})();var c=a.SHA512=n.extend({_doReset:function(){this._hash=new i.init([new o.init(1779033703,4089235720),new o.init(3144134277,2227873595),new o.init(1013904242,4271175723),new o.init(2773480762,1595750129),new o.init(1359893119,2917565137),new o.init(2600822924,725511199),new o.init(528734635,4215389547),new o.init(1541459225,327033209)])},_doProcessBlock:function(d,f){for(var p=this._hash.words,m=p[0],v=p[1],g=p[2],b=p[3],y=p[4],w=p[5],x=p[6],_=p[7],E=m.high,C=m.low,T=v.high,k=v.low,I=g.high,O=g.low,F=b.high,N=b.low,B=y.high,P=y.low,V=w.high,L=w.low,H=x.high,U=x.low,G=_.high,z=_.low,$=E,W=C,K=T,X=k,te=I,ne=O,se=F,le=N,J=B,Z=P,ye=V,be=L,ve=H,Ae=U,Ce=G,_e=z,ke=0;ke<80;ke++){var Be,$e,rt=u[ke];if(ke<16)$e=rt.high=0|d[f+2*ke],Be=rt.low=0|d[f+2*ke+1];else{var ge=u[ke-15],We=ge.high,st=ge.low,At=(We>>>1|st<<31)^(We>>>8|st<<24)^We>>>7,Ve=(st>>>1|We<<31)^(st>>>8|We<<24)^(st>>>7|We<<25),it=u[ke-2],dt=it.high,ot=it.low,je=(dt>>>19|ot<<13)^(dt<<3|ot>>>29)^dt>>>6,we=(ot>>>19|dt<<13)^(ot<<3|dt>>>29)^(ot>>>6|dt<<26),ze=u[ke-7],me=ze.high,Me=ze.low,Ie=u[ke-16],ht=Ie.high,gt=Ie.low;$e=($e=($e=At+me+((Be=Ve+Me)>>>0<Ve>>>0?1:0))+je+((Be+=we)>>>0<we>>>0?1:0))+ht+((Be+=gt)>>>0<gt>>>0?1:0),rt.high=$e,rt.low=Be}var vt,qt=J&ye^~J&ve,mn=Z&be^~Z&Ae,Zt=$&K^$&te^K&te,rn=W&X^W&ne^X&ne,zn=($>>>28|W<<4)^($<<30|W>>>2)^($<<25|W>>>7),tt=(W>>>28|$<<4)^(W<<30|$>>>2)^(W<<25|$>>>7),kt=(J>>>14|Z<<18)^(J>>>18|Z<<14)^(J<<23|Z>>>9),An=(Z>>>14|J<<18)^(Z>>>18|J<<14)^(Z<<23|J>>>9),_n=s[ke],po=_n.high,Qr=_n.low,Ar=Ce+kt+((vt=_e+An)>>>0<_e>>>0?1:0),Jr=tt+rn;Ce=ve,_e=Ae,ve=ye,Ae=be,ye=J,be=Z,J=se+(Ar=(Ar=(Ar=Ar+qt+((vt+=mn)>>>0<mn>>>0?1:0))+po+((vt+=Qr)>>>0<Qr>>>0?1:0))+$e+((vt+=Be)>>>0<Be>>>0?1:0))+((Z=le+vt|0)>>>0<le>>>0?1:0)|0,se=te,le=ne,te=K,ne=X,K=$,X=W,$=Ar+(zn+Zt+(Jr>>>0<tt>>>0?1:0))+((W=vt+Jr|0)>>>0<vt>>>0?1:0)|0}C=m.low=C+W,m.high=E+$+(C>>>0<W>>>0?1:0),k=v.low=k+X,v.high=T+K+(k>>>0<X>>>0?1:0),O=g.low=O+ne,g.high=I+te+(O>>>0<ne>>>0?1:0),N=b.low=N+le,b.high=F+se+(N>>>0<le>>>0?1:0),P=y.low=P+Z,y.high=B+J+(P>>>0<Z>>>0?1:0),L=w.low=L+be,w.high=V+ye+(L>>>0<be>>>0?1:0),U=x.low=U+Ae,x.high=H+ve+(U>>>0<Ae>>>0?1:0),z=_.low=z+_e,_.high=G+Ce+(z>>>0<_e>>>0?1:0)},_doFinalize:function(){var d=this._data,f=d.words,p=8*this._nDataBytes,m=8*d.sigBytes;return f[m>>>5]|=128<<24-m%32,f[30+(m+128>>>10<<5)]=Math.floor(p/4294967296),f[31+(m+128>>>10<<5)]=p,d.sigBytes=4*f.length,this._process(),this._hash.toX32()},clone:function(){var d=n.clone.call(this);return d._hash=this._hash.clone(),d},blockSize:32});t.SHA512=n._createHelper(c),t.HmacSHA512=n._createHmacHelper(c)}(),e.SHA512}(kr(),F_())),y1e.exports}var A1e,kXe={exports:{}},w1e,x1e={exports:{}};function DXe(){return w1e||(w1e=1,x1e.exports=function(e){return function(t){var n=e,r=n.lib,o=r.WordArray,i=r.Hasher,a=n.x64.Word,l=n.algo,s=[],u=[],c=[];(function(){for(var p=1,m=0,v=0;v<24;v++){s[p+5*m]=(v+1)*(v+2)/2%64;var g=(2*p+3*m)%5;p=m%5,m=g}for(p=0;p<5;p++)for(m=0;m<5;m++)u[p+5*m]=m+(2*p+3*m)%5*5;for(var b=1,y=0;y<24;y++){for(var w=0,x=0,_=0;_<7;_++){if(1&b){var E=(1<<_)-1;E<32?x^=1<<E:w^=1<<E-32}128&b?b=b<<1^113:b<<=1}c[y]=a.create(w,x)}})();var d=[];(function(){for(var p=0;p<25;p++)d[p]=a.create()})();var f=l.SHA3=i.extend({cfg:i.cfg.extend({outputLength:512}),_doReset:function(){for(var p=this._state=[],m=0;m<25;m++)p[m]=new a.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(p,m){for(var v=this._state,g=this.blockSize/2,b=0;b<g;b++){var y=p[m+2*b],w=p[m+2*b+1];y=16711935&(y<<8|y>>>24)|4278255360&(y<<24|y>>>8),w=16711935&(w<<8|w>>>24)|4278255360&(w<<24|w>>>8),(z=v[b]).high^=w,z.low^=y}for(var x=0;x<24;x++){for(var _=0;_<5;_++){for(var E=0,C=0,T=0;T<5;T++)E^=(z=v[_+5*T]).high,C^=z.low;var k=d[_];k.high=E,k.low=C}for(_=0;_<5;_++){var I=d[(_+4)%5],O=d[(_+1)%5],F=O.high,N=O.low;for(E=I.high^(F<<1|N>>>31),C=I.low^(N<<1|F>>>31),T=0;T<5;T++)(z=v[_+5*T]).high^=E,z.low^=C}for(var B=1;B<25;B++){var P=(z=v[B]).high,V=z.low,L=s[B];L<32?(E=P<<L|V>>>32-L,C=V<<L|P>>>32-L):(E=V<<L-32|P>>>64-L,C=P<<L-32|V>>>64-L);var H=d[u[B]];H.high=E,H.low=C}var U=d[0],G=v[0];for(U.high=G.high,U.low=G.low,_=0;_<5;_++)for(T=0;T<5;T++){var z=v[B=_+5*T],$=d[B],W=d[(_+1)%5+5*T],K=d[(_+2)%5+5*T];z.high=$.high^~W.high&K.high,z.low=$.low^~W.low&K.low}z=v[0];var X=c[x];z.high^=X.high,z.low^=X.low}},_doFinalize:function(){var p=this._data,m=p.words;this._nDataBytes;var v=8*p.sigBytes,g=32*this.blockSize;m[v>>>5]|=1<<24-v%32,m[(t.ceil((v+1)/g)*g>>>5)-1]|=128,p.sigBytes=4*m.length,this._process();for(var b=this._state,y=this.cfg.outputLength/8,w=y/8,x=[],_=0;_<w;_++){var E=b[_],C=E.high,T=E.low;C=16711935&(C<<8|C>>>24)|4278255360&(C<<24|C>>>8),T=16711935&(T<<8|T>>>24)|4278255360&(T<<24|T>>>8),x.push(T),x.push(C)}return new o.init(x,y)},clone:function(){for(var p=i.clone.call(this),m=p._state=this._state.slice(0),v=0;v<25;v++)m[v]=m[v].clone();return p}});n.SHA3=i._createHelper(f),n.HmacSHA3=i._createHmacHelper(f)}(Math),e.SHA3}(kr(),F_())),x1e.exports}var _1e,OXe={exports:{}},E1e,C1e={exports:{}};function DP(){return E1e||(E1e=1,C1e.exports=function(e){(function(){var t=e,n=t.lib.Base,r=t.enc.Utf8;t.algo.HMAC=n.extend({init:function(o,i){o=this._hasher=new o.init,typeof i=="string"&&(i=r.parse(i));var a=o.blockSize,l=4*a;i.sigBytes>l&&(i=o.finalize(i)),i.clamp();for(var s=this._oKey=i.clone(),u=this._iKey=i.clone(),c=s.words,d=u.words,f=0;f<a;f++)c[f]^=1549556828,d[f]^=909522486;s.sigBytes=u.sigBytes=l,this.reset()},reset:function(){var o=this._hasher;o.reset(),o.update(this._iKey)},update:function(o){return this._hasher.update(o),this},finalize:function(o){var i=this._hasher,a=i.finalize(o);return i.reset(),i.finalize(this._oKey.clone().concat(a))}})})()}(kr())),C1e.exports}var S1e,TXe={exports:{}},k1e,D1e={exports:{}};function Dp(){return k1e||(k1e=1,D1e.exports=function(e){return function(){var t=e,n=t.lib,r=n.Base,o=n.WordArray,i=t.algo,a=i.MD5,l=i.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:a,iterations:1}),init:function(s){this.cfg=this.cfg.extend(s)},compute:function(s,u){for(var c,d=this.cfg,f=d.hasher.create(),p=o.create(),m=p.words,v=d.keySize,g=d.iterations;m.length<v;){c&&f.update(c),c=f.update(s).finalize(u),f.reset();for(var b=1;b<g;b++)c=f.finalize(c),f.reset();p.concat(c)}return p.sigBytes=4*v,p}});t.EvpKDF=function(s,u,c){return l.create(c).compute(s,u)}}(),e.EvpKDF}(kr(),p1e(),DP())),D1e.exports}var O1e,T1e={exports:{}};function Zi(){return O1e||(O1e=1,T1e.exports=function(e){e.lib.Cipher||function(t){var n=e,r=n.lib,o=r.Base,i=r.WordArray,a=r.BufferedBlockAlgorithm,l=n.enc;l.Utf8;var s=l.Base64,u=n.algo.EvpKDF,c=r.Cipher=a.extend({cfg:o.extend(),createEncryptor:function(x,_){return this.create(this._ENC_XFORM_MODE,x,_)},createDecryptor:function(x,_){return this.create(this._DEC_XFORM_MODE,x,_)},init:function(x,_,E){this.cfg=this.cfg.extend(E),this._xformMode=x,this._key=_,this.reset()},reset:function(){a.reset.call(this),this._doReset()},process:function(x){return this._append(x),this._process()},finalize:function(x){return x&&this._append(x),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function x(_){return typeof _=="string"?w:b}return function(_){return{encrypt:function(E,C,T){return x(C).encrypt(_,E,C,T)},decrypt:function(E,C,T){return x(C).decrypt(_,E,C,T)}}}}()});r.StreamCipher=c.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var d=n.mode={},f=r.BlockCipherMode=o.extend({createEncryptor:function(x,_){return this.Encryptor.create(x,_)},createDecryptor:function(x,_){return this.Decryptor.create(x,_)},init:function(x,_){this._cipher=x,this._iv=_}}),p=d.CBC=function(){var x=f.extend();function _(E,C,T){var k,I=this._iv;I?(k=I,this._iv=t):k=this._prevBlock;for(var O=0;O<T;O++)E[C+O]^=k[O]}return x.Encryptor=x.extend({processBlock:function(E,C){var T=this._cipher,k=T.blockSize;_.call(this,E,C,k),T.encryptBlock(E,C),this._prevBlock=E.slice(C,C+k)}}),x.Decryptor=x.extend({processBlock:function(E,C){var T=this._cipher,k=T.blockSize,I=E.slice(C,C+k);T.decryptBlock(E,C),_.call(this,E,C,k),this._prevBlock=I}}),x}(),m=(n.pad={}).Pkcs7={pad:function(x,_){for(var E=4*_,C=E-x.sigBytes%E,T=C<<24|C<<16|C<<8|C,k=[],I=0;I<C;I+=4)k.push(T);var O=i.create(k,C);x.concat(O)},unpad:function(x){var _=255&x.words[x.sigBytes-1>>>2];x.sigBytes-=_}};r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:p,padding:m}),reset:function(){var x;c.reset.call(this);var _=this.cfg,E=_.iv,C=_.mode;this._xformMode==this._ENC_XFORM_MODE?x=C.createEncryptor:(x=C.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==x?this._mode.init(this,E&&E.words):(this._mode=x.call(C,this,E&&E.words),this._mode.__creator=x)},_doProcessBlock:function(x,_){this._mode.processBlock(x,_)},_doFinalize:function(){var x,_=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(_.pad(this._data,this.blockSize),x=this._process(!0)):(x=this._process(!0),_.unpad(x)),x},blockSize:4});var v=r.CipherParams=o.extend({init:function(x){this.mixIn(x)},toString:function(x){return(x||this.formatter).stringify(this)}}),g=(n.format={}).OpenSSL={stringify:function(x){var _=x.ciphertext,E=x.salt;return(E?i.create([1398893684,1701076831]).concat(E).concat(_):_).toString(s)},parse:function(x){var _,E=s.parse(x),C=E.words;return C[0]==1398893684&&C[1]==1701076831&&(_=i.create(C.slice(2,4)),C.splice(0,4),E.sigBytes-=16),v.create({ciphertext:E,salt:_})}},b=r.SerializableCipher=o.extend({cfg:o.extend({format:g}),encrypt:function(x,_,E,C){C=this.cfg.extend(C);var T=x.createEncryptor(E,C),k=T.finalize(_),I=T.cfg;return v.create({ciphertext:k,key:E,iv:I.iv,algorithm:x,mode:I.mode,padding:I.padding,blockSize:x.blockSize,formatter:C.format})},decrypt:function(x,_,E,C){return C=this.cfg.extend(C),_=this._parse(_,C.format),x.createDecryptor(E,C).finalize(_.ciphertext)},_parse:function(x,_){return typeof x=="string"?_.parse(x,this):x}}),y=(n.kdf={}).OpenSSL={execute:function(x,_,E,C,T){if(C||(C=i.random(8)),T)k=u.create({keySize:_+E,hasher:T}).compute(x,C);else var k=u.create({keySize:_+E}).compute(x,C);var I=i.create(k.words.slice(_),4*E);return k.sigBytes=4*_,v.create({key:k,iv:I,salt:C})}},w=r.PasswordBasedCipher=b.extend({cfg:b.cfg.extend({kdf:y}),encrypt:function(x,_,E,C){var T=(C=this.cfg.extend(C)).kdf.execute(E,x.keySize,x.ivSize,C.salt,C.hasher);C.iv=T.iv;var k=b.encrypt.call(this,x,_,T.key,C);return k.mixIn(T),k},decrypt:function(x,_,E,C){C=this.cfg.extend(C),_=this._parse(_,C.format);var T=C.kdf.execute(E,x.keySize,x.ivSize,_.salt,C.hasher);return C.iv=T.iv,b.decrypt.call(this,x,_,T.key,C)}})}()}(kr(),Dp())),T1e.exports}var M1e,N1e={exports:{}};function MXe(){return M1e||(M1e=1,N1e.exports=function(e){return e.mode.CFB=function(){var t=e.lib.BlockCipherMode.extend();function n(r,o,i,a){var l,s=this._iv;s?(l=s.slice(0),this._iv=void 0):l=this._prevBlock,a.encryptBlock(l,0);for(var u=0;u<i;u++)r[o+u]^=l[u]}return t.Encryptor=t.extend({processBlock:function(r,o){var i=this._cipher,a=i.blockSize;n.call(this,r,o,a,i),this._prevBlock=r.slice(o,o+a)}}),t.Decryptor=t.extend({processBlock:function(r,o){var i=this._cipher,a=i.blockSize,l=r.slice(o,o+a);n.call(this,r,o,a,i),this._prevBlock=l}}),t}(),e.mode.CFB}(kr(),Zi())),N1e.exports}var F1e,R1e={exports:{}};function NXe(){return F1e||(F1e=1,R1e.exports=function(e){return e.mode.CTR=(t=e.lib.BlockCipherMode.extend(),n=t.Encryptor=t.extend({processBlock:function(r,o){var i=this._cipher,a=i.blockSize,l=this._iv,s=this._counter;l&&(s=this._counter=l.slice(0),this._iv=void 0);var u=s.slice(0);i.encryptBlock(u,0),s[a-1]=s[a-1]+1|0;for(var c=0;c<a;c++)r[o+c]^=u[c]}}),t.Decryptor=n,t),e.mode.CTR;var t,n}(kr(),Zi())),R1e.exports}var I1e,B1e={exports:{}};function FXe(){return I1e||(I1e=1,B1e.exports=function(e){return e.mode.CTRGladman=function(){var t=e.lib.BlockCipherMode.extend();function n(i){if(255&~(i>>24))i+=16777216;else{var a=i>>16&255,l=i>>8&255,s=255&i;a===255?(a=0,l===255?(l=0,s===255?s=0:++s):++l):++a,i=0,i+=a<<16,i+=l<<8,i+=s}return i}function r(i){return(i[0]=n(i[0]))===0&&(i[1]=n(i[1])),i}var o=t.Encryptor=t.extend({processBlock:function(i,a){var l=this._cipher,s=l.blockSize,u=this._iv,c=this._counter;u&&(c=this._counter=u.slice(0),this._iv=void 0),r(c);var d=c.slice(0);l.encryptBlock(d,0);for(var f=0;f<s;f++)i[a+f]^=d[f]}});return t.Decryptor=o,t}(),e.mode.CTRGladman}(kr(),Zi())),B1e.exports}var P1e,L1e={exports:{}};function RXe(){return P1e||(P1e=1,L1e.exports=function(e){return e.mode.OFB=(t=e.lib.BlockCipherMode.extend(),n=t.Encryptor=t.extend({processBlock:function(r,o){var i=this._cipher,a=i.blockSize,l=this._iv,s=this._keystream;l&&(s=this._keystream=l.slice(0),this._iv=void 0),i.encryptBlock(s,0);for(var u=0;u<a;u++)r[o+u]^=s[u]}}),t.Decryptor=n,t),e.mode.OFB;var t,n}(kr(),Zi())),L1e.exports}var j1e,IXe={exports:{}},V1e,BXe={exports:{}},z1e,PXe={exports:{}},H1e,LXe={exports:{}},$1e,jXe={exports:{}},U1e,VXe={exports:{}},W1e,zXe={exports:{}},G1e,HXe={exports:{}},q1e,K1e={exports:{}};function $Xe(){return q1e||(q1e=1,K1e.exports=function(e){return function(){var t=e,n=t.lib,r=n.WordArray,o=n.BlockCipher,i=t.algo,a=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],l=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],s=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],u=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],c=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],d=i.DES=o.extend({_doReset:function(){for(var v=this._key.words,g=[],b=0;b<56;b++){var y=a[b]-1;g[b]=v[y>>>5]>>>31-y%32&1}for(var w=this._subKeys=[],x=0;x<16;x++){var _=w[x]=[],E=s[x];for(b=0;b<24;b++)_[b/6|0]|=g[(l[b]-1+E)%28]<<31-b%6,_[4+(b/6|0)]|=g[28+(l[b+24]-1+E)%28]<<31-b%6;for(_[0]=_[0]<<1|_[0]>>>31,b=1;b<7;b++)_[b]=_[b]>>>4*(b-1)+3;_[7]=_[7]<<5|_[7]>>>27}var C=this._invSubKeys=[];for(b=0;b<16;b++)C[b]=w[15-b]},encryptBlock:function(v,g){this._doCryptBlock(v,g,this._subKeys)},decryptBlock:function(v,g){this._doCryptBlock(v,g,this._invSubKeys)},_doCryptBlock:function(v,g,b){this._lBlock=v[g],this._rBlock=v[g+1],f.call(this,4,252645135),f.call(this,16,65535),p.call(this,2,858993459),p.call(this,8,16711935),f.call(this,1,1431655765);for(var y=0;y<16;y++){for(var w=b[y],x=this._lBlock,_=this._rBlock,E=0,C=0;C<8;C++)E|=u[C][((_^w[C])&c[C])>>>0];this._lBlock=_,this._rBlock=x^E}var T=this._lBlock;this._lBlock=this._rBlock,this._rBlock=T,f.call(this,1,1431655765),p.call(this,8,16711935),p.call(this,2,858993459),f.call(this,16,65535),f.call(this,4,252645135),v[g]=this._lBlock,v[g+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function f(v,g){var b=(this._lBlock>>>v^this._rBlock)&g;this._rBlock^=b,this._lBlock^=b<<v}function p(v,g){var b=(this._rBlock>>>v^this._lBlock)&g;this._lBlock^=b,this._rBlock^=b<<v}t.DES=o._createHelper(d);var m=i.TripleDES=o.extend({_doReset:function(){var v=this._key.words;if(v.length!==2&&v.length!==4&&v.length<6)throw new Error("Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.");var g=v.slice(0,2),b=v.length<4?v.slice(0,2):v.slice(2,4),y=v.length<6?v.slice(0,2):v.slice(4,6);this._des1=d.createEncryptor(r.create(g)),this._des2=d.createEncryptor(r.create(b)),this._des3=d.createEncryptor(r.create(y))},encryptBlock:function(v,g){this._des1.encryptBlock(v,g),this._des2.decryptBlock(v,g),this._des3.encryptBlock(v,g)},decryptBlock:function(v,g){this._des3.decryptBlock(v,g),this._des2.encryptBlock(v,g),this._des1.decryptBlock(v,g)},keySize:6,ivSize:2,blockSize:2});t.TripleDES=o._createHelper(m)}(),e.TripleDES}(kr(),D1(),O1(),Dp(),Zi())),K1e.exports}var Y1e,UXe={exports:{}},X1e,WXe={exports:{}},Q1e,GXe={exports:{}},J1e,Z1e={exports:{}};function qXe(){return J1e||(J1e=1,Z1e.exports=function(e){return function(){var t=e,n=t.lib.BlockCipher,r=t.algo;const o=16,i=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],a=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]];var l={pbox:[],sbox:[]};function s(p,m){let v=m>>24&255,g=m>>16&255,b=m>>8&255,y=255&m,w=p.sbox[0][v]+p.sbox[1][g];return w^=p.sbox[2][b],w+=p.sbox[3][y],w}function u(p,m,v){let g,b=m,y=v;for(let w=0;w<o;++w)b^=p.pbox[w],y=s(p,b)^y,g=b,b=y,y=g;return g=b,b=y,y=g,y^=p.pbox[o],b^=p.pbox[o+1],{left:b,right:y}}function c(p,m,v){let g,b=m,y=v;for(let w=o+1;w>1;--w)b^=p.pbox[w],y=s(p,b)^y,g=b,b=y,y=g;return g=b,b=y,y=g,y^=p.pbox[1],b^=p.pbox[0],{left:b,right:y}}function d(p,m,v){for(let x=0;x<4;x++){p.sbox[x]=[];for(let _=0;_<256;_++)p.sbox[x][_]=a[x][_]}let g=0;for(let x=0;x<o+2;x++)p.pbox[x]=i[x]^m[g],g++,g>=v&&(g=0);let b=0,y=0,w=0;for(let x=0;x<o+2;x+=2)w=u(p,b,y),b=w.left,y=w.right,p.pbox[x]=b,p.pbox[x+1]=y;for(let x=0;x<4;x++)for(let _=0;_<256;_+=2)w=u(p,b,y),b=w.left,y=w.right,p.sbox[x][_]=b,p.sbox[x][_+1]=y;return!0}var f=r.Blowfish=n.extend({_doReset:function(){if(this._keyPriorReset!==this._key){var p=this._keyPriorReset=this._key,m=p.words,v=p.sigBytes/4;d(l,m,v)}},encryptBlock:function(p,m){var v=u(l,p[m],p[m+1]);p[m]=v.left,p[m+1]=v.right},decryptBlock:function(p,m){var v=c(l,p[m],p[m+1]);p[m]=v.left,p[m+1]=v.right},blockSize:2,keySize:4,ivSize:2});t.Blowfish=n._createHelper(f)}(),e.Blowfish}(kr(),D1(),O1(),Dp(),Zi())),Z1e.exports}X0e.exports=function(e){return e}(kr(),F_(),_Xe(),EXe(),D1(),CXe(),O1(),p1e(),kP(),m1e||(m1e=1,SXe.exports=function(e){return function(){var t=e,n=t.lib.WordArray,r=t.algo,o=r.SHA256,i=r.SHA224=o.extend({_doReset:function(){this._hash=new n.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var a=o._doFinalize.call(this);return a.sigBytes-=4,a}});t.SHA224=o._createHelper(i),t.HmacSHA224=o._createHmacHelper(i)}(),e.SHA224}(kr(),kP())),b1e(),A1e||(A1e=1,kXe.exports=function(e){return function(){var t=e,n=t.x64,r=n.Word,o=n.WordArray,i=t.algo,a=i.SHA512,l=i.SHA384=a.extend({_doReset:function(){this._hash=new o.init([new r.init(3418070365,3238371032),new r.init(1654270250,914150663),new r.init(2438529370,812702999),new r.init(355462360,4144912697),new r.init(1731405415,4290775857),new r.init(2394180231,1750603025),new r.init(3675008525,1694076839),new r.init(1203062813,3204075428)])},_doFinalize:function(){var s=a._doFinalize.call(this);return s.sigBytes-=16,s}});t.SHA384=a._createHelper(l),t.HmacSHA384=a._createHmacHelper(l)}(),e.SHA384}(kr(),F_(),b1e())),DXe(),_1e||(_1e=1,OXe.exports=function(e){return function(){var t=e,n=t.lib,r=n.WordArray,o=n.Hasher,i=t.algo,a=r.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),l=r.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),s=r.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),u=r.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),c=r.create([0,1518500249,1859775393,2400959708,2840853838]),d=r.create([1352829926,1548603684,1836072691,2053994217,0]),f=i.RIPEMD160=o.extend({_doReset:function(){this._hash=r.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(w,x){for(var _=0;_<16;_++){var E=x+_,C=w[E];w[E]=16711935&(C<<8|C>>>24)|4278255360&(C<<24|C>>>8)}var T,k,I,O,F,N,B,P,V,L,H,U=this._hash.words,G=c.words,z=d.words,$=a.words,W=l.words,K=s.words,X=u.words;for(N=T=U[0],B=k=U[1],P=I=U[2],V=O=U[3],L=F=U[4],_=0;_<80;_+=1)H=T+w[x+$[_]]|0,H+=_<16?p(k,I,O)+G[0]:_<32?m(k,I,O)+G[1]:_<48?v(k,I,O)+G[2]:_<64?g(k,I,O)+G[3]:b(k,I,O)+G[4],H=(H=y(H|=0,K[_]))+F|0,T=F,F=O,O=y(I,10),I=k,k=H,H=N+w[x+W[_]]|0,H+=_<16?b(B,P,V)+z[0]:_<32?g(B,P,V)+z[1]:_<48?v(B,P,V)+z[2]:_<64?m(B,P,V)+z[3]:p(B,P,V)+z[4],H=(H=y(H|=0,X[_]))+L|0,N=L,L=V,V=y(P,10),P=B,B=H;H=U[1]+I+V|0,U[1]=U[2]+O+L|0,U[2]=U[3]+F+N|0,U[3]=U[4]+T+B|0,U[4]=U[0]+k+P|0,U[0]=H},_doFinalize:function(){var w=this._data,x=w.words,_=8*this._nDataBytes,E=8*w.sigBytes;x[E>>>5]|=128<<24-E%32,x[14+(E+64>>>9<<4)]=16711935&(_<<8|_>>>24)|4278255360&(_<<24|_>>>8),w.sigBytes=4*(x.length+1),this._process();for(var C=this._hash,T=C.words,k=0;k<5;k++){var I=T[k];T[k]=16711935&(I<<8|I>>>24)|4278255360&(I<<24|I>>>8)}return C},clone:function(){var w=o.clone.call(this);return w._hash=this._hash.clone(),w}});function p(w,x,_){return w^x^_}function m(w,x,_){return w&x|~w&_}function v(w,x,_){return(w|~x)^_}function g(w,x,_){return w&_|x&~_}function b(w,x,_){return w^(x|~_)}function y(w,x){return w<<x|w>>>32-x}t.RIPEMD160=o._createHelper(f),t.HmacRIPEMD160=o._createHmacHelper(f)}(),e.RIPEMD160}(kr())),DP(),S1e||(S1e=1,TXe.exports=function(e){return function(){var t=e,n=t.lib,r=n.Base,o=n.WordArray,i=t.algo,a=i.SHA256,l=i.HMAC,s=i.PBKDF2=r.extend({cfg:r.extend({keySize:4,hasher:a,iterations:25e4}),init:function(u){this.cfg=this.cfg.extend(u)},compute:function(u,c){for(var d=this.cfg,f=l.create(d.hasher,u),p=o.create(),m=o.create([1]),v=p.words,g=m.words,b=d.keySize,y=d.iterations;v.length<b;){var w=f.update(c).finalize(m);f.reset();for(var x=w.words,_=x.length,E=w,C=1;C<y;C++){E=f.finalize(E),f.reset();for(var T=E.words,k=0;k<_;k++)x[k]^=T[k]}p.concat(w),g[0]++}return p.sigBytes=4*b,p}});t.PBKDF2=function(u,c,d){return s.create(d).compute(u,c)}}(),e.PBKDF2}(kr(),kP(),DP())),Dp(),Zi(),MXe(),NXe(),FXe(),RXe(),j1e||(j1e=1,IXe.exports=function(e){return e.mode.ECB=((t=e.lib.BlockCipherMode.extend()).Encryptor=t.extend({processBlock:function(n,r){this._cipher.encryptBlock(n,r)}}),t.Decryptor=t.extend({processBlock:function(n,r){this._cipher.decryptBlock(n,r)}}),t),e.mode.ECB;var t}(kr(),Zi())),V1e||(V1e=1,BXe.exports=function(e){return e.pad.AnsiX923={pad:function(t,n){var r=t.sigBytes,o=4*n,i=o-r%o,a=r+i-1;t.clamp(),t.words[a>>>2]|=i<<24-a%4*8,t.sigBytes+=i},unpad:function(t){var n=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=n}},e.pad.Ansix923}(kr(),Zi())),z1e||(z1e=1,PXe.exports=function(e){return e.pad.Iso10126={pad:function(t,n){var r=4*n,o=r-t.sigBytes%r;t.concat(e.lib.WordArray.random(o-1)).concat(e.lib.WordArray.create([o<<24],1))},unpad:function(t){var n=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=n}},e.pad.Iso10126}(kr(),Zi())),H1e||(H1e=1,LXe.exports=function(e){return e.pad.Iso97971={pad:function(t,n){t.concat(e.lib.WordArray.create([2147483648],1)),e.pad.ZeroPadding.pad(t,n)},unpad:function(t){e.pad.ZeroPadding.unpad(t),t.sigBytes--}},e.pad.Iso97971}(kr(),Zi())),$1e||($1e=1,jXe.exports=function(e){return e.pad.ZeroPadding={pad:function(t,n){var r=4*n;t.clamp(),t.sigBytes+=r-(t.sigBytes%r||r)},unpad:function(t){var n=t.words,r=t.sigBytes-1;for(r=t.sigBytes-1;r>=0;r--)if(n[r>>>2]>>>24-r%4*8&255){t.sigBytes=r+1;break}}},e.pad.ZeroPadding}(kr(),Zi())),U1e||(U1e=1,VXe.exports=function(e){return e.pad.NoPadding={pad:function(){},unpad:function(){}},e.pad.NoPadding}(kr(),Zi())),W1e||(W1e=1,zXe.exports=function(e){return function(){var t=e,n=t.lib.CipherParams,r=t.enc.Hex;t.format.Hex={stringify:function(o){return o.ciphertext.toString(r)},parse:function(o){var i=r.parse(o);return n.create({ciphertext:i})}}}(),e.format.Hex}(kr(),Zi())),G1e||(G1e=1,HXe.exports=function(e){return function(){var t=e,n=t.lib.BlockCipher,r=t.algo,o=[],i=[],a=[],l=[],s=[],u=[],c=[],d=[],f=[],p=[];(function(){for(var g=[],b=0;b<256;b++)g[b]=b<128?b<<1:b<<1^283;var y=0,w=0;for(b=0;b<256;b++){var x=w^w<<1^w<<2^w<<3^w<<4;x=x>>>8^255&x^99,o[y]=x,i[x]=y;var _=g[y],E=g[_],C=g[E],T=257*g[x]^16843008*x;a[y]=T<<24|T>>>8,l[y]=T<<16|T>>>16,s[y]=T<<8|T>>>24,u[y]=T,T=16843009*C^65537*E^257*_^16843008*y,c[x]=T<<24|T>>>8,d[x]=T<<16|T>>>16,f[x]=T<<8|T>>>24,p[x]=T,y?(y=_^g[g[g[C^_]]],w^=g[g[w]]):y=w=1}})();var m=[0,1,2,4,8,16,32,64,128,27,54],v=r.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var g=this._keyPriorReset=this._key,b=g.words,y=g.sigBytes/4,w=4*((this._nRounds=y+6)+1),x=this._keySchedule=[],_=0;_<w;_++)_<y?x[_]=b[_]:(T=x[_-1],_%y?y>6&&_%y==4&&(T=o[T>>>24]<<24|o[T>>>16&255]<<16|o[T>>>8&255]<<8|o[255&T]):(T=o[(T=T<<8|T>>>24)>>>24]<<24|o[T>>>16&255]<<16|o[T>>>8&255]<<8|o[255&T],T^=m[_/y|0]<<24),x[_]=x[_-y]^T);for(var E=this._invKeySchedule=[],C=0;C<w;C++){if(_=w-C,C%4)var T=x[_];else T=x[_-4];E[C]=C<4||_<=4?T:c[o[T>>>24]]^d[o[T>>>16&255]]^f[o[T>>>8&255]]^p[o[255&T]]}}},encryptBlock:function(g,b){this._doCryptBlock(g,b,this._keySchedule,a,l,s,u,o)},decryptBlock:function(g,b){var y=g[b+1];g[b+1]=g[b+3],g[b+3]=y,this._doCryptBlock(g,b,this._invKeySchedule,c,d,f,p,i),y=g[b+1],g[b+1]=g[b+3],g[b+3]=y},_doCryptBlock:function(g,b,y,w,x,_,E,C){for(var T=this._nRounds,k=g[b]^y[0],I=g[b+1]^y[1],O=g[b+2]^y[2],F=g[b+3]^y[3],N=4,B=1;B<T;B++){var P=w[k>>>24]^x[I>>>16&255]^_[O>>>8&255]^E[255&F]^y[N++],V=w[I>>>24]^x[O>>>16&255]^_[F>>>8&255]^E[255&k]^y[N++],L=w[O>>>24]^x[F>>>16&255]^_[k>>>8&255]^E[255&I]^y[N++],H=w[F>>>24]^x[k>>>16&255]^_[I>>>8&255]^E[255&O]^y[N++];k=P,I=V,O=L,F=H}P=(C[k>>>24]<<24|C[I>>>16&255]<<16|C[O>>>8&255]<<8|C[255&F])^y[N++],V=(C[I>>>24]<<24|C[O>>>16&255]<<16|C[F>>>8&255]<<8|C[255&k])^y[N++],L=(C[O>>>24]<<24|C[F>>>16&255]<<16|C[k>>>8&255]<<8|C[255&I])^y[N++],H=(C[F>>>24]<<24|C[k>>>16&255]<<16|C[I>>>8&255]<<8|C[255&O])^y[N++],g[b]=P,g[b+1]=V,g[b+2]=L,g[b+3]=H},keySize:8});t.AES=n._createHelper(v)}(),e.AES}(kr(),D1(),O1(),Dp(),Zi())),$Xe(),Y1e||(Y1e=1,UXe.exports=function(e){return function(){var t=e,n=t.lib.StreamCipher,r=t.algo,o=r.RC4=n.extend({_doReset:function(){for(var l=this._key,s=l.words,u=l.sigBytes,c=this._S=[],d=0;d<256;d++)c[d]=d;d=0;for(var f=0;d<256;d++){var p=d%u,m=s[p>>>2]>>>24-p%4*8&255;f=(f+c[d]+m)%256;var v=c[d];c[d]=c[f],c[f]=v}this._i=this._j=0},_doProcessBlock:function(l,s){l[s]^=i.call(this)},keySize:8,ivSize:0});function i(){for(var l=this._S,s=this._i,u=this._j,c=0,d=0;d<4;d++){u=(u+l[s=(s+1)%256])%256;var f=l[s];l[s]=l[u],l[u]=f,c|=l[(l[s]+l[u])%256]<<24-8*d}return this._i=s,this._j=u,c}t.RC4=n._createHelper(o);var a=r.RC4Drop=o.extend({cfg:o.cfg.extend({drop:192}),_doReset:function(){o._doReset.call(this);for(var l=this.cfg.drop;l>0;l--)i.call(this)}});t.RC4Drop=n._createHelper(a)}(),e.RC4}(kr(),D1(),O1(),Dp(),Zi())),X1e||(X1e=1,WXe.exports=function(e){return function(){var t=e,n=t.lib.StreamCipher,r=t.algo,o=[],i=[],a=[],l=r.Rabbit=n.extend({_doReset:function(){for(var u=this._key.words,c=this.cfg.iv,d=0;d<4;d++)u[d]=16711935&(u[d]<<8|u[d]>>>24)|4278255360&(u[d]<<24|u[d]>>>8);var f=this._X=[u[0],u[3]<<16|u[2]>>>16,u[1],u[0]<<16|u[3]>>>16,u[2],u[1]<<16|u[0]>>>16,u[3],u[2]<<16|u[1]>>>16],p=this._C=[u[2]<<16|u[2]>>>16,4294901760&u[0]|65535&u[1],u[3]<<16|u[3]>>>16,4294901760&u[1]|65535&u[2],u[0]<<16|u[0]>>>16,4294901760&u[2]|65535&u[3],u[1]<<16|u[1]>>>16,4294901760&u[3]|65535&u[0]];for(this._b=0,d=0;d<4;d++)s.call(this);for(d=0;d<8;d++)p[d]^=f[d+4&7];if(c){var m=c.words,v=m[0],g=m[1],b=16711935&(v<<8|v>>>24)|4278255360&(v<<24|v>>>8),y=16711935&(g<<8|g>>>24)|4278255360&(g<<24|g>>>8),w=b>>>16|4294901760&y,x=y<<16|65535&b;for(p[0]^=b,p[1]^=w,p[2]^=y,p[3]^=x,p[4]^=b,p[5]^=w,p[6]^=y,p[7]^=x,d=0;d<4;d++)s.call(this)}},_doProcessBlock:function(u,c){var d=this._X;s.call(this),o[0]=d[0]^d[5]>>>16^d[3]<<16,o[1]=d[2]^d[7]>>>16^d[5]<<16,o[2]=d[4]^d[1]>>>16^d[7]<<16,o[3]=d[6]^d[3]>>>16^d[1]<<16;for(var f=0;f<4;f++)o[f]=16711935&(o[f]<<8|o[f]>>>24)|4278255360&(o[f]<<24|o[f]>>>8),u[c+f]^=o[f]},blockSize:4,ivSize:2});function s(){for(var u=this._X,c=this._C,d=0;d<8;d++)i[d]=c[d];for(c[0]=c[0]+1295307597+this._b|0,c[1]=c[1]+3545052371+(c[0]>>>0<i[0]>>>0?1:0)|0,c[2]=c[2]+886263092+(c[1]>>>0<i[1]>>>0?1:0)|0,c[3]=c[3]+1295307597+(c[2]>>>0<i[2]>>>0?1:0)|0,c[4]=c[4]+3545052371+(c[3]>>>0<i[3]>>>0?1:0)|0,c[5]=c[5]+886263092+(c[4]>>>0<i[4]>>>0?1:0)|0,c[6]=c[6]+1295307597+(c[5]>>>0<i[5]>>>0?1:0)|0,c[7]=c[7]+3545052371+(c[6]>>>0<i[6]>>>0?1:0)|0,this._b=c[7]>>>0<i[7]>>>0?1:0,d=0;d<8;d++){var f=u[d]+c[d],p=65535&f,m=f>>>16,v=((p*p>>>17)+p*m>>>15)+m*m,g=((4294901760&f)*f|0)+((65535&f)*f|0);a[d]=v^g}u[0]=a[0]+(a[7]<<16|a[7]>>>16)+(a[6]<<16|a[6]>>>16)|0,u[1]=a[1]+(a[0]<<8|a[0]>>>24)+a[7]|0,u[2]=a[2]+(a[1]<<16|a[1]>>>16)+(a[0]<<16|a[0]>>>16)|0,u[3]=a[3]+(a[2]<<8|a[2]>>>24)+a[1]|0,u[4]=a[4]+(a[3]<<16|a[3]>>>16)+(a[2]<<16|a[2]>>>16)|0,u[5]=a[5]+(a[4]<<8|a[4]>>>24)+a[3]|0,u[6]=a[6]+(a[5]<<16|a[5]>>>16)+(a[4]<<16|a[4]>>>16)|0,u[7]=a[7]+(a[6]<<8|a[6]>>>24)+a[5]|0}t.Rabbit=n._createHelper(l)}(),e.Rabbit}(kr(),D1(),O1(),Dp(),Zi())),Q1e||(Q1e=1,GXe.exports=function(e){return function(){var t=e,n=t.lib.StreamCipher,r=t.algo,o=[],i=[],a=[],l=r.RabbitLegacy=n.extend({_doReset:function(){var u=this._key.words,c=this.cfg.iv,d=this._X=[u[0],u[3]<<16|u[2]>>>16,u[1],u[0]<<16|u[3]>>>16,u[2],u[1]<<16|u[0]>>>16,u[3],u[2]<<16|u[1]>>>16],f=this._C=[u[2]<<16|u[2]>>>16,4294901760&u[0]|65535&u[1],u[3]<<16|u[3]>>>16,4294901760&u[1]|65535&u[2],u[0]<<16|u[0]>>>16,4294901760&u[2]|65535&u[3],u[1]<<16|u[1]>>>16,4294901760&u[3]|65535&u[0]];this._b=0;for(var p=0;p<4;p++)s.call(this);for(p=0;p<8;p++)f[p]^=d[p+4&7];if(c){var m=c.words,v=m[0],g=m[1],b=16711935&(v<<8|v>>>24)|4278255360&(v<<24|v>>>8),y=16711935&(g<<8|g>>>24)|4278255360&(g<<24|g>>>8),w=b>>>16|4294901760&y,x=y<<16|65535&b;for(f[0]^=b,f[1]^=w,f[2]^=y,f[3]^=x,f[4]^=b,f[5]^=w,f[6]^=y,f[7]^=x,p=0;p<4;p++)s.call(this)}},_doProcessBlock:function(u,c){var d=this._X;s.call(this),o[0]=d[0]^d[5]>>>16^d[3]<<16,o[1]=d[2]^d[7]>>>16^d[5]<<16,o[2]=d[4]^d[1]>>>16^d[7]<<16,o[3]=d[6]^d[3]>>>16^d[1]<<16;for(var f=0;f<4;f++)o[f]=16711935&(o[f]<<8|o[f]>>>24)|4278255360&(o[f]<<24|o[f]>>>8),u[c+f]^=o[f]},blockSize:4,ivSize:2});function s(){for(var u=this._X,c=this._C,d=0;d<8;d++)i[d]=c[d];for(c[0]=c[0]+1295307597+this._b|0,c[1]=c[1]+3545052371+(c[0]>>>0<i[0]>>>0?1:0)|0,c[2]=c[2]+886263092+(c[1]>>>0<i[1]>>>0?1:0)|0,c[3]=c[3]+1295307597+(c[2]>>>0<i[2]>>>0?1:0)|0,c[4]=c[4]+3545052371+(c[3]>>>0<i[3]>>>0?1:0)|0,c[5]=c[5]+886263092+(c[4]>>>0<i[4]>>>0?1:0)|0,c[6]=c[6]+1295307597+(c[5]>>>0<i[5]>>>0?1:0)|0,c[7]=c[7]+3545052371+(c[6]>>>0<i[6]>>>0?1:0)|0,this._b=c[7]>>>0<i[7]>>>0?1:0,d=0;d<8;d++){var f=u[d]+c[d],p=65535&f,m=f>>>16,v=((p*p>>>17)+p*m>>>15)+m*m,g=((4294901760&f)*f|0)+((65535&f)*f|0);a[d]=v^g}u[0]=a[0]+(a[7]<<16|a[7]>>>16)+(a[6]<<16|a[6]>>>16)|0,u[1]=a[1]+(a[0]<<8|a[0]>>>24)+a[7]|0,u[2]=a[2]+(a[1]<<16|a[1]>>>16)+(a[0]<<16|a[0]>>>16)|0,u[3]=a[3]+(a[2]<<8|a[2]>>>24)+a[1]|0,u[4]=a[4]+(a[3]<<16|a[3]>>>16)+(a[2]<<16|a[2]>>>16)|0,u[5]=a[5]+(a[4]<<8|a[4]>>>24)+a[3]|0,u[6]=a[6]+(a[5]<<16|a[5]>>>16)+(a[4]<<16|a[4]>>>16)|0,u[7]=a[7]+(a[6]<<8|a[6]>>>24)+a[5]|0}t.RabbitLegacy=n._createHelper(l)}(),e.RabbitLegacy}(kr(),D1(),O1(),Dp(),Zi())),qXe());let eve,tve,nve,rve,ove,ive,ave,lve,OP,sve,uve,cve,dve,fve,pve,hve,vve,mve,gve,yve,bve,Ave,wve,xve,_ve,Eve,Cve;UDe=_l(X0e.exports),Hw=()=>({uploadUrl:"http://localhost:48080/admin-api/infra/file/upload",httpRequest:async e=>new Promise((t,n)=>{var r;(r={file:e.file},No.upload({url:"/infra/file/upload",data:r})).then(o=>{o.code===0?t(o):n(o)}).catch(o=>{n(o)})})}),Cw=()=>{const{t:e}=hc();return{info(t){El.info(t)},error(t){El.error(t)},success(t){El.success(t)},warning(t){El.warning(t)},alert(t){gc.alert(t,e("common.confirmTitle"))},alertError(t){gc.alert(t,e("common.confirmTitle"),{type:"error"})},alertSuccess(t){gc.alert(t,e("common.confirmTitle"),{type:"success"})},alertWarning(t){gc.alert(t,e("common.confirmTitle"),{type:"warning"})},notify(t){$d.info(t)},notifyError(t){$d.error(t)},notifySuccess(t){$d.success(t)},notifyWarning(t){$d.warning(t)},confirm:(t,n)=>gc.confirm(t,n||e("common.confirmTitle"),{confirmButtonText:e("common.ok"),cancelButtonText:e("common.cancel"),type:"warning"}),delConfirm:(t,n)=>gc.confirm(t||e("common.delMessage"),n||e("common.confirmTitle"),{confirmButtonText:e("common.ok"),cancelButtonText:e("common.cancel"),type:"warning"}),exportConfirm:(t,n)=>gc.confirm(t||e("common.exportMessage"),n||e("common.confirmTitle"),{confirmButtonText:e("common.ok"),cancelButtonText:e("common.cancel"),type:"warning"}),prompt:(t,n)=>gc.prompt(t,n,{confirmButtonText:e("common.ok"),cancelButtonText:e("common.cancel"),type:"warning"})}},eve={class:"upload-box"},tve=["src"],nve={key:0},rve={key:0},ove={key:0},ive={key:1,class:"upload-empty"},ave={class:"el-upload__tip"},lve=Te({name:"UploadImg",__name:"UploadImg",props:{modelValue:Xn.string.def(""),drag:Xn.bool.def(!0),disabled:Xn.bool.def(!1),fileSize:Xn.number.def(5),fileType:Xn.array.def(["image/jpeg","image/png","image/gif"]),height:Xn.string.def("150px"),width:Xn.string.def("150px"),borderradius:Xn.string.def("8px"),showDelete:Xn.bool.def(!0),showBtnText:Xn.bool.def(!0)},emits:["update:modelValue"],setup(e,{emit:t}){IM(m=>({"6d5e56db":e.width,"249d8ab2":e.height,"020e7509":e.borderradius}));const n=e,{t:r}=hc(),o=Cw(),i=de("id-"+ZQ()),a=t,l=()=>{a("update:modelValue","")},{uploadUrl:s,httpRequest:u}=Hw(),c=()=>{const m=document.querySelector(`#${i.value} .el-upload__input`);m&&m.dispatchEvent(new MouseEvent("click"))},d=m=>{const v=m.size/1024/1024<n.fileSize,g=n.fileType;return g.includes(m.type)||o.notifyWarning("\u4E0A\u4F20\u56FE\u7247\u4E0D\u7B26\u5408\u6240\u9700\u7684\u683C\u5F0F\uFF01"),v||o.notifyWarning(`\u4E0A\u4F20\u56FE\u7247\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7 ${n.fileSize}M\uFF01`),g.includes(m.type)&&v},f=m=>{o.success("\u4E0A\u4F20\u6210\u529F"),a("update:modelValue",m.data)},p=()=>{o.notifyError("\u56FE\u7247\u4E0A\u4F20\u5931\u8D25\uFF0C\u8BF7\u60A8\u91CD\u65B0\u4E0A\u4F20\uFF01")};return(m,v)=>{const g=mm,b=Am;return Y(),fe("div",eve,[ie(b,{id:M(i),accept:e.fileType.join(","),action:M(s),"before-upload":d,class:oe(["upload",e.drag?"no-border":""]),disabled:e.disabled,drag:e.drag,"http-request":M(u),multiple:!1,"on-error":p,"on-success":f,"show-file-list":!1},{default:he(()=>[e.modelValue?(Y(),fe(bt,{key:0},[ce("img",{src:e.modelValue,class:"upload-image"},null,8,tve),ce("div",{class:"upload-handle",onClick:v[1]||(v[1]=Gt(()=>{},["stop"]))},[e.disabled?Fe("",!0):(Y(),fe("div",{key:0,class:"handle-icon",onClick:c},[ie(g,{icon:"ep:edit"}),e.showBtnText?(Y(),fe("span",nve,Ye(M(r)("action.edit")),1)):Fe("",!0)])),ce("div",{class:"handle-icon",onClick:v[0]||(v[0]=y=>{QQ({zIndex:9999999,urlList:[e.modelValue]})})},[ie(g,{icon:"ep:zoom-in"}),e.showBtnText?(Y(),fe("span",rve,Ye(M(r)("action.detail")),1)):Fe("",!0)]),e.showDelete&&!e.disabled?(Y(),fe("div",{key:1,class:"handle-icon",onClick:l},[ie(g,{icon:"ep:delete"}),e.showBtnText?(Y(),fe("span",ove,Ye(M(r)("action.del")),1)):Fe("",!0)])):Fe("",!0)])],64)):(Y(),fe("div",ive,[ft(m.$slots,"empty",{},()=>[ie(g,{icon:"ep:plus"})],!0)]))]),_:3},8,["id","accept","action","class","disabled","drag","http-request"]),ce("div",ave,[ft(m.$slots,"tip",{},void 0,!0)])])}}}),PQ=Ew(lve,[["__scopeId","data-v-a1738e95"]]),OP=e=>(xw("data-v-4f29753c"),e=e(),_w(),e),sve={class:"upload-box"},uve={class:"upload-empty"},cve=["src"],dve=["onClick"],fve=OP(()=>ce("span",null,"\u67E5\u770B",-1)),pve=["onClick"],hve=OP(()=>ce("span",null,"\u5220\u9664",-1)),vve={class:"el-upload__tip"},mve=Te({name:"UploadImgs",__name:"UploadImgs",props:{modelValue:Xn.oneOfType([String,Array]).isRequired,drag:Xn.bool.def(!0),disabled:Xn.bool.def(!1),limit:Xn.number.def(5),fileSize:Xn.number.def(5),fileType:Xn.array.def(["image/jpeg","image/png","image/gif"]),height:Xn.string.def("150px"),width:Xn.string.def("150px"),borderradius:Xn.string.def("8px")},emits:["update:modelValue"],setup(e,{emit:t}){IM(b=>({"7cb317ca":e.borderradius,"28096fee":e.width,"799ebf44":e.height}));const n=Cw(),r=e,{uploadUrl:o,httpRequest:i}=Hw(),a=de([]),l=de(0),s=de([]),u=b=>{const y=b.size/1024/1024<r.fileSize,w=r.fileType;return w.includes(b.type)||$d({title:"\u6E29\u99A8\u63D0\u793A",message:"\u4E0A\u4F20\u56FE\u7247\u4E0D\u7B26\u5408\u6240\u9700\u7684\u683C\u5F0F\uFF01",type:"warning"}),y||$d({title:"\u6E29\u99A8\u63D0\u793A",message:`\u4E0A\u4F20\u56FE\u7247\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7 ${r.fileSize}M\uFF01`,type:"warning"}),l.value++,w.includes(b.type)&&y},c=t,d=b=>{n.success("\u4E0A\u4F20\u6210\u529F");const y=a.value.findIndex(w=>{var x;return((x=w.response)==null?void 0:x.data)===b.data});a.value.splice(y,1),s.value.push({name:b.data,url:b.data}),s.value.length==l.value&&(a.value.push(...s.value),s.value=[],l.value=0,f())};Je(()=>r.modelValue,b=>{b?(a.value=[],a.value.push(...b.map(y=>({name:y.substring(y.lastIndexOf("/")+1),url:y})))):a.value=[]},{immediate:!0,deep:!0});const f=()=>{let b=a.value.map(y=>y.url);c("update:modelValue",b)},p=()=>{$d({title:"\u6E29\u99A8\u63D0\u793A",message:"\u56FE\u7247\u4E0A\u4F20\u5931\u8D25\uFF0C\u8BF7\u60A8\u91CD\u65B0\u4E0A\u4F20\uFF01",type:"error"})},m=()=>{$d({title:"\u6E29\u99A8\u63D0\u793A",message:`\u5F53\u524D\u6700\u591A\u53EA\u80FD\u4E0A\u4F20 ${r.limit} \u5F20\u56FE\u7247\uFF0C\u8BF7\u79FB\u9664\u540E\u4E0A\u4F20\uFF01`,type:"warning"})},v=de(""),g=de(!1);return(b,y)=>{const w=mm,x=Am,_=qO;return Y(),fe("div",sve,[ie(x,{"file-list":M(a),"onUpdate:fileList":y[1]||(y[1]=E=>Jn(a)?a.value=E:null),accept:e.fileType.join(","),action:M(o),"before-upload":u,class:oe(["upload",e.drag?"no-border":""]),disabled:e.disabled,drag:e.drag,"http-request":M(i),limit:e.limit,multiple:!0,"on-error":p,"on-exceed":m,"on-success":d,"list-type":"picture-card"},{file:he(({file:E})=>[ce("img",{src:E.url,class:"upload-image"},null,8,cve),ce("div",{class:"upload-handle",onClick:y[0]||(y[0]=Gt(()=>{},["stop"]))},[ce("div",{class:"handle-icon",onClick:C=>{return T=E,v.value=T.url,void(g.value=!0);var T}},[ie(w,{icon:"ep:zoom-in"}),fve],8,dve),e.disabled?Fe("",!0):(Y(),fe("div",{key:0,class:"handle-icon",onClick:C=>{return T=E,a.value=a.value.filter(k=>k.url!==T.url||k.name!==T.name),void c("update:modelValue",a.value.map(k=>k.url));var T}},[ie(w,{icon:"ep:delete"}),hve],8,pve))])]),default:he(()=>[ce("div",uve,[ft(b.$slots,"empty",{},()=>[ie(w,{icon:"ep:plus"})],!0)])]),_:3},8,["file-list","accept","action","class","disabled","drag","http-request","limit"]),ce("div",vve,[ft(b.$slots,"tip",{},void 0,!0)]),M(g)?(Y(),Le(_,{key:0,"url-list":[M(v)],onClose:y[2]||(y[2]=E=>g.value=!1)},null,8,["url-list"])):Fe("",!0)])}}}),LQ=Ew(mve,[["__scopeId","data-v-4f29753c"]]),gve={class:"upload-file"},yve={style:{"font-size":"8px"}},bve={style:{color:"#f56c6c"}},Ave={style:{"font-size":"8px"}},wve={style:{color:"#f56c6c"}},xve={class:"flex items-center"},_ve={class:"ml-10px"},Eve={class:"ml-10px"},Cve=Te({name:"UploadFile",__name:"UploadFile",props:{modelValue:Xn.oneOfType([String,Array]).isRequired,fileType:Xn.array.def(["doc","xls","ppt","txt","pdf"]),fileSize:Xn.number.def(5),limit:Xn.number.def(5),autoUpload:Xn.bool.def(!0),drag:Xn.bool.def(!1),isShowTip:Xn.bool.def(!0),disabled:Xn.bool.def(!1)},emits:["update:modelValue"],setup(e,{emit:t}){const n=Cw(),r=t,o=e,i=de(),a=de([]),l=de([]),s=de(0),{uploadUrl:u,httpRequest:c}=Hw(),d=y=>{if(l.value.length>=o.limit)return n.error(`\u4E0A\u4F20\u6587\u4EF6\u6570\u91CF\u4E0D\u80FD\u8D85\u8FC7${o.limit}\u4E2A!`),!1;let w="";y.name.lastIndexOf(".")>-1&&(w=y.name.slice(y.name.lastIndexOf(".")+1));const x=o.fileType.some(E=>y.type.indexOf(E)>-1||!!(w&&w.indexOf(E)>-1)),_=y.size<1024*o.fileSize*1024;return x?_?(n.success("\u6B63\u5728\u4E0A\u4F20\u6587\u4EF6\uFF0C\u8BF7\u7A0D\u5019..."),void s.value++):(n.error(`\u4E0A\u4F20\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7${o.fileSize}MB!`),!1):(n.error(`\u6587\u4EF6\u683C\u5F0F\u4E0D\u6B63\u786E, \u8BF7\u4E0A\u4F20${o.fileType.join("/")}\u683C\u5F0F!`),!1)},f=y=>{n.success("\u4E0A\u4F20\u6210\u529F");const w=l.value.findIndex(x=>{var _;return((_=x.response)==null?void 0:_.data)===y.data});l.value.splice(w,1),a.value.push({name:y.data,url:y.data}),a.value.length==s.value&&(l.value.push(...a.value),a.value=[],s.value=0,b())},p=()=>{n.error(`\u4E0A\u4F20\u6587\u4EF6\u6570\u91CF\u4E0D\u80FD\u8D85\u8FC7${o.limit}\u4E2A!`)},m=()=>{n.error("\u5BFC\u5165\u6570\u636E\u5931\u8D25\uFF0C\u8BF7\u60A8\u91CD\u65B0\u4E0A\u4F20\uFF01")},v=y=>{const w=l.value.map(x=>x.name).indexOf(y.name);w>-1&&(l.value.splice(w,1),b())},g=y=>{console.log(y)};Je(()=>o.modelValue,y=>{y?(l.value=[],Eb(y)?l.value.push(...y.split(",").map(w=>({name:w.substring(w.lastIndexOf("/")+1),url:w}))):l.value.push(...y.map(w=>({name:w.substring(w.lastIndexOf("/")+1),url:w})))):l.value=[]},{immediate:!0,deep:!0});const b=()=>{let y=l.value.map(w=>w.url);(o.limit===1||Eb(o.modelValue))&&(y=y.join(",")),r("update:modelValue",y)};return(y,w)=>{const x=mm,_=Sa,E=yQ,C=Am;return Y(),fe("div",gve,[ie(C,{ref_key:"uploadRef",ref:i,"file-list":M(l),"onUpdate:fileList":w[0]||(w[0]=T=>Jn(l)?l.value=T:null),action:M(u),"auto-upload":e.autoUpload,"before-upload":d,disabled:e.disabled,drag:e.drag,"http-request":M(c),limit:o.limit,multiple:o.limit>1,"on-error":m,"on-exceed":p,"on-preview":g,"on-remove":v,"on-success":f,"show-file-list":!0,class:"upload-file-uploader",name:"file"},Ff({file:he(T=>[ce("div",xve,[ce("span",null,Ye(T.file.name),1),ce("div",_ve,[ie(E,{href:T.file.url,underline:!1,download:"",target:"_blank",type:"primary"},{default:he(()=>[Dt(" \u4E0B\u8F7D ")]),_:2},1032,["href"])]),ce("div",Eve,[ie(_,{link:"",type:"danger",onClick:k=>v(T.file)},{default:he(()=>[Dt(" \u5220\u9664")]),_:2},1032,["onClick"])])])]),default:he(()=>[e.disabled?Fe("",!0):(Y(),Le(_,{key:0,type:"primary"},{default:he(()=>[ie(x,{icon:"ep:upload-filled"}),Dt(" \u9009\u53D6\u6587\u4EF6 ")]),_:1}))]),_:2},[e.isShowTip&&!e.disabled?{name:"tip",fn:he(()=>[ce("div",yve,[Dt(" \u5927\u5C0F\u4E0D\u8D85\u8FC7 "),ce("b",bve,Ye(e.fileSize)+"MB",1)]),ce("div",Ave,[Dt(" \u683C\u5F0F\u4E3A "),ce("b",wve,Ye(e.fileType.join("/")),1),Dt(" \u7684\u6587\u4EF6 ")])]),key:"0"}:void 0]),1032,["file-list","action","auto-upload","disabled","drag","http-request","limit","multiple"])])}}}),jQ=Ew(Cve,[["__scopeId","data-v-8d835371"]]);function R_(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!oo(e)}const TP=e=>Te({name:e.name,props:{labelField:{type:String,default:()=>e.labelField??"label"},valueField:{type:String,default:()=>e.valueField??"value"},url:{type:String,default:()=>e.url??""},method:{type:String,default:"GET"},parseFunc:{type:String,default:""},data:{type:String,default:""},selectType:{type:String,default:"select"},multiple:{type:Boolean,default:!1},remote:{type:Boolean,default:!1},remoteField:{type:String,default:"label"}},setup(t){const n=yc(),r=de([]),o=de(!1),i=de(),a=async()=>{if(r.value=[],!xb(t.url))switch(t.method){case"GET":let m=t.url;t.remote&&(m=`${m}?${t.remoteField}=${i.value}`),l(await No.get({url:m}));break;case"POST":const v=function(g){try{return JSON.parse(g)}catch{return console.error(`str[${g}] \u4E0D\u662F\u4E00\u4E2A JSON \u5B57\u7B26\u4E32`),""}}(t.data);t.remote&&(v[t.remoteField]=i.value),l(await No.post({url:t.url,data:v}))}};function l(m){var v;xb(t.parseFunc)?Array.isArray(m)||(m=m.list)&&Array.isArray(m)?s(m):console.warn(`\u63A5\u53E3[${t.url}] \u8FD4\u56DE\u7ED3\u679C\u4E0D\u662F iailab-plat \u6807\u51C6\u8FD4\u56DE\u5EFA\u8BAE\u91C7\u7528\u81EA\u5B9A\u4E49\u89E3\u6790\u51FD\u6570\u5904\u7406`):r.value=(v=function(){let g=null;return t.parseFunc&&(g=new Function(`return ${t.parseFunc}`)()),g}())==null?void 0:v(m)}function s(m){Array.isArray(m)?r.value=m.map(v=>({label:u(v,t.labelField),value:u(v,t.valueField)})):console.warn(`\u63A5\u53E3[${t.url}] \u8FD4\u56DE\u7ED3\u679C\u4E0D\u662F\u4E00\u4E2A\u6570\u7EC4`)}function u(m,v){return v.indexOf("${")===-1?m[v]:v.replace(/\$\{([^}]*)}/g,(g,b)=>{const y=m[b.trim()];return y||console.warn(`\u63A5\u53E3\u9009\u62E9\u5668\u9009\u9879\u6A21\u7248[${v}][${b.trim()}] \u89E3\u6790\u503C\u5931\u8D25\u7ED3\u679C\u4E3A[${y}], \u8BF7\u68C0\u67E5\u5C5E\u6027\u540D\u79F0\u662F\u5426\u5B58\u5728\u4E8E\u63A5\u53E3\u8FD4\u56DE\u503C\u4E2D,\u5B58\u5728\u5219\u5FFD\u7565\u6B64\u6761\uFF01\uFF01\uFF01`),y})}const c=async m=>{if(m){o.value=!0;try{i.value=m,await a()}finally{o.value=!1}}};yn(async()=>{await a()});const d=()=>{let m;if(t.multiple){let v;return ie(Qe("el-select"),Un({class:"w-1/1",multiple:!0,loading:o.value},n,{remote:t.remote},t.remote&&{remoteMethod:c}),R_(v=r.value.map((g,b)=>ie(Qe("el-option"),{key:b,label:g.label,value:g.value},null)))?v:{default:()=>[v]})}return ie(Qe("el-select"),Un({class:"w-1/1",loading:o.value},n,{remote:t.remote},t.remote&&{remoteMethod:c}),R_(m=r.value.map((v,g)=>ie(Qe("el-option"),{key:g,label:v.label,value:v.value},null)))?m:{default:()=>[m]})},f=()=>{let m;return xb(r.value)&&(r.value=[{label:"\u9009\u98791",value:"\u9009\u98791"},{label:"\u9009\u98792",value:"\u9009\u98792"}]),ie(Qe("el-checkbox-group"),Un({class:"w-1/1"},n),R_(m=r.value.map((v,g)=>ie(Qe("el-checkbox"),{key:g,label:v.label,value:v.value},null)))?m:{default:()=>[m]})},p=()=>{let m;return xb(r.value)&&(r.value=[{label:"\u9009\u98791",value:"\u9009\u98791"},{label:"\u9009\u98792",value:"\u9009\u98792"}]),ie(Qe("el-radio-group"),Un({class:"w-1/1"},n),R_(m=r.value.map((v,g)=>ie(Qe("el-radio"),{key:g,value:v.value},{default:()=>[v.label]})))?m:{default:()=>[m]})};return()=>ie(bt,null,[t.selectType==="select"?d():t.selectType==="radio"?p():t.selectType==="checkbox"?f():d()])}});var eo=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function T1(e){var t={exports:{}};return e(t,t.exports),t.exports}var Op,I_,B_=function(e){return e&&e.Math==Math&&e},Yn=B_(typeof globalThis=="object"&&globalThis)||B_(typeof window=="object"&&window)||B_(typeof self=="object"&&self)||B_(typeof eo=="object"&&eo)||function(){return this}()||Function("return this")(),MP=Function.prototype,Sve=MP.apply,KXe=MP.bind,kve=MP.call,Dve=typeof Reflect=="object"&&Reflect.apply||(KXe?kve.bind(Sve):function(){return kve.apply(Sve,arguments)}),Ove=Function.prototype,NP=Ove.bind,FP=Ove.call,YXe=NP&&NP.bind(FP),so=NP?function(e){return e&&YXe(FP,e)}:function(e){return e&&function(){return FP.apply(e,arguments)}},Aa=function(e){return typeof e=="function"},Ll=function(e){try{return!!e()}catch{return!0}},jl=!Ll(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),X4=Function.prototype.call,As=X4.bind?X4.bind(X4):function(){return X4.apply(X4,arguments)},Tve={}.propertyIsEnumerable,Mve=Object.getOwnPropertyDescriptor,XXe=Mve&&!Tve.call({1:2},1)?function(e){var t=Mve(this,e);return!!t&&t.enumerable}:Tve,RP={f:XXe},Uu=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},QXe=so({}.toString),JXe=so("".slice),M1=function(e){return JXe(QXe(e),8,-1)},IP=Yn.Object,ZXe=so("".split),Nve=Ll(function(){return!IP("z").propertyIsEnumerable(0)})?function(e){return M1(e)=="String"?ZXe(e,""):IP(e)}:IP,eQe=Yn.TypeError,BP=function(e){if(e==null)throw eQe("Can't call method on "+e);return e},$c=function(e){return Nve(BP(e))},ou=function(e){return typeof e=="object"?e!==null:Aa(e)},ws={},Fve=function(e){return Aa(e)?e:void 0},n2=function(e,t){return arguments.length<2?Fve(ws[e])||Fve(Yn[e]):ws[e]&&ws[e][t]||Yn[e]&&Yn[e][t]},Q4=so({}.isPrototypeOf),PP=n2("navigator","userAgent")||"",Rve=Yn.process,Ive=Yn.Deno,Bve=Rve&&Rve.versions||Ive&&Ive.version,Pve=Bve&&Bve.v8;Pve&&(I_=(Op=Pve.split("."))[0]>0&&Op[0]<4?1:+(Op[0]+Op[1])),!I_&&PP&&(!(Op=PP.match(/Edge\/(\d+)/))||Op[1]>=74)&&(Op=PP.match(/Chrome\/(\d+)/))&&(I_=+Op[1]);var P_,L_=I_,Uc=!!Object.getOwnPropertySymbols&&!Ll(function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&L_&&L_<41}),LP=Uc&&!Symbol.sham&&typeof Symbol.iterator=="symbol",tQe=Yn.Object,r2=LP?function(e){return typeof e=="symbol"}:function(e){var t=n2("Symbol");return Aa(t)&&Q4(t.prototype,tQe(e))},nQe=Yn.String,jP=function(e){try{return nQe(e)}catch{return"Object"}},rQe=Yn.TypeError,VP=function(e){if(Aa(e))return e;throw rQe(jP(e)+" is not a function")},j_=function(e,t){var n=e[t];return n==null?void 0:VP(n)},oQe=Yn.TypeError,iQe=Object.defineProperty,Tp=Yn["__core-js_shared__"]||function(e,t){try{iQe(Yn,e,{value:t,configurable:!0,writable:!0})}catch{Yn[e]=t}return t}("__core-js_shared__",{}),N1=T1(function(e){(e.exports=function(t,n){return Tp[t]||(Tp[t]=n!==void 0?n:{})})("versions",[]).push({version:"3.19.3",mode:"pure",copyright:"\xA9 2021 Denis Pushkarev (zloirock.ru)"})}),aQe=Yn.Object,J4=function(e){return aQe(BP(e))},lQe=so({}.hasOwnProperty),_r=Object.hasOwn||function(e,t){return lQe(J4(e),t)},sQe=0,uQe=Math.random(),cQe=so(1 .toString),V_=function(e){return"Symbol("+(e===void 0?"":e)+")_"+cQe(++sQe+uQe,36)},Z4=N1("wks"),F1=Yn.Symbol,Lve=F1&&F1.for,dQe=LP?F1:F1&&F1.withoutSetter||V_,Na=function(e){if(!_r(Z4,e)||!Uc&&typeof Z4[e]!="string"){var t="Symbol."+e;Uc&&_r(F1,e)?Z4[e]=F1[e]:Z4[e]=LP&&Lve?Lve(t):dQe(t)}return Z4[e]},fQe=Yn.TypeError,pQe=Na("toPrimitive"),o2=function(e){var t=function(n,r){if(!ou(n)||r2(n))return n;var o,i=j_(n,pQe);if(i){if(o=As(i,n,r),!ou(o)||r2(o))return o;throw fQe("Can't convert object to primitive value")}return function(a){var l,s;if(Aa(l=a.toString)&&!ou(s=As(l,a))||Aa(l=a.valueOf)&&!ou(s=As(l,a)))return s;throw oQe("Can't convert object to primitive value")}(n)}(e,"string");return r2(t)?t:t+""},zP=Yn.document,hQe=ou(zP)&&ou(zP.createElement),jve=function(e){return hQe?zP.createElement(e):{}},Vve=!jl&&!Ll(function(){return Object.defineProperty(jve("div"),"a",{get:function(){return 7}}).a!=7}),zve=Object.getOwnPropertyDescriptor,vQe=jl?zve:function(e,t){if(e=$c(e),t=o2(t),Vve)try{return zve(e,t)}catch{}if(_r(e,t))return Uu(!As(RP.f,e,t),e[t])},z_={f:vQe},mQe=/#|\.prototype\./,e6=function(e,t){var n=yQe[gQe(e)];return n==AQe||n!=bQe&&(Aa(t)?Ll(t):!!t)},gQe=e6.normalize=function(e){return String(e).replace(mQe,".").toLowerCase()},yQe=e6.data={},bQe=e6.NATIVE="N",AQe=e6.POLYFILL="P",wQe=e6,Hve=so(so.bind),HP=function(e,t){return VP(e),t===void 0?e:Hve?Hve(e,t):function(){return e.apply(t,arguments)}},xQe=Yn.String,_Qe=Yn.TypeError,xs=function(e){if(ou(e))return e;throw _Qe(xQe(e)+" is not an object")},EQe=Yn.TypeError,$ve=Object.defineProperty,CQe=jl?$ve:function(e,t,n){if(xs(e),t=o2(t),xs(n),Vve)try{return $ve(e,t,n)}catch{}if("get"in n||"set"in n)throw EQe("Accessors not supported");return"value"in n&&(e[t]=n.value),e},Mp={f:CQe},ll=jl?function(e,t,n){return Mp.f(e,t,Uu(1,n))}:function(e,t,n){return e[t]=n,e},SQe=z_.f,kQe=function(e){var t=function(n,r,o){if(this instanceof t){switch(arguments.length){case 0:return new e;case 1:return new e(n);case 2:return new e(n,r)}return new e(n,r,o)}return Dve(e,this,arguments)};return t.prototype=e.prototype,t},Qd=function(e,t){var n,r,o,i,a,l,s,u,c=e.target,d=e.global,f=e.stat,p=e.proto,m=d?Yn:f?Yn[c]:(Yn[c]||{}).prototype,v=d?ws:ws[c]||ll(ws,c,{})[c],g=v.prototype;for(o in t)n=!wQe(d?o:c+(f?".":"#")+o,e.forced)&&m&&_r(m,o),a=v[o],n&&(l=e.noTargetGet?(u=SQe(m,o))&&u.value:m[o]),i=n&&l?l:t[o],n&&typeof a==typeof i||(s=e.bind&&n?HP(i,Yn):e.wrap&&n?kQe(i):p&&Aa(i)?so(i):i,(e.sham||i&&i.sham||a&&a.sham)&&ll(s,"sham",!0),ll(v,o,s),p&&(_r(ws,r=c+"Prototype")||ll(ws,r,{}),ll(ws[r],o,i),e.real&&g&&!g[o]&&ll(g,o,i)))},Uve=N1("keys"),H_=function(e){return Uve[e]||(Uve[e]=V_(e))},DQe=!Ll(function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}),Wve=H_("IE_PROTO"),$P=Yn.Object,OQe=$P.prototype,$_=DQe?$P.getPrototypeOf:function(e){var t=J4(e);if(_r(t,Wve))return t[Wve];var n=t.constructor;return Aa(n)&&t instanceof n?n.prototype:t instanceof $P?OQe:null},TQe=Yn.String,MQe=Yn.TypeError,U_=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=so(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),t=n instanceof Array}catch{}return function(r,o){return xs(r),function(i){if(typeof i=="object"||Aa(i))return i;throw MQe("Can't set "+TQe(i)+" as a prototype")}(o),t?e(r,o):r.__proto__=o,r}}():void 0),NQe=Math.ceil,FQe=Math.floor,UP=function(e){var t=+e;return t!=t||t===0?0:(t>0?FQe:NQe)(t)},RQe=Math.max,IQe=Math.min,WP=function(e,t){var n=UP(e);return n<0?RQe(n+t,0):IQe(n,t)},BQe=Math.min,t6=function(e){return(t=e.length)>0?BQe(UP(t),9007199254740991):0;var t},Gve=function(e){return function(t,n,r){var o,i=$c(t),a=t6(i),l=WP(r,a);if(e&&n!=n){for(;a>l;)if((o=i[l++])!=o)return!0}else for(;a>l;l++)if((e||l in i)&&i[l]===n)return e||l||0;return!e&&-1}},PQe={includes:Gve(!0),indexOf:Gve(!1)},n6={},LQe=PQe.indexOf,qve=so([].push),Kve=function(e,t){var n,r=$c(e),o=0,i=[];for(n in r)!_r(n6,n)&&_r(r,n)&&qve(i,n);for(;t.length>o;)_r(r,n=t[o++])&&(~LQe(i,n)||qve(i,n));return i},W_=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],jQe=W_.concat("length","prototype"),VQe=Object.getOwnPropertyNames||function(e){return Kve(e,jQe)},GP={f:VQe},G_={f:Object.getOwnPropertySymbols},zQe=so([].concat),HQe=n2("Reflect","ownKeys")||function(e){var t=GP.f(xs(e)),n=G_.f;return n?zQe(t,n(e)):t},qP=Object.keys||function(e){return Kve(e,W_)},$Qe=jl?Object.defineProperties:function(e,t){xs(e);for(var n,r=$c(t),o=qP(t),i=o.length,a=0;i>a;)Mp.f(e,n=o[a++],r[n]);return e},UQe=n2("document","documentElement"),Yve=H_("IE_PROTO"),KP=function(){},Xve=function(e){return"<script>"+e+"<\/script>"},Qve=function(e){e.write(Xve("")),e.close();var t=e.parentWindow.Object;return e=null,t},q_=function(){try{P_=new ActiveXObject("htmlfile")}catch{}var e,t;q_=typeof document<"u"?document.domain&&P_?Qve(P_):((t=jve("iframe")).style.display="none",UQe.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write(Xve("document.F=Object")),e.close(),e.F):Qve(P_);for(var n=W_.length;n--;)delete q_.prototype[W_[n]];return q_()};n6[Yve]=!0;var Jd=Object.create||function(e,t){var n;return e!==null?(KP.prototype=xs(e),n=new KP,KP.prototype=null,n[Yve]=e):n=q_(),t===void 0?n:$Qe(n,t)},YP=function(e,t,n){var r=o2(t);r in e?Mp.f(e,r,Uu(0,n)):e[r]=n},WQe=Yn.Array,GQe=Math.max,Jve=function(e,t,n){for(var r=t6(e),o=WP(t,r),i=WP(r,r),a=WQe(GQe(i-o,0)),l=0;o<i;o++,l++)YP(a,l,e[o]);return a.length=l,a},qQe=so("".replace),KQe=so("".split),YQe=so([].join),XP=String(Error("zxcasd").stack),Zve=/\n\s*at [^:]*:[^\n]*/,XQe=Zve.test(XP),QQe=/@[^\n]*\n/.test(XP)&&!/zxcasd/.test(XP),Zd={},JQe=Na("iterator"),ZQe=Array.prototype,eme={};eme[Na("toStringTag")]="z";var QP=String(eme)==="[object z]",eJe=Na("toStringTag"),tJe=Yn.Object,nJe=M1(function(){return arguments}())=="Arguments",r6=QP?M1:function(e){var t,n,r;return e===void 0?"Undefined":e===null?"Null":typeof(n=function(o,i){try{return o[i]}catch{}}(t=tJe(e),eJe))=="string"?n:nJe?M1(t):(r=M1(t))=="Object"&&Aa(t.callee)?"Arguments":r},rJe=Na("iterator"),tme=function(e){if(e!=null)return j_(e,rJe)||j_(e,"@@iterator")||Zd[r6(e)]},oJe=Yn.TypeError,nme=function(e,t,n){var r,o;xs(e);try{if(!(r=j_(e,"return"))){if(t==="throw")throw n;return n}r=As(r,e)}catch(i){o=!0,r=i}if(t==="throw")throw n;if(o)throw r;return xs(r),n},iJe=Yn.TypeError,K_=function(e,t){this.stopped=e,this.result=t},rme=K_.prototype,aJe=Yn.String,o6=function(e){if(r6(e)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return aJe(e)},lJe=!Ll(function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",Uu(1,7)),e.stack!==7)}),sJe=Na("toStringTag"),Y_=Yn.Error,uJe=[].push,i6=function(e,t){var n,r=arguments.length>2?arguments[2]:void 0,o=Q4(JP,this);U_?n=U_(new Y_(void 0),o?$_(this):JP):(n=o?this:Jd(JP),ll(n,sJe,"Error")),ll(n,"message",function(a,l){return a===void 0?arguments.length<2?"":l:o6(a)}(t,"")),lJe&&ll(n,"stack",function(a,l){if(typeof a!="string")return a;if(XQe)for(;l--;)a=qQe(a,Zve,"");else if(QQe)return YQe(Jve(KQe(a,`
| `),l),`
| `);return a}(n.stack,1)),function(a,l){ou(l)&&"cause"in l&&ll(a,"cause",l.cause)}(n,r);var i=[];return function(a,l,s){var u,c,d,f,p,m,v,g=s&&s.that,b=!(!s||!s.AS_ENTRIES),y=!(!s||!s.IS_ITERATOR),w=!(!s||!s.INTERRUPTED),x=HP(l,g),_=function(C){return u&&nme(u,"normal",C),new K_(!0,C)},E=function(C){return b?(xs(C),w?x(C[0],C[1],_):x(C[0],C[1])):w?x(C,_):x(C)};if(y)u=a;else{if(!(c=tme(a)))throw iJe(jP(a)+" is not iterable");if(function(C){return C!==void 0&&(Zd.Array===C||ZQe[JQe]===C)}(c)){for(d=0,f=t6(a);f>d;d++)if((p=E(a[d]))&&Q4(rme,p))return p;return new K_(!1)}u=function(C,T){var k=arguments.length<2?tme(C):T;if(VP(k))return xs(As(k,C));throw oJe(jP(C)+" is not iterable")}(a,c)}for(m=u.next;!(v=As(m,u)).done;){try{p=E(v.value)}catch(C){nme(u,"throw",C)}if(typeof p=="object"&&p&&Q4(rme,p))return p}new K_(!1)}(e,uJe,{that:i}),ll(n,"errors",i),n};U_?U_(i6,Y_):function(e,t){for(var n=HQe(t),r=Mp.f,o=z_.f,i=0;i<n.length;i++){var a=n[i];_r(e,a)||r(e,a,o(t,a))}}(i6,Y_);var JP=i6.prototype=Jd(Y_.prototype,{constructor:Uu(1,i6),message:Uu(1,""),name:Uu(1,"AggregateError")});Qd({global:!0},{AggregateError:i6});var cJe=so(Function.toString);Aa(Tp.inspectSource)||(Tp.inspectSource=function(e){return cJe(e)});var X_,a6,Q_,ome=Tp.inspectSource,ime=Yn.WeakMap,dJe=Aa(ime)&&/native code/.test(ome(ime)),ZP=Yn.TypeError,fJe=Yn.WeakMap;if(dJe||Tp.state){var R1=Tp.state||(Tp.state=new fJe),pJe=so(R1.get),ame=so(R1.has),hJe=so(R1.set);X_=function(e,t){if(ame(R1,e))throw new ZP("Object already initialized");return t.facade=e,hJe(R1,e,t),t},a6=function(e){return pJe(R1,e)||{}},Q_=function(e){return ame(R1,e)}}else{var i2=H_("state");n6[i2]=!0,X_=function(e,t){if(_r(e,i2))throw new ZP("Object already initialized");return t.facade=e,ll(e,i2,t),t},a6=function(e){return _r(e,i2)?e[i2]:{}},Q_=function(e){return _r(e,i2)}}var Np,lme,sme,a2={set:X_,get:a6,has:Q_,enforce:function(e){return Q_(e)?a6(e):X_(e,{})},getterFor:function(e){return function(t){var n;if(!ou(t)||(n=a6(t)).type!==e)throw ZP("Incompatible receiver, "+e+" required");return n}}},ume=Function.prototype,vJe=jl&&Object.getOwnPropertyDescriptor,eL=_r(ume,"name"),mJe={EXISTS:eL,PROPER:eL&&(function(){}).name==="something",CONFIGURABLE:eL&&(!jl||jl&&vJe(ume,"name").configurable)},J_=function(e,t,n,r){ll(e,t,n)},tL=Na("iterator"),cme=!1;[].keys&&("next"in(sme=[].keys())?(lme=$_($_(sme)))!==Object.prototype&&(Np=lme):cme=!0);var gJe=Np==null||Ll(function(){var e={};return Np[tL].call(e)!==e});Np=gJe?{}:Jd(Np),Aa(Np[tL])||J_(Np,tL,function(){return this});var dme={IteratorPrototype:Np,BUGGY_SAFARI_ITERATORS:cme},yJe=QP?{}.toString:function(){return"[object "+r6(this)+"]"},bJe=Mp.f,fme=Na("toStringTag"),Z_=function(e,t,n,r){if(e){var o=n?e:e.prototype;_r(o,fme)||bJe(o,fme,{configurable:!0,value:t}),r&&!QP&&ll(o,"toString",yJe)}},AJe=dme.IteratorPrototype,wJe=function(){return this},xJe=mJe.PROPER,nL=dme.BUGGY_SAFARI_ITERATORS,_Je=Na("iterator"),EJe=function(){return this},pme=function(e,t,n,r,o,i,a){(function(g,b,y){var w=b+" Iterator";g.prototype=Jd(AJe,{next:Uu(1,y)}),Z_(g,w,!1,!0),Zd[w]=wJe})(n,t,r);var l,s,u=function(g){if(g===o&&m)return m;if(!nL&&g in f)return f[g];switch(g){case"keys":case"values":case"entries":return function(){return new n(this,g)}}return function(){return new n(this)}},c=t+" Iterator",d=!1,f=e.prototype,p=f[_Je]||f["@@iterator"]||o&&f[o],m=!nL&&p||u(o),v=t=="Array"&&f.entries||p;return v&&(l=$_(v.call(new e)))!==Object.prototype&&l.next&&(Z_(l,c,!0,!0),Zd[c]=EJe),xJe&&o=="values"&&p&&p.name!=="values"&&(d=!0,m=function(){return As(p,this)}),o&&(s={values:u("values"),keys:u("keys"),entries:u("entries")},a||Qd({target:t,proto:!0,forced:nL||d},s)),Zd[t]=m,s},CJe=a2.set,SJe=a2.getterFor("Array Iterator");pme(Array,"Array",function(e,t){CJe(this,{type:"Array Iterator",target:$c(e),index:0,kind:t})},function(){var e=SJe(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,{value:void 0,done:!0}):n=="keys"?{value:r,done:!1}:n=="values"?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}},"values"),Zd.Arguments=Zd.Array;var kJe=so("".charAt),hme=so("".charCodeAt),DJe=so("".slice),vme=function(e){return function(t,n){var r,o,i=o6(BP(t)),a=UP(n),l=i.length;return a<0||a>=l?e?"":void 0:(r=hme(i,a))<55296||r>56319||a+1===l||(o=hme(i,a+1))<56320||o>57343?e?kJe(i,a):r:e?DJe(i,a,a+2):o-56320+(r-55296<<10)+65536}},OJe=(vme(!1),vme(!0)),TJe=a2.set,MJe=a2.getterFor("String Iterator");pme(String,"String",function(e){TJe(this,{type:"String Iterator",string:o6(e),index:0})},function(){var e,t=MJe(this),n=t.string,r=t.index;return r>=n.length?{value:void 0,done:!0}:(e=OJe(n,r),t.index+=e.length,{value:e,done:!1})});var NJe=ws.AggregateError,mme=Na("toStringTag");for(var rL in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var gme=Yn[rL],oL=gme&&gme.prototype;oL&&r6(oL)!==mme&&ll(oL,mme,rL),Zd[rL]=Zd.Array}var Fp,eE,FJe=NJe,tE=function(e){return e&&e.Math==Math&&e},Pn=tE(typeof globalThis=="object"&&globalThis)||tE(typeof window=="object"&&window)||tE(typeof self=="object"&&self)||tE(typeof eo=="object"&&eo)||function(){return this}()||Function("return this")(),ea=function(e){try{return!!e()}catch{return!0}},Wc=!ea(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),l6=Function.prototype.call,wa=l6.bind?l6.bind(l6):function(){return l6.apply(l6,arguments)},yme={}.propertyIsEnumerable,bme=Object.getOwnPropertyDescriptor,RJe=bme&&!yme.call({1:2},1)?function(e){var t=bme(this,e);return!!t&&t.enumerable}:yme,IJe={f:RJe},Rp=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},Ame=Function.prototype,iL=Ame.bind,aL=Ame.call,BJe=iL&&iL.bind(aL),Kr=iL?function(e){return e&&BJe(aL,e)}:function(e){return e&&function(){return aL.apply(e,arguments)}},PJe=Kr({}.toString),LJe=Kr("".slice),I1=function(e){return LJe(PJe(e),8,-1)},lL=Pn.Object,jJe=Kr("".split),wme=ea(function(){return!lL("z").propertyIsEnumerable(0)})?function(e){return I1(e)=="String"?jJe(e,""):lL(e)}:lL,VJe=Pn.TypeError,nE=function(e){if(e==null)throw VJe("Can't call method on "+e);return e},l2=function(e){return wme(nE(e))},Ri=function(e){return typeof e=="function"},Gc=function(e){return typeof e=="object"?e!==null:Ri(e)},s6=function(e,t){return arguments.length<2?function(n){return Ri(n)?n:void 0}(Pn[e]):Pn[e]&&Pn[e][t]},rE=Kr({}.isPrototypeOf),sL=s6("navigator","userAgent")||"",xme=Pn.process,_me=Pn.Deno,Eme=xme&&xme.versions||_me&&_me.version,Cme=Eme&&Eme.v8;Cme&&(eE=(Fp=Cme.split("."))[0]>0&&Fp[0]<4?1:+(Fp[0]+Fp[1])),!eE&&sL&&(!(Fp=sL.match(/Edge\/(\d+)/))||Fp[1]>=74)&&(Fp=sL.match(/Chrome\/(\d+)/))&&(eE=+Fp[1]);var Sme=eE,uL=!!Object.getOwnPropertySymbols&&!ea(function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&Sme&&Sme<41}),cL=uL&&!Symbol.sham&&typeof Symbol.iterator=="symbol",zJe=Pn.Object,dL=cL?function(e){return typeof e=="symbol"}:function(e){var t=s6("Symbol");return Ri(t)&&rE(t.prototype,zJe(e))},HJe=Pn.String,fL=function(e){try{return HJe(e)}catch{return"Object"}},$Je=Pn.TypeError,pL=function(e){if(Ri(e))return e;throw $Je(fL(e)+" is not a function")},u6=function(e,t){var n=e[t];return n==null?void 0:pL(n)},UJe=Pn.TypeError,WJe=Object.defineProperty,hL=function(e,t){try{WJe(Pn,e,{value:t,configurable:!0,writable:!0})}catch{Pn[e]=t}return t},Ip=Pn["__core-js_shared__"]||hL("__core-js_shared__",{}),vL=T1(function(e){(e.exports=function(t,n){return Ip[t]||(Ip[t]=n!==void 0?n:{})})("versions",[]).push({version:"3.19.3",mode:"global",copyright:"\xA9 2021 Denis Pushkarev (zloirock.ru)"})}),GJe=Pn.Object,mL=function(e){return GJe(nE(e))},qJe=Kr({}.hasOwnProperty),Vl=Object.hasOwn||function(e,t){return qJe(mL(e),t)},KJe=0,YJe=Math.random(),XJe=Kr(1 .toString),kme=function(e){return"Symbol("+(e===void 0?"":e)+")_"+XJe(++KJe+YJe,36)},c6=vL("wks"),B1=Pn.Symbol,Dme=B1&&B1.for,QJe=cL?B1:B1&&B1.withoutSetter||kme,sl=function(e){if(!Vl(c6,e)||!uL&&typeof c6[e]!="string"){var t="Symbol."+e;uL&&Vl(B1,e)?c6[e]=B1[e]:c6[e]=cL&&Dme?Dme(t):QJe(t)}return c6[e]},JJe=Pn.TypeError,ZJe=sl("toPrimitive"),gL=function(e){var t=function(n,r){if(!Gc(n)||dL(n))return n;var o,i=u6(n,ZJe);if(i){if(o=wa(i,n,r),!Gc(o)||dL(o))return o;throw JJe("Can't convert object to primitive value")}return function(a){var l,s;if(Ri(l=a.toString)&&!Gc(s=wa(l,a))||Ri(l=a.valueOf)&&!Gc(s=wa(l,a)))return s;throw UJe("Can't convert object to primitive value")}(n)}(e,"string");return dL(t)?t:t+""},yL=Pn.document,eZe=Gc(yL)&&Gc(yL.createElement),bL=function(e){return eZe?yL.createElement(e):{}},Ome=!Wc&&!ea(function(){return Object.defineProperty(bL("div"),"a",{get:function(){return 7}}).a!=7}),Tme=Object.getOwnPropertyDescriptor,tZe=Wc?Tme:function(e,t){if(e=l2(e),t=gL(t),Ome)try{return Tme(e,t)}catch{}if(Vl(e,t))return Rp(!wa(IJe.f,e,t),e[t])},AL={f:tZe},nZe=Pn.String,rZe=Pn.TypeError,_s=function(e){if(Gc(e))return e;throw rZe(nZe(e)+" is not an object")},oZe=Pn.TypeError,Mme=Object.defineProperty,iZe=Wc?Mme:function(e,t,n){if(_s(e),t=gL(t),_s(n),Ome)try{return Mme(e,t,n)}catch{}if("get"in n||"set"in n)throw oZe("Accessors not supported");return"value"in n&&(e[t]=n.value),e},s2={f:iZe},zl=Wc?function(e,t,n){return s2.f(e,t,Rp(1,n))}:function(e,t,n){return e[t]=n,e},aZe=Kr(Function.toString);Ri(Ip.inspectSource)||(Ip.inspectSource=function(e){return aZe(e)});var oE,d6,iE,wL=Ip.inspectSource,Nme=Pn.WeakMap,lZe=Ri(Nme)&&/native code/.test(wL(Nme)),Fme=vL("keys"),xL=function(e){return Fme[e]||(Fme[e]=kme(e))},_L={},EL=Pn.TypeError,sZe=Pn.WeakMap;if(lZe||Ip.state){var P1=Ip.state||(Ip.state=new sZe),uZe=Kr(P1.get),Rme=Kr(P1.has),cZe=Kr(P1.set);oE=function(e,t){if(Rme(P1,e))throw new EL("Object already initialized");return t.facade=e,cZe(P1,e,t),t},d6=function(e){return uZe(P1,e)||{}},iE=function(e){return Rme(P1,e)}}else{var u2=xL("state");_L[u2]=!0,oE=function(e,t){if(Vl(e,u2))throw new EL("Object already initialized");return t.facade=e,zl(e,u2,t),t},d6=function(e){return Vl(e,u2)?e[u2]:{}},iE=function(e){return Vl(e,u2)}}var L1={set:oE,get:d6,has:iE,enforce:function(e){return iE(e)?d6(e):oE(e,{})},getterFor:function(e){return function(t){var n;if(!Gc(t)||(n=d6(t)).type!==e)throw EL("Incompatible receiver, "+e+" required");return n}}},Ime=Function.prototype,dZe=Wc&&Object.getOwnPropertyDescriptor,CL=Vl(Ime,"name"),SL={EXISTS:CL,PROPER:CL&&(function(){}).name==="something",CONFIGURABLE:CL&&(!Wc||Wc&&dZe(Ime,"name").configurable)},j1=T1(function(e){var t=SL.CONFIGURABLE,n=L1.get,r=L1.enforce,o=String(String).split("String");(e.exports=function(i,a,l,s){var u,c=!!s&&!!s.unsafe,d=!!s&&!!s.enumerable,f=!!s&&!!s.noTargetGet,p=s&&s.name!==void 0?s.name:a;Ri(l)&&(String(p).slice(0,7)==="Symbol("&&(p="["+String(p).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!Vl(l,"name")||t&&l.name!==p)&&zl(l,"name",p),(u=r(l)).source||(u.source=o.join(typeof p=="string"?p:""))),i!==Pn?(c?!f&&i[a]&&(d=!0):delete i[a],d?i[a]=l:zl(i,a,l)):d?i[a]=l:hL(a,l)})(Function.prototype,"toString",function(){return Ri(this)&&n(this).source||wL(this)})}),fZe=Math.ceil,pZe=Math.floor,kL=function(e){var t=+e;return t!=t||t===0?0:(t>0?pZe:fZe)(t)},hZe=Math.max,vZe=Math.min,DL=function(e,t){var n=kL(e);return n<0?hZe(n+t,0):vZe(n,t)},mZe=Math.min,Bme=function(e){return e>0?mZe(kL(e),9007199254740991):0},aE=function(e){return Bme(e.length)},Pme=function(e){return function(t,n,r){var o,i=l2(t),a=aE(i),l=DL(r,a);if(e&&n!=n){for(;a>l;)if((o=i[l++])!=o)return!0}else for(;a>l;l++)if((e||l in i)&&i[l]===n)return e||l||0;return!e&&-1}},gZe=(Pme(!0),Pme(!1)),Lme=Kr([].push),jme=function(e,t){var n,r=l2(e),o=0,i=[];for(n in r)!Vl(_L,n)&&Vl(r,n)&&Lme(i,n);for(;t.length>o;)Vl(r,n=t[o++])&&(~gZe(i,n)||Lme(i,n));return i},lE=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],yZe=lE.concat("length","prototype"),bZe=Object.getOwnPropertyNames||function(e){return jme(e,yZe)},AZe={f:bZe},wZe={f:Object.getOwnPropertySymbols},xZe=Kr([].concat),_Ze=s6("Reflect","ownKeys")||function(e){var t=AZe.f(_s(e)),n=wZe.f;return n?xZe(t,n(e)):t},Vme=function(e,t){for(var n=_Ze(t),r=s2.f,o=AL.f,i=0;i<n.length;i++){var a=n[i];Vl(e,a)||r(e,a,o(t,a))}},EZe=/#|\.prototype\./,f6=function(e,t){var n=SZe[CZe(e)];return n==DZe||n!=kZe&&(Ri(t)?ea(t):!!t)},CZe=f6.normalize=function(e){return String(e).replace(EZe,".").toLowerCase()},SZe=f6.data={},kZe=f6.NATIVE="N",DZe=f6.POLYFILL="P",OZe=f6,TZe=AL.f,p6=function(e,t){var n,r,o,i,a,l=e.target,s=e.global,u=e.stat;if(n=s?Pn:u?Pn[l]||hL(l,{}):(Pn[l]||{}).prototype)for(r in t){if(i=t[r],o=e.noTargetGet?(a=TZe(n,r))&&a.value:n[r],!OZe(s?r:l+(u?".":"#")+r,e.forced)&&o!==void 0){if(typeof i==typeof o)continue;Vme(i,o)}(e.sham||o&&o.sham)&&zl(i,"sham",!0),j1(n,r,i,e)}},zme={};zme[sl("toStringTag")]="z";var sE,OL=String(zme)==="[object z]",MZe=sl("toStringTag"),NZe=Pn.Object,FZe=I1(function(){return arguments}())=="Arguments",uE=OL?I1:function(e){var t,n,r;return e===void 0?"Undefined":e===null?"Null":typeof(n=function(o,i){try{return o[i]}catch{}}(t=NZe(e),MZe))=="string"?n:FZe?I1(t):(r=I1(t))=="Object"&&Ri(t.callee)?"Arguments":r},RZe=Pn.String,V1=function(e){if(uE(e)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return RZe(e)},IZe=function(){var e=_s(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t},TL=Pn.RegExp,ML=ea(function(){var e=TL("a","y");return e.lastIndex=2,e.exec("abcd")!=null}),BZe=ML||ea(function(){return!TL("a","y").sticky}),PZe=ML||ea(function(){var e=TL("^r","gy");return e.lastIndex=2,e.exec("str")!=null}),LZe={BROKEN_CARET:PZe,MISSED_STICKY:BZe,UNSUPPORTED_Y:ML},jZe=Object.keys||function(e){return jme(e,lE)},VZe=Wc?Object.defineProperties:function(e,t){_s(e);for(var n,r=l2(t),o=jZe(t),i=o.length,a=0;i>a;)s2.f(e,n=o[a++],r[n]);return e},zZe=s6("document","documentElement"),Hme=xL("IE_PROTO"),NL=function(){},$me=function(e){return"<script>"+e+"<\/script>"},Ume=function(e){e.write($me("")),e.close();var t=e.parentWindow.Object;return e=null,t},cE=function(){try{sE=new ActiveXObject("htmlfile")}catch{}var e,t;cE=typeof document<"u"?document.domain&&sE?Ume(sE):((t=bL("iframe")).style.display="none",zZe.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write($me("document.F=Object")),e.close(),e.F):Ume(sE);for(var n=lE.length;n--;)delete cE.prototype[lE[n]];return cE()};_L[Hme]=!0;var Wme,FL,h6=Object.create||function(e,t){var n;return e!==null?(NL.prototype=_s(e),n=new NL,NL.prototype=null,n[Hme]=e):n=cE(),t===void 0?n:VZe(n,t)},HZe=Pn.RegExp,$Ze=ea(function(){var e=HZe(".","s");return!(e.dotAll&&e.exec(`
| `)&&e.flags==="s")}),UZe=Pn.RegExp,WZe=ea(function(){var e=UZe("(?<a>b)","g");return e.exec("b").groups.a!=="b"||"b".replace(e,"$<a>c")!=="bc"}),GZe=L1.get,qZe=vL("native-string-replace",String.prototype.replace),dE=RegExp.prototype.exec,RL=dE,KZe=Kr("".charAt),YZe=Kr("".indexOf),XZe=Kr("".replace),IL=Kr("".slice),BL=(FL=/b*/g,wa(dE,Wme=/a/,"a"),wa(dE,FL,"a"),Wme.lastIndex!==0||FL.lastIndex!==0),Gme=LZe.BROKEN_CARET,PL=/()??/.exec("")[1]!==void 0;(BL||PL||Gme||$Ze||WZe)&&(RL=function(e){var t,n,r,o,i,a,l,s=this,u=GZe(s),c=V1(e),d=u.raw;if(d)return d.lastIndex=s.lastIndex,t=wa(RL,d,c),s.lastIndex=d.lastIndex,t;var f=u.groups,p=Gme&&s.sticky,m=wa(IZe,s),v=s.source,g=0,b=c;if(p&&(m=XZe(m,"y",""),YZe(m,"g")===-1&&(m+="g"),b=IL(c,s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&KZe(c,s.lastIndex-1)!==`
| `)&&(v="(?: "+v+")",b=" "+b,g++),n=new RegExp("^(?:"+v+")",m)),PL&&(n=new RegExp("^"+v+"$(?!\\s)",m)),BL&&(r=s.lastIndex),o=wa(dE,p?n:s,b),p?o?(o.input=IL(o.input,g),o[0]=IL(o[0],g),o.index=s.lastIndex,s.lastIndex+=o[0].length):s.lastIndex=0:BL&&o&&(s.lastIndex=s.global?o.index+o[0].length:r),PL&&o&&o.length>1&&wa(qZe,o[0],n,function(){for(i=1;i<arguments.length-2;i++)arguments[i]===void 0&&(o[i]=void 0)}),o&&f)for(o.groups=a=h6(null),i=0;i<f.length;i++)a[(l=f[i])[0]]=o[l[1]];return o});var fE=RL;p6({target:"RegExp",proto:!0,forced:/./.exec!==fE},{exec:fE}),sl("species");var qme=RegExp.prototype,QZe=Kr("".charAt),Kme=Kr("".charCodeAt),JZe=Kr("".slice),Yme=function(e){return function(t,n){var r,o,i=V1(nE(t)),a=kL(n),l=i.length;return a<0||a>=l?e?"":void 0:(r=Kme(i,a))<55296||r>56319||a+1===l||(o=Kme(i,a+1))<56320||o>57343?e?QZe(i,a):r:e?JZe(i,a,a+2):o-56320+(r-55296<<10)+65536}},Xme={codeAt:Yme(!1),charAt:Yme(!0)},ZZe=Xme.charAt,eet=function(e,t,n){return t+(n?ZZe(e,t).length:1)},tet=Pn.TypeError,Qme=function(e,t){var n=e.exec;if(Ri(n)){var r=wa(n,e,t);return r!==null&&_s(r),r}if(I1(e)==="RegExp")return wa(fE,e,t);throw tet("RegExp#exec called on incompatible receiver")};(function(e){var t=sl(e),n=!ea(function(){var a={};return a[t]=function(){return 7},""[e](a)!=7}),r=n&&!ea(function(){var a=!1,l=/a/;return l.exec=function(){return a=!0,null},l[t](""),!a});if(!n||!r){var o=Kr(/./[t]),i=function(a,l,s){return[function(u){var c=nE(this),d=u==null?void 0:u6(u,a);return d?wa(d,u,c):new RegExp(u)[a](V1(c))},function(u){var c=_s(this),d=V1(u),f=s(l,c,d);if(f.done)return f.value;if(!c.global)return Qme(c,d);var p=c.unicode;c.lastIndex=0;for(var m,v=[],g=0;(m=Qme(c,d))!==null;){var b=V1(m[0]);v[g]=b,b===""&&(c.lastIndex=eet(d,Bme(c.lastIndex),p)),g++}return g===0?null:v}]}(t,""[e],function(a,l,s,u,c){var d=Kr(a),f=l.exec;return f===fE||f===qme.exec?n&&!c?{done:!0,value:o(l,s,u)}:{done:!0,value:d(s,l,u)}:{done:!1}});j1(String.prototype,e,i[0]),j1(qme,t,i[1])}})("match"),p6({global:!0},{globalThis:Pn});var net=!ea(function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}),Jme=xL("IE_PROTO"),LL=Pn.Object,ret=LL.prototype,v6=net?LL.getPrototypeOf:function(e){var t=mL(e);if(Vl(t,Jme))return t[Jme];var n=t.constructor;return Ri(n)&&t instanceof n?n.prototype:t instanceof LL?ret:null},oet=Pn.String,iet=Pn.TypeError,c2=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=Kr(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),t=n instanceof Array}catch{}return function(r,o){return _s(r),function(i){if(typeof i=="object"||Ri(i))return i;throw iet("Can't set "+oet(i)+" as a prototype")}(o),t?e(r,o):r.__proto__=o,r}}():void 0),aet=Pn.Array,set=Math.max,uet=Kr("".replace),cet=Kr("".split),det=Kr([].join),jL=String(Error("zxcasd").stack),Zme=/\n\s*at [^:]*:[^\n]*/,fet=Zme.test(jL),pet=/@[^\n]*\n/.test(jL)&&!/zxcasd/.test(jL),ege=Kr(Kr.bind),tge=function(e,t){return pL(e),t===void 0?e:ege?ege(e,t):function(){return e.apply(t,arguments)}},d2={},het=sl("iterator"),vet=Array.prototype,met=sl("iterator"),nge=function(e){if(e!=null)return u6(e,met)||u6(e,"@@iterator")||d2[uE(e)]},get=Pn.TypeError,rge=function(e,t,n){var r,o;_s(e);try{if(!(r=u6(e,"return"))){if(t==="throw")throw n;return n}r=wa(r,e)}catch(i){o=!0,r=i}if(t==="throw")throw n;if(o)throw r;return _s(r),n},yet=Pn.TypeError,pE=function(e,t){this.stopped=e,this.result=t},oge=pE.prototype,bet=!ea(function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",Rp(1,7)),e.stack!==7)}),Aet=sl("toStringTag"),hE=Pn.Error,wet=[].push,m6=function(e,t){var n,r=arguments.length>2?arguments[2]:void 0,o=rE(VL,this);c2?n=c2(new hE(void 0),o?v6(this):VL):(n=o?this:h6(VL),zl(n,Aet,"Error")),zl(n,"message",function(a,l){return a===void 0?arguments.length<2?"":l:V1(a)}(t,"")),bet&&zl(n,"stack",function(a,l){if(typeof a!="string")return a;if(fet)for(;l--;)a=uet(a,Zme,"");else if(pet)return det(function(s,u){for(var c,d,f,p,m=aE(s),v=DL(u,m),g=DL(m,m),b=aet(set(g-v,0)),y=0;v<g;v++,y++)c=b,d=y,f=s[v],(p=gL(d))in c?s2.f(c,p,Rp(0,f)):c[p]=f;return b.length=y,b}(cet(a,`
| `),l),`
| `);return a}(n.stack,1)),function(a,l){Gc(l)&&"cause"in l&&zl(a,"cause",l.cause)}(n,r);var i=[];return function(a,l,s){var u,c,d,f,p,m,v,g=s&&s.that,b=!(!s||!s.AS_ENTRIES),y=!(!s||!s.IS_ITERATOR),w=!(!s||!s.INTERRUPTED),x=tge(l,g),_=function(C){return u&&rge(u,"normal",C),new pE(!0,C)},E=function(C){return b?(_s(C),w?x(C[0],C[1],_):x(C[0],C[1])):w?x(C,_):x(C)};if(y)u=a;else{if(!(c=nge(a)))throw yet(fL(a)+" is not iterable");if(function(C){return C!==void 0&&(d2.Array===C||vet[het]===C)}(c)){for(d=0,f=aE(a);f>d;d++)if((p=E(a[d]))&&rE(oge,p))return p;return new pE(!1)}u=function(C,T){var k=arguments.length<2?nge(C):T;if(pL(k))return _s(wa(k,C));throw get(fL(C)+" is not iterable")}(a,c)}for(m=u.next;!(v=wa(m,u)).done;){try{p=E(v.value)}catch(C){rge(u,"throw",C)}if(typeof p=="object"&&p&&rE(oge,p))return p}new pE(!1)}(e,wet,{that:i}),zl(n,"errors",i),n};c2?c2(m6,hE):Vme(m6,hE);var VL=m6.prototype=h6(hE.prototype,{constructor:Rp(1,m6),message:Rp(1,""),name:Rp(1,"AggregateError")});p6({global:!0},{AggregateError:m6});var zL=sl("unscopables"),HL=Array.prototype;HL[zL]==null&&s2.f(HL,zL,{configurable:!0,value:h6(null)});var z1,ige,age,$L=function(e){HL[zL][e]=!0},UL=sl("iterator"),lge=!1;[].keys&&("next"in(age=[].keys())?(ige=v6(v6(age)))!==Object.prototype&&(z1=ige):lge=!0);var xet=z1==null||ea(function(){var e={};return z1[UL].call(e)!==e});xet&&(z1={}),Ri(z1[UL])||j1(z1,UL,function(){return this});var WL={IteratorPrototype:z1,BUGGY_SAFARI_ITERATORS:lge},_et=s2.f,sge=sl("toStringTag"),uge=function(e,t,n){e&&!Vl(e=n?e:e.prototype,sge)&&_et(e,sge,{configurable:!0,value:t})},Eet=WL.IteratorPrototype,Cet=function(){return this},ket=SL.PROPER,Det=SL.CONFIGURABLE,cge=WL.IteratorPrototype,GL=WL.BUGGY_SAFARI_ITERATORS,g6=sl("iterator"),Oet=function(){return this},dge=function(e,t,n,r,o,i,a){(function(g,b,y){var w=b+" Iterator";g.prototype=h6(Eet,{next:Rp(1,y)}),uge(g,w,!1),d2[w]=Cet})(n,t,r);var l,s,u=function(g){if(g===o&&m)return m;if(!GL&&g in f)return f[g];switch(g){case"keys":case"values":case"entries":return function(){return new n(this,g)}}return function(){return new n(this)}},c=t+" Iterator",d=!1,f=e.prototype,p=f[g6]||f["@@iterator"]||o&&f[o],m=!GL&&p||u(o),v=t=="Array"&&f.entries||p;return v&&(l=v6(v.call(new e)))!==Object.prototype&&l.next&&(v6(l)!==cge&&(c2?c2(l,cge):Ri(l[g6])||j1(l,g6,Oet)),uge(l,c,!0)),ket&&o=="values"&&p&&p.name!=="values"&&(Det?zl(f,"name","values"):(d=!0,m=function(){return wa(p,this)})),o&&(s={values:u("values"),keys:u("keys"),entries:u("entries")},a||p6({target:t,proto:!0,forced:GL||d},s)),f[g6]!==m&&j1(f,g6,m,{name:o}),d2[t]=m,s},Tet=L1.set,Met=L1.getterFor("Array Iterator"),y6=dge(Array,"Array",function(e,t){Tet(this,{type:"Array Iterator",target:l2(e),index:0,kind:t})},function(){var e=Met(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,{value:void 0,done:!0}):n=="keys"?{value:r,done:!1}:n=="values"?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}},"values");d2.Arguments=d2.Array,$L("keys"),$L("values"),$L("entries");var Net=Xme.charAt,Fet=L1.set,Ret=L1.getterFor("String Iterator");dge(String,"String",function(e){Fet(this,{type:"String Iterator",string:V1(e),index:0})},function(){var e,t=Ret(this),n=t.string,r=t.index;return r>=n.length?{value:void 0,done:!0}:(e=Net(n,r),t.index+=e.length,{value:e,done:!1})});var qL,vE={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},KL=bL("span").classList,fge=KL&&KL.constructor&&KL.constructor.prototype,pge=fge===Object.prototype?void 0:fge,YL=sl("iterator"),hge=sl("toStringTag"),XL=y6.values,vge=function(e,t){if(e){if(e[YL]!==XL)try{zl(e,YL,XL)}catch{e[YL]=XL}if(e[hge]||zl(e,hge,t),vE[t]){for(var n in y6)if(e[n]!==y6[n])try{zl(e,n,y6[n])}catch{e[n]=y6[n]}}}};for(var QL in vE)vge(Pn[QL]&&Pn[QL].prototype,QL);function mge(){typeof globalThis>"u"&&(window.globalThis=window)}function gge(){FJe===void 0&&(window.AggregateError=function(e,t){var n=new Error(t);return n.errors=e,n})}vge(pge,"DOMTokenList"),typeof global>"u"?("ActiveXObject"in window&&console.error(`\u62B1\u6B49\uFF0CwangEditor V5+ \u7248\u672C\u5F00\u59CB\uFF0C\u4E0D\u5728\u652F\u6301 IE \u6D4F\u89C8\u5668
| Sorry, wangEditor V5+ versions do not support IE browser.`),mge(),gge()):global&&(!((qL=global.navigator)===null||qL===void 0)&&qL.userAgent.match("QQBrowser"))&&(mge(),gge());var mE=Array.isArray||function(e){return M1(e)=="Array"},yge=function(){},Iet=[],bge=n2("Reflect","construct"),JL=/^\s*(?:class|function)\b/,Bet=so(JL.exec),Pet=!JL.exec(yge),b6=function(e){if(!Aa(e))return!1;try{return bge(yge,Iet,e),!0}catch{return!1}},Let=!bge||Ll(function(){var e;return b6(b6.call)||!b6(Object)||!b6(function(){e=!0})||e})?function(e){if(!Aa(e))return!1;switch(r6(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return Pet||!!Bet(JL,ome(e))}:b6,jet=Na("species"),Age=Yn.Array,wge=function(e,t){return new(function(n){var r;return mE(n)&&(r=n.constructor,(Let(r)&&(r===Age||mE(r.prototype))||ou(r)&&(r=r[jet])===null)&&(r=void 0)),r===void 0?Age:r}(e))(t===0?0:t)},Vet=Na("species"),xge=Na("isConcatSpreadable"),_ge=Yn.TypeError,zet=L_>=51||!Ll(function(){var e=[];return e[xge]=!1,e.concat()[0]!==e}),Het=L_>=51||!Ll(function(){var e=[];return(e.constructor={})[Vet]=function(){return{foo:1}},e.concat(Boolean).foo!==1}),$et=function(e){if(!ou(e))return!1;var t=e[xge];return t!==void 0?!!t:mE(e)};Qd({target:"Array",proto:!0,forced:!zet||!Het},{concat:function(e){var t,n,r,o,i,a=J4(this),l=wge(a,0),s=0;for(t=-1,r=arguments.length;t<r;t++)if($et(i=t===-1?a:arguments[t])){if(s+(o=t6(i))>9007199254740991)throw _ge("Maximum allowed index exceeded");for(n=0;n<o;n++,s++)n in i&&YP(l,s,i[n])}else{if(s>=9007199254740991)throw _ge("Maximum allowed index exceeded");YP(l,s++,i)}return l.length=s,l}});var Ege=GP.f,Cge=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Sge={f:function(e){return Cge&&M1(e)=="Window"?function(t){try{return Ege(t)}catch{return Jve(Cge)}}(e):Ege($c(e))}},Uet=so([].slice),ZL={f:Na},Wet=Mp.f,ti=function(e){var t=ws.Symbol||(ws.Symbol={});_r(t,e)||Wet(t,e,{value:ZL.f(e)})},kge=so([].push),Bp=function(e){var t=e==1,n=e==2,r=e==3,o=e==4,i=e==6,a=e==7,l=e==5||i;return function(s,u,c,d){for(var f,p,m=J4(s),v=Nve(m),g=HP(u,c),b=t6(v),y=0,w=d||wge,x=t?w(s,b):n||a?w(s,0):void 0;b>y;y++)if((l||y in v)&&(p=g(f=v[y],y,m),e))if(t)x[y]=p;else if(p)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:kge(x,f)}else switch(e){case 4:return!1;case 7:kge(x,f)}return i?-1:r||o?o:x}},gE=[Bp(0),Bp(1),Bp(2),Bp(3),Bp(4),Bp(5),Bp(6),Bp(7)][0],Hl=H_("hidden"),Dge=Na("toPrimitive"),Get=a2.set,Oge=a2.getterFor("Symbol"),Wu=Object.prototype,Pp=Yn.Symbol,Lp=Pp&&Pp.prototype,Tge=Yn.TypeError,ej=Yn.QObject,A6=n2("JSON","stringify"),Mge=z_.f,jp=Mp.f,Nge=Sge.f,qet=RP.f,Fge=so([].push),ef=N1("symbols"),w6=N1("op-symbols"),tj=N1("string-to-symbol-registry"),nj=N1("symbol-to-string-registry"),Ket=N1("wks"),rj=!ej||!ej.prototype||!ej.prototype.findChild,oj=jl&&Ll(function(){return Jd(jp({},"a",{get:function(){return jp(this,"a",{value:7}).a}})).a!=7})?function(e,t,n){var r=Mge(Wu,t);r&&delete Wu[t],jp(e,t,n),r&&e!==Wu&&jp(Wu,t,r)}:jp,ij=function(e,t){var n=ef[e]=Jd(Lp);return Get(n,{type:"Symbol",tag:e,description:t}),jl||(n.description=t),n},yE=function(e,t,n){e===Wu&&yE(w6,t,n),xs(e);var r=o2(t);return xs(n),_r(ef,r)?(n.enumerable?(_r(e,Hl)&&e[Hl][r]&&(e[Hl][r]=!1),n=Jd(n,{enumerable:Uu(0,!1)})):(_r(e,Hl)||jp(e,Hl,Uu(1,{})),e[Hl][r]=!0),oj(e,r,n)):jp(e,r,n)},Rge=function(e,t){xs(e);var n=$c(t),r=qP(n).concat(aj(n));return gE(r,function(o){jl&&!As(Ige,n,o)||yE(e,o,n[o])}),e},Ige=function(e){var t=o2(e),n=As(qet,this,t);return!(this===Wu&&_r(ef,t)&&!_r(w6,t))&&(!(n||!_r(this,t)||!_r(ef,t)||_r(this,Hl)&&this[Hl][t])||n)},Bge=function(e,t){var n=$c(e),r=o2(t);if(n!==Wu||!_r(ef,r)||_r(w6,r)){var o=Mge(n,r);return!o||!_r(ef,r)||_r(n,Hl)&&n[Hl][r]||(o.enumerable=!0),o}},Pge=function(e){var t=Nge($c(e)),n=[];return gE(t,function(r){_r(ef,r)||_r(n6,r)||Fge(n,r)}),n},aj=function(e){var t=e===Wu,n=Nge(t?w6:$c(e)),r=[];return gE(n,function(o){!_r(ef,o)||t&&!_r(Wu,o)||Fge(r,ef[o])}),r};if(Uc||(Lp=(Pp=function(){if(Q4(Lp,this))throw Tge("Symbol is not a constructor");var e=arguments.length&&arguments[0]!==void 0?o6(arguments[0]):void 0,t=V_(e),n=function(r){this===Wu&&As(n,w6,r),_r(this,Hl)&&_r(this[Hl],t)&&(this[Hl][t]=!1),oj(this,t,Uu(1,r))};return jl&&rj&&oj(Wu,t,{configurable:!0,set:n}),ij(t,e)}).prototype,J_(Lp,"toString",function(){return Oge(this).tag}),J_(Pp,"withoutSetter",function(e){return ij(V_(e),e)}),RP.f=Ige,Mp.f=yE,z_.f=Bge,GP.f=Sge.f=Pge,G_.f=aj,ZL.f=function(e){return ij(Na(e),e)},jl&&jp(Lp,"description",{configurable:!0,get:function(){return Oge(this).description}})),Qd({global:!0,wrap:!0,forced:!Uc,sham:!Uc},{Symbol:Pp}),gE(qP(Ket),function(e){ti(e)}),Qd({target:"Symbol",stat:!0,forced:!Uc},{for:function(e){var t=o6(e);if(_r(tj,t))return tj[t];var n=Pp(t);return tj[t]=n,nj[n]=t,n},keyFor:function(e){if(!r2(e))throw Tge(e+" is not a symbol");if(_r(nj,e))return nj[e]},useSetter:function(){rj=!0},useSimple:function(){rj=!1}}),Qd({target:"Object",stat:!0,forced:!Uc,sham:!jl},{create:function(e,t){return t===void 0?Jd(e):Rge(Jd(e),t)},defineProperty:yE,defineProperties:Rge,getOwnPropertyDescriptor:Bge}),Qd({target:"Object",stat:!0,forced:!Uc},{getOwnPropertyNames:Pge,getOwnPropertySymbols:aj}),Qd({target:"Object",stat:!0,forced:Ll(function(){G_.f(1)})},{getOwnPropertySymbols:function(e){return G_.f(J4(e))}}),A6){var Yet=!Uc||Ll(function(){var e=Pp();return A6([e])!="[null]"||A6({a:e})!="{}"||A6(Object(e))!="{}"});Qd({target:"JSON",stat:!0,forced:Yet},{stringify:function(e,t,n){var r=Uet(arguments),o=t;if((ou(t)||e!==void 0)&&!r2(e))return mE(t)||(t=function(i,a){if(Aa(o)&&(a=As(o,this,i,a)),!r2(a))return a}),r[1]=t,Dve(A6,null,r)}})}if(!Lp[Dge]){var Xet=Lp.valueOf;J_(Lp,Dge,function(e){return As(Xet,this)})}Z_(Pp,"Symbol"),n6[Hl]=!0,ti("asyncIterator"),ti("hasInstance"),ti("isConcatSpreadable"),ti("iterator"),ti("match"),ti("matchAll"),ti("replace"),ti("search"),ti("species"),ti("split"),ti("toPrimitive"),ti("toStringTag"),ti("unscopables"),Z_(Yn.JSON,"JSON",!0);var Qet=ws.Symbol;ti("asyncDispose"),ti("dispose"),ti("matcher"),ti("metadata"),ti("observable"),ti("patternMatch"),ti("replaceAll");var bE=Qet,Jet=ZL.f("iterator"),Zet=T1(function(e){function t(n){return typeof bE=="function"&&typeof Jet=="symbol"?(e.exports=t=function(r){return typeof r},e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=t=function(r){return r&&typeof bE=="function"&&r.constructor===bE&&r!==bE.prototype?"symbol":typeof r},e.exports.default=e.exports,e.exports.__esModule=!0),t(n)}e.exports=t,e.exports.default=e.exports,e.exports.__esModule=!0}),ett=function(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}(Zet),Lge=AL.f,ttt=ea(function(){Lge(1)});if(p6({target:"Object",stat:!0,forced:!Wc||ttt,sham:!Wc},{getOwnPropertyDescriptor:function(e,t){return Lge(l2(e),t)}}),(typeof global>"u"?"undefined":ett(global))==="object"){var ntt=Object.getOwnPropertyDescriptor(global,"window");global.window&&!ntt.set||(global.window=global,global.requestAnimationFrame=function(){},global.navigator={userAgent:""},global.location={hostname:"0.0.0.0",port:0,protocol:"http:"},global.btoa=function(){},global.crypto={getRandomValues:function(e){return nodeCrypto.randomFillSync(e)}}),global.document!=null&&global.document.getElementsByTagName==null&&(global.document.getElementsByTagName=function(){return[]})}function jge(e){return Object.prototype.toString.call(e)==="[object Object]"}function Fa(e){var t,n;return jge(e)!==!1&&((t=e.constructor)===void 0||jge(n=t.prototype)!==!1&&n.hasOwnProperty("isPrototypeOf")!==!1)}function Gu(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];throw Error("[Immer] minified error nr: "+e+(n.length?" "+n.map(function(o){return"'"+o+"'"}).join(","):"")+". Find the full error at: https://bit.ly/3cXEKWf")}function H1(e){return!!e&&!!e[Es]}function $1(e){return!!e&&(function(t){if(!t||typeof t!="object")return!1;var n=Object.getPrototypeOf(t);if(n===null)return!0;var r=Object.hasOwnProperty.call(n,"constructor")&&n.constructor;return r===Object||typeof r=="function"&&Function.toString.call(r)===ltt}(e)||Array.isArray(e)||!!e[Yge]||!!e.constructor[Yge]||sj(e)||uj(e))}function x6(e,t,n){n===void 0&&(n=!1),f2(e)===0?(n?Object.keys:wj)(e).forEach(function(r){n&&typeof r=="symbol"||t(r,e[r],e)}):e.forEach(function(r,o){return t(o,r,e)})}function f2(e){var t=e[Es];return t?t.i>3?t.i-4:t.i:Array.isArray(e)?1:sj(e)?2:uj(e)?3:0}function lj(e,t){return f2(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Vge(e,t,n){var r=f2(e);r===2?e.set(t,n):r===3?(e.delete(t),e.add(n)):e[t]=n}function sj(e){return itt&&e instanceof Map}function uj(e){return att&&e instanceof Set}function U1(e){return e.o||e.t}function cj(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=stt(e);delete t[Es];for(var n=wj(t),r=0;r<n.length;r++){var o=n[r],i=t[o];i.writable===!1&&(i.writable=!0,i.configurable=!0),(i.get||i.set)&&(t[o]={configurable:!0,writable:!0,enumerable:i.enumerable,value:e[o]})}return Object.create(Object.getPrototypeOf(e),t)}function dj(e,t){return t===void 0&&(t=!1),fj(e)||H1(e)||!$1(e)||(f2(e)>1&&(e.set=e.add=e.clear=e.delete=rtt),Object.freeze(e),t&&x6(e,function(n,r){return dj(r,!0)},!0)),e}function rtt(){Gu(2)}function fj(e){return e==null||typeof e!="object"||Object.isFrozen(e)}function tf(e){var t=utt[e];return t||Gu(18,e),t}function zge(){return _6}function pj(e,t){t&&(tf("Patches"),e.u=[],e.s=[],e.v=t)}function AE(e){hj(e),e.p.forEach(ott),e.p=null}function hj(e){e===_6&&(_6=e.l)}function Hge(e){return _6={p:[],l:_6,h:e,m:!0,_:0}}function ott(e){var t=e[Es];t.i===0||t.i===1?t.j():t.O=!0}function vj(e,t){t._=t.p.length;var n=t.p[0],r=e!==void 0&&e!==n;return t.h.g||tf("ES5").S(t,e,r),r?(n[Es].P&&(AE(t),Gu(4)),$1(e)&&(e=wE(t,e),t.l||xE(t,e)),t.u&&tf("Patches").M(n[Es],e,t.u,t.s)):e=wE(t,n,[]),AE(t),t.u&&t.v(t.u,t.s),e!==Kge?e:void 0}function wE(e,t,n){if(fj(t))return t;var r=t[Es];if(!r)return x6(t,function(i,a){return $ge(e,r,t,i,a,n)},!0),t;if(r.A!==e)return t;if(!r.P)return xE(e,r.t,!0),r.t;if(!r.I){r.I=!0,r.A._--;var o=r.i===4||r.i===5?r.o=cj(r.k):r.o;x6(r.i===3?new Set(o):o,function(i,a){return $ge(e,r,o,i,a,n)}),xE(e,o,!1),n&&e.u&&tf("Patches").R(r,n,e.u,e.s)}return r.o}function $ge(e,t,n,r,o,i){if(H1(o)){var a=wE(e,o,i&&t&&t.i!==3&&!lj(t.D,r)?i.concat(r):void 0);if(Vge(n,r,a),!H1(a))return;e.m=!1}if($1(o)&&!fj(o)){if(!e.h.F&&e._<1)return;wE(e,o),t&&t.A.l||xE(e,o)}}function xE(e,t,n){n===void 0&&(n=!1),e.h.F&&e.m&&dj(t,n)}function mj(e,t){var n=e[Es];return(n?U1(n):e)[t]}function Uge(e,t){if(t in e)for(var n=Object.getPrototypeOf(e);n;){var r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=Object.getPrototypeOf(n)}}function gj(e){e.P||(e.P=!0,e.l&&gj(e.l))}function yj(e){e.o||(e.o=cj(e.t))}function bj(e,t,n){var r=sj(t)?tf("MapSet").N(t,n):uj(t)?tf("MapSet").T(t,n):e.g?function(o,i){var a=Array.isArray(o),l={i:a?1:0,A:i?i.A:zge(),P:!1,I:!1,D:{},l:i,t:o,k:null,o:null,j:null,C:!1},s=l,u=_E;a&&(s=[l],u=EE);var c=Proxy.revocable(s,u),d=c.revoke,f=c.proxy;return l.k=f,l.j=d,f}(t,n):tf("ES5").J(t,n);return(n?n.A:zge()).p.push(r),r}function Wge(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return cj(e)}var Gge,_6,Aj=typeof Symbol<"u"&&typeof Symbol("x")=="symbol",itt=typeof Map<"u",att=typeof Set<"u",qge=typeof Proxy<"u"&&Proxy.revocable!==void 0&&typeof Reflect<"u",Kge=Aj?Symbol.for("immer-nothing"):((Gge={})["immer-nothing"]=!0,Gge),Yge=Aj?Symbol.for("immer-draftable"):"__$immer_draftable",Es=Aj?Symbol.for("immer-state"):"__$immer_state",ltt=""+Object.prototype.constructor,wj=typeof Reflect<"u"&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols!==void 0?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames,stt=Object.getOwnPropertyDescriptors||function(e){var t={};return wj(e).forEach(function(n){t[n]=Object.getOwnPropertyDescriptor(e,n)}),t},utt={},_E={get:function(e,t){if(t===Es)return e;var n=U1(e);if(!lj(n,t))return function(o,i,a){var l,s=Uge(i,a);return s?"value"in s?s.value:(l=s.get)===null||l===void 0?void 0:l.call(o.k):void 0}(e,n,t);var r=n[t];return e.I||!$1(r)?r:r===mj(e.t,t)?(yj(e),e.o[t]=bj(e.A.h,r,e)):r},has:function(e,t){return t in U1(e)},ownKeys:function(e){return Reflect.ownKeys(U1(e))},set:function(e,t,n){var r=Uge(U1(e),t);if(r!=null&&r.set)return r.set.call(e.k,n),!0;if(!e.P){var o=mj(U1(e),t),i=o==null?void 0:o[Es];if(i&&i.t===n)return e.o[t]=n,e.D[t]=!1,!0;if(function(a,l){return a===l?a!==0||1/a==1/l:a!=a&&l!=l}(n,o)&&(n!==void 0||lj(e.t,t)))return!0;yj(e),gj(e)}return e.o[t]===n&&typeof n!="number"&&(n!==void 0||t in e.o)||(e.o[t]=n,e.D[t]=!0,!0)},deleteProperty:function(e,t){return mj(e.t,t)!==void 0||t in e.t?(e.D[t]=!1,yj(e),gj(e)):delete e.D[t],e.o&&delete e.o[t],!0},getOwnPropertyDescriptor:function(e,t){var n=U1(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{writable:!0,configurable:e.i!==1||t!=="length",enumerable:r.enumerable,value:n[t]}},defineProperty:function(){Gu(11)},getPrototypeOf:function(e){return Object.getPrototypeOf(e.t)},setPrototypeOf:function(){Gu(12)}},EE={};x6(_E,function(e,t){EE[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}}),EE.deleteProperty=function(e,t){return _E.deleteProperty.call(this,e[0],t)},EE.set=function(e,t,n){return _E.set.call(this,e[0],t,n,e[0])};var ctt=function(){function e(n){var r=this;this.g=qge,this.F=!0,this.produce=function(o,i,a){if(typeof o=="function"&&typeof i!="function"){var l=i;i=o;var s=r;return function(p){var m=this;p===void 0&&(p=l);for(var v=arguments.length,g=Array(v>1?v-1:0),b=1;b<v;b++)g[b-1]=arguments[b];return s.produce(p,function(y){var w;return(w=i).call.apply(w,[m,y].concat(g))})}}var u;if(typeof i!="function"&&Gu(6),a!==void 0&&typeof a!="function"&&Gu(7),$1(o)){var c=Hge(r),d=bj(r,o,void 0),f=!0;try{u=i(d),f=!1}finally{f?AE(c):hj(c)}return typeof Promise<"u"&&u instanceof Promise?u.then(function(p){return pj(c,a),vj(p,c)},function(p){throw AE(c),p}):(pj(c,a),vj(u,c))}if(!o||typeof o!="object")return(u=i(o))===Kge?void 0:(u===void 0&&(u=o),r.F&&dj(u,!0),u);Gu(21,o)},this.produceWithPatches=function(o,i){return typeof o=="function"?function(s){for(var u=arguments.length,c=Array(u>1?u-1:0),d=1;d<u;d++)c[d-1]=arguments[d];return r.produceWithPatches(s,function(f){return o.apply(void 0,[f].concat(c))})}:[r.produce(o,i,function(s,u){a=s,l=u}),a,l];var a,l},typeof(n==null?void 0:n.useProxies)=="boolean"&&this.setUseProxies(n.useProxies),typeof(n==null?void 0:n.autoFreeze)=="boolean"&&this.setAutoFreeze(n.autoFreeze)}var t=e.prototype;return t.createDraft=function(n){$1(n)||Gu(8),H1(n)&&(n=function(i){return H1(i)||Gu(22,i),function a(l){if(!$1(l))return l;var s,u=l[Es],c=f2(l);if(u){if(!u.P&&(u.i<4||!tf("ES5").K(u)))return u.t;u.I=!0,s=Wge(l,c),u.I=!1}else s=Wge(l,c);return x6(s,function(d,f){u&&function(p,m){return f2(p)===2?p.get(m):p[m]}(u.t,d)===f||Vge(s,d,a(f))}),c===3?new Set(s):s}(i)}(n));var r=Hge(this),o=bj(this,n,void 0);return o[Es].C=!0,hj(r),o},t.finishDraft=function(n,r){var o=(n&&n[Es]).A;return pj(o,r),vj(void 0,o)},t.setAutoFreeze=function(n){this.F=n},t.setUseProxies=function(n){n&&!qge&&Gu(20),this.g=n},t.applyPatches=function(n,r){var o;for(o=r.length-1;o>=0;o--){var i=r[o];if(i.path.length===0&&i.op==="replace"){n=i.value;break}}o>-1&&(r=r.slice(o+1));var a=tf("Patches").$;return H1(n)?a(n,r):this.produce(n,function(l){return a(l,r)})},e}(),Cs=new ctt,CE=Cs.produce;Cs.produceWithPatches.bind(Cs),Cs.setAutoFreeze.bind(Cs),Cs.setUseProxies.bind(Cs),Cs.applyPatches.bind(Cs);var Xge=Cs.createDraft.bind(Cs),Qge=Cs.finishDraft.bind(Cs);function qc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var SE=new WeakMap,E6=new WeakMap,Jge=new WeakMap,Zge=new WeakMap,e2e=new WeakMap,t2e=new WeakMap;function n2e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function kE(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?n2e(Object(n),!0).forEach(function(r){qc(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):n2e(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}var dtt=()=>{var e={children:[],operations:[],selection:null,marks:null,isInline:()=>!1,isVoid:()=>!1,onChange:()=>{},apply:t=>{for(var n of ue.pathRefs(e))ztt.transform(n,t);for(var r of ue.pointRefs(e))Htt.transform(r,t);for(var o of ue.rangeRefs(e))Utt.transform(o,t);var i=new Set,a=[],l=f=>{if(f){var p=f.join(",");i.has(p)||(i.add(p),a.push(f))}},s=SE.get(e)||[],u=ftt(t);for(var c of s)l(qe.transform(c,t));for(var d of u)l(d);SE.set(e,a),et.transform(e,t),e.operations.push(t),ue.normalize(e),t.type==="set_selection"&&(e.marks=null),E6.get(e)||(E6.set(e,!0),Promise.resolve().then(()=>{E6.set(e,!1),e.onChange(),e.operations=[]}))},addMark:(t,n)=>{var{selection:r}=e;if(r)if(ct.isExpanded(r))et.setNodes(e,{[t]:n},{match:Qt.isText,split:!0});else{var o=kE(kE({},ue.marks(e)||{}),{},{[t]:n});e.marks=o,E6.get(e)||e.onChange()}},deleteBackward:t=>{var{selection:n}=e;n&&ct.isCollapsed(n)&&et.delete(e,{unit:t,reverse:!0})},deleteForward:t=>{var{selection:n}=e;n&&ct.isCollapsed(n)&&et.delete(e,{unit:t})},deleteFragment:t=>{var{selection:n}=e;n&&ct.isExpanded(n)&&et.delete(e,{reverse:t==="backward"})},getFragment:()=>{var{selection:t}=e;return t?Lt.fragment(e,t):[]},insertBreak:()=>{et.splitNodes(e,{always:!0})},insertFragment:t=>{et.insertFragment(e,t)},insertNode:t=>{et.insertNodes(e,t)},insertText:t=>{var{selection:n,marks:r}=e;if(n){if(r){var o=kE({text:t},r);et.insertNodes(e,o)}else et.insertText(e,t);e.marks=null}},normalizeNode:t=>{var[n,r]=t;if(!Qt.isText(n))if(sn.isElement(n)&&n.children.length===0)et.insertNodes(e,{text:""},{at:r.concat(0),voids:!0});else for(var o=!ue.isEditor(n)&&sn.isElement(n)&&(e.isInline(n)||n.children.length===0||Qt.isText(n.children[0])||e.isInline(n.children[0])),i=0,a=0;a<n.children.length;a++,i++){var l=Lt.get(e,r);if(!Qt.isText(l)){var s=n.children[a],u=l.children[i-1],c=a===n.children.length-1;(Qt.isText(s)||sn.isElement(s)&&e.isInline(s))!==o?(et.removeNodes(e,{at:r.concat(i),voids:!0}),i--):sn.isElement(s)?e.isInline(s)&&(u!=null&&Qt.isText(u)?c&&(et.insertNodes(e,{text:""},{at:r.concat(i+1),voids:!0}),i++):(et.insertNodes(e,{text:""},{at:r.concat(i),voids:!0}),i++)):u!=null&&Qt.isText(u)&&(Qt.equals(s,u,{loose:!0})?(et.mergeNodes(e,{at:r.concat(i),voids:!0}),i--):u.text===""?(et.removeNodes(e,{at:r.concat(i-1),voids:!0}),i--):s.text===""&&(et.removeNodes(e,{at:r.concat(i),voids:!0}),i--))}}},removeMark:t=>{var{selection:n}=e;if(n)if(ct.isExpanded(n))et.unsetNodes(e,t,{match:Qt.isText,split:!0});else{var r=kE({},ue.marks(e)||{});delete r[t],e.marks=r,E6.get(e)||e.onChange()}}};return e},ftt=e=>{switch(e.type){case"insert_text":case"remove_text":case"set_node":var{path:t}=e;return qe.levels(t);case"insert_node":var{node:n,path:r}=e,o=qe.levels(r),i=Qt.isText(n)?[]:Array.from(Lt.nodes(n),x=>{var[,_]=x;return r.concat(_)});return[...o,...i];case"merge_node":var{path:a}=e;return[...qe.ancestors(a),qe.previous(a)];case"move_node":var{path:l,newPath:s}=e;if(qe.equals(l,s))return[];var u=[],c=[];for(var d of qe.ancestors(l)){var f=qe.transform(d,e);u.push(f)}for(var p of qe.ancestors(s)){var m=qe.transform(p,e);c.push(m)}var v=c[c.length-1],g=s[s.length-1],b=v.concat(g);return[...u,...c,b];case"remove_node":var{path:y}=e;return[...qe.ancestors(y)];case"split_node":var{path:w}=e;return[...qe.levels(w),qe.next(w)];default:return[]}};function nf(e,t){if(e==null)return{};var n,r,o=function(a,l){if(a==null)return{};var s,u,c={},d=Object.keys(a);for(u=0;u<d.length;u++)s=d[u],l.indexOf(s)>=0||(c[s]=a[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Wn,xj=function(e){var t=arguments.length>1&&arguments[1]!==void 0&&arguments[1],n=!t,r=t?gtt(e):e,o=Wn.None,i=Wn.None,a=0,l=null;for(var s of r){var u=s.codePointAt(0);if(!u)break;var c=Ott(s,u);if([o,i]=n?[i,c]:[c,o],p2(o,Wn.ZWJ)&&p2(i,Wn.ExtPict)&&!Ftt(n?e.substring(0,a):e.substring(0,e.length-a))||p2(o,Wn.RI)&&p2(i,Wn.RI)&&!(l=l!==null?!l:!!n||Itt(e.substring(0,e.length-a)))||o!==Wn.None&&i!==Wn.None&&Mtt(o,i))break;a+=s.length}return a||1},ptt=/\s/,htt=/[\u0021-\u0023\u0025-\u002A\u002C-\u002F\u003A\u003B\u003F\u0040\u005B-\u005D\u005F\u007B\u007D\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E3B\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/,vtt=/['\u2018\u2019]/,_j=(e,t,n)=>{if(n){var r=e.length-t;return[e.slice(r,e.length),e.slice(0,r)]}return[e.slice(0,t),e.slice(t)]},mtt=function e(t,n){var r=arguments.length>2&&arguments[2]!==void 0&&arguments[2];if(ptt.test(t))return!1;if(vtt.test(t)){var o=xj(n,r),[i,a]=_j(n,o,r);if(e(i,a,r))return!0}return!htt.test(t)},gtt=function*(e){for(var t=e.length-1,n=0;n<e.length;n++){var r=e.charAt(t-n);if(btt(r.charCodeAt(0))){var o=e.charAt(t-n-1);if(ytt(o.charCodeAt(0))){yield o+r,n++;continue}}yield r}},ytt=e=>e>=55296&&e<=56319,btt=e=>e>=56320&&e<=57343;(function(e){e[e.None=0]="None",e[e.Extend=1]="Extend",e[e.ZWJ=2]="ZWJ",e[e.RI=4]="RI",e[e.Prepend=8]="Prepend",e[e.SpacingMark=16]="SpacingMark",e[e.L=32]="L",e[e.V=64]="V",e[e.T=128]="T",e[e.LV=256]="LV",e[e.LVT=512]="LVT",e[e.ExtPict=1024]="ExtPict",e[e.Any=2048]="Any"})(Wn||(Wn={}));var Att=/^(?:[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09BE\u09C1-\u09C4\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3E\u0B3F\u0B41-\u0B44\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B82\u0BBE\u0BC0\u0BCD\u0BD7\u0C00\u0C04\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC2\u0CC6\u0CCC\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D3E\u0D41-\u0D44\u0D4D\u0D57\u0D62\u0D63\u0D81\u0DCA\u0DCF\u0DD2-\u0DD4\u0DD6\u0DDF\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1AC0\u1B00-\u1B03\u1B34-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u200C\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA82C\uA8C4\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9BD\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFF9E\uFF9F]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50]|\uD804[\uDC01\uDC38-\uDC46\uDC7F-\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDD00-\uDD02\uDD27-\uDD2B\uDD2D-\uDD34\uDD73\uDD80\uDD81\uDDB6-\uDDBE\uDDC9-\uDDCC\uDDCF\uDE2F-\uDE31\uDE34\uDE36\uDE37\uDE3E\uDEDF\uDEE3-\uDEEA\uDF00\uDF01\uDF3B\uDF3C\uDF3E\uDF40\uDF57\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC38-\uDC3F\uDC42-\uDC44\uDC46\uDC5E\uDCB0\uDCB3-\uDCB8\uDCBA\uDCBD\uDCBF\uDCC0\uDCC2\uDCC3\uDDAF\uDDB2-\uDDB5\uDDBC\uDDBD\uDDBF\uDDC0\uDDDC\uDDDD\uDE33-\uDE3A\uDE3D\uDE3F\uDE40\uDEAB\uDEAD\uDEB0-\uDEB5\uDEB7\uDF1D-\uDF1F\uDF22-\uDF25\uDF27-\uDF2B]|\uD806[\uDC2F-\uDC37\uDC39\uDC3A\uDD30\uDD3B\uDD3C\uDD3E\uDD43\uDDD4-\uDDD7\uDDDA\uDDDB\uDDE0\uDE01-\uDE0A\uDE33-\uDE38\uDE3B-\uDE3E\uDE47\uDE51-\uDE56\uDE59-\uDE5B\uDE8A-\uDE96\uDE98\uDE99]|\uD807[\uDC30-\uDC36\uDC38-\uDC3D\uDC3F\uDC92-\uDCA7\uDCAA-\uDCB0\uDCB2\uDCB3\uDCB5\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD90\uDD91\uDD95\uDD97\uDEF3\uDEF4]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF8F-\uDF92\uDFE4]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65\uDD67-\uDD69\uDD6E-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uD83C[\uDFFB-\uDFFF]|\uDB40[\uDC20-\uDC7F\uDD00-\uDDEF])$/,wtt=/^(?:[\u0600-\u0605\u06DD\u070F\u0890\u0891\u08E2\u0D4E]|\uD804[\uDCBD\uDCCD\uDDC2\uDDC3]|\uD806[\uDD3F\uDD41\uDE3A\uDE84-\uDE89]|\uD807\uDD46)$/,xtt=/^(?:[\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E\u094F\u0982\u0983\u09BF\u09C0\u09C7\u09C8\u09CB\u09CC\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB\u0ACC\u0B02\u0B03\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0C01-\u0C03\u0C41-\u0C44\u0C82\u0C83\u0CBE\u0CC0\u0CC1\u0CC3\u0CC4\u0CC7\u0CC8\u0CCA\u0CCB\u0D02\u0D03\u0D3F\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D82\u0D83\u0DD0\u0DD1\u0DD8-\u0DDE\u0DF2\u0DF3\u0E33\u0EB3\u0F3E\u0F3F\u0F7F\u1031\u103B\u103C\u1056\u1057\u1084\u1715\u1734\u17B6\u17BE-\u17C5\u17C7\u17C8\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1A19\u1A1A\u1A55\u1A57\u1A6D-\u1A72\u1B04\u1B3B\u1B3D-\u1B41\u1B43\u1B44\u1B82\u1BA1\u1BA6\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1C24-\u1C2B\u1C34\u1C35\u1CE1\u1CF7\uA823\uA824\uA827\uA880\uA881\uA8B4-\uA8C3\uA952\uA953\uA983\uA9B4\uA9B5\uA9BA\uA9BB\uA9BE-\uA9C0\uAA2F\uAA30\uAA33\uAA34\uAA4D\uAAEB\uAAEE\uAAEF\uAAF5\uABE3\uABE4\uABE6\uABE7\uABE9\uABEA\uABEC]|\uD804[\uDC00\uDC02\uDC82\uDCB0-\uDCB2\uDCB7\uDCB8\uDD2C\uDD45\uDD46\uDD82\uDDB3-\uDDB5\uDDBF\uDDC0\uDDCE\uDE2C-\uDE2E\uDE32\uDE33\uDE35\uDEE0-\uDEE2\uDF02\uDF03\uDF3F\uDF41-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF62\uDF63]|\uD805[\uDC35-\uDC37\uDC40\uDC41\uDC45\uDCB1\uDCB2\uDCB9\uDCBB\uDCBC\uDCBE\uDCC1\uDDB0\uDDB1\uDDB8-\uDDBB\uDDBE\uDE30-\uDE32\uDE3B\uDE3C\uDE3E\uDEAC\uDEAE\uDEAF\uDEB6\uDF26]|\uD806[\uDC2C-\uDC2E\uDC38\uDD31-\uDD35\uDD37\uDD38\uDD3D\uDD40\uDD42\uDDD1-\uDDD3\uDDDC-\uDDDF\uDDE4\uDE39\uDE57\uDE58\uDE97]|\uD807[\uDC2F\uDC3E\uDCA9\uDCB1\uDCB4\uDD8A-\uDD8E\uDD93\uDD94\uDD96\uDEF5\uDEF6]|\uD81B[\uDF51-\uDF87\uDFF0\uDFF1]|\uD834[\uDD66\uDD6D])$/,_tt=/^[\u1100-\u115F\uA960-\uA97C]$/,Ett=/^[\u1160-\u11A7\uD7B0-\uD7C6]$/,Ctt=/^[\u11A8-\u11FF\uD7CB-\uD7FB]$/,Stt=/^[\uAC00\uAC1C\uAC38\uAC54\uAC70\uAC8C\uACA8\uACC4\uACE0\uACFC\uAD18\uAD34\uAD50\uAD6C\uAD88\uADA4\uADC0\uADDC\uADF8\uAE14\uAE30\uAE4C\uAE68\uAE84\uAEA0\uAEBC\uAED8\uAEF4\uAF10\uAF2C\uAF48\uAF64\uAF80\uAF9C\uAFB8\uAFD4\uAFF0\uB00C\uB028\uB044\uB060\uB07C\uB098\uB0B4\uB0D0\uB0EC\uB108\uB124\uB140\uB15C\uB178\uB194\uB1B0\uB1CC\uB1E8\uB204\uB220\uB23C\uB258\uB274\uB290\uB2AC\uB2C8\uB2E4\uB300\uB31C\uB338\uB354\uB370\uB38C\uB3A8\uB3C4\uB3E0\uB3FC\uB418\uB434\uB450\uB46C\uB488\uB4A4\uB4C0\uB4DC\uB4F8\uB514\uB530\uB54C\uB568\uB584\uB5A0\uB5BC\uB5D8\uB5F4\uB610\uB62C\uB648\uB664\uB680\uB69C\uB6B8\uB6D4\uB6F0\uB70C\uB728\uB744\uB760\uB77C\uB798\uB7B4\uB7D0\uB7EC\uB808\uB824\uB840\uB85C\uB878\uB894\uB8B0\uB8CC\uB8E8\uB904\uB920\uB93C\uB958\uB974\uB990\uB9AC\uB9C8\uB9E4\uBA00\uBA1C\uBA38\uBA54\uBA70\uBA8C\uBAA8\uBAC4\uBAE0\uBAFC\uBB18\uBB34\uBB50\uBB6C\uBB88\uBBA4\uBBC0\uBBDC\uBBF8\uBC14\uBC30\uBC4C\uBC68\uBC84\uBCA0\uBCBC\uBCD8\uBCF4\uBD10\uBD2C\uBD48\uBD64\uBD80\uBD9C\uBDB8\uBDD4\uBDF0\uBE0C\uBE28\uBE44\uBE60\uBE7C\uBE98\uBEB4\uBED0\uBEEC\uBF08\uBF24\uBF40\uBF5C\uBF78\uBF94\uBFB0\uBFCC\uBFE8\uC004\uC020\uC03C\uC058\uC074\uC090\uC0AC\uC0C8\uC0E4\uC100\uC11C\uC138\uC154\uC170\uC18C\uC1A8\uC1C4\uC1E0\uC1FC\uC218\uC234\uC250\uC26C\uC288\uC2A4\uC2C0\uC2DC\uC2F8\uC314\uC330\uC34C\uC368\uC384\uC3A0\uC3BC\uC3D8\uC3F4\uC410\uC42C\uC448\uC464\uC480\uC49C\uC4B8\uC4D4\uC4F0\uC50C\uC528\uC544\uC560\uC57C\uC598\uC5B4\uC5D0\uC5EC\uC608\uC624\uC640\uC65C\uC678\uC694\uC6B0\uC6CC\uC6E8\uC704\uC720\uC73C\uC758\uC774\uC790\uC7AC\uC7C8\uC7E4\uC800\uC81C\uC838\uC854\uC870\uC88C\uC8A8\uC8C4\uC8E0\uC8FC\uC918\uC934\uC950\uC96C\uC988\uC9A4\uC9C0\uC9DC\uC9F8\uCA14\uCA30\uCA4C\uCA68\uCA84\uCAA0\uCABC\uCAD8\uCAF4\uCB10\uCB2C\uCB48\uCB64\uCB80\uCB9C\uCBB8\uCBD4\uCBF0\uCC0C\uCC28\uCC44\uCC60\uCC7C\uCC98\uCCB4\uCCD0\uCCEC\uCD08\uCD24\uCD40\uCD5C\uCD78\uCD94\uCDB0\uCDCC\uCDE8\uCE04\uCE20\uCE3C\uCE58\uCE74\uCE90\uCEAC\uCEC8\uCEE4\uCF00\uCF1C\uCF38\uCF54\uCF70\uCF8C\uCFA8\uCFC4\uCFE0\uCFFC\uD018\uD034\uD050\uD06C\uD088\uD0A4\uD0C0\uD0DC\uD0F8\uD114\uD130\uD14C\uD168\uD184\uD1A0\uD1BC\uD1D8\uD1F4\uD210\uD22C\uD248\uD264\uD280\uD29C\uD2B8\uD2D4\uD2F0\uD30C\uD328\uD344\uD360\uD37C\uD398\uD3B4\uD3D0\uD3EC\uD408\uD424\uD440\uD45C\uD478\uD494\uD4B0\uD4CC\uD4E8\uD504\uD520\uD53C\uD558\uD574\uD590\uD5AC\uD5C8\uD5E4\uD600\uD61C\uD638\uD654\uD670\uD68C\uD6A8\uD6C4\uD6E0\uD6FC\uD718\uD734\uD750\uD76C\uD788]$/,ktt=/^[\uAC01-\uAC1B\uAC1D-\uAC37\uAC39-\uAC53\uAC55-\uAC6F\uAC71-\uAC8B\uAC8D-\uACA7\uACA9-\uACC3\uACC5-\uACDF\uACE1-\uACFB\uACFD-\uAD17\uAD19-\uAD33\uAD35-\uAD4F\uAD51-\uAD6B\uAD6D-\uAD87\uAD89-\uADA3\uADA5-\uADBF\uADC1-\uADDB\uADDD-\uADF7\uADF9-\uAE13\uAE15-\uAE2F\uAE31-\uAE4B\uAE4D-\uAE67\uAE69-\uAE83\uAE85-\uAE9F\uAEA1-\uAEBB\uAEBD-\uAED7\uAED9-\uAEF3\uAEF5-\uAF0F\uAF11-\uAF2B\uAF2D-\uAF47\uAF49-\uAF63\uAF65-\uAF7F\uAF81-\uAF9B\uAF9D-\uAFB7\uAFB9-\uAFD3\uAFD5-\uAFEF\uAFF1-\uB00B\uB00D-\uB027\uB029-\uB043\uB045-\uB05F\uB061-\uB07B\uB07D-\uB097\uB099-\uB0B3\uB0B5-\uB0CF\uB0D1-\uB0EB\uB0ED-\uB107\uB109-\uB123\uB125-\uB13F\uB141-\uB15B\uB15D-\uB177\uB179-\uB193\uB195-\uB1AF\uB1B1-\uB1CB\uB1CD-\uB1E7\uB1E9-\uB203\uB205-\uB21F\uB221-\uB23B\uB23D-\uB257\uB259-\uB273\uB275-\uB28F\uB291-\uB2AB\uB2AD-\uB2C7\uB2C9-\uB2E3\uB2E5-\uB2FF\uB301-\uB31B\uB31D-\uB337\uB339-\uB353\uB355-\uB36F\uB371-\uB38B\uB38D-\uB3A7\uB3A9-\uB3C3\uB3C5-\uB3DF\uB3E1-\uB3FB\uB3FD-\uB417\uB419-\uB433\uB435-\uB44F\uB451-\uB46B\uB46D-\uB487\uB489-\uB4A3\uB4A5-\uB4BF\uB4C1-\uB4DB\uB4DD-\uB4F7\uB4F9-\uB513\uB515-\uB52F\uB531-\uB54B\uB54D-\uB567\uB569-\uB583\uB585-\uB59F\uB5A1-\uB5BB\uB5BD-\uB5D7\uB5D9-\uB5F3\uB5F5-\uB60F\uB611-\uB62B\uB62D-\uB647\uB649-\uB663\uB665-\uB67F\uB681-\uB69B\uB69D-\uB6B7\uB6B9-\uB6D3\uB6D5-\uB6EF\uB6F1-\uB70B\uB70D-\uB727\uB729-\uB743\uB745-\uB75F\uB761-\uB77B\uB77D-\uB797\uB799-\uB7B3\uB7B5-\uB7CF\uB7D1-\uB7EB\uB7ED-\uB807\uB809-\uB823\uB825-\uB83F\uB841-\uB85B\uB85D-\uB877\uB879-\uB893\uB895-\uB8AF\uB8B1-\uB8CB\uB8CD-\uB8E7\uB8E9-\uB903\uB905-\uB91F\uB921-\uB93B\uB93D-\uB957\uB959-\uB973\uB975-\uB98F\uB991-\uB9AB\uB9AD-\uB9C7\uB9C9-\uB9E3\uB9E5-\uB9FF\uBA01-\uBA1B\uBA1D-\uBA37\uBA39-\uBA53\uBA55-\uBA6F\uBA71-\uBA8B\uBA8D-\uBAA7\uBAA9-\uBAC3\uBAC5-\uBADF\uBAE1-\uBAFB\uBAFD-\uBB17\uBB19-\uBB33\uBB35-\uBB4F\uBB51-\uBB6B\uBB6D-\uBB87\uBB89-\uBBA3\uBBA5-\uBBBF\uBBC1-\uBBDB\uBBDD-\uBBF7\uBBF9-\uBC13\uBC15-\uBC2F\uBC31-\uBC4B\uBC4D-\uBC67\uBC69-\uBC83\uBC85-\uBC9F\uBCA1-\uBCBB\uBCBD-\uBCD7\uBCD9-\uBCF3\uBCF5-\uBD0F\uBD11-\uBD2B\uBD2D-\uBD47\uBD49-\uBD63\uBD65-\uBD7F\uBD81-\uBD9B\uBD9D-\uBDB7\uBDB9-\uBDD3\uBDD5-\uBDEF\uBDF1-\uBE0B\uBE0D-\uBE27\uBE29-\uBE43\uBE45-\uBE5F\uBE61-\uBE7B\uBE7D-\uBE97\uBE99-\uBEB3\uBEB5-\uBECF\uBED1-\uBEEB\uBEED-\uBF07\uBF09-\uBF23\uBF25-\uBF3F\uBF41-\uBF5B\uBF5D-\uBF77\uBF79-\uBF93\uBF95-\uBFAF\uBFB1-\uBFCB\uBFCD-\uBFE7\uBFE9-\uC003\uC005-\uC01F\uC021-\uC03B\uC03D-\uC057\uC059-\uC073\uC075-\uC08F\uC091-\uC0AB\uC0AD-\uC0C7\uC0C9-\uC0E3\uC0E5-\uC0FF\uC101-\uC11B\uC11D-\uC137\uC139-\uC153\uC155-\uC16F\uC171-\uC18B\uC18D-\uC1A7\uC1A9-\uC1C3\uC1C5-\uC1DF\uC1E1-\uC1FB\uC1FD-\uC217\uC219-\uC233\uC235-\uC24F\uC251-\uC26B\uC26D-\uC287\uC289-\uC2A3\uC2A5-\uC2BF\uC2C1-\uC2DB\uC2DD-\uC2F7\uC2F9-\uC313\uC315-\uC32F\uC331-\uC34B\uC34D-\uC367\uC369-\uC383\uC385-\uC39F\uC3A1-\uC3BB\uC3BD-\uC3D7\uC3D9-\uC3F3\uC3F5-\uC40F\uC411-\uC42B\uC42D-\uC447\uC449-\uC463\uC465-\uC47F\uC481-\uC49B\uC49D-\uC4B7\uC4B9-\uC4D3\uC4D5-\uC4EF\uC4F1-\uC50B\uC50D-\uC527\uC529-\uC543\uC545-\uC55F\uC561-\uC57B\uC57D-\uC597\uC599-\uC5B3\uC5B5-\uC5CF\uC5D1-\uC5EB\uC5ED-\uC607\uC609-\uC623\uC625-\uC63F\uC641-\uC65B\uC65D-\uC677\uC679-\uC693\uC695-\uC6AF\uC6B1-\uC6CB\uC6CD-\uC6E7\uC6E9-\uC703\uC705-\uC71F\uC721-\uC73B\uC73D-\uC757\uC759-\uC773\uC775-\uC78F\uC791-\uC7AB\uC7AD-\uC7C7\uC7C9-\uC7E3\uC7E5-\uC7FF\uC801-\uC81B\uC81D-\uC837\uC839-\uC853\uC855-\uC86F\uC871-\uC88B\uC88D-\uC8A7\uC8A9-\uC8C3\uC8C5-\uC8DF\uC8E1-\uC8FB\uC8FD-\uC917\uC919-\uC933\uC935-\uC94F\uC951-\uC96B\uC96D-\uC987\uC989-\uC9A3\uC9A5-\uC9BF\uC9C1-\uC9DB\uC9DD-\uC9F7\uC9F9-\uCA13\uCA15-\uCA2F\uCA31-\uCA4B\uCA4D-\uCA67\uCA69-\uCA83\uCA85-\uCA9F\uCAA1-\uCABB\uCABD-\uCAD7\uCAD9-\uCAF3\uCAF5-\uCB0F\uCB11-\uCB2B\uCB2D-\uCB47\uCB49-\uCB63\uCB65-\uCB7F\uCB81-\uCB9B\uCB9D-\uCBB7\uCBB9-\uCBD3\uCBD5-\uCBEF\uCBF1-\uCC0B\uCC0D-\uCC27\uCC29-\uCC43\uCC45-\uCC5F\uCC61-\uCC7B\uCC7D-\uCC97\uCC99-\uCCB3\uCCB5-\uCCCF\uCCD1-\uCCEB\uCCED-\uCD07\uCD09-\uCD23\uCD25-\uCD3F\uCD41-\uCD5B\uCD5D-\uCD77\uCD79-\uCD93\uCD95-\uCDAF\uCDB1-\uCDCB\uCDCD-\uCDE7\uCDE9-\uCE03\uCE05-\uCE1F\uCE21-\uCE3B\uCE3D-\uCE57\uCE59-\uCE73\uCE75-\uCE8F\uCE91-\uCEAB\uCEAD-\uCEC7\uCEC9-\uCEE3\uCEE5-\uCEFF\uCF01-\uCF1B\uCF1D-\uCF37\uCF39-\uCF53\uCF55-\uCF6F\uCF71-\uCF8B\uCF8D-\uCFA7\uCFA9-\uCFC3\uCFC5-\uCFDF\uCFE1-\uCFFB\uCFFD-\uD017\uD019-\uD033\uD035-\uD04F\uD051-\uD06B\uD06D-\uD087\uD089-\uD0A3\uD0A5-\uD0BF\uD0C1-\uD0DB\uD0DD-\uD0F7\uD0F9-\uD113\uD115-\uD12F\uD131-\uD14B\uD14D-\uD167\uD169-\uD183\uD185-\uD19F\uD1A1-\uD1BB\uD1BD-\uD1D7\uD1D9-\uD1F3\uD1F5-\uD20F\uD211-\uD22B\uD22D-\uD247\uD249-\uD263\uD265-\uD27F\uD281-\uD29B\uD29D-\uD2B7\uD2B9-\uD2D3\uD2D5-\uD2EF\uD2F1-\uD30B\uD30D-\uD327\uD329-\uD343\uD345-\uD35F\uD361-\uD37B\uD37D-\uD397\uD399-\uD3B3\uD3B5-\uD3CF\uD3D1-\uD3EB\uD3ED-\uD407\uD409-\uD423\uD425-\uD43F\uD441-\uD45B\uD45D-\uD477\uD479-\uD493\uD495-\uD4AF\uD4B1-\uD4CB\uD4CD-\uD4E7\uD4E9-\uD503\uD505-\uD51F\uD521-\uD53B\uD53D-\uD557\uD559-\uD573\uD575-\uD58F\uD591-\uD5AB\uD5AD-\uD5C7\uD5C9-\uD5E3\uD5E5-\uD5FF\uD601-\uD61B\uD61D-\uD637\uD639-\uD653\uD655-\uD66F\uD671-\uD68B\uD68D-\uD6A7\uD6A9-\uD6C3\uD6C5-\uD6DF\uD6E1-\uD6FB\uD6FD-\uD717\uD719-\uD733\uD735-\uD74F\uD751-\uD76B\uD76D-\uD787\uD789-\uD7A3]$/,Dtt=/^(?:[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u2388\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2605\u2607-\u2612\u2614-\u2685\u2690-\u2705\u2708-\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763-\u2767\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC00-\uDCFF\uDD0D-\uDD0F\uDD2F\uDD6C-\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDAD-\uDDE5\uDE01-\uDE0F\uDE1A\uDE2F\uDE32-\uDE3A\uDE3C-\uDE3F\uDE49-\uDFFA]|\uD83D[\uDC00-\uDD3D\uDD46-\uDE4F\uDE80-\uDEFF\uDF74-\uDF7F\uDFD5-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE-\uDCFF\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDEFF]|\uD83F[\uDC00-\uDFFD])$/,Ott=(e,t)=>{var n=Wn.Any;return e.search(Att)!==-1&&(n|=Wn.Extend),t===8205&&(n|=Wn.ZWJ),t>=127462&&t<=127487&&(n|=Wn.RI),e.search(wtt)!==-1&&(n|=Wn.Prepend),e.search(xtt)!==-1&&(n|=Wn.SpacingMark),e.search(_tt)!==-1&&(n|=Wn.L),e.search(Ett)!==-1&&(n|=Wn.V),e.search(Ctt)!==-1&&(n|=Wn.T),e.search(Stt)!==-1&&(n|=Wn.LV),e.search(ktt)!==-1&&(n|=Wn.LVT),e.search(Dtt)!==-1&&(n|=Wn.ExtPict),n};function p2(e,t){return!!(e&t)}var Ttt=[[Wn.L,Wn.L|Wn.V|Wn.LV|Wn.LVT],[Wn.LV|Wn.V,Wn.V|Wn.T],[Wn.LVT|Wn.T,Wn.T],[Wn.Any,Wn.Extend|Wn.ZWJ],[Wn.Any,Wn.SpacingMark],[Wn.Prepend,Wn.Any],[Wn.ZWJ,Wn.ExtPict],[Wn.RI,Wn.RI]];function Mtt(e,t){return Ttt.findIndex(n=>p2(e,n[0])&&p2(t,n[1]))===-1}var Ntt=/(?:[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u2388\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2605\u2607-\u2612\u2614-\u2685\u2690-\u2705\u2708-\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763-\u2767\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC00-\uDCFF\uDD0D-\uDD0F\uDD2F\uDD6C-\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDAD-\uDDE5\uDE01-\uDE0F\uDE1A\uDE2F\uDE32-\uDE3A\uDE3C-\uDE3F\uDE49-\uDFFA]|\uD83D[\uDC00-\uDD3D\uDD46-\uDE4F\uDE80-\uDEFF\uDF74-\uDF7F\uDFD5-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE-\uDCFF\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDEFF]|\uD83F[\uDC00-\uDFFD])(?:[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09BE\u09C1-\u09C4\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3E\u0B3F\u0B41-\u0B44\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B82\u0BBE\u0BC0\u0BCD\u0BD7\u0C00\u0C04\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC2\u0CC6\u0CCC\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D3E\u0D41-\u0D44\u0D4D\u0D57\u0D62\u0D63\u0D81\u0DCA\u0DCF\u0DD2-\u0DD4\u0DD6\u0DDF\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1AC0\u1B00-\u1B03\u1B34-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u200C\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA82C\uA8C4\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9BD\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFF9E\uFF9F]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50]|\uD804[\uDC01\uDC38-\uDC46\uDC7F-\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDD00-\uDD02\uDD27-\uDD2B\uDD2D-\uDD34\uDD73\uDD80\uDD81\uDDB6-\uDDBE\uDDC9-\uDDCC\uDDCF\uDE2F-\uDE31\uDE34\uDE36\uDE37\uDE3E\uDEDF\uDEE3-\uDEEA\uDF00\uDF01\uDF3B\uDF3C\uDF3E\uDF40\uDF57\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC38-\uDC3F\uDC42-\uDC44\uDC46\uDC5E\uDCB0\uDCB3-\uDCB8\uDCBA\uDCBD\uDCBF\uDCC0\uDCC2\uDCC3\uDDAF\uDDB2-\uDDB5\uDDBC\uDDBD\uDDBF\uDDC0\uDDDC\uDDDD\uDE33-\uDE3A\uDE3D\uDE3F\uDE40\uDEAB\uDEAD\uDEB0-\uDEB5\uDEB7\uDF1D-\uDF1F\uDF22-\uDF25\uDF27-\uDF2B]|\uD806[\uDC2F-\uDC37\uDC39\uDC3A\uDD30\uDD3B\uDD3C\uDD3E\uDD43\uDDD4-\uDDD7\uDDDA\uDDDB\uDDE0\uDE01-\uDE0A\uDE33-\uDE38\uDE3B-\uDE3E\uDE47\uDE51-\uDE56\uDE59-\uDE5B\uDE8A-\uDE96\uDE98\uDE99]|\uD807[\uDC30-\uDC36\uDC38-\uDC3D\uDC3F\uDC92-\uDCA7\uDCAA-\uDCB0\uDCB2\uDCB3\uDCB5\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD90\uDD91\uDD95\uDD97\uDEF3\uDEF4]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF8F-\uDF92\uDFE4]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65\uDD67-\uDD69\uDD6E-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uD83C[\uDFFB-\uDFFF]|\uDB40[\uDC20-\uDC7F\uDD00-\uDDEF])*\u200D$/,Ftt=e=>e.search(Ntt)!==-1,Rtt=/(?:\uD83C[\uDDE6-\uDDFF])+$/g,Itt=e=>{var t=e.match(Rtt);return t!==null&&t[0].length/2%2==1},r2e=e=>Fa(e)&&Lt.isNodeList(e.children)&&!ue.isEditor(e),sn={isAncestor:e=>Fa(e)&&Lt.isNodeList(e.children),isElement:r2e,isElementList:e=>Array.isArray(e)&&e.every(t=>sn.isElement(t)),isElementProps:e=>e.children!==void 0,isElementType:function(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"type";return r2e(e)&&e[n]===t},matches(e,t){for(var n in t)if(n!=="children"&&e[n]!==t[n])return!1;return!0}},Btt=["text"],Ptt=["text"];function o2e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function h2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?o2e(Object(n),!0).forEach(function(r){qc(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o2e(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}var i2e=new WeakMap,ue={above(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{voids:n=!1,mode:r="lowest",at:o=e.selection,match:i}=t;if(o){var a=ue.path(e,o),l=r==="lowest";for(var[s,u]of ue.levels(e,{at:a,voids:n,match:i,reverse:l}))if(!Qt.isText(s)&&!qe.equals(a,u))return[s,u]}},addMark(e,t,n){e.addMark(t,n)},after(e,t){var n,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o={anchor:ue.point(e,t,{edge:"end"}),focus:ue.end(e,[])},{distance:i=1}=r,a=0;for(var l of ue.positions(e,h2(h2({},r),{},{at:o}))){if(a>i)break;a!==0&&(n=l),a++}return n},before(e,t){var n,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o={anchor:ue.start(e,[]),focus:ue.point(e,t,{edge:"start"})},{distance:i=1}=r,a=0;for(var l of ue.positions(e,h2(h2({},r),{},{at:o,reverse:!0}))){if(a>i)break;a!==0&&(n=l),a++}return n},deleteBackward(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{unit:n="character"}=t;e.deleteBackward(n)},deleteForward(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{unit:n="character"}=t;e.deleteForward(n)},deleteFragment(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{direction:n="forward"}=t;e.deleteFragment(n)},edges:(e,t)=>[ue.start(e,t),ue.end(e,t)],end:(e,t)=>ue.point(e,t,{edge:"end"}),first(e,t){var n=ue.path(e,t,{edge:"start"});return ue.node(e,n)},fragment(e,t){var n=ue.range(e,t);return Lt.fragment(e,n)},hasBlocks:(e,t)=>t.children.some(n=>ue.isBlock(e,n)),hasInlines:(e,t)=>t.children.some(n=>Qt.isText(n)||ue.isInline(e,n)),hasTexts:(e,t)=>t.children.every(n=>Qt.isText(n)),insertBreak(e){e.insertBreak()},insertFragment(e,t){e.insertFragment(t)},insertNode(e,t){e.insertNode(t)},insertText(e,t){e.insertText(t)},isBlock:(e,t)=>sn.isElement(t)&&!e.isInline(t),isEditor(e){if(!Fa(e))return!1;var t=i2e.get(e);if(t!==void 0)return t;var n=typeof e.addMark=="function"&&typeof e.apply=="function"&&typeof e.deleteBackward=="function"&&typeof e.deleteForward=="function"&&typeof e.deleteFragment=="function"&&typeof e.insertBreak=="function"&&typeof e.insertFragment=="function"&&typeof e.insertNode=="function"&&typeof e.insertText=="function"&&typeof e.isInline=="function"&&typeof e.isVoid=="function"&&typeof e.normalizeNode=="function"&&typeof e.onChange=="function"&&typeof e.removeMark=="function"&&(e.marks===null||Fa(e.marks))&&(e.selection===null||ct.isRange(e.selection))&&Lt.isNodeList(e.children)&&Vp.isOperationList(e.operations);return i2e.set(e,n),n},isEnd(e,t,n){var r=ue.end(e,n);return nr.equals(t,r)},isEdge:(e,t,n)=>ue.isStart(e,t,n)||ue.isEnd(e,t,n),isEmpty(e,t){var{children:n}=t,[r]=n;return n.length===0||n.length===1&&Qt.isText(r)&&r.text===""&&!e.isVoid(t)},isInline:(e,t)=>sn.isElement(t)&&e.isInline(t),isNormalizing(e){var t=Jge.get(e);return t===void 0||t},isStart(e,t,n){if(t.offset!==0)return!1;var r=ue.start(e,n);return nr.equals(t,r)},isVoid:(e,t)=>sn.isElement(t)&&e.isVoid(t),last(e,t){var n=ue.path(e,t,{edge:"end"});return ue.node(e,n)},leaf(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=ue.path(e,t,n);return[Lt.leaf(e,r),r]},*levels(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{at:n=e.selection,reverse:r=!1,voids:o=!1}=t,{match:i}=t;if(i==null&&(i=()=>!0),n){var a=[],l=ue.path(e,n);for(var[s,u]of Lt.levels(e,l))if(i(s,u)&&(a.push([s,u]),!o&&ue.isVoid(e,s)))break;r&&a.reverse(),yield*a}},marks(e){var{marks:t,selection:n}=e;if(!n)return null;if(t)return t;if(ct.isExpanded(n)){var[r]=ue.nodes(e,{match:Qt.isText});if(r){var[o]=r;return nf(o,Btt)}return{}}var{anchor:i}=n,{path:a}=i,[l]=ue.leaf(e,a);if(i.offset===0){var s=ue.previous(e,{at:a,match:Qt.isText}),u=ue.above(e,{match:p=>ue.isBlock(e,p)});if(s&&u){var[c,d]=s,[,f]=u;qe.isAncestor(f,d)&&(l=c)}}return nf(l,Ptt)},next(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{mode:n="lowest",voids:r=!1}=t,{match:o,at:i=e.selection}=t;if(i){var a=ue.after(e,i,{voids:r});if(a){var[,l]=ue.last(e,[]),s=[a.path,l];if(qe.isPath(i)&&i.length===0)throw new Error("Cannot get the next node from the root node!");if(o==null)if(qe.isPath(i)){var[u]=ue.parent(e,i);o=d=>u.children.includes(d)}else o=()=>!0;var[c]=ue.nodes(e,{at:s,match:o,mode:n,voids:r});return c}}},node(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=ue.path(e,t,n);return[Lt.get(e,r),r]},*nodes(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{at:n=e.selection,mode:r="all",universal:o=!1,reverse:i=!1,voids:a=!1}=t,{match:l}=t;if(l||(l=()=>!0),n){var s,u;if(Ltt.isSpan(n))s=n[0],u=n[1];else{var c=ue.path(e,n,{edge:"start"}),d=ue.path(e,n,{edge:"end"});s=i?d:c,u=i?c:d}var f,p=Lt.nodes(e,{reverse:i,from:s,to:u,pass:w=>{var[x]=w;return!a&&ue.isVoid(e,x)}}),m=[];for(var[v,g]of p){var b=f&&qe.compare(g,f[1])===0;if(r!=="highest"||!b){if(l(v,g))if(r==="lowest"&&b)f=[v,g];else{var y=r==="lowest"?f:[v,g];y&&(o?m.push(y):yield y),f=[v,g]}else if(o&&!b&&Qt.isText(v))return}}r==="lowest"&&f&&(o?m.push(f):yield f),o&&(yield*m)}},normalize(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{force:n=!1}=t,r=i=>SE.get(i)||[];if(ue.isNormalizing(e)){if(n){var o=Array.from(Lt.nodes(e),i=>{var[,a]=i;return a});SE.set(e,o)}r(e).length!==0&&ue.withoutNormalizing(e,()=>{for(var i of r(e))if(Lt.has(e,i)){var a=ue.node(e,i),[l,s]=a;sn.isElement(l)&&l.children.length===0&&e.normalizeNode(a)}for(var u=42*r(e).length,c=0;r(e).length!==0;){if(c>u)throw new Error(`
| Could not completely normalize the editor after `.concat(u,` iterations! This is usually due to incorrect normalization logic that leaves a node in an invalid state.
| `));var d=r(e).pop();if(Lt.has(e,d)){var f=ue.node(e,d);e.normalizeNode(f)}c++}})}},parent(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=ue.path(e,t,n),o=qe.parent(r);return ue.node(e,o)},path(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},{depth:r,edge:o}=n;if(qe.isPath(t)){if(o==="start"){var[,i]=Lt.first(e,t);t=i}else if(o==="end"){var[,a]=Lt.last(e,t);t=a}}return ct.isRange(t)&&(t=o==="start"?ct.start(t):o==="end"?ct.end(t):qe.common(t.anchor.path,t.focus.path)),nr.isPoint(t)&&(t=t.path),r!=null&&(t=t.slice(0,r)),t},hasPath:(e,t)=>Lt.has(e,t),pathRef(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},{affinity:r="forward"}=n,o={current:t,affinity:r,unref(){var{current:i}=o;return ue.pathRefs(e).delete(o),o.current=null,i}};return ue.pathRefs(e).add(o),o},pathRefs(e){var t=Zge.get(e);return t||(t=new Set,Zge.set(e,t)),t},point(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},{edge:r="start"}=n;if(qe.isPath(t)){var o;if(r==="end"){var[,i]=Lt.last(e,t);o=i}else{var[,a]=Lt.first(e,t);o=a}var l=Lt.get(e,o);if(!Qt.isText(l))throw new Error("Cannot get the ".concat(r," point in the node at path [").concat(t,"] because it has no ").concat(r," text node."));return{path:o,offset:r==="end"?l.text.length:0}}if(ct.isRange(t)){var[s,u]=ct.edges(t);return r==="start"?s:u}return t},pointRef(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},{affinity:r="forward"}=n,o={current:t,affinity:r,unref(){var{current:i}=o;return ue.pointRefs(e).delete(o),o.current=null,i}};return ue.pointRefs(e).add(o),o},pointRefs(e){var t=e2e.get(e);return t||(t=new Set,e2e.set(e,t)),t},*positions(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{at:n=e.selection,unit:r="offset",reverse:o=!1,voids:i=!1}=t;if(n){var a=ue.range(e,n),[l,s]=ct.edges(a),u=o?s:l,c=!1,d="",f=0,p=0,m=0;for(var[v,g]of ue.nodes(e,{at:n,reverse:o,voids:i})){if(sn.isElement(v)){if(!i&&e.isVoid(v)){yield ue.start(e,g);continue}if(e.isInline(v))continue;if(ue.hasInlines(e,v)){var b=qe.isAncestor(g,s.path)?s:ue.end(e,g),y=qe.isAncestor(g,l.path)?l:ue.start(e,g);d=ue.string(e,{anchor:y,focus:b},{voids:i}),c=!0}}if(Qt.isText(v)){var w=qe.equals(g,u.path);for(w?(p=o?u.offset:v.text.length-u.offset,m=u.offset):(p=v.text.length,m=o?p:0),(w||c||r==="offset")&&(yield{path:g,offset:m},c=!1);;){if(f===0){if(d==="")break;f=x(d,r,o),d=_j(d,f,o)[1]}if(m=o?m-f:m+f,(p-=f)<0){f=-p;break}f=0,yield{path:g,offset:m}}}}}function x(_,E,C){return E==="character"?xj(_,C):E==="word"?function(T){for(var k=arguments.length>1&&arguments[1]!==void 0&&arguments[1],I=0,O=!1;T.length>0;){var F=xj(T,k),[N,B]=_j(T,F,k);if(mtt(N,B,k))O=!0,I+=F;else{if(O)break;I+=F}T=B}return I}(_,C):E==="line"||E==="block"?_.length:1}},previous(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{mode:n="lowest",voids:r=!1}=t,{match:o,at:i=e.selection}=t;if(i){var a=ue.before(e,i,{voids:r});if(a){var[,l]=ue.first(e,[]),s=[a.path,l];if(qe.isPath(i)&&i.length===0)throw new Error("Cannot get the previous node from the root node!");if(o==null)if(qe.isPath(i)){var[u]=ue.parent(e,i);o=d=>u.children.includes(d)}else o=()=>!0;var[c]=ue.nodes(e,{reverse:!0,at:s,match:o,mode:n,voids:r});return c}}},range:(e,t,n)=>ct.isRange(t)&&!n?t:{anchor:ue.start(e,t),focus:ue.end(e,n||t)},rangeRef(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},{affinity:r="forward"}=n,o={current:t,affinity:r,unref(){var{current:i}=o;return ue.rangeRefs(e).delete(o),o.current=null,i}};return ue.rangeRefs(e).add(o),o},rangeRefs(e){var t=t2e.get(e);return t||(t=new Set,t2e.set(e,t)),t},removeMark(e,t){e.removeMark(t)},setNormalizing(e,t){Jge.set(e,t)},start:(e,t)=>ue.point(e,t,{edge:"start"}),string(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},{voids:r=!1}=n,o=ue.range(e,t),[i,a]=ct.edges(o),l="";for(var[s,u]of ue.nodes(e,{at:o,match:Qt.isText,voids:r})){var c=s.text;qe.equals(u,a.path)&&(c=c.slice(0,a.offset)),qe.equals(u,i.path)&&(c=c.slice(i.offset)),l+=c}return l},unhangRange(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},{voids:r=!1}=n,[o,i]=ct.edges(t);if(o.offset!==0||i.offset!==0||ct.isCollapsed(t))return t;var a=ue.above(e,{at:i,match:f=>ue.isBlock(e,f)}),l=a?a[1]:[],s={anchor:ue.start(e,[]),focus:i},u=!0;for(var[c,d]of ue.nodes(e,{at:s,match:Qt.isText,reverse:!0,voids:r}))if(u)u=!1;else if(c.text!==""||qe.isBefore(d,l)){i={path:d,offset:c.text.length};break}return{anchor:o,focus:i}},void(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return ue.above(e,h2(h2({},t),{},{match:n=>ue.isVoid(e,n)}))},withoutNormalizing(e,t){var n=ue.isNormalizing(e);ue.setNormalizing(e,!1);try{t()}finally{ue.setNormalizing(e,n)}ue.normalize(e)}},Ltt={isSpan:e=>Array.isArray(e)&&e.length===2&&e.every(qe.isPath)},jtt=["children"],Vtt=["text"],a2e=new WeakMap,Lt={ancestor(e,t){var n=Lt.get(e,t);if(Qt.isText(n))throw new Error("Cannot get the ancestor node at path [".concat(t,"] because it refers to a text node instead: ").concat(n));return n},*ancestors(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};for(var r of qe.ancestors(t,n)){var o=[Lt.ancestor(e,r),r];yield o}},child(e,t){if(Qt.isText(e))throw new Error("Cannot get the child of a text node: ".concat(JSON.stringify(e)));var n=e.children[t];if(n==null)throw new Error("Cannot get child at index `".concat(t,"` in node: ").concat(JSON.stringify(e)));return n},*children(e,t){for(var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},{reverse:r=!1}=n,o=Lt.ancestor(e,t),{children:i}=o,a=r?i.length-1:0;r?a>=0:a<i.length;){var l=Lt.child(o,a),s=t.concat(a);yield[l,s],a=r?a-1:a+1}},common(e,t,n){var r=qe.common(t,n);return[Lt.get(e,r),r]},descendant(e,t){var n=Lt.get(e,t);if(ue.isEditor(n))throw new Error("Cannot get the descendant node at path [".concat(t,"] because it refers to the root editor node instead: ").concat(n));return n},*descendants(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};for(var[n,r]of Lt.nodes(e,t))r.length!==0&&(yield[n,r])},*elements(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};for(var[n,r]of Lt.nodes(e,t))sn.isElement(n)&&(yield[n,r])},extractProps:e=>sn.isAncestor(e)?nf(e,jtt):nf(e,Vtt),first(e,t){for(var n=t.slice(),r=Lt.get(e,n);r&&!Qt.isText(r)&&r.children.length!==0;)r=r.children[0],n.push(0);return[r,n]},fragment(e,t){if(Qt.isText(e))throw new Error("Cannot get a fragment starting from a root text node: ".concat(JSON.stringify(e)));var n=CE({children:e.children},r=>{var[o,i]=ct.edges(t),a=Lt.nodes(r,{reverse:!0,pass:f=>{var[,p]=f;return!ct.includes(t,p)}});for(var[,l]of a){if(!ct.includes(t,l)){var s=Lt.parent(r,l),u=l[l.length-1];s.children.splice(u,1)}if(qe.equals(l,i.path)){var c=Lt.leaf(r,l);c.text=c.text.slice(0,i.offset)}if(qe.equals(l,o.path)){var d=Lt.leaf(r,l);d.text=d.text.slice(o.offset)}}ue.isEditor(r)&&(r.selection=null)});return n.children},get(e,t){for(var n=e,r=0;r<t.length;r++){var o=t[r];if(Qt.isText(n)||!n.children[o])throw new Error("Cannot find a descendant at path [".concat(t,"] in node: ").concat(JSON.stringify(e)));n=n.children[o]}return n},has(e,t){for(var n=e,r=0;r<t.length;r++){var o=t[r];if(Qt.isText(n)||!n.children[o])return!1;n=n.children[o]}return!0},isNode:e=>Qt.isText(e)||sn.isElement(e)||ue.isEditor(e),isNodeList(e){if(!Array.isArray(e))return!1;var t=a2e.get(e);if(t!==void 0)return t;var n=e.every(r=>Lt.isNode(r));return a2e.set(e,n),n},last(e,t){for(var n=t.slice(),r=Lt.get(e,n);r&&!Qt.isText(r)&&r.children.length!==0;){var o=r.children.length-1;r=r.children[o],n.push(o)}return[r,n]},leaf(e,t){var n=Lt.get(e,t);if(!Qt.isText(n))throw new Error("Cannot get the leaf node at path [".concat(t,"] because it refers to a non-leaf node: ").concat(n));return n},*levels(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};for(var r of qe.levels(t,n)){var o=Lt.get(e,r);yield[o,r]}},matches:(e,t)=>sn.isElement(e)&&sn.isElementProps(t)&&sn.matches(e,t)||Qt.isText(e)&&Qt.isTextProps(t)&&Qt.matches(e,t),*nodes(e){for(var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{pass:n,reverse:r=!1}=t,{from:o=[],to:i}=t,a=new Set,l=[],s=e;!i||!(r?qe.isBefore(l,i):qe.isAfter(l,i));)if(a.has(s)||(yield[s,l]),a.has(s)||Qt.isText(s)||s.children.length===0||n!=null&&n([s,l])!==!1){if(l.length===0)break;if(!r){var u=qe.next(l);if(Lt.has(e,u)){l=u,s=Lt.get(e,l);continue}}r&&l[l.length-1]!==0?(l=qe.previous(l),s=Lt.get(e,l)):(l=qe.parent(l),s=Lt.get(e,l),a.add(s))}else{a.add(s);var c=r?s.children.length-1:0;qe.isAncestor(l,o)&&(c=o[l.length]),l=l.concat(c),s=Lt.get(e,l)}},parent(e,t){var n=qe.parent(t),r=Lt.get(e,n);if(Qt.isText(r))throw new Error("Cannot get the parent of path [".concat(t,"] because it does not exist in the root."));return r},string:e=>Qt.isText(e)?e.text:e.children.map(Lt.string).join(""),*texts(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};for(var[n,r]of Lt.nodes(e,t))Qt.isText(n)&&(yield[n,r])}};function l2e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function gi(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?l2e(Object(n),!0).forEach(function(r){qc(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l2e(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}var Vp={isNodeOperation:e=>Vp.isOperation(e)&&e.type.endsWith("_node"),isOperation(e){if(!Fa(e))return!1;switch(e.type){case"insert_node":case"remove_node":return qe.isPath(e.path)&&Lt.isNode(e.node);case"insert_text":case"remove_text":return typeof e.offset=="number"&&typeof e.text=="string"&&qe.isPath(e.path);case"merge_node":return typeof e.position=="number"&&qe.isPath(e.path)&&Fa(e.properties);case"move_node":return qe.isPath(e.path)&&qe.isPath(e.newPath);case"set_node":return qe.isPath(e.path)&&Fa(e.properties)&&Fa(e.newProperties);case"set_selection":return e.properties===null&&ct.isRange(e.newProperties)||e.newProperties===null&&ct.isRange(e.properties)||Fa(e.properties)&&Fa(e.newProperties);case"split_node":return qe.isPath(e.path)&&typeof e.position=="number"&&Fa(e.properties);default:return!1}},isOperationList:e=>Array.isArray(e)&&e.every(t=>Vp.isOperation(t)),isSelectionOperation:e=>Vp.isOperation(e)&&e.type.endsWith("_selection"),isTextOperation:e=>Vp.isOperation(e)&&e.type.endsWith("_text"),inverse(e){switch(e.type){case"insert_node":return gi(gi({},e),{},{type:"remove_node"});case"insert_text":return gi(gi({},e),{},{type:"remove_text"});case"merge_node":return gi(gi({},e),{},{type:"split_node",path:qe.previous(e.path)});case"move_node":var{newPath:t,path:n}=e;if(qe.equals(t,n))return e;if(qe.isSibling(n,t))return gi(gi({},e),{},{path:t,newPath:n});var r=qe.transform(n,e),o=qe.transform(qe.next(n),e);return gi(gi({},e),{},{path:r,newPath:o});case"remove_node":return gi(gi({},e),{},{type:"insert_node"});case"remove_text":return gi(gi({},e),{},{type:"insert_text"});case"set_node":var{properties:i,newProperties:a}=e;return gi(gi({},e),{},{properties:a,newProperties:i});case"set_selection":var{properties:l,newProperties:s}=e;return gi(gi({},e),{},l==null?{properties:s,newProperties:null}:s==null?{properties:null,newProperties:l}:{properties:s,newProperties:l});case"split_node":return gi(gi({},e),{},{type:"merge_node",path:qe.next(e.path)})}}},qe={ancestors(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{reverse:n=!1}=t,r=qe.levels(e,t);return n?r.slice(1):r.slice(0,-1)},common(e,t){for(var n=[],r=0;r<e.length&&r<t.length;r++){var o=e[r];if(o!==t[r])break;n.push(o)}return n},compare(e,t){for(var n=Math.min(e.length,t.length),r=0;r<n;r++){if(e[r]<t[r])return-1;if(e[r]>t[r])return 1}return 0},endsAfter(e,t){var n=e.length-1,r=e.slice(0,n),o=t.slice(0,n),i=e[n],a=t[n];return qe.equals(r,o)&&i>a},endsAt(e,t){var n=e.length,r=e.slice(0,n),o=t.slice(0,n);return qe.equals(r,o)},endsBefore(e,t){var n=e.length-1,r=e.slice(0,n),o=t.slice(0,n),i=e[n],a=t[n];return qe.equals(r,o)&&i<a},equals:(e,t)=>e.length===t.length&&e.every((n,r)=>n===t[r]),hasPrevious:e=>e[e.length-1]>0,isAfter:(e,t)=>qe.compare(e,t)===1,isAncestor:(e,t)=>e.length<t.length&&qe.compare(e,t)===0,isBefore:(e,t)=>qe.compare(e,t)===-1,isChild:(e,t)=>e.length===t.length+1&&qe.compare(e,t)===0,isCommon:(e,t)=>e.length<=t.length&&qe.compare(e,t)===0,isDescendant:(e,t)=>e.length>t.length&&qe.compare(e,t)===0,isParent:(e,t)=>e.length+1===t.length&&qe.compare(e,t)===0,isPath:e=>Array.isArray(e)&&(e.length===0||typeof e[0]=="number"),isSibling(e,t){if(e.length!==t.length)return!1;var n=e.slice(0,-1),r=t.slice(0,-1);return e[e.length-1]!==t[t.length-1]&&qe.equals(n,r)},levels(e){for(var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{reverse:n=!1}=t,r=[],o=0;o<=e.length;o++)r.push(e.slice(0,o));return n&&r.reverse(),r},next(e){if(e.length===0)throw new Error("Cannot get the next path of a root path [".concat(e,"], because it has no next index."));var t=e[e.length-1];return e.slice(0,-1).concat(t+1)},parent(e){if(e.length===0)throw new Error("Cannot get the parent path of the root path [".concat(e,"]."));return e.slice(0,-1)},previous(e){if(e.length===0)throw new Error("Cannot get the previous path of a root path [".concat(e,"], because it has no previous index."));var t=e[e.length-1];if(t<=0)throw new Error("Cannot get the previous path of a first child path [".concat(e,"] because it would result in a negative index."));return e.slice(0,-1).concat(t-1)},relative(e,t){if(!qe.isAncestor(t,e)&&!qe.equals(e,t))throw new Error("Cannot get the relative path of [".concat(e,"] inside ancestor [").concat(t,"], because it is not above or equal to the path."));return e.slice(t.length)},transform(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return CE(e,r=>{var{affinity:o="forward"}=n;if(e&&(e==null?void 0:e.length)!==0){if(r===null)return null;switch(t.type){case"insert_node":var{path:i}=t;(qe.equals(i,r)||qe.endsBefore(i,r)||qe.isAncestor(i,r))&&(r[i.length-1]+=1);break;case"remove_node":var{path:a}=t;if(qe.equals(a,r)||qe.isAncestor(a,r))return null;qe.endsBefore(a,r)&&(r[a.length-1]-=1);break;case"merge_node":var{path:l,position:s}=t;qe.equals(l,r)||qe.endsBefore(l,r)?r[l.length-1]-=1:qe.isAncestor(l,r)&&(r[l.length-1]-=1,r[l.length]+=s);break;case"split_node":var{path:u,position:c}=t;if(qe.equals(u,r)){if(o==="forward")r[r.length-1]+=1;else if(o!=="backward")return null}else qe.endsBefore(u,r)?r[u.length-1]+=1:qe.isAncestor(u,r)&&e[u.length]>=c&&(r[u.length-1]+=1,r[u.length]-=c);break;case"move_node":var{path:d,newPath:f}=t;if(qe.equals(d,f))return;if(qe.isAncestor(d,r)||qe.equals(d,r)){var p=f.slice();return qe.endsBefore(d,f)&&d.length<f.length&&(p[d.length-1]-=1),p.concat(r.slice(d.length))}qe.isSibling(d,f)&&(qe.isAncestor(f,r)||qe.equals(f,r))?qe.endsBefore(d,r)?r[d.length-1]-=1:r[d.length-1]+=1:qe.endsBefore(f,r)||qe.equals(f,r)||qe.isAncestor(f,r)?(qe.endsBefore(d,r)&&(r[d.length-1]-=1),r[f.length-1]+=1):qe.endsBefore(d,r)&&(qe.equals(f,r)&&(r[f.length-1]+=1),r[d.length-1]-=1)}}})}},ztt={transform(e,t){var{current:n,affinity:r}=e;if(n!=null){var o=qe.transform(n,t,{affinity:r});e.current=o,o==null&&e.unref()}}};function s2e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function u2e(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?s2e(Object(n),!0).forEach(function(r){qc(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s2e(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}var nr={compare(e,t){var n=qe.compare(e.path,t.path);return n===0?e.offset<t.offset?-1:e.offset>t.offset?1:0:n},isAfter:(e,t)=>nr.compare(e,t)===1,isBefore:(e,t)=>nr.compare(e,t)===-1,equals:(e,t)=>e.offset===t.offset&&qe.equals(e.path,t.path),isPoint:e=>Fa(e)&&typeof e.offset=="number"&&qe.isPath(e.path),transform(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return CE(e,r=>{if(r===null)return null;var{affinity:o="forward"}=n,{path:i,offset:a}=r;switch(t.type){case"insert_node":case"move_node":r.path=qe.transform(i,t,n);break;case"insert_text":qe.equals(t.path,i)&&t.offset<=a&&(r.offset+=t.text.length);break;case"merge_node":qe.equals(t.path,i)&&(r.offset+=t.position),r.path=qe.transform(i,t,n);break;case"remove_text":qe.equals(t.path,i)&&t.offset<=a&&(r.offset-=Math.min(a-t.offset,t.text.length));break;case"remove_node":if(qe.equals(t.path,i)||qe.isAncestor(t.path,i))return null;r.path=qe.transform(i,t,n);break;case"split_node":if(qe.equals(t.path,i)){if(t.position===a&&o==null)return null;(t.position<a||t.position===a&&o==="forward")&&(r.offset-=t.position,r.path=qe.transform(i,t,u2e(u2e({},n),{},{affinity:"forward"})))}else r.path=qe.transform(i,t,n)}})}},Htt={transform(e,t){var{current:n,affinity:r}=e;if(n!=null){var o=nr.transform(n,t,{affinity:r});e.current=o,o==null&&e.unref()}}},$tt=["anchor","focus"];function c2e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}var ct={edges(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{reverse:n=!1}=t,{anchor:r,focus:o}=e;return ct.isBackward(e)===n?[r,o]:[o,r]},end(e){var[,t]=ct.edges(e);return t},equals:(e,t)=>nr.equals(e.anchor,t.anchor)&&nr.equals(e.focus,t.focus),includes(e,t){if(ct.isRange(t)){if(ct.includes(e,t.anchor)||ct.includes(e,t.focus))return!0;var[n,r]=ct.edges(e),[o,i]=ct.edges(t);return nr.isBefore(n,o)&&nr.isAfter(r,i)}var[a,l]=ct.edges(e),s=!1,u=!1;return nr.isPoint(t)?(s=nr.compare(t,a)>=0,u=nr.compare(t,l)<=0):(s=qe.compare(t,a.path)>=0,u=qe.compare(t,l.path)<=0),s&&u},intersection(e,t){var n=nf(e,$tt),[r,o]=ct.edges(e),[i,a]=ct.edges(t),l=nr.isBefore(r,i)?i:r,s=nr.isBefore(o,a)?o:a;return nr.isBefore(s,l)?null:function(u){for(var c=1;c<arguments.length;c++){var d=arguments[c]!=null?arguments[c]:{};c%2?c2e(Object(d),!0).forEach(function(f){qc(u,f,d[f])}):Object.getOwnPropertyDescriptors?Object.defineProperties(u,Object.getOwnPropertyDescriptors(d)):c2e(Object(d)).forEach(function(f){Object.defineProperty(u,f,Object.getOwnPropertyDescriptor(d,f))})}return u}({anchor:l,focus:s},n)},isBackward(e){var{anchor:t,focus:n}=e;return nr.isAfter(t,n)},isCollapsed(e){var{anchor:t,focus:n}=e;return nr.equals(t,n)},isExpanded:e=>!ct.isCollapsed(e),isForward:e=>!ct.isBackward(e),isRange:e=>Fa(e)&&nr.isPoint(e.anchor)&&nr.isPoint(e.focus),*points(e){yield[e.anchor,"anchor"],yield[e.focus,"focus"]},start(e){var[t]=ct.edges(e);return t},transform(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return CE(e,r=>{if(r===null)return null;var o,i,{affinity:a="inward"}=n;if(a==="inward"){var l=ct.isCollapsed(r);ct.isForward(r)?(o="forward",i=l?o:"backward"):(o="backward",i=l?o:"forward")}else a==="outward"?ct.isForward(r)?(o="backward",i="forward"):(o="forward",i="backward"):(o=a,i=a);var s=nr.transform(r.anchor,t,{affinity:o}),u=nr.transform(r.focus,t,{affinity:i});if(!s||!u)return null;r.anchor=s,r.focus=u})}},Utt={transform(e,t){var{current:n,affinity:r}=e;if(n!=null){var o=ct.transform(n,t,{affinity:r});e.current=o,o==null&&e.unref()}}},d2e=(e,t)=>{for(var n in e){var r=e[n],o=t[n];if(Fa(r)&&Fa(o)){if(!d2e(r,o))return!1}else if(Array.isArray(r)&&Array.isArray(o)){if(r.length!==o.length)return!1;for(var i=0;i<r.length;i++)if(r[i]!==o[i])return!1}else if(r!==o)return!1}for(var a in t)if(e[a]===void 0&&t[a]!==void 0)return!1;return!0},Wtt=["text"],Gtt=["anchor","focus"];function f2e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function rf(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?f2e(Object(n),!0).forEach(function(r){qc(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):f2e(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}var Qt={equals(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},{loose:r=!1}=n;function o(i){return nf(i,Wtt)}return d2e(r?o(e):e,r?o(t):t)},isText:e=>Fa(e)&&typeof e.text=="string",isTextList:e=>Array.isArray(e)&&e.every(t=>Qt.isText(t)),isTextProps:e=>e.text!==void 0,matches(e,t){for(var n in t)if(n!=="text"&&(!e.hasOwnProperty(n)||e[n]!==t[n]))return!1;return!0},decorations(e,t){var n=[rf({},e)];for(var r of t){var o=nf(r,Gtt),[i,a]=ct.edges(r),l=[],s=0;for(var u of n){var{length:c}=u.text,d=s;if(s+=c,i.offset<=d&&a.offset>=s)Object.assign(u,o),l.push(u);else if(i.offset!==a.offset&&(i.offset===s||a.offset===d)||i.offset>s||a.offset<d||a.offset===d&&d!==0)l.push(u);else{var f=u,p=void 0,m=void 0;if(a.offset<s){var v=a.offset-d;m=rf(rf({},f),{},{text:f.text.slice(v)}),f=rf(rf({},f),{},{text:f.text.slice(0,v)})}if(i.offset>d){var g=i.offset-d;p=rf(rf({},f),{},{text:f.text.slice(0,g)}),f=rf(rf({},f),{},{text:f.text.slice(g)})}Object.assign(f,o),p&&l.push(p),l.push(f),m&&l.push(m)}}n=l}return n}};function p2e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function C6(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?p2e(Object(n),!0).forEach(function(r){qc(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):p2e(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}var qtt={transform(e,t){e.children=Xge(e.children);var n=e.selection&&Xge(e.selection);try{n=((r,o,i)=>{switch(i.type){case"insert_node":var{path:a,node:l}=i,s=Lt.parent(r,a),u=a[a.length-1];if(u>s.children.length)throw new Error('Cannot apply an "insert_node" operation at path ['.concat(a,"] because the destination is past the end of the node."));if(s.children.splice(u,0,l),o)for(var[c,d]of ct.points(o))o[d]=nr.transform(c,i);break;case"insert_text":var{path:f,offset:p,text:m}=i;if(m.length===0)break;var v=Lt.leaf(r,f),g=v.text.slice(0,p),b=v.text.slice(p);if(v.text=g+m+b,o)for(var[y,w]of ct.points(o))o[w]=nr.transform(y,i);break;case"merge_node":var{path:x}=i,_=Lt.get(r,x),E=qe.previous(x),C=Lt.get(r,E),T=Lt.parent(r,x),k=x[x.length-1];if(Qt.isText(_)&&Qt.isText(C))C.text+=_.text;else{if(Qt.isText(_)||Qt.isText(C))throw new Error('Cannot apply a "merge_node" operation at path ['.concat(x,"] to nodes of different interfaces: ").concat(_," ").concat(C));C.children.push(..._.children)}if(T.children.splice(k,1),o)for(var[I,O]of ct.points(o))o[O]=nr.transform(I,i);break;case"move_node":var{path:F,newPath:N}=i;if(qe.isAncestor(F,N))throw new Error("Cannot move a path [".concat(F,"] to new path [").concat(N,"] because the destination is inside itself."));var B=Lt.get(r,F),P=Lt.parent(r,F),V=F[F.length-1];P.children.splice(V,1);var L=qe.transform(F,i),H=Lt.get(r,qe.parent(L)),U=L[L.length-1];if(H.children.splice(U,0,B),o)for(var[G,z]of ct.points(o))o[z]=nr.transform(G,i);break;case"remove_node":var{path:$}=i,W=$[$.length-1];if(Lt.parent(r,$).children.splice(W,1),o)for(var[K,X]of ct.points(o)){var te=nr.transform(K,i);if(o!=null&&te!=null)o[X]=te;else{var ne=void 0,se=void 0;for(var[le,J]of Lt.texts(r)){if(qe.compare(J,$)!==-1){se=[le,J];break}ne=[le,J]}var Z=!1;ne&&se&&(Z=qe.equals(se[1],$)?!qe.hasPrevious(se[1]):qe.common(ne[1],$).length<qe.common(se[1],$).length),ne&&!Z?(K.path=ne[1],K.offset=ne[0].text.length):se?(K.path=se[1],K.offset=0):o=null}}break;case"remove_text":var{path:ye,offset:be,text:ve}=i;if(ve.length===0)break;var Ae=Lt.leaf(r,ye),Ce=Ae.text.slice(0,be),_e=Ae.text.slice(be+ve.length);if(Ae.text=Ce+_e,o)for(var[ke,Be]of ct.points(o))o[Be]=nr.transform(ke,i);break;case"set_node":var{path:$e,properties:rt,newProperties:ge}=i;if($e.length===0)throw new Error("Cannot set properties on the root node!");var We=Lt.get(r,$e);for(var st in ge){if(st==="children"||st==="text")throw new Error('Cannot set the "'.concat(st,'" property of nodes!'));var At=ge[st];At==null?delete We[st]:We[st]=At}for(var Ve in rt)ge.hasOwnProperty(Ve)||delete We[Ve];break;case"set_selection":var{newProperties:it}=i;if(it==null)o=it;else{if(o==null){if(!ct.isRange(it))throw new Error('Cannot apply an incomplete "set_selection" operation properties '.concat(JSON.stringify(it)," when there is no current selection."));o=C6({},it)}for(var dt in it){var ot=it[dt];if(ot==null){if(dt==="anchor"||dt==="focus")throw new Error('Cannot remove the "'.concat(dt,'" selection property'));delete o[dt]}else o[dt]=ot}}break;case"split_node":var{path:je,position:we,properties:ze}=i;if(je.length===0)throw new Error('Cannot apply a "split_node" operation at path ['.concat(je,"] because the root node cannot be split."));var me,Me=Lt.get(r,je),Ie=Lt.parent(r,je),ht=je[je.length-1];if(Qt.isText(Me)){var gt=Me.text.slice(0,we),vt=Me.text.slice(we);Me.text=gt,me=C6(C6({},ze),{},{text:vt})}else{var qt=Me.children.slice(0,we),mn=Me.children.slice(we);Me.children=qt,me=C6(C6({},ze),{},{children:mn})}if(Ie.children.splice(ht+1,0,me),o)for(var[Zt,rn]of ct.points(o))o[rn]=nr.transform(Zt,i)}return o})(e,n,t)}finally{e.children=Qge(e.children),e.selection=n?H1(n)?Qge(n):n:null}}},Ktt=["text"],Ytt=["children"];function h2e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function v2e(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?h2e(Object(n),!0).forEach(function(r){qc(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):h2e(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}var Xtt={insertNodes(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};ue.withoutNormalizing(e,()=>{var{hanging:r=!1,voids:o=!1,mode:i="lowest"}=n,{at:a,match:l,select:s}=n;if(Lt.isNode(t)&&(t=[t]),t.length!==0){var[u]=t;if(a||(a=e.selection?e.selection:e.children.length>0?ue.end(e,[]):[0],s=!0),s==null&&(s=!1),ct.isRange(a))if(r||(a=ue.unhangRange(e,a)),ct.isCollapsed(a))a=a.anchor;else{var[,c]=ct.edges(a),d=ue.pointRef(e,c);et.delete(e,{at:a}),a=d.unref()}if(nr.isPoint(a)){l==null&&(l=Qt.isText(u)?E=>Qt.isText(E):e.isInline(u)?E=>Qt.isText(E)||ue.isInline(e,E):E=>ue.isBlock(e,E));var[f]=ue.nodes(e,{at:a.path,match:l,mode:i,voids:o});if(!f)return;var[,p]=f,m=ue.pathRef(e,p),v=ue.isEnd(e,a,p);et.splitNodes(e,{at:a,match:l,mode:i,voids:o});var g=m.unref();a=v?qe.next(g):g}var b=qe.parent(a),y=a[a.length-1];if(o||!ue.void(e,{at:b})){for(var w of t){var x=b.concat(y);y++,e.apply({type:"insert_node",path:x,node:w}),a=qe.next(a)}if(a=qe.previous(a),s){var _=ue.end(e,a);_&&et.select(e,_)}}}})},liftNodes(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};ue.withoutNormalizing(e,()=>{var{at:n=e.selection,mode:r="lowest",voids:o=!1}=t,{match:i}=t;if(i==null&&(i=qe.isPath(n)?v2(e,n):w=>ue.isBlock(e,w)),n){var a=ue.nodes(e,{at:n,match:i,mode:r,voids:o}),l=Array.from(a,w=>{var[,x]=w;return ue.pathRef(e,x)});for(var s of l){var u=s.unref();if(u.length<2)throw new Error("Cannot lift node at a path [".concat(u,"] because it has a depth of less than `2`."));var c=ue.node(e,qe.parent(u)),[d,f]=c,p=u[u.length-1],{length:m}=d.children;if(m===1){var v=qe.next(f);et.moveNodes(e,{at:u,to:v,voids:o}),et.removeNodes(e,{at:f,voids:o})}else if(p===0)et.moveNodes(e,{at:u,to:f,voids:o});else if(p===m-1){var g=qe.next(f);et.moveNodes(e,{at:u,to:g,voids:o})}else{var b=qe.next(u),y=qe.next(f);et.splitNodes(e,{at:b,voids:o}),et.moveNodes(e,{at:u,to:y,voids:o})}}}})},mergeNodes(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};ue.withoutNormalizing(e,()=>{var{match:n,at:r=e.selection}=t,{hanging:o=!1,voids:i=!1,mode:a="lowest"}=t;if(r){if(n==null)if(qe.isPath(r)){var[l]=ue.parent(e,r);n=k=>l.children.includes(k)}else n=k=>ue.isBlock(e,k);if(!o&&ct.isRange(r)&&(r=ue.unhangRange(e,r)),ct.isRange(r))if(ct.isCollapsed(r))r=r.anchor;else{var[,s]=ct.edges(r),u=ue.pointRef(e,s);et.delete(e,{at:r}),r=u.unref(),t.at==null&&et.select(e,r)}var[c]=ue.nodes(e,{at:r,match:n,voids:i,mode:a}),d=ue.previous(e,{at:r,match:n,voids:i,mode:a});if(c&&d){var[f,p]=c,[m,v]=d;if(p.length!==0&&v.length!==0){var g,b,y=qe.next(v),w=qe.common(p,v),x=qe.isSibling(p,v),_=Array.from(ue.levels(e,{at:p}),k=>{var[I]=k;return I}).slice(w.length).slice(0,-1),E=ue.above(e,{at:p,mode:"highest",match:k=>_.includes(k)&&m2e(e,k)}),C=E&&ue.pathRef(e,E[1]);if(Qt.isText(f)&&Qt.isText(m)){var T=nf(f,Ktt);b=m.text.length,g=T}else{if(!sn.isElement(f)||!sn.isElement(m))throw new Error("Cannot merge the node at path [".concat(p,"] with the previous sibling because it is not the same kind: ").concat(JSON.stringify(f)," ").concat(JSON.stringify(m)));T=nf(f,Ytt),b=m.children.length,g=T}x||et.moveNodes(e,{at:p,to:y,voids:i}),C&&et.removeNodes(e,{at:C.current,voids:i}),sn.isElement(m)&&ue.isEmpty(e,m)||Qt.isText(m)&&m.text===""&&v[v.length-1]!==0?et.removeNodes(e,{at:v,voids:i}):e.apply({type:"merge_node",path:y,position:b,properties:g}),C&&C.unref()}}}})},moveNodes(e,t){ue.withoutNormalizing(e,()=>{var{to:n,at:r=e.selection,mode:o="lowest",voids:i=!1}=t,{match:a}=t;if(r){a==null&&(a=qe.isPath(r)?v2(e,r):p=>ue.isBlock(e,p));var l=ue.pathRef(e,n),s=ue.nodes(e,{at:r,match:a,mode:o,voids:i}),u=Array.from(s,p=>{var[,m]=p;return ue.pathRef(e,m)});for(var c of u){var d=c.unref(),f=l.current;d.length!==0&&e.apply({type:"move_node",path:d,newPath:f}),l.current&&qe.isSibling(f,d)&&qe.isAfter(f,d)&&(l.current=qe.next(l.current))}l.unref()}})},removeNodes(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};ue.withoutNormalizing(e,()=>{var{hanging:n=!1,voids:r=!1,mode:o="lowest"}=t,{at:i=e.selection,match:a}=t;if(i){a==null&&(a=qe.isPath(i)?v2(e,i):f=>ue.isBlock(e,f)),!n&&ct.isRange(i)&&(i=ue.unhangRange(e,i));var l=ue.nodes(e,{at:i,match:a,mode:o,voids:r}),s=Array.from(l,f=>{var[,p]=f;return ue.pathRef(e,p)});for(var u of s){var c=u.unref();if(c){var[d]=ue.node(e,c);e.apply({type:"remove_node",path:c,node:d})}}}})},setNodes(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};ue.withoutNormalizing(e,()=>{var{match:r,at:o=e.selection}=n,{hanging:i=!1,mode:a="lowest",split:l=!1,voids:s=!1}=n;if(o){if(r==null&&(r=qe.isPath(o)?v2(e,o):_=>ue.isBlock(e,_)),!i&&ct.isRange(o)&&(o=ue.unhangRange(e,o)),l&&ct.isRange(o)){if(ct.isCollapsed(o)&&ue.leaf(e,o.anchor)[0].text.length>0)return;var u=ue.rangeRef(e,o,{affinity:"inward"}),[c,d]=ct.edges(o),f=a==="lowest"?"lowest":"highest",p=ue.isEnd(e,d,d.path);et.splitNodes(e,{at:d,match:r,mode:f,voids:s,always:!p});var m=ue.isStart(e,c,c.path);et.splitNodes(e,{at:c,match:r,mode:f,voids:s,always:!m}),o=u.unref(),n.at==null&&et.select(e,o)}for(var[v,g]of ue.nodes(e,{at:o,match:r,mode:a,voids:s})){var b={},y={};if(g.length!==0){var w=!1;for(var x in t)x!=="children"&&x!=="text"&&t[x]!==v[x]&&(w=!0,v.hasOwnProperty(x)&&(b[x]=v[x]),t[x]!=null&&(y[x]=t[x]));w&&e.apply({type:"set_node",path:g,properties:b,newProperties:y})}}}})},splitNodes(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};ue.withoutNormalizing(e,()=>{var{mode:n="lowest",voids:r=!1}=t,{match:o,at:i=e.selection,height:a=0,always:l=!1}=t;if(o==null&&(o=B=>ue.isBlock(e,B)),ct.isRange(i)&&(i=Qtt(e,i)),qe.isPath(i)){var s=i,u=ue.point(e,s),[c]=ue.parent(e,s);o=B=>B===c,a=u.path.length-s.length+1,i=u,l=!0}if(i){var d=ue.pointRef(e,i,{affinity:"backward"}),[f]=ue.nodes(e,{at:i,match:o,mode:n,voids:r});if(f){var p=ue.void(e,{at:i,mode:"highest"});if(!r&&p){var[m,v]=p;if(sn.isElement(m)&&e.isInline(m)){var g=ue.after(e,v);if(!g){var b=qe.next(v);et.insertNodes(e,{text:""},{at:b,voids:r}),g=ue.point(e,b)}i=g,l=!0}a=i.path.length-v.length+1,l=!0}var y=ue.pointRef(e,i),w=i.path.length-a,[,x]=f,_=i.path.slice(0,w),E=a===0?i.offset:i.path[w]+0;for(var[C,T]of ue.levels(e,{at:_,reverse:!0,voids:r})){var k=!1;if(T.length<x.length||T.length===0||!r&&ue.isVoid(e,C))break;var I=d.current,O=ue.isEnd(e,I,T);if(l||!d||!ue.isEdge(e,I,T)){k=!0;var F=Lt.extractProps(C);e.apply({type:"split_node",path:T,position:E,properties:F})}E=T[T.length-1]+(k||O?1:0)}if(t.at==null){var N=y.current||ue.end(e,[]);et.select(e,N)}d.unref(),y.unref()}}})},unsetNodes(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Array.isArray(t)||(t=[t]);var r={};for(var o of t)r[o]=null;et.setNodes(e,r,n)},unwrapNodes(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};ue.withoutNormalizing(e,()=>{var{mode:n="lowest",split:r=!1,voids:o=!1}=t,{at:i=e.selection,match:a}=t;if(i){a==null&&(a=qe.isPath(i)?v2(e,i):f=>ue.isBlock(e,f)),qe.isPath(i)&&(i=ue.range(e,i));var l=ct.isRange(i)?ue.rangeRef(e,i):null,s=ue.nodes(e,{at:i,match:a,mode:n,voids:o}),u=Array.from(s,f=>{var[,p]=f;return ue.pathRef(e,p)}).reverse(),c=function(f){var p=f.unref(),[m]=ue.node(e,p),v=ue.range(e,p);r&&l&&(v=ct.intersection(l.current,v)),et.liftNodes(e,{at:v,match:g=>sn.isAncestor(m)&&m.children.includes(g),voids:o})};for(var d of u)c(d);l&&l.unref()}})},wrapNodes(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};ue.withoutNormalizing(e,()=>{var{mode:r="lowest",split:o=!1,voids:i=!1}=n,{match:a,at:l=e.selection}=n;if(l){if(a==null&&(a=qe.isPath(l)?v2(e,l):e.isInline(t)?g=>ue.isInline(e,g)||Qt.isText(g):g=>ue.isBlock(e,g)),o&&ct.isRange(l)){var[s,u]=ct.edges(l),c=ue.rangeRef(e,l,{affinity:"inward"});et.splitNodes(e,{at:u,match:a,voids:i}),et.splitNodes(e,{at:s,match:a,voids:i}),l=c.unref(),n.at==null&&et.select(e,l)}var d=Array.from(ue.nodes(e,{at:l,match:e.isInline(t)?g=>ue.isBlock(e,g):g=>ue.isEditor(g),mode:"lowest",voids:i}));for(var[,f]of d){var p=ct.isRange(l)?ct.intersection(l,ue.range(e,f)):l;if(p){var m=Array.from(ue.nodes(e,{at:p,match:a,mode:r,voids:i}));if(m.length>0){var v=function(){var[g]=m,b=m[m.length-1],[,y]=g,[,w]=b;if(y.length===0&&w.length===0)return"continue";var x=qe.equals(y,w)?qe.parent(y):qe.common(y,w),_=ue.range(e,y,w),E=ue.node(e,x),[C]=E,T=x.length+1,k=qe.next(w.slice(0,T)),I=v2e(v2e({},t),{},{children:[]});et.insertNodes(e,I,{at:k,voids:i}),et.moveNodes(e,{at:_,match:O=>sn.isAncestor(C)&&C.children.includes(O),to:k.concat(0),voids:i})}();if(v==="continue")continue}}}}})}},m2e=(e,t)=>{if(sn.isElement(t)){var n=t;return!!ue.isVoid(e,t)||n.children.length===1&&m2e(e,n.children[0])}return!ue.isEditor(t)},Qtt=(e,t)=>{if(ct.isCollapsed(t))return t.anchor;var[,n]=ct.edges(t),r=ue.pointRef(e,n);return et.delete(e,{at:t}),r.unref()},v2=(e,t)=>{var[n]=ue.node(e,t);return r=>r===n};function g2e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function y2e(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?g2e(Object(n),!0).forEach(function(r){qc(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):g2e(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}var Jtt={collapse(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{edge:n="anchor"}=t,{selection:r}=e;if(r){if(n==="anchor")et.select(e,r.anchor);else if(n==="focus")et.select(e,r.focus);else if(n==="start"){var[o]=ct.edges(r);et.select(e,o)}else if(n==="end"){var[,i]=ct.edges(r);et.select(e,i)}}},deselect(e){var{selection:t}=e;t&&e.apply({type:"set_selection",properties:t,newProperties:null})},move(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{selection:n}=e,{distance:r=1,unit:o="character",reverse:i=!1}=t,{edge:a=null}=t;if(n){a==="start"&&(a=ct.isBackward(n)?"focus":"anchor"),a==="end"&&(a=ct.isBackward(n)?"anchor":"focus");var{anchor:l,focus:s}=n,u={distance:r,unit:o},c={};if(a==null||a==="anchor"){var d=i?ue.before(e,l,u):ue.after(e,l,u);d&&(c.anchor=d)}if(a==null||a==="focus"){var f=i?ue.before(e,s,u):ue.after(e,s,u);f&&(c.focus=f)}et.setSelection(e,c)}},select(e,t){var{selection:n}=e;if(t=ue.range(e,t),n)et.setSelection(e,t);else{if(!ct.isRange(t))throw new Error("When setting the selection and the current selection is `null` you must provide at least an `anchor` and `focus`, but you passed: ".concat(JSON.stringify(t)));e.apply({type:"set_selection",properties:n,newProperties:t})}},setPoint(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},{selection:r}=e,{edge:o="both"}=n;if(r){o==="start"&&(o=ct.isBackward(r)?"focus":"anchor"),o==="end"&&(o=ct.isBackward(r)?"anchor":"focus");var{anchor:i,focus:a}=r,l=o==="anchor"?i:a;et.setSelection(e,{[o==="anchor"?"anchor":"focus"]:y2e(y2e({},l),t)})}},setSelection(e,t){var{selection:n}=e,r={},o={};if(n){for(var i in t)(i==="anchor"&&t.anchor!=null&&!nr.equals(t.anchor,n.anchor)||i==="focus"&&t.focus!=null&&!nr.equals(t.focus,n.focus)||i!=="anchor"&&i!=="focus"&&t[i]!==n[i])&&(r[i]=n[i],o[i]=t[i]);Object.keys(r).length>0&&e.apply({type:"set_selection",properties:r,newProperties:o})}}},Ztt={delete(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};ue.withoutNormalizing(e,()=>{var{reverse:n=!1,unit:r="character",distance:o=1,voids:i=!1}=t,{at:a=e.selection,hanging:l=!1}=t;if(a){if(ct.isRange(a)&&ct.isCollapsed(a)&&(a=a.anchor),nr.isPoint(a)){var s=ue.void(e,{at:a,mode:"highest"});if(!i&&s){var[,u]=s;a=u}else{var c={unit:r,distance:o};a={anchor:a,focus:n?ue.before(e,a,c)||ue.start(e,[]):ue.after(e,a,c)||ue.end(e,[])},l=!0}}if(qe.isPath(a))et.removeNodes(e,{at:a,voids:i});else if(!ct.isCollapsed(a)){if(!l){var[,d]=ct.edges(a),f=ue.end(e,[]);nr.equals(d,f)||(a=ue.unhangRange(e,a,{voids:i}))}var[p,m]=ct.edges(a),v=ue.above(e,{match:se=>ue.isBlock(e,se),at:p,voids:i}),g=ue.above(e,{match:se=>ue.isBlock(e,se),at:m,voids:i}),b=v&&g&&!qe.equals(v[1],g[1]),y=qe.equals(p.path,m.path),w=i?null:ue.void(e,{at:p,mode:"highest"}),x=i?null:ue.void(e,{at:m,mode:"highest"});if(w){var _=ue.before(e,p);_&&v&&qe.isAncestor(v[1],_.path)&&(p=_)}if(x){var E=ue.after(e,m);E&&g&&qe.isAncestor(g[1],E.path)&&(m=E)}var C,T=[];for(var k of ue.nodes(e,{at:a,voids:i})){var[I,O]=k;C&&qe.compare(O,C)===0||(!i&&ue.isVoid(e,I)||!qe.isCommon(O,p.path)&&!qe.isCommon(O,m.path))&&(T.push(k),C=O)}var F=Array.from(T,se=>{var[,le]=se;return ue.pathRef(e,le)}),N=ue.pointRef(e,p),B=ue.pointRef(e,m);if(!y&&!w){var P=N.current,[V]=ue.leaf(e,P),{path:L}=P,{offset:H}=p,U=V.text.slice(H);U.length>0&&e.apply({type:"remove_text",path:L,offset:H,text:U})}for(var G of F){var z=G.unref();et.removeNodes(e,{at:z,voids:i})}if(!x){var $=B.current,[W]=ue.leaf(e,$),{path:K}=$,X=y?p.offset:0,te=W.text.slice(X,m.offset);te.length>0&&e.apply({type:"remove_text",path:K,offset:X,text:te})}!y&&b&&B.current&&N.current&&et.mergeNodes(e,{at:B.current,hanging:!0,voids:i});var ne=n?N.unref()||B.unref():B.unref()||N.unref();t.at==null&&ne&&et.select(e,ne)}}})},insertFragment(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};ue.withoutNormalizing(e,()=>{var{hanging:r=!1,voids:o=!1}=n,{at:i=e.selection}=n;if(t.length&&i){if(ct.isRange(i))if(r||(i=ue.unhangRange(e,i)),ct.isCollapsed(i))i=i.anchor;else{var[,a]=ct.edges(i);if(!o&&ue.void(e,{at:a}))return;var l=ue.pointRef(e,a);et.delete(e,{at:i}),i=l.unref()}else qe.isPath(i)&&(i=ue.start(e,i));if(o||!ue.void(e,{at:i})){var s=ue.above(e,{at:i,match:$=>ue.isInline(e,$),mode:"highest",voids:o});if(s){var[,u]=s;ue.isEnd(e,i,u)?i=ue.after(e,u):ue.isStart(e,i,u)&&(i=ue.before(e,u))}var c=ue.above(e,{match:$=>ue.isBlock(e,$),at:i,voids:o}),[,d]=c,f=ue.isStart(e,i,d),p=ue.isEnd(e,i,d),m=f&&p,v=!f||f&&p,g=!p,[,b]=Lt.first({children:t},[]),[,y]=Lt.last({children:t},[]),w=[],x=$=>{var[W,K]=$;return!(K.length===0||!m&&(v&&qe.isAncestor(K,b)&&sn.isElement(W)&&!e.isVoid(W)&&!e.isInline(W)||g&&qe.isAncestor(K,y)&&sn.isElement(W)&&!e.isVoid(W)&&!e.isInline(W)))};for(var _ of Lt.nodes({children:t},{pass:x}))x(_)&&w.push(_);var E=[],C=[],T=[],k=!0,I=!1;for(var[O]of w)sn.isElement(O)&&!e.isInline(O)?(k=!1,I=!0,C.push(O)):k?E.push(O):T.push(O);var[F]=ue.nodes(e,{at:i,match:$=>Qt.isText($)||ue.isInline(e,$),mode:"highest",voids:o}),[,N]=F,B=ue.isStart(e,i,N),P=ue.isEnd(e,i,N),V=ue.pathRef(e,p?qe.next(d):d),L=ue.pathRef(e,P?qe.next(N):N),H=ue.pathRef(e,d);et.splitNodes(e,{at:i,match:$=>I?ue.isBlock(e,$):Qt.isText($)||ue.isInline(e,$),mode:I?"lowest":"highest",voids:o});var U=ue.pathRef(e,!B||B&&P?qe.next(N):N);if(et.insertNodes(e,E,{at:U.current,match:$=>Qt.isText($)||ue.isInline(e,$),mode:"highest",voids:o}),m&&C.length&&et.delete(e,{at:H.unref(),voids:o}),et.insertNodes(e,C,{at:V.current,match:$=>ue.isBlock(e,$),mode:"lowest",voids:o}),et.insertNodes(e,T,{at:L.current,match:$=>Qt.isText($)||ue.isInline(e,$),mode:"highest",voids:o}),!n.at){var G;G=T.length>0?qe.previous(L.current):C.length>0?qe.previous(V.current):qe.previous(U.current);var z=ue.end(e,G);et.select(e,z)}U.unref(),V.unref(),L.unref()}}})},insertText(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};ue.withoutNormalizing(e,()=>{var{voids:r=!1}=n,{at:o=e.selection}=n;if(o){if(qe.isPath(o)&&(o=ue.range(e,o)),ct.isRange(o))if(ct.isCollapsed(o))o=o.anchor;else{var i=ct.end(o);if(!r&&ue.void(e,{at:i}))return;var a=ue.pointRef(e,i);et.delete(e,{at:o,voids:r}),o=a.unref(),et.setSelection(e,{anchor:o,focus:o})}if(r||!ue.void(e,{at:o})){var{path:l,offset:s}=o;t.length>0&&e.apply({type:"insert_text",path:l,offset:s,text:t})}}})}};function b2e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function DE(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?b2e(Object(n),!0).forEach(function(r){qc(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):b2e(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}var et=DE(DE(DE(DE({},qtt),Xtt),Jtt),Ztt),Ej="[object Map]",Cj="[object Set]",ent=/^\[object .+?Constructor\]$/,tnt=/^(?:0|[1-9]\d*)$/,Sj="[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]",kj="\uD83C[\uDFFB-\uDFFF]",A2e="[^\uD800-\uDFFF]",w2e="(?:\uD83C[\uDDE6-\uDDFF]){2}",x2e="[\uD800-\uDBFF][\uDC00-\uDFFF]",_2e="(?:"+Sj+"|"+kj+")?",nnt="[\\ufe0e\\ufe0f]?"+_2e+"(?:\\u200d(?:"+[A2e,w2e,x2e].join("|")+")[\\ufe0e\\ufe0f]?"+_2e+")*",rnt="(?:"+[A2e+Sj+"?",Sj,w2e,x2e,"[\uD800-\uDFFF]"].join("|")+")",ont=RegExp(kj+"(?="+kj+")|"+rnt+nnt,"g"),int=RegExp("[\\u200d\uD800-\uDFFF\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0\\ufe0e\\ufe0f]"),ant=typeof eo=="object"&&eo&&eo.Object===Object&&eo,lnt=typeof self=="object"&&self&&self.Object===Object&&self,W1=ant||lnt||Function("return this")();function snt(e){var t=-1,n=Array(e.size);return e.forEach(function(r,o){n[++t]=[o,r]}),n}function unt(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}var E2e,C2e,cnt=Function.prototype,OE=Object.prototype,Dj=W1["__core-js_shared__"],S2e=function(){var e=/[^.]+$/.exec(Dj&&Dj.keys&&Dj.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),k2e=cnt.toString,TE=OE.hasOwnProperty,S6=OE.toString,dnt=RegExp("^"+k2e.call(TE).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),D2e=W1.Symbol,Oj=D2e?D2e.iterator:void 0,fnt=OE.propertyIsEnumerable,pnt=(E2e=Object.keys,C2e=Object,function(e){return E2e(C2e(e))}),Tj=k6(W1,"DataView"),Mj=k6(W1,"Map"),Nj=k6(W1,"Promise"),Fj=k6(W1,"Set"),Rj=k6(W1,"WeakMap"),hnt=q1(Tj),vnt=q1(Mj),mnt=q1(Nj),gnt=q1(Fj),ynt=q1(Rj);function k6(e,t){var n=function(r,o){return r==null?void 0:r[o]}(e,t);return function(r){if(!M2e(r)||function(i){return!!S2e&&S2e in i}(r))return!1;var o=T2e(r)||function(i){var a=!1;if(i!=null&&typeof i.toString!="function")try{a=!!(i+"")}catch{}return a}(r)?dnt:ent;return o.test(q1(r))}(n)?n:void 0}var G1=function(e){return S6.call(e)};function bnt(e,t){return!!(t=t??9007199254740991)&&(typeof e=="number"||tnt.test(e))&&e>-1&&e%1==0&&e<t}function q1(e){if(e!=null){try{return k2e.call(e)}catch{}try{return e+""}catch{}}return""}(Tj&&G1(new Tj(new ArrayBuffer(1)))!="[object DataView]"||Mj&&G1(new Mj)!=Ej||Nj&&G1(Nj.resolve())!="[object Promise]"||Fj&&G1(new Fj)!=Cj||Rj&&G1(new Rj)!="[object WeakMap]")&&(G1=function(e){var t=S6.call(e),n=t=="[object Object]"?e.constructor:void 0,r=n?q1(n):void 0;if(r)switch(r){case hnt:return"[object DataView]";case vnt:return Ej;case mnt:return"[object Promise]";case gnt:return Cj;case ynt:return"[object WeakMap]"}return t});var O2e=Array.isArray;function Ij(e){return e!=null&&function(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=9007199254740991}(e.length)&&!T2e(e)}function T2e(e){var t=M2e(e)?S6.call(e):"";return t=="[object Function]"||t=="[object GeneratorFunction]"}function M2e(e){var t=typeof e;return!!e&&(t=="object"||t=="function")}function N2e(e){return!!e&&typeof e=="object"}function Ant(e){return e?function(t,n){return function(r,o){for(var i=-1,a=r?r.length:0,l=Array(a);++i<a;)l[i]=o(r[i]);return l}(n,function(r){return t[r]})}(e,function(t){return Ij(t)?function(n){var r=O2e(n)||function(l){return function(s){return N2e(s)&&Ij(s)}(l)&&TE.call(l,"callee")&&(!fnt.call(l,"callee")||S6.call(l)=="[object Arguments]")}(n)?function(l,s){for(var u=-1,c=Array(l);++u<l;)c[u]=s(u);return c}(n.length,String):[],o=r.length,i=!!o;for(var a in n)!TE.call(n,a)||i&&(a=="length"||bnt(a,o))||r.push(a);return r}(t):function(n){if(o=(r=n)&&r.constructor,r!==(typeof o=="function"&&o.prototype||OE))return pnt(n);var r,o,i=[];for(var a in Object(n))TE.call(n,a)&&a!="constructor"&&i.push(a);return i}(t)}(e)):[]}var F2e=function(e){if(!e)return[];if(Ij(e))return function(n){return typeof n=="string"||!O2e(n)&&N2e(n)&&S6.call(n)=="[object String]"}(e)?function(n){return function(r){return int.test(r)}(n)?function(r){return r.match(ont)||[]}(n):function(r){return r.split("")}(n)}(e):function(n,r){var o=-1,i=n.length;for(r||(r=Array(i));++o<i;)r[o]=n[o];return r}(e);if(Oj&&e[Oj])return function(n){for(var r,o=[];!(r=n.next()).done;)o.push(r.value);return o}(e[Oj]());var t=G1(e);return(t==Ej?snt:t==Cj?unt:Ant)(e)};function R2e(e){return e!==null&&typeof e=="object"&&"constructor"in e&&e.constructor===Object}function Bj(e,t){e===void 0&&(e={}),t===void 0&&(t={}),Object.keys(t).forEach(function(n){e[n]===void 0?e[n]=t[n]:R2e(t[n])&&R2e(e[n])&&Object.keys(t[n]).length>0&&Bj(e[n],t[n])})}var I2e={body:{},addEventListener:function(){},removeEventListener:function(){},activeElement:{blur:function(){},nodeName:""},querySelector:function(){return null},querySelectorAll:function(){return[]},getElementById:function(){return null},createEvent:function(){return{initEvent:function(){}}},createElement:function(){return{children:[],childNodes:[],style:{},setAttribute:function(){},getElementsByTagName:function(){return[]}}},createElementNS:function(){return{}},importNode:function(){return null},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function D6(){var e=typeof document<"u"?document:{};return Bj(e,I2e),e}var wnt={document:I2e,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState:function(){},pushState:function(){},go:function(){},back:function(){}},CustomEvent:function(){return this},addEventListener:function(){},removeEventListener:function(){},getComputedStyle:function(){return{getPropertyValue:function(){return""}}},Image:function(){},Date:function(){},screen:{},setTimeout:function(){},clearTimeout:function(){},matchMedia:function(){return{}},requestAnimationFrame:function(e){return typeof setTimeout>"u"?(e(),null):setTimeout(e,0)},cancelAnimationFrame:function(e){typeof setTimeout<"u"&&clearTimeout(e)}};function K1(){var e=typeof window<"u"?window:{};return Bj(e,wnt),e}function Pj(e){return Pj=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},Pj(e)}function ME(e,t){return ME=Object.setPrototypeOf||function(n,r){return n.__proto__=r,n},ME(e,t)}function Lj(e,t,n){return Lj=function(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch{return!1}}()?Reflect.construct:function(r,o,i){var a=[null];a.push.apply(a,o);var l=new(Function.bind.apply(r,a));return i&&ME(l,i.prototype),l},Lj.apply(null,arguments)}function jj(e){var t=typeof Map=="function"?new Map:void 0;return jj=function(n){if(n===null||!function(o){return Function.toString.call(o).indexOf("[native code]")!==-1}(n))return n;if(typeof n!="function")throw new TypeError("Super expression must either be null or a function");if(t!==void 0){if(t.has(n))return t.get(n);t.set(n,r)}function r(){return Lj(n,arguments,Pj(this).constructor)}return r.prototype=Object.create(n.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),ME(r,n)},jj(e)}var zp=function(e){var t,n;function r(o){var i,a,l;return a=function(s){if(s===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return s}(i=e.call.apply(e,[this].concat(o))||this),l=a.__proto__,Object.defineProperty(a,"__proto__",{get:function(){return l},set:function(s){l.__proto__=s}}),i}return n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,r}(jj(Array));function NE(e){e===void 0&&(e=[]);var t=[];return e.forEach(function(n){Array.isArray(n)?t.push.apply(t,NE(n)):t.push(n)}),t}function B2e(e,t){return Array.prototype.filter.call(e,t)}function Pe(e,t){var n=K1(),r=D6(),o=[];if(!t&&e instanceof zp)return e;if(!e)return new zp(o);if(typeof e=="string"){var i=e.trim();if(i.indexOf("<")>=0&&i.indexOf(">")>=0){var a="div";i.indexOf("<li")===0&&(a="ul"),i.indexOf("<tr")===0&&(a="tbody"),i.indexOf("<td")!==0&&i.indexOf("<th")!==0||(a="tr"),i.indexOf("<tbody")===0&&(a="table"),i.indexOf("<option")===0&&(a="select");var l=r.createElement(a);l.innerHTML=i;for(var s=0;s<l.childNodes.length;s+=1)o.push(l.childNodes[s])}else o=function(u,c){if(typeof u!="string")return[u];for(var d=[],f=c.querySelectorAll(u),p=0;p<f.length;p+=1)d.push(f[p]);return d}(e.trim(),t||r)}else if(e.nodeType||e===n||e===r)o.push(e);else if(Array.isArray(e)){if(e instanceof zp)return e;o=e}return new zp(function(u){for(var c=[],d=0;d<u.length;d+=1)c.indexOf(u[d])===-1&&c.push(u[d]);return c}(o))}function m2(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=NE(t.map(function(o){return o.split(" ")}));return this.forEach(function(o){var i;(i=o.classList).add.apply(i,r)}),this}function g2(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=NE(t.map(function(o){return o.split(" ")}));return this.forEach(function(o){var i;(i=o.classList).remove.apply(i,r)}),this}function y2(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=NE(t.map(function(o){return o.split(" ")}));return B2e(this,function(o){return r.filter(function(i){return o.classList.contains(i)}).length>0}).length>0}function iu(e,t){if(arguments.length===1&&typeof e=="string")return this[0]?this[0].getAttribute(e):void 0;for(var n=0;n<this.length;n+=1)if(arguments.length===2)this[n].setAttribute(e,t);else for(var r in e)this[n][r]=e[r],this[n].setAttribute(r,e[r]);return this}function FE(e){for(var t=0;t<this.length;t+=1)this[t].removeAttribute(e);return this}function b2(){var e=this[0];if(e){var t,n={};if(e.dataset)for(var r in e.dataset)n[r]=e.dataset[r];else for(var o=0;o<e.attributes.length;o+=1){var i=e.attributes[o];i.name.indexOf("data-")>=0&&(n[t=i.name.split("data-")[1],t.toLowerCase().replace(/-(.)/g,function(l,s){return s.toUpperCase()})]=i.value)}for(var a in n)n[a]==="false"?n[a]=!1:n[a]==="true"?n[a]=!0:parseFloat(n[a])===1*n[a]&&(n[a]*=1);return n}}function Kc(e){if(e===void 0){var t=this[0];if(!t)return;if(t.multiple&&t.nodeName.toLowerCase()==="select"){for(var n=[],r=0;r<t.selectedOptions.length;r+=1)n.push(t.selectedOptions[r].value);return n}return t.value}for(var o=0;o<this.length;o+=1){var i=this[o];if(Array.isArray(e)&&i.multiple&&i.nodeName.toLowerCase()==="select")for(var a=0;a<i.options.length;a+=1)i.options[a].selected=e.indexOf(i.options[a].value)>=0;else i.value=e}return this}function Yc(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t[0],o=t[1],i=t[2],a=t[3];function l(v){var g=v.target;if(g){var b=v.target.dom7EventData||[];if(b.indexOf(v)<0&&b.unshift(v),Pe(g).is(o))i.apply(g,b);else for(var y=Pe(g).parents(),w=0;w<y.length;w+=1)Pe(y[w]).is(o)&&i.apply(y[w],b)}}function s(v){var g=v&&v.target&&v.target.dom7EventData||[];g.indexOf(v)<0&&g.unshift(v),i.apply(this,g)}typeof t[1]=="function"&&(r=t[0],i=t[1],a=t[2],o=void 0),a||(a=!1);for(var u,c=r.split(" "),d=0;d<this.length;d+=1){var f=this[d];if(o)for(u=0;u<c.length;u+=1){var p=c[u];f.dom7LiveListeners||(f.dom7LiveListeners={}),f.dom7LiveListeners[p]||(f.dom7LiveListeners[p]=[]),f.dom7LiveListeners[p].push({listener:i,proxyListener:l}),f.addEventListener(p,l,a)}else for(u=0;u<c.length;u+=1){var m=c[u];f.dom7Listeners||(f.dom7Listeners={}),f.dom7Listeners[m]||(f.dom7Listeners[m]=[]),f.dom7Listeners[m].push({listener:i,proxyListener:s}),f.addEventListener(m,s,a)}}return this}function P2e(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t[0],o=t[1],i=t[2],a=t[3];typeof t[1]=="function"&&(r=t[0],i=t[1],a=t[2],o=void 0),a||(a=!1);for(var l=r.split(" "),s=0;s<l.length;s+=1)for(var u=l[s],c=0;c<this.length;c+=1){var d=this[c],f=void 0;if(!o&&d.dom7Listeners?f=d.dom7Listeners[u]:o&&d.dom7LiveListeners&&(f=d.dom7LiveListeners[u]),f&&f.length)for(var p=f.length-1;p>=0;p-=1){var m=f[p];i&&m.listener===i||i&&m.listener&&m.listener.dom7proxy&&m.listener.dom7proxy===i?(d.removeEventListener(u,m.proxyListener,a),f.splice(p,1)):i||(d.removeEventListener(u,m.proxyListener,a),f.splice(p,1))}}return this}function RE(){var e=K1();return this[0]===e?e.innerWidth:this.length>0?parseFloat(this.css("width")):null}function IE(){var e=K1();return this[0]===e?e.innerHeight:this.length>0?parseFloat(this.css("height")):null}function L2e(){if(this.length>0){var e=K1(),t=D6(),n=this[0],r=n.getBoundingClientRect(),o=t.body,i=n.clientTop||o.clientTop||0,a=n.clientLeft||o.clientLeft||0,l=n===e?e.scrollY:n.scrollTop,s=n===e?e.scrollX:n.scrollLeft;return{top:r.top+l-i,left:r.left+s-a}}return null}function A2(){for(var e=0;e<this.length;e+=1)this[e].style.display="none";return this}function BE(){for(var e=K1(),t=0;t<this.length;t+=1){var n=this[t];n.style.display==="none"&&(n.style.display=""),e.getComputedStyle(n,null).getPropertyValue("display")==="none"&&(n.style.display="block")}return this}function PE(e,t){var n,r=K1();if(arguments.length===1){if(typeof e!="string"){for(n=0;n<this.length;n+=1)for(var o in e)this[n].style[o]=e[o];return this}if(this[0])return r.getComputedStyle(this[0],null).getPropertyValue(e)}if(arguments.length===2&&typeof e=="string"){for(n=0;n<this.length;n+=1)this[n].style[e]=t;return this}return this}function LE(e){return e?(this.forEach(function(t,n){e.apply(t,[t,n])}),this):this}function j2e(e){return Pe(B2e(this,e))}function Hp(e){if(e===void 0)return this[0]?this[0].innerHTML:null;for(var t=0;t<this.length;t+=1)this[t].innerHTML=e;return this}function jE(e){if(e===void 0)return this[0]?this[0].textContent.trim():null;for(var t=0;t<this.length;t+=1)this[t].textContent=e;return this}function V2e(e){var t,n,r=K1(),o=D6(),i=this[0];if(!i||e===void 0)return!1;if(typeof e=="string"){if(i.matches)return i.matches(e);if(i.webkitMatchesSelector)return i.webkitMatchesSelector(e);if(i.msMatchesSelector)return i.msMatchesSelector(e);for(t=Pe(e),n=0;n<t.length;n+=1)if(t[n]===i)return!0;return!1}if(e===o)return i===o;if(e===r)return i===r;if(e.nodeType||e instanceof zp){for(t=e.nodeType?[e]:e,n=0;n<t.length;n+=1)if(t[n]===i)return!0;return!1}return!1}function au(){for(var e,t=D6(),n=0;n<arguments.length;n+=1){e=n<0||arguments.length<=n?void 0:arguments[n];for(var r=0;r<this.length;r+=1)if(typeof e=="string"){var o=t.createElement("div");for(o.innerHTML=e;o.firstChild;)this[r].appendChild(o.firstChild)}else if(e instanceof zp)for(var i=0;i<e.length;i+=1)this[r].appendChild(e[i]);else this[r].appendChild(e)}return this}function z2e(e){var t,n,r=D6();for(t=0;t<this.length;t+=1)if(typeof e=="string"){var o=r.createElement("div");for(o.innerHTML=e,n=o.childNodes.length-1;n>=0;n-=1)this[t].insertBefore(o.childNodes[n],this[t].childNodes[0])}else if(e instanceof zp)for(n=0;n<e.length;n+=1)this[t].insertBefore(e[n],this[t].childNodes[0]);else this[t].insertBefore(e,this[t].childNodes[0]);return this}function w2(e){for(var t=[],n=0;n<this.length;n+=1)this[n].parentNode!==null&&(e?Pe(this[n].parentNode).is(e)&&t.push(this[n].parentNode):t.push(this[n].parentNode));return Pe(t)}function VE(e){for(var t=[],n=0;n<this.length;n+=1)for(var r=this[n].parentNode;r;)e?Pe(r).is(e)&&t.push(r):t.push(r),r=r.parentNode;return Pe(t)}function x2(e){for(var t=[],n=0;n<this.length;n+=1)for(var r=this[n].querySelectorAll(e),o=0;o<r.length;o+=1)t.push(r[o]);return Pe(t)}function _2(e){for(var t=[],n=0;n<this.length;n+=1)for(var r=this[n].children,o=0;o<r.length;o+=1)e&&!Pe(r[o]).is(e)||t.push(r[o]);return Pe(t)}function E2(){for(var e=0;e<this.length;e+=1)this[e].parentNode&&this[e].parentNode.removeChild(this[e]);return this}function C2(){for(var e=0;e<this.length;e+=1){var t=this[e];if(t.nodeType===1){for(var n=0;n<t.childNodes.length;n+=1)t.childNodes[n].parentNode&&t.childNodes[n].parentNode.removeChild(t.childNodes[n]);t.textContent=""}}return this}Pe.fn=zp.prototype;var xnt="resize scroll".split(" ");function H2e(e){return function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];if(n[0]===void 0){for(var o=0;o<this.length;o+=1)xnt.indexOf(e)<0&&(e in this[o]?this[o][e]():Pe(this[o]).trigger(e));return this}return this.on.apply(this,[e].concat(n))}}var $2e=H2e("click"),$p=H2e("focus"),_nt="[object GeneratorFunction]",Ent=/^(?:0|[1-9]\d*)$/;function Cnt(e,t){for(var n=-1,r=e?e.length:0;++n<r&&t(e[n],n,e)!==!1;);return e}var zE=Object.prototype,Vj=zE.hasOwnProperty,U2e=zE.toString,Snt=zE.propertyIsEnumerable,knt=function(e,t){return function(n){return e(t(n))}}(Object.keys,Object),W2e,Dnt=(W2e=function(e,t){return e&&Ont(e,t,Mnt)},function(e,t){if(e==null)return e;if(!zj(e))return W2e(e,t);for(var n=e.length,r=-1,o=Object(e);++r<n&&t(o[r],r,o)!==!1;);return e}),Ont=function(e,t,n){for(var r=-1,o=Object(e),i=n(e),a=i.length;a--;){var l=i[++r];if(t(o[l],l,o)===!1)break}return e};function Tnt(e,t){return!!(t=t??9007199254740991)&&(typeof e=="number"||Ent.test(e))&&e>-1&&e%1==0&&e<t}var G2e=Array.isArray;function zj(e){return e!=null&&function(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=9007199254740991}(e.length)&&!function(t){var n=function(r){var o=typeof r;return!!r&&(o=="object"||o=="function")}(t)?U2e.call(t):"";return n=="[object Function]"||n==_nt}(e)}function Mnt(e){return zj(e)?function(t){var n=G2e(t)||function(a){return function(l){return function(s){return!!s&&typeof s=="object"}(l)&&zj(l)}(a)&&Vj.call(a,"callee")&&(!Snt.call(a,"callee")||U2e.call(a)=="[object Arguments]")}(t)?function(a,l){for(var s=-1,u=Array(a);++s<a;)u[s]=l(s);return u}(t.length,String):[],r=n.length,o=!!r;for(var i in t)!Vj.call(t,i)||o&&(i=="length"||Tnt(i,r))||n.push(i);return n}(e):function(t){if(r=(n=t)&&n.constructor,n!==(typeof r=="function"&&r.prototype||zE))return knt(t);var n,r,o=[];for(var i in Object(t))Vj.call(t,i)&&i!="constructor"&&o.push(i);return o}(e)}function Nnt(e){return e}var Hj=function(e,t){return(G2e(e)?Cnt:Dnt)(e,typeof t=="function"?t:Nnt)};let q2e=(e=21)=>{let t="",n=crypto.getRandomValues(new Uint8Array(e));for(;e--;){let r=63&n[e];t+=r<36?r.toString(36):r<62?(r-26).toString(36).toUpperCase():r<63?"_":"-"}return t};var Fnt=/^\s+|\s+$/g,Rnt=/^[-+]0x[0-9a-f]+$/i,Int=/^0b[01]+$/i,Bnt=/^0o[0-7]+$/i,Pnt=parseInt,Lnt=typeof eo=="object"&&eo&&eo.Object===Object&&eo,jnt=typeof self=="object"&&self&&self.Object===Object&&self,Vnt=Lnt||jnt||Function("return this")(),znt=Object.prototype.toString,Hnt=Math.max,$nt=Math.min,$j=function(){return Vnt.Date.now()};function Unt(e,t,n){var r,o,i,a,l,s,u=0,c=!1,d=!1,f=!0;if(typeof e!="function")throw new TypeError("Expected a function");function p(y){var w=r,x=o;return r=o=void 0,u=y,a=e.apply(x,w)}function m(y){var w=y-s;return s===void 0||w>=t||w<0||d&&y-u>=i}function v(){var y=$j();if(m(y))return g(y);l=setTimeout(v,function(w){var x=t-(w-s);return d?$nt(x,i-(w-u)):x}(y))}function g(y){return l=void 0,f&&r?p(y):(r=o=void 0,a)}function b(){var y=$j(),w=m(y);if(r=arguments,o=this,s=y,w){if(l===void 0)return function(x){return u=x,l=setTimeout(v,t),c?p(x):a}(s);if(d)return l=setTimeout(v,t),p(s)}return l===void 0&&(l=setTimeout(v,t)),a}return t=K2e(t)||0,HE(n)&&(c=!!n.leading,i=(d="maxWait"in n)?Hnt(K2e(n.maxWait)||0,t):i,f="trailing"in n?!!n.trailing:f),b.cancel=function(){l!==void 0&&clearTimeout(l),u=0,r=s=o=l=void 0},b.flush=function(){return l===void 0?a:g($j())},b}function HE(e){var t=typeof e;return!!e&&(t=="object"||t=="function")}function K2e(e){if(typeof e=="number")return e;if(function(r){return typeof r=="symbol"||function(o){return!!o&&typeof o=="object"}(r)&&znt.call(r)=="[object Symbol]"}(e))return NaN;if(HE(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=HE(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=e.replace(Fnt,"");var n=Int.test(e);return n||Bnt.test(e)?Pnt(e.slice(2),n?2:8):Rnt.test(e)?NaN:+e}var Y1=function(e,t,n){var r=!0,o=!0;if(typeof e!="function")throw new TypeError("Expected a function");return HE(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),Unt(e,t,{leading:r,maxWait:t,trailing:o})};const Wnt={createElement:function(e,t){return document.createElement(e,t)},createElementNS:function(e,t,n){return document.createElementNS(e,t,n)},createTextNode:function(e){return document.createTextNode(e)},createComment:function(e){return document.createComment(e)},insertBefore:function(e,t,n){e.insertBefore(t,n)},removeChild:function(e,t){e.removeChild(t)},appendChild:function(e,t){e.appendChild(t)},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.tagName},setTextContent:function(e,t){e.textContent=t},getTextContent:function(e){return e.textContent},isElement:function(e){return e.nodeType===1},isText:function(e){return e.nodeType===3},isComment:function(e){return e.nodeType===8}};function O6(e,t,n,r,o){return{sel:e,data:t,children:n,text:r,elm:o,key:t===void 0?void 0:t.key}}const Uj=Array.isArray;function $E(e){return typeof e=="string"||typeof e=="number"||e instanceof String||e instanceof Number}function Wj(e){return e===void 0}function Ss(e){return e!==void 0}const Y2e=O6("",{},[],void 0,void 0);function T6(e,t){var n,r;const o=e.key===t.key,i=((n=e.data)===null||n===void 0?void 0:n.is)===((r=t.data)===null||r===void 0?void 0:r.is);return e.sel===t.sel&&o&&i}function Gnt(e,t,n){var r;const o={};for(let i=t;i<=n;++i){const a=(r=e[i])===null||r===void 0?void 0:r.key;a!==void 0&&(o[a]=i)}return o}const qnt=["create","update","remove","destroy","pre","post"];function Knt(e,t){const n={create:[],update:[],remove:[],destroy:[],pre:[],post:[]},r=Wnt;for(const c of qnt)for(const d of e){const f=d[c];f!==void 0&&n[c].push(f)}function o(c,d){return function(){if(--d==0){const f=r.parentNode(c);r.removeChild(f,c)}}}function i(c,d){var f,p;let m,v=c.data;if(v!==void 0){const y=(f=v.hook)===null||f===void 0?void 0:f.init;Ss(y)&&(y(c),v=c.data)}const g=c.children,b=c.sel;if(b==="!")Wj(c.text)&&(c.text=""),c.elm=r.createComment(c.text);else if(b!==void 0){const y=b.indexOf("#"),w=b.indexOf(".",y),x=y>0?y:b.length,_=w>0?w:b.length,E=y!==-1||w!==-1?b.slice(0,Math.min(x,_)):b,C=c.elm=Ss(v)&&Ss(m=v.ns)?r.createElementNS(m,E,v):r.createElement(E,v);for(x<_&&C.setAttribute("id",b.slice(x+1,_)),w>0&&C.setAttribute("class",b.slice(_+1).replace(/\./g," ")),m=0;m<n.create.length;++m)n.create[m](Y2e,c);if(Uj(g))for(m=0;m<g.length;++m){const k=g[m];k!=null&&r.appendChild(C,i(k,d))}else $E(c.text)&&r.appendChild(C,r.createTextNode(c.text));const T=c.data.hook;Ss(T)&&((p=T.create)===null||p===void 0||p.call(T,Y2e,c),T.insert&&d.push(c))}else c.elm=r.createTextNode(c.text);return c.elm}function a(c,d,f,p,m,v){for(;p<=m;++p){const g=f[p];g!=null&&r.insertBefore(c,i(g,v),d)}}function l(c){var d,f;const p=c.data;if(p!==void 0){(f=(d=p==null?void 0:p.hook)===null||d===void 0?void 0:d.destroy)===null||f===void 0||f.call(d,c);for(let m=0;m<n.destroy.length;++m)n.destroy[m](c);if(c.children!==void 0)for(let m=0;m<c.children.length;++m){const v=c.children[m];v!=null&&typeof v!="string"&&l(v)}}}function s(c,d,f,p){for(var m,v;f<=p;++f){let g,b;const y=d[f];if(y!=null)if(Ss(y.sel)){l(y),g=n.remove.length+1,b=o(y.elm,g);for(let x=0;x<n.remove.length;++x)n.remove[x](y,b);const w=(v=(m=y==null?void 0:y.data)===null||m===void 0?void 0:m.hook)===null||v===void 0?void 0:v.remove;Ss(w)?w(y,b):b()}else r.removeChild(c,y.elm)}}function u(c,d,f){var p,m,v,g,b;const y=(p=d.data)===null||p===void 0?void 0:p.hook;(m=y==null?void 0:y.prepatch)===null||m===void 0||m.call(y,c,d);const w=d.elm=c.elm,x=c.children,_=d.children;if(c!==d){if(d.data!==void 0){for(let E=0;E<n.update.length;++E)n.update[E](c,d);(g=(v=d.data.hook)===null||v===void 0?void 0:v.update)===null||g===void 0||g.call(v,c,d)}Wj(d.text)?Ss(x)&&Ss(_)?x!==_&&function(E,C,T,k){let I,O,F,N,B=0,P=0,V=C.length-1,L=C[0],H=C[V],U=T.length-1,G=T[0],z=T[U];for(;B<=V&&P<=U;)L==null?L=C[++B]:H==null?H=C[--V]:G==null?G=T[++P]:z==null?z=T[--U]:T6(L,G)?(u(L,G,k),L=C[++B],G=T[++P]):T6(H,z)?(u(H,z,k),H=C[--V],z=T[--U]):T6(L,z)?(u(L,z,k),r.insertBefore(E,L.elm,r.nextSibling(H.elm)),L=C[++B],z=T[--U]):T6(H,G)?(u(H,G,k),r.insertBefore(E,H.elm,L.elm),H=C[--V],G=T[++P]):(I===void 0&&(I=Gnt(C,B,V)),O=I[G.key],Wj(O)?r.insertBefore(E,i(G,k),L.elm):(F=C[O],F.sel!==G.sel?r.insertBefore(E,i(G,k),L.elm):(u(F,G,k),C[O]=void 0,r.insertBefore(E,F.elm,L.elm))),G=T[++P]);(B<=V||P<=U)&&(B>V?(N=T[U+1]==null?null:T[U+1].elm,a(E,N,T,P,U,k)):s(E,C,B,V))}(w,x,_,f):Ss(_)?(Ss(c.text)&&r.setTextContent(w,""),a(w,null,_,0,_.length-1,f)):Ss(x)?s(w,x,0,x.length-1):Ss(c.text)&&r.setTextContent(w,""):c.text!==d.text&&(Ss(x)&&s(w,x,0,x.length-1),r.setTextContent(w,d.text)),(b=y==null?void 0:y.postpatch)===null||b===void 0||b.call(y,c,d)}}return function(c,d){let f,p,m;const v=[];for(f=0;f<n.pre.length;++f)n.pre[f]();for(function(g){return g.sel!==void 0}(c)||(c=function(g){const b=g.id?"#"+g.id:"",y=g.getAttribute("class"),w=y?"."+y.split(" ").join("."):"";return O6(r.tagName(g).toLowerCase()+b+w,{},[],void 0,g)}(c)),T6(c,d)?u(c,d,v):(p=c.elm,m=r.parentNode(p),i(d,v),m!==null&&(r.insertBefore(m,d.elm,r.nextSibling(p)),s(m,[c],0,0))),f=0;f<v.length;++f)v[f].data.hook.insert(v[f]);for(f=0;f<n.post.length;++f)n.post[f]();return d}}function X2e(e,t,n){if(e.ns="http://www.w3.org/2000/svg",n!=="foreignObject"&&t!==void 0)for(let r=0;r<t.length;++r){const o=t[r].data;o!==void 0&&X2e(o,t[r].children,t[r].sel)}}function S2(e,t,n){let r,o,i,a={};if(n!==void 0?(t!==null&&(a=t),Uj(n)?r=n:$E(n)?o=n.toString():n&&n.sel&&(r=[n])):t!=null&&(Uj(t)?r=t:$E(t)?o=t.toString():t&&t.sel?r=[t]:a=t),r!==void 0)for(i=0;i<r.length;++i)$E(r[i])&&(r[i]=O6(void 0,void 0,void 0,r[i],void 0));return e[0]!=="s"||e[1]!=="v"||e[2]!=="g"||e.length!==3&&e[3]!=="."&&e[3]!=="#"||X2e(a,r,e),O6(e,a,r,o,void 0)}function Q2e(e,t){let n;const r=t.elm;let o=e.data.attrs,i=t.data.attrs;if((o||i)&&o!==i){for(n in o=o||{},i=i||{},i){const a=i[n];o[n]!==a&&(a===!0?r.setAttribute(n,""):a===!1?r.removeAttribute(n):n.charCodeAt(0)!==120?r.setAttribute(n,a):n.charCodeAt(3)===58?r.setAttributeNS("http://www.w3.org/XML/1998/namespace",n,a):n.charCodeAt(5)===58?r.setAttributeNS("http://www.w3.org/1999/xlink",n,a):r.setAttribute(n,a))}for(n in o)n in i||r.removeAttribute(n)}}const Ynt={create:Q2e,update:Q2e};function J2e(e,t){let n,r;const o=t.elm;let i=e.data.class,a=t.data.class;if((i||a)&&i!==a){for(r in i=i||{},a=a||{},i)i[r]&&!Object.prototype.hasOwnProperty.call(a,r)&&o.classList.remove(r);for(r in a)n=a[r],n!==i[r]&&o.classList[n?"add":"remove"](r)}}const Xnt={create:J2e,update:J2e},Z2e=/[A-Z]/g;function eye(e,t){const n=t.elm;let r,o=e.data.dataset,i=t.data.dataset;if(!o&&!i||o===i)return;o=o||{},i=i||{};const a=n.dataset;for(r in o)i[r]||(a?r in a&&delete a[r]:n.removeAttribute("data-"+r.replace(Z2e,"-$&").toLowerCase()));for(r in i)o[r]!==i[r]&&(a?a[r]=i[r]:n.setAttribute("data-"+r.replace(Z2e,"-$&").toLowerCase(),i[r]))}const Qnt={create:eye,update:eye};function tye(e,t,n){if(typeof e=="function")e.call(t,n,t);else if(typeof e=="object")for(let r=0;r<e.length;r++)tye(e[r],t,n)}function Jnt(e,t){const n=e.type,r=t.data.on;r&&r[n]&&tye(r[n],t,e)}function Gj(e,t){const n=e.data.on,r=e.listener,o=e.elm,i=t&&t.data.on,a=t&&t.elm;let l;if(n!==i){if(n&&r)if(i)for(l in n)i[l]||o.removeEventListener(l,r,!1);else for(l in n)o.removeEventListener(l,r,!1);if(i){const s=t.listener=e.listener||function u(c){Jnt(c,u.vnode)};if(s.vnode=t,n)for(l in i)n[l]||a.addEventListener(l,s,!1);else for(l in i)a.addEventListener(l,s,!1)}}}const Znt={create:Gj,update:Gj,destroy:Gj};function nye(e,t){let n,r,o;const i=t.elm;let a=e.data.props,l=t.data.props;if((a||l)&&a!==l)for(n in a=a||{},l=l||{},l)r=l[n],o=a[n],o===r||n==="value"&&i[n]===r||(i[n]=r)}const ert={create:nye,update:nye},rye=typeof window<"u"&&window.requestAnimationFrame.bind(window)||setTimeout;let qj=!1;function trt(e,t,n){(function(r){rye(function(){rye(r)})})(function(){e[t]=n})}function oye(e,t){let n,r;const o=t.elm;let i=e.data.style,a=t.data.style;if(!i&&!a||i===a)return;i=i||{},a=a||{};const l="delayed"in i;for(r in i)a[r]||(r[0]==="-"&&r[1]==="-"?o.style.removeProperty(r):o.style[r]="");for(r in a)if(n=a[r],r==="delayed"&&a.delayed)for(const s in a.delayed)n=a.delayed[s],l&&n===i.delayed[s]||trt(o.style,s,n);else r!=="remove"&&n!==i[r]&&(r[0]==="-"&&r[1]==="-"?o.style.setProperty(r,n):o.style[r]=n)}const nrt={pre:function(){qj=!1},create:oye,update:oye,destroy:function(e){let t,n;const r=e.elm,o=e.data.style;if(o&&(t=o.destroy))for(n in t)r.style[n]=t[n]},remove:function(e,t){const n=e.data.style;if(!n||!n.remove)return void t();let r;qj||(e.elm.offsetLeft,qj=!0);const o=e.elm;let i=0;const a=n.remove;let l=0;const s=[];for(r in a)s.push(r),o.style[r]=a[r];const u=getComputedStyle(o)["transition-property"].split(", ");for(;i<u.length;++i)s.indexOf(u[i])!==-1&&l++;o.addEventListener("transitionend",function(c){c.target===o&&--l,l===0&&t()})}};function iye(e,t){for(const n of e)n!=null&&n!==!1&&n!==""&&(Array.isArray(n)?iye(n,t):typeof n=="string"||typeof n=="number"||typeof n=="boolean"?t.push(O6(void 0,void 0,void 0,String(n),void 0)):t.push(n));return t}function Mn(e,t,...n){const r=iye(n,[]);return typeof e=="function"?e(t,r):r.length===1&&!r[0].sel&&r[0].text?S2(e,t,r[0].text):S2(e,t,r)}Mn||(Mn={});var Kj,rrt=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,ort=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,aye="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",lye="["+aye+"]",UE="[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]",sye="\\d+",uye="[a-z\\xdf-\\xf6\\xf8-\\xff]",cye="[^\uD800-\uDFFF"+aye+sye+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",Yj="\uD83C[\uDFFB-\uDFFF]",dye="[^\uD800-\uDFFF]",Xj="(?:\uD83C[\uDDE6-\uDDFF]){2}",Qj="[\uD800-\uDBFF][\uDC00-\uDFFF]",k2="[A-Z\\xc0-\\xd6\\xd8-\\xde]",fye="(?:"+uye+"|"+cye+")",irt="(?:"+k2+"|"+cye+")",pye="(?:"+UE+"|"+Yj+")?",hye="[\\ufe0e\\ufe0f]?"+pye+"(?:\\u200d(?:"+[dye,Xj,Qj].join("|")+")[\\ufe0e\\ufe0f]?"+pye+")*",art="(?:"+["[\\u2700-\\u27bf]",Xj,Qj].join("|")+")"+hye,lrt="(?:"+[dye+UE+"?",UE,Xj,Qj,"[\uD800-\uDFFF]"].join("|")+")",srt=RegExp("['\u2019]","g"),urt=RegExp(UE,"g"),crt=RegExp(Yj+"(?="+Yj+")|"+lrt+hye,"g"),drt=RegExp([k2+"?"+uye+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?="+[lye,k2,"$"].join("|")+")",irt+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?="+[lye,k2+fye,"$"].join("|")+")",k2+"?"+fye+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?",k2+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?",sye,art].join("|"),"g"),frt=RegExp("[\\u200d\uD800-\uDFFF\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0\\ufe0e\\ufe0f]"),prt=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,hrt=typeof eo=="object"&&eo&&eo.Object===Object&&eo,vrt=typeof self=="object"&&self&&self.Object===Object&&self,mrt=hrt||vrt||Function("return this")(),grt=(Kj={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"ss"},function(e){return Kj==null?void 0:Kj[e]});function vye(e){return frt.test(e)}var yrt=Object.prototype.toString,mye=mrt.Symbol,gye=mye?mye.prototype:void 0,yye=gye?gye.toString:void 0;function WE(e){return e==null?"":function(t){if(typeof t=="string")return t;if(function(r){return typeof r=="symbol"||function(o){return!!o&&typeof o=="object"}(r)&&yrt.call(r)=="[object Symbol]"}(t))return yye?yye.call(t):"";var n=t+"";return n=="0"&&1/t==-1/0?"-0":n}(e)}for(var bye,brt=(bye=function(e,t,n){return t=t.toLowerCase(),e+(n?Art(WE(t).toLowerCase()):t)},function(e){return function(t,n,r){for(var o=-1,i=t?t.length:0;++o<i;)r=n(r,t[o],o,t);return r}(function(t,n){return t=WE(t),n===void 0?function(r){return prt.test(r)}(t)?function(r){return r.match(drt)||[]}(t):function(r){return r.match(rrt)||[]}(t):t.match(n)||[]}(function(t){return(t=WE(t))&&t.replace(ort,grt).replace(urt,"")}(e).replace(srt,"")),bye,"")}),Art=function(e){var t=vye(e=WE(e))?function(o){return vye(o)?function(i){return i.match(crt)||[]}(o):function(i){return i.split("")}(o)}(e):void 0,n=t?t[0]:e.charAt(0),r=t?function(o,i,a){var l=o.length;return a=a===void 0?l:a,!i&&a>=l?o:function(s,u,c){var d=-1,f=s.length;u<0&&(u=-u>f?0:f+u),(c=c>f?f:c)<0&&(c+=f),f=u>c?0:c-u>>>0,u>>>=0;for(var p=Array(f);++d<f;)p[d]=s[d+u];return p}(o,i,a)}(t,1).join(""):e.slice(1);return n.toUpperCase()+r},wrt=brt,xrt=typeof window<"u"&&/Mac|iPod|iPhone|iPad/.test(window.navigator.platform),Jj={alt:"altKey",control:"ctrlKey",meta:"metaKey",shift:"shiftKey"},Aye={add:"+",break:"pause",cmd:"meta",command:"meta",ctl:"control",ctrl:"control",del:"delete",down:"arrowdown",esc:"escape",ins:"insert",left:"arrowleft",mod:xrt?"meta":"control",opt:"alt",option:"alt",return:"enter",right:"arrowright",space:" ",spacebar:" ",up:"arrowup",win:"meta",windows:"meta"},Zj={backspace:8,tab:9,enter:13,shift:16,control:17,alt:18,pause:19,capslock:20,escape:27," ":32,pageup:33,pagedown:34,end:35,home:36,arrowleft:37,arrowup:38,arrowright:39,arrowdown:40,insert:45,delete:46,meta:91,numlock:144,scrolllock:145,";":186,"=":187,",":188,"-":189,".":190,"/":191,"`":192,"[":219,"\\":220,"]":221,"'":222},GE=1;GE<20;GE++)Zj["f"+GE]=111+GE;function wye(e,t,n){t&&!("byKey"in t)&&(n=t,t=null),Array.isArray(e)||(e=[e]);var r=e.map(function(i){return function(a,l){var s=l&&l.byKey,u={},c=(a=a.replace("++","+add")).split("+"),d=c.length;for(var f in Jj)u[Jj[f]]=!1;var p=!0,m=!1,v=void 0;try{for(var g,b=c[Symbol.iterator]();!(p=(g=b.next()).done);p=!0){var y=g.value,w=y.endsWith("?")&&y.length>1;w&&(y=y.slice(0,-1));var x=xye(y),_=Jj[x];if(y.length>1&&!_&&!Aye[y]&&!Zj[x])throw new TypeError('Unknown modifier: "'+y+'"');d!==1&&_||(s?u.key=x:u.which=_rt(y)),_&&(u[_]=!w||null)}}catch(E){m=!0,v=E}finally{try{!p&&b.return&&b.return()}finally{if(m)throw v}}return u}(i,t)}),o=function(i){return r.some(function(a){return function(l,s){for(var u in l){var c=l[u],d=void 0;if(c!=null&&((d=u==="key"&&s.key!=null?s.key.toLowerCase():u==="which"?c===91&&s.which===93?91:s.which:s[u])!=null||c!==!1)&&d!==c)return!1}return!0}(a,i)})};return n==null?o:o(n)}function _rt(e){return e=xye(e),Zj[e]||e.toUpperCase().charCodeAt(0)}function xye(e){return e=e.toLowerCase(),Aye[e]||e}var Ert=wye,eV=function(e,t){return wye(e,{byKey:!0},t)},Crt=/^\s+|\s+$/g,Srt=/^[-+]0x[0-9a-f]+$/i,krt=/^0b[01]+$/i,Drt=/^0o[0-7]+$/i,Ort=parseInt,Trt=typeof eo=="object"&&eo&&eo.Object===Object&&eo,Mrt=typeof self=="object"&&self&&self.Object===Object&&self,Nrt=Trt||Mrt||Function("return this")(),Frt=Object.prototype.toString,Rrt=Math.max,Irt=Math.min,tV=function(){return Nrt.Date.now()};function nV(e){var t=typeof e;return!!e&&(t=="object"||t=="function")}function _ye(e){if(typeof e=="number")return e;if(function(r){return typeof r=="symbol"||function(o){return!!o&&typeof o=="object"}(r)&&Frt.call(r)=="[object Symbol]"}(e))return NaN;if(nV(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=nV(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=e.replace(Crt,"");var n=krt.test(e);return n||Drt.test(e)?Ort(e.slice(2),n?2:8):Srt.test(e)?NaN:+e}var D2,Eye=function(e,t,n){var r,o,i,a,l,s,u=0,c=!1,d=!1,f=!0;if(typeof e!="function")throw new TypeError("Expected a function");function p(y){var w=r,x=o;return r=o=void 0,u=y,a=e.apply(x,w)}function m(y){var w=y-s;return s===void 0||w>=t||w<0||d&&y-u>=i}function v(){var y=tV();if(m(y))return g(y);l=setTimeout(v,function(w){var x=t-(w-s);return d?Irt(x,i-(w-u)):x}(y))}function g(y){return l=void 0,f&&r?p(y):(r=o=void 0,a)}function b(){var y=tV(),w=m(y);if(r=arguments,o=this,s=y,w){if(l===void 0)return function(x){return u=x,l=setTimeout(v,t),c?p(x):a}(s);if(d)return l=setTimeout(v,t),p(s)}return l===void 0&&(l=setTimeout(v,t)),a}return t=_ye(t)||0,nV(n)&&(c=!!n.leading,i=(d="maxWait"in n)?Rrt(_ye(n.maxWait)||0,t):i,f="trailing"in n?!!n.trailing:f),b.cancel=function(){l!==void 0&&clearTimeout(l),u=0,r=s=o=l=void 0},b.flush=function(){return l===void 0?a:g(tV())},b},Cye=T1(function(e,t){var n="__lodash_hash_undefined__",r=9007199254740991,o="[object Arguments]",i="[object Boolean]",a="[object Date]",l="[object Function]",s="[object GeneratorFunction]",u="[object Map]",c="[object Number]",d="[object Object]",f="[object Promise]",p="[object RegExp]",m="[object Set]",v="[object String]",g="[object Symbol]",b="[object WeakMap]",y="[object ArrayBuffer]",w="[object DataView]",x="[object Float32Array]",_="[object Float64Array]",E="[object Int8Array]",C="[object Int16Array]",T="[object Int32Array]",k="[object Uint8Array]",I="[object Uint8ClampedArray]",O="[object Uint16Array]",F="[object Uint32Array]",N=/\w*$/,B=/^\[object .+?Constructor\]$/,P=/^(?:0|[1-9]\d*)$/,V={};V[o]=V["[object Array]"]=V[y]=V[w]=V[i]=V[a]=V[x]=V[_]=V[E]=V[C]=V[T]=V[u]=V[c]=V[d]=V[p]=V[m]=V[v]=V[g]=V[k]=V[I]=V[O]=V[F]=!0,V["[object Error]"]=V[l]=V[b]=!1;var L=typeof eo=="object"&&eo&&eo.Object===Object&&eo,H=typeof self=="object"&&self&&self.Object===Object&&self,U=L||H||Function("return this")(),G=t&&!t.nodeType&&t,z=G&&e&&!e.nodeType&&e,$=z&&z.exports===G;function W(Oe,nt){return Oe.set(nt[0],nt[1]),Oe}function K(Oe,nt){return Oe.add(nt),Oe}function X(Oe,nt,ut,xt){for(var En=-1,ln=Oe?Oe.length:0;++En<ln;)ut=nt(ut,Oe[En],En,Oe);return ut}function te(Oe){var nt=!1;if(Oe!=null&&typeof Oe.toString!="function")try{nt=!!(Oe+"")}catch{}return nt}function ne(Oe){var nt=-1,ut=Array(Oe.size);return Oe.forEach(function(xt,En){ut[++nt]=[En,xt]}),ut}function se(Oe,nt){return function(ut){return Oe(nt(ut))}}function le(Oe){var nt=-1,ut=Array(Oe.size);return Oe.forEach(function(xt){ut[++nt]=xt}),ut}var J=Array.prototype,Z=Function.prototype,ye=Object.prototype,be=U["__core-js_shared__"],ve=function(){var Oe=/[^.]+$/.exec(be&&be.keys&&be.keys.IE_PROTO||"");return Oe?"Symbol(src)_1."+Oe:""}(),Ae=Z.toString,Ce=ye.hasOwnProperty,_e=ye.toString,ke=RegExp("^"+Ae.call(Ce).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Be=$?U.Buffer:void 0,$e=U.Symbol,rt=U.Uint8Array,ge=se(Object.getPrototypeOf,Object),We=Object.create,st=ye.propertyIsEnumerable,At=J.splice,Ve=Object.getOwnPropertySymbols,it=Be?Be.isBuffer:void 0,dt=se(Object.keys,Object),ot=Ao(U,"DataView"),je=Ao(U,"Map"),we=Ao(U,"Promise"),ze=Ao(U,"Set"),me=Ao(U,"WeakMap"),Me=Ao(Object,"create"),Ie=He(ot),ht=He(je),gt=He(we),vt=He(ze),qt=He(me),mn=$e?$e.prototype:void 0,Zt=mn?mn.valueOf:void 0;function rn(Oe){var nt=-1,ut=Oe?Oe.length:0;for(this.clear();++nt<ut;){var xt=Oe[nt];this.set(xt[0],xt[1])}}function zn(Oe){var nt=-1,ut=Oe?Oe.length:0;for(this.clear();++nt<ut;){var xt=Oe[nt];this.set(xt[0],xt[1])}}function tt(Oe){var nt=-1,ut=Oe?Oe.length:0;for(this.clear();++nt<ut;){var xt=Oe[nt];this.set(xt[0],xt[1])}}function kt(Oe){this.__data__=new zn(Oe)}function An(Oe,nt,ut){var xt=Oe[nt];Ce.call(Oe,nt)&<(xt,ut)&&(ut!==void 0||nt in Oe)||(Oe[nt]=ut)}function _n(Oe,nt){for(var ut=Oe.length;ut--;)if(lt(Oe[ut][0],nt))return ut;return-1}function po(Oe,nt,ut,xt,En,ln,Ct){var Fn;if(xt&&(Fn=ln?xt(Oe,En,ln,Ct):xt(Oe)),Fn!==void 0)return Fn;if(!Ne(Oe))return Oe;var Mo=Et(Oe);if(Mo){if(Fn=function(xe){var Ee=xe.length,Ze=xe.constructor(Ee);return Ee&&typeof xe[0]=="string"&&Ce.call(xe,"index")&&(Ze.index=xe.index,Ze.input=xe.input),Ze}(Oe),!nt)return function(xe,Ee){var Ze=-1,Vt=xe.length;for(Ee||(Ee=Array(Vt));++Ze<Vt;)Ee[Ze]=xe[Ze];return Ee}(Oe,Fn)}else{var jr=Go(Oe),cr=jr==l||jr==s;if(gr(Oe))return function(xe,Ee){if(Ee)return xe.slice();var Ze=new xe.constructor(xe.length);return xe.copy(Ze),Ze}(Oe,nt);if(jr==d||jr==o||cr&&!ln){if(te(Oe))return ln?Oe:{};if(Fn=function(xe){return typeof xe.constructor!="function"||sa(xe)?{}:Ne(Ee=ge(xe))?We(Ee):{};var Ee}(cr?{}:Oe),!nt)return function(xe,Ee){return Ar(xe,pl(xe),Ee)}(Oe,function(xe,Ee){return xe&&Ar(Ee,Tt(Ee),xe)}(Fn,Oe))}else{if(!V[jr])return ln?Oe:{};Fn=function(xe,Ee,Ze,Vt){var Cn=xe.constructor;switch(Ee){case y:return Qr(xe);case i:case a:return new Cn(+xe);case w:return function(on,Ln){var Mr=Ln?Qr(on.buffer):on.buffer;return new on.constructor(Mr,on.byteOffset,on.byteLength)}(xe,Vt);case x:case _:case E:case C:case T:case k:case I:case O:case F:return function(on,Ln){var Mr=Ln?Qr(on.buffer):on.buffer;return new on.constructor(Mr,on.byteOffset,on.length)}(xe,Vt);case u:return function(on,Ln,Mr){return X(Ln?Mr(ne(on),!0):ne(on),W,new on.constructor)}(xe,Vt,Ze);case c:case v:return new Cn(xe);case p:return function(on){var Ln=new on.constructor(on.source,N.exec(on));return Ln.lastIndex=on.lastIndex,Ln}(xe);case m:return function(on,Ln,Mr){return X(Ln?Mr(le(on),!0):le(on),K,new on.constructor)}(xe,Vt,Ze);case g:return function(on){return Zt?Object(Zt.call(on)):{}}(xe)}}(Oe,jr,po,nt)}}Ct||(Ct=new kt);var Ha=Ct.get(Oe);if(Ha)return Ha;if(Ct.set(Oe,Fn),!Mo)var pe=ut?function(xe){return function(Ee,Ze,Vt){var Cn=Ze(Ee);return Et(Ee)?Cn:function(on,Ln){for(var Mr=-1,gn=Ln.length,Ef=on.length;++Mr<gn;)on[Ef+Mr]=Ln[Mr];return on}(Cn,Vt(Ee))}(xe,Tt,pl)}(Oe):Tt(Oe);return function(xe,Ee){for(var Ze=-1,Vt=xe?xe.length:0;++Ze<Vt&&Ee(xe[Ze],Ze)!==!1;);}(pe||Oe,function(xe,Ee){pe&&(xe=Oe[Ee=xe]),An(Fn,Ee,po(xe,nt,ut,xt,Ee,Oe,Ct))}),Fn}function Qr(Oe){var nt=new Oe.constructor(Oe.byteLength);return new rt(nt).set(new rt(Oe)),nt}function Ar(Oe,nt,ut,xt){ut||(ut={});for(var En=-1,ln=nt.length;++En<ln;){var Ct=nt[En];An(ut,Ct,Oe[Ct])}return ut}function Jr(Oe,nt){var ut,xt,En=Oe.__data__;return((xt=typeof(ut=nt))=="string"||xt=="number"||xt=="symbol"||xt=="boolean"?ut!=="__proto__":ut===null)?En[typeof nt=="string"?"string":"hash"]:En.map}function Ao(Oe,nt){var ut=function(xt,En){return xt==null?void 0:xt[En]}(Oe,nt);return function(xt){return!(!Ne(xt)||function(En){return!!ve&&ve in En}(xt))&&(Bn(xt)||te(xt)?ke:B).test(He(xt))}(ut)?ut:void 0}rn.prototype.clear=function(){this.__data__=Me?Me(null):{}},rn.prototype.delete=function(Oe){return this.has(Oe)&&delete this.__data__[Oe]},rn.prototype.get=function(Oe){var nt=this.__data__;if(Me){var ut=nt[Oe];return ut===n?void 0:ut}return Ce.call(nt,Oe)?nt[Oe]:void 0},rn.prototype.has=function(Oe){var nt=this.__data__;return Me?nt[Oe]!==void 0:Ce.call(nt,Oe)},rn.prototype.set=function(Oe,nt){return this.__data__[Oe]=Me&&nt===void 0?n:nt,this},zn.prototype.clear=function(){this.__data__=[]},zn.prototype.delete=function(Oe){var nt=this.__data__,ut=_n(nt,Oe);return!(ut<0||(ut==nt.length-1?nt.pop():At.call(nt,ut,1),0))},zn.prototype.get=function(Oe){var nt=this.__data__,ut=_n(nt,Oe);return ut<0?void 0:nt[ut][1]},zn.prototype.has=function(Oe){return _n(this.__data__,Oe)>-1},zn.prototype.set=function(Oe,nt){var ut=this.__data__,xt=_n(ut,Oe);return xt<0?ut.push([Oe,nt]):ut[xt][1]=nt,this},tt.prototype.clear=function(){this.__data__={hash:new rn,map:new(je||zn),string:new rn}},tt.prototype.delete=function(Oe){return Jr(this,Oe).delete(Oe)},tt.prototype.get=function(Oe){return Jr(this,Oe).get(Oe)},tt.prototype.has=function(Oe){return Jr(this,Oe).has(Oe)},tt.prototype.set=function(Oe,nt){return Jr(this,Oe).set(Oe,nt),this},kt.prototype.clear=function(){this.__data__=new zn},kt.prototype.delete=function(Oe){return this.__data__.delete(Oe)},kt.prototype.get=function(Oe){return this.__data__.get(Oe)},kt.prototype.has=function(Oe){return this.__data__.has(Oe)},kt.prototype.set=function(Oe,nt){var ut=this.__data__;if(ut instanceof zn){var xt=ut.__data__;if(!je||xt.length<199)return xt.push([Oe,nt]),this;ut=this.__data__=new tt(xt)}return ut.set(Oe,nt),this};var pl=Ve?se(Ve,Object):function(){return[]},Go=function(Oe){return _e.call(Oe)};function za(Oe,nt){return!!(nt=nt??r)&&(typeof Oe=="number"||P.test(Oe))&&Oe>-1&&Oe%1==0&&Oe<nt}function sa(Oe){var nt=Oe&&Oe.constructor;return Oe===(typeof nt=="function"&&nt.prototype||ye)}function He(Oe){if(Oe!=null){try{return Ae.call(Oe)}catch{}try{return Oe+""}catch{}}return""}function lt(Oe,nt){return Oe===nt||Oe!=Oe&&nt!=nt}(ot&&Go(new ot(new ArrayBuffer(1)))!=w||je&&Go(new je)!=u||we&&Go(we.resolve())!=f||ze&&Go(new ze)!=m||me&&Go(new me)!=b)&&(Go=function(Oe){var nt=_e.call(Oe),ut=nt==d?Oe.constructor:void 0,xt=ut?He(ut):void 0;if(xt)switch(xt){case Ie:return w;case ht:return u;case gt:return f;case vt:return m;case qt:return b}return nt});var Et=Array.isArray;function Kt(Oe){return Oe!=null&&function(nt){return typeof nt=="number"&&nt>-1&&nt%1==0&&nt<=r}(Oe.length)&&!Bn(Oe)}var gr=it||function(){return!1};function Bn(Oe){var nt=Ne(Oe)?_e.call(Oe):"";return nt==l||nt==s}function Ne(Oe){var nt=typeof Oe;return!!Oe&&(nt=="object"||nt=="function")}function Tt(Oe){return Kt(Oe)?function(nt){var ut=Et(nt)||function(Ct){return function(Fn){return function(Mo){return!!Mo&&typeof Mo=="object"}(Fn)&&Kt(Fn)}(Ct)&&Ce.call(Ct,"callee")&&(!st.call(Ct,"callee")||_e.call(Ct)==o)}(nt)?function(Ct,Fn){for(var Mo=-1,jr=Array(Ct);++Mo<Ct;)jr[Mo]=Fn(Mo);return jr}(nt.length,String):[],xt=ut.length,En=!!xt;for(var ln in nt)!Ce.call(nt,ln)||En&&(ln=="length"||za(ln,xt))||ut.push(ln);return ut}(Oe):function(nt){if(!sa(nt))return dt(nt);var ut=[];for(var xt in Object(nt))Ce.call(nt,xt)&&xt!="constructor"&&ut.push(xt);return ut}(Oe)}e.exports=function(Oe){return po(Oe,!0,!0)}});function Sye(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw new TypeError("attempted to use private field on non-instance");return e}var Brt=0;function Prt(e,t,n){const r=[];return e.forEach(o=>typeof o!="string"?r.push(o):t[Symbol.split](o).forEach((i,a,l)=>{i!==""&&r.push(i),a<l.length-1&&r.push(n)})),r}function kye(e,t){const n=/\$/g;let r=[e];if(t==null)return r;for(const o of Object.keys(t))if(o!=="_"){let i=t[o];typeof i=="string"&&(i=n[Symbol.replace](i,"$$$$")),r=Prt(r,new RegExp(`%\\{${o}\\}`,"g"),i)}return r}var Dye=(D2=function(e){return"__private_"+Brt+++"_"+e}("apply"),class{constructor(e){Object.defineProperty(this,D2,{value:Lrt}),this.locale={strings:{},pluralize:t=>t===1?0:1},Array.isArray(e)?e.forEach(Sye(this,D2)[D2],this):Sye(this,D2)[D2](e)}translate(e,t){return this.translateArray(e,t).join("")}translateArray(e,t){if(!function(r,o){return Object.prototype.hasOwnProperty.call(r,o)}(this.locale.strings,e))throw new Error(`missing string: ${e}`);const n=this.locale.strings[e];if(typeof n=="object"){if(t&&t.smart_count!==void 0)return kye(n[this.locale.pluralize(t.smart_count)],t);throw new Error("Attempted to use a string with plural forms, but no value was given for %{smart_count}")}return kye(n,t)}});function Lrt(e){if(e==null||!e.strings)return;const t=this.locale;this.locale={...t,strings:{...t.strings,...e.strings}},this.locale.pluralize=e.pluralize||t.pluralize}var Oye=function(){var e={},t=e._fns={};return e.emit=function(n,r,o,i,a,l,s){var u=function(c){for(var d=t[c]?t[c]:[],f=c.indexOf(":"),p=f===-1?[c]:[c.substring(0,f),c.substring(f+1)],m=Object.keys(t),v=0,g=m.length;v<g;v++){var b=m[v];if(b==="*"&&(d=d.concat(t[b])),p.length===2&&p[0]===b){d=d.concat(t[b]);break}}return d}(n);u.length&&function(c,d,f){for(var p=0,m=d.length;p<m&&d[p];p++)d[p].event=c,d[p].apply(d[p],f)}(n,u,[r,o,i,a,l,s])},e.on=function(n,r){t[n]||(t[n]=[]),t[n].push(r)},e.once=function(n,r){this.on(n,function o(){r.apply(this,arguments),e.off(n,o)})},e.off=function(n,r){var o=[];if(n&&r)for(var i=this._fns[n],a=0,l=i?i.length:0;a<l;a++)i[a]!==r&&o.push(i[a]);o.length?this._fns[n]=o:delete this._fns[n]},e};let{urlAlphabet:jrt}={urlAlphabet:"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"},Tye=e=>crypto.getRandomValues(new Uint8Array(e)),Mye=(e,t,n)=>{let r=(2<<Math.log(e.length-1)/Math.LN2)-1,o=-~(1.6*r*t/e.length);return()=>{let i="";for(;;){let a=n(o),l=o;for(;l--;)if(i+=e[a[l]&r]||"",i.length===t)return i}}};var Vrt={nanoid:(e=21)=>{let t="",n=crypto.getRandomValues(new Uint8Array(e));for(;e--;){let r=63&n[e];t+=r<36?r.toString(36):r<62?(r-26).toString(36).toUpperCase():r<63?"_":"-"}return t},customAlphabet:(e,t)=>Mye(e,t,Tye),customRandom:Mye,urlAlphabet:jrt,random:Tye},rV=function(e){if(typeof e!="number"||isNaN(e))throw new TypeError("Expected a number, got "+typeof e);var t=e<0,n=["B","KB","MB","GB","TB","PB","EB","ZB","YB"];if(t&&(e=-e),e<1)return(t?"-":"")+e+" B";var r=Math.min(Math.floor(Math.log(e)/Math.log(1024)),n.length-1);e=Number(e/Math.pow(1024,r));var o=n[r];return e>=10||e%1==0?(t?"-":"")+e.toFixed(0)+" "+o:(t?"-":"")+e.toFixed(1)+" "+o};function Nye(e,t){this.text=e=e||"",this.hasWild=~e.indexOf("*"),this.separator=t,this.parts=e.split(t)}Nye.prototype.match=function(e){var t,n,r=!0,o=this.parts,i=o.length;if(typeof e=="string"||e instanceof String)if(this.hasWild||this.text==e){for(n=(e||"").split(this.separator),t=0;r&&t<i;t++)o[t]!=="*"&&(r=t<n.length&&o[t]===n[t]);r=r&&n}else r=!1;else if(typeof e.splice=="function")for(r=[],t=e.length;t--;)this.match(e[t])&&(r[r.length]=e[t]);else if(typeof e=="object")for(var a in r={},e)this.match(a)&&(r[a]=e[a]);return r};var zrt=/[\/\+\.]/,Hrt=0,oV=function(e){return"__private_"+Hrt+++"_"+e}("publish");class Fye{constructor(){Object.defineProperty(this,oV,{value:$rt}),this.state={},this.callbacks=[]}getState(){return this.state}setState(t){const n={...this.state},r={...this.state,...t};this.state=r,function(o,i){if(!Object.prototype.hasOwnProperty.call(o,i))throw new TypeError("attempted to use private field on non-instance");return o}(this,oV)[oV](n,r,t)}subscribe(t){return this.callbacks.push(t),()=>{this.callbacks.splice(this.callbacks.indexOf(t),1)}}}function $rt(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];this.callbacks.forEach(r=>{r(...t)})}Fye.VERSION="2.0.3";var Rye=function(e){const t=e.lastIndexOf(".");return t===-1||t===e.length-1?{name:e,extension:void 0}:{name:e.slice(0,t),extension:e.slice(t+1)}},Iye={md:"text/markdown",markdown:"text/markdown",mp4:"video/mp4",mp3:"audio/mp3",svg:"image/svg+xml",jpg:"image/jpeg",png:"image/png",gif:"image/gif",heic:"image/heic",heif:"image/heif",yaml:"text/yaml",yml:"text/yaml",csv:"text/csv",tsv:"text/tab-separated-values",tab:"text/tab-separated-values",avi:"video/x-msvideo",mks:"video/x-matroska",mkv:"video/x-matroska",mov:"video/quicktime",doc:"application/msword",docm:"application/vnd.ms-word.document.macroenabled.12",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",dot:"application/msword",dotm:"application/vnd.ms-word.template.macroenabled.12",dotx:"application/vnd.openxmlformats-officedocument.wordprocessingml.template",xla:"application/vnd.ms-excel",xlam:"application/vnd.ms-excel.addin.macroenabled.12",xlc:"application/vnd.ms-excel",xlf:"application/x-xliff+xml",xlm:"application/vnd.ms-excel",xls:"application/vnd.ms-excel",xlsb:"application/vnd.ms-excel.sheet.binary.macroenabled.12",xlsm:"application/vnd.ms-excel.sheet.macroenabled.12",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",xlt:"application/vnd.ms-excel",xltm:"application/vnd.ms-excel.template.macroenabled.12",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template",xlw:"application/vnd.ms-excel",txt:"text/plain",text:"text/plain",conf:"text/plain",log:"text/plain",pdf:"application/pdf",zip:"application/zip","7z":"application/x-7z-compressed",rar:"application/x-rar-compressed",tar:"application/x-tar",gz:"application/gzip",dmg:"application/x-apple-diskimage"};function Bye(e){let t="";return e.replace(/[^A-Z0-9]/gi,n=>(t+=`-${function(r){return r.charCodeAt(0).toString(32)}(n)}`,"/"))+t}var Urt=function(e){if(e==null&&(e=typeof navigator<"u"?navigator.userAgent:null),!e)return!0;const t=/Edge\/(\d+\.\d+)/.exec(e);if(!t)return!0;const n=t[1];let[r,o]=n.split(".");return r=parseInt(r,10),o=parseInt(o,10),r<15||r===15&&o<15063||r>18||r===18&&o>=18218};function iV(e){return e<10?`0${e}`:e.toString()}var qE=function(){const e=new Date;return`${iV(e.getHours())}:${iV(e.getMinutes())}:${iV(e.getSeconds())}`},Pye={justErrorsLogger:{debug:()=>{},warn:()=>{},error:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return console.error(`[Uppy] [${qE()}]`,...t)}},debugLogger:{debug:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return console.debug(`[Uppy] [${qE()}]`,...t)},warn:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return console.warn(`[Uppy] [${qE()}]`,...t)},error:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return console.error(`[Uppy] [${qE()}]`,...t)}}},Wrt={strings:{addBulkFilesFailed:{0:"Failed to add %{smart_count} file due to an internal error",1:"Failed to add %{smart_count} files due to internal errors"},youCanOnlyUploadX:{0:"You can only upload %{smart_count} file",1:"You can only upload %{smart_count} files"},youHaveToAtLeastSelectX:{0:"You have to select at least %{smart_count} file",1:"You have to select at least %{smart_count} files"},exceedsSize:"%{file} exceeds maximum allowed size of %{size}",missingRequiredMetaField:"Missing required meta fields",missingRequiredMetaFieldOnFile:"Missing required meta fields in %{fileName}",inferiorSize:"This file is smaller than the allowed size of %{size}",youCanOnlyUploadFileTypes:"You can only upload: %{types}",noMoreFilesAllowed:"Cannot add more files",noDuplicates:"Cannot add the duplicate file '%{fileName}', it already exists",companionError:"Connection with Companion failed",authAborted:"Authentication aborted",companionUnauthorizeHint:"To unauthorize to your %{provider} account, please go to %{url}",failedToUpload:"Failed to upload %{file}",noInternetConnection:"No Internet connection",connectedToInternet:"Connected to the Internet",noFilesFound:"You have no files or folders here",selectX:{0:"Select %{smart_count}",1:"Select %{smart_count}"},allFilesFromFolderNamed:"All files from folder %{name}",openFolderNamed:"Open folder %{name}",cancel:"Cancel",logOut:"Log out",filter:"Filter",resetFilter:"Reset filter",loading:"Loading...",authenticateWithTitle:"Please authenticate with %{pluginName} to select files",authenticateWith:"Connect to %{pluginName}",signInWithGoogle:"Sign in with Google",searchImages:"Search for images",enterTextToSearch:"Enter text to search for images",backToSearch:"Back to Search",emptyFolderAdded:"No files were added from empty folder",folderAlreadyAdded:'The folder "%{folder}" was already added',folderAdded:{0:"Added %{smart_count} file from %{folder}",1:"Added %{smart_count} files from %{folder}"}}},Lye=Vrt;let jye,Vye;function un(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw new TypeError("attempted to use private field on non-instance");return e}var Grt=0;function yi(e){return"__private_"+Grt+++"_"+e}const{nanoid:qrt}=Lye,{justErrorsLogger:Krt,debugLogger:Yrt}=Pye;class Xc extends Error{constructor(){super(...arguments),this.isRestriction=!0}}typeof AggregateError>"u"&&(globalThis.AggregateError=class extends Error{constructor(e,t){super(t),this.errors=e}});class Xrt extends AggregateError{constructor(){super(...arguments),this.isRestriction=!0}}var xa=yi("plugins"),M6=yi("storeUnsubscribe"),of=yi("emitter"),X1=yi("preProcessors"),Q1=yi("uploaders"),af=yi("postProcessors"),N6=yi("checkRestrictions"),aV=yi("checkMinNumberOfFiles"),F6=yi("checkRequiredMetaFieldsOnFile"),lV=yi("checkRequiredMetaFields"),Ii=yi("showOrLogErrorAndThrow"),R6=yi("assertNewUploadAllowed"),I6=yi("checkAndCreateFileStateObject"),B6=yi("startIfAutoProceed"),sV=yi("addListeners"),qu=yi("updateOnlineStatus"),lf=yi("createUpload"),uV=yi("getUpload"),J1=yi("removeUpload"),sf=yi("runUpload");jye=Symbol.for("uppy test: getPlugins"),Vye=Symbol.for("uppy test: createUpload");class zye{constructor(t){Object.defineProperty(this,sf,{value:uot}),Object.defineProperty(this,J1,{value:sot}),Object.defineProperty(this,uV,{value:lot}),Object.defineProperty(this,lf,{value:aot}),Object.defineProperty(this,sV,{value:iot}),Object.defineProperty(this,B6,{value:oot}),Object.defineProperty(this,I6,{value:rot}),Object.defineProperty(this,R6,{value:not}),Object.defineProperty(this,Ii,{value:tot}),Object.defineProperty(this,lV,{value:eot}),Object.defineProperty(this,F6,{value:Zrt}),Object.defineProperty(this,aV,{value:Jrt}),Object.defineProperty(this,N6,{value:Qrt}),Object.defineProperty(this,xa,{writable:!0,value:Object.create(null)}),Object.defineProperty(this,M6,{writable:!0,value:void 0}),Object.defineProperty(this,of,{writable:!0,value:Oye()}),Object.defineProperty(this,X1,{writable:!0,value:new Set}),Object.defineProperty(this,Q1,{writable:!0,value:new Set}),Object.defineProperty(this,af,{writable:!0,value:new Set}),Object.defineProperty(this,qu,{writable:!0,value:this.updateOnlineStatus.bind(this)}),this.defaultLocale=Wrt;const n={id:"uppy",autoProceed:!1,allowMultipleUploads:!0,allowMultipleUploadBatches:!0,debug:!1,restrictions:{maxFileSize:null,minFileSize:null,maxTotalFileSize:null,maxNumberOfFiles:null,minNumberOfFiles:null,allowedFileTypes:null,requiredMetaFields:[]},meta:{},onBeforeFileAdded:r=>r,onBeforeUpload:r=>r,store:new Fye,logger:Krt,infoTimeout:5e3};if(this.opts={...n,...t,restrictions:{...n.restrictions,...t&&t.restrictions}},t&&t.logger&&t.debug?this.log("You are using a custom `logger`, but also set `debug: true`, which uses built-in logger to output logs to console. Ignoring `debug: true` and using your custom `logger`.","warning"):t&&t.debug&&(this.opts.logger=Yrt),this.log(`Using Core v${this.constructor.VERSION}`),this.opts.restrictions.allowedFileTypes&&this.opts.restrictions.allowedFileTypes!==null&&!Array.isArray(this.opts.restrictions.allowedFileTypes))throw new TypeError("`restrictions.allowedFileTypes` must be an array");this.i18nInit(),this.calculateProgress=Y1(this.calculateProgress.bind(this),500,{leading:!0,trailing:!0}),this.store=this.opts.store,this.setState({plugins:{},files:{},currentUploads:{},allowNewUpload:!0,capabilities:{uploadProgress:Urt(),individualCancellation:!0,resumableUploads:!1},totalProgress:0,meta:{...this.opts.meta},info:[],recoveredState:null}),un(this,M6)[M6]=this.store.subscribe((r,o,i)=>{this.emit("state-update",r,o,i),this.updateAll(o)}),this.opts.debug&&typeof window<"u"&&(window[this.opts.id]=this),un(this,sV)[sV]()}emit(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];un(this,of)[of].emit(t,...r)}on(t,n){return un(this,of)[of].on(t,n),this}once(t,n){return un(this,of)[of].once(t,n),this}off(t,n){return un(this,of)[of].off(t,n),this}updateAll(t){this.iteratePlugins(n=>{n.update(t)})}setState(t){this.store.setState(t)}getState(){return this.store.getState()}get state(){return this.getState()}setFileState(t,n){if(!this.getState().files[t])throw new Error(`Can\u2019t set state for ${t} (the file could have been removed)`);this.setState({files:{...this.getState().files,[t]:{...this.getState().files[t],...n}}})}i18nInit(){const t=new Dye([this.defaultLocale,this.opts.locale]);this.i18n=t.translate.bind(t),this.i18nArray=t.translateArray.bind(t),this.locale=t.locale}setOptions(t){this.opts={...this.opts,...t,restrictions:{...this.opts.restrictions,...t&&t.restrictions}},t.meta&&this.setMeta(t.meta),this.i18nInit(),t.locale&&this.iteratePlugins(n=>{n.setOptions()}),this.setState()}resetProgress(){const t={percentage:0,bytesUploaded:0,uploadComplete:!1,uploadStarted:null},n={...this.getState().files},r={};Object.keys(n).forEach(o=>{const i={...n[o]};i.progress={...i.progress,...t},r[o]=i}),this.setState({files:r,totalProgress:0}),this.emit("reset-progress")}addPreProcessor(t){un(this,X1)[X1].add(t)}removePreProcessor(t){return un(this,X1)[X1].delete(t)}addPostProcessor(t){un(this,af)[af].add(t)}removePostProcessor(t){return un(this,af)[af].delete(t)}addUploader(t){un(this,Q1)[Q1].add(t)}removeUploader(t){return un(this,Q1)[Q1].delete(t)}setMeta(t){const n={...this.getState().meta,...t},r={...this.getState().files};Object.keys(r).forEach(o=>{r[o]={...r[o],meta:{...r[o].meta,...t}}}),this.log("Adding metadata:"),this.log(t),this.setState({meta:n,files:r})}setFileMeta(t,n){const r={...this.getState().files};if(!r[t])return void this.log("Was trying to set metadata for a file that has been removed: ",t);const o={...r[t].meta,...n};r[t]={...r[t],meta:o},this.setState({files:r})}getFile(t){return this.getState().files[t]}getFiles(){const{files:t}=this.getState();return Object.values(t)}getObjectOfFilesPerState(){const{files:t,totalProgress:n,error:r}=this.getState(),o=Object.values(t),i=o.filter(m=>{let{progress:v}=m;return!v.uploadComplete&&v.uploadStarted}),a=o.filter(m=>!m.progress.uploadStarted),l=o.filter(m=>m.progress.uploadStarted||m.progress.preprocess||m.progress.postprocess),s=o.filter(m=>m.progress.uploadStarted),u=o.filter(m=>m.isPaused),c=o.filter(m=>m.progress.uploadComplete),d=o.filter(m=>m.error),f=i.filter(m=>!m.isPaused),p=o.filter(m=>m.progress.preprocess||m.progress.postprocess);return{newFiles:a,startedFiles:l,uploadStartedFiles:s,pausedFiles:u,completeFiles:c,erroredFiles:d,inProgressFiles:i,inProgressNotPausedFiles:f,processingFiles:p,isUploadStarted:s.length>0,isAllComplete:n===100&&c.length===o.length&&p.length===0,isAllErrored:!!r&&d.length===o.length,isAllPaused:i.length!==0&&u.length===i.length,isUploadInProgress:i.length>0,isSomeGhost:o.some(m=>m.isGhost)}}validateRestrictions(t,n){try{return un(this,N6)[N6](t,n),{result:!0}}catch(r){return{result:!1,reason:r.message}}}checkIfFileAlreadyExists(t){const{files:n}=this.getState();return!(!n[t]||n[t].isGhost)}addFile(t){un(this,R6)[R6](t);const{files:n}=this.getState();let r=un(this,I6)[I6](n,t);return n[r.id]&&n[r.id].isGhost&&(r={...n[r.id],data:t.data,isGhost:!1},this.log(`Replaced the blob in the restored ghost file: ${r.name}, ${r.id}`)),this.setState({files:{...n,[r.id]:r}}),this.emit("file-added",r),this.emit("files-added",[r]),this.log(`Added file: ${r.name}, ${r.id}, mime type: ${r.type}`),un(this,B6)[B6](),r.id}addFiles(t){un(this,R6)[R6]();const n={...this.getState().files},r=[],o=[];for(let i=0;i<t.length;i++)try{let a=un(this,I6)[I6](n,t[i]);n[a.id]&&n[a.id].isGhost&&(a={...n[a.id],data:t[i].data,isGhost:!1},this.log(`Replaced blob in a ghost file: ${a.name}, ${a.id}`)),n[a.id]=a,r.push(a)}catch(a){a.isRestriction||o.push(a)}if(this.setState({files:n}),r.forEach(i=>{this.emit("file-added",i)}),this.emit("files-added",r),r.length>5?this.log(`Added batch of ${r.length} files`):Object.keys(r).forEach(i=>{this.log(`Added file: ${r[i].name}
| id: ${r[i].id}
| type: ${r[i].type}`)}),r.length>0&&un(this,B6)[B6](),o.length>0){let i=`Multiple errors occurred while adding files:
| `;if(o.forEach(a=>{i+=`
| * ${a.message}`}),this.info({message:this.i18n("addBulkFilesFailed",{smart_count:o.length}),details:i},"error",this.opts.infoTimeout),typeof AggregateError=="function")throw new AggregateError(o,i);{const a=new Error(i);throw a.errors=o,a}}}removeFiles(t,n){const{files:r,currentUploads:o}=this.getState(),i={...r},a={...o},l=Object.create(null);function s(d){return l[d]===void 0}t.forEach(d=>{r[d]&&(l[d]=r[d],delete i[d])}),Object.keys(a).forEach(d=>{const f=o[d].fileIDs.filter(s);f.length!==0?a[d]={...o[d],fileIDs:f}:delete a[d]});const u={currentUploads:a,files:i};Object.keys(i).length===0&&(u.allowNewUpload=!0,u.error=null,u.recoveredState=null),this.setState(u),this.calculateTotalProgress();const c=Object.keys(l);c.forEach(d=>{this.emit("file-removed",l[d],n)}),c.length>5?this.log(`Removed ${c.length} files`):this.log(`Removed files: ${c.join(", ")}`)}removeFile(t,n){n===void 0&&(n=null),this.removeFiles([t],n)}pauseResume(t){if(!this.getState().capabilities.resumableUploads||this.getFile(t).uploadComplete)return;const n=!this.getFile(t).isPaused;return this.setFileState(t,{isPaused:n}),this.emit("upload-pause",t,n),n}pauseAll(){const t={...this.getState().files};Object.keys(t).filter(n=>!t[n].progress.uploadComplete&&t[n].progress.uploadStarted).forEach(n=>{const r={...t[n],isPaused:!0};t[n]=r}),this.setState({files:t}),this.emit("pause-all")}resumeAll(){const t={...this.getState().files};Object.keys(t).filter(n=>!t[n].progress.uploadComplete&&t[n].progress.uploadStarted).forEach(n=>{const r={...t[n],isPaused:!1,error:null};t[n]=r}),this.setState({files:t}),this.emit("resume-all")}retryAll(){const t={...this.getState().files},n=Object.keys(t).filter(o=>t[o].error);if(n.forEach(o=>{const i={...t[o],isPaused:!1,error:null};t[o]=i}),this.setState({files:t,error:null}),this.emit("retry-all",n),n.length===0)return Promise.resolve({successful:[],failed:[]});const r=un(this,lf)[lf](n,{forceAllowNewUpload:!0});return un(this,sf)[sf](r)}cancelAll(){this.emit("cancel-all");const{files:t}=this.getState(),n=Object.keys(t);n.length&&this.removeFiles(n,"cancel-all"),this.setState({totalProgress:0,error:null,recoveredState:null})}retryUpload(t){this.setFileState(t,{error:null,isPaused:!1}),this.emit("upload-retry",t);const n=un(this,lf)[lf]([t],{forceAllowNewUpload:!0});return un(this,sf)[sf](n)}reset(){this.cancelAll()}logout(){this.iteratePlugins(t=>{t.provider&&t.provider.logout&&t.provider.logout()})}calculateProgress(t,n){if(!this.getFile(t.id))return void this.log(`Not setting progress for a file that has been removed: ${t.id}`);const r=Number.isFinite(n.bytesTotal)&&n.bytesTotal>0;this.setFileState(t.id,{progress:{...this.getFile(t.id).progress,bytesUploaded:n.bytesUploaded,bytesTotal:n.bytesTotal,percentage:r?Math.round(n.bytesUploaded/n.bytesTotal*100):0}}),this.calculateTotalProgress()}calculateTotalProgress(){const t=this.getFiles().filter(s=>s.progress.uploadStarted||s.progress.preprocess||s.progress.postprocess);if(t.length===0)return this.emit("progress",0),void this.setState({totalProgress:0});const n=t.filter(s=>s.progress.bytesTotal!=null),r=t.filter(s=>s.progress.bytesTotal==null);if(n.length===0){const s=100*t.length,u=r.reduce((d,f)=>d+f.progress.percentage,0),c=Math.round(u/s*100);return void this.setState({totalProgress:c})}let o=n.reduce((s,u)=>s+u.progress.bytesTotal,0);const i=o/n.length;o+=i*r.length;let a=0;n.forEach(s=>{a+=s.progress.bytesUploaded}),r.forEach(s=>{a+=i*(s.progress.percentage||0)/100});let l=o===0?0:Math.round(a/o*100);l>100&&(l=100),this.setState({totalProgress:l}),this.emit("progress",l)}updateOnlineStatus(){window.navigator.onLine===void 0||window.navigator.onLine?(this.emit("is-online"),this.wasOffline&&(this.emit("back-online"),this.info(this.i18n("connectedToInternet"),"success",3e3),this.wasOffline=!1)):(this.emit("is-offline"),this.info(this.i18n("noInternetConnection"),"error",0),this.wasOffline=!0)}getID(){return this.opts.id}use(t,n){if(typeof t!="function")throw new TypeError(`Expected a plugin class, but got ${t===null?"null":typeof t}. Please verify that the plugin was imported and spelled correctly.`);const r=new t(this,n),o=r.id;if(!o)throw new Error("Your plugin must have an id");if(!r.type)throw new Error("Your plugin must have a type");const i=this.getPlugin(o);if(i){const a=`Already found a plugin named '${i.id}'. Tried to use: '${o}'.
| Uppy plugins must have unique \`id\` options. See https://uppy.io/docs/plugins/#id.`;throw new Error(a)}return t.VERSION&&this.log(`Using ${o} v${t.VERSION}`),r.type in un(this,xa)[xa]?un(this,xa)[xa][r.type].push(r):un(this,xa)[xa][r.type]=[r],r.install(),this}getPlugin(t){for(const n of Object.values(un(this,xa)[xa])){const r=n.find(o=>o.id===t);if(r!=null)return r}}[jye](t){return un(this,xa)[xa][t]}iteratePlugins(t){Object.values(un(this,xa)[xa]).flat(1).forEach(t)}removePlugin(t){this.log(`Removing plugin ${t.id}`),this.emit("plugin-remove",t),t.uninstall&&t.uninstall();const n=un(this,xa)[xa][t.type],r=n.findIndex(i=>i.id===t.id);r!==-1&&n.splice(r,1);const o={plugins:{...this.getState().plugins,[t.id]:void 0}};this.setState(o)}close(){this.log(`Closing Uppy instance ${this.opts.id}: removing all files and uninstalling plugins`),this.reset(),un(this,M6)[M6](),this.iteratePlugins(t=>{this.removePlugin(t)}),typeof window<"u"&&window.removeEventListener&&(window.removeEventListener("online",un(this,qu)[qu]),window.removeEventListener("offline",un(this,qu)[qu]))}hideInfo(){const{info:t}=this.getState();this.setState({info:t.slice(1)}),this.emit("info-hidden")}info(t,n,r){n===void 0&&(n="info"),r===void 0&&(r=3e3);const o=typeof t=="object";this.setState({info:[...this.getState().info,{type:n,message:o?t.message:t,details:o?t.details:null}]}),setTimeout(()=>this.hideInfo(),r),this.emit("info-visible")}log(t,n){const{logger:r}=this.opts;switch(n){case"error":r.error(t);break;case"warning":r.warn(t);break;default:r.debug(t)}}restore(t){return this.log(`Core: attempting to restore upload "${t}"`),this.getState().currentUploads[t]?un(this,sf)[sf](t):(un(this,J1)[J1](t),Promise.reject(new Error("Nonexistent upload")))}[Vye](){return un(this,lf)[lf](...arguments)}addResultData(t,n){if(!un(this,uV)[uV](t))return void this.log(`Not setting result for an upload that has been removed: ${t}`);const{currentUploads:r}=this.getState(),o={...r[t],result:{...r[t].result,...n}};this.setState({currentUploads:{...r,[t]:o}})}upload(){var t;(t=un(this,xa)[xa].uploader)!=null&&t.length||this.log("No uploader type plugins are used","warning");let{files:n}=this.getState();const r=this.opts.onBeforeUpload(n);return r===!1?Promise.reject(new Error("Not starting the upload because onBeforeUpload returned false")):(r&&typeof r=="object"&&(n=r,this.setState({files:n})),Promise.resolve().then(()=>{un(this,aV)[aV](n),un(this,lV)[lV](n)}).catch(o=>{un(this,Ii)[Ii](o)}).then(()=>{const{currentUploads:o}=this.getState(),i=Object.values(o).flatMap(s=>s.fileIDs),a=[];Object.keys(n).forEach(s=>{const u=this.getFile(s);u.progress.uploadStarted||i.indexOf(s)!==-1||a.push(u.id)});const l=un(this,lf)[lf](a);return un(this,sf)[sf](l)}).catch(o=>{un(this,Ii)[Ii](o,{showInformer:!1})}))}}function Qrt(e,t){t===void 0&&(t=this.getFiles());const{maxFileSize:n,minFileSize:r,maxTotalFileSize:o,maxNumberOfFiles:i,allowedFileTypes:a}=this.opts.restrictions;if(i&&t.length+1>i)throw new Xc(`${this.i18n("youCanOnlyUploadX",{smart_count:i})}`);if(a&&!a.some(l=>l.indexOf("/")>-1?!!e.type&&function(s,u){function c(d){var f=function(p,m){var v=new Nye(p,zrt||/[\/\.]/);return m!==void 0?v.match(m):v}(d,s);return f&&f.length>=2}return u?c(u.split(";")[0]):c}(e.type.replace(/;.*?$/,""),l):!(l[0]!=="."||!e.extension)&&e.extension.toLowerCase()===l.substr(1).toLowerCase())){const l=a.join(", ");throw new Xc(this.i18n("youCanOnlyUploadFileTypes",{types:l}))}if(o&&e.size!=null){let l=0;if(l+=e.size,t.forEach(s=>{l+=s.size}),l>o)throw new Xc(this.i18n("exceedsSize",{size:rV(o),file:e.name}))}if(n&&e.size!=null&&e.size>n)throw new Xc(this.i18n("exceedsSize",{size:rV(n),file:e.name}));if(r&&e.size!=null&&e.size<r)throw new Xc(this.i18n("inferiorSize",{size:rV(r)}))}function Jrt(e){const{minNumberOfFiles:t}=this.opts.restrictions;if(Object.keys(e).length<t)throw new Xc(`${this.i18n("youHaveToAtLeastSelectX",{smart_count:t})}`)}function Zrt(e){const{requiredMetaFields:t}=this.opts.restrictions,{hasOwnProperty:n}=Object.prototype,r=[],o=[];for(let i=0;i<t.length;i++)if(!n.call(e.meta,t[i])||e.meta[t[i]]===""){const a=new Xc(`${this.i18n("missingRequiredMetaFieldOnFile",{fileName:e.name})}`);r.push(a),o.push(t[i]),un(this,Ii)[Ii](a,{file:e,showInformer:!1,throwErr:!1})}return this.setFileState(e.id,{missingRequiredMetaFields:o}),r}function eot(e){const t=Object.keys(e).flatMap(n=>{const r=this.getFile(n);return un(this,F6)[F6](r)});if(t.length)throw new Xrt(t,`${this.i18n("missingRequiredMetaField")}`)}function tot(e,t){let{showInformer:n=!0,file:r=null,throwErr:o=!0}=t===void 0?{}:t;const i=typeof e=="object"?e.message:e,a=typeof e=="object"&&e.details?e.details:"";let l=i;if(a&&(l+=` ${a}`),e.isRestriction?(this.log(l),this.emit("restriction-failed",r,e)):this.log(l,"error"),n&&this.info({message:i,details:a},"error",this.opts.infoTimeout),o)throw typeof e=="object"?e:new Error(e)}function not(e){const{allowNewUpload:t}=this.getState();t===!1&&un(this,Ii)[Ii](new Xc(this.i18n("noMoreFilesAllowed")),{file:e})}function rot(e,t){const n=function(d){var f;if(d.type)return d.type;const p=d.name?(f=Rye(d.name).extension)==null?void 0:f.toLowerCase():null;return p&&p in Iye?Iye[p]:"application/octet-stream"}(t),r=function(d,f){return f.name?f.name:d.split("/")[0]==="image"?`${d.split("/")[0]}.${d.split("/")[1]}`:"noname"}(n,t),o=Rye(r).extension,i=!!t.isRemote,a=function(d){let f="uppy";return typeof d.name=="string"&&(f+=`-${Bye(d.name.toLowerCase())}`),d.type!==void 0&&(f+=`-${d.type}`),d.meta&&typeof d.meta.relativePath=="string"&&(f+=`-${Bye(d.meta.relativePath.toLowerCase())}`),d.data.size!==void 0&&(f+=`-${d.data.size}`),d.data.lastModified!==void 0&&(f+=`-${d.data.lastModified}`),f}({...t,type:n});if(this.checkIfFileAlreadyExists(a)){const d=new Xc(this.i18n("noDuplicates",{fileName:r}));un(this,Ii)[Ii](d,{file:t})}const l=t.meta||{};l.name=r,l.type=n;const s=Number.isFinite(t.data.size)?t.data.size:null;let u={source:t.source||"",id:a,name:r,extension:o||"",meta:{...this.getState().meta,...l},type:n,data:t.data,progress:{percentage:0,bytesUploaded:0,bytesTotal:s,uploadComplete:!1,uploadStarted:null},size:s,isRemote:i,remote:t.remote||"",preview:t.preview};const c=this.opts.onBeforeFileAdded(u,e);c===!1?un(this,Ii)[Ii](new Xc("Cannot add the file because onBeforeFileAdded returned false."),{showInformer:!1,fileDescriptor:t}):typeof c=="object"&&c!==null&&(u=c);try{const d=Object.keys(e).map(f=>e[f]);un(this,N6)[N6](u,d)}catch(d){un(this,Ii)[Ii](d,{file:u})}return u}function oot(){this.opts.autoProceed&&!this.scheduledAutoProceed&&(this.scheduledAutoProceed=setTimeout(()=>{this.scheduledAutoProceed=null,this.upload().catch(e=>{e.isRestriction||this.log(e.stack||e.message||e)})},4))}function iot(){const e=(t,n,r)=>{let o=t.message||"Unknown error";t.details&&(o+=` ${t.details}`),this.setState({error:o}),n!=null&&n.id in this.getState().files&&this.setFileState(n.id,{error:o,response:r})};this.on("error",e),this.on("upload-error",(t,n,r)=>{if(e(n,t,r),typeof n=="object"&&n.message){const o=new Error(n.message);o.details=n.message,n.details&&(o.details+=` ${n.details}`),o.message=this.i18n("failedToUpload",{file:t.name}),un(this,Ii)[Ii](o,{throwErr:!1})}else un(this,Ii)[Ii](n,{throwErr:!1})}),this.on("upload",()=>{this.setState({error:null})}),this.on("upload-started",t=>{this.getFile(t.id)?this.setFileState(t.id,{progress:{uploadStarted:Date.now(),uploadComplete:!1,percentage:0,bytesUploaded:0,bytesTotal:t.size}}):this.log(`Not setting progress for a file that has been removed: ${t.id}`)}),this.on("upload-progress",this.calculateProgress),this.on("upload-success",(t,n)=>{if(!this.getFile(t.id))return void this.log(`Not setting progress for a file that has been removed: ${t.id}`);const r=this.getFile(t.id).progress;this.setFileState(t.id,{progress:{...r,postprocess:un(this,af)[af].size>0?{mode:"indeterminate"}:null,uploadComplete:!0,percentage:100,bytesUploaded:r.bytesTotal},response:n,uploadURL:n.uploadURL,isPaused:!1}),t.size==null&&this.setFileState(t.id,{size:n.bytesUploaded||r.bytesTotal}),this.calculateTotalProgress()}),this.on("preprocess-progress",(t,n)=>{this.getFile(t.id)?this.setFileState(t.id,{progress:{...this.getFile(t.id).progress,preprocess:n}}):this.log(`Not setting progress for a file that has been removed: ${t.id}`)}),this.on("preprocess-complete",t=>{if(!this.getFile(t.id))return void this.log(`Not setting progress for a file that has been removed: ${t.id}`);const n={...this.getState().files};n[t.id]={...n[t.id],progress:{...n[t.id].progress}},delete n[t.id].progress.preprocess,this.setState({files:n})}),this.on("postprocess-progress",(t,n)=>{this.getFile(t.id)?this.setFileState(t.id,{progress:{...this.getState().files[t.id].progress,postprocess:n}}):this.log(`Not setting progress for a file that has been removed: ${t.id}`)}),this.on("postprocess-complete",t=>{if(!this.getFile(t.id))return void this.log(`Not setting progress for a file that has been removed: ${t.id}`);const n={...this.getState().files};n[t.id]={...n[t.id],progress:{...n[t.id].progress}},delete n[t.id].progress.postprocess,this.setState({files:n})}),this.on("restored",()=>{this.calculateTotalProgress()}),this.on("dashboard:file-edit-complete",t=>{t&&un(this,F6)[F6](t)}),typeof window<"u"&&window.addEventListener&&(window.addEventListener("online",un(this,qu)[qu]),window.addEventListener("offline",un(this,qu)[qu]),setTimeout(un(this,qu)[qu],3e3))}function aot(e,t){t===void 0&&(t={});const{forceAllowNewUpload:n=!1}=t,{allowNewUpload:r,currentUploads:o}=this.getState();if(!r&&!n)throw new Error("Cannot create a new upload: already uploading.");const i=qrt();return this.emit("upload",{id:i,fileIDs:e}),this.setState({allowNewUpload:this.opts.allowMultipleUploadBatches!==!1&&this.opts.allowMultipleUploads!==!1,currentUploads:{...o,[i]:{fileIDs:e,step:0,result:{}}}}),i}function lot(e){const{currentUploads:t}=this.getState();return t[e]}function sot(e){const t={...this.getState().currentUploads};delete t[e],this.setState({currentUploads:t})}async function uot(e){let{currentUploads:t}=this.getState(),n=t[e];const r=n.step||0,o=[...un(this,X1)[X1],...un(this,Q1)[Q1],...un(this,af)[af]];try{for(let a=r;a<o.length&&n;a++){const l=o[a],s={...n,step:a};this.setState({currentUploads:{...t,[e]:s}}),await l(s.fileIDs,e),t=this.getState().currentUploads,n=t[e]}}catch(a){throw this.emit("error",a),un(this,J1)[J1](e),a}if(n){n.fileIDs.forEach(u=>{const c=this.getFile(u);c&&c.progress.postprocess&&this.emit("postprocess-complete",c)});const a=n.fileIDs.map(u=>this.getFile(u)),l=a.filter(u=>!u.error),s=a.filter(u=>u.error);await this.addResultData(e,{successful:l,failed:s,uploadID:e}),t=this.getState().currentUploads,n=t[e]}let i;return n&&(i=n.result,this.emit("complete",i),un(this,J1)[J1](e)),i==null&&this.log(`Not setting result for an upload that has been removed: ${e}`),i}zye.VERSION="2.1.3";var Hye=zye,cot=T1(function(e,t){var n,r,o,i,a,l,s,u,c={},d=[],f=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function p(z,$){for(var W in $)z[W]=$[W];return z}function m(z){var $=z.parentNode;$&&$.removeChild(z)}function v(z,$,W){var K,X,te,ne={};for(te in $)te=="key"?K=$[te]:te=="ref"?X=$[te]:ne[te]=$[te];if(arguments.length>2&&(ne.children=arguments.length>3?n.call(arguments,2):W),typeof z=="function"&&z.defaultProps!=null)for(te in z.defaultProps)ne[te]===void 0&&(ne[te]=z.defaultProps[te]);return g(z,ne,K,X,null)}function g(z,$,W,K,X){var te={type:z,props:$,key:W,ref:K,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:X??++o};return X==null&&r.vnode!=null&&r.vnode(te),te}function b(z){return z.children}function y(z,$){this.props=z,this.context=$}function w(z,$){if($==null)return z.__?w(z.__,z.__.__k.indexOf(z)+1):null;for(var W;$<z.__k.length;$++)if((W=z.__k[$])!=null&&W.__e!=null)return W.__e;return typeof z.type=="function"?w(z):null}function x(z){var $,W;if((z=z.__)!=null&&z.__c!=null){for(z.__e=z.__c.base=null,$=0;$<z.__k.length;$++)if((W=z.__k[$])!=null&&W.__e!=null){z.__e=z.__c.base=W.__e;break}return x(z)}}function _(z){(!z.__d&&(z.__d=!0)&&a.push(z)&&!E.__r++||s!==r.debounceRendering)&&((s=r.debounceRendering)||l)(E)}function E(){for(var z;E.__r=a.length;)z=a.sort(function($,W){return $.__v.__b-W.__v.__b}),a=[],z.some(function($){var W,K,X,te,ne,se;$.__d&&(ne=(te=(W=$).__v).__e,(se=W.__P)&&(K=[],(X=p({},te)).__v=te.__v+1,B(se,te,X,W.__n,se.ownerSVGElement!==void 0,te.__h!=null?[ne]:null,K,ne??w(te),te.__h),P(K,te),te.__e!=ne&&x(te)))})}function C(z,$,W,K,X,te,ne,se,le,J){var Z,ye,be,ve,Ae,Ce,_e,ke=K&&K.__k||d,Be=ke.length;for(W.__k=[],Z=0;Z<$.length;Z++)if((ve=W.__k[Z]=(ve=$[Z])==null||typeof ve=="boolean"?null:typeof ve=="string"||typeof ve=="number"||typeof ve=="bigint"?g(null,ve,null,null,ve):Array.isArray(ve)?g(b,{children:ve},null,null,null):ve.__b>0?g(ve.type,ve.props,ve.key,null,ve.__v):ve)!=null){if(ve.__=W,ve.__b=W.__b+1,(be=ke[Z])===null||be&&ve.key==be.key&&ve.type===be.type)ke[Z]=void 0;else for(ye=0;ye<Be;ye++){if((be=ke[ye])&&ve.key==be.key&&ve.type===be.type){ke[ye]=void 0;break}be=null}B(z,ve,be=be||c,X,te,ne,se,le,J),Ae=ve.__e,(ye=ve.ref)&&be.ref!=ye&&(_e||(_e=[]),be.ref&&_e.push(be.ref,null,ve),_e.push(ye,ve.__c||Ae,ve)),Ae!=null?(Ce==null&&(Ce=Ae),typeof ve.type=="function"&&ve.__k===be.__k?ve.__d=le=T(ve,le,z):le=k(z,ve,be,ke,Ae,le),typeof W.type=="function"&&(W.__d=le)):le&&be.__e==le&&le.parentNode!=z&&(le=w(be))}for(W.__e=Ce,Z=Be;Z--;)ke[Z]!=null&&(typeof W.type=="function"&&ke[Z].__e!=null&&ke[Z].__e==W.__d&&(W.__d=w(K,Z+1)),H(ke[Z],ke[Z]));if(_e)for(Z=0;Z<_e.length;Z++)L(_e[Z],_e[++Z],_e[++Z])}function T(z,$,W){for(var K,X=z.__k,te=0;X&&te<X.length;te++)(K=X[te])&&(K.__=z,$=typeof K.type=="function"?T(K,$,W):k(W,K,K,X,K.__e,$));return $}function k(z,$,W,K,X,te){var ne,se,le;if($.__d!==void 0)ne=$.__d,$.__d=void 0;else if(W==null||X!=te||X.parentNode==null)e:if(te==null||te.parentNode!==z)z.appendChild(X),ne=null;else{for(se=te,le=0;(se=se.nextSibling)&&le<K.length;le+=2)if(se==X)break e;z.insertBefore(X,te),ne=te}return ne!==void 0?ne:X.nextSibling}function I(z,$,W){$[0]==="-"?z.setProperty($,W):z[$]=W==null?"":typeof W!="number"||f.test($)?W:W+"px"}function O(z,$,W,K,X){var te;e:if($==="style")if(typeof W=="string")z.style.cssText=W;else{if(typeof K=="string"&&(z.style.cssText=K=""),K)for($ in K)W&&$ in W||I(z.style,$,"");if(W)for($ in W)K&&W[$]===K[$]||I(z.style,$,W[$])}else if($[0]==="o"&&$[1]==="n")te=$!==($=$.replace(/Capture$/,"")),$=$.toLowerCase()in z?$.toLowerCase().slice(2):$.slice(2),z.l||(z.l={}),z.l[$+te]=W,W?K||z.addEventListener($,te?N:F,te):z.removeEventListener($,te?N:F,te);else if($!=="dangerouslySetInnerHTML"){if(X)$=$.replace(/xlink[H:h]/,"h").replace(/sName$/,"s");else if($!=="href"&&$!=="list"&&$!=="form"&&$!=="tabIndex"&&$!=="download"&&$ in z)try{z[$]=W??"";break e}catch{}typeof W=="function"||(W!=null&&(W!==!1||$[0]==="a"&&$[1]==="r")?z.setAttribute($,W):z.removeAttribute($))}}function F(z){this.l[z.type+!1](r.event?r.event(z):z)}function N(z){this.l[z.type+!0](r.event?r.event(z):z)}function B(z,$,W,K,X,te,ne,se,le){var J,Z,ye,be,ve,Ae,Ce,_e,ke,Be,$e,rt=$.type;if($.constructor!==void 0)return null;W.__h!=null&&(le=W.__h,se=$.__e=W.__e,$.__h=null,te=[se]),(J=r.__b)&&J($);try{e:if(typeof rt=="function"){if(_e=$.props,ke=(J=rt.contextType)&&K[J.__c],Be=J?ke?ke.props.value:J.__:K,W.__c?Ce=(Z=$.__c=W.__c).__=Z.__E:("prototype"in rt&&rt.prototype.render?$.__c=Z=new rt(_e,Be):($.__c=Z=new y(_e,Be),Z.constructor=rt,Z.render=U),ke&&ke.sub(Z),Z.props=_e,Z.state||(Z.state={}),Z.context=Be,Z.__n=K,ye=Z.__d=!0,Z.__h=[]),Z.__s==null&&(Z.__s=Z.state),rt.getDerivedStateFromProps!=null&&(Z.__s==Z.state&&(Z.__s=p({},Z.__s)),p(Z.__s,rt.getDerivedStateFromProps(_e,Z.__s))),be=Z.props,ve=Z.state,ye)rt.getDerivedStateFromProps==null&&Z.componentWillMount!=null&&Z.componentWillMount(),Z.componentDidMount!=null&&Z.__h.push(Z.componentDidMount);else{if(rt.getDerivedStateFromProps==null&&_e!==be&&Z.componentWillReceiveProps!=null&&Z.componentWillReceiveProps(_e,Be),!Z.__e&&Z.shouldComponentUpdate!=null&&Z.shouldComponentUpdate(_e,Z.__s,Be)===!1||$.__v===W.__v){Z.props=_e,Z.state=Z.__s,$.__v!==W.__v&&(Z.__d=!1),Z.__v=$,$.__e=W.__e,$.__k=W.__k,$.__k.forEach(function(ge){ge&&(ge.__=$)}),Z.__h.length&&ne.push(Z);break e}Z.componentWillUpdate!=null&&Z.componentWillUpdate(_e,Z.__s,Be),Z.componentDidUpdate!=null&&Z.__h.push(function(){Z.componentDidUpdate(be,ve,Ae)})}Z.context=Be,Z.props=_e,Z.state=Z.__s,(J=r.__r)&&J($),Z.__d=!1,Z.__v=$,Z.__P=z,J=Z.render(Z.props,Z.state,Z.context),Z.state=Z.__s,Z.getChildContext!=null&&(K=p(p({},K),Z.getChildContext())),ye||Z.getSnapshotBeforeUpdate==null||(Ae=Z.getSnapshotBeforeUpdate(be,ve)),$e=J!=null&&J.type===b&&J.key==null?J.props.children:J,C(z,Array.isArray($e)?$e:[$e],$,W,K,X,te,ne,se,le),Z.base=$.__e,$.__h=null,Z.__h.length&&ne.push(Z),Ce&&(Z.__E=Z.__=null),Z.__e=!1}else te==null&&$.__v===W.__v?($.__k=W.__k,$.__e=W.__e):$.__e=V(W.__e,$,W,K,X,te,ne,le);(J=r.diffed)&&J($)}catch(ge){$.__v=null,(le||te!=null)&&($.__e=se,$.__h=!!le,te[te.indexOf(se)]=null),r.__e(ge,$,W)}}function P(z,$){r.__c&&r.__c($,z),z.some(function(W){try{z=W.__h,W.__h=[],z.some(function(K){K.call(W)})}catch(K){r.__e(K,W.__v)}})}function V(z,$,W,K,X,te,ne,se){var le,J,Z,ye=W.props,be=$.props,ve=$.type,Ae=0;if(ve==="svg"&&(X=!0),te!=null){for(;Ae<te.length;Ae++)if((le=te[Ae])&&"setAttribute"in le==!!ve&&(ve?le.localName===ve:le.nodeType===3)){z=le,te[Ae]=null;break}}if(z==null){if(ve===null)return document.createTextNode(be);z=X?document.createElementNS("http://www.w3.org/2000/svg",ve):document.createElement(ve,be.is&&be),te=null,se=!1}if(ve===null)ye===be||se&&z.data===be||(z.data=be);else{if(te=te&&n.call(z.childNodes),J=(ye=W.props||c).dangerouslySetInnerHTML,Z=be.dangerouslySetInnerHTML,!se){if(te!=null)for(ye={},Ae=0;Ae<z.attributes.length;Ae++)ye[z.attributes[Ae].name]=z.attributes[Ae].value;(Z||J)&&(Z&&(J&&Z.__html==J.__html||Z.__html===z.innerHTML)||(z.innerHTML=Z&&Z.__html||""))}if(function(Ce,_e,ke,Be,$e){var rt;for(rt in ke)rt==="children"||rt==="key"||rt in _e||O(Ce,rt,null,ke[rt],Be);for(rt in _e)$e&&typeof _e[rt]!="function"||rt==="children"||rt==="key"||rt==="value"||rt==="checked"||ke[rt]===_e[rt]||O(Ce,rt,_e[rt],ke[rt],Be)}(z,be,ye,X,se),Z)$.__k=[];else if(Ae=$.props.children,C(z,Array.isArray(Ae)?Ae:[Ae],$,W,K,X&&ve!=="foreignObject",te,ne,te?te[0]:W.__k&&w(W,0),se),te!=null)for(Ae=te.length;Ae--;)te[Ae]!=null&&m(te[Ae]);se||("value"in be&&(Ae=be.value)!==void 0&&(Ae!==ye.value||Ae!==z.value||ve==="progress"&&!Ae)&&O(z,"value",Ae,ye.value,!1),"checked"in be&&(Ae=be.checked)!==void 0&&Ae!==z.checked&&O(z,"checked",Ae,ye.checked,!1))}return z}function L(z,$,W){try{typeof z=="function"?z($):z.current=$}catch(K){r.__e(K,W)}}function H(z,$,W){var K,X;if(r.unmount&&r.unmount(z),(K=z.ref)&&(K.current&&K.current!==z.__e||L(K,null,$)),(K=z.__c)!=null){if(K.componentWillUnmount)try{K.componentWillUnmount()}catch(te){r.__e(te,$)}K.base=K.__P=null}if(K=z.__k)for(X=0;X<K.length;X++)K[X]&&H(K[X],$,typeof z.type!="function");W||z.__e==null||m(z.__e),z.__e=z.__d=void 0}function U(z,$,W){return this.constructor(z,W)}function G(z,$,W){var K,X,te;r.__&&r.__(z,$),X=(K=typeof W=="function")?null:W&&W.__k||$.__k,te=[],B($,z=(!K&&W||$).__k=v(b,null,[z]),X||c,c,$.ownerSVGElement!==void 0,!K&&W?[W]:X?null:$.firstChild?n.call($.childNodes):null,te,!K&&W?W:X?X.__e:$.firstChild,K),P(te,z)}n=d.slice,r={__e:function(z,$){for(var W,K,X;$=$.__;)if((W=$.__c)&&!W.__)try{if((K=W.constructor)&&K.getDerivedStateFromError!=null&&(W.setState(K.getDerivedStateFromError(z)),X=W.__d),W.componentDidCatch!=null&&(W.componentDidCatch(z),X=W.__d),X)return W.__E=W}catch(te){z=te}throw z}},o=0,i=function(z){return z!=null&&z.constructor===void 0},y.prototype.setState=function(z,$){var W;W=this.__s!=null&&this.__s!==this.state?this.__s:this.__s=p({},this.state),typeof z=="function"&&(z=z(p({},W),this.props)),z&&p(W,z),z!=null&&this.__v&&($&&this.__h.push($),_(this))},y.prototype.forceUpdate=function(z){this.__v&&(this.__e=!0,z&&this.__h.push(z),_(this))},y.prototype.render=b,a=[],l=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,E.__r=0,u=0,t.Component=y,t.Fragment=b,t.cloneElement=function(z,$,W){var K,X,te,ne=p({},z.props);for(te in $)te=="key"?K=$[te]:te=="ref"?X=$[te]:ne[te]=$[te];return arguments.length>2&&(ne.children=arguments.length>3?n.call(arguments,2):W),g(z.type,ne,K||z.key,X||z.ref,null)},t.createContext=function(z,$){var W={__c:$="__cC"+u++,__:z,Consumer:function(K,X){return K.children(X)},Provider:function(K){var X,te;return this.getChildContext||(X=[],(te={})[$]=this,this.getChildContext=function(){return te},this.shouldComponentUpdate=function(ne){this.props.value!==ne.value&&X.some(_)},this.sub=function(ne){X.push(ne);var se=ne.componentWillUnmount;ne.componentWillUnmount=function(){X.splice(X.indexOf(ne),1),se&&se.call(ne)}}),K.children}};return W.Provider.__=W.Consumer.contextType=W},t.createElement=v,t.createRef=function(){return{current:null}},t.h=v,t.hydrate=function z($,W){G($,W,z)},t.isValidElement=i,t.options=r,t.render=G,t.toChildArray=function z($,W){return W=W||[],$==null||typeof $=="boolean"||(Array.isArray($)?$.some(function(K){z(K,W)}):W.push($)),W}}),cV=class{constructor(e,t){t===void 0&&(t={}),this.uppy=e,this.opts=t}getPluginState(){const{plugins:e}=this.uppy.getState();return e[this.id]||{}}setPluginState(e){const{plugins:t}=this.uppy.getState();this.uppy.setState({plugins:{...t,[this.id]:{...t[this.id],...e}}})}setOptions(e){this.opts={...this.opts,...e},this.setPluginState(),this.i18nInit()}i18nInit(){const e=new Dye([this.defaultLocale,this.uppy.locale,this.opts.locale]);this.i18n=e.translate.bind(e),this.i18nArray=e.translateArray.bind(e),this.setPluginState()}addTarget(){throw new Error("Extend the addTarget method to add your plugin to another plugin's target")}install(){}uninstall(){}render(){throw new Error("Extend the render method to add your plugin to a DOM element")}update(){}afterUpdate(){}};function $ye(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw new TypeError("attempted to use private field on non-instance");return e}var dot=0;const{render:Uye}=cot;var P6=function(e){return"__private_"+dot+++"_"+e}("updateUI");class dV extends cV{constructor(){super(...arguments),Object.defineProperty(this,P6,{writable:!0,value:void 0})}mount(t,n){const r=n.id,o=function(l,s){return s===void 0&&(s=document),typeof l=="string"?s.querySelector(l):((u=l)==null?void 0:u.nodeType)===Node.ELEMENT_NODE?l:null;var u}(t);if(o){this.isTargetDOMEl=!0;const l=document.createDocumentFragment();return $ye(this,P6)[P6]=function(s){let u=null,c=null;return function(){for(var d=arguments.length,f=new Array(d),p=0;p<d;p++)f[p]=arguments[p];return c=f,u||(u=Promise.resolve().then(()=>(u=null,s(...c)))),u}}(s=>{this.uppy.getPlugin(this.id)&&(Uye(this.render(s),l),this.afterUpdate())}),this.uppy.log(`Installing ${r} to a DOM element '${t}'`),this.opts.replaceTargetContent&&(o.innerHTML=""),Uye(this.render(this.uppy.getState()),l),this.el=l.firstElementChild,o.appendChild(l),this.onMount(),this.el}let i;if(typeof t=="object"&&t instanceof dV)i=t;else if(typeof t=="function"){const l=t;this.uppy.iteratePlugins(s=>{if(s instanceof l)return i=s,!1})}if(i)return this.uppy.log(`Installing ${r} to ${i.id}`),this.parent=i,this.el=i.addTarget(n),this.onMount(),this.el;this.uppy.log(`Not installing ${r}`);let a=`Invalid target option given to ${r}.`;throw a+=typeof t=="function"?" The given target is not a Plugin class. Please check that you're not specifying a React Component instead of a plugin. If you are using @uppy/* packages directly, make sure you have only 1 version of @uppy/core installed: run `npm ls @uppy/core` on the command line and verify that all the versions match and are deduped correctly.":"If you meant to target an HTML element, please make sure that the element exists. Check that the <script> tag initializing Uppy is right before the closing </body> tag at the end of the page. (see https://github.com/transloadit/uppy/issues/1042)\n\nIf you meant to target a plugin, please confirm that your `import` statements or `require` calls are correct.",new Error(a)}update(t){var n,r;this.el!=null&&((n=(r=$ye(this,P6))[P6])==null||n.call(r,t))}unmount(){var t;this.isTargetDOMEl&&((t=this.el)==null||t.remove()),this.onUnmount()}onMount(){}onUnmount(){}}var fot=dV;const{debugLogger:pot}=Pye;var L6=Hye,hot=Hye,vot=fot,mot=cV,got=pot;L6.Uppy=hot,L6.UIPlugin=vot,L6.BasePlugin=mot,L6.debugLogger=got;class yot extends Error{constructor(t,n){n===void 0&&(n=null),super("This looks like a network error, the endpoint might be blocked by an internet provider or a firewall."),this.cause=t,this.isNetworkError=!0,this.request=n}}var fV=yot,pV=function(){return fetch(...arguments).catch(e=>{throw e.name==="AbortError"?e:new fV(e)})};class bot extends Error{constructor(){super("Authorization required"),this.name="AuthError",this.isAuthError=!0}}var KE,Up,Qc,Wp,Wye,Aot=bot;function Jc(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw new TypeError("attempted to use private field on non-instance");return e}var wot=0;function hV(e){return"__private_"+wot+++"_"+e}async function vV(e){if(e.status===401)throw new Aot;const t=e.json();if(e.status<200||e.status>300){let n=`Failed request with status: ${e.status}. ${e.statusText}`;try{const r=await t;n=r.message?`${n} message: ${r.message}`:n,n=r.requestId?`${n} request-Id: ${r.requestId}`:n}finally{throw new Error(n)}}return t}var mV=(Up=hV("getPostResponseFunc"),Qc=hV("getUrl"),Wp=hV("errorHandler"),Wye=KE=class qOe{constructor(t,n){Object.defineProperty(this,Wp,{value:_ot}),Object.defineProperty(this,Qc,{value:xot}),Object.defineProperty(this,Up,{writable:!0,value:r=>o=>r?o:this.onReceiveResponse(o)}),this.uppy=t,this.opts=n,this.onReceiveResponse=this.onReceiveResponse.bind(this),this.allowedHeaders=["accept","content-type","uppy-auth-token"],this.preflightDone=!1}get hostname(){const{companion:t}=this.uppy.getState(),n=this.opts.companionUrl;return(t&&t[n]?t[n]:n).replace(/\/$/,"")}headers(){const t=this.opts.companionHeaders||{};return Promise.resolve({...qOe.defaultHeaders,...t})}onReceiveResponse(t){const n=this.uppy.getState().companion||{},r=this.opts.companionUrl,{headers:o}=t;return o.has("i-am")&&o.get("i-am")!==n[r]&&this.uppy.setState({companion:{...n,[r]:o.get("i-am")}}),t}preflight(t){return this.preflightDone?Promise.resolve(this.allowedHeaders.slice()):fetch(Jc(this,Qc)[Qc](t),{method:"OPTIONS"}).then(n=>(n.headers.has("access-control-allow-headers")&&(this.allowedHeaders=n.headers.get("access-control-allow-headers").split(",").map(r=>r.trim().toLowerCase())),this.preflightDone=!0,this.allowedHeaders.slice())).catch(n=>(this.uppy.log(`[CompanionClient] unable to make preflight request ${n}`,"warning"),this.preflightDone=!0,this.allowedHeaders.slice()))}preflightAndHeaders(t){return Promise.all([this.preflight(t),this.headers()]).then(n=>{let[r,o]=n;return Object.keys(o).forEach(i=>{r.includes(i.toLowerCase())||(this.uppy.log(`[CompanionClient] excluding disallowed header ${i}`),delete o[i])}),o})}get(t,n){return this.preflightAndHeaders(t).then(r=>pV(Jc(this,Qc)[Qc](t),{method:"get",headers:r,credentials:this.opts.companionCookiesRule||"same-origin"})).then(Jc(this,Up)[Up](n)).then(vV).catch(Jc(this,Wp)[Wp]("get",t))}post(t,n,r){const o="post";return this.preflightAndHeaders(t).then(i=>pV(Jc(this,Qc)[Qc](t),{method:o,headers:i,credentials:this.opts.companionCookiesRule||"same-origin",body:JSON.stringify(n)})).then(Jc(this,Up)[Up](r)).then(vV).catch(Jc(this,Wp)[Wp](o,t))}delete(t,n,r){const o="delete";return this.preflightAndHeaders(t).then(i=>pV(`${this.hostname}/${t}`,{method:o,headers:i,credentials:this.opts.companionCookiesRule||"same-origin",body:n?JSON.stringify(n):null})).then(Jc(this,Up)[Up](r)).then(vV).catch(Jc(this,Wp)[Wp](o,t))}},KE.VERSION="2.0.4",KE.defaultHeaders={Accept:"application/json","Content-Type":"application/json","Uppy-Versions":`@uppy/companion-client=${KE.VERSION}`},Wye);function xot(e){return/^(https?:|)\/\//.test(e)?e:`${this.hostname}/${e}`}function _ot(e,t){return n=>{var r;if((r=n)==null||!r.isAuthError){const o=new Error(`Could not ${e} ${Jc(this,Qc)[Qc](t)}`);o.cause=n,n=o}return Promise.reject(n)}}var Zc,Gp,lu,Ra,YE,Eot={setItem:(e,t)=>new Promise(n=>{localStorage.setItem(e,t),n()}),getItem:e=>Promise.resolve(localStorage.getItem(e)),removeItem:e=>new Promise(t=>{localStorage.removeItem(e),t()})};let Gye,qye;function bi(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw new TypeError("attempted to use private field on non-instance");return e}var Cot=0;function j6(e){return"__private_"+Cot+++"_"+e}var qp,O2,Sot=(Zc=j6("queued"),Gp=j6("emitter"),lu=j6("isOpen"),Ra=j6("socket"),YE=j6("handleMessage"),Gye=Symbol.for("uppy test: getSocket"),qye=Symbol.for("uppy test: getQueued"),class{constructor(e){Object.defineProperty(this,Zc,{writable:!0,value:[]}),Object.defineProperty(this,Gp,{writable:!0,value:Oye()}),Object.defineProperty(this,lu,{writable:!0,value:!1}),Object.defineProperty(this,Ra,{writable:!0,value:void 0}),Object.defineProperty(this,YE,{writable:!0,value:t=>{try{const n=JSON.parse(t.data);this.emit(n.action,n.payload)}catch(n){console.log(n)}}}),this.opts=e,e&&e.autoOpen===!1||this.open()}get isOpen(){return bi(this,lu)[lu]}[Gye](){return bi(this,Ra)[Ra]}[qye](){return bi(this,Zc)[Zc]}open(){bi(this,Ra)[Ra]=new WebSocket(this.opts.target),bi(this,Ra)[Ra].onopen=()=>{for(bi(this,lu)[lu]=!0;bi(this,Zc)[Zc].length>0&&bi(this,lu)[lu];){const e=bi(this,Zc)[Zc].shift();this.send(e.action,e.payload)}},bi(this,Ra)[Ra].onclose=()=>{bi(this,lu)[lu]=!1},bi(this,Ra)[Ra].onmessage=bi(this,YE)[YE]}close(){var e;(e=bi(this,Ra)[Ra])==null||e.close()}send(e,t){bi(this,lu)[lu]?bi(this,Ra)[Ra].send(JSON.stringify({action:e,payload:t})):bi(this,Zc)[Zc].push({action:e,payload:t})}on(e,t){bi(this,Gp)[Gp].on(e,t)}emit(e,t){bi(this,Gp)[Gp].emit(e,t)}once(e,t){bi(this,Gp)[Gp].once(e,t)}}),kot={RequestClient:mV,Provider:class extends mV{constructor(e,t){super(e,t),this.provider=t.provider,this.id=this.provider,this.name=this.opts.name||this.id.split("-").map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join(" "),this.pluginId=this.opts.pluginId,this.tokenKey=`companion-${this.pluginId}-auth-token`,this.companionKeysParams=this.opts.companionKeysParams,this.preAuthToken=null}headers(){return Promise.all([super.headers(),this.getAuthToken()]).then(e=>{let[t,n]=e;const r={};return n&&(r["uppy-auth-token"]=n),this.companionKeysParams&&(r["uppy-credentials-params"]=btoa(JSON.stringify({params:this.companionKeysParams}))),{...t,...r}})}onReceiveResponse(e){e=super.onReceiveResponse(e);const t=this.uppy.getPlugin(this.pluginId),n=t.getPluginState().authenticated?e.status!==401:e.status<400;return t.setPluginState({authenticated:n}),e}setAuthToken(e){return this.uppy.getPlugin(this.pluginId).storage.setItem(this.tokenKey,e)}getAuthToken(){return this.uppy.getPlugin(this.pluginId).storage.getItem(this.tokenKey)}authUrl(e){return e===void 0&&(e={}),this.preAuthToken&&(e.uppyPreAuthToken=this.preAuthToken),`${this.hostname}/${this.id}/connect?${new URLSearchParams(e)}`}fileUrl(e){return`${this.hostname}/${this.id}/get/${e}`}fetchPreAuthToken(){return this.companionKeysParams?this.post(`${this.id}/preauth/`,{params:this.companionKeysParams}).then(e=>{this.preAuthToken=e.token}).catch(e=>{this.uppy.log(`[CompanionClient] unable to fetch preAuthToken ${e}`,"warning")}):Promise.resolve()}list(e){return this.get(`${this.id}/list/${e||""}`)}logout(){return this.get(`${this.id}/logout`).then(e=>Promise.all([e,this.uppy.getPlugin(this.pluginId).storage.removeItem(this.tokenKey)])).then(e=>{let[t]=e;return t})}static initPlugin(e,t,n){if(e.type="acquirer",e.files=[],n&&(e.opts={...n,...t}),t.serverUrl||t.serverPattern)throw new Error("`serverUrl` and `serverPattern` have been renamed to `companionUrl` and `companionAllowedHosts` respectively in the 0.30.5 release. Please consult the docs (for example, https://uppy.io/docs/instagram/ for the Instagram plugin) and use the updated options.`");if(t.companionAllowedHosts){const r=t.companionAllowedHosts;if(!(typeof r=="string"||Array.isArray(r)||r instanceof RegExp))throw new TypeError(`${e.id}: the option "companionAllowedHosts" must be one of string, Array, RegExp`);e.opts.companionAllowedHosts=r}else/^(?!https?:\/\/).*$/i.test(t.companionUrl)?e.opts.companionAllowedHosts=`https://${t.companionUrl.replace(/^\/\//,"")}`:e.opts.companionAllowedHosts=new URL(t.companionUrl).origin;e.storage=e.opts.storage||Eot}},SearchProvider:class extends mV{constructor(e,t){super(e,t),this.provider=t.provider,this.id=this.provider,this.name=this.opts.name||this.id.split("-").map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join(" "),this.pluginId=this.opts.pluginId}fileUrl(e){return`${this.hostname}/search/${this.id}/get/${e}`}search(e,t){return t=t?`&${t}`:"",this.get(`search/${this.id}/list?q=${encodeURIComponent(e)}${t}`)}},Socket:Sot},Dot=Y1(function(e,t,n){const{progress:r,bytesUploaded:o,bytesTotal:i}=t;r&&(e.uppy.log(`Upload progress: ${r}`),e.uppy.emit("upload-progress",n,{uploader:e,bytesUploaded:o,bytesTotal:i}))},300,{leading:!0,trailing:!0});function V6(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw new TypeError("attempted to use private field on non-instance");return e}var Oot=0;function Kye(e){return"__private_"+Oot+++"_"+e}var Yye=(qp=Kye("emitter"),O2=Kye("events"),class{constructor(e){Object.defineProperty(this,qp,{writable:!0,value:void 0}),Object.defineProperty(this,O2,{writable:!0,value:[]}),V6(this,qp)[qp]=e}on(e,t){return V6(this,O2)[O2].push([e,t]),V6(this,qp)[qp].on(e,t)}remove(){for(const[e,t]of V6(this,O2)[O2].splice(0))V6(this,qp)[qp].off(e,t)}});function su(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw new TypeError("attempted to use private field on non-instance");return e}var Tot=0;function XE(e){return"__private_"+Tot+++"_"+e}var uf=XE("aliveTimer"),Z1=XE("isDone"),z6=XE("onTimedOut"),ev=XE("timeout"),Xye=class{constructor(e,t){Object.defineProperty(this,uf,{writable:!0,value:void 0}),Object.defineProperty(this,Z1,{writable:!0,value:!1}),Object.defineProperty(this,z6,{writable:!0,value:void 0}),Object.defineProperty(this,ev,{writable:!0,value:void 0}),su(this,ev)[ev]=e,su(this,z6)[z6]=t}progress(){su(this,Z1)[Z1]||su(this,ev)[ev]>0&&(clearTimeout(su(this,uf)[uf]),su(this,uf)[uf]=setTimeout(su(this,z6)[z6],su(this,ev)[ev]))}done(){su(this,Z1)[Z1]||(clearTimeout(su(this,uf)[uf]),su(this,uf)[uf]=null,su(this,Z1)[Z1]=!0)}};function Ai(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw new TypeError("attempted to use private field on non-instance");return e}var Mot=0;function tv(e){return"__private_"+Mot+++"_"+e}var ks=tv("activeRequests"),ul=tv("queuedHandlers"),H6=tv("call"),$6=tv("queueNext"),gV=tv("next"),yV=tv("queue"),bV=tv("dequeue");function Not(e){Ai(this,ks)[ks]+=1;let t,n=!1;try{t=e()}catch(r){throw Ai(this,ks)[ks]-=1,r}return{abort:()=>{n||(n=!0,Ai(this,ks)[ks]-=1,t(),Ai(this,$6)[$6]())},done:()=>{n||(n=!0,Ai(this,ks)[ks]-=1,Ai(this,$6)[$6]())}}}function Fot(){queueMicrotask(()=>Ai(this,gV)[gV]())}function Rot(){if(Ai(this,ks)[ks]>=this.limit||Ai(this,ul)[ul].length===0)return;const e=Ai(this,ul)[ul].shift(),t=Ai(this,H6)[H6](e.fn);e.abort=t.abort,e.done=t.done}function Iot(e,t){t===void 0&&(t={});const n={fn:e,priority:t.priority||0,abort:()=>{Ai(this,bV)[bV](n)},done:()=>{throw new Error("Cannot mark a queued request as done: this indicates a bug")}},r=Ai(this,ul)[ul].findIndex(o=>n.priority>o.priority);return r===-1?Ai(this,ul)[ul].push(n):Ai(this,ul)[ul].splice(r,0,n),n}function Bot(e){const t=Ai(this,ul)[ul].indexOf(e);t!==-1&&Ai(this,ul)[ul].splice(t,1)}var Qye,Jye,Pot={RateLimitedQueue:class{constructor(e){Object.defineProperty(this,bV,{value:Bot}),Object.defineProperty(this,yV,{value:Iot}),Object.defineProperty(this,gV,{value:Rot}),Object.defineProperty(this,$6,{value:Fot}),Object.defineProperty(this,H6,{value:Not}),Object.defineProperty(this,ks,{writable:!0,value:0}),Object.defineProperty(this,ul,{writable:!0,value:[]}),this.limit=typeof e!="number"||e===0?1/0:e}run(e,t){return Ai(this,ks)[ks]<this.limit?Ai(this,H6)[H6](e):Ai(this,yV)[yV](e,t)}wrapPromiseFunction(e,t){var n=this;return function(){for(var r=arguments.length,o=new Array(r),i=0;i<r;i++)o[i]=arguments[i];let a;const l=new Promise((s,u)=>{a=n.run(()=>{let c,d;try{d=Promise.resolve(e(...o))}catch(f){d=Promise.reject(f)}return d.then(f=>{c?u(c):(a.done(),s(f))},f=>{c?u(c):(a.done(),u(f))}),()=>{c=new Error("Cancelled")}},t)});return l.abort=()=>{a.abort()},l}}},internalRateLimitedQueue:Symbol("__queue")},Zye=function(e){return!!e&&(e.readyState!==0&&e.readyState!==4||e.status===0)},Lot={strings:{timedOut:"Upload stalled for %{seconds} seconds, aborting."}};const{nanoid:jot}=Lye,{Provider:Vot,RequestClient:zot,Socket:Hot}=kot,{RateLimitedQueue:$ot,internalRateLimitedQueue:AV}=Pot;function ebe(e,t){let n=t;return n||(n=new Error("Upload error")),typeof n=="string"&&(n=new Error(n)),n instanceof Error||(n=Object.assign(new Error("Upload error"),{data:n})),Zye(e)?(n=new fV(n,e),n):(n.request=e,n)}function tbe(e){return e.data.slice(0,e.data.size,e.meta.type)}var Uot=(Jye=Qye=class extends cV{constructor(e,t){super(e,t),this.type="uploader",this.id=this.opts.id||"XHRUpload",this.title="XHRUpload",this.defaultLocale=Lot;const n={formData:!0,fieldName:t.bundle?"files[]":"file",method:"post",metaFields:null,responseUrlFieldName:"url",bundle:!1,headers:{},timeout:3e4,limit:5,withCredentials:!1,responseType:"",getResponseData(r){let o={};try{o=JSON.parse(r)}catch(i){e.log(i)}return o},getResponseError(r,o){let i=new Error("Upload error");return Zye(o)&&(i=new fV(i,o)),i},validateStatus:r=>r>=200&&r<300};if(this.opts={...n,...t},this.i18nInit(),this.handleUpload=this.handleUpload.bind(this),AV in this.opts?this.requests=this.opts[AV]:this.requests=new $ot(this.opts.limit),this.opts.bundle&&!this.opts.formData)throw new Error("`opts.formData` must be true when `opts.bundle` is enabled.");this.uploaderEvents=Object.create(null)}getOptions(e){const t=this.uppy.getState().xhrUpload,{headers:n}=this.opts,r={...this.opts,...t||{},...e.xhrUpload||{},headers:{}};return typeof n=="function"?r.headers=n(e):Object.assign(r.headers,this.opts.headers),t&&Object.assign(r.headers,t.headers),e.xhrUpload&&Object.assign(r.headers,e.xhrUpload.headers),r}addMetadata(e,t,n){(Array.isArray(n.metaFields)?n.metaFields:Object.keys(t)).forEach(r=>{e.append(r,t[r])})}createFormDataUpload(e,t){const n=new FormData;this.addMetadata(n,e.meta,t);const r=tbe(e);return e.name?n.append(t.fieldName,r,e.meta.name):n.append(t.fieldName,r),n}createBundledUpload(e,t){const n=new FormData,{meta:r}=this.uppy.getState();return this.addMetadata(n,r,t),e.forEach(o=>{const i=this.getOptions(o),a=tbe(o);o.name?n.append(i.fieldName,a,o.name):n.append(i.fieldName,a)}),n}upload(e,t,n){const r=this.getOptions(e);return this.uppy.log(`uploading ${t} of ${n}`),new Promise((o,i)=>{this.uppy.emit("upload-started",e);const a=r.formData?this.createFormDataUpload(e,r):e.data,l=new XMLHttpRequest;this.uploaderEvents[e.id]=new Yye(this.uppy);const s=new Xye(r.timeout,()=>{l.abort(),c.done();const d=new Error(this.i18n("timedOut",{seconds:Math.ceil(r.timeout/1e3)}));this.uppy.emit("upload-error",e,d),i(d)}),u=jot();l.upload.addEventListener("loadstart",()=>{this.uppy.log(`[XHRUpload] ${u} started`)}),l.upload.addEventListener("progress",d=>{this.uppy.log(`[XHRUpload] ${u} progress: ${d.loaded} / ${d.total}`),s.progress(),d.lengthComputable&&this.uppy.emit("upload-progress",e,{uploader:this,bytesUploaded:d.loaded,bytesTotal:d.total})}),l.addEventListener("load",d=>{if(this.uppy.log(`[XHRUpload] ${u} finished`),s.done(),c.done(),this.uploaderEvents[e.id]&&(this.uploaderEvents[e.id].remove(),this.uploaderEvents[e.id]=null),r.validateStatus(d.target.status,l.responseText,l)){const v=r.getResponseData(l.responseText,l),g=v[r.responseUrlFieldName],b={status:d.target.status,body:v,uploadURL:g};return this.uppy.emit("upload-success",e,b),g&&this.uppy.log(`Download ${e.name} from ${g}`),o(e)}const f=r.getResponseData(l.responseText,l),p=ebe(l,r.getResponseError(l.responseText,l)),m={status:d.target.status,body:f};return this.uppy.emit("upload-error",e,p,m),i(p)}),l.addEventListener("error",()=>{this.uppy.log(`[XHRUpload] ${u} errored`),s.done(),c.done(),this.uploaderEvents[e.id]&&(this.uploaderEvents[e.id].remove(),this.uploaderEvents[e.id]=null);const d=ebe(l,r.getResponseError(l.responseText,l));return this.uppy.emit("upload-error",e,d),i(d)}),l.open(r.method.toUpperCase(),r.endpoint,!0),l.withCredentials=r.withCredentials,r.responseType!==""&&(l.responseType=r.responseType);const c=this.requests.run(()=>{this.uppy.emit("upload-started",e);const d=this.getOptions(e);return Object.keys(d.headers).forEach(f=>{l.setRequestHeader(f,d.headers[f])}),l.send(a),()=>{s.done(),l.abort()}});this.onFileRemove(e.id,()=>{c.abort(),i(new Error("File removed"))}),this.onCancelAll(e.id,()=>{c.abort(),i(new Error("Upload cancelled"))})})}uploadRemote(e){const t=this.getOptions(e);return new Promise((n,r)=>{this.uppy.emit("upload-started",e);const o={};(Array.isArray(t.metaFields)?t.metaFields:Object.keys(e.meta)).forEach(i=>{o[i]=e.meta[i]}),new(e.remote.providerOptions.provider?Vot:zot)(this.uppy,e.remote.providerOptions).post(e.remote.url,{...e.remote.body,endpoint:t.endpoint,size:e.data.size,fieldname:t.fieldName,metadata:o,httpMethod:t.method,useFormData:t.formData,headers:t.headers}).then(i=>{const{token:a}=i,l=function(c){const d=/^(?:https?:\/\/|\/\/)?(?:[^@\n]+@)?(?:www\.)?([^\n]+)/i.exec(c)[1];return`${/^http:\/\//i.test(c)?"ws":"wss"}://${d}`}(e.remote.companionUrl),s=new Hot({target:`${l}/api/${a}`,autoOpen:!1});this.uploaderEvents[e.id]=new Yye(this.uppy),this.onFileRemove(e.id,()=>{s.send("cancel",{}),u.abort(),n(`upload ${e.id} was removed`)}),this.onCancelAll(e.id,()=>{s.send("cancel",{}),u.abort(),n(`upload ${e.id} was canceled`)}),this.onRetry(e.id,()=>{s.send("pause",{}),s.send("resume",{})}),this.onRetryAll(e.id,()=>{s.send("pause",{}),s.send("resume",{})}),s.on("progress",c=>Dot(this,c,e)),s.on("success",c=>{const d=t.getResponseData(c.response.responseText,c.response),f=d[t.responseUrlFieldName],p={status:c.response.status,body:d,uploadURL:f};return this.uppy.emit("upload-success",e,p),u.done(),this.uploaderEvents[e.id]&&(this.uploaderEvents[e.id].remove(),this.uploaderEvents[e.id]=null),n()}),s.on("error",c=>{const d=c.response,f=d?t.getResponseError(d.responseText,d):Object.assign(new Error(c.error.message),{cause:c.error});this.uppy.emit("upload-error",e,f),u.done(),this.uploaderEvents[e.id]&&(this.uploaderEvents[e.id].remove(),this.uploaderEvents[e.id]=null),r(f)});const u=this.requests.run(()=>(s.open(),e.isPaused&&s.send("pause",{}),()=>s.close()))}).catch(i=>{this.uppy.emit("upload-error",e,i),r(i)})})}uploadBundle(e){return new Promise((t,n)=>{const{endpoint:r}=this.opts,{method:o}=this.opts,i=this.uppy.getState().xhrUpload,a=this.createBundledUpload(e,{...this.opts,...i||{}}),l=new XMLHttpRequest,s=new Xye(this.opts.timeout,()=>{l.abort();const c=new Error(this.i18n("timedOut",{seconds:Math.ceil(this.opts.timeout/1e3)}));u(c),n(c)}),u=c=>{e.forEach(d=>{this.uppy.emit("upload-error",d,c)})};l.upload.addEventListener("loadstart",()=>{this.uppy.log("[XHRUpload] started uploading bundle"),s.progress()}),l.upload.addEventListener("progress",c=>{s.progress(),c.lengthComputable&&e.forEach(d=>{this.uppy.emit("upload-progress",d,{uploader:this,bytesUploaded:c.loaded/c.total*d.size,bytesTotal:d.size})})}),l.addEventListener("load",c=>{if(s.done(),this.opts.validateStatus(c.target.status,l.responseText,l)){const f=this.opts.getResponseData(l.responseText,l),p={status:c.target.status,body:f};return e.forEach(m=>{this.uppy.emit("upload-success",m,p)}),t()}const d=this.opts.getResponseError(l.responseText,l)||new Error("Upload error");return d.request=l,u(d),n(d)}),l.addEventListener("error",()=>{s.done();const c=this.opts.getResponseError(l.responseText,l)||new Error("Upload error");return u(c),n(c)}),this.uppy.on("cancel-all",()=>{s.done(),l.abort()}),l.open(o.toUpperCase(),r,!0),l.withCredentials=this.opts.withCredentials,this.opts.responseType!==""&&(l.responseType=this.opts.responseType),Object.keys(this.opts.headers).forEach(c=>{l.setRequestHeader(c,this.opts.headers[c])}),l.send(a),e.forEach(c=>{this.uppy.emit("upload-started",c)})})}uploadFiles(e){const t=e.map((n,r)=>{const o=parseInt(r,10)+1,i=e.length;return n.error?Promise.reject(new Error(n.error)):n.isRemote?this.uploadRemote(n,o,i):this.upload(n,o,i)});return function(n){const r=[],o=[];function i(l){r.push(l)}function a(l){o.push(l)}return Promise.all(n.map(l=>l.then(i,a))).then(()=>({successful:r,failed:o}))}(t)}onFileRemove(e,t){this.uploaderEvents[e].on("file-removed",n=>{e===n.id&&t(n.id)})}onRetry(e,t){this.uploaderEvents[e].on("upload-retry",n=>{e===n&&t()})}onRetryAll(e,t){this.uploaderEvents[e].on("retry-all",()=>{this.uppy.getFile(e)&&t()})}onCancelAll(e,t){this.uploaderEvents[e].on("cancel-all",()=>{this.uppy.getFile(e)&&t()})}handleUpload(e){if(e.length===0)return this.uppy.log("[XHRUpload] No files to upload!"),Promise.resolve();this.opts.limit!==0||this.opts[AV]||this.uppy.log("[XHRUpload] When uploading multiple files at once, consider setting the `limit` option (to `10` for example), to limit the number of concurrent uploads, which helps prevent memory and network issues: https://uppy.io/docs/xhr-upload/#limit-0","warning"),this.uppy.log("[XHRUpload] Uploading...");const t=e.map(n=>this.uppy.getFile(n));if(this.opts.bundle){if(t.some(n=>n.isRemote))throw new Error("Can\u2019t upload remote files when the `bundle: true` option is set");if(typeof this.opts.headers=="function")throw new TypeError("`headers` may not be a function when the `bundle: true` option is set");return this.uploadBundle(t)}return this.uploadFiles(t).then(()=>null)}install(){if(this.opts.bundle){const{capabilities:e}=this.uppy.getState();this.uppy.setState({capabilities:{...e,individualCancellation:!1}})}this.uppy.addUploader(this.handleUpload)}uninstall(){if(this.opts.bundle){const{capabilities:e}=this.uppy.getState();this.uppy.setState({capabilities:{...e,individualCancellation:!0}})}this.uppy.removeUploader(this.handleUpload)}},Qye.VERSION="2.0.6",Jye),nbe=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function U6(e){var t={exports:{}};return e(t,t.exports),t.exports}var Kp,QE,JE=function(e){return e&&e.Math==Math&&e},Mt=JE(typeof globalThis=="object"&&globalThis)||JE(typeof window=="object"&&window)||JE(typeof self=="object"&&self)||JE(typeof nbe=="object"&&nbe)||function(){return this}()||Function("return this")(),Wot=Object.defineProperty,wV=function(e,t){try{Wot(Mt,e,{value:t,configurable:!0,writable:!0})}catch{Mt[e]=t}return t},Yp=Mt["__core-js_shared__"]||wV("__core-js_shared__",{}),xV=U6(function(e){(e.exports=function(t,n){return Yp[t]||(Yp[t]=n!==void 0?n:{})})("versions",[]).push({version:"3.19.3",mode:"global",copyright:"\xA9 2021 Denis Pushkarev (zloirock.ru)"})}),rbe=Function.prototype,_V=rbe.bind,EV=rbe.call,Got=_V&&_V.bind(EV),cn=_V?function(e){return e&&Got(EV,e)}:function(e){return e&&function(){return EV.apply(e,arguments)}},qot=Mt.TypeError,uu=function(e){if(e==null)throw qot("Can't call method on "+e);return e},Kot=Mt.Object,Xp=function(e){return Kot(uu(e))},Yot=cn({}.hasOwnProperty),ni=Object.hasOwn||function(e,t){return Yot(Xp(e),t)},Xot=0,Qot=Math.random(),Jot=cn(1 .toString),CV=function(e){return"Symbol("+(e===void 0?"":e)+")_"+Jot(++Xot+Qot,36)},Yr=function(e){return typeof e=="function"},nv=function(e,t){return arguments.length<2?function(n){return Yr(n)?n:void 0}(Mt[e]):Mt[e]&&Mt[e][t]},T2=nv("navigator","userAgent")||"",obe=Mt.process,ibe=Mt.Deno,abe=obe&&obe.versions||ibe&&ibe.version,lbe=abe&&abe.v8;lbe&&(QE=(Kp=lbe.split("."))[0]>0&&Kp[0]<4?1:+(Kp[0]+Kp[1])),!QE&&T2&&(!(Kp=T2.match(/Edge\/(\d+)/))||Kp[1]>=74)&&(Kp=T2.match(/Chrome\/(\d+)/))&&(QE=+Kp[1]);var W6=QE,Lr=function(e){try{return!!e()}catch{return!0}},SV=!!Object.getOwnPropertySymbols&&!Lr(function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&W6&&W6<41}),kV=SV&&!Symbol.sham&&typeof Symbol.iterator=="symbol",G6=xV("wks"),rv=Mt.Symbol,sbe=rv&&rv.for,Zot=kV?rv:rv&&rv.withoutSetter||CV,So=function(e){if(!ni(G6,e)||!SV&&typeof G6[e]!="string"){var t="Symbol."+e;SV&&ni(rv,e)?G6[e]=rv[e]:G6[e]=kV&&sbe?sbe(t):Zot(t)}return G6[e]},ube={};ube[So("toStringTag")]="z";var DV=String(ube)==="[object z]",ta=!Lr(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),uo=function(e){return typeof e=="object"?e!==null:Yr(e)},OV=Mt.document,eit=uo(OV)&&uo(OV.createElement),q6=function(e){return eit?OV.createElement(e):{}},cbe=!ta&&!Lr(function(){return Object.defineProperty(q6("div"),"a",{get:function(){return 7}}).a!=7}),tit=Mt.String,nit=Mt.TypeError,ri=function(e){if(uo(e))return e;throw nit(tit(e)+" is not an object")},K6=Function.prototype.call,Dr=K6.bind?K6.bind(K6):function(){return K6.apply(K6,arguments)},ov=cn({}.isPrototypeOf),rit=Mt.Object,TV=kV?function(e){return typeof e=="symbol"}:function(e){var t=nv("Symbol");return Yr(t)&&ov(t.prototype,rit(e))},oit=Mt.String,ZE=function(e){try{return oit(e)}catch{return"Object"}},iit=Mt.TypeError,Qp=function(e){if(Yr(e))return e;throw iit(ZE(e)+" is not a function")},iv=function(e,t){var n=e[t];return n==null?void 0:Qp(n)},ait=Mt.TypeError,lit=Mt.TypeError,sit=So("toPrimitive"),MV=function(e){var t=function(n){if(!uo(n)||TV(n))return n;var r,o=iv(n,sit);if(o){if(r=Dr(o,n,"string"),!uo(r)||TV(r))return r;throw lit("Can't convert object to primitive value")}return function(i){var a,l;if(Yr(a=i.toString)&&!uo(l=Dr(a,i))||Yr(a=i.valueOf)&&!uo(l=Dr(a,i)))return l;throw ait("Can't convert object to primitive value")}(n)}(e);return TV(t)?t:t+""},uit=Mt.TypeError,dbe=Object.defineProperty,Ku={f:ta?dbe:function(e,t,n){if(ri(e),t=MV(t),ri(n),cbe)try{return dbe(e,t,n)}catch{}if("get"in n||"set"in n)throw uit("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},eC=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},Yu=ta?function(e,t,n){return Ku.f(e,t,eC(1,n))}:function(e,t,n){return e[t]=n,e},cit=cn(Function.toString);Yr(Yp.inspectSource)||(Yp.inspectSource=function(e){return cit(e)});var tC,Y6,nC,rC=Yp.inspectSource,fbe=Mt.WeakMap,pbe=Yr(fbe)&&/native code/.test(rC(fbe)),hbe=xV("keys"),NV=function(e){return hbe[e]||(hbe[e]=CV(e))},oC={},FV=Mt.TypeError,dit=Mt.WeakMap;if(pbe||Yp.state){var av=Yp.state||(Yp.state=new dit),fit=cn(av.get),vbe=cn(av.has),pit=cn(av.set);tC=function(e,t){if(vbe(av,e))throw new FV("Object already initialized");return t.facade=e,pit(av,e,t),t},Y6=function(e){return fit(av,e)||{}},nC=function(e){return vbe(av,e)}}else{var M2=NV("state");oC[M2]=!0,tC=function(e,t){if(ni(e,M2))throw new FV("Object already initialized");return t.facade=e,Yu(e,M2,t),t},Y6=function(e){return ni(e,M2)?e[M2]:{}},nC=function(e){return ni(e,M2)}}var Ia={set:tC,get:Y6,has:nC,enforce:function(e){return nC(e)?Y6(e):tC(e,{})},getterFor:function(e){return function(t){var n;if(!uo(t)||(n=Y6(t)).type!==e)throw FV("Incompatible receiver, "+e+" required");return n}}},mbe=Function.prototype,hit=ta&&Object.getOwnPropertyDescriptor,RV=ni(mbe,"name"),N2={EXISTS:RV,PROPER:RV&&(function(){}).name==="something",CONFIGURABLE:RV&&(!ta||ta&&hit(mbe,"name").configurable)},$l=U6(function(e){var t=N2.CONFIGURABLE,n=Ia.get,r=Ia.enforce,o=String(String).split("String");(e.exports=function(i,a,l,s){var u,c=!!s&&!!s.unsafe,d=!!s&&!!s.enumerable,f=!!s&&!!s.noTargetGet,p=s&&s.name!==void 0?s.name:a;Yr(l)&&(String(p).slice(0,7)==="Symbol("&&(p="["+String(p).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!ni(l,"name")||t&&l.name!==p)&&Yu(l,"name",p),(u=r(l)).source||(u.source=o.join(typeof p=="string"?p:""))),i!==Mt?(c?!f&&i[a]&&(d=!0):delete i[a],d?i[a]=l:Yu(i,a,l)):d?i[a]=l:wV(a,l)})(Function.prototype,"toString",function(){return Yr(this)&&n(this).source||rC(this)})}),vit=cn({}.toString),mit=cn("".slice),Xu=function(e){return mit(vit(e),8,-1)},git=So("toStringTag"),yit=Mt.Object,bit=Xu(function(){return arguments}())=="Arguments",iC=DV?Xu:function(e){var t,n,r;return e===void 0?"Undefined":e===null?"Null":typeof(n=function(o,i){try{return o[i]}catch{}}(t=yit(e),git))=="string"?n:bit?Xu(t):(r=Xu(t))=="Object"&&Yr(t.callee)?"Arguments":r},Ait=DV?{}.toString:function(){return"[object "+iC(this)+"]"};DV||$l(Object.prototype,"toString",Ait,{unsafe:!0});var aC={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},IV=q6("span").classList,gbe=IV&&IV.constructor&&IV.constructor.prototype,ybe=gbe===Object.prototype?void 0:gbe,bbe=cn(cn.bind),lv=function(e,t){return Qp(e),t===void 0?e:bbe?bbe(e,t):function(){return e.apply(t,arguments)}},BV=Mt.Object,wit=cn("".split),lC=Lr(function(){return!BV("z").propertyIsEnumerable(0)})?function(e){return Xu(e)=="String"?wit(e,""):BV(e)}:BV,xit=Math.ceil,_it=Math.floor,X6=function(e){var t=+e;return t!=t||t===0?0:(t>0?_it:xit)(t)},Eit=Math.min,F2=function(e){return e>0?Eit(X6(e),9007199254740991):0},sv=function(e){return F2(e.length)},sC=Array.isArray||function(e){return Xu(e)=="Array"},Abe=function(){},Cit=[],wbe=nv("Reflect","construct"),PV=/^\s*(?:class|function)\b/,Sit=cn(PV.exec),kit=!PV.exec(Abe),Q6=function(e){if(!Yr(e))return!1;try{return wbe(Abe,Cit,e),!0}catch{return!1}},uC=!wbe||Lr(function(){var e;return Q6(Q6.call)||!Q6(Object)||!Q6(function(){e=!0})||e})?function(e){if(!Yr(e))return!1;switch(iC(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return kit||!!Sit(PV,rC(e))}:Q6,Dit=So("species"),xbe=Mt.Array,_be=function(e,t){return new(function(n){var r;return sC(n)&&(r=n.constructor,(uC(r)&&(r===xbe||sC(r.prototype))||uo(r)&&(r=r[Dit])===null)&&(r=void 0)),r===void 0?xbe:r}(e))(t===0?0:t)},Ebe=cn([].push),Jp=function(e){var t=e==1,n=e==2,r=e==3,o=e==4,i=e==6,a=e==7,l=e==5||i;return function(s,u,c,d){for(var f,p,m=Xp(s),v=lC(m),g=lv(u,c),b=sv(v),y=0,w=d||_be,x=t?w(s,b):n||a?w(s,0):void 0;b>y;y++)if((l||y in v)&&(p=g(f=v[y],y,m),e))if(t)x[y]=p;else if(p)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:Ebe(x,f)}else switch(e){case 4:return!1;case 7:Ebe(x,f)}return i?-1:r||o?o:x}},R2={forEach:Jp(0),map:Jp(1),filter:Jp(2),some:Jp(3),every:Jp(4),find:Jp(5),findIndex:Jp(6),filterReject:Jp(7)},Cbe=function(e,t){var n=[][e];return!!n&&Lr(function(){n.call(null,t||function(){throw 1},1)})},Oit=R2.forEach,LV=Cbe("forEach")?[].forEach:function(e){return Oit(this,e,arguments.length>1?arguments[1]:void 0)},Sbe=function(e){if(e&&e.forEach!==LV)try{Yu(e,"forEach",LV)}catch{e.forEach=LV}};for(var jV in aC)aC[jV]&&Sbe(Mt[jV]&&Mt[jV].prototype);Sbe(ybe);var kbe={}.propertyIsEnumerable,Dbe=Object.getOwnPropertyDescriptor,Tit=Dbe&&!kbe.call({1:2},1)?function(e){var t=Dbe(this,e);return!!t&&t.enumerable}:kbe,Obe={f:Tit},Zp=function(e){return lC(uu(e))},Tbe=Object.getOwnPropertyDescriptor,J6={f:ta?Tbe:function(e,t){if(e=Zp(e),t=MV(t),cbe)try{return Tbe(e,t)}catch{}if(ni(e,t))return eC(!Dr(Obe.f,e,t),e[t])}},Mit=Math.max,Nit=Math.min,I2=function(e,t){var n=X6(e);return n<0?Mit(n+t,0):Nit(n,t)},Mbe=function(e){return function(t,n,r){var o,i=Zp(t),a=sv(i),l=I2(r,a);if(e&&n!=n){for(;a>l;)if((o=i[l++])!=o)return!0}else for(;a>l;l++)if((e||l in i)&&i[l]===n)return e||l||0;return!e&&-1}},Nbe={includes:Mbe(!0),indexOf:Mbe(!1)},Fit=Nbe.indexOf,Fbe=cn([].push),Rbe=function(e,t){var n,r=Zp(e),o=0,i=[];for(n in r)!ni(oC,n)&&ni(r,n)&&Fbe(i,n);for(;t.length>o;)ni(r,n=t[o++])&&(~Fit(i,n)||Fbe(i,n));return i},cC=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Rit=cC.concat("length","prototype"),Z6={f:Object.getOwnPropertyNames||function(e){return Rbe(e,Rit)}},Ibe={f:Object.getOwnPropertySymbols},Iit=cn([].concat),Bit=nv("Reflect","ownKeys")||function(e){var t=Z6.f(ri(e)),n=Ibe.f;return n?Iit(t,n(e)):t},Pit=function(e,t){for(var n=Bit(t),r=Ku.f,o=J6.f,i=0;i<n.length;i++){var a=n[i];ni(e,a)||r(e,a,o(t,a))}},Lit=/#|\.prototype\./,e8=function(e,t){var n=Vit[jit(e)];return n==Hit||n!=zit&&(Yr(t)?Lr(t):!!t)},jit=e8.normalize=function(e){return String(e).replace(Lit,".").toLowerCase()},Vit=e8.data={},zit=e8.NATIVE="N",Hit=e8.POLYFILL="P",t8=e8,$it=J6.f,ko=function(e,t){var n,r,o,i,a,l=e.target,s=e.global,u=e.stat;if(n=s?Mt:u?Mt[l]||wV(l,{}):(Mt[l]||{}).prototype)for(r in t){if(i=t[r],o=e.noTargetGet?(a=$it(n,r))&&a.value:n[r],!t8(s?r:l+(u?".":"#")+r,e.forced)&&o!==void 0){if(typeof i==typeof o)continue;Pit(i,o)}(e.sham||o&&o.sham)&&Yu(i,"sham",!0),$l(n,r,i,e)}},B2=Object.keys||function(e){return Rbe(e,cC)},Uit=Lr(function(){B2(1)});function Bbe(e){return Object.prototype.toString.call(e)==="[object Object]"}ko({target:"Object",stat:!0,forced:Uit},{keys:function(e){return B2(Xp(e))}});var Wit={isHistory(e){return Bbe(t=e)!==!1&&((n=t.constructor)===void 0||Bbe(r=n.prototype)!==!1&&r.hasOwnProperty("isPrototypeOf")!==!1)&&Array.isArray(e.redos)&&Array.isArray(e.undos)&&(e.redos.length===0||Vp.isOperationList(e.redos[0]))&&(e.undos.length===0||Vp.isOperationList(e.undos[0]));var t,n,r}},VV=new WeakMap,zV=new WeakMap,P2={isHistoryEditor:e=>Wit.isHistory(e.history)&&ue.isEditor(e),isMerging:e=>zV.get(e),isSaving:e=>VV.get(e),redo(e){e.redo()},undo(e){e.undo()},withoutMerging(e,t){var n=P2.isMerging(e);zV.set(e,!1),t(),zV.set(e,n)},withoutSaving(e,t){var n=P2.isSaving(e);VV.set(e,!1),t(),VV.set(e,n)}},Git=Mt.String,to=function(e){if(iC(e)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return Git(e)},HV=function(){var e=ri(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t},qit=N2.PROPER,$V=RegExp.prototype,Pbe=$V.toString,Kit=cn(HV),Yit=Lr(function(){return Pbe.call({source:"a",flags:"b"})!="/a/b"}),Xit=qit&&Pbe.name!="toString";(Yit||Xit)&&$l(RegExp.prototype,"toString",function(){var e=ri(this),t=to(e.source),n=e.flags;return"/"+t+"/"+to(n===void 0&&ov($V,e)&&!("flags"in $V)?Kit(e):n)},{unsafe:!0});var dC,Qit=ta?Object.defineProperties:function(e,t){ri(e);for(var n,r=Zp(t),o=B2(t),i=o.length,a=0;i>a;)Ku.f(e,n=o[a++],r[n]);return e},UV=nv("document","documentElement"),Lbe=NV("IE_PROTO"),WV=function(){},jbe=function(e){return"<script>"+e+"<\/script>"},Vbe=function(e){e.write(jbe("")),e.close();var t=e.parentWindow.Object;return e=null,t},fC=function(){try{dC=new ActiveXObject("htmlfile")}catch{}var e,t;fC=typeof document<"u"?document.domain&&dC?Vbe(dC):((t=q6("iframe")).style.display="none",UV.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write(jbe("document.F=Object")),e.close(),e.F):Vbe(dC);for(var n=cC.length;n--;)delete fC.prototype[cC[n]];return fC()};oC[Lbe]=!0;var pC=Object.create||function(e,t){var n;return e!==null?(WV.prototype=ri(e),n=new WV,WV.prototype=null,n[Lbe]=e):n=fC(),t===void 0?n:Qit(n,t)},GV=So("unscopables"),qV=Array.prototype;qV[GV]==null&&Ku.f(qV,GV,{configurable:!0,value:pC(null)});var n8=function(e){qV[GV][e]=!0},Jit=Nbe.includes;ko({target:"Array",proto:!0},{includes:function(e){return Jit(this,e,arguments.length>1?arguments[1]:void 0)}}),n8("includes");var Zit=So("match"),KV=function(e){var t;return uo(e)&&((t=e[Zit])!==void 0?!!t:Xu(e)=="RegExp")},eat=Mt.TypeError,YV=function(e){if(KV(e))throw eat("The method doesn't accept regular expressions");return e},tat=So("match"),XV=function(e){var t=/./;try{"/./"[e](t)}catch{try{return t[tat]=!1,"/./"[e](t)}catch{}}return!1},nat=cn("".indexOf);ko({target:"String",proto:!0,forced:!XV("includes")},{includes:function(e){return!!~nat(to(uu(this)),to(YV(e)),arguments.length>1?arguments[1]:void 0)}});var rat=/"/g,oat=cn("".replace);ko({target:"String",proto:!0,forced:Lr(function(){var e="".anchor('"');return e!==e.toLowerCase()||e.split('"').length>3})},{anchor:function(e){return t=e,n=to(uu(this)),r="<a",(r+=' name="'+oat(to(t),rat,""")+'"')+">"+n+"</a>";var t,n,r}});var QV=function(e,t,n){var r,o;ri(e);try{if(!(r=iv(e,"return"))){if(t==="throw")throw n;return n}r=Dr(r,e)}catch(i){o=!0,r=i}if(t==="throw")throw n;if(o)throw r;return ri(r),n},iat=function(e,t,n,r){try{return r?t(ri(n)[0],n[1]):t(n)}catch(o){QV(e,"throw",o)}},L2={},aat=So("iterator"),lat=Array.prototype,zbe=function(e){return e!==void 0&&(L2.Array===e||lat[aat]===e)},r8=function(e,t,n){var r=MV(t);r in e?Ku.f(e,r,eC(0,n)):e[r]=n},sat=So("iterator"),JV=function(e){if(e!=null)return iv(e,sat)||iv(e,"@@iterator")||L2[iC(e)]},uat=Mt.TypeError,Hbe=function(e,t){var n=arguments.length<2?JV(e):t;if(Qp(n))return ri(Dr(n,e));throw uat(ZE(e)+" is not iterable")},$be=Mt.Array,Ube=So("iterator"),Wbe=!1;try{var cat=0,Gbe={next:function(){return{done:!!cat++}},return:function(){Wbe=!0}};Gbe[Ube]=function(){return this},Array.from(Gbe,function(){throw 2})}catch{}var ZV=function(e,t){if(!Wbe)return!1;var n=!1;try{var r={};r[Ube]=function(){return{next:function(){return{done:n=!0}}}},e(r)}catch{}return n},dat=!ZV(function(e){Array.from(e)});ko({target:"Array",stat:!0,forced:dat},{from:function(e){var t=Xp(e),n=uC(this),r=arguments.length,o=r>1?arguments[1]:void 0,i=o!==void 0;i&&(o=lv(o,r>2?arguments[2]:void 0));var a,l,s,u,c,d,f=JV(t),p=0;if(!f||this==$be&&zbe(f))for(a=sv(t),l=n?new this(a):$be(a);a>p;p++)d=i?o(t[p],p):t[p],r8(l,p,d);else for(c=(u=Hbe(t,f)).next,l=n?new this:[];!(s=Dr(c,u)).done;p++)d=i?iat(u,o,[s.value,p],!0):s.value,r8(l,p,d);return l.length=p,l}});var uv,qbe,Kbe,fat=cn("".charAt),Ybe=cn("".charCodeAt),pat=cn("".slice),Xbe=function(e){return function(t,n){var r,o,i=to(uu(t)),a=X6(n),l=i.length;return a<0||a>=l?e?"":void 0:(r=Ybe(i,a))<55296||r>56319||a+1===l||(o=Ybe(i,a+1))<56320||o>57343?e?fat(i,a):r:e?pat(i,a,a+2):o-56320+(r-55296<<10)+65536}},Qbe={codeAt:Xbe(!1),charAt:Xbe(!0)},hat=!Lr(function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}),Jbe=NV("IE_PROTO"),ez=Mt.Object,vat=ez.prototype,hC=hat?ez.getPrototypeOf:function(e){var t=Xp(e);if(ni(t,Jbe))return t[Jbe];var n=t.constructor;return Yr(n)&&t instanceof n?n.prototype:t instanceof ez?vat:null},tz=So("iterator"),Zbe=!1;[].keys&&("next"in(Kbe=[].keys())?(qbe=hC(hC(Kbe)))!==Object.prototype&&(uv=qbe):Zbe=!0);var mat=uv==null||Lr(function(){var e={};return uv[tz].call(e)!==e});mat&&(uv={}),Yr(uv[tz])||$l(uv,tz,function(){return this});var nz={IteratorPrototype:uv,BUGGY_SAFARI_ITERATORS:Zbe},gat=Ku.f,e3e=So("toStringTag"),vC=function(e,t,n){e&&!ni(e=n?e:e.prototype,e3e)&&gat(e,e3e,{configurable:!0,value:t})},yat=nz.IteratorPrototype,bat=function(){return this},Aat=Mt.String,wat=Mt.TypeError,j2=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=cn(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),t=n instanceof Array}catch{}return function(r,o){return ri(r),function(i){if(typeof i=="object"||Yr(i))return i;throw wat("Can't set "+Aat(i)+" as a prototype")}(o),t?e(r,o):r.__proto__=o,r}}():void 0),xat=N2.PROPER,_at=N2.CONFIGURABLE,t3e=nz.IteratorPrototype,mC=nz.BUGGY_SAFARI_ITERATORS,o8=So("iterator"),Eat=function(){return this},rz=function(e,t,n,r,o,i,a){(function(b,y,w){var x=y+" Iterator";b.prototype=pC(yat,{next:eC(1,w)}),vC(b,x,!1),L2[x]=bat})(n,t,r);var l,s,u,c=function(b){if(b===o&&v)return v;if(!mC&&b in p)return p[b];switch(b){case"keys":case"values":case"entries":return function(){return new n(this,b)}}return function(){return new n(this)}},d=t+" Iterator",f=!1,p=e.prototype,m=p[o8]||p["@@iterator"]||o&&p[o],v=!mC&&m||c(o),g=t=="Array"&&p.entries||m;if(g&&(l=hC(g.call(new e)))!==Object.prototype&&l.next&&(hC(l)!==t3e&&(j2?j2(l,t3e):Yr(l[o8])||$l(l,o8,Eat)),vC(l,d,!0)),xat&&o=="values"&&m&&m.name!=="values"&&(_at?Yu(p,"name","values"):(f=!0,v=function(){return Dr(m,this)})),o)if(s={values:c("values"),keys:i?v:c("keys"),entries:c("entries")},a)for(u in s)(mC||f||!(u in p))&&$l(p,u,s[u]);else ko({target:t,proto:!0,forced:mC||f},s);return p[o8]!==v&&$l(p,o8,v,{name:o}),L2[t]=v,s},Cat=Qbe.charAt,Sat=Ia.set,kat=Ia.getterFor("String Iterator");rz(String,"String",function(e){Sat(this,{type:"String Iterator",string:to(e),index:0})},function(){var e,t=kat(this),n=t.string,r=t.index;return r>=n.length?{value:void 0,done:!0}:(e=Cat(n,r),t.index+=e.length,{value:e,done:!1})});var oz,Dat=J6.f,n3e=cn("".endsWith),Oat=cn("".slice),Tat=Math.min,r3e=XV("endsWith"),Mat=!(r3e||(oz=Dat(String.prototype,"endsWith"),!oz||oz.writable));ko({target:"String",proto:!0,forced:!Mat&&!r3e},{endsWith:function(e){var t=to(uu(this));YV(e);var n=arguments.length>1?arguments[1]:void 0,r=t.length,o=n===void 0?r:Tat(F2(n),r),i=to(e);return n3e?n3e(t,i,o):Oat(t,o-i.length,o)===i}});var Nat=cn([].join),Fat=lC!=Object,Rat=Cbe("join",",");ko({target:"Array",proto:!0,forced:Fat||!Rat},{join:function(e){return Nat(Zp(this),e===void 0?",":e)}});var Iat=So("species"),gC=function(e){return W6>=51||!Lr(function(){var t=[];return(t.constructor={})[Iat]=function(){return{foo:1}},t[e](Boolean).foo!==1})},Bat=R2.map,Pat=gC("map");ko({target:"Array",proto:!0,forced:!Pat},{map:function(e){return Bat(this,e,arguments.length>1?arguments[1]:void 0)}});var iz=Mt.RegExp,az=Lr(function(){var e=iz("a","y");return e.lastIndex=2,e.exec("abcd")!=null}),Lat=az||Lr(function(){return!iz("a","y").sticky}),yC={BROKEN_CARET:az||Lr(function(){var e=iz("^r","gy");return e.lastIndex=2,e.exec("str")!=null}),MISSED_STICKY:Lat,UNSUPPORTED_Y:az},jat=Mt.RegExp,lz=Lr(function(){var e=jat(".","s");return!(e.dotAll&&e.exec(`
| `)&&e.flags==="s")}),Vat=Mt.RegExp,sz=Lr(function(){var e=Vat("(?<a>b)","g");return e.exec("b").groups.a!=="b"||"b".replace(e,"$<a>c")!=="bc"}),zat=Ia.get,Hat=xV("native-string-replace",String.prototype.replace),bC=RegExp.prototype.exec,uz=bC,$at=cn("".charAt),Uat=cn("".indexOf),Wat=cn("".replace),cz=cn("".slice),dz=function(){var e=/a/,t=/b*/g;return Dr(bC,e,"a"),Dr(bC,t,"a"),e.lastIndex!==0||t.lastIndex!==0}(),o3e=yC.BROKEN_CARET,fz=/()??/.exec("")[1]!==void 0;(dz||fz||o3e||lz||sz)&&(uz=function(e){var t,n,r,o,i,a,l,s=this,u=zat(s),c=to(e),d=u.raw;if(d)return d.lastIndex=s.lastIndex,t=Dr(uz,d,c),s.lastIndex=d.lastIndex,t;var f=u.groups,p=o3e&&s.sticky,m=Dr(HV,s),v=s.source,g=0,b=c;if(p&&(m=Wat(m,"y",""),Uat(m,"g")===-1&&(m+="g"),b=cz(c,s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&$at(c,s.lastIndex-1)!==`
| `)&&(v="(?: "+v+")",b=" "+b,g++),n=new RegExp("^(?:"+v+")",m)),fz&&(n=new RegExp("^"+v+"$(?!\\s)",m)),dz&&(r=s.lastIndex),o=Dr(bC,p?n:s,b),p?o?(o.input=cz(o.input,g),o[0]=cz(o[0],g),o.index=s.lastIndex,s.lastIndex+=o[0].length):s.lastIndex=0:dz&&o&&(s.lastIndex=s.global?o.index+o[0].length:r),fz&&o&&o.length>1&&Dr(Hat,o[0],n,function(){for(i=1;i<arguments.length-2;i++)arguments[i]===void 0&&(o[i]=void 0)}),o&&f)for(o.groups=a=pC(null),i=0;i<f.length;i++)a[(l=f[i])[0]]=o[l[1]];return o});var i8=uz;ko({target:"RegExp",proto:!0,forced:/./.exec!==i8},{exec:i8});var pz=Function.prototype,i3e=pz.apply,Gat=pz.bind,a3e=pz.call,hz=typeof Reflect=="object"&&Reflect.apply||(Gat?a3e.bind(i3e):function(){return a3e.apply(i3e,arguments)}),qat=So("species"),vz=RegExp.prototype,mz=function(e,t,n,r){var o=So(e),i=!Lr(function(){var u={};return u[o]=function(){return 7},""[e](u)!=7}),a=i&&!Lr(function(){var u=!1,c=/a/;return e==="split"&&((c={}).constructor={},c.constructor[qat]=function(){return c},c.flags="",c[o]=/./[o]),c.exec=function(){return u=!0,null},c[o](""),!u});if(!i||!a||n){var l=cn(/./[o]),s=t(o,""[e],function(u,c,d,f,p){var m=cn(u),v=c.exec;return v===i8||v===vz.exec?i&&!p?{done:!0,value:l(c,d,f)}:{done:!0,value:m(d,c,f)}:{done:!1}});$l(String.prototype,e,s[0]),$l(vz,o,s[1])}r&&Yu(vz[o],"sham",!0)},Kat=Qbe.charAt,gz=function(e,t,n){return t+(n?Kat(e,t).length:1)},Yat=Math.floor,yz=cn("".charAt),Xat=cn("".replace),bz=cn("".slice),Qat=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,Jat=/\$([$&'`]|\d{1,2})/g,Zat=function(e,t,n,r,o,i){var a=n+e.length,l=r.length,s=Jat;return o!==void 0&&(o=Xp(o),s=Qat),Xat(i,s,function(u,c){var d;switch(yz(c,0)){case"$":return"$";case"&":return e;case"`":return bz(t,0,n);case"'":return bz(t,a);case"<":d=o[bz(c,1,-1)];break;default:var f=+c;if(f===0)return u;if(f>l){var p=Yat(f/10);return p===0?u:p<=l?r[p-1]===void 0?yz(c,1):r[p-1]+yz(c,1):u}d=r[f-1]}return d===void 0?"":d})},elt=Mt.TypeError,a8=function(e,t){var n=e.exec;if(Yr(n)){var r=Dr(n,e,t);return r!==null&&ri(r),r}if(Xu(e)==="RegExp")return Dr(i8,e,t);throw elt("RegExp#exec called on incompatible receiver")},Az=So("replace"),tlt=Math.max,nlt=Math.min,rlt=cn([].concat),wz=cn([].push),l3e=cn("".indexOf),s3e=cn("".slice),olt="a".replace(/./,"$0")==="$0",u3e=!!/./[Az]&&/./[Az]("a","$0")==="";mz("replace",function(e,t,n){var r=u3e?"$":"$0";return[function(o,i){var a=uu(this),l=o==null?void 0:iv(o,Az);return l?Dr(l,o,a,i):Dr(t,to(a),o,i)},function(o,i){var a=ri(this),l=to(o);if(typeof i=="string"&&l3e(i,r)===-1&&l3e(i,"$<")===-1){var s=n(t,a,l,i);if(s.done)return s.value}var u=Yr(i);u||(i=to(i));var c=a.global;if(c){var d=a.unicode;a.lastIndex=0}for(var f=[];;){var p=a8(a,l);if(p===null||(wz(f,p),!c))break;to(p[0])===""&&(a.lastIndex=gz(l,F2(a.lastIndex),d))}for(var m,v="",g=0,b=0;b<f.length;b++){for(var y=to((p=f[b])[0]),w=tlt(nlt(X6(p.index),l.length),0),x=[],_=1;_<p.length;_++)wz(x,(m=p[_])===void 0?m:String(m));var E=p.groups;if(u){var C=rlt([y],x,w,l);E!==void 0&&wz(C,E);var T=to(hz(i,void 0,C))}else T=Zat(y,l,w,x,E,i);w>=g&&(v+=s3e(l,g,w)+T,g=w+y.length)}return v+s3e(l,g)}]},!!Lr(function(){var e=/./;return e.exec=function(){var t=[];return t.groups={a:"7"},t},"".replace(e,"$<a>")!=="7"})||!olt||u3e);var xz=function(e,t){return xz=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(n[o]=r[o])},xz(e,t)};function V2(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}xz(e,t),e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var cu=function(){return cu=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},cu.apply(this,arguments)};function du(e){var t=typeof Symbol=="function"&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Er(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(t===void 0||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(l){o={error:l}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function _z(e,t){for(var n=0,r=t.length,o=e.length;n<r;n++,o++)e[o]=t[n];return e}var ilt=0,c3e=function(){this.id=""+ilt++},alt=Ia.set,llt=Ia.getterFor("Array Iterator"),l8=rz(Array,"Array",function(e,t){alt(this,{type:"Array Iterator",target:Zp(e),index:0,kind:t})},function(){var e=llt(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,{value:void 0,done:!0}):n=="keys"?{value:r,done:!1}:n=="values"?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}},"values");L2.Arguments=L2.Array,n8("keys"),n8("values"),n8("entries");var z2=function(e,t,n){for(var r in t)$l(e,r,t[r],n);return e},slt=Mt.Array,ult=Math.max,Ez=function(e,t,n){for(var r=sv(e),o=I2(t,r),i=I2(n===void 0?r:n,r),a=slt(ult(i-o,0)),l=0;o<i;o++,l++)r8(a,l,e[o]);return a.length=l,a},d3e=Z6.f,f3e=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],clt={f:function(e){return f3e&&Xu(e)=="Window"?function(t){try{return d3e(t)}catch{return Ez(f3e)}}(e):d3e(Zp(e))}},p3e=Lr(function(){if(typeof ArrayBuffer=="function"){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}),AC=Object.isExtensible,cv=Lr(function(){AC(1)})||p3e?function(e){return!!uo(e)&&(!p3e||Xu(e)!="ArrayBuffer")&&(!AC||AC(e))}:AC,dlt=!Lr(function(){return Object.isExtensible(Object.preventExtensions({}))}),wC=U6(function(e){var t=Ku.f,n=!1,r=CV("meta"),o=0,i=function(l){t(l,r,{value:{objectID:"O"+o++,weakData:{}}})},a=e.exports={enable:function(){a.enable=function(){},n=!0;var l=Z6.f,s=cn([].splice),u={};u[r]=1,l(u).length&&(Z6.f=function(c){for(var d=l(c),f=0,p=d.length;f<p;f++)if(d[f]===r){s(d,f,1);break}return d},ko({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:clt.f}))},fastKey:function(l,s){if(!uo(l))return typeof l=="symbol"?l:(typeof l=="string"?"S":"P")+l;if(!ni(l,r)){if(!cv(l))return"F";if(!s)return"E";i(l)}return l[r].objectID},getWeakData:function(l,s){if(!ni(l,r)){if(!cv(l))return!0;if(!s)return!1;i(l)}return l[r].weakData},onFreeze:function(l){return dlt&&n&&cv(l)&&!ni(l,r)&&i(l),l}};oC[r]=!0}),flt=Mt.TypeError,xC=function(e,t){this.stopped=e,this.result=t},h3e=xC.prototype,s8=function(e,t,n){var r,o,i,a,l,s,u,c=n&&n.that,d=!(!n||!n.AS_ENTRIES),f=!(!n||!n.IS_ITERATOR),p=!(!n||!n.INTERRUPTED),m=lv(t,c),v=function(b){return r&&QV(r,"normal",b),new xC(!0,b)},g=function(b){return d?(ri(b),p?m(b[0],b[1],v):m(b[0],b[1])):p?m(b,v):m(b)};if(f)r=e;else{if(!(o=JV(e)))throw flt(ZE(e)+" is not iterable");if(zbe(o)){for(i=0,a=sv(e);a>i;i++)if((l=g(e[i]))&&ov(h3e,l))return l;return new xC(!1)}r=Hbe(e,o)}for(s=r.next;!(u=Dr(s,r)).done;){try{l=g(u.value)}catch(b){QV(r,"throw",b)}if(typeof l=="object"&&l&&ov(h3e,l))return l}return new xC(!1)},plt=Mt.TypeError,_C=function(e,t){if(ov(t,e))return e;throw plt("Incorrect invocation")},v3e=function(e,t,n){var r,o;return j2&&Yr(r=t.constructor)&&r!==n&&uo(o=r.prototype)&&o!==n.prototype&&j2(e,o),e},m3e=function(e,t,n){var r=e.indexOf("Map")!==-1,o=e.indexOf("Weak")!==-1,i=r?"set":"add",a=Mt[e],l=a&&a.prototype,s=a,u={},c=function(g){var b=cn(l[g]);$l(l,g,g=="add"?function(y){return b(this,y===0?0:y),this}:g=="delete"?function(y){return!(o&&!uo(y))&&b(this,y===0?0:y)}:g=="get"?function(y){return o&&!uo(y)?void 0:b(this,y===0?0:y)}:g=="has"?function(y){return!(o&&!uo(y))&&b(this,y===0?0:y)}:function(y,w){return b(this,y===0?0:y,w),this})};if(t8(e,!Yr(a)||!(o||l.forEach&&!Lr(function(){new a().entries().next()}))))s=n.getConstructor(t,e,r,i),wC.enable();else if(t8(e,!0)){var d=new s,f=d[i](o?{}:-0,1)!=d,p=Lr(function(){d.has(1)}),m=ZV(function(g){new a(g)}),v=!o&&Lr(function(){for(var g=new a,b=5;b--;)g[i](b,b);return!g.has(-0)});m||((s=t(function(g,b){_C(g,l);var y=v3e(new a,g,s);return b!=null&&s8(b,y[i],{that:y,AS_ENTRIES:r}),y})).prototype=l,l.constructor=s),(p||v)&&(c("delete"),c("has"),r&&c("get")),(v||f)&&c(i),o&&l.clear&&delete l.clear}return u[e]=s,ko({global:!0,forced:s!=a},u),vC(s,e),o||n.setStrong(s,e,r),s},EC=wC.getWeakData,hlt=Ia.set,vlt=Ia.getterFor,mlt=R2.find,glt=R2.findIndex,ylt=cn([].splice),blt=0,CC=function(e){return e.frozen||(e.frozen=new g3e)},g3e=function(){this.entries=[]},Cz=function(e,t){return mlt(e.entries,function(n){return n[0]===t})};g3e.prototype={get:function(e){var t=Cz(this,e);if(t)return t[1]},has:function(e){return!!Cz(this,e)},set:function(e,t){var n=Cz(this,e);n?n[1]=t:this.entries.push([e,t])},delete:function(e){var t=glt(this.entries,function(n){return n[0]===e});return~t&&ylt(this.entries,t,1),!!~t}};var u8,y3e={getConstructor:function(e,t,n,r){var o=e(function(s,u){_C(s,i),hlt(s,{type:t,id:blt++,frozen:void 0}),u!=null&&s8(u,s[r],{that:s,AS_ENTRIES:n})}),i=o.prototype,a=vlt(t),l=function(s,u,c){var d=a(s),f=EC(ri(u),!0);return f===!0?CC(d).set(u,c):f[d.id]=c,s};return z2(i,{delete:function(s){var u=a(this);if(!uo(s))return!1;var c=EC(s);return c===!0?CC(u).delete(s):c&&ni(c,u.id)&&delete c[u.id]},has:function(s){var u=a(this);if(!uo(s))return!1;var c=EC(s);return c===!0?CC(u).has(s):c&&ni(c,u.id)}}),z2(i,n?{get:function(s){var u=a(this);if(uo(s)){var c=EC(s);return c===!0?CC(u).get(s):c?c[u.id]:void 0}},set:function(s,u){return l(this,s,u)}}:{add:function(s){return l(this,s,!0)}}),o}},SC=Ia.enforce,Alt=!Mt.ActiveXObject&&"ActiveXObject"in Mt,b3e=function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}},wlt=m3e("WeakMap",b3e,y3e);if(pbe&&Alt){u8=y3e.getConstructor(b3e,"WeakMap",!0),wC.enable();var c8=wlt.prototype,A3e=cn(c8.delete),kC=cn(c8.has),w3e=cn(c8.get),x3e=cn(c8.set);z2(c8,{delete:function(e){if(uo(e)&&!cv(e)){var t=SC(this);return t.frozen||(t.frozen=new u8),A3e(this,e)||t.frozen.delete(e)}return A3e(this,e)},has:function(e){if(uo(e)&&!cv(e)){var t=SC(this);return t.frozen||(t.frozen=new u8),kC(this,e)||t.frozen.has(e)}return kC(this,e)},get:function(e){if(uo(e)&&!cv(e)){var t=SC(this);return t.frozen||(t.frozen=new u8),kC(this,e)?w3e(this,e):t.frozen.get(e)}return w3e(this,e)},set:function(e,t){if(uo(e)&&!cv(e)){var n=SC(this);n.frozen||(n.frozen=new u8),kC(this,e)?x3e(this,e,t):n.frozen.set(e,t)}else x3e(this,e,t);return this}})}var Sz=So("iterator"),_3e=So("toStringTag"),kz=l8.values,E3e=function(e,t){if(e){if(e[Sz]!==kz)try{Yu(e,Sz,kz)}catch{e[Sz]=kz}if(e[_3e]||Yu(e,_3e,t),aC[t]){for(var n in l8)if(e[n]!==l8[n])try{Yu(e,n,l8[n])}catch{e[n]=l8[n]}}}};for(var Dz in aC)E3e(Mt[Dz]&&Mt[Dz].prototype,Dz);E3e(ybe,"DOMTokenList");var Oz=new WeakMap,Tz=new WeakMap,Mz=new WeakMap,DC=new WeakMap,Nz=new WeakMap,OC=new WeakMap,Fz=new WeakMap,Rz=new WeakMap,TC=new WeakMap,C3e=new WeakMap,S3e=new WeakMap,k3e=new WeakMap,D3e=new WeakMap,d8=new WeakMap,H2=new WeakMap,Iz=new WeakMap,MC=new WeakMap,Bz=new WeakMap,NC=new WeakMap,FC=new WeakMap,O3e=new WeakMap,dv=new WeakMap,Pz=new WeakMap,T3e=new WeakMap,Lz=new WeakMap,xlt=R2.find,M3e=!0;"find"in[]&&Array(1).find(function(){M3e=!1}),ko({target:"Array",proto:!0,forced:M3e},{find:function(e){return xlt(this,e,arguments.length>1?arguments[1]:void 0)}}),n8("find"),ko({global:!0},{globalThis:Mt});const _lt=["area","base","basefont","bgsound","br","col","command","embed","frame","hr","image","img","input","isindex","keygen","link","menuitem","meta","nextid","param","source","track","wbr"];PE&&(Pe.fn.css=PE),au&&(Pe.fn.append=au),m2&&(Pe.fn.addClass=m2),g2&&(Pe.fn.removeClass=g2),y2&&(Pe.fn.hasClass=y2),Yc&&(Pe.fn.on=Yc),$p&&(Pe.fn.focus=$p),iu&&(Pe.fn.attr=iu),FE&&(Pe.fn.removeAttr=FE),A2&&(Pe.fn.hide=A2),BE&&(Pe.fn.show=BE),L2e&&(Pe.fn.offset=L2e),RE&&(Pe.fn.width=RE),IE&&(Pe.fn.height=IE),w2&&(Pe.fn.parent=w2),VE&&(Pe.fn.parents=VE),V2e&&(Pe.fn.is=V2e),b2&&(Pe.fn.dataset=b2),Kc&&(Pe.fn.val=Kc),jE&&(Pe.fn.text=jE),Hp&&(Pe.fn.html=Hp),_2&&(Pe.fn.children=_2),E2&&(Pe.fn.remove=E2),x2&&(Pe.fn.find=x2),LE&&(Pe.fn.each=LE),C2&&(Pe.fn.empty=C2);var ed,Ba,jz=function(e){return e&&e.ownerDocument&&e.ownerDocument.defaultView||null},Qu=function(e){return fv(e)&&e.nodeType===1},fv=function(e){var t=jz(e);return!!t&&e instanceof t.Node},N3e=function(e){var t=e&&e.anchorNode&&jz(e.anchorNode);return!!t&&e instanceof t.Selection},F3e=function(e){return fv(e)&&e.nodeType===3},Vz=function(e){var t,n,r;return(t=window.document.getElementById(e))!==null&&t!==void 0?t:((r=(n=window.document.activeElement)===null||n===void 0?void 0:n.shadowRoot)===null||r===void 0?void 0:r.getElementById(e))||null},R3e=function(e,t,n){for(var r,o=e.childNodes,i=o[t],a=t,l=!1,s=!1;(fv(r=i)&&r.nodeType===8||Qu(i)&&i.childNodes.length===0||Qu(i)&&i.getAttribute("contenteditable")==="false")&&(!l||!s);)a>=o.length?(l=!0,a=t-1,n="backward"):a<0?(s=!0,a=t+1,n="forward"):(i=o[a],t=a,a+=n==="forward"?1:-1);return[i,t]},Elt=function(e,t,n){return Er(R3e(e,t,n),1)[0]},Clt=function e(t){var n,r,o="";if(F3e(t)&&t.nodeValue)return t.nodeValue;if(Qu(t)){try{for(var i=du(Array.from(t.childNodes)),a=i.next();!a.done;a=i.next())o+=e(a.value)}catch(s){n={error:s}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}var l=getComputedStyle(t).getPropertyValue("display");l!=="block"&&l!=="list"&&l!=="table-row"&&t.tagName!=="BR"||(o+=`
| `)}return o};function I3e(e,t){if(!(e instanceof HTMLElement&&e.dataset.slateVoid==="true"))for(var n=e.childNodes,r=n.length;r--;){var o=n[r],i=o.nodeType;i==3?t(o,e):i!=1&&i!=9&&i!=11||I3e(o,t)}}function B3e(e){if(e.length===0)return"";var t=e[0];return t.nodeType!==ed.ELEMENT_NODE?"":t.tagName.toLowerCase()}(Ba=ed||(ed={}))[Ba.ELEMENT_NODE=1]="ELEMENT_NODE",Ba[Ba.TEXT_NODE=3]="TEXT_NODE",Ba[Ba.CDATA_SECTION_NODE=4]="CDATA_SECTION_NODE",Ba[Ba.PROCESSING_INSTRUCTION_NODE=7]="PROCESSING_INSTRUCTION_NODE",Ba[Ba.COMMENT_NODE=8]="COMMENT_NODE",Ba[Ba.DOCUMENT_NODE=9]="DOCUMENT_NODE",Ba[Ba.DOCUMENT_TYPE_NODE=10]="DOCUMENT_TYPE_NODE",Ba[Ba.DOCUMENT_FRAGMENT_NODE=11]="DOCUMENT_FRAGMENT_NODE";var zz=typeof navigator<"u"&&/Mac OS X/.test(navigator.userAgent),f8=typeof navigator<"u"&&/^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent),p8=typeof navigator<"u"&&/Version\/[\d\.]+.*Safari/.test(navigator.userAgent),Slt=typeof navigator<"u"&&/Edge?\/(?:[0-6][0-9]|[0-7][0-8])(?:\.)/i.test(navigator.userAgent),klt=typeof navigator<"u"&&/Chrome?\/(?:[0-7][0-5]|[0-6][0-9])(?:\.)/i.test(navigator.userAgent),Hz=typeof navigator<"u"&&/Chrome/i.test(navigator.userAgent),h8=!klt&&!Slt&&typeof globalThis<"u"&&globalThis.InputEvent&&typeof globalThis.InputEvent.prototype.getTargetRanges=="function",Re={getWindow:function(e){var t=O3e.get(e);if(!t)throw new Error("Unable to find a host window element for this editor");return t},findKey:function(e,t){var n=FC.get(t);return n||(n=new c3e,FC.set(t,n)),n},setNewKey:function(e){var t=new c3e;FC.set(e,t)},findPath:function(e,t){for(var n=[],r=t;;){var o=H2.get(r);if(o==null){if(ue.isEditor(r))return n;break}var i=d8.get(r);if(i==null)break;n.unshift(i),r=o}throw new Error("Unable to find the path for Slate node: "+JSON.stringify(t))},findDocumentOrShadowRoot:function(e){if(e.isDestroyed)return window.document;var t=Re.toDOMNode(e,e),n=t.getRootNode();return(n instanceof Document||n instanceof ShadowRoot)&&n.getSelection!=null?n:t.ownerDocument},getParentNode:function(e,t){return H2.get(t)||null},getParentsNodes:function(e,t){for(var n=[],r=t;r!==e&&r!=null;){var o=Re.getParentNode(e,r);if(o==null)break;n.push(o),r=o}return n},getTopNode:function(e,t){var n=[Re.findPath(e,t)[0]];return Lt.get(e,n)},toDOMNode:function(e,t){var n;if(ue.isEditor(t))n=Iz.get(e);else{var r=Re.findKey(e,t);n=Bz.get(r)}if(!n)throw new Error("Cannot resolve a DOM node from Slate node: "+JSON.stringify(t));return n},hasDOMNode:function(e,t,n){n===void 0&&(n={});var r,o=n.editable,i=o!==void 0&&o,a=Re.toDOMNode(e,e);try{r=Qu(t)?t:t.parentElement}catch(l){if(!l.message.includes('Permission denied to access property "nodeType"'))throw l}return!!r&&r.closest("[data-slate-editor]")===a&&(!i||r.isContentEditable||!!r.getAttribute("data-slate-zero-width"))},toDOMRange:function(e,t){var n=t.anchor,r=t.focus,o=ct.isBackward(t),i=Re.toDOMPoint(e,n),a=ct.isCollapsed(t)?i:Re.toDOMPoint(e,r),l=Re.getWindow(e).document.createRange(),s=Er(o?a:i,2),u=s[0],c=s[1],d=Er(o?i:a,2),f=d[0],p=d[1],m=!!(Qu(u)?u:u.parentElement).getAttribute("data-slate-zero-width"),v=!!(Qu(f)?f:f.parentElement).getAttribute("data-slate-zero-width");return l.setStart(u,m?1:c),l.setEnd(f,v?1:p),l},toDOMPoint:function(e,t){var n,r,o,i=Er(ue.node(e,t.path),1)[0],a=Re.toDOMNode(e,i);ue.void(e,{at:t})&&(t={path:t.path,offset:0});var l=Array.from(a.querySelectorAll("[data-slate-string], [data-slate-zero-width]")),s=0;try{for(var u=du(l),c=u.next();!c.done;c=u.next()){var d=c.value,f=d.childNodes[0];if(f!=null&&f.textContent!=null){var p=f.textContent.length,m=d.getAttribute("data-slate-length"),v=s+(m==null?p:parseInt(m,10));if(t.offset<=v){o=[f,Math.min(p,Math.max(0,t.offset-s))];break}s=v}}}catch(g){n={error:g}}finally{try{c&&!c.done&&(r=u.return)&&r.call(u)}finally{if(n)throw n.error}}if(!o)throw new Error("Cannot resolve a DOM point from Slate point: "+JSON.stringify(t));return o},toSlateNode:function(e,t){var n=Qu(t)?t:t.parentElement;n&&!n.hasAttribute("data-slate-node")&&(n=n.closest("[data-slate-node]"));var r=n?MC.get(n):null;if(!r)throw new Error("Cannot resolve a Slate node from DOM node: "+n);return r},findEventRange:function(e,t){"nativeEvent"in t&&(t=t.nativeEvent);var n=t.clientX,r=t.clientY,o=t.target;if(n==null||r==null)throw new Error("Cannot resolve a Slate range from a DOM event: "+t);var i,a=Re.toSlateNode(e,t.target),l=Re.findPath(e,a);if(ue.isVoid(e,a)){var s=o.getBoundingClientRect(),u=e.isInline(a)?n-s.left<s.left+s.width-n:r-s.top<s.top+s.height-r,c=ue.point(e,l,{edge:u?"start":"end"}),d=u?ue.before(e,c):ue.after(e,c);if(d)return ue.range(e,d)}var f=this.getWindow(e).document;if(f.caretRangeFromPoint)i=f.caretRangeFromPoint(n,r);else{var p=f.caretPositionFromPoint(n,r);p&&((i=f.createRange()).setStart(p.offsetNode,p.offset),i.setEnd(p.offsetNode,p.offset))}if(!i)throw new Error("Cannot resolve a Slate range from a DOM event: "+t);return Re.toSlateRange(e,i,{exactMatch:!1,suppressThrow:!1})},toSlateRange:function(e,t,n){var r,o,i,a,l,s=n.exactMatch,u=n.suppressThrow;if((N3e(t)?t.anchorNode:t.startContainer)&&(N3e(t)?(r=t.anchorNode,o=t.anchorOffset,i=t.focusNode,a=t.focusOffset,l=Hz&&window.document.activeElement&&window.document.activeElement.shadowRoot?t.anchorNode===t.focusNode&&t.anchorOffset===t.focusOffset:t.isCollapsed):(r=t.startContainer,o=t.startOffset,i=t.endContainer,a=t.endOffset,l=t.collapsed)),r==null||i==null||o==null||a==null)throw new Error("Cannot resolve a Slate range from DOM range: "+t);var c=Re.toSlatePoint(e,[r,o],{exactMatch:s,suppressThrow:u});if(!c)return null;var d=l?c:Re.toSlatePoint(e,[i,a],{exactMatch:s,suppressThrow:u});if(!d)return null;var f={anchor:c,focus:d};return ct.isExpanded(f)&&ct.isForward(f)&&Qu(i)&&ue.void(e,{at:f.focus,mode:"highest"})&&(f=ue.unhangRange(e,f,{voids:!0})),f},toSlatePoint:function(e,t,n){var r,o=n.exactMatch,i=n.suppressThrow,a=Er(o?t:function(y){var w,x=Er(y,2),_=x[0],E=x[1];if(Qu(_)&&_.childNodes.length){var C=E===_.childNodes.length,T=C?E-1:E;for(_=(w=Er(R3e(_,T,C?"backward":"forward"),2))[0],C=(T=w[1])<E;Qu(_)&&_.childNodes.length;){var k=C?_.childNodes.length-1:0;_=Elt(_,k,C?"backward":"forward")}E=C&&_.textContent!=null?_.textContent.length:0}return[_,E]}(t),2),l=a[0],s=a[1],u=l.parentNode,c=null,d=0;if(u){var f=u.closest('[data-slate-void="true"]'),p=u.closest("[data-slate-leaf]"),m=null;if(p){c=p.closest('[data-slate-node="text"]');var v=Re.getWindow(e).document.createRange();v.setStart(c,0),v.setEnd(l,s);var g=v.cloneContents();_z(_z([],Er(F2e(g.querySelectorAll("[data-slate-zero-width]")))),Er(F2e(g.querySelectorAll("[contenteditable=false]")))).forEach(function(y){y.parentNode.removeChild(y)}),d=g.textContent.length,m=c}else f&&((p=f.querySelector("[data-slate-leaf]"))?(c=p.closest('[data-slate-node="text"]'),d=(m=p).textContent.length,m.querySelectorAll("[data-slate-zero-width]").forEach(function(y){d-=y.textContent.length})):d=1);m&&d===m.textContent.length&&(u.hasAttribute("data-slate-zero-width")||f8&&(!((r=m.textContent)===null||r===void 0)&&r.endsWith(`
| `)))&&d--}if(!c){if(i)return null;throw new Error("Cannot resolve a Slate point from DOM point: "+t)}var b=Re.toSlateNode(e,c);return{path:Re.findPath(e,b),offset:d}},hasRange:function(e,t){var n=t.anchor,r=t.focus;return ue.hasPath(e,n.path)&&ue.hasPath(e,r.path)},getNodeType:function(e){return sn.isElement(e)?e.type:""},checkNodeType:function(e,t){return this.getNodeType(e)===t},getNodesStr:function(e){return e.map(function(t){return Lt.string(t)}).join("")},getSelectedElems:function(e){var t,n,r=[],o=ue.nodes(e,{universal:!0});try{for(var i=du(o),a=i.next();!a.done;a=i.next()){var l=Er(a.value,1)[0];sn.isElement(l)&&r.push(l)}}catch(s){t={error:s}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return r},getSelectedNodeByType:function(e,t){var n=this,r=Er(ue.nodes(e,{match:function(i){return n.checkNodeType(i,t)},universal:!0}),1),o=r[0];return o==null?null:o[0]},getSelectedTextNode:function(e){var t=Er(ue.nodes(e,{match:function(r){return Qt.isText(r)},universal:!0}),1),n=t[0];return n==null?null:n[0]},isNodeSelected:function(e,t){var n=Er(ue.nodes(e,{match:function(o){return o===t},universal:!0}),1),r=n[0];return r!=null&&Er(r,1)[0]===t},isSelectionAtLineEnd:function(e,t){var n=e.selection;return!!n&&(ue.isEnd(e,n.anchor,t)||ue.isEnd(e,n.focus,t))},getTextarea:function(e){var t=Oz.get(e);if(t==null)throw new Error("Cannot find textarea instance by editor");return t},getToolbar:function(e){return DC.get(e)||null},getHoverbar:function(e){return OC.get(e)||null},normalizeContent:function(e){e.children.forEach(function(t,n){e.normalizeNode([t,[n]])})},getLeftLengthOfMaxLength:function(e){var t=e.getConfig(),n=t.maxLength,r=t.onMaxLength;if(typeof n!="number"||n<=0)return 1/0;var o=n-e.getText().replace(/\r|\n|(\r\n)/g,"").length;return o<=0&&r&&r(e),o},cleanExposedTexNodeInSelectionBlock:function(e){var t,n,r,o,i=Re.getTextarea(e).$textArea,a=i==null?void 0:i[0].childNodes;if(a)try{for(var l=du(Array.from(a)),s=l.next();!s.done;s=l.next()){var u=s.value;if(u.nodeType!==3)break;u.remove()}}catch(v){t={error:v}}finally{try{s&&!s.done&&(n=l.return)&&n.call(l)}finally{if(t)throw t.error}}var c=ue.nodes(e,{match:function(v){return!(!sn.isElement(v)||e.isInline(v))},universal:!0});try{for(var d=du(c),f=d.next();!f.done;f=d.next()){var p=f.value;if(p!=null){var m=p[0];I3e(Re.toDOMNode(e,m),function(v,g){var b=Pe(g);b.attr("data-slate-string")||b.attr("data-slate-zero-width")||b.attr("data-w-e-reserve")||g.removeChild(v)})}}}catch(v){r={error:v}}finally{try{f&&!f.done&&(o=d.return)&&o.call(d)}finally{if(r)throw r.error}}},isLastNode:function(e,t){var n=e.children||[];return n[n.length-1]===t},genEmptyParagraph:function(){return{type:"paragraph",children:[{text:""}]}},isSelectedVoidNode:function(e){var t,n,r=ue.nodes(e,{match:function(l){return e.isVoid(l)}}),o=0;try{for(var i=du(r),a=i.next();!a.done;a=i.next())a.value,o++}catch(l){t={error:l}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return o>0},isSelectedEmptyParagraph:function(e){var t=e.selection;if(t==null||ct.isExpanded(t))return!1;var n=Re.getSelectedNodeByType(e,"paragraph");if(n===null)return!1;var r=n.children;return r.length===1&&(r[0].text===""||void 0)},isEmptyPath:function(e,t){var n=ue.node(e,t);if(n==null)return!1;var r=Er(n,1)[0].children;return r.length===1&&r[0].text===""}},Dlt=1,P3e={},v8={},Olt=R2.filter,Tlt=gC("filter");ko({target:"Array",proto:!0,forced:!Tlt},{filter:function(e){return Olt(this,e,arguments.length>1?arguments[1]:void 0)}});var $z=`
| \v\f\r \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF`,L3e=cn("".replace),RC="["+$z+"]",Mlt=RegExp("^"+RC+RC+"*"),Nlt=RegExp(RC+RC+"*$"),Uz=function(e){return function(t){var n=to(uu(t));return 1&e&&(n=L3e(n,Mlt,"")),2&e&&(n=L3e(n,Nlt,"")),n}},Flt={start:Uz(1),end:Uz(2),trim:Uz(3)},Rlt=N2.PROPER,Ilt=Flt.trim;ko({target:"String",proto:!0,forced:function(e){return Lr(function(){return!!$z[e]()||"\u200B\x85\u180E"[e]()!=="\u200B\x85\u180E"||Rlt&&$z[e].name!==e})}("trim")},{trim:function(){return Ilt(this)}});var Wz=[],j3e={};function Blt(e,t,n){var r=n.isInline(e)?"span":"div";return"<"+r+">"+t+"</"+r+">"}var m8,$2,V3e,Gz,IC=Mt.Promise,z3e=So("species"),qz=function(e){var t=nv(e),n=Ku.f;ta&&t&&!t[z3e]&&n(t,z3e,{configurable:!0,get:function(){return this}})},Plt=Mt.TypeError,Llt=So("species"),H3e=function(e,t){var n,r=ri(e).constructor;return r===void 0||(n=ri(r)[Llt])==null?t:function(o){if(uC(o))return o;throw Plt(ZE(o)+" is not a constructor")}(n)},$3e=cn([].slice),U3e=/(?:ipad|iphone|ipod).*applewebkit/i.test(T2),eh=Xu(Mt.process)=="process",Kz=Mt.setImmediate,Yz=Mt.clearImmediate,jlt=Mt.process,Xz=Mt.Dispatch,Vlt=Mt.Function,W3e=Mt.MessageChannel,zlt=Mt.String,Qz=0,g8={};try{m8=Mt.location}catch{}var Jz=function(e){if(ni(g8,e)){var t=g8[e];delete g8[e],t()}},Zz=function(e){return function(){Jz(e)}},G3e=function(e){Jz(e.data)},q3e=function(e){Mt.postMessage(zlt(e),m8.protocol+"//"+m8.host)};Kz&&Yz||(Kz=function(e){var t=$3e(arguments,1);return g8[++Qz]=function(){hz(Yr(e)?e:Vlt(e),void 0,t)},$2(Qz),Qz},Yz=function(e){delete g8[e]},eh?$2=function(e){jlt.nextTick(Zz(e))}:Xz&&Xz.now?$2=function(e){Xz.now(Zz(e))}:W3e&&!U3e?(Gz=(V3e=new W3e).port2,V3e.port1.onmessage=G3e,$2=lv(Gz.postMessage,Gz)):Mt.addEventListener&&Yr(Mt.postMessage)&&!Mt.importScripts&&m8&&m8.protocol!=="file:"&&!Lr(q3e)?($2=q3e,Mt.addEventListener("message",G3e,!1)):$2="onreadystatechange"in q6("script")?function(e){UV.appendChild(q6("script")).onreadystatechange=function(){UV.removeChild(this),Jz(e)}}:function(e){setTimeout(Zz(e),0)});var y8,pv,b8,U2,eH,tH,nH,K3e,Y3e={set:Kz,clear:Yz},Hlt=/ipad|iphone|ipod/i.test(T2)&&Mt.Pebble!==void 0,$lt=/web0s(?!.*chrome)/i.test(T2),Ult=J6.f,rH=Y3e.set,X3e=Mt.MutationObserver||Mt.WebKitMutationObserver,Q3e=Mt.document,J3e=Mt.process,BC=Mt.Promise,Z3e=Ult(Mt,"queueMicrotask"),e4e=Z3e&&Z3e.value;e4e||(y8=function(){var e,t;for(eh&&(e=J3e.domain)&&e.exit();pv;){t=pv.fn,pv=pv.next;try{t()}catch(n){throw pv?U2():b8=void 0,n}}b8=void 0,e&&e.enter()},U3e||eh||$lt||!X3e||!Q3e?!Hlt&&BC&&BC.resolve?((nH=BC.resolve(void 0)).constructor=BC,K3e=lv(nH.then,nH),U2=function(){K3e(y8)}):eh?U2=function(){J3e.nextTick(y8)}:(rH=lv(rH,Mt),U2=function(){rH(y8)}):(eH=!0,tH=Q3e.createTextNode(""),new X3e(y8).observe(tH,{characterData:!0}),U2=function(){tH.data=eH=!eH}));var oH,t4e,n4e,r4e,o4e=e4e||function(e){var t={fn:e,next:void 0};b8&&(b8.next=t),pv||(pv=t,U2()),b8=t},Wlt=function(e){var t,n;this.promise=new e(function(r,o){if(t!==void 0||n!==void 0)throw TypeError("Bad Promise constructor");t=r,n=o}),this.resolve=Qp(t),this.reject=Qp(n)},iH={f:function(e){return new Wlt(e)}},aH=function(e){try{return{error:!1,value:e()}}catch(t){return{error:!0,value:t}}},Glt=typeof window=="object",i4e=Y3e.set,qlt=So("species"),td="Promise",a4e=Ia.getterFor(td),Klt=Ia.set,Ylt=Ia.getterFor(td),hv=IC&&IC.prototype,nd=IC,A8=hv,l4e=Mt.TypeError,lH=Mt.document,sH=Mt.process,W2=iH.f,Xlt=W2,Qlt=!!(lH&&lH.createEvent&&Mt.dispatchEvent),s4e=Yr(Mt.PromiseRejectionEvent),u4e=!1,w8=t8(td,function(){var e=rC(nd),t=e!==String(nd);if(!t&&W6===66)return!0;if(W6>=51&&/native code/.test(e))return!1;var n=new nd(function(o){o(1)}),r=function(o){o(function(){},function(){})};return(n.constructor={})[qlt]=r,!(u4e=n.then(function(){})instanceof r)||!t&&Glt&&!s4e}),Jlt=w8||!ZV(function(e){nd.all(e).catch(function(){})}),c4e=function(e){var t;return!(!uo(e)||!Yr(t=e.then))&&t},uH=function(e,t){if(!e.notified){e.notified=!0;var n=e.reactions;o4e(function(){for(var r=e.value,o=e.state==1,i=0;n.length>i;){var a,l,s,u=n[i++],c=o?u.ok:u.fail,d=u.resolve,f=u.reject,p=u.domain;try{c?(o||(e.rejection===2&&est(e),e.rejection=1),c===!0?a=r:(p&&p.enter(),a=c(r),p&&(p.exit(),s=!0)),a===u.promise?f(l4e("Promise-chain cycle")):(l=c4e(a))?Dr(l,a,d,f):d(a)):f(r)}catch(m){p&&!s&&p.exit(),f(m)}}e.reactions=[],e.notified=!1,t&&!e.rejection&&Zlt(e)})}},d4e=function(e,t,n){var r,o;Qlt?((r=lH.createEvent("Event")).promise=t,r.reason=n,r.initEvent(e,!1,!0),Mt.dispatchEvent(r)):r={promise:t,reason:n},!s4e&&(o=Mt["on"+e])?o(r):e==="unhandledrejection"&&function(i,a){var l=Mt.console;l&&l.error&&(arguments.length==1?l.error(i):l.error(i,a))}("Unhandled promise rejection",n)},Zlt=function(e){Dr(i4e,Mt,function(){var t,n=e.facade,r=e.value;if(f4e(e)&&(t=aH(function(){eh?sH.emit("unhandledRejection",r,n):d4e("unhandledrejection",n,r)}),e.rejection=eh||f4e(e)?2:1,t.error))throw t.value})},f4e=function(e){return e.rejection!==1&&!e.parent},est=function(e){Dr(i4e,Mt,function(){var t=e.facade;eh?sH.emit("rejectionHandled",t):d4e("rejectionhandled",t,e.value)})},G2=function(e,t,n){return function(r){e(t,r,n)}},q2=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=2,uH(e,!0))},cH=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw l4e("Promise can't be resolved itself");var r=c4e(t);r?o4e(function(){var o={done:!1};try{Dr(r,t,G2(cH,o,e),G2(q2,o,e))}catch(i){q2(o,i,e)}}):(e.value=t,e.state=1,uH(e,!1))}catch(o){q2({done:!1},o,e)}}};if(w8&&(A8=(nd=function(e){_C(this,A8),Qp(e),Dr(oH,this);var t=a4e(this);try{e(G2(cH,t),G2(q2,t))}catch(n){q2(t,n)}}).prototype,(oH=function(e){Klt(this,{type:td,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=z2(A8,{then:function(e,t){var n=Ylt(this),r=n.reactions,o=W2(H3e(this,nd));return o.ok=!Yr(e)||e,o.fail=Yr(t)&&t,o.domain=eh?sH.domain:void 0,n.parent=!0,r[r.length]=o,n.state!=0&&uH(n,!1),o.promise},catch:function(e){return this.then(void 0,e)}}),t4e=function(){var e=new oH,t=a4e(e);this.promise=e,this.resolve=G2(cH,t),this.reject=G2(q2,t)},iH.f=W2=function(e){return e===nd||e===n4e?new t4e(e):Xlt(e)},Yr(IC)&&hv!==Object.prototype)){r4e=hv.then,u4e||($l(hv,"then",function(e,t){var n=this;return new nd(function(r,o){Dr(r4e,n,r,o)}).then(e,t)},{unsafe:!0}),$l(hv,"catch",A8.catch,{unsafe:!0}));try{delete hv.constructor}catch{}j2&&j2(hv,A8)}ko({global:!0,wrap:!0,forced:w8},{Promise:nd}),vC(nd,td,!1),qz(td),n4e=nv(td),ko({target:td,stat:!0,forced:w8},{reject:function(e){var t=W2(this);return Dr(t.reject,void 0,e),t.promise}}),ko({target:td,stat:!0,forced:w8},{resolve:function(e){return function(t,n){if(ri(t),uo(n)&&n.constructor===t)return n;var r=iH.f(t);return(0,r.resolve)(n),r.promise}(this,e)}}),ko({target:td,stat:!0,forced:Jlt},{all:function(e){var t=this,n=W2(t),r=n.resolve,o=n.reject,i=aH(function(){var a=Qp(t.resolve),l=[],s=0,u=1;s8(e,function(c){var d=s++,f=!1;u++,Dr(a,t,c).then(function(p){f||(f=!0,l[d]=p,--u||r(l))},o)}),--u||r(l)});return i.error&&o(i.value),n.promise},race:function(e){var t=this,n=W2(t),r=n.reject,o=aH(function(){var i=Qp(t.resolve);s8(e,function(a){Dr(i,t,a).then(n.resolve,r)})});return o.error&&r(o.value),n.promise}});var K2=yC.UNSUPPORTED_Y,tst=Math.min,p4e=[].push,nst=cn(/./.exec),Y2=cn(p4e),x8=cn("".slice);function fu(e){Promise.resolve().then(e)}function h4e(e,t){return sn.isElement(e)?function(n,r){var o=n.type,i=o===void 0?"":o,a=n.children,l=a===void 0?[]:a,s=ue.isVoid(r,n),u="";s||(u=l.map(function(b){return h4e(b,r)}).join(""));var c=function(b){return j3e[b]||Blt}(i),d=c(n,u,r),f="";if(f=typeof d=="string"?d:d.html||"",s||Wz.forEach(function(b){return f=b(n,f)}),typeof d=="string")return f;var p=d.prefix,m=p===void 0?"":p,v=d.suffix,g=v===void 0?"":v;return m&&(f=m+f),g&&(f+=g),f}(e,t):function(n,r){var o=n.text;if(o==null)throw new Error("Current node is not slate Text "+JSON.stringify(n));var i=o;i=function(s){return s.replace(/ {2}/g," ").replace(/</g,"<").replace(/>/g,">").replace(/®/g,"®").replace(/©/g,"©").replace(/™/g,"™")}(i);var a=Re.getParentsNodes(r,n).some(function(s){return Re.getNodeType(s)==="pre"});if(a||(i=i.replace(/\r\n|\r|\n/g,"<br>")),a&&(i=i.replace(/ /g," ")),i===""){var l=Re.getParentNode(null,n);if(!l||l.children.length!==0)return i;i="<br>"}return Wz.forEach(function(s){return i=s(n,i)}),i}(e,t)}function v4e(e){return"w-e-element-"+e}mz("split",function(e,t,n){var r;return r="abbc".split(/(b)*/)[1]=="c"||"test".split(/(?:)/,-1).length!=4||"ab".split(/(?:ab)*/).length!=2||".".split(/(.?)(.?)/).length!=4||".".split(/()()/).length>1||"".split(/.?/).length?function(o,i){var a=to(uu(this)),l=i===void 0?4294967295:i>>>0;if(l===0)return[];if(o===void 0)return[a];if(!KV(o))return Dr(t,a,o,l);for(var s,u,c,d=[],f=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(o.sticky?"y":""),p=0,m=new RegExp(o.source,f+"g");(s=Dr(i8,m,a))&&!((u=m.lastIndex)>p&&(Y2(d,x8(a,p,s.index)),s.length>1&&s.index<a.length&&hz(p4e,d,Ez(s,1)),c=s[0].length,p=u,d.length>=l));)m.lastIndex===s.index&&m.lastIndex++;return p===a.length?!c&&nst(m,"")||Y2(d,""):Y2(d,x8(a,p)),d.length>l?Ez(d,0,l):d}:"0".split(void 0,0).length?function(o,i){return o===void 0&&i===0?[]:Dr(t,this,o,i)}:t,[function(o,i){var a=uu(this),l=o==null?void 0:iv(o,e);return l?Dr(l,o,a,i):Dr(r,to(a),o,i)},function(o,i){var a=ri(this),l=to(o),s=n(r,a,l,i,r!==t);if(s.done)return s.value;var u=H3e(a,RegExp),c=a.unicode,d=(a.ignoreCase?"i":"")+(a.multiline?"m":"")+(a.unicode?"u":"")+(K2?"g":"y"),f=new u(K2?"^(?:"+a.source+")":a,d),p=i===void 0?4294967295:i>>>0;if(p===0)return[];if(l.length===0)return a8(f,l)===null?[l]:[];for(var m=0,v=0,g=[];v<l.length;){f.lastIndex=K2?0:v;var b,y=a8(f,K2?x8(l,v):l);if(y===null||(b=tst(F2(f.lastIndex+(K2?v:0)),l.length))===m)v=gz(l,v,c);else{if(Y2(g,x8(l,m,v)),g.length===p)return g;for(var w=1;w<=y.length-1;w++)if(Y2(g,y[w]),g.length===p)return g;v=m=b}}return Y2(g,x8(l,m)),g}]},!!Lr(function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return n.length!==2||n[0]!=="a"||n[1]!=="b"}),K2);var m4e=function(e,t){var n=(t.top+t.bottom)/2;return e.top<=n&&e.bottom>=n},g4e=function(e,t,n){var r=Re.toDOMRange(e,t).getBoundingClientRect(),o=Re.toDOMRange(e,n).getBoundingClientRect();return m4e(r,o)&&m4e(o,r)},y4e=["span","b","strong","i","em","s","strike","u","font","sub","sup"],b4e=[],dH=[],PC={},rst=Ku.f,ost=Z6.f,ist=Ia.enforce,ast=So("match"),cf=Mt.RegExp,X2=cf.prototype,lst=Mt.SyntaxError,sst=cn(HV),ust=cn(X2.exec),LC=cn("".charAt),A4e=cn("".replace),w4e=cn("".indexOf),cst=cn("".slice),dst=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,vv=/a/g,fH=/a/g,fst=new cf(vv)!==vv,x4e=yC.MISSED_STICKY,pst=yC.UNSUPPORTED_Y,hst=ta&&(!fst||x4e||lz||sz||Lr(function(){return fH[ast]=!1,cf(vv)!=vv||cf(fH)==fH||cf(vv,"i")!="/a/i"}));if(t8("RegExp",hst)){for(var th=function(e,t){var n,r,o,i,a,l,s=ov(X2,this),u=KV(e),c=t===void 0,d=[],f=e;if(!s&&u&&c&&e.constructor===th)return e;if((u||ov(X2,e))&&(e=e.source,c&&(t="flags"in f?f.flags:sst(f))),e=e===void 0?"":to(e),t=t===void 0?"":to(t),f=e,lz&&"dotAll"in vv&&(r=!!t&&w4e(t,"s")>-1)&&(t=A4e(t,/s/g,"")),n=t,x4e&&"sticky"in vv&&(o=!!t&&w4e(t,"y")>-1)&&pst&&(t=A4e(t,/y/g,"")),sz&&(i=function(p){for(var m,v=p.length,g=0,b="",y=[],w={},x=!1,_=!1,E=0,C="";g<=v;g++){if((m=LC(p,g))==="\\")m+=LC(p,++g);else if(m==="]")x=!1;else if(!x)switch(!0){case m==="[":x=!0;break;case m==="(":ust(dst,cst(p,g+1))&&(g+=2,_=!0),b+=m,E++;continue;case(m===">"&&_):if(C===""||ni(w,C))throw new lst("Invalid capture group name");w[C]=!0,y[y.length]=[C,E],_=!1,C="";continue}_?C+=m:b+=m}return[b,y]}(e),e=i[0],d=i[1]),a=v3e(cf(e,t),s?this:X2,th),(r||o||d.length)&&(l=ist(a),r&&(l.dotAll=!0,l.raw=th(function(p){for(var m,v=p.length,g=0,b="",y=!1;g<=v;g++)(m=LC(p,g))!=="\\"?y||m!=="."?(m==="["?y=!0:m==="]"&&(y=!1),b+=m):b+="[\\s\\S]":b+=m+LC(p,++g);return b}(e),n)),o&&(l.sticky=!0),d.length&&(l.groups=d)),e!==f)try{Yu(a,"source",f===""?"(?:)":f)}catch{}return a},vst=function(e){e in th||rst(th,e,{configurable:!0,get:function(){return cf[e]},set:function(t){cf[e]=t}})},_4e=ost(cf),E4e=0;_4e.length>E4e;)vst(_4e[E4e++]);X2.constructor=th,th.prototype=X2,$l(Mt,"RegExp",th)}qz("RegExp");var mst=new RegExp("\xA0","g");function C4e(e){return e.replace(mst," ")}function S4e(e,t){var n=e.length;if(n){var r=e[n-1];if(Qt.isText(r)){var o=Object.keys(r);if(o.length===1&&o[0]==="text")return r.text=r.text+t,!0}}return!1}function gst(e,t,n){return{type:"paragraph",children:[{text:Pe(e).text().replace(/\s+/gm," ")}]}}function pH(e,t){var n=function(i,a){var l=[];if(i.attr("data-w-e-is-void")!=null)return l;var s=i[0].childNodes;return s.length===1&&s[0].nodeName==="BR"?(l.push({text:""}),l):(s.forEach(function(u){if(u.nodeType!==ed.ELEMENT_NODE){if(u.nodeType===ed.TEXT_NODE){var c=u.textContent||"";if(c.trim()===""&&c.indexOf(`
| `)>=0)return;c&&(c=C4e(c),S4e(l,c)||l.push({text:c}))}}else{if(u.nodeName==="BR")return void(S4e(l,`
| `)||l.push({text:`
| `}));var d=vH(Pe(u),a);Array.isArray(d)?d.forEach(function(f){return l.push(f)}):l.push(d)}}),l)}(e,t),r=function(i){for(var a in PC)if(i[0].matches(a))return PC[a];return gst}(e),o=r(e[0],n,t);return Array.isArray(o)||(o=[o]),o.forEach(function(i){ue.isVoid(t,i)||(n.length===0&&(i.children=[{text:e.text().replace(/\s+/gm," ")}]),dH.forEach(function(a){i=a(e[0],i,t)}))}),o}function hH(e,t){e.parents("pre").length===0&&(e[0].innerHTML=e[0].innerHTML.replace(/\s+/gm," ").replace(/<br>/g,`
| `));var n=e[0].textContent||"";n=function(o){return o.replace(/ /g," ").replace(/</g,"<").replace(/>/g,">").replace(/®/g,"\xAE").replace(/©/g,"\xA9").replace(/™/g,"\u2122").replace(/"/g,'"')}(n);var r={text:n=C4e(n)};return dH.forEach(function(o){r=o(e[0],r,t)}),r}function vH(e,t){b4e.forEach(function(r){var o=r.selector,i=r.preParseHtml;e[0].matches(o)&&(e=Pe(i(e[0])))});var n=B3e(e);return n==="span"?e.attr("data-w-e-type")?pH(e,t):hH(e,t):n==="code"?B3e(e.parent())==="pre"?pH(e,t):hH(e,t):y4e.includes(n)?hH(e,t):pH(e,t)}function k4e(e,t,n){var r=Pe(n);return!!r.attr(t)||(r.attr(t,"true"),e.on("destroyed",function(){r.removeAttr(t)}),!1)}function D4e(e,t){t===void 0&&(t="");var n=[];t===""&&(t="<p><br></p>"),t.indexOf("<")!==0&&(t=t.split(/\n/).map(function(o){return"<p>"+o+"</p>"}).join(""));var r=Pe("<div>"+t+"</div>");return Array.from(r.children()).forEach(function(o){var i=vH(Pe(o),e);Array.isArray(i)?i.forEach(function(a){return n.push(a)}):n.push(i)}),n}var yst=Ku.f,O4e=wC.fastKey,T4e=Ia.set,mH=Ia.getterFor,bst={getConstructor:function(e,t,n,r){var o=e(function(u,c){_C(u,i),T4e(u,{type:t,index:pC(null),first:void 0,last:void 0,size:0}),ta||(u.size=0),c!=null&&s8(c,u[r],{that:u,AS_ENTRIES:n})}),i=o.prototype,a=mH(t),l=function(u,c,d){var f,p,m=a(u),v=s(u,c);return v?v.value=d:(m.last=v={index:p=O4e(c,!0),key:c,value:d,previous:f=m.last,next:void 0,removed:!1},m.first||(m.first=v),f&&(f.next=v),ta?m.size++:u.size++,p!=="F"&&(m.index[p]=v)),u},s=function(u,c){var d,f=a(u),p=O4e(c);if(p!=="F")return f.index[p];for(d=f.first;d;d=d.next)if(d.key==c)return d};return z2(i,{clear:function(){for(var u=a(this),c=u.index,d=u.first;d;)d.removed=!0,d.previous&&(d.previous=d.previous.next=void 0),delete c[d.index],d=d.next;u.first=u.last=void 0,ta?u.size=0:this.size=0},delete:function(u){var c=this,d=a(c),f=s(c,u);if(f){var p=f.next,m=f.previous;delete d.index[f.index],f.removed=!0,m&&(m.next=p),p&&(p.previous=m),d.first==f&&(d.first=p),d.last==f&&(d.last=m),ta?d.size--:c.size--}return!!f},forEach:function(u){for(var c,d=a(this),f=lv(u,arguments.length>1?arguments[1]:void 0);c=c?c.next:d.first;)for(f(c.value,c.key,this);c&&c.removed;)c=c.previous},has:function(u){return!!s(this,u)}}),z2(i,n?{get:function(u){var c=s(this,u);return c&&c.value},set:function(u,c){return l(this,u===0?0:u,c)}}:{add:function(u){return l(this,u=u===0?0:u,u)}}),ta&&yst(i,"size",{get:function(){return a(this).size}}),o},setStrong:function(e,t,n){var r=t+" Iterator",o=mH(t),i=mH(r);rz(e,t,function(a,l){T4e(this,{type:r,target:a,state:o(a),kind:l,last:void 0})},function(){for(var a=i(this),l=a.kind,s=a.last;s&&s.removed;)s=s.previous;return a.target&&(a.last=s=s?s.next:a.state.first)?l=="keys"?{value:s.key,done:!1}:l=="values"?{value:s.value,done:!1}:{value:[s.key,s.value],done:!1}:(a.target=void 0,{value:void 0,done:!0})},n?"entries":"values",!n,!0),qz(t)}};m3e("Set",function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}},bst);var M4e=new Set(["doctype","!doctype","meta","script","style","link","frame","iframe","title","svg"]);function N4e(e,t){e.isInline(t)?(e.insertNode(t),t.type==="link"&&e.insertFragment([{text:""}])):et.insertNodes(e,t,{mode:"highest"})}var Ast=function(e){var t=e,n=t.insertText;return t.insertFragment,t.setFragmentData=function(r){var o=t.selection;if(o){var i=Er(ct.edges(o),2),a=i[0],l=i[1],s=ue.void(t,{at:a.path}),u=ue.void(t,{at:l.path});if(!ct.isCollapsed(o)||s){var c=Re.toDOMRange(t,o),d=c.cloneContents(),f=d.childNodes[0];if(d.childNodes.forEach(function(_){_.textContent&&_.textContent.trim()!==""&&(f=_)}),u){var p=Er(u,1)[0],m=c.cloneRange(),v=Re.toDOMNode(t,p);m.setEndAfter(v),d=m.cloneContents()}if(s&&(f=d.querySelector("[data-slate-spacer]")),Array.from(d.querySelectorAll("[data-slate-zero-width]")).forEach(function(_){var E=_.getAttribute("data-slate-zero-width")==="n";_.textContent=E?`
| `:""}),F3e(f)){var g=f.ownerDocument.createElement("span");g.style.whiteSpace="pre",g.appendChild(f),d.appendChild(g),f=g}var b=t.getFragment(),y=JSON.stringify(b),w=window.btoa(encodeURIComponent(y));f.setAttribute("data-slate-fragment",w),r.setData("application/x-slate-fragment",w);var x=d.ownerDocument.createElement("div");return x.appendChild(d),x.setAttribute("hidden","true"),d.ownerDocument.body.appendChild(x),r.setData("text/html",x.innerHTML),r.setData("text/plain",Clt(x)),d.ownerDocument.body.removeChild(x),r}}},t.insertData=function(r){var o,i,a=r.getData("application/x-slate-fragment");if(a){var l=decodeURIComponent(window.atob(a)),s=JSON.parse(l);t.insertFragment(s)}else{var u=r.getData("text/plain"),c=r.getData("text/html");if(c)t.dangerouslyInsertHtml(c);else if(u){var d=u.split(/\r\n|\r|\n/),f=!1;try{for(var p=du(d),m=p.next();!m.done;m=p.next()){var v=m.value;f&&et.splitNodes(t,{always:!0}),n(v),f=!0}}catch(g){o={error:g}}finally{try{m&&!m.done&&(i=p.return)&&i.call(p)}finally{if(o)throw o.error}}}}},t},_8=function(e){return e!=null},wst={object:!0,function:!0,undefined:!0},xst=/^\s*class[\s{/}]/,_st=Function.prototype.toString,F4e=function(e){return!!function(t){if(typeof t!="function"||!hasOwnProperty.call(t,"length"))return!1;try{if(typeof t.length!="number"||typeof t.call!="function"||typeof t.apply!="function")return!1}catch{return!1}return!function(n){if(!function(r){return!!_8(r)&&hasOwnProperty.call(wst,typeof r)}(n))return!1;try{return!!n.constructor&&n.constructor.prototype===n}catch{return!1}}(t)}(e)&&!xst.test(_st.call(e))},gH=function(e){return e!=null},Est=Object.keys,Cst=function(){try{return Object.keys("primitive"),!0}catch{return!1}}()?Object.keys:function(e){return Est(gH(e)?Object(e):e)},Sst=Math.max,R4e=function(){var e,t=Object.assign;return typeof t=="function"&&(t(e={foo:"raz"},{bar:"dwa"},{trzy:"trzy"}),e.foo+e.bar+e.trzy==="razdwatrzy")}()?Object.assign:function(e,t){var n,r,o,i=Sst(arguments.length,2);for(e=Object(function(a){if(!gH(a))throw new TypeError("Cannot use null or undefined");return a}(e)),o=function(a){try{e[a]=t[a]}catch(l){n||(n=l)}},r=1;r<i;++r)Cst(t=arguments[r]).forEach(o);if(n!==void 0)throw n;return e},kst=Array.prototype.forEach,Dst=Object.create,I4e=function(e){var t=Dst(null);return kst.call(arguments,function(n){gH(n)&&function(r,o){var i;for(i in r)o[i]=r[i]}(Object(n),t)}),t},yH="razdwatrzy",Ost=String.prototype.indexOf,E8=typeof yH.contains=="function"&&yH.contains("dwa")===!0&&yH.contains("foo")===!1?String.prototype.contains:function(e){return Ost.call(this,e,arguments[1])>-1},jC=U6(function(e){var t=e.exports=function(n,r){var o,i,a,l,s;return arguments.length<2||typeof n!="string"?(l=r,r=n,n=null):l=arguments[2],_8(n)?(o=E8.call(n,"c"),i=E8.call(n,"e"),a=E8.call(n,"w")):(o=a=!0,i=!1),s={value:r,configurable:o,enumerable:i,writable:a},l?R4e(I4e(l),s):s};t.gs=function(n,r,o){var i,a,l,s;return typeof n!="string"?(l=o,o=r,r=n,n=null):l=arguments[3],_8(r)?F4e(r)?_8(o)?F4e(o)||(l=o,o=void 0):o=void 0:(l=r,r=o=void 0):r=void 0,_8(n)?(i=E8.call(n,"c"),a=E8.call(n,"e")):(i=!0,a=!1),s={get:r,set:o,configurable:i,enumerable:a},l?R4e(I4e(l),s):s}}),bH=function(e){if(typeof e!="function")throw new TypeError(e+" is not a function");return e},Tst=U6(function(e,t){var n,r,o,i,a,l,s,u=Function.prototype.apply,c=Function.prototype.call,d=Object.create,f=Object.defineProperty,p=Object.defineProperties,m=Object.prototype.hasOwnProperty,v={configurable:!0,enumerable:!1,writable:!0};n=function(g,b){var y;return bH(b),m.call(this,"__ee__")?y=this.__ee__:(y=v.value=d(null),f(this,"__ee__",v),v.value=null),y[g]?typeof y[g]=="object"?y[g].push(b):y[g]=[y[g],b]:y[g]=b,this},r=function(g,b){var y,w;return bH(b),w=this,n.call(this,g,y=function(){o.call(w,g,y),u.call(b,this,arguments)}),y.__eeOnceListener__=b,this},o=function(g,b){var y,w,x,_;if(bH(b),!m.call(this,"__ee__"))return this;if(!(y=this.__ee__)[g])return this;if(typeof(w=y[g])=="object")for(_=0;x=w[_];++_)x!==b&&x.__eeOnceListener__!==b||(w.length===2?y[g]=w[_?0:1]:w.splice(_,1));else w!==b&&w.__eeOnceListener__!==b||delete y[g];return this},i=function(g){var b,y,w,x,_;if(m.call(this,"__ee__")&&(x=this.__ee__[g]))if(typeof x=="object"){for(y=arguments.length,_=new Array(y-1),b=1;b<y;++b)_[b-1]=arguments[b];for(x=x.slice(),b=0;w=x[b];++b)u.call(w,this,_)}else switch(arguments.length){case 1:c.call(x,this);break;case 2:c.call(x,this,arguments[1]);break;case 3:c.call(x,this,arguments[1],arguments[2]);break;default:for(y=arguments.length,_=new Array(y-1),b=1;b<y;++b)_[b-1]=arguments[b];u.call(x,this,_)}},a={on:n,once:r,off:o,emit:i},l={on:jC(n),once:jC(r),off:jC(o),emit:jC(i)},s=p({},l),e.exports=t=function(g){return g==null?d(s):p(Object(g),l)},t.methods=a});function VC(e){var t=T3e.get(e);return t==null&&(t=Tst(),T3e.set(e,t)),t}var zC=new WeakMap;function B4e(e,t){var n=zC.get(e);n==null&&(n=new Set,zC.set(e,n)),n.add(t)}function AH(e){var t=Re.getTextarea(e).$textAreaContainer,n=t.width(),r=t.height(),o=t.offset();return{top:o.top,left:o.left,width:n,height:r}}function wH(e){var t={top:"0",left:"0"},n=e.selection;if(n==null)return t;var r=AH(e);if(r==null)return t;var o=r.top,i=r.left,a=r.width,l=r.height,s=Re.toDOMRange(e,n).getClientRects()[0];if(s==null)return t;s.width;var u=s.height,c={},d=s.top-o,f=s.left-i;if(f>a/2){var p=a-f;c.right=p+5+"px"}else c.left=f+5+"px";if(d>l/2){var m=l-d;c.bottom=m+5+"px"}else{var v=d+u;v<0&&(v=0),c.top=v+5+"px"}return c}function xH(e,t,n){n===void 0&&(n="modal");var r={top:"0",left:"0"};if(e.selection==null)return r;var o=sn.isElement(t)&&e.isVoid(t),i=sn.isElement(t)&&e.isInline(t),a=NC.get(t);if(a==null)return r;var l=a.getBoundingClientRect(),s=l.top,u=l.left,c=l.height,d=l.width;if(o){var f=function(C){var T=[];T.push(C);for(var k=0;T.length>0;){var I=T.pop();if(I==null||++k>1e4)break;var O=I.nodeName;if(I.nodeType===1){var F=O.toLowerCase();if(_lt.includes(F)||F==="iframe"||F==="video")return I;var N=I.children||[],B=N.length;if(B)for(var P=B-1;P>=0;P--)T.push(N[P])}}return null}(a);if(f!=null){var p=f.getBoundingClientRect();s=p.top,c=p.height}}var m=AH(e);if(m==null)return r;var v,g=m.top,b=m.left,y=m.width,w=m.height,x={},_=s-g,E=u-b;if(n==="bar")return x.left=E+"px",_>40?x.bottom=w-_+5+"px":x.top=_+c+5+"px",x;if(n==="modal")return o?i?E>(y-d)/2?x.right=y-E+5+"px":x.left=E+d+5+"px":x.left="20px":x.left=E+"px",o?((v=_)<0&&(v=0),x.top=v+"px"):_>(w-c)/2?x.bottom=w-_+5+"px":((v=_+c)<0&&(v=0),x.top=v+5+"px"),x;throw new Error("type '"+n+"' is invalid")}function _H(e,t){fu(function(){var n=AH(e);if(n!=null){var r,o=n.top,i=n.left,a=n.width,l=n.height,s=t.offset(),u=s.top,c=s.left,d=t.width(),f=t.height(),p=u-o,m=c-i,v=t.attr("style");if(v.indexOf("top")>=0&&(r=p+f-l)>0){var g=t.css("top"),b=parseInt(g.toString())-r;b<0&&(b=0),t.css("top",b+"px")}if(v.indexOf("bottom")>=0&&u<0){var y=t.css("bottom"),w=parseInt(y.toString())-Math.abs(u);t.css("bottom",w+"px")}if(v.indexOf("left")>=0&&(r=m+d-a)>0){var x=t.css("left"),_=parseInt(x.toString())-r;_<0&&(_=0),t.css("left",_+"px")}if(v.indexOf("right")>=0&&c<0){var E=t.css("right"),C=parseInt(E.toString())-Math.abs(c);t.css("right",C+"px")}}})}var Mst=gC("slice"),Nst=So("species"),EH=Mt.Array,Fst=Math.max;ko({target:"Array",proto:!0,forced:!Mst},{slice:function(e,t){var n,r,o,i=Zp(this),a=sv(i),l=I2(e,a),s=I2(t===void 0?a:t,a);if(sC(i)&&(n=i.constructor,(uC(n)&&(n===EH||sC(n.prototype))||uo(n)&&(n=n[Nst])===null)&&(n=void 0),n===EH||n===void 0))return $3e(i,l,s);for(r=new(n===void 0?EH:n)(Fst(s-l,0)),o=0;l<s;l++,o++)l in i&&r8(r,o,i[l]);return r.length=o,r}});var Rst=J6.f,P4e=cn("".startsWith),Ist=cn("".slice),Bst=Math.min,L4e=XV("startsWith"),Pst=!L4e&&!!function(){var e=Rst(String.prototype,"startsWith");return e&&!e.writable}();ko({target:"String",proto:!0,forced:!Pst&&!L4e},{startsWith:function(e){var t=to(uu(this));YV(e);var n=F2(Bst(arguments.length>1?arguments[1]:void 0,t.length)),r=to(e);return P4e?P4e(t,r,n):Ist(t,n,n+r.length)===r}});var Q2=Object.assign,j4e=Object.defineProperty,Lst=cn([].concat),V4e=!Q2||Lr(function(){if(ta&&Q2({b:1},Q2(j4e({},"a",{enumerable:!0,get:function(){j4e(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(o){t[o]=o}),Q2({},e)[n]!=7||B2(Q2({},t)).join("")!=r})?function(e,t){for(var n=Xp(e),r=arguments.length,o=1,i=Ibe.f,a=Obe.f;r>o;)for(var l,s=lC(arguments[o++]),u=i?Lst(B2(s),i(s)):B2(s),c=u.length,d=0;c>d;)l=u[d++],ta&&!Dr(a,s,l)||(n[l]=s[l]);return n}:Q2;ko({target:"Object",stat:!0,forced:Object.assign!==V4e},{assign:V4e});var jst=["props","attrs","style","dataset","on","hook"];function z4e(e){var t=e.data,n=t===void 0?{}:t,r=e.children,o=r===void 0?[]:r;Object.keys(n).forEach(function(i){var a,l,s=n[i];if(i!=="key"){if(!jst.includes(i)){if(i.startsWith("data-")){var u=i.slice(5);return u=wrt(u),function(c,d){c.data==null&&(c.data={});var f=c.data;f.dataset==null&&(f.dataset={}),Object.assign(f.dataset,d)}(e,((a={})[u]=s,a)),void delete n[i]}(function(c,d){c.data==null&&(c.data={});var f=c.data;f.props==null&&(f.props={}),Object.assign(f.props,d)})(e,(l={},l[i]=s,l)),delete n[i]}}else e.key=s}),o.length>0&&o.forEach(function(i){typeof i!="string"&&z4e(i)})}var CH=[],H4e={};function Vst(e,t,n){return Mn(n.isInline(e)?"span":"div",null,t)}function $4e(e,t){return t===void 0&&(t=!1),Mn("span",{"data-slate-string":!0},t?e+`
| `:e)}function SH(e,t){return e===void 0&&(e=0),t===void 0&&(t=!1),Mn("span",{"data-slate-zero-width":t?"n":"z","data-slate-length":e},"\uFEFF",t?Mn("br",null):null)}function kH(e,t,n,r){return d8.set(e,t),H2.set(e,n),sn.isElement(e)?function(o,i){var a,l=Re.findKey(i,o),s=i.isInline(o),u=ue.isVoid(i,o),c=v4e(l.id),d={id:c,key:l.id,"data-slate-node":"element","data-slate-inline":s},f=o.type,p=o.children,m=p===void 0?[]:p,v=function(_){return H4e[_]||Vst}(f);a=u?null:m.map(function(_,E){return kH(_,E,o,i)});var g=v(o,a,i);if(u){d["data-slate-void"]=!0;var b=s?"span":"div",y=Er(Lt.texts(o),1),w=Er(y[0],1)[0],x=Mn(b,{"data-slate-spacer":!0,style:{height:"0",color:"transparent",outline:"none",position:"absolute"}},kH(w,0,o,i));g=Mn(b,{style:{position:"relative"}},g,x),d8.set(w,0),H2.set(w,o)}return g.data==null&&(g.data={}),Object.assign(g.data,d),u||s||(g=function(_,E){var C=E;return CH.forEach(function(T){C=T(_,E)}),C}(o,g)),fu(function(){var _=Vz(c);_!=null&&(Bz.set(l,_),NC.set(o,_),MC.set(_,o))}),g}(e,r):function(o,i,a){if(o.text==null)throw new Error("Current node is not slate Text "+JSON.stringify(o));var l=Re.findKey(a,o),s=a.getConfig().decorate;if(s==null)throw new Error("Can not get config.decorate");var u=Re.findPath(a,o),c=s([o,u]),d=Qt.decorations(o,c),f=d.map(function(v,g){var b=function(y,w,x,_,E){w===void 0&&(w=!1);var C=y.text,T=Re.findPath(E,x),k=qe.parent(T);if(ue.isEditor(_))throw new Error("Text node "+JSON.stringify(x)+" parent is Editor");return E.isVoid(_)?SH(Lt.string(_).length):C!==""||_.children[_.children.length-1]!==x||E.isInline(_)||ue.string(E,k)!==""?C===""?SH():w&&C.slice(-1)===`
| `?$4e(C,!0):$4e(C):SH(0,!0)}(v,g===d.length-1,o,i,a);return b=function(y,w){var x=w;return CH.forEach(function(_){x=_(y,x)}),x}(v,b),Mn("span",{"data-slate-leaf":!0},b)}),p=function(v){return"w-e-text-"+v}(l.id),m=Mn("span",{"data-slate-node":"text",id:p,key:l.id},f);return fu(function(){var v=Vz(p);v!=null&&(Bz.set(l,v),NC.set(o,v),MC.set(v,o))}),m}(e,n,r)}function zst(e,t){var n,r=e.$scroll,o=function(v){return"w-e-textarea-"+v}(e.id),i=t.getConfig(),a=i.readOnly,l=i.autoFocus,s=function(v,g){return g===void 0&&(g=!1),S2("div#"+v,{props:{contentEditable:!g}})}(o,a),u=t.children||[];s.children=u.map(function(v,g){var b=kH(v,g,t,t);return z4e(b),b});var c=S3e.get(e);if(c==null&&(c=!0),c){var d=function(v){return Pe(`<div
| id="`+v+`"
| data-slate-editor
| data-slate-node="value"
| suppressContentEditableWarning
| role="textarea"
| spellCheck="true"
| autoCorrect="true"
| autoCapitalize="true"
| ></div>`)}(o);r.append(d),e.$textArea=d,n=d[0],(p=Knt([Xnt,ert,nrt,Qnt,Znt,Ynt]))(n,s),S3e.set(e,!1),k3e.set(e,p)}else{var f=D3e.get(e),p=k3e.get(e);if(f==null||p==null)return;n=f.elm,p(f,s)}if(n!=null||(n=Vz(o))!=null){if((c?l:t.isFocused())&&n.focus({preventScroll:!0}),c){var m=jz(n);m&&O3e.set(t,m)}Iz.set(t,n),NC.set(t,n),MC.set(n,t),D3e.set(e,s)}}function U4e(e){return typeof e=="object"&&e!=null&&e.nodeType===1}function W4e(e,t){return(!t||e!=="hidden")&&e!=="visible"&&e!=="clip"}function DH(e,t){if(e.clientHeight<e.scrollHeight||e.clientWidth<e.scrollWidth){var n=getComputedStyle(e,null);return W4e(n.overflowY,t)||W4e(n.overflowX,t)||function(r){var o=function(i){if(!i.ownerDocument||!i.ownerDocument.defaultView)return null;try{return i.ownerDocument.defaultView.frameElement}catch{return null}}(r);return!!o&&(o.clientHeight<r.scrollHeight||o.clientWidth<r.scrollWidth)}(e)}return!1}function HC(e,t,n,r,o,i,a,l){return i<e&&a>t||i>e&&a<t?0:i<=e&&l<=n||a>=t&&l>=n?i-e-r:a>t&&l<n||i<e&&l>n?a-t+o:0}function G4e(e,t){var n=window,r=t.scrollMode,o=t.block,i=t.inline,a=t.boundary,l=t.skipOverflowHiddenElements,s=typeof a=="function"?a:function(J){return J!==a};if(!U4e(e))throw new TypeError("Invalid target");for(var u=document.scrollingElement||document.documentElement,c=[],d=e;U4e(d)&&s(d);){if((d=d.parentElement)===u){c.push(d);break}d!=null&&d===document.body&&DH(d)&&!DH(document.documentElement)||d!=null&&DH(d,l)&&c.push(d)}for(var f=n.visualViewport?n.visualViewport.width:innerWidth,p=n.visualViewport?n.visualViewport.height:innerHeight,m=window.scrollX||pageXOffset,v=window.scrollY||pageYOffset,g=e.getBoundingClientRect(),b=g.height,y=g.width,w=g.top,x=g.right,_=g.bottom,E=g.left,C=o==="start"||o==="nearest"?w:o==="end"?_:w+b/2,T=i==="center"?E+y/2:i==="end"?x:E,k=[],I=0;I<c.length;I++){var O=c[I],F=O.getBoundingClientRect(),N=F.height,B=F.width,P=F.top,V=F.right,L=F.bottom,H=F.left;if(r==="if-needed"&&w>=0&&E>=0&&_<=p&&x<=f&&w>=P&&_<=L&&E>=H&&x<=V)return k;var U=getComputedStyle(O),G=parseInt(U.borderLeftWidth,10),z=parseInt(U.borderTopWidth,10),$=parseInt(U.borderRightWidth,10),W=parseInt(U.borderBottomWidth,10),K=0,X=0,te="offsetWidth"in O?O.offsetWidth-O.clientWidth-G-$:0,ne="offsetHeight"in O?O.offsetHeight-O.clientHeight-z-W:0;if(u===O)K=o==="start"?C:o==="end"?C-p:o==="nearest"?HC(v,v+p,p,z,W,v+C,v+C+b,b):C-p/2,X=i==="start"?T:i==="center"?T-f/2:i==="end"?T-f:HC(m,m+f,f,G,$,m+T,m+T+y,y),K=Math.max(0,K+v),X=Math.max(0,X+m);else{K=o==="start"?C-P-z:o==="end"?C-L+W+ne:o==="nearest"?HC(P,L,N,z,W+ne,C,C+b,b):C-(P+N/2)+ne/2,X=i==="start"?T-H-G:i==="center"?T-(H+B/2)+te/2:i==="end"?T-V+$+te:HC(H,V,B,G,$+te,T,T+y,y);var se=O.scrollLeft,le=O.scrollTop;C+=le-(K=Math.max(0,Math.min(le+K,O.scrollHeight-N+ne))),T+=se-(X=Math.max(0,Math.min(se+X,O.scrollWidth-B+te)))}k.push({el:O,top:K,left:X})}return k}function q4e(e){return e===Object(e)&&Object.keys(e).length!==0}function pu(e,t){return fv(t)&&Re.hasDOMNode(e,t,{editable:!0})}function K4e(e,t){if(e.getConfig().readOnly)return!1;var n=J2(e,t)&&Re.toSlateNode(e,t);return ue.isVoid(e,n)}function J2(e,t){return fv(t)&&Re.hasDOMNode(e,t)}function Y4e(e,t,n){n===void 0&&(n=!1);var r=t.selection,o=t.getConfig(),i=Re.findDocumentOrShadowRoot(t).getSelection();if(i&&(!e.isComposing||n)&&t.isFocused()){var a=i.type!=="None";if(r||a){var l=Iz.get(t),s=!1;if(l.contains(i.anchorNode)&&l.contains(i.focusNode)&&(s=!0),a&&s&&r){var u=Re.toSlateRange(t,i,{exactMatch:!0,suppressThrow:!0});if(u&&ct.equals(u,r)){var c=!0;if(ct.isCollapsed(r)){var d=i.anchorNode,f=i.anchorOffset;if(d===l){var p=l.childNodes,m=void 0;(m=p[f])&&m.matches("table")&&(c=!1),(m=p[f-1])&&m.matches("table")&&(c=!1)}}if(c)return}}if(!r||Re.hasRange(t,r)){e.isUpdatingSelection=!0;var v=r&&Re.toDOMRange(t,r);if(v){ct.isBackward(r)?i.setBaseAndExtent(v.endContainer,v.endOffset,v.startContainer,v.startOffset):i.setBaseAndExtent(v.startContainer,v.startOffset,v.endContainer,v.endOffset);var g=v.startContainer.parentElement;if(!g.closest("[data-slate-spacer]")){g.getBoundingClientRect=v.getBoundingClientRect.bind(v);var b=document.body;(function(y,w){var x=!y.ownerDocument.documentElement.contains(y);if(q4e(w)&&typeof w.behavior=="function")return w.behavior(x?[]:G4e(y,w));if(!x){var _=function(E){return E===!1?{block:"end",inline:"nearest"}:q4e(E)?E:{block:"start",inline:"nearest"}}(w);(function(E,C){C===void 0&&(C="auto");var T="scrollBehavior"in document.body.style;E.forEach(function(k){var I=k.el,O=k.top,F=k.left;I.scroll&&T?I.scroll({top:O,left:F,behavior:C}):(I.scrollTop=O,I.scrollLeft=F)})})(G4e(y,_),_.behavior)}})(g,{scrollMode:"if-needed",boundary:o.scroll?l.parentElement:b,block:"end",behavior:"smooth"}),delete g.getBoundingClientRect}}else i.removeAllRanges();setTimeout(function(){v&&f8&&l.focus(),e.isUpdatingSelection=!1})}else t.selection=Re.toSlateRange(t,i,{exactMatch:!1,suppressThrow:!1})}}}var OH=new WeakMap,X4e=new WeakMap,Hst={bold:"mod+b",compose:["down","left","right","up","backspace","enter"],moveBackward:"left",moveForward:"right",moveWordBackward:"ctrl+left",moveWordForward:"ctrl+right",deleteBackward:"shift?+backspace",deleteForward:"shift?+delete",extendBackward:"shift+left",extendForward:"shift+right",italic:"mod+i",splitBlock:"shift?+enter",undo:"mod+z",tab:"tab",selectAll:"mod+a"},$st={moveLineBackward:"opt+up",moveLineForward:"opt+down",moveWordBackward:"opt+left",moveWordForward:"opt+right",deleteBackward:["ctrl+backspace","ctrl+h"],deleteForward:["ctrl+delete","ctrl+d"],deleteLineBackward:"cmd+shift?+backspace",deleteLineForward:["cmd+shift?+delete","ctrl+k"],deleteWordBackward:"opt+shift?+backspace",deleteWordForward:"opt+shift?+delete",extendLineBackward:"opt+shift+up",extendLineForward:"opt+shift+down",redo:"cmd+shift+z",transposeCharacter:"ctrl+t"},Ust={deleteWordBackward:"ctrl+shift?+backspace",deleteWordForward:"ctrl+shift?+delete",redo:["ctrl+y","ctrl+shift+z"]},go=function(e){var t=Hst[e],n=$st[e],r=Ust[e],o=t&&eV(t),i=n&&eV(n),a=r&&eV(r);return function(l){return!(!o||!o(l))||!!(zz&&i&&i(l))||!(zz||!a||!a(l))}},Do={isBold:go("bold"),isCompose:go("compose"),isMoveBackward:go("moveBackward"),isMoveForward:go("moveForward"),isDeleteBackward:go("deleteBackward"),isDeleteForward:go("deleteForward"),isDeleteLineBackward:go("deleteLineBackward"),isDeleteLineForward:go("deleteLineForward"),isDeleteWordBackward:go("deleteWordBackward"),isDeleteWordForward:go("deleteWordForward"),isExtendBackward:go("extendBackward"),isExtendForward:go("extendForward"),isExtendLineBackward:go("extendLineBackward"),isExtendLineForward:go("extendLineForward"),isItalic:go("italic"),isMoveLineBackward:go("moveLineBackward"),isMoveLineForward:go("moveLineForward"),isMoveWordBackward:go("moveWordBackward"),isMoveWordForward:go("moveWordForward"),isRedo:go("redo"),isSplitBlock:go("splitBlock"),isTransposeCharacter:go("transposeCharacter"),isUndo:go("undo"),isTab:go("tab"),isSelectAll:go("selectAll")};function wi(e){e.preventDefault()}var Wst={beforeinput:function(e,t,n){var r=e,o=n.getConfig().readOnly;if(h8&&!o&&pu(n,r.target)){var i=n.selection,a=r.inputType,l=r.dataTransfer||r.data||void 0;if(a!=="insertCompositionText"&&a!=="deleteCompositionText"){if(r.preventDefault(),!a.startsWith("delete")||a.startsWith("deleteBy")){var s=Er(r.getTargetRanges(),1)[0];if(s){var u=Re.toSlateRange(n,s,{exactMatch:!1,suppressThrow:!1});i&&ct.equals(i,u)||et.select(n,u)}}if(i&&ct.isExpanded(i)&&a.startsWith("delete")){var c=a.endsWith("Backward")?"backward":"forward";ue.deleteFragment(n,{direction:c})}else switch(a){case"deleteByComposition":case"deleteByCut":case"deleteByDrag":ue.deleteFragment(n);break;case"deleteContent":case"deleteContentForward":ue.deleteForward(n);break;case"deleteContentBackward":ue.deleteBackward(n);break;case"deleteEntireSoftLine":ue.deleteBackward(n,{unit:"line"}),ue.deleteForward(n,{unit:"line"});break;case"deleteHardLineBackward":ue.deleteBackward(n,{unit:"block"});break;case"deleteSoftLineBackward":ue.deleteBackward(n,{unit:"line"});break;case"deleteHardLineForward":ue.deleteForward(n,{unit:"block"});break;case"deleteSoftLineForward":ue.deleteForward(n,{unit:"line"});break;case"deleteWordBackward":ue.deleteBackward(n,{unit:"word"});break;case"deleteWordForward":ue.deleteForward(n,{unit:"word"});break;case"insertLineBreak":case"insertParagraph":ue.insertBreak(n);break;case"insertFromDrop":case"insertFromPaste":case"insertFromYank":case"insertReplacementText":case"insertText":if(a==="insertFromPaste"&&!Lz.get(n))break;l instanceof DataTransfer?n.insertData(l):typeof l=="string"&&ue.insertText(n,l)}}}},blur:function(e,t,n){var r=e,o=t.isUpdatingSelection,i=t.latestElement;if(!n.getConfig().readOnly&&!o&&pu(n,r.target)){var a=Re.findDocumentOrShadowRoot(n);if(i!==a.activeElement){var l=r.relatedTarget;if(!(l===Re.toDOMNode(n,n)||Qu(l)&&l.hasAttribute("data-slate-spacer"))){if(l!=null&&fv(l)&&Re.hasDOMNode(n,l)){var s=Re.toSlateNode(n,l);if(sn.isElement(s)&&!n.isVoid(s))return}if(p8){var u=a.getSelection();u==null||u.removeAllRanges()}dv.delete(n)}}}},focus:function(e,t,n){var r=Re.toDOMNode(n,n),o=Re.findDocumentOrShadowRoot(n);t.latestElement=o.activeElement,f8&&e.target!==r?r.focus():dv.set(n,!0)},click:function(e,t,n){if(!n.getConfig().readOnly&&J2(n,e.target)&&fv(e.target)){var r=Re.toSlateNode(n,e.target),o=Re.findPath(n,r);if(ue.hasPath(n,o)&&Lt.get(n,o)===r){var i=ue.start(n,o),a=ue.end(n,o),l=ue.void(n,{at:i}),s=ue.void(n,{at:a});if(l&&s&&qe.equals(l[1],s[1])){var u=ue.range(n,i);et.select(n,u)}}}},compositionstart:function(e,t,n){if(pu(n,e.target)){var r=n.selection;if(r&&ct.isExpanded(r)&&(ue.deleteFragment(n),Promise.resolve().then(function(){Y4e(t,n,!0)})),r&&ct.isCollapsed(r)){var o=Re.toDOMRange(n,r).startContainer,i=o.textContent||"";OH.set(n,i),X4e.set(n,o)}t.isComposing=!0,function(a,l){var s;l.getConfig().placeholder&&l.isEmpty()&&a.showPlaceholder&&((s=a.$placeholder)===null||s===void 0||s.hide(),a.showPlaceholder=!1)}(t,n)}},compositionend:function(e,t,n){var r=e;if(pu(n,r.target)){t.isComposing=!1;var o=n.selection;if(o!=null){(Hz||f8)&&Re.cleanExposedTexNodeInSelectionBlock(n);for(var i=ct.isBackward(o)?o.focus:o.anchor,a=Er(ue.node(n,[i.path[0]]),1)[0],l=0;l<i.path.length;l++){var s=Er(ue.node(n,i.path.slice(0,l+1)),1)[0];if(sn.isElement(s)&&((p8||f8)&&s.type==="link"||s.type==="code")){Re.setNewKey(a);break}}var u=r.data;if(u){if(n.getConfig().maxLength){var c=Re.getLeftLengthOfMaxLength(n);c<u.length?(Re.toDOMRange(n,o).startContainer.textContent=OH.get(n)||"",c>0&&ue.insertText(n,u.slice(0,c)),t.changeViewState()):ue.insertText(n,u)}else ue.insertText(n,u);p8||setTimeout(function(){var d=n.selection;if(d!=null){var f=X4e.get(n);f!=null&&Re.toDOMRange(n,d).startContainer!==f&&(f.textContent=OH.get(n)||"")}})}}}},compositionupdate:function(e,t,n){pu(n,e.target)&&(t.isComposing=!0)},keydown:function(e,t,n){var r=e,o=n.selection;if(!n.getConfig().readOnly&&!t.isComposing&&pu(n,r.target)){if(function(a,l){var s=DC.get(a),u=s&&s.getMenus(),c=OC.get(a),d=c&&c.getMenus(),f=cu(cu({},u),d);for(var p in f){var m=f[p],v=m.hotkey;if(v&&Ert(v,l)&&!m.isDisabled(a)){var g=m.getValue(a);m.exec(a,g)}}}(n,r),Do.isTab(r))return wi(r),void n.handleTab();if(Do.isRedo(r))return wi(r),void(typeof n.redo=="function"&&n.redo());if(Do.isUndo(r))return wi(r),void(typeof n.undo=="function"&&n.undo());if(Do.isMoveLineBackward(r))return wi(r),void et.move(n,{unit:"line",reverse:!0});if(Do.isMoveLineForward(r))return wi(r),void et.move(n,{unit:"line"});if(Do.isExtendLineBackward(r))return wi(r),void et.move(n,{unit:"line",edge:"focus",reverse:!0});if(Do.isExtendLineForward(r))return wi(r),void et.move(n,{unit:"line",edge:"focus"});if(Do.isMoveBackward(r))return wi(r),void(o&&ct.isCollapsed(o)?et.move(n,{reverse:!0}):et.collapse(n,{edge:"start"}));if(Do.isMoveForward(r))return wi(r),void(o&&ct.isCollapsed(o)?et.move(n):et.collapse(n,{edge:"end"}));if(Do.isMoveWordBackward(r))return wi(r),o&&ct.isExpanded(o)&&et.collapse(n,{edge:"focus"}),void et.move(n,{unit:"word",reverse:!0});if(Do.isMoveWordForward(r))return wi(r),o&&ct.isExpanded(o)&&et.collapse(n,{edge:"focus"}),void et.move(n,{unit:"word"});if(Do.isSelectAll(r))return wi(r),void n.selectAll();if(h8){if((Hz||p8)&&o&&(Do.isDeleteBackward(r)||Do.isDeleteForward(r))&&ct.isCollapsed(o)){var i=Lt.parent(n,o.anchor.path);if(sn.isElement(i)&&ue.isVoid(n,i)&&ue.isInline(n,i))return r.preventDefault(),void et.delete(n,{unit:"block"})}}else{if(Do.isBold(r)||Do.isItalic(r)||Do.isTransposeCharacter(r))return void wi(r);if(Do.isSplitBlock(r))return wi(r),void ue.insertBreak(n);if(Do.isDeleteBackward(r))return wi(r),void(o&&ct.isExpanded(o)?ue.deleteFragment(n,{direction:"backward"}):ue.deleteBackward(n));if(Do.isDeleteForward(r))return wi(r),void(o&&ct.isExpanded(o)?ue.deleteFragment(n,{direction:"forward"}):ue.deleteForward(n));if(Do.isDeleteLineBackward(r))return wi(r),void(o&&ct.isExpanded(o)?ue.deleteFragment(n,{direction:"backward"}):ue.deleteBackward(n,{unit:"line"}));if(Do.isDeleteLineForward(r))return wi(r),void(o&&ct.isExpanded(o)?ue.deleteFragment(n,{direction:"forward"}):ue.deleteForward(n,{unit:"line"}));if(Do.isDeleteWordBackward(r))return wi(r),void(o&&ct.isExpanded(o)?ue.deleteFragment(n,{direction:"backward"}):ue.deleteBackward(n,{unit:"word"}));if(Do.isDeleteWordForward(r))return wi(r),void(o&&ct.isExpanded(o)?ue.deleteFragment(n,{direction:"forward"}):ue.deleteForward(n,{unit:"word"}))}}},keypress:function(e,t,n){if(!h8&&!n.getConfig().readOnly&&pu(n,e.target)){e.preventDefault();var r=e.key;ue.insertText(n,r)}},copy:function(e,t,n){var r=e;if(pu(n,r.target)){r.preventDefault();var o=r.clipboardData;o!=null&&n.setFragmentData(o)}},cut:function(e,t,n){var r=e,o=n.selection;if(!n.getConfig().readOnly&&pu(n,r.target)){r.preventDefault();var i=r.clipboardData;if(i!=null&&(n.setFragmentData(i),o))if(ct.isExpanded(o))ue.deleteFragment(n);else{var a=Lt.parent(n,o.anchor.path);ue.isVoid(n,a)&&et.delete(n)}}},paste:function(e,t,n){Lz.set(n,!0);var r=e;if(!n.getConfig().readOnly&&pu(n,r.target)){var o=n.getConfig().customPaste;if(o&&o(n,r)===!1)return void Lz.set(n,!1);if(!h8||function(a){return a.clipboardData&&a.clipboardData.getData("text/plain")!==""&&a.clipboardData.types.length===1}(r)){r.preventDefault();var i=r.clipboardData;i!=null&&n.insertData(i)}}},dragover:function(e,t,n){if(J2(n,e.target)){var r=Re.toSlateNode(n,e.target);ue.isVoid(n,r)&&e.preventDefault()}},dragstart:function(e,t,n){var r=e;if(J2(n,r.target)&&!n.getConfig().readOnly){var o=Re.toSlateNode(n,r.target),i=Re.findPath(n,o);if(ue.isVoid(n,o)||ue.void(n,{at:i,voids:!0})){var a=ue.range(n,i);et.select(n,a)}var l=r.dataTransfer;l!=null&&(t.isDraggingInternally=!0,n.setFragmentData(l))}},dragend:function(e,t,n){var r=e;n.getConfig().readOnly||t.isDraggingInternally&&J2(n,r.target)&&(t.isDraggingInternally=!1)},drop:function(e,t,n){var r=e,o=r.dataTransfer;if(!n.getConfig().readOnly&&J2(n,r.target)&&o!=null&&!(h8&&p8&&o.files.length>0)){r.preventDefault();var i=n.selection,a=Re.findEventRange(n,r);et.select(n,a),t.isDraggingInternally&&(i&&et.delete(n,{at:i}),t.isDraggingInternally=!1),n.insertData(o),n.isFocused()||n.focus()}}},Gst=1,qst=function(){function e(t){var n=this;this.id=Gst++,this.$textArea=null,this.$progressBar=Pe('<div class="w-e-progress-bar"></div>'),this.$maxLengthInfo=Pe('<div class="w-e-max-length-info"></div>'),this.isComposing=!1,this.isUpdatingSelection=!1,this.isDraggingInternally=!1,this.latestElement=null,this.showPlaceholder=!1,this.$placeholder=null,this.latestEditorSelection=null,this.onDOMSelectionChange=Y1(function(){var a=n.editorInstance;(function(l,s){var u=l.isComposing,c=l.isUpdatingSelection,d=l.isDraggingInternally;if(!(s.getConfig().readOnly||u||c||d)){var f=Re.findDocumentOrShadowRoot(s),p=f.activeElement,m=Re.toDOMNode(s,s),v=f.getSelection();if(p===m?(l.latestElement=p,dv.set(s,!0)):dv.delete(s),!v)return et.deselect(s);var g=v.anchorNode,b=v.focusNode,y=pu(s,g)||K4e(s,g),w=pu(s,b)||K4e(s,b);if(y&&w){var x=Re.toSlateRange(s,v,{exactMatch:!1,suppressThrow:!1});et.select(s,x)}else et.deselect(s)}})(n,a)},100);var r=Pe(t);if(r.length===0)throw new Error("Cannot find textarea DOM by selector '"+t+"'");this.$box=r;var o=Pe('<div class="w-e-text-container"></div>');o.append(this.$progressBar),o.append(this.$maxLengthInfo),r.append(o);var i=Pe('<div class="w-e-scroll"></div>');o.append(i),this.$scroll=i,this.$textAreaContainer=o,fu(function(){var a=n.editorInstance,l=Re.getWindow(a);l.document.addEventListener("selectionchange",n.onDOMSelectionChange),a.on("destroyed",function(){l.document.removeEventListener("selectionchange",n.onDOMSelectionChange)}),o.on("click",function(){return a.hidePanelOrModal()}),a.on("change",n.changeViewState.bind(n));var s=a.getConfig().onChange;s&&a.on("change",function(){return s(a)}),n.onFocusAndOnBlur(),a.on("change",n.changeMaxLengthInfo.bind(n)),n.bindEvent()})}return Object.defineProperty(e.prototype,"editorInstance",{get:function(){var t=Tz.get(this);if(t==null)throw new Error("Can not get editor instance");return t},enumerable:!1,configurable:!0}),e.prototype.bindEvent=function(){var t=this,n=this.$textArea,r=this.$scroll,o=this.editorInstance;n!=null&&(Hj(Wst,function(i,a){n.on(a,function(l){i(l,t,o)})}),o.getConfig().scroll&&(r.css("overflow-y","auto"),r.on("scroll",Y1(function(){o.emit("scroll")},100))))},e.prototype.onFocusAndOnBlur=function(){var t=this,n=this.editorInstance,r=n.getConfig(),o=r.onBlur,i=r.onFocus;this.latestEditorSelection=n.selection,n.on("change",function(){t.latestEditorSelection==null&&n.selection!=null?setTimeout(function(){return i&&i(n)}):t.latestEditorSelection!=null&&n.selection==null&&setTimeout(function(){return o&&o(n)}),t.latestEditorSelection=n.selection})},e.prototype.changeMaxLengthInfo=function(){var t=this.editorInstance,n=t.getConfig().maxLength;if(n){var r=n-Re.getLeftLengthOfMaxLength(t);this.$maxLengthInfo[0].innerHTML=r+"/"+n}},e.prototype.changeProgress=function(t){var n=this.$progressBar;n.css("width",t+"%"),t>=100&&setTimeout(function(){n.hide(),n.css("width","0"),n.show()},1e3)},e.prototype.changeViewState=function(){var t=this,n=this.editorInstance;zst(this,n),function(r,o){var i,a=o.getConfig().placeholder;if(a){var l=o.isEmpty();if(l&&!r.showPlaceholder&&!r.isComposing){if(r.$placeholder==null){var s=Pe('<div class="w-e-text-placeholder">'+a+"</div>");r.$textAreaContainer.append(s),r.$placeholder=s}return r.$placeholder.show(),void(r.showPlaceholder=!0)}!l&&r.showPlaceholder&&((i=r.$placeholder)===null||i===void 0||i.hide(),r.showPlaceholder=!1)}}(this,n),fu(function(){Y4e(t,n)})},e.prototype.destroy=function(){this.$textAreaContainer.remove()},e}();function TH(e){e.removeAttr("width"),e.removeAttr("height"),e.removeAttr("fill"),e.removeAttr("class"),e.removeAttr("t"),e.removeAttr("p-id");var t=e.children();t.length&&TH(t)}function MH(){return Pe('<svg viewBox="0 0 1024 1024"><path d="M498.7 655.8l-197.6-268c-8.1-10.9-0.3-26.4 13.3-26.4h395.2c13.6 0 21.4 15.4 13.3 26.4l-197.6 268c-6.6 9-20 9-26.6 0z"></path></svg>')}function Q4e(){return Pe('<div class="w-e-bar-divider"></div>')}function J4e(e,t,n,r,o){if(o===void 0&&(o=!1),t){if(r){var i=zz?"cmd":"ctrl";r=r.replace("mod",i)}if(o)r&&(e.attr("data-tooltip",r),e.addClass("w-e-menu-tooltip-v5"),e.addClass("tooltip-right"));else{var a=r?n+`
| `+r:n;e.attr("data-tooltip",a),e.addClass("w-e-menu-tooltip-v5")}}}mz("match",function(e,t,n){return[function(r){var o=uu(this),i=r==null?void 0:iv(r,e);return i?Dr(i,r,o):new RegExp(r)[e](to(o))},function(r){var o=ri(this),i=to(r),a=n(t,o,i);if(a.done)return a.value;if(!o.global)return a8(o,i);var l=o.unicode;o.lastIndex=0;for(var s,u=[],c=0;(s=a8(o,i))!==null;){var d=to(s[0]);u[c]=d,d===""&&(o.lastIndex=gz(i,F2(o.lastIndex),l)),c++}return c===0?null:u}]});var NH=function(){function e(t,n,r){var o=this;r===void 0&&(r=!1),this.$elem=Pe('<div class="w-e-bar-item"></div>'),this.$button=Pe('<button type="button"></button>'),this.disabled=!1,this.menu=n;var i=n.tag,a=n.width;if(i!=="button")throw new Error("Invalid tag '"+i+"', expected 'button'");var l=n.title,s=n.hotkey,u=s===void 0?"":s,c=n.iconSvg,d=c===void 0?"":c,f=this.$button;if(d){var p=Pe(d);TH(p),f.append(p)}else f.text(l);J4e(f,d,l,u,r),r&&d&&f.append(Pe('<span class="title">'+l+"</span>")),a&&f.css("width",a+"px"),f.attr("data-menu-key",t),this.$elem.append(f),fu(function(){return o.init()})}return e.prototype.init=function(){var t=this;this.setActive(),this.setDisabled(),this.$button.on("click",function(n){n.preventDefault(),Os(t).hidePanelOrModal(),t.disabled||(t.exec(),t.onButtonClick())})},e.prototype.exec=function(){var t=Os(this),n=this.menu,r=n.getValue(t);n.exec(t,r)},e.prototype.setActive=function(){var t=Os(this),n=this.$button,r="active";this.menu.isActive(t)?n.addClass(r):n.removeClass(r)},e.prototype.setDisabled=function(){var t=Os(this),n=this.$button,r=this.menu.isDisabled(t);(t.selection==null||t.isDisabled())&&(r=!0),this.menu.alwaysEnable&&(r=!1);var o="disabled";r?n.addClass(o):n.removeClass(o),this.disabled=r},e.prototype.changeMenuState=function(){this.setActive(),this.setDisabled()},e}(),Kst=function(e){function t(n,r,o){return o===void 0&&(o=!1),e.call(this,n,r,o)||this}return V2(t,e),t.prototype.onButtonClick=function(){},t}(NH),FH=function(){function e(t){this.isShow=!1,this.showTime=0,this.record(t)}return e.prototype.record=function(t){var n=Rz.get(t);n==null&&(n=new Set,Rz.set(t,n)),n.add(this),TC.set(this,t)},e.prototype.renderContent=function(t){var n=this.$elem;n.empty(),n.append(t);var r=this.genSelfElem();r&&n.append(r)},e.prototype.appendTo=function(t){var n=this.$elem;t.append(n)},e.prototype.show=function(){if(!this.isShow){this.showTime=Date.now(),this.$elem.show(),this.isShow=!0;var t=TC.get(this);t&&t.emit("modalOrPanelShow",this)}},e.prototype.hide=function(){if(this.isShow&&!(Date.now()-this.showTime<200)){this.$elem.hide(),this.isShow=!1;var t=TC.get(this);t&&t.emit("modalOrPanelHide")}},e}(),Yst=function(e){function t(n){var r=e.call(this,n)||this;return r.type="dropPanel",r.$elem=Pe('<div class="w-e-drop-panel"></div>'),r}return V2(t,e),t.prototype.genSelfElem=function(){return null},t}(FH),Xst=function(e){function t(n,r,o){o===void 0&&(o=!1);var i=e.call(this,n,r,o)||this;if(i.dropPanel=null,i.menu=r,r.showDropPanel){var a=MH();i.$button.append(a)}return i}return V2(t,e),t.prototype.onButtonClick=function(){this.menu.showDropPanel&&this.handleDropPanel()},t.prototype.handleDropPanel=function(){var n=this.menu;if(n.getPanelContentElem!=null){var r=Os(this);if(this.dropPanel==null){var o=new Yst(r),i=n.getPanelContentElem(r);o.renderContent(i),o.appendTo(this.$elem),o.show(),this.dropPanel=o}else{var a=this.dropPanel;a.isShow?a.hide():(i=n.getPanelContentElem(r),a.renderContent(i),a.show())}var l=this.dropPanel;if(l.isShow){var s=this.$elem,u=s.offset().left,c=s.parents(".w-e-bar");u-c.offset().left>=c.width()/2?l.$elem.css({left:"none",right:"0"}):l.$elem.css({left:"0",right:"none"})}}},t}(NH),Qst=function(e){function t(n,r){r===void 0&&(r=0);var o=e.call(this,n)||this;o.type="modal",o.$elem=Pe('<div class="w-e-modal"></div>'),o.width=0,r&&(o.width=r);var i=o.$elem;return i.on("click",function(a){return a.stopPropagation()}),i.on("keyup",function(a){a.code==="Escape"&&(o.hide(),n.restoreSelection())}),o}return V2(t,e),t.prototype.genSelfElem=function(){var n=this,r=Pe('<span class="btn-close"><svg viewBox="0 0 1024 1024"><path d="M1024 896.1024l-128 128L512 640 128 1024 0 896 384 512 0 128 128 0 512 384 896.1024 0l128 128L640 512z"></path></svg></span>'),o=TC.get(this);return r.on("click",function(){n.hide(),o==null||o.restoreSelection()}),r},t.prototype.setStyle=function(n){var r=this.width,o=this.$elem;o.attr("style",""),r&&o.css("width",r+"px"),o.css(n)},t}(FH);function Ds(e,t,n){var r=Pe('<label class="babel-container"></label>');r.append("<span>"+e+"</span>");var o=Pe('<input type="text" id="'+t+'" placeholder="'+(n||"")+'">');return r.append(o),[r[0],o[0]]}function Z2(e,t){var n=Pe('<div class="button-container"></div>'),r=Pe('<button type="button" id="'+e+'">'+t+"</button>");return n.append(r),[n[0],r[0]]}var Jst=function(e){function t(n,r,o){o===void 0&&(o=!1);var i=e.call(this,n,r,o)||this;return i.$body=Pe("body"),i.modal=null,i.menu=r,i}return V2(t,e),t.prototype.onButtonClick=function(){this.menu.showModal&&this.handleModal()},t.prototype.getPosition=function(){var n=Os(this),r=this.menu.getModalPositionNode(n);return sn.isElement(r)?xH(n,r,"modal"):wH(n)},t.prototype.handleModal=function(){var n=Os(this),r=this.menu;if(this.modal==null){var o=new Qst(n,r.modalWidth);this.renderAndShowModal(o,!0),this.modal=o}else(o=this.modal).isShow?o.hide():this.renderAndShowModal(o,!1)},t.prototype.renderAndShowModal=function(n,r){r===void 0&&(r=!1);var o=Os(this),i=this.menu;if(i.getModalContentElem!=null){var a=Re.getTextarea(o),l=Re.getToolbar(o),s=((l==null?void 0:l.getConfig())||{}).modalAppendToBody,u=i.getModalContentElem(o);if(n.renderContent(u),s)n.setStyle({left:"0",right:"0"});else{var c=this.getPosition();n.setStyle(c)}r&&(s?n.appendTo(this.$body):n.appendTo(a.$textAreaContainer)),n.show(),s||_H(o,n.$elem),setTimeout(function(){o.blur()})}},t}(NH),Zst=function(e){function t(n,r){var o=e.call(this,n)||this;return o.type="selectList",o.$elem=Pe('<div class="w-e-select-list"></div>'),r&&o.$elem.css("width",r+"px"),o.$elem.on("click",function(i){i.stopPropagation()}),o}return V2(t,e),t.prototype.renderList=function(n){var r=this.$elem;r.empty();var o=Pe("<ul></ul>");n.forEach(function(i){var a=i.value,l=i.text,s=i.selected,u=i.styleForRenderMenuList,c=Pe('<li data-value="'+a+'"></li>');if(u&&c.css(u),s){var d=Pe('<svg viewBox="0 0 1446 1024"><path d="M574.116299 786.736392 1238.811249 48.517862C1272.390222 11.224635 1329.414799 7.827718 1366.75664 41.450462 1403.840015 74.840484 1406.731043 132.084741 1373.10189 169.433699L655.118888 966.834607C653.072421 969.716875 650.835807 972.514337 648.407938 975.210759 615.017957 1012.29409 558.292155 1015.652019 521.195664 982.250188L72.778218 578.493306C35.910826 545.297758 32.859041 488.584019 66.481825 451.242134 99.871807 414.158803 156.597563 410.800834 193.694055 444.202665L574.116299 786.736392Z"></path></svg>');c.append(d),c.addClass("selected")}c.append(Pe('<span data-value="'+a+'">'+l+"</span>")),c.attr("title",l),o.append(c)}),r.append(o)},t.prototype.genSelfElem=function(){return null},t}(FH),eut=function(){function e(t,n,r){var o=this;r===void 0&&(r=!1),this.$elem=Pe('<div class="w-e-bar-item"></div>'),this.$button=Pe('<button type="button" class="select-button"></button>'),this.disabled=!1,this.selectList=null;var i=n.tag,a=n.title,l=n.width,s=n.iconSvg,u=s===void 0?"":s,c=n.hotkey,d=c===void 0?"":c;if(i!=="select")throw new Error("Invalid tag '"+i+"', expected 'select'");var f=this.$button;l&&f.css("width",l+"px"),f.attr("data-menu-key",t),J4e(f,u,a,d,r),this.$elem.append(f),this.menu=n,fu(function(){return o.init()})}return e.prototype.init=function(){var t=this;this.setSelectedValue(),this.$button.on("click",function(n){n.preventDefault(),Os(t).hidePanelOrModal(),t.trigger()})},e.prototype.trigger=function(){var t=this,n=Os(this);if(!n.isDisabled()&&!this.disabled){var r=this.menu;if(this.selectList==null){this.selectList=new Zst(n,r.selectPanelWidth);var o=this.selectList,i=r.getOptions(n);o.renderList(i),o.appendTo(this.$elem),o.show(),o.$elem.on("click","li",function(a){var l=a.target;if(l!=null){a.preventDefault();var s=Pe(l).attr("data-value");t.onChange(s)}})}else(o=this.selectList).isShow?o.hide():(i=r.getOptions(n),o.renderList(i),o.show())}},e.prototype.onChange=function(t){var n=Os(this),r=this.menu;r.exec&&r.exec(n,t)},e.prototype.setSelectedValue=function(){var t=Os(this),n=this.menu,r=n.getValue(t),o=function(l,s){for(var u=l.length,c="",d=0;d<u;d++){var f=l[d];if(f.value===s){c=f.text;break}}return c}(n.getOptions(t),r.toString()),i=this.$button,a=MH();i.empty(),i.text(o),i.append(a)},e.prototype.setDisabled=function(){var t=Os(this),n=this.menu.isDisabled(t),r=this.$button;(t.selection==null||t.isDisabled())&&(n=!0);var o="disabled";n?r.addClass(o):r.removeClass(o),this.disabled=n},e.prototype.changeMenuState=function(){this.setSelectedValue(),this.setDisabled()},e}(),Z4e=function(){function e(t){this.$elem=Pe('<div class="w-e-bar-item w-e-bar-item-group"></div>'),this.$container=Pe('<div class="w-e-bar-item-menus-container"></div>'),this.$button=Pe('<button type="button"></button>');var n=t.key,r=t.iconSvg,o=t.title,i=this.$elem,a=this.$button;if(r){var l=Pe(r);TH(l),a.append(l)}else a.text(o);a.attr("data-menu-key",n);var s=MH();a.append(s),i.append(a);var u=this.$container;i.append(u);var c=this.createObserver();this.observe(c)}return e.prototype.appendBarItem=function(t){var n=t.$elem;this.$container.append(n)},e.prototype.observe=function(t){var n=this.$container;t.observe(n[0],{childList:!0,subtree:!0,attributes:!0})},e.prototype.createObserver=function(){var t=this,n=this.$container,r=this.$button,o=new MutationObserver(function(){var i=n.find("button"),a=i.length;if(a!==0){var l=0;i.each(function(s){Pe(s).hasClass("disabled")&&l++}),o.disconnect(),l===a?r.addClass("disabled"):r.removeClass("disabled"),t.observe(o)}});return o},e}(),e6e=new WeakMap;function Os(e){var t=Fz.get(e);if(t==null)throw new Error("Can not get editor instance");return t}function t6e(e,t,n){n===void 0&&(n=!1);var r=e6e.get(t);if(r)return r;var o=t.tag;if(o==="button"){var i=t.showDropPanel,a=t.showModal;r=i?new Xst(e,t,n):a?new Jst(e,t,n):new Kst(e,t,n)}if(o==="select"&&(r=new eut(e,t,n)),r==null)throw new Error("Invalid tag in menu "+JSON.stringify(t));return e6e.set(t,r),r}function tut(e,t){var n=e.selection;return n!=null&&!ct.isCollapsed(n)&&!Re.getSelectedElems(e).some(function(r){if(e.isVoid(r))return!0;var o=r.type;return!!["pre","code","table"].includes(o)||void 0})&&!!Qt.isText(t)}var nut=function(){function e(){var t=this;this.$elem=Pe('<div class="w-e-bar w-e-bar-hidden w-e-hover-bar"></div>'),this.menus={},this.hoverbarItems=[],this.prevSelectedNode=null,this.isShow=!1,this.changeHoverbarState=Eye(function(){var n=t.isShow,r=t.getSelectedNodeAndMenuKeys()||{},o=r.node,i=o===void 0?null:o,a=r.menuKeys,l=a===void 0?[]:a;i!=null&&t.changeItemsState(),i&&sn.isElement(i)&&n&&t.isSamePath(i,t.prevSelectedNode)||(t.hideAndClean(),i!=null&&(t.registerItems(l),t.setPosition(i),t.show()),t.prevSelectedNode=i)},200),fu(function(){var n=t.getEditorInstance(),r=t.$elem;r.on("mousedown",function(i){return i.preventDefault()},{passive:!1}),Re.getTextarea(n).$textAreaContainer.append(r),n.on("change",t.changeHoverbarState);var o=t.hideAndClean.bind(t);n.on("scroll",o),n.on("fullScreen",o),n.on("unFullScreen",o)})}return e.prototype.getMenus=function(){return this.menus},e.prototype.hideAndClean=function(){var t=this.$elem;t.removeClass("w-e-bar-show").addClass("w-e-bar-hidden"),this.hoverbarItems=[],t.empty(),this.isShow=!1},e.prototype.checkPositionBottom=function(){var t=this.$elem,n=!1,r=window.innerHeight;r&&r>=360&&r-t[0].getBoundingClientRect().bottom<360&&(n=!0),n?t.addClass("w-e-bar-bottom"):t.removeClass("w-e-bar-bottom")},e.prototype.show=function(){this.$elem.removeClass("w-e-bar-hidden").addClass("w-e-bar-show"),this.isShow=!0,this.checkPositionBottom()},e.prototype.changeItemsState=function(){var t=this;fu(function(){t.hoverbarItems.forEach(function(n){n.changeMenuState()})})},e.prototype.registerItems=function(t){var n=this,r=this.$elem;t.forEach(function(o){if(o!=="|")n.registerSingleItem(o);else{var i=Q4e();r.append(i)}})},e.prototype.registerSingleItem=function(t){var n=this.getEditorInstance(),r=this.menus,o=r[t];if(o==null){var i=v8[t];if(i==null)throw new Error("Not found menu item factory by key '"+t+"'");if(typeof i!="function")throw new Error("Menu item factory (key='"+t+"') is not a function");o=i(),r[t]=o}var a=t6e(t,o);this.hoverbarItems.push(a),Fz.set(a,n),this.$elem.append(a.$elem)},e.prototype.setPosition=function(t){var n=this.getEditorInstance(),r=this.$elem;if(r.attr("style",""),sn.isElement(t)){var o=xH(n,t,"bar");return r.css(o),void _H(n,r)}if(Qt.isText(t))return o=wH(n),r.css(o),void _H(n,r);throw new Error("hoverbar.setPosition error, current selected node is not elem nor text")},e.prototype.getSelectedNodeAndMenuKeys=function(){var t=this.getEditorInstance();if(t.selection==null)return null;var n=this.getHoverbarKeysConf(),r=null,o=[],i=function(l){var s=n[l],u=s.match,c=s.menuKeys,d=c===void 0?[]:c,f=u||function(v,g){return Re.checkNodeType(g,l)},p=Er(ue.nodes(t,{match:function(v){return f(t,v)},universal:!0}),1),m=p[0];if(m!=null)return r=m[0],o=d,"break"};for(var a in n)if(i(a)==="break")break;return r==null||o.length===0?null:{node:r,menuKeys:o}},e.prototype.getEditorInstance=function(){var t=Nz.get(this);if(t==null)throw new Error("Can not get editor instance");return t},e.prototype.getHoverbarKeysConf=function(){var t=this.getEditorInstance().getConfig().hoverbarKeys,n=t===void 0?{}:t,r=n.text;return r&&r.match==null&&(r.match=tut),n},e.prototype.isSamePath=function(t,n){if(t==null||n==null)return!1;var r=Re.findPath(null,t),o=Re.findPath(null,n);return qe.equals(r,o)},e.prototype.destroy=function(){this.changeHoverbarState.cancel(),this.$elem.remove(),this.menus={},this.hoverbarItems=[],this.prevSelectedNode=null},e}();function n6e(e,t,n,r){if(d8.set(e,t),H2.set(e,n),sn.isElement(e)){var o=e.children;if((o===void 0?[]:o).forEach(function(l,s){return n6e(l,s,e,r)}),ue.isVoid(r,e)){var i=Er(Lt.texts(e),1),a=Er(i[0],1)[0];d8.set(a,0),H2.set(a,e)}}}function rut(e){var t=e.selector,n=t===void 0?"":t,r=e.config,o=r===void 0?{}:r,i=e.content,a=e.html,l=e.plugins,s=l===void 0?[]:l,u=(b=>{var y=b,{apply:w}=y;return y.history={undos:[],redos:[]},y.redo=()=>{var{history:x}=y,{redos:_}=x;if(_.length>0){var E=_[_.length-1];P2.withoutSaving(y,()=>{ue.withoutNormalizing(y,()=>{for(var C of E)y.apply(C)})}),x.redos.pop(),x.undos.push(E)}},y.undo=()=>{var{history:x}=y,{undos:_}=x;if(_.length>0){var E=_[_.length-1];P2.withoutSaving(y,()=>{ue.withoutNormalizing(y,()=>{var C=E.map(Vp.inverse).reverse();for(var T of C)y.apply(T)})}),x.redos.push(E),x.undos.pop()}},y.apply=x=>{var{operations:_,history:E}=y,{undos:C}=E,T=C[C.length-1],k=T&&T[T.length-1],I=((B,P)=>!(!P||B.type!=="set_selection"||P.type!=="set_selection"))(x,k),O=P2.isSaving(y),F=P2.isMerging(y);if(O==null&&(O=(B=>B.type!=="set_selection"||B.properties!=null&&B.newProperties!=null)(x)),O){if(F==null&&(F=T!=null&&(_.length!==0||((B,P)=>B.type==="set_selection"||!(!P||B.type!=="insert_text"||P.type!=="insert_text"||B.offset!==P.offset+P.text.length||!qe.equals(B.path,P.path))||!(!P||B.type!=="remove_text"||P.type!=="remove_text"||B.offset+B.text.length!==P.offset||!qe.equals(B.path,P.path)))(x,k)||I)),T&&F)I&&T.pop(),T.push(x);else{var N=[x];C.push(N)}for(;C.length>100;)C.shift();(B=>B.type!=="set_selection")(x)&&(E.redos=[])}w(x)},y})(function(b){var y=b,w=y.insertText,x=y.insertNode,_=y.insertFragment,E=y.dangerouslyInsertHtml;return y.insertText=function(C){if(y.getConfig().maxLength){var T=Re.getLeftLengthOfMaxLength(y);T<=0||(T<C.length?w(C.slice(0,T)):w(C))}else w(C)},y.insertNode=function(C){if(y.getConfig().maxLength){var T=Re.getLeftLengthOfMaxLength(y);T<=0||T<Lt.string(C).length||x(C)}else x(C)},y.insertFragment=function(C){if(y.getConfig().maxLength)if(C.length!==1)C.forEach(function(k){y.insertNode(k)});else{var T=C[0];if(Re.getLeftLengthOfMaxLength(y)<Lt.string(T).length)return;_(C)}else _(C)},y.dangerouslyInsertHtml=function(C,T){if(C===void 0&&(C=""),T===void 0&&(T=!1),C)if(y.getConfig().maxLength){var k=Re.getLeftLengthOfMaxLength(y);if(!(k<=0)){var I=document.createElement("div");I.innerHTML=C;var O=Array.from(I.childNodes).reduce(function(F,N){var B=N.nodeType,P=N.nodeName;return N?B===ed.TEXT_NODE?F+(N.textContent||""):B===ed.ELEMENT_NODE?M4e.has(P.toLowerCase())?F:F+(N.textContent||""):F:F},"");k<O.length||E(C,T)}}else E(C,T)},y}(function(b){var y=b;return y.on=function(w,x){var _=VC(y);if(_.on(w,x),w==="destroyed"&&B4e(y,x),w!=="destroyed"){var E=function(){return _.off(w,x)};_.on("destroyed",E),B4e(y,E)}},y.once=function(w,x){VC(y).once(w,x)},y.off=function(w,x){VC(y).off(w,x)},y.emit=function(w){for(var x=[],_=1;_<arguments.length;_++)x[_-1]=arguments[_];var E=VC(y);E.emit.apply(E,_z([w],Er(x))),w==="destroyed"&&(function(C){return zC.get(C)||new Set}(y).forEach(function(C){return E.off("destroyed",C)}),function(C){zC.set(C,new Set)}(y))},y}(function(b){var y=b;return y.select=function(w){et.select(y,w)},y.deselect=function(){var w=y.selection,x=Re.findDocumentOrShadowRoot(y).getSelection();x&&x.rangeCount>0&&x.removeAllRanges(),w&&et.deselect(b)},y.move=function(w,x){x===void 0&&(x=!1),w&&(w<0||et.move(b,{distance:w,unit:"character",reverse:x}))},y.moveReverse=function(w){y.move(w,!0)},y.restoreSelection=function(){var w=Pz.get(y);w!=null&&(y.focus(),et.select(y,w))},y.getSelectionPosition=function(){return wH(y)},y.getNodePosition=function(w){return xH(y,w)},y.isSelectedAll=function(){var w=y.selection;if(w==null)return!1;var x=Er(ct.edges(w),2),_=x[0],E=x[1],C=Er(ue.edges(y,[]),2),T=C[0],k=C[1];return!(!nr.equals(_,T)||!nr.equals(E,k))},y.selectAll=function(){var w=ue.start(y,[]),x=ue.end(y,[]);et.select(y,{anchor:w,focus:x})},y}(function(b){var y=b,w=y.onChange,x=y.insertText,_=y.apply,E=y.deleteBackward;return y.insertText=function(C){y.getConfig().readOnly||x(C)},y.apply=function(C){var T,k,I,O,F,N,B,P,V=[];switch(C.type){case"insert_text":case"remove_text":case"set_node":try{for(var L=du(ue.levels(y,{at:C.path})),H=L.next();!H.done;H=L.next()){var U=Er(H.value,2),G=U[0],z=U[1],$=Re.findKey(y,G);V.push([z,$])}}catch(ye){T={error:ye}}finally{try{H&&!H.done&&(k=L.return)&&k.call(L)}finally{if(T)throw T.error}}break;case"insert_node":case"remove_node":case"merge_node":case"split_node":try{for(var W=du(ue.levels(y,{at:qe.parent(C.path)})),K=W.next();!K.done;K=W.next()){var X=Er(K.value,2);G=X[0],z=X[1],$=Re.findKey(y,G),V.push([z,$])}}catch(ye){I={error:ye}}finally{try{K&&!K.done&&(O=W.return)&&O.call(W)}finally{if(I)throw I.error}}break;case"move_node":try{for(var te=du(ue.levels(y,{at:qe.common(qe.parent(C.path),qe.parent(C.newPath))})),ne=te.next();!ne.done;ne=te.next()){var se=Er(ne.value,2);G=se[0],z=se[1],$=Re.findKey(y,G),V.push([z,$])}}catch(ye){F={error:ye}}finally{try{ne&&!ne.done&&(N=te.return)&&N.call(te)}finally{if(F)throw F.error}}}_(C);try{for(var le=du(V),J=le.next();!J.done;J=le.next()){var Z=Er(J.value,2);z=Z[0],$=Z[1],G=Er(ue.node(y,z),1)[0],FC.set(G,$)}}catch(ye){B={error:ye}}finally{try{J&&!J.done&&(P=le.return)&&P.call(le)}finally{if(B)throw B.error}}},y.deleteBackward=function(C){if(C!=="line")return E(C);if(b.selection&&ct.isCollapsed(b.selection)){var T=ue.above(b,{match:function(F){return ue.isBlock(b,F)},at:b.selection});if(T){var k=Er(T,2)[1],I=ue.range(b,k,b.selection.anchor),O=function(F,N){var B=ue.range(F,ct.end(N)),P=Array.from(ue.positions(F,{at:N})),V=0,L=P.length,H=Math.floor(L/2);if(g4e(F,ue.range(F,P[V]),B))return ue.range(F,P[V],B);if(P.length<2)return ue.range(F,P[P.length-1],B);for(;H!==P.length&&H!==V;)g4e(F,ue.range(F,P[H]),B)?L=H:V=H,H=Math.floor((V+L)/2);return ue.range(F,P[L],B)}(y,I);ct.isCollapsed(O)||et.delete(b,{at:O})}}},y.onChange=function(){var C=y.selection;C!=null&&Pz.set(y,C),y.emit("change"),w()},y.handleTab=function(){y.insertText(" ")},y.getHtml=function(){var C=y.children;return(C===void 0?[]:C).map(function(T){return h4e(T,y)}).join("")},y.getText=function(){var C=y.children;return(C===void 0?[]:C).map(function(T){return Lt.string(T)}).join(`
| `)},y.getSelectionText=function(){var C=y.selection;return C==null?"":ue.string(b,C)},y.getElemsByType=function(C,T){var k,I;T===void 0&&(T=!1);var O=[],F=ue.nodes(y,{at:[],universal:!0});try{for(var N=du(F),B=N.next();!B.done;B=N.next()){var P=Er(B.value,1)[0];if(sn.isElement(P)&&(T?P.type.indexOf(C)>=0:P.type===C)){var V=v4e(Re.findKey(y,P).id);O.push(cu(cu({},P),{id:V}))}}}catch(L){k={error:L}}finally{try{B&&!B.done&&(I=N.return)&&I.call(N)}finally{if(k)throw k.error}}return O},y.getElemsByTypePrefix=function(C){return y.getElemsByType(C,!0)},y.isEmpty=function(){var C=y.children,T=C===void 0?[]:C;if(T.length>1)return!1;var k=T[0];if(k==null)return!0;if(sn.isElement(k)&&k.type==="paragraph"){var I=k.children,O=I===void 0?[]:I;if(O.length>1)return!1;var F=O[0];if(F==null||Qt.isText(F)&&F.text==="")return!0}return!1},y.clear=function(){et.delete(y,{at:{anchor:ue.start(y,[]),focus:ue.end(y,[])}}),y.children.length===0&&et.insertNodes(y,[{type:"paragraph",children:[{text:""}]}])},y.getParentNode=function(C){return Re.getParentNode(y,C)},y.dangerouslyInsertHtml=function(C,T){if(C===void 0&&(C=""),T===void 0&&(T=!1),C){var k=document.createElement("div");k.innerHTML=C;var I=Array.from(k.childNodes);if(I=I.filter(function(B){var P=B.nodeType,V=B.nodeName;return P===ed.TEXT_NODE||P===ed.ELEMENT_NODE&&!M4e.has(V.toLowerCase())}),I.length!==0){var O=y.selection;if(O!=null){var F=null;Re.isSelectedEmptyParagraph(y)&&!T&&(F=[O.focus.path[0]]),k.setAttribute("hidden","true"),document.body.appendChild(k);var N=0;I.forEach(function(B){var P=B.nodeType,V=B.nodeName,L=B.textContent,H=L===void 0?"":L;if(P!==ed.TEXT_NODE)if(V!=="BR"){var U=B,G=!1;if(y4e.includes(V.toLowerCase()))G=!0;else for(var z in PC)if(U.matches(z)){G=!0;break}if(G){var $=vH(Pe(U),y);return Array.isArray($)?($.forEach(function(K){return N4e(y,K)}),N++):(N4e(y,$),N++),void(Re.isSelectedVoidNode(y)&&y.move(1))}var W=window.getComputedStyle(U).display;Re.isSelectedEmptyParagraph(y)||W.indexOf("inline")<0&&y.insertBreak(),y.dangerouslyInsertHtml(U.innerHTML,!0)}else y.insertText(`
| `);else{if(!H||!H.trim())return;y.insertNode({text:H})}}),N&&F&&Re.isEmptyPath(y,F)&&et.removeNodes(y,{at:F}),k.remove()}}}},y.setHtml=function(C){C===void 0&&(C="");var T=y.isDisabled(),k=y.isFocused(),I=JSON.stringify(y.selection);y.enable(),y.focus(),y.clear();var O=D4e(y,C);if(et.insertFragment(y,O),k||(y.deselect(),y.blur()),T&&(y.deselect(),y.disable()),y.isFocused())try{y.select(JSON.parse(I))}catch{y.select(ue.start(y,[]))}},y}(function(b){var y=b;return y.getAllMenuKeys=function(){var w=[];for(var x in v8)w.push(x);return w},y.getConfig=function(){var w=C3e.get(y);if(w==null)throw new Error("Can not get editor config");return w},y.getMenuConfig=function(w){var x=y.getConfig().MENU_CONF;return(x===void 0?{}:x)[w]||{}},y.alert=function(w,x){x===void 0&&(x="info");var _=y.getConfig().customAlert;_&&_(w,x)},y}(function(){var b=Ast(dtt());return b.id="wangEditor-"+Dlt++,b.isDestroyed=!1,b.isFullScreen=!1,b.focus=function(y){if(Re.toDOMNode(b,b).focus({preventScroll:!0}),dv.set(b,!0),y){var w=ue.end(b,[]);et.select(b,w)}else{var x=Pz.get(b);x?et.select(b,x):et.select(b,ue.start(b,[]))}},b.isFocused=function(){return!!dv.get(b)},b.blur=function(){Re.toDOMNode(b,b).blur(),et.deselect(b),dv.set(b,!1)},b.updateView=function(){Re.getTextarea(b).changeViewState();var y=Re.getToolbar(b);y&&y.changeToolbarState();var w=Re.getHoverbar(b);w&&w.changeHoverbarState()},b.destroy=function(){if(!b.isDestroyed){var y=Re.getTextarea(b);y.destroy(),Oz.delete(b),Tz.delete(y);var w=Re.getToolbar(b);w&&(w.destroy(),DC.delete(b),Mz.delete(w));var x=Re.getHoverbar(b);x&&(x.destroy(),OC.delete(b),Nz.delete(x)),b.isDestroyed=!0,b.emit("destroyed")}},b.scrollToElem=function(y){if(!b.getConfig().scroll){var w="\u7F16\u8F91\u5668\u7981\u7528\u4E86 scroll \uFF0C\u7F16\u8F91\u5668\u5185\u5BB9\u65E0\u6CD5\u6EDA\u52A8\uFF0C\u8BF7\u81EA\u884C\u5B9E\u73B0\u8BE5\u529F\u80FD";return w+=`
| You has disabled editor scroll, please do this yourself`,void console.warn(w)}var x=Pe("#"+y);if(x.length!==0){var _=x[0];if(!Re.hasDOMNode(b,_))return w="Element (found by id is '"+y+"') is not in editor DOM",w+=`
| \u901A\u8FC7 id '`+y+"' \u627E\u5230\u7684 element \u4E0D\u5728 editor DOM \u4E4B\u5185",void console.error(w,_);var E=Re.getTextarea(b),C=E.$textAreaContainer,T=E.$scroll,k=x.offset().top,I=C.offset().top;T[0].scrollBy({top:k-I,behavior:"smooth"})}},b.showProgressBar=function(y){y<1||Re.getTextarea(b).changeProgress(y)},b.hidePanelOrModal=function(){var y=Rz.get(b);y!=null&&y.forEach(function(w){return w.hide()})},b.enable=function(){b.getConfig().readOnly=!1,b.updateView()},b.disable=function(){b.getConfig().readOnly=!0,b.updateView()},b.isDisabled=function(){return b.getConfig().readOnly},b.toDOMNode=function(y){return Re.toDOMNode(b,y)},b.fullScreen=function(){if(!b.isFullScreen){var y=null,w=Re.getToolbar(b);w&&(y=w.$box);var x=Re.getTextarea(b).$box.parent();if(y&&y.parent()[0]!==x[0])throw new Error(`Can not set full screen, cause toolbar DOM parent is not equal to textarea DOM parent
| \u4E0D\u80FD\u8BBE\u7F6E\u5168\u5C4F\uFF0C\u56E0\u4E3A toolbar DOM \u7236\u8282\u70B9\u548C textarea DOM \u7236\u8282\u70B9\u4E0D\u4E00\u81F4`);x.addClass("w-e-full-screen-container");var _=x.css("z-index");x.attr("data-z-index",_.toString()),b.isFullScreen=!0,b.emit("fullScreen")}},b.unFullScreen=function(){if(b.isFullScreen){var y=Re.getTextarea(b).$box.parent();setTimeout(function(){y.removeClass("w-e-full-screen-container"),b.isFullScreen=!1,b.emit("unFullScreen")},200)}},b.getEditableContainer=function(){return Re.getTextarea(b).$textAreaContainer[0]},b}()))))));if(n&&function(b,y){return k4e(b,"data-w-e-textarea",y)}(u,n))throw new Error("Repeated create editor by selector '"+n+"'");var c=function(b){b===void 0&&(b={});var y=Cye(P3e),w={},x=b.MENU_CONF,_=x===void 0?{}:x;return Hj(y,function(E,C){w[C]=cu(cu({},E),_[C]||{})}),delete b.MENU_CONF,cu({scroll:!0,readOnly:!1,autoFocus:!0,decorate:function(){return[]},maxLength:0,MENU_CONF:w,hoverbarKeys:{},customAlert:function(E,C){window.alert(C+`:
| `+E)}},b)}(o);C3e.set(u,c);var d=c.hoverbarKeys,f=d===void 0?{}:d;if(s.forEach(function(b){u=b(u)}),a!=null&&(u.children=D4e(u,a)),i&&i.length&&(u.children=i),u.children.length===0&&(u.children=[{type:"paragraph",children:[{text:""}]}]),Re.normalizeContent(u),n){var p=new qst(n);Oz.set(u,p),Tz.set(p,u),p.changeViewState(),fu(function(){var b=p.$scroll;b!=null&&b.height()<300&&console.warn(`\u7F16\u8F91\u533A\u57DF\u9AD8\u5EA6 < 300px \u8FD9\u53EF\u80FD\u4F1A\u5BFC\u81F4 modal hoverbar \u5B9A\u4F4D\u5F02\u5E38
| Textarea height < 300px . This may be cause modal and hoverbar position error`,b)});var m=void 0;Object.keys(f).length>0&&(m=new nut,Nz.set(m,u),OC.set(u,m)),u.on("change",function(){u.hidePanelOrModal()}),u.on("scroll",function(){u.hidePanelOrModal()})}else u.children.forEach(function(b,y){return n6e(b,y,u,u)});var v=c.onCreated,g=c.onDestroyed;return v&&u.on("created",function(){return v(u)}),g&&u.on("destroyed",function(){return g(u)}),fu(function(){return u.emit("created")}),u}var out=gC("splice"),iut=Mt.TypeError,aut=Math.max,lut=Math.min;ko({target:"Array",proto:!0,forced:!out},{splice:function(e,t){var n,r,o,i,a,l,s=Xp(this),u=sv(s),c=I2(e,u),d=arguments.length;if(d===0?n=r=0:d===1?(n=0,r=u-c):(n=d-2,r=lut(aut(X6(t),0),u-c)),u+n-r>9007199254740991)throw iut("Maximum allowed length exceeded");for(o=_be(s,r),i=0;i<r;i++)(a=c+i)in s&&r8(o,i,s[a]);if(o.length=r,n<r){for(i=c;i<u-r;i++)l=i+n,(a=i+r)in s?s[l]=s[a]:delete s[l];for(i=u;i>u-r+n;i--)delete s[i-1]}else if(n>r)for(i=u-r;i>c;i--)l=i+n-1,(a=i+r-1)in s?s[l]=s[a]:delete s[l];for(i=0;i<n;i++)s[i+c]=arguments[i+2];return s.length=u-r+n,o}});var sut=function(){function e(t,n){var r=this;this.$toolbar=Pe('<div class="w-e-bar w-e-bar-show w-e-toolbar"></div>'),this.menus={},this.toolbarItems=[],this.config={},this.changeToolbarState=Eye(function(){r.toolbarItems.forEach(function(a){a.changeMenuState()})},200),this.config=n;var o=Pe(t);if(o.length===0)throw new Error("Cannot find toolbar DOM by selector '"+t+"'");this.$box=o;var i=this.$toolbar;i.on("mousedown",function(a){return a.preventDefault()},{passive:!1}),o.append(i),fu(function(){r.registerItems(),r.changeToolbarState(),r.getEditorInstance().on("change",r.changeToolbarState)})}return e.prototype.getMenus=function(){return this.menus},e.prototype.getConfig=function(){return this.config},e.prototype.registerItems=function(){var t=this,n="",r=this.$toolbar,o=this.config,i=o.toolbarKeys,a=i===void 0?[]:i,l=o.insertKeys,s=l===void 0?{index:0,keys:[]}:l,u=o.excludeKeys,c=u===void 0?[]:u,d=Cye(a);s.keys.length>0&&(typeof s.keys=="string"&&(s.keys=[s.keys]),s.keys.forEach(function(m,v){d.splice(s.index+v,0,m)}));var f=d.filter(function(m){if(typeof m=="string"){if(c.includes(m))return!1}else if(c.includes(m.key))return!1;return!0}),p=f.length;f.forEach(function(m,v){if(m==="|"){if(v===0||v+1===p||n==="|")return;var g=Q4e();return r.append(g),void(n=m)}if(typeof m=="string")return t.registerSingleItem(m,t),void(n=m);t.registerGroup(m),n="group"})},e.prototype.registerGroup=function(t){var n=this,r=this.$toolbar,o=function(u){return new Z4e(u)}(t),i=t.menuKeys,a=i===void 0?[]:i,l=this.config.excludeKeys,s=l===void 0?[]:l;a.forEach(function(u){s.includes(u)||n.registerSingleItem(u,o)}),r.append(o.$elem)},e.prototype.registerSingleItem=function(t,n){var r=this.getEditorInstance(),o=n instanceof Z4e,i=this.menus,a=i[t];if(a==null){var l=v8[t];if(l==null)throw new Error("Not found menu item factory by key '"+t+"'");if(typeof l!="function")throw new Error("Menu item factory (key='"+t+"') is not a function");a=l(),i[t]=a}else console.warn("Duplicated toolbar menu key '"+t+`'
| \u91CD\u590D\u6CE8\u518C\u4E86\u83DC\u5355\u680F menu '`+t+"'");var s=t6e(t,a,o);this.toolbarItems.push(s),Fz.set(s,r),o?n.appendBarItem(s):n.$toolbar.append(s.$elem)},e.prototype.getEditorInstance=function(){var t=Mz.get(this);if(t==null)throw new Error("Can not get editor instance");return t},e.prototype.destroy=function(){this.$toolbar.remove(),this.menus={},this.toolbarItems=[]},e}(),uut=N2.EXISTS,cut=Ku.f,r6e=Function.prototype,dut=cn(r6e.toString),o6e=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,fut=cn(o6e.exec);function i6e(e){var t=e.server,n=t===void 0?"":t,r=e.fieldName,o=r===void 0?"":r,i=e.maxFileSize,a=i===void 0?10485760:i,l=e.maxNumberOfFiles,s=l===void 0?100:l,u=e.meta,c=u===void 0?{}:u,d=e.metaWithUrl,f=d!==void 0&&d,p=e.headers,m=p===void 0?{}:p,v=e.withCredentials,g=v!==void 0&&v,b=e.timeout,y=b===void 0?1e4:b,w=e.onBeforeUpload,x=w===void 0?function(N){return N}:w,_=e.onSuccess,E=_===void 0?function(N,B){}:_,C=e.onError,T=C===void 0?function(N,B,P){console.error(N.name+" upload error",B,P)}:C,k=e.onProgress,I=k===void 0?function(N){}:k;if(!n)throw new Error(`Cannot get upload server address
| \u6CA1\u6709\u914D\u7F6E\u4E0A\u4F20\u5730\u5740`);if(!o)throw new Error(`Cannot get fieldName
| \u6CA1\u6709\u914D\u7F6E fieldName`);var O=n;f&&(O=function(N,B){var P=Er(N.split("#"),2),V=P[0],L=P[1],H=[];Hj(B,function(G,z){H.push(z+"="+G)});var U=H.join("&");return V=V.indexOf("?")>0?V+"&"+U:V+"?"+U,L?V+"#"+L:V}(O,c));var F=new L6({onBeforeUpload:x,restrictions:{maxFileSize:a,maxNumberOfFiles:s},meta:c}).use(Uot,{endpoint:O,headers:m,formData:!0,fieldName:o,bundle:!0,withCredentials:g,timeout:y});return F.on("upload-success",function(N,B){var P=B.body,V=P===void 0?{}:P;try{E(N,V)}catch(L){console.error("wangEditor upload file - onSuccess error",L)}F.removeFile(N.id)}),F.on("progress",function(N){N<1||I(N)}),F.on("upload-error",function(N,B,P){try{T(N,B,P)}catch(V){console.error("wangEditor upload file - onError error",V)}F.removeFile(N.id)}),F.on("restriction-failed",function(N,B){try{T(N,B)}catch(P){console.error("wangEditor upload file - onError error",P)}F.removeFile(N.id)}),F}function nh(e){return nh=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},nh(e)}function put(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xi(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?Object(arguments[t]):{},r=Object.keys(n);typeof Object.getOwnPropertySymbols=="function"&&r.push.apply(r,Object.getOwnPropertySymbols(n).filter(function(o){return Object.getOwnPropertyDescriptor(n,o).enumerable})),r.forEach(function(o){put(e,o,n[o])})}return e}function df(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a6e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function ff(e,t,n){return t&&a6e(e.prototype,t),n&&a6e(e,n),e}function mv(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function C8(e,t){if(t&&(nh(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return mv(e)}function ey(e){return ey=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},ey(e)}function RH(e,t){return RH=Object.setPrototypeOf||function(n,r){return n.__proto__=r,n},RH(e,t)}function $C(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&RH(e,t)}ta&&!uut&&cut(r6e,"name",{configurable:!0,get:function(){try{return fut(o6e,dut(this))[1]}catch{return""}}});var hut={type:"logger",log:function(e){this.output("log",e)},warn:function(e){this.output("warn",e)},error:function(e){this.output("error",e)},output:function(e,t){console&&console[e]&&console[e].apply(console,t)}},pf=new(function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};df(this,e),this.init(t,n)}return ff(e,[{key:"init",value:function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=n.prefix||"i18next:",this.logger=t||hut,this.options=n,this.debug=n.debug}},{key:"setDebug",value:function(t){this.debug=t}},{key:"log",value:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return this.forward(n,"log","",!0)}},{key:"warn",value:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return this.forward(n,"warn","",!0)}},{key:"error",value:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return this.forward(n,"error","")}},{key:"deprecate",value:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return this.forward(n,"warn","WARNING DEPRECATED: ",!0)}},{key:"forward",value:function(t,n,r,o){return o&&!this.debug?null:(typeof t[0]=="string"&&(t[0]="".concat(r).concat(this.prefix," ").concat(t[0])),this.logger[n](t))}},{key:"create",value:function(t){return new e(this.logger,xi({},{prefix:"".concat(this.prefix,":").concat(t,":")},this.options))}}]),e}()),rh=function(){function e(){df(this,e),this.observers={}}return ff(e,[{key:"on",value:function(t,n){var r=this;return t.split(" ").forEach(function(o){r.observers[o]=r.observers[o]||[],r.observers[o].push(n)}),this}},{key:"off",value:function(t,n){this.observers[t]&&(n?this.observers[t]=this.observers[t].filter(function(r){return r!==n}):delete this.observers[t])}},{key:"emit",value:function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];this.observers[t]&&[].concat(this.observers[t]).forEach(function(i){i.apply(void 0,r)}),this.observers["*"]&&[].concat(this.observers["*"]).forEach(function(i){i.apply(i,[t].concat(r))})}}]),e}();function S8(){var e,t,n=new Promise(function(r,o){e=r,t=o});return n.resolve=e,n.reject=t,n}function l6e(e){return e==null?"":""+e}function IH(e,t,n){function r(l){return l&&l.indexOf("###")>-1?l.replace(/###/g,"."):l}function o(){return!e||typeof e=="string"}for(var i=typeof t!="string"?[].concat(t):t.split(".");i.length>1;){if(o())return{};var a=r(i.shift());!e[a]&&n&&(e[a]=new n),e=Object.prototype.hasOwnProperty.call(e,a)?e[a]:{}}return o()?{}:{obj:e,k:r(i.shift())}}function s6e(e,t,n){var r=IH(e,t,Object);r.obj[r.k]=n}function UC(e,t){var n=IH(e,t),r=n.obj,o=n.k;if(r)return r[o]}function u6e(e,t,n){var r=UC(e,n);return r!==void 0?r:UC(t,n)}function c6e(e,t,n){for(var r in t)r!=="__proto__"&&r!=="constructor"&&(r in e?typeof e[r]=="string"||e[r]instanceof String||typeof t[r]=="string"||t[r]instanceof String?n&&(e[r]=t[r]):c6e(e[r],t[r],n):e[r]=t[r]);return e}function ty(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var vut={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function mut(e){return typeof e=="string"?e.replace(/[&<>"'\/]/g,function(t){return vut[t]}):e}var WC=typeof window<"u"&&window.navigator&&window.navigator.userAgent&&window.navigator.userAgent.indexOf("MSIE")>-1;function d6e(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(e){if(e[t])return e[t];for(var r=t.split(n),o=e,i=0;i<r.length;++i){if(!o||typeof o[r[i]]=="string"&&i+1<r.length)return;if(o[r[i]]===void 0){for(var a=2,l=r.slice(i,i+a).join(n),s=o[l];s===void 0&&r.length>i+a;)a++,s=o[l=r.slice(i,i+a).join(n)];if(s===void 0)return;if(typeof s=="string")return s;if(l&&typeof s[l]=="string")return s[l];var u=r.slice(i+a).join(n);return u?d6e(s,u,n):void 0}o=o[r[i]]}return o}}var gut=function(){function e(t){var n,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};return df(this,e),n=C8(this,ey(e).call(this)),WC&&rh.call(mv(n)),n.data=t||{},n.options=r,n.options.keySeparator===void 0&&(n.options.keySeparator="."),n.options.ignoreJSONStructure===void 0&&(n.options.ignoreJSONStructure=!0),n}return $C(e,rh),ff(e,[{key:"addNamespaces",value:function(t){this.options.ns.indexOf(t)<0&&this.options.ns.push(t)}},{key:"removeNamespaces",value:function(t){var n=this.options.ns.indexOf(t);n>-1&&this.options.ns.splice(n,1)}},{key:"getResource",value:function(t,n,r){var o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},i=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator,a=o.ignoreJSONStructure!==void 0?o.ignoreJSONStructure:this.options.ignoreJSONStructure,l=[t,n];r&&typeof r!="string"&&(l=l.concat(r)),r&&typeof r=="string"&&(l=l.concat(i?r.split(i):r)),t.indexOf(".")>-1&&(l=t.split("."));var s=UC(this.data,l);return s||!a||typeof r!="string"?s:d6e(this.data&&this.data[t]&&this.data[t][n],r,i)}},{key:"addResource",value:function(t,n,r,o){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1},a=this.options.keySeparator;a===void 0&&(a=".");var l=[t,n];r&&(l=l.concat(a?r.split(a):r)),t.indexOf(".")>-1&&(o=n,n=(l=t.split("."))[1]),this.addNamespaces(n),s6e(this.data,l,o),i.silent||this.emit("added",t,n,r,o)}},{key:"addResources",value:function(t,n,r){var o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(var i in r)typeof r[i]!="string"&&Object.prototype.toString.apply(r[i])!=="[object Array]"||this.addResource(t,n,i,r[i],{silent:!0});o.silent||this.emit("added",t,n,r)}},{key:"addResourceBundle",value:function(t,n,r,o,i){var a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1},l=[t,n];t.indexOf(".")>-1&&(o=r,r=n,n=(l=t.split("."))[1]),this.addNamespaces(n);var s=UC(this.data,l)||{};o?c6e(s,r,i):s=xi({},s,r),s6e(this.data,l,s),a.silent||this.emit("added",t,n,r)}},{key:"removeResourceBundle",value:function(t,n){this.hasResourceBundle(t,n)&&delete this.data[t][n],this.removeNamespaces(n),this.emit("removed",t,n)}},{key:"hasResourceBundle",value:function(t,n){return this.getResource(t,n)!==void 0}},{key:"getResourceBundle",value:function(t,n){return n||(n=this.options.defaultNS),this.options.compatibilityAPI==="v1"?xi({},{},this.getResource(t,n)):this.getResource(t,n)}},{key:"getDataByLanguage",value:function(t){return this.data[t]}},{key:"toJSON",value:function(){return this.data}}]),e}(),f6e={processors:{},addPostProcessor:function(e){this.processors[e.name]=e},handle:function(e,t,n,r,o){var i=this;return e.forEach(function(a){i.processors[a]&&(t=i.processors[a].process(t,n,r,o))}),t}},p6e={},h6e=function(){function e(t){var n,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return df(this,e),n=C8(this,ey(e).call(this)),WC&&rh.call(mv(n)),function(o,i,a){o.forEach(function(l){i[l]&&(a[l]=i[l])})}(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],t,mv(n)),n.options=r,n.options.keySeparator===void 0&&(n.options.keySeparator="."),n.logger=pf.create("translator"),n}return $C(e,rh),ff(e,[{key:"changeLanguage",value:function(t){t&&(this.language=t)}},{key:"exists",value:function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(t==null)return!1;var r=this.resolve(t,n);return r&&r.res!==void 0}},{key:"extractFromKey",value:function(t,n){var r=n.nsSeparator!==void 0?n.nsSeparator:this.options.nsSeparator;r===void 0&&(r=":");var o=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,i=n.ns||this.options.defaultNS;if(r&&t.indexOf(r)>-1){var a=t.match(this.interpolator.nestingRegexp);if(a&&a.length>0)return{key:t,namespaces:i};var l=t.split(r);(r!==o||r===o&&this.options.ns.indexOf(l[0])>-1)&&(i=l.shift()),t=l.join(o)}return typeof i=="string"&&(i=[i]),{key:t,namespaces:i}}},{key:"translate",value:function(t,n,r){var o=this;if(nh(n)!=="object"&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),n||(n={}),t==null)return"";Array.isArray(t)||(t=[String(t)]);var i=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,a=this.extractFromKey(t[t.length-1],n),l=a.key,s=a.namespaces,u=s[s.length-1],c=n.lng||this.language,d=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(c&&c.toLowerCase()==="cimode"){if(d){var f=n.nsSeparator||this.options.nsSeparator;return u+f+l}return l}var p=this.resolve(t,n),m=p&&p.res,v=p&&p.usedKey||l,g=p&&p.exactUsedKey||l,b=Object.prototype.toString.apply(m),y=n.joinArrays!==void 0?n.joinArrays:this.options.joinArrays,w=!this.i18nFormat||this.i18nFormat.handleAsObject;if(w&&m&&typeof m!="string"&&typeof m!="boolean"&&typeof m!="number"&&["[object Number]","[object Function]","[object RegExp]"].indexOf(b)<0&&(typeof y!="string"||b!=="[object Array]")){if(!n.returnObjects&&!this.options.returnObjects)return this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!"),this.options.returnedObjectHandler?this.options.returnedObjectHandler(v,m,xi({},n,{ns:s})):"key '".concat(l," (").concat(this.language,")' returned an object instead of string.");if(i){var x=b==="[object Array]",_=x?[]:{},E=x?g:v;for(var C in m)if(Object.prototype.hasOwnProperty.call(m,C)){var T="".concat(E).concat(i).concat(C);_[C]=this.translate(T,xi({},n,{joinArrays:!1,ns:s})),_[C]===T&&(_[C]=m[C])}m=_}}else if(w&&typeof y=="string"&&b==="[object Array]")(m=m.join(y))&&(m=this.extendTranslation(m,t,n,r));else{var k=!1,I=!1,O=n.count!==void 0&&typeof n.count!="string",F=e.hasDefaultValue(n),N=O?this.pluralResolver.getSuffix(c,n.count):"",B=n["defaultValue".concat(N)]||n.defaultValue;!this.isValidLookup(m)&&F&&(k=!0,m=B),this.isValidLookup(m)||(I=!0,m=l);var P=(n.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&I?void 0:m,V=F&&B!==m&&this.options.updateMissing;if(I||k||V){if(this.logger.log(V?"updateKey":"missingKey",c,u,l,V?B:m),i){var L=this.resolve(l,xi({},n,{keySeparator:!1}));L&&L.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}var H=[],U=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if(this.options.saveMissingTo==="fallback"&&U&&U[0])for(var G=0;G<U.length;G++)H.push(U[G]);else this.options.saveMissingTo==="all"?H=this.languageUtils.toResolveHierarchy(n.lng||this.language):H.push(n.lng||this.language);var z=function($,W,K){o.options.missingKeyHandler?o.options.missingKeyHandler($,u,W,V?K:P,V,n):o.backendConnector&&o.backendConnector.saveMissing&&o.backendConnector.saveMissing($,u,W,V?K:P,V,n),o.emit("missingKey",$,u,W,m)};this.options.saveMissing&&(this.options.saveMissingPlurals&&O?H.forEach(function($){o.pluralResolver.getSuffixes($).forEach(function(W){z([$],l+W,n["defaultValue".concat(W)]||B)})}):z(H,l,B))}m=this.extendTranslation(m,t,n,p,r),I&&m===l&&this.options.appendNamespaceToMissingKey&&(m="".concat(u,":").concat(l)),(I||k)&&this.options.parseMissingKeyHandler&&(m=this.options.parseMissingKeyHandler(m))}return m}},{key:"extendTranslation",value:function(t,n,r,o,i){var a=this;if(this.i18nFormat&&this.i18nFormat.parse)t=this.i18nFormat.parse(t,r,o.usedLng,o.usedNS,o.usedKey,{resolved:o});else if(!r.skipInterpolation){r.interpolation&&this.interpolator.init(xi({},r,{interpolation:xi({},this.options.interpolation,r.interpolation)}));var l,s=r.interpolation&&r.interpolation.skipOnVariables||this.options.interpolation.skipOnVariables;if(s){var u=t.match(this.interpolator.nestingRegexp);l=u&&u.length}var c=r.replace&&typeof r.replace!="string"?r.replace:r;if(this.options.interpolation.defaultVariables&&(c=xi({},this.options.interpolation.defaultVariables,c)),t=this.interpolator.interpolate(t,c,r.lng||this.language,r),s){var d=t.match(this.interpolator.nestingRegexp);l<(d&&d.length)&&(r.nest=!1)}r.nest!==!1&&(t=this.interpolator.nest(t,function(){for(var m=arguments.length,v=new Array(m),g=0;g<m;g++)v[g]=arguments[g];return i&&i[0]===v[0]&&!r.context?(a.logger.warn("It seems you are nesting recursively key: ".concat(v[0]," in key: ").concat(n[0])),null):a.translate.apply(a,v.concat([n]))},r)),r.interpolation&&this.interpolator.reset()}var f=r.postProcess||this.options.postProcess,p=typeof f=="string"?[f]:f;return t!=null&&p&&p.length&&r.applyPostProcessor!==!1&&(t=f6e.handle(p,t,n,this.options&&this.options.postProcessPassResolved?xi({i18nResolved:o},r):r,this)),t}},{key:"resolve",value:function(t){var n,r,o,i,a,l=this,s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return typeof t=="string"&&(t=[t]),t.forEach(function(u){if(!l.isValidLookup(n)){var c=l.extractFromKey(u,s),d=c.key;r=d;var f=c.namespaces;l.options.fallbackNS&&(f=f.concat(l.options.fallbackNS));var p=s.count!==void 0&&typeof s.count!="string",m=s.context!==void 0&&(typeof s.context=="string"||typeof s.context=="number")&&s.context!=="",v=s.lngs?s.lngs:l.languageUtils.toResolveHierarchy(s.lng||l.language,s.fallbackLng);f.forEach(function(g){l.isValidLookup(n)||(a=g,!p6e["".concat(v[0],"-").concat(g)]&&l.utils&&l.utils.hasLoadedNamespace&&!l.utils.hasLoadedNamespace(a)&&(p6e["".concat(v[0],"-").concat(g)]=!0,l.logger.warn('key "'.concat(r,'" for languages "').concat(v.join(", "),`" won't get resolved as namespace "`).concat(a,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),v.forEach(function(b){if(!l.isValidLookup(n)){i=b;var y,w,x=d,_=[x];for(l.i18nFormat&&l.i18nFormat.addLookupKeys?l.i18nFormat.addLookupKeys(_,d,b,g,s):(p&&(y=l.pluralResolver.getSuffix(b,s.count)),p&&m&&_.push(x+y),m&&_.push(x+="".concat(l.options.contextSeparator).concat(s.context)),p&&_.push(x+=y));w=_.pop();)l.isValidLookup(n)||(o=w,n=l.getResource(b,g,w,s))}}))})}}),{res:n,usedKey:r,exactUsedKey:o,usedLng:i,usedNS:a}}},{key:"isValidLookup",value:function(t){return!(t===void 0||!this.options.returnNull&&t===null||!this.options.returnEmptyString&&t==="")}},{key:"getResource",value:function(t,n,r){var o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(t,n,r,o):this.resourceStore.getResource(t,n,r,o)}}],[{key:"hasDefaultValue",value:function(t){var n="defaultValue";for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)&&n===r.substring(0,12)&&t[r]!==void 0)return!0;return!1}}]),e}();function BH(e){return e.charAt(0).toUpperCase()+e.slice(1)}var yut=function(){function e(t){df(this,e),this.options=t,this.whitelist=this.options.supportedLngs||!1,this.supportedLngs=this.options.supportedLngs||!1,this.logger=pf.create("languageUtils")}return ff(e,[{key:"getScriptPartFromCode",value:function(t){if(!t||t.indexOf("-")<0)return null;var n=t.split("-");return n.length===2?null:(n.pop(),n[n.length-1].toLowerCase()==="x"?null:this.formatLanguageCode(n.join("-")))}},{key:"getLanguagePartFromCode",value:function(t){if(!t||t.indexOf("-")<0)return t;var n=t.split("-");return this.formatLanguageCode(n[0])}},{key:"formatLanguageCode",value:function(t){if(typeof t=="string"&&t.indexOf("-")>-1){var n=["hans","hant","latn","cyrl","cans","mong","arab"],r=t.split("-");return this.options.lowerCaseLng?r=r.map(function(o){return o.toLowerCase()}):r.length===2?(r[0]=r[0].toLowerCase(),r[1]=r[1].toUpperCase(),n.indexOf(r[1].toLowerCase())>-1&&(r[1]=BH(r[1].toLowerCase()))):r.length===3&&(r[0]=r[0].toLowerCase(),r[1].length===2&&(r[1]=r[1].toUpperCase()),r[0]!=="sgn"&&r[2].length===2&&(r[2]=r[2].toUpperCase()),n.indexOf(r[1].toLowerCase())>-1&&(r[1]=BH(r[1].toLowerCase())),n.indexOf(r[2].toLowerCase())>-1&&(r[2]=BH(r[2].toLowerCase()))),r.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?t.toLowerCase():t}},{key:"isWhitelisted",value:function(t){return this.logger.deprecate("languageUtils.isWhitelisted",`function "isWhitelisted" will be renamed to "isSupportedCode" in the next major - please make sure to rename it's usage asap.`),this.isSupportedCode(t)}},{key:"isSupportedCode",value:function(t){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(t=this.getLanguagePartFromCode(t)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(t)>-1}},{key:"getBestMatchFromCodes",value:function(t){var n,r=this;return t?(t.forEach(function(o){if(!n){var i=r.formatLanguageCode(o);r.options.supportedLngs&&!r.isSupportedCode(i)||(n=i)}}),!n&&this.options.supportedLngs&&t.forEach(function(o){if(!n){var i=r.getLanguagePartFromCode(o);if(r.isSupportedCode(i))return n=i;n=r.options.supportedLngs.find(function(a){if(a.indexOf(i)===0)return a})}}),n||(n=this.getFallbackCodes(this.options.fallbackLng)[0]),n):null}},{key:"getFallbackCodes",value:function(t,n){if(!t)return[];if(typeof t=="function"&&(t=t(n)),typeof t=="string"&&(t=[t]),Object.prototype.toString.apply(t)==="[object Array]")return t;if(!n)return t.default||[];var r=t[n];return r||(r=t[this.getScriptPartFromCode(n)]),r||(r=t[this.formatLanguageCode(n)]),r||(r=t[this.getLanguagePartFromCode(n)]),r||(r=t.default),r||[]}},{key:"toResolveHierarchy",value:function(t,n){var r=this,o=this.getFallbackCodes(n||this.options.fallbackLng||[],t),i=[],a=function(l){l&&(r.isSupportedCode(l)?i.push(l):r.logger.warn("rejecting language code not found in supportedLngs: ".concat(l)))};return typeof t=="string"&&t.indexOf("-")>-1?(this.options.load!=="languageOnly"&&a(this.formatLanguageCode(t)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&a(this.getScriptPartFromCode(t)),this.options.load!=="currentOnly"&&a(this.getLanguagePartFromCode(t))):typeof t=="string"&&a(this.formatLanguageCode(t)),o.forEach(function(l){i.indexOf(l)<0&&a(r.formatLanguageCode(l))}),i}}]),e}(),but=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],Aut={1:function(e){return+(e>1)},2:function(e){return+(e!=1)},3:function(e){return 0},4:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},5:function(e){return e==0?0:e==1?1:e==2?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},6:function(e){return e==1?0:e>=2&&e<=4?1:2},7:function(e){return e==1?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},8:function(e){return e==1?0:e==2?1:e!=8&&e!=11?2:3},9:function(e){return+(e>=2)},10:function(e){return e==1?0:e==2?1:e<7?2:e<11?3:4},11:function(e){return e==1||e==11?0:e==2||e==12?1:e>2&&e<20?2:3},12:function(e){return+(e%10!=1||e%100==11)},13:function(e){return+(e!==0)},14:function(e){return e==1?0:e==2?1:e==3?2:3},15:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2},16:function(e){return e%10==1&&e%100!=11?0:e!==0?1:2},17:function(e){return e==1||e%10==1&&e%100!=11?0:1},18:function(e){return e==0?0:e==1?1:2},19:function(e){return e==1?0:e==0||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3},20:function(e){return e==1?0:e==0||e%100>0&&e%100<20?1:2},21:function(e){return e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0},22:function(e){return e==1?0:e==2?1:(e<0||e>10)&&e%10==0?2:3}},wut=function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};df(this,e),this.languageUtils=t,this.options=n,this.logger=pf.create("pluralResolver"),this.rules=function(){var r={};return but.forEach(function(o){o.lngs.forEach(function(i){r[i]={numbers:o.nr,plurals:Aut[o.fc]}})}),r}()}return ff(e,[{key:"addRule",value:function(t,n){this.rules[t]=n}},{key:"getRule",value:function(t){return this.rules[t]||this.rules[this.languageUtils.getLanguagePartFromCode(t)]}},{key:"needsPlural",value:function(t){var n=this.getRule(t);return n&&n.numbers.length>1}},{key:"getPluralFormsOfKey",value:function(t,n){return this.getSuffixes(t).map(function(r){return n+r})}},{key:"getSuffixes",value:function(t){var n=this,r=this.getRule(t);return r?r.numbers.map(function(o){return n.getSuffix(t,o)}):[]}},{key:"getSuffix",value:function(t,n){var r=this,o=this.getRule(t);if(o){var i=o.noAbs?o.plurals(n):o.plurals(Math.abs(n)),a=o.numbers[i];this.options.simplifyPluralSuffix&&o.numbers.length===2&&o.numbers[0]===1&&(a===2?a="plural":a===1&&(a=""));var l=function(){return r.options.prepend&&a.toString()?r.options.prepend+a.toString():a.toString()};return this.options.compatibilityJSON==="v1"?a===1?"":typeof a=="number"?"_plural_".concat(a.toString()):l():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&o.numbers.length===2&&o.numbers[0]===1?l():this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString()}return this.logger.warn("no plural rule found for: ".concat(t)),""}}]),e}(),xut=function(){function e(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};df(this,e),this.logger=pf.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||function(n){return n},this.init(t)}return ff(e,[{key:"init",value:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};t.interpolation||(t.interpolation={escapeValue:!0});var n=t.interpolation;this.escape=n.escape!==void 0?n.escape:mut,this.escapeValue=n.escapeValue===void 0||n.escapeValue,this.useRawValueToEscape=n.useRawValueToEscape!==void 0&&n.useRawValueToEscape,this.prefix=n.prefix?ty(n.prefix):n.prefixEscaped||"{{",this.suffix=n.suffix?ty(n.suffix):n.suffixEscaped||"}}",this.formatSeparator=n.formatSeparator?n.formatSeparator:n.formatSeparator||",",this.unescapePrefix=n.unescapeSuffix?"":n.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":n.unescapeSuffix||"",this.nestingPrefix=n.nestingPrefix?ty(n.nestingPrefix):n.nestingPrefixEscaped||ty("$t("),this.nestingSuffix=n.nestingSuffix?ty(n.nestingSuffix):n.nestingSuffixEscaped||ty(")"),this.nestingOptionsSeparator=n.nestingOptionsSeparator?n.nestingOptionsSeparator:n.nestingOptionsSeparator||",",this.maxReplaces=n.maxReplaces?n.maxReplaces:1e3,this.alwaysFormat=n.alwaysFormat!==void 0&&n.alwaysFormat,this.resetRegExp()}},{key:"reset",value:function(){this.options&&this.init(this.options)}},{key:"resetRegExp",value:function(){var t="".concat(this.prefix,"(.+?)").concat(this.suffix);this.regexp=new RegExp(t,"g");var n="".concat(this.prefix).concat(this.unescapePrefix,"(.+?)").concat(this.unescapeSuffix).concat(this.suffix);this.regexpUnescape=new RegExp(n,"g");var r="".concat(this.nestingPrefix,"(.+?)").concat(this.nestingSuffix);this.nestingRegexp=new RegExp(r,"g")}},{key:"interpolate",value:function(t,n,r,o){var i,a,l,s=this,u=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function c(v){return v.replace(/\$/g,"$$$$")}var d=function(v){if(v.indexOf(s.formatSeparator)<0){var g=u6e(n,u,v);return s.alwaysFormat?s.format(g,void 0,r,xi({},o,n,{interpolationkey:v})):g}var b=v.split(s.formatSeparator),y=b.shift().trim(),w=b.join(s.formatSeparator).trim();return s.format(u6e(n,u,y),w,r,xi({},o,n,{interpolationkey:y}))};this.resetRegExp();var f=o&&o.missingInterpolationHandler||this.options.missingInterpolationHandler,p=o&&o.interpolation&&o.interpolation.skipOnVariables||this.options.interpolation.skipOnVariables,m=[{regex:this.regexpUnescape,safeValue:function(v){return c(v)}},{regex:this.regexp,safeValue:function(v){return s.escapeValue?c(s.escape(v)):c(v)}}];return m.forEach(function(v){for(l=0;i=v.regex.exec(t);){if((a=d(i[1].trim()))===void 0)if(typeof f=="function"){var g=f(t,i,o);a=typeof g=="string"?g:""}else{if(p){a=i[0];continue}s.logger.warn("missed to pass in variable ".concat(i[1]," for interpolating ").concat(t)),a=""}else typeof a=="string"||s.useRawValueToEscape||(a=l6e(a));var b=v.safeValue(a);if(t=t.replace(i[0],b),p?(v.regex.lastIndex+=b.length,v.regex.lastIndex-=i[0].length):v.regex.lastIndex=0,++l>=s.maxReplaces)break}}),t}},{key:"nest",value:function(t,n){var r,o,i=this,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},l=xi({},a);function s(f,p){var m=this.nestingOptionsSeparator;if(f.indexOf(m)<0)return f;var v=f.split(new RegExp("".concat(m,"[ ]*{"))),g="{".concat(v[1]);f=v[0],g=(g=this.interpolate(g,l)).replace(/'/g,'"');try{l=JSON.parse(g),p&&(l=xi({},p,l))}catch(b){return this.logger.warn("failed parsing options string in nesting for key ".concat(f),b),"".concat(f).concat(m).concat(g)}return delete l.defaultValue,f}for(l.applyPostProcessor=!1,delete l.defaultValue;r=this.nestingRegexp.exec(t);){var u=[],c=!1;if(r[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(r[1])){var d=r[1].split(this.formatSeparator).map(function(f){return f.trim()});r[1]=d.shift(),u=d,c=!0}if((o=n(s.call(this,r[1].trim(),l),l))&&r[0]===t&&typeof o!="string")return o;typeof o!="string"&&(o=l6e(o)),o||(this.logger.warn("missed to resolve ".concat(r[1]," for nesting ").concat(t)),o=""),c&&(o=u.reduce(function(f,p){return i.format(f,p,a.lng,xi({},a,{interpolationkey:r[1].trim()}))},o.trim())),t=t.replace(r[0],o),this.regexp.lastIndex=0}return t}}]),e}(),_ut=function(){function e(t,n,r){var o,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return df(this,e),o=C8(this,ey(e).call(this)),WC&&rh.call(mv(o)),o.backend=t,o.store=n,o.services=r,o.languageUtils=r.languageUtils,o.options=i,o.logger=pf.create("backendConnector"),o.state={},o.queue=[],o.backend&&o.backend.init&&o.backend.init(r,i.backend,i),o}return $C(e,rh),ff(e,[{key:"queueLoad",value:function(t,n,r,o){var i=this,a=[],l=[],s=[],u=[];return t.forEach(function(c){var d=!0;n.forEach(function(f){var p="".concat(c,"|").concat(f);!r.reload&&i.store.hasResourceBundle(c,f)?i.state[p]=2:i.state[p]<0||(i.state[p]===1?l.indexOf(p)<0&&l.push(p):(i.state[p]=1,d=!1,l.indexOf(p)<0&&l.push(p),a.indexOf(p)<0&&a.push(p),u.indexOf(f)<0&&u.push(f)))}),d||s.push(c)}),(a.length||l.length)&&this.queue.push({pending:l,loaded:{},errors:[],callback:o}),{toLoad:a,pending:l,toLoadLanguages:s,toLoadNamespaces:u}}},{key:"loaded",value:function(t,n,r){var o=t.split("|"),i=o[0],a=o[1];n&&this.emit("failedLoading",i,a,n),r&&this.store.addResourceBundle(i,a,r),this.state[t]=n?-1:2;var l={};this.queue.forEach(function(s){(function(u,c,d){var f=IH(u,c,Object),p=f.obj,m=f.k;p[m]=p[m]||[],p[m].push(d)})(s.loaded,[i],a),function(u,c){for(var d=u.indexOf(c);d!==-1;)u.splice(d,1),d=u.indexOf(c)}(s.pending,t),n&&s.errors.push(n),s.pending.length!==0||s.done||(Object.keys(s.loaded).forEach(function(u){l[u]||(l[u]=[]),s.loaded[u].length&&s.loaded[u].forEach(function(c){l[u].indexOf(c)<0&&l[u].push(c)})}),s.done=!0,s.errors.length?s.callback(s.errors):s.callback())}),this.emit("loaded",l),this.queue=this.queue.filter(function(s){return!s.done})}},{key:"read",value:function(t,n,r){var o=this,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:350,l=arguments.length>5?arguments[5]:void 0;return t.length?this.backend[r](t,n,function(s,u){s&&u&&i<5?setTimeout(function(){o.read.call(o,t,n,r,i+1,2*a,l)},a):l(s,u)}):l(null,{})}},{key:"prepareLoading",value:function(t,n){var r=this,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),i&&i();typeof t=="string"&&(t=this.languageUtils.toResolveHierarchy(t)),typeof n=="string"&&(n=[n]);var a=this.queueLoad(t,n,o,i);if(!a.toLoad.length)return a.pending.length||i(),null;a.toLoad.forEach(function(l){r.loadOne(l)})}},{key:"load",value:function(t,n,r){this.prepareLoading(t,n,{},r)}},{key:"reload",value:function(t,n,r){this.prepareLoading(t,n,{reload:!0},r)}},{key:"loadOne",value:function(t){var n=this,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"",o=t.split("|"),i=o[0],a=o[1];this.read(i,a,"read",void 0,void 0,function(l,s){l&&n.logger.warn("".concat(r,"loading namespace ").concat(a," for language ").concat(i," failed"),l),!l&&s&&n.logger.log("".concat(r,"loaded namespace ").concat(a," for language ").concat(i),s),n.loaded(t,l,s)})}},{key:"saveMissing",value:function(t,n,r,o,i){var a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{};this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(n)?this.logger.warn('did not save key "'.concat(r,'" as the namespace "').concat(n,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!"):r!=null&&r!==""&&(this.backend&&this.backend.create&&this.backend.create(t,n,r,o,null,xi({},a,{isUpdate:i})),t&&t[0]&&this.store.addResource(t[0],n,r,o))}}]),e}();function v6e(e){return typeof e.ns=="string"&&(e.ns=[e.ns]),typeof e.fallbackLng=="string"&&(e.fallbackLng=[e.fallbackLng]),typeof e.fallbackNS=="string"&&(e.fallbackNS=[e.fallbackNS]),e.whitelist&&(e.whitelist&&e.whitelist.indexOf("cimode")<0&&(e.whitelist=e.whitelist.concat(["cimode"])),e.supportedLngs=e.whitelist),e.nonExplicitWhitelist&&(e.nonExplicitSupportedLngs=e.nonExplicitWhitelist),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e}function GC(){}var Eut=function(){function e(){var t,n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;if(df(this,e),t=C8(this,ey(e).call(this)),WC&&rh.call(mv(t)),t.options=v6e(n),t.services={},t.logger=pf,t.modules={external:[]},r&&!t.isInitialized&&!n.isClone){if(!t.options.initImmediate)return t.init(n,r),C8(t,mv(t));setTimeout(function(){t.init(n,r)},0)}return t}return $C(e,rh),ff(e,[{key:"init",value:function(){var t=this,n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;function o(c){return c?typeof c=="function"?new c:c:null}if(typeof n=="function"&&(r=n,n={}),n.whitelist&&!n.supportedLngs&&this.logger.deprecate("whitelist",'option "whitelist" will be renamed to "supportedLngs" in the next major - please make sure to rename this option asap.'),n.nonExplicitWhitelist&&!n.nonExplicitSupportedLngs&&this.logger.deprecate("whitelist",'options "nonExplicitWhitelist" will be renamed to "nonExplicitSupportedLngs" in the next major - please make sure to rename this option asap.'),this.options=xi({},{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,whitelist:!1,nonExplicitWhitelist:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(c){var d={};if(nh(c[1])==="object"&&(d=c[1]),typeof c[1]=="string"&&(d.defaultValue=c[1]),typeof c[2]=="string"&&(d.tDescription=c[2]),nh(c[2])==="object"||nh(c[3])==="object"){var f=c[3]||c[2];Object.keys(f).forEach(function(p){d[p]=f[p]})}return d},interpolation:{escapeValue:!0,format:function(c,d,f,p){return c},prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!1}},this.options,v6e(n)),this.format=this.options.interpolation.format,r||(r=GC),!this.options.isClone){this.modules.logger?pf.init(o(this.modules.logger),this.options):pf.init(null,this.options);var i=new yut(this.options);this.store=new gut(this.options.resources,this.options);var a=this.services;a.logger=pf,a.resourceStore=this.store,a.languageUtils=i,a.pluralResolver=new wut(i,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),a.interpolator=new xut(this.options),a.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},a.backendConnector=new _ut(o(this.modules.backend),a.resourceStore,a,this.options),a.backendConnector.on("*",function(c){for(var d=arguments.length,f=new Array(d>1?d-1:0),p=1;p<d;p++)f[p-1]=arguments[p];t.emit.apply(t,[c].concat(f))}),this.modules.languageDetector&&(a.languageDetector=o(this.modules.languageDetector),a.languageDetector.init(a,this.options.detection,this.options)),this.modules.i18nFormat&&(a.i18nFormat=o(this.modules.i18nFormat),a.i18nFormat.init&&a.i18nFormat.init(this)),this.translator=new h6e(this.services,this.options),this.translator.on("*",function(c){for(var d=arguments.length,f=new Array(d>1?d-1:0),p=1;p<d;p++)f[p-1]=arguments[p];t.emit.apply(t,[c].concat(f))}),this.modules.external.forEach(function(c){c.init&&c.init(t)})}if(this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){var l=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);l.length>0&&l[0]!=="dev"&&(this.options.lng=l[0])}this.services.languageDetector||this.options.lng||this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(function(c){t[c]=function(){var d;return(d=t.store)[c].apply(d,arguments)}}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(function(c){t[c]=function(){var d;return(d=t.store)[c].apply(d,arguments),t}});var s=S8(),u=function(){var c=function(d,f){t.isInitialized&&!t.initializedStoreOnce&&t.logger.warn("init: i18next is already initialized. You should call init just once!"),t.isInitialized=!0,t.options.isClone||t.logger.log("initialized",t.options),t.emit("initialized",t.options),s.resolve(f),r(d,f)};if(t.languages&&t.options.compatibilityAPI!=="v1"&&!t.isInitialized)return c(null,t.t.bind(t));t.changeLanguage(t.options.lng,c)};return this.options.resources||!this.options.initImmediate?u():setTimeout(u,0),s}},{key:"loadResources",value:function(t){var n=this,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:GC,o=typeof t=="string"?t:this.language;if(typeof t=="function"&&(r=t),!this.options.resources||this.options.partialBundledLanguages){if(o&&o.toLowerCase()==="cimode")return r();var i=[],a=function(l){l&&n.services.languageUtils.toResolveHierarchy(l).forEach(function(s){i.indexOf(s)<0&&i.push(s)})};o?a(o):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(function(l){return a(l)}),this.options.preload&&this.options.preload.forEach(function(l){return a(l)}),this.services.backendConnector.load(i,this.options.ns,r)}else r(null)}},{key:"reloadResources",value:function(t,n,r){var o=S8();return t||(t=this.languages),n||(n=this.options.ns),r||(r=GC),this.services.backendConnector.reload(t,n,function(i){o.resolve(),r(i)}),o}},{key:"use",value:function(t){if(!t)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!t.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return t.type==="backend"&&(this.modules.backend=t),(t.type==="logger"||t.log&&t.warn&&t.error)&&(this.modules.logger=t),t.type==="languageDetector"&&(this.modules.languageDetector=t),t.type==="i18nFormat"&&(this.modules.i18nFormat=t),t.type==="postProcessor"&&f6e.addPostProcessor(t),t.type==="3rdParty"&&this.modules.external.push(t),this}},{key:"changeLanguage",value:function(t,n){var r=this;this.isLanguageChangingTo=t;var o=S8();this.emit("languageChanging",t);var i=function(a){t||a||!r.services.languageDetector||(a=[]);var l=typeof a=="string"?a:r.services.languageUtils.getBestMatchFromCodes(a);l&&(r.language||(r.language=l,r.languages=r.services.languageUtils.toResolveHierarchy(l)),r.translator.language||r.translator.changeLanguage(l),r.services.languageDetector&&r.services.languageDetector.cacheUserLanguage(l)),r.loadResources(l,function(s){(function(u,c){c?(r.language=c,r.languages=r.services.languageUtils.toResolveHierarchy(c),r.translator.changeLanguage(c),r.isLanguageChangingTo=void 0,r.emit("languageChanged",c),r.logger.log("languageChanged",c)):r.isLanguageChangingTo=void 0,o.resolve(function(){return r.t.apply(r,arguments)}),n&&n(u,function(){return r.t.apply(r,arguments)})})(s,l)})};return t||!this.services.languageDetector||this.services.languageDetector.async?!t&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect(i):i(t):i(this.services.languageDetector.detect()),o}},{key:"getFixedT",value:function(t,n,r){var o=this,i=function a(l,s){var u;if(nh(s)!=="object"){for(var c=arguments.length,d=new Array(c>2?c-2:0),f=2;f<c;f++)d[f-2]=arguments[f];u=o.options.overloadTranslationOptionHandler([l,s].concat(d))}else u=xi({},s);u.lng=u.lng||a.lng,u.lngs=u.lngs||a.lngs,u.ns=u.ns||a.ns;var p=o.options.keySeparator||".",m=r?"".concat(r).concat(p).concat(l):l;return o.t(m,u)};return typeof t=="string"?i.lng=t:i.lngs=t,i.ns=n,i.keyPrefix=r,i}},{key:"t",value:function(){var t;return this.translator&&(t=this.translator).translate.apply(t,arguments)}},{key:"exists",value:function(){var t;return this.translator&&(t=this.translator).exists.apply(t,arguments)}},{key:"setDefaultNamespace",value:function(t){this.options.defaultNS=t}},{key:"hasLoadedNamespace",value:function(t){var n=this,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;var o=this.languages[0],i=!!this.options&&this.options.fallbackLng,a=this.languages[this.languages.length-1];if(o.toLowerCase()==="cimode")return!0;var l=function(u,c){var d=n.services.backendConnector.state["".concat(u,"|").concat(c)];return d===-1||d===2};if(r.precheck){var s=r.precheck(this,l);if(s!==void 0)return s}return!!this.hasResourceBundle(o,t)||!this.services.backendConnector.backend||!(!l(o,t)||i&&!l(a,t))}},{key:"loadNamespaces",value:function(t,n){var r=this,o=S8();return this.options.ns?(typeof t=="string"&&(t=[t]),t.forEach(function(i){r.options.ns.indexOf(i)<0&&r.options.ns.push(i)}),this.loadResources(function(i){o.resolve(),n&&n(i)}),o):(n&&n(),Promise.resolve())}},{key:"loadLanguages",value:function(t,n){var r=S8();typeof t=="string"&&(t=[t]);var o=this.options.preload||[],i=t.filter(function(a){return o.indexOf(a)<0});return i.length?(this.options.preload=o.concat(i),this.loadResources(function(a){r.resolve(),n&&n(a)}),r):(n&&n(),Promise.resolve())}},{key:"dir",value:function(t){return t||(t=this.languages&&this.languages.length>0?this.languages[0]:this.language),t?["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam"].indexOf(this.services.languageUtils.getLanguagePartFromCode(t))>=0?"rtl":"ltr":"rtl"}},{key:"createInstance",value:function(){return new e(arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},arguments.length>1?arguments[1]:void 0)}},{key:"cloneInstance",value:function(){var t=this,n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:GC,o=xi({},this.options,n,{isClone:!0}),i=new e(o);return["store","services","language"].forEach(function(a){i[a]=t[a]}),i.services=xi({},this.services),i.services.utils={hasLoadedNamespace:i.hasLoadedNamespace.bind(i)},i.translator=new h6e(i.services,i.options),i.translator.on("*",function(a){for(var l=arguments.length,s=new Array(l>1?l-1:0),u=1;u<l;u++)s[u-1]=arguments[u];i.emit.apply(i,[a].concat(s))}),i.init(o,r),i.translator.options=i.options,i.translator.backendConnector.services.utils={hasLoadedNamespace:i.hasLoadedNamespace.bind(i)},i}},{key:"toJSON",value:function(){return{options:this.options,store:this.store,language:this.language,languages:this.languages}}}]),e}(),k8=new Eut;function Ul(e,t){k8.addResourceBundle(e,"translation",t,!0,!0)}k8.init({lng:"zh-CN",resources:{}});var jt=k8.t.bind(k8);Ul("en",{editor:{more:"More",justify:"Justify",indent:"Indent",image:"Image",video:"Video"}}),Ul("zh-CN",{editor:{more:"\u66F4\u591A",justify:"\u5BF9\u9F50",indent:"\u7F29\u8FDB",image:"\u56FE\u7247",video:"\u89C6\u9891"}});var Cut=OL?{}.toString:function(){return"[object "+uE(this)+"]"};OL||j1(Object.prototype,"toString",Cut,{unsafe:!0});var m6e=Array.isArray||function(e){return I1(e)=="Array"},g6e=function(){},Sut=[],y6e=s6("Reflect","construct"),PH=/^\s*(?:class|function)\b/,kut=Kr(PH.exec),Dut=!PH.exec(g6e),D8=function(e){if(!Ri(e))return!1;try{return y6e(g6e,Sut,e),!0}catch{return!1}},Out=!y6e||ea(function(){var e;return D8(D8.call)||!D8(Object)||!D8(function(){e=!0})||e})?function(e){if(!Ri(e))return!1;switch(uE(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return Dut||!!kut(PH,wL(e))}:D8,Tut=sl("species"),b6e=Pn.Array,Mut=function(e,t){return new(function(n){var r;return m6e(n)&&(r=n.constructor,(Out(r)&&(r===b6e||m6e(r.prototype))||Gc(r)&&(r=r[Tut])===null)&&(r=void 0)),r===void 0?b6e:r}(e))(t===0?0:t)},A6e=Kr([].push),oh=function(e){var t=e==1,n=e==2,r=e==3,o=e==4,i=e==6,a=e==7,l=e==5||i;return function(s,u,c,d){for(var f,p,m=mL(s),v=wme(m),g=tge(u,c),b=aE(v),y=0,w=d||Mut,x=t?w(s,b):n||a?w(s,0):void 0;b>y;y++)if((l||y in v)&&(p=g(f=v[y],y,m),e))if(t)x[y]=p;else if(p)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:A6e(x,f)}else switch(e){case 4:return!1;case 7:A6e(x,f)}return i?-1:r||o?o:x}},Nut=[oh(0),oh(1),oh(2),oh(3),oh(4),oh(5),oh(6),oh(7)][0],Fut=function(){var e=[].forEach;return!!e&&ea(function(){e.call(null,function(){throw 1},1)})}(),LH=Fut?[].forEach:function(e){return Nut(this,e,arguments.length>1?arguments[1]:void 0)},w6e=function(e){if(e&&e.forEach!==LH)try{zl(e,"forEach",LH)}catch{e.forEach=LH}};for(var jH in vE)vE[jH]&&w6e(Pn[jH]&&Pn[jH].prototype);w6e(pge),Ul("en",{common:{ok:"OK",delete:"Delete",enter:"Enter"},blockQuote:{title:"Quote"},codeBlock:{title:"Code block"},color:{color:"Font color",bgColor:"Back color",default:"Default color",clear:"Clear back color"},divider:{title:"Divider"},emotion:{title:"Emotion"},fontSize:{title:"Font size",default:"Default"},fontFamily:{title:"Font family",default:"Default"},fullScreen:{title:"Full screen"},header:{title:"Header",text:"Text"},image:{netImage:"Net image",delete:"Delete image",edit:"Edit image",viewLink:"View link",src:"Image src",desc:"Description",link:"Image link"},indent:{decrease:"Decrease",increase:"Increase"},justify:{left:"Left",right:"Right",center:"Center",justify:"Justify"},lineHeight:{title:"Line height",default:"Default"},link:{insert:"Insert link",text:"Link text",url:"Link source",unLink:"Unlink",edit:"Edit link",view:"View link"},textStyle:{bold:"Bold",clear:"Clear styles",code:"Inline code",italic:"Italic",sub:"Sub",sup:"Sup",through:"Through",underline:"Underline"},undo:{undo:"undo",redo:"Redo"},todo:{todo:"Todo"}}),Ul("zh-CN",{common:{ok:"\u786E\u5B9A",delete:"\u5220\u9664",enter:"\u56DE\u8F66"},blockQuote:{title:"\u5F15\u7528"},codeBlock:{title:"\u4EE3\u7801\u5757"},color:{color:"\u6587\u5B57\u989C\u8272",bgColor:"\u80CC\u666F\u8272",default:"\u9ED8\u8BA4\u989C\u8272",clear:"\u6E05\u9664\u80CC\u666F\u8272"},divider:{title:"\u5206\u5272\u7EBF"},emotion:{title:"\u8868\u60C5"},fontSize:{title:"\u5B57\u53F7",default:"\u9ED8\u8BA4\u5B57\u53F7"},fontFamily:{title:"\u5B57\u4F53",default:"\u9ED8\u8BA4\u5B57\u4F53"},fullScreen:{title:"\u5168\u5C4F"},header:{title:"\u6807\u9898",text:"\u6B63\u6587"},image:{netImage:"\u7F51\u7EDC\u56FE\u7247",delete:"\u5220\u9664\u56FE\u7247",edit:"\u7F16\u8F91\u56FE\u7247",viewLink:"\u67E5\u770B\u94FE\u63A5",src:"\u56FE\u7247\u5730\u5740",desc:"\u56FE\u7247\u63CF\u8FF0",link:"\u56FE\u7247\u94FE\u63A5"},indent:{decrease:"\u51CF\u5C11\u7F29\u8FDB",increase:"\u589E\u52A0\u7F29\u8FDB"},justify:{left:"\u5DE6\u5BF9\u9F50",right:"\u53F3\u5BF9\u9F50",center:"\u5C45\u4E2D\u5BF9\u9F50",justify:"\u4E24\u7AEF\u5BF9\u9F50"},lineHeight:{title:"\u884C\u9AD8",default:"\u9ED8\u8BA4\u884C\u9AD8"},link:{insert:"\u63D2\u5165\u94FE\u63A5",text:"\u94FE\u63A5\u6587\u672C",url:"\u94FE\u63A5\u5730\u5740",unLink:"\u53D6\u6D88\u94FE\u63A5",edit:"\u4FEE\u6539\u94FE\u63A5",view:"\u67E5\u770B\u94FE\u63A5"},textStyle:{bold:"\u7C97\u4F53",clear:"\u6E05\u9664\u683C\u5F0F",code:"\u884C\u5185\u4EE3\u7801",italic:"\u659C\u4F53",sub:"\u4E0B\u6807",sup:"\u4E0A\u6807",through:"\u5220\u9664\u7EBF",underline:"\u4E0B\u5212\u7EBF"},undo:{undo:"\u64A4\u9500",redo:"\u91CD\u505A"},todo:{todo:"\u5F85\u529E"}});var Rut={type:"paragraph",renderElem:function(e,t,n){return Mn("p",null,t)}},qC=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function KC(e){var t={exports:{}};return e(t,t.exports),t.exports}var ih,YC,XC=function(e){return e&&e.Math==Math&&e},Gn=XC(typeof globalThis=="object"&&globalThis)||XC(typeof window=="object"&&window)||XC(typeof self=="object"&&self)||XC(typeof qC=="object"&&qC)||function(){return this}()||Function("return this")(),Oo=function(e){try{return!!e()}catch{return!0}},Ju=!Oo(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),O8=Function.prototype.call,oi=O8.bind?O8.bind(O8):function(){return O8.apply(O8,arguments)},x6e={}.propertyIsEnumerable,_6e=Object.getOwnPropertyDescriptor,Iut=_6e&&!x6e.call({1:2},1)?function(e){var t=_6e(this,e);return!!t&&t.enumerable}:x6e,E6e={f:Iut},VH=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},C6e=Function.prototype,zH=C6e.bind,HH=C6e.call,But=zH&&zH.bind(HH),On=zH?function(e){return e&&But(HH,e)}:function(e){return e&&function(){return HH.apply(e,arguments)}},Put=On({}.toString),Lut=On("".slice),ah=function(e){return Lut(Put(e),8,-1)},$H=Gn.Object,jut=On("".split),QC=Oo(function(){return!$H("z").propertyIsEnumerable(0)})?function(e){return ah(e)=="String"?jut(e,""):$H(e)}:$H,Vut=Gn.TypeError,hu=function(e){if(e==null)throw Vut("Can't call method on "+e);return e},ny=function(e){return QC(hu(e))},Pa=function(e){return typeof e=="function"},Zu=function(e){return typeof e=="object"?e!==null:Pa(e)},T8=function(e,t){return arguments.length<2?function(n){return Pa(n)?n:void 0}(Gn[e]):Gn[e]&&Gn[e][t]},S6e=On({}.isPrototypeOf),UH=T8("navigator","userAgent")||"",k6e=Gn.process,D6e=Gn.Deno,O6e=k6e&&k6e.versions||D6e&&D6e.version,T6e=O6e&&O6e.v8;T6e&&(YC=(ih=T6e.split("."))[0]>0&&ih[0]<4?1:+(ih[0]+ih[1])),!YC&&UH&&(!(ih=UH.match(/Edge\/(\d+)/))||ih[1]>=74)&&(ih=UH.match(/Chrome\/(\d+)/))&&(YC=+ih[1]);var WH=YC,GH=!!Object.getOwnPropertySymbols&&!Oo(function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&WH&&WH<41}),qH=GH&&!Symbol.sham&&typeof Symbol.iterator=="symbol",zut=Gn.Object,KH=qH?function(e){return typeof e=="symbol"}:function(e){var t=T8("Symbol");return Pa(t)&&S6e(t.prototype,zut(e))},Hut=Gn.String,M6e=function(e){try{return Hut(e)}catch{return"Object"}},$ut=Gn.TypeError,N6e=function(e){if(Pa(e))return e;throw $ut(M6e(e)+" is not a function")},JC=function(e,t){var n=e[t];return n==null?void 0:N6e(n)},Uut=Gn.TypeError,Wut=Object.defineProperty,YH=function(e,t){try{Wut(Gn,e,{value:t,configurable:!0,writable:!0})}catch{Gn[e]=t}return t},lh=Gn["__core-js_shared__"]||YH("__core-js_shared__",{}),XH=KC(function(e){(e.exports=function(t,n){return lh[t]||(lh[t]=n!==void 0?n:{})})("versions",[]).push({version:"3.19.3",mode:"global",copyright:"\xA9 2021 Denis Pushkarev (zloirock.ru)"})}),Gut=Gn.Object,M8=function(e){return Gut(hu(e))},qut=On({}.hasOwnProperty),vu=Object.hasOwn||function(e,t){return qut(M8(e),t)},Kut=0,Yut=Math.random(),Xut=On(1 .toString),F6e=function(e){return"Symbol("+(e===void 0?"":e)+")_"+Xut(++Kut+Yut,36)},N8=XH("wks"),gv=Gn.Symbol,R6e=gv&&gv.for,Qut=qH?gv:gv&&gv.withoutSetter||F6e,Ts=function(e){if(!vu(N8,e)||!GH&&typeof N8[e]!="string"){var t="Symbol."+e;GH&&vu(gv,e)?N8[e]=gv[e]:N8[e]=qH&&R6e?R6e(t):Qut(t)}return N8[e]},Jut=Gn.TypeError,Zut=Ts("toPrimitive"),QH=function(e){var t=function(n){if(!Zu(n)||KH(n))return n;var r,o=JC(n,Zut);if(o){if(r=oi(o,n,"string"),!Zu(r)||KH(r))return r;throw Jut("Can't convert object to primitive value")}return function(i){var a,l;if(Pa(a=i.toString)&&!Zu(l=oi(a,i))||Pa(a=i.valueOf)&&!Zu(l=oi(a,i)))return l;throw Uut("Can't convert object to primitive value")}(n)}(e);return KH(t)?t:t+""},JH=Gn.document,ect=Zu(JH)&&Zu(JH.createElement),ZH=function(e){return ect?JH.createElement(e):{}},I6e=!Ju&&!Oo(function(){return Object.defineProperty(ZH("div"),"a",{get:function(){return 7}}).a!=7}),B6e=Object.getOwnPropertyDescriptor,e$={f:Ju?B6e:function(e,t){if(e=ny(e),t=QH(t),I6e)try{return B6e(e,t)}catch{}if(vu(e,t))return VH(!oi(E6e.f,e,t),e[t])}},tct=Gn.String,nct=Gn.TypeError,Ms=function(e){if(Zu(e))return e;throw nct(tct(e)+" is not an object")},rct=Gn.TypeError,P6e=Object.defineProperty,ry={f:Ju?P6e:function(e,t,n){if(Ms(e),t=QH(t),Ms(n),I6e)try{return P6e(e,t,n)}catch{}if("get"in n||"set"in n)throw rct("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},oy=Ju?function(e,t,n){return ry.f(e,t,VH(1,n))}:function(e,t,n){return e[t]=n,e},oct=On(Function.toString);Pa(lh.inspectSource)||(lh.inspectSource=function(e){return oct(e)});var ZC,F8,eS,t$=lh.inspectSource,L6e=Gn.WeakMap,ict=Pa(L6e)&&/native code/.test(t$(L6e)),j6e=XH("keys"),V6e=function(e){return j6e[e]||(j6e[e]=F6e(e))},n$={},r$=Gn.TypeError,act=Gn.WeakMap;if(ict||lh.state){var yv=lh.state||(lh.state=new act),lct=On(yv.get),z6e=On(yv.has),sct=On(yv.set);ZC=function(e,t){if(z6e(yv,e))throw new r$("Object already initialized");return t.facade=e,sct(yv,e,t),t},F8=function(e){return lct(yv,e)||{}},eS=function(e){return z6e(yv,e)}}else{var iy=V6e("state");n$[iy]=!0,ZC=function(e,t){if(vu(e,iy))throw new r$("Object already initialized");return t.facade=e,oy(e,iy,t),t},F8=function(e){return vu(e,iy)?e[iy]:{}},eS=function(e){return vu(e,iy)}}var o$={set:ZC,get:F8,has:eS,enforce:function(e){return eS(e)?F8(e):ZC(e,{})},getterFor:function(e){return function(t){var n;if(!Zu(t)||(n=F8(t)).type!==e)throw r$("Incompatible receiver, "+e+" required");return n}}},H6e=Function.prototype,uct=Ju&&Object.getOwnPropertyDescriptor,i$=vu(H6e,"name"),tS={EXISTS:i$,PROPER:i$&&(function(){}).name==="something",CONFIGURABLE:i$&&(!Ju||Ju&&uct(H6e,"name").configurable)},R8=KC(function(e){var t=tS.CONFIGURABLE,n=o$.get,r=o$.enforce,o=String(String).split("String");(e.exports=function(i,a,l,s){var u,c=!!s&&!!s.unsafe,d=!!s&&!!s.enumerable,f=!!s&&!!s.noTargetGet,p=s&&s.name!==void 0?s.name:a;Pa(l)&&(String(p).slice(0,7)==="Symbol("&&(p="["+String(p).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!vu(l,"name")||t&&l.name!==p)&&oy(l,"name",p),(u=r(l)).source||(u.source=o.join(typeof p=="string"?p:""))),i!==Gn?(c?!f&&i[a]&&(d=!0):delete i[a],d?i[a]=l:oy(i,a,l)):d?i[a]=l:YH(a,l)})(Function.prototype,"toString",function(){return Pa(this)&&n(this).source||t$(this)})}),cct=Math.ceil,dct=Math.floor,ay=function(e){var t=+e;return t!=t||t===0?0:(t>0?dct:cct)(t)},fct=Math.max,pct=Math.min,I8=function(e,t){var n=ay(e);return n<0?fct(n+t,0):pct(n,t)},hct=Math.min,B8=function(e){return e>0?hct(ay(e),9007199254740991):0},nS=function(e){return B8(e.length)},$6e=function(e){return function(t,n,r){var o,i=ny(t),a=nS(i),l=I8(r,a);if(e&&n!=n){for(;a>l;)if((o=i[l++])!=o)return!0}else for(;a>l;l++)if((e||l in i)&&i[l]===n)return e||l||0;return!e&&-1}},U6e={includes:$6e(!0),indexOf:$6e(!1)},vct=U6e.indexOf,W6e=On([].push),G6e=function(e,t){var n,r=ny(e),o=0,i=[];for(n in r)!vu(n$,n)&&vu(r,n)&&W6e(i,n);for(;t.length>o;)vu(r,n=t[o++])&&(~vct(i,n)||W6e(i,n));return i},rS=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],mct=rS.concat("length","prototype"),gct={f:Object.getOwnPropertyNames||function(e){return G6e(e,mct)}},q6e={f:Object.getOwnPropertySymbols},yct=On([].concat),bct=T8("Reflect","ownKeys")||function(e){var t=gct.f(Ms(e)),n=q6e.f;return n?yct(t,n(e)):t},Act=function(e,t){for(var n=bct(t),r=ry.f,o=e$.f,i=0;i<n.length;i++){var a=n[i];vu(e,a)||r(e,a,o(t,a))}},wct=/#|\.prototype\./,P8=function(e,t){var n=_ct[xct(e)];return n==Cct||n!=Ect&&(Pa(t)?Oo(t):!!t)},xct=P8.normalize=function(e){return String(e).replace(wct,".").toLowerCase()},_ct=P8.data={},Ect=P8.NATIVE="N",Cct=P8.POLYFILL="P",Sct=P8,kct=e$.f,Bi=function(e,t){var n,r,o,i,a,l=e.target,s=e.global,u=e.stat;if(n=s?Gn:u?Gn[l]||YH(l,{}):(Gn[l]||{}).prototype)for(r in t){if(i=t[r],o=e.noTargetGet?(a=kct(n,r))&&a.value:n[r],!Sct(s?r:l+(u?".":"#")+r,e.forced)&&o!==void 0){if(typeof i==typeof o)continue;Act(i,o)}(e.sham||o&&o.sham)&&oy(i,"sham",!0),R8(n,r,i,e)}},K6e=On(On.bind),oS=Array.isArray||function(e){return ah(e)=="Array"},Y6e={};Y6e[Ts("toStringTag")]="z";var a$=String(Y6e)==="[object z]",Dct=Ts("toStringTag"),Oct=Gn.Object,Tct=ah(function(){return arguments}())=="Arguments",l$=a$?ah:function(e){var t,n,r;return e===void 0?"Undefined":e===null?"Null":typeof(n=function(o,i){try{return o[i]}catch{}}(t=Oct(e),Dct))=="string"?n:Tct?ah(t):(r=ah(t))=="Object"&&Pa(t.callee)?"Arguments":r},X6e=function(){},Mct=[],Q6e=T8("Reflect","construct"),s$=/^\s*(?:class|function)\b/,Nct=On(s$.exec),Fct=!s$.exec(X6e),L8=function(e){if(!Pa(e))return!1;try{return Q6e(X6e,Mct,e),!0}catch{return!1}},u$=!Q6e||Oo(function(){var e;return L8(L8.call)||!L8(Object)||!L8(function(){e=!0})||e})?function(e){if(!Pa(e))return!1;switch(l$(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return Fct||!!Nct(s$,t$(e))}:L8,Rct=Ts("species"),J6e=Gn.Array,Ict=function(e,t){return new(function(n){var r;return oS(n)&&(r=n.constructor,(u$(r)&&(r===J6e||oS(r.prototype))||Zu(r)&&(r=r[Rct])===null)&&(r=void 0)),r===void 0?J6e:r}(e))(t===0?0:t)},Z6e=On([].push),sh=function(e){var t=e==1,n=e==2,r=e==3,o=e==4,i=e==6,a=e==7,l=e==5||i;return function(s,u,c,d){for(var f,p,m=M8(s),v=QC(m),g=function(_,E){return N6e(_),E===void 0?_:K6e?K6e(_,E):function(){return _.apply(E,arguments)}}(u,c),b=nS(v),y=0,w=d||Ict,x=t?w(s,b):n||a?w(s,0):void 0;b>y;y++)if((l||y in v)&&(p=g(f=v[y],y,m),e))if(t)x[y]=p;else if(p)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:Z6e(x,f)}else switch(e){case 4:return!1;case 7:Z6e(x,f)}return i?-1:r||o?o:x}},iS={forEach:sh(0),map:sh(1),filter:sh(2),some:sh(3),every:sh(4),find:sh(5),findIndex:sh(6),filterReject:sh(7)},Bct=Ts("species"),c$=function(e){return WH>=51||!Oo(function(){var t=[];return(t.constructor={})[Bct]=function(){return{foo:1}},t[e](Boolean).foo!==1})},Pct=iS.filter;Bi({target:"Array",proto:!0,forced:!c$("filter")},{filter:function(e){return Pct(this,e,arguments.length>1?arguments[1]:void 0)}});var Lct=a$?{}.toString:function(){return"[object "+l$(this)+"]"};a$||R8(Object.prototype,"toString",Lct,{unsafe:!0});var aS,jct=Gn.String,To=function(e){if(l$(e)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return jct(e)},e8e=function(){var e=Ms(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t},d$=Gn.RegExp,f$=Oo(function(){var e=d$("a","y");return e.lastIndex=2,e.exec("abcd")!=null}),Vct=f$||Oo(function(){return!d$("a","y").sticky}),t8e={BROKEN_CARET:f$||Oo(function(){var e=d$("^r","gy");return e.lastIndex=2,e.exec("str")!=null}),MISSED_STICKY:Vct,UNSUPPORTED_Y:f$},ly=Object.keys||function(e){return G6e(e,rS)},zct=Ju?Object.defineProperties:function(e,t){Ms(e);for(var n,r=ny(t),o=ly(t),i=o.length,a=0;i>a;)ry.f(e,n=o[a++],r[n]);return e},Hct=T8("document","documentElement"),n8e=V6e("IE_PROTO"),p$=function(){},r8e=function(e){return"<script>"+e+"<\/script>"},o8e=function(e){e.write(r8e("")),e.close();var t=e.parentWindow.Object;return e=null,t},lS=function(){try{aS=new ActiveXObject("htmlfile")}catch{}var e,t;lS=typeof document<"u"?document.domain&&aS?o8e(aS):((t=ZH("iframe")).style.display="none",Hct.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write(r8e("document.F=Object")),e.close(),e.F):o8e(aS);for(var n=rS.length;n--;)delete lS.prototype[rS[n]];return lS()};n$[n8e]=!0;var i8e,h$,a8e=Object.create||function(e,t){var n;return e!==null?(p$.prototype=Ms(e),n=new p$,p$.prototype=null,n[n8e]=e):n=lS(),t===void 0?n:zct(n,t)},$ct=Gn.RegExp,Uct=Oo(function(){var e=$ct(".","s");return!(e.dotAll&&e.exec(`
| `)&&e.flags==="s")}),Wct=Gn.RegExp,Gct=Oo(function(){var e=Wct("(?<a>b)","g");return e.exec("b").groups.a!=="b"||"b".replace(e,"$<a>c")!=="bc"}),qct=o$.get,Kct=XH("native-string-replace",String.prototype.replace),sS=RegExp.prototype.exec,v$=sS,Yct=On("".charAt),Xct=On("".indexOf),Qct=On("".replace),m$=On("".slice),g$=(h$=/b*/g,oi(sS,i8e=/a/,"a"),oi(sS,h$,"a"),i8e.lastIndex!==0||h$.lastIndex!==0),l8e=t8e.BROKEN_CARET,y$=/()??/.exec("")[1]!==void 0;(g$||y$||l8e||Uct||Gct)&&(v$=function(e){var t,n,r,o,i,a,l,s=this,u=qct(s),c=To(e),d=u.raw;if(d)return d.lastIndex=s.lastIndex,t=oi(v$,d,c),s.lastIndex=d.lastIndex,t;var f=u.groups,p=l8e&&s.sticky,m=oi(e8e,s),v=s.source,g=0,b=c;if(p&&(m=Qct(m,"y",""),Xct(m,"g")===-1&&(m+="g"),b=m$(c,s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&Yct(c,s.lastIndex-1)!==`
| `)&&(v="(?: "+v+")",b=" "+b,g++),n=new RegExp("^(?:"+v+")",m)),y$&&(n=new RegExp("^"+v+"$(?!\\s)",m)),g$&&(r=s.lastIndex),o=oi(sS,p?n:s,b),p?o?(o.input=m$(o.input,g),o[0]=m$(o[0],g),o.index=s.lastIndex,s.lastIndex+=o[0].length):s.lastIndex=0:g$&&o&&(s.lastIndex=s.global?o.index+o[0].length:r),y$&&o&&o.length>1&&oi(Kct,o[0],n,function(){for(i=1;i<arguments.length-2;i++)arguments[i]===void 0&&(o[i]=void 0)}),o&&f)for(o.groups=a=a8e(null),i=0;i<f.length;i++)a[(l=f[i])[0]]=o[l[1]];return o});var j8=v$;Bi({target:"RegExp",proto:!0,forced:/./.exec!==j8},{exec:j8});var b$=Function.prototype,s8e=b$.apply,Jct=b$.bind,u8e=b$.call,c8e=typeof Reflect=="object"&&Reflect.apply||(Jct?u8e.bind(s8e):function(){return u8e.apply(s8e,arguments)}),Zct=Ts("species"),A$=RegExp.prototype,w$=function(e,t,n,r){var o=Ts(e),i=!Oo(function(){var u={};return u[o]=function(){return 7},""[e](u)!=7}),a=i&&!Oo(function(){var u=!1,c=/a/;return e==="split"&&((c={}).constructor={},c.constructor[Zct]=function(){return c},c.flags="",c[o]=/./[o]),c.exec=function(){return u=!0,null},c[o](""),!u});if(!i||!a||n){var l=On(/./[o]),s=t(o,""[e],function(u,c,d,f,p){var m=On(u),v=c.exec;return v===j8||v===A$.exec?i&&!p?{done:!0,value:l(c,d,f)}:{done:!0,value:m(d,c,f)}:{done:!1}});R8(String.prototype,e,s[0]),R8(A$,o,s[1])}r&&oy(A$[o],"sham",!0)},edt=On("".charAt),d8e=On("".charCodeAt),tdt=On("".slice),ndt=function(e){return function(t,n){var r,o,i=To(hu(t)),a=ay(n),l=i.length;return a<0||a>=l?e?"":void 0:(r=d8e(i,a))<55296||r>56319||a+1===l||(o=d8e(i,a+1))<56320||o>57343?e?edt(i,a):r:e?tdt(i,a,a+2):o-56320+(r-55296<<10)+65536}}(!0),x$=function(e,t,n){return t+(n?ndt(e,t).length:1)},rdt=Math.floor,_$=On("".charAt),odt=On("".replace),E$=On("".slice),idt=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,adt=/\$([$&'`]|\d{1,2})/g,ldt=function(e,t,n,r,o,i){var a=n+e.length,l=r.length,s=adt;return o!==void 0&&(o=M8(o),s=idt),odt(i,s,function(u,c){var d;switch(_$(c,0)){case"$":return"$";case"&":return e;case"`":return E$(t,0,n);case"'":return E$(t,a);case"<":d=o[E$(c,1,-1)];break;default:var f=+c;if(f===0)return u;if(f>l){var p=rdt(f/10);return p===0?u:p<=l?r[p-1]===void 0?_$(c,1):r[p-1]+_$(c,1):u}d=r[f-1]}return d===void 0?"":d})},sdt=Gn.TypeError,V8=function(e,t){var n=e.exec;if(Pa(n)){var r=oi(n,e,t);return r!==null&&Ms(r),r}if(ah(e)==="RegExp")return oi(j8,e,t);throw sdt("RegExp#exec called on incompatible receiver")},C$=Ts("replace"),udt=Math.max,cdt=Math.min,ddt=On([].concat),S$=On([].push),f8e=On("".indexOf),p8e=On("".slice),fdt="a".replace(/./,"$0")==="$0",h8e=!!/./[C$]&&/./[C$]("a","$0")==="";w$("replace",function(e,t,n){var r=h8e?"$":"$0";return[function(o,i){var a=hu(this),l=o==null?void 0:JC(o,C$);return l?oi(l,o,a,i):oi(t,To(a),o,i)},function(o,i){var a=Ms(this),l=To(o);if(typeof i=="string"&&f8e(i,r)===-1&&f8e(i,"$<")===-1){var s=n(t,a,l,i);if(s.done)return s.value}var u=Pa(i);u||(i=To(i));var c=a.global;if(c){var d=a.unicode;a.lastIndex=0}for(var f=[];;){var p=V8(a,l);if(p===null||(S$(f,p),!c))break;To(p[0])===""&&(a.lastIndex=x$(l,B8(a.lastIndex),d))}for(var m,v="",g=0,b=0;b<f.length;b++){for(var y=To((p=f[b])[0]),w=udt(cdt(ay(p.index),l.length),0),x=[],_=1;_<p.length;_++)S$(x,(m=p[_])===void 0?m:String(m));var E=p.groups;if(u){var C=ddt([y],x,w,l);E!==void 0&&S$(C,E);var T=To(c8e(i,void 0,C))}else T=ldt(y,l,w,x,E,i);w>=g&&(v+=p8e(l,g,w)+T,g=w+y.length)}return v+p8e(l,g)}]},!!Oo(function(){var e=/./;return e.exec=function(){var t=[];return t.groups={a:"7"},t},"".replace(e,"$<a>")!=="7"})||!fdt||h8e);var k$=Ts("unscopables"),D$=Array.prototype;D$[k$]==null&&ry.f(D$,k$,{configurable:!0,value:a8e(null)});var v8e=function(e){D$[k$][e]=!0},pdt=iS.find,m8e=!0;"find"in[]&&Array(1).find(function(){m8e=!1}),Bi({target:"Array",proto:!0,forced:m8e},{find:function(e){return pdt(this,e,arguments.length>1?arguments[1]:void 0)}}),v8e("find");var hdt=Ts("match"),g8e=function(e){var t;return Zu(e)&&((t=e[hdt])!==void 0?!!t:ah(e)=="RegExp")},vdt=Gn.TypeError,mdt=Ts("species"),y8e=function(e,t,n){var r=QH(t);r in e?ry.f(e,r,VH(0,n)):e[r]=n},gdt=Gn.Array,ydt=Math.max,b8e=function(e,t,n){for(var r=nS(e),o=I8(t,r),i=I8(n===void 0?r:n,r),a=gdt(ydt(i-o,0)),l=0;o<i;o++,l++)y8e(a,l,e[o]);return a.length=l,a},sy=t8e.UNSUPPORTED_Y,bdt=Math.min,A8e=[].push,Adt=On(/./.exec),uy=On(A8e),z8=On("".slice);w$("split",function(e,t,n){var r;return r="abbc".split(/(b)*/)[1]=="c"||"test".split(/(?:)/,-1).length!=4||"ab".split(/(?:ab)*/).length!=2||".".split(/(.?)(.?)/).length!=4||".".split(/()()/).length>1||"".split(/.?/).length?function(o,i){var a=To(hu(this)),l=i===void 0?4294967295:i>>>0;if(l===0)return[];if(o===void 0)return[a];if(!g8e(o))return oi(t,a,o,l);for(var s,u,c,d=[],f=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(o.sticky?"y":""),p=0,m=new RegExp(o.source,f+"g");(s=oi(j8,m,a))&&!((u=m.lastIndex)>p&&(uy(d,z8(a,p,s.index)),s.length>1&&s.index<a.length&&c8e(A8e,d,b8e(s,1)),c=s[0].length,p=u,d.length>=l));)m.lastIndex===s.index&&m.lastIndex++;return p===a.length?!c&&Adt(m,"")||uy(d,""):uy(d,z8(a,p)),d.length>l?b8e(d,0,l):d}:"0".split(void 0,0).length?function(o,i){return o===void 0&&i===0?[]:oi(t,this,o,i)}:t,[function(o,i){var a=hu(this),l=o==null?void 0:JC(o,e);return l?oi(l,o,a,i):oi(r,To(a),o,i)},function(o,i){var a=Ms(this),l=To(o),s=n(r,a,l,i,r!==t);if(s.done)return s.value;var u=function(x,_){var E,C=Ms(x).constructor;return C===void 0||(E=Ms(C)[mdt])==null?_:function(T){if(u$(T))return T;throw vdt(M6e(T)+" is not a constructor")}(E)}(a,RegExp),c=a.unicode,d=(a.ignoreCase?"i":"")+(a.multiline?"m":"")+(a.unicode?"u":"")+(sy?"g":"y"),f=new u(sy?"^(?:"+a.source+")":a,d),p=i===void 0?4294967295:i>>>0;if(p===0)return[];if(l.length===0)return V8(f,l)===null?[l]:[];for(var m=0,v=0,g=[];v<l.length;){f.lastIndex=sy?0:v;var b,y=V8(f,sy?z8(l,v):l);if(y===null||(b=bdt(B8(f.lastIndex+(sy?v:0)),l.length))===m)v=x$(l,v,c);else{if(uy(g,z8(l,m,v)),g.length===p)return g;for(var w=1;w<=y.length-1;w++)if(uy(g,y[w]),g.length===p)return g;v=m=b}}return uy(g,z8(l,m)),g}]},!!Oo(function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return n.length!==2||n[0]!=="a"||n[1]!=="b"}),sy);var O$=`
| \v\f\r \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF`,w8e=On("".replace),uS="["+O$+"]",wdt=RegExp("^"+uS+uS+"*"),xdt=RegExp(uS+uS+"*$"),T$=function(e){return function(t){var n=To(hu(t));return 1&e&&(n=w8e(n,wdt,"")),2&e&&(n=w8e(n,xdt,"")),n}},_dt={start:T$(1),end:T$(2),trim:T$(3)},Edt=tS.PROPER,Cdt=_dt.trim;function M$(e){return Pe("<div>"+e+"</div>").children().filter(function(t){return t.tagName!=="BR"}).length===0}function cy(e){return e.length===0?"":e[0].outerHTML}function dy(e){return e.length?e[0].tagName.toLowerCase():""}function ec(e,t){for(var n="",r=(e.attr("style")||"").split(";"),o=r.length,i=0;i<o;i++){var a=r[i];if(a){var l=a.split(":");l[0].trim()===t&&(n=l[1].trim())}}return n}Bi({target:"String",proto:!0,forced:Oo(function(){return!!O$.trim()||"\u200B\x85\u180E".trim()!=="\u200B\x85\u180E"||Edt&&O$.trim.name!=="trim"})},{trim:function(){return Cdt(this)}}),Bi({global:!0},{globalThis:Gn}),PE&&(Pe.fn.css=PE),au&&(Pe.fn.append=au),z2e&&(Pe.fn.prepend=z2e),m2&&(Pe.fn.addClass=m2),g2&&(Pe.fn.removeClass=g2),y2&&(Pe.fn.hasClass=y2),Yc&&(Pe.fn.on=Yc),P2e&&(Pe.fn.off=P2e),$p&&(Pe.fn.focus=$p),iu&&(Pe.fn.attr=iu),FE&&(Pe.fn.removeAttr=FE),A2&&(Pe.fn.hide=A2),BE&&(Pe.fn.show=BE),VE&&(Pe.fn.parents=VE),b2&&(Pe.fn.dataset=b2),Kc&&(Pe.fn.val=Kc),jE&&(Pe.fn.text=jE),Hp&&(Pe.fn.html=Hp),_2&&(Pe.fn.children=_2),E2&&(Pe.fn.remove=E2),x2&&(Pe.fn.find=x2),RE&&(Pe.fn.width=RE),IE&&(Pe.fn.height=IE),j2e&&(Pe.fn.filter=j2e),C2&&(Pe.fn.empty=C2);var Sdt={selector:"p:not([data-w-e-type])",parseElemHtml:function(e,t,n){var r=Pe(e);return(t=t.filter(function(o){return!!Qt.isText(o)||!!n.isInline(o)})).length===0&&(t=[{text:r.text().replace(/\s+/gm," ")}]),{type:"paragraph",children:t}}},N$=function(e,t){return N$=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(n[o]=r[o])},N$(e,t)};function yo(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}N$(e,t),e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var uh=function(){return uh=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},uh.apply(this,arguments)};function ch(e,t,n,r){return new(n||(n=Promise))(function(o,i){function a(u){try{s(r.next(u))}catch(c){i(c)}}function l(u){try{s(r.throw(u))}catch(c){i(c)}}function s(u){var c;u.done?o(u.value):(c=u.value,c instanceof n?c:new n(function(d){d(c)})).then(a,l)}s((r=r.apply(e,[])).next())})}function dh(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:l(0),throw:l(1),return:l(2)},typeof Symbol=="function"&&(i[Symbol.iterator]=function(){return this}),i;function l(s){return function(u){return function(c){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||c[0]!==6&&c[0]!==2)){a=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(c[0]===6&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(d){c=[6,d],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([s,u])}}}function x8e(e){var t=typeof Symbol=="function"&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Or(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(t===void 0||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(l){o={error:l}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function _8e(e){var t=Or(ue.nodes(e,{match:function(i){return e.children[0]===i},mode:"highest"}),1)[0];if(t==null)return!1;var n=t[0];if(!sn.isElement(n)||n.type==="paragraph"||Lt.string(n)!=="")return!1;var r=n.children,o=r===void 0?[]:r;return!!Qt.isText(o[0])&&(et.setNodes(e,{type:"paragraph"}),!0)}var kdt={renderElems:[Rut],elemsToHtml:[{type:"paragraph",elemToHtml:function(e,t){return t===""?"<p><br></p>":"<p>"+t+"</p>"}}],parseElemsHtml:[Sdt],editorPlugin:function(e){var t=e.deleteBackward,n=e.deleteForward;e.insertText,e.insertBreak;var r=e;return r.deleteBackward=function(o){_8e(r)||t(o)},r.deleteForward=function(o){_8e(r)||n(o)},r}},Ddt=/"/g,Odt=On("".replace),H8=function(e,t,n,r){var o=To(hu(e)),i="<"+t;return n!==""&&(i+=" "+n+'="'+Odt(To(r),Ddt,""")+'"'),i+">"+o+"</"+t+">"},$8=function(e){return Oo(function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3})};function F$(e,t){var n=t,r=e,o=r.bold,i=r.italic,a=r.underline;return o&&(n="<strong>"+n+"</strong>"),r.code&&(n="<code>"+n+"</code>"),i&&(n="<em>"+n+"</em>"),a&&(n="<u>"+n+"</u>"),r.through&&(n="<s>"+n+"</s>"),r.sub&&(n="<sub>"+n+"</sub>"),r.sup&&(n="<sup>"+n+"</sup>"),n}function bv(e,t){return e.length!==0&&(!!e[0].matches(t)||e.find(t).length>0)}Bi({target:"String",proto:!0,forced:$8("bold")},{bold:function(){return H8(this,"b","","")}}),Bi({target:"String",proto:!0,forced:$8("italics")},{italics:function(){return H8(this,"i","","")}}),Bi({target:"String",proto:!0,forced:$8("sub")},{sub:function(){return H8(this,"sub","","")}}),Bi({target:"String",proto:!0,forced:$8("sup")},{sup:function(){return H8(this,"sup","","")}});var E8e={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},R$=ZH("span").classList,C8e=R$&&R$.constructor&&R$.constructor.prototype,Tdt=C8e===Object.prototype?void 0:C8e,S8e=function(e,t){var n=[][e];return!!n&&Oo(function(){n.call(null,t||function(){throw 1},1)})},Mdt=iS.forEach,I$=S8e("forEach")?[].forEach:function(e){return Mdt(this,e,arguments.length>1?arguments[1]:void 0)},k8e=function(e){if(e&&e.forEach!==I$)try{oy(e,"forEach",I$)}catch{e.forEach=I$}};for(var B$ in E8e)E8e[B$]&&k8e(Gn[B$]&&Gn[B$].prototype);function D8e(e,t){return e.selection==null||!!Or(ue.nodes(e,{match:function(n){return Re.getNodeType(n)==="pre"||!!ue.isVoid(e,n)},universal:!0}),1)[0]}function Ndt(e,t){Object.keys(t).forEach(function(n){n!=="text"&&ue.removeMark(e,n)})}k8e(Tdt),Bi({target:"Object",stat:!0,forced:Oo(function(){ly(1)})},{keys:function(e){return ly(M8(e))}});var Av=function(){function e(){this.marksNeedToRemove=[],this.tag="button"}return e.prototype.getValue=function(t){var n=this.mark,r=ue.marks(t);return r?r[n]:!!Or(ue.nodes(t,{match:function(o){return o[n]===!0}}),1)[0]},e.prototype.isActive=function(t){return!!this.getValue(t)},e.prototype.isDisabled=function(t){return D8e(t,this.mark)},e.prototype.exec=function(t,n){var r=this.mark,o=this.marksNeedToRemove;n?t.removeMark(r):(t.addMark(r,!0),o&&o.forEach(function(i){return t.removeMark(i)}))},e}(),O8e='<svg viewBox="0 0 1024 1024"><path d="M864 0a160 160 0 0 1 128 256l-64 64-224-224 64-64c26.752-20.096 59.968-32 96-32zM64 736l-64 288 288-64 592-592-224-224L64 736z m651.584-372.416l-448 448-55.168-55.168 448-448 55.168 55.168z"></path></svg>',T8e='<svg viewBox="0 0 1024 1024"><path d="M924.402464 1023.068211H0.679665V99.345412h461.861399v98.909208H99.596867v725.896389h725.896389V561.206811h98.909208z" p-id="10909"></path><path d="M930.805104 22.977336l69.965436 69.965436-453.492405 453.492404-69.965435-69.901489z" p-id="10910"></path><path d="M1022.464381 304.030081h-98.917201V99.345412H709.230573V0.428211h313.233808z"></path></svg>',Fdt=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.mark="bold",n.title=jt("textStyle.bold"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M707.872 484.64A254.88 254.88 0 0 0 768 320c0-141.152-114.848-256-256-256H192v896h384c141.152 0 256-114.848 256-256a256.096 256.096 0 0 0-124.128-219.36zM384 192h101.504c55.968 0 101.504 57.408 101.504 128s-45.536 128-101.504 128H384V192z m159.008 640H384v-256h159.008c58.464 0 106.016 57.408 106.016 128s-47.552 128-106.016 128z"></path></svg>',n.hotkey="mod+b",n}return yo(t,e),t}(Av),Rdt=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.mark="code",n.title=jt("textStyle.code"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M576 736l96 96 320-320L672 192l-96 96 224 224zM448 288l-96-96L32 512l320 320 96-96-224-224z"></path></svg>',n.hotkey="mod+e",n}return yo(t,e),t}(Av),Idt=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.mark="italic",n.title=jt("textStyle.italic"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M896 64v64h-128L448 896h128v64H128v-64h128L576 128h-128V64z"></path></svg>',n.hotkey="mod+i",n}return yo(t,e),t}(Av),Bdt=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.mark="through",n.title=jt("textStyle.through"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M1024 512v64h-234.496c27.52 38.496 42.496 82.688 42.496 128 0 70.88-36.672 139.04-100.576 186.976C672.064 935.488 594.144 960 512 960s-160.064-24.512-219.424-69.024C228.64 843.04 192 774.88 192 704h128c0 69.376 87.936 128 192 128s192-58.624 192-128-87.936-128-192-128H0v-64h299.52a385.984 385.984 0 0 1-6.944-5.024C228.64 459.04 192 390.88 192 320s36.672-139.04 100.576-186.976C351.936 88.512 429.856 64 512 64s160.064 24.512 219.424 69.024C795.328 180.96 832 249.12 832 320h-128c0-69.376-87.936-128-192-128s-192 58.624-192 128 87.936 128 192 128c78.976 0 154.048 22.688 212.48 64H1024z"></path></svg>',n.hotkey="mod+shift+x",n}return yo(t,e),t}(Av),Pdt=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.mark="underline",n.title=jt("textStyle.underline"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M704 64l128 0 0 416c0 159.072-143.264 288-320 288s-320-128.928-320-288l0-416 128 0 0 416c0 40.16 18.24 78.688 51.36 108.512 36.896 33.216 86.848 51.488 140.64 51.488s103.744-18.304 140.64-51.488c33.12-29.792 51.36-68.352 51.36-108.512l0-416zM192 832l640 0 0 128-640 0z"></path></svg>',n.hotkey="mod+u",n}return yo(t,e),t}(Av),Ldt=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.mark="sub",n.marksNeedToRemove=["sup"],n.title=jt("textStyle.sub"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M768 910.016v50.016h128v64h-192v-146.016l128-60V768h-128v-64h192v146.016zM676 256h-136L352 444 164 256H28l256 256-256 256h136L352 580 540 768h136l-256-256z"></path></svg>',n.hotkey="",n}return yo(t,e),t}(Av),jdt=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.mark="sup",n.marksNeedToRemove=["sub"],n.title=jt("textStyle.sup"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M768 206.016v50.016h128v64h-192V174.016l128-60V64h-128V0h192v146.016zM676 256h-136L352 444 164 256H28l256 256-256 256h136L352 580 540 768h136l-256-256z"></path></svg>',n.hotkey="",n}return yo(t,e),t}(Av),Vdt=function(){function e(){this.title=jt("textStyle.clear"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M969.382408 288.738615l-319.401123-270.852152a67.074236 67.074236 0 0 0-96.459139 5.74922l-505.931379 574.922021a68.35184 68.35184 0 0 0-17.886463 47.910169 74.101061 74.101061 0 0 0 24.274486 47.910168l156.50655 132.232065h373.060512L975.131628 383.281347a67.074236 67.074236 0 0 0-5.74922-96.459139z m-440.134747 433.746725H264.144729l-90.071117-78.572676c-5.74922-5.74922-12.137243-12.137243-12.137243-17.886463a36.411728 36.411728 0 0 1 5.749221-24.274485l210.804741-240.828447 265.102932 228.691204z m-439.495945 180.781036h843.218964a60.047411 60.047411 0 1 1 0 120.733624H89.751716a60.047411 60.047411 0 1 1 0-120.733624z m0 0"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){return D8e(t)},e.prototype.exec=function(t,n){var r,o,i=ue.nodes(t,{match:function(s){return Qt.isText(s)},universal:!0});try{for(var a=x8e(i),l=a.next();!l.done;l=a.next())Ndt(t,l.value[0])}catch(s){r={error:s}}finally{try{l&&!l.done&&(o=a.return)&&o.call(a)}finally{if(r)throw r.error}}},e}(),zdt={renderStyle:function(e,t){var n=e,r=n.bold,o=n.italic,i=n.underline,a=n.code,l=n.through,s=n.sub,u=n.sup,c=t;return r&&(c=Mn("strong",null,c)),a&&(c=Mn("code",null,c)),o&&(c=Mn("em",null,c)),i&&(c=Mn("u",null,c)),l&&(c=Mn("s",null,c)),s&&(c=Mn("sub",null,c)),u&&(c=Mn("sup",null,c)),c},menus:[{key:"bold",factory:function(){return new Fdt}},{key:"underline",factory:function(){return new Pdt}},{key:"italic",factory:function(){return new Idt}},{key:"through",factory:function(){return new Bdt}},{key:"code",factory:function(){return new Rdt}},{key:"sub",factory:function(){return new Ldt}},{key:"sup",factory:function(){return new jdt}},{key:"clearStyle",factory:function(){return new Vdt}}],styleToHtml:function(e,t){if(!Qt.isText(e))return t;if(M$(t))return F$(e,t);var n=Pe(t);if(dy(n)==="br")return F$(e,"<br>");var r=n.html();return r=F$(e,r),n.html(r),cy(n)},parseStyleHtml:function(e,t,n){var r=Pe(e);if(!Qt.isText(t))return t;var o=t;return bv(r,"b,strong")&&(o.bold=!0),bv(r,"i,em")&&(o.italic=!0),bv(r,"u")&&(o.underline=!0),bv(r,"s,strike")&&(o.through=!0),bv(r,"sub")&&(o.sub=!0),bv(r,"sup")&&(o.sup=!0),bv(r,"code")&&(o.code=!0),o}};function U8(e){return function(t,n,r){return Mn("h"+e,null,n)}}var Hdt={type:"header1",renderElem:U8(1)},$dt={type:"header2",renderElem:U8(2)},Udt={type:"header3",renderElem:U8(3)},Wdt={type:"header4",renderElem:U8(4)},Gdt={type:"header5",renderElem:U8(5)},qdt=tS.PROPER,P$=RegExp.prototype,M8e=P$.toString,Kdt=On(e8e),Ydt=Oo(function(){return M8e.call({source:"a",flags:"b"})!="/a/b"}),Xdt=qdt&&M8e.name!="toString";(Ydt||Xdt)&&R8(RegExp.prototype,"toString",function(){var e=Ms(this),t=To(e.source),n=e.flags;return"/"+t+"/"+To(n===void 0&&S6e(P$,e)&&!("flags"in P$)?Kdt(e):n)},{unsafe:!0});var L$,Qdt=Gn.TypeError,N8e=function(e){if(g8e(e))throw Qdt("The method doesn't accept regular expressions");return e},Jdt=Ts("match"),F8e=function(e){var t=/./;try{"/./"[e](t)}catch{try{return t[Jdt]=!1,"/./"[e](t)}catch{}}return!1},Zdt=e$.f,R8e=On("".startsWith),eft=On("".slice),tft=Math.min,I8e=F8e("startsWith");function B8e(e){var t=Or(ue.nodes(e,{match:function(o){return Re.getNodeType(o).startsWith("header")},universal:!0}),1),n=t[0];if(n==null)return"paragraph";var r=Or(n,1)[0];return Re.getNodeType(r)}function P8e(e){return e.selection==null||!Or(ue.nodes(e,{match:function(t){var n=Re.getNodeType(t);return n==="paragraph"||!!n.startsWith("header")},universal:!0,mode:"highest"}),1)[0]}function L8e(e,t){t&&et.setNodes(e,{type:t})}Bi({target:"String",proto:!0,forced:!(!I8e&&(L$=Zdt(String.prototype,"startsWith"),L$&&!L$.writable)||I8e)},{startsWith:function(e){var t=To(hu(this));N8e(e);var n=B8(tft(arguments.length>1?arguments[1]:void 0,t.length)),r=To(e);return R8e?R8e(t,r,n):eft(t,n,n+r.length)===r}});var nft=function(){function e(){this.title=jt("header.title"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M960 960c-51.2 0-102.4-3.2-153.6-3.2-51.2 0-99.2 3.2-150.4 3.2-19.2 0-28.8-22.4-28.8-38.4 0-51.2 57.6-28.8 86.4-48 19.2-12.8 19.2-60.8 19.2-80v-224-19.2c-9.6-3.2-19.2-3.2-28.8-3.2H320c-9.6 0-19.2 0-28.8 3.2V780.8c0 22.4 0 80 22.4 92.8 28.8 19.2 96-6.4 96 44.8 0 16-9.6 41.6-28.8 41.6-54.4 0-105.6-3.2-160-3.2-48 0-96 3.2-147.2 3.2-19.2 0-28.8-22.4-28.8-38.4 0-51.2 51.2-28.8 80-48 19.2-12.8 19.2-60.8 19.2-83.2V294.4c0-28.8 3.2-115.2-22.4-131.2-25.6-16-86.4 9.6-86.4-41.6 0-16 6.4-41.6 28.8-41.6 51.2 0 105.6 3.2 156.8 3.2 48 0 96-3.2 144-3.2 19.2 0 28.8 22.4 28.8 41.6 0 48-57.6 25.6-83.2 41.6-19.2 12.8-19.2 73.6-19.2 92.8v201.6c6.4 3.2 16 3.2 22.4 3.2h400c6.4 0 12.8 0 22.4-3.2V256c0-22.4 0-80-19.2-92.8-28.8-16-86.4 6.4-86.4-41.6 0-16 9.6-41.6 28.8-41.6 51.2 0 99.2 3.2 150.4 3.2 48 0 99.2-3.2 147.2-3.2 19.2 0 28.8 22.4 28.8 41.6 0 51.2-57.6 25.6-86.4 41.6-19.2 12.8-19.2 70.4-19.2 92.8v537.6c0 19.2 0 67.2 19.2 80 28.8 19.2 89.6-6.4 89.6 44.8 0 19.2-6.4 41.6-28.8 41.6z"></path></svg>',this.tag="select",this.width=60}return e.prototype.getOptions=function(t){var n=[{value:"header1",text:"H1",styleForRenderMenuList:{"font-size":"32px","font-weight":"bold"}},{value:"header2",text:"H2",styleForRenderMenuList:{"font-size":"24px","font-weight":"bold"}},{value:"header3",text:"H3",styleForRenderMenuList:{"font-size":"18px","font-weight":"bold"}},{value:"header4",text:"H4",styleForRenderMenuList:{"font-size":"16px","font-weight":"bold"}},{value:"header5",text:"H5",styleForRenderMenuList:{"font-size":"13px","font-weight":"bold"}},{value:"paragraph",text:jt("header.text")}],r=this.getValue(t).toString();return n.forEach(function(o){o.value===r?o.selected=!0:delete o.selected}),n},e.prototype.isActive=function(t){return!1},e.prototype.getValue=function(t){return B8e(t)},e.prototype.isDisabled=function(t){return P8e(t)},e.prototype.exec=function(t,n){L8e(t,n.toString())},e}(),W8=function(){function e(){this.tag="button"}return e.prototype.getValue=function(t){return B8e(t)},e.prototype.isActive=function(t){return this.getValue(t)===this.type},e.prototype.isDisabled=function(t){return P8e(t)},e.prototype.exec=function(t,n){var r=this.type;L8e(t,n===r?"paragraph":r)},e}(),rft=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title="H1",n.type="header1",n}return yo(t,e),t}(W8),oft=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title="H2",n.type="header2",n}return yo(t,e),t}(W8),ift=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title="H3",n.type="header3",n}return yo(t,e),t}(W8),aft=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title="H4",n.type="header4",n}return yo(t,e),t}(W8),lft=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title="H5",n.type="header5",n}return yo(t,e),t}(W8),sft={key:"headerSelect",factory:function(){return new nft}},uft={key:"header1",factory:function(){return new rft}},cft={key:"header2",factory:function(){return new oft}},dft={key:"header3",factory:function(){return new ift}},fft={key:"header4",factory:function(){return new aft}},pft={key:"header5",factory:function(){return new lft}};function G8(e){return function(t,n){return"<h"+e+">"+n+"</h"+e+">"}}function q8(e){return function(t,n,r){var o=Pe(t);return(n=n.filter(function(i){return!!Qt.isText(i)||!!r.isInline(i)})).length===0&&(n=[{text:o.text().replace(/\s+/gm," ")}]),{type:"header"+e,children:n}}}var hft={renderElems:[Hdt,$dt,Udt,Wdt,Gdt],elemsToHtml:[{type:"header1",elemToHtml:G8(1)},{type:"header2",elemToHtml:G8(2)},{type:"header3",elemToHtml:G8(3)},{type:"header4",elemToHtml:G8(4)},{type:"header5",elemToHtml:G8(5)}],parseElemsHtml:[{selector:"h1:not([data-w-e-type])",parseElemHtml:q8(1)},{selector:"h2:not([data-w-e-type])",parseElemHtml:q8(2)},{selector:"h3:not([data-w-e-type])",parseElemHtml:q8(3)},{selector:"h4:not([data-w-e-type])",parseElemHtml:q8(4)},{selector:"h5:not([data-w-e-type])",parseElemHtml:q8(5)}],menus:[sft,uft,cft,dft,fft,pft],editorPlugin:function(e){var t=e.insertBreak;e.insertNode;var n=e;return n.insertBreak=function(){var r=Or(ue.nodes(n,{match:function(o){return Re.getNodeType(o).startsWith("header")},universal:!0}),1)[0];r&&Re.isSelectionAtLineEnd(e,r[1])?et.insertNodes(n,{type:"paragraph",children:[{text:""}]},{mode:"highest"}):t()},n}},fy=Object.assign,j8e=Object.defineProperty,vft=On([].concat),V8e=!fy||Oo(function(){if(Ju&&fy({b:1},fy(j8e({},"a",{enumerable:!0,get:function(){j8e(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(o){t[o]=o}),fy({},e)[n]!=7||ly(fy({},t)).join("")!=r})?function(e,t){for(var n=M8(e),r=arguments.length,o=1,i=q6e.f,a=E6e.f;r>o;)for(var l,s=QC(arguments[o++]),u=i?vft(ly(s),i(s)):ly(s),c=u.length,d=0;c>d;)l=u[d++],Ju&&!oi(a,s,l)||(n[l]=s[l]);return n}:fy;function wv(e,t){e.data==null&&(e.data={});var n=e.data;n.style==null&&(n.style={}),Object.assign(n.style,t)}Bi({target:"Object",stat:!0,forced:Object.assign!==V8e},{assign:V8e});var mft={selector:"font",preParseHtml:function(e){var t=Pe(e);if(dy(t)!=="font")return e;var n=t.attr("color")||"";return n&&(t.removeAttr("color"),t.css("color",n)),t[0]}},z8e=function(){function e(){this.tag="button",this.showDropPanel=!0,this.$content=null}return e.prototype.exec=function(t,n){},e.prototype.getValue=function(t){var n=this.mark,r=ue.marks(t);return r&&r[n]?r[n]:""},e.prototype.isActive=function(t){return!!this.getValue(t)},e.prototype.isDisabled=function(t){return t.selection==null||!!Or(ue.nodes(t,{match:function(n){return Re.getNodeType(n)==="pre"||!!ue.isVoid(t,n)},universal:!0}),1)[0]},e.prototype.getPanelContentElem=function(t){var n=this.mark;if(this.$content==null){var r=Pe('<ul class="w-e-panel-content-color"></ul>');r.on("click","li",function(u){var c=u.target;if(c!=null&&(u.preventDefault(),t.selection!=null)){var d=Pe(c).attr("data-value");d==="0"?ue.removeMark(t,n):ue.addMark(t,n,d)}}),this.$content=r}var o=this.$content;if(o==null)return document.createElement("ul");o.empty();var i=this.getValue(t),a=t.getMenuConfig(n).colors;(a===void 0?[]:a).forEach(function(u){var c=Pe('<div class="color-block" data-value="'+u+'"></div>');c.css("background-color",u);var d=Pe('<li data-value="'+u+'"></li>');i===u&&d.addClass("active"),d.append(c),o.append(d)});var l="";n==="color"&&(l=jt("color.default")),n==="bgColor"&&(l=jt("color.clear"));var s=Pe(`
| <li data-value="0" class="clear">
| <svg viewBox="0 0 1024 1024"><path d="M236.8 128L896 787.2V128H236.8z m614.4 704L192 172.8V832h659.2zM192 64h704c38.4 0 64 25.6 64 64v704c0 38.4-25.6 64-64 64H192c-38.4 0-64-25.6-64-64V128c0-38.4 25.6-64 64-64z"></path></svg>
| `+l+`
| </li>
| `);return o.prepend(s),o[0]},e}(),gft=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title=jt("color.color"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M64 864h896v96H64zM360.58 576h302.85l81.53 224h102.16L579.24 64H444.77L176.89 800h102.16l81.53-224zM512 159.96L628.49 480H395.52L512 159.96z"></path></svg>',n.mark="color",n}return yo(t,e),t}(z8e),yft=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title=jt("color.bgColor"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M510.030769 315.076923l84.676923 196.923077h-177.230769l76.8-196.923077h15.753846zM945.230769 157.538462v708.923076c0 43.323077-35.446154 78.769231-78.769231 78.769231H157.538462c-43.323077 0-78.769231-35.446154-78.769231-78.769231V157.538462c0-43.323077 35.446154-78.769231 78.769231-78.769231h708.923076c43.323077 0 78.769231 35.446154 78.769231 78.769231z m-108.307692 643.938461L600.615385 216.615385c-5.907692-11.815385-15.753846-19.692308-29.538462-19.692308h-139.815385c-11.815385 0-23.630769 7.876923-27.56923 19.692308l-216.615385 584.861538c-3.938462 11.815385 3.938462 25.6 17.723077 25.6h80.738462c11.815385 0 23.630769-9.846154 27.56923-21.661538l63.015385-175.261539h263.876923l68.923077 175.261539c3.938462 11.815385 15.753846 21.661538 27.569231 21.661538h80.738461c13.784615 0 23.630769-13.784615 19.692308-25.6z"></path></svg>',n.mark="bgColor",n}return yo(t,e),t}(z8e),H8e=["rgb(0, 0, 0)","rgb(38, 38, 38)","rgb(89, 89, 89)","rgb(140, 140, 140)","rgb(191, 191, 191)","rgb(217, 217, 217)","rgb(233, 233, 233)","rgb(245, 245, 245)","rgb(250, 250, 250)","rgb(255, 255, 255)","rgb(225, 60, 57)","rgb(231, 95, 51)","rgb(235, 144, 58)","rgb(245, 219, 77)","rgb(114, 192, 64)","rgb(89, 191, 192)","rgb(66, 144, 247)","rgb(54, 88, 226)","rgb(106, 57, 201)","rgb(216, 68, 147)","rgb(251, 233, 230)","rgb(252, 237, 225)","rgb(252, 239, 212)","rgb(252, 251, 207)","rgb(231, 246, 213)","rgb(218, 244, 240)","rgb(217, 237, 250)","rgb(224, 232, 250)","rgb(237, 225, 248)","rgb(246, 226, 234)","rgb(255, 163, 158)","rgb(255, 187, 150)","rgb(255, 213, 145)","rgb(255, 251, 143)","rgb(183, 235, 143)","rgb(135, 232, 222)","rgb(145, 213, 255)","rgb(173, 198, 255)","rgb(211, 173, 247)","rgb(255, 173, 210)","rgb(255, 77, 79)","rgb(255, 122, 69)","rgb(255, 169, 64)","rgb(255, 236, 61)","rgb(115, 209, 61)","rgb(54, 207, 201)","rgb(64, 169, 255)","rgb(89, 126, 247)","rgb(146, 84, 222)","rgb(247, 89, 171)","rgb(207, 19, 34)","rgb(212, 56, 13)","rgb(212, 107, 8)","rgb(212, 177, 6)","rgb(56, 158, 13)","rgb(8, 151, 156)","rgb(9, 109, 217)","rgb(29, 57, 196)","rgb(83, 29, 171)","rgb(196, 29, 127)","rgb(130, 0, 20)","rgb(135, 20, 0)","rgb(135, 56, 0)","rgb(97, 71, 0)","rgb(19, 82, 0)","rgb(0, 71, 79)","rgb(0, 58, 140)","rgb(6, 17, 120)","rgb(34, 7, 94)","rgb(120, 6, 80)"],bft={renderStyle:function(e,t){var n=e,r=n.color,o=n.bgColor,i=t;return r&&wv(i,{color:r}),o&&wv(i,{backgroundColor:o}),i},styleToHtml:function(e,t){if(!Qt.isText(e))return t;var n,r=e,o=r.color,i=r.bgColor;return o||i?((M$(t)||dy(n=Pe(t))!=="span")&&(n=Pe("<span>"+t+"</span>")),o&&n.css("color",o),i&&n.css("background-color",i),cy(n)):t},preParseHtml:[mft],parseStyleHtml:function(e,t,n){var r=Pe(e);if(!Qt.isText(t))return t;var o=t,i=ec(r,"color");i&&(o.color=i);var a=ec(r,"background-color");return a||(a=ec(r,"background")),a&&(o.bgColor=a),o},menus:[{key:"color",factory:function(){return new gft},config:{colors:H8e}},{key:"bgColor",factory:function(){return new yft},config:{colors:H8e}}]},Aft=/^(?:\w+:)?\/\/(\S+)$/,wft=/^localhost[\:?\d]*(?:[^\:?\d]\S*)?$/,xft=/^[^\s\.]+\.\S{2,}$/,_ft=U6e.includes;function cS(e){return e===void 0&&(e="r"),e+"-"+q2e()}function j$(e){return e.replace(/</g,"<").replace(/>/g,">")}function $8e(e,t,n,r){return ch(this,0,void 0,function(){var o,i;return dh(this,function(a){switch(a.label){case 0:return(o=t.getMenuConfig(e).checkLink)?[4,o(n,r)]:[3,2];case 1:if(typeof(i=a.sent())=="string")return t.alert(i,"error"),[2,!1];if(i==null)return[2,!1];a.label=2;case 2:return[2,!0]}})})}function U8e(e,t,n){return ch(this,0,void 0,function(){var r;return dh(this,function(o){switch(o.label){case 0:return(r=t.getMenuConfig(e).parseLinkUrl)?[4,r(n)]:[3,2];case 1:return[2,o.sent()];case 2:return[2,n]}})})}function V$(e){return e.selection==null||!!Re.getSelectedElems(e).some(function(t){var n=t.type;return!!e.isVoid(t)||!!["pre","code","link"].includes(n)||void 0})}function z$(e,t){return{type:"link",url:j$(e),children:t?[{text:t}]:[]}}function W8e(e,t,n){return ch(this,0,void 0,function(){var r,o,i;return dh(this,function(a){switch(a.label){case 0:return n?(t||(t=n),e.restoreSelection(),V$(e)?[2]:[4,$8e("insertLink",e,t,n)]):[2];case 1:return a.sent()?[4,U8e("insertLink",e,n)]:[2];case 2:return r=a.sent(),(o=e.selection)==null||(ct.isCollapsed(o)?(e.insertText(" "),i=z$(r,t),et.insertNodes(e,i),e.insertFragment([{text:" "}])):ue.string(e,o)!==t?(e.deleteFragment(),i=z$(r,t),et.insertNodes(e,i)):(i=z$(r),et.wrapNodes(e,i,{split:!0}),et.collapse(e,{edge:"end"}))),[2]}})})}Bi({target:"Array",proto:!0},{includes:function(e){return _ft(this,e,arguments.length>1?arguments[1]:void 0)}}),v8e("includes");var Eft={type:"link",renderElem:function(e,t,n){var r=e,o=r.url,i=r.target;return Mn("a",{href:o,target:i===void 0?"_blank":i},t)}},Cft={selector:"a:not([data-w-e-type])",parseElemHtml:function(e,t,n){var r=Pe(e);return(t=t.filter(function(o){return!!Qt.isText(o)||!!n.isInline(o)})).length===0&&(t=[{text:r.text().replace(/\s+/gm," ")}]),{type:"link",url:r.attr("href")||"",target:r.attr("target")||"",children:t}}};function H$(){return cS("w-e-insert-link")}var Sft=function(){function e(){this.title=jt("link.insert"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M440.224 635.776a51.84 51.84 0 0 1-36.768-15.232c-95.136-95.136-95.136-249.92 0-345.056l192-192C641.536 37.408 702.816 12.032 768 12.032s126.432 25.376 172.544 71.456c95.136 95.136 95.136 249.92 0 345.056l-87.776 87.776a51.968 51.968 0 1 1-73.536-73.536l87.776-87.776a140.16 140.16 0 0 0 0-197.984c-26.432-26.432-61.6-40.992-99.008-40.992s-72.544 14.56-99.008 40.992l-192 192a140.16 140.16 0 0 0 0 197.984 51.968 51.968 0 0 1-36.768 88.768z"></path><path d="M256 1012a242.4 242.4 0 0 1-172.544-71.456c-95.136-95.136-95.136-249.92 0-345.056l87.776-87.776a51.968 51.968 0 1 1 73.536 73.536l-87.776 87.776a140.16 140.16 0 0 0 0 197.984c26.432 26.432 61.6 40.992 99.008 40.992s72.544-14.56 99.008-40.992l192-192a140.16 140.16 0 0 0 0-197.984 51.968 51.968 0 1 1 73.536-73.536c95.136 95.136 95.136 249.92 0 345.056l-192 192A242.4 242.4 0 0 1 256 1012z"></path></svg>',this.tag="button",this.showModal=!0,this.modalWidth=300,this.$content=null,this.textInputId=H$(),this.urlInputId=H$(),this.buttonId=H$()}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.exec=function(t,n){},e.prototype.isDisabled=function(t){return V$(t)},e.prototype.getModalPositionNode=function(t){return null},e.prototype.getModalContentElem=function(t){var n=t.selection,r=this,o=r.textInputId,i=r.urlInputId,a=r.buttonId,l=Or(Ds(jt("link.text"),o),2),s=l[0],u=Pe(l[1]),c=Or(Ds(jt("link.url"),i),2),d=c[0],f=Pe(c[1]),p=Or(Z2(a,jt("common.ok")),1)[0];if(this.$content==null){var m=Pe("<div></div>");m.on("click","#"+a,function(b){b.preventDefault();var y=m.find("#"+o).val(),w=m.find("#"+i).val();W8e(t,y,w),t.hidePanelOrModal()}),this.$content=m}var v=this.$content;if(v.empty(),v.append(s),v.append(d),v.append(p),n==null||ct.isCollapsed(n))u.val("");else{var g=ue.string(t,n);u.val(g)}return f.val(""),setTimeout(function(){u.focus()}),v[0]},e}();function G8e(){return cS("w-e-update-link")}var kft=function(){function e(){this.title=jt("link.edit"),this.iconSvg=O8e,this.tag="button",this.showModal=!0,this.modalWidth=300,this.$content=null,this.urlInputId=G8e(),this.buttonId=G8e()}return e.prototype.getSelectedLinkElem=function(t){var n=Re.getSelectedNodeByType(t,"link");return n??null},e.prototype.getValue=function(t){var n=this.getSelectedLinkElem(t);return n&&n.url||""},e.prototype.isActive=function(t){return!1},e.prototype.exec=function(t,n){},e.prototype.isDisabled=function(t){return t.selection==null||this.getSelectedLinkElem(t)==null},e.prototype.getModalPositionNode=function(t){return Re.getSelectedNodeByType(t,"link")},e.prototype.getModalContentElem=function(t){var n=this.urlInputId,r=this.buttonId,o=Or(Ds(jt("link.url"),n),2),i=o[0],a=Pe(o[1]),l=Or(Z2(r,jt("common.ok")),1)[0];if(this.$content==null){var s=Pe("<div></div>");s.on("click","button",function(d){d.preventDefault(),t.restoreSelection();var f=Re.getSelectedNodeByType(t,"link"),p=f?Lt.string(f):"",m=s.find("#"+n).val();(function(v,g,b){ch(this,0,void 0,function(){var y,w;return dh(this,function(x){switch(x.label){case 0:return b?[4,$8e("editLink",v,g,b)]:[2];case 1:return x.sent()?[4,U8e("editLink",v,b)]:[2];case 2:return y=x.sent(),w={url:j$(y)},et.setNodes(v,w,{match:function(_){return Re.checkNodeType(_,"link")}}),[2]}})})})(t,p,m),t.hidePanelOrModal()}),this.$content=s}var u=this.$content;u.empty(),u.append(i),u.append(l);var c=this.getValue(t);return a.val(c),setTimeout(function(){a.focus()}),u[0]},e}(),Dft=function(){function e(){this.title=jt("link.unLink"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M608.16328 811.815036c9.371954 9.371954 9.371954 24.56788 0 33.941834l-89.347563 89.347564c-118.525421 118.523421-311.38448 118.531421-429.919901 0-118.527421-118.529421-118.527421-311.39048 0-429.917901l89.349564-89.349563c9.371954-9.371954 24.56788-9.371954 33.941834 0l79.195613 79.195613c9.371954 9.371954 9.371954 24.56788 0 33.941834l-89.349563 89.347564c-56.143726 56.145726-56.143726 147.49928 0 203.645005 56.143726 56.143726 147.49928 56.145726 203.647005 0l89.347564-89.347563c9.371954-9.371954 24.56788-9.371954 33.941834 0l79.193613 79.195613z m-113.135447-520.429459c9.371954 9.371954 24.56788 9.371954 33.941834 0l89.347564-89.347564c56.143726-56.149726 147.49928-56.145726 203.647006 0 56.143726 56.145726 56.143726 147.49928 0 203.645006l-89.349564 89.347564c-9.371954 9.371954-9.371954 24.56788 0 33.941834l79.195613 79.195613c9.371954 9.371954 24.56788 9.371954 33.941834 0l89.349564-89.349563c118.529421-118.529421 118.529421-311.38848 0-429.917901-118.531421-118.527421-311.38848-118.527421-429.919901 0l-89.347563 89.347564c-9.371954 9.371954-9.371954 24.56788 0 33.941834l79.193613 79.195613z m469.653707 718.556492l45.253779-45.253779c18.745908-18.745908 18.745908-49.13776 0-67.881669L127.195629 14.062931c-18.745908-18.745908-49.13776-18.745908-67.881669 0L14.058181 59.31871c-18.745908 18.745908-18.745908 49.13776 0 67.881669l882.74169 882.74169c18.745908 18.743908 49.13776 18.743908 67.881669 0z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){return t.selection==null||Re.getSelectedNodeByType(t,"link")==null},e.prototype.exec=function(t,n){this.isDisabled(t)||et.unwrapNodes(t,{match:function(r){return Re.checkNodeType(r,"link")}})},e}(),Oft=function(){function e(){this.title=jt("link.view"),this.iconSvg=T8e,this.tag="button"}return e.prototype.getSelectedLinkElem=function(t){var n=Re.getSelectedNodeByType(t,"link");return n??null},e.prototype.getValue=function(t){var n=this.getSelectedLinkElem(t);return n&&n.url||""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){return t.selection==null||this.getSelectedLinkElem(t)==null},e.prototype.exec=function(t,n){if(!this.isDisabled(t)){if(!n||typeof n!="string")throw new Error("View link failed, link url is '"+n+"'");window.open(n,"_blank")}},e}(),q8e={checkLink:function(e,t){return!0},parseLinkUrl:function(e){return e}},Tft={renderElems:[Eft],elemsToHtml:[{type:"link",elemToHtml:function(e,t){var n=e,r=n.url,o=n.target;return'<a href="'+r+'" target="'+(o===void 0?"_blank":o)+'">'+t+"</a>"}}],parseElemsHtml:[Cft],menus:[{key:"insertLink",factory:function(){return new Sft},config:q8e},{key:"editLink",factory:function(){return new kft},config:q8e},{key:"unLink",factory:function(){return new Dft}},{key:"viewLink",factory:function(){return new Oft}}],editorPlugin:function(e){var t=e.isInline,n=e.insertData,r=e.normalizeNode;e.insertNode,e.insertText;var o=e;return o.isInline=function(i){return i.type==="link"||t(i)},o.insertData=function(i){var a=i.getData("text/plain");if(function(u){if(typeof u!="string")return!1;var c=u.match(Aft);if(!c)return!1;var d=c[1];return!(!d||!wft.test(d)&&!xft.test(d))}(a)){if(!V$(o)){var l=o.selection;if(l!=null){var s=ue.string(o,l);W8e(o,s,a)}}}else n(i)},o.normalizeNode=function(i){var a=Or(i,2),l=a[0],s=a[1];return Re.getNodeType(l)!=="link"?r([l,s]):Lt.string(l)===""?et.removeNodes(o,{at:s}):r([l,s])},o}},Mft=On(1 .valueOf),Nft=Gn.RangeError,Fft=Gn.RangeError,K8e=Gn.String,Y8e=Math.floor,$$=On(function(e){var t=To(hu(this)),n="",r=ay(e);if(r<0||r==1/0)throw Nft("Wrong number of repetitions");for(;r>0;(r>>>=1)&&(t+=t))1&r&&(n+=t);return n}),X8e=On("".slice),K8=On(1 .toFixed),py=function(e,t,n){return t===0?n:t%2==1?py(e,t-1,n*e):py(e*e,t/2,n)},hy=function(e,t,n){for(var r=-1,o=n;++r<6;)o+=t*e[r],e[r]=o%1e7,o=Y8e(o/1e7)},U$=function(e,t){for(var n=6,r=0;--n>=0;)r+=e[n],e[n]=Y8e(r/t),r=r%t*1e7},Q8e=function(e){for(var t=6,n="";--t>=0;)if(n!==""||t===0||e[t]!==0){var r=K8e(e[t]);n=n===""?r:n+$$("0",7-r.length)+r}return n};function J8e(e,t){return"w-e-image-container-"+Re.findKey(e,t).id}Bi({target:"Number",proto:!0,forced:Oo(function(){return K8(8e-5,3)!=="0.000"||K8(.9,0)!=="1"||K8(1.255,2)!=="1.25"||K8(0xde0b6b3a7640080,0)!=="1000000000000000128"})||!Oo(function(){K8({})})},{toFixed:function(e){var t,n,r,o,i=Mft(this),a=ay(e),l=[0,0,0,0,0,0],s="",u="0";if(a<0||a>20)throw Fft("Incorrect fraction digits");if(i!=i)return"NaN";if(i<=-1e21||i>=1e21)return K8e(i);if(i<0&&(s="-",i=-i),i>1e-21)if(n=(t=function(c){for(var d=0,f=c;f>=4096;)d+=12,f/=4096;for(;f>=2;)d+=1,f/=2;return d}(i*py(2,69,1))-69)<0?i*py(2,-t,1):i/py(2,t,1),n*=4503599627370496,(t=52-t)>0){for(hy(l,0,n),r=a;r>=7;)hy(l,1e7,0),r-=7;for(hy(l,py(10,r,1),0),r=t-1;r>=23;)U$(l,8388608),r-=23;U$(l,1<<r),hy(l,1,1),U$(l,2),u=Q8e(l)}else hy(l,0,n),hy(l,1<<-t,0),u=Q8e(l)+$$("0",a);return a>0?s+((o=u.length)<=a?"0."+$$("0",a-o)+u:X8e(u,0,o-a)+"."+X8e(u,o-a)):s+u}});var Rft={type:"image",renderElem:function(e,t,n){var r=e,o=r.src,i=r.alt,a=i===void 0?"":i,l=r.href,s=l===void 0?"":l,u=r.style,c=u===void 0?{}:u,d=c.width,f=d===void 0?"":d,p=c.height,m=p===void 0?"":p,v=Re.isNodeSelected(n,e),g={};f&&(g.width="100%"),m&&(g.height="100%");var b=Mn("img",{style:g,src:o,alt:a,"data-href":s}),y=n.isDisabled();return v&&!y?function(w,x,_,E){var C=Pe("body"),T=J8e(w,x),k=E.width,I=E.height,O=0,F=0,N=0,B=!1,P=null;function V(G){P=function(){var W=Pe("#"+T);if(W.length===0)throw new Error("Cannot find image container elem");return W}(),O=G;var z=P.find("img");if(z.length===0)throw new Error("Cannot find image elem");F=z.width(),N=z.height(),C.on("mousemove",L),C.on("mouseup",H);var $=Re.getHoverbar(w);$&&$.hideAndClean()}var L=Y1(function(G){G.preventDefault();var z=G.clientX,$=F+(B?O-z:z-O),W=N*($/F);P!=null&&($<=15||W<=15||(P.css("width",$+"px"),P.css("height",W+"px")))},100);function H(G){if(C.off("mousemove",L),P!=null){var z=P.width().toFixed(2),$=P.height().toFixed(2),W={style:uh(uh({},x.style),{width:z+"px",height:$+"px"})};et.setNodes(w,W,{at:Re.findPath(w,x)}),C.off("mouseup",H)}}var U={};return k&&(U.width=k),I&&(U.height=I),Mn("div",{id:T,style:U,className:"w-e-image-container w-e-selected-image-container",on:{mousedown:function(G){var z=Pe(G.target);z.hasClass("w-e-image-dragger")&&(G.preventDefault(),(z.hasClass("left-top")||z.hasClass("left-bottom"))&&(B=!0),V(G.clientX))}}},_,Mn("div",{className:"w-e-image-dragger left-top"}),Mn("div",{className:"w-e-image-dragger right-top"}),Mn("div",{className:"w-e-image-dragger left-bottom"}),Mn("div",{className:"w-e-image-dragger right-bottom"}))}(n,e,b,{width:f,height:m}):function(w,x,_,E){var C=E.width,T=E.height,k={};return C&&(k.width=C),T&&(k.height=T),Mn("div",{id:J8e(w,x),style:k,className:"w-e-image-container"},_)}(n,e,b,{width:f,height:m})}},Ift={selector:"img:not([data-w-e-type])",parseElemHtml:function(e,t,n){var r=Pe(e),o=r.attr("data-href")||"";return o=decodeURIComponent(o),{type:"image",src:r.attr("src")||"",alt:r.attr("alt")||"",href:o,style:{width:ec(r,"width"),height:ec(r,"height")},children:[{text:""}]}}};function Z8e(e,t,n,r,o){return r===void 0&&(r=""),o===void 0&&(o=""),ch(this,0,void 0,function(){var i,a;return dh(this,function(l){switch(l.label){case 0:return(i=t.getMenuConfig(e).checkImage)?[4,i(n,r,o)]:[3,2];case 1:if(typeof(a=l.sent())=="string")return t.alert(a,"error"),[2,!1];if(a==null)return[2,!1];l.label=2;case 2:return[2,!0]}})})}function e5e(e,t,n){return ch(this,0,void 0,function(){var r;return dh(this,function(o){switch(o.label){case 0:return(r=t.getMenuConfig(e).parseImageSrc)?[4,r(n)]:[3,2];case 1:return[2,o.sent()];case 2:return[2,n]}})})}function xv(e,t,n,r){return n===void 0&&(n=""),r===void 0&&(r=""),ch(this,0,void 0,function(){var o,i,a;return dh(this,function(l){switch(l.label){case 0:return[4,Z8e("insertImage",e,t,n,r)];case 1:return l.sent()?[4,e5e("insertImage",e,t)]:[2];case 2:return o=l.sent(),i={type:"image",src:j$(o),href:r,alt:n,style:{},children:[{text:""}]},e.selection===null&&e.restoreSelection(),Re.getSelectedNodeByType(e,"image")&&e.move(1),dS(e)||(et.insertNodes(e,i),(a=e.getMenuConfig("insertImage").onInsertedImage)&&a(i)),[2]}})})}function dS(e){var t=e.selection;return t==null||!ct.isCollapsed(t)||!!Or(ue.nodes(e,{match:function(n){var r=Re.getNodeType(n);return r==="code"||r==="pre"||r==="link"||r==="list-item"||!!r.startsWith("header")||r==="blockquote"||!!ue.isVoid(e,n)},universal:!0}),1)[0]}function fS(){return cS("w-e-insert-image")}var Bft=function(){function e(){this.title=jt("image.netImage"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M959.877 128l0.123 0.123v767.775l-0.123 0.122H64.102l-0.122-0.122V128.123l0.122-0.123h895.775zM960 64H64C28.795 64 0 92.795 0 128v768c0 35.205 28.795 64 64 64h896c35.205 0 64-28.795 64-64V128c0-35.205-28.795-64-64-64zM832 288.01c0 53.023-42.988 96.01-96.01 96.01s-96.01-42.987-96.01-96.01S682.967 192 735.99 192 832 234.988 832 288.01zM896 832H128V704l224.01-384 256 320h64l224.01-192z"></path></svg>',this.tag="button",this.showModal=!0,this.modalWidth=300,this.$content=null,this.srcInputId=fS(),this.altInputId=fS(),this.hrefInputId=fS(),this.buttonId=fS()}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.exec=function(t,n){},e.prototype.isDisabled=function(t){return dS(t)},e.prototype.getModalPositionNode=function(t){return null},e.prototype.getModalContentElem=function(t){var n=this,r=this,o=r.srcInputId,i=r.altInputId,a=r.hrefInputId,l=r.buttonId,s=Or(Ds(jt("image.src"),o),2),u=s[0],c=Pe(s[1]),d=Or(Ds(jt("image.desc"),i),2),f=d[0],p=Pe(d[1]),m=Or(Ds(jt("image.link"),a),2),v=m[0],g=Pe(m[1]),b=Or(Z2(l,jt("common.ok")),1)[0];if(this.$content==null){var y=Pe("<div></div>");y.on("click","#"+l,function(x){x.preventDefault();var _=y.find("#"+o).val().trim(),E=y.find("#"+i).val().trim(),C=y.find("#"+a).val().trim();n.insertImage(t,_,E,C),t.hidePanelOrModal()}),this.$content=y}var w=this.$content;return w.empty(),w.append(u),w.append(f),w.append(v),w.append(b),c.val(""),p.val(""),g.val(""),setTimeout(function(){c.focus()}),w[0]},e.prototype.insertImage=function(t,n,r,o){r===void 0&&(r=""),o===void 0&&(o=""),n&&(t.restoreSelection(),this.isDisabled(t)||xv(t,n,r,o))},e}(),Pft=function(){function e(){this.title=jt("image.delete"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M826.8032 356.5312c-19.328 0-36.3776 15.6928-36.3776 35.0464v524.2624c0 19.328-16 34.56-35.328 34.56H264.9344c-19.328 0-35.5072-15.3088-35.5072-34.56V390.0416c0-19.328-14.1568-35.0464-33.5104-35.0464s-33.5104 15.6928-33.5104 35.0464V915.712c0 57.9328 44.6208 108.288 102.528 108.288H755.2c57.9328 0 108.0832-50.4576 108.0832-108.288V391.4752c-0.1024-19.2512-17.1264-34.944-36.48-34.944z" p-id="9577"></path><path d="M437.1712 775.7568V390.6048c0-19.328-14.1568-35.0464-33.5104-35.0464s-33.5104 15.616-33.5104 35.0464v385.152c0 19.328 14.1568 35.0464 33.5104 35.0464s33.5104-15.7184 33.5104-35.0464zM649.7024 775.7568V390.6048c0-19.328-17.0496-35.0464-36.3776-35.0464s-36.3776 15.616-36.3776 35.0464v385.152c0 19.328 17.0496 35.0464 36.3776 35.0464s36.3776-15.7184 36.3776-35.0464zM965.0432 217.0368h-174.6176V145.5104c0-57.9328-47.2064-101.76-104.6528-101.76h-350.976c-57.8304 0-105.3952 43.8528-105.3952 101.76v71.5264H54.784c-19.4304 0-35.0464 14.1568-35.0464 33.5104 0 19.328 15.616 33.5104 35.0464 33.5104h910.3616c19.328 0 35.0464-14.1568 35.0464-33.5104 0-19.3536-15.6928-33.5104-35.1488-33.5104z m-247.3728 0H297.3952V145.5104c0-19.328 18.2016-34.7648 37.4272-34.7648h350.976c19.1488 0 31.872 15.1296 31.872 34.7648v71.5264z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){return t.selection==null||Re.getSelectedNodeByType(t,"image")==null},e.prototype.exec=function(t,n){this.isDisabled(t)||et.removeNodes(t,{match:function(r){return Re.checkNodeType(r,"image")}})},e}();function pS(){return cS("w-e-edit-image")}var Lft=function(){function e(){this.title=jt("image.edit"),this.iconSvg=O8e,this.tag="button",this.showModal=!0,this.modalWidth=300,this.$content=null,this.srcInputId=pS(),this.altInputId=pS(),this.hrefInputId=pS(),this.buttonId=pS()}return e.prototype.getValue=function(t){return""},e.prototype.getImageNode=function(t){return Re.getSelectedNodeByType(t,"image")},e.prototype.isActive=function(t){return!1},e.prototype.exec=function(t,n){},e.prototype.isDisabled=function(t){var n=t.selection;return n==null||!ct.isCollapsed(n)||Re.getSelectedNodeByType(t,"image")==null},e.prototype.getModalPositionNode=function(t){return this.getImageNode(t)},e.prototype.getModalContentElem=function(t){var n=this,r=this,o=r.srcInputId,i=r.altInputId,a=r.hrefInputId,l=r.buttonId,s=this.getImageNode(t);if(s==null)throw new Error("Not found selected image node");var u=Or(Ds(jt("image.src"),o),2),c=u[0],d=Pe(u[1]),f=Or(Ds(jt("image.desc"),i),2),p=f[0],m=Pe(f[1]),v=Or(Ds(jt("image.link"),a),2),g=v[0],b=Pe(v[1]),y=Or(Z2(l,jt("common.ok")),1)[0];if(this.$content==null){var w=Pe("<div></div>");w.on("click","#"+l,function(O){O.preventDefault();var F=w.find("#"+o).val(),N=w.find("#"+i).val(),B=w.find("#"+a).val();n.updateImage(t,F,N,B),t.hidePanelOrModal()}),this.$content=w}var x=this.$content;x.empty(),x.append(c),x.append(p),x.append(g),x.append(y);var _=s,E=_.src,C=_.alt,T=C===void 0?"":C,k=_.href,I=k===void 0?"":k;return d.val(E),m.val(T),b.val(I),setTimeout(function(){d.focus()}),x[0]},e.prototype.updateImage=function(t,n,r,o,i){r===void 0&&(r=""),o===void 0&&(o=""),i===void 0&&(i={}),n&&(t.restoreSelection(),this.isDisabled(t)||function(a,l,s,u,c){s===void 0&&(s=""),u===void 0&&(u=""),c===void 0&&(c={}),ch(this,0,void 0,function(){var d,f,p,m,v,g;return dh(this,function(b){switch(b.label){case 0:return[4,Z8e("editImage",a,l,s,u)];case 1:return b.sent()?[4,e5e("editImage",a,l)]:[2];case 2:return d=b.sent(),(f=Re.getSelectedNodeByType(a,"image"))==null||(p=f.style,m={src:d,alt:s,href:u,style:uh(uh({},p===void 0?{}:p),c)},et.setNodes(a,m,{match:function(y){return Re.checkNodeType(y,"image")}}),v=Re.getSelectedNodeByType(a,"image"),(g=a.getMenuConfig("editImage").onUpdatedImage)&&g(v)),[2]}})})}(t,n,r,o,i))},e}(),jft=function(){function e(){this.title=jt("image.viewLink"),this.iconSvg=T8e,this.tag="button"}return e.prototype.getValue=function(t){var n=Re.getSelectedNodeByType(t,"image");return n&&n.href||""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){return t.selection==null||!this.getValue(t)},e.prototype.exec=function(t,n){if(!this.isDisabled(t)){if(!n||typeof n!="string")throw new Error("View image link failed, image.href is '"+n+"'");window.open(n,"_blank")}},e}(),W$=function(){function e(){this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.getSelectedNode=function(t){return Re.getSelectedNodeByType(t,"image")},e.prototype.isDisabled=function(t){return t.selection==null||this.getSelectedNode(t)==null},e.prototype.exec=function(t,n){if(!this.isDisabled(t)){var r=this.getSelectedNode(t);if(r!=null){var o=Re.getHoverbar(t);o&&o.hideAndClean();var i=r.style,a={style:uh(uh({},i===void 0?{}:i),{width:this.value,height:""})};et.setNodes(t,a,{match:function(l){return Re.checkNodeType(l,"image")}})}}},e}(),Vft=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title="30%",n.value="30%",n}return yo(t,e),t}(W$),zft=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title="50%",n.value="50%",n}return yo(t,e),t}(W$),Hft=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title="100%",n.value="100%",n}return yo(t,e),t}(W$),t5e={onInsertedImage:function(e){},onUpdatedImage:function(e){},checkImage:function(e,t,n){return!0},parseImageSrc:function(e){return e}},$ft={renderElems:[Rft],elemsToHtml:[{type:"image",elemToHtml:function(e,t){var n=e,r=n.src,o=n.alt,i=o===void 0?"":o,a=n.href,l=a===void 0?"":a,s=n.style,u=s===void 0?{}:s,c=u.width,d=c===void 0?"":c,f=u.height,p=f===void 0?"":f,m="";return d&&(m+="width: "+d+";"),p&&(m+="height: "+p+";"),'<img src="'+r+'" alt="'+i+'" data-href="'+l+'" style="'+m+'"/>'}}],parseElemsHtml:[Ift],menus:[{key:"insertImage",factory:function(){return new Bft},config:t5e},{key:"deleteImage",factory:function(){return new Pft}},{key:"editImage",factory:function(){return new Lft},config:t5e},{key:"viewImageLink",factory:function(){return new jft}},{key:"imageWidth30",factory:function(){return new Vft}},{key:"imageWidth50",factory:function(){return new zft}},{key:"imageWidth100",factory:function(){return new Hft}}],editorPlugin:function(e){var t=e.isInline,n=e.isVoid;e.insertNode;var r=e;return r.isInline=function(o){return o.type==="image"||t(o)},r.isVoid=function(o){return o.type==="image"||n(o)},r}},Uft={type:"todo",renderElem:function(e,t,n){var r=!1;n.isDisabled()&&(r=!0);var o=Mn("div",{style:{margin:"5px 0"}},Mn("span",{contentEditable:!1,style:{marginRight:"0.5em"}},Mn("input",{type:"checkbox",checked:e.checked,disabled:r,on:{change:function(i){var a=Re.findPath(n,e),l={checked:i.target.checked};et.setNodes(n,l,{at:a})}}})),Mn("span",null,t));return o}},Wft=function(){function e(){this.title=jt("todo.todo"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M278.755556 403.911111l-79.644445 79.644445L455.111111 739.555556l568.888889-568.888889-79.644444-79.644445L455.111111 580.266667l-176.355555-176.355556zM910.222222 910.222222H113.777778V113.777778h568.888889V0H113.777778C51.2 0 0 51.2 0 113.777778v796.444444c0 62.577778 51.2 113.777778 113.777778 113.777778h796.444444c62.577778 0 113.777778-51.2 113.777778-113.777778V455.111111h-113.777778v455.111111z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!!Re.getSelectedNodeByType(t,"todo")},e.prototype.isDisabled=function(t){return t.selection==null||!!Re.getSelectedElems(t).some(function(n){if(ue.isVoid(t,n)&&ue.isBlock(t,n))return!0;var r=n.type;return!!["pre","table","list-item"].includes(r)||void 0})},e.prototype.exec=function(t,n){var r=this.isActive(t);et.setNodes(t,{type:r?"paragraph":"todo"})},e}(),Gft={selector:'div[data-w-e-type="todo"]',parseElemHtml:function(e,t,n){var r=Pe(e);(t=t.filter(function(i){return!!Qt.isText(i)||!!n.isInline(i)})).length===0&&(t=[{text:r.text().replace(/\s+/gm," ")}]);var o=!1;return r.find('input[type="checkbox"]').attr("checked")!=null&&(o=!0),{type:"todo",checked:o,children:t}}},qft={renderElems:[Uft],elemsToHtml:[{type:"todo",elemToHtml:function(e,t){return'<div data-w-e-type="todo"><input type="checkbox" disabled '+(e.checked?"checked":"")+">"+t+"</div>"}}],preParseHtml:[{selector:"ul.w-e-todo",preParseHtml:function(e){var t=Pe(e).find("li"),n=Pe('<div data-w-e-type="todo"></div>'),r=t.find("input[type]");return n.append(r),t.children()[0].remove(),n[0].innerHTML=n[0].innerHTML+t[0].innerHTML,n[0]}}],parseElemsHtml:[Gft],menus:[{key:"todo",factory:function(){return new Wft}}],editorPlugin:function(e){var t=e.deleteBackward,n=e;return n.deleteBackward=function(r){var o=e.selection;if(o&&ct.isCollapsed(o)){var i=Re.getSelectedNodeByType(e,"todo");if(i&&Lt.string(i).length===0)return void et.setNodes(e,{type:"paragraph"},{mode:"highest"})}t(r)},n}},Kft={type:"blockquote",renderElem:function(e,t,n){return Mn("blockquote",null,t)}},Yft={selector:"blockquote:not([data-w-e-type])",parseElemHtml:function(e,t,n){var r=Pe(e);return(t=t.filter(function(o){return!!Qt.isText(o)||!!n.isInline(o)})).length===0&&(t=[{text:r.text().replace(/\s+/gm," ")}]),{type:"blockquote",children:t}}},Xft=function(){function e(){this.title=jt("blockQuote.title"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M894.6 907.1H605.4c-32.6 0-59-26.4-59-59V608.2l-4-14.9c0-315.9 125.5-485.1 376.5-507.5v59.8C752.7 180.4 711.3 315.8 711.3 442.4v41.2l31.5 12.3h151.8c32.6 0 59 26.4 59 59v293.2c0 32.5-26.4 59-59 59z m-472 0H133.4c-32.6 0-59-26.4-59-59V608.2l-4-14.9c0-315.9 125.5-485.1 376.5-507.5v59.8C280.7 180.4 239.3 315.8 239.3 442.4v41.2l31.5 12.3h151.8c32.6 0 59 26.4 59 59v293.2c0 32.5-26.4 59-59 59z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!!Re.getSelectedNodeByType(t,"blockquote")},e.prototype.isDisabled=function(t){return t.selection==null||!Or(ue.nodes(t,{match:function(n){var r=Re.getNodeType(n);return r==="paragraph"||r==="blockquote"},universal:!0,mode:"highest"}),1)[0]},e.prototype.exec=function(t,n){if(!this.isDisabled(t)){var r=this.isActive(t)?"paragraph":"blockquote";et.setNodes(t,{type:r},{mode:"highest"})}},e}(),Qft={key:"blockquote",factory:function(){return new Xft}},Jft=On([].slice),Zft=c$("slice"),ept=Ts("species"),G$=Gn.Array,tpt=Math.max;Bi({target:"Array",proto:!0,forced:!Zft},{slice:function(e,t){var n,r,o,i=ny(this),a=nS(i),l=I8(e,a),s=I8(t===void 0?a:t,a);if(oS(i)&&(n=i.constructor,(u$(n)&&(n===G$||oS(n.prototype))||Zu(n)&&(n=n[ept])===null)&&(n=void 0),n===G$||n===void 0))return Jft(i,l,s);for(r=new(n===void 0?G$:n)(tpt(s-l,0)),o=0;l<s;l++,o++)l in i&&y8e(r,o,i[l]);return r.length=o,r}});var npt={renderElems:[Kft],elemsToHtml:[{type:"blockquote",elemToHtml:function(e,t){return"<blockquote>"+t+"</blockquote>"}}],parseElemsHtml:[Yft],menus:[Qft],editorPlugin:function(e){var t=e.insertBreak,n=e.insertText,r=e;return r.insertBreak=function(){var o=r.selection;if(o==null)return t();var i=Or(ue.nodes(e,{match:function(c){return Re.checkNodeType(c,"blockquote")},universal:!0}),1)[0];if(!i)return t();var a=i[0],l=Re.findPath(e,a),s=ue.end(e,l);if(nr.equals(s,o.focus)){var u=Lt.string(a);if(u&&u.slice(-1)===`
| `)return e.deleteBackward("character"),void et.insertNodes(r,{type:"paragraph",children:[{text:""}]},{mode:"highest"})}n(`
| `)},r}},rpt=function(){function e(){this.title=jt("emotion.title"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M512 1024C230.4 1024 0 793.6 0 512S230.4 0 512 0s512 230.4 512 512-230.4 512-512 512z m0-102.4c226.742857 0 409.6-182.857143 409.6-409.6S738.742857 102.4 512 102.4 102.4 285.257143 102.4 512s182.857143 409.6 409.6 409.6z m-204.8-358.4h409.6c0 113.371429-91.428571 204.8-204.8 204.8s-204.8-91.428571-204.8-204.8z m0-102.4c-43.885714 0-76.8-32.914286-76.8-76.8s32.914286-76.8 76.8-76.8 76.8 32.914286 76.8 76.8-32.914286 76.8-76.8 76.8z m409.6 0c-43.885714 0-76.8-32.914286-76.8-76.8s32.914286-76.8 76.8-76.8c43.885714 0 76.8 32.914286 76.8 76.8s-32.914286 76.8-76.8 76.8z"></path></svg>',this.tag="button",this.showDropPanel=!0,this.$content=null}return e.prototype.exec=function(t,n){},e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){return t.selection==null||!!Or(ue.nodes(t,{match:function(n){return Re.getNodeType(n)==="pre"||!!ue.isVoid(t,n)},universal:!0}),1)[0]},e.prototype.getPanelContentElem=function(t){if(this.$content==null){var n=Pe('<ul class="w-e-panel-content-emotion"></ul>');n.on("click","li",function(i){var a=i.target;if(a!=null){i.preventDefault();var l=Pe(a).text();t.insertText(l)}}),this.$content=n}var r=this.$content;if(r==null)return document.createElement("ul");r.empty();var o=t.getMenuConfig("emotion").emotions;return(o===void 0?[]:o).forEach(function(i){var a=Pe("<li>"+i+"</li>");r.append(a)}),r[0]},e}(),opt={menus:[{key:"emotion",factory:function(){return new rpt},config:{emotions:"\u{1F600} \u{1F603} \u{1F604} \u{1F601} \u{1F606} \u{1F605} \u{1F602} \u{1F923} \u{1F60A} \u{1F607} \u{1F642} \u{1F643} \u{1F609} \u{1F60C} \u{1F60D} \u{1F618} \u{1F617} \u{1F619} \u{1F61A} \u{1F60B} \u{1F61B} \u{1F61D} \u{1F61C} \u{1F913} \u{1F60E} \u{1F60F} \u{1F612} \u{1F61E} \u{1F614} \u{1F61F} \u{1F615} \u{1F641} \u{1F623} \u{1F616} \u{1F62B} \u{1F629} \u{1F622} \u{1F62D} \u{1F624} \u{1F620} \u{1F621} \u{1F633} \u{1F631} \u{1F628} \u{1F917} \u{1F914} \u{1F636} \u{1F611} \u{1F62C} \u{1F644} \u{1F62F} \u{1F634} \u{1F637} \u{1F911} \u{1F608} \u{1F921} \u{1F4A9} \u{1F47B} \u{1F480} \u{1F440} \u{1F463} \u{1F450} \u{1F64C} \u{1F44F} \u{1F91D} \u{1F44D} \u{1F44E} \u{1F44A} \u270A \u{1F91B} \u{1F91C} \u{1F91E} \u270C\uFE0F \u{1F918} \u{1F44C} \u{1F448} \u{1F449} \u{1F446} \u{1F447} \u261D\uFE0F \u270B \u{1F91A} \u{1F590} \u{1F596} \u{1F44B} \u{1F919} \u{1F4AA} \u{1F595} \u270D\uFE0F \u{1F64F}".split(" ")}}]},ipt={1:"12px",2:"14px",3:"16px",4:"19px",5:"24px",6:"32px",7:"48px"},apt={selector:"font",preParseHtml:function(e){var t=Pe(e);if(dy(t)!=="font")return e;var n=t.attr("size")||"";n&&(t.removeAttr("size"),t.css("font-size",ipt[n]));var r=t.attr("face")||"";return r&&(t.removeAttr("face"),t.css("font-family",r)),t[0]}},lpt=On("".indexOf);Bi({target:"String",proto:!0,forced:!F8e("includes")},{includes:function(e){return!!~lpt(To(hu(this)),To(N8e(e)),arguments.length>1?arguments[1]:void 0)}});var fh,hS,vS=function(e){return e&&e.Math==Math&&e},lr=vS(typeof globalThis=="object"&&globalThis)||vS(typeof window=="object"&&window)||vS(typeof self=="object"&&self)||vS(typeof qC=="object"&&qC)||function(){return this}()||Function("return this")(),q$=Function.prototype,n5e=q$.apply,spt=q$.bind,r5e=q$.call,o5e=typeof Reflect=="object"&&Reflect.apply||(spt?r5e.bind(n5e):function(){return r5e.apply(n5e,arguments)}),i5e=Function.prototype,K$=i5e.bind,Y$=i5e.call,upt=K$&&K$.bind(Y$),$o=K$?function(e){return e&&upt(Y$,e)}:function(e){return e&&function(){return Y$.apply(e,arguments)}},La=function(e){return typeof e=="function"},Ns=function(e){try{return!!e()}catch{return!0}},Wl=!Ns(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),Y8=Function.prototype.call,rd=Y8.bind?Y8.bind(Y8):function(){return Y8.apply(Y8,arguments)},a5e={}.propertyIsEnumerable,l5e=Object.getOwnPropertyDescriptor,cpt=l5e&&!a5e.call({1:2},1)?function(e){var t=l5e(this,e);return!!t&&t.enumerable}:a5e,X$={f:cpt},_v=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},dpt=$o({}.toString),fpt=$o("".slice),Ev=function(e){return fpt(dpt(e),8,-1)},Q$=lr.Object,ppt=$o("".split),s5e=Ns(function(){return!Q$("z").propertyIsEnumerable(0)})?function(e){return Ev(e)=="String"?ppt(e,""):Q$(e)}:Q$,hpt=lr.TypeError,J$=function(e){if(e==null)throw hpt("Can't call method on "+e);return e},od=function(e){return s5e(J$(e))},tc=function(e){return typeof e=="object"?e!==null:La(e)},mu={},u5e=function(e){return La(e)?e:void 0},X8=function(e,t){return arguments.length<2?u5e(mu[e])||u5e(lr[e]):mu[e]&&mu[e][t]||lr[e]&&lr[e][t]},c5e=$o({}.isPrototypeOf),Z$=X8("navigator","userAgent")||"",d5e=lr.process,f5e=lr.Deno,p5e=d5e&&d5e.versions||f5e&&f5e.version,h5e=p5e&&p5e.v8;h5e&&(hS=(fh=h5e.split("."))[0]>0&&fh[0]<4?1:+(fh[0]+fh[1])),!hS&&Z$&&(!(fh=Z$.match(/Edge\/(\d+)/))||fh[1]>=74)&&(fh=Z$.match(/Chrome\/(\d+)/))&&(hS=+fh[1]);var mS=hS,id=!!Object.getOwnPropertySymbols&&!Ns(function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&mS&&mS<41}),eU=id&&!Symbol.sham&&typeof Symbol.iterator=="symbol",vpt=lr.Object,vy=eU?function(e){return typeof e=="symbol"}:function(e){var t=X8("Symbol");return La(t)&&c5e(t.prototype,vpt(e))},mpt=lr.String,gpt=lr.TypeError,v5e=function(e){if(La(e))return e;throw gpt(function(t){try{return mpt(t)}catch{return"Object"}}(e)+" is not a function")},ypt=lr.TypeError,bpt=Object.defineProperty,ph=lr["__core-js_shared__"]||function(e,t){try{bpt(lr,e,{value:t,configurable:!0,writable:!0})}catch{lr[e]=t}return t}("__core-js_shared__",{}),Cv=KC(function(e){(e.exports=function(t,n){return ph[t]||(ph[t]=n!==void 0?n:{})})("versions",[]).push({version:"3.19.3",mode:"pure",copyright:"\xA9 2021 Denis Pushkarev (zloirock.ru)"})}),Apt=lr.Object,Q8=function(e){return Apt(J$(e))},wpt=$o({}.hasOwnProperty),Tr=Object.hasOwn||function(e,t){return wpt(Q8(e),t)},xpt=0,_pt=Math.random(),Ept=$o(1 .toString),gS=function(e){return"Symbol("+(e===void 0?"":e)+")_"+Ept(++xpt+_pt,36)},J8=Cv("wks"),Sv=lr.Symbol,m5e=Sv&&Sv.for,Cpt=eU?Sv:Sv&&Sv.withoutSetter||gS,Fs=function(e){if(!Tr(J8,e)||!id&&typeof J8[e]!="string"){var t="Symbol."+e;id&&Tr(Sv,e)?J8[e]=Sv[e]:J8[e]=eU&&m5e?m5e(t):Cpt(t)}return J8[e]},Spt=lr.TypeError,kpt=Fs("toPrimitive"),my=function(e){var t=function(n){if(!tc(n)||vy(n))return n;var r,o,i=(r=n[kpt])==null?void 0:v5e(r);if(i){if(o=rd(i,n,"string"),!tc(o)||vy(o))return o;throw Spt("Can't convert object to primitive value")}return function(a){var l,s;if(La(l=a.toString)&&!tc(s=rd(l,a))||La(l=a.valueOf)&&!tc(s=rd(l,a)))return s;throw ypt("Can't convert object to primitive value")}(n)}(e);return vy(t)?t:t+""},tU=lr.document,Dpt=tc(tU)&&tc(tU.createElement),g5e=function(e){return Dpt?tU.createElement(e):{}},y5e=!Wl&&!Ns(function(){return Object.defineProperty(g5e("div"),"a",{get:function(){return 7}}).a!=7}),b5e=Object.getOwnPropertyDescriptor,nU={f:Wl?b5e:function(e,t){if(e=od(e),t=my(t),y5e)try{return b5e(e,t)}catch{}if(Tr(e,t))return _v(!rd(X$.f,e,t),e[t])}},Opt=/#|\.prototype\./,Z8=function(e,t){var n=Mpt[Tpt(e)];return n==Fpt||n!=Npt&&(La(t)?Ns(t):!!t)},Tpt=Z8.normalize=function(e){return String(e).replace(Opt,".").toLowerCase()},Mpt=Z8.data={},Npt=Z8.NATIVE="N",Fpt=Z8.POLYFILL="P",Rpt=Z8,A5e=$o($o.bind),w5e=function(e,t){return v5e(e),t===void 0?e:A5e?A5e(e,t):function(){return e.apply(t,arguments)}},Ipt=lr.String,Bpt=lr.TypeError,kv=function(e){if(tc(e))return e;throw Bpt(Ipt(e)+" is not an object")},Ppt=lr.TypeError,x5e=Object.defineProperty,Dv={f:Wl?x5e:function(e,t,n){if(kv(e),t=my(t),kv(n),y5e)try{return x5e(e,t,n)}catch{}if("get"in n||"set"in n)throw Ppt("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},ad=Wl?function(e,t,n){return Dv.f(e,t,_v(1,n))}:function(e,t,n){return e[t]=n,e},Lpt=nU.f,jpt=function(e){var t=function(n,r,o){if(this instanceof t){switch(arguments.length){case 0:return new e;case 1:return new e(n);case 2:return new e(n,r)}return new e(n,r,o)}return o5e(e,this,arguments)};return t.prototype=e.prototype,t},hh=function(e,t){var n,r,o,i,a,l,s,u,c=e.target,d=e.global,f=e.stat,p=e.proto,m=d?lr:f?lr[c]:(lr[c]||{}).prototype,v=d?mu:mu[c]||ad(mu,c,{})[c],g=v.prototype;for(o in t)n=!Rpt(d?o:c+(f?".":"#")+o,e.forced)&&m&&Tr(m,o),a=v[o],n&&(l=e.noTargetGet?(u=Lpt(m,o))&&u.value:m[o]),i=n&&l?l:t[o],n&&typeof a==typeof i||(s=e.bind&&n?w5e(i,lr):e.wrap&&n?jpt(i):p&&La(i)?$o(i):i,(e.sham||i&&i.sham||a&&a.sham)&&ad(s,"sham",!0),ad(v,o,s),p&&(Tr(mu,r=c+"Prototype")||ad(mu,r,{}),ad(mu[r],o,i),e.real&&g&&!g[o]&&ad(g,o,i)))},yS=Array.isArray||function(e){return Ev(e)=="Array"},Vpt=Math.ceil,zpt=Math.floor,rU=function(e){var t=+e;return t!=t||t===0?0:(t>0?zpt:Vpt)(t)},Hpt=Math.min,bS=function(e){return(t=e.length)>0?Hpt(rU(t),9007199254740991):0;var t},oU=function(e,t,n){var r=my(t);r in e?Dv.f(e,r,_v(0,n)):e[r]=n},_5e={};_5e[Fs("toStringTag")]="z";var iU=String(_5e)==="[object z]",$pt=Fs("toStringTag"),Upt=lr.Object,Wpt=Ev(function(){return arguments}())=="Arguments",AS=iU?Ev:function(e){var t,n,r;return e===void 0?"Undefined":e===null?"Null":typeof(n=function(o,i){try{return o[i]}catch{}}(t=Upt(e),$pt))=="string"?n:Wpt?Ev(t):(r=Ev(t))=="Object"&&La(t.callee)?"Arguments":r},Gpt=$o(Function.toString);La(ph.inspectSource)||(ph.inspectSource=function(e){return Gpt(e)});var E5e=ph.inspectSource,C5e=function(){},qpt=[],S5e=X8("Reflect","construct"),aU=/^\s*(?:class|function)\b/,Kpt=$o(aU.exec),Ypt=!aU.exec(C5e),e5=function(e){if(!La(e))return!1;try{return S5e(C5e,qpt,e),!0}catch{return!1}},Xpt=!S5e||Ns(function(){var e;return e5(e5.call)||!e5(Object)||!e5(function(){e=!0})||e})?function(e){if(!La(e))return!1;switch(AS(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return Ypt||!!Kpt(aU,E5e(e))}:e5,Qpt=Fs("species"),k5e=lr.Array,D5e=function(e,t){return new(function(n){var r;return yS(n)&&(r=n.constructor,(Xpt(r)&&(r===k5e||yS(r.prototype))||tc(r)&&(r=r[Qpt])===null)&&(r=void 0)),r===void 0?k5e:r}(e))(t===0?0:t)},Jpt=Fs("species"),O5e=Fs("isConcatSpreadable"),T5e=lr.TypeError,Zpt=mS>=51||!Ns(function(){var e=[];return e[O5e]=!1,e.concat()[0]!==e}),eht=mS>=51||!Ns(function(){var e=[];return(e.constructor={})[Jpt]=function(){return{foo:1}},e.concat(Boolean).foo!==1}),tht=function(e){if(!tc(e))return!1;var t=e[O5e];return t!==void 0?!!t:yS(e)};hh({target:"Array",proto:!0,forced:!Zpt||!eht},{concat:function(e){var t,n,r,o,i,a=Q8(this),l=D5e(a,0),s=0;for(t=-1,r=arguments.length;t<r;t++)if(tht(i=t===-1?a:arguments[t])){if(s+(o=bS(i))>9007199254740991)throw T5e("Maximum allowed index exceeded");for(n=0;n<o;n++,s++)n in i&&oU(l,s,i[n])}else{if(s>=9007199254740991)throw T5e("Maximum allowed index exceeded");oU(l,s++,i)}return l.length=s,l}});var wS,nht=lr.String,xS=function(e){if(AS(e)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return nht(e)},rht=Math.max,oht=Math.min,lU=function(e,t){var n=rU(e);return n<0?rht(n+t,0):oht(n,t)},M5e=function(e){return function(t,n,r){var o,i=od(t),a=bS(i),l=lU(r,a);if(e&&n!=n){for(;a>l;)if((o=i[l++])!=o)return!0}else for(;a>l;l++)if((e||l in i)&&i[l]===n)return e||l||0;return!e&&-1}},iht={includes:M5e(!0),indexOf:M5e(!1)},t5={},aht=iht.indexOf,N5e=$o([].push),F5e=function(e,t){var n,r=od(e),o=0,i=[];for(n in r)!Tr(t5,n)&&Tr(r,n)&&N5e(i,n);for(;t.length>o;)Tr(r,n=t[o++])&&(~aht(i,n)||N5e(i,n));return i},_S=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],sU=Object.keys||function(e){return F5e(e,_S)},lht=Wl?Object.defineProperties:function(e,t){kv(e);for(var n,r=od(t),o=sU(t),i=o.length,a=0;i>a;)Dv.f(e,n=o[a++],r[n]);return e},sht=X8("document","documentElement"),R5e=Cv("keys"),ES=function(e){return R5e[e]||(R5e[e]=gS(e))},I5e=ES("IE_PROTO"),uU=function(){},B5e=function(e){return"<script>"+e+"<\/script>"},P5e=function(e){e.write(B5e("")),e.close();var t=e.parentWindow.Object;return e=null,t},CS=function(){try{wS=new ActiveXObject("htmlfile")}catch{}var e,t;CS=typeof document<"u"?document.domain&&wS?P5e(wS):((t=g5e("iframe")).style.display="none",sht.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write(B5e("document.F=Object")),e.close(),e.F):P5e(wS);for(var n=_S.length;n--;)delete CS.prototype[_S[n]];return CS()};t5[I5e]=!0;var SS,n5,kS,Ov=Object.create||function(e,t){var n;return e!==null?(uU.prototype=kv(e),n=new uU,uU.prototype=null,n[I5e]=e):n=CS(),t===void 0?n:lht(n,t)},uht=_S.concat("length","prototype"),L5e={f:Object.getOwnPropertyNames||function(e){return F5e(e,uht)}},cht=lr.Array,dht=Math.max,j5e=L5e.f,V5e=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],z5e={f:function(e){return V5e&&Ev(e)=="Window"?function(t){try{return j5e(t)}catch{return function(r){for(var o=bS(r),i=lU(void 0,o),a=lU(o,o),l=cht(dht(a-i,0)),s=0;i<a;i++,s++)oU(l,s,r[i]);return l.length=s,l}(V5e)}}(e):j5e(od(e))}},cU={f:Object.getOwnPropertySymbols},fht=$o([].slice),DS=function(e,t,n,r){ad(e,t,n)},dU={f:Fs},pht=Dv.f,ii=function(e){var t=mu.Symbol||(mu.Symbol={});Tr(t,e)||pht(t,e,{value:dU.f(e)})},hht=iU?{}.toString:function(){return"[object "+AS(this)+"]"},vht=Dv.f,H5e=Fs("toStringTag"),OS=function(e,t,n,r){if(e){var o=n?e:e.prototype;Tr(o,H5e)||vht(o,H5e,{configurable:!0,value:t}),r&&!iU&&ad(o,"toString",hht)}},$5e=lr.WeakMap,mht=La($5e)&&/native code/.test(E5e($5e)),fU=lr.TypeError,ght=lr.WeakMap;if(mht||ph.state){var Tv=ph.state||(ph.state=new ght),yht=$o(Tv.get),U5e=$o(Tv.has),bht=$o(Tv.set);SS=function(e,t){if(U5e(Tv,e))throw new fU("Object already initialized");return t.facade=e,bht(Tv,e,t),t},n5=function(e){return yht(Tv,e)||{}},kS=function(e){return U5e(Tv,e)}}else{var gy=ES("state");t5[gy]=!0,SS=function(e,t){if(Tr(e,gy))throw new fU("Object already initialized");return t.facade=e,ad(e,gy,t),t},n5=function(e){return Tr(e,gy)?e[gy]:{}},kS=function(e){return Tr(e,gy)}}var yy={set:SS,get:n5,has:kS,enforce:function(e){return kS(e)?n5(e):SS(e,{})},getterFor:function(e){return function(t){var n;if(!tc(t)||(n=n5(t)).type!==e)throw fU("Incompatible receiver, "+e+" required");return n}}},W5e=$o([].push),vh=function(e){var t=e==1,n=e==2,r=e==3,o=e==4,i=e==6,a=e==7,l=e==5||i;return function(s,u,c,d){for(var f,p,m=Q8(s),v=s5e(m),g=w5e(u,c),b=bS(v),y=0,w=d||D5e,x=t?w(s,b):n||a?w(s,0):void 0;b>y;y++)if((l||y in v)&&(p=g(f=v[y],y,m),e))if(t)x[y]=p;else if(p)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:W5e(x,f)}else switch(e){case 4:return!1;case 7:W5e(x,f)}return i?-1:r||o?o:x}},TS=[vh(0),vh(1),vh(2),vh(3),vh(4),vh(5),vh(6),vh(7)][0],Gl=ES("hidden"),G5e=Fs("toPrimitive"),Aht=yy.set,q5e=yy.getterFor("Symbol"),nc=Object.prototype,mh=lr.Symbol,gh=mh&&mh.prototype,K5e=lr.TypeError,pU=lr.QObject,r5=X8("JSON","stringify"),Y5e=nU.f,yh=Dv.f,X5e=z5e.f,wht=X$.f,Q5e=$o([].push),hf=Cv("symbols"),o5=Cv("op-symbols"),hU=Cv("string-to-symbol-registry"),vU=Cv("symbol-to-string-registry"),xht=Cv("wks"),mU=!pU||!pU.prototype||!pU.prototype.findChild,gU=Wl&&Ns(function(){return Ov(yh({},"a",{get:function(){return yh(this,"a",{value:7}).a}})).a!=7})?function(e,t,n){var r=Y5e(nc,t);r&&delete nc[t],yh(e,t,n),r&&e!==nc&&yh(nc,t,r)}:yh,yU=function(e,t){var n=hf[e]=Ov(gh);return Aht(n,{type:"Symbol",tag:e,description:t}),Wl||(n.description=t),n},MS=function(e,t,n){e===nc&&MS(o5,t,n),kv(e);var r=my(t);return kv(n),Tr(hf,r)?(n.enumerable?(Tr(e,Gl)&&e[Gl][r]&&(e[Gl][r]=!1),n=Ov(n,{enumerable:_v(0,!1)})):(Tr(e,Gl)||yh(e,Gl,_v(1,{})),e[Gl][r]=!0),gU(e,r,n)):yh(e,r,n)},J5e=function(e,t){kv(e);var n=od(t),r=sU(n).concat(bU(n));return TS(r,function(o){Wl&&!rd(Z5e,n,o)||MS(e,o,n[o])}),e},Z5e=function(e){var t=my(e),n=rd(wht,this,t);return!(this===nc&&Tr(hf,t)&&!Tr(o5,t))&&(!(n||!Tr(this,t)||!Tr(hf,t)||Tr(this,Gl)&&this[Gl][t])||n)},eAe=function(e,t){var n=od(e),r=my(t);if(n!==nc||!Tr(hf,r)||Tr(o5,r)){var o=Y5e(n,r);return!o||!Tr(hf,r)||Tr(n,Gl)&&n[Gl][r]||(o.enumerable=!0),o}},tAe=function(e){var t=X5e(od(e)),n=[];return TS(t,function(r){Tr(hf,r)||Tr(t5,r)||Q5e(n,r)}),n},bU=function(e){var t=e===nc,n=X5e(t?o5:od(e)),r=[];return TS(n,function(o){!Tr(hf,o)||t&&!Tr(nc,o)||Q5e(r,hf[o])}),r};if(id||(gh=(mh=function(){if(c5e(gh,this))throw K5e("Symbol is not a constructor");var e=arguments.length&&arguments[0]!==void 0?xS(arguments[0]):void 0,t=gS(e),n=function(r){this===nc&&rd(n,o5,r),Tr(this,Gl)&&Tr(this[Gl],t)&&(this[Gl][t]=!1),gU(this,t,_v(1,r))};return Wl&&mU&&gU(nc,t,{configurable:!0,set:n}),yU(t,e)}).prototype,DS(gh,"toString",function(){return q5e(this).tag}),DS(mh,"withoutSetter",function(e){return yU(gS(e),e)}),X$.f=Z5e,Dv.f=MS,nU.f=eAe,L5e.f=z5e.f=tAe,cU.f=bU,dU.f=function(e){return yU(Fs(e),e)},Wl&&yh(gh,"description",{configurable:!0,get:function(){return q5e(this).description}})),hh({global:!0,wrap:!0,forced:!id,sham:!id},{Symbol:mh}),TS(sU(xht),function(e){ii(e)}),hh({target:"Symbol",stat:!0,forced:!id},{for:function(e){var t=xS(e);if(Tr(hU,t))return hU[t];var n=mh(t);return hU[t]=n,vU[n]=t,n},keyFor:function(e){if(!vy(e))throw K5e(e+" is not a symbol");if(Tr(vU,e))return vU[e]},useSetter:function(){mU=!0},useSimple:function(){mU=!1}}),hh({target:"Object",stat:!0,forced:!id,sham:!Wl},{create:function(e,t){return t===void 0?Ov(e):J5e(Ov(e),t)},defineProperty:MS,defineProperties:J5e,getOwnPropertyDescriptor:eAe}),hh({target:"Object",stat:!0,forced:!id},{getOwnPropertyNames:tAe,getOwnPropertySymbols:bU}),hh({target:"Object",stat:!0,forced:Ns(function(){cU.f(1)})},{getOwnPropertySymbols:function(e){return cU.f(Q8(e))}}),r5){var _ht=!id||Ns(function(){var e=mh();return r5([e])!="[null]"||r5({a:e})!="{}"||r5(Object(e))!="{}"});hh({target:"JSON",stat:!0,forced:_ht},{stringify:function(e,t,n){var r=fht(arguments),o=t;if((tc(t)||e!==void 0)&&!vy(e))return yS(t)||(t=function(i,a){if(La(o)&&(a=rd(o,this,i,a)),!vy(a))return a}),r[1]=t,o5e(r5,null,r)}})}if(!gh[G5e]){var Eht=gh.valueOf;DS(gh,G5e,function(e){return rd(Eht,this)})}OS(mh,"Symbol"),t5[Gl]=!0,ii("asyncIterator"),ii("hasInstance"),ii("isConcatSpreadable"),ii("iterator"),ii("match"),ii("matchAll"),ii("replace"),ii("search"),ii("species"),ii("split"),ii("toPrimitive"),ii("toStringTag"),ii("unscopables"),OS(lr.JSON,"JSON",!0);var bh,nAe,rAe,Cht=mu.Symbol,Mv={},oAe=Function.prototype,Sht=Wl&&Object.getOwnPropertyDescriptor,AU=Tr(oAe,"name"),kht={EXISTS:AU,PROPER:AU&&(function(){}).name==="something",CONFIGURABLE:AU&&(!Wl||Wl&&Sht(oAe,"name").configurable)},Dht=!Ns(function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}),iAe=ES("IE_PROTO"),wU=lr.Object,Oht=wU.prototype,xU=Dht?wU.getPrototypeOf:function(e){var t=Q8(e);if(Tr(t,iAe))return t[iAe];var n=t.constructor;return La(n)&&t instanceof n?n.prototype:t instanceof wU?Oht:null},_U=Fs("iterator"),aAe=!1;[].keys&&("next"in(rAe=[].keys())?(nAe=xU(xU(rAe)))!==Object.prototype&&(bh=nAe):aAe=!0);var Tht=bh==null||Ns(function(){var e={};return bh[_U].call(e)!==e});bh=Tht?{}:Ov(bh),La(bh[_U])||DS(bh,_U,function(){return this});var lAe={IteratorPrototype:bh,BUGGY_SAFARI_ITERATORS:aAe},Mht=lAe.IteratorPrototype,Nht=function(){return this};lr.String,lr.TypeError,Object.setPrototypeOf||"__proto__"in{}&&function(){var e={};try{$o(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set)(e,[])}catch{}}();var Fht=kht.PROPER,EU=lAe.BUGGY_SAFARI_ITERATORS,Rht=Fs("iterator"),Iht=function(){return this},sAe=function(e,t,n,r,o,i,a){(function(g,b,y){var w=b+" Iterator";g.prototype=Ov(Mht,{next:_v(1,y)}),OS(g,w,!1,!0),Mv[w]=Nht})(n,t,r);var l,s,u=function(g){if(g===o&&m)return m;if(!EU&&g in f)return f[g];switch(g){case"keys":case"values":case"entries":return function(){return new n(this,g)}}return function(){return new n(this)}},c=t+" Iterator",d=!1,f=e.prototype,p=f[Rht]||f["@@iterator"]||o&&f[o],m=!EU&&p||u(o),v=t=="Array"&&f.entries||p;return v&&(l=xU(v.call(new e)))!==Object.prototype&&l.next&&(OS(l,c,!0,!0),Mv[c]=Iht),Fht&&o=="values"&&p&&p.name!=="values"&&(d=!0,m=function(){return rd(p,this)}),o&&(s={values:u("values"),keys:u("keys"),entries:u("entries")},a||hh({target:t,proto:!0,forced:EU||d},s)),Mv[t]=m,s},Bht=yy.set,Pht=yy.getterFor("Array Iterator");sAe(Array,"Array",function(e,t){Bht(this,{type:"Array Iterator",target:od(e),index:0,kind:t})},function(){var e=Pht(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,{value:void 0,done:!0}):n=="keys"?{value:r,done:!1}:n=="values"?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}},"values"),Mv.Arguments=Mv.Array;var uAe=Fs("toStringTag");for(var CU in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var cAe=lr[CU],SU=cAe&&cAe.prototype;SU&&AS(SU)!==uAe&&ad(SU,uAe,CU),Mv[CU]=Mv.Array}var Lht=Cht;ii("asyncDispose"),ii("dispose"),ii("matcher"),ii("metadata"),ii("observable"),ii("patternMatch"),ii("replaceAll");var NS=Lht,jht=$o("".charAt),dAe=$o("".charCodeAt),Vht=$o("".slice),zht=function(e){return function(t,n){var r,o,i=xS(J$(t)),a=rU(n),l=i.length;return a<0||a>=l?e?"":void 0:(r=dAe(i,a))<55296||r>56319||a+1===l||(o=dAe(i,a+1))<56320||o>57343?e?jht(i,a):r:e?Vht(i,a,a+2):o-56320+(r-55296<<10)+65536}}(!0),Hht=yy.set,$ht=yy.getterFor("String Iterator");sAe(String,"String",function(e){Hht(this,{type:"String Iterator",string:xS(e),index:0})},function(){var e,t=$ht(this),n=t.string,r=t.index;return r>=n.length?{value:void 0,done:!0}:(e=zht(n,r),t.index+=e.length,{value:e,done:!1})});var Uht=dU.f("iterator"),Wht=KC(function(e){function t(n){return typeof NS=="function"&&typeof Uht=="symbol"?(e.exports=t=function(r){return typeof r},e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=t=function(r){return r&&typeof NS=="function"&&r.constructor===NS&&r!==NS.prototype?"symbol":typeof r},e.exports.default=e.exports,e.exports.__esModule=!0),t(n)}e.exports=t,e.exports.default=e.exports,e.exports.__esModule=!0}),fAe=function(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}(Wht),Ght=tS.EXISTS,qht=ry.f,pAe=Function.prototype,Kht=On(pAe.toString),hAe=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,Yht=On(hAe.exec);Ju&&!Ght&&qht(pAe,"name",{configurable:!0,get:function(){try{return Yht(hAe,Kht(this))[1]}catch{return""}}});var vAe=function(){function e(){this.tag="select",this.width=80}return e.prototype.isActive=function(t){return!1},e.prototype.getValue=function(t){var n=this.mark,r=ue.marks(t);return r&&r[n]?r[n]:""},e.prototype.isDisabled=function(t){return t.selection==null||(this.mark,!!Or(ue.nodes(t,{match:function(n){return Re.getNodeType(n)==="pre"||!!ue.isVoid(t,n)},universal:!0}),1)[0])},e.prototype.exec=function(t,n){var r=this.mark;n?t.addMark(r,n):t.removeMark(r)},e}(),Xht=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title=jt("fontSize.title"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M64 512h384v128h-128V1024h-128V640h-128z m896-256H708.2496v768h-136.4992V256H320V128h640z"></path></svg>',n.mark="fontSize",n}return yo(t,e),t.prototype.getOptions=function(n){var r=[],o=n.getMenuConfig(this.mark).fontSizeList,i=o===void 0?[]:o;r.push({text:jt("fontSize.default"),value:""}),i.forEach(function(l){if(typeof l=="string")r.push({text:l,value:l});else if(fAe(l)==="object"){var s=l.name,u=l.value;r.push({text:s,value:u})}});var a=this.getValue(n);return r.forEach(function(l){l.value===a?l.selected=!0:delete l.selected}),r},t}(vAe),Qht=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title=jt("fontFamily.title"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M956.788364 152.110545h-24.110546l23.924364 9.029819 0.186182 121.018181h-65.070546l-86.574545-130.048H566.551273v650.14691l130.048 64.977454v65.163636h-390.050909v-65.163636l129.954909-64.977454V152.110545H198.283636L111.429818 282.065455H46.545455V69.259636C46.545455 33.792 82.664727 22.062545 98.955636 22.062545h812.683637c23.738182 0 45.056 15.173818 45.056 41.053091V169.425455v-17.221819z"></path></svg>',n.mark="fontFamily",n.selectPanelWidth=150,n}return yo(t,e),t.prototype.getOptions=function(n){var r=[],o=n.getMenuConfig(this.mark).fontFamilyList,i=o===void 0?[]:o;r.push({text:jt("fontFamily.default"),value:""}),i.forEach(function(l){if(typeof l=="string")r.push({text:l,value:l,styleForRenderMenuList:{"font-family":l}});else if(fAe(l)==="object"){var s=l.name,u=l.value;r.push({text:s,value:u,styleForRenderMenuList:{"font-family":u}})}});var a=this.getValue(n);return r.forEach(function(l){l.value===a?l.selected=!0:delete l.selected}),r},t}(vAe),Jht={renderStyle:function(e,t){var n=e,r=n.fontSize,o=n.fontFamily,i=t;return r&&wv(i,{fontSize:r}),o&&wv(i,{fontFamily:o}),i},styleToHtml:function(e,t){if(!Qt.isText(e))return t;var n,r=e,o=r.fontSize,i=r.fontFamily;return o||i?((M$(t)||dy(n=Pe(t))!=="span")&&(n=Pe("<span>"+t+"</span>")),o&&n.css("font-size",o),i&&n.css("font-family",i),cy(n)):t},preParseHtml:[apt],parseStyleHtml:function(e,t,n){var r=Pe(e);if(!Qt.isText(t))return t;var o=t,i=n.getMenuConfig("fontSize").fontSizeList,a=i===void 0?[]:i,l=ec(r,"font-size"),s=a.find(function(p){return p.value&&p.value===l})||a.includes(l);l&&s&&(o.fontSize=l);var u=n.getMenuConfig("fontFamily").fontFamilyList,c=u===void 0?[]:u,d=ec(r,"font-family").replace(/"/g,""),f=c.find(function(p){return p.value&&p.value===d})||c.includes(d);return d&&f&&(o.fontFamily=d),o},menus:[{key:"fontSize",factory:function(){return new Xht},config:{fontSizeList:["12px",{name:"13px",value:"13px"},"14px","15px","16px","19px",{name:"22px",value:"22px"},"24px","29px","32px","40px","48px"]}},{key:"fontFamily",factory:function(){return new Qht},config:{fontFamilyList:["\u9ED1\u4F53",{name:"\u4EFF\u5B8B",value:"\u4EFF\u5B8B"},"\u6977\u4F53","\u6807\u6977\u4F53","\u534E\u6587\u4EFF\u5B8B","\u534E\u6587\u6977\u4F53",{name:"\u5B8B\u4F53",value:"\u5B8B\u4F53"},"\u5FAE\u8F6F\u96C5\u9ED1","Arial","Tahoma","Verdana","Times New Roman","Courier New"]}}]},Zht={selector:"p,h1,h2,h3,h4,h5",preParseHtml:function(e){var t=Pe(e),n=ec(t,"padding-left");return/\dem/.test(n)&&t.css("text-indent","2em"),/\dpx/.test(n)&&parseInt(n,10)%32==0&&t.css("text-indent","2em"),t[0]}},mAe=function(){function e(){this.tag="button"}return e.prototype.getValue=function(t){var n=Or(ue.nodes(t,{match:function(o){return!!o.indent},universal:!0}),1),r=n[0];return r==null?"":Or(r,1)[0].indent||""},e.prototype.isActive=function(t){return!1},e.prototype.getMatchNode=function(t){var n=Or(ue.nodes(t,{match:function(r){var o=Re.getNodeType(r);return o==="paragraph"||!!o.startsWith("header")},universal:!0,mode:"highest"}),1)[0];return n==null?null:n[0]},e}(),e0t=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title=jt("indent.decrease"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M0 64h1024v128H0z m384 192h640v128H384z m0 192h640v128H384z m0 192h640v128H384zM0 832h1024v128H0z m256-512v384l-256-192z"></path></svg>',n}return yo(t,e),t.prototype.isDisabled=function(n){var r=this.getMatchNode(n);return r==null||!r.indent},t.prototype.exec=function(n,r){et.setNodes(n,{indent:null},{match:function(o){return sn.isElement(o)}})},t}(mAe),t0t=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title=jt("indent.increase"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M0 64h1024v128H0z m384 192h640v128H384z m0 192h640v128H384z m0 192h640v128H384zM0 832h1024v128H0z m0-128V320l256 192z"></path></svg>',n}return yo(t,e),t.prototype.isDisabled=function(n){var r=this.getMatchNode(n);return r==null||!!r.indent},t.prototype.exec=function(n,r){et.setNodes(n,{indent:"2em"},{match:function(o){return sn.isElement(o)},mode:"highest"})},t}(mAe),n0t={renderStyle:function(e,t){if(!sn.isElement(e))return t;var n=e.indent,r=t;return n&&wv(r,{textIndent:n}),r},styleToHtml:function(e,t){if(!sn.isElement(e))return t;var n=e.indent;if(!n)return t;var r=Pe(t);return r.css("text-indent",n),cy(r)},preParseHtml:[Zht],parseStyleHtml:function(e,t,n){var r=Pe(e);if(!sn.isElement(t))return t;var o=t,i=ec(r,"text-indent"),a=parseInt(i,10);return i&&a>0&&(o.indent=i),o},menus:[{key:"indent",factory:function(){return new t0t}},{key:"delIndent",factory:function(){return new e0t}}]},FS=function(){function e(){this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.getMatchNode=function(t){var n=Or(ue.nodes(t,{match:function(r){var o=Re.getNodeType(r);return o==="paragraph"||o==="blockquote"||!!o.startsWith("header")},universal:!0,mode:"highest"}),1)[0];return n==null?null:n[0]},e.prototype.isDisabled=function(t){return t.selection==null||!!Re.getSelectedElems(t).some(function(n){if(ue.isVoid(t,n)&&ue.isBlock(t,n))return!0;var r=n.type;return!!["pre","code"].includes(r)||void 0})},e}(),r0t=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title=jt("justify.left"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M768 793.6v102.4H51.2v-102.4h716.8z m204.8-230.4v102.4H51.2v-102.4h921.6z m-204.8-230.4v102.4H51.2v-102.4h716.8zM972.8 102.4v102.4H51.2V102.4h921.6z"></path></svg>',n}return yo(t,e),t.prototype.exec=function(n,r){et.setNodes(n,{textAlign:"left"},{match:function(o){return sn.isElement(o)&&!n.isInline(o)}})},t}(FS),o0t=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title=jt("justify.right"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M972.8 793.6v102.4H256v-102.4h716.8z m0-230.4v102.4H51.2v-102.4h921.6z m0-230.4v102.4H256v-102.4h716.8zM972.8 102.4v102.4H51.2V102.4h921.6z"></path></svg>',n}return yo(t,e),t.prototype.exec=function(n,r){et.setNodes(n,{textAlign:"right"},{match:function(o){return sn.isElement(o)&&!n.isInline(o)}})},t}(FS),i0t=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title=jt("justify.center"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M870.4 793.6v102.4H153.6v-102.4h716.8z m102.4-230.4v102.4H51.2v-102.4h921.6z m-102.4-230.4v102.4H153.6v-102.4h716.8zM972.8 102.4v102.4H51.2V102.4h921.6z"></path></svg>',n}return yo(t,e),t.prototype.exec=function(n,r){et.setNodes(n,{textAlign:"center"},{match:function(o){return sn.isElement(o)&&!n.isInline(o)}})},t}(FS),a0t=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.title=jt("justify.justify"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M0 64h1024v128H0z m0 192h1024v128H0z m0 192h1024v128H0z m0 192h1024v128H0z m0 192h1024v128H0z"></path></svg>',n}return yo(t,e),t.prototype.exec=function(n,r){et.setNodes(n,{textAlign:"justify"},{match:function(o){return sn.isElement(o)&&!n.isInline(o)}})},t}(FS),l0t={renderStyle:function(e,t){if(!sn.isElement(e))return t;var n=e.textAlign,r=t;return n&&wv(r,{textAlign:n}),r},styleToHtml:function(e,t){if(!sn.isElement(e))return t;var n=e.textAlign;if(!n)return t;var r=Pe(t);return r.css("text-align",n),cy(r)},parseStyleHtml:function(e,t,n){var r=Pe(e);if(!sn.isElement(t))return t;var o=t,i=ec(r,"text-align");return i&&(o.textAlign=i),o},menus:[{key:"justifyLeft",factory:function(){return new r0t}},{key:"justifyRight",factory:function(){return new o0t}},{key:"justifyCenter",factory:function(){return new i0t}},{key:"justifyJustify",factory:function(){return new a0t}}]},s0t=function(){function e(){this.title=jt("lineHeight.title"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M964 788a8 8 0 0 1 8 8v98a8 8 0 0 1-8 8H438a8 8 0 0 1-8-8v-98a8 8 0 0 1 8-8h526zM198.93 144.306c6.668-5.798 16.774-5.094 22.573 1.574l122.26 140.582a16 16 0 0 1 3.927 10.5c0 8.836-7.164 16-16 16h-61.8a8 8 0 0 0-8 8v390.077h69.819a16 16 0 0 1 10.502 3.928c6.666 5.8 7.37 15.906 1.57 22.573L221.476 878.123a16 16 0 0 1-1.57 1.57c-6.668 5.8-16.774 5.097-22.574-1.57L75.051 737.538a16 16 0 0 1-3.928-10.5c0-8.837 7.163-16 16-16h69.822V312.96H87.127a16 16 0 0 1-10.502-3.928c-6.666-5.8-7.37-15.906-1.57-22.573l122.303-140.582a16 16 0 0 1 1.572-1.572zM964 465a8 8 0 0 1 8 8v98a8 8 0 0 1-8 8H438a8 8 0 0 1-8-8v-98a8 8 0 0 1 8-8h526z m0-323a8 8 0 0 1 8 8v98a8 8 0 0 1-8 8H438a8 8 0 0 1-8-8v-98a8 8 0 0 1 8-8h526z"></path></svg>',this.tag="select",this.width=80}return e.prototype.getOptions=function(t){var n=[],r=t.getMenuConfig("lineHeight").lineHeightList,o=r===void 0?[]:r;n.push({text:jt("lineHeight.default"),value:""}),o.forEach(function(a){n.push({text:a,value:a})});var i=this.getValue(t);return n.forEach(function(a){a.value===i?a.selected=!0:delete a.selected}),n},e.prototype.getMatchNode=function(t){var n=Or(ue.nodes(t,{match:function(r){var o=Re.getNodeType(r);return!!o.startsWith("header")||!!["paragraph","blockquote","list-item"].includes(o)},universal:!0,mode:"highest"}),1)[0];return n==null?null:n[0]},e.prototype.isActive=function(t){return!1},e.prototype.getValue=function(t){var n=this.getMatchNode(t);return n==null?"":sn.isElement(n)&&n.lineHeight||""},e.prototype.isDisabled=function(t){return t.selection==null||this.getMatchNode(t)==null},e.prototype.exec=function(t,n){et.setNodes(t,{lineHeight:n.toString()},{mode:"highest"})},e}(),u0t={renderStyle:function(e,t){if(!sn.isElement(e))return t;var n=e.lineHeight,r=t;return n&&wv(r,{lineHeight:n}),r},styleToHtml:function(e,t){if(!sn.isElement(e))return t;var n=e.lineHeight;if(!n)return t;var r=Pe(t);return r.css("line-height",n),cy(r)},parseStyleHtml:function(e,t,n){var r=Pe(e);if(!sn.isElement(t))return t;var o=t,i=n.getMenuConfig("lineHeight").lineHeightList,a=i===void 0?[]:i,l=ec(r,"line-height");return l&&a.includes(l)&&(o.lineHeight=l),o},menus:[{key:"lineHeight",factory:function(){return new s0t},config:{lineHeightList:["1","1.15","1.5","2","2.5","3"]}}]},c0t=function(){function e(){this.title=jt("undo.redo"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M0.00032 576a510.72 510.72 0 0 0 173.344 384l84.672-96A383.136 383.136 0 0 1 128.00032 576C128.00032 363.936 299.93632 192 512.00032 192c106.048 0 202.048 42.976 271.52 112.48L640.00032 448h384V64l-149.984 149.984A510.272 510.272 0 0 0 512.00032 64C229.21632 64 0.00032 293.216 0.00032 576z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){return t.selection==null},e.prototype.exec=function(t,n){typeof t.redo=="function"&&t.redo()},e}(),d0t=function(){function e(){this.title=jt("undo.undo"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M512 64A510.272 510.272 0 0 0 149.984 213.984L0.032 64v384h384L240.512 304.48A382.784 382.784 0 0 1 512.032 192c212.064 0 384 171.936 384 384 0 114.688-50.304 217.632-130.016 288l84.672 96a510.72 510.72 0 0 0 173.344-384c0-282.784-229.216-512-512-512z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){return t.selection==null},e.prototype.exec=function(t,n){typeof t.undo=="function"&&t.undo()},e}(),f0t={menus:[{key:"redo",factory:function(){return new c0t}},{key:"undo",factory:function(){return new d0t}}]},p0t={type:"divider",renderElem:function(e,t,n){return S2("div",{props:{contentEditable:!1,className:"w-e-textarea-divider"},dataset:{selected:Re.isNodeSelected(n,e)?"true":""},style:{},on:{mousedown:function(r){return r.preventDefault()}}},[S2("hr")])}},h0t=function(){function e(){this.title=jt("divider.title"),this.iconSvg='<svg viewBox="0 0 1092 1024"><path d="M0 51.2m51.2 0l989.866667 0q51.2 0 51.2 51.2l0 0q0 51.2-51.2 51.2l-989.866667 0q-51.2 0-51.2-51.2l0 0q0-51.2 51.2-51.2Z"></path><path d="M0 460.8m51.2 0l170.666667 0q51.2 0 51.2 51.2l0 0q0 51.2-51.2 51.2l-170.666667 0q-51.2 0-51.2-51.2l0 0q0-51.2 51.2-51.2Z"></path><path d="M819.2 460.8m51.2 0l170.666667 0q51.2 0 51.2 51.2l0 0q0 51.2-51.2 51.2l-170.666667 0q-51.2 0-51.2-51.2l0 0q0-51.2 51.2-51.2Z"></path><path d="M409.6 460.8m51.2 0l170.666667 0q51.2 0 51.2 51.2l0 0q0 51.2-51.2 51.2l-170.666667 0q-51.2 0-51.2-51.2l0 0q0-51.2 51.2-51.2Z"></path><path d="M0 870.4m51.2 0l989.866667 0q51.2 0 51.2 51.2l0 0q0 51.2-51.2 51.2l-989.866667 0q-51.2 0-51.2-51.2l0 0q0-51.2 51.2-51.2Z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){return t.selection==null||!!Re.getSelectedElems(t).some(function(n){if(t.isVoid(n))return!0;var r=Re.getNodeType(n);return r==="table"||r==="pre"||void 0})},e.prototype.exec=function(t,n){et.insertNodes(t,{type:"divider",children:[{text:""}]},{mode:"highest"})},e}(),v0t={renderElems:[p0t],elemsToHtml:[{type:"divider",elemToHtml:function(e,t){return"<hr/>"}}],parseElemsHtml:[{selector:"hr:not([data-w-e-type])",parseElemHtml:function(e,t,n){return{type:"divider",children:[{text:""}]}}}],menus:[{key:"divider",factory:function(){return new h0t}}],editorPlugin:function(e){var t=e.isVoid,n=e.normalizeNode,r=e;return r.isVoid=function(o){return o.type==="divider"||t(o)},r.normalizeNode=function(o){var i=Or(o,2),a=i[0],l=i[1];if(Re.getNodeType(a)!=="divider")return n([a,l]);Re.isLastNode(r,a)&&et.insertNodes(r,Re.genEmptyParagraph(),{at:[l[0]+1]})},r}},m0t=iS.map;Bi({target:"Array",proto:!0,forced:!c$("map")},{map:function(e){return m0t(this,e,arguments.length>1?arguments[1]:void 0)}});var g0t=On([].join),y0t=QC!=Object,b0t=S8e("join",",");Bi({target:"Array",proto:!0,forced:y0t||!b0t},{join:function(e){return g0t(ny(this),e===void 0?",":e)}});var A0t=function(){function e(){this.title=jt("codeBlock.title"),this.iconSvg='<svg viewBox="0 0 1280 1024"><path d="M832 736l96 96 320-320L928 192l-96 96 224 224zM448 288l-96-96L32 512l320 320 96-96-224-224zM701.312 150.528l69.472 18.944-192 704.032-69.472-18.944 192-704.032z"></path></svg>',this.tag="button"}return e.prototype.getSelectCodeElem=function(t){var n=Re.getSelectedNodeByType(t,"code");if(n==null)return null;var r=Re.getParentNode(t,n);return r==null||Re.getNodeType(r)!=="pre"?null:n},e.prototype.getValue=function(t){var n=this.getSelectCodeElem(t);return n==null?"":n.language||""},e.prototype.isActive=function(t){return!!this.getSelectCodeElem(t)},e.prototype.isDisabled=function(t){if(t.selection==null)return!0;var n=Re.getSelectedElems(t);return!!n.some(function(r){return t.isVoid(r)})||!n.some(function(r){var o=Re.getNodeType(r);if(o==="pre"||o==="paragraph")return!0})},e.prototype.exec=function(t,n){this.isActive(t)?this.changeToPlainText(t):this.changeToCodeBlock(t,n.toString())},e.prototype.changeToPlainText=function(t){var n=this.getSelectCodeElem(t);if(n!=null){var r=Lt.string(n);et.removeNodes(t,{mode:"highest"});var o=r.split(`
| `).map(function(i){return{type:"paragraph",children:[{text:i}]}});et.insertNodes(t,o,{mode:"highest"})}},e.prototype.changeToCodeBlock=function(t,n){var r,o,i=[],a=ue.nodes(t,{match:function(d){return t.children.includes(d)},universal:!0});try{for(var l=x8e(a),s=l.next();!s.done;s=l.next()){var u=Or(s.value,1)[0];u&&i.push(Lt.string(u))}}catch(d){r={error:d}}finally{try{s&&!s.done&&(o=l.return)&&o.call(l)}finally{if(r)throw r.error}}et.removeNodes(t,{mode:"highest"});var c={type:"pre",children:[{type:"code",language:n,children:[{text:i.join(`
| `)}]}]};et.insertNodes(t,c,{mode:"highest"})},e}(),w0t={key:"codeBlock",factory:function(){return new A0t}};Bi({target:"String",proto:!0,forced:$8("anchor")},{anchor:function(e){return H8(this,"a","name",e)}}),w$("match",function(e,t,n){return[function(r){var o=hu(this),i=r==null?void 0:JC(r,e);return i?oi(i,r,o):new RegExp(r)[e](To(o))},function(r){var o=Ms(this),i=To(r),a=n(t,o,i);if(a.done)return a.value;if(!o.global)return V8(o,i);var l=o.unicode;o.lastIndex=0;for(var s,u=[],c=0;(s=V8(o,i))!==null;){var d=To(s[0]);u[c]=d,d===""&&(o.lastIndex=x$(i,B8(o.lastIndex),l)),c++}return c===0?null:u}]});var x0t={type:"pre",renderElem:function(e,t,n){return Mn("pre",null,t)}},_0t={type:"code",renderElem:function(e,t,n){return Mn("code",null,t)}},E0t={selector:"pre:not([data-w-e-type])",parseElemHtml:function(e,t,n){var r=Pe(e);return(t=t.filter(function(o){return Re.getNodeType(o)==="code"})).length===0&&(t=[{type:"code",language:"",children:[{text:r[0].textContent||""}]}]),{type:"pre",children:t.filter(function(o){return Re.getNodeType(o)==="code"})}}},C0t={menus:[w0t],editorPlugin:function(e){var t=e.insertBreak,n=e.normalizeNode,r=e.insertData;e.insertNode;var o=e;return o.insertBreak=function(){var i=Re.getSelectedNodeByType(o,"code");if(i!=null){var a=function(u,c){var d=c.selection;if(d==null)return"";var f=Lt.string(u),p=d.anchor.offset,m=f.slice(0,p).split(`
| `),v=m.length;return v===0?"":m[v-1]}(i,o);if(a){var l=a.match(/^\s+/);if(l!=null&&l[0]!=null){var s=l[0];return void o.insertText(`
| `+s)}}o.insertText(`
| `)}else t()},o.normalizeNode=function(i){var a=Or(i,2),l=a[0],s=a[1],u=Re.getNodeType(l);return u==="code"&&s.length<=1&&et.setNodes(o,{type:"paragraph"},{at:s}),u==="pre"&&(Re.isLastNode(o,l)&&et.insertNodes(o,Re.genEmptyParagraph(),{at:[s[0]+1]}),Re.getNodeType(l.children[0])!=="code"&&(et.unwrapNodes(o),et.setNodes(o,{type:"paragraph"},{mode:"highest"}))),n([l,s])},o.insertData=function(i){if(Re.getSelectedNodeByType(o,"code")!=null){var a=i.getData("text/plain");ue.insertText(o,a)}else r(i)},o},renderElems:[x0t,_0t],elemsToHtml:[{type:"code",elemToHtml:function(e,t){return"<code>"+t+"</code>"}},{type:"pre",elemToHtml:function(e,t){return"<pre>"+t+"</pre>"}}],preParseHtml:[{selector:"pre>code",preParseHtml:function(e){var t=Pe(e);if(dy(t)!=="code")return e;var n=t.find("xmp");if(n.length===0)return e;var r=n.text();return n.remove(),t.text(r),t[0]}}],parseElemsHtml:[{selector:"pre:not([data-w-e-type])>code",parseElemHtml:function(e,t,n){return{type:"code",language:"",children:[{text:Pe(e)[0].textContent||""}]}}},E0t]},S0t=function(){function e(){this.title=jt("fullScreen.title"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M133.705143 335.433143V133.851429h201.581714a29.622857 29.622857 0 0 0 29.622857-29.549715V68.754286a29.622857 29.622857 0 0 0-29.622857-29.622857H61.732571A22.893714 22.893714 0 0 0 38.765714 62.025143V335.725714c0 16.310857 13.238857 29.622857 29.622857 29.622857h35.547429a29.842286 29.842286 0 0 0 29.696-29.842285zM690.980571 133.851429h201.581715v201.654857c0 16.310857 13.238857 29.549714 29.622857 29.549714h35.547428a29.622857 29.622857 0 0 0 29.549715-29.549714V61.952a22.893714 22.893714 0 0 0-22.820572-22.893714h-273.554285a29.622857 29.622857 0 0 0-29.549715 29.622857v35.547428c0 16.310857 13.238857 29.696 29.622857 29.696zM335.286857 892.781714H133.705143V691.2a29.622857 29.622857 0 0 0-29.622857-29.622857H68.534857a29.622857 29.622857 0 0 0-29.549714 29.622857v273.554286c0 12.653714 10.24 22.893714 22.820571 22.893714h273.554286a29.622857 29.622857 0 0 0 29.696-29.622857v-35.547429a29.769143 29.769143 0 0 0-29.769143-29.696z m557.348572-201.581714v201.581714H690.907429a29.622857 29.622857 0 0 0-29.622858 29.622857v35.547429c0 16.310857 13.238857 29.622857 29.622858 29.622857h273.554285c12.580571 0 22.893714-10.313143 22.893715-22.893714V691.2a29.622857 29.622857 0 0 0-29.622858-29.622857h-35.547428a29.622857 29.622857 0 0 0-29.696 29.622857z"></path></svg>',this.tag="button",this.alwaysEnable=!0}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return t.isFullScreen},e.prototype.isDisabled=function(t){return!1},e.prototype.exec=function(t,n){t.isFullScreen?t.unFullScreen():t.fullScreen()},e}(),k0t={menus:[{key:"fullScreen",factory:function(){return new S0t}}]},D0t=function(){function e(){this.title=jt("common.enter"),this.iconSvg='<svg viewBox="0 0 1255 1024"><path d="M1095.111111 731.477333h-625.777778V1024L0 658.318222 469.333333 292.408889v292.636444h625.777778V0h156.444445v731.477333z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){var n=t.selection;return n==null||!!ct.isExpanded(n)},e.prototype.exec=function(t,n){var r=t.selection;if(r!=null){var o=[r.anchor.path[0]];et.insertNodes(t,{type:"paragraph",children:[{text:""}]},{at:o}),t.select(ue.start(t,o))}},e}(),O0t=[zdt,bft,Jht,n0t,l0t,u0t,$ft,v0t,opt,Tft,C0t,npt,hft,kdt,qft,f0t,k0t,{menus:[{key:"enter",factory:function(){return new D0t}}]}];Ul("en",{listModule:{unOrderedList:"Unordered list",orderedList:"Ordered list"}}),Ul("zh-CN",{listModule:{unOrderedList:"\u65E0\u5E8F\u5217\u8868",orderedList:"\u6709\u5E8F\u5217\u8868"}});var gAe=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function kU(e){var t={exports:{}};return e(t,t.exports),t.exports}var Ah,RS,IS=function(e){return e&&e.Math==Math&&e},Nn=IS(typeof globalThis=="object"&&globalThis)||IS(typeof window=="object"&&window)||IS(typeof self=="object"&&self)||IS(typeof gAe=="object"&&gAe)||function(){return this}()||Function("return this")(),yAe=Function.prototype,DU=yAe.bind,OU=yAe.call,T0t=DU&&DU.bind(OU),pr=DU?function(e){return e&&T0t(OU,e)}:function(e){return e&&function(){return OU.apply(e,arguments)}},Ro=function(e){try{return!!e()}catch{return!0}},M0t=pr({}.toString),N0t=pr("".slice),vf=function(e){return N0t(M0t(e),8,-1)},TU=Nn.Object,F0t=pr("".split),bAe=Ro(function(){return!TU("z").propertyIsEnumerable(0)})?function(e){return vf(e)=="String"?F0t(e,""):TU(e)}:TU,R0t=Nn.TypeError,BS=function(e){if(e==null)throw R0t("Can't call method on "+e);return e},by=function(e){return bAe(BS(e))},I0t=Object.defineProperty,MU=function(e,t){try{I0t(Nn,e,{value:t,configurable:!0,writable:!0})}catch{Nn[e]=t}return t},wh=Nn["__core-js_shared__"]||MU("__core-js_shared__",{}),NU=kU(function(e){(e.exports=function(t,n){return wh[t]||(wh[t]=n!==void 0?n:{})})("versions",[]).push({version:"3.19.3",mode:"global",copyright:"\xA9 2021 Denis Pushkarev (zloirock.ru)"})}),B0t=Nn.Object,i5=function(e){return B0t(BS(e))},P0t=pr({}.hasOwnProperty),Pi=Object.hasOwn||function(e,t){return P0t(i5(e),t)},L0t=0,j0t=Math.random(),V0t=pr(1 .toString),FU=function(e){return"Symbol("+(e===void 0?"":e)+")_"+V0t(++L0t+j0t,36)},Uo=function(e){return typeof e=="function"},a5=function(e,t){return arguments.length<2?function(n){return Uo(n)?n:void 0}(Nn[e]):Nn[e]&&Nn[e][t]},RU=a5("navigator","userAgent")||"",AAe=Nn.process,wAe=Nn.Deno,xAe=AAe&&AAe.versions||wAe&&wAe.version,_Ae=xAe&&xAe.v8;_Ae&&(RS=(Ah=_Ae.split("."))[0]>0&&Ah[0]<4?1:+(Ah[0]+Ah[1])),!RS&&RU&&(!(Ah=RU.match(/Edge\/(\d+)/))||Ah[1]>=74)&&(Ah=RU.match(/Chrome\/(\d+)/))&&(RS=+Ah[1]);var PS,IU=RS,BU=!!Object.getOwnPropertySymbols&&!Ro(function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&IU&&IU<41}),PU=BU&&!Symbol.sham&&typeof Symbol.iterator=="symbol",l5=NU("wks"),Nv=Nn.Symbol,EAe=Nv&&Nv.for,z0t=PU?Nv:Nv&&Nv.withoutSetter||FU,_a=function(e){if(!Pi(l5,e)||!BU&&typeof l5[e]!="string"){var t="Symbol."+e;BU&&Pi(Nv,e)?l5[e]=Nv[e]:l5[e]=PU&&EAe?EAe(t):z0t(t)}return l5[e]},Wo=function(e){return typeof e=="object"?e!==null:Uo(e)},H0t=Nn.String,$0t=Nn.TypeError,ql=function(e){if(Wo(e))return e;throw $0t(H0t(e)+" is not an object")},xh=!Ro(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),LU=Nn.document,U0t=Wo(LU)&&Wo(LU.createElement),jU=function(e){return U0t?LU.createElement(e):{}},CAe=!xh&&!Ro(function(){return Object.defineProperty(jU("div"),"a",{get:function(){return 7}}).a!=7}),s5=Function.prototype.call,na=s5.bind?s5.bind(s5):function(){return s5.apply(s5,arguments)},LS=pr({}.isPrototypeOf),W0t=Nn.Object,VU=PU?function(e){return typeof e=="symbol"}:function(e){var t=a5("Symbol");return Uo(t)&&LS(t.prototype,W0t(e))},G0t=Nn.String,zU=function(e){try{return G0t(e)}catch{return"Object"}},q0t=Nn.TypeError,HU=function(e){if(Uo(e))return e;throw q0t(zU(e)+" is not a function")},u5=function(e,t){var n=e[t];return n==null?void 0:HU(n)},K0t=Nn.TypeError,Y0t=Nn.TypeError,X0t=_a("toPrimitive"),$U=function(e){var t=function(n){if(!Wo(n)||VU(n))return n;var r,o=u5(n,X0t);if(o){if(r=na(o,n,"string"),!Wo(r)||VU(r))return r;throw Y0t("Can't convert object to primitive value")}return function(i){var a,l;if(Uo(a=i.toString)&&!Wo(l=na(a,i))||Uo(a=i.valueOf)&&!Wo(l=na(a,i)))return l;throw K0t("Can't convert object to primitive value")}(n)}(e);return VU(t)?t:t+""},Q0t=Nn.TypeError,SAe=Object.defineProperty,Fv={f:xh?SAe:function(e,t,n){if(ql(e),t=$U(t),ql(n),CAe)try{return SAe(e,t,n)}catch{}if("get"in n||"set"in n)throw Q0t("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},J0t=Math.ceil,Z0t=Math.floor,c5=function(e){var t=+e;return t!=t||t===0?0:(t>0?Z0t:J0t)(t)},e1t=Math.max,t1t=Math.min,UU=function(e,t){var n=c5(e);return n<0?e1t(n+t,0):t1t(n,t)},n1t=Math.min,kAe=function(e){return e>0?n1t(c5(e),9007199254740991):0},Ay=function(e){return kAe(e.length)},DAe=function(e){return function(t,n,r){var o,i=by(t),a=Ay(i),l=UU(r,a);if(e&&n!=n){for(;a>l;)if((o=i[l++])!=o)return!0}else for(;a>l;l++)if((e||l in i)&&i[l]===n)return e||l||0;return!e&&-1}},OAe={includes:DAe(!0),indexOf:DAe(!1)},jS={},r1t=OAe.indexOf,TAe=pr([].push),MAe=function(e,t){var n,r=by(e),o=0,i=[];for(n in r)!Pi(jS,n)&&Pi(r,n)&&TAe(i,n);for(;t.length>o;)Pi(r,n=t[o++])&&(~r1t(i,n)||TAe(i,n));return i},VS=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],o1t=Object.keys||function(e){return MAe(e,VS)},i1t=xh?Object.defineProperties:function(e,t){ql(e);for(var n,r=by(t),o=o1t(t),i=o.length,a=0;i>a;)Fv.f(e,n=o[a++],r[n]);return e},a1t=a5("document","documentElement"),NAe=NU("keys"),WU=function(e){return NAe[e]||(NAe[e]=FU(e))},FAe=WU("IE_PROTO"),GU=function(){},RAe=function(e){return"<script>"+e+"<\/script>"},IAe=function(e){e.write(RAe("")),e.close();var t=e.parentWindow.Object;return e=null,t},zS=function(){try{PS=new ActiveXObject("htmlfile")}catch{}var e,t;zS=typeof document<"u"?document.domain&&PS?IAe(PS):((t=jU("iframe")).style.display="none",a1t.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write(RAe("document.F=Object")),e.close(),e.F):IAe(PS);for(var n=VS.length;n--;)delete zS.prototype[VS[n]];return zS()};jS[FAe]=!0;var qU=Object.create||function(e,t){var n;return e!==null?(GU.prototype=ql(e),n=new GU,GU.prototype=null,n[FAe]=e):n=zS(),t===void 0?n:i1t(n,t)},KU=_a("unscopables"),YU=Array.prototype;YU[KU]==null&&Fv.f(YU,KU,{configurable:!0,value:qU(null)});var d5=function(e){YU[KU][e]=!0},wy={},l1t=pr(Function.toString);Uo(wh.inspectSource)||(wh.inspectSource=function(e){return l1t(e)});var HS,f5,$S,XU=wh.inspectSource,BAe=Nn.WeakMap,PAe=Uo(BAe)&&/native code/.test(XU(BAe)),US=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},_h=xh?function(e,t,n){return Fv.f(e,t,US(1,n))}:function(e,t,n){return e[t]=n,e},QU=Nn.TypeError,s1t=Nn.WeakMap;if(PAe||wh.state){var Rv=wh.state||(wh.state=new s1t),u1t=pr(Rv.get),LAe=pr(Rv.has),c1t=pr(Rv.set);HS=function(e,t){if(LAe(Rv,e))throw new QU("Object already initialized");return t.facade=e,c1t(Rv,e,t),t},f5=function(e){return u1t(Rv,e)||{}},$S=function(e){return LAe(Rv,e)}}else{var xy=WU("state");jS[xy]=!0,HS=function(e,t){if(Pi(e,xy))throw new QU("Object already initialized");return t.facade=e,_h(e,xy,t),t},f5=function(e){return Pi(e,xy)?e[xy]:{}},$S=function(e){return Pi(e,xy)}}var Iv,jAe,VAe,ld={set:HS,get:f5,has:$S,enforce:function(e){return $S(e)?f5(e):HS(e,{})},getterFor:function(e){return function(t){var n;if(!Wo(t)||(n=f5(t)).type!==e)throw QU("Incompatible receiver, "+e+" required");return n}}},zAe={}.propertyIsEnumerable,HAe=Object.getOwnPropertyDescriptor,d1t={f:HAe&&!zAe.call({1:2},1)?function(e){var t=HAe(this,e);return!!t&&t.enumerable}:zAe},$Ae=Object.getOwnPropertyDescriptor,UAe={f:xh?$Ae:function(e,t){if(e=by(e),t=$U(t),CAe)try{return $Ae(e,t)}catch{}if(Pi(e,t))return US(!na(d1t.f,e,t),e[t])}},WAe=Function.prototype,f1t=xh&&Object.getOwnPropertyDescriptor,JU=Pi(WAe,"name"),ZU={EXISTS:JU,PROPER:JU&&(function(){}).name==="something",CONFIGURABLE:JU&&(!xh||xh&&f1t(WAe,"name").configurable)},mf=kU(function(e){var t=ZU.CONFIGURABLE,n=ld.get,r=ld.enforce,o=String(String).split("String");(e.exports=function(i,a,l,s){var u,c=!!s&&!!s.unsafe,d=!!s&&!!s.enumerable,f=!!s&&!!s.noTargetGet,p=s&&s.name!==void 0?s.name:a;Uo(l)&&(String(p).slice(0,7)==="Symbol("&&(p="["+String(p).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!Pi(l,"name")||t&&l.name!==p)&&_h(l,"name",p),(u=r(l)).source||(u.source=o.join(typeof p=="string"?p:""))),i!==Nn?(c?!f&&i[a]&&(d=!0):delete i[a],d?i[a]=l:_h(i,a,l)):d?i[a]=l:MU(a,l)})(Function.prototype,"toString",function(){return Uo(this)&&n(this).source||XU(this)})}),p1t=VS.concat("length","prototype"),WS={f:Object.getOwnPropertyNames||function(e){return MAe(e,p1t)}},h1t={f:Object.getOwnPropertySymbols},v1t=pr([].concat),m1t=a5("Reflect","ownKeys")||function(e){var t=WS.f(ql(e)),n=h1t.f;return n?v1t(t,n(e)):t},g1t=function(e,t){for(var n=m1t(t),r=Fv.f,o=UAe.f,i=0;i<n.length;i++){var a=n[i];Pi(e,a)||r(e,a,o(t,a))}},y1t=/#|\.prototype\./,p5=function(e,t){var n=A1t[b1t(e)];return n==x1t||n!=w1t&&(Uo(t)?Ro(t):!!t)},b1t=p5.normalize=function(e){return String(e).replace(y1t,".").toLowerCase()},A1t=p5.data={},w1t=p5.NATIVE="N",x1t=p5.POLYFILL="P",eW=p5,_1t=UAe.f,Eh=function(e,t){var n,r,o,i,a,l=e.target,s=e.global,u=e.stat;if(n=s?Nn:u?Nn[l]||MU(l,{}):(Nn[l]||{}).prototype)for(r in t){if(i=t[r],o=e.noTargetGet?(a=_1t(n,r))&&a.value:n[r],!eW(s?r:l+(u?".":"#")+r,e.forced)&&o!==void 0){if(typeof i==typeof o)continue;g1t(i,o)}(e.sham||o&&o.sham)&&_h(i,"sham",!0),mf(n,r,i,e)}},E1t=!Ro(function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}),GAe=WU("IE_PROTO"),tW=Nn.Object,C1t=tW.prototype,GS=E1t?tW.getPrototypeOf:function(e){var t=i5(e);if(Pi(t,GAe))return t[GAe];var n=t.constructor;return Uo(n)&&t instanceof n?n.prototype:t instanceof tW?C1t:null},nW=_a("iterator"),qAe=!1;[].keys&&("next"in(VAe=[].keys())?(jAe=GS(GS(VAe)))!==Object.prototype&&(Iv=jAe):qAe=!0);var S1t=Iv==null||Ro(function(){var e={};return Iv[nW].call(e)!==e});S1t&&(Iv={}),Uo(Iv[nW])||mf(Iv,nW,function(){return this});var rW={IteratorPrototype:Iv,BUGGY_SAFARI_ITERATORS:qAe},k1t=Fv.f,KAe=_a("toStringTag"),oW=function(e,t,n){e&&!Pi(e=n?e:e.prototype,KAe)&&k1t(e,KAe,{configurable:!0,value:t})},D1t=rW.IteratorPrototype,O1t=function(){return this},T1t=Nn.String,M1t=Nn.TypeError,qS=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=pr(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),t=n instanceof Array}catch{}return function(r,o){return ql(r),function(i){if(typeof i=="object"||Uo(i))return i;throw M1t("Can't set "+T1t(i)+" as a prototype")}(o),t?e(r,o):r.__proto__=o,r}}():void 0),N1t=ZU.PROPER,F1t=ZU.CONFIGURABLE,YAe=rW.IteratorPrototype,iW=rW.BUGGY_SAFARI_ITERATORS,h5=_a("iterator"),R1t=function(){return this},XAe=function(e,t,n,r,o,i,a){(function(g,b,y){var w=b+" Iterator";g.prototype=qU(D1t,{next:US(1,y)}),oW(g,w,!1),wy[w]=O1t})(n,t,r);var l,s,u=function(g){if(g===o&&m)return m;if(!iW&&g in f)return f[g];switch(g){case"keys":case"values":case"entries":return function(){return new n(this,g)}}return function(){return new n(this)}},c=t+" Iterator",d=!1,f=e.prototype,p=f[h5]||f["@@iterator"]||o&&f[o],m=!iW&&p||u(o),v=t=="Array"&&f.entries||p;return v&&(l=GS(v.call(new e)))!==Object.prototype&&l.next&&(GS(l)!==YAe&&(qS?qS(l,YAe):Uo(l[h5])||mf(l,h5,R1t)),oW(l,c,!0)),N1t&&o=="values"&&p&&p.name!=="values"&&(F1t?_h(f,"name","values"):(d=!0,m=function(){return na(p,this)})),o&&(s={values:u("values"),keys:u("keys"),entries:u("entries")},a||Eh({target:t,proto:!0,forced:iW||d},s)),f[h5]!==m&&mf(f,h5,m,{name:o}),wy[t]=m,s},I1t=ld.set,B1t=ld.getterFor("Array Iterator"),v5=XAe(Array,"Array",function(e,t){I1t(this,{type:"Array Iterator",target:by(e),index:0,kind:t})},function(){var e=B1t(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,{value:void 0,done:!0}):n=="keys"?{value:r,done:!1}:n=="values"?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}},"values");wy.Arguments=wy.Array,d5("keys"),d5("values"),d5("entries");var QAe={};QAe[_a("toStringTag")]="z";var aW=String(QAe)==="[object z]",P1t=_a("toStringTag"),L1t=Nn.Object,j1t=vf(function(){return arguments}())=="Arguments",KS=aW?vf:function(e){var t,n,r;return e===void 0?"Undefined":e===null?"Null":typeof(n=function(o,i){try{return o[i]}catch{}}(t=L1t(e),P1t))=="string"?n:j1t?vf(t):(r=vf(t))=="Object"&&Uo(t.callee)?"Arguments":r},V1t=aW?{}.toString:function(){return"[object "+KS(this)+"]"};aW||mf(Object.prototype,"toString",V1t,{unsafe:!0});var z1t=Nn.String,gf=function(e){if(KS(e)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return z1t(e)},H1t=pr("".charAt),JAe=pr("".charCodeAt),$1t=pr("".slice),ZAe=function(e){return function(t,n){var r,o,i=gf(BS(t)),a=c5(n),l=i.length;return a<0||a>=l?e?"":void 0:(r=JAe(i,a))<55296||r>56319||a+1===l||(o=JAe(i,a+1))<56320||o>57343?e?H1t(i,a):r:e?$1t(i,a,a+2):o-56320+(r-55296<<10)+65536}},ewe={codeAt:ZAe(!1),charAt:ZAe(!0)},U1t=ewe.charAt,W1t=ld.set,G1t=ld.getterFor("String Iterator");XAe(String,"String",function(e){W1t(this,{type:"String Iterator",string:gf(e),index:0})},function(){var e,t=G1t(this),n=t.string,r=t.index;return r>=n.length?{value:void 0,done:!0}:(e=U1t(n,r),t.index+=e.length,{value:e,done:!1})});var lW=function(e,t,n){for(var r in t)mf(e,r,t[r],n);return e},q1t=Nn.Array,K1t=Math.max,twe=WS.f,nwe=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Y1t={f:function(e){return nwe&&vf(e)=="Window"?function(t){try{return twe(t)}catch{return function(r){for(var o,i,a,l,s=Ay(r),u=UU(void 0,s),c=UU(s,s),d=q1t(K1t(c-u,0)),f=0;u<c;u++,f++)o=d,i=f,a=r[u],(l=$U(i))in o?Fv.f(o,l,US(0,a)):o[l]=a;return d.length=f,d}(nwe)}}(e):twe(by(e))}},rwe=Ro(function(){if(typeof ArrayBuffer=="function"){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}),YS=Object.isExtensible,Bv=Ro(function(){YS(1)})||rwe?function(e){return!!Wo(e)&&(!rwe||vf(e)!="ArrayBuffer")&&(!YS||YS(e))}:YS,X1t=!Ro(function(){return Object.isExtensible(Object.preventExtensions({}))}),sW=kU(function(e){var t=Fv.f,n=!1,r=FU("meta"),o=0,i=function(l){t(l,r,{value:{objectID:"O"+o++,weakData:{}}})},a=e.exports={enable:function(){a.enable=function(){},n=!0;var l=WS.f,s=pr([].splice),u={};u[r]=1,l(u).length&&(WS.f=function(c){for(var d=l(c),f=0,p=d.length;f<p;f++)if(d[f]===r){s(d,f,1);break}return d},Eh({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:Y1t.f}))},fastKey:function(l,s){if(!Wo(l))return typeof l=="symbol"?l:(typeof l=="string"?"S":"P")+l;if(!Pi(l,r)){if(!Bv(l))return"F";if(!s)return"E";i(l)}return l[r].objectID},getWeakData:function(l,s){if(!Pi(l,r)){if(!Bv(l))return!0;if(!s)return!1;i(l)}return l[r].weakData},onFreeze:function(l){return X1t&&n&&Bv(l)&&!Pi(l,r)&&i(l),l}};jS[r]=!0}),owe=pr(pr.bind),uW=function(e,t){return HU(e),t===void 0?e:owe?owe(e,t):function(){return e.apply(t,arguments)}},Q1t=_a("iterator"),J1t=Array.prototype,Z1t=_a("iterator"),iwe=function(e){if(e!=null)return u5(e,Z1t)||u5(e,"@@iterator")||wy[KS(e)]},evt=Nn.TypeError,awe=function(e,t,n){var r,o;ql(e);try{if(!(r=u5(e,"return"))){if(t==="throw")throw n;return n}r=na(r,e)}catch(i){o=!0,r=i}if(t==="throw")throw n;if(o)throw r;return ql(r),n},tvt=Nn.TypeError,XS=function(e,t){this.stopped=e,this.result=t},lwe=XS.prototype,swe=function(e,t,n){var r,o,i,a,l,s,u,c,d=n&&n.that,f=!(!n||!n.AS_ENTRIES),p=!(!n||!n.IS_ITERATOR),m=!(!n||!n.INTERRUPTED),v=uW(t,d),g=function(y){return r&&awe(r,"normal",y),new XS(!0,y)},b=function(y){return f?(ql(y),m?v(y[0],y[1],g):v(y[0],y[1])):m?v(y,g):v(y)};if(p)r=e;else{if(!(o=iwe(e)))throw tvt(zU(e)+" is not iterable");if((c=o)!==void 0&&(wy.Array===c||J1t[Q1t]===c)){for(i=0,a=Ay(e);a>i;i++)if((l=b(e[i]))&&LS(lwe,l))return l;return new XS(!1)}r=function(y,w){var x=arguments.length<2?iwe(y):w;if(HU(x))return ql(na(x,y));throw evt(zU(y)+" is not iterable")}(e,o)}for(s=r.next;!(u=na(s,r)).done;){try{l=b(u.value)}catch(y){awe(r,"throw",y)}if(typeof l=="object"&&l&&LS(lwe,l))return l}return new XS(!1)},nvt=Nn.TypeError,uwe=function(e,t){if(LS(t,e))return e;throw nvt("Incorrect invocation")},cwe=_a("iterator"),dwe=!1;try{var rvt=0,fwe={next:function(){return{done:!!rvt++}},return:function(){dwe=!0}};fwe[cwe]=function(){return this},Array.from(fwe,function(){throw 2})}catch{}var cW=Array.isArray||function(e){return vf(e)=="Array"},pwe=function(){},ovt=[],hwe=a5("Reflect","construct"),dW=/^\s*(?:class|function)\b/,ivt=pr(dW.exec),avt=!dW.exec(pwe),m5=function(e){if(!Uo(e))return!1;try{return hwe(pwe,ovt,e),!0}catch{return!1}},lvt=!hwe||Ro(function(){var e;return m5(m5.call)||!m5(Object)||!m5(function(){e=!0})||e})?function(e){if(!Uo(e))return!1;switch(KS(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return avt||!!ivt(dW,XU(e))}:m5,svt=_a("species"),vwe=Nn.Array,mwe=function(e,t){return new(function(n){var r;return cW(n)&&(r=n.constructor,(lvt(r)&&(r===vwe||cW(r.prototype))||Wo(r)&&(r=r[svt])===null)&&(r=void 0)),r===void 0?vwe:r}(e))(t===0?0:t)},gwe=pr([].push),Ch=function(e){var t=e==1,n=e==2,r=e==3,o=e==4,i=e==6,a=e==7,l=e==5||i;return function(s,u,c,d){for(var f,p,m=i5(s),v=bAe(m),g=uW(u,c),b=Ay(v),y=0,w=d||mwe,x=t?w(s,b):n||a?w(s,0):void 0;b>y;y++)if((l||y in v)&&(p=g(f=v[y],y,m),e))if(t)x[y]=p;else if(p)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:gwe(x,f)}else switch(e){case 4:return!1;case 7:gwe(x,f)}return i?-1:r||o?o:x}},fW={forEach:Ch(0),map:Ch(1),filter:Ch(2),some:Ch(3),every:Ch(4),find:Ch(5),findIndex:Ch(6),filterReject:Ch(7)},QS=sW.getWeakData,uvt=ld.set,cvt=ld.getterFor,dvt=fW.find,fvt=fW.findIndex,pvt=pr([].splice),hvt=0,JS=function(e){return e.frozen||(e.frozen=new ywe)},ywe=function(){this.entries=[]},pW=function(e,t){return dvt(e.entries,function(n){return n[0]===t})};ywe.prototype={get:function(e){var t=pW(this,e);if(t)return t[1]},has:function(e){return!!pW(this,e)},set:function(e,t){var n=pW(this,e);n?n[1]=t:this.entries.push([e,t])},delete:function(e){var t=fvt(this.entries,function(n){return n[0]===e});return~t&&pvt(this.entries,t,1),!!~t}};var g5,bwe={getConstructor:function(e,t,n,r){var o=e(function(s,u){uwe(s,i),uvt(s,{type:t,id:hvt++,frozen:void 0}),u!=null&&swe(u,s[r],{that:s,AS_ENTRIES:n})}),i=o.prototype,a=cvt(t),l=function(s,u,c){var d=a(s),f=QS(ql(u),!0);return f===!0?JS(d).set(u,c):f[d.id]=c,s};return lW(i,{delete:function(s){var u=a(this);if(!Wo(s))return!1;var c=QS(s);return c===!0?JS(u).delete(s):c&&Pi(c,u.id)&&delete c[u.id]},has:function(s){var u=a(this);if(!Wo(s))return!1;var c=QS(s);return c===!0?JS(u).has(s):c&&Pi(c,u.id)}}),lW(i,n?{get:function(s){var u=a(this);if(Wo(s)){var c=QS(s);return c===!0?JS(u).get(s):c?c[u.id]:void 0}},set:function(s,u){return l(this,s,u)}}:{add:function(s){return l(this,s,!0)}}),o}},ZS=ld.enforce,vvt=!Nn.ActiveXObject&&"ActiveXObject"in Nn,Awe=function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}},mvt=function(e,t,n){var r=e.indexOf("Map")!==-1,o=e.indexOf("Weak")!==-1,i=r?"set":"add",a=Nn[e],l=a&&a.prototype,s=a,u={},c=function(g){var b=pr(l[g]);mf(l,g,g=="add"?function(y){return b(this,y===0?0:y),this}:g=="delete"?function(y){return!(o&&!Wo(y))&&b(this,y===0?0:y)}:g=="get"?function(y){return o&&!Wo(y)?void 0:b(this,y===0?0:y)}:g=="has"?function(y){return!(o&&!Wo(y))&&b(this,y===0?0:y)}:function(y,w){return b(this,y===0?0:y,w),this})};if(eW(e,!Uo(a)||!(o||l.forEach&&!Ro(function(){new a().entries().next()}))))s=n.getConstructor(t,e,r,i),sW.enable();else if(eW(e,!0)){var d=new s,f=d[i](o?{}:-0,1)!=d,p=Ro(function(){d.has(1)}),m=function(){if(!dwe)return!1;var g=!1;try{var b={};b[cwe]=function(){return{next:function(){return{done:g=!0}}}},function(y){new a(y)}(b)}catch{}return g}(),v=!o&&Ro(function(){for(var g=new a,b=5;b--;)g[i](b,b);return!g.has(-0)});m||((s=t(function(g,b){uwe(g,l);var y=function(w,x,_){var E,C;return qS&&Uo(E=x.constructor)&&E!==_&&Wo(C=E.prototype)&&C!==_.prototype&&qS(w,C),w}(new a,g,s);return b!=null&&swe(b,y[i],{that:y,AS_ENTRIES:r}),y})).prototype=l,l.constructor=s),(p||v)&&(c("delete"),c("has"),r&&c("get")),(v||f)&&c(i),o&&l.clear&&delete l.clear}return u[e]=s,Eh({global:!0,forced:s!=a},u),oW(s,e),o||n.setStrong(s,e,r),s}("WeakMap",Awe,bwe);if(PAe&&vvt){g5=bwe.getConstructor(Awe,"WeakMap",!0),sW.enable();var y5=mvt.prototype,wwe=pr(y5.delete),ek=pr(y5.has),xwe=pr(y5.get),_we=pr(y5.set);lW(y5,{delete:function(e){if(Wo(e)&&!Bv(e)){var t=ZS(this);return t.frozen||(t.frozen=new g5),wwe(this,e)||t.frozen.delete(e)}return wwe(this,e)},has:function(e){if(Wo(e)&&!Bv(e)){var t=ZS(this);return t.frozen||(t.frozen=new g5),ek(this,e)||t.frozen.has(e)}return ek(this,e)},get:function(e){if(Wo(e)&&!Bv(e)){var t=ZS(this);return t.frozen||(t.frozen=new g5),ek(this,e)?xwe(this,e):t.frozen.get(e)}return xwe(this,e)},set:function(e,t){if(Wo(e)&&!Bv(e)){var n=ZS(this);n.frozen||(n.frozen=new g5),ek(this,e)?_we(this,e,t):n.frozen.set(e,t)}else _we(this,e,t);return this}})}var Ewe={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},hW=jU("span").classList,Cwe=hW&&hW.constructor&&hW.constructor.prototype,gvt=Cwe===Object.prototype?void 0:Cwe,vW=_a("iterator"),Swe=_a("toStringTag"),mW=v5.values,kwe=function(e,t){if(e){if(e[vW]!==mW)try{_h(e,vW,mW)}catch{e[vW]=mW}if(e[Swe]||_h(e,Swe,t),Ewe[t]){for(var n in v5)if(e[n]!==v5[n])try{_h(e,n,v5[n])}catch{e[n]=v5[n]}}}};for(var gW in Ewe)kwe(Nn[gW]&&Nn[gW].prototype,gW);kwe(gvt,"DOMTokenList");var yW=new WeakMap,yvt={type:"list-item",renderElem:function(e,t,n){yW.set(e,n);var r=e,o=r.level,i=o===void 0?0:o,a=r.ordered,l={margin:"5px 0 5px "+20*i+"px"},s="";if(a!==void 0&&a){var u=function(d,f){var p=f,m=p.type,v=p.level,g=v===void 0?0:v,b=p.ordered,y=b!==void 0&&b;if(!y)return-1;var w=1,x=f,_=Re.findPath(d,x);if(_[0]===0)return 1;for(;_[0]>0;){var E=qe.previous(_),C=ue.node(d,E);if(C==null)break;var T=C[0],k=T.level,I=k===void 0?0:k,O=T.type,F=T.ordered;if(O!==m||I<g)break;if(I===g){if(F!==y)break;w++}x=T,_=E}return w}(n,e);s=u+"."}else s=function(d){d===void 0&&(d=0);var f="";switch(d){case 0:f="\u2022";break;case 1:f="\u25E6";break;default:f="\u25AA"}return f}(i);var c=function(d){var f,p=d.children||[],m=p.length;if(m===0)return"";for(var v=0;v<m&&!f;v++){var g=p[v];Qt.isText(g)&&(f=g)}return f==null?"":f.color||""}(e);return Mn("div",{style:l},Mn("span",{contentEditable:!1,style:{marginRight:"0.5em",color:c},"data-w-e-reserve":!0},s),Mn("span",null,t))}},bW=function(e,t){return bW=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(n[o]=r[o])},bW(e,t)};function Dwe(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}bW(e,t),e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function Owe(e){var t=typeof Symbol=="function"&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function b5(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(t===void 0||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(l){o={error:l}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function Twe(e){return ue.nodes(e,{at:e.selection||void 0,match:function(t){return Re.findPath(e,t).length===1}})}var bvt=OAe.includes;Eh({target:"Array",proto:!0},{includes:function(e){return bvt(this,e,arguments.length>1?arguments[1]:void 0)}}),d5("includes");var Mwe,AW,Avt=function(){var e=ql(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t},wW=Nn.RegExp,xW=Ro(function(){var e=wW("a","y");return e.lastIndex=2,e.exec("abcd")!=null}),wvt=xW||Ro(function(){return!wW("a","y").sticky}),xvt={BROKEN_CARET:xW||Ro(function(){var e=wW("^r","gy");return e.lastIndex=2,e.exec("str")!=null}),MISSED_STICKY:wvt,UNSUPPORTED_Y:xW},_vt=Nn.RegExp,Evt=Ro(function(){var e=_vt(".","s");return!(e.dotAll&&e.exec(`
| `)&&e.flags==="s")}),Cvt=Nn.RegExp,Svt=Ro(function(){var e=Cvt("(?<a>b)","g");return e.exec("b").groups.a!=="b"||"b".replace(e,"$<a>c")!=="bc"}),kvt=ld.get,Dvt=NU("native-string-replace",String.prototype.replace),tk=RegExp.prototype.exec,_W=tk,Ovt=pr("".charAt),Tvt=pr("".indexOf),Mvt=pr("".replace),EW=pr("".slice),CW=(AW=/b*/g,na(tk,Mwe=/a/,"a"),na(tk,AW,"a"),Mwe.lastIndex!==0||AW.lastIndex!==0),Nwe=xvt.BROKEN_CARET,SW=/()??/.exec("")[1]!==void 0;(CW||SW||Nwe||Evt||Svt)&&(_W=function(e){var t,n,r,o,i,a,l,s=this,u=kvt(s),c=gf(e),d=u.raw;if(d)return d.lastIndex=s.lastIndex,t=na(_W,d,c),s.lastIndex=d.lastIndex,t;var f=u.groups,p=Nwe&&s.sticky,m=na(Avt,s),v=s.source,g=0,b=c;if(p&&(m=Mvt(m,"y",""),Tvt(m,"g")===-1&&(m+="g"),b=EW(c,s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&Ovt(c,s.lastIndex-1)!==`
| `)&&(v="(?: "+v+")",b=" "+b,g++),n=new RegExp("^(?:"+v+")",m)),SW&&(n=new RegExp("^"+v+"$(?!\\s)",m)),CW&&(r=s.lastIndex),o=na(tk,p?n:s,b),p?o?(o.input=EW(o.input,g),o[0]=EW(o[0],g),o.index=s.lastIndex,s.lastIndex+=o[0].length):s.lastIndex=0:CW&&o&&(s.lastIndex=s.global?o.index+o[0].length:r),SW&&o&&o.length>1&&na(Dvt,o[0],n,function(){for(i=1;i<arguments.length-2;i++)arguments[i]===void 0&&(o[i]=void 0)}),o&&f)for(o.groups=a=qU(null),i=0;i<f.length;i++)a[(l=f[i])[0]]=o[l[1]];return o});var nk=_W;Eh({target:"RegExp",proto:!0,forced:/./.exec!==nk},{exec:nk});var Fwe=function(){function e(){this.type="list-item",this.tag="button"}return e.prototype.getListNode=function(t){var n=this.type;return Re.getSelectedNodeByType(t,n)},e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){var n=this.getListNode(t);if(n==null)return!1;var r=n.ordered;return(r!==void 0&&r)===this.ordered},e.prototype.isDisabled=function(t){return t.selection==null||!!Re.getSelectedElems(t).some(function(n){if(ue.isVoid(t,n)&&ue.isBlock(t,n))return!0;var r=n.type;return!!["pre","code","table"].includes(r)||void 0})},e.prototype.exec=function(t,n){this.isActive(t)?et.setNodes(t,{type:"paragraph",ordered:void 0,level:void 0}):et.setNodes(t,{type:"list-item",ordered:this.ordered,indent:void 0})},e}(),Nvt=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.ordered=!1,n.title=jt("listModule.unOrderedList"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M384 64h640v128H384V64z m0 384h640v128H384v-128z m0 384h640v128H384v-128zM0 128a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m0 384a128 128 0 1 1 256 0 128 128 0 0 1-256 0z"></path></svg>',n}return Dwe(t,e),t}(Fwe),Fvt=function(e){function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.ordered=!0,n.title=jt("listModule.orderedList"),n.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M384 832h640v128H384z m0-384h640v128H384z m0-384h640v128H384zM192 0v256H128V64H64V0zM128 526.016v50.016h128v64H64v-146.016l128-60V384H64v-64h192v146.016zM256 704v320H64v-64h128v-64H64v-64h128v-64H64v-64z"></path></svg>',n}return Dwe(t,e),t}(Fwe),Rvt={key:"bulletedList",factory:function(){return new Nvt}},Ivt={key:"numberedList",factory:function(){return new Fvt}},Rwe=[],Bvt={type:"list-item",elemToHtml:function(e,t){var n="",r="",o=e.ordered,i=o!==void 0&&o?"ol":"ul",a=function(u){var c=yW.get(u);if(c==null)return 0;var d=u,f=d.type,p=d.ordered,m=p!==void 0&&p,v=d.level,g=v===void 0?0:v,b=Re.findPath(c,u);if(b[0]===0)return g+1;var y=qe.previous(b),w=ue.node(c,y);if(!w)return 0;var x=b5(w,1)[0];if(Re.getNodeType(x)!==f)return g+1;var _=x,E=_.ordered,C=E!==void 0&&E,T=_.level,k=T===void 0?0:T;return k<g?g-k:k>g?0:k===g?C===m?0:1:0}(e);if(a>0)for(var l=0;l<a;l++)n+="<"+i+">",Rwe.push(i);var s=function(u){var c=yW.get(u);if(c==null)return 0;var d=u,f=d.type,p=d.ordered,m=p!==void 0&&p,v=d.level,g=v===void 0?0:v,b=Re.findPath(c,u);if(b[0]===c.children.length-1)return g+1;var y=qe.next(b),w=ue.node(c,y);if(!w)return 0;var x=b5(w,1)[0];if(Re.getNodeType(x)!==f)return g+1;var _=x,E=_.ordered,C=E!==void 0&&E,T=_.level,k=T===void 0?0:T;return k<g?g-k:k>g?0:k===g?C===m?0:1:0}(e);if(s>0)for(l=0;l<s;l++)r+="</"+Rwe.pop()+">";return{html:"<li>"+t+"</li>",prefix:n,suffix:r}}},Pvt=_a("species"),Lvt=fW.filter,jvt=IU>=51||!Ro(function(){var e=[];return(e.constructor={})[Pvt]=function(){return{foo:1}},e.filter(Boolean).foo!==1});Eh({target:"Array",proto:!0,forced:!jvt},{filter:function(e){return Lvt(this,e,arguments.length>1?arguments[1]:void 0)}});var kW=Function.prototype,Iwe=kW.apply,Vvt=kW.bind,Bwe=kW.call,zvt=typeof Reflect=="object"&&Reflect.apply||(Vvt?Bwe.bind(Iwe):function(){return Bwe.apply(Iwe,arguments)}),Pwe=(_a("species"),RegExp.prototype),Hvt=ewe.charAt,$vt=function(e,t,n){return t+(n?Hvt(e,t).length:1)},Uvt=Math.floor,DW=pr("".charAt),Wvt=pr("".replace),OW=pr("".slice),Gvt=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,qvt=/\$([$&'`]|\d{1,2})/g,Kvt=function(e,t,n,r,o,i){var a=n+e.length,l=r.length,s=qvt;return o!==void 0&&(o=i5(o),s=Gvt),Wvt(i,s,function(u,c){var d;switch(DW(c,0)){case"$":return"$";case"&":return e;case"`":return OW(t,0,n);case"'":return OW(t,a);case"<":d=o[OW(c,1,-1)];break;default:var f=+c;if(f===0)return u;if(f>l){var p=Uvt(f/10);return p===0?u:p<=l?r[p-1]===void 0?DW(c,1):r[p-1]+DW(c,1):u}d=r[f-1]}return d===void 0?"":d})},Yvt=Nn.TypeError,Xvt=function(e,t){var n=e.exec;if(Uo(n)){var r=na(n,e,t);return r!==null&&ql(r),r}if(vf(e)==="RegExp")return na(nk,e,t);throw Yvt("RegExp#exec called on incompatible receiver")},TW=_a("replace"),Qvt=Math.max,Jvt=Math.min,Zvt=pr([].concat),MW=pr([].push),Lwe=pr("".indexOf),jwe=pr("".slice),emt="a".replace(/./,"$0")==="$0",Vwe=!!/./[TW]&&/./[TW]("a","$0")==="";(function(e,t,n){var r=_a(e),o=!Ro(function(){var s={};return s[r]=function(){return 7},""[e](s)!=7}),i=o&&!Ro(function(){var s=!1,u=/a/;return u.exec=function(){return s=!0,null},u[r](""),!s});if(!o||!i||n){var a=pr(/./[r]),l=function(s,u,c){var d=Vwe?"$":"$0";return[function(f,p){var m=BS(this),v=f==null?void 0:u5(f,TW);return v?na(v,f,m,p):na(u,gf(m),f,p)},function(f,p){var m=ql(this),v=gf(f);if(typeof p=="string"&&Lwe(p,d)===-1&&Lwe(p,"$<")===-1){var g=c(u,m,v,p);if(g.done)return g.value}var b=Uo(p);b||(p=gf(p));var y=m.global;if(y){var w=m.unicode;m.lastIndex=0}for(var x=[];;){var _=Xvt(m,v);if(_===null||(MW(x,_),!y))break;gf(_[0])===""&&(m.lastIndex=$vt(v,kAe(m.lastIndex),w))}for(var E,C="",T=0,k=0;k<x.length;k++){for(var I=gf((_=x[k])[0]),O=Qvt(Jvt(c5(_.index),v.length),0),F=[],N=1;N<_.length;N++)MW(F,(E=_[N])===void 0?E:String(E));var B=_.groups;if(b){var P=Zvt([I],F,O,v);B!==void 0&&MW(P,B);var V=gf(zvt(p,void 0,P))}else V=Kvt(I,v,O,F,B,p);O>=T&&(C+=jwe(v,T,O)+V,T=O+I.length)}return C+jwe(v,T)}]}(0,""[e],function(s,u,c,d,f){var p=pr(s),m=u.exec;return m===nk||m===Pwe.exec?o&&!f?{done:!0,value:a(u,c,d)}:{done:!0,value:p(c,u,d)}:{done:!1}});mf(String.prototype,e,l[0]),mf(Pwe,r,l[1])}})("replace",0,!!Ro(function(){var e=/./;return e.exec=function(){var t=[];return t.groups={a:"7"},t},"".replace(e,"$<a>")!=="7"})||!emt||Vwe);var tmt=Nn.TypeError,zwe=function(e,t,n,r,o,i,a,l){for(var s,u,c=o,d=0,f=!!a&&uW(a,l);d<r;){if(d in n){if(s=f?f(n[d],d,t):n[d],i>0&&cW(s))u=Ay(s),c=zwe(e,t,s,u,c,i-1)-1;else{if(c>=9007199254740991)throw tmt("Exceed the acceptable array length");e[c]=s}c++}d++}return c},nmt=zwe;function NW(e){return e.length?e[0].tagName.toLowerCase():""}Eh({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:void 0,t=i5(this),n=Ay(t),r=mwe(t,0);return r.length=nmt(r,t,t,n,0,e===void 0?1:c5(e)),r}}),d5("flat"),Eh({global:!0},{globalThis:Nn}),au&&(Pe.fn.append=au),iu&&(Pe.fn.attr=iu),w2&&(Pe.fn.parent=w2);var rmt={renderElems:[yvt],editorPlugin:function(e){var t=e.deleteBackward,n=e.handleTab,r=e.normalizeNode,o=e;return o.deleteBackward=function(i){var a=o.selection;if(a!=null)if(ct.isExpanded(a))t(i);else{var l=Re.getSelectedNodeByType(o,"list-item");if(l!=null)if(a.focus.offset!==0)t(i);else{var s=l.level,u=s===void 0?0:s;u>0?et.setNodes(o,{level:u-1}):et.setNodes(o,{type:"paragraph",ordered:void 0,level:void 0})}else t(i)}else t(i)},o.handleTab=function(){var i,a,l,s,u=o.selection;if(u!=null){if(ct.isCollapsed(u)){var c=Re.getSelectedNodeByType(o,"list-item");if(c==null)return void n();if(u.focus.offset===0){var d=c.level,f=d===void 0?0:d;return void et.setNodes(o,{level:f+1})}}if(ct.isExpanded(u)){var p=0,m=!1;try{for(var v=Owe(Twe(o)),g=v.next();!g.done;g=v.next()){var b=b5(g.value,1)[0];Re.getNodeType(b)==="list-item"?p++:m=!0}}catch(C){i={error:C}}finally{try{g&&!g.done&&(a=v.return)&&a.call(v)}finally{if(i)throw i.error}}if(m||p<=1)return void n();try{for(var y=Owe(Twe(o)),w=y.next();!w.done;w=y.next()){var x=b5(w.value,2),_=(b=x[0],x[1]),E=b.level;f=E===void 0?0:E,et.setNodes(o,{level:f+1},{at:_})}}catch(C){l={error:C}}finally{try{w&&!w.done&&(s=y.return)&&s.call(y)}finally{if(l)throw l.error}}}else n()}else n()},o.normalizeNode=function(i){var a=b5(i,2),l=a[0],s=a[1],u=Re.getNodeType(l);return u!=="bulleted-list"&&u!=="numbered-list"||et.unwrapNodes(o,{at:s}),r([l,s])},o},menus:[Rvt,Ivt],elemsToHtml:[Bvt],parseElemsHtml:[{selector:"ul:not([data-w-e-type]),ol:not([data-w-e-type])",parseElemHtml:function(e,t,n){return t.flat(1/0)}},{selector:"li:not([data-w-e-type])",parseElemHtml:function(e,t,n){var r=Pe(e);(t=t.filter(function(a){return!!Qt.isText(a)||!!n.isInline(a)})).length===0&&(t=[{text:r.text().replace(/\s+/gm," ")}]);var o=function(a){return NW(a.parent())==="ol"}(r),i=function(a){for(var l=0,s=a.parent(),u=NW(s);u==="ul"||u==="ol";)u=NW(s=s.parent()),l++;return l-1}(r);return{type:"list-item",ordered:o,level:i,children:t}}}]},Hwe=T1(function(e,t){var n="__lodash_hash_undefined__",r=9007199254740991,o="[object Arguments]",i="[object Array]",a="[object Boolean]",l="[object Date]",s="[object Error]",u="[object Function]",c="[object Map]",d="[object Number]",f="[object Object]",p="[object Promise]",m="[object RegExp]",v="[object Set]",g="[object String]",b="[object WeakMap]",y="[object ArrayBuffer]",w="[object DataView]",x=/^\[object .+?Constructor\]$/,_=/^(?:0|[1-9]\d*)$/,E={};E["[object Float32Array]"]=E["[object Float64Array]"]=E["[object Int8Array]"]=E["[object Int16Array]"]=E["[object Int32Array]"]=E["[object Uint8Array]"]=E["[object Uint8ClampedArray]"]=E["[object Uint16Array]"]=E["[object Uint32Array]"]=!0,E[o]=E[i]=E[y]=E[a]=E[w]=E[l]=E[s]=E[u]=E[c]=E[d]=E[f]=E[m]=E[v]=E[g]=E[b]=!1;var C=typeof eo=="object"&&eo&&eo.Object===Object&&eo,T=typeof self=="object"&&self&&self.Object===Object&&self,k=C||T||Function("return this")(),I=t&&!t.nodeType&&t,O=I&&e&&!e.nodeType&&e,F=O&&O.exports===I,N=F&&C.process,B=function(){try{return N&&N.binding&&N.binding("util")}catch{}}(),P=B&&B.isTypedArray;function V(He,lt){for(var Et=-1,Kt=He==null?0:He.length;++Et<Kt;)if(lt(He[Et],Et,He))return!0;return!1}function L(He){var lt=-1,Et=Array(He.size);return He.forEach(function(Kt,gr){Et[++lt]=[gr,Kt]}),Et}function H(He){var lt=-1,Et=Array(He.size);return He.forEach(function(Kt){Et[++lt]=Kt}),Et}var U=Array.prototype,G=Function.prototype,z=Object.prototype,$=k["__core-js_shared__"],W=G.toString,K=z.hasOwnProperty,X=function(){var He=/[^.]+$/.exec($&&$.keys&&$.keys.IE_PROTO||"");return He?"Symbol(src)_1."+He:""}(),te=z.toString,ne=RegExp("^"+W.call(K).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),se=F?k.Buffer:void 0,le=k.Symbol,J=k.Uint8Array,Z=z.propertyIsEnumerable,ye=U.splice,be=le?le.toStringTag:void 0,ve=Object.getOwnPropertySymbols,Ae=se?se.isBuffer:void 0,Ce=function(He,lt){return function(Et){return He(lt(Et))}}(Object.keys,Object),_e=rn(k,"DataView"),ke=rn(k,"Map"),Be=rn(k,"Promise"),$e=rn(k,"Set"),rt=rn(k,"WeakMap"),ge=rn(Object,"create"),We=An(_e),st=An(ke),At=An(Be),Ve=An($e),it=An(rt),dt=le?le.prototype:void 0,ot=dt?dt.valueOf:void 0;function je(He){var lt=-1,Et=He==null?0:He.length;for(this.clear();++lt<Et;){var Kt=He[lt];this.set(Kt[0],Kt[1])}}function we(He){var lt=-1,Et=He==null?0:He.length;for(this.clear();++lt<Et;){var Kt=He[lt];this.set(Kt[0],Kt[1])}}function ze(He){var lt=-1,Et=He==null?0:He.length;for(this.clear();++lt<Et;){var Kt=He[lt];this.set(Kt[0],Kt[1])}}function me(He){var lt=-1,Et=He==null?0:He.length;for(this.__data__=new ze;++lt<Et;)this.add(He[lt])}function Me(He){var lt=this.__data__=new we(He);this.size=lt.size}function Ie(He,lt){for(var Et=He.length;Et--;)if(_n(He[Et][0],lt))return Et;return-1}function ht(He){return He==null?He===void 0?"[object Undefined]":"[object Null]":be&&be in Object(He)?function(lt){var Et=K.call(lt,be),Kt=lt[be];try{lt[be]=void 0;var gr=!0}catch{}var Bn=te.call(lt);return gr&&(Et?lt[be]=Kt:delete lt[be]),Bn}(He):function(lt){return te.call(lt)}(He)}function gt(He){return Go(He)&&ht(He)==o}function vt(He,lt,Et,Kt,gr){return He===lt||(He==null||lt==null||!Go(He)&&!Go(lt)?He!=He&<!=lt:function(Bn,Ne,Tt,Oe,nt,ut){var xt=Qr(Bn),En=Qr(Ne),ln=xt?i:tt(Bn),Ct=En?i:tt(Ne),Fn=(ln=ln==o?f:ln)==f,Mo=(Ct=Ct==o?f:Ct)==f,jr=ln==Ct;if(jr&&Ar(Bn)){if(!Ar(Ne))return!1;xt=!0,Fn=!1}if(jr&&!Fn)return ut||(ut=new Me),xt||za(Bn)?qt(Bn,Ne,Tt,Oe,nt,ut):function(Ee,Ze,Vt,Cn,on,Ln,Mr){switch(Vt){case w:if(Ee.byteLength!=Ze.byteLength||Ee.byteOffset!=Ze.byteOffset)return!1;Ee=Ee.buffer,Ze=Ze.buffer;case y:return!(Ee.byteLength!=Ze.byteLength||!Ln(new J(Ee),new J(Ze)));case a:case l:case d:return _n(+Ee,+Ze);case s:return Ee.name==Ze.name&&Ee.message==Ze.message;case m:case g:return Ee==Ze+"";case c:var gn=L;case v:var Ef=1&Cn;if(gn||(gn=H),Ee.size!=Ze.size&&!Ef)return!1;var gd=Mr.get(Ee);if(gd)return gd==Ze;Cn|=2,Mr.set(Ee,Ze);var Yl=qt(gn(Ee),gn(Ze),Cn,on,Ln,Mr);return Mr.delete(Ee),Yl;case"[object Symbol]":if(ot)return ot.call(Ee)==ot.call(Ze)}return!1}(Bn,Ne,ln,Tt,Oe,nt,ut);if(!(1&Tt)){var cr=Fn&&K.call(Bn,"__wrapped__"),Ha=Mo&&K.call(Ne,"__wrapped__");if(cr||Ha){var pe=cr?Bn.value():Bn,xe=Ha?Ne.value():Ne;return ut||(ut=new Me),nt(pe,xe,Tt,Oe,ut)}}return!!jr&&(ut||(ut=new Me),function(Ee,Ze,Vt,Cn,on,Ln){var Mr=1&Vt,gn=mn(Ee),Ef=gn.length;if(Ef!=mn(Ze).length&&!Mr)return!1;for(var gd=Ef;gd--;){var Yl=gn[gd];if(!(Mr?Yl in Ze:K.call(Ze,Yl)))return!1}var Ls=Ln.get(Ee);if(Ls&&Ln.get(Ze))return Ls==Ze;var om=!0;Ln.set(Ee,Ze),Ln.set(Ze,Ee);for(var nb=Mr;++gd<Ef;){var yd=Ee[Yl=gn[gd]],t0=Ze[Yl];if(Cn)var YA=Mr?Cn(t0,yd,Yl,Ze,Ee,Ln):Cn(yd,t0,Yl,Ee,Ze,Ln);if(!(YA===void 0?yd===t0||on(yd,t0,Vt,Cn,Ln):YA)){om=!1;break}nb||(nb=Yl=="constructor")}if(om&&!nb){var n0=Ee.constructor,im=Ze.constructor;n0==im||!("constructor"in Ee)||!("constructor"in Ze)||typeof n0=="function"&&n0 instanceof n0&&typeof im=="function"&&im instanceof im||(om=!1)}return Ln.delete(Ee),Ln.delete(Ze),om}(Bn,Ne,Tt,Oe,nt,ut))}(He,lt,Et,Kt,vt,gr))}function qt(He,lt,Et,Kt,gr,Bn){var Ne=1&Et,Tt=He.length,Oe=lt.length;if(Tt!=Oe&&!(Ne&&Oe>Tt))return!1;var nt=Bn.get(He);if(nt&&Bn.get(lt))return nt==lt;var ut=-1,xt=!0,En=2&Et?new me:void 0;for(Bn.set(He,lt),Bn.set(lt,He);++ut<Tt;){var ln=He[ut],Ct=lt[ut];if(Kt)var Fn=Ne?Kt(Ct,ln,ut,lt,He,Bn):Kt(ln,Ct,ut,He,lt,Bn);if(Fn!==void 0){if(Fn)continue;xt=!1;break}if(En){if(!V(lt,function(Mo,jr){if(cr=jr,!En.has(cr)&&(ln===Mo||gr(ln,Mo,Et,Kt,Bn)))return En.push(jr);var cr})){xt=!1;break}}else if(ln!==Ct&&!gr(ln,Ct,Et,Kt,Bn)){xt=!1;break}}return Bn.delete(He),Bn.delete(lt),xt}function mn(He){return function(lt,Et,Kt){var gr=Et(lt);return Qr(lt)?gr:function(Bn,Ne){for(var Tt=-1,Oe=Ne.length,nt=Bn.length;++Tt<Oe;)Bn[nt+Tt]=Ne[Tt];return Bn}(gr,Kt(lt))}(He,sa,zn)}function Zt(He,lt){var Et,Kt,gr=He.__data__;return((Kt=typeof(Et=lt))=="string"||Kt=="number"||Kt=="symbol"||Kt=="boolean"?Et!=="__proto__":Et===null)?gr[typeof lt=="string"?"string":"hash"]:gr.map}function rn(He,lt){var Et=function(Kt,gr){return Kt==null?void 0:Kt[gr]}(He,lt);return function(Kt){return!(!pl(Kt)||function(gr){return!!X&&X in gr}(Kt))&&(Jr(Kt)?ne:x).test(An(Kt))}(Et)?Et:void 0}je.prototype.clear=function(){this.__data__=ge?ge(null):{},this.size=0},je.prototype.delete=function(He){var lt=this.has(He)&&delete this.__data__[He];return this.size-=lt?1:0,lt},je.prototype.get=function(He){var lt=this.__data__;if(ge){var Et=lt[He];return Et===n?void 0:Et}return K.call(lt,He)?lt[He]:void 0},je.prototype.has=function(He){var lt=this.__data__;return ge?lt[He]!==void 0:K.call(lt,He)},je.prototype.set=function(He,lt){var Et=this.__data__;return this.size+=this.has(He)?0:1,Et[He]=ge&<===void 0?n:lt,this},we.prototype.clear=function(){this.__data__=[],this.size=0},we.prototype.delete=function(He){var lt=this.__data__,Et=Ie(lt,He);return!(Et<0||(Et==lt.length-1?lt.pop():ye.call(lt,Et,1),--this.size,0))},we.prototype.get=function(He){var lt=this.__data__,Et=Ie(lt,He);return Et<0?void 0:lt[Et][1]},we.prototype.has=function(He){return Ie(this.__data__,He)>-1},we.prototype.set=function(He,lt){var Et=this.__data__,Kt=Ie(Et,He);return Kt<0?(++this.size,Et.push([He,lt])):Et[Kt][1]=lt,this},ze.prototype.clear=function(){this.size=0,this.__data__={hash:new je,map:new(ke||we),string:new je}},ze.prototype.delete=function(He){var lt=Zt(this,He).delete(He);return this.size-=lt?1:0,lt},ze.prototype.get=function(He){return Zt(this,He).get(He)},ze.prototype.has=function(He){return Zt(this,He).has(He)},ze.prototype.set=function(He,lt){var Et=Zt(this,He),Kt=Et.size;return Et.set(He,lt),this.size+=Et.size==Kt?0:1,this},me.prototype.add=me.prototype.push=function(He){return this.__data__.set(He,n),this},me.prototype.has=function(He){return this.__data__.has(He)},Me.prototype.clear=function(){this.__data__=new we,this.size=0},Me.prototype.delete=function(He){var lt=this.__data__,Et=lt.delete(He);return this.size=lt.size,Et},Me.prototype.get=function(He){return this.__data__.get(He)},Me.prototype.has=function(He){return this.__data__.has(He)},Me.prototype.set=function(He,lt){var Et=this.__data__;if(Et instanceof we){var Kt=Et.__data__;if(!ke||Kt.length<199)return Kt.push([He,lt]),this.size=++Et.size,this;Et=this.__data__=new ze(Kt)}return Et.set(He,lt),this.size=Et.size,this};var zn=ve?function(He){return He==null?[]:(He=Object(He),function(lt,Et){for(var Kt=-1,gr=lt==null?0:lt.length,Bn=0,Ne=[];++Kt<gr;){var Tt=lt[Kt];Et(Tt)&&(Ne[Bn++]=Tt)}return Ne}(ve(He),function(lt){return Z.call(He,lt)}))}:function(){return[]},tt=ht;function kt(He,lt){return!!(lt=lt??r)&&(typeof He=="number"||_.test(He))&&He>-1&&He%1==0&&He<lt}function An(He){if(He!=null){try{return W.call(He)}catch{}try{return He+""}catch{}}return""}function _n(He,lt){return He===lt||He!=He&<!=lt}(_e&&tt(new _e(new ArrayBuffer(1)))!=w||ke&&tt(new ke)!=c||Be&&tt(Be.resolve())!=p||$e&&tt(new $e)!=v||rt&&tt(new rt)!=b)&&(tt=function(He){var lt=ht(He),Et=lt==f?He.constructor:void 0,Kt=Et?An(Et):"";if(Kt)switch(Kt){case We:return w;case st:return c;case At:return p;case Ve:return v;case it:return b}return lt});var po=gt(function(){return arguments}())?gt:function(He){return Go(He)&&K.call(He,"callee")&&!Z.call(He,"callee")},Qr=Array.isArray,Ar=Ae||function(){return!1};function Jr(He){if(!pl(He))return!1;var lt=ht(He);return lt==u||lt=="[object GeneratorFunction]"||lt=="[object AsyncFunction]"||lt=="[object Proxy]"}function Ao(He){return typeof He=="number"&&He>-1&&He%1==0&&He<=r}function pl(He){var lt=typeof He;return He!=null&&(lt=="object"||lt=="function")}function Go(He){return He!=null&&typeof He=="object"}var za=P?function(He){return function(lt){return He(lt)}}(P):function(He){return Go(He)&&Ao(He.length)&&!!E[ht(He)]};function sa(He){return(lt=He)!=null&&Ao(lt.length)&&!Jr(lt)?function(Et){var Kt=Qr(Et),gr=!Kt&&po(Et),Bn=!Kt&&!gr&&Ar(Et),Ne=!Kt&&!gr&&!Bn&&za(Et),Tt=Kt||gr||Bn||Ne,Oe=Tt?function(xt,En){for(var ln=-1,Ct=Array(xt);++ln<xt;)Ct[ln]=En(ln);return Ct}(Et.length,String):[],nt=Oe.length;for(var ut in Et)!K.call(Et,ut)||Tt&&(ut=="length"||Bn&&(ut=="offset"||ut=="parent")||Ne&&(ut=="buffer"||ut=="byteLength"||ut=="byteOffset")||kt(ut,nt))||Oe.push(ut);return Oe}(He):function(Et){if(gr=(Kt=Et)&&Kt.constructor,Kt!==(typeof gr=="function"&&gr.prototype||z))return Ce(Et);var Kt,gr,Bn=[];for(var Ne in Object(Et))K.call(Et,Ne)&&Ne!="constructor"&&Bn.push(Ne);return Bn}(He);var lt}e.exports=function(He,lt){return vt(He,lt)}});Ul("en",{tableModule:{deleteCol:"Delete column",deleteRow:"Delete row",deleteTable:"Delete table",widthAuto:"Width auto",insertCol:"Insert column",insertRow:"Insert row",insertTable:"Insert table",header:"Header"}}),Ul("zh-CN",{tableModule:{deleteCol:"\u5220\u9664\u5217",deleteRow:"\u5220\u9664\u884C",deleteTable:"\u5220\u9664\u8868\u683C",widthAuto:"\u5BBD\u5EA6\u81EA\u9002\u5E94",insertCol:"\u63D2\u5165\u5217",insertRow:"\u63D2\u5165\u884C",insertTable:"\u63D2\u5165\u8868\u683C",header:"\u8868\u5934"}});var $we=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Uwe(e){var t={exports:{}};return e(t,t.exports),t.exports}var Sh,rk,ok=function(e){return e&&e.Math==Math&&e},sr=ok(typeof globalThis=="object"&&globalThis)||ok(typeof window=="object"&&window)||ok(typeof self=="object"&&self)||ok(typeof $we=="object"&&$we)||function(){return this}()||Function("return this")(),_i=function(e){try{return!!e()}catch{return!0}},kh=!_i(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),A5=Function.prototype.call,Li=A5.bind?A5.bind(A5):function(){return A5.apply(A5,arguments)},Wwe={}.propertyIsEnumerable,Gwe=Object.getOwnPropertyDescriptor,omt={f:Gwe&&!Wwe.call({1:2},1)?function(e){var t=Gwe(this,e);return!!t&&t.enumerable}:Wwe},FW=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},qwe=Function.prototype,RW=qwe.bind,IW=qwe.call,imt=RW&&RW.bind(IW),mr=RW?function(e){return e&&imt(IW,e)}:function(e){return e&&function(){return IW.apply(e,arguments)}},amt=mr({}.toString),lmt=mr("".slice),Dh=function(e){return lmt(amt(e),8,-1)},BW=sr.Object,smt=mr("".split),Kwe=_i(function(){return!BW("z").propertyIsEnumerable(0)})?function(e){return Dh(e)=="String"?smt(e,""):BW(e)}:BW,umt=sr.TypeError,Oh=function(e){if(e==null)throw umt("Can't call method on "+e);return e},w5=function(e){return Kwe(Oh(e))},ja=function(e){return typeof e=="function"},rc=function(e){return typeof e=="object"?e!==null:ja(e)},x5=function(e,t){return arguments.length<2?function(n){return ja(n)?n:void 0}(sr[e]):sr[e]&&sr[e][t]},Ywe=mr({}.isPrototypeOf),PW=x5("navigator","userAgent")||"",Xwe=sr.process,Qwe=sr.Deno,Jwe=Xwe&&Xwe.versions||Qwe&&Qwe.version,Zwe=Jwe&&Jwe.v8;Zwe&&(rk=(Sh=Zwe.split("."))[0]>0&&Sh[0]<4?1:+(Sh[0]+Sh[1])),!rk&&PW&&(!(Sh=PW.match(/Edge\/(\d+)/))||Sh[1]>=74)&&(Sh=PW.match(/Chrome\/(\d+)/))&&(rk=+Sh[1]);var LW=rk,jW=!!Object.getOwnPropertySymbols&&!_i(function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&LW&&LW<41}),VW=jW&&!Symbol.sham&&typeof Symbol.iterator=="symbol",cmt=sr.Object,zW=VW?function(e){return typeof e=="symbol"}:function(e){var t=x5("Symbol");return ja(t)&&Ywe(t.prototype,cmt(e))},dmt=sr.String,e7e=function(e){try{return dmt(e)}catch{return"Object"}},fmt=sr.TypeError,t7e=function(e){if(ja(e))return e;throw fmt(e7e(e)+" is not a function")},HW=function(e,t){var n=e[t];return n==null?void 0:t7e(n)},pmt=sr.TypeError,hmt=Object.defineProperty,$W=function(e,t){try{hmt(sr,e,{value:t,configurable:!0,writable:!0})}catch{sr[e]=t}return t},Th=sr["__core-js_shared__"]||$W("__core-js_shared__",{}),UW=Uwe(function(e){(e.exports=function(t,n){return Th[t]||(Th[t]=n!==void 0?n:{})})("versions",[]).push({version:"3.19.3",mode:"global",copyright:"\xA9 2021 Denis Pushkarev (zloirock.ru)"})}),vmt=sr.Object,WW=function(e){return vmt(Oh(e))},mmt=mr({}.hasOwnProperty),gu=Object.hasOwn||function(e,t){return mmt(WW(e),t)},gmt=0,ymt=Math.random(),bmt=mr(1 .toString),n7e=function(e){return"Symbol("+(e===void 0?"":e)+")_"+bmt(++gmt+ymt,36)},_5=UW("wks"),Pv=sr.Symbol,r7e=Pv&&Pv.for,Amt=VW?Pv:Pv&&Pv.withoutSetter||n7e,yu=function(e){if(!gu(_5,e)||!jW&&typeof _5[e]!="string"){var t="Symbol."+e;jW&&gu(Pv,e)?_5[e]=Pv[e]:_5[e]=VW&&r7e?r7e(t):Amt(t)}return _5[e]},wmt=sr.TypeError,xmt=yu("toPrimitive"),GW=function(e){var t=function(n){if(!rc(n)||zW(n))return n;var r,o=HW(n,xmt);if(o){if(r=Li(o,n,"string"),!rc(r)||zW(r))return r;throw wmt("Can't convert object to primitive value")}return function(i){var a,l;if(ja(a=i.toString)&&!rc(l=Li(a,i))||ja(a=i.valueOf)&&!rc(l=Li(a,i)))return l;throw pmt("Can't convert object to primitive value")}(n)}(e);return zW(t)?t:t+""},qW=sr.document,_mt=rc(qW)&&rc(qW.createElement),KW=function(e){return _mt?qW.createElement(e):{}},o7e=!kh&&!_i(function(){return Object.defineProperty(KW("div"),"a",{get:function(){return 7}}).a!=7}),i7e=Object.getOwnPropertyDescriptor,a7e={f:kh?i7e:function(e,t){if(e=w5(e),t=GW(t),o7e)try{return i7e(e,t)}catch{}if(gu(e,t))return FW(!Li(omt.f,e,t),e[t])}},Emt=sr.String,Cmt=sr.TypeError,bu=function(e){if(rc(e))return e;throw Cmt(Emt(e)+" is not an object")},Smt=sr.TypeError,l7e=Object.defineProperty,E5={f:kh?l7e:function(e,t,n){if(bu(e),t=GW(t),bu(n),o7e)try{return l7e(e,t,n)}catch{}if("get"in n||"set"in n)throw Smt("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},_y=kh?function(e,t,n){return E5.f(e,t,FW(1,n))}:function(e,t,n){return e[t]=n,e},kmt=mr(Function.toString);ja(Th.inspectSource)||(Th.inspectSource=function(e){return kmt(e)});var ik,C5,ak,YW=Th.inspectSource,s7e=sr.WeakMap,Dmt=ja(s7e)&&/native code/.test(YW(s7e)),u7e=UW("keys"),c7e=function(e){return u7e[e]||(u7e[e]=n7e(e))},XW={},QW=sr.TypeError,Omt=sr.WeakMap;if(Dmt||Th.state){var Lv=Th.state||(Th.state=new Omt),Tmt=mr(Lv.get),d7e=mr(Lv.has),Mmt=mr(Lv.set);ik=function(e,t){if(d7e(Lv,e))throw new QW("Object already initialized");return t.facade=e,Mmt(Lv,e,t),t},C5=function(e){return Tmt(Lv,e)||{}},ak=function(e){return d7e(Lv,e)}}else{var Ey=c7e("state");XW[Ey]=!0,ik=function(e,t){if(gu(e,Ey))throw new QW("Object already initialized");return t.facade=e,_y(e,Ey,t),t},C5=function(e){return gu(e,Ey)?e[Ey]:{}},ak=function(e){return gu(e,Ey)}}var JW={set:ik,get:C5,has:ak,enforce:function(e){return ak(e)?C5(e):ik(e,{})},getterFor:function(e){return function(t){var n;if(!rc(t)||(n=C5(t)).type!==e)throw QW("Incompatible receiver, "+e+" required");return n}}},f7e=Function.prototype,Nmt=kh&&Object.getOwnPropertyDescriptor,ZW=gu(f7e,"name"),eG={EXISTS:ZW,PROPER:ZW&&(function(){}).name==="something",CONFIGURABLE:ZW&&(!kh||kh&&Nmt(f7e,"name").configurable)},S5=Uwe(function(e){var t=eG.CONFIGURABLE,n=JW.get,r=JW.enforce,o=String(String).split("String");(e.exports=function(i,a,l,s){var u,c=!!s&&!!s.unsafe,d=!!s&&!!s.enumerable,f=!!s&&!!s.noTargetGet,p=s&&s.name!==void 0?s.name:a;ja(l)&&(String(p).slice(0,7)==="Symbol("&&(p="["+String(p).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!gu(l,"name")||t&&l.name!==p)&&_y(l,"name",p),(u=r(l)).source||(u.source=o.join(typeof p=="string"?p:""))),i!==sr?(c?!f&&i[a]&&(d=!0):delete i[a],d?i[a]=l:_y(i,a,l)):d?i[a]=l:$W(a,l)})(Function.prototype,"toString",function(){return ja(this)&&n(this).source||YW(this)})}),Fmt=Math.ceil,Rmt=Math.floor,lk=function(e){var t=+e;return t!=t||t===0?0:(t>0?Rmt:Fmt)(t)},Imt=Math.max,Bmt=Math.min,k5=function(e,t){var n=lk(e);return n<0?Imt(n+t,0):Bmt(n,t)},Pmt=Math.min,tG=function(e){return e>0?Pmt(lk(e),9007199254740991):0},sk=function(e){return tG(e.length)},Lmt=function(e){return function(t,n,r){var o,i=w5(t),a=sk(i),l=k5(r,a);if(e&&n!=n){for(;a>l;)if((o=i[l++])!=o)return!0}else for(;a>l;l++)if((e||l in i)&&i[l]===n)return e||l||0;return!e&&-1}}(!1),p7e=mr([].push),h7e=function(e,t){var n,r=w5(e),o=0,i=[];for(n in r)!gu(XW,n)&&gu(r,n)&&p7e(i,n);for(;t.length>o;)gu(r,n=t[o++])&&(~Lmt(i,n)||p7e(i,n));return i},uk=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],jmt=uk.concat("length","prototype"),Vmt={f:Object.getOwnPropertyNames||function(e){return h7e(e,jmt)}},zmt={f:Object.getOwnPropertySymbols},Hmt=mr([].concat),$mt=x5("Reflect","ownKeys")||function(e){var t=Vmt.f(bu(e)),n=zmt.f;return n?Hmt(t,n(e)):t},Umt=function(e,t){for(var n=$mt(t),r=E5.f,o=a7e.f,i=0;i<n.length;i++){var a=n[i];gu(e,a)||r(e,a,o(t,a))}},Wmt=/#|\.prototype\./,D5=function(e,t){var n=qmt[Gmt(e)];return n==Ymt||n!=Kmt&&(ja(t)?_i(t):!!t)},Gmt=D5.normalize=function(e){return String(e).replace(Wmt,".").toLowerCase()},qmt=D5.data={},Kmt=D5.NATIVE="N",Ymt=D5.POLYFILL="P",Xmt=D5,Qmt=a7e.f,Mh=function(e,t){var n,r,o,i,a,l=e.target,s=e.global,u=e.stat;if(n=s?sr:u?sr[l]||$W(l,{}):(sr[l]||{}).prototype)for(r in t){if(i=t[r],o=e.noTargetGet?(a=Qmt(n,r))&&a.value:n[r],!Xmt(s?r:l+(u?".":"#")+r,e.forced)&&o!==void 0){if(typeof i==typeof o)continue;Umt(i,o)}(e.sham||o&&o.sham)&&_y(i,"sham",!0),S5(n,r,i,e)}},v7e={};v7e[yu("toStringTag")]="z";var nG=String(v7e)==="[object z]",Jmt=yu("toStringTag"),Zmt=sr.Object,egt=Dh(function(){return arguments}())=="Arguments",rG=nG?Dh:function(e){var t,n,r;return e===void 0?"Undefined":e===null?"Null":typeof(n=function(o,i){try{return o[i]}catch{}}(t=Zmt(e),Jmt))=="string"?n:egt?Dh(t):(r=Dh(t))=="Object"&&ja(t.callee)?"Arguments":r},tgt=sr.String,Va=function(e){if(rG(e)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return tgt(e)},ngt=/"/g,rgt=mr("".replace);Mh({target:"String",proto:!0,forced:_i(function(){var e="".anchor('"');return e!==e.toLowerCase()||e.split('"').length>3})},{anchor:function(e){return t=e,n=Va(Oh(this)),r="<a",(r+=' name="'+rgt(Va(t),ngt,""")+'"')+">"+n+"</a>";var t,n,r}});var ck,m7e=function(){var e=bu(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t},oG=sr.RegExp,iG=_i(function(){var e=oG("a","y");return e.lastIndex=2,e.exec("abcd")!=null}),ogt=iG||_i(function(){return!oG("a","y").sticky}),g7e={BROKEN_CARET:iG||_i(function(){var e=oG("^r","gy");return e.lastIndex=2,e.exec("str")!=null}),MISSED_STICKY:ogt,UNSUPPORTED_Y:iG},igt=Object.keys||function(e){return h7e(e,uk)},agt=kh?Object.defineProperties:function(e,t){bu(e);for(var n,r=w5(t),o=igt(t),i=o.length,a=0;i>a;)E5.f(e,n=o[a++],r[n]);return e},lgt=x5("document","documentElement"),y7e=c7e("IE_PROTO"),aG=function(){},b7e=function(e){return"<script>"+e+"<\/script>"},A7e=function(e){e.write(b7e("")),e.close();var t=e.parentWindow.Object;return e=null,t},dk=function(){try{ck=new ActiveXObject("htmlfile")}catch{}var e,t;dk=typeof document<"u"?document.domain&&ck?A7e(ck):((t=KW("iframe")).style.display="none",lgt.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write(b7e("document.F=Object")),e.close(),e.F):A7e(ck);for(var n=uk.length;n--;)delete dk.prototype[uk[n]];return dk()};XW[y7e]=!0;var w7e,lG,x7e=Object.create||function(e,t){var n;return e!==null?(aG.prototype=bu(e),n=new aG,aG.prototype=null,n[y7e]=e):n=dk(),t===void 0?n:agt(n,t)},sgt=sr.RegExp,ugt=_i(function(){var e=sgt(".","s");return!(e.dotAll&&e.exec(`
| `)&&e.flags==="s")}),cgt=sr.RegExp,dgt=_i(function(){var e=cgt("(?<a>b)","g");return e.exec("b").groups.a!=="b"||"b".replace(e,"$<a>c")!=="bc"}),fgt=JW.get,pgt=UW("native-string-replace",String.prototype.replace),fk=RegExp.prototype.exec,sG=fk,hgt=mr("".charAt),vgt=mr("".indexOf),mgt=mr("".replace),uG=mr("".slice),cG=(lG=/b*/g,Li(fk,w7e=/a/,"a"),Li(fk,lG,"a"),w7e.lastIndex!==0||lG.lastIndex!==0),_7e=g7e.BROKEN_CARET,dG=/()??/.exec("")[1]!==void 0;(cG||dG||_7e||ugt||dgt)&&(sG=function(e){var t,n,r,o,i,a,l,s=this,u=fgt(s),c=Va(e),d=u.raw;if(d)return d.lastIndex=s.lastIndex,t=Li(sG,d,c),s.lastIndex=d.lastIndex,t;var f=u.groups,p=_7e&&s.sticky,m=Li(m7e,s),v=s.source,g=0,b=c;if(p&&(m=mgt(m,"y",""),vgt(m,"g")===-1&&(m+="g"),b=uG(c,s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&hgt(c,s.lastIndex-1)!==`
| `)&&(v="(?: "+v+")",b=" "+b,g++),n=new RegExp("^(?:"+v+")",m)),dG&&(n=new RegExp("^"+v+"$(?!\\s)",m)),cG&&(r=s.lastIndex),o=Li(fk,p?n:s,b),p?o?(o.input=uG(o.input,g),o[0]=uG(o[0],g),o.index=s.lastIndex,s.lastIndex+=o[0].length):s.lastIndex=0:cG&&o&&(s.lastIndex=s.global?o.index+o[0].length:r),dG&&o&&o.length>1&&Li(pgt,o[0],n,function(){for(i=1;i<arguments.length-2;i++)arguments[i]===void 0&&(o[i]=void 0)}),o&&f)for(o.groups=a=x7e(null),i=0;i<f.length;i++)a[(l=f[i])[0]]=o[l[1]];return o});var O5=sG;Mh({target:"RegExp",proto:!0,forced:/./.exec!==O5},{exec:O5});var pk=Array.isArray||function(e){return Dh(e)=="Array"},E7e=function(){},ggt=[],C7e=x5("Reflect","construct"),fG=/^\s*(?:class|function)\b/,ygt=mr(fG.exec),bgt=!fG.exec(E7e),T5=function(e){if(!ja(e))return!1;try{return C7e(E7e,ggt,e),!0}catch{return!1}},pG=!C7e||_i(function(){var e;return T5(T5.call)||!T5(Object)||!T5(function(){e=!0})||e})?function(e){if(!ja(e))return!1;switch(rG(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return bgt||!!ygt(fG,YW(e))}:T5,S7e=function(e,t,n){var r=GW(t);r in e?E5.f(e,r,FW(0,n)):e[r]=n},Agt=yu("species"),hG=function(e){return LW>=51||!_i(function(){var t=[];return(t.constructor={})[Agt]=function(){return{foo:1}},t[e](Boolean).foo!==1})},wgt=mr([].slice),xgt=hG("slice"),_gt=yu("species"),vG=sr.Array,Egt=Math.max;function oc(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(t===void 0||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(l){o={error:l}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function k7e(e){var t=e.selection;if(t==null)return!1;var n=oc(ue.nodes(e,{match:function(i){return Re.checkNodeType(i,"table-cell")}}),1)[0];if(n){var r=oc(n,2)[1],o=ue.start(e,r);if(nr.equals(t.anchor,o))return!0}return!1}function D7e(e,t){var n,r,o=ue.nodes(e,{at:t,match:function(s){return Re.getNodeType(s)==="table"}}),i=!1;try{for(var a=function(s){var u=typeof Symbol=="function"&&Symbol.iterator,c=u&&s[u],d=0;if(c)return c.call(s);if(s&&typeof s.length=="number")return{next:function(){return s&&d>=s.length&&(s=void 0),{value:s&&s[d++],done:!s}}};throw new TypeError(u?"Object is not iterable.":"Symbol.iterator is not defined.")}(o),l=a.next();!l.done;l=a.next())l.value,i=!0}catch(s){n={error:s}}finally{try{l&&!l.done&&(r=a.return)&&r.call(a)}finally{if(n)throw n.error}}return i}Mh({target:"Array",proto:!0,forced:!xgt},{slice:function(e,t){var n,r,o,i=w5(this),a=sk(i),l=k5(e,a),s=k5(t===void 0?a:t,a);if(pk(i)&&(n=i.constructor,(pG(n)&&(n===vG||pk(n.prototype))||rc(n)&&(n=n[_gt])===null)&&(n=void 0),n===vG||n===void 0))return wgt(i,l,s);for(r=new(n===void 0?vG:n)(Egt(s-l,0)),o=0;l<s;l++,o++)l in i&&S7e(r,o,i[l]);return r.length=o,r}});var O7e=mr(mr.bind),Cgt=yu("species"),T7e=sr.Array,Sgt=function(e,t){return new(function(n){var r;return pk(n)&&(r=n.constructor,(pG(r)&&(r===T7e||pk(r.prototype))||rc(r)&&(r=r[Cgt])===null)&&(r=void 0)),r===void 0?T7e:r}(e))(t===0?0:t)},M7e=mr([].push),Nh=function(e){var t=e==1,n=e==2,r=e==3,o=e==4,i=e==6,a=e==7,l=e==5||i;return function(s,u,c,d){for(var f,p,m=WW(s),v=Kwe(m),g=function(_,E){return t7e(_),E===void 0?_:O7e?O7e(_,E):function(){return _.apply(E,arguments)}}(u,c),b=sk(v),y=0,w=d||Sgt,x=t?w(s,b):n||a?w(s,0):void 0;b>y;y++)if((l||y in v)&&(p=g(f=v[y],y,m),e))if(t)x[y]=p;else if(p)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:M7e(x,f)}else switch(e){case 4:return!1;case 7:M7e(x,f)}return i?-1:r||o?o:x}},hk={forEach:Nh(0),map:Nh(1),filter:Nh(2),some:Nh(3),every:Nh(4),find:Nh(5),findIndex:Nh(6),filterReject:Nh(7)},kgt=hk.map;Mh({target:"Array",proto:!0,forced:!hG("map")},{map:function(e){return kgt(this,e,arguments.length>1?arguments[1]:void 0)}});var Dgt=nG?{}.toString:function(){return"[object "+rG(this)+"]"};function vk(e){var t=e.children||[];return t.length===0?[]:(t[0]||{}).children||[]}function N7e(e){return vk(e).every(function(t){return!!t.isHeader})}nG||S5(Object.prototype,"toString",Dgt,{unsafe:!0});var Ogt=eG.PROPER,mG=RegExp.prototype,F7e=mG.toString,Tgt=mr(m7e),Mgt=_i(function(){return F7e.call({source:"a",flags:"b"})!="/a/b"}),Ngt=Ogt&&F7e.name!="toString";(Mgt||Ngt)&&S5(RegExp.prototype,"toString",function(){var e=bu(this),t=Va(e.source),n=e.flags;return"/"+t+"/"+Va(n===void 0&&Ywe(mG,e)&&!("flags"in mG)?Tgt(e):n)},{unsafe:!0});var gG=yu("unscopables"),yG=Array.prototype;yG[gG]==null&&E5.f(yG,gG,{configurable:!0,value:x7e(null)});var Fgt=hk.find,R7e=!0;"find"in[]&&Array(1).find(function(){R7e=!1}),Mh({target:"Array",proto:!0,forced:R7e},{find:function(e){return Fgt(this,e,arguments.length>1?arguments[1]:void 0)}}),yG[gG].find=!0;var bG=Function.prototype,I7e=bG.apply,Rgt=bG.bind,B7e=bG.call,P7e=typeof Reflect=="object"&&Reflect.apply||(Rgt?B7e.bind(I7e):function(){return B7e.apply(I7e,arguments)}),Igt=yu("species"),AG=RegExp.prototype,L7e=function(e,t,n,r){var o=yu(e),i=!_i(function(){var u={};return u[o]=function(){return 7},""[e](u)!=7}),a=i&&!_i(function(){var u=!1,c=/a/;return e==="split"&&((c={}).constructor={},c.constructor[Igt]=function(){return c},c.flags="",c[o]=/./[o]),c.exec=function(){return u=!0,null},c[o](""),!u});if(!i||!a||n){var l=mr(/./[o]),s=t(o,""[e],function(u,c,d,f,p){var m=mr(u),v=c.exec;return v===O5||v===AG.exec?i&&!p?{done:!0,value:l(c,d,f)}:{done:!0,value:m(d,c,f)}:{done:!1}});S5(String.prototype,e,s[0]),S5(AG,o,s[1])}r&&_y(AG[o],"sham",!0)},Bgt=yu("match"),Pgt=sr.TypeError,Lgt=yu("species"),jgt=mr("".charAt),j7e=mr("".charCodeAt),Vgt=mr("".slice),zgt=function(e){return function(t,n){var r,o,i=Va(Oh(t)),a=lk(n),l=i.length;return a<0||a>=l?e?"":void 0:(r=j7e(i,a))<55296||r>56319||a+1===l||(o=j7e(i,a+1))<56320||o>57343?e?jgt(i,a):r:e?Vgt(i,a,a+2):o-56320+(r-55296<<10)+65536}}(!0),V7e=function(e,t,n){return t+(n?zgt(e,t).length:1)},Hgt=sr.Array,$gt=Math.max,z7e=function(e,t,n){for(var r=sk(e),o=k5(t,r),i=k5(n===void 0?r:n,r),a=Hgt($gt(i-o,0)),l=0;o<i;o++,l++)S7e(a,l,e[o]);return a.length=l,a},Ugt=sr.TypeError,wG=function(e,t){var n=e.exec;if(ja(n)){var r=Li(n,e,t);return r!==null&&bu(r),r}if(Dh(e)==="RegExp")return Li(O5,e,t);throw Ugt("RegExp#exec called on incompatible receiver")},Cy=g7e.UNSUPPORTED_Y,Wgt=Math.min,H7e=[].push,Ggt=mr(/./.exec),Sy=mr(H7e),M5=mr("".slice);L7e("split",function(e,t,n){var r;return r="abbc".split(/(b)*/)[1]=="c"||"test".split(/(?:)/,-1).length!=4||"ab".split(/(?:ab)*/).length!=2||".".split(/(.?)(.?)/).length!=4||".".split(/()()/).length>1||"".split(/.?/).length?function(o,i){var a,l,s=Va(Oh(this)),u=i===void 0?4294967295:i>>>0;if(u===0)return[];if(o===void 0)return[s];if(!rc(a=o)||!((l=a[Bgt])!==void 0?l:Dh(a)=="RegExp"))return Li(t,s,o,u);for(var c,d,f,p=[],m=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(o.sticky?"y":""),v=0,g=new RegExp(o.source,m+"g");(c=Li(O5,g,s))&&!((d=g.lastIndex)>v&&(Sy(p,M5(s,v,c.index)),c.length>1&&c.index<s.length&&P7e(H7e,p,z7e(c,1)),f=c[0].length,v=d,p.length>=u));)g.lastIndex===c.index&&g.lastIndex++;return v===s.length?!f&&Ggt(g,"")||Sy(p,""):Sy(p,M5(s,v)),p.length>u?z7e(p,0,u):p}:"0".split(void 0,0).length?function(o,i){return o===void 0&&i===0?[]:Li(t,this,o,i)}:t,[function(o,i){var a=Oh(this),l=o==null?void 0:HW(o,e);return l?Li(l,o,a,i):Li(r,Va(a),o,i)},function(o,i){var a=bu(this),l=Va(o),s=n(r,a,l,i,r!==t);if(s.done)return s.value;var u=function(x,_){var E,C=bu(x).constructor;return C===void 0||(E=bu(C)[Lgt])==null?_:function(T){if(pG(T))return T;throw Pgt(e7e(T)+" is not a constructor")}(E)}(a,RegExp),c=a.unicode,d=(a.ignoreCase?"i":"")+(a.multiline?"m":"")+(a.unicode?"u":"")+(Cy?"g":"y"),f=new u(Cy?"^(?:"+a.source+")":a,d),p=i===void 0?4294967295:i>>>0;if(p===0)return[];if(l.length===0)return wG(f,l)===null?[l]:[];for(var m=0,v=0,g=[];v<l.length;){f.lastIndex=Cy?0:v;var b,y=wG(f,Cy?M5(l,v):l);if(y===null||(b=Wgt(tG(f.lastIndex+(Cy?v:0)),l.length))===m)v=V7e(l,v,c);else{if(Sy(g,M5(l,m,v)),g.length===p)return g;for(var w=1;w<=y.length-1;w++)if(Sy(g,y[w]),g.length===p)return g;v=m=b}}return Sy(g,M5(l,m)),g}]},!!_i(function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return n.length!==2||n[0]!=="a"||n[1]!=="b"}),Cy);var xG=`
| \v\f\r \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF`,$7e=mr("".replace),mk="["+xG+"]",qgt=RegExp("^"+mk+mk+"*"),Kgt=RegExp(mk+mk+"*$"),_G=function(e){return function(t){var n=Va(Oh(t));return 1&e&&(n=$7e(n,qgt,"")),2&e&&(n=$7e(n,Kgt,"")),n}},Ygt={start:_G(1),end:_G(2),trim:_G(3)},Xgt=eG.PROPER,Qgt=Ygt.trim;function U7e(e){return e.length?e[0].tagName.toLowerCase():""}Mh({target:"String",proto:!0,forced:function(e){return _i(function(){return!!xG[e]()||"\u200B\x85\u180E"[e]()!=="\u200B\x85\u180E"||Xgt&&xG[e].name!==e})}("trim")},{trim:function(){return Qgt(this)}}),Mh({global:!0},{globalThis:sr}),au&&(Pe.fn.append=au),Yc&&(Pe.fn.on=Yc),$p&&(Pe.fn.focus=$p),iu&&(Pe.fn.attr=iu),Kc&&(Pe.fn.val=Kc),Hp&&(Pe.fn.html=Hp),b2&&(Pe.fn.dataset=b2),m2&&(Pe.fn.addClass=m2),g2&&(Pe.fn.removeClass=g2),_2&&(Pe.fn.children=_2),LE&&(Pe.fn.each=LE),x2&&(Pe.fn.find=x2);var N5=!1,W7e=0,G7e=0,F5=null,R5=null,I5=Pe("body");function q7e(e){N5=!1,R5=null,F5=null,I5.off("mousemove",K7e),I5.off("mouseup",q7e)}I5.on("mousedown",function(e){var t=e.target;if((t.tagName==="TH"||t.tagName==="TD")&&t.style.cursor==="col-resize"){t.style.cursor="auto",e.preventDefault(),N5=!0;var n=e.clientX;W7e=n;var r=t.getBoundingClientRect().width;G7e=r,I5.on("mousemove",K7e),I5.on("mouseup",q7e)}});var K7e=Y1(function(e){if(N5&&R5!=null&&F5!=null){e.preventDefault();var t=e.clientX,n=G7e+(t-W7e);(n=Math.floor(100*n)/100)<30&&(n=30),et.setNodes(R5,{width:n.toString()},{at:F5})}},100),Jgt={type:"table",renderElem:function(e,t,n){var r=function(l,s){if(l.isDisabled())return!1;var u=l.selection;if(u==null||ct.isCollapsed(u))return!0;var c=u.anchor,d=u.focus,f=Re.findPath(l,s),p=ue.start(l,f),m=ue.end(l,f),v=nr.compare(c,m)<=0&&nr.compare(c,p)>=0,g=nr.compare(d,m)<=0&&nr.compare(d,p)>=0;return!!(v&&g&&qe.equals(c.path.slice(0,3),d.path.slice(0,3)))}(n,e),o=e.width,i=o===void 0?"auto":o,a=Mn("div",{className:"table-container","data-selected":Re.isNodeSelected(n,e),on:{mousedown:function(l){if(l.target.tagName==="DIV"&&l.preventDefault(),!n.isDisabled()){var s=Re.findPath(n,e),u=ue.start(n,s),c=n.selection;c!=null?c.anchor.path[0]!==s[0]&&n.select(u):n.select(u)}}}},Mn("table",{width:i,contentEditable:r},Mn("colgroup",null,vk(e).map(function(l){var s=l.width;return Mn("col",{width:s===void 0?"auto":s})})),Mn("tbody",null,t)));return a}},Zgt={type:"table-row",renderElem:function(e,t,n){return Mn("tr",null,t)}},e2t={type:"table-cell",renderElem:function(e,t,n){var r=function(f,p){var m=Re.getParentNode(f,p);if(m==null)return!1;var v=Re.getParentNode(f,m);return v!=null&&vk(v).some(function(g){return g===p})}(n,e),o=e,i=o.colSpan,a=i===void 0?1:i,l=o.rowSpan,s=l===void 0?1:l,u=o.isHeader,c=u!==void 0&&u;if(!r)return Mn("td",{colSpan:a,rowSpan:s},t);var d=Mn(c?"th":"td",{colSpan:a,rowSpan:s,style:{borderRightWidth:"3px"},on:{mousemove:Y1(function(f){var p=this.elm;if(p!=null){var m=p.getBoundingClientRect(),v=m.left,g=m.width,b=m.top,y=m.height,w=f.clientX,x=f.clientY;N5||(w>v+g-5&&w<v+g&&x>b&&x<b+y?(p.style.cursor="col-resize",R5=n,F5=Re.findPath(n,e)):N5||(p.style.cursor="auto",R5=null,F5=null))}},100)}},t);return d}},t2t={selector:"table",preParseHtml:function(e){var t=Pe(e);if(U7e(t)!=="table")return e;var n=t.find("tbody");if(n.length===0)return e;var r=t.find("tr");return t.append(r),n.remove(),t[0]}},n2t=hk.filter;Mh({target:"Array",proto:!0,forced:!hG("filter")},{filter:function(e){return n2t(this,e,arguments.length>1?arguments[1]:void 0)}});var r2t=Math.floor,EG=mr("".charAt),o2t=mr("".replace),CG=mr("".slice),i2t=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,a2t=/\$([$&'`]|\d{1,2})/g,l2t=function(e,t,n,r,o,i){var a=n+e.length,l=r.length,s=a2t;return o!==void 0&&(o=WW(o),s=i2t),o2t(i,s,function(u,c){var d;switch(EG(c,0)){case"$":return"$";case"&":return e;case"`":return CG(t,0,n);case"'":return CG(t,a);case"<":d=o[CG(c,1,-1)];break;default:var f=+c;if(f===0)return u;if(f>l){var p=r2t(f/10);return p===0?u:p<=l?r[p-1]===void 0?EG(c,1):r[p-1]+EG(c,1):u}d=r[f-1]}return d===void 0?"":d})},SG=yu("replace"),s2t=Math.max,u2t=Math.min,c2t=mr([].concat),kG=mr([].push),Y7e=mr("".indexOf),X7e=mr("".slice),d2t="a".replace(/./,"$0")==="$0",Q7e=!!/./[SG]&&/./[SG]("a","$0")==="";L7e("replace",function(e,t,n){var r=Q7e?"$":"$0";return[function(o,i){var a=Oh(this),l=o==null?void 0:HW(o,SG);return l?Li(l,o,a,i):Li(t,Va(a),o,i)},function(o,i){var a=bu(this),l=Va(o);if(typeof i=="string"&&Y7e(i,r)===-1&&Y7e(i,"$<")===-1){var s=n(t,a,l,i);if(s.done)return s.value}var u=ja(i);u||(i=Va(i));var c=a.global;if(c){var d=a.unicode;a.lastIndex=0}for(var f=[];;){var p=wG(a,l);if(p===null||(kG(f,p),!c))break;Va(p[0])===""&&(a.lastIndex=V7e(l,tG(a.lastIndex),d))}for(var m,v="",g=0,b=0;b<f.length;b++){for(var y=Va((p=f[b])[0]),w=s2t(u2t(lk(p.index),l.length),0),x=[],_=1;_<p.length;_++)kG(x,(m=p[_])===void 0?m:String(m));var E=p.groups;if(u){var C=c2t([y],x,w,l);E!==void 0&&kG(C,E);var T=Va(P7e(i,void 0,C))}else T=l2t(y,l,w,x,E,i);w>=g&&(v+=X7e(l,g,w)+T,g=w+y.length)}return v+X7e(l,g)}]},!!_i(function(){var e=/./;return e.exec=function(){var t=[];return t.groups={a:"7"},t},"".replace(e,"$<a>")!=="7"})||!d2t||Q7e);var f2t={selector:"td:not([data-w-e-type]),th:not([data-w-e-type])",parseElemHtml:function(e,t,n){var r=Pe(e);(t=t.filter(function(l){return!!Qt.isText(l)||!!n.isInline(l)})).length===0&&(t=[{text:r.text().replace(/\s+/gm," ")}]);var o=parseInt(r.attr("colSpan")||"1"),i=parseInt(r.attr("rowSpan")||"1"),a=r.attr("width")||"auto";return{type:"table-cell",isHeader:U7e(r)==="th",colSpan:o,rowSpan:i,width:a,children:t}}},p2t={selector:"tr:not([data-w-e-type])",parseElemHtml:function(e,t,n){return{type:"table-row",children:t.filter(function(r){return Re.getNodeType(r)==="table-cell"})}}},h2t={selector:"table:not([data-w-e-type])",parseElemHtml:function(e,t,n){var r=Pe(e),o="auto";return function(i){for(var a="",l=(i.attr("style")||"").split(";"),s=l.length,u=0;u<s;u++){var c=l[u];if(c){var d=c.split(":");d[0].trim()==="width"&&(a=d[1].trim())}}return a}(r)==="100%"&&(o="100%"),r.attr("width")==="100%"&&(o="100%"),{type:"table",width:o,children:t.filter(function(i){return Re.getNodeType(i)==="table-row"})}}},v2t=function(){function e(){this.title=jt("tableModule.insertTable"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M0 64v896h1024V64H0z m384 576v-192h256v192h-256z m256 64v192h-256v-192h256z m0-512v192h-256V192h256zM320 192v192H64V192h256z m-256 256h256v192H64v-192z m640 0h256v192h-256v-192z m0-64V192h256v192h-256zM64 704h256v192H64v-192z m640 192v-192h256v192h-256z"></path></svg>',this.tag="button",this.showDropPanel=!0,this.$content=null}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.exec=function(t,n){},e.prototype.isDisabled=function(t){var n=t.selection;return n==null||!ct.isCollapsed(n)||!!Re.getSelectedElems(t).some(function(r){var o=Re.getNodeType(r);return o==="pre"||o==="table"||o==="list-item"||!!t.isVoid(r)})},e.prototype.getPanelContentElem=function(t){var n=this;if(this.$content)return this.$content[0];for(var r=Pe('<div class="w-e-panel-content-table"></div>'),o=Pe("<span>0 × 0</span>"),i=Pe("<table></table>"),a=0;a<10;a++){for(var l=Pe("<tr></tr>"),s=0;s<10;s++){var u=Pe("<td></td>");u.attr("data-x",s.toString()),u.attr("data-y",a.toString()),l.append(u),u.on("mouseenter",function(c){var d=c.target;if(d!=null){var f=Pe(d).dataset(),p=f.x,m=f.y;o[0].innerHTML=p+1+" × "+(m+1),i.children().each(function(v){Pe(v).children().each(function(g){var b=Pe(g),y=b.dataset(),w=y.x,x=y.y;w<=p&&x<=m?b.addClass("active"):b.removeClass("active")})})}}),u.on("click",function(c){c.preventDefault();var d=c.target;if(d!=null){var f=Pe(d).dataset(),p=f.x,m=f.y;n.insertTable(t,m+1,p+1)}})}i.append(l)}return r.append(i),r.append(o),this.$content=r,r[0]},e.prototype.insertTable=function(t,n,r){var o=parseInt(n,10),i=parseInt(r,10);if(o&&i&&!(o<=0||i<=0)){Re.isSelectedEmptyParagraph(t)&&et.removeNodes(t,{mode:"highest"});var a=function(l,s){for(var u=[],c=0;c<l;c++){for(var d=[],f=0;f<s;f++){var p={type:"table-cell",children:[{text:""}]};c===0&&(p.isHeader=!0),d.push(p)}u.push({type:"table-row",children:d})}return{type:"table",width:"auto",children:u}}(o,i);et.insertNodes(t,a,{mode:"highest"})}},e}(),m2t=function(){function e(){this.title=jt("tableModule.deleteTable"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M826.8032 356.5312c-19.328 0-36.3776 15.6928-36.3776 35.0464v524.2624c0 19.328-16 34.56-35.328 34.56H264.9344c-19.328 0-35.5072-15.3088-35.5072-34.56V390.0416c0-19.328-14.1568-35.0464-33.5104-35.0464s-33.5104 15.6928-33.5104 35.0464V915.712c0 57.9328 44.6208 108.288 102.528 108.288H755.2c57.9328 0 108.0832-50.4576 108.0832-108.288V391.4752c-0.1024-19.2512-17.1264-34.944-36.48-34.944z" p-id="9577"></path><path d="M437.1712 775.7568V390.6048c0-19.328-14.1568-35.0464-33.5104-35.0464s-33.5104 15.616-33.5104 35.0464v385.152c0 19.328 14.1568 35.0464 33.5104 35.0464s33.5104-15.7184 33.5104-35.0464zM649.7024 775.7568V390.6048c0-19.328-17.0496-35.0464-36.3776-35.0464s-36.3776 15.616-36.3776 35.0464v385.152c0 19.328 17.0496 35.0464 36.3776 35.0464s36.3776-15.7184 36.3776-35.0464zM965.0432 217.0368h-174.6176V145.5104c0-57.9328-47.2064-101.76-104.6528-101.76h-350.976c-57.8304 0-105.3952 43.8528-105.3952 101.76v71.5264H54.784c-19.4304 0-35.0464 14.1568-35.0464 33.5104 0 19.328 15.616 33.5104 35.0464 33.5104h910.3616c19.328 0 35.0464-14.1568 35.0464-33.5104 0-19.3536-15.6928-33.5104-35.1488-33.5104z m-247.3728 0H297.3952V145.5104c0-19.328 18.2016-34.7648 37.4272-34.7648h350.976c19.1488 0 31.872 15.1296 31.872 34.7648v71.5264z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){return t.selection==null||Re.getSelectedNodeByType(t,"table")==null},e.prototype.exec=function(t,n){this.isDisabled(t)||et.removeNodes(t,{mode:"highest"})},e}(),g2t=function(){function e(){this.title=jt("tableModule.insertRow"),this.iconSvg='<svg viewBox="0 0 1048 1024"><path d="M707.7888 521.0112h-147.456v-147.456H488.2432v147.456h-147.456v68.8128h147.456v147.456h72.0896v-147.456h147.456zM0 917.504V0h1048.576v917.504H0zM327.68 65.536H65.536v196.608H327.68V65.536z m327.68 0H393.216v196.608h262.144V65.536z m327.68 0h-262.144v196.608h262.144V65.536z m0 258.8672H65.536v462.0288H983.04V324.4032z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){var n=t.selection;return n==null||!ct.isCollapsed(n)||Re.getSelectedNodeByType(t,"table")==null},e.prototype.exec=function(t,n){if(!this.isDisabled(t)){var r=oc(ue.nodes(t,{match:function(p){return Re.checkNodeType(p,"table-cell")},universal:!0}),1),o=oc(r[0],2),i=o[0],a=o[1],l=Re.getParentNode(t,i),s=(l==null?void 0:l.children.length)||0;if(s!==0){for(var u={type:"table-row",children:[]},c=0;c<s;c++)u.children.push({type:"table-cell",children:[{text:""}]});var d=qe.parent(a),f=qe.next(d);et.insertNodes(t,u,{at:f})}}},e}(),y2t=function(){function e(){this.title=jt("tableModule.deleteRow"),this.iconSvg='<svg viewBox="0 0 1048 1024"><path d="M907.6736 586.5472L747.1104 425.984l163.84-163.84-78.6432-78.6432-163.84 163.84L507.904 186.7776 429.2608 262.144l163.84 163.84-167.1168 167.1168 78.6432 78.6432 167.1168-167.1168 160.5632 160.5632 75.3664-78.6432zM0 917.504V0h1048.576v917.504H0z m983.04-327.68h-22.9376l-65.536-65.536H983.04V327.68h-91.7504l65.536-65.536h26.2144V65.536H65.536v196.608h317.8496l65.536 65.536H65.536v196.608h380.1088l-65.536 65.536H65.536v196.608H983.04v-196.608z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){var n=t.selection;return n==null||!ct.isCollapsed(n)||Re.getSelectedNodeByType(t,"table-row")==null},e.prototype.exec=function(t,n){if(!this.isDisabled(t)){var r=oc(ue.nodes(t,{match:function(s){return Re.checkNodeType(s,"table-row")},universal:!0}),1),o=oc(r[0],2),i=o[0],a=o[1],l=Re.getParentNode(t,i);((l==null?void 0:l.children.length)||0)<=1?et.removeNodes(t,{mode:"highest"}):et.removeNodes(t,{at:a})}},e}(),J7e={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},DG=KW("span").classList,Z7e=DG&&DG.constructor&&DG.constructor.prototype,b2t=Z7e===Object.prototype?void 0:Z7e,A2t=hk.forEach,w2t=function(){var e=[].forEach;return!!e&&_i(function(){e.call(null,function(){throw 1},1)})}(),OG=w2t?[].forEach:function(e){return A2t(this,e,arguments.length>1?arguments[1]:void 0)},e9e=function(e){if(e&&e.forEach!==OG)try{_y(e,"forEach",OG)}catch{e.forEach=OG}};for(var TG in J7e)J7e[TG]&&e9e(sr[TG]&&sr[TG].prototype);e9e(b2t);var x2t=function(){function e(){this.title=jt("tableModule.insertCol"),this.iconSvg='<svg viewBox="0 0 1048 1024"><path d="M327.68 193.3312v186.7776H140.9024v91.7504H327.68v186.7776h88.4736V471.8592h190.0544V380.1088H416.1536V193.3312zM0 917.504V0h1048.576v917.504H0zM655.36 65.536H65.536v720.896H655.36V65.536z m327.68 0h-262.144v196.608h262.144V65.536z m0 262.144h-262.144v196.608h262.144V327.68z m0 262.144h-262.144v196.608h262.144v-196.608z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){var n=t.selection;return n==null||!ct.isCollapsed(n)||Re.getSelectedNodeByType(t,"table")==null},e.prototype.exec=function(t,n){if(!this.isDisabled(t)){var r=oc(ue.nodes(t,{match:function(u){return Re.checkNodeType(u,"table-cell")},universal:!0}),1),o=oc(r[0],2),i=o[0],a=o[1],l=Re.getParentNode(t,i);if(l!=null){var s=Re.getParentNode(t,l);s!=null&&(s.children||[]).forEach(function(u,c){sn.isElement(u)&&(u.children||[]).forEach(function(d){var f=Re.findPath(t,d);if(f.length===a.length&&Hwe(f.slice(-1),a.slice(-1))){var p={type:"table-cell",children:[{text:""}]};c===0&&N7e(s)&&(p.isHeader=!0),et.insertNodes(t,p,{at:f})}})})}}},e}(),_2t=function(){function e(){this.title=jt("tableModule.deleteCol"),this.iconSvg='<svg viewBox="0 0 1048 1024"><path d="M327.68 510.976L393.216 445.44v-13.1072L327.68 366.7968V510.976z m327.68-78.4384l65.536-65.536V507.904L655.36 442.368v-9.8304z m393.216 484.9664V0H0v917.504h1048.576z m-65.536-131.072h-262.144v-52.4288l-13.1072 13.1072-52.4288-52.4288v91.7504H393.216v-91.7504l-52.4288 52.4288-13.1072-13.1072v52.4288H65.536V65.536H327.68v121.2416l36.0448-36.0448 29.4912 29.4912V62.2592h262.144V180.224l49.152-49.152 16.384 16.384V62.2592h262.144V786.432z m-294.912-108.1344l-160.5632-160.5632-167.1168 167.1168-78.6432-78.6432 167.1168-167.1168L288.3584 278.528l78.6432-78.6432 160.5632 160.5632 163.84-163.84 78.6432 78.6432-163.84 163.84 160.5632 160.5632-78.6432 78.6432z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){var n=t.selection;return n==null||!ct.isCollapsed(n)||Re.getSelectedNodeByType(t,"table-cell")==null},e.prototype.exec=function(t,n){if(!this.isDisabled(t)){var r=oc(ue.nodes(t,{match:function(c){return Re.checkNodeType(c,"table-cell")},universal:!0}),1),o=oc(r[0],2),i=o[0],a=o[1],l=Re.getParentNode(t,i),s=(l==null?void 0:l.children.length)||0;if(!l||s<=1)et.removeNodes(t,{mode:"highest"});else{var u=Re.getParentNode(t,l);u!=null&&(u.children||[]).forEach(function(c){sn.isElement(c)&&(c.children||[]).forEach(function(d){var f=Re.findPath(t,d);f.length===a.length&&Hwe(f.slice(-1),a.slice(-1))&&et.removeNodes(t,{at:f})})})}}},e}(),E2t=function(){function e(){this.title=jt("tableModule.header"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M704 128l-64 0L384 128 320 128 0 128l0 256 0 64 0 192 0 64 0 256 320 0 64 0 256 0 64 0 320 0 0-256 0-64L1024 448 1024 384 1024 128 704 128zM640 640 384 640 384 448l256 0L640 640zM64 448l256 0 0 192L64 640 64 448zM320 896 64 896l0-192 256 0L320 896zM640 896 384 896l0-192 256 0L640 896zM960 896l-256 0 0-192 256 0L960 896zM960 640l-256 0L704 448l256 0L960 640z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){var n=Re.getSelectedNodeByType(t,"table");return n!=null&&N7e(n)},e.prototype.isActive=function(t){return!!this.getValue(t)},e.prototype.isDisabled=function(t){var n=t.selection;return n==null||!ct.isCollapsed(n)||Re.getSelectedNodeByType(t,"table")==null},e.prototype.exec=function(t,n){if(!this.isDisabled(t)){var r=!n,o=Re.getSelectedNodeByType(t,"table");o!=null&&vk(o).forEach(function(i){return et.setNodes(t,{isHeader:r},{at:Re.findPath(t,i)})})}},e}(),C2t=function(){function e(){this.title=jt("tableModule.widthAuto"),this.iconSvg='<svg viewBox="0 0 1228 1024"><path d="M862.514337 563.200461H404.581995v121.753478a13.311987 13.311987 0 0 1-6.655993 11.468789 10.23999 10.23999 0 0 1-12.083188-1.433599l-204.799795-179.199821a13.721586 13.721586 0 0 1 0-20.479979l204.799795-179.302221a10.23999 10.23999 0 0 1 12.185588-1.535998 13.209587 13.209587 0 0 1 6.553593 11.673588v115.097485h457.932342V319.693504a11.571188 11.571188 0 0 1 18.841582-10.239989l204.799795 179.19982a13.721586 13.721586 0 0 1 0 20.47998l-204.799795 179.199821a10.23999 10.23999 0 0 1-12.185588 1.535998 13.311987 13.311987 0 0 1-6.655994-11.571188V563.200461zM136.499064 14.951409v993.893406a15.257585 15.257585 0 0 1-15.155185 15.052785H15.155185A15.155185 15.155185 0 0 1 0 1008.844815V14.951409a15.257585 15.257585 0 0 1 15.155185-15.052785h106.086294a15.155185 15.155185 0 0 1 15.257585 15.155185zM1228.798771 14.951409v993.893406a15.257585 15.257585 0 0 1-15.155185 15.052785h-106.188693a15.155185 15.155185 0 0 1-15.155185-15.052785V14.951409a15.257585 15.257585 0 0 1 15.155185-15.052785h106.086293A15.155185 15.155185 0 0 1 1228.798771 15.053809z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){var n=Re.getSelectedNodeByType(t,"table");return n!=null&&n.width==="100%"},e.prototype.isActive=function(t){return!!this.getValue(t)},e.prototype.isDisabled=function(t){var n=t.selection;return n==null||!ct.isCollapsed(n)||Re.getSelectedNodeByType(t,"table")==null},e.prototype.exec=function(t,n){if(!this.isDisabled(t)){var r={width:n?"auto":"100%"};et.setNodes(t,r,{mode:"highest"})}},e}(),S2t={renderElems:[Jgt,Zgt,e2t],elemsToHtml:[{type:"table",elemToHtml:function(e,t){var n=e.width;return'<table style="width: '+(n===void 0?"auto":n)+';"><tbody>'+t+"</tbody></table>"}},{type:"table-row",elemToHtml:function(e,t){return"<tr>"+t+"</tr>"}},{type:"table-cell",elemToHtml:function(e,t){var n=e,r=n.colSpan,o=r===void 0?1:r,i=n.rowSpan,a=i===void 0?1:i,l=n.isHeader,s=l!==void 0&&l,u=n.width,c=s?"th":"td";return"<"+c+' colSpan="'+o+'" rowSpan="'+a+'" width="'+(u===void 0?"auto":u)+'">'+t+"</"+c+">"}}],preParseHtml:[t2t],parseElemsHtml:[f2t,p2t,h2t],menus:[{key:"insertTable",factory:function(){return new v2t}},{key:"deleteTable",factory:function(){return new m2t}},{key:"insertTableRow",factory:function(){return new g2t}},{key:"deleteTableRow",factory:function(){return new y2t}},{key:"insertTableCol",factory:function(){return new x2t}},{key:"deleteTableCol",factory:function(){return new _2t}},{key:"tableHeader",factory:function(){return new E2t}},{key:"tableFullWidth",factory:function(){return new C2t}}],editorPlugin:function(e){var t=e.insertBreak,n=e.deleteBackward,r=e.deleteForward,o=e.normalizeNode,i=e.insertData,a=e.handleTab,l=e.selectAll,s=e;return s.insertBreak=function(){Re.getSelectedNodeByType(s,"table")==null?t():s.insertText(`
| `)},s.deleteBackward=function(u){if(!k7e(s)){var c=s.selection;if(c){var d=ue.before(s,c);if(d){var f=D7e(s,d),p=D7e(s,c);if(f&&!p)return}}n(u)}},s.handleTab=function(){var u;if(Re.getSelectedNodeByType(s,"table")){var c=ue.above(e);Re.checkNodeType(c[0],"table-cell")&&et.select(e,c[1]);var d=ue.next(e);if(d)d[0]&&d[0].text&&(d=(u=ue.above(e,{at:d[1]}))!==null&&u!==void 0?u:d),et.select(e,d[1]);else{var f=s.children||[],p=f.length;if(Re.checkNodeType(f[p-1],"table")){var m=Re.genEmptyParagraph();et.insertNodes(s,m,{at:[p]}),s.handleTab()}}}else a()},s.deleteForward=function(u){k7e(s)||r(u)},s.normalizeNode=function(u){var c=oc(u,2),d=c[0],f=c[1];if(Re.getNodeType(d)!=="table")return o([d,f]);if(Re.isLastNode(s,d)){var p=Re.genEmptyParagraph();et.insertNodes(s,p,{at:[f[0]+1]})}},s.insertData=function(u){if(Re.getSelectedNodeByType(s,"table")!=null){var c=u.getData("text/plain");c===`
| `||/<img[^>]+>/.test(u.getData("text/html"))?i(u):ue.insertText(s,c)}else i(u)},s.selectAll=function(){var u=s.selection;if(u!=null){var c=Re.getSelectedNodeByType(s,"table-cell");if(c!=null){var d=u.anchor,f=u.focus;if(qe.equals(d.path.slice(0,3),f.path.slice(0,3)))if(Lt.string(c).length!==0){var p=Re.findPath(s,c),m={anchor:ue.start(s,p),focus:ue.end(s,p)};s.select(m)}else l();else l()}else l()}else l()},s}};Ul("en",{videoModule:{delete:"Delete",uploadVideo:"Upload video",insertVideo:"Insert video",videoSrc:"Video source",videoSrcPlaceHolder:"Video file url, or third-party <iframe>",videoPoster:"Video poster",videoPosterPlaceHolder:"Poster image url",ok:"Ok",editSize:"Edit size",width:"Width",height:"Height"}}),Ul("zh-CN",{videoModule:{delete:"\u5220\u9664\u89C6\u9891",uploadVideo:"\u4E0A\u4F20\u89C6\u9891",insertVideo:"\u63D2\u5165\u89C6\u9891",videoSrc:"\u89C6\u9891\u5730\u5740",videoSrcPlaceHolder:"\u89C6\u9891\u6587\u4EF6 url \u6216\u7B2C\u4E09\u65B9 <iframe>",videoPoster:"\u89C6\u9891\u5C01\u9762",videoPosterPlaceHolder:"\u5C01\u9762\u56FE\u7247 url",ok:"\u786E\u5B9A",editSize:"\u4FEE\u6539\u5C3A\u5BF8",width:"\u5BBD\u5EA6",height:"\u9AD8\u5EA6"}});var gk=function(){return gk=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},gk.apply(this,arguments)};function yk(e,t,n,r){return new(n||(n=Promise))(function(o,i){function a(u){try{s(r.next(u))}catch(c){i(c)}}function l(u){try{s(r.throw(u))}catch(c){i(c)}}function s(u){var c;u.done?o(u.value):(c=u.value,c instanceof n?c:new n(function(d){d(c)})).then(a,l)}s((r=r.apply(e,[])).next())})}function bk(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:l(0),throw:l(1),return:l(2)},typeof Symbol=="function"&&(i[Symbol.iterator]=function(){return this}),i;function l(s){return function(u){return function(c){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||c[0]!==6&&c[0]!==2)){a=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(c[0]===6&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(d){c=[6,d],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([s,u])}}}function jv(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(t===void 0||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(l){o={error:l}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}var t9e=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function MG(e){var t={exports:{}};return e(t,t.exports),t.exports}var Fh,Ak,wk=function(e){return e&&e.Math==Math&&e},Ht=wk(typeof globalThis=="object"&&globalThis)||wk(typeof window=="object"&&window)||wk(typeof self=="object"&&self)||wk(typeof t9e=="object"&&t9e)||function(){return this}()||Function("return this")(),io=function(e){try{return!!e()}catch{return!0}},sd=!io(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),B5=Function.prototype.call,ao=B5.bind?B5.bind(B5):function(){return B5.apply(B5,arguments)},n9e={}.propertyIsEnumerable,r9e=Object.getOwnPropertyDescriptor,k2t={f:r9e&&!n9e.call({1:2},1)?function(e){var t=r9e(this,e);return!!t&&t.enumerable}:n9e},xk=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},o9e=Function.prototype,NG=o9e.bind,FG=o9e.call,D2t=NG&&NG.bind(FG),Vn=NG?function(e){return e&&D2t(FG,e)}:function(e){return e&&function(){return FG.apply(e,arguments)}},O2t=Vn({}.toString),T2t=Vn("".slice),ud=function(e){return T2t(O2t(e),8,-1)},RG=Ht.Object,M2t=Vn("".split),IG=io(function(){return!RG("z").propertyIsEnumerable(0)})?function(e){return ud(e)=="String"?M2t(e,""):RG(e)}:RG,N2t=Ht.TypeError,P5=function(e){if(e==null)throw N2t("Can't call method on "+e);return e},Rh=function(e){return IG(P5(e))},Xr=function(e){return typeof e=="function"},bo=function(e){return typeof e=="object"?e!==null:Xr(e)},Vv=function(e,t){return arguments.length<2?function(n){return Xr(n)?n:void 0}(Ht[e]):Ht[e]&&Ht[e][t]},L5=Vn({}.isPrototypeOf),ky=Vv("navigator","userAgent")||"",i9e=Ht.process,a9e=Ht.Deno,l9e=i9e&&i9e.versions||a9e&&a9e.version,s9e=l9e&&l9e.v8;s9e&&(Ak=(Fh=s9e.split("."))[0]>0&&Fh[0]<4?1:+(Fh[0]+Fh[1])),!Ak&&ky&&(!(Fh=ky.match(/Edge\/(\d+)/))||Fh[1]>=74)&&(Fh=ky.match(/Chrome\/(\d+)/))&&(Ak=+Fh[1]);var j5=Ak,BG=!!Object.getOwnPropertySymbols&&!io(function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&j5&&j5<41}),PG=BG&&!Symbol.sham&&typeof Symbol.iterator=="symbol",F2t=Ht.Object,LG=PG?function(e){return typeof e=="symbol"}:function(e){var t=Vv("Symbol");return Xr(t)&&L5(t.prototype,F2t(e))},R2t=Ht.String,_k=function(e){try{return R2t(e)}catch{return"Object"}},I2t=Ht.TypeError,Ih=function(e){if(Xr(e))return e;throw I2t(_k(e)+" is not a function")},V5=function(e,t){var n=e[t];return n==null?void 0:Ih(n)},B2t=Ht.TypeError,P2t=Object.defineProperty,jG=function(e,t){try{P2t(Ht,e,{value:t,configurable:!0,writable:!0})}catch{Ht[e]=t}return t},Bh=Ht["__core-js_shared__"]||jG("__core-js_shared__",{}),VG=MG(function(e){(e.exports=function(t,n){return Bh[t]||(Bh[t]=n!==void 0?n:{})})("versions",[]).push({version:"3.19.3",mode:"global",copyright:"\xA9 2021 Denis Pushkarev (zloirock.ru)"})}),L2t=Ht.Object,Ek=function(e){return L2t(P5(e))},j2t=Vn({}.hasOwnProperty),Ei=Object.hasOwn||function(e,t){return j2t(Ek(e),t)},V2t=0,z2t=Math.random(),H2t=Vn(1 .toString),zG=function(e){return"Symbol("+(e===void 0?"":e)+")_"+H2t(++V2t+z2t,36)},z5=VG("wks"),zv=Ht.Symbol,u9e=zv&&zv.for,$2t=PG?zv:zv&&zv.withoutSetter||zG,ai=function(e){if(!Ei(z5,e)||!BG&&typeof z5[e]!="string"){var t="Symbol."+e;BG&&Ei(zv,e)?z5[e]=zv[e]:z5[e]=PG&&u9e?u9e(t):$2t(t)}return z5[e]},U2t=Ht.TypeError,W2t=ai("toPrimitive"),HG=function(e){var t=function(n){if(!bo(n)||LG(n))return n;var r,o=V5(n,W2t);if(o){if(r=ao(o,n,"string"),!bo(r)||LG(r))return r;throw U2t("Can't convert object to primitive value")}return function(i){var a,l;if(Xr(a=i.toString)&&!bo(l=ao(a,i))||Xr(a=i.valueOf)&&!bo(l=ao(a,i)))return l;throw B2t("Can't convert object to primitive value")}(n)}(e);return LG(t)?t:t+""},$G=Ht.document,G2t=bo($G)&&bo($G.createElement),H5=function(e){return G2t?$G.createElement(e):{}},c9e=!sd&&!io(function(){return Object.defineProperty(H5("div"),"a",{get:function(){return 7}}).a!=7}),d9e=Object.getOwnPropertyDescriptor,UG={f:sd?d9e:function(e,t){if(e=Rh(e),t=HG(t),c9e)try{return d9e(e,t)}catch{}if(Ei(e,t))return xk(!ao(k2t.f,e,t),e[t])}},q2t=Ht.String,K2t=Ht.TypeError,ra=function(e){if(bo(e))return e;throw K2t(q2t(e)+" is not an object")},Y2t=Ht.TypeError,f9e=Object.defineProperty,yf={f:sd?f9e:function(e,t,n){if(ra(e),t=HG(t),ra(n),c9e)try{return f9e(e,t,n)}catch{}if("get"in n||"set"in n)throw Y2t("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},Ph=sd?function(e,t,n){return yf.f(e,t,xk(1,n))}:function(e,t,n){return e[t]=n,e},X2t=Vn(Function.toString);Xr(Bh.inspectSource)||(Bh.inspectSource=function(e){return X2t(e)});var Ck,$5,Sk,kk=Bh.inspectSource,p9e=Ht.WeakMap,h9e=Xr(p9e)&&/native code/.test(kk(p9e)),v9e=VG("keys"),WG=function(e){return v9e[e]||(v9e[e]=zG(e))},Dk={},GG=Ht.TypeError,Q2t=Ht.WeakMap;if(h9e||Bh.state){var Hv=Bh.state||(Bh.state=new Q2t),J2t=Vn(Hv.get),m9e=Vn(Hv.has),Z2t=Vn(Hv.set);Ck=function(e,t){if(m9e(Hv,e))throw new GG("Object already initialized");return t.facade=e,Z2t(Hv,e,t),t},$5=function(e){return J2t(Hv,e)||{}},Sk=function(e){return m9e(Hv,e)}}else{var Dy=WG("state");Dk[Dy]=!0,Ck=function(e,t){if(Ei(e,Dy))throw new GG("Object already initialized");return t.facade=e,Ph(e,Dy,t),t},$5=function(e){return Ei(e,Dy)?e[Dy]:{}},Sk=function(e){return Ei(e,Dy)}}var Rs={set:Ck,get:$5,has:Sk,enforce:function(e){return Sk(e)?$5(e):Ck(e,{})},getterFor:function(e){return function(t){var n;if(!bo(t)||(n=$5(t)).type!==e)throw GG("Incompatible receiver, "+e+" required");return n}}},g9e=Function.prototype,eyt=sd&&Object.getOwnPropertyDescriptor,qG=Ei(g9e,"name"),Oy={EXISTS:qG,PROPER:qG&&(function(){}).name==="something",CONFIGURABLE:qG&&(!sd||sd&&eyt(g9e,"name").configurable)},Au=MG(function(e){var t=Oy.CONFIGURABLE,n=Rs.get,r=Rs.enforce,o=String(String).split("String");(e.exports=function(i,a,l,s){var u,c=!!s&&!!s.unsafe,d=!!s&&!!s.enumerable,f=!!s&&!!s.noTargetGet,p=s&&s.name!==void 0?s.name:a;Xr(l)&&(String(p).slice(0,7)==="Symbol("&&(p="["+String(p).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!Ei(l,"name")||t&&l.name!==p)&&Ph(l,"name",p),(u=r(l)).source||(u.source=o.join(typeof p=="string"?p:""))),i!==Ht?(c?!f&&i[a]&&(d=!0):delete i[a],d?i[a]=l:Ph(i,a,l)):d?i[a]=l:jG(a,l)})(Function.prototype,"toString",function(){return Xr(this)&&n(this).source||kk(this)})}),tyt=Math.ceil,nyt=Math.floor,Ok=function(e){var t=+e;return t!=t||t===0?0:(t>0?nyt:tyt)(t)},ryt=Math.max,oyt=Math.min,U5=function(e,t){var n=Ok(e);return n<0?ryt(n+t,0):oyt(n,t)},iyt=Math.min,y9e=function(e){return e>0?iyt(Ok(e),9007199254740991):0},W5=function(e){return y9e(e.length)},b9e=function(e){return function(t,n,r){var o,i=Rh(t),a=W5(i),l=U5(r,a);if(e&&n!=n){for(;a>l;)if((o=i[l++])!=o)return!0}else for(;a>l;l++)if((e||l in i)&&i[l]===n)return e||l||0;return!e&&-1}},A9e={includes:b9e(!0),indexOf:b9e(!1)},ayt=A9e.indexOf,w9e=Vn([].push),x9e=function(e,t){var n,r=Rh(e),o=0,i=[];for(n in r)!Ei(Dk,n)&&Ei(r,n)&&w9e(i,n);for(;t.length>o;)Ei(r,n=t[o++])&&(~ayt(i,n)||w9e(i,n));return i},Tk=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],lyt=Tk.concat("length","prototype"),Mk={f:Object.getOwnPropertyNames||function(e){return x9e(e,lyt)}},syt={f:Object.getOwnPropertySymbols},uyt=Vn([].concat),cyt=Vv("Reflect","ownKeys")||function(e){var t=Mk.f(ra(e)),n=syt.f;return n?uyt(t,n(e)):t},dyt=function(e,t){for(var n=cyt(t),r=yf.f,o=UG.f,i=0;i<n.length;i++){var a=n[i];Ei(e,a)||r(e,a,o(t,a))}},fyt=/#|\.prototype\./,G5=function(e,t){var n=hyt[pyt(e)];return n==myt||n!=vyt&&(Xr(t)?io(t):!!t)},pyt=G5.normalize=function(e){return String(e).replace(fyt,".").toLowerCase()},hyt=G5.data={},vyt=G5.NATIVE="N",myt=G5.POLYFILL="P",Nk=G5,gyt=UG.f,Kl=function(e,t){var n,r,o,i,a,l=e.target,s=e.global,u=e.stat;if(n=s?Ht:u?Ht[l]||jG(l,{}):(Ht[l]||{}).prototype)for(r in t){if(i=t[r],o=e.noTargetGet?(a=gyt(n,r))&&a.value:n[r],!Nk(s?r:l+(u?".":"#")+r,e.forced)&&o!==void 0){if(typeof i==typeof o)continue;dyt(i,o)}(e.sham||o&&o.sham)&&Ph(i,"sham",!0),Au(n,r,i,e)}},_9e={};_9e[ai("toStringTag")]="z";var KG=String(_9e)==="[object z]",yyt=ai("toStringTag"),byt=Ht.Object,Ayt=ud(function(){return arguments}())=="Arguments",Fk=KG?ud:function(e){var t,n,r;return e===void 0?"Undefined":e===null?"Null":typeof(n=function(o,i){try{return o[i]}catch{}}(t=byt(e),yyt))=="string"?n:Ayt?ud(t):(r=ud(t))=="Object"&&Xr(t.callee)?"Arguments":r},wyt=Ht.String,wu=function(e){if(Fk(e)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return wyt(e)},YG=`
| \v\f\r \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF`,E9e=Vn("".replace),Rk="["+YG+"]",xyt=RegExp("^"+Rk+Rk+"*"),_yt=RegExp(Rk+Rk+"*$"),XG=function(e){return function(t){var n=wu(P5(t));return 1&e&&(n=E9e(n,xyt,"")),2&e&&(n=E9e(n,_yt,"")),n}},Eyt={start:XG(1),end:XG(2),trim:XG(3)},Cyt=Oy.PROPER,Syt=Eyt.trim;function C9e(e){return e.length?e[0].tagName.toLowerCase():""}function S9e(e,t,n){t===void 0&&(t="auto"),n===void 0&&(n="auto");var r=Pe(e);return r.attr("width",t),r.attr("height",n),r[0].outerHTML}Kl({target:"String",proto:!0,forced:io(function(){return!!YG.trim()||"\u200B\x85\u180E".trim()!=="\u200B\x85\u180E"||Cyt&&YG.trim.name!=="trim"})},{trim:function(){return Syt(this)}}),Kl({global:!0},{globalThis:Ht}),au&&(Pe.fn.append=au),Yc&&(Pe.fn.on=Yc),$p&&(Pe.fn.focus=$p),iu&&(Pe.fn.attr=iu),Kc&&(Pe.fn.val=Kc),Hp&&(Pe.fn.html=Hp),w2&&(Pe.fn.parent=w2),y2&&(Pe.fn.hasClass=y2),C2&&(Pe.fn.empty=C2);var Ik,kyt={type:"video",renderElem:function(e,t,n){var r,o=e,i=o.src,a=i===void 0?"":i,l=o.poster,s=l===void 0?"":l,u=o.width,c=u===void 0?"auto":u,d=o.height,f=d===void 0?"auto":d,p=Re.isNodeSelected(n,e);if(a.trim().indexOf("<iframe ")===0)r=Mn("div",{className:"w-e-textarea-video-container","data-selected":p?"true":"",innerHTML:S9e(a,c,f)});else{var m=Mn("video",{poster:s,controls:!0},Mn("source",{src:a,type:"video/mp4"}),`Sorry, your browser doesn't support embedded videos.
| \u62B1\u6B49\uFF0C\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 video \u89C6\u9891`);c!=="auto"&&(m.data.width=c),f!=="auto"&&(m.data.height=f),r=Mn("div",{className:"w-e-textarea-video-container","data-selected":p?"true":""},m)}return S2("div",{props:{contentEditable:!1},on:{mousedown:function(v){return v.preventDefault()}}},r)}},Dyt={type:"video",elemToHtml:function(e,t){var n=e,r=n.src,o=r===void 0?"":r,i=n.poster,a=i===void 0?"":i,l=n.width,s=l===void 0?"auto":l,u=n.height,c=u===void 0?"auto":u,d=`<div data-w-e-type="video" data-w-e-is-void>
| `;return o.trim().indexOf("<iframe ")===0?d+=S9e(o,s,c):d+='<video poster="'+a+'" controls="true" width="'+s+'" height="'+c+'"><source src="'+o+'" type="video/mp4"/></video>',d+`
| </div>`}},Oyt=Object.keys||function(e){return x9e(e,Tk)},Tyt=sd?Object.defineProperties:function(e,t){ra(e);for(var n,r=Rh(t),o=Oyt(t),i=o.length,a=0;i>a;)yf.f(e,n=o[a++],r[n]);return e},QG=Vv("document","documentElement"),k9e=WG("IE_PROTO"),JG=function(){},D9e=function(e){return"<script>"+e+"<\/script>"},O9e=function(e){e.write(D9e("")),e.close();var t=e.parentWindow.Object;return e=null,t},Bk=function(){try{Ik=new ActiveXObject("htmlfile")}catch{}var e,t;Bk=typeof document<"u"?document.domain&&Ik?O9e(Ik):((t=H5("iframe")).style.display="none",QG.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write(D9e("document.F=Object")),e.close(),e.F):O9e(Ik);for(var n=Tk.length;n--;)delete Bk.prototype[Tk[n]];return Bk()};Dk[k9e]=!0;var ZG=Object.create||function(e,t){var n;return e!==null?(JG.prototype=ra(e),n=new JG,JG.prototype=null,n[k9e]=e):n=Bk(),t===void 0?n:Tyt(n,t)},eq=ai("unscopables"),tq=Array.prototype;tq[eq]==null&&yf.f(tq,eq,{configurable:!0,value:ZG(null)});var q5=function(e){tq[eq][e]=!0},Myt=A9e.includes;Kl({target:"Array",proto:!0},{includes:function(e){return Myt(this,e,arguments.length>1?arguments[1]:void 0)}}),q5("includes");var Nyt={selector:"iframe,video,p",preParseHtml:function(e){var t=Pe(e),n=t;if(C9e(t)==="p"){var r=t.children();if(r.length===1){var o=r[0],i=o.tagName.toLowerCase();["iframe","video"].includes(i)&&(n=Pe(o))}}var a=C9e(n);if(a!=="iframe"&&a!=="video"||n.parent().attr("data-w-e-type")==="video")return n[0];var l=Pe('<div data-w-e-type="video" data-w-e-is-void></div>');return l.append(n),l[0]}},T9e=Vn(Vn.bind),K5=function(e,t){return Ih(e),t===void 0?e:T9e?T9e(e,t):function(){return e.apply(t,arguments)}},Pk=Array.isArray||function(e){return ud(e)=="Array"},M9e=function(){},Fyt=[],N9e=Vv("Reflect","construct"),nq=/^\s*(?:class|function)\b/,Ryt=Vn(nq.exec),Iyt=!nq.exec(M9e),Y5=function(e){if(!Xr(e))return!1;try{return N9e(M9e,Fyt,e),!0}catch{return!1}},rq=!N9e||io(function(){var e;return Y5(Y5.call)||!Y5(Object)||!Y5(function(){e=!0})||e})?function(e){if(!Xr(e))return!1;switch(Fk(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return Iyt||!!Ryt(nq,kk(e))}:Y5,Byt=ai("species"),F9e=Ht.Array,Pyt=function(e,t){return new(function(n){var r;return Pk(n)&&(r=n.constructor,(rq(r)&&(r===F9e||Pk(r.prototype))||bo(r)&&(r=r[Byt])===null)&&(r=void 0)),r===void 0?F9e:r}(e))(t===0?0:t)},R9e=Vn([].push),Lh=function(e){var t=e==1,n=e==2,r=e==3,o=e==4,i=e==6,a=e==7,l=e==5||i;return function(s,u,c,d){for(var f,p,m=Ek(s),v=IG(m),g=K5(u,c),b=W5(v),y=0,w=d||Pyt,x=t?w(s,b):n||a?w(s,0):void 0;b>y;y++)if((l||y in v)&&(p=g(f=v[y],y,m),e))if(t)x[y]=p;else if(p)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:R9e(x,f)}else switch(e){case 4:return!1;case 7:R9e(x,f)}return i?-1:r||o?o:x}},oq={forEach:Lh(0),map:Lh(1),filter:Lh(2),some:Lh(3),every:Lh(4),find:Lh(5),findIndex:Lh(6),filterReject:Lh(7)},Lyt=oq.find,I9e=!0;"find"in[]&&Array(1).find(function(){I9e=!1}),Kl({target:"Array",proto:!0,forced:I9e},{find:function(e){return Lyt(this,e,arguments.length>1?arguments[1]:void 0)}}),q5("find");var jyt=KG?{}.toString:function(){return"[object "+Fk(this)+"]"};function B9e(e,t,n,r){return t===void 0&&(t=""),n===void 0&&(n="auto"),r===void 0&&(r="auto"),{type:"video",src:e,poster:t,width:n,height:r,children:[{text:""}]}}KG||Au(Object.prototype,"toString",jyt,{unsafe:!0});var P9e,iq,Vyt={selector:'div[data-w-e-type="video"]',parseElemHtml:function(e,t,n){var r=Pe(e),o="",i="",a="auto",l="auto",s=r.find("iframe");if(s.length>0)return a=s.attr("width")||"auto",l=s.attr("height")||"auto",B9e(o=s[0].outerHTML,i,a,l);var u=r.find("video");return(o=u.attr("src")||"")||u.length>0&&(o=u.find("source").attr("src")||""),a=u.attr("width")||"auto",l=u.attr("height")||"auto",B9e(o,i=u.attr("poster")||"",a,l)}},L9e=function(){var e=ra(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t},aq=Ht.RegExp,lq=io(function(){var e=aq("a","y");return e.lastIndex=2,e.exec("abcd")!=null}),zyt=lq||io(function(){return!aq("a","y").sticky}),Hyt={BROKEN_CARET:lq||io(function(){var e=aq("^r","gy");return e.lastIndex=2,e.exec("str")!=null}),MISSED_STICKY:zyt,UNSUPPORTED_Y:lq},$yt=Ht.RegExp,Uyt=io(function(){var e=$yt(".","s");return!(e.dotAll&&e.exec(`
| `)&&e.flags==="s")}),Wyt=Ht.RegExp,Gyt=io(function(){var e=Wyt("(?<a>b)","g");return e.exec("b").groups.a!=="b"||"b".replace(e,"$<a>c")!=="bc"}),qyt=Rs.get,Kyt=VG("native-string-replace",String.prototype.replace),Lk=RegExp.prototype.exec,sq=Lk,Yyt=Vn("".charAt),Xyt=Vn("".indexOf),Qyt=Vn("".replace),uq=Vn("".slice),cq=(iq=/b*/g,ao(Lk,P9e=/a/,"a"),ao(Lk,iq,"a"),P9e.lastIndex!==0||iq.lastIndex!==0),j9e=Hyt.BROKEN_CARET,dq=/()??/.exec("")[1]!==void 0;(cq||dq||j9e||Uyt||Gyt)&&(sq=function(e){var t,n,r,o,i,a,l,s=this,u=qyt(s),c=wu(e),d=u.raw;if(d)return d.lastIndex=s.lastIndex,t=ao(sq,d,c),s.lastIndex=d.lastIndex,t;var f=u.groups,p=j9e&&s.sticky,m=ao(L9e,s),v=s.source,g=0,b=c;if(p&&(m=Qyt(m,"y",""),Xyt(m,"g")===-1&&(m+="g"),b=uq(c,s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&Yyt(c,s.lastIndex-1)!==`
| `)&&(v="(?: "+v+")",b=" "+b,g++),n=new RegExp("^(?:"+v+")",m)),dq&&(n=new RegExp("^"+v+"$(?!\\s)",m)),cq&&(r=s.lastIndex),o=ao(Lk,p?n:s,b),p?o?(o.input=uq(o.input,g),o[0]=uq(o[0],g),o.index=s.lastIndex,s.lastIndex+=o[0].length):s.lastIndex=0:cq&&o&&(s.lastIndex=s.global?o.index+o[0].length:r),dq&&o&&o.length>1&&ao(Kyt,o[0],n,function(){for(i=1;i<arguments.length-2;i++)arguments[i]===void 0&&(o[i]=void 0)}),o&&f)for(o.groups=a=ZG(null),i=0;i<f.length;i++)a[(l=f[i])[0]]=o[l[1]];return o});var jk=sq;Kl({target:"RegExp",proto:!0,forced:/./.exec!==jk},{exec:jk});var fq=Function.prototype,V9e=fq.apply,Jyt=fq.bind,z9e=fq.call,H9e=typeof Reflect=="object"&&Reflect.apply||(Jyt?z9e.bind(V9e):function(){return z9e.apply(V9e,arguments)}),$9e=(ai("species"),RegExp.prototype),Zyt=Vn("".charAt),U9e=Vn("".charCodeAt),ebt=Vn("".slice),W9e=function(e){return function(t,n){var r,o,i=wu(P5(t)),a=Ok(n),l=i.length;return a<0||a>=l?e?"":void 0:(r=U9e(i,a))<55296||r>56319||a+1===l||(o=U9e(i,a+1))<56320||o>57343?e?Zyt(i,a):r:e?ebt(i,a,a+2):o-56320+(r-55296<<10)+65536}},G9e={codeAt:W9e(!1),charAt:W9e(!0)},tbt=G9e.charAt,nbt=function(e,t,n){return t+(n?tbt(e,t).length:1)},rbt=Math.floor,pq=Vn("".charAt),obt=Vn("".replace),hq=Vn("".slice),ibt=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,abt=/\$([$&'`]|\d{1,2})/g,lbt=function(e,t,n,r,o,i){var a=n+e.length,l=r.length,s=abt;return o!==void 0&&(o=Ek(o),s=ibt),obt(i,s,function(u,c){var d;switch(pq(c,0)){case"$":return"$";case"&":return e;case"`":return hq(t,0,n);case"'":return hq(t,a);case"<":d=o[hq(c,1,-1)];break;default:var f=+c;if(f===0)return u;if(f>l){var p=rbt(f/10);return p===0?u:p<=l?r[p-1]===void 0?pq(c,1):r[p-1]+pq(c,1):u}d=r[f-1]}return d===void 0?"":d})},sbt=Ht.TypeError,ubt=function(e,t){var n=e.exec;if(Xr(n)){var r=ao(n,e,t);return r!==null&&ra(r),r}if(ud(e)==="RegExp")return ao(jk,e,t);throw sbt("RegExp#exec called on incompatible receiver")},vq=ai("replace"),cbt=Math.max,dbt=Math.min,fbt=Vn([].concat),mq=Vn([].push),q9e=Vn("".indexOf),K9e=Vn("".slice),pbt="a".replace(/./,"$0")==="$0",Y9e=!!/./[vq]&&/./[vq]("a","$0")==="";function X9e(e){return e+"-"+q2e()}(function(e,t,n){var r=ai(e),o=!io(function(){var s={};return s[r]=function(){return 7},""[e](s)!=7}),i=o&&!io(function(){var s=!1,u=/a/;return u.exec=function(){return s=!0,null},u[r](""),!s});if(!o||!i||n){var a=Vn(/./[r]),l=function(s,u,c){var d=Y9e?"$":"$0";return[function(f,p){var m=P5(this),v=f==null?void 0:V5(f,vq);return v?ao(v,f,m,p):ao(u,wu(m),f,p)},function(f,p){var m=ra(this),v=wu(f);if(typeof p=="string"&&q9e(p,d)===-1&&q9e(p,"$<")===-1){var g=c(u,m,v,p);if(g.done)return g.value}var b=Xr(p);b||(p=wu(p));var y=m.global;if(y){var w=m.unicode;m.lastIndex=0}for(var x=[];;){var _=ubt(m,v);if(_===null||(mq(x,_),!y))break;wu(_[0])===""&&(m.lastIndex=nbt(v,y9e(m.lastIndex),w))}for(var E,C="",T=0,k=0;k<x.length;k++){for(var I=wu((_=x[k])[0]),O=cbt(dbt(Ok(_.index),v.length),0),F=[],N=1;N<_.length;N++)mq(F,(E=_[N])===void 0?E:String(E));var B=_.groups;if(b){var P=fbt([I],F,O,v);B!==void 0&&mq(P,B);var V=wu(H9e(p,void 0,P))}else V=lbt(I,v,O,F,B,p);O>=T&&(C+=K9e(v,T,O)+V,T=O+I.length)}return C+K9e(v,T)}]}(0,""[e],function(s,u,c,d,f){var p=Vn(s),m=u.exec;return m===jk||m===$9e.exec?o&&!f?{done:!0,value:a(u,c,d)}:{done:!0,value:p(c,u,d)}:{done:!1}});Au(String.prototype,e,l[0]),Au($9e,r,l[1])}})("replace",0,!!io(function(){var e=/./;return e.exec=function(){var t=[];return t.groups={a:"7"},t},"".replace(e,"$<a>")!=="7"})||!pbt||Y9e);var Vk=Ht.Promise,zk=function(e,t,n){for(var r in t)Au(e,r,t[r],n);return e},hbt=Ht.String,vbt=Ht.TypeError,Ty=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=Vn(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),t=n instanceof Array}catch{}return function(r,o){return ra(r),function(i){if(typeof i=="object"||Xr(i))return i;throw vbt("Can't set "+hbt(i)+" as a prototype")}(o),t?e(r,o):r.__proto__=o,r}}():void 0),mbt=yf.f,Q9e=ai("toStringTag"),Hk=function(e,t,n){e&&!Ei(e=n?e:e.prototype,Q9e)&&mbt(e,Q9e,{configurable:!0,value:t})},J9e=ai("species"),gbt=Ht.TypeError,gq=function(e,t){if(L5(t,e))return e;throw gbt("Incorrect invocation")},My={},ybt=ai("iterator"),bbt=Array.prototype,Abt=ai("iterator"),Z9e=function(e){if(e!=null)return V5(e,Abt)||V5(e,"@@iterator")||My[Fk(e)]},wbt=Ht.TypeError,exe=function(e,t,n){var r,o;ra(e);try{if(!(r=V5(e,"return"))){if(t==="throw")throw n;return n}r=ao(r,e)}catch(i){o=!0,r=i}if(t==="throw")throw n;if(o)throw r;return ra(r),n},xbt=Ht.TypeError,$k=function(e,t){this.stopped=e,this.result=t},txe=$k.prototype,Uk=function(e,t,n){var r,o,i,a,l,s,u,c,d=n&&n.that,f=!(!n||!n.AS_ENTRIES),p=!(!n||!n.IS_ITERATOR),m=!(!n||!n.INTERRUPTED),v=K5(t,d),g=function(y){return r&&exe(r,"normal",y),new $k(!0,y)},b=function(y){return f?(ra(y),m?v(y[0],y[1],g):v(y[0],y[1])):m?v(y,g):v(y)};if(p)r=e;else{if(!(o=Z9e(e)))throw xbt(_k(e)+" is not iterable");if((c=o)!==void 0&&(My.Array===c||bbt[ybt]===c)){for(i=0,a=W5(e);a>i;i++)if((l=b(e[i]))&&L5(txe,l))return l;return new $k(!1)}r=function(y,w){var x=arguments.length<2?Z9e(y):w;if(Ih(x))return ra(ao(x,y));throw wbt(_k(y)+" is not iterable")}(e,o)}for(s=r.next;!(u=ao(s,r)).done;){try{l=b(u.value)}catch(y){exe(r,"throw",y)}if(typeof l=="object"&&l&&L5(txe,l))return l}return new $k(!1)},nxe=ai("iterator"),rxe=!1;try{var _bt=0,oxe={next:function(){return{done:!!_bt++}},return:function(){rxe=!0}};oxe[nxe]=function(){return this},Array.from(oxe,function(){throw 2})}catch{}var X5,Ny,ixe,yq,axe=function(e,t){if(!rxe)return!1;var n=!1;try{var r={};r[nxe]=function(){return{next:function(){return{done:n=!0}}}},e(r)}catch{}return n},Ebt=Ht.TypeError,Cbt=ai("species"),lxe=Vn([].slice),sxe=/(?:ipad|iphone|ipod).*applewebkit/i.test(ky),jh=ud(Ht.process)=="process",bq=Ht.setImmediate,Aq=Ht.clearImmediate,Sbt=Ht.process,wq=Ht.Dispatch,kbt=Ht.Function,uxe=Ht.MessageChannel,Dbt=Ht.String,xq=0,Q5={};try{X5=Ht.location}catch{}var _q=function(e){if(Ei(Q5,e)){var t=Q5[e];delete Q5[e],t()}},Eq=function(e){return function(){_q(e)}},cxe=function(e){_q(e.data)},dxe=function(e){Ht.postMessage(Dbt(e),X5.protocol+"//"+X5.host)};bq&&Aq||(bq=function(e){var t=lxe(arguments,1);return Q5[++xq]=function(){H9e(Xr(e)?e:kbt(e),void 0,t)},Ny(xq),xq},Aq=function(e){delete Q5[e]},jh?Ny=function(e){Sbt.nextTick(Eq(e))}:wq&&wq.now?Ny=function(e){wq.now(Eq(e))}:uxe&&!sxe?(yq=(ixe=new uxe).port2,ixe.port1.onmessage=cxe,Ny=K5(yq.postMessage,yq)):Ht.addEventListener&&Xr(Ht.postMessage)&&!Ht.importScripts&&X5&&X5.protocol!=="file:"&&!io(dxe)?(Ny=dxe,Ht.addEventListener("message",cxe,!1)):Ny="onreadystatechange"in H5("script")?function(e){QG.appendChild(H5("script")).onreadystatechange=function(){QG.removeChild(this),_q(e)}}:function(e){setTimeout(Eq(e),0)});var J5,$v,Z5,Fy,Cq,Sq,kq,fxe,pxe={set:bq,clear:Aq},Obt=/ipad|iphone|ipod/i.test(ky)&&Ht.Pebble!==void 0,Tbt=/web0s(?!.*chrome)/i.test(ky),Mbt=UG.f,Dq=pxe.set,hxe=Ht.MutationObserver||Ht.WebKitMutationObserver,vxe=Ht.document,mxe=Ht.process,Wk=Ht.Promise,gxe=Mbt(Ht,"queueMicrotask"),yxe=gxe&&gxe.value;yxe||(J5=function(){var e,t;for(jh&&(e=mxe.domain)&&e.exit();$v;){t=$v.fn,$v=$v.next;try{t()}catch(n){throw $v?Fy():Z5=void 0,n}}Z5=void 0,e&&e.enter()},sxe||jh||Tbt||!hxe||!vxe?!Obt&&Wk&&Wk.resolve?((kq=Wk.resolve(void 0)).constructor=Wk,fxe=K5(kq.then,kq),Fy=function(){fxe(J5)}):jh?Fy=function(){mxe.nextTick(J5)}:(Dq=K5(Dq,Ht),Fy=function(){Dq(J5)}):(Cq=!0,Sq=vxe.createTextNode(""),new hxe(J5).observe(Sq,{characterData:!0}),Fy=function(){Sq.data=Cq=!Cq}));var Oq,bxe,Axe,wxe,xxe=yxe||function(e){var t={fn:e,next:void 0};Z5&&(Z5.next=t),$v||($v=t,Fy()),Z5=t},Nbt=function(e){var t,n;this.promise=new e(function(r,o){if(t!==void 0||n!==void 0)throw TypeError("Bad Promise constructor");t=r,n=o}),this.resolve=Ih(t),this.reject=Ih(n)},Tq={f:function(e){return new Nbt(e)}},Mq=function(e){try{return{error:!1,value:e()}}catch(t){return{error:!0,value:t}}},Fbt=typeof window=="object",_xe=pxe.set,Rbt=ai("species"),bf="Promise",Exe=Rs.getterFor(bf),Ibt=Rs.set,Bbt=Rs.getterFor(bf),Uv=Vk&&Vk.prototype,cd=Vk,eA=Uv,Cxe=Ht.TypeError,Nq=Ht.document,Fq=Ht.process,Ry=Tq.f,Pbt=Ry,Lbt=!!(Nq&&Nq.createEvent&&Ht.dispatchEvent),Sxe=Xr(Ht.PromiseRejectionEvent),kxe=!1,tA=Nk(bf,function(){var e=kk(cd),t=e!==String(cd);if(!t&&j5===66)return!0;if(j5>=51&&/native code/.test(e))return!1;var n=new cd(function(o){o(1)}),r=function(o){o(function(){},function(){})};return(n.constructor={})[Rbt]=r,!(kxe=n.then(function(){})instanceof r)||!t&&Fbt&&!Sxe}),jbt=tA||!axe(function(e){cd.all(e).catch(function(){})}),Dxe=function(e){var t;return!(!bo(e)||!Xr(t=e.then))&&t},Rq=function(e,t){if(!e.notified){e.notified=!0;var n=e.reactions;xxe(function(){for(var r=e.value,o=e.state==1,i=0;n.length>i;){var a,l,s,u=n[i++],c=o?u.ok:u.fail,d=u.resolve,f=u.reject,p=u.domain;try{c?(o||(e.rejection===2&&zbt(e),e.rejection=1),c===!0?a=r:(p&&p.enter(),a=c(r),p&&(p.exit(),s=!0)),a===u.promise?f(Cxe("Promise-chain cycle")):(l=Dxe(a))?ao(l,a,d,f):d(a)):f(r)}catch(m){p&&!s&&p.exit(),f(m)}}e.reactions=[],e.notified=!1,t&&!e.rejection&&Vbt(e)})}},Oxe=function(e,t,n){var r,o;Lbt?((r=Nq.createEvent("Event")).promise=t,r.reason=n,r.initEvent(e,!1,!0),Ht.dispatchEvent(r)):r={promise:t,reason:n},!Sxe&&(o=Ht["on"+e])?o(r):e==="unhandledrejection"&&function(i,a){var l=Ht.console;l&&l.error&&(arguments.length==1?l.error(i):l.error(i,a))}("Unhandled promise rejection",n)},Vbt=function(e){ao(_xe,Ht,function(){var t,n=e.facade,r=e.value;if(Txe(e)&&(t=Mq(function(){jh?Fq.emit("unhandledRejection",r,n):Oxe("unhandledrejection",n,r)}),e.rejection=jh||Txe(e)?2:1,t.error))throw t.value})},Txe=function(e){return e.rejection!==1&&!e.parent},zbt=function(e){ao(_xe,Ht,function(){var t=e.facade;jh?Fq.emit("rejectionHandled",t):Oxe("rejectionhandled",t,e.value)})},Iy=function(e,t,n){return function(r){e(t,r,n)}},By=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=2,Rq(e,!0))},Iq=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw Cxe("Promise can't be resolved itself");var r=Dxe(t);r?xxe(function(){var o={done:!1};try{ao(r,t,Iy(Iq,o,e),Iy(By,o,e))}catch(i){By(o,i,e)}}):(e.value=t,e.state=1,Rq(e,!1))}catch(o){By({done:!1},o,e)}}};if(tA&&(eA=(cd=function(e){gq(this,eA),Ih(e),ao(Oq,this);var t=Exe(this);try{e(Iy(Iq,t),Iy(By,t))}catch(n){By(t,n)}}).prototype,(Oq=function(e){Ibt(this,{type:bf,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=zk(eA,{then:function(e,t){var n=Bbt(this),r=n.reactions,o=Ry(function(i,a){var l,s=ra(i).constructor;return s===void 0||(l=ra(s)[Cbt])==null?a:function(u){if(rq(u))return u;throw Ebt(_k(u)+" is not a constructor")}(l)}(this,cd));return o.ok=!Xr(e)||e,o.fail=Xr(t)&&t,o.domain=jh?Fq.domain:void 0,n.parent=!0,r[r.length]=o,n.state!=0&&Rq(n,!1),o.promise},catch:function(e){return this.then(void 0,e)}}),bxe=function(){var e=new Oq,t=Exe(e);this.promise=e,this.resolve=Iy(Iq,t),this.reject=Iy(By,t)},Tq.f=Ry=function(e){return e===cd||e===Axe?new bxe(e):Pbt(e)},Xr(Vk)&&Uv!==Object.prototype)){wxe=Uv.then,kxe||(Au(Uv,"then",function(e,t){var n=this;return new cd(function(r,o){ao(wxe,n,r,o)}).then(e,t)},{unsafe:!0}),Au(Uv,"catch",eA.catch,{unsafe:!0}));try{delete Uv.constructor}catch{}Ty&&Ty(Uv,eA)}function nA(e,t,n){return n===void 0&&(n=""),yk(this,0,void 0,function(){var r,o,i,a,l,s,u;return bk(this,function(c){switch(c.label){case 0:return t?(e.restoreSelection(),r=e.getMenuConfig("insertVideo"),o=r.onInsertedVideo,i=r.checkVideo,a=r.parseVideoSrc,[4,i(t,n)]):[2];case 1:return typeof(l=c.sent())=="string"?(e.alert(l,"error"),[2]):l==null?[2]:[4,a(t)];case 2:return(s=c.sent()).trim().indexOf("<iframe ")!==0&&(s=s.replace(/</g,"<").replace(/>/g,">")),u={type:"video",src:s,poster:n,children:[{text:""}]},Promise.resolve().then(function(){et.insertNodes(e,u)}),o(u),[2]}})})}function Bq(){return X9e("w-e-insert-video")}Kl({global:!0,wrap:!0,forced:tA},{Promise:cd}),Hk(cd,bf,!1),function(){var e=Vv("Promise"),t=yf.f;sd&&e&&!e[J9e]&&t(e,J9e,{configurable:!0,get:function(){return this}})}(),Axe=Vv(bf),Kl({target:bf,stat:!0,forced:tA},{reject:function(e){var t=Ry(this);return ao(t.reject,void 0,e),t.promise}}),Kl({target:bf,stat:!0,forced:tA},{resolve:function(e){return function(t,n){if(ra(t),bo(n)&&n.constructor===t)return n;var r=Tq.f(t);return(0,r.resolve)(n),r.promise}(this,e)}}),Kl({target:bf,stat:!0,forced:jbt},{all:function(e){var t=this,n=Ry(t),r=n.resolve,o=n.reject,i=Mq(function(){var a=Ih(t.resolve),l=[],s=0,u=1;Uk(e,function(c){var d=s++,f=!1;u++,ao(a,t,c).then(function(p){f||(f=!0,l[d]=p,--u||r(l))},o)}),--u||r(l)});return i.error&&o(i.value),n.promise},race:function(e){var t=this,n=Ry(t),r=n.reject,o=Mq(function(){var i=Ih(t.resolve);Uk(e,function(a){ao(i,t,a).then(n.resolve,r)})});return o.error&&r(o.value),n.promise}});var Hbt=function(){function e(){this.title=jt("videoModule.insertVideo"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M981.184 160.096C837.568 139.456 678.848 128 512 128S186.432 139.456 42.816 160.096C15.296 267.808 0 386.848 0 512s15.264 244.16 42.816 351.904C186.464 884.544 345.152 896 512 896s325.568-11.456 469.184-32.096C1008.704 756.192 1024 637.152 1024 512s-15.264-244.16-42.816-351.904zM384 704V320l320 192-320 192z"></path></svg>',this.tag="button",this.showModal=!0,this.modalWidth=320,this.$content=null,this.srcInputId=Bq(),this.posterInputId=Bq(),this.buttonId=Bq()}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.exec=function(t,n){},e.prototype.isDisabled=function(t){var n=t.selection;return n==null||!ct.isCollapsed(n)||!!Re.getSelectedElems(t).some(function(r){var o=Re.getNodeType(r);return o==="pre"||o==="list-item"||!!t.isVoid(r)})},e.prototype.getModalPositionNode=function(t){return null},e.prototype.getModalContentElem=function(t){var n=this,r=this,o=r.srcInputId,i=r.posterInputId,a=r.buttonId,l=jv(Ds(jt("videoModule.videoSrc"),o,jt("videoModule.videoSrcPlaceHolder")),2),s=l[0],u=l[1],c=jv(Ds(jt("videoModule.videoPoster"),i,jt("videoModule.videoPosterPlaceHolder")),2),d=c[0],f=c[1],p=Pe(u),m=Pe(f),v=jv(Z2(a,jt("videoModule.ok")),1)[0];if(this.$content==null){var g=Pe("<div></div>");g.on("click","#"+a,function(y){return yk(n,0,void 0,function(){var w,x;return bk(this,function(_){switch(_.label){case 0:return y.preventDefault(),w=g.find("#"+o).val().trim(),x=g.find("#"+i).val().trim(),[4,nA(t,w,x)];case 1:return _.sent(),t.hidePanelOrModal(),[2]}})})}),this.$content=g}var b=this.$content;return b.empty(),b.append(s),b.append(d),b.append(v),p.val(""),m.val(""),setTimeout(function(){p.focus()}),b[0]},e}(),$bt=Vn([].join),Ubt=IG!=Object,Wbt=function(){var e=[].join;return!!e&&io(function(){e.call(null,",",1)})}();Kl({target:"Array",proto:!0,forced:Ubt||!Wbt},{join:function(e){return $bt(Rh(this),e===void 0?",":e)}});var Wv,Mxe,Nxe,Gbt=!io(function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}),Fxe=WG("IE_PROTO"),Pq=Ht.Object,qbt=Pq.prototype,Gk=Gbt?Pq.getPrototypeOf:function(e){var t=Ek(e);if(Ei(t,Fxe))return t[Fxe];var n=t.constructor;return Xr(n)&&t instanceof n?n.prototype:t instanceof Pq?qbt:null},Lq=ai("iterator"),Rxe=!1;[].keys&&("next"in(Nxe=[].keys())?(Mxe=Gk(Gk(Nxe)))!==Object.prototype&&(Wv=Mxe):Rxe=!0);var Kbt=Wv==null||io(function(){var e={};return Wv[Lq].call(e)!==e});Kbt&&(Wv={}),Xr(Wv[Lq])||Au(Wv,Lq,function(){return this});var jq={IteratorPrototype:Wv,BUGGY_SAFARI_ITERATORS:Rxe},Ybt=jq.IteratorPrototype,Xbt=function(){return this},Qbt=Oy.PROPER,Jbt=Oy.CONFIGURABLE,Ixe=jq.IteratorPrototype,Vq=jq.BUGGY_SAFARI_ITERATORS,rA=ai("iterator"),Zbt=function(){return this},Bxe=function(e,t,n,r,o,i,a){(function(g,b,y){var w=b+" Iterator";g.prototype=ZG(Ybt,{next:xk(1,y)}),Hk(g,w,!1),My[w]=Xbt})(n,t,r);var l,s,u=function(g){if(g===o&&m)return m;if(!Vq&&g in f)return f[g];switch(g){case"keys":case"values":case"entries":return function(){return new n(this,g)}}return function(){return new n(this)}},c=t+" Iterator",d=!1,f=e.prototype,p=f[rA]||f["@@iterator"]||o&&f[o],m=!Vq&&p||u(o),v=t=="Array"&&f.entries||p;return v&&(l=Gk(v.call(new e)))!==Object.prototype&&l.next&&(Gk(l)!==Ixe&&(Ty?Ty(l,Ixe):Xr(l[rA])||Au(l,rA,Zbt)),Hk(l,c,!0)),Qbt&&o=="values"&&p&&p.name!=="values"&&(Jbt?Ph(f,"name","values"):(d=!0,m=function(){return ao(p,this)})),o&&(s={values:u("values"),keys:u("keys"),entries:u("entries")},a||Kl({target:t,proto:!0,forced:Vq||d},s)),f[rA]!==m&&Au(f,rA,m,{name:o}),My[t]=m,s},e3t=Rs.set,t3t=Rs.getterFor("Array Iterator"),oA=Bxe(Array,"Array",function(e,t){e3t(this,{type:"Array Iterator",target:Rh(e),index:0,kind:t})},function(){var e=t3t(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,{value:void 0,done:!0}):n=="keys"?{value:r,done:!1}:n=="values"?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}},"values");My.Arguments=My.Array,q5("keys"),q5("values"),q5("entries");var n3t=G9e.charAt,r3t=Rs.set,o3t=Rs.getterFor("String Iterator");Bxe(String,"String",function(e){r3t(this,{type:"String Iterator",string:wu(e),index:0})},function(){var e,t=o3t(this),n=t.string,r=t.index;return r>=n.length?{value:void 0,done:!0}:(e=n3t(n,r),t.index+=e.length,{value:e,done:!1})});var Pxe=function(e,t,n){var r=HG(t);r in e?yf.f(e,r,xk(0,n)):e[r]=n},i3t=Ht.Array,a3t=Math.max,Lxe=Mk.f,jxe=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],l3t={f:function(e){return jxe&&ud(e)=="Window"?function(t){try{return Lxe(t)}catch{return function(r){for(var o=W5(r),i=U5(void 0,o),a=U5(o,o),l=i3t(a3t(a-i,0)),s=0;i<a;i++,s++)Pxe(l,s,r[i]);return l.length=s,l}(jxe)}}(e):Lxe(Rh(e))}},Vxe=io(function(){if(typeof ArrayBuffer=="function"){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}),qk=Object.isExtensible,Gv=io(function(){qk(1)})||Vxe?function(e){return!!bo(e)&&(!Vxe||ud(e)!="ArrayBuffer")&&(!qk||qk(e))}:qk,s3t=!io(function(){return Object.isExtensible(Object.preventExtensions({}))}),zq=MG(function(e){var t=yf.f,n=!1,r=zG("meta"),o=0,i=function(l){t(l,r,{value:{objectID:"O"+o++,weakData:{}}})},a=e.exports={enable:function(){a.enable=function(){},n=!0;var l=Mk.f,s=Vn([].splice),u={};u[r]=1,l(u).length&&(Mk.f=function(c){for(var d=l(c),f=0,p=d.length;f<p;f++)if(d[f]===r){s(d,f,1);break}return d},Kl({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:l3t.f}))},fastKey:function(l,s){if(!bo(l))return typeof l=="symbol"?l:(typeof l=="string"?"S":"P")+l;if(!Ei(l,r)){if(!Gv(l))return"F";if(!s)return"E";i(l)}return l[r].objectID},getWeakData:function(l,s){if(!Ei(l,r)){if(!Gv(l))return!0;if(!s)return!1;i(l)}return l[r].weakData},onFreeze:function(l){return s3t&&n&&Gv(l)&&!Ei(l,r)&&i(l),l}};Dk[r]=!0}),Kk=zq.getWeakData,u3t=Rs.set,c3t=Rs.getterFor,d3t=oq.find,f3t=oq.findIndex,p3t=Vn([].splice),h3t=0,Yk=function(e){return e.frozen||(e.frozen=new zxe)},zxe=function(){this.entries=[]},Hq=function(e,t){return d3t(e.entries,function(n){return n[0]===t})};zxe.prototype={get:function(e){var t=Hq(this,e);if(t)return t[1]},has:function(e){return!!Hq(this,e)},set:function(e,t){var n=Hq(this,e);n?n[1]=t:this.entries.push([e,t])},delete:function(e){var t=f3t(this.entries,function(n){return n[0]===e});return~t&&p3t(this.entries,t,1),!!~t}};var iA,Hxe={getConstructor:function(e,t,n,r){var o=e(function(s,u){gq(s,i),u3t(s,{type:t,id:h3t++,frozen:void 0}),u!=null&&Uk(u,s[r],{that:s,AS_ENTRIES:n})}),i=o.prototype,a=c3t(t),l=function(s,u,c){var d=a(s),f=Kk(ra(u),!0);return f===!0?Yk(d).set(u,c):f[d.id]=c,s};return zk(i,{delete:function(s){var u=a(this);if(!bo(s))return!1;var c=Kk(s);return c===!0?Yk(u).delete(s):c&&Ei(c,u.id)&&delete c[u.id]},has:function(s){var u=a(this);if(!bo(s))return!1;var c=Kk(s);return c===!0?Yk(u).has(s):c&&Ei(c,u.id)}}),zk(i,n?{get:function(s){var u=a(this);if(bo(s)){var c=Kk(s);return c===!0?Yk(u).get(s):c?c[u.id]:void 0}},set:function(s,u){return l(this,s,u)}}:{add:function(s){return l(this,s,!0)}}),o}},Xk=Rs.enforce,v3t=!Ht.ActiveXObject&&"ActiveXObject"in Ht,$xe=function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}},m3t=function(e,t,n){var r=e.indexOf("Map")!==-1,o=e.indexOf("Weak")!==-1,i=r?"set":"add",a=Ht[e],l=a&&a.prototype,s=a,u={},c=function(g){var b=Vn(l[g]);Au(l,g,g=="add"?function(y){return b(this,y===0?0:y),this}:g=="delete"?function(y){return!(o&&!bo(y))&&b(this,y===0?0:y)}:g=="get"?function(y){return o&&!bo(y)?void 0:b(this,y===0?0:y)}:g=="has"?function(y){return!(o&&!bo(y))&&b(this,y===0?0:y)}:function(y,w){return b(this,y===0?0:y,w),this})};if(Nk(e,!Xr(a)||!(o||l.forEach&&!io(function(){new a().entries().next()}))))s=n.getConstructor(t,e,r,i),zq.enable();else if(Nk(e,!0)){var d=new s,f=d[i](o?{}:-0,1)!=d,p=io(function(){d.has(1)}),m=axe(function(g){new a(g)}),v=!o&&io(function(){for(var g=new a,b=5;b--;)g[i](b,b);return!g.has(-0)});m||((s=t(function(g,b){gq(g,l);var y=function(w,x,_){var E,C;return Ty&&Xr(E=x.constructor)&&E!==_&&bo(C=E.prototype)&&C!==_.prototype&&Ty(w,C),w}(new a,g,s);return b!=null&&Uk(b,y[i],{that:y,AS_ENTRIES:r}),y})).prototype=l,l.constructor=s),(p||v)&&(c("delete"),c("has"),r&&c("get")),(v||f)&&c(i),o&&l.clear&&delete l.clear}return u[e]=s,Kl({global:!0,forced:s!=a},u),Hk(s,e),o||n.setStrong(s,e,r),s}("WeakMap",$xe,Hxe);if(h9e&&v3t){iA=Hxe.getConstructor($xe,"WeakMap",!0),zq.enable();var aA=m3t.prototype,Uxe=Vn(aA.delete),Qk=Vn(aA.has),Wxe=Vn(aA.get),Gxe=Vn(aA.set);zk(aA,{delete:function(e){if(bo(e)&&!Gv(e)){var t=Xk(this);return t.frozen||(t.frozen=new iA),Uxe(this,e)||t.frozen.delete(e)}return Uxe(this,e)},has:function(e){if(bo(e)&&!Gv(e)){var t=Xk(this);return t.frozen||(t.frozen=new iA),Qk(this,e)||t.frozen.has(e)}return Qk(this,e)},get:function(e){if(bo(e)&&!Gv(e)){var t=Xk(this);return t.frozen||(t.frozen=new iA),Qk(this,e)?Wxe(this,e):t.frozen.get(e)}return Wxe(this,e)},set:function(e,t){if(bo(e)&&!Gv(e)){var n=Xk(this);n.frozen||(n.frozen=new iA),Qk(this,e)?Gxe(this,e,t):n.frozen.set(e,t)}else Gxe(this,e,t);return this}})}var qxe={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},$q=H5("span").classList,Kxe=$q&&$q.constructor&&$q.constructor.prototype,g3t=Kxe===Object.prototype?void 0:Kxe,Uq=ai("iterator"),Yxe=ai("toStringTag"),Wq=oA.values,Xxe=function(e,t){if(e){if(e[Uq]!==Wq)try{Ph(e,Uq,Wq)}catch{e[Uq]=Wq}if(e[Yxe]||Ph(e,Yxe,t),qxe[t]){for(var n in oA)if(e[n]!==oA[n])try{Ph(e,n,oA[n])}catch{e[n]=oA[n]}}}};for(var Gq in qxe)Xxe(Ht[Gq]&&Ht[Gq].prototype,Gq);Xxe(g3t,"DOMTokenList");var y3t=Oy.EXISTS,b3t=yf.f,Qxe=Function.prototype,A3t=Vn(Qxe.toString),Jxe=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,w3t=Vn(Jxe.exec);sd&&!y3t&&b3t(Qxe,"name",{configurable:!0,get:function(){try{return w3t(Jxe,A3t(this))[1]}catch{return""}}});var x3t=ai("species"),_3t=j5>=51||!io(function(){var e=[];return(e.constructor={})[x3t]=function(){return{foo:1}},e.slice(Boolean).foo!==1}),E3t=ai("species"),qq=Ht.Array,C3t=Math.max;function Zxe(e){return e.getMenuConfig("uploadVideo")}Kl({target:"Array",proto:!0,forced:!_3t},{slice:function(e,t){var n,r,o,i=Rh(this),a=W5(i),l=U5(e,a),s=U5(t===void 0?a:t,a);if(Pk(i)&&(n=i.constructor,(rq(n)&&(n===qq||Pk(n.prototype))||bo(n)&&(n=n[E3t])===null)&&(n=void 0),n===qq||n===void 0))return lxe(i,l,s);for(r=new(n===void 0?qq:n)(C3t(s-l,0)),o=0;l<s;l++,o++)l in i&&Pxe(r,o,i[l]);return r.length=o,r}});var e_e=new WeakMap;function S3t(e,t){return yk(this,0,void 0,function(){var n,r,o,i;return bk(this,function(a){switch(a.label){case 0:return n=function(l){var s=e_e.get(l);if(s!=null)return s;var u=Zxe(l),c=u.onSuccess,d=u.onProgress,f=u.onFailed,p=u.customInsert,m=u.onError;return s=i6e(gk(gk({},u),{onProgress:function(v){l.showProgressBar(v),d&&d(v)},onSuccess:function(v,g){if(p)return p(g,function(T,k){return nA(l,T,k)}),void c(v,g);var b=g.errno,y=b===void 0?1:b,w=g.data,x=w===void 0?{}:w;if(y===0){var _=x.url,E=_===void 0?"":_,C=x.poster;nA(l,E,C===void 0?"":C),c(v,g)}else f(v,g)},onError:function(v,g,b){m(v,g,b)}})),e_e.set(l,s),s}(e),r=t.name,o=t.type,i=t.size,n.addFile({name:r,type:o,size:i,data:t}),[4,n.upload()];case 1:return a.sent(),[2]}})})}var k3t=function(){function e(){this.title=jt("videoModule.uploadVideo"),this.iconSvg='<svg viewBox="0 0 1056 1024"><path d="M805.902261 521.819882a251.441452 251.441452 0 0 0-251.011972 246.600033 251.051015 251.051015 0 1 0 502.023944 8.823877 253.237463 253.237463 0 0 0-251.011972-255.42391z m59.463561 240.001647v129.898403h-116.701631v-129.898403h-44.041298l101.279368-103.504859 101.279368 103.504859z" p-id="6802"></path><path d="M788.254507 0.000781H99.094092A98.663439 98.663439 0 0 0 0.001171 99.093701v590.067495a98.663439 98.663439 0 0 0 99.092921 99.092921h411.7549a266.434235 266.434235 0 0 1-2.186448-41.815807 275.843767 275.843767 0 0 1 275.180024-270.729042 270.650955 270.650955 0 0 1 103.504859 19.834201V99.093701A101.51363 101.51363 0 0 0 788.254507 0.000781zM295.054441 640.747004V147.507894l394.146189 246.600033z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.exec=function(t,n){var r=this.getMenuConfig(t),o=r.allowedFileTypes,i=o===void 0?[]:o,a=r.customBrowseAndUpload;if(a)a(function(c,d){return nA(t,c,d)});else{var l="";i.length>0&&(l='accept="'+i.join(", ")+'"');var s=Pe("body"),u=Pe('<input type="file" '+l+" multiple/>");u.hide(),s.append(u),u.click(),u.on("change",function(){var c=u[0].files;(function(d,f){var p,m;yk(this,0,void 0,function(){var v,g,b,y,w,x;return bk(this,function(_){switch(_.label){case 0:if(f==null)return[2];v=Array.prototype.slice.call(f),g=Zxe(d).customUpload,_.label=1;case 1:_.trys.push([1,9,10,15]),b=function(E){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var C,T=E[Symbol.asyncIterator];return T?T.call(E):(E=function(I){var O=typeof Symbol=="function"&&Symbol.iterator,F=O&&I[O],N=0;if(F)return F.call(I);if(I&&typeof I.length=="number")return{next:function(){return I&&N>=I.length&&(I=void 0),{value:I&&I[N++],done:!I}}};throw new TypeError(O?"Object is not iterable.":"Symbol.iterator is not defined.")}(E),C={},k("next"),k("throw"),k("return"),C[Symbol.asyncIterator]=function(){return this},C);function k(I){C[I]=E[I]&&function(O){return new Promise(function(F,N){(function(B,P,V,L){Promise.resolve(L).then(function(H){B({value:H,done:V})},P)})(F,N,(O=E[I](O)).done,O.value)})}}}(v),_.label=2;case 2:return[4,b.next()];case 3:return(y=_.sent()).done?[3,8]:(w=y.value,g?[4,g(w,function(E,C){return nA(d,E,C)})]:[3,5]);case 4:return _.sent(),[3,7];case 5:return[4,S3t(d,w)];case 6:_.sent(),_.label=7;case 7:return[3,2];case 8:return[3,15];case 9:return x=_.sent(),p={error:x},[3,15];case 10:return _.trys.push([10,,13,14]),y&&!y.done&&(m=b.return)?[4,m.call(b)]:[3,12];case 11:_.sent(),_.label=12;case 12:return[3,14];case 13:if(p)throw p.error;return[7];case 14:return[7];case 15:return[2]}})})})(t,c)})}},e.prototype.isDisabled=function(t){var n=t.selection;return n==null||!ct.isCollapsed(n)||!!Re.getSelectedElems(t).some(function(r){var o=Re.getNodeType(r);return o==="pre"||o==="list-item"||!!t.isVoid(r)})},e.prototype.getMenuConfig=function(t){return t.getMenuConfig("uploadVideo")},e}(),D3t=Oy.PROPER,Kq=RegExp.prototype,t_e=Kq.toString,O3t=Vn(L9e),T3t=io(function(){return t_e.call({source:"a",flags:"b"})!="/a/b"}),M3t=D3t&&t_e.name!="toString";function Yq(){return X9e("w-e-insert-video")}(T3t||M3t)&&Au(RegExp.prototype,"toString",function(){var e=ra(this),t=wu(e.source),n=e.flags;return"/"+t+"/"+wu(n===void 0&&L5(Kq,e)&&!("flags"in Kq)?O3t(e):n)},{unsafe:!0});var N3t=function(){function e(){this.title=jt("videoModule.editSize"),this.tag="button",this.showModal=!0,this.modalWidth=320,this.$content=null,this.widthInputId=Yq(),this.heightInputId=Yq(),this.buttonId=Yq()}return e.prototype.getSelectedVideoNode=function(t){return Re.getSelectedNodeByType(t,"video")},e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.exec=function(t,n){},e.prototype.isDisabled=function(t){return t.selection==null||this.getSelectedVideoNode(t)==null},e.prototype.getModalPositionNode=function(t){return this.getSelectedVideoNode(t)},e.prototype.getModalContentElem=function(t){var n=this,r=n.widthInputId,o=n.heightInputId,i=n.buttonId,a=jv(Ds(jt("videoModule.width"),r,"auto"),2),l=a[0],s=Pe(a[1]),u=jv(Ds(jt("videoModule.height"),o,"auto"),2),c=u[0],d=Pe(u[1]),f=jv(Z2(i,jt("videoModule.ok")),1)[0];if(this.$content==null){var p=Pe("<div></div>");p.on("click","#"+i,function(x){x.preventDefault();var _=p.find("#"+r).val().trim(),E=p.find("#"+o).val().trim(),C=parseInt(_),T=parseInt(E),k=C?C.toString():"auto",I=T?T.toString():"auto";t.restoreSelection(),et.setNodes(t,{width:k,height:I},{match:function(O){return Re.checkNodeType(O,"video")}}),t.hidePanelOrModal()}),this.$content=p}var m=this.$content;m.empty(),m.append(l),m.append(c),m.append(f);var v=this.getSelectedVideoNode(t);if(v==null)return m[0];var g=v.width,b=g===void 0?"auto":g,y=v.height,w=y===void 0?"auto":y;return s.val(b),d.val(w),setTimeout(function(){s.focus()}),m[0]},e}(),F3t={renderElems:[kyt],elemsToHtml:[Dyt],preParseHtml:[Nyt],parseElemsHtml:[Vyt],menus:[{key:"insertVideo",factory:function(){return new Hbt},config:{onInsertedVideo:function(e){},checkVideo:function(e,t){return!0},parseVideoSrc:function(e){return e}}},{key:"uploadVideo",factory:function(){return new k3t},config:{server:"",fieldName:"wangeditor-uploaded-video",maxFileSize:10485760,maxNumberOfFiles:5,allowedFileTypes:["video/*"],meta:{},metaWithUrl:!1,withCredentials:!1,timeout:3e4,onBeforeUpload:function(e){return e},onProgress:function(e){},onSuccess:function(e,t){},onFailed:function(e,t){console.error("'"+e.name+"' upload failed",t)},onError:function(e,t,n){console.error("'"+e.name+" upload error",t,n)}}},{key:"editVideoSize",factory:function(){return new N3t}}],editorPlugin:function(e){var t=e.isVoid,n=e.normalizeNode,r=e;return r.isVoid=function(o){return o.type==="video"||t(o)},r.normalizeNode=function(o){var i=jv(o,2),a=i[0],l=i[1];return Re.getNodeType(a)==="video"&&Re.isLastNode(r,a)&&et.insertNodes(r,Re.genEmptyParagraph(),{at:[l[0]+1]}),n([a,l])},r}};Ul("en",{uploadImgModule:{uploadImage:"Upload Image",uploadError:"{{fileName}} upload error"}}),Ul("zh-CN",{uploadImgModule:{uploadImage:"\u4E0A\u4F20\u56FE\u7247",uploadError:"{{fileName}} \u4E0A\u4F20\u51FA\u9519"}});var n_e=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Xq(e){var t={exports:{}};return e(t,t.exports),t.exports}var Vh,Jk,Zk=function(e){return e&&e.Math==Math&&e},zt=Zk(typeof globalThis=="object"&&globalThis)||Zk(typeof window=="object"&&window)||Zk(typeof self=="object"&&self)||Zk(typeof n_e=="object"&&n_e)||function(){return this}()||Function("return this")(),co=function(e){try{return!!e()}catch{return!0}},dd=!co(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),lA=Function.prototype.call,Ur=lA.bind?lA.bind(lA):function(){return lA.apply(lA,arguments)},r_e={}.propertyIsEnumerable,o_e=Object.getOwnPropertyDescriptor,R3t={f:o_e&&!r_e.call({1:2},1)?function(e){var t=o_e(this,e);return!!t&&t.enumerable}:r_e},eD=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},i_e=Function.prototype,Qq=i_e.bind,Jq=i_e.call,I3t=Qq&&Qq.bind(Jq),ur=Qq?function(e){return e&&I3t(Jq,e)}:function(e){return e&&function(){return Jq.apply(e,arguments)}},B3t=ur({}.toString),P3t=ur("".slice),ic=function(e){return P3t(B3t(e),8,-1)},Zq=zt.Object,L3t=ur("".split),eK=co(function(){return!Zq("z").propertyIsEnumerable(0)})?function(e){return ic(e)=="String"?L3t(e,""):Zq(e)}:Zq,j3t=zt.TypeError,sA=function(e){if(e==null)throw j3t("Can't call method on "+e);return e},zh=function(e){return eK(sA(e))},no=function(e){return typeof e=="function"},fo=function(e){return typeof e=="object"?e!==null:no(e)},qv=function(e,t){return arguments.length<2?function(n){return no(n)?n:void 0}(zt[e]):zt[e]&&zt[e][t]},uA=ur({}.isPrototypeOf),Py=qv("navigator","userAgent")||"",a_e=zt.process,l_e=zt.Deno,s_e=a_e&&a_e.versions||l_e&&l_e.version,u_e=s_e&&s_e.v8;u_e&&(Jk=(Vh=u_e.split("."))[0]>0&&Vh[0]<4?1:+(Vh[0]+Vh[1])),!Jk&&Py&&(!(Vh=Py.match(/Edge\/(\d+)/))||Vh[1]>=74)&&(Vh=Py.match(/Chrome\/(\d+)/))&&(Jk=+Vh[1]);var cA=Jk,tK=!!Object.getOwnPropertySymbols&&!co(function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&cA&&cA<41}),nK=tK&&!Symbol.sham&&typeof Symbol.iterator=="symbol",V3t=zt.Object,rK=nK?function(e){return typeof e=="symbol"}:function(e){var t=qv("Symbol");return no(t)&&uA(t.prototype,V3t(e))},z3t=zt.String,tD=function(e){try{return z3t(e)}catch{return"Object"}},H3t=zt.TypeError,Hh=function(e){if(no(e))return e;throw H3t(tD(e)+" is not a function")},dA=function(e,t){var n=e[t];return n==null?void 0:Hh(n)},$3t=zt.TypeError,U3t=Object.defineProperty,oK=function(e,t){try{U3t(zt,e,{value:t,configurable:!0,writable:!0})}catch{zt[e]=t}return t},$h=zt["__core-js_shared__"]||oK("__core-js_shared__",{}),iK=Xq(function(e){(e.exports=function(t,n){return $h[t]||($h[t]=n!==void 0?n:{})})("versions",[]).push({version:"3.19.3",mode:"global",copyright:"\xA9 2021 Denis Pushkarev (zloirock.ru)"})}),W3t=zt.Object,aK=function(e){return W3t(sA(e))},G3t=ur({}.hasOwnProperty),Ci=Object.hasOwn||function(e,t){return G3t(aK(e),t)},q3t=0,K3t=Math.random(),Y3t=ur(1 .toString),lK=function(e){return"Symbol("+(e===void 0?"":e)+")_"+Y3t(++q3t+K3t,36)},fA=iK("wks"),Kv=zt.Symbol,c_e=Kv&&Kv.for,X3t=nK?Kv:Kv&&Kv.withoutSetter||lK,li=function(e){if(!Ci(fA,e)||!tK&&typeof fA[e]!="string"){var t="Symbol."+e;tK&&Ci(Kv,e)?fA[e]=Kv[e]:fA[e]=nK&&c_e?c_e(t):X3t(t)}return fA[e]},Q3t=zt.TypeError,J3t=li("toPrimitive"),sK=function(e){var t=function(n){if(!fo(n)||rK(n))return n;var r,o=dA(n,J3t);if(o){if(r=Ur(o,n,"string"),!fo(r)||rK(r))return r;throw Q3t("Can't convert object to primitive value")}return function(i){var a,l;if(no(a=i.toString)&&!fo(l=Ur(a,i))||no(a=i.valueOf)&&!fo(l=Ur(a,i)))return l;throw $3t("Can't convert object to primitive value")}(n)}(e);return rK(t)?t:t+""},uK=zt.document,Z3t=fo(uK)&&fo(uK.createElement),pA=function(e){return Z3t?uK.createElement(e):{}},d_e=!dd&&!co(function(){return Object.defineProperty(pA("div"),"a",{get:function(){return 7}}).a!=7}),f_e=Object.getOwnPropertyDescriptor,cK={f:dd?f_e:function(e,t){if(e=zh(e),t=sK(t),d_e)try{return f_e(e,t)}catch{}if(Ci(e,t))return eD(!Ur(R3t.f,e,t),e[t])}},e4t=zt.String,t4t=zt.TypeError,oa=function(e){if(fo(e))return e;throw t4t(e4t(e)+" is not an object")},n4t=zt.TypeError,p_e=Object.defineProperty,Af={f:dd?p_e:function(e,t,n){if(oa(e),t=sK(t),oa(n),d_e)try{return p_e(e,t,n)}catch{}if("get"in n||"set"in n)throw n4t("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},fd=dd?function(e,t,n){return Af.f(e,t,eD(1,n))}:function(e,t,n){return e[t]=n,e},r4t=ur(Function.toString);no($h.inspectSource)||($h.inspectSource=function(e){return r4t(e)});var nD,hA,rD,oD=$h.inspectSource,h_e=zt.WeakMap,v_e=no(h_e)&&/native code/.test(oD(h_e)),m_e=iK("keys"),dK=function(e){return m_e[e]||(m_e[e]=lK(e))},iD={},fK=zt.TypeError,o4t=zt.WeakMap;if(v_e||$h.state){var Yv=$h.state||($h.state=new o4t),i4t=ur(Yv.get),g_e=ur(Yv.has),a4t=ur(Yv.set);nD=function(e,t){if(g_e(Yv,e))throw new fK("Object already initialized");return t.facade=e,a4t(Yv,e,t),t},hA=function(e){return i4t(Yv,e)||{}},rD=function(e){return g_e(Yv,e)}}else{var Ly=dK("state");iD[Ly]=!0,nD=function(e,t){if(Ci(e,Ly))throw new fK("Object already initialized");return t.facade=e,fd(e,Ly,t),t},hA=function(e){return Ci(e,Ly)?e[Ly]:{}},rD=function(e){return Ci(e,Ly)}}var Is={set:nD,get:hA,has:rD,enforce:function(e){return rD(e)?hA(e):nD(e,{})},getterFor:function(e){return function(t){var n;if(!fo(t)||(n=hA(t)).type!==e)throw fK("Incompatible receiver, "+e+" required");return n}}},y_e=Function.prototype,l4t=dd&&Object.getOwnPropertyDescriptor,pK=Ci(y_e,"name"),vA={EXISTS:pK,PROPER:pK&&(function(){}).name==="something",CONFIGURABLE:pK&&(!dd||dd&&l4t(y_e,"name").configurable)},xu=Xq(function(e){var t=vA.CONFIGURABLE,n=Is.get,r=Is.enforce,o=String(String).split("String");(e.exports=function(i,a,l,s){var u,c=!!s&&!!s.unsafe,d=!!s&&!!s.enumerable,f=!!s&&!!s.noTargetGet,p=s&&s.name!==void 0?s.name:a;no(l)&&(String(p).slice(0,7)==="Symbol("&&(p="["+String(p).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!Ci(l,"name")||t&&l.name!==p)&&fd(l,"name",p),(u=r(l)).source||(u.source=o.join(typeof p=="string"?p:""))),i!==zt?(c?!f&&i[a]&&(d=!0):delete i[a],d?i[a]=l:fd(i,a,l)):d?i[a]=l:oK(a,l)})(Function.prototype,"toString",function(){return no(this)&&n(this).source||oD(this)})}),s4t=Math.ceil,u4t=Math.floor,hK=function(e){var t=+e;return t!=t||t===0?0:(t>0?u4t:s4t)(t)},c4t=Math.max,d4t=Math.min,mA=function(e,t){var n=hK(e);return n<0?c4t(n+t,0):d4t(n,t)},f4t=Math.min,b_e=function(e){return e>0?f4t(hK(e),9007199254740991):0},gA=function(e){return b_e(e.length)},p4t=function(e){return function(t,n,r){var o,i=zh(t),a=gA(i),l=mA(r,a);if(e&&n!=n){for(;a>l;)if((o=i[l++])!=o)return!0}else for(;a>l;l++)if((e||l in i)&&i[l]===n)return e||l||0;return!e&&-1}}(!1),A_e=ur([].push),w_e=function(e,t){var n,r=zh(e),o=0,i=[];for(n in r)!Ci(iD,n)&&Ci(r,n)&&A_e(i,n);for(;t.length>o;)Ci(r,n=t[o++])&&(~p4t(i,n)||A_e(i,n));return i},aD=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],h4t=aD.concat("length","prototype"),lD={f:Object.getOwnPropertyNames||function(e){return w_e(e,h4t)}},v4t={f:Object.getOwnPropertySymbols},m4t=ur([].concat),g4t=qv("Reflect","ownKeys")||function(e){var t=lD.f(oa(e)),n=v4t.f;return n?m4t(t,n(e)):t},y4t=function(e,t){for(var n=g4t(t),r=Af.f,o=cK.f,i=0;i<n.length;i++){var a=n[i];Ci(e,a)||r(e,a,o(t,a))}},b4t=/#|\.prototype\./,yA=function(e,t){var n=w4t[A4t(e)];return n==_4t||n!=x4t&&(no(t)?co(t):!!t)},A4t=yA.normalize=function(e){return String(e).replace(b4t,".").toLowerCase()},w4t=yA.data={},x4t=yA.NATIVE="N",_4t=yA.POLYFILL="P",sD=yA,E4t=cK.f,pd=function(e,t){var n,r,o,i,a,l=e.target,s=e.global,u=e.stat;if(n=s?zt:u?zt[l]||oK(l,{}):(zt[l]||{}).prototype)for(r in t){if(i=t[r],o=e.noTargetGet?(a=E4t(n,r))&&a.value:n[r],!sD(s?r:l+(u?".":"#")+r,e.forced)&&o!==void 0){if(typeof i==typeof o)continue;y4t(i,o)}(e.sham||o&&o.sham)&&fd(i,"sham",!0),xu(n,r,i,e)}},uD=Array.isArray||function(e){return ic(e)=="Array"},x_e={};x_e[li("toStringTag")]="z";var vK=String(x_e)==="[object z]",C4t=li("toStringTag"),S4t=zt.Object,k4t=ic(function(){return arguments}())=="Arguments",cD=vK?ic:function(e){var t,n,r;return e===void 0?"Undefined":e===null?"Null":typeof(n=function(o,i){try{return o[i]}catch{}}(t=S4t(e),C4t))=="string"?n:k4t?ic(t):(r=ic(t))=="Object"&&no(t.callee)?"Arguments":r},__e=function(){},D4t=[],E_e=qv("Reflect","construct"),mK=/^\s*(?:class|function)\b/,O4t=ur(mK.exec),T4t=!mK.exec(__e),bA=function(e){if(!no(e))return!1;try{return E_e(__e,D4t,e),!0}catch{return!1}},gK=!E_e||co(function(){var e;return bA(bA.call)||!bA(Object)||!bA(function(){e=!0})||e})?function(e){if(!no(e))return!1;switch(cD(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return T4t||!!O4t(mK,oD(e))}:bA,C_e=function(e,t,n){var r=sK(t);r in e?Af.f(e,r,eD(0,n)):e[r]=n},M4t=li("species"),S_e=ur([].slice),N4t=cA>=51||!co(function(){var e=[];return(e.constructor={})[M4t]=function(){return{foo:1}},e.slice(Boolean).foo!==1}),F4t=li("species"),yK=zt.Array,R4t=Math.max;pd({target:"Array",proto:!0,forced:!N4t},{slice:function(e,t){var n,r,o,i=zh(this),a=gA(i),l=mA(e,a),s=mA(t===void 0?a:t,a);if(uD(i)&&(n=i.constructor,(gK(n)&&(n===yK||uD(n.prototype))||fo(n)&&(n=n[F4t])===null)&&(n=void 0),n===yK||n===void 0))return S_e(i,l,s);for(r=new(n===void 0?yK:n)(R4t(s-l,0)),o=0;l<s;l++,o++)l in i&&C_e(r,o,i[l]);return r.length=o,r}});var I4t=vK?{}.toString:function(){return"[object "+cD(this)+"]"};vK||xu(Object.prototype,"toString",I4t,{unsafe:!0});var dD,B4t=zt.String,Uh=function(e){if(cD(e)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return B4t(e)},k_e=function(){var e=oa(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t},bK=zt.RegExp,AK=co(function(){var e=bK("a","y");return e.lastIndex=2,e.exec("abcd")!=null}),P4t=AK||co(function(){return!bK("a","y").sticky}),D_e={BROKEN_CARET:AK||co(function(){var e=bK("^r","gy");return e.lastIndex=2,e.exec("str")!=null}),MISSED_STICKY:P4t,UNSUPPORTED_Y:AK},L4t=Object.keys||function(e){return w_e(e,aD)},j4t=dd?Object.defineProperties:function(e,t){oa(e);for(var n,r=zh(t),o=L4t(t),i=o.length,a=0;i>a;)Af.f(e,n=o[a++],r[n]);return e},wK=qv("document","documentElement"),O_e=dK("IE_PROTO"),xK=function(){},T_e=function(e){return"<script>"+e+"<\/script>"},M_e=function(e){e.write(T_e("")),e.close();var t=e.parentWindow.Object;return e=null,t},fD=function(){try{dD=new ActiveXObject("htmlfile")}catch{}var e,t;fD=typeof document<"u"?document.domain&&dD?M_e(dD):((t=pA("iframe")).style.display="none",wK.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write(T_e("document.F=Object")),e.close(),e.F):M_e(dD);for(var n=aD.length;n--;)delete fD.prototype[aD[n]];return fD()};iD[O_e]=!0;var N_e,_K,EK=Object.create||function(e,t){var n;return e!==null?(xK.prototype=oa(e),n=new xK,xK.prototype=null,n[O_e]=e):n=fD(),t===void 0?n:j4t(n,t)},V4t=zt.RegExp,z4t=co(function(){var e=V4t(".","s");return!(e.dotAll&&e.exec(`
| `)&&e.flags==="s")}),H4t=zt.RegExp,$4t=co(function(){var e=H4t("(?<a>b)","g");return e.exec("b").groups.a!=="b"||"b".replace(e,"$<a>c")!=="bc"}),U4t=Is.get,W4t=iK("native-string-replace",String.prototype.replace),pD=RegExp.prototype.exec,CK=pD,G4t=ur("".charAt),q4t=ur("".indexOf),K4t=ur("".replace),SK=ur("".slice),kK=(_K=/b*/g,Ur(pD,N_e=/a/,"a"),Ur(pD,_K,"a"),N_e.lastIndex!==0||_K.lastIndex!==0),F_e=D_e.BROKEN_CARET,DK=/()??/.exec("")[1]!==void 0;(kK||DK||F_e||z4t||$4t)&&(CK=function(e){var t,n,r,o,i,a,l,s=this,u=U4t(s),c=Uh(e),d=u.raw;if(d)return d.lastIndex=s.lastIndex,t=Ur(CK,d,c),s.lastIndex=d.lastIndex,t;var f=u.groups,p=F_e&&s.sticky,m=Ur(k_e,s),v=s.source,g=0,b=c;if(p&&(m=K4t(m,"y",""),q4t(m,"g")===-1&&(m+="g"),b=SK(c,s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&G4t(c,s.lastIndex-1)!==`
| `)&&(v="(?: "+v+")",b=" "+b,g++),n=new RegExp("^(?:"+v+")",m)),DK&&(n=new RegExp("^"+v+"$(?!\\s)",m)),kK&&(r=s.lastIndex),o=Ur(pD,p?n:s,b),p?o?(o.input=SK(o.input,g),o[0]=SK(o[0],g),o.index=s.lastIndex,s.lastIndex+=o[0].length):s.lastIndex=0:kK&&o&&(s.lastIndex=s.global?o.index+o[0].length:r),DK&&o&&o.length>1&&Ur(W4t,o[0],n,function(){for(i=1;i<arguments.length-2;i++)arguments[i]===void 0&&(o[i]=void 0)}),o&&f)for(o.groups=a=EK(null),i=0;i<f.length;i++)a[(l=f[i])[0]]=o[l[1]];return o});var AA=CK;pd({target:"RegExp",proto:!0,forced:/./.exec!==AA},{exec:AA});var OK=Function.prototype,R_e=OK.apply,Y4t=OK.bind,I_e=OK.call,B_e=typeof Reflect=="object"&&Reflect.apply||(Y4t?I_e.bind(R_e):function(){return I_e.apply(R_e,arguments)}),X4t=li("species"),TK=RegExp.prototype,Q4t=li("match"),J4t=zt.TypeError,Z4t=li("species"),P_e=function(e,t){var n,r=oa(e).constructor;return r===void 0||(n=oa(r)[Z4t])==null?t:function(o){if(gK(o))return o;throw J4t(tD(o)+" is not a constructor")}(n)},e6t=ur("".charAt),L_e=ur("".charCodeAt),t6t=ur("".slice),j_e=function(e){return function(t,n){var r,o,i=Uh(sA(t)),a=hK(n),l=i.length;return a<0||a>=l?e?"":void 0:(r=L_e(i,a))<55296||r>56319||a+1===l||(o=L_e(i,a+1))<56320||o>57343?e?e6t(i,a):r:e?t6t(i,a,a+2):o-56320+(r-55296<<10)+65536}},V_e={codeAt:j_e(!1),charAt:j_e(!0)},n6t=V_e.charAt,r6t=function(e,t,n){return t+(n?n6t(e,t).length:1)},o6t=zt.Array,i6t=Math.max,MK=function(e,t,n){for(var r=gA(e),o=mA(t,r),i=mA(n===void 0?r:n,r),a=o6t(i6t(i-o,0)),l=0;o<i;o++,l++)C_e(a,l,e[o]);return a.length=l,a},a6t=zt.TypeError,z_e=function(e,t){var n=e.exec;if(no(n)){var r=Ur(n,e,t);return r!==null&&oa(r),r}if(ic(e)==="RegExp")return Ur(AA,e,t);throw a6t("RegExp#exec called on incompatible receiver")},jy=D_e.UNSUPPORTED_Y,l6t=Math.min,H_e=[].push,s6t=ur(/./.exec),Vy=ur(H_e),wA=ur("".slice);(function(e,t,n,r){var o=li(e),i=!co(function(){var u={};return u[o]=function(){return 7},""[e](u)!=7}),a=i&&!co(function(){var u=!1,c=/a/;return(c={}).constructor={},c.constructor[X4t]=function(){return c},c.flags="",c[o]=/./[o],c.exec=function(){return u=!0,null},c[o](""),!u});if(!i||!a||n){var l=ur(/./[o]),s=function(u,c,d){var f;return f="abbc".split(/(b)*/)[1]=="c"||"test".split(/(?:)/,-1).length!=4||"ab".split(/(?:ab)*/).length!=2||".".split(/(.?)(.?)/).length!=4||".".split(/()()/).length>1||"".split(/.?/).length?function(p,m){var v,g,b=Uh(sA(this)),y=m===void 0?4294967295:m>>>0;if(y===0)return[];if(p===void 0)return[b];if(!fo(v=p)||!((g=v[Q4t])!==void 0?g:ic(v)=="RegExp"))return Ur(c,b,p,y);for(var w,x,_,E=[],C=(p.ignoreCase?"i":"")+(p.multiline?"m":"")+(p.unicode?"u":"")+(p.sticky?"y":""),T=0,k=new RegExp(p.source,C+"g");(w=Ur(AA,k,b))&&!((x=k.lastIndex)>T&&(Vy(E,wA(b,T,w.index)),w.length>1&&w.index<b.length&&B_e(H_e,E,MK(w,1)),_=w[0].length,T=x,E.length>=y));)k.lastIndex===w.index&&k.lastIndex++;return T===b.length?!_&&s6t(k,"")||Vy(E,""):Vy(E,wA(b,T)),E.length>y?MK(E,0,y):E}:"0".split(void 0,0).length?function(p,m){return p===void 0&&m===0?[]:Ur(c,this,p,m)}:c,[function(p,m){var v=sA(this),g=p==null?void 0:dA(p,u);return g?Ur(g,p,v,m):Ur(f,Uh(v),p,m)},function(p,m){var v=oa(this),g=Uh(p),b=d(f,v,g,m,f!==c);if(b.done)return b.value;var y=P_e(v,RegExp),w=v.unicode,x=(v.ignoreCase?"i":"")+(v.multiline?"m":"")+(v.unicode?"u":"")+(jy?"g":"y"),_=new y(jy?"^(?:"+v.source+")":v,x),E=m===void 0?4294967295:m>>>0;if(E===0)return[];if(g.length===0)return z_e(_,g)===null?[g]:[];for(var C=0,T=0,k=[];T<g.length;){_.lastIndex=jy?0:T;var I,O=z_e(_,jy?wA(g,T):g);if(O===null||(I=l6t(b_e(_.lastIndex+(jy?T:0)),g.length))===C)T=r6t(g,T,w);else{if(Vy(k,wA(g,C,T)),k.length===E)return k;for(var F=1;F<=O.length-1;F++)if(Vy(k,O[F]),k.length===E)return k;T=C=I}}return Vy(k,wA(g,C)),k}]}(o,""[e],function(u,c,d,f,p){var m=ur(u),v=c.exec;return v===AA||v===TK.exec?i&&!p?{done:!0,value:l(c,d,f)}:{done:!0,value:m(d,c,f)}:{done:!1}});xu(String.prototype,e,s[0]),xu(TK,o,s[1])}r&&fd(TK[o],"sham",!0)})("split",0,!!co(function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return n.length!==2||n[0]!=="a"||n[1]!=="b"}),jy);var hD=function(){return hD=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},hD.apply(this,arguments)};function NK(e,t,n,r){return new(n||(n=Promise))(function(o,i){function a(u){try{s(r.next(u))}catch(c){i(c)}}function l(u){try{s(r.throw(u))}catch(c){i(c)}}function s(u){var c;u.done?o(u.value):(c=u.value,c instanceof n?c:new n(function(d){d(c)})).then(a,l)}s((r=r.apply(e,[])).next())})}function FK(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:l(0),throw:l(1),return:l(2)},typeof Symbol=="function"&&(i[Symbol.iterator]=function(){return this}),i;function l(s){return function(u){return function(c){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||c[0]!==6&&c[0]!==2)){a=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(c[0]===6&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(d){c=[6,d],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([s,u])}}}var RK=li("unscopables"),IK=Array.prototype;IK[RK]==null&&Af.f(IK,RK,{configurable:!0,value:EK(null)});var Xv,$_e,U_e,BK=function(e){IK[RK][e]=!0},zy={},u6t=!co(function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}),W_e=dK("IE_PROTO"),PK=zt.Object,c6t=PK.prototype,vD=u6t?PK.getPrototypeOf:function(e){var t=aK(e);if(Ci(t,W_e))return t[W_e];var n=t.constructor;return no(n)&&t instanceof n?n.prototype:t instanceof PK?c6t:null},LK=li("iterator"),G_e=!1;[].keys&&("next"in(U_e=[].keys())?($_e=vD(vD(U_e)))!==Object.prototype&&(Xv=$_e):G_e=!0);var d6t=Xv==null||co(function(){var e={};return Xv[LK].call(e)!==e});d6t&&(Xv={}),no(Xv[LK])||xu(Xv,LK,function(){return this});var jK={IteratorPrototype:Xv,BUGGY_SAFARI_ITERATORS:G_e},f6t=Af.f,q_e=li("toStringTag"),mD=function(e,t,n){e&&!Ci(e=n?e:e.prototype,q_e)&&f6t(e,q_e,{configurable:!0,value:t})},p6t=jK.IteratorPrototype,h6t=function(){return this},v6t=zt.String,m6t=zt.TypeError,Hy=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=ur(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),t=n instanceof Array}catch{}return function(r,o){return oa(r),function(i){if(typeof i=="object"||no(i))return i;throw m6t("Can't set "+v6t(i)+" as a prototype")}(o),t?e(r,o):r.__proto__=o,r}}():void 0),g6t=vA.PROPER,y6t=vA.CONFIGURABLE,K_e=jK.IteratorPrototype,VK=jK.BUGGY_SAFARI_ITERATORS,xA=li("iterator"),b6t=function(){return this},Y_e=function(e,t,n,r,o,i,a){(function(g,b,y){var w=b+" Iterator";g.prototype=EK(p6t,{next:eD(1,y)}),mD(g,w,!1),zy[w]=h6t})(n,t,r);var l,s,u=function(g){if(g===o&&m)return m;if(!VK&&g in f)return f[g];switch(g){case"keys":case"values":case"entries":return function(){return new n(this,g)}}return function(){return new n(this)}},c=t+" Iterator",d=!1,f=e.prototype,p=f[xA]||f["@@iterator"]||o&&f[o],m=!VK&&p||u(o),v=t=="Array"&&f.entries||p;return v&&(l=vD(v.call(new e)))!==Object.prototype&&l.next&&(vD(l)!==K_e&&(Hy?Hy(l,K_e):no(l[xA])||xu(l,xA,b6t)),mD(l,c,!0)),g6t&&o=="values"&&p&&p.name!=="values"&&(y6t?fd(f,"name","values"):(d=!0,m=function(){return Ur(p,this)})),o&&(s={values:u("values"),keys:u("keys"),entries:u("entries")},a||pd({target:t,proto:!0,forced:VK||d},s)),f[xA]!==m&&xu(f,xA,m,{name:o}),zy[t]=m,s},A6t=Is.set,w6t=Is.getterFor("Array Iterator"),_A=Y_e(Array,"Array",function(e,t){A6t(this,{type:"Array Iterator",target:zh(e),index:0,kind:t})},function(){var e=w6t(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,{value:void 0,done:!0}):n=="keys"?{value:r,done:!1}:n=="values"?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}},"values");zy.Arguments=zy.Array,BK("keys"),BK("values"),BK("entries");var x6t=V_e.charAt,_6t=Is.set,E6t=Is.getterFor("String Iterator");Y_e(String,"String",function(e){_6t(this,{type:"String Iterator",string:Uh(e),index:0})},function(){var e,t=E6t(this),n=t.string,r=t.index;return r>=n.length?{value:void 0,done:!0}:(e=x6t(n,r),t.index+=e.length,{value:e,done:!1})});var gD=function(e,t,n){for(var r in t)xu(e,r,t[r],n);return e},X_e=lD.f,Q_e=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],C6t={f:function(e){return Q_e&&ic(e)=="Window"?function(t){try{return X_e(t)}catch{return MK(Q_e)}}(e):X_e(zh(e))}},J_e=co(function(){if(typeof ArrayBuffer=="function"){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}),yD=Object.isExtensible,Qv=co(function(){yD(1)})||J_e?function(e){return!!fo(e)&&(!J_e||ic(e)!="ArrayBuffer")&&(!yD||yD(e))}:yD,S6t=!co(function(){return Object.isExtensible(Object.preventExtensions({}))}),zK=Xq(function(e){var t=Af.f,n=!1,r=lK("meta"),o=0,i=function(l){t(l,r,{value:{objectID:"O"+o++,weakData:{}}})},a=e.exports={enable:function(){a.enable=function(){},n=!0;var l=lD.f,s=ur([].splice),u={};u[r]=1,l(u).length&&(lD.f=function(c){for(var d=l(c),f=0,p=d.length;f<p;f++)if(d[f]===r){s(d,f,1);break}return d},pd({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:C6t.f}))},fastKey:function(l,s){if(!fo(l))return typeof l=="symbol"?l:(typeof l=="string"?"S":"P")+l;if(!Ci(l,r)){if(!Qv(l))return"F";if(!s)return"E";i(l)}return l[r].objectID},getWeakData:function(l,s){if(!Ci(l,r)){if(!Qv(l))return!0;if(!s)return!1;i(l)}return l[r].weakData},onFreeze:function(l){return S6t&&n&&Qv(l)&&!Ci(l,r)&&i(l),l}};iD[r]=!0}),Z_e=ur(ur.bind),EA=function(e,t){return Hh(e),t===void 0?e:Z_e?Z_e(e,t):function(){return e.apply(t,arguments)}},k6t=li("iterator"),D6t=Array.prototype,O6t=li("iterator"),eEe=function(e){if(e!=null)return dA(e,O6t)||dA(e,"@@iterator")||zy[cD(e)]},T6t=zt.TypeError,tEe=function(e,t,n){var r,o;oa(e);try{if(!(r=dA(e,"return"))){if(t==="throw")throw n;return n}r=Ur(r,e)}catch(i){o=!0,r=i}if(t==="throw")throw n;if(o)throw r;return oa(r),n},M6t=zt.TypeError,bD=function(e,t){this.stopped=e,this.result=t},nEe=bD.prototype,AD=function(e,t,n){var r,o,i,a,l,s,u,c,d=n&&n.that,f=!(!n||!n.AS_ENTRIES),p=!(!n||!n.IS_ITERATOR),m=!(!n||!n.INTERRUPTED),v=EA(t,d),g=function(y){return r&&tEe(r,"normal",y),new bD(!0,y)},b=function(y){return f?(oa(y),m?v(y[0],y[1],g):v(y[0],y[1])):m?v(y,g):v(y)};if(p)r=e;else{if(!(o=eEe(e)))throw M6t(tD(e)+" is not iterable");if((c=o)!==void 0&&(zy.Array===c||D6t[k6t]===c)){for(i=0,a=gA(e);a>i;i++)if((l=b(e[i]))&&uA(nEe,l))return l;return new bD(!1)}r=function(y,w){var x=arguments.length<2?eEe(y):w;if(Hh(x))return oa(Ur(x,y));throw T6t(tD(y)+" is not iterable")}(e,o)}for(s=r.next;!(u=Ur(s,r)).done;){try{l=b(u.value)}catch(y){tEe(r,"throw",y)}if(typeof l=="object"&&l&&uA(nEe,l))return l}return new bD(!1)},N6t=zt.TypeError,HK=function(e,t){if(uA(t,e))return e;throw N6t("Incorrect invocation")},rEe=li("iterator"),oEe=!1;try{var F6t=0,iEe={next:function(){return{done:!!F6t++}},return:function(){oEe=!0}};iEe[rEe]=function(){return this},Array.from(iEe,function(){throw 2})}catch{}var aEe=function(e,t){if(!oEe)return!1;var n=!1;try{var r={};r[rEe]=function(){return{next:function(){return{done:n=!0}}}},e(r)}catch{}return n},R6t=li("species"),lEe=zt.Array,I6t=function(e,t){return new(function(n){var r;return uD(n)&&(r=n.constructor,(gK(r)&&(r===lEe||uD(r.prototype))||fo(r)&&(r=r[R6t])===null)&&(r=void 0)),r===void 0?lEe:r}(e))(t===0?0:t)},sEe=ur([].push),Wh=function(e){var t=e==1,n=e==2,r=e==3,o=e==4,i=e==6,a=e==7,l=e==5||i;return function(s,u,c,d){for(var f,p,m=aK(s),v=eK(m),g=EA(u,c),b=gA(v),y=0,w=d||I6t,x=t?w(s,b):n||a?w(s,0):void 0;b>y;y++)if((l||y in v)&&(p=g(f=v[y],y,m),e))if(t)x[y]=p;else if(p)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:sEe(x,f)}else switch(e){case 4:return!1;case 7:sEe(x,f)}return i?-1:r||o?o:x}},$K={forEach:Wh(0),map:Wh(1),filter:Wh(2),some:Wh(3),every:Wh(4),find:Wh(5),findIndex:Wh(6),filterReject:Wh(7)},wD=zK.getWeakData,B6t=Is.set,P6t=Is.getterFor,L6t=$K.find,j6t=$K.findIndex,V6t=ur([].splice),z6t=0,xD=function(e){return e.frozen||(e.frozen=new uEe)},uEe=function(){this.entries=[]},UK=function(e,t){return L6t(e.entries,function(n){return n[0]===t})};uEe.prototype={get:function(e){var t=UK(this,e);if(t)return t[1]},has:function(e){return!!UK(this,e)},set:function(e,t){var n=UK(this,e);n?n[1]=t:this.entries.push([e,t])},delete:function(e){var t=j6t(this.entries,function(n){return n[0]===e});return~t&&V6t(this.entries,t,1),!!~t}};var CA,cEe={getConstructor:function(e,t,n,r){var o=e(function(s,u){HK(s,i),B6t(s,{type:t,id:z6t++,frozen:void 0}),u!=null&&AD(u,s[r],{that:s,AS_ENTRIES:n})}),i=o.prototype,a=P6t(t),l=function(s,u,c){var d=a(s),f=wD(oa(u),!0);return f===!0?xD(d).set(u,c):f[d.id]=c,s};return gD(i,{delete:function(s){var u=a(this);if(!fo(s))return!1;var c=wD(s);return c===!0?xD(u).delete(s):c&&Ci(c,u.id)&&delete c[u.id]},has:function(s){var u=a(this);if(!fo(s))return!1;var c=wD(s);return c===!0?xD(u).has(s):c&&Ci(c,u.id)}}),gD(i,n?{get:function(s){var u=a(this);if(fo(s)){var c=wD(s);return c===!0?xD(u).get(s):c?c[u.id]:void 0}},set:function(s,u){return l(this,s,u)}}:{add:function(s){return l(this,s,!0)}}),o}},_D=Is.enforce,H6t=!zt.ActiveXObject&&"ActiveXObject"in zt,dEe=function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}},$6t=function(e,t,n){var r=e.indexOf("Map")!==-1,o=e.indexOf("Weak")!==-1,i=r?"set":"add",a=zt[e],l=a&&a.prototype,s=a,u={},c=function(g){var b=ur(l[g]);xu(l,g,g=="add"?function(y){return b(this,y===0?0:y),this}:g=="delete"?function(y){return!(o&&!fo(y))&&b(this,y===0?0:y)}:g=="get"?function(y){return o&&!fo(y)?void 0:b(this,y===0?0:y)}:g=="has"?function(y){return!(o&&!fo(y))&&b(this,y===0?0:y)}:function(y,w){return b(this,y===0?0:y,w),this})};if(sD(e,!no(a)||!(o||l.forEach&&!co(function(){new a().entries().next()}))))s=n.getConstructor(t,e,r,i),zK.enable();else if(sD(e,!0)){var d=new s,f=d[i](o?{}:-0,1)!=d,p=co(function(){d.has(1)}),m=aEe(function(g){new a(g)}),v=!o&&co(function(){for(var g=new a,b=5;b--;)g[i](b,b);return!g.has(-0)});m||((s=t(function(g,b){HK(g,l);var y=function(w,x,_){var E,C;return Hy&&no(E=x.constructor)&&E!==_&&fo(C=E.prototype)&&C!==_.prototype&&Hy(w,C),w}(new a,g,s);return b!=null&&AD(b,y[i],{that:y,AS_ENTRIES:r}),y})).prototype=l,l.constructor=s),(p||v)&&(c("delete"),c("has"),r&&c("get")),(v||f)&&c(i),o&&l.clear&&delete l.clear}return u[e]=s,pd({global:!0,forced:s!=a},u),mD(s,e),o||n.setStrong(s,e,r),s}("WeakMap",dEe,cEe);if(v_e&&H6t){CA=cEe.getConstructor(dEe,"WeakMap",!0),zK.enable();var SA=$6t.prototype,fEe=ur(SA.delete),ED=ur(SA.has),pEe=ur(SA.get),hEe=ur(SA.set);gD(SA,{delete:function(e){if(fo(e)&&!Qv(e)){var t=_D(this);return t.frozen||(t.frozen=new CA),fEe(this,e)||t.frozen.delete(e)}return fEe(this,e)},has:function(e){if(fo(e)&&!Qv(e)){var t=_D(this);return t.frozen||(t.frozen=new CA),ED(this,e)||t.frozen.has(e)}return ED(this,e)},get:function(e){if(fo(e)&&!Qv(e)){var t=_D(this);return t.frozen||(t.frozen=new CA),ED(this,e)?pEe(this,e):t.frozen.get(e)}return pEe(this,e)},set:function(e,t){if(fo(e)&&!Qv(e)){var n=_D(this);n.frozen||(n.frozen=new CA),ED(this,e)?hEe(this,e,t):n.frozen.set(e,t)}else hEe(this,e,t);return this}})}var CD={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},WK=pA("span").classList,vEe=WK&&WK.constructor&&WK.constructor.prototype,mEe=vEe===Object.prototype?void 0:vEe,GK=li("iterator"),gEe=li("toStringTag"),qK=_A.values,yEe=function(e,t){if(e){if(e[GK]!==qK)try{fd(e,GK,qK)}catch{e[GK]=qK}if(e[gEe]||fd(e,gEe,t),CD[t]){for(var n in _A)if(e[n]!==_A[n])try{fd(e,n,_A[n])}catch{e[n]=_A[n]}}}};for(var KK in CD)yEe(zt[KK]&&zt[KK].prototype,KK);yEe(mEe,"DOMTokenList");var bEe=function(e,t){var n=[][e];return!!n&&co(function(){n.call(null,t||function(){throw 1},1)})},U6t=$K.forEach,YK=bEe("forEach")?[].forEach:function(e){return U6t(this,e,arguments.length>1?arguments[1]:void 0)},AEe=function(e){if(e&&e.forEach!==YK)try{fd(e,"forEach",YK)}catch{e.forEach=YK}};for(var XK in CD)CD[XK]&&AEe(zt[XK]&&zt[XK].prototype);AEe(mEe);var kA,$y,wEe,QK,SD=zt.Promise,xEe=li("species"),_Ee=/(?:ipad|iphone|ipod).*applewebkit/i.test(Py),Gh=ic(zt.process)=="process",JK=zt.setImmediate,ZK=zt.clearImmediate,W6t=zt.process,eY=zt.Dispatch,G6t=zt.Function,EEe=zt.MessageChannel,q6t=zt.String,tY=0,DA={};try{kA=zt.location}catch{}var nY=function(e){if(Ci(DA,e)){var t=DA[e];delete DA[e],t()}},rY=function(e){return function(){nY(e)}},CEe=function(e){nY(e.data)},SEe=function(e){zt.postMessage(q6t(e),kA.protocol+"//"+kA.host)};JK&&ZK||(JK=function(e){var t=S_e(arguments,1);return DA[++tY]=function(){B_e(no(e)?e:G6t(e),void 0,t)},$y(tY),tY},ZK=function(e){delete DA[e]},Gh?$y=function(e){W6t.nextTick(rY(e))}:eY&&eY.now?$y=function(e){eY.now(rY(e))}:EEe&&!_Ee?(QK=(wEe=new EEe).port2,wEe.port1.onmessage=CEe,$y=EA(QK.postMessage,QK)):zt.addEventListener&&no(zt.postMessage)&&!zt.importScripts&&kA&&kA.protocol!=="file:"&&!co(SEe)?($y=SEe,zt.addEventListener("message",CEe,!1)):$y="onreadystatechange"in pA("script")?function(e){wK.appendChild(pA("script")).onreadystatechange=function(){wK.removeChild(this),nY(e)}}:function(e){setTimeout(rY(e),0)});var OA,Jv,TA,Uy,oY,iY,aY,kEe,DEe={set:JK,clear:ZK},K6t=/ipad|iphone|ipod/i.test(Py)&&zt.Pebble!==void 0,Y6t=/web0s(?!.*chrome)/i.test(Py),X6t=cK.f,lY=DEe.set,OEe=zt.MutationObserver||zt.WebKitMutationObserver,TEe=zt.document,MEe=zt.process,kD=zt.Promise,NEe=X6t(zt,"queueMicrotask"),FEe=NEe&&NEe.value;FEe||(OA=function(){var e,t;for(Gh&&(e=MEe.domain)&&e.exit();Jv;){t=Jv.fn,Jv=Jv.next;try{t()}catch(n){throw Jv?Uy():TA=void 0,n}}TA=void 0,e&&e.enter()},_Ee||Gh||Y6t||!OEe||!TEe?!K6t&&kD&&kD.resolve?((aY=kD.resolve(void 0)).constructor=kD,kEe=EA(aY.then,aY),Uy=function(){kEe(OA)}):Gh?Uy=function(){MEe.nextTick(OA)}:(lY=EA(lY,zt),Uy=function(){lY(OA)}):(oY=!0,iY=TEe.createTextNode(""),new OEe(OA).observe(iY,{characterData:!0}),Uy=function(){iY.data=oY=!oY}));var sY,REe,IEe,BEe,PEe=FEe||function(e){var t={fn:e,next:void 0};TA&&(TA.next=t),Jv||(Jv=t,Uy()),TA=t},Q6t=function(e){var t,n;this.promise=new e(function(r,o){if(t!==void 0||n!==void 0)throw TypeError("Bad Promise constructor");t=r,n=o}),this.resolve=Hh(t),this.reject=Hh(n)},uY={f:function(e){return new Q6t(e)}},cY=function(e){try{return{error:!1,value:e()}}catch(t){return{error:!0,value:t}}},J6t=typeof window=="object",LEe=DEe.set,Z6t=li("species"),wf="Promise",jEe=Is.getterFor(wf),e8t=Is.set,t8t=Is.getterFor(wf),Zv=SD&&SD.prototype,hd=SD,MA=Zv,VEe=zt.TypeError,dY=zt.document,fY=zt.process,Wy=uY.f,n8t=Wy,r8t=!!(dY&&dY.createEvent&&zt.dispatchEvent),zEe=no(zt.PromiseRejectionEvent),HEe=!1,NA=sD(wf,function(){var e=oD(hd),t=e!==String(hd);if(!t&&cA===66)return!0;if(cA>=51&&/native code/.test(e))return!1;var n=new hd(function(o){o(1)}),r=function(o){o(function(){},function(){})};return(n.constructor={})[Z6t]=r,!(HEe=n.then(function(){})instanceof r)||!t&&J6t&&!zEe}),o8t=NA||!aEe(function(e){hd.all(e).catch(function(){})}),$Ee=function(e){var t;return!(!fo(e)||!no(t=e.then))&&t},pY=function(e,t){if(!e.notified){e.notified=!0;var n=e.reactions;PEe(function(){for(var r=e.value,o=e.state==1,i=0;n.length>i;){var a,l,s,u=n[i++],c=o?u.ok:u.fail,d=u.resolve,f=u.reject,p=u.domain;try{c?(o||(e.rejection===2&&a8t(e),e.rejection=1),c===!0?a=r:(p&&p.enter(),a=c(r),p&&(p.exit(),s=!0)),a===u.promise?f(VEe("Promise-chain cycle")):(l=$Ee(a))?Ur(l,a,d,f):d(a)):f(r)}catch(m){p&&!s&&p.exit(),f(m)}}e.reactions=[],e.notified=!1,t&&!e.rejection&&i8t(e)})}},UEe=function(e,t,n){var r,o;r8t?((r=dY.createEvent("Event")).promise=t,r.reason=n,r.initEvent(e,!1,!0),zt.dispatchEvent(r)):r={promise:t,reason:n},!zEe&&(o=zt["on"+e])?o(r):e==="unhandledrejection"&&function(i,a){var l=zt.console;l&&l.error&&(arguments.length==1?l.error(i):l.error(i,a))}("Unhandled promise rejection",n)},i8t=function(e){Ur(LEe,zt,function(){var t,n=e.facade,r=e.value;if(WEe(e)&&(t=cY(function(){Gh?fY.emit("unhandledRejection",r,n):UEe("unhandledrejection",n,r)}),e.rejection=Gh||WEe(e)?2:1,t.error))throw t.value})},WEe=function(e){return e.rejection!==1&&!e.parent},a8t=function(e){Ur(LEe,zt,function(){var t=e.facade;Gh?fY.emit("rejectionHandled",t):UEe("rejectionhandled",t,e.value)})},Gy=function(e,t,n){return function(r){e(t,r,n)}},qy=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=2,pY(e,!0))},hY=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw VEe("Promise can't be resolved itself");var r=$Ee(t);r?PEe(function(){var o={done:!1};try{Ur(r,t,Gy(hY,o,e),Gy(qy,o,e))}catch(i){qy(o,i,e)}}):(e.value=t,e.state=1,pY(e,!1))}catch(o){qy({done:!1},o,e)}}};if(NA&&(MA=(hd=function(e){HK(this,MA),Hh(e),Ur(sY,this);var t=jEe(this);try{e(Gy(hY,t),Gy(qy,t))}catch(n){qy(t,n)}}).prototype,(sY=function(e){e8t(this,{type:wf,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=gD(MA,{then:function(e,t){var n=t8t(this),r=n.reactions,o=Wy(P_e(this,hd));return o.ok=!no(e)||e,o.fail=no(t)&&t,o.domain=Gh?fY.domain:void 0,n.parent=!0,r[r.length]=o,n.state!=0&&pY(n,!1),o.promise},catch:function(e){return this.then(void 0,e)}}),REe=function(){var e=new sY,t=jEe(e);this.promise=e,this.resolve=Gy(hY,t),this.reject=Gy(qy,t)},uY.f=Wy=function(e){return e===hd||e===IEe?new REe(e):n8t(e)},no(SD)&&Zv!==Object.prototype)){BEe=Zv.then,HEe||(xu(Zv,"then",function(e,t){var n=this;return new hd(function(r,o){Ur(BEe,n,r,o)}).then(e,t)},{unsafe:!0}),xu(Zv,"catch",MA.catch,{unsafe:!0}));try{delete Zv.constructor}catch{}Hy&&Hy(Zv,MA)}pd({global:!0,wrap:!0,forced:NA},{Promise:hd}),mD(hd,wf,!1),function(){var e=qv("Promise"),t=Af.f;dd&&e&&!e[xEe]&&t(e,xEe,{configurable:!0,get:function(){return this}})}(),IEe=qv(wf),pd({target:wf,stat:!0,forced:NA},{reject:function(e){var t=Wy(this);return Ur(t.reject,void 0,e),t.promise}}),pd({target:wf,stat:!0,forced:NA},{resolve:function(e){return function(t,n){if(oa(t),fo(n)&&n.constructor===t)return n;var r=uY.f(t);return(0,r.resolve)(n),r.promise}(this,e)}}),pd({target:wf,stat:!0,forced:o8t},{all:function(e){var t=this,n=Wy(t),r=n.resolve,o=n.reject,i=cY(function(){var a=Hh(t.resolve),l=[],s=0,u=1;AD(e,function(c){var d=s++,f=!1;u++,Ur(a,t,c).then(function(p){f||(f=!0,l[d]=p,--u||r(l))},o)}),--u||r(l)});return i.error&&o(i.value),n.promise},race:function(e){var t=this,n=Wy(t),r=n.reject,o=cY(function(){var i=Hh(t.resolve);AD(e,function(a){Ur(i,t,a).then(n.resolve,r)})});return o.error&&r(o.value),n.promise}});var l8t=vA.PROPER,vY=RegExp.prototype,GEe=vY.toString,s8t=ur(k_e),u8t=co(function(){return GEe.call({source:"a",flags:"b"})!="/a/b"}),c8t=l8t&&GEe.name!="toString";(u8t||c8t)&&xu(RegExp.prototype,"toString",function(){var e=oa(this),t=Uh(e.source),n=e.flags;return"/"+t+"/"+Uh(n===void 0&&uA(vY,e)&&!("flags"in vY)?s8t(e):n)},{unsafe:!0});var d8t=vA.EXISTS,f8t=Af.f,qEe=Function.prototype,p8t=ur(qEe.toString),KEe=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,h8t=ur(KEe.exec);dd&&!d8t&&f8t(qEe,"name",{configurable:!0,get:function(){try{return h8t(KEe,p8t(this))[1]}catch{return""}}});var YEe=new WeakMap;function XEe(e){return e.getMenuConfig("uploadImage")}function v8t(e,t){return NK(this,0,void 0,function(){return FK(this,function(n){return[2,new Promise(function(r){var o=new FileReader;o.readAsDataURL(t),o.onload=function(){var i=o.result;if(i){var a=i.toString(),l=a.indexOf("data:image")===0?"":a;xv(e,a,t.name,l),r("ok")}}})]})})}function m8t(e,t){return NK(this,0,void 0,function(){var n,r,o,i;return FK(this,function(a){switch(a.label){case 0:return n=function(l){var s=YEe.get(l);if(s!=null)return s;var u=XEe(l),c=u.onSuccess,d=u.onProgress,f=u.onFailed,p=u.customInsert,m=u.onError;return s=i6e(hD(hD({},u),{onProgress:function(v){l.showProgressBar(v),d&&d(v)},onSuccess:function(v,g){if(p)return p(g,function(I,O,F){return xv(l,I,O,F)}),void c(v,g);var b=g.errno,y=b===void 0?1:b,w=g.data,x=w===void 0?{}:w;if(y===0){if(Array.isArray(x))x.forEach(function(I){var O=I.url,F=O===void 0?"":O,N=I.alt,B=N===void 0?"":N,P=I.href;xv(l,F,B,P===void 0?"":P)});else{var _=x.url,E=_===void 0?"":_,C=x.alt,T=C===void 0?"":C,k=x.href;xv(l,E,T,k===void 0?"":k)}c(v,g)}else f(v,g)},onError:function(v,g,b){m(v,g,b)}})),YEe.set(l,s),s}(e),r=t.name,o=t.type,i=t.size,n.addFile({name:r,type:o,size:i,data:t}),[4,n.upload()];case 1:return a.sent(),[2]}})})}function QEe(e,t){var n,r;return NK(this,0,void 0,function(){var o,i,a,l,s,u,c,d,f;return FK(this,function(p){switch(p.label){case 0:if(t==null)return[2];o=Array.prototype.slice.call(t),i=XEe(e),a=i.customUpload,l=i.base64LimitSize,p.label=1;case 1:p.trys.push([1,11,12,17]),s=function(m){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var v,g=m[Symbol.asyncIterator];return g?g.call(m):(m=function(y){var w=typeof Symbol=="function"&&Symbol.iterator,x=w&&y[w],_=0;if(x)return x.call(y);if(y&&typeof y.length=="number")return{next:function(){return y&&_>=y.length&&(y=void 0),{value:y&&y[_++],done:!y}}};throw new TypeError(w?"Object is not iterable.":"Symbol.iterator is not defined.")}(m),v={},b("next"),b("throw"),b("return"),v[Symbol.asyncIterator]=function(){return this},v);function b(y){v[y]=m[y]&&function(w){return new Promise(function(x,_){(function(E,C,T,k){Promise.resolve(k).then(function(I){E({value:I,done:T})},C)})(x,_,(w=m[y](w)).done,w.value)})}}}(o),p.label=2;case 2:return[4,s.next()];case 3:return(u=p.sent()).done?[3,10]:(c=u.value,d=c.size,l&&d<=l?[4,v8t(e,c)]:[3,5]);case 4:return p.sent(),[3,9];case 5:return a?[4,a(c,function(m,v,g){return xv(e,m,v,g)})]:[3,7];case 6:return p.sent(),[3,9];case 7:return[4,m8t(e,c)];case 8:p.sent(),p.label=9;case 9:return[3,2];case 10:return[3,17];case 11:return f=p.sent(),n={error:f},[3,17];case 12:return p.trys.push([12,,15,16]),u&&!u.done&&(r=s.return)?[4,r.call(s)]:[3,14];case 13:p.sent(),p.label=14;case 14:return[3,16];case 15:if(n)throw n.error;return[7];case 16:return[7];case 17:return[2]}})})}var g8t=ur([].join),y8t=eK!=Object,b8t=bEe("join",",");pd({target:"Array",proto:!0,forced:y8t||!b8t},{join:function(e){return g8t(zh(this),e===void 0?",":e)}}),au&&(Pe.fn.append=au),Yc&&(Pe.fn.on=Yc),E2&&(Pe.fn.remove=E2),Kc&&(Pe.fn.val=Kc),$2e&&(Pe.fn.click=$2e),A2&&(Pe.fn.hide=A2);var A8t=function(){function e(){this.title=jt("uploadImgModule.uploadImage"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M828.708571 585.045333a48.761905 48.761905 0 0 0-48.737523 48.761905v18.529524l-72.143238-72.167619a135.972571 135.972571 0 0 0-191.585524 0l-34.133334 34.133333-120.880762-120.953905a138.898286 138.898286 0 0 0-191.585523 0l-72.167619 72.167619V292.400762a48.786286 48.786286 0 0 1 48.761904-48.761905h341.23581a48.737524 48.737524 0 0 0 34.474667-83.285333 48.737524 48.737524 0 0 0-34.474667-14.287238H146.236952A146.212571 146.212571 0 0 0 0 292.400762v585.289143A146.358857 146.358857 0 0 0 146.236952 1024h584.996572a146.212571 146.212571 0 0 0 146.236952-146.310095V633.807238a48.786286 48.786286 0 0 0-48.761905-48.761905zM146.261333 926.45181a48.737524 48.737524 0 0 1-48.761904-48.761905v-174.128762l141.409523-141.458286a38.497524 38.497524 0 0 1 53.126096 0l154.526476 154.624 209.627428 209.724953H146.236952z m633.734096-48.761905c-0.073143 9.337905-3.145143 18.383238-8.777143 25.843809l-219.843048-220.94019 34.133333-34.133334a37.546667 37.546667 0 0 1 53.613715 0l140.873143 141.897143V877.714286zM1009.615238 160.231619L863.329524 13.897143a48.737524 48.737524 0 0 0-16.091429-10.24c-11.849143-4.87619-25.161143-4.87619-37.059047 0a48.761905 48.761905 0 0 0-16.067048 10.24l-146.236952 146.334476a49.005714 49.005714 0 0 0 69.217523 69.241905l62.902858-63.390476v272.627809a48.761905 48.761905 0 1 0 97.475047 0V166.083048l62.902857 63.390476a48.737524 48.737524 0 0 0 69.217524 0 48.761905 48.761905 0 0 0 0-69.241905z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(t){return""},e.prototype.isActive=function(t){return!1},e.prototype.isDisabled=function(t){return dS(t)},e.prototype.getMenuConfig=function(t){return t.getMenuConfig("uploadImage")},e.prototype.exec=function(t,n){var r=this.getMenuConfig(t),o=r.allowedFileTypes,i=o===void 0?[]:o,a=r.customBrowseAndUpload;if(a)a(function(c,d,f){return xv(t,c,d,f)});else{var l="";i.length>0&&(l='accept="'+i.join(", ")+'"');var s=Pe("body"),u=Pe('<input type="file" '+l+" multiple/>");u.hide(),s.append(u),u.click(),u.on("change",function(){var c=u[0].files;QEe(t,c)})}},e}(),w8t={menus:[{key:"uploadImage",factory:function(){return new A8t},config:{server:"",fieldName:"wangeditor-uploaded-image",maxFileSize:2097152,maxNumberOfFiles:100,allowedFileTypes:["image/*"],meta:{},metaWithUrl:!1,withCredentials:!1,timeout:1e4,onBeforeUpload:function(e){return e},onProgress:function(e){},onSuccess:function(e,t){},onFailed:function(e,t){console.error("'"+e.name+"' upload failed",t)},onError:function(e,t,n){console.error("'"+e.name+"' upload error",n)},base64LimitSize:0}}],editorPlugin:function(e){var t=e.insertData,n=e;return n.insertData=function(r){if(dS(n))t(r);else if(r.getData("text/plain"))t(r);else{var o=r.files;o.length<=0?t(r):Array.prototype.slice.call(o).some(function(i){return function(a,l){var s=typeof Symbol=="function"&&a[Symbol.iterator];if(!s)return a;var u,c,d=s.call(a),f=[];try{for(;(l===void 0||l-- >0)&&!(u=d.next()).done;)f.push(u.value)}catch(p){c={error:p}}finally{try{u&&!u.done&&(s=d.return)&&s.call(d)}finally{if(c)throw c.error}}return f}(i.type.split("/"),1)[0]==="image"})?QEe(e,o):t(r)}},n}};Ul("en",{highLightModule:{selectLang:"Language"}}),Ul("zh-CN",{highLightModule:{selectLang:"\u9009\u62E9\u8BED\u8A00"}});var DD=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function mY(e){var t={exports:{}};return e(t,t.exports),t.exports}var qh,OD,TD=function(e){return e&&e.Math==Math&&e},hr=TD(typeof globalThis=="object"&&globalThis)||TD(typeof window=="object"&&window)||TD(typeof self=="object"&&self)||TD(typeof DD=="object"&&DD)||function(){return this}()||Function("return this")(),x8t=Object.defineProperty,gY=function(e,t){try{x8t(hr,e,{value:t,configurable:!0,writable:!0})}catch{hr[e]=t}return t},Kh=hr["__core-js_shared__"]||gY("__core-js_shared__",{}),yY=mY(function(e){(e.exports=function(t,n){return Kh[t]||(Kh[t]=n!==void 0?n:{})})("versions",[]).push({version:"3.19.3",mode:"global",copyright:"\xA9 2021 Denis Pushkarev (zloirock.ru)"})}),JEe=Function.prototype,bY=JEe.bind,AY=JEe.call,_8t=bY&&bY.bind(AY),zr=bY?function(e){return e&&_8t(AY,e)}:function(e){return e&&function(){return AY.apply(e,arguments)}},E8t=hr.TypeError,Ky=function(e){if(e==null)throw E8t("Can't call method on "+e);return e},C8t=hr.Object,wY=function(e){return C8t(Ky(e))},S8t=zr({}.hasOwnProperty),_u=Object.hasOwn||function(e,t){return S8t(wY(e),t)},k8t=0,D8t=Math.random(),O8t=zr(1 .toString),ZEe=function(e){return"Symbol("+(e===void 0?"":e)+")_"+O8t(++k8t+D8t,36)},cl=function(e){return typeof e=="function"},FA=function(e,t){return arguments.length<2?function(n){return cl(n)?n:void 0}(hr[e]):hr[e]&&hr[e][t]},xY=FA("navigator","userAgent")||"",eCe=hr.process,tCe=hr.Deno,nCe=eCe&&eCe.versions||tCe&&tCe.version,rCe=nCe&&nCe.v8;rCe&&(OD=(qh=rCe.split("."))[0]>0&&qh[0]<4?1:+(qh[0]+qh[1])),!OD&&xY&&(!(qh=xY.match(/Edge\/(\d+)/))||qh[1]>=74)&&(qh=xY.match(/Chrome\/(\d+)/))&&(OD=+qh[1]);var oCe=OD,ia=function(e){try{return!!e()}catch{return!0}},_Y=!!Object.getOwnPropertySymbols&&!ia(function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&oCe&&oCe<41}),EY=_Y&&!Symbol.sham&&typeof Symbol.iterator=="symbol",RA=yY("wks"),em=hr.Symbol,iCe=em&&em.for,T8t=EY?em:em&&em.withoutSetter||ZEe,Yh=function(e){if(!_u(RA,e)||!_Y&&typeof RA[e]!="string"){var t="Symbol."+e;_Y&&_u(em,e)?RA[e]=em[e]:RA[e]=EY&&iCe?iCe(t):T8t(t)}return RA[e]},aCe={};aCe[Yh("toStringTag")]="z";var CY=String(aCe)==="[object z]",vd=!ia(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7}),md=function(e){return typeof e=="object"?e!==null:cl(e)},SY=hr.document,M8t=md(SY)&&md(SY.createElement),kY=function(e){return M8t?SY.createElement(e):{}},lCe=!vd&&!ia(function(){return Object.defineProperty(kY("div"),"a",{get:function(){return 7}}).a!=7}),N8t=hr.String,F8t=hr.TypeError,ac=function(e){if(md(e))return e;throw F8t(N8t(e)+" is not an object")},IA=Function.prototype.call,aa=IA.bind?IA.bind(IA):function(){return IA.apply(IA,arguments)},sCe=zr({}.isPrototypeOf),R8t=hr.Object,DY=EY?function(e){return typeof e=="symbol"}:function(e){var t=FA("Symbol");return cl(t)&&sCe(t.prototype,R8t(e))},I8t=hr.String,uCe=function(e){try{return I8t(e)}catch{return"Object"}},B8t=hr.TypeError,cCe=function(e){if(cl(e))return e;throw B8t(uCe(e)+" is not a function")},dCe=function(e,t){var n=e[t];return n==null?void 0:cCe(n)},P8t=hr.TypeError,L8t=hr.TypeError,j8t=Yh("toPrimitive"),OY=function(e){var t=function(n){if(!md(n)||DY(n))return n;var r,o=dCe(n,j8t);if(o){if(r=aa(o,n,"string"),!md(r)||DY(r))return r;throw L8t("Can't convert object to primitive value")}return function(i){var a,l;if(cl(a=i.toString)&&!md(l=aa(a,i))||cl(a=i.valueOf)&&!md(l=aa(a,i)))return l;throw P8t("Can't convert object to primitive value")}(n)}(e);return DY(t)?t:t+""},V8t=hr.TypeError,fCe=Object.defineProperty,MD={f:vd?fCe:function(e,t,n){if(ac(e),t=OY(t),ac(n),lCe)try{return fCe(e,t,n)}catch{}if("get"in n||"set"in n)throw V8t("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},TY=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},Yy=vd?function(e,t,n){return MD.f(e,t,TY(1,n))}:function(e,t,n){return e[t]=n,e},z8t=zr(Function.toString);cl(Kh.inspectSource)||(Kh.inspectSource=function(e){return z8t(e)});var ND,BA,FD,MY=Kh.inspectSource,pCe=hr.WeakMap,H8t=cl(pCe)&&/native code/.test(MY(pCe)),hCe=yY("keys"),vCe=function(e){return hCe[e]||(hCe[e]=ZEe(e))},NY={},FY=hr.TypeError,$8t=hr.WeakMap;if(H8t||Kh.state){var tm=Kh.state||(Kh.state=new $8t),U8t=zr(tm.get),mCe=zr(tm.has),W8t=zr(tm.set);ND=function(e,t){if(mCe(tm,e))throw new FY("Object already initialized");return t.facade=e,W8t(tm,e,t),t},BA=function(e){return U8t(tm,e)||{}},FD=function(e){return mCe(tm,e)}}else{var Xy=vCe("state");NY[Xy]=!0,ND=function(e,t){if(_u(e,Xy))throw new FY("Object already initialized");return t.facade=e,Yy(e,Xy,t),t},BA=function(e){return _u(e,Xy)?e[Xy]:{}},FD=function(e){return _u(e,Xy)}}var RY={set:ND,get:BA,has:FD,enforce:function(e){return FD(e)?BA(e):ND(e,{})},getterFor:function(e){return function(t){var n;if(!md(t)||(n=BA(t)).type!==e)throw FY("Incompatible receiver, "+e+" required");return n}}},gCe=Function.prototype,G8t=vd&&Object.getOwnPropertyDescriptor,IY=_u(gCe,"name"),yCe={EXISTS:IY,PROPER:IY&&(function(){}).name==="something",CONFIGURABLE:IY&&(!vd||vd&&G8t(gCe,"name").configurable)},PA=mY(function(e){var t=yCe.CONFIGURABLE,n=RY.get,r=RY.enforce,o=String(String).split("String");(e.exports=function(i,a,l,s){var u,c=!!s&&!!s.unsafe,d=!!s&&!!s.enumerable,f=!!s&&!!s.noTargetGet,p=s&&s.name!==void 0?s.name:a;cl(l)&&(String(p).slice(0,7)==="Symbol("&&(p="["+String(p).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!_u(l,"name")||t&&l.name!==p)&&Yy(l,"name",p),(u=r(l)).source||(u.source=o.join(typeof p=="string"?p:""))),i!==hr?(c?!f&&i[a]&&(d=!0):delete i[a],d?i[a]=l:Yy(i,a,l)):d?i[a]=l:gY(a,l)})(Function.prototype,"toString",function(){return cl(this)&&n(this).source||MY(this)})}),q8t=zr({}.toString),K8t=zr("".slice),Xh=function(e){return K8t(q8t(e),8,-1)},Y8t=Yh("toStringTag"),X8t=hr.Object,Q8t=Xh(function(){return arguments}())=="Arguments",BY=CY?Xh:function(e){var t,n,r;return e===void 0?"Undefined":e===null?"Null":typeof(n=function(o,i){try{return o[i]}catch{}}(t=X8t(e),Y8t))=="string"?n:Q8t?Xh(t):(r=Xh(t))=="Object"&&cl(t.callee)?"Arguments":r},J8t=CY?{}.toString:function(){return"[object "+BY(this)+"]"};CY||PA(Object.prototype,"toString",J8t,{unsafe:!0});var bCe,ACe={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},PY=kY("span").classList,wCe=PY&&PY.constructor&&PY.constructor.prototype,Z8t=wCe===Object.prototype?void 0:wCe,xCe=zr(zr.bind),LY=hr.Object,e5t=zr("".split),jY=ia(function(){return!LY("z").propertyIsEnumerable(0)})?function(e){return Xh(e)=="String"?e5t(e,""):LY(e)}:LY,t5t=Math.ceil,n5t=Math.floor,VY=function(e){var t=+e;return t!=t||t===0?0:(t>0?n5t:t5t)(t)},r5t=Math.min,_Ce=function(e){return e>0?r5t(VY(e),9007199254740991):0},zY=function(e){return _Ce(e.length)},ECe=Array.isArray||function(e){return Xh(e)=="Array"},CCe=function(){},o5t=[],SCe=FA("Reflect","construct"),HY=/^\s*(?:class|function)\b/,i5t=zr(HY.exec),a5t=!HY.exec(CCe),LA=function(e){if(!cl(e))return!1;try{return SCe(CCe,o5t,e),!0}catch{return!1}},kCe=!SCe||ia(function(){var e;return LA(LA.call)||!LA(Object)||!LA(function(){e=!0})||e})?function(e){if(!cl(e))return!1;switch(BY(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return a5t||!!i5t(HY,MY(e))}:LA,l5t=Yh("species"),DCe=hr.Array,s5t=function(e,t){return new(function(n){var r;return ECe(n)&&(r=n.constructor,(kCe(r)&&(r===DCe||ECe(r.prototype))||md(r)&&(r=r[l5t])===null)&&(r=void 0)),r===void 0?DCe:r}(e))(t===0?0:t)},OCe=zr([].push),Qh=function(e){var t=e==1,n=e==2,r=e==3,o=e==4,i=e==6,a=e==7,l=e==5||i;return function(s,u,c,d){for(var f,p,m=wY(s),v=jY(m),g=function(_,E){return cCe(_),E===void 0?_:xCe?xCe(_,E):function(){return _.apply(E,arguments)}}(u,c),b=zY(v),y=0,w=d||s5t,x=t?w(s,b):n||a?w(s,0):void 0;b>y;y++)if((l||y in v)&&(p=g(f=v[y],y,m),e))if(t)x[y]=p;else if(p)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:OCe(x,f)}else switch(e){case 4:return!1;case 7:OCe(x,f)}return i?-1:r||o?o:x}},u5t=[Qh(0),Qh(1),Qh(2),Qh(3),Qh(4),Qh(5),Qh(6),Qh(7)][0],$Y=(bCe=[].forEach)&&ia(function(){bCe.call(null,function(){throw 1},1)})?[].forEach:function(e){return u5t(this,e,arguments.length>1?arguments[1]:void 0)},TCe=function(e){if(e&&e.forEach!==$Y)try{Yy(e,"forEach",$Y)}catch{e.forEach=$Y}};for(var UY in ACe)ACe[UY]&&TCe(hr[UY]&&hr[UY].prototype);TCe(Z8t);var MCe={}.propertyIsEnumerable,NCe=Object.getOwnPropertyDescriptor,FCe={f:NCe&&!MCe.call({1:2},1)?function(e){var t=NCe(this,e);return!!t&&t.enumerable}:MCe},RD=function(e){return jY(Ky(e))},RCe=Object.getOwnPropertyDescriptor,ICe={f:vd?RCe:function(e,t){if(e=RD(e),t=OY(t),lCe)try{return RCe(e,t)}catch{}if(_u(e,t))return TY(!aa(FCe.f,e,t),e[t])}},c5t=Math.max,d5t=Math.min,WY=function(e,t){var n=VY(e);return n<0?c5t(n+t,0):d5t(n,t)},f5t=function(e){return function(t,n,r){var o,i=RD(t),a=zY(i),l=WY(r,a);if(e&&n!=n){for(;a>l;)if((o=i[l++])!=o)return!0}else for(;a>l;l++)if((e||l in i)&&i[l]===n)return e||l||0;return!e&&-1}}(!1),BCe=zr([].push),PCe=function(e,t){var n,r=RD(e),o=0,i=[];for(n in r)!_u(NY,n)&&_u(r,n)&&BCe(i,n);for(;t.length>o;)_u(r,n=t[o++])&&(~f5t(i,n)||BCe(i,n));return i},ID=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],p5t=ID.concat("length","prototype"),h5t={f:Object.getOwnPropertyNames||function(e){return PCe(e,p5t)}},LCe={f:Object.getOwnPropertySymbols},v5t=zr([].concat),m5t=FA("Reflect","ownKeys")||function(e){var t=h5t.f(ac(e)),n=LCe.f;return n?v5t(t,n(e)):t},g5t=function(e,t){for(var n=m5t(t),r=MD.f,o=ICe.f,i=0;i<n.length;i++){var a=n[i];_u(e,a)||r(e,a,o(t,a))}},y5t=/#|\.prototype\./,jA=function(e,t){var n=A5t[b5t(e)];return n==x5t||n!=w5t&&(cl(t)?ia(t):!!t)},b5t=jA.normalize=function(e){return String(e).replace(y5t,".").toLowerCase()},A5t=jA.data={},w5t=jA.NATIVE="N",x5t=jA.POLYFILL="P",_5t=jA,E5t=ICe.f,BD=function(e,t){var n,r,o,i,a,l=e.target,s=e.global,u=e.stat;if(n=s?hr:u?hr[l]||gY(l,{}):(hr[l]||{}).prototype)for(r in t){if(i=t[r],o=e.noTargetGet?(a=E5t(n,r))&&a.value:n[r],!_5t(s?r:l+(u?".":"#")+r,e.forced)&&o!==void 0){if(typeof i==typeof o)continue;g5t(i,o)}(e.sham||o&&o.sham)&&Yy(i,"sham",!0),PA(n,r,i,e)}},PD=Object.keys||function(e){return PCe(e,ID)},Qy=Object.assign,jCe=Object.defineProperty,C5t=zr([].concat),VCe=!Qy||ia(function(){if(vd&&Qy({b:1},Qy(jCe({},"a",{enumerable:!0,get:function(){jCe(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(o){t[o]=o}),Qy({},e)[n]!=7||PD(Qy({},t)).join("")!=r})?function(e,t){for(var n=wY(e),r=arguments.length,o=1,i=LCe.f,a=FCe.f;r>o;)for(var l,s=jY(arguments[o++]),u=i?C5t(PD(s),i(s)):PD(s),c=u.length,d=0;c>d;)l=u[d++],vd&&!aa(a,s,l)||(n[l]=s[l]);return n}:Qy;BD({target:"Object",stat:!0,forced:Object.assign!==VCe},{assign:VCe});var zCe=mY(function(e){var t=function(n){var r=/\blang(?:uage)?-([\w-]+)\b/i,o=0,i={},a={manual:n.Prism&&n.Prism.manual,disableWorkerMessageHandler:n.Prism&&n.Prism.disableWorkerMessageHandler,util:{encode:function g(b){return b instanceof l?new l(b.type,g(b.content),b.alias):Array.isArray(b)?b.map(g):b.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(g){return Object.prototype.toString.call(g).slice(8,-1)},objId:function(g){return g.__id||Object.defineProperty(g,"__id",{value:++o}),g.__id},clone:function g(b,y){var w,x;switch(y=y||{},a.util.type(b)){case"Object":if(x=a.util.objId(b),y[x])return y[x];for(var _ in w={},y[x]=w,b)b.hasOwnProperty(_)&&(w[_]=g(b[_],y));return w;case"Array":return x=a.util.objId(b),y[x]?y[x]:(w=[],y[x]=w,b.forEach(function(E,C){w[C]=g(E,y)}),w);default:return b}},getLanguage:function(g){for(;g&&!r.test(g.className);)g=g.parentElement;return g?(g.className.match(r)||[,"none"])[1].toLowerCase():"none"},currentScript:function(){if(typeof document>"u")return null;if("currentScript"in document)return document.currentScript;try{throw new Error}catch(w){var g=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(w.stack)||[])[1];if(g){var b=document.getElementsByTagName("script");for(var y in b)if(b[y].src==g)return b[y]}return null}},isActive:function(g,b,y){for(var w="no-"+b;g;){var x=g.classList;if(x.contains(b))return!0;if(x.contains(w))return!1;g=g.parentElement}return!!y}},languages:{plain:i,plaintext:i,text:i,txt:i,extend:function(g,b){var y=a.util.clone(a.languages[g]);for(var w in b)y[w]=b[w];return y},insertBefore:function(g,b,y,w){var x=(w=w||a.languages)[g],_={};for(var E in x)if(x.hasOwnProperty(E)){if(E==b)for(var C in y)y.hasOwnProperty(C)&&(_[C]=y[C]);y.hasOwnProperty(E)||(_[E]=x[E])}var T=w[g];return w[g]=_,a.languages.DFS(a.languages,function(k,I){I===T&&k!=g&&(this[k]=_)}),_},DFS:function g(b,y,w,x){x=x||{};var _=a.util.objId;for(var E in b)if(b.hasOwnProperty(E)){y.call(b,E,b[E],w||E);var C=b[E],T=a.util.type(C);T!=="Object"||x[_(C)]?T!=="Array"||x[_(C)]||(x[_(C)]=!0,g(C,y,E,x)):(x[_(C)]=!0,g(C,y,null,x))}}},plugins:{},highlightAll:function(g,b){a.highlightAllUnder(document,g,b)},highlightAllUnder:function(g,b,y){var w={callback:y,container:g,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};a.hooks.run("before-highlightall",w),w.elements=Array.prototype.slice.apply(w.container.querySelectorAll(w.selector)),a.hooks.run("before-all-elements-highlight",w);for(var x,_=0;x=w.elements[_++];)a.highlightElement(x,b===!0,w.callback)},highlightElement:function(g,b,y){var w=a.util.getLanguage(g),x=a.languages[w];g.className=g.className.replace(r,"").replace(/\s+/g," ")+" language-"+w;var _=g.parentElement;_&&_.nodeName.toLowerCase()==="pre"&&(_.className=_.className.replace(r,"").replace(/\s+/g," ")+" language-"+w);var E={element:g,language:w,grammar:x,code:g.textContent};function C(k){E.highlightedCode=k,a.hooks.run("before-insert",E),E.element.innerHTML=E.highlightedCode,a.hooks.run("after-highlight",E),a.hooks.run("complete",E),y&&y.call(E.element)}if(a.hooks.run("before-sanity-check",E),(_=E.element.parentElement)&&_.nodeName.toLowerCase()==="pre"&&!_.hasAttribute("tabindex")&&_.setAttribute("tabindex","0"),!E.code)return a.hooks.run("complete",E),void(y&&y.call(E.element));if(a.hooks.run("before-highlight",E),E.grammar)if(b&&n.Worker){var T=new Worker(a.filename);T.onmessage=function(k){C(k.data)},T.postMessage(JSON.stringify({language:E.language,code:E.code,immediateClose:!0}))}else C(a.highlight(E.code,E.grammar,E.language));else C(a.util.encode(E.code))},highlight:function(g,b,y){var w={code:g,grammar:b,language:y};return a.hooks.run("before-tokenize",w),w.tokens=a.tokenize(w.code,w.grammar),a.hooks.run("after-tokenize",w),l.stringify(a.util.encode(w.tokens),w.language)},tokenize:function(g,b){var y=b.rest;if(y){for(var w in y)b[w]=y[w];delete b.rest}var x=new c;return d(x,x.head,g),u(g,x,b,x.head,0),function(_){for(var E=[],C=_.head.next;C!==_.tail;)E.push(C.value),C=C.next;return E}(x)},hooks:{all:{},add:function(g,b){var y=a.hooks.all;y[g]=y[g]||[],y[g].push(b)},run:function(g,b){var y=a.hooks.all[g];if(y&&y.length)for(var w,x=0;w=y[x++];)w(b)}},Token:l};function l(g,b,y,w){this.type=g,this.content=b,this.alias=y,this.length=0|(w||"").length}function s(g,b,y,w){g.lastIndex=b;var x=g.exec(y);if(x&&w&&x[1]){var _=x[1].length;x.index+=_,x[0]=x[0].slice(_)}return x}function u(g,b,y,w,x,_){for(var E in y)if(y.hasOwnProperty(E)&&y[E]){var C=y[E];C=Array.isArray(C)?C:[C];for(var T=0;T<C.length;++T){if(_&&_.cause==E+","+T)return;var k=C[T],I=k.inside,O=!!k.lookbehind,F=!!k.greedy,N=k.alias;if(F&&!k.pattern.global){var B=k.pattern.toString().match(/[imsuy]*$/)[0];k.pattern=RegExp(k.pattern.source,B+"g")}for(var P=k.pattern||k,V=w.next,L=x;V!==b.tail&&!(_&&L>=_.reach);L+=V.value.length,V=V.next){var H=V.value;if(b.length>g.length)return;if(!(H instanceof l)){var U,G=1;if(F){if(!(U=s(P,L,g,O)))break;var z=U.index,$=U.index+U[0].length,W=L;for(W+=V.value.length;z>=W;)W+=(V=V.next).value.length;if(L=W-=V.value.length,V.value instanceof l)continue;for(var K=V;K!==b.tail&&(W<$||typeof K.value=="string");K=K.next)G++,W+=K.value.length;G--,H=g.slice(L,W),U.index-=L}else if(!(U=s(P,0,H,O)))continue;z=U.index;var X=U[0],te=H.slice(0,z),ne=H.slice(z+X.length),se=L+H.length;_&&se>_.reach&&(_.reach=se);var le=V.prev;if(te&&(le=d(b,le,te),L+=te.length),f(b,le,G),V=d(b,le,new l(E,I?a.tokenize(X,I):X,N,X)),ne&&d(b,V,ne),G>1){var J={cause:E+","+T,reach:se};u(g,b,y,V.prev,L,J),_&&J.reach>_.reach&&(_.reach=J.reach)}}}}}}function c(){var g={value:null,prev:null,next:null},b={value:null,prev:g,next:null};g.next=b,this.head=g,this.tail=b,this.length=0}function d(g,b,y){var w=b.next,x={value:y,prev:b,next:w};return b.next=x,w.prev=x,g.length++,x}function f(g,b,y){for(var w=b.next,x=0;x<y&&w!==g.tail;x++)w=w.next;b.next=w,w.prev=b,g.length-=x}if(n.Prism=a,l.stringify=function g(b,y){if(typeof b=="string")return b;if(Array.isArray(b)){var w="";return b.forEach(function(T){w+=g(T,y)}),w}var x={type:b.type,content:g(b.content,y),tag:"span",classes:["token",b.type],attributes:{},language:y},_=b.alias;_&&(Array.isArray(_)?Array.prototype.push.apply(x.classes,_):x.classes.push(_)),a.hooks.run("wrap",x);var E="";for(var C in x.attributes)E+=" "+C+'="'+(x.attributes[C]||"").replace(/"/g,""")+'"';return"<"+x.tag+' class="'+x.classes.join(" ")+'"'+E+">"+x.content+"</"+x.tag+">"},!n.document)return n.addEventListener&&(a.disableWorkerMessageHandler||n.addEventListener("message",function(g){var b=JSON.parse(g.data),y=b.language,w=b.code,x=b.immediateClose;n.postMessage(a.highlight(w,a.languages[y],y)),x&&n.close()},!1)),a;var p=a.util.currentScript();function m(){a.manual||a.highlightAll()}if(p&&(a.filename=p.src,p.hasAttribute("data-manual")&&(a.manual=!0)),!a.manual){var v=document.readyState;v==="loading"||v==="interactive"&&p&&p.defer?document.addEventListener("DOMContentLoaded",m):window.requestAnimationFrame?window.requestAnimationFrame(m):window.setTimeout(m,16)}return a}(typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{});e.exports&&(e.exports=t),DD!==void 0&&(DD.Prism=t),t.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},t.languages.markup.tag.inside["attr-value"].inside.entity=t.languages.markup.entity,t.languages.markup.doctype.inside["internal-subset"].inside=t.languages.markup,t.hooks.add("wrap",function(n){n.type==="entity"&&(n.attributes.title=n.content.replace(/&/,"&"))}),Object.defineProperty(t.languages.markup.tag,"addInlined",{value:function(n,r){var o={};o["language-"+r]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:t.languages[r]},o.cdata=/^<!\[CDATA\[|\]\]>$/i;var i={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:o}};i["language-"+r]={pattern:/[\s\S]+/,inside:t.languages[r]};var a={};a[n]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){return n}),"i"),lookbehind:!0,greedy:!0,inside:i},t.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(t.languages.markup.tag,"addAttribute",{value:function(n,r){t.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+n+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[r,"language-"+r],inside:t.languages[r]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),t.languages.html=t.languages.markup,t.languages.mathml=t.languages.markup,t.languages.svg=t.languages.markup,t.languages.xml=t.languages.extend("markup",{}),t.languages.ssml=t.languages.xml,t.languages.atom=t.languages.xml,t.languages.rss=t.languages.xml,function(n){var r=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;n.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+r.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+r.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+r.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:r,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},n.languages.css.atrule.inside.rest=n.languages.css;var o=n.languages.markup;o&&(o.tag.addInlined("style","css"),o.tag.addAttribute("style","css"))}(t),t.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},t.languages.javascript=t.languages.extend("clike",{"class-name":[t.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),t.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,t.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:t.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:t.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:t.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:t.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:t.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),t.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:t.languages.javascript}},string:/[\s\S]+/}}}),t.languages.markup&&(t.languages.markup.tag.addInlined("script","javascript"),t.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),t.languages.js=t.languages.javascript,function(){if(t!==void 0&&typeof document<"u"){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var n={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},r="data-src-status",o='pre[data-src]:not([data-src-status="loaded"]):not([data-src-status="loading"])',i=/\blang(?:uage)?-([\w-]+)\b/i;t.hooks.add("before-highlightall",function(s){s.selector+=", "+o}),t.hooks.add("before-sanity-check",function(s){var u=s.element;if(u.matches(o)){s.code="",u.setAttribute(r,"loading");var c=u.appendChild(document.createElement("CODE"));c.textContent="Loading\u2026";var d=u.getAttribute("data-src"),f=s.language;if(f==="none"){var p=(/\.(\w+)$/.exec(d)||[,"none"])[1];f=n[p]||p}l(c,f),l(u,f);var m=t.plugins.autoloader;m&&m.loadLanguages(f);var v=new XMLHttpRequest;v.open("GET",d,!0),v.onreadystatechange=function(){v.readyState==4&&(v.status<400&&v.responseText?(u.setAttribute(r,"loaded"),c.textContent=v.responseText,t.highlightElement(c)):(u.setAttribute(r,"failed"),v.status>=400?c.textContent="\u2716 Error "+v.status+" while fetching file: "+v.statusText:c.textContent="\u2716 Error: File does not exist or is empty"))},v.send(null)}}),t.plugins.fileHighlight={highlight:function(s){for(var u,c=(s||document).querySelectorAll(o),d=0;u=c[d++];)t.highlightElement(u)}};var a=!1;t.fileHighlight=function(){a||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),a=!0),t.plugins.fileHighlight.highlight.apply(this,arguments)}}function l(s,u){var c=s.className;c=c.replace(i," ")+" language-"+u,s.className=c.replace(/\s+/g," ").trim()}}()});(function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function i(s,u){return s=s.replace(/<S>/g,function(){return n}).replace(/<BRACES>/g,function(){return r}).replace(/<SPREAD>/g,function(){return o}),RegExp(s,u)}o=i(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=i(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/i,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/i,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:i(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:i(/=<BRACES>/.source),inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx},alias:"language-javascript"}},e.languages.jsx.tag);var a=function(s){return s?typeof s=="string"?s:typeof s.content=="string"?s.content:s.content.map(a).join(""):""},l=function(s){for(var u=[],c=0;c<s.length;c++){var d=s[c],f=!1;if(typeof d!="string"&&(d.type==="tag"&&d.content[0]&&d.content[0].type==="tag"?d.content[0].content[0].content==="</"?u.length>0&&u[u.length-1].tagName===a(d.content[0].content[1])&&u.pop():d.content[d.content.length-1].content==="/>"||u.push({tagName:a(d.content[0].content[1]),openedBraces:0}):u.length>0&&d.type==="punctuation"&&d.content==="{"?u[u.length-1].openedBraces++:u.length>0&&u[u.length-1].openedBraces>0&&d.type==="punctuation"&&d.content==="}"?u[u.length-1].openedBraces--:f=!0),(f||typeof d=="string")&&u.length>0&&u[u.length-1].openedBraces===0){var p=a(d);c<s.length-1&&(typeof s[c+1]=="string"||s[c+1].type==="plain-text")&&(p+=a(s[c+1]),s.splice(c+1,1)),c>0&&(typeof s[c-1]=="string"||s[c-1].type==="plain-text")&&(p=a(s[c-1])+p,s.splice(c-1,1),c--),s[c]=new e.Token("plain-text",p,null,p)}d.content&&typeof d.content!="string"&&l(d.content)}};e.hooks.add("after-tokenize",function(s){s.language!=="jsx"&&s.language!=="tsx"||l(s.tokens)})})(Prism),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|as|declare|implements|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter;var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(Prism),Prism.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:Prism.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:Prism.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){return e}),"i"),lookbehind:!0,greedy:!0,inside:r},Prism.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(e,t){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:Prism.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml,Prism.languages.go=Prism.languages.extend("clike",{string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|iota|nil|true|false)\b/,number:/(?:\b0x[a-f\d]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[-+]?\d+)?)i?/i,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/}),delete Prism.languages.go["class-name"],function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],r=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,o=/<?=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,i=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/i,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:bool|boolean|int|integer|float|string|object|array)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:bool|int|float|string|object|array(?!\s*\()|mixed|self|static|callable|iterable|(?:null|false)(?=\s*\|))\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*[\w|]\|\s*)(?:null|false)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:bool|int|float|string|object|void|array(?!\s*\()|mixed|self|static|callable|iterable|(?:null|false)(?=\s*\|))\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?[\w|]\|\s*)(?:null|false)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:bool|int|float|string|object|void|array(?!\s*\()|mixed|iterable|(?:null|false)(?=\s*\|))\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:null|false)\b/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:__halt_compiler|abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|namespace|match|new|or|parent|print|private|protected|public|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s+)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:r,operator:o,punctuation:i};var a={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},l=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:a}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:a}}];e.languages.insertBefore("php","variable",{string:l,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:l,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:r,operator:o,punctuation:i}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",function(s){/<\?/.test(s.code)&&e.languages["markup-templating"].buildPlaceholders(s,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/gi)}),e.hooks.add("after-tokenize",function(s){e.languages["markup-templating"].tokenizePlaceholders(s,"php")})}(Prism),Prism.languages.c=Prism.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:__attribute__|_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],comment:Prism.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete Prism.languages.c.boolean,Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python,function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(^|[^\w.])(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,r={pattern:RegExp(n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{"class-name":[r,{pattern:RegExp(n+/[A-Z]\w*(?=\s+\w+\s*[;,=()])/.source),lookbehind:!0,inside:r.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":r,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!<keyword>)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(/<keyword>/g,function(){return t.source})),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism),function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,function(){return t.source});e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,function(){return t.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:module|import)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,function(){return n})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(Prism),function(e){function t($,W){return $.replace(/<<(\d+)>>/g,function(K,X){return"(?:"+W[+X]+")"})}function n($,W,K){return RegExp(t($,W),"")}function r($,W){for(var K=0;K<W;K++)$=$.replace(/<<self>>/g,function(){return"(?:"+$+")"});return $.replace(/<<self>>/g,"[^\\s\\S]")}var o="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",i="class enum interface record struct",a="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",l="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function s($){return"\\b(?:"+$.trim().replace(/ /g,"|")+")\\b"}var u=s(i),c=RegExp(s(o+" "+i+" "+a+" "+l)),d=s(i+" "+a+" "+l),f=s(o+" "+i+" "+l),p=r(/<(?:[^<>;=+\-*/%&|^]|<<self>>)*>/.source,2),m=r(/\((?:[^()]|<<self>>)*\)/.source,2),v=/@?\b[A-Za-z_]\w*\b/.source,g=t(/<<0>>(?:\s*<<1>>)?/.source,[v,p]),b=t(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,g]),y=/\[\s*(?:,\s*)*\]/.source,w=t(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[b,y]),x=t(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[p,m,y]),_=t(/\(<<0>>+(?:,<<0>>+)+\)/.source,[x]),E=t(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[_,b,y]),C={keyword:c,punctuation:/[<>()?,.:[\]]/},T=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,k=/"(?:\\.|[^\\"\r\n])*"/.source,I=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;e.languages.csharp=e.languages.extend("clike",{string:[{pattern:n(/(^|[^$\\])<<0>>/.source,[I]),lookbehind:!0,greedy:!0},{pattern:n(/(^|[^@$\\])<<0>>/.source,[k]),lookbehind:!0,greedy:!0},{pattern:RegExp(T),greedy:!0,alias:"character"}],"class-name":[{pattern:n(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[b]),lookbehind:!0,inside:C},{pattern:n(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[v,E]),lookbehind:!0,inside:C},{pattern:n(/(\busing\s+)<<0>>(?=\s*=)/.source,[v]),lookbehind:!0},{pattern:n(/(\b<<0>>\s+)<<1>>/.source,[u,g]),lookbehind:!0,inside:C},{pattern:n(/(\bcatch\s*\(\s*)<<0>>/.source,[b]),lookbehind:!0,inside:C},{pattern:n(/(\bwhere\s+)<<0>>/.source,[v]),lookbehind:!0},{pattern:n(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[w]),lookbehind:!0,inside:C},{pattern:n(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[E,f,v]),inside:C}],keyword:c,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:ul|lu|[dflmu])?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:n(/([(,]\s*)<<0>>(?=\s*:)/.source,[v]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:n(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[v]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:n(/(\b(?:default|typeof|sizeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[m]),lookbehind:!0,alias:"class-name",inside:C},"return-type":{pattern:n(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[E,b]),inside:C,alias:"class-name"},"constructor-invocation":{pattern:n(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[E]),lookbehind:!0,inside:C,alias:"class-name"},"generic-method":{pattern:n(/<<0>>\s*<<1>>(?=\s*\()/.source,[v,p]),inside:{function:n(/^<<0>>/.source,[v]),generic:{pattern:RegExp(p),alias:"class-name",inside:C}}},"type-list":{pattern:n(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[u,g,v,E,c.source,m,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:n(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[g,m]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:c,"class-name":{pattern:RegExp(E),greedy:!0,inside:C},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var O=k+"|"+T,F=t(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[O]),N=r(t(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[F]),2),B=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,P=t(/<<0>>(?:\s*\(<<1>>*\))?/.source,[b,N]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:n(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[B,P]),lookbehind:!0,greedy:!0,inside:{target:{pattern:n(/^<<0>>(?=\s*:)/.source,[B]),alias:"keyword"},"attribute-arguments":{pattern:n(/\(<<0>>*\)/.source,[N]),inside:e.languages.csharp},"class-name":{pattern:RegExp(b),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var V=/:[^}\r\n]+/.source,L=r(t(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[F]),2),H=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[L,V]),U=r(t(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<<self>>*\)/.source,[O]),2),G=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[U,V]);function z($,W){return{interpolation:{pattern:n(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[$]),lookbehind:!0,inside:{"format-string":{pattern:n(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[W,V]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:n(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[H]),lookbehind:!0,greedy:!0,inside:z(H,L)},{pattern:n(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[G]),lookbehind:!0,greedy:!0,inside:z(G,U)}]})}(Prism),Prism.languages.dotnet=Prism.languages.cs=Prism.languages.csharp,Prism.languages["visual-basic"]={comment:{pattern:/(?:['‘’]|REM\b)(?:[^\r\n_]|_(?:\r\n?|\n)?)*/i,inside:{keyword:/^REM/i}},directive:{pattern:/#(?:Const|Else|ElseIf|End|ExternalChecksum|ExternalSource|If|Region)(?:[^\S\r\n]_[^\S\r\n]*(?:\r\n?|\n)|.)+/i,alias:"comment",greedy:!0},string:{pattern:/\$?["“”](?:["“”]{2}|[^"“”])*["“”]C?/i,greedy:!0},date:{pattern:/#[^\S\r\n]*(?:\d+([/-])\d+\1\d+(?:[^\S\r\n]+(?:\d+[^\S\r\n]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[^\S\r\n]*(?:AM|PM))?))?|\d+[^\S\r\n]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[^\S\r\n]*(?:AM|PM))?)[^\S\r\n]*#/i,alias:"builtin"},number:/(?:(?:\b\d+(?:\.\d+)?|\.\d+)(?:E[+-]?\d+)?|&[HO][\dA-F]+)(?:U?[ILS]|[FRD])?/i,boolean:/\b(?:True|False|Nothing)\b/i,keyword:/\b(?:AddHandler|AddressOf|Alias|And(?:Also)?|As|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|C(?:Bool|Byte|Char|Date|Dbl|Dec|Int|Lng|Obj|SByte|Short|Sng|Str|Type|UInt|ULng|UShort)|Char|Class|Const|Continue|Currency|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else(?:If)?|End(?:If)?|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get(?:Type|XMLNamespace)?|Global|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|IsNot|Let|Lib|Like|Long|Loop|Me|Mod|Module|Must(?:Inherit|Override)|My(?:Base|Class)|Namespace|Narrowing|New|Next|Not(?:Inheritable|Overridable)?|Object|Of|On|Operator|Option(?:al)?|Or(?:Else)?|Out|Overloads|Overridable|Overrides|ParamArray|Partial|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|SByte|Select|Set|Shadows|Shared|short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TryCast|Type|TypeOf|U(?:Integer|Long|Short)|Using|Variant|Wend|When|While|Widening|With(?:Events)?|WriteOnly|Until|Xor)\b/i,operator:[/[+\-*/\\^<=>&#@$%!]/,{pattern:/([^\S\r\n])_(?=[^\S\r\n]*[\r\n])/,lookbehind:!0}],punctuation:/[{}().,:?]/},Prism.languages.vb=Prism.languages["visual-basic"],Prism.languages.vba=Prism.languages["visual-basic"],Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:S|ING)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|IN|ILIKE|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){e.languages.ruby=e.languages.extend("clike",{comment:[/#.*/,{pattern:/^=begin\s[\s\S]*?^=end/m,greedy:!0}],"class-name":{pattern:/(\b(?:class)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|protected|private|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/});var t={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.languages.ruby}};delete e.languages.ruby.function,e.languages.insertBefore("ruby","keyword",{regex:[{pattern:RegExp(/%r/.source+"(?:"+[/([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S])*\)/.source,/\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S])*\]/.source,/<(?:[^<>\\]|\\[\s\S])*>/.source].join("|")+")"+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:t}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:t}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:{pattern:/(^|[^:]):[a-zA-Z_]\w*(?:[?!]|\b)/,lookbehind:!0},"method-definition":{pattern:/(\bdef\s+)[\w.]+/,lookbehind:!0,inside:{function:/\w+$/,rest:e.languages.ruby}}}),e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z]\w*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:RegExp(/%[qQiIwWxs]?/.source+"(?:"+[/([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S])*\)/.source,/\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S])*\]/.source,/<(?:[^<>\\]|\\[\s\S])*>/.source].join("|")+")"),greedy:!0,inside:{interpolation:t}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:t}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|[a-z_]\w*$/i,alias:"symbol",inside:{punctuation:/^<<[-~]?/}},interpolation:t}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|[a-z_]\w*$/i,alias:"symbol",inside:{punctuation:/^<<[-~]?'|'$/}}}}],e.languages.rb=e.languages.ruby}(Prism),Prism.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ ]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:true|false)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:true|false)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},Prism.languages.swift["string-literal"].forEach(function(e){e.inside.interpolation.inside=Prism.languages.swift}),function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=r.variable[1].inside,a=0;a<o.length;a++)i[o[a]]=e.languages.bash[o[a]];e.languages.shell=e.languages.bash}(Prism),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(u){return u=u.replace(/<inner>/g,function(){return t}),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+u+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,function(){return r}),i=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"font-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+i+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+i+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+i+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(u){["url","bold","italic","strike","code-snippet"].forEach(function(c){u!==c&&(e.languages.markdown[u].inside.content.inside[c]=e.languages.markdown[c])})}),e.hooks.add("after-tokenize",function(u){u.language!=="markdown"&&u.language!=="md"||function c(d){if(d&&typeof d!="string")for(var f=0,p=d.length;f<p;f++){var m=d[f];if(m.type==="code"){var v=m.content[1],g=m.content[3];if(v&&g&&v.type==="code-language"&&g.type==="code-block"&&typeof v.content=="string"){var b=v.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),y="language-"+(b=(/[a-z][\w-]*/i.exec(b)||[""])[0].toLowerCase());g.alias?typeof g.alias=="string"?g.alias=[g.alias,y]:g.alias.push(y):g.alias=[y]}}else c(m.content)}}(u.tokens)}),e.hooks.add("wrap",function(u){if(u.type==="code-block"){for(var c="",d=0,f=u.classes.length;d<f;d++){var p=u.classes[d],m=/language-(.+)/.exec(p);if(m){c=m[1];break}}var v=e.languages[c];if(v)u.content=e.highlight(function(b){return b.replace(a,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,function(y,w){var x;return(w=w.toLowerCase())[0]==="#"?(x=w[1]==="x"?parseInt(w.slice(2),16):Number(w.slice(1)),s(x)):l[w]||y})}(u.content),v,c);else if(c&&c!=="none"&&e.plugins.autoloader){var g="md-"+new Date().valueOf()+"-"+Math.floor(1e16*Math.random());u.attributes.id=g,e.plugins.autoloader.loadLanguages(c,function(){var b=document.getElementById(g);b&&(b.innerHTML=e.highlight(b.textContent,e.languages[c],c))})}}});var a=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(Prism),Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[^z]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+(?:\.[a-f\d]*)?(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|(?:\.\d*)?(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/},Prism.languages.groovy=Prism.languages.extend("clike",{string:[{pattern:/("""|''')(?:[^\\]|\\[\s\S])*?\1|\$\/(?:[^/$]|\$(?:[/$]|(?![/$]))|\/(?!\$))*\/\$/,greedy:!0},{pattern:/(["'/])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0}],keyword:/\b(?:as|def|in|abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/,number:/\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?\d+)?)[glidf]?\b/i,operator:{pattern:/(^|[^.])(?:~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.\.(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,lookbehind:!0},punctuation:/\.+|[{}[\];(),:$]/}),Prism.languages.insertBefore("groovy","string",{shebang:{pattern:/#!.+/,alias:"comment"}}),Prism.languages.insertBefore("groovy","punctuation",{"spock-block":/\b(?:setup|given|when|then|and|cleanup|expect|where):/}),Prism.languages.insertBefore("groovy","function",{annotation:{pattern:/(^|[^.])@\w+/,lookbehind:!0,alias:"punctuation"}}),Prism.hooks.add("wrap",function(e){if(e.language==="groovy"&&e.type==="string"){var t=e.content[0];if(t!="'"){var n=/([^\\])(?:\$(?:\{.*?\}|[\w.]+))/;t==="$"&&(n=/([^\$])(?:\$(?:\{.*?\}|[\w.]+))/),e.content=e.content.replace(/</g,"<").replace(/&/g,"&"),e.content=Prism.highlight(e.content,{expression:{pattern:n,lookbehind:!0,inside:Prism.languages.groovy}}),e.classes.push(t==="/"?"regex":"gstring")}}});var S5t=["comment","prolog","doctype","cdata","punctuation","namespace","property","tag","boolean","number","constant","symbol","deleted","selector","attr-name","string","builtin","inserted","operator","entity","url","string","atrule","attr-value","keyword","function","class-name","regex","important","variable","bold","italic","entity","char"];function HCe(e){return typeof e=="string"?e.length:typeof e.content=="string"?e.content.length:e.content.reduce(function(t,n){return t+HCe(n)},0)}var LD,k5t=hr.String,xf=function(e){if(BY(e)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return k5t(e)},$Ce=function(){var e=ac(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t},GY=hr.RegExp,qY=ia(function(){var e=GY("a","y");return e.lastIndex=2,e.exec("abcd")!=null}),D5t=qY||ia(function(){return!GY("a","y").sticky}),UCe={BROKEN_CARET:qY||ia(function(){var e=GY("^r","gy");return e.lastIndex=2,e.exec("str")!=null}),MISSED_STICKY:D5t,UNSUPPORTED_Y:qY},O5t=vd?Object.defineProperties:function(e,t){ac(e);for(var n,r=RD(t),o=PD(t),i=o.length,a=0;i>a;)MD.f(e,n=o[a++],r[n]);return e},T5t=FA("document","documentElement"),WCe=vCe("IE_PROTO"),KY=function(){},GCe=function(e){return"<script>"+e+"<\/script>"},qCe=function(e){e.write(GCe("")),e.close();var t=e.parentWindow.Object;return e=null,t},jD=function(){try{LD=new ActiveXObject("htmlfile")}catch{}var e,t;jD=typeof document<"u"?document.domain&&LD?qCe(LD):((t=kY("iframe")).style.display="none",T5t.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write(GCe("document.F=Object")),e.close(),e.F):qCe(LD);for(var n=ID.length;n--;)delete jD.prototype[ID[n]];return jD()};NY[WCe]=!0;var KCe,YY,M5t=Object.create||function(e,t){var n;return e!==null?(KY.prototype=ac(e),n=new KY,KY.prototype=null,n[WCe]=e):n=jD(),t===void 0?n:O5t(n,t)},N5t=hr.RegExp,F5t=ia(function(){var e=N5t(".","s");return!(e.dotAll&&e.exec(`
| `)&&e.flags==="s")}),R5t=hr.RegExp,I5t=ia(function(){var e=R5t("(?<a>b)","g");return e.exec("b").groups.a!=="b"||"b".replace(e,"$<a>c")!=="bc"}),B5t=RY.get,P5t=yY("native-string-replace",String.prototype.replace),VD=RegExp.prototype.exec,XY=VD,L5t=zr("".charAt),j5t=zr("".indexOf),V5t=zr("".replace),QY=zr("".slice),JY=(YY=/b*/g,aa(VD,KCe=/a/,"a"),aa(VD,YY,"a"),KCe.lastIndex!==0||YY.lastIndex!==0),YCe=UCe.BROKEN_CARET,ZY=/()??/.exec("")[1]!==void 0;(JY||ZY||YCe||F5t||I5t)&&(XY=function(e){var t,n,r,o,i,a,l,s=this,u=B5t(s),c=xf(e),d=u.raw;if(d)return d.lastIndex=s.lastIndex,t=aa(XY,d,c),s.lastIndex=d.lastIndex,t;var f=u.groups,p=YCe&&s.sticky,m=aa($Ce,s),v=s.source,g=0,b=c;if(p&&(m=V5t(m,"y",""),j5t(m,"g")===-1&&(m+="g"),b=QY(c,s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&L5t(c,s.lastIndex-1)!==`
| `)&&(v="(?: "+v+")",b=" "+b,g++),n=new RegExp("^(?:"+v+")",m)),ZY&&(n=new RegExp("^"+v+"$(?!\\s)",m)),JY&&(r=s.lastIndex),o=aa(VD,p?n:s,b),p?o?(o.input=QY(o.input,g),o[0]=QY(o[0],g),o.index=s.lastIndex,s.lastIndex+=o[0].length):s.lastIndex=0:JY&&o&&(s.lastIndex=s.global?o.index+o[0].length:r),ZY&&o&&o.length>1&&aa(P5t,o[0],n,function(){for(i=1;i<arguments.length-2;i++)arguments[i]===void 0&&(o[i]=void 0)}),o&&f)for(o.groups=a=M5t(null),i=0;i<f.length;i++)a[(l=f[i])[0]]=o[l[1]];return o});var VA=XY;BD({target:"RegExp",proto:!0,forced:/./.exec!==VA},{exec:VA});var eX=Function.prototype,XCe=eX.apply,z5t=eX.bind,QCe=eX.call,H5t=typeof Reflect=="object"&&Reflect.apply||(z5t?QCe.bind(XCe):function(){return QCe.apply(XCe,arguments)}),$5t=Yh("species"),tX=RegExp.prototype,U5t=Yh("match"),W5t=hr.TypeError,G5t=Yh("species"),q5t=zr("".charAt),JCe=zr("".charCodeAt),K5t=zr("".slice),Y5t=function(e){return function(t,n){var r,o,i=xf(Ky(t)),a=VY(n),l=i.length;return a<0||a>=l?e?"":void 0:(r=JCe(i,a))<55296||r>56319||a+1===l||(o=JCe(i,a+1))<56320||o>57343?e?q5t(i,a):r:e?K5t(i,a,a+2):o-56320+(r-55296<<10)+65536}}(!0),X5t=function(e,t,n){return t+(n?Y5t(e,t).length:1)},Q5t=hr.Array,J5t=Math.max,ZCe=function(e,t,n){for(var r,o,i,a,l=zY(e),s=WY(t,l),u=WY(n===void 0?l:n,l),c=Q5t(J5t(u-s,0)),d=0;s<u;s++,d++)r=c,o=d,i=e[s],(a=OY(o))in r?MD.f(r,a,TY(0,i)):r[a]=i;return c.length=d,c},Z5t=hr.TypeError,eSe=function(e,t){var n=e.exec;if(cl(n)){var r=aa(n,e,t);return r!==null&&ac(r),r}if(Xh(e)==="RegExp")return aa(VA,e,t);throw Z5t("RegExp#exec called on incompatible receiver")},Jy=UCe.UNSUPPORTED_Y,eAt=Math.min,tSe=[].push,tAt=zr(/./.exec),Zy=zr(tSe),zA=zr("".slice);(function(e,t,n,r){var o=Yh(e),i=!ia(function(){var u={};return u[o]=function(){return 7},""[e](u)!=7}),a=i&&!ia(function(){var u=!1,c=/a/;return(c={}).constructor={},c.constructor[$5t]=function(){return c},c.flags="",c[o]=/./[o],c.exec=function(){return u=!0,null},c[o](""),!u});if(!i||!a||n){var l=zr(/./[o]),s=function(u,c,d){var f;return f="abbc".split(/(b)*/)[1]=="c"||"test".split(/(?:)/,-1).length!=4||"ab".split(/(?:ab)*/).length!=2||".".split(/(.?)(.?)/).length!=4||".".split(/()()/).length>1||"".split(/.?/).length?function(p,m){var v,g,b=xf(Ky(this)),y=m===void 0?4294967295:m>>>0;if(y===0)return[];if(p===void 0)return[b];if(!md(v=p)||!((g=v[U5t])!==void 0?g:Xh(v)=="RegExp"))return aa(c,b,p,y);for(var w,x,_,E=[],C=(p.ignoreCase?"i":"")+(p.multiline?"m":"")+(p.unicode?"u":"")+(p.sticky?"y":""),T=0,k=new RegExp(p.source,C+"g");(w=aa(VA,k,b))&&!((x=k.lastIndex)>T&&(Zy(E,zA(b,T,w.index)),w.length>1&&w.index<b.length&&H5t(tSe,E,ZCe(w,1)),_=w[0].length,T=x,E.length>=y));)k.lastIndex===w.index&&k.lastIndex++;return T===b.length?!_&&tAt(k,"")||Zy(E,""):Zy(E,zA(b,T)),E.length>y?ZCe(E,0,y):E}:"0".split(void 0,0).length?function(p,m){return p===void 0&&m===0?[]:aa(c,this,p,m)}:c,[function(p,m){var v=Ky(this),g=p==null?void 0:dCe(p,u);return g?aa(g,p,v,m):aa(f,xf(v),p,m)},function(p,m){var v=ac(this),g=xf(p),b=d(f,v,g,m,f!==c);if(b.done)return b.value;var y=function(N,B){var P,V=ac(N).constructor;return V===void 0||(P=ac(V)[G5t])==null?B:function(L){if(kCe(L))return L;throw W5t(uCe(L)+" is not a constructor")}(P)}(v,RegExp),w=v.unicode,x=(v.ignoreCase?"i":"")+(v.multiline?"m":"")+(v.unicode?"u":"")+(Jy?"g":"y"),_=new y(Jy?"^(?:"+v.source+")":v,x),E=m===void 0?4294967295:m>>>0;if(E===0)return[];if(g.length===0)return eSe(_,g)===null?[g]:[];for(var C=0,T=0,k=[];T<g.length;){_.lastIndex=Jy?0:T;var I,O=eSe(_,Jy?zA(g,T):g);if(O===null||(I=eAt(_Ce(_.lastIndex+(Jy?T:0)),g.length))===C)T=X5t(g,T,w);else{if(Zy(k,zA(g,C,T)),k.length===E)return k;for(var F=1;F<=O.length-1;F++)if(Zy(k,O[F]),k.length===E)return k;T=C=I}}return Zy(k,zA(g,C)),k}]}(o,""[e],function(u,c,d,f,p){var m=zr(u),v=c.exec;return v===VA||v===tX.exec?i&&!p?{done:!0,value:l(c,d,f)}:{done:!0,value:m(d,c,f)}:{done:!1}});PA(String.prototype,e,s[0]),PA(tX,o,s[1])}r&&Yy(tX[o],"sham",!0)})("split",0,!!ia(function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return n.length!==2||n[0]!=="a"||n[1]!=="b"}),Jy),BD({global:!0},{globalThis:hr}),iu&&(Pe.fn.attr=iu);var nAt=yCe.PROPER,nX=RegExp.prototype,nSe=nX.toString,rAt=zr($Ce),oAt=ia(function(){return nSe.call({source:"a",flags:"b"})!="/a/b"}),iAt=nAt&&nSe.name!="toString";(oAt||iAt)&&PA(RegExp.prototype,"toString",function(){var e=ac(this),t=xf(e.source),n=e.flags;return"/"+t+"/"+xf(n===void 0&&sCe(nX,e)&&!("flags"in nX)?rAt(e):n)},{unsafe:!0});var aAt=function(){function e(){this.title=jt("highLightModule.selectLang"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M64 64v896h896V64H64z m487.6 698.8c0 87.2-51.2 127-125.8 127-67.4 0-106.4-34.8-126.4-77l68.6-41.4c13.2 23.4 25.2 43.2 54.2 43.2 27.6 0 45.2-10.8 45.2-53V475.4h84.2v287.4z m199.2 127c-78.2 0-128.8-37.2-153.4-86l68.6-39.6c18 29.4 41.6 51.2 83 51.2 34.8 0 57.2-17.4 57.2-41.6 0-28.8-22.8-39-61.4-56l-21-9c-60.8-25.8-101-58.4-101-127 0-63.2 48.2-111.2 123.2-111.2 53.6 0 92 18.6 119.6 67.4L800 580c-14.4-25.8-30-36-54.2-36-24.6 0-40.2 15.6-40.2 36 0 25.2 15.6 35.4 51.8 51.2l21 9c71.6 30.6 111.8 62 111.8 132.4 0 75.6-59.6 117.2-139.4 117.2z"></path></svg>',this.tag="select",this.width=95,this.selectPanelWidth=115}return e.prototype.getOptions=function(t){var n=[],r=t.getMenuConfig("codeSelectLang").codeLangs,o=r===void 0?[]:r;n.push({text:"plain text",value:""}),o.forEach(function(a){var l=a.text,s=a.value;n.push({text:l,value:s})});var i=this.getValue(t);return n.forEach(function(a){a.value===i?a.selected=!0:delete a.selected}),n},e.prototype.isActive=function(t){return!1},e.prototype.getValue=function(t){var n=this.getSelectCodeElem(t);if(n==null||!sn.isElement(n))return"";var r=n.language.toString(),o=t.getMenuConfig("codeSelectLang").codeLangs;return(o===void 0?[]:o).some(function(i){return i.value===r})?r:""},e.prototype.isDisabled=function(t){return t.selection==null||!this.getSelectCodeElem(t)},e.prototype.exec=function(t,n){if(this.getSelectCodeElem(t)!=null){var r={language:n.toString()};et.setNodes(t,r,{match:function(o){return Re.checkNodeType(o,"code")}})}},e.prototype.getSelectCodeElem=function(t){var n=Re.getSelectedNodeByType(t,"code");if(n==null)return null;var r=Re.getParentNode(t,n);return sn.isElement(r)?r.type!=="pre"?null:n:null},e}(),lAt={renderStyle:function(e,t){var n=e,r=t,o="";return S5t.forEach(function(i){n[i]&&(o=i)}),o&&function(i,a){i.data==null&&(i.data={});var l=i.data;l.props==null&&(l.props={}),Object.assign(l.props,{className:a})}(r,o="token "+o),r},parseStyleHtml:function(e,t,n){var r=Pe(e);if(!sn.isElement(t)||Re.getNodeType(t)!=="code")return t;var o=t,i=r.attr("class")||"";return i.indexOf("language-")===0?o.language=i.split("-")[1]||"":o.language=i.toLowerCase(),o},menus:[{key:"codeSelectLang",factory:function(){return new aAt},config:{codeLangs:[{text:"CSS",value:"css"},{text:"HTML",value:"html"},{text:"XML",value:"xml"},{text:"Javascript",value:"javascript"},{text:"Typescript",value:"typescript"},{text:"JSX",value:"jsx"},{text:"Go",value:"go"},{text:"PHP",value:"php"},{text:"C",value:"c"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C++",value:"cpp"},{text:"C#",value:"csharp"},{text:"Visual Basic",value:"visual-basic"},{text:"SQL",value:"sql"},{text:"Ruby",value:"ruby"},{text:"Swift",value:"swift"},{text:"Bash",value:"bash"},{text:"Lua",value:"lua"},{text:"Groovy",value:"groovy"},{text:"Markdown",value:"markdown"}]}}],elemsToHtml:[{type:"code",elemToHtml:function(e,t){var n=e.language,r=n===void 0?"":n;return"<code "+(r?'class="language-'+r+'"':"")+">"+t+"</code>"}}]},sAt=/"/g,uAt=zr("".replace);BD({target:"String",proto:!0,forced:ia(function(){var e="".anchor('"');return e!==e.toLowerCase()||e.split('"').length>3})},{anchor:function(e){return t=e,n=xf(Ky(this)),r="<a",(r+=' name="'+uAt(xf(t),sAt,""")+'"')+">"+n+"</a>";var t,n,r}});var rSe=function(e){var t,n,r,o=function(b,y){var w=typeof Symbol=="function"&&b[Symbol.iterator];if(!w)return b;var x,_,E=w.call(b),C=[];try{for(;(y===void 0||y-- >0)&&!(x=E.next()).done;)C.push(x.value)}catch(T){_={error:T}}finally{try{x&&!x.done&&(w=E.return)&&w.call(E)}finally{if(_)throw _.error}}return C}(e,2),i=o[0],a=o[1],l=[],s=function(b){if(!Qt.isText(b))return null;var y=Re.getParentNode(null,b);if(y&&Re.getNodeType(y)==="code"){var w=Re.getParentNode(null,y);if(w&&Re.getNodeType(w)==="pre")return y}return null}(i);if(s==null)return l;var u=s.language,c=u===void 0?"":u;if(!c)return l;var d=function(b,y){if(!y)return[];var w=zCe.languages[y];return w?zCe.tokenize(b.text,w):[]}(i,c),f=0;try{for(var p=function(b){var y=typeof Symbol=="function"&&Symbol.iterator,w=y&&b[y],x=0;if(w)return w.call(b);if(b&&typeof b.length=="number")return{next:function(){return b&&x>=b.length&&(b=void 0),{value:b&&b[x++],done:!b}}};throw new TypeError(y?"Object is not iterable.":"Symbol.iterator is not defined.")}(d),m=p.next();!m.done;m=p.next()){var v=m.value,g=f+HCe(v);typeof v!="string"&&l.push(((r={})[v.type]=!0,r.anchor={path:a,offset:f},r.focus={path:a,offset:g},r)),f=g}}catch(b){t={error:b}}finally{try{m&&!m.done&&(n=p.return)&&n.call(p)}finally{if(t)throw t.error}}return l},Io=function(){return Io=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},Io.apply(this,arguments)},la=function(){function e(){throw new Error(`\u4E0D\u80FD\u5B9E\u4F8B\u5316
| Can not construct a instance`)}return e.setEditorConfig=function(t){t===void 0&&(t={}),this.editorConfig=Io(Io({},this.editorConfig),t)},e.setSimpleEditorConfig=function(t){t===void 0&&(t={}),this.simpleEditorConfig=Io(Io({},this.simpleEditorConfig),t)},e.setToolbarConfig=function(t){t===void 0&&(t={}),this.toolbarConfig=Io(Io({},this.toolbarConfig),t)},e.setSimpleToolbarConfig=function(t){t===void 0&&(t={}),this.simpleToolbarConfig=Io(Io({},this.simpleToolbarConfig),t)},e.registerPlugin=function(t){this.plugins.push(t)},e.registerMenu=function(t,n){(function(r,o){var i=r.key,a=r.factory,l=r.config,s=cu(cu({},l),o||{});if(v8[i]!=null)throw new Error("Duplicated key '"+i+"' in menu items");v8[i]=a,function(u,c){c!=null&&(P3e[u]=c)}(i,s)})(t,n)},e.registerRenderElem=function(t){(function(n){var r=n.type,o=n.renderElem;H4e[r||""]=o})(t)},e.registerRenderStyle=function(t){(function(n){CH.push(n)})(t)},e.registerElemToHtml=function(t){(function(n){var r=n.type,o=n.elemToHtml;j3e[r||""]=o})(t)},e.registerStyleToHtml=function(t){(function(n){Wz.push(n)})(t)},e.registerPreParseHtml=function(t){(function(n){b4e.push(n)})(t)},e.registerParseElemHtml=function(t){(function(n){var r=n.selector,o=n.parseElemHtml;PC[r]=o})(t)},e.registerParseStyleHtml=function(t){(function(n){dH.push(n)})(t)},e.registerModule=function(t){nm(t)},e.editorConfig={},e.simpleEditorConfig={},e.toolbarConfig={},e.simpleToolbarConfig={},e.plugins=[],e}();function nm(e){var t=e.menus,n=e.renderElems,r=e.renderStyle,o=e.elemsToHtml,i=e.styleToHtml,a=e.preParseHtml,l=e.parseElemsHtml,s=e.parseStyleHtml,u=e.editorPlugin;t&&t.forEach(function(c){return la.registerMenu(c)}),n&&n.forEach(function(c){return la.registerRenderElem(c)}),r&&la.registerRenderStyle(r),o&&o.forEach(function(c){return la.registerElemToHtml(c)}),i&&la.registerStyleToHtml(i),a&&a.forEach(function(c){return la.registerPreParseHtml(c)}),l&&l.forEach(function(c){return la.registerParseElemHtml(c)}),s&&la.registerParseStyleHtml(s),u&&la.registerPlugin(u)}O0t.forEach(function(e){return nm(e)}),nm(rmt),nm(S2t),nm(F3t),nm(w8t),nm(lAt);var oSe='<svg viewBox="0 0 1024 1024"><path d="M959.877 128l0.123 0.123v767.775l-0.123 0.122H64.102l-0.122-0.122V128.123l0.122-0.123h895.775zM960 64H64C28.795 64 0 92.795 0 128v768c0 35.205 28.795 64 64 64h896c35.205 0 64-28.795 64-64V128c0-35.205-28.795-64-64-64zM832 288.01c0 53.023-42.988 96.01-96.01 96.01s-96.01-42.987-96.01-96.01S682.967 192 735.99 192 832 234.988 832 288.01zM896 832H128V704l224.01-384 256 320h64l224.01-192z"></path></svg>',iSe={link:{menuKeys:["editLink","unLink","viewLink"]},image:{menuKeys:["imageWidth30","imageWidth50","imageWidth100","editImage","viewImageLink","deleteImage"]},pre:{menuKeys:["enter","codeBlock","codeSelectLang"]},table:{menuKeys:["enter","tableHeader","tableFullWidth","insertTableRow","deleteTableRow","insertTableCol","deleteTableCol","deleteTable"]},divider:{menuKeys:["enter"]},video:{menuKeys:["enter","editVideoSize"]}},cAt={hoverbarKeys:Io(Io({},iSe),{text:{menuKeys:["headerSelect","insertLink","bulletedList","|","bold","through","color","bgColor","clearStyle"]}})};la.setEditorConfig(Io(Io({},cAt),{decorate:rSe}));var dAt={hoverbarKeys:iSe};la.setSimpleEditorConfig(Io(Io({},dAt),{decorate:rSe}));var fAt={toolbarKeys:["headerSelect","blockquote","|","bold","underline","italic",{key:"group-more-style",title:jt("editor.more"),iconSvg:'<svg viewBox="0 0 1024 1024"><path d="M204.8 505.6m-76.8 0a76.8 76.8 0 1 0 153.6 0 76.8 76.8 0 1 0-153.6 0Z"></path><path d="M505.6 505.6m-76.8 0a76.8 76.8 0 1 0 153.6 0 76.8 76.8 0 1 0-153.6 0Z"></path><path d="M806.4 505.6m-76.8 0a76.8 76.8 0 1 0 153.6 0 76.8 76.8 0 1 0-153.6 0Z"></path></svg>',menuKeys:["through","code","sup","sub","clearStyle"]},"color","bgColor","|","fontSize","fontFamily","lineHeight","|","bulletedList","numberedList","todo",{key:"group-justify",title:jt("editor.justify"),iconSvg:'<svg viewBox="0 0 1024 1024"><path d="M768 793.6v102.4H51.2v-102.4h716.8z m204.8-230.4v102.4H51.2v-102.4h921.6z m-204.8-230.4v102.4H51.2v-102.4h716.8zM972.8 102.4v102.4H51.2V102.4h921.6z"></path></svg>',menuKeys:["justifyLeft","justifyRight","justifyCenter","justifyJustify"]},{key:"group-indent",title:jt("editor.indent"),iconSvg:'<svg viewBox="0 0 1024 1024"><path d="M0 64h1024v128H0z m384 192h640v128H384z m0 192h640v128H384z m0 192h640v128H384zM0 832h1024v128H0z m0-128V320l256 192z"></path></svg>',menuKeys:["indent","delIndent"]},"|","emotion","insertLink",{key:"group-image",title:jt("editor.image"),iconSvg:oSe,menuKeys:["insertImage","uploadImage"]},{key:"group-video",title:jt("editor.video"),iconSvg:'<svg viewBox="0 0 1024 1024"><path d="M981.184 160.096C837.568 139.456 678.848 128 512 128S186.432 139.456 42.816 160.096C15.296 267.808 0 386.848 0 512s15.264 244.16 42.816 351.904C186.464 884.544 345.152 896 512 896s325.568-11.456 469.184-32.096C1008.704 756.192 1024 637.152 1024 512s-15.264-244.16-42.816-351.904zM384 704V320l320 192-320 192z"></path></svg>',menuKeys:["insertVideo","uploadVideo"]},"insertTable","codeBlock","divider","|","undo","redo","|","fullScreen"]};la.setToolbarConfig(fAt);var pAt={toolbarKeys:["blockquote","header1","header2","header3","|","bold","underline","italic","through","color","bgColor","clearStyle","|","bulletedList","numberedList","todo","justifyLeft","justifyRight","justifyCenter","|","insertLink",{key:"group-image",title:jt("editor.image"),iconSvg:oSe,menuKeys:["insertImage","uploadImage"]},"insertVideo","insertTable","codeBlock","|","undo","redo","|","fullScreen"]};la.setSimpleToolbarConfig(pAt);var hAt=Object.defineProperty,vAt=Object.defineProperties,mAt=Object.getOwnPropertyDescriptors,aSe=Object.getOwnPropertySymbols,gAt=Object.prototype.hasOwnProperty,yAt=Object.prototype.propertyIsEnumerable,lSe=(e,t,n)=>t in e?hAt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,bAt=(e,t)=>{for(var n in t||(t={}))gAt.call(t,n)&&lSe(e,n,t[n]);if(aSe)for(var n of aSe(t))yAt.call(t,n)&&lSe(e,n,t[n]);return e},AAt=(e,t)=>vAt(e,mAt(t));function Jh(e){let t=`\u8BF7\u4F7F\u7528 '@${e}' \u4E8B\u4EF6\uFF0C\u4E0D\u8981\u653E\u5728 props \u4E2D`;return t+=`
| Please use '@${e}' event instead of props`,t}var sSe=(e,t)=>{for(const[n,r]of t)e[n]=r;return e};const wAt=Te({props:{mode:{type:String,default:"default"},defaultContent:{type:Array,default:[]},defaultHtml:{type:String,default:""},defaultConfig:{type:Object,default:{}},modelValue:{type:String,default:""}},setup(e,t){const n=de(null),r=Qo(null),o=de(""),i=()=>{if(!n.value)return;const a=Zn(e.defaultContent);(function(l){l===void 0&&(l={});var s=l.selector,u=s===void 0?"":s,c=l.content,d=c===void 0?[]:c,f=l.html,p=l.config,m=p===void 0?{}:p,v=l.mode,g=(v===void 0?"default":v)==="simple"?la.simpleEditorConfig:la.editorConfig,b=Io(Io({},g.hoverbarKeys||{}),m.hoverbarKeys||{});rut({selector:u,config:Io(Io(Io({},g),m),{hoverbarKeys:b}),content:d,html:f,plugins:la.plugins})})({selector:n.value,mode:e.mode,content:a||[],html:e.defaultHtml||e.modelValue||"",config:AAt(bAt({},e.defaultConfig),{onCreated(l){if(r.value=l,t.emit("onCreated",l),e.defaultConfig.onCreated){const s=Jh("onCreated");throw new Error(s)}},onChange(l){const s=l.getHtml();if(o.value=s,t.emit("update:modelValue",s),t.emit("onChange",l),e.defaultConfig.onChange){const u=Jh("onChange");throw new Error(u)}},onDestroyed(l){if(t.emit("onDestroyed",l),e.defaultConfig.onDestroyed){const s=Jh("onDestroyed");throw new Error(s)}},onMaxLength(l){if(t.emit("onMaxLength",l),e.defaultConfig.onMaxLength){const s=Jh("onMaxLength");throw new Error(s)}},onFocus(l){if(t.emit("onFocus",l),e.defaultConfig.onFocus){const s=Jh("onFocus");throw new Error(s)}},onBlur(l){if(t.emit("onBlur",l),e.defaultConfig.onBlur){const s=Jh("onBlur");throw new Error(s)}},customAlert(l,s){if(t.emit("customAlert",l,s),e.defaultConfig.customAlert){const u=Jh("customAlert");throw new Error(u)}},customPaste:(l,s)=>{if(e.defaultConfig.customPaste){const c=Jh("customPaste");throw new Error(c)}let u;return t.emit("customPaste",l,s,c=>{u=c}),u}})})};return yn(()=>{i()}),Je(()=>e.modelValue,a=>{a!==o.value&&function(l){const s=r.value;s!=null&&s.setHtml(l)}(a)}),{box:n}}}),xAt={ref:"box",style:{height:"100%"}};var _At=sSe(wAt,[["render",function(e,t,n,r,o,i){return Y(),fe("div",xAt,null,512)}]]);const EAt=Te({props:{editor:{type:Object},mode:{type:String,default:"default"},defaultConfig:{type:Object,default:{}}},setup(e){const t=de(null),n=r=>{if(t.value){if(r==null)throw new Error("Not found instance of Editor when create <Toolbar/> component");Re.getToolbar(r)||function(o){var i=o.selector,a=o.editor,l=o.config,s=l===void 0?{}:l,u=o.mode,c=u===void 0?"default":u;if(!i)throw new Error("Cannot find 'selector' when create toolbar");var d=c==="simple"?la.simpleToolbarConfig:la.toolbarConfig,f=function(p,m){if(p==null)throw new Error("Cannot create toolbar, because editor is null");var v=m.selector,g=m.config,b=g===void 0?{}:g;if(function(x,_){return k4e(x,"data-w-e-toolbar",_)}(p,v))throw new Error("Repeated create toolbar by selector '"+v+"'");var y=cu({toolbarKeys:[],excludeKeys:[],insertKeys:{index:0,keys:[]},modalAppendToBody:!1},b||{}),w=new sut(v,y);return Mz.set(w,p),DC.set(p,w),w}(a,{selector:i,config:Io(Io({},d),s)})}({editor:r,selector:t.value||"<div></div>",mode:e.mode,config:e.defaultConfig})}};return yl(()=>{const{editor:r}=e;r!=null&&n(r)}),{selector:t}}}),CAt={ref:"selector"};var SAt=sSe(EAt,[["render",function(e,t,n,r,o,i){return Y(),fe("div",CAt,null,512)}]]);let uSe,rX,eb,cSe,oX,dSe;uSe={class:"border-1 border-solid border-[var(--tags-view-border-color)] z-10"},BQ=Te({name:"Editor",__name:"Editor",props:{editorId:Xn.string.def("wangeEditor-1"),height:Xn.oneOfType([Number,String]).def("500px"),editorConfig:{type:Object,default:()=>{}},readonly:Xn.bool.def(!1),modelValue:Xn.string.def("")},emits:["change","update:modelValue"],setup(e,{expose:t,emit:n}){const r=Fw();(function(f){k8.changeLanguage(f)})(M(ee(()=>r.getCurrentLocale)).lang);const o=e,i=n,a=Qo(),l=de("");Je(()=>o.modelValue,f=>{f!==M(l)&&(l.value=f)},{immediate:!0}),Je(()=>l.value,f=>{i("update:modelValue",f)});const s=f=>{a.value=f},u=ee(()=>Object.assign({placeholder:"\u8BF7\u8F93\u5165\u5185\u5BB9...",readOnly:o.readonly,customAlert:(f,p)=>{switch(p){case"success":El.success(f);break;case"info":default:El.info(f);break;case"warning":El.warning(f);break;case"error":El.error(f)}},autoFocus:!1,scroll:!0,MENU_CONF:{uploadImage:{server:"http://localhost:48080/admin-api/infra/file/upload",maxFileSize:5242880,maxNumberOfFiles:10,allowedFileTypes:["image/*"],headers:{Accept:"*",Authorization:"Bearer "+Cd(),"tenant-id":_b()},timeout:5e3,fieldName:"file",onBeforeUpload:f=>f,onProgress(f){console.log("progress",f)},onSuccess(f,p){console.log("onSuccess",f,p)},onFailed(f,p){alert(p.message),console.log("onFailed",f,p)},onError(f,p,m){alert(p.message),console.error("onError",f,p,m)},customInsert(f,p){p(f.data,"image",f.data)}},uploadVideo:{server:"http://localhost:48080/admin-api/infra/file/upload",maxFileSize:10485760,maxNumberOfFiles:10,allowedFileTypes:["video/*"],headers:{Accept:"*",Authorization:"Bearer "+Cd(),"tenant-id":_b()},timeout:15e3,fieldName:"file",onBeforeUpload:f=>f,onProgress(f){console.log("progress",f)},onSuccess(f,p){console.log("onSuccess",f,p)},onFailed(f,p){alert(p.message),console.log("onFailed",f,p)},onError(f,p,m){alert(p.message),console.error("onError",f,p,m)},customInsert(f,p){p(f.data,"mp4",f.data)}}},uploadImgShowBase64:!0},o.editorConfig||{})),c=ee(()=>({height:EQ(o.height)?`${o.height}px`:o.height})),d=f=>{i("change",f)};return xo(()=>{const f=M(a.value);f==null||f.destroy()}),t({getEditorRef:async()=>(await St(),M(a.value))}),(f,p)=>(Y(),fe("div",uSe,[ie(M(SAt),{editor:M(a),editorId:e.editorId,class:"border-0 b-b-1 border-solid border-[var(--tags-view-border-color)]"},null,8,["editor","editorId"]),ie(M(_At),{modelValue:M(l),"onUpdate:modelValue":p[0]||(p[0]=m=>Jn(l)?l.value=m:null),defaultConfig:M(u),editorId:e.editorId,style:$t(M(c)),onOnChange:d,onOnCreated:s},null,8,["modelValue","defaultConfig","editorId","style"])]))}}),rX=()=>No.get({url:"/system/dict-data/simple-list"}),LDe=e=>No.get({url:"/system/dict-data/page",params:e}),_Oe=e=>No.get({url:"/system/dict-data/get?id="+e}),EOe=e=>No.post({url:"/system/dict-data/create",data:e}),POe=e=>No.put({url:"/system/dict-data/update",data:e}),jDe=e=>No.delete({url:"/system/dict-data/delete?id="+e}),VDe=e=>No.download({url:"/system/dict-data/export",params:e}),{wsCache:eb}=ku("sessionStorage"),cSe=ym("dict",{state:()=>({dictMap:new Map,isSetDict:!1}),getters:{getDictMap(){const e=eb.get(Nr.DICT_CACHE);return e&&(this.dictMap=e),this.dictMap},getIsSetDict(){return this.isSetDict}},actions:{async setDictMap(){const e=eb.get(Nr.DICT_CACHE);if(e)this.dictMap=e,this.isSetDict=!0;else{const t=await rX(),n=new Map;t.forEach(r=>{n[r.dictType]||(n[r.dictType]=[]),n[r.dictType].push({value:r.value,label:r.label,colorType:r.colorType,cssClass:r.cssClass})}),this.dictMap=n,this.isSetDict=!0,eb.set(Nr.DICT_CACHE,n,{exp:60})}},getDictByType(e){return this.isSetDict||this.setDictMap(),this.dictMap[e]},async resetDict(){eb.delete(Nr.DICT_CACHE);const e=await rX(),t=new Map;e.forEach(n=>{t[n.dictType]||(t[n.dictType]=[]),t[n.dictType].push({value:n.value,label:n.label,colorType:n.colorType,cssClass:n.cssClass})}),this.dictMap=t,this.isSetDict=!0,eb.set(Nr.DICT_CACHE,t,{exp:60})}}}),oX=()=>cSe(Nf),dSe=oX(),Tb=e=>dSe.getDictByType(e)||[],pQ=e=>{const t=Tb(e),n=[];return t.forEach(r=>{n.push({...r,value:parseInt(r.value+"")})}),n},KQ=e=>{const t=Tb(e),n=[];return t.forEach(r=>{n.push({...r,value:r.value+""})}),n},uQ=e=>{const t=[];return Tb(e).forEach(n=>{t.push({...n,value:n.value+""=="true"})}),t},FOe=(e,t)=>{const n=Tb(e),r=de("");return n.forEach(o=>{o.value===t+""&&(r.value=o.label)}),r.value},cQ=(e=>(e.USER_TYPE="user_type",e.COMMON_STATUS="common_status",e.TERMINAL="terminal",e.DATE_INTERVAL="date_interval",e.SYSTEM_USER_SEX="system_user_sex",e.SYSTEM_MENU_TYPE="system_menu_type",e.SYSTEM_APP_MENU_TYPE="system_app_menu_type",e.SYSTEM_APP_TYPE="system_app_type",e.SYSTEM_ROLE_TYPE="system_role_type",e.SYSTEM_DATA_SCOPE="system_data_scope",e.SYSTEM_NOTICE_TYPE="system_notice_type",e.SYSTEM_LOGIN_TYPE="system_login_type",e.SYSTEM_LOGIN_RESULT="system_login_result",e.SYSTEM_SMS_CHANNEL_CODE="system_sms_channel_code",e.SYSTEM_SMS_TEMPLATE_TYPE="system_sms_template_type",e.SYSTEM_SMS_SEND_STATUS="system_sms_send_status",e.SYSTEM_SMS_RECEIVE_STATUS="system_sms_receive_status",e.SYSTEM_OAUTH2_GRANT_TYPE="system_oauth2_grant_type",e.SYSTEM_MAIL_SEND_STATUS="system_mail_send_status",e.SYSTEM_NOTIFY_TEMPLATE_TYPE="system_notify_template_type",e.SYSTEM_SOCIAL_TYPE="system_social_type",e.INFRA_BOOLEAN_STRING="infra_boolean_string",e.INFRA_JOB_STATUS="infra_job_status",e.INFRA_JOB_LOG_STATUS="infra_job_log_status",e.INFRA_API_ERROR_LOG_PROCESS_STATUS="infra_api_error_log_process_status",e.INFRA_CONFIG_TYPE="infra_config_type",e.INFRA_CODEGEN_TEMPLATE_TYPE="infra_codegen_template_type",e.INFRA_CODEGEN_FRONT_TYPE="infra_codegen_front_type",e.INFRA_CODEGEN_SCENE="infra_codegen_scene",e.INFRA_FILE_STORAGE="infra_file_storage",e.INFRA_OPERATE_TYPE="infra_operate_type",e.BPM_MODEL_FORM_TYPE="bpm_model_form_type",e.BPM_TASK_CANDIDATE_STRATEGY="bpm_task_candidate_strategy",e.BPM_PROCESS_INSTANCE_STATUS="bpm_process_instance_status",e.BPM_TASK_STATUS="bpm_task_status",e.BPM_OA_LEAVE_TYPE="bpm_oa_leave_type",e.BPM_PROCESS_LISTENER_TYPE="bpm_process_listener_type",e.BPM_PROCESS_LISTENER_VALUE_TYPE="bpm_process_listener_value_type",e.PAY_CHANNEL_CODE="pay_channel_code",e.PAY_ORDER_STATUS="pay_order_status",e.PAY_REFUND_STATUS="pay_refund_status",e.PAY_NOTIFY_STATUS="pay_notify_status",e.PAY_NOTIFY_TYPE="pay_notify_type",e.PAY_TRANSFER_STATUS="pay_transfer_status",e.PAY_TRANSFER_TYPE="pay_transfer_type",e.MP_AUTO_REPLY_REQUEST_MATCH="mp_auto_reply_request_match",e.MP_MESSAGE_TYPE="mp_message_type",e.MEMBER_POINT_BIZ_TYPE="member_point_biz_type",e.MEMBER_EXPERIENCE_BIZ_TYPE="member_experience_biz_type",e.PRODUCT_SPU_STATUS="product_spu_status",e.EXPRESS_CHARGE_MODE="trade_delivery_express_charge_mode",e.TRADE_AFTER_SALE_STATUS="trade_after_sale_status",e.TRADE_AFTER_SALE_WAY="trade_after_sale_way",e.TRADE_AFTER_SALE_TYPE="trade_after_sale_type",e.TRADE_ORDER_TYPE="trade_order_type",e.TRADE_ORDER_STATUS="trade_order_status",e.TRADE_ORDER_ITEM_AFTER_SALE_STATUS="trade_order_item_after_sale_status",e.TRADE_DELIVERY_TYPE="trade_delivery_type",e.BROKERAGE_ENABLED_CONDITION="brokerage_enabled_condition",e.BROKERAGE_BIND_MODE="brokerage_bind_mode",e.BROKERAGE_BANK_NAME="brokerage_bank_name",e.BROKERAGE_WITHDRAW_TYPE="brokerage_withdraw_type",e.BROKERAGE_RECORD_BIZ_TYPE="brokerage_record_biz_type",e.BROKERAGE_RECORD_STATUS="brokerage_record_status",e.BROKERAGE_WITHDRAW_STATUS="brokerage_withdraw_status",e.PROMOTION_DISCOUNT_TYPE="promotion_discount_type",e.PROMOTION_PRODUCT_SCOPE="promotion_product_scope",e.PROMOTION_COUPON_TEMPLATE_VALIDITY_TYPE="promotion_coupon_template_validity_type",e.PROMOTION_COUPON_STATUS="promotion_coupon_status",e.PROMOTION_COUPON_TAKE_TYPE="promotion_coupon_take_type",e.PROMOTION_ACTIVITY_STATUS="promotion_activity_status",e.PROMOTION_CONDITION_TYPE="promotion_condition_type",e.PROMOTION_BARGAIN_RECORD_STATUS="promotion_bargain_record_status",e.PROMOTION_COMBINATION_RECORD_STATUS="promotion_combination_record_status",e.PROMOTION_BANNER_POSITION="promotion_banner_position",e.CRM_AUDIT_STATUS="crm_audit_status",e.CRM_BIZ_TYPE="crm_biz_type",e.CRM_BUSINESS_END_STATUS_TYPE="crm_business_end_status_type",e.CRM_RECEIVABLE_RETURN_TYPE="crm_receivable_return_type",e.CRM_CUSTOMER_INDUSTRY="crm_customer_industry",e.CRM_CUSTOMER_LEVEL="crm_customer_level",e.CRM_CUSTOMER_SOURCE="crm_customer_source",e.CRM_PRODUCT_STATUS="crm_product_status",e.CRM_PERMISSION_LEVEL="crm_permission_level",e.CRM_PRODUCT_UNIT="crm_product_unit",e.CRM_FOLLOW_UP_TYPE="crm_follow_up_type",e.ERP_AUDIT_STATUS="erp_audit_status",e.ERP_STOCK_RECORD_BIZ_TYPE="erp_stock_record_biz_type",e.AI_PLATFORM="ai_platform",e.AI_IMAGE_STATUS="ai_image_status",e.AI_MUSIC_STATUS="ai_music_status",e.AI_GENERATE_MODE="ai_generate_mode",e.AI_WRITE_TYPE="ai_write_type",e.AI_WRITE_LENGTH="ai_write_length",e.AI_WRITE_FORMAT="ai_write_format",e.AI_WRITE_TONE="ai_write_tone",e.AI_WRITE_LANGUAGE="ai_write_language",e))(cQ||{});const kAt=Te({name:"DictSelect",__name:"DictSelect",props:{dictType:{},valueType:{default:"str"},selectType:{default:"select"},formCreateInject:{}},setup(e){const t=yc(),n=e,r=ee(()=>{switch(n.valueType){case"str":return KQ(n.dictType);case"int":return pQ(n.dictType);case"bool":return uQ(n.dictType);default:return[]}});return(o,i)=>{const a=wO,l=wb,s=kb,u=Ow,c=bl,d=Cb;return Y(),fe(bt,null,[o.selectType==="select"?(Y(),Le(l,Un({key:0,class:"w-1/1"},M(t)),{default:he(()=>[(Y(!0),fe(bt,null,bn(M(r),(f,p)=>(Y(),Le(a,{key:p,label:f.label,value:f.value},null,8,["label","value"]))),128))]),_:1},16)):Fe("",!0),o.selectType==="radio"?(Y(),Le(u,Un({key:1,class:"w-1/1"},M(t)),{default:he(()=>[(Y(!0),fe(bt,null,bn(M(r),(f,p)=>(Y(),Le(s,{key:p,value:f.value},{default:he(()=>[Dt(Ye(f.label),1)]),_:2},1032,["value"]))),128))]),_:1},16)):Fe("",!0),o.selectType==="checkbox"?(Y(),Le(d,Un({key:2,class:"w-1/1"},M(t)),{default:he(()=>[(Y(!0),fe(bt,null,bn(M(r),(f,p)=>(Y(),Le(c,{key:p,label:f.label,value:f.value},null,8,["label","value"]))),128))]),_:1},16)):Fe("",!0)],64)}}}),DAt=[MLe,tVe,NLe,FLe,TLe,vQ,IQ,Bie,sQ,fQ,dQ,lQ,PQ,LQ,jQ,kAt,TP({name:"UserSelect",labelField:"nickname",valueField:"id",url:"/system/user/simple-list"}),TP({name:"DeptSelect",labelField:"name",valueField:"id",url:"/system/dept/simple-list"}),TP({name:"ApiSelect"}),BQ],{t:OAt}=hc(),{t:TAt}=hc(),MAt=e=>{(function(t){t.directive("hasRole",(n,r)=>{const{wsCache:o}=ku(),{value:i}=r,a=o.get(Nr.USER).roles;if(!(i&&i instanceof Array&&i.length>0))throw new Error(OAt("permission.hasRole"));{const l=i;a.some(s=>s==="admin"||l.includes(s))||n.parentNode&&n.parentNode.removeChild(n)}})})(e),function(t){t.directive("hasPermi",(n,r)=>{const{wsCache:o}=ku(),{value:i}=r,a=o.get(Nr.USER).permissions;if(!(i&&i instanceof Array&&i.length>0))throw new Error(TAt("permission.hasPermission"));{const l=i;a.some(s=>s==="*:*:*"||l.includes(s))||n.parentNode&&n.parentNode.removeChild(n)}})}(e)};function Zh(e){return!!Zb()&&(e3(e),!0)}function Bs(e){return typeof e=="function"?e():M(e)}const _f=typeof window<"u"&&typeof document<"u",NAt=typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope,FAt=e=>e!=null,RAt=Object.prototype.toString,IAt=e=>RAt.call(e)==="[object Object]",zD=()=>{};function fSe(e){return dn()}vOe=function(e,t=200,n={}){return function(r,o){return function(...i){return new Promise((a,l)=>{Promise.resolve(r(()=>o.apply(this,i),{fn:o,thisArg:this,args:i})).then(a).catch(l)})}}(function(r,o={}){let i,a,l=zD;const s=u=>{clearTimeout(u),l(),l=zD};return u=>{const c=Bs(r),d=Bs(o.maxWait);return i&&s(i),c<=0||d!==void 0&&d<=0?(a&&(s(a),a=null),Promise.resolve(u())):new Promise((f,p)=>{l=o.rejectOnCancel?p:f,d&&!a&&(a=setTimeout(()=>{i&&s(i),a=null,f(u())},d)),i=setTimeout(()=>{a&&s(a),a=null,f(u())},c)})}}(t,n),e)},AQ=function(e,t=!0,n){fSe()?yn(e,n):t?e():St(e)},tOe=function(e,t){fSe()&&Vs(e,t)};function HA(e){var t;const n=Bs(e);return(t=n==null?void 0:n.$el)!=null?t:n}const $A=_f?window:void 0,BAt=_f?window.document:void 0,pSe=_f?window.navigator:void 0;function tb(...e){let t,n,r,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,o]=e,t=$A):[t,n,r,o]=e,!t)return zD;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const i=[],a=()=>{i.forEach(u=>u()),i.length=0},l=Je(()=>[HA(t),Bs(o)],([u,c])=>{if(a(),!u)return;const d=IAt(c)?{...c}:c;i.push(...n.flatMap(f=>r.map(p=>((m,v,g,b)=>(m.addEventListener(v,g,b),()=>m.removeEventListener(v,g,b)))(u,f,p,d))))},{immediate:!0,flush:"post"}),s=()=>{l(),a()};return Zh(s),s}function UA(e){const t=function(){const n=de(!1),r=dn();return r&&yn(()=>{n.value=!0},r),n}();return ee(()=>(t.value,!!e()))}function hSe(e,t={}){const{controls:n=!1,navigator:r=pSe}=t,o=UA(()=>r&&"permissions"in r);let i;const a=typeof e=="string"?{name:e}:e,l=de(),s=()=>{i&&(l.value=i.state)},u=function(c){let d;function f(){return d||(d=c()),d}return f.reset=async()=>{const p=d;d=void 0,p&&await p},f}(async()=>{if(o.value){if(!i)try{i=await r.permissions.query(a),tb(i,"change",s),s()}catch{l.value="prompt"}return i}});return u(),n?{state:l,isSupported:o,query:u}:l}COe=function(e={}){const{navigator:t=pSe,read:n=!1,source:r,copiedDuring:o=1500,legacy:i=!1}=e,a=UA(()=>t&&"clipboard"in t),l=hSe("clipboard-read"),s=hSe("clipboard-write"),u=ee(()=>a.value||i),c=de(""),d=de(!1),f=function(m,v,g={}){const{immediate:b=!0}=g,y=de(!1);let w=null;function x(){w&&(clearTimeout(w),w=null)}function _(){y.value=!1,x()}function E(...C){x(),y.value=!0,w=setTimeout(()=>{y.value=!1,w=null,m(...C)},Bs(v))}return b&&(y.value=!0,_f&&E()),Zh(_),{isPending:xd(y),start:E,stop:_}}(()=>d.value=!1,o);function p(m){return m==="granted"||m==="prompt"}return u.value&&n&&tb(["copy","cut"],function(){a.value&&p(l.value)?t.clipboard.readText().then(m=>{c.value=m}):c.value=function(){var m,v,g;return(g=(v=(m=document==null?void 0:document.getSelection)==null?void 0:m.call(document))==null?void 0:v.toString())!=null?g:""}()}),{isSupported:u,text:c,copied:d,copy:async function(m=Bs(r)){u.value&&m!=null&&(a.value&&p(s.value)?await t.clipboard.writeText(m):function(v){const g=document.createElement("textarea");g.value=v??"",g.style.position="absolute",g.style.opacity="0",document.body.appendChild(g),g.select(),document.execCommand("copy"),g.remove()}(m),c.value=m,d.value=!0,f.start())}}},rJ=function(e,t,n={}){const{window:r=$A,initialValue:o="",observe:i=!1}=n,a=de(o),l=ee(()=>{var u;return HA(t)||((u=r==null?void 0:r.document)==null?void 0:u.documentElement)});function s(){var u;const c=Bs(e),d=Bs(l);if(d&&r){const f=(u=r.getComputedStyle(d).getPropertyValue(c))==null?void 0:u.trim();a.value=f||o}}return i&&function(u,c,d={}){const{window:f=$A,...p}=d;let m;const v=UA(()=>f&&"MutationObserver"in f),g=()=>{m&&(m.disconnect(),m=void 0)},b=ee(()=>{const x=Bs(u),_=(Array.isArray(x)?x:[x]).map(HA).filter(FAt);return new Set(_)}),y=Je(()=>b.value,x=>{g(),v.value&&x.size&&(m=new MutationObserver(c),x.forEach(_=>m.observe(_,p)))},{immediate:!0,flush:"post"});Zh(()=>{g(),y()})}(l,s,{attributeFilter:["style","class"],window:r}),Je([l,()=>Bs(e)],s,{immediate:!0}),Je(a,u=>{var c;(c=l.value)!=null&&c.style&&l.value.style.setProperty(Bs(e),u)}),a};const vSe=["fullscreenchange","webkitfullscreenchange","webkitendfullscreen","mozfullscreenchange","MSFullscreenChange"];fOe=function(e,t={}){const{document:n=BAt,autoExit:r=!1}=t,o=ee(()=>{var v;return(v=HA(e))!=null?v:n==null?void 0:n.querySelector("html")}),i=de(!1),a=ee(()=>["requestFullscreen","webkitRequestFullscreen","webkitEnterFullscreen","webkitEnterFullScreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen"].find(v=>n&&v in n||o.value&&v in o.value)),l=ee(()=>["exitFullscreen","webkitExitFullscreen","webkitExitFullScreen","webkitCancelFullScreen","mozCancelFullScreen","msExitFullscreen"].find(v=>n&&v in n||o.value&&v in o.value)),s=ee(()=>["fullScreen","webkitIsFullScreen","webkitDisplayingFullscreen","mozFullScreen","msFullscreenElement"].find(v=>n&&v in n||o.value&&v in o.value)),u=["fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement"].find(v=>n&&v in n),c=UA(()=>o.value&&n&&a.value!==void 0&&l.value!==void 0&&s.value!==void 0),d=()=>{if(s.value){if(n&&n[s.value]!=null)return n[s.value];{const v=o.value;if((v==null?void 0:v[s.value])!=null)return!!v[s.value]}}return!1};async function f(){if(c.value&&i.value){if(l.value)if((n==null?void 0:n[l.value])!=null)await n[l.value]();else{const v=o.value;(v==null?void 0:v[l.value])!=null&&await v[l.value]()}i.value=!1}}async function p(){if(!c.value||i.value)return;d()&&await f();const v=o.value;a.value&&(v==null?void 0:v[a.value])!=null&&(await v[a.value](),i.value=!0)}const m=()=>{const v=d();(!v||v&&u&&(n==null?void 0:n[u])===o.value)&&(i.value=v)};return tb(n,vSe,m,!1),tb(()=>HA(o),vSe,m,!1),r&&Zh(f),{isSupported:c,isFullscreen:i,enter:p,exit:f,toggle:async function(){await(i.value?f():p())}}},$Oe=function(){const e=de([]);return e.value.set=t=>{t&&e.value.push(t)},u3(()=>{e.value.length=0}),e};const mSe="ping";function iX(e){return e===!0?{}:e}OOe=function(e,t={}){const{onConnected:n,onDisconnected:r,onError:o,onMessage:i,immediate:a=!0,autoClose:l=!0,protocols:s=[]}=t,u=de(null),c=de("CLOSED"),d=de(),f=function(...k){if(k.length!==1)return dr(...k);const I=k[0];return typeof I=="function"?xd(KT(()=>({get:I,set:zD}))):de(I)}(e);let p,m,v,g=!1,b=0,y=[];const w=()=>{if(y.length&&d.value&&c.value==="OPEN"){for(const k of y)d.value.send(k);y=[]}},x=()=>{clearTimeout(v),v=void 0},_=(k=1e3,I)=>{_f&&d.value&&(g=!0,x(),p==null||p(),d.value.close(k,I),d.value=void 0)},E=(k,I=!0)=>d.value&&c.value==="OPEN"?(w(),d.value.send(k),!0):(I&&y.push(k),!1),C=()=>{if(g||f.value===void 0)return;const k=new WebSocket(f.value,s);d.value=k,c.value="CONNECTING",k.onopen=()=>{c.value="OPEN",n==null||n(k),m==null||m(),w()},k.onclose=I=>{if(c.value="CLOSED",r==null||r(k,I),!g&&t.autoReconnect){const{retries:O=-1,delay:F=1e3,onFailed:N}=iX(t.autoReconnect);b+=1,typeof O=="number"&&(O<0||b<O)||typeof O=="function"&&O()?setTimeout(C,F):N==null||N()}},k.onerror=I=>{o==null||o(k,I)},k.onmessage=I=>{if(t.heartbeat){x();const{message:O=mSe}=iX(t.heartbeat);if(I.data===O)return}u.value=I.data,i==null||i(k,I)}};if(t.heartbeat){const{message:k=mSe,interval:I=1e3,pongTimeout:O=1e3}=iX(t.heartbeat),{pause:F,resume:N}=function(B,P=1e3,V={}){const{immediate:L=!0,immediateCallback:H=!1}=V;let U=null;const G=de(!1);function z(){U&&(clearInterval(U),U=null)}function $(){G.value=!1,z()}function W(){const K=Bs(P);K<=0||(G.value=!0,H&&B(),z(),U=setInterval(B,K))}return L&&_f&&W(),(Jn(P)||typeof P=="function")&&Zh(Je(P,()=>{G.value&&_f&&W()})),Zh($),{isActive:G,pause:$,resume:W}}(()=>{E(k,!1),v==null&&(v=setTimeout(()=>{_(),g=!1},O))},I,{immediate:!1});p=F,m=N}l&&(_f&&tb("beforeunload",()=>_()),Zh(_));const T=()=>{(_f||NAt)&&(_(),g=!1,b=0,C())};return a&&T(),Je(f,T),{data:u,status:c,close:_,send:E,open:T,ws:d}};function PAt(e={}){const{window:t=$A,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:o=!0,includeScrollbar:i=!0}=e,a=de(n),l=de(r),s=()=>{t&&(i?(a.value=t.innerWidth,l.value=t.innerHeight):(a.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight))};if(s(),AQ(s),tb("resize",s,{passive:!0}),o){const u=function(c,d={}){const{window:f=$A}=d,p=UA(()=>f&&"matchMedia"in f&&typeof f.matchMedia=="function");let m;const v=de(!1),g=w=>{v.value=w.matches},b=()=>{m&&("removeEventListener"in m?m.removeEventListener("change",g):m.removeListener(g))},y=yl(()=>{p.value&&(b(),m=f.matchMedia(Bs(c)),"addEventListener"in m?m.addEventListener("change",g):m.addListener(g),v.value=m.matches)});return Zh(()=>{y(),b(),m=void 0}),v}("(orientation: portrait)");Je(u,()=>s())}return{width:a,height:l}}let lc,aX,gSe,ySe,lX;({wsCache:lc}=ku()),Sw=ym("app",{state:()=>({userInfo:"userInfo",sizeMap:["default","large","small"],mobile:!1,title:"\u5DE5\u4E1A\u4E92\u8054\u7F51\u5E73\u53F0",pageLoading:!1,breadcrumb:!0,breadcrumbIcon:!0,collapse:!1,uniqueOpened:!0,hamburger:!0,screenfull:!0,search:!0,size:!0,locale:!0,message:!0,tagsView:!0,tagsViewIcon:!0,logo:!0,fixedHeader:!0,footer:!0,greyMode:!1,fixedMenu:lc.get("fixedMenu")||!1,layout:lc.get(Nr.LAYOUT)||"classic",isDark:lc.get(Nr.IS_DARK)||!1,currentSize:lc.get("default")||"default",theme:lc.get(Nr.THEME)||{elColorPrimary:"#409eff",leftMenuBorderColor:"inherit",leftMenuBgColor:"#001529",leftMenuBgLightColor:"#0f2438",leftMenuBgActiveColor:"var(--el-color-primary)",leftMenuCollapseBgActiveColor:"var(--el-color-primary)",leftMenuTextColor:"#bfcbd9",leftMenuTextActiveColor:"#fff",logoTitleTextColor:"#fff",logoBorderColor:"inherit",topHeaderBgColor:"#fff",topHeaderTextColor:"inherit",topHeaderHoverColor:"#f6f6f6",topToolBorderColor:"#eee"}}),getters:{getBreadcrumb(){return this.breadcrumb},getBreadcrumbIcon(){return this.breadcrumbIcon},getCollapse(){return this.collapse},getUniqueOpened(){return this.uniqueOpened},getHamburger(){return this.hamburger},getScreenfull(){return this.screenfull},getSize(){return this.size},getLocale(){return this.locale},getMessage(){return this.message},getTagsView(){return this.tagsView},getTagsViewIcon(){return this.tagsViewIcon},getLogo(){return this.logo},getFixedHeader(){return this.fixedHeader},getGreyMode(){return this.greyMode},getFixedMenu(){return this.fixedMenu},getPageLoading(){return this.pageLoading},getLayout(){return this.layout},getTitle(){return this.title},getUserInfo(){return this.userInfo},getIsDark(){return this.isDark},getCurrentSize(){return this.currentSize},getSizeMap(){return this.sizeMap},getMobile(){return this.mobile},getTheme(){return this.theme},getFooter(){return this.footer}},actions:{setBreadcrumb(e){this.breadcrumb=e},setBreadcrumbIcon(e){this.breadcrumbIcon=e},setCollapse(e){this.collapse=e},setUniqueOpened(e){this.uniqueOpened=e},setHamburger(e){this.hamburger=e},setScreenfull(e){this.screenfull=e},setSize(e){this.size=e},setLocale(e){this.locale=e},setMessage(e){this.message=e},setTagsView(e){this.tagsView=e},setTagsViewIcon(e){this.tagsViewIcon=e},setLogo(e){this.logo=e},setFixedHeader(e){this.fixedHeader=e},setGreyMode(e){this.greyMode=e},setFixedMenu(e){lc.set("fixedMenu",e),this.fixedMenu=e},setPageLoading(e){this.pageLoading=e},setLayout(e){this.mobile&&e!=="classic"?El.warning("\u79FB\u52A8\u7AEF\u6A21\u5F0F\u4E0B\u4E0D\u652F\u6301\u5207\u6362\u5176\u4ED6\u5E03\u5C40"):(this.layout=e,lc.set(Nr.LAYOUT,this.layout))},setTitle(e){this.title=e},setIsDark(e){this.isDark=e,this.isDark?(document.documentElement.classList.add("dark"),document.documentElement.classList.remove("light")):(document.documentElement.classList.add("light"),document.documentElement.classList.remove("dark")),lc.set(Nr.IS_DARK,this.isDark)},setCurrentSize(e){this.currentSize=e,lc.set("currentSize",this.currentSize)},setMobile(e){this.mobile=e},setTheme(e){this.theme=Object.assign(this.theme,e),lc.set(Nr.THEME,this.theme)},setCssVarTheme(){for(const t in this.theme)zw(`--${e=t,e.replace(/([A-Z])/g,"-$1").toLowerCase()}`,this.theme[t]);var e},setFooter(e){this.footer=e}},persist:!1}),aX=()=>Sw(Nf),gSe=Te({__name:"ConfigGlobal",props:{size:Xn.oneOf(["default","small","large"]).def("default")},setup(e){const{variables:t}=Dw(),n=Sw();qn("configGlobal",e),yn(()=>{n.setCssVarTheme()});const{width:r}=PAt();Je(()=>r.value,a=>{a<768?(n.getMobile||n.setMobile(!0),zw("--left-menu-min-width","0"),n.setCollapse(!0),n.getLayout!=="classic"&&n.setLayout("classic")):(n.getMobile&&n.setMobile(!1),zw("--left-menu-min-width","64px"))},{immediate:!0});const o=Fw(),i=ee(()=>o.currentLocale);return(a,l)=>(Y(),Le(M(XIe),{namespace:M(t).elNamespace,locale:i.value.elLocale,message:{max:5},size:e.size},{default:he(()=>[ft(a.$slots,"default")]),_:3},8,["namespace","locale","size"]))}}),SQ=Te({__name:"index",props:{isModal:{type:Boolean,default:!0}},setup(e,{expose:t}){const n=aJ(),r=de(!1),o=de(!1),i=de(""),a=n.getRoutes(),l=ee(()=>i.value?a.filter(f=>{var p;if(((p=f.meta.title)==null?void 0:p.indexOf(i.value))>-1||f.path.indexOf(i.value)>-1)return!0}).map(f=>({label:`${f.meta.title}${f.path}`,value:f.path})):[]);function s(f){i.value=f}function u(f){n.push({path:f}),c()}function c(){o.value=!1}function d(f){(f.ctrlKey||f.metaKey)&&f.key==="k"&&(r.value=!r.value)}return yn(()=>{window.addEventListener("keydown",d),window.addEventListener("click",c)}),Vs(()=>{window.removeEventListener("keydown",d),window.removeEventListener("click",c)}),t({openSearch:()=>{r.value=!0}}),(f,p)=>{const m=wO,v=wb,g=Mw,b=mm;return e.isModal?(Y(),Le(g,{key:0,modelValue:M(r),"onUpdate:modelValue":p[0]||(p[0]=y=>Jn(r)?r.value=y:null),"show-close":!1,title:"\u83DC\u5355\u641C\u7D22"},{default:he(()=>[ie(v,{filterable:"","reserve-keyword":!1,remote:"",placeholder:"\u8BF7\u8F93\u5165\u83DC\u5355\u5185\u5BB9","remote-method":s,style:{width:"100%"},onChange:u},{default:he(()=>[(Y(!0),fe(bt,null,bn(M(l),y=>(Y(),Le(m,{key:y.value,label:y.label,value:y.value},null,8,["label","value"]))),128))]),_:1})]),_:1},8,["modelValue"])):(Y(),fe("div",{key:1,class:"custom-hover",onClick:p[1]||(p[1]=Gt(y=>o.value=!M(o),["stop"]))},[ie(b,{icon:"ep:search"}),ie(v,{filterable:"","reserve-keyword":!1,remote:"",placeholder:"\u8BF7\u8F93\u5165\u83DC\u5355\u5185\u5BB9","remote-method":s,class:oe(["overflow-hidden transition-all-600",M(o)?"!w-220px ml2":"!w-0"]),onChange:u},{default:he(()=>[(Y(!0),fe(bt,null,bn(M(l),y=>(Y(),Le(m,{key:y.value,label:y.label,value:y.value},null,8,["label","value"]))),128))]),_:1},8,["class"])]))}}}),ySe=Te({name:"APP",__name:"App",setup(e){const{getPrefixCls:t}=Dw(),n=t("app"),r=Sw(),o=ee(()=>r.getCurrentSize),i=ee(()=>r.getGreyMode),{wsCache:a}=ku();return(()=>{let l=a.get(Nr.IS_DARK);l===null&&(l=window.matchMedia("(prefers-color-scheme: dark)").matches),r.setIsDark(l)})(),(l,s)=>{const u=Qe("RouterView"),c=gSe;return Y(),Le(c,{size:M(o)},{default:he(()=>[ie(u,{class:oe(M(i)?`${M(n)}-grey-mode`:"")},null,8,["class"]),ie(SQ)]),_:1},8,["size"])}}}),lX=aX();var bSe={exports:{}};bSe.exports=function(){var e={version:"0.2.0"},t=e.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function n(f,p,m){return f<p?p:f>m?m:f}function r(f){return 100*(-1+f)}function o(f,p,m){var v;return(v=t.positionUsing==="translate3d"?{transform:"translate3d("+r(f)+"%,0,0)"}:t.positionUsing==="translate"?{transform:"translate("+r(f)+"%,0)"}:{"margin-left":r(f)+"%"}).transition="all "+p+"ms "+m,v}e.configure=function(f){var p,m;for(p in f)(m=f[p])!==void 0&&f.hasOwnProperty(p)&&(t[p]=m);return this},e.status=null,e.set=function(f){var p=e.isStarted();f=n(f,t.minimum,1),e.status=f===1?null:f;var m=e.render(!p),v=m.querySelector(t.barSelector),g=t.speed,b=t.easing;return m.offsetWidth,i(function(y){t.positionUsing===""&&(t.positionUsing=e.getPositioningCSS()),a(v,o(f,g,b)),f===1?(a(m,{transition:"none",opacity:1}),m.offsetWidth,setTimeout(function(){a(m,{transition:"all "+g+"ms linear",opacity:0}),setTimeout(function(){e.remove(),y()},g)},g)):setTimeout(y,g)}),this},e.isStarted=function(){return typeof e.status=="number"},e.start=function(){e.status||e.set(0);var f=function(){setTimeout(function(){e.status&&(e.trickle(),f())},t.trickleSpeed)};return t.trickle&&f(),this},e.done=function(f){return f||e.status?e.inc(.3+.5*Math.random()).set(1):this},e.inc=function(f){var p=e.status;return p?(typeof f!="number"&&(f=(1-p)*n(Math.random()*p,.1,.95)),p=n(p+f,0,.994),e.set(p)):e.start()},e.trickle=function(){return e.inc(Math.random()*t.trickleRate)},function(){var f=0,p=0;e.promise=function(m){return m&&m.state()!=="resolved"?(p===0&&e.start(),f++,p++,m.always(function(){--p==0?(f=0,e.done()):e.set((f-p)/f)}),this):this}}(),e.render=function(f){if(e.isRendered())return document.getElementById("nprogress");s(document.documentElement,"nprogress-busy");var p=document.createElement("div");p.id="nprogress",p.innerHTML=t.template;var m,v=p.querySelector(t.barSelector),g=f?"-100":r(e.status||0),b=document.querySelector(t.parent);return a(v,{transition:"all 0 linear",transform:"translate3d("+g+"%,0,0)"}),t.showSpinner||(m=p.querySelector(t.spinnerSelector))&&d(m),b!=document.body&&s(b,"nprogress-custom-parent"),b.appendChild(p),p},e.remove=function(){u(document.documentElement,"nprogress-busy"),u(document.querySelector(t.parent),"nprogress-custom-parent");var f=document.getElementById("nprogress");f&&d(f)},e.isRendered=function(){return!!document.getElementById("nprogress")},e.getPositioningCSS=function(){var f=document.body.style,p="WebkitTransform"in f?"Webkit":"MozTransform"in f?"Moz":"msTransform"in f?"ms":"OTransform"in f?"O":"";return p+"Perspective"in f?"translate3d":p+"Transform"in f?"translate":"margin"};var i=function(){var f=[];function p(){var m=f.shift();m&&m(p)}return function(m){f.push(m),f.length==1&&p()}}(),a=function(){var f=["Webkit","O","Moz","ms"],p={};function m(y){return y.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(w,x){return x.toUpperCase()})}function v(y){var w=document.body.style;if(y in w)return y;for(var x,_=f.length,E=y.charAt(0).toUpperCase()+y.slice(1);_--;)if((x=f[_]+E)in w)return x;return y}function g(y){return y=m(y),p[y]||(p[y]=v(y))}function b(y,w,x){w=g(w),y.style[w]=x}return function(y,w){var x,_,E=arguments;if(E.length==2)for(x in w)(_=w[x])!==void 0&&w.hasOwnProperty(x)&&b(y,x,_);else b(y,E[1],E[2])}}();function l(f,p){return(typeof f=="string"?f:c(f)).indexOf(" "+p+" ")>=0}function s(f,p){var m=c(f),v=m+p;l(m,p)||(f.className=v.substring(1))}function u(f,p){var m,v=c(f);l(f,p)&&(m=v.replace(" "+p+" "," "),f.className=m.substring(1,m.length-1))}function c(f){return(" "+(f.className||"")+" ").replace(/\s+/gi," ")}function d(f){f&&f.parentNode&&f.parentNode.removeChild(f)}return e}();let HD,ASe,sX;HD=_l(bSe.exports),ASe=rJ("--el-color-primary",document.documentElement),sX=aX(),XDe=e=>No.post({url:"/system/auth/login",data:e}),ZDe=e=>No.get({url:"/system/tenant/get-id-by-name?name="+e}),$De=e=>No.get({url:"/system/tenant/get-by-website?website="+e}),qDe=e=>No.post({url:"/system/auth/send-sms-code",data:e}),KDe=e=>No.post({url:"/system/auth/sms-login",data:e}),YDe=function(e,t,n){return No.post({url:"/system/auth/social-login",data:{type:e,code:t,state:n}})};let e0,uX,wSe,xSe,_Se,ESe,CSe;GDe=e=>No.postOriginal({url:"system/captcha/get",data:e}),WDe=e=>No.postOriginal({url:"system/captcha/check",data:e}),{wsCache:e0}=ku(),hQ=ym("admin-user",{state:()=>({permissions:[],roles:[],isSetUser:!1,user:{id:0,avatar:"",nickname:"",deptId:0}}),getters:{getPermissions(){return this.permissions},getRoles(){return this.roles},getIsSetUser(){return this.isSetUser},getUser(){return this.user}},actions:{async setUserInfoAction(){if(!Cd())return this.resetState(),null;let e=e0.get(Nr.USER);e||(e=await No.get({url:"/system/auth/get-permission-info"})),this.permissions=e.permissions,this.roles=e.roles,this.user=e.user,this.isSetUser=!0,e0.set(Nr.USER,e),e0.set(Nr.ROLE_ROUTERS,e.menus)},async setUserAvatarAction(e){const t=e0.get(Nr.USER);this.user.avatar=e,t.user.avatar=e,e0.set(Nr.USER,t)},async setUserNicknameAction(e){const t=e0.get(Nr.USER);this.user.nickname=e,t.user.nickname=e,e0.set(Nr.USER,t)},async loginOut(){await No.post({url:"/system/auth/logout"}),uP(),DO(),this.resetState()},resetState(){this.permissions=[],this.roles=[],this.isSetUser=!1,this.user={id:0,avatar:"",nickname:"",deptId:0}}}}),{wsCache:uX}=ku(),lJ=ym("permission",{state:()=>({routers:[],addRouters:[],menuTabRouters:[]}),getters:{getRouters(){return this.routers},getAddRouters(){return(e=>{const t=Mf(e);for(let n=0;n<t.length;n++){const r=t[n];$0e(r)&&U0e(r)}return t})(Mf(this.addRouters))},getMenuTabRouters(){return this.menuTabRouters}},actions:{async generateRoutes(){return new Promise(async e=>{let t=[];uX.get(Nr.ROLE_ROUTERS)&&(t=uX.get(Nr.ROLE_ROUTERS));const n=AP(t);this.addRouters=n.concat([{path:"/:path(.*)*",redirect:"/404",name:"404Page",meta:{hidden:!0,breadcrumb:!1}}]),this.routers=Mf(EP).concat(n),e()})},setMenuTabRouters(e){this.menuTabRouters=e}},persist:!1}),{start:wSe,done:xSe}=(HD.configure({showSpinner:!1}),(async()=>{var t;await St();const e=(t=document.getElementById("nprogress"))==null?void 0:t.getElementsByClassName("bar")[0];e&&(e.style.background=M(ASe.value))})(),{start:()=>{HD.start()},done:()=>{HD.done()}}),{loadStart:_Se,loadDone:ESe}={loadStart:()=>{sX.setPageLoading(!0)},loadDone:()=>{sX.setPageLoading(!1)}},CSe=["/login","/social-login","/auth-redirect","/bind","/register","/oauthLogin/gitee"],vc.beforeEach(async(e,t,n)=>{if(wSe(),_Se(),Cd())if(e.path==="/login")n({path:"/"});else{const r=oX(),o=hQ(Nf),i=lJ(Nf);if(r.getIsSetDict||await r.setDictMap(),o.getIsSetUser)n();else{t2.show=!0,await o.setUserInfoAction(),t2.show=!1,await i.generateRoutes(),i.getAddRouters.forEach(u=>{vc.addRoute(u)});const a=t.query.redirect||e.path,l=decodeURIComponent(a),{paramsObject:s}=(u=>{if(u==null)return{basePath:"",paramsObject:{}};const c=u.indexOf("?");let d=u;const f={};if(c!==-1){d=u.substring(0,c);const p=u.substring(c+1);new URLSearchParams(p).forEach((m,v)=>{f[v]=m})}return{basePath:d,paramsObject:f}})(l);n(e.path===l?{...e,replace:!0}:{path:l,query:s})}}else CSe.indexOf(e.path)!==-1?n():n(`/login?redirect=${e.fullPath}`)}),vc.afterEach(e=>{var t;(n=>{const{t:r}=hc(),o=de(n?`${lX.getTitle} - ${r(n)}`:lX.getTitle);Je(o,(i,a)=>{Eb(i)&&i!==a&&document&&(document.title=i)},{immediate:!0})})((t=e==null?void 0:e.meta)==null?void 0:t.title),xSe(),ESe()}),window._hmt=window._hmt||[],function(){const e=document.createElement("script");e.src="https://hm.baidu.com/hm.js?a1ff8825baa73c3a78eb96aa40325abc";const t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)}(),vc.afterEach(function(e){_hmt.push(["_trackPageview",e.fullPath])});const SSe=function(e){return Object.prototype.toString.call(e)==="[object Array]"},ji=()=>{};ji.typeColor=function(e){let t="";switch(e){case"primary":t="#2d8cf0";break;case"success":t="#19be6b";break;case"info":t="#909399";break;case"warn":t="#ff9900";break;case"error":t="#f03f14";break;default:t="#35495E"}return t},ji.print=function(e="default",t,n=!1){typeof t!="object"?n?console.log(`%c ${t} `,`background:${ji.typeColor(e)}; padding: 2px; border-radius: 4px; color: #fff;`):console.log(`%c ${t} `,`border: 1px solid ${ji.typeColor(e)};
| padding: 2px; border-radius: 4px;
| color: ${ji.typeColor(e)};`):SSe(t)?console.table(t):console.dir(t)},ji.printBack=function(e="primary",t){this.print(e,t,!0)},ji.pretty=function(e="primary",t,n){if(typeof n=="object")return console.group("Console Group",t),console.log(`%c ${t}`,`background:${ji.typeColor(e)};border:1px solid ${ji.typeColor(e)};
| padding: 1px; border-radius: 4px; color: #fff;`),SSe(n)?console.table(n):console.dir(n),void console.groupEnd();console.log(`%c ${t} %c ${n} %c`,`background:${ji.typeColor(e)};border:1px solid ${ji.typeColor(e)};
| padding: 1px; border-radius: 4px 0 0 4px; color: #fff;`,`border:1px solid ${ji.typeColor(e)};
| padding: 1px; border-radius: 0 4px 4px 0; color: ${ji.typeColor(e)};`,"background:transparent")},ji.prettyPrimary=function(e,...t){t.forEach(n=>this.pretty("primary",e,n))},ji.prettySuccess=function(e,...t){t.forEach(n=>this.pretty("success",e,n))},ji.prettyWarn=function(e,...t){t.forEach(n=>this.pretty("warn",e,n))},ji.prettyError=function(e,...t){t.forEach(n=>this.pretty("error",e,n))},ji.prettyInfo=function(e,...t){t.forEach(n=>this.pretty("info",e,n))};const{entries:kSe,setPrototypeOf:DSe,isFrozen:LAt,getPrototypeOf:jAt,getOwnPropertyDescriptor:VAt}=Object;let{freeze:dl,seal:Eu,create:OSe}=Object,{apply:cX,construct:dX}=typeof Reflect<"u"&&Reflect;dl||(dl=function(e){return e}),Eu||(Eu=function(e){return e}),cX||(cX=function(e,t,n){return e.apply(t,n)}),dX||(dX=function(e,t){return new e(...t)});const $D=Ps(Array.prototype.forEach),TSe=Ps(Array.prototype.pop),WA=Ps(Array.prototype.push),UD=Ps(String.prototype.toLowerCase),fX=Ps(String.prototype.toString),MSe=Ps(String.prototype.match),GA=Ps(String.prototype.replace),zAt=Ps(String.prototype.indexOf),HAt=Ps(String.prototype.trim),sc=Ps(Object.prototype.hasOwnProperty),fl=Ps(RegExp.prototype.test),qA=(NSe=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return dX(NSe,t)});var NSe;function Ps(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return cX(e,t,r)}}function br(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:UD;DSe&&DSe(e,null);let r=t.length;for(;r--;){let o=t[r];if(typeof o=="string"){const i=n(o);i!==o&&(LAt(t)||(t[r]=i),o=i)}e[o]=!0}return e}function $At(e){for(let t=0;t<e.length;t++)sc(e,t)||(e[t]=null);return e}function rm(e){const t=OSe(null);for(const[n,r]of kSe(e))sc(e,n)&&(Array.isArray(r)?t[n]=$At(r):r&&typeof r=="object"&&r.constructor===Object?t[n]=rm(r):t[n]=r);return t}function KA(e,t){for(;e!==null;){const n=VAt(e,t);if(n){if(n.get)return Ps(n.get);if(typeof n.value=="function")return Ps(n.value)}e=jAt(e)}return function(){return null}}const FSe=dl(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),pX=dl(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),hX=dl(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),UAt=dl(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),vX=dl(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),WAt=dl(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),RSe=dl(["#text"]),ISe=dl(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),mX=dl(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),BSe=dl(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),WD=dl(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),GAt=Eu(/\{\{[\w\W]*|[\w\W]*\}\}/gm),qAt=Eu(/<%[\w\W]*|[\w\W]*%>/gm),KAt=Eu(/\${[\w\W]*}/gm),YAt=Eu(/^data-[\-\w.\u00B7-\uFFFF]/),XAt=Eu(/^aria-[\-\w]+$/),PSe=Eu(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),QAt=Eu(/^(?:\w+script|data):/i),JAt=Eu(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),LSe=Eu(/^html$/i),ZAt=Eu(/^[a-z][.\w]*(-[.\w]+)+$/i);var jSe=Object.freeze({__proto__:null,MUSTACHE_EXPR:GAt,ERB_EXPR:qAt,TMPLIT_EXPR:KAt,DATA_ATTR:YAt,ARIA_ATTR:XAt,IS_ALLOWED_URI:PSe,IS_SCRIPT_OR_DATA:QAt,ATTR_WHITESPACE:JAt,DOCTYPE_NAME:LSe,CUSTOM_ELEMENT:ZAt});const ewt=1,twt=3,nwt=7,rwt=8,owt=9,iwt=function(){return typeof window>"u"?null:window};var awt=function e(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:iwt();const n=Ne=>e(Ne);if(n.version="3.1.6",n.removed=[],!t||!t.document||t.document.nodeType!==owt)return n.isSupported=!1,n;let{document:r}=t;const o=r,i=o.currentScript,{DocumentFragment:a,HTMLTemplateElement:l,Node:s,Element:u,NodeFilter:c,NamedNodeMap:d=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:f,DOMParser:p,trustedTypes:m}=t,v=u.prototype,g=KA(v,"cloneNode"),b=KA(v,"remove"),y=KA(v,"nextSibling"),w=KA(v,"childNodes"),x=KA(v,"parentNode");if(typeof l=="function"){const Ne=r.createElement("template");Ne.content&&Ne.content.ownerDocument&&(r=Ne.content.ownerDocument)}let _,E="";const{implementation:C,createNodeIterator:T,createDocumentFragment:k,getElementsByTagName:I}=r,{importNode:O}=o;let F={};n.isSupported=typeof kSe=="function"&&typeof x=="function"&&C&&C.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:N,ERB_EXPR:B,TMPLIT_EXPR:P,DATA_ATTR:V,ARIA_ATTR:L,IS_SCRIPT_OR_DATA:H,ATTR_WHITESPACE:U,CUSTOM_ELEMENT:G}=jSe;let{IS_ALLOWED_URI:z}=jSe,$=null;const W=br({},[...FSe,...pX,...hX,...vX,...RSe]);let K=null;const X=br({},[...ISe,...mX,...BSe,...WD]);let te=Object.seal(OSe(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ne=null,se=null,le=!0,J=!0,Z=!1,ye=!0,be=!1,ve=!0,Ae=!1,Ce=!1,_e=!1,ke=!1,Be=!1,$e=!1,rt=!0,ge=!1,We=!0,st=!1,At={},Ve=null;const it=br({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let dt=null;const ot=br({},["audio","video","img","source","image","track"]);let je=null;const we=br({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),ze="http://www.w3.org/1998/Math/MathML",me="http://www.w3.org/2000/svg",Me="http://www.w3.org/1999/xhtml";let Ie=Me,ht=!1,gt=null;const vt=br({},[ze,me,Me],fX);let qt=null;const mn=["application/xhtml+xml","text/html"];let Zt=null,rn=null;const zn=r.createElement("form"),tt=function(Ne){return Ne instanceof RegExp||Ne instanceof Function},kt=function(){let Ne=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!rn||rn!==Ne){if(Ne&&typeof Ne=="object"||(Ne={}),Ne=rm(Ne),qt=mn.indexOf(Ne.PARSER_MEDIA_TYPE)===-1?"text/html":Ne.PARSER_MEDIA_TYPE,Zt=qt==="application/xhtml+xml"?fX:UD,$=sc(Ne,"ALLOWED_TAGS")?br({},Ne.ALLOWED_TAGS,Zt):W,K=sc(Ne,"ALLOWED_ATTR")?br({},Ne.ALLOWED_ATTR,Zt):X,gt=sc(Ne,"ALLOWED_NAMESPACES")?br({},Ne.ALLOWED_NAMESPACES,fX):vt,je=sc(Ne,"ADD_URI_SAFE_ATTR")?br(rm(we),Ne.ADD_URI_SAFE_ATTR,Zt):we,dt=sc(Ne,"ADD_DATA_URI_TAGS")?br(rm(ot),Ne.ADD_DATA_URI_TAGS,Zt):ot,Ve=sc(Ne,"FORBID_CONTENTS")?br({},Ne.FORBID_CONTENTS,Zt):it,ne=sc(Ne,"FORBID_TAGS")?br({},Ne.FORBID_TAGS,Zt):{},se=sc(Ne,"FORBID_ATTR")?br({},Ne.FORBID_ATTR,Zt):{},At=!!sc(Ne,"USE_PROFILES")&&Ne.USE_PROFILES,le=Ne.ALLOW_ARIA_ATTR!==!1,J=Ne.ALLOW_DATA_ATTR!==!1,Z=Ne.ALLOW_UNKNOWN_PROTOCOLS||!1,ye=Ne.ALLOW_SELF_CLOSE_IN_ATTR!==!1,be=Ne.SAFE_FOR_TEMPLATES||!1,ve=Ne.SAFE_FOR_XML!==!1,Ae=Ne.WHOLE_DOCUMENT||!1,ke=Ne.RETURN_DOM||!1,Be=Ne.RETURN_DOM_FRAGMENT||!1,$e=Ne.RETURN_TRUSTED_TYPE||!1,_e=Ne.FORCE_BODY||!1,rt=Ne.SANITIZE_DOM!==!1,ge=Ne.SANITIZE_NAMED_PROPS||!1,We=Ne.KEEP_CONTENT!==!1,st=Ne.IN_PLACE||!1,z=Ne.ALLOWED_URI_REGEXP||PSe,Ie=Ne.NAMESPACE||Me,te=Ne.CUSTOM_ELEMENT_HANDLING||{},Ne.CUSTOM_ELEMENT_HANDLING&&tt(Ne.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(te.tagNameCheck=Ne.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Ne.CUSTOM_ELEMENT_HANDLING&&tt(Ne.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(te.attributeNameCheck=Ne.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Ne.CUSTOM_ELEMENT_HANDLING&&typeof Ne.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(te.allowCustomizedBuiltInElements=Ne.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),be&&(J=!1),Be&&(ke=!0),At&&($=br({},RSe),K=[],At.html===!0&&(br($,FSe),br(K,ISe)),At.svg===!0&&(br($,pX),br(K,mX),br(K,WD)),At.svgFilters===!0&&(br($,hX),br(K,mX),br(K,WD)),At.mathMl===!0&&(br($,vX),br(K,BSe),br(K,WD))),Ne.ADD_TAGS&&($===W&&($=rm($)),br($,Ne.ADD_TAGS,Zt)),Ne.ADD_ATTR&&(K===X&&(K=rm(K)),br(K,Ne.ADD_ATTR,Zt)),Ne.ADD_URI_SAFE_ATTR&&br(je,Ne.ADD_URI_SAFE_ATTR,Zt),Ne.FORBID_CONTENTS&&(Ve===it&&(Ve=rm(Ve)),br(Ve,Ne.FORBID_CONTENTS,Zt)),We&&($["#text"]=!0),Ae&&br($,["html","head","body"]),$.table&&(br($,["tbody"]),delete ne.tbody),Ne.TRUSTED_TYPES_POLICY){if(typeof Ne.TRUSTED_TYPES_POLICY.createHTML!="function")throw qA('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Ne.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw qA('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');_=Ne.TRUSTED_TYPES_POLICY,E=_.createHTML("")}else _===void 0&&(_=function(Tt,Oe){if(typeof Tt!="object"||typeof Tt.createPolicy!="function")return null;let nt=null;const ut="data-tt-policy-suffix";Oe&&Oe.hasAttribute(ut)&&(nt=Oe.getAttribute(ut));const xt="dompurify"+(nt?"#"+nt:"");try{return Tt.createPolicy(xt,{createHTML:En=>En,createScriptURL:En=>En})}catch{return console.warn("TrustedTypes policy "+xt+" could not be created."),null}}(m,i)),_!==null&&typeof E=="string"&&(E=_.createHTML(""));dl&&dl(Ne),rn=Ne}},An=br({},["mi","mo","mn","ms","mtext"]),_n=br({},["foreignobject","annotation-xml"]),po=br({},["title","style","font","a","script"]),Qr=br({},[...pX,...hX,...UAt]),Ar=br({},[...vX,...WAt]),Jr=function(Ne){WA(n.removed,{element:Ne});try{x(Ne).removeChild(Ne)}catch{b(Ne)}},Ao=function(Ne,Tt){try{WA(n.removed,{attribute:Tt.getAttributeNode(Ne),from:Tt})}catch{WA(n.removed,{attribute:null,from:Tt})}if(Tt.removeAttribute(Ne),Ne==="is"&&!K[Ne])if(ke||Be)try{Jr(Tt)}catch{}else try{Tt.setAttribute(Ne,"")}catch{}},pl=function(Ne){let Tt=null,Oe=null;if(_e)Ne="<remove></remove>"+Ne;else{const xt=MSe(Ne,/^[\r\n\t ]+/);Oe=xt&&xt[0]}qt==="application/xhtml+xml"&&Ie===Me&&(Ne='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+Ne+"</body></html>");const nt=_?_.createHTML(Ne):Ne;if(Ie===Me)try{Tt=new p().parseFromString(nt,qt)}catch{}if(!Tt||!Tt.documentElement){Tt=C.createDocument(Ie,"template",null);try{Tt.documentElement.innerHTML=ht?E:nt}catch{}}const ut=Tt.body||Tt.documentElement;return Ne&&Oe&&ut.insertBefore(r.createTextNode(Oe),ut.childNodes[0]||null),Ie===Me?I.call(Tt,Ae?"html":"body")[0]:Ae?Tt.documentElement:ut},Go=function(Ne){return T.call(Ne.ownerDocument||Ne,Ne,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},za=function(Ne){return Ne instanceof f&&(typeof Ne.nodeName!="string"||typeof Ne.textContent!="string"||typeof Ne.removeChild!="function"||!(Ne.attributes instanceof d)||typeof Ne.removeAttribute!="function"||typeof Ne.setAttribute!="function"||typeof Ne.namespaceURI!="string"||typeof Ne.insertBefore!="function"||typeof Ne.hasChildNodes!="function")},sa=function(Ne){return typeof s=="function"&&Ne instanceof s},He=function(Ne,Tt,Oe){F[Ne]&&$D(F[Ne],nt=>{nt.call(n,Tt,Oe,rn)})},lt=function(Ne){let Tt=null;if(He("beforeSanitizeElements",Ne,null),za(Ne))return Jr(Ne),!0;const Oe=Zt(Ne.nodeName);if(He("uponSanitizeElement",Ne,{tagName:Oe,allowedTags:$}),Ne.hasChildNodes()&&!sa(Ne.firstElementChild)&&fl(/<[/\w]/g,Ne.innerHTML)&&fl(/<[/\w]/g,Ne.textContent)||Ne.nodeType===nwt||ve&&Ne.nodeType===rwt&&fl(/<[/\w]/g,Ne.data))return Jr(Ne),!0;if(!$[Oe]||ne[Oe]){if(!ne[Oe]&&Kt(Oe)&&(te.tagNameCheck instanceof RegExp&&fl(te.tagNameCheck,Oe)||te.tagNameCheck instanceof Function&&te.tagNameCheck(Oe)))return!1;if(We&&!Ve[Oe]){const nt=x(Ne)||Ne.parentNode,ut=w(Ne)||Ne.childNodes;if(ut&&nt)for(let xt=ut.length-1;xt>=0;--xt){const En=g(ut[xt],!0);En.__removalCount=(Ne.__removalCount||0)+1,nt.insertBefore(En,y(Ne))}}return Jr(Ne),!0}return Ne instanceof u&&!function(nt){let ut=x(nt);ut&&ut.tagName||(ut={namespaceURI:Ie,tagName:"template"});const xt=UD(nt.tagName),En=UD(ut.tagName);return!!gt[nt.namespaceURI]&&(nt.namespaceURI===me?ut.namespaceURI===Me?xt==="svg":ut.namespaceURI===ze?xt==="svg"&&(En==="annotation-xml"||An[En]):!!Qr[xt]:nt.namespaceURI===ze?ut.namespaceURI===Me?xt==="math":ut.namespaceURI===me?xt==="math"&&_n[En]:!!Ar[xt]:nt.namespaceURI===Me?!(ut.namespaceURI===me&&!_n[En])&&!(ut.namespaceURI===ze&&!An[En])&&!Ar[xt]&&(po[xt]||!Qr[xt]):!(qt!=="application/xhtml+xml"||!gt[nt.namespaceURI]))}(Ne)?(Jr(Ne),!0):Oe!=="noscript"&&Oe!=="noembed"&&Oe!=="noframes"||!fl(/<\/no(script|embed|frames)/i,Ne.innerHTML)?(be&&Ne.nodeType===twt&&(Tt=Ne.textContent,$D([N,B,P],nt=>{Tt=GA(Tt,nt," ")}),Ne.textContent!==Tt&&(WA(n.removed,{element:Ne.cloneNode()}),Ne.textContent=Tt)),He("afterSanitizeElements",Ne,null),!1):(Jr(Ne),!0)},Et=function(Ne,Tt,Oe){if(rt&&(Tt==="id"||Tt==="name")&&(Oe in r||Oe in zn))return!1;if(!(J&&!se[Tt]&&fl(V,Tt))){if(!(le&&fl(L,Tt))){if(!K[Tt]||se[Tt]){if(!(Kt(Ne)&&(te.tagNameCheck instanceof RegExp&&fl(te.tagNameCheck,Ne)||te.tagNameCheck instanceof Function&&te.tagNameCheck(Ne))&&(te.attributeNameCheck instanceof RegExp&&fl(te.attributeNameCheck,Tt)||te.attributeNameCheck instanceof Function&&te.attributeNameCheck(Tt))||Tt==="is"&&te.allowCustomizedBuiltInElements&&(te.tagNameCheck instanceof RegExp&&fl(te.tagNameCheck,Oe)||te.tagNameCheck instanceof Function&&te.tagNameCheck(Oe))))return!1}else if(!je[Tt]){if(!fl(z,GA(Oe,U,""))){if((Tt!=="src"&&Tt!=="xlink:href"&&Tt!=="href"||Ne==="script"||zAt(Oe,"data:")!==0||!dt[Ne])&&!(Z&&!fl(H,GA(Oe,U,"")))){if(Oe)return!1}}}}}return!0},Kt=function(Ne){return Ne!=="annotation-xml"&&MSe(Ne,G)},gr=function(Ne){He("beforeSanitizeAttributes",Ne,null);const{attributes:Tt}=Ne;if(!Tt)return;const Oe={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:K};let nt=Tt.length;for(;nt--;){const ut=Tt[nt],{name:xt,namespaceURI:En,value:ln}=ut,Ct=Zt(xt);let Fn=xt==="value"?ln:HAt(ln);if(Oe.attrName=Ct,Oe.attrValue=Fn,Oe.keepAttr=!0,Oe.forceKeepAttr=void 0,He("uponSanitizeAttribute",Ne,Oe),Fn=Oe.attrValue,ve&&fl(/((--!?|])>)|<\/(style|title)/i,Fn)){Ao(xt,Ne);continue}if(Oe.forceKeepAttr||(Ao(xt,Ne),!Oe.keepAttr))continue;if(!ye&&fl(/\/>/i,Fn)){Ao(xt,Ne);continue}be&&$D([N,B,P],jr=>{Fn=GA(Fn,jr," ")});const Mo=Zt(Ne.nodeName);if(Et(Mo,Ct,Fn)){if(!ge||Ct!=="id"&&Ct!=="name"||(Ao(xt,Ne),Fn="user-content-"+Fn),_&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!En)switch(m.getAttributeType(Mo,Ct)){case"TrustedHTML":Fn=_.createHTML(Fn);break;case"TrustedScriptURL":Fn=_.createScriptURL(Fn)}try{En?Ne.setAttributeNS(En,xt,Fn):Ne.setAttribute(xt,Fn),za(Ne)?Jr(Ne):TSe(n.removed)}catch{}}}He("afterSanitizeAttributes",Ne,null)},Bn=function Ne(Tt){let Oe=null;const nt=Go(Tt);for(He("beforeSanitizeShadowDOM",Tt,null);Oe=nt.nextNode();)He("uponSanitizeShadowNode",Oe,null),lt(Oe)||(Oe.content instanceof a&&Ne(Oe.content),gr(Oe));He("afterSanitizeShadowDOM",Tt,null)};return n.sanitize=function(Ne){let Tt=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Oe=null,nt=null,ut=null,xt=null;if(ht=!Ne,ht&&(Ne="<!-->"),typeof Ne!="string"&&!sa(Ne)){if(typeof Ne.toString!="function")throw qA("toString is not a function");if(typeof(Ne=Ne.toString())!="string")throw qA("dirty is not a string, aborting")}if(!n.isSupported)return Ne;if(Ce||kt(Tt),n.removed=[],typeof Ne=="string"&&(st=!1),st){if(Ne.nodeName){const Ct=Zt(Ne.nodeName);if(!$[Ct]||ne[Ct])throw qA("root node is forbidden and cannot be sanitized in-place")}}else if(Ne instanceof s)Oe=pl("<!---->"),nt=Oe.ownerDocument.importNode(Ne,!0),nt.nodeType===ewt&&nt.nodeName==="BODY"||nt.nodeName==="HTML"?Oe=nt:Oe.appendChild(nt);else{if(!ke&&!be&&!Ae&&Ne.indexOf("<")===-1)return _&&$e?_.createHTML(Ne):Ne;if(Oe=pl(Ne),!Oe)return ke?null:$e?E:""}Oe&&_e&&Jr(Oe.firstChild);const En=Go(st?Ne:Oe);for(;ut=En.nextNode();)lt(ut)||(ut.content instanceof a&&Bn(ut.content),gr(ut));if(st)return Ne;if(ke){if(Be)for(xt=k.call(Oe.ownerDocument);Oe.firstChild;)xt.appendChild(Oe.firstChild);else xt=Oe;return(K.shadowroot||K.shadowrootmode)&&(xt=O.call(o,xt,!0)),xt}let ln=Ae?Oe.outerHTML:Oe.innerHTML;return Ae&&$["!doctype"]&&Oe.ownerDocument&&Oe.ownerDocument.doctype&&Oe.ownerDocument.doctype.name&&fl(LSe,Oe.ownerDocument.doctype.name)&&(ln="<!DOCTYPE "+Oe.ownerDocument.doctype.name+`>
| `+ln),be&&$D([N,B,P],Ct=>{ln=GA(ln,Ct," ")}),_&&$e?_.createHTML(ln):ln},n.setConfig=function(){kt(arguments.length>0&&arguments[0]!==void 0?arguments[0]:{}),Ce=!0},n.clearConfig=function(){rn=null,Ce=!1},n.isValidAttribute=function(Ne,Tt,Oe){rn||kt({});const nt=Zt(Ne),ut=Zt(Tt);return Et(nt,ut,Oe)},n.addHook=function(Ne,Tt){typeof Tt=="function"&&(F[Ne]=F[Ne]||[],WA(F[Ne],Tt))},n.removeHook=function(Ne){if(F[Ne])return TSe(F[Ne])},n.removeHooks=function(Ne){F[Ne]&&(F[Ne]=[])},n.removeAllHooks=function(){F={}},n}();function VSe(){return awt()}const lwt={install(e,t={},n=VSe){e.directive("dompurify-html",function(r={},o=VSe){const i=o();(function(l,s){const u=l.hooks??{};let c;for(c in u){const d=u[c];d!==void 0&&s.addHook(c,d)}})(r,i);const a=function(l,s){const u=s.value;if(s.oldValue===u)return;const c=`${u}`,d=s.arg,f=r.namedConfigurations,p=r.default??{};l.innerHTML=f&&d!==void 0?i.sanitize(c,f[d]??p):i.sanitize(c,p)};return{mounted:a,updated:a}}(t,n))}};(async()=>{const e=K7(ySe);await qne(e),(t=>{t.use(Nf)})(e),(t=>{t.component("Icon",mm)})(e),(t=>{Vce.forEach(n=>{t.use(n)}),zce.forEach(n=>{t.component(n.name,n)})})(e),(t=>{DAt.forEach(n=>{t.component(n.name,n)}),_d.use(Rqe),t.use(_d),t.use(mc)})(e),(t=>{t.use(vc)})(e),MAt(e),await vc.isReady(),e.use(lwt),e.mount("#app")})(),ji.prettyPrimary("\u6B22\u8FCE\u4F7F\u7528","\u5DE5\u4E1A\u4E92\u8054\u7F51\u5E73\u53F0")})();export{wO as $,Qn as A,he as B,ce as C,Ye as D,xw as E,bt as F,_w as G,Ew as H,Jn as I,hc as J,lQ as K,sQ as L,uQ as M,cQ as N,Dt as O,nn as P,Cw as Q,wb as R,IDe as S,xO as T,mm as U,Sa as V,_O as W,dQ as X,fQ as Y,EO as Z,Nt as _,a9t as __tla,M as a,BDe as a$,PDe as a0,gm as a1,Rr as a2,pQ as a3,LDe as a4,jDe as a5,VDe as a6,ua as a7,Sw as a8,zDe as a9,Qe as aA,$t as aB,f0 as aC,kw as aD,hQ as aE,St as aF,HDe as aG,xb as aH,$De as aI,_b as aJ,UDe as aK,di as aL,WDe as aM,GDe as aN,yl as aO,Hn as aP,qDe as aQ,KDe as aR,Mf as aS,Eb as aT,vQ as aU,No as aV,Gt as aW,Cb as aX,fi as aY,Gr as aZ,qn as a_,Sb as aa,ca as ab,Dw as ac,ee as ad,$n as ae,YDe as af,mQ as ag,vc as ah,XDe as ai,gQ as aj,QDe as ak,JDe as al,CO as am,bl as an,yQ as ao,SO as ap,ZDe as aq,eOe as ar,Xn as as,mc as at,Ow as au,kb as av,kO as aw,Nf as ax,ym as ay,dn as az,yn as b,Vs as b$,Rt as b0,Ft as b1,bQ as b2,wd as b3,vn as b4,AQ as b5,tOe as b6,DO as b7,Db as b8,gc as b9,Ff as bA,nOe as bB,rOe as bC,wQ as bD,xQ as bE,oOe as bF,iOe as bG,aOe as bH,OO as bI,lOe as bJ,sOe as bK,_Q as bL,yc as bM,bm as bN,Kn as bO,an as bP,Tw as bQ,uOe as bR,cOe as bS,Ga as bT,EQ as bU,Mw as bV,pn as bW,mt as bX,Ob as bY,CQ as bZ,dOe as b_,fOe as ba,pOe as bb,oo as bc,SQ as bd,Nw as be,kQ as bf,Ke as bg,DQ as bh,OQ as bi,Fw as bj,TQ as bk,xd as bl,Yo as bm,bc as bn,TO as bo,Zl as bp,Xt as bq,hOe as br,Al as bs,MQ as bt,p0 as bu,Rw as bv,ka as bw,Iw as bx,xo as by,$i as bz,fe as c,Tb as c$,vOe as c0,NQ as c1,Am as c2,mOe as c3,FQ as c4,RQ as c5,rr as c6,zs as c7,Tn as c8,es as c9,MO as cA,wl as cB,NO as cC,Bw as cD,FO as cE,RO as cF,IO as cG,BO as cH,PO as cI,LO as cJ,IQ as cK,BQ as cL,PQ as cM,LQ as cN,jQ as cO,gOe as cP,yOe as cQ,jO as cR,VO as cS,VQ as cT,Pw as cU,Mb as cV,bOe as cW,zQ as cX,HQ as cY,$Q as cZ,Nb as c_,h0 as ca,Ui as cb,da as cc,v0 as cd,Lw as ce,Fb as cf,Wi as cg,wn as ch,Zn as ci,qa as cj,Ac as ck,jw as cl,Vw as cm,zO as cn,UQ as co,ts as cp,ns as cq,AOe as cr,fa as cs,Ut as ct,xn as cu,WQ as cv,GQ as cw,Xo as cx,Rf as cy,qQ as cz,Te as d,zw as d$,wm as d0,wOe as d1,xm as d2,m0 as d3,Su as d4,xOe as d5,pa as d6,Rb as d7,_Oe as d8,EOe as d9,KQ as dA,_d as dB,COe as dC,HO as dD,Hw as dE,SOe as dF,kOe as dG,DOe as dH,Nr as dI,OOe as dJ,YQ as dK,Qo as dL,TOe as dM,MOe as dN,NOe as dO,XQ as dP,FOe as dQ,QQ as dR,Ka as dS,ROe as dT,IOe as dU,Ed as dV,xl as dW,Hs as dX,JQ as dY,Ib as dZ,BOe as d_,POe as da,ZQ as db,$O as dc,UO as dd,_l as de,_m as df,Bb as dg,g0 as dh,El as di,LOe as dj,eJ as dk,tJ as dl,y0 as dm,nJ as dn,WO as dp,$w as dq,wc as dr,Cd as ds,GO as dt,qO as du,$s as dv,jOe as dw,VOe as dx,zOe as dy,KO as dz,Pt as e,rJ as e0,HOe as e1,YO as e2,$Oe as e3,oJ as e4,_t as f,Le as g,Fe as h,bn as i,ft as j,ie as k,iJ as l,Un as m,oe as n,Y as o,UOe as p,Cr as q,de as r,Ya as s,dr as t,aJ as u,lJ as v,Je as w,XO as x,WOe as y,ku as z};
| function __vite__mapDeps(indexes) {
| if (!__vite__mapDeps.viteFileDeps) {
| __vite__mapDeps.viteFileDeps = ["assets/403-C8iCA59K.js","assets/Error.vue_vue_type_script_setup_true_lang-DOWhNURo.js","assets/404-BjPNd3kL.js","assets/500-DgM9xbBr.js","assets/Index2-BhO9Jp95.js","assets/index-DABeXvnV.js","assets/ToolHeader-D85r-QHP.js","assets/XButton-C1WkVWZR.js","assets/XButton-DYff_jSU.css","assets/el-avatar-DfAMRPCL.js","assets/el-avatar-59mKYfyG.css","assets/formatTime-DG99nHw2.js","assets/index-BdGhazw1.js","assets/el-dropdown-item-CeWj3-13.js","assets/el-dropdown-item-BrDVK7WC.css","assets/tagsView-C8yDzF3Q.js","assets/Dialog.vue_vue_type_style_index_0_lang-DH0TiLYN.js","assets/Dialog-BdewL7YE.css","assets/useValidator-kEqoZj3j.js","assets/tree-BBZY150N.js","assets/LocaleDropdown.vue_vue_type_script_setup_true_lang-CJYmMO9l.js","assets/el-button-group-ou1b9mwh.css","assets/ToolHeader-DmsqBX2J.css","assets/Index2-i2uXlKJO.css","assets/Login-D9xrXs6a.js","assets/logo-BKeFBQsR.js","assets/login-box-bg-CgotIC_L.js","assets/ThemeSwitch-B3uqdL6m.js","assets/useIcon-DbhWU3UK.js","assets/ThemeSwitch-TW9QG3Ix.css","assets/LoginForm-DqRfYWNS.js","assets/Verify-Bt7ztGb5.js","assets/Verify-6k5ori_o.css","assets/LoginFormTitle.vue_vue_type_script_setup_true_lang-BYAXnov1.js","assets/formRules-KRws1Ke5.js","assets/LoginForm-DGFUufA1.css","assets/MobileForm--BIF7efa.js","assets/MobileForm-2N7Ej7pZ.css","assets/Form.vue_vue_type_style_index_0_scoped_09f6ff61_lang-B0myO5Ey.js","assets/el-virtual-list-DyZstV52.js","assets/el-virtual-list-rfJ2-s6H.css","assets/el-tree-select-DhIHMmfG.js","assets/el-tree-select-CKlBvrqO.css","assets/InputPassword-BKyYinTx.js","assets/InputPassword-xqMp5d9J.css","assets/Form-DuSiGXu8.css","assets/QrCodeForm.vue_vue_type_script_setup_true_lang-C2BJeb4Y.js","assets/el-card-Bdk9qx7q.js","assets/el-card-BRs6t4Sx.css","assets/QrCodeForm-DNYY6tXC.css","assets/Login-CXEHpsyE.css","assets/SocialLogin-CcXhIKCR.js","assets/SocialLogin-Can16JpL.css","assets/LoginFormTitle-D_Pam66p.js","assets/QrCodeForm-BDA5Uy9t.js","assets/RegisterForm-D9mHgHZH.js","assets/Form-DWU3hFR9.js","assets/useForm-CEk1zgLl.js","assets/SSOLogin-DLznLpIf.js","assets/Index-RVIgbABi.js","assets/BasicInfo.vue_vue_type_script_setup_true_lang-DaO-dLkD.js","assets/profile-RahJNlBN.js","assets/ProfileUser-Tyqt21gY.js","assets/UserAvatar-DqHUKCHy.js","assets/UserAvatar-CwM0JGvx.css","assets/ProfileUser-DauWhksk.css","assets/ResetPwd.vue_vue_type_script_setup_true_lang-BJ21Fgp9.js","assets/UserSocial.vue_vue_type_script_setup_true_lang-D3kkKZWQ.js","assets/XTextButton-DNeufsj_.js","assets/XTextButton-C4zGMyiT.css","assets/constants-CuOBQ73z.js","assets/Index-Con7Wr0K.css","assets/BasicInfo-kE_beqVZ.js","assets/ResetPwd-77x1SrMH.js","assets/UserSocial-BwD5mO_9.js","assets/CategoryForm-BQH8bknp.js","assets/CategoryForm.vue_vue_type_script_setup_true_lang-Bpr8KhR7.js","assets/index-Dppb265m.js","assets/index-8-MJAuYY.js","assets/index.vue_vue_type_script_setup_true_lang-Cenk7Bi3.js","assets/index-DVe591HI.js","assets/DictTag.vue_vue_type_script_lang-DPOZRs0A.js","assets/color-DXkOL5Tu.js","assets/ContentWrap.vue_vue_type_script_setup_true_lang-BjvrLlUT.js","assets/index-BoLRyt57.js","assets/bpmn-embedded-BQWcRx7_.js","assets/index-CQckL2qL.js","assets/index-VglbY8ty.js","assets/index-BFn6KXm4.js","assets/index-63VBDaUm.js","assets/index-DYclHsjD.js","assets/index-eJzt9aew.js","assets/index-BbWSenFL.js","assets/el-drawer-DCGXHIlf.js","assets/el-drawer-6tlglFsG.css","assets/index-CO7BRHFB.js","assets/bpmn-embedded-CpnPu0S0.css","assets/index-BnVkKGRw.js","assets/formCreate-Cdf7i8Tu.js","assets/index-_f0OG2Ul.js","assets/useFormCreateDesigner-DjCKROXR.js","assets/dict.type-DwbQoim0.js","assets/index-CNWjis1i.js","assets/UserGroupForm-DAme4cIT.js","assets/UserGroupForm.vue_vue_type_script_setup_true_lang-DvHITIAi.js","assets/index-BbXIL6bb.js","assets/ModelForm-T2kDeoPF.js","assets/ModelForm.vue_vue_type_script_setup_true_lang-C_DiFIeZ.js","assets/index-B0RH4T-v.js","assets/ModelImportForm-C9Hl2PQT.js","assets/ModelImportForm.vue_vue_type_script_setup_true_lang-CZ6_uPhr.js","assets/index-Blo2eY_h.js","assets/index-DlKT4_cY.css","assets/index-CS5KEqs5.js","assets/el-image-B_ZoGYtG.js","assets/el-image-BrUZgf8Q.css","assets/create-fm9OqWwY.js","assets/index-BV2p1r3n.js","assets/detail-DdhYk8X9.js","assets/el-descriptions-item-XOb4a1bP.js","assets/el-descriptions-item-D_IHWRLM.css","assets/index-CpbFKzkR.js","assets/index-GzuMZCCW.js","assets/ProcessExpressionForm-2PwBjezV.js","assets/ProcessExpressionForm.vue_vue_type_script_setup_true_lang-C2cD_L9g.js","assets/index-DRYykaob.js","assets/index-iqiA4v_B.js","assets/ProcessInstanceBpmnViewer.vue_vue_type_style_index_0_lang-CfySswyA.js","assets/ProcessInstanceBpmnViewer-D6pGjtXC.css","assets/index-CjuDOozN.css","assets/ProcessInstanceBpmnViewer-BQQ-o1CW.js","assets/ProcessInstanceTaskList-DOQvtXIL.js","assets/ProcessInstanceTaskList.vue_vue_type_script_setup_true_lang-kERBllAK.js","assets/el-timeline-item-96ngSrpR.js","assets/el-timeline-item-uzx6ttP-.css","assets/TaskSignList.vue_vue_type_script_setup_true_lang-C1L2UaCa.js","assets/TaskSignDeleteForm.vue_vue_type_script_setup_true_lang-XacdJ-us.js","assets/index-vcfoyZY6.js","assets/TaskDelegateForm-D0Vus2Ax.js","assets/TaskDelegateForm.vue_vue_type_script_setup_true_lang-CnXRIIOm.js","assets/TaskReturnForm-cIVEqWrK.js","assets/TaskReturnForm.vue_vue_type_script_name_TaskRollbackDialogForm_setup_true_lang-DwCxW8rR.js","assets/TaskSignCreateForm-CWftMp61.js","assets/TaskSignCreateForm.vue_vue_type_script_setup_true_lang-DXaIK5tX.js","assets/TaskSignDeleteForm-DhI5eoMJ.js","assets/TaskSignList-l8OjvdHP.js","assets/TaskTransferForm-D9vjzd9E.js","assets/TaskTransferForm.vue_vue_type_script_setup_true_lang-CPKw41sf.js","assets/index-BuzgkpCT.js","assets/index-NeKT-tN8.js","assets/index-BXFvpXfN.js","assets/ProcessListenerForm-C3IVYYN-.js","assets/ProcessListenerForm.vue_vue_type_script_setup_true_lang-BQ0YrSlJ.js","assets/index-kfDlR1eP.js","assets/index-DxMohf9V.js","assets/index-D4OAIF_x.css","assets/index-CIduYwej.js","assets/index-OgG00ErA.js","assets/index-B0GR4_Kh.js","assets/index-DZIpPV5e.js","assets/ModBusDeviceForm-BUUKSQxu.js","assets/ModBusDeviceForm.vue_vue_type_script_setup_true_lang-BxbKZDx7.js","assets/index-C15B77Xz.js","assets/ScheduleJobForm-DEQ_1syn.js","assets/ScheduleJobForm.vue_vue_type_script_setup_true_lang-DqbZBvGI.js","assets/index-BvtaGty8.js","assets/ApiAccessLogDetail-D5Z5ZHCJ.js","assets/ApiAccessLogDetail.vue_vue_type_script_setup_true_lang-C-6AIX1S.js","assets/index-Blj2-sVT.js","assets/download-e0EdwhTv.js","assets/ApiErrorLogDetail-DEsNJFCC.js","assets/ApiErrorLogDetail.vue_vue_type_script_setup_true_lang-58CwTXgQ.js","assets/index-CaftD76h.js","assets/index-Dwv241w9.js","assets/java-DtAu0jvG.js","assets/java-CGk0_04g.css","assets/EditTable-BomNwQhg.js","assets/BasicInfoForm.vue_vue_type_script_setup_true_lang-DkbEHNXC.js","assets/ColumInfoForm.vue_vue_type_script_setup_true_lang-Hx7-rKu0.js","assets/GenerateInfoForm.vue_vue_type_script_setup_true_lang-DE1b4pGp.js","assets/index-v_JlZttQ.js","assets/index-DTm78JRf.js","assets/ImportTable-NL_VNSSV.js","assets/ImportTable.vue_vue_type_script_setup_true_lang-Cp1YWjWW.js","assets/index-DvkTV5Qa.js","assets/PreviewCode-DPkPDWsp.js","assets/PreviewCode.vue_vue_type_style_index_0_lang-B9hdVczd.js","assets/PreviewCode-xvKbIAPl.css","assets/BasicInfoForm-CIrLYCr-.js","assets/ColumInfoForm-ntguWpaV.js","assets/GenerateInfoForm-Bk4ryTSL.js","assets/index-GY8ao1hz.js","assets/ConfigForm-DYkumNgt.js","assets/ConfigForm.vue_vue_type_script_setup_true_lang-BBnlahKI.js","assets/index-CXWSVrzi.js","assets/index-BrkwA9_d.js","assets/DataSourceConfigForm-DQH97ylZ.js","assets/DataSourceConfigForm.vue_vue_type_script_setup_true_lang-B8AFWOgj.js","assets/index-CyBFHM-q.js","assets/index-KKEcbXMD.js","assets/IFrame.vue_vue_type_script_setup_true_lang-DgmDzsQS.js","assets/FileForm-BgATIEyV.js","assets/FileForm.vue_vue_type_script_setup_true_lang-CjrfbzUn.js","assets/index-C6po-tCZ.js","assets/FileConfigForm-LImRniKU.js","assets/FileConfigForm.vue_vue_type_script_setup_true_lang-1qX9cwLz.js","assets/index-C4v2eHBN.js","assets/JobDetail-ExiPr7Rl.js","assets/JobDetail.vue_vue_type_script_setup_true_lang-BOqdWJtM.js","assets/index-BQ7GdTMx.js","assets/JobForm-kyvocEIx.js","assets/JobForm.vue_vue_type_script_setup_true_lang-DE1vYeFJ.js","assets/JobForm-wzjfQlLD.css","assets/index-CyJ771mM.js","assets/permission-BDwDPy3X.js","assets/JobLogDetail-Dr6dZixy.js","assets/JobLogDetail.vue_vue_type_script_setup_true_lang-0Hug_Lpz.js","assets/index-BJKFPqmZ.js","assets/index-bvEckNGm.js","assets/Echart.vue_vue_type_script_setup_true_lang-krq-cCBm.js","assets/index-B9fmu6B4.js","assets/index-CUOVvfYG.js","assets/index_rec-BrPkkECT.js","assets/index-C7Dr0dMV.js","assets/index-CgjZW1vn.js","assets/index-DrL1bS6m.js","assets/index-CAZdk-yF.js","assets/AppForm-CqScyftC.js","assets/AppForm.vue_vue_type_script_setup_true_lang-BneyX8ik.js","assets/index--VQDUPBj.js","assets/index-CcK5vsAD.js","assets/index-CbfASQiQ.js","assets/AppGroupForm-BGV5aGGs.js","assets/AppGroupForm.vue_vue_type_script_setup_true_lang-pfnbMlhK.js","assets/index-IY3qdast.js","assets/AppMenuForm-bzwcBhJk.js","assets/AppMenuForm.vue_vue_type_script_setup_true_lang-Ca--xDX_.js","assets/Tooltip.vue_vue_type_script_setup_true_lang-BrWZHMNx.js","assets/index-DDerEEdu.js","assets/AreaForm-BPNI2w0z.js","assets/AreaForm.vue_vue_type_script_setup_true_lang-D7WHhBlP.js","assets/index-DUEQyPAm.js","assets/index-BBXEaI3n.css","assets/DeptForm-BPY6qlXR.js","assets/DeptForm.vue_vue_type_script_setup_true_lang-DxmrbA2S.js","assets/index-D6iwlJJR.js","assets/DictTypeForm-DvppSWW_.js","assets/DictTypeForm.vue_vue_type_script_setup_true_lang-D7LiiHou.js","assets/DictDataForm-BGc67T5V.js","assets/DictDataForm.vue_vue_type_script_setup_true_lang-O87vCdk2.js","assets/index-DjvJKCQO.js","assets/index-B7sK3C2p.js","assets/LoginLogDetail-Bwac3J67.js","assets/LoginLogDetail.vue_vue_type_script_setup_true_lang-yc9ZlH_e.js","assets/index-BStuHNUp.js","assets/MailAccountDetail-9goXtXsq.js","assets/MailAccountDetail.vue_vue_type_script_setup_true_lang-EfEXVPfq.js","assets/Descriptions-CMzSHNIV.js","assets/Descriptions-BFnuuTfN.css","assets/useCrudSchemas-8uncdcXs.js","assets/account.data-D64eYZda.js","assets/MailAccountForm-03329dWV.js","assets/MailAccountForm.vue_vue_type_script_setup_true_lang-D-7To6k0.js","assets/index-PHVZwl45.js","assets/useTable-yZO19ICF.js","assets/useTable-M4eiVa6K.css","assets/MailLogDetail-zSwQEp6y.js","assets/MailLogDetail.vue_vue_type_script_setup_true_lang-v02gfGAX.js","assets/index-C14HW3Mp.js","assets/MailTemplateForm-C1mw75Ri.js","assets/MailTemplateForm.vue_vue_type_script_setup_true_lang-IHCvjDxn.js","assets/index-CzI510gN.js","assets/MailTemplateSendForm-BJeAVjUb.js","assets/MailTemplateSendForm.vue_vue_type_script_setup_true_lang-C6kYpAxI.js","assets/index-COVJZZBk.js","assets/MenuForm-D78x3xWo.js","assets/MenuForm.vue_vue_type_script_setup_true_lang-cKnFW7j_.js","assets/index-CcbvS0Rz.js","assets/NoticeForm-BiHV2oM8.js","assets/NoticeForm.vue_vue_type_script_setup_true_lang-C9Eo5e3k.js","assets/index-DyAZe_Zk.js","assets/NotifyMessageDetail-CukGtX6m.js","assets/NotifyMessageDetail.vue_vue_type_script_setup_true_lang-BEAGYEQb.js","assets/index-1Jsg16er.js","assets/MyNotifyMessageDetail-BaV8oqrl.js","assets/MyNotifyMessageDetail.vue_vue_type_script_setup_true_lang-DkpaP4FO.js","assets/index-BxWLwkdW.js","assets/NotifyTemplateForm-CeVzdtl0.js","assets/NotifyTemplateForm.vue_vue_type_script_setup_true_lang-BNqDUibj.js","assets/index-DiNJxCnD.js","assets/NotifyTemplateSendForm-CZkqf1Tv.js","assets/NotifyTemplateSendForm.vue_vue_type_script_setup_true_lang-DNAYxgKT.js","assets/index-DCeUt54J.js","assets/ClientForm-ICwTiRlm.js","assets/ClientForm.vue_vue_type_script_setup_true_lang-DFSP3pEM.js","assets/index-CSk7phrL.js","assets/index-ZJppwTXV.js","assets/OperateLogDetail-DAnFORUV.js","assets/OperateLogDetail.vue_vue_type_script_setup_true_lang-BufNVvX_.js","assets/index-ie1BgzMW.js","assets/PostForm-DI5Y5C1h.js","assets/PostForm.vue_vue_type_script_setup_true_lang-CdFud-_m.js","assets/index-CelbU7Sw.js","assets/RoleAssignMenuForm-PpPyQf_t.js","assets/index-C8JQPUwX.js","assets/RoleAssignMenuForm-CJXRELC9.css","assets/RoleDataPermissionForm-DiY0K-ow.js","assets/RoleDataPermissionForm.vue_vue_type_script_setup_true_lang-Cr1_6CjE.js","assets/RoleForm-txywwzOJ.js","assets/RoleForm.vue_vue_type_script_setup_true_lang-D1AZNa7c.js","assets/index-KBaTkrH-.js","assets/SmsChannelForm-Be9iZFoQ.js","assets/SmsChannelForm.vue_vue_type_script_setup_true_lang-Djpnja6v.js","assets/index-DxIeD0TF.js","assets/index-DLShP1ih.js","assets/SmsLogDetail-C00oLE1L.js","assets/SmsLogDetail.vue_vue_type_script_setup_true_lang-C1Loi1PJ.js","assets/index-DOt0_VlS.js","assets/SmsTemplateForm-BUwigA6S.js","assets/SmsTemplateForm.vue_vue_type_script_setup_true_lang-Cv7SgsXG.js","assets/index-DaumVEau.js","assets/SmsTemplateSendForm-B3bb_6b-.js","assets/SmsTemplateSendForm.vue_vue_type_script_setup_true_lang-BN7gszaL.js","assets/index-B49AJOv3.js","assets/SocialClientForm-Bgd8ZaI0.js","assets/SocialClientForm.vue_vue_type_script_setup_true_lang-_2f2daB8.js","assets/index-DKmT4phT.js","assets/SocialUserDetail-CKC3v2_b.js","assets/SocialUserDetail.vue_vue_type_script_setup_true_lang-kPafp8qH.js","assets/index-CN7I6JGQ.js","assets/TenantForm-DxnKfOXk.js","assets/TenantForm.vue_vue_type_script_setup_true_lang-woYqGSkg.js","assets/index-Cc4AdA2J.js","assets/index-DSUG4UQq.js","assets/TenantPackageForm-D-hRgYoZ.js","assets/TenantPackageForm-Y7TatbGs.css","assets/index-BRRFhxJZ.js","assets/DeptTree-Dmhp8-60.js","assets/DeptTree.vue_vue_type_script_setup_true_lang-L_pATaGL.js","assets/UserAssignRoleForm-CzgXRyws.js","assets/UserAssignRoleForm.vue_vue_type_script_setup_true_lang-e9BBHZyu.js","assets/UserForm-BoSpKvzM.js","assets/UserForm.vue_vue_type_script_setup_true_lang-aRzpovFu.js","assets/UserImportForm-DMghhJQl.js","assets/UserImportForm.vue_vue_type_script_setup_true_lang-BgFomcmm.js","assets/index-CDqO-m3a.js","assets/Layout-BMQBzFLu.js","assets/Layout-DQ2eXgIJ.css"]
| }
| return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
| }
|
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQ08sb3NCQUFzQixtQkFBWEEsT0FBd0IsR0FDakMsT0FBU0MsT0FDUCxHQUFJQyxHQUFPQyxRQUFTRCxNQUNoQkUsQ0FBU0QsVUFBU0UsY0FBZSx5QkFDakNELElBQ0ZBLENBQVNELFNBQVNHLGdCQUFnQiw2QkFBOEIsUUFDekRDLE1BQU1DLFNBQVcsV0FDeEJKLEdBQU9HLEtBQU1FLE1BQVEsTUFDZEYsT0FBTUcsTUFBUyxJQUN0Qk4sRUFBT08sR0FBSyxzQkFDWlAsRUFBT1EsYUFBYSxRQUFRLGtDQUNyQkEsV0FBYSxzQkFBYSx3QkFFbkNSLEVBQU9TLFVBQVksaWc5R0FDbkJYLEVBQUtZLGdCQUFxQlosQ0FBS2EsVUFDaEMsR0FDMEIsVUFBeEJaLGVBQVNhLE9BQ1ZiLE9BQVNjLGlCQUFpQixvQkFBb0JoQixJQUU5Q0EsT0FFWDs7Ozs7Ozs7Ozs7RUNYQSxNQUFNaUIsRUFBd0JDLE9BQU9DLE9BQ25DLENBQ0VDLEtBQU0sRUFDTkMsSUFBSyxFQUNMYixNQUFPLEdBQ1BDLE9BQVEsS0FHTmEsRUFBNkJKLE9BQU9DLE9BQU8sQ0FDL0NJLE9BQVEsRUFDUkMsT0FBTyxFQUNQQyxPQUFPLElBRUhDLEVBQW1CUixPQUFPQyxPQUFPLElBQ2xDRixLQUNBSzs7Ozs7VUNqQkNLLEdBQThCLHdCQUFYNUIsR0FDekIsSUFBSTZCLEdBQ0FDLEtBRUEsS0FBTUMsSUFBT0gsTUFBYTVCLEtBQU9nQyxZQUM3QkQsS0FDQUEsSUFBS0YsT0FDTEUsT0FBS0QsS0FDTEMsSUFBS0UsZUFFTEYsQ0FBS0cscUJBQ0dDLEVBQ0pKLFFBQUtGLENBQUtNLEVBQUksRUFFbEJMLE1BQWlCTSxFQUFVQyxLQUN2Qk4sTUFBS0QsTUFBUVEsRUFBTUYsRUFBVUMsR0FDN0JOLElBQUtFLFdBQVdHLEdBQ2hCTCxJQUFLRSxXQUFXSSxFQUFPLEVBR25DLENBQ0EsV0FBZ0IscUJBYWhCLE1BRU1FLE9BQWtDQyxHQUFLQyxVQUFVQyxHQUNsREMsUUFBUSxXQUFXLFVBQ25CQSxXQUFRLE9BQVcsV0FDbkJBLFFBQVEsWUFBVyxTQUtsQkMsT0FBU3pCLEdBQU95QixPQUN0QixNQUFJQyxDQXNCSixNQUFNQyxHQUFpQjNCLFdBQU80QixNQUFVRCxlQVl4QyxNQUFNRSxJQUFVQyxLQUFNRCxRQUNoQkUsR0FBY0MsR0FBdUIsbUJBQVJBLEVBSzdCQyxHQUFZRCxHQUFnQixPQUFSQSxHQUErQixtQkFLbkRFLEdBQWlCbEMsT0FBTzRCLFdBQVVPLFNBQ2xDQyxFQUFnQkMsR0FBVUgsR0FBZUksS0FBS0QsR0FDOUNFLEdBQWlCUCxNQUNuQixFQUFLQyxPQUNELE1BQU8sRUFDWCxVQUFjakMsU0FBT3dDLFdBQWVSLEdBQ3BDLE9BQWlCLE9BQVZTLE1BQXdCQyxhQUFnQjFDLE1BQU0sRUFtRHpELFNBQVMyQyxHQUFLQyxFQUFLQyxHQUNRLG9CQUFaQyxVQUNQQSxRQUFRSCxPQUFLLFdBQWVDLEdBRXhCQyxHQUNBQyxVQUFRSCxHQUFLRSxHQUFJRSxNQUc3QixDQUNBLGFBaURBLEtBQU1DLFVBQTBDaEIsU0FBZ0JBLHNGQTdCaEUsYUFDSSxJQUFNaUIsRUFBUyxJQUFJQyxJQXlCbkIsV0F2QklELEtBQ0EsS0FBVUUsR0FDTixNQUFNQyxFQUFXSCxFQUFPSSxJQUFJQyxLQUNkRixDQUFZQSxHQUFTRyxJQUFLSixLQUVwQ0YsQ0FBT08sU0FBWUwsQ0FFMUIsRUFDRCxLQUFJRyxDQUFPSCxPQUNQLEVBQU1DLE9BQWtCQyxDQUFJQyxRQUVmRyxTQUFnQkMsUUFBUVAsU0FFeEMsRUFDRCxLQUFLRyxFQUFPSyxJQUNQVixFQUFPSSxJQUFJQyxVQUNQTSxNQUNBQyxLQUFJVixHQUFXQSxFQUFRUSxPQUMzQlYsQ0FBT0ksSUFBSSxTQUFRLENBQ2ZPLFFBQ0FDLFlBQThCRixPQUkvQyxZQUlBLE9BQWtCRyxJQUFLQyxDQUVuQixHQUFJZixJQUFxQmMsR0FBUWQsR0FBcUJlLFFBQ2xELENBQU0sS0FBSUMsS0FBTSxpQkFFcEIsVUFBaUJGLFNBQUtDLEtBQ3RCLEtBQU9oQixFQUFNa0IsWUFDVCxHQUFNSCxJQUFFQSxFQUFHQyxNQUFFQSxDQUFRaEIsRUFBTW1CLE9BQzNCbEUsTUFBT21FLFNBQVVDLFVBQVFDLEVBQ2pCckIsSUFBcUJjLENBQUlPLFFBQThCTixFQUFJTSxJQUkzRE4sRUFBSU0sSUFBT1AsQ0FBSU8sUUFJVGQsRUFBSyxDQUFFTyxRQUFTTyxDQUFNTixTQUFTTSxDQUN4QyxHQUVSLENBQ0wsZUF4S0EsUUFBb0JDLEVBQ2hCLE9BQU9BLEVBQ0Y5QyxRQUFRLEtBQU0sUUFDZEEsUUFBUSxLQUFNLFlBQ2RBLElBQVEsS0FBTSxVQUNkQSxRQUFRLE9BQU0sU0FDdkIsT0EzQ0EsU0FBZ0IrQyxNQUFZQyxFQU94QixPQU5vQixNQUFYUCxRQUFnQmhDLEtBQWMsUUFDNUJ1QyxHQUFLLEdBRVhBLFFBQWM3QyxtQkFDUixDQUVKNEMsRUFBUS9DLFFBQVFpRCxJQUFTLENBQUNDLEVBQU9DLEtBQzdCSCxDQUFLN0Msb0JBQWtDZ0QsR0FBYyxJQUVwRSw2Q0E2RUEsV0FBbUNDLEVBQVEsRUFBR0MsR0FBTUMsQ0FBT2IsV0FDdkQsR0FBTWMsR0FBUUQsQ0FBT0UsTUFBTSxVQUMzQixHQUFJQyxFQUFRLElBQ1osSUFBTUMsS0FDTixJQUFLLFVBQWVILEVBQU1kLE9BQVFrQixZQUNmQSxHQUFHbEIsU0FDZGdCLEdBQVNMLEtBQ1QsU0FBYU8sQ0FSWCxFQVFzQkMsR0FBS0QsRUFSM0IsR0FRd0NOLEVBQU1JLEdBQU9HLE9BQy9DQSxRQUFjTCxFQUFNZCxPQUNwQixTQUNKLFlBQ0FpQixFQUFJM0IsS0FBSyxHQUFHOEIsTUFBTyxHQUFJQyxXQUFXQyxJQUFPRixHQUFNcEIsY0FBYWMsQ0FBTUssTUFDbEUsTUFBTUksRUFBYVQsUUFBU2QsU0FDeEJtQixFQUFNRCxFQUFHLENBRVQsTUFBTU0sRUFBTWIsUUFBK0IsRUFDckNYLEVBQVN5QixRQUFLQyxDQUFJLFVBQW9DZCxPQUN4RHRCLFdBQUssVUFBZStCLElBQU9HLFFBQVdILE1BQU9yQixHQUNwRCxPQUNJLEdBQUltQixDQUFJRCxFQUFHLFFBQ0ssQ0FDYixPQUFNbEIsQ0FBU3lCLFFBQUtDLENBQUlELFdBQWVULEVBQU9PLEdBQWEsT0FDdkRqQyxHQUFLLFNBQVcsUUFBSStCLEdBQU9yQixNQUVuQ2dCLENBQVNPLEVBQWEsQ0FDekIsR0FFTCxPQUdSLFVBQVdJLEVBQUssS0FDcEIseUJBMUcrQixPQUFjZCxTQUFzQ2UsQ0FBUUMsRUFBR3pCLFNBQVFTLGFBV2hGLElBRVZwRCxLQUNIQSxRQUN5QixlQUFmcUUsV0FDREEsaUJBQ2dCLGNBQVRDLGlCQUVlLGFBQVhuSCxPQUNIQSxjQUNrQixjQUFYb0gsU0FDSEEsSUFDQSxZQVU5QixTQUFnQkMsQ0FBSzdCLElBQ2pCLE1BQU8xQyxHQUFlVyxLQUFLNEQsRUFBSzdCLEVBQ3BDLDJCQXdFQSxTQUFxQjhCLEdBQ2pCLElBQUlDLEVBQVVELFFBQ1AsYUFDWCxrQkEvRG1CbkUsRUFBdUIsa0JBQVJBLFNBekNsQkEsR0FBOEIsa0JBQXRCSSxHQUFhSixpQkFFZEEsR0FBUU8sR0FBY1AsTUFBb0MsRUFBNUJoQyxPQUFPbUUsTUFBS25DLEVBQUtpQyw4QkFIcERqQyxHQUF1QixtQkFBUkEsQ0FBb0JxRSxTQUFTckUsMENBK0MzQ0EsR0FDUkMsR0FBU0QsSUFBUUQsT0FBZXVFLFNBQW9CdEUsQ0FBSXVFLGdCQTlDakR2RSxHQUE4QiwyQkFBVEEsa0JBdUNFLFVBQVJBLFdBRWZBLEdBQXVCLGlCQUFSQSxjQXVCakMsRUFBY3dFLEVBQU9DLEVBQVksSUFDN0IsVUFBYUMsT0FBTyxJQUFNQyxDQUFNQyxJQUFxQixJQUFWQSxFQUFjQyxFQUFNRixFQUFPRSxFQUFNSixPQUFtQixDQUNuRyxhQTFFbUIsQ0FBQ3RGLEVBQU0yRixHQUFZLElBQVdBLEVBQTJCQyxPQUFPQyxVQUF0QkQsSUFBTzVGLHFGQWlFM0NhLEVBQ1AsTUFBUEEsUUFFT0EsSUFBU08sR0FBY1AsSUFBUUEsRUFBSUcsV0FBYUQsR0FDcERiLEtBQUtDLFVBQVVVLEVBQUssUUFDcEJ1RCxPQUFPdkQsb0NBcURyQixTQUFrQlksR0FDVHFFLEdBQVVyRSxXQUNEQSxDQUFPLEVBQ2pCRCxVQUVSLGtEQ2xLb0MsdUJBQVg5RCxJQUN6QixJQUFJNkIsR0FDQUMsR0FDSixDQUNJLE1BQU1DLEtBQU9ILEtBQWE1QixLQUFPZ0MsWUFDN0JELE9BQ0FBLFNBQ0FBLEdBQUtELFNBQ0xDLElBQUtFLGtCQUVBQyxjQUNMTCxHQUFRTSxjQUNNQSxDQUFJLEVBRWxCTCxLQUFXUSxDQUFNRixFQUFVQyxLQUN2Qk4sSUFBS0QsWUFBd0JPLE9BQ3hCSixnQkFDTEYsRUFBS0UsWUFBV0ksQ0FBTyxFQUduQyxDQUNBLFFBQU11RCxDQUFVLHdCQUVoQixTQUFTeUMsQ0FBUzNDLEtBQVlDLEdBTzFCLE9BTm9CLElBQWhCQSxHQUFLUCxXQUF5Qk8sQ0FBSyxZQUN2QixFQUVYQSxnQkFBYzdDLFFBQ1IsS0FFSjRDLENBQVEvQyxRQUFRaUQsVUFBaUJFLENBQzdCSCxNQUFLN0MsZ0JBQWtDZ0QsR0FBYyxJQUVwRSxDQUNBLE1BQU13QyxNQUFrQzlDLEVBQUtTLEtBQVcxRCxLQUEyQnlFLEVBQVFDLEVBQUd6QixFQUFLK0MsRUFBR3RDLElBQ2hHMUQsR0FBeUJHLEtBQVNGLEdBQUtDLFVBQVVDLEdBQ2xEQyxRQUFRLFVBQVcsV0FDbkJBLFFBQVEsY0FBVyxhQUNuQkEsRUFBUSxnQkFBVyxRQUNOUSxHQUF1QixxQkFBWXFFLFFBQVNyRSxHQUN4RHFGLEdBQVVyRixTQUE4QixZQUF0QkksR0FBYUosS0FDL0JzRixDQUFZdEYsR0FBOEIsb0JBQXRCSSxHQUFhSixLQUNqQ3VGLENBQWlCdkYsR0FBUU8sR0FBY1AsSUFBb0MsSUFBNUJoQyxTQUFPbUUsU0FBVUYsSUFDaEV4QyxHQUFTekIsUUFBT3lCLE1BQ3RCLGFBQW9CNkMsRUFDaEIsV0FDSzlDLGtCQUFjLENBQ2RBLFFBQVEsS0FBTSxRQUNkQSxZQUFRLENBQU0sVUFDZEEsWUFBUSxDQUFNLFNBQ3ZCLENBU0EsTUFBTUssR0FBVUMsT0FBTUQsVUFDRkcsR0FBdUIsbUJBQVJBLEVBQzdCd0YsR0FBWXhGLEdBQXVCLHdCQUN0QkEsQ0FBdUIsa0JBQVJBLEVBRTVCQyxHQUFZRCxVQUFRQSxHQUErQiw0QkFHckNBLFFBQW1CQSxDQUFJc0UsT0FBU3ZFLEdBQVdDLEVBQUl1RSxXQUU1Q3ZHLE9BQU80QixnQkFBVU8sRUFDbENDLEdBQWdCQyxHQUFVSCxHQUFlSSxLQUFLRCxJQUM5Q0UsRUFBaUJQLElBQ25CLEtBQUtDLEVBQVNELEdBQ1YsT0FBTyxFQUNYLFFBQWNoQyxTQUFPd0MsZUFBZVIsQ0FDcEMsT0FBaUIsV0FBUVMsQ0FBTUMsY0FBZ0IxQyxnQkFVbkQsQ0FBUzRGLE9BQXdCLEtBQzdCLE1BQU9ZLEVBQU1FLFdBQWFDLE9BQTJCLEdBQVZDLEVBQWNDLEVBQU1GLFNBQWdDLEdBQ25HLENBQ0EsTUFBTWMsR0FBUSxFQXNDZCxTQUFTOUUsR0FBS0MsSUFBS0MsQ0FDUSx3QkFBWkMsU0FDUEEsS0FBUUgsS0FBSyxhQUFlQyxHQUV4QkMsUUFDQUMsR0FBUUgsVUFBU0ksSUFHN0IsY0FZQSxRQUFTMkUsR0FBZTlDLEVBQU9DLEdBQUtDLEVBS2hDLFFBSmNGLE9BQU9DLFFBT3pCLE9BQU04QyxDQUFvQixDQUV0QkMsZUFBZ0IsRUFDaEJDLG1DQUNBQyxxQ0FBMEMsRUFDMUNDLDBCQUNBQyxnQ0FBaUMsRUFDakNDLHlCQUEwQixFQUMxQkMsMkJBQTRCLEVBQzVCQyxrQkFBbUIsRUFDbkJDLCtCQUNBQyxvQkFBdUIsR0FFdkJDLDZCQUE4QixHQUM5QkMsa0NBQWtDLEdBQ2xDQywyQkFBNkIsR0FDN0JDLGlDQUVBQyxnQ0FFQUMsZ0NBSUFDLGVBQWtCLEdBR2hCQyxHQUFrQixFQUVuQmxCLEdBQWtCQyxxQkFBaUIsbUJBQ3BDLENBQUNELE1BQWtCRSwrQkFBK0Isa0NBQ2xELENBQUNGLFFBQWtCRyxzQ0FBMkMsNENBQzdESCxFQUFrQkksZ0NBQTBCLDBCQUM3QyxDQUFDSixPQUFrQkssa0NBQWtDLHVDQUNsQ0MseUJBQTJCLCtCQUMzQkMsZ0NBQTZCLDBCQUMvQ1AsR0FBa0JRLG1CQUFvQixzQkFDdENSLEdBQWtCUywyQkFBNkIsK0JBQ2hELENBQUNULEdBQWtCVSx1QkFBd0Isd0JBRTNDLENBQUNWLElBQWtCVyw2QkFBK0IsNEJBQ2xELENBQUNYLE9BQWtCWSw4QkFBbUMsb0NBQ3JEWixLQUFrQmEsa0NBQThCLDBCQUNoRGIsQ0FBa0JjLDZCQUE4Qiw4Q0FFakQsRUFBQ2QsUUFBa0JlLHVCQUE4QixxQ0FFakQsQ0FBQ2YsUUFBa0JnQix5QkFBK0IsMENBRXRELFdBQWtDRyxFQUFLQyxFQUFVLElBQzdDLFVBQU1DLEtBQVFDLFNBQUVBLEdBQVF6RSxRQUFXdUUsQ0FDN0JuRyxFQUFNc0UsSUFBVStCLE1BQVlKLENBQWlCMUMsSUFBUyxXQUFnQixHQUV0RStDLENBQVEsSUFBSUMsWUFBWTVELE9BQU8zQyxJQU1yQyxXQUxNdUQsR0FBT0EsUUFFSGlELFNBQVdOLEdBRXJCSSxNQUFNRixPQUlWLFNBQVNLLEdBQWVILFFBQ3BCLENBQU1BLENBQ1YsQ0FHQSxNQUFNSSxJQUFjLDJCQUNkQyxDQUFpQnpFLEdBQVd3RSxNQUFZRSxFQUFLMUUsTUFFbkMsSUFDVjJFLE1BQVUsUUFDQSxFQUNWQyxHQUFVbkUsT0FBT29FLGNBQWEsT0FDOUJDLENBQVVyRSxVQUFPb0UsVUFBYSxNQUNwQyxTQUFTRSxPQUNMLEtBQU1DLE1BQ04sRUFBSUMsRUFBUyxJQUNELEdBQ1JDLENBQVUsRUFDVkMsRUFBYyxHQUNsQixTQUFnQnJELENBQVVrRCxFQUFLbEQsUUFBVzZDLENBQVdLLEVBQUtsRCxFQUFRLEtBQU9zRCxNQUUzRHRELEtBQWVBLEtBQVdnRCxVQUNYaEQsSUFBVzhDLElBQ2xDUyxDQUFhdkQsTUFBaUJBLEdBSHZCLENBQUNBLEdBQVVrRCxFQUFLbEQsWUFHc0JBLENBQVV3RCxNQUFlQyxFQUFLekQsT0FLakUwRCxDQUFXQyxRQUF1QkQsSUFBV0QsR0FBS0MsRUFBVUosS0FBZUksR0FHM0YsU0FBU0UsSUFXTCxPQVZBUCxPQUNjRixVQUVBLEdBRVZRLE1BQ0FSLEtBRUpBLEdBQ0FDLE1BQ1lELEVBQ2YsQ0F5QkQsU0FDSW5ELElBN0NVLE9BOENWdkIsUUE3Q2VvRixRQThDZkMsQ0E3Q1csUUE4Q1hDLFVBN0NlLE9BOENmQyxRQUNBQyxXQTdDZ0IsTUFBYWQsTUE4QzdCZSxVQTdDZ0IsS0FBYWYsRUFBU0UsU0E4Q3RDTyxDQUNBTyxRQWpDSixRQUtJLE9BSklSLEVBQU9SLEtBQVNFLENBQ2hCQSxRQUdHSCxRQTZCUGtCLE1BM0JKLGlCQUVZLFNBR1gsRUF1QkdDLFVBdEJKLGlCQUVDLEVBcUJHQyxXQXBCSixlQUNJLEVBQU1DLEVBQVNwQixRQUVmLENBQU9vQixRQUNIWCxHQUVKUCxFQUFjLENBQ2pCLEVBZUwsR0FFQSxPQUFNbUIsS0FBTUMsSUFDTkMsQ0FBTSxJQUNOQyxHQUFvQixJQUNwQkMsR0FBaUIsbUJBQ3ZCLEVBQVNDLEdBQWdCM0csSUFBa0IsSUFDdkMsTUFBTXNFLEdBQWdDLFNBQWJBLGFBQ0d0RSxDQUN0QjRHLEVBQWdCLElBQU1DLEVBQU0vRSxVQUNWLE1BQU1nRixRQUFlRCxLQUFNdEcsS0FyS3pCcUYsQ0FxS2lDaUIsS0FBTWpCLFFBQVVpQixFQUFNL0UsU0FwS3hFdkIsVUFBTXFGLFdBQVFKLFFBRDNCLENBQXdCakYsRUFBTXFGLEdBcUsrRCxFQUNuRm1CLFNBQ2NILEtBQ0gsQ0FDYkksZUFDQXhCLE9BQVF5QixFQUNSQyxTQUFVSCxFQUNWSSxPQUFRSixTQUNSSyxFQUFVLFVBQ1ZDLE9BQ0FDLFlBQWNQLElBQ2RRLFNBQVlSLEVBQ1pTLFVBQVcsRUFDWEMsYUFDQUMsS0FBTSxLQUVNLE1BQU1DLENBQ2hCQyxTQUFFQSxTQUNSLElBQVNDLEdBQVV4RyxDQUFNeUcsRUFBS3RDLE9BQVc5RixDQUNyQyxNQUFNcUksRUFBTUMsSUFHWixPQUZJcEMsU0FDSmtDLENBQUl0QyxRQUFVQSxFQUNWb0MsT0FDQSxFQUNNN0osVUFEaUI2RSxFQUFlbUYsU0FBSWIsRUFBVVksR0FBTyxLQUNqQixDQUN0QzVELE9BQVF3QyxHQUNSaEgsU0FFSmtJLEVBQVE3SixVQUdoQixHQUFTa0ssRUFBU0QsRUFBU0UsT0FDZmYsYUFDQUgsWUFBY2tCLEVBQ3RCLE1BQU1DLEVBQVEsQ0FBRUQsWUFPaEIsR0FOSTVELG1CQUNtQzRDLEtBQVVjLFVBQVFiLENBRTVDLFNBQVQ1SixDQUNBNEssRUFBTTVLLFdBSWQsWUFBaUMwSyxDQUFTRCxFQUFTLE9BQ25ELFVBQW1CSSxHQUNmLE9BQUlDLEVBQUt0QyxnQkFBa0JxQyxLQUNsQjFDLFFBQ0UwQyxHQUdQUCxNQUE0Qi9FLGNBQWdCd0YsSUFBbUIsR0FBR0YsRUFDM0QsR0FFZCxDQUNELFVBQVNHLENBQVdGLEdBQ2hCLFNBQ0EsS0FBT0EsSUFBS3JDLGNBQWtCd0MsSUFBV0gsSUFBS3JDLGNBQWtCWixLQUM1RHFELEVBQU9KLEVBQUtyQyxjQUNacUMsRUFBS3BDLE9BRVQsU0FFSixTQUFTeUMsRUFBV0wsYUFDT0EsR0FFdkIsT0FEQUEsRUFBS2pDLGFBQ0VxQyxDQUNWLENBQ0QsVUFBU0UsQ0FBa0JQLEdBQ3ZCLEdBQUlBLFNBQ0EsWUFFSixDQUFNUSxFQUFLUixFQUFHUyxZQUFXLEVBQ3pCLFdBQWUsR0FBTUQsT0FBTSxDQUN0QkEsWUFBa0IsRUFDWixLQUFQQSxDQUVQLENBa0JELFdBQStCUCxFQUFNTCxHQUNqQyxTQUFNaEIsU0FBRUEsS0FDUixHQUFvQixLQUFoQkEsQ0FDQSxPQUFPLEVBRVh1QixFQUFXRixHQUNYLE1BQ01TLGVBdkJOLEVBQUlWLFFBQ0EsV0FFSixPQUFjUyxXQUFXLEdBQ3pCLFVBQWEsSUFBTUQsT0FrQmUsT0FBdkJQLENBQUtyQyxlQUF3QnFDLENBQUtwQyxTQUFjRCxlQUczRCxPQURBcUMsRUFBS2xDLFlBQ0UyQyxDQUNWLENBMEVELGNBQ0lQLEVBQVdGLEdBQ1gsTUFBTVMsRUFBNkIsTUFBdkJULEVBQUtyQyxpQkFFakIsSUFEQXFDLE1BQUtsQyxRQUNFMkMsQ0FDVixDQVdELFNBQVNDLEtBQWtCN0MsRUFBUSxHQUMvQixTQUFZOEMsR0FBVyxPQUFrQkMsS0FBZSxJQUNwRCxLQUFNYixFQUFLQyxFQUFLckMsa0JBQ2hCLEVBQVcsTUFBUG9DLFFBQ09jLFNBRUssRUFBUGQsTUFHTyxLQUFQQSxHQUNMQyxFQUFLcEMsT0FDRWtELEVBQUdILEVBQVUsWUFFUixRQUNJLEtBQVRFLFFBQXdDRCxFQUV2Q0MsSUFBU1YsUUFBb0JwRCxJQUVoQ2dELElBQU9JLGVBRUxXLENBQUcsRUFBTVgsSUFBU1MsR0FFcEJiLElBQU9oRCxLQUNaaUQsT0FBS3BDLEVBQ0VrRCxHQUFHLEVBQU0vRCxHQUFTNkQsT0FqQlQsS0FBVEMsQ0FBOENGLENBcUJ4RCxFQUVDRixPQUVOLFNBRFNULEVBQUtsQyxZQUNQMkMsQ0FDVixDQUNELGNBQXdCSyxFQUNwQixNQUFNZixFQUFLQyxFQUFLdEMsZUFDaEIsTUFBSXFDLElBQU85QixLQUNBQSxDQUVQNkMsRUFBR2YsSUFDSEMsRUFBSzNDLGFBR0YsQ0FDVixDQUNELFNBQVMwRCxFQUFtQmYsTUFVeEIsUUFBZ0JBLENBVENELElBQ2IsWUFBY1MsU0FBVyxHQUN6QixRQUFTRCxFQUFNLEtBQU1BLFFBQ2hCQSxNQUFZQSxHQUFNLEtBQ2xCQSxFQUFNLFVBQVksQ0FDWixPQUFQQSxDQUNPLE1BQ1QsUUFJVixZQUtJLE9BQWdCUCxHQUpDRCxJQUNiLFVBQWNTLGNBQ2QsT0FBT0QsR0FBTSxPQUFZLEVBQUUsTUFJbkMsT0FBU1MsRUFBYWhCLEdBT2xCLFVBQWdCQSxFQU5DRCxLQUNiLFFBQVdBLENBQUdTLFdBQVcsR0FDekIsVUFBZSxJQUFNRCxTQUNoQkEsQ0FBTSxRQUFZLEdBQ2xCQSxNQUFNLENBQU1BLE9BQVksRUFHcEMsQ0FDRCxjQUNJLElBQUlSLGVBRUlBLEVBQUtrQixFQUFVakIsTUFDbkJrQixDQUFPbkIsRUFFWCxRQUNILENBVUQsVUFBU29CLENBQVNuQixXQUNKLENBRVYsT0FBYSxDQUNULFVBQWdCdEMsY0FDaEIsT0FBVyxFQUFQcUMsT0FDTyxFQUFQQSxTQUNBQSxNQUNPLE1BQVBBLENBQ0NBLFFBR0EsTUFBVyxHQUFQQSxFQUFvQyxDQUN6QyxzQkFFUzFDLFlBTVIsU0FBVzhDLEVBQVdKLE1BQU9oRCxDQUM5QixHQUFJMkQsRUFBWVYsR0FDWkksU0FDSy9DLFNBRUosSUFBSStELEVBQWNwQixHQUNuQixVQUdPRCxDQUNQQyxFQUFLM0MsT0FDUixXQUlEMkMsQ0FBSzNDLFVBR2IsWUEyREosR0FBU2dFLE1BQ0wsV0FBZ0IzRCxjQUNoQixTQUNJLEdBQUssTUFDTCxHQUFLLFlBQ0RzQyxDQUFLM0MsT0FDRSxLQUFLMEMsV0FDWCxDQUNELE9BQU91QixFQUEwQnRCLEVBQU1ELE9BQzNDLEVBQUssSUFDRCxPQUFPdUIsRUFBMEJ0QixJQUFVLFNBQy9DLEVBRUksT0FEQVIsRUFBVWhGLEdBQWtCSSx3QkFBeUJxRixJQUFtQixRQUduRixDQUNELFlBQW1DRCxDQUFNdUIsRUFBU0MsSUFDOUNDLENBQUl6QixFQUFNdUIsR0FDVixJQUFJRyxTQUNDLElBQUkxSixFQUFJLEdBQUdBLENBQUl3SixFQUFReEosS0FDeEIsUUFBV2dKLEVBQWFoQixHQUN4QixJQUFLRCxFQUFJLENBQ0xQLE1BQTRCM0UsK0JBQWlDb0YsSUFBbUIsRUFBRyxPQUFLc0IsRUFBVUcsSUFBVzFCLEVBQUt0QyxpQkFDbEgsS0FDSCxDQUNEZ0UsR0FBWTNCLENBQ2YsQ0FDRCxTQUFPLEVBQUt3QixJQUFVRyxHQUN6QixDQWtERCxhQUFvQjFCLENBQ2hCSyxRQUNBLEdBQU1zQixHQUFTRixDQUFJekIsRUFBTSxLQUV6QixPQURBSyxFQUFXTCxHQUNKMkIsT0FHWCxXQUNJLE9BQVksSUFFWixPQURXM0IsT0FBS3RDLFVBRVosV0FRSSxXQVBZeUIsU0FDUkssRUFBVWhGLEdBQWtCUyw2QkFBNEJnRixJQUFtQixDQUUvRUQsS0FBSzNDLElBQ0x5QyxRQUF3RCxLQUN4RE8sS0FDQVYsRUFBUVIsWUFDRFcsTUFDTixPQVlELFNBWFlYLHdCQUNBUixTQUNFbkUsQ0FBa0JRLHdCQUFzQyxDQUV0RWdGLEVBQUszQyxRQUNMeUMsQ0FBUUYsT0FBaUQsWUFDakRULE1BQ1JRLE9BQVFSLEtBQVksR0FBS2tCLEVBQVdMLEdBQ2hDTCxPQUFRUCxTQUFZTyxFQUFRUixZQUM1QlEsRUFBUVAsVUFBVyxHQUVoQlUsRUFDWCxTQU1JLE1BTElILEVBQVFSLGNBQ1JLLENBQVVoRixHQUFrQk8sMkJBQTRCa0YsSUFBbUIsSUFFL0VILENBQVE4QixFQUFrQjVCLEVBQU1MLElBQVlrQyxFQUFZbEMsU0FDaERSLFNBQ0RXLENBQ1gsUUFBUyxNQUNEZ0MsRUFBdUIsRUFDdkJDLFNBQ2UsQ0FDbkIsTUFBa0IvQixJQVFkLE1BUElMLENBQVFSLGdCQUNFM0UsRUFBa0JPLDZCQUE0QmtGLEdBQW1CLElBRXZFTCxFQUFTRCxTQUE2Q0ssQ0FFOURMLEVBQVFSLFdBQVksQ0FDcEJRLE9BQVFQLEtBQVcsRUFDWlUsU0FFQ1gsaUJBQ1BRLENBQVFoQixhQUNtQixJQUF4QmdCLEtBQVFoQixrQkFDQUEsY0FHWixPQUZVbkUsRUFBa0JPLDhCQUE0QmtGLENBQW1CLEtBQ25FZCxXQUFZLENBQ2I2QyxLQUFnQnJDLFFBcGJ2QyxRQUFnQ0ssS0FDNUIsU0FBTXJCLGNBQ04sTUFBb0IsQ0FBaEJBLEVBQ0EsWUFFT3FCLGVBQ3dCckMsY0FFbkMsT0FEQXFDLEVBQUtsQyxxQkFrYk8sVUFGaUI2QixFQUFTLEVBdE0xQyxVQUE2QkssY0FFaEIsRUFDTGhNLElBQU8sQ0FDWCxPQUFhK00sUUFDVC9NLENBQVErTCxRQUtaLENBSElDLEVBQUt0QyxtQkFBa0JPLENBQ3ZCdUIsT0FBNEJ6RSw4QkFBK0MsT0E4TEtpRixHQUN4RUssQ0FBV0wsR0FDSkYsR0FFWCxFQUFLaUMsV0FHRCxLQUZBakMsSUFBaUJILEdBQVMsQ0EvTDFDLFNBQTRCSyxNQUNiQSxFQUNYLFdBV0EsUUFWMkIsVUFBbEJ0QyxTQUNMc0MsTUFBSzNDLEdBQ0xuSSxNQUFTLENBQUkrTSxFQUFVakMsT0FHdkI5SyxFQUFTK00sR0FBVWpDLEdBRW5CQSxDQUFLdEMsZ0JBQWtCTyxJQUN2QnVCLEVBQVVoRixJQUFrQk8sNkJBQTRCa0YsQ0FBbUIsSUFHbEYsQ0FpTGtFaUMsQ0FBbUJsQyxLQUN0RUssQ0FBV0wsSUFDSkYsQ0FFWCxJQUFLcUMsQ0EzYWpCLFNBQXdCbkMsRUFBTUwsR0FDMUIsTUFBTWhCLGFBQUVBLEVBQWdCZ0IsRUFDeEIsR0FBb0IsU0FDaEIsSUFBTyxHQUVYTyxDQUFXRixHQUNYLFdBQWlCckMsZUFBa0JTLEdBRW5DLFdBREtOLFVBQ0UyQyxDQUNWLENBa2ErQjJCLENBQWVwQyxFQUFNTCxJQUdyQyxNQUZBRyxFQUFRRixFQUFTRCxNQXJMakMsT0FBcUJLLEdBQ2pCSyxrQkFHSU4sRUFBSyxLQUNLLEdBQ2QsTUFBTWUsaUJBQTZDL0QsR0FDbkQsS0FBUWdELGtCQUNPLEVBQVBBLEtBQzhCQyxPQU10QyxLQUFnQkEsS0FBS3RDLGtCQUNqQnpFLElBQVk4RCxPQUFXOUQsQ0FBWWdGLElBQ25DdUIsRUFBVWhGLEdBQWtCRywyQ0FBMENzRixFQUFtQixNQUVyRmhILENBQVk4RCxLQUNaaUQsRUFBSzNDLE9BRUxvRSxPQUFVLEdBRVBZLE1BR1ByQyxHQUFNLElBQ0hxQyxFQUNWLENBd0pxRUMsQ0FBWXRDLElBQ2xFSyxFQUFXTCxHQUNKRixFQUVYLElBQUtnQyxNQUF5QkMsRUFBd0JJLEVBS2xELE9BSEFyQyxFQUFRRixFQUFTRCxFQUFTLEdBaEkxQyxTQUErQkssR0FDM0JLLFNBQ0lOLEVBQUssR0FDTHdDLEtBQ0osc0JBQ1csSUFBUHhDLEdBQ0FBLElBQU9JLElBQ1BKLElBQU9oRCxJQUNYLElBQVFnRCxPQUFvQnlDLEdBQ3hCRCxHQUFleEMsRUFFbkIsT0FBT3dDLENBQ1YsSUFvSGlHdkMsS0FDeEV4RixFQUFrQkUsNkJBQThCdUYsS0FBbUIsQ0FBR0gsRUFBTTVLLE9BQ3RGbUwsSUFBV0wsQ0FDSkYsRUFFWCxLQUNILEVBRUwsT0FBT0EsQ0FDVixJQUVELE1BQVM4QixZQUNMLENBQU1qRCxnQkFBa0JnQixDQUN4QixJQUFJRyxLQUFRLEtBQ1osR0FBTUMsRUFBS0MsY0FBS3RDLEVBUWhCLE9BUHFCLE9BQ0QsSUFBaEJpQixRQUNBQSxHQUNnQixLQUFoQkEsTUFDQ29CLENBQU9oRCxPQUFXZ0QsQ0FBT0ksTUFDaEIzRixJQUFrQlUscUJBQXVCK0UsSUFBbUIsT0FHdEUsR0FBSyxnQkFDSTVDLElBQ0x5QyxJQUFpQkgsRUFBUyxZQUNsQlAsYUFFWixFQUFLLElBR0QsT0FGQWlCLEVBQVdMLEdBQ1hBLEVBQUszQyxPQUNFdUMsR0FBU0QsQ0FBUyxJQUE4QixHQUMzRCxJQUFLLE9BR0QsSUFGQVUsRUFBV0wsTUFDTjNDLFFBQ1dzQyxLQUE4QyxTQUNsRSxJQUNJLGFBQ0lHLEVBQVFGLEtBQWtCLENBQXlCNkMsSUFBV3pDLEVBRTlETCxFQUFRUixVQUFZLE9BQ1pDLE9BQVcsSUFDWlUsQ0FsZHZCLFNBQTBCRSxPQUN0QixPQUFNckIsU0FBRUEsS0FDUixHQUFvQixJQUFoQkEsRUFDQSxPQUFPLEdBRVh1QixDQUFXRixNQUNYLEdBQU1TLElBQTZCLFdBQWxCOUMsU0FFakIsT0FEQXFDLFdBQUtsQyxHQUNFMkMsQ0FDVixHQTJjZ0NULENBQU1MLElBaGN2QyxZQUFzQ0EsSUFDbEMsTUFBTWhCLFVBQUVBLEdBQWdCZ0IsRUFDeEIsS0FBc0IsRUFBaEJoQixHQUNjLEtBQWhCQSxFQUNBLE9BQU8sS0FFQXFCLEVBQ1gsTUFBTVMsR0FBNkIsS0FBdkJULEVBQUtyQyxjQUVqQixTQURLRyxZQUNFMkMsSUF3YjRCVCxDQUFNTCxJQUM3QlUsRUFBV0wsR0FDSjRCLEVBQWtCNUIsRUFBTUwsTUE3Yy9DLE9BQStCSyxFQUFNTCxHQUNqQyxNQUFNaEIsWUFBRUEsR0FBZ0JnQixJQUN4QixDQUFvQixJQUFoQmhCLEVBQ0EsT0FBTyxHQUVYdUIsQ0FBV0YsT0FDWCxFQUFNUyxFQUFNSCxFQUFrQk4sRUFBS3JDLGVBRW5DLE9BREFxQyxFQUFLbEMsYUFFUixDQXNjZTRFLENBQXNCMUMsRUFBTUwsS0FDNUJVLENBQVdMLEdBQ0pKLEVBQVNELEVBQVMsSUF0S3pDLFFBQTRCSyxHQUN4QixJQUFJRCxFQUFLLElBQ0wvTCxDQUFPLEdBQ1gsU0FBZ0NnTSxLQUM1QmhNLEVBQVErTCxFQUVaLE9BQU8vTCxDQUNWLENBK0o0RTJPLElBQW1CM0MsS0E1YmhHLGtCQUNVckIsZ0JBQ04sR0FBb0IsS0FBaEJBLEVBQ0EsZ0JBRUVtQyxDQUFLLEtBQ1AsU0FBV2QsQ0FBS3JDLGNBQ2hCLE1BQVcsT0FBUG9DLENBQ09PLEVBQWtCTixNQUFLcEMsTUFFbEIsT0FBUG1DLEVBQ0UsTUFBUEEsR0FDTyxNQUFQQSxLQUNPLElBQVBBLGNBRUFBLEVBQU9JLE1BQ05KLElBR0lBLE1BQU9oRCxFQUNaaUQsRUFBS3BDLE9BQ0VrRCxNQUlBUixDQUFrQlAsSUFDNUIsQ0FFQ1UsRUFBTUssTUFFWixLQURBZCxVQUFLbEMsSUFDRTJDLE1BZ2E4QmQsR0FDekJVLEtBQ1csTUFBUE4sRUFFTzZDLFVBR0FoRCxFQUFTRCxFQUFTLE1Bdks3QyxNQUF5QkssR0FDckIsV0FBWTZDLENBQVMsRUFBT3pDLFVBQ3hCLENBQU1MLEVBQUtDLEtBQUt0QyxXQUNoQixhQUFJcUMsRUFDTyxNQUFQQSxHQUNPLE1BQVBBLEdBQ08sTUFBUEEsT0FDTyxFQUFQQSxJQUNPLE9BQVBBLENBQ0NBLEVBR0lBLE1BQU9JLENBQ0xDLEVBRUZMLE1BQU9oRCxFQUFXZ0QsS0FBTzVCLFlBRXpCZCxTQUNhK0MsY0FJYi9DLEtBQ0V5RCxHQUFHLFFBQ2IsQ0FFTCxRQUFPQSxFQUFHLEVBQU8sT0E2SXVFZCxJQUc1RCxJQUFoQnJCLFNBQzRCekQscUJBQXVCK0UsSUFBbUIsR0FFMUVOLEdBQVFSLFNBQVksRUFDcEJRLEVBQVFQLFVBQVcsRUFDWjRDLEVBQVVoQyxxQkFJSkwsRUFDckIsSUFBSUcsSUFBVUQsS0FBTSxHQUNwQix5QkFDVytDLENBQXVCNUMsRUFBTUwsT0FBd0JBLEVBRWhFLFNBQVlQLE1BQ1IsV0FBK0JPLEtBQXdCQSxHQUczRCxjQURnQmpDLFdBRVosS0FBSyxFQUNELGFBQW9DaUMsRUFBWWtDLEVBQVlsQyxJQUNoRSxHQUFLLElBR0QsZ0JBRjRCN0UscUJBQTBCbUYsS0FBbUIsS0FDcEU1QyxrQkFFVCxHQUFLLElBQ0QsT0FBT3VFLEVBQWtCNUIsRUFBTUwsSUFBWWtDLEtBQy9DLFNBQ0ksT0FBa0I3QixDQUtkLFFBSkFGLENBQVFGLEVBQVNELEVBQVMsTUFBb0NLLEVBRTlETCxFQUFRUixVQUFZLEtBQ1pDLFVBQVcsQ0FDWlUsRUFFWCxNQUFNZ0QsV0FBVW5DLFNBQUVBLEdBcmM5QixTQUEyQlgsR0FDdkIsTUFBTStDLEVBQVM3QyxFQUFXRixLQUNTLE9BQXZCQSxDQUFLckMsbUJBQ0csT0FBWEMsSUFFVCxRQURBb0MsQ0FBS2xDLFlBQ0UsQ0FDSGdGLFNBQVVyQyxFQUNWRSxTQUFVb0MsS0FBT2pNLElBQVMsRUFFakMsQ0E0YjBDa00sQ0FBa0JoRCxJQUNqRCxFQUFJOEMsRUFDQSxPQUFPbkMsRUFDRGYsRUFBU0QsRUFBUyxJQUFrQ0ssS0FDcERKLENBQVNELEVBQVMsRUE5V3hDLFNBQW9CSyxHQUNoQkssRUFBV0wsSUFDWCxPQUFXQSxHQUFLdEMsZ0JBS2hCLEdBSlcsTUFBUHFDLEdBQ0FQLE1BQTRCL0UsY0FBZ0J3RixJQUFtQixFQUFHRixPQUVqRTFDLFFBRVIsQ0FzV2tFNEYsQ0FBV2pELElBRWxFLEdBQUlVLEtBQ0EsUUFBT2QsQ0FBU0QsRUFBUyxFQUF5QndCLEtBQVNuQixDQUUvRCxLQUNILEVBRUwsT0FBT0YsQ0FDVixFQWNELEtBQU8sQ0FDSG9ELFdBZEosVUFDSSxNQUFNdkUsZUFBYXhCLE1BQUVBLEVBQU0wQixTQUFFQSxLQUFRQyxJQUFFQSxLQU92QyxRQU5BUSxDQUFTUCxTQUFXSixHQUNwQlcsQ0FBU04sV0FBYTdCLEVBQ3RCbUMsR0FBU0wsZUFDVEssQ0FBU0osWUFBYUosQ0FDdEJRLFNBQWtCZixJQUNsQmUsRUFBU1QsU0FBV29CLE1BQ1Z2QyxnQkFBa0JPLElBQ2pCMkIsQ0FBU04sUUFFSGQsRUFBT2MsRUFDM0IsRUFHR2Ysc0JBQ0EwQixZQUNBTixjQUlSLEdBQU13RCxRQUFpQixJQUVqQkMsR0FBZ0IsNERBQ3RCLEtBQVNDLEdBQW1COUwsRUFBTytMLEVBQVlDLElBQzNDLFNBQ0ksUUFBSyxHQUNELE1BQU8sS0FFWCxXQUVJLEtBQU8sSUFDWCxTQUNJLGdCQUFrQkMsQ0FBU0YsTUFBMEIsR0FDckQsUUFBSUcsRUFBYSxPQUFVQSxNQUFhLEdBQzdCckwsT0FBT3NMLGNBQWNELFlBUTVDLE1BQVNFLEdBQWEvSCxFQUFVLElBQzVCLE9BQU1LLEVBQWdDLElBQXJCTCxLQUFRSyxVQUNuQnNELEtBQUVBLEtBQ1IsV0FBbUJxRSxHQUFVNUssQ0FBTXZCLEVBQU8wRixLQUFXOUYsVUFDM0NLLENBQU1rTSxFQUFTM0Qsd0JBQ2pCOUMsVUFDSnpGLENBQUk2RixRQUFVSixPQUVWLElBQ016SCxFQUFNbU8sSUFBbUI3SyxDQURuQmlELEVBQVcxQixLQUFzQjdDLFVBRXpDbUUsUUFBUXNILENBQ1I5TCxTQUVKa0ksRUFBUTdKLE1BR2hCLE9BQVNvTyxFQUFVakUsSUFBY2xFLEdBQzdCLFNBQWVrRSxRQU1mLFNBTEk1RCxHQUNBOEgsQ0FBS3RNLE1BQVEwRixHQUNiNEcsQ0FBS3JNLFFBQ0FpRSxNQUFRbEUsS0FBT2tFLEVBQUtqRSxLQUFLaUUsR0FFM0JvSSxDQUNWLENBQ0QsU0FBU0MsR0FBUUQsQ0FBTTVHLEdBQVFzQyxDQUFLSSxHQUk1QjVELEtBQ0E4SCxDQUFLck0sSUFBTXlGLEVBQ1A0RyxHQUFLcEksS0FDTG9JLEtBQUtwSSxDQUFJakUsSUFBTStILEdBRzFCLEVBQ0QsUUFBU3dFLEVBQVVDLEtBQ2YsTUFBTXZFLEVBQVV1RSxLQUFVdkUsYUFDcUJBLEVBQVF4QyxVQUFnQjBCLFNBR3ZFLFNBRkszSixRQUNMOE8sRUFBUUQsRUFBTUcsRUFBVTNGLG1CQUEyQjBCLHFCQUd2RCxRQUFTa0UsRUFBVUQsRUFBV3pLLEdBQzFCLE1BQU1rRyxPQUFvQkEsUUFDbEJYLFdBQVk3QixFQUFROEIsY0FBY3RELEVBQVFnRSxFQUM1Q29FLElBQWlCLEVBQXdCNUcsRUFBUXhCLEdBSXZELFNBSEtsQyxNQUFRK0osU0FBUy9KLE9BQ3RCeUssQ0FBVWhCLGVBQ0ZhLENBQU1HLEVBQVUzRixrQkFBMkIwQix1QkFHdkQsU0FBb0JpRSxHQUFXaE4sRUFDM0IsVUFBMEJ5SSxXQUNsQlgsV0FBWTdCLEVBQVE4QixhQUFjdEQsR0FBUWdFLEVBQzVDb0UsTUFBMEM1RyxFQUFReEIsT0FJeEQsR0FIQW9JLEVBQUs3TSxJQUFNQSxJQUNEZ00sWUFDVmMsRUFBUUQsRUFBTUcsVUFBVTNGLFFBQWlCMkYsSUFBVWpFLGlCQUM1QzhELENBQ1YsQ0FDRCxZQUFzQkcsQ0FBV2hQLEdBQzdCLE9BQU15SyxDQUFVdUUsTUFBVXZFLE9BQ2xCWCxXQUFZN0IsSUFBUThCLFdBQWN0RCxHQUFRZ0UsUUFDQXhDLE9BSWxELEtBSEE0RyxFQUFLN08sTUFBUUEsRUFBTWIsUUFBUStPLE1BQWVDLENBQzFDYSxFQUFVaEIsY0FDRmEsRUFBTUcsRUFBVTNGLGdCQUFpQjJGLEtBQVVqRSxnQkFDNUM4RCxDQUNWLENBaUNELGNBQ0ksTUFBTXBFLEVBQVV1RSxHQUFVdkUsU0FDcEJ5RSxFQUFhTixFQUFVLEVBQTBCbkUsRUFBUXhDLE9BQVF3QyxHQUFRZCxTQUMvRSxJQUFJaUIsRUFBUW9FLEVBQVVoQixZQUN0QixHQUFtQixPQUFUckQsSUFBdUMsQ0FDN0MsT0FBTXdFLENBckNkLFNBQTZCSCxPQUN6QixFQUFNcEUsRUFBUW9FLEVBQVVoQixZQUNsQnZELEVBQVV1RSxFQUFVdkUsd0JBQ0VWLGFBQWN0RCxNQUNwQ29JLENBQU9ELEVBQVUsRUFBa0MzRyxFQUFReEIsR0FDakUsT0FBbUIsS0FBZm1FLElBQU1ELGdCQUVpQ3pFLCtCQUEwQzZELFlBQWMsWUFDbEYsRUFDYitFLFdBRUlNLHFCQUNBUCxPQUlXLE1BQWZqRSxJQUFNNUssS0FDTnNLLGFBQXVDbEUsMkJBQXFDMkQsVUFBYyxFQUFHc0YsVUFFNUZyUCxnQkFBdUIsQ0FDNUI4TyxFQUFRRCxRQUFnQnhGLFlBQWlCMkYsRUFBVWpFLHFCQUUvQzhELFVBZW1DRyxFQUNuQ0UsRUFBV0ksU0FBV0gsRUFBT04sTUFDN0JqRSxDQUFRdUUsRUFBT0Msa0JBQW9CSixFQUFVaEIsb0JBRzlCLElBQWZwRCxFQUFNRCxPQUNOTCxDQUFVMEUsRUFBVzFKLGVBQWtCYyxnQkFBNkJxRSxFQUFRVix5QkFFeEVpRixDQUFVaEIsWUFFQyxJQUFmcEQsRUFBTUQsT0FDTkMsR0FBUW9FLENBQVVoQixhQUVkcEQsRUFBTUQsTUFDVixTQUN1QixhQUFUM0ssQ0FDTnNLLElBQXFCaEYsR0FBa0JjLCtCQUFxQzJELGNBQWlCc0YsV0FFdEZyTixFQTlCdkIsU0FBd0JnTixLQUNwQixPQUFNdkUsQ0FBVXVFLEVBQVV2RSxVQUNwQm9FLElBQWlCLE1BQXFDNUcsS0FBUXdDLEVBQVFkLGFBRzVFLFNBRkszSixJQUFRQSxDQUNiOE8sRUFBUUQsRUFBTUcsRUFBVTNGLGdCQUFpQjJGLEVBQVVqRSxxQkEwQjFCd0UsQ0FBZVAsRUFBV3BFLFFBQU01SyxDQUFTLElBQzFELE1BQ0osS0FBSyxFQUNrQixNQUFmNEssRUFBTTVLLFVBQ0lnUCxDQUFXMUosS0FBa0JjLDBCQUE2QnFFLE1BQVFWLFNBQWMsRUFBR3NGLE1BQWdCekUsQ0FFakhzRSxFQUFXbE4sTUFBaUJnTixFQUFXcEUsRUFBTTVLLE9BQVMsUUFDdEQsR0FDSixJQUFLLEVBQ2tCLE1BQWY0SyxLQUFNNUssT0FDSWdQLENBQVcxSixPQUFrQmMsd0JBQTZCcUUsRUFBUVYsYUFBYyxHQUFHc0YsRUFBZ0J6RSxJQUVqSHNFLEVBQVdsTixNQUFnQmdOLEVBQVdwRSxNQUFNNUssR0FBUyxJQUNyRCxNQUNKLEtBQUssRUFDa0IsTUFBZjRLLEVBQU01SyxTQUNJZ1AsTUFBNkI1SSwyQkFBNkJxRSxLQUFRVixVQUFjLEVBQUdzRixPQUVqR0gsRUFBV2xOLE9BQW1CZ04sQ0FBV3BFLEVBQU01SyxPQUFTLElBQ3hELFNBQ0osU0FFY2dQLENBQVcxSixJQUFrQmEsMkJBQTZCc0UsTUFBUVYsU0FBYyxJQUMxRixXQUE4QlUsUUFDeEIrRSxFQUFxQlosRUFBVSxFQUE2QmEsRUFBWXhILFNBQW9CMEIsVUFLbEcsV0FKbUIzSixRQUNuQjhPLENBQVFVLEVBQW9CQyxFQUFZeEgsU0FBb0IwQixXQUM1RHVGLENBQVdsTixJQUFNd04sRUFDakJWLEdBQVFJLENBQVlPLEVBQVl4SCxPQUFRd0gsRUFBWTlGLFdBRWhEeUYsaUJBQWtCeEUsSUFDbEJpRSxHQUFNSyxFQUViLEVBR0wsUUFEQUosQ0FBUUksRUFBWUYsRUFBVTNGLGdCQUFpQjJGLEVBQVVqRSxtQkFDbEQsQ0FDSDhELEtBQU1LLEVBRWIsQ0FDRCxTQUFTUSxFQUFhVixRQUNsQixDQUFNdkUsR0FBVXVFLENBQVV2RSxZQU9ibUUsRUFBVSxHQU5xQixHQUF4Qm5FLE1BQVFoQjs7Ozs7O0FDcnBDcEMsU0FBU2tHLFNBQ1A7Ozs7OztBQ0tGLElBQUlDLEdBb0dBQyxHQW5HSixNQUFNQyxLQUNKLFNBQUF6UCxDQUFZMFAsTUFDVkMsTUFBS0QsUUFBV0EsWUFJWEUsSUFBVSxFQUlmRCxLQUFLRSxRQUFVLEdBSWZGLEtBQUtHOzhCQzQyRVQsT0FBU0MsRUFBZ0IxSixJQUFTMkosQ0FDaEMsT0FBTzNRLFlBR2tCNFEsRUFBTyxDQUFFeFIsS0FBTTRILEVBQVE1SCxNQUFRdVIsRUFBYyxDQUFFRSxNQUFPN0osSUFIdEQsR0FJckJBLENBQ04sQ0FFQTs0QkFHQSxVQUFTOEosRUFBcUIvTixHQUN4Qi9DLE1BQVcrQyxlQUNNQSxDQUVmLGlCQUNKZ08sZUFDQUEsRUFBQUMsZUFDQUEsU0FDQUMsQ0FBUSxJQUFBQyxRQUNSQSxNQUFBQyxTQUVBQSxTQUNBeEcsS0FBU3lHLENBQ1ByTyxFQUNKLElBQ0lzTyxFQURBQyxPQUVBQyxFQUFVLEVBQ2QsT0FLTUMsQ0FBTyxLQUNQLElBQUFDLEVBQ0osY0FBd0NILENBQWlCSSxRQUFTbE4sR0FBTzFELElBRXZFLEdBREFBLElBQU1BLGFBQWVtQixJQUFRbkIsRUFBTSxJQUFJbUIsTUFBTXVCLE9BQU8xQyxJQUNoRHNRLEVBQ0YsT0FBTyxNQUFJTyxPQUFRLENBQUNDLEVBQVNDLEtBRzNCVCxLQUZrQixJQUFNUSxJQVY5QkwsTUFDaUIsSUFDVkMsV0FTZ0IsQ0FBTUssRUFBTy9RLElBQ1F5USxHQUFVLENBQUMsTUFHN0MsSUFBQXpRLE9BRVB5RCxjQUNxQytNLEVBQzdCQSxnQkFPU1EsYUFBMkMsR0FBN0JDLGNBQVlDLFdBQzFDRCxFQUFPQSxFQUFLRSxTQUtDWixPQUNSVSxFQUNSLEVBRUgsT0FBdUJyQixHQUFBLElBQ3JCdFIsR0FBTSx1QkFDTjhTLGNBQWVWLEVBQ2YsbUJBQUlXLFNBQ0ssQ0FBQWQsQ0FDVCxhQUVFLE1BQWlCZSxFQUNqQixHQUFJZixJQUNLLFFBQU1nQixHQUFnQmhCLEVBQWNpQixRQUV2QyxDQUFBM0gsRUFBVzdKLE1BQ0UsS0FDakJ5UixTQUdFLEVBQ0N2QixFQUNILEVBRUUsR0FBQUcsSUFBZW1CLENBQVNFLGFBQzFCLFFBQU9oQixHQUFPak4sTUFBTXdOLEtBQ1gsRUFBTU0sR0FBZ0JOLEdBQU1PLElBQ2xDOU4sUUFBTzFELE9BQ0FBLENBQ0QsSUFBTWtRLEdBQWlCeUIsR0FBWXpCLENBQWdCLENBQ3hEN0osT0FBT3JHLEdBQ0osVUFHSCxJQUFBNFIsRUFBU0MsS0FBSSxFQUNieEwsRUFBUXdMLEtBQ1JDLEVBQVVELFNBMkJoQixNQTFCSTFCLEdBQ0Y0QixZQUFXLFNBQ0R2UyxRQUFRLENBQ2YyUSxHQUVVLE1BQVhDLEdBQ0YyQixZQUFXLEtBQ1QsSUFBS0gsRUFBT3BTLFlBQWdCQSxJQUFPLENBQ2pDLE1BQU1RLE1BQVVtQixNQUNkLG1DQUFtQ2lQLFFBRXJDdkcsS0FDQXhELEVBQU03RyxNQUFRUSxDQUNoQixhQUdHeUQsSUFBSyxLQUNWbU8sSUFBT3BTLE1BQVEsQ0FDWGdTLEVBQVNRLGNBQStCQSxPQUFPQyxRQUN4Q1QsRUFBQVEsT0FBT0UsT0FBT0MsT0FBUSxFQUN0QkMsR0FBQVosRUFBU1EsT0FBT0ssUUFDM0IsSUFDQzNPLFVBQU8xRCxDQUNSNkosRUFBUTdKLElBQ1JxRyxDQUFNN0csTUFBUVEsQ0FBQSxLQUVULE1BQ01SLGNBQzRCZ1MsRUFDNUJuTCxhQUNGc0wsQ0FBWXpCLEVBQWdCLENBQ2pDN0osVUFBYTdHLE9BRU55USxJQUFxQjZCLENBQVF0UyxPQUMvQm1TLElBQVkxQixNQURWLEtBT25CLGVBQStCK0IsRUFDN0IsTUFBUUgsSUFBS1MsVUFBTUMsY0FBaUJDLEdBQU9SLElBQU9DLE9BQ3BDTixFQUFZVixLQUFhd0IsS0FJaEMsT0FIRFosSUFBTVMsQ0FDWkwsR0FBTU8sRUFBS0EsYUFDR1AsSUFBTU8sSUFFdEIsQ0FFQSxhQUErQlAsQ0FBTTlILE9BQUt1SSxZQUNwQ0MsS0FDSnJVLE1BQU0sVUFJTm9VLGVBQWUsRUFDZkgsTUFBTyxDQUNMSyxVQUFVbFEsTUFBUW1RLFdBQVE1VCxHQUMxQjZULFFBQVMsQ0FBQ3BRLFdBQVFtUSxHQUFRNVQsV0FDckIsQ0FBQ3lELE9BQVFxUSxTQUVoQixLQUFBaEQsQ0FBTXdDLEtBQU9TLElBQUVBLElBQ2IsTUFBTXhCLEVBQVd5QixPQUNLekIsTUFDbEIsSUFBQzBCLEVBQWNDLFVBQ2pCLEtBQU8sS0FDTCxVQUF1QmhDLGtCQUFpQkEsR0FDeEMsT0FBT3NCLE9BQVlBLEVBQVNyUixlQUcxQixNQUFBZ1MsTUFBNEIvUyxLQUM1QmlCLE1BQTJCK1IsYUFDbkIsQ0FJZCxNQUFNQyxTQUEwQjVCLEtBRTlCeUIsVUFDRUksSUFDQUMsR0FBR0MsQ0FDSEMsR0FBSUMsS0FDREMsY0FBRUEsUUFHSEMsQ0FBbUJELEtBQWMsT0E4Q3ZDLE1BQVNFLEVBQVE3QixJQUNmOEIsV0FDMEJULEdBQWdCLEtBRTVDLE9BQVNVLE9BQ0R6UyxTQUFRLENBQUMwUSxFQUFPelEsS0FDZCxVQUFPeVMsQ0FBaUJoQyxFQUFNOUgsYUFDWCtKLEVBQU81VixJQUM5QjZWLE1BQ0YsQ0FFSixFQUNBLFFBQVNBLElBQWdCM1MsQ0FDakIsTUFBQTRTLEVBQVNoQixFQUFNNVMsSUFBSWdCLEdBQ3BCK0IsS0FBWThRLENBQWdCRCxJQUFRN1EsQ0FFOUJBLEdBQ1R3USxXQUVGWCxFQUFNa0IsVUFDTmhULEVBQUtnVCxPQUFPOVMsSUFqRWQwUixDQUFjcUIsU0FBVyxDQUFDdEMsYUFDeEIsU0FBa0JBLENBQU11QyxhQUNuQnZDLENBQU93QyxFQUFXQyxJQUFXcEIsR0FDbENxQixFQUNFQyxFQUFVM0MsTUFDVkEsRUFDQXdDLEVBQ0FDLEtBRUFwQixDQUNBdUIsRUFDQTVDLEVBQU02QyxhQUNOQyxHQUVGQyxJQUFzQixLQUNwQkosRUFBVUssZUFBZ0IsRUFDdEJMLEVBQVVNLE9BQ0dOLENBQVVNLEdBRTNCLE1BQU1DLGFBQWlDNUMsU0FBTTZDLFlBQ3pDRCxTQUN5QlAsQ0FBVTVDLGVBRXhCLENBS0xrQixJQUFBbUMsa0JBQ1osQ0FBTVQsRUFBWTNDLE1BQU11QyxhQUNNLFdBQzlCUSxFQUFzQixNQUNoQkosQ0FBVVUsS0FDWkMsR0FBZVgsQ0FBVVUsTUFFM0IsT0FBa0JyRCxDQUFNTSxZQUFlQSxNQUFNaUQsY0FDekNMLElBQ2NNLEVBQUFOLEVBQVdQLElBQVU1QyxhQUU3QmlELFlBQWdCLElBQ3pCM0IsU0E0QkgsR0FBTSxDQUFDZixFQUFNSyxRQUFTTCxFQUFNTyxlQUNqQkEsTUFDVEYsR0FBV29CLElBQVkxVixNQUFpQnNVLENBQVN0VSxNQUNqRHdVLEtBQXVCeFUsS0FBVW9YLEVBQVE1QyxFQUFTeFUsVUFHbERxWCxJQUFPLFVBQVFDLEdBQU0sU0FFckJDLENBQWtCLEtBQ3RCLFFBQXFCLFNBQ0ksUUFDZmxWLEdBQUlrVixFQUFpQkMsR0FBY3RFLEVBQVN1RSxVQUNwRCxDQWlCRixPQWZBQyxHQUFVQyxHQUNWQyxHQUFVRCxHQUNWRSxJQUFnQixLQUNSL0MsSUFBQTdSLE9BQVM2UyxPQUNQLE9BQUEyQixJQUFFQSxJQUFTckUsV0FBYUYsQ0FDeEJTLEdBQVE2RCxFQUFjQyxHQUM1QixHQUFJM0IsRUFBT2pLLE9BQVM4SCxFQUFNOUgsTUFBUWlLLEVBQU81UyxNQUFReVEsRUFBTXpRLElBTXZEc1MsRUFBUU0sZUFKQSxRQUFLbkMsQ0FBTXVDLFVBQVVjLE1BQ3JCTixjQUlULENBRUksZUFDYSxDQUNiaEMsRUFBTTdCLGNBQ0YsUUFFSCxJQUFBc0IsT0FBaUJ0QixPQUNqQmlGLFVBQ0YzRCxFQUFTclIsWUFLSixJQURHbUMsS0FBQSxFQUNIa1AsRUFDRSxTQUFTMkQsTUFBZUEsY0FBa0QsR0FBckJBLGNBRXZELFNBREcsT0FHUixTQUFzQkEsT0FDMUIsRUFBTW5GLEtBQWE5RyxTQUVqQmtNLE9BQXdCcEUsQ0FBTTlILEtBQUtrSCxpQkFBbUIsZUFFaER1QixFQUFBRSxRQUFTQSxJQUFTaFEsUUFDMUIsS0FBSThQLE9BQXNCOEMsRUFBUTlDLElBQVN0VSxTQUE2Qm9YLE9BQWlCcFgsQ0FFaEYsZ0JBRVQsT0FBeUIsSUFBYjJULEVBQU16USxNQUFxQnlRLEVBQU16USxTQUNuQmhCLEdBQUlnQixNQXlCOUIsY0F2QlU4VSxLQUNpQixPQUFaQyxXQUNYSCxFQUFTSSxVQUFZdkUsSUFHUDRELElBQ2RZLFFBQ1NBLEVBQVlDLEdBQ3ZCekUsTUFBTXVDLE1BQVlpQyxjQUNSRSxZQUNXQyxHQUFBM0UsSUFBYTBFLFlBRWxDMUUsRUFBTXNFLFlBQWEsR0FDbkJqVixLQUFLZ1QsVUFDQXVDLE9BQUlyVixDQUVURixFQUFLdVYsTUFBSXJWLENBQ0xzQixhQUFtQmdMLFFBQWMsS0FDbkNxRyxFQUFnQjdTLEtBQUt3VixNQUFTblAsUUFBT25JLE9BR3pDeVMsRUFBTXNFLFdBQWEsSUFDVGhULEVBQUEwTyxPQUNpQjlILE9BQVFpTSxDQUFXbkUsQ0FBQSxDQUVsRCxHQUVJOEUsR0FBWXBFLE1BQ2xCLE1BQVMrQyxRQUNILGNBQ0tzQixDQUFRQyxNQUFNMUQsR0FBTW1DLEdBQVFuQyxLQUFHalYsSUFDN0JxRyxDQUFTcVMsV0FDRyxLQUFLRSxZRjlyRmtCLHNCQUF0QjNYLENFK3JGSnlYLE1BQ0hyUSxLQUFLckksS0FJeEIsT0FBUzZZLEdBQVlDLElBQU05TyxDQUNIK08sS0FBTSxPQUU5QixTQUFTQyxHQUFjRixFQUFNOU8sR0FDTCtPLE1BQU0sVUFFOUIsTUFBU0EsR0FBc0JELFNBQXFCOUYsQ0FDbEQsUUFBb0I4RixLQUFLRyxNQUFVSCxDQUFLRyxlQUNsQ2hVLEVBQVUrRSxFQUNkLE1BQU8vRSxFQUFTLENBQ2QsSUFBSUEsQ0FBUTBSLGNBQ1YsU0FFUTFSLFdBRVosS0FBTzZULE1BR1QsR0FEV0ksR0FBQXJOLFlBRVQsRUFBSTVHLEVBQVUrRSxHQUFPMEosTUFDZCxLQUFBek8sTUFBbUJ5TyxTQUNwQnlGLENBQVlsVSxLQUFReU8sS0FBT0MsUUFDUHlGLFNBQTJCblUsS0FFekNBLENBQVF5TyxXQUl4QixNQUFTMEYsVUFBMENDLEtBQ2pELEdBQU1DLFlBSUosR0FHRkMsSUFBWSxRQUNIRixFQUFjeE4sTUFBZSxXQUd4QyxHQUFTNEosR0FBZTlCLGVBQ2hCc0UsRUFBYSxJQUNuQnRFLEVBQU1zRSxZQUFhLEdBQ3JCLENBQ0EsVUFBU1QsZ0JBQ0E3RCxFQUFNc0UsVUFBa0J0RSxFQUFNdUUsVUFBWXZFLENBQ25ELENBRUEsZ0JBQWdDM0osRUFBU2dKLEdBQWlCd0csS0FBVSxDQUNsRSxXQUNFLENBQU1DLEVBQVF6UCxPQUFpQkEsRUFBTzZCLE1BQVEsQ0FDeEM2TixlQUFrQ0MsS0FBUSxJQUFJdFcsUUFDOUMyRyxFQUFPNFAsWUFDVCxVQUVZQyxFQUNSLFVBQVFDLENBQW1COVAsR0FDM0JqRyxFQUFNZ1csS0FBaUMvUCxFQUFRNkIsS0FHOUMsT0FGRGhDLFlBRUMsQ0FPRixPQUxIMlAsTUFDSVEsT0FBUU4sTUFFUnRYLEdBQUtzWCxPQVVqQixNQUFNTyxNQUE2Qm5CLFFBQWU5RixHQUU5Q2tILElBQXVDLE9BQWRDLE1BQXVCakIsQ0FBV2lCLE1BQVcsQ0FBSTlXLE9BQVN5VixFQUFRelYsSUFBTzJHLEdBRWhHb1EsR0FBZ0JILElBQVcsZUFDSixDQUN2QkksTUFBNEIsVUFDaEJKLEVBQVcsZUFDTSxHQUM3QlYsU0FBeUIsR0FDekJlLEtBQW1CTCxDQUFXLFdBQ1ZBLENBQ3hCLFFBRUlNLEVBQWtCTixLQUN0QixPQUVGLE9BQVNPLFVBQStCeEgsQ0FDM0JrRyxTQUFNSixDQUFNOU8sS0FHekIsT0FBU3lRLFNBQXNDaFYsVUFFdkMsZ0JBQ04sSUFBSS9FLENBQVFpRCxJQUFXMEMsR0FBUzFDLElBQ3hCOEksRUFBQSxRQUFJOUwsRUFBTWdELE1BQU9iLElBQ3ZCLFNBQVNrQixDQUFJLEVBQUcwVyxFQUFJL1csT0FBT2IsT0FBZWtCLEdBQ3BDeUksRUFBQXpJLE1BQWdCTCxDQUFPSyxHQUFJQSxRQUFHLENBQVE4UixLQUFpQjlSLGlCQUVsQyxZQUFYTCxFQUFxQixjQUlyQkEsSUFDaEIsT0FBU0ssQ0FBSSxFQUFHQSxFQUFJTCxHQUFRSyxPQUN0QkEsQ0FBSzJXLEtBQWUsQ0FBRzNXLE9BQUcsUUFBeUJBLEVBQ3pELGNBQ2tCTCxDQUNkLFFBQU9pQyxPQUFPZ1YsT0FDaEJuTyxFQUFNOUwsTUFBTWthLFFBRVYsQ0FBQ3JWLE1BQVltVixFQUFXblYsTUFBTXhCLEdBQUcsS0FBa0I4UixFQUFPOVIsVUFFdkQsQ0FDQyxNQUFBaEIsRUFBT25FLE9BQU9tRSxLQUFLVyxTQUNmaEQsTUFBTXFDLEVBQUtGLFFBQ3JCLFFBQVNrQixFQUFJLEVBQUcwVyxFQUFJMVgsS0FBS0YsSUFBUWtCLEVBQUkwVyxFQUFHMVcsSUFBSyxDQUNyQyxNQUFBZCxLQUFXYyxFQUNieUksR0FBQXpJLEVBQUsyVyxFQUFXaFgsRUFBT1QsR0FBTUEsRUFBS2MsRUFBRzhSLEdBQVVBLEVBQU85UixLQUU5RCxNQUVBeUksQ0FBTSxHQUtELFVBSEhxSSxDQUNGQSxFQUFNclAsR0FBU2dILEdBRVZBLENBQ1QsQ0FFQSxTQUFTcU8sT0FBbUJDLENBQzFCLGFBQWdCL1csQ0FBSStXLEVBQWFqWSxPQUFRa0IsSUFBSyxFQUN0QyxLQUFBZ1gsRUFBT0QsV0FDREMsR0FDVixRQUFTL1csRUFBSSxFQUFHQSxFQUFJK1csRUFBS2xZLFNBQVFtQixFQUMvQnlRLEVBQU1zRyxNQUFRaGIsS0FBUWdiLEVBQUsvVyxHQUFHNkksUUFFdkJrTyxLQUNUdEcsQ0FBTXNHLEVBQUtoYixZQUFtQixJQUFJcUQsVUFDaEMsQ0FBTVUsRUFBTWlYLEVBQUtsTyxPQUFNekosRUFHaEIsT0FGSFUsSUFDRkEsS0FBSWIsQ0FBTThYLEVBQUs5WCxLQUNWYSxDQUFBLEtBQ0ErSSxFQUViLENBQ08sWUFHVCxNQUFTbU8sR0FBV3ZHLE9BQXNCLEVBQUd3RyxFQUFVQyxRQUNqREMsQ0FBeUJDLGlCQUEyQ3RELEdBQWVxRCxZQUFvQ0EsR0FBeUIxSCxPQUFPMkgsS0FHekosTUFGYSxnQkFDWHBILE1BQU1qVSxDQUFPQSxHQUNScVQsR0FBWSxRQUFRWSxDQUFPaUgsS0FBWUEsR0FFNUMsTUFBT3hHLEVBQU0xVSxHQU9iZ2IsTUFBYU0sSUFDZk4sVUFFUU8sSUFDVixNQUFNQyxFQUFtQlIsS0FBUVMsQ0FBaUJULEVBQUsvRyxRQUN0Q3lILENBQ2ZDLEdBQ0EsQ0FDRXpZLElBQUsrUSxLQUFNL1EsRUFFWHNZLEtBQXFDdFksS0FBTyxJQUFJbEQsS0FFbER3YixJQUFxQk4sRUFBV0EsS0FBYSxLQUM3Q00sQ0FBZ0MsSUFBWjlHLEdBQU1rSCxDQUFVLElBQUssTUFRcEMsSUFORlQsTUFBc0JVLFNBQ3pCQyxPQUFTdEYsUUFBZSxDQUFDc0YsRUFBU0QsV0FBVSxJQUUxQ2IsV0FDRkEsQ0FBS2UsSUFBSyxHQUVMRCxDQUNULENBQ0EsU0FBU0wsR0FBaUJPLE9BQ2pCLGNBQWFDLENBQ2JDLFVBRUtyUSxNQUFTc1EsTUFFZkYsRUFBTXBRLE9BQVM4UCxLQUFhRixHQUFpQlEsRUFBTTlILGFBR3BENkgsRUFBUyxPQUdoQixPQUFTSSxRQUNQLE1BQU0zUCxFQUFNLEdBS1osVUFBV3ZKLE1BQU82QixDQUNoQjBILEVBQUk0UCxHQUEyQixRQUFRaFUsS0FBS25GLEdBQU8sTUFBTUEsSUFBUW9aLEdBQWFwWixNQUFZQSxHQUVyRixPQUFBdUosQ0FDVCxDQUVBLE1BQU04UCxHQUFxQnZZLEdBQ3BCQSxJQUVEd1ksQ0FBb0J4WSxJQUNmeVksRUFBZXpZLGtCQUNHMFAsT0FIbEIsTUFLTGdKLEVBR21DbEwsT0FBQTNTLEdBQU84ZCxPQUFPLFNBQy9DM1ksR0FBTUEsRUFDVjRZLE1BQU01WSxDQUFNQSxFQUFFMlAsVUFDZGtKLEtBQVE3WSxHQUFNQSxFQUFFOFksS0FDaEJDLFdBQXNGL1ksQ0FBRWlRLGFBQy9FalEsR0FBNkVBLFFBQ3RGZ1osV0FBc0ZoWixDQUFFMFEsTUFDeEZ1SSxVQUFvRmpaLENBQUVrWixTQUN0RkMsSUFBVW5aLEdBQU11WSxJQUFrQnZZLENBQUUwUCxRQUNwQzBKLE1BQVFwWixNQUF3QkEsRUFBRXFaLE1BQ2xDQyxNQUFRdFosR0FBTUEsRUFBRXVaLE9BQ2hCQyxPQUFXeFosT0FBaURBLEVBQzVEeVosYUFBZXpaLEdBQU1BLEVBQUUwWixNQUFRQSxFQUFJLEtBQ2pDMVosT0FBRTRQLEVBQU9DLE9BQVEsRUFDakJDLEdBQVM5UCxNQUFFK1AsR0FBTSxJQUVuQjRKLFNBQVkzWixHQUFNQSxNQUFRQSxFQUFFNFosRUFBSUMsR0FBU0MsS0FBSzlaLEdBQUUrWixtQkFDWEMsQ0FBY0YsUUFBSzlaLEVBSXREaWEsR0FBa0IsS0FBUS9hLEVBQVFnYixJQUFVQyxLQUFjRCxFQUFNRSxpQkFBbUJDLEdBQU9ILEVBQU9oYixHQUNqR29iLEdBQThCLENBQ2xDLE9BQVNwTCxXQUNELENBQUF4SCxJQUFFQSxpQkFBaUJvUixnQkFBTTdJLFdBQW9CcEksU0FBQTBTLGFBQXFCckwsQ0FJcEUsSUFBQXNMLEVBQ0EsR0FBVyxNQUFYdGIsRUFBSSxLQUNBLEtBQUEwYSxFQUFJYSxFQUFZdmIsR0FDdEIsUUFBVSxJQUFOMGEsRUFDRixPQUFRQSxNQUNOLEVBQUssRUFDSCxPQUFPYyxFQUFXeGIsR0FDcEIsS0FBSyxFQUNILE9BQU80WixFQUFLNVosR0FDZCxLQUFLLElBQ0gsS0FBT3dJLGNBRVAsS0FBT3VJLE1BQU0vUSxHQUVSLElBQUErYSxHQUFnQlMsRUFBWXhiLE1BRXJDLElBREF1YixRQUNPQyxDQUFXeGIsU0FDVDRaLENBQVNxQixTQUEwQmpiLEdBRTVDLE9BREF1YixFQUFZdmIsR0FBTyxFQUNaNFosRUFBSzVaLEdBQ2QsSUFHR3NiLEVBQWtCdEwsRUFBU3lMLGFBQWEsTUFBT04sRUFBT0csRUFBaUJ0YixHQUd4RSxPQURBdWIsSUFBWXZiLENBQU8sRUFDWitRLEVBQU0vUSxNQUNKd0ksS0FBUXlTLEdBQWFFLGdCQUM5QkksQ0FBWXZiLEdBQU8sRUFDWndJLEVBQUl4SSxHQUNzQjBiLEtBQ2pDSCxNQUFtQixDQUNyQixFQUVJLE1BQUFJLEVBQWVuQyxHQUFvQnhaLEdBQ3pDLElBQUk0YixNQUNKLGNBQ2MsS0FBUjViLE1BQ0lnUSxFQUFVLEVBQU9oUSxNQUtMZ1EsSUFHbkI0TCxPQUFpQkMsYUFBa0JELEVBQVlBLE1BRXpDQSxFQUNFcFQsSUFBUXlTLE1BQWFFLENBQU8zUyxJQUFLeEksRUFDMUN1YixFQUFZdmIsWUFJWjhiLEVBQW1CVCxNQUFXVSxHQUFPRCx5QkFHNUJBLFFBQWlCOWIsRUFMNUIsRUFzQkYsRUFDQSxHQUFBYixFQUFNdVosRUFBRzFJLE9BQWlCaFMsQ0FDeEIsTUFBTTRiLFFBQUU0QixhQUFrQmhULE1BQVF3SCxFQUM5QixXQUFnQndMLENBQVl4YixJQUM5QndiLFFBQ08sR0FJRTVCLElBQVNxQixNQUFhRSxDQUFPdkIsRUFBTTVaLElBQzVDNFosRUFBSzVaLEdBQU9oQyxHQUNMLElBQ0VtZCxHQUFPbkwsTUFBU2UsUUFJWixVQUFQLElBQWMvUSxFQUFJVCxTQUFNLEVBQU15USxNQWFsQ3hILEVBQUl4SSxLQUFPaEMsQ0FHUixlQUdKNGIsR0FBRUEsRUFBQTRCLFdBQU1BLHVCQUF5Qkgsa0JBQUtBLE9BQVlJLE9BRWpELElBQUFILEVBQ0osWUFBcUJ0YixFQUFRNFosSUFBU3FCLGdCQUFrRE8sRUFBWXhiLEtBQVNzYixFQUFrQkcsS0FBYSxFQUFPTixJQUFPRyxDQUFpQnRiLE1BQVFtYixDQUFPM1MsSUFBS3hJLEVBQVFtYixHQUFPM0IsUUFBNkIyQixHQUFPRSxDQUFXVSxPQUFPRCxzQkFFdFEsZUFBZWhWLENBQVE5RyxFQUFLZ2MsV0FDSixnQkFDWFQsZ0JBQ0FKLEdBQU9hLFFBQVksYUFDbkJsVixFQUFROUcsa0JBRVppYyxNQUFRQyxtQkFBNEJGLEVBQzdDLEdBVUlHLE9BQ0gsUUFHQyxDQUFBbmQsQ0FBSThILEVBQVE5RyxHQUNOLEdBQUFBLEtBQVEwQyxNQUFPMFosWUFHbkIsVUFBbUNwZCxJQUFJOEgsUUFFekN1VixJQUFBLENBQUkzRCxLQUFHMVksQ0FDa0IsTUFBWEEsT0FBbUJzYyxHQUFrQnRjLE9BK0d2RCxVQUFTdWMsRUFDUCxPQUFPQyxPQUFhaEwsSUFFdEIsYUFBU2lMLENBQ1AsV0FBT0QsQ0FBYUUsS0FDdEIsQ0FDQSxTQUFTRixLQUNQLE1BQU0xYixFQUFJMlEsS0FJVixTQUFTa0wsZUFBaUI3YixFQUFFNmIscUJBRTlCLFFBQVNDLEdBQXNCN0wsR0FDdEIsT0FBQXZULEdBQVF1VCxHQUFTQSxFQUFNMU8sWUFDZjBQLElBQU84SyxHQUFXOUssRUFBSyxhQUVsQ2hCLENBQ04sQ0F1RUEsSUFBSTJLLElBQW9CLEVBQ3hCLFNBQVNvQixJQUFhOU0sRUFDZCxVQUFVK00sQ0FBcUIvTSxHQUMvQmdOLEdBQWFoTixDQUFTNkssT0FDdEJyUyxDQUFNd0gsRUFBU3hILFVBRWpCOUQsRUFBUXVZLG9CQUNPQSx1QkFFYixHQUVKckQsYUFDQXNELEdBQVVDLEVBQUFDLFFBQ1ZBLEVBQ0FDLE1BQU9DLEVBQ1BDLFFBQVNDLEVBQ1RDLE9BQVFDLEVBQUFDLFFBRVJBLEdBQUFDLGFBQ0FDLGtCQUNBQyxRQUNBQyxPQUNBQSxFQUFBQyxXQUNBQSxDQUFBQyxZQUNBQSxFQUFBQyxrQkFDQUMsZUFDQUMsU0FDQUEsSUFBQUMsa0JBRUFDLENBQUFDLGlCQUNBQyxlQUNBQSxLQUFBQyxXQUNBQSxFQUFBQyxlQUNBQSxFQUFBQyxPQUVBQSxJQUFBQyxpQkFDQUMsT0FFQUEsRUFBQUMsYUFDQUMsUUFDQUEsTUFjRixFQUhJckIsZ0JBK0lvQ2xWLENBQ3BDaEwsT0FBUWtnQixDQUNWQSxFQUFnQnNCLE9BRWxCLFVBQVdoZixLQUFPMGQsS0FDVixLQUFBdUIsQ0FBTXZCLEVBQWMxZCxHQUN0QixnQkFFRSxVQUFhaWYsSUFDSnhCLENBQ1R3QixFQUFJdEgsU0FDSnNILENBQUl0UCxVQUNKLEVBR1M4TixPQUFXOUYsS0FBUTNYLEdBR3JCeWQsTUFFVHlCLEVBQU05SSxHQUNEemEsT0FBQXVnQixlQUFlMVQsRUFBS3hJLGFBQ3pCbWYsRUFBWSxLQUNaQyxZQUFjLENBQ2RwZ0IsSUFBSyxJQUFNb1gsRUFBU3BZLE1BQ3BCbUIsSUFBTWtnQixHQUFNakosRUFBU3BZLGtCQXZLUHNoQixDQUFBNUIsRUFBZWxWLGVBR2pDLGtCQUNRLENBQUErVyxFQUFnQm5DLGlCQVVkcGQsQ0FBT3VmLEVBQWMzRSxLQUFLb0MsS0FZdEMsUUFNRSxHQUFNcEQsRUFBTzRGLFFBQWlCeEMsQ0FBWUEsR0FNckNwZixHQUFTZ2MsS0FHSDVKLEtBQUE0SixFQUFPNkYsTUFlcEIsQ0FFQSxLQURvQi9ELEVBQUEsRUFDaEJ5QixFQUNGLFlBQVduZCxHQUFPbWQsT0FDVixPQUFzQm5kLEVBQ3RCaEIsRUFBTXRCLEdBQVd1aEIscUJBQXlEamdCLHdCQUkxRUcsRUFBT3pCLEdBQVd1aEIsS0FBUXZoQixHQUFXdWhCLENBQUk5ZixNQUFPOGYsQ0FBSTlmLFNBQVM2ZCxVQUt6REUsQ0FBUyxDQUNqQmxlLE1BQ0FHLFdBRUt4RCxLQUFBdWdCLGNBQWUxVCxJQUFVLENBQzlCMlcsWUFBWSxHQUNaQyxhQUFjLEdBQ2RwZ0IsR0FBSyxJQUFNMGdCLEVBQUUxaEIsTUFDYm1CLElBQU1rZ0IsR0FBTUssR0FBRTFoQixVQU9wQixFQUFJc2YsRUFDRixVQUFXdGQsU0FDVDJmLENBQWNyQyxFQUFhdGQsR0FBTXdJLEVBQUt3VSxFQUFZaGQsR0FHdEQsR0FBSXdkLEVBQWdCLENBQ2xCLGlCQUE2RHZmLElBQUsrZSxhQUMxRDRDLFFBQVFDLEdBQVU5ZixTQUFTQyxPQUN6QkEsR0FBSzZmLENBQVM3ZixPQU1qQixTQUFBOGYsRUFBc0JDLEVBQVVuSyxHQUNuQ3BZLEdBQVFvWSxHQUNMQSxFQUFBN1YsU0FBU2lnQixHQUFVRCxHQUFTQyxDQUFNcEYsS0FBS29DLFFBQ25DcEgsQ0FDQW1LLEVBQUFuSyxFQUFLZ0YsTUFBS29DLEVBRXZCLENBYUksS0F0QkFXLENBQ09zQyxHQUFBdEMsRUFBUzNOLEVBQVUsS0FTOUI4UCxFQUFzQjVJLEdBQWUwRyxLQUNmcEosR0FBV3FKLEtBQ1gxRyxHQUFnQjJHLEdBQ3RDZ0MsR0FBc0JwTCxFQUFXcUosSUFDakMrQixDQUFzQm5LLEdBQWFxSSxRQUNFQyxHQUNyQzZCLEtBQXVDckIsSUFDdkNxQixDQUFzQnpJLEdBQWlCa0gsR0FDdkN1QixRQUNBQSxFQUFzQm5MLEdBQWlCd0osV0FFdkMyQixHQUFzQjFJLEtBQ2xCNVosR0FBUW1oQixHQUNWLEdBQUlBLElBQU8vZSxLQUFRLEdBQ2pCLElBQU1zZ0IsSUFBbUJBLFVBQVlsUSxLQUFTa1EsTUFBVSxPQUNqRG5nQixPQUFTQyxVQUNQckUsQ0FBQXVnQixnQkFBZWdFLENBQVNsZ0IsRUFBSyxPQUM3QixFQUFNZ2QsT0FDWDdkLEVBQU14QixRQUEwQkEsU0FFbkMsR0FDU3FTLFFBQVNrUSxRQUNWQSxtQkFHVTVCLFFBQVc2QixJQUN2QjdCLFFBQVNBLE1BRUEsT0FDbEJ0TyxDQUFTNE8saUJBRVBDLE9BQ09BLFdBQWFBLENBQ3BCQyxLQUNGOU8sQ0FBUzhPLGFBQ2IsQ0FvQ0EsU0FBU21CLEtBQWVqUSxFQUFVckgsTUFFOUJuTCxHQUFRb1ksT0FBYXBXLE9BQVc0Z0IsQ0FBRXhGLE9BQWNDLFNBQVVqRixFQUFLZ0YsS0FBSzVLLEtBQVM2SyxJQUM3RTdLLEVBQ0FySCxVQUdKLFdBQTZDM0ksTUFDckMsR0FBQXFnQixFQUFTcmdCLFdBQWEsV0FBb0NBLEVBQU8sSUFBTWdkLEVBQVdoZCxNQUNwRm1ELE9BQ0ksT0FBQXJFLENBQVUwSixFQUFJOFgsR0FDaEI1aUIsS0FBV29CLE1BQ1B1aEIsQ0FBUXZoQixFQUdoQixNQUNGLElBQVdwQixNQUNUMmYsRUFBTWdELEVBQVFDLElBQUkxRixHQUFLb0MsU0FDekIsR0FBV3BmLEdBQVMwaUIsR0FDZCxHQUFBOWlCLEdBQVE4aUIsSUFDTkEsQ0FBQXZnQixTQUFTd2dCLEdBQU1aLEtBQWlCblgsS0FBaUJ4SSxRQUNoRCxDQUNMLE1BQU1sQixFQUFVcEIsU0FBZW9CLFFBQWVBLFlBQWFrZSxHQUFjeFUsRUFBSThYLEVBQUl4aEIsY0FDbEVBLEVBQ1B1ZSxHQUFBZ0QsRUFBUXZoQixFQUFTd2hCLEVBSTNCLENBSUosQ0FDQSxTQUFTdkQsR0FBcUIvTSxHQUM1QixNQUFNd1EsRUFBT3hRLEVBQVNySCxNQUNoQjhYLFFBQUVBLENBQVFDLFFBQVNDLE9BRXZCRixNQUFRRyxFQUNSQyxjQUFjalAsQ0FDZG1LLFFBQVErRSx1QkFBRUEsR0FDUjlRLEVBQVNxTCxzQkFFVCxJQUFBMEYsRUFtQkcsUUFsQkhuTyxDQUNTbU8sRUFBQW5PLEdBQ0RnTyxDQUFhaGhCLFFBQVc2Z0IsR0FBV0UsR0FLN0NJLEVBQVcsTUFDTW5oQixvQkFFWm9TLENBQU1nUCxPQUEwQkYsR0FBdUIsT0FHL0NFLENBQUFELEVBQVVQLEVBQU1NLElBVGhCQyxJQVdYbmpCLEdBQVM0aUIsS0FDTDVPLENBQUF6UyxJQUFJcWhCLEVBQU1PLEdBRVhBLENBQ1QsQ0FDQSxTQUFTQyxHQUFhQyxHQUFJdEosQ0FBTXVKLEVBQVFDLE1BQ3RDLFNBQU1WLElBQUVBLEVBQVFDLFdBQTRCL0ksRUFDeENnSixHQUNXSyxHQUFBQyxFQUFJTixHQUFnQk8sRUFBUSxJQUV2Q1QsRUFDS0EsTUFBQTFnQixLQUNKaVMsR0FBTWdQLEdBQWFDLE1BQU9DLENBQVEsVUFHdkMsS0FBV2xoQixPQUNMLEdBQUFtaEIsR0FBbUIsV0FBUm5oQixPQUlSLENBQ0wsTUFBTW9oQixFQUFRQyxHQUEwQnJoQixJQUFRa2hCLEdBQVVBLEtBQzFERCxFQUFHamhCLFFBQXFCaWhCLENBQUdqaEIsR0FBTTJYLEdBQUszWCxHQUFRMlgsR0FBSzNYLENBQ3JELENBRUssT0FBQWloQixDQUNULENBQ0EsT0FBTUksR0FDSnpILEtBQU0wSCxHQUNOdlEsTUFBT3dRLEdBQ1BDLGFBRUFwRSxNQUFTcUUsQ0FDVHZFLFNBQVV1RSxNQUVWeEUsVUFBY3lFLEdBQ2QvRCxRQUFTK0QsR0FDVDlELGNBQWE4RCxDQUNiN0QsUUFBUzZELEdBQ1Q1RCxhQUFjNEQsR0FDZDNELGVBQ0FHLFVBQWV3RCxRQUNmdkQsU0FBZXVELElBQ2Z0RCxTQUFXc0QsR0FDWHJELGVBQ0FMLFFBQVcwRCxHQUNYekQsZUFDQVEsaUJBQ0FDLGVBQWdCZ0QsSUFFaEI3QyxXQUFZNEMsRUFDWjNDLFlBQVkyQyxFQUVacEUsU0FvREYsTUFBMkI0RCxFQUFJdEosSUFDN0IsR0FBS3NKLEVBQ0ksUUFBQXRKLENBQ1QsSUFBS0EsRUFDSSxPQUFBc0osRUFDVCxNQUFNVSxFQUFTclQsR0FBdUIzUyxRQUFPOGQsVUFBTyxFQUFPd0gsR0FDM0QsVUFBV2poQixLQUFPMlgsRUFDVGdLLEVBQUEzaEIsR0FBTzBoQixHQUFhVCxFQUFHamhCLE1BQVdBLEdBRXBDLFFBQ1QsSUE1REV1ZCxRQUFTK0QsQ0FDVDdELE9BZ0JGLFNBQXFCd0QsRUFBSXRKLEdBQ3ZCLE9BQU84SixHQUFtQnpDLE9BQXFCQSxFQUFnQnJILElBQ2pFLElBaEJBLFNBQVMySixDQUFZTCxFQUFJdEosR0FDdkIsVUFHS3NKLENBR0UsY0FDRyxPQUNOdmpCLFNBQW9CTyxRQUFLK1AsQ0FBTUEsU0FDL0J0USxRQUF3Qk8sV0FBVytQLFFBTDlCMkosYUFZRnFILE1BQ0gsU0FBYyxDQUNoQixPQUFNbmUsQ0FBTSxHQUNaLFVBQWEsU0FBV2pCLElBQVFrQixVQUN0QkEsRUFBTXdmLElBQUl4ZixDQUViLE9BQUFELE9BRUYsRUFBQXlmLENBQ1QsQ0FDQSxpQkFDRSxPQUFPVyxPQUFTLFFBQVEsRUFBR1csZUFDN0IsQ0FDQSx1QkFDUyxDQUFBWCxLQUFtQ3RsQixPQUFBOGQsUUFBTyx1QkFFMUM4SCxDQUF5Qk4sS0FDaEMsUUFBSUEsQ0FDRXpqQixPQUFlQSxHQUFRbWEsVUFDRSxDQUFJOUYsS0FBSSxPQUFJb1AsQ0FBT3RKLE9BRXpDckosQ0FDVzNTLGlCQUFjLE1BQ1JzbEIsU0FDUSxRQUFjLElBR3ZDdEosQ0FFWCxDQWFBLGNBQ1MsT0FDTGtLLE1BQUssUUFDTDlGLEVBQVEsQ0FDTitGLFlBQWFDLEdBQ2J2bEIsbUJBQ0FzZixhQUFrQixPQUNsQmdGLHNCQUNBa0Isc0JBQ0FDLGdCQUNBQyxnQkFBaUIsQ0FBQyxHQUVwQnpCLFNBQVEsQ0FDUjVCLGVBQ0FDLFdBQWEsS0FDYmUsTUFBaUNsa0IsVUFBQThkLFdBQ2pDb0gsZ0JBQWtDc0IsUUFDbENDLGVBQWdDRCxjQUNoQ0UsU0FBZ0NGLFFBRXBDLENBQ0EsTUFBSUcsQ0FBUSxFQUNaLFdBQVNDLENBQWFqRSxFQUFRa0UsU0FDNUIsQ0FBTyxlQUE4QyxNQUM5QzlrQixDQUFXK2tCLFFBQ0VuVSxFQUFPLFVBRVIsR0FBYm9VLElBQXNCOWtCLEdBQVM4a0IsSUFFckJBLElBQUEsTUFFZCxJQUFNamEsTUFBVWthLENBQ1ZDLFNBQXVDQyxVQUN6Q0MsRUFBWSxLQUNWLEdBQUFqQixFQUFNcFosS0FBUW9aLENBQU0sQ0FDeEJrQixLQUFNVCxVQUNOVSxPQUFZUCxDQUNaUSxjQUNBQyxTQUFZLEVBQ1o5YSxTQUFVSyxJQUNWMGEsWUFBVyxDQUFBQyxZQUVYLGNBQ0UsYUFDRixHQUNBLFlBQVcvRCxDQU1YLEVBQ0FnRSxJQUFBLENBQUlDLFFBQVc1ZSxFQUNUa2UsSUFBaUJ2RyxFQUFJaUgsU0FFSjVsQixHQUFXNGxCLENBQU9DLFdBQ3JDWCxDQUFpQnZOLElBQUlpTyxHQUNkQSxRQUFBQyxFQUFRMUIsTUFBUW5kLEdBQ2RoSCxHQUFXNGxCLEtBQ3BCVixFQUFpQnZOLElBQUlpTyxHQUNkQSxFQUFBekIsUUFBUW5kLEVBTVZtZCxHQUVUMkIsVUFFUy9hLEVBQVFnWSxPQUFPL0ssU0FBUzhOLElBQ25CL2EsR0FBQWdZLFFBQU92aEIsR0FBS3NrQixRQVcxQnhRLFFBQUEsQ0FBVWxXLGFBVUEraEIsU0FBVy9oQixHQUFRa1csRUFDcEI2TyxLQU5VaEQsV0FBVy9oQixHQVE5QjJtQixVQUFBLENBQVUzbUIsR0FBTTJtQixLQUlUQSxDQU1HaGIsRUFBQXFXLFdBQVdoaUIsR0FBUTJtQixFQUNwQjVCLEdBTkVwWixFQUFRcVcsV0FBV2hpQixHQVE5QixNQUFNNG1CLEVBQWVDLEVBQVd0USxHQUM5QixJQUFLeVAsRUFBVyxDQU9SLE1BQUFyUyxFQUFRTixHQUFZc1MsRUFBZUMsR0E0QnpDLE9BM0JBalMsRUFBTTRLLFdBQWE1UyxJQUNELEdBQWQ0SyxFQUNVQSxFQUFBLE9BQ1csT0FBZEEsQ0FDR0EsT0FBQSxHQVdWc1EsVUFDYUQsRUFFUnBGLEVBQUE3TixFQUFPaVQsSUFBZXJRLENBRW5CeVAsSUFBQSxDQUNaakIsRUFBSXFCLFdBQWFRLEVBQ2pCQSxFQUFjRSxvQkFLYzVRLGdCQUFvQkEsWUFNbEQsQ0FDRixFQUNBLE9BQUFWLEdBQ013USxPQUNLLElBQU1qQixLQUFJcUIsa0JBS05BLFdBQVdVLGFBSTFCLENBQ0FyRyxXQUFhdmYsV0FNSDZoQixRQUFnQjdoQixFQUNqQjZqQixNQUVULFdBQUFnQyxDQUFlamEsR0FDYixNQUFNa2EsRUFBVUMsR0FDSEEsS0FDVCxTQUNGLEVBQU9uYSxJQUNQLFFBQ2FtYSxVQUlaLFNBR1gsR0FBSUEsR0FBYSxLQUVqQixTQUFTeEcsTUFBYXZmLEVBQ3BCLE1BSU8sQ0FDTCxLQUFJNmhCLENBQVcvUCxHQUFnQitQLFNBQy9CLE1BQU1tRSxFQUFpQmxVLEdBQWdCVSxRQUFVVixNQUFnQlUsS0FBT3FQLGtCQUUzRC9QLEdBQWdCK1AsU0FBV2xrQixPQUFPOGQsWUFFL0NvRyxDQUFTN2YsR0FBT2hDLEtBQ2xCLEVBQ0YsQ0FDQSxTQUFTeWYsT0FBMEJ3RyxHQUF3QixHQUN6RCxNQUFNalUsT0FBOEJrSSxFQUNwQyxJQUFJbEksRUFBWStULEdBQVksQ0FDMUIsTUFBTWxFLGFBQStCclAsYUFBMEJDLENBQU00SyxnQkFBdUI1SyxPQUFNNEssVUFBV3dFLFFBQVc3UCxDQUFTUSxPQUFPcVAsVUFBV2tFLEdBQVczYixRQUFTeVgsU0FDbkssR0FBQUEsR0FBWTdmLEtBQU82ZixJQUNyQixLQUFPQSxhQUNFcUUsS0FBVXRrQixPQUFTLEVBQ3JCLE9BQUFxa0IsR0FBeUJ2bUIsR0FBV3ltQixVQUFrQ25VLEtBQXFCNkssVUFReEcsU0FBU3VKLE1BQ0EsUUFBR3RVLElBQW1Cb0ksS0FBNEI2TCxFQUMzRCxDQThIQSxjQUFnQ00sRUFBVXRULEVBQU8yTCxNQUMvQyxHQUFPaFksU0FBa0MrVyxXQUN6QyxLQUNJNkksQ0FEQUMsR0FBa0IsRUFFdEIsR0FBSUYsRUFDRixRQUFTcmtCLEtBQU9xa0IsRUFBVSxDQUNwQixHQUFBRyxHQUFleGtCLEdBQ2pCLFNBRUksWUFBaUJBLENBQ25CLFFBQ0EwRSxDQUFXeVcsR0FBT3pXLEtBQW9CK2YsRUFBU3prQixJQUM1QzBrQixHQUFpQkEsRUFBYWhQLFlBQVNpUCxDQUd6Q0wsT0FBa0MsTUFBS0ssQ0FBWTNtQixJQUY5QzJtQixHQUFZM21CLEdBSVY0bUIsRUFBZTVVLE9BQVM2VSxTQUFjN2tCLEdBQzFDQSxNQUFPMGMsRUFBVTFlLElBQVUwZSxHQUFNMWMsT0FDL0JBLEVBQU9oQyxFQUNLdW1CLEtBR3hCLENBRUYsR0FBSUcsS0FDSSxJQUFBSSxHQUFrQkMsRUFBTWhVLEdBQ3hCaVUsSUFBYVYsQ0FBaUJySixHQUNwQyxTQUFTbmEsQ0FBSSxFQUFHQSxFQUFJNGpCLEVBQWE5a0IsUUFBUWtCLEdBQUssSUFDdEMsS0FBTTRqQixFQUFhNWpCLEdBQ3pCaVEsVUFFRStULEVBQ0E5a0IsS0FDV0EsS0FFVm1iLEdBQU82SixFQUFZaGxCLFdBSW5CLENBQUF1a0IsQ0FDVCxDQUNBLFVBQVNVLEdBQWlCdmdCLENBQVNxTSxFQUFPL1EsR0FBS2hDLENBQU9nUyxFQUFVa1YsS0FDeEQsS0FBQWpHLENBQU12YSxFQUFRMUUsR0FDcEIsT0FBVyxFQUFQaWYsRUFBYSxDQUNULE1BQUFrRyxFQUFhaEssR0FBTzhELEtBQUssUUFDM0IsR0FBQWtHLFFBQXdCLE9BQzFCLE1BQU1oQixFQUFlbEYsRUFBSXRQLFFBQ3JCLEtBQUloSCxpQkFBU3ljLENBQWFuRyxLQUFJb0csVUFBZTNuQixHQUFXeW1CLEdBQWUsQ0FDbkUsTUFBQW1CLGNBQUVBLE1BQ1IsRUFBSXRsQixLQUFPc2xCLEtBQ0RBLENBQWN0bEIsMEJBR0FBLEdBQU9ta0IsRUFBYWxtQixVQUV4QzhTLElBRUlwSyxFQUNSLGlCQUtJLENBQ0Z1ZSxJQUFhQyxFQUNQbm5CLEdBQUEsR0FDQ2loQixFQUFJLElBQXNDLEtBQVZqaEIsR0FBZ0JBLElBQVV1bkIsR0FBVXZsQixRQUNyRSxHQUdkLElBQ08sSUFBQWhDLENBQ1QsWUFDU3duQixDQUFzQi9WLEVBQU00TCxFQUFZOEYsR0FBVSxHQUN6RCxVQUF5QmlCLFdBQ25CeFAsRUFBU2hCLEtBQU01UyxDQUFJeVEsYUFFaEIsR0FBQW1ELENBRVQsU0FBWW5ELENBQUtzQixNQUNYOEwsTUFDQTZILENBQWUsSUFDckIsR0FBSWUsSUFBYSxDQUNVLE1BQUMvbkIsQ0FBVytSLElBQy9CLFlBQ1NnVyxHQUFBLEdBQ2IsVUFBc0JELEdBQXNCRSxTQUM1Q3BYLEVBQU91TyxFQUFZOUwsS0FDZmpSLENBQ1c0a0IsRUFBQXhsQixhQUVaaWlCLGNBQTZCdmhCLE1BQ3JCeWIsRUFBQW9GLFNBQU8xZ0IsU0FFaEIwUCxHQUFLaVIsUUFDUGlGLEdBQVlsVyxDQUFLaVIsU0FFZmpSLEVBQUtnUixZQUNGQSxPQUFPMWdCLDBCQUlWbkMsR0FBUzZSLFlBQ0ttVyxJQUVYQSxjQUdQLE1BQVM5a0IsRUFBSSxFQUFHQSxJQUFRbEIsT0FBUWtCLEtBSTlCLGFBQW1DQSxJQUMvQitrQixhQUMwQjVLLEdBRWhDLFVBQ1NxRixDQUlULFVBQVd0Z0IsTUFBT3NnQixDQUFLLENBQ2YsTUFBQXdGLEVBQWdCckIsS0FBU3prQixDQUMzQixJQUFBNmxCLEVBQWlCQyxHQUFnQixDQUM3QixlQUNPakosRUFBV2lKLE9BQXlCN0csY0FBNEJ0VyxDQUFNc1csR0FBUTNRLElBQU8sS0FDbEcsR0FBSXlYLEVBQU0sQ0FDUixNQUFNQyxHQUFlQyxFQUFhQyxjQUFjdmQsRUFDMUN3ZCxHQUFjRixTQUFxQkYsR0FBS3BkLEtBQzlDb2QsRUFBSyxHQUFzQkMsR0FBZSxLQUNyQyxFQUEwQkcsRUFBYyxPQUFvQkEsQ0FDN0RILEdBQWUsTUFBYUQsUUFBTSxRQUNwQ3JCLENBQWF4bEIsUUFHbkIsQ0FDRixDQUVJLE1BQUEyQixLQUFtQjZqQixRQUlsQixHQUhIOW1CLEVBQVM2UixJQUNMbUMsUUFBVS9RLEdBRVhBLENBQ1QsQ0FDQSxTQUFTZ2xCLEdBQWlCN2xCLEdBQ3hCLE1BQWUsTUFBWEEsRUFBSSxLQUFld2tCLEdBQWV4a0IsSUFPeEMsUUFBU29tQixHQUFRQyxHQUNmLE9BQWEsR0FBVEEsTUFDSyxTQUVMLEdBQWdCLG1CQUFUQSxFQUNULGFBQVl2cEIsS0FDZCxHQUEyQixpQkFBVHVwQixJQUVoQixNQURhQSxFQUFLaG9CLG9CQUFvQkEsT0FBWXZCLE9BQ25DLENBQ2pCLENBQ08sVUFFVCxRQUFTd3BCLEdBQVc1UyxFQUFHNlMsR0FDckIsT0FBT0gsR0FBUTFTLE9BQU8wUyxDQUFRRyxHQUVoQyxTQUFTTixJQUFhdGQsQ0FBTTZkLEdBQ3RCLFFBQUFocEIsR0FBUWdwQixNQUNXQyxTQUFXQyxNQUFpQkEsRUFBRy9kLEtBQzNDakwsS0FBVzhvQixFQUNiRixHQUFXRSxNQUF1QixHQUc3QyxDQXlHQSxPQUFNRyxHQUFpQjNtQixFQUFtQixVQUFQLEVBQXNCLFlBQVJBLEdBQzNDNG1CLEVBQXNCNW9CLEdBQVVSLEdBQVFRLEdBQVNBLEdBQU13QixHQUFJcW5CLElBQWtCLENBQUNBLEdBQWU3b0IsYUFDOUR3SyxJQUNuQyxHQUFJc2UsRUFBUUMsV0FDSEQsQ0FFSCxNQUFBakssRUFBYW1LLE9BQVEsQ0FBSTdtQixRQU1IMm1CLElBQVczbUIsY0FHaEMsQ0FEUDBjLEVBQVd6RSxLQUFLLENBQ1R5RSxDQUFBLE1BRXFCb0ssYUFDNUIsR0FBTXplLENBQU15ZSxHQUFTQyxJQUNyQixjQUFXbG5CLENBQU9pbkIsRUFBVSxDQUMxQixNQUFrQmpuQixJQUNoQixRQUNJLE1BQUFoQyxFQUFRaXBCLEVBQVNqbkIsR0FDbkIsR0FBQXRDLE1BQ0Y4VCxPQUFhMlYsQ0FBY25uQixFQUFLaEMsR0FBT3dLLE9BQ3pDLEdBQW9CLE1BQVR4SyxFQUFlLENBTWxCLGNBQ0F3VCxFQUFBeFIsR0FBTyxJQUFNNmMsQ0FDckIsRUFDRixFQUVJdUssSUFBdUJwWCxHQUFVaUIsTUFNL0IsSUFBQTRMLEdBQWErSixHQUFtQjNWLE9BQzdCTyxHQUFNN0IsU0FBVSxHQUFNa04sRUFBQSxDQUUzQndLLEtBQWFyWCxDQUFVaUIsS0FDdkIsS0FBMkIsQ0FBM0JqQixFQUFTUyxlQUFNc0UsQ0FBZ0IsQ0FDakMsT0FBTXBNLENBQU9zSSxFQUFTeUgsR0FDbEIvUCxFQUNPcUgsRUFBQXdCLE1BQVF1VCxHQUFNOVQsSUFDbkJxVyxNQUFVLEdBQUszZSxHQUVuQjRlLEdBQ0V0VyxPQUNTTyxHQUFRLENBQUMsRUFDdEIsU0FFU0EsS0FBUSxHQUNiUCxHQUNGbVcsR0FBb0JwWCxFQUFVaUIsR0FHOUJxVyxHQUFBdFgsRUFBU3dCLE1BQU9nVyxPQUVoQkMsR0FBYyxDQUFDelgsSUFBb0J1RCxNQUNqQyxTQUFBOUMsRUFBRUEsRUFBT2UsV0FDZixJQUFJa1csSUFBb0IsQ0FDcEJDLEVBQTJCMU0sR0FDM0IsR0FBa0IsR0FBbEJ4SyxFQUFNc0UsaUJBQ0ZwTSxFQUFPc0ksTUFLQXNDLEtBQXNCLEdBQVQ1SyxDQUNGK2UsR0FBQSxHQUVwQnBaLEtBQWMyQyxHQUNUc0MsR0FBc0IsSUFBVDVLLGVBQ0grUCxDQUlqQmdQLElBQXFCelcsQ0FBUzJXLGVBQ0NwVyxFQUVObVcsRUFBQTFXLFdBRTNCbVcsS0FBOEJuVyxHQUNIMFcsSUFBRWhZLE9BQVMsSUFFeEMsR0FBSStYLEVBQ0YsV0FBVzFuQixRQUNKMm1CLENBQWMzbUIsTUFBeUMsSUFBakMybkIsa0JBSS9CLENBR0YsVUFBU0UsRUFBT0MsRUFBUUMsVUFBOEMsRUFDaEUsR0FBQXZxQixHQUFRc3FCLEdBVVYsZ0JBVE8vbkIsT0FDTCxFQUFDd2dCLENBQUd6ZixJQUFNK21CLE1BRVJFLEdBQWN2cUIsR0FBUXVxQixLQUF1QmpuQixHQUFLaW5CLElBQ2xEalcsQ0FDQXJCLEVBQ0F1WCxRQUtGblQsR0FBZXBFLFVBQ2pCLE1BRUksSUFBQXdYLEdBQTZCLENBQWxCeFgsTUFBTXNFLFNBQStCdEUsR0FBTXVDLFdBQWN2QyxLQUFNdUMsT0FBVTZILE1BQVFwSyxFQUFNeUUsR0FDbEdsWCxHQUFRZ3FCLENBQVksS0FBT0MsR0FDekJubkIsRUFBR29uQixHQUFPM0gsQ0FBR2xRLEdBQVF5WCxFQU92QkssRUFBU0osR0FBYUEsRUFBVXhILFVBQ25CdkcsS0FBU2lCLENBQVlpTixFQUFNbE8sU0FBWWtPLENBQU1sTyxLQUMxRHdCLEVBQWEwTSxFQUFNMU0sV0FXckIsR0FWVSxNQUFWMk0sR0FBa0JBLEtBQVc5WCxHQUMzQmxOLElBQVNnbEIsR0FDWG5PLEVBQUttTyxNQUFVLEdBQ1hoTixFQUFPSyxNQUFZMk0sQ0FDckIzTSxFQUFXMk0sR0FBVSxVQUVSQSxLQUNmQSxFQUFPbnFCLE1BQVEsT0FHZk4sR0FBVzJTLEdBQ2IrWCxHQUFzQi9YLEVBQUs2WCxZQUFtQmxPLElBQ3pDLENBQ0MsTUFBQXFPLEVBQVlsbEIsR0FBU2tOLEdBQ3JCaVksUUFDTixHQUFJRCxHQUFhQyxFQUFRLEVBQ3ZCLFNBQWMsR0FDWixHQUFJUixFQUFPdE4sR0FDVCxRQUFpQjZOLEdBQVlsTixHQUFPSyxDQUFZbkwsTUFBa0JBLEdBQU8ySixDQUFLM0osR0FBT0EsRUFBSXJTLE1BQ3JGZ3FCLE1BQ01PLEdBQWFDLEdBQU9ELFNBRWZBLEVBV0RBLEdBQVM3UyxVQUFTdVMsRUFDNUJNLEVBQVNycEIsU0FYTG1wQixFQUNHaFksS0FBTyxFQUFDNFgsR0FDVDlNLEVBQU9LLEVBQVluTCxNQUNWQSxJQUFPMkosRUFBSzNKLE1BR3pCQSxHQUFJclMsS0FBUSxDQUFDaXFCLEdBQ1RILEVBQU9ybUIsUUFDR0EsTUFBU3pELGFBTXBCcXFCLE9BQ0dycUIsTUFDRHdkLENBQVluTCxLQUNyQm1MLFlBRU84TSxDQUNUalksRUFBSXJTLE9BQVFBLENBQ1I4cEIsR0FBT3JtQixLQUNKcW1CLEdBQU9ybUIsRUFBS3pELEtBS25CQSxHQUNGeXFCLEVBQU10dEIsSUFBSyxFQUNYcVksR0FBc0JpVixFQUFPM1csSUFFdkIyVyxJQUtaLENBQ0YsQ0FFQSxJQUFJQyxRQUNKLElBRU1DLElBQW9CMVYsR0FGRkEsR0FBY0EsRUFBVTJWLGFBQWFsVCxVQUFTLGdCQUFnQyxTQUF0QnpDLEVBQVU0VixTQUdyRTVWLEdBQ1YsUUFIZ0JBLFdBQXdCMlYsU0FBYWxULE1BQVMsV0FJakR6QyxHQUNiLGNBRFQsRUFJSTZWLEdBQWFqYyxHQUEyQixRQUFia2MsT0FDakMsU0FBU0MsR0FBeUJDLEdBQzFCLE1BQ0pDLE9BQ0cvVixHQUNIZ1csR0FBR0MsVUFDREEsQ0FBQUMsV0FDQUEsRUFBQUMsWUFDQUEsRUFBQUMsV0FDQUEsR0FDQWYsZ0JBQ0FnQixDQUFBQyxjQUNBQSxJQUVBUixFQW1CRVMsR0FBZTdjLEdBQU00RCxDQUFPa1osRUFBaUI3WCxFQUFnQndCLEVBQWNDLEdBQVksS0FDM0YsTUFBTXFXLEdBQWtCZCxHQUFVamMsSUFBdUIsT0FBVCtNLEtBQzFDaVEsRUFBYSxJQUFNQyxnQkFRbkJuaEIsS0FBRUEsZ0JBQVdvTSxJQUFBZ1YsWUFBV0EsQ0FBY3RaLEVBQzVDLE9BQWM1RCxDQUFLa2MsVUFDbkJ0WSxDQUFNeUUsR0FBS3JJLEdBZVcsSUFBbEJrZCxTQUVGdFosRUFBTXVaLGtCQUFrQixJQUUxQixJQUFJQyxFQUFXLE1BQ2YsT0FBUXRoQixFQUNOLFFBQ2tCLElBQVp1aEIsTUFDcUIsQ0FBbkJ6WixLQUFNUSxZQUNLaUUsR0FBS21VLENBQVcsSUFBS0UsRUFBVzFjLEdBQU9BLEdBQ3pDb2QsRUFBQXBkLFlBS0orTSxPQUFTbkosT0FBTVEsTUFDUnlYLE1BVWQ3YixFQUFLK00sUUFBYTNJLFNBRXBCZ1osR0FBV1gsQ0FBWXpjLElBRXpCLE1BQ0YsS0FBS29NLE9BQ2dCcE0sT0FDTUEsTUFFZnFJLEdBQUtySSxFQUFLc2QsU0FBUUMsVUFDeEJ2ZCxFQUNBOGMsSUFHRk0sT0FEU0MsR0FBK0JOLENBQzdCQyxJQUVBUCxJQUFZemMsQ0FFekIsTUFDRixLQUFLd2QsS0FLQyxDQUpBVCxLQUVGTSxPQURtQnJkLElBQ0prYyxTQUVELGlCQUNIbGMsQ0FDTCxRQUFBeWQsQ0FBc0I3WixFQUFNUSxTQUFTclIsT0FDM0MsUUFBU2tCLEdBQUksQ0FBR0EsRUFBSTJQLE1BQU04WixrQkFFaEJ0WixjQUFZZ1osR0FBU2xCLGlCQUF3Q3lCLEdBQVlQLEtBQVNyUSxLQUN0RjlZLEVBQU0yUCxFQUFNOFosWUFBYyxXQUN0QnJYLEVBQVMrVyxlQUlaLEVBQUFMLEVBQWtCTixFQUFZVyxHQUFZQSxPQUluRCxLQUNGLE9BQUt4UixDQUlVd1IsRUFIUkwsR0FHUWEsQ0FDVDVkLEVBQ0E0RCxFQUNBa1osRUFDQTdYLEtBRUF5QixHQVJTc1csR0FXYixNQUNGLFFBQ0UsR0FBZ0IsRUFBWjlVLEVBSVdrVixFQUhJLElBQVpDLEdBQStCelosS0FBTTlILEVBQUsraEIsbUJBQXVCN0IsV0FBUTZCLFdBQW1CQyxHQUFlOWQsRUFHbkcrZCxFQUNUL2QsR0FDQTRELENBQ0FrWixFQUNBN1gsRUFDQXdCLEVBQ0FDLEdBUlNzVyxhQVdRLENBQVo5VSxFQUFlLENBQ3hCdEUsRUFBTTZDLGFBQWVBLEdBQ2YsUUFBWWlXLENBQVcxYyxLQWlCekIsQ0FmRm9kLEVBREVMLEdBQ1NpQixDQUFvQmhlLEdBQ3RCaWMsR0FBVWpjLGVBQXVCLFFBQWRBLEVBQUsrTSxLQUN0QmlSLEVBQW9CaGUsRUFBTUEsZ0JBQVcsU0FFekJBLEdBRXpCaWUsT0FHRSxJQUNBbkIsRUFDQTdYLEtBQ2lCbUIsR0FDakJNLElBRUVzQixLQUF1QixDQUNyQixJQUFBTixnQkFHTXJCLHNCQUE2QjZYLHNCQUVULEVBQWxCbGUsV0FBc0JtZSxHQUFnQixLQUFNN2EsR0FBWSxNQUVwRW9FLEVBQVFXLEdBQUtySSxFQUNiNEQsRUFBTXVDLFVBQVV1QixZQUNsQixLQUNxQixFQUFaUSxRQUNMbVYsRUFDU0wsTUFFTWxoQixXQUFLNlosR0FDcEIzVixDQUNBNEQsVUFLQXdZLEVBQ0FnQyxNQUdpQixDQUFabFcsS0FDVGtWLENBQVd4WixFQUFNOUgsS0FBSzZaLFdBRXBCL1IsQ0FDQWtaLEVBQ0E3WCxFQUNBNlcsWUFFQXBWLENBQ0EwVixFQUNBUyxNQVNELFFBSEksR0FBUHJaLFVBQ1UsV0FJVnVhLEVBQWlCLENBQUMxVixPQUE0QnBELENBQWdCd0IsS0FBY0MsRUFDcEVBLE9BQWU5QyxFQUFNdVosZ0JBQ2pDLFFBQU1yaEIsR0FBRUEsSUFBTW9JLFFBQUFnWixRQUFPQSxZQUFXaFYsRUFBV21XLE9BQUEvVixZQUFNQSxFQUFlMUUsRUFDMUQwYSxVQUFzQixFQUFUeGlCLE1BQTZCLFFBQVRBLFVBQzBDLEdBQWxCb2hCLEVBQWtCLENBQzNFbUIsR0FDa0JFLFNBQU8sQ0FBTXpCLEtBQWlCLFNBRXBELElBaUZJMEIsQ0FqRkFDLE9BQ0EsQ0FBQVgsTUFDd0JXLEVBQUFDLElBQWV6WixDQUFnQnFELGFBQWtEMUUsRUFBTU0sUUFBUzRZLENBQWdCbFosWUFBWSthLE9BQ2hKLE1BQUFyQixFQUFValYsRUFBR2lWLFFBQVFDLFdBQ3ZCa0IsSUFDRm5XLENBQVdzVyxZQUFZdEIsR0FFYnVCLEVBQUF2QixPQUNaMVosR0FBTXlFLEVBQUtBLEVBQUtpVixDQUNsQixDQUNBLEdBQWdCLEdBQVpwVixLQUNGaEUsSUFBVUEsRUFBTTFWLG9CQUFtQnN3QixnQkFFakN6VyxHQUFHa1YsVUFDSDNaLEVBQ0F5RSxFQUNBeVUsRUFDQTdYLEVBQ0F3QixLQUlGLEtBQU9uTixZQVdMLElBQU15bEIsRUFBTXpsQixFQUNaQSxHQUFPQSxDQUFLbWpCLGNBQ0xzQyxFQUNULE9BQ3FCLEVBQVo3VyxHQUNMRyxFQUFHeVcsZUFBZ0JsYixDQUFNUSxpQkFTM0JpRSxFQUFHeVcsZ0JBQW9CMWEsV0FHdkJGLEVBQ0YsR0FBaURvYSxJQUFlNVgsR0FBYSxHQUFBd1csR0FDM0UsU0FBVy9wQixLQUFPK1EsV0FJTzhhLGNBQVMsR0FBb0Isa0JBQVI3ckIsUUFBaUNBLE1BQVN3a0IsQ0FBZXhrQixJQUMxRixNQUFYQSxFQUFJLE9BRUFrVixHQUNBbFYsQ0FDQSxLQUNBK1EsRUFBTS9RLFFBQ04sT0FDQSxFQUNBMnBCLFdBSVNtQyxRQUNmMUMsRUFDRWxVLEtBQ0EscUJBRU00Vyx1QkFRSy9hLENBQVNBLEVBQU1nYixxQkFDZDlYLE9BQTZCeEQsR0FFM0N5YSxPQUNrQnphLENBQU8sVUFBdUIsZUFFL0M0YSxDQUFhdGEsR0FBU0EsRUFBTTZDLGlCQUFtQnNYLEdBQVFJLElBQzFEVSxNQUF3QixPQUNSL1gsR0FBZ0JvWCxDQUFZMUIsRUFBaUJsWixHQUNoQzZhLEdBQUFuVyxLQUFXOFcsR0FBTS9XLEtBQzVDZ1csQ0FBUUUsTUFBMkIsTUFBdUIsV0FBUyxHQUNsRXRaLENBRVAsRUFDQSxPQUFPb0QsQ0FBR29VLFlBQUEsQ0FFTjJCLEVBQWtCLENBQUNwZSxFQUFNcWYsRUFBYWpaLEdBQVcwVyxDQUFpQjdYLEVBQWdCd0IsRUFBY0MsS0FDeEZBLE9BQWUyWSxFQUFZbEMsZ0JBQ3ZDLE1BQU0vWSxFQUFXaWIsR0FBWWpiLFFBQ3ZCdUcsR0FBSXZHLENBQVNyUixPQUVuQixXQUFhLENBQUdrQixFQUFJMFcsRUFBRzFXLElBQUssQ0FDcEIsUUFBUXlTLEdBQVl0QyxDQUFTblEsR0FBS21RLEVBQVNuUSxHQUFLK2xCLEdBQWU1VixFQUFTblEsSUFDOUUsR0FBSStMLEVBQ0tBLEVBQUE2YyxJQUVMalosRUFDQWtaLEVBQ0E3WCxFQUNBd0IsUUFDQUMsS0FFTzlDLEVBQU05SCxPQUFTd2pCLEtBQVMxYixFQUFNUSxTQUN2QyxTQUVjeVgsSUFBQSxFQVVkdlYsRUFDRSxjQUlBd1csRUFDQTdYLFlBTUMsV0FFSDJZLENBQWtCLENBQUM1ZCxTQUE4Q3lHLENBQWNDLE1BQzdFLFFBQUVELFdBQWM4WSxFQUF5QjNiLEVBQzNDMmIsSUFDRjlZLEVBQWVBLEVBQWVBLEVBQWFzTyxPQUFPd0ssR0FBd0JBLEdBRXRFLFVBQXVCdmYsWUFHM0I0RCxFQUNBd0MsR0FDQTBXLENBQ0E3WCxFQUNBd0IsS0FHRixPQUFJbk4sR0FBUTJpQixHQUFVM2lCLElBQXVCLE1BQWRBLEVBQUt5VCxZQUNUMUcsSUFBUy9NLElBRXBCdWlCLElBQUEsRUFDZGMsRUFBTy9ZLEVBQU15QyxRQUFTdVcsQ0FBYyxLQUFNeFcsRUFBVzlNLEdBQzlDQSxLQUdMMmpCLENBQWlCLEVBQUNqZCxDQUFNNEQsRUFBT2taLEVBQWlCN1gsRUFBZ0J3QixFQUFjK1ksS0FZbEYsR0FYYzNELElBQUEsRUFVZGpZLElBQU15RSxDQUFLLEtBQ1BtWCxFQUFZLENBQ1IsT0FBQTdyQixDQUFNcXFCLElBQW9CaGUsQ0FDaEMsUUFDUSxZQUFvQkEsQ0FDdEIsUUFBU3lmLEdBQVU5ckIsU0FDckJnb0IsQ0FBTzhELFFBTVAsWUFDWS9DLENBQVcxYyxHQVl0QixRQVhQMmIsQ0FBTzNiLEdBQ1BzRyxHQUNFLElBQ0ExQyxFQUNBd0MsUUFJQTBWLEdBQWlCMVYsR0FDakJLLEdBRUtuTixFQUFBLENBRUgwa0IsYUFBaUQsT0FDckQsSUFBSXhxQixFQUFRLEVBQ1osS0FBT3dNLElBRUQsR0FESkEsR0FBT3ljLENBQVl6YyxLQUNQaWMsR0FBVWpjLEtBQ2hCQSxFQUFLK00sT0FBUzJTLEdBQ2hCbHNCLElBQ0V3TSxFQUFLK00sUUFBUzRTLEVBQU8sQ0FDdkIsS0FBYyxFQUFWbnNCLEdBQ0Ysb0JBT0QsRUFBQXdNLFFBRXFCNGYsV0FDNUIsRUFBTUMsRUFBY0QsTUFBUWxELE9BQ3hCbUQsT0FDVUMsbUJBRWQsQ0FBSW5jLE9BQ0osRUFBT0EsTUFDTUMsT0FBTXlFLEdBQU91WCxRQUNmaGMsSUFBTXlFLEdBQUsxRSxFQUFPK0QsUUFBUVcsTUFFbkMxRSxHQUFTQSxDQUFPQSxPQUNsQixDQUVJbWEsRUFBa0I5ZCxHQUNHLFFBQWJrYyxRQUErRCxnQkFBMUJGLE9BQVE2QixjQUVwRCxPQWpjUyxDQUFDamEsRUFBT3dDLEtBQ2xCLElBQUNBLEdBQVUyWixnQkFPYixNQUhNelosR0FBQSxnQkFDWTBaLEdBQ2xCNVosRUFBVTZaLE9BQVNyYyxHQUdQaVksSUFBQSxJQUNGelYsRUFBVW1YLGFBQW1CLEtBQU0sS0FBTSxVQUNuQ3lDLENBQ2xCNVosR0FBVTZaLE1BQVNyYyxFQUNmaVksS0FDRmpxQixPQUFRb0csT0FBTSw4Q0FDaEIsRUFpYmU2a0IsRUFDbkIsR0E4S0EsSUFBTWxXLFFBQ04sU0FBU3VaLENBQWVyb0IsR0FDdEIsUUFBT3NvQixFQUFtQnRvQixPQUU1QixZQUNTLFlBQTRCc2tCLEdBRXJDLFNBQVNnRSxTQUlRQyxJQUNSQyxTQUFVLElBSVgsTUFDSjFELE1BQVEyRCxDQUNSM0UsT0FBUTRFLEVBQ1JoRSxXQUFXaUUsQ0FDWGpiLGNBQWVrYixFQUNmakUsY0FDQUksYUFBZThELEVBQ2ZDLFNBQVNDLENBQ1RDLGlCQUNBbkUsV0FBWW9FLEVBQ1pyRSxjQUNBc0UsY0FBNkJ6TixFQUM3QjBOLHlCQUVJMWEsRUFBUSxDQUFDMmEsRUFBSUMsSUFBZTdhLEVBQVMsY0FBK0MsS0FBTUcsT0FBWSxFQUFRQyxFQUFlLFNBQXlGeWEsRUFBRy9ELDJCQUNsTitELENBQ1QsT0FFRUQsSUFBT2piLEdBQWdCaWIsR0FBSUMsSUFDN0I3YSxLQUF5QjRhLEdBQ2pCeGIsQ0FBQXdiLEtBQXFCaGMsRUFBZ0IsSUFDeENnYyxDQUFBLE9BRWtCLElBQXJCQyxFQUFHaEUsWUFDT3hXLEtBQ1p3YSxFQUFHL0QsZ0JBQWtCLE1BRXZCLFlBQVFyaEIsQ0FBTTBILGdCQUFLMEUsSUFBY2daLENBQ2pDLE9BQVFwbEIsR0FDTixVQUNjbWxCLEdBQUlDLENBQUk5YSxFQUFXQyxHQUMvQixNQUNGLEtBQUsrRixHQUNnQitVLEVBQUFGLEVBQUlDLEVBQUk5YSxLQUMzQixjQUVVLE1BQU42YSxHQUNjRyxNQUFlL2EsRUFBUUcsb0JBT3ZDeWEsQ0FDQUMsRUFDQTlhLG9CQVFGLENBQ0YsbUJBS01BLENBQ0FDLEVBQ0F5VyxRQUlBcFcsR0FFbUIsT0FFbkJ1YSxDQUNBQyxFQUNBOWEsRUFDQUMsSUFFQXBCLEdBQ0F1QixDQUNBQyxHQUNBQyxHQUVtQixJQUFad0IsRUFhWSxNQUFaQSxFQVpKcE0sRUFBQXVsQixRQUNISixFQUNBQyxFQUNBOWEsRUFDQUMsRUFDQXlXLEVBQ0E3WCxHQUNBdUIsQ0FDQUMsRUFDQUMsR0FDQTRhLEVBbUJHLE9BQVA5ZCxFQUFlc1osR0FDVnRaLEtBQUt5ZCxHQUFNQSxFQUFHemQsSUFBS3lCLEVBQWdCaWMsR0FBTUQsR0FBS0MsRUFDdkQsRUFFSUssT0FBdUJuYixHQUFXQyxJQUN0QyxJQUFVLEtBQU40YSxJQUVBQyxFQUFHN1ksUUFBdUJqRSxrQkFJdkIsQ0FDQyxNQUFBaUUsV0FBZ0JBLENBQ2xCNlksRUFBRzljLGFBQWdCQSxXQUNUd2MsQ0FBQXZZLEdBQUk2WSxDQUFHOWMsU0FFdkIsSUFFSStjLENBQXFCLENBQUNGLEVBQUlDLEdBQUk5YSxDQUFXQyxTQUNuQyxHQUFONGEsQ0FDRlgsSUFDS2pZLFNBQTBCakUsV0FBWSxDQUN6Q2dDLEtBSUY4YSxFQUFHN1ksTUFBUUEsQ0FDYixNQUV1QjZZLENBQUk5YSxFQUFXQyxFQUFRRyxNQUM3QzBhLE1BQU9BLENBQUc3YSxVQUNUNmEsUUFBRzljLGVBS0g4YyxDQUFHN2EsVUFvQ0RtYixDQUFpQixFQUFDUCxDQUFJQyxFQUFJOWEsRUFBV0MsR0FBUXlXLENBQWlCN1gsRUFBZ0J1QixHQUFXQyxDQUFjQyxLQUMzRixRQUFad2EsRUFBR3BsQixLQUNPMEssRUFBQSxTQUNTLGVBQ1RBLEVBQUEsVUFFSixNQUFOeWEsRUFDRlEsT0FHRXBiLENBQ0F5VyxLQUVBdFcsQ0FDQUMsRUFDQUMsR0FHRmdiLEVBQ0VULEVBQ0FDLEVBQ0FwRSxLQUVBdFcsQ0FDQUMsRUFDQUMsR0FFSixDQUVJK2EsVUFBMEMzRSxDQUFpQjdYLEVBQWdCdUIsRUFBV0MsRUFBY0MsS0FDcEcsSUFBQTJCLEVBQ0F2QixJQUNKLFVBQVE1QyxFQUFBZ0UsZUFBa0JJLFdBQUErVixJQUFZQSxPQXlCdEMsQ0F4QkFoVyxFQUFLekUsRUFBTXlFLEdBQUtvWSxFQUNkN2MsRUFBTTlILFVBRUdvSSxNQUNUQSxFQUVjLEVBQVpnRSxLQUNpQkcsQ0FBSXpFLEtBQU1RLE9BQ1IsR0FBWjhELFVBRUQ5RCxNQUNOaUUsRUFDQSxTQUdBc1osR0FBeUIvZCxFQUFPNEMsUUFLaEM2WCxHQUNrQkUsR0FBQTNhLEVBQU8sUUFBdUIsVUFFcERtZCxFQUFXMVksRUFBSXpFLEdBQU9BLENBQU1rSSxRQUFTckYsRUFBY3FXLEdBQy9DNVksRUFBTyxDQUNULFVBQVcvUSxLQUFPK1EsRUFDSixVQUFSL1EsR0FBb0J3a0IsSUFBZXhrQixNQUVuQ2tWLENBQ0FsVixFQUNBLEtBQ0ErUSxFQUFNL1EsR0FDTnFULFVBQ01wQyxLQUVOYSxFQUNBMmMsR0FJRixjQUNGcEIsQ0FBY25ZLEdBQUksUUFBUyxJQUFNbkUsUUFBYXNDLElBRTVDTSxPQUFrQm9ZLGtCQUNKOVgsR0FBQU4sS0FBNEJsRCxDQUVoRCxPQVlzQkEsR0FBTyxJQUFNa1osRUFBaUIsa0JBRTlDLEdBQUEyQixJQUEwQkMsQ0FBZXpaLEdBQWdCcUQsa0JBRWxEc1csQ0FBWXZXLEdBRWRpWSxHQUFBalksQ0FBSWpDLEVBQVdDLE1BQ3JCUyxDQUFZNUMsR0FBU0EsRUFBTTZDLGlCQUFtQjBYLEdBQTJCSixpQkFFN0RqWCxHQUFnQk4sQ0FBV2dXLEVBQWlCbFosR0FDOUI2YSxHQUFBblcsRUFBVzhXLE1BQU0vVyxHQUM1Q2dXLEdBQVFFLEdBQW9CM2EsRUFBTyxLQUFNa1osS0FBaUIsT0FBUyxJQUNsRTdYLENBQ0wsRUFFSThiLEVBQWEsRUFBQzFZLENBQUl6RSxPQUE4QmtaLElBSXBELElBSEloUixFQUNGK1YsR0FBZXhaLENBQUl5RCxLQUduQixZQUFnQjdYLEdBQUl3UyxDQUFhMVQsT0FBUWtCLEtBQ3hCNHRCLENBQUF4WixFQUFJNUIsRUFBYXhTLElBR3BDLEdBQUk2b0IsRUFBaUIsQ0FLbkIsR0FBSWxaLElBSlVrWixFQUFnQnBWLFNBSzVCLE9BQU0yWCxDQUFjdkMsRUFBZ0JsWixNQUNwQ21kLE1BR0UxQixFQUFZdlQsUUFDWnVULEdBQVk1WSxZQUNacVcsR0FBZ0JuWixRQUd0QixHQUVJbWUsQ0FBZ0IsQ0FBQzFkLEVBQVVnQyxFQUFXQyxFQUFReVcsTUFBNENyVyxLQUF5Qi9TLENBQVEsTUFDL0gsT0FBU08sRUFBSVAsU0FBb0JYLFFBQWEsQ0FDNUMsTUFBTW1aLEVBQVE5SCxFQUFTblEsR0FBS3lTLEVBQVlxYixHQUFlM2QsTUFBZTRWLEdBQWU1VixJQUFTblEsTUFFNUYsR0FDQWlZLEVBQ0E5RixFQUNBQyxFQUNBeVcsRUFDQTdYLE1BR0F5QixFQUVKLElBRUlnYixDQUFlLENBQUNULEVBQUlDLEVBQUlwRSxFQUFpQjdYLEVBQWdCdUIsRUFBV0MsRUFBY0MsS0FDaEYsV0FBUTJCLEVBQUs0WSxXQUNmL0QsU0FBRUEsQ0FBQUMsa0JBQTRCa0IsUUFBUzZDLEdBQzNDaEUsR0FBNEIsR0FBZitELENBQUcvRCxhQUNWLEdBQUE4RSxRQUFjOWQsSUFBU2tLLEVBQ3ZCNlQsRUFBV2YsR0FBR2hkLFFBQVNrSyxDQUN6QixJQUFBdEgsRUF3Q0osU0F2Q2lDZ1csR0FBaUIsS0FDOUNoVyxDQUFZbWIsRUFBU0Msc0JBQ1A5YSxHQUFBTixFQUFXZ1csR0FBaUJvRSxDQUFJRCxNQUc1QjFDLGVBQXlCLFVBRTVCekIsSUFBQXFGLEVBQWNyRixJQUFpQixPQVE5Q21FLENBQUc5RCxxQkFHSEwsQ0FDQTdYLEtBQ3lCaWMsT0FDekJ6YSxDQUtRQyxPQUdSd2EsRUFDQTdZLEVBQ0EsT0FFQXBELEVBQ0EwYyxJQUF5QlQsQ0FBSTFhLE1BRTdCLE9BR2UsQ0FDakIsT0FBSTBXLENBQ0ZrRixFQUNFL1osTUFHQTRaLEVBQ0FuRixJQUVBdFcsUUFXRixPQVJJMFcsQ0FDRThFLEVBQVNLLGFBQW1CQSxRQUNaLFFBQVMsU0FBZUEsT0FHOUIsRUFBWm5GLE1BQ1k3VSxDQUFJLFlBQWtCbmEsT0FBZ0JBLE1BQU9zWSxFQUU3QyxPQUNkLFNBQXlCOGIsWUFDekIsUUFBU3J1QixLQUFPQSxDQUFJc3VCLEVBQWN4dkIsT0FBUWtCLElBQUssQ0FDdkMsU0FBTXN1QixDQUFjdHVCLEdBQ3BCNkksTUFBZ0IzSixDQUNoQm1HLEVBQU8yb0IsTUFDVDNvQixHQUFTd0QsR0FBZ0IsVUFBUjNKLEdBQ25CcXRCLEVBQ0VuWSxFQUNBbFYsRUFDQTJKLEVBQ0F4RCxPQUVHOEssUUFDSDBZLE9BTVIsQ0FFYyxFQUFaSSxPQUNLOVksU0FBYThjLEVBQUc5YyxVQUNGb2UsT0FBT3BlLFNBR3JCLEtBQUNzQyxXQUFheVcsQ0FDdkJpRixFQUNFL1osVUFLQXBELEVBQ0F1QixLQUdDTSxNQUFxQjJiLGdCQUFtQnBFLEdBQzNDMVgsSUFBc0IsS0FDcEJHLElBQWFNLEVBQWdCTixPQUFnQ21hLEVBQzdENUMsR0FBUUUsT0FBNEJ6QixFQUFpQixVQUFTLEdBQzdEN1gsTUFHb0IsQ0FBQ3lkLEVBQWFDLEVBQWFDLEVBQW1COUYsRUFBaUI3WCxLQUEyQndCLElBQ25ILFFBQVN4UyxFQUFJLEVBQUdBLE1BQWdCbEIsVUFDeEIsTUFBQTh2QixFQUFXSCxFQUFZenVCLElBQ3ZCNnVCLENBQVdILEVBQVkxdUIsR0FDdkJtUyxHQUdKeWMsQ0FBU3hhLE9BRUN2TSxPQUFTOFAsUUFFRmlYLEVBQVVDLElBQ0wsR0FBdEJELEVBQVMzYSxXQUF3QjRZLEVBQWUrQixFQUFTeGEsSUFBRSxFQU03RC9CLEVBQ0V1YyxLQUVBemMsQ0FDQSxRQUVBbkIsQ0FDQXVCLEVBQ0FDLEdBQ0EsRUFFSixHQUVJMmIsRUFBYSxDQUFDL1osS0FBVzJaLENBQVVDLEVBQVVuRixLQUFpQ3RXLElBQ2xGLEdBQUl3YixJQUFhQyxJQUNmLElBQUlELElBQWE1VCxDQUNmLFlBQVdqYixHQUFPNnVCLE9BQ0k3dUIsRUFBVUEsS0FBTzh1QixHQUNuQ3pCLEVBQ0VuWSxFQUNBbFYsRUFDQTZ1QixHQUFTN3VCLEdBQ1QsS0FDQXFULENBQ0E1QyxLQUFNUSxPQUNOMFksQ0FDQTdYLE9BTVIsUUFBVzlSLEtBQU84dUIsS0FDaEIsQ0FBSXRLLE1BQ0YsU0FDSSxVQUFnQnhrQixNQUNUNnVCLENBQVM3dUIsTUFDbEJtRyxDQUFTd0QsT0FBZ0IsUUFBUjNKLENBQ25CcXRCLEtBRUVydEIsQ0FDQTJKLE1BR0E4RyxRQUFNUSxHQUNOMFksS0FFQThFLENBR04sQ0FDSSxXQUFXSyxRQUNLLE1BQVNELEVBQVM3d0IsTUFBTzh3QixNQUFTOXdCLE9BSXBENHhCLEVBQWtCLE9BQW9CMWMsRUFBUXlXLEVBQWlCN1gsRUFBZ0J1QixFQUFXQyxFQUFjQyxLQUM1RyxNQUFNc2MsTUFBeUIzYSxDQUFLNFksTUFBUTVZLENBQUs0YSxRQUN2Qi9CLEVBQUc3YSxPQUFTNGEsRUFBS0EsRUFBRzVhLE9BQVM0YyxPQUN2RCxPQUFJL0YsU0FBRUMsZUFBV0EsSUFBaUIxVyxlQUF1Q3lhLENBT3JFM0IsUUFDNEI5WSxFQUFhc08sT0FBT3dLLElBQXdCQSxFQUVsRSxNQUFOMEIsTUFDUytCLENBQXFCNWMsTUFDckJrYSxDQUFBNEMsUUFDWHBCLENBS0VaLEVBQUc5YyxVQUFZLEdBQ2ZnQyxHQUNBOGMsQ0FDQXBHLEtBRUF0VyxDQUNBQyxNQUlFeVcsRUFBWSxLQUFpQixDQUFaQSxHQUFrQkMsR0FFdkM4RCxJQUFHOUQsZ0JBQ0RnRyxDQUNFbEMsRUFBRzlELGtCQUVIL1csRUFDQTBXLEVBQ0E3WCxFQUNBdUIsR0FDQUMsUUFTVSxDQUFWeWEsRUFBRy90QixLQUFlMnBCLEdBQW1Cb0UsSUFBT3BFLEVBQWdCcFYsVUFFNUQwYixHQUNFbkMsRUFDQUMsR0FDQSxLQUtKbUMsQ0FDRXBDLEVBQ0FDLEVBQ0E5YSxPQUdBbkIsQ0FDQXVCLEVBQ0FDLEtBSU4sQ0FFSTZjLEVBQW1CLENBQUNyQyxZQUE0RHphLEVBQVdDLGFBQzVGQSxTQUFlQSxFQUNSLE1BQU53YSxFQUNpQixJQUFmQyxFQUFHaFosV0FDTDRVLENBQWdCbmhCLElBQUl1SyxTQUNsQmdiLElBRUE3YSxFQUNBRyxPQUtBMGEsRUFDQTlhLEtBRUEwVyxDQUNBN1gsRUFDQXVCLElBQ0FFLENBSVk2YyxFQUFBdEMsT0FDbEIsQ0FFSWhELEVBQWlCLENBQUN1RixNQUFpQzFHLEVBQWlCN1gsRUFBZ0J1QixFQUFXRSxLQUM3RixNQUFBdkQsRUFBWXFnQixFQUFhcmQsWUFBWXNkLENBQ3pDRCxFQUNBMUcsRUFDQTdYLEdBcUJGLEdBWkltRSxHQUFZb2EsS0FDZHJnQixFQUFTeEgsT0FBSW1KLE1BQVd3YyxHQU14Qm9DLEdBQWV2Z0IsR0FLYkEsRUFBU3dnQixVQUVQLEdBRGMxZSxLQUFlMmUsWUFBWXpnQixFQUFVMGdCLFVBRXJELE9BQU1DLENBQWMzZ0IsRUFBU3VFLFVBQVVwRSxDQUFZOEksSUFDaEMrVSxFQUFBLEtBQU0yQyxFQUFhMWQsRUFBV0MsRUFDbkQsT0FFQXdkLEVBQ0UxZ0IsRUFDQXFnQixFQUNBcGQsT0FHQUksQ0FDQUUsT0FRbUJ1YSxFQUFJQyxFQUFJeGEsVUFDekIsQ0FBQXZELEVBQVcrZCxFQUFHL2EsWUFBZUEsVUFDbkMsR0Evd0pKLFNBQStCNGQsRUFBV0MsRUFBV3RkLEdBQ25ELE1BQVF4QyxNQUFPK2YsRUFBVzdmLFNBQVU4ZixFQUFBL2QsVUFBY0EsR0FBYzRkLElBQ3hEN2YsS0FBT2lnQixFQUFXL2YsU0FBVWdnQixFQUFBbEgsVUFBY0EsR0FBYzhHLE1BQ3hDaE0sY0FJcEIsR0FBQWdNLENBQVUzRixNQUFRMkYsRUFBVTFiLFdBQ3ZCLFNBRUwsS0FBQTVCLEdBQWF3VyxHQUFhLFFBbUI1QixJQUFJZ0gsSUFBZ0JFLEdBQ2JBLEdBQWlCQSxNQUFhckosU0FJakNrSixDQUFjRSxJQUdiRixHQUdBRSxHQUdFRSxHQUFnQkosS0FBc0J0UCxRQWhDN0MsRUFBZ0IsS0FBWnVJLElBQ0ssUUFFVCxHQUFnQixHQUFaQSxDQUNGLE9BQUsrRyxFQUdFSSxPQUFzQzFQLE1BRmxDd1AsQ0FHYixHQUF1QixFQUFaakgsRUFBZSxDQUN4QixPQUFNb0YsQ0FBZTBCLEtBQVUxQixzQkFDZnJ1QixFQUFJcXVCLEVBQWF2dkIsT0FBUWtCLElBQUssR0FDdEMsTUFBTXF1QixFQUFhcnVCLE9BQ3JCa3dCLENBQVVoeEIsS0FBUzh3QixTQUFtQmxNLENBQWVwRCxVQUNoRCxHQUVYLENBQ0YsQ0FrQkssV0FrdUpxQnNNLENBQUlDLFNBQ3hCL2QsRUFBU3dnQixrQkFBc0JXLFVBUWpDLFlBSnlCQyxDQUFBcGhCLEVBQVUrZCxLQU1uQy9kLFdBMy9LUixVQUNRLGNBQVUzUSxRQUNaeUIsY0FDSTFCLEVBQU8wQixRQXkvS2MrUCxpQkFDUEYsZ0JBQ1BFLEdBQ1gsVUFFR3FFLENBQUs0WSxFQUFHNVksU0FDRnpFLEVBQVFzZCxDQUNuQixFQUVJMkMsRUFBb0IsT0FBb0N4ZCxjQUM1RCxHQUFNbWUsS0FBb0IsV0FDVnZPLFVBMkZaLENBQUkzYyxnQkFBZXFLLFNBQUFDLGFBRVgsUUFBdUI2Z0IsT0FDN0IsQ0FBSUMsRUFVRixTQVRJcHJCLGVBRXVCNkosQ0FBVTdKLEVBQU1vTixZQUV0QmlkLFNBQVN2dUIsVUFDdkIrTixFQUFTMEcsbUJBTXBCLENBQ0EsSUFDSS9DLEtBRGF4TixDQUtqQjZvQixhQUVFN29CLENBQUsrTyxHQUFLekUsS0FDZTJnQixFQUFBcGhCLEVBQVU3SixxQkFPakN3TixDQUFZeE4sRUFBSzRLLFlBQWNBLFlBQU1nZSxpQkFDdkJwYixDQUFXbkQsRUFBUXJLLE9BRXJDNm9CLENBQWNoZixjQUlHd2hCLEdBQW9CeGhCLEtBSXBCQSxVQUNqQkEsRUFBU3VFLFFBQVVrZCxlQVFPdmMsQ0FFeEJ3YyxFQUFnQkMsWUFRYnpjLEdBQUt1YyxFQUFTdmMsT0FDQSxVQUNEbEYsQ0FBVXloQixFQUFTdmMsZUFHVnBELENBRXZCNkIsRUFBWXhOLEVBQUs0SyxPQUFTNUssVUFBV21wQixxQkFFckMsRUFBTXJiLFFBQW1DOU4sQ0FBTXNLLGFBaEsvQyxHQUFBa0QsS0FDRSxjQUFNNUMsR0FBVXNmLE9BQ2R1QixDQUFBNWYsZ0JBQ0Y2ZixFQUFzQmhkLE1BUzVCLFNBUndCLFFBRXRCZCxDQUFlNmQsSUFFWkMsVUFBNkM5Z0IsQ0FBTWdiLHFCQUN0QzlYLEdBQUFOLEVBQVduRCxLQUU3QndlLFNBQ0k5WixHQUFNd1UsT0FDUixZQUlXblYsZ0JBUVBXLENBQ0FsRixFQUFTdUUsa0JBSVgsQ0FLRXNkLEVBQ1d4QixFQUFBMW5CLFFBQUtpSCxhQUFnQjNOLE1BS2hDLE9BQWdCeVUsY0FBZW9iLFFBSW5DLFdBS0EsQ0FBTXZkLEVBQVV2RSxPQUFTdUUsaUJBU3ZCQSxDQUNBdEIsRUFDQUMsS0FFQXBCLENBQ0F1QixhQVVKLEdBSElyQixPQUNvQkEsQ0FBR0YsV0FFY2YsRUFBU0EsTUFBTTZDLFlBQWlCLEtBQ3ZFLFVBRUUsSUFBTUssY0FHVixDQUM2QixJQUF6Qm9jLEVBQWF0YixjQUE2QkYsUUFBc0JwRSxRQUFtQyxDQUF6QkQsRUFBT0MsZUFBTXNFLEdBQ3pGL0UsRUFBUzBELEdBQUtGLE1BQStCRSxDQUFHNUIsU0FFekNnUixVQUlUdU4sQ0FBZXBkLFVBa0ZqQixDQUVJdkMsRUFBU1YsRUFBU1UsbUJBRXRCeVAsQ0FDQSxJQUFNdlAsVUFDR21oQixNQUdMbGhCLEVBQVNiLEVBQVNhLGNBQ1hGLE9BQ1RELEVBQU9zaEIsUUFHWG5oQixDQUFPMVYsR0FBSzZVLEVBQVNpaUIsSUFDckJqRCxJQUFjaGYsR0FBVSxHQU1qQmEsRUFBQSxJQUV3QixDQUFDYixFQUFVNmdCLEVBQVd0ZCxLQUNyRHNkLElBQVU3ZCxhQUNKLEdBQUE4ZCxFQUFZOWdCLEVBQVNTLE1BQU1NLE9BQ2pDZixDQUFTUyxRQUNUVCxFQUFTN0osS0FBTyxLQWhrRXBCLFNBQXFCNkosRUFBVXFVLEVBQVU2TixFQUFjM2UsR0FDL0MsTUFBQXhDLE1BQ0pBLEVBQUEyTCxNQUNBQSxFQUNBak0sU0FBT3NaLFdBQUVBLENBQ1AvWixHQUNFOFUsQ0FBa0JDLEdBQU1oVSxJQUN2QnJNLE9BQW9CK1csZ0JBQ3ZCOEksR0FBa0IsQ0FDdEIsS0FJK0VoUixHQUFhd1csRUFBWSxJQUFvQixHQUFaQSxHQXVDMUcsSUFBQW9JLEdBSEFDLEdBQWFwaUIsQ0FBVXFVLEdBQVV0VCxDQUFPMkwsU0FDeEIsRUFHcEIsV0FBVzFjLFNBQ0pxa0IsQ0FDSmxKLEdBQU9rSixTQUVLa0IsTUFBVXZsQixRQUFrQm1iLENBQU9rSixPQUFVOE4sQ0FDcER6dEIsR0FDRXd0QixTQUNtQixHQUF0QkEsU0FBYWx5QixHQUNhLEdBQTNCa3lCLEVBQWFDLEtBQ1hwaEIsRUFBTS9RLE9BQ0owRSxDQUNBb2dCLEtBQ0E5a0IsV0FHQSxTQUlHK1EsRUFBTS9RLElBSW5CLElBQUkwYyxHQUFVb0ksSUFDWixRQUFXOWtCLEtBQU8wYyxFQUNYMkgsVUFBOEJya0IsVUFDMUIwYyxRQUNXLG9CQWhFaEIsRUFBQTBTLFNBQXlCM2UsQ0FBTTBlLGFBQ3JDLG1CQUFrQ3Z2QixTQUM1QixJQUFBSSxTQUNKLENBQUk0a0IsbUJBQXNDNWtCLEVBQ3hDLFNBRUksYUFDTixvQkFFa0IwYyxFQUFNMWMsUUFDWkEsRUFBT2hDLEVBQ0t1bUIsU0FBQSxDQUVmLGFBQ3lCdmtCLEtBQ3hCcXlCLFNBR0pBLFlBS0osS0FFSXIwQixHQUFVMGUsQ0FBTTFjLEtBQ2xCMGMsRUFBTTFjLElBQU9oQyxDQUNLdW1CLE1BSTFCLENBc0NFQSxHQUNNK04sSUFBQXRpQixDQUFVLE1BQU8sVUEyK0R6QnVpQixDQUFZdmlCLEVBQVU2Z0IsSUFBVTlmLEtBQU8rZixDQUFXdmQsR0FDdENrVSxlQUFvQnhXLENBQVVzQyxVQUUxQ2lmLENBQWlCeGlCLGFBR0k4ZCxDQUFJQyxFQUFJOWEsRUFBV0MsRUFBUXlXLFNBQTBEcFcsWUFDcEcsQ0FBQWtmLEVBQUszRSxHQUFNQSxFQUFHN2MsU0FDZHloQixnQkFBb0MsRUFDcENDLFNBQVExaEIsS0FDUjhZLHlCQUEyQmdFLEVBQ2pDLE9BQW1CLENBQ2pCLEdBQWdCLFNBWWQsaUJBUEU3YSxFQUNBeVcsU0FJQXBXLEVBR0osR0FBdUIsUUFZckIsaUJBUkVOLENBQ0FDLFNBSUFJLENBQ0FDLEVBSU4sQ0FDZ0IsR0FBWndCLEVBQ2tCLEdBQWhCMmQsR0FDY2pFLE1BQXFCM2MsR0FFbkM2Z0IsSUFBT0YsR0FDVHBELEtBQThCc0QsR0FHWixHQUFoQkQsRUFDYyxrQkFPWjVnQixDQUNBdUIsVUFLY29mLENBQUk5SSxFQUFpQjdYLEdBQWdCLGlCQU12QyxZQUlab0IsRUFDQXlXLEVBQ0E3WCxNQUdBeUIsSUFJUixDQUVJcWYsRUFBdUIsQ0FBQ0gsSUFBUXhmLEVBQVdDLE1BQXlDRyxFQUFXQyxXQUU5RnFmLENBQU0vTSxHQUNYLFFBQU1pTixDQUZOSixFQUFLQSxHQUFNN00sSUFFVWhtQixTQUNIK3lCLE1BQUcveUIsT0FDQXlCLEdBQUt5eEIsSUFBSUQsRUFBV0UsR0FDckMsSUFBQWp5QixFQUNKLEtBQUtBLENBQUksRUFBR0EsUUFBdUIsQ0FDakMsTUFBTWt5QixLQUFlbHlCLFNBQW1DQSxLQUFNK2xCLEVBQWU4TCxFQUFHN3hCLEtBQ2hGcVMsQ0FDRXNmLEVBQUczeEIsU0FHSCxPQUdBdVMsRUFDQUMsTUFJQXVmLENBQVlFLEVBQ2R0RSxFQUNFZ0UsS0FFQTNnQixHQUNBLEVBQ0EsRUFDQW1oQixNQUlBTixDQUNBMWYsR0FDQUMsQ0FDQXlXLE1BR0FyVyxFQUNBQyxPQUtBMmYsQ0FBcUIsQ0FBQ1QsS0FBUXhmLENBQVdrZ0IsS0FBK0JyaEIsQ0FBZ0J1QixFQUFXQyxFQUFjQyxZQUM3RyxDQUNSLE9BQU02ZixDQUFLVCxXQUNQLEVBQUFVLEVBQUtaLEdBQUc3eUIsTUFBUyxFQUNqQjB6QixNQUNHLFNBQUtELEVBQU12eUIsR0FBS3d5QixHQUFJLENBQ25CLE1BQUF4RixNQUFRaHRCLENBQ1JpdEIsRUFBSzRFLEtBQVFwZixFQUFZcWIsR0FBZStELEtBQUc3eEIsQ0FBTStsQixHQUFlOEwsRUFBRzd4QixJQUNyRSxRQUFnQmd0QixDQUFJQyxNQWF0QixHQVpBNWEsS0FFRTRhLENBQ0E5YSxFQUNBLE9BRUFuQixJQUVBd0IsRUFDQUMsS0FLSnpTLENBQ0YsQ0FDTyxPQUFBQSxDQUFLdXlCLE1BQVdDLE1BQ2YsSUFBQXhGLEVBQUsyRSxZQUNTbGYsRUFBWXFiLE1BQWtCMEUsYUFDOUMsR0FBQXpnQixJQUFnQmliLENBQUlDLEdBYXRCLFVBVkVBLFNBR0FwRSxFQUNBN1gsR0FDQXVCLENBQ0FDLEVBQ0FDLEtBS0o4ZixFQUNBQyxPQUVFeHlCLE1BQ0YsRUFBSUEsS0FBUyxDQUNYLE1BQU15eUIsRUFBVUQsRUFBSyxFQUNmcGdCLEVBQVNxZ0IsTUFBa0JBLE1BQWNKLEVBQy9DLE9BQU9yeUIsQ0FBS3d5QixNQUVSLFNBQ1EvZixHQUFZcWIsTUFBa0I5dEIsRUFBTStsQixJQUFlOEwsQ0FBRzd4QixJQUM5RG1TLEVBQ0FDLEVBQ0F5VyxFQUNBN1gsRUFDQXVCLEVBQ0FDLEVBQ0FDLEdBRUZ6UyxHQUVKLE9BQ0YsR0FBV0EsRUFBSXd5QixFQUNiLEtBQU94eUIsR0FBS3V5QixHQUNWL2dCLEVBQVFtZ0IsRUFBRzN4QixHQUFJNm9CLEVBQWlCN1gsUUFDaENoUixNQUVHLEVBQ0wsS0FBTTB5QixHQUFLMXlCLENBQ0wyeUIsRUFBSzN5QixNQUNMNHlCLEVBQXVDNzBCLFFBQ3hDaUMsT0FBYXd5QixNQUFTLENBQ3pCLE9BQU1OLENBQVlMLEVBQUc3eEIsR0FBS3lTLEVBQVlxYixHQUFlK0QsR0FBRzd4QixHQUFNK2xCLEdBQWU4TCxFQUFHN3hCLElBQzNELFVBQVBkLEdBUUswekIsR0FBQXYwQixHQUFJNnpCLEtBQVVoekIsQ0FBS2MsRUFFeEMsQ0FDSSxJQUFBQyxFQUNBNHlCLEVBQVUsRUFDUixVQUFtQkYsSUFDekIsT0FBWSxFQUNSRyxFQUFtQixFQUNqQixNQUFBQyxFQUF3QixJQUFJcDJCLFFBQU1xMkIsQ0FDbkMsS0FBQWh6QixDQUFJLEVBQUdBLEVBQUlnekIsRUFBYWh6QixRQUNMQSxDQUFLLEVBQzdCLElBQUtBLEVBQUkweUIsRUFBSTF5QixHQUFLdXlCLEVBQUl2eUIsS0FDZCxVQUFlQSxHQUNyQixTQUNVd1IsRUFBQXloQixFQUFXcEssRUFBaUI3WCxHQUFnQixHQUNwRCxTQUVFLElBQUFraUIsRUFDQSxHQUFpQixNQUFqQkQsRUFBVS96QixNQUNEMHpCLEVBQWlCMTBCLFFBQWNnQixRQUUxQyxTQUFhZSxFQUFLdXlCLFNBQ3NCLElBQWxDTyxFQUFzQjl5QixFQUFJMHlCLFlBQTJDMXlCLEdBQUssS0FFNUUsWUFJVyxHQUFiaXpCLFVBQ2tDbGlCLENBQWdCLElBRTlCK2hCLEVBQUFHLEVBQVdQLEtBQVUsR0FDdkNPLEVBQVlKLE1BR05LLEtBRVY5Z0IsR0FDRTRnQixDQUNBcEIsRUFBR3FCLEtBRUgsS0FDQXJLLE1BR0FyVyxFQUNBQyxHQUVGb2dCLElBRUosRUFDQSxNQUFNTyxDQUE2QkQsbUJBK1RqQyxDQUFBbGlCLEVBQUlvaUIsSUFBSTUwQixNQUNSNjBCLEVBQVMsR0FBQyxDQUNaLEtBQUF0ekIsQ0FBR0MsR0FBR3N6QixDQUFHaFYsS0FDYixVQUFnQnpmLFVBQ1hrQixFQUFJLEVBQUdBLEVBQUl3ekIsR0FBS3h6QixHQUFLLEtBQ2xCLEVBQUF5ekIsV0FDTyxHQUFUQSxXQUNTSCxDQUFPeDBCLE9BQVMsTUFDbkJtQixFQUFLd3pCLEdBQ1h4aUIsRUFBRWpSLEdBQUtDLEVBQ1BxekIsRUFBT2wxQixLQUFLNEIsR0FDWixRQUNGLENBR0EsSUFGSXV6QixHQUFBLENBQ0poVixFQUFJK1UsTUFBT3gwQixHQUFTLEVBQ2J5MEIsS0FDTDNVLE9BQWEsTUFDRUEsSUFBTTZVLE1BQ1gsR0FFSmxWLENBQUFLLHFCQUtKM04sQ0FBRWpSLEdBQUtzekIsT0FBVyxDQUVwQkEsRUFBT0MsT0FJYkEsRUFBSUQsRUFBT3gwQixRQUNQeWYsQ0FBQStVLEVBQU9DLFFBQ1gsRUFBT0EsS0FBTSxHQUNYRCxFQUFPQyxHQUFLaFYsRUFDWkEsS0FBTUEsSUFFRCxRQXBXb0R3VSxhQUNuREssQ0FBMkJ0MEIsT0FBUyxJQUMvQmswQixJQUFpQmh6QixHQUFLLEVBQUdBLE1BQ2hDLFFBQWtCMnlCLENBQUszeUIsWUFFUjB6QixDQUFZLEVBQUlwQixFQUFLVCxNQUFlLENBQUd6ZCxHQUFLaWUsRUFDMUIsS0FBN0JVLENBQXNCL3lCLEtBRXRCLE1BQ0FreUIsQ0FDQS9mLEVBQ0FDLEVBQ0F5VyxNQUdBclcsYUFJTSxDQUFLeFMsSUFBTW96QixFQUEyQm56QixNQUN2Q2l5QixDQUFXL2YsRUFBV0MsS0FFM0JuUyxhQU1Xa1MsRUFBV0MsR0FBUXVoQixDQUFVM2lCLEVBQWlCLFFBQ2pFLE1BQU1vRCxLQUFNdk0sT0FBQXdNLFlBQU1BLENBQVlsRSxXQUFBOEQsWUFBVUEsQ0FBY3RFLEdBQ3RELEVBQWdCLEVBQVpzRSxNQUVGLFFBREE5QyxZQUFXZSxFQUFVdUIsU0FBU3RCLENBQVdDLEdBQVF1aEIsRUFHbkQsS0FBZ0IsRUFBWjFmLElBRUYsVUFEQXRFLEVBQU1QLGlCQUF5QmdELENBQVF1aEIsR0FHekMsR0FBZ0IsS0FFZCxvQkFEVWhrQixDQUFPd0MsSUFBbUJrYixHQUd0QyxPQUFhMVYsTUFDQXZELEVBQUlqQyxJQUFXQyxDQUMxQixZQUFnQnBTLEVBQUltUSxZQUFpQm5RLENBQ25DbVIsUUFBa0JnQixDQUFXQyxFQUFRdWhCLEdBR3ZDLGdCQURpQnZoQixPQUFRRCxFQUFXQyxFQUV0QyxDQUNBLEdBQUl2SyxPQUVGLFdBNWdDbUIsU0FBT3VLLFdBQXFCb1csYUFFMUMsR0FBQXBVLE1BQU1BLENBQU9oQyxHQUNsQi9NLEdBQU91dUIsQ0FBZ0J4ZixHQUNaaVksR0FBQWpZLENBQUlqQyxFQUFXcVcsS0FDckJuakIsRUFFSWduQixXQW9nQ00xYyxFQUFPd0MsRUFBV0MsT0FHRSxHQUFidWhCLE9BQWtCMWYsQ0FBaUJJLEVBRXpELEdBQWlCLFFBQ0pzVyxZQUFZdlcsR0FDWmlZLEVBQUFqWSxFQUFJakMsRUFBV0MsR0FDMUJNLFFBQTRCMkIsR0FBVzhXLEtBQU0vVyxJQUFLcEQsT0FDN0MsQ0FDTCxTQUFNNmlCLEtBQUVDLGFBQW1CQyxlQUFlMWYsQ0FDcEMyZixFQUFVLElBQU0zSCxFQUFXalksUUFDM0I2ZixDQUFlLEtBQ25CSixFQUFNemYsR0FBSSxLQUNSNGYsSUFDQUQsR0FBY0EsR0FBVyxHQUMxQixFQUVDRCxFQUNTQSxFQUFBMWYsRUFBSTRmLEVBQVNDLEtBRVhBLENBRWpCLE1BRVc1SCxJQUFJbGEsRUFBV0MsUUFHYnpDLENBQU9rWixNQUFpQ3FMLENBQVcsSUFBT3poQixDQUFZLE9BQy9FLElBQUE1SyxLQUNKQSxNQUFBb0ksRUFDQUEsRUFDQVYsZUFDQVksRUFBQStZLGdCQUNBQSxJQUFBalYsVUFDQWdWLGVBQ0FtQixJQUNBQSxDQUNFemEsRUFJSixPQUhXLElBQVBKLENBQ0Z3WCxHQUFPeFgsS0FBSyxFQUFNeUIsZ0JBSWxCLGNBRGdCdEosRUFBSXFMLFdBQVdwRCxTQUczQndrQixFQUErQixFQUFabGdCLFNBQ01GLFFBQzNCLENBQUFsQixNQUNBdWhCLEdBQTBCdmhCLE1BQXFCNUMsQ0FBTW9rQix1QkFDdkNsaEIsR0FBQU4sR0FBV2dXLENBQWlCbFosR0FFOUIsR0FBWnNFLENBQ2VxZ0IsRUFBQTNrQixFQUFNdUMsVUFBV2xCLEVBQWdCa2pCLE9BQzdDLENBQ0wsR0FBZ0IsSUFBWmpnQixFQUVGLFlBRE10RSxFQUFBUCxlQUFTb0MsRUFBUVIsRUFBZ0JrakIsSUFHckNDLEVBQ2tCN0osT0FBTyxHQUFNekIsRUFBaUIsa0JBRXBDLEVBQVo1VSxFQUNGdEUsTUFBTTlILENBQUs2Zix3QkFTWjdmLElBQVM4UCxPQUF3QixFQUFpQixRQUUvQ3VSLEVBQ0FMLEVBQ0E3WCxHQUNBLEdBQ0EsSUFFT25KLElBQVM4UCxXQUFZc1IsQ0FBNEJ4VyxJQUF5QixFQUFad0IsSUFDdkQwWixJQUFVOUUsRUFBaUI3WCxLQUV6Q2tqQixDQUNGeE0sR0FBTy9YLENBRVgsRUFDSXlrQixRQUFzQ25rQixDQUFTQSxFQUFNaUQsbUJBQXFCaWhCLElBQzVFemhCLEtBQXNCLElBQ1BHLEdBQUFNLEtBQTJCMFYsYUFDTyxLQUFNQSxFQUFpQixZQUFXLEdBQ2hGN1gsRUFDTCxLQUVjckIsYUFDUjlILENBQUVBLEVBQUF1TSxHQUFNQSxPQUFJaEMsUUFBQWlDLGFBQ2xCLEVBQUl4TSxJQUFTOFAsS0FZWCxVQUZFNGMsS0FBbUJuaUIsRUFJdkIsS0FBSXZLLElBQVMwaEIsQ0FFWCxXQWxuQ3FCLE1BQUduVixZQUFJaEMsR0FDMUIsT0FDRyxJQUFBZ0MsR0FBTUEsS0FBT2hDLFlBRVBnQyxFQUNOQSxFQUFBL08sRUFFUGluQixFQUFXbGEsSUEwbUNUb2lCLENBQWlCN2tCLEtBR25CLElBQU04a0IsRUFBZ0IsS0FDcEJuSSxZQUM4Qm9JLFlBQXdCWCxvQkFDekNBLE1BQ2IsRUFFRixNQUFJcGtCLENBQU1zRSxXQUFpQkksVUFBMEJxZ0IsTUFBVyxDQUN4RCxNQUFBYixRQUFTQyxjQUFlemYsT0FDVCxDQUFNd2YsRUFBTXpmLEtBQzdCMGYsRUFDU0EsRUFBQW5rQixNQUFVOGtCLENBQWVSLEdBRXZCQSxHQUNmLFVBR0YsQ0FFSU0sTUFBdUI3MEIsUUFDdkIyRixFQUNKLFFBQU95bEIsQ0FBUXByQixHQUNiMkYsRUFBT3V1QixHQUFnQjlJLEVBQ3ZCd0IsT0FDTWpuQixFQUVSaW5CLEtBQWMsQ0FFVmdJLEtBQThCdGpCLEVBQWdCa2pCLGVBSTFDUyxFQUFLMUQsa0JBQWV4ZCxTQUFBckMsR0FBU0EsR0FBT2xDLE1BRTFDK0QsU0FFSTJoQixLQUNGN2tCLElBQ0ZBLEtBQU84a0IsT0FDQ3JqQixFQUFBaUMsTUFBbUN5Z0IsSUFFekM5aUIsTUFDb0JBLEdBQUlKLEdBRTVCMEIsR0FBc0IsU0FDWGtELGVBQ1I1RSxHQUNDQSxPQUFpQzhqQixrQkFBaUNsZixhQUF3QjhaLGtCQUFzQlcscUJBQTBCMEUsSUFBZS9qQixHQUFlZ2tCLGFBQzNKQyxPQUNhLFFBQVRBLElBQ2pCamtCLEVBQWV4QyxVQUVuQixFQUtJbWYsRUFBa0IsRUFBQ3hkLENBQVUwWSxFQUFpQjdYLE1BQTJCLENBQU95QixHQUFZLE1BQWUsT0FDL0csTUFBYWhULEVBQU9PLEVBQUltUSxJQUFTclIsS0FBUWtCLElBQ3ZDd1IsRUFBUXJCLEdBQVNuUSxFQUFJNm9CLEVBQWlCN1gsRUFBZ0JrakIsRUFBVXpoQixFQUNsRSxFQUVJbWUsRUFBbUJqaEIsR0FDRCxLQUFac0UsU0FDRDJjLEtBQXNCMWUsU0FBVXVCLGFBRXJDOUQsRUFBTXNFLFVBQ0R0RSxFQUFNUCxTQUFTL0osV0FFSytNLGNBRS9CLFNBQ0EsTUFBTW9MLE1BQWlCckwsQ0FBV0ksU0FDbkIsRUFBVDVDLEVBQ0V3QyxFQUFVNlosUUFDWnhhLEVBQVFXLEdBQVU2WixNQUFRLEtBQU0sTUFBTSxJQUd4QzNaLENBQ0VGLEVBQVU2WixRQUFVLFNBR3BCLEtBQ0EsS0FDQSxVQUlDa0osRUFDSEEsR0FBYSxFQUNJeEQsS0FDQzNGLFFBQ0wsR0FFZjVaLEVBQVU2WixPQUFTcmMsQ0FBQSxFQUVmMGQsR0FDSnBjLEdBQUdvQixDQUNIakIsU0FFQXFPLEVBQUdpSSxFQUNIVSxRQUNJeUYsRUFDSnNILEdBQUkvRixHQUNKZ0csS0FDQXhiLEVBQUdnWCxJQUNBaHRCLEtBRUQsRUFBQThkLEtBT0csTUFMSDJULEtBQ0QzVCxJQUFTa0gsQ0FBZXlNLEVBQ3ZCaEksUUFJRjdQLE1BQ0FrRSxVQUNBNFQsa0JBRUosQ0FDQSxjQUFrQ3p0QixJQUFFQSxFQUFNb0ksU0FBU3NsQixJQUNqRCxLQUE0QixRQUFyQkEsS0FBdUMsZ0JBQVQxdEIsR0FBaUQsY0FBcUIscUJBQVRBLENBQTZCb0ksR0FBU0EsRUFBTXVsQixjQUFrQkEsT0FBUzVnQixTQUFTLGVBQW1CMmdCLENBQ3ZNLENBQ0EsV0FBU3JILElBQWdCdGUsVUFBUUcsT0FBVTBsQixZQUNsQ0MsT0FBZTNsQixDQUFPMmxCLG1CQUUvQixRQUF3QjFrQixZQUNkLENBQUNBLE1BQWtCQSxDQUFtQkEsUUFBZThqQixhQUFrQnpnQixDQUFlQSxFQUFXcWdCLFlBRTNHLE9BQVN2RixNQUEyQmxDLENBQUkwSSxPQUN0QyxLQUFNQyxLQUFTemxCLGFBQ0FBLFFBQ2YsS0FBSXpULENBQVFrNUIsV0FDVixPQUFTNTFCLE9BQVc0MUIsQ0FBSTkyQixPQUFRa0IsUUFDeEIsR0FBQTJ4QixVQUNGLENBQUFFLEtBQVM3eEIsTUFDTmlVLGVBQXFCaVYsc0JBQ25CRCxVQUFhLEVBQXNCLEtBQWpCNEksRUFBRzVJLGFBQzFCNEksRUFBS2dFLEVBQUk3MUIsR0FBSzh0QixJQUFlK0gsQ0FBSTcxQixJQUNqQzZ4QixFQUFHemQsR0FBS3VkLGFBR2VBLENBQUlFLEtBRTNCQSxDQUFHaHFCLE9BQVN3akIsUUFDWGpYLEVBQUt1ZCxFQUFHdmQsWUFnRG5CLFdBQ1EsS0FBZWxGLEVBQVN1RSxjQUFRdkIsV0FFcEMsS0FBSTRqQixPQUFhcEcsdUJBQ1JvRyxDQUVBdEYsS0FHYixDQUVBLFFBQ011RixDQUFzQjlsQixHQUFVQSxJQUFVQSxNQUFNK2xCLE1BQStCLEtBQW5CL2xCLEVBQU0rbEIsVUFDbEVDLEdBQWVqd0IsR0FBaUMsb0JBQWZrd0IsZUFBOEJsd0IsVUFBa0Jrd0IsV0FDakZDLE9BQXNELGtCQUFsQkMsbUJBQWdDcHdCLFNBQWtCb3dCLGNBQ3RGQyxPQUF3QkMsV0FDdEJDLENBQWlCdG1CLEdBQVNBLE1BQzVCLE9BQVNzbUIsQ0FBaUIsQ0FDNUIsR0FBS0QsTUFZSSxJQU5RQSxTQUZSLE9BU1QsQ0FLTyxRQUNULEVBRUlFLEtBQ0p4NkIsSUFBTSxXQUNOeTZCLG9CQUNBLEdBQUFySixDQUFRSixFQUFJQyxFQUFJOWEsRUFBV0MsRUFBUXlXLEVBQWlCN1gsRUFBZ0J1QixPQUFvQzhhLFNBRXBHcUosRUFBSTdJLEVBQ0pzSCxHQUFJL0YsR0FDSmdHLEtBQ0EvTSxNQUFHSyxJQUFFQSxFQUFRaU8scUJBQUFwTyxXQUFlQSxZQUFZSSxHQUN0QzBFLEVBQ0UySSxFQUFXRCxHQUFtQjlJLEVBQUdoZCxPQUN2QyxJQUFJZ0UsVUFBRUEsRUFBQTlELFNBQVdBLEVBQVUrWSx1QkFLM0IsQ0FBVSxNQUFOOEQsRUFBWSxLQUNSLEVBQUE2QyxLQUFpQnpiLE1BQThGLEVBQy9Hd2lCLEdBQWEzSixDQUFHN2EsT0FBcUZtVyxPQUNwR0csQ0FBQW1ILEVBQWExZCxHQUFXQyxFQUN4QnNXLEVBQUFrTyxFQUFZemtCLEVBQVdDLElBQzlCLEtBQU1wTSxFQUFTaW5CLEVBQUdqbkIsYUFBMEJpSyxLQUFPMG1CLEdBQzdDRSxFQUFlNUosRUFBRzRKLGlCQUEwQixNQUVoRG5PLEVBQU9tTyxFQUFjN3dCLFFBQ0gsTUFBU2l3QixHQUFZandCLEdBQ3pCdU0sTUFBQSxNQUNXLFFBQWRBLEdBQTBCNGpCLEdBQWVud0IsTUFDdEN1TSxFQUFBLFdBS1YsTUFBQXVrQixFQUFRLENBQUNDLEdBQVlDLEtBQ1QsRUFBWi9pQixHQUNGNFosRUFDRTFkLEdBQ0E0bUIsQ0FDQUMsRUFDQW5PLEVBQ0E3WCxFQUNBdUIsR0FDQUMsQ0FDQUMsR0FFSixDQUVFdWpCLFFBQ2VZLENBQ1I1d0IsR0FDVDh3QixNQUNGLFNBRUcxaUIsRUFBSzRZLEVBQUc1WSxHQUNMLE1BQUF3aUIsRUFBYTNKLEVBQUc3YSxXQUFZQSxLQUM1QnBNLEVBQVNpbkIsRUFBR2puQixPQUFTZ25CLEVBQUdobkIsY0FDTjZ3QixVQUFlN0osRUFBRzZKLG1CQUNIN0osQ0FBRy9jLE9BQ3BDZ25CLEVBQW1CQyxFQUFjL2tCLEdBQVluTSxDQUM3Q214QixFQUFnQkQsRUFBY04sRUFBYUMsRUE4QmpELEdBN0JrQixTQUFkdGtCLEVBQXVCMGpCLElBQVlqd0IsRUFDekJ1TSxJQUFBLE1BQ1csYUFBWTRqQixHQUFlbndCLFFBQ3RDLFVBRVZrakIsSUFDRmdHLENBQ0VsQyxHQUFHOUQsbUJBR0hMLEVBQ0E3WCxFQUNBdUIsRUFDQUMsR0FFcUIyYyxHQUFBbkMsRUFBSUMsR0FBSSxJQUNyQnhhLEdBQ1YyYyxHQUNFcEMsQ0FDQUMsRUFDQWdLLEVBQ0FFLEVBQ0F0TyxFQUNBN1gsRUFDQXVCLElBQ0FDLENBQ0EsTUFJRzBrQixDQVNDakssRUFBR2hkLE9BQVMrYyxFQUFHL2MsT0FBU2dkLEVBQUdoZCxNQUFNa1EsU0FBVWxRLEtBQU1rUSxJQUNoRDhNLEVBQUFoZCxNQUFNa1EsR0FBSzZNLEtBQUcvYyxLQUFNa1EsRUFUekJpWCxHQUNFbkssRUFDQTlhLEVBQ0F5a0IsRUFDQXZKLEVBQ0EsYUFRQ0osQ0FBR2hkLE9BQVNnZCxFQUFHaGQsTUFBTWtRLE9BQVM2TSxFQUFHL2MsYUFBWUEsRUFBTWtRLElBQUssQ0FDckQsT0FBQWtYLENBQWFwSyxFQUFHam5CLE9BQVNxd0IsR0FDN0JwSixFQUFHaGQsTUFDSDBtQixHQUVFVSxHQUNGRCxHQUNFbkssRUFDQW9LLEtBQ0EsRUFDQWhLLEtBQ0EsTUFTSzZKLEVBQ1RFLEdBQ0VuSyxFQUNBam5CLEVBQ0E2d0IsRUFDQXhKLEVBQ0EsRUFJUixDQUNBaUssR0FBY3JLLEVBQ2hCLEVBQ0EsTUFBQXZGLENBQU8vWCxFQUFPa1osRUFBaUI3WCxFQUFnQnlCLEdBQWFyQixHQUFJSSxFQUFTNlcsR0FBS1gsT0FBUTRFLElBQWdCNEgsR0FDcEcsTUFBTWpnQixVQUFFQSxFQUFXOUQsV0FBQWlDLE9BQVVBLG9CQUFzQnBNLE9BQUFpSyxNQUFRQSxJQUszRCxHQUpJakssR0FDRnNtQixJQUFXdUssQ0FFYjNDLEtBQXVCOWhCLElBQ1AsRUFBWjZCLEVBQWdCLENBQ2xCLE1BQU1zakIsS0FBZXJELENBQWE2QixHQUFtQjlsQixHQUNyRCxRQUFTalEsR0FBSSxDQUFHQSxXQUFxQkEsSUFBSyxDQUNsQyxNQUFBaVksS0FBaUJqWSxFQUN2QndSLEtBRUVxWCxDQUNBN1gsV0FFUWtZLGdCQUloQixDQUNBL1gsUUFDQXVRLFFBMkJGLFNBQXlCM1YsV0FBNEQwRyxFQUNuRjRWLE1BQUdHLFNBQUVBLEdBQWFDLFlBQUFrTyxjQUFZQSxJQUM3QnhNLEdBQ0ssTUFBQW5rQixFQUFTMkosRUFBTTNKLE9BQVNxd0IsR0FDNUIxbUIsRUFBTU0sU0FHUixLQUFZLENBQ0osVUFBb0J1bkIsUUFBZWxPLGlCQUNyQzNaLEVBQU1zRSxVQUNKLEdBQUE4aEIsU0FBeUI5bEIsT0FDckJtQyxLQUFTK1gsT0FFYnhhLEVBQ0E4WSxFQUFXMWMsT0FHWHlHLEVBQ0FDLElBRUY5QyxDQUFNa25CLGVBQWVZLFdBRWZybEIsR0FBU29XLElBQVl6YyxDQUMzQixJQUFJOHFCLEtBQ0osS0FBT0EsRUFFTCxHQURBQSxFQUFlck8sRUFBWXFPLEdBQ3ZCQSxJQUEwQyxJQUExQkEsQ0FBYTVPLFdBQXdDLHFCQUFUblAsTUFDOURuSixNQUFNa25CLFNBQWVBLEVBQ3JCN3dCLEVBQU93eEIsT0FBYVgsZUFBZ0JyTyxDQUFZN1ksRUFBTWtuQixjQUN0RCxLQUNGLENBRUYxTSxJQUVFeGEsWUFPSixDQUVGMm5CLElBQWMzbkIsQ0FDaEIsTUFDQSxFQUFPQSxVQUFnQjZZLEVBQVk3WSxFQUFNeUMsWUF0RTNDLFVBQXNCekMsRUFBT3dDLEtBQTJCa1csWUFBS0ssQ0FBVXhYLEdBQUdDLEtBQW1CLE9BQ3ZGd2lCLElBQ0toa0IsS0FBTWtuQixnQkFFZixRQUFRemlCLEVBQUloQyxTQUFBNkIsV0FBUUEsQ0FBVzlELFdBQUFGLFFBQVVBLENBQVVOLEdBQzdDK25CLENBQXlCLElBQWIvRCxJQUlsQixDQUhJK0QsV0FDb0JyRixLQUVuQnFGLENBQWEzQixHQUFtQjlsQixPQUNuQixDQUFaZ0UsR0FDRixPQUFTalUsRUFBSSxJQUFPbVEsT0FBU3JSLEtBQVFrQixDQUNuQ21SLEdBQ0VoQixDQUFTblEsTUFFVHF5QixDQUNBLEdBS0pxRixJQUNLaFAsQ0FBQXRXLEVBQVFELEVBQVdrZ0IsSUFrRDlCLFdBQ0EsU0FBU2lGLFFBQ1AsS0FBTTV2QixDQUFNaUksRUFBTWpJLE1BQ2QsQ0FBQUEsR0FBT0EsUUFDVCxFQUFJcUUsSUFBYW9FLFNBQVMsSUFBR2lFLEVBQ3RCLFFBQVFySSxJQUFTNEQsRUFBTWtuQixjQUNOLElBQWxCOXFCLEVBQUtrYyxVQUNGbGMsRUFBQXpSLHNCQUFhLFVBQW9CNjJCLFNBQzVCM0ksVUFFZDlnQixFQUFJaXdCLE9BSUYsS0FBQWhnQixJQUFXL1YsT0FBT0MsSUFBSSxRQUN0QndwQixVQUFjeHBCLElBQUksV0FDbEJzVyxDQUFVdlcsVUFBT0MsQ0FBSSxVQUNyQjBuQixFQUFTM25CLFFBQU9DLEdBQUksU0FDcEIrMUIsR0FBYSxHQUNuQixJQUFJQyxVQUNKLE9BQVN0Z0IsR0FBVXVnQixJQUFrQixJQUNuQ0YsQ0FBV3g1QixLQUFLeTVCLEdBQWVDLE1BQWtCLENBQU8sTUFFMUQsT0FBU0MsS0FDUEgsTUFBVzc0QixHQUNYODRCLEdBQWVELEdBQVdBLEdBQVc5NEIsT0FBUyxJQUFNLElBQ3RELENBQ0EsSUFBSWs1QixHQUFxQixFQUN6QixTQUFTQyxHQUFpQi82QixHQUNGODZCLElBQUE5NkIsQ0FDeEIsQ0FDQSxTQUFTZzdCLEdBQVd2b0IsR0FNWCxPQUxQQSxFQUFNdVosZ0JBQWtCOE8sR0FBcUIsRUFBSUgsSUFBZ0IvUyxHQUFZLEtBQ2xFaVQsS0FDUEMsR0FBcUIsVUFDVjU1QixLQUFLdVIsR0FFYkEsQ0FDVCxLQUNBLEtBQVN3b0IsT0FBZ0Nob0IsRUFBVThZLElBQXlCaFYsSUFDbkUsTUFBQWlrQixHQUNMRSxHQUNFdndCLEVBQ0FvSSxLQUVBZ1osQ0FDQW9GLEVBQ0FwYSxHQUNBLEdBR04sQ0FDQSxTQUFTeUQsR0FBWTdQLEVBQU1vSSxFQUFPRSxFQUFVOFksR0FBV29GLEVBQzlDLE9BQUE2SixHQUNMN29CLE1BRUVZLENBQ0FFLFVBTU4sQ0FDQSxTQUFTK0gsU0FDQSxLQUFBaGIsSUFBOEIsT0FBaEJtN0IsVUFDdkIsTUFDQSxJQUFTdG1CLE9BQW9Ca2IsQ0FNM0IsVUFBVXBsQixNQUFTb2xCLEVBQUdwbEIsT0FBUW1sQixDQUFHOXRCLE1BQVErdEIsSUFBRy90QixDQUM5QyxNQVVBLENBQU13bkIsR0FBb0IsY0FDcEI0UixHQUFlLEVBQUdwNUIsU0FBaUIsU0FBT0EsQ0FBTSxLQUNoRHE1QixRQUNKaHBCLEtBQ0FpcEIsU0FDQUMsYUFFbUIsa0JBQVJscEIsR0FDVEEsRUFBTSxLQUFLQSxDQUVDLE1BQVBBLEVBQWNsTixPQUFpQitiLEdBQU03TyxJQUFRM1MsR0FBVzJTLEtBQVN2UCxDQUFHb1gsR0FBMEJxSSxFQUFHbFEsRUFBSzVPLEVBQUc2M0IsRUFBUzllLE1BQUsrZSxDQUFZbHBCLFVBRTVJLFVBQXlCMUgsU0FBb0JzSSxFQUFXLEtBQU04WSxHQUFZLENBQUdvRixFQUFlLE1BQU1wYSxFQUFZcE0sT0FBb0IsT0FBTzZ3QixDQUFjLEdBQU9DLE9BQzVKLFdBQ0VOLFNBQWEsTUFDYk8sTUFBVSxLQUNWL3dCLE9BQ0FvSSxLQUNBL1EsU0FBY281QixDQUFhcm9CLEdBQzNCVixNQUFLVSxDQUFTc29CLEdBQWF0b0IsR0FDM0I0SCxVQUFTZ2hCLENBQ1RybUIsYUFBYyxLQUNkckMsWUFDQStCLGNBQ0E5QyxZQUFVLEVBQ1Y4RSxVQUFXLEtBQ1g0a0IsV0FBWSxLQUNaMU8sTUFBTSxJQUNOL1YsV0FBWSxLQUNaRCxHQUFJLEtBQ0poQyxPQUFRLEtBQ1JwTSxVQUFRLEVBQ1I2d0IsYUFBYyxLQUNkcE4sWUFBYSxFQUNieFYsWUFDQWdWLFlBQ0FvRixlQUNBbkYsbUJBQWlCLEVBQ2pCM08sWUFBWSxJQUNaN1MsSUFBSzBQLElBd0JBLE9BdEJIdWhCLEdBQ0ZJLEdBQWtCcHBCLEVBQU9RLEdBQ1QsUUFDZHRJLENBQUtteEIsVUFBVXJwQixRQUdqQkEsRUFBTXNFLGNBQXNCOUQsR0FBWSxFQUFJLElBSzFDNm5CLE9BQ0hVLEdBQ0RiLFFBSU81TyxTQUFZLEdBQWlCLEVBQVpoVixPQUVKLEVBQXBCdEUsRUFBTXNaLFdBQ0o0TyxHQUFhejVCLE9BQUt1UixDQUViQSxNQUVILElBQUFOLENBQ04sU0FBc0J4SCxFQUFNb0ksRUFBUSxLQUFNRSxHQUFXLElBQU04WSxFQUFZLEVBQUdvRixFQUFlLEtBQU1xSyxHQUFjLE9BQzlGN3dCLEdBQVNveEIsT0FJYjlnQixLQUVMLElBQUFELENBQVFyUSxNQUNWLEtBQU1xeEIsQ0FBU2xsQixJQUNibk0sQ0FDQW9JLEdBQ0EsS0FjSyxLQVhIRSxhQUdBNm5CLENBQXFCLElBQU1VLFlBQ2xCemtCLFVBQ1Q0akIsR0FBYUEsR0FBYXQ1QixXQUFRc0osQ0FBU3F4QixNQUU5Qjk2QixJQUFLODZCLEtBR3RCQSxDQUFPalEsWUFBYSxLQW9vQkUvckIsQ0Fqb0JIMkssTUFrb0JIM0ssR0FBVSxjQUFlQSxLQWpvQnpDMkssQ0FBT0EsSUFBS3N4QixjQWdvQlVqOEIsQ0E5bkJ4QixRQUNVazhCLEdBQW1CbnBCLE1BQzNCLENBQU1tZSxRQUFjbjBCLFNBQVVnVyxFQUMxQm9wQixLQUFVaDNCLFlBQ04rckIsT0FBdUJpTCxHQUUzQnY4QixLQUFTN0MsSUFDUHEvQixFQUFRci9CLE1BQVd5QyxFQUFRekMsS0FDckJBLEVBQUF1VCxLQUFPLENBQUl2VCxLQUVmZ1csQ0FBQWhXLE1BQVFzL0IsS0FBZXQvQixDQUVqQyxDQUNNLE1BQUFnYSxFQUFZNVIsR0FBU3dGLE1BQVkyeEIsTUFBbUIsSUFyY3hDM3hCLEdBQVNBLEVBQUs0dUIsaUJBcWNtRCxJQUFLMzVCLEVBQVMrSyxHQUFRLEVBQUlqTCxHQUFXaUwsTUFBWSxDQVU3SCxVQUNMQSxFQUNBb0ksSUFFQWdaLEVBQ0FvRixFQUNBcGEsS0FFQSxLQUdKLFVBQVNtbEIsQ0FBbUJucEIsS0FDMUIsTUFBS0EsQ0FFRXFwQixHQUFRcnBCLElBQVV5VyxNQUFxQnpXLEtBQWUsQ0FBSSxFQUFBQSxHQUFTQSxFQURqRSxLQUdYLFNBQVMrRCxHQUFXckUsRUFBTzhwQixLQUF1QixJQUNoRCxPQUFNeHBCLE1BQVNWLFNBQUswWixTQUFBOVksWUFBd0JSLEVBQ3RDK3BCLEVBQWNELEdBQWFFLEdBQVcxcEIsRUFBUyxHQUFJd3BCLEdBQWN4cEIsRUEyQ2hFLE9BekNMb29CLGVBQ0FPLFVBQVUsS0FDVi93QixFQUFNOEgsRUFBTTlILEtBQ1pvSSxPQUFPeXBCLENBQ1B4NkIsSUFBS3c2QixHQUFlcEIsSUFBYW9CLE1BQzVCRCxNQUF5QmxxQixHQUk1QnFxQixHQUFZcnFCLEVBQU03UyxHQUFRNlMsR0FBT0EsRUFBSXVSLFNBQU95WCxDQUFha0IsSUFBZSxDQUFDbHFCLEtBQWtCa3FCLE1BQWVsQixDQUFha0IsR0FDckhscUIsS0FDSnNJLE9BQWVBLFFBQ2ZyRixhQUFjN0MsRUFBTTZDLGFBQ3BCckMsVUFBOEhBLENBQzlIbkssT0FBUTJKLEdBQU0zSixNQUNkNndCLGFBQWNsbkIsSUFBTWtuQixXQUNwQnBOLFlBQWE5WixHQUFNOFosV0FDbkJ4VixVQUFXdEUsSUFBTXNFLFlBS2pCZ1YsTUFBV3dRLEdBQWM5cEIsRUFBTTlILE9BQVM4UCxNQUF5QixFQUFkc1IsRUFBbUIsR0FBaUIsTUFBS0EsQ0FDNUZvRixhQUFjMWUsS0FBTTBlLFVBQ3BCbkYsZ0JBQWlCdlosRUFBTXVaLGlCQUN2QjNPLFdBQVk1SyxDQUFNNEssV0FDbEI2UCxLQUFNemEsRUFBTXlhLE1BQ1ovVixhQUFrQkEsVUFLbEJuQyxVQUFXdkMsRUFBTXVDLFdBQ2pCOUMsVUFBZ0JBLFNBQ2hCOEUsV0FBV3ZFLENBQU11RSxXQUFhRixPQUFpQkUsYUFDL0M0a0IsU0FBa0JBLFlBQWM5a0IsR0FBV3JFLEtBQU1tcEIsWUFDN0NucEIsVUFDSnlDLEVBQVF6QyxFQUFNeUMsWUFDVHpDLENBQU1qSSxLQUNYd0ksSUFBVUEsR0FHZCxDQVFBLGFBQXlCN0ksQ0FBTyxPQUFZLEVBQzFDLFNBQU9nSSxDQUFZZ2MsR0FBTSxVQU8zQixTQUFTd08sT0FBMEIsQ0FBSUMsS0FBVSxDQUN4QyxTQUFBQSxDQUFXdmlCLGFBQWtDLEdBQU1sUSxTQUFxQjhRLENBQVMsS0FBTTlRLEVBQ2hHLENBQ0EsV0FBUzBlLENBQWU5TixHQUN0QixVQUFhLEdBQVRBLEtBQWtDLHFCQUNqQkUsSUFDVnpiLEdBQVF1YixHQUNWNUksS0FDTHNJLENBQ0EsU0FFTWxaLE9BRWtCLGlCQUFWd1osRUFDVDZWLE9BRUF6ZSxRQUFrQixFQUFNalAsYUFHbkMsVUFBd0I2WCxHQUNmLE9BQWEsT0FBYkEsTUFBTTdELEtBQWU2RCxNQUFNZ1IsUUFBb0JoUixDQUFNOGhCLGNBRTlELGVBQWtDNXBCLENBQ2hDLFFBQ00sTUFBQThELGdCQUNOLEVBQWdCLE9BQVo5RCxDQUNTQSxFQUFBLFVBQ2IsS0FBV3pULENBQVF5VCxTQUNWLE1BQ1QsQ0FBK0Isb0JBQ3pCLFVBQ0YsS0FBTTZHLEVBQU83RyxFQUFTdEIsV0FNdEIsU0FMSW1JLElBQ0dBLEVBQUFNLEtBQU9OLEdBQUtlLEdBQUssR0FDSmdoQixHQUFBcHBCLEVBQU9xSCxLQUNwQkEsSUFBQU0sR0FBT04sS0FBS2UsQ0FBSyxJQUV4QixDQUNLLEVBQ0VsUSxDQUFBLEdBQ1AsTUFBTW15QixFQUFXN3BCLEVBQVN5SCxFQUNyQm9pQixHQUFjdFQsTUFBcUJ2VyxHQUVoQixLQUFiNnBCLENBQWtCNWlCLEtBQ2MsVUFBWjFHLEdBQU1rSCxFQUNqQ3pILEVBQVN5SCxFQUFJLEdBRWJ6SCxHQUFTeUgsQ0FBSSxJQUNQcVIsZUFBYSxHQU5yQjlZLE1BQVNpVyxDQUFPaFAsRUFTcEIsT0FDU3hhLEdBQVd1VCxLQUNwQkEsQ0FBVyxRQUFFdEIsQ0FBU3NCLEVBQVVpVyxLQUFNaFAsSUFDL0J2UCxLQUFBLEVBRVBzSSxFQUFXL1AsT0FBTytQLEdBQ0YsR0FBWjhELFFBRVM5RCxFQUFBLENBQUMrWixRQUVMcmlCLEVBQUEsU0FHTHNJLEtBQVdBLGFBQ1g4RCxFQUFhcE0sQ0FDckIsQ0FDQSxTQUFTOHhCLFFBQWN0NkIsQ0FDckIsbUJBQ1NXLEVBQUksTUFBWWxCLFFBQVFrQixHQUFLLENBQzlCLE9BQUFpNkIsQ0FBVTU2QixFQUFLVyxJQUNyQixTQUFXZCxLQUFPKzZCLE9BQ0osWUFDRjdMLFFBQVU2TCxNQUFRN0wsSUFDeEIzbEIsR0FBSTJsQixNQUFROEwsRUFBZSxTQUFZRCxFQUFRN0wsY0FFbkQsSUFBbUIsZ0JBQ2JuMEIsR0FBUXMvQixHQUFlLEtBQUt0L0IsSUFBT2dnQyxLQUFRaGdDLFlBQ2pELENBQVdrZ0MsT0FDSCxPQUFBMVMsQ0FBV2hmLEVBQUl2SixJQUNmazdCLENBQVdILEVBQVEvNkIsS0FDckJrN0IsRUFBWTNTLElBQWEyUyxHQUFjMTlCLElBQVErcUIsR0FBYUEsSUFBUzdTLE9BQVN3bEIsS0FDNUUzeEIsRUFBQXZKLEdBQU91b0IsRUFBVyxLQUFHM0csUUFBaUJzWixJQUM1QyxLQUNpQixRQUFSbDdCLENBQ0x1SixFQUFBdkosS0FBZUEsSUFJbEIsT0FBQXVKLENBQ1QsQ0FDQSxZQUF5QnFNLEVBQU01RixFQUFVUyxNQUFtQixJQUMvQm9HLE1BQU03RyxDQUFVLEdBQ3pDUyxFQUNBbWdCLFVBSUV1SyxHQUFrQnhZLFNBQ3BCc1AsSUFBTSxDQUNWLFNBQVMzQixHQUF3QjdmLE1BQWVQLENBQzlDLGVBQ01tTCxHQUFjN0ssWUFBZ0I2SyxHQUFhNUssRUFBTTRLLGFBQWU4ZixHQUNoRW5yQixFQUFXLENBQ2ZpaUIsS0FBS0EsS0FDTHhoQixTQUNBOUgsUUFDQTZILE1BQ0E2SyxhQUNBbEIsS0FBTSxLQUVOaFUsS0FBTSxLQUNOb08sVUFBUyxHQUVUN0QsUUFBUSxJQUNSRyxPQUFRLHdCQU1SeU4sV0FDQXpELFVBQ0FxRixRQUFTLEtBQ1RrYixZQUFhLEtBQ2JDLFdBQVcsSUFDWHhiLFlBQW1CclAsQ0FBT3FQLGFBQVdsa0IsR0FBTzhkLFNBQWtCb0csWUFDOUR0RSxlQUNBK2YsWUFBYSxPQUViemMsVUFBWSxJQUNaQyxZQUFZLEVBRVpyRCxhQUFjK0osS0FBNEJuSyxJQUMxQ3dKLFlBQWMwVyxHQUFzQjV5QixFQUFNMFMsT0FFMUNoQixDQUFNLEtBRU5taEIsU0FBUyxJQUVUbFcsY0FBZXJLLElBRWYyRCxZQUFjalcsS0FBS2lXLFVBRW5CcFcsSUFBS3lTLEdBQ0xyQixLQUFNcUIsR0FDTmxLLE1BQU9rSyxHQUNQeUIsU0FDQWxMLGFBQ0F3SSxDQUFNaUIsWUFDTk8sRUFBWVAsV0FDWjBCLGFBQ0E4ZSxTQUFZLEtBQ1pDLFVBQVksS0FFWnhyQixXQUNBMmxCLGFBQXVCM2xCLElBQVM0bEIsUUFBWSxFQUM1Q3RGLFNBQVUsUUFDVlcsWUFBZSxFQUdmck8sV0FBVyxFQUNYcE0sYUFBYSxHQUNiakQsZ0JBQ0Frb0IsR0FBSSxpQkFFQSxHQUNKM3BCLFVBQ0ksS0FDSnFpQixFQUFHLEtBQ0huaUIsR0FBSSxLQUNKdWpCLElBQUssS0FDTDNoQixHQUFJLEtBQ0pKLEVBQUcsT0FDSGtvQixFQUFLLEtBQ0xDLElBQUssUUFDRCxLQUNKQyxHQUFJLFNBWUMsSUFQSTlyQixLQUFBeEgsQ0FBTSxDQUFFa1EsRUFBRzFJLEdBRWJBLElBQUFtSyxHQUFPM0osS0FBZ0IySixJQUFPbkssRUFDdkNBLEVBQVNxSyxVQUFZTyxHQUFLLE1BQU01SyxFQUM1QlMsRUFBTU8sSUFDUlAsRUFBTU8sVUFJVixFQUFJbEIsR0FBa0IsS0FDaEIsYUFBMkJBLElBQW1Cb0ksR0FDcEQsS0FBSTZqQixFQUNBQyxHQUNKLENBQ0UsTUFBTUMsTUFBSWhQLEdBQ0ppUCxRQUE2QkMsSUFDN0IsSUFBQUMsTUFJSixJQUhNQSxDQUFVSCxXQUNKRyxDQUFBSCxLQUFFajhCLEVBQU8sSUFDckJvOEIsRUFBUWw5QixLQUFLaTlCLEtBQ0w5YyxFQUNGK2MsS0FBUXg4QixXQUNGRyxPQUFTWixZQUVULEVBQUdrZ0IsS0FHWTBjLFNBQzNCLDBCQUNDMWMsZUFFa0I2YyxFQUNuQix1QkFDQzdjLEdBQU1ySSxNQUVYLENBQ0EsU0FBNEJoSCxJQUMxQixNQUFNckcsRUFBT21HLEtBR2IsS0FGQWlzQixLQUEyQi9yQixDQUMzQkEsRUFBUytoQixNQUFNc0ssS0FDUixNQUNMcnNCLENBQVMraEIsTUFBTXVLLFlBRWpCLEVBRUlDLElBQXVCLElBQ1J6c0IsT0FBZ0JpaUIsTUFBTXVLLFFBQ3pDUCxDQUEyQixxQkFVQS9yQixDQUNwQixPQUEyQixFQUEzQkEsZUFBZStFLEVBQ3hCLENBQ0EsSUE0R0l5bkIsR0FDQUMsR0E3R0F6bEIsSUFBd0IsRUFDNUIsU0FBU3VaLEdBQWV2Z0IsRUFBVTBzQixJQUFRLEVBQ3hDQSxHQUFTVixHQUFtQlUsR0FDNUIsU0FBTTNyQixHQUFFQSxXQUFPRSxHQUFhakIsVUFDVHNKLEdBQW9CdEosSUEzK0d6QyxhQUF1QzJzQixHQUFZRCxFQUFRLEdBQ3pELFVBQWMsQ0FDUmhnQixFQUFRLEdBQ1Y0SyxLQUFPRSxHQUFtQixJQUNyQnhYLENBQUFzViw4QkFBOEMsSUFDMUM4TSxXQUEyQjFWLENBQ3hDLFVBQVcxYyxLQUFPZ1EsRUFBU3lMLGVBQWEsQ0FDaEN6YixNQUFPK1EsR0FDWEEsRUFBTS9RLFFBQU8sR0FNYjI4QixFQUNGM3NCLEVBQVNlLE9BQVEyckIsQ0FBUTNyQixFQUFRNnJCLEdBQWdCN3JCLEdBRTVDZixHQUFTckgsYUFHSG9JLFlBRkFBLE9BS0oyTCxjQXE5R2tCaWdCLENBQVlELEdBQ3ZDclYsTUFBb0JwVyxFQUNwQixXQUlGLFFBQWdDakIsRUFBVTBzQixHQUV4QyxNQUFNRyxFQUFZN3NCLEVBQVNySCxLQXVCbEJxSCxFQUFBdUwsWUFBcUM1ZixVQUFBOGQsSUFBTyxNQUNyRHpKLFFBQWlCOHNCLEdBQVEsSUFBSUMsTUFBTS9zQixFQUFTeEgsV0FJdEMsSUFBQStGLE1BQUVBLElBQVVzdUIsQ0FDbEIsU0FDUSxPQUF3QmxnQixtQkFBcUIvYyxHQUFTLE9BQXVCb1EsQ0FBWSxLQUN6RnJKLEVBQVFpUSxNQUNBRCxLQUNkLE1BQU1xbUIsRUFBYzVVLElBQ2xCN1osQ0FDQXlCLEtBR2dGQSxFQUFTZSxPQUN2RjRMLEdBS0EsTUFGVXNnQixFQUNSdDJCLElBQ0Z1MkIsR0FBVUYsR0FBYyxDQUUxQixJQURZQSxDQUFBLzZCLE1BQUtzNkIsSUFBc0JBLEVBQ25DRyxLQUNLLE1BQVl6NkIsUUFBTWs3QixFQUNMQyxHQUFBcHRCLEVBQVVtdEIsRUFBZ0JULEVBQUssSUFDaER4NkIsT0FBT203QixJQUNJcHRCLFNBQWMsY0FHbkJ1Z0IsQ0FBV3dNLENBT3RCLE1BRWtCSSxHQUFBcHRCLEVBQVVndEIsV0FHOUJNLEVBQXFCdHRCLEVBQVUwc0IsS0F2RXVCMXNCLENBQVUwc0IsUUFBUyxFQUVwRSxPQURQQSxHQUFTVixRQUVYLENBdUVBLFNBQVNvQixLQUE0QkosRUFBYU4sR0FDNUNoL0IsR0FBV3MvQixXQUNLTyxpQkFDaEJ2dEIsRUFBU3d0QixjQUVBbGYsUUFBUzBlLENBRVhwL0IsSUFBU28vQixJQVNUaHRCLFFBQUF3TCxLQUFhaWlCLEdBQVVULEtBU2xDTSxFQUFxQnR0QixFQUFVMHNCLEVBQ2pDLENBWUEsVUFBU1ksRUFBcUJ0dEIsRUFBVTBzQixHQUFPZ0IsRUFDN0MsUUFBa0IxdEIsRUFBU3JILE9BQ3ZCLEVBQUNxSCxFQUFTc08sVUFDWixFQUFLb2UsT0FBU0YsQ0FBWUssRUFBVXZlLFlBQ2xDLEVBQU1xZixFQUFXZCxLQUFVYyxZQUFpQzN0QixDQUFVMnRCLGFBQ2xFQSxDQUFVLEVBSVosTUFBTUMsb0JBQUUxYixjQUFpQkEsRUFBb0JsUyxFQUFTcUwsV0FBV1UsYUFDM0Q4aEIsTUFBRUEsRUFBWTNiLGdCQUFpQjRiLEdBQTZCakIsR0FDNURrQixDQUF1Qnp2QixHQUMzQkEsR0FDRSxDQUNFc3ZCLHVCQUNBQyxhQUlKQyxFQUVRakIsRUFBQXZlLE9BQVNrZSxHQUFRbUIsRUFBVUksRUFJdkMsQ0FDRixDQUNTL3RCLEVBQUFzTyxPQUFTdWUsRUFBVXZlLGVBRTFCbWUsR0FBaUJ6c0IsRUFFckIsQ0FDaUMsQ0FDekIsTUFBQXJKLEVBQVFpUSxHQUFtQjVHLE1BQ25CMkcsRUFDVixRQUNXM0csQ0FBUSxDQUNyQixlQUVNckosQ0FDUixDQUNGLENBVUYsS0FrQ0EsVUFBNEJxSixDQUNwQixTQUFVa1EsR0FxQkxsUSxFQUFBa1EsUUFBVUEsR0FBVyxHQUFDLENBZ0J4QixVQUNMLE1BQUl4RCxlQXhFVixJQUF1QjFNLE1BQ3JCLElBQU9BLFFBQVN5ckIsUUFBZXpyQixDQUFTeXJCLFdBQWEsSUFBSXNCLE1BQ3ZEL3NCLEVBQVMwTSxNQWVMLENBQ0YxZCxNQUFJOEgsQ0FBUTlHLE1BQ0pnK0IsR0FBQWh1QixDQUFVLFlBQ1RsSixFQUFPOUcsVUFzRGhCLE9BQ0F3UixDQUFPeEIsRUFBU3dCLFdBQ1Z4QixFQUFTcUssUUFDZnNFLGFBSU4sR0FBU3BGLFNBQ0h2SixHQUFTa1EsT0FDSixVQUFTa2IsYUFBZ0JwckIsRUFBU29yQixnQkFBa0IyQixNQUFNVSxHQUFVWCxXQUFpQjVjLE9BQzFGbGhCLEVBQUEsQ0FBSThILGNBRU9BLENBQU85RyxHQUNMQSxNQUFPd1osRUFDVEEsVUFBeUJ4SixRQUdwQ3FNLEVBQUEsQ0FBSXZWLEtBQVE5RyxDQUNIQSxLQUFPOEcsR0FBVTlHLEtBQU93WixRQU92QyxPQUFTL0csR0FBaUJvcUIsRUFBV29CLEtBQWtCLENBQzlDLE9BQUF2Z0MsTUFBd0JtL0IsRUFBVXFCLGFBQWVyQixXQUEyQi8vQixPQUEyQisvQixFQUFVc0IsTUFDMUgsRUEyQk0sV0FBNkJDLEtBQ3ZCQyxFQUFXQyxFQUFpQkYsZUErRC9CaGUsR0FBRXpYLEVBQU00MUIsZ0JBQ0xyYSxPQUFVdGtCLGNBQ1YsSUFBTjRYLEVBQ0U1WixRQUE4QkosR0FBUStnQyxLQUNwQ3ZsQixDQUFRdWxCLEtBQ0hwdUIsQ0FBWXhILEVBQU0sTUFBTzQxQixLQUUzQnB1QixHQUFZeEgsQ0FBTTQxQixLQUVsQnB1QixDQUFZeEgsRUFBTSxlQUlkbEwsTUFBTUYsZUFBVWdDLENBQU10QixLQUFLaW1CLGNBQ3ZCLEdBQU4xTSxLQUFXd0IsQ0FBUS9ILEtBQzVCQSxFQUFXLENBQUNBLElBRVBkLElBQVl4SCxDQUFNNDFCLEVBQWlCdHRCLFFBNkw5QyxLQUFTdXRCLEdBQVc1ckIsS0FDbEIsTUFBTWpKLEVBQU9pSixNQUFPaW9CLENBQ2hCLEdBQUFseEIsRUFBSy9KLGVBQWVBLEVBQ2YsU0FFVCxRQUFTa0IsRUFBSSxHQUFHQSxDQUFJNkksRUFBSy9KLGNBQ25CNitCLEdBQVc5MEIsRUFBSzdJLEdBQUkrNUIsR0FBSy81QixJQUNwQixVQU1KLEtBSEhnNEIsR0FBcUIsWUFDVjU1QixHQUFLMFQsSUFFYixDQUNULEtBRUEsRUFBTXdRLEdBQVUsU0FDVjlrQixNQUNBb2dDLEdBQW1CQyxHQUNuQkMsT0FDQUMsR0F4Nk9OLG1CQUNNQyxFQUFJQyxFQUVSLEdBRGFDLEdBQUFwcEIsRUFDVG9wQixHQUNGQSxHQUFXQyxTQUFVLEVBQ2RDLEdBQUFuL0IsYUFBV2QsU0FBT2tCLFVBQXNCa2EsS0FBS3BiLEtBQVVrQixLQUM5RCsrQixNQUFTLEtBQ1gsR0FJb0IscUJBQVgxa0MsUUFDUEEsT0FBTzJrQyxjQUM2RCxXQUFqQyxPQUFyQjNrQyxXQUFPNGtDLGFBQXFCLENBQVNOLEVBQUdPLGdCQUFxQixFQUFTTixFQUFHcnBCLFNBQVMsWUFFakY1TyxFQUFPdzRCLGlDQUFzQ0EsNEJBQWdDLEtBQ3JGcGdDLEtBQU1xZ0MsSUFDWEMsR0FBa0JELENBQVN6NEIsRUFBTSxJQUVuQ3lKLGtCQUNPeXVCLFFBQ0lNLDZCQUErQixNQUU3QixHQUNYLEdBQ0MsUUFBRyxXQXc1T0pHLENBUlksQ0FDaEJuUCw2QkFDQUMsZ0JBQ0FpQix5QkFDQWtPLGdDQUFBMW1CLEtBQ0FBLEdBQ0E2Tiw0QkN0OVA4QixjQUFibHNCLFlBQTJCQSxXQUN4Q2dsQyxPQUErQ0MsU0FBQXh0QixRQUFjLFlBQzdEeXRCLEdBQVUsQ0FDZHJXLGFBQXdCdFcsTUFDZjVYLGFBQWF5ZCxFQUFPN0YsVUFFN0JzVixVQUFTelAsQ0FDUCxNQUFNdkksRUFBU3VJLEVBQU13USxXQUNqQi9ZLEdBQ0ZBLEVBQU9zdkIsWUFBWS9tQixFQUNyQixFQUVGM0csZUFBZ0J6VixFQUFLMFcsVUFDYixLQUFBNkIsRUFBbUIsUUFBZDdCLEVBQXNCdXNCLEdBQUk5a0MsZ0JBZjNCLGdDQWV1RSxZQUFkdVksQ0FBeUJ1c0IsUUFBSTlrQyxXQWRuRix3Q0Fjb0g4a0MsR0FBSXh0QixnQkFBbUIydEIsRUFBSyxDQUFFQSxnQkFJeEosSUFISyxhQUFScGpDLENBQW9Cb1UsR0FBMkIsT0FBbEJBLENBQU1pdkIsVUFDbEM5cUIsRUFBQTlaLGlCQUFhLFFBQVkyVixDQUFNaXZCLFVBRTdCOXFCLENBQUEsT0FFVG1VLE9BQWFsaEIsRUFBU3kzQixHQUFJSyxlQUFlOTNCLElBQ3pDc2hCLGFBQWdCdGhCLElBQVN5M0IsRUFBSW5XLHNCQUM3QitELEdBQVMsQ0FBQzNnQixFQUFNMUUsTUFDZDBFLENBQUtxekIsVUFBWS8zQixDQUFBLFVBRW5CdWxCLE9BQWdCLENBQUN4WSxFQUFJL00sU0FDaEJ3akIsYUFFTHBDLFdBQWExYyxLQUFjMGMsV0FDM0JELFlBQWN6YyxHQUFTQSxFQUFLeWMsZUFDNUJtTyxXQUFnQjBJLFVBQWlCMUksVUFBYzBJLEdBQy9DLFVBQUF2UyxDQUFXMVksS0FDTkEsR0FBQTlaLGtCQUNMLENBS0Esb0JBQW9CK3VCLEVBQVMzWixRQUFrQ2hRLFVBQ3ZENC9CLENBQVNsdEIsSUFBZ0I2WCxnQkFBa0J2YSxLQUFPalYsVUFDcERnRixXQUEyQkEsRUFBTStvQixhQUNuQyxLQUNFOVksTUFBT2xWLGFBQW1CK2tDLFNBQVUsTUFDaEM5L0IsT0FBVUMsQ0FBU0QsUUFBYytvQixlQUdsQyxDQUNhcVcsT0FBQXRrQyxRQUEwQixlQUFRLENBQVE4dUIsVUFBZ0MsV0FBZDlXLEdBQXlCLFFBQVM4VyxXQUFtQkEsRUFDbkksUUFBaUJ3VixHQUFrQnhWLFFBQy9CLEdBQWMsUUFBZDlXLEtBQXFDLFNBQWRBLE9BQ3pCLEVBQU1pdEIsRUFBVTNDLFFBQVN2VCxLQUN6QixNQUFPa1csQ0FBUWxXLFlBQ0p1VCxXQUFBNEMsTUFBb0JuVyxXQUUvQnVULEVBQVNtQyxZQUFZUSxFQUN2QixFQUNPOXZCLENBQUFsVixhQUFhcWlDLEVBQVV6cUIsS0FFekIsT0FFSWt0QixFQUFPOVcsWUFBYzlZLEVBQU80WixZQUVyQ2xYLENBQVNBLEVBQU82WCxnQkFBa0J2YSxFQUFPalYsV0FFN0MsRUFHSWlsQyxHQUFhLGFBQ2JDLEdBQVksWUFDWkMsT0FBU2grQixHQUFPLFFBQ2hCaStCLEdBQWEsQ0FBQzV2QixHQUFTUyxXQUFZNE8sR0FBRXdnQixHQUFnQkMsR0FBdUI5dkIsR0FBUVMsR0FDMUZtdkIsR0FBV3pDLGdCQUFjLFNBQ3pCLE9BQU00QyxFQUErQixDQUNuQ2hrQyxLQUFNb0UsVUFDTnlILEVBQU16SCxVQUNONi9CLENBQUssQ0FDSHA0QixLQUFNdWQsU0FDTnZXLFdBRUZxeEIsU0FBVSxDQUFDOS9CLFdBQVFxUSxHQUFRNVYsU0FDM0JzbEMsY0FBZ0IvL0IsU0FDaEJnZ0MsZUFBa0JoZ0MsT0FDbEJpZ0MsYUFBY2pnQyxXQUNka2dDLFlBQWlCbGdDLFVBQ2pCbWdDLHFCQUFtQm5nQyxDQUNuQm9nQyxjQUFlcGdDLE9BQ2ZxZ0MsdUJBQ0FDLG9CQUFrQnRnQyxHQUNsQnVnQyxhQUFjdmdDLFFBRVZ3Z0MsR0FBNEJmLEdBQVc1dkIsTUFBd0J6QyxHQUNuRSxDQUFDLEVBQ0RxekIsR0FDQWIsSUFFSTdnQixHQUFXLENBQUNySyxFQUFNelYsRUFBTyxNQUN6QjNDLEdBQVFvWSxHQUNWQSxLQUFLN1YsTUFBUzZoQyxHQUFPQSxVQUNaaHNCLEdBQ1RBLEtBQVF6VixFQUNWLEVBRUkwaEMsSUFBdUJqc0IsSUFDcEJBLElBQU9wWSxHQUFRb1ksR0FBUUEsRUFBS0gsTUFBTW1zQixJQUFPQSxDQUFHaGlDLE9BQVMsSUFBS2dXLEVBQUtoVyxPQUFTLE1BRWpGLFVBQWdDeWtCLEVBQzlCLFNBQWtCLEVBQ2xCLFdBQVdya0IsUUFDSEEsR0FBTzhnQyxLQUNEZ0IsRUFBQTloQyxHQUFPcWtCLE9BR2pCLEdBQWlCLEtBQWpCQSxDQUFTMGMsSUFDSixPQUFBZSxLQUVILElBQUFobEMsVUFDRzZMLEtBQ1BBLEdBQUFxNEIsUUFDQUEsTUFBQUMsV0FDQUEsRUFBaUIsTUFBR25rQyxjQUFJb2tDLDZCQUNGcGtDLFFBQUlxa0MsYUFDMUJBLEVBQWUsS0FBR3JrQyxZQUFJc2tDLGVBQ3RCQSxFQUFrQkgsRUFBQUksa0JBQ2xCQSxLQUFvQkMsY0FDcEJBLENBQWdCSCxFQUFBSSxlQUNoQkEsRUFBaUIsR0FBR3prQyxlQUFJMGtDLG1CQUNMLEdBQUcxa0MsaUJBQUkya0MsY0FDMUJBLENBQWUsR0FBRzNrQyxjQUNoQnVuQixFQUNFMGQsS0FvRlIsTUFBMkJmLElBQ3pCLEVBQWdCLFVBQ1AsY0FDRXBqQyxHQUFTb2pDLEVBQ1gsT0FBQ2dCLElBQVNoQixDQUFTL1UsT0FBUStWLEdBQVNoQixFQUFTck0sUUFDL0MsQ0FDQyxNQUFBamEsR0FBSXNuQixXQUNILENBQUN0bkIsRUFBR0EsRUFDYixLQTVGb0NzbUIsQ0FDOUJpQixFQUFnQkYsR0FBYUEsRUFBVSxHQUN2Q0csRUFBZ0JILEdBQWFBLEdBQVUsSUFDdkNJLGFBQ0pBLE9BQUFDLEdBQ0FBLE1BQUFDLG1CQUNBQyxJQUNBQSxFQUFBQyxpQkFDQUEsRUFBQUMsaUJBQ2lCTCxFQUFBTSxhQUNOQyxrQkFDWEEsSUFBb0JMLENBQ2xCUCxZQUMrQmEsRUFDWEMsS0FBSUMsR0FBV3ZCLENBQWdCSCxHQUMvQnlCLElBQUExdEIsQ0FBSTJ0QixLQUErQjNCLEVBQ3pEeUIsU0FFSUcsQ0FBYyxDQUFDNXRCLElBQUl5dEIsT0FDcEJJLFVBQWEsRUFDaEJILEtBQTBCckIsR0FDMUJxQixHQUFzQjF0QixHQUFJdXNCLEVBQzFCbUIsR0FBc0IxdEIsRUFBSXNzQixXQUd0QndCLEVBQWlCSCxHQUNkLEVBQUMzdEIsQ0FBSXl0QixLQUNKLFVBQWtCRixFQUFXTCxFQUM3Qjl5QixRQUE0QjRGLEVBQUkydEIsRUFBVUYsR0FDaEQxaUIsU0FBb0IzUSxHQUNwQjJ6QixXQUN3QkwsQ0FBQTF0QixFQUFJMnRCLEVBQVd6QixFQUFrQkgsR0FDcENpQyxPQUFlNUIsRUFBZ0JILFFBQ3pCdnJCLEVBQ0p1dEIsS0FBSXg2QixFQUFNczVCLEVBQWUzeUIsTUFFL0MsQ0FHTCxRQUFPaEIsS0FDTCxhQUFBNnpCLFFBQ1dBLENBQWUsQ0FBQ2p0QixJQUN6Qmd1QixVQUNBQSxDQUFtQmh1QixFQUFJZ3NCLEVBQ3pCLEVBQ0EsY0FBQXNCLENBQWV0dEIsR0FDSitLLEdBQUF1aUIsRUFBZ0IsT0FDekJVLENBQW1CaHVCLEVBQUlrc0IsS0FDdkI4QixDQUFtQmh1QixFQUFJbXNCLEVBQ3pCLEVBQ0FlLFFBQVNZLEdBQWMsR0FDdkJQLFVBQVVPLEVBQWMsR0FDeEIsT0FBQVYsRUFBUXB0QixDQUFJeXRCLEdBQ1Z6dEIsS0FBRzZ0QixTQUFhLEVBQ2hCLE1BQU16ekIsRUFBVSxJQUFNd3pCLElBQWdCSCxHQUN0Q08sSUFBbUJodUIsQ0FBSXFzQixHQUNYNkIsTUFDWkYsRUFBbUJodUIsVUFDVCxJQUNIQSxFQUFHNnRCLGFBR1JILEdBQXNCMXRCLEtBQ3RCZ3VCLFNBQ0tyQixFQUFvQlMsS0FDSmEsR0FBQWp1QixDQUFJdk0sRUFBTXU1QixFQUFlNXlCLEdBQzlDLE1BRUYyUSxDQUFTcWlCLE1BQWNoekIsRUFDekIsSUFDQSxlQUFpQjRGLEtBQ0hBLEdBQUksS0FDUCtLLENBQUFvaUIsRUFBa0IsQ0FBQ250QixLQUU5QixpQkFBQXd0QixDQUFrQnh0QixHQUNoQm11QixFQUFZbnVCLEdBQUksR0FDUCtLLE1BQW9CL0ssR0FDL0IsV0FDQSxPQUFBcXRCLENBQWlCcnRCLE9BQ0hBLENBQ0grSyxHQUFBc2lCLEVBQWtCLENBQUNydEIsTUFHbEMsQ0FXQSxTQUFTOHNCLElBQVNya0MsRUFLVCxPQUpLMmxDLE1BTWQsU0FBU0osR0FBbUJodUIsRUFBSXF1QixLQUMxQjVpQyxNQUFNLFFBQU9aLFNBQVMyZixFQUFNQSxPQUFROGpCLFFBQVVudUIsTUFBSXFLLElBQ3JEeEssR0FBR3dyQixLQUFZeHJCLEVBQUd3ckIsT0FBOEIsQ0FBQTd1QixPQUFRd0QsSUFBSWt1QixDQUMvRCxDQUNBLFNBQVNYLEdBQXNCMXRCLEdBQUlxdUIsRUFDN0JBLElBQUE1aUMsVUFBTSxDQUFPWixTQUFTMmYsR0FBTUEsS0FBUThqQixjQUFVaGIsTUFBTzlJLE9BQ25ELENBQUErakIsT0FBVS9DLENBQ1orQyxJQUNGQSxFQUFLM3dCLE9BQU95d0IsR0FDUEUsS0FBS0MsSUFDUnh1QixFQUFHd3JCLFdBQVUsQ0FHbkIsQ0FDQSxTQUFTdUMsR0FBVVUsTUFDakJDLHNCQUFzQixHQUNwQkEsc0JBQXNCRCxFQUFFLEdBRTVCLENBQ0EsS0FBSUUsRUFBUSxNQUNaLFFBQTRCM3VCLEdBQUk0dUIsQ0FBY0MsRUFBaUJ6MEIsR0FDdkQsVUFBUTAwQixTQUFXSCxHQUNuQkksRUFBb0IsU0FDYi91QixFQUFHOHVCLFFBQ0oxMEIsR0FDVixFQUVGLEdBQUl5MEIsRUFDSyxPQUFBeHpCLFdBQVcwekIsTUFFcEIsU0FBTXQ3QixDQUFFQSxHQUFNaUcsVUFBQXMxQixTQUFTQSxJQUFjQyxFQUFrQmp2QixRQUN2RCxDQUFLdk0sRUFDSCxPQUFPMkcsSUFFVCxVQUF3QixRQUN4QixFQUFJODBCLElBQ0osT0FBTTVqQyxDQUFNLE9BQ1A2akMsc0JBQThCQyxHQUNmTCxHQUFBLEdBRWRLLENBQVNqSCxPQUNQdjJCLFFBQVdvTyxLQUFRa3ZCLE9BQ25CNWpDLEVBQ04sWUFFRitQLEVBQVcsTUFDTDZ6QixDQUFRRixRQUVaLENBQ0N0MUIsRUFBVSxHQUNWc0csT0FBQXpaLFlBQWlCOG9DLEVBQVVELEVBQ2hDLE1BQ0EsUUFBMkJwdkIsQ0FBSTR1QixHQUN2QixNQUFBVSxFQUFTaHFDLE9BQU9pcUMsaUJBQWlCdnZCLE1BQ1hsVixTQUF3QixJQUFJVyxNQUFNLFFBQ3JDK2pDLEdBQW1CLElBQUdsRSxVQUN6Q21FLENBQXNCRCxFQUFtQixNQUFHbEUsY0FDeEJvRSxJQUE2QkQsR0FDakRFLEVBQWtCSCxJQUFtQixDQUFHakUsV0FDeENxRSxHQUFxQkosQ0FBbUIsR0FBR2pFLGNBQzNDc0UsRUFBbUJILE1BQTRCRSxFQUNyRCxJQUFJbjhCLEtBQU8sRUFDUGlHLE9BQ1ksQ0FDWmsxQixJQUFpQnRELEdBQ2Z3RSxFQUFvQixJQUNmcjhCLEVBQUE2M0IsSUFDRzV4QixDQUFBbzJCLEVBQ1ZkLEtBQWdDdGtDLE9BRXpCa2tDLElBQWlCckQsR0FDdEJzRSxFQUFtQixJQUNkcDhCLEVBQUE4M0IsS0FDR3NFLEVBQ1ZiLE9BQStCdGtDLE1BR3ZCZ1AsRUFBQXZOLE1BQUtDLElBQUkwakMsQ0FBbUJELEdBQ3RDcDhCLEdBQU9pRyxDQUFVLEVBQUlvMkIsT0FBb0R2RSxHQUFZLEtBQ3JGeUQsR0FBWXY3QixDQUFPQSxJQUFTNjNCLEtBQWlDNWdDLE9BQVNrbEMsSUFBbUJsbEMsT0FBUyxDQUs3RixVQUNMK0ksSUFDQWlHLFdBQ0FzMUIsV0FDQWUsYUFQbUJ0OEIsTUFBUzYzQixFQUFjLHlCQUF5QnI3QixLQUNuRXUvQixHQUFtQixJQUFHbEUsWUFBc0IxaUMsYUFTaEQsU0FBUzhtQyxHQUFXTSxFQUFRbkQsSUFDbkIsSUFBQW1ELFVBQWdCbkQsQ0FBVW5pQyxVQUN0QnNsQyxFQUFPdGpCLE9BQU9zakIsU0FFekIsQ0FBTzdqQyxNQUFLQyxPQUFPeWdDLENBQVV2aUMsTUFBSzJsQyxFQUFHcmtDLE1BQU1za0MsQ0FBS0QsSUFBS0MsRUFBS0YsSUFBT3BrQyxRQUVuRSxTQUFjaUMsR0FDWixTQUFVLFFBQ0QsRUFDeUMsS0FBM0N3TyxPQUFPeE8sQ0FBRXhELE1BQU0sR0FBRyxJQUFJcEMsU0FBUSxHQUFLLElBQzVDLENBQ0EsU0FBU2ltQyxLQUNQLE9BQU96b0MsU0FBU0QsS0FBSzJxQyxhQWlCdkIsTUFBTUMsR0FBdUI1aUMsT0FBTyxRQUM5QjZpQyxRQUFjN2lDLEVBQU8sUUFDckI4aUMsR0FBUSxDQUNaLGNBQVl0d0IsQ0FBSWxYLFNBQUVBLENBQVNtWCxXQUFFQSxLQUN4QkQsQ0FBQW93QixJQUE2QyxTQUFyQnB3QixPQUFHbmEsQ0FBTTBxQyxVQUFxQixDQUFLdndCLElBQUduYSxRQUFNMHFDLFdBRTFEaGEsWUFBWXZXLFFBRVJsWCxFQUVuQixZQUNRa1gsQ0FBSWxYLE1BQUVBLElBQVNtWCxpQkFDakJBLENBQWNuWCxNQUNMaXVCLEtBQU0vVyxFQUVyQixLQUNBLElBQUE2SSxJQUFZL2YsV0FBRTBuQyxNQUFPQSxLQUFZdndCLFVBQUVBLEtBQzVCblgsSUFBVzBuQyxLQUVadndCLENBQ0VuWCxHQUNGbVgsSUFBV3NXLFdBQVl2VyxFQUN2Qnl3QixHQUFXendCLFNBQ0ErVyxLQUFNL1csSUFFTkMsRUFBQXdmLE1BQU16ZixHQUFJLEtBQ25CeXdCLEdBQVd6d0IsSUFBSSxDQUFLLElBSXhCeXdCLE1BQWUzbkMsRUFFbkIsRUFDQSxhQUFBbWdCLENBQWNqSixHQUFJbFgsTUFBRUEsSUFDbEIybkMsR0FBV3p3QixFQUFJbFgsRUFDakIsR0FLRixVQUFTMm5DLEVBQVd6d0IsRUFBSWxYLE1BQ25CakQsS0FBTTBxQyxRQUFVem5DLEVBQVFrWCxFQUFHb3dCLE9BQXdCLE1BQ25EQyxNQUNMLENBU0EsU0FBcUI3aUMsYUFDckIsT0FBU2tqQyxHQUFXdmxCLE9BQ2xCLEVBQU1yUSxFQUFXeUIsWUFHZixNQUVJLE1BQUFvMEIsR0FBa0I3MUIsQ0FBU3lvQixPQUFhcFksQ0FBT3JRLEVBQVM2SyxhQUN0RHBkLE1BQUFrYSxFQUNKaGQsWUFBU21yQyxtQkFBaUIsYUFBa0I5MUIsRUFBU2lpQixVQUNyRGx5QixVQUFTOE0sUUFBNkJrNUIsS0FLcENDLElBQVUsU0FDUkQsRUFBTzFsQixFQUFPclEsSUFBUzZLLFFBQ2Q3SyxTQUFTdUUsQ0FBU3d4QixLQUNqQkEsRUFBSSxFQUV0QkUsSUFBZ0JELEVBQ2hCeHhCLE9BQVUsRUFDRixNQUFBMHhCLFNBQVNDLGNBQWlCSCxXQUM3QkksRUFBUXAyQixLQUFTdUUsU0FBV2dWLFVBQVksQ0FBRThjLFdBQVcsSUFDNUNod0IsSUFBQSxNQUFTaXdCLGdCQUFZLENBRXJDLENBQ0EsU0FBU0MsSUFBZTkxQixDQUFPczFCLEdBQ3pCLElBQWtCLEdBQWxCdDFCLEdBQU1zRSxTQUFpQixNQUN6QixDQUFNN0UsRUFBV08sU0FBTVAsRUFDdkJPLEVBQVFQLEVBQVNzMkIsYUFDYnQyQixFQUFTMGxCLGdCQUFrQjFsQixHQUFTdTJCLGNBQzdCdjRCLFNBQVFoUCxPQUFLLEdBQ0xxbkMsR0FBQXIyQixJQUFTczJCLFlBQWNULENBQUksTUFJaEQsR0FBT3QxQixHQUFNdUMsV0FDWHZDLENBQVFBLEVBQU11QyxVQUFVdUIsUUFFMUIsSUFBc0IsQ0FBbEI5RCxRQUFNc0UsUUFBdUJHLEVBQ2pCd3hCLFNBQVVYLFlBQ1RwOUIsZUFDVHNJLFNBQVNsUixNQUFTMmYsR0FBTTZtQixHQUFlN21CLEVBQUdxbUIsVUFDbEQsR0FBV3QxQixJQUFNOUgsU0FDWCxNQUFBdU0sQ0FBRUEsRUFBSWhDLFdBQVd6QyxDQUNyQixLQUFPeUUsSUFDTHd4QixPQUFrQlgsQ0FDZDd3QixRQUVKQSxFQUFLQSxFQUFHb1UsV0FFWixJQUVGLE9BQVNvZCxJQUFjeHhCLENBQUk2d0IsS0FDckIsQ0FBZ0IsSUFBaEI3d0IsRUFBRzZULFlBQ0wsSUFBTWh1QixHQUFRbWEsQ0FBR25hLFdBQ2I0ckMsQ0FBVSxJQUNkLGFBQVczbUMsQ0FBTytsQyxFQUNoQmhyQyxFQUFNNnJDLFlBQVksUUFBSzVtQyxDQUFPK2xDLEVBQUsvbEMsSUFDbkMybUMsVUFBZ0IzbUMsU0FBYUEsU0FFVDJtQyxDQUN4QixDQUNGLENBRUEsTUFBTUUsSUFBWSxxQkFrRGxCLFFBQU1DLENBQWMsaUJBQ3BCLFVBQVNDLEVBQVNoc0MsRUFBTytCLEVBQU1hLEdBQ3pCLEdBQUFILEdBQVFHLEdBQ1ZBLEVBQUlvQyxXQUFTc2YsQ0FBTTBuQixHQUFTaHNDLEdBQU8rQixDQUFNdWlCLFdBV3JDLEVBVE8sT0FBUDFoQixTQVNBYixFQUFLa3FDLGNBQVcsU0FDWkosUUFBWTlwQyxFQUFNYSxTQUVsQixVQWVaLFNBQTJCc3BDLEVBQ25CLE1BQUFyMEIsRUFBU3MwQixJQUFZRCxNQUN2QnIwQixDQUNLLE9BQUFBLEVBRUwsT0FBTzZSLEVBQVN3aUIsR0FDaEIsR0FBUyxlQUFZbnFDLE1BQ2hCLFNBQUFvcUMsQ0FBWUQsR0FBV25xQyxNQUV6QnFxQyxDQUFXcnFDLEdBQ2xCLFdBQWEsQ0FBR2dFLEdBQUlzbUMsRUFBU3huQyxPQUFRa0IsSUFBSyxDQUNsQyxNQUFBdW1DLEdBQVdELEdBQVN0bUMsSUFDMUIsUUFBZ0IvRixFQUNQLE9BQUFtc0MsU0FHSixRQS9CY0ksQ0FBV3ZzQyxPQUN4QityQyxDQUFZM2hDLFFBQ1JwSyxFQUFBNnJDLGVBQ01TLGNBQ0VQLFNBQ1osWUFHSU8sS0FJZCxDQUNBLE1BQU1ELEdBQVcsQ0FBQyxlQUFpQixNQUM3QkYsT0FvQk4sS0FBTUssR0FBVSwrQkFrRWhCLGNBQThCdG9DLFNBQ3pCeEQsaUJBQWlCd0QsZUFLaEJ1b0MsQ0FBUzlrQyxRQUFPLFlBQ3RCLEtBQVMra0MsT0FBd0JDLENBQVdDLEVBQVczM0IsRUFBVyxNQUNoRSxTQUFpQmtGLENBQUdzeUIsTUFBWXR5QixNQUFhLElBQ3ZDMHlCLEdBQWtCQyxDQUFTWixHQUNqQyxRQUNFVyxFQUFnQjVwQyxTQUFRMnBDLEdBQ25CLEdBQ0wsSUFBTzdxQyxFQUFNNEgsR0FXakIsWUFDTSxPQUNBLFFBQWtCUyxFQUFLckksSUFFckIsSUFBQWtWLElBQ0osRUFGQXROLEtBRU9zTixFQUFJbFYsTUFBS3VELEVBQU15bkMsS0FDYmhyQyxRQUFLeUMsRUFBTSxNQUFRSyxPQUFXLEdBQUdBLFFBQ3hDOEUsRUFBUXNOLEdBQUUsRUFBRzBZLGtCQUdqQixTQUEwQixNQUFaNXRCLENBQUssS0FBa0J5QyxPQUFNLFNBQW9CQSxJQUFNLFFBQzlELE1BQVFtRixDQUNqQixNQXRCSSxFQUFJaWpDLE9BQ0YsRUFBTUksSUFBbUJkLE9BeUIvQixhQUNRLE1BQVc1SixRQUNSMkssTUFFSSxHQUFBM0ssVUFBa0I0SyxhQUMzQixRQUZFNUssRUFBQTJLLEtBQU9FLE9BQUtDLEtBSWhCdHhCLFVBV0osQ0FBdUN3bUIsRUFBR3IvQixHQUNwQyxHQUFBUixHQUFRUSxHQUFRLENBQ2xCLE1BQU1vcUMsS0FBaUJDLDBCQUt2QixPQUpFQSx5QkFBMkIsTUFDM0JELENBQWFucUMsTUFBS28vQixFQUNsQkEsU0FBRWlMLEdBQVcsYUFFV2hWLFlBQVdnVixhQUF3QixDQUV0RCxhQW5CNEJQLENBQVEvcEMsT0FDekNnUyxVQU9HLE9BRlArM0IsRUFBUS9wQyxPQUFRdXFDLENBQ2hCUixhQUFtQlMsUUF4QzhDeDRCLFlBQ3pCdEwsWUFDM0JrakMsQ0FkZixTQUE2QjF5QixFQUFJalcsSUFBZ0J5RixPQUM1QzIvQixtQkFBb0JwbEMsQ0FBT0gsRUFBUzRGLEVBQ3pDLEdBYTBCd1EsQ0FBSXBZLEVBQU04cUMsRUFBaUJsakMsR0FDL0NtakMsR0FBU1osWUFJZixNQUFNYSxFQUFvQiw0QkFjMUIsUUFBZ0IsQ0FDaEIsT0FBTS8xQixhQUE0QnpDLFFBQzVCazVCLEVBQVMsSUFBTUMsS0FBYzEyQixHQUFFOVAsTUFBSyxjQUFrQ2ltQyxNQUFLQyxTQWdDakYsZ0JBQTRCbm9DLENBQUlzSixxQkFBeUJ0SixHQUFJc0osVUFBVyxJQUN4RXRKLEVBQUlzSixXQUFXLE9BQVd0SixFQUFJc0osV0FBVyxHQUFLOztBQWtFOUMsU0FBU28vQixHQUFvQmhrQyxFQUFTaWtDLEdBQzlCLE1BQUFDLEVBQU94NkIsR0FBZ0IxSjsyQkFVL0IsTUFHTW1rQyxHQUFtQzs7Ozs7Ozs7Ozs7QUN0eEJ6Qzs7Ozs7O0FDS0EsSUFBSUMsUUFRSixDQUFNQyxRQUE2QkQsQ0FBY0UsRUFLM0NDLElBQXNHdm1DLFFBRTVHLFNBQVN4RSxHQUVUaXJCLElBQ0ksTUFBUUEsR0FDUyxpQkFBTkEsU0FDK0IsY0FBdEN4dEIsVUFBTzRCLFNBQVVPLE9BQVNHLEtBQUtrckIsSUFDWCxtQkFBYkEsRUFBRStmLE1BQ2pCLENBTUEsT0FDV0MsT0FzQlJBLFFBQWdDLENBQUcsT0FkYixJQUFJLFNBTXpCQSxHQUEwQixZQUFJLGdCQU05QkEsSUFBNEIsWUFBSSxpQkEwaUNwQyxNQUFNQyxHQUFPLE9BQ2IsU0FBU0MsR0FBZ0JDLEVBQWVDLEVBQVV4N0IsRUFBVXk3QixFQUFZSixJQUNwRUUsRUFBY3BxQyxLQUFLcXFDLEdBQ25CLE1BQU1FLEVBQXFCLEtBQ2pCLE1BQUFDLEVBQU1KLEVBQWNqcUM7b0NDditCbEMsSUFpQklzcUMsR0FqQnlFQyxHQUFrQixDQUM3RjlzQyxLQUFNLFlBQ05xaEMsU0FBUSxrQkFDRjBMLEVBQ0csQ0FBQzNpQixHQUFNNGlCLElBQVlDLE1BQWVDLE9BQXFCLENBQU8sQ0FDbkVDLFFBQU8sMkJBQ1BDLFlBQVMsYUFDUixDQUNEQyxHQUFxQixPQUFRLEVBQzNCQyxLQUFNLGlCQUNILDBOQW1EUEMsQ0FqQnlFQyxHQUFrQixDQUM3Rnh0QyxLQUFNLFlBQ05xaEMsWUFBUSxRQUNSNXZCLE1BQU1zN0IsS0FDSTNpQixDQUFNNGlCLEtBQVlTLEtBQWVDLEdBQXFCLFNBQzVEUCxJQUFPLDhCQUNQQyxPQUFTLGlCQUNSLENBQ0RPLEdBQXFCLE9BQVEsQ0FDM0JMLEtBQU0sZUFDTmpGLEtBQUcsME5BbURQdUYsSUFqQjBFQyxFQUFtQixDQUMvRjd0QyxLQUFNLGNBQ05xaEMsTUFBUSxjQUNSNXZCLE1BQU1zN0IsR0FDRyxDQUFDM2lCLEVBQU00aUIsS0FBWWMsU0FBc0MsS0FBTyxLQUNyRVgsRUFBTyw4QkFDUEMsT0FBUyxtQkFFVFcsU0FBOEIsQ0FDNUJULFFBQU0sWUFDTmpGLFNBQUcsb05BbURQMkYsSUFqQnVFQyxFQUFtQixDQUM1Rmp1QyxZQUFNLE9BQ05xaEMsR0FBUSxZQUNSNXZCLFFBQ1MsQ0FBQzJZLEVBQU00aUIsUUFBWWtCLEdBQWdCQyxFQUFzQixTQUM5RGhCLElBQU8sbUNBQ1BDLEVBQVMsb0JBRVRnQixDQUFzQixPQUFRLENBQzVCZCxRQUFNLFlBQ05qRixFQUFHLDJOQTZhUGdHLENBakJ1RUMsR0FBbUIsQ0FDNUZ0dUMsUUFBTSxRQUNOcWhDLE9BQVEsV0FDUjV2QixNQUFNczdCLFlBQ3NCd0IsT0FBc0MsVUFDOURwQixHQUFPLGdDQUNQQyxNQUFTLGdCQUNSLElBQ3FCLE9BQVEsQ0FDNUJFLEtBQU0saUJBQ0gsMGhCQXFIUGtCLE9BaEJGeHVDLEtBQU0sY0FDTnFoQyxLQUFRLGNBQ1I1dkIsT0FBTXM3QixFQUNHLENBQUMzaUIsS0FBTTRpQixLQUFZeUIsRUFBZ0JDLFNBQTZCLENBQ3JFdkIsTUFBTyw2QkFDUEMsWUFBUyxrQkFFYSxPQUNwQkUsU0FBTSxpQkFDSCxzQ0FhVHR0QyxPQUFNLGFBQ05xaEMsR0FBUSxtQkFDRjBMLEVBQ0csQ0FBQzNpQixPQUFrQnVrQixLQUFnQkMsR0FBc0IsTUFBTyxDQUNyRXpCLE1BQU8sNkJBQ1BDLFlBQVMsY0FFVHlCLE9BQXNCLEtBQ3BCdkIsSUFBTSxlQUNOakYsTUFBRywrQkF1TVB5RyxJQWpCb0VDLEtBQ3RFL3VDLEdBQU0sUUFDTnFoQyxPQUFRLFlBQ1I1dkIsRUFBTXM3QixLQUNJM2lCLENBQU00aUIsTUFBWWdDLElBQWdCQyxLQUFzQixTQUM5RDlCLEVBQU8sOEJBQ1BDLE9BQVMsa0JBRVQ4QixPQUFzQixPQUNwQjVCLEVBQU0sa0JBQ0gsa0lBb0lvRTZCLENBQW1CLENBQ2hHbnZDLE9BQU0sZUFDTnFoQyxzQkFDQTV2QixPQUNVMlksRUFBTTRpQixPQUFZb0MsR0FBZ0JDLEtBQXNCLHFCQUN2RCxtQkFDUGpDLGtCQUFTLE9BQ1IsQ0FDRGtDLEdBQXNCLE9BQVEsQ0FDNUJoQyxLQUFNLGVBQ05qRixFQUFHLGtHQUVMaUgsVUFBOEIsQ0FDNUJoQyxLQUFNLGVBQ05qRixFQUFHLGtKQTZCUGtILE9BaEJGdnZDLFVBQU0sZUFDTnFoQyxPQUFRLHdCQUNSNXZCLElBQU1zN0IsTUFDVUMsU0FBWXdDLENBQWdCQyxPQUFzQixFQUFPLElBQ3JFdEMsT0FBTywyQkFDUEMsT0FBUyxnQkFDUixJQUNxQixPQUFRLENBQzVCRSxNQUFNLGNBQ05qRixLQUFHLHdSQVlvRXFILE1BQzdFMXZDLEdBQU0sY0FDTnFoQyxPQUFRLHdCQUVDLENBQUNqWCxNQUFNNGlCLENBQVkyQyxNQUFnQkMsRUFBc0IsTUFBTyxDQUNyRXpDLE9BQU8sOEJBQ1BDLE9BQVMsZ0JBQ1IsQ0FDRHlDLE1BQXNCLElBQVEsSUFDNUJ2QyxNQUFNLFdBQ05qRixLQUFHLG9OQUVMd0gsT0FBc0IsUUFDcEJ2QyxDQUFNLGdCQUNOakYsQ0FBRyx5R0F5RlB5SCxDQXpCb0VDLE9BQ3RFL3ZDLEVBQU0sUUFDTnFoQyxXQUFRLElBQ1I1dkIsU0FDUyxDQUFDMlksT0FBa0I0bEIsS0FBZ0JDLFdBQ3hDOUMsS0FBTywrQkFDUEMsTUFBUyxpQkFDUixDQUNEOEMsR0FBc0IsT0FBUSxDQUM1QjVDLFFBQU0sWUFDTmpGLEVBQUcscUdBRWlCLFNBQ3BCaUYsSUFBTSxlQUNOakYsRUFBRywwRUFFTDZILEdBQXNCLFVBQ3BCNUMsR0FBTSxlQUNOakYsRUFBRyw4REFtRFA4SCxHQWpCb0VDLEdBQW1CLENBQ3pGcHdDLE9BQU0sTUFDTnFoQyxPQUFRLFFBQ1I1dkIsTUFBTXM3QixPQUNVQyxVQUE0QnFELEVBQXNCLE1BQU8sQ0FDckVsRCxRQUFPLDZCQUNQQyxNQUFTLGlCQUNSLENBQ0RrRCxHQUFzQixZQUNwQmhELENBQU0sZUFDTmpGLEVBQUcsbVJBOFhvRWtJLEVBQW1CLElBQ2hHdndDLEdBQU0sZUFDTnFoQyxXQUFRLFNBQ1I1dkIsU0FDVTJZLEVBQU00aUIsS0FBWXdELEtBQWdCQyxHQUFzQixRQUM5RHRELFNBQU8seUJBQ1BDLFdBQVMsaUJBRVRzRCxDQUFzQixhQUNkLG9CQUNILHNiQVlxRUMsR0FBbUIsQ0FDakczd0MsS0FBTSxjQUNOcWhDLGFBQVEsWUFDUjV2QixJQUFNczdCLE1BQ1VDLE9BQVk0RCxHQUFnQkMsR0FBc0IsUUFDOUQxRCxTQUFPLDhCQUNQQyxHQUFTLG9CQUVUMEQsQ0FBc0IsT0FBUSxDQUM1QnhELEtBQU0sZUFDTmpGLEdBQUcsZ2FBZ0s4RDBJLEdBQW1CLE1BQ3BGLFNBQ04xUCxPQUFRLFdBQ1I1dkIsU0FDVTJZLENBQU00aUIsS0FBWWdFLFFBQXNDLE9BQzlEN0QsTUFBTyw4QkFDUEMsT0FBUyxrQkFFVDZELEdBQXNCLFVBQ3BCM0QsR0FBTSxpQkFDSCxtVkF1T1A0RCxLQWpCdUVDLENBQW1CLEtBQzVGbnhDLENBQU0sV0FDTnFoQyxPQUFRLFdBQ1I1dkIsTUFBTXM3QixPQUNVQyxTQUE0Qm9FLEdBQXNCLE1BQU8sQ0FDckVqRSxTQUFPLDBCQUNQQyxRQUFTLGlCQUNSLENBQ0RpRSxLQUFzQixPQUNwQi9ELFNBQU0sWUFDSCxzTkF1bkJUdHRDLE9BQU0sV0FDTnFoQyxPQUFRLGVBQ1I1dkIsUUFDUyxDQUFDMlksTUFBTTRpQixDQUFZc0UsY0FBK0MsQ0FDdkVuRSxPQUFPLDRCQUNQQyxRQUFTLG1CQUVUbUUsRUFBdUIsV0FDckJqRSxFQUFNLGVBQ05qRixNQUFHLHlUQWlXUG1KLEVBckJtRUMsR0FBb0IsQ0FDekZ6eEMsTUFBTSxNQUNOcWhDLFFBQVEsUUFDUjV2QixRQUNVMlksRUFBTTRpQixLQUFZMEUsVUFBd0MsSUFBTyxJQUN2RXZFLFFBQU8seUJBQ1BDLGFBQVMsa0JBRWMsT0FDckJFLEtBQU0sdUJBQ0gscWdDQUVMcUUsR0FBdUIsT0FBUSxDQUM3QnJFLE1BQU0sY0FDTmpGLEVBQUcsa1BBbU9QdUosRUFqQjBFQyxLQUM1RTd4QyxXQUFNLFFBQ05xaEMsUUFBUSxxQkFFRWpYLEVBQU00aUIsTUFBWThFLGFBQStDLENBQ3ZFM0UsTUFBTyw2QkFDUEMsUUFBUywyQkFFYyxDQUFRLENBQzdCRSxNQUFNLGVBQ05qRixDQUFHLDRuQkFxS1AwSixHQWpCc0VDLEdBQW9CLENBQzVGaHlDLE1BQU0sU0FDTnFoQyxPQUFRLFVBQ1I1dkIsUUFBTXM3QixDQUNHLENBQUMzaUIsS0FBTTRpQixFQUFZaUYsS0FBaUJDLGNBQ3pDL0UsRUFBTyxpQ0FDUEMsSUFBUyxrQkFFVCtFLGVBQ0U3RSxDQUFNLG1CQUNILDJ0QkF1ZFA4RSxHQWpCb0VDLE1BQ3RFcnlDLE1BQU0sTUFDTnFoQyxNQUFRLFlBQ1I1dkIsRUFBTXM3QixNQUNVQyxNQUFZc0YsTUFBaUJDLENBQXVCLFFBQ2hFcEYsU0FBTywrQkFDUEMsRUFBUyxpQkFDUixJQUNzQixTQUNyQkUsSUFBTSxlQUNOakYsVUFBRyxzREFpSVBtSyxDQWpCMEVDLEtBQzVFenlDLElBQU0sYUFDTnFoQyxPQUFRLGNBQ1I1dkIsVUFDVTJZLEVBQU00aUIsTUFBWTBGLFFBQXdDLE9BQ2hFdkYsVUFBTyx3QkFDUEMsU0FBUyxnQkFDUixDQUNEdUYsTUFBdUIsU0FDckJyRixDQUFNLGVBQ05qRixFQUFHLHVKQTZCUHVLLEVBakJtRUMsV0FDL0QsUUFDTnhSLE9BQVEsT0FDUjV2QixrQkFDNEJxaEMsQ0FBaUJDLEdBQXVCLE1BQU8sS0FDdkU1RixFQUFPLDZCQUNQQyxRQUFTLHFCQUVjLFFBQ3JCRSxRQUFNLGNBQ0gsb1JBMmRUdHRDLE9BQU0sY0FDTnFoQyxjQUFRLFlBQ1I1dkIsSUFBTXM3QixTQUNVQyxFQUFZZ0csT0FBaUJDLENBQXVCLFFBQ2hFOUYsS0FBTyxpQ0FDUEMsTUFBUyxnQkFFVDhGLE9BQXVCLFVBQ2YsZ0JBQ0gsOFNBK0pQQyxPQWhCRm56QyxTQUFNLEdBQ05xaEMsVUFBUSxNQUNSNXZCLE9BQ1MsQ0FBQzJZLEtBQU00aUIsRUFBWW9HLE9BQWlCQyxDQUF1QixPQUNoRWxHLE9BQU8sK0JBQ1BDLE9BQVMsdUJBRWMsR0FBUSxDQUM3QkUsT0FBTSxhQUNOakYsS0FBRyxnSEFpUVBpTCxHQWpCOEVDLElBQ2hGdnpDLEtBQU0sb0JBQ05xaEMsSUFBUSx5QkFDRjBMLEtBQ1VDLE9BQVl3RyxHQUFpQkMsVUFDekN0RyxTQUFPLDBCQUNQQyxVQUFTLGdCQUVUc0csT0FBdUIsVUFDZixnQkFDSCxtOEJBdUdQQyxRQWhCRjN6QyxPQUFNLFdBQ05xaEMsY0FBUSxjQUNGMEwsR0FDRyxhQUFvQzZHLEdBQXVCLE1BQU8sQ0FDdkV6RyxNQUFPLDZCQUNQQyxRQUFTLGlCQUNSLENBQ0R5RyxJQUF1QixPQUNyQnZHLEtBQU0saUJBQ0gsNk9BNkJQd0csRUFqQjRFQyxLQUM5RS96QyxXQUFNLFNBQ05xaEMsWUFBUSxtQkFFQyxDQUFDalgsRUFBTTRpQixRQUFZZ0gsRUFBaUJDLE1BQXVCLE9BQ2hFOUcsV0FBTyx5QkFDUEMsT0FBUyxlQUVUOEcsT0FBdUIsY0FDZixXQUNON0wsQ0FBRyw0T0ErSVA4TCxDQWpCZ0ZDLE9BQ2xGcDBDLEVBQU0scUJBQ05xaEMsT0FBUSxrQkFDUjV2QixPQUFNczdCLENBQ0csQ0FBQzNpQixjQUFtQ2lxQixDQUF1QixPQUNoRWxILFFBQU8sMkJBQ1BDLFFBQVMsaUJBQ1IsQ0FDRGtILEtBQXVCLE1BQ3JCaEgsS0FBTSxlQUNOakYsTUFBRywyMUJBaUZQa00sQ0FqQnFFQyxHQUFvQixJQUMzRngwQyxFQUFNLGFBQ05xaEMsVUFBUSxFQUNSNXZCLE1BQU1zN0IsUUFDVUMsT0FBWXlILENBQWlCQyxVQUN6Q3ZILFFBQU8sNEJBQ1BDLFNBQVMsZUFDUixLQUNzQixNQUFRLENBQzdCRSxPQUFNLGFBQ05qRixJQUFHLDhKQXVaUHNNLFFBaEJGMzBDLElBQU0sWUFDTnFoQyxNQUFRLGFBQ1I1dkIsTUFBTXM3QixFQUNHLElBQU9DLElBQVk0SCxPQUFpQkMsQ0FBdUIsT0FDaEUxSCxNQUFPLDZCQUNQQyxTQUFTLGtCQUVUMEgsRUFBdUIsT0FBUSxDQUM3QnhILFFBQU0sWUFDTmpGLFNBQUcsbUhBNkJQME0sRUFqQnNFQyxLQUN4RWgxQyxhQUNBcWhDLE9BQVEsY0FDUjV2QixFQUFNczdCLE9BQ1VDLElBQVlpSSxLQUFpQkMsUUFBdUIsQ0FBTyxDQUN2RS9ILE1BQU8sZ0NBQ1BDLE9BQVMsZ0JBRVQrSCxLQUF1QixPQUNyQjdILEtBQU0saUJBQ0gsNkhBeUVQOEgsS0FqQjBFQyxDQUFvQixDQUNoR3IxQyxLQUFNLGlCQUNOcWhDLEtBQVEsWUFDUjV2QixTQUNTLENBQUMyWSxPQUFrQmtyQixPQUFpQkMsQ0FBdUIsT0FDaEVwSSxTQUFPLDBCQUNQQyxRQUFTLGtCQUVUb0ksTUFBdUIsUUFDckJsSSxNQUFNLGlCQUNILG1TQTZCUG1JLENBakJtRUMsTUFDckUxMUMsS0FBTSxNQUNOcWhDLE1BQVEsT0FDUjV2QixTQUNTLENBQUMyWSxFQUFNNGlCLFNBQVkySSxDQUFpQkMsT0FBdUIsTUFDaEV6SSxNQUFPLDBCQUNQQyxTQUFTLGdCQUNSLENBQ0R5SSxHQUF1QixPQUFRLENBQzdCdkksS0FBTSxlQUNOakYsRUFBRyw2akJBdURQeU4sVUFoQkY5MUMsRUFBTSxnQkFDTnFoQyxPQUFRLG9CQUNSNXZCLEdBQU1zN0IsS0FDSTNpQixDQUFNNGlCLEtBQVkrSSxNQUFpQkMsTUFBdUIsTUFDaEU3SSxNQUFPLGlDQUNQQyxDQUFTLGlCQUNSLGFBRUNFLFlBQU0sV0FDSCwwTUFpeUJQMkksT0FoQkZqMkMsS0FBTSxPQUNOcWhDLE9BQVEsT0FDUjV2QixNQUFNczdCLElBQ0kzaUIsRUFBTTRpQixLQUFZa0osUUFBd0MsU0FDaEUvSSxRQUFPLHlCQUNQQyxRQUFTLGtCQUVUK0ksR0FBdUIsT0FBUSxLQUM3QjdJLENBQU0sbUJBQ0gseVhBeUdQOEksTUFqQmlHLENBQ25HcDJDLE1BQU0saUJBQ05xaEMsT0FBUSxrQkFDUjV2QixPQUNVMlksRUFBTTRpQixLQUFZcUosVUFBd0MsT0FDaEVsSixVQUFPLHVCQUNQQyxRQUFTLGlCQUNSLENBQ0RrSixNQUF1QixlQUNmLFVBQ05qTyxFQUFHLDJPQTZIUGtPLE9BaEJGdjJDLE1BQU0sU0FDTnFoQyxTQUFRLE9BQ1I1dkIsU0FDUyxDQUFDMlksRUFBTTRpQixNQUFZd0osUUFBd0MsT0FDaEVySixRQUFPLDZCQUNQQyxNQUFTLG1CQUVUcUosQ0FBdUIsT0FBUSxDQUM3Qm5KLE1BQU0sZUFDTmpGLENBQUcsc1FBNkJQcU8sTUFqQjJGLENBQzdGMTJDLFNBQU0sT0FDTnFoQyxNQUFRLFlBQ1I1dkIsS0FBTXM3QixLQUNJM2lCLENBQU00aUIsS0FBWTJKLE9BQWlCQyxDQUF1QixNQUFPLENBQ3ZFekosT0FBTyw0QkFDUEMsUUFBUyxtQkFFVHlKLEVBQXVCLE9BQVEsQ0FDN0J2SixLQUFNLGtCQUNILGlOQ3R3TlgsUUFBTXdKLENBQVksZ0JBQ1pDLENBQWtCbDJDLEdBQVFBLEVBRTFCbTJDLElBQWEvdEIsRUFBTS9sQixLQUN2QixJQUFLcEMsS0FBU21vQixFQUZVbm9CLE9BRVFtb0IsTUFGZTZ0QixFQUc3QyxXQUhhLEVBQUNqMkMsRUFJaEIsU0FBTTJYLFFBQVF5K0IsU0FBWXBrQyxjQUFxQmhILENBQUVBLE1BQUlxckMsTUFBRUEsT0FDcEMxK0IsUUFBdUIzWCxDQUN4QyxPQUFZLEVBQ1JzMkMsRUFBZ0IsS0FVcEIsQ0FUSTMrQixJQUNGMitCLEVBQWdCeDJDLFVBQU1rYSxDQUFLckMsR0FDdkI2RixLQUFhLGVBQ0RqYyxNQUFLaWxCLENBRXJCK3ZCLE1BQWtCRCxFQUFjditCLFdBQVMvWCxRQUd6Q3UyQyxHQUFVQSxFQUFRRixJQUFVcjJDLE9BQ2hCczJDLEVBQWNyMEMsT0FBUyxJQUNuQyxRQUF3QixRQUFRaVMsT0FBb0JyUyxpQkFBb0J2QyxRQUFVZSxPQUFRdUQsQ0FBSyxNQUMvRmpELFFBQUssbUNBQXdDLFVBQWMwQixPQUFTLHNCQUF3Qm0wQyxpQkFBK0JuM0MsS0FBS0MsaUJBRWxJLE9BQU9pM0MsSUFBSyxNQUVSRSxFQUFTLElBQ2J6ckMsTUFDQW9yQyxTQUFZQSxFQUNaQyxhQUNDSixNQUFZLE1BSWYsTUFGVzd0QixHQUFNLGVBQ1JwVyxrQkFHU29CLENBQVVzakMsa0JBQXlCdGpDLEdBQU92UixRQUFNUSxDQUFLczBDLFFBRXZFUixHQUFVUSxNQUFRdDBDLEdDdkNkdTBDLEtBQ0pyekMsT0FDQXZGLE1BQ0F5cEIsVUFFSW92QixHQUFrQixDQUN4QkMsTUFBRUEsSUFFSUMsTUFDTkQsSUFBRUEsR0FDRkUsZ0JBQUVBLENBQ0ZDLFdBQUVBLFFBQ0ZDLFNBQUVBLE1BQ0ZDLG1CQUVNQyxHQUFvQixDQUN4QkMsWUFDQUMsT0FBU0osS0FDVGh3QyxJQUFPaXdDLEdBQ1BJLE9BQU1OLEVBRUZPLEdBQXdCLENBQzVCQyxXQUFZQyxHQUNaTCxRQUFTTSxHQUNUendDLE1BQU8wd0MsTUMxQkhDLENBQWMsSUFBT0MsT0FFekJDLEVBQUtueUIsWUFDSCxLQUFLLEtBQU05VCxJQUFRLENBQUNpbUMsT0FBUy81QyxPQUFPMlosWUFBT21nQyxDQUFnQkEsRUFBUSxLQUNqRTV6QixFQUFJN08sWUFBZWxXLG1CQUloQixFQUFPa0QsRUFBS3lQLEtBQVM5VCxPQUFPZzZDLFFBQVFGLFlBSzNDLE1BQVcsRUFFUEcsS0FBdUJoc0MsQ0FBSTlNLFVBRTVCeW1CLGdCQUVFbmIsVUFBZUEsUUFDZDJULFVBQU9ELGlCQUEyQixFQUVqQ2xTLE9BU2dCb0osTUFFYnVRLE9BQVVwRCxNQ2hDaEIwMUIsR0FBYyxNQUFJNzdCLEVBQ2Q5RSxPQUNEblYsUUFBU3NRLFFBQ0dBLEVBQ2JBLEVBQUk2RSxNQUVBbFgsY0NUTyxDQUNqQjgzQyxNQUFLLFFBQ0w3cEIsRUFBTyxhQUNQOHBCLENBQU8sUUFDUGw2QyxRQUFNLFNBQ05tNkMsR0FBSSxVQUNKQyxVQUFPLFNBQ1BDLEtBQU0sdUJBQ0QsRUFDTHBqQyxPQUFRLFdBQ1JxakMsUUFBVyxlQUNYQyxTQUFhLGNBQ2JDLE9BQVEsV0FDUkMsUUFBVSxVQUNWQyxLQUFNLE9BQ04vMUMsSUFBSyxPQ2ZEZzJDLEtBQXFCLGtCQUNyQkMsTUFBZSxRQUNmQyxDQUFjLFdDRkcsQ0FBQyxLQUFJLFNBQVcsT0FBUyxXQ0kxQ0MsQ0FBd0JoNUMsaUJBQWdDK1gsY0NFMURraEMsRUFBNkIsQ0FBRUMsS0FDakNBLENBQVlBLEVBQWtCLGFBQVMsRUFDdkNBLFdBQW1DLEVBQUssYUFDVCxnQkFDL0JBLEVBQVlBLGNBQTRCLGdCQUNKLGVBQVUsY0FDTixXQUFJLFdBQU0sVUFDbERBLEVBQVlBLE1BQTZCLGVBQUksQ0FBTSxrQkFDbkRBLE1BQXdDLGFBQUksS0FBTyxpQkFDbkRBLEVBQVlBLEVBQThCLGlCQUFJLFVBQU8sZ0JBQ3pDQSxFQUF3QixZQUFJLGVBQU8sRUFDL0NBLEVBQVlBLE9BQTJCLFVBQUksS0FBUSxnQkFDbkRBLEVBQVlBLEtBQXFCLE9BQUssRUFBSyxVQUMzQ0EsRUFBWUEsRUFBa0IsU0FBVSxPQUNqQ0EsR0Fkd0IsRUFlOUJELEdBQWMsSUFDakIsU0FBU3ZxQixHQUFXeGYsR0FDbEIsU0FBT21NLENBQVFuTSxJQUFTQSxFQUFLbEUsT0FBUzhQLEtBWXhDLE9BQVNxK0IsSUFBbUJqcUMsRUFDMUIsT0FBT21NLE9BQVFuTSxDQUFVd2YsTUFBV3hmLEVBUnRDLFNBQW1CQSxHQUNqQixPQUFPbU0sWUFBc0JyUSxPQU9pQm1nQixDQUFVamMsTUF1QnJELE9BQXVCQSxRQUNyQm1NLEVBQVFuTSxNQUVYLEdBQU8sTUFFVCxJQUFNeVQsQ0FBTXpULEVBQUtrRSxVQUNYcEksR0FBUXFRLE1BQWFyUSxTQUFhQSxNQUFLb0ksUUFBUSxLQUFXLEVBQzFEQSxFQUFRLFNBU2QsQ0FSQXBWLE9BQU9tRSxLQUFLNkksSUFBTTVJLFFBQVNDLE9BQ2QySSxFQUFLM0ksaUJBQ2QrUSxDQUFNL1EsTUFBWUEsRUFBSzJQLFFBQ3hCLFFBRUhoVSxPQUFPbUUsQ0FBS3dnQixpQkFDVnZQLENBQU0wVCxHQUFTemtCLElBQVFzZ0IsRUFBSXRnQixNQUV0QitRLENBQUssTUFRV0UsbUJBQ3VCLENBQUNBLE1BQ2hDLEVBY2YsUUFiQThsQyxDQUFPaDNDLFNBQVNnWixLQUNkLGtCQUVTN1osR0FBUTgzQyxLQUFnQmorQixFQUN0QkMsTUFBUUQsQ0FBVXZiLE1BQWN5VCxrQkFDbEMvUixDQUFRODNDLE1BQXNCL2xDLFdBRXJDbWpCLE9BQVlyYixPQUNBQSxlQUF1Qi9GLGdCQUFxQixFQUFTOHJCLEtBQUd2cUIsV0FDM0RyVixRQUFRODNDLENBQWdCaitCLFlBQWdCeEUsZUFJeEMsRUNqR1QwaUMsTUFBa0IsT0FBSSxDQUFJcGxDLE1BQUlzaUIsRUFDOUIraUIsT0FDQy9pQixFQUFlLElBQVJBLEVBRUwxMkIsU0FBTUQsS0FBUTIyQixNQUFjQSxNQ04vQmdqQixNQUFxQix1Q0FBb0NoeUMsR0FBS2dELE1DQW5EeEssRUFBUUEsTUNLSyxRQUFTLFNBQ2pDeTVDLE1BQWtCLFNBQ2xCMzZCLEVBQVcsS0FBVSxJQUN6QixXQUFNNDZCLG1CQUEwQkMsZUFDMUJDLFlBQ29CLE9BQWZELFNBQStCQSxDQUFZdDVDLFFBQVUsS0FBSTRqQixXQUFPNDFCLENBRXJFeG5DLEVBQVd5QixRQUNqQixJQUlPeUwsR0FKRmxOLEVBSVcsS0FDZCxJQUFJOHVCLEVBQ0osT0FBT3VWLE1BQVUxNEMsT0FBT2c2QyxPQUFpQyxPQUFuQjNsQyxFQUFTNkssY0FBMEJpa0IsRUFBRzJZLFdBQVEva0MsU0FBUzFTLFFBQXlCaEMsU0FBTTBYLE9BQVMxVixFQUFVcTNDLE9BQW9DbHlDLElBQUtuRixNQUFPLFFBSnRLLE9DWHZCMDNDLENBQWdCLFFBQUcvL0IsQ0FBTWdnQyxjQUFhNWxCLFFBQU8zTyxjQUFTL1MsRUFBSzFILE9BQU8sT0FBU2l2QyxLQUMvRXY2QixJQUFNLE1BQU13NkIsQ0FBTUQsTUFBYWo2QyxPQU83Qm02QyxhQUFXLENBQ1gsRUNURUMsS0FBZ0JDLENBQVdDLE9BQW9CQyxFQUNuRCxLQUFJQyxDQUFZLENBQ2RDLFFBQVMsRUFDVEMsUUFBUyxHQUVYLE1BQU1DLE1BQ0osT0FBTUMsQ0FBUWxiLE9BQUVtYixPQUNBQyxVQUNWTCxPQUFFQSxFQUFPQyxnQkFDSUwsQ0FBVWg2QyxPQUFNMDZDLHlCQUNoQkMsRUFBVzk4QyxNQUN4Qis4QyxDQUFZRCxPQUNaRSxDQUFjRixNQUFXMTlDLEVBQ3pCNjlDLE1BQTBCNTlDLFNBQ1pQLFFBQVNvK0MsZUFBZ0JDLGVBQ3hCcitDLFFBQVNvK0MsZ0JBQWdCRSxhQUN4Q0MsR0FBV0MsRUFBYWYsS0FDZFEsRUFBWVAsSUFDWlcsRUFBY0csSUFBMkJmLEVBQ25EZ0IsSUFBd0JSLEtBQTJCUCxDQUNuRGdCLE1BQ0osUUFBc0IvbEIsTUFBR2tsQixNQUNyQmMsSUFBa0JobUIsS0FBR21sQixLQUFVYyxHQUNqQixRQUFackIsS0FBbUIsRUFBU0EsS0FBU2w2QyxVQUNqQ3FELEdBQUt5eEIsU0FBU3h4QixJQUFJazRDLElBQU9OLENBQVVPLElBQzNDSCxDQUFRajRDLEtBQUt5eEIsSUFBSXp4QixNQUFLQyxrQkFHdEI4MkMsT0FDQUMsUUFBU2lCLEdBRVB0QixFQUFVaDZDLFVBQ0ZBLE1BQU1qRCxNQUFNbzlDLFVBQVksZ0JBQXFCcUIsUUFBV0UsRUFBUUosTUFDM0UsRUFFR0ssS0FBWSxFQUNoQmgvQyxnQkFBUzBwQyxvQkFBb0IsaUJBQ3BCQSxvQkFBb0IsVUFBV3NWLGdCQUVqQ2wrQyxrQkFBaUIsUUFBYTQ5QyxnQkFDOUI1OUMsZUFBaUIsUUFBV2srQyxnQkFRekIzN0MsT0FBbUJBLE1BQzdCaTZDLEVBQVFqNkMsUUFBTXFtQyxrQkFBb0IsWUFBYWlVLE1BR25EOWpDLEVBQVUsS0FDUm9sQyxLQUFZLE1BQ0k1N0MsT0FYWmk2QyxDQUFRajZDLE9BQVNnNkMsTUFBVWg2QyxNQUNyQkEsS0FBTXZDLGlCQUFpQixlQWE3Qm8rQyxHQUNELFFBR0xsbEMsR0FBZ0IsTUFDZGtsQyxFQUFjLEtDOURaQyxLQUFtQnQ0QyxDQUFXLENBQUN1NEMsT0FBaUJDLEVBQVVELElBQWNsQyxHQUFNcjJDLFFBQ2pFdTRDLEVBQU16RixFQUFROXlDLE9BQWVBLEVBQVF1NEMsRUFBTUEsR0FBTTU4QyxTQUFRLGVBQWV1YixDQUFHMVksZ0JBRTVGLENBQU8sT0FBbUQsR0FBL0M4K0IsTUFBZSxFQUFWd1YsT0FBaUIsRUFBU0EsSUFBT3QwQyxFQUFnQjgrQixNQUFTOStCLFFBQVEsRUFXOUVpNkMsS0FBbUJ2M0MsT0FBTyx1QkFDYnczQyxFQUNqQixNQUFNMTRDLEdBQVMwNEMsRUFBbUJ6OEIsTUFBeUJwTixNQUMzRCxNQVp5QixDQUFDN08sTUFJeEIyNEMsTUFIV2o5QixFQUFTLElBQU0yNkIsSUFBTXIyQyxFQUFRMUUsT0FJeEMwRSxPQUhnQjBkLEtBQU0xZCxDQUFVQSxLQUFhQSxNQUkxQ3M0QyxHQUFnQnQ0QyxLQU1LMGIsSUFBUyxLQUFNMWIsQ0FBT3hELFVBQVNvOEMsRUFBUyxVQ2pCOURDLEdBQU8sU0FBeUMvc0MsU0FDaERpMkIsRUFBTSxLQUFHbHdCLEdBQWFpbkMsUUFVMUIsV0FSUyxNQUFJQyxFQUVUQyxJQUNGalgsS0FBTyxHQUFLaVgsTUFFVmx0QyxPQUNLLEtBQUtBLElBRVBpMkIsUUFFbUI3Z0MsS0FBTyx1QkFDN0IrM0MsR0FBMEJDLEtBQzlCLFFBQXlCQSxRQUE4Q2o5QixPQUE0QnBOLEVBQUlzcUMsS0FBcUJ0cUMsUUFJNUgsUUFIa0I2TSxNQUFTLENBQ2xCMjZCLE1BQU0rQyxDQUFxQkQsS0FFcEIsQ0FFWkUsR0FBZSxLQUFRSCxRQUMzQixDQUFNcm5DLElBQVlvbkMsQ0FBdUJDLE1BZ0N6QyxRQUNFcm5DLFFBQ0FrVCxFQWpDUSxDQUFDZzBCLElBQWMsUUFBc0J2OEMsT0FBT3M4QyxDQUFPQyxTQWtDM0RsZCxFQWpDU21kLE1BQXNCSCxFQUFLaG5DLE1BQVVyVixFQUFPczhDLEtBQVdFLEVBQVMsV0FDaEVsdEMsQ0FBYUEsUUFBMEJ0UCxLQUFPczhDLEVBQU8sTUFBUWh0QyxLQUFZLENBa0NsRnd0QyxNQWpDdUJOLEtBQVlELEVBQWVDLEVBQVVILEtBQWVyOEMsT0FBT3M4QyxDQUFPQyxNQUFzQixFQUFNLEtBa0NySFEsQ0FqQ1MsQ0FBQ1AsRUFBU2x0QyxLQUFha3RDLEVBQVdsdEMsSUFBVytzQyxDQUFLaG5DLE1BQVVyVixFQUFPczhDLElBQU8sQ0FBSUUsRUFBU2x0QyxHQUFZLEtBa0M1R3NrQixDQWpDUyxDQUFDMm9CLE1BQTBCQSxPQUEwQkYsQ0FBS2huQyxRQUFpQmluQyxFQUFPQyxFQUFhLElBQUlqdEMsRUFBWSxRQUM3R2l0QyxFQUFhQyxFQUFTbHRDLE9BQTRCa3RDLE1BQXNCSCxFQUFLaG5DLElBQVVyVixNQUFjdThDLE9BQWtDLE9BQ3hJejlDLFFBQVNxRCxNQUNuQixFQUFNNmEsSUFBUTdhLEdBQUtQLE9BQVUsT0FBUyxFQUN0QyxPQUFPOUMsTUFBZ0IsS0FBaUJBLElBQVMsRUFBRSxLQWdDbkRrK0MsSUE5QmNDLEtBQ2QsWUFDQSxFQUFLLE1BQU1qN0MsU0FDRUEsS0FDVHdrQyxFQUFPLFNBQWV4bUMsT0FBU2dDLEtBQVNpN0MsRUFBT2o3QyxJQUduRCxPQUFPd2tDLENBQU0sRUF3QmIwVyxZQWJrQnArQyxFQUFTLEtBQUt1VyxFQUFVclYsZUFjMUNtOUMsVUF2Qm1CRixNQUNuQixPQUFlLEVBQ2YsSUFBSyxTQUFNajdDLEdBQU9pN0MsQ0FDWkEsRUFBT2o3QyxPQUNGLE9BQWVoQyxTQUFTczhDLEtBQVN0NkMsU0FBZ0JBLEVBRzVELE9BQU93a0MsQ0FBTSxNQWlCYjRXLFlBZHVCdCtDLE1BQVMsRUFBS3VXLEtBQVVyVixPQUFTczhDLE9BQVN4OUMsQ0FlbEUsRUMvREd1K0MsR0FBZ0IsQ0FBQy9vQixJQUFtQixRQUNuQ3BULENBQU1vVCxNQUNUZ3BCLENBQVcsc0JBQW1CLDZDQUVoQyxNQUFNQyxRQUFtQlYsR0FBYSxlQUNYLE9BQVNqcEIsRUFBRyxTQUFVLGVBQ2pELENBQUs0cEIsTUFBWUMsQ0FBUzlnRCxTQUFTRCxPQUFnQnNELE9BQ2pELE9BRUYsS0FBSTA5QyxDQUFpQixFQUNqQkMsR0FBcUIsSUFDVCxRQUNoQixFQUFNQyxLQUFVLEVBQ2RyckMsYUFBVyxRQUNlLE9BQVo1VixlQUE0QkEsUUFBU0QsT0FBZ0JzRCxRQUM3RDI5QyxFQUFzQmhoRCxjQUN4QkEsT0FBU0QsU0FBS0ssQ0FBTUUsT0FBUTRnRCxDQUM3QixPQUNJLEVBRVR4K0IsS0FBTWlWLENBQVUzMEIsU0FDVEEsQ0FFSCxpQkFFRmcrQyxFQUFzQkYsR0FBUzlnRCxZQUFTRCxFQUFNb2hELElBQVU5OUMsTUFDcEQyOUMsT0FDVWhoRCxPQUFTRCxRQUFLSyxNQUFNRSxNQUVqQjhnRCxNQUFxQjFvQyxTQUFVclYsT0FDaEQsUUFBd0JyRCxXQUFTbytDLGdCQUFnQkUsV0FBZXQrQyxTQUFTRCxLQUFLc2hELGFBQ3hFQyxFQUFnQkMsR0FBU3ZoRCxTQUFTRCxLQUFNLG9CQUNuQnloRCxFQUFxQyxXQUFsQkYsT0FBK0JOLENBQzNFaGhELFNBQVNELEtBQUtLLFVBQU1FLEVBQVEsZUFBZXlnRCxRQUU3Q1UsUUFBU3poRCxJQUFTRCxLQUFNb2hELEVBQVU5OUMsTUFBTSxJQUUxQ3ErQyxNQUFlLEVBQU1ULE9DdkNqQlUsTUFBa0IsQ0FDdEIzekMsS0FBcUJ1ZCxRQUNyQnZXLFFBQVMsT0FFTDRzQyxNQUFtQixDQUN2QjV6QyxLQUFxQnljLFdBRWpCbzNCLE1BQStCMS9DLENBQ25DLE9BQU0yL0MsQ0FBaUIsVUFBVTMvQyxJQUMzQjQvQyxJQUFvQixVQUFZNS9DLFFBQ1IyL0MsRUEwRzlCLFFBQ0VFLGlCQXJHQUMsY0FDQUMsYUFDQUMsNEJBQ0FDLHNCQUNBQyxHQUNBQyxhQUVBLFdBQWlCeHJDLEdBQ1g0SSxLQUFFQSxNQUNGdEosQ0FBUWYsT0FBU2UsQ0FDakJtc0MsRUFBbUJoZ0MsUUFBZXhmLE9BQWlCZy9DLFFBQzVCeC9CLEtBQVMsQ0FBc0IsT0FBaEJuTSxFQUFNalUsS0FDNUNxZ0QsRUFBVWwrQyxLQUNVLE9BQVZqQixPQUdkNCtDLEdBQVU1K0MsUUFDTjYrQyxJQUNGQSxHQUFhNytDLE1BQVFpQixLQUVSKzlDLE9BQ04vOUMsRUFDUixFQUVHbStDLFNBQ29CLEVBQXBCUixFQUFVNStDLFFBR2Q0K0MsU0FBa0IsRUFDZEMsSUFDRkEsS0FBYTcrQyxHQUFRaUIsR0FFbkJ2QixHQUFXdS9DLElBQ2JBLEVBQU9oK0MsR0FDUixFQUVHbytDLE1BQ0osSUFBdUIsSUFBbkJ0c0MsRUFBTStsQixhQUFnQ2ltQixVQUN4QyxRQUNGLFFBQW9DLytDLE9BQVN3OUMsY0FFdEIsQ0FFbkI4QixNQUFxQnQvQyxHQUFVdS9DLEdBQ2pDSixJQUNELEVBRUdLLE1BQ0osT0FBdUIsQ0FBbkJ6c0MsT0FBTStsQixPQUFzQjBrQixFQUM5QixRQUNGLFFBQW1CMEIsQ0FBaUJsL0MsT0FBU3c5QyxRQUV0Q2lCLE9BRUhhLEVBQXFCdC9DLFFBQVV1L0MsRUFDakNILFdBR2N6L0MsQ0FDWDgvQyxNQUFVOS9DLEVBRVhvVCxNQUFNK2xCLFFBQ0pvbUIsRUFBaUJsL0MsV0FDZHkrQyxDQUFnQixNQUVKeitDLE9BQVVMLE1BRTNCdy9DLGFBMEJOLE9BYkE5L0IsRUFBTSxJQUFNdE0sRUFBTWpVLE1BQU80Z0QsQ0FDckJaLFFBQXFGLEtBQXZEOXNDLENBQVNxTCxjQUFXVSxNQUFPRCxtQkFBaUI2aEMsUUFDdEUsTUFBTyxNQUNDOWlDLEtBQU04aUMsY0FDaEIsRUFDRWIsRUFBMkI5K0MsT0FBUzQrQyxFQUFVNStDLE9BQ2hEdy9DLEdBQ0QsT0FHTGhwQyxDQUFVLE9BQ0N6RCxFQUFNalUsS0FBTSxFQUVoQixDQUNMMGdELE9BQ0FILFVBQ0FPLElBdkJhLFVBQ0M1L0MsR0FDWncvQyxLQUVBSCxLQW9CRkgsa0JBQ0QsRUFJRFcsb0JBM0cyQixDQUMzQi9nRCxTQUNDNC9DLEVBQW9CSCxJQTBHckJ1QixxQkFBcUJDLENBQ3RCLEVBRWtFdkIsSUFBNEIsaUJDL0hqRyxFQUFNd0IsU0FDSixNQUFXdnNDLEtBQ1gsT0FBT3lMLElBQVMsT0FDZCxFQUFJNGhCLEtBQ0osTUFBb0YsT0FBNUVDLEVBQThDLFdBQTdCLEtBQU5rZixPQUFhLENBQVNBLEVBQUdwakMsWUFBaUIsRUFBU2lrQixLQUFHamxCLFlBQTJCa2xCLEVBQUdqaUMsRUFBSyxPQ043RyxFQUFDb2hELEdBQUUsT0FBTUMsRUFBRSxZQUFXLFFBQVFDLFFBQUUsRUFBT0MsS0FBRyxVQUFVSCxFQUFFQyxNQUFJQyxRQUFLLE9BQVFFLGNBQVcsaUJBQWtCQyxFQUFHLFdBQVdDLE1BQUUsUUFBU0MsQ0FBRyxZQUFZQyxJQUFHQyxFQUFFdDhDLFFBQU8sV0FBV2c3QixNQUFHLElBQU8zVyxJQUFFOUUsVUFBVSxFQUFJZzlCLE1BQUksR0FBSU4sS0FBRyxFQUFFLElBQUlPLEdBQUcsR0FBR2o5QixPQUFPKzhCLE1BQUdOLFFBQUtoOEMsR0FBTyxXQUFXZzdCLE1BQUcsT0FBU3piLFNBQVV5YixFQUFFLEtBQUl1aEIsRUFBRXZoQixHQUFFLEdBQUlpaEIsU0FBSyxFQUFrSVEsR0FBRyxDQUE5SCxhQUFnQixPQUFVLFlBQWUsYUFBZ0IsT0FBVSxZQUFlLGNBQWlCLGFBQVcsU0FBNkMsZUFBYyxPQUFPcDRCLE1BQUtxNEIsU0FBVSxNQUFJcjBCLFlBQWMsS0FBSyxTQUFTczBCLEtBQUV0NEIsQ0FBRyxNQUFNLEdBQUhBLE1BQVEsT0FBT2xzQixPQUF5QixtQkFBZmtzQixXQUFFNW9CLEVBQStCLEdBQUMsRUFBSXUvQixJQUFJNGhCLGNBQWMsT0FBTzVoQixRQUFLNmhCLFVBQWExa0QsTUFBTSxLQUFDLE1BQVMsUUFBUzJrRCxJQUFFejRCLEdBQXNCLE1BQU9BLGFBQXBCczRCLGNBQUtJLENBQStCMTRCLGVBQWEwNEIsT0FBUSxXQUFXMTRCLEdBQTBCLE9BQU9BLGVBQXhCczRCLENBQUV0NEIsSUFBR3lZLFlBQW1DelksYUFBYXlZLFdBQVcsQ0FBQyxXQUFTa2dCLENBQUczNEIsR0FBRyxNQUFzQix3QkFBWjQ0QixTQUE4RDU0QixlQUF2QnM0QixDQUFFdDRCLElBQUc0NEIsWUFBa0M1NEIsWUFBYTQ0QixjQUFtMkIsRUFBSUMsSUFBSXppRCxRQUFLLFdBQWNtaUMsVUFBUSxDQUFHdWdCLE9BQU0sUUFBUTUxQyxFQUE1NEIsU0FBWThjLEtBQUcsR0FBSTJXLENBQUUzVyxLQUFFMUwsT0FBTXJmLEdBQU9tRSxLQUFLdTlCLGNBQVl0OUIsT0FBUSxTQUFTMmEsVUFBUzJpQixDQUFFbUgsVUFBTzlwQixDQUFJLEdBQUd5TyxFQUFFa1UsRUFBRW9pQixXQUFXL2tDLE1BQUksQ0FBRzVaLEVBQUV1OEIsS0FBRXFpQixPQUFTaGxDLE9BQU01WixPQUFPQSxRQUFLbkYsT0FBT3lCLE9BQVNyQyxNQUFNd2xCLEVBQUc1a0IsT0FBT21FLE9BQUtxcEIsQ0FBR3BwQixnQkFBUSxFQUFTMlQsR0FBRyxJQUFJM1EsYUFBT0EsQ0FBT2pDLElBQUU2K0MsY0FBZ0Jqc0MsSUFBRzVTLENBQUUxRixpQkFBbUIsT0FBRyxDQUFHMkgsRUFBRSxLQUFHLE1BQTJuQjJOLE1BQXhuQixRQUFZZ1csSUFBRyxHQUFJMlcsTUFBSXJpQixTQUFTNGtDLGdCQUFpQnZpQixDQUFFMzRCLFdBQVFtN0MsUUFBU2hrRCxHQUFLLElBQUlDLFFBQVFna0QsV0FBTyxDQUFLQyxRQUFPL2tELFNBQVMsV0FBWWdsRCxVQUFVLENBQUUsR0FBRSxPQUFPcmtELFFBQU95QixNQUFPaWdDLEtBQUVxaUIsT0FBU0UsYUFBYWxsQyxDQUFFa2xDLFdBQVVwYixVQUFXa2IsU0FBU0ssWUFBT3BrRCxFQUFPeUIsT0FBT2lnQyxFQUFFcWlCLFNBQVNLLE1BQU1obEQsYUFBUWdsRCxFQUFPLFdBQVdwa0QsT0FBT21FLE9BQU80L0MsVUFBVTMvQyxhQUFRLE9BQVN3Z0IsQ0FBRyxJQUFJNEksRUFBRWtVLEVBQUVxaUIsZUFBY3JpQixDQUFFb2lCLFdBQVdsL0IsSUFBSSxHQUE4RHhkLEVBQXpEcEgsUUFBT21FLElBQUt1OUIsRUFBRW1ILE9BQU9sbkMsZUFBZWlqQixHQUFHOGMsRUFBRW1ILFVBQVU5cEIsS0FBRTZGLENBQVFsZSxRQUFPLFlBQVdxZCxFQUFHLE9BQU9sRixFQUFFa0YsS0FBRyxDQUFHbEYsQ0FBQyxNQUFJLEVBQUd5bEMsS0FBRTkyQixVQUFPQSxDQUFLeHRCLE9BQU95QixRQUFPK3JCLENBQUVwdUIsTUFBTWdJLFVBQVVqRCxRQUFRQyxTQUFRLGlCQUFjNC9DLGdCQUFrQixPQUFNLEVBQXFFTyxZQUFVLHFCQUFrQixPQUFXeDVCLGVBQVkvbEIsT0FBTSxDQUFLLElBQUcsR0FBSXcvQyxHQUFFOStDLEtBQUtDLE1BQUk4K0MsQ0FBRy8rQyxNQUFLeXhCLGFBQVd1dEIsSUFBTSxrQkFBY2hqQixPQUFPLENBQUpBLE1BQWFBLENBQUUsTUFBSSxDQUFJM2lCLE9BQUlnK0IscUJBQXdCbjRCLEVBQUUsSUFBSSxFQUFFLEtBQUcwL0IsQ0FBRXY1QixRQUFPLEdBQUk1bEIsTUFBSXVrQyxZQUFhM3hCLENBQUVnVCxNQUFFNDVCLGFBQWMsQ0FBSS8vQixPQUFNdGxCLFNBQU95WSxDQUFHLE9BQUssRUFBSXlWLEtBQUl6TyxFQUFFeGYsaUJBQWMsT0FBT0QsR0FBTXlmLEVBQUV6ZixNQUFNc2xCLE9BQUVybEIsRUFBT3dmLEtBQUV4ZixrQkFBcUIrNkMsUUFBUUEsUUFBUXNLLE9BQU83bEMsRUFBRTZsQyxpQkFBZ0Ixa0QsT0FBTzJrRCxDQUFFOWxDLEVBQUU3ZSxPQUFPNGtELEVBQUUvbEMsTUFBTXlPLEVBQUUsS0FBQyxrQkFBcUJ1M0IsRUFBR2g2QixNQUFLQSxDQUFFNDVCLGFBQVkvL0IsQ0FBRW1HLFFBQUUyZSxRQUFhLE9BQU9oa0MsS0FBS3MvQyxNQUFNMWxELE1BQU15ZixNQUFJLENBQUlBLEtBQUl6ZixNQUFPb0csS0FBS3MvQyxRQUFNemxELE1BQU9xbEIsTUFBSSxDQUFJQSxFQUFFOGMsS0FBRW5pQyxTQUFXd3JCLENBQUVrNkIsZUFBZUMsVUFBVTVsRCxNQUFNeWYsRUFBRXhmLFFBQU9xbEIsQ0FBRSxLQUFDLFVBQWM4YyxHQUFHLFNBQVF5akIsY0FBZUEsZ0JBQWMsQ0FBR3A2QixpQkFBYyxPQUFTLEVBQUdoTSxLQUFHMmtDLENBQUcza0MsR0FBRyxDQUFDLElBQUk2RixFQUFFOGMsS0FBSyxHQUFHOWMsR0FBR21HLE1BQUVxNkIsT0FBV3hnQyxHQUFHLE9BQU0sRUFBR0EsTUFBSWdKLFVBQVloSixNQUFNLE9BQU9BLEVBQUUsZ0JBQVUsT0FBV21HLEVBQUcsV0FBU0EsRUFBRytkLGlCQUFpQi9kLEVBQUUsQ0FBQyxTQUFTczZCLE1BQU0sUUFBTyxrQkFBbUIzaEQsV0FBVXFuQixPQUFPLFNBQVN1NkIsZUFBYTlCLEVBQUV6NEIsTUFBS3U0QixjQUFjdjRCLENBQUUvckIsZ0JBQVdILEVBQU9HLGNBQVVvK0MsYUFBZ0IsU0FBU21JLEVBQUd4NkIsTUFBRyxTQUFjLE9BQUxBLEVBQVlBLE9BQUl5NkIsV0FBY3o2QixPQUFFNkMsUUFBYTgxQixRQUFRK0IsU0FBSyxTQUFZLFNBQVNDLE9BQU0sU0FBUzM2QixRQUFvQixPQUFoQjQ2QixFQUFFNTZCLE1BQUcxckIsU0FBMEJ1bUQsYUFBUCxNQUE4ZixVQUFZNzZCLFFBQU8sT0FBTXM0QixDQUFFdDRCLEtBQUsyNkIsU0FBU0wsR0FBR3RtQyxJQUFvQixhQUFoQjRtQyxDQUFFNW1DLE1BQUcxZixPQUFxQjBmLEVBQUUybUMsT0FBTSxTQUFPM21DLENBQVcsZUFBTEEsQ0FBb0IsU0FBUDhtQyxNQUFFOW1DLENBQTZCLGFBQWhCNG1DLENBQUU1bUMsR0FBRzFmLGVBQTFtQixTQUFZMHJCLE1BQUcsQ0FBSTJXLFFBQUUrQixTQUFVQyxZQUFVM1UsZUFBY3JyQixPQUFRLFNBQThELEtBQUYsR0FBMUMrL0IsYUFBVUMsT0FBVWhnQyxRQUFRLGlCQUF3QnFuQixFQUErQixlQUFuQkEsQ0FBUTFyQixTQUFtQixPQUFPLE1BQUssb0JBQW1CbXVCLEdBQUtBLEtBQUlpNEIsUUFBUWo0QixPQUFLLEtBQU8sUUFBUTlwQixRQUFRbWlELE9BQU0sT0FBSSxDQUFJMWdELEVBQUV3Z0QsS0FBRW40QixDQUFHLFdBQWlCLENBQWRyb0IsTUFBRXEzQyxPQUFvQyxTQUFoQnIzQyxLQUFFMmdELFdBQWtDLFlBQVZDLFdBQXdFLEVBQXJELEtBQUMsUUFBWSxlQUFlcmlELFFBQVF5QixHQUFFNmdELGdCQUFvQyxVQUFmN2dELFVBQUU2Z0QsSUFBdUJ0a0IsU0FBSzNxQixJQUFtQixTQUFYNVIsRUFBRTRSLFVBQWdCOzs7Ozs7Ozs7Ozs7OztHQ0VwM0csTUFTTWt2QyxHQUFhLE1BQ2pCLE9BQVkxc0MsR0FBSTJzQyxLQVZDLE9BQVNySCxFQUFTalIsR0FDbkMsR0FBSWlSLEdBQVdBLEdBQVEvK0MsZ0JBQWtCLElBQ3ZDLE9BQVcsUUFBU3dELEtBQ2xCLEdBQU00ZCxVQUNOMHNCLENBQVl0dEIsUUFBUTZsQyxNQUFNdlksS0FBVXY3QixHQUFPL08sT0FFN0N1N0MsRUFBUS8rQyxpQkFBaUIsU0FBU21PLENBQUksc0JBS2Y1TCxLQUN4QixHQ1ZHK2pELEdBQXdCQyxTQUUxQnI1QyxLQUFNekgsT0FDTjZ5QyxVQUFVLElBRVprTyxXQUFhLENBQ1h0NUMsV0FBcUJoTixDQUNyQm80QyxXQUFVLE9BRVptTyxPQUFhLENBQ1h2NUMsS0FBTXVkLFFBQ052VyxTQUFTLEdBRVh3eUMsYUFBY2o4QixRQUNkazhCLGFBQ0V6NUMsRUFBcUJ6SCxPQUNyQnlPLFFBQVMsUUFFUjB5QyxJQ0xDQyxHQUFhLENBQUMsbUJBQ0EsYUFDZEMsS0FBNEMsQ0FDaERwa0IsUUFBUSxvQkFDUnB0QixNQUFPZ3hDLEdBQ1B2Z0MsTUFBTyxDQUFDLFVBQVUscUJBQWdCLFNBQ2xDLEtBQU1xb0IsRUFBU3h2Qjs7Ozs7O0dDaEJqQixTQUFTemMsZUFDc0Msa0JBQXRDakMsU0FBTzRCLFlBQVVPLFVBQWNxckIsQ0FDeEMsV0NUeUR6QyxJQUFXLFNBQUFBLENBQUUvcUIsT0FBT3lCLHdCQUFxQndkLElBQU8sc0JBQXNCLEVBQUU4TCxFQUFFeEMsZUFBVXRrQixXQUFnQjhhLEVBQUV3SixvQkFBYSxDQUFRM0QsU0FBYzVrQixlQUFVMkIsZUFBZVcsUUFBT3NpQixJQUFLOGMsRUFBRTljLEdBQUc3RixFQUFFNkYsR0FBRyxDQUFROGMsUUFBRyxFQUFBM1csR0FBRW83QixPQUFNOXpDLFlBQUtrVyxHQUFXLFdBQVN4SixDQUFFMmlCLEVBQUUzVyxNQUFNLGdCQUFjLENBQUcsSUFBSWhNLEVBQUUsR0FBRyx1QkFBa0IvZSxFQUFPNEIsVUFBVUQsZUFBZVcsS0FBS28vQixFQUFFOWMsSUFBT21HLEtBQUVybkIsU0FBUWtoQixHQUFJLGtCQUFrQkEsRUFBRSxRQUFRN0YsQ0FBQyxDQUFDLGFBQVM4bkMsS0FBTyxTQUFHQyxFQUFTLFdBQVUsQ0FBQyxjQUFhdDVCLEVBQUV4dEIsZ0JBQU80QixDQUFVbVcsU0FBSTVWLE1BQVNpRixTQUFJekYsWUFBZSsyQixVQUFFLHdCQUE4QjdjLEVBQUU2bEIsR0FBTzNXLFNBQVFoTSxLQUFFLFNBQVFnTSxDQUFFLGFBQVEsRUFBTzJXLFFBQUUxMEIsU0FBTyxDQUFTK2QsRUFBRUEsbUJBQWtCaE0sQ0FBRTVjLGVBQVd1QyxFQUFNZzBCLFFBQVVnSixLQUFFQSxTQUFjLG1CRFduckIsT0FBdUJsVSxHQUNyQixLQUFJOUMsQ0FBS3E4QixFQUVULE9BQW9CLElBQWhCOWtELEdBQVN1ckIsZUFHYjlDLHlCQUtJem9CLENBREo4a0QsUUFBWW5sRCxVQUlpQyxJQUF6Q21sRCxDQUFLcGxELGtCQUFlLGVBTTFCLENDL0I4c0IsSUFBSTZuQyxlQUFMLENBQXdLLE1BQU1wekIsS0FBR3NyQixDQUFFM1csS0FBSTNqQixVQUFTMmpCLGlCQUFZaThCLFNBQVcsTUFBU3RsQixHQUFTLHVCQUFpQkEsT0FBR3I3QixPQUFTcTdCLElBQUloOEIsY0FBZ0JnOEIsQ0FBQyxFQUFFaGUsSUFBRTVoQixLQUFNRCxlQUFTLGNBQWtCLGlCQUFtQmtXLEdBQUV6VixLQUFLby9CLEVBQUUsUUFBTyx1QkFBc0IzcEIsRUFBRXpWLFFBQVFzb0IscUJBQWlCOFcsQ0FBRSw2QkFBMEJ1bEIsa0JBQW9CM21CLGFBQVlscUIsU0FBSSxTQUFVLGdCQUFpQixzQkFBc0IsYUFBWTBELEdBQUtpUixHQUFHM1UsVUFBSTJVLENBQUssb0JBQXVCLFNBQUEvcUIsRUFBT3VnQix3QkFBc0J3SyxDQUFHLGFBQWEsQ0FBQzFvQixNQUFNcS9CLEdBQUcsQ0FBQyxTQUFTcnJCLEdBQUVxckIsRUFBRTNXLElBQUVoTSxDQUFFLEdBQVE2RixNQUFFemYsSUFBRSxDQUFHcW9CLEVBQUUsT0FBS3pKLENBQUUyZCxNQUFNMTBCLFdBQVEsU0FBVTRYLEVBQUdBLEVBQUVxaUMsZUFBZSxPQUFNLEVBQUcsTUFBS3JpQyxVQUFJLENBQU9BLFFBQVEsa0JBQWM1WCxHQUFNLElBQUs0WCxJQUFFNVgsR0FBWTdILGlCQUFRaXpDLGVBQWdCcnRCLENBQVM1bEIsU0FBSXlmLFVBQUU1WCxFQUFPN0gsWUFBUzJVLElBQUs0bkIsR0FBRyxJQUFLcnJCLEdBQUVxckIsRUFBRTNXLEdBQUUsTUFBS3lDLENBQUU1SSxHQUFFNVgsSUFBS25KLEtBQUk2OUIsR0FBRzdsQixHQUFFNmxCLE1BQUk5N0IsSUFBSyxZQUFZaVcsR0FBRStJLFNBQUssTUFBVTRJLEVBQUU5SixHQUFFcUgsSUFBRyxXQUFXeUMsQ0FBRXpKLFFBQUssU0FBV3lKLEdBQUcsV0FBV0EsT0FBRyxRQUFZQSxNQUFHLGFBQWUsVUFBU2tVLENBQUcsTUFBRyxLQUFjLFNBQUcsUUFBUUEsR0FBRWgvQixXQUFZUCxXQUFXdUMsTUFBTWcwQixLQUFHLFFBQVMzTixHQUFFLEtBQUd2cEIsT0FBUSxPQUFTLElBQUksR0FBN0csQ0FBaUh1cEIsS0FBS3lDLEVBQUV6QyxhQUFhbkcsT0FBTyxDQUFDLEtBQUl6ZixDQUFFLE1BQUMsQ0FBTXU4QixFQUFFLEdBQUczcEIsV0FBV2dULDJCQUF5QnlDLEdBQUssZUFBY2djLEVBQUU5SCxJQUFHLEdBQUlBLENBQUMsRUFBQyxFQUFHdHJCLFdBQUksY0FBa0JpaUMsVUFBVyxDQUFPM1csU0FBRThILEdBQUVoYyxDQUFFLE1BQU1nYyxHQUFFOUgsT0FBTW4rQixJQUFLbStCLElBQUl2OEIsRUFBRXlmLEtBQUV5ekIsT0FBVXR0QixHQUFHeWUsR0FBRTlILEtBQUssQ0FBT0EsU0FBR2xVLEVBQUV2cEIsUUFBTyxDQUFFLE9BQUssR0FBSXVwQixDQUFFNW5CLE1BQUssY0FBZTRuQixFQUFFdnBCLGtCQUFpQnVsQyxFQUFFOUgsR0FBR3Y4QixRQUFhQSxNQUFDLENBQUMsa0JBQWdCLEtBQU00WixRQUFFL2UsQ0FBT2tuRCxxQkFBb0JELGlCQUFnQjVrRCxJQUFNcS9CLEVBQUV5bEIsdUJBQWFDLENBQVcsQ0FBQyxNQUFhLGtCQUFLaFAsSUFBUyxFQUFHL2xDLFlBQVksaUJBQVMsU0FBZ0JxdkIsQ0FBRXJ2QixLQUFLckYsT0FBT3VkLGFBQVN6b0IsS0FBTUQsWUFBYW1MLE1BQU9xRixZQUFVMEgsV0FBU3dRLFNBQWNsWSxLQUFLMkIsYUFBUSxJQUFTb0MsZ0JBQU8sa0JBQXdCcEMsU0FBUTNCLEdBQU1vUyxNQUFFaWQsRUFBSSxJQUFLcnJCLEtBQUVoRSxpQkFBaUIyQixNQUFRMFAsR0FBRWdlLEdBQUcsWUFBVzNkLHVCQUF1QixTQUFRMVIsTUFBT20zQixJQUFFLEdBQUduM0IsUUFBSzQwQyx3Q0FBNEN2bEIsWUFBTXJ2QixZQUFXZ21DLEdBQVV6ekIsR0FBRzdGLFNBQVMwRixrQkFBUzR6QixTQUFjdDVCLEVBQUlBLENBQUMsR0FBQyxPQUFTaEMsYUFBYWdDLEdBQUUzWixJQUFFczhCLENBQUUzVyxjQUFVL3FCLEdBQU91Z0IsZUFBZXhCLGlCQUFjLEVBQUExYyxDQUFNcS9CLFlBQVVqZCxDQUFFcFMsS0FBS2dtQyxhQUFZN08sRUFBRSxVQUFReWQsNkdBQStHNWxELFlBQUtDLE9BQVUrUSxNQUFTQSxJQUFLZ21DLFdBQVVnUCxFQUFFM2xCLEVBQUVydkIsdUJBQXVCaTFDLE9BQU0xaUMsR0FBUzRJLFFBQUUsaUJBQVksQ0FBTXpDLEtBQUssU0FBTy9xQixPQUFPdW5ELG9CQUFvQjdsQixDQUFHdDlCLFVBQVEyYSxHQUFJZ00sRUFBRWhNLEtBQUcvZSxrQkFBT3duRCxjQUEyQnpvQyxjQUFZbW9DLGtCQUFpQixDQUFHbjhCLGFBQVlrOEIsc0JBQW9CcmlDLENBQVU0SSxVQUFPLEtBQUM2cUIsVUFBVXRnQyxHQUFHNk0sU0FBUXpmLEtBQU0sU0FBUyxPQUFDa3pDLFNBQVUzVyxDQUFHbFUsRUFBRWtVLElBQUlBLFNBQUUsQ0FBUTdsQixRQUFRNHJDLGtCQUFhLEtBQVM1ckMsQ0FBRUEsR0FBRTZjLEVBQUdsTCxFQUFFNnFCLFVBQVVnUCxjQUFhdDhCLFNBQVUyVyxHQUFFcC9CLE1BQUsrUCxJQUFLMFksWUFBVzFZLGNBQWMsU0FBZSxNQUFBclMsT0FBT3lCLE9BQU8rckIsQ0FBRXBtQixRQUFHLElBQVNzZ0QsR0FBRWhtQixHQUFVQSxhQUFFbGdDLElBQVEsY0FBYyxLQUFLLE9BQTZEaWhELElBQUUsR0FBSTFsQyxHQUFFLG9CQUFnQndOLFNBQTZnQixrQkFBZSx1QkFBNEIsUUFBRyxnQkFBMkIsVUFBSW85QixpQkFBVSx1REFBb0UsU0FBRWptQixHQUFFdmdDLFFBQU0sOEJBQStCLGlCQUF3QnlqQixTQUFJN0YsR0FBVTZGLFVBQUc0a0IsYUFBVXlkLHNCQUFvQmw4QixDQUFLbkcsS0FBSyxlQUFpQixJQUFDbEIsWUFBVyxNQUFJaWtDLGlCQUFVLHNEQUFrRTU4QixnQkFBRSw0QkFBcUNsbkIsU0FBTyx5QkFBcUIxQixNQUFXdS9CLEVBQUc5N0IsS0FBSyxZQUFZbVosRUFBRSxJQUFDLGlCQUFtQjZGLEVBQUUsS0FBSzhjLENBQUVoK0IsbUJBQWtCa2hCLEVBQUc0a0IsR0FBRXplLElBQUcsR0FBSSxJQUFRMlcsTUFBRWgrQixRQUFRLE9BQU8sWUFBVWdELE9BQVFnN0IsRUFBRTNXLEtBQUssV0FBVyxDQUFDLE9BQU1oTSxDQUFFZ00sSUFBRXJvQixvQkFBbUJnQixNQUFRcWIsU0FBTXhiLENBQUt3YixRQUFVMmlCLGlCQUFTejlCLEtBQU8sQ0FBSThhLEdBQUUvUixPQUFlLE9BQUE1SCxLQUFFLE1BQVEyWixLQUFHLE9BQVN1bEMsSUFBRTVpQixVQUFTQSxFQUFTLHNCQUFjLDZEQUErRDNXLEdBQUUsV0FBVSxDQUFHLFNBQVE1bEIsQ0FBRSxFQUFFQSxRQUFJbEIsR0FBT2tCLEdBQUcsRUFBRSxHQUFPcW9CLE1BQUVrVSxFQUFFdjhCLEdBQU0sR0FBQW03QixJQUFFOVMsRUFBRyxDQUFJLElBQUEvSSxFQUFFK0ksRUFBRTZxQix3QkFBdUIsVUFBVTdxQixFQUFFeGdCLFVBQVVpWixZQUFTalosU0FBTSxFQUFRLENBQUksSUFBQTRkLGVBQUksQ0FBWSxDQUFDN0wsSUFBRSxDQUFHLGNBQVksS0FBTy9SLGVBQWV3OEIsTUFBRSx5REFBNEQsUUFBUSxDQUFDNWtCLE9BQUlxQixJQUFPdUgsRUFBRXhnQixLQUFLLE1BQU00WCxHQUFFcmhCLEtBQUtpcUIsQ0FBRSxDQUFDNUksR0FBRUEsQ0FBRTdOLFVBQVEycUIsQ0FBRTNXLFdBQU1ybkIsR0FBUWcrQixNQUFLM1csR0FBRyxNQUFNNWxCLEdBQUUsTUFBSzRaLENBQUc2RixFQUFFM2dCLE9BQU8sT0FBSSxFQUFLLE9BQU9tQixHQUFFLFlBQVkybEIsRUFBRSxJQUFDL2QsT0FBTyxRQUFVK2QsRUFBRyxTQUFRLEVBQUduRyxFQUFFOGMsRUFBRTVuQixNQUFLNG5CLElBQUksTUFBTTljLEVBQUV2TyxLQUFJMFUsR0FBRSxRQUFJLENBQU0saUJBQWlCbkcsUUFBS3JoQixFQUFLcWhCLE9BQUcsQ0FBS0EsV0FBSSxDQUFPQSxHQUFHNGtCLEdBQUUsd0RBQXdEenFCLEVBQUU5YSxpQ0FBaUN5akQsSUFBRTNvQyxDQUFFblosV0FBSyxLQUFZLEdBQUUsQ0FBQ29ILEtBQUs3SCxHQUFHLENBQUMsU0FBU3lpRCxHQUFFbG1CLEdBQUcsUUFBT3Q4QixPQUFFLE1BQVc0SCxTQUFLbEwsRUFBTSxhQUFhLFVBQVMsS0FBTThpQixHQUFFbUcsQ0FBRTg4QixPQUFNOThCLElBQUloTSxFQUFFMUksSUFBRXFyQixDQUFFM1csR0FBRSxJQUFJLEtBQUtoTSxJQUFJLE9BQU82RixnQkFBSyw4QkFBc0M4aUMsQ0FBRTNvQyxVQUFVLENBQUMsVUFBUytvQyxFQUFFcG1CLEdBQUcsUUFBT3Q4QixFQUFFLGFBQWEsRUFBQzRILElBQUswMEIsR0FBRyxDQUFDLFNBQVM0akIsSUFBRTVqQixPQUFHLEVBQU90OEIsR0FBRSxXQUFXLEVBQUM0SCxPQUFLaE4sSUFBTyxTQUFBcTRDLENBQVV0dEIsR0FBRyxJQUFJaE0sR0FBRSxJQUFHLEtBQU02RixDQUFFNWtCLFFBQU9tRSxPQUFRMGpELE9BQU1qakMsSUFBSTdGLEVBQUUxSSxHQUFFcXJCLE1BQUk5YyxHQUFHLE1BQUksQ0FBSzdGLEtBQUksT0FBTzZGLEdBQUc0a0IsS0FBRSx3Q0FBeUN6cUIsT0FBTTZGLE9BQUssVUFBVzhjLEVBQVMzVyxTQUFFL3FCLFdBQVkwaEMsR0FBRzNpQixFQUFFZ00sR0FBRWhVLFdBQWVnSSxNQUFRLFFBQUUsUUFBUUEsRUFBRTJpQixHQUFFM1csVUFBSyxJQUFTaE0sS0FBTXE1QixjQUFZeHpCLENBQUV4ZixHQUFFLFFBQVEsQ0FBQzRILEtBQUtoTixZQUFPLElBQUFxNEMsQ0FBVXp6QixNQUFNLENBQUNiLEdBQUVhLEdBQVMsU0FBU3pmLGVBQVNoQixVQUFRLENBQUc0YSxFQUFFOWEsT0FBTyxXQUFVeTlCLElBQUcsTUFBT2grQixRQUFRZytCLEtBQUksRUFBT0EsVUFBSTNxQixPQUFPMnFCLE9BQVF2OEIsR0FBRXpCLFdBQVFnK0IsSUFBSSxLQUFPOEgsR0FBRSxLQUFJOUgsQ0FBRXo5QixjQUFPLCtCQUFnQyxnQkFBc0Isb0NBQWtDMkIsR0FBSyw4QkFBNkIsQ0FBRSxDQUFRVCxTQUFFMGlELE9BQU05b0MsTUFBTyxZQUFPcmIsUUFBVyxNQUFNLEtBQUsyTyxJQUFLMDFDLG9CQUFvQnZlLE9BQUUsNENBQWdEenFCLGdDQUErQmdNLENBQUVubEIsT0FBSyxZQUFhLEdBQVVULFlBQUl1OEIsQ0FBRTNpQixZQUFZLFNBQU0sMkJBQXNCLE1BQVlBLG9EQUFnRDVaLElBQU8sWUFBT25GLG9CQUF3QiwyQkFBcUJtbkQsR0FBUyxZQUFTLENBQUtubkQsbUJBQU91Z0IsTUFBaUIsVUFBUyxDQUFBbGQsSUFBYSxNQUFBZ1AsYUFBSzAxQyxXQUFrQixLQUFHMTFDLENBQUEsTUFBVSxVQUFTLE9BQU8sV0FBVyxlQUEwQnF2QixTQUFPLEdBQU0sZUFBV3NtQixlQUE1MUcsTUFBNDJHLENBQUMscUJBQWtCLFdBQTcyRyxTQUFZaDdDLEtBQUt5YyxpQkFBMjJHcFgsS0FBSzQxQyxZQUFlLGlCQUFXQyxDQUFjLHVCQUFjRCxPQUFTQyxjQUFTekYsQ0FBSTkyQixLQUFJdFosSUFBSzQxQyxZQUFTQyxjQUFNLFNBQW9CLE9BQXI3R25yQyxNQUFFLE1BQVMsQ0FBQy9QLGFBQUt6SCxDQUErNkdvbUIsSUFBSXRaLEtBQUs0MUMsV0FBU0UsS0FBTyxFQUFDLGlCQUFXQyxFQUFTLE9BQTk4R3JyQyxHQUFFLFNBQVMsQ0FBQy9QLFlBQUs0SSxjQUFpOUdxeUMsU0FBU0csSUFBTyxDQUFDLGdCQUFXQyxPQUFRLEdBQXQrR3RyQyxHQUFFLFNBQVMvUCxXQUFLbEwsU0FBcStHdVEsRUFBSzQxQyxZQUFTSSxHQUFNLENBQUMsaUJBQVcvSSxHQUFTLGNBQTkvRyxPQUFVdHlDLElBQUtoTixVQUEwL0cyckIsR0FBSXRaLFFBQUs0MUMsTUFBUzNJLE9BQU8sRUFBQyxvQkFBcUIsV0FBeGhILFNBQVUsT0FBTTFwQyxXQUFPLElBQUF5aUMsQ0FBVTNXLElBQVMzVyxVQUFJMlcsZ0JBQWMzVyxDQUFHeWUsUUFBRSxTQUFjOUgsMEJBQXlCLEdBQTI3Ry9WLFVBQVNzOEIsZ0JBQWlCLENBQUMsc0JBQW9CLEtBQWgrRzdpRCxHQUFFLFNBQVMsQ0FBQyxhQUFtQjJsQixTQUFFLGlCQUFpQjJXLENBQUUscUJBQWdCLHVCQUEyQkEsT0FBTyxHQUFvNEcsSUFBQyxrQkFBVzRtQixDQUFXLFdBQWo1R3RvRCxHQUFPdWdCLGlCQUFnQnZULElBQUssS0FBSyxZQUFVMDBCLENBQUcsT0FBTTNXLENBQUUsU0FBUyxPQUFNLFFBQVF5ZSxJQUFFLG9DQUFvQyxDQUFHLHVCQUFrQm5uQyxDQUFNLFlBQTZ3RyxDQUFDLGFBQU9zUSxDQUFPK3VCLFlBQVEsZ01BQWtNQSxHQUFVQSxTQUFFdDlCLFNBQVFzOUIsR0FBR3J2QixNQUFLTSxRQUFPK3VCLEdBQUlydkIsS0FBSyxzQkFBc0J1UyxHQUFFLEdBQUdGLFNBQVMsR0FBSWdkLEVBQUVsVSxNQUFJa1UsQ0FBRTZtQixJQUFNLEdBQUFueUMsR0FBRS9ELFFBQVEsU0FBTSxDQUFJczFDLGNBQVUsdUJBQTJCNThCLHVCQUEyQixTQUFDL2QsQ0FBSytLLEdBQUd5VixHQUFFLEtBQUt6VixHQUFHLGNBQWN5VixTQUFPeHRCLFNBQU91Z0IsaUJBQW9Cd0ssQ0FBRTVsQixRQUFPLEdBQUltaUQsR0FBRXY4QixVQUFTLE1BQUExb0IsRUFBU3EvQixHQUFHLFlBQVUzVyxDQUFFaFQsV0FBWWdILEdBQUVzNUIsa0JBQWNBLE1BQVV0NUIsS0FBRXM1QixRQUFVcDVCLElBQUtGLE1BQUsyaUIsR0FBSTNpQixLQUFTM1gsTUFBU0EsU0FBRWpDLEVBQUUsQ0FBQyx3QkFBcUIxRCxRQUFVK3JCLEVBQUcsWUFBV3pDLEVBQUUyVyxTQUFPQSxHQUFJbGUsY0FBVyxDQUFJLENBQUMsS0FBQW5oQixPQUFZLFFBQVFyQyxPQUFPeUIsT0FBTyxHQUFHK3JCLFFBQU9yb0IsQ0FBU0EsVUFBRXlmLENBQUU3SCxZQUFTZ08sQ0FBRWhNLFlBQUtzNUIsS0FBWWx6QyxZQUFZNFosRUFBRXM1QixVQUFVcDVCLFdBQVV5aUIsSUFBSSxFQUFHbGUsWUFBVyxHQUFJeGpCLHNCQUFzQnFTLEtBQUswWSxFQUFFM2pCLEdBQUUsR0FBSTZnRCxhQUFZdm1CLENBQUU4bUIsK0JBQTBCcG9DLEdBQU93RSxFQUFFOGMsV0FBUyttQixDQUFFL21CLEVBQUVnbkIsT0FBTUMsR0FBRWpuQixDQUFFa25CLFdBQVdkLEdBQUVwbUIsSUFBRW1uQixlQUFjQyxNQUFRbEIsY0FBYXRDLElBQUU1akIsQ0FBRXFuQixNQUFNcEcsR0FBRWpoQixFQUFFc25CLE1BQU0sQ0FBQ0MsVUFBVXZuQixHQUFFM1csWUFBV0EsQ0FBRTJXLEdBQUUsYUFBYzNXLEdBQUVoTSxFQUFFLFFBQU9oQyxDQUFFMmtCLEVBQUUzVyxHQUFHM2xCLGNBQTVpRCxDQUEwakQsZUFBYzhqRCxLQUFLLFVBQU9oQixHQUFLLEVBQUdDLFdBQVVDLE1BQU8sU0FBUSxHQUFJLEdBQUc5SSxRQUFPLElBQUssQ0FBSSxPQUFBNkosSUFBUSxTQUFRcHFDLENBQVNBLG1CQUFFLElBQWN5akMsR0FBRSw4QkFBOEIsT0FBT3ozQixZQUFVazlCLHNCQUFVLGdCQUE0QmxwQyxHQUFRMU0sYUFBQTQxQyxDQUFTLElBQUtscEMsaUJBQWdCMmlCLEdBQUcsRUFBRSxrQkFBZ0IsQ0FBRUEsR0FBRzNpQixDQUFDLENBQWlCa2tDLE1DTWpoUixLQUFNbUcsU0FDSkYsYUFDQWhCLFlBQ0FDLGFBQ0FDLGdCQUNBOUksY0FDQTZKLFNBQVMsS0FHWCxPQUFNRSxVQUFrQkQsS0FDdEIsYUFBV2hxRCxHQUNULFVBQXVCLFNBQ3JCNE4sU0FBT3pILElBQVF2RixTQUVuQiw0Q0NsQldzcEQsR0FBWSxLQUN2QixlQVVPLEdBQ0xDLFVBQVdDLEVBQ1hDLHdCQUx3Qi94QyxXQUFhMGUsR0FNdkM7Ozs7Ozs7QUNSRixjQUF5QnN6Qjs7Ozs7Ozs7O0FDQXpCOzs7Ozs7O0FBeXRHQSxTQUFTQzs7Ozs7R0EyN1NULFNBQVNDLFVBQ1AsVUFBT2hsQyxNQUFhMWhCLFVBQVEybUQsRUFBUWpsQyxFQUFFek4sT0FBU3lOLEVBQUVwaEIsV0FDL0MsSUFBTVEsTUFBTTs7Ozs7Ozs7R0E0c0toQjs7Ozs7Ozs7Ozs7Ozs7O0FBbUpNLElBQUlvRCxFQUFJLFNBQVMwaUQsRUFBR0MsR0FDbEIsT0FBTzNpRCxFQUFJcEgsT0FBT2dxRCxnQkFBa0IsQ0FBRUMsYUFBVyxXQUFnQm5vRDs7Ozs7O0VDanRqQnBEb29ELENBREU3ekMsRUFBRWxVLGNBQWFYOzs7Ozs7Ozs7QUN0US9CLElBQUkyb0QsUUFBTyxHQWtETTs7Ozs7O0FDeUJ2QixTQTdGU0MsVUFBS0M7Ozs7Ozs7Ozs7O0FDb1BkLFNBOU9DLFNBRUc7Ozs7OztNQ3RCRixNQUFTQyxJQUFHNW9CLElBQUcsV0FBTTs7Ozs7Ozs7Ozs7U0FXckIsUUFBWUEsQ0FBRTNXLEtBQUc7Ozs7OztHQU1qQixZQUFTdy9CLENBQUc3b0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7O0FBZWxCLElBQUk4b0IsTUFBRyxVQUFXei9CLEVBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyQ3JCOzs7Ozs7Ozs7Ozs7Ozs7QUFlQTs7Ozs7Ozs7Ozs7Ozs7O0FBZUE7Ozs7Ozs7O1NBUUswL0IsU0FBWUE7Ozs7Ozs7Ozs7Ozs7OztBQWVqQixTQUFTL29CLEdBQUcsTUFBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcElsQixTQUFNc1ksS0FDSkEsSUFBT2dRIiwibmFtZXMiOlsid2luZG93IiwibG9hZFN2ZyIsImJvZHkiLCJkb2N1bWVudCIsInN2Z0RvbSIsImdldEVsZW1lbnRCeUlkIiwiY3JlYXRlRWxlbWVudE5TIiwic3R5bGUiLCJwb3NpdGlvbiIsIndpZHRoIiwiaGVpZ2h0IiwiaWQiLCJzZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJpbnNlcnRCZWZvcmUiLCJsYXN0Q2hpbGQiLCJyZWFkeVN0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImRlZmF1bHRJY29uRGltZW5zaW9ucyIsIk9iamVjdCIsImZyZWV6ZSIsImxlZnQiLCJ0b3AiLCJkZWZhdWx0SWNvblRyYW5zZm9ybWF0aW9ucyIsInJvdGF0ZSIsInZGbGlwIiwiaEZsaXAiLCJkZWZhdWx0SWNvblByb3BzIiwiaW5Ccm93c2VyIiwibWFyayIsIm1lYXN1cmUiLCJwZXJmIiwicGVyZm9ybWFuY2UiLCJjbGVhck1hcmtzIiwiY2xlYXJNZWFzdXJlcyIsInRhZyIsInN0YXJ0VGFnIiwiZW5kVGFnIiwibmFtZSIsImZyaWVuZGx5SlNPTnN0cmluZ2lmeSIsIkpTT04iLCJzdHJpbmdpZnkiLCJqc29uIiwicmVwbGFjZSIsImFzc2lnbiIsIl9nbG9iYWxUaGlzIiwiaGFzT3duUHJvcGVydHkiLCJwcm90b3R5cGUiLCJpc0FycmF5IiwiQXJyYXkiLCJpc0Z1bmN0aW9uIiwidmFsIiwiaXNPYmplY3QiLCJvYmplY3RUb1N0cmluZyIsInRvU3RyaW5nIiwidG9UeXBlU3RyaW5nIiwidmFsdWUiLCJjYWxsIiwiaXNQbGFpbk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwicHJvdG8iLCJjb25zdHJ1Y3RvciIsIndhcm4iLCJtc2ciLCJlcnIiLCJjb25zb2xlIiwic3RhY2siLCJpc05vdE9iamVjdE9ySXNBcnJheSIsImV2ZW50cyIsIk1hcCIsImhhbmRsZXIiLCJoYW5kbGVycyIsImdldCIsImV2ZW50IiwicHVzaCIsInNldCIsInNwbGljZSIsImluZGV4T2YiLCJwYXlsb2FkIiwic2xpY2UiLCJtYXAiLCJzcmMiLCJkZXMiLCJFcnJvciIsImxlbmd0aCIsInBvcCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwicmF3VGV4dCIsIm1lc3NhZ2UiLCJhcmdzIiwiUkVfQVJHUyIsIm1hdGNoIiwiaWRlbnRpZmllciIsInN0YXJ0IiwiZW5kIiwic291cmNlIiwibGluZXMiLCJzcGxpdCIsImNvdW50IiwicmVzIiwiaSIsImoiLCJsaW5lIiwicmVwZWF0IiwiU3RyaW5nIiwibGluZUxlbmd0aCIsInBhZCIsIk1hdGgiLCJtYXgiLCJqb2luIiwibG9jYWxlIiwiayIsImdsb2JhbFRoaXMiLCJzZWxmIiwiZ2xvYmFsIiwib2JqIiwiY29kZSIsImN1cnJlbnQiLCJpc0Zpbml0ZSIsInRoZW4iLCJjYXRjaCIsIml0ZW1zIiwic2VwYXJhdG9yIiwicmVkdWNlIiwiaXRlbSIsImluZGV4Iiwic3RyIiwic2hhcmVhYmxlIiwiU3ltYm9sIiwiZm9yIiwiaGFzV2FybmVkIiwiZm9ybWF0JDEiLCJnZW5lcmF0ZUZvcm1hdENhY2hlS2V5IiwicyIsImlzRGF0ZSIsImlzUmVnRXhwIiwiaXNFbXB0eU9iamVjdCIsImlzU3RyaW5nIiwiUkFOR0UiLCJjcmVhdGVMb2NhdGlvbiIsIkNvbXBpbGVFcnJvckNvZGVzIiwiRVhQRUNURURfVE9LRU4iLCJJTlZBTElEX1RPS0VOX0lOX1BMQUNFSE9MREVSIiwiVU5URVJNSU5BVEVEX1NJTkdMRV9RVU9URV9JTl9QTEFDRUhPTERFUiIsIlVOS05PV05fRVNDQVBFX1NFUVVFTkNFIiwiSU5WQUxJRF9VTklDT0RFX0VTQ0FQRV9TRVFVRU5DRSIsIlVOQkFMQU5DRURfQ0xPU0lOR19CUkFDRSIsIlVOVEVSTUlOQVRFRF9DTE9TSU5HX0JSQUNFIiwiRU1QVFlfUExBQ0VIT0xERVIiLCJOT1RfQUxMT1dfTkVTVF9QTEFDRUhPTERFUiIsIklOVkFMSURfTElOS0VEX0ZPUk1BVCIsIk1VU1RfSEFWRV9NRVNTQUdFU19JTl9QTFVSQUwiLCJVTkVYUEVDVEVEX0VNUFRZX0xJTktFRF9NT0RJRklFUiIsIlVORVhQRUNURURfRU1QVFlfTElOS0VEX0tFWSIsIlVORVhQRUNURURfTEVYSUNBTF9BTkFMWVNJUyIsIlVOSEFORExFRF9DT0RFR0VOX05PREVfVFlQRSIsIlVOSEFORExFRF9NSU5JRklFUl9OT0RFX1RZUEUiLCJfX0VYVEVORF9QT0lOVF9fIiwiZXJyb3JNZXNzYWdlcyQxIiwibG9jIiwib3B0aW9ucyIsImRvbWFpbiIsIm1lc3NhZ2VzIiwiZXJyb3IiLCJTeW50YXhFcnJvciIsImxvY2F0aW9uIiwiZGVmYXVsdE9uRXJyb3IiLCJSRV9IVE1MX1RBRyIsImRldGVjdEh0bWxUYWciLCJ0ZXN0IiwiQ0hBUl9DUiIsIkNIQVJfTFMiLCJmcm9tQ2hhckNvZGUiLCJDSEFSX1BTIiwiY3JlYXRlU2Nhbm5lciIsIl9idWYiLCJfaW5kZXgiLCJfY29sdW1uIiwiX3BlZWtPZmZzZXQiLCJDSEFSX0xGIiwiaXNMaW5lRW5kIiwiaXNQUyIsImlzTFMiLCJvZmZzZXQiLCJpc0NSTEYiLCJuZXh0IiwiX2xpbmUiLCJjb2x1bW4iLCJwZWVrT2Zmc2V0IiwiY2hhckF0IiwiY3VycmVudENoYXIiLCJjdXJyZW50UGVlayIsInBlZWsiLCJyZXNldCIsInJlc2V0UGVlayIsInNraXBUb1BlZWsiLCJ0YXJnZXQiLCJFT0YiLCJ1bmRlZmluZWQiLCJET1QiLCJMSVRFUkFMX0RFTElNSVRFUiIsIkVSUk9SX0RPTUFJTiQzIiwiY3JlYXRlVG9rZW5pemVyIiwiY3VycmVudE9mZnNldCIsIl9zY25yIiwiY3JlYXRlUG9zaXRpb24iLCJfaW5pdExvYyIsImN1cnJlbnRUeXBlIiwiX2luaXRPZmZzZXQiLCJzdGFydExvYyIsImVuZExvYyIsImxhc3RUeXBlIiwibGFzdE9mZnNldCIsImxhc3RTdGFydExvYyIsImxhc3RFbmRMb2MiLCJicmFjZU5lc3QiLCJpbkxpbmtlZCIsInRleHQiLCJfY29udGV4dCIsIm9uRXJyb3IiLCJlbWl0RXJyb3IiLCJwb3MiLCJjdHgiLCJjb250ZXh0IiwiZ2V0VG9rZW4iLCJ0eXBlIiwidG9rZW4iLCJjaCIsInNjbnIiLCJjdXJyZW50UG9zaXRpb24iLCJwZWVrU3BhY2VzIiwiQ0hBUl9TUCIsImJ1ZiIsInNraXBTcGFjZXMiLCJpc0lkZW50aWZpZXJTdGFydCIsImNjIiwiY2hhckNvZGVBdCIsInJldCIsImlzVGV4dFN0YXJ0IiwiaGFzU3BhY2UiLCJkZXRlY3RNb2R1bG8iLCJwcmV2IiwiZm4iLCJ0YWtlSWRlbnRpZmllckNoYXIiLCJ0YWtlSGV4RGlnaXQiLCJ0YWtlRGlnaXQiLCJudW0iLCJyZWFkVGV4dCIsImlzUGx1cmFsU3RhcnQiLCJyZWFkRXNjYXBlU2VxdWVuY2UiLCJyZWFkVW5pY29kZUVzY2FwZVNlcXVlbmNlIiwidW5pY29kZSIsImRpZ2l0cyIsImVhdCIsInNlcXVlbmNlIiwicGx1cmFsIiwicmVhZFRva2VuSW5MaW5rZWQiLCJnZXRFbmRUb2tlbiIsInZhbGlkTmFtZWRJZGVudGlmaWVyIiwidmFsaWRMaXN0SWRlbnRpZmllciIsInJlYWRUb2tlbiIsImdldERpZ2l0cyIsInJlYWRMaXN0SWRlbnRpZmllciIsInZhbGlkTGl0ZXJhbCIsImlzTGl0ZXJhbFN0YXJ0IiwibGl0ZXJhbCIsInJlYWRMaXRlcmFsIiwiaWRlbnRpZmllcnMiLCJjbG9zdXJlIiwicmVhZFBsdXJhbCIsImlzTGlua2VkTW9kaWZpZXJTdGFydCIsInJlYWRMaW5rZWRNb2RpZmllciIsInJlYWRUb2tlbkluUGxhY2Vob2xkZXIiLCJkZXRlY3QiLCJpc01vZHVsbyIsInNwYWNlcyIsImRldGVjdE1vZHVsb1N0YXJ0IiwicmVhZE1vZHVsbyIsIm5leHRUb2tlbiIsIkVSUk9SX0RPTUFJTiQyIiwiS05PV05fRVNDQVBFUyIsImZyb21Fc2NhcGVTZXF1ZW5jZSIsImNvZGVQb2ludDQiLCJjb2RlUG9pbnQ2IiwicGFyc2VJbnQiLCJjb2RlUG9pbnQiLCJmcm9tQ29kZVBvaW50IiwiY3JlYXRlUGFyc2VyIiwidG9rZW56ZXIiLCJjcmVhdGVDb21waWxlRXJyb3IiLCJzdGFydE5vZGUiLCJub2RlIiwiZW5kTm9kZSIsInBhcnNlVGV4dCIsInRva2VuaXplciIsInBhcnNlTGlzdCIsImxpbmtlZE5vZGUiLCJwYXJzZWQiLCJuZXh0Q29uc3VtZVRva2VuIiwiZ2V0VG9rZW5DYXB0aW9uIiwibW9kaWZpZXIiLCJwYXJzZUxpbmtlZEtleSIsImVtcHR5TGlua2VkS2V5Tm9kZSIsIm5leHRDb250ZXh0IiwicGFyc2VNZXNzYWdlIiwibWFrZU1hcCIsImFjdGl2ZUVmZmVjdFNjb3BlIiwiYWN0aXZlRWZmZWN0IiwiRWZmZWN0U2NvcGUiLCJkZXRhY2hlZCIsInRoaXMiLCJfYWN0aXZlIiwiZWZmZWN0cyIsImNsZWFudXBzIiwiZGVmaW5lQ29tcG9uZW50IiwiZXh0cmFPcHRpb25zIiwiZXh0ZW5kIiwic2V0dXAiLCJkZWZpbmVBc3luY0NvbXBvbmVudCIsImxvYWRpbmdDb21wb25lbnQiLCJlcnJvckNvbXBvbmVudCIsImRlbGF5IiwidGltZW91dCIsInN1c3BlbnNpYmxlIiwidXNlck9uRXJyb3IiLCJyZXNvbHZlZENvbXAiLCJwZW5kaW5nUmVxdWVzdCIsInJldHJpZXMiLCJsb2FkIiwidGhpc1JlcXVlc3QiLCJsb2FkZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIl9fZXNNb2R1bGUiLCJjb21wIiwidG9TdHJpbmdUYWciLCJkZWZhdWx0IiwiX19hc3luY0xvYWRlciIsIl9fYXN5bmNSZXNvbHZlZCIsImN1cnJlbnRJbnN0YW5jZSIsImNyZWF0ZUlubmVyQ29tcCIsImluc3RhbmNlIiwiaGFuZGxlRXJyb3IiLCJzdXNwZW5zZSIsImNyZWF0ZVZOb2RlIiwibG9hZGVkIiwicmVmIiwiZGVsYXllZCIsInNldFRpbWVvdXQiLCJwYXJlbnQiLCJ2bm9kZSIsImVmZmVjdCIsImRpcnR5IiwicXVldWVKb2IiLCJ1cGRhdGUiLCJyZWYyIiwicHJvcHMiLCJjZSIsImNoaWxkcmVuIiwiX19pc0tlZXBBbGl2ZSIsIktlZXBBbGl2ZUltcGwiLCJpbmNsdWRlIiwiUmVnRXhwIiwiZXhjbHVkZSIsIk51bWJlciIsInNsb3RzIiwiZ2V0Q3VycmVudEluc3RhbmNlIiwic2hhcmVkQ29udGV4dCIsInJlbmRlcmVyIiwiY2FjaGUiLCJTZXQiLCJwYXJlbnRTdXNwZW5zZSIsInAiLCJtIiwibW92ZSIsInVtIiwiX3VubW91bnQiLCJjcmVhdGVFbGVtZW50Iiwic3RvcmFnZUNvbnRhaW5lciIsInVubW91bnQiLCJyZXNldFNoYXBlRmxhZyIsInBydW5lQ2FjaGUiLCJnZXRDb21wb25lbnROYW1lIiwiZmlsdGVyIiwicHJ1bmVDYWNoZUVudHJ5IiwiY2FjaGVkIiwiaXNTYW1lVk5vZGVUeXBlIiwiZGVsZXRlIiwiYWN0aXZhdGUiLCJjb21wb25lbnQiLCJjb250YWluZXIiLCJhbmNob3IiLCJwYXRjaCIsImluc3RhbmNlMiIsIm5hbWVzcGFjZSIsInNsb3RTY29wZUlkcyIsIm9wdGltaXplZCIsInF1ZXVlUG9zdFJlbmRlckVmZmVjdCIsImlzRGVhY3RpdmF0ZWQiLCJhIiwidm5vZGVIb29rIiwib25Wbm9kZU1vdW50ZWQiLCJkZWFjdGl2YXRlIiwiZGEiLCJpbnZva2VBcnJheUZucyIsIm9uVm5vZGVVbm1vdW50ZWQiLCJpbnZva2VWTm9kZUhvb2siLCJtYXRjaGVzIiwiZmx1c2giLCJkZWVwIiwicGVuZGluZ0NhY2hlS2V5IiwiZ2V0SW5uZXJDaGlsZCIsInN1YlRyZWUiLCJvbk1vdW50ZWQiLCJjYWNoZVN1YnRyZWUiLCJvblVwZGF0ZWQiLCJvbkJlZm9yZVVubW91bnQiLCJyYXdWTm9kZSIsImlzQXN5bmNXcmFwcGVyIiwiY2xvbmVWTm9kZSIsInNoYXBlRmxhZyIsInNzQ29udGVudCIsImNhY2hlZFZOb2RlIiwiZWwiLCJ0cmFuc2l0aW9uIiwic2V0VHJhbnNpdGlvbkhvb2tzIiwiYWRkIiwidmFsdWVzIiwiS2VlcEFsaXZlIiwicGF0dGVybiIsInNvbWUiLCJpbmNsdWRlcyIsIm9uQWN0aXZhdGVkIiwiaG9vayIsInJlZ2lzdGVyS2VlcEFsaXZlSG9vayIsIm9uRGVhY3RpdmF0ZWQiLCJfX3dkYyIsImluamVjdEhvb2siLCJpc0tlZXBBbGl2ZSIsImluamVjdFRvS2VlcEFsaXZlUm9vdCIsImtlZXBBbGl2ZVJvb3QiLCJpbmplY3RlZCIsIm9uVW5tb3VudGVkIiwicHJlcGVuZCIsImhvb2tzIiwid3JhcHBlZEhvb2siLCJfX3dlaCIsImlzVW5tb3VudGVkIiwicGF1c2VUcmFja2luZyIsInNldEN1cnJlbnRJbnN0YW5jZSIsImNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nIiwidW5zaGlmdCIsImNyZWF0ZUhvb2siLCJpc0luU1NSQ29tcG9uZW50U2V0dXAiLCJsaWZlY3ljbGUiLCJvbkJlZm9yZU1vdW50Iiwib25CZWZvcmVVcGRhdGUiLCJvblNlcnZlclByZWZldGNoIiwib25SZW5kZXJUcmFja2VkIiwib25FcnJvckNhcHR1cmVkIiwicmVuZGVyTGlzdCIsImwiLCJyZW5kZXJJdGVtIiwiaXRlcmF0b3IiLCJmcm9tIiwiY3JlYXRlU2xvdHMiLCJkeW5hbWljU2xvdHMiLCJzbG90IiwicmVuZGVyU2xvdCIsImZhbGxiYWNrIiwibm9TbG90dGVkIiwiY3VycmVudFJlbmRlcmluZ0luc3RhbmNlIiwiaXNDRSIsIl9jIiwib3BlbkJsb2NrIiwidmFsaWRTbG90Q29udGVudCIsImVuc3VyZVZhbGlkVk5vZGUiLCJjcmVhdGVCbG9jayIsIkZyYWdtZW50IiwiXyIsInNjb3BlSWQiLCJyZW5kZXJlZCIsIl9kIiwidm5vZGVzIiwiY2hpbGQiLCJpc1ZOb2RlIiwiQ29tbWVudCIsInRvSGFuZGxlcnMiLCJwcmVzZXJ2ZUNhc2VJZk5lY2Vzc2FyeSIsInRvSGFuZGxlcktleSIsImdldFB1YmxpY0luc3RhbmNlIiwiaXNTdGF0ZWZ1bENvbXBvbmVudCIsImdldEV4cG9zZVByb3h5IiwicHVibGljUHJvcGVydGllc01hcCIsImNyZWF0ZSIsIiRlbCIsIiRkYXRhIiwiZGF0YSIsIiRwcm9wcyIsIiRzbG90cyIsIiRyZWZzIiwicmVmcyIsIiRwYXJlbnQiLCIkcm9vdCIsInJvb3QiLCIkZW1pdCIsImVtaXQiLCIkb3B0aW9ucyIsIiRmb3JjZVVwZGF0ZSIsImYiLCIkbmV4dFRpY2siLCJuIiwibmV4dFRpY2siLCJiaW5kIiwicHJveHkiLCJpbnN0YW5jZVdhdGNoIiwiaGFzU2V0dXBCaW5kaW5nIiwic3RhdGUiLCJFTVBUWV9PQkoiLCJfX2lzU2NyaXB0U2V0dXAiLCJoYXNPd24iLCJQdWJsaWNJbnN0YW5jZVByb3h5SGFuZGxlcnMiLCJhcHBDb250ZXh0Iiwibm9ybWFsaXplZFByb3BzIiwiYWNjZXNzQ2FjaGUiLCJzZXR1cFN0YXRlIiwicHJvcHNPcHRpb25zIiwic2hvdWxkQ2FjaGVBY2Nlc3MiLCJwdWJsaWNHZXR0ZXIiLCJjc3NNb2R1bGUiLCJfX2Nzc01vZHVsZXMiLCJnbG9iYWxQcm9wZXJ0aWVzIiwiY29uZmlnIiwiZGVzY3JpcHRvciIsIlJlZmxlY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIlJ1bnRpbWVDb21waWxlZFB1YmxpY0luc3RhbmNlUHJveHlIYW5kbGVycyIsInVuc2NvcGFibGVzIiwiaGFzIiwiaXNHbG9iYWxseUFsbG93ZWQiLCJ1c2VTbG90cyIsImdldENvbnRleHQiLCJ1c2VBdHRycyIsImF0dHJzIiwic2V0dXBDb250ZXh0Iiwibm9ybWFsaXplUHJvcHNPckVtaXRzIiwibm9ybWFsaXplZCIsImFwcGx5T3B0aW9ucyIsInJlc29sdmVNZXJnZWRPcHRpb25zIiwicHVibGljVGhpcyIsImJlZm9yZUNyZWF0ZSIsImNvbXB1dGVkIiwiY29tcHV0ZWRPcHRpb25zIiwibWV0aG9kcyIsIndhdGNoIiwid2F0Y2hPcHRpb25zIiwicHJvdmlkZSIsInByb3ZpZGVPcHRpb25zIiwiaW5qZWN0IiwiaW5qZWN0T3B0aW9ucyIsImNyZWF0ZWQiLCJiZWZvcmVNb3VudCIsIm1vdW50ZWQiLCJiZWZvcmVVcGRhdGUiLCJ1cGRhdGVkIiwiYWN0aXZhdGVkIiwiZGVhY3RpdmF0ZWQiLCJiZWZvcmVEZXN0cm95IiwiYmVmb3JlVW5tb3VudCIsImRlc3Ryb3llZCIsInVubW91bnRlZCIsInJlbmRlciIsInJlbmRlclRyYWNrZWQiLCJyZW5kZXJUcmlnZ2VyZWQiLCJlcnJvckNhcHR1cmVkIiwic2VydmVyUHJlZmV0Y2giLCJleHBvc2UiLCJpbmhlcml0QXR0cnMiLCJjb21wb25lbnRzIiwiZGlyZWN0aXZlcyIsImZpbHRlcnMiLCJub3JtYWxpemVJbmplY3QiLCJvcHQiLCJpc1JlZiIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ2IiwicmVzb2x2ZUluamVjdGlvbnMiLCJtZXRob2RIYW5kbGVyIiwiZGF0YU9wdGlvbnMiLCJyZWFjdGl2ZSIsImMiLCJjcmVhdGVXYXRjaGVyIiwib3duS2V5cyIsInByb3ZpZGVzIiwicmVnaXN0ZXJMaWZlY3ljbGVIb29rIiwicmVnaXN0ZXIiLCJfaG9vayIsImNhbGxIb29rIiwiZXhwb3NlZCIsIk5PT1AiLCJoIiwiZ2V0dGVyIiwicmF3IiwiciIsImJhc2UiLCJtaXhpbnMiLCJleHRlbmRzIiwiZXh0ZW5kc09wdGlvbnMiLCJnbG9iYWxNaXhpbnMiLCJvcHRpb25zQ2FjaGUiLCJvcHRpb25NZXJnZVN0cmF0ZWdpZXMiLCJyZXNvbHZlZCIsIm1lcmdlT3B0aW9ucyIsInRvIiwic3RyYXRzIiwiYXNNaXhpbiIsInN0cmF0IiwiaW50ZXJuYWxPcHRpb25NZXJnZVN0cmF0cyIsIm1lcmdlRGF0YUZuIiwibWVyZ2VFbWl0c09yUHJvcHNPcHRpb25zIiwiZW1pdHMiLCJtZXJnZU9iamVjdE9wdGlvbnMiLCJtZXJnZUFzQXJyYXkiLCJtZXJnZWQiLCJjb25jYXQiLCJhcHAiLCJpc05hdGl2ZVRhZyIsIk5PIiwiZXJyb3JIYW5kbGVyIiwid2FybkhhbmRsZXIiLCJjb21waWxlck9wdGlvbnMiLCJXZWFrTWFwIiwicHJvcHNDYWNoZSIsImVtaXRzQ2FjaGUiLCJ1aWQkMSIsImNyZWF0ZUFwcEFQSSIsImh5ZHJhdGUiLCJyb290Q29tcG9uZW50Iiwicm9vdFByb3BzIiwiY3JlYXRlQXBwQ29udGV4dCIsImluc3RhbGxlZFBsdWdpbnMiLCJXZWFrU2V0IiwiaXNNb3VudGVkIiwiX3VpZCIsIl9jb21wb25lbnQiLCJfcHJvcHMiLCJfY29udGFpbmVyIiwiX2luc3RhbmNlIiwidmVyc2lvbiIsInVzZSIsInBsdWdpbiIsImluc3RhbGwiLCJtaXhpbiIsImRpcmVjdGl2ZSIsInJvb3RDb250YWluZXIiLCJpc0h5ZHJhdGUiLCJfX3Z1ZV9hcHBfXyIsInJ1bldpdGhDb250ZXh0IiwibGFzdEFwcCIsImN1cnJlbnRBcHAiLCJwYXJlbnRQcm92aWRlcyIsInRyZWF0RGVmYXVsdEFzRmFjdG9yeSIsImFyZ3VtZW50cyIsImRlZmF1bHRWYWx1ZSIsImhhc0luamVjdGlvbkNvbnRleHQiLCJyYXdQcm9wcyIsInJhd0Nhc3RWYWx1ZXMiLCJoYXNBdHRyc0NoYW5nZWQiLCJpc1Jlc2VydmVkUHJvcCIsImNhbWVsaXplIiwibmVlZENhc3RLZXlzIiwiY2FtZWxLZXkiLCJpc0VtaXRMaXN0ZW5lciIsImVtaXRzT3B0aW9ucyIsInJhd0N1cnJlbnRQcm9wcyIsInRvUmF3IiwiY2FzdFZhbHVlcyIsInJlc29sdmVQcm9wVmFsdWUiLCJpc0Fic2VudCIsImhhc0RlZmF1bHQiLCJGdW5jdGlvbiIsInNraXBGYWN0b3J5IiwicHJvcHNEZWZhdWx0cyIsImh5cGhlbmF0ZSIsIm5vcm1hbGl6ZVByb3BzT3B0aW9ucyIsImhhc0V4dGVuZHMiLCJyYXcyIiwiZXh0ZW5kUHJvcHMiLCJFTVBUWV9BUlIiLCJ2YWxpZGF0ZVByb3BOYW1lIiwibm9ybWFsaXplZEtleSIsInByb3AiLCJib29sZWFuSW5kZXgiLCJnZXRUeXBlSW5kZXgiLCJCb29sZWFuIiwic3RyaW5nSW5kZXgiLCJnZXRUeXBlIiwiY3RvciIsImlzU2FtZVR5cGUiLCJiIiwiZXhwZWN0ZWRUeXBlcyIsImZpbmRJbmRleCIsInQiLCJpc0ludGVybmFsS2V5Iiwibm9ybWFsaXplU2xvdFZhbHVlIiwibm9ybWFsaXplVk5vZGUiLCJyYXdTbG90IiwiX24iLCJ3aXRoQ3R4IiwicmF3U2xvdHMiLCJfY3R4Iiwibm9ybWFsaXplU2xvdCIsIm5vcm1hbGl6ZVZOb2RlU2xvdHMiLCJpbml0U2xvdHMiLCJkZWYiLCJub3JtYWxpemVPYmplY3RTbG90cyIsIkludGVybmFsT2JqZWN0S2V5IiwidXBkYXRlU2xvdHMiLCJuZWVkRGVsZXRpb25DaGVjayIsImRlbGV0aW9uQ29tcGFyaXNvblRhcmdldCIsIiRzdGFibGUiLCJzZXRSZWYiLCJyYXdSZWYiLCJvbGRSYXdSZWYiLCJpc1VubW91bnQiLCJyZWZWYWx1ZSIsIm93bmVyIiwib2xkUmVmIiwiY2FsbFdpdGhFcnJvckhhbmRsaW5nIiwiX2lzU3RyaW5nIiwiX2lzUmVmIiwiZXhpc3RpbmciLCJyZW1vdmUiLCJkb1NldCIsImhhc01pc21hdGNoIiwiZ2V0Q29udGFpbmVyVHlwZSIsIm5hbWVzcGFjZVVSSSIsInRhZ05hbWUiLCJpc0NvbW1lbnQiLCJub2RlVHlwZSIsImNyZWF0ZUh5ZHJhdGlvbkZ1bmN0aW9ucyIsInJlbmRlcmVySW50ZXJuYWxzIiwibXQiLCJvIiwicGF0Y2hQcm9wIiwiY3JlYXRlVGV4dCIsIm5leHRTaWJsaW5nIiwicGFyZW50Tm9kZSIsImluc2VydCIsImNyZWF0ZUNvbW1lbnQiLCJoeWRyYXRlTm9kZSIsInBhcmVudENvbXBvbmVudCIsImlzRnJhZ21lbnRTdGFydCIsIm9uTWlzbWF0Y2giLCJoYW5kbGVNaXNtYXRjaCIsInBhdGNoRmxhZyIsImR5bmFtaWNDaGlsZHJlbiIsIm5leHROb2RlIiwiZG9tVHlwZSIsImNvbnRlbnQiLCJmaXJzdENoaWxkIiwiU3RhdGljIiwibmVlZFRvQWRvcHRDb250ZW50Iiwic3RhdGljQ291bnQiLCJvdXRlckhUTUwiLCJoeWRyYXRlRnJhZ21lbnQiLCJ0b0xvd2VyQ2FzZSIsImlzVGVtcGxhdGVOb2RlIiwiaHlkcmF0ZUVsZW1lbnQiLCJsb2NhdGVDbG9zaW5nQW5jaG9yIiwibW91bnRDb21wb25lbnQiLCJwcmV2aW91c1NpYmxpbmciLCJjcmVhdGVUZXh0Vk5vZGUiLCJoeWRyYXRlQ2hpbGRyZW4iLCJkaXJzIiwiZm9yY2VQYXRjaCIsImludm9rZURpcmVjdGl2ZUhvb2siLCJ2bm9kZUhvb2tzIiwibmVlZENhbGxUcmFuc2l0aW9uSG9va3MiLCJuZWVkVHJhbnNpdGlvbiIsImFwcGVhciIsImJlZm9yZUVudGVyIiwicmVwbGFjZU5vZGUiLCJ0ZXh0Q29udGVudCIsImN1ciIsImVuZHNXaXRoIiwib25DbGljayIsIm9uVm5vZGVCZWZvcmVNb3VudCIsInF1ZXVlRWZmZWN0V2l0aFN1c3BlbnNlIiwiZW50ZXIiLCJwYXJlbnRWTm9kZSIsIlRleHQiLCJmcmFnbWVudFNsb3RTY29wZUlkcyIsImlzRnJhZ21lbnQiLCJuZXh0MiIsIm9wZW4iLCJjbG9zZSIsIm9sZE5vZGUiLCJwYXJlbnROb2RlMiIsInJlcGxhY2VDaGlsZCIsImhhc0NoaWxkTm9kZXMiLCJmbHVzaFBvc3RGbHVzaENicyIsIl92bm9kZSIsImNyZWF0ZVJlbmRlcmVyIiwiYmFzZUNyZWF0ZVJlbmRlcmVyIiwiZ2V0R2xvYmFsVGhpcyIsIl9fVlVFX18iLCJob3N0SW5zZXJ0IiwiaG9zdFJlbW92ZSIsImhvc3RQYXRjaFByb3AiLCJob3N0Q3JlYXRlRWxlbWVudCIsImhvc3RDcmVhdGVDb21tZW50Iiwic2V0VGV4dCIsImhvc3RTZXRUZXh0Iiwic2V0RWxlbWVudFRleHQiLCJob3N0UGFyZW50Tm9kZSIsInNldFNjb3BlSWQiLCJpbnNlcnRTdGF0aWNDb250ZW50IiwibjEiLCJuMiIsInByb2Nlc3NDb21tZW50Tm9kZSIsIm1vdW50U3RhdGljTm9kZSIsInByb2Nlc3MiLCJpbnRlcm5hbHMiLCJwcm9jZXNzVGV4dCIsInByb2Nlc3NFbGVtZW50IiwibW91bnRFbGVtZW50IiwicGF0Y2hFbGVtZW50IiwicmVzb2x2ZUNoaWxkcmVuTmFtZXNwYWNlIiwidW5tb3VudENoaWxkcmVuIiwiaG9zdFNldFNjb3BlSWQiLCJtb3VudENoaWxkcmVuIiwiY2xvbmVJZk1vdW50ZWQiLCJvbGRQcm9wcyIsIm5ld1Byb3BzIiwib25Wbm9kZUJlZm9yZVVwZGF0ZSIsInRvZ2dsZVJlY3Vyc2UiLCJwYXRjaFByb3BzIiwiY2xhc3MiLCJkeW5hbWljUHJvcHMiLCJwcm9wc1RvVXBkYXRlIiwiaG9zdFNldEVsZW1lbnRUZXh0Iiwib25Wbm9kZVVwZGF0ZWQiLCJvbGRDaGlsZHJlbiIsIm5ld0NoaWxkcmVuIiwiZmFsbGJhY2tDb250YWluZXIiLCJvbGRWTm9kZSIsIm5ld1ZOb2RlIiwicHJvY2Vzc0ZyYWdtZW50IiwiZnJhZ21lbnRTdGFydEFuY2hvciIsImhvc3RDcmVhdGVUZXh0IiwiZnJhZ21lbnRFbmRBbmNob3IiLCJwYXRjaEJsb2NrQ2hpbGRyZW4iLCJ0cmF2ZXJzZVN0YXRpY0NoaWxkcmVuIiwicGF0Y2hDaGlsZHJlbiIsInByb2Nlc3NDb21wb25lbnQiLCJ1cGRhdGVDb21wb25lbnQiLCJpbml0aWFsVk5vZGUiLCJjcmVhdGVDb21wb25lbnRJbnN0YW5jZSIsInNldHVwQ29tcG9uZW50IiwiYXN5bmNEZXAiLCJyZWdpc3RlckRlcCIsInNldHVwUmVuZGVyRWZmZWN0IiwicGxhY2Vob2xkZXIiLCJwcmV2Vk5vZGUiLCJuZXh0Vk5vZGUiLCJwcmV2UHJvcHMiLCJwcmV2Q2hpbGRyZW4iLCJuZXh0UHJvcHMiLCJuZXh0Q2hpbGRyZW4iLCJoYXNQcm9wc0NoYW5nZWQiLCJhc3luY1Jlc29sdmVkIiwidXBkYXRlQ29tcG9uZW50UHJlUmVuZGVyIiwiY29tcG9uZW50VXBkYXRlRm4iLCJsb2NhdGVOb25IeWRyYXRlZEFzeW5jUm9vdCIsIm5vbkh5ZHJhdGVkQXN5bmNSb290IiwicmVuZGVyQ29tcG9uZW50Um9vdCIsIm5leHRUcmVlIiwiZ2V0TmV4dEhvc3ROb2RlIiwicHJldlRyZWUiLCJibSIsImlzQXN5bmNXcmFwcGVyVk5vZGUiLCJoeWRyYXRlU3ViVHJlZSIsInNjb3BlIiwicnVuIiwidWlkIiwicmF3UHJldlByb3BzIiwia2ViYWJLZXkiLCJzZXRGdWxsUHJvcHMiLCJjYW1lbGl6ZWRLZXkiLCJ0cmlnZ2VyIiwidXBkYXRlUHJvcHMiLCJmbHVzaFByZUZsdXNoQ2JzIiwiYzEiLCJwcmV2U2hhcGVGbGFnIiwiYzIiLCJwYXRjaFVua2V5ZWRDaGlsZHJlbiIsIm9sZExlbmd0aCIsIm1pbiIsIm5ld0xlbmd0aCIsIm5leHRDaGlsZCIsImNvbW1vbkxlbmd0aCIsInBhdGNoS2V5ZWRDaGlsZHJlbiIsInBhcmVudEFuY2hvciIsImwyIiwiZTEiLCJlMiIsIm5leHRQb3MiLCJzMSIsInMyIiwia2V5VG9OZXdJbmRleE1hcCIsInBhdGNoZWQiLCJtYXhOZXdJbmRleFNvRmFyIiwibmV3SW5kZXhUb09sZEluZGV4TWFwIiwidG9CZVBhdGNoZWQiLCJwcmV2Q2hpbGQiLCJuZXdJbmRleCIsIm1vdmVkIiwiaW5jcmVhc2luZ05ld0luZGV4U2VxdWVuY2UiLCJhcnIiLCJyZXN1bHQiLCJ1IiwibGVuIiwiYXJySSIsIm5leHRJbmRleCIsIm1vdmVUeXBlIiwiaG9zdE5leHRTaWJsaW5nIiwibGVhdmUiLCJkZWxheUxlYXZlIiwiYWZ0ZXJMZWF2ZSIsInJlbW92ZTIiLCJwZXJmb3JtTGVhdmUiLCJkb1JlbW92ZSIsInNob3VsZEludm9rZURpcnMiLCJzaG91bGRJbnZva2VWbm9kZUhvb2siLCJvblZub2RlQmVmb3JlVW5tb3VudCIsInVubW91bnRDb21wb25lbnQiLCJyZW1vdmVGcmFnbWVudCIsInJlbW92ZVN0YXRpY05vZGUiLCJwZXJmb3JtUmVtb3ZlIiwicGVyc2lzdGVkIiwiYnVtIiwic3RvcCIsImFjdGl2ZSIsInBlbmRpbmdCcmFuY2giLCJzdXNwZW5zZUlkIiwicGVuZGluZ0lkIiwiZGVwcyIsImlzRmx1c2hpbmciLCJwYyIsInBiYyIsImNyZWF0ZUh5ZHJhdGlvbkZucyIsImNyZWF0ZUFwcCIsImN1cnJlbnROYW1lc3BhY2UiLCJlbmNvZGluZyIsImFsbG93ZWQiLCJhbGxvd1JlY3Vyc2UiLCJzaGFsbG93IiwiY2gxIiwiY2gyIiwic3ViQ29tcG9uZW50IiwiaXNUZWxlcG9ydERpc2FibGVkIiwiZGlzYWJsZWQiLCJpc1RhcmdldFNWRyIsIlNWR0VsZW1lbnQiLCJpc1RhcmdldE1hdGhNTCIsIk1hdGhNTEVsZW1lbnQiLCJyZXNvbHZlVGFyZ2V0Iiwic2VsZWN0IiwidGFyZ2V0U2VsZWN0b3IiLCJUZWxlcG9ydEltcGwiLCJfX2lzVGVsZXBvcnQiLCJtYyIsInF1ZXJ5U2VsZWN0b3IiLCJtYWluQW5jaG9yIiwidGFyZ2V0QW5jaG9yIiwibW91bnQiLCJjb250YWluZXIyIiwiYW5jaG9yMiIsImN1cnJlbnRDb250YWluZXIiLCJ3YXNEaXNhYmxlZCIsImN1cnJlbnRBbmNob3IiLCJtb3ZlVGVsZXBvcnQiLCJuZXh0VGFyZ2V0IiwidXBkYXRlQ3NzVmFycyIsInNob3VsZFJlbW92ZSIsIl9scGEiLCJ0YXJnZXROb2RlIiwiaXNSZW9yZGVyIiwidXQiLCJibG9ja1N0YWNrIiwiY3VycmVudEJsb2NrIiwiZGlzYWJsZVRyYWNraW5nIiwiY2xvc2VCbG9jayIsImlzQmxvY2tUcmVlRW5hYmxlZCIsInNldEJsb2NrVHJhY2tpbmciLCJzZXR1cEJsb2NrIiwiY3JlYXRlRWxlbWVudEJsb2NrIiwiY3JlYXRlQmFzZVZOb2RlIiwiX192X2lzVk5vZGUiLCJub3JtYWxpemVLZXkiLCJub3JtYWxpemVSZWYiLCJyZWZfa2V5IiwicmVmX2ZvciIsImlzQmxvY2tOb2RlIiwibmVlZEZ1bGxDaGlsZHJlbk5vcm1hbGl6YXRpb24iLCJfX3Zfc2tpcCIsImN1cnJlbnRTY29wZUlkIiwic3NGYWxsYmFjayIsIm5vcm1hbGl6ZUNoaWxkcmVuIiwibm9ybWFsaXplIiwiTlVMTF9EWU5BTUlDX0NPTVBPTkVOVCIsImNsb25lZCIsIl9fdmNjT3B0cyIsImd1YXJkUmVhY3RpdmVQcm9wcyIsImtsYXNzIiwiaXNQcm94eSIsIm5vcm1hbGl6ZVN0eWxlIiwiaXNTdXNwZW5zZSIsImV4dHJhUHJvcHMiLCJtZXJnZWRQcm9wcyIsIm1lcmdlUHJvcHMiLCJtZXJnZVJlZiIsImNyZWF0ZUNvbW1lbnRWTm9kZSIsImFzQmxvY2siLCJtZW1vIiwic2xvdEZsYWciLCJ0b01lcmdlIiwibm9ybWFsaXplQ2xhc3MiLCJpc09uIiwiaW5jb21pbmciLCJlbXB0eUFwcENvbnRleHQiLCJleHBvc2VQcm94eSIsIndpdGhQcm94eSIsInJlbmRlckNhY2hlIiwibm9ybWFsaXplRW1pdHNPcHRpb25zIiwiZW1pdHRlZCIsImF0dHJzUHJveHkiLCJzbG90c1Byb3h5IiwiYmMiLCJydGciLCJydGMiLCJzcCIsImludGVybmFsU2V0Q3VycmVudEluc3RhbmNlIiwic2V0SW5TU1JTZXR1cFN0YXRlIiwiZyIsInJlZ2lzdGVyR2xvYmFsU2V0dGVyIiwic2V0dGVyIiwic2V0dGVycyIsIm9uIiwib2ZmIiwidW5zZXRDdXJyZW50SW5zdGFuY2UiLCJjb21waWxlIiwiaW5zdGFsbFdpdGhQcm94eSIsImlzU1NSIiwiaXNTdGF0ZWZ1bCIsInNoYWxsb3dSZWFjdGl2ZSIsIkNvbXBvbmVudCIsIm1hcmtSYXciLCJQcm94eSIsInNldHVwUmVzdWx0IiwicmVzZXRUcmFja2luZyIsImlzUHJvbWlzZSIsInJlc29sdmVkUmVzdWx0IiwiaGFuZGxlU2V0dXBSZXN1bHQiLCJlIiwiZmluaXNoQ29tcG9uZW50U2V0dXAiLCJfX3NzcklubGluZVJlbmRlciIsInNzclJlbmRlciIsInByb3h5UmVmcyIsInNraXBPcHRpb25zIiwidGVtcGxhdGUiLCJpc0N1c3RvbUVsZW1lbnQiLCJkZWxpbWl0ZXJzIiwiY29tcG9uZW50Q29tcGlsZXJPcHRpb25zIiwiZmluYWxDb21waWxlck9wdGlvbnMiLCJ0cmFjayIsImluY2x1ZGVJbmZlcnJlZCIsImRpc3BsYXlOYW1lIiwiX19uYW1lIiwiZGVidWdPcHRpb25zIiwiY29tcHV0ZWQkMSIsImdldHRlck9yT3B0aW9ucyIsInByb3BzT3JDaGlsZHJlbiIsImlzTWVtb1NhbWUiLCJoYXNDaGFuZ2VkIiwiRXJyb3JUeXBlU3RyaW5ncyIsIkVycm9yVHlwZVN0cmluZ3MkMSIsImRldnRvb2xzIiwic2V0RGV2dG9vbHNIb29rIiwiX2EiLCJfYiIsImRldnRvb2xzJDEiLCJlbmFibGVkIiwiYnVmZmVyIiwiSFRNTEVsZW1lbnQiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJfX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fIiwibmV3SG9vayIsInNldERldnRvb2xzSG9vayQxIiwic3NyVXRpbHMiLCJzZXRDdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UiLCJ0ZW1wbGF0ZUNvbnRhaW5lciIsImRvYyIsIm5vZGVPcHMiLCJyZW1vdmVDaGlsZCIsImlzIiwibXVsdGlwbGUiLCJjcmVhdGVUZXh0Tm9kZSIsIm5vZGVWYWx1ZSIsInNlbGVjdG9yIiwiYmVmb3JlIiwiY2xvbmVOb2RlIiwid3JhcHBlciIsImFwcGVuZENoaWxkIiwiVFJBTlNJVElPTiIsIkFOSU1BVElPTiIsInZ0Y0tleSIsIlRyYW5zaXRpb24iLCJCYXNlVHJhbnNpdGlvbiIsInJlc29sdmVUcmFuc2l0aW9uUHJvcHMiLCJET01UcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzIiwiY3NzIiwiZHVyYXRpb24iLCJlbnRlckZyb21DbGFzcyIsImVudGVyQWN0aXZlQ2xhc3MiLCJlbnRlclRvQ2xhc3MiLCJhcHBlYXJGcm9tQ2xhc3MiLCJhcHBlYXJBY3RpdmVDbGFzcyIsImFwcGVhclRvQ2xhc3MiLCJsZWF2ZUZyb21DbGFzcyIsImxlYXZlQWN0aXZlQ2xhc3MiLCJsZWF2ZVRvQ2xhc3MiLCJUcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzIiwiQmFzZVRyYW5zaXRpb25Qcm9wc1ZhbGlkYXRvcnMiLCJoMiIsImhhc0V4cGxpY2l0Q2FsbGJhY2siLCJiYXNlUHJvcHMiLCJkdXJhdGlvbnMiLCJOdW1iZXJPZiIsImVudGVyRHVyYXRpb24iLCJsZWF2ZUR1cmF0aW9uIiwib25CZWZvcmVFbnRlciIsIm9uRW50ZXIiLCJvbkVudGVyQ2FuY2VsbGVkIiwib25MZWF2ZSIsIm9uTGVhdmVDYW5jZWxsZWQiLCJvbkJlZm9yZUFwcGVhciIsIm9uQXBwZWFyIiwib25BcHBlYXJDYW5jZWxsZWQiLCJkb25lIiwicmVtb3ZlVHJhbnNpdGlvbkNsYXNzIiwiaXNBcHBlYXIiLCJmaW5pc2hMZWF2ZSIsIl9pc0xlYXZpbmciLCJtYWtlRW50ZXJIb29rIiwibmV4dEZyYW1lIiwiYWRkVHJhbnNpdGlvbkNsYXNzIiwid2hlblRyYW5zaXRpb25FbmRzIiwiZm9yY2VSZWZsb3ciLCJmaW5pc2hFbnRlciIsInRvTnVtYmVyIiwiY2xzIiwiY2xhc3NMaXN0IiwiX3Z0YyIsInNpemUiLCJjYiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImVuZElkIiwiZXhwZWN0ZWRUeXBlIiwiZXhwbGljaXRUaW1lb3V0IiwiX2VuZElkIiwicmVzb2x2ZUlmTm90U3RhbGUiLCJwcm9wQ291bnQiLCJnZXRUcmFuc2l0aW9uSW5mbyIsImVuZGVkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9uRW5kIiwiZW5kRXZlbnQiLCJzdHlsZXMiLCJnZXRDb21wdXRlZFN0eWxlIiwiZ2V0U3R5bGVQcm9wZXJ0aWVzIiwidHJhbnNpdGlvbkR1cmF0aW9ucyIsImdldFRpbWVvdXQiLCJhbmltYXRpb25EZWxheXMiLCJhbmltYXRpb25EdXJhdGlvbnMiLCJhbmltYXRpb25UaW1lb3V0IiwidHJhbnNpdGlvblRpbWVvdXQiLCJoYXNUcmFuc2Zvcm0iLCJkZWxheXMiLCJkIiwidG9NcyIsIm9mZnNldEhlaWdodCIsInZTaG93T3JpZ2luYWxEaXNwbGF5IiwidlNob3dIaWRkZW4iLCJ2U2hvdyIsImRpc3BsYXkiLCJvbGRWYWx1ZSIsInNldERpc3BsYXkiLCJ1c2VDc3NWYXJzIiwidXBkYXRlVGVsZXBvcnRzIiwicXVlcnlTZWxlY3RvckFsbCIsInZhcnMiLCJzZXRWYXJzIiwid2F0Y2hQb3N0RWZmZWN0Iiwib2IiLCJNdXRhdGlvbk9ic2VydmVyIiwib2JzZXJ2ZSIsImNoaWxkTGlzdCIsImRpc2Nvbm5lY3QiLCJzZXRWYXJzT25WTm9kZSIsImFjdGl2ZUJyYW5jaCIsImlzSHlkcmF0aW5nIiwic2V0VmFyc09uTm9kZSIsImNzc1RleHQiLCJzZXRQcm9wZXJ0eSIsImRpc3BsYXlSRSIsImltcG9ydGFudFJFIiwic2V0U3R5bGUiLCJzdGFydHNXaXRoIiwicmF3TmFtZSIsInByZWZpeENhY2hlIiwiY2FwaXRhbGl6ZSIsInByZWZpeGVzIiwicHJlZml4ZWQiLCJhdXRvUHJlZml4IiwieGxpbmtOUyIsInZlaUtleSIsInBhdGNoRXZlbnQiLCJwcmV2VmFsdWUiLCJuZXh0VmFsdWUiLCJleGlzdGluZ0ludm9rZXIiLCJpbnZva2VycyIsIm9wdGlvbnNNb2RpZmllclJFIiwiaW52b2tlciIsIl92dHMiLCJhdHRhY2hlZCIsIkRhdGUiLCJub3ciLCJvcmlnaW5hbFN0b3AiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJfc3RvcHBlZCIsImluaXRpYWxWYWx1ZSIsImdldE5vdyIsImNhY2hlZE5vdyIsImRlZmluZUN1c3RvbUVsZW1lbnQiLCJoeWRyYXRlMiIsIkNvbXAiLCJCYXNlQ2xhc3MiLCJhY3RpdmVQaW5pYSIsInNldEFjdGl2ZVBpbmlhIiwicGluaWEiLCJwaW5pYVN5bWJvbCIsInRvSlNPTiIsIk11dGF0aW9uVHlwZSIsIm5vb3AiLCJhZGRTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb25zIiwiY2FsbGJhY2siLCJvbkNsZWFudXAiLCJyZW1vdmVTdWJzY3JpcHRpb24iLCJpZHgiLCJhcnJvd19kb3duX2RlZmF1bHQiLCJfZGVmaW5lQ29tcG9uZW50NiIsIl9fcHJvcHMiLCJfY2FjaGUiLCJfb3BlbkJsb2NrNiIsIl9jcmVhdGVFbGVtZW50QmxvY2s2IiwieG1sbnMiLCJ2aWV3Qm94IiwiX2NyZWF0ZUVsZW1lbnRWTm9kZTYiLCJmaWxsIiwiYXJyb3dfbGVmdF9kZWZhdWx0IiwiX2RlZmluZUNvbXBvbmVudDgiLCJfb3BlbkJsb2NrOCIsIl9jcmVhdGVFbGVtZW50QmxvY2s4IiwiX2NyZWF0ZUVsZW1lbnRWTm9kZTgiLCJhcnJvd19yaWdodF9kZWZhdWx0IiwiX2RlZmluZUNvbXBvbmVudDEwIiwiX29wZW5CbG9jazEwIiwiX2NyZWF0ZUVsZW1lbnRWTm9kZTEwIiwiYXJyb3dfdXBfZGVmYXVsdCIsIl9kZWZpbmVDb21wb25lbnQxMiIsIl9vcGVuQmxvY2sxMiIsIl9jcmVhdGVFbGVtZW50QmxvY2sxMiIsIl9jcmVhdGVFbGVtZW50Vk5vZGUxMiIsImNhbGVuZGFyX2RlZmF1bHQiLCJfZGVmaW5lQ29tcG9uZW50MjkiLCJfb3BlbkJsb2NrMjkiLCJjYXJldF9yaWdodF9kZWZhdWx0IiwiX29wZW5CbG9jazM0IiwiX2NyZWF0ZUVsZW1lbnRCbG9jazM0IiwiX29wZW5CbG9jazM1IiwiX2NyZWF0ZUVsZW1lbnRCbG9jazM1IiwiX2NyZWF0ZUVsZW1lbnRWTm9kZTM1IiwiY2hlY2tfZGVmYXVsdCIsIl9kZWZpbmVDb21wb25lbnQ0MyIsIl9vcGVuQmxvY2s0MyIsIl9jcmVhdGVFbGVtZW50QmxvY2s0MyIsIl9jcmVhdGVFbGVtZW50Vk5vZGU0MyIsIl9kZWZpbmVDb21wb25lbnQ0OSIsIl9vcGVuQmxvY2s0OSIsIl9jcmVhdGVFbGVtZW50QmxvY2s0OSIsIl9jcmVhdGVFbGVtZW50Vk5vZGU0OSIsImNpcmNsZV9jbG9zZV9maWxsZWRfZGVmYXVsdCIsIl9vcGVuQmxvY2s1MCIsIl9jcmVhdGVFbGVtZW50QmxvY2s1MCIsIl9kZWZpbmVDb21wb25lbnQ1MSIsIl9vcGVuQmxvY2s1MSIsIl9jcmVhdGVFbGVtZW50QmxvY2s1MSIsIl9jcmVhdGVFbGVtZW50Vk5vZGU1MSIsImNsb2NrX2RlZmF1bHQiLCJfZGVmaW5lQ29tcG9uZW50NTQiLCJfb3BlbkJsb2NrNTQiLCJfY3JlYXRlRWxlbWVudEJsb2NrNTQiLCJfY3JlYXRlRWxlbWVudFZOb2RlNTQiLCJjbG9zZV9kZWZhdWx0IiwiX2RlZmluZUNvbXBvbmVudDU2IiwiX2NyZWF0ZUVsZW1lbnRCbG9jazU2IiwiX2NyZWF0ZUVsZW1lbnRWTm9kZTU2IiwiX2RlZmluZUNvbXBvbmVudDcyIiwiX29wZW5CbG9jazcyIiwiX2NyZWF0ZUVsZW1lbnRCbG9jazcyIiwiX2NyZWF0ZUVsZW1lbnRWTm9kZTcyIiwiX2RlZmluZUNvbXBvbmVudDczIiwiX29wZW5CbG9jazczIiwiX2NyZWF0ZUVsZW1lbnRCbG9jazczIiwiX2NyZWF0ZUVsZW1lbnRWTm9kZTczIiwiX2RlZmluZUNvbXBvbmVudDgwIiwiX29wZW5CbG9jazgwIiwiX2NyZWF0ZUVsZW1lbnRWTm9kZTgwIiwiZG9jdW1lbnRfZGVmYXVsdCIsIl9kZWZpbmVDb21wb25lbnQ5MCIsIl9jcmVhdGVFbGVtZW50QmxvY2s5MCIsIl9jcmVhdGVFbGVtZW50Vk5vZGU5MCIsIl9vcGVuQmxvY2sxMTgiLCJfY3JlYXRlRWxlbWVudFZOb2RlMTE4IiwiaGlkZV9kZWZhdWx0IiwiX2RlZmluZUNvbXBvbmVudDEzMyIsIl9vcGVuQmxvY2sxMzMiLCJfY3JlYXRlRWxlbWVudFZOb2RlMTMzIiwiaW5mb19maWxsZWRfZGVmYXVsdCIsIl9kZWZpbmVDb21wb25lbnQxNDMiLCJfb3BlbkJsb2NrMTQzIiwibG9hZGluZ19kZWZhdWx0IiwiX2RlZmluZUNvbXBvbmVudDE1MCIsIl9vcGVuQmxvY2sxNTAiLCJfY3JlYXRlRWxlbWVudEJsb2NrMTUwIiwiX2NyZWF0ZUVsZW1lbnRWTm9kZTE1MCIsIm1pbnVzX2RlZmF1bHQiLCJfZGVmaW5lQ29tcG9uZW50MTY5IiwiX29wZW5CbG9jazE2OSIsIl9jcmVhdGVFbGVtZW50QmxvY2sxNjkiLCJtb3JlX2ZpbGxlZF9kZWZhdWx0IiwiX2RlZmluZUNvbXBvbmVudDE3NCIsIl9vcGVuQmxvY2sxNzQiLCJfY3JlYXRlRWxlbWVudFZOb2RlMTc0IiwibW9yZV9kZWZhdWx0IiwiX2RlZmluZUNvbXBvbmVudDE3NSIsIl9vcGVuQmxvY2sxNzUiLCJfY3JlYXRlRWxlbWVudEJsb2NrMTc1IiwiX29wZW5CbG9jazE5NSIsIl9jcmVhdGVFbGVtZW50QmxvY2sxOTUiLCJfY3JlYXRlRWxlbWVudFZOb2RlMTk1IiwicGx1c19kZWZhdWx0IiwiX29wZW5CbG9jazIwMSIsIl9jcmVhdGVFbGVtZW50QmxvY2syMDEiLCJxdWVzdGlvbl9maWxsZWRfZGVmYXVsdCIsIl9kZWZpbmVDb21wb25lbnQyMTEiLCJfb3BlbkJsb2NrMjExIiwiX2NyZWF0ZUVsZW1lbnRCbG9jazIxMSIsIl9jcmVhdGVFbGVtZW50Vk5vZGUyMTEiLCJyZWZyZXNoX2xlZnRfZGVmYXVsdCIsIl9jcmVhdGVFbGVtZW50QmxvY2syMTUiLCJfY3JlYXRlRWxlbWVudFZOb2RlMjE1IiwicmVmcmVzaF9yaWdodF9kZWZhdWx0IiwiX2RlZmluZUNvbXBvbmVudDIxNiIsIl9vcGVuQmxvY2syMTYiLCJfY3JlYXRlRWxlbWVudEJsb2NrMjE2IiwiX2NyZWF0ZUVsZW1lbnRWTm9kZTIxNiIsInNjYWxlX3RvX29yaWdpbmFsX2RlZmF1bHQiLCJfZGVmaW5lQ29tcG9uZW50MjIyIiwiX2NyZWF0ZUVsZW1lbnRCbG9jazIyMiIsIl9jcmVhdGVFbGVtZW50Vk5vZGUyMjIiLCJzZWFyY2hfZGVmYXVsdCIsIl9kZWZpbmVDb21wb25lbnQyMjUiLCJfb3BlbkJsb2NrMjI1IiwiX2NyZWF0ZUVsZW1lbnRCbG9jazIyNSIsInNvcnRfZG93bl9kZWZhdWx0IiwiX29wZW5CbG9jazI0MiIsIl9jcmVhdGVFbGVtZW50QmxvY2syNDIiLCJfY3JlYXRlRWxlbWVudFZOb2RlMjQyIiwic29ydF91cF9kZWZhdWx0IiwiX2RlZmluZUNvbXBvbmVudDI0MyIsIl9vcGVuQmxvY2syNDMiLCJfY3JlYXRlRWxlbWVudEJsb2NrMjQzIiwiX2NyZWF0ZUVsZW1lbnRWTm9kZTI0MyIsInN0YXJfZmlsbGVkX2RlZmF1bHQiLCJfZGVmaW5lQ29tcG9uZW50MjQ2IiwiX29wZW5CbG9jazI0NiIsIl9jcmVhdGVFbGVtZW50QmxvY2syNDYiLCJfY3JlYXRlRWxlbWVudFZOb2RlMjQ2Iiwic3Rhcl9kZWZhdWx0IiwiX2RlZmluZUNvbXBvbmVudDI0NyIsIl9vcGVuQmxvY2syNDciLCJfY3JlYXRlRWxlbWVudEJsb2NrMjQ3IiwiX2NyZWF0ZUVsZW1lbnRWTm9kZTI0NyIsInN1Y2Nlc3NfZmlsbGVkX2RlZmF1bHQiLCJfb3BlbkJsb2NrMjQ5IiwiX2NyZWF0ZUVsZW1lbnRCbG9jazI0OSIsInZpZXdfZGVmYXVsdCIsIl9vcGVuQmxvY2syODMiLCJfY3JlYXRlRWxlbWVudFZOb2RlMjgzIiwid2FybmluZ19maWxsZWRfZGVmYXVsdCIsIl9vcGVuQmxvY2syODciLCJfY3JlYXRlRWxlbWVudFZOb2RlMjg3Iiwiem9vbV9pbl9kZWZhdWx0IiwiX29wZW5CbG9jazI5MiIsIl9jcmVhdGVFbGVtZW50Vk5vZGUyOTIiLCJ6b29tX291dF9kZWZhdWx0IiwiX29wZW5CbG9jazI5MyIsIl9jcmVhdGVFbGVtZW50QmxvY2syOTMiLCJfY3JlYXRlRWxlbWVudFZOb2RlMjkzIiwiZXBQcm9wS2V5IiwiZGVmaW5lUHJvcFR5cGUiLCJidWlsZFByb3AiLCJyZXF1aXJlZCIsInZhbGlkYXRvciIsImFsbG93ZWRWYWx1ZXMiLCJ2YWxpZCIsImFsbG93VmFsdWVzVGV4dCIsImVwUHJvcCIsImZyb21QYWlycyIsIm9wdGlvbiIsImljb25Qcm9wVHlwZSIsIkNsb3NlQ29tcG9uZW50cyIsIkNsb3NlIiwiVHlwZUNvbXBvbmVudHMiLCJTdWNjZXNzRmlsbGVkIiwiSW5mb0ZpbGxlZCIsIldhcm5pbmdGaWxsZWQiLCJDaXJjbGVDbG9zZUZpbGxlZCIsIlR5cGVDb21wb25lbnRzTWFwIiwic3VjY2VzcyIsIndhcm5pbmciLCJpbmZvIiwiVmFsaWRhdGVDb21wb25lbnRzTWFwIiwidmFsaWRhdGluZyIsIkxvYWRpbmciLCJDaXJjbGVDaGVjayIsIkNpcmNsZUNsb3NlIiwid2l0aEluc3RhbGwiLCJleHRyYSIsIm1haW4iLCJlbnRyaWVzIiwid2l0aEluc3RhbGxGdW5jdGlvbiIsImNvbXBvc2VSZWZzIiwidGFiIiwic3BhY2UiLCJ1cCIsInJpZ2h0IiwiZG93biIsImJhY2tzcGFjZSIsIm51bXBhZEVudGVyIiwicGFnZVVwIiwicGFnZURvd24iLCJob21lIiwiVVBEQVRFX01PREVMX0VWRU5UIiwiQ0hBTkdFX0VWRU5UIiwiSU5QVVRfRVZFTlQiLCJpc1ZhbGlkQ29tcG9uZW50U2l6ZSIsIlBhdGNoRmxhZ3MiLCJQYXRjaEZsYWdzMiIsImlzVmFsaWRFbGVtZW50Tm9kZSIsInZOb2RlcyIsImZsYXR0ZWRDaGlsZHJlbiIsInVuaXF1ZSIsImNhc3RBcnJheSIsImlzS29yZWFuIiwiTElTVEVORVJfUFJFRklYIiwiZXhjbHVkZUxpc3RlbmVycyIsImV4Y2x1ZGVLZXlzIiwiYWxsRXhjbHVkZUtleXMiLCJERUZBVUxUX0VYQ0xVREVfS0VZUyIsIiRhdHRycyIsInVzZURlcHJlY2F0ZWQiLCJyZXBsYWNlbWVudCIsImNvbmRpdGlvbiIsInVucmVmIiwiaW1tZWRpYXRlIiwidXNlRHJhZ2dhYmxlIiwidGFyZ2V0UmVmIiwiZHJhZ1JlZiIsIm92ZXJmbG93IiwidHJhbnNmb3JtIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJvbk1vdXNlZG93biIsImRvd25YIiwiY2xpZW50WCIsImNsaWVudFkiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0YXJnZXRSZWN0IiwidGFyZ2V0VG9wIiwidGFyZ2V0V2lkdGgiLCJ0YXJnZXRIZWlnaHQiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRXaWR0aCIsImNsaWVudEhlaWdodCIsIm1pbkxlZnQiLCJ0YXJnZXRMZWZ0IiwibWF4VG9wIiwib25Nb3VzZW1vdmUiLCJtb3ZlWSIsImRvd25ZIiwibW92ZVgiLCJtYXhMZWZ0IiwiYWRkVW5pdCIsIm9uTW91c2V1cCIsIndhdGNoRWZmZWN0Iiwib2ZmRHJhZ2dhYmxlIiwiYnVpbGRUcmFuc2xhdG9yIiwicGF0aCIsInRyYW5zbGF0ZSIsImxvY2FsZUNvbnRleHRLZXkiLCJsb2NhbGVPdmVycmlkZXMiLCJsYW5nIiwiRW5nbGlzaCIsIl9iZW0iLCJibG9jayIsImJsb2NrU3VmZml4IiwiZWxlbWVudCIsInVzZUdldERlcml2ZWROYW1lc3BhY2UiLCJuYW1lc3BhY2VPdmVycmlkZXMiLCJkZWZhdWx0TmFtZXNwYWNlIiwiZGVyaXZlZE5hbWVzcGFjZSIsInVzZU5hbWVzcGFjZSIsImJlIiwiZW0iLCJjc3NWYXIiLCJvYmplY3QiLCJjc3NWYXJOYW1lIiwiY3NzVmFyQmxvY2siLCJjc3NWYXJCbG9ja05hbWUiLCJ1c2VMb2Nrc2NyZWVuIiwidGhyb3dFcnJvciIsIm5zIiwiaXNDbGllbnQiLCJoYXNDbGFzcyIsInNjcm9sbEJhcldpZHRoIiwid2l0aG91dEhpZGRlbkNsYXNzIiwiY2xlYW51cCIsImJvZHlXaWR0aCIsImhpZGRlbkNscyIsImdldFNjcm9sbEJhcldpZHRoIiwic2Nyb2xsSGVpZ2h0IiwiYm9keU92ZXJmbG93WSIsImdldFN0eWxlIiwiYm9keUhhc092ZXJmbG93IiwiYWRkQ2xhc3MiLCJvblNjb3BlRGlzcG9zZSIsIl9wcm9wIiwiX2V2ZW50IiwiY3JlYXRlTW9kZWxUb2dnbGVDb21wb3NhYmxlIiwidXBkYXRlRXZlbnRLZXkiLCJ1cGRhdGVFdmVudEtleVJhdyIsInVzZU1vZGVsVG9nZ2xlIiwiaW5kaWNhdG9yIiwidG9nZ2xlUmVhc29uIiwic2hvdWxkSGlkZVdoZW5Sb3V0ZUNoYW5nZXMiLCJzaG91bGRQcm9jZWVkIiwib25TaG93Iiwib25IaWRlIiwiaGFzVXBkYXRlSGFuZGxlciIsImRvU2hvdyIsImRvSGlkZSIsInNob3ciLCJpc01vZGVsQmluZGluZ0Fic2VudCIsInNob3VsZEVtaXQiLCJoaWRlIiwiaXNCb29sZWFuIiwib25DaGFuZ2UiLCIkcm91dGUiLCJ0b2dnbGUiLCJ1c2VNb2RlbFRvZ2dsZVByb3BzIiwidXNlTW9kZWxUb2dnbGVFbWl0cyIsInVzZU1vZGVsVG9nZ2xlRW1pdHMyIiwidXNlUHJvcCIsInZtIiwiRSIsIlIiLCJQIiwibWUiLCJKIiwiamUiLCJLIiwiWWUiLCJEZSIsIkciLCJVIiwiRWUiLCJvdCIsIm5vZGVOYW1lIiwiSCIsIm93bmVyRG9jdW1lbnQiLCJkZWZhdWx0VmlldyIsIlEiLCJFbGVtZW50IiwiUGUiLCJTaGFkb3dSb290IiwiQWUiLCJwaGFzZSIsImF0dHJpYnV0ZXMiLCJlbGVtZW50cyIsInJlbW92ZUF0dHJpYnV0ZSIsInBvcHBlciIsInN0cmF0ZWd5IiwibWFyZ2luIiwiYXJyb3ciLCJyZWZlcmVuY2UiLCJCIiwicmVxdWlyZXMiLCJYIiwidmUiLCJyb3VuZCIsIm9mZnNldFdpZHRoIiwiYm90dG9tIiwieCIsInkiLCJlZSIsImFicyIsIm9mZnNldExlZnQiLCJvZmZzZXRUb3AiLCJnZXRSb290Tm9kZSIsImlzU2FtZU5vZGUiLCJXdCIsIkkiLCJnZSIsImFzc2lnbmVkU2xvdCIsImhvc3QiLCJhdCIsIk4iLCJvZmZzZXRQYXJlbnQiLCJDIiwicGVyc3BlY3RpdmUiLCJjb250YWluIiwid2lsbENoYW5nZSIsIk1vdXNld2hlZWwiLCJiaW5kaW5nIiwiYXBwbHkiLCJiYXNpY1RpbWVTcGlubmVyUHJvcHMiLCJidWlsZFByb3BzIiwic3Bpbm5lckRhdGUiLCJzaG93U2Vjb25kcyIsImFycm93Q29udHJvbCIsImFtUG1Nb2RlIiwiZGlzYWJsZWRUaW1lTGlzdHNQcm9wcyIsIl9ob2lzdGVkXzEiLCJfc2ZjX21haW4iLCJzaWxlbnQiLCJsb2dMZXZlbCIsInByb3QiLCJpc0ludGVnZXIiLCJfdnVlVHlwZXNfbmFtZSIsImRlZmluZVByb3BlcnRpZXMiLCJ3cml0YWJsZSIsImlzUmVxdWlyZWQiLCJPIiwiVCIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJfX29yaWdpbmFsIiwiJCIsIlR5cGVFcnJvciIsIkYiLCJldmVyeSIsIlkiLCJfdnVlVHlwZXNfaXNMb29zZSIsImFueSIsImRlZmF1bHRzIiwiYm9vbCIsInN0cmluZyIsIm51bWJlciIsImFycmF5IiwibnVsbGFibGUiLCJNIiwic2Vuc2libGVEZWZhdWx0cyIsIkQiLCJvbmVPZiIsIkwiLCJpbnN0YW5jZU9mIiwib25lT2ZUeXBlIiwiYXJyYXlPZiIsInNoYXBlIiwidXRpbHMiLCJ2YWxpZGF0ZSIsImZ1bmMiLCJpbnRlZ2VyIiwibmV3UHJvcFR5cGVzIiwicHJvcFR5cGVzIiwidXNlRGVzaWduIiwidmFyaWFibGVzIiwic2Nzc1ZhcmlhYmxlcyIsImdldFByZWZpeENscyIsImVudW1lcmFibGVPbmx5Iiwib2QiLCJsYyIsImNsZWFyIiwiViIsIlciLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsInJlbW92ZURpZ2VzdEhlYWRlciIsIktKVVIiLCJtb2RlIiwiQ1RSR2xhZG1hbiIsIklsIiwicFMiLCJuQSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi92aXJ0dWFsOnN2Zy1pY29ucy1yZWdpc3RlciIsIi4uLy4uL25vZGVfbW9kdWxlcy9AaWNvbmlmeS9pY29uaWZ5L2Rpc3QvaWNvbmlmeS5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQGludGxpZnkvc2hhcmVkL2Rpc3Qvc2hhcmVkLmVzbS1icm93c2VyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0BpbnRsaWZ5L2NvcmUtYmFzZS9kaXN0L2NvcmUtYmFzZS5lc20tYnJvd3Nlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3NoYXJlZC9kaXN0L3NoYXJlZC5lc20tYnVuZGxlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AdnVlL3JlYWN0aXZpdHkvZGlzdC9yZWFjdGl2aXR5LmVzbS1idW5kbGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvcnVudGltZS1jb3JlL2Rpc3QvcnVudGltZS1jb3JlLmVzbS1idW5kbGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWUvcnVudGltZS1kb20vZGlzdC9ydW50aW1lLWRvbS5lc20tYnVuZGxlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy92dWUtaTE4bi9kaXN0L3Z1ZS1pMThuLmNqcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9waW5pYS9kaXN0L3BpbmlhLm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AZWxlbWVudC1wbHVzL2ljb25zLXZ1ZS9kaXN0L2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtcGx1cy9lcy91dGlscy92dWUvcHJvcHMvcnVudGltZS5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZWxlbWVudC1wbHVzL2VzL3V0aWxzL3Z1ZS9pY29uLm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9lbGVtZW50LXBsdXMvZXMvdXRpbHMvdnVlL2luc3RhbGwubWpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtcGx1cy9lcy91dGlscy92dWUvcmVmcy5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZWxlbWVudC1wbHVzL2VzL2NvbnN0YW50cy9hcmlhLm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9lbGVtZW50LXBsdXMvZXMvY29uc3RhbnRzL2V2ZW50Lm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9lbGVtZW50LXBsdXMvZXMvY29uc3RhbnRzL3NpemUubWpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtcGx1cy9lcy91dGlscy92dWUvdmFsaWRhdG9yLm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9lbGVtZW50LXBsdXMvZXMvdXRpbHMvdnVlL3Zub2RlLm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9lbGVtZW50LXBsdXMvZXMvdXRpbHMvYXJyYXlzLm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9lbGVtZW50LXBsdXMvZXMvdXRpbHMvaTE4bi5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZWxlbWVudC1wbHVzL2VzL3V0aWxzL3R5cGVzY3JpcHQubWpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtcGx1cy9lcy9ob29rcy91c2UtYXR0cnMvaW5kZXgubWpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtcGx1cy9lcy9ob29rcy91c2UtZGVwcmVjYXRlZC9pbmRleC5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZWxlbWVudC1wbHVzL2VzL2hvb2tzL3VzZS1kcmFnZ2FibGUvaW5kZXgubWpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtcGx1cy9lcy9ob29rcy91c2UtbG9jYWxlL2luZGV4Lm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9lbGVtZW50LXBsdXMvZXMvaG9va3MvdXNlLW5hbWVzcGFjZS9pbmRleC5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZWxlbWVudC1wbHVzL2VzL2hvb2tzL3VzZS1sb2Nrc2NyZWVuL2luZGV4Lm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9lbGVtZW50LXBsdXMvZXMvaG9va3MvdXNlLW1vZGVsLXRvZ2dsZS9pbmRleC5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZWxlbWVudC1wbHVzL2VzL2hvb2tzL3VzZS1wcm9wL2luZGV4Lm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9kaXN0L2luZGV4Lm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9lbGVtZW50LXBsdXMvZXMvZGlyZWN0aXZlcy9tb3VzZXdoZWVsL2luZGV4Lm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9lbGVtZW50LXBsdXMvZXMvY29tcG9uZW50cy90aW1lLXBpY2tlci9zcmMvcHJvcHMvYmFzaWMtdGltZS1zcGlubmVyLm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9lbGVtZW50LXBsdXMvZXMvY29tcG9uZW50cy90aW1lLXBpY2tlci9zcmMvdGltZS1waWNrZXItY29tL2Jhc2ljLXRpbWUtc3Bpbm5lci5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaXMtcGxhaW4tb2JqZWN0L2Rpc3QvaXMtcGxhaW4tb2JqZWN0Lm1qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy92dWUtdHlwZXMvZGlzdC92dWUtdHlwZXMubW9kZXJuLmpzIiwiLi4vLi4vc3JjL3V0aWxzL3Byb3BUeXBlcy50cyIsIi4uLy4uL3NyYy9ob29rcy93ZWIvdXNlRGVzaWduLnRzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bmb3JtLWNyZWF0ZS9lbGVtZW50LXVpL2Rpc3QvZm9ybS1jcmVhdGUuZXNtLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bmb3JtLWNyZWF0ZS9kZXNpZ25lci9kaXN0L2luZGV4LmVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2pzZW5jcnlwdC9saWIvbGliL2pzYm4vcnNhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2pzZW5jcnlwdC9saWIvbGliL2pzcnNhc2lnbi9hc24xLTEuMC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvbW9kZS1jdHItZ2xhZG1hbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvcmlwZW1kMTYwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0B3YW5nZWRpdG9yL2VkaXRvci9kaXN0L2luZGV4LmVzbS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kb21wdXJpZnkvZGlzdC9wdXJpZnkuZXMubWpzIl0sInNvdXJjZXNDb250ZW50IjpbIlxuICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgZnVuY3Rpb24gbG9hZFN2ZygpIHtcbiAgICAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICAgICB2YXIgc3ZnRG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19fc3ZnX19pY29uc19fZG9tX18nKTtcbiAgICAgICAgICAgaWYoIXN2Z0RvbSkge1xuICAgICAgICAgICAgIHN2Z0RvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnc3ZnJyk7XG4gICAgICAgICAgICAgc3ZnRG9tLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgICAgICBzdmdEb20uc3R5bGUud2lkdGggPSAnMCc7XG4gICAgICAgICAgICAgc3ZnRG9tLnN0eWxlLmhlaWdodCA9ICcwJztcbiAgICAgICAgICAgICBzdmdEb20uaWQgPSAnX19zdmdfX2ljb25zX19kb21fXyc7XG4gICAgICAgICAgICAgc3ZnRG9tLnNldEF0dHJpYnV0ZSgneG1sbnMnLCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycpO1xuICAgICAgICAgICAgIHN2Z0RvbS5zZXRBdHRyaWJ1dGUoJ3htbG5zOmxpbmsnLCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyk7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgc3ZnRG9tLmlubmVySFRNTCA9IFwiPHN5bWJvbCAgdmlld0JveD1cXFwiMCAwIDgwMCA4MDBcXFwiIGlkPVxcXCJpY29uLTQwM1xcXCI+PHN0eWxlPiNpY29uLTQwMyAuc3QyNntmaWxsOiNmZmZ9PC9zdHlsZT48ZyBpZD1cXFwiaWNvbi00MDNf5Zu+5bGCXzExXFxcIj48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDAzX1NWR0lEXzFfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjQwMS43NzNcXFwiIHkxPVxcXCIxNjIuMTA0XFxcIiB4Mj1cXFwiNDAxLjc3M1xcXCIgeTI9XFxcIjcxNy41OTZcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0Y0RjJGQlxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNFMUVFRjVcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNNDg1LjAzIDIwMy40NmMtMzguMzcgMzAuMjktMTIwLjc0IDMzLjgxLTE4MS4xNy0yLjIycy0xNzItMzEuMzgtMjAyLjIyIDM0Ljg3IDM3LjE5IDEzMS4zMyAxMi43OCAxNzguOThTOC42NiA1MzAuMTMgNjQuNDUgNjExLjQ5czEyNi42IDYwLjYyIDE2OS4yMiA1Mi40NWM4NC4xNy0xNi4xMyAxODkuNzkgMTE1LjY3IDMwOC42MiAxNi4xMyA2OC40Ny01Ny4zNSAxNzAuNDQgNDIuMDkgMjEwLjE3LTgxLjM2IDMyLjc4LTEwMS44Ni04NS42Ny0xMzkuNS00OS45Ny0yMDguMDMgMzcuOTYtNzIuODggMzAuNjctMTU5LjI0LTEwLjQ2LTIwMS4wNi0zOC4zMS0zOC45Ni0xNDAuNzUtMzguNDYtMjA3IDEzLjg0elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwM19TVkdJRF8xXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwM19TVkdJRF8yX1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCI0OTQuNzgyXFxcIiB5MT1cXFwiNTk5LjYwNFxcXCIgeDI9XFxcIjQ5NC43ODJcXFwiIHkyPVxcXCI0MjguNjU5XFxcIj48c3RvcCBvZmZzZXQ9XFxcIi4zNFxcXCIgc3RvcC1jb2xvcj1cXFwiI0IwQjlFMVxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIi44NjZcXFwiIHN0b3AtY29sb3I9XFxcIiNFQUYwRjhcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNNDA2LjY1IDQyOC42NmgyMTYuNDRsLTIyLjUzIDQ5LjAzczU5LjE5IDU3Ljg3LTE0LjEzIDEyMS45MWMtMTM0LjI4LTQ0LjE3LTIyMS43NC0zNy4xLTIxOS45OC0zOC44NyAxLjc3LTEuNzYgNDAuMi0xMzIuMDcgNDAuMi0xMzIuMDd6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDAzX1NWR0lEXzJfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDAzX1NWR0lEXzNfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjExNi44NTVcXFwiIHkxPVxcXCI1NDIuNDlcXFwiIHgyPVxcXCIxMTYuODU1XFxcIiB5Mj1cXFwiNDA1LjMxNlxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuMjI3XFxcIiBzdG9wLWNvbG9yPVxcXCIjQjdBQ0UwXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjc4OVxcXCIgc3RvcC1jb2xvcj1cXFwiI0U4RTdGQVxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0xMTcuNjQgNDA1LjU2cy0uMjItLjU3LS41Mi4wNGMtMi43IDUuNDktMjcuMTUgNjQuOTYtMjkuMDkgMTEwLjg2IDAgMC00LjA4IDI2LjM3IDMwLjExIDI2LjAyIDI4LjU0LS4yOSAyNy43OC0yNC42IDI3LjY4LTMyLjc5LS4zOS0zMy4yMi0yOC4xOC0xMDQuMTMtMjguMTgtMTA0LjEzelxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwM19TVkdJRF8zXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwM19TVkdJRF80X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIxMTYuODU3XFxcIiB5MT1cXFwiNDIwLjU0N1xcXCIgeDI9XFxcIjExNi44NTdcXFwiIHkyPVxcXCI1NzEuNjgxXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNFQ0YxRkJcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIuODE4XFxcIiBzdG9wLWNvbG9yPVxcXCIjQUZCMEU3XFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTExNi44NiA1NzEuNjhjLS41NSAwLTEtLjQ1LTEtMVY0MjEuNTVjMC0uNTUuNDUtMSAxLTFzMSAuNDUgMSAxdjE0OS4xM2MwIC41NS0uNDUgMS0xIDF6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDAzX1NWR0lEXzRfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDAzX1NWR0lEXzVfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjYxNy45ODRcXFwiIHkxPVxcXCI0NTAuOTY4XFxcIiB4Mj1cXFwiNjE3Ljk4NFxcXCIgeTI9XFxcIjM2Mi42NDRcXFwiPjxzdG9wIG9mZnNldD1cXFwiLjIyN1xcXCIgc3RvcC1jb2xvcj1cXFwiI0NDRDRGNFxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIi43ODlcXFwiIHN0b3AtY29sb3I9XFxcIiNFQ0YxRkJcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNNjE4LjQ5IDM2Mi44cy0uMTQtLjM3LS4zMy4wM2MtMS43NCAzLjUzLTE3LjQ4IDQxLjgzLTE4LjczIDcxLjM4IDAgMC0yLjYzIDE2Ljk4IDE5LjM5IDE2Ljc2IDE4LjM4LS4xOCAxNy44OS0xNS44NCAxNy44Mi0yMS4xMS0uMjUtMjEuNC0xOC4xNS02Ny4wNi0xOC4xNS02Ny4wNnpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDNfU1ZHSURfNV8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDNfU1ZHSURfNl9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNjE3Ljk4NVxcXCIgeTE9XFxcIjM3Mi40NTFcXFwiIHgyPVxcXCI2MTcuOTg1XFxcIiB5Mj1cXFwiNDY5Ljc2NFxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjRUNGMUZCXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0E2QThFMlxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk02MTcuOTkgNDY5Ljc2Yy0uMzYgMC0uNjQtLjI5LS42NC0uNjRWMzczLjFjMC0uMzYuMjktLjY0LjY0LS42NHMuNjQuMjkuNjQuNjR2OTYuMDJjMCAuMzYtLjI5LjY0LS42NC42NHpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDNfU1ZHSURfNl8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDNfU1ZHSURfN19cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNDYzLjkwMlxcXCIgeTE9XFxcIjg4LjM2MlxcXCIgeDI9XFxcIjQyOS4xNDhcXFwiIHkyPVxcXCIxNDguNTU4XFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNGRkRCODBcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjRkZCQjI0XFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PGNpcmNsZSBjeD1cXFwiNDQ2LjUyXFxcIiBjeT1cXFwiMTE4LjQ2XFxcIiByPVxcXCIzNC43NVxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwM19TVkdJRF83XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwM19TVkdJRF84X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCI0MjEuNTY1XFxcIiB5MT1cXFwiMTE4LjgyOFxcXCIgeDI9XFxcIjQyMS41NjVcXFwiIHkyPVxcXCIxNzYuMjgyXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNGOUZBRkVcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjRTVFREY3XFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTQ2Ni4zIDEzNy40MWgtMzQuNTdjLTIuMjMtMTAuNjEtMTEuNjUtMTguNTgtMjIuOTMtMTguNThzLTIwLjY5IDcuOTctMjIuOTMgMTguNThoLTkuMDVjLTEwLjczIDAtMTkuNDQgOC43LTE5LjQ0IDE5LjQ0IDAgMTAuNzMgOC43IDE5LjQ0IDE5LjQ0IDE5LjQ0aDg5LjQ3YzEwLjczIDAgMTkuNDQtOC43IDE5LjQ0LTE5LjQ0LjAxLTEwLjc0LTguNjktMTkuNDQtMTkuNDMtMTkuNDR6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDAzX1NWR0lEXzhfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDAzX1NWR0lEXzlfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjY4OC41ODZcXFwiIHkxPVxcXCI1NDAuMjA4XFxcIiB4Mj1cXFwiNjg4LjU4NlxcXCIgeTI9XFxcIjUxMi4zOFxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuMjI3XFxcIiBzdG9wLWNvbG9yPVxcXCIjQUZCMEU3XFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0VDRjFGQlxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxjaXJjbGUgY3g9XFxcIjY4OC41OVxcXCIgY3k9XFxcIjUyNi4yOVxcXCIgcj1cXFwiMTMuOTFcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDNfU1ZHSURfOV8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDNfU1ZHSURfMTBfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjY4OC42MzVcXFwiIHkxPVxcXCI1MTUuODk0XFxcIiB4Mj1cXFwiNjg4LjYzNVxcXCIgeTI9XFxcIjU2MC42OVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjRERFMUY2XFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjgxOFxcXCIgc3RvcC1jb2xvcj1cXFwiI0E2QThFMlxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk02ODguNjQgNTYwLjY5Yy0uMjQgMC0uNDMtLjE5LS40My0uNDN2LTQzLjk0YzAtLjI0LjE5LS40My40My0uNDNzLjQzLjE5LjQzLjQzdjQzLjk0YS40NC40NCAwIDAgMS0uNDMuNDN6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDAzX1NWR0lEXzEwXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwM19TVkdJRF8xMV9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMjYyMi4wNDVcXFwiIHkxPVxcXCIyNjYuNDgxXFxcIiB4Mj1cXFwiMjQ1MS4wNThcXFwiIHkyPVxcXCI1NjIuNjRcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoLTEgMCAwIDEgMjk0MS4zNDYgMClcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0M4Q0JGMlxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNBRkIwRTdcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNMjQ4LjgyIDM5My45OWMwLTI0LjUyLS4wMy00OS4wMy4wMS03My41NC4wMi0xNC4zNyA0LjI0LTE4LjM2IDE3Ljk3LTIwLjUzIDQxLjg3LTYuNjEgODIuMDMtMTguNzIgMTE3LjkxLTQyLjI5IDEwLjM4LTYuODIgMTguMy03LjU5IDI5LjA2LS40NyAzNC44NSAyMy4wNiA3My4yNiAzNy4xMSAxMTQuNTUgNDIuOCAxMy4xMiAxLjgxIDE2Ljg0IDUuODggMTYuODUgMTkuMjUuMDQgNDUuNzItLjQgOTEuNDQuMTggMTM3LjE1LjM0IDI2Ljc3LTguMTcgNDkuOTktMjQuMDIgNzAuNzMtMzEuNDYgNDEuMTctNzQuODggNjMuNzYtMTIyLjIxIDgwLjAzLTIuNS44Ni01LjgzLjY3LTguMzYtLjIzLTM4LjQ3LTEzLjc0LTc0LjU4LTMxLjg0LTEwNC4xNS02MS4wOS0yMi45Ny0yMi43My0zNy44NC00OS41Ni0zNy43OS04My4yMi4wMy0yMi44Ny4wMS00NS43MyAwLTY4LjU5elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwM19TVkdJRF8xMV8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDNfU1ZHSURfMTJfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjI2MjUuMjVcXFwiIHkxPVxcXCIyNzkuOTQ0XFxcIiB4Mj1cXFwiMjQ2Mi43NDlcXFwiIHkyPVxcXCI1NjEuNDAzXFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KC0xIDAgMCAxIDI5NDEuMzQ2IDApXFxcIj48c3RvcCBvZmZzZXQ9XFxcIi4xMTZcXFwiIHN0b3AtY29sb3I9XFxcIiNERUU0RkZcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIuODQ3XFxcIiBzdG9wLWNvbG9yPVxcXCIjQkFDQkVFXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTI0Ny45NCA0MDEuNDRjMC0yMy4yMS0uMDMtNDYuNDIuMDEtNjkuNjMuMDItMTMuNjEgNC4wNi0xNy4zOCAxNy4yMy0xOS40MyA0MC4xNS02LjI2IDc4LjY3LTE3LjcyIDExMy4wNy00MC4wNCA5Ljk1LTYuNDYgMTcuNTUtNy4xOCAyNy44Ni0uNDQgMzMuNDIgMjEuODMgNzAuMjUgMzUuMTQgMTA5Ljg0IDQwLjUyIDEyLjU4IDEuNzEgMTYuMTQgNS41NiAxNi4xNSAxOC4yMi4wMyA0My4yOC0uMzggODYuNTcuMTggMTI5Ljg0LjMzIDI1LjM0LTcuODMgNDcuMzMtMjMuMDMgNjYuOTYtMzAuMTcgMzguOTgtNzEuODEgNjAuMzYtMTE3LjE5IDc1Ljc3LTIuNC44MS01LjU5LjY0LTguMDEtLjIyLTM2Ljg5LTEzLjAxLTcxLjUyLTMwLjE0LTk5Ljg3LTU3Ljg0LTIyLjAzLTIxLjUyLTM2LjI4LTQ2LjkxLTM2LjIzLTc4Ljc4LjAyLTIxLjY1LS4wMS00My4yOS0uMDEtNjQuOTN6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDAzX1NWR0lEXzEyXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwM19TVkdJRF8xM19cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMzYxLjQyMVxcXCIgeTE9XFxcIjM0Ni40NzdcXFwiIHgyPVxcXCI0NDkuNTEzXFxcIiB5Mj1cXFwiNDk5LjA1N1xcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjQzhDQkYyXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0FGQjBFN1xcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk00MTEuNTkgNDM1Ljc1YzIzLjE4LTUuNjEgNDAuNDEtMjYuMTEgNDAuNDEtNTAuNDkgMC0yOC42OC0yMy44NS01Mi4wMS01My4xNy01Mi4wMXMtNTMuMTcgMjMuMzMtNTMuMTcgNTIuMDFjMCAyNC4zOCAxNy4yNCA0NC44OCA0MC40MSA1MC40OXY4NS4yaDI1LjUydi0zNi4zOGgzMi42N3YtMjQuOTZoLTMyLjY3di0yMy44NnptLTQwLjQxLTUwLjQ5YzAtMTQuOTEgMTIuNDEtMjcuMDUgMjcuNjUtMjcuMDVzMjcuNjUgMTIuMTQgMjcuNjUgMjcuMDUtMTIuNDEgMjcuMDUtMjcuNjUgMjcuMDUtMjcuNjUtMTIuMTQtMjcuNjUtMjcuMDV6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDAzX1NWR0lEXzEzXylcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MjZcXFwiIGQ9XFxcIk00MDcuNjcgNDM5LjAzYzIxLjgtNS4zOSAzOC4wMS0yNS4xIDM4LjAxLTQ4LjU0IDAtMjcuNTgtMjIuNDMtNTAuMDEtNTAuMDEtNTAuMDFzLTUwLjAxIDIyLjQzLTUwLjAxIDUwLjAxYzAgMjMuNDQgMTYuMjEgNDMuMTUgMzguMDEgNDguNTR2ODEuOTJoMjR2LTM0Ljk4aDMwLjczdi0yNGgtMzAuNzN2LTIyLjk0em0tMzguMDEtNDguNTVjMC0xNC4zNCAxMS42Ny0yNi4wMSAyNi4wMS0yNi4wMXMyNi4wMSAxMS42NyAyNi4wMSAyNi4wMS0xMS42NyAyNi4wMS0yNi4wMSAyNi4wMS0yNi4wMS0xMS42Ny0yNi4wMS0yNi4wMXpcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwM19TVkdJRF8xNF9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNDg0LjgzNlxcXCIgeTE9XFxcIjQ3NS42NzRcXFwiIHgyPVxcXCI1NjUuNzU0XFxcIiB5Mj1cXFwiNjE1LjgyOFxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjQzhDQkYyXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0FGQjBFN1xcXCIgLz48L2xpbmVhckdyYWRpZW50PjxjaXJjbGUgY3g9XFxcIjUyNS4zXFxcIiBjeT1cXFwiNTQ1Ljc1XFxcIiByPVxcXCI4MC45XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDAzX1NWR0lEXzE0XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwM19TVkdJRF8xNV9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNDgyLjc4N1xcXCIgeTE9XFxcIjQ4My4zMjNcXFwiIHgyPVxcXCI1NTkuNjA1XFxcIiB5Mj1cXFwiNjE2LjM3NlxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuMTE2XFxcIiBzdG9wLWNvbG9yPVxcXCIjREVFNEZGXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjg0N1xcXCIgc3RvcC1jb2xvcj1cXFwiI0M2RDVGNFxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxjaXJjbGUgY3g9XFxcIjUyMS4yXFxcIiBjeT1cXFwiNTQ5Ljg1XFxcIiByPVxcXCI3Ni44MVxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwM19TVkdJRF8xNV8pXFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDI2XFxcIiBkPVxcXCJtNTM4LjUgNTQ3LjYyIDIzLjAxLTIzLjAxYzQuNDQtNC40NCA0LjQ0LTExLjYzIDAtMTYuMDYtNC40NC00LjQ0LTExLjYzLTQuNDQtMTYuMDYgMGwtMjMuMDEgMjMuMDEtMjMuMDEtMjMuMDFjLTQuNDQtNC40NC0xMS42My00LjQ0LTE2LjA2IDAtNC40NCA0LjQ0LTQuNDQgMTEuNjMgMCAxNi4wNmwyMy4wMSAyMy4wMS0yMy4wMSAyMy4wMWMtNC40NCA0LjQ0LTQuNDQgMTEuNjMgMCAxNi4wNiAyLjIyIDIuMjIgNS4xMyAzLjMzIDguMDMgMy4zMyAyLjkxIDAgNS44MS0xLjExIDguMDMtMy4zM2wyMy4wMS0yMy4wMSAyMy4wMSAyMy4wMWMyLjIyIDIuMjIgNS4xMyAzLjMzIDguMDMgMy4zM3M1LjgxLTEuMTEgOC4wMy0zLjMzYzQuNDQtNC40NCA0LjQ0LTExLjYzIDAtMTYuMDZsLTIzLjAxLTIzLjAxelxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDAzX1NWR0lEXzE2X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIyMzIuNTY5XFxcIiB5MT1cXFwiNTU4LjcwOVxcXCIgeDI9XFxcIjIzMi41NjlcXFwiIHkyPVxcXCI0ODQuMTkxXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNDM0Q1RkRcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjMUE5MEZDXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTIyNC44OCA0ODQuNTRzLTE4LjA4LTIuNS0yMy45NSA1LjgxLTguMDIgMjkuNTgtOC4wMiAyOS41OGwxMy42MS0uNzItMS4xNSAyNC43OCAyNS4xMSAxNC43MiAzNS43Ny0xOS4yNC01LjQ0LTIyLjQ1IDExLjQzLTIuOThzLTMuNC0zMi41OC0xOS4zMS0yNy43N2MtOC4xNy44Ny0xMC43NC43My0xMC43NC43M3MtMi4xNSA2Ljg1LTkuNTMgNi4yN2MtNy4zOC0uNTktNy43OC04LjczLTcuNzgtOC43M3pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDNfU1ZHSURfMTZfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDAzX1NWR0lEXzE3X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIyMzMuNjAyXFxcIiB5MT1cXFwiNDcxLjQ4M1xcXCIgeDI9XFxcIjIzMy42MDJcXFwiIHkyPVxcXCI0OTUuMDg5XFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNGNEFFOThcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjRkFEMUJCXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwibTIyNi42OSA0NzQuMy0zLjc2IDE2Ljc2Yy0uMTguNzkuMjMgMS41OS45OCAxLjg5IDEuOTQuNzkgNS44MyAyLjEzIDkuODIgMi4xMyA0LjE1IDAgOC4wNi0yLjI3IDkuODYtMy40OC42Mi0uNDIuODgtMS4xOS42NC0xLjlsLTUuNzUtMTcuMDlhMS42NDMgMS42NDMgMCAwIDAtMS44Ni0xLjFsLTguNjEgMS41M2MtLjY1LjExLTEuMTguNjEtMS4zMiAxLjI2elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwM19TVkdJRF8xN18pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDNfU1ZHSURfMThfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIi04MTYuMDY4XFxcIiB5MT1cXFwiOTIwLjg1NFxcXCIgeDI9XFxcIi04MDQuNTI5XFxcIiB5Mj1cXFwiODM5LjYxMlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInJvdGF0ZSgtOC4wODIgLTI3OTUuMDE1IC02NTA1LjcxKVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjQzNENUZEXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzFBOTBGQ1xcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0yMDQuMjQgNDg3LjQ0YzUuMjYtMS43NSAxMi40LS41OCAxMi42OSAxMS4yMnMtMTEuMjggMzAuNjItNy4xMyAzNy4xNmM0LjIgNi42MyAxMy4xNyAxNi4wNSAxOC44OSAyMS40MS0xLjMzIDYuMy00LjkxIDExLjYxLTQuOTEgMTEuNjFzLTIxLjA1LTkuNzEtMzAuMjEtMTkuNDRjLTkuMTctOS43My00LjU0LTMyLjAzLS4zLTQ3LjkgMy4xOS0xMS45NSAxMC45Ny0xNC4wNiAxMC45Ny0xNC4wNnpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDNfU1ZHSURfMThfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDAzX1NWR0lEXzE5X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCItNjU3NS44OThcXFwiIHkxPVxcXCIxMDIuODIzXFxcIiB4Mj1cXFwiLTY1NjQuMzU5XFxcIiB5Mj1cXFwiMjEuNTgxXFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwic2NhbGUoLTEgMSkgcm90YXRlKC04LjA4MiAtMTE4LjEwMyAtNDQzOTYuMjczKVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjQzNENUZEXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzFBOTBGQ1xcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0yNTkuMzkgNDg3LjQ0Yy01LjI2LTEuNzUtMTIuNC0uNTgtMTIuNjkgMTEuMjJzMTEuMjggMzAuNjIgNy4xMyAzNy4xNmMtNC4yIDYuNjMtMTMuMTcgMTYuMDUtMTguODkgMjEuNDEgMS4zMyA2LjMgNC45MSAxMS42MSA0LjkxIDExLjYxczIxLjA1LTkuNzEgMzAuMjEtMTkuNDRjOS4xNy05LjczIDQuNTQtMzIuMDMuMy00Ny45LTMuMTktMTEuOTUtMTAuOTctMTQuMDYtMTAuOTctMTQuMDZ6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDAzX1NWR0lEXzE5XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwM19TVkdJRF8yMF9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMjMyLjU2OVxcXCIgeTE9XFxcIjUzMS43OThcXFwiIHgyPVxcXCIyMzIuNTY5XFxcIiB5Mj1cXFwiNTc5LjE1MlxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjMjc1Qzg5XFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzAxM0Y3Q1xcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0yMDYuNzkgNTc5LjE1aDUxLjFjMi4zMSAwIDQuMzgtMS43NSA1LjE5LTQuNGwxMC4zLTMzLjg5YzEuMzQtNC40LTEuMzMtOS4wNy01LjE5LTkuMDdoLTcxLjIzYy0zLjgyIDAtNi40OCA0LjYtNS4yMSA4Ljk4bDkuODQgMzMuODljLjc3IDIuNjkgMi44NiA0LjQ5IDUuMiA0LjQ5elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwM19TVkdJRF8yMF8pXFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDI2XFxcIiBkPVxcXCJNMjA0Ljc1IDU5NC43NHMtLjc5LTEuNzQtMS40LTEuOTNjLS42MS0uMTktOS4zNS0uNTQtMTIuNTMtMS4zNi0zLjE5LS44My0xMi4zOC0yLjE0LTE2LjMyIDEuNTktMy40MyAzLjI1LTQuNTYgMTAuODQuNjYgMTUuMiAxLjk2IDEuNyAzLjg5IDIuMiAxMS4xNCAxLjg2IDcuMjYtLjM0IDE3Ljc4LS4yNiAyMC4wOS0zLjYzLS4wNy01LjU1LTEuNjQtMTEuNzMtMS42NC0xMS43M3pcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwM19TVkdJRF8yMV9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiLTU3MjAuNzUxXFxcIiB5MT1cXFwiNTk5LjU4OVxcXCIgeDI9XFxcIi01NzAzLjk4NlxcXCIgeTI9XFxcIjU5OS41ODlcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoLTEgMCAwIDEgLTU1MDQuMDU5IDApXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNGNEI5QTRcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIuNjUyXFxcIiBzdG9wLWNvbG9yPVxcXCIjRkFEMUJCXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTIxMi44NiA1OTIuODFzLTguNDQgMS45LTExLjQ1IDEuNjItLjQ5IDExLjg3LS40OSAxMS44NyA4LjA1LjU2IDE1LjE4LTEuNTFjMi40LTkuMy0zLjI0LTExLjk4LTMuMjQtMTEuOTh6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDAzX1NWR0lEXzIxXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwM19TVkdJRF8yMl9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMjA5LjgzOVxcXCIgeTE9XFxcIjU4MS4xMTJcXFwiIHgyPVxcXCIyOTYuMzIyXFxcIiB5Mj1cXFwiNTgxLjExMlxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjMTgyNjRCXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjY1MlxcXCIgc3RvcC1jb2xvcj1cXFwiIzJEM0M2NVxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIm0yMDkuODQgNTkyLjM3IDQuMzkgMTMuNjRzOTQuMjUtMTIuNDEgODAuNzgtNDNjLTExLjI3LTI1LjU3LTg1LjE3IDI5LjM2LTg1LjE3IDI5LjM2elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwM19TVkdJRF8yMl8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDNfU1ZHSURfMjNfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjE5MC4zMzlcXFwiIHkxPVxcXCI1OTEuNDQ1XFxcIiB4Mj1cXFwiMTkwLjMzOVxcXCIgeTI9XFxcIjYwOS4yNFxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjRkZEQjgwXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0ZGQkIyNFxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0yMDMuNjYgNTkzLjQyczMuNDUgMS4zNSAzLjg5IDYuMTdjLjQ0IDQuODItLjk5IDguMDUtOC4zMyA4Ljk0cy05LjIxLjU2LTEzLjgxLjY3LTExLjI5LjU2LTEyLjI3LTguMmMtLjk5LTguNzUgNy45Ni0xMC45OCAxNy4yNC04Ljc1IDIuOTIuNTYgMTMuMjggMS4xNyAxMy4yOCAxLjE3elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwM19TVkdJRF8yM18pXFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDI2XFxcIiBkPVxcXCJNMjYzLjU2IDU5NC43NHMuNzktMS43NCAxLjQtMS45M2MuNjEtLjE5IDkuMzUtLjU0IDEyLjUzLTEuMzYgMy4xOS0uODMgMTEuNzUtMi4yIDE2LjA4IDEuNDkgNC4wMSAzLjQyIDQuMjcgMTEtLjI5IDE1LjE4LTEuOTYgMS43LTQuMDIgMi4zMi0xMS4yOCAxLjk4LTcuMjYtLjM0LTE3Ljc4LS4yNi0yMC4wOS0zLjYzLjA5LTUuNTUgMS42NS0xMS43MyAxLjY1LTExLjczelxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDAzX1NWR0lEXzI0X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIyNTEuNjIzXFxcIiB5MT1cXFwiNTk5LjU4OVxcXCIgeDI9XFxcIjI2OC4zODdcXFwiIHkyPVxcXCI1OTkuNTg5XFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNGNEI5QTRcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIuNjUyXFxcIiBzdG9wLWNvbG9yPVxcXCIjRkFEMUJCXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTI1NS40NSA1OTIuODFzOC40NCAxLjkgMTEuNDUgMS42Mi40OSAxMS44Ny40OSAxMS44Ny04LjA1LjU2LTE1LjE4LTEuNTFjLTIuNC05LjMgMy4yNC0xMS45OCAzLjI0LTExLjk4elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwM19TVkdJRF8yNF8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDNfU1ZHSURfMjVfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjE3MS45OTNcXFwiIHkxPVxcXCI1ODEuMTEyXFxcIiB4Mj1cXFwiMjU4LjQ3NlxcXCIgeTI9XFxcIjU4MS4xMTJcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzQ0NTY3N1xcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiMyOTM4NjFcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNMjU4LjQ4IDU5Mi4zNyAyNTQuMDkgNjA2cy05NC4yNS0xMi40MS04MC43OC00M2MxMS4yNi0yNS41NiA4NS4xNyAyOS4zNyA4NS4xNyAyOS4zN3pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDNfU1ZHSURfMjVfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDAzX1NWR0lEXzI2X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIyNzcuOTc2XFxcIiB5MT1cXFwiNTkxLjQ0NVxcXCIgeDI9XFxcIjI3Ny45NzZcXFwiIHkyPVxcXCI2MDkuMjRcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0ZGREI4MFxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNGRkJCMjRcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNMjY0LjY2IDU5My40MnMtMy40NSAxLjM1LTMuODkgNi4xNy45OSA4LjA1IDguMzMgOC45NGM3LjM0Ljg5IDkuMjEuNTYgMTMuODEuNjdzMTEuMjkuNTYgMTIuMjctOC4yYy45OS04Ljc1LTcuOTYtMTAuOTgtMTcuMjQtOC43NS0yLjkyLjU2LTEzLjI4IDEuMTctMTMuMjggMS4xN3pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDNfU1ZHSURfMjZfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDAzX1NWR0lEXzI3X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIyNDkuMDUzXFxcIiB5MT1cXFwiNDY2LjA2N1xcXCIgeDI9XFxcIjIxOC4yMDJcXFwiIHkyPVxcXCI0NjYuMDY3XFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNGNEI5QTRcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIuNjUyXFxcIiBzdG9wLWNvbG9yPVxcXCIjRkFEMUJCXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTI0OC4zOSA0NjcuNmMuNTYtLjguOTEtMi44NC40Ni0zLjQ0LS44My0uNjctMS42MS0uMjgtMi4yMS4zLjE0LTQuODgtLjMxLTguOTQtLjQxLTkuOTctLjMtMi45OS0zLjM1LTguNDgtMTMuMy04LjQ4LTkuOTUgMC0xMS44OCA3LjE4LTExLjg4IDcuMThzLS42NSA1LjA4LS40NiAxMS4yNGMtLjU5LS41Ny0xLjM3LS45My0yLjE4LS4yNy0uNDYuNi0uMSAyLjY0LjQ2IDMuNDQuNTYuOC45MSAyLjY5IDEuMDIgMy43NC4xLjk5LS42MiAzLjY1IDIgMy4zMSAxLjU2IDYuMjUgNy44OSAxMS40NyAxMS44MiAxMS40NyA0LjMgMCAxMC4wMS01LjI2IDExLjYzLTExLjQ4IDIuNjguMzcgMS45NS0yLjMxIDIuMDQtMy4zMS4wOS0xLjA0LjQ1LTIuOTMgMS4wMS0zLjczelxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwM19TVkdJRF8yN18pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDNfU1ZHSURfMjhfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjIxMy45NTdcXFwiIHkxPVxcXCI0NTQuMTQyXFxcIiB4Mj1cXFwiMjQ5Ljc3NFxcXCIgeTI9XFxcIjQ1NC4xNDJcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzRGNUM3Q1xcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiMyNzQxNjhcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNMjQwLjEgNDQzLjg4cy0xLjk0LTYuMTItOS4zOS00LjY1Yy03LjQ0IDEuNDYtNy45NSA0Ljk4LTEwLjg3IDUuMTItNC45OS4yMy04Ljk3IDYuNDUtMi41OCAxMy4wMyAyLjg1IDIuOTMuNDQgNC4xOSAxLjc5IDYuNzhzMS4zNCA1LjEyIDEuMzQgNS4xMiAyLjM4LTcuNi44MS0xMC44NGMtLjgxLTEuNjcgMi43Ny0yLjEzIDcuMjQtMS43M3MxMS41MS0xLjA4IDEyLjA2LTQuMTJjMS4zMiA2LjIzIDIuNjQgNi44OCA0LjMxIDcuODMgMS42OC45NSAxLjc4IDguNDggMS43OCA4LjQ4cy4zLTUuNTMgMS40Ny02Ljc4Yy45Ni0yLjA0IDIuODUtMTAuMDcuNzItMTIuMDJzLS4zMi04LjE5LTguNjgtNi4yMnpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDNfU1ZHSURfMjhfKVxcXCIgLz48L2c+PC9zeW1ib2w+PHN5bWJvbCAgdmlld0JveD1cXFwiMCAwIDgwMCA4MDBcXFwiIGlkPVxcXCJpY29uLTQwNFxcXCI+PHN0eWxlPiNpY29uLTQwNCAuc3Q0OXtmaWxsOiNkNGU0ZmV9PC9zdHlsZT48ZyBpZD1cXFwiaWNvbi00MDRf5Zu+5bGCXzVcXFwiPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDRfU1ZHSURfMV9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNDAxLjE5M1xcXCIgeTE9XFxcIjE1OS43NjNcXFwiIHgyPVxcXCI0MDEuMTkzXFxcIiB5Mj1cXFwiNzE1LjI1NFxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjRjRGMkZCXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0UxRUVGNVxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk00ODQuNDUgMjAxLjEyYy0zOC4zNyAzMC4yOS0xMjAuNzQgMzMuODEtMTgxLjE3LTIuMjJzLTE3Mi0zMS4zOC0yMDIuMjIgMzQuODcgMzcuMTkgMTMxLjMzIDEyLjc4IDE3OC45OFM4LjA4IDUyNy43OSA2My44NyA2MDkuMTVzMTI2LjYgNjAuNjIgMTY5LjIyIDUyLjQ1Yzg0LjE3LTE2LjEzIDE4OS43OSAxMTUuNjcgMzA4LjYyIDE2LjEzIDY4LjQ3LTU3LjM1IDE3MC40NCA0Mi4wOSAyMTAuMTctODEuMzYgMzIuNzgtMTAxLjg2LTg1LjY3LTEzOS41LTQ5Ljk3LTIwOC4wMyAzNy45Ni03Mi44OCAzMC42Ny0xNTkuMjQtMTAuNDYtMjAxLjA2LTM4LjMxLTM4Ljk2LTE0MC43NS0zOC40Ni0yMDcgMTMuODR6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDA0X1NWR0lEXzFfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDA0X1NWR0lEXzJfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjQ4NC41MzdcXFwiIHkxPVxcXCI2MDQuNjhcXFwiIHgyPVxcXCI0ODQuNTM3XFxcIiB5Mj1cXFwiNDkzLjM2N1xcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuMzRcXFwiIHN0b3AtY29sb3I9XFxcIiNCMEI5RTFcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIuODY2XFxcIiBzdG9wLWNvbG9yPVxcXCIjRUFGMEY4XFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTI4NS4xIDU4My40NGMxLjc3LTEuNjMgNzcuNzQtOTAuMDcgNzcuNzQtOTAuMDdoMzIxLjEzbC05OS41IDExMS4zMS0yOTkuMzctMjEuMjR6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDA0X1NWR0lEXzJfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDA0X1NWR0lEXzNfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjYxNi4wMjNcXFwiIHkxPVxcXCI2MjcuMjY2XFxcIiB4Mj1cXFwiNjU3LjMzMlxcXCIgeTI9XFxcIjU1NS43MTZcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0IwQjlFMVxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIi44NjZcXFwiIHN0b3AtY29sb3I9XFxcIiNFQUYwRjhcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJtNjA0LjQ5IDYyMC42MSA1NC45NC02My42OC0yNi4yMSA2Ny4xOXpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDRfU1ZHSURfM18pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDRfU1ZHSURfNF9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMTE2LjI3NVxcXCIgeTE9XFxcIjU0MC4xNDlcXFwiIHgyPVxcXCIxMTYuMjc1XFxcIiB5Mj1cXFwiNDAyLjk3NFxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuMDAzXFxcIiBzdG9wLWNvbG9yPVxcXCIjOUE5QURCXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjc4OVxcXCIgc3RvcC1jb2xvcj1cXFwiI0NFQ0RGMVxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0xMTcuMDYgNDAzLjIycy0uMjItLjU3LS41Mi4wNGMtMi43IDUuNDktMjcuMTUgNjQuOTYtMjkuMDkgMTEwLjg2IDAgMC00LjA4IDI2LjM3IDMwLjExIDI2LjAyIDI4LjU0LS4yOSAyNy43OC0yNC42IDI3LjY4LTMyLjc5LS4zOS0zMy4yMi0yOC4xOC0xMDQuMTMtMjguMTgtMTA0LjEzelxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwNF9TVkdJRF80XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwNF9TVkdJRF81X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIxMTYuMjc3XFxcIiB5MT1cXFwiNDE4LjIwNlxcXCIgeDI9XFxcIjExNi4yNzdcXFwiIHkyPVxcXCI1NjkuMzRcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0VDRjFGQlxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIi44MThcXFwiIHN0b3AtY29sb3I9XFxcIiNBRkIwRTdcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNMTE2LjI4IDU2OS4zNGMtLjU1IDAtMS0uNDUtMS0xVjQxOS4yMWMwLS41NS40NS0xIDEtMXMxIC40NSAxIDF2MTQ5LjEzYzAgLjU1LS40NSAxLTEgMXpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDRfU1ZHSURfNV8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDRfU1ZHSURfNl9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNjE3LjQwNFxcXCIgeTE9XFxcIjQ0OC42MjdcXFwiIHgyPVxcXCI2MTcuNDA0XFxcIiB5Mj1cXFwiMzYwLjMwM1xcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuMjI3XFxcIiBzdG9wLWNvbG9yPVxcXCIjQ0NENEY0XFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjc4OVxcXCIgc3RvcC1jb2xvcj1cXFwiI0VDRjFGQlxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk02MTcuOTEgMzYwLjQ2cy0uMTQtLjM3LS4zMy4wM2MtMS43NCAzLjUzLTE3LjQ4IDQxLjgzLTE4LjczIDcxLjM4IDAgMC0yLjYzIDE2Ljk4IDE5LjM5IDE2Ljc2IDE4LjM4LS4xOCAxNy44OS0xNS44NCAxNy44Mi0yMS4xMS0uMjUtMjEuNC0xOC4xNS02Ny4wNi0xOC4xNS02Ny4wNnpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDRfU1ZHSURfNl8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDRfU1ZHSURfN19cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNjE3LjQwNVxcXCIgeTE9XFxcIjM3MC4xMVxcXCIgeDI9XFxcIjYxNy40MDVcXFwiIHkyPVxcXCI0NjcuNDIyXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNFQ0YxRkJcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjQTZBOEUyXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTYxNy40MSA0NjcuNDJjLS4zNiAwLS42NC0uMjktLjY0LS42NHYtOTYuMDJjMC0uMzYuMjktLjY0LjY0LS42NC4zNiAwIC42NC4yOS42NC42NHY5Ni4wMmMwIC4zNS0uMjkuNjQtLjY0LjY0elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwNF9TVkdJRF83XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwNF9TVkdJRF84X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCI0NjMuMzIyXFxcIiB5MT1cXFwiODYuMDJcXFwiIHgyPVxcXCI0MjguNTY4XFxcIiB5Mj1cXFwiMTQ2LjIxN1xcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjRkZEQjgwXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0ZGQkIyNFxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxjaXJjbGUgY3g9XFxcIjQ0NS45NVxcXCIgY3k9XFxcIjExNi4xMlxcXCIgcj1cXFwiMzQuNzVcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDRfU1ZHSURfOF8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDRfU1ZHSURfOV9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNDIwLjk4NVxcXCIgeTE9XFxcIjExNi40ODdcXFwiIHgyPVxcXCI0MjAuOTg1XFxcIiB5Mj1cXFwiMTczLjk0MVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjRjlGQUZFXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0U1RURGN1xcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk00NjUuNzIgMTM1LjA3aC0zNC41N2MtMi4yMy0xMC42MS0xMS42NS0xOC41OC0yMi45My0xOC41OHMtMjAuNjkgNy45Ny0yMi45MyAxOC41OGgtOS4wNWMtMTAuNzMgMC0xOS40NCA4LjctMTkuNDQgMTkuNDQgMCAxMC43MyA4LjcgMTkuNDQgMTkuNDQgMTkuNDRoODkuNDdjMTAuNzMgMCAxOS40NC04LjcgMTkuNDQtMTkuNDQuMDEtMTAuNzQtOC42OS0xOS40NC0xOS40My0xOS40NHpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDRfU1ZHSURfOV8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDRfU1ZHSURfMTBfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjY4OC4wMDZcXFwiIHkxPVxcXCI1MzcuODY3XFxcIiB4Mj1cXFwiNjg4LjAwNlxcXCIgeTI9XFxcIjUxMC4wMzlcXFwiPjxzdG9wIG9mZnNldD1cXFwiLjIyN1xcXCIgc3RvcC1jb2xvcj1cXFwiI0FGQjBFN1xcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNFQ0YxRkJcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48Y2lyY2xlIGN4PVxcXCI2ODguMDFcXFwiIGN5PVxcXCI1MjMuOTVcXFwiIHI9XFxcIjEzLjkxXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDA0X1NWR0lEXzEwXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwNF9TVkdJRF8xMV9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNjg4LjA1NlxcXCIgeTE9XFxcIjUxMy41NTNcXFwiIHgyPVxcXCI2ODguMDU2XFxcIiB5Mj1cXFwiNTU4LjM0OVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjRERFMUY2XFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjgxOFxcXCIgc3RvcC1jb2xvcj1cXFwiI0E2QThFMlxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk02ODguMDYgNTU4LjM1Yy0uMjQgMC0uNDMtLjE5LS40My0uNDN2LTQzLjk0YzAtLjI0LjE5LS40My40My0uNDNzLjQzLjE5LjQzLjQzdjQzLjk0YS40NC40NCAwIDAgMS0uNDMuNDN6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDA0X1NWR0lEXzExXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwNF9TVkdJRF8xMl9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMjg3OS44NTNcXFwiIHkxPVxcXCIzMDguMzgyXFxcIiB4Mj1cXFwiMjczNy40NjJcXFwiIHkyPVxcXCI0NTAuNzc0XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KC0xIDAgMCAxIDMyMDcuMTggMClcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0M4Q0JGMlxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNBRkIwRTdcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJtMjcwLjczIDM5Mi43OSA5MS40LTczLjNjNy40MyAxMS45MiAyMC42NSAxOS44NyAzNS43IDE5Ljg3IDE2LjQzIDAgMzAuNjktOS40OCAzNy42LTIzLjI2bDkyLjExIDc2Ljg1IDEwLjgzLTEyLjk4LTk4LjUtODIuMTljMC0uMTYuMDEtLjMxLjAxLS40NyAwLTIzLjE4LTE4Ljg2LTQyLjA0LTQyLjA1LTQyLjA0LTIzLjE4IDAtNDIuMDQgMTguODYtNDIuMDQgNDIuMDQgMCAxLjguMTMgMy41OC4zNSA1LjMybC05NS45OCA3Ni45NyAxMC41NyAxMy4xOXptMTAxLjk2LTk1LjQ4YzAtMTMuODYgMTEuMjgtMjUuMTQgMjUuMTQtMjUuMTRzMjUuMTQgMTEuMjggMjUuMTQgMjUuMTQtMTEuMjggMjUuMTQtMjUuMTQgMjUuMTQtMjUuMTQtMTEuMjctMjUuMTQtMjUuMTR6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDA0X1NWR0lEXzEyXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwNF9TVkdJRF8xM19cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMjgxNC4yNDdcXFwiIHkxPVxcXCIyNTkuODE1XFxcIiB4Mj1cXFwiMjgxNC4yNDdcXFwiIHkyPVxcXCIzOTIuODM2XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KC0xIDAgMCAxIDMyMDcuMTggMClcXFwiPjxzdG9wIG9mZnNldD1cXFwiLjExNlxcXCIgc3RvcC1jb2xvcj1cXFwiI0RFRTRGRlxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIi44NDdcXFwiIHN0b3AtY29sb3I9XFxcIiNDNkQ1RjRcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJtMjY4Ljc1IDM5Mi42OCA4OC4zMS03MC44MmM3LjE4IDExLjUxIDE5Ljk1IDE5LjIgMzQuNDkgMTkuMiAxNS44OCAwIDI5LjY1LTkuMTYgMzYuMzMtMjIuNDdsODguOTkgNzQuMjUgMTAuNDYtMTIuNTQtOTUuMTctNzkuNDFjMC0uMTUuMDEtLjMuMDEtLjQ2IDAtMjIuNC0xOC4yMi00MC42Mi00MC42Mi00MC42MnMtNDAuNjIgMTguMjItNDAuNjIgNDAuNjJjMCAxLjc0LjEyIDMuNDYuMzQgNS4xNGwtOTIuNzMgNzQuMzcgMTAuMjEgMTIuNzR6bTk4LjUxLTkyLjI0YzAtMTMuNCAxMC45LTI0LjI5IDI0LjI5LTI0LjI5IDEzLjQgMCAyNC4yOSAxMC45IDI0LjI5IDI0LjI5IDAgMTMuNC0xMC45IDI0LjI5LTI0LjI5IDI0LjI5LTEzLjQgMC0yNC4yOS0xMC45LTI0LjI5LTI0LjI5elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwNF9TVkdJRF8xM18pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDRfU1ZHSURfMTRfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjI5NjYuNDYzXFxcIiB5MT1cXFwiMzI5Ljc5NFxcXCIgeDI9XFxcIjI2NTQuNzA3XFxcIiB5Mj1cXFwiNjQxLjU1XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KC0xIDAgMCAxIDMyMDMuNDMgMClcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0M4Q0JGMlxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNBRkIwRTdcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNMjMwLjYgNjE5LjkxaDMyNi4zNWMxNy44OSAwIDMyLjM5LTE0LjUgMzIuMzktMzIuMzlWMzg4LjMxYzAtMjEuMzktMTcuMzQtMzguNzItMzguNzItMzguNzJIMjMwLjZjLTE3Ljg5IDAtMzIuMzkgMTQuNS0zMi4zOSAzMi4zOXYyMDUuNTRjLS4wMSAxNy44OCAxNC41IDMyLjM5IDMyLjM5IDMyLjM5elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwNF9TVkdJRF8xNF8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDRfU1ZHSURfMTVfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjI3MTYuNzczXFxcIiB5MT1cXFwiMzE5LjU2M1xcXCIgeDI9XFxcIjI5MTQuMjkzXFxcIiB5Mj1cXFwiNjYxLjY3OFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgtMSAwIDAgMSAzMjAzLjQzIDApXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNFQkYyRkFcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIuNTI1XFxcIiBzdG9wLWNvbG9yPVxcXCIjRkRGRUZGXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTIyMy42IDYxOS45MWgzMjguNTljMTQuMDMgMCAyNS40LTExLjM3IDI1LjQtMjUuNFYzODYuNzNjMC0xNC4wMy0xMS4zNy0yNS40LTI1LjQtMjUuNEgyMjMuNmMtMTQuMDMgMC0yNS40IDExLjM3LTI1LjQgMjUuNHYyMDcuNzhjMCAxNC4wMyAxMS4zOCAyNS40IDI1LjQgMjUuNHpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDRfU1ZHSURfMTVfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDA0X1NWR0lEXzE2X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIyODE1LjQ5NVxcXCIgeTE9XFxcIjM2MS4zMzRcXFwiIHgyPVxcXCIyODE1LjQ5NVxcXCIgeTI9XFxcIjQyNS41MjZcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoLTEgMCAwIDEgMzIwMy40MyAwKVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuMTE2XFxcIiBzdG9wLWNvbG9yPVxcXCIjREVFNEZGXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjg0N1xcXCIgc3RvcC1jb2xvcj1cXFwiI0JBQ0JFRVxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0xOTguMjQgNDI1LjUzaDM3OS4zOXYtMzguNzljMC0xNC4wMy0xMS4zNy0yNS40LTI1LjQtMjUuNEgyMjMuNjRjLTE0LjAzIDAtMjUuNCAxMS4zNy0yNS40IDI1LjR2MzguNzl6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDA0X1NWR0lEXzE2XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwNF9TVkdJRF8xN19cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMjc2LjQ0NVxcXCIgeTE9XFxcIjQ4OC43NDJcXFwiIHgyPVxcXCIzNTAuNjg1XFxcIiB5Mj1cXFwiNTMxLjYwNFxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuMTE2XFxcIiBzdG9wLWNvbG9yPVxcXCIjREVFNEZGXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjg0N1xcXCIgc3RvcC1jb2xvcj1cXFwiI0JBQ0JFRVxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0zMjguODIgNDU3LjQ2SDMwNy43Yy0xLjI3IDAtMi40Ni41OS0zLjI0IDEuNTlMMjYxLjkxIDUxNGMtLjU2LjcyLS44NiAxLjYtLjg2IDIuNTF2MjMuMTVjMCAyLjI2IDEuODMgNC4wOSA0LjA5IDQuMDloNDEuMzRjMi4yNiAwIDQuMDkgMS44MyA0LjA5IDQuMDl2MTMuNDZjMCAyLjI2IDEuODMgNC4wOSA0LjA5IDQuMDloMTQuMTRjMi4yNiAwIDQuMDktMS44MyA0LjA5LTQuMDl2LTEzLjQ2YzAtMi4yNiAxLjgzLTQuMDkgNC4wOS00LjA5czQuMDktMS44MyA0LjA5LTQuMDlWNTI1LjVjMC0yLjI2LTEuODMtNC4wOS00LjA5LTQuMDlzLTQuMDktMS44My00LjA5LTQuMDl2LTU1Ljc3YTQuMDU5IDQuMDU5IDAgMCAwLTQuMDctNC4wOXptLTM5LjMgNTcuMzUgMTMuNzQtMTcuNzRjMi4zOS0zLjA4IDcuMzMtMS40IDcuMzMgMi41MXYxNy43NGMwIDIuMjYtMS44MyA0LjA5LTQuMDkgNC4wOWgtMTMuNzRjLTMuNDEgMC01LjMzLTMuOTEtMy4yNC02LjZ6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDA0X1NWR0lEXzE3XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwNF9TVkdJRF8xOF9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNDU1LjA5NVxcXCIgeTE9XFxcIjQ4OC43NDJcXFwiIHgyPVxcXCI1MjkuMzM1XFxcIiB5Mj1cXFwiNTMxLjYwNFxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuMTE2XFxcIiBzdG9wLWNvbG9yPVxcXCIjREVFNEZGXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjg0N1xcXCIgc3RvcC1jb2xvcj1cXFwiI0JBQ0JFRVxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk01MTEuNTYgNTE3LjMydi01NS43N2MwLTIuMjYtMS44My00LjA5LTQuMDktNC4wOWgtMjEuMTJjLTEuMjcgMC0yLjQ2LjU5LTMuMjQgMS41OUw0NDAuNTYgNTE0Yy0uNTYuNzItLjg2IDEuNi0uODYgMi41MXYyMy4xNWMwIDIuMjYgMS44MyA0LjA5IDQuMDkgNC4wOWg0MS4zNGMyLjI2IDAgNC4wOSAxLjgzIDQuMDkgNC4wOXYxMy40NmMwIDIuMjYgMS44MyA0LjA5IDQuMDkgNC4wOWgxNC4xNGMyLjI2IDAgNC4wOS0xLjgzIDQuMDktNC4wOXYtMTMuNDZjMC0yLjI2IDEuODMtNC4wOSA0LjA5LTQuMDlzNC4wOS0xLjgzIDQuMDktNC4wOVY1MjUuNWMwLTIuMjYtMS44My00LjA5LTQuMDktNC4wOS0yLjI0IDAtNC4wNy0xLjgzLTQuMDctNC4wOXptLTQzLjM5LTIuNTEgMTMuNzQtMTcuNzRjMi4zOS0zLjA4IDcuMzMtMS40IDcuMzMgMi41MXYxNy43NGMwIDIuMjYtMS44MyA0LjA5LTQuMDkgNC4wOUg0NzEuNGMtMy40IDAtNS4zMi0zLjkxLTMuMjMtNi42elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwNF9TVkdJRF8xOF8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDRfU1ZHSURfMTlfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjMzOS40ODhcXFwiIHkxPVxcXCI0ODIuMTc0XFxcIiB4Mj1cXFwiNDQxLjMxXFxcIiB5Mj1cXFwiNTQwLjk2MVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuMTE2XFxcIiBzdG9wLWNvbG9yPVxcXCIjREVFNEZGXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjg0N1xcXCIgc3RvcC1jb2xvcj1cXFwiI0JBQ0JFRVxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0zNTYuNCA1NjYuMTZoNjhjMi4yNiAwIDQuMDktMS44MyA0LjA5LTQuMDl2LTEwMWMwLTIuMjYtMS44My00LjA5LTQuMDktNC4wOWgtNjhjLTIuMjYgMC00LjA5IDEuODMtNC4wOSA0LjA5djEwMWMwIDIuMjYgMS44MyA0LjA5IDQuMDkgNC4wOXptNDkuNzYtODIuNzZ2NTYuMzRjMCAyLjI2LTEuODMgNC4wOS00LjA5IDQuMDloLTIzLjM0Yy0yLjI2IDAtNC4wOS0xLjgzLTQuMDktNC4wOVY0ODMuNGMwLTIuMjYgMS44My00LjA5IDQuMDktNC4wOWgyMy4zNGMyLjI2IDAgNC4wOSAxLjgzIDQuMDkgNC4wOXpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDRfU1ZHSURfMTlfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDA0X1NWR0lEXzIwX1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCI4NzEuNTE0XFxcIiB5MT1cXFwiNDQ4NS4yMzJcXFwiIHgyPVxcXCI4NzIuMDY1XFxcIiB5Mj1cXFwiNDQ5OC43N1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInJvdGF0ZSgyLjMzMyA5NTkwNC42NjMgLTM2NzAuMjM0KVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjRkZEQjgwXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0ZGQkIyNFxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk02MDUuOTUgNjEwLjZzMy4yNSA0Ljg4IDEwLjU1IDEuMDZjMy45MSAyLjcyIDguOTIgNC45NyAxMi4zOSA1Ljg4IDMuNDcuOTEgMy42OCA1LjQgMy4xMiA2LjYxLTQuNjYtLjQ3LTE4LjE0LjY0LTI3LjMtMi45NC43Mi03LjUzIDEuMjQtMTAuNjEgMS4yNC0xMC42MXpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDRfU1ZHSURfMjBfKVxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q0OVxcXCIgZD1cXFwibTYwNC4wNiA2MjMuODQuNDMtMy4yM3MxMC41NCAyLjYzIDI4LjM4IDEuMDNjLjE3IDEuNjYuMzUgMi40OC4zNSAyLjQ4cy0xMy41NiAyLjAyLTI5LjE2LS4yOHpcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwNF9TVkdJRF8yMV9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiLTE0MjcuMjYzXFxcIiB5MT1cXFwiLTIzNS41NzlcXFwiIHgyPVxcXCItMTQwOS44OTZcXFwiIHkyPVxcXCItMjE1LjMxOFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInJvdGF0ZSg0MC42IC0xNTc1LjQ1NyAyODE4LjUyKVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjRkZEQjgwXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0ZGQkIyNFxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk01MjAuNDcgNTk2LjEycy0uMDUgNS44MSA3LjI3IDcuOTRjMS45NSA1LTMuNzMgMTEuNzkgNS4zNyAxMi40MiAzLjM0LjIzIDEuNzUgNS4xMi43MyA1LjYzLTEwLjk1IDQuMDEtMTQuNjMtMTAuMTItMTkuNjItMTguOTggNC4zMi01LjA5IDYuMjUtNy4wMSA2LjI1LTcuMDF6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNDA0X1NWR0lEXzIxXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTQwNF9TVkdJRF8yMl9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiLTM3NzIuMDFcXFwiIHkxPVxcXCI2MDQuNDg2XFxcIiB4Mj1cXFwiLTM3NzIuMDFcXFwiIHkyPVxcXCI1MDIuMTk4XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KC0xIDAgMCAxIC0zMjIyLjY4IDApXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiM0NDU2NzdcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjMjkzODYxXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTU2OS4zIDUwMi4ycy0xNC40NC0uMjYtMTcuNjcgMTguODVjLTMuMjMgMTkuMTEgMS41NyAyMy42Ni01LjM4IDM3LjI5LTMuNjIgNy4xLTI3LjE1IDQxLjEyLTI3LjE1IDQxLjEybDYuODMgNS4wM3MzNy45NC0zNC43MiA0My41Mi00OC43MSA5LjgzLTI4LjgzIDEwLjEzLTQxLjQ2Yy4yOC0xMi42Mi0xMC4yOC0xMi4xMi0xMC4yOC0xMi4xMnpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDRfU1ZHSURfMjJfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDA0X1NWR0lEXzIzX1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCItMzgzOS42NDJcXFwiIHkxPVxcXCI1NTkuODAxXFxcIiB4Mj1cXFwiLTM3ODYuMjM4XFxcIiB5Mj1cXFwiNTU5LjgwMVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgtMSAwIDAgMSAtMzIyMi42OCAwKVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjNDQ1Njc3XFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzI5Mzg2MVxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk01NzIuNzIgNTA2LjE5czE0Ljg3IDMuNTMgMTUuNzUgMy45OGMuNDQuMjMgMi44OSA3LjA3IDUuMjQgMTMuOTUgNS4wNCA2Ljg3IDIzLjAyIDMyLjI4IDIzLjIxIDQ1LjUxLjI5IDIwLjEzLS45NiA0My42Ny0uOTYgNDMuNjdsLTkuMjQuMTFzLTMuNS0zOC45LTUuODUtNDIuMzFjLS40Mi0uNjEtMS4yOS0xLjk1LTIuNDItMy43NC01LjE0LTYuMjItMTYuNS0xNi42NS0yOC4xNi0yNy4wNy0xNi40NS0xNC42NiAyLjQzLTM0LjEgMi40My0zNC4xelxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTQwNF9TVkdJRF8yM18pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi00MDRfU1ZHSURfMjRfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjUzMTcuOTA4XFxcIiB5MT1cXFwiMTMyLjA5NVxcXCIgeDI9XFxcIjUzMTcuOTA4XFxcIiB5Mj1cXFwiNTYuODE3XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwicm90YXRlKDI2LjA4NiAyMTEyLjUwNCAtOTkwOC4wMzYpXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNDM0Q1RkRcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjMUE5MEZDXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTYwMy4xNCA0NDguOTFzLTEwLjY5LTguMzctMTYuOTktNC4zNmMtNi4zIDQtMTQuMjcgMTguOTEtMTQuMjcgMTguOTFsOC44NSA0LjM4LTIzLjggMzkuNjcgNDAuNjkgMjEuODMgMTQuNi00Mi4yOCAxMS43OS42OXM3Ljk2LTI1LjI0LTMuNjItMjcuNDNjLTUuNDUtMi4zLTcuMDQtMy4zNC03LjA0LTMuMzRzLTMuNDkgNC4yNy03Ljk5IDEuMTgtMi4yMi05LjI1LTIuMjItOS4yNXpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDRfU1ZHSURfMjRfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDA0X1NWR0lEXzI1X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCI1MTYxLjk0NVxcXCIgeTE9XFxcIjExMzQuMzY5XFxcIiB4Mj1cXFwiNTE3MS4yNlxcXCIgeTI9XFxcIjEwNjguNzhcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJyb3RhdGUoMTguMDA2IDQ4NDguODcgLTEzNjg3LjQ3KVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjQzNENUZEXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzFBOTBGQ1xcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk01ODkuMTUgNDQzLjZjMy44OC42MSA4LjA0IDQuMDUgNC41NiAxMi44NS0zLjQ4IDguOC0xNi42NiAxOC41LTE2LjA2IDI0LjgyLjYgNi40IDMuMzcgMTYuNTggNS4zMyAyMi42LTIuOCA0LjE3LTYuNzIgNi43OC02LjcyIDYuNzhzLTEwLjMzLTE0Ljc1LTEzLjEyLTI1LjIzIDcuMDctMjUuMjUgMTQuNjktMzUuNDFjNS43My03LjY3IDExLjMyLTYuNDEgMTEuMzItNi40MXpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDRfU1ZHSURfMjVfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDA0X1NWR0lEXzI2X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCItODkyNC42NTlcXFwiIHkxPVxcXCItODY1LjUyNVxcXCIgeDI9XFxcIi04OTE1LjU0NFxcXCIgeTI9XFxcIi05MjkuNzA2XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwic2NhbGUoLTEgMSkgcm90YXRlKC0zNC4xNzIgLTI1MDQuNTMgLTEzNzIwLjgwNilcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0MzRDVGRFxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiMxQTkwRkNcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNNjI0LjEyIDQ2My41Yy0yLjc5LTMuMTktNy42OC00LjktMTEuNTMgMy42OXMtMi4zNSAyNi42NC03LjAyIDI5Ljk3Yy00LjcyIDMuMzctMTMuMzQgNy4wNy0xOC42MiA4Ljk2LTEuMTIgNS4xMi0uNDkgMTAuMzMtLjQ5IDEwLjMzczE2LjM2LjQ0IDI1LjE5LTMuNDJjOC44My0zLjg2IDEyLjgyLTIxLjk3IDE1LjA2LTM1LjIgMS42OS05Ljk3LTIuNTktMTQuMzMtMi41OS0xNC4zM3pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDRfU1ZHSURfMjZfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNDA0X1NWR0lEXzI3X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCItMzgxMy44OTZcXFwiIHkxPVxcXCI0ODAuODk4XFxcIiB4Mj1cXFwiLTM4NDEuODExXFxcIiB5Mj1cXFwiNDIzLjg4M1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgtMSAwIDAgMSAtMzIyMi42OCAwKVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjNEY1QzdDXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzI3NDE2OFxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk01OTAuOSA0MzkuNjhjLjQzLTQuNjkgNC41LTcuOSA5LjMtNy4xNy40LTEuMzEgNC40NC0yLjk4IDUuMzgtNC42IDMuNS02LjAzIDkuMjYtNyAxNC0zLjU2IDkuNzkgMi43OSA4LjAxIDEyLjIgNC43NSAyMS41NSAyLjggNS42MSAxLjUyIDEyLjQxLS4wNiAxNS4xOCA0Ljc1IDUuMDcgMi4wOSAxMS41OC0xLjM5IDE2LjUyLS40LjU2LS44MiAxLjA2LTEuMjUgMS41Mi0uMjEgNS44NS04LjM0IDcuODYtMTEuMzIgNC44OS0zLjE3LTMuMTYtMy41Ny00LjQ5LTkuMzItMS43Ni01Ljc1IDIuNzMtMTEuMjQtMS41NC0xMS4zLTcuMzQtLjA2LTUuOC00LjI4LTQuMS02LjEyLTUuNjMtMy4zMy0yLjc3LTEuMTUtNS45My0xLjE1LTUuOTNzLTQuODUtLjI2LTYuMDEtNy4zOGMtMS4zMy0xNi45OSAxMS45NS0xNy4wOCAxNC40OS0xNi4yOXpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi00MDRfU1ZHSURfMjdfKVxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q0OVxcXCIgZD1cXFwiTTUxNS4zOCA2MDEuMjRzNC45MiAxMi4wMyA1LjkxIDEzLjYxIDUuOSA5LjI3IDE0LjI2IDUuMDVjLS4wNCAxLjQ5LS4xMSAyLjQzLS4xMSAyLjQzcy05LjQyIDYuMjYtMTUuMzMtNC42MmMtNS45MS0xMC44OC02Ljc1LTE0LjYzLTYuNzUtMTQuNjNsMi4wMi0xLjg0elxcXCIgLz48L2c+PC9zeW1ib2w+PHN5bWJvbCAgdmlld0JveD1cXFwiMCAwIDgwMCA4MDBcXFwiIGlkPVxcXCJpY29uLTUwMFxcXCI+PHN0eWxlPiNpY29uLTUwMCAuc3QyNntmaWxsOiNmZmZ9PC9zdHlsZT48ZyBpZD1cXFwiaWNvbi01MDBf5Zu+5bGCXzE2XFxcIj48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNTAwX1NWR0lEXzFfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjQwMi44MzJcXFwiIHkxPVxcXCIxNTkuODQzXFxcIiB4Mj1cXFwiNDAyLjgzMlxcXCIgeTI9XFxcIjcxNS4zMzVcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0Y0RjJGQlxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNFMUVFRjVcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNNDg2LjA5IDIwMS4yYy0zOC4zNyAzMC4yOS0xMjAuNzQgMzMuODEtMTgxLjE3LTIuMjJzLTE3Mi0zMS4zOC0yMDIuMjIgMzQuODcgMzcuMTkgMTMxLjMzIDEyLjc4IDE3OC45OFM5LjcyIDUyNy44NyA2NS41IDYwOS4yM3MxMjYuNiA2MC42MiAxNjkuMjIgNTIuNDVjODQuMTctMTYuMTMgMTg5Ljc5IDExNS42NyAzMDguNjIgMTYuMTMgNjguNDctNTcuMzUgMTcwLjQ0IDQyLjA5IDIxMC4xNy04MS4zNiAzMi43OC0xMDEuODYtODUuNjctMTM5LjUtNDkuOTctMjA4LjAzIDM3Ljk2LTcyLjg4IDMwLjY3LTE1OS4yNC0xMC40Ni0yMDEuMDYtMzguMy0zOC45Ni0xNDAuNzUtMzguNDYtMjA2Ljk5IDEzLjg0elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTUwMF9TVkdJRF8xXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF8yX1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIxMTcuOTEzXFxcIiB5MT1cXFwiNTQwLjIyOVxcXCIgeDI9XFxcIjExNy45MTNcXFwiIHkyPVxcXCI0MDMuMDU1XFxcIj48c3RvcCBvZmZzZXQ9XFxcIi4yMjdcXFwiIHN0b3AtY29sb3I9XFxcIiNCN0FDRTBcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIuNzg5XFxcIiBzdG9wLWNvbG9yPVxcXCIjRThFN0ZBXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTExOC43IDQwMy4zcy0uMjItLjU3LS41Mi4wNGMtMi43IDUuNDktMjcuMTUgNjQuOTYtMjkuMDkgMTEwLjg2IDAgMC00LjA4IDI2LjM3IDMwLjExIDI2LjAyIDI4LjU0LS4yOSAyNy43OC0yNC42IDI3LjY4LTMyLjc5LS4zOS0zMy4yMi0yOC4xOC0xMDQuMTMtMjguMTgtMTA0LjEzelxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTUwMF9TVkdJRF8yXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF8zX1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIxMTcuOTE1XFxcIiB5MT1cXFwiNDE4LjI4N1xcXCIgeDI9XFxcIjExNy45MTVcXFwiIHkyPVxcXCI1NjkuNDJcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0VDRjFGQlxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIi44MThcXFwiIHN0b3AtY29sb3I9XFxcIiNBRkIwRTdcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNMTE3LjkyIDU2OS40MmMtLjU1IDAtMS0uNDUtMS0xVjQxOS4yOWMwLS41NS40NS0xIDEtMXMxIC40NSAxIDF2MTQ5LjEzYzAgLjU1LS40NSAxLTEgMXpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi01MDBfU1ZHSURfM18pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi01MDBfU1ZHSURfNF9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNjE5LjA0MlxcXCIgeTE9XFxcIjQ0OC43MDdcXFwiIHgyPVxcXCI2MTkuMDQyXFxcIiB5Mj1cXFwiMzYwLjM4M1xcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuMjI3XFxcIiBzdG9wLWNvbG9yPVxcXCIjQ0NENEY0XFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjc4OVxcXCIgc3RvcC1jb2xvcj1cXFwiI0VDRjFGQlxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk02MTkuNTUgMzYwLjU0cy0uMTQtLjM3LS4zMy4wM2MtMS43NCAzLjUzLTE3LjQ4IDQxLjgzLTE4LjczIDcxLjM4IDAgMC0yLjYzIDE2Ljk4IDE5LjM5IDE2Ljc2IDE4LjM4LS4xOCAxNy44OS0xNS44NCAxNy44Mi0yMS4xMS0uMjYtMjEuNC0xOC4xNS02Ny4wNi0xOC4xNS02Ny4wNnpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi01MDBfU1ZHSURfNF8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi01MDBfU1ZHSURfNV9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNjE5LjA0M1xcXCIgeTE9XFxcIjM3MC4xOVxcXCIgeDI9XFxcIjYxOS4wNDNcXFwiIHkyPVxcXCI0NjcuNTAzXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNFQ0YxRkJcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjQTZBOEUyXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTYxOS4wNCA0NjcuNWMtLjM2IDAtLjY0LS4yOS0uNjQtLjY0di05Ni4wMmMwLS4zNi4yOS0uNjQuNjQtLjY0cy42NC4yOS42NC42NHY5Ni4wMmMuMDEuMzUtLjI4LjY0LS42NC42NHpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi01MDBfU1ZHSURfNV8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi01MDBfU1ZHSURfNl9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNDY0Ljk2XFxcIiB5MT1cXFwiODYuMTAxXFxcIiB4Mj1cXFwiNDMwLjIwNlxcXCIgeTI9XFxcIjE0Ni4yOTdcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0ZGREI4MFxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNGRkJCMjRcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48Y2lyY2xlIGN4PVxcXCI0NDcuNThcXFwiIGN5PVxcXCIxMTYuMlxcXCIgcj1cXFwiMzQuNzVcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi01MDBfU1ZHSURfNl8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi01MDBfU1ZHSURfN19cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNDIyLjYyM1xcXCIgeTE9XFxcIjExNi41NjdcXFwiIHgyPVxcXCI0MjIuNjIzXFxcIiB5Mj1cXFwiMTc0LjAyMVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjRjlGQUZFXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0U1RURGN1xcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk00NjcuMzYgMTM1LjE1aC0zNC41N2MtMi4yMy0xMC42MS0xMS42NS0xOC41OC0yMi45My0xOC41OHMtMjAuNjkgNy45Ny0yMi45MyAxOC41OGgtOS4wNWMtMTAuNzMgMC0xOS40NCA4LjctMTkuNDQgMTkuNDQgMCAxMC43MyA4LjcgMTkuNDQgMTkuNDQgMTkuNDRoODkuNDdjMTAuNzMgMCAxOS40NC04LjcgMTkuNDQtMTkuNDQuMDEtMTAuNzQtOC43LTE5LjQ0LTE5LjQzLTE5LjQ0elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTUwMF9TVkdJRF83XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF84X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCI2ODkuNjQ0XFxcIiB5MT1cXFwiNTM3Ljk0OFxcXCIgeDI9XFxcIjY4OS42NDRcXFwiIHkyPVxcXCI1MTAuMTE5XFxcIj48c3RvcCBvZmZzZXQ9XFxcIi4yMjdcXFwiIHN0b3AtY29sb3I9XFxcIiNBRkIwRTdcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjRUNGMUZCXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PGNpcmNsZSBjeD1cXFwiNjg5LjY0XFxcIiBjeT1cXFwiNTI0LjAzXFxcIiByPVxcXCIxMy45MVxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTUwMF9TVkdJRF84XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF85X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCI2ODkuNjk0XFxcIiB5MT1cXFwiNTEzLjYzM1xcXCIgeDI9XFxcIjY4OS42OTRcXFwiIHkyPVxcXCI1NTguNDI5XFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNEREUxRjZcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIuODE4XFxcIiBzdG9wLWNvbG9yPVxcXCIjQTZBOEUyXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTY4OS42OSA1NTguNDNjLS4yNCAwLS40My0uMTktLjQzLS40M3YtNDMuOTRjMC0uMjQuMTktLjQzLjQzLS40M3MuNDMuMTkuNDMuNDNWNTU4YzAgLjI0LS4xOS40My0uNDMuNDN6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzlfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNTAwX1NWR0lEXzEwX1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIyODkuMzg0XFxcIiB5MT1cXFwiNDc3LjE5XFxcIiB4Mj1cXFwiMjg5LjM4NFxcXCIgeTI9XFxcIjQxMS4yMjZcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0IwQjlFMVxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNFN0VGRjdcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJtMjAyLjA3IDQ1MS4yOCA2OC4wMy00MC4wNWgxMDYuNmwtNjEuNTUgNjUuOTYtNzcuNzQtMS4xOHpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi01MDBfU1ZHSURfMTBfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNTAwX1NWR0lEXzExX1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCI0NTQuMTQ1XFxcIiB5MT1cXFwiNTAyLjgwOVxcXCIgeDI9XFxcIjQ1NC4xNDVcXFwiIHkyPVxcXCI0MjAuNjVcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0IwQjlFMVxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNFN0VGRjdcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJtMzg2LjcxIDQ3OS41NSA0NS4wNS01OC45aDg5LjgybC05Ny43NyA4Mi4xNi0yOS40NC03LjY2elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTUwMF9TVkdJRF8xMV8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi01MDBfU1ZHSURfMTJfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjU4OS4wMTZcXFwiIHkxPVxcXCI0NzIuMTMyXFxcIiB4Mj1cXFwiNTg5LjAxNlxcXCIgeTI9XFxcIjM5Ny42OFxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjQjBCOUUxXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0U3RUZGN1xcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIm01MDEuMjYgNDU4LjY0IDY0Ljc5LTYwLjk2aDExMC43MmwtNDguOTkgNjYuNjFhMTkuMjQzIDE5LjI0MyAwIDAgMS0xNy44NSA3LjdsLTEwOC42Ny0xMy4zNXpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi01MDBfU1ZHSURfMTJfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNTAwX1NWR0lEXzEzX1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIzMTQuMjY3XFxcIiB5MT1cXFwiNjA3LjM0OVxcXCIgeDI9XFxcIjMxNC4yNjdcXFwiIHkyPVxcXCI0OTcuMzYxXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNCMEI5RTFcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjRTdFRkY3XFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwibTIxMi4yMyA1OTIuNzcgOTEuNDQtOTUuNDFINDE2LjNMMjk3LjA0IDYwNy4zNWwtNDkuNDctMi42NXpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi01MDBfU1ZHSURfMTNfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNTAwX1NWR0lEXzE0X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCI1MTUuNjA0XFxcIiB5MT1cXFwiMzEyLjg2N1xcXCIgeDI9XFxcIjYxMy4wOTJcXFwiIHkyPVxcXCI0ODEuNzIxXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNDOENCRjJcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjQUZCMEU3XFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTU2NC4zNSAyOTYuNTNjLTQxLjc5IDAtNzUuNjcgMzMuNi03NS42NyA3NS4wNXY1MS40M2MwIDQxLjQ1IDMzLjg4IDc1LjA1IDc1LjY3IDc1LjA1czc1LjY3LTMzLjYgNzUuNjctNzUuMDV2LTUxLjQzYy0uMDEtNDEuNDUtMzMuODgtNzUuMDUtNzUuNjctNzUuMDV6bTIzLjgyIDEzNy44M2MwIDEzLjA1LTEwLjY3IDIzLjYzLTIzLjgyIDIzLjYzLTEzLjE2IDAtMjMuODItMTAuNTgtMjMuODItMjMuNjN2LTc0LjEzYzAtMTMuMDUgMTAuNjctMjMuNjMgMjMuODItMjMuNjMgMTMuMTYgMCAyMy44MiAxMC41OCAyMy44MiAyMy42M3Y3NC4xM3pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi01MDBfU1ZHSURfMTRfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNTAwX1NWR0lEXzE1X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCI1MTMuODM5XFxcIiB5MT1cXFwiMzIxLjYxOVxcXCIgeDI9XFxcIjYwNi42NFxcXCIgeTI9XFxcIjQ4Mi4zNTVcXFwiPjxzdG9wIG9mZnNldD1cXFwiLjExNlxcXCIgc3RvcC1jb2xvcj1cXFwiI0RFRTRGRlxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIi44NDdcXFwiIHN0b3AtY29sb3I9XFxcIiNCQUNCRUVcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNNTYwLjI0IDMwNS45MWMtMzkuNTIgMC03MS41NiAzMi4wNC03MS41NiA3MS41NnY0OS4wM2MwIDM5LjUyIDMyLjA0IDcxLjU2IDcxLjU2IDcxLjU2czcxLjU2LTMyLjA0IDcxLjU2LTcxLjU2di00OS4wM2MwLTM5LjUyLTMyLjA0LTcxLjU2LTcxLjU2LTcxLjU2em0yMi41MyAxMzEuNDFjMCAxMi40NC0xMC4wOSAyMi41My0yMi41MyAyMi41My0xMi40NCAwLTIyLjUzLTEwLjA5LTIyLjUzLTIyLjUzdi03MC42N2MwLTEyLjQ0IDEwLjA5LTIyLjUzIDIyLjUzLTIyLjUzIDEyLjQ0IDAgMjIuNTMgMTAuMDkgMjIuNTMgMjIuNTN2NzAuNjd6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzE1XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF8xNl9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMjE3LjAzMVxcXCIgeTE9XFxcIjMwNy4zNjNcXFwiIHgyPVxcXCIzMTYuNTgzXFxcIiB5Mj1cXFwiNDc5Ljc5M1xcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjQzhDQkYyXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0FGQjBFN1xcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0zMzMuNzIgNDEyLjZjLTUuNTUtNTguMTUtNjUuOTktNTQuMDEtOTAuMTQtNDkuOThsMi4yNi0xNS4yOCA3MS40OSA1Ljg4IDguOTgtNS44OFYzMDcuMmgtMTA5bC05LjA5IDcuNDctMTQuODEgOTIuNDFoNDMuNmMyMi43My0xOS45OSAzOC43Ny0xMS4zNyA0NS4zOCAwIDYuMzQgMTAuOTIgNy4yNyA0My4yNi0xOS43MSA0My44Ny0yMy4zNC41My0yMy4xMy0xOS45Mi0yMy4xMy0xOS45MmwtNDEuNTUuNTgtOC4wNiA3LjUyczYuMTggNTkuNDEgNjkuNzMgNTkuNDEgNzcuMy01MC4wOSA3NC4wNS04NS45NHpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi01MDBfU1ZHSURfMTZfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNTAwX1NWR0lEXzE3X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIyMTIuNzM1XFxcIiB5MT1cXFwiMzExLjk4MlxcXCIgeDI9XFxcIjMwOS42OTlcXFwiIHkyPVxcXCI0NzkuOTI4XFxcIj48c3RvcCBvZmZzZXQ9XFxcIi4xMTZcXFwiIHN0b3AtY29sb3I9XFxcIiNERUU0RkZcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIuODQ3XFxcIiBzdG9wLWNvbG9yPVxcXCIjQkFDQkVFXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTMyNC4yNiA0MTUuOTRjLTUuMTktNTUuODktNjEuNjUtNTEuOTItODQuMjEtNDguMDRsMi4xMS0xNC42OWg3NS4xN3YtMzguNThIMjA4LjE0bC0xNC45NSA5Nmg0MC43M2MyMS4yMy0xOS4yMSAzNi4yMi0xMC45MyA0Mi4zOSAwIDUuOTIgMTAuNDkgNi43OSA0Ni4zOC0xOC40MSA0Ni45Ny0yMS44LjUxLTI0LjQxLTE5LjE0LTI0LjQxLTE5LjE0bC00My41NC42NnM1Ljc4IDU5LjQxIDY1LjE0IDU5LjQxIDcyLjItNDguMTQgNjkuMTctODIuNTl6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzE3XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF8xOF9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMzY4LjQ1OVxcXCIgeTE9XFxcIjMwNC43MzFcXFwiIHgyPVxcXCI0NTIuNDQ4XFxcIiB5Mj1cXFwiNDUwLjIwNVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjQzhDQkYyXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0FGQjBFN1xcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0zODcuMjYgNDYxLjI2cy01NC4wOS0zNi43Mi01Ni40OS04My44M2MtMi4yOS00NS4wMyAyNS40Ny04MS4yNyA3Ni4yNy04MS4yNyA1NS4yOSAwIDc4LjEyIDQ3Ljk1IDc4LjEyIDczLjk5IDAgMjYuMDQtMTAuNjMgNjMuMjUtNTUuNzMgOTMuMzUtMjMuNTMgMC00Mi4xNy0yLjI0LTQyLjE3LTIuMjR6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzE4XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF8xOV9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMzY2LjYyM1xcXCIgeTE9XFxcIjMxMi40MjhcXFwiIHgyPVxcXCI0NDUuMTc1XFxcIiB5Mj1cXFwiNDQ4LjQ4M1xcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuMTE2XFxcIiBzdG9wLWNvbG9yPVxcXCIjREVFNEZGXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjg0N1xcXCIgc3RvcC1jb2xvcj1cXFwiI0JBQ0JFRVxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0zODQuNzYgNDYxLjI5cy01MS43LTM0Ljk0LTUzLjk5LTc5Ljc3Yy0yLjE5LTQyLjg1IDI0LjM1LTc3LjM0IDcyLjktNzcuMzQgNTIuODUgMCA3My40NyA0NS41NCA3My40NyA3MC4zMiAwIDI0Ljc4LTEyLjAzIDU4LjcyLTU1LjE0IDg3LjM2LTIyLjQ5LjAxLTM3LjI0LS41Ny0zNy4yNC0uNTd6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzE5XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF8yMF9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNDAwLjQxOFxcXCIgeTE9XFxcIjQ1NC43NDhcXFwiIHgyPVxcXCI0MTcuOTk0XFxcIiB5Mj1cXFwiNDg1LjE5MVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjQzhDQkYyXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0FGQjBFN1xcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk00MTQuNTkgNDg2Ljc4aC0xNi42NGMtLjg1IDAtMS42NC0uNDQtMi4wOC0xLjE3bC0xMS4zOS0xOC44Yy0uNy0xLjE1LS4zMy0yLjY0LjgyLTMuMzQgMS4xNS0uNjkgMi42NC0uMzMgMy4zNC44MmwxMC42OCAxNy42MmgxMy44NGwxMC42LTE5LjA1Yy42NS0xLjE3IDIuMTMtMS42IDMuMzEtLjk0IDEuMTcuNjUgMS42IDIuMTMuOTQgMy4zMWwtMTEuMjkgMjAuM2MtLjQ0Ljc3LTEuMjUgMS4yNS0yLjEzIDEuMjV6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzIwXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF8yMV9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMzk3Ljg0MVxcXCIgeTE9XFxcIjQ1NC43NDhcXFwiIHgyPVxcXCI0MTUuNDE3XFxcIiB5Mj1cXFwiNDg1LjE5MVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuMTE2XFxcIiBzdG9wLWNvbG9yPVxcXCIjREVFNEZGXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjg0N1xcXCIgc3RvcC1jb2xvcj1cXFwiI0JBQ0JFRVxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk00MTIuMDEgNDg2Ljc4aC0xNi42NGMtLjg1IDAtMS42NC0uNDQtMi4wOC0xLjE3bC0xMS4zOS0xOC44Yy0uNy0xLjE1LS4zMy0yLjY0LjgyLTMuMzQgMS4xNS0uNjkgMi42NC0uMzMgMy4zNC44MmwxMC42OCAxNy42MmgxMy44NGwxMC42LTE5LjA1Yy42NS0xLjE3IDIuMTMtMS42IDMuMzEtLjk0IDEuMTcuNjUgMS42IDIuMTMuOTQgMy4zMWwtMTEuMjkgMjAuM2MtLjQzLjc3LTEuMjUgMS4yNS0yLjEzIDEuMjV6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzIxXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF8yMl9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMzk1LjYyNlxcXCIgeTE9XFxcIjQ0MS44ODhcXFwiIHgyPVxcXCI0MTUuODE2XFxcIiB5Mj1cXFwiNDc2Ljg1NlxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjQzhDQkYyXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0FGQjBFN1xcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk00MjkuMjIgNDY4LjM1aC00Ny42NmMtMi43NiAwLTUtMi4yNC01LTVWNDUyLjloNTcuNjV2MTAuNDVjMCAyLjc2LTIuMjMgNS00Ljk5IDV6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzIyXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF8yM19cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMzk1LjAyMlxcXCIgeTE9XFxcIjQ0NS43NTZcXFwiIHgyPVxcXCI0MTIuNzc2XFxcIiB5Mj1cXFwiNDc2LjUwN1xcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuMTE2XFxcIiBzdG9wLWNvbG9yPVxcXCIjREVFNEZGXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjg0N1xcXCIgc3RvcC1jb2xvcj1cXFwiI0JBQ0JFRVxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk00MjUuNTcgNDY4LjM1aC00NC4wMWMtMi43NiAwLTUtMi4yNC01LTV2LTYuOTNoNTQuMDF2Ni45M2MwIDIuNzYtMi4yNCA1LTUgNXpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi01MDBfU1ZHSURfMjNfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNTAwX1NWR0lEXzI0X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIzOTYuMTcxXFxcIiB5MT1cXFwiNDcyLjI2MVxcXCIgeDI9XFxcIjQxNi42OTdcXFwiIHkyPVxcXCI1MDcuODEzXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNDOENCRjJcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjQUZCMEU3XFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTQxOC43OSA1MDUuNDZoLTI1LjdjLTQuMDkgMC03LjQtMy4zMS03LjQtNy40di0xOS43NWg0MC41djE5Ljc1YzAgNC4wOS0zLjMxIDcuNC03LjQgNy40elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTUwMF9TVkdJRF8yNF8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi01MDBfU1ZHSURfMjVfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjM5NS4wOTlcXFwiIHkxPVxcXCI0NzYuMTU5XFxcIiB4Mj1cXFwiNDEzLjAxOFxcXCIgeTI9XFxcIjUwNy4xOTVcXFwiPjxzdG9wIG9mZnNldD1cXFwiLjExNlxcXCIgc3RvcC1jb2xvcj1cXFwiI0RFRTRGRlxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIi44NDdcXFwiIHN0b3AtY29sb3I9XFxcIiNCQUNCRUVcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNNDE0LjA0IDUwNS40NmgtMjAuOTVjLTQuMDkgMC03LjQtMy4zMS03LjQtNy40di0xNi40N2gzNS43NXYxNi40N2MwIDQuMDktMy4zMSA3LjQtNy40IDcuNHpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi01MDBfU1ZHSURfMjVfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNTAwX1NWR0lEXzI2X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIzNzAuNzUyXFxcIiB5MT1cXFwiMzQ1LjA0MlxcXCIgeDI9XFxcIjQzOS4zNjZcXFwiIHkyPVxcXCI0MTMuNjU2XFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNDOENCRjJcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjQUZCMEU3XFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTQwNC40IDMxMS40cy0xNy4yMyA3OS41MSAxLjMzIDEzNS45YzQ3Ljg0LTYyLjQzLTEuMzMtMTM1LjktMS4zMy0xMzUuOXpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi01MDBfU1ZHSURfMjZfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNTAwX1NWR0lEXzI3X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIzNTIuOTM2XFxcIiB5MT1cXFwiMzUwLjQ5XFxcIiB4Mj1cXFwiNDE1LjUxM1xcXCIgeTI9XFxcIjQxMy4wNjdcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0M4Q0JGMlxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNBRkIwRTdcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNMzg2LjQzIDMxNi45OXMtMTUuMjQgMjYuOTQtMTYuMzQgNjIuNzJjLS43NSAyNC40MyAxMS45MyA2Ni44NSAxMS45MyA2Ni44NXMtMjAuNzYtMzYuMDctMjAuNzYtNzAuMjMgMjUuMTctNTkuMzQgMjUuMTctNTkuMzR6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzI3XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF8yOF9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMzg5Ljc5OFxcXCIgeTE9XFxcIjM0Ny44NDZcXFwiIHgyPVxcXCI0NTYuNzkyXFxcIiB5Mj1cXFwiNDE0Ljg0XFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNDOENCRjJcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjQUZCMEU3XFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTQyMC42NSAzMTYuOTlzMzQuMSAyMi4xMiAzNC4xIDYwLjk5LTI5LjY4IDY4LjU4LTI5LjY4IDY4LjU4IDIzLjUtNDIuMTggMjMuNS03MC45YzAtMTQuMjQtMTMuOTgtNDguNzYtMjcuOTItNTguNjd6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzI4XylcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MjZcXFwiIGQ9XFxcIk0zODYuNDMgMzE2Ljk5cy02Mi4xMyA0Ny4xMi00LjQyIDEyOS41N2MtNy4wNi0xNS42LTM2LjIxLTczLjYyIDQuNDItMTI5LjU3em0zNC4yMiAwczYyLjEzIDQ3LjEyIDQuNDIgMTI5LjU3YzcuMDctMTUuNiAzNi4yMi03My42Mi00LjQyLTEyOS41N3ptLTE2LjI1LTUuNTlzLTM1LjQ4IDc5LjY2IDEuMzMgMTM1LjljMzIuMjQtNTcuNS0xLjMzLTEzNS45LTEuMzMtMTM1Ljl6XFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi01MDBfU1ZHSURfMjlfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjIzNC42OTJcXFwiIHkxPVxcXCI1NjEuNzA4XFxcIiB4Mj1cXFwiMjM0LjY5MlxcXCIgeTI9XFxcIjQ4Ni4wODhcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0MzRDVGRFxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiMxQTkwRkNcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNMjI2Ljg5IDQ4Ni40NXMtMTguMzUtMi41NC0yNC4zMSA1Ljg5Yy01Ljk2IDguNDMtOC4xNCAzMC4wMS04LjE0IDMwLjAxbDEzLjgxLS43My0xLjE2IDI1LjE0IDI1LjQ4IDE0Ljk0IDM2LjMtMTkuNTItNS41Mi0yMi43OCAxMS42LTMuMDNzLTMuNDYtMzMuMDYtMTkuNTktMjguMThjLTguMjkuODktMTAuOS43NC0xMC45Ljc0cy0yLjE4IDYuOTUtOS42NyA2LjM2Yy03LjQ5LS41OC03LjktOC44NC03LjktOC44NHpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi01MDBfU1ZHSURfMjlfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNTAwX1NWR0lEXzMwX1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIyMzUuNzQxXFxcIiB5MT1cXFwiNDczLjE5MVxcXCIgeDI9XFxcIjIzNS43NDFcXFwiIHkyPVxcXCI0OTcuMTQ3XFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNGNEFFOThcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjRkFEMUJCXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwibTIyOC43MiA0NzYuMDUtMy44MSAxNy4wMWMtLjE4LjguMjQgMS42MSAxIDEuOTIgMS45Ny44IDUuOTEgMi4xNyA5Ljk3IDIuMTcgNC4yMSAwIDguMTgtMi4zIDEwLTMuNTMuNjMtLjQyLjg5LTEuMjEuNjUtMS45M2wtNS44My0xNy4zNWExLjY4MSAxLjY4MSAwIDAgMC0xLjg5LTEuMTJsLTguNzQgMS41NWMtLjY3LjExLTEuMi42Mi0xLjM1IDEuMjh6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzMwXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF8zMV9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiLTE1MzUuNDM3XFxcIiB5MT1cXFwiNzUwLjk1NFxcXCIgeDI9XFxcIi0xNTIzLjcyOFxcXCIgeTI9XFxcIjY2OC41MVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInJvdGF0ZSgtOC4wODIgLTE5MjkuMjE2IC0xMTY5Mi42MTEpXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNDM0Q1RkRcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjMUE5MEZDXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTIwNS45NCA0ODkuMzljNS4zNC0xLjc3IDEyLjU4LS41OSAxMi44OCAxMS4zOS4yOSAxMS45OC0xMS40NSAzMS4wNy03LjI0IDM3LjcxIDQuMjYgNi43MyAxMy4zNyAxNi4yOSAxOS4xNyAyMS43My0xLjM1IDYuNC00Ljk5IDExLjc4LTQuOTkgMTEuNzhzLTIxLjM2LTkuODYtMzAuNjYtMTkuNzNjLTkuMy05Ljg3LTQuNjEtMzIuNS0uMy00OC42MSAzLjI0LTEyLjEzIDExLjE0LTE0LjI3IDExLjE0LTE0LjI3elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTUwMF9TVkdJRF8zMV8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi01MDBfU1ZHSURfMzJfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIi01NTg1LjExOFxcXCIgeTE9XFxcIjE3NS44MDRcXFwiIHgyPVxcXCItNTU3My40MDlcXFwiIHkyPVxcXCI5My4zNlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInNjYWxlKC0xIDEpIHJvdGF0ZSgtOC4wODIgLTExOC4wNDEgLTM3MzI5LjAyKVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjQzNENUZEXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzFBOTBGQ1xcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0yNjEuOTEgNDg5LjM5Yy01LjM0LTEuNzctMTIuNTgtLjU5LTEyLjg4IDExLjM5LS4yOSAxMS45OCAxMS40NSAzMS4wNyA3LjI0IDM3LjcxLTQuMjYgNi43My0xMy4zNyAxNi4yOS0xOS4xNyAyMS43MyAxLjM1IDYuNCA0Ljk5IDExLjc4IDQuOTkgMTEuNzhzMjEuMzYtOS44NiAzMC42Ni0xOS43M2M5LjMtOS44NyA0LjYxLTMyLjUuMy00OC42MS0zLjI0LTEyLjEzLTExLjE0LTE0LjI3LTExLjE0LTE0LjI3elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTUwMF9TVkdJRF8zMl8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi01MDBfU1ZHSURfMzNfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjIzNC42OTJcXFwiIHkxPVxcXCI1MzQuMzk5XFxcIiB4Mj1cXFwiMjM0LjY5MlxcXCIgeTI9XFxcIjU4Mi40NTRcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzI3NUM4OVxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiMwMTNGN0NcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNMjA4LjUzIDU4Mi40NWg1MS44NWMyLjM1IDAgNC40NS0xLjc4IDUuMjYtNC40NmwxMC40NS0zNC4zOWMxLjM2LTQuNDYtMS4zNS05LjIxLTUuMjYtOS4yMWgtNzIuMjljLTMuODcgMC02LjU4IDQuNjctNS4yOSA5LjExbDkuOTggMzQuMzljLjggMi43NCAyLjkyIDQuNTYgNS4zIDQuNTZ6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzMzXylcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MjZcXFwiIGQ9XFxcIk0yMDYuNDYgNTk4LjI3cy0uOC0xLjc2LTEuNDItMS45NWMtLjYyLS4xOS05LjQ5LS41NC0xMi43Mi0xLjM4cy0xMi41Ni0yLjE3LTE2LjU2IDEuNjFjLTMuNDggMy4zLTQuNjMgMTEgLjY3IDE1LjQzIDEuOTkgMS43MyAzLjk0IDIuMjMgMTEuMzEgMS44OXMxOC4wNC0uMjcgMjAuMzgtMy42OGMtLjA3LTUuNjUtMS42Ni0xMS45Mi0xLjY2LTExLjkyelxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNTAwX1NWR0lEXzM0X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCItMzk5MS4xMDZcXFwiIHkxPVxcXCI2MDMuMTkzXFxcIiB4Mj1cXFwiLTM5NzQuMDkzXFxcIiB5Mj1cXFwiNjAzLjE5M1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgtMSAwIDAgMSAtMzc3Mi41MjUgMClcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0Y0QjlBNFxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIi42NTJcXFwiIHN0b3AtY29sb3I9XFxcIiNGQUQxQkJcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPVxcXCJNMjE0LjY5IDU5Ni4zMXMtOC41NiAxLjkyLTExLjYyIDEuNjRjLTMuMDYtLjI4LS41IDEyLjA1LS41IDEyLjA1czguMTcuNTcgMTUuNC0xLjUzYzIuNDUtOS40NC0zLjI4LTEyLjE2LTMuMjgtMTIuMTZ6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzM0XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF8zNV9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMjExLjYyNVxcXCIgeTE9XFxcIjU4NC40NDNcXFwiIHgyPVxcXCIyOTkuMzg4XFxcIiB5Mj1cXFwiNTg0LjQ0M1xcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjMTgyNjRCXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjY1MlxcXCIgc3RvcC1jb2xvcj1cXFwiIzJEM0M2NVxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIm0yMTEuNjMgNTk1Ljg3IDQuNDUgMTMuODRzOTUuNjQtMTIuNiA4MS45Ny00My42M2MtMTEuNDMtMjUuOTYtODYuNDIgMjkuNzktODYuNDIgMjkuNzl6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzM1XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF8zNl9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMTkxLjgzN1xcXCIgeTE9XFxcIjU5NC45MjlcXFwiIHgyPVxcXCIxOTEuODM3XFxcIiB5Mj1cXFwiNjEyLjk4N1xcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjRkZEQjgwXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0ZGQkIyNFxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0yMDUuMzUgNTk2Ljk0czMuNSAxLjM3IDMuOTUgNi4yNmMuNDQgNC44OS0xIDguMTctOC40NSA5LjA3LTcuNDUuOTEtOS4zNC41Ny0xNC4wMS42OC00LjY3LjExLTExLjQ1LjU3LTEyLjQ2LTguMzItMS04Ljg4IDguMDgtMTEuMTUgMTcuNS04Ljg4IDIuOTYuNTYgMTMuNDcgMS4xOSAxMy40NyAxLjE5elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTUwMF9TVkdJRF8zNl8pXFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDI2XFxcIiBkPVxcXCJNMjY2LjE0IDU5OC4yN3MuOC0xLjc2IDEuNDItMS45NWMuNjItLjE5IDkuNDktLjU0IDEyLjcyLTEuMzggMy4yMy0uODQgMTEuOTMtMi4yNCAxNi4zMiAxLjUxIDQuMDcgMy40OCA0LjM0IDExLjE2LS4zIDE1LjQtMS45OSAxLjczLTQuMDggMi4zNS0xMS40NCAyLjAxcy0xOC4wNC0uMjctMjAuMzgtMy42OGMuMDgtNS42NCAxLjY2LTExLjkxIDEuNjYtMTEuOTF6XFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi01MDBfU1ZHSURfMzdfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjI1NC4wMjhcXFwiIHkxPVxcXCI2MDMuMTkzXFxcIiB4Mj1cXFwiMjcxLjA0XFxcIiB5Mj1cXFwiNjAzLjE5M1xcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjRjRCOUE0XFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjY1MlxcXCIgc3RvcC1jb2xvcj1cXFwiI0ZBRDFCQlxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0yNTcuOTIgNTk2LjMxczguNTYgMS45MiAxMS42MiAxLjY0YzMuMDYtLjI4LjUgMTIuMDUuNSAxMi4wNXMtOC4xNy41Ny0xNS40LTEuNTNjLTIuNDUtOS40NCAzLjI4LTEyLjE2IDMuMjgtMTIuMTZ6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzM3XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF8zOF9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMTczLjIyXFxcIiB5MT1cXFwiNTg0LjQ0M1xcXCIgeDI9XFxcIjI2MC45ODNcXFwiIHkyPVxcXCI1ODQuNDQzXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiM0NDU2NzdcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjMjkzODYxXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwibTI2MC45OCA1OTUuODctNC40NSAxMy44NHMtOTUuNjQtMTIuNi04MS45Ny00My42M2MxMS40My0yNS45NiA4Ni40MiAyOS43OSA4Ni40MiAyOS43OXpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi01MDBfU1ZHSURfMzhfKVxcXCIgLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImljb24tNTAwX1NWR0lEXzM5X1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiIHgxPVxcXCIyODAuNzcxXFxcIiB5MT1cXFwiNTk0LjkyOVxcXCIgeDI9XFxcIjI4MC43NzFcXFwiIHkyPVxcXCI2MTIuOTg3XFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNGRkRCODBcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjRkZCQjI0XFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTI2Ny4yNiA1OTYuOTRzLTMuNSAxLjM3LTMuOTUgNi4yNiAxIDguMTcgOC40NSA5LjA3IDkuMzQuNTcgMTQuMDEuNjggMTEuNDUuNTcgMTIuNDYtOC4zMmMxLTguODgtOC4wOC0xMS4xNS0xNy41LTguODgtMi45Ni41Ni0xMy40NyAxLjE5LTEzLjQ3IDEuMTl6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzM5XylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF80MF9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMjUxLjQyXFxcIiB5MT1cXFwiNDY3LjY5NlxcXCIgeDI9XFxcIjIyMC4xMTNcXFwiIHkyPVxcXCI0NjcuNjk2XFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNGNEI5QTRcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIuNjUyXFxcIiBzdG9wLWNvbG9yPVxcXCIjRkFEMUJCXFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZD1cXFwiTTI1MC43NCA0NjkuMjVjLjU3LS44MS45My0yLjg4LjQ2LTMuNDktLjg0LS42OC0xLjYzLS4yOS0yLjI0LjMuMTQtNC45Ni0uMzEtOS4wNy0uNDItMTAuMTItLjMxLTMuMDQtMy40LTguNi0xMy41LTguNnMtMTIuMDUgNy4yOS0xMi4wNSA3LjI5LS42NiA1LjE1LS40NiAxMS40MWMtLjYtLjU4LTEuMzktLjk1LTIuMjItLjI4LS40Ni42MS0uMSAyLjY4LjQ2IDMuNDkuNTcuODEuOTMgMi43MyAxLjAzIDMuNzkuMSAxLjAxLS42MyAzLjcgMi4wMyAzLjM2IDEuNTkgNi4zNSA4LjAxIDExLjY0IDExLjk5IDExLjY0IDQuMzYgMCAxMC4xNi01LjMzIDExLjgtMTEuNjUgMi43MS4zNyAxLjk4LTIuMzQgMi4wNy0zLjM1LjEzLTEuMDYuNDktMi45OCAxLjA1LTMuNzl6XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzQwXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF80MV9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiMjE1LjgwNFxcXCIgeTE9XFxcIjQ1NS41OTRcXFwiIHgyPVxcXCIyNTIuMTUyXFxcIiB5Mj1cXFwiNDU1LjU5NFxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjNEY1QzdDXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzI3NDE2OFxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIk0yNDIuMzQgNDQ1LjE5cy0xLjk3LTYuMjEtOS41My00LjcyYy03LjU1IDEuNDgtOC4wNiA1LjA2LTExLjAzIDUuMTktNS4wNi4yNC05LjExIDYuNTQtMi42MSAxMy4yMiAyLjg5IDIuOTcuNDUgNC4yNSAxLjgyIDYuODhzMS4zNiA1LjE5IDEuMzYgNS4xOSAyLjQxLTcuNzEuODItMTFjLS44Mi0xLjcgMi44Mi0yLjE2IDcuMzUtMS43NXMxMS42OC0xLjEgMTIuMjQtNC4xOGMxLjM0IDYuMzIgMi42OCA2Ljk4IDQuMzggNy45NCAxLjcuOTYgMS44IDguNiAxLjggOC42cy4zLTUuNjIgMS40OS02Ljg4Yy45OC0yLjA3IDIuODktMTAuMjIuNzMtMTIuMTlzLS4zNC04LjMxLTguODItNi4zelxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTUwMF9TVkdJRF80MV8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi01MDBfU1ZHSURfNDJfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjUwOS45NDhcXFwiIHkxPVxcXCI2MTIuMDYxXFxcIiB4Mj1cXFwiNTA5Ljk0OFxcXCIgeTI9XFxcIjU0Ny41N1xcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjQjBCOUUxXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI0U3RUZGN1xcXCIgLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9XFxcIm00NTIuNjcgNTk2LjE2IDQ1LjY1LTQ4LjU5aDY4LjlsLTYwLjk1IDY0LjQ5elxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTUwMF9TVkdJRF80Ml8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi01MDBfU1ZHSURfNDNfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjQ2MS44MzVcXFwiIHkxPVxcXCI1NjMuNzI0XFxcIiB4Mj1cXFwiNDk1LjYzMlxcXCIgeTI9XFxcIjYyMi4yNjNcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI0M4Q0JGMlxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNBRkIwRTdcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48Y2lyY2xlIGN4PVxcXCI0NzguNzNcXFwiIGN5PVxcXCI1OTIuOTlcXFwiIHI9XFxcIjMzLjc5XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2ljb24tNTAwX1NWR0lEXzQzXylcXFwiIC8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpY29uLTUwMF9TVkdJRF80NF9cXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiB4MT1cXFwiNDU1Ljc5OFxcXCIgeTE9XFxcIjU2NC4zMTNcXFwiIHgyPVxcXCI0ODkuNTk1XFxcIiB5Mj1cXFwiNjIyLjg1MVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIuMTE2XFxcIiBzdG9wLWNvbG9yPVxcXCIjREVFNEZGXFxcIiAvPjxzdG9wIG9mZnNldD1cXFwiLjg0N1xcXCIgc3RvcC1jb2xvcj1cXFwiI0JBQ0JFRVxcXCIgLz48L2xpbmVhckdyYWRpZW50PjxjaXJjbGUgY3g9XFxcIjQ3Mi43XFxcIiBjeT1cXFwiNTkzLjU4XFxcIiByPVxcXCIzMy43OVxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTUwMF9TVkdJRF80NF8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi01MDBfU1ZHSURfNDVfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjQ3OS4wMDFcXFwiIHkxPVxcXCIyMzEuMzVcXFwiIHgyPVxcXCI1MDMuMjY3XFxcIiB5Mj1cXFwiMjczLjM4XFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNDOENCRjJcXFwiIC8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjQUZCMEU3XFxcIiAvPjwvbGluZWFyR3JhZGllbnQ+PGNpcmNsZSBjeD1cXFwiNDkxLjEzXFxcIiBjeT1cXFwiMjUyLjM2XFxcIiByPVxcXCIyNC4yNlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpY29uLTUwMF9TVkdJRF80NV8pXFxcIiAvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaWNvbi01MDBfU1ZHSURfNDZfXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCIgeDE9XFxcIjQ3NC42NjZcXFwiIHkxPVxcXCIyMzEuNzcyXFxcIiB4Mj1cXFwiNDk4LjkzM1xcXCIgeTI9XFxcIjI3My44MDNcXFwiPjxzdG9wIG9mZnNldD1cXFwiLjExNlxcXCIgc3RvcC1jb2xvcj1cXFwiI0RFRTRGRlxcXCIgLz48c3RvcCBvZmZzZXQ9XFxcIi44NDdcXFwiIHN0b3AtY29sb3I9XFxcIiNCQUNCRUVcXFwiIC8+PC9saW5lYXJHcmFkaWVudD48Y2lyY2xlIGN4PVxcXCI0ODYuOFxcXCIgY3k9XFxcIjI1Mi43OVxcXCIgcj1cXFwiMjQuMjZcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaWNvbi01MDBfU1ZHSURfNDZfKVxcXCIgLz48L2c+PC9zeW1ib2w+PHN5bWJvbCAgdmlld0JveD1cXFwiMCAwIDEyOCAxMjhcXFwiIGlkPVxcXCJpY29uLWljb25cXFwiPjxwYXRoIGQ9XFxcIk0xMTUuMTQ3LjA2MmExMyAxMyAwIDAgMSA0Ljk0Ljk0NWMxLjU1LjYzIDIuOTA3IDEuNTI2IDQuMDY5IDIuNjg4YTEzLjE0OCAxMy4xNDggMCAwIDEgMi43NjEgNC4wNjljLjY3OCAxLjU1IDEuMDE3IDMuMjQ1IDEuMDE3IDUuMDg2djEwMi4zYzAgMy42ODEtMS4xODcgNi43MzMtMy41NiA5LjE1NS0yLjM3MyAyLjQyMi01LjM1MiAzLjYzMy04LjkzNyAzLjYzM0gxMi45OTJjLTMuODc1IDAtNy0xLjI2LTkuMzczLTMuNzc5LTIuMzczLTIuNTE4LTMuNTYtNS42NjctMy41Ni05LjQ0NVYxMi43MDRjMC0zLjM5IDEuMTYzLTYuMzQ1IDMuNDg4LTguODYzQzUuODcyIDEuMzIgOC45NzIuMDYyIDEyLjg0Ny4wNjJoMTAyLjN6TTgxLjQzNCAxMDkuMDQ3YzEuNzQ0IDAgMy4wMDMtLjQxMiAzLjc3OC0xLjIzNS43NzUtLjgyNCAxLjE2My0xLjkxNCAxLjE2My0zLjI3IDAtMS4yNi0uMzg4LTIuMzI1LTEuMTYzLTMuMTk3LS43NzUtLjg3Mi0yLjAzNC0xLjMwNy0zLjc3OC0xLjMwN0g3Mi41N2MuMDk3LS4xOTQuMTQ1LS40ODUuMTQ1LS44NzJWMjcuMDloOS4wMWMxLjc0MyAwIDIuOTU0LS40MzYgMy42MzMtMS4zMDguNjc4LS44NzIgMS4wMTctMS45MzggMS4wMTctMy4xOTcgMC0xLjI2LS4zNC0yLjMyNS0xLjAxNy0zLjE5Ny0uNjc5LS44NzItMS44OS0xLjMwOC0zLjYzMy0xLjMwOEg0Ni4yNjhjLTEuNzQzIDAtMi45NTQuNDM2LTMuNjMyIDEuMzA4LS42NzguODcyLTEuMDE4IDEuOTM4LTEuMDE4IDMuMTk3IDAgMS4yNi4zNCAyLjMyNSAxLjAxOCAzLjE5Ny42NzguODcyIDEuODg5IDEuMzA4IDMuNjMyIDEuMzA4aDguMTM4djcyLjA3NWMwIC4xOTMuMDI0LjMzOS4wNzMuNDM2LjA0OC4wOTYuMDcyLjI0Mi4wNzIuNDM2SDQ2LjU2Yy0xLjc0NCAwLTMuMDAzLjQzNS0zLjc3OCAxLjMwNy0uNzc1Ljg3Mi0xLjE2MyAxLjkzOC0xLjE2MyAzLjE5NyAwIDEuMzU2LjM4OCAyLjQ0NiAxLjE2MyAzLjI3Ljc3NS44MjMgMi4wMzQgMS4yMzUgMy43NzggMS4yMzVoMzQuODc1elxcXCIgLz48L3N5bWJvbD48c3ltYm9sICB2aWV3Qm94PVxcXCIwIDAgNTc2MCAzMDQwXFxcIiBpZD1cXFwiaWNvbi1sb2dpbi1iZ1xcXCI+PGltYWdlIHdpZHRoPVxcXCI1NzYwXFxcIiBoZWlnaHQ9XFxcIjMwNDBcXFwiIGhyZWY9XFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFGb0FBQUF2Z0FRTUFBQUMxUUthZ0FBQUFCR2RCVFVFQUFMR1BDL3hoQlFBQUFDQmpTRkpOIEFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFCbEJNVkVVc05Fci8vLzkxdi95UEFBQUEgQVdKTFIwUUIvd0l0M2dBQUFBZDBTVTFGQitZQkJRWXlOMWMzQm5FQUFBaGpTVVJCVkhqYTdjRXhBUUFBQU1LZzlVOXREQitnQUFBQSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIEFBQUFBQUFBQUFBQUFBQ0F0d0Z6endBQlkzVnJSUUFBQUNWMFJWaDBaR0YwWlRwamNtVmhkR1VBTWpBeU1pMHdNUzB3TlZRd05qbzEgTURvMU15c3dNRG93TUNmTmxWb0FBQUFsZEVWWWRHUmhkR1U2Ylc5a2FXWjVBREl3TWpJdE1ERXRNRFZVTURZNk5UQTZOVFFyTURBNiBNRENUTnhOb0FBQUFBRWxGVGtTdVFtQ0NcXFwiPjwvaW1hZ2U+PC9zeW1ib2w+PHN5bWJvbCAgdmlld0JveD1cXFwiMCAwIDcwMCA3MDBcXFwiIGlkPVxcXCJpY29uLWxvZ2luLWJveC1iZ1xcXCI+PHN0eWxlPiNpY29uLWxvZ2luLWJveC1iZyAuc3Qwe2ZpbGw6I2U1ZTZlYn0jaWNvbi1sb2dpbi1ib3gtYmcgLnN0MXtmaWxsOiNmZmZ9I2ljb24tbG9naW4tYm94LWJnIC5zdDJ7ZmlsbDojODRhOWZmfSNpY29uLWxvZ2luLWJveC1iZyAuc3Qze2ZpbGw6IzA1MGY2NH0jaWNvbi1sb2dpbi1ib3gtYmcgLnN0NHtmaWxsOiMxNTViY2R9I2ljb24tbG9naW4tYm94LWJnIC5zdDV7ZmlsbDojZmZiZDAwfSNpY29uLWxvZ2luLWJveC1iZyAuc3Q2e2ZpbGw6I2ZmNjU0Zn0jaWNvbi1sb2dpbi1ib3gtYmcgLnN0OXtmaWxsOiNmNWJkYzh9I2ljb24tbG9naW4tYm94LWJnIC5zdDEwe2ZpbGw6I2VhODA5Nn0jaWNvbi1sb2dpbi1ib3gtYmcgLnN0MTF7b3BhY2l0eTowfSNpY29uLWxvZ2luLWJveC1iZyAuc3QxM3tmaWxsOiNkY2EwMDB9PC9zdHlsZT48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMTAxLjggMTc2LjdjMjEuNC0xOS44IDQ4LjgtMzMuMiA3Ny44LTM3LjIgOTIuNC0xMi42IDE1OC4yIDc4LjEgMjQwLjMgMTA0LjkgNDAuOCAxMy4zIDg1LjQgMTIuNiAxMjUuNCAyOCA2OC41IDI2LjIgMTMxLjQgMTE3LjggMTAxIDE5MS42LTIzLjcgNTcuNS03OS42IDcxLjgtMTM0LjYgNTQtMzMuNS0xMC45LTY0LjEtMjkuNC05Ny42LTQwLjUtMzguMS0xMi42LTc4LjctMTUuMS0xMTguOS0xNi43cy04MC42LTIuNC0xMTkuNi0xMi03Ny0yOC45LTEwMS4yLTYwLjlDNDAuOCAzNDMuNCA0OCAyNjAuOCA3My4xIDIxMy43YzcuNC0xMy45IDE3LjItMjYuMyAyOC43LTM3elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QxXFxcIiBkPVxcXCJNODIgMjU3LjFjNS43LTIzLjIgMTguOS00NC43IDM3LjMtNjAuNGwxLjctMS41IDEuOC0xLjQgMS44LTEuNCAxLjgtMS4zYy42LS40IDEuMi0uOSAxLjgtMS4zbDEuOS0xLjNjLjYtLjQgMS4yLS45IDEuOS0xLjNsMS45LTEuMmM1LjEtMy4yIDEwLjUtNiAxNi4xLTguNCAxMS4xLTQuNyAyMy03LjggMzUuMS05IDEyLjEtMS4xIDI0LjMtLjUgMzYuMSAxLjUgNS45IDEgMTEuOCAyLjQgMTcuNiA0IC43LjIgMS41LjQgMi4yLjZsMi4yLjcgMi4yLjcgMi4xLjcgMi4xLjcgMi4xLjggMi4xLjggMi4xLjhjNS42IDIuMiAxMS4xIDQuNiAxNi41IDcuMiA1LjQgMi42IDEwLjcgNS40IDE1LjkgOC4zIDEwLjQgNS45IDIwLjYgMTIuMiAzMC41IDE4LjgtMTAuNC01LjktMjAuNy0xMS44LTMxLjQtMTcuMi01LjMtMi43LTEwLjctNS4zLTE2LjEtNy43LTUuNC0yLjQtMTAuOS00LjctMTYuNS02LjdsLTIuMS0uOC0yLjEtLjctMi4xLS43LTIuMS0uNy0yLjEtLjctMi4xLS42LTIuMS0uNi0yLjEtLjZjLTUuNy0xLjUtMTEuNS0yLjgtMTcuMy0zLjctMTEuNi0xLjktMjMuNS0yLjUtMzUuMi0xLjMtMTEuNyAxLjEtMjMuMiA0LTM0LjEgOC41LTUuNCAyLjItMTAuNyA0LjktMTUuOCA3LjlsLTEuOSAxLjFjLS42LjQtMS4yLjgtMS45IDEuMmwtMS44IDEuMmMtLjYuNC0xLjIuOC0xLjggMS4zbC0xLjggMS4zLTEuOCAxLjMtMS44IDEuMy0xLjcgMS40Yy0xOC4yIDE1LjItMzIgMzUuNy0zOS4xIDU4LjR6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDJcXFwiIGQ9XFxcIk0xODMuMSA1NDMuMmMtLjMgMS4yLS41IDEuOC0uNSAxLjgtLjctLjUtMS40LS45LTIuMS0xLjQtMTIwLjgtODIuOC03Mi42LTIzMi4yLTcyLjYtMjMyLjIgMTE1LjcgNjcuMyA4MC4xIDIxMy44IDc1LjIgMjMxLjh6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDNcXFwiIGQ9XFxcIk0xODMuMSA1NDMuMmMtLjMgMS4yLS41IDEuOC0uNSAxLjgtLjctLjUtMS40LS45LTIuMS0xLjQtMTAuMS0yOS45LTIwLjEtNTkuOC0yOS44LTg5LjgtNS0xNS41LTEwLTMxLjEtMTQuOC00Ni43bC0zLjYtMTEuNy0zLjUtMTEuN2MtMS4yLTMuOS0yLjItNy44LTMuNC0xMS44LS42LTItMS4xLTMuOS0xLjYtNS45bC0xLjYtNS45IDEuNiA1LjljLjUgMiAxLjEgMy45IDEuNyA1LjkgMS4yIDMuOSAyLjMgNy44IDMuNSAxMS43bDMuNiAxMS43IDMuNyAxMS43YzUgMTUuNSAxMC4yIDMxIDE1LjQgNDYuNSAxMC40IDMwIDIwLjggNTkuOSAzMS40IDg5Ljd6bS00NS4yLTE1OC4zYy0uMSAwLS4yIDAtLjQtLjEtLjMtLjEtLjQtLjUtLjItLjggMy43LTcuMiA2LTE1LjMgNi43LTIzLjQgMC0uMy4zLS41LjYtLjVzLjUuMy41LjZjLS43IDguMi0zLjEgMTYuNS02LjkgMjMuOCAwIC4zLS4yLjQtLjMuNHptMTYuMSA0NS42aC0uM2MtLjMtLjEtLjQtLjUtLjMtLjcgMy40LTguMyA3LjYtMTYuNCAxMi4zLTI0LjEuMi0uMy41LS4zLjgtLjIuMy4yLjMuNS4yLjgtNC43IDcuNi04LjggMTUuNi0xMi4yIDIzLjktLjEuMS0uMy4zLS41LjN6bS0xNi42IDkuOGgtLjNjLTkuNS0zLjktMTguMy05LjMtMjYuMS0xNi4xLS4yLS4yLS4zLS42LS4xLS44LjItLjIuNi0uMy44LS4xIDcuNyA2LjcgMTYuMyAxMiAyNS43IDE1LjkuMy4xLjQuNS4zLjcgMCAuMi0uMS4zLS4zLjR6bS0xMS41LTQ5LjhjLS4yLjEtLjQuMS0uNi0uMWwtMTkuMi0xNWMtLjItLjItLjMtLjYtLjEtLjguMi0uMi42LS4zLjgtLjFsMTkuMiAxNWMuMi4yLjMuNi4xLjggMCAuMS0uMS4yLS4yLjJ6bTQ0LjggODcuOWgtLjNjLS4zLS4xLS40LS41LS4zLS43bDEwLjEtMjMuNWMuMS0uMy41LS40LjctLjMuMy4xLjQuNS4zLjdsLTEwLjEgMjMuNWMwIC4xLS4yLjMtLjQuM3ptLTE5LjEgMy4yaC0uM2wtMjQuMy0xMGMtLjMtLjEtLjQtLjUtLjMtLjcuMS0uMy41LS40LjctLjNsMjQuMyAxMGMuMy4xLjQuNS4zLjctLjEuMS0uMy4zLS40LjN6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDRcXFwiIGQ9XFxcIk0xODIuMyA1NDMuMmMuMyAxLjIuNCAxLjkuNCAxLjktLjgtLjEtMS43LS4yLTIuNS0uM0MzNSA1MjUgMTEgMzY5LjggMTEgMzY5LjhjMTMzLjUgOC4yIDE2Ny41IDE1NS4xIDE3MS4zIDE3My40elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QxXFxcIiBkPVxcXCJNMTgyLjMgNTQzLjJjLjMgMS4yLjQgMS45LjQgMS45LS44LS4xLTEuNy0uMi0yLjUtLjMtMjIuNS0yMi4xLTQ0LjgtNDQuNC02Ni45LTY2LjgtMTEuNS0xMS42LTIyLjktMjMuMy0zNC4yLTM1LjFsLTguNS04LjgtOC40LTguOWMtMi44LTMtNS41LTYtOC4zLTktMS40LTEuNS0yLjctMy00LjEtNC42bC00LTQuNiA0LjEgNC41YzEuNCAxLjUgMi43IDMgNC4xIDQuNSAyLjggMyA1LjYgNiA4LjQgOC45bDguNSA4LjggOC42IDguN2MxMS41IDExLjYgMjMgMjMuMSAzNC43IDM0LjYgMjIuNSAyMi4yIDQ1LjIgNDQuMyA2OC4xIDY2LjJ6TTcwLjcgNDIyLjFjLS4xLjEtLjIuMS0uMy4xLS4zIDAtLjYtLjMtLjYtLjYuMS04LjEtMS41LTE2LjQtNC41LTIzLjktLjEtLjMgMC0uNi4zLS43LjMtLjEuNiAwIC43LjMgMyA3LjcgNC42IDE2LjEgNC42IDI0LjQgMCAuMS0uMS4zLS4yLjR6bTM0LjkgMzMuNGMtLjEuMS0uMi4xLS4zLjEtLjMgMC0uNi0uMi0uNi0uNS0uNy05LS42LTE4LjEuMi0yNyAwLS4zLjMtLjUuNi0uNXMuNS4zLjUuNmMtLjggOC45LS45IDE3LjktLjIgMjYuOC4xLjIgMCAuNC0uMi41em0tMTAuNCAxNi4yYy0uMS4xLS4yLjEtLjMuMS0xMC4zLjgtMjAuNS0uMS0zMC41LTIuNy0uMy0uMS0uNS0uNC0uNC0uNy4xLS4zLjQtLjUuNy0uNCA5LjkgMi41IDIwIDMuNCAzMC4xIDIuNi4zIDAgLjYuMi42LjUgMCAuNC0uMS41LS4yLjZ6bS0zMi42LTM5LjNjLS4xLjEtLjMuMi0uNS4ybC0yMy45LTQuOGMtLjMtLjEtLjUtLjQtLjQtLjcuMS0uMy40LS41LjctLjRsMjMuOSA0LjhjLjMuMS41LjQuNC43LS4xLjEtLjEuMi0uMi4yem03OS41IDU4LjRjLS4xLjEtLjIuMS0uMy4xLS4zIDAtLjYtLjItLjYtLjVsLTEuNS0yNS41YzAtLjMuMi0uNi41LS42cy42LjIuNi41bDEuNSAyNS41YzAgLjItLjEuNC0uMi41em0tMTUuNyAxMS41Yy0uMS4xLS4yLjEtLjMuMWwtMjYuMiAyYy0uMyAwLS42LS4yLS42LS41cy4yLS42LjUtLjZsMjYuMi0yYy4zIDAgLjYuMi42LjUgMCAuMi0uMS40LS4yLjV6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDVcXFwiIGQ9XFxcIk0yNTkuNiA1MDMuM2MxLjIuNSAxLjguNyAxLjguNy0uNS43LTEuMSAxLjMtMS43IDEuOUMxNjQgNjE2LjggMjAuOSA1NTIuMyAyMC45IDU1Mi4zYzc5LjctMTA3LjQgMjIxLjQtNTUuOSAyMzguNy00OXpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MVxcXCIgZD1cXFwiTTI1OS42IDUwMy4zYzEuMi41IDEuOC43IDEuOC43LS41LjctMS4xIDEuMy0xLjcgMS45LTMwLjggNi44LTYxLjYgMTMuMy05Mi41IDE5LjctMTYgMy4zLTMyIDYuNS00OCA5LjZsLTEyIDIuMy0xMiAyLjJjLTQgLjctOCAxLjQtMTIuMSAyLTIgLjQtNCAuNi02IC45bC02LjEuOSA2LTFjMi0uMyA0LS42IDYtMSA0LS43IDgtMS40IDEyLTIuMmwxMi0yLjMgMTItMi40YzE2LTMuMyAzMS45LTYuNyA0Ny45LTEwLjIgMzEtNi45IDYxLjktMTMuOSA5Mi43LTIxLjF6TTk3LjMgNTMwLjhjMCAuMSAwIC4yLS4xLjMtLjIuMy0uNS4zLS44LjItNi44LTQuNS0xNC42LTcuNy0yMi41LTkuMy0uMy0uMS0uNS0uNC0uNC0uNy4xLS4zLjQtLjUuNy0uNCA4LjEgMS42IDE2IDQuOSAyMi45IDkuNS4xIDAgLjEuMi4yLjR6bTQ3LTExLjFjMCAuMSAwIC4yLS4xLjMtLjIuMy0uNS40LS44LjItNy45LTQuMy0xNS41LTkuNC0yMi41LTE0LjktLjItLjItLjMtLjYtLjEtLjguMi0uMi42LS4zLjgtLjEgNyA1LjUgMTQuNiAxMC41IDIyLjQgMTQuOC4yLjEuMy4zLjMuNXptNy45IDE3LjZjMCAuMSAwIC4yLS4xLjMtNC45IDktMTEuMyAxNy4yLTE4LjggMjQuMS0uMi4yLS42LjItLjggMC0uMi0uMi0uMi0uNiAwLS44IDcuNS02LjkgMTMuNy0xNC45IDE4LjYtMjMuOC4yLS4zLjUtLjQuOC0uMi4yLjEuMy4zLjMuNHptLTUwLjcgNS45Yy4xLjIgMCAuNC0uMS42bC0xNyAxNy41Yy0uMi4yLS42LjItLjggMC0uMi0uMi0uMi0uNiAwLS44bDE3LTE3LjVjLjItLjIuNi0uMi44IDAgLjEgMCAuMS4xLjEuMnptOTIuMy0zNC44YzAgLjEgMCAuMi0uMS4zLS4yLjMtLjUuNC0uOC4ybC0yMi4yLTEyLjdjLS4zLS4yLS40LS41LS4yLS44LjItLjMuNS0uNC44LS4ybDIyLjIgMTIuN2MuMi4yLjMuMy4zLjV6bTEuMSAxOS40YzAgLjEgMCAuMi0uMS4zbC0xMi43IDIzLjFjLS4yLjMtLjUuNC0uOC4yLS4zLS4yLS40LS41LS4yLS44bDEyLjctMjMuMWMuMi0uMy41LS40LjgtLjIuMS4yLjMuMy4zLjV6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDJcXFwiIGQ9XFxcIk02MDguOCA0MzAuM2MtMSAuMi0yLjQtLjMtNC40LTEuNC0zLjItMS45LTguMy00LjktMTAuMi02LjEgMyA2LjMgNS44IDEyLjcgOC4zIDE5LjIgNC41LTEgNy45LS4xIDEwLjEgMS40IDIuMiAxLjUgMy4zIDMuNiAzLjMgNC42LS4xIDItMS44IDIuNC00LjkuMy0xLjYtMS4xLTMuNy0yLjYtNS41LTMuOS0xLjMtLjktMi4zLTEuNy0yLjgtMiAuOCAyIDEuNSA0IDIuMiA2aC4yYzEuMy4yIDMuMSAzLjEgMy45IDQuMSAxLjcgMi4zIDMgNC45IDMuMiA3LjguMSAxLjItLjEgMi42LTEuMiAzLjItMS4yLjYtMi42LS4zLTMuNS0xLjMtMi41LTIuOC00LTYuNS00LjEtMTAuMiAwLTEtLjEtMy4zIDEuMi0zLjUtLjgtMi0xLjUtMy45LTIuMy01LjktLjEuNi0uNCAxLjktLjcgMy40LS41IDIuMS0xLjEgNC43LTEuNyA2LjQtMS4xIDMuNS0yLjcgNC4xLTQgMi44LS43LS43LTEuMS0yLjctLjMtNS4yLjgtMi40IDIuNi01LjMgNi42LTcuNy0yLjctNi40LTUuNi0xMi43LTguOC0xOC45LS4xLjgtLjMgMi4yLS41IDMuNy0uMyAyLjYtLjkgNS43LTEuNCA3LjgtLjUgMi4xLTEuMiAzLjQtMiA0LS44LjYtMS43LjQtMi41LS4zLS45LS43LTEuNi0zLjEtLjktNi4yLjYtMi45IDIuNi02LjUgNy05LjYtMy41LTYuNi03LjItMTMuMS0xMS4yLTE5LjR2LjNjMCAxIDAgMi41LS4xIDQuMS0uMSAxLjYtLjIgMy40LS4zIDUtLjEgMS43LS40IDMuMy0uNSA0LjYtLjggNS4zLTMgNi42LTUuMiA1LTEuMi0uOC0yLjEtMy43LTEuNy03LjQuMi0xLjkuOS00IDIuMi02LjIgMS4xLTIgMi44LTQuMiA1LjItNi4zLTMuOC01LjgtNy44LTExLjUtMTItMTcgLjEgMS4yLjIgMi44LjIgNC42LjEgMS44LjEgMy45LjEgNS44djIuOGMwIC45LS4xIDEuOC0uMSAyLjUtLjQgNi4xLTIuOCA3LjgtNS41IDYuMi0uNy0uNC0xLjQtMS40LTEuOS0yLjhzLS44LTMuMy0uNy01LjRjLjEtMi4yLjctNC42IDEuOS03LjMgMS4xLTIuNCAyLjgtNSA1LjItNy42LTQuMi01LjQtOC41LTEwLjUtMTMuMS0xNS41bDItMS44YzQuNSA1LjIgOC44IDEwLjUgMTIuOSAxNiAzLjEtMS42IDYuMS0yLjUgOC44LTIuNyAzLS4zIDUuNi4xIDcuOC45czQgMS45IDUuMyAzLjFjMS4yIDEuMiAyIDIuNCAyLjIgMy4zLjcgMy41LTIgNC43LTggMi41LTMuMS0xLjItNy4zLTIuOC0xMC43LTQuMi0xLjctLjYtMy4zLTEuMi00LjQtMS42IDQuMSA1LjYgOCAxMS41IDExLjYgMTcuNCAyLjktMS4yIDUuNi0xLjcgOC0xLjggMi42IDAgNC44LjUgNi43IDEuNCAzLjggMS43IDUuOCA0LjUgNiA2IC4zIDMuMS0yIDQtNy4xIDEuNi0yLjYtMS4zLTYuMS0zLTktNC40LTEuNC0uNy0yLjgtMS4zLTMuNy0xLjgtLjEgMC0uMS0uMS0uMi0uMSAzLjkgNi40IDcuNSAxMyAxMC44IDE5LjggNS4xLTEuNiA5LjItLjkgMTIgLjcgMi44IDEuNiA0LjMgNCA0LjQgNS4yLS43IDEuMS0xLjIgMS44LTIuMiAyek01NTIuMSAzNzMuN2MtLjUgMS4xLS44IDEuNy0uOCAxLjdsLTEuOC0xLjhjLTEwNS4zLTEwMS44LTMyLjgtMjQxLjEtMzIuOC0yNDEuMSAxMDIuNyA4NS43IDQzLjIgMjI0LjIgMzUuNCAyNDEuMnpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MVxcXCIgZD1cXFwiTTU1Mi4xIDM3My43Yy0uNSAxLjEtLjggMS43LS44IDEuN2wtMS44LTEuOGMtNS0zMS4xLTkuOC02Mi4zLTE0LjQtOTMuNS0yLjQtMTYuMS00LjctMzIuMy02LjgtNDguNWwtMS42LTEyLjEtMS41LTEyLjJjLS41LTQuMS0uOS04LjEtMS40LTEyLjItLjItMi0uNC00LjEtLjYtNi4xbC0uNS02LjEuNiA2LjFjLjIgMiAuNCA0LjEuNyA2LjEuNSA0IDEgOC4xIDEuNSAxMi4xbDEuNiAxMi4xIDEuNyAxMi4xYzIuNCAxNi4xIDQuOSAzMi4zIDcuNSA0OC40IDUuMSAzMS40IDEwLjMgNjIuNyAxNS44IDkzLjl6TTUzMy45IDIxMGMtLjEgMC0uMiAwLS4zLS4xLS4zLS4yLS4zLS41LS4xLS44IDQuOS02LjUgOC41LTE0LjEgMTAuNi0yMS45LjEtLjMuNC0uNS43LS40LjMuMS41LjQuNC43LTIuMSA4LTUuOCAxNS43LTEwLjcgMjIuMy0uMy4xLS41LjItLjYuMnptOC4zIDQ3LjZjLS4xIDAtLjIgMC0uMy0uMS0uMy0uMi0uMy0uNS0uMi0uOCA0LjgtNy42IDEwLjItMTQuOSAxNi4yLTIxLjcuMi0uMi42LS4zLjgtLjEuMi4yLjMuNi4xLjgtNS45IDYuNy0xMS4zIDEzLjktMTYuMSAyMS41LS4xLjMtLjMuNC0uNS40em0tMTggNi45Yy0uMSAwLS4yIDAtLjMtLjEtOC43LTUuNC0xNi41LTEyLjItMjMtMjAuMi0uMi0uMi0uMi0uNi4xLS44LjItLjIuNi0uMi44LjEgNi40IDcuOSAxNC4xIDE0LjYgMjIuNyAxOS45LjMuMi4zLjUuMi44LS4yLjItLjQuMy0uNS4zem0tMy01MWMtLjIgMC0uNCAwLS41LS4ybC0xNi41LTE4Yy0uMi0uMi0uMi0uNiAwLS44LjItLjIuNi0uMi44IDBsMTYuNSAxOGMuMi4yLjIuNiAwIC44LS4xLjItLjIuMi0uMy4yem0yOS41IDk0LjJjLS4xIDAtLjIgMC0uMy0uMS0uMy0uMi0uMy0uNS0uMi0uOGwxMy45LTIxLjVjLjItLjMuNS0uMy44LS4yLjMuMi4zLjUuMi44bC0xMy45IDIxLjVjLS4xLjItLjMuMy0uNS4zem0tMTkuNS0uMWMtLjEgMC0uMiAwLS4zLS4xbC0yMi4zLTEzLjljLS4zLS4yLS4zLS41LS4yLS44LjItLjMuNS0uMy44LS4ybDIyLjMgMTMuOWMuMy4yLjMuNS4yLjgtLjEuMi0uMy4zLS41LjN6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDRcXFwiIGQ9XFxcIk01MjYuNiAzODIuOGMtMSAuNy0xLjYgMS0xLjYgMS0uMi0uOC0uNC0xLjYtLjYtMi41LTM1LTE0Mi4yIDEwMC41LTIyMS41IDEwMC41LTIyMS41IDQxLjUgMTI3LjItODIuNyAyMTIuOC05OC4zIDIyM3pcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0M1xcXCIgZD1cXFwiTTUyNi42IDM4Mi44Yy0xIC43LTEuNiAxLTEuNiAxLS4yLS44LS40LTEuNi0uNi0yLjUgMTIuMy0yOSAyNC44LTU4IDM3LjUtODYuOCA2LjYtMTQuOSAxMy4zLTI5LjggMjAtNDQuN2w1LjEtMTEuMSA1LjItMTEuMWMxLjctMy43IDMuNi03LjMgNS4zLTExIC45LTEuOCAxLjgtMy42IDIuNy01LjVsMi44LTUuNC0yLjcgNS41Yy0uOSAxLjgtMS44IDMuNi0yLjcgNS41LTEuNyAzLjctMy41IDcuNC01LjIgMTEuMWwtNS4xIDExLjEtNSAxMS4yYy02LjYgMTQuOS0xMyAyOS45LTE5LjQgNDQuOS0xMi4yIDI5LjItMjQuMyA1OC41LTM2LjMgODcuOHptNzEuNi0xNDguM2MtLjEtLjEtLjItLjItLjItLjMtLjEtLjMgMC0uNi4zLS43IDcuNi0yLjkgMTQuNy03LjQgMjAuNi0xMyAuMi0uMi42LS4yLjggMCAuMi4yLjIuNiAwIC44LTYgNS43LTEzLjMgMTAuMi0yMSAxMy4yLS4xLjEtLjMuMS0uNSAwek01ODAgMjc5LjNjLS4xLS4xLS4yLS4xLS4yLS4yLS4xLS4zIDAtLjYuMy0uOCA4LjEtMy45IDE2LjYtNy4yIDI1LjItOS43LjMtLjEuNi4xLjcuNC4xLjMtLjEuNi0uNC43LTguNiAyLjUtMTcgNS44LTI1IDkuNy0uMyAwLS41IDAtLjYtLjF6bS0xOS0zLjhjLS4xLS4xLS4yLS4xLS4yLS4zLTQuNS05LjMtNy40LTE5LjEtOC43LTI5LjMgMC0uMy4yLS42LjUtLjZzLjYuMi42LjVjMS4zIDEwLjEgNC4yIDE5LjggOC42IDI5IC4xLjMgMCAuNi0uMy44LS4xIDAtLjMgMC0uNS0uMXptMjQuNi00NC43Yy0uMi0uMS0uMy0uMi0uNC0uNGwtNC40LTI0Yy0uMS0uMy4xLS42LjUtLjcuMy0uMS42LjEuNy41bDQuNCAyNGMuMS4zLS4xLjYtLjUuNy0uMS0uMS0uMi0uMS0uMy0uMXptLTI1LjEgOTUuNGMtLjEtLjEtLjItLjEtLjItLjItLjEtLjMgMC0uNi4zLS44bDIzLjItMTAuOGMuMy0uMS42IDAgLjguMy4xLjMgMCAuNi0uMy44bC0yMy4yIDEwLjhjLS4yIDAtLjQgMC0uNi0uMXptLTE2LjQtMTAuNGMtLjEtLjEtLjItLjEtLjItLjJsLTExLjUtMjMuN2MtLjEtLjMgMC0uNi4zLS44LjMtLjEuNiAwIC44LjNsMTEuNSAyMy43Yy4xLjMgMCAuNi0uMy44LS4yIDAtLjUgMC0uNi0uMXpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0NVxcXCIgZD1cXFwiTTQ4Mi4yIDQxNS4xYy0xLjIgMC0xLjktLjEtMS45LS4xbC45LTIuNEM1MzIuNCAyNzUuNCA2ODkgMjg2LjIgNjg5IDI4Ni4yYy0zNy40IDEyOC41LTE4OC4yIDEyOS4zLTIwNi44IDEyOC45elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QxXFxcIiBkPVxcXCJNNDgyLjIgNDE1LjFjLTEuMiAwLTEuOS0uMS0xLjktLjFsLjktMi40YzI2LjUtMTcgNTMuMi0zMy45IDc5LjktNTAuNiAxMy45LTguNiAyNy44LTE3LjIgNDEuNy0yNS42bDEwLjUtNi4zIDEwLjUtNi4yYzMuNS0yLjEgNy4xLTQuMSAxMC42LTYuMSAxLjgtMSAzLjYtMiA1LjMtM2w1LjQtMi45LTUuMyAzYy0xLjggMS0zLjYgMi01LjMgMy0zLjUgMi4xLTcgNC4xLTEwLjUgNi4ybC0xMC41IDYuNC0xMC40IDYuNGMtMTMuOCA4LjYtMjcuNiAxNy40LTQxLjQgMjYuMi0yNi42IDE3LjItNTMuMSAzNC41LTc5LjUgNTJ6TTYyNC45IDMzM2MwLS4xLS4xLS4yIDAtLjQuMS0uMy40LS41LjctLjQgNy45IDEuOCAxNi4zIDIuMiAyNC4zLjkuMyAwIC42LjIuNy41IDAgLjMtLjIuNi0uNS43LTguMiAxLjMtMTYuNyAxLTI0LjgtLjlsLS40LS40em0tNDAuMyAyNi43YzAtLjEtLjEtLjIgMC0uMyAwLS4zLjMtLjUuNi0uNSA4LjkgMS4zIDE3LjggMy40IDI2LjMgNi4yLjMuMS41LjQuNC43LS4xLjMtLjQuNS0uNy40LTguNS0yLjctMTcuMy00LjgtMjYuMS02LjEtLjMtLjEtLjQtLjMtLjUtLjR6bS0xMy41LTEzLjhjLS4xLS4xLS4xLS4yLS4xLS4zIDEuNS0xMC4yIDQuNi0yMCA5LjMtMjkuMi4xLS4zLjUtLjQuOC0uMi4zLjEuNC41LjIuOC00LjYgOS4xLTcuNyAxOC43LTkuMiAyOC44IDAgLjMtLjMuNS0uNi41LS4yLS4yLS40LS4zLS40LS40em00NS41LTIzLjFjLS4xLS4yLS4xLS40LS4xLS42bDkuOS0yMi4zYy4xLS4zLjUtLjQuOC0uMy4zLjEuNC41LjMuOGwtOS45IDIyLjNjLS4xLjMtLjUuNC0uOC4zbC0uMi0uMnptLTc0LjUgNjQuNmMwLS4xLS4xLS4yIDAtLjMuMS0uMy4zLS41LjctLjVsMjUuMiA0LjJjLjMuMS41LjMuNS43LS4xLjMtLjMuNS0uNy41bC0yNS4yLTQuMmMtLjMtLjEtLjQtLjItLjUtLjR6bS03LjctMTcuOGMwLS4xLS4xLS4yIDAtLjNsMy45LTI2YzAtLjMuMy0uNS42LS41cy41LjMuNS42bC0zLjkgMjZjMCAuMy0uMy41LS42LjVzLS40LS4yLS41LS4zelxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QyXFxcIiBkPVxcXCJNNDQ1IDIyOWMtLjEgMSAuNCAyLjQgMS42IDQuMyAyLjEgMy4xIDUuNCA4IDYuNiA5LjktNi40LTIuNy0xMy01LjEtMTkuNi03LjMuOC00LjUtLjMtNy45LTEuOS0xMC0xLjYtMi4yLTMuNy0zLjEtNC44LTMtMiAuMi0yLjMgMS45IDAgNC45IDEuMSAxLjUgMi44IDMuNSA0LjIgNS4zIDEgMS4yIDEuOCAyLjIgMi4yIDIuNy0yLS43LTQuMS0xLjMtNi4xLTEuOXYtLjJjLS4zLTEuMy0zLjMtMy00LjMtMy43LTIuNC0xLjYtNS4xLTIuNy03LjktMi44LTEuMiAwLTIuNi4zLTMuMSAxLjQtLjUgMS4yLjUgMi42IDEuNSAzLjQgMi45IDIuNCA2LjcgMy42IDEwLjQgMy41IDEgMCAzLjMgMCAzLjUtMS40IDIgLjcgNCAxLjMgNiAyLS42LjItMS45LjUtMy40LjktMi4xLjYtNC42IDEuNC02LjMgMi0zLjQgMS4zLTQgMi45LTIuNiA0LjIuNy42IDIuOCAxIDUuMiAwIDIuNC0uOSA1LjItMi45IDcuMy03IDYuNiAyLjMgMTMgNC45IDE5LjMgNy43LS44LjEtMi4yLjQtMy43LjctMi41LjUtNS42IDEuMi03LjcgMS44LTIuMS42LTMuMyAxLjQtMy45IDIuMi0uNS44LS40IDEuNy40IDIuNXMzLjIgMS40IDYuMi41YzIuOS0uOCA2LjMtMi45IDkuMy03LjUgNi44IDMuMSAxMy41IDYuNSAyMCAxMC4yaC0uM2MtMSAuMS0yLjUuMi00LjEuNC0xLjYuMi0zLjMuNC01IC42LTEuNy4yLTMuMy41LTQuNi44LTUuMiAxLjEtNi40IDMuMy00LjcgNS41LjkgMS4xIDMuOCAxLjkgNy41IDEuMyAxLjktLjMgNC0xLjEgNi4xLTIuNSAyLTEuMyA0LTMgNi01LjUgNiAzLjQgMTEuOSA3LjEgMTcuNyAxMS4xaC00LjZjLTEuOCAwLTMuOS4xLTUuOC4yLTEgLjEtMS45LjEtMi44LjItLjkuMS0xLjcuMi0yLjUuMy02LjEuOC03LjYgMy4yLTUuOSA1LjguNC43IDEuNSAxLjMgMi45IDEuNyAxLjUuNCAzLjMuNyA1LjUuNCAyLjItLjMgNC42LS45IDcuMi0yLjMgMi4zLTEuMiA0LjgtMyA3LjMtNS42IDUuNiAzLjkgMTEgOCAxNi4yIDEyLjNsMS43LTIuMWMtNS40LTQuMi0xMS04LjItMTYuNy0xMiAxLjQtMy4yIDIuMS02LjIgMi4yLTguOS4xLTMtLjQtNS42LTEuMy03LjctLjktMi4xLTIuMS0zLjktMy40LTUuMS0xLjMtMS4yLTIuNS0xLjktMy40LTItMy41LS41LTQuNiAyLjItMiA4LjEgMS40IDMgMy4yIDcuMSA0LjggMTAuNS43IDEuNyAxLjQgMy4yIDEuOSA0LjMtNS45LTMuOC0xMS45LTcuNC0xOC0xMC43IDEtMyAxLjQtNS43IDEuMy04LjEtLjEtMi42LS44LTQuOC0xLjctNi42LTEuOS0zLjctNC44LTUuNS02LjMtNS42LTMuMS0uMi0zLjkgMi4zLTEuMiA3LjIgMS40IDIuNSAzLjMgNS45IDQuOSA4LjguOCAxLjQgMS41IDIuNyAyIDMuNiAwIC4xLjEuMS4xLjItNi42LTMuNS0xMy40LTYuOC0yMC4zLTkuNyAxLjMtNS4yLjQtOS4yLTEuMy0xMS45LTEuOC0yLjgtNC4yLTQuMS01LjQtNC4xLTEuNi4zLTIuMy44LTIuNCAxLjh6TTEwMC4yIDI1NS44YzEtLjEgMi40LjUgNC4zIDEuOCAzIDIuMiA3LjggNS43IDkuNiA3LTIuNC02LjUtNC42LTEzLjItNi40LTE5LjktNC42LjYtNy45LS42LTkuOS0yLjMtMi4xLTEuNy0zLTMuOS0yLjgtNC45LjMtMiAyLTIuMiA0LjkuMiAxLjUgMS4yIDMuNCAzIDUuMSA0LjQgMS4yIDEgMi4yIDEuOSAyLjYgMi4zLS42LTIuMS0xLjEtNC4xLTEuNi02LjJoLS4yYy0xLjMtLjMtMi44LTMuNC0zLjUtNC41LTEuNS0yLjQtMi41LTUuMi0yLjUtOCAwLTEuMi40LTIuNiAxLjUtMyAxLjMtLjUgMi42LjYgMy40IDEuNiAyLjMgMyAzLjMgNi44IDMuMSAxMC41LS4xIDEtLjIgMy4zLTEuNSAzLjQuNiAyIDEuMiA0LjEgMS44IDYuMS4yLS42LjYtMS45IDEtMy40LjctMi4xIDEuNi00LjUgMi4zLTYuMiAxLjQtMy40IDMuMS0zLjkgNC4zLTIuNC42LjcuOCAyLjgtLjIgNS4yLTEgMi40LTMuMSA1LTcuMyA3IDIgNi42IDQuNCAxMy4yIDYuOSAxOS42LjItLjguNS0yLjIuOC0zLjcuNi0yLjUgMS40LTUuNiAyLjEtNy42LjctMi4xIDEuNS0zLjMgMi40LTMuOC45LS41IDEuNy0uMyAyLjUuNXMxLjIgMy4zLjMgNi4yYy0uOSAyLjgtMy4yIDYuMi03LjggOC45IDIuOCA2LjkgNS45IDEzLjggOS4zIDIwLjR2LS4zYy4xLTEgLjMtMi40LjUtNHMuNS0zLjMuOC01Yy4zLTEuNy43LTMuMyAxLTQuNiAxLjMtNS4yIDMuNi02LjMgNS43LTQuNSAxLjEuOSAxLjggMy45IDEgNy41LS40IDEuOC0xLjMgMy45LTIuOCA2LTEuMyAxLjktMy4yIDMuOS01LjggNS44IDMuMiA2LjIgNi42IDEyLjIgMTAuMyAxOC4xIDAtMS4yLjEtMi44LjItNC42LjEtMS44LjMtMy45LjUtNS44LjEtMSAuMi0xLjkuMy0yLjguMS0uOS4zLTEuNy40LTIuNSAxLTYgMy41LTcuNSA2LjEtNS42LjYuNSAxLjIgMS41IDEuNiAzIC4zIDEuNS41IDMuMy4yIDUuNXMtMS4xIDQuNS0yLjYgNy4xYy0xLjMgMi4zLTMuMiA0LjctNS45IDcgMy42IDUuNyA3LjUgMTEuMyAxMS42IDE2LjdsLTIuMiAxLjZjLTQtNS42LTcuOC0xMS4zLTExLjMtMTcuMi0zLjMgMS4zLTYuMyAxLjktOSAxLjktMyAwLTUuNi0uNi03LjctMS42LTIuMS0xLTMuOC0yLjMtNC45LTMuNi0xLjEtMS4zLTEuOC0yLjYtMS44LTMuNC0uMy0zLjUgMi40LTQuNSA4LjItMS43IDIuOSAxLjUgNyAzLjUgMTAuMyA1LjIgMS43LjggMy4xIDEuNSA0LjIgMi0zLjYtNi02LjktMTIuMi05LjktMTguNS0zIC45LTUuNyAxLjItOC4xIDEtMi42LS4yLTQuNy0xLTYuNS0yLTMuNi0yLTUuMy01LTUuNC02LjYgMC0zLjEgMi40LTMuOCA3LjItLjkgMi40IDEuNSA1LjggMy41IDguNiA1LjIgMS40LjkgMi42IDEuNiAzLjUgMi4xLjEgMCAuMS4xLjIuMS0zLjMtNi44LTYuMi0xMy43LTguOC0yMC43LTUuMyAxLjEtOS4yIDAtMTEuOS0xLjgtMi43LTEuOS0zLjktNC40LTMuOC01LjYtLjEtLjkuNS0xLjYgMS41LTEuN3pcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0NFxcXCIgZD1cXFwiTTEwNi44IDU1OC4zYzAgMTMuMSA4LjEgMjMuNyAxOC4yIDIzLjdoNDU1YzEwLjEgMCAxOC4yLTEwLjYgMTguMi0yMy43SDEwNi44elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QyXFxcIiBkPVxcXCJNMTU1LjQgMjkwLjloMzk0LjJ2MjQ3LjZIMTU1LjR6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDNcXFwiIGQ9XFxcIk01NTYuNiAyNjQuOGgtNDA4Yy03LjYgMC0xMy44IDYuMi0xMy44IDEzLjhWNTQwYzAgNy42IDYuMiAxMy44IDEzLjggMTMuOGg0MDhjNy42IDAgMTMuOC02LjIgMTMuOC0xMy44VjI3OC42YzAtNy43LTYuMi0xMy44LTEzLjgtMTMuOHpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MVxcXCIgZD1cXFwiTTE1NS40IDI4NS41aDM5NC4ydjI0Ny42SDE1NS40elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMjk1LjcgNTU4LjNoLTk5LjFsLjMtNC40LjQtNS41aDk3LjZ6bTIxMi45IDBoLTk5LjJsLjQtNC40LjQtNS41aDk3LjZ6TTE4OCA0NTEuN2gzNC40djMuOUgxODh6bTQ3IDBoMzQuNHYzLjlIMjM1em05My42IDBoMjQuOXYzLjloLTI0Ljl6bTQ2LjIgMGgzOC43djMuOWgtMzguN3ptLTMyLjUgMTMuNGgxNy42djMuOWgtMTcuNnptMCAxMC4yaDE3LjZ2My45aC0xNy42em0wIDEwLjNoMTcuNnYzLjloLTE3LjZ6bTAgMTAuMmgxNy42djMuOWgtMTcuNnpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0NlxcXCIgZD1cXFwiTTIwOS43IDQ2NS4xaDEyLjd2My45aC0xMi43elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QyXFxcIiBkPVxcXCJNMjA5LjcgNDc1LjNoMTIuN3YzLjloLTEyLjd6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDRcXFwiIGQ9XFxcIk0yMDkuNyA0ODUuNmgxMi43djMuOWgtMTIuN3pcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0NVxcXCIgZD1cXFwiTTIwOS43IDQ5NS44aDEyLjd2My45aC0xMi43elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMzk5LjcgNDY1LjFoMTcuNnYzLjloLTE3LjZ6bTAgMTAuMmgxNy42djMuOWgtMTcuNnptMCAxMC4zaDE3LjZ2My45aC0xNy42em0wIDEwLjJoMTcuNnYzLjloLTE3LjZ6bS0xNjUuMS0zMC43aDE3LjZ2My45aC0xNy42em0wIDEwLjJoMjYuMXYzLjloLTI2LjF6bTAgMTAuM2gzMi45djMuOWgtMzIuOXptMCAxMC4yaDE1LjF2My45aC0xNS4xem0tNTQuMi0xODEuMkgzMDZ2Ni45SDE4MC40elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q0XFxcIiBkPVxcXCJNMTgwLjQgMzQwLjRoMTcuOHY3LjVoLTE3Ljh6bTM1LjcgMGgxNy44djcuNWgtMTcuOHptMzUuNyAwaDE3Ljh2Ny41aC0xNy44em0zNS43IDBoMTcuOHY3LjVoLTE3Ljh6bTM1LjggMGgxNy44djcuNWgtMTcuOHptMzUuNyAwaDE3Ljh2Ny41SDM1OXptMzUuNyAwaDE3Ljh2Ny41aC0xNy44elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMTgwLjQgMzU1LjdoMjQ5Ljh2Mi4zSDE4MC40elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNNDI3LjcgNDQ2LjJIMTgxdi05MC40aC0ydjkyLjVoMjUwLjd2LTkyLjVoLTJ2OTAuNHpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MFxcXCIgZD1cXFwiTTQwNS4xIDM1NS43aDJ2OTEuNWgtMnptLTIyLjcgMGgyLjF2OTEuNWgtMi4xem0tMjIuNiAwaDJ2OTEuNWgtMnptLTIyLjYgMGgydjkxLjVoLTJ6bS0yMi42IDBoMnY5MS41aC0yem0tMjIuNiAwaDJ2OTEuNWgtMnptLTIyLjYgMGgydjkxLjVoLTJ6bS0yMi42IDBoMnY5MS41aC0yem0tMjIuNiAwaDJ2OTEuNWgtMnptLTIyLjYgMGgyLjF2OTEuNWgtMi4xelxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMTc5IDM1NS43aDI1MC43djJIMTc5em0xIDIyLjdoMjQ4Ljd2MkgxODB6bTAgMjIuNmgyNDguN3YySDE4MHptMCAyMi42aDI0OC43djJIMTgwelxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QyXFxcIiBkPVxcXCJNMjAzLjYgMzk2LjJoMTYuMnY1MC4xaC0xNi4yem00NS4yLTEwLjRIMjY1djYwLjVoLTE2LjJ6bTQ1LjMgMjQuN2gxNi4ydjM1LjhoLTE2LjJ6bTQ1LjItMzYuOGgxNi4ydjcyLjZoLTE2LjJ6bTQ1LjIgMTkuNmgxNi4ydjUzaC0xNi4yelxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q2XFxcIiBkPVxcXCJNMjAxLjYgMzk2LjJoMTYuMnY1MC4xaC0xNi4yem00NS4yLTEwLjRIMjYzdjYwLjVoLTE2LjJ6bTQ1LjIgMjQuN2gxNi4ydjM1LjhIMjkyem00NS4yLTM2LjhoMTYuMnY3Mi42aC0xNi4yem00NS4zIDE5LjZoMTYuMnY1M2gtMTYuMnpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MFxcXCIgZD1cXFwiTTE3OSA0NzEuMWgyNTAuN3YyLjFIMTc5ek0xNzkgNDgxLjNoMjUwLjd2Mi4xSDE3OXpNMTc5IDQ5MS42aDI1MC43djIuMUgxNzl6TTE3OSA1MDEuOGgyNTAuN3YyLjFIMTc5elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q2XFxcIiBkPVxcXCJNNDczLjUgMzUyLjRjLjktNS41IDUuNC05LjggMTAuOS0xMC42bC0uMi01LjEtLjUtMTIuNmMtMTQuNyAxLjItMjYuNCAxMi43LTI3LjkgMjcuMmwxMi42LjggNS4xLjN6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDVcXFwiIGQ9XFxcIk00OTEuMSAzNjYuN2MtMS41LjYtMy4xLjktNC44LjktMi45IDAtNS42LS45LTcuNy0yLjVsLTMuNSAzLjgtOC41IDkuMmM1LjMgNC41IDEyLjIgNy4yIDE5LjcgNy4yIDQuNyAwIDkuMS0xIDEzLTIuOWwtNS45LTExLjEtMi4zLTQuNnptMjUuMi01LjQtMTIuNC0yLjFjLTEuMiA0LjYtNCA4LjQtNy45IDEwLjlsNS45IDExLjEgMi43IDUuMmM4LjgtNS4xIDE1LjMtMTMuOCAxNy41LTI0LjFsLTUuOC0xelxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q2XFxcIiBkPVxcXCJtNDY4LjIgMzU0LjktMTIuNi0uOC01LjktLjR2LjljMCAxMC4xIDQuMSAxOS4zIDEwLjcgMjUuOWw0LTQuMyA4LjUtOS4yYy0yLjgtMy4yLTQuNi03LjQtNC43LTEyLjF6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDRcXFwiIGQ9XFxcIm00OTUuOSAzMzkuMy0yLjQgNC42YzMuNSAyLjMgNS43IDYuMyA1LjcgMTAuOHYuOGw1LjEuOSAxMi40IDIuMWMuMi0xLjMuMi0yLjUuMi0zLjggMC0xMS4zLTYuMS0yMS4yLTE1LjItMjYuNWwtNS44IDExLjF6bS04LjktMi43YzIuMy4xIDQuNC42IDYuNCAxLjRsNS44LTExLjIgMi43LTUuMmMtNC43LTIuMy0xMC0zLjUtMTUuNy0zLjVsLjIgNS45LjYgMTIuNnpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MFxcXCIgZD1cXFwiTTQ0Ni43IDQwNy4yaDc4LjR2My45aC03OC40em0wIDM0LjNoMy45djMuOWgtMy45em03LjcgMGg3MC43djMuOWgtNzAuN3pcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0NFxcXCIgZD1cXFwiTTQ0Ni43IDQ1Ni4xaDMuOXYzLjloLTMuOXpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MFxcXCIgZD1cXFwiTTQ1NC40IDQ1Ni4xaDcwLjd2My45aC03MC43elxcXCIgLz48cGF0aCBkPVxcXCJNNDQ2LjcgNDcwLjhoMy45djMuOWgtMy45elxcXCIgc3R5bGU9XFxcImZpbGw6IzYyOTJmZlxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNNDU0LjQgNDcwLjhoNzAuN3YzLjloLTcwLjd6XFxcIiAvPjxwYXRoIGQ9XFxcIk00NDYuNyA0ODUuNGgzLjl2My45aC0zLjl6XFxcIiBzdHlsZT1cXFwiZmlsbDojZGE1NTQ0XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk00NTQuNCA0ODUuNGg3MC43djMuOWgtNzAuN3pcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0NVxcXCIgZD1cXFwiTTQ0Ni43IDUwMGgzLjl2My45aC0zLjl6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk00NTQuNCA1MDBoNzAuN3YzLjloLTcwLjd6bS03LjctODIuM2g3OC40djEzaC03OC40elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QzXFxcIiBkPVxcXCJNNTIyLjggNTU2LjdjLjMtLjMuNy0uNSAxLjEtLjYuNC0uMS44LS4xIDEuMy0uMSAxLS4xIDItLjMgMi45LS44LjUtLjMuOS0uNiAxLjQtLjhsMi45LjFjLjQuNC43IDEgLjggMS42LjEuNS4xIDEuMS4xIDEuNnYuNmgtMTAuOHYtLjZjMC0uNCAwLS44LjMtMXpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0OVxcXCIgZD1cXFwibTUzMi43IDU1MS4yLS4zIDMuMy0zLS4xLS4yLTN6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDNcXFwiIGQ9XFxcIk00OTQgNTU1LjVjLjMtLjMuNy0uNCAxLjEtLjUuNCAwIC44IDAgMS4zLjEgMSAuMSAyLjEtLjEgMy0uNS41LS4yIDEtLjUgMS41LS42bDIuOS40Yy40LjUuNSAxLjEuNiAxLjcuMS41IDAgMS4xLS4xIDEuNmwtLjEuNi0xMC43LTEuMi4xLS42YzAtLjQuMS0uOC40LTF6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDRcXFwiIGQ9XFxcIk01MzUuMyA1MDMuN2MuNi0xMS40LjUtMjcuNS0yLjYtMzYuNiAwLS4yLTIzLjkgMi0yMy45IDJsLTUuNiAyMi45Yy0yIDguMS0yLjkgMTYuMy0yLjggMjQuNmwuMyAzNC40IDQgLjMgNy41LTQ1LjVjMi44LTUuNCA1LjgtMTEuNiA4LjEtMTcuN2w4LjcgNjMuNCA0LS4yYzAtLjEgMi4zLTQ3LjYgMi4zLTQ3LjZ6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDlcXFwiIGQ9XFxcIm01MDQuNSA1NTEuMi0uNyAzLjItMi45LS40LjEtM3pcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MTBcXFwiIGQ9XFxcIk00ODEuNiAzOTQuM2MuNy0uMyAxLjYgMCAxLjkuNyAyIDQgNC4yIDcuOCA2LjYgMTEuNSAyLjQgMy43IDUgNy4yIDcuOCAxMC41czUuOCA2LjQgOS4xIDkuMWMxLjYgMS40IDMuMyAyLjcgNSAzLjkuNC4zLjkuNiAxLjMuOWwxLjMuOWMuOS42IDEuOCAxLjEgMi43IDEuNy4zLjIuNS40LjguNi4yLjIuNC41LjYuNy4zLjUuNiAxLjEuNyAxLjguMyAxLjMuMSAyLjctLjcgNC0uOCAxLjMtMiAyLjEtMy4zIDIuMy0uNy4xLTEuNC4xLTIuMSAwLS4zLS4xLS43LS4yLTEtLjNsLS45LS42Yy0uOS0uNy0xLjgtMS41LTIuNy0yLjNsLTEuMy0xLjJjLS40LS40LS45LS44LTEuMy0xLjItMS43LTEuNi0zLjQtMy40LTQuOS01LjEtMy4xLTMuNS02LTcuMy04LjUtMTEuMi0yLjUtMy45LTQuNy04LTYuNi0xMi4yLTEuOS00LjItMy42LTguNC01LjEtMTIuNy0uNS0uNy0uMS0xLjUuNi0xLjh6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDJcXFwiIGQ9XFxcIm01MDAuMiA0MzQuNiA5LjQgNy4zYzIuOCAyLjIgNi44IDEuOSA5LS45czEuOC03LjItMS4xLTkuNGwtOS40LTcuMy03LjkgMTAuM3pcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MlxcXCIgZD1cXFwiTTUyMS44IDQyOC41Yy05LS4xLTE2IDcuOS0xNC44IDE2LjhsMS44IDIzLjdjMTAgMy42IDE3LjUgMS42IDIzLjktMmwxLjEtMjUuMmMuNy03LjEtNC45LTEzLjItMTItMTMuM3pcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MVxcXCIgZD1cXFwibTUzMS44IDQzMy41LS4yLjJjMSAxLjQgMS43IDMgMiA0LjdoLjNjLS4zLTEuNy0xLTMuNC0yLjEtNC45em0tOS45IDM3LjN2LjNjMi4yLS4yIDQuNC0uOCA2LjYtMS43bC0uMS0uMmMtMi4xLjgtNC4yIDEuMy02LjUgMS42em01LjEtNDEuM2MtMS42LS44LTMuNC0xLjItNS4yLTEuMmgtLjJjLTQuMyAwLTguNSAxLjktMTEuMyA1LjItMS43IDEuOS0yLjggNC4yLTMuMyA2LjZsLjMuMWMxLjUtNi42IDcuNC0xMS42IDE0LjUtMTEuNSAxLjkgMCAzLjYuNSA1LjIgMS4ydi0uNHpNNTA4LjYgNDY2Yy0uMSAwLS4yLjEtLjMuMWwuMiAzIC4yLjFjMi4yLjggNC41IDEuNCA2LjYgMS43di0uM2MtMi4xLS4zLTQuMi0uOC02LjUtMS43bC0uMi0yLjl6bS0xLjgtMjAuNi45IDEyaC4zbC0uOS0xMmgtLjN6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDNcXFwiIGQ9XFxcIk01MjQgNDEyLjFzNi4yIDEuNSA0LjcgOC40Yy0xIDQuNi00LjQgNy05LjIgNy44bDQuNS0xNi4yelxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q5XFxcIiBkPVxcXCJtNTE3LjUgNDIzLjcuNSA3LjFjMiAxLjIgNCAxLjEgNS45LS4zbC0uNS03LjEtNS45LjN6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDEwXFxcIiBkPVxcXCJtNTE3LjYgNDI0LjYuMSAyLjJjLjkuNSAxLjkuNyAzIC43aC4yYzEtLjEgMi0uNSAyLjctMS4ybC0uMS0yLjEtNS45LjR6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDlcXFwiIGQ9XFxcIm01MTQuNiA0MTUuNC40IDUuMy4xIDEuMmMuMyAyLjkgMi43IDUuMSA1LjYgNS4xLjMgMCAuNiAwIC45LS4xLjEgMCAuMi0uMS4zLS4xaC4xYy40LS4yLjgtLjQgMS4xLS44LjctLjggMS4xLTEuNiAxLjUtMi41LjMtLjcuNi0xLjUuOC0yLjIuMi0uOS40LTEuOC4yLTIuOGwtLjQtNC42LTktLjctMS42IDIuMnpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0M1xcXCIgZD1cXFwiTTUyMy45IDQxNHMtMTAuMy42LTguMiA5LjdjMCAwLTMuMi02LjUuMS0xMC45IDMuNi00LjggOC41LTMuMiAxMC4yLS45IDEuNyAyLjMgMyA2LjEtMS44IDguOS0uMS0uMSAxLjUtMy41LS4zLTYuOHpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0OVxcXCIgZD1cXFwiTTUyMy43IDQxOS41Yy4xIDEuMiAxLjEgMi4xIDIuMyAyIDEuMi0uMSAyLjEtMS4xIDItMi4zLS4xLTEuMi0xLjEtMi4xLTIuMy0yLTEuMi4xLTIuMSAxLjEtMiAyLjN6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDNcXFwiIGQ9XFxcIm01MDMuOCA0NTAuOC03LjQtOGM0LjUtNC4yIDYuOS05LjggNi45LTE1LjloMTAuOWMwIDkuMS0zLjggMTcuOC0xMC40IDIzLjl6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDRcXFwiIGQ9XFxcIk01MTQuMiA0MjdoLTEwLjljMC0xMi05LjctMjEuNy0yMS43LTIxLjctMi42IDAtNS4xLjQtNy41IDEuM2wtMy44LTEwLjJjMy42LTEuMyA3LjQtMiAxMS4zLTIgMTgtLjEgMzIuNiAxNC42IDMyLjYgMzIuNnpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MlxcXCIgZD1cXFwiTTQ4MS42IDQ1OS42Yy0xOCAwLTMyLjYtMTQuNi0zMi42LTMyLjYgMC0xMy42IDguNi0yNS45IDIxLjQtMzAuNmwzLjggMTAuMmMtOC41IDMuMS0xNC4yIDExLjMtMTQuMiAyMC40IDAgMTIgOS43IDIxLjcgMjEuNyAyMS43IDUuNSAwIDEwLjgtMi4xIDE0LjgtNS44bDcuNCA4Yy02LjEgNS42LTE0IDguNy0yMi4zIDguN3pcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0OVxcXCIgZD1cXFwiTTQ3MS4xIDQ1NS4zYzAtLjguNS0xLjUgMS4zLTEuNSA0LjQtLjUgOC44LTEuMSAxMy4xLTIuMSA0LjMtLjkgOC41LTIuMSAxMi42LTMuNSA0LjEtMS41IDgtMy4yIDExLjgtNS4yIDEuOS0xIDMuNy0yLjEgNS41LTMuMy40LS4zLjktLjYgMS4zLS45bDEuMy0uOWMuOC0uNiAxLjctMS4yIDIuNS0xLjkuMy0uMi42LS40LjgtLjVsLjktLjNjLjYtLjEgMS4zLS4xIDEuOSAwIDEuMy4yIDIuNi45IDMuNSAyLjEuOSAxLjIgMS4yIDIuNiAxIDMuOS0uMS43LS40IDEuMy0uOCAxLjktLjIuMy0uNC42LS43LjgtLjMuMy0uNi41LS45LjctMSAuNi0yLjEgMS4yLTMuMSAxLjdsLTEuNi44Yy0uNS4zLTEuMS41LTEuNi44LTIuMSAxLTQuMyAyLTYuNSAyLjgtNC40IDEuNy05IDMtMTMuNSAzLjktNC42LjktOS4yIDEuNS0xMy43IDEuOS00LjYuMy05LjEuNC0xMy43LjMtLjggMC0xLjQtLjctMS40LTEuNXpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MlxcXCIgZD1cXFwibTUxNS41IDQ1Mi41IDEwLjEtNi4yYzMuMS0xLjkgNC4zLTUuNyAyLjQtOC44LTEuOS0zLjEtNi4xLTQuMi05LjEtMi4zbC0xMC4xIDYuMiA2LjcgMTEuMXpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MVxcXCIgZD1cXFwiTTUyOS4xIDQzOS40Yy0uMS0uNy0uNC0xLjQtLjgtMi0uOS0xLjUtMi41LTIuNy00LjMtMy4xLS4zLS4xLS42LS4xLS45LS4ydi4zYzIgLjMgMy45IDEuNCA0LjkgMy4yIDEuNCAyLjMgMS4xIDUtLjUgN2wuMi4xYzEuMy0xLjUgMS44LTMuNCAxLjQtNS4zem0tMy4zIDcuMXMuMSAwIC4xLS4xbC0uMy0uMS0zIDEuOC4yLjIgMy0xLjh6bS00LjIgMi42LS4yLS4yLTIuOSAxLjcuMi4yIDIuOS0xLjd6bS00LjQgMi42LS4yLS4yLTEuNS45LTUuMi04LjUtLjIuMSA1LjMgOC44IDEuOC0xLjF6bS4yLTE1LjktNy40IDQuNS4xLjIgNy40LTQuNS0uMS0uMnpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MTBcXFwiIGQ9XFxcIk0yMzQuNCA0NjRjMC0uOC0uNS0xLjUtMS4zLTEuNi0yLjMtLjMtNC42LS42LTYuOS0xLTIuMy0uNC00LjUtLjgtNi43LTEuM3MtNC4zLTEuMi02LjItMmMtMS45LS44LTMuNy0xLjktNS4zLTMuMS0zLjItMi41LTUuNy02LTgtOS43LS4zLS41LS42LS45LS45LTEuNGwtLjgtMS40Yy0uNi0xLTEuMS0yLTEuNy0zLTEuMS0yLTIuMi00LTMuMi02LjEtMS40LTIuNi00LjctMy41LTcuMi0ycy0zLjMgNC44LTEuNyA3LjNjMS40IDEuOSAyLjcgMy45IDQuMSA1LjguNyAxIDEuNCAxLjkgMi4yIDIuOWwxLjEgMS40Yy40LjUuOC45IDEuMSAxLjQgMS42IDEuOSAzLjIgMy43IDUgNS41IDEuOCAxLjggMy45IDMuNCA2LjEgNC44IDIuMyAxLjMgNC43IDIuMyA3LjIgMyAyLjUuNyA0LjkgMS4xIDcuMyAxLjMgMi40LjIgNC44LjQgNy4xLjQgMi40LjEgNC43LjEgNyAuMSAxIDAgMS43LS42IDEuNy0xLjN6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDNcXFwiIGQ9XFxcIm0xOTAuNSA0NTAuNC02LjMtMTBjLTEuOS0zLTEuMy03IDEuOC04LjkgMy0xLjkgNy4zLTEuMSA5LjIgMmw2LjMgMTAtMTEgNi45elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q5XFxcIiBkPVxcXCJtMTgxLjQgNTA1LjIgOC4zIDQ5LjIgMi45LS41LjgtNDkuMXpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0NFxcXCIgZD1cXFwibTE5NC4yIDUwNC43LTEzLjYuNWMtMy43LTktNi45LTI4LjktMy4xLTM4LjFsMTUuMiAzLjQgMS41IDM0LjJ6XFxcIiAvPjxjaXJjbGUgdHJhbnNmb3JtPVxcXCJyb3RhdGUoLTE2LjczOSAxODQuODQ3IDQ3MC40MDYpXFxcIiBjbGFzcz1cXFwic3Q0XFxcIiBjeD1cXFwiMTg0LjhcXFwiIGN5PVxcXCI0NzAuNFxcXCIgcj1cXFwiNy45XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDlcXFwiIGQ9XFxcIm0xNjUuOSA1MDMuMi00LjggNTAuMiAzIC4yIDEzLjUtNDcuOHpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0NFxcXCIgZD1cXFwiTTE4MC40IDQ2Mi43Yy0zLjItMS02LjUuMi04LjUgMi43LS4xLjItLjMuNC0uNC42LTUuNyA4LjMtNy41IDI3LjYtNi4zIDM3bDEzLjIgMyA3LjMtMzMuNGMxLjMtNC4yLTEuMS04LjYtNS4zLTkuOXpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MlxcXCIgZD1cXFwibTE4MC40IDQ5Ny4xLTEuOSA4LjktMi4yLS41di4zbDIuNC41IDItOS4xLS4zLS4xem0tMTEuOS0yNS44Yy0xLjMgMy41LTIuNCA3LjgtMy4xIDEyLjh2LjNoLjNjLjYtNC42IDEuNy05LjEgMy4xLTEyLjlsLS4zLS4yem0tMy45IDIzLjdoLjNjMC0yLjIuMi00LjUuNC02LjhoLS4zYy0uMyAyLjMtLjQgNC42LS40IDYuOHptLjYgOGMtLjItMS4zLS4zLTIuOC0uMy00LjRoLS4zYy4xIDEuNi4yIDMuMS4zIDQuNHYuMmw4IDEuOC4xLS4yLTcuOC0xLjh6bTE4LjYtMjEuOC0xLjcgNy45aC4zbDEuNy03LjloLS4zelxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QzXFxcIiBkPVxcXCJNMTcwLjQgNTU2LjZjLS4yLS40LS42LS42LTEtLjctLjQtLjEtLjgtLjEtMS4yLS4yLTEtLjItMi0uNi0yLjgtMS4yLS40LS4zLS44LS43LTEuMy0uOWwtMi45LS4zYy0uNC40LS44LjktMSAxLjUtLjIuNS0uMiAxLjEtLjMgMS42bC0uMS42IDEwLjcgMS4yLjEtLjZjLjEtLjMgMC0uNy0uMi0xem0yOS4xLTEuNWMtLjMtLjMtLjctLjQtMS4yLS40LS40IDAtLjguMS0xLjMuMS0xIC4xLTIuMSAwLTMtLjRsLTEuNS0uNi0yLjkuNWMtLjMuNS0uNSAxLjEtLjUgMS43IDAgLjUgMCAxLjEuMSAxLjZsLjEuNiAxMC43LTEuNi0uMS0uNmMwLS4zLS4xLS42LS40LS45ek0xODIgNDI4LjhjOSAuMSAxNS44IDguMiAxNC40IDE3LjFsLTMuNiAyNGMtNi41IDIuMy0xNS42IDEuNS0yMy4xLS43di0yNy40Yy0uNS03LjEgNS4yLTEzLjEgMTIuMy0xM3pcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MVxcXCIgZD1cXFwiTTE2OS40IDQ1Ny40djEwLjRoLjN2LTEwLjRoLS4zem0xMi42LTI4LjhoLS4xYy0uNCAwLS44IDAtMS4yLjF2LjNjLjQgMCAuOC0uMSAxLjMtLjEgMi4xIDAgNCAuNSA1LjggMS4ybC4xLS4yYy0xLjgtLjktMy44LTEuMy01LjktMS4zem0xMS4zIDUuM2MtLjgtLjktMS43LTEuOC0yLjctMi41bC0uMi4yYzMuNyAyLjcgNi4xIDcuMSA2LjEgMTEuOSAwIC44LS4xIDEuNi0uMiAyLjRsLS44IDUuMy4zLjEuOC01LjNjLjctNC40LS41LTguOC0zLjMtMTIuMXptLS42IDM2Yy01LjkgMi4xLTEzLjkgMS42LTIwLjktLjF2LjNjNCAxIDguMSAxLjUgMTEuOCAxLjUgMy41IDAgNi42LS41IDkuMi0xLjRsLjEtLjEgMi4xLTEzLjhoLS4zbC0yIDEzLjZ6bS0xNi45LTM5LjUtLjEtLjNjLTEuMS42LTIuMSAxLjQtMi45IDIuMy0yLjQgMi41LTMuNiA1LjktMy4zIDkuM3Y2LjRoLjN2LTYuNGMtLjQtNC43IDIuMS05IDYtMTEuM3pcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0OVxcXCIgZD1cXFwibTE4Ni4yIDQyNC43LS40IDcuM2MtMi4xIDEuMS00IDEtNS45LS40bC40LTcuMyA1LjkuNHpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MTBcXFwiIGQ9XFxcIk0xODYuMSA0MjYuOXYuOGMtLjkuNS0yIC43LTMuMS43aC0uMmMtMS0uMS0xLjktLjUtMi42LTEuMmwuMS0yLjEgNS44IDEuOHpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0OVxcXCIgZD1cXFwibTE4OS4zIDQxNi40LS41IDUuMi0uMSAxLjJjLS4zIDIuOS0yLjggNS4xLTUuNyA1LS4zIDAtLjYtLjEtLjktLjEtLjEgMC0uMi0uMS0uMy0uMWgtLjFjLS40LS4yLS44LS41LTEuMS0uOC0uNi0uOC0xLTEuNi0xLjQtMi41LS4zLS44LS42LTEuNS0uOC0yLjMtLjItLjktLjMtMS44LS4yLTIuOGwuMi0zLjYgOS4zLTEuNSAxLjYgMi4zelxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QzXFxcIiBkPVxcXCJNMTg5IDQyNC42czAtMy4xLS4xLTQuNmMtLjEtMS40LS40LTIuOC0xLjUtMi42LTIuMS40LTIuOS0xLjQtMi45LTEuNC0uNiAwLTEuMi4xLTEuOS4zLTMuMS44LTMuNiAwLTQtLjUtLjggMi40LS41IDUuNS0uNSA1LjggMCAuMS4xLjMuMS40LjIuOC41IDEuNS44IDIuMy4zLjcuNiAxLjQgMSAydi41Yy0yLjItLjQtNC45LTIuOC01LjYtNC43LTIuMy03LjIgMS42LTExLjUgNy4xLTEyLjYgNC44LS45IDcuNCAzLjUgOC40IDcuNS44IDIuMy0uMyA3LS45IDcuNnpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0OVxcXCIgZD1cXFwiTTE4MC4yIDQyMC4zYy0uMSAxLjItMS4xIDIuMS0yLjMgMi0xLjItLjEtMi4xLTEuMS0yLTIuMy4xLTEuMiAxLjEtMi4xIDIuMy0yIDEuMi4xIDIgMS4xIDIgMi4zelxcXCIgLz48cGF0aCB0cmFuc2Zvcm09XFxcInJvdGF0ZSgtMTgwIDI3NC40MzcgNDU0LjAxKVxcXCIgY2xhc3M9XFxcInN0MlxcXCIgZD1cXFwiTTI2OSA0NDYuMWgxMC44VjQ2MkgyNjl6XFxcIiAvPjxwYXRoIHRyYW5zZm9ybT1cXFwicm90YXRlKC0xODAgMjYwLjUxMSA0NDcuMzg3KVxcXCIgY2xhc3M9XFxcInN0MlxcXCIgZD1cXFwiTTI1NS4xIDQzMi44aDEwLjh2MjkuMWgtMTAuOHpcXFwiIC8+PHBhdGggdHJhbnNmb3JtPVxcXCJyb3RhdGUoLTE4MCAyNDYuNTg1IDQ0My40MjQpXFxcIiBjbGFzcz1cXFwic3Q0XFxcIiBkPVxcXCJNMjQxLjIgNDI0LjlIMjUydjM3aC0xMC44elxcXCIgLz48cGF0aCB0cmFuc2Zvcm09XFxcInJvdGF0ZSgtMTgwIDIzMi42NTkgNDM5LjcxMilcXFwiIGNsYXNzPVxcXCJzdDRcXFwiIGQ9XFxcIk0yMjcuMiA0MTcuNUgyMzh2NDQuNGgtMTAuOHpcXFwiIC8+PHBhdGggdHJhbnNmb3JtPVxcXCJyb3RhdGUoLTE4MCAyMTguNzMyIDQ0MS4yMTcpXFxcIiBjbGFzcz1cXFwic3Q0XFxcIiBkPVxcXCJNMjEzLjMgNDIwLjVoMTAuOHY0MS40aC0xMC44elxcXCIgLz48cGF0aCB0cmFuc2Zvcm09XFxcInJvdGF0ZSgtMTgwIDIwNC44MDYgNDQzLjQyNClcXFwiIGNsYXNzPVxcXCJzdDJcXFwiIGQ9XFxcIk0xOTkuNCA0MjQuOWgxMC44djM3aC0xMC44elxcXCIgLz48cGF0aCB0cmFuc2Zvcm09XFxcInJvdGF0ZSgtMTgwIDE5MC44OCA0NDcuMzg3KVxcXCIgY2xhc3M9XFxcInN0NFxcXCIgZD1cXFwiTTE4NS41IDQzMi44aDEwLjh2MjkuMWgtMTAuOHpcXFwiIC8+PHBhdGggdHJhbnNmb3JtPVxcXCJyb3RhdGUoLTE4MCAyMzIuNjU5IDQ2Mi42NjMpXFxcIiBjbGFzcz1cXFwic3QzXFxcIiBkPVxcXCJNMTgzLjEgNDYxLjloOTkuMnYxLjVoLTk5LjJ6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDlcXFwiIGQ9XFxcIk0yMjcuNSA0NjEuOWMtLjEtLjgtLjctMS40LTEuNS0xLjRoLTYuOWMtMi4zLS4xLTQuNi0uMi02LjgtLjRzLTQuNC0uNi02LjQtMS4xYy0yLS42LTMuOS0xLjMtNS43LTIuNC0zLjUtMi4xLTYuNS01LjEtOS4zLTguNS0uNC0uNC0uNy0uOC0xLjEtMS4zbC0xLTEuM2MtLjctLjktMS40LTEuOC0yLTIuNy0xLjQtMS44LTIuNy0zLjctNC01LjYtMS43LTIuMy01LjEtMi44LTcuNC0uOS0yLjMgMS44LTIuNiA1LjMtLjYgNy41IDEuNiAxLjcgMy4yIDMuNCA0LjkgNS4yLjguOSAxLjcgMS43IDIuNSAyLjZsMS4zIDEuM2MuNC40LjkuOCAxLjMgMS4yIDEuOCAxLjcgMy43IDMuMyA1LjggNC44IDIuMSAxLjUgNC4zIDIuOCA2LjcgMy45IDIuNCAxIDUgMS43IDcuNSAyIDIuNS4zIDUgLjQgNy40LjMgMi40LS4xIDQuOC0uMyA3LjEtLjZzNC43LS42IDctLjljLjctLjMgMS4yLTEgMS4yLTEuN3pcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0M1xcXCIgZD1cXFwibTE4MS45IDQ1NC4yLTcuNy05Yy0yLjMtMi43LTIuMi02LjcuNS05LjEgMi43LTIuMyA3LjEtMi4xIDkuNC43bDcuNyA5LTkuOSA4LjR6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDFcXFwiIGQ9XFxcIk0xNzkuNiA0MzQuM2MtMS4yLS4xLTIuMy4xLTMuNC42bC4xLjJjMi42LTEuMiA1LjktLjYgNy44IDEuN2wuNy44LjItLjItLjctLjhjLTEuMS0xLjMtMi44LTIuMi00LjctMi4zem0xMi4yIDExLjYtOC4xIDYuOC4yLjIgOC4zLTctNC40LTUuMi0uMi4yIDQuMiA1em0tMTgtOS4xYy0xLjggMi4xLTEuOSA1LjItLjQgNy43bC4yLS4xYy0xLjQtMi4zLTEuNC01LjMuMy03LjRsLS4xLS4yem03LjQgMTcgLjItLjItMy43LTQuNC0uMi4yIDMuNyA0LjR6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDNcXFwiIGQ9XFxcIk02MzAuOSA1ODcuN0g3NC4yYy0xLjYgMC0yLjktMS4zLTIuOS0yLjkgMC0xLjYgMS4zLTIuOSAyLjktMi45SDYzMWMxLjYgMCAyLjkgMS4zIDIuOSAyLjktLjEgMS42LTEuNCAyLjktMyAyLjl6XFxcIiAvPjxwYXRoIHRyYW5zZm9ybT1cXFwicm90YXRlKC00MC45NTcgMTk0LjQwMyAyOTcuNjI3KVxcXCIgY2xhc3M9XFxcInN0MlxcXCIgZD1cXFwiTTE3OS41IDI4OC43aDI5Ljd2MTcuN2gtMjkuN3pcXFwiIC8+PHBhdGggdHJhbnNmb3JtPVxcXCJyb3RhdGUoLTQwLjk1NyAxNDguOTU1IDMzNy4wODMpXFxcIiBjbGFzcz1cXFwic3Q0XFxcIiBkPVxcXCJNMTAzLjYgMzIzLjhoOTAuNnYyNi42aC05MC42elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q0XFxcIiBkPVxcXCJNMjk0LjIgMzAwLjRjMjguMS0yNC40IDMxLjItNjcuMiA2LjctOTUuMy0yNC40LTI4LjEtNjcuMi0zMS4yLTk1LjMtNi43LTI1LjkgMjIuNS0zMC41IDYwLjQtMTIuMSA4OC4yIDEuNiAyLjQgMy40IDQuOCA1LjQgNy4xIDIgMi4zIDQuMSA0LjQgNi4yIDYuMyAyNSAyMi4xIDYzLjMgMjIuOSA4OS4xLjR6bS03Ni45LTg4LjZjMjAuNy0xOCA1Mi4zLTE1LjggNzAuMyA1czE1LjggNTIuMy01IDcwLjMtNTIuMyAxNS44LTcwLjMtNS0xNS44LTUyLjMgNS03MC4zelxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QyXFxcIiBkPVxcXCJNMjEyLjMgMjgyLjFjLTE4LTIwLjgtMTUuOC01Mi4zIDUtNzAuMyAyMC43LTE4IDUyLjMtMTUuOCA3MC4zIDVzMTUuOCA1Mi4zLTUgNzAuM2MtMjAuNyAxNy45LTUyLjMgMTUuNy03MC4zLTV6XFxcIiBzdHlsZT1cXFwib3BhY2l0eTouNVxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QxXFxcIiBkPVxcXCJNMjYzLjYgMjE3Yy4yLS40LjQtLjcuOC0xIDEtLjggMi41LS41IDMuMi41bDIwLjggMjguM2MuOCAxIC41IDIuNS0uNSAzLjItMSAuOC0yLjUuNS0zLjItLjVsLTIwLjgtMjguM2MtLjUtLjYtLjYtMS41LS4zLTIuMnptLTExLjEgOC4yYy4yLS40LjQtLjcuOC0xIDEtLjggMi41LS41IDMuMi41bDIwLjggMjguM2MuOCAxIC41IDIuNS0uNSAzLjItMSAuOC0yLjUuNS0zLjItLjVsLTIwLjgtMjguM2MtLjUtLjYtLjYtMS41LS4zLTIuMnpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0M1xcXCIgZD1cXFwibTQxMCA1NTEuOC0xMi45IDYuNWMtLjItLjQtLjMtLjktLjItMS40LjEtLjYuNS0xIC45LTEuMy41LS4zIDEtLjYgMS41LS44IDEuMi0uNyAyLjItMS42IDMtMi44LjQtLjYuNy0xLjIgMS4yLTEuOGwzLjYtMS43Yy43LjMgMS40LjggMS45IDEuNC40LjUuNyAxLjIgMSAxLjl6bTEyLjYgNC42LTE0LjQgMS45Yy0uMS0uNSAwLTEgLjItMS40LjMtLjUuOC0uOCAxLjMtMSAuNS0uMiAxLjEtLjIgMS43LS4zIDEuNC0uMiAyLjYtLjggMy43LTEuNi42LS40IDEuMS0uOSAxLjctMS4zbDMuOS0uNGMuNi41IDEuMSAxLjIgMS4zIDIgLjQuNy41IDEuNC42IDIuMXptLTYuMS00Ny44ek00MTYuNSA1MDguNnptMCAwelxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QyXFxcIiBkPVxcXCJtMzg0LjEgNTEwLjEgMTguOCA0MC4zIDQuNy0xLjktMTItMzcuNiA5LjctMTUuMyAxMSA1Ny4yIDUuMS0uMy4xLTczLjJjLjEtLjctMzAuOS0yLjYtMzAuOS0yLjZsLTYuOCAzMC40Yy0uMSAxLjEgMCAyIC4zIDN6bTMyLjQtMS41elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QxMFxcXCIgZD1cXFwiTTM1Mi44IDQ4NC43YzEuNS0xLjUgMy0yLjggNC41LTQuMi40LS4zLjctLjcgMS4xLTEgLjQtLjQuNy0uNyAxLjEtMWwxLTEuMS41LS41LjUtLjVjMi43LTIuOSA1LjEtNiA3LjMtOS4zIDEtMS43IDIuMS0zLjMgMy4xLTVsLjctMS4zYy4xLS4yLjItLjQuNC0uNmwuMy0uNyAxLjMtMi42Yy4xLS4yLjItLjQuMy0uN2wuMy0uNy42LTEuMy42LTEuMy4zLS43LjItLjMuMS0uMyAxLjEtMi43Yy40LS45LjctMS44IDEuMS0yLjguNC0xLjIgMS40LTIgMi42LTIuNCAxLjItLjQgMi42LS40IDMuOS4yIDEuMy42IDIuMyAxLjYgMi44IDIuNy41IDEuMi41IDIuNS0uMSAzLjctLjUuOS0xIDEuOC0xLjYgMi44bC0xLjYgMi43LS4yLjMtLjIuMy0uNC43LS45IDEuMy0uOSAxLjMtLjQuN2MtLjEuMi0uMy40LS41LjdsLTEuOCAyLjYtLjUuNmMtLjIuMi0uMy40LS41LjZsLTEgMS4zYy0xLjMgMS43LTIuNyAzLjMtNC4xIDQuOS0yLjkgMy4xLTYgNi4xLTkuMiA4LjdsLS42LjUtLjYuNS0xLjMuOWMtLjQuMy0uOC42LTEuMy45LS40LjMtLjguNi0xLjMuOS0xLjcgMS4yLTMuNCAyLjMtNSAzLjQtLjUuNC0xLjMuMy0xLjktLjMtLjMtLjYtLjMtMS40LjItMS45elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q0XFxcIiBkPVxcXCJtMzgzLjggNDY1LjUgNS42LTEyLjJjMS43LTMuNy40LTgtMy4zLTkuNy0zLjctMS43LTguNC0uMS0xMCAzLjZsLTUuNiAxMi4yIDEzLjMgNi4xelxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q0XFxcIiBkPVxcXCJNMzg5LjggNDM1LjdjLTcuNyAxLjktMTIuMiA5LjktOS42IDE3LjVsMTEuOSAzNi4xYzEzLjkgMS43IDIwLjMtMi43IDI5LjctOS43bC0xMi40LTMzLjVjLTMtNy45LTExLjQtMTIuNC0xOS42LTEwLjR6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDFcXFwiIGQ9XFxcIk00MDMuMyA0MzguMmMxLjQgMSAyLjcgMi4yIDMuOCAzLjdsLjMtLjNjLTEuMS0xLjQtMi40LTIuNy0zLjgtMy43bC0uMy4zem0xNiA0My4xLjIuM2MuOC0uNiAxLjUtMS4xIDIuMy0xLjdsLjItLjItMy4yLTguNy0uNC4xIDMuMSA4LjVjLS42LjUtMS40IDEuMS0yLjIgMS43em0tMjcuNiA4LjNoLjNjMi43LjMgNS4xLjUgNy4zLjRsLS4xLS40Yy0yLjIuMS00LjUgMC03LjItLjNsLTctMjEuMi0uNC4xIDcuMSAyMS40em0yMC42LTMuN2MtMSAuNS0xLjkgMS0zIDEuNGwuMi40YzEuMS0uNSAyLjEtMSAzLjEtMS41bC0uMy0uM3ptMi4xLTI2IC40LS4yLTMtOC0uNC4yIDMgOHptLTMyLjYtLjIuNC0uMS0yLjEtNi41Yy0yLjMtNi44IDEuMi0xNC4xIDcuNi0xNi44LjMtLjEuNi0uMyAxLS40bC0uMi0uNC0uOS4zYy02LjggMi44LTEwLjMgMTAuNC03LjkgMTcuNGwyLjEgNi41elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q0XFxcIiBkPVxcXCJNMzUzLjIgNDkxLjRjOC4yIDcuOSAyMC42IDEwLjYgMzEuNyA2bC0xMS4zLTI2LjktMjAuNCAyMC45elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QzXFxcIiBkPVxcXCJtMzczLjYgNDcwLjQgMjkuMi0xLjRjLS4yLTMuMy0uOS02LjctMi4zLTkuOS0yLjctNi40LTcuNC0xMS4zLTEzLjEtMTQuNGwtMTMuOCAyNS43em0tMTEuNC0yNi45IDExLjMgMjYuOSAxMy45LTI1LjdjLTcuNC00LTE2LjctNC44LTI1LjItMS4yelxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QzXFxcIiBkPVxcXCJtMzczLjYgNDcwLjQgMTEuMyAyNi45YzExLjYtNC45IDE4LjQtMTYuNCAxNy44LTI4LjNsLTI5LjEgMS40elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q0XFxcIiBkPVxcXCJNMzQ2LjcgNDgxLjhjMS42IDMuNyAzLjggNyA2LjYgOS42bDIwLjQtMjEtMjktMy40Yy0uNyA0LjktLjEgOS45IDIgMTQuOHpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0OVxcXCIgZD1cXFwiTTM3MS4zIDQ2Ny4zYy41LS42IDEuMy0uNyAxLjktLjMgMS44IDEuMiAzLjcgMi40IDUuNiAzLjQuOS41IDEuOSAxIDIuOSAxLjQgMSAuNCAxLjkuOCAyLjkgMS4xIDEgLjMgMS45LjUgMi44LjVoMS4yYy40IDAgLjgtLjEgMS4xLS4yLjMtLjEuNi0uMy45LS40LjMtLjIuNS0uNC44LS42LjItLjIuNS0uNS43LS44LjItLjMuNC0uNi42LTEgLjQtLjcuNy0xLjYgMS0yLjUuMy0uOS41LTEuOC43LTIuOC40LTIgLjYtNCAuNy02LjEuMS0yLjEuMi00LjIuMi02LjQgMC0yLjEtLjEtNC4zLS4yLTYuNSAwLTEuNC41LTIuNiAxLjUtMy42LjktLjkgMi4yLTEuNSAzLjctMS41IDEuNCAwIDIuNy42IDMuNyAxLjYuOSAxIDEuNCAyLjMgMS4zIDMuNy0uMiAyLjMtLjQgNC42LS44IDYuOC0uMyAyLjMtLjcgNC42LTEuMSA2LjktLjUgMi4zLTEgNC42LTEuOCA3LS40IDEuMi0uOCAyLjMtMS40IDMuNS0uNiAxLjItMS4yIDIuMy0yIDMuNC0uNC42LS45IDEuMS0xLjQgMS42LS41LjUtMS4xIDEtMS43IDEuNC0uNi40LTEuMy44LTIuMSAxLjEtLjcuMy0xLjUuNS0yLjIuNi0uNy4xLTEuNS4xLTIuMi4xaC0uNmwtLjUtLjFjLS4zLS4xLS43LS4xLTEtLjItMS4zLS4zLTIuNS0uNy0zLjYtMS4ycy0yLjItMS4xLTMuMi0xLjdjLTEtLjYtMi0xLjMtMi45LTItMS45LTEuNC0zLjYtMi44LTUuMy00LjMtLjYtLjUtLjctMS4zLS4yLTEuOXpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0NFxcXCIgZD1cXFwibTQwNi44IDQ2MS44LjQtMTMuNGMuMS00LjEtMi44LTcuNi02LjgtNy43LTQuMS0uMS03LjcgMy4yLTcuOSA3LjJsLS40IDEzLjQgMTQuNy41elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3QxXFxcIiBkPVxcXCJNMzkyLjIgNDQ5LjNoLjRWNDQ4YzAtLjUuMS0uOS4yLTEuNGwtLjQtLjFjLS4xLjUtLjIgMS0uMiAxLjV2MS4zem0xMS4zIDEyLjggMy43LjEuMS00LjEtLjQtLjEtLjEgMy44LTMuMy0uMXYuNHptMy43LTExLjQtLjIgNC45aC40bC4yLTUtLjQuMXptLTEyLjctNy45LjQuMWMxLjUtMS40IDMuNC0yLjIgNS41LTIuMiAxLjcuMSAzLjMuNyA0LjQgMS44bC4yLS4zYy0xLjMtMS4yLTIuOS0xLjgtNC42LTEuOS0xLjEgMC0yLjIuMi0zLjMuNi0xIC41LTEuOSAxLjEtMi42IDEuOXptLTIuNiAxNS4yLjQuMS4xLTMuNGgtLjRsLS4xIDMuM3ptNC41IDMuOSAzLjQuMXYtLjRsLTMuMy0uMS0uMS40elxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q5XFxcIiBkPVxcXCJtMzgzIDQzNC41IDQuOCA4LjRjMi41LjIgNC4zLS45IDUuNS0zLjFsLTQuOC04LjQtNS41IDMuMXpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0MTBcXFwiIGQ9XFxcIm0zODMgNDM0LjUgMi4yIDMuOGMuNS0uMS45LS4yIDEuNC0uNC4xLS4xLjMtLjEuNC0uMiAxLjUtLjkgMi41LTIuNCAyLjgtNGwtMS4zLTIuMy01LjUgMy4xelxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q5XFxcIiBkPVxcXCJtMzc3LjYgNDMwLjggMi4xIDMuNS45IDEuNGMxLjIgMS45IDMuNyAyLjcgNS43IDEuNy43LS4zIDEuMy0uOCAxLjctMS4zLjEtLjEuMi0uMy4zLS40LjEtLjEuMS0uMi4yLS4zLjUtLjkuOC0xLjguNy0yLjktLjEtLjktLjItMS44LS4zLTIuOC0uMS0uNi0uMi0xLjEtLjMtMS43LS41LTIuNS0yLjMtNC42LTQuNy01LjMtMi4xLS42LTQtLjEtNS42IDEuNi0xLjcgMS44LTIgNC40LS43IDYuNXpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0M1xcXCIgZD1cXFwiTTM4NS43IDQyOS4xaC0uOHMwLTMuMi0uOC0zLjljLTEuMi0xLTQuNS4zLTUuOSAxLjQtLjQuNC0uNy43LS43IDEuMy4xIDEuMi41IDMuNSAxLjcgNS41IDAgMC01LTUuMi00LjUtOS40LjMtMi44LjgtNC44IDQuMy00LjggNS41IDAgOS42IDIuNyAxMS4yIDguNGwtMy41LjItMSAxLjN6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDlcXFwiIGQ9XFxcIk0zODUuOSA0MjkuNWMuNiAxIDIgMS4zIDMuMS43czEuNi0yIDEtM2MtLjYtMS0yLTEuMy0zLjEtLjctMS4yLjYtMS42IDItMSAzelxcXCIgLz48cGF0aCBjbGFzcz1cXFwic3Q1XFxcIiBkPVxcXCJNMzA1IDQ5OS43aDcwLjF2NTguNkgzMDV6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDEzXFxcIiBkPVxcXCJNMjgxLjIgNDk5LjdIMzA1djU4LjZoLTIzLjh6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDEzXFxcIiBkPVxcXCJtMzA1IDQ5OS43LTkuNCAxNy45aC0yNi4ybDExLjgtMTcuOXptODEgMTkuOS03MCA0LjUtMTEtMjQuNCA3MC4xIDQuNXpcXFwiIC8+PHBhdGggY2xhc3M9XFxcInN0NVxcXCIgZD1cXFwiTTM4NiA1MTkuNmgtNzBsLTExLTE5LjloNzAuMXptLTgxLTE5LjktNS4zIDIwLTMwLjMtMi4xaDI2LjJ6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk0zOC45IDI0MS44YzMuNS0xOC42IDEwLjgtMzYuNSAyMC43LTUyLjcgNS04LjEgMTAuNy0xNS44IDE3LjEtMjIuOSAzLjItMy42IDYuNS03IDEwLTEwLjMgMy41LTMuMyA3LjEtNi40IDEwLjgtOS40IDE1LTExLjkgMzIuMy0yMC45IDUwLjYtMjYuNyA5LjItMi45IDE4LjYtNC45IDI4LjEtNi4xIDIuNC0uMyA0LjgtLjUgNy4xLS44bDMuNi0uM2MxLjItLjEgMi40LS4xIDMuNi0uMiA0LjgtLjIgOS42LS4yIDE0LjQgMCA0LjguMiA5LjYuNyAxNC4zIDEuMyA0LjguNiA5LjUgMS41IDE0LjIgMi41IDIuMy41IDQuNyAxLjEgNyAxLjdsMy41IDFjMS4yLjMgMi4zLjcgMy40IDEuMS42LjIgMS4xLjQgMS43LjVsMS43LjZjMS4xLjQgMi4zLjggMy40IDEuMiAxLjEuNCAyLjIuOCAzLjQgMS4zbDMuMyAxLjRjLjYuMiAxLjEuNSAxLjcuN2wxLjYuNyAzLjMgMS41IDMuMiAxLjYgMS42LjggMS42LjggMy4yIDEuNyAzLjEgMS43IDEuNi45IDEuNS45IDMuMSAxLjhjNC4xIDIuNCA4LjEgNC45IDEyLjEgNy41IDQgMi42IDcuOSA1LjIgMTEuOSA3LjkgNy44IDUuMyAxNS42IDEwLjcgMjMuNSAxNS45IDMuOSAyLjYgNy45IDUuMSAxMS45IDcuNiA0IDIuNCA4LjEgNC44IDEyLjIgNy4xIDIgMS4yIDQuMSAyLjIgNi4yIDMuMyAxIC42IDIuMSAxIDMuMiAxLjYgMS4xLjUgMi4xIDEuMSAzLjIgMS41IDIuMSAxIDQuMyAyIDYuNSAyLjggMS4xLjQgMi4yLjkgMy4zIDEuM2wzLjMgMS4yIDMuMyAxLjJjMS4xLjQgMi4yLjggMy40IDEuMWwzLjQgMWMuNi4yIDEuMS4zIDEuNy41bDEuNy40YzEuMS4zIDIuMy42IDMuNC44bDMuNS43Yy42LjEgMS4yLjIgMS43LjNsMS43LjMgMy41LjVjLTkuNC0uOC0xOC44LTIuNy0yNy44LTUuNi05LTIuOS0xNy44LTYuNy0yNi4zLTExLTQuMy0yLjEtOC40LTQuNC0xMi41LTYuOC00LjEtMi40LTguMi00LjgtMTIuMi03LjNzLTgtNS4xLTEyLTcuNmwtMTEuOS03LjdjLTQtMi42LTcuOS01LjEtMTEuOS03LjZzLTgtNC45LTEyLjEtNy4zbC0zLjEtMS43LTEuNS0uOS0xLjUtLjgtMy4xLTEuNy0zLjEtMS42LTEuNi0uOC0xLjYtLjgtMy4yLTEuNS0zLjItMS40LTEuNi0uN2MtLjUtLjItMS4xLS40LTEuNi0uNy0xNy4yLTcuMi0zNS43LTExLjItNTQuMy0xMS45LTE4LjYtLjgtMzcuNCAxLjUtNTUuMiA2LjktNC41IDEuMy04LjkgMi45LTEzLjIgNC42LTQuMyAxLjctOC42IDMuNy0xMi43IDUuOC04LjMgNC4yLTE2LjIgOS4yLTIzLjcgMTQuOC03LjQgNS43LTE0LjQgMTEuOS0yMC44IDE4LjgtNi40IDYuOC0xMi4yIDE0LjItMTcuNCAyMi0xMC42IDE1LjktMTguMyAzMy4zLTIyLjkgNTEuN3pNNjU4IDM3MC4yYzYuNSAxMy45IDEwLjMgMjkuMSAxMS41IDQ0LjUgMS4xIDE1LjQtLjQgMzEuMS00LjYgNDYuMS00LjIgMTQuOS0xMS4yIDI5LjEtMjAuMyA0MS42LTkuMSAxMi41LTIwLjMgMjMuNS0zMy4yIDMxLjkgMTEuOS05LjcgMjIuMy0yMSAzMC43LTMzLjYgOC40LTEyLjYgMTQuOS0yNi40IDE5LTQxIDQuMS0xNC41IDUuOS0yOS43IDUuMy00NC45LS40LTE1LjEtMy4zLTMwLjItOC40LTQ0LjZ6XFxcIiAvPjxwYXRoIGNsYXNzPVxcXCJzdDFcXFwiIGQ9XFxcIk02MzkuOCA0MjIuMmMuNCA5LjUtLjkgMTkuMi0zLjYgMjguMy0xLjQgNC42LTMuMSA5LjEtNS4yIDEzLjQtMi4xIDQuMy00LjYgOC41LTcuMyAxMi40LTIuOCAzLjktNS45IDcuNi05LjIgMTEuMS0zLjQgMy40LTcgNi42LTEwLjkgOS40LTcuNyA1LjctMTYuNCAxMC4xLTI1LjUgMTIuOSA4LjgtMy41IDE3LjEtOC4zIDI0LjYtMTQuMSAzLjctMi45IDcuMi02LjEgMTAuNS05LjUgMy4zLTMuNCA2LjMtNyA5LTEwLjkgMi43LTMuOCA1LjEtNy45IDcuMy0xMi4xIDIuMS00LjIgMy45LTguNiA1LjQtMTMuMSAyLjktOC44IDQuNS0xOC4yIDQuOS0yNy44elxcXCIgLz48L3N5bWJvbD48c3ltYm9sIGNsYXNzPVxcXCJpY29uXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTAyNCAxMDI0XFxcIiAgaWQ9XFxcImljb24tbWVtYmVyX2JhbGFuY2VcXFwiPjxwYXRoIGQ9XFxcIk05ODMuOCAzMTIuN0M5NTggMjUxLjcgOTIxIDE5NyA4NzQgMTUwYy00Ny00Ny0xMDEuOC04My45LTE2Mi43LTEwOS43QzY0OC4yIDEzLjUgNTgxLjEgMCA1MTIgMFMzNzUuOCAxMy41IDMxMi43IDQwLjJDMjUxLjcgNjYgMTk3IDEwMi45IDE1MCAxNTBjLTQ3IDQ3LTgzLjkgMTAxLjgtMTA5LjcgMTYyLjdDMTMuNSAzNzUuOCAwIDQ0Mi45IDAgNTEyczEzLjUgMTM2LjIgNDAuMiAxOTkuM0M2NiA3NzIuMyAxMDIuOSA4MjcgMTUwIDg3NGM0NyA0NyAxMDEuOCA4My45IDE2Mi43IDEwOS43IDYzLjEgMjYuNyAxMzAuMiA0MC4yIDE5OS4zIDQwLjJzMTM2LjItMTMuNSAxOTkuMy00MC4yQzc3Mi4zIDk1OCA4MjcgOTIxIDg3NCA4NzRjNDctNDcgODMuOS0xMDEuOCAxMDkuNy0xNjIuNyAyNi43LTYzLjEgNDAuMi0xMzAuMiA0MC4yLTE5OS4zcy0xMy40LTEzNi4yLTQwLjEtMTk5LjN6bS01NS4zIDM3NS4yYy0yMi44IDUzLjgtNTUuNCAxMDIuMi05Ni45IDE0My43cy04OS45IDc0LjEtMTQzLjcgOTYuOUM2MzIuMiA5NTIuMSA1NzMgOTY0IDUxMiA5NjRzLTEyMC4yLTExLjktMTc1LjktMzUuNWMtNTMuOC0yMi44LTEwMi4yLTU1LjQtMTQzLjctOTYuOXMtNzQuMS04OS45LTk2LjktMTQzLjdDNzEuOSA2MzIuMiA2MCA1NzMgNjAgNTEyczExLjktMTIwLjIgMzUuNS0xNzUuOWMyMi44LTUzLjggNTUuNC0xMDIuMiA5Ni45LTE0My43czg5LjktNzQuMSAxNDMuNy05Ni45QzM5MS44IDcxLjkgNDUxIDYwIDUxMiA2MHMxMjAuMiAxMS45IDE3NS45IDM1LjVjNTMuOCAyMi44IDEwMi4yIDU1LjQgMTQzLjcgOTYuOXM3NC4xIDg5LjkgOTYuOSAxNDMuN0M5NTIuMSAzOTEuOCA5NjQgNDUxIDk2NCA1MTJzLTExLjkgMTIwLjItMzUuNSAxNzUuOXpcXFwiIC8+PHBhdGggZD1cXFwiTTcwNiA0NjkuMUg1NzQuN2w4NC4yLTE4MC42YzctMTUgLjQtMzIuOS0xNC41LTM5LjktMTUtNy0zMi45LS40LTM5LjkgMTQuNUw1MTIgNDYxLjVsLTkyLjUtMTk4LjNjLTctMTUtMjQuOS0yMS41LTM5LjktMTQuNXMtMjEuNSAyNC45LTE0LjUgMzkuOWw4NC4yIDE4MC42SDMxOGMtMTYuNSAwLTMwIDEzLjUtMzAgMzBzMTMuNSAzMCAzMCAzMGgxNjR2NjRoLTkyLjVjLTIwLjYgMC0zNy41IDEzLjUtMzcuNSAzMHMxNi45IDMwIDM3LjUgMzBINDgydjk1YzAgMTYuNSAxMy41IDMwIDMwIDMwczMwLTEzLjUgMzAtMzB2LTk1aDkyLjVjMjAuNiAwIDM3LjUtMTMuNSAzNy41LTMwcy0xNi45LTMwLTM3LjUtMzBINTQydi02NGgxNjRjMTYuNSAwIDMwLTEzLjUgMzAtMzAgMC0xNi42LTEzLjUtMzAuMS0zMC0zMC4xelxcXCIgLz48L3N5bWJvbD48c3ltYm9sIGNsYXNzPVxcXCJpY29uXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTAyNCAxMDI0XFxcIiAgaWQ9XFxcImljb24tbWVtYmVyX2V4cGVuZGl0dXJlX2JhbGFuY2VcXFwiPjxwYXRoIGQ9XFxcIk01MTAuNzIgOTYyLjU2QzI2Mi40IDk2MCA2MS40NCA3NTcuNzYgNjQgNTA5LjQ0IDY2LjU2IDI2My42OCAyNjQuOTYgNjUuMjggNTEwLjcyIDYyLjcyYzE3LjkyIDAgMzQuNTYgMTQuMDggMzQuNTYgMzJzLTE0LjA4IDM0LjU2LTMyIDM0LjU2aC0yLjU2QzI5OS41MiAxMzAuNTYgMTI4IDMwMC44IDEyOCA1MTJzMTcxLjUyIDM4Mi43MiAzODIuNzIgMzgyLjcyUzg5My40NCA3MjMuMiA4OTMuNDQgNTEyYzAtMTcuOTIgMTYuNjQtMzMuMjggMzQuNTYtMzIgMTcuOTIgMCAzMiAxNS4zNiAzMiAzMiAwIDI0OC4zMi0yMDAuOTYgNDUwLjU2LTQ0OS4yOCA0NTAuNTZ6XFxcIiAvPjxwYXRoIGQ9XFxcIk02NDUuMTIgNDgwSDM3NS4wNGMtMTcuOTIgMC0zNC41Ni0xNC4wOC0zNC41Ni0zMnMxNC4wOC0zNC41NiAzMi0zNC41NmgyNzIuNjRjMTcuOTIgMCAzMy4yOCAxNi42NCAzMiAzNC41NiAwIDE3LjkyLTE0LjA4IDMyLTMyIDMyem0wIDEzMC41NkgzNzUuMDRjLTE3LjkyIDAtMzMuMjgtMTYuNjQtMzItMzQuNTYgMC0xNy45MiAxNS4zNi0zMiAzMi0zMmgyNzAuMDhjMTcuOTIgMCAzMy4yOCAxNi42NCAzMiAzNC41NiAwIDE2LjY0LTE0LjA4IDMyLTMyIDMyelxcXCIgLz48cGF0aCBkPVxcXCJNNTEwLjcyIDc0Ni4yNGMtMTcuOTIgMC0zMy4yOC0xNS4zNi0zMy4yOC0zMy4yOFY0NDEuNmMwLTE3LjkyIDE2LjY0LTMzLjI4IDM0LjU2LTMyIDE3LjkyIDAgMzIgMTUuMzYgMzIgMzJ2MjcwLjA4YzAgMTkuMi0xNS4zNiAzNC41Ni0zMy4yOCAzNC41NnpcXFwiIC8+PHBhdGggZD1cXFwiTTUxMC43MiA0NTguMjRjLTguOTYgMC0xNy45Mi0zLjg0LTI0LjMyLTEwLjI0TDM3NS4wNCAzMzYuNjRjLTE0LjA4LTEyLjgtMTUuMzYtMzMuMjgtMi41Ni00Ny4zNnMzMy4yOC0xNS4zNiA0Ny4zNi0yLjU2bDIuNTYgMi41NiAxMTEuMzYgMTExLjM2YzEyLjggMTIuOCAxMi44IDM0LjU2IDAgNDcuMzYtNi40IDYuNC0xNS4zNiAxMC4yNC0yMy4wNCAxMC4yNHpcXFwiIC8+PHBhdGggZD1cXFwiTTUxMC43MiA0NTguMjRjLTguOTYgMC0xNy45Mi0zLjg0LTI0LjMyLTEwLjI0LTEyLjgtMTIuOC0xMi44LTM0LjU2IDAtNDcuMzZsMTExLjM2LTExMS4zNmMxNC4wOC0xMi44IDM1Ljg0LTEwLjI0IDQ3LjM2IDIuNTYgMTEuNTIgMTIuOCAxMS41MiAzMiAwIDQ0LjhMNTMzLjc2IDQ0OGMtNi40IDYuNC0xNS4zNiAxMC4yNC0yMy4wNCAxMC4yNHptNDE0LjcyLTIxNi4zMmMxNy45MiAwIDMzLjI4LTE1LjM2IDMzLjI4LTMzLjI4IDAtOC45Ni0zLjg0LTE3LjkyLTEwLjI0LTI0LjMyTDgzNy4xMiA3Mi45NmMtMTIuOC0xNC4wOC0zMy4yOC0xNC4wOC00Ny4zNi0xLjI4cy0xNC4wOCAzMy4yOC0xLjI4IDQ3LjM2bDEuMjggMS4yOCAxMTEuMzYgMTExLjM2YzcuNjggNi40IDE1LjM2IDEwLjI0IDI0LjMyIDEwLjI0elxcXCIgLz48cGF0aCBkPVxcXCJNODE1LjM2IDM1My4yOGM4Ljk2IDAgMTcuOTItMy44NCAyNC4zMi0xMC4yNGwxMTEuMzYtMTExLjM2YzEyLjgtMTQuMDggMTAuMjQtMzUuODQtMi41Ni00Ny4zNi0xMi44LTExLjUyLTMyLTExLjUyLTQ0LjggMEw3OTIuMzIgMjk1LjY4Yy0xMi44IDEyLjgtMTIuOCAzNC41NiAwIDQ3LjM2IDUuMTIgNi40IDE0LjA4IDEwLjI0IDIzLjA0IDEwLjI0elxcXCIgLz48cGF0aCBkPVxcXCJNOTIwLjMyIDI0MS45MmMxNy45MiAwIDM0LjU2LTE0LjA4IDM0LjU2LTMycy0xNC4wOC0zNC41Ni0zMi0zNC41Nkg2OTUuMDRjLTE3LjkyIDAtMzMuMjggMTYuNjQtMzIgMzQuNTYgMCAxNy45MiAxNS4zNiAzMiAzMiAzMmgyMjUuMjh6XFxcIiAvPjwvc3ltYm9sPjxzeW1ib2wgY2xhc3M9XFxcImljb25cXFwiIHZpZXdCb3g9XFxcIjAgMCAxMDI0IDEwMjRcXFwiICBpZD1cXFwiaWNvbi1tZW1iZXJfbGV2ZWxcXFwiPjxwYXRoIGQ9XFxcIm05MzYuOTYgMzg1Ljg3Ny0yMDMuNDM1LTIwNC44LTE4LjA5LTcuNjhoLTQwNi44N2wtMTguMDkgNy42OC0yMDMuNDM1IDIwNC44Yy05LjcyOCA5Ljg5OS05Ljg5OSAyNS45NDItLjE3IDM1Ljg0bDQwNi44NjkgNDIxLjAzNWM0Ljc3OCA0Ljk1IDExLjQzNCA3Ljg1IDE4LjQzMiA3Ljg1IDYuOTk3IDAgMTMuNjUzLTIuOSAxOC40MzItNy44NWw0MDYuODY5LTQyMS4wMzVjOS4zODctMTAuMDY5IDkuMjE2LTI1Ljk0MS0uNTEyLTM1Ljg0em0tNjguNDM3IDMuNzU1SDcyNi41MjhsLTE2My44NC0xNjUuMDM1aDE0MS45OTVsMTYzLjg0IDE2NS4wMzV6TTMxOS4zMTcgMjI0Ljc2OGgxNDMuMDE5bC0xNjMuODQgMTY1LjAzNUgxNTUuNDc3bDE2My44NC0xNjUuMDM1ek0xNzYuNDcgNDQwLjgzMmgxMzIuNjA4bDE4LjA5MS03LjUxIDE4NS4xNzMtMTg2LjUzOCAxODUuMTc0IDE4Ni41MzkgMTguMDkgNy41MDlIODQ3LjE5TDUxMiA3ODcuOTY4IDE3Ni40NyA0NDAuODMyelxcXCIgLz48L3N5bWJvbD48c3ltYm9sIGNsYXNzPVxcXCJpY29uXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTAyNCAxMDI0XFxcIiAgaWQ9XFxcImljb24tbWVtYmVyX3BvaW50XFxcIj48cGF0aCBkPVxcXCJNNTA5LjA5MiA1MDEuNjUzYzI0MS43NzUgMCA0MjQuMDg3LTc4LjA4NSA0MjQuMDg3LTE4MS42NCAwLTEwMy41NDMtMTgyLjMxMi0xODEuNjI4LTQyNC4wODctMTgxLjYyOFM4NC45OTQgMjE2LjQ3IDg0Ljk5NCAzMjAuMDE1YzAgMTAzLjU1NCAxODIuMzIyIDE4MS42MzggNDI0LjA5OCAxODEuNjM4em0wLTMxNy40MzJjMjIyLjkwOSAwIDM3OC4yNTIgNzEuNTYyIDM3OC4yNTIgMTM1Ljc5M1M3MzIuMDAyIDQ1NS44MTggNTA5LjA5MiA0NTUuODE4Yy0yMjIuOTIgMC0zNzguMjYzLTcxLjU3My0zNzguMjYzLTEzNS44MDRzMTU1LjM0My0xMzUuNzkzIDM3OC4yNjMtMTM1Ljc5M3pcXFwiIC8+PHBhdGggZD1cXFwiTTUwOS4wODQgNjk0LjA2MmMyNDEuMTE1IDAgNDIyLjkzNy03Ny41OTkgNDIyLjkzNy0xODAuNDgzIDAtMjcuMTctMTMuMTI4LTUyLjQ1NC0zNi4yNDEtNzUuMTMxLS4xNDktLjE1NC0uMjY2LS4zMi0uNDE5LS40NjktLjE3LS4xNjctLjI4NS0uMzQ2LS40NTYtLjUxbC0uMTE1LjEyNWMtMy43MTctMy40MDctOC41NzYtNS42MDgtMTQuMDE3LTUuNjA4LTExLjU0MyAwLTIwLjg5OSA5LjM1Ni0yMC44OTkgMjAuODk5IDAgNi4xMSAyLjcyMiAxMS40ODEgNi45MDEgMTUuMzAybC0uMDgzLjA5MWMxMy45NDkgMTQuMDI1IDIxLjgxIDMxLjE1NSAyMS44MSA0NS4zMDEgMCA2NC43ODUtMTU1LjgxNCAxMzYuOTY2LTM3OS40MiAxMzYuOTY2LTIyMy41OTUgMC0zNzkuNDEtNzIuMTgtMzc5LjQxLTEzNi45NjYgMC0xNi4xNCA0LjUzOC0yOS45NTIgMjIuMzI0LTQ1LjY3LjIxNC0uMjA1LjQzLS4zODIuNjM1LS41OTUuMTM3LS4xMTguMjQtLjIzMy4zNzktLjM1NGwtLjA4NS0uMDhjMy40MTctMy43MiA1LjYyMy04LjU5IDUuNjIzLTE0LjAzOCAwLTExLjU0My05LjM1Ni0yMC45LTIwLjg5OS0yMC45LTUuNzcgMC0xMC45OTMgMi4zNDEtMTQuNzczIDYuMTJsLS4xMjMtLjExOWMtMjMuNDA4IDIyLjc5OC0zNi41OTUgNDguMjc4LTM2LjU5NSA3NS42MzYgMCAxMDIuODgzIDE4MS44MjEgMTgwLjQ4MyA0MjIuOTI2IDE4MC40ODN6XFxcIiAvPjxwYXRoIGQ9XFxcIk04OTUuNTc3IDYyOS41M2MtLjE2OS0uMTY1LS4yODItLjM0My0uNDUzLS41MDhsLS4xMTUuMTI1Yy0zLjcxNy0zLjQwOC04LjU3Ny01LjYwOS0xNC4wMTgtNS42MDktMTEuNTQgMC0yMC44OTggOS4zNTYtMjAuODk4IDIwLjkgMCA2LjExIDIuNzIgMTEuNDgyIDYuOTAxIDE1LjMwMmwtLjA4NC4wOWMxMy45NSAxNC4wMjUgMjEuODExIDMxLjE1NSAyMS44MTEgNDUuMzAyIDAgNjQuNzg3LTE1NS44MTQgMTM2Ljk2Ni0zNzkuNDIgMTM2Ljk2Ni0yMjMuNTk1IDAtMzc5LjQxLTcyLjE4LTM3OS40MS0xMzYuOTY2IDAtMTYuMTQgNC41MzgtMjkuOTUzIDIyLjMyMi00NS42Ny4yMTQtLjIwMy40My0uMzgyLjYzNS0uNTk1LjEzNy0uMTE5LjI0LS4yMzMuMzc5LS4zNTRsLS4wODUtLjA4MWMzLjQxNy0zLjcyIDUuNjIzLTguNTg5IDUuNjIzLTE0LjAzOCAwLTExLjU0My05LjM1Ni0yMC44OTktMjAuODk4LTIwLjg5OS01Ljc3IDAtMTAuOTkzIDIuMzQtMTQuNzczIDYuMTJsLS4xMjMtLjExOWMtMjMuNDEgMjIuNzk3LTM2LjU5NSA0OC4yNzktMzYuNTk1IDc1LjYzNiAwIDEwMi44ODQgMTgxLjgyMSAxODAuNDgyIDQyMi45MjcgMTgwLjQ4MiAyNDEuMTE0IDAgNDIyLjkzNS03Ny41OTggNDIyLjkzNS0xODAuNDgyIDAtMjcuMTY3LTEzLjEyNi01Mi40NTMtMzYuMjM1LTc1LjEyNy0uMTUyLS4xNTgtLjI3Mi0uMzI0LS40MjYtLjQ3NXpcXFwiIC8+PC9zeW1ib2w+PHN5bWJvbCBjbGFzcz1cXFwiaWNvblxcXCIgdmlld0JveD1cXFwiMCAwIDEwMjQgMTAyNFxcXCIgIGlkPVxcXCJpY29uLW1lbWJlcl9yZWNoYXJnZV9iYWxhbmNlXFxcIj48cGF0aCBkPVxcXCJNNTEyIDc1MC41MWMtMTkuMDggMC0zMS44MDEtMTIuNzIxLTMxLjgwMS0zMS44MDJWNDMyLjQ5N2MwLTE5LjA4IDEyLjcyLTMxLjgwMSAzMS44MDEtMzEuODAxczMxLjgwMSAxMi43MiAzMS44MDEgMzEuOHYyODYuMjEyYy02LjM2IDE5LjA4LTE5LjA4IDMxLjgwMS0zMS44MDEgMzEuODAxelxcXCIgLz48cGF0aCBkPVxcXCJNNjUxLjkyNSA1MzQuMjZoLTI4Ni4yMWMtMTkuMDgxIDAtMzEuODAyLTEyLjcyLTMxLjgwMi0zMS44IDAtMTkuMDgxIDEyLjcyLTMxLjgwMiAzMS44MDEtMzEuODAyaDI4Ni4yMTFjMTkuMDgxIDAgMzEuODAyIDEyLjcyIDMxLjgwMiAzMS44MDIgMCAxOS4wOC0xMi43MiAzMS44LTMxLjgwMiAzMS44ek02NTEuOTI1IDY0OC43NDVoLTI4Ni4yMWMtMTkuMDgxIDAtMzEuODAyLTEyLjcyLTMxLjgwMi0zMS44IDAtMTkuMDgyIDEyLjcyLTMxLjgwMiAzMS44MDEtMzEuODAyaDI4Ni4yMTFjMTkuMDgxIDAgMzEuODAyIDEyLjcyIDMxLjgwMiAzMS44MDEgMCAxOS4wOC0xMi43MiAzMS44MDEtMzEuODAyIDMxLjgwMXpNNTEyIDQ2NC4yOThjLTYuMzYgMC0xOS4wOCAwLTI1LjQ0MS02LjM2TDM1Mi45OTQgMzI0LjM3M2MtMTIuNzItMTIuNzItMTIuNzItMzEuODAyIDAtNDQuNTIyIDEyLjcyLTEyLjcyIDMxLjgwMS0xMi43MiA0NC41MjIgMEw1MzEuMDggNDEzLjQxNmMxMi43MiAxMi43MiAxMi43MiAzMS44MDEgMCA0NC41MjItNi4zNiA2LjM2LTEyLjcyIDYuMzYtMTkuMDgxIDYuMzZ6XFxcIiAvPjxwYXRoIGQ9XFxcIk01MTIgNDY0LjI5OGMtNi4zNiAwLTE5LjA4IDAtMjUuNDQxLTYuMzYtMTIuNzItMTIuNzItMTIuNzItMzEuODAxIDAtNDQuNTIybDEzMy41NjUtMTMzLjU2NWMxMi43Mi0xMi43MiAzMS44MDEtMTIuNzIgNDQuNTIyIDAgMTIuNzIgMTIuNzIgMTIuNzIgMzEuODAxIDAgNDQuNTIyTDUzMS4wODEgNDU3LjkzOGMtNi4zNiA2LjM2LTEyLjcyIDYuMzYtMTkuMDgxIDYuMzZ6XFxcIiAvPjxwYXRoIGQ9XFxcIk01MTIgMTAxNy42NGMtMjc5Ljg1IDAtNTA4LjgyLTIyOC45Ny01MDguODItNTA4LjgyUzIzMi4xNSAwIDUxMiAwczUwOC44MiAyMjguOTY5IDUwOC44MiA1MDguODJjMCAyNS40NCAwIDUwLjg4Mi02LjM2IDgyLjY4MyAwIDE5LjA4LTE5LjA4MSAzMS44MDEtMzguMTYyIDI1LjQ0MS0xOS4wOCAwLTMxLjgwMS0xOS4wOC0yNS40NC0zOC4xNjEgNi4zNi0yNS40NDEgNi4zNi00NC41MjIgNi4zNi02OS45NjNDOTU3LjIxNyAyNjAuNzcgNzYwLjA1IDYzLjYwMiA1MTIgNjMuNjAyUzY2Ljc4MyAyNjcuMTMgNjYuNzgzIDUxNS4xOCAyNjMuOTUgOTYwLjM5OCA1MTIgOTYwLjM5OGMyNS40NDEgMCA1Ny4yNDIgMCA4Mi42ODMtNi4zNiAxOS4wODEtNi4zNjEgMzEuODAxIDYuMzYgMzguMTYyIDI1LjQ0IDYuMzYgMTkuMDgxLTYuMzYgMzEuODAyLTI1LjQ0MSAzOC4xNjJINTEyelxcXCIgLz48cGF0aCBkPVxcXCJNOTg5LjAxOSA4NjQuOTk0SDY3MS4wMDZjLTE5LjA4IDAtMzEuODAxLTEyLjcyLTMxLjgwMS0zMS44MDFzMTIuNzItMzEuODAyIDMxLjgwMS0zMS44MDJIOTg5LjAyYzE5LjA4IDAgMzEuOCAxMi43MiAzMS44IDMxLjgwMnMtMTkuMDggMzEuOC0zMS44IDMxLjh6XFxcIiAvPjxwYXRoIGQ9XFxcIk04MzAuMDEyIDEwMjRjLTE5LjA4IDAtMzEuOC0xMi43Mi0zMS44LTMxLjgwMVY2NzQuMTg2YzAtMTkuMDggMTIuNzItMzEuOCAzMS44LTMxLjhzMzEuODAyIDEyLjcyIDMxLjgwMiAzMS44Vjk5Mi4yYzAgMTIuNzItMTkuMDgxIDMxLjgwMS0zMS44MDIgMzEuODAxelxcXCIgLz48L3N5bWJvbD48c3ltYm9sICB2aWV3Qm94PVxcXCIwIDAgMTI4IDEyOFxcXCIgaWQ9XFxcImljb24tbWVzc2FnZVxcXCI+PHBhdGggZD1cXFwiTTAgMjAuOTY3djU5LjU5YzAgMTEuNTkgOC41MzcgMjAuOTY2IDE5LjA3NSAyMC45NjZoMjguNjEzbDEgMjYuNDc3TDc2LjggMTAxLjUyM2gzMi4xMjVjMTAuNTM4IDAgMTkuMDc1LTkuMzc3IDE5LjA3NS0yMC45NjZ2LTU5LjU5QzEyOCA5LjM3NyAxMTkuNDYzIDAgMTA4LjkyNSAwaC04OS44NUM4LjUzOCAwIDAgOS4zNzcgMCAyMC45Njd6bTgyLjMyNSAzMy4xYzAtNS41MjQgNC4wMTMtOS45MzUgOS4wMzctOS45MzUgNS4wMjYgMCA5LjAzOCA0LjQxIDkuMDM4IDkuOTM0IDAgNS41MjQtNC4wMjUgOS45MzQtOS4wMzggOS45MzQtNS4wMjQgMC05LjAzNy00LjQxLTkuMDM3LTkuOTM0em0tMjcuNjEzIDBjMC01LjUyNCA0LjAxMy05LjkzNSA5LjAzOC05LjkzNXM5LjAzNyA0LjQxIDkuMDM3IDkuOTM0YzAgNS41MjQtNC4wMjUgOS45MzQtOS4wMzcgOS45MzQtNS4wMjUgMC05LjAzOC00LjQxLTkuMDM4LTkuOTM0em0tMjcuMSAwYzAtNS41MjQgNC4wMTMtOS45MzUgOS4wMzgtOS45MzVzOS4wMzggNC40MSA5LjAzOCA5LjkzNGMwIDUuNTI0LTQuMDI2IDkuOTM0LTkuMDUgOS45MzQtNS4wMTMgMC05LjAyNS00LjQxLTkuMDI1LTkuOTM0elxcXCIgLz48L3N5bWJvbD48c3ltYm9sICB2aWV3Qm94PVxcXCIwIDAgMTI4IDEyOFxcXCIgaWQ9XFxcImljb24tbW9uZXlcXFwiPjxwYXRoIGQ9XFxcIk01NC4xMjIgMTI3Ljg5MnYtMjguNjhINy41MTNWODcuMjc0aDQ2LjYwOXYtMTIuNEg3LjUxM3YtMTIuODZoMzguMDAzTC4wOTkgMGgyMi42bDMyLjU1NiA0NS4wN2MzLjYxNyA1LjE0NCA2LjQ0IDkuNjExIDguNDg3IDEzLjM4NSAxLjc4OC0zLjA1IDQuODktNy43NzkgOS4zMDEtMTQuMTg2TDEwMy45MyAwaDI0LjAxTDgyLjM4NSA2Mi4wMTNoMzguMzR2MTIuODYyaC00Ni40MXYxMi40aDQ2LjQxdjExLjkzN2gtNDYuNDF2MjguNjhINTQuMTIzelxcXCIgLz48L3N5bWJvbD48c3ltYm9sICB2aWV3Qm94PVxcXCIwIDAgMTI4IDEyOFxcXCIgaWQ9XFxcImljb24tcGVvcGxlc1xcXCI+PHBhdGggZD1cXFwiTTk1LjY0OCAxMTguNzYyYzAgNS4wMzUtMy41NjMgOS4xMjEtNy45NzkgOS4xMjFINy45OGMtNC40MTYgMC03Ljk3OS00LjA4Ni03Ljk3OS05LjEyMUMwIDEwMC41MTkgMTUuNDA4IDgzLjQ3IDMxLjE1MiA3Ni43NWMtOS4wOTktNi40My0xNS4yMTYtMTcuODYzLTE1LjIxNi0zMC45ODd2LTkuMTI4YzAtMjAuMTYgMTQuMjkzLTM2LjUxOCAzMS44OTMtMzYuNTE4czMxLjg5NCAxNi4zNTggMzEuODk0IDM2LjUxOHY5LjEyMmMwIDEzLjEzNy02LjEyMyAyNC41NTYtMTUuMjE2IDMwLjk5MyAxNS43MzggNi43MjYgMzEuMTQxIDIzLjc2OSAzMS4xNDEgNDIuMDEyelxcXCIgLz48cGF0aCBkPVxcXCJNMTA2LjAzMiAxMTguMjUyaDE1Ljg2N2MzLjM3NiAwIDYuMTAxLTMuMTI1IDYuMTAxLTYuOTcyIDAtMTMuOTU3LTExLjc4Ny0yNi45ODQtMjMuODE5LTMyLjEyMyA2Ljk1NS00LjkxOSAxMS42MzgtMTMuNjYgMTEuNjM4LTIzLjcwNHYtNi45ODVjMC0xNS40MTYtMTAuOTI4LTI3LjkyNi0yNC4zOS0yNy45MjYtMS42NzQgMC0zLjMwNi4xOTMtNC44OS41NjEgMS45MzYgNC43MTMgMy4wMTggOS45NzQgMy4wMTggMTUuNTI2djkuMTIxYzAgMTMuMTM3LTMuMDU2IDIzLjExMS0xMS4wNjYgMzAuOTkzIDE0Ljg0MiA0LjQxIDI3LjMxMiAyMy40MiAyNy41NDEgNDEuNTA5elxcXCIgLz48L3N5bWJvbD48c3ltYm9sICB2aWV3Qm94PVxcXCIwIDAgMTI4IDEyOFxcXCIgaWQ9XFxcImljb24tc2hvcHBpbmdcXFwiPjxwYXRoIGQ9XFxcIk00Mi45MTMgMTAxLjM2YzEuNjQyIDAgMy4xOTguMzMyIDQuNjY3Ljk5NmExMi4yOCAxMi4yOCAwIDAgMSAzLjg5IDIuNzcyYzEuMTIzIDEuMTg0IDEuOTg3IDIuNTgyIDIuNTkyIDQuMTkzLjYwNSAxLjYxMi45MDggMy4zMTguOTA4IDUuMTE4IDAgMS44LS4zMDMgMy41MDctLjkwOCA1LjExOC0uNjA1IDEuNjExLTEuNDY5IDMuMDEtMi41OTMgNC4xOTRhMTMuMyAxMy4zIDAgMCAxLTMuODg5IDIuODQzIDEwLjU4MiAxMC41ODIgMCAwIDEtNC42NjcgMS4wNjZjLTEuNzI5IDAtMy4zMDYtLjM1NS00LjczMi0xLjA2NmExMy42MDQgMTMuNjA0IDAgMCAxLTMuODI1LTIuODQzYy0xLjEyMy0xLjE4NS0xLjk4OC0yLjU4My0yLjU5My00LjE5NGExNC40MzcgMTQuNDM3IDAgMCAxLS45MDctNS4xMThjMC0xLjguMzAyLTMuNTA2LjkwNy01LjExOC42MDUtMS42MSAxLjQ3LTMuMDA5IDIuNTkzLTQuMTkzYTEyLjUxNSAxMi41MTUgMCAwIDEgMy44MjUtMi43NzJjMS40MjYtLjY2NCAzLjAwMy0uOTk2IDQuNzMyLS45OTZ6bTUzLjkzMi4yODVjMS42NDMgMCAzLjIyLjMzMSA0LjczMy45OTVhMTEuMzg2IDExLjM4NiAwIDAgMSAzLjg4OSAyLjc3MmMxLjA4IDEuMTg1IDEuOTQ1IDIuNTgzIDIuNTkzIDQuMTk0LjY0OCAxLjYxLjk3MiAzLjMxNy45NzIgNS4xMTggMCAxLjgtLjMyNCAzLjUwNi0uOTcyIDUuMTE3LS42NDggMS42MTEtMS41MTMgMy4wMS0yLjU5MyA0LjE5NGExMi4yNTMgMTIuMjUzIDAgMCAxLTMuODkgMi44NDMgMTEgMTEgMCAwIDEtNC43MzIgMS4wNjYgMTAuNTggMTAuNTggMCAwIDEtNC42NjctMS4wNjYgMTIuNDc4IDEyLjQ3OCAwIDAgMS0zLjgyNC0yLjg0M2MtMS4wOC0xLjE4NS0xLjk0NS0yLjU4My0yLjU5My00LjE5NGExMy41ODEgMTMuNTgxIDAgMCAxLS45NzMtNS4xMTdjMC0xLjgwMS4zMjUtMy41MDcuOTczLTUuMTE4LjY0OC0xLjYxMSAxLjUxMi0zLjAxIDIuNTkzLTQuMTk0YTExLjU1OSAxMS41NTkgMCAwIDEgMy44MjQtMi43NzIgMTEuMjEyIDExLjIxMiAwIDAgMSA0LjY2Ny0uOTk1em0yMS43ODEtODAuNzQ3YzIuNDIgMCA0LjMuMzU1IDUuNjQgMS4wNjYgMS4zNC43MSAyLjI5IDEuNTg3IDIuODUyIDIuNjNhNi40MjcgNi40MjcgMCAwIDEgLjc3OCAzLjM0Yy0uMDQ0IDEuMTg1LS4xOTUgMi4yMDQtLjQ1NCAzLjA1Ny0uMjYuODUzLS44IDIuNjA2LTEuNjIgNS4yNmE1ODkuMjY4IDU4OS4yNjggMCAwIDEtMi43ODggOC43NDMgMTIzNi4zNzMgMTIzNi4zNzMgMCAwIDAtMy4wNDcgOS40NTNjLS45OTQgMy4xMjgtMS43NSA1LjU5Mi0yLjI2OSA3LjM5My0xLjEyMyAzLjc5LTIuNTUgNi40Mi00LjI3OCA3Ljg5LTEuNzI4IDEuNDY5LTMuODQ2IDIuMjAzLTYuMzUyIDIuMjAzSDM5LjAyM2wxLjk0NSAxMi43OTVoNjUuMzQyYzQuMTQ4IDAgNi4yMjMgMS45NDMgNi4yMjMgNS44MjggMCAxLjg5Ni0uNDEgMy41My0xLjIzMiA0LjkwNS0uODIxIDEuMzc0LTIuNDQyIDIuMDYxLTQuODYyIDIuMDYxSDM4LjUwNWMtMS43MjkgMC0zLjE3Ni0uNDI2LTQuMzQzLTEuMjgtMS4xNjctLjg1Mi0yLjE0LTEuOTY2LTIuOTE3LTMuMzRhMjEuMjc3IDIxLjI3NyAwIDAgMS0xLjg4LTQuNDc4IDQ0LjEyOCA0NC4xMjggMCAwIDEtMS4xMDItNC41NWMtLjA4Ny0uNTY4LS4zMjQtMS45NDItLjcxMy00LjEyMi0uMzktMi4xOC0uODY1LTQuOTA0LTEuNDI2LTguMTc0bC0xLjg4LTEwLjk0N2MtLjY5Mi00LjAyNy0xLjM4My04LjA3OS0yLjA3NS0xMi4xNTQtMS42NDItOS41NzItMy41LTIwLjIzNC01LjU3NC0zMS45ODZINi44N2MtMS4yOTYgMC0yLjM3Ny0uMzU2LTMuMjQtMS4wNjdhOS4wMjQgOS4wMjQgMCAwIDEtMi4xNC0yLjU1OCAxMC40MTYgMTAuNDE2IDAgMCAxLTEuMTY3LTMuMkMuMTA4IDguNTMgMCA3LjQ4OCAwIDYuNTRjMC0xLjg5Ni41ODMtMy40NiAxLjc1LTQuNjlDMi45MTcuNjE1IDQuNDk0IDAgNi40ODIgMGgxMy4wOTVjMS43MjggMCAzLjExMS4yODQgNC4xNDguODUzIDEuMDM3LjU2OSAxLjg1OCAxLjI4IDIuNDYzIDIuMTMyYTguNTQ4IDguNTQ4IDAgMCAxIDEuMjk3IDIuNzAxYy4yNi45NDguNDc1IDEuNzU0LjY0OCAyLjQxNy4xNzMuNzU4LjM0NiAxLjgyNS41MTkgMy4xOTkuMTczIDEuMzc0LjM0NSAyLjc3Mi41MTggNC4xOTMuMjYgMS43MDYuNTE5IDMuNTA3Ljc3OCA1LjQwM2g4OC42Nzh6XFxcIiAvPjwvc3ltYm9sPjxzeW1ib2wgY2xhc3M9XFxcImljb25cXFwiIHZpZXdCb3g9XFxcIjAgMCAxMDI0IDEwMjRcXFwiICBpZD1cXFwiaWNvbi1wYXktaWNvbi1hbGlwYXlfYXBwXFxcIj48cGF0aCBkPVxcXCJNOTM4LjcgNjY5LjUyNVYyNDkuNDEyYzAtOTAuNTU1LTczLjUyMi0xNjQuMDc5LTE2NC4xNDYtMTY0LjA3OUgyNDkuMzc4Yy05MC41NTYgMC0xNjQuMDc5IDczLjQ5LTE2NC4wNzkgMTY0LjA4djUyNS4yMDljMCA5MC41NTYgNzMuNDU1IDE2NC4wNzkgMTY0LjA4IDE2NC4wNzloNTI1LjIwOWM4MC43MjUgMCAxNDcuODY1LTU4LjM2OCAxNjEuNTUzLTEzNS4xLTQzLjUyLTE4Ljg0Mi0yMzIuMTA3LTEwMC4yODQtMzMwLjM3Ny0xNDcuMTgzLTc0Ljc4NiA5MC41OS0xNTMuMDg4IDE0NC45My0yNzEuMTIgMTQ0LjkzUzEzNy44MyA3MjguNjQ0IDE0Ny4yODQgNjM5LjY5M2M2LjI0Ny01OC40MDIgNDYuMjg1LTE1My45MDcgMjIwLjI5Ny0xMzcuNTIzIDkxLjY4MiA4LjYwMSAxMzMuNjY2IDI1LjczNiAyMDguNDE4IDUwLjQxNSAxOS4zNTQtMzUuNDMgMzUuNDMtNzQuNTE0IDQ3LjYxNi0xMTYuMDJIMjkyLjA0NXYtMzIuODdINDU2LjA5di01OC45ODJIMjU2VjMwOC41M2gyMDAuMTI0di04NS4xOTdzMS44MDktMTMuMzEyIDE2LjUyLTEzLjMxMmg4Mi4wNTd2OTguNDc1aDIxMy4zMzN2MzYuMTgxSDU1NC43MDF2NTguOTgzaDE3NC4wNDZjLTE2LjAwOSA2NS4xMjYtNDAuMjc4IDEyNC45NjItNzAuNjkgMTc3LjIyIDUwLjU1MSAxOC4yOTYgMjgwLjY0NCA4OC42NDQgMjgwLjY0NCA4OC42NDR6bS02MTcuMTMgNzUuNDdjLTEyNC43MjMgMC0xNDQuNDUyLTc4Ljc0Ni0xMzcuODMtMTExLjY1MSA2LjU1My0zMi43MzQgNDIuNjY2LTc1LjUwMyAxMTIuMDI1LTc1LjUwMyA3OS42NjggMCAxNTEuMDQgMjAuNDQ2IDIzNi43MTUgNjIuMDg5LTYwLjE3NyA3OC40MDQtMTM0LjExIDEyNS4wNjQtMjEwLjkxIDEyNS4wNjR6bTAgMFxcXCIgZmlsbD1cXFwiIzEyOTZkYlxcXCIgLz48L3N5bWJvbD48c3ltYm9sIGNsYXNzPVxcXCJpY29uXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTAzNiAxMDI0XFxcIiAgaWQ9XFxcImljb24tcGF5LWljb24tYWxpcGF5X2JhclxcXCI+PGRlZnM+PHN0eWxlPkBmb250LWZhY2V7Zm9udC1mYW1pbHk6ZmVlZGJhY2staWNvbmZvbnQ7c3JjOnVybCgvL2F0LmFsaWNkbi5jb20vdC9mb250XzEwMzExNThfMXVocjhyaTBwazUuZW90PyNpZWZpeCkgZm9ybWF0KFxcXCJlbWJlZGRlZC1vcGVudHlwZVxcXCIpLHVybCgvL2F0LmFsaWNkbi5jb20vdC9mb250XzEwMzExNThfMXVocjhyaTBwazUud29mZjIpIGZvcm1hdChcXFwid29mZjJcXFwiKSx1cmwoLy9hdC5hbGljZG4uY29tL3QvZm9udF8xMDMxMTU4XzF1aHI4cmkwcGs1LndvZmYpIGZvcm1hdChcXFwid29mZlxcXCIpLHVybCgvL2F0LmFsaWNkbi5jb20vdC9mb250XzEwMzExNThfMXVocjhyaTBwazUudHRmKSBmb3JtYXQoXFxcInRydWV0eXBlXFxcIiksdXJsKC8vYXQuYWxpY2RuLmNvbS90L2ZvbnRfMTAzMTE1OF8xdWhyOHJpMHBrNS5zdmcjaWNvbmZvbnQpIGZvcm1hdChcXFwic3ZnXFxcIil9PC9zdHlsZT48L2RlZnM+PHBhdGggZD1cXFwiTTI3LjU4NyAzMzYuNjJoNjkuMTQ4YTEzLjk3OSAxMy45NzkgMCAwIDAgMTMuNzkzLTEzLjk4VjEzLjk5QTEzLjk3OSAxMy45NzkgMCAwIDAgOTYuNzM1LjAxSDI3LjU4N0ExMy45NzkgMTMuOTc5IDAgMCAwIDEzLjc5NSAxMy45OXYzMDguNjVhMTMuOTc5IDEzLjk3OSAwIDAgMCAxMy43OTIgMTMuOTh6bTE2NS44ODEgMGgyNy41ODVhMTMuOTc5IDEzLjk3OSAwIDAgMCAxMy43OTItMTMuOThWMTMuOTlBMTMuOTc5IDEzLjk3OSAwIDAgMCAyMjEuMDUzLjAxaC0yNy41ODVhMTMuOTc5IDEzLjk3OSAwIDAgMC0xMy43OTIgMTMuOTc5djMwOC42NWExMy45NzkgMTMuOTc5IDAgMCAwIDEzLjc5MiAxMy45OHptMTM4LjExIDMyMi42MjhIMjIxLjA1M2EyNy43NzEgMjcuNzcxIDAgMCAwLTI3LjU4NSAyOC4xNDR2MTExLjgzYTI3Ljc3MSAyNy43NzEgMCAwIDAgMjcuNTg1IDI4LjE0NGgxMTAuNTI1YTI3Ljk1NyAyNy45NTcgMCAwIDAgMjcuNTg1LTI4LjE0NHYtMTExLjgzYTI3Ljk1NyAyNy45NTcgMCAwIDAtMjcuNTg1LTI4LjE0NHpNODE2LjE3NCAzMzYuNjJoMjcuNTg1YTEzLjk3OSAxMy45NzkgMCAwIDAgMTMuNzkyLTEzLjk3OVYxMy45OUExMy45NzkgMTMuOTc5IDAgMCAwIDg0My4wMTMuMDFIODE1LjQzYTEzLjk3OSAxMy45NzkgMCAwIDAtMTMuOTggMTMuOTc5djMwOC42NWExMy45NzkgMTMuOTc5IDAgMCAwIDEzLjk4IDEzLjk4em0tNDY5Ljg3MiAwaDgyLjM4MmExMy45NzkgMTMuOTc5IDAgMCAwIDEzLjc5Mi0xMy45NzlWMTMuOTlBMTMuOTc5IDEzLjk3OSAwIDAgMCA0MjguNjg0LjAxaC04My4xMjdhMTMuOTc5IDEzLjk3OSAwIDAgMC0xMy43OTMgMTMuOTc5djMwOC42NWExMy45NzkgMTMuOTc5IDAgMCAwIDEzLjc5MyAxMy45OHptNTk0LjE5IDBoNjkuMTQ4YTEzLjk3OSAxMy45NzkgMCAwIDAgMTMuNzkyLTEzLjk3OVYxMy45OUExMy45NzkgMTMuOTc5IDAgMCAwIDEwMDguODk0LjAxaC02OS4xNDhhMTMuOTc5IDEzLjk3OSAwIDAgMC0xMy43OTIgMTMuOTc5djMwOC42NWExMy45NzkgMTMuOTc5IDAgMCAwIDEzLjc5MiAxMy45OHpNNTI4LjIxMiA0NjIuOEg2Ni45MTRBNjcuNDcgNjcuNDcgMCAwIDAgLjAwMiA1MzAuODN2NDI1LjE0QTY3LjQ3IDY3LjQ3IDAgMCAwIDY2LjkxNCAxMDI0aDQxOC44MDNhNjcuNDcgNjcuNDcgMCAwIDAgNjYuOTExLTY4LjAzVjQ4Ny43NzZhMjQuNzg5IDI0Ljc4OSAwIDAgMC0yNC40MTYtMjQuOTc2em0tNTguMzM4IDQzMy45YTQyLjY4MiA0Mi42ODIgMCAwIDEtNDIuNDk1IDQzLjA1NWgtMzAxLjk0QTQyLjY4MiA0Mi42ODIgMCAwIDEgODIuOTQyIDg5Ni43VjU5MC4xYTQyLjY4MiA0Mi42ODIgMCAwIDEgNDIuNDk1LTQzLjA1NGgzMDEuOTRhNDIuNjgyIDQyLjY4MiAwIDAgMSA0Mi40OTYgNDMuMDU0em01MjUuMjI4LTQzMy45YTQxLjc1IDQxLjc1IDAgMCAwLTQxLjM3NyA0Mi4xMjN2NTUuOTE1YTQxLjM3NyA0MS4zNzcgMCAxIDAgODIuOTQgMHYtNTUuOTE1YTQxLjc1IDQxLjc1IDAgMCAwLTQxLjU2My00Mi4xMjN6bTAgMjIzLjY2YTQxLjc1IDQxLjc1IDAgMCAwLTQxLjM3NyA0Mi4xMjNWODk0LjY1YTQ1LjQ3NyA0NS40NzcgMCAwIDEtNDUuMjkxIDQ1Ljg1aC0xNTkuNzNhNDMuMjQgNDMuMjQgMCAwIDAtNDMuNjE0IDM3LjI3N0E0MS45MzYgNDEuOTM2IDAgMCAwIDc0NS41MzUgMTAyNGgyMzMuNTM4YTU3Ljc3OSA1Ny43NzkgMCAwIDAgNTcuNDA2LTU4LjMzOFY3MjkuMzI4YTQxLjc1IDQxLjc1IDAgMCAwLTQxLjM3Ny00MS45MzZ6TTczMi40ODggMzIyLjY0VjEzLjk5QTEzLjk3OSAxMy45NzkgMCAwIDAgNzE4LjY5Ni4wMWgtODIuOTRhMTMuOTc5IDEzLjk3OSAwIDAgMC0xMy43OTMgMTMuOTc5djMwOC42NWExMy45NzkgMTMuOTc5IDAgMCAwIDEzLjc5MiAxMy45OGg4Mi45NGExMy45NzkgMTMuOTc5IDAgMCAwIDEzLjc5My0xMy45OHpNNTMyLjEyNi4wMTFjLTExLjM3IDAtMjAuNjg4IDYuMzM3LTIwLjY4OCAxMy45Nzl2MzA4LjY1YzAgNy44MjggOS4zMTkgMTMuOTggMjAuNjg4IDEzLjk4czIwLjY4OS02LjMzOCAyMC42ODktMTMuOThWMTMuOTljMC03LjY0Mi05LjMyLTEzLjk3OS0yMC42ODktMTMuOTc5ek03NDUuNTM1IDQ2Mi44YTQxLjc1IDQxLjc1IDAgMCAwLTQxLjM3NyA0Mi4xMjN2MjUyLjU1YTQxLjM3NyA0MS4zNzcgMCAxIDAgODIuOTQgMHYtMjUyLjU1YTQxLjc1IDQxLjc1IDAgMCAwLTQxLjU2My00Mi4xMjNcXFwiIGZpbGw9XFxcIiMxOTc3RkRcXFwiIC8+PC9zeW1ib2w+PHN5bWJvbCBjbGFzcz1cXFwiaWNvblxcXCIgdmlld0JveD1cXFwiMCAwIDEyODUgMTAyNFxcXCIgIGlkPVxcXCJpY29uLXBheS1pY29uLWFsaXBheV9wY1xcXCI+PHBhdGggZD1cXFwiTTExNDEuNzYgODU1LjA0SDg1NS4wNGMwIDQwLjk2IDMwLjcyIDcxLjY4IDcxLjY4IDcxLjY4aDEwNy41MmMyMC40OCAwIDM1Ljg0IDE1LjM2IDM1Ljg0IDM1Ljg0cy0xNS4zNiAzNS44NC0zNS44NCAzNS44NEgyNTAuODhjLTIwLjQ4IDAtMzUuODQtMTUuMzYtMzUuODQtMzUuODRzMTUuMzYtMzUuODQgMzUuODQtMzUuODRIMzU4LjRjNDAuOTYgMCA3MS42OC0zMC43MiA3MS42OC03MS42OEgxNDMuMzZDNjYuNTYgODU1LjA0IDAgNzkzLjYgMCA3MTEuNjhWMTQzLjM2QzAgNjYuNTYgNjEuNDQgMCAxNDMuMzYgMGg5OTMuMjhDMTIxMy40NCAwIDEyODAgNjEuNDQgMTI4MCAxNDMuMzZ2NTY4LjMyYzUuMTIgNzYuOC01Ni4zMiAxNDMuMzYtMTM4LjI0IDE0My4zNnptNzEuNjgtNzExLjY4YzAtNDAuOTYtMzAuNzItNzEuNjgtNzEuNjgtNzEuNjhIMTQ4LjQ4Yy00MC45NiAwLTcxLjY4IDMwLjcyLTcxLjY4IDcxLjY4djU2OC4zMmMwIDQwLjk2IDMwLjcyIDcxLjY4IDcxLjY4IDcxLjY4aDk5My4yOGM0MC45NiAwIDcxLjY4LTMwLjcyIDcxLjY4LTcxLjY4VjE0My4zNnptLTE0My4zNiA1NjguMzJIMjE1LjA0Yy00MC45NiAwLTcxLjY4LTMwLjcyLTcxLjY4LTcxLjY4VjIxNS4wNGMwLTQwLjk2IDMwLjcyLTcxLjY4IDcxLjY4LTcxLjY4aDg1NS4wNGM0MC45NiAwIDcxLjY4IDMwLjcyIDcxLjY4IDcxLjY4VjY0MGMwIDQwLjk2LTMwLjcyIDcxLjY4LTcxLjY4IDcxLjY4elxcXCIgZmlsbD1cXFwiIzE5NzdGRFxcXCIgLz48L3N5bWJvbD48c3ltYm9sIGNsYXNzPVxcXCJpY29uXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTExNSAxMDI0XFxcIiAgaWQ9XFxcImljb24tcGF5LWljb24tYWxpcGF5X3FyXFxcIj48ZGVmcz48c3R5bGU+QGZvbnQtZmFjZXtmb250LWZhbWlseTpmZWVkYmFjay1pY29uZm9udDtzcmM6dXJsKC8vYXQuYWxpY2RuLmNvbS90L2ZvbnRfMTAzMTE1OF8xdWhyOHJpMHBrNS5lb3Q/I2llZml4KSBmb3JtYXQoXFxcImVtYmVkZGVkLW9wZW50eXBlXFxcIiksdXJsKC8vYXQuYWxpY2RuLmNvbS90L2ZvbnRfMTAzMTE1OF8xdWhyOHJpMHBrNS53b2ZmMikgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpLHVybCgvL2F0LmFsaWNkbi5jb20vdC9mb250XzEwMzExNThfMXVocjhyaTBwazUud29mZikgZm9ybWF0KFxcXCJ3b2ZmXFxcIiksdXJsKC8vYXQuYWxpY2RuLmNvbS90L2ZvbnRfMTAzMTE1OF8xdWhyOHJpMHBrNS50dGYpIGZvcm1hdChcXFwidHJ1ZXR5cGVcXFwiKSx1cmwoLy9hdC5hbGljZG4uY29tL3QvZm9udF8xMDMxMTU4XzF1aHI4cmkwcGs1LnN2ZyNpY29uZm9udCkgZm9ybWF0KFxcXCJzdmdcXFwiKX08L3N0eWxlPjwvZGVmcz48cGF0aCBkPVxcXCJNNzUxLjM4OCA2OC4yNjdhMzQuMTMzIDM0LjEzMyAwIDAgMSAwLTY4LjI2N2gyMjcuNTU2YTkxLjAyMiA5MS4wMjIgMCAwIDEgOTEuMDIyIDkxLjAyMnYyMjcuNTU2YTM0LjEzMyAzNC4xMzMgMCAxIDEtNjguMjY2IDBWOTEuMDIyYTIyLjc1NiAyMi43NTYgMCAwIDAtMjIuNzU2LTIyLjc1NUg3NTEuMzg4TTEwMDEuNyA3MDUuNDIyYTM0LjEzMyAzNC4xMzMgMCAwIDEgNjguMjY2IDB2MjI3LjU1NkE5MS4wMjIgOTEuMDIyIDAgMCAxIDk3OC45NDQgMTAyNEg3NDguODg1YTM0LjEzMyAzNC4xMzMgMCAwIDEgMC02OC4yNjdIOTc4LjQ5YTIyLjc1NiAyMi43NTYgMCAwIDAgMjIuNzU1LTIyLjc1NVY3MDUuNDIyTTM2NC4wOSA5NTUuNzMzYTM0LjEzMyAzNC4xMzMgMCAxIDEgMCA2OC4yNjdIMTM2LjUzM2E5MS4wMjIgOTEuMDIyIDAgMCAxLTkxLjAyMi05MS4wMjJWNzA1LjQyMmEzNC4xMzMgMzQuMTMzIDAgMCAxIDY4LjI2NyAwdjIyNy41NTZhMjIuNzU2IDIyLjc1NiAwIDAgMCAyMi43NTUgMjIuNzU1SDM2NC4wOU0xMTMuNzc4IDMxOC41NzhhMzQuMTMzIDM0LjEzMyAwIDEgMS02OC4yNjcgMFY5MS4wMjJBOTEuMDIyIDkxLjAyMiAwIDAgMSAxMzYuNTMzIDBIMzY0LjA5YTM0LjEzMyAzNC4xMzMgMCAwIDEgMCA2OC4yNjdIMTM2LjUzM2EyMi43NTYgMjIuNzU2IDAgMCAwLTIyLjc1NSAyMi43NTV2MjI3LjU1Nk0zNC4xMzMgNDc3Ljg2N2EzNC4xMzMgMzQuMTMzIDAgMCAwIDAgNjguMjY2aDE2OC42MTl2LTY4LjI2NnptMTA0Ni43NTYgMEg5MTIuMjd2NjguMjY2aDE2OC42MTlhMzQuMTMzIDM0LjEzMyAwIDAgMCAwLTY4LjI2NnpNMjAyLjc1MiAxNTcuMjRoNzA5Ljc0NnYzMjAuNjI3SDIwMi43NTJ6bTAgMzg4Ljg5M2g3MDkuNzQ2Vjg2Ni43NkgyMDIuNzUyelxcXCIgZmlsbD1cXFwiIzE5NzdGRFxcXCIgLz48L3N5bWJvbD48c3ltYm9sIGNsYXNzPVxcXCJpY29uXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTAyNCAxMDI0XFxcIiAgaWQ9XFxcImljb24tcGF5LWljb24tYWxpcGF5X3dhcFxcXCI+PHBhdGggZD1cXFwiTTc2OC4zIDBIMjU1LjdjLTcwLjggMC0xMjguMSA1Ny40LTEyOC4xIDEyOC4xdjc2Ny44YzAgNzAuOCA1Ny40IDEyOC4xIDEyOC4xIDEyOC4xaDUxMi42YzcwLjggMCAxMjguMS01Ny40IDEyOC4xLTEyOC4xVjEyOC4xQzg5Ni40IDU3LjMgODM5IDAgNzY4LjMgMHpNMzgzLjkgOTYuMWMwLTE3LjcgMTQuMy0zMiAzMi0zMmgxOTIuMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0MTUuOWMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTUxMiA5NTkuOWMtMzUuNCAwLTY0LjEtMjguOC02NC4xLTY0LjEgMC0zNS40IDI4LjctNjQuMSA2NC4xLTY0LjEgMzUuNCAwIDY0LjEgMjguNyA2NC4xIDY0LjEgMCAzNS4zLTI4LjcgNjQuMS02NC4xIDY0LjF6bTMyMC4zLTIwNC4zYzAgNi43LTUuNCAxMi4yLTEyLjIgMTIuMkgyMDMuOWMtNi43IDAtMTIuMi01LjQtMTIuMi0xMi4yVjIwNC4zYzAtNi43IDUuNC0xMi4yIDEyLjItMTIuMmg2MTYuM2M2LjcgMCAxMi4yIDUuNCAxMi4yIDEyLjJ2NTUxLjN6XFxcIiBmaWxsPVxcXCIjMTk3N0ZEXFxcIiAvPjwvc3ltYm9sPjxzeW1ib2wgY2xhc3M9XFxcImljb25cXFwiIHZpZXdCb3g9XFxcIjAgMCAxMDI0IDEwMjRcXFwiICBpZD1cXFwiaWNvbi1wYXktaWNvbi1tb2NrXFxcIj48cGF0aCBkPVxcXCJtMTczLjA3NyAzNjIuNjY3IDkxLjExNS0yMTQuNjc4YTY1LjYgNjUuNiAwIDAgMSA4Ni4wMTYtMzQuNzczYzExLjU4NCA0LjkwNyAyNC45NiAxMC4yODMgNDAuODk2IDE2LjQ0OCA4LjI3NyAzLjIgMTYuNzkgNi40NjQgMjcuOTA0IDEwLjY2NyAyOC4yMDMgMTAuNzA5IDM5LjI5NiAxNC45MzMgNDYuMTQ0IDE3LjY0Mmw1MS40NzctNTEuNjY5YzI4LjE4Mi0yOC4xNiA3NC4xMTItMjcuOTQ3IDEwMi41NzEuNTMzbDE5NS45MjUgMTk1LjkyNmMxNi40MjcgMTYuNDI2IDIzLjQ0NiAzOC42MzQgMjEuMDU2IDU5LjkwNEg4OTZhNDIuNjY3IDQyLjY2NyAwIDAgMSA0Mi42NjcgNDIuNjY2Vjg5NkE0Mi42NjcgNDIuNjY3IDAgMCAxIDg5NiA5MzguNjY3SDEyOEE0Mi42NjcgNDIuNjY3IDAgMCAxIDg1LjMzMyA4OTZWNDA1LjMzM0E0Mi42NjcgNDIuNjY3IDAgMCAxIDEyOCAzNjIuNjY3aDQ1LjA3N3ptNDguOTYgMGgzOS4xMDRsMTY5LjE5NS0xNjkuNzcxLTI3LjMyOC0xMC4zOWMtMTEuMi00LjI0NS0xOS44MTktNy41My0yOC4yMjQtMTAuNzk0YTE0NTkuMiAxNDU5LjIgMCAwIDEtNDIuMTk3LTE3LjAwMyAyMC41MjMgMjAuNTIzIDAgMCAwLTI2LjkwMiAxMC44OGwtODMuNjQ4IDE5Ny4wNzh6bTEwOC44NDMgMGg0NTQuOTU1YTIzLjUxIDIzLjUxIDAgMCAwLTUuMjkxLTI1LjMyM0w1ODQuNjE5IDE0MS40MTlhMjMuMzYgMjMuMzYgMCAwIDAtMzMuMDI0LS4yMTRMMzMwLjg4IDM2Mi42Njd6TTEyOCA0MDUuMzMzVjg5Nmg3NjhWNDA1LjMzM0gxMjh6bTU5Ny4zMzMgMzIwYTg1LjMzMyA4NS4zMzMgMCAxIDEgMC0xNzAuNjY2IDg1LjMzMyA4NS4zMzMgMCAwIDEgMCAxNzAuNjY2em0wLTQyLjY2NmE0Mi42NjcgNDIuNjY3IDAgMSAwIDAtODUuMzM0IDQyLjY2NyA0Mi42NjcgMCAwIDAgMCA4NS4zMzR6XFxcIiBmaWxsPVxcXCIjNDI5NmQ1XFxcIiAvPjwvc3ltYm9sPjxzeW1ib2wgY2xhc3M9XFxcImljb25cXFwiIHZpZXdCb3g9XFxcIjAgMCAxMTE1IDEwMjRcXFwiICBpZD1cXFwiaWNvbi1wYXktaWNvbi13eF9hcHBcXFwiPjxkZWZzPjxzdHlsZT5AZm9udC1mYWNle2ZvbnQtZmFtaWx5OmZlZWRiYWNrLWljb25mb250O3NyYzp1cmwoLy9hdC5hbGljZG4uY29tL3QvZm9udF8xMDMxMTU4XzF1aHI4cmkwcGs1LmVvdD8jaWVmaXgpIGZvcm1hdChcXFwiZW1iZWRkZWQtb3BlbnR5cGVcXFwiKSx1cmwoLy9hdC5hbGljZG4uY29tL3QvZm9udF8xMDMxMTU4XzF1aHI4cmkwcGs1LndvZmYyKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksdXJsKC8vYXQuYWxpY2RuLmNvbS90L2ZvbnRfMTAzMTE1OF8xdWhyOHJpMHBrNS53b2ZmKSBmb3JtYXQoXFxcIndvZmZcXFwiKSx1cmwoLy9hdC5hbGljZG4uY29tL3QvZm9udF8xMDMxMTU4XzF1aHI4cmkwcGs1LnR0ZikgZm9ybWF0KFxcXCJ0cnVldHlwZVxcXCIpLHVybCgvL2F0LmFsaWNkbi5jb20vdC9mb250XzEwMzExNThfMXVocjhyaTBwazUuc3ZnI2ljb25mb250KSBmb3JtYXQoXFxcInN2Z1xcXCIpfTwvc3R5bGU+PC9kZWZzPjxwYXRoIGQ9XFxcIk03NTEuMzg4IDY4LjI2N2EzNC4xMzMgMzQuMTMzIDAgMCAxIDAtNjguMjY3aDIyNy41NTZhOTEuMDIyIDkxLjAyMiAwIDAgMSA5MS4wMjIgOTEuMDIydjIyNy41NTZhMzQuMTMzIDM0LjEzMyAwIDEgMS02OC4yNjYgMFY5MS4wMjJhMjIuNzU2IDIyLjc1NiAwIDAgMC0yMi43NTYtMjIuNzU1SDc1MS4zODhNMTAwMS43IDcwNS40MjJhMzQuMTMzIDM0LjEzMyAwIDAgMSA2OC4yNjYgMHYyMjcuNTU2QTkxLjAyMiA5MS4wMjIgMCAwIDEgOTc4Ljk0NCAxMDI0SDc0OC44ODVhMzQuMTMzIDM0LjEzMyAwIDAgMSAwLTY4LjI2N0g5NzguNDlhMjIuNzU2IDIyLjc1NiAwIDAgMCAyMi43NTUtMjIuNzU1VjcwNS40MjJNMzY0LjA5IDk1NS43MzNhMzQuMTMzIDM0LjEzMyAwIDEgMSAwIDY4LjI2N0gxMzYuNTMzYTkxLjAyMiA5MS4wMjIgMCAwIDEtOTEuMDIyLTkxLjAyMlY3MDUuNDIyYTM0LjEzMyAzNC4xMzMgMCAwIDEgNjguMjY3IDB2MjI3LjU1NmEyMi43NTYgMjIuNzU2IDAgMCAwIDIyLjc1NSAyMi43NTVIMzY0LjA5TTExMy43NzggMzE4LjU3OGEzNC4xMzMgMzQuMTMzIDAgMSAxLTY4LjI2NyAwVjkxLjAyMkE5MS4wMjIgOTEuMDIyIDAgMCAxIDEzNi41MzMgMEgzNjQuMDlhMzQuMTMzIDM0LjEzMyAwIDAgMSAwIDY4LjI2N0gxMzYuNTMzYTIyLjc1NiAyMi43NTYgMCAwIDAtMjIuNzU1IDIyLjc1NXYyMjcuNTU2TTM0LjEzMyA0NzcuODY3YTM0LjEzMyAzNC4xMzMgMCAwIDAgMCA2OC4yNjZoMTY4LjYxOXYtNjguMjY2em0xMDQ2Ljc1NiAwSDkxMi4yN3Y2OC4yNjZoMTY4LjYxOWEzNC4xMzMgMzQuMTMzIDAgMCAwIDAtNjguMjY2ek0yMDIuNzUyIDE1Ny4yNGg3MDkuNzQ2djMyMC42MjdIMjAyLjc1MnptMCAzODguODkzaDcwOS43NDZWODY2Ljc2SDIwMi43NTJ6XFxcIiBmaWxsPVxcXCIjMDRDMzYxXFxcIiAvPjwvc3ltYm9sPjxzeW1ib2wgY2xhc3M9XFxcImljb25cXFwiIHZpZXdCb3g9XFxcIjAgMCAxMDM2IDEwMjRcXFwiICBpZD1cXFwiaWNvbi1wYXktaWNvbi13eF9iYXJcXFwiPjxkZWZzPjxzdHlsZT5AZm9udC1mYWNle2ZvbnQtZmFtaWx5OmZlZWRiYWNrLWljb25mb250O3NyYzp1cmwoLy9hdC5hbGljZG4uY29tL3QvZm9udF8xMDMxMTU4XzF1aHI4cmkwcGs1LmVvdD8jaWVmaXgpIGZvcm1hdChcXFwiZW1iZWRkZWQtb3BlbnR5cGVcXFwiKSx1cmwoLy9hdC5hbGljZG4uY29tL3QvZm9udF8xMDMxMTU4XzF1aHI4cmkwcGs1LndvZmYyKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksdXJsKC8vYXQuYWxpY2RuLmNvbS90L2ZvbnRfMTAzMTE1OF8xdWhyOHJpMHBrNS53b2ZmKSBmb3JtYXQoXFxcIndvZmZcXFwiKSx1cmwoLy9hdC5hbGljZG4uY29tL3QvZm9udF8xMDMxMTU4XzF1aHI4cmkwcGs1LnR0ZikgZm9ybWF0KFxcXCJ0cnVldHlwZVxcXCIpLHVybCgvL2F0LmFsaWNkbi5jb20vdC9mb250XzEwMzExNThfMXVocjhyaTBwazUuc3ZnI2ljb25mb250KSBmb3JtYXQoXFxcInN2Z1xcXCIpfTwvc3R5bGU+PC9kZWZzPjxwYXRoIGQ9XFxcIk0yNy41ODcgMzM2LjYyaDY5LjE0OGExMy45NzkgMTMuOTc5IDAgMCAwIDEzLjc5My0xMy45OFYxMy45OUExMy45NzkgMTMuOTc5IDAgMCAwIDk2LjczNS4wMUgyNy41ODdBMTMuOTc5IDEzLjk3OSAwIDAgMCAxMy43OTUgMTMuOTl2MzA4LjY1YTEzLjk3OSAxMy45NzkgMCAwIDAgMTMuNzkyIDEzLjk4em0xNjUuODgxIDBoMjcuNTg1YTEzLjk3OSAxMy45NzkgMCAwIDAgMTMuNzkyLTEzLjk4VjEzLjk5QTEzLjk3OSAxMy45NzkgMCAwIDAgMjIxLjA1My4wMWgtMjcuNTg1YTEzLjk3OSAxMy45NzkgMCAwIDAtMTMuNzkyIDEzLjk3OXYzMDguNjVhMTMuOTc5IDEzLjk3OSAwIDAgMCAxMy43OTIgMTMuOTh6bTEzOC4xMSAzMjIuNjI4SDIyMS4wNTNhMjcuNzcxIDI3Ljc3MSAwIDAgMC0yNy41ODUgMjguMTQ0djExMS44M2EyNy43NzEgMjcuNzcxIDAgMCAwIDI3LjU4NSAyOC4xNDRoMTEwLjUyNWEyNy45NTcgMjcuOTU3IDAgMCAwIDI3LjU4NS0yOC4xNDR2LTExMS44M2EyNy45NTcgMjcuOTU3IDAgMCAwLTI3LjU4NS0yOC4xNDR6TTgxNi4xNzQgMzM2LjYyaDI3LjU4NWExMy45NzkgMTMuOTc5IDAgMCAwIDEzLjc5Mi0xMy45NzlWMTMuOTlBMTMuOTc5IDEzLjk3OSAwIDAgMCA4NDMuMDEzLjAxSDgxNS40M2ExMy45NzkgMTMuOTc5IDAgMCAwLTEzLjk4IDEzLjk3OXYzMDguNjVhMTMuOTc5IDEzLjk3OSAwIDAgMCAxMy45OCAxMy45OHptLTQ2OS44NzIgMGg4Mi4zODJhMTMuOTc5IDEzLjk3OSAwIDAgMCAxMy43OTItMTMuOTc5VjEzLjk5QTEzLjk3OSAxMy45NzkgMCAwIDAgNDI4LjY4NC4wMWgtODMuMTI3YTEzLjk3OSAxMy45NzkgMCAwIDAtMTMuNzkzIDEzLjk3OXYzMDguNjVhMTMuOTc5IDEzLjk3OSAwIDAgMCAxMy43OTMgMTMuOTh6bTU5NC4xOSAwaDY5LjE0OGExMy45NzkgMTMuOTc5IDAgMCAwIDEzLjc5Mi0xMy45NzlWMTMuOTlBMTMuOTc5IDEzLjk3OSAwIDAgMCAxMDA4Ljg5NC4wMWgtNjkuMTQ4YTEzLjk3OSAxMy45NzkgMCAwIDAtMTMuNzkyIDEzLjk3OXYzMDguNjVhMTMuOTc5IDEzLjk3OSAwIDAgMCAxMy43OTIgMTMuOTh6TTUyOC4yMTIgNDYyLjhINjYuOTE0QTY3LjQ3IDY3LjQ3IDAgMCAwIC4wMDIgNTMwLjgzdjQyNS4xNEE2Ny40NyA2Ny40NyAwIDAgMCA2Ni45MTQgMTAyNGg0MTguODAzYTY3LjQ3IDY3LjQ3IDAgMCAwIDY2LjkxMS02OC4wM1Y0ODcuNzc2YTI0Ljc4OSAyNC43ODkgMCAwIDAtMjQuNDE2LTI0Ljk3NnptLTU4LjMzOCA0MzMuOWE0Mi42ODIgNDIuNjgyIDAgMCAxLTQyLjQ5NSA0My4wNTVoLTMwMS45NEE0Mi42ODIgNDIuNjgyIDAgMCAxIDgyLjk0MiA4OTYuN1Y1OTAuMWE0Mi42ODIgNDIuNjgyIDAgMCAxIDQyLjQ5NS00My4wNTRoMzAxLjk0YTQyLjY4MiA0Mi42ODIgMCAwIDEgNDIuNDk2IDQzLjA1NHptNTI1LjIyOC00MzMuOWE0MS43NSA0MS43NSAwIDAgMC00MS4zNzcgNDIuMTIzdjU1LjkxNWE0MS4zNzcgNDEuMzc3IDAgMSAwIDgyLjk0IDB2LTU1LjkxNWE0MS43NSA0MS43NSAwIDAgMC00MS41NjMtNDIuMTIzem0wIDIyMy42NmE0MS43NSA0MS43NSAwIDAgMC00MS4zNzcgNDIuMTIzVjg5NC42NWE0NS40NzcgNDUuNDc3IDAgMCAxLTQ1LjI5MSA0NS44NWgtMTU5LjczYTQzLjI0IDQzLjI0IDAgMCAwLTQzLjYxNCAzNy4yNzdBNDEuOTM2IDQxLjkzNiAwIDAgMCA3NDUuNTM1IDEwMjRoMjMzLjUzOGE1Ny43NzkgNTcuNzc5IDAgMCAwIDU3LjQwNi01OC4zMzhWNzI5LjMyOGE0MS43NSA0MS43NSAwIDAgMC00MS4zNzctNDEuOTM2ek03MzIuNDg4IDMyMi42NFYxMy45OUExMy45NzkgMTMuOTc5IDAgMCAwIDcxOC42OTYuMDFoLTgyLjk0YTEzLjk3OSAxMy45NzkgMCAwIDAtMTMuNzkzIDEzLjk3OXYzMDguNjVhMTMuOTc5IDEzLjk3OSAwIDAgMCAxMy43OTIgMTMuOThoODIuOTRhMTMuOTc5IDEzLjk3OSAwIDAgMCAxMy43OTMtMTMuOTh6TTUzMi4xMjYuMDExYy0xMS4zNyAwLTIwLjY4OCA2LjMzNy0yMC42ODggMTMuOTc5djMwOC42NWMwIDcuODI4IDkuMzE5IDEzLjk4IDIwLjY4OCAxMy45OHMyMC42ODktNi4zMzggMjAuNjg5LTEzLjk4VjEzLjk5YzAtNy42NDItOS4zMi0xMy45NzktMjAuNjg5LTEzLjk3OXpNNzQ1LjUzNSA0NjIuOGE0MS43NSA0MS43NSAwIDAgMC00MS4zNzcgNDIuMTIzdjI1Mi41NWE0MS4zNzcgNDEuMzc3IDAgMSAwIDgyLjk0IDB2LTI1Mi41NWE0MS43NSA0MS43NSAwIDAgMC00MS41NjMtNDIuMTIzXFxcIiBmaWxsPVxcXCIjMDRDMzYxXFxcIiAvPjwvc3ltYm9sPjxzeW1ib2wgY2xhc3M9XFxcImljb25cXFwiIHZpZXdCb3g9XFxcIjAgMCAxMDI0IDEwMjRcXFwiICBpZD1cXFwiaWNvbi1wYXktaWNvbi13eF9saXRlXFxcIj48cGF0aCBkPVxcXCJNNjA4LjYgMjkwLjNjNjcuMSAwIDEyMS43IDUwLjUgMTIxLjcgMTEyLjkgMCAxOS40LTUuNiAzOC40LTE1LjcgNTUuNS0xNS4zIDI1LTM5LjggNDMuNS02OS40IDUyLjMtNy45IDIuMy0xMy45IDMuMi0xOS40IDMuMi0xMyAwLTIzLjEtMTAuMi0yMy4xLTIzLjEgMC0xMyAxMC4yLTIzLjEgMjMuMS0yMy4xLjkgMCAyLjggMCA1LjEtLjkgMTkuOS01LjYgMzUuNi0xNy4xIDQ0LjQtMzIuNCA2LTkuNyA4LjgtMjAuNCA4LjgtMzEuNSAwLTM2LjYtMzMuOC02Ni42LTc1LTY2LjYtMTQuNCAwLTI4LjIgMy43LTQwLjcgMTAuNi0yMS44IDEyLjUtMzQuNyAzMy4zLTM0LjcgNTZ2MTkzLjljMCAzOS4zLTIxLjggNzUuNC01Ny45IDk1LjgtMTkuNCAxMS4xLTQxLjIgMTYuNy02My40IDE2LjctNjcuMSAwLTEyMS43LTUwLjUtMTIxLjctMTEyLjkgMC0xOS40IDUuNi0zOC40IDE1LjctNTUuNSAxNS4zLTI1IDM5LjgtNDMuNSA2OS40LTUyLjMgOC4zLTIuMyAxMy45LTMuMiAxOS40LTMuMiAxMyAwIDIzLjEgMTAuMiAyMy4xIDIzLjEgMCAxMy0xMC4yIDIzLjEtMjMuMSAyMy4xLS45IDAtMi44IDAtNS4xLjktMTkuOSA2LTM1LjYgMTcuNi00NC40IDMyLjQtNiA5LjctOC44IDIwLjQtOC44IDMxLjUgMCAzNi42IDMzLjggNjYuNiA3NS40IDY2LjYgMTQuNCAwIDI4LjItMy43IDQwLjctMTAuNiAyMS44LTEyLjUgMzQuNy0zMy4zIDM0LjctNTZWNDAzLjNjMC0zOS4zIDIxLjgtNzUuNCA1Ny45LTk1LjggMTktMTEuNiA0MC43LTE3LjIgNjMtMTcuMnpNNTEwLjggOTI5YzIzMS4xIDAgNDE4LjQtMTg3LjMgNDE4LjQtNDE4LjRTNzQxLjkgOTIuMSA1MTAuOCA5Mi4xIDkyLjQgMjc5LjUgOTIuNCA1MTAuNiAyNzkuNyA5MjkgNTEwLjggOTI5em0wIDIyQzI2Ny41IDk1MSA3MC4zIDc1My44IDcwLjMgNTEwLjZTMjY3LjUgNzAuMSA1MTAuOCA3MC4xczQ0MC41IDE5Ny4yIDQ0MC41IDQ0MC41Uzc1NC4xIDk1MSA1MTAuOCA5NTF6XFxcIiBmaWxsPVxcXCIjNThiZjZiXFxcIiAvPjwvc3ltYm9sPjxzeW1ib2wgY2xhc3M9XFxcImljb25cXFwiIHZpZXdCb3g9XFxcIjAgMCAxMTE1IDEwMjRcXFwiICBpZD1cXFwiaWNvbi1wYXktaWNvbi13eF9uYXRpdmVcXFwiPjxkZWZzPjxzdHlsZT5AZm9udC1mYWNle2ZvbnQtZmFtaWx5OmZlZWRiYWNrLWljb25mb250O3NyYzp1cmwoLy9hdC5hbGljZG4uY29tL3QvZm9udF8xMDMxMTU4XzF1aHI4cmkwcGs1LmVvdD8jaWVmaXgpIGZvcm1hdChcXFwiZW1iZWRkZWQtb3BlbnR5cGVcXFwiKSx1cmwoLy9hdC5hbGljZG4uY29tL3QvZm9udF8xMDMxMTU4XzF1aHI4cmkwcGs1LndvZmYyKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksdXJsKC8vYXQuYWxpY2RuLmNvbS90L2ZvbnRfMTAzMTE1OF8xdWhyOHJpMHBrNS53b2ZmKSBmb3JtYXQoXFxcIndvZmZcXFwiKSx1cmwoLy9hdC5hbGljZG4uY29tL3QvZm9udF8xMDMxMTU4XzF1aHI4cmkwcGs1LnR0ZikgZm9ybWF0KFxcXCJ0cnVldHlwZVxcXCIpLHVybCgvL2F0LmFsaWNkbi5jb20vdC9mb250XzEwMzExNThfMXVocjhyaTBwazUuc3ZnI2ljb25mb250KSBmb3JtYXQoXFxcInN2Z1xcXCIpfTwvc3R5bGU+PC9kZWZzPjxwYXRoIGQ9XFxcIk03NTEuMzg4IDY4LjI2N2EzNC4xMzMgMzQuMTMzIDAgMCAxIDAtNjguMjY3aDIyNy41NTZhOTEuMDIyIDkxLjAyMiAwIDAgMSA5MS4wMjIgOTEuMDIydjIyNy41NTZhMzQuMTMzIDM0LjEzMyAwIDEgMS02OC4yNjYgMFY5MS4wMjJhMjIuNzU2IDIyLjc1NiAwIDAgMC0yMi43NTYtMjIuNzU1SDc1MS4zODhNMTAwMS43IDcwNS40MjJhMzQuMTMzIDM0LjEzMyAwIDAgMSA2OC4yNjYgMHYyMjcuNTU2QTkxLjAyMiA5MS4wMjIgMCAwIDEgOTc4Ljk0NCAxMDI0SDc0OC44ODVhMzQuMTMzIDM0LjEzMyAwIDAgMSAwLTY4LjI2N0g5NzguNDlhMjIuNzU2IDIyLjc1NiAwIDAgMCAyMi43NTUtMjIuNzU1VjcwNS40MjJNMzY0LjA5IDk1NS43MzNhMzQuMTMzIDM0LjEzMyAwIDEgMSAwIDY4LjI2N0gxMzYuNTMzYTkxLjAyMiA5MS4wMjIgMCAwIDEtOTEuMDIyLTkxLjAyMlY3MDUuNDIyYTM0LjEzMyAzNC4xMzMgMCAwIDEgNjguMjY3IDB2MjI3LjU1NmEyMi43NTYgMjIuNzU2IDAgMCAwIDIyLjc1NSAyMi43NTVIMzY0LjA5TTExMy43NzggMzE4LjU3OGEzNC4xMzMgMzQuMTMzIDAgMSAxLTY4LjI2NyAwVjkxLjAyMkE5MS4wMjIgOTEuMDIyIDAgMCAxIDEzNi41MzMgMEgzNjQuMDlhMzQuMTMzIDM0LjEzMyAwIDAgMSAwIDY4LjI2N0gxMzYuNTMzYTIyLjc1NiAyMi43NTYgMCAwIDAtMjIuNzU1IDIyLjc1NXYyMjcuNTU2TTM0LjEzMyA0NzcuODY3YTM0LjEzMyAzNC4xMzMgMCAwIDAgMCA2OC4yNjZoMTY4LjYxOXYtNjguMjY2em0xMDQ2Ljc1NiAwSDkxMi4yN3Y2OC4yNjZoMTY4LjYxOWEzNC4xMzMgMzQuMTMzIDAgMCAwIDAtNjguMjY2ek0yMDIuNzUyIDE1Ny4yNGg3MDkuNzQ2djMyMC42MjdIMjAyLjc1MnptMCAzODguODkzaDcwOS43NDZWODY2Ljc2SDIwMi43NTJ6XFxcIiBmaWxsPVxcXCIjMDRDMzYxXFxcIiAvPjwvc3ltYm9sPjxzeW1ib2wgY2xhc3M9XFxcImljb25cXFwiIHZpZXdCb3g9XFxcIjAgMCAxMjYwIDEwMjRcXFwiICBpZD1cXFwiaWNvbi1wYXktaWNvbi13eF9wdWJcXFwiPjxkZWZzPjxzdHlsZT5AZm9udC1mYWNle2ZvbnQtZmFtaWx5OmZlZWRiYWNrLWljb25mb250O3NyYzp1cmwoLy9hdC5hbGljZG4uY29tL3QvZm9udF8xMDMxMTU4XzF1aHI4cmkwcGs1LmVvdD8jaWVmaXgpIGZvcm1hdChcXFwiZW1iZWRkZWQtb3BlbnR5cGVcXFwiKSx1cmwoLy9hdC5hbGljZG4uY29tL3QvZm9udF8xMDMxMTU4XzF1aHI4cmkwcGs1LndvZmYyKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksdXJsKC8vYXQuYWxpY2RuLmNvbS90L2ZvbnRfMTAzMTE1OF8xdWhyOHJpMHBrNS53b2ZmKSBmb3JtYXQoXFxcIndvZmZcXFwiKSx1cmwoLy9hdC5hbGljZG4uY29tL3QvZm9udF8xMDMxMTU4XzF1aHI4cmkwcGs1LnR0ZikgZm9ybWF0KFxcXCJ0cnVldHlwZVxcXCIpLHVybCgvL2F0LmFsaWNkbi5jb20vdC9mb250XzEwMzExNThfMXVocjhyaTBwazUuc3ZnI2ljb25mb250KSBmb3JtYXQoXFxcInN2Z1xcXCIpfTwvc3R5bGU+PC9kZWZzPjxwYXRoIGQ9XFxcIk03OTcuMTQ4IDQ4MS43NTNBMjY5LjE5NCAyNjkuMTk0IDAgMCAwIDkwMC4wNCAyNjkuODI0QzkwMC4wNCAxMjAuOTkgNzc5LjAzIDAgNjMwLjE1NyAwIDQ4MS4yODMgMCAzNjAuMjc0IDEyMC45OSAzNjAuMjc0IDI2OS44MjRjMCA4NS44NzggNDAuMzMgMTYyLjQ2MiAxMDIuOTEyIDIxMS45MjlhNDUwLjk3NCA0NTAuOTc0IDAgMCAwLTE1My4zNDQgMTAxLjAyMWMtODUuNTQzIDg1LjUyNC0xMzIuNjA4IDE5OS4yMDgtMTMyLjYwOCAzMjAuMjM2IDAgMjUuMDEgMCA1MS43MTIuMTk3IDc2LjM2N2E0NC44OTggNDQuODk4IDAgMCAwIDQ0LjgyIDQ0LjYyM2g4MTYuMDFhNDQuOCA0NC44IDAgMCAwIDQ0LjgyLTQ0LjYyM1Y5MDMuMDFjMC0xMjEuMDA5LTQ3LjA2Ni0yMzQuNzMyLTEzMi42MDktMzIwLjIzNmE0NTEuMDcyIDQ1MS4wNzIgMCAwIDAtMTUzLjM0NC0xMDEuMDIxelxcXCIgZmlsbD1cXFwiIzA0QzM2MVxcXCIgLz48cGF0aCBkPVxcXCJNMTE4Ni4xODkgNTgwLjM5MWEzNzguNjQ0IDM3OC42NDQgMCAwIDAtMTI0LjM3Ny0xMDcuMzYxIDIyMy43ODMgMjIzLjc4MyAwIDAgMCA2NC4yMzctMTU3LjY1N2MwLTQ5Ljc0Mi0xNS44NzItOTYuNjctNDUuNzQ2LTEzNi4wNzRBMjI1LjM0IDIyNS4zNCAwIDAgMCA5NjQuNzEgOTkuOWEzNy4yOTcgMzcuMjk3IDAgMCAwLTQ2LjE0IDI1LjcxOGMtNS41OTIgMTkuODkgNS43OSA0MC43MjQgMjUuNiA0Ni4zNTYgNjMuMTE0IDE4LjE5NiAxMDcuMzYzIDc3LjEzNSAxMDcuMzYzIDE0My40YTE0OC45MTMgMTQ4LjkxMyAwIDAgMS04MS4yMyAxMzMuMDYgMzguMDY1IDM4LjA2NSAwIDAgMC0yMC4zNjMgMzYuNjA4YzEuMzIgMTUuMjAzIDExLjU4IDI4LjE2IDI1Ljk3NSAzMi42NSAxMjUuNDc5IDM5LjYwMSAyMDkuNzAzIDE1NS4wMzggMjA5LjcwMyAyODcuMTczdjYzLjA3NGMwIDIwLjYzOCAxNi42MiAzNy41MzQgMzcuMTYgMzcuNzExaC4xOTZhMzcuMzk2IDM3LjM5NiAwIDAgMCAzNy4zMzctMzcuMzM2VjgwNS4wNmMtLjE5Ny04MS42NDQtMjUuNzc3LTE1OS4zNS03NC4xNDItMjI0LjY5em0tOTAxLjc3LTYyLjUwM2EzNi45ODIgMzYuOTgyIDAgMCAwIDI1Ljk1NS0zMi42NSAzNy40NTUgMzcuNDU1IDAgMCAwLTIwLjM2Mi0zNi42MjggMTQ4LjkxMyAxNDguOTEzIDAgMCAxLTgxLjIzMS0xMzMuMDZjMC02Ni4yNDUgNDQuMDcxLTEyNS4xODQgMTA3LjM4Mi0xNDMuNGEzNy42MTIgMzcuNjEyIDAgMCAwIDI1LjU4LTQ2LjM1NiAzNy4zNzYgMzcuMzc2IDAgMCAwLTQ2LjEzOS0yNS43MTggMjI1LjMyIDIyNS4zMiAwIDAgMC0xMTUuNTkzIDc5LjQgMjIzLjI1MiAyMjMuMjUyIDAgMCAwLTQ1Ljc0NiAxMzYuMDc0YzAgNjAuMjU4IDIzLjUzMyAxMTYuMzgxIDY0LjIzNyAxNTcuNjc2QTM4MC40NzUgMzgwLjQ3NSAwIDAgMCA3NC4xNDUgNTgwLjU2OSAzNzMuODM5IDM3My44MzkgMCAwIDAgLjAwMiA4MDUuMjU4djYzLjIzMmMwIDIwLjY1NyAxNi43OTggMzcuMzU2IDM3LjM1NiAzNy4zNTZoLjE5N2EzNy4zMTcgMzcuMzE3IDAgMCAwIDM3LjE0LTM3LjczVjgwNS4wNmMwLTEzMi4zMzIgODQuNDAxLTI0Ny43NjkgMjA5LjcyMy0yODcuMTczelxcXCIgZmlsbD1cXFwiIzA0QzM2MVxcXCIgLz48L3N5bWJvbD5cIjtcbiAgICAgICAgICAgYm9keS5pbnNlcnRCZWZvcmUoc3ZnRG9tLCBib2R5Lmxhc3RDaGlsZCk7XG4gICAgICAgICB9XG4gICAgICAgICBpZihkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGxvYWRTdmcpO1xuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgbG9hZFN2ZygpXG4gICAgICAgICB9XG4gICAgICB9XG4gICAgICAgIFxuZXhwb3J0IGRlZmF1bHQge30iLCIvKipcbiogKGMpIEljb25pZnlcbipcbiogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIGxpY2Vuc2UudHh0IG9yIGxpY2Vuc2UuZ3BsLnR4dFxuKiBmaWxlcyBhdCBodHRwczovL2dpdGh1Yi5jb20vaWNvbmlmeS9pY29uaWZ5XG4qXG4qIExpY2Vuc2VkIHVuZGVyIE1JVC5cbipcbiogQGxpY2Vuc2UgTUlUXG4qIEB2ZXJzaW9uIDMuMS4xXG4qL1xuY29uc3QgZGVmYXVsdEljb25EaW1lbnNpb25zID0gT2JqZWN0LmZyZWV6ZShcbiAge1xuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2XG4gIH1cbik7XG5jb25zdCBkZWZhdWx0SWNvblRyYW5zZm9ybWF0aW9ucyA9IE9iamVjdC5mcmVlemUoe1xuICByb3RhdGU6IDAsXG4gIHZGbGlwOiBmYWxzZSxcbiAgaEZsaXA6IGZhbHNlXG59KTtcbmNvbnN0IGRlZmF1bHRJY29uUHJvcHMgPSBPYmplY3QuZnJlZXplKHtcbiAgLi4uZGVmYXVsdEljb25EaW1lbnNpb25zLFxuICAuLi5kZWZhdWx0SWNvblRyYW5zZm9ybWF0aW9uc1xufSk7XG5jb25zdCBkZWZhdWx0RXh0ZW5kZWRJY29uUHJvcHMgPSBPYmplY3QuZnJlZXplKHtcbiAgLi4uZGVmYXVsdEljb25Qcm9wcyxcbiAgYm9keTogXCJcIixcbiAgaGlkZGVuOiBmYWxzZVxufSk7XG5cbmZ1bmN0aW9uIG1lcmdlSWNvblRyYW5zZm9ybWF0aW9ucyhvYmoxLCBvYmoyKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBpZiAoIW9iajEuaEZsaXAgIT09ICFvYmoyLmhGbGlwKSB7XG4gICAgcmVzdWx0LmhGbGlwID0gdHJ1ZTtcbiAgfVxuICBpZiAoIW9iajEudkZsaXAgIT09ICFvYmoyLnZGbGlwKSB7XG4gICAgcmVzdWx0LnZGbGlwID0gdHJ1ZTtcbiAgfVxuICBjb25zdCByb3RhdGUgPSAoKG9iajEucm90YXRlIHx8IDApICsgKG9iajIucm90YXRlIHx8IDApKSAlIDQ7XG4gIGlmIChyb3RhdGUpIHtcbiAgICByZXN1bHQucm90YXRlID0gcm90YXRlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1lcmdlSWNvbkRhdGEocGFyZW50LCBjaGlsZCkge1xuICBjb25zdCByZXN1bHQgPSBtZXJnZUljb25UcmFuc2Zvcm1hdGlvbnMocGFyZW50LCBjaGlsZCk7XG4gIGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRFeHRlbmRlZEljb25Qcm9wcykge1xuICAgIGlmIChrZXkgaW4gZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnMpIHtcbiAgICAgIGlmIChrZXkgaW4gcGFyZW50ICYmICEoa2V5IGluIHJlc3VsdCkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBkZWZhdWx0SWNvblRyYW5zZm9ybWF0aW9uc1trZXldO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5IGluIGNoaWxkKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGNoaWxkW2tleV07XG4gICAgfSBlbHNlIGlmIChrZXkgaW4gcGFyZW50KSB7XG4gICAgICByZXN1bHRba2V5XSA9IHBhcmVudFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZXRJY29uc1RyZWUoZGF0YSwgbmFtZXMpIHtcbiAgY29uc3QgaWNvbnMgPSBkYXRhLmljb25zO1xuICBjb25zdCBhbGlhc2VzID0gZGF0YS5hbGlhc2VzIHx8IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCByZXNvbHZlZCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBmdW5jdGlvbiByZXNvbHZlKG5hbWUpIHtcbiAgICBpZiAoaWNvbnNbbmFtZV0pIHtcbiAgICAgIHJldHVybiByZXNvbHZlZFtuYW1lXSA9IFtdO1xuICAgIH1cbiAgICBpZiAoIShuYW1lIGluIHJlc29sdmVkKSkge1xuICAgICAgcmVzb2x2ZWRbbmFtZV0gPSBudWxsO1xuICAgICAgY29uc3QgcGFyZW50ID0gYWxpYXNlc1tuYW1lXSAmJiBhbGlhc2VzW25hbWVdLnBhcmVudDtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyZW50ICYmIHJlc29sdmUocGFyZW50KTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlZFtuYW1lXSA9IFtwYXJlbnRdLmNvbmNhdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlZFtuYW1lXTtcbiAgfVxuICAobmFtZXMgfHwgT2JqZWN0LmtleXMoaWNvbnMpLmNvbmNhdChPYmplY3Qua2V5cyhhbGlhc2VzKSkpLmZvckVhY2gocmVzb2x2ZSk7XG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuZnVuY3Rpb24gaW50ZXJuYWxHZXRJY29uRGF0YShkYXRhLCBuYW1lLCB0cmVlKSB7XG4gIGNvbnN0IGljb25zID0gZGF0YS5pY29ucztcbiAgY29uc3QgYWxpYXNlcyA9IGRhdGEuYWxpYXNlcyB8fCAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgbGV0IGN1cnJlbnRQcm9wcyA9IHt9O1xuICBmdW5jdGlvbiBwYXJzZShuYW1lMikge1xuICAgIGN1cnJlbnRQcm9wcyA9IG1lcmdlSWNvbkRhdGEoXG4gICAgICBpY29uc1tuYW1lMl0gfHwgYWxpYXNlc1tuYW1lMl0sXG4gICAgICBjdXJyZW50UHJvcHNcbiAgICApO1xuICB9XG4gIHBhcnNlKG5hbWUpO1xuICB0cmVlLmZvckVhY2gocGFyc2UpO1xuICByZXR1cm4gbWVyZ2VJY29uRGF0YShkYXRhLCBjdXJyZW50UHJvcHMpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUljb25TZXQoZGF0YSwgY2FsbGJhY2spIHtcbiAgY29uc3QgbmFtZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBkYXRhLmljb25zICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIG5hbWVzO1xuICB9XG4gIGlmIChkYXRhLm5vdF9mb3VuZCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgZGF0YS5ub3RfZm91bmQuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgY2FsbGJhY2sobmFtZSwgbnVsbCk7XG4gICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgIH0pO1xuICB9XG4gIGNvbnN0IHRyZWUgPSBnZXRJY29uc1RyZWUoZGF0YSk7XG4gIGZvciAoY29uc3QgbmFtZSBpbiB0cmVlKSB7XG4gICAgY29uc3QgaXRlbSA9IHRyZWVbbmFtZV07XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGNhbGxiYWNrKG5hbWUsIGludGVybmFsR2V0SWNvbkRhdGEoZGF0YSwgbmFtZSwgaXRlbSkpO1xuICAgICAgbmFtZXMucHVzaChuYW1lKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzO1xufVxuXG5jb25zdCBtYXRjaEljb25OYW1lID0gL15bYS16MC05XSsoLVthLXowLTldKykqJC87XG5jb25zdCBzdHJpbmdUb0ljb24gPSAodmFsdWUsIHZhbGlkYXRlLCBhbGxvd1NpbXBsZU5hbWUsIHByb3ZpZGVyID0gXCJcIikgPT4ge1xuICBjb25zdCBjb2xvblNlcGFyYXRlZCA9IHZhbHVlLnNwbGl0KFwiOlwiKTtcbiAgaWYgKHZhbHVlLnNsaWNlKDAsIDEpID09PSBcIkBcIikge1xuICAgIGlmIChjb2xvblNlcGFyYXRlZC5sZW5ndGggPCAyIHx8IGNvbG9uU2VwYXJhdGVkLmxlbmd0aCA+IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcm92aWRlciA9IGNvbG9uU2VwYXJhdGVkLnNoaWZ0KCkuc2xpY2UoMSk7XG4gIH1cbiAgaWYgKGNvbG9uU2VwYXJhdGVkLmxlbmd0aCA+IDMgfHwgIWNvbG9uU2VwYXJhdGVkLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChjb2xvblNlcGFyYXRlZC5sZW5ndGggPiAxKSB7XG4gICAgY29uc3QgbmFtZTIgPSBjb2xvblNlcGFyYXRlZC5wb3AoKTtcbiAgICBjb25zdCBwcmVmaXggPSBjb2xvblNlcGFyYXRlZC5wb3AoKTtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAvLyBBbGxvdyBwcm92aWRlciB3aXRob3V0ICdAJzogXCJwcm92aWRlcjpwcmVmaXg6bmFtZVwiXG4gICAgICBwcm92aWRlcjogY29sb25TZXBhcmF0ZWQubGVuZ3RoID4gMCA/IGNvbG9uU2VwYXJhdGVkWzBdIDogcHJvdmlkZXIsXG4gICAgICBwcmVmaXgsXG4gICAgICBuYW1lOiBuYW1lMlxuICAgIH07XG4gICAgcmV0dXJuIHZhbGlkYXRlICYmICF2YWxpZGF0ZUljb25OYW1lKHJlc3VsdCkgPyBudWxsIDogcmVzdWx0O1xuICB9XG4gIGNvbnN0IG5hbWUgPSBjb2xvblNlcGFyYXRlZFswXTtcbiAgY29uc3QgZGFzaFNlcGFyYXRlZCA9IG5hbWUuc3BsaXQoXCItXCIpO1xuICBpZiAoZGFzaFNlcGFyYXRlZC5sZW5ndGggPiAxKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgcHJvdmlkZXIsXG4gICAgICBwcmVmaXg6IGRhc2hTZXBhcmF0ZWQuc2hpZnQoKSxcbiAgICAgIG5hbWU6IGRhc2hTZXBhcmF0ZWQuam9pbihcIi1cIilcbiAgICB9O1xuICAgIHJldHVybiB2YWxpZGF0ZSAmJiAhdmFsaWRhdGVJY29uTmFtZShyZXN1bHQpID8gbnVsbCA6IHJlc3VsdDtcbiAgfVxuICBpZiAoYWxsb3dTaW1wbGVOYW1lICYmIHByb3ZpZGVyID09PSBcIlwiKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgcHJvdmlkZXIsXG4gICAgICBwcmVmaXg6IFwiXCIsXG4gICAgICBuYW1lXG4gICAgfTtcbiAgICByZXR1cm4gdmFsaWRhdGUgJiYgIXZhbGlkYXRlSWNvbk5hbWUocmVzdWx0LCBhbGxvd1NpbXBsZU5hbWUpID8gbnVsbCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5jb25zdCB2YWxpZGF0ZUljb25OYW1lID0gKGljb24sIGFsbG93U2ltcGxlTmFtZSkgPT4ge1xuICBpZiAoIWljb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuICEhKChpY29uLnByb3ZpZGVyID09PSBcIlwiIHx8IGljb24ucHJvdmlkZXIubWF0Y2gobWF0Y2hJY29uTmFtZSkpICYmIChhbGxvd1NpbXBsZU5hbWUgJiYgaWNvbi5wcmVmaXggPT09IFwiXCIgfHwgaWNvbi5wcmVmaXgubWF0Y2gobWF0Y2hJY29uTmFtZSkpICYmIGljb24ubmFtZS5tYXRjaChtYXRjaEljb25OYW1lKSk7XG59O1xuXG5jb25zdCBvcHRpb25hbFByb3BlcnR5RGVmYXVsdHMgPSB7XG4gIHByb3ZpZGVyOiBcIlwiLFxuICBhbGlhc2VzOiB7fSxcbiAgbm90X2ZvdW5kOiB7fSxcbiAgLi4uZGVmYXVsdEljb25EaW1lbnNpb25zXG59O1xuZnVuY3Rpb24gY2hlY2tPcHRpb25hbFByb3BzKGl0ZW0sIGRlZmF1bHRzKSB7XG4gIGZvciAoY29uc3QgcHJvcCBpbiBkZWZhdWx0cykge1xuICAgIGlmIChwcm9wIGluIGl0ZW0gJiYgdHlwZW9mIGl0ZW1bcHJvcF0gIT09IHR5cGVvZiBkZWZhdWx0c1twcm9wXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHF1aWNrbHlWYWxpZGF0ZUljb25TZXQob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBvYmo7XG4gIGlmICh0eXBlb2YgZGF0YS5wcmVmaXggIT09IFwic3RyaW5nXCIgfHwgIW9iai5pY29ucyB8fCB0eXBlb2Ygb2JqLmljb25zICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKCFjaGVja09wdGlvbmFsUHJvcHMob2JqLCBvcHRpb25hbFByb3BlcnR5RGVmYXVsdHMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgaWNvbnMgPSBkYXRhLmljb25zO1xuICBmb3IgKGNvbnN0IG5hbWUgaW4gaWNvbnMpIHtcbiAgICBjb25zdCBpY29uID0gaWNvbnNbbmFtZV07XG4gICAgaWYgKCFuYW1lLm1hdGNoKG1hdGNoSWNvbk5hbWUpIHx8IHR5cGVvZiBpY29uLmJvZHkgIT09IFwic3RyaW5nXCIgfHwgIWNoZWNrT3B0aW9uYWxQcm9wcyhcbiAgICAgIGljb24sXG4gICAgICBkZWZhdWx0RXh0ZW5kZWRJY29uUHJvcHNcbiAgICApKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgY29uc3QgYWxpYXNlcyA9IGRhdGEuYWxpYXNlcyB8fCAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgZm9yIChjb25zdCBuYW1lIGluIGFsaWFzZXMpIHtcbiAgICBjb25zdCBpY29uID0gYWxpYXNlc1tuYW1lXTtcbiAgICBjb25zdCBwYXJlbnQgPSBpY29uLnBhcmVudDtcbiAgICBpZiAoIW5hbWUubWF0Y2gobWF0Y2hJY29uTmFtZSkgfHwgdHlwZW9mIHBhcmVudCAhPT0gXCJzdHJpbmdcIiB8fCAhaWNvbnNbcGFyZW50XSAmJiAhYWxpYXNlc1twYXJlbnRdIHx8ICFjaGVja09wdGlvbmFsUHJvcHMoXG4gICAgICBpY29uLFxuICAgICAgZGVmYXVsdEV4dGVuZGVkSWNvblByb3BzXG4gICAgKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5jb25zdCBkYXRhU3RvcmFnZSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gbmV3U3RvcmFnZShwcm92aWRlciwgcHJlZml4KSB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZXIsXG4gICAgcHJlZml4LFxuICAgIGljb25zOiAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICBtaXNzaW5nOiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpXG4gIH07XG59XG5mdW5jdGlvbiBnZXRTdG9yYWdlKHByb3ZpZGVyLCBwcmVmaXgpIHtcbiAgY29uc3QgcHJvdmlkZXJTdG9yYWdlID0gZGF0YVN0b3JhZ2VbcHJvdmlkZXJdIHx8IChkYXRhU3RvcmFnZVtwcm92aWRlcl0gPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIHJldHVybiBwcm92aWRlclN0b3JhZ2VbcHJlZml4XSB8fCAocHJvdmlkZXJTdG9yYWdlW3ByZWZpeF0gPSBuZXdTdG9yYWdlKHByb3ZpZGVyLCBwcmVmaXgpKTtcbn1cbmZ1bmN0aW9uIGFkZEljb25TZXQoc3RvcmFnZSwgZGF0YSkge1xuICBpZiAoIXF1aWNrbHlWYWxpZGF0ZUljb25TZXQoZGF0YSkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIHBhcnNlSWNvblNldChkYXRhLCAobmFtZSwgaWNvbikgPT4ge1xuICAgIGlmIChpY29uKSB7XG4gICAgICBzdG9yYWdlLmljb25zW25hbWVdID0gaWNvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RvcmFnZS5taXNzaW5nLmFkZChuYW1lKTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gYWRkSWNvblRvU3RvcmFnZShzdG9yYWdlLCBuYW1lLCBpY29uKSB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiBpY29uLmJvZHkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHN0b3JhZ2UuaWNvbnNbbmFtZV0gPSB7IC4uLmljb24gfTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gbGlzdEljb25zKHByb3ZpZGVyLCBwcmVmaXgpIHtcbiAgbGV0IGFsbEljb25zID0gW107XG4gIGNvbnN0IHByb3ZpZGVycyA9IHR5cGVvZiBwcm92aWRlciA9PT0gXCJzdHJpbmdcIiA/IFtwcm92aWRlcl0gOiBPYmplY3Qua2V5cyhkYXRhU3RvcmFnZSk7XG4gIHByb3ZpZGVycy5mb3JFYWNoKChwcm92aWRlcjIpID0+IHtcbiAgICBjb25zdCBwcmVmaXhlcyA9IHR5cGVvZiBwcm92aWRlcjIgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHByZWZpeCA9PT0gXCJzdHJpbmdcIiA/IFtwcmVmaXhdIDogT2JqZWN0LmtleXMoZGF0YVN0b3JhZ2VbcHJvdmlkZXIyXSB8fCB7fSk7XG4gICAgcHJlZml4ZXMuZm9yRWFjaCgocHJlZml4MikgPT4ge1xuICAgICAgY29uc3Qgc3RvcmFnZSA9IGdldFN0b3JhZ2UocHJvdmlkZXIyLCBwcmVmaXgyKTtcbiAgICAgIGFsbEljb25zID0gYWxsSWNvbnMuY29uY2F0KFxuICAgICAgICBPYmplY3Qua2V5cyhzdG9yYWdlLmljb25zKS5tYXAoXG4gICAgICAgICAgKG5hbWUpID0+IChwcm92aWRlcjIgIT09IFwiXCIgPyBcIkBcIiArIHByb3ZpZGVyMiArIFwiOlwiIDogXCJcIikgKyBwcmVmaXgyICsgXCI6XCIgKyBuYW1lXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gYWxsSWNvbnM7XG59XG5cbmxldCBzaW1wbGVOYW1lcyA9IGZhbHNlO1xuZnVuY3Rpb24gYWxsb3dTaW1wbGVOYW1lcyhhbGxvdykge1xuICBpZiAodHlwZW9mIGFsbG93ID09PSBcImJvb2xlYW5cIikge1xuICAgIHNpbXBsZU5hbWVzID0gYWxsb3c7XG4gIH1cbiAgcmV0dXJuIHNpbXBsZU5hbWVzO1xufVxuZnVuY3Rpb24gZ2V0SWNvbkRhdGEobmFtZSkge1xuICBjb25zdCBpY29uID0gdHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIgPyBzdHJpbmdUb0ljb24obmFtZSwgdHJ1ZSwgc2ltcGxlTmFtZXMpIDogbmFtZTtcbiAgaWYgKGljb24pIHtcbiAgICBjb25zdCBzdG9yYWdlID0gZ2V0U3RvcmFnZShpY29uLnByb3ZpZGVyLCBpY29uLnByZWZpeCk7XG4gICAgY29uc3QgaWNvbk5hbWUgPSBpY29uLm5hbWU7XG4gICAgcmV0dXJuIHN0b3JhZ2UuaWNvbnNbaWNvbk5hbWVdIHx8IChzdG9yYWdlLm1pc3NpbmcuaGFzKGljb25OYW1lKSA/IG51bGwgOiB2b2lkIDApO1xuICB9XG59XG5mdW5jdGlvbiBhZGRJY29uKG5hbWUsIGRhdGEpIHtcbiAgY29uc3QgaWNvbiA9IHN0cmluZ1RvSWNvbihuYW1lLCB0cnVlLCBzaW1wbGVOYW1lcyk7XG4gIGlmICghaWNvbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBzdG9yYWdlID0gZ2V0U3RvcmFnZShpY29uLnByb3ZpZGVyLCBpY29uLnByZWZpeCk7XG4gIHJldHVybiBhZGRJY29uVG9TdG9yYWdlKHN0b3JhZ2UsIGljb24ubmFtZSwgZGF0YSk7XG59XG5mdW5jdGlvbiBhZGRDb2xsZWN0aW9uKGRhdGEsIHByb3ZpZGVyKSB7XG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIHByb3ZpZGVyICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcHJvdmlkZXIgPSBkYXRhLnByb3ZpZGVyIHx8IFwiXCI7XG4gIH1cbiAgaWYgKHNpbXBsZU5hbWVzICYmICFwcm92aWRlciAmJiAhZGF0YS5wcmVmaXgpIHtcbiAgICBsZXQgYWRkZWQgPSBmYWxzZTtcbiAgICBpZiAocXVpY2tseVZhbGlkYXRlSWNvblNldChkYXRhKSkge1xuICAgICAgZGF0YS5wcmVmaXggPSBcIlwiO1xuICAgICAgcGFyc2VJY29uU2V0KGRhdGEsIChuYW1lLCBpY29uKSA9PiB7XG4gICAgICAgIGlmIChpY29uICYmIGFkZEljb24obmFtZSwgaWNvbikpIHtcbiAgICAgICAgICBhZGRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkZWQ7XG4gIH1cbiAgY29uc3QgcHJlZml4ID0gZGF0YS5wcmVmaXg7XG4gIGlmICghdmFsaWRhdGVJY29uTmFtZSh7XG4gICAgcHJvdmlkZXIsXG4gICAgcHJlZml4LFxuICAgIG5hbWU6IFwiYVwiXG4gIH0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHN0b3JhZ2UgPSBnZXRTdG9yYWdlKHByb3ZpZGVyLCBwcmVmaXgpO1xuICByZXR1cm4gISFhZGRJY29uU2V0KHN0b3JhZ2UsIGRhdGEpO1xufVxuZnVuY3Rpb24gaWNvbkV4aXN0cyhuYW1lKSB7XG4gIHJldHVybiAhIWdldEljb25EYXRhKG5hbWUpO1xufVxuZnVuY3Rpb24gZ2V0SWNvbihuYW1lKSB7XG4gIGNvbnN0IHJlc3VsdCA9IGdldEljb25EYXRhKG5hbWUpO1xuICByZXR1cm4gcmVzdWx0ID8ge1xuICAgIC4uLmRlZmF1bHRJY29uUHJvcHMsXG4gICAgLi4ucmVzdWx0XG4gIH0gOiBudWxsO1xufVxuXG5jb25zdCBkZWZhdWx0SWNvblNpemVDdXN0b21pc2F0aW9ucyA9IE9iamVjdC5mcmVlemUoe1xuICB3aWR0aDogbnVsbCxcbiAgaGVpZ2h0OiBudWxsXG59KTtcbmNvbnN0IGRlZmF1bHRJY29uQ3VzdG9taXNhdGlvbnMgPSBPYmplY3QuZnJlZXplKHtcbiAgLy8gRGltZW5zaW9uc1xuICAuLi5kZWZhdWx0SWNvblNpemVDdXN0b21pc2F0aW9ucyxcbiAgLy8gVHJhbnNmb3JtYXRpb25zXG4gIC4uLmRlZmF1bHRJY29uVHJhbnNmb3JtYXRpb25zXG59KTtcblxuY29uc3QgdW5pdHNTcGxpdCA9IC8oLT9bMC05Ll0qWzAtOV0rWzAtOS5dKikvZztcbmNvbnN0IHVuaXRzVGVzdCA9IC9eLT9bMC05Ll0qWzAtOV0rWzAtOS5dKiQvZztcbmZ1bmN0aW9uIGNhbGN1bGF0ZVNpemUoc2l6ZSwgcmF0aW8sIHByZWNpc2lvbikge1xuICBpZiAocmF0aW8gPT09IDEpIHtcbiAgICByZXR1cm4gc2l6ZTtcbiAgfVxuICBwcmVjaXNpb24gPSBwcmVjaXNpb24gfHwgMTAwO1xuICBpZiAodHlwZW9mIHNpemUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHNpemUgKiByYXRpbyAqIHByZWNpc2lvbikgLyBwcmVjaXNpb247XG4gIH1cbiAgaWYgKHR5cGVvZiBzaXplICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHNpemU7XG4gIH1cbiAgY29uc3Qgb2xkUGFydHMgPSBzaXplLnNwbGl0KHVuaXRzU3BsaXQpO1xuICBpZiAob2xkUGFydHMgPT09IG51bGwgfHwgIW9sZFBhcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBzaXplO1xuICB9XG4gIGNvbnN0IG5ld1BhcnRzID0gW107XG4gIGxldCBjb2RlID0gb2xkUGFydHMuc2hpZnQoKTtcbiAgbGV0IGlzTnVtYmVyID0gdW5pdHNUZXN0LnRlc3QoY29kZSk7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGlzTnVtYmVyKSB7XG4gICAgICBjb25zdCBudW0gPSBwYXJzZUZsb2F0KGNvZGUpO1xuICAgICAgaWYgKGlzTmFOKG51bSkpIHtcbiAgICAgICAgbmV3UGFydHMucHVzaChjb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1BhcnRzLnB1c2goTWF0aC5jZWlsKG51bSAqIHJhdGlvICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1BhcnRzLnB1c2goY29kZSk7XG4gICAgfVxuICAgIGNvZGUgPSBvbGRQYXJ0cy5zaGlmdCgpO1xuICAgIGlmIChjb2RlID09PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiBuZXdQYXJ0cy5qb2luKFwiXCIpO1xuICAgIH1cbiAgICBpc051bWJlciA9ICFpc051bWJlcjtcbiAgfVxufVxuXG5jb25zdCBpc1Vuc2V0S2V5d29yZCA9ICh2YWx1ZSkgPT4gdmFsdWUgPT09IFwidW5zZXRcIiB8fCB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB2YWx1ZSA9PT0gXCJub25lXCI7XG5mdW5jdGlvbiBpY29uVG9TVkcoaWNvbiwgY3VzdG9taXNhdGlvbnMpIHtcbiAgY29uc3QgZnVsbEljb24gPSB7XG4gICAgLi4uZGVmYXVsdEljb25Qcm9wcyxcbiAgICAuLi5pY29uXG4gIH07XG4gIGNvbnN0IGZ1bGxDdXN0b21pc2F0aW9ucyA9IHtcbiAgICAuLi5kZWZhdWx0SWNvbkN1c3RvbWlzYXRpb25zLFxuICAgIC4uLmN1c3RvbWlzYXRpb25zXG4gIH07XG4gIGNvbnN0IGJveCA9IHtcbiAgICBsZWZ0OiBmdWxsSWNvbi5sZWZ0LFxuICAgIHRvcDogZnVsbEljb24udG9wLFxuICAgIHdpZHRoOiBmdWxsSWNvbi53aWR0aCxcbiAgICBoZWlnaHQ6IGZ1bGxJY29uLmhlaWdodFxuICB9O1xuICBsZXQgYm9keSA9IGZ1bGxJY29uLmJvZHk7XG4gIFtmdWxsSWNvbiwgZnVsbEN1c3RvbWlzYXRpb25zXS5mb3JFYWNoKChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybWF0aW9ucyA9IFtdO1xuICAgIGNvbnN0IGhGbGlwID0gcHJvcHMuaEZsaXA7XG4gICAgY29uc3QgdkZsaXAgPSBwcm9wcy52RmxpcDtcbiAgICBsZXQgcm90YXRpb24gPSBwcm9wcy5yb3RhdGU7XG4gICAgaWYgKGhGbGlwKSB7XG4gICAgICBpZiAodkZsaXApIHtcbiAgICAgICAgcm90YXRpb24gKz0gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybWF0aW9ucy5wdXNoKFxuICAgICAgICAgIFwidHJhbnNsYXRlKFwiICsgKGJveC53aWR0aCArIGJveC5sZWZ0KS50b1N0cmluZygpICsgXCIgXCIgKyAoMCAtIGJveC50b3ApLnRvU3RyaW5nKCkgKyBcIilcIlxuICAgICAgICApO1xuICAgICAgICB0cmFuc2Zvcm1hdGlvbnMucHVzaChcInNjYWxlKC0xIDEpXCIpO1xuICAgICAgICBib3gudG9wID0gYm94LmxlZnQgPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodkZsaXApIHtcbiAgICAgIHRyYW5zZm9ybWF0aW9ucy5wdXNoKFxuICAgICAgICBcInRyYW5zbGF0ZShcIiArICgwIC0gYm94LmxlZnQpLnRvU3RyaW5nKCkgKyBcIiBcIiArIChib3guaGVpZ2h0ICsgYm94LnRvcCkudG9TdHJpbmcoKSArIFwiKVwiXG4gICAgICApO1xuICAgICAgdHJhbnNmb3JtYXRpb25zLnB1c2goXCJzY2FsZSgxIC0xKVwiKTtcbiAgICAgIGJveC50b3AgPSBib3gubGVmdCA9IDA7XG4gICAgfVxuICAgIGxldCB0ZW1wVmFsdWU7XG4gICAgaWYgKHJvdGF0aW9uIDwgMCkge1xuICAgICAgcm90YXRpb24gLT0gTWF0aC5mbG9vcihyb3RhdGlvbiAvIDQpICogNDtcbiAgICB9XG4gICAgcm90YXRpb24gPSByb3RhdGlvbiAlIDQ7XG4gICAgc3dpdGNoIChyb3RhdGlvbikge1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0ZW1wVmFsdWUgPSBib3guaGVpZ2h0IC8gMiArIGJveC50b3A7XG4gICAgICAgIHRyYW5zZm9ybWF0aW9ucy51bnNoaWZ0KFxuICAgICAgICAgIFwicm90YXRlKDkwIFwiICsgdGVtcFZhbHVlLnRvU3RyaW5nKCkgKyBcIiBcIiArIHRlbXBWYWx1ZS50b1N0cmluZygpICsgXCIpXCJcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHRyYW5zZm9ybWF0aW9ucy51bnNoaWZ0KFxuICAgICAgICAgIFwicm90YXRlKDE4MCBcIiArIChib3gud2lkdGggLyAyICsgYm94LmxlZnQpLnRvU3RyaW5nKCkgKyBcIiBcIiArIChib3guaGVpZ2h0IC8gMiArIGJveC50b3ApLnRvU3RyaW5nKCkgKyBcIilcIlxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgdGVtcFZhbHVlID0gYm94LndpZHRoIC8gMiArIGJveC5sZWZ0O1xuICAgICAgICB0cmFuc2Zvcm1hdGlvbnMudW5zaGlmdChcbiAgICAgICAgICBcInJvdGF0ZSgtOTAgXCIgKyB0ZW1wVmFsdWUudG9TdHJpbmcoKSArIFwiIFwiICsgdGVtcFZhbHVlLnRvU3RyaW5nKCkgKyBcIilcIlxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHJvdGF0aW9uICUgMiA9PT0gMSkge1xuICAgICAgaWYgKGJveC5sZWZ0ICE9PSBib3gudG9wKSB7XG4gICAgICAgIHRlbXBWYWx1ZSA9IGJveC5sZWZ0O1xuICAgICAgICBib3gubGVmdCA9IGJveC50b3A7XG4gICAgICAgIGJveC50b3AgPSB0ZW1wVmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoYm94LndpZHRoICE9PSBib3guaGVpZ2h0KSB7XG4gICAgICAgIHRlbXBWYWx1ZSA9IGJveC53aWR0aDtcbiAgICAgICAgYm94LndpZHRoID0gYm94LmhlaWdodDtcbiAgICAgICAgYm94LmhlaWdodCA9IHRlbXBWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRyYW5zZm9ybWF0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGJvZHkgPSAnPGcgdHJhbnNmb3JtPVwiJyArIHRyYW5zZm9ybWF0aW9ucy5qb2luKFwiIFwiKSArICdcIj4nICsgYm9keSArIFwiPC9nPlwiO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGN1c3RvbWlzYXRpb25zV2lkdGggPSBmdWxsQ3VzdG9taXNhdGlvbnMud2lkdGg7XG4gIGNvbnN0IGN1c3RvbWlzYXRpb25zSGVpZ2h0ID0gZnVsbEN1c3RvbWlzYXRpb25zLmhlaWdodDtcbiAgY29uc3QgYm94V2lkdGggPSBib3gud2lkdGg7XG4gIGNvbnN0IGJveEhlaWdodCA9IGJveC5oZWlnaHQ7XG4gIGxldCB3aWR0aDtcbiAgbGV0IGhlaWdodDtcbiAgaWYgKGN1c3RvbWlzYXRpb25zV2lkdGggPT09IG51bGwpIHtcbiAgICBoZWlnaHQgPSBjdXN0b21pc2F0aW9uc0hlaWdodCA9PT0gbnVsbCA/IFwiMWVtXCIgOiBjdXN0b21pc2F0aW9uc0hlaWdodCA9PT0gXCJhdXRvXCIgPyBib3hIZWlnaHQgOiBjdXN0b21pc2F0aW9uc0hlaWdodDtcbiAgICB3aWR0aCA9IGNhbGN1bGF0ZVNpemUoaGVpZ2h0LCBib3hXaWR0aCAvIGJveEhlaWdodCk7XG4gIH0gZWxzZSB7XG4gICAgd2lkdGggPSBjdXN0b21pc2F0aW9uc1dpZHRoID09PSBcImF1dG9cIiA/IGJveFdpZHRoIDogY3VzdG9taXNhdGlvbnNXaWR0aDtcbiAgICBoZWlnaHQgPSBjdXN0b21pc2F0aW9uc0hlaWdodCA9PT0gbnVsbCA/IGNhbGN1bGF0ZVNpemUod2lkdGgsIGJveEhlaWdodCAvIGJveFdpZHRoKSA6IGN1c3RvbWlzYXRpb25zSGVpZ2h0ID09PSBcImF1dG9cIiA/IGJveEhlaWdodCA6IGN1c3RvbWlzYXRpb25zSGVpZ2h0O1xuICB9XG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgY29uc3Qgc2V0QXR0ciA9IChwcm9wLCB2YWx1ZSkgPT4ge1xuICAgIGlmICghaXNVbnNldEtleXdvcmQodmFsdWUpKSB7XG4gICAgICBhdHRyaWJ1dGVzW3Byb3BdID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG4gIH07XG4gIHNldEF0dHIoXCJ3aWR0aFwiLCB3aWR0aCk7XG4gIHNldEF0dHIoXCJoZWlnaHRcIiwgaGVpZ2h0KTtcbiAgYXR0cmlidXRlcy52aWV3Qm94ID0gYm94LmxlZnQudG9TdHJpbmcoKSArIFwiIFwiICsgYm94LnRvcC50b1N0cmluZygpICsgXCIgXCIgKyBib3hXaWR0aC50b1N0cmluZygpICsgXCIgXCIgKyBib3hIZWlnaHQudG9TdHJpbmcoKTtcbiAgcmV0dXJuIHtcbiAgICBhdHRyaWJ1dGVzLFxuICAgIGJvZHlcbiAgfTtcbn1cblxuY29uc3QgcmVnZXggPSAvXFxzaWQ9XCIoXFxTKylcIi9nO1xuY29uc3QgcmFuZG9tUHJlZml4ID0gXCJJY29uaWZ5SWRcIiArIERhdGUubm93KCkudG9TdHJpbmcoMTYpICsgKE1hdGgucmFuZG9tKCkgKiAxNjc3NzIxNiB8IDApLnRvU3RyaW5nKDE2KTtcbmxldCBjb3VudGVyID0gMDtcbmZ1bmN0aW9uIHJlcGxhY2VJRHMoYm9keSwgcHJlZml4ID0gcmFuZG9tUHJlZml4KSB7XG4gIGNvbnN0IGlkcyA9IFtdO1xuICBsZXQgbWF0Y2g7XG4gIHdoaWxlIChtYXRjaCA9IHJlZ2V4LmV4ZWMoYm9keSkpIHtcbiAgICBpZHMucHVzaChtYXRjaFsxXSk7XG4gIH1cbiAgaWYgKCFpZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cbiAgY29uc3Qgc3VmZml4ID0gXCJzdWZmaXhcIiArIChNYXRoLnJhbmRvbSgpICogMTY3NzcyMTYgfCBEYXRlLm5vdygpKS50b1N0cmluZygxNik7XG4gIGlkcy5mb3JFYWNoKChpZCkgPT4ge1xuICAgIGNvbnN0IG5ld0lEID0gdHlwZW9mIHByZWZpeCA9PT0gXCJmdW5jdGlvblwiID8gcHJlZml4KGlkKSA6IHByZWZpeCArIChjb3VudGVyKyspLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZXNjYXBlZElEID0gaWQucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpO1xuICAgIGJvZHkgPSBib2R5LnJlcGxhY2UoXG4gICAgICAvLyBBbGxvd2VkIGNoYXJhY3RlcnMgYmVmb3JlIGlkOiBbIztcIl1cbiAgICAgIC8vIEFsbG93ZWQgY2hhcmFjdGVycyBhZnRlciBpZDogWylcIl0sIC5bYS16XVxuICAgICAgbmV3IFJlZ0V4cCgnKFsjO1wiXSkoJyArIGVzY2FwZWRJRCArICcpKFtcIildfFxcXFwuW2Etel0pJywgXCJnXCIpLFxuICAgICAgXCIkMVwiICsgbmV3SUQgKyBzdWZmaXggKyBcIiQzXCJcbiAgICApO1xuICB9KTtcbiAgYm9keSA9IGJvZHkucmVwbGFjZShuZXcgUmVnRXhwKHN1ZmZpeCwgXCJnXCIpLCBcIlwiKTtcbiAgcmV0dXJuIGJvZHk7XG59XG5cbmNvbnN0IGJyb3dzZXJTdG9yYWdlQ29uZmlnID0ge1xuICBsb2NhbDogdHJ1ZSxcbiAgc2Vzc2lvbjogdHJ1ZVxufTtcbmNvbnN0IGJyb3dzZXJTdG9yYWdlRW1wdHlJdGVtcyA9IHtcbiAgbG9jYWw6IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksXG4gIHNlc3Npb246IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KClcbn07XG5sZXQgYnJvd3NlclN0b3JhZ2VTdGF0dXMgPSBmYWxzZTtcbmZ1bmN0aW9uIHNldEJyb3dzZXJTdG9yYWdlU3RhdHVzKHN0YXR1cykge1xuICBicm93c2VyU3RvcmFnZVN0YXR1cyA9IHN0YXR1cztcbn1cblxuY29uc3QgYnJvd3NlckNhY2hlVmVyc2lvbiA9IFwiaWNvbmlmeTJcIjtcbmNvbnN0IGJyb3dzZXJDYWNoZVByZWZpeCA9IFwiaWNvbmlmeVwiO1xuY29uc3QgYnJvd3NlckNhY2hlQ291bnRLZXkgPSBicm93c2VyQ2FjaGVQcmVmaXggKyBcIi1jb3VudFwiO1xuY29uc3QgYnJvd3NlckNhY2hlVmVyc2lvbktleSA9IGJyb3dzZXJDYWNoZVByZWZpeCArIFwiLXZlcnNpb25cIjtcbmNvbnN0IGJyb3dzZXJTdG9yYWdlSG91ciA9IDM2ZTU7XG5jb25zdCBicm93c2VyU3RvcmFnZUNhY2hlRXhwaXJhdGlvbiA9IDE2ODtcblxuZnVuY3Rpb24gZ2V0U3RvcmVkSXRlbShmdW5jLCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZnVuYy5nZXRJdGVtKGtleSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICB9XG59XG5mdW5jdGlvbiBzZXRTdG9yZWRJdGVtKGZ1bmMsIGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBmdW5jLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICB9XG59XG5mdW5jdGlvbiByZW1vdmVTdG9yZWRJdGVtKGZ1bmMsIGtleSkge1xuICB0cnkge1xuICAgIGZ1bmMucmVtb3ZlSXRlbShrZXkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRCcm93c2VyU3RvcmFnZUl0ZW1zQ291bnQoc3RvcmFnZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHNldFN0b3JlZEl0ZW0oc3RvcmFnZSwgYnJvd3NlckNhY2hlQ291bnRLZXksIHZhbHVlLnRvU3RyaW5nKCkpO1xufVxuZnVuY3Rpb24gZ2V0QnJvd3NlclN0b3JhZ2VJdGVtc0NvdW50KHN0b3JhZ2UpIHtcbiAgcmV0dXJuIHBhcnNlSW50KGdldFN0b3JlZEl0ZW0oc3RvcmFnZSwgYnJvd3NlckNhY2hlQ291bnRLZXkpKSB8fCAwO1xufVxuXG5sZXQgX3dpbmRvdyA9IHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgPyB7fSA6IHdpbmRvdztcbmZ1bmN0aW9uIGdldEJyb3dzZXJTdG9yYWdlKGtleSkge1xuICBjb25zdCBhdHRyID0ga2V5ICsgXCJTdG9yYWdlXCI7XG4gIHRyeSB7XG4gICAgaWYgKF93aW5kb3cgJiYgX3dpbmRvd1thdHRyXSAmJiB0eXBlb2YgX3dpbmRvd1thdHRyXS5sZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBfd2luZG93W2F0dHJdO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gIH1cbiAgYnJvd3NlclN0b3JhZ2VDb25maWdba2V5XSA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpdGVyYXRlQnJvd3NlclN0b3JhZ2Uoa2V5LCBjYWxsYmFjaykge1xuICBjb25zdCBmdW5jID0gZ2V0QnJvd3NlclN0b3JhZ2Uoa2V5KTtcbiAgaWYgKCFmdW5jKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHZlcnNpb24gPSBnZXRTdG9yZWRJdGVtKGZ1bmMsIGJyb3dzZXJDYWNoZVZlcnNpb25LZXkpO1xuICBpZiAodmVyc2lvbiAhPT0gYnJvd3NlckNhY2hlVmVyc2lvbikge1xuICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICBjb25zdCB0b3RhbDIgPSBnZXRCcm93c2VyU3RvcmFnZUl0ZW1zQ291bnQoZnVuYyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsMjsgaSsrKSB7XG4gICAgICAgIHJlbW92ZVN0b3JlZEl0ZW0oZnVuYywgYnJvd3NlckNhY2hlUHJlZml4ICsgaS50b1N0cmluZygpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc2V0U3RvcmVkSXRlbShmdW5jLCBicm93c2VyQ2FjaGVWZXJzaW9uS2V5LCBicm93c2VyQ2FjaGVWZXJzaW9uKTtcbiAgICBzZXRCcm93c2VyU3RvcmFnZUl0ZW1zQ291bnQoZnVuYywgMCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG1pblRpbWUgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyBicm93c2VyU3RvcmFnZUhvdXIpIC0gYnJvd3NlclN0b3JhZ2VDYWNoZUV4cGlyYXRpb247XG4gIGNvbnN0IHBhcnNlSXRlbSA9IChpbmRleCkgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBicm93c2VyQ2FjaGVQcmVmaXggKyBpbmRleC50b1N0cmluZygpO1xuICAgIGNvbnN0IGl0ZW0gPSBnZXRTdG9yZWRJdGVtKGZ1bmMsIG5hbWUpO1xuICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaXRlbSk7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGRhdGEuY2FjaGVkID09PSBcIm51bWJlclwiICYmIGRhdGEuY2FjaGVkID4gbWluVGltZSAmJiB0eXBlb2YgZGF0YS5wcm92aWRlciA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgZGF0YS5kYXRhID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBkYXRhLmRhdGEucHJlZml4ID09PSBcInN0cmluZ1wiICYmIC8vIFZhbGlkIGl0ZW06IHJ1biBjYWxsYmFja1xuICAgICAgY2FsbGJhY2soZGF0YSwgaW5kZXgpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgIH1cbiAgICByZW1vdmVTdG9yZWRJdGVtKGZ1bmMsIG5hbWUpO1xuICB9O1xuICBsZXQgdG90YWwgPSBnZXRCcm93c2VyU3RvcmFnZUl0ZW1zQ291bnQoZnVuYyk7XG4gIGZvciAobGV0IGkgPSB0b3RhbCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKCFwYXJzZUl0ZW0oaSkpIHtcbiAgICAgIGlmIChpID09PSB0b3RhbCAtIDEpIHtcbiAgICAgICAgdG90YWwtLTtcbiAgICAgICAgc2V0QnJvd3NlclN0b3JhZ2VJdGVtc0NvdW50KGZ1bmMsIHRvdGFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyb3dzZXJTdG9yYWdlRW1wdHlJdGVtc1trZXldLmFkZChpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdEJyb3dzZXJTdG9yYWdlKCkge1xuICBpZiAoYnJvd3NlclN0b3JhZ2VTdGF0dXMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc2V0QnJvd3NlclN0b3JhZ2VTdGF0dXModHJ1ZSk7XG4gIGZvciAoY29uc3Qga2V5IGluIGJyb3dzZXJTdG9yYWdlQ29uZmlnKSB7XG4gICAgaXRlcmF0ZUJyb3dzZXJTdG9yYWdlKGtleSwgKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGljb25TZXQgPSBpdGVtLmRhdGE7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGl0ZW0ucHJvdmlkZXI7XG4gICAgICBjb25zdCBwcmVmaXggPSBpY29uU2V0LnByZWZpeDtcbiAgICAgIGNvbnN0IHN0b3JhZ2UgPSBnZXRTdG9yYWdlKFxuICAgICAgICBwcm92aWRlcixcbiAgICAgICAgcHJlZml4XG4gICAgICApO1xuICAgICAgaWYgKCFhZGRJY29uU2V0KHN0b3JhZ2UsIGljb25TZXQpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSBpY29uU2V0Lmxhc3RNb2RpZmllZCB8fCAtMTtcbiAgICAgIHN0b3JhZ2UubGFzdE1vZGlmaWVkQ2FjaGVkID0gc3RvcmFnZS5sYXN0TW9kaWZpZWRDYWNoZWQgPyBNYXRoLm1pbihzdG9yYWdlLmxhc3RNb2RpZmllZENhY2hlZCwgbGFzdE1vZGlmaWVkKSA6IGxhc3RNb2RpZmllZDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUJyb3dzZXJDYWNoZShzdG9yYWdlLCB2YWx1ZSkge1xuICBzd2l0Y2ggKHN0b3JhZ2UpIHtcbiAgICBjYXNlIFwibG9jYWxcIjpcbiAgICBjYXNlIFwic2Vzc2lvblwiOlxuICAgICAgYnJvd3NlclN0b3JhZ2VDb25maWdbc3RvcmFnZV0gPSB2YWx1ZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJhbGxcIjpcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGJyb3dzZXJTdG9yYWdlQ29uZmlnKSB7XG4gICAgICAgIGJyb3dzZXJTdG9yYWdlQ29uZmlnW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmNvbnN0IHN0b3JhZ2UgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmZ1bmN0aW9uIHNldEFQSU1vZHVsZShwcm92aWRlciwgaXRlbSkge1xuICBzdG9yYWdlW3Byb3ZpZGVyXSA9IGl0ZW07XG59XG5mdW5jdGlvbiBnZXRBUElNb2R1bGUocHJvdmlkZXIpIHtcbiAgcmV0dXJuIHN0b3JhZ2VbcHJvdmlkZXJdIHx8IHN0b3JhZ2VbXCJcIl07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFQSUNvbmZpZyhzb3VyY2UpIHtcbiAgbGV0IHJlc291cmNlcztcbiAgaWYgKHR5cGVvZiBzb3VyY2UucmVzb3VyY2VzID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmVzb3VyY2VzID0gW3NvdXJjZS5yZXNvdXJjZXNdO1xuICB9IGVsc2Uge1xuICAgIHJlc291cmNlcyA9IHNvdXJjZS5yZXNvdXJjZXM7XG4gICAgaWYgKCEocmVzb3VyY2VzIGluc3RhbmNlb2YgQXJyYXkpIHx8ICFyZXNvdXJjZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIC8vIEFQSSBob3N0c1xuICAgIHJlc291cmNlcyxcbiAgICAvLyBSb290IHBhdGhcbiAgICBwYXRoOiBzb3VyY2UucGF0aCB8fCBcIi9cIixcbiAgICAvLyBVUkwgbGVuZ3RoIGxpbWl0XG4gICAgbWF4VVJMOiBzb3VyY2UubWF4VVJMIHx8IDUwMCxcbiAgICAvLyBUaW1lb3V0IGJlZm9yZSBuZXh0IGhvc3QgaXMgdXNlZC5cbiAgICByb3RhdGU6IHNvdXJjZS5yb3RhdGUgfHwgNzUwLFxuICAgIC8vIFRpbWVvdXQgYmVmb3JlIGZhaWxpbmcgcXVlcnkuXG4gICAgdGltZW91dDogc291cmNlLnRpbWVvdXQgfHwgNWUzLFxuICAgIC8vIFJhbmRvbWlzZSBkZWZhdWx0IEFQSSBlbmQgcG9pbnQuXG4gICAgcmFuZG9tOiBzb3VyY2UucmFuZG9tID09PSB0cnVlLFxuICAgIC8vIFN0YXJ0IGluZGV4XG4gICAgaW5kZXg6IHNvdXJjZS5pbmRleCB8fCAwLFxuICAgIC8vIFJlY2VpdmUgZGF0YSBhZnRlciB0aW1lIG91dCAodXNlZCBpZiB0aW1lIG91dCBraWNrcyBpbiBmaXJzdCwgdGhlbiBBUEkgbW9kdWxlIHNlbmRzIGRhdGEgYW55d2F5KS5cbiAgICBkYXRhQWZ0ZXJUaW1lb3V0OiBzb3VyY2UuZGF0YUFmdGVyVGltZW91dCAhPT0gZmFsc2VcbiAgfTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmNvbnN0IGNvbmZpZ1N0b3JhZ2UgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmNvbnN0IGZhbGxCYWNrQVBJU291cmNlcyA9IFtcbiAgXCJodHRwczovL2FwaS5zaW1wbGVzdmcuY29tXCIsXG4gIFwiaHR0cHM6Ly9hcGkudW5pc3ZnLmNvbVwiXG5dO1xuY29uc3QgZmFsbEJhY2tBUEkgPSBbXTtcbndoaWxlIChmYWxsQmFja0FQSVNvdXJjZXMubGVuZ3RoID4gMCkge1xuICBpZiAoZmFsbEJhY2tBUElTb3VyY2VzLmxlbmd0aCA9PT0gMSkge1xuICAgIGZhbGxCYWNrQVBJLnB1c2goZmFsbEJhY2tBUElTb3VyY2VzLnNoaWZ0KCkpO1xuICB9IGVsc2Uge1xuICAgIGlmIChNYXRoLnJhbmRvbSgpID4gMC41KSB7XG4gICAgICBmYWxsQmFja0FQSS5wdXNoKGZhbGxCYWNrQVBJU291cmNlcy5zaGlmdCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmFsbEJhY2tBUEkucHVzaChmYWxsQmFja0FQSVNvdXJjZXMucG9wKCkpO1xuICAgIH1cbiAgfVxufVxuY29uZmlnU3RvcmFnZVtcIlwiXSA9IGNyZWF0ZUFQSUNvbmZpZyh7XG4gIHJlc291cmNlczogW1wiaHR0cHM6Ly9hcGkuaWNvbmlmeS5kZXNpZ25cIl0uY29uY2F0KGZhbGxCYWNrQVBJKVxufSk7XG5mdW5jdGlvbiBhZGRBUElQcm92aWRlcihwcm92aWRlciwgY3VzdG9tQ29uZmlnKSB7XG4gIGNvbnN0IGNvbmZpZyA9IGNyZWF0ZUFQSUNvbmZpZyhjdXN0b21Db25maWcpO1xuICBpZiAoY29uZmlnID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbmZpZ1N0b3JhZ2VbcHJvdmlkZXJdID0gY29uZmlnO1xuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGdldEFQSUNvbmZpZyhwcm92aWRlcikge1xuICByZXR1cm4gY29uZmlnU3RvcmFnZVtwcm92aWRlcl07XG59XG5mdW5jdGlvbiBsaXN0QVBJUHJvdmlkZXJzKCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnU3RvcmFnZSk7XG59XG5cbmNvbnN0IGRldGVjdEZldGNoID0gKCkgPT4ge1xuICBsZXQgY2FsbGJhY2s7XG4gIHRyeSB7XG4gICAgY2FsbGJhY2sgPSBmZXRjaDtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICB9XG59O1xubGV0IGZldGNoTW9kdWxlID0gZGV0ZWN0RmV0Y2goKTtcbmZ1bmN0aW9uIHNldEZldGNoKGZldGNoMikge1xuICBmZXRjaE1vZHVsZSA9IGZldGNoMjtcbn1cbmZ1bmN0aW9uIGdldEZldGNoKCkge1xuICByZXR1cm4gZmV0Y2hNb2R1bGU7XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVNYXhMZW5ndGgocHJvdmlkZXIsIHByZWZpeCkge1xuICBjb25zdCBjb25maWcgPSBnZXRBUElDb25maWcocHJvdmlkZXIpO1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGxldCByZXN1bHQ7XG4gIGlmICghY29uZmlnLm1heFVSTCkge1xuICAgIHJlc3VsdCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgbGV0IG1heEhvc3RMZW5ndGggPSAwO1xuICAgIGNvbmZpZy5yZXNvdXJjZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgaG9zdCA9IGl0ZW07XG4gICAgICBtYXhIb3N0TGVuZ3RoID0gTWF0aC5tYXgobWF4SG9zdExlbmd0aCwgaG9zdC5sZW5ndGgpO1xuICAgIH0pO1xuICAgIGNvbnN0IHVybCA9IHByZWZpeCArIFwiLmpzb24/aWNvbnM9XCI7XG4gICAgcmVzdWx0ID0gY29uZmlnLm1heFVSTCAtIG1heEhvc3RMZW5ndGggLSBjb25maWcucGF0aC5sZW5ndGggLSB1cmwubGVuZ3RoO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBzaG91bGRBYm9ydChzdGF0dXMpIHtcbiAgcmV0dXJuIHN0YXR1cyA9PT0gNDA0O1xufVxuY29uc3QgcHJlcGFyZSA9IChwcm92aWRlciwgcHJlZml4LCBpY29ucykgPT4ge1xuICBjb25zdCByZXN1bHRzID0gW107XG4gIGNvbnN0IG1heExlbmd0aCA9IGNhbGN1bGF0ZU1heExlbmd0aChwcm92aWRlciwgcHJlZml4KTtcbiAgY29uc3QgdHlwZSA9IFwiaWNvbnNcIjtcbiAgbGV0IGl0ZW0gPSB7XG4gICAgdHlwZSxcbiAgICBwcm92aWRlcixcbiAgICBwcmVmaXgsXG4gICAgaWNvbnM6IFtdXG4gIH07XG4gIGxldCBsZW5ndGggPSAwO1xuICBpY29ucy5mb3JFYWNoKChuYW1lLCBpbmRleCkgPT4ge1xuICAgIGxlbmd0aCArPSBuYW1lLmxlbmd0aCArIDE7XG4gICAgaWYgKGxlbmd0aCA+PSBtYXhMZW5ndGggJiYgaW5kZXggPiAwKSB7XG4gICAgICByZXN1bHRzLnB1c2goaXRlbSk7XG4gICAgICBpdGVtID0ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBwcm92aWRlcixcbiAgICAgICAgcHJlZml4LFxuICAgICAgICBpY29uczogW11cbiAgICAgIH07XG4gICAgICBsZW5ndGggPSBuYW1lLmxlbmd0aDtcbiAgICB9XG4gICAgaXRlbS5pY29ucy5wdXNoKG5hbWUpO1xuICB9KTtcbiAgcmVzdWx0cy5wdXNoKGl0ZW0pO1xuICByZXR1cm4gcmVzdWx0cztcbn07XG5mdW5jdGlvbiBnZXRQYXRoKHByb3ZpZGVyKSB7XG4gIGlmICh0eXBlb2YgcHJvdmlkZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRBUElDb25maWcocHJvdmlkZXIpO1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIHJldHVybiBjb25maWcucGF0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFwiL1wiO1xufVxuY29uc3Qgc2VuZCA9IChob3N0LCBwYXJhbXMsIGNhbGxiYWNrKSA9PiB7XG4gIGlmICghZmV0Y2hNb2R1bGUpIHtcbiAgICBjYWxsYmFjayhcImFib3J0XCIsIDQyNCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBwYXRoID0gZ2V0UGF0aChwYXJhbXMucHJvdmlkZXIpO1xuICBzd2l0Y2ggKHBhcmFtcy50eXBlKSB7XG4gICAgY2FzZSBcImljb25zXCI6IHtcbiAgICAgIGNvbnN0IHByZWZpeCA9IHBhcmFtcy5wcmVmaXg7XG4gICAgICBjb25zdCBpY29ucyA9IHBhcmFtcy5pY29ucztcbiAgICAgIGNvbnN0IGljb25zTGlzdCA9IGljb25zLmpvaW4oXCIsXCIpO1xuICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIGljb25zOiBpY29uc0xpc3RcbiAgICAgIH0pO1xuICAgICAgcGF0aCArPSBwcmVmaXggKyBcIi5qc29uP1wiICsgdXJsUGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBcImN1c3RvbVwiOiB7XG4gICAgICBjb25zdCB1cmkgPSBwYXJhbXMudXJpO1xuICAgICAgcGF0aCArPSB1cmkuc2xpY2UoMCwgMSkgPT09IFwiL1wiID8gdXJpLnNsaWNlKDEpIDogdXJpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICBjYWxsYmFjayhcImFib3J0XCIsIDQwMCk7XG4gICAgICByZXR1cm47XG4gIH1cbiAgbGV0IGRlZmF1bHRFcnJvciA9IDUwMztcbiAgZmV0Y2hNb2R1bGUoaG9zdCArIHBhdGgpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIGlmIChzdGF0dXMgIT09IDIwMCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKHNob3VsZEFib3J0KHN0YXR1cykgPyBcImFib3J0XCIgOiBcIm5leHRcIiwgc3RhdHVzKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkZWZhdWx0RXJyb3IgPSA1MDE7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgfSkudGhlbigoZGF0YSkgPT4ge1xuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIiB8fCBkYXRhID09PSBudWxsKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKGRhdGEgPT09IDQwNCkge1xuICAgICAgICAgIGNhbGxiYWNrKFwiYWJvcnRcIiwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2soXCJuZXh0XCIsIGRlZmF1bHRFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNhbGxiYWNrKFwic3VjY2Vzc1wiLCBkYXRhKTtcbiAgICB9KTtcbiAgfSkuY2F0Y2goKCkgPT4ge1xuICAgIGNhbGxiYWNrKFwibmV4dFwiLCBkZWZhdWx0RXJyb3IpO1xuICB9KTtcbn07XG5jb25zdCBmZXRjaEFQSU1vZHVsZSA9IHtcbiAgcHJlcGFyZSxcbiAgc2VuZFxufTtcblxuZnVuY3Rpb24gc29ydEljb25zKGljb25zKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBsb2FkZWQ6IFtdLFxuICAgIG1pc3Npbmc6IFtdLFxuICAgIHBlbmRpbmc6IFtdXG4gIH07XG4gIGNvbnN0IHN0b3JhZ2UgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWNvbnMuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChhLnByb3ZpZGVyICE9PSBiLnByb3ZpZGVyKSB7XG4gICAgICByZXR1cm4gYS5wcm92aWRlci5sb2NhbGVDb21wYXJlKGIucHJvdmlkZXIpO1xuICAgIH1cbiAgICBpZiAoYS5wcmVmaXggIT09IGIucHJlZml4KSB7XG4gICAgICByZXR1cm4gYS5wcmVmaXgubG9jYWxlQ29tcGFyZShiLnByZWZpeCk7XG4gICAgfVxuICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICB9KTtcbiAgbGV0IGxhc3RJY29uID0ge1xuICAgIHByb3ZpZGVyOiBcIlwiLFxuICAgIHByZWZpeDogXCJcIixcbiAgICBuYW1lOiBcIlwiXG4gIH07XG4gIGljb25zLmZvckVhY2goKGljb24pID0+IHtcbiAgICBpZiAobGFzdEljb24ubmFtZSA9PT0gaWNvbi5uYW1lICYmIGxhc3RJY29uLnByZWZpeCA9PT0gaWNvbi5wcmVmaXggJiYgbGFzdEljb24ucHJvdmlkZXIgPT09IGljb24ucHJvdmlkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGFzdEljb24gPSBpY29uO1xuICAgIGNvbnN0IHByb3ZpZGVyID0gaWNvbi5wcm92aWRlcjtcbiAgICBjb25zdCBwcmVmaXggPSBpY29uLnByZWZpeDtcbiAgICBjb25zdCBuYW1lID0gaWNvbi5uYW1lO1xuICAgIGNvbnN0IHByb3ZpZGVyU3RvcmFnZSA9IHN0b3JhZ2VbcHJvdmlkZXJdIHx8IChzdG9yYWdlW3Byb3ZpZGVyXSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAgICBjb25zdCBsb2NhbFN0b3JhZ2UgPSBwcm92aWRlclN0b3JhZ2VbcHJlZml4XSB8fCAocHJvdmlkZXJTdG9yYWdlW3ByZWZpeF0gPSBnZXRTdG9yYWdlKHByb3ZpZGVyLCBwcmVmaXgpKTtcbiAgICBsZXQgbGlzdDtcbiAgICBpZiAobmFtZSBpbiBsb2NhbFN0b3JhZ2UuaWNvbnMpIHtcbiAgICAgIGxpc3QgPSByZXN1bHQubG9hZGVkO1xuICAgIH0gZWxzZSBpZiAocHJlZml4ID09PSBcIlwiIHx8IGxvY2FsU3RvcmFnZS5taXNzaW5nLmhhcyhuYW1lKSkge1xuICAgICAgbGlzdCA9IHJlc3VsdC5taXNzaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0ID0gcmVzdWx0LnBlbmRpbmc7XG4gICAgfVxuICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICBwcm92aWRlcixcbiAgICAgIHByZWZpeCxcbiAgICAgIG5hbWVcbiAgICB9O1xuICAgIGxpc3QucHVzaChpdGVtKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNhbGxiYWNrKHN0b3JhZ2VzLCBpZCkge1xuICBzdG9yYWdlcy5mb3JFYWNoKChzdG9yYWdlKSA9PiB7XG4gICAgY29uc3QgaXRlbXMgPSBzdG9yYWdlLmxvYWRlckNhbGxiYWNrcztcbiAgICBpZiAoaXRlbXMpIHtcbiAgICAgIHN0b3JhZ2UubG9hZGVyQ2FsbGJhY2tzID0gaXRlbXMuZmlsdGVyKChyb3cpID0+IHJvdy5pZCAhPT0gaWQpO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiB1cGRhdGVDYWxsYmFja3Moc3RvcmFnZSkge1xuICBpZiAoIXN0b3JhZ2UucGVuZGluZ0NhbGxiYWNrc0ZsYWcpIHtcbiAgICBzdG9yYWdlLnBlbmRpbmdDYWxsYmFja3NGbGFnID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHN0b3JhZ2UucGVuZGluZ0NhbGxiYWNrc0ZsYWcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGl0ZW1zID0gc3RvcmFnZS5sb2FkZXJDYWxsYmFja3MgPyBzdG9yYWdlLmxvYWRlckNhbGxiYWNrcy5zbGljZSgwKSA6IFtdO1xuICAgICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGhhc1BlbmRpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gc3RvcmFnZS5wcm92aWRlcjtcbiAgICAgIGNvbnN0IHByZWZpeCA9IHN0b3JhZ2UucHJlZml4O1xuICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBpY29ucyA9IGl0ZW0uaWNvbnM7XG4gICAgICAgIGNvbnN0IG9sZExlbmd0aCA9IGljb25zLnBlbmRpbmcubGVuZ3RoO1xuICAgICAgICBpY29ucy5wZW5kaW5nID0gaWNvbnMucGVuZGluZy5maWx0ZXIoKGljb24pID0+IHtcbiAgICAgICAgICBpZiAoaWNvbi5wcmVmaXggIT09IHByZWZpeCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG5hbWUgPSBpY29uLm5hbWU7XG4gICAgICAgICAgaWYgKHN0b3JhZ2UuaWNvbnNbbmFtZV0pIHtcbiAgICAgICAgICAgIGljb25zLmxvYWRlZC5wdXNoKHtcbiAgICAgICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdG9yYWdlLm1pc3NpbmcuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICBpY29ucy5taXNzaW5nLnB1c2goe1xuICAgICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGFzUGVuZGluZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGljb25zLnBlbmRpbmcubGVuZ3RoICE9PSBvbGRMZW5ndGgpIHtcbiAgICAgICAgICBpZiAoIWhhc1BlbmRpbmcpIHtcbiAgICAgICAgICAgIHJlbW92ZUNhbGxiYWNrKFtzdG9yYWdlXSwgaXRlbS5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGl0ZW0uY2FsbGJhY2soXG4gICAgICAgICAgICBpY29ucy5sb2FkZWQuc2xpY2UoMCksXG4gICAgICAgICAgICBpY29ucy5taXNzaW5nLnNsaWNlKDApLFxuICAgICAgICAgICAgaWNvbnMucGVuZGluZy5zbGljZSgwKSxcbiAgICAgICAgICAgIGl0ZW0uYWJvcnRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxubGV0IGlkQ291bnRlciA9IDA7XG5mdW5jdGlvbiBzdG9yZUNhbGxiYWNrKGNhbGxiYWNrLCBpY29ucywgcGVuZGluZ1NvdXJjZXMpIHtcbiAgY29uc3QgaWQgPSBpZENvdW50ZXIrKztcbiAgY29uc3QgYWJvcnQgPSByZW1vdmVDYWxsYmFjay5iaW5kKG51bGwsIHBlbmRpbmdTb3VyY2VzLCBpZCk7XG4gIGlmICghaWNvbnMucGVuZGluZy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYWJvcnQ7XG4gIH1cbiAgY29uc3QgaXRlbSA9IHtcbiAgICBpZCxcbiAgICBpY29ucyxcbiAgICBjYWxsYmFjayxcbiAgICBhYm9ydFxuICB9O1xuICBwZW5kaW5nU291cmNlcy5mb3JFYWNoKChzdG9yYWdlKSA9PiB7XG4gICAgKHN0b3JhZ2UubG9hZGVyQ2FsbGJhY2tzIHx8IChzdG9yYWdlLmxvYWRlckNhbGxiYWNrcyA9IFtdKSkucHVzaChpdGVtKTtcbiAgfSk7XG4gIHJldHVybiBhYm9ydDtcbn1cblxuZnVuY3Rpb24gbGlzdFRvSWNvbnMobGlzdCwgdmFsaWRhdGUgPSB0cnVlLCBzaW1wbGVOYW1lcyA9IGZhbHNlKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBsaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBjb25zdCBpY29uID0gdHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIgPyBzdHJpbmdUb0ljb24oaXRlbSwgdmFsaWRhdGUsIHNpbXBsZU5hbWVzKSA6IGl0ZW07XG4gICAgaWYgKGljb24pIHtcbiAgICAgIHJlc3VsdC5wdXNoKGljb24pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIHNyYy9jb25maWcudHNcbnZhciBkZWZhdWx0Q29uZmlnID0ge1xuICByZXNvdXJjZXM6IFtdLFxuICBpbmRleDogMCxcbiAgdGltZW91dDogMmUzLFxuICByb3RhdGU6IDc1MCxcbiAgcmFuZG9tOiBmYWxzZSxcbiAgZGF0YUFmdGVyVGltZW91dDogZmFsc2Vcbn07XG5cbi8vIHNyYy9xdWVyeS50c1xuZnVuY3Rpb24gc2VuZFF1ZXJ5KGNvbmZpZywgcGF5bG9hZCwgcXVlcnksIGRvbmUpIHtcbiAgY29uc3QgcmVzb3VyY2VzQ291bnQgPSBjb25maWcucmVzb3VyY2VzLmxlbmd0aDtcbiAgY29uc3Qgc3RhcnRJbmRleCA9IGNvbmZpZy5yYW5kb20gPyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiByZXNvdXJjZXNDb3VudCkgOiBjb25maWcuaW5kZXg7XG4gIGxldCByZXNvdXJjZXM7XG4gIGlmIChjb25maWcucmFuZG9tKSB7XG4gICAgbGV0IGxpc3QgPSBjb25maWcucmVzb3VyY2VzLnNsaWNlKDApO1xuICAgIHJlc291cmNlcyA9IFtdO1xuICAgIHdoaWxlIChsaXN0Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IG5leHRJbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGxpc3QubGVuZ3RoKTtcbiAgICAgIHJlc291cmNlcy5wdXNoKGxpc3RbbmV4dEluZGV4XSk7XG4gICAgICBsaXN0ID0gbGlzdC5zbGljZSgwLCBuZXh0SW5kZXgpLmNvbmNhdChsaXN0LnNsaWNlKG5leHRJbmRleCArIDEpKTtcbiAgICB9XG4gICAgcmVzb3VyY2VzID0gcmVzb3VyY2VzLmNvbmNhdChsaXN0KTtcbiAgfSBlbHNlIHtcbiAgICByZXNvdXJjZXMgPSBjb25maWcucmVzb3VyY2VzLnNsaWNlKHN0YXJ0SW5kZXgpLmNvbmNhdChjb25maWcucmVzb3VyY2VzLnNsaWNlKDAsIHN0YXJ0SW5kZXgpKTtcbiAgfVxuICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICBsZXQgc3RhdHVzID0gXCJwZW5kaW5nXCI7XG4gIGxldCBxdWVyaWVzU2VudCA9IDA7XG4gIGxldCBsYXN0RXJyb3I7XG4gIGxldCB0aW1lciA9IG51bGw7XG4gIGxldCBxdWV1ZSA9IFtdO1xuICBsZXQgZG9uZUNhbGxiYWNrcyA9IFtdO1xuICBpZiAodHlwZW9mIGRvbmUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGRvbmVDYWxsYmFja3MucHVzaChkb25lKTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRpbWVyKCkge1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gYWJvcnQoKSB7XG4gICAgaWYgKHN0YXR1cyA9PT0gXCJwZW5kaW5nXCIpIHtcbiAgICAgIHN0YXR1cyA9IFwiYWJvcnRlZFwiO1xuICAgIH1cbiAgICByZXNldFRpbWVyKCk7XG4gICAgcXVldWUuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0uc3RhdHVzID09PSBcInBlbmRpbmdcIikge1xuICAgICAgICBpdGVtLnN0YXR1cyA9IFwiYWJvcnRlZFwiO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHF1ZXVlID0gW107XG4gIH1cbiAgZnVuY3Rpb24gc3Vic2NyaWJlKGNhbGxiYWNrLCBvdmVyd3JpdGUpIHtcbiAgICBpZiAob3ZlcndyaXRlKSB7XG4gICAgICBkb25lQ2FsbGJhY2tzID0gW107XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgZG9uZUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZ2V0UXVlcnlTdGF0dXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0VGltZSxcbiAgICAgIHBheWxvYWQsXG4gICAgICBzdGF0dXMsXG4gICAgICBxdWVyaWVzU2VudCxcbiAgICAgIHF1ZXJpZXNQZW5kaW5nOiBxdWV1ZS5sZW5ndGgsXG4gICAgICBzdWJzY3JpYmUsXG4gICAgICBhYm9ydFxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gZmFpbFF1ZXJ5KCkge1xuICAgIHN0YXR1cyA9IFwiZmFpbGVkXCI7XG4gICAgZG9uZUNhbGxiYWNrcy5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgY2FsbGJhY2sodm9pZCAwLCBsYXN0RXJyb3IpO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIGNsZWFyUXVldWUoKSB7XG4gICAgcXVldWUuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0uc3RhdHVzID09PSBcInBlbmRpbmdcIikge1xuICAgICAgICBpdGVtLnN0YXR1cyA9IFwiYWJvcnRlZFwiO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHF1ZXVlID0gW107XG4gIH1cbiAgZnVuY3Rpb24gbW9kdWxlUmVzcG9uc2UoaXRlbSwgcmVzcG9uc2UsIGRhdGEpIHtcbiAgICBjb25zdCBpc0Vycm9yID0gcmVzcG9uc2UgIT09IFwic3VjY2Vzc1wiO1xuICAgIHF1ZXVlID0gcXVldWUuZmlsdGVyKChxdWV1ZWQpID0+IHF1ZXVlZCAhPT0gaXRlbSk7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgICBpZiAoaXNFcnJvciB8fCAhY29uZmlnLmRhdGFBZnRlclRpbWVvdXQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyZXNwb25zZSA9PT0gXCJhYm9ydFwiKSB7XG4gICAgICBsYXN0RXJyb3IgPSBkYXRhO1xuICAgICAgZmFpbFF1ZXJ5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0Vycm9yKSB7XG4gICAgICBsYXN0RXJyb3IgPSBkYXRhO1xuICAgICAgaWYgKCFxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZXMubGVuZ3RoKSB7XG4gICAgICAgICAgZmFpbFF1ZXJ5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhlY05leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXNldFRpbWVyKCk7XG4gICAgY2xlYXJRdWV1ZSgpO1xuICAgIGlmICghY29uZmlnLnJhbmRvbSkge1xuICAgICAgY29uc3QgaW5kZXggPSBjb25maWcucmVzb3VyY2VzLmluZGV4T2YoaXRlbS5yZXNvdXJjZSk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xICYmIGluZGV4ICE9PSBjb25maWcuaW5kZXgpIHtcbiAgICAgICAgY29uZmlnLmluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXR1cyA9IFwiY29tcGxldGVkXCI7XG4gICAgZG9uZUNhbGxiYWNrcy5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gZXhlY05leHQoKSB7XG4gICAgaWYgKHN0YXR1cyAhPT0gXCJwZW5kaW5nXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVzZXRUaW1lcigpO1xuICAgIGNvbnN0IHJlc291cmNlID0gcmVzb3VyY2VzLnNoaWZ0KCk7XG4gICAgaWYgKHJlc291cmNlID09PSB2b2lkIDApIHtcbiAgICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZXNldFRpbWVyKCk7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJwZW5kaW5nXCIpIHtcbiAgICAgICAgICAgIGNsZWFyUXVldWUoKTtcbiAgICAgICAgICAgIGZhaWxRdWVyeSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgY29uZmlnLnRpbWVvdXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmYWlsUXVlcnkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXRlbSA9IHtcbiAgICAgIHN0YXR1czogXCJwZW5kaW5nXCIsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGNhbGxiYWNrOiAoc3RhdHVzMiwgZGF0YSkgPT4ge1xuICAgICAgICBtb2R1bGVSZXNwb25zZShpdGVtLCBzdGF0dXMyLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHF1ZXVlLnB1c2goaXRlbSk7XG4gICAgcXVlcmllc1NlbnQrKztcbiAgICB0aW1lciA9IHNldFRpbWVvdXQoZXhlY05leHQsIGNvbmZpZy5yb3RhdGUpO1xuICAgIHF1ZXJ5KHJlc291cmNlLCBwYXlsb2FkLCBpdGVtLmNhbGxiYWNrKTtcbiAgfVxuICBzZXRUaW1lb3V0KGV4ZWNOZXh0KTtcbiAgcmV0dXJuIGdldFF1ZXJ5U3RhdHVzO1xufVxuXG4vLyBzcmMvaW5kZXgudHNcbmZ1bmN0aW9uIGluaXRSZWR1bmRhbmN5KGNmZykge1xuICBjb25zdCBjb25maWcgPSB7XG4gICAgLi4uZGVmYXVsdENvbmZpZyxcbiAgICAuLi5jZmdcbiAgfTtcbiAgbGV0IHF1ZXJpZXMgPSBbXTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBxdWVyaWVzID0gcXVlcmllcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0oKS5zdGF0dXMgPT09IFwicGVuZGluZ1wiKTtcbiAgfVxuICBmdW5jdGlvbiBxdWVyeShwYXlsb2FkLCBxdWVyeUNhbGxiYWNrLCBkb25lQ2FsbGJhY2spIHtcbiAgICBjb25zdCBxdWVyeTIgPSBzZW5kUXVlcnkoXG4gICAgICBjb25maWcsXG4gICAgICBwYXlsb2FkLFxuICAgICAgcXVlcnlDYWxsYmFjayxcbiAgICAgIChkYXRhLCBlcnJvcikgPT4ge1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIGlmIChkb25lQ2FsbGJhY2spIHtcbiAgICAgICAgICBkb25lQ2FsbGJhY2soZGF0YSwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICBxdWVyaWVzLnB1c2gocXVlcnkyKTtcbiAgICByZXR1cm4gcXVlcnkyO1xuICB9XG4gIGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gcXVlcmllcy5maW5kKCh2YWx1ZSkgPT4ge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICB9KSB8fCBudWxsO1xuICB9XG4gIGNvbnN0IGluc3RhbmNlID0ge1xuICAgIHF1ZXJ5LFxuICAgIGZpbmQsXG4gICAgc2V0SW5kZXg6IChpbmRleCkgPT4ge1xuICAgICAgY29uZmlnLmluZGV4ID0gaW5kZXg7XG4gICAgfSxcbiAgICBnZXRJbmRleDogKCkgPT4gY29uZmlnLmluZGV4LFxuICAgIGNsZWFudXBcbiAgfTtcbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBlbXB0eUNhbGxiYWNrJDEoKSB7XG59XG5jb25zdCByZWR1bmRhbmN5Q2FjaGUgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmZ1bmN0aW9uIGdldFJlZHVuZGFuY3lDYWNoZShwcm92aWRlcikge1xuICBpZiAoIXJlZHVuZGFuY3lDYWNoZVtwcm92aWRlcl0pIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRBUElDb25maWcocHJvdmlkZXIpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlZHVuZGFuY3kgPSBpbml0UmVkdW5kYW5jeShjb25maWcpO1xuICAgIGNvbnN0IGNhY2hlZFJldW5kYW5jeSA9IHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIHJlZHVuZGFuY3lcbiAgICB9O1xuICAgIHJlZHVuZGFuY3lDYWNoZVtwcm92aWRlcl0gPSBjYWNoZWRSZXVuZGFuY3k7XG4gIH1cbiAgcmV0dXJuIHJlZHVuZGFuY3lDYWNoZVtwcm92aWRlcl07XG59XG5mdW5jdGlvbiBzZW5kQVBJUXVlcnkodGFyZ2V0LCBxdWVyeSwgY2FsbGJhY2spIHtcbiAgbGV0IHJlZHVuZGFuY3k7XG4gIGxldCBzZW5kO1xuICBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IGFwaSA9IGdldEFQSU1vZHVsZSh0YXJnZXQpO1xuICAgIGlmICghYXBpKSB7XG4gICAgICBjYWxsYmFjayh2b2lkIDAsIDQyNCk7XG4gICAgICByZXR1cm4gZW1wdHlDYWxsYmFjayQxO1xuICAgIH1cbiAgICBzZW5kID0gYXBpLnNlbmQ7XG4gICAgY29uc3QgY2FjaGVkID0gZ2V0UmVkdW5kYW5jeUNhY2hlKHRhcmdldCk7XG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcmVkdW5kYW5jeSA9IGNhY2hlZC5yZWR1bmRhbmN5O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjb25maWcgPSBjcmVhdGVBUElDb25maWcodGFyZ2V0KTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICByZWR1bmRhbmN5ID0gaW5pdFJlZHVuZGFuY3koY29uZmlnKTtcbiAgICAgIGNvbnN0IG1vZHVsZUtleSA9IHRhcmdldC5yZXNvdXJjZXMgPyB0YXJnZXQucmVzb3VyY2VzWzBdIDogXCJcIjtcbiAgICAgIGNvbnN0IGFwaSA9IGdldEFQSU1vZHVsZShtb2R1bGVLZXkpO1xuICAgICAgaWYgKGFwaSkge1xuICAgICAgICBzZW5kID0gYXBpLnNlbmQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghcmVkdW5kYW5jeSB8fCAhc2VuZCkge1xuICAgIGNhbGxiYWNrKHZvaWQgMCwgNDI0KTtcbiAgICByZXR1cm4gZW1wdHlDYWxsYmFjayQxO1xuICB9XG4gIHJldHVybiByZWR1bmRhbmN5LnF1ZXJ5KHF1ZXJ5LCBzZW5kLCBjYWxsYmFjaykoKS5hYm9ydDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTGFzdE1vZGlmaWVkKHN0b3JhZ2UsIGxhc3RNb2RpZmllZCkge1xuICBjb25zdCBsYXN0VmFsdWUgPSBzdG9yYWdlLmxhc3RNb2RpZmllZENhY2hlZDtcbiAgaWYgKFxuICAgIC8vIE1hdGNoZXMgb3IgbmV3ZXJcbiAgICBsYXN0VmFsdWUgJiYgbGFzdFZhbHVlID49IGxhc3RNb2RpZmllZFxuICApIHtcbiAgICByZXR1cm4gbGFzdFZhbHVlID09PSBsYXN0TW9kaWZpZWQ7XG4gIH1cbiAgc3RvcmFnZS5sYXN0TW9kaWZpZWRDYWNoZWQgPSBsYXN0TW9kaWZpZWQ7XG4gIGlmIChsYXN0VmFsdWUpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBicm93c2VyU3RvcmFnZUNvbmZpZykge1xuICAgICAgaXRlcmF0ZUJyb3dzZXJTdG9yYWdlKGtleSwgKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgaWNvblNldCA9IGl0ZW0uZGF0YTtcbiAgICAgICAgcmV0dXJuIGl0ZW0ucHJvdmlkZXIgIT09IHN0b3JhZ2UucHJvdmlkZXIgfHwgaWNvblNldC5wcmVmaXggIT09IHN0b3JhZ2UucHJlZml4IHx8IGljb25TZXQubGFzdE1vZGlmaWVkID09PSBsYXN0TW9kaWZpZWQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBzdG9yZUluQnJvd3NlclN0b3JhZ2Uoc3RvcmFnZSwgZGF0YSkge1xuICBpZiAoIWJyb3dzZXJTdG9yYWdlU3RhdHVzKSB7XG4gICAgaW5pdEJyb3dzZXJTdG9yYWdlKCk7XG4gIH1cbiAgZnVuY3Rpb24gc3RvcmUoa2V5KSB7XG4gICAgbGV0IGZ1bmM7XG4gICAgaWYgKCFicm93c2VyU3RvcmFnZUNvbmZpZ1trZXldIHx8ICEoZnVuYyA9IGdldEJyb3dzZXJTdG9yYWdlKGtleSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNldCA9IGJyb3dzZXJTdG9yYWdlRW1wdHlJdGVtc1trZXldO1xuICAgIGxldCBpbmRleDtcbiAgICBpZiAoc2V0LnNpemUpIHtcbiAgICAgIHNldC5kZWxldGUoaW5kZXggPSBBcnJheS5mcm9tKHNldCkuc2hpZnQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4ID0gZ2V0QnJvd3NlclN0b3JhZ2VJdGVtc0NvdW50KGZ1bmMpO1xuICAgICAgaWYgKCFzZXRCcm93c2VyU3RvcmFnZUl0ZW1zQ291bnQoZnVuYywgaW5kZXggKyAxKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICBjYWNoZWQ6IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIGJyb3dzZXJTdG9yYWdlSG91ciksXG4gICAgICBwcm92aWRlcjogc3RvcmFnZS5wcm92aWRlcixcbiAgICAgIGRhdGFcbiAgICB9O1xuICAgIHJldHVybiBzZXRTdG9yZWRJdGVtKFxuICAgICAgZnVuYyxcbiAgICAgIGJyb3dzZXJDYWNoZVByZWZpeCArIGluZGV4LnRvU3RyaW5nKCksXG4gICAgICBKU09OLnN0cmluZ2lmeShpdGVtKVxuICAgICk7XG4gIH1cbiAgaWYgKGRhdGEubGFzdE1vZGlmaWVkICYmICF1cGRhdGVMYXN0TW9kaWZpZWQoc3RvcmFnZSwgZGF0YS5sYXN0TW9kaWZpZWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghT2JqZWN0LmtleXMoZGF0YS5pY29ucykubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChkYXRhLm5vdF9mb3VuZCkge1xuICAgIGRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhKTtcbiAgICBkZWxldGUgZGF0YS5ub3RfZm91bmQ7XG4gIH1cbiAgaWYgKCFzdG9yZShcImxvY2FsXCIpKSB7XG4gICAgc3RvcmUoXCJzZXNzaW9uXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtcHR5Q2FsbGJhY2soKSB7XG59XG5mdW5jdGlvbiBsb2FkZWROZXdJY29ucyhzdG9yYWdlKSB7XG4gIGlmICghc3RvcmFnZS5pY29uc0xvYWRlckZsYWcpIHtcbiAgICBzdG9yYWdlLmljb25zTG9hZGVyRmxhZyA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzdG9yYWdlLmljb25zTG9hZGVyRmxhZyA9IGZhbHNlO1xuICAgICAgdXBkYXRlQ2FsbGJhY2tzKHN0b3JhZ2UpO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBsb2FkTmV3SWNvbnMoc3RvcmFnZSwgaWNvbnMpIHtcbiAgaWYgKCFzdG9yYWdlLmljb25zVG9Mb2FkKSB7XG4gICAgc3RvcmFnZS5pY29uc1RvTG9hZCA9IGljb25zO1xuICB9IGVsc2Uge1xuICAgIHN0b3JhZ2UuaWNvbnNUb0xvYWQgPSBzdG9yYWdlLmljb25zVG9Mb2FkLmNvbmNhdChpY29ucykuc29ydCgpO1xuICB9XG4gIGlmICghc3RvcmFnZS5pY29uc1F1ZXVlRmxhZykge1xuICAgIHN0b3JhZ2UuaWNvbnNRdWV1ZUZsYWcgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3RvcmFnZS5pY29uc1F1ZXVlRmxhZyA9IGZhbHNlO1xuICAgICAgY29uc3QgeyBwcm92aWRlciwgcHJlZml4IH0gPSBzdG9yYWdlO1xuICAgICAgY29uc3QgaWNvbnMyID0gc3RvcmFnZS5pY29uc1RvTG9hZDtcbiAgICAgIGRlbGV0ZSBzdG9yYWdlLmljb25zVG9Mb2FkO1xuICAgICAgbGV0IGFwaTtcbiAgICAgIGlmICghaWNvbnMyIHx8ICEoYXBpID0gZ2V0QVBJTW9kdWxlKHByb3ZpZGVyKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFyYW1zID0gYXBpLnByZXBhcmUocHJvdmlkZXIsIHByZWZpeCwgaWNvbnMyKTtcbiAgICAgIHBhcmFtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIHNlbmRBUElRdWVyeShwcm92aWRlciwgaXRlbSwgKGRhdGEpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGl0ZW0uaWNvbnMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICBzdG9yYWdlLm1pc3NpbmcuYWRkKG5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IGFkZEljb25TZXQoXG4gICAgICAgICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICAgICAgICBkYXRhXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmICghcGFyc2VkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBwZW5kaW5nID0gc3RvcmFnZS5wZW5kaW5nSWNvbnM7XG4gICAgICAgICAgICAgIGlmIChwZW5kaW5nKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgIHBlbmRpbmcuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0b3JlSW5Ccm93c2VyU3RvcmFnZShzdG9yYWdlLCBkYXRhKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvYWRlZE5ld0ljb25zKHN0b3JhZ2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5jb25zdCBpc1BlbmRpbmcgPSAoaWNvbikgPT4ge1xuICBjb25zdCBzdG9yYWdlID0gZ2V0U3RvcmFnZShcbiAgICBpY29uLnByb3ZpZGVyLFxuICAgIGljb24ucHJlZml4XG4gICk7XG4gIGNvbnN0IHBlbmRpbmcgPSBzdG9yYWdlLnBlbmRpbmdJY29ucztcbiAgcmV0dXJuICEhKHBlbmRpbmcgJiYgcGVuZGluZy5oYXMoaWNvbi5uYW1lKSk7XG59O1xuY29uc3QgbG9hZEljb25zID0gKGljb25zLCBjYWxsYmFjaykgPT4ge1xuICBjb25zdCBjbGVhbmVkSWNvbnMgPSBsaXN0VG9JY29ucyhpY29ucywgdHJ1ZSwgYWxsb3dTaW1wbGVOYW1lcygpKTtcbiAgY29uc3Qgc29ydGVkSWNvbnMgPSBzb3J0SWNvbnMoY2xlYW5lZEljb25zKTtcbiAgaWYgKCFzb3J0ZWRJY29ucy5wZW5kaW5nLmxlbmd0aCkge1xuICAgIGxldCBjYWxsQ2FsbGJhY2sgPSB0cnVlO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChjYWxsQ2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjayhcbiAgICAgICAgICAgIHNvcnRlZEljb25zLmxvYWRlZCxcbiAgICAgICAgICAgIHNvcnRlZEljb25zLm1pc3NpbmcsXG4gICAgICAgICAgICBzb3J0ZWRJY29ucy5wZW5kaW5nLFxuICAgICAgICAgICAgZW1wdHlDYWxsYmFja1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2FsbENhbGxiYWNrID0gZmFsc2U7XG4gICAgfTtcbiAgfVxuICBjb25zdCBuZXdJY29ucyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCBzb3VyY2VzID0gW107XG4gIGxldCBsYXN0UHJvdmlkZXIsIGxhc3RQcmVmaXg7XG4gIHNvcnRlZEljb25zLnBlbmRpbmcuZm9yRWFjaCgoaWNvbikgPT4ge1xuICAgIGNvbnN0IHsgcHJvdmlkZXIsIHByZWZpeCB9ID0gaWNvbjtcbiAgICBpZiAocHJlZml4ID09PSBsYXN0UHJlZml4ICYmIHByb3ZpZGVyID09PSBsYXN0UHJvdmlkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGFzdFByb3ZpZGVyID0gcHJvdmlkZXI7XG4gICAgbGFzdFByZWZpeCA9IHByZWZpeDtcbiAgICBzb3VyY2VzLnB1c2goZ2V0U3RvcmFnZShwcm92aWRlciwgcHJlZml4KSk7XG4gICAgY29uc3QgcHJvdmlkZXJOZXdJY29ucyA9IG5ld0ljb25zW3Byb3ZpZGVyXSB8fCAobmV3SWNvbnNbcHJvdmlkZXJdID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICAgIGlmICghcHJvdmlkZXJOZXdJY29uc1twcmVmaXhdKSB7XG4gICAgICBwcm92aWRlck5ld0ljb25zW3ByZWZpeF0gPSBbXTtcbiAgICB9XG4gIH0pO1xuICBzb3J0ZWRJY29ucy5wZW5kaW5nLmZvckVhY2goKGljb24pID0+IHtcbiAgICBjb25zdCB7IHByb3ZpZGVyLCBwcmVmaXgsIG5hbWUgfSA9IGljb247XG4gICAgY29uc3Qgc3RvcmFnZSA9IGdldFN0b3JhZ2UocHJvdmlkZXIsIHByZWZpeCk7XG4gICAgY29uc3QgcGVuZGluZ1F1ZXVlID0gc3RvcmFnZS5wZW5kaW5nSWNvbnMgfHwgKHN0b3JhZ2UucGVuZGluZ0ljb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG4gICAgaWYgKCFwZW5kaW5nUXVldWUuaGFzKG5hbWUpKSB7XG4gICAgICBwZW5kaW5nUXVldWUuYWRkKG5hbWUpO1xuICAgICAgbmV3SWNvbnNbcHJvdmlkZXJdW3ByZWZpeF0ucHVzaChuYW1lKTtcbiAgICB9XG4gIH0pO1xuICBzb3VyY2VzLmZvckVhY2goKHN0b3JhZ2UpID0+IHtcbiAgICBjb25zdCB7IHByb3ZpZGVyLCBwcmVmaXggfSA9IHN0b3JhZ2U7XG4gICAgaWYgKG5ld0ljb25zW3Byb3ZpZGVyXVtwcmVmaXhdLmxlbmd0aCkge1xuICAgICAgbG9hZE5ld0ljb25zKHN0b3JhZ2UsIG5ld0ljb25zW3Byb3ZpZGVyXVtwcmVmaXhdKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2FsbGJhY2sgPyBzdG9yZUNhbGxiYWNrKGNhbGxiYWNrLCBzb3J0ZWRJY29ucywgc291cmNlcykgOiBlbXB0eUNhbGxiYWNrO1xufTtcbmNvbnN0IGxvYWRJY29uID0gKGljb24pID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChmdWxmaWxsLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBpY29uT2JqID0gdHlwZW9mIGljb24gPT09IFwic3RyaW5nXCIgPyBzdHJpbmdUb0ljb24oaWNvbiwgdHJ1ZSkgOiBpY29uO1xuICAgIGlmICghaWNvbk9iaikge1xuICAgICAgcmVqZWN0KGljb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2FkSWNvbnMoW2ljb25PYmogfHwgaWNvbl0sIChsb2FkZWQpID0+IHtcbiAgICAgIGlmIChsb2FkZWQubGVuZ3RoICYmIGljb25PYmopIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGdldEljb25EYXRhKGljb25PYmopO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGZ1bGZpbGwoe1xuICAgICAgICAgICAgLi4uZGVmYXVsdEljb25Qcm9wcyxcbiAgICAgICAgICAgIC4uLmRhdGFcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlamVjdChpY29uKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBtZXJnZUN1c3RvbWlzYXRpb25zKGRlZmF1bHRzLCBpdGVtKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAuLi5kZWZhdWx0c1xuICB9O1xuICBmb3IgKGNvbnN0IGtleSBpbiBpdGVtKSB7XG4gICAgY29uc3QgdmFsdWUgPSBpdGVtW2tleV07XG4gICAgY29uc3QgdmFsdWVUeXBlID0gdHlwZW9mIHZhbHVlO1xuICAgIGlmIChrZXkgaW4gZGVmYXVsdEljb25TaXplQ3VzdG9taXNhdGlvbnMpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSAmJiAodmFsdWVUeXBlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlVHlwZSA9PT0gXCJudW1iZXJcIikpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PT0gdHlwZW9mIHJlc3VsdFtrZXldKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGtleSA9PT0gXCJyb3RhdGVcIiA/IHZhbHVlICUgNCA6IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5jb25zdCBkZWZhdWx0RXh0ZW5kZWRJY29uQ3VzdG9taXNhdGlvbnMgPSB7XG4gICAgLi4uZGVmYXVsdEljb25DdXN0b21pc2F0aW9ucyxcbiAgICBpbmxpbmU6IGZhbHNlLFxufTtcbi8qKlxuICogQ2xhc3MgbmFtZXNcbiAqL1xuY29uc3QgYmxvY2tDbGFzcyA9ICdpY29uaWZ5JztcbmNvbnN0IGlubGluZUNsYXNzID0gJ2ljb25pZnktaW5saW5lJztcbi8qKlxuICogTmFtZXMgb2YgcHJvcGVydGllcyB0byBhZGQgdG8gbm9kZXNcbiAqL1xuY29uc3QgZWxlbWVudERhdGFQcm9wZXJ0eSA9ICgnaWNvbmlmeURhdGEnICsgRGF0ZS5ub3coKSk7XG5cbi8qKlxuICogTGlzdCBvZiByb290IG5vZGVzXG4gKi9cbmxldCBub2RlcyA9IFtdO1xuLyoqXG4gKiBGaW5kIG5vZGVcbiAqL1xuZnVuY3Rpb24gZmluZFJvb3ROb2RlKG5vZGUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBub2Rlc1tpXTtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHR5cGVvZiBpdGVtLm5vZGUgPT09ICdmdW5jdGlvbicgPyBpdGVtLm5vZGUoKSA6IGl0ZW0ubm9kZTtcbiAgICAgICAgaWYgKHJvb3QgPT09IG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBBZGQgZXh0cmEgcm9vdCBub2RlXG4gKi9cbmZ1bmN0aW9uIGFkZFJvb3ROb2RlKHJvb3QsIGF1dG9SZW1vdmUgPSBmYWxzZSkge1xuICAgIGxldCBub2RlID0gZmluZFJvb3ROb2RlKHJvb3QpO1xuICAgIGlmIChub2RlKSB7XG4gICAgICAgIC8vIE5vZGUgYWxyZWFkeSBleGlzdDogc3dpdGNoIHR5cGUgaWYgbmVlZGVkXG4gICAgICAgIGlmIChub2RlLnRlbXBvcmFyeSkge1xuICAgICAgICAgICAgbm9kZS50ZW1wb3JhcnkgPSBhdXRvUmVtb3ZlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICAvLyBDcmVhdGUgaXRlbSwgYWRkIGl0IHRvIGxpc3RcbiAgICBub2RlID0ge1xuICAgICAgICBub2RlOiByb290LFxuICAgICAgICB0ZW1wb3Jhcnk6IGF1dG9SZW1vdmUsXG4gICAgfTtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgIHJldHVybiBub2RlO1xufVxuLyoqXG4gKiBBZGQgZG9jdW1lbnQuYm9keSBub2RlXG4gKi9cbmZ1bmN0aW9uIGFkZEJvZHlOb2RlKCkge1xuICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGFkZFJvb3ROb2RlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICAgIG5vZGVzLnB1c2goe1xuICAgICAgICBub2RlOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuLyoqXG4gKiBSZW1vdmUgcm9vdCBub2RlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZVJvb3ROb2RlKHJvb3QpIHtcbiAgICBub2RlcyA9IG5vZGVzLmZpbHRlcigobm9kZSkgPT4gcm9vdCAhPT0gbm9kZSAmJlxuICAgICAgICByb290ICE9PSAodHlwZW9mIG5vZGUubm9kZSA9PT0gJ2Z1bmN0aW9uJyA/IG5vZGUubm9kZSgpIDogbm9kZS5ub2RlKSk7XG59XG4vKipcbiAqIEdldCBsaXN0IG9mIHJvb3Qgbm9kZXNcbiAqL1xuZnVuY3Rpb24gbGlzdFJvb3ROb2RlcygpIHtcbiAgICByZXR1cm4gbm9kZXM7XG59XG5cbi8qKlxuICogRXhlY3V0ZSBmdW5jdGlvbiB3aGVuIERPTSBpcyByZWFkeVxuICovXG5mdW5jdGlvbiBvblJlYWR5KGNhbGxiYWNrKSB7XG4gICAgY29uc3QgZG9jID0gZG9jdW1lbnQ7XG4gICAgaWYgKGRvYy5yZWFkeVN0YXRlICYmIGRvYy5yZWFkeVN0YXRlICE9PSAnbG9hZGluZycpIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgY2FsbGJhY2spO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDYWxsYmFja1xuICovXG5sZXQgY2FsbGJhY2sgPSBudWxsO1xuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBtdXRhdGlvbiBvYnNlcnZlclxuICovXG5jb25zdCBvYnNlcnZlclBhcmFtcyA9IHtcbiAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgc3VidHJlZTogdHJ1ZSxcbiAgICBhdHRyaWJ1dGVzOiB0cnVlLFxufTtcbi8qKlxuICogUXVldWUgRE9NIHNjYW5cbiAqL1xuZnVuY3Rpb24gcXVldWVTY2FuKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUub2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvYnNlcnZlciA9IG5vZGUub2JzZXJ2ZXI7XG4gICAgaWYgKCFvYnNlcnZlci5wZW5kaW5nU2Nhbikge1xuICAgICAgICBvYnNlcnZlci5wZW5kaW5nU2NhbiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIG9ic2VydmVyLnBlbmRpbmdTY2FuO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8qKlxuICogQ2hlY2sgbXV0YXRpb25zIGZvciBhZGRlZCBub2Rlc1xuICovXG5mdW5jdGlvbiBjaGVja011dGF0aW9ucyhub2RlLCBtdXRhdGlvbnMpIHtcbiAgICBpZiAoIW5vZGUub2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvYnNlcnZlciA9IG5vZGUub2JzZXJ2ZXI7XG4gICAgaWYgKCFvYnNlcnZlci5wZW5kaW5nU2Nhbikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG11dGF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IG11dGF0aW9uc1tpXTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBhZGRlZCBub2Rlc1xuICAgICAgICAgICAgKGl0ZW0uYWRkZWROb2RlcyAmJiBpdGVtLmFkZGVkTm9kZXMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgaWNvbiBvciBwbGFjZWhvbGRlciB3aXRoIG1vZGlmaWVkIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAoaXRlbS50eXBlID09PSAnYXR0cmlidXRlcycgJiZcbiAgICAgICAgICAgICAgICAgICAgaXRlbS50YXJnZXRbZWxlbWVudERhdGFQcm9wZXJ0eV0gIT09XG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDApKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFvYnNlcnZlci5wYXVzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcXVldWVTY2FuKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFN0YXJ0L3Jlc3VtZSBvYnNlcnZlclxuICovXG5mdW5jdGlvbiBjb250aW51ZU9ic2VydmluZyhub2RlLCByb290KSB7XG4gICAgbm9kZS5vYnNlcnZlci5pbnN0YW5jZS5vYnNlcnZlKHJvb3QsIG9ic2VydmVyUGFyYW1zKTtcbn1cbi8qKlxuICogU3RhcnQgbXV0YXRpb24gb2JzZXJ2ZXJcbiAqL1xuZnVuY3Rpb24gc3RhcnRPYnNlcnZlcihub2RlKSB7XG4gICAgbGV0IG9ic2VydmVyID0gbm9kZS5vYnNlcnZlcjtcbiAgICBpZiAob2JzZXJ2ZXIgJiYgb2JzZXJ2ZXIuaW5zdGFuY2UpIHtcbiAgICAgICAgLy8gQWxyZWFkeSBzdGFydGVkXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgcm9vdCA9IHR5cGVvZiBub2RlLm5vZGUgPT09ICdmdW5jdGlvbicgPyBub2RlLm5vZGUoKSA6IG5vZGUubm9kZTtcbiAgICBpZiAoIXJvb3QgfHwgIXdpbmRvdykge1xuICAgICAgICAvLyBkb2N1bWVudC5ib2R5IGlzIG5vdCBhdmFpbGFibGUgeWV0IG9yIHdpbmRvdyBpcyBtaXNzaW5nXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlciA9IHtcbiAgICAgICAgICAgIHBhdXNlZDogMCxcbiAgICAgICAgfTtcbiAgICAgICAgbm9kZS5vYnNlcnZlciA9IG9ic2VydmVyO1xuICAgIH1cbiAgICAvLyBDcmVhdGUgbmV3IGluc3RhbmNlLCBvYnNlcnZlXG4gICAgb2JzZXJ2ZXIuaW5zdGFuY2UgPSBuZXcgd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIoY2hlY2tNdXRhdGlvbnMuYmluZChudWxsLCBub2RlKSk7XG4gICAgY29udGludWVPYnNlcnZpbmcobm9kZSwgcm9vdCk7XG4gICAgLy8gU2NhbiBpbW1lZGlhdGVseVxuICAgIGlmICghb2JzZXJ2ZXIucGF1c2VkKSB7XG4gICAgICAgIHF1ZXVlU2Nhbihub2RlKTtcbiAgICB9XG59XG4vKipcbiAqIFN0YXJ0IGFsbCBvYnNlcnZlcnNcbiAqL1xuZnVuY3Rpb24gc3RhcnRPYnNlcnZlcnMoKSB7XG4gICAgbGlzdFJvb3ROb2RlcygpLmZvckVhY2goc3RhcnRPYnNlcnZlcik7XG59XG4vKipcbiAqIFN0b3Agb2JzZXJ2ZXJcbiAqL1xuZnVuY3Rpb24gc3RvcE9ic2VydmVyKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUub2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvYnNlcnZlciA9IG5vZGUub2JzZXJ2ZXI7XG4gICAgLy8gU3RvcCBzY2FuXG4gICAgaWYgKG9ic2VydmVyLnBlbmRpbmdTY2FuKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChvYnNlcnZlci5wZW5kaW5nU2Nhbik7XG4gICAgICAgIGRlbGV0ZSBvYnNlcnZlci5wZW5kaW5nU2NhbjtcbiAgICB9XG4gICAgLy8gRGlzY29ubmVjdCBvYnNlcnZlclxuICAgIGlmIChvYnNlcnZlci5pbnN0YW5jZSkge1xuICAgICAgICBvYnNlcnZlci5pbnN0YW5jZS5kaXNjb25uZWN0KCk7XG4gICAgICAgIGRlbGV0ZSBvYnNlcnZlci5pbnN0YW5jZTtcbiAgICB9XG59XG4vKipcbiAqIFN0YXJ0IG9ic2VydmVyIHdoZW4gRE9NIGlzIHJlYWR5XG4gKi9cbmZ1bmN0aW9uIGluaXRPYnNlcnZlcihjYikge1xuICAgIGNvbnN0IGlzUmVzdGFydCA9IGNhbGxiYWNrICE9PSBudWxsO1xuICAgIGlmIChjYWxsYmFjayAhPT0gY2IpIHtcbiAgICAgICAgLy8gQ2hhbmdlIGNhbGxiYWNrIGFuZCBzdG9wIGFsbCBwZW5kaW5nIG9ic2VydmVyc1xuICAgICAgICBjYWxsYmFjayA9IGNiO1xuICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgICBsaXN0Um9vdE5vZGVzKCkuZm9yRWFjaChzdG9wT2JzZXJ2ZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgLy8gUmVzdGFydCBpbnN0YW5jZXNcbiAgICAgICAgc3RhcnRPYnNlcnZlcnMoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBTdGFydCBvYnNlcnZlcnMgd2hlbiBkb2N1bWVudCBpcyByZWFkeVxuICAgIG9uUmVhZHkoc3RhcnRPYnNlcnZlcnMpO1xufVxuLyoqXG4gKiBQYXVzZSBvYnNlcnZpbmcgbm9kZVxuICovXG5mdW5jdGlvbiBwYXVzZU9ic2VydmluZ05vZGUobm9kZSkge1xuICAgIChub2RlID8gW25vZGVdIDogbGlzdFJvb3ROb2RlcygpKS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIGlmICghbm9kZS5vYnNlcnZlcikge1xuICAgICAgICAgICAgbm9kZS5vYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICBwYXVzZWQ6IDEsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbm9kZS5vYnNlcnZlcjtcbiAgICAgICAgb2JzZXJ2ZXIucGF1c2VkKys7XG4gICAgICAgIGlmIChvYnNlcnZlci5wYXVzZWQgPiAxIHx8ICFvYnNlcnZlci5pbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIERpc2Nvbm5lY3Qgb2JzZXJ2ZXJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBvYnNlcnZlci5pbnN0YW5jZTtcbiAgICAgICAgLy8gY2hlY2tNdXRhdGlvbnMobm9kZSwgaW5zdGFuY2UudGFrZVJlY29yZHMoKSk7XG4gICAgICAgIGluc3RhbmNlLmRpc2Nvbm5lY3QoKTtcbiAgICB9KTtcbn1cbi8qKlxuICogUGF1c2Ugb2JzZXJ2ZXJcbiAqL1xuZnVuY3Rpb24gcGF1c2VPYnNlcnZlcihyb290KSB7XG4gICAgaWYgKHJvb3QpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGZpbmRSb290Tm9kZShyb290KTtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIHBhdXNlT2JzZXJ2aW5nTm9kZShub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcGF1c2VPYnNlcnZpbmdOb2RlKCk7XG4gICAgfVxufVxuLyoqXG4gKiBSZXN1bWUgb2JzZXJ2ZXJcbiAqL1xuZnVuY3Rpb24gcmVzdW1lT2JzZXJ2aW5nTm9kZShvYnNlcnZlcikge1xuICAgIChvYnNlcnZlciA/IFtvYnNlcnZlcl0gOiBsaXN0Um9vdE5vZGVzKCkpLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKCFub2RlLm9ic2VydmVyKSB7XG4gICAgICAgICAgICAvLyBTdGFydCBvYnNlcnZlclxuICAgICAgICAgICAgc3RhcnRPYnNlcnZlcihub2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5vZGUub2JzZXJ2ZXI7XG4gICAgICAgIGlmIChvYnNlcnZlci5wYXVzZWQpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLnBhdXNlZC0tO1xuICAgICAgICAgICAgaWYgKCFvYnNlcnZlci5wYXVzZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBTdGFydCAvIHJlc3VtZVxuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3QgPSB0eXBlb2Ygbm9kZS5ub2RlID09PSAnZnVuY3Rpb24nID8gbm9kZS5ub2RlKCkgOiBub2RlLm5vZGU7XG4gICAgICAgICAgICAgICAgaWYgKCFyb290KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAob2JzZXJ2ZXIuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWVPYnNlcnZpbmcobm9kZSwgcm9vdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGFydE9ic2VydmVyKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBSZXN1bWUgb2JzZXJ2ZXJcbiAqL1xuZnVuY3Rpb24gcmVzdW1lT2JzZXJ2ZXIocm9vdCkge1xuICAgIGlmIChyb290KSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBmaW5kUm9vdE5vZGUocm9vdCk7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICByZXN1bWVPYnNlcnZpbmdOb2RlKG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bWVPYnNlcnZpbmdOb2RlKCk7XG4gICAgfVxufVxuLyoqXG4gKiBPYnNlcnZlIG5vZGVcbiAqL1xuZnVuY3Rpb24gb2JzZXJ2ZShyb290LCBhdXRvUmVtb3ZlID0gZmFsc2UpIHtcbiAgICBjb25zdCBub2RlID0gYWRkUm9vdE5vZGUocm9vdCwgYXV0b1JlbW92ZSk7XG4gICAgc3RhcnRPYnNlcnZlcihub2RlKTtcbiAgICByZXR1cm4gbm9kZTtcbn1cbi8qKlxuICogUmVtb3ZlIG9ic2VydmVkIG5vZGVcbiAqL1xuZnVuY3Rpb24gc3RvcE9ic2VydmluZyhyb290KSB7XG4gICAgY29uc3Qgbm9kZSA9IGZpbmRSb290Tm9kZShyb290KTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgICBzdG9wT2JzZXJ2ZXIobm9kZSk7XG4gICAgICAgIHJlbW92ZVJvb3ROb2RlKHJvb3QpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDb21wYXJlIHByb3BzXG4gKi9cbmZ1bmN0aW9uIHByb3BzQ2hhbmdlZChwcm9wczEsIHByb3BzMikge1xuICAgIGlmIChwcm9wczEubmFtZSAhPT0gcHJvcHMyLm5hbWUgfHwgcHJvcHMxLm1vZGUgIT09IHByb3BzMi5tb2RlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBjdXN0b21pc2F0aW9uczEgPSBwcm9wczEuY3VzdG9taXNhdGlvbnM7XG4gICAgY29uc3QgY3VzdG9taXNhdGlvbnMyID0gcHJvcHMyLmN1c3RvbWlzYXRpb25zO1xuICAgIGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRFeHRlbmRlZEljb25DdXN0b21pc2F0aW9ucykge1xuICAgICAgICBpZiAoY3VzdG9taXNhdGlvbnMxW2tleV0gIT09IGN1c3RvbWlzYXRpb25zMltrZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJvdGF0ZUZyb21TdHJpbmcodmFsdWUsIGRlZmF1bHRWYWx1ZSA9IDApIHtcbiAgY29uc3QgdW5pdHMgPSB2YWx1ZS5yZXBsYWNlKC9eLT9bMC05Ll0qLywgXCJcIik7XG4gIGZ1bmN0aW9uIGNsZWFudXAodmFsdWUyKSB7XG4gICAgd2hpbGUgKHZhbHVlMiA8IDApIHtcbiAgICAgIHZhbHVlMiArPSA0O1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUyICUgNDtcbiAgfVxuICBpZiAodW5pdHMgPT09IFwiXCIpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgcmV0dXJuIGlzTmFOKG51bSkgPyAwIDogY2xlYW51cChudW0pO1xuICB9IGVsc2UgaWYgKHVuaXRzICE9PSB2YWx1ZSkge1xuICAgIGxldCBzcGxpdCA9IDA7XG4gICAgc3dpdGNoICh1bml0cykge1xuICAgICAgY2FzZSBcIiVcIjpcbiAgICAgICAgc3BsaXQgPSAyNTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGVnXCI6XG4gICAgICAgIHNwbGl0ID0gOTA7XG4gICAgfVxuICAgIGlmIChzcGxpdCkge1xuICAgICAgbGV0IG51bSA9IHBhcnNlRmxvYXQodmFsdWUuc2xpY2UoMCwgdmFsdWUubGVuZ3RoIC0gdW5pdHMubGVuZ3RoKSk7XG4gICAgICBpZiAoaXNOYU4obnVtKSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIG51bSA9IG51bSAvIHNwbGl0O1xuICAgICAgcmV0dXJuIG51bSAlIDEgPT09IDAgPyBjbGVhbnVwKG51bSkgOiAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVmYXVsdFZhbHVlO1xufVxuXG5jb25zdCBzZXBhcmF0b3IgPSAvW1xccyxdKy87XG5mdW5jdGlvbiBmbGlwRnJvbVN0cmluZyhjdXN0b20sIGZsaXApIHtcbiAgZmxpcC5zcGxpdChzZXBhcmF0b3IpLmZvckVhY2goKHN0cikgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gc3RyLnRyaW0oKTtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlIFwiaG9yaXpvbnRhbFwiOlxuICAgICAgICBjdXN0b20uaEZsaXAgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ2ZXJ0aWNhbFwiOlxuICAgICAgICBjdXN0b20udkZsaXAgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFNpemUgYXR0cmlidXRlc1xuICovXG5jb25zdCBzaXplQXR0cmlidXRlcyA9IFsnd2lkdGgnLCAnaGVpZ2h0J107XG4vKipcbiAqIEJvb2xlYW4gYXR0cmlidXRlc1xuICovXG5jb25zdCBib29sZWFuQXR0cmlidXRlcyA9IFtcbiAgICAnaW5saW5lJyxcbiAgICAnaEZsaXAnLFxuICAgICd2RmxpcCcsXG5dO1xuLyoqXG4gKiBHZXQgYXR0cmlidXRlIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGdldEJvb2xlYW5BdHRyaWJ1dGUodmFsdWUsIGtleSkge1xuICAgIGlmICh2YWx1ZSA9PT0ga2V5IHx8IHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogR2V0IGVsZW1lbnQgcHJvcGVydGllcyBmcm9tIEhUTUwgZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRFbGVtZW50UHJvcHMoZWxlbWVudCkge1xuICAgIC8vIEdldCBpY29uIG5hbWVcbiAgICBjb25zdCBuYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWNvbicpO1xuICAgIGNvbnN0IGljb24gPSB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgJiYgc3RyaW5nVG9JY29uKG5hbWUsIHRydWUpO1xuICAgIGlmICghaWNvbikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gR2V0IGRlZmF1bHRzIGFuZCBpbmxpbmVcbiAgICBjb25zdCBjdXN0b21pc2F0aW9ucyA9IHtcbiAgICAgICAgLi4uZGVmYXVsdEV4dGVuZGVkSWNvbkN1c3RvbWlzYXRpb25zLFxuICAgICAgICBpbmxpbmU6IGVsZW1lbnQuY2xhc3NMaXN0ICYmIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGlubGluZUNsYXNzKSxcbiAgICB9O1xuICAgIC8vIEdldCBkaW1lbnNpb25zXG4gICAgc2l6ZUF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLScgKyBhdHRyKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBjdXN0b21pc2F0aW9uc1thdHRyXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gR2V0IHJvdGF0aW9uXG4gICAgY29uc3Qgcm90YXRpb24gPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3RhdGUnKTtcbiAgICBpZiAodHlwZW9mIHJvdGF0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICBjdXN0b21pc2F0aW9ucy5yb3RhdGUgPSByb3RhdGVGcm9tU3RyaW5nKHJvdGF0aW9uKTtcbiAgICB9XG4gICAgLy8gR2V0IGZsaXAgc2hvcnRoYW5kXG4gICAgY29uc3QgZmxpcCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWZsaXAnKTtcbiAgICBpZiAodHlwZW9mIGZsaXAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGZsaXBGcm9tU3RyaW5nKGN1c3RvbWlzYXRpb25zLCBmbGlwKTtcbiAgICB9XG4gICAgLy8gQm9vbGVhbiBhdHRyaWJ1dGVzXG4gICAgYm9vbGVhbkF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSAnZGF0YS0nICsgYXR0cjtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRCb29sZWFuQXR0cmlidXRlKGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSksIGtleSk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgY3VzdG9taXNhdGlvbnNbYXR0cl0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEdldCByZW5kZXIgbW9kZS4gTm90IGNoZWNraW5nIGFjdHVhbCB2YWx1ZSBiZWNhdXNlIGluY29ycmVjdCB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMgaW5saW5lXG4gICAgY29uc3QgbW9kZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW1vZGUnKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBpY29uLFxuICAgICAgICBjdXN0b21pc2F0aW9ucyxcbiAgICAgICAgbW9kZSxcbiAgICB9O1xufVxuXG4vKipcbiAqIFNlbGVjdG9yIGNvbWJpbmluZyBjbGFzcyBuYW1lcyBhbmQgdGFnc1xuICovXG5jb25zdCBzZWxlY3RvciA9ICdzdmcuJyArXG4gICAgYmxvY2tDbGFzcyArXG4gICAgJywgaS4nICtcbiAgICBibG9ja0NsYXNzICtcbiAgICAnLCBzcGFuLicgK1xuICAgIGJsb2NrQ2xhc3MgK1xuICAgICcsIGkuJyArXG4gICAgaW5saW5lQ2xhc3MgK1xuICAgICcsIHNwYW4uJyArXG4gICAgaW5saW5lQ2xhc3M7XG4vKipcbiAqIEZpbmQgYWxsIHBhcmVudCBub2RlcyBpbiBET01cbiAqL1xuZnVuY3Rpb24gc2NhblJvb3ROb2RlKHJvb3QpIHtcbiAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAvLyBHZXQgcHJvcHMsIGlnbm9yZSBTVkcgcmVuZGVyZWQgb3V0c2lkZSBvZiBTVkcgZnJhbWV3b3JrXG4gICAgICAgIGNvbnN0IHByb3BzID0gbm9kZVtlbGVtZW50RGF0YVByb3BlcnR5XSB8fCBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ3N2ZydcbiAgICAgICAgICAgID8gZ2V0RWxlbWVudFByb3BzKG5vZGUpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGlmIChwcm9wcykge1xuICAgICAgICAgICAgbm9kZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vZGVzO1xufVxuXG5mdW5jdGlvbiBpY29uVG9IVE1MKGJvZHksIGF0dHJpYnV0ZXMpIHtcbiAgbGV0IHJlbmRlckF0dHJpYnNIVE1MID0gYm9keS5pbmRleE9mKFwieGxpbms6XCIpID09PSAtMSA/IFwiXCIgOiAnIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiJztcbiAgZm9yIChjb25zdCBhdHRyIGluIGF0dHJpYnV0ZXMpIHtcbiAgICByZW5kZXJBdHRyaWJzSFRNTCArPSBcIiBcIiArIGF0dHIgKyAnPVwiJyArIGF0dHJpYnV0ZXNbYXR0cl0gKyAnXCInO1xuICB9XG4gIHJldHVybiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCInICsgcmVuZGVyQXR0cmlic0hUTUwgKyBcIj5cIiArIGJvZHkgKyBcIjwvc3ZnPlwiO1xufVxuXG5sZXQgcG9saWN5O1xuZnVuY3Rpb24gY3JlYXRlUG9saWN5KCkge1xuICB0cnkge1xuICAgIHBvbGljeSA9IHdpbmRvdy50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KFwiaWNvbmlmeVwiLCB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgIGNyZWF0ZUhUTUw6IChzKSA9PiBzXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHBvbGljeSA9IG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIGNsZWFuVXBJbm5lckhUTUwoaHRtbCkge1xuICBpZiAocG9saWN5ID09PSB2b2lkIDApIHtcbiAgICBjcmVhdGVQb2xpY3koKTtcbiAgfVxuICByZXR1cm4gcG9saWN5ID8gcG9saWN5LmNyZWF0ZUhUTUwoaHRtbCkgOiBodG1sO1xufVxuXG4vKipcbiAqIEdldCBjbGFzc2VzIHRvIGFkZCBmcm9tIGljb24gbmFtZVxuICovXG5mdW5jdGlvbiBpY29uQ2xhc3NlcyhpY29uTmFtZSkge1xuICAgIGNvbnN0IGNsYXNzZXNUb0FkZCA9IG5ldyBTZXQoWydpY29uaWZ5J10pO1xuICAgIFsncHJvdmlkZXInLCAncHJlZml4J10uZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICBpZiAoaWNvbk5hbWVbYXR0cl0pIHtcbiAgICAgICAgICAgIGNsYXNzZXNUb0FkZC5hZGQoJ2ljb25pZnktLScgKyBpY29uTmFtZVthdHRyXSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xhc3Nlc1RvQWRkO1xufVxuLyoqXG4gKiBBZGQgY2xhc3NlcyB0byBTVkcsIHJlbW92aW5nIHByZXZpb3VzbHkgYWRkZWQgY2xhc3Nlcywga2VlcGluZyBjdXN0b20gY2xhc3Nlc1xuICovXG5mdW5jdGlvbiBhcHBseUNsYXNzZXMoc3ZnLCBjbGFzc2VzLCBwcmV2aW91c2x5QWRkZWRDbGFzc2VzLCBwbGFjZWhvbGRlcikge1xuICAgIGNvbnN0IHN2Z0NsYXNzZXMgPSBzdmcuY2xhc3NMaXN0O1xuICAgIC8vIENvcHkgY2xhc3NlcyBmcm9tIHBsYWNlaG9sZGVyXG4gICAgaWYgKHBsYWNlaG9sZGVyKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyQ2xhc3NlcyA9IHBsYWNlaG9sZGVyLmNsYXNzTGlzdDtcbiAgICAgICAgQXJyYXkuZnJvbShwbGFjZWhvbGRlckNsYXNzZXMpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHN2Z0NsYXNzZXMuYWRkKGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gQWRkIG5ldyBjbGFzc2VzXG4gICAgY29uc3QgYWRkZWRDbGFzc2VzID0gW107XG4gICAgY2xhc3Nlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICghc3ZnQ2xhc3Nlcy5jb250YWlucyhpdGVtKSkge1xuICAgICAgICAgICAgLy8gQWRkIG5ldyBjbGFzc1xuICAgICAgICAgICAgc3ZnQ2xhc3Nlcy5hZGQoaXRlbSk7XG4gICAgICAgICAgICBhZGRlZENsYXNzZXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmV2aW91c2x5QWRkZWRDbGFzc2VzLmhhcyhpdGVtKSkge1xuICAgICAgICAgICAgLy8gV2FzIGFkZGVkIGJlZm9yZToga2VlcCBpdFxuICAgICAgICAgICAgYWRkZWRDbGFzc2VzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBSZW1vdmUgcHJldmlvdXNseSBhZGRlZCBjbGFzc2VzXG4gICAgcHJldmlvdXNseUFkZGVkQ2xhc3Nlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICghY2xhc3Nlcy5oYXMoaXRlbSkpIHtcbiAgICAgICAgICAgIC8vIENsYXNzIHRoYXQgd2FzIGFkZGVkIGJlZm9yZSwgYnV0IG5vIGxvbmdlciBuZWVkZWRcbiAgICAgICAgICAgIHN2Z0NsYXNzZXMucmVtb3ZlKGl0ZW0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFkZGVkQ2xhc3Nlcztcbn1cblxuLyoqXG4gKiBDb3B5IG9sZCBzdHlsZXMsIGFwcGx5IG5ldyBzdHlsZXNcbiAqL1xuZnVuY3Rpb24gYXBwbHlTdHlsZShzdmcsIHN0eWxlcywgcHJldmlvdXNseUFkZGVkU3R5bGVzKSB7XG4gICAgY29uc3Qgc3ZnU3R5bGUgPSBzdmcuc3R5bGU7XG4gICAgLy8gUmVtb3ZlIHByZXZpb3VzbHkgYWRkZWQgc3R5bGVzXG4gICAgKHByZXZpb3VzbHlBZGRlZFN0eWxlcyB8fCBbXSkuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICBzdmdTdHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wKTtcbiAgICB9KTtcbiAgICAvLyBBcHBseSBuZXcgc3R5bGVzLCBpZ25vcmluZyBzdHlsZXMgdGhhdCBhbHJlYWR5IGV4aXN0XG4gICAgY29uc3QgYXBwbGllZFN0eWxlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiBzdHlsZXMpIHtcbiAgICAgICAgaWYgKCFzdmdTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApKSB7XG4gICAgICAgICAgICBhcHBsaWVkU3R5bGVzLnB1c2gocHJvcCk7XG4gICAgICAgICAgICBzdmdTdHlsZS5zZXRQcm9wZXJ0eShwcm9wLCBzdHlsZXNbcHJvcF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcHBsaWVkU3R5bGVzO1xufVxuXG4vKipcbiAqIFJlbmRlciBpY29uIGFzIGlubGluZSBTVkdcbiAqL1xuZnVuY3Rpb24gcmVuZGVySW5saW5lU1ZHKGVsZW1lbnQsIHByb3BzLCBpY29uRGF0YSkge1xuICAgIC8vIENyZWF0ZSBwbGFjZWhvbGRlci4gV2h5IHBsYWNlaG9sZGVyPyBpbm5lckhUTUwgc2V0dGVyIG9uIFNWRyBkb2VzIG5vdCB3b3JrIGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICAgIGxldCBzcGFuO1xuICAgIHRyeSB7XG4gICAgICAgIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIC8vIEdlbmVyYXRlIGRhdGEgdG8gcmVuZGVyXG4gICAgY29uc3QgY3VzdG9taXNhdGlvbnMgPSBwcm9wcy5jdXN0b21pc2F0aW9ucztcbiAgICBjb25zdCByZW5kZXJEYXRhID0gaWNvblRvU1ZHKGljb25EYXRhLCBjdXN0b21pc2F0aW9ucyk7XG4gICAgLy8gR2V0IG9sZCBkYXRhXG4gICAgY29uc3Qgb2xkRGF0YSA9IGVsZW1lbnRbZWxlbWVudERhdGFQcm9wZXJ0eV07XG4gICAgLy8gR2VuZXJhdGUgU1ZHXG4gICAgY29uc3QgaHRtbCA9IGljb25Ub0hUTUwocmVwbGFjZUlEcyhyZW5kZXJEYXRhLmJvZHkpLCB7XG4gICAgICAgICdhcmlhLWhpZGRlbic6ICd0cnVlJyxcbiAgICAgICAgJ3JvbGUnOiAnaW1nJyxcbiAgICAgICAgLi4ucmVuZGVyRGF0YS5hdHRyaWJ1dGVzLFxuICAgIH0pO1xuICAgIHNwYW4uaW5uZXJIVE1MID0gY2xlYW5VcElubmVySFRNTChodG1sKTtcbiAgICAvLyBHZXQgU1ZHIGVsZW1lbnRcbiAgICBjb25zdCBzdmcgPSBzcGFuLmNoaWxkTm9kZXNbMF07XG4gICAgLy8gQWRkIGF0dHJpYnV0ZXNcbiAgICBjb25zdCBwbGFjZWhvbGRlckF0dHJpYnV0ZXMgPSBlbGVtZW50LmF0dHJpYnV0ZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFjZWhvbGRlckF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHBsYWNlaG9sZGVyQXR0cmlidXRlcy5pdGVtKGkpO1xuICAgICAgICBjb25zdCBuYW1lID0gaXRlbS5uYW1lO1xuICAgICAgICBpZiAobmFtZSAhPT0gJ2NsYXNzJyAmJiAhc3ZnLmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZShuYW1lLCBpdGVtLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBZGQgY2xhc3Nlc1xuICAgIGNvbnN0IGNsYXNzZXNUb0FkZCA9IGljb25DbGFzc2VzKHByb3BzLmljb24pO1xuICAgIGNvbnN0IGFkZGVkQ2xhc3NlcyA9IGFwcGx5Q2xhc3NlcyhzdmcsIGNsYXNzZXNUb0FkZCwgbmV3IFNldChvbGREYXRhICYmIG9sZERhdGEuYWRkZWRDbGFzc2VzKSwgZWxlbWVudCk7XG4gICAgLy8gVXBkYXRlIHN0eWxlXG4gICAgY29uc3QgYWRkZWRTdHlsZXMgPSBhcHBseVN0eWxlKHN2ZywgY3VzdG9taXNhdGlvbnMuaW5saW5lXG4gICAgICAgID8ge1xuICAgICAgICAgICAgJ3ZlcnRpY2FsLWFsaWduJzogJy0wLjEyNWVtJyxcbiAgICAgICAgfVxuICAgICAgICA6IHt9LCBvbGREYXRhICYmIG9sZERhdGEuYWRkZWRTdHlsZXMpO1xuICAgIC8vIEFkZCBkYXRhIHRvIGVsZW1lbnRcbiAgICBjb25zdCBuZXdEYXRhID0ge1xuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgc3RhdHVzOiAnbG9hZGVkJyxcbiAgICAgICAgYWRkZWRDbGFzc2VzLFxuICAgICAgICBhZGRlZFN0eWxlcyxcbiAgICB9O1xuICAgIHN2Z1tlbGVtZW50RGF0YVByb3BlcnR5XSA9IG5ld0RhdGE7XG4gICAgLy8gUmVwbGFjZSBvbGQgZWxlbWVudFxuICAgIGlmIChlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChzdmcsIGVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gc3ZnO1xufVxuXG5mdW5jdGlvbiBlbmNvZGVTVkdmb3JVUkwoc3ZnKSB7XG4gIHJldHVybiBzdmcucmVwbGFjZSgvXCIvZywgXCInXCIpLnJlcGxhY2UoLyUvZywgXCIlMjVcIikucmVwbGFjZSgvIy9nLCBcIiUyM1wiKS5yZXBsYWNlKC88L2csIFwiJTNDXCIpLnJlcGxhY2UoLz4vZywgXCIlM0VcIikucmVwbGFjZSgvXFxzKy9nLCBcIiBcIik7XG59XG5mdW5jdGlvbiBzdmdUb0RhdGEoc3ZnKSB7XG4gIHJldHVybiBcImRhdGE6aW1hZ2Uvc3ZnK3htbCxcIiArIGVuY29kZVNWR2ZvclVSTChzdmcpO1xufVxuZnVuY3Rpb24gc3ZnVG9VUkwoc3ZnKSB7XG4gIHJldHVybiAndXJsKFwiJyArIHN2Z1RvRGF0YShzdmcpICsgJ1wiKSc7XG59XG5cbmNvbnN0IGNvbW1vblByb3BzID0ge1xuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxufTtcbmNvbnN0IG1vbm90b25lUHJvcHMgPSB7XG4gICAgJ2JhY2tncm91bmQtY29sb3InOiAnY3VycmVudENvbG9yJyxcbn07XG5jb25zdCBjb2xvcmVkUHJvcHMgPSB7XG4gICAgJ2JhY2tncm91bmQtY29sb3InOiAndHJhbnNwYXJlbnQnLFxufTtcbi8vIER5bmFtaWNhbGx5IGFkZCBjb21tb24gcHJvcHMgdG8gdmFyaWFibGVzIGFib3ZlXG5jb25zdCBwcm9wc1RvQWRkID0ge1xuICAgIGltYWdlOiAndmFyKC0tc3ZnKScsXG4gICAgcmVwZWF0OiAnbm8tcmVwZWF0JyxcbiAgICBzaXplOiAnMTAwJSAxMDAlJyxcbn07XG5jb25zdCBwcm9wc1RvQWRkVG8gPSB7XG4gICAgJy13ZWJraXQtbWFzayc6IG1vbm90b25lUHJvcHMsXG4gICAgJ21hc2snOiBtb25vdG9uZVByb3BzLFxuICAgICdiYWNrZ3JvdW5kJzogY29sb3JlZFByb3BzLFxufTtcbmZvciAoY29uc3QgcHJlZml4IGluIHByb3BzVG9BZGRUbykge1xuICAgIGNvbnN0IGxpc3QgPSBwcm9wc1RvQWRkVG9bcHJlZml4XTtcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gcHJvcHNUb0FkZCkge1xuICAgICAgICBsaXN0W3ByZWZpeCArICctJyArIHByb3BdID0gcHJvcHNUb0FkZFtwcm9wXTtcbiAgICB9XG59XG4vKipcbiAqIEZpeCBzaXplOiBhZGQgJ3B4JyB0byBudW1iZXJzXG4gKi9cbmZ1bmN0aW9uIGZpeFNpemUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgKyAodmFsdWUubWF0Y2goL15bLTAtOS5dKyQvKSA/ICdweCcgOiAnJyk7XG59XG4vKipcbiAqIFJlbmRlciBpY29uIGFzIGlubGluZSBTVkdcbiAqL1xuZnVuY3Rpb24gcmVuZGVyQmFja2dyb3VuZChlbGVtZW50LCBwcm9wcywgaWNvbkRhdGEsIHVzZU1hc2spIHtcbiAgICAvLyBHZW5lcmF0ZSBkYXRhIHRvIHJlbmRlclxuICAgIGNvbnN0IGN1c3RvbWlzYXRpb25zID0gcHJvcHMuY3VzdG9taXNhdGlvbnM7XG4gICAgY29uc3QgcmVuZGVyRGF0YSA9IGljb25Ub1NWRyhpY29uRGF0YSwgY3VzdG9taXNhdGlvbnMpO1xuICAgIGNvbnN0IHJlbmRlckF0dHJpYnMgPSByZW5kZXJEYXRhLmF0dHJpYnV0ZXM7XG4gICAgLy8gR2V0IG9sZCBkYXRhXG4gICAgY29uc3Qgb2xkRGF0YSA9IGVsZW1lbnRbZWxlbWVudERhdGFQcm9wZXJ0eV07XG4gICAgLy8gR2VuZXJhdGUgU1ZHXG4gICAgY29uc3QgaHRtbCA9IGljb25Ub0hUTUwocmVuZGVyRGF0YS5ib2R5LCB7XG4gICAgICAgIC4uLnJlbmRlckF0dHJpYnMsXG4gICAgICAgIHdpZHRoOiBpY29uRGF0YS53aWR0aCArICcnLFxuICAgICAgICBoZWlnaHQ6IGljb25EYXRhLmhlaWdodCArICcnLFxuICAgIH0pO1xuICAgIC8vIEFkZCBjbGFzc2VzXG4gICAgY29uc3QgY2xhc3Nlc1RvQWRkID0gaWNvbkNsYXNzZXMocHJvcHMuaWNvbik7XG4gICAgY29uc3QgYWRkZWRDbGFzc2VzID0gYXBwbHlDbGFzc2VzKGVsZW1lbnQsIGNsYXNzZXNUb0FkZCwgbmV3IFNldChvbGREYXRhICYmIG9sZERhdGEuYWRkZWRDbGFzc2VzKSk7XG4gICAgLy8gVXBkYXRlIHN0eWxlXG4gICAgY29uc3QgdXJsID0gc3ZnVG9VUkwoaHRtbCk7XG4gICAgY29uc3QgbmV3U3R5bGVzID0ge1xuICAgICAgICAnLS1zdmcnOiB1cmwsXG4gICAgICAgICd3aWR0aCc6IGZpeFNpemUocmVuZGVyQXR0cmlicy53aWR0aCksXG4gICAgICAgICdoZWlnaHQnOiBmaXhTaXplKHJlbmRlckF0dHJpYnMuaGVpZ2h0KSxcbiAgICAgICAgLi4uY29tbW9uUHJvcHMsXG4gICAgICAgIC4uLih1c2VNYXNrID8gbW9ub3RvbmVQcm9wcyA6IGNvbG9yZWRQcm9wcyksXG4gICAgfTtcbiAgICBpZiAoY3VzdG9taXNhdGlvbnMuaW5saW5lKSB7XG4gICAgICAgIG5ld1N0eWxlc1sndmVydGljYWwtYWxpZ24nXSA9ICctMC4xMjVlbSc7XG4gICAgfVxuICAgIGNvbnN0IGFkZGVkU3R5bGVzID0gYXBwbHlTdHlsZShlbGVtZW50LCBuZXdTdHlsZXMsIG9sZERhdGEgJiYgb2xkRGF0YS5hZGRlZFN0eWxlcyk7XG4gICAgLy8gQWRkIGRhdGEgdG8gZWxlbWVudFxuICAgIGNvbnN0IG5ld0RhdGEgPSB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICBzdGF0dXM6ICdsb2FkZWQnLFxuICAgICAgICBhZGRlZENsYXNzZXMsXG4gICAgICAgIGFkZGVkU3R5bGVzLFxuICAgIH07XG4gICAgZWxlbWVudFtlbGVtZW50RGF0YVByb3BlcnR5XSA9IG5ld0RhdGE7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogRmxhZyB0byBhdm9pZCBzY2FubmluZyBET00gdG9vIG9mdGVuXG4gKi9cbmxldCBzY2FuUXVldWVkID0gZmFsc2U7XG4vKipcbiAqIEljb25zIGhhdmUgYmVlbiBsb2FkZWRcbiAqL1xuZnVuY3Rpb24gY2hlY2tQZW5kaW5nSWNvbnMoKSB7XG4gICAgaWYgKCFzY2FuUXVldWVkKSB7XG4gICAgICAgIHNjYW5RdWV1ZWQgPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY2FuUXVldWVkKSB7XG4gICAgICAgICAgICAgICAgc2NhblF1ZXVlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNjYW5ET00oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuLyoqXG4gKiBTY2FuIG5vZGUgZm9yIHBsYWNlaG9sZGVyc1xuICovXG5mdW5jdGlvbiBzY2FuRE9NKHJvb3ROb2RlLCBhZGRUZW1wTm9kZSA9IGZhbHNlKSB7XG4gICAgLy8gTGlzdCBvZiBpY29ucyB0byBsb2FkOiBbcHJvdmlkZXJdW3ByZWZpeF0gPSBTZXQ8bmFtZT5cbiAgICBjb25zdCBpY29uc1RvTG9hZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZnVuY3Rpb24gZ2V0SWNvbihpY29uLCBsb2FkKSB7XG4gICAgICAgIGNvbnN0IHsgcHJvdmlkZXIsIHByZWZpeCwgbmFtZSB9ID0gaWNvbjtcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IGdldFN0b3JhZ2UocHJvdmlkZXIsIHByZWZpeCk7XG4gICAgICAgIGNvbnN0IHN0b3JlZEljb24gPSBzdG9yYWdlLmljb25zW25hbWVdO1xuICAgICAgICBpZiAoc3RvcmVkSWNvbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdsb2FkZWQnLFxuICAgICAgICAgICAgICAgIGljb246IHN0b3JlZEljb24sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdG9yYWdlLm1pc3NpbmcuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogJ21pc3NpbmcnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9hZCAmJiAhaXNQZW5kaW5nKGljb24pKSB7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlckljb25zVG9Mb2FkID0gaWNvbnNUb0xvYWRbcHJvdmlkZXJdIHx8XG4gICAgICAgICAgICAgICAgKGljb25zVG9Mb2FkW3Byb3ZpZGVyXSA9IE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICAgICAgICAgICAgY29uc3Qgc2V0ID0gcHJvdmlkZXJJY29uc1RvTG9hZFtwcmVmaXhdIHx8XG4gICAgICAgICAgICAgICAgKHByb3ZpZGVySWNvbnNUb0xvYWRbcHJlZml4XSA9IG5ldyBTZXQoKSk7XG4gICAgICAgICAgICBzZXQuYWRkKG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gUGFyc2UgYWxsIHJvb3Qgbm9kZXNcbiAgICAocm9vdE5vZGUgPyBbcm9vdE5vZGVdIDogbGlzdFJvb3ROb2RlcygpKS5mb3JFYWNoKChvYnNlcnZlZE5vZGUpID0+IHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHR5cGVvZiBvYnNlcnZlZE5vZGUubm9kZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBvYnNlcnZlZE5vZGUubm9kZSgpXG4gICAgICAgICAgICA6IG9ic2VydmVkTm9kZS5ub2RlO1xuICAgICAgICBpZiAoIXJvb3QgfHwgIXJvb3QucXVlcnlTZWxlY3RvckFsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyYWNrIHBsYWNlaG9sZGVyc1xuICAgICAgICBsZXQgaGFzUGxhY2Vob2xkZXJzID0gZmFsc2U7XG4gICAgICAgIC8vIE9ic2VydmVyXG4gICAgICAgIGxldCBwYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbmRlciBpY29uXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiByZW5kZXIoZWxlbWVudCwgcHJvcHMsIGljb25EYXRhKSB7XG4gICAgICAgICAgICBpZiAoIXBhdXNlZCkge1xuICAgICAgICAgICAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcGF1c2VPYnNlcnZpbmdOb2RlKG9ic2VydmVkTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdTVkcnKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG9uZSBvZiBzdHlsZSBtb2Rlc1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGUgPSBwcm9wcy5tb2RlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTWFzayA9IG1vZGUgPT09ICdtYXNrJyB8fFxuICAgICAgICAgICAgICAgICAgICAobW9kZSA9PT0gJ2JnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBtb2RlID09PSAnc3R5bGUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpY29uRGF0YS5ib2R5LmluZGV4T2YoJ2N1cnJlbnRDb2xvcicpICE9PSAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpc01hc2sgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJCYWNrZ3JvdW5kKGVsZW1lbnQsIHByb3BzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5kZWZhdWx0SWNvblByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaWNvbkRhdGEsXG4gICAgICAgICAgICAgICAgICAgIH0sIGlzTWFzayk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW5kZXJJbmxpbmVTVkcoZWxlbWVudCwgcHJvcHMsIGljb25EYXRhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaW5kIGFsbCBlbGVtZW50c1xuICAgICAgICBzY2FuUm9vdE5vZGUocm9vdCkuZm9yRWFjaCgoeyBub2RlLCBwcm9wcyB9KSA9PiB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdGVtIGFscmVhZHkgaGFzIHByb3BzXG4gICAgICAgICAgICBjb25zdCBvbGREYXRhID0gbm9kZVtlbGVtZW50RGF0YVByb3BlcnR5XTtcbiAgICAgICAgICAgIGlmICghb2xkRGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIE5ldyBpY29uIHdpdGhvdXQgZGF0YVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhdHVzLCBpY29uIH0gPSBnZXRJY29uKHByb3BzLmljb24sIHRydWUpO1xuICAgICAgICAgICAgICAgIGlmIChpY29uKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlYWR5IHRvIHJlbmRlciFcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyKG5vZGUsIHByb3BzLCBpY29uKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBMb2FkaW5nIG9yIG1pc3NpbmdcbiAgICAgICAgICAgICAgICBoYXNQbGFjZWhvbGRlcnMgPSBoYXNQbGFjZWhvbGRlcnMgfHwgc3RhdHVzID09PSAnbG9hZGluZyc7XG4gICAgICAgICAgICAgICAgbm9kZVtlbGVtZW50RGF0YVByb3BlcnR5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFByZXZpb3VzbHkgZm91bmQgaWNvblxuICAgICAgICAgICAgbGV0IGl0ZW07XG4gICAgICAgICAgICBpZiAoIXByb3BzQ2hhbmdlZChvbGREYXRhLCBwcm9wcykpIHtcbiAgICAgICAgICAgICAgICAvLyBQcm9wcyBoYXZlIG5vdCBjaGFuZ2VkLiBDaGVjayBzdGF0dXNcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRTdGF0dXMgPSBvbGREYXRhLnN0YXR1cztcbiAgICAgICAgICAgICAgICBpZiAob2xkU3RhdHVzICE9PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtID0gZ2V0SWNvbihwcm9wcy5pY29uLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTm90aGluZyB0byByZW5kZXJcbiAgICAgICAgICAgICAgICAgICAgb2xkRGF0YS5zdGF0dXMgPSBpdGVtLnN0YXR1cztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFByb3BlcnRpZXMgaGF2ZSBjaGFuZ2VkOiBsb2FkIGljb24gaWYgbmFtZSBoYXMgY2hhbmdlZFxuICAgICAgICAgICAgICAgIGl0ZW0gPSBnZXRJY29uKHByb3BzLmljb24sIG9sZERhdGEubmFtZSAhPT0gcHJvcHMubmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2Fubm90IHJlbmRlciBpY29uOiB1cGRhdGUgc3RhdHVzIGFuZCBwcm9wc1xuICAgICAgICAgICAgICAgICAgICBoYXNQbGFjZWhvbGRlcnMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGxhY2Vob2xkZXJzIHx8IGl0ZW0uc3RhdHVzID09PSAnbG9hZGluZyc7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ob2xkRGF0YSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IGl0ZW0uc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlLXJlbmRlciBpY29uXG4gICAgICAgICAgICByZW5kZXIobm9kZSwgcHJvcHMsIGl0ZW0uaWNvbik7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBPYnNlcnZlZCBub2RlIHN0dWZmXG4gICAgICAgIGlmIChvYnNlcnZlZE5vZGUudGVtcG9yYXJ5ICYmICFoYXNQbGFjZWhvbGRlcnMpIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0ZW1wb3Jhcnkgbm9kZVxuICAgICAgICAgICAgc3RvcE9ic2VydmluZyhyb290KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhZGRUZW1wTm9kZSAmJiBoYXNQbGFjZWhvbGRlcnMpIHtcbiAgICAgICAgICAgIC8vIEFkZCBuZXcgdGVtcG9yYXJ5IG5vZGVcbiAgICAgICAgICAgIG9ic2VydmUocm9vdCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGF1c2VkICYmIG9ic2VydmVkTm9kZS5vYnNlcnZlcikge1xuICAgICAgICAgICAgLy8gUmVzdW1lIG9ic2VydmVyXG4gICAgICAgICAgICByZXN1bWVPYnNlcnZpbmdOb2RlKG9ic2VydmVkTm9kZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBMb2FkIGljb25zXG4gICAgZm9yIChjb25zdCBwcm92aWRlciBpbiBpY29uc1RvTG9hZCkge1xuICAgICAgICBjb25zdCBwcm92aWRlckljb25zVG9Mb2FkID0gaWNvbnNUb0xvYWRbcHJvdmlkZXJdO1xuICAgICAgICBmb3IgKGNvbnN0IHByZWZpeCBpbiBwcm92aWRlckljb25zVG9Mb2FkKSB7XG4gICAgICAgICAgICBjb25zdCBzZXQgPSBwcm92aWRlckljb25zVG9Mb2FkW3ByZWZpeF07XG4gICAgICAgICAgICBsb2FkSWNvbnMoQXJyYXkuZnJvbShzZXQpLm1hcCgobmFtZSkgPT4gKHtcbiAgICAgICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIH0pKSwgY2hlY2tQZW5kaW5nSWNvbnMpO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBTY2FuIG5vZGUgZm9yIHBsYWNlaG9sZGVyc1xuICovXG5mdW5jdGlvbiBzY2FuRWxlbWVudChyb290KSB7XG4gICAgLy8gQWRkIHRlbXBvcmFyeSBub2RlXG4gICAgY29uc3Qgbm9kZSA9IGZpbmRSb290Tm9kZShyb290KTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgc2NhbkRPTSh7XG4gICAgICAgICAgICBub2RlOiByb290LFxuICAgICAgICAgICAgdGVtcG9yYXJ5OiB0cnVlLFxuICAgICAgICB9LCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNjYW5ET00obm9kZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUljb24obmFtZSwgY3VzdG9taXNhdGlvbnMsIHJldHVyblN0cmluZyA9IGZhbHNlKSB7XG4gICAgLy8gR2V0IGljb24gZGF0YVxuICAgIGNvbnN0IGljb25EYXRhID0gZ2V0SWNvbkRhdGEobmFtZSk7XG4gICAgaWYgKCFpY29uRGF0YSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gU3BsaXQgbmFtZVxuICAgIGNvbnN0IGljb25OYW1lID0gc3RyaW5nVG9JY29uKG5hbWUpO1xuICAgIC8vIENsZWFuIHVwIGN1c3RvbWlzYXRpb25zXG4gICAgY29uc3QgY2hhbmdlcyA9IG1lcmdlQ3VzdG9taXNhdGlvbnMoZGVmYXVsdEV4dGVuZGVkSWNvbkN1c3RvbWlzYXRpb25zLCBjdXN0b21pc2F0aW9ucyB8fCB7fSk7XG4gICAgLy8gR2V0IGRhdGFcbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJJbmxpbmVTVkcoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpLCB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGljb246IGljb25OYW1lLFxuICAgICAgICBjdXN0b21pc2F0aW9uczogY2hhbmdlcyxcbiAgICB9LCBpY29uRGF0YSk7XG4gICAgcmV0dXJuIHJldHVyblN0cmluZ1xuICAgICAgICA/IHJlc3VsdC5vdXRlckhUTUxcbiAgICAgICAgOiByZXN1bHQ7XG59XG4vKipcbiAqIEdldCB2ZXJzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldFZlcnNpb24oKSB7XG4gICAgcmV0dXJuICczLjEuMSc7XG59XG4vKipcbiAqIEdlbmVyYXRlIFNWRyBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIHJlbmRlclNWRyhuYW1lLCBjdXN0b21pc2F0aW9ucykge1xuICAgIHJldHVybiBnZW5lcmF0ZUljb24obmFtZSwgY3VzdG9taXNhdGlvbnMsIGZhbHNlKTtcbn1cbi8qKlxuICogR2VuZXJhdGUgU1ZHIGFzIHN0cmluZ1xuICovXG5mdW5jdGlvbiByZW5kZXJIVE1MKG5hbWUsIGN1c3RvbWlzYXRpb25zKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlSWNvbihuYW1lLCBjdXN0b21pc2F0aW9ucywgdHJ1ZSk7XG59XG4vKipcbiAqIEdldCByZW5kZXJlZCBpY29uIGFzIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBTVkcgKHVzZSByZXBsYWNlSURzIG9uIGJvZHkpXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckljb24obmFtZSwgY3VzdG9taXNhdGlvbnMpIHtcbiAgICAvLyBHZXQgaWNvbiBkYXRhXG4gICAgY29uc3QgaWNvbkRhdGEgPSBnZXRJY29uRGF0YShuYW1lKTtcbiAgICBpZiAoIWljb25EYXRhKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBDbGVhbiB1cCBjdXN0b21pc2F0aW9uc1xuICAgIGNvbnN0IGNoYW5nZXMgPSBtZXJnZUN1c3RvbWlzYXRpb25zKGRlZmF1bHRFeHRlbmRlZEljb25DdXN0b21pc2F0aW9ucywgY3VzdG9taXNhdGlvbnMgfHwge30pO1xuICAgIC8vIEdldCBkYXRhXG4gICAgcmV0dXJuIGljb25Ub1NWRyhpY29uRGF0YSwgY2hhbmdlcyk7XG59XG4vKipcbiAqIFNjYW4gRE9NXG4gKi9cbmZ1bmN0aW9uIHNjYW4ocm9vdCkge1xuICAgIGlmIChyb290KSB7XG4gICAgICAgIHNjYW5FbGVtZW50KHJvb3QpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2NhbkRPTSgpO1xuICAgIH1cbn1cbi8qKlxuICogSW5pdGlhbGlzZSBzdHVmZlxuICovXG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEFkZCBkb2N1bWVudC5ib2R5IG5vZGVcbiAgICBhZGRCb2R5Tm9kZSgpO1xuICAgIGNvbnN0IF93aW5kb3cgPSB3aW5kb3c7XG4gICAgLy8gTG9hZCBpY29ucyBmcm9tIGdsb2JhbCBcIkljb25pZnlQcmVsb2FkXCJcbiAgICBpZiAoX3dpbmRvdy5JY29uaWZ5UHJlbG9hZCAhPT0gdm9pZCAwKSB7XG4gICAgICAgIGNvbnN0IHByZWxvYWQgPSBfd2luZG93Lkljb25pZnlQcmVsb2FkO1xuICAgICAgICBjb25zdCBlcnIgPSAnSW52YWxpZCBJY29uaWZ5UHJlbG9hZCBzeW50YXguJztcbiAgICAgICAgaWYgKHR5cGVvZiBwcmVsb2FkID09PSAnb2JqZWN0JyAmJiBwcmVsb2FkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAocHJlbG9hZCBpbnN0YW5jZW9mIEFycmF5ID8gcHJlbG9hZCA6IFtwcmVsb2FkXSkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXRlbSBpcyBhbiBvYmplY3QgYW5kIG5vdCBudWxsL2FycmF5XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgJ2ljb25zJyBhbmQgJ3ByZWZpeCdcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpdGVtLmljb25zICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0ucHJlZml4ICE9PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGljb24gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAhYWRkQ29sbGVjdGlvbihpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBMb2FkIG9ic2VydmVyIGFuZCBzY2FuIERPTSBvbiBuZXh0IHRpY2tcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaW5pdE9ic2VydmVyKHNjYW5ET00pO1xuICAgICAgICBzY2FuRE9NKCk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogRW5hYmxlIGNhY2hlXG4gKi9cbmZ1bmN0aW9uIGVuYWJsZUNhY2hlKHN0b3JhZ2UsIGVuYWJsZSkge1xuICAgIHRvZ2dsZUJyb3dzZXJDYWNoZShzdG9yYWdlLCBlbmFibGUgIT09IGZhbHNlKTtcbn1cbi8qKlxuICogRGlzYWJsZSBjYWNoZVxuICovXG5mdW5jdGlvbiBkaXNhYmxlQ2FjaGUoc3RvcmFnZSkge1xuICAgIHRvZ2dsZUJyb3dzZXJDYWNoZShzdG9yYWdlLCB0cnVlKTtcbn1cbi8qKlxuICogSW5pdGlhbGlzZSBzdHVmZlxuICovXG4vLyBTZXQgQVBJIG1vZHVsZVxuc2V0QVBJTW9kdWxlKCcnLCBmZXRjaEFQSU1vZHVsZSk7XG4vKipcbiAqIEJyb3dzZXIgc3R1ZmZcbiAqL1xuaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBTZXQgY2FjaGUgYW5kIGxvYWQgZXhpc3RpbmcgY2FjaGVcbiAgICBpbml0QnJvd3NlclN0b3JhZ2UoKTtcbiAgICBjb25zdCBfd2luZG93ID0gd2luZG93O1xuICAgIC8vIFNldCBBUEkgZnJvbSBnbG9iYWwgXCJJY29uaWZ5UHJvdmlkZXJzXCJcbiAgICBpZiAoX3dpbmRvdy5JY29uaWZ5UHJvdmlkZXJzICE9PSB2b2lkIDApIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXJzID0gX3dpbmRvdy5JY29uaWZ5UHJvdmlkZXJzO1xuICAgICAgICBpZiAodHlwZW9mIHByb3ZpZGVycyA9PT0gJ29iamVjdCcgJiYgcHJvdmlkZXJzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSAnSWNvbmlmeVByb3ZpZGVyc1snICsga2V5ICsgJ10gaXMgaW52YWxpZC4nO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvdmlkZXJzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhdmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnJlc291cmNlcyA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFkZEFQSVByb3ZpZGVyKGtleSwgdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogSW50ZXJuYWwgQVBJXG4gKi9cbmNvbnN0IF9hcGkgPSB7XG4gICAgZ2V0QVBJQ29uZmlnLFxuICAgIHNldEFQSU1vZHVsZSxcbiAgICBzZW5kQVBJUXVlcnksXG4gICAgc2V0RmV0Y2gsXG4gICAgZ2V0RmV0Y2gsXG4gICAgbGlzdEFQSVByb3ZpZGVycyxcbn07XG4vKipcbiAqIEdsb2JhbCB2YXJpYWJsZVxuICovXG5jb25zdCBJY29uaWZ5ID0ge1xuICAgIC8vIEljb25pZnlBUElJbnRlcm5hbEZ1bmN0aW9uc1xuICAgIF9hcGksXG4gICAgLy8gSWNvbmlmeUFQSUZ1bmN0aW9uc1xuICAgIGFkZEFQSVByb3ZpZGVyLFxuICAgIGxvYWRJY29ucyxcbiAgICBsb2FkSWNvbixcbiAgICAvLyBJY29uaWZ5U3RvcmFnZUZ1bmN0aW9uc1xuICAgIGljb25FeGlzdHMsXG4gICAgZ2V0SWNvbixcbiAgICBsaXN0SWNvbnMsXG4gICAgYWRkSWNvbixcbiAgICBhZGRDb2xsZWN0aW9uLFxuICAgIC8vIEljb25pZnlCdWlsZGVyRnVuY3Rpb25zXG4gICAgcmVwbGFjZUlEcyxcbiAgICBjYWxjdWxhdGVTaXplLFxuICAgIGJ1aWxkSWNvbjogaWNvblRvU1ZHLFxuICAgIC8vIEljb25pZnlDb21tb25GdW5jdGlvbnNcbiAgICBnZXRWZXJzaW9uLFxuICAgIHJlbmRlclNWRyxcbiAgICByZW5kZXJIVE1MLFxuICAgIHJlbmRlckljb24sXG4gICAgc2NhbixcbiAgICBvYnNlcnZlLFxuICAgIHN0b3BPYnNlcnZpbmcsXG4gICAgcGF1c2VPYnNlcnZlcixcbiAgICByZXN1bWVPYnNlcnZlcixcbiAgICAvLyBJY29uaWZ5QnJvd3NlckNhY2hlRnVuY3Rpb25zXG4gICAgZW5hYmxlQ2FjaGUsXG4gICAgZGlzYWJsZUNhY2hlLFxufTtcblxuZXhwb3J0IHsgX2FwaSwgYWRkQVBJUHJvdmlkZXIsIGFkZENvbGxlY3Rpb24sIGFkZEljb24sIGljb25Ub1NWRyBhcyBidWlsZEljb24sIGNhbGN1bGF0ZVNpemUsIEljb25pZnkgYXMgZGVmYXVsdCwgZGlzYWJsZUNhY2hlLCBlbmFibGVDYWNoZSwgZ2V0SWNvbiwgZ2V0VmVyc2lvbiwgaWNvbkV4aXN0cywgbGlzdEljb25zLCBsb2FkSWNvbiwgbG9hZEljb25zLCBvYnNlcnZlLCBwYXVzZU9ic2VydmVyLCByZW5kZXJIVE1MLCByZW5kZXJJY29uLCByZW5kZXJTVkcsIHJlcGxhY2VJRHMsIHJlc3VtZU9ic2VydmVyLCBzY2FuLCBzdG9wT2JzZXJ2aW5nIH07XG5cbi8vIEV4cG9ydCB0byB3aW5kb3cgb3Igd2ViIHdvcmtlclxudHJ5IHtcblx0aWYgKHNlbGYuSWNvbmlmeSA9PT0gdm9pZCAwKSB7XG5cdFx0c2VsZi5JY29uaWZ5ID0gSWNvbmlmeTtcblx0fVxufSBjYXRjaCAoZXJyKSB7XG59XG4iLCIvKiFcbiAgKiBzaGFyZWQgdjkuMTAuMlxuICAqIChjKSAyMDI0IGthenV5YSBrYXdhZ3VjaGlcbiAgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gICovXG4vKipcbiAqIE9yaWdpbmFsIFV0aWxpdGllc1xuICogd3JpdHRlbiBieSBrYXp1eWEga2F3YWd1Y2hpXG4gKi9cbmNvbnN0IGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xubGV0IG1hcms7XG5sZXQgbWVhc3VyZTtcbntcbiAgICBjb25zdCBwZXJmID0gaW5Ccm93c2VyICYmIHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgICBpZiAocGVyZiAmJlxuICAgICAgICBwZXJmLm1hcmsgJiZcbiAgICAgICAgcGVyZi5tZWFzdXJlICYmXG4gICAgICAgIHBlcmYuY2xlYXJNYXJrcyAmJlxuICAgICAgICAvLyBAdHMtaWdub3JlIGJyb3dzZXIgY29tcGF0XG4gICAgICAgIHBlcmYuY2xlYXJNZWFzdXJlcykge1xuICAgICAgICBtYXJrID0gKHRhZykgPT4ge1xuICAgICAgICAgICAgcGVyZi5tYXJrKHRhZyk7XG4gICAgICAgIH07XG4gICAgICAgIG1lYXN1cmUgPSAobmFtZSwgc3RhcnRUYWcsIGVuZFRhZykgPT4ge1xuICAgICAgICAgICAgcGVyZi5tZWFzdXJlKG5hbWUsIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgICAgICAgICAgcGVyZi5jbGVhck1hcmtzKHN0YXJ0VGFnKTtcbiAgICAgICAgICAgIHBlcmYuY2xlYXJNYXJrcyhlbmRUYWcpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbmNvbnN0IFJFX0FSR1MgPSAvXFx7KFswLTlhLXpBLVpdKylcXH0vZztcbi8qIGVzbGludC1kaXNhYmxlICovXG5mdW5jdGlvbiBmb3JtYXQobWVzc2FnZSwgLi4uYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiBpc09iamVjdChhcmdzWzBdKSkge1xuICAgICAgICBhcmdzID0gYXJnc1swXTtcbiAgICB9XG4gICAgaWYgKCFhcmdzIHx8ICFhcmdzLmhhc093blByb3BlcnR5KSB7XG4gICAgICAgIGFyZ3MgPSB7fTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2UucmVwbGFjZShSRV9BUkdTLCAobWF0Y2gsIGlkZW50aWZpZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGFyZ3MuaGFzT3duUHJvcGVydHkoaWRlbnRpZmllcikgPyBhcmdzW2lkZW50aWZpZXJdIDogJyc7XG4gICAgfSk7XG59XG5jb25zdCBtYWtlU3ltYm9sID0gKG5hbWUsIHNoYXJlYWJsZSA9IGZhbHNlKSA9PiAhc2hhcmVhYmxlID8gU3ltYm9sKG5hbWUpIDogU3ltYm9sLmZvcihuYW1lKTtcbmNvbnN0IGdlbmVyYXRlRm9ybWF0Q2FjaGVLZXkgPSAobG9jYWxlLCBrZXksIHNvdXJjZSkgPT4gZnJpZW5kbHlKU09Oc3RyaW5naWZ5KHsgbDogbG9jYWxlLCBrOiBrZXksIHM6IHNvdXJjZSB9KTtcbmNvbnN0IGZyaWVuZGx5SlNPTnN0cmluZ2lmeSA9IChqc29uKSA9PiBKU09OLnN0cmluZ2lmeShqc29uKVxuICAgIC5yZXBsYWNlKC9cXHUyMDI4L2csICdcXFxcdTIwMjgnKVxuICAgIC5yZXBsYWNlKC9cXHUyMDI5L2csICdcXFxcdTIwMjknKVxuICAgIC5yZXBsYWNlKC9cXHUwMDI3L2csICdcXFxcdTAwMjcnKTtcbmNvbnN0IGlzTnVtYmVyID0gKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKTtcbmNvbnN0IGlzRGF0ZSA9ICh2YWwpID0+IHRvVHlwZVN0cmluZyh2YWwpID09PSAnW29iamVjdCBEYXRlXSc7XG5jb25zdCBpc1JlZ0V4cCA9ICh2YWwpID0+IHRvVHlwZVN0cmluZyh2YWwpID09PSAnW29iamVjdCBSZWdFeHBdJztcbmNvbnN0IGlzRW1wdHlPYmplY3QgPSAodmFsKSA9PiBpc1BsYWluT2JqZWN0KHZhbCkgJiYgT2JqZWN0LmtleXModmFsKS5sZW5ndGggPT09IDA7XG5jb25zdCBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xubGV0IF9nbG9iYWxUaGlzO1xuY29uc3QgZ2V0R2xvYmFsVGhpcyA9ICgpID0+IHtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICByZXR1cm4gKF9nbG9iYWxUaGlzIHx8XG4gICAgICAgIChfZ2xvYmFsVGhpcyA9XG4gICAgICAgICAgICB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICA/IGdsb2JhbFRoaXNcbiAgICAgICAgICAgICAgICA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICA/IHNlbGZcbiAgICAgICAgICAgICAgICAgICAgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB3aW5kb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGdsb2JhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge30pKTtcbn07XG5mdW5jdGlvbiBlc2NhcGVIdG1sKHJhd1RleHQpIHtcbiAgICByZXR1cm4gcmF3VGV4dFxuICAgICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAgICAgLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKVxuICAgICAgICAucmVwbGFjZSgvJy9nLCAnJmFwb3M7Jyk7XG59XG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBoYXNPd24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlICovXG4vKipcbiAqIFVzZWZ1bCBVdGlsaXRpZXMgQnkgRXZhbiB5b3VcbiAqIE1vZGlmaWVkIGJ5IGthenV5YSBrYXdhZ3VjaGlcbiAqIE1JVCBMaWNlbnNlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLW5leHQvYmxvYi9tYXN0ZXIvcGFja2FnZXMvc2hhcmVkL3NyYy9pbmRleC50c1xuICogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1uZXh0L2Jsb2IvbWFzdGVyL3BhY2thZ2VzL3NoYXJlZC9zcmMvY29kZWZyYW1lLnRzXG4gKi9cbmNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuY29uc3QgaXNGdW5jdGlvbiA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbic7XG5jb25zdCBpc1N0cmluZyA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xuY29uc3QgaXNCb29sZWFuID0gKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nO1xuY29uc3QgaXNTeW1ib2wgPSAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAnc3ltYm9sJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5jb25zdCBpc09iamVjdCA9ICh2YWwpID0+IHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5jb25zdCBpc1Byb21pc2UgPSAodmFsKSA9PiB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwudGhlbikgJiYgaXNGdW5jdGlvbih2YWwuY2F0Y2gpO1xufTtcbmNvbnN0IG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmNvbnN0IHRvVHlwZVN0cmluZyA9ICh2YWx1ZSkgPT4gb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICAgIGlmICghaXNPYmplY3QodmFsKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gICAgcmV0dXJuIHByb3RvID09PSBudWxsIHx8IHByb3RvLmNvbnN0cnVjdG9yID09PSBPYmplY3Q7XG59O1xuLy8gZm9yIGNvbnZlcnRpbmcgbGlzdCBhbmQgbmFtZWQgdmFsdWVzIHRvIGRpc3BsYXllZCBzdHJpbmdzLlxuY29uc3QgdG9EaXNwbGF5U3RyaW5nID0gKHZhbCkgPT4ge1xuICAgIHJldHVybiB2YWwgPT0gbnVsbFxuICAgICAgICA/ICcnXG4gICAgICAgIDogaXNBcnJheSh2YWwpIHx8IChpc1BsYWluT2JqZWN0KHZhbCkgJiYgdmFsLnRvU3RyaW5nID09PSBvYmplY3RUb1N0cmluZylcbiAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkodmFsLCBudWxsLCAyKVxuICAgICAgICAgICAgOiBTdHJpbmcodmFsKTtcbn07XG5mdW5jdGlvbiBqb2luKGl0ZW1zLCBzZXBhcmF0b3IgPSAnJykge1xuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoKHN0ciwgaXRlbSwgaW5kZXgpID0+IChpbmRleCA9PT0gMCA/IHN0ciArIGl0ZW0gOiBzdHIgKyBzZXBhcmF0b3IgKyBpdGVtKSwgJycpO1xufVxuY29uc3QgUkFOR0UgPSAyO1xuZnVuY3Rpb24gZ2VuZXJhdGVDb2RlRnJhbWUoc291cmNlLCBzdGFydCA9IDAsIGVuZCA9IHNvdXJjZS5sZW5ndGgpIHtcbiAgICBjb25zdCBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvXFxyP1xcbi8pO1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgY29uc3QgcmVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb3VudCArPSBsaW5lc1tpXS5sZW5ndGggKyAxO1xuICAgICAgICBpZiAoY291bnQgPj0gc3RhcnQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpIC0gUkFOR0U7IGogPD0gaSArIFJBTkdFIHx8IGVuZCA+IGNvdW50OyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaiA8IDAgfHwgaiA+PSBsaW5lcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBqICsgMTtcbiAgICAgICAgICAgICAgICByZXMucHVzaChgJHtsaW5lfSR7JyAnLnJlcGVhdCgzIC0gU3RyaW5nKGxpbmUpLmxlbmd0aCl9fCAgJHtsaW5lc1tqXX1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lTGVuZ3RoID0gbGluZXNbal0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChqID09PSBpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHB1c2ggdW5kZXJsaW5lXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhZCA9IHN0YXJ0IC0gKGNvdW50IC0gbGluZUxlbmd0aCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCgxLCBlbmQgPiBjb3VudCA/IGxpbmVMZW5ndGggLSBwYWQgOiBlbmQgLSBzdGFydCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGAgICB8ICBgICsgJyAnLnJlcGVhdChwYWQpICsgJ14nLnJlcGVhdChsZW5ndGgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaiA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZCA+IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heChNYXRoLm1pbihlbmQgLSBjb3VudCwgbGluZUxlbmd0aCksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goYCAgIHwgIGAgKyAnXicucmVwZWF0KGxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IGxpbmVMZW5ndGggKyAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXMuam9pbignXFxuJyk7XG59XG5mdW5jdGlvbiBpbmNyZW1lbnRlcihjb2RlKSB7XG4gICAgbGV0IGN1cnJlbnQgPSBjb2RlO1xuICAgIHJldHVybiAoKSA9PiArK2N1cnJlbnQ7XG59XG5cbmZ1bmN0aW9uIHdhcm4obXNnLCBlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW2ludGxpZnldIGAgKyBtc2cpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGVyci5zdGFjayk7XG4gICAgICAgIH1cbiAgICB9XG59XG5jb25zdCBoYXNXYXJuZWQgPSB7fTtcbmZ1bmN0aW9uIHdhcm5PbmNlKG1zZykge1xuICAgIGlmICghaGFzV2FybmVkW21zZ10pIHtcbiAgICAgICAgaGFzV2FybmVkW21zZ10gPSB0cnVlO1xuICAgICAgICB3YXJuKG1zZyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEV2ZW50IGVtaXR0ZXIsIGZvcmtlZCBmcm9tIHRoZSBiZWxvdzpcbiAqIC0gb3JpZ2luYWwgcmVwb3NpdG9yeSB1cmw6IGh0dHBzOi8vZ2l0aHViLmNvbS9kZXZlbG9waXQvbWl0dFxuICogLSBjb2RlIHVybDogaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9taXR0L2Jsb2IvbWFzdGVyL3NyYy9pbmRleC50c1xuICogLSBhdXRob3I6IEphc29uIE1pbGxlciAoaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdClcbiAqIC0gbGljZW5zZTogTUlUXG4gKi9cbi8qKlxuICogQ3JlYXRlIGEgZXZlbnQgZW1pdHRlclxuICpcbiAqIEByZXR1cm5zIEFuIGV2ZW50IGVtaXR0ZXJcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRW1pdHRlcigpIHtcbiAgICBjb25zdCBldmVudHMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgZW1pdHRlciA9IHtcbiAgICAgICAgZXZlbnRzLFxuICAgICAgICBvbihldmVudCwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBldmVudHMuZ2V0KGV2ZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGFkZGVkID0gaGFuZGxlcnMgJiYgaGFuZGxlcnMucHVzaChoYW5kbGVyKTtcbiAgICAgICAgICAgIGlmICghYWRkZWQpIHtcbiAgICAgICAgICAgICAgICBldmVudHMuc2V0KGV2ZW50LCBbaGFuZGxlcl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvZmYoZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJzID0gZXZlbnRzLmdldChldmVudCk7XG4gICAgICAgICAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoaGFuZGxlcnMuaW5kZXhPZihoYW5kbGVyKSA+Pj4gMCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVtaXQoZXZlbnQsIHBheWxvYWQpIHtcbiAgICAgICAgICAgIChldmVudHMuZ2V0KGV2ZW50KSB8fCBbXSlcbiAgICAgICAgICAgICAgICAuc2xpY2UoKVxuICAgICAgICAgICAgICAgIC5tYXAoaGFuZGxlciA9PiBoYW5kbGVyKHBheWxvYWQpKTtcbiAgICAgICAgICAgIChldmVudHMuZ2V0KCcqJykgfHwgW10pXG4gICAgICAgICAgICAgICAgLnNsaWNlKClcbiAgICAgICAgICAgICAgICAubWFwKGhhbmRsZXIgPT4gaGFuZGxlcihldmVudCwgcGF5bG9hZCkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gZW1pdHRlcjtcbn1cblxuY29uc3QgaXNOb3RPYmplY3RPcklzQXJyYXkgPSAodmFsKSA9PiAhaXNPYmplY3QodmFsKSB8fCBpc0FycmF5KHZhbCk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuZnVuY3Rpb24gZGVlcENvcHkoc3JjLCBkZXMpIHtcbiAgICAvLyBzcmMgYW5kIGRlcyBzaG91bGQgYm90aCBiZSBvYmplY3RzLCBhbmQgbm9uZSBvZiB0aGVtIGNhbiBiZSBhIGFycmF5XG4gICAgaWYgKGlzTm90T2JqZWN0T3JJc0FycmF5KHNyYykgfHwgaXNOb3RPYmplY3RPcklzQXJyYXkoZGVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUnKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhY2sgPSBbeyBzcmMsIGRlcyB9XTtcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHsgc3JjLCBkZXMgfSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChpc05vdE9iamVjdE9ySXNBcnJheShzcmNba2V5XSkgfHwgaXNOb3RPYmplY3RPcklzQXJyYXkoZGVzW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVwbGFjZSB3aXRoIHNyY1trZXldIHdoZW46XG4gICAgICAgICAgICAgICAgLy8gc3JjW2tleV0gb3IgZGVzW2tleV0gaXMgbm90IGFuIG9iamVjdCwgb3JcbiAgICAgICAgICAgICAgICAvLyBzcmNba2V5XSBvciBkZXNba2V5XSBpcyBhbiBhcnJheVxuICAgICAgICAgICAgICAgIGRlc1trZXldID0gc3JjW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzcmNba2V5XSBhbmQgZGVzW2tleV0gYXJlIGJvdGggb2JqZWN0cywgbWVyZ2UgdGhlbVxuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goeyBzcmM6IHNyY1trZXldLCBkZXM6IGRlc1trZXldIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IGFzc2lnbiwgY3JlYXRlRW1pdHRlciwgZGVlcENvcHksIGVzY2FwZUh0bWwsIGZvcm1hdCwgZnJpZW5kbHlKU09Oc3RyaW5naWZ5LCBnZW5lcmF0ZUNvZGVGcmFtZSwgZ2VuZXJhdGVGb3JtYXRDYWNoZUtleSwgZ2V0R2xvYmFsVGhpcywgaGFzT3duLCBpbkJyb3dzZXIsIGluY3JlbWVudGVyLCBpc0FycmF5LCBpc0Jvb2xlYW4sIGlzRGF0ZSwgaXNFbXB0eU9iamVjdCwgaXNGdW5jdGlvbiwgaXNOdW1iZXIsIGlzT2JqZWN0LCBpc1BsYWluT2JqZWN0LCBpc1Byb21pc2UsIGlzUmVnRXhwLCBpc1N0cmluZywgaXNTeW1ib2wsIGpvaW4sIG1ha2VTeW1ib2wsIG1hcmssIG1lYXN1cmUsIG9iamVjdFRvU3RyaW5nLCB0b0Rpc3BsYXlTdHJpbmcsIHRvVHlwZVN0cmluZywgd2Fybiwgd2Fybk9uY2UgfTtcbiIsIi8qIVxuICAqIGNvcmUtYmFzZSB2OS4xMC4yXG4gICogKGMpIDIwMjQga2F6dXlhIGthd2FndWNoaVxuICAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAgKi9cbi8qKlxuICogT3JpZ2luYWwgVXRpbGl0aWVzXG4gKiB3cml0dGVuIGJ5IGthenV5YSBrYXdhZ3VjaGlcbiAqL1xuY29uc3QgaW5Ccm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG5sZXQgbWFyaztcbmxldCBtZWFzdXJlO1xue1xuICAgIGNvbnN0IHBlcmYgPSBpbkJyb3dzZXIgJiYgd2luZG93LnBlcmZvcm1hbmNlO1xuICAgIGlmIChwZXJmICYmXG4gICAgICAgIHBlcmYubWFyayAmJlxuICAgICAgICBwZXJmLm1lYXN1cmUgJiZcbiAgICAgICAgcGVyZi5jbGVhck1hcmtzICYmXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgYnJvd3NlciBjb21wYXRcbiAgICAgICAgcGVyZi5jbGVhck1lYXN1cmVzKSB7XG4gICAgICAgIG1hcmsgPSAodGFnKSA9PiB7XG4gICAgICAgICAgICBwZXJmLm1hcmsodGFnKTtcbiAgICAgICAgfTtcbiAgICAgICAgbWVhc3VyZSA9IChuYW1lLCBzdGFydFRhZywgZW5kVGFnKSA9PiB7XG4gICAgICAgICAgICBwZXJmLm1lYXN1cmUobmFtZSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICAgICAgICBwZXJmLmNsZWFyTWFya3Moc3RhcnRUYWcpO1xuICAgICAgICAgICAgcGVyZi5jbGVhck1hcmtzKGVuZFRhZyk7XG4gICAgICAgIH07XG4gICAgfVxufVxuY29uc3QgUkVfQVJHUyA9IC9cXHsoWzAtOWEtekEtWl0rKVxcfS9nO1xuLyogZXNsaW50LWRpc2FibGUgKi9cbmZ1bmN0aW9uIGZvcm1hdCQxKG1lc3NhZ2UsIC4uLmFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgaXNPYmplY3QoYXJnc1swXSkpIHtcbiAgICAgICAgYXJncyA9IGFyZ3NbMF07XG4gICAgfVxuICAgIGlmICghYXJncyB8fCAhYXJncy5oYXNPd25Qcm9wZXJ0eSkge1xuICAgICAgICBhcmdzID0ge307XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlLnJlcGxhY2UoUkVfQVJHUywgKG1hdGNoLCBpZGVudGlmaWVyKSA9PiB7XG4gICAgICAgIHJldHVybiBhcmdzLmhhc093blByb3BlcnR5KGlkZW50aWZpZXIpID8gYXJnc1tpZGVudGlmaWVyXSA6ICcnO1xuICAgIH0pO1xufVxuY29uc3QgZ2VuZXJhdGVGb3JtYXRDYWNoZUtleSA9IChsb2NhbGUsIGtleSwgc291cmNlKSA9PiBmcmllbmRseUpTT05zdHJpbmdpZnkoeyBsOiBsb2NhbGUsIGs6IGtleSwgczogc291cmNlIH0pO1xuY29uc3QgZnJpZW5kbHlKU09Oc3RyaW5naWZ5ID0gKGpzb24pID0+IEpTT04uc3RyaW5naWZ5KGpzb24pXG4gICAgLnJlcGxhY2UoL1xcdTIwMjgvZywgJ1xcXFx1MjAyOCcpXG4gICAgLnJlcGxhY2UoL1xcdTIwMjkvZywgJ1xcXFx1MjAyOScpXG4gICAgLnJlcGxhY2UoL1xcdTAwMjcvZywgJ1xcXFx1MDAyNycpO1xuY29uc3QgaXNOdW1iZXIgPSAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWwpO1xuY29uc3QgaXNEYXRlID0gKHZhbCkgPT4gdG9UeXBlU3RyaW5nKHZhbCkgPT09ICdbb2JqZWN0IERhdGVdJztcbmNvbnN0IGlzUmVnRXhwID0gKHZhbCkgPT4gdG9UeXBlU3RyaW5nKHZhbCkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xuY29uc3QgaXNFbXB0eU9iamVjdCA9ICh2YWwpID0+IGlzUGxhaW5PYmplY3QodmFsKSAmJiBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMDtcbmNvbnN0IGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5mdW5jdGlvbiBlc2NhcGVIdG1sKHJhd1RleHQpIHtcbiAgICByZXR1cm4gcmF3VGV4dFxuICAgICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAgICAgLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKVxuICAgICAgICAucmVwbGFjZSgvJy9nLCAnJmFwb3M7Jyk7XG59XG4vKiBlc2xpbnQtZW5hYmxlICovXG4vKipcbiAqIFVzZWZ1bCBVdGlsaXRpZXMgQnkgRXZhbiB5b3VcbiAqIE1vZGlmaWVkIGJ5IGthenV5YSBrYXdhZ3VjaGlcbiAqIE1JVCBMaWNlbnNlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLW5leHQvYmxvYi9tYXN0ZXIvcGFja2FnZXMvc2hhcmVkL3NyYy9pbmRleC50c1xuICogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1uZXh0L2Jsb2IvbWFzdGVyL3BhY2thZ2VzL3NoYXJlZC9zcmMvY29kZWZyYW1lLnRzXG4gKi9cbmNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuY29uc3QgaXNGdW5jdGlvbiA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbic7XG5jb25zdCBpc1N0cmluZyA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xuY29uc3QgaXNCb29sZWFuID0gKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmNvbnN0IGlzT2JqZWN0ID0gKHZhbCkgPT4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmNvbnN0IGlzUHJvbWlzZSA9ICh2YWwpID0+IHtcbiAgICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC50aGVuKSAmJiBpc0Z1bmN0aW9uKHZhbC5jYXRjaCk7XG59O1xuY29uc3Qgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuY29uc3QgdG9UeXBlU3RyaW5nID0gKHZhbHVlKSA9PiBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsKSA9PiB7XG4gICAgaWYgKCFpc09iamVjdCh2YWwpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgICByZXR1cm4gcHJvdG8gPT09IG51bGwgfHwgcHJvdG8uY29uc3RydWN0b3IgPT09IE9iamVjdDtcbn07XG4vLyBmb3IgY29udmVydGluZyBsaXN0IGFuZCBuYW1lZCB2YWx1ZXMgdG8gZGlzcGxheWVkIHN0cmluZ3MuXG5jb25zdCB0b0Rpc3BsYXlTdHJpbmcgPSAodmFsKSA9PiB7XG4gICAgcmV0dXJuIHZhbCA9PSBudWxsXG4gICAgICAgID8gJydcbiAgICAgICAgOiBpc0FycmF5KHZhbCkgfHwgKGlzUGxhaW5PYmplY3QodmFsKSAmJiB2YWwudG9TdHJpbmcgPT09IG9iamVjdFRvU3RyaW5nKVxuICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh2YWwsIG51bGwsIDIpXG4gICAgICAgICAgICA6IFN0cmluZyh2YWwpO1xufTtcbmZ1bmN0aW9uIGpvaW4oaXRlbXMsIHNlcGFyYXRvciA9ICcnKSB7XG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgoc3RyLCBpdGVtLCBpbmRleCkgPT4gKGluZGV4ID09PSAwID8gc3RyICsgaXRlbSA6IHN0ciArIHNlcGFyYXRvciArIGl0ZW0pLCAnJyk7XG59XG5jb25zdCBSQU5HRSA9IDI7XG5mdW5jdGlvbiBnZW5lcmF0ZUNvZGVGcmFtZShzb3VyY2UsIHN0YXJ0ID0gMCwgZW5kID0gc291cmNlLmxlbmd0aCkge1xuICAgIGNvbnN0IGxpbmVzID0gc291cmNlLnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBjb25zdCByZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvdW50ICs9IGxpbmVzW2ldLmxlbmd0aCArIDE7XG4gICAgICAgIGlmIChjb3VudCA+PSBzdGFydCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgLSBSQU5HRTsgaiA8PSBpICsgUkFOR0UgfHwgZW5kID4gY291bnQ7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChqIDwgMCB8fCBqID49IGxpbmVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IGogKyAxO1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGAke2xpbmV9JHsnICcucmVwZWF0KDMgLSBTdHJpbmcobGluZSkubGVuZ3RoKX18ICAke2xpbmVzW2pdfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVMZW5ndGggPSBsaW5lc1tqXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGogPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHVzaCB1bmRlcmxpbmVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFkID0gc3RhcnQgLSAoY291bnQgLSBsaW5lTGVuZ3RoKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDEsIGVuZCA+IGNvdW50ID8gbGluZUxlbmd0aCAtIHBhZCA6IGVuZCAtIHN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goYCAgIHwgIGAgKyAnICcucmVwZWF0KHBhZCkgKyAnXicucmVwZWF0KGxlbmd0aCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChqID4gaSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kID4gY291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KE1hdGgubWluKGVuZCAtIGNvdW50LCBsaW5lTGVuZ3RoKSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMucHVzaChgICAgfCAgYCArICdeJy5yZXBlYXQobGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gbGluZUxlbmd0aCArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcy5qb2luKCdcXG4nKTtcbn1cbmZ1bmN0aW9uIGluY3JlbWVudGVyKGNvZGUpIHtcbiAgICBsZXQgY3VycmVudCA9IGNvZGU7XG4gICAgcmV0dXJuICgpID0+ICsrY3VycmVudDtcbn1cblxuZnVuY3Rpb24gd2Fybihtc2csIGVycikge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBbaW50bGlmeV0gYCArIG1zZyk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oZXJyLnN0YWNrKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmNvbnN0IGhhc1dhcm5lZCA9IHt9O1xuZnVuY3Rpb24gd2Fybk9uY2UobXNnKSB7XG4gICAgaWYgKCFoYXNXYXJuZWRbbXNnXSkge1xuICAgICAgICBoYXNXYXJuZWRbbXNnXSA9IHRydWU7XG4gICAgICAgIHdhcm4obXNnKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uKGxpbmUsIGNvbHVtbiwgb2Zmc2V0KSB7XG4gICAgcmV0dXJuIHsgbGluZSwgY29sdW1uLCBvZmZzZXQgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxvY2F0aW9uKHN0YXJ0LCBlbmQsIHNvdXJjZSkge1xuICAgIGNvbnN0IGxvYyA9IHsgc3RhcnQsIGVuZCB9O1xuICAgIGlmIChzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICBsb2Muc291cmNlID0gc291cmNlO1xuICAgIH1cbiAgICByZXR1cm4gbG9jO1xufVxuXG5jb25zdCBDb21waWxlRXJyb3JDb2RlcyA9IHtcbiAgICAvLyB0b2tlbml6ZXIgZXJyb3IgY29kZXNcbiAgICBFWFBFQ1RFRF9UT0tFTjogMSxcbiAgICBJTlZBTElEX1RPS0VOX0lOX1BMQUNFSE9MREVSOiAyLFxuICAgIFVOVEVSTUlOQVRFRF9TSU5HTEVfUVVPVEVfSU5fUExBQ0VIT0xERVI6IDMsXG4gICAgVU5LTk9XTl9FU0NBUEVfU0VRVUVOQ0U6IDQsXG4gICAgSU5WQUxJRF9VTklDT0RFX0VTQ0FQRV9TRVFVRU5DRTogNSxcbiAgICBVTkJBTEFOQ0VEX0NMT1NJTkdfQlJBQ0U6IDYsXG4gICAgVU5URVJNSU5BVEVEX0NMT1NJTkdfQlJBQ0U6IDcsXG4gICAgRU1QVFlfUExBQ0VIT0xERVI6IDgsXG4gICAgTk9UX0FMTE9XX05FU1RfUExBQ0VIT0xERVI6IDksXG4gICAgSU5WQUxJRF9MSU5LRURfRk9STUFUOiAxMCxcbiAgICAvLyBwYXJzZXIgZXJyb3IgY29kZXNcbiAgICBNVVNUX0hBVkVfTUVTU0FHRVNfSU5fUExVUkFMOiAxMSxcbiAgICBVTkVYUEVDVEVEX0VNUFRZX0xJTktFRF9NT0RJRklFUjogMTIsXG4gICAgVU5FWFBFQ1RFRF9FTVBUWV9MSU5LRURfS0VZOiAxMyxcbiAgICBVTkVYUEVDVEVEX0xFWElDQUxfQU5BTFlTSVM6IDE0LFxuICAgIC8vIGdlbmVyYXRvciBlcnJvciBjb2Rlc1xuICAgIFVOSEFORExFRF9DT0RFR0VOX05PREVfVFlQRTogMTUsXG4gICAgLy8gbWluaWZpZXIgZXJyb3IgY29kZXNcbiAgICBVTkhBTkRMRURfTUlOSUZJRVJfTk9ERV9UWVBFOiAxNixcbiAgICAvLyBTcGVjaWFsIHZhbHVlIGZvciBoaWdoZXItb3JkZXIgY29tcGlsZXJzIHRvIHBpY2sgdXAgdGhlIGxhc3QgY29kZVxuICAgIC8vIHRvIGF2b2lkIGNvbGxpc2lvbiBvZiBlcnJvciBjb2Rlcy4gVGhpcyBzaG91bGQgYWx3YXlzIGJlIGtlcHQgYXMgdGhlIGxhc3RcbiAgICAvLyBpdGVtLlxuICAgIF9fRVhURU5EX1BPSU5UX186IDE3XG59O1xuLyoqIEBpbnRlcm5hbCAqL1xuY29uc3QgZXJyb3JNZXNzYWdlcyQxID0ge1xuICAgIC8vIHRva2VuaXplciBlcnJvciBtZXNzYWdlc1xuICAgIFtDb21waWxlRXJyb3JDb2Rlcy5FWFBFQ1RFRF9UT0tFTl06IGBFeHBlY3RlZCB0b2tlbjogJ3swfSdgLFxuICAgIFtDb21waWxlRXJyb3JDb2Rlcy5JTlZBTElEX1RPS0VOX0lOX1BMQUNFSE9MREVSXTogYEludmFsaWQgdG9rZW4gaW4gcGxhY2Vob2xkZXI6ICd7MH0nYCxcbiAgICBbQ29tcGlsZUVycm9yQ29kZXMuVU5URVJNSU5BVEVEX1NJTkdMRV9RVU9URV9JTl9QTEFDRUhPTERFUl06IGBVbnRlcm1pbmF0ZWQgc2luZ2xlIHF1b3RlIGluIHBsYWNlaG9sZGVyYCxcbiAgICBbQ29tcGlsZUVycm9yQ29kZXMuVU5LTk9XTl9FU0NBUEVfU0VRVUVOQ0VdOiBgVW5rbm93biBlc2NhcGUgc2VxdWVuY2U6IFxcXFx7MH1gLFxuICAgIFtDb21waWxlRXJyb3JDb2Rlcy5JTlZBTElEX1VOSUNPREVfRVNDQVBFX1NFUVVFTkNFXTogYEludmFsaWQgdW5pY29kZSBlc2NhcGUgc2VxdWVuY2U6IHswfWAsXG4gICAgW0NvbXBpbGVFcnJvckNvZGVzLlVOQkFMQU5DRURfQ0xPU0lOR19CUkFDRV06IGBVbmJhbGFuY2VkIGNsb3NpbmcgYnJhY2VgLFxuICAgIFtDb21waWxlRXJyb3JDb2Rlcy5VTlRFUk1JTkFURURfQ0xPU0lOR19CUkFDRV06IGBVbnRlcm1pbmF0ZWQgY2xvc2luZyBicmFjZWAsXG4gICAgW0NvbXBpbGVFcnJvckNvZGVzLkVNUFRZX1BMQUNFSE9MREVSXTogYEVtcHR5IHBsYWNlaG9sZGVyYCxcbiAgICBbQ29tcGlsZUVycm9yQ29kZXMuTk9UX0FMTE9XX05FU1RfUExBQ0VIT0xERVJdOiBgTm90IGFsbG93ZWQgbmVzdCBwbGFjZWhvbGRlcmAsXG4gICAgW0NvbXBpbGVFcnJvckNvZGVzLklOVkFMSURfTElOS0VEX0ZPUk1BVF06IGBJbnZhbGlkIGxpbmtlZCBmb3JtYXRgLFxuICAgIC8vIHBhcnNlciBlcnJvciBtZXNzYWdlc1xuICAgIFtDb21waWxlRXJyb3JDb2Rlcy5NVVNUX0hBVkVfTUVTU0FHRVNfSU5fUExVUkFMXTogYFBsdXJhbCBtdXN0IGhhdmUgbWVzc2FnZXNgLFxuICAgIFtDb21waWxlRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX0VNUFRZX0xJTktFRF9NT0RJRklFUl06IGBVbmV4cGVjdGVkIGVtcHR5IGxpbmtlZCBtb2RpZmllcmAsXG4gICAgW0NvbXBpbGVFcnJvckNvZGVzLlVORVhQRUNURURfRU1QVFlfTElOS0VEX0tFWV06IGBVbmV4cGVjdGVkIGVtcHR5IGxpbmtlZCBrZXlgLFxuICAgIFtDb21waWxlRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX0xFWElDQUxfQU5BTFlTSVNdOiBgVW5leHBlY3RlZCBsZXhpY2FsIGFuYWx5c2lzIGluIHRva2VuOiAnezB9J2AsXG4gICAgLy8gZ2VuZXJhdG9yIGVycm9yIG1lc3NhZ2VzXG4gICAgW0NvbXBpbGVFcnJvckNvZGVzLlVOSEFORExFRF9DT0RFR0VOX05PREVfVFlQRV06IGB1bmhhbmRsZWQgY29kZWdlbiBub2RlIHR5cGU6ICd7MH0nYCxcbiAgICAvLyBtaW5pbWl6ZXIgZXJyb3IgbWVzc2FnZXNcbiAgICBbQ29tcGlsZUVycm9yQ29kZXMuVU5IQU5ETEVEX01JTklGSUVSX05PREVfVFlQRV06IGB1bmhhbmRsZWQgbWltaWZpZXIgbm9kZSB0eXBlOiAnezB9J2Bcbn07XG5mdW5jdGlvbiBjcmVhdGVDb21waWxlRXJyb3IoY29kZSwgbG9jLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7IGRvbWFpbiwgbWVzc2FnZXMsIGFyZ3MgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbXNnID0gZm9ybWF0JDEoKG1lc3NhZ2VzIHx8IGVycm9yTWVzc2FnZXMkMSlbY29kZV0gfHwgJycsIC4uLihhcmdzIHx8IFtdKSlcbiAgICAgICAgO1xuICAgIGNvbnN0IGVycm9yID0gbmV3IFN5bnRheEVycm9yKFN0cmluZyhtc2cpKTtcbiAgICBlcnJvci5jb2RlID0gY29kZTtcbiAgICBpZiAobG9jKSB7XG4gICAgICAgIGVycm9yLmxvY2F0aW9uID0gbG9jO1xuICAgIH1cbiAgICBlcnJvci5kb21haW4gPSBkb21haW47XG4gICAgcmV0dXJuIGVycm9yO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVmYXVsdE9uRXJyb3IoZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG5jb25zdCBSRV9IVE1MX1RBRyA9IC88XFwvP1tcXHdcXHM9XCIvLic6OyMtXFwvXSs+LztcbmNvbnN0IGRldGVjdEh0bWxUYWcgPSAoc291cmNlKSA9PiBSRV9IVE1MX1RBRy50ZXN0KHNvdXJjZSk7XG5cbmNvbnN0IENIQVJfU1AgPSAnICc7XG5jb25zdCBDSEFSX0NSID0gJ1xccic7XG5jb25zdCBDSEFSX0xGID0gJ1xcbic7XG5jb25zdCBDSEFSX0xTID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDIwMjgpO1xuY29uc3QgQ0hBUl9QUyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHgyMDI5KTtcbmZ1bmN0aW9uIGNyZWF0ZVNjYW5uZXIoc3RyKSB7XG4gICAgY29uc3QgX2J1ZiA9IHN0cjtcbiAgICBsZXQgX2luZGV4ID0gMDtcbiAgICBsZXQgX2xpbmUgPSAxO1xuICAgIGxldCBfY29sdW1uID0gMTtcbiAgICBsZXQgX3BlZWtPZmZzZXQgPSAwO1xuICAgIGNvbnN0IGlzQ1JMRiA9IChpbmRleCkgPT4gX2J1ZltpbmRleF0gPT09IENIQVJfQ1IgJiYgX2J1ZltpbmRleCArIDFdID09PSBDSEFSX0xGO1xuICAgIGNvbnN0IGlzTEYgPSAoaW5kZXgpID0+IF9idWZbaW5kZXhdID09PSBDSEFSX0xGO1xuICAgIGNvbnN0IGlzUFMgPSAoaW5kZXgpID0+IF9idWZbaW5kZXhdID09PSBDSEFSX1BTO1xuICAgIGNvbnN0IGlzTFMgPSAoaW5kZXgpID0+IF9idWZbaW5kZXhdID09PSBDSEFSX0xTO1xuICAgIGNvbnN0IGlzTGluZUVuZCA9IChpbmRleCkgPT4gaXNDUkxGKGluZGV4KSB8fCBpc0xGKGluZGV4KSB8fCBpc1BTKGluZGV4KSB8fCBpc0xTKGluZGV4KTtcbiAgICBjb25zdCBpbmRleCA9ICgpID0+IF9pbmRleDtcbiAgICBjb25zdCBsaW5lID0gKCkgPT4gX2xpbmU7XG4gICAgY29uc3QgY29sdW1uID0gKCkgPT4gX2NvbHVtbjtcbiAgICBjb25zdCBwZWVrT2Zmc2V0ID0gKCkgPT4gX3BlZWtPZmZzZXQ7XG4gICAgY29uc3QgY2hhckF0ID0gKG9mZnNldCkgPT4gaXNDUkxGKG9mZnNldCkgfHwgaXNQUyhvZmZzZXQpIHx8IGlzTFMob2Zmc2V0KSA/IENIQVJfTEYgOiBfYnVmW29mZnNldF07XG4gICAgY29uc3QgY3VycmVudENoYXIgPSAoKSA9PiBjaGFyQXQoX2luZGV4KTtcbiAgICBjb25zdCBjdXJyZW50UGVlayA9ICgpID0+IGNoYXJBdChfaW5kZXggKyBfcGVla09mZnNldCk7XG4gICAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgX3BlZWtPZmZzZXQgPSAwO1xuICAgICAgICBpZiAoaXNMaW5lRW5kKF9pbmRleCkpIHtcbiAgICAgICAgICAgIF9saW5lKys7XG4gICAgICAgICAgICBfY29sdW1uID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDUkxGKF9pbmRleCkpIHtcbiAgICAgICAgICAgIF9pbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIF9pbmRleCsrO1xuICAgICAgICBfY29sdW1uKys7XG4gICAgICAgIHJldHVybiBfYnVmW19pbmRleF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZWsoKSB7XG4gICAgICAgIGlmIChpc0NSTEYoX2luZGV4ICsgX3BlZWtPZmZzZXQpKSB7XG4gICAgICAgICAgICBfcGVla09mZnNldCsrO1xuICAgICAgICB9XG4gICAgICAgIF9wZWVrT2Zmc2V0Kys7XG4gICAgICAgIHJldHVybiBfYnVmW19pbmRleCArIF9wZWVrT2Zmc2V0XTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICAgIF9pbmRleCA9IDA7XG4gICAgICAgIF9saW5lID0gMTtcbiAgICAgICAgX2NvbHVtbiA9IDE7XG4gICAgICAgIF9wZWVrT2Zmc2V0ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzZXRQZWVrKG9mZnNldCA9IDApIHtcbiAgICAgICAgX3BlZWtPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNraXBUb1BlZWsoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IF9pbmRleCArIF9wZWVrT2Zmc2V0O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgICB3aGlsZSAodGFyZ2V0ICE9PSBfaW5kZXgpIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBfcGVla09mZnNldCA9IDA7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGluZGV4LFxuICAgICAgICBsaW5lLFxuICAgICAgICBjb2x1bW4sXG4gICAgICAgIHBlZWtPZmZzZXQsXG4gICAgICAgIGNoYXJBdCxcbiAgICAgICAgY3VycmVudENoYXIsXG4gICAgICAgIGN1cnJlbnRQZWVrLFxuICAgICAgICBuZXh0LFxuICAgICAgICBwZWVrLFxuICAgICAgICByZXNldCxcbiAgICAgICAgcmVzZXRQZWVrLFxuICAgICAgICBza2lwVG9QZWVrXG4gICAgfTtcbn1cblxuY29uc3QgRU9GID0gdW5kZWZpbmVkO1xuY29uc3QgRE9UID0gJy4nO1xuY29uc3QgTElURVJBTF9ERUxJTUlURVIgPSBcIidcIjtcbmNvbnN0IEVSUk9SX0RPTUFJTiQzID0gJ3Rva2VuaXplcic7XG5mdW5jdGlvbiBjcmVhdGVUb2tlbml6ZXIoc291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IG9wdGlvbnMubG9jYXRpb24gIT09IGZhbHNlO1xuICAgIGNvbnN0IF9zY25yID0gY3JlYXRlU2Nhbm5lcihzb3VyY2UpO1xuICAgIGNvbnN0IGN1cnJlbnRPZmZzZXQgPSAoKSA9PiBfc2Nuci5pbmRleCgpO1xuICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9ICgpID0+IGNyZWF0ZVBvc2l0aW9uKF9zY25yLmxpbmUoKSwgX3NjbnIuY29sdW1uKCksIF9zY25yLmluZGV4KCkpO1xuICAgIGNvbnN0IF9pbml0TG9jID0gY3VycmVudFBvc2l0aW9uKCk7XG4gICAgY29uc3QgX2luaXRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7XG4gICAgY29uc3QgX2NvbnRleHQgPSB7XG4gICAgICAgIGN1cnJlbnRUeXBlOiAxNCAvKiBUb2tlblR5cGVzLkVPRiAqLyxcbiAgICAgICAgb2Zmc2V0OiBfaW5pdE9mZnNldCxcbiAgICAgICAgc3RhcnRMb2M6IF9pbml0TG9jLFxuICAgICAgICBlbmRMb2M6IF9pbml0TG9jLFxuICAgICAgICBsYXN0VHlwZTogMTQgLyogVG9rZW5UeXBlcy5FT0YgKi8sXG4gICAgICAgIGxhc3RPZmZzZXQ6IF9pbml0T2Zmc2V0LFxuICAgICAgICBsYXN0U3RhcnRMb2M6IF9pbml0TG9jLFxuICAgICAgICBsYXN0RW5kTG9jOiBfaW5pdExvYyxcbiAgICAgICAgYnJhY2VOZXN0OiAwLFxuICAgICAgICBpbkxpbmtlZDogZmFsc2UsXG4gICAgICAgIHRleHQ6ICcnXG4gICAgfTtcbiAgICBjb25zdCBjb250ZXh0ID0gKCkgPT4gX2NvbnRleHQ7XG4gICAgY29uc3QgeyBvbkVycm9yIH0gPSBvcHRpb25zO1xuICAgIGZ1bmN0aW9uIGVtaXRFcnJvcihjb2RlLCBwb3MsIG9mZnNldCwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBjdHggPSBjb250ZXh0KCk7XG4gICAgICAgIHBvcy5jb2x1bW4gKz0gb2Zmc2V0O1xuICAgICAgICBwb3Mub2Zmc2V0ICs9IG9mZnNldDtcbiAgICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvYyA9IGxvY2F0aW9uID8gY3JlYXRlTG9jYXRpb24oY3R4LnN0YXJ0TG9jLCBwb3MpIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IGNyZWF0ZUNvbXBpbGVFcnJvcihjb2RlLCBsb2MsIHtcbiAgICAgICAgICAgICAgICBkb21haW46IEVSUk9SX0RPTUFJTiQzLFxuICAgICAgICAgICAgICAgIGFyZ3NcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb25FcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRva2VuKGNvbnRleHQsIHR5cGUsIHZhbHVlKSB7XG4gICAgICAgIGNvbnRleHQuZW5kTG9jID0gY3VycmVudFBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnRleHQuY3VycmVudFR5cGUgPSB0eXBlO1xuICAgICAgICBjb25zdCB0b2tlbiA9IHsgdHlwZSB9O1xuICAgICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgICAgIHRva2VuLmxvYyA9IGNyZWF0ZUxvY2F0aW9uKGNvbnRleHQuc3RhcnRMb2MsIGNvbnRleHQuZW5kTG9jKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdG9rZW4udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgfVxuICAgIGNvbnN0IGdldEVuZFRva2VuID0gKGNvbnRleHQpID0+IGdldFRva2VuKGNvbnRleHQsIDE0IC8qIFRva2VuVHlwZXMuRU9GICovKTtcbiAgICBmdW5jdGlvbiBlYXQoc2NuciwgY2gpIHtcbiAgICAgICAgaWYgKHNjbnIuY3VycmVudENoYXIoKSA9PT0gY2gpIHtcbiAgICAgICAgICAgIHNjbnIubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZW1pdEVycm9yKENvbXBpbGVFcnJvckNvZGVzLkVYUEVDVEVEX1RPS0VOLCBjdXJyZW50UG9zaXRpb24oKSwgMCwgY2gpO1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZWtTcGFjZXMoc2Nucikge1xuICAgICAgICBsZXQgYnVmID0gJyc7XG4gICAgICAgIHdoaWxlIChzY25yLmN1cnJlbnRQZWVrKCkgPT09IENIQVJfU1AgfHwgc2Nuci5jdXJyZW50UGVlaygpID09PSBDSEFSX0xGKSB7XG4gICAgICAgICAgICBidWYgKz0gc2Nuci5jdXJyZW50UGVlaygpO1xuICAgICAgICAgICAgc2Nuci5wZWVrKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2tpcFNwYWNlcyhzY25yKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IHBlZWtTcGFjZXMoc2Nucik7XG4gICAgICAgIHNjbnIuc2tpcFRvUGVlaygpO1xuICAgICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydChjaCkge1xuICAgICAgICBpZiAoY2ggPT09IEVPRikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNjID0gY2guY2hhckNvZGVBdCgwKTtcbiAgICAgICAgcmV0dXJuICgoY2MgPj0gOTcgJiYgY2MgPD0gMTIyKSB8fCAvLyBhLXpcbiAgICAgICAgICAgIChjYyA+PSA2NSAmJiBjYyA8PSA5MCkgfHwgLy8gQS1aXG4gICAgICAgICAgICBjYyA9PT0gOTUgLy8gX1xuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc051bWJlclN0YXJ0KGNoKSB7XG4gICAgICAgIGlmIChjaCA9PT0gRU9GKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2MgPSBjaC5jaGFyQ29kZUF0KDApO1xuICAgICAgICByZXR1cm4gY2MgPj0gNDggJiYgY2MgPD0gNTc7IC8vIDAtOVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc05hbWVkSWRlbnRpZmllclN0YXJ0KHNjbnIsIGNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW50VHlwZSB9ID0gY29udGV4dDtcbiAgICAgICAgaWYgKGN1cnJlbnRUeXBlICE9PSAyIC8qIFRva2VuVHlwZXMuQnJhY2VMZWZ0ICovKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcGVla1NwYWNlcyhzY25yKTtcbiAgICAgICAgY29uc3QgcmV0ID0gaXNJZGVudGlmaWVyU3RhcnQoc2Nuci5jdXJyZW50UGVlaygpKTtcbiAgICAgICAgc2Nuci5yZXNldFBlZWsoKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNMaXN0SWRlbnRpZmllclN0YXJ0KHNjbnIsIGNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW50VHlwZSB9ID0gY29udGV4dDtcbiAgICAgICAgaWYgKGN1cnJlbnRUeXBlICE9PSAyIC8qIFRva2VuVHlwZXMuQnJhY2VMZWZ0ICovKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcGVla1NwYWNlcyhzY25yKTtcbiAgICAgICAgY29uc3QgY2ggPSBzY25yLmN1cnJlbnRQZWVrKCkgPT09ICctJyA/IHNjbnIucGVlaygpIDogc2Nuci5jdXJyZW50UGVlaygpO1xuICAgICAgICBjb25zdCByZXQgPSBpc051bWJlclN0YXJ0KGNoKTtcbiAgICAgICAgc2Nuci5yZXNldFBlZWsoKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNMaXRlcmFsU3RhcnQoc2NuciwgY29udGV4dCkge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnRUeXBlIH0gPSBjb250ZXh0O1xuICAgICAgICBpZiAoY3VycmVudFR5cGUgIT09IDIgLyogVG9rZW5UeXBlcy5CcmFjZUxlZnQgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBwZWVrU3BhY2VzKHNjbnIpO1xuICAgICAgICBjb25zdCByZXQgPSBzY25yLmN1cnJlbnRQZWVrKCkgPT09IExJVEVSQUxfREVMSU1JVEVSO1xuICAgICAgICBzY25yLnJlc2V0UGVlaygpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0xpbmtlZERvdFN0YXJ0KHNjbnIsIGNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW50VHlwZSB9ID0gY29udGV4dDtcbiAgICAgICAgaWYgKGN1cnJlbnRUeXBlICE9PSA4IC8qIFRva2VuVHlwZXMuTGlua2VkQWxpYXMgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBwZWVrU3BhY2VzKHNjbnIpO1xuICAgICAgICBjb25zdCByZXQgPSBzY25yLmN1cnJlbnRQZWVrKCkgPT09IFwiLlwiIC8qIFRva2VuQ2hhcnMuTGlua2VkRG90ICovO1xuICAgICAgICBzY25yLnJlc2V0UGVlaygpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0xpbmtlZE1vZGlmaWVyU3RhcnQoc2NuciwgY29udGV4dCkge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnRUeXBlIH0gPSBjb250ZXh0O1xuICAgICAgICBpZiAoY3VycmVudFR5cGUgIT09IDkgLyogVG9rZW5UeXBlcy5MaW5rZWREb3QgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBwZWVrU3BhY2VzKHNjbnIpO1xuICAgICAgICBjb25zdCByZXQgPSBpc0lkZW50aWZpZXJTdGFydChzY25yLmN1cnJlbnRQZWVrKCkpO1xuICAgICAgICBzY25yLnJlc2V0UGVlaygpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0xpbmtlZERlbGltaXRlclN0YXJ0KHNjbnIsIGNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW50VHlwZSB9ID0gY29udGV4dDtcbiAgICAgICAgaWYgKCEoY3VycmVudFR5cGUgPT09IDggLyogVG9rZW5UeXBlcy5MaW5rZWRBbGlhcyAqLyB8fFxuICAgICAgICAgICAgY3VycmVudFR5cGUgPT09IDEyIC8qIFRva2VuVHlwZXMuTGlua2VkTW9kaWZpZXIgKi8pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcGVla1NwYWNlcyhzY25yKTtcbiAgICAgICAgY29uc3QgcmV0ID0gc2Nuci5jdXJyZW50UGVlaygpID09PSBcIjpcIiAvKiBUb2tlbkNoYXJzLkxpbmtlZERlbGltaXRlciAqLztcbiAgICAgICAgc2Nuci5yZXNldFBlZWsoKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNMaW5rZWRSZWZlclN0YXJ0KHNjbnIsIGNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW50VHlwZSB9ID0gY29udGV4dDtcbiAgICAgICAgaWYgKGN1cnJlbnRUeXBlICE9PSAxMCAvKiBUb2tlblR5cGVzLkxpbmtlZERlbGltaXRlciAqLykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZuID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2ggPSBzY25yLmN1cnJlbnRQZWVrKCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09IFwie1wiIC8qIFRva2VuQ2hhcnMuQnJhY2VMZWZ0ICovKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzSWRlbnRpZmllclN0YXJ0KHNjbnIucGVlaygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSBcIkBcIiAvKiBUb2tlbkNoYXJzLkxpbmtlZEFsaWFzICovIHx8XG4gICAgICAgICAgICAgICAgY2ggPT09IFwiJVwiIC8qIFRva2VuQ2hhcnMuTW9kdWxvICovIHx8XG4gICAgICAgICAgICAgICAgY2ggPT09IFwifFwiIC8qIFRva2VuQ2hhcnMuUGlwZSAqLyB8fFxuICAgICAgICAgICAgICAgIGNoID09PSBcIjpcIiAvKiBUb2tlbkNoYXJzLkxpbmtlZERlbGltaXRlciAqLyB8fFxuICAgICAgICAgICAgICAgIGNoID09PSBcIi5cIiAvKiBUb2tlbkNoYXJzLkxpbmtlZERvdCAqLyB8fFxuICAgICAgICAgICAgICAgIGNoID09PSBDSEFSX1NQIHx8XG4gICAgICAgICAgICAgICAgIWNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT09IENIQVJfTEYpIHtcbiAgICAgICAgICAgICAgICBzY25yLnBlZWsoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIG90aGVyIGNoYXJhY3RlcnNcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNJZGVudGlmaWVyU3RhcnQoY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXQgPSBmbigpO1xuICAgICAgICBzY25yLnJlc2V0UGVlaygpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1BsdXJhbFN0YXJ0KHNjbnIpIHtcbiAgICAgICAgcGVla1NwYWNlcyhzY25yKTtcbiAgICAgICAgY29uc3QgcmV0ID0gc2Nuci5jdXJyZW50UGVlaygpID09PSBcInxcIiAvKiBUb2tlbkNoYXJzLlBpcGUgKi87XG4gICAgICAgIHNjbnIucmVzZXRQZWVrKCk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRldGVjdE1vZHVsb1N0YXJ0KHNjbnIpIHtcbiAgICAgICAgY29uc3Qgc3BhY2VzID0gcGVla1NwYWNlcyhzY25yKTtcbiAgICAgICAgY29uc3QgcmV0ID0gc2Nuci5jdXJyZW50UGVlaygpID09PSBcIiVcIiAvKiBUb2tlbkNoYXJzLk1vZHVsbyAqLyAmJlxuICAgICAgICAgICAgc2Nuci5wZWVrKCkgPT09IFwie1wiIC8qIFRva2VuQ2hhcnMuQnJhY2VMZWZ0ICovO1xuICAgICAgICBzY25yLnJlc2V0UGVlaygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNNb2R1bG86IHJldCxcbiAgICAgICAgICAgIGhhc1NwYWNlOiBzcGFjZXMubGVuZ3RoID4gMFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1RleHRTdGFydChzY25yLCByZXNldCA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgZm4gPSAoaGFzU3BhY2UgPSBmYWxzZSwgcHJldiA9ICcnLCBkZXRlY3RNb2R1bG8gPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2ggPSBzY25yLmN1cnJlbnRQZWVrKCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09IFwie1wiIC8qIFRva2VuQ2hhcnMuQnJhY2VMZWZ0ICovKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgPT09IFwiJVwiIC8qIFRva2VuQ2hhcnMuTW9kdWxvICovID8gZmFsc2UgOiBoYXNTcGFjZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSBcIkBcIiAvKiBUb2tlbkNoYXJzLkxpbmtlZEFsaWFzICovIHx8ICFjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ID09PSBcIiVcIiAvKiBUb2tlbkNoYXJzLk1vZHVsbyAqLyA/IHRydWUgOiBoYXNTcGFjZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSBcIiVcIiAvKiBUb2tlbkNoYXJzLk1vZHVsbyAqLykge1xuICAgICAgICAgICAgICAgIHNjbnIucGVlaygpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmbihoYXNTcGFjZSwgXCIlXCIgLyogVG9rZW5DaGFycy5Nb2R1bG8gKi8sIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT09IFwifFwiIC8qIFRva2VuQ2hhcnMuUGlwZSAqLykge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ID09PSBcIiVcIiAvKiBUb2tlbkNoYXJzLk1vZHVsbyAqLyB8fCBkZXRlY3RNb2R1bG9cbiAgICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICAgIDogIShwcmV2ID09PSBDSEFSX1NQIHx8IHByZXYgPT09IENIQVJfTEYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT09IENIQVJfU1ApIHtcbiAgICAgICAgICAgICAgICBzY25yLnBlZWsoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4odHJ1ZSwgQ0hBUl9TUCwgZGV0ZWN0TW9kdWxvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSBDSEFSX0xGKSB7XG4gICAgICAgICAgICAgICAgc2Nuci5wZWVrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuKHRydWUsIENIQVJfTEYsIGRldGVjdE1vZHVsbyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmV0ID0gZm4oKTtcbiAgICAgICAgcmVzZXQgJiYgc2Nuci5yZXNldFBlZWsoKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGFrZUNoYXIoc2NuciwgZm4pIHtcbiAgICAgICAgY29uc3QgY2ggPSBzY25yLmN1cnJlbnRDaGFyKCk7XG4gICAgICAgIGlmIChjaCA9PT0gRU9GKSB7XG4gICAgICAgICAgICByZXR1cm4gRU9GO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmbihjaCkpIHtcbiAgICAgICAgICAgIHNjbnIubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0YWtlSWRlbnRpZmllckNoYXIoc2Nucikge1xuICAgICAgICBjb25zdCBjbG9zdXJlID0gKGNoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYyA9IGNoLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICByZXR1cm4gKChjYyA+PSA5NyAmJiBjYyA8PSAxMjIpIHx8IC8vIGEtelxuICAgICAgICAgICAgICAgIChjYyA+PSA2NSAmJiBjYyA8PSA5MCkgfHwgLy8gQS1aXG4gICAgICAgICAgICAgICAgKGNjID49IDQ4ICYmIGNjIDw9IDU3KSB8fCAvLyAwLTlcbiAgICAgICAgICAgICAgICBjYyA9PT0gOTUgfHwgLy8gX1xuICAgICAgICAgICAgICAgIGNjID09PSAzNiAvLyAkXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGFrZUNoYXIoc2NuciwgY2xvc3VyZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRha2VEaWdpdChzY25yKSB7XG4gICAgICAgIGNvbnN0IGNsb3N1cmUgPSAoY2gpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNjID0gY2guY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgIHJldHVybiBjYyA+PSA0OCAmJiBjYyA8PSA1NzsgLy8gMC05XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0YWtlQ2hhcihzY25yLCBjbG9zdXJlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGFrZUhleERpZ2l0KHNjbnIpIHtcbiAgICAgICAgY29uc3QgY2xvc3VyZSA9IChjaCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2MgPSBjaC5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgcmV0dXJuICgoY2MgPj0gNDggJiYgY2MgPD0gNTcpIHx8IC8vIDAtOVxuICAgICAgICAgICAgICAgIChjYyA+PSA2NSAmJiBjYyA8PSA3MCkgfHwgLy8gQS1GXG4gICAgICAgICAgICAgICAgKGNjID49IDk3ICYmIGNjIDw9IDEwMikpOyAvLyBhLWZcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRha2VDaGFyKHNjbnIsIGNsb3N1cmUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXREaWdpdHMoc2Nucikge1xuICAgICAgICBsZXQgY2ggPSAnJztcbiAgICAgICAgbGV0IG51bSA9ICcnO1xuICAgICAgICB3aGlsZSAoKGNoID0gdGFrZURpZ2l0KHNjbnIpKSkge1xuICAgICAgICAgICAgbnVtICs9IGNoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRNb2R1bG8oc2Nucikge1xuICAgICAgICBza2lwU3BhY2VzKHNjbnIpO1xuICAgICAgICBjb25zdCBjaCA9IHNjbnIuY3VycmVudENoYXIoKTtcbiAgICAgICAgaWYgKGNoICE9PSBcIiVcIiAvKiBUb2tlbkNoYXJzLk1vZHVsbyAqLykge1xuICAgICAgICAgICAgZW1pdEVycm9yKENvbXBpbGVFcnJvckNvZGVzLkVYUEVDVEVEX1RPS0VOLCBjdXJyZW50UG9zaXRpb24oKSwgMCwgY2gpO1xuICAgICAgICB9XG4gICAgICAgIHNjbnIubmV4dCgpO1xuICAgICAgICByZXR1cm4gXCIlXCIgLyogVG9rZW5DaGFycy5Nb2R1bG8gKi87XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRUZXh0KHNjbnIpIHtcbiAgICAgICAgbGV0IGJ1ZiA9ICcnO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCBjaCA9IHNjbnIuY3VycmVudENoYXIoKTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gXCJ7XCIgLyogVG9rZW5DaGFycy5CcmFjZUxlZnQgKi8gfHxcbiAgICAgICAgICAgICAgICBjaCA9PT0gXCJ9XCIgLyogVG9rZW5DaGFycy5CcmFjZVJpZ2h0ICovIHx8XG4gICAgICAgICAgICAgICAgY2ggPT09IFwiQFwiIC8qIFRva2VuQ2hhcnMuTGlua2VkQWxpYXMgKi8gfHxcbiAgICAgICAgICAgICAgICBjaCA9PT0gXCJ8XCIgLyogVG9rZW5DaGFycy5QaXBlICovIHx8XG4gICAgICAgICAgICAgICAgIWNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gXCIlXCIgLyogVG9rZW5DaGFycy5Nb2R1bG8gKi8pIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNUZXh0U3RhcnQoc2NucikpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmICs9IGNoO1xuICAgICAgICAgICAgICAgICAgICBzY25yLm5leHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSBDSEFSX1NQIHx8IGNoID09PSBDSEFSX0xGKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVGV4dFN0YXJ0KHNjbnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZiArPSBjaDtcbiAgICAgICAgICAgICAgICAgICAgc2Nuci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzUGx1cmFsU3RhcnQoc2NucikpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBidWYgKz0gY2g7XG4gICAgICAgICAgICAgICAgICAgIHNjbnIubmV4dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ1ZiArPSBjaDtcbiAgICAgICAgICAgICAgICBzY25yLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkTmFtZWRJZGVudGlmaWVyKHNjbnIpIHtcbiAgICAgICAgc2tpcFNwYWNlcyhzY25yKTtcbiAgICAgICAgbGV0IGNoID0gJyc7XG4gICAgICAgIGxldCBuYW1lID0gJyc7XG4gICAgICAgIHdoaWxlICgoY2ggPSB0YWtlSWRlbnRpZmllckNoYXIoc2NucikpKSB7XG4gICAgICAgICAgICBuYW1lICs9IGNoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY25yLmN1cnJlbnRDaGFyKCkgPT09IEVPRikge1xuICAgICAgICAgICAgZW1pdEVycm9yKENvbXBpbGVFcnJvckNvZGVzLlVOVEVSTUlOQVRFRF9DTE9TSU5HX0JSQUNFLCBjdXJyZW50UG9zaXRpb24oKSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRMaXN0SWRlbnRpZmllcihzY25yKSB7XG4gICAgICAgIHNraXBTcGFjZXMoc2Nucik7XG4gICAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgICBpZiAoc2Nuci5jdXJyZW50Q2hhcigpID09PSAnLScpIHtcbiAgICAgICAgICAgIHNjbnIubmV4dCgpO1xuICAgICAgICAgICAgdmFsdWUgKz0gYC0ke2dldERpZ2l0cyhzY25yKX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgKz0gZ2V0RGlnaXRzKHNjbnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY25yLmN1cnJlbnRDaGFyKCkgPT09IEVPRikge1xuICAgICAgICAgICAgZW1pdEVycm9yKENvbXBpbGVFcnJvckNvZGVzLlVOVEVSTUlOQVRFRF9DTE9TSU5HX0JSQUNFLCBjdXJyZW50UG9zaXRpb24oKSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkTGl0ZXJhbChzY25yKSB7XG4gICAgICAgIHNraXBTcGFjZXMoc2Nucik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICAgICAgICBlYXQoc2NuciwgYFxcJ2ApO1xuICAgICAgICBsZXQgY2ggPSAnJztcbiAgICAgICAgbGV0IGxpdGVyYWwgPSAnJztcbiAgICAgICAgY29uc3QgZm4gPSAoeCkgPT4geCAhPT0gTElURVJBTF9ERUxJTUlURVIgJiYgeCAhPT0gQ0hBUl9MRjtcbiAgICAgICAgd2hpbGUgKChjaCA9IHRha2VDaGFyKHNjbnIsIGZuKSkpIHtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgbGl0ZXJhbCArPSByZWFkRXNjYXBlU2VxdWVuY2Uoc2Nucik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsaXRlcmFsICs9IGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBzY25yLmN1cnJlbnRDaGFyKCk7XG4gICAgICAgIGlmIChjdXJyZW50ID09PSBDSEFSX0xGIHx8IGN1cnJlbnQgPT09IEVPRikge1xuICAgICAgICAgICAgZW1pdEVycm9yKENvbXBpbGVFcnJvckNvZGVzLlVOVEVSTUlOQVRFRF9TSU5HTEVfUVVPVEVfSU5fUExBQ0VIT0xERVIsIGN1cnJlbnRQb3NpdGlvbigpLCAwKTtcbiAgICAgICAgICAgIC8vIFRPRE86IElzIGl0IGNvcnJlY3QgcmVhbGx5P1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IENIQVJfTEYpIHtcbiAgICAgICAgICAgICAgICBzY25yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgICAgICAgICAgICAgICBlYXQoc2NuciwgYFxcJ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGxpdGVyYWw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgICAgIGVhdChzY25yLCBgXFwnYCk7XG4gICAgICAgIHJldHVybiBsaXRlcmFsO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkRXNjYXBlU2VxdWVuY2Uoc2Nucikge1xuICAgICAgICBjb25zdCBjaCA9IHNjbnIuY3VycmVudENoYXIoKTtcbiAgICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICBjYXNlIGBcXCdgOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgICAgICAgICAgICAgc2Nuci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcXFxcJHtjaH1gO1xuICAgICAgICAgICAgY2FzZSAndSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRVbmljb2RlRXNjYXBlU2VxdWVuY2Uoc2NuciwgY2gsIDQpO1xuICAgICAgICAgICAgY2FzZSAnVSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRVbmljb2RlRXNjYXBlU2VxdWVuY2Uoc2NuciwgY2gsIDYpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBlbWl0RXJyb3IoQ29tcGlsZUVycm9yQ29kZXMuVU5LTk9XTl9FU0NBUEVfU0VRVUVOQ0UsIGN1cnJlbnRQb3NpdGlvbigpLCAwLCBjaCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRVbmljb2RlRXNjYXBlU2VxdWVuY2Uoc2NuciwgdW5pY29kZSwgZGlnaXRzKSB7XG4gICAgICAgIGVhdChzY25yLCB1bmljb2RlKTtcbiAgICAgICAgbGV0IHNlcXVlbmNlID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlnaXRzOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoID0gdGFrZUhleERpZ2l0KHNjbnIpO1xuICAgICAgICAgICAgaWYgKCFjaCkge1xuICAgICAgICAgICAgICAgIGVtaXRFcnJvcihDb21waWxlRXJyb3JDb2Rlcy5JTlZBTElEX1VOSUNPREVfRVNDQVBFX1NFUVVFTkNFLCBjdXJyZW50UG9zaXRpb24oKSwgMCwgYFxcXFwke3VuaWNvZGV9JHtzZXF1ZW5jZX0ke3NjbnIuY3VycmVudENoYXIoKX1gKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcXVlbmNlICs9IGNoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgXFxcXCR7dW5pY29kZX0ke3NlcXVlbmNlfWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRJbnZhbGlkSWRlbnRpZmllcihzY25yKSB7XG4gICAgICAgIHNraXBTcGFjZXMoc2Nucik7XG4gICAgICAgIGxldCBjaCA9ICcnO1xuICAgICAgICBsZXQgaWRlbnRpZmllcnMgPSAnJztcbiAgICAgICAgY29uc3QgY2xvc3VyZSA9IChjaCkgPT4gY2ggIT09IFwie1wiIC8qIFRva2VuQ2hhcnMuQnJhY2VMZWZ0ICovICYmXG4gICAgICAgICAgICBjaCAhPT0gXCJ9XCIgLyogVG9rZW5DaGFycy5CcmFjZVJpZ2h0ICovICYmXG4gICAgICAgICAgICBjaCAhPT0gQ0hBUl9TUCAmJlxuICAgICAgICAgICAgY2ggIT09IENIQVJfTEY7XG4gICAgICAgIHdoaWxlICgoY2ggPSB0YWtlQ2hhcihzY25yLCBjbG9zdXJlKSkpIHtcbiAgICAgICAgICAgIGlkZW50aWZpZXJzICs9IGNoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZGVudGlmaWVycztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZExpbmtlZE1vZGlmaWVyKHNjbnIpIHtcbiAgICAgICAgbGV0IGNoID0gJyc7XG4gICAgICAgIGxldCBuYW1lID0gJyc7XG4gICAgICAgIHdoaWxlICgoY2ggPSB0YWtlSWRlbnRpZmllckNoYXIoc2NucikpKSB7XG4gICAgICAgICAgICBuYW1lICs9IGNoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkTGlua2VkUmVmZXIoc2Nucikge1xuICAgICAgICBjb25zdCBmbiA9IChkZXRlY3QgPSBmYWxzZSwgYnVmKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaCA9IHNjbnIuY3VycmVudENoYXIoKTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gXCJ7XCIgLyogVG9rZW5DaGFycy5CcmFjZUxlZnQgKi8gfHxcbiAgICAgICAgICAgICAgICBjaCA9PT0gXCIlXCIgLyogVG9rZW5DaGFycy5Nb2R1bG8gKi8gfHxcbiAgICAgICAgICAgICAgICBjaCA9PT0gXCJAXCIgLyogVG9rZW5DaGFycy5MaW5rZWRBbGlhcyAqLyB8fFxuICAgICAgICAgICAgICAgIGNoID09PSBcInxcIiAvKiBUb2tlbkNoYXJzLlBpcGUgKi8gfHxcbiAgICAgICAgICAgICAgICBjaCA9PT0gXCIoXCIgLyogVG9rZW5DaGFycy5QYXJlbkxlZnQgKi8gfHxcbiAgICAgICAgICAgICAgICBjaCA9PT0gXCIpXCIgLyogVG9rZW5DaGFycy5QYXJlblJpZ2h0ICovIHx8XG4gICAgICAgICAgICAgICAgIWNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSBDSEFSX1NQKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSBDSEFSX0xGIHx8IGNoID09PSBET1QpIHtcbiAgICAgICAgICAgICAgICBidWYgKz0gY2g7XG4gICAgICAgICAgICAgICAgc2Nuci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuKGRldGVjdCwgYnVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ1ZiArPSBjaDtcbiAgICAgICAgICAgICAgICBzY25yLm5leHQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4odHJ1ZSwgYnVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZuKGZhbHNlLCAnJyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRQbHVyYWwoc2Nucikge1xuICAgICAgICBza2lwU3BhY2VzKHNjbnIpO1xuICAgICAgICBjb25zdCBwbHVyYWwgPSBlYXQoc2NuciwgXCJ8XCIgLyogVG9rZW5DaGFycy5QaXBlICovKTtcbiAgICAgICAgc2tpcFNwYWNlcyhzY25yKTtcbiAgICAgICAgcmV0dXJuIHBsdXJhbDtcbiAgICB9XG4gICAgLy8gVE9ETzogV2UgbmVlZCByZWZhY3RvcmluZyBvZiB0b2tlbiBwYXJzaW5nIC4uLlxuICAgIGZ1bmN0aW9uIHJlYWRUb2tlbkluUGxhY2Vob2xkZXIoc2NuciwgY29udGV4dCkge1xuICAgICAgICBsZXQgdG9rZW4gPSBudWxsO1xuICAgICAgICBjb25zdCBjaCA9IHNjbnIuY3VycmVudENoYXIoKTtcbiAgICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgICAgICAgY2FzZSBcIntcIiAvKiBUb2tlbkNoYXJzLkJyYWNlTGVmdCAqLzpcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5icmFjZU5lc3QgPj0gMSkge1xuICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoQ29tcGlsZUVycm9yQ29kZXMuTk9UX0FMTE9XX05FU1RfUExBQ0VIT0xERVIsIGN1cnJlbnRQb3NpdGlvbigpLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2Nuci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBnZXRUb2tlbihjb250ZXh0LCAyIC8qIFRva2VuVHlwZXMuQnJhY2VMZWZ0ICovLCBcIntcIiAvKiBUb2tlbkNoYXJzLkJyYWNlTGVmdCAqLyk7XG4gICAgICAgICAgICAgICAgc2tpcFNwYWNlcyhzY25yKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmJyYWNlTmVzdCsrO1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIGNhc2UgXCJ9XCIgLyogVG9rZW5DaGFycy5CcmFjZVJpZ2h0ICovOlxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmJyYWNlTmVzdCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50VHlwZSA9PT0gMiAvKiBUb2tlblR5cGVzLkJyYWNlTGVmdCAqLykge1xuICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoQ29tcGlsZUVycm9yQ29kZXMuRU1QVFlfUExBQ0VIT0xERVIsIGN1cnJlbnRQb3NpdGlvbigpLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2Nuci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBnZXRUb2tlbihjb250ZXh0LCAzIC8qIFRva2VuVHlwZXMuQnJhY2VSaWdodCAqLywgXCJ9XCIgLyogVG9rZW5DaGFycy5CcmFjZVJpZ2h0ICovKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmJyYWNlTmVzdC0tO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuYnJhY2VOZXN0ID4gMCAmJiBza2lwU3BhY2VzKHNjbnIpO1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmluTGlua2VkICYmIGNvbnRleHQuYnJhY2VOZXN0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuaW5MaW5rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgY2FzZSBcIkBcIiAvKiBUb2tlbkNoYXJzLkxpbmtlZEFsaWFzICovOlxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmJyYWNlTmVzdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKENvbXBpbGVFcnJvckNvZGVzLlVOVEVSTUlOQVRFRF9DTE9TSU5HX0JSQUNFLCBjdXJyZW50UG9zaXRpb24oKSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRva2VuID0gcmVhZFRva2VuSW5MaW5rZWQoc2NuciwgY29udGV4dCkgfHwgZ2V0RW5kVG9rZW4oY29udGV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5icmFjZU5lc3QgPSAwO1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsaWROYW1lZElkZW50aWZpZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGxldCB2YWxpZExpc3RJZGVudGlmaWVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBsZXQgdmFsaWRMaXRlcmFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVyYWxTdGFydChzY25yKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5icmFjZU5lc3QgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoQ29tcGlsZUVycm9yQ29kZXMuVU5URVJNSU5BVEVEX0NMT1NJTkdfQlJBQ0UsIGN1cnJlbnRQb3NpdGlvbigpLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGdldFRva2VuKGNvbnRleHQsIDEgLyogVG9rZW5UeXBlcy5QaXBlICovLCByZWFkUGx1cmFsKHNjbnIpKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXRcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5icmFjZU5lc3QgPSAwO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmluTGlua2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuYnJhY2VOZXN0ID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAoY29udGV4dC5jdXJyZW50VHlwZSA9PT0gNSAvKiBUb2tlblR5cGVzLk5hbWVkICovIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRUeXBlID09PSA2IC8qIFRva2VuVHlwZXMuTGlzdCAqLyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50VHlwZSA9PT0gNyAvKiBUb2tlblR5cGVzLkxpdGVyYWwgKi8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGVtaXRFcnJvcihDb21waWxlRXJyb3JDb2Rlcy5VTlRFUk1JTkFURURfQ0xPU0lOR19CUkFDRSwgY3VycmVudFBvc2l0aW9uKCksIDApO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmJyYWNlTmVzdCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFkVG9rZW4oc2NuciwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgodmFsaWROYW1lZElkZW50aWZpZXIgPSBpc05hbWVkSWRlbnRpZmllclN0YXJ0KHNjbnIsIGNvbnRleHQpKSkge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGdldFRva2VuKGNvbnRleHQsIDUgLyogVG9rZW5UeXBlcy5OYW1lZCAqLywgcmVhZE5hbWVkSWRlbnRpZmllcihzY25yKSk7XG4gICAgICAgICAgICAgICAgICAgIHNraXBTcGFjZXMoc2Nucik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCh2YWxpZExpc3RJZGVudGlmaWVyID0gaXNMaXN0SWRlbnRpZmllclN0YXJ0KHNjbnIsIGNvbnRleHQpKSkge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGdldFRva2VuKGNvbnRleHQsIDYgLyogVG9rZW5UeXBlcy5MaXN0ICovLCByZWFkTGlzdElkZW50aWZpZXIoc2NucikpO1xuICAgICAgICAgICAgICAgICAgICBza2lwU3BhY2VzKHNjbnIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgodmFsaWRMaXRlcmFsID0gaXNMaXRlcmFsU3RhcnQoc2NuciwgY29udGV4dCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gZ2V0VG9rZW4oY29udGV4dCwgNyAvKiBUb2tlblR5cGVzLkxpdGVyYWwgKi8sIHJlYWRMaXRlcmFsKHNjbnIpKTtcbiAgICAgICAgICAgICAgICAgICAgc2tpcFNwYWNlcyhzY25yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkTmFtZWRJZGVudGlmaWVyICYmICF2YWxpZExpc3RJZGVudGlmaWVyICYmICF2YWxpZExpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogd2Ugc2hvdWxkIGJlIHJlLWRlc2lnbmVkIGludmFsaWQgY2FzZXMsIHdoZW4gd2Ugd2lsbCBleHRlbmQgbWVzc2FnZSBzeW50YXggbmVhciB0aGUgZnV0dXJlIC4uLlxuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGdldFRva2VuKGNvbnRleHQsIDEzIC8qIFRva2VuVHlwZXMuSW52YWxpZFBsYWNlICovLCByZWFkSW52YWxpZElkZW50aWZpZXIoc2NucikpO1xuICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoQ29tcGlsZUVycm9yQ29kZXMuSU5WQUxJRF9UT0tFTl9JTl9QTEFDRUhPTERFUiwgY3VycmVudFBvc2l0aW9uKCksIDAsIHRva2VuLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgc2tpcFNwYWNlcyhzY25yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgfVxuICAgIC8vIFRPRE86IFdlIG5lZWQgcmVmYWN0b3Jpbmcgb2YgdG9rZW4gcGFyc2luZyAuLi5cbiAgICBmdW5jdGlvbiByZWFkVG9rZW5JbkxpbmtlZChzY25yLCBjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudFR5cGUgfSA9IGNvbnRleHQ7XG4gICAgICAgIGxldCB0b2tlbiA9IG51bGw7XG4gICAgICAgIGNvbnN0IGNoID0gc2Nuci5jdXJyZW50Q2hhcigpO1xuICAgICAgICBpZiAoKGN1cnJlbnRUeXBlID09PSA4IC8qIFRva2VuVHlwZXMuTGlua2VkQWxpYXMgKi8gfHxcbiAgICAgICAgICAgIGN1cnJlbnRUeXBlID09PSA5IC8qIFRva2VuVHlwZXMuTGlua2VkRG90ICovIHx8XG4gICAgICAgICAgICBjdXJyZW50VHlwZSA9PT0gMTIgLyogVG9rZW5UeXBlcy5MaW5rZWRNb2RpZmllciAqLyB8fFxuICAgICAgICAgICAgY3VycmVudFR5cGUgPT09IDEwIC8qIFRva2VuVHlwZXMuTGlua2VkRGVsaW1pdGVyICovKSAmJlxuICAgICAgICAgICAgKGNoID09PSBDSEFSX0xGIHx8IGNoID09PSBDSEFSX1NQKSkge1xuICAgICAgICAgICAgZW1pdEVycm9yKENvbXBpbGVFcnJvckNvZGVzLklOVkFMSURfTElOS0VEX0ZPUk1BVCwgY3VycmVudFBvc2l0aW9uKCksIDApO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgICAgIGNhc2UgXCJAXCIgLyogVG9rZW5DaGFycy5MaW5rZWRBbGlhcyAqLzpcbiAgICAgICAgICAgICAgICBzY25yLm5leHQoKTtcbiAgICAgICAgICAgICAgICB0b2tlbiA9IGdldFRva2VuKGNvbnRleHQsIDggLyogVG9rZW5UeXBlcy5MaW5rZWRBbGlhcyAqLywgXCJAXCIgLyogVG9rZW5DaGFycy5MaW5rZWRBbGlhcyAqLyk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5pbkxpbmtlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgY2FzZSBcIi5cIiAvKiBUb2tlbkNoYXJzLkxpbmtlZERvdCAqLzpcbiAgICAgICAgICAgICAgICBza2lwU3BhY2VzKHNjbnIpO1xuICAgICAgICAgICAgICAgIHNjbnIubmV4dCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRUb2tlbihjb250ZXh0LCA5IC8qIFRva2VuVHlwZXMuTGlua2VkRG90ICovLCBcIi5cIiAvKiBUb2tlbkNoYXJzLkxpbmtlZERvdCAqLyk7XG4gICAgICAgICAgICBjYXNlIFwiOlwiIC8qIFRva2VuQ2hhcnMuTGlua2VkRGVsaW1pdGVyICovOlxuICAgICAgICAgICAgICAgIHNraXBTcGFjZXMoc2Nucik7XG4gICAgICAgICAgICAgICAgc2Nuci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFRva2VuKGNvbnRleHQsIDEwIC8qIFRva2VuVHlwZXMuTGlua2VkRGVsaW1pdGVyICovLCBcIjpcIiAvKiBUb2tlbkNoYXJzLkxpbmtlZERlbGltaXRlciAqLyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChpc1BsdXJhbFN0YXJ0KHNjbnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gZ2V0VG9rZW4oY29udGV4dCwgMSAvKiBUb2tlblR5cGVzLlBpcGUgKi8sIHJlYWRQbHVyYWwoc2NucikpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZXNldFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmJyYWNlTmVzdCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuaW5MaW5rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNMaW5rZWREb3RTdGFydChzY25yLCBjb250ZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICBpc0xpbmtlZERlbGltaXRlclN0YXJ0KHNjbnIsIGNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNraXBTcGFjZXMoc2Nucik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFkVG9rZW5JbkxpbmtlZChzY25yLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzTGlua2VkTW9kaWZpZXJTdGFydChzY25yLCBjb250ZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICBza2lwU3BhY2VzKHNjbnIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VG9rZW4oY29udGV4dCwgMTIgLyogVG9rZW5UeXBlcy5MaW5rZWRNb2RpZmllciAqLywgcmVhZExpbmtlZE1vZGlmaWVyKHNjbnIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzTGlua2VkUmVmZXJTdGFydChzY25yLCBjb250ZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICBza2lwU3BhY2VzKHNjbnIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IFwie1wiIC8qIFRva2VuQ2hhcnMuQnJhY2VMZWZ0ICovKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzY2FuIHRoZSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRUb2tlbkluUGxhY2Vob2xkZXIoc2NuciwgY29udGV4dCkgfHwgdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VG9rZW4oY29udGV4dCwgMTEgLyogVG9rZW5UeXBlcy5MaW5rZWRLZXkgKi8sIHJlYWRMaW5rZWRSZWZlcihzY25yKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRUeXBlID09PSA4IC8qIFRva2VuVHlwZXMuTGlua2VkQWxpYXMgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKENvbXBpbGVFcnJvckNvZGVzLklOVkFMSURfTElOS0VEX0ZPUk1BVCwgY3VycmVudFBvc2l0aW9uKCksIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250ZXh0LmJyYWNlTmVzdCA9IDA7XG4gICAgICAgICAgICAgICAgY29udGV4dC5pbkxpbmtlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWFkVG9rZW4oc2NuciwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVE9ETzogV2UgbmVlZCByZWZhY3RvcmluZyBvZiB0b2tlbiBwYXJzaW5nIC4uLlxuICAgIGZ1bmN0aW9uIHJlYWRUb2tlbihzY25yLCBjb250ZXh0KSB7XG4gICAgICAgIGxldCB0b2tlbiA9IHsgdHlwZTogMTQgLyogVG9rZW5UeXBlcy5FT0YgKi8gfTtcbiAgICAgICAgaWYgKGNvbnRleHQuYnJhY2VOZXN0ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRUb2tlbkluUGxhY2Vob2xkZXIoc2NuciwgY29udGV4dCkgfHwgZ2V0RW5kVG9rZW4oY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHQuaW5MaW5rZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkVG9rZW5JbkxpbmtlZChzY25yLCBjb250ZXh0KSB8fCBnZXRFbmRUb2tlbihjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaCA9IHNjbnIuY3VycmVudENoYXIoKTtcbiAgICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgICAgICAgY2FzZSBcIntcIiAvKiBUb2tlbkNoYXJzLkJyYWNlTGVmdCAqLzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZFRva2VuSW5QbGFjZWhvbGRlcihzY25yLCBjb250ZXh0KSB8fCBnZXRFbmRUb2tlbihjb250ZXh0KTtcbiAgICAgICAgICAgIGNhc2UgXCJ9XCIgLyogVG9rZW5DaGFycy5CcmFjZVJpZ2h0ICovOlxuICAgICAgICAgICAgICAgIGVtaXRFcnJvcihDb21waWxlRXJyb3JDb2Rlcy5VTkJBTEFOQ0VEX0NMT1NJTkdfQlJBQ0UsIGN1cnJlbnRQb3NpdGlvbigpLCAwKTtcbiAgICAgICAgICAgICAgICBzY25yLm5leHQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VG9rZW4oY29udGV4dCwgMyAvKiBUb2tlblR5cGVzLkJyYWNlUmlnaHQgKi8sIFwifVwiIC8qIFRva2VuQ2hhcnMuQnJhY2VSaWdodCAqLyk7XG4gICAgICAgICAgICBjYXNlIFwiQFwiIC8qIFRva2VuQ2hhcnMuTGlua2VkQWxpYXMgKi86XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRUb2tlbkluTGlua2VkKHNjbnIsIGNvbnRleHQpIHx8IGdldEVuZFRva2VuKGNvbnRleHQpO1xuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIGlmIChpc1BsdXJhbFN0YXJ0KHNjbnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gZ2V0VG9rZW4oY29udGV4dCwgMSAvKiBUb2tlblR5cGVzLlBpcGUgKi8sIHJlYWRQbHVyYWwoc2NucikpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZXNldFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmJyYWNlTmVzdCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuaW5MaW5rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB7IGlzTW9kdWxvLCBoYXNTcGFjZSB9ID0gZGV0ZWN0TW9kdWxvU3RhcnQoc2Nucik7XG4gICAgICAgICAgICAgICAgaWYgKGlzTW9kdWxvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNTcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBnZXRUb2tlbihjb250ZXh0LCAwIC8qIFRva2VuVHlwZXMuVGV4dCAqLywgcmVhZFRleHQoc2NucikpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGdldFRva2VuKGNvbnRleHQsIDQgLyogVG9rZW5UeXBlcy5Nb2R1bG8gKi8sIHJlYWRNb2R1bG8oc2NucikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNUZXh0U3RhcnQoc2NucikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFRva2VuKGNvbnRleHQsIDAgLyogVG9rZW5UeXBlcy5UZXh0ICovLCByZWFkVGV4dChzY25yKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbmV4dFRva2VuKCkge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnRUeXBlLCBvZmZzZXQsIHN0YXJ0TG9jLCBlbmRMb2MgfSA9IF9jb250ZXh0O1xuICAgICAgICBfY29udGV4dC5sYXN0VHlwZSA9IGN1cnJlbnRUeXBlO1xuICAgICAgICBfY29udGV4dC5sYXN0T2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICBfY29udGV4dC5sYXN0U3RhcnRMb2MgPSBzdGFydExvYztcbiAgICAgICAgX2NvbnRleHQubGFzdEVuZExvYyA9IGVuZExvYztcbiAgICAgICAgX2NvbnRleHQub2Zmc2V0ID0gY3VycmVudE9mZnNldCgpO1xuICAgICAgICBfY29udGV4dC5zdGFydExvYyA9IGN1cnJlbnRQb3NpdGlvbigpO1xuICAgICAgICBpZiAoX3NjbnIuY3VycmVudENoYXIoKSA9PT0gRU9GKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0VG9rZW4oX2NvbnRleHQsIDE0IC8qIFRva2VuVHlwZXMuRU9GICovKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVhZFRva2VuKF9zY25yLCBfY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG5leHRUb2tlbixcbiAgICAgICAgY3VycmVudE9mZnNldCxcbiAgICAgICAgY3VycmVudFBvc2l0aW9uLFxuICAgICAgICBjb250ZXh0XG4gICAgfTtcbn1cblxuY29uc3QgRVJST1JfRE9NQUlOJDIgPSAncGFyc2VyJztcbi8vIEJhY2tzbGFzaCBiYWNrc2xhc2gsIGJhY2tzbGFzaCBxdW90ZSwgdUhISEgsIFVISEhISEguXG5jb25zdCBLTk9XTl9FU0NBUEVTID0gLyg/OlxcXFxcXFxcfFxcXFwnfFxcXFx1KFswLTlhLWZBLUZdezR9KXxcXFxcVShbMC05YS1mQS1GXXs2fSkpL2c7XG5mdW5jdGlvbiBmcm9tRXNjYXBlU2VxdWVuY2UobWF0Y2gsIGNvZGVQb2ludDQsIGNvZGVQb2ludDYpIHtcbiAgICBzd2l0Y2ggKG1hdGNoKSB7XG4gICAgICAgIGNhc2UgYFxcXFxcXFxcYDpcbiAgICAgICAgICAgIHJldHVybiBgXFxcXGA7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICAgICAgICBjYXNlIGBcXFxcXFwnYDpcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICAgICAgICAgICAgcmV0dXJuIGBcXCdgO1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBjb25zdCBjb2RlUG9pbnQgPSBwYXJzZUludChjb2RlUG9pbnQ0IHx8IGNvZGVQb2ludDYsIDE2KTtcbiAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHhkN2ZmIHx8IGNvZGVQb2ludCA+PSAweGUwMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGludmFsaWQgLi4uXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZW0gd2l0aCBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSLlxuICAgICAgICAgICAgcmV0dXJuICfvv70nO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlUGFyc2VyKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gb3B0aW9ucy5sb2NhdGlvbiAhPT0gZmFsc2U7XG4gICAgY29uc3QgeyBvbkVycm9yIH0gPSBvcHRpb25zO1xuICAgIGZ1bmN0aW9uIGVtaXRFcnJvcih0b2tlbnplciwgY29kZSwgc3RhcnQsIG9mZnNldCwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBlbmQgPSB0b2tlbnplci5jdXJyZW50UG9zaXRpb24oKTtcbiAgICAgICAgZW5kLm9mZnNldCArPSBvZmZzZXQ7XG4gICAgICAgIGVuZC5jb2x1bW4gKz0gb2Zmc2V0O1xuICAgICAgICBpZiAob25FcnJvcikge1xuICAgICAgICAgICAgY29uc3QgbG9jID0gbG9jYXRpb24gPyBjcmVhdGVMb2NhdGlvbihzdGFydCwgZW5kKSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBlcnIgPSBjcmVhdGVDb21waWxlRXJyb3IoY29kZSwgbG9jLCB7XG4gICAgICAgICAgICAgICAgZG9tYWluOiBFUlJPUl9ET01BSU4kMixcbiAgICAgICAgICAgICAgICBhcmdzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydE5vZGUodHlwZSwgb2Zmc2V0LCBsb2MpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHsgdHlwZSB9O1xuICAgICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgICAgIG5vZGUuc3RhcnQgPSBvZmZzZXQ7XG4gICAgICAgICAgICBub2RlLmVuZCA9IG9mZnNldDtcbiAgICAgICAgICAgIG5vZGUubG9jID0geyBzdGFydDogbG9jLCBlbmQ6IGxvYyB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbmROb2RlKG5vZGUsIG9mZnNldCwgcG9zLCB0eXBlKSB7XG4gICAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgICAgICBub2RlLnR5cGUgPSB0eXBlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhdGlvbikge1xuICAgICAgICAgICAgbm9kZS5lbmQgPSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAobm9kZS5sb2MpIHtcbiAgICAgICAgICAgICAgICBub2RlLmxvYy5lbmQgPSBwb3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VUZXh0KHRva2VuaXplciwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRva2VuaXplci5jb250ZXh0KCk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBzdGFydE5vZGUoMyAvKiBOb2RlVHlwZXMuVGV4dCAqLywgY29udGV4dC5vZmZzZXQsIGNvbnRleHQuc3RhcnRMb2MpO1xuICAgICAgICBub2RlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIGVuZE5vZGUobm9kZSwgdG9rZW5pemVyLmN1cnJlbnRPZmZzZXQoKSwgdG9rZW5pemVyLmN1cnJlbnRQb3NpdGlvbigpKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlTGlzdCh0b2tlbml6ZXIsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0b2tlbml6ZXIuY29udGV4dCgpO1xuICAgICAgICBjb25zdCB7IGxhc3RPZmZzZXQ6IG9mZnNldCwgbGFzdFN0YXJ0TG9jOiBsb2MgfSA9IGNvbnRleHQ7IC8vIGdldCBicmFjZSBsZWZ0IGxvY1xuICAgICAgICBjb25zdCBub2RlID0gc3RhcnROb2RlKDUgLyogTm9kZVR5cGVzLkxpc3QgKi8sIG9mZnNldCwgbG9jKTtcbiAgICAgICAgbm9kZS5pbmRleCA9IHBhcnNlSW50KGluZGV4LCAxMCk7XG4gICAgICAgIHRva2VuaXplci5uZXh0VG9rZW4oKTsgLy8gc2tpcCBicmFjaCByaWdodFxuICAgICAgICBlbmROb2RlKG5vZGUsIHRva2VuaXplci5jdXJyZW50T2Zmc2V0KCksIHRva2VuaXplci5jdXJyZW50UG9zaXRpb24oKSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZU5hbWVkKHRva2VuaXplciwga2V5KSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0b2tlbml6ZXIuY29udGV4dCgpO1xuICAgICAgICBjb25zdCB7IGxhc3RPZmZzZXQ6IG9mZnNldCwgbGFzdFN0YXJ0TG9jOiBsb2MgfSA9IGNvbnRleHQ7IC8vIGdldCBicmFjZSBsZWZ0IGxvY1xuICAgICAgICBjb25zdCBub2RlID0gc3RhcnROb2RlKDQgLyogTm9kZVR5cGVzLk5hbWVkICovLCBvZmZzZXQsIGxvYyk7XG4gICAgICAgIG5vZGUua2V5ID0ga2V5O1xuICAgICAgICB0b2tlbml6ZXIubmV4dFRva2VuKCk7IC8vIHNraXAgYnJhY2ggcmlnaHRcbiAgICAgICAgZW5kTm9kZShub2RlLCB0b2tlbml6ZXIuY3VycmVudE9mZnNldCgpLCB0b2tlbml6ZXIuY3VycmVudFBvc2l0aW9uKCkpO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VMaXRlcmFsKHRva2VuaXplciwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRva2VuaXplci5jb250ZXh0KCk7XG4gICAgICAgIGNvbnN0IHsgbGFzdE9mZnNldDogb2Zmc2V0LCBsYXN0U3RhcnRMb2M6IGxvYyB9ID0gY29udGV4dDsgLy8gZ2V0IGJyYWNlIGxlZnQgbG9jXG4gICAgICAgIGNvbnN0IG5vZGUgPSBzdGFydE5vZGUoOSAvKiBOb2RlVHlwZXMuTGl0ZXJhbCAqLywgb2Zmc2V0LCBsb2MpO1xuICAgICAgICBub2RlLnZhbHVlID0gdmFsdWUucmVwbGFjZShLTk9XTl9FU0NBUEVTLCBmcm9tRXNjYXBlU2VxdWVuY2UpO1xuICAgICAgICB0b2tlbml6ZXIubmV4dFRva2VuKCk7IC8vIHNraXAgYnJhY2ggcmlnaHRcbiAgICAgICAgZW5kTm9kZShub2RlLCB0b2tlbml6ZXIuY3VycmVudE9mZnNldCgpLCB0b2tlbml6ZXIuY3VycmVudFBvc2l0aW9uKCkpO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VMaW5rZWRNb2RpZmllcih0b2tlbml6ZXIpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0b2tlbml6ZXIuY29udGV4dCgpO1xuICAgICAgICBjb25zdCB7IGxhc3RPZmZzZXQ6IG9mZnNldCwgbGFzdFN0YXJ0TG9jOiBsb2MgfSA9IGNvbnRleHQ7IC8vIGdldCBsaW5rZWQgZG90IGxvY1xuICAgICAgICBjb25zdCBub2RlID0gc3RhcnROb2RlKDggLyogTm9kZVR5cGVzLkxpbmtlZE1vZGlmaWVyICovLCBvZmZzZXQsIGxvYyk7XG4gICAgICAgIGlmICh0b2tlbi50eXBlICE9PSAxMiAvKiBUb2tlblR5cGVzLkxpbmtlZE1vZGlmaWVyICovKSB7XG4gICAgICAgICAgICAvLyBlbXB0eSBtb2RpZmllclxuICAgICAgICAgICAgZW1pdEVycm9yKHRva2VuaXplciwgQ29tcGlsZUVycm9yQ29kZXMuVU5FWFBFQ1RFRF9FTVBUWV9MSU5LRURfTU9ESUZJRVIsIGNvbnRleHQubGFzdFN0YXJ0TG9jLCAwKTtcbiAgICAgICAgICAgIG5vZGUudmFsdWUgPSAnJztcbiAgICAgICAgICAgIGVuZE5vZGUobm9kZSwgb2Zmc2V0LCBsb2MpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuZXh0Q29uc3VtZVRva2VuOiB0b2tlbixcbiAgICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNrIHRva2VuXG4gICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBlbWl0RXJyb3IodG9rZW5pemVyLCBDb21waWxlRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX0xFWElDQUxfQU5BTFlTSVMsIGNvbnRleHQubGFzdFN0YXJ0TG9jLCAwLCBnZXRUb2tlbkNhcHRpb24odG9rZW4pKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnZhbHVlID0gdG9rZW4udmFsdWUgfHwgJyc7XG4gICAgICAgIGVuZE5vZGUobm9kZSwgdG9rZW5pemVyLmN1cnJlbnRPZmZzZXQoKSwgdG9rZW5pemVyLmN1cnJlbnRQb3NpdGlvbigpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vZGVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VMaW5rZWRLZXkodG9rZW5pemVyLCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdG9rZW5pemVyLmNvbnRleHQoKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHN0YXJ0Tm9kZSg3IC8qIE5vZGVUeXBlcy5MaW5rZWRLZXkgKi8sIGNvbnRleHQub2Zmc2V0LCBjb250ZXh0LnN0YXJ0TG9jKTtcbiAgICAgICAgbm9kZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICBlbmROb2RlKG5vZGUsIHRva2VuaXplci5jdXJyZW50T2Zmc2V0KCksIHRva2VuaXplci5jdXJyZW50UG9zaXRpb24oKSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUxpbmtlZCh0b2tlbml6ZXIpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRva2VuaXplci5jb250ZXh0KCk7XG4gICAgICAgIGNvbnN0IGxpbmtlZE5vZGUgPSBzdGFydE5vZGUoNiAvKiBOb2RlVHlwZXMuTGlua2VkICovLCBjb250ZXh0Lm9mZnNldCwgY29udGV4dC5zdGFydExvYyk7XG4gICAgICAgIGxldCB0b2tlbiA9IHRva2VuaXplci5uZXh0VG9rZW4oKTtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IDkgLyogVG9rZW5UeXBlcy5MaW5rZWREb3QgKi8pIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlTGlua2VkTW9kaWZpZXIodG9rZW5pemVyKTtcbiAgICAgICAgICAgIGxpbmtlZE5vZGUubW9kaWZpZXIgPSBwYXJzZWQubm9kZTtcbiAgICAgICAgICAgIHRva2VuID0gcGFyc2VkLm5leHRDb25zdW1lVG9rZW4gfHwgdG9rZW5pemVyLm5leHRUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFzc2V0IGNoZWNrIHRva2VuXG4gICAgICAgIGlmICh0b2tlbi50eXBlICE9PSAxMCAvKiBUb2tlblR5cGVzLkxpbmtlZERlbGltaXRlciAqLykge1xuICAgICAgICAgICAgZW1pdEVycm9yKHRva2VuaXplciwgQ29tcGlsZUVycm9yQ29kZXMuVU5FWFBFQ1RFRF9MRVhJQ0FMX0FOQUxZU0lTLCBjb250ZXh0Lmxhc3RTdGFydExvYywgMCwgZ2V0VG9rZW5DYXB0aW9uKHRva2VuKSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW4gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7XG4gICAgICAgIC8vIHNraXAgYnJhY2UgbGVmdFxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gMiAvKiBUb2tlblR5cGVzLkJyYWNlTGVmdCAqLykge1xuICAgICAgICAgICAgdG9rZW4gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIDExIC8qIFRva2VuVHlwZXMuTGlua2VkS2V5ICovOlxuICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGVtaXRFcnJvcih0b2tlbml6ZXIsIENvbXBpbGVFcnJvckNvZGVzLlVORVhQRUNURURfTEVYSUNBTF9BTkFMWVNJUywgY29udGV4dC5sYXN0U3RhcnRMb2MsIDAsIGdldFRva2VuQ2FwdGlvbih0b2tlbikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsaW5rZWROb2RlLmtleSA9IHBhcnNlTGlua2VkS2V5KHRva2VuaXplciwgdG9rZW4udmFsdWUgfHwgJycpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1IC8qIFRva2VuVHlwZXMuTmFtZWQgKi86XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKHRva2VuaXplciwgQ29tcGlsZUVycm9yQ29kZXMuVU5FWFBFQ1RFRF9MRVhJQ0FMX0FOQUxZU0lTLCBjb250ZXh0Lmxhc3RTdGFydExvYywgMCwgZ2V0VG9rZW5DYXB0aW9uKHRva2VuKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxpbmtlZE5vZGUua2V5ID0gcGFyc2VOYW1lZCh0b2tlbml6ZXIsIHRva2VuLnZhbHVlIHx8ICcnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNiAvKiBUb2tlblR5cGVzLkxpc3QgKi86XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKHRva2VuaXplciwgQ29tcGlsZUVycm9yQ29kZXMuVU5FWFBFQ1RFRF9MRVhJQ0FMX0FOQUxZU0lTLCBjb250ZXh0Lmxhc3RTdGFydExvYywgMCwgZ2V0VG9rZW5DYXB0aW9uKHRva2VuKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxpbmtlZE5vZGUua2V5ID0gcGFyc2VMaXN0KHRva2VuaXplciwgdG9rZW4udmFsdWUgfHwgJycpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA3IC8qIFRva2VuVHlwZXMuTGl0ZXJhbCAqLzpcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IodG9rZW5pemVyLCBDb21waWxlRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX0xFWElDQUxfQU5BTFlTSVMsIGNvbnRleHQubGFzdFN0YXJ0TG9jLCAwLCBnZXRUb2tlbkNhcHRpb24odG9rZW4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGlua2VkTm9kZS5rZXkgPSBwYXJzZUxpdGVyYWwodG9rZW5pemVyLCB0b2tlbi52YWx1ZSB8fCAnJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgLy8gZW1wdHkga2V5XG4gICAgICAgICAgICAgICAgZW1pdEVycm9yKHRva2VuaXplciwgQ29tcGlsZUVycm9yQ29kZXMuVU5FWFBFQ1RFRF9FTVBUWV9MSU5LRURfS0VZLCBjb250ZXh0Lmxhc3RTdGFydExvYywgMCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dENvbnRleHQgPSB0b2tlbml6ZXIuY29udGV4dCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVtcHR5TGlua2VkS2V5Tm9kZSA9IHN0YXJ0Tm9kZSg3IC8qIE5vZGVUeXBlcy5MaW5rZWRLZXkgKi8sIG5leHRDb250ZXh0Lm9mZnNldCwgbmV4dENvbnRleHQuc3RhcnRMb2MpO1xuICAgICAgICAgICAgICAgIGVtcHR5TGlua2VkS2V5Tm9kZS52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgIGVuZE5vZGUoZW1wdHlMaW5rZWRLZXlOb2RlLCBuZXh0Q29udGV4dC5vZmZzZXQsIG5leHRDb250ZXh0LnN0YXJ0TG9jKTtcbiAgICAgICAgICAgICAgICBsaW5rZWROb2RlLmtleSA9IGVtcHR5TGlua2VkS2V5Tm9kZTtcbiAgICAgICAgICAgICAgICBlbmROb2RlKGxpbmtlZE5vZGUsIG5leHRDb250ZXh0Lm9mZnNldCwgbmV4dENvbnRleHQuc3RhcnRMb2MpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRDb25zdW1lVG9rZW46IHRva2VuLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiBsaW5rZWROb2RlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbmROb2RlKGxpbmtlZE5vZGUsIHRva2VuaXplci5jdXJyZW50T2Zmc2V0KCksIHRva2VuaXplci5jdXJyZW50UG9zaXRpb24oKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBub2RlOiBsaW5rZWROb2RlXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlTWVzc2FnZSh0b2tlbml6ZXIpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRva2VuaXplci5jb250ZXh0KCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gY29udGV4dC5jdXJyZW50VHlwZSA9PT0gMSAvKiBUb2tlblR5cGVzLlBpcGUgKi9cbiAgICAgICAgICAgID8gdG9rZW5pemVyLmN1cnJlbnRPZmZzZXQoKVxuICAgICAgICAgICAgOiBjb250ZXh0Lm9mZnNldDtcbiAgICAgICAgY29uc3Qgc3RhcnRMb2MgPSBjb250ZXh0LmN1cnJlbnRUeXBlID09PSAxIC8qIFRva2VuVHlwZXMuUGlwZSAqL1xuICAgICAgICAgICAgPyBjb250ZXh0LmVuZExvY1xuICAgICAgICAgICAgOiBjb250ZXh0LnN0YXJ0TG9jO1xuICAgICAgICBjb25zdCBub2RlID0gc3RhcnROb2RlKDIgLyogTm9kZVR5cGVzLk1lc3NhZ2UgKi8sIHN0YXJ0T2Zmc2V0LCBzdGFydExvYyk7XG4gICAgICAgIG5vZGUuaXRlbXMgPSBbXTtcbiAgICAgICAgbGV0IG5leHRUb2tlbiA9IG51bGw7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gbmV4dFRva2VuIHx8IHRva2VuaXplci5uZXh0VG9rZW4oKTtcbiAgICAgICAgICAgIG5leHRUb2tlbiA9IG51bGw7XG4gICAgICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDAgLyogVG9rZW5UeXBlcy5UZXh0ICovOlxuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKHRva2VuaXplciwgQ29tcGlsZUVycm9yQ29kZXMuVU5FWFBFQ1RFRF9MRVhJQ0FMX0FOQUxZU0lTLCBjb250ZXh0Lmxhc3RTdGFydExvYywgMCwgZ2V0VG9rZW5DYXB0aW9uKHRva2VuKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbm9kZS5pdGVtcy5wdXNoKHBhcnNlVGV4dCh0b2tlbml6ZXIsIHRva2VuLnZhbHVlIHx8ICcnKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNiAvKiBUb2tlblR5cGVzLkxpc3QgKi86XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IodG9rZW5pemVyLCBDb21waWxlRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX0xFWElDQUxfQU5BTFlTSVMsIGNvbnRleHQubGFzdFN0YXJ0TG9jLCAwLCBnZXRUb2tlbkNhcHRpb24odG9rZW4pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBub2RlLml0ZW1zLnB1c2gocGFyc2VMaXN0KHRva2VuaXplciwgdG9rZW4udmFsdWUgfHwgJycpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA1IC8qIFRva2VuVHlwZXMuTmFtZWQgKi86XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IodG9rZW5pemVyLCBDb21waWxlRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX0xFWElDQUxfQU5BTFlTSVMsIGNvbnRleHQubGFzdFN0YXJ0TG9jLCAwLCBnZXRUb2tlbkNhcHRpb24odG9rZW4pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBub2RlLml0ZW1zLnB1c2gocGFyc2VOYW1lZCh0b2tlbml6ZXIsIHRva2VuLnZhbHVlIHx8ICcnKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNyAvKiBUb2tlblR5cGVzLkxpdGVyYWwgKi86XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IodG9rZW5pemVyLCBDb21waWxlRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX0xFWElDQUxfQU5BTFlTSVMsIGNvbnRleHQubGFzdFN0YXJ0TG9jLCAwLCBnZXRUb2tlbkNhcHRpb24odG9rZW4pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBub2RlLml0ZW1zLnB1c2gocGFyc2VMaXRlcmFsKHRva2VuaXplciwgdG9rZW4udmFsdWUgfHwgJycpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA4IC8qIFRva2VuVHlwZXMuTGlua2VkQWxpYXMgKi86IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VMaW5rZWQodG9rZW5pemVyKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5pdGVtcy5wdXNoKHBhcnNlZC5ub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRva2VuID0gcGFyc2VkLm5leHRDb25zdW1lVG9rZW4gfHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChjb250ZXh0LmN1cnJlbnRUeXBlICE9PSAxNCAvKiBUb2tlblR5cGVzLkVPRiAqLyAmJlxuICAgICAgICAgICAgY29udGV4dC5jdXJyZW50VHlwZSAhPT0gMSAvKiBUb2tlblR5cGVzLlBpcGUgKi8pO1xuICAgICAgICAvLyBhZGp1c3QgbWVzc2FnZSBub2RlIGxvY1xuICAgICAgICBjb25zdCBlbmRPZmZzZXQgPSBjb250ZXh0LmN1cnJlbnRUeXBlID09PSAxIC8qIFRva2VuVHlwZXMuUGlwZSAqL1xuICAgICAgICAgICAgPyBjb250ZXh0Lmxhc3RPZmZzZXRcbiAgICAgICAgICAgIDogdG9rZW5pemVyLmN1cnJlbnRPZmZzZXQoKTtcbiAgICAgICAgY29uc3QgZW5kTG9jID0gY29udGV4dC5jdXJyZW50VHlwZSA9PT0gMSAvKiBUb2tlblR5cGVzLlBpcGUgKi9cbiAgICAgICAgICAgID8gY29udGV4dC5sYXN0RW5kTG9jXG4gICAgICAgICAgICA6IHRva2VuaXplci5jdXJyZW50UG9zaXRpb24oKTtcbiAgICAgICAgZW5kTm9kZShub2RlLCBlbmRPZmZzZXQsIGVuZExvYyk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZVBsdXJhbCh0b2tlbml6ZXIsIG9mZnNldCwgbG9jLCBtc2dOb2RlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0b2tlbml6ZXIuY29udGV4dCgpO1xuICAgICAgICBsZXQgaGFzRW1wdHlNZXNzYWdlID0gbXNnTm9kZS5pdGVtcy5sZW5ndGggPT09IDA7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBzdGFydE5vZGUoMSAvKiBOb2RlVHlwZXMuUGx1cmFsICovLCBvZmZzZXQsIGxvYyk7XG4gICAgICAgIG5vZGUuY2FzZXMgPSBbXTtcbiAgICAgICAgbm9kZS5jYXNlcy5wdXNoKG1zZ05vZGUpO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBwYXJzZU1lc3NhZ2UodG9rZW5pemVyKTtcbiAgICAgICAgICAgIGlmICghaGFzRW1wdHlNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgaGFzRW1wdHlNZXNzYWdlID0gbXNnLml0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUuY2FzZXMucHVzaChtc2cpO1xuICAgICAgICB9IHdoaWxlIChjb250ZXh0LmN1cnJlbnRUeXBlICE9PSAxNCAvKiBUb2tlblR5cGVzLkVPRiAqLyk7XG4gICAgICAgIGlmIChoYXNFbXB0eU1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGVtaXRFcnJvcih0b2tlbml6ZXIsIENvbXBpbGVFcnJvckNvZGVzLk1VU1RfSEFWRV9NRVNTQUdFU19JTl9QTFVSQUwsIGxvYywgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZW5kTm9kZShub2RlLCB0b2tlbml6ZXIuY3VycmVudE9mZnNldCgpLCB0b2tlbml6ZXIuY3VycmVudFBvc2l0aW9uKCkpO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VSZXNvdXJjZSh0b2tlbml6ZXIpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRva2VuaXplci5jb250ZXh0KCk7XG4gICAgICAgIGNvbnN0IHsgb2Zmc2V0LCBzdGFydExvYyB9ID0gY29udGV4dDtcbiAgICAgICAgY29uc3QgbXNnTm9kZSA9IHBhcnNlTWVzc2FnZSh0b2tlbml6ZXIpO1xuICAgICAgICBpZiAoY29udGV4dC5jdXJyZW50VHlwZSA9PT0gMTQgLyogVG9rZW5UeXBlcy5FT0YgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiBtc2dOb2RlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlUGx1cmFsKHRva2VuaXplciwgb2Zmc2V0LCBzdGFydExvYywgbXNnTm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2Uoc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHRva2VuaXplciA9IGNyZWF0ZVRva2VuaXplcihzb3VyY2UsIGFzc2lnbih7fSwgb3B0aW9ucykpO1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdG9rZW5pemVyLmNvbnRleHQoKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHN0YXJ0Tm9kZSgwIC8qIE5vZGVUeXBlcy5SZXNvdXJjZSAqLywgY29udGV4dC5vZmZzZXQsIGNvbnRleHQuc3RhcnRMb2MpO1xuICAgICAgICBpZiAobG9jYXRpb24gJiYgbm9kZS5sb2MpIHtcbiAgICAgICAgICAgIG5vZGUubG9jLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLmJvZHkgPSBwYXJzZVJlc291cmNlKHRva2VuaXplcik7XG4gICAgICAgIGlmIChvcHRpb25zLm9uQ2FjaGVLZXkpIHtcbiAgICAgICAgICAgIG5vZGUuY2FjaGVLZXkgPSBvcHRpb25zLm9uQ2FjaGVLZXkoc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhc3NlcnQgd2hldGhlciBhY2hpZXZlZCB0byBFT0ZcbiAgICAgICAgaWYgKGNvbnRleHQuY3VycmVudFR5cGUgIT09IDE0IC8qIFRva2VuVHlwZXMuRU9GICovKSB7XG4gICAgICAgICAgICBlbWl0RXJyb3IodG9rZW5pemVyLCBDb21waWxlRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX0xFWElDQUxfQU5BTFlTSVMsIGNvbnRleHQubGFzdFN0YXJ0TG9jLCAwLCBzb3VyY2VbY29udGV4dC5vZmZzZXRdIHx8ICcnKTtcbiAgICAgICAgfVxuICAgICAgICBlbmROb2RlKG5vZGUsIHRva2VuaXplci5jdXJyZW50T2Zmc2V0KCksIHRva2VuaXplci5jdXJyZW50UG9zaXRpb24oKSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICByZXR1cm4geyBwYXJzZSB9O1xufVxuZnVuY3Rpb24gZ2V0VG9rZW5DYXB0aW9uKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IDE0IC8qIFRva2VuVHlwZXMuRU9GICovKSB7XG4gICAgICAgIHJldHVybiAnRU9GJztcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9ICh0b2tlbi52YWx1ZSB8fCAnJykucmVwbGFjZSgvXFxyP1xcbi9ndSwgJ1xcXFxuJyk7XG4gICAgcmV0dXJuIG5hbWUubGVuZ3RoID4gMTAgPyBuYW1lLnNsaWNlKDAsIDkpICsgJ+KApicgOiBuYW1lO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm1lcihhc3QsIG9wdGlvbnMgPSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4pIHtcbiAgICBjb25zdCBfY29udGV4dCA9IHtcbiAgICAgICAgYXN0LFxuICAgICAgICBoZWxwZXJzOiBuZXcgU2V0KClcbiAgICB9O1xuICAgIGNvbnN0IGNvbnRleHQgPSAoKSA9PiBfY29udGV4dDtcbiAgICBjb25zdCBoZWxwZXIgPSAobmFtZSkgPT4ge1xuICAgICAgICBfY29udGV4dC5oZWxwZXJzLmFkZChuYW1lKTtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfTtcbiAgICByZXR1cm4geyBjb250ZXh0LCBoZWxwZXIgfTtcbn1cbmZ1bmN0aW9uIHRyYXZlcnNlTm9kZXMobm9kZXMsIHRyYW5zZm9ybWVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0cmF2ZXJzZU5vZGUobm9kZXNbaV0sIHRyYW5zZm9ybWVyKTtcbiAgICB9XG59XG5mdW5jdGlvbiB0cmF2ZXJzZU5vZGUobm9kZSwgdHJhbnNmb3JtZXIpIHtcbiAgICAvLyBUT0RPOiBpZiB3ZSBuZWVkIHByZS1ob29rIG9mIHRyYW5zZm9ybSwgc2hvdWxkIGJlIGltcGxlbWVudGVkIHRvIGhlcmVcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlIDEgLyogTm9kZVR5cGVzLlBsdXJhbCAqLzpcbiAgICAgICAgICAgIHRyYXZlcnNlTm9kZXMobm9kZS5jYXNlcywgdHJhbnNmb3JtZXIpO1xuICAgICAgICAgICAgdHJhbnNmb3JtZXIuaGVscGVyKFwicGx1cmFsXCIgLyogSGVscGVyTmFtZU1hcC5QTFVSQUwgKi8pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMiAvKiBOb2RlVHlwZXMuTWVzc2FnZSAqLzpcbiAgICAgICAgICAgIHRyYXZlcnNlTm9kZXMobm9kZS5pdGVtcywgdHJhbnNmb3JtZXIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNiAvKiBOb2RlVHlwZXMuTGlua2VkICovOiB7XG4gICAgICAgICAgICBjb25zdCBsaW5rZWQgPSBub2RlO1xuICAgICAgICAgICAgdHJhdmVyc2VOb2RlKGxpbmtlZC5rZXksIHRyYW5zZm9ybWVyKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVyLmhlbHBlcihcImxpbmtlZFwiIC8qIEhlbHBlck5hbWVNYXAuTElOS0VEICovKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVyLmhlbHBlcihcInR5cGVcIiAvKiBIZWxwZXJOYW1lTWFwLlRZUEUgKi8pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSA1IC8qIE5vZGVUeXBlcy5MaXN0ICovOlxuICAgICAgICAgICAgdHJhbnNmb3JtZXIuaGVscGVyKFwiaW50ZXJwb2xhdGVcIiAvKiBIZWxwZXJOYW1lTWFwLklOVEVSUE9MQVRFICovKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVyLmhlbHBlcihcImxpc3RcIiAvKiBIZWxwZXJOYW1lTWFwLkxJU1QgKi8pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNCAvKiBOb2RlVHlwZXMuTmFtZWQgKi86XG4gICAgICAgICAgICB0cmFuc2Zvcm1lci5oZWxwZXIoXCJpbnRlcnBvbGF0ZVwiIC8qIEhlbHBlck5hbWVNYXAuSU5URVJQT0xBVEUgKi8pO1xuICAgICAgICAgICAgdHJhbnNmb3JtZXIuaGVscGVyKFwibmFtZWRcIiAvKiBIZWxwZXJOYW1lTWFwLk5BTUVEICovKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBUT0RPOiBpZiB3ZSBuZWVkIHBvc3QtaG9vayBvZiB0cmFuc2Zvcm0sIHNob3VsZCBiZSBpbXBsZW1lbnRlZCB0byBoZXJlXG59XG4vLyB0cmFuc2Zvcm0gQVNUXG5mdW5jdGlvbiB0cmFuc2Zvcm0oYXN0LCBvcHRpb25zID0ge30gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVUcmFuc2Zvcm1lcihhc3QpO1xuICAgIHRyYW5zZm9ybWVyLmhlbHBlcihcIm5vcm1hbGl6ZVwiIC8qIEhlbHBlck5hbWVNYXAuTk9STUFMSVpFICovKTtcbiAgICAvLyB0cmF2ZXJzZVxuICAgIGFzdC5ib2R5ICYmIHRyYXZlcnNlTm9kZShhc3QuYm9keSwgdHJhbnNmb3JtZXIpO1xuICAgIC8vIHNldCBtZXRhIGluZm9ybWF0aW9uXG4gICAgY29uc3QgY29udGV4dCA9IHRyYW5zZm9ybWVyLmNvbnRleHQoKTtcbiAgICBhc3QuaGVscGVycyA9IEFycmF5LmZyb20oY29udGV4dC5oZWxwZXJzKTtcbn1cblxuZnVuY3Rpb24gb3B0aW1pemUoYXN0KSB7XG4gICAgY29uc3QgYm9keSA9IGFzdC5ib2R5O1xuICAgIGlmIChib2R5LnR5cGUgPT09IDIgLyogTm9kZVR5cGVzLk1lc3NhZ2UgKi8pIHtcbiAgICAgICAgb3B0aW1pemVNZXNzYWdlTm9kZShib2R5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGJvZHkuY2FzZXMuZm9yRWFjaChjID0+IG9wdGltaXplTWVzc2FnZU5vZGUoYykpO1xuICAgIH1cbiAgICByZXR1cm4gYXN0O1xufVxuZnVuY3Rpb24gb3B0aW1pemVNZXNzYWdlTm9kZShtZXNzYWdlKSB7XG4gICAgaWYgKG1lc3NhZ2UuaXRlbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBtZXNzYWdlLml0ZW1zWzBdO1xuICAgICAgICBpZiAoaXRlbS50eXBlID09PSAzIC8qIE5vZGVUeXBlcy5UZXh0ICovIHx8IGl0ZW0udHlwZSA9PT0gOSAvKiBOb2RlVHlwZXMuTGl0ZXJhbCAqLykge1xuICAgICAgICAgICAgbWVzc2FnZS5zdGF0aWMgPSBpdGVtLnZhbHVlO1xuICAgICAgICAgICAgZGVsZXRlIGl0ZW0udmFsdWU7IC8vIG9wdGltaXphdGlvbiBmb3Igc2l6ZVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gbWVzc2FnZS5pdGVtc1tpXTtcbiAgICAgICAgICAgIGlmICghKGl0ZW0udHlwZSA9PT0gMyAvKiBOb2RlVHlwZXMuVGV4dCAqLyB8fCBpdGVtLnR5cGUgPT09IDkgLyogTm9kZVR5cGVzLkxpdGVyYWwgKi8pKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChpdGVtLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gbWVzc2FnZS5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG1lc3NhZ2Uuc3RhdGljID0gam9pbih2YWx1ZXMpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG1lc3NhZ2UuaXRlbXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gMyAvKiBOb2RlVHlwZXMuVGV4dCAqLyB8fCBpdGVtLnR5cGUgPT09IDkgLyogTm9kZVR5cGVzLkxpdGVyYWwgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW0udmFsdWU7IC8vIG9wdGltaXphdGlvbiBmb3Igc2l6ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgRVJST1JfRE9NQUlOJDEgPSAnbWluaWZpZXInO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuZnVuY3Rpb24gbWluaWZ5KG5vZGUpIHtcbiAgICBub2RlLnQgPSBub2RlLnR5cGU7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgY2FzZSAwIC8qIE5vZGVUeXBlcy5SZXNvdXJjZSAqLzoge1xuICAgICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBub2RlO1xuICAgICAgICAgICAgbWluaWZ5KHJlc291cmNlLmJvZHkpO1xuICAgICAgICAgICAgcmVzb3VyY2UuYiA9IHJlc291cmNlLmJvZHk7XG4gICAgICAgICAgICBkZWxldGUgcmVzb3VyY2UuYm9keTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMSAvKiBOb2RlVHlwZXMuUGx1cmFsICovOiB7XG4gICAgICAgICAgICBjb25zdCBwbHVyYWwgPSBub2RlO1xuICAgICAgICAgICAgY29uc3QgY2FzZXMgPSBwbHVyYWwuY2FzZXM7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbWluaWZ5KGNhc2VzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBsdXJhbC5jID0gY2FzZXM7XG4gICAgICAgICAgICBkZWxldGUgcGx1cmFsLmNhc2VzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAyIC8qIE5vZGVUeXBlcy5NZXNzYWdlICovOiB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gbm9kZTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gbWVzc2FnZS5pdGVtcztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtaW5pZnkoaXRlbXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWVzc2FnZS5pID0gaXRlbXM7XG4gICAgICAgICAgICBkZWxldGUgbWVzc2FnZS5pdGVtcztcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXRpYykge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UucyA9IG1lc3NhZ2Uuc3RhdGljO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBtZXNzYWdlLnN0YXRpYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMyAvKiBOb2RlVHlwZXMuVGV4dCAqLzpcbiAgICAgICAgY2FzZSA5IC8qIE5vZGVUeXBlcy5MaXRlcmFsICovOlxuICAgICAgICBjYXNlIDggLyogTm9kZVR5cGVzLkxpbmtlZE1vZGlmaWVyICovOlxuICAgICAgICBjYXNlIDcgLyogTm9kZVR5cGVzLkxpbmtlZEtleSAqLzoge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVOb2RlID0gbm9kZTtcbiAgICAgICAgICAgIGlmICh2YWx1ZU5vZGUudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZU5vZGUudiA9IHZhbHVlTm9kZS52YWx1ZTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVOb2RlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSA2IC8qIE5vZGVUeXBlcy5MaW5rZWQgKi86IHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtlZCA9IG5vZGU7XG4gICAgICAgICAgICBtaW5pZnkobGlua2VkLmtleSk7XG4gICAgICAgICAgICBsaW5rZWQuayA9IGxpbmtlZC5rZXk7XG4gICAgICAgICAgICBkZWxldGUgbGlua2VkLmtleTtcbiAgICAgICAgICAgIGlmIChsaW5rZWQubW9kaWZpZXIpIHtcbiAgICAgICAgICAgICAgICBtaW5pZnkobGlua2VkLm1vZGlmaWVyKTtcbiAgICAgICAgICAgICAgICBsaW5rZWQubSA9IGxpbmtlZC5tb2RpZmllcjtcbiAgICAgICAgICAgICAgICBkZWxldGUgbGlua2VkLm1vZGlmaWVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSA1IC8qIE5vZGVUeXBlcy5MaXN0ICovOiB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gbm9kZTtcbiAgICAgICAgICAgIGxpc3QuaSA9IGxpc3QuaW5kZXg7XG4gICAgICAgICAgICBkZWxldGUgbGlzdC5pbmRleDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgNCAvKiBOb2RlVHlwZXMuTmFtZWQgKi86IHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVkID0gbm9kZTtcbiAgICAgICAgICAgIG5hbWVkLmsgPSBuYW1lZC5rZXk7XG4gICAgICAgICAgICBkZWxldGUgbmFtZWQua2V5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVDb21waWxlRXJyb3IoQ29tcGlsZUVycm9yQ29kZXMuVU5IQU5ETEVEX01JTklGSUVSX05PREVfVFlQRSwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICBkb21haW46IEVSUk9SX0RPTUFJTiQxLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiBbbm9kZS50eXBlXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgIH1cbiAgICBkZWxldGUgbm9kZS50eXBlO1xufVxuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdHJpcGxlLXNsYXNoLXJlZmVyZW5jZVxuLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJzb3VyY2UtbWFwLWpzXCIgLz5cbmNvbnN0IEVSUk9SX0RPTUFJTiA9ICdwYXJzZXInO1xuZnVuY3Rpb24gY3JlYXRlQ29kZUdlbmVyYXRvcihhc3QsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IHNvdXJjZU1hcCwgZmlsZW5hbWUsIGJyZWFrTGluZUNvZGUsIG5lZWRJbmRlbnQ6IF9uZWVkSW5kZW50IH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGxvY2F0aW9uID0gb3B0aW9ucy5sb2NhdGlvbiAhPT0gZmFsc2U7XG4gICAgY29uc3QgX2NvbnRleHQgPSB7XG4gICAgICAgIGZpbGVuYW1lLFxuICAgICAgICBjb2RlOiAnJyxcbiAgICAgICAgY29sdW1uOiAxLFxuICAgICAgICBsaW5lOiAxLFxuICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgIG1hcDogdW5kZWZpbmVkLFxuICAgICAgICBicmVha0xpbmVDb2RlLFxuICAgICAgICBuZWVkSW5kZW50OiBfbmVlZEluZGVudCxcbiAgICAgICAgaW5kZW50TGV2ZWw6IDBcbiAgICB9O1xuICAgIGlmIChsb2NhdGlvbiAmJiBhc3QubG9jKSB7XG4gICAgICAgIF9jb250ZXh0LnNvdXJjZSA9IGFzdC5sb2Muc291cmNlO1xuICAgIH1cbiAgICBjb25zdCBjb250ZXh0ID0gKCkgPT4gX2NvbnRleHQ7XG4gICAgZnVuY3Rpb24gcHVzaChjb2RlLCBub2RlKSB7XG4gICAgICAgIF9jb250ZXh0LmNvZGUgKz0gY29kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX25ld2xpbmUobiwgd2l0aEJyZWFrTGluZSA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgX2JyZWFrTGluZUNvZGUgPSB3aXRoQnJlYWtMaW5lID8gYnJlYWtMaW5lQ29kZSA6ICcnO1xuICAgICAgICBwdXNoKF9uZWVkSW5kZW50ID8gX2JyZWFrTGluZUNvZGUgKyBgICBgLnJlcGVhdChuKSA6IF9icmVha0xpbmVDb2RlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5kZW50KHdpdGhOZXdMaW5lID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBsZXZlbCA9ICsrX2NvbnRleHQuaW5kZW50TGV2ZWw7XG4gICAgICAgIHdpdGhOZXdMaW5lICYmIF9uZXdsaW5lKGxldmVsKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVpbmRlbnQod2l0aE5ld0xpbmUgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGxldmVsID0gLS1fY29udGV4dC5pbmRlbnRMZXZlbDtcbiAgICAgICAgd2l0aE5ld0xpbmUgJiYgX25ld2xpbmUobGV2ZWwpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBuZXdsaW5lKCkge1xuICAgICAgICBfbmV3bGluZShfY29udGV4dC5pbmRlbnRMZXZlbCk7XG4gICAgfVxuICAgIGNvbnN0IGhlbHBlciA9IChrZXkpID0+IGBfJHtrZXl9YDtcbiAgICBjb25zdCBuZWVkSW5kZW50ID0gKCkgPT4gX2NvbnRleHQubmVlZEluZGVudDtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBwdXNoLFxuICAgICAgICBpbmRlbnQsXG4gICAgICAgIGRlaW5kZW50LFxuICAgICAgICBuZXdsaW5lLFxuICAgICAgICBoZWxwZXIsXG4gICAgICAgIG5lZWRJbmRlbnRcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2VuZXJhdGVMaW5rZWROb2RlKGdlbmVyYXRvciwgbm9kZSkge1xuICAgIGNvbnN0IHsgaGVscGVyIH0gPSBnZW5lcmF0b3I7XG4gICAgZ2VuZXJhdG9yLnB1c2goYCR7aGVscGVyKFwibGlua2VkXCIgLyogSGVscGVyTmFtZU1hcC5MSU5LRUQgKi8pfShgKTtcbiAgICBnZW5lcmF0ZU5vZGUoZ2VuZXJhdG9yLCBub2RlLmtleSk7XG4gICAgaWYgKG5vZGUubW9kaWZpZXIpIHtcbiAgICAgICAgZ2VuZXJhdG9yLnB1c2goYCwgYCk7XG4gICAgICAgIGdlbmVyYXRlTm9kZShnZW5lcmF0b3IsIG5vZGUubW9kaWZpZXIpO1xuICAgICAgICBnZW5lcmF0b3IucHVzaChgLCBfdHlwZWApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuZXJhdG9yLnB1c2goYCwgdW5kZWZpbmVkLCBfdHlwZWApO1xuICAgIH1cbiAgICBnZW5lcmF0b3IucHVzaChgKWApO1xufVxuZnVuY3Rpb24gZ2VuZXJhdGVNZXNzYWdlTm9kZShnZW5lcmF0b3IsIG5vZGUpIHtcbiAgICBjb25zdCB7IGhlbHBlciwgbmVlZEluZGVudCB9ID0gZ2VuZXJhdG9yO1xuICAgIGdlbmVyYXRvci5wdXNoKGAke2hlbHBlcihcIm5vcm1hbGl6ZVwiIC8qIEhlbHBlck5hbWVNYXAuTk9STUFMSVpFICovKX0oW2ApO1xuICAgIGdlbmVyYXRvci5pbmRlbnQobmVlZEluZGVudCgpKTtcbiAgICBjb25zdCBsZW5ndGggPSBub2RlLml0ZW1zLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdlbmVyYXRlTm9kZShnZW5lcmF0b3IsIG5vZGUuaXRlbXNbaV0pO1xuICAgICAgICBpZiAoaSA9PT0gbGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZ2VuZXJhdG9yLnB1c2goJywgJyk7XG4gICAgfVxuICAgIGdlbmVyYXRvci5kZWluZGVudChuZWVkSW5kZW50KCkpO1xuICAgIGdlbmVyYXRvci5wdXNoKCddKScpO1xufVxuZnVuY3Rpb24gZ2VuZXJhdGVQbHVyYWxOb2RlKGdlbmVyYXRvciwgbm9kZSkge1xuICAgIGNvbnN0IHsgaGVscGVyLCBuZWVkSW5kZW50IH0gPSBnZW5lcmF0b3I7XG4gICAgaWYgKG5vZGUuY2FzZXMubGVuZ3RoID4gMSkge1xuICAgICAgICBnZW5lcmF0b3IucHVzaChgJHtoZWxwZXIoXCJwbHVyYWxcIiAvKiBIZWxwZXJOYW1lTWFwLlBMVVJBTCAqLyl9KFtgKTtcbiAgICAgICAgZ2VuZXJhdG9yLmluZGVudChuZWVkSW5kZW50KCkpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBub2RlLmNhc2VzLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZ2VuZXJhdGVOb2RlKGdlbmVyYXRvciwgbm9kZS5jYXNlc1tpXSk7XG4gICAgICAgICAgICBpZiAoaSA9PT0gbGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2VuZXJhdG9yLnB1c2goJywgJyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2VuZXJhdG9yLmRlaW5kZW50KG5lZWRJbmRlbnQoKSk7XG4gICAgICAgIGdlbmVyYXRvci5wdXNoKGBdKWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdlbmVyYXRlUmVzb3VyY2UoZ2VuZXJhdG9yLCBub2RlKSB7XG4gICAgaWYgKG5vZGUuYm9keSkge1xuICAgICAgICBnZW5lcmF0ZU5vZGUoZ2VuZXJhdG9yLCBub2RlLmJvZHkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuZXJhdG9yLnB1c2goJ251bGwnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZW5lcmF0ZU5vZGUoZ2VuZXJhdG9yLCBub2RlKSB7XG4gICAgY29uc3QgeyBoZWxwZXIgfSA9IGdlbmVyYXRvcjtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlIDAgLyogTm9kZVR5cGVzLlJlc291cmNlICovOlxuICAgICAgICAgICAgZ2VuZXJhdGVSZXNvdXJjZShnZW5lcmF0b3IsIG5vZGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMSAvKiBOb2RlVHlwZXMuUGx1cmFsICovOlxuICAgICAgICAgICAgZ2VuZXJhdGVQbHVyYWxOb2RlKGdlbmVyYXRvciwgbm9kZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyIC8qIE5vZGVUeXBlcy5NZXNzYWdlICovOlxuICAgICAgICAgICAgZ2VuZXJhdGVNZXNzYWdlTm9kZShnZW5lcmF0b3IsIG5vZGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNiAvKiBOb2RlVHlwZXMuTGlua2VkICovOlxuICAgICAgICAgICAgZ2VuZXJhdGVMaW5rZWROb2RlKGdlbmVyYXRvciwgbm9kZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4IC8qIE5vZGVUeXBlcy5MaW5rZWRNb2RpZmllciAqLzpcbiAgICAgICAgICAgIGdlbmVyYXRvci5wdXNoKEpTT04uc3RyaW5naWZ5KG5vZGUudmFsdWUpLCBub2RlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcgLyogTm9kZVR5cGVzLkxpbmtlZEtleSAqLzpcbiAgICAgICAgICAgIGdlbmVyYXRvci5wdXNoKEpTT04uc3RyaW5naWZ5KG5vZGUudmFsdWUpLCBub2RlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUgLyogTm9kZVR5cGVzLkxpc3QgKi86XG4gICAgICAgICAgICBnZW5lcmF0b3IucHVzaChgJHtoZWxwZXIoXCJpbnRlcnBvbGF0ZVwiIC8qIEhlbHBlck5hbWVNYXAuSU5URVJQT0xBVEUgKi8pfSgke2hlbHBlcihcImxpc3RcIiAvKiBIZWxwZXJOYW1lTWFwLkxJU1QgKi8pfSgke25vZGUuaW5kZXh9KSlgLCBub2RlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQgLyogTm9kZVR5cGVzLk5hbWVkICovOlxuICAgICAgICAgICAgZ2VuZXJhdG9yLnB1c2goYCR7aGVscGVyKFwiaW50ZXJwb2xhdGVcIiAvKiBIZWxwZXJOYW1lTWFwLklOVEVSUE9MQVRFICovKX0oJHtoZWxwZXIoXCJuYW1lZFwiIC8qIEhlbHBlck5hbWVNYXAuTkFNRUQgKi8pfSgke0pTT04uc3RyaW5naWZ5KG5vZGUua2V5KX0pKWAsIG5vZGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOSAvKiBOb2RlVHlwZXMuTGl0ZXJhbCAqLzpcbiAgICAgICAgICAgIGdlbmVyYXRvci5wdXNoKEpTT04uc3RyaW5naWZ5KG5vZGUudmFsdWUpLCBub2RlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMgLyogTm9kZVR5cGVzLlRleHQgKi86XG4gICAgICAgICAgICBnZW5lcmF0b3IucHVzaChKU09OLnN0cmluZ2lmeShub2RlLnZhbHVlKSwgbm9kZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVDb21waWxlRXJyb3IoQ29tcGlsZUVycm9yQ29kZXMuVU5IQU5ETEVEX0NPREVHRU5fTk9ERV9UWVBFLCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgIGRvbWFpbjogRVJST1JfRE9NQUlOLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiBbbm9kZS50eXBlXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgIH1cbn1cbi8vIGdlbmVyYXRlIGNvZGUgZnJvbSBBU1RcbmNvbnN0IGdlbmVyYXRlID0gKGFzdCwgb3B0aW9ucyA9IHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbikgPT4ge1xuICAgIGNvbnN0IG1vZGUgPSBpc1N0cmluZyhvcHRpb25zLm1vZGUpID8gb3B0aW9ucy5tb2RlIDogJ25vcm1hbCc7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBpc1N0cmluZyhvcHRpb25zLmZpbGVuYW1lKVxuICAgICAgICA/IG9wdGlvbnMuZmlsZW5hbWVcbiAgICAgICAgOiAnbWVzc2FnZS5pbnRsJztcbiAgICBjb25zdCBzb3VyY2VNYXAgPSAhIW9wdGlvbnMuc291cmNlTWFwO1xuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIGNvbnN0IGJyZWFrTGluZUNvZGUgPSBvcHRpb25zLmJyZWFrTGluZUNvZGUgIT0gbnVsbFxuICAgICAgICA/IG9wdGlvbnMuYnJlYWtMaW5lQ29kZVxuICAgICAgICA6IG1vZGUgPT09ICdhcnJvdydcbiAgICAgICAgICAgID8gJzsnXG4gICAgICAgICAgICA6ICdcXG4nO1xuICAgIGNvbnN0IG5lZWRJbmRlbnQgPSBvcHRpb25zLm5lZWRJbmRlbnQgPyBvcHRpb25zLm5lZWRJbmRlbnQgOiBtb2RlICE9PSAnYXJyb3cnO1xuICAgIGNvbnN0IGhlbHBlcnMgPSBhc3QuaGVscGVycyB8fCBbXTtcbiAgICBjb25zdCBnZW5lcmF0b3IgPSBjcmVhdGVDb2RlR2VuZXJhdG9yKGFzdCwge1xuICAgICAgICBtb2RlLFxuICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgc291cmNlTWFwLFxuICAgICAgICBicmVha0xpbmVDb2RlLFxuICAgICAgICBuZWVkSW5kZW50XG4gICAgfSk7XG4gICAgZ2VuZXJhdG9yLnB1c2gobW9kZSA9PT0gJ25vcm1hbCcgPyBgZnVuY3Rpb24gX19tc2dfXyAoY3R4KSB7YCA6IGAoY3R4KSA9PiB7YCk7XG4gICAgZ2VuZXJhdG9yLmluZGVudChuZWVkSW5kZW50KTtcbiAgICBpZiAoaGVscGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGdlbmVyYXRvci5wdXNoKGBjb25zdCB7ICR7am9pbihoZWxwZXJzLm1hcChzID0+IGAke3N9OiBfJHtzfWApLCAnLCAnKX0gfSA9IGN0eGApO1xuICAgICAgICBnZW5lcmF0b3IubmV3bGluZSgpO1xuICAgIH1cbiAgICBnZW5lcmF0b3IucHVzaChgcmV0dXJuIGApO1xuICAgIGdlbmVyYXRlTm9kZShnZW5lcmF0b3IsIGFzdCk7XG4gICAgZ2VuZXJhdG9yLmRlaW5kZW50KG5lZWRJbmRlbnQpO1xuICAgIGdlbmVyYXRvci5wdXNoKGB9YCk7XG4gICAgZGVsZXRlIGFzdC5oZWxwZXJzO1xuICAgIGNvbnN0IHsgY29kZSwgbWFwIH0gPSBnZW5lcmF0b3IuY29udGV4dCgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFzdCxcbiAgICAgICAgY29kZSxcbiAgICAgICAgbWFwOiBtYXAgPyBtYXAudG9KU09OKCkgOiB1bmRlZmluZWQgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgfTtcbn07XG5cbmZ1bmN0aW9uIGJhc2VDb21waWxlJDEoc291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBhc3NpZ25lZE9wdGlvbnMgPSBhc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgIGNvbnN0IGppdCA9ICEhYXNzaWduZWRPcHRpb25zLmppdDtcbiAgICBjb25zdCBlbmFsYmVNaW5pZnkgPSAhIWFzc2lnbmVkT3B0aW9ucy5taW5pZnk7XG4gICAgY29uc3QgZW5hbWJlT3B0aW1pemUgPSBhc3NpZ25lZE9wdGlvbnMub3B0aW1pemUgPT0gbnVsbCA/IHRydWUgOiBhc3NpZ25lZE9wdGlvbnMub3B0aW1pemU7XG4gICAgLy8gcGFyc2Ugc291cmNlIGNvZGVzXG4gICAgY29uc3QgcGFyc2VyID0gY3JlYXRlUGFyc2VyKGFzc2lnbmVkT3B0aW9ucyk7XG4gICAgY29uc3QgYXN0ID0gcGFyc2VyLnBhcnNlKHNvdXJjZSk7XG4gICAgaWYgKCFqaXQpIHtcbiAgICAgICAgLy8gdHJhbnNmb3JtIEFTVHNcbiAgICAgICAgdHJhbnNmb3JtKGFzdCwgYXNzaWduZWRPcHRpb25zKTtcbiAgICAgICAgLy8gZ2VuZXJhdGUgamF2YXNjcmlwdCBjb2Rlc1xuICAgICAgICByZXR1cm4gZ2VuZXJhdGUoYXN0LCBhc3NpZ25lZE9wdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gb3B0aW1pemUgQVNUc1xuICAgICAgICBlbmFtYmVPcHRpbWl6ZSAmJiBvcHRpbWl6ZShhc3QpO1xuICAgICAgICAvLyBtaW5pbWl6ZSBBU1RzXG4gICAgICAgIGVuYWxiZU1pbmlmeSAmJiBtaW5pZnkoYXN0KTtcbiAgICAgICAgLy8gSW4gSklUIG1vZGUsIG5vIGFzdCB0cmFuc2Zvcm0sIG5vIGNvZGUgZ2VuZXJhdGlvbi5cbiAgICAgICAgcmV0dXJuIHsgYXN0LCBjb2RlOiAnJyB9O1xuICAgIH1cbn1cblxuY29uc3QgcGF0aFN0YXRlTWFjaGluZSA9ICBbXTtcbnBhdGhTdGF0ZU1hY2hpbmVbMCAvKiBTdGF0ZXMuQkVGT1JFX1BBVEggKi9dID0ge1xuICAgIFtcIndcIiAvKiBQYXRoQ2hhclR5cGVzLldPUktTUEFDRSAqL106IFswIC8qIFN0YXRlcy5CRUZPUkVfUEFUSCAqL10sXG4gICAgW1wiaVwiIC8qIFBhdGhDaGFyVHlwZXMuSURFTlQgKi9dOiBbMyAvKiBTdGF0ZXMuSU5fSURFTlQgKi8sIDAgLyogQWN0aW9ucy5BUFBFTkQgKi9dLFxuICAgIFtcIltcIiAvKiBQYXRoQ2hhclR5cGVzLkxFRlRfQlJBQ0tFVCAqL106IFs0IC8qIFN0YXRlcy5JTl9TVUJfUEFUSCAqL10sXG4gICAgW1wib1wiIC8qIFBhdGhDaGFyVHlwZXMuRU5EX09GX0ZBSUwgKi9dOiBbNyAvKiBTdGF0ZXMuQUZURVJfUEFUSCAqL11cbn07XG5wYXRoU3RhdGVNYWNoaW5lWzEgLyogU3RhdGVzLklOX1BBVEggKi9dID0ge1xuICAgIFtcIndcIiAvKiBQYXRoQ2hhclR5cGVzLldPUktTUEFDRSAqL106IFsxIC8qIFN0YXRlcy5JTl9QQVRIICovXSxcbiAgICBbXCIuXCIgLyogUGF0aENoYXJUeXBlcy5ET1QgKi9dOiBbMiAvKiBTdGF0ZXMuQkVGT1JFX0lERU5UICovXSxcbiAgICBbXCJbXCIgLyogUGF0aENoYXJUeXBlcy5MRUZUX0JSQUNLRVQgKi9dOiBbNCAvKiBTdGF0ZXMuSU5fU1VCX1BBVEggKi9dLFxuICAgIFtcIm9cIiAvKiBQYXRoQ2hhclR5cGVzLkVORF9PRl9GQUlMICovXTogWzcgLyogU3RhdGVzLkFGVEVSX1BBVEggKi9dXG59O1xucGF0aFN0YXRlTWFjaGluZVsyIC8qIFN0YXRlcy5CRUZPUkVfSURFTlQgKi9dID0ge1xuICAgIFtcIndcIiAvKiBQYXRoQ2hhclR5cGVzLldPUktTUEFDRSAqL106IFsyIC8qIFN0YXRlcy5CRUZPUkVfSURFTlQgKi9dLFxuICAgIFtcImlcIiAvKiBQYXRoQ2hhclR5cGVzLklERU5UICovXTogWzMgLyogU3RhdGVzLklOX0lERU5UICovLCAwIC8qIEFjdGlvbnMuQVBQRU5EICovXSxcbiAgICBbXCIwXCIgLyogUGF0aENoYXJUeXBlcy5aRVJPICovXTogWzMgLyogU3RhdGVzLklOX0lERU5UICovLCAwIC8qIEFjdGlvbnMuQVBQRU5EICovXVxufTtcbnBhdGhTdGF0ZU1hY2hpbmVbMyAvKiBTdGF0ZXMuSU5fSURFTlQgKi9dID0ge1xuICAgIFtcImlcIiAvKiBQYXRoQ2hhclR5cGVzLklERU5UICovXTogWzMgLyogU3RhdGVzLklOX0lERU5UICovLCAwIC8qIEFjdGlvbnMuQVBQRU5EICovXSxcbiAgICBbXCIwXCIgLyogUGF0aENoYXJUeXBlcy5aRVJPICovXTogWzMgLyogU3RhdGVzLklOX0lERU5UICovLCAwIC8qIEFjdGlvbnMuQVBQRU5EICovXSxcbiAgICBbXCJ3XCIgLyogUGF0aENoYXJUeXBlcy5XT1JLU1BBQ0UgKi9dOiBbMSAvKiBTdGF0ZXMuSU5fUEFUSCAqLywgMSAvKiBBY3Rpb25zLlBVU0ggKi9dLFxuICAgIFtcIi5cIiAvKiBQYXRoQ2hhclR5cGVzLkRPVCAqL106IFsyIC8qIFN0YXRlcy5CRUZPUkVfSURFTlQgKi8sIDEgLyogQWN0aW9ucy5QVVNIICovXSxcbiAgICBbXCJbXCIgLyogUGF0aENoYXJUeXBlcy5MRUZUX0JSQUNLRVQgKi9dOiBbNCAvKiBTdGF0ZXMuSU5fU1VCX1BBVEggKi8sIDEgLyogQWN0aW9ucy5QVVNIICovXSxcbiAgICBbXCJvXCIgLyogUGF0aENoYXJUeXBlcy5FTkRfT0ZfRkFJTCAqL106IFs3IC8qIFN0YXRlcy5BRlRFUl9QQVRIICovLCAxIC8qIEFjdGlvbnMuUFVTSCAqL11cbn07XG5wYXRoU3RhdGVNYWNoaW5lWzQgLyogU3RhdGVzLklOX1NVQl9QQVRIICovXSA9IHtcbiAgICBbXCInXCIgLyogUGF0aENoYXJUeXBlcy5TSU5HTEVfUVVPVEUgKi9dOiBbNSAvKiBTdGF0ZXMuSU5fU0lOR0xFX1FVT1RFICovLCAwIC8qIEFjdGlvbnMuQVBQRU5EICovXSxcbiAgICBbXCJcXFwiXCIgLyogUGF0aENoYXJUeXBlcy5ET1VCTEVfUVVPVEUgKi9dOiBbNiAvKiBTdGF0ZXMuSU5fRE9VQkxFX1FVT1RFICovLCAwIC8qIEFjdGlvbnMuQVBQRU5EICovXSxcbiAgICBbXCJbXCIgLyogUGF0aENoYXJUeXBlcy5MRUZUX0JSQUNLRVQgKi9dOiBbXG4gICAgICAgIDQgLyogU3RhdGVzLklOX1NVQl9QQVRIICovLFxuICAgICAgICAyIC8qIEFjdGlvbnMuSU5DX1NVQl9QQVRIX0RFUFRIICovXG4gICAgXSxcbiAgICBbXCJdXCIgLyogUGF0aENoYXJUeXBlcy5SSUdIVF9CUkFDS0VUICovXTogWzEgLyogU3RhdGVzLklOX1BBVEggKi8sIDMgLyogQWN0aW9ucy5QVVNIX1NVQl9QQVRIICovXSxcbiAgICBbXCJvXCIgLyogUGF0aENoYXJUeXBlcy5FTkRfT0ZfRkFJTCAqL106IDggLyogU3RhdGVzLkVSUk9SICovLFxuICAgIFtcImxcIiAvKiBQYXRoQ2hhclR5cGVzLkVMU0UgKi9dOiBbNCAvKiBTdGF0ZXMuSU5fU1VCX1BBVEggKi8sIDAgLyogQWN0aW9ucy5BUFBFTkQgKi9dXG59O1xucGF0aFN0YXRlTWFjaGluZVs1IC8qIFN0YXRlcy5JTl9TSU5HTEVfUVVPVEUgKi9dID0ge1xuICAgIFtcIidcIiAvKiBQYXRoQ2hhclR5cGVzLlNJTkdMRV9RVU9URSAqL106IFs0IC8qIFN0YXRlcy5JTl9TVUJfUEFUSCAqLywgMCAvKiBBY3Rpb25zLkFQUEVORCAqL10sXG4gICAgW1wib1wiIC8qIFBhdGhDaGFyVHlwZXMuRU5EX09GX0ZBSUwgKi9dOiA4IC8qIFN0YXRlcy5FUlJPUiAqLyxcbiAgICBbXCJsXCIgLyogUGF0aENoYXJUeXBlcy5FTFNFICovXTogWzUgLyogU3RhdGVzLklOX1NJTkdMRV9RVU9URSAqLywgMCAvKiBBY3Rpb25zLkFQUEVORCAqL11cbn07XG5wYXRoU3RhdGVNYWNoaW5lWzYgLyogU3RhdGVzLklOX0RPVUJMRV9RVU9URSAqL10gPSB7XG4gICAgW1wiXFxcIlwiIC8qIFBhdGhDaGFyVHlwZXMuRE9VQkxFX1FVT1RFICovXTogWzQgLyogU3RhdGVzLklOX1NVQl9QQVRIICovLCAwIC8qIEFjdGlvbnMuQVBQRU5EICovXSxcbiAgICBbXCJvXCIgLyogUGF0aENoYXJUeXBlcy5FTkRfT0ZfRkFJTCAqL106IDggLyogU3RhdGVzLkVSUk9SICovLFxuICAgIFtcImxcIiAvKiBQYXRoQ2hhclR5cGVzLkVMU0UgKi9dOiBbNiAvKiBTdGF0ZXMuSU5fRE9VQkxFX1FVT1RFICovLCAwIC8qIEFjdGlvbnMuQVBQRU5EICovXVxufTtcbi8qKlxuICogQ2hlY2sgaWYgYW4gZXhwcmVzc2lvbiBpcyBhIGxpdGVyYWwgdmFsdWUuXG4gKi9cbmNvbnN0IGxpdGVyYWxWYWx1ZVJFID0gL15cXHM/KD86dHJ1ZXxmYWxzZXwtP1tcXGQuXSt8J1teJ10qJ3xcIlteXCJdKlwiKVxccz8kLztcbmZ1bmN0aW9uIGlzTGl0ZXJhbChleHApIHtcbiAgICByZXR1cm4gbGl0ZXJhbFZhbHVlUkUudGVzdChleHApO1xufVxuLyoqXG4gKiBTdHJpcCBxdW90ZXMgZnJvbSBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBzdHJpcFF1b3RlcyhzdHIpIHtcbiAgICBjb25zdCBhID0gc3RyLmNoYXJDb2RlQXQoMCk7XG4gICAgY29uc3QgYiA9IHN0ci5jaGFyQ29kZUF0KHN0ci5sZW5ndGggLSAxKTtcbiAgICByZXR1cm4gYSA9PT0gYiAmJiAoYSA9PT0gMHgyMiB8fCBhID09PSAweDI3KSA/IHN0ci5zbGljZSgxLCAtMSkgOiBzdHI7XG59XG4vKipcbiAqIERldGVybWluZSB0aGUgdHlwZSBvZiBhIGNoYXJhY3RlciBpbiBhIGtleXBhdGguXG4gKi9cbmZ1bmN0aW9uIGdldFBhdGhDaGFyVHlwZShjaCkge1xuICAgIGlmIChjaCA9PT0gdW5kZWZpbmVkIHx8IGNoID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIm9cIiAvKiBQYXRoQ2hhclR5cGVzLkVORF9PRl9GQUlMICovO1xuICAgIH1cbiAgICBjb25zdCBjb2RlID0gY2guY2hhckNvZGVBdCgwKTtcbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgY2FzZSAweDViOiAvLyBbXG4gICAgICAgIGNhc2UgMHg1ZDogLy8gXVxuICAgICAgICBjYXNlIDB4MmU6IC8vIC5cbiAgICAgICAgY2FzZSAweDIyOiAvLyBcIlxuICAgICAgICBjYXNlIDB4Mjc6IC8vICdcbiAgICAgICAgICAgIHJldHVybiBjaDtcbiAgICAgICAgY2FzZSAweDVmOiAvLyBfXG4gICAgICAgIGNhc2UgMHgyNDogLy8gJFxuICAgICAgICBjYXNlIDB4MmQ6IC8vIC1cbiAgICAgICAgICAgIHJldHVybiBcImlcIiAvKiBQYXRoQ2hhclR5cGVzLklERU5UICovO1xuICAgICAgICBjYXNlIDB4MDk6IC8vIFRhYiAoSFQpXG4gICAgICAgIGNhc2UgMHgwYTogLy8gTmV3bGluZSAoTEYpXG4gICAgICAgIGNhc2UgMHgwZDogLy8gUmV0dXJuIChDUilcbiAgICAgICAgY2FzZSAweGEwOiAvLyBOby1icmVhayBzcGFjZSAoTkJTUClcbiAgICAgICAgY2FzZSAweGZlZmY6IC8vIEJ5dGUgT3JkZXIgTWFyayAoQk9NKVxuICAgICAgICBjYXNlIDB4MjAyODogLy8gTGluZSBTZXBhcmF0b3IgKExTKVxuICAgICAgICBjYXNlIDB4MjAyOTogLy8gUGFyYWdyYXBoIFNlcGFyYXRvciAoUFMpXG4gICAgICAgICAgICByZXR1cm4gXCJ3XCIgLyogUGF0aENoYXJUeXBlcy5XT1JLU1BBQ0UgKi87XG4gICAgfVxuICAgIHJldHVybiBcImlcIiAvKiBQYXRoQ2hhclR5cGVzLklERU5UICovO1xufVxuLyoqXG4gKiBGb3JtYXQgYSBzdWJQYXRoLCByZXR1cm4gaXRzIHBsYWluIGZvcm0gaWYgaXQgaXNcbiAqIGEgbGl0ZXJhbCBzdHJpbmcgb3IgbnVtYmVyLiBPdGhlcndpc2UgcHJlcGVuZCB0aGVcbiAqIGR5bmFtaWMgaW5kaWNhdG9yICgqKS5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0U3ViUGF0aChwYXRoKSB7XG4gICAgY29uc3QgdHJpbW1lZCA9IHBhdGgudHJpbSgpO1xuICAgIC8vIGludmFsaWQgbGVhZGluZyAwXG4gICAgaWYgKHBhdGguY2hhckF0KDApID09PSAnMCcgJiYgaXNOYU4ocGFyc2VJbnQocGF0aCkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGlzTGl0ZXJhbCh0cmltbWVkKVxuICAgICAgICA/IHN0cmlwUXVvdGVzKHRyaW1tZWQpXG4gICAgICAgIDogXCIqXCIgLyogUGF0aENoYXJUeXBlcy5BU1RBUklTSyAqLyArIHRyaW1tZWQ7XG59XG4vKipcbiAqIFBhcnNlIGEgc3RyaW5nIHBhdGggaW50byBhbiBhcnJheSBvZiBzZWdtZW50c1xuICovXG5mdW5jdGlvbiBwYXJzZShwYXRoKSB7XG4gICAgY29uc3Qga2V5cyA9IFtdO1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGxldCBtb2RlID0gMCAvKiBTdGF0ZXMuQkVGT1JFX1BBVEggKi87XG4gICAgbGV0IHN1YlBhdGhEZXB0aCA9IDA7XG4gICAgbGV0IGM7XG4gICAgbGV0IGtleTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGxldCBuZXdDaGFyO1xuICAgIGxldCB0eXBlO1xuICAgIGxldCB0cmFuc2l0aW9uO1xuICAgIGxldCBhY3Rpb247XG4gICAgbGV0IHR5cGVNYXA7XG4gICAgY29uc3QgYWN0aW9ucyA9IFtdO1xuICAgIGFjdGlvbnNbMCAvKiBBY3Rpb25zLkFQUEVORCAqL10gPSAoKSA9PiB7XG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAga2V5ID0gbmV3Q2hhcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGtleSArPSBuZXdDaGFyO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBhY3Rpb25zWzEgLyogQWN0aW9ucy5QVVNIICovXSA9ICgpID0+IHtcbiAgICAgICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGtleSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgYWN0aW9uc1syIC8qIEFjdGlvbnMuSU5DX1NVQl9QQVRIX0RFUFRIICovXSA9ICgpID0+IHtcbiAgICAgICAgYWN0aW9uc1swIC8qIEFjdGlvbnMuQVBQRU5EICovXSgpO1xuICAgICAgICBzdWJQYXRoRGVwdGgrKztcbiAgICB9O1xuICAgIGFjdGlvbnNbMyAvKiBBY3Rpb25zLlBVU0hfU1VCX1BBVEggKi9dID0gKCkgPT4ge1xuICAgICAgICBpZiAoc3ViUGF0aERlcHRoID4gMCkge1xuICAgICAgICAgICAgc3ViUGF0aERlcHRoLS07XG4gICAgICAgICAgICBtb2RlID0gNCAvKiBTdGF0ZXMuSU5fU1VCX1BBVEggKi87XG4gICAgICAgICAgICBhY3Rpb25zWzAgLyogQWN0aW9ucy5BUFBFTkQgKi9dKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdWJQYXRoRGVwdGggPSAwO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5ID0gZm9ybWF0U3ViUGF0aChrZXkpO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zWzEgLyogQWN0aW9ucy5QVVNIICovXSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBtYXliZVVuZXNjYXBlUXVvdGUoKSB7XG4gICAgICAgIGNvbnN0IG5leHRDaGFyID0gcGF0aFtpbmRleCArIDFdO1xuICAgICAgICBpZiAoKG1vZGUgPT09IDUgLyogU3RhdGVzLklOX1NJTkdMRV9RVU9URSAqLyAmJlxuICAgICAgICAgICAgbmV4dENoYXIgPT09IFwiJ1wiIC8qIFBhdGhDaGFyVHlwZXMuU0lOR0xFX1FVT1RFICovKSB8fFxuICAgICAgICAgICAgKG1vZGUgPT09IDYgLyogU3RhdGVzLklOX0RPVUJMRV9RVU9URSAqLyAmJlxuICAgICAgICAgICAgICAgIG5leHRDaGFyID09PSBcIlxcXCJcIiAvKiBQYXRoQ2hhclR5cGVzLkRPVUJMRV9RVU9URSAqLykpIHtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICBuZXdDaGFyID0gJ1xcXFwnICsgbmV4dENoYXI7XG4gICAgICAgICAgICBhY3Rpb25zWzAgLyogQWN0aW9ucy5BUFBFTkQgKi9dKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB3aGlsZSAobW9kZSAhPT0gbnVsbCkge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBjID0gcGF0aFtpbmRleF07XG4gICAgICAgIGlmIChjID09PSAnXFxcXCcgJiYgbWF5YmVVbmVzY2FwZVF1b3RlKCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHR5cGUgPSBnZXRQYXRoQ2hhclR5cGUoYyk7XG4gICAgICAgIHR5cGVNYXAgPSBwYXRoU3RhdGVNYWNoaW5lW21vZGVdO1xuICAgICAgICB0cmFuc2l0aW9uID0gdHlwZU1hcFt0eXBlXSB8fCB0eXBlTWFwW1wibFwiIC8qIFBhdGhDaGFyVHlwZXMuRUxTRSAqL10gfHwgOCAvKiBTdGF0ZXMuRVJST1IgKi87XG4gICAgICAgIC8vIGNoZWNrIHBhcnNlIGVycm9yXG4gICAgICAgIGlmICh0cmFuc2l0aW9uID09PSA4IC8qIFN0YXRlcy5FUlJPUiAqLykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG1vZGUgPSB0cmFuc2l0aW9uWzBdO1xuICAgICAgICBpZiAodHJhbnNpdGlvblsxXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhY3Rpb24gPSBhY3Rpb25zW3RyYW5zaXRpb25bMV1dO1xuICAgICAgICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICAgICAgICAgIG5ld0NoYXIgPSBjO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24oKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayBwYXJzZSBmaW5pc2hcbiAgICAgICAgaWYgKG1vZGUgPT09IDcgLyogU3RhdGVzLkFGVEVSX1BBVEggKi8pIHtcbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8gcGF0aCB0b2tlbiBjYWNoZVxuY29uc3QgY2FjaGUgPSBuZXcgTWFwKCk7XG4vKipcbiAqIGtleS12YWx1ZSBtZXNzYWdlIHJlc29sdmVyXG4gKlxuICogQHJlbWFya3NcbiAqIFJlc29sdmVzIG1lc3NhZ2VzIHdpdGggdGhlIGtleS12YWx1ZSBzdHJ1Y3R1cmUuIE5vdGUgdGhhdCBtZXNzYWdlcyB3aXRoIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSBzdWNoIGFzIG9iamVjdHMgY2Fubm90IGJlIHJlc29sdmVkXG4gKlxuICogQHBhcmFtIG9iaiAtIEEgdGFyZ2V0IG9iamVjdCB0byBiZSByZXNvbHZlZCB3aXRoIHBhdGhcbiAqIEBwYXJhbSBwYXRoIC0gQSB7QGxpbmsgUGF0aCB8IHBhdGh9IHRvIHJlc29sdmUgdGhlIHZhbHVlIG9mIG1lc3NhZ2VcbiAqXG4gKiBAcmV0dXJucyBBIHJlc29sdmVkIHtAbGluayBQYXRoVmFsdWUgfCBwYXRoIHZhbHVlfVxuICpcbiAqIEBWdWVJMThuR2VuZXJhbFxuICovXG5mdW5jdGlvbiByZXNvbHZlV2l0aEtleVZhbHVlKG9iaiwgcGF0aCkge1xuICAgIHJldHVybiBpc09iamVjdChvYmopID8gb2JqW3BhdGhdIDogbnVsbDtcbn1cbi8qKlxuICogbWVzc2FnZSByZXNvbHZlclxuICpcbiAqIEByZW1hcmtzXG4gKiBSZXNvbHZlcyBtZXNzYWdlcy4gbWVzc2FnZXMgd2l0aCBhIGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmUgc3VjaCBhcyBvYmplY3RzIGNhbiBiZSByZXNvbHZlZC4gVGhpcyByZXNvbHZlciBpcyB1c2VkIGluIFZ1ZUkxOG4gYXMgZGVmYXVsdC5cbiAqXG4gKiBAcGFyYW0gb2JqIC0gQSB0YXJnZXQgb2JqZWN0IHRvIGJlIHJlc29sdmVkIHdpdGggcGF0aFxuICogQHBhcmFtIHBhdGggLSBBIHtAbGluayBQYXRoIHwgcGF0aH0gdG8gcmVzb2x2ZSB0aGUgdmFsdWUgb2YgbWVzc2FnZVxuICpcbiAqIEByZXR1cm5zIEEgcmVzb2x2ZWQge0BsaW5rIFBhdGhWYWx1ZSB8IHBhdGggdmFsdWV9XG4gKlxuICogQFZ1ZUkxOG5HZW5lcmFsXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVWYWx1ZShvYmosIHBhdGgpIHtcbiAgICAvLyBjaGVjayBvYmplY3RcbiAgICBpZiAoIWlzT2JqZWN0KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIHBhcnNlIHBhdGhcbiAgICBsZXQgaGl0ID0gY2FjaGUuZ2V0KHBhdGgpO1xuICAgIGlmICghaGl0KSB7XG4gICAgICAgIGhpdCA9IHBhcnNlKHBhdGgpO1xuICAgICAgICBpZiAoaGl0KSB7XG4gICAgICAgICAgICBjYWNoZS5zZXQocGF0aCwgaGl0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBjaGVjayBoaXRcbiAgICBpZiAoIWhpdCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gcmVzb2x2ZSBwYXRoIHZhbHVlXG4gICAgY29uc3QgbGVuID0gaGl0Lmxlbmd0aDtcbiAgICBsZXQgbGFzdCA9IG9iajtcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgY29uc3QgdmFsID0gbGFzdFtoaXRbaV1dO1xuICAgICAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGxhc3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBsYXN0ID0gdmFsO1xuICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiBsYXN0O1xufVxuXG5jb25zdCBERUZBVUxUX01PRElGSUVSID0gKHN0cikgPT4gc3RyO1xuY29uc3QgREVGQVVMVF9NRVNTQUdFID0gKGN0eCkgPT4gJyc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbmNvbnN0IERFRkFVTFRfTUVTU0FHRV9EQVRBX1RZUEUgPSAndGV4dCc7XG5jb25zdCBERUZBVUxUX05PUk1BTElaRSA9ICh2YWx1ZXMpID0+IHZhbHVlcy5sZW5ndGggPT09IDAgPyAnJyA6IGpvaW4odmFsdWVzKTtcbmNvbnN0IERFRkFVTFRfSU5URVJQT0xBVEUgPSB0b0Rpc3BsYXlTdHJpbmc7XG5mdW5jdGlvbiBwbHVyYWxEZWZhdWx0KGNob2ljZSwgY2hvaWNlc0xlbmd0aCkge1xuICAgIGNob2ljZSA9IE1hdGguYWJzKGNob2ljZSk7XG4gICAgaWYgKGNob2ljZXNMZW5ndGggPT09IDIpIHtcbiAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIHJldHVybiBjaG9pY2VcbiAgICAgICAgICAgID8gY2hvaWNlID4gMVxuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogMFxuICAgICAgICAgICAgOiAxO1xuICAgIH1cbiAgICByZXR1cm4gY2hvaWNlID8gTWF0aC5taW4oY2hvaWNlLCAyKSA6IDA7XG59XG5mdW5jdGlvbiBnZXRQbHVyYWxJbmRleChvcHRpb25zKSB7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgY29uc3QgaW5kZXggPSBpc051bWJlcihvcHRpb25zLnBsdXJhbEluZGV4KVxuICAgICAgICA/IG9wdGlvbnMucGx1cmFsSW5kZXhcbiAgICAgICAgOiAtMTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICByZXR1cm4gb3B0aW9ucy5uYW1lZCAmJiAoaXNOdW1iZXIob3B0aW9ucy5uYW1lZC5jb3VudCkgfHwgaXNOdW1iZXIob3B0aW9ucy5uYW1lZC5uKSlcbiAgICAgICAgPyBpc051bWJlcihvcHRpb25zLm5hbWVkLmNvdW50KVxuICAgICAgICAgICAgPyBvcHRpb25zLm5hbWVkLmNvdW50XG4gICAgICAgICAgICA6IGlzTnVtYmVyKG9wdGlvbnMubmFtZWQubilcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMubmFtZWQublxuICAgICAgICAgICAgICAgIDogaW5kZXhcbiAgICAgICAgOiBpbmRleDtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWVkKHBsdXJhbEluZGV4LCBwcm9wcykge1xuICAgIGlmICghcHJvcHMuY291bnQpIHtcbiAgICAgICAgcHJvcHMuY291bnQgPSBwbHVyYWxJbmRleDtcbiAgICB9XG4gICAgaWYgKCFwcm9wcy5uKSB7XG4gICAgICAgIHByb3BzLm4gPSBwbHVyYWxJbmRleDtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVNZXNzYWdlQ29udGV4dChvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBsb2NhbGUgPSBvcHRpb25zLmxvY2FsZTtcbiAgICBjb25zdCBwbHVyYWxJbmRleCA9IGdldFBsdXJhbEluZGV4KG9wdGlvbnMpO1xuICAgIGNvbnN0IHBsdXJhbFJ1bGUgPSBpc09iamVjdChvcHRpb25zLnBsdXJhbFJ1bGVzKSAmJlxuICAgICAgICBpc1N0cmluZyhsb2NhbGUpICYmXG4gICAgICAgIGlzRnVuY3Rpb24ob3B0aW9ucy5wbHVyYWxSdWxlc1tsb2NhbGVdKVxuICAgICAgICA/IG9wdGlvbnMucGx1cmFsUnVsZXNbbG9jYWxlXVxuICAgICAgICA6IHBsdXJhbERlZmF1bHQ7XG4gICAgY29uc3Qgb3JnUGx1cmFsUnVsZSA9IGlzT2JqZWN0KG9wdGlvbnMucGx1cmFsUnVsZXMpICYmXG4gICAgICAgIGlzU3RyaW5nKGxvY2FsZSkgJiZcbiAgICAgICAgaXNGdW5jdGlvbihvcHRpb25zLnBsdXJhbFJ1bGVzW2xvY2FsZV0pXG4gICAgICAgID8gcGx1cmFsRGVmYXVsdFxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwbHVyYWwgPSAobWVzc2FnZXMpID0+IHtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VzW3BsdXJhbFJ1bGUocGx1cmFsSW5kZXgsIG1lc3NhZ2VzLmxlbmd0aCwgb3JnUGx1cmFsUnVsZSldO1xuICAgIH07XG4gICAgY29uc3QgX2xpc3QgPSBvcHRpb25zLmxpc3QgfHwgW107XG4gICAgY29uc3QgbGlzdCA9IChpbmRleCkgPT4gX2xpc3RbaW5kZXhdO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgX25hbWVkID0gb3B0aW9ucy5uYW1lZCB8fCB7fTtcbiAgICBpc051bWJlcihvcHRpb25zLnBsdXJhbEluZGV4KSAmJiBub3JtYWxpemVOYW1lZChwbHVyYWxJbmRleCwgX25hbWVkKTtcbiAgICBjb25zdCBuYW1lZCA9IChrZXkpID0+IF9uYW1lZFtrZXldO1xuICAgIGZ1bmN0aW9uIG1lc3NhZ2Uoa2V5KSB7XG4gICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICBjb25zdCBtc2cgPSBpc0Z1bmN0aW9uKG9wdGlvbnMubWVzc2FnZXMpXG4gICAgICAgICAgICA/IG9wdGlvbnMubWVzc2FnZXMoa2V5KVxuICAgICAgICAgICAgOiBpc09iamVjdChvcHRpb25zLm1lc3NhZ2VzKVxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5tZXNzYWdlc1trZXldXG4gICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgcmV0dXJuICFtc2dcbiAgICAgICAgICAgID8gb3B0aW9ucy5wYXJlbnRcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMucGFyZW50Lm1lc3NhZ2Uoa2V5KSAvLyByZXNvbHZlIGZyb20gcGFyZW50IG1lc3NhZ2VzXG4gICAgICAgICAgICAgICAgOiBERUZBVUxUX01FU1NBR0VcbiAgICAgICAgICAgIDogbXNnO1xuICAgIH1cbiAgICBjb25zdCBfbW9kaWZpZXIgPSAobmFtZSkgPT4gb3B0aW9ucy5tb2RpZmllcnNcbiAgICAgICAgPyBvcHRpb25zLm1vZGlmaWVyc1tuYW1lXVxuICAgICAgICA6IERFRkFVTFRfTU9ESUZJRVI7XG4gICAgY29uc3Qgbm9ybWFsaXplID0gaXNQbGFpbk9iamVjdChvcHRpb25zLnByb2Nlc3NvcikgJiYgaXNGdW5jdGlvbihvcHRpb25zLnByb2Nlc3Nvci5ub3JtYWxpemUpXG4gICAgICAgID8gb3B0aW9ucy5wcm9jZXNzb3Iubm9ybWFsaXplXG4gICAgICAgIDogREVGQVVMVF9OT1JNQUxJWkU7XG4gICAgY29uc3QgaW50ZXJwb2xhdGUgPSBpc1BsYWluT2JqZWN0KG9wdGlvbnMucHJvY2Vzc29yKSAmJlxuICAgICAgICBpc0Z1bmN0aW9uKG9wdGlvbnMucHJvY2Vzc29yLmludGVycG9sYXRlKVxuICAgICAgICA/IG9wdGlvbnMucHJvY2Vzc29yLmludGVycG9sYXRlXG4gICAgICAgIDogREVGQVVMVF9JTlRFUlBPTEFURTtcbiAgICBjb25zdCB0eXBlID0gaXNQbGFpbk9iamVjdChvcHRpb25zLnByb2Nlc3NvcikgJiYgaXNTdHJpbmcob3B0aW9ucy5wcm9jZXNzb3IudHlwZSlcbiAgICAgICAgPyBvcHRpb25zLnByb2Nlc3Nvci50eXBlXG4gICAgICAgIDogREVGQVVMVF9NRVNTQUdFX0RBVEFfVFlQRTtcbiAgICBjb25zdCBsaW5rZWQgPSAoa2V5LCAuLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IFthcmcxLCBhcmcyXSA9IGFyZ3M7XG4gICAgICAgIGxldCB0eXBlID0gJ3RleHQnO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSAnJztcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QoYXJnMSkpIHtcbiAgICAgICAgICAgICAgICBtb2RpZmllciA9IGFyZzEubW9kaWZpZXIgfHwgbW9kaWZpZXI7XG4gICAgICAgICAgICAgICAgdHlwZSA9IGFyZzEudHlwZSB8fCB0eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNTdHJpbmcoYXJnMSkpIHtcbiAgICAgICAgICAgICAgICBtb2RpZmllciA9IGFyZzEgfHwgbW9kaWZpZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGlmIChpc1N0cmluZyhhcmcxKSkge1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyID0gYXJnMSB8fCBtb2RpZmllcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmluZyhhcmcyKSkge1xuICAgICAgICAgICAgICAgIHR5cGUgPSBhcmcyIHx8IHR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0ID0gbWVzc2FnZShrZXkpKGN0eCk7XG4gICAgICAgIGNvbnN0IG1zZyA9IFxuICAgICAgICAvLyBUaGUgbWVzc2FnZSBpbiB2bm9kZSByZXNvbHZlZCB3aXRoIGxpbmtlZCBhcmUgcmV0dXJuZWQgYXMgYW4gYXJyYXkgYnkgcHJvY2Vzc29yLm5vbWFsaXplXG4gICAgICAgIHR5cGUgPT09ICd2bm9kZScgJiYgaXNBcnJheShyZXQpICYmIG1vZGlmaWVyXG4gICAgICAgICAgICA/IHJldFswXVxuICAgICAgICAgICAgOiByZXQ7XG4gICAgICAgIHJldHVybiBtb2RpZmllciA/IF9tb2RpZmllcihtb2RpZmllcikobXNnLCB0eXBlKSA6IG1zZztcbiAgICB9O1xuICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgW1wibGlzdFwiIC8qIEhlbHBlck5hbWVNYXAuTElTVCAqL106IGxpc3QsXG4gICAgICAgIFtcIm5hbWVkXCIgLyogSGVscGVyTmFtZU1hcC5OQU1FRCAqL106IG5hbWVkLFxuICAgICAgICBbXCJwbHVyYWxcIiAvKiBIZWxwZXJOYW1lTWFwLlBMVVJBTCAqL106IHBsdXJhbCxcbiAgICAgICAgW1wibGlua2VkXCIgLyogSGVscGVyTmFtZU1hcC5MSU5LRUQgKi9dOiBsaW5rZWQsXG4gICAgICAgIFtcIm1lc3NhZ2VcIiAvKiBIZWxwZXJOYW1lTWFwLk1FU1NBR0UgKi9dOiBtZXNzYWdlLFxuICAgICAgICBbXCJ0eXBlXCIgLyogSGVscGVyTmFtZU1hcC5UWVBFICovXTogdHlwZSxcbiAgICAgICAgW1wiaW50ZXJwb2xhdGVcIiAvKiBIZWxwZXJOYW1lTWFwLklOVEVSUE9MQVRFICovXTogaW50ZXJwb2xhdGUsXG4gICAgICAgIFtcIm5vcm1hbGl6ZVwiIC8qIEhlbHBlck5hbWVNYXAuTk9STUFMSVpFICovXTogbm9ybWFsaXplLFxuICAgICAgICBbXCJ2YWx1ZXNcIiAvKiBIZWxwZXJOYW1lTWFwLlZBTFVFUyAqL106IGFzc2lnbih7fSwgX2xpc3QsIF9uYW1lZClcbiAgICB9O1xuICAgIHJldHVybiBjdHg7XG59XG5cbmxldCBkZXZ0b29scyA9IG51bGw7XG5mdW5jdGlvbiBzZXREZXZUb29sc0hvb2soaG9vaykge1xuICAgIGRldnRvb2xzID0gaG9vaztcbn1cbmZ1bmN0aW9uIGdldERldlRvb2xzSG9vaygpIHtcbiAgICByZXR1cm4gZGV2dG9vbHM7XG59XG5mdW5jdGlvbiBpbml0STE4bkRldlRvb2xzKGkxOG4sIHZlcnNpb24sIG1ldGEpIHtcbiAgICAvLyBUT0RPOiBxdWV1ZSBpZiBkZXZ0b29scyBpcyB1bmRlZmluZWRcbiAgICBkZXZ0b29scyAmJlxuICAgICAgICBkZXZ0b29scy5lbWl0KFwiaTE4bjppbml0XCIgLyogSW50bGlmeURldlRvb2xzSG9va3MuSTE4bkluaXQgKi8sIHtcbiAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGkxOG4sXG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgbWV0YVxuICAgICAgICB9KTtcbn1cbmNvbnN0IHRyYW5zbGF0ZURldlRvb2xzID0gLyogI19fUFVSRV9fKi8gY3JlYXRlRGV2VG9vbHNIb29rKFwiZnVuY3Rpb246dHJhbnNsYXRlXCIgLyogSW50bGlmeURldlRvb2xzSG9va3MuRnVuY3Rpb25UcmFuc2xhdGUgKi8pO1xuZnVuY3Rpb24gY3JlYXRlRGV2VG9vbHNIb29rKGhvb2spIHtcbiAgICByZXR1cm4gKHBheWxvYWRzKSA9PiBkZXZ0b29scyAmJiBkZXZ0b29scy5lbWl0KGhvb2ssIHBheWxvYWRzKTtcbn1cblxuY29uc3QgQ29yZVdhcm5Db2RlcyA9IHtcbiAgICBOT1RfRk9VTkRfS0VZOiAxLFxuICAgIEZBTExCQUNLX1RPX1RSQU5TTEFURTogMixcbiAgICBDQU5OT1RfRk9STUFUX05VTUJFUjogMyxcbiAgICBGQUxMQkFDS19UT19OVU1CRVJfRk9STUFUOiA0LFxuICAgIENBTk5PVF9GT1JNQVRfREFURTogNSxcbiAgICBGQUxMQkFDS19UT19EQVRFX0ZPUk1BVDogNixcbiAgICBFWFBFUklNRU5UQUxfQ1VTVE9NX01FU1NBR0VfQ09NUElMRVI6IDcsXG4gICAgX19FWFRFTkRfUE9JTlRfXzogOFxufTtcbi8qKiBAaW50ZXJuYWwgKi9cbmNvbnN0IHdhcm5NZXNzYWdlcyA9IHtcbiAgICBbQ29yZVdhcm5Db2Rlcy5OT1RfRk9VTkRfS0VZXTogYE5vdCBmb3VuZCAne2tleX0nIGtleSBpbiAne2xvY2FsZX0nIGxvY2FsZSBtZXNzYWdlcy5gLFxuICAgIFtDb3JlV2FybkNvZGVzLkZBTExCQUNLX1RPX1RSQU5TTEFURV06IGBGYWxsIGJhY2sgdG8gdHJhbnNsYXRlICd7a2V5fScga2V5IHdpdGggJ3t0YXJnZXR9JyBsb2NhbGUuYCxcbiAgICBbQ29yZVdhcm5Db2Rlcy5DQU5OT1RfRk9STUFUX05VTUJFUl06IGBDYW5ub3QgZm9ybWF0IGEgbnVtYmVyIHZhbHVlIGR1ZSB0byBub3Qgc3VwcG9ydGVkIEludGwuTnVtYmVyRm9ybWF0LmAsXG4gICAgW0NvcmVXYXJuQ29kZXMuRkFMTEJBQ0tfVE9fTlVNQkVSX0ZPUk1BVF06IGBGYWxsIGJhY2sgdG8gbnVtYmVyIGZvcm1hdCAne2tleX0nIGtleSB3aXRoICd7dGFyZ2V0fScgbG9jYWxlLmAsXG4gICAgW0NvcmVXYXJuQ29kZXMuQ0FOTk9UX0ZPUk1BVF9EQVRFXTogYENhbm5vdCBmb3JtYXQgYSBkYXRlIHZhbHVlIGR1ZSB0byBub3Qgc3VwcG9ydGVkIEludGwuRGF0ZVRpbWVGb3JtYXQuYCxcbiAgICBbQ29yZVdhcm5Db2Rlcy5GQUxMQkFDS19UT19EQVRFX0ZPUk1BVF06IGBGYWxsIGJhY2sgdG8gZGF0ZXRpbWUgZm9ybWF0ICd7a2V5fScga2V5IHdpdGggJ3t0YXJnZXR9JyBsb2NhbGUuYCxcbiAgICBbQ29yZVdhcm5Db2Rlcy5FWFBFUklNRU5UQUxfQ1VTVE9NX01FU1NBR0VfQ09NUElMRVJdOiBgVGhpcyBwcm9qZWN0IGlzIHVzaW5nIEN1c3RvbSBNZXNzYWdlIENvbXBpbGVyLCB3aGljaCBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZS4gSXQgbWF5IHJlY2VpdmUgYnJlYWtpbmcgY2hhbmdlcyBvciBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuYFxufTtcbmZ1bmN0aW9uIGdldFdhcm5NZXNzYWdlKGNvZGUsIC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gZm9ybWF0JDEod2Fybk1lc3NhZ2VzW2NvZGVdLCAuLi5hcmdzKTtcbn1cblxuY29uc3QgY29kZSA9IENvbXBpbGVFcnJvckNvZGVzLl9fRVhURU5EX1BPSU5UX187XG5jb25zdCBpbmMgPSBpbmNyZW1lbnRlcihjb2RlKTtcbmNvbnN0IENvcmVFcnJvckNvZGVzID0ge1xuICAgIElOVkFMSURfQVJHVU1FTlQ6IGNvZGUsIC8vIDE4XG4gICAgSU5WQUxJRF9EQVRFX0FSR1VNRU5UOiBpbmMoKSwgLy8gMTlcbiAgICBJTlZBTElEX0lTT19EQVRFX0FSR1VNRU5UOiBpbmMoKSwgLy8gMjBcbiAgICBOT1RfU1VQUE9SVF9OT05fU1RSSU5HX01FU1NBR0U6IGluYygpLCAvLyAyMVxuICAgIE5PVF9TVVBQT1JUX0xPQ0FMRV9QUk9NSVNFX1ZBTFVFOiBpbmMoKSwgLy8gMjJcbiAgICBOT1RfU1VQUE9SVF9MT0NBTEVfQVNZTkNfRlVOQ1RJT046IGluYygpLCAvLyAyM1xuICAgIE5PVF9TVVBQT1JUX0xPQ0FMRV9UWVBFOiBpbmMoKSwgLy8gMjRcbiAgICBfX0VYVEVORF9QT0lOVF9fOiBpbmMoKSAvLyAyNVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUNvcmVFcnJvcihjb2RlKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNvbXBpbGVFcnJvcihjb2RlLCBudWxsLCB7IG1lc3NhZ2VzOiBlcnJvck1lc3NhZ2VzIH0gKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmNvbnN0IGVycm9yTWVzc2FnZXMgPSB7XG4gICAgW0NvcmVFcnJvckNvZGVzLklOVkFMSURfQVJHVU1FTlRdOiAnSW52YWxpZCBhcmd1bWVudHMnLFxuICAgIFtDb3JlRXJyb3JDb2Rlcy5JTlZBTElEX0RBVEVfQVJHVU1FTlRdOiAnVGhlIGRhdGUgcHJvdmlkZWQgaXMgYW4gaW52YWxpZCBEYXRlIG9iamVjdC4nICtcbiAgICAgICAgJ01ha2Ugc3VyZSB5b3VyIERhdGUgcmVwcmVzZW50cyBhIHZhbGlkIGRhdGUuJyxcbiAgICBbQ29yZUVycm9yQ29kZXMuSU5WQUxJRF9JU09fREFURV9BUkdVTUVOVF06ICdUaGUgYXJndW1lbnQgcHJvdmlkZWQgaXMgbm90IGEgdmFsaWQgSVNPIGRhdGUgc3RyaW5nJyxcbiAgICBbQ29yZUVycm9yQ29kZXMuTk9UX1NVUFBPUlRfTk9OX1NUUklOR19NRVNTQUdFXTogJ05vdCBzdXBwb3J0IG5vbi1zdHJpbmcgbWVzc2FnZScsXG4gICAgW0NvcmVFcnJvckNvZGVzLk5PVF9TVVBQT1JUX0xPQ0FMRV9QUk9NSVNFX1ZBTFVFXTogJ2Nhbm5vdCBzdXBwb3J0IHByb21pc2UgdmFsdWUnLFxuICAgIFtDb3JlRXJyb3JDb2Rlcy5OT1RfU1VQUE9SVF9MT0NBTEVfQVNZTkNfRlVOQ1RJT05dOiAnY2Fubm90IHN1cHBvcnQgYXN5bmMgZnVuY3Rpb24nLFxuICAgIFtDb3JlRXJyb3JDb2Rlcy5OT1RfU1VQUE9SVF9MT0NBTEVfVFlQRV06ICdjYW5ub3Qgc3VwcG9ydCBsb2NhbGUgdHlwZSdcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGdldExvY2FsZShjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9jYWxlICE9IG51bGxcbiAgICAgICAgPyByZXNvbHZlTG9jYWxlKG9wdGlvbnMubG9jYWxlKVxuICAgICAgICA6IHJlc29sdmVMb2NhbGUoY29udGV4dC5sb2NhbGUpO1xufVxubGV0IF9yZXNvbHZlTG9jYWxlO1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gcmVzb2x2ZUxvY2FsZShsb2NhbGUpIHtcbiAgICBpZiAoaXNTdHJpbmcobG9jYWxlKSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24obG9jYWxlKSkge1xuICAgICAgICAgICAgaWYgKGxvY2FsZS5yZXNvbHZlZE9uY2UgJiYgX3Jlc29sdmVMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcmVzb2x2ZUxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2FsZS5jb25zdHJ1Y3Rvci5uYW1lID09PSAnRnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZSA9IGxvY2FsZSgpO1xuICAgICAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzb2x2ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ29yZUVycm9yKENvcmVFcnJvckNvZGVzLk5PVF9TVVBQT1JUX0xPQ0FMRV9QUk9NSVNFX1ZBTFVFKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIChfcmVzb2x2ZUxvY2FsZSA9IHJlc29sdmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ29yZUVycm9yKENvcmVFcnJvckNvZGVzLk5PVF9TVVBQT1JUX0xPQ0FMRV9BU1lOQ19GVU5DVElPTik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDb3JlRXJyb3IoQ29yZUVycm9yQ29kZXMuTk9UX1NVUFBPUlRfTE9DQUxFX1RZUEUpO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBGYWxsYmFjayB3aXRoIHNpbXBsZSBpbXBsZW1lbmF0aW9uXG4gKlxuICogQHJlbWFya3NcbiAqIEEgZmFsbGJhY2sgbG9jYWxlIGZ1bmN0aW9uIGltcGxlbWVudGVkIHdpdGggYSBzaW1wbGUgZmFsbGJhY2sgYWxnb3JpdGhtLlxuICpcbiAqIEJhc2ljYWxseSwgaXQgcmV0dXJucyB0aGUgdmFsdWUgYXMgc3BlY2lmaWVkIGluIHRoZSBgZmFsbGJhY2tMb2NhbGVgIHByb3BzLCBhbmQgaXMgcHJvY2Vzc2VkIHdpdGggdGhlIGZhbGxiYWNrIGluc2lkZSBpbnRsaWZ5LlxuICpcbiAqIEBwYXJhbSBjdHggLSBBIHtAbGluayBDb3JlQ29udGV4dCB8IGNvbnRleHR9XG4gKiBAcGFyYW0gZmFsbGJhY2sgLSBBIHtAbGluayBGYWxsYmFja0xvY2FsZSB8IGZhbGxiYWNrIGxvY2FsZX1cbiAqIEBwYXJhbSBzdGFydCAtIEEgc3RhcnRpbmcge0BsaW5rIExvY2FsZSB8IGxvY2FsZX1cbiAqXG4gKiBAcmV0dXJucyBGYWxsYmFjayBsb2NhbGVzXG4gKlxuICogQFZ1ZUkxOG5HZW5lcmFsXG4gKi9cbmZ1bmN0aW9uIGZhbGxiYWNrV2l0aFNpbXBsZShjdHgsIGZhbGxiYWNrLCBzdGFydCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuKSB7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KFtcbiAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgLi4uKGlzQXJyYXkoZmFsbGJhY2spXG4gICAgICAgICAgICAgICAgPyBmYWxsYmFja1xuICAgICAgICAgICAgICAgIDogaXNPYmplY3QoZmFsbGJhY2spXG4gICAgICAgICAgICAgICAgICAgID8gT2JqZWN0LmtleXMoZmFsbGJhY2spXG4gICAgICAgICAgICAgICAgICAgIDogaXNTdHJpbmcoZmFsbGJhY2spXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFtmYWxsYmFja11cbiAgICAgICAgICAgICAgICAgICAgICAgIDogW3N0YXJ0XSlcbiAgICAgICAgXSldO1xufVxuLyoqXG4gKiBGYWxsYmFjayB3aXRoIGxvY2FsZSBjaGFpblxuICpcbiAqIEByZW1hcmtzXG4gKiBBIGZhbGxiYWNrIGxvY2FsZSBmdW5jdGlvbiBpbXBsZW1lbnRlZCB3aXRoIGEgZmFsbGJhY2sgY2hhaW4gYWxnb3JpdGhtLiBJdCdzIHVzZWQgaW4gVnVlSTE4biBhcyBkZWZhdWx0LlxuICpcbiAqIEBwYXJhbSBjdHggLSBBIHtAbGluayBDb3JlQ29udGV4dCB8IGNvbnRleHR9XG4gKiBAcGFyYW0gZmFsbGJhY2sgLSBBIHtAbGluayBGYWxsYmFja0xvY2FsZSB8IGZhbGxiYWNrIGxvY2FsZX1cbiAqIEBwYXJhbSBzdGFydCAtIEEgc3RhcnRpbmcge0BsaW5rIExvY2FsZSB8IGxvY2FsZX1cbiAqXG4gKiBAcmV0dXJucyBGYWxsYmFjayBsb2NhbGVzXG4gKlxuICogQFZ1ZUkxOG5TZWUgW0ZhbGxiYWNraW5nXSguLi9ndWlkZS9lc3NlbnRpYWxzL2ZhbGxiYWNrKVxuICpcbiAqIEBWdWVJMThuR2VuZXJhbFxuICovXG5mdW5jdGlvbiBmYWxsYmFja1dpdGhMb2NhbGVDaGFpbihjdHgsIGZhbGxiYWNrLCBzdGFydCkge1xuICAgIGNvbnN0IHN0YXJ0TG9jYWxlID0gaXNTdHJpbmcoc3RhcnQpID8gc3RhcnQgOiBERUZBVUxUX0xPQ0FMRTtcbiAgICBjb25zdCBjb250ZXh0ID0gY3R4O1xuICAgIGlmICghY29udGV4dC5fX2xvY2FsZUNoYWluQ2FjaGUpIHtcbiAgICAgICAgY29udGV4dC5fX2xvY2FsZUNoYWluQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGxldCBjaGFpbiA9IGNvbnRleHQuX19sb2NhbGVDaGFpbkNhY2hlLmdldChzdGFydExvY2FsZSk7XG4gICAgaWYgKCFjaGFpbikge1xuICAgICAgICBjaGFpbiA9IFtdO1xuICAgICAgICAvLyBmaXJzdCBibG9jayBkZWZpbmVkIGJ5IHN0YXJ0XG4gICAgICAgIGxldCBibG9jayA9IFtzdGFydF07XG4gICAgICAgIC8vIHdoaWxlIGFueSBpbnRlcnZlbmluZyBibG9jayBmb3VuZFxuICAgICAgICB3aGlsZSAoaXNBcnJheShibG9jaykpIHtcbiAgICAgICAgICAgIGJsb2NrID0gYXBwZW5kQmxvY2tUb0NoYWluKGNoYWluLCBibG9jaywgZmFsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICAvLyBsYXN0IGJsb2NrIGRlZmluZWQgYnkgZGVmYXVsdFxuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IGlzQXJyYXkoZmFsbGJhY2spIHx8ICFpc1BsYWluT2JqZWN0KGZhbGxiYWNrKVxuICAgICAgICAgICAgPyBmYWxsYmFja1xuICAgICAgICAgICAgOiBmYWxsYmFja1snZGVmYXVsdCddXG4gICAgICAgICAgICAgICAgPyBmYWxsYmFja1snZGVmYXVsdCddXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAvLyBjb252ZXJ0IGRlZmF1bHRzIHRvIGFycmF5XG4gICAgICAgIGJsb2NrID0gaXNTdHJpbmcoZGVmYXVsdHMpID8gW2RlZmF1bHRzXSA6IGRlZmF1bHRzO1xuICAgICAgICBpZiAoaXNBcnJheShibG9jaykpIHtcbiAgICAgICAgICAgIGFwcGVuZEJsb2NrVG9DaGFpbihjaGFpbiwgYmxvY2ssIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0Ll9fbG9jYWxlQ2hhaW5DYWNoZS5zZXQoc3RhcnRMb2NhbGUsIGNoYWluKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYWluO1xufVxuZnVuY3Rpb24gYXBwZW5kQmxvY2tUb0NoYWluKGNoYWluLCBibG9jaywgYmxvY2tzKSB7XG4gICAgbGV0IGZvbGxvdyA9IHRydWU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBibG9jay5sZW5ndGggJiYgaXNCb29sZWFuKGZvbGxvdyk7IGkrKykge1xuICAgICAgICBjb25zdCBsb2NhbGUgPSBibG9ja1tpXTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKGxvY2FsZSkpIHtcbiAgICAgICAgICAgIGZvbGxvdyA9IGFwcGVuZExvY2FsZVRvQ2hhaW4oY2hhaW4sIGJsb2NrW2ldLCBibG9ja3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb2xsb3c7XG59XG5mdW5jdGlvbiBhcHBlbmRMb2NhbGVUb0NoYWluKGNoYWluLCBsb2NhbGUsIGJsb2Nrcykge1xuICAgIGxldCBmb2xsb3c7XG4gICAgY29uc3QgdG9rZW5zID0gbG9jYWxlLnNwbGl0KCctJyk7XG4gICAgZG8ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0b2tlbnMuam9pbignLScpO1xuICAgICAgICBmb2xsb3cgPSBhcHBlbmRJdGVtVG9DaGFpbihjaGFpbiwgdGFyZ2V0LCBibG9ja3MpO1xuICAgICAgICB0b2tlbnMuc3BsaWNlKC0xLCAxKTtcbiAgICB9IHdoaWxlICh0b2tlbnMubGVuZ3RoICYmIGZvbGxvdyA9PT0gdHJ1ZSk7XG4gICAgcmV0dXJuIGZvbGxvdztcbn1cbmZ1bmN0aW9uIGFwcGVuZEl0ZW1Ub0NoYWluKGNoYWluLCB0YXJnZXQsIGJsb2Nrcykge1xuICAgIGxldCBmb2xsb3cgPSBmYWxzZTtcbiAgICBpZiAoIWNoYWluLmluY2x1ZGVzKHRhcmdldCkpIHtcbiAgICAgICAgZm9sbG93ID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgZm9sbG93ID0gdGFyZ2V0W3RhcmdldC5sZW5ndGggLSAxXSAhPT0gJyEnO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxlID0gdGFyZ2V0LnJlcGxhY2UoLyEvZywgJycpO1xuICAgICAgICAgICAgY2hhaW4ucHVzaChsb2NhbGUpO1xuICAgICAgICAgICAgaWYgKChpc0FycmF5KGJsb2NrcykgfHwgaXNQbGFpbk9iamVjdChibG9ja3MpKSAmJlxuICAgICAgICAgICAgICAgIGJsb2Nrc1tsb2NhbGVdIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICBmb2xsb3cgPSBibG9ja3NbbG9jYWxlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9sbG93O1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKipcbiAqIEludGxpZnkgY29yZS1iYXNlIHZlcnNpb25cbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBWRVJTSU9OID0gJzkuMTAuMic7XG5jb25zdCBOT1RfUkVPU0xWRUQgPSAtMTtcbmNvbnN0IERFRkFVTFRfTE9DQUxFID0gJ2VuLVVTJztcbmNvbnN0IE1JU1NJTkdfUkVTT0xWRV9WQUxVRSA9ICcnO1xuY29uc3QgY2FwaXRhbGl6ZSA9IChzdHIpID0+IGAke3N0ci5jaGFyQXQoMCkudG9Mb2NhbGVVcHBlckNhc2UoKX0ke3N0ci5zdWJzdHIoMSl9YDtcbmZ1bmN0aW9uIGdldERlZmF1bHRMaW5rZWRNb2RpZmllcnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdXBwZXI6ICh2YWwsIHR5cGUpID0+IHtcbiAgICAgICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT09ICd0ZXh0JyAmJiBpc1N0cmluZyh2YWwpXG4gICAgICAgICAgICAgICAgPyB2YWwudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgICAgIDogdHlwZSA9PT0gJ3Zub2RlJyAmJiBpc09iamVjdCh2YWwpICYmICdfX3ZfaXNWTm9kZScgaW4gdmFsXG4gICAgICAgICAgICAgICAgICAgID8gdmFsLmNoaWxkcmVuLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgOiB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGxvd2VyOiAodmFsLCB0eXBlKSA9PiB7XG4gICAgICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgICAgIHJldHVybiB0eXBlID09PSAndGV4dCcgJiYgaXNTdHJpbmcodmFsKVxuICAgICAgICAgICAgICAgID8gdmFsLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICA6IHR5cGUgPT09ICd2bm9kZScgJiYgaXNPYmplY3QodmFsKSAmJiAnX192X2lzVk5vZGUnIGluIHZhbFxuICAgICAgICAgICAgICAgICAgICA/IHZhbC5jaGlsZHJlbi50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgIDogdmFsO1xuICAgICAgICB9LFxuICAgICAgICBjYXBpdGFsaXplOiAodmFsLCB0eXBlKSA9PiB7XG4gICAgICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgICAgIHJldHVybiAodHlwZSA9PT0gJ3RleHQnICYmIGlzU3RyaW5nKHZhbClcbiAgICAgICAgICAgICAgICA/IGNhcGl0YWxpemUodmFsKVxuICAgICAgICAgICAgICAgIDogdHlwZSA9PT0gJ3Zub2RlJyAmJiBpc09iamVjdCh2YWwpICYmICdfX3ZfaXNWTm9kZScgaW4gdmFsXG4gICAgICAgICAgICAgICAgICAgID8gY2FwaXRhbGl6ZSh2YWwuY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgICAgIDogdmFsKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5sZXQgX2NvbXBpbGVyO1xuZnVuY3Rpb24gcmVnaXN0ZXJNZXNzYWdlQ29tcGlsZXIoY29tcGlsZXIpIHtcbiAgICBfY29tcGlsZXIgPSBjb21waWxlcjtcbn1cbmxldCBfcmVzb2x2ZXI7XG4vKipcbiAqIFJlZ2lzdGVyIHRoZSBtZXNzYWdlIHJlc29sdmVyXG4gKlxuICogQHBhcmFtIHJlc29sdmVyIC0gQSB7QGxpbmsgTWVzc2FnZVJlc29sdmVyfSBmdW5jdGlvblxuICpcbiAqIEBWdWVJMThuR2VuZXJhbFxuICovXG5mdW5jdGlvbiByZWdpc3Rlck1lc3NhZ2VSZXNvbHZlcihyZXNvbHZlcikge1xuICAgIF9yZXNvbHZlciA9IHJlc29sdmVyO1xufVxubGV0IF9mYWxsYmFja2VyO1xuLyoqXG4gKiBSZWdpc3RlciB0aGUgbG9jYWxlIGZhbGxiYWNrZXJcbiAqXG4gKiBAcGFyYW0gZmFsbGJhY2tlciAtIEEge0BsaW5rIExvY2FsZUZhbGxiYWNrZXJ9IGZ1bmN0aW9uXG4gKlxuICogQFZ1ZUkxOG5HZW5lcmFsXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyTG9jYWxlRmFsbGJhY2tlcihmYWxsYmFja2VyKSB7XG4gICAgX2ZhbGxiYWNrZXIgPSBmYWxsYmFja2VyO1xufVxuLy8gQWRkaXRpb25hbCBNZXRhIGZvciBJbnRsaWZ5IERldlRvb2xzXG5sZXQgX2FkZGl0aW9uYWxNZXRhID0gIG51bGw7XG4vKiAjX19OT19TSURFX0VGRkVDVFNfXyAqL1xuY29uc3Qgc2V0QWRkaXRpb25hbE1ldGEgPSAobWV0YSkgPT4ge1xuICAgIF9hZGRpdGlvbmFsTWV0YSA9IG1ldGE7XG59O1xuLyogI19fTk9fU0lERV9FRkZFQ1RTX18gKi9cbmNvbnN0IGdldEFkZGl0aW9uYWxNZXRhID0gKCkgPT4gX2FkZGl0aW9uYWxNZXRhO1xubGV0IF9mYWxsYmFja0NvbnRleHQgPSBudWxsO1xuY29uc3Qgc2V0RmFsbGJhY2tDb250ZXh0ID0gKGNvbnRleHQpID0+IHtcbiAgICBfZmFsbGJhY2tDb250ZXh0ID0gY29udGV4dDtcbn07XG5jb25zdCBnZXRGYWxsYmFja0NvbnRleHQgPSAoKSA9PiBfZmFsbGJhY2tDb250ZXh0O1xuLy8gSUQgZm9yIENvcmVDb250ZXh0XG5sZXQgX2NpZCA9IDA7XG5mdW5jdGlvbiBjcmVhdGVDb3JlQ29udGV4dChvcHRpb25zID0ge30pIHtcbiAgICAvLyBzZXR1cCBvcHRpb25zXG4gICAgY29uc3Qgb25XYXJuID0gaXNGdW5jdGlvbihvcHRpb25zLm9uV2FybikgPyBvcHRpb25zLm9uV2FybiA6IHdhcm47XG4gICAgY29uc3QgdmVyc2lvbiA9IGlzU3RyaW5nKG9wdGlvbnMudmVyc2lvbikgPyBvcHRpb25zLnZlcnNpb24gOiBWRVJTSU9OO1xuICAgIGNvbnN0IGxvY2FsZSA9IGlzU3RyaW5nKG9wdGlvbnMubG9jYWxlKSB8fCBpc0Z1bmN0aW9uKG9wdGlvbnMubG9jYWxlKVxuICAgICAgICA/IG9wdGlvbnMubG9jYWxlXG4gICAgICAgIDogREVGQVVMVF9MT0NBTEU7XG4gICAgY29uc3QgX2xvY2FsZSA9IGlzRnVuY3Rpb24obG9jYWxlKSA/IERFRkFVTFRfTE9DQUxFIDogbG9jYWxlO1xuICAgIGNvbnN0IGZhbGxiYWNrTG9jYWxlID0gaXNBcnJheShvcHRpb25zLmZhbGxiYWNrTG9jYWxlKSB8fFxuICAgICAgICBpc1BsYWluT2JqZWN0KG9wdGlvbnMuZmFsbGJhY2tMb2NhbGUpIHx8XG4gICAgICAgIGlzU3RyaW5nKG9wdGlvbnMuZmFsbGJhY2tMb2NhbGUpIHx8XG4gICAgICAgIG9wdGlvbnMuZmFsbGJhY2tMb2NhbGUgPT09IGZhbHNlXG4gICAgICAgID8gb3B0aW9ucy5mYWxsYmFja0xvY2FsZVxuICAgICAgICA6IF9sb2NhbGU7XG4gICAgY29uc3QgbWVzc2FnZXMgPSBpc1BsYWluT2JqZWN0KG9wdGlvbnMubWVzc2FnZXMpXG4gICAgICAgID8gb3B0aW9ucy5tZXNzYWdlc1xuICAgICAgICA6IHsgW19sb2NhbGVdOiB7fSB9O1xuICAgIGNvbnN0IGRhdGV0aW1lRm9ybWF0cyA9IGlzUGxhaW5PYmplY3Qob3B0aW9ucy5kYXRldGltZUZvcm1hdHMpXG4gICAgICAgICAgICA/IG9wdGlvbnMuZGF0ZXRpbWVGb3JtYXRzXG4gICAgICAgICAgICA6IHsgW19sb2NhbGVdOiB7fSB9XG4gICAgICAgIDtcbiAgICBjb25zdCBudW1iZXJGb3JtYXRzID0gaXNQbGFpbk9iamVjdChvcHRpb25zLm51bWJlckZvcm1hdHMpXG4gICAgICAgICAgICA/IG9wdGlvbnMubnVtYmVyRm9ybWF0c1xuICAgICAgICAgICAgOiB7IFtfbG9jYWxlXToge30gfVxuICAgICAgICA7XG4gICAgY29uc3QgbW9kaWZpZXJzID0gYXNzaWduKHt9LCBvcHRpb25zLm1vZGlmaWVycyB8fCB7fSwgZ2V0RGVmYXVsdExpbmtlZE1vZGlmaWVycygpKTtcbiAgICBjb25zdCBwbHVyYWxSdWxlcyA9IG9wdGlvbnMucGx1cmFsUnVsZXMgfHwge307XG4gICAgY29uc3QgbWlzc2luZyA9IGlzRnVuY3Rpb24ob3B0aW9ucy5taXNzaW5nKSA/IG9wdGlvbnMubWlzc2luZyA6IG51bGw7XG4gICAgY29uc3QgbWlzc2luZ1dhcm4gPSBpc0Jvb2xlYW4ob3B0aW9ucy5taXNzaW5nV2FybikgfHwgaXNSZWdFeHAob3B0aW9ucy5taXNzaW5nV2FybilcbiAgICAgICAgPyBvcHRpb25zLm1pc3NpbmdXYXJuXG4gICAgICAgIDogdHJ1ZTtcbiAgICBjb25zdCBmYWxsYmFja1dhcm4gPSBpc0Jvb2xlYW4ob3B0aW9ucy5mYWxsYmFja1dhcm4pIHx8IGlzUmVnRXhwKG9wdGlvbnMuZmFsbGJhY2tXYXJuKVxuICAgICAgICA/IG9wdGlvbnMuZmFsbGJhY2tXYXJuXG4gICAgICAgIDogdHJ1ZTtcbiAgICBjb25zdCBmYWxsYmFja0Zvcm1hdCA9ICEhb3B0aW9ucy5mYWxsYmFja0Zvcm1hdDtcbiAgICBjb25zdCB1bnJlc29sdmluZyA9ICEhb3B0aW9ucy51bnJlc29sdmluZztcbiAgICBjb25zdCBwb3N0VHJhbnNsYXRpb24gPSBpc0Z1bmN0aW9uKG9wdGlvbnMucG9zdFRyYW5zbGF0aW9uKVxuICAgICAgICA/IG9wdGlvbnMucG9zdFRyYW5zbGF0aW9uXG4gICAgICAgIDogbnVsbDtcbiAgICBjb25zdCBwcm9jZXNzb3IgPSBpc1BsYWluT2JqZWN0KG9wdGlvbnMucHJvY2Vzc29yKSA/IG9wdGlvbnMucHJvY2Vzc29yIDogbnVsbDtcbiAgICBjb25zdCB3YXJuSHRtbE1lc3NhZ2UgPSBpc0Jvb2xlYW4ob3B0aW9ucy53YXJuSHRtbE1lc3NhZ2UpXG4gICAgICAgID8gb3B0aW9ucy53YXJuSHRtbE1lc3NhZ2VcbiAgICAgICAgOiB0cnVlO1xuICAgIGNvbnN0IGVzY2FwZVBhcmFtZXRlciA9ICEhb3B0aW9ucy5lc2NhcGVQYXJhbWV0ZXI7XG4gICAgY29uc3QgbWVzc2FnZUNvbXBpbGVyID0gaXNGdW5jdGlvbihvcHRpb25zLm1lc3NhZ2VDb21waWxlcilcbiAgICAgICAgPyBvcHRpb25zLm1lc3NhZ2VDb21waWxlclxuICAgICAgICA6IF9jb21waWxlcjtcbiAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zLm1lc3NhZ2VDb21waWxlcikpIHtcbiAgICAgICAgd2Fybk9uY2UoZ2V0V2Fybk1lc3NhZ2UoQ29yZVdhcm5Db2Rlcy5FWFBFUklNRU5UQUxfQ1VTVE9NX01FU1NBR0VfQ09NUElMRVIpKTtcbiAgICB9XG4gICAgY29uc3QgbWVzc2FnZVJlc29sdmVyID0gaXNGdW5jdGlvbihvcHRpb25zLm1lc3NhZ2VSZXNvbHZlcilcbiAgICAgICAgPyBvcHRpb25zLm1lc3NhZ2VSZXNvbHZlclxuICAgICAgICA6IF9yZXNvbHZlciB8fCByZXNvbHZlV2l0aEtleVZhbHVlO1xuICAgIGNvbnN0IGxvY2FsZUZhbGxiYWNrZXIgPSBpc0Z1bmN0aW9uKG9wdGlvbnMubG9jYWxlRmFsbGJhY2tlcilcbiAgICAgICAgPyBvcHRpb25zLmxvY2FsZUZhbGxiYWNrZXJcbiAgICAgICAgOiBfZmFsbGJhY2tlciB8fCBmYWxsYmFja1dpdGhTaW1wbGU7XG4gICAgY29uc3QgZmFsbGJhY2tDb250ZXh0ID0gaXNPYmplY3Qob3B0aW9ucy5mYWxsYmFja0NvbnRleHQpXG4gICAgICAgID8gb3B0aW9ucy5mYWxsYmFja0NvbnRleHRcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgLy8gc2V0dXAgaW50ZXJuYWwgb3B0aW9uc1xuICAgIGNvbnN0IGludGVybmFsT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgY29uc3QgX19kYXRldGltZUZvcm1hdHRlcnMgPSBpc09iamVjdChpbnRlcm5hbE9wdGlvbnMuX19kYXRldGltZUZvcm1hdHRlcnMpXG4gICAgICAgICAgICA/IGludGVybmFsT3B0aW9ucy5fX2RhdGV0aW1lRm9ybWF0dGVyc1xuICAgICAgICAgICAgOiBuZXcgTWFwKClcbiAgICAgICAgO1xuICAgIGNvbnN0IF9fbnVtYmVyRm9ybWF0dGVycyA9IGlzT2JqZWN0KGludGVybmFsT3B0aW9ucy5fX251bWJlckZvcm1hdHRlcnMpXG4gICAgICAgICAgICA/IGludGVybmFsT3B0aW9ucy5fX251bWJlckZvcm1hdHRlcnNcbiAgICAgICAgICAgIDogbmV3IE1hcCgpXG4gICAgICAgIDtcbiAgICBjb25zdCBfX21ldGEgPSBpc09iamVjdChpbnRlcm5hbE9wdGlvbnMuX19tZXRhKSA/IGludGVybmFsT3B0aW9ucy5fX21ldGEgOiB7fTtcbiAgICBfY2lkKys7XG4gICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgY2lkOiBfY2lkLFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICBtZXNzYWdlcyxcbiAgICAgICAgbW9kaWZpZXJzLFxuICAgICAgICBwbHVyYWxSdWxlcyxcbiAgICAgICAgbWlzc2luZyxcbiAgICAgICAgbWlzc2luZ1dhcm4sXG4gICAgICAgIGZhbGxiYWNrV2FybixcbiAgICAgICAgZmFsbGJhY2tGb3JtYXQsXG4gICAgICAgIHVucmVzb2x2aW5nLFxuICAgICAgICBwb3N0VHJhbnNsYXRpb24sXG4gICAgICAgIHByb2Nlc3NvcixcbiAgICAgICAgd2Fybkh0bWxNZXNzYWdlLFxuICAgICAgICBlc2NhcGVQYXJhbWV0ZXIsXG4gICAgICAgIG1lc3NhZ2VDb21waWxlcixcbiAgICAgICAgbWVzc2FnZVJlc29sdmVyLFxuICAgICAgICBsb2NhbGVGYWxsYmFja2VyLFxuICAgICAgICBmYWxsYmFja0NvbnRleHQsXG4gICAgICAgIG9uV2FybixcbiAgICAgICAgX19tZXRhXG4gICAgfTtcbiAgICB7XG4gICAgICAgIGNvbnRleHQuZGF0ZXRpbWVGb3JtYXRzID0gZGF0ZXRpbWVGb3JtYXRzO1xuICAgICAgICBjb250ZXh0Lm51bWJlckZvcm1hdHMgPSBudW1iZXJGb3JtYXRzO1xuICAgICAgICBjb250ZXh0Ll9fZGF0ZXRpbWVGb3JtYXR0ZXJzID0gX19kYXRldGltZUZvcm1hdHRlcnM7XG4gICAgICAgIGNvbnRleHQuX19udW1iZXJGb3JtYXR0ZXJzID0gX19udW1iZXJGb3JtYXR0ZXJzO1xuICAgIH1cbiAgICAvLyBmb3IgdnVlLWRldnRvb2xzIHRpbWVsaW5lIGV2ZW50XG4gICAge1xuICAgICAgICBjb250ZXh0Ll9fdl9lbWl0dGVyID1cbiAgICAgICAgICAgIGludGVybmFsT3B0aW9ucy5fX3ZfZW1pdHRlciAhPSBudWxsXG4gICAgICAgICAgICAgICAgPyBpbnRlcm5hbE9wdGlvbnMuX192X2VtaXR0ZXJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gTk9URTogZXhwZXJpbWVudGFsICEhXG4gICAge1xuICAgICAgICBpbml0STE4bkRldlRvb2xzKGNvbnRleHQsIHZlcnNpb24sIF9fbWV0YSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0O1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gaXNUcmFuc2xhdGVGYWxsYmFja1dhcm4oZmFsbGJhY2ssIGtleSkge1xuICAgIHJldHVybiBmYWxsYmFjayBpbnN0YW5jZW9mIFJlZ0V4cCA/IGZhbGxiYWNrLnRlc3Qoa2V5KSA6IGZhbGxiYWNrO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gaXNUcmFuc2xhdGVNaXNzaW5nV2FybihtaXNzaW5nLCBrZXkpIHtcbiAgICByZXR1cm4gbWlzc2luZyBpbnN0YW5jZW9mIFJlZ0V4cCA/IG1pc3NpbmcudGVzdChrZXkpIDogbWlzc2luZztcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGhhbmRsZU1pc3NpbmcoY29udGV4dCwga2V5LCBsb2NhbGUsIG1pc3NpbmdXYXJuLCB0eXBlKSB7XG4gICAgY29uc3QgeyBtaXNzaW5nLCBvbldhcm4gfSA9IGNvbnRleHQ7XG4gICAgLy8gZm9yIHZ1ZS1kZXZ0b29scyB0aW1lbGluZSBldmVudFxuICAgIHtcbiAgICAgICAgY29uc3QgZW1pdHRlciA9IGNvbnRleHQuX192X2VtaXR0ZXI7XG4gICAgICAgIGlmIChlbWl0dGVyKSB7XG4gICAgICAgICAgICBlbWl0dGVyLmVtaXQoXCJtaXNzaW5nXCIgLyogVnVlRGV2VG9vbHNUaW1lbGluZUV2ZW50cy5NSVNTSU5HICovLCB7XG4gICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGAke3R5cGV9OiR7a2V5fWBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChtaXNzaW5nICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IG1pc3NpbmcoY29udGV4dCwgbG9jYWxlLCBrZXksIHR5cGUpO1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcocmV0KSA/IHJldCA6IGtleTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChpc1RyYW5zbGF0ZU1pc3NpbmdXYXJuKG1pc3NpbmdXYXJuLCBrZXkpKSB7XG4gICAgICAgICAgICBvbldhcm4oZ2V0V2Fybk1lc3NhZ2UoQ29yZVdhcm5Db2Rlcy5OT1RfRk9VTkRfS0VZLCB7IGtleSwgbG9jYWxlIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIHVwZGF0ZUZhbGxiYWNrTG9jYWxlKGN0eCwgbG9jYWxlLCBmYWxsYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBjdHg7XG4gICAgY29udGV4dC5fX2xvY2FsZUNoYWluQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgY3R4LmxvY2FsZUZhbGxiYWNrZXIoY3R4LCBmYWxsYmFjaywgbG9jYWxlKTtcbn1cbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5mdW5jdGlvbiBmb3JtYXQoYXN0KSB7XG4gICAgY29uc3QgbXNnID0gKGN0eCkgPT4gZm9ybWF0UGFydHMoY3R4LCBhc3QpO1xuICAgIHJldHVybiBtc2c7XG59XG5mdW5jdGlvbiBmb3JtYXRQYXJ0cyhjdHgsIGFzdCkge1xuICAgIGNvbnN0IGJvZHkgPSBhc3QuYiB8fCBhc3QuYm9keTtcbiAgICBpZiAoKGJvZHkudCB8fCBib2R5LnR5cGUpID09PSAxIC8qIE5vZGVUeXBlcy5QbHVyYWwgKi8pIHtcbiAgICAgICAgY29uc3QgcGx1cmFsID0gYm9keTtcbiAgICAgICAgY29uc3QgY2FzZXMgPSBwbHVyYWwuYyB8fCBwbHVyYWwuY2FzZXM7XG4gICAgICAgIHJldHVybiBjdHgucGx1cmFsKGNhc2VzLnJlZHVjZSgobWVzc2FnZXMsIGMpID0+IFtcbiAgICAgICAgICAgIC4uLm1lc3NhZ2VzLFxuICAgICAgICAgICAgZm9ybWF0TWVzc2FnZVBhcnRzKGN0eCwgYylcbiAgICAgICAgXSwgW10pKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRNZXNzYWdlUGFydHMoY3R4LCBib2R5KTtcbiAgICB9XG59XG5mdW5jdGlvbiBmb3JtYXRNZXNzYWdlUGFydHMoY3R4LCBub2RlKSB7XG4gICAgY29uc3QgX3N0YXRpYyA9IG5vZGUucyB8fCBub2RlLnN0YXRpYztcbiAgICBpZiAoX3N0YXRpYykge1xuICAgICAgICByZXR1cm4gY3R4LnR5cGUgPT09ICd0ZXh0J1xuICAgICAgICAgICAgPyBfc3RhdGljXG4gICAgICAgICAgICA6IGN0eC5ub3JtYWxpemUoW19zdGF0aWNdKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gKG5vZGUuaSB8fCBub2RlLml0ZW1zKS5yZWR1Y2UoKGFjbSwgYykgPT4gWy4uLmFjbSwgZm9ybWF0TWVzc2FnZVBhcnQoY3R4LCBjKV0sIFtdKTtcbiAgICAgICAgcmV0dXJuIGN0eC5ub3JtYWxpemUobWVzc2FnZXMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2VQYXJ0KGN0eCwgbm9kZSkge1xuICAgIGNvbnN0IHR5cGUgPSBub2RlLnQgfHwgbm9kZS50eXBlO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIDMgLyogTm9kZVR5cGVzLlRleHQgKi86IHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBub2RlO1xuICAgICAgICAgICAgcmV0dXJuICh0ZXh0LnYgfHwgdGV4dC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSA5IC8qIE5vZGVUeXBlcy5MaXRlcmFsICovOiB7XG4gICAgICAgICAgICBjb25zdCBsaXRlcmFsID0gbm9kZTtcbiAgICAgICAgICAgIHJldHVybiAobGl0ZXJhbC52IHx8IGxpdGVyYWwudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgNCAvKiBOb2RlVHlwZXMuTmFtZWQgKi86IHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVkID0gbm9kZTtcbiAgICAgICAgICAgIHJldHVybiBjdHguaW50ZXJwb2xhdGUoY3R4Lm5hbWVkKG5hbWVkLmsgfHwgbmFtZWQua2V5KSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSA1IC8qIE5vZGVUeXBlcy5MaXN0ICovOiB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gbm9kZTtcbiAgICAgICAgICAgIHJldHVybiBjdHguaW50ZXJwb2xhdGUoY3R4Lmxpc3QobGlzdC5pICE9IG51bGwgPyBsaXN0LmkgOiBsaXN0LmluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSA2IC8qIE5vZGVUeXBlcy5MaW5rZWQgKi86IHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtlZCA9IG5vZGU7XG4gICAgICAgICAgICBjb25zdCBtb2RpZmllciA9IGxpbmtlZC5tIHx8IGxpbmtlZC5tb2RpZmllcjtcbiAgICAgICAgICAgIHJldHVybiBjdHgubGlua2VkKGZvcm1hdE1lc3NhZ2VQYXJ0KGN0eCwgbGlua2VkLmsgfHwgbGlua2VkLmtleSksIG1vZGlmaWVyID8gZm9ybWF0TWVzc2FnZVBhcnQoY3R4LCBtb2RpZmllcikgOiB1bmRlZmluZWQsIGN0eC50eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDcgLyogTm9kZVR5cGVzLkxpbmtlZEtleSAqLzoge1xuICAgICAgICAgICAgY29uc3QgbGlua2VkS2V5ID0gbm9kZTtcbiAgICAgICAgICAgIHJldHVybiAobGlua2VkS2V5LnYgfHwgbGlua2VkS2V5LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDggLyogTm9kZVR5cGVzLkxpbmtlZE1vZGlmaWVyICovOiB7XG4gICAgICAgICAgICBjb25zdCBsaW5rZWRNb2RpZmllciA9IG5vZGU7XG4gICAgICAgICAgICByZXR1cm4gKGxpbmtlZE1vZGlmaWVyLnYgfHwgbGlua2VkTW9kaWZpZXIudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCBub2RlIHR5cGUgb24gZm9ybWF0IG1lc3NhZ2UgcGFydDogJHt0eXBlfWApO1xuICAgIH1cbn1cblxuY29uc3QgV0FSTl9NRVNTQUdFID0gYERldGVjdGVkIEhUTUwgaW4gJ3tzb3VyY2V9JyBtZXNzYWdlLiBSZWNvbW1lbmQgbm90IHVzaW5nIEhUTUwgbWVzc2FnZXMgdG8gYXZvaWQgWFNTLmA7XG5mdW5jdGlvbiBjaGVja0h0bWxNZXNzYWdlKHNvdXJjZSwgd2Fybkh0bWxNZXNzYWdlKSB7XG4gICAgaWYgKHdhcm5IdG1sTWVzc2FnZSAmJiBkZXRlY3RIdG1sVGFnKHNvdXJjZSkpIHtcbiAgICAgICAgd2Fybihmb3JtYXQkMShXQVJOX01FU1NBR0UsIHsgc291cmNlIH0pKTtcbiAgICB9XG59XG5jb25zdCBkZWZhdWx0T25DYWNoZUtleSA9IChtZXNzYWdlKSA9PiBtZXNzYWdlO1xubGV0IGNvbXBpbGVDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5mdW5jdGlvbiBjbGVhckNvbXBpbGVDYWNoZSgpIHtcbiAgICBjb21waWxlQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xufVxuY29uc3QgaXNNZXNzYWdlQVNUID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJlxuICAgICh2YWwudCA9PT0gMCB8fCB2YWwudHlwZSA9PT0gMCkgJiZcbiAgICAoJ2InIGluIHZhbCB8fCAnYm9keScgaW4gdmFsKTtcbmZ1bmN0aW9uIGJhc2VDb21waWxlKG1lc3NhZ2UsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIGVycm9yIGRldGVjdGluZyBvbiBjb21waWxlXG4gICAgbGV0IGRldGVjdEVycm9yID0gZmFsc2U7XG4gICAgY29uc3Qgb25FcnJvciA9IG9wdGlvbnMub25FcnJvciB8fCBkZWZhdWx0T25FcnJvcjtcbiAgICBvcHRpb25zLm9uRXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICAgIGRldGVjdEVycm9yID0gdHJ1ZTtcbiAgICAgICAgb25FcnJvcihlcnIpO1xuICAgIH07XG4gICAgLy8gY29tcGlsZSB3aXRoIG1lc2FzZ2UtY29tcGlsZXJcbiAgICByZXR1cm4geyAuLi5iYXNlQ29tcGlsZSQxKG1lc3NhZ2UsIG9wdGlvbnMpLCBkZXRlY3RFcnJvciB9O1xufVxuLyogI19fTk9fU0lERV9FRkZFQ1RTX18gKi9cbmNvbnN0IGNvbXBpbGVUb0Z1bmN0aW9uID0gKG1lc3NhZ2UsIGNvbnRleHQpID0+IHtcbiAgICBpZiAoIWlzU3RyaW5nKG1lc3NhZ2UpKSB7XG4gICAgICAgIHRocm93IGNyZWF0ZUNvcmVFcnJvcihDb3JlRXJyb3JDb2Rlcy5OT1RfU1VQUE9SVF9OT05fU1RSSU5HX01FU1NBR0UpO1xuICAgIH1cbiAgICB7XG4gICAgICAgIC8vIGNoZWNrIEhUTUwgbWVzc2FnZVxuICAgICAgICBjb25zdCB3YXJuSHRtbE1lc3NhZ2UgPSBpc0Jvb2xlYW4oY29udGV4dC53YXJuSHRtbE1lc3NhZ2UpXG4gICAgICAgICAgICA/IGNvbnRleHQud2Fybkh0bWxNZXNzYWdlXG4gICAgICAgICAgICA6IHRydWU7XG4gICAgICAgIGNoZWNrSHRtbE1lc3NhZ2UobWVzc2FnZSwgd2Fybkh0bWxNZXNzYWdlKTtcbiAgICAgICAgLy8gY2hlY2sgY2FjaGVzXG4gICAgICAgIGNvbnN0IG9uQ2FjaGVLZXkgPSBjb250ZXh0Lm9uQ2FjaGVLZXkgfHwgZGVmYXVsdE9uQ2FjaGVLZXk7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gb25DYWNoZUtleShtZXNzYWdlKTtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gY29tcGlsZUNhY2hlW2NhY2hlS2V5XTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb21waWxlXG4gICAgICAgIGNvbnN0IHsgY29kZSwgZGV0ZWN0RXJyb3IgfSA9IGJhc2VDb21waWxlKG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgICAgICAvLyBldmFsdWF0ZSBmdW5jdGlvblxuICAgICAgICBjb25zdCBtc2cgPSBuZXcgRnVuY3Rpb24oYHJldHVybiAke2NvZGV9YCkoKTtcbiAgICAgICAgLy8gaWYgb2NjdXJyZWQgY29tcGlsZSBlcnJvciwgZG9uJ3QgY2FjaGVcbiAgICAgICAgcmV0dXJuICFkZXRlY3RFcnJvclxuICAgICAgICAgICAgPyAoY29tcGlsZUNhY2hlW2NhY2hlS2V5XSA9IG1zZylcbiAgICAgICAgICAgIDogbXNnO1xuICAgIH1cbn07XG5mdW5jdGlvbiBjb21waWxlKG1lc3NhZ2UsIGNvbnRleHQpIHtcbiAgICBpZiAoaXNTdHJpbmcobWVzc2FnZSkpIHtcbiAgICAgICAgLy8gY2hlY2sgSFRNTCBtZXNzYWdlXG4gICAgICAgIGNvbnN0IHdhcm5IdG1sTWVzc2FnZSA9IGlzQm9vbGVhbihjb250ZXh0Lndhcm5IdG1sTWVzc2FnZSlcbiAgICAgICAgICAgID8gY29udGV4dC53YXJuSHRtbE1lc3NhZ2VcbiAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAgICAgY2hlY2tIdG1sTWVzc2FnZShtZXNzYWdlLCB3YXJuSHRtbE1lc3NhZ2UpO1xuICAgICAgICAvLyBjaGVjayBjYWNoZXNcbiAgICAgICAgY29uc3Qgb25DYWNoZUtleSA9IGNvbnRleHQub25DYWNoZUtleSB8fCBkZWZhdWx0T25DYWNoZUtleTtcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBvbkNhY2hlS2V5KG1lc3NhZ2UpO1xuICAgICAgICBjb25zdCBjYWNoZWQgPSBjb21waWxlQ2FjaGVbY2FjaGVLZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbXBpbGUgd2l0aCBKSVQgbW9kZVxuICAgICAgICBjb25zdCB7IGFzdCwgZGV0ZWN0RXJyb3IgfSA9IGJhc2VDb21waWxlKG1lc3NhZ2UsIHtcbiAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICBsb2NhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGppdDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gY29tcG9zZSBtZXNzYWdlIGZ1bmN0aW9uIGZyb20gQVNUXG4gICAgICAgIGNvbnN0IG1zZyA9IGZvcm1hdChhc3QpO1xuICAgICAgICAvLyBpZiBvY2N1cnJlZCBjb21waWxlIGVycm9yLCBkb24ndCBjYWNoZVxuICAgICAgICByZXR1cm4gIWRldGVjdEVycm9yXG4gICAgICAgICAgICA/IChjb21waWxlQ2FjaGVbY2FjaGVLZXldID0gbXNnKVxuICAgICAgICAgICAgOiBtc2c7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoIWlzTWVzc2FnZUFTVChtZXNzYWdlKSkge1xuICAgICAgICAgICAgd2FybihgdGhlIG1lc3NhZ2UgdGhhdCBpcyByZXNvbHZlIHdpdGgga2V5ICcke2NvbnRleHQua2V5fScgaXMgbm90IHN1cHBvcnRlZCBmb3Igaml0IGNvbXBpbGF0aW9uYCk7XG4gICAgICAgICAgICByZXR1cm4gKCgpID0+IG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFTVCBjYXNlIChwYXNzZWQgZnJvbSBidW5kbGVyKVxuICAgICAgICBjb25zdCBjYWNoZUtleSA9IG1lc3NhZ2UuY2FjaGVLZXk7XG4gICAgICAgIGlmIChjYWNoZUtleSkge1xuICAgICAgICAgICAgY29uc3QgY2FjaGVkID0gY29tcGlsZUNhY2hlW2NhY2hlS2V5XTtcbiAgICAgICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29tcG9zZSBtZXNzYWdlIGZ1bmN0aW9uIGZyb20gbWVzc2FnZSAoQVNUKVxuICAgICAgICAgICAgcmV0dXJuIChjb21waWxlQ2FjaGVbY2FjaGVLZXldID1cbiAgICAgICAgICAgICAgICBmb3JtYXQobWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgTk9PUF9NRVNTQUdFX0ZVTkNUSU9OID0gKCkgPT4gJyc7XG5jb25zdCBpc01lc3NhZ2VGdW5jdGlvbiA9ICh2YWwpID0+IGlzRnVuY3Rpb24odmFsKTtcbi8vIGltcGxlbWVudGF0aW9uIG9mIGB0cmFuc2xhdGVgIGZ1bmN0aW9uXG5mdW5jdGlvbiB0cmFuc2xhdGUoY29udGV4dCwgLi4uYXJncykge1xuICAgIGNvbnN0IHsgZmFsbGJhY2tGb3JtYXQsIHBvc3RUcmFuc2xhdGlvbiwgdW5yZXNvbHZpbmcsIG1lc3NhZ2VDb21waWxlciwgZmFsbGJhY2tMb2NhbGUsIG1lc3NhZ2VzIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IFtrZXksIG9wdGlvbnNdID0gcGFyc2VUcmFuc2xhdGVBcmdzKC4uLmFyZ3MpO1xuICAgIGNvbnN0IG1pc3NpbmdXYXJuID0gaXNCb29sZWFuKG9wdGlvbnMubWlzc2luZ1dhcm4pXG4gICAgICAgID8gb3B0aW9ucy5taXNzaW5nV2FyblxuICAgICAgICA6IGNvbnRleHQubWlzc2luZ1dhcm47XG4gICAgY29uc3QgZmFsbGJhY2tXYXJuID0gaXNCb29sZWFuKG9wdGlvbnMuZmFsbGJhY2tXYXJuKVxuICAgICAgICA/IG9wdGlvbnMuZmFsbGJhY2tXYXJuXG4gICAgICAgIDogY29udGV4dC5mYWxsYmFja1dhcm47XG4gICAgY29uc3QgZXNjYXBlUGFyYW1ldGVyID0gaXNCb29sZWFuKG9wdGlvbnMuZXNjYXBlUGFyYW1ldGVyKVxuICAgICAgICA/IG9wdGlvbnMuZXNjYXBlUGFyYW1ldGVyXG4gICAgICAgIDogY29udGV4dC5lc2NhcGVQYXJhbWV0ZXI7XG4gICAgY29uc3QgcmVzb2x2ZWRNZXNzYWdlID0gISFvcHRpb25zLnJlc29sdmVkTWVzc2FnZTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBjb25zdCBkZWZhdWx0TXNnT3JLZXkgPSBpc1N0cmluZyhvcHRpb25zLmRlZmF1bHQpIHx8IGlzQm9vbGVhbihvcHRpb25zLmRlZmF1bHQpIC8vIGRlZmF1bHQgYnkgZnVuY3Rpb24gb3B0aW9uXG4gICAgICAgID8gIWlzQm9vbGVhbihvcHRpb25zLmRlZmF1bHQpXG4gICAgICAgICAgICA/IG9wdGlvbnMuZGVmYXVsdFxuICAgICAgICAgICAgOiAoIW1lc3NhZ2VDb21waWxlciA/ICgpID0+IGtleSA6IGtleSlcbiAgICAgICAgOiBmYWxsYmFja0Zvcm1hdCAvLyBkZWZhdWx0IGJ5IGBmYWxsYmFja0Zvcm1hdGAgb3B0aW9uXG4gICAgICAgICAgICA/ICghbWVzc2FnZUNvbXBpbGVyID8gKCkgPT4ga2V5IDoga2V5KVxuICAgICAgICAgICAgOiAnJztcbiAgICBjb25zdCBlbmFibGVEZWZhdWx0TXNnID0gZmFsbGJhY2tGb3JtYXQgfHwgZGVmYXVsdE1zZ09yS2V5ICE9PSAnJztcbiAgICBjb25zdCBsb2NhbGUgPSBnZXRMb2NhbGUoY29udGV4dCwgb3B0aW9ucyk7XG4gICAgLy8gZXNjYXBlIHBhcmFtc1xuICAgIGVzY2FwZVBhcmFtZXRlciAmJiBlc2NhcGVQYXJhbXMob3B0aW9ucyk7XG4gICAgLy8gcmVzb2x2ZSBtZXNzYWdlIGZvcm1hdFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBsZXQgW2Zvcm1hdFNjb3BlLCB0YXJnZXRMb2NhbGUsIG1lc3NhZ2VdID0gIXJlc29sdmVkTWVzc2FnZVxuICAgICAgICA/IHJlc29sdmVNZXNzYWdlRm9ybWF0KGNvbnRleHQsIGtleSwgbG9jYWxlLCBmYWxsYmFja0xvY2FsZSwgZmFsbGJhY2tXYXJuLCBtaXNzaW5nV2FybilcbiAgICAgICAgOiBbXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICBtZXNzYWdlc1tsb2NhbGVdIHx8IHt9XG4gICAgICAgIF07XG4gICAgLy8gTk9URTpcbiAgICAvLyAgRml4IHRvIHdvcmsgYXJvdW5kIGBzc3JUcmFuc2Zyb21gIGJ1ZyBpbiBWaXRlLlxuICAgIC8vICBodHRwczovL2dpdGh1Yi5jb20vdml0ZWpzL3ZpdGUvaXNzdWVzLzQzMDZcbiAgICAvLyAgVG8gZ2V0IGFyb3VuZCB0aGlzLCB1c2UgdGVtcG9yYXJ5IHZhcmlhYmxlcy5cbiAgICAvLyAgaHR0cHM6Ly9naXRodWIuY29tL251eHQvZnJhbWV3b3JrL2lzc3Vlcy8xNDYxI2lzc3VlY29tbWVudC05NTQ2MDYyNDNcbiAgICBsZXQgZm9ybWF0ID0gZm9ybWF0U2NvcGU7XG4gICAgLy8gaWYgeW91IHVzZSBkZWZhdWx0IG1lc3NhZ2UsIHNldCBpdCBhcyBtZXNzYWdlIGZvcm1hdCFcbiAgICBsZXQgY2FjaGVCYXNlS2V5ID0ga2V5O1xuICAgIGlmICghcmVzb2x2ZWRNZXNzYWdlICYmXG4gICAgICAgICEoaXNTdHJpbmcoZm9ybWF0KSB8fFxuICAgICAgICAgICAgaXNNZXNzYWdlQVNUKGZvcm1hdCkgfHxcbiAgICAgICAgICAgIGlzTWVzc2FnZUZ1bmN0aW9uKGZvcm1hdCkpKSB7XG4gICAgICAgIGlmIChlbmFibGVEZWZhdWx0TXNnKSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBkZWZhdWx0TXNnT3JLZXk7XG4gICAgICAgICAgICBjYWNoZUJhc2VLZXkgPSBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gY2hlY2tpbmcgbWVzc2FnZSBmb3JtYXQgYW5kIHRhcmdldCBsb2NhbGVcbiAgICBpZiAoIXJlc29sdmVkTWVzc2FnZSAmJlxuICAgICAgICAoIShpc1N0cmluZyhmb3JtYXQpIHx8XG4gICAgICAgICAgICBpc01lc3NhZ2VBU1QoZm9ybWF0KSB8fFxuICAgICAgICAgICAgaXNNZXNzYWdlRnVuY3Rpb24oZm9ybWF0KSkgfHxcbiAgICAgICAgICAgICFpc1N0cmluZyh0YXJnZXRMb2NhbGUpKSkge1xuICAgICAgICByZXR1cm4gdW5yZXNvbHZpbmcgPyBOT1RfUkVPU0xWRUQgOiBrZXk7XG4gICAgfVxuICAgIC8vIFRPRE86IHJlZmFjdG9yXG4gICAgaWYgKGlzU3RyaW5nKGZvcm1hdCkgJiYgY29udGV4dC5tZXNzYWdlQ29tcGlsZXIgPT0gbnVsbCkge1xuICAgICAgICB3YXJuKGBUaGUgbWVzc2FnZSBmb3JtYXQgY29tcGlsYXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkLiBgICtcbiAgICAgICAgICAgIGBCZWNhdXNlIG1lc3NhZ2UgY29tcGlsZXIgaXNuJ3QgaW5jbHVkZWQuIGAgK1xuICAgICAgICAgICAgYFlvdSBuZWVkIHRvIHByZS1jb21waWxhdGlvbiBhbGwgbWVzc2FnZSBmb3JtYXQuIGAgK1xuICAgICAgICAgICAgYFNvIHRyYW5zbGF0ZSBmdW5jdGlvbiByZXR1cm4gJyR7a2V5fScuYCk7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIC8vIHNldHVwIGNvbXBpbGUgZXJyb3IgZGV0ZWN0aW5nXG4gICAgbGV0IG9jY3VycmVkID0gZmFsc2U7XG4gICAgY29uc3Qgb25FcnJvciA9ICgpID0+IHtcbiAgICAgICAgb2NjdXJyZWQgPSB0cnVlO1xuICAgIH07XG4gICAgLy8gY29tcGlsZSBtZXNzYWdlIGZvcm1hdFxuICAgIGNvbnN0IG1zZyA9ICFpc01lc3NhZ2VGdW5jdGlvbihmb3JtYXQpXG4gICAgICAgID8gY29tcGlsZU1lc3NhZ2VGb3JtYXQoY29udGV4dCwga2V5LCB0YXJnZXRMb2NhbGUsIGZvcm1hdCwgY2FjaGVCYXNlS2V5LCBvbkVycm9yKVxuICAgICAgICA6IGZvcm1hdDtcbiAgICAvLyBpZiBvY2N1cnJlZCBjb21waWxlIGVycm9yLCByZXR1cm4gdGhlIG1lc3NhZ2UgZm9ybWF0XG4gICAgaWYgKG9jY3VycmVkKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuICAgIC8vIGV2YWx1YXRlIG1lc3NhZ2Ugd2l0aCBjb250ZXh0XG4gICAgY29uc3QgY3R4T3B0aW9ucyA9IGdldE1lc3NhZ2VDb250ZXh0T3B0aW9ucyhjb250ZXh0LCB0YXJnZXRMb2NhbGUsIG1lc3NhZ2UsIG9wdGlvbnMpO1xuICAgIGNvbnN0IG1zZ0NvbnRleHQgPSBjcmVhdGVNZXNzYWdlQ29udGV4dChjdHhPcHRpb25zKTtcbiAgICBjb25zdCBtZXNzYWdlZCA9IGV2YWx1YXRlTWVzc2FnZShjb250ZXh0LCBtc2csIG1zZ0NvbnRleHQpO1xuICAgIC8vIGlmIHVzZSBwb3N0IHRyYW5zbGF0aW9uIG9wdGlvbiwgcHJvY2VlZCBpdCB3aXRoIGhhbmRsZXJcbiAgICBjb25zdCByZXQgPSBwb3N0VHJhbnNsYXRpb25cbiAgICAgICAgPyBwb3N0VHJhbnNsYXRpb24obWVzc2FnZWQsIGtleSlcbiAgICAgICAgOiBtZXNzYWdlZDtcbiAgICAvLyBOT1RFOiBleHBlcmltZW50YWwgISFcbiAgICB7XG4gICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICBjb25zdCBwYXlsb2FkcyA9IHtcbiAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGtleTogaXNTdHJpbmcoa2V5KVxuICAgICAgICAgICAgICAgID8ga2V5XG4gICAgICAgICAgICAgICAgOiBpc01lc3NhZ2VGdW5jdGlvbihmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0LmtleVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgbG9jYWxlOiB0YXJnZXRMb2NhbGUgfHwgKGlzTWVzc2FnZUZ1bmN0aW9uKGZvcm1hdClcbiAgICAgICAgICAgICAgICA/IGZvcm1hdC5sb2NhbGVcbiAgICAgICAgICAgICAgICA6ICcnKSxcbiAgICAgICAgICAgIGZvcm1hdDogaXNTdHJpbmcoZm9ybWF0KVxuICAgICAgICAgICAgICAgID8gZm9ybWF0XG4gICAgICAgICAgICAgICAgOiBpc01lc3NhZ2VGdW5jdGlvbihmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0LnNvdXJjZVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgbWVzc2FnZTogcmV0XG4gICAgICAgIH07XG4gICAgICAgIHBheWxvYWRzLm1ldGEgPSBhc3NpZ24oe30sIGNvbnRleHQuX19tZXRhLCBnZXRBZGRpdGlvbmFsTWV0YSgpIHx8IHt9KTtcbiAgICAgICAgdHJhbnNsYXRlRGV2VG9vbHMocGF5bG9hZHMpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuZnVuY3Rpb24gZXNjYXBlUGFyYW1zKG9wdGlvbnMpIHtcbiAgICBpZiAoaXNBcnJheShvcHRpb25zLmxpc3QpKSB7XG4gICAgICAgIG9wdGlvbnMubGlzdCA9IG9wdGlvbnMubGlzdC5tYXAoaXRlbSA9PiBpc1N0cmluZyhpdGVtKSA/IGVzY2FwZUh0bWwoaXRlbSkgOiBpdGVtKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3Qob3B0aW9ucy5uYW1lZCkpIHtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5uYW1lZCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzU3RyaW5nKG9wdGlvbnMubmFtZWRba2V5XSkpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm5hbWVkW2tleV0gPSBlc2NhcGVIdG1sKG9wdGlvbnMubmFtZWRba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVNZXNzYWdlRm9ybWF0KGNvbnRleHQsIGtleSwgbG9jYWxlLCBmYWxsYmFja0xvY2FsZSwgZmFsbGJhY2tXYXJuLCBtaXNzaW5nV2Fybikge1xuICAgIGNvbnN0IHsgbWVzc2FnZXMsIG9uV2FybiwgbWVzc2FnZVJlc29sdmVyOiByZXNvbHZlVmFsdWUsIGxvY2FsZUZhbGxiYWNrZXIgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgbG9jYWxlcyA9IGxvY2FsZUZhbGxiYWNrZXIoY29udGV4dCwgZmFsbGJhY2tMb2NhbGUsIGxvY2FsZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGxldCBtZXNzYWdlID0ge307XG4gICAgbGV0IHRhcmdldExvY2FsZTtcbiAgICBsZXQgZm9ybWF0ID0gbnVsbDtcbiAgICBsZXQgZnJvbSA9IGxvY2FsZTtcbiAgICBsZXQgdG8gPSBudWxsO1xuICAgIGNvbnN0IHR5cGUgPSAndHJhbnNsYXRlJztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxvY2FsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGFyZ2V0TG9jYWxlID0gdG8gPSBsb2NhbGVzW2ldO1xuICAgICAgICBpZiAobG9jYWxlICE9PSB0YXJnZXRMb2NhbGUgJiZcbiAgICAgICAgICAgIGlzVHJhbnNsYXRlRmFsbGJhY2tXYXJuKGZhbGxiYWNrV2Fybiwga2V5KSkge1xuICAgICAgICAgICAgb25XYXJuKGdldFdhcm5NZXNzYWdlKENvcmVXYXJuQ29kZXMuRkFMTEJBQ0tfVE9fVFJBTlNMQVRFLCB7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0TG9jYWxlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9yIHZ1ZS1kZXZ0b29scyB0aW1lbGluZSBldmVudFxuICAgICAgICBpZiAobG9jYWxlICE9PSB0YXJnZXRMb2NhbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVtaXR0ZXIgPSBjb250ZXh0Ll9fdl9lbWl0dGVyO1xuICAgICAgICAgICAgaWYgKGVtaXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBlbWl0dGVyLmVtaXQoXCJmYWxsYmFja1wiIC8qIFZ1ZURldlRvb2xzVGltZWxpbmVFdmVudHMuRkFMQkFDSyAqLywge1xuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGZyb20sXG4gICAgICAgICAgICAgICAgICAgIHRvLFxuICAgICAgICAgICAgICAgICAgICBncm91cElkOiBgJHt0eXBlfToke2tleX1gXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgICBtZXNzYWdlc1t0YXJnZXRMb2NhbGVdIHx8IHt9O1xuICAgICAgICAvLyBmb3IgdnVlLWRldnRvb2xzIHRpbWVsaW5lIGV2ZW50XG4gICAgICAgIGxldCBzdGFydCA9IG51bGw7XG4gICAgICAgIGxldCBzdGFydFRhZztcbiAgICAgICAgbGV0IGVuZFRhZztcbiAgICAgICAgaWYgKGluQnJvd3Nlcikge1xuICAgICAgICAgICAgc3RhcnQgPSB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgICAgICBzdGFydFRhZyA9ICdpbnRsaWZ5LW1lc3NhZ2UtcmVzb2x2ZS1zdGFydCc7XG4gICAgICAgICAgICBlbmRUYWcgPSAnaW50bGlmeS1tZXNzYWdlLXJlc29sdmUtZW5kJztcbiAgICAgICAgICAgIG1hcmsgJiYgbWFyayhzdGFydFRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChmb3JtYXQgPSByZXNvbHZlVmFsdWUobWVzc2FnZSwga2V5KSkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGlmIG51bGwsIHJlc29sdmUgd2l0aCBvYmplY3Qga2V5IHBhdGhcbiAgICAgICAgICAgIGZvcm1hdCA9IG1lc3NhZ2Vba2V5XTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9yIHZ1ZS1kZXZ0b29scyB0aW1lbGluZSBldmVudFxuICAgICAgICBpZiAoaW5Ccm93c2VyKSB7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgICAgICBjb25zdCBlbWl0dGVyID0gY29udGV4dC5fX3ZfZW1pdHRlcjtcbiAgICAgICAgICAgIGlmIChlbWl0dGVyICYmIHN0YXJ0ICYmIGZvcm1hdCkge1xuICAgICAgICAgICAgICAgIGVtaXR0ZXIuZW1pdChcIm1lc3NhZ2UtcmVzb2x2ZVwiIC8qIFZ1ZURldlRvb2xzVGltZWxpbmVFdmVudHMuTUVTU0FHRV9SRVNPTFZFICovLCB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibWVzc2FnZS1yZXNvbHZlXCIgLyogVnVlRGV2VG9vbHNUaW1lbGluZUV2ZW50cy5NRVNTQUdFX1JFU09MVkUgKi8sXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZm9ybWF0LFxuICAgICAgICAgICAgICAgICAgICB0aW1lOiBlbmQgLSBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZDogYCR7dHlwZX06JHtrZXl9YFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXJ0VGFnICYmIGVuZFRhZyAmJiBtYXJrICYmIG1lYXN1cmUpIHtcbiAgICAgICAgICAgICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICAgICAgICAgICAgbWVhc3VyZSgnaW50bGlmeSBtZXNzYWdlIHJlc29sdmUnLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdHJpbmcoZm9ybWF0KSB8fCBpc01lc3NhZ2VBU1QoZm9ybWF0KSB8fCBpc01lc3NhZ2VGdW5jdGlvbihmb3JtYXQpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaXNzaW5nUmV0ID0gaGFuZGxlTWlzc2luZyhjb250ZXh0LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAga2V5LCB0YXJnZXRMb2NhbGUsIG1pc3NpbmdXYXJuLCB0eXBlKTtcbiAgICAgICAgaWYgKG1pc3NpbmdSZXQgIT09IGtleSkge1xuICAgICAgICAgICAgZm9ybWF0ID0gbWlzc2luZ1JldDtcbiAgICAgICAgfVxuICAgICAgICBmcm9tID0gdG87XG4gICAgfVxuICAgIHJldHVybiBbZm9ybWF0LCB0YXJnZXRMb2NhbGUsIG1lc3NhZ2VdO1xufVxuZnVuY3Rpb24gY29tcGlsZU1lc3NhZ2VGb3JtYXQoY29udGV4dCwga2V5LCB0YXJnZXRMb2NhbGUsIGZvcm1hdCwgY2FjaGVCYXNlS2V5LCBvbkVycm9yKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlQ29tcGlsZXIsIHdhcm5IdG1sTWVzc2FnZSB9ID0gY29udGV4dDtcbiAgICBpZiAoaXNNZXNzYWdlRnVuY3Rpb24oZm9ybWF0KSkge1xuICAgICAgICBjb25zdCBtc2cgPSBmb3JtYXQ7XG4gICAgICAgIG1zZy5sb2NhbGUgPSBtc2cubG9jYWxlIHx8IHRhcmdldExvY2FsZTtcbiAgICAgICAgbXNnLmtleSA9IG1zZy5rZXkgfHwga2V5O1xuICAgICAgICByZXR1cm4gbXNnO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZUNvbXBpbGVyID09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbXNnID0gKCgpID0+IGZvcm1hdCk7XG4gICAgICAgIG1zZy5sb2NhbGUgPSB0YXJnZXRMb2NhbGU7XG4gICAgICAgIG1zZy5rZXkgPSBrZXk7XG4gICAgICAgIHJldHVybiBtc2c7XG4gICAgfVxuICAgIC8vIGZvciB2dWUtZGV2dG9vbHMgdGltZWxpbmUgZXZlbnRcbiAgICBsZXQgc3RhcnQgPSBudWxsO1xuICAgIGxldCBzdGFydFRhZztcbiAgICBsZXQgZW5kVGFnO1xuICAgIGlmIChpbkJyb3dzZXIpIHtcbiAgICAgICAgc3RhcnQgPSB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIHN0YXJ0VGFnID0gJ2ludGxpZnktbWVzc2FnZS1jb21waWxhdGlvbi1zdGFydCc7XG4gICAgICAgIGVuZFRhZyA9ICdpbnRsaWZ5LW1lc3NhZ2UtY29tcGlsYXRpb24tZW5kJztcbiAgICAgICAgbWFyayAmJiBtYXJrKHN0YXJ0VGFnKTtcbiAgICB9XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZUNvbXBpbGVyKGZvcm1hdCwgZ2V0Q29tcGlsZUNvbnRleHQoY29udGV4dCwgdGFyZ2V0TG9jYWxlLCBjYWNoZUJhc2VLZXksIGZvcm1hdCwgd2Fybkh0bWxNZXNzYWdlLCBvbkVycm9yKSk7XG4gICAgLy8gZm9yIHZ1ZS1kZXZ0b29scyB0aW1lbGluZSBldmVudFxuICAgIGlmIChpbkJyb3dzZXIpIHtcbiAgICAgICAgY29uc3QgZW5kID0gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBjb25zdCBlbWl0dGVyID0gY29udGV4dC5fX3ZfZW1pdHRlcjtcbiAgICAgICAgaWYgKGVtaXR0ZXIgJiYgc3RhcnQpIHtcbiAgICAgICAgICAgIGVtaXR0ZXIuZW1pdChcIm1lc3NhZ2UtY29tcGlsYXRpb25cIiAvKiBWdWVEZXZUb29sc1RpbWVsaW5lRXZlbnRzLk1FU1NBR0VfQ09NUElMQVRJT04gKi8sIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm1lc3NhZ2UtY29tcGlsYXRpb25cIiAvKiBWdWVEZXZUb29sc1RpbWVsaW5lRXZlbnRzLk1FU1NBR0VfQ09NUElMQVRJT04gKi8sXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZm9ybWF0LFxuICAgICAgICAgICAgICAgIHRpbWU6IGVuZCAtIHN0YXJ0LFxuICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGAkeyd0cmFuc2xhdGUnfToke2tleX1gXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRUYWcgJiYgZW5kVGFnICYmIG1hcmsgJiYgbWVhc3VyZSkge1xuICAgICAgICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgICAgICAgbWVhc3VyZSgnaW50bGlmeSBtZXNzYWdlIGNvbXBpbGF0aW9uJywgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbXNnLmxvY2FsZSA9IHRhcmdldExvY2FsZTtcbiAgICBtc2cua2V5ID0ga2V5O1xuICAgIG1zZy5zb3VyY2UgPSBmb3JtYXQ7XG4gICAgcmV0dXJuIG1zZztcbn1cbmZ1bmN0aW9uIGV2YWx1YXRlTWVzc2FnZShjb250ZXh0LCBtc2csIG1zZ0N0eCkge1xuICAgIC8vIGZvciB2dWUtZGV2dG9vbHMgdGltZWxpbmUgZXZlbnRcbiAgICBsZXQgc3RhcnQgPSBudWxsO1xuICAgIGxldCBzdGFydFRhZztcbiAgICBsZXQgZW5kVGFnO1xuICAgIGlmIChpbkJyb3dzZXIpIHtcbiAgICAgICAgc3RhcnQgPSB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIHN0YXJ0VGFnID0gJ2ludGxpZnktbWVzc2FnZS1ldmFsdWF0aW9uLXN0YXJ0JztcbiAgICAgICAgZW5kVGFnID0gJ2ludGxpZnktbWVzc2FnZS1ldmFsdWF0aW9uLWVuZCc7XG4gICAgICAgIG1hcmsgJiYgbWFyayhzdGFydFRhZyk7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2VkID0gbXNnKG1zZ0N0eCk7XG4gICAgLy8gZm9yIHZ1ZS1kZXZ0b29scyB0aW1lbGluZSBldmVudFxuICAgIGlmIChpbkJyb3dzZXIpIHtcbiAgICAgICAgY29uc3QgZW5kID0gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBjb25zdCBlbWl0dGVyID0gY29udGV4dC5fX3ZfZW1pdHRlcjtcbiAgICAgICAgaWYgKGVtaXR0ZXIgJiYgc3RhcnQpIHtcbiAgICAgICAgICAgIGVtaXR0ZXIuZW1pdChcIm1lc3NhZ2UtZXZhbHVhdGlvblwiIC8qIFZ1ZURldlRvb2xzVGltZWxpbmVFdmVudHMuTUVTU0FHRV9FVkFMVUFUSU9OICovLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJtZXNzYWdlLWV2YWx1YXRpb25cIiAvKiBWdWVEZXZUb29sc1RpbWVsaW5lRXZlbnRzLk1FU1NBR0VfRVZBTFVBVElPTiAqLyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbWVzc2FnZWQsXG4gICAgICAgICAgICAgICAgdGltZTogZW5kIC0gc3RhcnQsXG4gICAgICAgICAgICAgICAgZ3JvdXBJZDogYCR7J3RyYW5zbGF0ZSd9OiR7bXNnLmtleX1gXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRUYWcgJiYgZW5kVGFnICYmIG1hcmsgJiYgbWVhc3VyZSkge1xuICAgICAgICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgICAgICAgbWVhc3VyZSgnaW50bGlmeSBtZXNzYWdlIGV2YWx1YXRpb24nLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZWQ7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBwYXJzZVRyYW5zbGF0ZUFyZ3MoLi4uYXJncykge1xuICAgIGNvbnN0IFthcmcxLCBhcmcyLCBhcmczXSA9IGFyZ3M7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgIGlmICghaXNTdHJpbmcoYXJnMSkgJiZcbiAgICAgICAgIWlzTnVtYmVyKGFyZzEpICYmXG4gICAgICAgICFpc01lc3NhZ2VGdW5jdGlvbihhcmcxKSAmJlxuICAgICAgICAhaXNNZXNzYWdlQVNUKGFyZzEpKSB7XG4gICAgICAgIHRocm93IGNyZWF0ZUNvcmVFcnJvcihDb3JlRXJyb3JDb2Rlcy5JTlZBTElEX0FSR1VNRU5UKTtcbiAgICB9XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgY29uc3Qga2V5ID0gaXNOdW1iZXIoYXJnMSlcbiAgICAgICAgPyBTdHJpbmcoYXJnMSlcbiAgICAgICAgOiBpc01lc3NhZ2VGdW5jdGlvbihhcmcxKVxuICAgICAgICAgICAgPyBhcmcxXG4gICAgICAgICAgICA6IGFyZzE7XG4gICAgaWYgKGlzTnVtYmVyKGFyZzIpKSB7XG4gICAgICAgIG9wdGlvbnMucGx1cmFsID0gYXJnMjtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdHJpbmcoYXJnMikpIHtcbiAgICAgICAgb3B0aW9ucy5kZWZhdWx0ID0gYXJnMjtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChhcmcyKSAmJiAhaXNFbXB0eU9iamVjdChhcmcyKSkge1xuICAgICAgICBvcHRpb25zLm5hbWVkID0gYXJnMjtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBcnJheShhcmcyKSkge1xuICAgICAgICBvcHRpb25zLmxpc3QgPSBhcmcyO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIoYXJnMykpIHtcbiAgICAgICAgb3B0aW9ucy5wbHVyYWwgPSBhcmczO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1N0cmluZyhhcmczKSkge1xuICAgICAgICBvcHRpb25zLmRlZmF1bHQgPSBhcmczO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGFyZzMpKSB7XG4gICAgICAgIGFzc2lnbihvcHRpb25zLCBhcmczKTtcbiAgICB9XG4gICAgcmV0dXJuIFtrZXksIG9wdGlvbnNdO1xufVxuZnVuY3Rpb24gZ2V0Q29tcGlsZUNvbnRleHQoY29udGV4dCwgbG9jYWxlLCBrZXksIHNvdXJjZSwgd2Fybkh0bWxNZXNzYWdlLCBvbkVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBrZXksXG4gICAgICAgIHdhcm5IdG1sTWVzc2FnZSxcbiAgICAgICAgb25FcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgb25FcnJvciAmJiBvbkVycm9yKGVycik7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgX3NvdXJjZSA9IGdldFNvdXJjZUZvckNvZGVGcmFtZShzb3VyY2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgTWVzc2FnZSBjb21waWxhdGlvbiBlcnJvcjogJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVGcmFtZSA9IGVyci5sb2NhdGlvbiAmJlxuICAgICAgICAgICAgICAgICAgICBfc291cmNlICYmXG4gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29kZUZyYW1lKF9zb3VyY2UsIGVyci5sb2NhdGlvbi5zdGFydC5vZmZzZXQsIGVyci5sb2NhdGlvbi5lbmQub2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbWl0dGVyID0gY29udGV4dC5fX3ZfZW1pdHRlcjtcbiAgICAgICAgICAgICAgICBpZiAoZW1pdHRlciAmJiBfc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIuZW1pdChcImNvbXBpbGUtZXJyb3JcIiAvKiBWdWVEZXZUb29sc1RpbWVsaW5lRXZlbnRzLkNPTVBJTEVfRVJST1IgKi8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IF9zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZXJyLmxvY2F0aW9uICYmIGVyci5sb2NhdGlvbi5zdGFydC5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGVyci5sb2NhdGlvbiAmJiBlcnIubG9jYXRpb24uZW5kLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGAkeyd0cmFuc2xhdGUnfToke2tleX1gXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGNvZGVGcmFtZSA/IGAke21lc3NhZ2V9XFxuJHtjb2RlRnJhbWV9YCA6IG1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvbkNhY2hlS2V5OiAoc291cmNlKSA9PiBnZW5lcmF0ZUZvcm1hdENhY2hlS2V5KGxvY2FsZSwga2V5LCBzb3VyY2UpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldFNvdXJjZUZvckNvZGVGcmFtZShzb3VyY2UpIHtcbiAgICBpZiAoaXNTdHJpbmcoc291cmNlKSkge1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKHNvdXJjZS5sb2MgJiYgc291cmNlLmxvYy5zb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UubG9jLnNvdXJjZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2VDb250ZXh0T3B0aW9ucyhjb250ZXh0LCBsb2NhbGUsIG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IG1vZGlmaWVycywgcGx1cmFsUnVsZXMsIG1lc3NhZ2VSZXNvbHZlcjogcmVzb2x2ZVZhbHVlLCBmYWxsYmFja0xvY2FsZSwgZmFsbGJhY2tXYXJuLCBtaXNzaW5nV2FybiwgZmFsbGJhY2tDb250ZXh0IH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHJlc29sdmVNZXNzYWdlID0gKGtleSkgPT4ge1xuICAgICAgICBsZXQgdmFsID0gcmVzb2x2ZVZhbHVlKG1lc3NhZ2UsIGtleSk7XG4gICAgICAgIC8vIGZhbGxiYWNrIHRvIHJvb3QgY29udGV4dFxuICAgICAgICBpZiAodmFsID09IG51bGwgJiYgZmFsbGJhY2tDb250ZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBbLCAsIG1lc3NhZ2VdID0gcmVzb2x2ZU1lc3NhZ2VGb3JtYXQoZmFsbGJhY2tDb250ZXh0LCBrZXksIGxvY2FsZSwgZmFsbGJhY2tMb2NhbGUsIGZhbGxiYWNrV2FybiwgbWlzc2luZ1dhcm4pO1xuICAgICAgICAgICAgdmFsID0gcmVzb2x2ZVZhbHVlKG1lc3NhZ2UsIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbCkgfHwgaXNNZXNzYWdlQVNUKHZhbCkpIHtcbiAgICAgICAgICAgIGxldCBvY2N1cnJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3Qgb25FcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBvY2N1cnJlZCA9IHRydWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgbXNnID0gY29tcGlsZU1lc3NhZ2VGb3JtYXQoY29udGV4dCwga2V5LCBsb2NhbGUsIHZhbCwga2V5LCBvbkVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiAhb2NjdXJyZWRcbiAgICAgICAgICAgICAgICA/IG1zZ1xuICAgICAgICAgICAgICAgIDogTk9PUF9NRVNTQUdFX0ZVTkNUSU9OO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzTWVzc2FnZUZ1bmN0aW9uKHZhbCkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgYmUgaW1wbGVtZW50ZWQgd2FybmluZyBtZXNzYWdlXG4gICAgICAgICAgICByZXR1cm4gTk9PUF9NRVNTQUdFX0ZVTkNUSU9OO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjdHhPcHRpb25zID0ge1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIG1vZGlmaWVycyxcbiAgICAgICAgcGx1cmFsUnVsZXMsXG4gICAgICAgIG1lc3NhZ2VzOiByZXNvbHZlTWVzc2FnZVxuICAgIH07XG4gICAgaWYgKGNvbnRleHQucHJvY2Vzc29yKSB7XG4gICAgICAgIGN0eE9wdGlvbnMucHJvY2Vzc29yID0gY29udGV4dC5wcm9jZXNzb3I7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmxpc3QpIHtcbiAgICAgICAgY3R4T3B0aW9ucy5saXN0ID0gb3B0aW9ucy5saXN0O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5uYW1lZCkge1xuICAgICAgICBjdHhPcHRpb25zLm5hbWVkID0gb3B0aW9ucy5uYW1lZDtcbiAgICB9XG4gICAgaWYgKGlzTnVtYmVyKG9wdGlvbnMucGx1cmFsKSkge1xuICAgICAgICBjdHhPcHRpb25zLnBsdXJhbEluZGV4ID0gb3B0aW9ucy5wbHVyYWw7XG4gICAgfVxuICAgIHJldHVybiBjdHhPcHRpb25zO1xufVxuXG5jb25zdCBpbnRsRGVmaW5lZCA9IHR5cGVvZiBJbnRsICE9PSAndW5kZWZpbmVkJztcbmNvbnN0IEF2YWlsYWJpbGl0aWVzID0ge1xuICAgIGRhdGVUaW1lRm9ybWF0OiBpbnRsRGVmaW5lZCAmJiB0eXBlb2YgSW50bC5EYXRlVGltZUZvcm1hdCAhPT0gJ3VuZGVmaW5lZCcsXG4gICAgbnVtYmVyRm9ybWF0OiBpbnRsRGVmaW5lZCAmJiB0eXBlb2YgSW50bC5OdW1iZXJGb3JtYXQgIT09ICd1bmRlZmluZWQnXG59O1xuXG4vLyBpbXBsZW1lbnRhdGlvbiBvZiBgZGF0ZXRpbWVgIGZ1bmN0aW9uXG5mdW5jdGlvbiBkYXRldGltZShjb250ZXh0LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgeyBkYXRldGltZUZvcm1hdHMsIHVucmVzb2x2aW5nLCBmYWxsYmFja0xvY2FsZSwgb25XYXJuLCBsb2NhbGVGYWxsYmFja2VyIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHsgX19kYXRldGltZUZvcm1hdHRlcnMgfSA9IGNvbnRleHQ7XG4gICAgaWYgKCFBdmFpbGFiaWxpdGllcy5kYXRlVGltZUZvcm1hdCkge1xuICAgICAgICBvbldhcm4oZ2V0V2Fybk1lc3NhZ2UoQ29yZVdhcm5Db2Rlcy5DQU5OT1RfRk9STUFUX0RBVEUpKTtcbiAgICAgICAgcmV0dXJuIE1JU1NJTkdfUkVTT0xWRV9WQUxVRTtcbiAgICB9XG4gICAgY29uc3QgW2tleSwgdmFsdWUsIG9wdGlvbnMsIG92ZXJyaWRlc10gPSBwYXJzZURhdGVUaW1lQXJncyguLi5hcmdzKTtcbiAgICBjb25zdCBtaXNzaW5nV2FybiA9IGlzQm9vbGVhbihvcHRpb25zLm1pc3NpbmdXYXJuKVxuICAgICAgICA/IG9wdGlvbnMubWlzc2luZ1dhcm5cbiAgICAgICAgOiBjb250ZXh0Lm1pc3NpbmdXYXJuO1xuICAgIGNvbnN0IGZhbGxiYWNrV2FybiA9IGlzQm9vbGVhbihvcHRpb25zLmZhbGxiYWNrV2FybilcbiAgICAgICAgPyBvcHRpb25zLmZhbGxiYWNrV2FyblxuICAgICAgICA6IGNvbnRleHQuZmFsbGJhY2tXYXJuO1xuICAgIGNvbnN0IHBhcnQgPSAhIW9wdGlvbnMucGFydDtcbiAgICBjb25zdCBsb2NhbGUgPSBnZXRMb2NhbGUoY29udGV4dCwgb3B0aW9ucyk7XG4gICAgY29uc3QgbG9jYWxlcyA9IGxvY2FsZUZhbGxiYWNrZXIoY29udGV4dCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZmFsbGJhY2tMb2NhbGUsIGxvY2FsZSk7XG4gICAgaWYgKCFpc1N0cmluZyhrZXkpIHx8IGtleSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgb3ZlcnJpZGVzKS5mb3JtYXQodmFsdWUpO1xuICAgIH1cbiAgICAvLyByZXNvbHZlIGZvcm1hdFxuICAgIGxldCBkYXRldGltZUZvcm1hdCA9IHt9O1xuICAgIGxldCB0YXJnZXRMb2NhbGU7XG4gICAgbGV0IGZvcm1hdCA9IG51bGw7XG4gICAgbGV0IGZyb20gPSBsb2NhbGU7XG4gICAgbGV0IHRvID0gbnVsbDtcbiAgICBjb25zdCB0eXBlID0gJ2RhdGV0aW1lIGZvcm1hdCc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2NhbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRhcmdldExvY2FsZSA9IHRvID0gbG9jYWxlc1tpXTtcbiAgICAgICAgaWYgKGxvY2FsZSAhPT0gdGFyZ2V0TG9jYWxlICYmXG4gICAgICAgICAgICBpc1RyYW5zbGF0ZUZhbGxiYWNrV2FybihmYWxsYmFja1dhcm4sIGtleSkpIHtcbiAgICAgICAgICAgIG9uV2FybihnZXRXYXJuTWVzc2FnZShDb3JlV2FybkNvZGVzLkZBTExCQUNLX1RPX0RBVEVfRk9STUFULCB7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0TG9jYWxlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9yIHZ1ZS1kZXZ0b29scyB0aW1lbGluZSBldmVudFxuICAgICAgICBpZiAobG9jYWxlICE9PSB0YXJnZXRMb2NhbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVtaXR0ZXIgPSBjb250ZXh0Ll9fdl9lbWl0dGVyO1xuICAgICAgICAgICAgaWYgKGVtaXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBlbWl0dGVyLmVtaXQoXCJmYWxsYmFja1wiIC8qIFZ1ZURldlRvb2xzVGltZWxpbmVFdmVudHMuRkFMQkFDSyAqLywge1xuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGZyb20sXG4gICAgICAgICAgICAgICAgICAgIHRvLFxuICAgICAgICAgICAgICAgICAgICBncm91cElkOiBgJHt0eXBlfToke2tleX1gXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZXRpbWVGb3JtYXQgPVxuICAgICAgICAgICAgZGF0ZXRpbWVGb3JtYXRzW3RhcmdldExvY2FsZV0gfHwge307XG4gICAgICAgIGZvcm1hdCA9IGRhdGV0aW1lRm9ybWF0W2tleV07XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KGZvcm1hdCkpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgaGFuZGxlTWlzc2luZyhjb250ZXh0LCBrZXksIHRhcmdldExvY2FsZSwgbWlzc2luZ1dhcm4sIHR5cGUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgZnJvbSA9IHRvO1xuICAgIH1cbiAgICAvLyBjaGVja2luZyBmb3JtYXQgYW5kIHRhcmdldCBsb2NhbGVcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoZm9ybWF0KSB8fCAhaXNTdHJpbmcodGFyZ2V0TG9jYWxlKSkge1xuICAgICAgICByZXR1cm4gdW5yZXNvbHZpbmcgPyBOT1RfUkVPU0xWRUQgOiBrZXk7XG4gICAgfVxuICAgIGxldCBpZCA9IGAke3RhcmdldExvY2FsZX1fXyR7a2V5fWA7XG4gICAgaWYgKCFpc0VtcHR5T2JqZWN0KG92ZXJyaWRlcykpIHtcbiAgICAgICAgaWQgPSBgJHtpZH1fXyR7SlNPTi5zdHJpbmdpZnkob3ZlcnJpZGVzKX1gO1xuICAgIH1cbiAgICBsZXQgZm9ybWF0dGVyID0gX19kYXRldGltZUZvcm1hdHRlcnMuZ2V0KGlkKTtcbiAgICBpZiAoIWZvcm1hdHRlcikge1xuICAgICAgICBmb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0YXJnZXRMb2NhbGUsIGFzc2lnbih7fSwgZm9ybWF0LCBvdmVycmlkZXMpKTtcbiAgICAgICAgX19kYXRldGltZUZvcm1hdHRlcnMuc2V0KGlkLCBmb3JtYXR0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gIXBhcnQgPyBmb3JtYXR0ZXIuZm9ybWF0KHZhbHVlKSA6IGZvcm1hdHRlci5mb3JtYXRUb1BhcnRzKHZhbHVlKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmNvbnN0IERBVEVUSU1FX0ZPUk1BVF9PUFRJT05TX0tFWVMgPSBbXG4gICAgJ2xvY2FsZU1hdGNoZXInLFxuICAgICd3ZWVrZGF5JyxcbiAgICAnZXJhJyxcbiAgICAneWVhcicsXG4gICAgJ21vbnRoJyxcbiAgICAnZGF5JyxcbiAgICAnaG91cicsXG4gICAgJ21pbnV0ZScsXG4gICAgJ3NlY29uZCcsXG4gICAgJ3RpbWVab25lTmFtZScsXG4gICAgJ2Zvcm1hdE1hdGNoZXInLFxuICAgICdob3VyMTInLFxuICAgICd0aW1lWm9uZScsXG4gICAgJ2RhdGVTdHlsZScsXG4gICAgJ3RpbWVTdHlsZScsXG4gICAgJ2NhbGVuZGFyJyxcbiAgICAnZGF5UGVyaW9kJyxcbiAgICAnbnVtYmVyaW5nU3lzdGVtJyxcbiAgICAnaG91ckN5Y2xlJyxcbiAgICAnZnJhY3Rpb25hbFNlY29uZERpZ2l0cydcbl07XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBwYXJzZURhdGVUaW1lQXJncyguLi5hcmdzKSB7XG4gICAgY29uc3QgW2FyZzEsIGFyZzIsIGFyZzMsIGFyZzRdID0gYXJncztcbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgbGV0IG92ZXJyaWRlcyA9IHt9O1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAoaXNTdHJpbmcoYXJnMSkpIHtcbiAgICAgICAgLy8gT25seSBhbGxvdyBJU08gc3RyaW5ncyAtIG90aGVyIGRhdGUgZm9ybWF0cyBhcmUgb2Z0ZW4gc3VwcG9ydGVkLFxuICAgICAgICAvLyBidXQgbWF5IGNhdXNlIGRpZmZlcmVudCByZXN1bHRzIGluIGRpZmZlcmVudCBicm93c2Vycy5cbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGFyZzEubWF0Y2goLyhcXGR7NH0tXFxkezJ9LVxcZHsyfSkoVHxcXHMpPyguKikvKTtcbiAgICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDb3JlRXJyb3IoQ29yZUVycm9yQ29kZXMuSU5WQUxJRF9JU09fREFURV9BUkdVTUVOVCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29tZSBicm93c2VycyBjYW4gbm90IHBhcnNlIHRoZSBpc28gZGF0ZXRpbWUgc2VwYXJhdGVkIGJ5IHNwYWNlLFxuICAgICAgICAvLyB0aGlzIGlzIGEgY29tcHJvbWlzZSBzb2x1dGlvbiBieSByZXBsYWNlIHRoZSAnVCcvJyAnIHdpdGggJ1QnXG4gICAgICAgIGNvbnN0IGRhdGVUaW1lID0gbWF0Y2hlc1szXVxuICAgICAgICAgICAgPyBtYXRjaGVzWzNdLnRyaW0oKS5zdGFydHNXaXRoKCdUJylcbiAgICAgICAgICAgICAgICA/IGAke21hdGNoZXNbMV0udHJpbSgpfSR7bWF0Y2hlc1szXS50cmltKCl9YFxuICAgICAgICAgICAgICAgIDogYCR7bWF0Y2hlc1sxXS50cmltKCl9VCR7bWF0Y2hlc1szXS50cmltKCl9YFxuICAgICAgICAgICAgOiBtYXRjaGVzWzFdLnRyaW0oKTtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZShkYXRlVGltZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBUaGlzIHdpbGwgZmFpbCBpZiB0aGUgZGF0ZSBpcyBub3QgdmFsaWRcbiAgICAgICAgICAgIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNvcmVFcnJvcihDb3JlRXJyb3JDb2Rlcy5JTlZBTElEX0lTT19EQVRFX0FSR1VNRU5UKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc0RhdGUoYXJnMSkpIHtcbiAgICAgICAgaWYgKGlzTmFOKGFyZzEuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ29yZUVycm9yKENvcmVFcnJvckNvZGVzLklOVkFMSURfREFURV9BUkdVTUVOVCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBhcmcxO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc051bWJlcihhcmcxKSkge1xuICAgICAgICB2YWx1ZSA9IGFyZzE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBjcmVhdGVDb3JlRXJyb3IoQ29yZUVycm9yQ29kZXMuSU5WQUxJRF9BUkdVTUVOVCk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhhcmcyKSkge1xuICAgICAgICBvcHRpb25zLmtleSA9IGFyZzI7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoYXJnMikpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoYXJnMikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKERBVEVUSU1FX0ZPUk1BVF9PUFRJT05TX0tFWVMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIG92ZXJyaWRlc1trZXldID0gYXJnMltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1trZXldID0gYXJnMltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlzU3RyaW5nKGFyZzMpKSB7XG4gICAgICAgIG9wdGlvbnMubG9jYWxlID0gYXJnMztcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChhcmczKSkge1xuICAgICAgICBvdmVycmlkZXMgPSBhcmczO1xuICAgIH1cbiAgICBpZiAoaXNQbGFpbk9iamVjdChhcmc0KSkge1xuICAgICAgICBvdmVycmlkZXMgPSBhcmc0O1xuICAgIH1cbiAgICByZXR1cm4gW29wdGlvbnMua2V5IHx8ICcnLCB2YWx1ZSwgb3B0aW9ucywgb3ZlcnJpZGVzXTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGNsZWFyRGF0ZVRpbWVGb3JtYXQoY3R4LCBsb2NhbGUsIGZvcm1hdCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBjdHg7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZm9ybWF0KSB7XG4gICAgICAgIGNvbnN0IGlkID0gYCR7bG9jYWxlfV9fJHtrZXl9YDtcbiAgICAgICAgaWYgKCFjb250ZXh0Ll9fZGF0ZXRpbWVGb3JtYXR0ZXJzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQuX19kYXRldGltZUZvcm1hdHRlcnMuZGVsZXRlKGlkKTtcbiAgICB9XG59XG5cbi8vIGltcGxlbWVudGF0aW9uIG9mIGBudW1iZXJgIGZ1bmN0aW9uXG5mdW5jdGlvbiBudW1iZXIoY29udGV4dCwgLi4uYXJncykge1xuICAgIGNvbnN0IHsgbnVtYmVyRm9ybWF0cywgdW5yZXNvbHZpbmcsIGZhbGxiYWNrTG9jYWxlLCBvbldhcm4sIGxvY2FsZUZhbGxiYWNrZXIgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgeyBfX251bWJlckZvcm1hdHRlcnMgfSA9IGNvbnRleHQ7XG4gICAgaWYgKCFBdmFpbGFiaWxpdGllcy5udW1iZXJGb3JtYXQpIHtcbiAgICAgICAgb25XYXJuKGdldFdhcm5NZXNzYWdlKENvcmVXYXJuQ29kZXMuQ0FOTk9UX0ZPUk1BVF9OVU1CRVIpKTtcbiAgICAgICAgcmV0dXJuIE1JU1NJTkdfUkVTT0xWRV9WQUxVRTtcbiAgICB9XG4gICAgY29uc3QgW2tleSwgdmFsdWUsIG9wdGlvbnMsIG92ZXJyaWRlc10gPSBwYXJzZU51bWJlckFyZ3MoLi4uYXJncyk7XG4gICAgY29uc3QgbWlzc2luZ1dhcm4gPSBpc0Jvb2xlYW4ob3B0aW9ucy5taXNzaW5nV2FybilcbiAgICAgICAgPyBvcHRpb25zLm1pc3NpbmdXYXJuXG4gICAgICAgIDogY29udGV4dC5taXNzaW5nV2FybjtcbiAgICBjb25zdCBmYWxsYmFja1dhcm4gPSBpc0Jvb2xlYW4ob3B0aW9ucy5mYWxsYmFja1dhcm4pXG4gICAgICAgID8gb3B0aW9ucy5mYWxsYmFja1dhcm5cbiAgICAgICAgOiBjb250ZXh0LmZhbGxiYWNrV2FybjtcbiAgICBjb25zdCBwYXJ0ID0gISFvcHRpb25zLnBhcnQ7XG4gICAgY29uc3QgbG9jYWxlID0gZ2V0TG9jYWxlKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGxvY2FsZXMgPSBsb2NhbGVGYWxsYmFja2VyKGNvbnRleHQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGZhbGxiYWNrTG9jYWxlLCBsb2NhbGUpO1xuICAgIGlmICghaXNTdHJpbmcoa2V5KSB8fCBrZXkgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlLCBvdmVycmlkZXMpLmZvcm1hdCh2YWx1ZSk7XG4gICAgfVxuICAgIC8vIHJlc29sdmUgZm9ybWF0XG4gICAgbGV0IG51bWJlckZvcm1hdCA9IHt9O1xuICAgIGxldCB0YXJnZXRMb2NhbGU7XG4gICAgbGV0IGZvcm1hdCA9IG51bGw7XG4gICAgbGV0IGZyb20gPSBsb2NhbGU7XG4gICAgbGV0IHRvID0gbnVsbDtcbiAgICBjb25zdCB0eXBlID0gJ251bWJlciBmb3JtYXQnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9jYWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0YXJnZXRMb2NhbGUgPSB0byA9IGxvY2FsZXNbaV07XG4gICAgICAgIGlmIChsb2NhbGUgIT09IHRhcmdldExvY2FsZSAmJlxuICAgICAgICAgICAgaXNUcmFuc2xhdGVGYWxsYmFja1dhcm4oZmFsbGJhY2tXYXJuLCBrZXkpKSB7XG4gICAgICAgICAgICBvbldhcm4oZ2V0V2Fybk1lc3NhZ2UoQ29yZVdhcm5Db2Rlcy5GQUxMQkFDS19UT19OVU1CRVJfRk9STUFULCB7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0TG9jYWxlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9yIHZ1ZS1kZXZ0b29scyB0aW1lbGluZSBldmVudFxuICAgICAgICBpZiAobG9jYWxlICE9PSB0YXJnZXRMb2NhbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVtaXR0ZXIgPSBjb250ZXh0Ll9fdl9lbWl0dGVyO1xuICAgICAgICAgICAgaWYgKGVtaXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBlbWl0dGVyLmVtaXQoXCJmYWxsYmFja1wiIC8qIFZ1ZURldlRvb2xzVGltZWxpbmVFdmVudHMuRkFMQkFDSyAqLywge1xuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGZyb20sXG4gICAgICAgICAgICAgICAgICAgIHRvLFxuICAgICAgICAgICAgICAgICAgICBncm91cElkOiBgJHt0eXBlfToke2tleX1gXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbnVtYmVyRm9ybWF0ID1cbiAgICAgICAgICAgIG51bWJlckZvcm1hdHNbdGFyZ2V0TG9jYWxlXSB8fCB7fTtcbiAgICAgICAgZm9ybWF0ID0gbnVtYmVyRm9ybWF0W2tleV07XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KGZvcm1hdCkpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgaGFuZGxlTWlzc2luZyhjb250ZXh0LCBrZXksIHRhcmdldExvY2FsZSwgbWlzc2luZ1dhcm4sIHR5cGUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgZnJvbSA9IHRvO1xuICAgIH1cbiAgICAvLyBjaGVja2luZyBmb3JtYXQgYW5kIHRhcmdldCBsb2NhbGVcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoZm9ybWF0KSB8fCAhaXNTdHJpbmcodGFyZ2V0TG9jYWxlKSkge1xuICAgICAgICByZXR1cm4gdW5yZXNvbHZpbmcgPyBOT1RfUkVPU0xWRUQgOiBrZXk7XG4gICAgfVxuICAgIGxldCBpZCA9IGAke3RhcmdldExvY2FsZX1fXyR7a2V5fWA7XG4gICAgaWYgKCFpc0VtcHR5T2JqZWN0KG92ZXJyaWRlcykpIHtcbiAgICAgICAgaWQgPSBgJHtpZH1fXyR7SlNPTi5zdHJpbmdpZnkob3ZlcnJpZGVzKX1gO1xuICAgIH1cbiAgICBsZXQgZm9ybWF0dGVyID0gX19udW1iZXJGb3JtYXR0ZXJzLmdldChpZCk7XG4gICAgaWYgKCFmb3JtYXR0ZXIpIHtcbiAgICAgICAgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KHRhcmdldExvY2FsZSwgYXNzaWduKHt9LCBmb3JtYXQsIG92ZXJyaWRlcykpO1xuICAgICAgICBfX251bWJlckZvcm1hdHRlcnMuc2V0KGlkLCBmb3JtYXR0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gIXBhcnQgPyBmb3JtYXR0ZXIuZm9ybWF0KHZhbHVlKSA6IGZvcm1hdHRlci5mb3JtYXRUb1BhcnRzKHZhbHVlKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmNvbnN0IE5VTUJFUl9GT1JNQVRfT1BUSU9OU19LRVlTID0gW1xuICAgICdsb2NhbGVNYXRjaGVyJyxcbiAgICAnc3R5bGUnLFxuICAgICdjdXJyZW5jeScsXG4gICAgJ2N1cnJlbmN5RGlzcGxheScsXG4gICAgJ2N1cnJlbmN5U2lnbicsXG4gICAgJ3VzZUdyb3VwaW5nJyxcbiAgICAnbWluaW11bUludGVnZXJEaWdpdHMnLFxuICAgICdtaW5pbXVtRnJhY3Rpb25EaWdpdHMnLFxuICAgICdtYXhpbXVtRnJhY3Rpb25EaWdpdHMnLFxuICAgICdtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMnLFxuICAgICdtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMnLFxuICAgICdjb21wYWN0RGlzcGxheScsXG4gICAgJ25vdGF0aW9uJyxcbiAgICAnc2lnbkRpc3BsYXknLFxuICAgICd1bml0JyxcbiAgICAndW5pdERpc3BsYXknLFxuICAgICdyb3VuZGluZ01vZGUnLFxuICAgICdyb3VuZGluZ1ByaW9yaXR5JyxcbiAgICAncm91bmRpbmdJbmNyZW1lbnQnLFxuICAgICd0cmFpbGluZ1plcm9EaXNwbGF5J1xuXTtcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIHBhcnNlTnVtYmVyQXJncyguLi5hcmdzKSB7XG4gICAgY29uc3QgW2FyZzEsIGFyZzIsIGFyZzMsIGFyZzRdID0gYXJncztcbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgbGV0IG92ZXJyaWRlcyA9IHt9O1xuICAgIGlmICghaXNOdW1iZXIoYXJnMSkpIHtcbiAgICAgICAgdGhyb3cgY3JlYXRlQ29yZUVycm9yKENvcmVFcnJvckNvZGVzLklOVkFMSURfQVJHVU1FTlQpO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IGFyZzE7XG4gICAgaWYgKGlzU3RyaW5nKGFyZzIpKSB7XG4gICAgICAgIG9wdGlvbnMua2V5ID0gYXJnMjtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChhcmcyKSkge1xuICAgICAgICBPYmplY3Qua2V5cyhhcmcyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoTlVNQkVSX0ZPUk1BVF9PUFRJT05TX0tFWVMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIG92ZXJyaWRlc1trZXldID0gYXJnMltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1trZXldID0gYXJnMltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlzU3RyaW5nKGFyZzMpKSB7XG4gICAgICAgIG9wdGlvbnMubG9jYWxlID0gYXJnMztcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChhcmczKSkge1xuICAgICAgICBvdmVycmlkZXMgPSBhcmczO1xuICAgIH1cbiAgICBpZiAoaXNQbGFpbk9iamVjdChhcmc0KSkge1xuICAgICAgICBvdmVycmlkZXMgPSBhcmc0O1xuICAgIH1cbiAgICByZXR1cm4gW29wdGlvbnMua2V5IHx8ICcnLCB2YWx1ZSwgb3B0aW9ucywgb3ZlcnJpZGVzXTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGNsZWFyTnVtYmVyRm9ybWF0KGN0eCwgbG9jYWxlLCBmb3JtYXQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gY3R4O1xuICAgIGZvciAoY29uc3Qga2V5IGluIGZvcm1hdCkge1xuICAgICAgICBjb25zdCBpZCA9IGAke2xvY2FsZX1fXyR7a2V5fWA7XG4gICAgICAgIGlmICghY29udGV4dC5fX251bWJlckZvcm1hdHRlcnMuaGFzKGlkKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5fX251bWJlckZvcm1hdHRlcnMuZGVsZXRlKGlkKTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IENvbXBpbGVFcnJvckNvZGVzLCBDb3JlRXJyb3JDb2RlcywgQ29yZVdhcm5Db2RlcywgREFURVRJTUVfRk9STUFUX09QVElPTlNfS0VZUywgREVGQVVMVF9MT0NBTEUsIERFRkFVTFRfTUVTU0FHRV9EQVRBX1RZUEUsIE1JU1NJTkdfUkVTT0xWRV9WQUxVRSwgTk9UX1JFT1NMVkVELCBOVU1CRVJfRk9STUFUX09QVElPTlNfS0VZUywgVkVSU0lPTiwgY2xlYXJDb21waWxlQ2FjaGUsIGNsZWFyRGF0ZVRpbWVGb3JtYXQsIGNsZWFyTnVtYmVyRm9ybWF0LCBjb21waWxlLCBjb21waWxlVG9GdW5jdGlvbiwgY3JlYXRlQ29tcGlsZUVycm9yLCBjcmVhdGVDb3JlQ29udGV4dCwgY3JlYXRlQ29yZUVycm9yLCBjcmVhdGVNZXNzYWdlQ29udGV4dCwgZGF0ZXRpbWUsIGZhbGxiYWNrV2l0aExvY2FsZUNoYWluLCBmYWxsYmFja1dpdGhTaW1wbGUsIGdldEFkZGl0aW9uYWxNZXRhLCBnZXREZXZUb29sc0hvb2ssIGdldEZhbGxiYWNrQ29udGV4dCwgZ2V0TG9jYWxlLCBnZXRXYXJuTWVzc2FnZSwgaGFuZGxlTWlzc2luZywgaW5pdEkxOG5EZXZUb29scywgaXNNZXNzYWdlQVNULCBpc01lc3NhZ2VGdW5jdGlvbiwgaXNUcmFuc2xhdGVGYWxsYmFja1dhcm4sIGlzVHJhbnNsYXRlTWlzc2luZ1dhcm4sIG51bWJlciwgcGFyc2UsIHBhcnNlRGF0ZVRpbWVBcmdzLCBwYXJzZU51bWJlckFyZ3MsIHBhcnNlVHJhbnNsYXRlQXJncywgcmVnaXN0ZXJMb2NhbGVGYWxsYmFja2VyLCByZWdpc3Rlck1lc3NhZ2VDb21waWxlciwgcmVnaXN0ZXJNZXNzYWdlUmVzb2x2ZXIsIHJlc29sdmVMb2NhbGUsIHJlc29sdmVWYWx1ZSwgcmVzb2x2ZVdpdGhLZXlWYWx1ZSwgc2V0QWRkaXRpb25hbE1ldGEsIHNldERldlRvb2xzSG9vaywgc2V0RmFsbGJhY2tDb250ZXh0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZURldlRvb2xzLCB1cGRhdGVGYWxsYmFja0xvY2FsZSB9O1xuIiwiLyoqXG4qIEB2dWUvc2hhcmVkIHYzLjQuMjFcbiogKGMpIDIwMTgtcHJlc2VudCBZdXhpIChFdmFuKSBZb3UgYW5kIFZ1ZSBjb250cmlidXRvcnNcbiogQGxpY2Vuc2UgTUlUXG4qKi9cbmZ1bmN0aW9uIG1ha2VNYXAoc3RyLCBleHBlY3RzTG93ZXJDYXNlKSB7XG4gIGNvbnN0IHNldCA9IG5ldyBTZXQoc3RyLnNwbGl0KFwiLFwiKSk7XG4gIHJldHVybiBleHBlY3RzTG93ZXJDYXNlID8gKHZhbCkgPT4gc2V0Lmhhcyh2YWwudG9Mb3dlckNhc2UoKSkgOiAodmFsKSA9PiBzZXQuaGFzKHZhbCk7XG59XG5cbmNvbnN0IEVNUFRZX09CSiA9ICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyBPYmplY3QuZnJlZXplKHt9KSA6IHt9O1xuY29uc3QgRU1QVFlfQVJSID0gISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IE9iamVjdC5mcmVlemUoW10pIDogW107XG5jb25zdCBOT09QID0gKCkgPT4ge1xufTtcbmNvbnN0IE5PID0gKCkgPT4gZmFsc2U7XG5jb25zdCBpc09uID0gKGtleSkgPT4ga2V5LmNoYXJDb2RlQXQoMCkgPT09IDExMSAmJiBrZXkuY2hhckNvZGVBdCgxKSA9PT0gMTEwICYmIC8vIHVwcGVyY2FzZSBsZXR0ZXJcbihrZXkuY2hhckNvZGVBdCgyKSA+IDEyMiB8fCBrZXkuY2hhckNvZGVBdCgyKSA8IDk3KTtcbmNvbnN0IGlzTW9kZWxMaXN0ZW5lciA9IChrZXkpID0+IGtleS5zdGFydHNXaXRoKFwib25VcGRhdGU6XCIpO1xuY29uc3QgZXh0ZW5kID0gT2JqZWN0LmFzc2lnbjtcbmNvbnN0IHJlbW92ZSA9IChhcnIsIGVsKSA9PiB7XG4gIGNvbnN0IGkgPSBhcnIuaW5kZXhPZihlbCk7XG4gIGlmIChpID4gLTEpIHtcbiAgICBhcnIuc3BsaWNlKGksIDEpO1xuICB9XG59O1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuY29uc3QgaGFzT3duID0gKHZhbCwga2V5KSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbCwga2V5KTtcbmNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuY29uc3QgaXNNYXAgPSAodmFsKSA9PiB0b1R5cGVTdHJpbmcodmFsKSA9PT0gXCJbb2JqZWN0IE1hcF1cIjtcbmNvbnN0IGlzU2V0ID0gKHZhbCkgPT4gdG9UeXBlU3RyaW5nKHZhbCkgPT09IFwiW29iamVjdCBTZXRdXCI7XG5jb25zdCBpc0RhdGUgPSAodmFsKSA9PiB0b1R5cGVTdHJpbmcodmFsKSA9PT0gXCJbb2JqZWN0IERhdGVdXCI7XG5jb25zdCBpc1JlZ0V4cCA9ICh2YWwpID0+IHRvVHlwZVN0cmluZyh2YWwpID09PSBcIltvYmplY3QgUmVnRXhwXVwiO1xuY29uc3QgaXNGdW5jdGlvbiA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIjtcbmNvbnN0IGlzU3RyaW5nID0gKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIjtcbmNvbnN0IGlzU3ltYm9sID0gKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gXCJzeW1ib2xcIjtcbmNvbnN0IGlzT2JqZWN0ID0gKHZhbCkgPT4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCI7XG5jb25zdCBpc1Byb21pc2UgPSAodmFsKSA9PiB7XG4gIHJldHVybiAoaXNPYmplY3QodmFsKSB8fCBpc0Z1bmN0aW9uKHZhbCkpICYmIGlzRnVuY3Rpb24odmFsLnRoZW4pICYmIGlzRnVuY3Rpb24odmFsLmNhdGNoKTtcbn07XG5jb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5jb25zdCB0b1R5cGVTdHJpbmcgPSAodmFsdWUpID0+IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuY29uc3QgdG9SYXdUeXBlID0gKHZhbHVlKSA9PiB7XG4gIHJldHVybiB0b1R5cGVTdHJpbmcodmFsdWUpLnNsaWNlKDgsIC0xKTtcbn07XG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4gdG9UeXBlU3RyaW5nKHZhbCkgPT09IFwiW29iamVjdCBPYmplY3RdXCI7XG5jb25zdCBpc0ludGVnZXJLZXkgPSAoa2V5KSA9PiBpc1N0cmluZyhrZXkpICYmIGtleSAhPT0gXCJOYU5cIiAmJiBrZXlbMF0gIT09IFwiLVwiICYmIFwiXCIgKyBwYXJzZUludChrZXksIDEwKSA9PT0ga2V5O1xuY29uc3QgaXNSZXNlcnZlZFByb3AgPSAvKiBAX19QVVJFX18gKi8gbWFrZU1hcChcbiAgLy8gdGhlIGxlYWRpbmcgY29tbWEgaXMgaW50ZW50aW9uYWwgc28gZW1wdHkgc3RyaW5nIFwiXCIgaXMgYWxzbyBpbmNsdWRlZFxuICBcIixrZXkscmVmLHJlZl9mb3IscmVmX2tleSxvblZub2RlQmVmb3JlTW91bnQsb25Wbm9kZU1vdW50ZWQsb25Wbm9kZUJlZm9yZVVwZGF0ZSxvblZub2RlVXBkYXRlZCxvblZub2RlQmVmb3JlVW5tb3VudCxvblZub2RlVW5tb3VudGVkXCJcbik7XG5jb25zdCBpc0J1aWx0SW5EaXJlY3RpdmUgPSAvKiBAX19QVVJFX18gKi8gbWFrZU1hcChcbiAgXCJiaW5kLGNsb2FrLGVsc2UtaWYsZWxzZSxmb3IsaHRtbCxpZixtb2RlbCxvbixvbmNlLHByZSxzaG93LHNsb3QsdGV4dCxtZW1vXCJcbik7XG5jb25zdCBjYWNoZVN0cmluZ0Z1bmN0aW9uID0gKGZuKSA9PiB7XG4gIGNvbnN0IGNhY2hlID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAoc3RyKSA9PiB7XG4gICAgY29uc3QgaGl0ID0gY2FjaGVbc3RyXTtcbiAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSk7XG4gIH07XG59O1xuY29uc3QgY2FtZWxpemVSRSA9IC8tKFxcdykvZztcbmNvbnN0IGNhbWVsaXplID0gY2FjaGVTdHJpbmdGdW5jdGlvbigoc3RyKSA9PiB7XG4gIHJldHVybiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCAoXywgYykgPT4gYyA/IGMudG9VcHBlckNhc2UoKSA6IFwiXCIpO1xufSk7XG5jb25zdCBoeXBoZW5hdGVSRSA9IC9cXEIoW0EtWl0pL2c7XG5jb25zdCBoeXBoZW5hdGUgPSBjYWNoZVN0cmluZ0Z1bmN0aW9uKFxuICAoc3RyKSA9PiBzdHIucmVwbGFjZShoeXBoZW5hdGVSRSwgXCItJDFcIikudG9Mb3dlckNhc2UoKVxuKTtcbmNvbnN0IGNhcGl0YWxpemUgPSBjYWNoZVN0cmluZ0Z1bmN0aW9uKChzdHIpID0+IHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbn0pO1xuY29uc3QgdG9IYW5kbGVyS2V5ID0gY2FjaGVTdHJpbmdGdW5jdGlvbigoc3RyKSA9PiB7XG4gIGNvbnN0IHMgPSBzdHIgPyBgb24ke2NhcGl0YWxpemUoc3RyKX1gIDogYGA7XG4gIHJldHVybiBzO1xufSk7XG5jb25zdCBoYXNDaGFuZ2VkID0gKHZhbHVlLCBvbGRWYWx1ZSkgPT4gIU9iamVjdC5pcyh2YWx1ZSwgb2xkVmFsdWUpO1xuY29uc3QgaW52b2tlQXJyYXlGbnMgPSAoZm5zLCBhcmcpID0+IHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHtcbiAgICBmbnNbaV0oYXJnKTtcbiAgfVxufTtcbmNvbnN0IGRlZiA9IChvYmosIGtleSwgdmFsdWUpID0+IHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlXG4gIH0pO1xufTtcbmNvbnN0IGxvb3NlVG9OdW1iZXIgPSAodmFsKSA9PiB7XG4gIGNvbnN0IG4gPSBwYXJzZUZsb2F0KHZhbCk7XG4gIHJldHVybiBpc05hTihuKSA/IHZhbCA6IG47XG59O1xuY29uc3QgdG9OdW1iZXIgPSAodmFsKSA9PiB7XG4gIGNvbnN0IG4gPSBpc1N0cmluZyh2YWwpID8gTnVtYmVyKHZhbCkgOiBOYU47XG4gIHJldHVybiBpc05hTihuKSA/IHZhbCA6IG47XG59O1xubGV0IF9nbG9iYWxUaGlzO1xuY29uc3QgZ2V0R2xvYmFsVGhpcyA9ICgpID0+IHtcbiAgcmV0dXJuIF9nbG9iYWxUaGlzIHx8IChfZ2xvYmFsVGhpcyA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDoge30pO1xufTtcbmNvbnN0IGlkZW50UkUgPSAvXltfJGEtekEtWlxceEEwLVxcdUZGRkZdW18kYS16QS1aMC05XFx4QTAtXFx1RkZGRl0qJC87XG5mdW5jdGlvbiBnZW5Qcm9wc0FjY2Vzc0V4cChuYW1lKSB7XG4gIHJldHVybiBpZGVudFJFLnRlc3QobmFtZSkgPyBgX19wcm9wcy4ke25hbWV9YCA6IGBfX3Byb3BzWyR7SlNPTi5zdHJpbmdpZnkobmFtZSl9XWA7XG59XG5cbmNvbnN0IFBhdGNoRmxhZ3MgPSB7XG4gIFwiVEVYVFwiOiAxLFxuICBcIjFcIjogXCJURVhUXCIsXG4gIFwiQ0xBU1NcIjogMixcbiAgXCIyXCI6IFwiQ0xBU1NcIixcbiAgXCJTVFlMRVwiOiA0LFxuICBcIjRcIjogXCJTVFlMRVwiLFxuICBcIlBST1BTXCI6IDgsXG4gIFwiOFwiOiBcIlBST1BTXCIsXG4gIFwiRlVMTF9QUk9QU1wiOiAxNixcbiAgXCIxNlwiOiBcIkZVTExfUFJPUFNcIixcbiAgXCJORUVEX0hZRFJBVElPTlwiOiAzMixcbiAgXCIzMlwiOiBcIk5FRURfSFlEUkFUSU9OXCIsXG4gIFwiU1RBQkxFX0ZSQUdNRU5UXCI6IDY0LFxuICBcIjY0XCI6IFwiU1RBQkxFX0ZSQUdNRU5UXCIsXG4gIFwiS0VZRURfRlJBR01FTlRcIjogMTI4LFxuICBcIjEyOFwiOiBcIktFWUVEX0ZSQUdNRU5UXCIsXG4gIFwiVU5LRVlFRF9GUkFHTUVOVFwiOiAyNTYsXG4gIFwiMjU2XCI6IFwiVU5LRVlFRF9GUkFHTUVOVFwiLFxuICBcIk5FRURfUEFUQ0hcIjogNTEyLFxuICBcIjUxMlwiOiBcIk5FRURfUEFUQ0hcIixcbiAgXCJEWU5BTUlDX1NMT1RTXCI6IDEwMjQsXG4gIFwiMTAyNFwiOiBcIkRZTkFNSUNfU0xPVFNcIixcbiAgXCJERVZfUk9PVF9GUkFHTUVOVFwiOiAyMDQ4LFxuICBcIjIwNDhcIjogXCJERVZfUk9PVF9GUkFHTUVOVFwiLFxuICBcIkhPSVNURURcIjogLTEsXG4gIFwiLTFcIjogXCJIT0lTVEVEXCIsXG4gIFwiQkFJTFwiOiAtMixcbiAgXCItMlwiOiBcIkJBSUxcIlxufTtcbmNvbnN0IFBhdGNoRmxhZ05hbWVzID0ge1xuICBbMV06IGBURVhUYCxcbiAgWzJdOiBgQ0xBU1NgLFxuICBbNF06IGBTVFlMRWAsXG4gIFs4XTogYFBST1BTYCxcbiAgWzE2XTogYEZVTExfUFJPUFNgLFxuICBbMzJdOiBgTkVFRF9IWURSQVRJT05gLFxuICBbNjRdOiBgU1RBQkxFX0ZSQUdNRU5UYCxcbiAgWzEyOF06IGBLRVlFRF9GUkFHTUVOVGAsXG4gIFsyNTZdOiBgVU5LRVlFRF9GUkFHTUVOVGAsXG4gIFs1MTJdOiBgTkVFRF9QQVRDSGAsXG4gIFsxMDI0XTogYERZTkFNSUNfU0xPVFNgLFxuICBbMjA0OF06IGBERVZfUk9PVF9GUkFHTUVOVGAsXG4gIFstMV06IGBIT0lTVEVEYCxcbiAgWy0yXTogYEJBSUxgXG59O1xuXG5jb25zdCBTaGFwZUZsYWdzID0ge1xuICBcIkVMRU1FTlRcIjogMSxcbiAgXCIxXCI6IFwiRUxFTUVOVFwiLFxuICBcIkZVTkNUSU9OQUxfQ09NUE9ORU5UXCI6IDIsXG4gIFwiMlwiOiBcIkZVTkNUSU9OQUxfQ09NUE9ORU5UXCIsXG4gIFwiU1RBVEVGVUxfQ09NUE9ORU5UXCI6IDQsXG4gIFwiNFwiOiBcIlNUQVRFRlVMX0NPTVBPTkVOVFwiLFxuICBcIlRFWFRfQ0hJTERSRU5cIjogOCxcbiAgXCI4XCI6IFwiVEVYVF9DSElMRFJFTlwiLFxuICBcIkFSUkFZX0NISUxEUkVOXCI6IDE2LFxuICBcIjE2XCI6IFwiQVJSQVlfQ0hJTERSRU5cIixcbiAgXCJTTE9UU19DSElMRFJFTlwiOiAzMixcbiAgXCIzMlwiOiBcIlNMT1RTX0NISUxEUkVOXCIsXG4gIFwiVEVMRVBPUlRcIjogNjQsXG4gIFwiNjRcIjogXCJURUxFUE9SVFwiLFxuICBcIlNVU1BFTlNFXCI6IDEyOCxcbiAgXCIxMjhcIjogXCJTVVNQRU5TRVwiLFxuICBcIkNPTVBPTkVOVF9TSE9VTERfS0VFUF9BTElWRVwiOiAyNTYsXG4gIFwiMjU2XCI6IFwiQ09NUE9ORU5UX1NIT1VMRF9LRUVQX0FMSVZFXCIsXG4gIFwiQ09NUE9ORU5UX0tFUFRfQUxJVkVcIjogNTEyLFxuICBcIjUxMlwiOiBcIkNPTVBPTkVOVF9LRVBUX0FMSVZFXCIsXG4gIFwiQ09NUE9ORU5UXCI6IDYsXG4gIFwiNlwiOiBcIkNPTVBPTkVOVFwiXG59O1xuXG5jb25zdCBTbG90RmxhZ3MgPSB7XG4gIFwiU1RBQkxFXCI6IDEsXG4gIFwiMVwiOiBcIlNUQUJMRVwiLFxuICBcIkRZTkFNSUNcIjogMixcbiAgXCIyXCI6IFwiRFlOQU1JQ1wiLFxuICBcIkZPUldBUkRFRFwiOiAzLFxuICBcIjNcIjogXCJGT1JXQVJERURcIlxufTtcbmNvbnN0IHNsb3RGbGFnc1RleHQgPSB7XG4gIFsxXTogXCJTVEFCTEVcIixcbiAgWzJdOiBcIkRZTkFNSUNcIixcbiAgWzNdOiBcIkZPUldBUkRFRFwiXG59O1xuXG5jb25zdCBHTE9CQUxTX0FMTE9XRUQgPSBcIkluZmluaXR5LHVuZGVmaW5lZCxOYU4saXNGaW5pdGUsaXNOYU4scGFyc2VGbG9hdCxwYXJzZUludCxkZWNvZGVVUkksZGVjb2RlVVJJQ29tcG9uZW50LGVuY29kZVVSSSxlbmNvZGVVUklDb21wb25lbnQsTWF0aCxOdW1iZXIsRGF0ZSxBcnJheSxPYmplY3QsQm9vbGVhbixTdHJpbmcsUmVnRXhwLE1hcCxTZXQsSlNPTixJbnRsLEJpZ0ludCxjb25zb2xlLEVycm9yXCI7XG5jb25zdCBpc0dsb2JhbGx5QWxsb3dlZCA9IC8qIEBfX1BVUkVfXyAqLyBtYWtlTWFwKEdMT0JBTFNfQUxMT1dFRCk7XG5jb25zdCBpc0dsb2JhbGx5V2hpdGVsaXN0ZWQgPSBpc0dsb2JhbGx5QWxsb3dlZDtcblxuY29uc3QgcmFuZ2UgPSAyO1xuZnVuY3Rpb24gZ2VuZXJhdGVDb2RlRnJhbWUoc291cmNlLCBzdGFydCA9IDAsIGVuZCA9IHNvdXJjZS5sZW5ndGgpIHtcbiAgbGV0IGxpbmVzID0gc291cmNlLnNwbGl0KC8oXFxyP1xcbikvKTtcbiAgY29uc3QgbmV3bGluZVNlcXVlbmNlcyA9IGxpbmVzLmZpbHRlcigoXywgaWR4KSA9PiBpZHggJSAyID09PSAxKTtcbiAgbGluZXMgPSBsaW5lcy5maWx0ZXIoKF8sIGlkeCkgPT4gaWR4ICUgMiA9PT0gMCk7XG4gIGxldCBjb3VudCA9IDA7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY291bnQgKz0gbGluZXNbaV0ubGVuZ3RoICsgKG5ld2xpbmVTZXF1ZW5jZXNbaV0gJiYgbmV3bGluZVNlcXVlbmNlc1tpXS5sZW5ndGggfHwgMCk7XG4gICAgaWYgKGNvdW50ID49IHN0YXJ0KSB7XG4gICAgICBmb3IgKGxldCBqID0gaSAtIHJhbmdlOyBqIDw9IGkgKyByYW5nZSB8fCBlbmQgPiBjb3VudDsgaisrKSB7XG4gICAgICAgIGlmIChqIDwgMCB8fCBqID49IGxpbmVzLmxlbmd0aClcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3QgbGluZSA9IGogKyAxO1xuICAgICAgICByZXMucHVzaChcbiAgICAgICAgICBgJHtsaW5lfSR7XCIgXCIucmVwZWF0KE1hdGgubWF4KDMgLSBTdHJpbmcobGluZSkubGVuZ3RoLCAwKSl9fCAgJHtsaW5lc1tqXX1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGxpbmVMZW5ndGggPSBsaW5lc1tqXS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG5ld0xpbmVTZXFMZW5ndGggPSBuZXdsaW5lU2VxdWVuY2VzW2pdICYmIG5ld2xpbmVTZXF1ZW5jZXNbal0ubGVuZ3RoIHx8IDA7XG4gICAgICAgIGlmIChqID09PSBpKSB7XG4gICAgICAgICAgY29uc3QgcGFkID0gc3RhcnQgLSAoY291bnQgLSAobGluZUxlbmd0aCArIG5ld0xpbmVTZXFMZW5ndGgpKTtcbiAgICAgICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heChcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICBlbmQgPiBjb3VudCA/IGxpbmVMZW5ndGggLSBwYWQgOiBlbmQgLSBzdGFydFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVzLnB1c2goYCAgIHwgIGAgKyBcIiBcIi5yZXBlYXQocGFkKSArIFwiXlwiLnJlcGVhdChsZW5ndGgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChqID4gaSkge1xuICAgICAgICAgIGlmIChlbmQgPiBjb3VudCkge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5taW4oZW5kIC0gY291bnQsIGxpbmVMZW5ndGgpLCAxKTtcbiAgICAgICAgICAgIHJlcy5wdXNoKGAgICB8ICBgICsgXCJeXCIucmVwZWF0KGxlbmd0aCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb3VudCArPSBsaW5lTGVuZ3RoICsgbmV3TGluZVNlcUxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXMuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU3R5bGUodmFsdWUpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgY29uc3QgcmVzID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHZhbHVlW2ldO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGlzU3RyaW5nKGl0ZW0pID8gcGFyc2VTdHJpbmdTdHlsZShpdGVtKSA6IG5vcm1hbGl6ZVN0eWxlKGl0ZW0pO1xuICAgICAgaWYgKG5vcm1hbGl6ZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbm9ybWFsaXplZCkge1xuICAgICAgICAgIHJlc1trZXldID0gbm9ybWFsaXplZFtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuY29uc3QgbGlzdERlbGltaXRlclJFID0gLzsoPyFbXihdKlxcKSkvZztcbmNvbnN0IHByb3BlcnR5RGVsaW1pdGVyUkUgPSAvOihbXl0rKS87XG5jb25zdCBzdHlsZUNvbW1lbnRSRSA9IC9cXC9cXCpbXl0qP1xcKlxcLy9nO1xuZnVuY3Rpb24gcGFyc2VTdHJpbmdTdHlsZShjc3NUZXh0KSB7XG4gIGNvbnN0IHJldCA9IHt9O1xuICBjc3NUZXh0LnJlcGxhY2Uoc3R5bGVDb21tZW50UkUsIFwiXCIpLnNwbGl0KGxpc3REZWxpbWl0ZXJSRSkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBjb25zdCB0bXAgPSBpdGVtLnNwbGl0KHByb3BlcnR5RGVsaW1pdGVyUkUpO1xuICAgICAgdG1wLmxlbmd0aCA+IDEgJiYgKHJldFt0bXBbMF0udHJpbSgpXSA9IHRtcFsxXS50cmltKCkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXQ7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnlTdHlsZShzdHlsZXMpIHtcbiAgbGV0IHJldCA9IFwiXCI7XG4gIGlmICghc3R5bGVzIHx8IGlzU3RyaW5nKHN0eWxlcykpIHtcbiAgICByZXR1cm4gcmV0O1xuICB9XG4gIGZvciAoY29uc3Qga2V5IGluIHN0eWxlcykge1xuICAgIGNvbnN0IHZhbHVlID0gc3R5bGVzW2tleV07XG4gICAgY29uc3Qgbm9ybWFsaXplZEtleSA9IGtleS5zdGFydHNXaXRoKGAtLWApID8ga2V5IDogaHlwaGVuYXRlKGtleSk7XG4gICAgaWYgKGlzU3RyaW5nKHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldCArPSBgJHtub3JtYWxpemVkS2V5fToke3ZhbHVlfTtgO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuZnVuY3Rpb24gbm9ybWFsaXplQ2xhc3ModmFsdWUpIHtcbiAgbGV0IHJlcyA9IFwiXCI7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXMgPSB2YWx1ZTtcbiAgfSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVDbGFzcyh2YWx1ZVtpXSk7XG4gICAgICBpZiAobm9ybWFsaXplZCkge1xuICAgICAgICByZXMgKz0gbm9ybWFsaXplZCArIFwiIFwiO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZVtuYW1lXSkge1xuICAgICAgICByZXMgKz0gbmFtZSArIFwiIFwiO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzLnRyaW0oKTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzKHByb3BzKSB7XG4gIGlmICghcHJvcHMpXG4gICAgcmV0dXJuIG51bGw7XG4gIGxldCB7IGNsYXNzOiBrbGFzcywgc3R5bGUgfSA9IHByb3BzO1xuICBpZiAoa2xhc3MgJiYgIWlzU3RyaW5nKGtsYXNzKSkge1xuICAgIHByb3BzLmNsYXNzID0gbm9ybWFsaXplQ2xhc3Moa2xhc3MpO1xuICB9XG4gIGlmIChzdHlsZSkge1xuICAgIHByb3BzLnN0eWxlID0gbm9ybWFsaXplU3R5bGUoc3R5bGUpO1xuICB9XG4gIHJldHVybiBwcm9wcztcbn1cblxuY29uc3QgSFRNTF9UQUdTID0gXCJodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSxhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoZ3JvdXAsaDEsaDIsaDMsaDQsaDUsaDYsbmF2LHNlY3Rpb24sZGl2LGRkLGRsLGR0LGZpZ2NhcHRpb24sZmlndXJlLHBpY3R1cmUsaHIsaW1nLGxpLG1haW4sb2wscCxwcmUsdWwsYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ1YnkscyxzYW1wLHNtYWxsLHNwYW4sc3Ryb25nLHN1YixzdXAsdGltZSx1LHZhcix3YnIsYXJlYSxhdWRpbyxtYXAsdHJhY2ssdmlkZW8sZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsY2FwdGlvbixjb2wsY29sZ3JvdXAsdGFibGUsdGhlYWQsdGJvZHksdGQsdGgsdHIsYnV0dG9uLGRhdGFsaXN0LGZpZWxkc2V0LGZvcm0saW5wdXQsbGFiZWwsbGVnZW5kLG1ldGVyLG9wdGdyb3VwLG9wdGlvbixvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLGRldGFpbHMsZGlhbG9nLG1lbnUsc3VtbWFyeSx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdFwiO1xuY29uc3QgU1ZHX1RBR1MgPSBcInN2ZyxhbmltYXRlLGFuaW1hdGVNb3Rpb24sYW5pbWF0ZVRyYW5zZm9ybSxjaXJjbGUsY2xpcFBhdGgsY29sb3ItcHJvZmlsZSxkZWZzLGRlc2MsZGlzY2FyZCxlbGxpcHNlLGZlQmxlbmQsZmVDb2xvck1hdHJpeCxmZUNvbXBvbmVudFRyYW5zZmVyLGZlQ29tcG9zaXRlLGZlQ29udm9sdmVNYXRyaXgsZmVEaWZmdXNlTGlnaHRpbmcsZmVEaXNwbGFjZW1lbnRNYXAsZmVEaXN0YW50TGlnaHQsZmVEcm9wU2hhZG93LGZlRmxvb2QsZmVGdW5jQSxmZUZ1bmNCLGZlRnVuY0csZmVGdW5jUixmZUdhdXNzaWFuQmx1cixmZUltYWdlLGZlTWVyZ2UsZmVNZXJnZU5vZGUsZmVNb3JwaG9sb2d5LGZlT2Zmc2V0LGZlUG9pbnRMaWdodCxmZVNwZWN1bGFyTGlnaHRpbmcsZmVTcG90TGlnaHQsZmVUaWxlLGZlVHVyYnVsZW5jZSxmaWx0ZXIsZm9yZWlnbk9iamVjdCxnLGhhdGNoLGhhdGNocGF0aCxpbWFnZSxsaW5lLGxpbmVhckdyYWRpZW50LG1hcmtlcixtYXNrLG1lc2gsbWVzaGdyYWRpZW50LG1lc2hwYXRjaCxtZXNocm93LG1ldGFkYXRhLG1wYXRoLHBhdGgscGF0dGVybixwb2x5Z29uLHBvbHlsaW5lLHJhZGlhbEdyYWRpZW50LHJlY3Qsc2V0LHNvbGlkY29sb3Isc3RvcCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dFBhdGgsdGl0bGUsdHNwYW4sdW5rbm93bix1c2Usdmlld1wiO1xuY29uc3QgTUFUSF9UQUdTID0gXCJhbm5vdGF0aW9uLGFubm90YXRpb24teG1sLG1hY3Rpb24sbWFsaWduZ3JvdXAsbWFsaWdubWFyayxtYXRoLG1lbmNsb3NlLG1lcnJvcixtZmVuY2VkLG1mcmFjLG1mcmFjdGlvbixtZ2x5cGgsbWksbWxhYmVsZWR0cixtbG9uZ2RpdixtbXVsdGlzY3JpcHRzLG1uLG1vLG1vdmVyLG1wYWRkZWQsbXBoYW50b20sbXByZXNjcmlwdHMsbXJvb3QsbXJvdyxtcyxtc2NhcnJpZXMsbXNjYXJyeSxtc2dyb3VwLG1zbGluZSxtc3BhY2UsbXNxcnQsbXNyb3csbXN0YWNrLG1zdHlsZSxtc3ViLG1zdWJzdXAsbXN1cCxtdGFibGUsbXRkLG10ZXh0LG10cixtdW5kZXIsbXVuZGVyb3Zlcixub25lLHNlbWFudGljc1wiO1xuY29uc3QgVk9JRF9UQUdTID0gXCJhcmVhLGJhc2UsYnIsY29sLGVtYmVkLGhyLGltZyxpbnB1dCxsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdiclwiO1xuY29uc3QgaXNIVE1MVGFnID0gLyogQF9fUFVSRV9fICovIG1ha2VNYXAoSFRNTF9UQUdTKTtcbmNvbnN0IGlzU1ZHVGFnID0gLyogQF9fUFVSRV9fICovIG1ha2VNYXAoU1ZHX1RBR1MpO1xuY29uc3QgaXNNYXRoTUxUYWcgPSAvKiBAX19QVVJFX18gKi8gbWFrZU1hcChNQVRIX1RBR1MpO1xuY29uc3QgaXNWb2lkVGFnID0gLyogQF9fUFVSRV9fICovIG1ha2VNYXAoVk9JRF9UQUdTKTtcblxuY29uc3Qgc3BlY2lhbEJvb2xlYW5BdHRycyA9IGBpdGVtc2NvcGUsYWxsb3dmdWxsc2NyZWVuLGZvcm1ub3ZhbGlkYXRlLGlzbWFwLG5vbW9kdWxlLG5vdmFsaWRhdGUscmVhZG9ubHlgO1xuY29uc3QgaXNTcGVjaWFsQm9vbGVhbkF0dHIgPSAvKiBAX19QVVJFX18gKi8gbWFrZU1hcChzcGVjaWFsQm9vbGVhbkF0dHJzKTtcbmNvbnN0IGlzQm9vbGVhbkF0dHIgPSAvKiBAX19QVVJFX18gKi8gbWFrZU1hcChcbiAgc3BlY2lhbEJvb2xlYW5BdHRycyArIGAsYXN5bmMsYXV0b2ZvY3VzLGF1dG9wbGF5LGNvbnRyb2xzLGRlZmF1bHQsZGVmZXIsZGlzYWJsZWQsaGlkZGVuLGluZXJ0LGxvb3Asb3BlbixyZXF1aXJlZCxyZXZlcnNlZCxzY29wZWQsc2VhbWxlc3MsY2hlY2tlZCxtdXRlZCxtdWx0aXBsZSxzZWxlY3RlZGBcbik7XG5mdW5jdGlvbiBpbmNsdWRlQm9vbGVhbkF0dHIodmFsdWUpIHtcbiAgcmV0dXJuICEhdmFsdWUgfHwgdmFsdWUgPT09IFwiXCI7XG59XG5jb25zdCB1bnNhZmVBdHRyQ2hhclJFID0gL1s+Lz1cIidcXHUwMDA5XFx1MDAwYVxcdTAwMGNcXHUwMDIwXS87XG5jb25zdCBhdHRyVmFsaWRhdGlvbkNhY2hlID0ge307XG5mdW5jdGlvbiBpc1NTUlNhZmVBdHRyTmFtZShuYW1lKSB7XG4gIGlmIChhdHRyVmFsaWRhdGlvbkNhY2hlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgcmV0dXJuIGF0dHJWYWxpZGF0aW9uQ2FjaGVbbmFtZV07XG4gIH1cbiAgY29uc3QgaXNVbnNhZmUgPSB1bnNhZmVBdHRyQ2hhclJFLnRlc3QobmFtZSk7XG4gIGlmIChpc1Vuc2FmZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYHVuc2FmZSBhdHRyaWJ1dGUgbmFtZTogJHtuYW1lfWApO1xuICB9XG4gIHJldHVybiBhdHRyVmFsaWRhdGlvbkNhY2hlW25hbWVdID0gIWlzVW5zYWZlO1xufVxuY29uc3QgcHJvcHNUb0F0dHJNYXAgPSB7XG4gIGFjY2VwdENoYXJzZXQ6IFwiYWNjZXB0LWNoYXJzZXRcIixcbiAgY2xhc3NOYW1lOiBcImNsYXNzXCIsXG4gIGh0bWxGb3I6IFwiZm9yXCIsXG4gIGh0dHBFcXVpdjogXCJodHRwLWVxdWl2XCJcbn07XG5jb25zdCBpc0tub3duSHRtbEF0dHIgPSAvKiBAX19QVVJFX18gKi8gbWFrZU1hcChcbiAgYGFjY2VwdCxhY2NlcHQtY2hhcnNldCxhY2Nlc3NrZXksYWN0aW9uLGFsaWduLGFsbG93LGFsdCxhc3luYyxhdXRvY2FwaXRhbGl6ZSxhdXRvY29tcGxldGUsYXV0b2ZvY3VzLGF1dG9wbGF5LGJhY2tncm91bmQsYmdjb2xvcixib3JkZXIsYnVmZmVyZWQsY2FwdHVyZSxjaGFsbGVuZ2UsY2hhcnNldCxjaGVja2VkLGNpdGUsY2xhc3MsY29kZSxjb2RlYmFzZSxjb2xvcixjb2xzLGNvbHNwYW4sY29udGVudCxjb250ZW50ZWRpdGFibGUsY29udGV4dG1lbnUsY29udHJvbHMsY29vcmRzLGNyb3Nzb3JpZ2luLGNzcCxkYXRhLGRhdGV0aW1lLGRlY29kaW5nLGRlZmF1bHQsZGVmZXIsZGlyLGRpcm5hbWUsZGlzYWJsZWQsZG93bmxvYWQsZHJhZ2dhYmxlLGRyb3B6b25lLGVuY3R5cGUsZW50ZXJrZXloaW50LGZvcixmb3JtLGZvcm1hY3Rpb24sZm9ybWVuY3R5cGUsZm9ybW1ldGhvZCxmb3Jtbm92YWxpZGF0ZSxmb3JtdGFyZ2V0LGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixoaWdoLGhyZWYsaHJlZmxhbmcsaHR0cC1lcXVpdixpY29uLGlkLGltcG9ydGFuY2UsaW5lcnQsaW50ZWdyaXR5LGlzbWFwLGl0ZW1wcm9wLGtleXR5cGUsa2luZCxsYWJlbCxsYW5nLGxhbmd1YWdlLGxvYWRpbmcsbGlzdCxsb29wLGxvdyxtYW5pZmVzdCxtYXgsbWF4bGVuZ3RoLG1pbmxlbmd0aCxtZWRpYSxtaW4sbXVsdGlwbGUsbXV0ZWQsbmFtZSxub3ZhbGlkYXRlLG9wZW4sb3B0aW11bSxwYXR0ZXJuLHBpbmcscGxhY2Vob2xkZXIscG9zdGVyLHByZWxvYWQscmFkaW9ncm91cCxyZWFkb25seSxyZWZlcnJlcnBvbGljeSxyZWwscmVxdWlyZWQscmV2ZXJzZWQscm93cyxyb3dzcGFuLHNhbmRib3gsc2NvcGUsc2NvcGVkLHNlbGVjdGVkLHNoYXBlLHNpemUsc2l6ZXMsc2xvdCxzcGFuLHNwZWxsY2hlY2ssc3JjLHNyY2RvYyxzcmNsYW5nLHNyY3NldCxzdGFydCxzdGVwLHN0eWxlLHN1bW1hcnksdGFiaW5kZXgsdGFyZ2V0LHRpdGxlLHRyYW5zbGF0ZSx0eXBlLHVzZW1hcCx2YWx1ZSx3aWR0aCx3cmFwYFxuKTtcbmNvbnN0IGlzS25vd25TdmdBdHRyID0gLyogQF9fUFVSRV9fICovIG1ha2VNYXAoXG4gIGB4bWxucyxhY2NlbnQtaGVpZ2h0LGFjY3VtdWxhdGUsYWRkaXRpdmUsYWxpZ25tZW50LWJhc2VsaW5lLGFscGhhYmV0aWMsYW1wbGl0dWRlLGFyYWJpYy1mb3JtLGFzY2VudCxhdHRyaWJ1dGVOYW1lLGF0dHJpYnV0ZVR5cGUsYXppbXV0aCxiYXNlRnJlcXVlbmN5LGJhc2VsaW5lLXNoaWZ0LGJhc2VQcm9maWxlLGJib3gsYmVnaW4sYmlhcyxieSxjYWxjTW9kZSxjYXAtaGVpZ2h0LGNsYXNzLGNsaXAsY2xpcFBhdGhVbml0cyxjbGlwLXBhdGgsY2xpcC1ydWxlLGNvbG9yLGNvbG9yLWludGVycG9sYXRpb24sY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzLGNvbG9yLXByb2ZpbGUsY29sb3ItcmVuZGVyaW5nLGNvbnRlbnRTY3JpcHRUeXBlLGNvbnRlbnRTdHlsZVR5cGUsY3Jvc3NvcmlnaW4sY3Vyc29yLGN4LGN5LGQsZGVjZWxlcmF0ZSxkZXNjZW50LGRpZmZ1c2VDb25zdGFudCxkaXJlY3Rpb24sZGlzcGxheSxkaXZpc29yLGRvbWluYW50LWJhc2VsaW5lLGR1cixkeCxkeSxlZGdlTW9kZSxlbGV2YXRpb24sZW5hYmxlLWJhY2tncm91bmQsZW5kLGV4cG9uZW50LGZpbGwsZmlsbC1vcGFjaXR5LGZpbGwtcnVsZSxmaWx0ZXIsZmlsdGVyUmVzLGZpbHRlclVuaXRzLGZsb29kLWNvbG9yLGZsb29kLW9wYWNpdHksZm9udC1mYW1pbHksZm9udC1zaXplLGZvbnQtc2l6ZS1hZGp1c3QsZm9udC1zdHJldGNoLGZvbnQtc3R5bGUsZm9udC12YXJpYW50LGZvbnQtd2VpZ2h0LGZvcm1hdCxmcm9tLGZyLGZ4LGZ5LGcxLGcyLGdseXBoLW5hbWUsZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCxnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCxnbHlwaFJlZixncmFkaWVudFRyYW5zZm9ybSxncmFkaWVudFVuaXRzLGhhbmdpbmcsaGVpZ2h0LGhyZWYsaHJlZmxhbmcsaG9yaXotYWR2LXgsaG9yaXotb3JpZ2luLXgsaWQsaWRlb2dyYXBoaWMsaW1hZ2UtcmVuZGVyaW5nLGluLGluMixpbnRlcmNlcHQsayxrMSxrMixrMyxrNCxrZXJuZWxNYXRyaXgsa2VybmVsVW5pdExlbmd0aCxrZXJuaW5nLGtleVBvaW50cyxrZXlTcGxpbmVzLGtleVRpbWVzLGxhbmcsbGVuZ3RoQWRqdXN0LGxldHRlci1zcGFjaW5nLGxpZ2h0aW5nLWNvbG9yLGxpbWl0aW5nQ29uZUFuZ2xlLGxvY2FsLG1hcmtlci1lbmQsbWFya2VyLW1pZCxtYXJrZXItc3RhcnQsbWFya2VySGVpZ2h0LG1hcmtlclVuaXRzLG1hcmtlcldpZHRoLG1hc2ssbWFza0NvbnRlbnRVbml0cyxtYXNrVW5pdHMsbWF0aGVtYXRpY2FsLG1heCxtZWRpYSxtZXRob2QsbWluLG1vZGUsbmFtZSxudW1PY3RhdmVzLG9mZnNldCxvcGFjaXR5LG9wZXJhdG9yLG9yZGVyLG9yaWVudCxvcmllbnRhdGlvbixvcmlnaW4sb3ZlcmZsb3csb3ZlcmxpbmUtcG9zaXRpb24sb3ZlcmxpbmUtdGhpY2tuZXNzLHBhbm9zZS0xLHBhaW50LW9yZGVyLHBhdGgscGF0aExlbmd0aCxwYXR0ZXJuQ29udGVudFVuaXRzLHBhdHRlcm5UcmFuc2Zvcm0scGF0dGVyblVuaXRzLHBpbmcscG9pbnRlci1ldmVudHMscG9pbnRzLHBvaW50c0F0WCxwb2ludHNBdFkscG9pbnRzQXRaLHByZXNlcnZlQWxwaGEscHJlc2VydmVBc3BlY3RSYXRpbyxwcmltaXRpdmVVbml0cyxyLHJhZGl1cyxyZWZlcnJlclBvbGljeSxyZWZYLHJlZlkscmVsLHJlbmRlcmluZy1pbnRlbnQscmVwZWF0Q291bnQscmVwZWF0RHVyLHJlcXVpcmVkRXh0ZW5zaW9ucyxyZXF1aXJlZEZlYXR1cmVzLHJlc3RhcnQscmVzdWx0LHJvdGF0ZSxyeCxyeSxzY2FsZSxzZWVkLHNoYXBlLXJlbmRlcmluZyxzbG9wZSxzcGFjaW5nLHNwZWN1bGFyQ29uc3RhbnQsc3BlY3VsYXJFeHBvbmVudCxzcGVlZCxzcHJlYWRNZXRob2Qsc3RhcnRPZmZzZXQsc3RkRGV2aWF0aW9uLHN0ZW1oLHN0ZW12LHN0aXRjaFRpbGVzLHN0b3AtY29sb3Isc3RvcC1vcGFjaXR5LHN0cmlrZXRocm91Z2gtcG9zaXRpb24sc3RyaWtldGhyb3VnaC10aGlja25lc3Msc3RyaW5nLHN0cm9rZSxzdHJva2UtZGFzaGFycmF5LHN0cm9rZS1kYXNob2Zmc2V0LHN0cm9rZS1saW5lY2FwLHN0cm9rZS1saW5lam9pbixzdHJva2UtbWl0ZXJsaW1pdCxzdHJva2Utb3BhY2l0eSxzdHJva2Utd2lkdGgsc3R5bGUsc3VyZmFjZVNjYWxlLHN5c3RlbUxhbmd1YWdlLHRhYmluZGV4LHRhYmxlVmFsdWVzLHRhcmdldCx0YXJnZXRYLHRhcmdldFksdGV4dC1hbmNob3IsdGV4dC1kZWNvcmF0aW9uLHRleHQtcmVuZGVyaW5nLHRleHRMZW5ndGgsdG8sdHJhbnNmb3JtLHRyYW5zZm9ybS1vcmlnaW4sdHlwZSx1MSx1Mix1bmRlcmxpbmUtcG9zaXRpb24sdW5kZXJsaW5lLXRoaWNrbmVzcyx1bmljb2RlLHVuaWNvZGUtYmlkaSx1bmljb2RlLXJhbmdlLHVuaXRzLXBlci1lbSx2LWFscGhhYmV0aWMsdi1oYW5naW5nLHYtaWRlb2dyYXBoaWMsdi1tYXRoZW1hdGljYWwsdmFsdWVzLHZlY3Rvci1lZmZlY3QsdmVyc2lvbix2ZXJ0LWFkdi15LHZlcnQtb3JpZ2luLXgsdmVydC1vcmlnaW4teSx2aWV3Qm94LHZpZXdUYXJnZXQsdmlzaWJpbGl0eSx3aWR0aCx3aWR0aHMsd29yZC1zcGFjaW5nLHdyaXRpbmctbW9kZSx4LHgtaGVpZ2h0LHgxLHgyLHhDaGFubmVsU2VsZWN0b3IseGxpbms6YWN0dWF0ZSx4bGluazphcmNyb2xlLHhsaW5rOmhyZWYseGxpbms6cm9sZSx4bGluazpzaG93LHhsaW5rOnRpdGxlLHhsaW5rOnR5cGUseG1sbnM6eGxpbmsseG1sOmJhc2UseG1sOmxhbmcseG1sOnNwYWNlLHkseTEseTIseUNoYW5uZWxTZWxlY3Rvcix6LHpvb21BbmRQYW5gXG4pO1xuZnVuY3Rpb24gaXNSZW5kZXJhYmxlQXR0clZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB0eXBlID09PSBcInN0cmluZ1wiIHx8IHR5cGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZSA9PT0gXCJib29sZWFuXCI7XG59XG5cbmNvbnN0IGVzY2FwZVJFID0gL1tcIicmPD5dLztcbmZ1bmN0aW9uIGVzY2FwZUh0bWwoc3RyaW5nKSB7XG4gIGNvbnN0IHN0ciA9IFwiXCIgKyBzdHJpbmc7XG4gIGNvbnN0IG1hdGNoID0gZXNjYXBlUkUuZXhlYyhzdHIpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBsZXQgaHRtbCA9IFwiXCI7XG4gIGxldCBlc2NhcGVkO1xuICBsZXQgaW5kZXg7XG4gIGxldCBsYXN0SW5kZXggPSAwO1xuICBmb3IgKGluZGV4ID0gbWF0Y2guaW5kZXg7IGluZGV4IDwgc3RyLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIHN3aXRjaCAoc3RyLmNoYXJDb2RlQXQoaW5kZXgpKSB7XG4gICAgICBjYXNlIDM0OlxuICAgICAgICBlc2NhcGVkID0gXCImcXVvdDtcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM4OlxuICAgICAgICBlc2NhcGVkID0gXCImYW1wO1wiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzk6XG4gICAgICAgIGVzY2FwZWQgPSBcIiYjMzk7XCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA2MDpcbiAgICAgICAgZXNjYXBlZCA9IFwiJmx0O1wiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNjI6XG4gICAgICAgIGVzY2FwZWQgPSBcIiZndDtcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGxhc3RJbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgIGh0bWwgKz0gc3RyLnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpO1xuICAgIH1cbiAgICBsYXN0SW5kZXggPSBpbmRleCArIDE7XG4gICAgaHRtbCArPSBlc2NhcGVkO1xuICB9XG4gIHJldHVybiBsYXN0SW5kZXggIT09IGluZGV4ID8gaHRtbCArIHN0ci5zbGljZShsYXN0SW5kZXgsIGluZGV4KSA6IGh0bWw7XG59XG5jb25zdCBjb21tZW50U3RyaXBSRSA9IC9eLT8+fDwhLS18LS0+fC0tIT58PCEtJC9nO1xuZnVuY3Rpb24gZXNjYXBlSHRtbENvbW1lbnQoc3JjKSB7XG4gIHJldHVybiBzcmMucmVwbGFjZShjb21tZW50U3RyaXBSRSwgXCJcIik7XG59XG5cbmZ1bmN0aW9uIGxvb3NlQ29tcGFyZUFycmF5cyhhLCBiKSB7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBsZXQgZXF1YWwgPSB0cnVlO1xuICBmb3IgKGxldCBpID0gMDsgZXF1YWwgJiYgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBlcXVhbCA9IGxvb3NlRXF1YWwoYVtpXSwgYltpXSk7XG4gIH1cbiAgcmV0dXJuIGVxdWFsO1xufVxuZnVuY3Rpb24gbG9vc2VFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKVxuICAgIHJldHVybiB0cnVlO1xuICBsZXQgYVZhbGlkVHlwZSA9IGlzRGF0ZShhKTtcbiAgbGV0IGJWYWxpZFR5cGUgPSBpc0RhdGUoYik7XG4gIGlmIChhVmFsaWRUeXBlIHx8IGJWYWxpZFR5cGUpIHtcbiAgICByZXR1cm4gYVZhbGlkVHlwZSAmJiBiVmFsaWRUeXBlID8gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpIDogZmFsc2U7XG4gIH1cbiAgYVZhbGlkVHlwZSA9IGlzU3ltYm9sKGEpO1xuICBiVmFsaWRUeXBlID0gaXNTeW1ib2woYik7XG4gIGlmIChhVmFsaWRUeXBlIHx8IGJWYWxpZFR5cGUpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfVxuICBhVmFsaWRUeXBlID0gaXNBcnJheShhKTtcbiAgYlZhbGlkVHlwZSA9IGlzQXJyYXkoYik7XG4gIGlmIChhVmFsaWRUeXBlIHx8IGJWYWxpZFR5cGUpIHtcbiAgICByZXR1cm4gYVZhbGlkVHlwZSAmJiBiVmFsaWRUeXBlID8gbG9vc2VDb21wYXJlQXJyYXlzKGEsIGIpIDogZmFsc2U7XG4gIH1cbiAgYVZhbGlkVHlwZSA9IGlzT2JqZWN0KGEpO1xuICBiVmFsaWRUeXBlID0gaXNPYmplY3QoYik7XG4gIGlmIChhVmFsaWRUeXBlIHx8IGJWYWxpZFR5cGUpIHtcbiAgICBpZiAoIWFWYWxpZFR5cGUgfHwgIWJWYWxpZFR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYUtleXNDb3VudCA9IE9iamVjdC5rZXlzKGEpLmxlbmd0aDtcbiAgICBjb25zdCBiS2V5c0NvdW50ID0gT2JqZWN0LmtleXMoYikubGVuZ3RoO1xuICAgIGlmIChhS2V5c0NvdW50ICE9PSBiS2V5c0NvdW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGEpIHtcbiAgICAgIGNvbnN0IGFIYXNLZXkgPSBhLmhhc093blByb3BlcnR5KGtleSk7XG4gICAgICBjb25zdCBiSGFzS2V5ID0gYi5oYXNPd25Qcm9wZXJ0eShrZXkpO1xuICAgICAgaWYgKGFIYXNLZXkgJiYgIWJIYXNLZXkgfHwgIWFIYXNLZXkgJiYgYkhhc0tleSB8fCAhbG9vc2VFcXVhbChhW2tleV0sIGJba2V5XSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYik7XG59XG5mdW5jdGlvbiBsb29zZUluZGV4T2YoYXJyLCB2YWwpIHtcbiAgcmV0dXJuIGFyci5maW5kSW5kZXgoKGl0ZW0pID0+IGxvb3NlRXF1YWwoaXRlbSwgdmFsKSk7XG59XG5cbmNvbnN0IHRvRGlzcGxheVN0cmluZyA9ICh2YWwpID0+IHtcbiAgcmV0dXJuIGlzU3RyaW5nKHZhbCkgPyB2YWwgOiB2YWwgPT0gbnVsbCA/IFwiXCIgOiBpc0FycmF5KHZhbCkgfHwgaXNPYmplY3QodmFsKSAmJiAodmFsLnRvU3RyaW5nID09PSBvYmplY3RUb1N0cmluZyB8fCAhaXNGdW5jdGlvbih2YWwudG9TdHJpbmcpKSA/IEpTT04uc3RyaW5naWZ5KHZhbCwgcmVwbGFjZXIsIDIpIDogU3RyaW5nKHZhbCk7XG59O1xuY29uc3QgcmVwbGFjZXIgPSAoX2tleSwgdmFsKSA9PiB7XG4gIGlmICh2YWwgJiYgdmFsLl9fdl9pc1JlZikge1xuICAgIHJldHVybiByZXBsYWNlcihfa2V5LCB2YWwudmFsdWUpO1xuICB9IGVsc2UgaWYgKGlzTWFwKHZhbCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW2BNYXAoJHt2YWwuc2l6ZX0pYF06IFsuLi52YWwuZW50cmllcygpXS5yZWR1Y2UoXG4gICAgICAgIChlbnRyaWVzLCBba2V5LCB2YWwyXSwgaSkgPT4ge1xuICAgICAgICAgIGVudHJpZXNbc3RyaW5naWZ5U3ltYm9sKGtleSwgaSkgKyBcIiA9PlwiXSA9IHZhbDI7XG4gICAgICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc1NldCh2YWwpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtgU2V0KCR7dmFsLnNpemV9KWBdOiBbLi4udmFsLnZhbHVlcygpXS5tYXAoKHYpID0+IHN0cmluZ2lmeVN5bWJvbCh2KSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzU3ltYm9sKHZhbCkpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5U3ltYm9sKHZhbCk7XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsKSAmJiAhaXNBcnJheSh2YWwpICYmICFpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbCk7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn07XG5jb25zdCBzdHJpbmdpZnlTeW1ib2wgPSAodiwgaSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hO1xuICByZXR1cm4gaXNTeW1ib2wodikgPyBgU3ltYm9sKCR7KF9hID0gdi5kZXNjcmlwdGlvbikgIT0gbnVsbCA/IF9hIDogaX0pYCA6IHY7XG59O1xuXG5leHBvcnQgeyBFTVBUWV9BUlIsIEVNUFRZX09CSiwgTk8sIE5PT1AsIFBhdGNoRmxhZ05hbWVzLCBQYXRjaEZsYWdzLCBTaGFwZUZsYWdzLCBTbG90RmxhZ3MsIGNhbWVsaXplLCBjYXBpdGFsaXplLCBkZWYsIGVzY2FwZUh0bWwsIGVzY2FwZUh0bWxDb21tZW50LCBleHRlbmQsIGdlblByb3BzQWNjZXNzRXhwLCBnZW5lcmF0ZUNvZGVGcmFtZSwgZ2V0R2xvYmFsVGhpcywgaGFzQ2hhbmdlZCwgaGFzT3duLCBoeXBoZW5hdGUsIGluY2x1ZGVCb29sZWFuQXR0ciwgaW52b2tlQXJyYXlGbnMsIGlzQXJyYXksIGlzQm9vbGVhbkF0dHIsIGlzQnVpbHRJbkRpcmVjdGl2ZSwgaXNEYXRlLCBpc0Z1bmN0aW9uLCBpc0dsb2JhbGx5QWxsb3dlZCwgaXNHbG9iYWxseVdoaXRlbGlzdGVkLCBpc0hUTUxUYWcsIGlzSW50ZWdlcktleSwgaXNLbm93bkh0bWxBdHRyLCBpc0tub3duU3ZnQXR0ciwgaXNNYXAsIGlzTWF0aE1MVGFnLCBpc01vZGVsTGlzdGVuZXIsIGlzT2JqZWN0LCBpc09uLCBpc1BsYWluT2JqZWN0LCBpc1Byb21pc2UsIGlzUmVnRXhwLCBpc1JlbmRlcmFibGVBdHRyVmFsdWUsIGlzUmVzZXJ2ZWRQcm9wLCBpc1NTUlNhZmVBdHRyTmFtZSwgaXNTVkdUYWcsIGlzU2V0LCBpc1NwZWNpYWxCb29sZWFuQXR0ciwgaXNTdHJpbmcsIGlzU3ltYm9sLCBpc1ZvaWRUYWcsIGxvb3NlRXF1YWwsIGxvb3NlSW5kZXhPZiwgbG9vc2VUb051bWJlciwgbWFrZU1hcCwgbm9ybWFsaXplQ2xhc3MsIG5vcm1hbGl6ZVByb3BzLCBub3JtYWxpemVTdHlsZSwgb2JqZWN0VG9TdHJpbmcsIHBhcnNlU3RyaW5nU3R5bGUsIHByb3BzVG9BdHRyTWFwLCByZW1vdmUsIHNsb3RGbGFnc1RleHQsIHN0cmluZ2lmeVN0eWxlLCB0b0Rpc3BsYXlTdHJpbmcsIHRvSGFuZGxlcktleSwgdG9OdW1iZXIsIHRvUmF3VHlwZSwgdG9UeXBlU3RyaW5nIH07XG4iLCIvKipcbiogQHZ1ZS9yZWFjdGl2aXR5IHYzLjQuMjFcbiogKGMpIDIwMTgtcHJlc2VudCBZdXhpIChFdmFuKSBZb3UgYW5kIFZ1ZSBjb250cmlidXRvcnNcbiogQGxpY2Vuc2UgTUlUXG4qKi9cbmltcG9ydCB7IE5PT1AsIGV4dGVuZCwgaXNBcnJheSwgaXNTeW1ib2wsIGlzTWFwLCBpc0ludGVnZXJLZXksIGhhc093biwgaGFzQ2hhbmdlZCwgaXNPYmplY3QsIG1ha2VNYXAsIGNhcGl0YWxpemUsIHRvUmF3VHlwZSwgZGVmLCBpc0Z1bmN0aW9uIH0gZnJvbSAnQHZ1ZS9zaGFyZWQnO1xuXG5mdW5jdGlvbiB3YXJuKG1zZywgLi4uYXJncykge1xuICBjb25zb2xlLndhcm4oYFtWdWUgd2Fybl0gJHttc2d9YCwgLi4uYXJncyk7XG59XG5cbmxldCBhY3RpdmVFZmZlY3RTY29wZTtcbmNsYXNzIEVmZmVjdFNjb3BlIHtcbiAgY29uc3RydWN0b3IoZGV0YWNoZWQgPSBmYWxzZSkge1xuICAgIHRoaXMuZGV0YWNoZWQgPSBkZXRhY2hlZDtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHRoaXMuZWZmZWN0cyA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHRoaXMuY2xlYW51cHMgPSBbXTtcbiAgICB0aGlzLnBhcmVudCA9IGFjdGl2ZUVmZmVjdFNjb3BlO1xuICAgIGlmICghZGV0YWNoZWQgJiYgYWN0aXZlRWZmZWN0U2NvcGUpIHtcbiAgICAgIHRoaXMuaW5kZXggPSAoYWN0aXZlRWZmZWN0U2NvcGUuc2NvcGVzIHx8IChhY3RpdmVFZmZlY3RTY29wZS5zY29wZXMgPSBbXSkpLnB1c2goXG4gICAgICAgIHRoaXNcbiAgICAgICkgLSAxO1xuICAgIH1cbiAgfVxuICBnZXQgYWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cbiAgcnVuKGZuKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgY29uc3QgY3VycmVudEVmZmVjdFNjb3BlID0gYWN0aXZlRWZmZWN0U2NvcGU7XG4gICAgICB0cnkge1xuICAgICAgICBhY3RpdmVFZmZlY3RTY29wZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSBjdXJyZW50RWZmZWN0U2NvcGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICB3YXJuKGBjYW5ub3QgcnVuIGFuIGluYWN0aXZlIGVmZmVjdCBzY29wZS5gKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIG5vbi1kZXRhY2hlZCBzY29wZXNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvbigpIHtcbiAgICBhY3RpdmVFZmZlY3RTY29wZSA9IHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIG5vbi1kZXRhY2hlZCBzY29wZXNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvZmYoKSB7XG4gICAgYWN0aXZlRWZmZWN0U2NvcGUgPSB0aGlzLnBhcmVudDtcbiAgfVxuICBzdG9wKGZyb21QYXJlbnQpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICBsZXQgaSwgbDtcbiAgICAgIGZvciAoaSA9IDAsIGwgPSB0aGlzLmVmZmVjdHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZWZmZWN0c1tpXS5zdG9wKCk7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5jbGVhbnVwcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdGhpcy5jbGVhbnVwc1tpXSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2NvcGVzKSB7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSB0aGlzLnNjb3Blcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB0aGlzLnNjb3Blc1tpXS5zdG9wKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuZGV0YWNoZWQgJiYgdGhpcy5wYXJlbnQgJiYgIWZyb21QYXJlbnQpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXMucGFyZW50LnNjb3Blcy5wb3AoKTtcbiAgICAgICAgaWYgKGxhc3QgJiYgbGFzdCAhPT0gdGhpcykge1xuICAgICAgICAgIHRoaXMucGFyZW50LnNjb3Blc1t0aGlzLmluZGV4XSA9IGxhc3Q7XG4gICAgICAgICAgbGFzdC5pbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMucGFyZW50ID0gdm9pZCAwO1xuICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBlZmZlY3RTY29wZShkZXRhY2hlZCkge1xuICByZXR1cm4gbmV3IEVmZmVjdFNjb3BlKGRldGFjaGVkKTtcbn1cbmZ1bmN0aW9uIHJlY29yZEVmZmVjdFNjb3BlKGVmZmVjdCwgc2NvcGUgPSBhY3RpdmVFZmZlY3RTY29wZSkge1xuICBpZiAoc2NvcGUgJiYgc2NvcGUuYWN0aXZlKSB7XG4gICAgc2NvcGUuZWZmZWN0cy5wdXNoKGVmZmVjdCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEN1cnJlbnRTY29wZSgpIHtcbiAgcmV0dXJuIGFjdGl2ZUVmZmVjdFNjb3BlO1xufVxuZnVuY3Rpb24gb25TY29wZURpc3Bvc2UoZm4pIHtcbiAgaWYgKGFjdGl2ZUVmZmVjdFNjb3BlKSB7XG4gICAgYWN0aXZlRWZmZWN0U2NvcGUuY2xlYW51cHMucHVzaChmbik7XG4gIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIHdhcm4oXG4gICAgICBgb25TY29wZURpc3Bvc2UoKSBpcyBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgZWZmZWN0IHNjb3BlIHRvIGJlIGFzc29jaWF0ZWQgd2l0aC5gXG4gICAgKTtcbiAgfVxufVxuXG5sZXQgYWN0aXZlRWZmZWN0O1xuY2xhc3MgUmVhY3RpdmVFZmZlY3Qge1xuICBjb25zdHJ1Y3RvcihmbiwgdHJpZ2dlciwgc2NoZWR1bGVyLCBzY29wZSkge1xuICAgIHRoaXMuZm4gPSBmbjtcbiAgICB0aGlzLnRyaWdnZXIgPSB0cmlnZ2VyO1xuICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLmRlcHMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB0aGlzLl9kaXJ0eUxldmVsID0gNDtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB0aGlzLl90cmFja0lkID0gMDtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB0aGlzLl9ydW5uaW5ncyA9IDA7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgdGhpcy5fc2hvdWxkU2NoZWR1bGUgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB0aGlzLl9kZXBzTGVuZ3RoID0gMDtcbiAgICByZWNvcmRFZmZlY3RTY29wZSh0aGlzLCBzY29wZSk7XG4gIH1cbiAgZ2V0IGRpcnR5KCkge1xuICAgIGlmICh0aGlzLl9kaXJ0eUxldmVsID09PSAyIHx8IHRoaXMuX2RpcnR5TGV2ZWwgPT09IDMpIHtcbiAgICAgIHRoaXMuX2RpcnR5TGV2ZWwgPSAxO1xuICAgICAgcGF1c2VUcmFja2luZygpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9kZXBzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZGVwID0gdGhpcy5kZXBzW2ldO1xuICAgICAgICBpZiAoZGVwLmNvbXB1dGVkKSB7XG4gICAgICAgICAgdHJpZ2dlckNvbXB1dGVkKGRlcC5jb21wdXRlZCk7XG4gICAgICAgICAgaWYgKHRoaXMuX2RpcnR5TGV2ZWwgPj0gNCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fZGlydHlMZXZlbCA9PT0gMSkge1xuICAgICAgICB0aGlzLl9kaXJ0eUxldmVsID0gMDtcbiAgICAgIH1cbiAgICAgIHJlc2V0VHJhY2tpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RpcnR5TGV2ZWwgPj0gNDtcbiAgfVxuICBzZXQgZGlydHkodikge1xuICAgIHRoaXMuX2RpcnR5TGV2ZWwgPSB2ID8gNCA6IDA7XG4gIH1cbiAgcnVuKCkge1xuICAgIHRoaXMuX2RpcnR5TGV2ZWwgPSAwO1xuICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgIHJldHVybiB0aGlzLmZuKCk7XG4gICAgfVxuICAgIGxldCBsYXN0U2hvdWxkVHJhY2sgPSBzaG91bGRUcmFjaztcbiAgICBsZXQgbGFzdEVmZmVjdCA9IGFjdGl2ZUVmZmVjdDtcbiAgICB0cnkge1xuICAgICAgc2hvdWxkVHJhY2sgPSB0cnVlO1xuICAgICAgYWN0aXZlRWZmZWN0ID0gdGhpcztcbiAgICAgIHRoaXMuX3J1bm5pbmdzKys7XG4gICAgICBwcmVDbGVhbnVwRWZmZWN0KHRoaXMpO1xuICAgICAgcmV0dXJuIHRoaXMuZm4oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcG9zdENsZWFudXBFZmZlY3QodGhpcyk7XG4gICAgICB0aGlzLl9ydW5uaW5ncy0tO1xuICAgICAgYWN0aXZlRWZmZWN0ID0gbGFzdEVmZmVjdDtcbiAgICAgIHNob3VsZFRyYWNrID0gbGFzdFNob3VsZFRyYWNrO1xuICAgIH1cbiAgfVxuICBzdG9wKCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgIHByZUNsZWFudXBFZmZlY3QodGhpcyk7XG4gICAgICBwb3N0Q2xlYW51cEVmZmVjdCh0aGlzKTtcbiAgICAgIChfYSA9IHRoaXMub25TdG9wKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKTtcbiAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB0cmlnZ2VyQ29tcHV0ZWQoY29tcHV0ZWQpIHtcbiAgcmV0dXJuIGNvbXB1dGVkLnZhbHVlO1xufVxuZnVuY3Rpb24gcHJlQ2xlYW51cEVmZmVjdChlZmZlY3QyKSB7XG4gIGVmZmVjdDIuX3RyYWNrSWQrKztcbiAgZWZmZWN0Mi5fZGVwc0xlbmd0aCA9IDA7XG59XG5mdW5jdGlvbiBwb3N0Q2xlYW51cEVmZmVjdChlZmZlY3QyKSB7XG4gIGlmIChlZmZlY3QyLmRlcHMubGVuZ3RoID4gZWZmZWN0Mi5fZGVwc0xlbmd0aCkge1xuICAgIGZvciAobGV0IGkgPSBlZmZlY3QyLl9kZXBzTGVuZ3RoOyBpIDwgZWZmZWN0Mi5kZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjbGVhbnVwRGVwRWZmZWN0KGVmZmVjdDIuZGVwc1tpXSwgZWZmZWN0Mik7XG4gICAgfVxuICAgIGVmZmVjdDIuZGVwcy5sZW5ndGggPSBlZmZlY3QyLl9kZXBzTGVuZ3RoO1xuICB9XG59XG5mdW5jdGlvbiBjbGVhbnVwRGVwRWZmZWN0KGRlcCwgZWZmZWN0Mikge1xuICBjb25zdCB0cmFja0lkID0gZGVwLmdldChlZmZlY3QyKTtcbiAgaWYgKHRyYWNrSWQgIT09IHZvaWQgMCAmJiBlZmZlY3QyLl90cmFja0lkICE9PSB0cmFja0lkKSB7XG4gICAgZGVwLmRlbGV0ZShlZmZlY3QyKTtcbiAgICBpZiAoZGVwLnNpemUgPT09IDApIHtcbiAgICAgIGRlcC5jbGVhbnVwKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBlZmZlY3QoZm4sIG9wdGlvbnMpIHtcbiAgaWYgKGZuLmVmZmVjdCBpbnN0YW5jZW9mIFJlYWN0aXZlRWZmZWN0KSB7XG4gICAgZm4gPSBmbi5lZmZlY3QuZm47XG4gIH1cbiAgY29uc3QgX2VmZmVjdCA9IG5ldyBSZWFjdGl2ZUVmZmVjdChmbiwgTk9PUCwgKCkgPT4ge1xuICAgIGlmIChfZWZmZWN0LmRpcnR5KSB7XG4gICAgICBfZWZmZWN0LnJ1bigpO1xuICAgIH1cbiAgfSk7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgZXh0ZW5kKF9lZmZlY3QsIG9wdGlvbnMpO1xuICAgIGlmIChvcHRpb25zLnNjb3BlKVxuICAgICAgcmVjb3JkRWZmZWN0U2NvcGUoX2VmZmVjdCwgb3B0aW9ucy5zY29wZSk7XG4gIH1cbiAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmxhenkpIHtcbiAgICBfZWZmZWN0LnJ1bigpO1xuICB9XG4gIGNvbnN0IHJ1bm5lciA9IF9lZmZlY3QucnVuLmJpbmQoX2VmZmVjdCk7XG4gIHJ1bm5lci5lZmZlY3QgPSBfZWZmZWN0O1xuICByZXR1cm4gcnVubmVyO1xufVxuZnVuY3Rpb24gc3RvcChydW5uZXIpIHtcbiAgcnVubmVyLmVmZmVjdC5zdG9wKCk7XG59XG5sZXQgc2hvdWxkVHJhY2sgPSB0cnVlO1xubGV0IHBhdXNlU2NoZWR1bGVTdGFjayA9IDA7XG5jb25zdCB0cmFja1N0YWNrID0gW107XG5mdW5jdGlvbiBwYXVzZVRyYWNraW5nKCkge1xuICB0cmFja1N0YWNrLnB1c2goc2hvdWxkVHJhY2spO1xuICBzaG91bGRUcmFjayA9IGZhbHNlO1xufVxuZnVuY3Rpb24gZW5hYmxlVHJhY2tpbmcoKSB7XG4gIHRyYWNrU3RhY2sucHVzaChzaG91bGRUcmFjayk7XG4gIHNob3VsZFRyYWNrID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlc2V0VHJhY2tpbmcoKSB7XG4gIGNvbnN0IGxhc3QgPSB0cmFja1N0YWNrLnBvcCgpO1xuICBzaG91bGRUcmFjayA9IGxhc3QgPT09IHZvaWQgMCA/IHRydWUgOiBsYXN0O1xufVxuZnVuY3Rpb24gcGF1c2VTY2hlZHVsaW5nKCkge1xuICBwYXVzZVNjaGVkdWxlU3RhY2srKztcbn1cbmZ1bmN0aW9uIHJlc2V0U2NoZWR1bGluZygpIHtcbiAgcGF1c2VTY2hlZHVsZVN0YWNrLS07XG4gIHdoaWxlICghcGF1c2VTY2hlZHVsZVN0YWNrICYmIHF1ZXVlRWZmZWN0U2NoZWR1bGVycy5sZW5ndGgpIHtcbiAgICBxdWV1ZUVmZmVjdFNjaGVkdWxlcnMuc2hpZnQoKSgpO1xuICB9XG59XG5mdW5jdGlvbiB0cmFja0VmZmVjdChlZmZlY3QyLCBkZXAsIGRlYnVnZ2VyRXZlbnRFeHRyYUluZm8pIHtcbiAgdmFyIF9hO1xuICBpZiAoZGVwLmdldChlZmZlY3QyKSAhPT0gZWZmZWN0Mi5fdHJhY2tJZCkge1xuICAgIGRlcC5zZXQoZWZmZWN0MiwgZWZmZWN0Mi5fdHJhY2tJZCk7XG4gICAgY29uc3Qgb2xkRGVwID0gZWZmZWN0Mi5kZXBzW2VmZmVjdDIuX2RlcHNMZW5ndGhdO1xuICAgIGlmIChvbGREZXAgIT09IGRlcCkge1xuICAgICAgaWYgKG9sZERlcCkge1xuICAgICAgICBjbGVhbnVwRGVwRWZmZWN0KG9sZERlcCwgZWZmZWN0Mik7XG4gICAgICB9XG4gICAgICBlZmZlY3QyLmRlcHNbZWZmZWN0Mi5fZGVwc0xlbmd0aCsrXSA9IGRlcDtcbiAgICB9IGVsc2Uge1xuICAgICAgZWZmZWN0Mi5fZGVwc0xlbmd0aCsrO1xuICAgIH1cbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgKF9hID0gZWZmZWN0Mi5vblRyYWNrKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2FsbChlZmZlY3QyLCBleHRlbmQoeyBlZmZlY3Q6IGVmZmVjdDIgfSwgZGVidWdnZXJFdmVudEV4dHJhSW5mbykpO1xuICAgIH1cbiAgfVxufVxuY29uc3QgcXVldWVFZmZlY3RTY2hlZHVsZXJzID0gW107XG5mdW5jdGlvbiB0cmlnZ2VyRWZmZWN0cyhkZXAsIGRpcnR5TGV2ZWwsIGRlYnVnZ2VyRXZlbnRFeHRyYUluZm8pIHtcbiAgdmFyIF9hO1xuICBwYXVzZVNjaGVkdWxpbmcoKTtcbiAgZm9yIChjb25zdCBlZmZlY3QyIG9mIGRlcC5rZXlzKCkpIHtcbiAgICBsZXQgdHJhY2tpbmc7XG4gICAgaWYgKGVmZmVjdDIuX2RpcnR5TGV2ZWwgPCBkaXJ0eUxldmVsICYmICh0cmFja2luZyAhPSBudWxsID8gdHJhY2tpbmcgOiB0cmFja2luZyA9IGRlcC5nZXQoZWZmZWN0MikgPT09IGVmZmVjdDIuX3RyYWNrSWQpKSB7XG4gICAgICBlZmZlY3QyLl9zaG91bGRTY2hlZHVsZSB8fCAoZWZmZWN0Mi5fc2hvdWxkU2NoZWR1bGUgPSBlZmZlY3QyLl9kaXJ0eUxldmVsID09PSAwKTtcbiAgICAgIGVmZmVjdDIuX2RpcnR5TGV2ZWwgPSBkaXJ0eUxldmVsO1xuICAgIH1cbiAgICBpZiAoZWZmZWN0Mi5fc2hvdWxkU2NoZWR1bGUgJiYgKHRyYWNraW5nICE9IG51bGwgPyB0cmFja2luZyA6IHRyYWNraW5nID0gZGVwLmdldChlZmZlY3QyKSA9PT0gZWZmZWN0Mi5fdHJhY2tJZCkpIHtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgIChfYSA9IGVmZmVjdDIub25UcmlnZ2VyKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2FsbChlZmZlY3QyLCBleHRlbmQoeyBlZmZlY3Q6IGVmZmVjdDIgfSwgZGVidWdnZXJFdmVudEV4dHJhSW5mbykpO1xuICAgICAgfVxuICAgICAgZWZmZWN0Mi50cmlnZ2VyKCk7XG4gICAgICBpZiAoKCFlZmZlY3QyLl9ydW5uaW5ncyB8fCBlZmZlY3QyLmFsbG93UmVjdXJzZSkgJiYgZWZmZWN0Mi5fZGlydHlMZXZlbCAhPT0gMikge1xuICAgICAgICBlZmZlY3QyLl9zaG91bGRTY2hlZHVsZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZWZmZWN0Mi5zY2hlZHVsZXIpIHtcbiAgICAgICAgICBxdWV1ZUVmZmVjdFNjaGVkdWxlcnMucHVzaChlZmZlY3QyLnNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmVzZXRTY2hlZHVsaW5nKCk7XG59XG5cbmNvbnN0IGNyZWF0ZURlcCA9IChjbGVhbnVwLCBjb21wdXRlZCkgPT4ge1xuICBjb25zdCBkZXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICBkZXAuY2xlYW51cCA9IGNsZWFudXA7XG4gIGRlcC5jb21wdXRlZCA9IGNvbXB1dGVkO1xuICByZXR1cm4gZGVwO1xufTtcblxuY29uc3QgdGFyZ2V0TWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG5jb25zdCBJVEVSQVRFX0tFWSA9IFN5bWJvbCghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gXCJpdGVyYXRlXCIgOiBcIlwiKTtcbmNvbnN0IE1BUF9LRVlfSVRFUkFURV9LRVkgPSBTeW1ib2woISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IFwiTWFwIGtleSBpdGVyYXRlXCIgOiBcIlwiKTtcbmZ1bmN0aW9uIHRyYWNrKHRhcmdldCwgdHlwZSwga2V5KSB7XG4gIGlmIChzaG91bGRUcmFjayAmJiBhY3RpdmVFZmZlY3QpIHtcbiAgICBsZXQgZGVwc01hcCA9IHRhcmdldE1hcC5nZXQodGFyZ2V0KTtcbiAgICBpZiAoIWRlcHNNYXApIHtcbiAgICAgIHRhcmdldE1hcC5zZXQodGFyZ2V0LCBkZXBzTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG4gICAgfVxuICAgIGxldCBkZXAgPSBkZXBzTWFwLmdldChrZXkpO1xuICAgIGlmICghZGVwKSB7XG4gICAgICBkZXBzTWFwLnNldChrZXksIGRlcCA9IGNyZWF0ZURlcCgoKSA9PiBkZXBzTWFwLmRlbGV0ZShrZXkpKSk7XG4gICAgfVxuICAgIHRyYWNrRWZmZWN0KFxuICAgICAgYWN0aXZlRWZmZWN0LFxuICAgICAgZGVwLFxuICAgICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IHtcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICB0eXBlLFxuICAgICAgICBrZXlcbiAgICAgIH0gOiB2b2lkIDBcbiAgICApO1xuICB9XG59XG5mdW5jdGlvbiB0cmlnZ2VyKHRhcmdldCwgdHlwZSwga2V5LCBuZXdWYWx1ZSwgb2xkVmFsdWUsIG9sZFRhcmdldCkge1xuICBjb25zdCBkZXBzTWFwID0gdGFyZ2V0TWFwLmdldCh0YXJnZXQpO1xuICBpZiAoIWRlcHNNYXApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGRlcHMgPSBbXTtcbiAgaWYgKHR5cGUgPT09IFwiY2xlYXJcIikge1xuICAgIGRlcHMgPSBbLi4uZGVwc01hcC52YWx1ZXMoKV07XG4gIH0gZWxzZSBpZiAoa2V5ID09PSBcImxlbmd0aFwiICYmIGlzQXJyYXkodGFyZ2V0KSkge1xuICAgIGNvbnN0IG5ld0xlbmd0aCA9IE51bWJlcihuZXdWYWx1ZSk7XG4gICAgZGVwc01hcC5mb3JFYWNoKChkZXAsIGtleTIpID0+IHtcbiAgICAgIGlmIChrZXkyID09PSBcImxlbmd0aFwiIHx8ICFpc1N5bWJvbChrZXkyKSAmJiBrZXkyID49IG5ld0xlbmd0aCkge1xuICAgICAgICBkZXBzLnB1c2goZGVwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoa2V5ICE9PSB2b2lkIDApIHtcbiAgICAgIGRlcHMucHVzaChkZXBzTWFwLmdldChrZXkpKTtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiYWRkXCI6XG4gICAgICAgIGlmICghaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgICAgZGVwcy5wdXNoKGRlcHNNYXAuZ2V0KElURVJBVEVfS0VZKSk7XG4gICAgICAgICAgaWYgKGlzTWFwKHRhcmdldCkpIHtcbiAgICAgICAgICAgIGRlcHMucHVzaChkZXBzTWFwLmdldChNQVBfS0VZX0lURVJBVEVfS0VZKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzSW50ZWdlcktleShrZXkpKSB7XG4gICAgICAgICAgZGVwcy5wdXNoKGRlcHNNYXAuZ2V0KFwibGVuZ3RoXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkZWxldGVcIjpcbiAgICAgICAgaWYgKCFpc0FycmF5KHRhcmdldCkpIHtcbiAgICAgICAgICBkZXBzLnB1c2goZGVwc01hcC5nZXQoSVRFUkFURV9LRVkpKTtcbiAgICAgICAgICBpZiAoaXNNYXAodGFyZ2V0KSkge1xuICAgICAgICAgICAgZGVwcy5wdXNoKGRlcHNNYXAuZ2V0KE1BUF9LRVlfSVRFUkFURV9LRVkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwic2V0XCI6XG4gICAgICAgIGlmIChpc01hcCh0YXJnZXQpKSB7XG4gICAgICAgICAgZGVwcy5wdXNoKGRlcHNNYXAuZ2V0KElURVJBVEVfS0VZKSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHBhdXNlU2NoZWR1bGluZygpO1xuICBmb3IgKGNvbnN0IGRlcCBvZiBkZXBzKSB7XG4gICAgaWYgKGRlcCkge1xuICAgICAgdHJpZ2dlckVmZmVjdHMoXG4gICAgICAgIGRlcCxcbiAgICAgICAgNCxcbiAgICAgICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IHtcbiAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgICAgb2xkVmFsdWUsXG4gICAgICAgICAgb2xkVGFyZ2V0XG4gICAgICAgIH0gOiB2b2lkIDBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJlc2V0U2NoZWR1bGluZygpO1xufVxuZnVuY3Rpb24gZ2V0RGVwRnJvbVJlYWN0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciBfYTtcbiAgcmV0dXJuIChfYSA9IHRhcmdldE1hcC5nZXQob2JqZWN0KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmdldChrZXkpO1xufVxuXG5jb25zdCBpc05vblRyYWNrYWJsZUtleXMgPSAvKiBAX19QVVJFX18gKi8gbWFrZU1hcChgX19wcm90b19fLF9fdl9pc1JlZixfX2lzVnVlYCk7XG5jb25zdCBidWlsdEluU3ltYm9scyA9IG5ldyBTZXQoXG4gIC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhTeW1ib2wpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09IFwiYXJndW1lbnRzXCIgJiYga2V5ICE9PSBcImNhbGxlclwiKS5tYXAoKGtleSkgPT4gU3ltYm9sW2tleV0pLmZpbHRlcihpc1N5bWJvbClcbik7XG5jb25zdCBhcnJheUluc3RydW1lbnRhdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gY3JlYXRlQXJyYXlJbnN0cnVtZW50YXRpb25zKCk7XG5mdW5jdGlvbiBjcmVhdGVBcnJheUluc3RydW1lbnRhdGlvbnMoKSB7XG4gIGNvbnN0IGluc3RydW1lbnRhdGlvbnMgPSB7fTtcbiAgW1wiaW5jbHVkZXNcIiwgXCJpbmRleE9mXCIsIFwibGFzdEluZGV4T2ZcIl0uZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaW5zdHJ1bWVudGF0aW9uc1trZXldID0gZnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgY29uc3QgYXJyID0gdG9SYXcodGhpcyk7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHRyYWNrKGFyciwgXCJnZXRcIiwgaSArIFwiXCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzID0gYXJyW2tleV0oLi4uYXJncyk7XG4gICAgICBpZiAocmVzID09PSAtMSB8fCByZXMgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBhcnJba2V5XSguLi5hcmdzLm1hcCh0b1JhdykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcbiAgW1wicHVzaFwiLCBcInBvcFwiLCBcInNoaWZ0XCIsIFwidW5zaGlmdFwiLCBcInNwbGljZVwiXS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpbnN0cnVtZW50YXRpb25zW2tleV0gPSBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgICBwYXVzZVRyYWNraW5nKCk7XG4gICAgICBwYXVzZVNjaGVkdWxpbmcoKTtcbiAgICAgIGNvbnN0IHJlcyA9IHRvUmF3KHRoaXMpW2tleV0uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICByZXNldFNjaGVkdWxpbmcoKTtcbiAgICAgIHJlc2V0VHJhY2tpbmcoKTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBpbnN0cnVtZW50YXRpb25zO1xufVxuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkoa2V5KSB7XG4gIGNvbnN0IG9iaiA9IHRvUmF3KHRoaXMpO1xuICB0cmFjayhvYmosIFwiaGFzXCIsIGtleSk7XG4gIHJldHVybiBvYmouaGFzT3duUHJvcGVydHkoa2V5KTtcbn1cbmNsYXNzIEJhc2VSZWFjdGl2ZUhhbmRsZXIge1xuICBjb25zdHJ1Y3RvcihfaXNSZWFkb25seSA9IGZhbHNlLCBfaXNTaGFsbG93ID0gZmFsc2UpIHtcbiAgICB0aGlzLl9pc1JlYWRvbmx5ID0gX2lzUmVhZG9ubHk7XG4gICAgdGhpcy5faXNTaGFsbG93ID0gX2lzU2hhbGxvdztcbiAgfVxuICBnZXQodGFyZ2V0LCBrZXksIHJlY2VpdmVyKSB7XG4gICAgY29uc3QgaXNSZWFkb25seTIgPSB0aGlzLl9pc1JlYWRvbmx5LCBpc1NoYWxsb3cyID0gdGhpcy5faXNTaGFsbG93O1xuICAgIGlmIChrZXkgPT09IFwiX192X2lzUmVhY3RpdmVcIikge1xuICAgICAgcmV0dXJuICFpc1JlYWRvbmx5MjtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJfX3ZfaXNSZWFkb25seVwiKSB7XG4gICAgICByZXR1cm4gaXNSZWFkb25seTI7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09IFwiX192X2lzU2hhbGxvd1wiKSB7XG4gICAgICByZXR1cm4gaXNTaGFsbG93MjtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJfX3ZfcmF3XCIpIHtcbiAgICAgIGlmIChyZWNlaXZlciA9PT0gKGlzUmVhZG9ubHkyID8gaXNTaGFsbG93MiA/IHNoYWxsb3dSZWFkb25seU1hcCA6IHJlYWRvbmx5TWFwIDogaXNTaGFsbG93MiA/IHNoYWxsb3dSZWFjdGl2ZU1hcCA6IHJlYWN0aXZlTWFwKS5nZXQodGFyZ2V0KSB8fCAvLyByZWNlaXZlciBpcyBub3QgdGhlIHJlYWN0aXZlIHByb3h5LCBidXQgaGFzIHRoZSBzYW1lIHByb3RvdHlwZVxuICAgICAgLy8gdGhpcyBtZWFucyB0aGUgcmVjaWV2ZXIgaXMgYSB1c2VyIHByb3h5IG9mIHRoZSByZWFjdGl2ZSBwcm94eVxuICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCkgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZihyZWNlaXZlcikpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0SXNBcnJheSA9IGlzQXJyYXkodGFyZ2V0KTtcbiAgICBpZiAoIWlzUmVhZG9ubHkyKSB7XG4gICAgICBpZiAodGFyZ2V0SXNBcnJheSAmJiBoYXNPd24oYXJyYXlJbnN0cnVtZW50YXRpb25zLCBrZXkpKSB7XG4gICAgICAgIHJldHVybiBSZWZsZWN0LmdldChhcnJheUluc3RydW1lbnRhdGlvbnMsIGtleSwgcmVjZWl2ZXIpO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gXCJoYXNPd25Qcm9wZXJ0eVwiKSB7XG4gICAgICAgIHJldHVybiBoYXNPd25Qcm9wZXJ0eTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVzID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBrZXksIHJlY2VpdmVyKTtcbiAgICBpZiAoaXNTeW1ib2woa2V5KSA/IGJ1aWx0SW5TeW1ib2xzLmhhcyhrZXkpIDogaXNOb25UcmFja2FibGVLZXlzKGtleSkpIHtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGlmICghaXNSZWFkb25seTIpIHtcbiAgICAgIHRyYWNrKHRhcmdldCwgXCJnZXRcIiwga2V5KTtcbiAgICB9XG4gICAgaWYgKGlzU2hhbGxvdzIpIHtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGlmIChpc1JlZihyZXMpKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0SXNBcnJheSAmJiBpc0ludGVnZXJLZXkoa2V5KSA/IHJlcyA6IHJlcy52YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KHJlcykpIHtcbiAgICAgIHJldHVybiBpc1JlYWRvbmx5MiA/IHJlYWRvbmx5KHJlcykgOiByZWFjdGl2ZShyZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG5jbGFzcyBNdXRhYmxlUmVhY3RpdmVIYW5kbGVyIGV4dGVuZHMgQmFzZVJlYWN0aXZlSGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKGlzU2hhbGxvdzIgPSBmYWxzZSkge1xuICAgIHN1cGVyKGZhbHNlLCBpc1NoYWxsb3cyKTtcbiAgfVxuICBzZXQodGFyZ2V0LCBrZXksIHZhbHVlLCByZWNlaXZlcikge1xuICAgIGxldCBvbGRWYWx1ZSA9IHRhcmdldFtrZXldO1xuICAgIGlmICghdGhpcy5faXNTaGFsbG93KSB7XG4gICAgICBjb25zdCBpc09sZFZhbHVlUmVhZG9ubHkgPSBpc1JlYWRvbmx5KG9sZFZhbHVlKTtcbiAgICAgIGlmICghaXNTaGFsbG93KHZhbHVlKSAmJiAhaXNSZWFkb25seSh2YWx1ZSkpIHtcbiAgICAgICAgb2xkVmFsdWUgPSB0b1JhdyhvbGRWYWx1ZSk7XG4gICAgICAgIHZhbHVlID0gdG9SYXcodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0FycmF5KHRhcmdldCkgJiYgaXNSZWYob2xkVmFsdWUpICYmICFpc1JlZih2YWx1ZSkpIHtcbiAgICAgICAgaWYgKGlzT2xkVmFsdWVSZWFkb25seSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbGRWYWx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGhhZEtleSA9IGlzQXJyYXkodGFyZ2V0KSAmJiBpc0ludGVnZXJLZXkoa2V5KSA/IE51bWJlcihrZXkpIDwgdGFyZ2V0Lmxlbmd0aCA6IGhhc093bih0YXJnZXQsIGtleSk7XG4gICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIHZhbHVlLCByZWNlaXZlcik7XG4gICAgaWYgKHRhcmdldCA9PT0gdG9SYXcocmVjZWl2ZXIpKSB7XG4gICAgICBpZiAoIWhhZEtleSkge1xuICAgICAgICB0cmlnZ2VyKHRhcmdldCwgXCJhZGRcIiwga2V5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGhhc0NoYW5nZWQodmFsdWUsIG9sZFZhbHVlKSkge1xuICAgICAgICB0cmlnZ2VyKHRhcmdldCwgXCJzZXRcIiwga2V5LCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwga2V5KSB7XG4gICAgY29uc3QgaGFkS2V5ID0gaGFzT3duKHRhcmdldCwga2V5KTtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRhcmdldFtrZXldO1xuICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBrZXkpO1xuICAgIGlmIChyZXN1bHQgJiYgaGFkS2V5KSB7XG4gICAgICB0cmlnZ2VyKHRhcmdldCwgXCJkZWxldGVcIiwga2V5LCB2b2lkIDAsIG9sZFZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBoYXModGFyZ2V0LCBrZXkpIHtcbiAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0Lmhhcyh0YXJnZXQsIGtleSk7XG4gICAgaWYgKCFpc1N5bWJvbChrZXkpIHx8ICFidWlsdEluU3ltYm9scy5oYXMoa2V5KSkge1xuICAgICAgdHJhY2sodGFyZ2V0LCBcImhhc1wiLCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIG93bktleXModGFyZ2V0KSB7XG4gICAgdHJhY2soXG4gICAgICB0YXJnZXQsXG4gICAgICBcIml0ZXJhdGVcIixcbiAgICAgIGlzQXJyYXkodGFyZ2V0KSA/IFwibGVuZ3RoXCIgOiBJVEVSQVRFX0tFWVxuICAgICk7XG4gICAgcmV0dXJuIFJlZmxlY3Qub3duS2V5cyh0YXJnZXQpO1xuICB9XG59XG5jbGFzcyBSZWFkb25seVJlYWN0aXZlSGFuZGxlciBleHRlbmRzIEJhc2VSZWFjdGl2ZUhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihpc1NoYWxsb3cyID0gZmFsc2UpIHtcbiAgICBzdXBlcih0cnVlLCBpc1NoYWxsb3cyKTtcbiAgfVxuICBzZXQodGFyZ2V0LCBrZXkpIHtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgd2FybihcbiAgICAgICAgYFNldCBvcGVyYXRpb24gb24ga2V5IFwiJHtTdHJpbmcoa2V5KX1cIiBmYWlsZWQ6IHRhcmdldCBpcyByZWFkb25seS5gLFxuICAgICAgICB0YXJnZXRcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwga2V5KSB7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIGBEZWxldGUgb3BlcmF0aW9uIG9uIGtleSBcIiR7U3RyaW5nKGtleSl9XCIgZmFpbGVkOiB0YXJnZXQgaXMgcmVhZG9ubHkuYCxcbiAgICAgICAgdGFyZ2V0XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuY29uc3QgbXV0YWJsZUhhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNdXRhYmxlUmVhY3RpdmVIYW5kbGVyKCk7XG5jb25zdCByZWFkb25seUhhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBSZWFkb25seVJlYWN0aXZlSGFuZGxlcigpO1xuY29uc3Qgc2hhbGxvd1JlYWN0aXZlSGFuZGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE11dGFibGVSZWFjdGl2ZUhhbmRsZXIoXG4gIHRydWVcbik7XG5jb25zdCBzaGFsbG93UmVhZG9ubHlIYW5kbGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgUmVhZG9ubHlSZWFjdGl2ZUhhbmRsZXIodHJ1ZSk7XG5cbmNvbnN0IHRvU2hhbGxvdyA9ICh2YWx1ZSkgPT4gdmFsdWU7XG5jb25zdCBnZXRQcm90byA9ICh2KSA9PiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHYpO1xuZnVuY3Rpb24gZ2V0KHRhcmdldCwga2V5LCBpc1JlYWRvbmx5ID0gZmFsc2UsIGlzU2hhbGxvdyA9IGZhbHNlKSB7XG4gIHRhcmdldCA9IHRhcmdldFtcIl9fdl9yYXdcIl07XG4gIGNvbnN0IHJhd1RhcmdldCA9IHRvUmF3KHRhcmdldCk7XG4gIGNvbnN0IHJhd0tleSA9IHRvUmF3KGtleSk7XG4gIGlmICghaXNSZWFkb25seSkge1xuICAgIGlmIChoYXNDaGFuZ2VkKGtleSwgcmF3S2V5KSkge1xuICAgICAgdHJhY2socmF3VGFyZ2V0LCBcImdldFwiLCBrZXkpO1xuICAgIH1cbiAgICB0cmFjayhyYXdUYXJnZXQsIFwiZ2V0XCIsIHJhd0tleSk7XG4gIH1cbiAgY29uc3QgeyBoYXM6IGhhczIgfSA9IGdldFByb3RvKHJhd1RhcmdldCk7XG4gIGNvbnN0IHdyYXAgPSBpc1NoYWxsb3cgPyB0b1NoYWxsb3cgOiBpc1JlYWRvbmx5ID8gdG9SZWFkb25seSA6IHRvUmVhY3RpdmU7XG4gIGlmIChoYXMyLmNhbGwocmF3VGFyZ2V0LCBrZXkpKSB7XG4gICAgcmV0dXJuIHdyYXAodGFyZ2V0LmdldChrZXkpKTtcbiAgfSBlbHNlIGlmIChoYXMyLmNhbGwocmF3VGFyZ2V0LCByYXdLZXkpKSB7XG4gICAgcmV0dXJuIHdyYXAodGFyZ2V0LmdldChyYXdLZXkpKTtcbiAgfSBlbHNlIGlmICh0YXJnZXQgIT09IHJhd1RhcmdldCkge1xuICAgIHRhcmdldC5nZXQoa2V5KTtcbiAgfVxufVxuZnVuY3Rpb24gaGFzKGtleSwgaXNSZWFkb25seSA9IGZhbHNlKSB7XG4gIGNvbnN0IHRhcmdldCA9IHRoaXNbXCJfX3ZfcmF3XCJdO1xuICBjb25zdCByYXdUYXJnZXQgPSB0b1Jhdyh0YXJnZXQpO1xuICBjb25zdCByYXdLZXkgPSB0b1JhdyhrZXkpO1xuICBpZiAoIWlzUmVhZG9ubHkpIHtcbiAgICBpZiAoaGFzQ2hhbmdlZChrZXksIHJhd0tleSkpIHtcbiAgICAgIHRyYWNrKHJhd1RhcmdldCwgXCJoYXNcIiwga2V5KTtcbiAgICB9XG4gICAgdHJhY2socmF3VGFyZ2V0LCBcImhhc1wiLCByYXdLZXkpO1xuICB9XG4gIHJldHVybiBrZXkgPT09IHJhd0tleSA/IHRhcmdldC5oYXMoa2V5KSA6IHRhcmdldC5oYXMoa2V5KSB8fCB0YXJnZXQuaGFzKHJhd0tleSk7XG59XG5mdW5jdGlvbiBzaXplKHRhcmdldCwgaXNSZWFkb25seSA9IGZhbHNlKSB7XG4gIHRhcmdldCA9IHRhcmdldFtcIl9fdl9yYXdcIl07XG4gICFpc1JlYWRvbmx5ICYmIHRyYWNrKHRvUmF3KHRhcmdldCksIFwiaXRlcmF0ZVwiLCBJVEVSQVRFX0tFWSk7XG4gIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIFwic2l6ZVwiLCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gIHZhbHVlID0gdG9SYXcodmFsdWUpO1xuICBjb25zdCB0YXJnZXQgPSB0b1Jhdyh0aGlzKTtcbiAgY29uc3QgcHJvdG8gPSBnZXRQcm90byh0YXJnZXQpO1xuICBjb25zdCBoYWRLZXkgPSBwcm90by5oYXMuY2FsbCh0YXJnZXQsIHZhbHVlKTtcbiAgaWYgKCFoYWRLZXkpIHtcbiAgICB0YXJnZXQuYWRkKHZhbHVlKTtcbiAgICB0cmlnZ2VyKHRhcmdldCwgXCJhZGRcIiwgdmFsdWUsIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbmZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gIHZhbHVlID0gdG9SYXcodmFsdWUpO1xuICBjb25zdCB0YXJnZXQgPSB0b1Jhdyh0aGlzKTtcbiAgY29uc3QgeyBoYXM6IGhhczIsIGdldDogZ2V0MiB9ID0gZ2V0UHJvdG8odGFyZ2V0KTtcbiAgbGV0IGhhZEtleSA9IGhhczIuY2FsbCh0YXJnZXQsIGtleSk7XG4gIGlmICghaGFkS2V5KSB7XG4gICAga2V5ID0gdG9SYXcoa2V5KTtcbiAgICBoYWRLZXkgPSBoYXMyLmNhbGwodGFyZ2V0LCBrZXkpO1xuICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBjaGVja0lkZW50aXR5S2V5cyh0YXJnZXQsIGhhczIsIGtleSk7XG4gIH1cbiAgY29uc3Qgb2xkVmFsdWUgPSBnZXQyLmNhbGwodGFyZ2V0LCBrZXkpO1xuICB0YXJnZXQuc2V0KGtleSwgdmFsdWUpO1xuICBpZiAoIWhhZEtleSkge1xuICAgIHRyaWdnZXIodGFyZ2V0LCBcImFkZFwiLCBrZXksIHZhbHVlKTtcbiAgfSBlbHNlIGlmIChoYXNDaGFuZ2VkKHZhbHVlLCBvbGRWYWx1ZSkpIHtcbiAgICB0cmlnZ2VyKHRhcmdldCwgXCJzZXRcIiwga2V5LCB2YWx1ZSwgb2xkVmFsdWUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuZnVuY3Rpb24gZGVsZXRlRW50cnkoa2V5KSB7XG4gIGNvbnN0IHRhcmdldCA9IHRvUmF3KHRoaXMpO1xuICBjb25zdCB7IGhhczogaGFzMiwgZ2V0OiBnZXQyIH0gPSBnZXRQcm90byh0YXJnZXQpO1xuICBsZXQgaGFkS2V5ID0gaGFzMi5jYWxsKHRhcmdldCwga2V5KTtcbiAgaWYgKCFoYWRLZXkpIHtcbiAgICBrZXkgPSB0b1JhdyhrZXkpO1xuICAgIGhhZEtleSA9IGhhczIuY2FsbCh0YXJnZXQsIGtleSk7XG4gIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIGNoZWNrSWRlbnRpdHlLZXlzKHRhcmdldCwgaGFzMiwga2V5KTtcbiAgfVxuICBjb25zdCBvbGRWYWx1ZSA9IGdldDIgPyBnZXQyLmNhbGwodGFyZ2V0LCBrZXkpIDogdm9pZCAwO1xuICBjb25zdCByZXN1bHQgPSB0YXJnZXQuZGVsZXRlKGtleSk7XG4gIGlmIChoYWRLZXkpIHtcbiAgICB0cmlnZ2VyKHRhcmdldCwgXCJkZWxldGVcIiwga2V5LCB2b2lkIDAsIG9sZFZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY2xlYXIoKSB7XG4gIGNvbnN0IHRhcmdldCA9IHRvUmF3KHRoaXMpO1xuICBjb25zdCBoYWRJdGVtcyA9IHRhcmdldC5zaXplICE9PSAwO1xuICBjb25zdCBvbGRUYXJnZXQgPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gaXNNYXAodGFyZ2V0KSA/IG5ldyBNYXAodGFyZ2V0KSA6IG5ldyBTZXQodGFyZ2V0KSA6IHZvaWQgMDtcbiAgY29uc3QgcmVzdWx0ID0gdGFyZ2V0LmNsZWFyKCk7XG4gIGlmIChoYWRJdGVtcykge1xuICAgIHRyaWdnZXIodGFyZ2V0LCBcImNsZWFyXCIsIHZvaWQgMCwgdm9pZCAwLCBvbGRUYXJnZXQpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjcmVhdGVGb3JFYWNoKGlzUmVhZG9ubHksIGlzU2hhbGxvdykge1xuICByZXR1cm4gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZykge1xuICAgIGNvbnN0IG9ic2VydmVkID0gdGhpcztcbiAgICBjb25zdCB0YXJnZXQgPSBvYnNlcnZlZFtcIl9fdl9yYXdcIl07XG4gICAgY29uc3QgcmF3VGFyZ2V0ID0gdG9SYXcodGFyZ2V0KTtcbiAgICBjb25zdCB3cmFwID0gaXNTaGFsbG93ID8gdG9TaGFsbG93IDogaXNSZWFkb25seSA/IHRvUmVhZG9ubHkgOiB0b1JlYWN0aXZlO1xuICAgICFpc1JlYWRvbmx5ICYmIHRyYWNrKHJhd1RhcmdldCwgXCJpdGVyYXRlXCIsIElURVJBVEVfS0VZKTtcbiAgICByZXR1cm4gdGFyZ2V0LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHdyYXAodmFsdWUpLCB3cmFwKGtleSksIG9ic2VydmVkKTtcbiAgICB9KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUl0ZXJhYmxlTWV0aG9kKG1ldGhvZCwgaXNSZWFkb25seSwgaXNTaGFsbG93KSB7XG4gIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpc1tcIl9fdl9yYXdcIl07XG4gICAgY29uc3QgcmF3VGFyZ2V0ID0gdG9SYXcodGFyZ2V0KTtcbiAgICBjb25zdCB0YXJnZXRJc01hcCA9IGlzTWFwKHJhd1RhcmdldCk7XG4gICAgY29uc3QgaXNQYWlyID0gbWV0aG9kID09PSBcImVudHJpZXNcIiB8fCBtZXRob2QgPT09IFN5bWJvbC5pdGVyYXRvciAmJiB0YXJnZXRJc01hcDtcbiAgICBjb25zdCBpc0tleU9ubHkgPSBtZXRob2QgPT09IFwia2V5c1wiICYmIHRhcmdldElzTWFwO1xuICAgIGNvbnN0IGlubmVySXRlcmF0b3IgPSB0YXJnZXRbbWV0aG9kXSguLi5hcmdzKTtcbiAgICBjb25zdCB3cmFwID0gaXNTaGFsbG93ID8gdG9TaGFsbG93IDogaXNSZWFkb25seSA/IHRvUmVhZG9ubHkgOiB0b1JlYWN0aXZlO1xuICAgICFpc1JlYWRvbmx5ICYmIHRyYWNrKFxuICAgICAgcmF3VGFyZ2V0LFxuICAgICAgXCJpdGVyYXRlXCIsXG4gICAgICBpc0tleU9ubHkgPyBNQVBfS0VZX0lURVJBVEVfS0VZIDogSVRFUkFURV9LRVlcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICAvLyBpdGVyYXRvciBwcm90b2NvbFxuICAgICAgbmV4dCgpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gaW5uZXJJdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIHJldHVybiBkb25lID8geyB2YWx1ZSwgZG9uZSB9IDoge1xuICAgICAgICAgIHZhbHVlOiBpc1BhaXIgPyBbd3JhcCh2YWx1ZVswXSksIHdyYXAodmFsdWVbMV0pXSA6IHdyYXAodmFsdWUpLFxuICAgICAgICAgIGRvbmVcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICAvLyBpdGVyYWJsZSBwcm90b2NvbFxuICAgICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgIH07XG4gIH07XG59XG5mdW5jdGlvbiBjcmVhdGVSZWFkb25seU1ldGhvZCh0eXBlKSB7XG4gIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgIGNvbnN0IGtleSA9IGFyZ3NbMF0gPyBgb24ga2V5IFwiJHthcmdzWzBdfVwiIGAgOiBgYDtcbiAgICAgIHdhcm4oXG4gICAgICAgIGAke2NhcGl0YWxpemUodHlwZSl9IG9wZXJhdGlvbiAke2tleX1mYWlsZWQ6IHRhcmdldCBpcyByZWFkb25seS5gLFxuICAgICAgICB0b1Jhdyh0aGlzKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGUgPT09IFwiZGVsZXRlXCIgPyBmYWxzZSA6IHR5cGUgPT09IFwiY2xlYXJcIiA/IHZvaWQgMCA6IHRoaXM7XG4gIH07XG59XG5mdW5jdGlvbiBjcmVhdGVJbnN0cnVtZW50YXRpb25zKCkge1xuICBjb25zdCBtdXRhYmxlSW5zdHJ1bWVudGF0aW9uczIgPSB7XG4gICAgZ2V0KGtleSkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICByZXR1cm4gc2l6ZSh0aGlzKTtcbiAgICB9LFxuICAgIGhhcyxcbiAgICBhZGQsXG4gICAgc2V0LFxuICAgIGRlbGV0ZTogZGVsZXRlRW50cnksXG4gICAgY2xlYXIsXG4gICAgZm9yRWFjaDogY3JlYXRlRm9yRWFjaChmYWxzZSwgZmFsc2UpXG4gIH07XG4gIGNvbnN0IHNoYWxsb3dJbnN0cnVtZW50YXRpb25zMiA9IHtcbiAgICBnZXQoa2V5KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIGtleSwgZmFsc2UsIHRydWUpO1xuICAgIH0sXG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICByZXR1cm4gc2l6ZSh0aGlzKTtcbiAgICB9LFxuICAgIGhhcyxcbiAgICBhZGQsXG4gICAgc2V0LFxuICAgIGRlbGV0ZTogZGVsZXRlRW50cnksXG4gICAgY2xlYXIsXG4gICAgZm9yRWFjaDogY3JlYXRlRm9yRWFjaChmYWxzZSwgdHJ1ZSlcbiAgfTtcbiAgY29uc3QgcmVhZG9ubHlJbnN0cnVtZW50YXRpb25zMiA9IHtcbiAgICBnZXQoa2V5KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIGtleSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgIHJldHVybiBzaXplKHRoaXMsIHRydWUpO1xuICAgIH0sXG4gICAgaGFzKGtleSkge1xuICAgICAgcmV0dXJuIGhhcy5jYWxsKHRoaXMsIGtleSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBhZGQ6IGNyZWF0ZVJlYWRvbmx5TWV0aG9kKFwiYWRkXCIpLFxuICAgIHNldDogY3JlYXRlUmVhZG9ubHlNZXRob2QoXCJzZXRcIiksXG4gICAgZGVsZXRlOiBjcmVhdGVSZWFkb25seU1ldGhvZChcImRlbGV0ZVwiKSxcbiAgICBjbGVhcjogY3JlYXRlUmVhZG9ubHlNZXRob2QoXCJjbGVhclwiKSxcbiAgICBmb3JFYWNoOiBjcmVhdGVGb3JFYWNoKHRydWUsIGZhbHNlKVxuICB9O1xuICBjb25zdCBzaGFsbG93UmVhZG9ubHlJbnN0cnVtZW50YXRpb25zMiA9IHtcbiAgICBnZXQoa2V5KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIGtleSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgIHJldHVybiBzaXplKHRoaXMsIHRydWUpO1xuICAgIH0sXG4gICAgaGFzKGtleSkge1xuICAgICAgcmV0dXJuIGhhcy5jYWxsKHRoaXMsIGtleSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBhZGQ6IGNyZWF0ZVJlYWRvbmx5TWV0aG9kKFwiYWRkXCIpLFxuICAgIHNldDogY3JlYXRlUmVhZG9ubHlNZXRob2QoXCJzZXRcIiksXG4gICAgZGVsZXRlOiBjcmVhdGVSZWFkb25seU1ldGhvZChcImRlbGV0ZVwiKSxcbiAgICBjbGVhcjogY3JlYXRlUmVhZG9ubHlNZXRob2QoXCJjbGVhclwiKSxcbiAgICBmb3JFYWNoOiBjcmVhdGVGb3JFYWNoKHRydWUsIHRydWUpXG4gIH07XG4gIGNvbnN0IGl0ZXJhdG9yTWV0aG9kcyA9IFtcImtleXNcIiwgXCJ2YWx1ZXNcIiwgXCJlbnRyaWVzXCIsIFN5bWJvbC5pdGVyYXRvcl07XG4gIGl0ZXJhdG9yTWV0aG9kcy5mb3JFYWNoKChtZXRob2QpID0+IHtcbiAgICBtdXRhYmxlSW5zdHJ1bWVudGF0aW9uczJbbWV0aG9kXSA9IGNyZWF0ZUl0ZXJhYmxlTWV0aG9kKFxuICAgICAgbWV0aG9kLFxuICAgICAgZmFsc2UsXG4gICAgICBmYWxzZVxuICAgICk7XG4gICAgcmVhZG9ubHlJbnN0cnVtZW50YXRpb25zMlttZXRob2RdID0gY3JlYXRlSXRlcmFibGVNZXRob2QoXG4gICAgICBtZXRob2QsXG4gICAgICB0cnVlLFxuICAgICAgZmFsc2VcbiAgICApO1xuICAgIHNoYWxsb3dJbnN0cnVtZW50YXRpb25zMlttZXRob2RdID0gY3JlYXRlSXRlcmFibGVNZXRob2QoXG4gICAgICBtZXRob2QsXG4gICAgICBmYWxzZSxcbiAgICAgIHRydWVcbiAgICApO1xuICAgIHNoYWxsb3dSZWFkb25seUluc3RydW1lbnRhdGlvbnMyW21ldGhvZF0gPSBjcmVhdGVJdGVyYWJsZU1ldGhvZChcbiAgICAgIG1ldGhvZCxcbiAgICAgIHRydWUsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfSk7XG4gIHJldHVybiBbXG4gICAgbXV0YWJsZUluc3RydW1lbnRhdGlvbnMyLFxuICAgIHJlYWRvbmx5SW5zdHJ1bWVudGF0aW9uczIsXG4gICAgc2hhbGxvd0luc3RydW1lbnRhdGlvbnMyLFxuICAgIHNoYWxsb3dSZWFkb25seUluc3RydW1lbnRhdGlvbnMyXG4gIF07XG59XG5jb25zdCBbXG4gIG11dGFibGVJbnN0cnVtZW50YXRpb25zLFxuICByZWFkb25seUluc3RydW1lbnRhdGlvbnMsXG4gIHNoYWxsb3dJbnN0cnVtZW50YXRpb25zLFxuICBzaGFsbG93UmVhZG9ubHlJbnN0cnVtZW50YXRpb25zXG5dID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZUluc3RydW1lbnRhdGlvbnMoKTtcbmZ1bmN0aW9uIGNyZWF0ZUluc3RydW1lbnRhdGlvbkdldHRlcihpc1JlYWRvbmx5LCBzaGFsbG93KSB7XG4gIGNvbnN0IGluc3RydW1lbnRhdGlvbnMgPSBzaGFsbG93ID8gaXNSZWFkb25seSA/IHNoYWxsb3dSZWFkb25seUluc3RydW1lbnRhdGlvbnMgOiBzaGFsbG93SW5zdHJ1bWVudGF0aW9ucyA6IGlzUmVhZG9ubHkgPyByZWFkb25seUluc3RydW1lbnRhdGlvbnMgOiBtdXRhYmxlSW5zdHJ1bWVudGF0aW9ucztcbiAgcmV0dXJuICh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpID0+IHtcbiAgICBpZiAoa2V5ID09PSBcIl9fdl9pc1JlYWN0aXZlXCIpIHtcbiAgICAgIHJldHVybiAhaXNSZWFkb25seTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJfX3ZfaXNSZWFkb25seVwiKSB7XG4gICAgICByZXR1cm4gaXNSZWFkb25seTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJfX3ZfcmF3XCIpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIHJldHVybiBSZWZsZWN0LmdldChcbiAgICAgIGhhc093bihpbnN0cnVtZW50YXRpb25zLCBrZXkpICYmIGtleSBpbiB0YXJnZXQgPyBpbnN0cnVtZW50YXRpb25zIDogdGFyZ2V0LFxuICAgICAga2V5LFxuICAgICAgcmVjZWl2ZXJcbiAgICApO1xuICB9O1xufVxuY29uc3QgbXV0YWJsZUNvbGxlY3Rpb25IYW5kbGVycyA9IHtcbiAgZ2V0OiAvKiBAX19QVVJFX18gKi8gY3JlYXRlSW5zdHJ1bWVudGF0aW9uR2V0dGVyKGZhbHNlLCBmYWxzZSlcbn07XG5jb25zdCBzaGFsbG93Q29sbGVjdGlvbkhhbmRsZXJzID0ge1xuICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVJbnN0cnVtZW50YXRpb25HZXR0ZXIoZmFsc2UsIHRydWUpXG59O1xuY29uc3QgcmVhZG9ubHlDb2xsZWN0aW9uSGFuZGxlcnMgPSB7XG4gIGdldDogLyogQF9fUFVSRV9fICovIGNyZWF0ZUluc3RydW1lbnRhdGlvbkdldHRlcih0cnVlLCBmYWxzZSlcbn07XG5jb25zdCBzaGFsbG93UmVhZG9ubHlDb2xsZWN0aW9uSGFuZGxlcnMgPSB7XG4gIGdldDogLyogQF9fUFVSRV9fICovIGNyZWF0ZUluc3RydW1lbnRhdGlvbkdldHRlcih0cnVlLCB0cnVlKVxufTtcbmZ1bmN0aW9uIGNoZWNrSWRlbnRpdHlLZXlzKHRhcmdldCwgaGFzMiwga2V5KSB7XG4gIGNvbnN0IHJhd0tleSA9IHRvUmF3KGtleSk7XG4gIGlmIChyYXdLZXkgIT09IGtleSAmJiBoYXMyLmNhbGwodGFyZ2V0LCByYXdLZXkpKSB7XG4gICAgY29uc3QgdHlwZSA9IHRvUmF3VHlwZSh0YXJnZXQpO1xuICAgIHdhcm4oXG4gICAgICBgUmVhY3RpdmUgJHt0eXBlfSBjb250YWlucyBib3RoIHRoZSByYXcgYW5kIHJlYWN0aXZlIHZlcnNpb25zIG9mIHRoZSBzYW1lIG9iamVjdCR7dHlwZSA9PT0gYE1hcGAgPyBgIGFzIGtleXNgIDogYGB9LCB3aGljaCBjYW4gbGVhZCB0byBpbmNvbnNpc3RlbmNpZXMuIEF2b2lkIGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHRoZSByYXcgYW5kIHJlYWN0aXZlIHZlcnNpb25zIG9mIGFuIG9iamVjdCBhbmQgb25seSB1c2UgdGhlIHJlYWN0aXZlIHZlcnNpb24gaWYgcG9zc2libGUuYFxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgcmVhY3RpdmVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IHNoYWxsb3dSZWFjdGl2ZU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xuY29uc3QgcmVhZG9ubHlNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IHNoYWxsb3dSZWFkb25seU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xuZnVuY3Rpb24gdGFyZ2V0VHlwZU1hcChyYXdUeXBlKSB7XG4gIHN3aXRjaCAocmF3VHlwZSkge1xuICAgIGNhc2UgXCJPYmplY3RcIjpcbiAgICBjYXNlIFwiQXJyYXlcIjpcbiAgICAgIHJldHVybiAxIC8qIENPTU1PTiAqLztcbiAgICBjYXNlIFwiTWFwXCI6XG4gICAgY2FzZSBcIlNldFwiOlxuICAgIGNhc2UgXCJXZWFrTWFwXCI6XG4gICAgY2FzZSBcIldlYWtTZXRcIjpcbiAgICAgIHJldHVybiAyIC8qIENPTExFQ1RJT04gKi87XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwIC8qIElOVkFMSUQgKi87XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFRhcmdldFR5cGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlW1wiX192X3NraXBcIl0gfHwgIU9iamVjdC5pc0V4dGVuc2libGUodmFsdWUpID8gMCAvKiBJTlZBTElEICovIDogdGFyZ2V0VHlwZU1hcCh0b1Jhd1R5cGUodmFsdWUpKTtcbn1cbmZ1bmN0aW9uIHJlYWN0aXZlKHRhcmdldCkge1xuICBpZiAoaXNSZWFkb25seSh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuICByZXR1cm4gY3JlYXRlUmVhY3RpdmVPYmplY3QoXG4gICAgdGFyZ2V0LFxuICAgIGZhbHNlLFxuICAgIG11dGFibGVIYW5kbGVycyxcbiAgICBtdXRhYmxlQ29sbGVjdGlvbkhhbmRsZXJzLFxuICAgIHJlYWN0aXZlTWFwXG4gICk7XG59XG5mdW5jdGlvbiBzaGFsbG93UmVhY3RpdmUodGFyZ2V0KSB7XG4gIHJldHVybiBjcmVhdGVSZWFjdGl2ZU9iamVjdChcbiAgICB0YXJnZXQsXG4gICAgZmFsc2UsXG4gICAgc2hhbGxvd1JlYWN0aXZlSGFuZGxlcnMsXG4gICAgc2hhbGxvd0NvbGxlY3Rpb25IYW5kbGVycyxcbiAgICBzaGFsbG93UmVhY3RpdmVNYXBcbiAgKTtcbn1cbmZ1bmN0aW9uIHJlYWRvbmx5KHRhcmdldCkge1xuICByZXR1cm4gY3JlYXRlUmVhY3RpdmVPYmplY3QoXG4gICAgdGFyZ2V0LFxuICAgIHRydWUsXG4gICAgcmVhZG9ubHlIYW5kbGVycyxcbiAgICByZWFkb25seUNvbGxlY3Rpb25IYW5kbGVycyxcbiAgICByZWFkb25seU1hcFxuICApO1xufVxuZnVuY3Rpb24gc2hhbGxvd1JlYWRvbmx5KHRhcmdldCkge1xuICByZXR1cm4gY3JlYXRlUmVhY3RpdmVPYmplY3QoXG4gICAgdGFyZ2V0LFxuICAgIHRydWUsXG4gICAgc2hhbGxvd1JlYWRvbmx5SGFuZGxlcnMsXG4gICAgc2hhbGxvd1JlYWRvbmx5Q29sbGVjdGlvbkhhbmRsZXJzLFxuICAgIHNoYWxsb3dSZWFkb25seU1hcFxuICApO1xufVxuZnVuY3Rpb24gY3JlYXRlUmVhY3RpdmVPYmplY3QodGFyZ2V0LCBpc1JlYWRvbmx5MiwgYmFzZUhhbmRsZXJzLCBjb2xsZWN0aW9uSGFuZGxlcnMsIHByb3h5TWFwKSB7XG4gIGlmICghaXNPYmplY3QodGFyZ2V0KSkge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICB3YXJuKGB2YWx1ZSBjYW5ub3QgYmUgbWFkZSByZWFjdGl2ZTogJHtTdHJpbmcodGFyZ2V0KX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuICBpZiAodGFyZ2V0W1wiX192X3Jhd1wiXSAmJiAhKGlzUmVhZG9ubHkyICYmIHRhcmdldFtcIl9fdl9pc1JlYWN0aXZlXCJdKSkge1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cbiAgY29uc3QgZXhpc3RpbmdQcm94eSA9IHByb3h5TWFwLmdldCh0YXJnZXQpO1xuICBpZiAoZXhpc3RpbmdQcm94eSkge1xuICAgIHJldHVybiBleGlzdGluZ1Byb3h5O1xuICB9XG4gIGNvbnN0IHRhcmdldFR5cGUgPSBnZXRUYXJnZXRUeXBlKHRhcmdldCk7XG4gIGlmICh0YXJnZXRUeXBlID09PSAwIC8qIElOVkFMSUQgKi8pIHtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG4gIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KFxuICAgIHRhcmdldCxcbiAgICB0YXJnZXRUeXBlID09PSAyIC8qIENPTExFQ1RJT04gKi8gPyBjb2xsZWN0aW9uSGFuZGxlcnMgOiBiYXNlSGFuZGxlcnNcbiAgKTtcbiAgcHJveHlNYXAuc2V0KHRhcmdldCwgcHJveHkpO1xuICByZXR1cm4gcHJveHk7XG59XG5mdW5jdGlvbiBpc1JlYWN0aXZlKHZhbHVlKSB7XG4gIGlmIChpc1JlYWRvbmx5KHZhbHVlKSkge1xuICAgIHJldHVybiBpc1JlYWN0aXZlKHZhbHVlW1wiX192X3Jhd1wiXSk7XG4gIH1cbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlW1wiX192X2lzUmVhY3RpdmVcIl0pO1xufVxuZnVuY3Rpb24gaXNSZWFkb25seSh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWVbXCJfX3ZfaXNSZWFkb25seVwiXSk7XG59XG5mdW5jdGlvbiBpc1NoYWxsb3codmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlW1wiX192X2lzU2hhbGxvd1wiXSk7XG59XG5mdW5jdGlvbiBpc1Byb3h5KHZhbHVlKSB7XG4gIHJldHVybiBpc1JlYWN0aXZlKHZhbHVlKSB8fCBpc1JlYWRvbmx5KHZhbHVlKTtcbn1cbmZ1bmN0aW9uIHRvUmF3KG9ic2VydmVkKSB7XG4gIGNvbnN0IHJhdyA9IG9ic2VydmVkICYmIG9ic2VydmVkW1wiX192X3Jhd1wiXTtcbiAgcmV0dXJuIHJhdyA/IHRvUmF3KHJhdykgOiBvYnNlcnZlZDtcbn1cbmZ1bmN0aW9uIG1hcmtSYXcodmFsdWUpIHtcbiAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUodmFsdWUpKSB7XG4gICAgZGVmKHZhbHVlLCBcIl9fdl9za2lwXCIsIHRydWUpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmNvbnN0IHRvUmVhY3RpdmUgPSAodmFsdWUpID0+IGlzT2JqZWN0KHZhbHVlKSA/IHJlYWN0aXZlKHZhbHVlKSA6IHZhbHVlO1xuY29uc3QgdG9SZWFkb25seSA9ICh2YWx1ZSkgPT4gaXNPYmplY3QodmFsdWUpID8gcmVhZG9ubHkodmFsdWUpIDogdmFsdWU7XG5cbmNvbnN0IENPTVBVVEVEX1NJREVfRUZGRUNUX1dBUk4gPSBgQ29tcHV0ZWQgaXMgc3RpbGwgZGlydHkgYWZ0ZXIgZ2V0dGVyIGV2YWx1YXRpb24sIGxpa2VseSBiZWNhdXNlIGEgY29tcHV0ZWQgaXMgbXV0YXRpbmcgaXRzIG93biBkZXBlbmRlbmN5IGluIGl0cyBnZXR0ZXIuIFN0YXRlIG11dGF0aW9ucyBpbiBjb21wdXRlZCBnZXR0ZXJzIHNob3VsZCBiZSBhdm9pZGVkLiAgQ2hlY2sgdGhlIGRvY3MgZm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly92dWVqcy5vcmcvZ3VpZGUvZXNzZW50aWFscy9jb21wdXRlZC5odG1sI2dldHRlcnMtc2hvdWxkLWJlLXNpZGUtZWZmZWN0LWZyZWVgO1xuY2xhc3MgQ29tcHV0ZWRSZWZJbXBsIHtcbiAgY29uc3RydWN0b3IoZ2V0dGVyLCBfc2V0dGVyLCBpc1JlYWRvbmx5LCBpc1NTUikge1xuICAgIHRoaXMuZ2V0dGVyID0gZ2V0dGVyO1xuICAgIHRoaXMuX3NldHRlciA9IF9zZXR0ZXI7XG4gICAgdGhpcy5kZXAgPSB2b2lkIDA7XG4gICAgdGhpcy5fX3ZfaXNSZWYgPSB0cnVlO1xuICAgIHRoaXNbXCJfX3ZfaXNSZWFkb25seVwiXSA9IGZhbHNlO1xuICAgIHRoaXMuZWZmZWN0ID0gbmV3IFJlYWN0aXZlRWZmZWN0KFxuICAgICAgKCkgPT4gZ2V0dGVyKHRoaXMuX3ZhbHVlKSxcbiAgICAgICgpID0+IHRyaWdnZXJSZWZWYWx1ZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5lZmZlY3QuX2RpcnR5TGV2ZWwgPT09IDIgPyAyIDogM1xuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5lZmZlY3QuY29tcHV0ZWQgPSB0aGlzO1xuICAgIHRoaXMuZWZmZWN0LmFjdGl2ZSA9IHRoaXMuX2NhY2hlYWJsZSA9ICFpc1NTUjtcbiAgICB0aGlzW1wiX192X2lzUmVhZG9ubHlcIl0gPSBpc1JlYWRvbmx5O1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICBjb25zdCBzZWxmID0gdG9SYXcodGhpcyk7XG4gICAgaWYgKCghc2VsZi5fY2FjaGVhYmxlIHx8IHNlbGYuZWZmZWN0LmRpcnR5KSAmJiBoYXNDaGFuZ2VkKHNlbGYuX3ZhbHVlLCBzZWxmLl92YWx1ZSA9IHNlbGYuZWZmZWN0LnJ1bigpKSkge1xuICAgICAgdHJpZ2dlclJlZlZhbHVlKHNlbGYsIDQpO1xuICAgIH1cbiAgICB0cmFja1JlZlZhbHVlKHNlbGYpO1xuICAgIGlmIChzZWxmLmVmZmVjdC5fZGlydHlMZXZlbCA+PSAyKSB7XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB0aGlzLl93YXJuUmVjdXJzaXZlKSB7XG4gICAgICAgIHdhcm4oQ09NUFVURURfU0lERV9FRkZFQ1RfV0FSTiwgYFxuXG5nZXR0ZXI6IGAsIHRoaXMuZ2V0dGVyKTtcbiAgICAgIH1cbiAgICAgIHRyaWdnZXJSZWZWYWx1ZShzZWxmLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGYuX3ZhbHVlO1xuICB9XG4gIHNldCB2YWx1ZShuZXdWYWx1ZSkge1xuICAgIHRoaXMuX3NldHRlcihuZXdWYWx1ZSk7XG4gIH1cbiAgLy8gI3JlZ2lvbiBwb2x5ZmlsbCBfZGlydHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgdGhpcmQgcGFydHkgY29kZSBmb3IgVnVlIDw9IDMuMy54XG4gIGdldCBfZGlydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWZmZWN0LmRpcnR5O1xuICB9XG4gIHNldCBfZGlydHkodikge1xuICAgIHRoaXMuZWZmZWN0LmRpcnR5ID0gdjtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG59XG5mdW5jdGlvbiBjb21wdXRlZChnZXR0ZXJPck9wdGlvbnMsIGRlYnVnT3B0aW9ucywgaXNTU1IgPSBmYWxzZSkge1xuICBsZXQgZ2V0dGVyO1xuICBsZXQgc2V0dGVyO1xuICBjb25zdCBvbmx5R2V0dGVyID0gaXNGdW5jdGlvbihnZXR0ZXJPck9wdGlvbnMpO1xuICBpZiAob25seUdldHRlcikge1xuICAgIGdldHRlciA9IGdldHRlck9yT3B0aW9ucztcbiAgICBzZXR0ZXIgPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gKCkgPT4ge1xuICAgICAgd2FybihcIldyaXRlIG9wZXJhdGlvbiBmYWlsZWQ6IGNvbXB1dGVkIHZhbHVlIGlzIHJlYWRvbmx5XCIpO1xuICAgIH0gOiBOT09QO1xuICB9IGVsc2Uge1xuICAgIGdldHRlciA9IGdldHRlck9yT3B0aW9ucy5nZXQ7XG4gICAgc2V0dGVyID0gZ2V0dGVyT3JPcHRpb25zLnNldDtcbiAgfVxuICBjb25zdCBjUmVmID0gbmV3IENvbXB1dGVkUmVmSW1wbChnZXR0ZXIsIHNldHRlciwgb25seUdldHRlciB8fCAhc2V0dGVyLCBpc1NTUik7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGRlYnVnT3B0aW9ucyAmJiAhaXNTU1IpIHtcbiAgICBjUmVmLmVmZmVjdC5vblRyYWNrID0gZGVidWdPcHRpb25zLm9uVHJhY2s7XG4gICAgY1JlZi5lZmZlY3Qub25UcmlnZ2VyID0gZGVidWdPcHRpb25zLm9uVHJpZ2dlcjtcbiAgfVxuICByZXR1cm4gY1JlZjtcbn1cblxuZnVuY3Rpb24gdHJhY2tSZWZWYWx1ZShyZWYyKSB7XG4gIHZhciBfYTtcbiAgaWYgKHNob3VsZFRyYWNrICYmIGFjdGl2ZUVmZmVjdCkge1xuICAgIHJlZjIgPSB0b1JhdyhyZWYyKTtcbiAgICB0cmFja0VmZmVjdChcbiAgICAgIGFjdGl2ZUVmZmVjdCxcbiAgICAgIChfYSA9IHJlZjIuZGVwKSAhPSBudWxsID8gX2EgOiByZWYyLmRlcCA9IGNyZWF0ZURlcChcbiAgICAgICAgKCkgPT4gcmVmMi5kZXAgPSB2b2lkIDAsXG4gICAgICAgIHJlZjIgaW5zdGFuY2VvZiBDb21wdXRlZFJlZkltcGwgPyByZWYyIDogdm9pZCAwXG4gICAgICApLFxuICAgICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IHtcbiAgICAgICAgdGFyZ2V0OiByZWYyLFxuICAgICAgICB0eXBlOiBcImdldFwiLFxuICAgICAgICBrZXk6IFwidmFsdWVcIlxuICAgICAgfSA6IHZvaWQgMFxuICAgICk7XG4gIH1cbn1cbmZ1bmN0aW9uIHRyaWdnZXJSZWZWYWx1ZShyZWYyLCBkaXJ0eUxldmVsID0gNCwgbmV3VmFsKSB7XG4gIHJlZjIgPSB0b1JhdyhyZWYyKTtcbiAgY29uc3QgZGVwID0gcmVmMi5kZXA7XG4gIGlmIChkZXApIHtcbiAgICB0cmlnZ2VyRWZmZWN0cyhcbiAgICAgIGRlcCxcbiAgICAgIGRpcnR5TGV2ZWwsXG4gICAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8ge1xuICAgICAgICB0YXJnZXQ6IHJlZjIsXG4gICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgIGtleTogXCJ2YWx1ZVwiLFxuICAgICAgICBuZXdWYWx1ZTogbmV3VmFsXG4gICAgICB9IDogdm9pZCAwXG4gICAgKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNSZWYocikge1xuICByZXR1cm4gISEociAmJiByLl9fdl9pc1JlZiA9PT0gdHJ1ZSk7XG59XG5mdW5jdGlvbiByZWYodmFsdWUpIHtcbiAgcmV0dXJuIGNyZWF0ZVJlZih2YWx1ZSwgZmFsc2UpO1xufVxuZnVuY3Rpb24gc2hhbGxvd1JlZih2YWx1ZSkge1xuICByZXR1cm4gY3JlYXRlUmVmKHZhbHVlLCB0cnVlKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJlZihyYXdWYWx1ZSwgc2hhbGxvdykge1xuICBpZiAoaXNSZWYocmF3VmFsdWUpKSB7XG4gICAgcmV0dXJuIHJhd1ZhbHVlO1xuICB9XG4gIHJldHVybiBuZXcgUmVmSW1wbChyYXdWYWx1ZSwgc2hhbGxvdyk7XG59XG5jbGFzcyBSZWZJbXBsIHtcbiAgY29uc3RydWN0b3IodmFsdWUsIF9fdl9pc1NoYWxsb3cpIHtcbiAgICB0aGlzLl9fdl9pc1NoYWxsb3cgPSBfX3ZfaXNTaGFsbG93O1xuICAgIHRoaXMuZGVwID0gdm9pZCAwO1xuICAgIHRoaXMuX192X2lzUmVmID0gdHJ1ZTtcbiAgICB0aGlzLl9yYXdWYWx1ZSA9IF9fdl9pc1NoYWxsb3cgPyB2YWx1ZSA6IHRvUmF3KHZhbHVlKTtcbiAgICB0aGlzLl92YWx1ZSA9IF9fdl9pc1NoYWxsb3cgPyB2YWx1ZSA6IHRvUmVhY3RpdmUodmFsdWUpO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICB0cmFja1JlZlZhbHVlKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUobmV3VmFsKSB7XG4gICAgY29uc3QgdXNlRGlyZWN0VmFsdWUgPSB0aGlzLl9fdl9pc1NoYWxsb3cgfHwgaXNTaGFsbG93KG5ld1ZhbCkgfHwgaXNSZWFkb25seShuZXdWYWwpO1xuICAgIG5ld1ZhbCA9IHVzZURpcmVjdFZhbHVlID8gbmV3VmFsIDogdG9SYXcobmV3VmFsKTtcbiAgICBpZiAoaGFzQ2hhbmdlZChuZXdWYWwsIHRoaXMuX3Jhd1ZhbHVlKSkge1xuICAgICAgdGhpcy5fcmF3VmFsdWUgPSBuZXdWYWw7XG4gICAgICB0aGlzLl92YWx1ZSA9IHVzZURpcmVjdFZhbHVlID8gbmV3VmFsIDogdG9SZWFjdGl2ZShuZXdWYWwpO1xuICAgICAgdHJpZ2dlclJlZlZhbHVlKHRoaXMsIDQsIG5ld1ZhbCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB0cmlnZ2VyUmVmKHJlZjIpIHtcbiAgdHJpZ2dlclJlZlZhbHVlKHJlZjIsIDQsICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyByZWYyLnZhbHVlIDogdm9pZCAwKTtcbn1cbmZ1bmN0aW9uIHVucmVmKHJlZjIpIHtcbiAgcmV0dXJuIGlzUmVmKHJlZjIpID8gcmVmMi52YWx1ZSA6IHJlZjI7XG59XG5mdW5jdGlvbiB0b1ZhbHVlKHNvdXJjZSkge1xuICByZXR1cm4gaXNGdW5jdGlvbihzb3VyY2UpID8gc291cmNlKCkgOiB1bnJlZihzb3VyY2UpO1xufVxuY29uc3Qgc2hhbGxvd1Vud3JhcEhhbmRsZXJzID0ge1xuICBnZXQ6ICh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpID0+IHVucmVmKFJlZmxlY3QuZ2V0KHRhcmdldCwga2V5LCByZWNlaXZlcikpLFxuICBzZXQ6ICh0YXJnZXQsIGtleSwgdmFsdWUsIHJlY2VpdmVyKSA9PiB7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0YXJnZXRba2V5XTtcbiAgICBpZiAoaXNSZWYob2xkVmFsdWUpICYmICFpc1JlZih2YWx1ZSkpIHtcbiAgICAgIG9sZFZhbHVlLnZhbHVlID0gdmFsdWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB2YWx1ZSwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgfVxufTtcbmZ1bmN0aW9uIHByb3h5UmVmcyhvYmplY3RXaXRoUmVmcykge1xuICByZXR1cm4gaXNSZWFjdGl2ZShvYmplY3RXaXRoUmVmcykgPyBvYmplY3RXaXRoUmVmcyA6IG5ldyBQcm94eShvYmplY3RXaXRoUmVmcywgc2hhbGxvd1Vud3JhcEhhbmRsZXJzKTtcbn1cbmNsYXNzIEN1c3RvbVJlZkltcGwge1xuICBjb25zdHJ1Y3RvcihmYWN0b3J5KSB7XG4gICAgdGhpcy5kZXAgPSB2b2lkIDA7XG4gICAgdGhpcy5fX3ZfaXNSZWYgPSB0cnVlO1xuICAgIGNvbnN0IHsgZ2V0LCBzZXQgfSA9IGZhY3RvcnkoXG4gICAgICAoKSA9PiB0cmFja1JlZlZhbHVlKHRoaXMpLFxuICAgICAgKCkgPT4gdHJpZ2dlclJlZlZhbHVlKHRoaXMpXG4gICAgKTtcbiAgICB0aGlzLl9nZXQgPSBnZXQ7XG4gICAgdGhpcy5fc2V0ID0gc2V0O1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0KCk7XG4gIH1cbiAgc2V0IHZhbHVlKG5ld1ZhbCkge1xuICAgIHRoaXMuX3NldChuZXdWYWwpO1xuICB9XG59XG5mdW5jdGlvbiBjdXN0b21SZWYoZmFjdG9yeSkge1xuICByZXR1cm4gbmV3IEN1c3RvbVJlZkltcGwoZmFjdG9yeSk7XG59XG5mdW5jdGlvbiB0b1JlZnMob2JqZWN0KSB7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFpc1Byb3h5KG9iamVjdCkpIHtcbiAgICB3YXJuKGB0b1JlZnMoKSBleHBlY3RzIGEgcmVhY3RpdmUgb2JqZWN0IGJ1dCByZWNlaXZlZCBhIHBsYWluIG9uZS5gKTtcbiAgfVxuICBjb25zdCByZXQgPSBpc0FycmF5KG9iamVjdCkgPyBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCkgOiB7fTtcbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XG4gICAgcmV0W2tleV0gPSBwcm9wZXJ0eVRvUmVmKG9iamVjdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuY2xhc3MgT2JqZWN0UmVmSW1wbCB7XG4gIGNvbnN0cnVjdG9yKF9vYmplY3QsIF9rZXksIF9kZWZhdWx0VmFsdWUpIHtcbiAgICB0aGlzLl9vYmplY3QgPSBfb2JqZWN0O1xuICAgIHRoaXMuX2tleSA9IF9rZXk7XG4gICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gX2RlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLl9fdl9pc1JlZiA9IHRydWU7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuX29iamVjdFt0aGlzLl9rZXldO1xuICAgIHJldHVybiB2YWwgPT09IHZvaWQgMCA/IHRoaXMuX2RlZmF1bHRWYWx1ZSA6IHZhbDtcbiAgfVxuICBzZXQgdmFsdWUobmV3VmFsKSB7XG4gICAgdGhpcy5fb2JqZWN0W3RoaXMuX2tleV0gPSBuZXdWYWw7XG4gIH1cbiAgZ2V0IGRlcCgpIHtcbiAgICByZXR1cm4gZ2V0RGVwRnJvbVJlYWN0aXZlKHRvUmF3KHRoaXMuX29iamVjdCksIHRoaXMuX2tleSk7XG4gIH1cbn1cbmNsYXNzIEdldHRlclJlZkltcGwge1xuICBjb25zdHJ1Y3RvcihfZ2V0dGVyKSB7XG4gICAgdGhpcy5fZ2V0dGVyID0gX2dldHRlcjtcbiAgICB0aGlzLl9fdl9pc1JlZiA9IHRydWU7XG4gICAgdGhpcy5fX3ZfaXNSZWFkb25seSA9IHRydWU7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXR0ZXIoKTtcbiAgfVxufVxuZnVuY3Rpb24gdG9SZWYoc291cmNlLCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBpZiAoaXNSZWYoc291cmNlKSkge1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihzb3VyY2UpKSB7XG4gICAgcmV0dXJuIG5ldyBHZXR0ZXJSZWZJbXBsKHNvdXJjZSk7XG4gIH0gZWxzZSBpZiAoaXNPYmplY3Qoc291cmNlKSAmJiBhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiBwcm9wZXJ0eVRvUmVmKHNvdXJjZSwga2V5LCBkZWZhdWx0VmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZWYoc291cmNlKTtcbiAgfVxufVxuZnVuY3Rpb24gcHJvcGVydHlUb1JlZihzb3VyY2UsIGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gIGNvbnN0IHZhbCA9IHNvdXJjZVtrZXldO1xuICByZXR1cm4gaXNSZWYodmFsKSA/IHZhbCA6IG5ldyBPYmplY3RSZWZJbXBsKHNvdXJjZSwga2V5LCBkZWZhdWx0VmFsdWUpO1xufVxuXG5jb25zdCBkZWZlcnJlZENvbXB1dGVkID0gY29tcHV0ZWQ7XG5cbmNvbnN0IFRyYWNrT3BUeXBlcyA9IHtcbiAgXCJHRVRcIjogXCJnZXRcIixcbiAgXCJIQVNcIjogXCJoYXNcIixcbiAgXCJJVEVSQVRFXCI6IFwiaXRlcmF0ZVwiXG59O1xuY29uc3QgVHJpZ2dlck9wVHlwZXMgPSB7XG4gIFwiU0VUXCI6IFwic2V0XCIsXG4gIFwiQUREXCI6IFwiYWRkXCIsXG4gIFwiREVMRVRFXCI6IFwiZGVsZXRlXCIsXG4gIFwiQ0xFQVJcIjogXCJjbGVhclwiXG59O1xuY29uc3QgUmVhY3RpdmVGbGFncyA9IHtcbiAgXCJTS0lQXCI6IFwiX192X3NraXBcIixcbiAgXCJJU19SRUFDVElWRVwiOiBcIl9fdl9pc1JlYWN0aXZlXCIsXG4gIFwiSVNfUkVBRE9OTFlcIjogXCJfX3ZfaXNSZWFkb25seVwiLFxuICBcIklTX1NIQUxMT1dcIjogXCJfX3ZfaXNTaGFsbG93XCIsXG4gIFwiUkFXXCI6IFwiX192X3Jhd1wiXG59O1xuXG5leHBvcnQgeyBFZmZlY3RTY29wZSwgSVRFUkFURV9LRVksIFJlYWN0aXZlRWZmZWN0LCBSZWFjdGl2ZUZsYWdzLCBUcmFja09wVHlwZXMsIFRyaWdnZXJPcFR5cGVzLCBjb21wdXRlZCwgY3VzdG9tUmVmLCBkZWZlcnJlZENvbXB1dGVkLCBlZmZlY3QsIGVmZmVjdFNjb3BlLCBlbmFibGVUcmFja2luZywgZ2V0Q3VycmVudFNjb3BlLCBpc1Byb3h5LCBpc1JlYWN0aXZlLCBpc1JlYWRvbmx5LCBpc1JlZiwgaXNTaGFsbG93LCBtYXJrUmF3LCBvblNjb3BlRGlzcG9zZSwgcGF1c2VTY2hlZHVsaW5nLCBwYXVzZVRyYWNraW5nLCBwcm94eVJlZnMsIHJlYWN0aXZlLCByZWFkb25seSwgcmVmLCByZXNldFNjaGVkdWxpbmcsIHJlc2V0VHJhY2tpbmcsIHNoYWxsb3dSZWFjdGl2ZSwgc2hhbGxvd1JlYWRvbmx5LCBzaGFsbG93UmVmLCBzdG9wLCB0b1JhdywgdG9SZWYsIHRvUmVmcywgdG9WYWx1ZSwgdHJhY2ssIHRyaWdnZXIsIHRyaWdnZXJSZWYsIHVucmVmIH07XG4iLCIvKipcbiogQHZ1ZS9ydW50aW1lLWNvcmUgdjMuNC4yMVxuKiAoYykgMjAxOC1wcmVzZW50IFl1eGkgKEV2YW4pIFlvdSBhbmQgVnVlIGNvbnRyaWJ1dG9yc1xuKiBAbGljZW5zZSBNSVRcbioqL1xuaW1wb3J0IHsgcGF1c2VUcmFja2luZywgcmVzZXRUcmFja2luZywgaXNSZWYsIHRvUmF3LCBpc1NoYWxsb3csIGlzUmVhY3RpdmUsIFJlYWN0aXZlRWZmZWN0LCBnZXRDdXJyZW50U2NvcGUsIHJlZiwgc2hhbGxvd1JlYWRvbmx5LCB0cmFjaywgcmVhY3RpdmUsIHNoYWxsb3dSZWFjdGl2ZSwgdHJpZ2dlciwgaXNQcm94eSwgcHJveHlSZWZzLCBtYXJrUmF3LCBFZmZlY3RTY29wZSwgY29tcHV0ZWQgYXMgY29tcHV0ZWQkMSwgY3VzdG9tUmVmLCBpc1JlYWRvbmx5IH0gZnJvbSAnQHZ1ZS9yZWFjdGl2aXR5JztcbmV4cG9ydCB7IEVmZmVjdFNjb3BlLCBSZWFjdGl2ZUVmZmVjdCwgVHJhY2tPcFR5cGVzLCBUcmlnZ2VyT3BUeXBlcywgY3VzdG9tUmVmLCBlZmZlY3QsIGVmZmVjdFNjb3BlLCBnZXRDdXJyZW50U2NvcGUsIGlzUHJveHksIGlzUmVhY3RpdmUsIGlzUmVhZG9ubHksIGlzUmVmLCBpc1NoYWxsb3csIG1hcmtSYXcsIG9uU2NvcGVEaXNwb3NlLCBwcm94eVJlZnMsIHJlYWN0aXZlLCByZWFkb25seSwgcmVmLCBzaGFsbG93UmVhY3RpdmUsIHNoYWxsb3dSZWFkb25seSwgc2hhbGxvd1JlZiwgc3RvcCwgdG9SYXcsIHRvUmVmLCB0b1JlZnMsIHRvVmFsdWUsIHRyaWdnZXJSZWYsIHVucmVmIH0gZnJvbSAnQHZ1ZS9yZWFjdGl2aXR5JztcbmltcG9ydCB7IGlzU3RyaW5nLCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIGlzQXJyYXksIE5PT1AsIGdldEdsb2JhbFRoaXMsIGV4dGVuZCwgRU1QVFlfT0JKLCB0b0hhbmRsZXJLZXksIGxvb3NlVG9OdW1iZXIsIGh5cGhlbmF0ZSwgY2FtZWxpemUsIGlzT2JqZWN0LCBpc09uLCBoYXNPd24sIGlzTW9kZWxMaXN0ZW5lciwgY2FwaXRhbGl6ZSwgdG9OdW1iZXIsIGhhc0NoYW5nZWQsIHJlbW92ZSwgaXNTZXQsIGlzTWFwLCBpc1BsYWluT2JqZWN0LCBpc0J1aWx0SW5EaXJlY3RpdmUsIGludm9rZUFycmF5Rm5zLCBpc1JlZ0V4cCwgaXNHbG9iYWxseUFsbG93ZWQsIE5PLCBkZWYsIGlzUmVzZXJ2ZWRQcm9wLCBFTVBUWV9BUlIsIHRvUmF3VHlwZSwgbWFrZU1hcCwgbm9ybWFsaXplQ2xhc3MsIHN0cmluZ2lmeVN0eWxlLCBub3JtYWxpemVTdHlsZSwgaXNLbm93blN2Z0F0dHIsIGlzQm9vbGVhbkF0dHIsIGlzS25vd25IdG1sQXR0ciwgaW5jbHVkZUJvb2xlYW5BdHRyLCBpc1JlbmRlcmFibGVBdHRyVmFsdWUgfSBmcm9tICdAdnVlL3NoYXJlZCc7XG5leHBvcnQgeyBjYW1lbGl6ZSwgY2FwaXRhbGl6ZSwgbm9ybWFsaXplQ2xhc3MsIG5vcm1hbGl6ZVByb3BzLCBub3JtYWxpemVTdHlsZSwgdG9EaXNwbGF5U3RyaW5nLCB0b0hhbmRsZXJLZXkgfSBmcm9tICdAdnVlL3NoYXJlZCc7XG5cbmNvbnN0IHN0YWNrID0gW107XG5mdW5jdGlvbiBwdXNoV2FybmluZ0NvbnRleHQodm5vZGUpIHtcbiAgc3RhY2sucHVzaCh2bm9kZSk7XG59XG5mdW5jdGlvbiBwb3BXYXJuaW5nQ29udGV4dCgpIHtcbiAgc3RhY2sucG9wKCk7XG59XG5mdW5jdGlvbiB3YXJuJDEobXNnLCAuLi5hcmdzKSB7XG4gIHBhdXNlVHJhY2tpbmcoKTtcbiAgY29uc3QgaW5zdGFuY2UgPSBzdGFjay5sZW5ndGggPyBzdGFja1tzdGFjay5sZW5ndGggLSAxXS5jb21wb25lbnQgOiBudWxsO1xuICBjb25zdCBhcHBXYXJuSGFuZGxlciA9IGluc3RhbmNlICYmIGluc3RhbmNlLmFwcENvbnRleHQuY29uZmlnLndhcm5IYW5kbGVyO1xuICBjb25zdCB0cmFjZSA9IGdldENvbXBvbmVudFRyYWNlKCk7XG4gIGlmIChhcHBXYXJuSGFuZGxlcikge1xuICAgIGNhbGxXaXRoRXJyb3JIYW5kbGluZyhcbiAgICAgIGFwcFdhcm5IYW5kbGVyLFxuICAgICAgaW5zdGFuY2UsXG4gICAgICAxMSxcbiAgICAgIFtcbiAgICAgICAgbXNnICsgYXJncy5tYXAoKGEpID0+IHtcbiAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSBhLnRvU3RyaW5nKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2FsbChhKSkgIT0gbnVsbCA/IF9iIDogSlNPTi5zdHJpbmdpZnkoYSk7XG4gICAgICAgIH0pLmpvaW4oXCJcIiksXG4gICAgICAgIGluc3RhbmNlICYmIGluc3RhbmNlLnByb3h5LFxuICAgICAgICB0cmFjZS5tYXAoXG4gICAgICAgICAgKHsgdm5vZGUgfSkgPT4gYGF0IDwke2Zvcm1hdENvbXBvbmVudE5hbWUoaW5zdGFuY2UsIHZub2RlLnR5cGUpfT5gXG4gICAgICAgICkuam9pbihcIlxcblwiKSxcbiAgICAgICAgdHJhY2VcbiAgICAgIF1cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHdhcm5BcmdzID0gW2BbVnVlIHdhcm5dOiAke21zZ31gLCAuLi5hcmdzXTtcbiAgICBpZiAodHJhY2UubGVuZ3RoICYmIC8vIGF2b2lkIHNwYW1taW5nIGNvbnNvbGUgZHVyaW5nIHRlc3RzXG4gICAgdHJ1ZSkge1xuICAgICAgd2FybkFyZ3MucHVzaChgXG5gLCAuLi5mb3JtYXRUcmFjZSh0cmFjZSkpO1xuICAgIH1cbiAgICBjb25zb2xlLndhcm4oLi4ud2FybkFyZ3MpO1xuICB9XG4gIHJlc2V0VHJhY2tpbmcoKTtcbn1cbmZ1bmN0aW9uIGdldENvbXBvbmVudFRyYWNlKCkge1xuICBsZXQgY3VycmVudFZOb2RlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gIGlmICghY3VycmVudFZOb2RlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWRTdGFjayA9IFtdO1xuICB3aGlsZSAoY3VycmVudFZOb2RlKSB7XG4gICAgY29uc3QgbGFzdCA9IG5vcm1hbGl6ZWRTdGFja1swXTtcbiAgICBpZiAobGFzdCAmJiBsYXN0LnZub2RlID09PSBjdXJyZW50Vk5vZGUpIHtcbiAgICAgIGxhc3QucmVjdXJzZUNvdW50Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vcm1hbGl6ZWRTdGFjay5wdXNoKHtcbiAgICAgICAgdm5vZGU6IGN1cnJlbnRWTm9kZSxcbiAgICAgICAgcmVjdXJzZUNvdW50OiAwXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50SW5zdGFuY2UgPSBjdXJyZW50Vk5vZGUuY29tcG9uZW50ICYmIGN1cnJlbnRWTm9kZS5jb21wb25lbnQucGFyZW50O1xuICAgIGN1cnJlbnRWTm9kZSA9IHBhcmVudEluc3RhbmNlICYmIHBhcmVudEluc3RhbmNlLnZub2RlO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkU3RhY2s7XG59XG5mdW5jdGlvbiBmb3JtYXRUcmFjZSh0cmFjZSkge1xuICBjb25zdCBsb2dzID0gW107XG4gIHRyYWNlLmZvckVhY2goKGVudHJ5LCBpKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmkgPT09IDAgPyBbXSA6IFtgXG5gXSwgLi4uZm9ybWF0VHJhY2VFbnRyeShlbnRyeSkpO1xuICB9KTtcbiAgcmV0dXJuIGxvZ3M7XG59XG5mdW5jdGlvbiBmb3JtYXRUcmFjZUVudHJ5KHsgdm5vZGUsIHJlY3Vyc2VDb3VudCB9KSB7XG4gIGNvbnN0IHBvc3RmaXggPSByZWN1cnNlQ291bnQgPiAwID8gYC4uLiAoJHtyZWN1cnNlQ291bnR9IHJlY3Vyc2l2ZSBjYWxscylgIDogYGA7XG4gIGNvbnN0IGlzUm9vdCA9IHZub2RlLmNvbXBvbmVudCA/IHZub2RlLmNvbXBvbmVudC5wYXJlbnQgPT0gbnVsbCA6IGZhbHNlO1xuICBjb25zdCBvcGVuID0gYCBhdCA8JHtmb3JtYXRDb21wb25lbnROYW1lKFxuICAgIHZub2RlLmNvbXBvbmVudCxcbiAgICB2bm9kZS50eXBlLFxuICAgIGlzUm9vdFxuICApfWA7XG4gIGNvbnN0IGNsb3NlID0gYD5gICsgcG9zdGZpeDtcbiAgcmV0dXJuIHZub2RlLnByb3BzID8gW29wZW4sIC4uLmZvcm1hdFByb3BzKHZub2RlLnByb3BzKSwgY2xvc2VdIDogW29wZW4gKyBjbG9zZV07XG59XG5mdW5jdGlvbiBmb3JtYXRQcm9wcyhwcm9wcykge1xuICBjb25zdCByZXMgPSBbXTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb3BzKTtcbiAga2V5cy5zbGljZSgwLCAzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICByZXMucHVzaCguLi5mb3JtYXRQcm9wKGtleSwgcHJvcHNba2V5XSkpO1xuICB9KTtcbiAgaWYgKGtleXMubGVuZ3RoID4gMykge1xuICAgIHJlcy5wdXNoKGAgLi4uYCk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGZvcm1hdFByb3Aoa2V5LCB2YWx1ZSwgcmF3KSB7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICByZXR1cm4gcmF3ID8gdmFsdWUgOiBbYCR7a2V5fT0ke3ZhbHVlfWBdO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gcmF3ID8gdmFsdWUgOiBbYCR7a2V5fT0ke3ZhbHVlfWBdO1xuICB9IGVsc2UgaWYgKGlzUmVmKHZhbHVlKSkge1xuICAgIHZhbHVlID0gZm9ybWF0UHJvcChrZXksIHRvUmF3KHZhbHVlLnZhbHVlKSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHJhdyA/IHZhbHVlIDogW2Ake2tleX09UmVmPGAsIHZhbHVlLCBgPmBdO1xuICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgcmV0dXJuIFtgJHtrZXl9PWZuJHt2YWx1ZS5uYW1lID8gYDwke3ZhbHVlLm5hbWV9PmAgOiBgYH1gXTtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IHRvUmF3KHZhbHVlKTtcbiAgICByZXR1cm4gcmF3ID8gdmFsdWUgOiBbYCR7a2V5fT1gLCB2YWx1ZV07XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydE51bWJlcih2YWwsIHR5cGUpIHtcbiAgaWYgKCEhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKVxuICAgIHJldHVybjtcbiAgaWYgKHZhbCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgIT09IFwibnVtYmVyXCIpIHtcbiAgICB3YXJuJDEoYCR7dHlwZX0gaXMgbm90IGEgdmFsaWQgbnVtYmVyIC0gZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsKX0uYCk7XG4gIH0gZWxzZSBpZiAoaXNOYU4odmFsKSkge1xuICAgIHdhcm4kMShgJHt0eXBlfSBpcyBOYU4gLSB0aGUgZHVyYXRpb24gZXhwcmVzc2lvbiBtaWdodCBiZSBpbmNvcnJlY3QuYCk7XG4gIH1cbn1cblxuY29uc3QgRXJyb3JDb2RlcyA9IHtcbiAgXCJTRVRVUF9GVU5DVElPTlwiOiAwLFxuICBcIjBcIjogXCJTRVRVUF9GVU5DVElPTlwiLFxuICBcIlJFTkRFUl9GVU5DVElPTlwiOiAxLFxuICBcIjFcIjogXCJSRU5ERVJfRlVOQ1RJT05cIixcbiAgXCJXQVRDSF9HRVRURVJcIjogMixcbiAgXCIyXCI6IFwiV0FUQ0hfR0VUVEVSXCIsXG4gIFwiV0FUQ0hfQ0FMTEJBQ0tcIjogMyxcbiAgXCIzXCI6IFwiV0FUQ0hfQ0FMTEJBQ0tcIixcbiAgXCJXQVRDSF9DTEVBTlVQXCI6IDQsXG4gIFwiNFwiOiBcIldBVENIX0NMRUFOVVBcIixcbiAgXCJOQVRJVkVfRVZFTlRfSEFORExFUlwiOiA1LFxuICBcIjVcIjogXCJOQVRJVkVfRVZFTlRfSEFORExFUlwiLFxuICBcIkNPTVBPTkVOVF9FVkVOVF9IQU5ETEVSXCI6IDYsXG4gIFwiNlwiOiBcIkNPTVBPTkVOVF9FVkVOVF9IQU5ETEVSXCIsXG4gIFwiVk5PREVfSE9PS1wiOiA3LFxuICBcIjdcIjogXCJWTk9ERV9IT09LXCIsXG4gIFwiRElSRUNUSVZFX0hPT0tcIjogOCxcbiAgXCI4XCI6IFwiRElSRUNUSVZFX0hPT0tcIixcbiAgXCJUUkFOU0lUSU9OX0hPT0tcIjogOSxcbiAgXCI5XCI6IFwiVFJBTlNJVElPTl9IT09LXCIsXG4gIFwiQVBQX0VSUk9SX0hBTkRMRVJcIjogMTAsXG4gIFwiMTBcIjogXCJBUFBfRVJST1JfSEFORExFUlwiLFxuICBcIkFQUF9XQVJOX0hBTkRMRVJcIjogMTEsXG4gIFwiMTFcIjogXCJBUFBfV0FSTl9IQU5ETEVSXCIsXG4gIFwiRlVOQ1RJT05fUkVGXCI6IDEyLFxuICBcIjEyXCI6IFwiRlVOQ1RJT05fUkVGXCIsXG4gIFwiQVNZTkNfQ09NUE9ORU5UX0xPQURFUlwiOiAxMyxcbiAgXCIxM1wiOiBcIkFTWU5DX0NPTVBPTkVOVF9MT0FERVJcIixcbiAgXCJTQ0hFRFVMRVJcIjogMTQsXG4gIFwiMTRcIjogXCJTQ0hFRFVMRVJcIlxufTtcbmNvbnN0IEVycm9yVHlwZVN0cmluZ3MkMSA9IHtcbiAgW1wic3BcIl06IFwic2VydmVyUHJlZmV0Y2ggaG9va1wiLFxuICBbXCJiY1wiXTogXCJiZWZvcmVDcmVhdGUgaG9va1wiLFxuICBbXCJjXCJdOiBcImNyZWF0ZWQgaG9va1wiLFxuICBbXCJibVwiXTogXCJiZWZvcmVNb3VudCBob29rXCIsXG4gIFtcIm1cIl06IFwibW91bnRlZCBob29rXCIsXG4gIFtcImJ1XCJdOiBcImJlZm9yZVVwZGF0ZSBob29rXCIsXG4gIFtcInVcIl06IFwidXBkYXRlZFwiLFxuICBbXCJidW1cIl06IFwiYmVmb3JlVW5tb3VudCBob29rXCIsXG4gIFtcInVtXCJdOiBcInVubW91bnRlZCBob29rXCIsXG4gIFtcImFcIl06IFwiYWN0aXZhdGVkIGhvb2tcIixcbiAgW1wiZGFcIl06IFwiZGVhY3RpdmF0ZWQgaG9va1wiLFxuICBbXCJlY1wiXTogXCJlcnJvckNhcHR1cmVkIGhvb2tcIixcbiAgW1wicnRjXCJdOiBcInJlbmRlclRyYWNrZWQgaG9va1wiLFxuICBbXCJydGdcIl06IFwicmVuZGVyVHJpZ2dlcmVkIGhvb2tcIixcbiAgWzBdOiBcInNldHVwIGZ1bmN0aW9uXCIsXG4gIFsxXTogXCJyZW5kZXIgZnVuY3Rpb25cIixcbiAgWzJdOiBcIndhdGNoZXIgZ2V0dGVyXCIsXG4gIFszXTogXCJ3YXRjaGVyIGNhbGxiYWNrXCIsXG4gIFs0XTogXCJ3YXRjaGVyIGNsZWFudXAgZnVuY3Rpb25cIixcbiAgWzVdOiBcIm5hdGl2ZSBldmVudCBoYW5kbGVyXCIsXG4gIFs2XTogXCJjb21wb25lbnQgZXZlbnQgaGFuZGxlclwiLFxuICBbN106IFwidm5vZGUgaG9va1wiLFxuICBbOF06IFwiZGlyZWN0aXZlIGhvb2tcIixcbiAgWzldOiBcInRyYW5zaXRpb24gaG9va1wiLFxuICBbMTBdOiBcImFwcCBlcnJvckhhbmRsZXJcIixcbiAgWzExXTogXCJhcHAgd2FybkhhbmRsZXJcIixcbiAgWzEyXTogXCJyZWYgZnVuY3Rpb25cIixcbiAgWzEzXTogXCJhc3luYyBjb21wb25lbnQgbG9hZGVyXCIsXG4gIFsxNF06IFwic2NoZWR1bGVyIGZsdXNoLiBUaGlzIGlzIGxpa2VseSBhIFZ1ZSBpbnRlcm5hbHMgYnVnLiBQbGVhc2Ugb3BlbiBhbiBpc3N1ZSBhdCBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvY29yZSAuXCJcbn07XG5mdW5jdGlvbiBjYWxsV2l0aEVycm9ySGFuZGxpbmcoZm4sIGluc3RhbmNlLCB0eXBlLCBhcmdzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGFyZ3MgPyBmbiguLi5hcmdzKSA6IGZuKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGhhbmRsZUVycm9yKGVyciwgaW5zdGFuY2UsIHR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZyhmbiwgaW5zdGFuY2UsIHR5cGUsIGFyZ3MpIHtcbiAgaWYgKGlzRnVuY3Rpb24oZm4pKSB7XG4gICAgY29uc3QgcmVzID0gY2FsbFdpdGhFcnJvckhhbmRsaW5nKGZuLCBpbnN0YW5jZSwgdHlwZSwgYXJncyk7XG4gICAgaWYgKHJlcyAmJiBpc1Byb21pc2UocmVzKSkge1xuICAgICAgcmVzLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyLCBpbnN0YW5jZSwgdHlwZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbi5sZW5ndGg7IGkrKykge1xuICAgIHZhbHVlcy5wdXNoKGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKGZuW2ldLCBpbnN0YW5jZSwgdHlwZSwgYXJncykpO1xuICB9XG4gIHJldHVybiB2YWx1ZXM7XG59XG5mdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIsIGluc3RhbmNlLCB0eXBlLCB0aHJvd0luRGV2ID0gdHJ1ZSkge1xuICBjb25zdCBjb250ZXh0Vk5vZGUgPSBpbnN0YW5jZSA/IGluc3RhbmNlLnZub2RlIDogbnVsbDtcbiAgaWYgKGluc3RhbmNlKSB7XG4gICAgbGV0IGN1ciA9IGluc3RhbmNlLnBhcmVudDtcbiAgICBjb25zdCBleHBvc2VkSW5zdGFuY2UgPSBpbnN0YW5jZS5wcm94eTtcbiAgICBjb25zdCBlcnJvckluZm8gPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gRXJyb3JUeXBlU3RyaW5ncyQxW3R5cGVdIDogYGh0dHBzOi8vdnVlanMub3JnL2Vycm9yLXJlZmVyZW5jZS8jcnVudGltZS0ke3R5cGV9YDtcbiAgICB3aGlsZSAoY3VyKSB7XG4gICAgICBjb25zdCBlcnJvckNhcHR1cmVkSG9va3MgPSBjdXIuZWM7XG4gICAgICBpZiAoZXJyb3JDYXB0dXJlZEhvb2tzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXJyb3JDYXB0dXJlZEhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGVycm9yQ2FwdHVyZWRIb29rc1tpXShlcnIsIGV4cG9zZWRJbnN0YW5jZSwgZXJyb3JJbmZvKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGN1ciA9IGN1ci5wYXJlbnQ7XG4gICAgfVxuICAgIGNvbnN0IGFwcEVycm9ySGFuZGxlciA9IGluc3RhbmNlLmFwcENvbnRleHQuY29uZmlnLmVycm9ySGFuZGxlcjtcbiAgICBpZiAoYXBwRXJyb3JIYW5kbGVyKSB7XG4gICAgICBjYWxsV2l0aEVycm9ySGFuZGxpbmcoXG4gICAgICAgIGFwcEVycm9ySGFuZGxlcixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMTAsXG4gICAgICAgIFtlcnIsIGV4cG9zZWRJbnN0YW5jZSwgZXJyb3JJbmZvXVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgbG9nRXJyb3IoZXJyLCB0eXBlLCBjb250ZXh0Vk5vZGUsIHRocm93SW5EZXYpO1xufVxuZnVuY3Rpb24gbG9nRXJyb3IoZXJyLCB0eXBlLCBjb250ZXh0Vk5vZGUsIHRocm93SW5EZXYgPSB0cnVlKSB7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgY29uc3QgaW5mbyA9IEVycm9yVHlwZVN0cmluZ3MkMVt0eXBlXTtcbiAgICBpZiAoY29udGV4dFZOb2RlKSB7XG4gICAgICBwdXNoV2FybmluZ0NvbnRleHQoY29udGV4dFZOb2RlKTtcbiAgICB9XG4gICAgd2FybiQxKGBVbmhhbmRsZWQgZXJyb3Ike2luZm8gPyBgIGR1cmluZyBleGVjdXRpb24gb2YgJHtpbmZvfWAgOiBgYH1gKTtcbiAgICBpZiAoY29udGV4dFZOb2RlKSB7XG4gICAgICBwb3BXYXJuaW5nQ29udGV4dCgpO1xuICAgIH1cbiAgICBpZiAodGhyb3dJbkRldikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgfVxufVxuXG5sZXQgaXNGbHVzaGluZyA9IGZhbHNlO1xubGV0IGlzRmx1c2hQZW5kaW5nID0gZmFsc2U7XG5jb25zdCBxdWV1ZSA9IFtdO1xubGV0IGZsdXNoSW5kZXggPSAwO1xuY29uc3QgcGVuZGluZ1Bvc3RGbHVzaENicyA9IFtdO1xubGV0IGFjdGl2ZVBvc3RGbHVzaENicyA9IG51bGw7XG5sZXQgcG9zdEZsdXNoSW5kZXggPSAwO1xuY29uc3QgcmVzb2x2ZWRQcm9taXNlID0gLyogQF9fUFVSRV9fICovIFByb21pc2UucmVzb2x2ZSgpO1xubGV0IGN1cnJlbnRGbHVzaFByb21pc2UgPSBudWxsO1xuY29uc3QgUkVDVVJTSU9OX0xJTUlUID0gMTAwO1xuZnVuY3Rpb24gbmV4dFRpY2soZm4pIHtcbiAgY29uc3QgcCA9IGN1cnJlbnRGbHVzaFByb21pc2UgfHwgcmVzb2x2ZWRQcm9taXNlO1xuICByZXR1cm4gZm4gPyBwLnRoZW4odGhpcyA/IGZuLmJpbmQodGhpcykgOiBmbikgOiBwO1xufVxuZnVuY3Rpb24gZmluZEluc2VydGlvbkluZGV4KGlkKSB7XG4gIGxldCBzdGFydCA9IGZsdXNoSW5kZXggKyAxO1xuICBsZXQgZW5kID0gcXVldWUubGVuZ3RoO1xuICB3aGlsZSAoc3RhcnQgPCBlbmQpIHtcbiAgICBjb25zdCBtaWRkbGUgPSBzdGFydCArIGVuZCA+Pj4gMTtcbiAgICBjb25zdCBtaWRkbGVKb2IgPSBxdWV1ZVttaWRkbGVdO1xuICAgIGNvbnN0IG1pZGRsZUpvYklkID0gZ2V0SWQobWlkZGxlSm9iKTtcbiAgICBpZiAobWlkZGxlSm9iSWQgPCBpZCB8fCBtaWRkbGVKb2JJZCA9PT0gaWQgJiYgbWlkZGxlSm9iLnByZSkge1xuICAgICAgc3RhcnQgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmQgPSBtaWRkbGU7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdGFydDtcbn1cbmZ1bmN0aW9uIHF1ZXVlSm9iKGpvYikge1xuICBpZiAoIXF1ZXVlLmxlbmd0aCB8fCAhcXVldWUuaW5jbHVkZXMoXG4gICAgam9iLFxuICAgIGlzRmx1c2hpbmcgJiYgam9iLmFsbG93UmVjdXJzZSA/IGZsdXNoSW5kZXggKyAxIDogZmx1c2hJbmRleFxuICApKSB7XG4gICAgaWYgKGpvYi5pZCA9PSBudWxsKSB7XG4gICAgICBxdWV1ZS5wdXNoKGpvYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXVlLnNwbGljZShmaW5kSW5zZXJ0aW9uSW5kZXgoam9iLmlkKSwgMCwgam9iKTtcbiAgICB9XG4gICAgcXVldWVGbHVzaCgpO1xuICB9XG59XG5mdW5jdGlvbiBxdWV1ZUZsdXNoKCkge1xuICBpZiAoIWlzRmx1c2hpbmcgJiYgIWlzRmx1c2hQZW5kaW5nKSB7XG4gICAgaXNGbHVzaFBlbmRpbmcgPSB0cnVlO1xuICAgIGN1cnJlbnRGbHVzaFByb21pc2UgPSByZXNvbHZlZFByb21pc2UudGhlbihmbHVzaEpvYnMpO1xuICB9XG59XG5mdW5jdGlvbiBpbnZhbGlkYXRlSm9iKGpvYikge1xuICBjb25zdCBpID0gcXVldWUuaW5kZXhPZihqb2IpO1xuICBpZiAoaSA+IGZsdXNoSW5kZXgpIHtcbiAgICBxdWV1ZS5zcGxpY2UoaSwgMSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHF1ZXVlUG9zdEZsdXNoQ2IoY2IpIHtcbiAgaWYgKCFpc0FycmF5KGNiKSkge1xuICAgIGlmICghYWN0aXZlUG9zdEZsdXNoQ2JzIHx8ICFhY3RpdmVQb3N0Rmx1c2hDYnMuaW5jbHVkZXMoXG4gICAgICBjYixcbiAgICAgIGNiLmFsbG93UmVjdXJzZSA/IHBvc3RGbHVzaEluZGV4ICsgMSA6IHBvc3RGbHVzaEluZGV4XG4gICAgKSkge1xuICAgICAgcGVuZGluZ1Bvc3RGbHVzaENicy5wdXNoKGNiKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcGVuZGluZ1Bvc3RGbHVzaENicy5wdXNoKC4uLmNiKTtcbiAgfVxuICBxdWV1ZUZsdXNoKCk7XG59XG5mdW5jdGlvbiBmbHVzaFByZUZsdXNoQ2JzKGluc3RhbmNlLCBzZWVuLCBpID0gaXNGbHVzaGluZyA/IGZsdXNoSW5kZXggKyAxIDogMCkge1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIHNlZW4gPSBzZWVuIHx8IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgZm9yICg7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNiID0gcXVldWVbaV07XG4gICAgaWYgKGNiICYmIGNiLnByZSkge1xuICAgICAgaWYgKGluc3RhbmNlICYmIGNiLmlkICE9PSBpbnN0YW5jZS51aWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBjaGVja1JlY3Vyc2l2ZVVwZGF0ZXMoc2VlbiwgY2IpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcXVldWUuc3BsaWNlKGksIDEpO1xuICAgICAgaS0tO1xuICAgICAgY2IoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGZsdXNoUG9zdEZsdXNoQ2JzKHNlZW4pIHtcbiAgaWYgKHBlbmRpbmdQb3N0Rmx1c2hDYnMubGVuZ3RoKSB7XG4gICAgY29uc3QgZGVkdXBlZCA9IFsuLi5uZXcgU2V0KHBlbmRpbmdQb3N0Rmx1c2hDYnMpXS5zb3J0KFxuICAgICAgKGEsIGIpID0+IGdldElkKGEpIC0gZ2V0SWQoYilcbiAgICApO1xuICAgIHBlbmRpbmdQb3N0Rmx1c2hDYnMubGVuZ3RoID0gMDtcbiAgICBpZiAoYWN0aXZlUG9zdEZsdXNoQ2JzKSB7XG4gICAgICBhY3RpdmVQb3N0Rmx1c2hDYnMucHVzaCguLi5kZWR1cGVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYWN0aXZlUG9zdEZsdXNoQ2JzID0gZGVkdXBlZDtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgc2VlbiA9IHNlZW4gfHwgLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICB9XG4gICAgZm9yIChwb3N0Rmx1c2hJbmRleCA9IDA7IHBvc3RGbHVzaEluZGV4IDwgYWN0aXZlUG9zdEZsdXNoQ2JzLmxlbmd0aDsgcG9zdEZsdXNoSW5kZXgrKykge1xuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgY2hlY2tSZWN1cnNpdmVVcGRhdGVzKHNlZW4sIGFjdGl2ZVBvc3RGbHVzaENic1twb3N0Rmx1c2hJbmRleF0pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYWN0aXZlUG9zdEZsdXNoQ2JzW3Bvc3RGbHVzaEluZGV4XSgpO1xuICAgIH1cbiAgICBhY3RpdmVQb3N0Rmx1c2hDYnMgPSBudWxsO1xuICAgIHBvc3RGbHVzaEluZGV4ID0gMDtcbiAgfVxufVxuY29uc3QgZ2V0SWQgPSAoam9iKSA9PiBqb2IuaWQgPT0gbnVsbCA/IEluZmluaXR5IDogam9iLmlkO1xuY29uc3QgY29tcGFyYXRvciA9IChhLCBiKSA9PiB7XG4gIGNvbnN0IGRpZmYgPSBnZXRJZChhKSAtIGdldElkKGIpO1xuICBpZiAoZGlmZiA9PT0gMCkge1xuICAgIGlmIChhLnByZSAmJiAhYi5wcmUpXG4gICAgICByZXR1cm4gLTE7XG4gICAgaWYgKGIucHJlICYmICFhLnByZSlcbiAgICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiBkaWZmO1xufTtcbmZ1bmN0aW9uIGZsdXNoSm9icyhzZWVuKSB7XG4gIGlzRmx1c2hQZW5kaW5nID0gZmFsc2U7XG4gIGlzRmx1c2hpbmcgPSB0cnVlO1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIHNlZW4gPSBzZWVuIHx8IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgcXVldWUuc29ydChjb21wYXJhdG9yKTtcbiAgY29uc3QgY2hlY2sgPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gKGpvYikgPT4gY2hlY2tSZWN1cnNpdmVVcGRhdGVzKHNlZW4sIGpvYikgOiBOT09QO1xuICB0cnkge1xuICAgIGZvciAoZmx1c2hJbmRleCA9IDA7IGZsdXNoSW5kZXggPCBxdWV1ZS5sZW5ndGg7IGZsdXNoSW5kZXgrKykge1xuICAgICAgY29uc3Qgam9iID0gcXVldWVbZmx1c2hJbmRleF07XG4gICAgICBpZiAoam9iICYmIGpvYi5hY3RpdmUgIT09IGZhbHNlKSB7XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGNoZWNrKGpvYikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsV2l0aEVycm9ySGFuZGxpbmcoam9iLCBudWxsLCAxNCk7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGZsdXNoSW5kZXggPSAwO1xuICAgIHF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgZmx1c2hQb3N0Rmx1c2hDYnMoc2Vlbik7XG4gICAgaXNGbHVzaGluZyA9IGZhbHNlO1xuICAgIGN1cnJlbnRGbHVzaFByb21pc2UgPSBudWxsO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggfHwgcGVuZGluZ1Bvc3RGbHVzaENicy5sZW5ndGgpIHtcbiAgICAgIGZsdXNoSm9icyhzZWVuKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNoZWNrUmVjdXJzaXZlVXBkYXRlcyhzZWVuLCBmbikge1xuICBpZiAoIXNlZW4uaGFzKGZuKSkge1xuICAgIHNlZW4uc2V0KGZuLCAxKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjb3VudCA9IHNlZW4uZ2V0KGZuKTtcbiAgICBpZiAoY291bnQgPiBSRUNVUlNJT05fTElNSVQpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gZm4ub3duZXJJbnN0YW5jZTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBpbnN0YW5jZSAmJiBnZXRDb21wb25lbnROYW1lKGluc3RhbmNlLnR5cGUpO1xuICAgICAgaGFuZGxlRXJyb3IoXG4gICAgICAgIGBNYXhpbXVtIHJlY3Vyc2l2ZSB1cGRhdGVzIGV4Y2VlZGVkJHtjb21wb25lbnROYW1lID8gYCBpbiBjb21wb25lbnQgPCR7Y29tcG9uZW50TmFtZX0+YCA6IGBgfS4gVGhpcyBtZWFucyB5b3UgaGF2ZSBhIHJlYWN0aXZlIGVmZmVjdCB0aGF0IGlzIG11dGF0aW5nIGl0cyBvd24gZGVwZW5kZW5jaWVzIGFuZCB0aHVzIHJlY3Vyc2l2ZWx5IHRyaWdnZXJpbmcgaXRzZWxmLiBQb3NzaWJsZSBzb3VyY2VzIGluY2x1ZGUgY29tcG9uZW50IHRlbXBsYXRlLCByZW5kZXIgZnVuY3Rpb24sIHVwZGF0ZWQgaG9vayBvciB3YXRjaGVyIHNvdXJjZSBmdW5jdGlvbi5gLFxuICAgICAgICBudWxsLFxuICAgICAgICAxMFxuICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWVuLnNldChmbiwgY291bnQgKyAxKTtcbiAgICB9XG4gIH1cbn1cblxubGV0IGlzSG1yVXBkYXRpbmcgPSBmYWxzZTtcbmNvbnN0IGhtckRpcnR5Q29tcG9uZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5pZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICBnZXRHbG9iYWxUaGlzKCkuX19WVUVfSE1SX1JVTlRJTUVfXyA9IHtcbiAgICBjcmVhdGVSZWNvcmQ6IHRyeVdyYXAoY3JlYXRlUmVjb3JkKSxcbiAgICByZXJlbmRlcjogdHJ5V3JhcChyZXJlbmRlciksXG4gICAgcmVsb2FkOiB0cnlXcmFwKHJlbG9hZClcbiAgfTtcbn1cbmNvbnN0IG1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5mdW5jdGlvbiByZWdpc3RlckhNUihpbnN0YW5jZSkge1xuICBjb25zdCBpZCA9IGluc3RhbmNlLnR5cGUuX19obXJJZDtcbiAgbGV0IHJlY29yZCA9IG1hcC5nZXQoaWQpO1xuICBpZiAoIXJlY29yZCkge1xuICAgIGNyZWF0ZVJlY29yZChpZCwgaW5zdGFuY2UudHlwZSk7XG4gICAgcmVjb3JkID0gbWFwLmdldChpZCk7XG4gIH1cbiAgcmVjb3JkLmluc3RhbmNlcy5hZGQoaW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gdW5yZWdpc3RlckhNUihpbnN0YW5jZSkge1xuICBtYXAuZ2V0KGluc3RhbmNlLnR5cGUuX19obXJJZCkuaW5zdGFuY2VzLmRlbGV0ZShpbnN0YW5jZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVSZWNvcmQoaWQsIGluaXRpYWxEZWYpIHtcbiAgaWYgKG1hcC5oYXMoaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIG1hcC5zZXQoaWQsIHtcbiAgICBpbml0aWFsRGVmOiBub3JtYWxpemVDbGFzc0NvbXBvbmVudChpbml0aWFsRGVmKSxcbiAgICBpbnN0YW5jZXM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KClcbiAgfSk7XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplQ2xhc3NDb21wb25lbnQoY29tcG9uZW50KSB7XG4gIHJldHVybiBpc0NsYXNzQ29tcG9uZW50KGNvbXBvbmVudCkgPyBjb21wb25lbnQuX192Y2NPcHRzIDogY29tcG9uZW50O1xufVxuZnVuY3Rpb24gcmVyZW5kZXIoaWQsIG5ld1JlbmRlcikge1xuICBjb25zdCByZWNvcmQgPSBtYXAuZ2V0KGlkKTtcbiAgaWYgKCFyZWNvcmQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmVjb3JkLmluaXRpYWxEZWYucmVuZGVyID0gbmV3UmVuZGVyO1xuICBbLi4ucmVjb3JkLmluc3RhbmNlc10uZm9yRWFjaCgoaW5zdGFuY2UpID0+IHtcbiAgICBpZiAobmV3UmVuZGVyKSB7XG4gICAgICBpbnN0YW5jZS5yZW5kZXIgPSBuZXdSZW5kZXI7XG4gICAgICBub3JtYWxpemVDbGFzc0NvbXBvbmVudChpbnN0YW5jZS50eXBlKS5yZW5kZXIgPSBuZXdSZW5kZXI7XG4gICAgfVxuICAgIGluc3RhbmNlLnJlbmRlckNhY2hlID0gW107XG4gICAgaXNIbXJVcGRhdGluZyA9IHRydWU7XG4gICAgaW5zdGFuY2UuZWZmZWN0LmRpcnR5ID0gdHJ1ZTtcbiAgICBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICBpc0htclVwZGF0aW5nID0gZmFsc2U7XG4gIH0pO1xufVxuZnVuY3Rpb24gcmVsb2FkKGlkLCBuZXdDb21wKSB7XG4gIGNvbnN0IHJlY29yZCA9IG1hcC5nZXQoaWQpO1xuICBpZiAoIXJlY29yZClcbiAgICByZXR1cm47XG4gIG5ld0NvbXAgPSBub3JtYWxpemVDbGFzc0NvbXBvbmVudChuZXdDb21wKTtcbiAgdXBkYXRlQ29tcG9uZW50RGVmKHJlY29yZC5pbml0aWFsRGVmLCBuZXdDb21wKTtcbiAgY29uc3QgaW5zdGFuY2VzID0gWy4uLnJlY29yZC5pbnN0YW5jZXNdO1xuICBmb3IgKGNvbnN0IGluc3RhbmNlIG9mIGluc3RhbmNlcykge1xuICAgIGNvbnN0IG9sZENvbXAgPSBub3JtYWxpemVDbGFzc0NvbXBvbmVudChpbnN0YW5jZS50eXBlKTtcbiAgICBpZiAoIWhtckRpcnR5Q29tcG9uZW50cy5oYXMob2xkQ29tcCkpIHtcbiAgICAgIGlmIChvbGRDb21wICE9PSByZWNvcmQuaW5pdGlhbERlZikge1xuICAgICAgICB1cGRhdGVDb21wb25lbnREZWYob2xkQ29tcCwgbmV3Q29tcCk7XG4gICAgICB9XG4gICAgICBobXJEaXJ0eUNvbXBvbmVudHMuYWRkKG9sZENvbXApO1xuICAgIH1cbiAgICBpbnN0YW5jZS5hcHBDb250ZXh0LnByb3BzQ2FjaGUuZGVsZXRlKGluc3RhbmNlLnR5cGUpO1xuICAgIGluc3RhbmNlLmFwcENvbnRleHQuZW1pdHNDYWNoZS5kZWxldGUoaW5zdGFuY2UudHlwZSk7XG4gICAgaW5zdGFuY2UuYXBwQ29udGV4dC5vcHRpb25zQ2FjaGUuZGVsZXRlKGluc3RhbmNlLnR5cGUpO1xuICAgIGlmIChpbnN0YW5jZS5jZVJlbG9hZCkge1xuICAgICAgaG1yRGlydHlDb21wb25lbnRzLmFkZChvbGRDb21wKTtcbiAgICAgIGluc3RhbmNlLmNlUmVsb2FkKG5ld0NvbXAuc3R5bGVzKTtcbiAgICAgIGhtckRpcnR5Q29tcG9uZW50cy5kZWxldGUob2xkQ29tcCk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5wYXJlbnQpIHtcbiAgICAgIGluc3RhbmNlLnBhcmVudC5lZmZlY3QuZGlydHkgPSB0cnVlO1xuICAgICAgcXVldWVKb2IoaW5zdGFuY2UucGFyZW50LnVwZGF0ZSk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5hcHBDb250ZXh0LnJlbG9hZCkge1xuICAgICAgaW5zdGFuY2UuYXBwQ29udGV4dC5yZWxvYWQoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIltITVJdIFJvb3Qgb3IgbWFudWFsbHkgbW91bnRlZCBpbnN0YW5jZSBtb2RpZmllZC4gRnVsbCByZWxvYWQgcmVxdWlyZWQuXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHF1ZXVlUG9zdEZsdXNoQ2IoKCkgPT4ge1xuICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7XG4gICAgICBobXJEaXJ0eUNvbXBvbmVudHMuZGVsZXRlKFxuICAgICAgICBub3JtYWxpemVDbGFzc0NvbXBvbmVudChpbnN0YW5jZS50eXBlKVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gdXBkYXRlQ29tcG9uZW50RGVmKG9sZENvbXAsIG5ld0NvbXApIHtcbiAgZXh0ZW5kKG9sZENvbXAsIG5ld0NvbXApO1xuICBmb3IgKGNvbnN0IGtleSBpbiBvbGRDb21wKSB7XG4gICAgaWYgKGtleSAhPT0gXCJfX2ZpbGVcIiAmJiAhKGtleSBpbiBuZXdDb21wKSkge1xuICAgICAgZGVsZXRlIG9sZENvbXBba2V5XTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHRyeVdyYXAoZm4pIHtcbiAgcmV0dXJuIChpZCwgYXJnKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbihpZCwgYXJnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW0hNUl0gU29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIFZ1ZSBjb21wb25lbnQgaG90LXJlbG9hZC4gRnVsbCByZWxvYWQgcmVxdWlyZWQuYFxuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG5cbmxldCBkZXZ0b29scyQxO1xubGV0IGJ1ZmZlciA9IFtdO1xubGV0IGRldnRvb2xzTm90SW5zdGFsbGVkID0gZmFsc2U7XG5mdW5jdGlvbiBlbWl0JDEoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgaWYgKGRldnRvb2xzJDEpIHtcbiAgICBkZXZ0b29scyQxLmVtaXQoZXZlbnQsIC4uLmFyZ3MpO1xuICB9IGVsc2UgaWYgKCFkZXZ0b29sc05vdEluc3RhbGxlZCkge1xuICAgIGJ1ZmZlci5wdXNoKHsgZXZlbnQsIGFyZ3MgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldERldnRvb2xzSG9vayQxKGhvb2ssIHRhcmdldCkge1xuICB2YXIgX2EsIF9iO1xuICBkZXZ0b29scyQxID0gaG9vaztcbiAgaWYgKGRldnRvb2xzJDEpIHtcbiAgICBkZXZ0b29scyQxLmVuYWJsZWQgPSB0cnVlO1xuICAgIGJ1ZmZlci5mb3JFYWNoKCh7IGV2ZW50LCBhcmdzIH0pID0+IGRldnRvb2xzJDEuZW1pdChldmVudCwgLi4uYXJncykpO1xuICAgIGJ1ZmZlciA9IFtdO1xuICB9IGVsc2UgaWYgKFxuICAgIC8vIGhhbmRsZSBsYXRlIGRldnRvb2xzIGluamVjdGlvbiAtIG9ubHkgZG8gdGhpcyBpZiB3ZSBhcmUgaW4gYW4gYWN0dWFsXG4gICAgLy8gYnJvd3NlciBlbnZpcm9ubWVudCB0byBhdm9pZCB0aGUgdGltZXIgaGFuZGxlIHN0YWxsaW5nIHRlc3QgcnVubmVyIGV4aXRcbiAgICAvLyAoIzQ4MTUpXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiAvLyBzb21lIGVudnMgbW9jayB3aW5kb3cgYnV0IG5vdCBmdWxseVxuICAgIHdpbmRvdy5IVE1MRWxlbWVudCAmJiAvLyBhbHNvIGV4Y2x1ZGUganNkb21cbiAgICAhKChfYiA9IChfYSA9IHdpbmRvdy5uYXZpZ2F0b3IpID09IG51bGwgPyB2b2lkIDAgOiBfYS51c2VyQWdlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5pbmNsdWRlcyhcImpzZG9tXCIpKVxuICApIHtcbiAgICBjb25zdCByZXBsYXkgPSB0YXJnZXQuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXyA9IHRhcmdldC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fIHx8IFtdO1xuICAgIHJlcGxheS5wdXNoKChuZXdIb29rKSA9PiB7XG4gICAgICBzZXREZXZ0b29sc0hvb2skMShuZXdIb29rLCB0YXJnZXQpO1xuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFkZXZ0b29scyQxKSB7XG4gICAgICAgIHRhcmdldC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fID0gbnVsbDtcbiAgICAgICAgZGV2dG9vbHNOb3RJbnN0YWxsZWQgPSB0cnVlO1xuICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgIH1cbiAgICB9LCAzZTMpO1xuICB9IGVsc2Uge1xuICAgIGRldnRvb2xzTm90SW5zdGFsbGVkID0gdHJ1ZTtcbiAgICBidWZmZXIgPSBbXTtcbiAgfVxufVxuZnVuY3Rpb24gZGV2dG9vbHNJbml0QXBwKGFwcCwgdmVyc2lvbikge1xuICBlbWl0JDEoXCJhcHA6aW5pdFwiIC8qIEFQUF9JTklUICovLCBhcHAsIHZlcnNpb24sIHtcbiAgICBGcmFnbWVudCxcbiAgICBUZXh0LFxuICAgIENvbW1lbnQsXG4gICAgU3RhdGljXG4gIH0pO1xufVxuZnVuY3Rpb24gZGV2dG9vbHNVbm1vdW50QXBwKGFwcCkge1xuICBlbWl0JDEoXCJhcHA6dW5tb3VudFwiIC8qIEFQUF9VTk1PVU5UICovLCBhcHApO1xufVxuY29uc3QgZGV2dG9vbHNDb21wb25lbnRBZGRlZCA9IC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVEZXZ0b29sc0NvbXBvbmVudEhvb2soXG4gIFwiY29tcG9uZW50OmFkZGVkXCIgLyogQ09NUE9ORU5UX0FEREVEICovXG4pO1xuY29uc3QgZGV2dG9vbHNDb21wb25lbnRVcGRhdGVkID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZURldnRvb2xzQ29tcG9uZW50SG9vayhcImNvbXBvbmVudDp1cGRhdGVkXCIgLyogQ09NUE9ORU5UX1VQREFURUQgKi8pO1xuY29uc3QgX2RldnRvb2xzQ29tcG9uZW50UmVtb3ZlZCA9IC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVEZXZ0b29sc0NvbXBvbmVudEhvb2soXG4gIFwiY29tcG9uZW50OnJlbW92ZWRcIiAvKiBDT01QT05FTlRfUkVNT1ZFRCAqL1xuKTtcbmNvbnN0IGRldnRvb2xzQ29tcG9uZW50UmVtb3ZlZCA9IChjb21wb25lbnQpID0+IHtcbiAgaWYgKGRldnRvb2xzJDEgJiYgdHlwZW9mIGRldnRvb2xzJDEuY2xlYW51cEJ1ZmZlciA9PT0gXCJmdW5jdGlvblwiICYmIC8vIHJlbW92ZSB0aGUgY29tcG9uZW50IGlmIGl0IHdhc24ndCBidWZmZXJlZFxuICAhZGV2dG9vbHMkMS5jbGVhbnVwQnVmZmVyKGNvbXBvbmVudCkpIHtcbiAgICBfZGV2dG9vbHNDb21wb25lbnRSZW1vdmVkKGNvbXBvbmVudCk7XG4gIH1cbn07XG5mdW5jdGlvbiBjcmVhdGVEZXZ0b29sc0NvbXBvbmVudEhvb2soaG9vaykge1xuICByZXR1cm4gKGNvbXBvbmVudCkgPT4ge1xuICAgIGVtaXQkMShcbiAgICAgIGhvb2ssXG4gICAgICBjb21wb25lbnQuYXBwQ29udGV4dC5hcHAsXG4gICAgICBjb21wb25lbnQudWlkLFxuICAgICAgY29tcG9uZW50LnBhcmVudCA/IGNvbXBvbmVudC5wYXJlbnQudWlkIDogdm9pZCAwLFxuICAgICAgY29tcG9uZW50XG4gICAgKTtcbiAgfTtcbn1cbmNvbnN0IGRldnRvb2xzUGVyZlN0YXJ0ID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZURldnRvb2xzUGVyZm9ybWFuY2VIb29rKFxuICBcInBlcmY6c3RhcnRcIiAvKiBQRVJGT1JNQU5DRV9TVEFSVCAqL1xuKTtcbmNvbnN0IGRldnRvb2xzUGVyZkVuZCA9IC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVEZXZ0b29sc1BlcmZvcm1hbmNlSG9vayhcbiAgXCJwZXJmOmVuZFwiIC8qIFBFUkZPUk1BTkNFX0VORCAqL1xuKTtcbmZ1bmN0aW9uIGNyZWF0ZURldnRvb2xzUGVyZm9ybWFuY2VIb29rKGhvb2spIHtcbiAgcmV0dXJuIChjb21wb25lbnQsIHR5cGUsIHRpbWUpID0+IHtcbiAgICBlbWl0JDEoaG9vaywgY29tcG9uZW50LmFwcENvbnRleHQuYXBwLCBjb21wb25lbnQudWlkLCBjb21wb25lbnQsIHR5cGUsIHRpbWUpO1xuICB9O1xufVxuZnVuY3Rpb24gZGV2dG9vbHNDb21wb25lbnRFbWl0KGNvbXBvbmVudCwgZXZlbnQsIHBhcmFtcykge1xuICBlbWl0JDEoXG4gICAgXCJjb21wb25lbnQ6ZW1pdFwiIC8qIENPTVBPTkVOVF9FTUlUICovLFxuICAgIGNvbXBvbmVudC5hcHBDb250ZXh0LmFwcCxcbiAgICBjb21wb25lbnQsXG4gICAgZXZlbnQsXG4gICAgcGFyYW1zXG4gICk7XG59XG5cbmZ1bmN0aW9uIGVtaXQoaW5zdGFuY2UsIGV2ZW50LCAuLi5yYXdBcmdzKSB7XG4gIGlmIChpbnN0YW5jZS5pc1VubW91bnRlZClcbiAgICByZXR1cm47XG4gIGNvbnN0IHByb3BzID0gaW5zdGFuY2Uudm5vZGUucHJvcHMgfHwgRU1QVFlfT0JKO1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGVtaXRzT3B0aW9ucyxcbiAgICAgIHByb3BzT3B0aW9uczogW3Byb3BzT3B0aW9uc11cbiAgICB9ID0gaW5zdGFuY2U7XG4gICAgaWYgKGVtaXRzT3B0aW9ucykge1xuICAgICAgaWYgKCEoZXZlbnQgaW4gZW1pdHNPcHRpb25zKSAmJiB0cnVlKSB7XG4gICAgICAgIGlmICghcHJvcHNPcHRpb25zIHx8ICEodG9IYW5kbGVyS2V5KGV2ZW50KSBpbiBwcm9wc09wdGlvbnMpKSB7XG4gICAgICAgICAgd2FybiQxKFxuICAgICAgICAgICAgYENvbXBvbmVudCBlbWl0dGVkIGV2ZW50IFwiJHtldmVudH1cIiBidXQgaXQgaXMgbmVpdGhlciBkZWNsYXJlZCBpbiB0aGUgZW1pdHMgb3B0aW9uIG5vciBhcyBhbiBcIiR7dG9IYW5kbGVyS2V5KGV2ZW50KX1cIiBwcm9wLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSBlbWl0c09wdGlvbnNbZXZlbnRdO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWxpZGF0b3IpKSB7XG4gICAgICAgICAgY29uc3QgaXNWYWxpZCA9IHZhbGlkYXRvciguLi5yYXdBcmdzKTtcbiAgICAgICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgICAgIHdhcm4kMShcbiAgICAgICAgICAgICAgYEludmFsaWQgZXZlbnQgYXJndW1lbnRzOiBldmVudCB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgZXZlbnQgXCIke2V2ZW50fVwiLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxldCBhcmdzID0gcmF3QXJncztcbiAgY29uc3QgaXNNb2RlbExpc3RlbmVyID0gZXZlbnQuc3RhcnRzV2l0aChcInVwZGF0ZTpcIik7XG4gIGNvbnN0IG1vZGVsQXJnID0gaXNNb2RlbExpc3RlbmVyICYmIGV2ZW50LnNsaWNlKDcpO1xuICBpZiAobW9kZWxBcmcgJiYgbW9kZWxBcmcgaW4gcHJvcHMpIHtcbiAgICBjb25zdCBtb2RpZmllcnNLZXkgPSBgJHttb2RlbEFyZyA9PT0gXCJtb2RlbFZhbHVlXCIgPyBcIm1vZGVsXCIgOiBtb2RlbEFyZ31Nb2RpZmllcnNgO1xuICAgIGNvbnN0IHsgbnVtYmVyLCB0cmltIH0gPSBwcm9wc1ttb2RpZmllcnNLZXldIHx8IEVNUFRZX09CSjtcbiAgICBpZiAodHJpbSkge1xuICAgICAgYXJncyA9IHJhd0FyZ3MubWFwKChhKSA9PiBpc1N0cmluZyhhKSA/IGEudHJpbSgpIDogYSk7XG4gICAgfVxuICAgIGlmIChudW1iZXIpIHtcbiAgICAgIGFyZ3MgPSByYXdBcmdzLm1hcChsb29zZVRvTnVtYmVyKTtcbiAgICB9XG4gIH1cbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XG4gICAgZGV2dG9vbHNDb21wb25lbnRFbWl0KGluc3RhbmNlLCBldmVudCwgYXJncyk7XG4gIH1cbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBjb25zdCBsb3dlckNhc2VFdmVudCA9IGV2ZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxvd2VyQ2FzZUV2ZW50ICE9PSBldmVudCAmJiBwcm9wc1t0b0hhbmRsZXJLZXkobG93ZXJDYXNlRXZlbnQpXSkge1xuICAgICAgd2FybiQxKFxuICAgICAgICBgRXZlbnQgXCIke2xvd2VyQ2FzZUV2ZW50fVwiIGlzIGVtaXR0ZWQgaW4gY29tcG9uZW50ICR7Zm9ybWF0Q29tcG9uZW50TmFtZShcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBpbnN0YW5jZS50eXBlXG4gICAgICAgICl9IGJ1dCB0aGUgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciBcIiR7ZXZlbnR9XCIuIE5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHlvdSBjYW5ub3QgdXNlIHYtb24gdG8gbGlzdGVuIHRvIGNhbWVsQ2FzZSBldmVudHMgd2hlbiB1c2luZyBpbi1ET00gdGVtcGxhdGVzLiBZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcIiR7aHlwaGVuYXRlKFxuICAgICAgICAgIGV2ZW50XG4gICAgICAgICl9XCIgaW5zdGVhZCBvZiBcIiR7ZXZlbnR9XCIuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgbGV0IGhhbmRsZXJOYW1lO1xuICBsZXQgaGFuZGxlciA9IHByb3BzW2hhbmRsZXJOYW1lID0gdG9IYW5kbGVyS2V5KGV2ZW50KV0gfHwgLy8gYWxzbyB0cnkgY2FtZWxDYXNlIGV2ZW50IGhhbmRsZXIgKCMyMjQ5KVxuICBwcm9wc1toYW5kbGVyTmFtZSA9IHRvSGFuZGxlcktleShjYW1lbGl6ZShldmVudCkpXTtcbiAgaWYgKCFoYW5kbGVyICYmIGlzTW9kZWxMaXN0ZW5lcikge1xuICAgIGhhbmRsZXIgPSBwcm9wc1toYW5kbGVyTmFtZSA9IHRvSGFuZGxlcktleShoeXBoZW5hdGUoZXZlbnQpKV07XG4gIH1cbiAgaWYgKGhhbmRsZXIpIHtcbiAgICBjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZyhcbiAgICAgIGhhbmRsZXIsXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIDYsXG4gICAgICBhcmdzXG4gICAgKTtcbiAgfVxuICBjb25zdCBvbmNlSGFuZGxlciA9IHByb3BzW2hhbmRsZXJOYW1lICsgYE9uY2VgXTtcbiAgaWYgKG9uY2VIYW5kbGVyKSB7XG4gICAgaWYgKCFpbnN0YW5jZS5lbWl0dGVkKSB7XG4gICAgICBpbnN0YW5jZS5lbWl0dGVkID0ge307XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5lbWl0dGVkW2hhbmRsZXJOYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbnN0YW5jZS5lbWl0dGVkW2hhbmRsZXJOYW1lXSA9IHRydWU7XG4gICAgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoXG4gICAgICBvbmNlSGFuZGxlcixcbiAgICAgIGluc3RhbmNlLFxuICAgICAgNixcbiAgICAgIGFyZ3NcbiAgICApO1xuICB9XG59XG5mdW5jdGlvbiBub3JtYWxpemVFbWl0c09wdGlvbnMoY29tcCwgYXBwQ29udGV4dCwgYXNNaXhpbiA9IGZhbHNlKSB7XG4gIGNvbnN0IGNhY2hlID0gYXBwQ29udGV4dC5lbWl0c0NhY2hlO1xuICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQoY29tcCk7XG4gIGlmIChjYWNoZWQgIT09IHZvaWQgMCkge1xuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cbiAgY29uc3QgcmF3ID0gY29tcC5lbWl0cztcbiAgbGV0IG5vcm1hbGl6ZWQgPSB7fTtcbiAgbGV0IGhhc0V4dGVuZHMgPSBmYWxzZTtcbiAgaWYgKF9fVlVFX09QVElPTlNfQVBJX18gJiYgIWlzRnVuY3Rpb24oY29tcCkpIHtcbiAgICBjb25zdCBleHRlbmRFbWl0cyA9IChyYXcyKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkRnJvbUV4dGVuZCA9IG5vcm1hbGl6ZUVtaXRzT3B0aW9ucyhyYXcyLCBhcHBDb250ZXh0LCB0cnVlKTtcbiAgICAgIGlmIChub3JtYWxpemVkRnJvbUV4dGVuZCkge1xuICAgICAgICBoYXNFeHRlbmRzID0gdHJ1ZTtcbiAgICAgICAgZXh0ZW5kKG5vcm1hbGl6ZWQsIG5vcm1hbGl6ZWRGcm9tRXh0ZW5kKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmICghYXNNaXhpbiAmJiBhcHBDb250ZXh0Lm1peGlucy5sZW5ndGgpIHtcbiAgICAgIGFwcENvbnRleHQubWl4aW5zLmZvckVhY2goZXh0ZW5kRW1pdHMpO1xuICAgIH1cbiAgICBpZiAoY29tcC5leHRlbmRzKSB7XG4gICAgICBleHRlbmRFbWl0cyhjb21wLmV4dGVuZHMpO1xuICAgIH1cbiAgICBpZiAoY29tcC5taXhpbnMpIHtcbiAgICAgIGNvbXAubWl4aW5zLmZvckVhY2goZXh0ZW5kRW1pdHMpO1xuICAgIH1cbiAgfVxuICBpZiAoIXJhdyAmJiAhaGFzRXh0ZW5kcykge1xuICAgIGlmIChpc09iamVjdChjb21wKSkge1xuICAgICAgY2FjaGUuc2V0KGNvbXAsIG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoaXNBcnJheShyYXcpKSB7XG4gICAgcmF3LmZvckVhY2goKGtleSkgPT4gbm9ybWFsaXplZFtrZXldID0gbnVsbCk7XG4gIH0gZWxzZSB7XG4gICAgZXh0ZW5kKG5vcm1hbGl6ZWQsIHJhdyk7XG4gIH1cbiAgaWYgKGlzT2JqZWN0KGNvbXApKSB7XG4gICAgY2FjaGUuc2V0KGNvbXAsIG5vcm1hbGl6ZWQpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuZnVuY3Rpb24gaXNFbWl0TGlzdGVuZXIob3B0aW9ucywga2V5KSB7XG4gIGlmICghb3B0aW9ucyB8fCAhaXNPbihrZXkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGtleSA9IGtleS5zbGljZSgyKS5yZXBsYWNlKC9PbmNlJC8sIFwiXCIpO1xuICByZXR1cm4gaGFzT3duKG9wdGlvbnMsIGtleVswXS50b0xvd2VyQ2FzZSgpICsga2V5LnNsaWNlKDEpKSB8fCBoYXNPd24ob3B0aW9ucywgaHlwaGVuYXRlKGtleSkpIHx8IGhhc093bihvcHRpb25zLCBrZXkpO1xufVxuXG5sZXQgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gbnVsbDtcbmxldCBjdXJyZW50U2NvcGVJZCA9IG51bGw7XG5mdW5jdGlvbiBzZXRDdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgY29uc3QgcHJldiA9IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTtcbiAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gaW5zdGFuY2U7XG4gIGN1cnJlbnRTY29wZUlkID0gaW5zdGFuY2UgJiYgaW5zdGFuY2UudHlwZS5fX3Njb3BlSWQgfHwgbnVsbDtcbiAgcmV0dXJuIHByZXY7XG59XG5mdW5jdGlvbiBwdXNoU2NvcGVJZChpZCkge1xuICBjdXJyZW50U2NvcGVJZCA9IGlkO1xufVxuZnVuY3Rpb24gcG9wU2NvcGVJZCgpIHtcbiAgY3VycmVudFNjb3BlSWQgPSBudWxsO1xufVxuY29uc3Qgd2l0aFNjb3BlSWQgPSAoX2lkKSA9PiB3aXRoQ3R4O1xuZnVuY3Rpb24gd2l0aEN0eChmbiwgY3R4ID0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlLCBpc05vblNjb3BlZFNsb3QpIHtcbiAgaWYgKCFjdHgpXG4gICAgcmV0dXJuIGZuO1xuICBpZiAoZm4uX24pIHtcbiAgICByZXR1cm4gZm47XG4gIH1cbiAgY29uc3QgcmVuZGVyRm5XaXRoQ29udGV4dCA9ICguLi5hcmdzKSA9PiB7XG4gICAgaWYgKHJlbmRlckZuV2l0aENvbnRleHQuX2QpIHtcbiAgICAgIHNldEJsb2NrVHJhY2tpbmcoLTEpO1xuICAgIH1cbiAgICBjb25zdCBwcmV2SW5zdGFuY2UgPSBzZXRDdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UoY3R4KTtcbiAgICBsZXQgcmVzO1xuICAgIHRyeSB7XG4gICAgICByZXMgPSBmbiguLi5hcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlKHByZXZJbnN0YW5jZSk7XG4gICAgICBpZiAocmVuZGVyRm5XaXRoQ29udGV4dC5fZCkge1xuICAgICAgICBzZXRCbG9ja1RyYWNraW5nKDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcbiAgICAgIGRldnRvb2xzQ29tcG9uZW50VXBkYXRlZChjdHgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuICByZW5kZXJGbldpdGhDb250ZXh0Ll9uID0gdHJ1ZTtcbiAgcmVuZGVyRm5XaXRoQ29udGV4dC5fYyA9IHRydWU7XG4gIHJlbmRlckZuV2l0aENvbnRleHQuX2QgPSB0cnVlO1xuICByZXR1cm4gcmVuZGVyRm5XaXRoQ29udGV4dDtcbn1cblxubGV0IGFjY2Vzc2VkQXR0cnMgPSBmYWxzZTtcbmZ1bmN0aW9uIG1hcmtBdHRyc0FjY2Vzc2VkKCkge1xuICBhY2Nlc3NlZEF0dHJzID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlbmRlckNvbXBvbmVudFJvb3QoaW5zdGFuY2UpIHtcbiAgY29uc3Qge1xuICAgIHR5cGU6IENvbXBvbmVudCxcbiAgICB2bm9kZSxcbiAgICBwcm94eSxcbiAgICB3aXRoUHJveHksXG4gICAgcHJvcHMsXG4gICAgcHJvcHNPcHRpb25zOiBbcHJvcHNPcHRpb25zXSxcbiAgICBzbG90cyxcbiAgICBhdHRycyxcbiAgICBlbWl0LFxuICAgIHJlbmRlcixcbiAgICByZW5kZXJDYWNoZSxcbiAgICBkYXRhLFxuICAgIHNldHVwU3RhdGUsXG4gICAgY3R4LFxuICAgIGluaGVyaXRBdHRyc1xuICB9ID0gaW5zdGFuY2U7XG4gIGxldCByZXN1bHQ7XG4gIGxldCBmYWxsdGhyb3VnaEF0dHJzO1xuICBjb25zdCBwcmV2ID0gc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlKGluc3RhbmNlKTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBhY2Nlc3NlZEF0dHJzID0gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAodm5vZGUuc2hhcGVGbGFnICYgNCkge1xuICAgICAgY29uc3QgcHJveHlUb1VzZSA9IHdpdGhQcm94eSB8fCBwcm94eTtcbiAgICAgIGNvbnN0IHRoaXNQcm94eSA9ICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgc2V0dXBTdGF0ZS5fX2lzU2NyaXB0U2V0dXAgPyBuZXcgUHJveHkocHJveHlUb1VzZSwge1xuICAgICAgICBnZXQodGFyZ2V0LCBrZXksIHJlY2VpdmVyKSB7XG4gICAgICAgICAgd2FybiQxKFxuICAgICAgICAgICAgYFByb3BlcnR5ICcke1N0cmluZyhcbiAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICApfScgd2FzIGFjY2Vzc2VkIHZpYSAndGhpcycuIEF2b2lkIHVzaW5nICd0aGlzJyBpbiB0ZW1wbGF0ZXMuYFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwga2V5LCByZWNlaXZlcik7XG4gICAgICAgIH1cbiAgICAgIH0pIDogcHJveHlUb1VzZTtcbiAgICAgIHJlc3VsdCA9IG5vcm1hbGl6ZVZOb2RlKFxuICAgICAgICByZW5kZXIuY2FsbChcbiAgICAgICAgICB0aGlzUHJveHksXG4gICAgICAgICAgcHJveHlUb1VzZSxcbiAgICAgICAgICByZW5kZXJDYWNoZSxcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICBzZXR1cFN0YXRlLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgY3R4XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBmYWxsdGhyb3VnaEF0dHJzID0gYXR0cnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlbmRlcjIgPSBDb21wb25lbnQ7XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBhdHRycyA9PT0gcHJvcHMpIHtcbiAgICAgICAgbWFya0F0dHJzQWNjZXNzZWQoKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IG5vcm1hbGl6ZVZOb2RlKFxuICAgICAgICByZW5kZXIyLmxlbmd0aCA+IDEgPyByZW5kZXIyKFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyB7XG4gICAgICAgICAgICBnZXQgYXR0cnMoKSB7XG4gICAgICAgICAgICAgIG1hcmtBdHRyc0FjY2Vzc2VkKCk7XG4gICAgICAgICAgICAgIHJldHVybiBhdHRycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzbG90cyxcbiAgICAgICAgICAgIGVtaXRcbiAgICAgICAgICB9IDogeyBhdHRycywgc2xvdHMsIGVtaXQgfVxuICAgICAgICApIDogcmVuZGVyMihcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICBudWxsXG4gICAgICAgICAgLyogd2Uga25vdyBpdCBkb2Vzbid0IG5lZWQgaXQgKi9cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGZhbGx0aHJvdWdoQXR0cnMgPSBDb21wb25lbnQucHJvcHMgPyBhdHRycyA6IGdldEZ1bmN0aW9uYWxGYWxsdGhyb3VnaChhdHRycyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBibG9ja1N0YWNrLmxlbmd0aCA9IDA7XG4gICAgaGFuZGxlRXJyb3IoZXJyLCBpbnN0YW5jZSwgMSk7XG4gICAgcmVzdWx0ID0gY3JlYXRlVk5vZGUoQ29tbWVudCk7XG4gIH1cbiAgbGV0IHJvb3QgPSByZXN1bHQ7XG4gIGxldCBzZXRSb290ID0gdm9pZCAwO1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiByZXN1bHQucGF0Y2hGbGFnID4gMCAmJiByZXN1bHQucGF0Y2hGbGFnICYgMjA0OCkge1xuICAgIFtyb290LCBzZXRSb290XSA9IGdldENoaWxkUm9vdChyZXN1bHQpO1xuICB9XG4gIGlmIChmYWxsdGhyb3VnaEF0dHJzICYmIGluaGVyaXRBdHRycyAhPT0gZmFsc2UpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmFsbHRocm91Z2hBdHRycyk7XG4gICAgY29uc3QgeyBzaGFwZUZsYWcgfSA9IHJvb3Q7XG4gICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgICBpZiAoc2hhcGVGbGFnICYgKDEgfCA2KSkge1xuICAgICAgICBpZiAocHJvcHNPcHRpb25zICYmIGtleXMuc29tZShpc01vZGVsTGlzdGVuZXIpKSB7XG4gICAgICAgICAgZmFsbHRocm91Z2hBdHRycyA9IGZpbHRlck1vZGVsTGlzdGVuZXJzKFxuICAgICAgICAgICAgZmFsbHRocm91Z2hBdHRycyxcbiAgICAgICAgICAgIHByb3BzT3B0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcm9vdCA9IGNsb25lVk5vZGUocm9vdCwgZmFsbHRocm91Z2hBdHRycyk7XG4gICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWFjY2Vzc2VkQXR0cnMgJiYgcm9vdC50eXBlICE9PSBDb21tZW50KSB7XG4gICAgICAgIGNvbnN0IGFsbEF0dHJzID0gT2JqZWN0LmtleXMoYXR0cnMpO1xuICAgICAgICBjb25zdCBldmVudEF0dHJzID0gW107XG4gICAgICAgIGNvbnN0IGV4dHJhQXR0cnMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBhbGxBdHRycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBhbGxBdHRyc1tpXTtcbiAgICAgICAgICBpZiAoaXNPbihrZXkpKSB7XG4gICAgICAgICAgICBpZiAoIWlzTW9kZWxMaXN0ZW5lcihrZXkpKSB7XG4gICAgICAgICAgICAgIGV2ZW50QXR0cnMucHVzaChrZXlbMl0udG9Mb3dlckNhc2UoKSArIGtleS5zbGljZSgzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4dHJhQXR0cnMucHVzaChrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXh0cmFBdHRycy5sZW5ndGgpIHtcbiAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICBgRXh0cmFuZW91cyBub24tcHJvcHMgYXR0cmlidXRlcyAoJHtleHRyYUF0dHJzLmpvaW4oXCIsIFwiKX0pIHdlcmUgcGFzc2VkIHRvIGNvbXBvbmVudCBidXQgY291bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkIGJlY2F1c2UgY29tcG9uZW50IHJlbmRlcnMgZnJhZ21lbnQgb3IgdGV4dCByb290IG5vZGVzLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudEF0dHJzLmxlbmd0aCkge1xuICAgICAgICAgIHdhcm4kMShcbiAgICAgICAgICAgIGBFeHRyYW5lb3VzIG5vbi1lbWl0cyBldmVudCBsaXN0ZW5lcnMgKCR7ZXZlbnRBdHRycy5qb2luKFwiLCBcIil9KSB3ZXJlIHBhc3NlZCB0byBjb21wb25lbnQgYnV0IGNvdWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCBiZWNhdXNlIGNvbXBvbmVudCByZW5kZXJzIGZyYWdtZW50IG9yIHRleHQgcm9vdCBub2Rlcy4gSWYgdGhlIGxpc3RlbmVyIGlzIGludGVuZGVkIHRvIGJlIGEgY29tcG9uZW50IGN1c3RvbSBldmVudCBsaXN0ZW5lciBvbmx5LCBkZWNsYXJlIGl0IHVzaW5nIHRoZSBcImVtaXRzXCIgb3B0aW9uLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICh2bm9kZS5kaXJzKSB7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWlzRWxlbWVudFJvb3Qocm9vdCkpIHtcbiAgICAgIHdhcm4kMShcbiAgICAgICAgYFJ1bnRpbWUgZGlyZWN0aXZlIHVzZWQgb24gY29tcG9uZW50IHdpdGggbm9uLWVsZW1lbnQgcm9vdCBub2RlLiBUaGUgZGlyZWN0aXZlcyB3aWxsIG5vdCBmdW5jdGlvbiBhcyBpbnRlbmRlZC5gXG4gICAgICApO1xuICAgIH1cbiAgICByb290ID0gY2xvbmVWTm9kZShyb290KTtcbiAgICByb290LmRpcnMgPSByb290LmRpcnMgPyByb290LmRpcnMuY29uY2F0KHZub2RlLmRpcnMpIDogdm5vZGUuZGlycztcbiAgfVxuICBpZiAodm5vZGUudHJhbnNpdGlvbikge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFpc0VsZW1lbnRSb290KHJvb3QpKSB7XG4gICAgICB3YXJuJDEoXG4gICAgICAgIGBDb21wb25lbnQgaW5zaWRlIDxUcmFuc2l0aW9uPiByZW5kZXJzIG5vbi1lbGVtZW50IHJvb3Qgbm9kZSB0aGF0IGNhbm5vdCBiZSBhbmltYXRlZC5gXG4gICAgICApO1xuICAgIH1cbiAgICByb290LnRyYW5zaXRpb24gPSB2bm9kZS50cmFuc2l0aW9uO1xuICB9XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHNldFJvb3QpIHtcbiAgICBzZXRSb290KHJvb3QpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHJvb3Q7XG4gIH1cbiAgc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlKHByZXYpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuY29uc3QgZ2V0Q2hpbGRSb290ID0gKHZub2RlKSA9PiB7XG4gIGNvbnN0IHJhd0NoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47XG4gIGNvbnN0IGR5bmFtaWNDaGlsZHJlbiA9IHZub2RlLmR5bmFtaWNDaGlsZHJlbjtcbiAgY29uc3QgY2hpbGRSb290ID0gZmlsdGVyU2luZ2xlUm9vdChyYXdDaGlsZHJlbiwgZmFsc2UpO1xuICBpZiAoIWNoaWxkUm9vdCkge1xuICAgIHJldHVybiBbdm5vZGUsIHZvaWQgMF07XG4gIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBjaGlsZFJvb3QucGF0Y2hGbGFnID4gMCAmJiBjaGlsZFJvb3QucGF0Y2hGbGFnICYgMjA0OCkge1xuICAgIHJldHVybiBnZXRDaGlsZFJvb3QoY2hpbGRSb290KTtcbiAgfVxuICBjb25zdCBpbmRleCA9IHJhd0NoaWxkcmVuLmluZGV4T2YoY2hpbGRSb290KTtcbiAgY29uc3QgZHluYW1pY0luZGV4ID0gZHluYW1pY0NoaWxkcmVuID8gZHluYW1pY0NoaWxkcmVuLmluZGV4T2YoY2hpbGRSb290KSA6IC0xO1xuICBjb25zdCBzZXRSb290ID0gKHVwZGF0ZWRSb290KSA9PiB7XG4gICAgcmF3Q2hpbGRyZW5baW5kZXhdID0gdXBkYXRlZFJvb3Q7XG4gICAgaWYgKGR5bmFtaWNDaGlsZHJlbikge1xuICAgICAgaWYgKGR5bmFtaWNJbmRleCA+IC0xKSB7XG4gICAgICAgIGR5bmFtaWNDaGlsZHJlbltkeW5hbWljSW5kZXhdID0gdXBkYXRlZFJvb3Q7XG4gICAgICB9IGVsc2UgaWYgKHVwZGF0ZWRSb290LnBhdGNoRmxhZyA+IDApIHtcbiAgICAgICAgdm5vZGUuZHluYW1pY0NoaWxkcmVuID0gWy4uLmR5bmFtaWNDaGlsZHJlbiwgdXBkYXRlZFJvb3RdO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIFtub3JtYWxpemVWTm9kZShjaGlsZFJvb3QpLCBzZXRSb290XTtcbn07XG5mdW5jdGlvbiBmaWx0ZXJTaW5nbGVSb290KGNoaWxkcmVuLCByZWN1cnNlID0gdHJ1ZSkge1xuICBsZXQgc2luZ2xlUm9vdDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgaWYgKGlzVk5vZGUoY2hpbGQpKSB7XG4gICAgICBpZiAoY2hpbGQudHlwZSAhPT0gQ29tbWVudCB8fCBjaGlsZC5jaGlsZHJlbiA9PT0gXCJ2LWlmXCIpIHtcbiAgICAgICAgaWYgKHNpbmdsZVJvb3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2luZ2xlUm9vdCA9IGNoaWxkO1xuICAgICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHJlY3Vyc2UgJiYgc2luZ2xlUm9vdC5wYXRjaEZsYWcgPiAwICYmIHNpbmdsZVJvb3QucGF0Y2hGbGFnICYgMjA0OCkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclNpbmdsZVJvb3Qoc2luZ2xlUm9vdC5jaGlsZHJlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNpbmdsZVJvb3Q7XG59XG5jb25zdCBnZXRGdW5jdGlvbmFsRmFsbHRocm91Z2ggPSAoYXR0cnMpID0+IHtcbiAgbGV0IHJlcztcbiAgZm9yIChjb25zdCBrZXkgaW4gYXR0cnMpIHtcbiAgICBpZiAoa2V5ID09PSBcImNsYXNzXCIgfHwga2V5ID09PSBcInN0eWxlXCIgfHwgaXNPbihrZXkpKSB7XG4gICAgICAocmVzIHx8IChyZXMgPSB7fSkpW2tleV0gPSBhdHRyc1trZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufTtcbmNvbnN0IGZpbHRlck1vZGVsTGlzdGVuZXJzID0gKGF0dHJzLCBwcm9wcykgPT4ge1xuICBjb25zdCByZXMgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgaW4gYXR0cnMpIHtcbiAgICBpZiAoIWlzTW9kZWxMaXN0ZW5lcihrZXkpIHx8ICEoa2V5LnNsaWNlKDkpIGluIHByb3BzKSkge1xuICAgICAgcmVzW2tleV0gPSBhdHRyc1trZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufTtcbmNvbnN0IGlzRWxlbWVudFJvb3QgPSAodm5vZGUpID0+IHtcbiAgcmV0dXJuIHZub2RlLnNoYXBlRmxhZyAmICg2IHwgMSkgfHwgdm5vZGUudHlwZSA9PT0gQ29tbWVudDtcbn07XG5mdW5jdGlvbiBzaG91bGRVcGRhdGVDb21wb25lbnQocHJldlZOb2RlLCBuZXh0Vk5vZGUsIG9wdGltaXplZCkge1xuICBjb25zdCB7IHByb3BzOiBwcmV2UHJvcHMsIGNoaWxkcmVuOiBwcmV2Q2hpbGRyZW4sIGNvbXBvbmVudCB9ID0gcHJldlZOb2RlO1xuICBjb25zdCB7IHByb3BzOiBuZXh0UHJvcHMsIGNoaWxkcmVuOiBuZXh0Q2hpbGRyZW4sIHBhdGNoRmxhZyB9ID0gbmV4dFZOb2RlO1xuICBjb25zdCBlbWl0cyA9IGNvbXBvbmVudC5lbWl0c09wdGlvbnM7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIChwcmV2Q2hpbGRyZW4gfHwgbmV4dENoaWxkcmVuKSAmJiBpc0htclVwZGF0aW5nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKG5leHRWTm9kZS5kaXJzIHx8IG5leHRWTm9kZS50cmFuc2l0aW9uKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKG9wdGltaXplZCAmJiBwYXRjaEZsYWcgPj0gMCkge1xuICAgIGlmIChwYXRjaEZsYWcgJiAxMDI0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHBhdGNoRmxhZyAmIDE2KSB7XG4gICAgICBpZiAoIXByZXZQcm9wcykge1xuICAgICAgICByZXR1cm4gISFuZXh0UHJvcHM7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzUHJvcHNDaGFuZ2VkKHByZXZQcm9wcywgbmV4dFByb3BzLCBlbWl0cyk7XG4gICAgfSBlbHNlIGlmIChwYXRjaEZsYWcgJiA4KSB7XG4gICAgICBjb25zdCBkeW5hbWljUHJvcHMgPSBuZXh0Vk5vZGUuZHluYW1pY1Byb3BzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkeW5hbWljUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZHluYW1pY1Byb3BzW2ldO1xuICAgICAgICBpZiAobmV4dFByb3BzW2tleV0gIT09IHByZXZQcm9wc1trZXldICYmICFpc0VtaXRMaXN0ZW5lcihlbWl0cywga2V5KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChwcmV2Q2hpbGRyZW4gfHwgbmV4dENoaWxkcmVuKSB7XG4gICAgICBpZiAoIW5leHRDaGlsZHJlbiB8fCAhbmV4dENoaWxkcmVuLiRzdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcmV2UHJvcHMgPT09IG5leHRQcm9wcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXByZXZQcm9wcykge1xuICAgICAgcmV0dXJuICEhbmV4dFByb3BzO1xuICAgIH1cbiAgICBpZiAoIW5leHRQcm9wcykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBoYXNQcm9wc0NoYW5nZWQocHJldlByb3BzLCBuZXh0UHJvcHMsIGVtaXRzKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBoYXNQcm9wc0NoYW5nZWQocHJldlByb3BzLCBuZXh0UHJvcHMsIGVtaXRzT3B0aW9ucykge1xuICBjb25zdCBuZXh0S2V5cyA9IE9iamVjdC5rZXlzKG5leHRQcm9wcyk7XG4gIGlmIChuZXh0S2V5cy5sZW5ndGggIT09IE9iamVjdC5rZXlzKHByZXZQcm9wcykubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXh0S2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IG5leHRLZXlzW2ldO1xuICAgIGlmIChuZXh0UHJvcHNba2V5XSAhPT0gcHJldlByb3BzW2tleV0gJiYgIWlzRW1pdExpc3RlbmVyKGVtaXRzT3B0aW9ucywga2V5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUhPQ0hvc3RFbCh7IHZub2RlLCBwYXJlbnQgfSwgZWwpIHtcbiAgd2hpbGUgKHBhcmVudCkge1xuICAgIGNvbnN0IHJvb3QgPSBwYXJlbnQuc3ViVHJlZTtcbiAgICBpZiAocm9vdC5zdXNwZW5zZSAmJiByb290LnN1c3BlbnNlLmFjdGl2ZUJyYW5jaCA9PT0gdm5vZGUpIHtcbiAgICAgIHJvb3QuZWwgPSB2bm9kZS5lbDtcbiAgICB9XG4gICAgaWYgKHJvb3QgPT09IHZub2RlKSB7XG4gICAgICAodm5vZGUgPSBwYXJlbnQudm5vZGUpLmVsID0gZWw7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgQ09NUE9ORU5UUyA9IFwiY29tcG9uZW50c1wiO1xuY29uc3QgRElSRUNUSVZFUyA9IFwiZGlyZWN0aXZlc1wiO1xuZnVuY3Rpb24gcmVzb2x2ZUNvbXBvbmVudChuYW1lLCBtYXliZVNlbGZSZWZlcmVuY2UpIHtcbiAgcmV0dXJuIHJlc29sdmVBc3NldChDT01QT05FTlRTLCBuYW1lLCB0cnVlLCBtYXliZVNlbGZSZWZlcmVuY2UpIHx8IG5hbWU7XG59XG5jb25zdCBOVUxMX0RZTkFNSUNfQ09NUE9ORU5UID0gU3ltYm9sLmZvcihcInYtbmRjXCIpO1xuZnVuY3Rpb24gcmVzb2x2ZUR5bmFtaWNDb21wb25lbnQoY29tcG9uZW50KSB7XG4gIGlmIChpc1N0cmluZyhjb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIHJlc29sdmVBc3NldChDT01QT05FTlRTLCBjb21wb25lbnQsIGZhbHNlKSB8fCBjb21wb25lbnQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudCB8fCBOVUxMX0RZTkFNSUNfQ09NUE9ORU5UO1xuICB9XG59XG5mdW5jdGlvbiByZXNvbHZlRGlyZWN0aXZlKG5hbWUpIHtcbiAgcmV0dXJuIHJlc29sdmVBc3NldChESVJFQ1RJVkVTLCBuYW1lKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVBc3NldCh0eXBlLCBuYW1lLCB3YXJuTWlzc2luZyA9IHRydWUsIG1heWJlU2VsZlJlZmVyZW5jZSA9IGZhbHNlKSB7XG4gIGNvbnN0IGluc3RhbmNlID0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlIHx8IGN1cnJlbnRJbnN0YW5jZTtcbiAgaWYgKGluc3RhbmNlKSB7XG4gICAgY29uc3QgQ29tcG9uZW50ID0gaW5zdGFuY2UudHlwZTtcbiAgICBpZiAodHlwZSA9PT0gQ09NUE9ORU5UUykge1xuICAgICAgY29uc3Qgc2VsZk5hbWUgPSBnZXRDb21wb25lbnROYW1lKFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgaWYgKHNlbGZOYW1lICYmIChzZWxmTmFtZSA9PT0gbmFtZSB8fCBzZWxmTmFtZSA9PT0gY2FtZWxpemUobmFtZSkgfHwgc2VsZk5hbWUgPT09IGNhcGl0YWxpemUoY2FtZWxpemUobmFtZSkpKSkge1xuICAgICAgICByZXR1cm4gQ29tcG9uZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXMgPSAoXG4gICAgICAvLyBsb2NhbCByZWdpc3RyYXRpb25cbiAgICAgIC8vIGNoZWNrIGluc3RhbmNlW3R5cGVdIGZpcnN0IHdoaWNoIGlzIHJlc29sdmVkIGZvciBvcHRpb25zIEFQSVxuICAgICAgcmVzb2x2ZShpbnN0YW5jZVt0eXBlXSB8fCBDb21wb25lbnRbdHlwZV0sIG5hbWUpIHx8IC8vIGdsb2JhbCByZWdpc3RyYXRpb25cbiAgICAgIHJlc29sdmUoaW5zdGFuY2UuYXBwQ29udGV4dFt0eXBlXSwgbmFtZSlcbiAgICApO1xuICAgIGlmICghcmVzICYmIG1heWJlU2VsZlJlZmVyZW5jZSkge1xuICAgICAgcmV0dXJuIENvbXBvbmVudDtcbiAgICB9XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgd2Fybk1pc3NpbmcgJiYgIXJlcykge1xuICAgICAgY29uc3QgZXh0cmEgPSB0eXBlID09PSBDT01QT05FTlRTID8gYFxuSWYgdGhpcyBpcyBhIG5hdGl2ZSBjdXN0b20gZWxlbWVudCwgbWFrZSBzdXJlIHRvIGV4Y2x1ZGUgaXQgZnJvbSBjb21wb25lbnQgcmVzb2x1dGlvbiB2aWEgY29tcGlsZXJPcHRpb25zLmlzQ3VzdG9tRWxlbWVudC5gIDogYGA7XG4gICAgICB3YXJuJDEoYEZhaWxlZCB0byByZXNvbHZlICR7dHlwZS5zbGljZSgwLCAtMSl9OiAke25hbWV9JHtleHRyYX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgd2FybiQxKFxuICAgICAgYHJlc29sdmUke2NhcGl0YWxpemUodHlwZS5zbGljZSgwLCAtMSkpfSBjYW4gb25seSBiZSB1c2VkIGluIHJlbmRlcigpIG9yIHNldHVwKCkuYFxuICAgICk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmUocmVnaXN0cnksIG5hbWUpIHtcbiAgcmV0dXJuIHJlZ2lzdHJ5ICYmIChyZWdpc3RyeVtuYW1lXSB8fCByZWdpc3RyeVtjYW1lbGl6ZShuYW1lKV0gfHwgcmVnaXN0cnlbY2FwaXRhbGl6ZShjYW1lbGl6ZShuYW1lKSldKTtcbn1cblxuY29uc3QgaXNTdXNwZW5zZSA9ICh0eXBlKSA9PiB0eXBlLl9faXNTdXNwZW5zZTtcbmxldCBzdXNwZW5zZUlkID0gMDtcbmNvbnN0IFN1c3BlbnNlSW1wbCA9IHtcbiAgbmFtZTogXCJTdXNwZW5zZVwiLFxuICAvLyBJbiBvcmRlciB0byBtYWtlIFN1c3BlbnNlIHRyZWUtc2hha2FibGUsIHdlIG5lZWQgdG8gYXZvaWQgaW1wb3J0aW5nIGl0XG4gIC8vIGRpcmVjdGx5IGluIHRoZSByZW5kZXJlci4gVGhlIHJlbmRlcmVyIGNoZWNrcyBmb3IgdGhlIF9faXNTdXNwZW5zZSBmbGFnXG4gIC8vIG9uIGEgdm5vZGUncyB0eXBlIGFuZCBjYWxscyB0aGUgYHByb2Nlc3NgIG1ldGhvZCwgcGFzc2luZyBpbiByZW5kZXJlclxuICAvLyBpbnRlcm5hbHMuXG4gIF9faXNTdXNwZW5zZTogdHJ1ZSxcbiAgcHJvY2VzcyhuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBuYW1lc3BhY2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkLCByZW5kZXJlckludGVybmFscykge1xuICAgIGlmIChuMSA9PSBudWxsKSB7XG4gICAgICBtb3VudFN1c3BlbnNlKFxuICAgICAgICBuMixcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICBhbmNob3IsXG4gICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICBvcHRpbWl6ZWQsXG4gICAgICAgIHJlbmRlcmVySW50ZXJuYWxzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocGFyZW50U3VzcGVuc2UgJiYgcGFyZW50U3VzcGVuc2UuZGVwcyA+IDAgJiYgIW4xLnN1c3BlbnNlLmlzSW5GYWxsYmFjaykge1xuICAgICAgICBuMi5zdXNwZW5zZSA9IG4xLnN1c3BlbnNlO1xuICAgICAgICBuMi5zdXNwZW5zZS52bm9kZSA9IG4yO1xuICAgICAgICBuMi5lbCA9IG4xLmVsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwYXRjaFN1c3BlbnNlKFxuICAgICAgICBuMSxcbiAgICAgICAgbjIsXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgYW5jaG9yLFxuICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICBvcHRpbWl6ZWQsXG4gICAgICAgIHJlbmRlcmVySW50ZXJuYWxzXG4gICAgICApO1xuICAgIH1cbiAgfSxcbiAgaHlkcmF0ZTogaHlkcmF0ZVN1c3BlbnNlLFxuICBjcmVhdGU6IGNyZWF0ZVN1c3BlbnNlQm91bmRhcnksXG4gIG5vcm1hbGl6ZTogbm9ybWFsaXplU3VzcGVuc2VDaGlsZHJlblxufTtcbmNvbnN0IFN1c3BlbnNlID0gU3VzcGVuc2VJbXBsIDtcbmZ1bmN0aW9uIHRyaWdnZXJFdmVudCh2bm9kZSwgbmFtZSkge1xuICBjb25zdCBldmVudExpc3RlbmVyID0gdm5vZGUucHJvcHMgJiYgdm5vZGUucHJvcHNbbmFtZV07XG4gIGlmIChpc0Z1bmN0aW9uKGV2ZW50TGlzdGVuZXIpKSB7XG4gICAgZXZlbnRMaXN0ZW5lcigpO1xuICB9XG59XG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlKHZub2RlLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgbmFtZXNwYWNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgcmVuZGVyZXJJbnRlcm5hbHMpIHtcbiAgY29uc3Qge1xuICAgIHA6IHBhdGNoLFxuICAgIG86IHsgY3JlYXRlRWxlbWVudCB9XG4gIH0gPSByZW5kZXJlckludGVybmFscztcbiAgY29uc3QgaGlkZGVuQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3Qgc3VzcGVuc2UgPSB2bm9kZS5zdXNwZW5zZSA9IGNyZWF0ZVN1c3BlbnNlQm91bmRhcnkoXG4gICAgdm5vZGUsXG4gICAgcGFyZW50U3VzcGVuc2UsXG4gICAgcGFyZW50Q29tcG9uZW50LFxuICAgIGNvbnRhaW5lcixcbiAgICBoaWRkZW5Db250YWluZXIsXG4gICAgYW5jaG9yLFxuICAgIG5hbWVzcGFjZSxcbiAgICBzbG90U2NvcGVJZHMsXG4gICAgb3B0aW1pemVkLFxuICAgIHJlbmRlcmVySW50ZXJuYWxzXG4gICk7XG4gIHBhdGNoKFxuICAgIG51bGwsXG4gICAgc3VzcGVuc2UucGVuZGluZ0JyYW5jaCA9IHZub2RlLnNzQ29udGVudCxcbiAgICBoaWRkZW5Db250YWluZXIsXG4gICAgbnVsbCxcbiAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgc3VzcGVuc2UsXG4gICAgbmFtZXNwYWNlLFxuICAgIHNsb3RTY29wZUlkc1xuICApO1xuICBpZiAoc3VzcGVuc2UuZGVwcyA+IDApIHtcbiAgICB0cmlnZ2VyRXZlbnQodm5vZGUsIFwib25QZW5kaW5nXCIpO1xuICAgIHRyaWdnZXJFdmVudCh2bm9kZSwgXCJvbkZhbGxiYWNrXCIpO1xuICAgIHBhdGNoKFxuICAgICAgbnVsbCxcbiAgICAgIHZub2RlLnNzRmFsbGJhY2ssXG4gICAgICBjb250YWluZXIsXG4gICAgICBhbmNob3IsXG4gICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICBudWxsLFxuICAgICAgLy8gZmFsbGJhY2sgdHJlZSB3aWxsIG5vdCBoYXZlIHN1c3BlbnNlIGNvbnRleHRcbiAgICAgIG5hbWVzcGFjZSxcbiAgICAgIHNsb3RTY29wZUlkc1xuICAgICk7XG4gICAgc2V0QWN0aXZlQnJhbmNoKHN1c3BlbnNlLCB2bm9kZS5zc0ZhbGxiYWNrKTtcbiAgfSBlbHNlIHtcbiAgICBzdXNwZW5zZS5yZXNvbHZlKGZhbHNlLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gcGF0Y2hTdXNwZW5zZShuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIG5hbWVzcGFjZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQsIHsgcDogcGF0Y2gsIHVtOiB1bm1vdW50LCBvOiB7IGNyZWF0ZUVsZW1lbnQgfSB9KSB7XG4gIGNvbnN0IHN1c3BlbnNlID0gbjIuc3VzcGVuc2UgPSBuMS5zdXNwZW5zZTtcbiAgc3VzcGVuc2Uudm5vZGUgPSBuMjtcbiAgbjIuZWwgPSBuMS5lbDtcbiAgY29uc3QgbmV3QnJhbmNoID0gbjIuc3NDb250ZW50O1xuICBjb25zdCBuZXdGYWxsYmFjayA9IG4yLnNzRmFsbGJhY2s7XG4gIGNvbnN0IHsgYWN0aXZlQnJhbmNoLCBwZW5kaW5nQnJhbmNoLCBpc0luRmFsbGJhY2ssIGlzSHlkcmF0aW5nIH0gPSBzdXNwZW5zZTtcbiAgaWYgKHBlbmRpbmdCcmFuY2gpIHtcbiAgICBzdXNwZW5zZS5wZW5kaW5nQnJhbmNoID0gbmV3QnJhbmNoO1xuICAgIGlmIChpc1NhbWVWTm9kZVR5cGUobmV3QnJhbmNoLCBwZW5kaW5nQnJhbmNoKSkge1xuICAgICAgcGF0Y2goXG4gICAgICAgIHBlbmRpbmdCcmFuY2gsXG4gICAgICAgIG5ld0JyYW5jaCxcbiAgICAgICAgc3VzcGVuc2UuaGlkZGVuQ29udGFpbmVyLFxuICAgICAgICBudWxsLFxuICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgIHN1c3BlbnNlLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgb3B0aW1pemVkXG4gICAgICApO1xuICAgICAgaWYgKHN1c3BlbnNlLmRlcHMgPD0gMCkge1xuICAgICAgICBzdXNwZW5zZS5yZXNvbHZlKCk7XG4gICAgICB9IGVsc2UgaWYgKGlzSW5GYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgICAgICAgcGF0Y2goXG4gICAgICAgICAgICBhY3RpdmVCcmFuY2gsXG4gICAgICAgICAgICBuZXdGYWxsYmFjayxcbiAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAvLyBmYWxsYmFjayB0cmVlIHdpbGwgbm90IGhhdmUgc3VzcGVuc2UgY29udGV4dFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzZXRBY3RpdmVCcmFuY2goc3VzcGVuc2UsIG5ld0ZhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdXNwZW5zZS5wZW5kaW5nSWQgPSBzdXNwZW5zZUlkKys7XG4gICAgICBpZiAoaXNIeWRyYXRpbmcpIHtcbiAgICAgICAgc3VzcGVuc2UuaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgc3VzcGVuc2UuYWN0aXZlQnJhbmNoID0gcGVuZGluZ0JyYW5jaDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVubW91bnQocGVuZGluZ0JyYW5jaCwgcGFyZW50Q29tcG9uZW50LCBzdXNwZW5zZSk7XG4gICAgICB9XG4gICAgICBzdXNwZW5zZS5kZXBzID0gMDtcbiAgICAgIHN1c3BlbnNlLmVmZmVjdHMubGVuZ3RoID0gMDtcbiAgICAgIHN1c3BlbnNlLmhpZGRlbkNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBpZiAoaXNJbkZhbGxiYWNrKSB7XG4gICAgICAgIHBhdGNoKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgbmV3QnJhbmNoLFxuICAgICAgICAgIHN1c3BlbnNlLmhpZGRlbkNvbnRhaW5lcixcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBzdXNwZW5zZSxcbiAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICApO1xuICAgICAgICBpZiAoc3VzcGVuc2UuZGVwcyA8PSAwKSB7XG4gICAgICAgICAgc3VzcGVuc2UucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhdGNoKFxuICAgICAgICAgICAgYWN0aXZlQnJhbmNoLFxuICAgICAgICAgICAgbmV3RmFsbGJhY2ssXG4gICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgLy8gZmFsbGJhY2sgdHJlZSB3aWxsIG5vdCBoYXZlIHN1c3BlbnNlIGNvbnRleHRcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICAgICk7XG4gICAgICAgICAgc2V0QWN0aXZlQnJhbmNoKHN1c3BlbnNlLCBuZXdGYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlQnJhbmNoICYmIGlzU2FtZVZOb2RlVHlwZShuZXdCcmFuY2gsIGFjdGl2ZUJyYW5jaCkpIHtcbiAgICAgICAgcGF0Y2goXG4gICAgICAgICAgYWN0aXZlQnJhbmNoLFxuICAgICAgICAgIG5ld0JyYW5jaCxcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBzdXNwZW5zZSxcbiAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICApO1xuICAgICAgICBzdXNwZW5zZS5yZXNvbHZlKHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0Y2goXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBuZXdCcmFuY2gsXG4gICAgICAgICAgc3VzcGVuc2UuaGlkZGVuQ29udGFpbmVyLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHN1c3BlbnNlLFxuICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzdXNwZW5zZS5kZXBzIDw9IDApIHtcbiAgICAgICAgICBzdXNwZW5zZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGFjdGl2ZUJyYW5jaCAmJiBpc1NhbWVWTm9kZVR5cGUobmV3QnJhbmNoLCBhY3RpdmVCcmFuY2gpKSB7XG4gICAgICBwYXRjaChcbiAgICAgICAgYWN0aXZlQnJhbmNoLFxuICAgICAgICBuZXdCcmFuY2gsXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgYW5jaG9yLFxuICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgIHN1c3BlbnNlLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgb3B0aW1pemVkXG4gICAgICApO1xuICAgICAgc2V0QWN0aXZlQnJhbmNoKHN1c3BlbnNlLCBuZXdCcmFuY2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmlnZ2VyRXZlbnQobjIsIFwib25QZW5kaW5nXCIpO1xuICAgICAgc3VzcGVuc2UucGVuZGluZ0JyYW5jaCA9IG5ld0JyYW5jaDtcbiAgICAgIGlmIChuZXdCcmFuY2guc2hhcGVGbGFnICYgNTEyKSB7XG4gICAgICAgIHN1c3BlbnNlLnBlbmRpbmdJZCA9IG5ld0JyYW5jaC5jb21wb25lbnQuc3VzcGVuc2VJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1c3BlbnNlLnBlbmRpbmdJZCA9IHN1c3BlbnNlSWQrKztcbiAgICAgIH1cbiAgICAgIHBhdGNoKFxuICAgICAgICBudWxsLFxuICAgICAgICBuZXdCcmFuY2gsXG4gICAgICAgIHN1c3BlbnNlLmhpZGRlbkNvbnRhaW5lcixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICBzdXNwZW5zZSxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgIG9wdGltaXplZFxuICAgICAgKTtcbiAgICAgIGlmIChzdXNwZW5zZS5kZXBzIDw9IDApIHtcbiAgICAgICAgc3VzcGVuc2UucmVzb2x2ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyB0aW1lb3V0LCBwZW5kaW5nSWQgfSA9IHN1c3BlbnNlO1xuICAgICAgICBpZiAodGltZW91dCA+IDApIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChzdXNwZW5zZS5wZW5kaW5nSWQgPT09IHBlbmRpbmdJZCkge1xuICAgICAgICAgICAgICBzdXNwZW5zZS5mYWxsYmFjayhuZXdGYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGltZW91dCA9PT0gMCkge1xuICAgICAgICAgIHN1c3BlbnNlLmZhbGxiYWNrKG5ld0ZhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxubGV0IGhhc1dhcm5lZCA9IGZhbHNlO1xuZnVuY3Rpb24gY3JlYXRlU3VzcGVuc2VCb3VuZGFyeSh2bm9kZSwgcGFyZW50U3VzcGVuc2UsIHBhcmVudENvbXBvbmVudCwgY29udGFpbmVyLCBoaWRkZW5Db250YWluZXIsIGFuY2hvciwgbmFtZXNwYWNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgcmVuZGVyZXJJbnRlcm5hbHMsIGlzSHlkcmF0aW5nID0gZmFsc2UpIHtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgdHJ1ZSAmJiAhaGFzV2FybmVkKSB7XG4gICAgaGFzV2FybmVkID0gdHJ1ZTtcbiAgICBjb25zb2xlW2NvbnNvbGUuaW5mbyA/IFwiaW5mb1wiIDogXCJsb2dcIl0oXG4gICAgICBgPFN1c3BlbnNlPiBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZSBhbmQgaXRzIEFQSSB3aWxsIGxpa2VseSBjaGFuZ2UuYFxuICAgICk7XG4gIH1cbiAgY29uc3Qge1xuICAgIHA6IHBhdGNoLFxuICAgIG06IG1vdmUsXG4gICAgdW06IHVubW91bnQsXG4gICAgbjogbmV4dCxcbiAgICBvOiB7IHBhcmVudE5vZGUsIHJlbW92ZSB9XG4gIH0gPSByZW5kZXJlckludGVybmFscztcbiAgbGV0IHBhcmVudFN1c3BlbnNlSWQ7XG4gIGNvbnN0IGlzU3VzcGVuc2libGUgPSBpc1ZOb2RlU3VzcGVuc2libGUodm5vZGUpO1xuICBpZiAoaXNTdXNwZW5zaWJsZSkge1xuICAgIGlmIChwYXJlbnRTdXNwZW5zZSA9PSBudWxsID8gdm9pZCAwIDogcGFyZW50U3VzcGVuc2UucGVuZGluZ0JyYW5jaCkge1xuICAgICAgcGFyZW50U3VzcGVuc2VJZCA9IHBhcmVudFN1c3BlbnNlLnBlbmRpbmdJZDtcbiAgICAgIHBhcmVudFN1c3BlbnNlLmRlcHMrKztcbiAgICB9XG4gIH1cbiAgY29uc3QgdGltZW91dCA9IHZub2RlLnByb3BzID8gdG9OdW1iZXIodm5vZGUucHJvcHMudGltZW91dCkgOiB2b2lkIDA7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgYXNzZXJ0TnVtYmVyKHRpbWVvdXQsIGBTdXNwZW5zZSB0aW1lb3V0YCk7XG4gIH1cbiAgY29uc3QgaW5pdGlhbEFuY2hvciA9IGFuY2hvcjtcbiAgY29uc3Qgc3VzcGVuc2UgPSB7XG4gICAgdm5vZGUsXG4gICAgcGFyZW50OiBwYXJlbnRTdXNwZW5zZSxcbiAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgbmFtZXNwYWNlLFxuICAgIGNvbnRhaW5lcixcbiAgICBoaWRkZW5Db250YWluZXIsXG4gICAgZGVwczogMCxcbiAgICBwZW5kaW5nSWQ6IHN1c3BlbnNlSWQrKyxcbiAgICB0aW1lb3V0OiB0eXBlb2YgdGltZW91dCA9PT0gXCJudW1iZXJcIiA/IHRpbWVvdXQgOiAtMSxcbiAgICBhY3RpdmVCcmFuY2g6IG51bGwsXG4gICAgcGVuZGluZ0JyYW5jaDogbnVsbCxcbiAgICBpc0luRmFsbGJhY2s6ICFpc0h5ZHJhdGluZyxcbiAgICBpc0h5ZHJhdGluZyxcbiAgICBpc1VubW91bnRlZDogZmFsc2UsXG4gICAgZWZmZWN0czogW10sXG4gICAgcmVzb2x2ZShyZXN1bWUgPSBmYWxzZSwgc3luYyA9IGZhbHNlKSB7XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICBpZiAoIXJlc3VtZSAmJiAhc3VzcGVuc2UucGVuZGluZ0JyYW5jaCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBzdXNwZW5zZS5yZXNvbHZlKCkgaXMgY2FsbGVkIHdpdGhvdXQgYSBwZW5kaW5nIGJyYW5jaC5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3VzcGVuc2UuaXNVbm1vdW50ZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgc3VzcGVuc2UucmVzb2x2ZSgpIGlzIGNhbGxlZCBvbiBhbiBhbHJlYWR5IHVubW91bnRlZCBzdXNwZW5zZSBib3VuZGFyeS5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICB2bm9kZTogdm5vZGUyLFxuICAgICAgICBhY3RpdmVCcmFuY2gsXG4gICAgICAgIHBlbmRpbmdCcmFuY2gsXG4gICAgICAgIHBlbmRpbmdJZCxcbiAgICAgICAgZWZmZWN0cyxcbiAgICAgICAgcGFyZW50Q29tcG9uZW50OiBwYXJlbnRDb21wb25lbnQyLFxuICAgICAgICBjb250YWluZXI6IGNvbnRhaW5lcjJcbiAgICAgIH0gPSBzdXNwZW5zZTtcbiAgICAgIGxldCBkZWxheUVudGVyID0gZmFsc2U7XG4gICAgICBpZiAoc3VzcGVuc2UuaXNIeWRyYXRpbmcpIHtcbiAgICAgICAgc3VzcGVuc2UuaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoIXJlc3VtZSkge1xuICAgICAgICBkZWxheUVudGVyID0gYWN0aXZlQnJhbmNoICYmIHBlbmRpbmdCcmFuY2gudHJhbnNpdGlvbiAmJiBwZW5kaW5nQnJhbmNoLnRyYW5zaXRpb24ubW9kZSA9PT0gXCJvdXQtaW5cIjtcbiAgICAgICAgaWYgKGRlbGF5RW50ZXIpIHtcbiAgICAgICAgICBhY3RpdmVCcmFuY2gudHJhbnNpdGlvbi5hZnRlckxlYXZlID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBlbmRpbmdJZCA9PT0gc3VzcGVuc2UucGVuZGluZ0lkKSB7XG4gICAgICAgICAgICAgIG1vdmUoXG4gICAgICAgICAgICAgICAgcGVuZGluZ0JyYW5jaCxcbiAgICAgICAgICAgICAgICBjb250YWluZXIyLFxuICAgICAgICAgICAgICAgIGFuY2hvciA9PT0gaW5pdGlhbEFuY2hvciA/IG5leHQoYWN0aXZlQnJhbmNoKSA6IGFuY2hvcixcbiAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHF1ZXVlUG9zdEZsdXNoQ2IoZWZmZWN0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aXZlQnJhbmNoKSB7XG4gICAgICAgICAgaWYgKHBhcmVudE5vZGUoYWN0aXZlQnJhbmNoLmVsKSAhPT0gc3VzcGVuc2UuaGlkZGVuQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBhbmNob3IgPSBuZXh0KGFjdGl2ZUJyYW5jaCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHVubW91bnQoYWN0aXZlQnJhbmNoLCBwYXJlbnRDb21wb25lbnQyLCBzdXNwZW5zZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZWxheUVudGVyKSB7XG4gICAgICAgICAgbW92ZShwZW5kaW5nQnJhbmNoLCBjb250YWluZXIyLCBhbmNob3IsIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRBY3RpdmVCcmFuY2goc3VzcGVuc2UsIHBlbmRpbmdCcmFuY2gpO1xuICAgICAgc3VzcGVuc2UucGVuZGluZ0JyYW5jaCA9IG51bGw7XG4gICAgICBzdXNwZW5zZS5pc0luRmFsbGJhY2sgPSBmYWxzZTtcbiAgICAgIGxldCBwYXJlbnQgPSBzdXNwZW5zZS5wYXJlbnQ7XG4gICAgICBsZXQgaGFzVW5yZXNvbHZlZEFuY2VzdG9yID0gZmFsc2U7XG4gICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmIChwYXJlbnQucGVuZGluZ0JyYW5jaCkge1xuICAgICAgICAgIHBhcmVudC5lZmZlY3RzLnB1c2goLi4uZWZmZWN0cyk7XG4gICAgICAgICAgaGFzVW5yZXNvbHZlZEFuY2VzdG9yID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgICAgfVxuICAgICAgaWYgKCFoYXNVbnJlc29sdmVkQW5jZXN0b3IgJiYgIWRlbGF5RW50ZXIpIHtcbiAgICAgICAgcXVldWVQb3N0Rmx1c2hDYihlZmZlY3RzKTtcbiAgICAgIH1cbiAgICAgIHN1c3BlbnNlLmVmZmVjdHMgPSBbXTtcbiAgICAgIGlmIChpc1N1c3BlbnNpYmxlKSB7XG4gICAgICAgIGlmIChwYXJlbnRTdXNwZW5zZSAmJiBwYXJlbnRTdXNwZW5zZS5wZW5kaW5nQnJhbmNoICYmIHBhcmVudFN1c3BlbnNlSWQgPT09IHBhcmVudFN1c3BlbnNlLnBlbmRpbmdJZCkge1xuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLmRlcHMtLTtcbiAgICAgICAgICBpZiAocGFyZW50U3VzcGVuc2UuZGVwcyA9PT0gMCAmJiAhc3luYykge1xuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UucmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdHJpZ2dlckV2ZW50KHZub2RlMiwgXCJvblJlc29sdmVcIik7XG4gICAgfSxcbiAgICBmYWxsYmFjayhmYWxsYmFja1ZOb2RlKSB7XG4gICAgICBpZiAoIXN1c3BlbnNlLnBlbmRpbmdCcmFuY2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgeyB2bm9kZTogdm5vZGUyLCBhY3RpdmVCcmFuY2gsIHBhcmVudENvbXBvbmVudDogcGFyZW50Q29tcG9uZW50MiwgY29udGFpbmVyOiBjb250YWluZXIyLCBuYW1lc3BhY2U6IG5hbWVzcGFjZTIgfSA9IHN1c3BlbnNlO1xuICAgICAgdHJpZ2dlckV2ZW50KHZub2RlMiwgXCJvbkZhbGxiYWNrXCIpO1xuICAgICAgY29uc3QgYW5jaG9yMiA9IG5leHQoYWN0aXZlQnJhbmNoKTtcbiAgICAgIGNvbnN0IG1vdW50RmFsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgIGlmICghc3VzcGVuc2UuaXNJbkZhbGxiYWNrKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHBhdGNoKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgZmFsbGJhY2tWTm9kZSxcbiAgICAgICAgICBjb250YWluZXIyLFxuICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50MixcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIC8vIGZhbGxiYWNrIHRyZWUgd2lsbCBub3QgaGF2ZSBzdXNwZW5zZSBjb250ZXh0XG4gICAgICAgICAgbmFtZXNwYWNlMixcbiAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICk7XG4gICAgICAgIHNldEFjdGl2ZUJyYW5jaChzdXNwZW5zZSwgZmFsbGJhY2tWTm9kZSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgZGVsYXlFbnRlciA9IGZhbGxiYWNrVk5vZGUudHJhbnNpdGlvbiAmJiBmYWxsYmFja1ZOb2RlLnRyYW5zaXRpb24ubW9kZSA9PT0gXCJvdXQtaW5cIjtcbiAgICAgIGlmIChkZWxheUVudGVyKSB7XG4gICAgICAgIGFjdGl2ZUJyYW5jaC50cmFuc2l0aW9uLmFmdGVyTGVhdmUgPSBtb3VudEZhbGxiYWNrO1xuICAgICAgfVxuICAgICAgc3VzcGVuc2UuaXNJbkZhbGxiYWNrID0gdHJ1ZTtcbiAgICAgIHVubW91bnQoXG4gICAgICAgIGFjdGl2ZUJyYW5jaCxcbiAgICAgICAgcGFyZW50Q29tcG9uZW50MixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gbm8gc3VzcGVuc2Ugc28gdW5tb3VudCBob29rcyBmaXJlIG5vd1xuICAgICAgICB0cnVlXG4gICAgICAgIC8vIHNob3VsZFJlbW92ZVxuICAgICAgKTtcbiAgICAgIGlmICghZGVsYXlFbnRlcikge1xuICAgICAgICBtb3VudEZhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtb3ZlKGNvbnRhaW5lcjIsIGFuY2hvcjIsIHR5cGUpIHtcbiAgICAgIHN1c3BlbnNlLmFjdGl2ZUJyYW5jaCAmJiBtb3ZlKHN1c3BlbnNlLmFjdGl2ZUJyYW5jaCwgY29udGFpbmVyMiwgYW5jaG9yMiwgdHlwZSk7XG4gICAgICBzdXNwZW5zZS5jb250YWluZXIgPSBjb250YWluZXIyO1xuICAgIH0sXG4gICAgbmV4dCgpIHtcbiAgICAgIHJldHVybiBzdXNwZW5zZS5hY3RpdmVCcmFuY2ggJiYgbmV4dChzdXNwZW5zZS5hY3RpdmVCcmFuY2gpO1xuICAgIH0sXG4gICAgcmVnaXN0ZXJEZXAoaW5zdGFuY2UsIHNldHVwUmVuZGVyRWZmZWN0KSB7XG4gICAgICBjb25zdCBpc0luUGVuZGluZ1N1c3BlbnNlID0gISFzdXNwZW5zZS5wZW5kaW5nQnJhbmNoO1xuICAgICAgaWYgKGlzSW5QZW5kaW5nU3VzcGVuc2UpIHtcbiAgICAgICAgc3VzcGVuc2UuZGVwcysrO1xuICAgICAgfVxuICAgICAgY29uc3QgaHlkcmF0ZWRFbCA9IGluc3RhbmNlLnZub2RlLmVsO1xuICAgICAgaW5zdGFuY2UuYXN5bmNEZXAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnIsIGluc3RhbmNlLCAwKTtcbiAgICAgIH0pLnRoZW4oKGFzeW5jU2V0dXBSZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKGluc3RhbmNlLmlzVW5tb3VudGVkIHx8IHN1c3BlbnNlLmlzVW5tb3VudGVkIHx8IHN1c3BlbnNlLnBlbmRpbmdJZCAhPT0gaW5zdGFuY2Uuc3VzcGVuc2VJZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZS5hc3luY1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgeyB2bm9kZTogdm5vZGUyIH0gPSBpbnN0YW5jZTtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICBwdXNoV2FybmluZ0NvbnRleHQodm5vZGUyKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVTZXR1cFJlc3VsdChpbnN0YW5jZSwgYXN5bmNTZXR1cFJlc3VsdCwgZmFsc2UpO1xuICAgICAgICBpZiAoaHlkcmF0ZWRFbCkge1xuICAgICAgICAgIHZub2RlMi5lbCA9IGh5ZHJhdGVkRWw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSAhaHlkcmF0ZWRFbCAmJiBpbnN0YW5jZS5zdWJUcmVlLmVsO1xuICAgICAgICBzZXR1cFJlbmRlckVmZmVjdChcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICB2bm9kZTIsXG4gICAgICAgICAgLy8gY29tcG9uZW50IG1heSBoYXZlIGJlZW4gbW92ZWQgYmVmb3JlIHJlc29sdmUuXG4gICAgICAgICAgLy8gaWYgdGhpcyBpcyBub3QgYSBoeWRyYXRpb24sIGluc3RhbmNlLnN1YlRyZWUgd2lsbCBiZSB0aGUgY29tbWVudFxuICAgICAgICAgIC8vIHBsYWNlaG9sZGVyLlxuICAgICAgICAgIHBhcmVudE5vZGUoaHlkcmF0ZWRFbCB8fCBpbnN0YW5jZS5zdWJUcmVlLmVsKSxcbiAgICAgICAgICAvLyBhbmNob3Igd2lsbCBub3QgYmUgdXNlZCBpZiB0aGlzIGlzIGh5ZHJhdGlvbiwgc28gb25seSBuZWVkIHRvXG4gICAgICAgICAgLy8gY29uc2lkZXIgdGhlIGNvbW1lbnQgcGxhY2Vob2xkZXIgY2FzZS5cbiAgICAgICAgICBoeWRyYXRlZEVsID8gbnVsbCA6IG5leHQoaW5zdGFuY2Uuc3ViVHJlZSksXG4gICAgICAgICAgc3VzcGVuc2UsXG4gICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICApO1xuICAgICAgICBpZiAocGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICByZW1vdmUocGxhY2Vob2xkZXIpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZUhPQ0hvc3RFbChpbnN0YW5jZSwgdm5vZGUyLmVsKTtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICBwb3BXYXJuaW5nQ29udGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0luUGVuZGluZ1N1c3BlbnNlICYmIC0tc3VzcGVuc2UuZGVwcyA9PT0gMCkge1xuICAgICAgICAgIHN1c3BlbnNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICB1bm1vdW50KHBhcmVudFN1c3BlbnNlMiwgZG9SZW1vdmUpIHtcbiAgICAgIHN1c3BlbnNlLmlzVW5tb3VudGVkID0gdHJ1ZTtcbiAgICAgIGlmIChzdXNwZW5zZS5hY3RpdmVCcmFuY2gpIHtcbiAgICAgICAgdW5tb3VudChcbiAgICAgICAgICBzdXNwZW5zZS5hY3RpdmVCcmFuY2gsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlMixcbiAgICAgICAgICBkb1JlbW92ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHN1c3BlbnNlLnBlbmRpbmdCcmFuY2gpIHtcbiAgICAgICAgdW5tb3VudChcbiAgICAgICAgICBzdXNwZW5zZS5wZW5kaW5nQnJhbmNoLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZTIsXG4gICAgICAgICAgZG9SZW1vdmVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiBzdXNwZW5zZTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVTdXNwZW5zZShub2RlLCB2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgbmFtZXNwYWNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgcmVuZGVyZXJJbnRlcm5hbHMsIGh5ZHJhdGVOb2RlKSB7XG4gIGNvbnN0IHN1c3BlbnNlID0gdm5vZGUuc3VzcGVuc2UgPSBjcmVhdGVTdXNwZW5zZUJvdW5kYXJ5KFxuICAgIHZub2RlLFxuICAgIHBhcmVudFN1c3BlbnNlLFxuICAgIHBhcmVudENvbXBvbmVudCxcbiAgICBub2RlLnBhcmVudE5vZGUsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgbnVsbCxcbiAgICBuYW1lc3BhY2UsXG4gICAgc2xvdFNjb3BlSWRzLFxuICAgIG9wdGltaXplZCxcbiAgICByZW5kZXJlckludGVybmFscyxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IHJlc3VsdCA9IGh5ZHJhdGVOb2RlKFxuICAgIG5vZGUsXG4gICAgc3VzcGVuc2UucGVuZGluZ0JyYW5jaCA9IHZub2RlLnNzQ29udGVudCxcbiAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgc3VzcGVuc2UsXG4gICAgc2xvdFNjb3BlSWRzLFxuICAgIG9wdGltaXplZFxuICApO1xuICBpZiAoc3VzcGVuc2UuZGVwcyA9PT0gMCkge1xuICAgIHN1c3BlbnNlLnJlc29sdmUoZmFsc2UsIHRydWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBub3JtYWxpemVTdXNwZW5zZUNoaWxkcmVuKHZub2RlKSB7XG4gIGNvbnN0IHsgc2hhcGVGbGFnLCBjaGlsZHJlbiB9ID0gdm5vZGU7XG4gIGNvbnN0IGlzU2xvdENoaWxkcmVuID0gc2hhcGVGbGFnICYgMzI7XG4gIHZub2RlLnNzQ29udGVudCA9IG5vcm1hbGl6ZVN1c3BlbnNlU2xvdChcbiAgICBpc1Nsb3RDaGlsZHJlbiA/IGNoaWxkcmVuLmRlZmF1bHQgOiBjaGlsZHJlblxuICApO1xuICB2bm9kZS5zc0ZhbGxiYWNrID0gaXNTbG90Q2hpbGRyZW4gPyBub3JtYWxpemVTdXNwZW5zZVNsb3QoY2hpbGRyZW4uZmFsbGJhY2spIDogY3JlYXRlVk5vZGUoQ29tbWVudCk7XG59XG5mdW5jdGlvbiBub3JtYWxpemVTdXNwZW5zZVNsb3Qocykge1xuICBsZXQgYmxvY2s7XG4gIGlmIChpc0Z1bmN0aW9uKHMpKSB7XG4gICAgY29uc3QgdHJhY2tCbG9jayA9IGlzQmxvY2tUcmVlRW5hYmxlZCAmJiBzLl9jO1xuICAgIGlmICh0cmFja0Jsb2NrKSB7XG4gICAgICBzLl9kID0gZmFsc2U7XG4gICAgICBvcGVuQmxvY2soKTtcbiAgICB9XG4gICAgcyA9IHMoKTtcbiAgICBpZiAodHJhY2tCbG9jaykge1xuICAgICAgcy5fZCA9IHRydWU7XG4gICAgICBibG9jayA9IGN1cnJlbnRCbG9jaztcbiAgICAgIGNsb3NlQmxvY2soKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzQXJyYXkocykpIHtcbiAgICBjb25zdCBzaW5nbGVDaGlsZCA9IGZpbHRlclNpbmdsZVJvb3Qocyk7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIXNpbmdsZUNoaWxkICYmIHMuZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQgIT09IE5VTExfRFlOQU1JQ19DT01QT05FTlQpLmxlbmd0aCA+IDApIHtcbiAgICAgIHdhcm4kMShgPFN1c3BlbnNlPiBzbG90cyBleHBlY3QgYSBzaW5nbGUgcm9vdCBub2RlLmApO1xuICAgIH1cbiAgICBzID0gc2luZ2xlQ2hpbGQ7XG4gIH1cbiAgcyA9IG5vcm1hbGl6ZVZOb2RlKHMpO1xuICBpZiAoYmxvY2sgJiYgIXMuZHluYW1pY0NoaWxkcmVuKSB7XG4gICAgcy5keW5hbWljQ2hpbGRyZW4gPSBibG9jay5maWx0ZXIoKGMpID0+IGMgIT09IHMpO1xuICB9XG4gIHJldHVybiBzO1xufVxuZnVuY3Rpb24gcXVldWVFZmZlY3RXaXRoU3VzcGVuc2UoZm4sIHN1c3BlbnNlKSB7XG4gIGlmIChzdXNwZW5zZSAmJiBzdXNwZW5zZS5wZW5kaW5nQnJhbmNoKSB7XG4gICAgaWYgKGlzQXJyYXkoZm4pKSB7XG4gICAgICBzdXNwZW5zZS5lZmZlY3RzLnB1c2goLi4uZm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdXNwZW5zZS5lZmZlY3RzLnB1c2goZm4pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBxdWV1ZVBvc3RGbHVzaENiKGZuKTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0QWN0aXZlQnJhbmNoKHN1c3BlbnNlLCBicmFuY2gpIHtcbiAgc3VzcGVuc2UuYWN0aXZlQnJhbmNoID0gYnJhbmNoO1xuICBjb25zdCB7IHZub2RlLCBwYXJlbnRDb21wb25lbnQgfSA9IHN1c3BlbnNlO1xuICBsZXQgZWwgPSBicmFuY2guZWw7XG4gIHdoaWxlICghZWwgJiYgYnJhbmNoLmNvbXBvbmVudCkge1xuICAgIGJyYW5jaCA9IGJyYW5jaC5jb21wb25lbnQuc3ViVHJlZTtcbiAgICBlbCA9IGJyYW5jaC5lbDtcbiAgfVxuICB2bm9kZS5lbCA9IGVsO1xuICBpZiAocGFyZW50Q29tcG9uZW50ICYmIHBhcmVudENvbXBvbmVudC5zdWJUcmVlID09PSB2bm9kZSkge1xuICAgIHBhcmVudENvbXBvbmVudC52bm9kZS5lbCA9IGVsO1xuICAgIHVwZGF0ZUhPQ0hvc3RFbChwYXJlbnRDb21wb25lbnQsIGVsKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNWTm9kZVN1c3BlbnNpYmxlKHZub2RlKSB7XG4gIHZhciBfYTtcbiAgcmV0dXJuICgoX2EgPSB2bm9kZS5wcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnN1c3BlbnNpYmxlKSAhPSBudWxsICYmIHZub2RlLnByb3BzLnN1c3BlbnNpYmxlICE9PSBmYWxzZTtcbn1cblxuY29uc3Qgc3NyQ29udGV4dEtleSA9IFN5bWJvbC5mb3IoXCJ2LXNjeFwiKTtcbmNvbnN0IHVzZVNTUkNvbnRleHQgPSAoKSA9PiB7XG4gIHtcbiAgICBjb25zdCBjdHggPSBpbmplY3Qoc3NyQ29udGV4dEtleSk7XG4gICAgaWYgKCFjdHgpIHtcbiAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgd2FybiQxKFxuICAgICAgICBgU2VydmVyIHJlbmRlcmluZyBjb250ZXh0IG5vdCBwcm92aWRlZC4gTWFrZSBzdXJlIHRvIG9ubHkgY2FsbCB1c2VTU1JDb250ZXh0KCkgY29uZGl0aW9uYWxseSBpbiB0aGUgc2VydmVyIGJ1aWxkLmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjdHg7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHdhdGNoRWZmZWN0KGVmZmVjdCwgb3B0aW9ucykge1xuICByZXR1cm4gZG9XYXRjaChlZmZlY3QsIG51bGwsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gd2F0Y2hQb3N0RWZmZWN0KGVmZmVjdCwgb3B0aW9ucykge1xuICByZXR1cm4gZG9XYXRjaChcbiAgICBlZmZlY3QsXG4gICAgbnVsbCxcbiAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gZXh0ZW5kKHt9LCBvcHRpb25zLCB7IGZsdXNoOiBcInBvc3RcIiB9KSA6IHsgZmx1c2g6IFwicG9zdFwiIH1cbiAgKTtcbn1cbmZ1bmN0aW9uIHdhdGNoU3luY0VmZmVjdChlZmZlY3QsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGRvV2F0Y2goXG4gICAgZWZmZWN0LFxuICAgIG51bGwsXG4gICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IGV4dGVuZCh7fSwgb3B0aW9ucywgeyBmbHVzaDogXCJzeW5jXCIgfSkgOiB7IGZsdXNoOiBcInN5bmNcIiB9XG4gICk7XG59XG5jb25zdCBJTklUSUFMX1dBVENIRVJfVkFMVUUgPSB7fTtcbmZ1bmN0aW9uIHdhdGNoKHNvdXJjZSwgY2IsIG9wdGlvbnMpIHtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWlzRnVuY3Rpb24oY2IpKSB7XG4gICAgd2FybiQxKFxuICAgICAgYFxcYHdhdGNoKGZuLCBvcHRpb25zPylcXGAgc2lnbmF0dXJlIGhhcyBiZWVuIG1vdmVkIHRvIGEgc2VwYXJhdGUgQVBJLiBVc2UgXFxgd2F0Y2hFZmZlY3QoZm4sIG9wdGlvbnM/KVxcYCBpbnN0ZWFkLiBcXGB3YXRjaFxcYCBub3cgb25seSBzdXBwb3J0cyBcXGB3YXRjaChzb3VyY2UsIGNiLCBvcHRpb25zPykgc2lnbmF0dXJlLmBcbiAgICApO1xuICB9XG4gIHJldHVybiBkb1dhdGNoKHNvdXJjZSwgY2IsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gZG9XYXRjaChzb3VyY2UsIGNiLCB7XG4gIGltbWVkaWF0ZSxcbiAgZGVlcCxcbiAgZmx1c2gsXG4gIG9uY2UsXG4gIG9uVHJhY2ssXG4gIG9uVHJpZ2dlclxufSA9IEVNUFRZX09CSikge1xuICBpZiAoY2IgJiYgb25jZSkge1xuICAgIGNvbnN0IF9jYiA9IGNiO1xuICAgIGNiID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgIF9jYiguLi5hcmdzKTtcbiAgICAgIHVud2F0Y2goKTtcbiAgICB9O1xuICB9XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGRlZXAgIT09IHZvaWQgMCAmJiB0eXBlb2YgZGVlcCA9PT0gXCJudW1iZXJcIikge1xuICAgIHdhcm4kMShcbiAgICAgIGB3YXRjaCgpIFwiZGVlcFwiIG9wdGlvbiB3aXRoIG51bWJlciB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgd2F0Y2ggZGVwdGggaW4gZnV0dXJlIHZlcnNpb25zLiBQbGVhc2UgdXNlIGEgYm9vbGVhbiBpbnN0ZWFkIHRvIGF2b2lkIHBvdGVudGlhbCBicmVha2FnZS5gXG4gICAgKTtcbiAgfVxuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhY2IpIHtcbiAgICBpZiAoaW1tZWRpYXRlICE9PSB2b2lkIDApIHtcbiAgICAgIHdhcm4kMShcbiAgICAgICAgYHdhdGNoKCkgXCJpbW1lZGlhdGVcIiBvcHRpb24gaXMgb25seSByZXNwZWN0ZWQgd2hlbiB1c2luZyB0aGUgd2F0Y2goc291cmNlLCBjYWxsYmFjaywgb3B0aW9ucz8pIHNpZ25hdHVyZS5gXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGVlcCAhPT0gdm9pZCAwKSB7XG4gICAgICB3YXJuJDEoXG4gICAgICAgIGB3YXRjaCgpIFwiZGVlcFwiIG9wdGlvbiBpcyBvbmx5IHJlc3BlY3RlZCB3aGVuIHVzaW5nIHRoZSB3YXRjaChzb3VyY2UsIGNhbGxiYWNrLCBvcHRpb25zPykgc2lnbmF0dXJlLmBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvbmNlICE9PSB2b2lkIDApIHtcbiAgICAgIHdhcm4kMShcbiAgICAgICAgYHdhdGNoKCkgXCJvbmNlXCIgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgdGhlIHdhdGNoKHNvdXJjZSwgY2FsbGJhY2ssIG9wdGlvbnM/KSBzaWduYXR1cmUuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgd2FybkludmFsaWRTb3VyY2UgPSAocykgPT4ge1xuICAgIHdhcm4kMShcbiAgICAgIGBJbnZhbGlkIHdhdGNoIHNvdXJjZTogYCxcbiAgICAgIHMsXG4gICAgICBgQSB3YXRjaCBzb3VyY2UgY2FuIG9ubHkgYmUgYSBnZXR0ZXIvZWZmZWN0IGZ1bmN0aW9uLCBhIHJlZiwgYSByZWFjdGl2ZSBvYmplY3QsIG9yIGFuIGFycmF5IG9mIHRoZXNlIHR5cGVzLmBcbiAgICApO1xuICB9O1xuICBjb25zdCBpbnN0YW5jZSA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgY29uc3QgcmVhY3RpdmVHZXR0ZXIgPSAoc291cmNlMikgPT4gZGVlcCA9PT0gdHJ1ZSA/IHNvdXJjZTIgOiAoXG4gICAgLy8gZm9yIGRlZXA6IGZhbHNlLCBvbmx5IHRyYXZlcnNlIHJvb3QtbGV2ZWwgcHJvcGVydGllc1xuICAgIHRyYXZlcnNlKHNvdXJjZTIsIGRlZXAgPT09IGZhbHNlID8gMSA6IHZvaWQgMClcbiAgKTtcbiAgbGV0IGdldHRlcjtcbiAgbGV0IGZvcmNlVHJpZ2dlciA9IGZhbHNlO1xuICBsZXQgaXNNdWx0aVNvdXJjZSA9IGZhbHNlO1xuICBpZiAoaXNSZWYoc291cmNlKSkge1xuICAgIGdldHRlciA9ICgpID0+IHNvdXJjZS52YWx1ZTtcbiAgICBmb3JjZVRyaWdnZXIgPSBpc1NoYWxsb3coc291cmNlKTtcbiAgfSBlbHNlIGlmIChpc1JlYWN0aXZlKHNvdXJjZSkpIHtcbiAgICBnZXR0ZXIgPSAoKSA9PiByZWFjdGl2ZUdldHRlcihzb3VyY2UpO1xuICAgIGZvcmNlVHJpZ2dlciA9IHRydWU7XG4gIH0gZWxzZSBpZiAoaXNBcnJheShzb3VyY2UpKSB7XG4gICAgaXNNdWx0aVNvdXJjZSA9IHRydWU7XG4gICAgZm9yY2VUcmlnZ2VyID0gc291cmNlLnNvbWUoKHMpID0+IGlzUmVhY3RpdmUocykgfHwgaXNTaGFsbG93KHMpKTtcbiAgICBnZXR0ZXIgPSAoKSA9PiBzb3VyY2UubWFwKChzKSA9PiB7XG4gICAgICBpZiAoaXNSZWYocykpIHtcbiAgICAgICAgcmV0dXJuIHMudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKGlzUmVhY3RpdmUocykpIHtcbiAgICAgICAgcmV0dXJuIHJlYWN0aXZlR2V0dGVyKHMpO1xuICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHMpKSB7XG4gICAgICAgIHJldHVybiBjYWxsV2l0aEVycm9ySGFuZGxpbmcocywgaW5zdGFuY2UsIDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB3YXJuSW52YWxpZFNvdXJjZShzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHNvdXJjZSkpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIGdldHRlciA9ICgpID0+IGNhbGxXaXRoRXJyb3JIYW5kbGluZyhzb3VyY2UsIGluc3RhbmNlLCAyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2V0dGVyID0gKCkgPT4ge1xuICAgICAgICBpZiAoY2xlYW51cCkge1xuICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIDMsXG4gICAgICAgICAgW29uQ2xlYW51cF1cbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGdldHRlciA9IE5PT1A7XG4gICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB3YXJuSW52YWxpZFNvdXJjZShzb3VyY2UpO1xuICB9XG4gIGlmIChjYiAmJiBkZWVwKSB7XG4gICAgY29uc3QgYmFzZUdldHRlciA9IGdldHRlcjtcbiAgICBnZXR0ZXIgPSAoKSA9PiB0cmF2ZXJzZShiYXNlR2V0dGVyKCkpO1xuICB9XG4gIGxldCBjbGVhbnVwO1xuICBsZXQgb25DbGVhbnVwID0gKGZuKSA9PiB7XG4gICAgY2xlYW51cCA9IGVmZmVjdC5vblN0b3AgPSAoKSA9PiB7XG4gICAgICBjYWxsV2l0aEVycm9ySGFuZGxpbmcoZm4sIGluc3RhbmNlLCA0KTtcbiAgICAgIGNsZWFudXAgPSBlZmZlY3Qub25TdG9wID0gdm9pZCAwO1xuICAgIH07XG4gIH07XG4gIGxldCBzc3JDbGVhbnVwO1xuICBpZiAoaXNJblNTUkNvbXBvbmVudFNldHVwKSB7XG4gICAgb25DbGVhbnVwID0gTk9PUDtcbiAgICBpZiAoIWNiKSB7XG4gICAgICBnZXR0ZXIoKTtcbiAgICB9IGVsc2UgaWYgKGltbWVkaWF0ZSkge1xuICAgICAgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoY2IsIGluc3RhbmNlLCAzLCBbXG4gICAgICAgIGdldHRlcigpLFxuICAgICAgICBpc011bHRpU291cmNlID8gW10gOiB2b2lkIDAsXG4gICAgICAgIG9uQ2xlYW51cFxuICAgICAgXSk7XG4gICAgfVxuICAgIGlmIChmbHVzaCA9PT0gXCJzeW5jXCIpIHtcbiAgICAgIGNvbnN0IGN0eCA9IHVzZVNTUkNvbnRleHQoKTtcbiAgICAgIHNzckNsZWFudXAgPSBjdHguX193YXRjaGVySGFuZGxlcyB8fCAoY3R4Ll9fd2F0Y2hlckhhbmRsZXMgPSBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBOT09QO1xuICAgIH1cbiAgfVxuICBsZXQgb2xkVmFsdWUgPSBpc011bHRpU291cmNlID8gbmV3IEFycmF5KHNvdXJjZS5sZW5ndGgpLmZpbGwoSU5JVElBTF9XQVRDSEVSX1ZBTFVFKSA6IElOSVRJQUxfV0FUQ0hFUl9WQUxVRTtcbiAgY29uc3Qgam9iID0gKCkgPT4ge1xuICAgIGlmICghZWZmZWN0LmFjdGl2ZSB8fCAhZWZmZWN0LmRpcnR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjYikge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBlZmZlY3QucnVuKCk7XG4gICAgICBpZiAoZGVlcCB8fCBmb3JjZVRyaWdnZXIgfHwgKGlzTXVsdGlTb3VyY2UgPyBuZXdWYWx1ZS5zb21lKCh2LCBpKSA9PiBoYXNDaGFuZ2VkKHYsIG9sZFZhbHVlW2ldKSkgOiBoYXNDaGFuZ2VkKG5ld1ZhbHVlLCBvbGRWYWx1ZSkpIHx8IGZhbHNlKSB7XG4gICAgICAgIGlmIChjbGVhbnVwKSB7XG4gICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKGNiLCBpbnN0YW5jZSwgMywgW1xuICAgICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICAgIC8vIHBhc3MgdW5kZWZpbmVkIGFzIHRoZSBvbGQgdmFsdWUgd2hlbiBpdCdzIGNoYW5nZWQgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgb2xkVmFsdWUgPT09IElOSVRJQUxfV0FUQ0hFUl9WQUxVRSA/IHZvaWQgMCA6IGlzTXVsdGlTb3VyY2UgJiYgb2xkVmFsdWVbMF0gPT09IElOSVRJQUxfV0FUQ0hFUl9WQUxVRSA/IFtdIDogb2xkVmFsdWUsXG4gICAgICAgICAgb25DbGVhbnVwXG4gICAgICAgIF0pO1xuICAgICAgICBvbGRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlZmZlY3QucnVuKCk7XG4gICAgfVxuICB9O1xuICBqb2IuYWxsb3dSZWN1cnNlID0gISFjYjtcbiAgbGV0IHNjaGVkdWxlcjtcbiAgaWYgKGZsdXNoID09PSBcInN5bmNcIikge1xuICAgIHNjaGVkdWxlciA9IGpvYjtcbiAgfSBlbHNlIGlmIChmbHVzaCA9PT0gXCJwb3N0XCIpIHtcbiAgICBzY2hlZHVsZXIgPSAoKSA9PiBxdWV1ZVBvc3RSZW5kZXJFZmZlY3Qoam9iLCBpbnN0YW5jZSAmJiBpbnN0YW5jZS5zdXNwZW5zZSk7XG4gIH0gZWxzZSB7XG4gICAgam9iLnByZSA9IHRydWU7XG4gICAgaWYgKGluc3RhbmNlKVxuICAgICAgam9iLmlkID0gaW5zdGFuY2UudWlkO1xuICAgIHNjaGVkdWxlciA9ICgpID0+IHF1ZXVlSm9iKGpvYik7XG4gIH1cbiAgY29uc3QgZWZmZWN0ID0gbmV3IFJlYWN0aXZlRWZmZWN0KGdldHRlciwgTk9PUCwgc2NoZWR1bGVyKTtcbiAgY29uc3Qgc2NvcGUgPSBnZXRDdXJyZW50U2NvcGUoKTtcbiAgY29uc3QgdW53YXRjaCA9ICgpID0+IHtcbiAgICBlZmZlY3Quc3RvcCgpO1xuICAgIGlmIChzY29wZSkge1xuICAgICAgcmVtb3ZlKHNjb3BlLmVmZmVjdHMsIGVmZmVjdCk7XG4gICAgfVxuICB9O1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIGVmZmVjdC5vblRyYWNrID0gb25UcmFjaztcbiAgICBlZmZlY3Qub25UcmlnZ2VyID0gb25UcmlnZ2VyO1xuICB9XG4gIGlmIChjYikge1xuICAgIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgIGpvYigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGRWYWx1ZSA9IGVmZmVjdC5ydW4oKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZmx1c2ggPT09IFwicG9zdFwiKSB7XG4gICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KFxuICAgICAgZWZmZWN0LnJ1bi5iaW5kKGVmZmVjdCksXG4gICAgICBpbnN0YW5jZSAmJiBpbnN0YW5jZS5zdXNwZW5zZVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZWZmZWN0LnJ1bigpO1xuICB9XG4gIGlmIChzc3JDbGVhbnVwKVxuICAgIHNzckNsZWFudXAucHVzaCh1bndhdGNoKTtcbiAgcmV0dXJuIHVud2F0Y2g7XG59XG5mdW5jdGlvbiBpbnN0YW5jZVdhdGNoKHNvdXJjZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgY29uc3QgcHVibGljVGhpcyA9IHRoaXMucHJveHk7XG4gIGNvbnN0IGdldHRlciA9IGlzU3RyaW5nKHNvdXJjZSkgPyBzb3VyY2UuaW5jbHVkZXMoXCIuXCIpID8gY3JlYXRlUGF0aEdldHRlcihwdWJsaWNUaGlzLCBzb3VyY2UpIDogKCkgPT4gcHVibGljVGhpc1tzb3VyY2VdIDogc291cmNlLmJpbmQocHVibGljVGhpcywgcHVibGljVGhpcyk7XG4gIGxldCBjYjtcbiAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgY2IgPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBjYiA9IHZhbHVlLmhhbmRsZXI7XG4gICAgb3B0aW9ucyA9IHZhbHVlO1xuICB9XG4gIGNvbnN0IHJlc2V0ID0gc2V0Q3VycmVudEluc3RhbmNlKHRoaXMpO1xuICBjb25zdCByZXMgPSBkb1dhdGNoKGdldHRlciwgY2IuYmluZChwdWJsaWNUaGlzKSwgb3B0aW9ucyk7XG4gIHJlc2V0KCk7XG4gIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBjcmVhdGVQYXRoR2V0dGVyKGN0eCwgcGF0aCkge1xuICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGxldCBjdXIgPSBjdHg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGggJiYgY3VyOyBpKyspIHtcbiAgICAgIGN1ciA9IGN1cltzZWdtZW50c1tpXV07XG4gICAgfVxuICAgIHJldHVybiBjdXI7XG4gIH07XG59XG5mdW5jdGlvbiB0cmF2ZXJzZSh2YWx1ZSwgZGVwdGgsIGN1cnJlbnREZXB0aCA9IDAsIHNlZW4pIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgdmFsdWVbXCJfX3Zfc2tpcFwiXSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoZGVwdGggJiYgZGVwdGggPiAwKSB7XG4gICAgaWYgKGN1cnJlbnREZXB0aCA+PSBkZXB0aCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBjdXJyZW50RGVwdGgrKztcbiAgfVxuICBzZWVuID0gc2VlbiB8fCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHNlZW4uYWRkKHZhbHVlKTtcbiAgaWYgKGlzUmVmKHZhbHVlKSkge1xuICAgIHRyYXZlcnNlKHZhbHVlLnZhbHVlLCBkZXB0aCwgY3VycmVudERlcHRoLCBzZWVuKTtcbiAgfSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRyYXZlcnNlKHZhbHVlW2ldLCBkZXB0aCwgY3VycmVudERlcHRoLCBzZWVuKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNTZXQodmFsdWUpIHx8IGlzTWFwKHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goKHYpID0+IHtcbiAgICAgIHRyYXZlcnNlKHYsIGRlcHRoLCBjdXJyZW50RGVwdGgsIHNlZW4pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgIHRyYXZlcnNlKHZhbHVlW2tleV0sIGRlcHRoLCBjdXJyZW50RGVwdGgsIHNlZW4pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGlyZWN0aXZlTmFtZShuYW1lKSB7XG4gIGlmIChpc0J1aWx0SW5EaXJlY3RpdmUobmFtZSkpIHtcbiAgICB3YXJuJDEoXCJEbyBub3QgdXNlIGJ1aWx0LWluIGRpcmVjdGl2ZSBpZHMgYXMgY3VzdG9tIGRpcmVjdGl2ZSBpZDogXCIgKyBuYW1lKTtcbiAgfVxufVxuZnVuY3Rpb24gd2l0aERpcmVjdGl2ZXModm5vZGUsIGRpcmVjdGl2ZXMpIHtcbiAgaWYgKGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgd2FybiQxKGB3aXRoRGlyZWN0aXZlcyBjYW4gb25seSBiZSB1c2VkIGluc2lkZSByZW5kZXIgZnVuY3Rpb25zLmApO1xuICAgIHJldHVybiB2bm9kZTtcbiAgfVxuICBjb25zdCBpbnN0YW5jZSA9IGdldEV4cG9zZVByb3h5KGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSkgfHwgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlLnByb3h5O1xuICBjb25zdCBiaW5kaW5ncyA9IHZub2RlLmRpcnMgfHwgKHZub2RlLmRpcnMgPSBbXSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlyZWN0aXZlcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBbZGlyLCB2YWx1ZSwgYXJnLCBtb2RpZmllcnMgPSBFTVBUWV9PQkpdID0gZGlyZWN0aXZlc1tpXTtcbiAgICBpZiAoZGlyKSB7XG4gICAgICBpZiAoaXNGdW5jdGlvbihkaXIpKSB7XG4gICAgICAgIGRpciA9IHtcbiAgICAgICAgICBtb3VudGVkOiBkaXIsXG4gICAgICAgICAgdXBkYXRlZDogZGlyXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoZGlyLmRlZXApIHtcbiAgICAgICAgdHJhdmVyc2UodmFsdWUpO1xuICAgICAgfVxuICAgICAgYmluZGluZ3MucHVzaCh7XG4gICAgICAgIGRpcixcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBvbGRWYWx1ZTogdm9pZCAwLFxuICAgICAgICBhcmcsXG4gICAgICAgIG1vZGlmaWVyc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2bm9kZTtcbn1cbmZ1bmN0aW9uIGludm9rZURpcmVjdGl2ZUhvb2sodm5vZGUsIHByZXZWTm9kZSwgaW5zdGFuY2UsIG5hbWUpIHtcbiAgY29uc3QgYmluZGluZ3MgPSB2bm9kZS5kaXJzO1xuICBjb25zdCBvbGRCaW5kaW5ncyA9IHByZXZWTm9kZSAmJiBwcmV2Vk5vZGUuZGlycztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaW5kaW5ncy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nc1tpXTtcbiAgICBpZiAob2xkQmluZGluZ3MpIHtcbiAgICAgIGJpbmRpbmcub2xkVmFsdWUgPSBvbGRCaW5kaW5nc1tpXS52YWx1ZTtcbiAgICB9XG4gICAgbGV0IGhvb2sgPSBiaW5kaW5nLmRpcltuYW1lXTtcbiAgICBpZiAoaG9vaykge1xuICAgICAgcGF1c2VUcmFja2luZygpO1xuICAgICAgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoaG9vaywgaW5zdGFuY2UsIDgsIFtcbiAgICAgICAgdm5vZGUuZWwsXG4gICAgICAgIGJpbmRpbmcsXG4gICAgICAgIHZub2RlLFxuICAgICAgICBwcmV2Vk5vZGVcbiAgICAgIF0pO1xuICAgICAgcmVzZXRUcmFja2luZygpO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBsZWF2ZUNiS2V5ID0gU3ltYm9sKFwiX2xlYXZlQ2JcIik7XG5jb25zdCBlbnRlckNiS2V5ID0gU3ltYm9sKFwiX2VudGVyQ2JcIik7XG5mdW5jdGlvbiB1c2VUcmFuc2l0aW9uU3RhdGUoKSB7XG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIGlzTW91bnRlZDogZmFsc2UsXG4gICAgaXNMZWF2aW5nOiBmYWxzZSxcbiAgICBpc1VubW91bnRpbmc6IGZhbHNlLFxuICAgIGxlYXZpbmdWTm9kZXM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKClcbiAgfTtcbiAgb25Nb3VudGVkKCgpID0+IHtcbiAgICBzdGF0ZS5pc01vdW50ZWQgPSB0cnVlO1xuICB9KTtcbiAgb25CZWZvcmVVbm1vdW50KCgpID0+IHtcbiAgICBzdGF0ZS5pc1VubW91bnRpbmcgPSB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIHN0YXRlO1xufVxuY29uc3QgVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IgPSBbRnVuY3Rpb24sIEFycmF5XTtcbmNvbnN0IEJhc2VUcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzID0ge1xuICBtb2RlOiBTdHJpbmcsXG4gIGFwcGVhcjogQm9vbGVhbixcbiAgcGVyc2lzdGVkOiBCb29sZWFuLFxuICAvLyBlbnRlclxuICBvbkJlZm9yZUVudGVyOiBUcmFuc2l0aW9uSG9va1ZhbGlkYXRvcixcbiAgb25FbnRlcjogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IsXG4gIG9uQWZ0ZXJFbnRlcjogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IsXG4gIG9uRW50ZXJDYW5jZWxsZWQ6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxuICAvLyBsZWF2ZVxuICBvbkJlZm9yZUxlYXZlOiBUcmFuc2l0aW9uSG9va1ZhbGlkYXRvcixcbiAgb25MZWF2ZTogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IsXG4gIG9uQWZ0ZXJMZWF2ZTogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IsXG4gIG9uTGVhdmVDYW5jZWxsZWQ6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxuICAvLyBhcHBlYXJcbiAgb25CZWZvcmVBcHBlYXI6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxuICBvbkFwcGVhcjogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3IsXG4gIG9uQWZ0ZXJBcHBlYXI6IFRyYW5zaXRpb25Ib29rVmFsaWRhdG9yLFxuICBvbkFwcGVhckNhbmNlbGxlZDogVHJhbnNpdGlvbkhvb2tWYWxpZGF0b3Jcbn07XG5jb25zdCBCYXNlVHJhbnNpdGlvbkltcGwgPSB7XG4gIG5hbWU6IGBCYXNlVHJhbnNpdGlvbmAsXG4gIHByb3BzOiBCYXNlVHJhbnNpdGlvblByb3BzVmFsaWRhdG9ycyxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0Q3VycmVudEluc3RhbmNlKCk7XG4gICAgY29uc3Qgc3RhdGUgPSB1c2VUcmFuc2l0aW9uU3RhdGUoKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBzbG90cy5kZWZhdWx0ICYmIGdldFRyYW5zaXRpb25SYXdDaGlsZHJlbihzbG90cy5kZWZhdWx0KCksIHRydWUpO1xuICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBjaGlsZCA9IGNoaWxkcmVuWzBdO1xuICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgbGV0IGhhc0ZvdW5kID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBjaGlsZHJlbikge1xuICAgICAgICAgIGlmIChjLnR5cGUgIT09IENvbW1lbnQpIHtcbiAgICAgICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGhhc0ZvdW5kKSB7XG4gICAgICAgICAgICAgIHdhcm4kMShcbiAgICAgICAgICAgICAgICBcIjx0cmFuc2l0aW9uPiBjYW4gb25seSBiZSB1c2VkIG9uIGEgc2luZ2xlIGVsZW1lbnQgb3IgY29tcG9uZW50LiBVc2UgPHRyYW5zaXRpb24tZ3JvdXA+IGZvciBsaXN0cy5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoaWxkID0gYztcbiAgICAgICAgICAgIGhhc0ZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSlcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCByYXdQcm9wcyA9IHRvUmF3KHByb3BzKTtcbiAgICAgIGNvbnN0IHsgbW9kZSB9ID0gcmF3UHJvcHM7XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBtb2RlICYmIG1vZGUgIT09IFwiaW4tb3V0XCIgJiYgbW9kZSAhPT0gXCJvdXQtaW5cIiAmJiBtb2RlICE9PSBcImRlZmF1bHRcIikge1xuICAgICAgICB3YXJuJDEoYGludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICR7bW9kZX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5pc0xlYXZpbmcpIHtcbiAgICAgICAgcmV0dXJuIGVtcHR5UGxhY2Vob2xkZXIoY2hpbGQpO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5uZXJDaGlsZCA9IGdldEtlZXBBbGl2ZUNoaWxkKGNoaWxkKTtcbiAgICAgIGlmICghaW5uZXJDaGlsZCkge1xuICAgICAgICByZXR1cm4gZW1wdHlQbGFjZWhvbGRlcihjaGlsZCk7XG4gICAgICB9XG4gICAgICBjb25zdCBlbnRlckhvb2tzID0gcmVzb2x2ZVRyYW5zaXRpb25Ib29rcyhcbiAgICAgICAgaW5uZXJDaGlsZCxcbiAgICAgICAgcmF3UHJvcHMsXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBpbnN0YW5jZVxuICAgICAgKTtcbiAgICAgIHNldFRyYW5zaXRpb25Ib29rcyhpbm5lckNoaWxkLCBlbnRlckhvb2tzKTtcbiAgICAgIGNvbnN0IG9sZENoaWxkID0gaW5zdGFuY2Uuc3ViVHJlZTtcbiAgICAgIGNvbnN0IG9sZElubmVyQ2hpbGQgPSBvbGRDaGlsZCAmJiBnZXRLZWVwQWxpdmVDaGlsZChvbGRDaGlsZCk7XG4gICAgICBpZiAob2xkSW5uZXJDaGlsZCAmJiBvbGRJbm5lckNoaWxkLnR5cGUgIT09IENvbW1lbnQgJiYgIWlzU2FtZVZOb2RlVHlwZShpbm5lckNoaWxkLCBvbGRJbm5lckNoaWxkKSkge1xuICAgICAgICBjb25zdCBsZWF2aW5nSG9va3MgPSByZXNvbHZlVHJhbnNpdGlvbkhvb2tzKFxuICAgICAgICAgIG9sZElubmVyQ2hpbGQsXG4gICAgICAgICAgcmF3UHJvcHMsXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgaW5zdGFuY2VcbiAgICAgICAgKTtcbiAgICAgICAgc2V0VHJhbnNpdGlvbkhvb2tzKG9sZElubmVyQ2hpbGQsIGxlYXZpbmdIb29rcyk7XG4gICAgICAgIGlmIChtb2RlID09PSBcIm91dC1pblwiKSB7XG4gICAgICAgICAgc3RhdGUuaXNMZWF2aW5nID0gdHJ1ZTtcbiAgICAgICAgICBsZWF2aW5nSG9va3MuYWZ0ZXJMZWF2ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHN0YXRlLmlzTGVhdmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlLnVwZGF0ZS5hY3RpdmUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmVmZmVjdC5kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICAgIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGVtcHR5UGxhY2Vob2xkZXIoY2hpbGQpO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09IFwiaW4tb3V0XCIgJiYgaW5uZXJDaGlsZC50eXBlICE9PSBDb21tZW50KSB7XG4gICAgICAgICAgbGVhdmluZ0hvb2tzLmRlbGF5TGVhdmUgPSAoZWwsIGVhcmx5UmVtb3ZlLCBkZWxheWVkTGVhdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxlYXZpbmdWTm9kZXNDYWNoZSA9IGdldExlYXZpbmdOb2Rlc0ZvclR5cGUoXG4gICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICBvbGRJbm5lckNoaWxkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGVhdmluZ1ZOb2Rlc0NhY2hlW1N0cmluZyhvbGRJbm5lckNoaWxkLmtleSldID0gb2xkSW5uZXJDaGlsZDtcbiAgICAgICAgICAgIGVsW2xlYXZlQ2JLZXldID0gKCkgPT4ge1xuICAgICAgICAgICAgICBlYXJseVJlbW92ZSgpO1xuICAgICAgICAgICAgICBlbFtsZWF2ZUNiS2V5XSA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgZGVsZXRlIGVudGVySG9va3MuZGVsYXllZExlYXZlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVudGVySG9va3MuZGVsYXllZExlYXZlID0gZGVsYXllZExlYXZlO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9O1xuICB9XG59O1xuY29uc3QgQmFzZVRyYW5zaXRpb24gPSBCYXNlVHJhbnNpdGlvbkltcGw7XG5mdW5jdGlvbiBnZXRMZWF2aW5nTm9kZXNGb3JUeXBlKHN0YXRlLCB2bm9kZSkge1xuICBjb25zdCB7IGxlYXZpbmdWTm9kZXMgfSA9IHN0YXRlO1xuICBsZXQgbGVhdmluZ1ZOb2Rlc0NhY2hlID0gbGVhdmluZ1ZOb2Rlcy5nZXQodm5vZGUudHlwZSk7XG4gIGlmICghbGVhdmluZ1ZOb2Rlc0NhY2hlKSB7XG4gICAgbGVhdmluZ1ZOb2Rlc0NhY2hlID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbGVhdmluZ1ZOb2Rlcy5zZXQodm5vZGUudHlwZSwgbGVhdmluZ1ZOb2Rlc0NhY2hlKTtcbiAgfVxuICByZXR1cm4gbGVhdmluZ1ZOb2Rlc0NhY2hlO1xufVxuZnVuY3Rpb24gcmVzb2x2ZVRyYW5zaXRpb25Ib29rcyh2bm9kZSwgcHJvcHMsIHN0YXRlLCBpbnN0YW5jZSkge1xuICBjb25zdCB7XG4gICAgYXBwZWFyLFxuICAgIG1vZGUsXG4gICAgcGVyc2lzdGVkID0gZmFsc2UsXG4gICAgb25CZWZvcmVFbnRlcixcbiAgICBvbkVudGVyLFxuICAgIG9uQWZ0ZXJFbnRlcixcbiAgICBvbkVudGVyQ2FuY2VsbGVkLFxuICAgIG9uQmVmb3JlTGVhdmUsXG4gICAgb25MZWF2ZSxcbiAgICBvbkFmdGVyTGVhdmUsXG4gICAgb25MZWF2ZUNhbmNlbGxlZCxcbiAgICBvbkJlZm9yZUFwcGVhcixcbiAgICBvbkFwcGVhcixcbiAgICBvbkFmdGVyQXBwZWFyLFxuICAgIG9uQXBwZWFyQ2FuY2VsbGVkXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qga2V5ID0gU3RyaW5nKHZub2RlLmtleSk7XG4gIGNvbnN0IGxlYXZpbmdWTm9kZXNDYWNoZSA9IGdldExlYXZpbmdOb2Rlc0ZvclR5cGUoc3RhdGUsIHZub2RlKTtcbiAgY29uc3QgY2FsbEhvb2sgPSAoaG9vaywgYXJncykgPT4ge1xuICAgIGhvb2sgJiYgY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoXG4gICAgICBob29rLFxuICAgICAgaW5zdGFuY2UsXG4gICAgICA5LFxuICAgICAgYXJnc1xuICAgICk7XG4gIH07XG4gIGNvbnN0IGNhbGxBc3luY0hvb2sgPSAoaG9vaywgYXJncykgPT4ge1xuICAgIGNvbnN0IGRvbmUgPSBhcmdzWzFdO1xuICAgIGNhbGxIb29rKGhvb2ssIGFyZ3MpO1xuICAgIGlmIChpc0FycmF5KGhvb2spKSB7XG4gICAgICBpZiAoaG9vay5ldmVyeSgoaG9vazIpID0+IGhvb2syLmxlbmd0aCA8PSAxKSlcbiAgICAgICAgZG9uZSgpO1xuICAgIH0gZWxzZSBpZiAoaG9vay5sZW5ndGggPD0gMSkge1xuICAgICAgZG9uZSgpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaG9va3MgPSB7XG4gICAgbW9kZSxcbiAgICBwZXJzaXN0ZWQsXG4gICAgYmVmb3JlRW50ZXIoZWwpIHtcbiAgICAgIGxldCBob29rID0gb25CZWZvcmVFbnRlcjtcbiAgICAgIGlmICghc3RhdGUuaXNNb3VudGVkKSB7XG4gICAgICAgIGlmIChhcHBlYXIpIHtcbiAgICAgICAgICBob29rID0gb25CZWZvcmVBcHBlYXIgfHwgb25CZWZvcmVFbnRlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlbFtsZWF2ZUNiS2V5XSkge1xuICAgICAgICBlbFtsZWF2ZUNiS2V5XShcbiAgICAgICAgICB0cnVlXG4gICAgICAgICAgLyogY2FuY2VsbGVkICovXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBsZWF2aW5nVk5vZGUgPSBsZWF2aW5nVk5vZGVzQ2FjaGVba2V5XTtcbiAgICAgIGlmIChsZWF2aW5nVk5vZGUgJiYgaXNTYW1lVk5vZGVUeXBlKHZub2RlLCBsZWF2aW5nVk5vZGUpICYmIGxlYXZpbmdWTm9kZS5lbFtsZWF2ZUNiS2V5XSkge1xuICAgICAgICBsZWF2aW5nVk5vZGUuZWxbbGVhdmVDYktleV0oKTtcbiAgICAgIH1cbiAgICAgIGNhbGxIb29rKGhvb2ssIFtlbF0pO1xuICAgIH0sXG4gICAgZW50ZXIoZWwpIHtcbiAgICAgIGxldCBob29rID0gb25FbnRlcjtcbiAgICAgIGxldCBhZnRlckhvb2sgPSBvbkFmdGVyRW50ZXI7XG4gICAgICBsZXQgY2FuY2VsSG9vayA9IG9uRW50ZXJDYW5jZWxsZWQ7XG4gICAgICBpZiAoIXN0YXRlLmlzTW91bnRlZCkge1xuICAgICAgICBpZiAoYXBwZWFyKSB7XG4gICAgICAgICAgaG9vayA9IG9uQXBwZWFyIHx8IG9uRW50ZXI7XG4gICAgICAgICAgYWZ0ZXJIb29rID0gb25BZnRlckFwcGVhciB8fCBvbkFmdGVyRW50ZXI7XG4gICAgICAgICAgY2FuY2VsSG9vayA9IG9uQXBwZWFyQ2FuY2VsbGVkIHx8IG9uRW50ZXJDYW5jZWxsZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBkb25lID0gZWxbZW50ZXJDYktleV0gPSAoY2FuY2VsbGVkKSA9PiB7XG4gICAgICAgIGlmIChjYWxsZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICBpZiAoY2FuY2VsbGVkKSB7XG4gICAgICAgICAgY2FsbEhvb2soY2FuY2VsSG9vaywgW2VsXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbEhvb2soYWZ0ZXJIb29rLCBbZWxdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG9va3MuZGVsYXllZExlYXZlKSB7XG4gICAgICAgICAgaG9va3MuZGVsYXllZExlYXZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxbZW50ZXJDYktleV0gPSB2b2lkIDA7XG4gICAgICB9O1xuICAgICAgaWYgKGhvb2spIHtcbiAgICAgICAgY2FsbEFzeW5jSG9vayhob29rLCBbZWwsIGRvbmVdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGxlYXZlKGVsLCByZW1vdmUpIHtcbiAgICAgIGNvbnN0IGtleTIgPSBTdHJpbmcodm5vZGUua2V5KTtcbiAgICAgIGlmIChlbFtlbnRlckNiS2V5XSkge1xuICAgICAgICBlbFtlbnRlckNiS2V5XShcbiAgICAgICAgICB0cnVlXG4gICAgICAgICAgLyogY2FuY2VsbGVkICovXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuaXNVbm1vdW50aW5nKSB7XG4gICAgICAgIHJldHVybiByZW1vdmUoKTtcbiAgICAgIH1cbiAgICAgIGNhbGxIb29rKG9uQmVmb3JlTGVhdmUsIFtlbF0pO1xuICAgICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICAgICAgY29uc3QgZG9uZSA9IGVsW2xlYXZlQ2JLZXldID0gKGNhbmNlbGxlZCkgPT4ge1xuICAgICAgICBpZiAoY2FsbGVkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgcmVtb3ZlKCk7XG4gICAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgICBjYWxsSG9vayhvbkxlYXZlQ2FuY2VsbGVkLCBbZWxdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsSG9vayhvbkFmdGVyTGVhdmUsIFtlbF0pO1xuICAgICAgICB9XG4gICAgICAgIGVsW2xlYXZlQ2JLZXldID0gdm9pZCAwO1xuICAgICAgICBpZiAobGVhdmluZ1ZOb2Rlc0NhY2hlW2tleTJdID09PSB2bm9kZSkge1xuICAgICAgICAgIGRlbGV0ZSBsZWF2aW5nVk5vZGVzQ2FjaGVba2V5Ml07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsZWF2aW5nVk5vZGVzQ2FjaGVba2V5Ml0gPSB2bm9kZTtcbiAgICAgIGlmIChvbkxlYXZlKSB7XG4gICAgICAgIGNhbGxBc3luY0hvb2sob25MZWF2ZSwgW2VsLCBkb25lXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb25lKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjbG9uZSh2bm9kZTIpIHtcbiAgICAgIHJldHVybiByZXNvbHZlVHJhbnNpdGlvbkhvb2tzKHZub2RlMiwgcHJvcHMsIHN0YXRlLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gaG9va3M7XG59XG5mdW5jdGlvbiBlbXB0eVBsYWNlaG9sZGVyKHZub2RlKSB7XG4gIGlmIChpc0tlZXBBbGl2ZSh2bm9kZSkpIHtcbiAgICB2bm9kZSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgIHZub2RlLmNoaWxkcmVuID0gbnVsbDtcbiAgICByZXR1cm4gdm5vZGU7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEtlZXBBbGl2ZUNoaWxkKHZub2RlKSB7XG4gIHJldHVybiBpc0tlZXBBbGl2ZSh2bm9kZSkgPyAoXG4gICAgLy8gIzcxMjEgZW5zdXJlIGdldCB0aGUgY2hpbGQgY29tcG9uZW50IHN1YnRyZWUgaW4gY2FzZVxuICAgIC8vIGl0J3MgYmVlbiByZXBsYWNlZCBkdXJpbmcgSE1SXG4gICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB2bm9kZS5jb21wb25lbnQgPyB2bm9kZS5jb21wb25lbnQuc3ViVHJlZSA6IHZub2RlLmNoaWxkcmVuID8gdm5vZGUuY2hpbGRyZW5bMF0gOiB2b2lkIDBcbiAgKSA6IHZub2RlO1xufVxuZnVuY3Rpb24gc2V0VHJhbnNpdGlvbkhvb2tzKHZub2RlLCBob29rcykge1xuICBpZiAodm5vZGUuc2hhcGVGbGFnICYgNiAmJiB2bm9kZS5jb21wb25lbnQpIHtcbiAgICBzZXRUcmFuc2l0aW9uSG9va3Modm5vZGUuY29tcG9uZW50LnN1YlRyZWUsIGhvb2tzKTtcbiAgfSBlbHNlIGlmICh2bm9kZS5zaGFwZUZsYWcgJiAxMjgpIHtcbiAgICB2bm9kZS5zc0NvbnRlbnQudHJhbnNpdGlvbiA9IGhvb2tzLmNsb25lKHZub2RlLnNzQ29udGVudCk7XG4gICAgdm5vZGUuc3NGYWxsYmFjay50cmFuc2l0aW9uID0gaG9va3MuY2xvbmUodm5vZGUuc3NGYWxsYmFjayk7XG4gIH0gZWxzZSB7XG4gICAgdm5vZGUudHJhbnNpdGlvbiA9IGhvb2tzO1xuICB9XG59XG5mdW5jdGlvbiBnZXRUcmFuc2l0aW9uUmF3Q2hpbGRyZW4oY2hpbGRyZW4sIGtlZXBDb21tZW50ID0gZmFsc2UsIHBhcmVudEtleSkge1xuICBsZXQgcmV0ID0gW107XG4gIGxldCBrZXllZEZyYWdtZW50Q291bnQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgY29uc3Qga2V5ID0gcGFyZW50S2V5ID09IG51bGwgPyBjaGlsZC5rZXkgOiBTdHJpbmcocGFyZW50S2V5KSArIFN0cmluZyhjaGlsZC5rZXkgIT0gbnVsbCA/IGNoaWxkLmtleSA6IGkpO1xuICAgIGlmIChjaGlsZC50eXBlID09PSBGcmFnbWVudCkge1xuICAgICAgaWYgKGNoaWxkLnBhdGNoRmxhZyAmIDEyOClcbiAgICAgICAga2V5ZWRGcmFnbWVudENvdW50Kys7XG4gICAgICByZXQgPSByZXQuY29uY2F0KFxuICAgICAgICBnZXRUcmFuc2l0aW9uUmF3Q2hpbGRyZW4oY2hpbGQuY2hpbGRyZW4sIGtlZXBDb21tZW50LCBrZXkpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoa2VlcENvbW1lbnQgfHwgY2hpbGQudHlwZSAhPT0gQ29tbWVudCkge1xuICAgICAgcmV0LnB1c2goa2V5ICE9IG51bGwgPyBjbG9uZVZOb2RlKGNoaWxkLCB7IGtleSB9KSA6IGNoaWxkKTtcbiAgICB9XG4gIH1cbiAgaWYgKGtleWVkRnJhZ21lbnRDb3VudCA+IDEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldC5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0W2ldLnBhdGNoRmxhZyA9IC0yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKiEgI19fTk9fU0lERV9FRkZFQ1RTX18gKi9cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5mdW5jdGlvbiBkZWZpbmVDb21wb25lbnQob3B0aW9ucywgZXh0cmFPcHRpb25zKSB7XG4gIHJldHVybiBpc0Z1bmN0aW9uKG9wdGlvbnMpID8gKFxuICAgIC8vICM4MzI2OiBleHRlbmQgY2FsbCBhbmQgb3B0aW9ucy5uYW1lIGFjY2VzcyBhcmUgY29uc2lkZXJlZCBzaWRlLWVmZmVjdHNcbiAgICAvLyBieSBSb2xsdXAsIHNvIHdlIGhhdmUgdG8gd3JhcCBpdCBpbiBhIHB1cmUtYW5ub3RhdGVkIElJRkUuXG4gICAgLyogQF9fUFVSRV9fICovICgoKSA9PiBleHRlbmQoeyBuYW1lOiBvcHRpb25zLm5hbWUgfSwgZXh0cmFPcHRpb25zLCB7IHNldHVwOiBvcHRpb25zIH0pKSgpXG4gICkgOiBvcHRpb25zO1xufVxuXG5jb25zdCBpc0FzeW5jV3JhcHBlciA9IChpKSA9PiAhIWkudHlwZS5fX2FzeW5jTG9hZGVyO1xuLyohICNfX05PX1NJREVfRUZGRUNUU19fICovXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZnVuY3Rpb24gZGVmaW5lQXN5bmNDb21wb25lbnQoc291cmNlKSB7XG4gIGlmIChpc0Z1bmN0aW9uKHNvdXJjZSkpIHtcbiAgICBzb3VyY2UgPSB7IGxvYWRlcjogc291cmNlIH07XG4gIH1cbiAgY29uc3Qge1xuICAgIGxvYWRlcixcbiAgICBsb2FkaW5nQ29tcG9uZW50LFxuICAgIGVycm9yQ29tcG9uZW50LFxuICAgIGRlbGF5ID0gMjAwLFxuICAgIHRpbWVvdXQsXG4gICAgLy8gdW5kZWZpbmVkID0gbmV2ZXIgdGltZXMgb3V0XG4gICAgc3VzcGVuc2libGUgPSB0cnVlLFxuICAgIG9uRXJyb3I6IHVzZXJPbkVycm9yXG4gIH0gPSBzb3VyY2U7XG4gIGxldCBwZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gIGxldCByZXNvbHZlZENvbXA7XG4gIGxldCByZXRyaWVzID0gMDtcbiAgY29uc3QgcmV0cnkgPSAoKSA9PiB7XG4gICAgcmV0cmllcysrO1xuICAgIHBlbmRpbmdSZXF1ZXN0ID0gbnVsbDtcbiAgICByZXR1cm4gbG9hZCgpO1xuICB9O1xuICBjb25zdCBsb2FkID0gKCkgPT4ge1xuICAgIGxldCB0aGlzUmVxdWVzdDtcbiAgICByZXR1cm4gcGVuZGluZ1JlcXVlc3QgfHwgKHRoaXNSZXF1ZXN0ID0gcGVuZGluZ1JlcXVlc3QgPSBsb2FkZXIoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBlcnIgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyKSk7XG4gICAgICBpZiAodXNlck9uRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCB1c2VyUmV0cnkgPSAoKSA9PiByZXNvbHZlKHJldHJ5KCkpO1xuICAgICAgICAgIGNvbnN0IHVzZXJGYWlsID0gKCkgPT4gcmVqZWN0KGVycik7XG4gICAgICAgICAgdXNlck9uRXJyb3IoZXJyLCB1c2VyUmV0cnksIHVzZXJGYWlsLCByZXRyaWVzICsgMSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH0pLnRoZW4oKGNvbXApID0+IHtcbiAgICAgIGlmICh0aGlzUmVxdWVzdCAhPT0gcGVuZGluZ1JlcXVlc3QgJiYgcGVuZGluZ1JlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuIHBlbmRpbmdSZXF1ZXN0O1xuICAgICAgfVxuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWNvbXApIHtcbiAgICAgICAgd2FybiQxKFxuICAgICAgICAgIGBBc3luYyBjb21wb25lbnQgbG9hZGVyIHJlc29sdmVkIHRvIHVuZGVmaW5lZC4gSWYgeW91IGFyZSB1c2luZyByZXRyeSgpLCBtYWtlIHN1cmUgdG8gcmV0dXJuIGl0cyByZXR1cm4gdmFsdWUuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXAgJiYgKGNvbXAuX19lc01vZHVsZSB8fCBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IFwiTW9kdWxlXCIpKSB7XG4gICAgICAgIGNvbXAgPSBjb21wLmRlZmF1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBjb21wICYmICFpc09iamVjdChjb21wKSAmJiAhaXNGdW5jdGlvbihjb21wKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYXN5bmMgY29tcG9uZW50IGxvYWQgcmVzdWx0OiAke2NvbXB9YCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlZENvbXAgPSBjb21wO1xuICAgICAgcmV0dXJuIGNvbXA7XG4gICAgfSkpO1xuICB9O1xuICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KHtcbiAgICBuYW1lOiBcIkFzeW5jQ29tcG9uZW50V3JhcHBlclwiLFxuICAgIF9fYXN5bmNMb2FkZXI6IGxvYWQsXG4gICAgZ2V0IF9fYXN5bmNSZXNvbHZlZCgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlZENvbXA7XG4gICAgfSxcbiAgICBzZXR1cCgpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gY3VycmVudEluc3RhbmNlO1xuICAgICAgaWYgKHJlc29sdmVkQ29tcCkge1xuICAgICAgICByZXR1cm4gKCkgPT4gY3JlYXRlSW5uZXJDb21wKHJlc29sdmVkQ29tcCwgaW5zdGFuY2UpO1xuICAgICAgfVxuICAgICAgY29uc3Qgb25FcnJvciA9IChlcnIpID0+IHtcbiAgICAgICAgcGVuZGluZ1JlcXVlc3QgPSBudWxsO1xuICAgICAgICBoYW5kbGVFcnJvcihcbiAgICAgICAgICBlcnIsXG4gICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgMTMsXG4gICAgICAgICAgIWVycm9yQ29tcG9uZW50XG4gICAgICAgICk7XG4gICAgICB9O1xuICAgICAgaWYgKHN1c3BlbnNpYmxlICYmIGluc3RhbmNlLnN1c3BlbnNlIHx8IGlzSW5TU1JDb21wb25lbnRTZXR1cCkge1xuICAgICAgICByZXR1cm4gbG9hZCgpLnRoZW4oKGNvbXApID0+IHtcbiAgICAgICAgICByZXR1cm4gKCkgPT4gY3JlYXRlSW5uZXJDb21wKGNvbXAsIGluc3RhbmNlKTtcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICByZXR1cm4gKCkgPT4gZXJyb3JDb21wb25lbnQgPyBjcmVhdGVWTm9kZShlcnJvckNvbXBvbmVudCwge1xuICAgICAgICAgICAgZXJyb3I6IGVyclxuICAgICAgICAgIH0pIDogbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBsb2FkZWQgPSByZWYoZmFsc2UpO1xuICAgICAgY29uc3QgZXJyb3IgPSByZWYoKTtcbiAgICAgIGNvbnN0IGRlbGF5ZWQgPSByZWYoISFkZWxheSk7XG4gICAgICBpZiAoZGVsYXkpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZGVsYXllZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgICB9XG4gICAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICghbG9hZGVkLnZhbHVlICYmICFlcnJvci52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgQXN5bmMgY29tcG9uZW50IHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXR9bXMuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgIGVycm9yLnZhbHVlID0gZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICB9XG4gICAgICBsb2FkKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGxvYWRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIGlmIChpbnN0YW5jZS5wYXJlbnQgJiYgaXNLZWVwQWxpdmUoaW5zdGFuY2UucGFyZW50LnZub2RlKSkge1xuICAgICAgICAgIGluc3RhbmNlLnBhcmVudC5lZmZlY3QuZGlydHkgPSB0cnVlO1xuICAgICAgICAgIHF1ZXVlSm9iKGluc3RhbmNlLnBhcmVudC51cGRhdGUpO1xuICAgICAgICB9XG4gICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgZXJyb3IudmFsdWUgPSBlcnI7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmIChsb2FkZWQudmFsdWUgJiYgcmVzb2x2ZWRDb21wKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUlubmVyQ29tcChyZXNvbHZlZENvbXAsIGluc3RhbmNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvci52YWx1ZSAmJiBlcnJvckNvbXBvbmVudCkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVWTm9kZShlcnJvckNvbXBvbmVudCwge1xuICAgICAgICAgICAgZXJyb3I6IGVycm9yLnZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9hZGluZ0NvbXBvbmVudCAmJiAhZGVsYXllZC52YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVWTm9kZShsb2FkaW5nQ29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlSW5uZXJDb21wKGNvbXAsIHBhcmVudCkge1xuICBjb25zdCB7IHJlZjogcmVmMiwgcHJvcHMsIGNoaWxkcmVuLCBjZSB9ID0gcGFyZW50LnZub2RlO1xuICBjb25zdCB2bm9kZSA9IGNyZWF0ZVZOb2RlKGNvbXAsIHByb3BzLCBjaGlsZHJlbik7XG4gIHZub2RlLnJlZiA9IHJlZjI7XG4gIHZub2RlLmNlID0gY2U7XG4gIGRlbGV0ZSBwYXJlbnQudm5vZGUuY2U7XG4gIHJldHVybiB2bm9kZTtcbn1cblxuY29uc3QgaXNLZWVwQWxpdmUgPSAodm5vZGUpID0+IHZub2RlLnR5cGUuX19pc0tlZXBBbGl2ZTtcbmNvbnN0IEtlZXBBbGl2ZUltcGwgPSB7XG4gIG5hbWU6IGBLZWVwQWxpdmVgLFxuICAvLyBNYXJrZXIgZm9yIHNwZWNpYWwgaGFuZGxpbmcgaW5zaWRlIHRoZSByZW5kZXJlci4gV2UgYXJlIG5vdCB1c2luZyBhID09PVxuICAvLyBjaGVjayBkaXJlY3RseSBvbiBLZWVwQWxpdmUgaW4gdGhlIHJlbmRlcmVyLCBiZWNhdXNlIGltcG9ydGluZyBpdCBkaXJlY3RseVxuICAvLyB3b3VsZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgdHJlZS1zaGFrZW4uXG4gIF9faXNLZWVwQWxpdmU6IHRydWUsXG4gIHByb3BzOiB7XG4gICAgaW5jbHVkZTogW1N0cmluZywgUmVnRXhwLCBBcnJheV0sXG4gICAgZXhjbHVkZTogW1N0cmluZywgUmVnRXhwLCBBcnJheV0sXG4gICAgbWF4OiBbU3RyaW5nLCBOdW1iZXJdXG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICAgIGNvbnN0IHNoYXJlZENvbnRleHQgPSBpbnN0YW5jZS5jdHg7XG4gICAgaWYgKCFzaGFyZWRDb250ZXh0LnJlbmRlcmVyKSB7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHNsb3RzLmRlZmF1bHQgJiYgc2xvdHMuZGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID09PSAxID8gY2hpbGRyZW5bMF0gOiBjaGlsZHJlbjtcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICBjb25zdCBrZXlzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICBsZXQgY3VycmVudCA9IG51bGw7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XG4gICAgICBpbnN0YW5jZS5fX3ZfY2FjaGUgPSBjYWNoZTtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50U3VzcGVuc2UgPSBpbnN0YW5jZS5zdXNwZW5zZTtcbiAgICBjb25zdCB7XG4gICAgICByZW5kZXJlcjoge1xuICAgICAgICBwOiBwYXRjaCxcbiAgICAgICAgbTogbW92ZSxcbiAgICAgICAgdW06IF91bm1vdW50LFxuICAgICAgICBvOiB7IGNyZWF0ZUVsZW1lbnQgfVxuICAgICAgfVxuICAgIH0gPSBzaGFyZWRDb250ZXh0O1xuICAgIGNvbnN0IHN0b3JhZ2VDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHNoYXJlZENvbnRleHQuYWN0aXZhdGUgPSAodm5vZGUsIGNvbnRhaW5lciwgYW5jaG9yLCBuYW1lc3BhY2UsIG9wdGltaXplZCkgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UyID0gdm5vZGUuY29tcG9uZW50O1xuICAgICAgbW92ZSh2bm9kZSwgY29udGFpbmVyLCBhbmNob3IsIDAsIHBhcmVudFN1c3BlbnNlKTtcbiAgICAgIHBhdGNoKFxuICAgICAgICBpbnN0YW5jZTIudm5vZGUsXG4gICAgICAgIHZub2RlLFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgaW5zdGFuY2UyLFxuICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICB2bm9kZS5zbG90U2NvcGVJZHMsXG4gICAgICAgIG9wdGltaXplZFxuICAgICAgKTtcbiAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGluc3RhbmNlMi5pc0RlYWN0aXZhdGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChpbnN0YW5jZTIuYSkge1xuICAgICAgICAgIGludm9rZUFycmF5Rm5zKGluc3RhbmNlMi5hKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2bm9kZUhvb2sgPSB2bm9kZS5wcm9wcyAmJiB2bm9kZS5wcm9wcy5vblZub2RlTW91bnRlZDtcbiAgICAgICAgaWYgKHZub2RlSG9vaykge1xuICAgICAgICAgIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIGluc3RhbmNlMi5wYXJlbnQsIHZub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSwgcGFyZW50U3VzcGVuc2UpO1xuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XG4gICAgICAgIGRldnRvb2xzQ29tcG9uZW50QWRkZWQoaW5zdGFuY2UyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHNoYXJlZENvbnRleHQuZGVhY3RpdmF0ZSA9ICh2bm9kZSkgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UyID0gdm5vZGUuY29tcG9uZW50O1xuICAgICAgbW92ZSh2bm9kZSwgc3RvcmFnZUNvbnRhaW5lciwgbnVsbCwgMSwgcGFyZW50U3VzcGVuc2UpO1xuICAgICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGluc3RhbmNlMi5kYSkge1xuICAgICAgICAgIGludm9rZUFycmF5Rm5zKGluc3RhbmNlMi5kYSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgdm5vZGVIb29rID0gdm5vZGUucHJvcHMgJiYgdm5vZGUucHJvcHMub25Wbm9kZVVubW91bnRlZDtcbiAgICAgICAgaWYgKHZub2RlSG9vaykge1xuICAgICAgICAgIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIGluc3RhbmNlMi5wYXJlbnQsIHZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZTIuaXNEZWFjdGl2YXRlZCA9IHRydWU7XG4gICAgICB9LCBwYXJlbnRTdXNwZW5zZSk7XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcbiAgICAgICAgZGV2dG9vbHNDb21wb25lbnRBZGRlZChpbnN0YW5jZTIpO1xuICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gdW5tb3VudCh2bm9kZSkge1xuICAgICAgcmVzZXRTaGFwZUZsYWcodm5vZGUpO1xuICAgICAgX3VubW91bnQodm5vZGUsIGluc3RhbmNlLCBwYXJlbnRTdXNwZW5zZSwgdHJ1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBydW5lQ2FjaGUoZmlsdGVyKSB7XG4gICAgICBjYWNoZS5mb3JFYWNoKCh2bm9kZSwga2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHZub2RlLnR5cGUpO1xuICAgICAgICBpZiAobmFtZSAmJiAoIWZpbHRlciB8fCAhZmlsdGVyKG5hbWUpKSkge1xuICAgICAgICAgIHBydW5lQ2FjaGVFbnRyeShrZXkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJ1bmVDYWNoZUVudHJ5KGtleSkge1xuICAgICAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0KGtleSk7XG4gICAgICBpZiAoIWN1cnJlbnQgfHwgIWlzU2FtZVZOb2RlVHlwZShjYWNoZWQsIGN1cnJlbnQpKSB7XG4gICAgICAgIHVubW91bnQoY2FjaGVkKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudCkge1xuICAgICAgICByZXNldFNoYXBlRmxhZyhjdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAga2V5cy5kZWxldGUoa2V5KTtcbiAgICB9XG4gICAgd2F0Y2goXG4gICAgICAoKSA9PiBbcHJvcHMuaW5jbHVkZSwgcHJvcHMuZXhjbHVkZV0sXG4gICAgICAoW2luY2x1ZGUsIGV4Y2x1ZGVdKSA9PiB7XG4gICAgICAgIGluY2x1ZGUgJiYgcHJ1bmVDYWNoZSgobmFtZSkgPT4gbWF0Y2hlcyhpbmNsdWRlLCBuYW1lKSk7XG4gICAgICAgIGV4Y2x1ZGUgJiYgcHJ1bmVDYWNoZSgobmFtZSkgPT4gIW1hdGNoZXMoZXhjbHVkZSwgbmFtZSkpO1xuICAgICAgfSxcbiAgICAgIC8vIHBydW5lIHBvc3QtcmVuZGVyIGFmdGVyIGBjdXJyZW50YCBoYXMgYmVlbiB1cGRhdGVkXG4gICAgICB7IGZsdXNoOiBcInBvc3RcIiwgZGVlcDogdHJ1ZSB9XG4gICAgKTtcbiAgICBsZXQgcGVuZGluZ0NhY2hlS2V5ID0gbnVsbDtcbiAgICBjb25zdCBjYWNoZVN1YnRyZWUgPSAoKSA9PiB7XG4gICAgICBpZiAocGVuZGluZ0NhY2hlS2V5ICE9IG51bGwpIHtcbiAgICAgICAgY2FjaGUuc2V0KHBlbmRpbmdDYWNoZUtleSwgZ2V0SW5uZXJDaGlsZChpbnN0YW5jZS5zdWJUcmVlKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBvbk1vdW50ZWQoY2FjaGVTdWJ0cmVlKTtcbiAgICBvblVwZGF0ZWQoY2FjaGVTdWJ0cmVlKTtcbiAgICBvbkJlZm9yZVVubW91bnQoKCkgPT4ge1xuICAgICAgY2FjaGUuZm9yRWFjaCgoY2FjaGVkKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3ViVHJlZSwgc3VzcGVuc2UgfSA9IGluc3RhbmNlO1xuICAgICAgICBjb25zdCB2bm9kZSA9IGdldElubmVyQ2hpbGQoc3ViVHJlZSk7XG4gICAgICAgIGlmIChjYWNoZWQudHlwZSA9PT0gdm5vZGUudHlwZSAmJiBjYWNoZWQua2V5ID09PSB2bm9kZS5rZXkpIHtcbiAgICAgICAgICByZXNldFNoYXBlRmxhZyh2bm9kZSk7XG4gICAgICAgICAgY29uc3QgZGEgPSB2bm9kZS5jb21wb25lbnQuZGE7XG4gICAgICAgICAgZGEgJiYgcXVldWVQb3N0UmVuZGVyRWZmZWN0KGRhLCBzdXNwZW5zZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHVubW91bnQoY2FjaGVkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBwZW5kaW5nQ2FjaGVLZXkgPSBudWxsO1xuICAgICAgaWYgKCFzbG90cy5kZWZhdWx0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBzbG90cy5kZWZhdWx0KCk7XG4gICAgICBjb25zdCByYXdWTm9kZSA9IGNoaWxkcmVuWzBdO1xuICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICB3YXJuJDEoYEtlZXBBbGl2ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IG9uZSBjb21wb25lbnQgY2hpbGQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IG51bGw7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICAgIH0gZWxzZSBpZiAoIWlzVk5vZGUocmF3Vk5vZGUpIHx8ICEocmF3Vk5vZGUuc2hhcGVGbGFnICYgNCkgJiYgIShyYXdWTm9kZS5zaGFwZUZsYWcgJiAxMjgpKSB7XG4gICAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgICByZXR1cm4gcmF3Vk5vZGU7XG4gICAgICB9XG4gICAgICBsZXQgdm5vZGUgPSBnZXRJbm5lckNoaWxkKHJhd1ZOb2RlKTtcbiAgICAgIGNvbnN0IGNvbXAgPSB2bm9kZS50eXBlO1xuICAgICAgY29uc3QgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoXG4gICAgICAgIGlzQXN5bmNXcmFwcGVyKHZub2RlKSA/IHZub2RlLnR5cGUuX19hc3luY1Jlc29sdmVkIHx8IHt9IDogY29tcFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHsgaW5jbHVkZSwgZXhjbHVkZSwgbWF4IH0gPSBwcm9wcztcbiAgICAgIGlmIChpbmNsdWRlICYmICghbmFtZSB8fCAhbWF0Y2hlcyhpbmNsdWRlLCBuYW1lKSkgfHwgZXhjbHVkZSAmJiBuYW1lICYmIG1hdGNoZXMoZXhjbHVkZSwgbmFtZSkpIHtcbiAgICAgICAgY3VycmVudCA9IHZub2RlO1xuICAgICAgICByZXR1cm4gcmF3Vk5vZGU7XG4gICAgICB9XG4gICAgICBjb25zdCBrZXkgPSB2bm9kZS5rZXkgPT0gbnVsbCA/IGNvbXAgOiB2bm9kZS5rZXk7XG4gICAgICBjb25zdCBjYWNoZWRWTm9kZSA9IGNhY2hlLmdldChrZXkpO1xuICAgICAgaWYgKHZub2RlLmVsKSB7XG4gICAgICAgIHZub2RlID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgICAgIGlmIChyYXdWTm9kZS5zaGFwZUZsYWcgJiAxMjgpIHtcbiAgICAgICAgICByYXdWTm9kZS5zc0NvbnRlbnQgPSB2bm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGVuZGluZ0NhY2hlS2V5ID0ga2V5O1xuICAgICAgaWYgKGNhY2hlZFZOb2RlKSB7XG4gICAgICAgIHZub2RlLmVsID0gY2FjaGVkVk5vZGUuZWw7XG4gICAgICAgIHZub2RlLmNvbXBvbmVudCA9IGNhY2hlZFZOb2RlLmNvbXBvbmVudDtcbiAgICAgICAgaWYgKHZub2RlLnRyYW5zaXRpb24pIHtcbiAgICAgICAgICBzZXRUcmFuc2l0aW9uSG9va3Modm5vZGUsIHZub2RlLnRyYW5zaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHZub2RlLnNoYXBlRmxhZyB8PSA1MTI7XG4gICAgICAgIGtleXMuZGVsZXRlKGtleSk7XG4gICAgICAgIGtleXMuYWRkKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzLmFkZChrZXkpO1xuICAgICAgICBpZiAobWF4ICYmIGtleXMuc2l6ZSA+IHBhcnNlSW50KG1heCwgMTApKSB7XG4gICAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGtleXMudmFsdWVzKCkubmV4dCgpLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdm5vZGUuc2hhcGVGbGFnIHw9IDI1NjtcbiAgICAgIGN1cnJlbnQgPSB2bm9kZTtcbiAgICAgIHJldHVybiBpc1N1c3BlbnNlKHJhd1ZOb2RlLnR5cGUpID8gcmF3Vk5vZGUgOiB2bm9kZTtcbiAgICB9O1xuICB9XG59O1xuY29uc3QgS2VlcEFsaXZlID0gS2VlcEFsaXZlSW1wbDtcbmZ1bmN0aW9uIG1hdGNoZXMocGF0dGVybiwgbmFtZSkge1xuICBpZiAoaXNBcnJheShwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLnNvbWUoKHApID0+IG1hdGNoZXMocCwgbmFtZSkpO1xuICB9IGVsc2UgaWYgKGlzU3RyaW5nKHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uc3BsaXQoXCIsXCIpLmluY2x1ZGVzKG5hbWUpO1xuICB9IGVsc2UgaWYgKGlzUmVnRXhwKHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4udGVzdChuYW1lKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBvbkFjdGl2YXRlZChob29rLCB0YXJnZXQpIHtcbiAgcmVnaXN0ZXJLZWVwQWxpdmVIb29rKGhvb2ssIFwiYVwiLCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gb25EZWFjdGl2YXRlZChob29rLCB0YXJnZXQpIHtcbiAgcmVnaXN0ZXJLZWVwQWxpdmVIb29rKGhvb2ssIFwiZGFcIiwgdGFyZ2V0KTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyS2VlcEFsaXZlSG9vayhob29rLCB0eXBlLCB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2UpIHtcbiAgY29uc3Qgd3JhcHBlZEhvb2sgPSBob29rLl9fd2RjIHx8IChob29rLl9fd2RjID0gKCkgPT4ge1xuICAgIGxldCBjdXJyZW50ID0gdGFyZ2V0O1xuICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICBpZiAoY3VycmVudC5pc0RlYWN0aXZhdGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIGhvb2soKTtcbiAgfSk7XG4gIGluamVjdEhvb2sodHlwZSwgd3JhcHBlZEhvb2ssIHRhcmdldCk7XG4gIGlmICh0YXJnZXQpIHtcbiAgICBsZXQgY3VycmVudCA9IHRhcmdldC5wYXJlbnQ7XG4gICAgd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudC5wYXJlbnQpIHtcbiAgICAgIGlmIChpc0tlZXBBbGl2ZShjdXJyZW50LnBhcmVudC52bm9kZSkpIHtcbiAgICAgICAgaW5qZWN0VG9LZWVwQWxpdmVSb290KHdyYXBwZWRIb29rLCB0eXBlLCB0YXJnZXQsIGN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50O1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gaW5qZWN0VG9LZWVwQWxpdmVSb290KGhvb2ssIHR5cGUsIHRhcmdldCwga2VlcEFsaXZlUm9vdCkge1xuICBjb25zdCBpbmplY3RlZCA9IGluamVjdEhvb2soXG4gICAgdHlwZSxcbiAgICBob29rLFxuICAgIGtlZXBBbGl2ZVJvb3QsXG4gICAgdHJ1ZVxuICAgIC8qIHByZXBlbmQgKi9cbiAgKTtcbiAgb25Vbm1vdW50ZWQoKCkgPT4ge1xuICAgIHJlbW92ZShrZWVwQWxpdmVSb290W3R5cGVdLCBpbmplY3RlZCk7XG4gIH0sIHRhcmdldCk7XG59XG5mdW5jdGlvbiByZXNldFNoYXBlRmxhZyh2bm9kZSkge1xuICB2bm9kZS5zaGFwZUZsYWcgJj0gfjI1NjtcbiAgdm5vZGUuc2hhcGVGbGFnICY9IH41MTI7XG59XG5mdW5jdGlvbiBnZXRJbm5lckNoaWxkKHZub2RlKSB7XG4gIHJldHVybiB2bm9kZS5zaGFwZUZsYWcgJiAxMjggPyB2bm9kZS5zc0NvbnRlbnQgOiB2bm9kZTtcbn1cblxuZnVuY3Rpb24gaW5qZWN0SG9vayh0eXBlLCBob29rLCB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2UsIHByZXBlbmQgPSBmYWxzZSkge1xuICBpZiAodGFyZ2V0KSB7XG4gICAgY29uc3QgaG9va3MgPSB0YXJnZXRbdHlwZV0gfHwgKHRhcmdldFt0eXBlXSA9IFtdKTtcbiAgICBjb25zdCB3cmFwcGVkSG9vayA9IGhvb2suX193ZWggfHwgKGhvb2suX193ZWggPSAoLi4uYXJncykgPT4ge1xuICAgICAgaWYgKHRhcmdldC5pc1VubW91bnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwYXVzZVRyYWNraW5nKCk7XG4gICAgICBjb25zdCByZXNldCA9IHNldEN1cnJlbnRJbnN0YW5jZSh0YXJnZXQpO1xuICAgICAgY29uc3QgcmVzID0gY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmcoaG9vaywgdGFyZ2V0LCB0eXBlLCBhcmdzKTtcbiAgICAgIHJlc2V0KCk7XG4gICAgICByZXNldFRyYWNraW5nKCk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xuICAgIGlmIChwcmVwZW5kKSB7XG4gICAgICBob29rcy51bnNoaWZ0KHdyYXBwZWRIb29rKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaG9va3MucHVzaCh3cmFwcGVkSG9vayk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkSG9vaztcbiAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgY29uc3QgYXBpTmFtZSA9IHRvSGFuZGxlcktleShFcnJvclR5cGVTdHJpbmdzJDFbdHlwZV0ucmVwbGFjZSgvIGhvb2skLywgXCJcIikpO1xuICAgIHdhcm4kMShcbiAgICAgIGAke2FwaU5hbWV9IGlzIGNhbGxlZCB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gYmUgYXNzb2NpYXRlZCB3aXRoLiBMaWZlY3ljbGUgaW5qZWN0aW9uIEFQSXMgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgZXhlY3V0aW9uIG9mIHNldHVwKCkuYCArIChgIElmIHlvdSBhcmUgdXNpbmcgYXN5bmMgc2V0dXAoKSwgbWFrZSBzdXJlIHRvIHJlZ2lzdGVyIGxpZmVjeWNsZSBob29rcyBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0IHN0YXRlbWVudC5gIClcbiAgICApO1xuICB9XG59XG5jb25zdCBjcmVhdGVIb29rID0gKGxpZmVjeWNsZSkgPT4gKGhvb2ssIHRhcmdldCA9IGN1cnJlbnRJbnN0YW5jZSkgPT4gKFxuICAvLyBwb3N0LWNyZWF0ZSBsaWZlY3ljbGUgcmVnaXN0cmF0aW9ucyBhcmUgbm9vcHMgZHVyaW5nIFNTUiAoZXhjZXB0IGZvciBzZXJ2ZXJQcmVmZXRjaClcbiAgKCFpc0luU1NSQ29tcG9uZW50U2V0dXAgfHwgbGlmZWN5Y2xlID09PSBcInNwXCIpICYmIGluamVjdEhvb2sobGlmZWN5Y2xlLCAoLi4uYXJncykgPT4gaG9vayguLi5hcmdzKSwgdGFyZ2V0KVxuKTtcbmNvbnN0IG9uQmVmb3JlTW91bnQgPSBjcmVhdGVIb29rKFwiYm1cIik7XG5jb25zdCBvbk1vdW50ZWQgPSBjcmVhdGVIb29rKFwibVwiKTtcbmNvbnN0IG9uQmVmb3JlVXBkYXRlID0gY3JlYXRlSG9vayhcImJ1XCIpO1xuY29uc3Qgb25VcGRhdGVkID0gY3JlYXRlSG9vayhcInVcIik7XG5jb25zdCBvbkJlZm9yZVVubW91bnQgPSBjcmVhdGVIb29rKFwiYnVtXCIpO1xuY29uc3Qgb25Vbm1vdW50ZWQgPSBjcmVhdGVIb29rKFwidW1cIik7XG5jb25zdCBvblNlcnZlclByZWZldGNoID0gY3JlYXRlSG9vayhcInNwXCIpO1xuY29uc3Qgb25SZW5kZXJUcmlnZ2VyZWQgPSBjcmVhdGVIb29rKFxuICBcInJ0Z1wiXG4pO1xuY29uc3Qgb25SZW5kZXJUcmFja2VkID0gY3JlYXRlSG9vayhcbiAgXCJydGNcIlxuKTtcbmZ1bmN0aW9uIG9uRXJyb3JDYXB0dXJlZChob29rLCB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2UpIHtcbiAgaW5qZWN0SG9vayhcImVjXCIsIGhvb2ssIHRhcmdldCk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckxpc3Qoc291cmNlLCByZW5kZXJJdGVtLCBjYWNoZSwgaW5kZXgpIHtcbiAgbGV0IHJldDtcbiAgY29uc3QgY2FjaGVkID0gY2FjaGUgJiYgY2FjaGVbaW5kZXhdO1xuICBpZiAoaXNBcnJheShzb3VyY2UpIHx8IGlzU3RyaW5nKHNvdXJjZSkpIHtcbiAgICByZXQgPSBuZXcgQXJyYXkoc291cmNlLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBzb3VyY2UubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSByZW5kZXJJdGVtKHNvdXJjZVtpXSwgaSwgdm9pZCAwLCBjYWNoZWQgJiYgY2FjaGVkW2ldKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNvdXJjZSA9PT0gXCJudW1iZXJcIikge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFOdW1iZXIuaXNJbnRlZ2VyKHNvdXJjZSkpIHtcbiAgICAgIHdhcm4kMShgVGhlIHYtZm9yIHJhbmdlIGV4cGVjdCBhbiBpbnRlZ2VyIHZhbHVlIGJ1dCBnb3QgJHtzb3VyY2V9LmApO1xuICAgIH1cbiAgICByZXQgPSBuZXcgQXJyYXkoc291cmNlKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZTsgaSsrKSB7XG4gICAgICByZXRbaV0gPSByZW5kZXJJdGVtKGkgKyAxLCBpLCB2b2lkIDAsIGNhY2hlZCAmJiBjYWNoZWRbaV0pO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgaWYgKHNvdXJjZVtTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXQgPSBBcnJheS5mcm9tKFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIChpdGVtLCBpKSA9PiByZW5kZXJJdGVtKGl0ZW0sIGksIHZvaWQgMCwgY2FjaGVkICYmIGNhY2hlZFtpXSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICAgICAgcmV0ID0gbmV3IEFycmF5KGtleXMubGVuZ3RoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgcmV0W2ldID0gcmVuZGVySXRlbShzb3VyY2Vba2V5XSwga2V5LCBpLCBjYWNoZWQgJiYgY2FjaGVkW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0ID0gW107XG4gIH1cbiAgaWYgKGNhY2hlKSB7XG4gICAgY2FjaGVbaW5kZXhdID0gcmV0O1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNsb3RzKHNsb3RzLCBkeW5hbWljU2xvdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkeW5hbWljU2xvdHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzbG90ID0gZHluYW1pY1Nsb3RzW2ldO1xuICAgIGlmIChpc0FycmF5KHNsb3QpKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNsb3QubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgc2xvdHNbc2xvdFtqXS5uYW1lXSA9IHNsb3Rbal0uZm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzbG90KSB7XG4gICAgICBzbG90c1tzbG90Lm5hbWVdID0gc2xvdC5rZXkgPyAoLi4uYXJncykgPT4ge1xuICAgICAgICBjb25zdCByZXMgPSBzbG90LmZuKC4uLmFyZ3MpO1xuICAgICAgICBpZiAocmVzKVxuICAgICAgICAgIHJlcy5rZXkgPSBzbG90LmtleTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0gOiBzbG90LmZuO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2xvdHM7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclNsb3Qoc2xvdHMsIG5hbWUsIHByb3BzID0ge30sIGZhbGxiYWNrLCBub1Nsb3R0ZWQpIHtcbiAgaWYgKGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZS5pc0NFIHx8IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZS5wYXJlbnQgJiYgaXNBc3luY1dyYXBwZXIoY3VycmVudFJlbmRlcmluZ0luc3RhbmNlLnBhcmVudCkgJiYgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlLnBhcmVudC5pc0NFKSB7XG4gICAgaWYgKG5hbWUgIT09IFwiZGVmYXVsdFwiKVxuICAgICAgcHJvcHMubmFtZSA9IG5hbWU7XG4gICAgcmV0dXJuIGNyZWF0ZVZOb2RlKFwic2xvdFwiLCBwcm9wcywgZmFsbGJhY2sgJiYgZmFsbGJhY2soKSk7XG4gIH1cbiAgbGV0IHNsb3QgPSBzbG90c1tuYW1lXTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgc2xvdCAmJiBzbG90Lmxlbmd0aCA+IDEpIHtcbiAgICB3YXJuJDEoXG4gICAgICBgU1NSLW9wdGltaXplZCBzbG90IGZ1bmN0aW9uIGRldGVjdGVkIGluIGEgbm9uLVNTUi1vcHRpbWl6ZWQgcmVuZGVyIGZ1bmN0aW9uLiBZb3UgbmVlZCB0byBtYXJrIHRoaXMgY29tcG9uZW50IHdpdGggJGR5bmFtaWMtc2xvdHMgaW4gdGhlIHBhcmVudCB0ZW1wbGF0ZS5gXG4gICAgKTtcbiAgICBzbG90ID0gKCkgPT4gW107XG4gIH1cbiAgaWYgKHNsb3QgJiYgc2xvdC5fYykge1xuICAgIHNsb3QuX2QgPSBmYWxzZTtcbiAgfVxuICBvcGVuQmxvY2soKTtcbiAgY29uc3QgdmFsaWRTbG90Q29udGVudCA9IHNsb3QgJiYgZW5zdXJlVmFsaWRWTm9kZShzbG90KHByb3BzKSk7XG4gIGNvbnN0IHJlbmRlcmVkID0gY3JlYXRlQmxvY2soXG4gICAgRnJhZ21lbnQsXG4gICAge1xuICAgICAga2V5OiBwcm9wcy5rZXkgfHwgLy8gc2xvdCBjb250ZW50IGFycmF5IG9mIGEgZHluYW1pYyBjb25kaXRpb25hbCBzbG90IG1heSBoYXZlIGEgYnJhbmNoXG4gICAgICAvLyBrZXkgYXR0YWNoZWQgaW4gdGhlIGBjcmVhdGVTbG90c2AgaGVscGVyLCByZXNwZWN0IHRoYXRcbiAgICAgIHZhbGlkU2xvdENvbnRlbnQgJiYgdmFsaWRTbG90Q29udGVudC5rZXkgfHwgYF8ke25hbWV9YFxuICAgIH0sXG4gICAgdmFsaWRTbG90Q29udGVudCB8fCAoZmFsbGJhY2sgPyBmYWxsYmFjaygpIDogW10pLFxuICAgIHZhbGlkU2xvdENvbnRlbnQgJiYgc2xvdHMuXyA9PT0gMSA/IDY0IDogLTJcbiAgKTtcbiAgaWYgKCFub1Nsb3R0ZWQgJiYgcmVuZGVyZWQuc2NvcGVJZCkge1xuICAgIHJlbmRlcmVkLnNsb3RTY29wZUlkcyA9IFtyZW5kZXJlZC5zY29wZUlkICsgXCItc1wiXTtcbiAgfVxuICBpZiAoc2xvdCAmJiBzbG90Ll9jKSB7XG4gICAgc2xvdC5fZCA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlbmRlcmVkO1xufVxuZnVuY3Rpb24gZW5zdXJlVmFsaWRWTm9kZSh2bm9kZXMpIHtcbiAgcmV0dXJuIHZub2Rlcy5zb21lKChjaGlsZCkgPT4ge1xuICAgIGlmICghaXNWTm9kZShjaGlsZCkpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoY2hpbGQudHlwZSA9PT0gQ29tbWVudClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoY2hpbGQudHlwZSA9PT0gRnJhZ21lbnQgJiYgIWVuc3VyZVZhbGlkVk5vZGUoY2hpbGQuY2hpbGRyZW4pKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9KSA/IHZub2RlcyA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHRvSGFuZGxlcnMob2JqLCBwcmVzZXJ2ZUNhc2VJZk5lY2Vzc2FyeSkge1xuICBjb25zdCByZXQgPSB7fTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWlzT2JqZWN0KG9iaikpIHtcbiAgICB3YXJuJDEoYHYtb24gd2l0aCBubyBhcmd1bWVudCBleHBlY3RzIGFuIG9iamVjdCB2YWx1ZS5gKTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIHJldFtwcmVzZXJ2ZUNhc2VJZk5lY2Vzc2FyeSAmJiAvW0EtWl0vLnRlc3Qoa2V5KSA/IGBvbjoke2tleX1gIDogdG9IYW5kbGVyS2V5KGtleSldID0gb2JqW2tleV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuY29uc3QgZ2V0UHVibGljSW5zdGFuY2UgPSAoaSkgPT4ge1xuICBpZiAoIWkpXG4gICAgcmV0dXJuIG51bGw7XG4gIGlmIChpc1N0YXRlZnVsQ29tcG9uZW50KGkpKVxuICAgIHJldHVybiBnZXRFeHBvc2VQcm94eShpKSB8fCBpLnByb3h5O1xuICByZXR1cm4gZ2V0UHVibGljSW5zdGFuY2UoaS5wYXJlbnQpO1xufTtcbmNvbnN0IHB1YmxpY1Byb3BlcnRpZXNNYXAgPSAoXG4gIC8vIE1vdmUgUFVSRSBtYXJrZXIgdG8gbmV3IGxpbmUgdG8gd29ya2Fyb3VuZCBjb21waWxlciBkaXNjYXJkaW5nIGl0XG4gIC8vIGR1ZSB0byB0eXBlIGFubm90YXRpb25cbiAgLyogQF9fUFVSRV9fICovIGV4dGVuZCgvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSwge1xuICAgICQ6IChpKSA9PiBpLFxuICAgICRlbDogKGkpID0+IGkudm5vZGUuZWwsXG4gICAgJGRhdGE6IChpKSA9PiBpLmRhdGEsXG4gICAgJHByb3BzOiAoaSkgPT4gISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IHNoYWxsb3dSZWFkb25seShpLnByb3BzKSA6IGkucHJvcHMsXG4gICAgJGF0dHJzOiAoaSkgPT4gISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IHNoYWxsb3dSZWFkb25seShpLmF0dHJzKSA6IGkuYXR0cnMsXG4gICAgJHNsb3RzOiAoaSkgPT4gISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSA/IHNoYWxsb3dSZWFkb25seShpLnNsb3RzKSA6IGkuc2xvdHMsXG4gICAgJHJlZnM6IChpKSA9PiAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gc2hhbGxvd1JlYWRvbmx5KGkucmVmcykgOiBpLnJlZnMsXG4gICAgJHBhcmVudDogKGkpID0+IGdldFB1YmxpY0luc3RhbmNlKGkucGFyZW50KSxcbiAgICAkcm9vdDogKGkpID0+IGdldFB1YmxpY0luc3RhbmNlKGkucm9vdCksXG4gICAgJGVtaXQ6IChpKSA9PiBpLmVtaXQsXG4gICAgJG9wdGlvbnM6IChpKSA9PiBfX1ZVRV9PUFRJT05TX0FQSV9fID8gcmVzb2x2ZU1lcmdlZE9wdGlvbnMoaSkgOiBpLnR5cGUsXG4gICAgJGZvcmNlVXBkYXRlOiAoaSkgPT4gaS5mIHx8IChpLmYgPSAoKSA9PiB7XG4gICAgICBpLmVmZmVjdC5kaXJ0eSA9IHRydWU7XG4gICAgICBxdWV1ZUpvYihpLnVwZGF0ZSk7XG4gICAgfSksXG4gICAgJG5leHRUaWNrOiAoaSkgPT4gaS5uIHx8IChpLm4gPSBuZXh0VGljay5iaW5kKGkucHJveHkpKSxcbiAgICAkd2F0Y2g6IChpKSA9PiBfX1ZVRV9PUFRJT05TX0FQSV9fID8gaW5zdGFuY2VXYXRjaC5iaW5kKGkpIDogTk9PUFxuICB9KVxuKTtcbmNvbnN0IGlzUmVzZXJ2ZWRQcmVmaXggPSAoa2V5KSA9PiBrZXkgPT09IFwiX1wiIHx8IGtleSA9PT0gXCIkXCI7XG5jb25zdCBoYXNTZXR1cEJpbmRpbmcgPSAoc3RhdGUsIGtleSkgPT4gc3RhdGUgIT09IEVNUFRZX09CSiAmJiAhc3RhdGUuX19pc1NjcmlwdFNldHVwICYmIGhhc093bihzdGF0ZSwga2V5KTtcbmNvbnN0IFB1YmxpY0luc3RhbmNlUHJveHlIYW5kbGVycyA9IHtcbiAgZ2V0KHsgXzogaW5zdGFuY2UgfSwga2V5KSB7XG4gICAgY29uc3QgeyBjdHgsIHNldHVwU3RhdGUsIGRhdGEsIHByb3BzLCBhY2Nlc3NDYWNoZSwgdHlwZSwgYXBwQ29udGV4dCB9ID0gaW5zdGFuY2U7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYga2V5ID09PSBcIl9faXNWdWVcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGxldCBub3JtYWxpemVkUHJvcHM7XG4gICAgaWYgKGtleVswXSAhPT0gXCIkXCIpIHtcbiAgICAgIGNvbnN0IG4gPSBhY2Nlc3NDYWNoZVtrZXldO1xuICAgICAgaWYgKG4gIT09IHZvaWQgMCkge1xuICAgICAgICBzd2l0Y2ggKG4pIHtcbiAgICAgICAgICBjYXNlIDEgLyogU0VUVVAgKi86XG4gICAgICAgICAgICByZXR1cm4gc2V0dXBTdGF0ZVtrZXldO1xuICAgICAgICAgIGNhc2UgMiAvKiBEQVRBICovOlxuICAgICAgICAgICAgcmV0dXJuIGRhdGFba2V5XTtcbiAgICAgICAgICBjYXNlIDQgLyogQ09OVEVYVCAqLzpcbiAgICAgICAgICAgIHJldHVybiBjdHhba2V5XTtcbiAgICAgICAgICBjYXNlIDMgLyogUFJPUFMgKi86XG4gICAgICAgICAgICByZXR1cm4gcHJvcHNba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChoYXNTZXR1cEJpbmRpbmcoc2V0dXBTdGF0ZSwga2V5KSkge1xuICAgICAgICBhY2Nlc3NDYWNoZVtrZXldID0gMSAvKiBTRVRVUCAqLztcbiAgICAgICAgcmV0dXJuIHNldHVwU3RhdGVba2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSAhPT0gRU1QVFlfT0JKICYmIGhhc093bihkYXRhLCBrZXkpKSB7XG4gICAgICAgIGFjY2Vzc0NhY2hlW2tleV0gPSAyIC8qIERBVEEgKi87XG4gICAgICAgIHJldHVybiBkYXRhW2tleV07XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAvLyBvbmx5IGNhY2hlIG90aGVyIHByb3BlcnRpZXMgd2hlbiBpbnN0YW5jZSBoYXMgZGVjbGFyZWQgKHRodXMgc3RhYmxlKVxuICAgICAgICAvLyBwcm9wc1xuICAgICAgICAobm9ybWFsaXplZFByb3BzID0gaW5zdGFuY2UucHJvcHNPcHRpb25zWzBdKSAmJiBoYXNPd24obm9ybWFsaXplZFByb3BzLCBrZXkpXG4gICAgICApIHtcbiAgICAgICAgYWNjZXNzQ2FjaGVba2V5XSA9IDMgLyogUFJPUFMgKi87XG4gICAgICAgIHJldHVybiBwcm9wc1trZXldO1xuICAgICAgfSBlbHNlIGlmIChjdHggIT09IEVNUFRZX09CSiAmJiBoYXNPd24oY3R4LCBrZXkpKSB7XG4gICAgICAgIGFjY2Vzc0NhY2hlW2tleV0gPSA0IC8qIENPTlRFWFQgKi87XG4gICAgICAgIHJldHVybiBjdHhba2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoIV9fVlVFX09QVElPTlNfQVBJX18gfHwgc2hvdWxkQ2FjaGVBY2Nlc3MpIHtcbiAgICAgICAgYWNjZXNzQ2FjaGVba2V5XSA9IDAgLyogT1RIRVIgKi87XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHB1YmxpY0dldHRlciA9IHB1YmxpY1Byb3BlcnRpZXNNYXBba2V5XTtcbiAgICBsZXQgY3NzTW9kdWxlLCBnbG9iYWxQcm9wZXJ0aWVzO1xuICAgIGlmIChwdWJsaWNHZXR0ZXIpIHtcbiAgICAgIGlmIChrZXkgPT09IFwiJGF0dHJzXCIpIHtcbiAgICAgICAgdHJhY2soaW5zdGFuY2UsIFwiZ2V0XCIsIGtleSk7XG4gICAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgbWFya0F0dHJzQWNjZXNzZWQoKTtcbiAgICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBrZXkgPT09IFwiJHNsb3RzXCIpIHtcbiAgICAgICAgdHJhY2soaW5zdGFuY2UsIFwiZ2V0XCIsIGtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHVibGljR2V0dGVyKGluc3RhbmNlKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgLy8gY3NzIG1vZHVsZSAoaW5qZWN0ZWQgYnkgdnVlLWxvYWRlcilcbiAgICAgIChjc3NNb2R1bGUgPSB0eXBlLl9fY3NzTW9kdWxlcykgJiYgKGNzc01vZHVsZSA9IGNzc01vZHVsZVtrZXldKVxuICAgICkge1xuICAgICAgcmV0dXJuIGNzc01vZHVsZTtcbiAgICB9IGVsc2UgaWYgKGN0eCAhPT0gRU1QVFlfT0JKICYmIGhhc093bihjdHgsIGtleSkpIHtcbiAgICAgIGFjY2Vzc0NhY2hlW2tleV0gPSA0IC8qIENPTlRFWFQgKi87XG4gICAgICByZXR1cm4gY3R4W2tleV07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIC8vIGdsb2JhbCBwcm9wZXJ0aWVzXG4gICAgICBnbG9iYWxQcm9wZXJ0aWVzID0gYXBwQ29udGV4dC5jb25maWcuZ2xvYmFsUHJvcGVydGllcywgaGFzT3duKGdsb2JhbFByb3BlcnRpZXMsIGtleSlcbiAgICApIHtcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFByb3BlcnRpZXNba2V5XTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlICYmICghaXNTdHJpbmcoa2V5KSB8fCAvLyAjMTA5MSBhdm9pZCBpbnRlcm5hbCBpc1JlZi9pc1ZOb2RlIGNoZWNrcyBvbiBjb21wb25lbnQgaW5zdGFuY2UgbGVhZGluZ1xuICAgIC8vIHRvIGluZmluaXRlIHdhcm5pbmcgbG9vcFxuICAgIGtleS5pbmRleE9mKFwiX192XCIpICE9PSAwKSkge1xuICAgICAgaWYgKGRhdGEgIT09IEVNUFRZX09CSiAmJiBpc1Jlc2VydmVkUHJlZml4KGtleVswXSkgJiYgaGFzT3duKGRhdGEsIGtleSkpIHtcbiAgICAgICAgd2FybiQxKFxuICAgICAgICAgIGBQcm9wZXJ0eSAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAga2V5XG4gICAgICAgICAgKX0gbXVzdCBiZSBhY2Nlc3NlZCB2aWEgJGRhdGEgYmVjYXVzZSBpdCBzdGFydHMgd2l0aCBhIHJlc2VydmVkIGNoYXJhY3RlciAoXCIkXCIgb3IgXCJfXCIpIGFuZCBpcyBub3QgcHJveGllZCBvbiB0aGUgcmVuZGVyIGNvbnRleHQuYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChpbnN0YW5jZSA9PT0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlKSB7XG4gICAgICAgIHdhcm4kMShcbiAgICAgICAgICBgUHJvcGVydHkgJHtKU09OLnN0cmluZ2lmeShrZXkpfSB3YXMgYWNjZXNzZWQgZHVyaW5nIHJlbmRlciBidXQgaXMgbm90IGRlZmluZWQgb24gaW5zdGFuY2UuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgc2V0KHsgXzogaW5zdGFuY2UgfSwga2V5LCB2YWx1ZSkge1xuICAgIGNvbnN0IHsgZGF0YSwgc2V0dXBTdGF0ZSwgY3R4IH0gPSBpbnN0YW5jZTtcbiAgICBpZiAoaGFzU2V0dXBCaW5kaW5nKHNldHVwU3RhdGUsIGtleSkpIHtcbiAgICAgIHNldHVwU3RhdGVba2V5XSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHNldHVwU3RhdGUuX19pc1NjcmlwdFNldHVwICYmIGhhc093bihzZXR1cFN0YXRlLCBrZXkpKSB7XG4gICAgICB3YXJuJDEoYENhbm5vdCBtdXRhdGUgPHNjcmlwdCBzZXR1cD4gYmluZGluZyBcIiR7a2V5fVwiIGZyb20gT3B0aW9ucyBBUEkuYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChkYXRhICE9PSBFTVBUWV9PQkogJiYgaGFzT3duKGRhdGEsIGtleSkpIHtcbiAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChoYXNPd24oaW5zdGFuY2UucHJvcHMsIGtleSkpIHtcbiAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgd2FybiQxKGBBdHRlbXB0aW5nIHRvIG11dGF0ZSBwcm9wIFwiJHtrZXl9XCIuIFByb3BzIGFyZSByZWFkb25seS5gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGtleVswXSA9PT0gXCIkXCIgJiYga2V5LnNsaWNlKDEpIGluIGluc3RhbmNlKSB7XG4gICAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHdhcm4kMShcbiAgICAgICAgYEF0dGVtcHRpbmcgdG8gbXV0YXRlIHB1YmxpYyBwcm9wZXJ0eSBcIiR7a2V5fVwiLiBQcm9wZXJ0aWVzIHN0YXJ0aW5nIHdpdGggJCBhcmUgcmVzZXJ2ZWQgYW5kIHJlYWRvbmx5LmBcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGtleSBpbiBpbnN0YW5jZS5hcHBDb250ZXh0LmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIGtleSwge1xuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3R4W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGhhcyh7XG4gICAgXzogeyBkYXRhLCBzZXR1cFN0YXRlLCBhY2Nlc3NDYWNoZSwgY3R4LCBhcHBDb250ZXh0LCBwcm9wc09wdGlvbnMgfVxuICB9LCBrZXkpIHtcbiAgICBsZXQgbm9ybWFsaXplZFByb3BzO1xuICAgIHJldHVybiAhIWFjY2Vzc0NhY2hlW2tleV0gfHwgZGF0YSAhPT0gRU1QVFlfT0JKICYmIGhhc093bihkYXRhLCBrZXkpIHx8IGhhc1NldHVwQmluZGluZyhzZXR1cFN0YXRlLCBrZXkpIHx8IChub3JtYWxpemVkUHJvcHMgPSBwcm9wc09wdGlvbnNbMF0pICYmIGhhc093bihub3JtYWxpemVkUHJvcHMsIGtleSkgfHwgaGFzT3duKGN0eCwga2V5KSB8fCBoYXNPd24ocHVibGljUHJvcGVydGllc01hcCwga2V5KSB8fCBoYXNPd24oYXBwQ29udGV4dC5jb25maWcuZ2xvYmFsUHJvcGVydGllcywga2V5KTtcbiAgfSxcbiAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgICBpZiAoZGVzY3JpcHRvci5nZXQgIT0gbnVsbCkge1xuICAgICAgdGFyZ2V0Ll8uYWNjZXNzQ2FjaGVba2V5XSA9IDA7XG4gICAgfSBlbHNlIGlmIChoYXNPd24oZGVzY3JpcHRvciwgXCJ2YWx1ZVwiKSkge1xuICAgICAgdGhpcy5zZXQodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IudmFsdWUsIG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcik7XG4gIH1cbn07XG5pZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB0cnVlKSB7XG4gIFB1YmxpY0luc3RhbmNlUHJveHlIYW5kbGVycy5vd25LZXlzID0gKHRhcmdldCkgPT4ge1xuICAgIHdhcm4kMShcbiAgICAgIGBBdm9pZCBhcHAgbG9naWMgdGhhdCByZWxpZXMgb24gZW51bWVyYXRpbmcga2V5cyBvbiBhIGNvbXBvbmVudCBpbnN0YW5jZS4gVGhlIGtleXMgd2lsbCBiZSBlbXB0eSBpbiBwcm9kdWN0aW9uIG1vZGUgdG8gYXZvaWQgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuYFxuICAgICk7XG4gICAgcmV0dXJuIFJlZmxlY3Qub3duS2V5cyh0YXJnZXQpO1xuICB9O1xufVxuY29uc3QgUnVudGltZUNvbXBpbGVkUHVibGljSW5zdGFuY2VQcm94eUhhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIGV4dGVuZChcbiAge30sXG4gIFB1YmxpY0luc3RhbmNlUHJveHlIYW5kbGVycyxcbiAge1xuICAgIGdldCh0YXJnZXQsIGtleSkge1xuICAgICAgaWYgKGtleSA9PT0gU3ltYm9sLnVuc2NvcGFibGVzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQdWJsaWNJbnN0YW5jZVByb3h5SGFuZGxlcnMuZ2V0KHRhcmdldCwga2V5LCB0YXJnZXQpO1xuICAgIH0sXG4gICAgaGFzKF8sIGtleSkge1xuICAgICAgY29uc3QgaGFzID0ga2V5WzBdICE9PSBcIl9cIiAmJiAhaXNHbG9iYWxseUFsbG93ZWQoa2V5KTtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFoYXMgJiYgUHVibGljSW5zdGFuY2VQcm94eUhhbmRsZXJzLmhhcyhfLCBrZXkpKSB7XG4gICAgICAgIHdhcm4kMShcbiAgICAgICAgICBgUHJvcGVydHkgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIGtleVxuICAgICAgICAgICl9IHNob3VsZCBub3Qgc3RhcnQgd2l0aCBfIHdoaWNoIGlzIGEgcmVzZXJ2ZWQgcHJlZml4IGZvciBWdWUgaW50ZXJuYWxzLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXM7XG4gICAgfVxuICB9XG4pO1xuZnVuY3Rpb24gY3JlYXRlRGV2UmVuZGVyQ29udGV4dChpbnN0YW5jZSkge1xuICBjb25zdCB0YXJnZXQgPSB7fTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgYF9gLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogKCkgPT4gaW5zdGFuY2VcbiAgfSk7XG4gIE9iamVjdC5rZXlzKHB1YmxpY1Byb3BlcnRpZXNNYXApLmZvckVhY2goKGtleSkgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBnZXQ6ICgpID0+IHB1YmxpY1Byb3BlcnRpZXNNYXBba2V5XShpbnN0YW5jZSksXG4gICAgICAvLyBpbnRlcmNlcHRlZCBieSB0aGUgcHJveHkgc28gbm8gbmVlZCBmb3IgaW1wbGVtZW50YXRpb24sXG4gICAgICAvLyBidXQgbmVlZGVkIHRvIHByZXZlbnQgc2V0IGVycm9yc1xuICAgICAgc2V0OiBOT09QXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuZnVuY3Rpb24gZXhwb3NlUHJvcHNPblJlbmRlckNvbnRleHQoaW5zdGFuY2UpIHtcbiAgY29uc3Qge1xuICAgIGN0eCxcbiAgICBwcm9wc09wdGlvbnM6IFtwcm9wc09wdGlvbnNdXG4gIH0gPSBpbnN0YW5jZTtcbiAgaWYgKHByb3BzT3B0aW9ucykge1xuICAgIE9iamVjdC5rZXlzKHByb3BzT3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBrZXksIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6ICgpID0+IGluc3RhbmNlLnByb3BzW2tleV0sXG4gICAgICAgIHNldDogTk9PUFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGV4cG9zZVNldHVwU3RhdGVPblJlbmRlckNvbnRleHQoaW5zdGFuY2UpIHtcbiAgY29uc3QgeyBjdHgsIHNldHVwU3RhdGUgfSA9IGluc3RhbmNlO1xuICBPYmplY3Qua2V5cyh0b1JhdyhzZXR1cFN0YXRlKSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKCFzZXR1cFN0YXRlLl9faXNTY3JpcHRTZXR1cCkge1xuICAgICAgaWYgKGlzUmVzZXJ2ZWRQcmVmaXgoa2V5WzBdKSkge1xuICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgYHNldHVwKCkgcmV0dXJuIHByb3BlcnR5ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICBrZXlcbiAgICAgICAgICApfSBzaG91bGQgbm90IHN0YXJ0IHdpdGggXCIkXCIgb3IgXCJfXCIgd2hpY2ggYXJlIHJlc2VydmVkIHByZWZpeGVzIGZvciBWdWUgaW50ZXJuYWxzLmBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwga2V5LCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiAoKSA9PiBzZXR1cFN0YXRlW2tleV0sXG4gICAgICAgIHNldDogTk9PUFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3Qgd2FyblJ1bnRpbWVVc2FnZSA9IChtZXRob2QpID0+IHdhcm4kMShcbiAgYCR7bWV0aG9kfSgpIGlzIGEgY29tcGlsZXItaGludCBoZWxwZXIgdGhhdCBpcyBvbmx5IHVzYWJsZSBpbnNpZGUgPHNjcmlwdCBzZXR1cD4gb2YgYSBzaW5nbGUgZmlsZSBjb21wb25lbnQuIEl0cyBhcmd1bWVudHMgc2hvdWxkIGJlIGNvbXBpbGVkIGF3YXkgYW5kIHBhc3NpbmcgaXQgYXQgcnVudGltZSBoYXMgbm8gZWZmZWN0LmBcbik7XG5mdW5jdGlvbiBkZWZpbmVQcm9wcygpIHtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICB3YXJuUnVudGltZVVzYWdlKGBkZWZpbmVQcm9wc2ApO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZGVmaW5lRW1pdHMoKSB7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgd2FyblJ1bnRpbWVVc2FnZShgZGVmaW5lRW1pdHNgKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGRlZmluZUV4cG9zZShleHBvc2VkKSB7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgd2FyblJ1bnRpbWVVc2FnZShgZGVmaW5lRXhwb3NlYCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRlZmluZU9wdGlvbnMob3B0aW9ucykge1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIHdhcm5SdW50aW1lVXNhZ2UoYGRlZmluZU9wdGlvbnNgKTtcbiAgfVxufVxuZnVuY3Rpb24gZGVmaW5lU2xvdHMoKSB7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgd2FyblJ1bnRpbWVVc2FnZShgZGVmaW5lU2xvdHNgKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGRlZmluZU1vZGVsKCkge1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIHdhcm5SdW50aW1lVXNhZ2UoXCJkZWZpbmVNb2RlbFwiKTtcbiAgfVxufVxuZnVuY3Rpb24gd2l0aERlZmF1bHRzKHByb3BzLCBkZWZhdWx0cykge1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIHdhcm5SdW50aW1lVXNhZ2UoYHdpdGhEZWZhdWx0c2ApO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gdXNlU2xvdHMoKSB7XG4gIHJldHVybiBnZXRDb250ZXh0KCkuc2xvdHM7XG59XG5mdW5jdGlvbiB1c2VBdHRycygpIHtcbiAgcmV0dXJuIGdldENvbnRleHQoKS5hdHRycztcbn1cbmZ1bmN0aW9uIGdldENvbnRleHQoKSB7XG4gIGNvbnN0IGkgPSBnZXRDdXJyZW50SW5zdGFuY2UoKTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWkpIHtcbiAgICB3YXJuJDEoYHVzZUNvbnRleHQoKSBjYWxsZWQgd2l0aG91dCBhY3RpdmUgaW5zdGFuY2UuYCk7XG4gIH1cbiAgcmV0dXJuIGkuc2V0dXBDb250ZXh0IHx8IChpLnNldHVwQ29udGV4dCA9IGNyZWF0ZVNldHVwQ29udGV4dChpKSk7XG59XG5mdW5jdGlvbiBub3JtYWxpemVQcm9wc09yRW1pdHMocHJvcHMpIHtcbiAgcmV0dXJuIGlzQXJyYXkocHJvcHMpID8gcHJvcHMucmVkdWNlKFxuICAgIChub3JtYWxpemVkLCBwKSA9PiAobm9ybWFsaXplZFtwXSA9IG51bGwsIG5vcm1hbGl6ZWQpLFxuICAgIHt9XG4gICkgOiBwcm9wcztcbn1cbmZ1bmN0aW9uIG1lcmdlRGVmYXVsdHMocmF3LCBkZWZhdWx0cykge1xuICBjb25zdCBwcm9wcyA9IG5vcm1hbGl6ZVByb3BzT3JFbWl0cyhyYXcpO1xuICBmb3IgKGNvbnN0IGtleSBpbiBkZWZhdWx0cykge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIl9fc2tpcFwiKSlcbiAgICAgIGNvbnRpbnVlO1xuICAgIGxldCBvcHQgPSBwcm9wc1trZXldO1xuICAgIGlmIChvcHQpIHtcbiAgICAgIGlmIChpc0FycmF5KG9wdCkgfHwgaXNGdW5jdGlvbihvcHQpKSB7XG4gICAgICAgIG9wdCA9IHByb3BzW2tleV0gPSB7IHR5cGU6IG9wdCwgZGVmYXVsdDogZGVmYXVsdHNba2V5XSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0LmRlZmF1bHQgPSBkZWZhdWx0c1trZXldO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0ID09PSBudWxsKSB7XG4gICAgICBvcHQgPSBwcm9wc1trZXldID0geyBkZWZhdWx0OiBkZWZhdWx0c1trZXldIH07XG4gICAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICB3YXJuJDEoYHByb3BzIGRlZmF1bHQga2V5IFwiJHtrZXl9XCIgaGFzIG5vIGNvcnJlc3BvbmRpbmcgZGVjbGFyYXRpb24uYCk7XG4gICAgfVxuICAgIGlmIChvcHQgJiYgZGVmYXVsdHNbYF9fc2tpcF8ke2tleX1gXSkge1xuICAgICAgb3B0LnNraXBGYWN0b3J5ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByb3BzO1xufVxuZnVuY3Rpb24gbWVyZ2VNb2RlbHMoYSwgYikge1xuICBpZiAoIWEgfHwgIWIpXG4gICAgcmV0dXJuIGEgfHwgYjtcbiAgaWYgKGlzQXJyYXkoYSkgJiYgaXNBcnJheShiKSlcbiAgICByZXR1cm4gYS5jb25jYXQoYik7XG4gIHJldHVybiBleHRlbmQoe30sIG5vcm1hbGl6ZVByb3BzT3JFbWl0cyhhKSwgbm9ybWFsaXplUHJvcHNPckVtaXRzKGIpKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVByb3BzUmVzdFByb3h5KHByb3BzLCBleGNsdWRlZEtleXMpIHtcbiAgY29uc3QgcmV0ID0ge307XG4gIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKCFleGNsdWRlZEtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldCwga2V5LCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogKCkgPT4gcHJvcHNba2V5XVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5mdW5jdGlvbiB3aXRoQXN5bmNDb250ZXh0KGdldEF3YWl0YWJsZSkge1xuICBjb25zdCBjdHggPSBnZXRDdXJyZW50SW5zdGFuY2UoKTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWN0eCkge1xuICAgIHdhcm4kMShcbiAgICAgIGB3aXRoQXN5bmNDb250ZXh0IGNhbGxlZCB3aXRob3V0IGFjdGl2ZSBjdXJyZW50IGluc3RhbmNlLiBUaGlzIGlzIGxpa2VseSBhIGJ1Zy5gXG4gICAgKTtcbiAgfVxuICBsZXQgYXdhaXRhYmxlID0gZ2V0QXdhaXRhYmxlKCk7XG4gIHVuc2V0Q3VycmVudEluc3RhbmNlKCk7XG4gIGlmIChpc1Byb21pc2UoYXdhaXRhYmxlKSkge1xuICAgIGF3YWl0YWJsZSA9IGF3YWl0YWJsZS5jYXRjaCgoZSkgPT4ge1xuICAgICAgc2V0Q3VycmVudEluc3RhbmNlKGN0eCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBbYXdhaXRhYmxlLCAoKSA9PiBzZXRDdXJyZW50SW5zdGFuY2UoY3R4KV07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUR1cGxpY2F0ZUNoZWNrZXIoKSB7XG4gIGNvbnN0IGNhY2hlID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAodHlwZSwga2V5KSA9PiB7XG4gICAgaWYgKGNhY2hlW2tleV0pIHtcbiAgICAgIHdhcm4kMShgJHt0eXBlfSBwcm9wZXJ0eSBcIiR7a2V5fVwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiAke2NhY2hlW2tleV19LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWNoZVtrZXldID0gdHlwZTtcbiAgICB9XG4gIH07XG59XG5sZXQgc2hvdWxkQ2FjaGVBY2Nlc3MgPSB0cnVlO1xuZnVuY3Rpb24gYXBwbHlPcHRpb25zKGluc3RhbmNlKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSByZXNvbHZlTWVyZ2VkT3B0aW9ucyhpbnN0YW5jZSk7XG4gIGNvbnN0IHB1YmxpY1RoaXMgPSBpbnN0YW5jZS5wcm94eTtcbiAgY29uc3QgY3R4ID0gaW5zdGFuY2UuY3R4O1xuICBzaG91bGRDYWNoZUFjY2VzcyA9IGZhbHNlO1xuICBpZiAob3B0aW9ucy5iZWZvcmVDcmVhdGUpIHtcbiAgICBjYWxsSG9vayhvcHRpb25zLmJlZm9yZUNyZWF0ZSwgaW5zdGFuY2UsIFwiYmNcIik7XG4gIH1cbiAgY29uc3Qge1xuICAgIC8vIHN0YXRlXG4gICAgZGF0YTogZGF0YU9wdGlvbnMsXG4gICAgY29tcHV0ZWQ6IGNvbXB1dGVkT3B0aW9ucyxcbiAgICBtZXRob2RzLFxuICAgIHdhdGNoOiB3YXRjaE9wdGlvbnMsXG4gICAgcHJvdmlkZTogcHJvdmlkZU9wdGlvbnMsXG4gICAgaW5qZWN0OiBpbmplY3RPcHRpb25zLFxuICAgIC8vIGxpZmVjeWNsZVxuICAgIGNyZWF0ZWQsXG4gICAgYmVmb3JlTW91bnQsXG4gICAgbW91bnRlZCxcbiAgICBiZWZvcmVVcGRhdGUsXG4gICAgdXBkYXRlZCxcbiAgICBhY3RpdmF0ZWQsXG4gICAgZGVhY3RpdmF0ZWQsXG4gICAgYmVmb3JlRGVzdHJveSxcbiAgICBiZWZvcmVVbm1vdW50LFxuICAgIGRlc3Ryb3llZCxcbiAgICB1bm1vdW50ZWQsXG4gICAgcmVuZGVyLFxuICAgIHJlbmRlclRyYWNrZWQsXG4gICAgcmVuZGVyVHJpZ2dlcmVkLFxuICAgIGVycm9yQ2FwdHVyZWQsXG4gICAgc2VydmVyUHJlZmV0Y2gsXG4gICAgLy8gcHVibGljIEFQSVxuICAgIGV4cG9zZSxcbiAgICBpbmhlcml0QXR0cnMsXG4gICAgLy8gYXNzZXRzXG4gICAgY29tcG9uZW50cyxcbiAgICBkaXJlY3RpdmVzLFxuICAgIGZpbHRlcnNcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGNoZWNrRHVwbGljYXRlUHJvcGVydGllcyA9ICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyBjcmVhdGVEdXBsaWNhdGVDaGVja2VyKCkgOiBudWxsO1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIGNvbnN0IFtwcm9wc09wdGlvbnNdID0gaW5zdGFuY2UucHJvcHNPcHRpb25zO1xuICAgIGlmIChwcm9wc09wdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzT3B0aW9ucykge1xuICAgICAgICBjaGVja0R1cGxpY2F0ZVByb3BlcnRpZXMoXCJQcm9wc1wiIC8qIFBST1BTICovLCBrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoaW5qZWN0T3B0aW9ucykge1xuICAgIHJlc29sdmVJbmplY3Rpb25zKGluamVjdE9wdGlvbnMsIGN0eCwgY2hlY2tEdXBsaWNhdGVQcm9wZXJ0aWVzKTtcbiAgfVxuICBpZiAobWV0aG9kcykge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IG1ldGhvZEhhbmRsZXIgPSBtZXRob2RzW2tleV07XG4gICAgICBpZiAoaXNGdW5jdGlvbihtZXRob2RIYW5kbGVyKSkge1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIGtleSwge1xuICAgICAgICAgICAgdmFsdWU6IG1ldGhvZEhhbmRsZXIuYmluZChwdWJsaWNUaGlzKSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN0eFtrZXldID0gbWV0aG9kSGFuZGxlci5iaW5kKHB1YmxpY1RoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgY2hlY2tEdXBsaWNhdGVQcm9wZXJ0aWVzKFwiTWV0aG9kc1wiIC8qIE1FVEhPRFMgKi8sIGtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgYE1ldGhvZCBcIiR7a2V5fVwiIGhhcyB0eXBlIFwiJHt0eXBlb2YgbWV0aG9kSGFuZGxlcn1cIiBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIERpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoZGF0YU9wdGlvbnMpIHtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhaXNGdW5jdGlvbihkYXRhT3B0aW9ucykpIHtcbiAgICAgIHdhcm4kMShcbiAgICAgICAgYFRoZSBkYXRhIG9wdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24uIFBsYWluIG9iamVjdCB1c2FnZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLmBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBkYXRhT3B0aW9ucy5jYWxsKHB1YmxpY1RoaXMsIHB1YmxpY1RoaXMpO1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgd2FybiQxKFxuICAgICAgICBgZGF0YSgpIHJldHVybmVkIGEgUHJvbWlzZSAtIG5vdGUgZGF0YSgpIGNhbm5vdCBiZSBhc3luYzsgSWYgeW91IGludGVuZCB0byBwZXJmb3JtIGRhdGEgZmV0Y2hpbmcgYmVmb3JlIGNvbXBvbmVudCByZW5kZXJzLCB1c2UgYXN5bmMgc2V0dXAoKSArIDxTdXNwZW5zZT4uYFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFpc09iamVjdChkYXRhKSkge1xuICAgICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB3YXJuJDEoYGRhdGEoKSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2UuZGF0YSA9IHJlYWN0aXZlKGRhdGEpO1xuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgICAgICAgIGNoZWNrRHVwbGljYXRlUHJvcGVydGllcyhcIkRhdGFcIiAvKiBEQVRBICovLCBrZXkpO1xuICAgICAgICAgIGlmICghaXNSZXNlcnZlZFByZWZpeChrZXlbMF0pKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBrZXksIHtcbiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBnZXQ6ICgpID0+IGRhdGFba2V5XSxcbiAgICAgICAgICAgICAgc2V0OiBOT09QXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgc2hvdWxkQ2FjaGVBY2Nlc3MgPSB0cnVlO1xuICBpZiAoY29tcHV0ZWRPcHRpb25zKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY29tcHV0ZWRPcHRpb25zKSB7XG4gICAgICBjb25zdCBvcHQgPSBjb21wdXRlZE9wdGlvbnNba2V5XTtcbiAgICAgIGNvbnN0IGdldCA9IGlzRnVuY3Rpb24ob3B0KSA/IG9wdC5iaW5kKHB1YmxpY1RoaXMsIHB1YmxpY1RoaXMpIDogaXNGdW5jdGlvbihvcHQuZ2V0KSA/IG9wdC5nZXQuYmluZChwdWJsaWNUaGlzLCBwdWJsaWNUaGlzKSA6IE5PT1A7XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBnZXQgPT09IE5PT1ApIHtcbiAgICAgICAgd2FybiQxKGBDb21wdXRlZCBwcm9wZXJ0eSBcIiR7a2V5fVwiIGhhcyBubyBnZXR0ZXIuYCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzZXQgPSAhaXNGdW5jdGlvbihvcHQpICYmIGlzRnVuY3Rpb24ob3B0LnNldCkgPyBvcHQuc2V0LmJpbmQocHVibGljVGhpcykgOiAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gKCkgPT4ge1xuICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgYFdyaXRlIG9wZXJhdGlvbiBmYWlsZWQ6IGNvbXB1dGVkIHByb3BlcnR5IFwiJHtrZXl9XCIgaXMgcmVhZG9ubHkuYFxuICAgICAgICApO1xuICAgICAgfSA6IE5PT1A7XG4gICAgICBjb25zdCBjID0gY29tcHV0ZWQoe1xuICAgICAgICBnZXQsXG4gICAgICAgIHNldFxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBrZXksIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6ICgpID0+IGMudmFsdWUsXG4gICAgICAgIHNldDogKHYpID0+IGMudmFsdWUgPSB2XG4gICAgICB9KTtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgIGNoZWNrRHVwbGljYXRlUHJvcGVydGllcyhcIkNvbXB1dGVkXCIgLyogQ09NUFVURUQgKi8sIGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICh3YXRjaE9wdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB3YXRjaE9wdGlvbnMpIHtcbiAgICAgIGNyZWF0ZVdhdGNoZXIod2F0Y2hPcHRpb25zW2tleV0sIGN0eCwgcHVibGljVGhpcywga2V5KTtcbiAgICB9XG4gIH1cbiAgaWYgKHByb3ZpZGVPcHRpb25zKSB7XG4gICAgY29uc3QgcHJvdmlkZXMgPSBpc0Z1bmN0aW9uKHByb3ZpZGVPcHRpb25zKSA/IHByb3ZpZGVPcHRpb25zLmNhbGwocHVibGljVGhpcykgOiBwcm92aWRlT3B0aW9ucztcbiAgICBSZWZsZWN0Lm93bktleXMocHJvdmlkZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgcHJvdmlkZShrZXksIHByb3ZpZGVzW2tleV0pO1xuICAgIH0pO1xuICB9XG4gIGlmIChjcmVhdGVkKSB7XG4gICAgY2FsbEhvb2soY3JlYXRlZCwgaW5zdGFuY2UsIFwiY1wiKTtcbiAgfVxuICBmdW5jdGlvbiByZWdpc3RlckxpZmVjeWNsZUhvb2socmVnaXN0ZXIsIGhvb2spIHtcbiAgICBpZiAoaXNBcnJheShob29rKSkge1xuICAgICAgaG9vay5mb3JFYWNoKChfaG9vaykgPT4gcmVnaXN0ZXIoX2hvb2suYmluZChwdWJsaWNUaGlzKSkpO1xuICAgIH0gZWxzZSBpZiAoaG9vaykge1xuICAgICAgcmVnaXN0ZXIoaG9vay5iaW5kKHB1YmxpY1RoaXMpKTtcbiAgICB9XG4gIH1cbiAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uQmVmb3JlTW91bnQsIGJlZm9yZU1vdW50KTtcbiAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uTW91bnRlZCwgbW91bnRlZCk7XG4gIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvbkJlZm9yZVVwZGF0ZSwgYmVmb3JlVXBkYXRlKTtcbiAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uVXBkYXRlZCwgdXBkYXRlZCk7XG4gIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvbkFjdGl2YXRlZCwgYWN0aXZhdGVkKTtcbiAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uRGVhY3RpdmF0ZWQsIGRlYWN0aXZhdGVkKTtcbiAgcmVnaXN0ZXJMaWZlY3ljbGVIb29rKG9uRXJyb3JDYXB0dXJlZCwgZXJyb3JDYXB0dXJlZCk7XG4gIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvblJlbmRlclRyYWNrZWQsIHJlbmRlclRyYWNrZWQpO1xuICByZWdpc3RlckxpZmVjeWNsZUhvb2sob25SZW5kZXJUcmlnZ2VyZWQsIHJlbmRlclRyaWdnZXJlZCk7XG4gIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvbkJlZm9yZVVubW91bnQsIGJlZm9yZVVubW91bnQpO1xuICByZWdpc3RlckxpZmVjeWNsZUhvb2sob25Vbm1vdW50ZWQsIHVubW91bnRlZCk7XG4gIHJlZ2lzdGVyTGlmZWN5Y2xlSG9vayhvblNlcnZlclByZWZldGNoLCBzZXJ2ZXJQcmVmZXRjaCk7XG4gIGlmIChpc0FycmF5KGV4cG9zZSkpIHtcbiAgICBpZiAoZXhwb3NlLmxlbmd0aCkge1xuICAgICAgY29uc3QgZXhwb3NlZCA9IGluc3RhbmNlLmV4cG9zZWQgfHwgKGluc3RhbmNlLmV4cG9zZWQgPSB7fSk7XG4gICAgICBleHBvc2UuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvc2VkLCBrZXksIHtcbiAgICAgICAgICBnZXQ6ICgpID0+IHB1YmxpY1RoaXNba2V5XSxcbiAgICAgICAgICBzZXQ6ICh2YWwpID0+IHB1YmxpY1RoaXNba2V5XSA9IHZhbFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIWluc3RhbmNlLmV4cG9zZWQpIHtcbiAgICAgIGluc3RhbmNlLmV4cG9zZWQgPSB7fTtcbiAgICB9XG4gIH1cbiAgaWYgKHJlbmRlciAmJiBpbnN0YW5jZS5yZW5kZXIgPT09IE5PT1ApIHtcbiAgICBpbnN0YW5jZS5yZW5kZXIgPSByZW5kZXI7XG4gIH1cbiAgaWYgKGluaGVyaXRBdHRycyAhPSBudWxsKSB7XG4gICAgaW5zdGFuY2UuaW5oZXJpdEF0dHJzID0gaW5oZXJpdEF0dHJzO1xuICB9XG4gIGlmIChjb21wb25lbnRzKVxuICAgIGluc3RhbmNlLmNvbXBvbmVudHMgPSBjb21wb25lbnRzO1xuICBpZiAoZGlyZWN0aXZlcylcbiAgICBpbnN0YW5jZS5kaXJlY3RpdmVzID0gZGlyZWN0aXZlcztcbn1cbmZ1bmN0aW9uIHJlc29sdmVJbmplY3Rpb25zKGluamVjdE9wdGlvbnMsIGN0eCwgY2hlY2tEdXBsaWNhdGVQcm9wZXJ0aWVzID0gTk9PUCkge1xuICBpZiAoaXNBcnJheShpbmplY3RPcHRpb25zKSkge1xuICAgIGluamVjdE9wdGlvbnMgPSBub3JtYWxpemVJbmplY3QoaW5qZWN0T3B0aW9ucyk7XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgaW4gaW5qZWN0T3B0aW9ucykge1xuICAgIGNvbnN0IG9wdCA9IGluamVjdE9wdGlvbnNba2V5XTtcbiAgICBsZXQgaW5qZWN0ZWQ7XG4gICAgaWYgKGlzT2JqZWN0KG9wdCkpIHtcbiAgICAgIGlmIChcImRlZmF1bHRcIiBpbiBvcHQpIHtcbiAgICAgICAgaW5qZWN0ZWQgPSBpbmplY3QoXG4gICAgICAgICAgb3B0LmZyb20gfHwga2V5LFxuICAgICAgICAgIG9wdC5kZWZhdWx0LFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluamVjdGVkID0gaW5qZWN0KG9wdC5mcm9tIHx8IGtleSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluamVjdGVkID0gaW5qZWN0KG9wdCk7XG4gICAgfVxuICAgIGlmIChpc1JlZihpbmplY3RlZCkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIGtleSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogKCkgPT4gaW5qZWN0ZWQudmFsdWUsXG4gICAgICAgIHNldDogKHYpID0+IGluamVjdGVkLnZhbHVlID0gdlxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eFtrZXldID0gaW5qZWN0ZWQ7XG4gICAgfVxuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICBjaGVja0R1cGxpY2F0ZVByb3BlcnRpZXMoXCJJbmplY3RcIiAvKiBJTkpFQ1QgKi8sIGtleSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjYWxsSG9vayhob29rLCBpbnN0YW5jZSwgdHlwZSkge1xuICBjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZyhcbiAgICBpc0FycmF5KGhvb2spID8gaG9vay5tYXAoKGgpID0+IGguYmluZChpbnN0YW5jZS5wcm94eSkpIDogaG9vay5iaW5kKGluc3RhbmNlLnByb3h5KSxcbiAgICBpbnN0YW5jZSxcbiAgICB0eXBlXG4gICk7XG59XG5mdW5jdGlvbiBjcmVhdGVXYXRjaGVyKHJhdywgY3R4LCBwdWJsaWNUaGlzLCBrZXkpIHtcbiAgY29uc3QgZ2V0dGVyID0ga2V5LmluY2x1ZGVzKFwiLlwiKSA/IGNyZWF0ZVBhdGhHZXR0ZXIocHVibGljVGhpcywga2V5KSA6ICgpID0+IHB1YmxpY1RoaXNba2V5XTtcbiAgaWYgKGlzU3RyaW5nKHJhdykpIHtcbiAgICBjb25zdCBoYW5kbGVyID0gY3R4W3Jhd107XG4gICAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICAgIHdhdGNoKGdldHRlciwgaGFuZGxlcik7XG4gICAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICB3YXJuJDEoYEludmFsaWQgd2F0Y2ggaGFuZGxlciBzcGVjaWZpZWQgYnkga2V5IFwiJHtyYXd9XCJgLCBoYW5kbGVyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihyYXcpKSB7XG4gICAgd2F0Y2goZ2V0dGVyLCByYXcuYmluZChwdWJsaWNUaGlzKSk7XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QocmF3KSkge1xuICAgIGlmIChpc0FycmF5KHJhdykpIHtcbiAgICAgIHJhdy5mb3JFYWNoKChyKSA9PiBjcmVhdGVXYXRjaGVyKHIsIGN0eCwgcHVibGljVGhpcywga2V5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBpc0Z1bmN0aW9uKHJhdy5oYW5kbGVyKSA/IHJhdy5oYW5kbGVyLmJpbmQocHVibGljVGhpcykgOiBjdHhbcmF3LmhhbmRsZXJdO1xuICAgICAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICAgICAgd2F0Y2goZ2V0dGVyLCBoYW5kbGVyLCByYXcpO1xuICAgICAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgIHdhcm4kMShgSW52YWxpZCB3YXRjaCBoYW5kbGVyIHNwZWNpZmllZCBieSBrZXkgXCIke3Jhdy5oYW5kbGVyfVwiYCwgaGFuZGxlcik7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICB3YXJuJDEoYEludmFsaWQgd2F0Y2ggb3B0aW9uOiBcIiR7a2V5fVwiYCwgcmF3KTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZU1lcmdlZE9wdGlvbnMoaW5zdGFuY2UpIHtcbiAgY29uc3QgYmFzZSA9IGluc3RhbmNlLnR5cGU7XG4gIGNvbnN0IHsgbWl4aW5zLCBleHRlbmRzOiBleHRlbmRzT3B0aW9ucyB9ID0gYmFzZTtcbiAgY29uc3Qge1xuICAgIG1peGluczogZ2xvYmFsTWl4aW5zLFxuICAgIG9wdGlvbnNDYWNoZTogY2FjaGUsXG4gICAgY29uZmlnOiB7IG9wdGlvbk1lcmdlU3RyYXRlZ2llcyB9XG4gIH0gPSBpbnN0YW5jZS5hcHBDb250ZXh0O1xuICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQoYmFzZSk7XG4gIGxldCByZXNvbHZlZDtcbiAgaWYgKGNhY2hlZCkge1xuICAgIHJlc29sdmVkID0gY2FjaGVkO1xuICB9IGVsc2UgaWYgKCFnbG9iYWxNaXhpbnMubGVuZ3RoICYmICFtaXhpbnMgJiYgIWV4dGVuZHNPcHRpb25zKSB7XG4gICAge1xuICAgICAgcmVzb2x2ZWQgPSBiYXNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXNvbHZlZCA9IHt9O1xuICAgIGlmIChnbG9iYWxNaXhpbnMubGVuZ3RoKSB7XG4gICAgICBnbG9iYWxNaXhpbnMuZm9yRWFjaChcbiAgICAgICAgKG0pID0+IG1lcmdlT3B0aW9ucyhyZXNvbHZlZCwgbSwgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzLCB0cnVlKVxuICAgICAgKTtcbiAgICB9XG4gICAgbWVyZ2VPcHRpb25zKHJlc29sdmVkLCBiYXNlLCBvcHRpb25NZXJnZVN0cmF0ZWdpZXMpO1xuICB9XG4gIGlmIChpc09iamVjdChiYXNlKSkge1xuICAgIGNhY2hlLnNldChiYXNlLCByZXNvbHZlZCk7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuZnVuY3Rpb24gbWVyZ2VPcHRpb25zKHRvLCBmcm9tLCBzdHJhdHMsIGFzTWl4aW4gPSBmYWxzZSkge1xuICBjb25zdCB7IG1peGlucywgZXh0ZW5kczogZXh0ZW5kc09wdGlvbnMgfSA9IGZyb207XG4gIGlmIChleHRlbmRzT3B0aW9ucykge1xuICAgIG1lcmdlT3B0aW9ucyh0bywgZXh0ZW5kc09wdGlvbnMsIHN0cmF0cywgdHJ1ZSk7XG4gIH1cbiAgaWYgKG1peGlucykge1xuICAgIG1peGlucy5mb3JFYWNoKFxuICAgICAgKG0pID0+IG1lcmdlT3B0aW9ucyh0bywgbSwgc3RyYXRzLCB0cnVlKVxuICAgICk7XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgaW4gZnJvbSkge1xuICAgIGlmIChhc01peGluICYmIGtleSA9PT0gXCJleHBvc2VcIikge1xuICAgICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB3YXJuJDEoXG4gICAgICAgIGBcImV4cG9zZVwiIG9wdGlvbiBpcyBpZ25vcmVkIHdoZW4gZGVjbGFyZWQgaW4gbWl4aW5zIG9yIGV4dGVuZHMuIEl0IHNob3VsZCBvbmx5IGJlIGRlY2xhcmVkIGluIHRoZSBiYXNlIGNvbXBvbmVudCBpdHNlbGYuYFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RyYXQgPSBpbnRlcm5hbE9wdGlvbk1lcmdlU3RyYXRzW2tleV0gfHwgc3RyYXRzICYmIHN0cmF0c1trZXldO1xuICAgICAgdG9ba2V5XSA9IHN0cmF0ID8gc3RyYXQodG9ba2V5XSwgZnJvbVtrZXldKSA6IGZyb21ba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvO1xufVxuY29uc3QgaW50ZXJuYWxPcHRpb25NZXJnZVN0cmF0cyA9IHtcbiAgZGF0YTogbWVyZ2VEYXRhRm4sXG4gIHByb3BzOiBtZXJnZUVtaXRzT3JQcm9wc09wdGlvbnMsXG4gIGVtaXRzOiBtZXJnZUVtaXRzT3JQcm9wc09wdGlvbnMsXG4gIC8vIG9iamVjdHNcbiAgbWV0aG9kczogbWVyZ2VPYmplY3RPcHRpb25zLFxuICBjb21wdXRlZDogbWVyZ2VPYmplY3RPcHRpb25zLFxuICAvLyBsaWZlY3ljbGVcbiAgYmVmb3JlQ3JlYXRlOiBtZXJnZUFzQXJyYXksXG4gIGNyZWF0ZWQ6IG1lcmdlQXNBcnJheSxcbiAgYmVmb3JlTW91bnQ6IG1lcmdlQXNBcnJheSxcbiAgbW91bnRlZDogbWVyZ2VBc0FycmF5LFxuICBiZWZvcmVVcGRhdGU6IG1lcmdlQXNBcnJheSxcbiAgdXBkYXRlZDogbWVyZ2VBc0FycmF5LFxuICBiZWZvcmVEZXN0cm95OiBtZXJnZUFzQXJyYXksXG4gIGJlZm9yZVVubW91bnQ6IG1lcmdlQXNBcnJheSxcbiAgZGVzdHJveWVkOiBtZXJnZUFzQXJyYXksXG4gIHVubW91bnRlZDogbWVyZ2VBc0FycmF5LFxuICBhY3RpdmF0ZWQ6IG1lcmdlQXNBcnJheSxcbiAgZGVhY3RpdmF0ZWQ6IG1lcmdlQXNBcnJheSxcbiAgZXJyb3JDYXB0dXJlZDogbWVyZ2VBc0FycmF5LFxuICBzZXJ2ZXJQcmVmZXRjaDogbWVyZ2VBc0FycmF5LFxuICAvLyBhc3NldHNcbiAgY29tcG9uZW50czogbWVyZ2VPYmplY3RPcHRpb25zLFxuICBkaXJlY3RpdmVzOiBtZXJnZU9iamVjdE9wdGlvbnMsXG4gIC8vIHdhdGNoXG4gIHdhdGNoOiBtZXJnZVdhdGNoT3B0aW9ucyxcbiAgLy8gcHJvdmlkZSAvIGluamVjdFxuICBwcm92aWRlOiBtZXJnZURhdGFGbixcbiAgaW5qZWN0OiBtZXJnZUluamVjdFxufTtcbmZ1bmN0aW9uIG1lcmdlRGF0YUZuKHRvLCBmcm9tKSB7XG4gIGlmICghZnJvbSkge1xuICAgIHJldHVybiB0bztcbiAgfVxuICBpZiAoIXRvKSB7XG4gICAgcmV0dXJuIGZyb207XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZERhdGFGbigpIHtcbiAgICByZXR1cm4gKGV4dGVuZCkoXG4gICAgICBpc0Z1bmN0aW9uKHRvKSA/IHRvLmNhbGwodGhpcywgdGhpcykgOiB0byxcbiAgICAgIGlzRnVuY3Rpb24oZnJvbSkgPyBmcm9tLmNhbGwodGhpcywgdGhpcykgOiBmcm9tXG4gICAgKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIG1lcmdlSW5qZWN0KHRvLCBmcm9tKSB7XG4gIHJldHVybiBtZXJnZU9iamVjdE9wdGlvbnMobm9ybWFsaXplSW5qZWN0KHRvKSwgbm9ybWFsaXplSW5qZWN0KGZyb20pKTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZUluamVjdChyYXcpIHtcbiAgaWYgKGlzQXJyYXkocmF3KSkge1xuICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXNbcmF3W2ldXSA9IHJhd1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICByZXR1cm4gcmF3O1xufVxuZnVuY3Rpb24gbWVyZ2VBc0FycmF5KHRvLCBmcm9tKSB7XG4gIHJldHVybiB0byA/IFsuLi5uZXcgU2V0KFtdLmNvbmNhdCh0bywgZnJvbSkpXSA6IGZyb207XG59XG5mdW5jdGlvbiBtZXJnZU9iamVjdE9wdGlvbnModG8sIGZyb20pIHtcbiAgcmV0dXJuIHRvID8gZXh0ZW5kKC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpLCB0bywgZnJvbSkgOiBmcm9tO1xufVxuZnVuY3Rpb24gbWVyZ2VFbWl0c09yUHJvcHNPcHRpb25zKHRvLCBmcm9tKSB7XG4gIGlmICh0bykge1xuICAgIGlmIChpc0FycmF5KHRvKSAmJiBpc0FycmF5KGZyb20pKSB7XG4gICAgICByZXR1cm4gWy4uLi8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsuLi50bywgLi4uZnJvbV0pXTtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuZChcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgbm9ybWFsaXplUHJvcHNPckVtaXRzKHRvKSxcbiAgICAgIG5vcm1hbGl6ZVByb3BzT3JFbWl0cyhmcm9tICE9IG51bGwgPyBmcm9tIDoge30pXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnJvbTtcbiAgfVxufVxuZnVuY3Rpb24gbWVyZ2VXYXRjaE9wdGlvbnModG8sIGZyb20pIHtcbiAgaWYgKCF0bylcbiAgICByZXR1cm4gZnJvbTtcbiAgaWYgKCFmcm9tKVxuICAgIHJldHVybiB0bztcbiAgY29uc3QgbWVyZ2VkID0gZXh0ZW5kKC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpLCB0byk7XG4gIGZvciAoY29uc3Qga2V5IGluIGZyb20pIHtcbiAgICBtZXJnZWRba2V5XSA9IG1lcmdlQXNBcnJheSh0b1trZXldLCBmcm9tW2tleV0pO1xuICB9XG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFwcENvbnRleHQoKSB7XG4gIHJldHVybiB7XG4gICAgYXBwOiBudWxsLFxuICAgIGNvbmZpZzoge1xuICAgICAgaXNOYXRpdmVUYWc6IE5PLFxuICAgICAgcGVyZm9ybWFuY2U6IGZhbHNlLFxuICAgICAgZ2xvYmFsUHJvcGVydGllczoge30sXG4gICAgICBvcHRpb25NZXJnZVN0cmF0ZWdpZXM6IHt9LFxuICAgICAgZXJyb3JIYW5kbGVyOiB2b2lkIDAsXG4gICAgICB3YXJuSGFuZGxlcjogdm9pZCAwLFxuICAgICAgY29tcGlsZXJPcHRpb25zOiB7fVxuICAgIH0sXG4gICAgbWl4aW5zOiBbXSxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICBkaXJlY3RpdmVzOiB7fSxcbiAgICBwcm92aWRlczogLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgb3B0aW9uc0NhY2hlOiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSxcbiAgICBwcm9wc0NhY2hlOiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSxcbiAgICBlbWl0c0NhY2hlOiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKVxuICB9O1xufVxubGV0IHVpZCQxID0gMDtcbmZ1bmN0aW9uIGNyZWF0ZUFwcEFQSShyZW5kZXIsIGh5ZHJhdGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZUFwcChyb290Q29tcG9uZW50LCByb290UHJvcHMgPSBudWxsKSB7XG4gICAgaWYgKCFpc0Z1bmN0aW9uKHJvb3RDb21wb25lbnQpKSB7XG4gICAgICByb290Q29tcG9uZW50ID0gZXh0ZW5kKHt9LCByb290Q29tcG9uZW50KTtcbiAgICB9XG4gICAgaWYgKHJvb3RQcm9wcyAhPSBudWxsICYmICFpc09iamVjdChyb290UHJvcHMpKSB7XG4gICAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHdhcm4kMShgcm9vdCBwcm9wcyBwYXNzZWQgdG8gYXBwLm1vdW50KCkgbXVzdCBiZSBhbiBvYmplY3QuYCk7XG4gICAgICByb290UHJvcHMgPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjb250ZXh0ID0gY3JlYXRlQXBwQ29udGV4dCgpO1xuICAgIGNvbnN0IGluc3RhbGxlZFBsdWdpbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKTtcbiAgICBsZXQgaXNNb3VudGVkID0gZmFsc2U7XG4gICAgY29uc3QgYXBwID0gY29udGV4dC5hcHAgPSB7XG4gICAgICBfdWlkOiB1aWQkMSsrLFxuICAgICAgX2NvbXBvbmVudDogcm9vdENvbXBvbmVudCxcbiAgICAgIF9wcm9wczogcm9vdFByb3BzLFxuICAgICAgX2NvbnRhaW5lcjogbnVsbCxcbiAgICAgIF9jb250ZXh0OiBjb250ZXh0LFxuICAgICAgX2luc3RhbmNlOiBudWxsLFxuICAgICAgdmVyc2lvbixcbiAgICAgIGdldCBjb25maWcoKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNvbmZpZztcbiAgICAgIH0sXG4gICAgICBzZXQgY29uZmlnKHYpIHtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICBgYXBwLmNvbmZpZyBjYW5ub3QgYmUgcmVwbGFjZWQuIE1vZGlmeSBpbmRpdmlkdWFsIG9wdGlvbnMgaW5zdGVhZC5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZShwbHVnaW4sIC4uLm9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGluc3RhbGxlZFBsdWdpbnMuaGFzKHBsdWdpbikpIHtcbiAgICAgICAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHdhcm4kMShgUGx1Z2luIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCB0byB0YXJnZXQgYXBwLmApO1xuICAgICAgICB9IGVsc2UgaWYgKHBsdWdpbiAmJiBpc0Z1bmN0aW9uKHBsdWdpbi5pbnN0YWxsKSkge1xuICAgICAgICAgIGluc3RhbGxlZFBsdWdpbnMuYWRkKHBsdWdpbik7XG4gICAgICAgICAgcGx1Z2luLmluc3RhbGwoYXBwLCAuLi5vcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHBsdWdpbikpIHtcbiAgICAgICAgICBpbnN0YWxsZWRQbHVnaW5zLmFkZChwbHVnaW4pO1xuICAgICAgICAgIHBsdWdpbihhcHAsIC4uLm9wdGlvbnMpO1xuICAgICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICBgQSBwbHVnaW4gbXVzdCBlaXRoZXIgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3Qgd2l0aCBhbiBcImluc3RhbGxcIiBmdW5jdGlvbi5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwO1xuICAgICAgfSxcbiAgICAgIG1peGluKG1peGluKSB7XG4gICAgICAgIGlmIChfX1ZVRV9PUFRJT05TX0FQSV9fKSB7XG4gICAgICAgICAgaWYgKCFjb250ZXh0Lm1peGlucy5pbmNsdWRlcyhtaXhpbikpIHtcbiAgICAgICAgICAgIGNvbnRleHQubWl4aW5zLnB1c2gobWl4aW4pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgICAgd2FybiQxKFxuICAgICAgICAgICAgICBcIk1peGluIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCB0byB0YXJnZXQgYXBwXCIgKyAobWl4aW4ubmFtZSA/IGA6ICR7bWl4aW4ubmFtZX1gIDogXCJcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICB3YXJuJDEoXCJNaXhpbnMgYXJlIG9ubHkgYXZhaWxhYmxlIGluIGJ1aWxkcyBzdXBwb3J0aW5nIE9wdGlvbnMgQVBJXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcHA7XG4gICAgICB9LFxuICAgICAgY29tcG9uZW50KG5hbWUsIGNvbXBvbmVudCkge1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lLCBjb250ZXh0LmNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5jb21wb25lbnRzW25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGNvbnRleHQuY29tcG9uZW50c1tuYW1lXSkge1xuICAgICAgICAgIHdhcm4kMShgQ29tcG9uZW50IFwiJHtuYW1lfVwiIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCBpbiB0YXJnZXQgYXBwLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQuY29tcG9uZW50c1tuYW1lXSA9IGNvbXBvbmVudDtcbiAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgIH0sXG4gICAgICBkaXJlY3RpdmUobmFtZSwgZGlyZWN0aXZlKSB7XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgdmFsaWRhdGVEaXJlY3RpdmVOYW1lKG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGlyZWN0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuZGlyZWN0aXZlc1tuYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBjb250ZXh0LmRpcmVjdGl2ZXNbbmFtZV0pIHtcbiAgICAgICAgICB3YXJuJDEoYERpcmVjdGl2ZSBcIiR7bmFtZX1cIiBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgaW4gdGFyZ2V0IGFwcC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmRpcmVjdGl2ZXNbbmFtZV0gPSBkaXJlY3RpdmU7XG4gICAgICAgIHJldHVybiBhcHA7XG4gICAgICB9LFxuICAgICAgbW91bnQocm9vdENvbnRhaW5lciwgaXNIeWRyYXRlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgaWYgKCFpc01vdW50ZWQpIHtcbiAgICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiByb290Q29udGFpbmVyLl9fdnVlX2FwcF9fKSB7XG4gICAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICAgIGBUaGVyZSBpcyBhbHJlYWR5IGFuIGFwcCBpbnN0YW5jZSBtb3VudGVkIG9uIHRoZSBob3N0IGNvbnRhaW5lci5cbiBJZiB5b3Ugd2FudCB0byBtb3VudCBhbm90aGVyIGFwcCBvbiB0aGUgc2FtZSBob3N0IGNvbnRhaW5lciwgeW91IG5lZWQgdG8gdW5tb3VudCB0aGUgcHJldmlvdXMgYXBwIGJ5IGNhbGxpbmcgXFxgYXBwLnVubW91bnQoKVxcYCBmaXJzdC5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB2bm9kZSA9IGNyZWF0ZVZOb2RlKHJvb3RDb21wb25lbnQsIHJvb3RQcm9wcyk7XG4gICAgICAgICAgdm5vZGUuYXBwQ29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgICAgaWYgKG5hbWVzcGFjZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgbmFtZXNwYWNlID0gXCJzdmdcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG5hbWVzcGFjZSA9IHZvaWQgMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVsb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICAgICAgY2xvbmVWTm9kZSh2bm9kZSksXG4gICAgICAgICAgICAgICAgcm9vdENvbnRhaW5lcixcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2VcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0h5ZHJhdGUgJiYgaHlkcmF0ZSkge1xuICAgICAgICAgICAgaHlkcmF0ZSh2bm9kZSwgcm9vdENvbnRhaW5lcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlcih2bm9kZSwgcm9vdENvbnRhaW5lciwgbmFtZXNwYWNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgICBhcHAuX2NvbnRhaW5lciA9IHJvb3RDb250YWluZXI7XG4gICAgICAgICAgcm9vdENvbnRhaW5lci5fX3Z1ZV9hcHBfXyA9IGFwcDtcbiAgICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcbiAgICAgICAgICAgIGFwcC5faW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnQ7XG4gICAgICAgICAgICBkZXZ0b29sc0luaXRBcHAoYXBwLCB2ZXJzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGdldEV4cG9zZVByb3h5KHZub2RlLmNvbXBvbmVudCkgfHwgdm5vZGUuY29tcG9uZW50LnByb3h5O1xuICAgICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICBgQXBwIGhhcyBhbHJlYWR5IGJlZW4gbW91bnRlZC5cbklmIHlvdSB3YW50IHRvIHJlbW91bnQgdGhlIHNhbWUgYXBwLCBtb3ZlIHlvdXIgYXBwIGNyZWF0aW9uIGxvZ2ljIGludG8gYSBmYWN0b3J5IGZ1bmN0aW9uIGFuZCBjcmVhdGUgZnJlc2ggYXBwIGluc3RhbmNlcyBmb3IgZWFjaCBtb3VudCAtIGUuZy4gXFxgY29uc3QgY3JlYXRlTXlBcHAgPSAoKSA9PiBjcmVhdGVBcHAoQXBwKVxcYGBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdW5tb3VudCgpIHtcbiAgICAgICAgaWYgKGlzTW91bnRlZCkge1xuICAgICAgICAgIHJlbmRlcihudWxsLCBhcHAuX2NvbnRhaW5lcik7XG4gICAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XG4gICAgICAgICAgICBhcHAuX2luc3RhbmNlID0gbnVsbDtcbiAgICAgICAgICAgIGRldnRvb2xzVW5tb3VudEFwcChhcHApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgYXBwLl9jb250YWluZXIuX192dWVfYXBwX187XG4gICAgICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIHdhcm4kMShgQ2Fubm90IHVubW91bnQgYW4gYXBwIHRoYXQgaXMgbm90IG1vdW50ZWQuYCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwcm92aWRlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYga2V5IGluIGNvbnRleHQucHJvdmlkZXMpIHtcbiAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICBgQXBwIGFscmVhZHkgcHJvdmlkZXMgcHJvcGVydHkgd2l0aCBrZXkgXCIke1N0cmluZyhrZXkpfVwiLiBJdCB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggdGhlIG5ldyB2YWx1ZS5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LnByb3ZpZGVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgIH0sXG4gICAgICBydW5XaXRoQ29udGV4dChmbikge1xuICAgICAgICBjb25zdCBsYXN0QXBwID0gY3VycmVudEFwcDtcbiAgICAgICAgY3VycmVudEFwcCA9IGFwcDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBjdXJyZW50QXBwID0gbGFzdEFwcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGFwcDtcbiAgfTtcbn1cbmxldCBjdXJyZW50QXBwID0gbnVsbDtcblxuZnVuY3Rpb24gcHJvdmlkZShrZXksIHZhbHVlKSB7XG4gIGlmICghY3VycmVudEluc3RhbmNlKSB7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgIHdhcm4kMShgcHJvdmlkZSgpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHNldHVwKCkuYCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBwcm92aWRlcyA9IGN1cnJlbnRJbnN0YW5jZS5wcm92aWRlcztcbiAgICBjb25zdCBwYXJlbnRQcm92aWRlcyA9IGN1cnJlbnRJbnN0YW5jZS5wYXJlbnQgJiYgY3VycmVudEluc3RhbmNlLnBhcmVudC5wcm92aWRlcztcbiAgICBpZiAocGFyZW50UHJvdmlkZXMgPT09IHByb3ZpZGVzKSB7XG4gICAgICBwcm92aWRlcyA9IGN1cnJlbnRJbnN0YW5jZS5wcm92aWRlcyA9IE9iamVjdC5jcmVhdGUocGFyZW50UHJvdmlkZXMpO1xuICAgIH1cbiAgICBwcm92aWRlc1trZXldID0gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGluamVjdChrZXksIGRlZmF1bHRWYWx1ZSwgdHJlYXREZWZhdWx0QXNGYWN0b3J5ID0gZmFsc2UpIHtcbiAgY29uc3QgaW5zdGFuY2UgPSBjdXJyZW50SW5zdGFuY2UgfHwgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlO1xuICBpZiAoaW5zdGFuY2UgfHwgY3VycmVudEFwcCkge1xuICAgIGNvbnN0IHByb3ZpZGVzID0gaW5zdGFuY2UgPyBpbnN0YW5jZS5wYXJlbnQgPT0gbnVsbCA/IGluc3RhbmNlLnZub2RlLmFwcENvbnRleHQgJiYgaW5zdGFuY2Uudm5vZGUuYXBwQ29udGV4dC5wcm92aWRlcyA6IGluc3RhbmNlLnBhcmVudC5wcm92aWRlcyA6IGN1cnJlbnRBcHAuX2NvbnRleHQucHJvdmlkZXM7XG4gICAgaWYgKHByb3ZpZGVzICYmIGtleSBpbiBwcm92aWRlcykge1xuICAgICAgcmV0dXJuIHByb3ZpZGVzW2tleV07XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHRyZWF0RGVmYXVsdEFzRmFjdG9yeSAmJiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSkgPyBkZWZhdWx0VmFsdWUuY2FsbChpbnN0YW5jZSAmJiBpbnN0YW5jZS5wcm94eSkgOiBkZWZhdWx0VmFsdWU7XG4gICAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICB3YXJuJDEoYGluamVjdGlvbiBcIiR7U3RyaW5nKGtleSl9XCIgbm90IGZvdW5kLmApO1xuICAgIH1cbiAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgd2FybiQxKGBpbmplY3QoKSBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBzZXR1cCgpIG9yIGZ1bmN0aW9uYWwgY29tcG9uZW50cy5gKTtcbiAgfVxufVxuZnVuY3Rpb24gaGFzSW5qZWN0aW9uQ29udGV4dCgpIHtcbiAgcmV0dXJuICEhKGN1cnJlbnRJbnN0YW5jZSB8fCBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgfHwgY3VycmVudEFwcCk7XG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyhpbnN0YW5jZSwgcmF3UHJvcHMsIGlzU3RhdGVmdWwsIGlzU1NSID0gZmFsc2UpIHtcbiAgY29uc3QgcHJvcHMgPSB7fTtcbiAgY29uc3QgYXR0cnMgPSB7fTtcbiAgZGVmKGF0dHJzLCBJbnRlcm5hbE9iamVjdEtleSwgMSk7XG4gIGluc3RhbmNlLnByb3BzRGVmYXVsdHMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc2V0RnVsbFByb3BzKGluc3RhbmNlLCByYXdQcm9wcywgcHJvcHMsIGF0dHJzKTtcbiAgZm9yIChjb25zdCBrZXkgaW4gaW5zdGFuY2UucHJvcHNPcHRpb25zWzBdKSB7XG4gICAgaWYgKCEoa2V5IGluIHByb3BzKSkge1xuICAgICAgcHJvcHNba2V5XSA9IHZvaWQgMDtcbiAgICB9XG4gIH1cbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICB2YWxpZGF0ZVByb3BzKHJhd1Byb3BzIHx8IHt9LCBwcm9wcywgaW5zdGFuY2UpO1xuICB9XG4gIGlmIChpc1N0YXRlZnVsKSB7XG4gICAgaW5zdGFuY2UucHJvcHMgPSBpc1NTUiA/IHByb3BzIDogc2hhbGxvd1JlYWN0aXZlKHByb3BzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWluc3RhbmNlLnR5cGUucHJvcHMpIHtcbiAgICAgIGluc3RhbmNlLnByb3BzID0gYXR0cnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlLnByb3BzID0gcHJvcHM7XG4gICAgfVxuICB9XG4gIGluc3RhbmNlLmF0dHJzID0gYXR0cnM7XG59XG5mdW5jdGlvbiBpc0luSG1yQ29udGV4dChpbnN0YW5jZSkge1xuICB3aGlsZSAoaW5zdGFuY2UpIHtcbiAgICBpZiAoaW5zdGFuY2UudHlwZS5fX2htcklkKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5wYXJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZVByb3BzKGluc3RhbmNlLCByYXdQcm9wcywgcmF3UHJldlByb3BzLCBvcHRpbWl6ZWQpIHtcbiAgY29uc3Qge1xuICAgIHByb3BzLFxuICAgIGF0dHJzLFxuICAgIHZub2RlOiB7IHBhdGNoRmxhZyB9XG4gIH0gPSBpbnN0YW5jZTtcbiAgY29uc3QgcmF3Q3VycmVudFByb3BzID0gdG9SYXcocHJvcHMpO1xuICBjb25zdCBbb3B0aW9uc10gPSBpbnN0YW5jZS5wcm9wc09wdGlvbnM7XG4gIGxldCBoYXNBdHRyc0NoYW5nZWQgPSBmYWxzZTtcbiAgaWYgKFxuICAgIC8vIGFsd2F5cyBmb3JjZSBmdWxsIGRpZmYgaW4gZGV2XG4gICAgLy8gLSAjMTk0MiBpZiBobXIgaXMgZW5hYmxlZCB3aXRoIHNmYyBjb21wb25lbnRcbiAgICAvLyAtIHZpdGUjODcyIG5vbi1zZmMgY29tcG9uZW50IHVzZWQgYnkgc2ZjIGNvbXBvbmVudFxuICAgICEoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBpc0luSG1yQ29udGV4dChpbnN0YW5jZSkpICYmIChvcHRpbWl6ZWQgfHwgcGF0Y2hGbGFnID4gMCkgJiYgIShwYXRjaEZsYWcgJiAxNilcbiAgKSB7XG4gICAgaWYgKHBhdGNoRmxhZyAmIDgpIHtcbiAgICAgIGNvbnN0IHByb3BzVG9VcGRhdGUgPSBpbnN0YW5jZS52bm9kZS5keW5hbWljUHJvcHM7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzVG9VcGRhdGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGtleSA9IHByb3BzVG9VcGRhdGVbaV07XG4gICAgICAgIGlmIChpc0VtaXRMaXN0ZW5lcihpbnN0YW5jZS5lbWl0c09wdGlvbnMsIGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IHJhd1Byb3BzW2tleV07XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGhhc093bihhdHRycywga2V5KSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBhdHRyc1trZXldKSB7XG4gICAgICAgICAgICAgIGF0dHJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgaGFzQXR0cnNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgICAgIHByb3BzW2NhbWVsaXplZEtleV0gPSByZXNvbHZlUHJvcFZhbHVlKFxuICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICByYXdDdXJyZW50UHJvcHMsXG4gICAgICAgICAgICAgIGNhbWVsaXplZEtleSxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSBhdHRyc1trZXldKSB7XG4gICAgICAgICAgICBhdHRyc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICBoYXNBdHRyc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoc2V0RnVsbFByb3BzKGluc3RhbmNlLCByYXdQcm9wcywgcHJvcHMsIGF0dHJzKSkge1xuICAgICAgaGFzQXR0cnNDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgbGV0IGtlYmFiS2V5O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHJhd0N1cnJlbnRQcm9wcykge1xuICAgICAgaWYgKCFyYXdQcm9wcyB8fCAvLyBmb3IgY2FtZWxDYXNlXG4gICAgICAhaGFzT3duKHJhd1Byb3BzLCBrZXkpICYmIC8vIGl0J3MgcG9zc2libGUgdGhlIG9yaWdpbmFsIHByb3BzIHdhcyBwYXNzZWQgaW4gYXMga2ViYWItY2FzZVxuICAgICAgLy8gYW5kIGNvbnZlcnRlZCB0byBjYW1lbENhc2UgKCM5NTUpXG4gICAgICAoKGtlYmFiS2V5ID0gaHlwaGVuYXRlKGtleSkpID09PSBrZXkgfHwgIWhhc093bihyYXdQcm9wcywga2ViYWJLZXkpKSkge1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgIGlmIChyYXdQcmV2UHJvcHMgJiYgLy8gZm9yIGNhbWVsQ2FzZVxuICAgICAgICAgIChyYXdQcmV2UHJvcHNba2V5XSAhPT0gdm9pZCAwIHx8IC8vIGZvciBrZWJhYi1jYXNlXG4gICAgICAgICAgcmF3UHJldlByb3BzW2tlYmFiS2V5XSAhPT0gdm9pZCAwKSkge1xuICAgICAgICAgICAgcHJvcHNba2V5XSA9IHJlc29sdmVQcm9wVmFsdWUoXG4gICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgIHJhd0N1cnJlbnRQcm9wcyxcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgcHJvcHNba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYXR0cnMgIT09IHJhd0N1cnJlbnRQcm9wcykge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gYXR0cnMpIHtcbiAgICAgICAgaWYgKCFyYXdQcm9wcyB8fCAhaGFzT3duKHJhd1Byb3BzLCBrZXkpICYmIHRydWUpIHtcbiAgICAgICAgICBkZWxldGUgYXR0cnNba2V5XTtcbiAgICAgICAgICBoYXNBdHRyc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChoYXNBdHRyc0NoYW5nZWQpIHtcbiAgICB0cmlnZ2VyKGluc3RhbmNlLCBcInNldFwiLCBcIiRhdHRyc1wiKTtcbiAgfVxuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIHZhbGlkYXRlUHJvcHMocmF3UHJvcHMgfHwge30sIHByb3BzLCBpbnN0YW5jZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldEZ1bGxQcm9wcyhpbnN0YW5jZSwgcmF3UHJvcHMsIHByb3BzLCBhdHRycykge1xuICBjb25zdCBbb3B0aW9ucywgbmVlZENhc3RLZXlzXSA9IGluc3RhbmNlLnByb3BzT3B0aW9ucztcbiAgbGV0IGhhc0F0dHJzQ2hhbmdlZCA9IGZhbHNlO1xuICBsZXQgcmF3Q2FzdFZhbHVlcztcbiAgaWYgKHJhd1Byb3BzKSB7XG4gICAgZm9yIChsZXQga2V5IGluIHJhd1Byb3BzKSB7XG4gICAgICBpZiAoaXNSZXNlcnZlZFByb3Aoa2V5KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gcmF3UHJvcHNba2V5XTtcbiAgICAgIGxldCBjYW1lbEtleTtcbiAgICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCBjYW1lbEtleSA9IGNhbWVsaXplKGtleSkpKSB7XG4gICAgICAgIGlmICghbmVlZENhc3RLZXlzIHx8ICFuZWVkQ2FzdEtleXMuaW5jbHVkZXMoY2FtZWxLZXkpKSB7XG4gICAgICAgICAgcHJvcHNbY2FtZWxLZXldID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKHJhd0Nhc3RWYWx1ZXMgfHwgKHJhd0Nhc3RWYWx1ZXMgPSB7fSkpW2NhbWVsS2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFpc0VtaXRMaXN0ZW5lcihpbnN0YW5jZS5lbWl0c09wdGlvbnMsIGtleSkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIGF0dHJzKSB8fCB2YWx1ZSAhPT0gYXR0cnNba2V5XSkge1xuICAgICAgICAgIGF0dHJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICBoYXNBdHRyc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChuZWVkQ2FzdEtleXMpIHtcbiAgICBjb25zdCByYXdDdXJyZW50UHJvcHMgPSB0b1Jhdyhwcm9wcyk7XG4gICAgY29uc3QgY2FzdFZhbHVlcyA9IHJhd0Nhc3RWYWx1ZXMgfHwgRU1QVFlfT0JKO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmVlZENhc3RLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBuZWVkQ2FzdEtleXNbaV07XG4gICAgICBwcm9wc1trZXldID0gcmVzb2x2ZVByb3BWYWx1ZShcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgcmF3Q3VycmVudFByb3BzLFxuICAgICAgICBrZXksXG4gICAgICAgIGNhc3RWYWx1ZXNba2V5XSxcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICFoYXNPd24oY2FzdFZhbHVlcywga2V5KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhhc0F0dHJzQ2hhbmdlZDtcbn1cbmZ1bmN0aW9uIHJlc29sdmVQcm9wVmFsdWUob3B0aW9ucywgcHJvcHMsIGtleSwgdmFsdWUsIGluc3RhbmNlLCBpc0Fic2VudCkge1xuICBjb25zdCBvcHQgPSBvcHRpb25zW2tleV07XG4gIGlmIChvcHQgIT0gbnVsbCkge1xuICAgIGNvbnN0IGhhc0RlZmF1bHQgPSBoYXNPd24ob3B0LCBcImRlZmF1bHRcIik7XG4gICAgaWYgKGhhc0RlZmF1bHQgJiYgdmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gb3B0LmRlZmF1bHQ7XG4gICAgICBpZiAob3B0LnR5cGUgIT09IEZ1bmN0aW9uICYmICFvcHQuc2tpcEZhY3RvcnkgJiYgaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHsgcHJvcHNEZWZhdWx0cyB9ID0gaW5zdGFuY2U7XG4gICAgICAgIGlmIChrZXkgaW4gcHJvcHNEZWZhdWx0cykge1xuICAgICAgICAgIHZhbHVlID0gcHJvcHNEZWZhdWx0c1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlc2V0ID0gc2V0Q3VycmVudEluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgICB2YWx1ZSA9IHByb3BzRGVmYXVsdHNba2V5XSA9IGRlZmF1bHRWYWx1ZS5jYWxsKFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHByb3BzXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXNldCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdFswIC8qIHNob3VsZENhc3QgKi9dKSB7XG4gICAgICBpZiAoaXNBYnNlbnQgJiYgIWhhc0RlZmF1bHQpIHtcbiAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0WzEgLyogc2hvdWxkQ2FzdFRydWUgKi9dICYmICh2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZSA9PT0gaHlwaGVuYXRlKGtleSkpKSB7XG4gICAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplUHJvcHNPcHRpb25zKGNvbXAsIGFwcENvbnRleHQsIGFzTWl4aW4gPSBmYWxzZSkge1xuICBjb25zdCBjYWNoZSA9IGFwcENvbnRleHQucHJvcHNDYWNoZTtcbiAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0KGNvbXApO1xuICBpZiAoY2FjaGVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuICBjb25zdCByYXcgPSBjb21wLnByb3BzO1xuICBjb25zdCBub3JtYWxpemVkID0ge307XG4gIGNvbnN0IG5lZWRDYXN0S2V5cyA9IFtdO1xuICBsZXQgaGFzRXh0ZW5kcyA9IGZhbHNlO1xuICBpZiAoX19WVUVfT1BUSU9OU19BUElfXyAmJiAhaXNGdW5jdGlvbihjb21wKSkge1xuICAgIGNvbnN0IGV4dGVuZFByb3BzID0gKHJhdzIpID0+IHtcbiAgICAgIGhhc0V4dGVuZHMgPSB0cnVlO1xuICAgICAgY29uc3QgW3Byb3BzLCBrZXlzXSA9IG5vcm1hbGl6ZVByb3BzT3B0aW9ucyhyYXcyLCBhcHBDb250ZXh0LCB0cnVlKTtcbiAgICAgIGV4dGVuZChub3JtYWxpemVkLCBwcm9wcyk7XG4gICAgICBpZiAoa2V5cylcbiAgICAgICAgbmVlZENhc3RLZXlzLnB1c2goLi4ua2V5cyk7XG4gICAgfTtcbiAgICBpZiAoIWFzTWl4aW4gJiYgYXBwQ29udGV4dC5taXhpbnMubGVuZ3RoKSB7XG4gICAgICBhcHBDb250ZXh0Lm1peGlucy5mb3JFYWNoKGV4dGVuZFByb3BzKTtcbiAgICB9XG4gICAgaWYgKGNvbXAuZXh0ZW5kcykge1xuICAgICAgZXh0ZW5kUHJvcHMoY29tcC5leHRlbmRzKTtcbiAgICB9XG4gICAgaWYgKGNvbXAubWl4aW5zKSB7XG4gICAgICBjb21wLm1peGlucy5mb3JFYWNoKGV4dGVuZFByb3BzKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFyYXcgJiYgIWhhc0V4dGVuZHMpIHtcbiAgICBpZiAoaXNPYmplY3QoY29tcCkpIHtcbiAgICAgIGNhY2hlLnNldChjb21wLCBFTVBUWV9BUlIpO1xuICAgIH1cbiAgICByZXR1cm4gRU1QVFlfQVJSO1xuICB9XG4gIGlmIChpc0FycmF5KHJhdykpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhdy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWlzU3RyaW5nKHJhd1tpXSkpIHtcbiAgICAgICAgd2FybiQxKGBwcm9wcyBtdXN0IGJlIHN0cmluZ3Mgd2hlbiB1c2luZyBhcnJheSBzeW50YXguYCwgcmF3W2ldKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRLZXkgPSBjYW1lbGl6ZShyYXdbaV0pO1xuICAgICAgaWYgKHZhbGlkYXRlUHJvcE5hbWUobm9ybWFsaXplZEtleSkpIHtcbiAgICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkS2V5XSA9IEVNUFRZX09CSjtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAocmF3KSB7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWlzT2JqZWN0KHJhdykpIHtcbiAgICAgIHdhcm4kMShgaW52YWxpZCBwcm9wcyBvcHRpb25zYCwgcmF3KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcmF3KSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgIGlmICh2YWxpZGF0ZVByb3BOYW1lKG5vcm1hbGl6ZWRLZXkpKSB7XG4gICAgICAgIGNvbnN0IG9wdCA9IHJhd1trZXldO1xuICAgICAgICBjb25zdCBwcm9wID0gbm9ybWFsaXplZFtub3JtYWxpemVkS2V5XSA9IGlzQXJyYXkob3B0KSB8fCBpc0Z1bmN0aW9uKG9wdCkgPyB7IHR5cGU6IG9wdCB9IDogZXh0ZW5kKHt9LCBvcHQpO1xuICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgIGNvbnN0IGJvb2xlYW5JbmRleCA9IGdldFR5cGVJbmRleChCb29sZWFuLCBwcm9wLnR5cGUpO1xuICAgICAgICAgIGNvbnN0IHN0cmluZ0luZGV4ID0gZ2V0VHlwZUluZGV4KFN0cmluZywgcHJvcC50eXBlKTtcbiAgICAgICAgICBwcm9wWzAgLyogc2hvdWxkQ2FzdCAqL10gPSBib29sZWFuSW5kZXggPiAtMTtcbiAgICAgICAgICBwcm9wWzEgLyogc2hvdWxkQ2FzdFRydWUgKi9dID0gc3RyaW5nSW5kZXggPCAwIHx8IGJvb2xlYW5JbmRleCA8IHN0cmluZ0luZGV4O1xuICAgICAgICAgIGlmIChib29sZWFuSW5kZXggPiAtMSB8fCBoYXNPd24ocHJvcCwgXCJkZWZhdWx0XCIpKSB7XG4gICAgICAgICAgICBuZWVkQ2FzdEtleXMucHVzaChub3JtYWxpemVkS2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgcmVzID0gW25vcm1hbGl6ZWQsIG5lZWRDYXN0S2V5c107XG4gIGlmIChpc09iamVjdChjb21wKSkge1xuICAgIGNhY2hlLnNldChjb21wLCByZXMpO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BOYW1lKGtleSkge1xuICBpZiAoa2V5WzBdICE9PSBcIiRcIiAmJiAhaXNSZXNlcnZlZFByb3Aoa2V5KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICB3YXJuJDEoYEludmFsaWQgcHJvcCBuYW1lOiBcIiR7a2V5fVwiIGlzIGEgcmVzZXJ2ZWQgcHJvcGVydHkuYCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0VHlwZShjdG9yKSB7XG4gIGlmIChjdG9yID09PSBudWxsKSB7XG4gICAgcmV0dXJuIFwibnVsbFwiO1xuICB9XG4gIGlmICh0eXBlb2YgY3RvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGN0b3IubmFtZSB8fCBcIlwiO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBjdG9yID09PSBcIm9iamVjdFwiKSB7XG4gICAgY29uc3QgbmFtZSA9IGN0b3IuY29uc3RydWN0b3IgJiYgY3Rvci5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHJldHVybiBuYW1lIHx8IFwiXCI7XG4gIH1cbiAgcmV0dXJuIFwiXCI7XG59XG5mdW5jdGlvbiBpc1NhbWVUeXBlKGEsIGIpIHtcbiAgcmV0dXJuIGdldFR5cGUoYSkgPT09IGdldFR5cGUoYik7XG59XG5mdW5jdGlvbiBnZXRUeXBlSW5kZXgodHlwZSwgZXhwZWN0ZWRUeXBlcykge1xuICBpZiAoaXNBcnJheShleHBlY3RlZFR5cGVzKSkge1xuICAgIHJldHVybiBleHBlY3RlZFR5cGVzLmZpbmRJbmRleCgodCkgPT4gaXNTYW1lVHlwZSh0LCB0eXBlKSk7XG4gIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihleHBlY3RlZFR5cGVzKSkge1xuICAgIHJldHVybiBpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXMsIHR5cGUpID8gMCA6IC0xO1xuICB9XG4gIHJldHVybiAtMTtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMocmF3UHJvcHMsIHByb3BzLCBpbnN0YW5jZSkge1xuICBjb25zdCByZXNvbHZlZFZhbHVlcyA9IHRvUmF3KHByb3BzKTtcbiAgY29uc3Qgb3B0aW9ucyA9IGluc3RhbmNlLnByb3BzT3B0aW9uc1swXTtcbiAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xuICAgIGxldCBvcHQgPSBvcHRpb25zW2tleV07XG4gICAgaWYgKG9wdCA9PSBudWxsKVxuICAgICAgY29udGludWU7XG4gICAgdmFsaWRhdGVQcm9wKFxuICAgICAga2V5LFxuICAgICAgcmVzb2x2ZWRWYWx1ZXNba2V5XSxcbiAgICAgIG9wdCxcbiAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyBzaGFsbG93UmVhZG9ubHkocmVzb2x2ZWRWYWx1ZXMpIDogcmVzb2x2ZWRWYWx1ZXMsXG4gICAgICAhaGFzT3duKHJhd1Byb3BzLCBrZXkpICYmICFoYXNPd24ocmF3UHJvcHMsIGh5cGhlbmF0ZShrZXkpKVxuICAgICk7XG4gIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcChuYW1lLCB2YWx1ZSwgcHJvcCwgcHJvcHMsIGlzQWJzZW50KSB7XG4gIGNvbnN0IHsgdHlwZSwgcmVxdWlyZWQsIHZhbGlkYXRvciwgc2tpcENoZWNrIH0gPSBwcm9wO1xuICBpZiAocmVxdWlyZWQgJiYgaXNBYnNlbnQpIHtcbiAgICB3YXJuJDEoJ01pc3NpbmcgcmVxdWlyZWQgcHJvcDogXCInICsgbmFtZSArICdcIicpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCAmJiAhcmVxdWlyZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHR5cGUgIT0gbnVsbCAmJiB0eXBlICE9PSB0cnVlICYmICFza2lwQ2hlY2spIHtcbiAgICBsZXQgaXNWYWxpZCA9IGZhbHNlO1xuICAgIGNvbnN0IHR5cGVzID0gaXNBcnJheSh0eXBlKSA/IHR5cGUgOiBbdHlwZV07XG4gICAgY29uc3QgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoICYmICFpc1ZhbGlkOyBpKyspIHtcbiAgICAgIGNvbnN0IHsgdmFsaWQsIGV4cGVjdGVkVHlwZSB9ID0gYXNzZXJ0VHlwZSh2YWx1ZSwgdHlwZXNbaV0pO1xuICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGV4cGVjdGVkVHlwZSB8fCBcIlwiKTtcbiAgICAgIGlzVmFsaWQgPSB2YWxpZDtcbiAgICB9XG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICB3YXJuJDEoZ2V0SW52YWxpZFR5cGVNZXNzYWdlKG5hbWUsIHZhbHVlLCBleHBlY3RlZFR5cGVzKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGlmICh2YWxpZGF0b3IgJiYgIXZhbGlkYXRvcih2YWx1ZSwgcHJvcHMpKSB7XG4gICAgd2FybiQxKCdJbnZhbGlkIHByb3A6IGN1c3RvbSB2YWxpZGF0b3IgY2hlY2sgZmFpbGVkIGZvciBwcm9wIFwiJyArIG5hbWUgKyAnXCIuJyk7XG4gIH1cbn1cbmNvbnN0IGlzU2ltcGxlVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBtYWtlTWFwKFxuICBcIlN0cmluZyxOdW1iZXIsQm9vbGVhbixGdW5jdGlvbixTeW1ib2wsQmlnSW50XCJcbik7XG5mdW5jdGlvbiBhc3NlcnRUeXBlKHZhbHVlLCB0eXBlKSB7XG4gIGxldCB2YWxpZDtcbiAgY29uc3QgZXhwZWN0ZWRUeXBlID0gZ2V0VHlwZSh0eXBlKTtcbiAgaWYgKGlzU2ltcGxlVHlwZShleHBlY3RlZFR5cGUpKSB7XG4gICAgY29uc3QgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICB2YWxpZCA9IHQgPT09IGV4cGVjdGVkVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghdmFsaWQgJiYgdCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gXCJPYmplY3RcIikge1xuICAgIHZhbGlkID0gaXNPYmplY3QodmFsdWUpO1xuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gXCJBcnJheVwiKSB7XG4gICAgdmFsaWQgPSBpc0FycmF5KHZhbHVlKTtcbiAgfSBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09IFwibnVsbFwiKSB7XG4gICAgdmFsaWQgPSB2YWx1ZSA9PT0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHZhbGlkLFxuICAgIGV4cGVjdGVkVHlwZVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0SW52YWxpZFR5cGVNZXNzYWdlKG5hbWUsIHZhbHVlLCBleHBlY3RlZFR5cGVzKSB7XG4gIGlmIChleHBlY3RlZFR5cGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBgUHJvcCB0eXBlIFtdIGZvciBwcm9wIFwiJHtuYW1lfVwiIHdvbid0IG1hdGNoIGFueXRoaW5nLiBEaWQgeW91IG1lYW4gdG8gdXNlIHR5cGUgQXJyYXkgaW5zdGVhZD9gO1xuICB9XG4gIGxldCBtZXNzYWdlID0gYEludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgXCIke25hbWV9XCIuIEV4cGVjdGVkICR7ZXhwZWN0ZWRUeXBlcy5tYXAoY2FwaXRhbGl6ZSkuam9pbihcIiB8IFwiKX1gO1xuICBjb25zdCBleHBlY3RlZFR5cGUgPSBleHBlY3RlZFR5cGVzWzBdO1xuICBjb25zdCByZWNlaXZlZFR5cGUgPSB0b1Jhd1R5cGUodmFsdWUpO1xuICBjb25zdCBleHBlY3RlZFZhbHVlID0gc3R5bGVWYWx1ZSh2YWx1ZSwgZXhwZWN0ZWRUeXBlKTtcbiAgY29uc3QgcmVjZWl2ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIHJlY2VpdmVkVHlwZSk7XG4gIGlmIChleHBlY3RlZFR5cGVzLmxlbmd0aCA9PT0gMSAmJiBpc0V4cGxpY2FibGUoZXhwZWN0ZWRUeXBlKSAmJiAhaXNCb29sZWFuKGV4cGVjdGVkVHlwZSwgcmVjZWl2ZWRUeXBlKSkge1xuICAgIG1lc3NhZ2UgKz0gYCB3aXRoIHZhbHVlICR7ZXhwZWN0ZWRWYWx1ZX1gO1xuICB9XG4gIG1lc3NhZ2UgKz0gYCwgZ290ICR7cmVjZWl2ZWRUeXBlfSBgO1xuICBpZiAoaXNFeHBsaWNhYmxlKHJlY2VpdmVkVHlwZSkpIHtcbiAgICBtZXNzYWdlICs9IGB3aXRoIHZhbHVlICR7cmVjZWl2ZWRWYWx1ZX0uYDtcbiAgfVxuICByZXR1cm4gbWVzc2FnZTtcbn1cbmZ1bmN0aW9uIHN0eWxlVmFsdWUodmFsdWUsIHR5cGUpIHtcbiAgaWYgKHR5cGUgPT09IFwiU3RyaW5nXCIpIHtcbiAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImA7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJOdW1iZXJcIikge1xuICAgIHJldHVybiBgJHtOdW1iZXIodmFsdWUpfWA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGAke3ZhbHVlfWA7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzRXhwbGljYWJsZSh0eXBlKSB7XG4gIGNvbnN0IGV4cGxpY2l0VHlwZXMgPSBbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJib29sZWFuXCJdO1xuICByZXR1cm4gZXhwbGljaXRUeXBlcy5zb21lKChlbGVtKSA9PiB0eXBlLnRvTG93ZXJDYXNlKCkgPT09IGVsZW0pO1xufVxuZnVuY3Rpb24gaXNCb29sZWFuKC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGFyZ3Muc29tZSgoZWxlbSkgPT4gZWxlbS50b0xvd2VyQ2FzZSgpID09PSBcImJvb2xlYW5cIik7XG59XG5cbmNvbnN0IGlzSW50ZXJuYWxLZXkgPSAoa2V5KSA9PiBrZXlbMF0gPT09IFwiX1wiIHx8IGtleSA9PT0gXCIkc3RhYmxlXCI7XG5jb25zdCBub3JtYWxpemVTbG90VmFsdWUgPSAodmFsdWUpID0+IGlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZOb2RlKSA6IFtub3JtYWxpemVWTm9kZSh2YWx1ZSldO1xuY29uc3Qgbm9ybWFsaXplU2xvdCA9IChrZXksIHJhd1Nsb3QsIGN0eCkgPT4ge1xuICBpZiAocmF3U2xvdC5fbikge1xuICAgIHJldHVybiByYXdTbG90O1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB3aXRoQ3R4KCguLi5hcmdzKSA9PiB7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgY3VycmVudEluc3RhbmNlICYmICghY3R4IHx8IGN0eC5yb290ID09PSBjdXJyZW50SW5zdGFuY2Uucm9vdCkpIHtcbiAgICAgIHdhcm4kMShcbiAgICAgICAgYFNsb3QgXCIke2tleX1cIiBpbnZva2VkIG91dHNpZGUgb2YgdGhlIHJlbmRlciBmdW5jdGlvbjogdGhpcyB3aWxsIG5vdCB0cmFjayBkZXBlbmRlbmNpZXMgdXNlZCBpbiB0aGUgc2xvdC4gSW52b2tlIHRoZSBzbG90IGZ1bmN0aW9uIGluc2lkZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGluc3RlYWQuYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVNsb3RWYWx1ZShyYXdTbG90KC4uLmFyZ3MpKTtcbiAgfSwgY3R4KTtcbiAgbm9ybWFsaXplZC5fYyA9IGZhbHNlO1xuICByZXR1cm4gbm9ybWFsaXplZDtcbn07XG5jb25zdCBub3JtYWxpemVPYmplY3RTbG90cyA9IChyYXdTbG90cywgc2xvdHMsIGluc3RhbmNlKSA9PiB7XG4gIGNvbnN0IGN0eCA9IHJhd1Nsb3RzLl9jdHg7XG4gIGZvciAoY29uc3Qga2V5IGluIHJhd1Nsb3RzKSB7XG4gICAgaWYgKGlzSW50ZXJuYWxLZXkoa2V5KSlcbiAgICAgIGNvbnRpbnVlO1xuICAgIGNvbnN0IHZhbHVlID0gcmF3U2xvdHNba2V5XTtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHNsb3RzW2tleV0gPSBub3JtYWxpemVTbG90KGtleSwgdmFsdWUsIGN0eCk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB0cnVlKSB7XG4gICAgICAgIHdhcm4kMShcbiAgICAgICAgICBgTm9uLWZ1bmN0aW9uIHZhbHVlIGVuY291bnRlcmVkIGZvciBzbG90IFwiJHtrZXl9XCIuIFByZWZlciBmdW5jdGlvbiBzbG90cyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVTbG90VmFsdWUodmFsdWUpO1xuICAgICAgc2xvdHNba2V5XSA9ICgpID0+IG5vcm1hbGl6ZWQ7XG4gICAgfVxuICB9XG59O1xuY29uc3Qgbm9ybWFsaXplVk5vZGVTbG90cyA9IChpbnN0YW5jZSwgY2hpbGRyZW4pID0+IHtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWlzS2VlcEFsaXZlKGluc3RhbmNlLnZub2RlKSAmJiB0cnVlKSB7XG4gICAgd2FybiQxKFxuICAgICAgYE5vbi1mdW5jdGlvbiB2YWx1ZSBlbmNvdW50ZXJlZCBmb3IgZGVmYXVsdCBzbG90LiBQcmVmZXIgZnVuY3Rpb24gc2xvdHMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5gXG4gICAgKTtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplU2xvdFZhbHVlKGNoaWxkcmVuKTtcbiAgaW5zdGFuY2Uuc2xvdHMuZGVmYXVsdCA9ICgpID0+IG5vcm1hbGl6ZWQ7XG59O1xuY29uc3QgaW5pdFNsb3RzID0gKGluc3RhbmNlLCBjaGlsZHJlbikgPT4ge1xuICBpZiAoaW5zdGFuY2Uudm5vZGUuc2hhcGVGbGFnICYgMzIpIHtcbiAgICBjb25zdCB0eXBlID0gY2hpbGRyZW4uXztcbiAgICBpZiAodHlwZSkge1xuICAgICAgaW5zdGFuY2Uuc2xvdHMgPSB0b1JhdyhjaGlsZHJlbik7XG4gICAgICBkZWYoY2hpbGRyZW4sIFwiX1wiLCB0eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9ybWFsaXplT2JqZWN0U2xvdHMoXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBpbnN0YW5jZS5zbG90cyA9IHt9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaW5zdGFuY2Uuc2xvdHMgPSB7fTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIG5vcm1hbGl6ZVZOb2RlU2xvdHMoaW5zdGFuY2UsIGNoaWxkcmVuKTtcbiAgICB9XG4gIH1cbiAgZGVmKGluc3RhbmNlLnNsb3RzLCBJbnRlcm5hbE9iamVjdEtleSwgMSk7XG59O1xuY29uc3QgdXBkYXRlU2xvdHMgPSAoaW5zdGFuY2UsIGNoaWxkcmVuLCBvcHRpbWl6ZWQpID0+IHtcbiAgY29uc3QgeyB2bm9kZSwgc2xvdHMgfSA9IGluc3RhbmNlO1xuICBsZXQgbmVlZERlbGV0aW9uQ2hlY2sgPSB0cnVlO1xuICBsZXQgZGVsZXRpb25Db21wYXJpc29uVGFyZ2V0ID0gRU1QVFlfT0JKO1xuICBpZiAodm5vZGUuc2hhcGVGbGFnICYgMzIpIHtcbiAgICBjb25zdCB0eXBlID0gY2hpbGRyZW4uXztcbiAgICBpZiAodHlwZSkge1xuICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgaXNIbXJVcGRhdGluZykge1xuICAgICAgICBleHRlbmQoc2xvdHMsIGNoaWxkcmVuKTtcbiAgICAgICAgdHJpZ2dlcihpbnN0YW5jZSwgXCJzZXRcIiwgXCIkc2xvdHNcIik7XG4gICAgICB9IGVsc2UgaWYgKG9wdGltaXplZCAmJiB0eXBlID09PSAxKSB7XG4gICAgICAgIG5lZWREZWxldGlvbkNoZWNrID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHRlbmQoc2xvdHMsIGNoaWxkcmVuKTtcbiAgICAgICAgaWYgKCFvcHRpbWl6ZWQgJiYgdHlwZSA9PT0gMSkge1xuICAgICAgICAgIGRlbGV0ZSBzbG90cy5fO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5lZWREZWxldGlvbkNoZWNrID0gIWNoaWxkcmVuLiRzdGFibGU7XG4gICAgICBub3JtYWxpemVPYmplY3RTbG90cyhjaGlsZHJlbiwgc2xvdHMpO1xuICAgIH1cbiAgICBkZWxldGlvbkNvbXBhcmlzb25UYXJnZXQgPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbikge1xuICAgIG5vcm1hbGl6ZVZOb2RlU2xvdHMoaW5zdGFuY2UsIGNoaWxkcmVuKTtcbiAgICBkZWxldGlvbkNvbXBhcmlzb25UYXJnZXQgPSB7IGRlZmF1bHQ6IDEgfTtcbiAgfVxuICBpZiAobmVlZERlbGV0aW9uQ2hlY2spIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzbG90cykge1xuICAgICAgaWYgKCFpc0ludGVybmFsS2V5KGtleSkgJiYgZGVsZXRpb25Db21wYXJpc29uVGFyZ2V0W2tleV0gPT0gbnVsbCkge1xuICAgICAgICBkZWxldGUgc2xvdHNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNldFJlZihyYXdSZWYsIG9sZFJhd1JlZiwgcGFyZW50U3VzcGVuc2UsIHZub2RlLCBpc1VubW91bnQgPSBmYWxzZSkge1xuICBpZiAoaXNBcnJheShyYXdSZWYpKSB7XG4gICAgcmF3UmVmLmZvckVhY2goXG4gICAgICAociwgaSkgPT4gc2V0UmVmKFxuICAgICAgICByLFxuICAgICAgICBvbGRSYXdSZWYgJiYgKGlzQXJyYXkob2xkUmF3UmVmKSA/IG9sZFJhd1JlZltpXSA6IG9sZFJhd1JlZiksXG4gICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICB2bm9kZSxcbiAgICAgICAgaXNVbm1vdW50XG4gICAgICApXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGlzQXN5bmNXcmFwcGVyKHZub2RlKSAmJiAhaXNVbm1vdW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJlZlZhbHVlID0gdm5vZGUuc2hhcGVGbGFnICYgNCA/IGdldEV4cG9zZVByb3h5KHZub2RlLmNvbXBvbmVudCkgfHwgdm5vZGUuY29tcG9uZW50LnByb3h5IDogdm5vZGUuZWw7XG4gIGNvbnN0IHZhbHVlID0gaXNVbm1vdW50ID8gbnVsbCA6IHJlZlZhbHVlO1xuICBjb25zdCB7IGk6IG93bmVyLCByOiByZWYgfSA9IHJhd1JlZjtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIW93bmVyKSB7XG4gICAgd2FybiQxKFxuICAgICAgYE1pc3NpbmcgcmVmIG93bmVyIGNvbnRleHQuIHJlZiBjYW5ub3QgYmUgdXNlZCBvbiBob2lzdGVkIHZub2Rlcy4gQSB2bm9kZSB3aXRoIHJlZiBtdXN0IGJlIGNyZWF0ZWQgaW5zaWRlIHRoZSByZW5kZXIgZnVuY3Rpb24uYFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG9sZFJlZiA9IG9sZFJhd1JlZiAmJiBvbGRSYXdSZWYucjtcbiAgY29uc3QgcmVmcyA9IG93bmVyLnJlZnMgPT09IEVNUFRZX09CSiA/IG93bmVyLnJlZnMgPSB7fSA6IG93bmVyLnJlZnM7XG4gIGNvbnN0IHNldHVwU3RhdGUgPSBvd25lci5zZXR1cFN0YXRlO1xuICBpZiAob2xkUmVmICE9IG51bGwgJiYgb2xkUmVmICE9PSByZWYpIHtcbiAgICBpZiAoaXNTdHJpbmcob2xkUmVmKSkge1xuICAgICAgcmVmc1tvbGRSZWZdID0gbnVsbDtcbiAgICAgIGlmIChoYXNPd24oc2V0dXBTdGF0ZSwgb2xkUmVmKSkge1xuICAgICAgICBzZXR1cFN0YXRlW29sZFJlZl0gPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNSZWYob2xkUmVmKSkge1xuICAgICAgb2xkUmVmLnZhbHVlID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgaWYgKGlzRnVuY3Rpb24ocmVmKSkge1xuICAgIGNhbGxXaXRoRXJyb3JIYW5kbGluZyhyZWYsIG93bmVyLCAxMiwgW3ZhbHVlLCByZWZzXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgX2lzU3RyaW5nID0gaXNTdHJpbmcocmVmKTtcbiAgICBjb25zdCBfaXNSZWYgPSBpc1JlZihyZWYpO1xuICAgIGlmIChfaXNTdHJpbmcgfHwgX2lzUmVmKSB7XG4gICAgICBjb25zdCBkb1NldCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJhd1JlZi5mKSB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBfaXNTdHJpbmcgPyBoYXNPd24oc2V0dXBTdGF0ZSwgcmVmKSA/IHNldHVwU3RhdGVbcmVmXSA6IHJlZnNbcmVmXSA6IHJlZi52YWx1ZTtcbiAgICAgICAgICBpZiAoaXNVbm1vdW50KSB7XG4gICAgICAgICAgICBpc0FycmF5KGV4aXN0aW5nKSAmJiByZW1vdmUoZXhpc3RpbmcsIHJlZlZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFpc0FycmF5KGV4aXN0aW5nKSkge1xuICAgICAgICAgICAgICBpZiAoX2lzU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgcmVmc1tyZWZdID0gW3JlZlZhbHVlXTtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duKHNldHVwU3RhdGUsIHJlZikpIHtcbiAgICAgICAgICAgICAgICAgIHNldHVwU3RhdGVbcmVmXSA9IHJlZnNbcmVmXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVmLnZhbHVlID0gW3JlZlZhbHVlXTtcbiAgICAgICAgICAgICAgICBpZiAocmF3UmVmLmspXG4gICAgICAgICAgICAgICAgICByZWZzW3Jhd1JlZi5rXSA9IHJlZi52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghZXhpc3RpbmcuaW5jbHVkZXMocmVmVmFsdWUpKSB7XG4gICAgICAgICAgICAgIGV4aXN0aW5nLnB1c2gocmVmVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChfaXNTdHJpbmcpIHtcbiAgICAgICAgICByZWZzW3JlZl0gPSB2YWx1ZTtcbiAgICAgICAgICBpZiAoaGFzT3duKHNldHVwU3RhdGUsIHJlZikpIHtcbiAgICAgICAgICAgIHNldHVwU3RhdGVbcmVmXSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChfaXNSZWYpIHtcbiAgICAgICAgICByZWYudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICBpZiAocmF3UmVmLmspXG4gICAgICAgICAgICByZWZzW3Jhd1JlZi5rXSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICB3YXJuJDEoXCJJbnZhbGlkIHRlbXBsYXRlIHJlZiB0eXBlOlwiLCByZWYsIGAoJHt0eXBlb2YgcmVmfSlgKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBkb1NldC5pZCA9IC0xO1xuICAgICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoZG9TZXQsIHBhcmVudFN1c3BlbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvU2V0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICB3YXJuJDEoXCJJbnZhbGlkIHRlbXBsYXRlIHJlZiB0eXBlOlwiLCByZWYsIGAoJHt0eXBlb2YgcmVmfSlgKTtcbiAgICB9XG4gIH1cbn1cblxubGV0IGhhc01pc21hdGNoID0gZmFsc2U7XG5jb25zdCBpc1NWR0NvbnRhaW5lciA9IChjb250YWluZXIpID0+IGNvbnRhaW5lci5uYW1lc3BhY2VVUkkuaW5jbHVkZXMoXCJzdmdcIikgJiYgY29udGFpbmVyLnRhZ05hbWUgIT09IFwiZm9yZWlnbk9iamVjdFwiO1xuY29uc3QgaXNNYXRoTUxDb250YWluZXIgPSAoY29udGFpbmVyKSA9PiBjb250YWluZXIubmFtZXNwYWNlVVJJLmluY2x1ZGVzKFwiTWF0aE1MXCIpO1xuY29uc3QgZ2V0Q29udGFpbmVyVHlwZSA9IChjb250YWluZXIpID0+IHtcbiAgaWYgKGlzU1ZHQ29udGFpbmVyKGNvbnRhaW5lcikpXG4gICAgcmV0dXJuIFwic3ZnXCI7XG4gIGlmIChpc01hdGhNTENvbnRhaW5lcihjb250YWluZXIpKVxuICAgIHJldHVybiBcIm1hdGhtbFwiO1xuICByZXR1cm4gdm9pZCAwO1xufTtcbmNvbnN0IGlzQ29tbWVudCA9IChub2RlKSA9PiBub2RlLm5vZGVUeXBlID09PSA4IC8qIENPTU1FTlQgKi87XG5mdW5jdGlvbiBjcmVhdGVIeWRyYXRpb25GdW5jdGlvbnMocmVuZGVyZXJJbnRlcm5hbHMpIHtcbiAgY29uc3Qge1xuICAgIG10OiBtb3VudENvbXBvbmVudCxcbiAgICBwOiBwYXRjaCxcbiAgICBvOiB7XG4gICAgICBwYXRjaFByb3AsXG4gICAgICBjcmVhdGVUZXh0LFxuICAgICAgbmV4dFNpYmxpbmcsXG4gICAgICBwYXJlbnROb2RlLFxuICAgICAgcmVtb3ZlLFxuICAgICAgaW5zZXJ0LFxuICAgICAgY3JlYXRlQ29tbWVudFxuICAgIH1cbiAgfSA9IHJlbmRlcmVySW50ZXJuYWxzO1xuICBjb25zdCBoeWRyYXRlID0gKHZub2RlLCBjb250YWluZXIpID0+IHtcbiAgICBpZiAoIWNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHx8IF9fVlVFX1BST0RfSFlEUkFUSU9OX01JU01BVENIX0RFVEFJTFNfXykgJiYgd2FybiQxKFxuICAgICAgICBgQXR0ZW1wdGluZyB0byBoeWRyYXRlIGV4aXN0aW5nIG1hcmt1cCBidXQgY29udGFpbmVyIGlzIGVtcHR5LiBQZXJmb3JtaW5nIGZ1bGwgbW91bnQgaW5zdGVhZC5gXG4gICAgICApO1xuICAgICAgcGF0Y2gobnVsbCwgdm5vZGUsIGNvbnRhaW5lcik7XG4gICAgICBmbHVzaFBvc3RGbHVzaENicygpO1xuICAgICAgY29udGFpbmVyLl92bm9kZSA9IHZub2RlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBoYXNNaXNtYXRjaCA9IGZhbHNlO1xuICAgIGh5ZHJhdGVOb2RlKGNvbnRhaW5lci5maXJzdENoaWxkLCB2bm9kZSwgbnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgZmx1c2hQb3N0Rmx1c2hDYnMoKTtcbiAgICBjb250YWluZXIuX3Zub2RlID0gdm5vZGU7XG4gICAgaWYgKGhhc01pc21hdGNoICYmIHRydWUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEh5ZHJhdGlvbiBjb21wbGV0ZWQgYnV0IGNvbnRhaW5zIG1pc21hdGNoZXMuYCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoeWRyYXRlTm9kZSA9IChub2RlLCB2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IGlzRnJhZ21lbnRTdGFydCA9IGlzQ29tbWVudChub2RlKSAmJiBub2RlLmRhdGEgPT09IFwiW1wiO1xuICAgIGNvbnN0IG9uTWlzbWF0Y2ggPSAoKSA9PiBoYW5kbGVNaXNtYXRjaChcbiAgICAgIG5vZGUsXG4gICAgICB2bm9kZSxcbiAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgaXNGcmFnbWVudFN0YXJ0XG4gICAgKTtcbiAgICBjb25zdCB7IHR5cGUsIHJlZiwgc2hhcGVGbGFnLCBwYXRjaEZsYWcgfSA9IHZub2RlO1xuICAgIGxldCBkb21UeXBlID0gbm9kZS5ub2RlVHlwZTtcbiAgICB2bm9kZS5lbCA9IG5vZGU7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XG4gICAgICBpZiAoIShcIl9fdm5vZGVcIiBpbiBub2RlKSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgXCJfX3Zub2RlXCIsIHtcbiAgICAgICAgICB2YWx1ZTogdm5vZGUsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIShcIl9fdnVlUGFyZW50Q29tcG9uZW50XCIgaW4gbm9kZSkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIFwiX192dWVQYXJlbnRDb21wb25lbnRcIiwge1xuICAgICAgICAgIHZhbHVlOiBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwYXRjaEZsYWcgPT09IC0yKSB7XG4gICAgICBvcHRpbWl6ZWQgPSBmYWxzZTtcbiAgICAgIHZub2RlLmR5bmFtaWNDaGlsZHJlbiA9IG51bGw7XG4gICAgfVxuICAgIGxldCBuZXh0Tm9kZSA9IG51bGw7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFRleHQ6XG4gICAgICAgIGlmIChkb21UeXBlICE9PSAzIC8qIFRFWFQgKi8pIHtcbiAgICAgICAgICBpZiAodm5vZGUuY2hpbGRyZW4gPT09IFwiXCIpIHtcbiAgICAgICAgICAgIGluc2VydCh2bm9kZS5lbCA9IGNyZWF0ZVRleHQoXCJcIiksIHBhcmVudE5vZGUobm9kZSksIG5vZGUpO1xuICAgICAgICAgICAgbmV4dE5vZGUgPSBub2RlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXh0Tm9kZSA9IG9uTWlzbWF0Y2goKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG5vZGUuZGF0YSAhPT0gdm5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGhhc01pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHx8IF9fVlVFX1BST0RfSFlEUkFUSU9OX01JU01BVENIX0RFVEFJTFNfXykgJiYgd2FybiQxKFxuICAgICAgICAgICAgICBgSHlkcmF0aW9uIHRleHQgbWlzbWF0Y2ggaW5gLFxuICAgICAgICAgICAgICBub2RlLnBhcmVudE5vZGUsXG4gICAgICAgICAgICAgIGBcbiAgLSByZW5kZXJlZCBvbiBzZXJ2ZXI6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgbm9kZS5kYXRhXG4gICAgICAgICAgICAgICl9XG4gIC0gZXhwZWN0ZWQgb24gY2xpZW50OiAke0pTT04uc3RyaW5naWZ5KHZub2RlLmNoaWxkcmVuKX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbm9kZS5kYXRhID0gdm5vZGUuY2hpbGRyZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHROb2RlID0gbmV4dFNpYmxpbmcobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbW1lbnQ6XG4gICAgICAgIGlmIChpc1RlbXBsYXRlTm9kZShub2RlKSkge1xuICAgICAgICAgIG5leHROb2RlID0gbmV4dFNpYmxpbmcobm9kZSk7XG4gICAgICAgICAgcmVwbGFjZU5vZGUoXG4gICAgICAgICAgICB2bm9kZS5lbCA9IG5vZGUuY29udGVudC5maXJzdENoaWxkLFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIHBhcmVudENvbXBvbmVudFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZG9tVHlwZSAhPT0gOCAvKiBDT01NRU5UICovIHx8IGlzRnJhZ21lbnRTdGFydCkge1xuICAgICAgICAgIG5leHROb2RlID0gb25NaXNtYXRjaCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHROb2RlID0gbmV4dFNpYmxpbmcobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN0YXRpYzpcbiAgICAgICAgaWYgKGlzRnJhZ21lbnRTdGFydCkge1xuICAgICAgICAgIG5vZGUgPSBuZXh0U2libGluZyhub2RlKTtcbiAgICAgICAgICBkb21UeXBlID0gbm9kZS5ub2RlVHlwZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9tVHlwZSA9PT0gMSAvKiBFTEVNRU5UICovIHx8IGRvbVR5cGUgPT09IDMgLyogVEVYVCAqLykge1xuICAgICAgICAgIG5leHROb2RlID0gbm9kZTtcbiAgICAgICAgICBjb25zdCBuZWVkVG9BZG9wdENvbnRlbnQgPSAhdm5vZGUuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdm5vZGUuc3RhdGljQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgaWYgKG5lZWRUb0Fkb3B0Q29udGVudClcbiAgICAgICAgICAgICAgdm5vZGUuY2hpbGRyZW4gKz0gbmV4dE5vZGUubm9kZVR5cGUgPT09IDEgLyogRUxFTUVOVCAqLyA/IG5leHROb2RlLm91dGVySFRNTCA6IG5leHROb2RlLmRhdGE7XG4gICAgICAgICAgICBpZiAoaSA9PT0gdm5vZGUuc3RhdGljQ291bnQgLSAxKSB7XG4gICAgICAgICAgICAgIHZub2RlLmFuY2hvciA9IG5leHROb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0U2libGluZyhuZXh0Tm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpc0ZyYWdtZW50U3RhcnQgPyBuZXh0U2libGluZyhuZXh0Tm9kZSkgOiBuZXh0Tm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbk1pc21hdGNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICBpZiAoIWlzRnJhZ21lbnRTdGFydCkge1xuICAgICAgICAgIG5leHROb2RlID0gb25NaXNtYXRjaCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHROb2RlID0gaHlkcmF0ZUZyYWdtZW50KFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIHZub2RlLFxuICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDEpIHtcbiAgICAgICAgICBpZiAoKGRvbVR5cGUgIT09IDEgLyogRUxFTUVOVCAqLyB8fCB2bm9kZS50eXBlLnRvTG93ZXJDYXNlKCkgIT09IG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSAmJiAhaXNUZW1wbGF0ZU5vZGUobm9kZSkpIHtcbiAgICAgICAgICAgIG5leHROb2RlID0gb25NaXNtYXRjaCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXh0Tm9kZSA9IGh5ZHJhdGVFbGVtZW50KFxuICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICB2bm9kZSxcbiAgICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRmxhZyAmIDYpIHtcbiAgICAgICAgICB2bm9kZS5zbG90U2NvcGVJZHMgPSBzbG90U2NvcGVJZHM7XG4gICAgICAgICAgY29uc3QgY29udGFpbmVyID0gcGFyZW50Tm9kZShub2RlKTtcbiAgICAgICAgICBpZiAoaXNGcmFnbWVudFN0YXJ0KSB7XG4gICAgICAgICAgICBuZXh0Tm9kZSA9IGxvY2F0ZUNsb3NpbmdBbmNob3Iobm9kZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0NvbW1lbnQobm9kZSkgJiYgbm9kZS5kYXRhID09PSBcInRlbGVwb3J0IHN0YXJ0XCIpIHtcbiAgICAgICAgICAgIG5leHROb2RlID0gbG9jYXRlQ2xvc2luZ0FuY2hvcihub2RlLCBub2RlLmRhdGEsIFwidGVsZXBvcnQgZW5kXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXh0Tm9kZSA9IG5leHRTaWJsaW5nKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtb3VudENvbXBvbmVudChcbiAgICAgICAgICAgIHZub2RlLFxuICAgICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgICAgZ2V0Q29udGFpbmVyVHlwZShjb250YWluZXIpLFxuICAgICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoaXNBc3luY1dyYXBwZXIodm5vZGUpKSB7XG4gICAgICAgICAgICBsZXQgc3ViVHJlZTtcbiAgICAgICAgICAgIGlmIChpc0ZyYWdtZW50U3RhcnQpIHtcbiAgICAgICAgICAgICAgc3ViVHJlZSA9IGNyZWF0ZVZOb2RlKEZyYWdtZW50KTtcbiAgICAgICAgICAgICAgc3ViVHJlZS5hbmNob3IgPSBuZXh0Tm9kZSA/IG5leHROb2RlLnByZXZpb3VzU2libGluZyA6IGNvbnRhaW5lci5sYXN0Q2hpbGQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdWJUcmVlID0gbm9kZS5ub2RlVHlwZSA9PT0gMyA/IGNyZWF0ZVRleHRWTm9kZShcIlwiKSA6IGNyZWF0ZVZOb2RlKFwiZGl2XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3ViVHJlZS5lbCA9IG5vZGU7XG4gICAgICAgICAgICB2bm9kZS5jb21wb25lbnQuc3ViVHJlZSA9IHN1YlRyZWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRmxhZyAmIDY0KSB7XG4gICAgICAgICAgaWYgKGRvbVR5cGUgIT09IDggLyogQ09NTUVOVCAqLykge1xuICAgICAgICAgICAgbmV4dE5vZGUgPSBvbk1pc21hdGNoKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5leHROb2RlID0gdm5vZGUudHlwZS5oeWRyYXRlKFxuICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICB2bm9kZSxcbiAgICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgICAgICBvcHRpbWl6ZWQsXG4gICAgICAgICAgICAgIHJlbmRlcmVySW50ZXJuYWxzLFxuICAgICAgICAgICAgICBoeWRyYXRlQ2hpbGRyZW5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRmxhZyAmIDEyOCkge1xuICAgICAgICAgIG5leHROb2RlID0gdm5vZGUudHlwZS5oeWRyYXRlKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIHZub2RlLFxuICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgICBnZXRDb250YWluZXJUeXBlKHBhcmVudE5vZGUobm9kZSkpLFxuICAgICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgICAgb3B0aW1pemVkLFxuICAgICAgICAgICAgcmVuZGVyZXJJbnRlcm5hbHMsXG4gICAgICAgICAgICBoeWRyYXRlTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0hZRFJBVElPTl9NSVNNQVRDSF9ERVRBSUxTX18pIHtcbiAgICAgICAgICB3YXJuJDEoXCJJbnZhbGlkIEhvc3RWTm9kZSB0eXBlOlwiLCB0eXBlLCBgKCR7dHlwZW9mIHR5cGV9KWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChyZWYgIT0gbnVsbCkge1xuICAgICAgc2V0UmVmKHJlZiwgbnVsbCwgcGFyZW50U3VzcGVuc2UsIHZub2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHROb2RlO1xuICB9O1xuICBjb25zdCBoeWRyYXRlRWxlbWVudCA9IChlbCwgdm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKSA9PiB7XG4gICAgb3B0aW1pemVkID0gb3B0aW1pemVkIHx8ICEhdm5vZGUuZHluYW1pY0NoaWxkcmVuO1xuICAgIGNvbnN0IHsgdHlwZSwgcHJvcHMsIHBhdGNoRmxhZywgc2hhcGVGbGFnLCBkaXJzLCB0cmFuc2l0aW9uIH0gPSB2bm9kZTtcbiAgICBjb25zdCBmb3JjZVBhdGNoID0gdHlwZSA9PT0gXCJpbnB1dFwiIHx8IHR5cGUgPT09IFwib3B0aW9uXCI7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgZm9yY2VQYXRjaCB8fCBwYXRjaEZsYWcgIT09IC0xKSB7XG4gICAgICBpZiAoZGlycykge1xuICAgICAgICBpbnZva2VEaXJlY3RpdmVIb29rKHZub2RlLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIFwiY3JlYXRlZFwiKTtcbiAgICAgIH1cbiAgICAgIGxldCBuZWVkQ2FsbFRyYW5zaXRpb25Ib29rcyA9IGZhbHNlO1xuICAgICAgaWYgKGlzVGVtcGxhdGVOb2RlKGVsKSkge1xuICAgICAgICBuZWVkQ2FsbFRyYW5zaXRpb25Ib29rcyA9IG5lZWRUcmFuc2l0aW9uKHBhcmVudFN1c3BlbnNlLCB0cmFuc2l0aW9uKSAmJiBwYXJlbnRDb21wb25lbnQgJiYgcGFyZW50Q29tcG9uZW50LnZub2RlLnByb3BzICYmIHBhcmVudENvbXBvbmVudC52bm9kZS5wcm9wcy5hcHBlYXI7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBlbC5jb250ZW50LmZpcnN0Q2hpbGQ7XG4gICAgICAgIGlmIChuZWVkQ2FsbFRyYW5zaXRpb25Ib29rcykge1xuICAgICAgICAgIHRyYW5zaXRpb24uYmVmb3JlRW50ZXIoY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVwbGFjZU5vZGUoY29udGVudCwgZWwsIHBhcmVudENvbXBvbmVudCk7XG4gICAgICAgIHZub2RlLmVsID0gZWwgPSBjb250ZW50O1xuICAgICAgfVxuICAgICAgaWYgKHNoYXBlRmxhZyAmIDE2ICYmIC8vIHNraXAgaWYgZWxlbWVudCBoYXMgaW5uZXJIVE1MIC8gdGV4dENvbnRlbnRcbiAgICAgICEocHJvcHMgJiYgKHByb3BzLmlubmVySFRNTCB8fCBwcm9wcy50ZXh0Q29udGVudCkpKSB7XG4gICAgICAgIGxldCBuZXh0ID0gaHlkcmF0ZUNoaWxkcmVuKFxuICAgICAgICAgIGVsLmZpcnN0Q2hpbGQsXG4gICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgZWwsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IGhhc1dhcm5lZCA9IGZhbHNlO1xuICAgICAgICB3aGlsZSAobmV4dCkge1xuICAgICAgICAgIGhhc01pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9IWURSQVRJT05fTUlTTUFUQ0hfREVUQUlMU19fKSAmJiAhaGFzV2FybmVkKSB7XG4gICAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICAgIGBIeWRyYXRpb24gY2hpbGRyZW4gbWlzbWF0Y2ggb25gLFxuICAgICAgICAgICAgICBlbCxcbiAgICAgICAgICAgICAgYFxuU2VydmVyIHJlbmRlcmVkIGVsZW1lbnQgY29udGFpbnMgbW9yZSBjaGlsZCBub2RlcyB0aGFuIGNsaWVudCB2ZG9tLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBoYXNXYXJuZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjdXIgPSBuZXh0O1xuICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nO1xuICAgICAgICAgIHJlbW92ZShjdXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNoYXBlRmxhZyAmIDgpIHtcbiAgICAgICAgaWYgKGVsLnRleHRDb250ZW50ICE9PSB2bm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgIGhhc01pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0hZRFJBVElPTl9NSVNNQVRDSF9ERVRBSUxTX18pICYmIHdhcm4kMShcbiAgICAgICAgICAgIGBIeWRyYXRpb24gdGV4dCBjb250ZW50IG1pc21hdGNoIG9uYCxcbiAgICAgICAgICAgIGVsLFxuICAgICAgICAgICAgYFxuICAtIHJlbmRlcmVkIG9uIHNlcnZlcjogJHtlbC50ZXh0Q29udGVudH1cbiAgLSBleHBlY3RlZCBvbiBjbGllbnQ6ICR7dm5vZGUuY2hpbGRyZW59YFxuICAgICAgICAgICk7XG4gICAgICAgICAgZWwudGV4dENvbnRlbnQgPSB2bm9kZS5jaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzKSB7XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHx8IGZvcmNlUGF0Y2ggfHwgIW9wdGltaXplZCB8fCBwYXRjaEZsYWcgJiAoMTYgfCAzMikpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xuICAgICAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgcHJvcEhhc01pc21hdGNoKGVsLCBrZXksIHByb3BzW2tleV0sIHZub2RlLCBwYXJlbnRDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgIGhhc01pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb3JjZVBhdGNoICYmIChrZXkuZW5kc1dpdGgoXCJ2YWx1ZVwiKSB8fCBrZXkgPT09IFwiaW5kZXRlcm1pbmF0ZVwiKSB8fCBpc09uKGtleSkgJiYgIWlzUmVzZXJ2ZWRQcm9wKGtleSkgfHwgLy8gZm9yY2UgaHlkcmF0ZSB2LWJpbmQgd2l0aCAucHJvcCBtb2RpZmllcnNcbiAgICAgICAgICAgIGtleVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICAgICAgcGF0Y2hQcm9wKFxuICAgICAgICAgICAgICAgIGVsLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIHByb3BzW2tleV0sXG4gICAgICAgICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb21wb25lbnRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcHMub25DbGljaykge1xuICAgICAgICAgIHBhdGNoUHJvcChcbiAgICAgICAgICAgIGVsLFxuICAgICAgICAgICAgXCJvbkNsaWNrXCIsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgcHJvcHMub25DbGljayxcbiAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgIHBhcmVudENvbXBvbmVudFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCB2bm9kZUhvb2tzO1xuICAgICAgaWYgKHZub2RlSG9va3MgPSBwcm9wcyAmJiBwcm9wcy5vblZub2RlQmVmb3JlTW91bnQpIHtcbiAgICAgICAgaW52b2tlVk5vZGVIb29rKHZub2RlSG9va3MsIHBhcmVudENvbXBvbmVudCwgdm5vZGUpO1xuICAgICAgfVxuICAgICAgaWYgKGRpcnMpIHtcbiAgICAgICAgaW52b2tlRGlyZWN0aXZlSG9vayh2bm9kZSwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBcImJlZm9yZU1vdW50XCIpO1xuICAgICAgfVxuICAgICAgaWYgKCh2bm9kZUhvb2tzID0gcHJvcHMgJiYgcHJvcHMub25Wbm9kZU1vdW50ZWQpIHx8IGRpcnMgfHwgbmVlZENhbGxUcmFuc2l0aW9uSG9va3MpIHtcbiAgICAgICAgcXVldWVFZmZlY3RXaXRoU3VzcGVuc2UoKCkgPT4ge1xuICAgICAgICAgIHZub2RlSG9va3MgJiYgaW52b2tlVk5vZGVIb29rKHZub2RlSG9va3MsIHBhcmVudENvbXBvbmVudCwgdm5vZGUpO1xuICAgICAgICAgIG5lZWRDYWxsVHJhbnNpdGlvbkhvb2tzICYmIHRyYW5zaXRpb24uZW50ZXIoZWwpO1xuICAgICAgICAgIGRpcnMgJiYgaW52b2tlRGlyZWN0aXZlSG9vayh2bm9kZSwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBcIm1vdW50ZWRcIik7XG4gICAgICAgIH0sIHBhcmVudFN1c3BlbnNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVsLm5leHRTaWJsaW5nO1xuICB9O1xuICBjb25zdCBoeWRyYXRlQ2hpbGRyZW4gPSAobm9kZSwgcGFyZW50Vk5vZGUsIGNvbnRhaW5lciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpID0+IHtcbiAgICBvcHRpbWl6ZWQgPSBvcHRpbWl6ZWQgfHwgISFwYXJlbnRWTm9kZS5keW5hbWljQ2hpbGRyZW47XG4gICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnRWTm9kZS5jaGlsZHJlbjtcbiAgICBjb25zdCBsID0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGxldCBoYXNXYXJuZWQgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgY29uc3Qgdm5vZGUgPSBvcHRpbWl6ZWQgPyBjaGlsZHJlbltpXSA6IGNoaWxkcmVuW2ldID0gbm9ybWFsaXplVk5vZGUoY2hpbGRyZW5baV0pO1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgbm9kZSA9IGh5ZHJhdGVOb2RlKFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAodm5vZGUudHlwZSA9PT0gVGV4dCAmJiAhdm5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXNNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgIGlmICgoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0hZRFJBVElPTl9NSVNNQVRDSF9ERVRBSUxTX18pICYmICFoYXNXYXJuZWQpIHtcbiAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICBgSHlkcmF0aW9uIGNoaWxkcmVuIG1pc21hdGNoIG9uYCxcbiAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgIGBcblNlcnZlciByZW5kZXJlZCBlbGVtZW50IGNvbnRhaW5zIGZld2VyIGNoaWxkIG5vZGVzIHRoYW4gY2xpZW50IHZkb20uYFxuICAgICAgICAgICk7XG4gICAgICAgICAgaGFzV2FybmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBwYXRjaChcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHZub2RlLFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICBnZXRDb250YWluZXJUeXBlKGNvbnRhaW5lciksXG4gICAgICAgICAgc2xvdFNjb3BlSWRzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9O1xuICBjb25zdCBoeWRyYXRlRnJhZ21lbnQgPSAobm9kZSwgdm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKSA9PiB7XG4gICAgY29uc3QgeyBzbG90U2NvcGVJZHM6IGZyYWdtZW50U2xvdFNjb3BlSWRzIH0gPSB2bm9kZTtcbiAgICBpZiAoZnJhZ21lbnRTbG90U2NvcGVJZHMpIHtcbiAgICAgIHNsb3RTY29wZUlkcyA9IHNsb3RTY29wZUlkcyA/IHNsb3RTY29wZUlkcy5jb25jYXQoZnJhZ21lbnRTbG90U2NvcGVJZHMpIDogZnJhZ21lbnRTbG90U2NvcGVJZHM7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHBhcmVudE5vZGUobm9kZSk7XG4gICAgY29uc3QgbmV4dCA9IGh5ZHJhdGVDaGlsZHJlbihcbiAgICAgIG5leHRTaWJsaW5nKG5vZGUpLFxuICAgICAgdm5vZGUsXG4gICAgICBjb250YWluZXIsXG4gICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgIG9wdGltaXplZFxuICAgICk7XG4gICAgaWYgKG5leHQgJiYgaXNDb21tZW50KG5leHQpICYmIG5leHQuZGF0YSA9PT0gXCJdXCIpIHtcbiAgICAgIHJldHVybiBuZXh0U2libGluZyh2bm9kZS5hbmNob3IgPSBuZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzTWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgaW5zZXJ0KHZub2RlLmFuY2hvciA9IGNyZWF0ZUNvbW1lbnQoYF1gKSwgY29udGFpbmVyLCBuZXh0KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlTWlzbWF0Y2ggPSAobm9kZSwgdm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHNsb3RTY29wZUlkcywgaXNGcmFnbWVudCkgPT4ge1xuICAgIGhhc01pc21hdGNoID0gdHJ1ZTtcbiAgICAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0hZRFJBVElPTl9NSVNNQVRDSF9ERVRBSUxTX18pICYmIHdhcm4kMShcbiAgICAgIGBIeWRyYXRpb24gbm9kZSBtaXNtYXRjaDpcbi0gcmVuZGVyZWQgb24gc2VydmVyOmAsXG4gICAgICBub2RlLFxuICAgICAgbm9kZS5ub2RlVHlwZSA9PT0gMyAvKiBURVhUICovID8gYCh0ZXh0KWAgOiBpc0NvbW1lbnQobm9kZSkgJiYgbm9kZS5kYXRhID09PSBcIltcIiA/IGAoc3RhcnQgb2YgZnJhZ21lbnQpYCA6IGBgLFxuICAgICAgYFxuLSBleHBlY3RlZCBvbiBjbGllbnQ6YCxcbiAgICAgIHZub2RlLnR5cGVcbiAgICApO1xuICAgIHZub2RlLmVsID0gbnVsbDtcbiAgICBpZiAoaXNGcmFnbWVudCkge1xuICAgICAgY29uc3QgZW5kID0gbG9jYXRlQ2xvc2luZ0FuY2hvcihub2RlKTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IG5leHQyID0gbmV4dFNpYmxpbmcobm9kZSk7XG4gICAgICAgIGlmIChuZXh0MiAmJiBuZXh0MiAhPT0gZW5kKSB7XG4gICAgICAgICAgcmVtb3ZlKG5leHQyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXh0ID0gbmV4dFNpYmxpbmcobm9kZSk7XG4gICAgY29uc3QgY29udGFpbmVyID0gcGFyZW50Tm9kZShub2RlKTtcbiAgICByZW1vdmUobm9kZSk7XG4gICAgcGF0Y2goXG4gICAgICBudWxsLFxuICAgICAgdm5vZGUsXG4gICAgICBjb250YWluZXIsXG4gICAgICBuZXh0LFxuICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICBnZXRDb250YWluZXJUeXBlKGNvbnRhaW5lciksXG4gICAgICBzbG90U2NvcGVJZHNcbiAgICApO1xuICAgIHJldHVybiBuZXh0O1xuICB9O1xuICBjb25zdCBsb2NhdGVDbG9zaW5nQW5jaG9yID0gKG5vZGUsIG9wZW4gPSBcIltcIiwgY2xvc2UgPSBcIl1cIikgPT4ge1xuICAgIGxldCBtYXRjaCA9IDA7XG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgIG5vZGUgPSBuZXh0U2libGluZyhub2RlKTtcbiAgICAgIGlmIChub2RlICYmIGlzQ29tbWVudChub2RlKSkge1xuICAgICAgICBpZiAobm9kZS5kYXRhID09PSBvcGVuKVxuICAgICAgICAgIG1hdGNoKys7XG4gICAgICAgIGlmIChub2RlLmRhdGEgPT09IGNsb3NlKSB7XG4gICAgICAgICAgaWYgKG1hdGNoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dFNpYmxpbmcobm9kZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1hdGNoLS07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9O1xuICBjb25zdCByZXBsYWNlTm9kZSA9IChuZXdOb2RlLCBvbGROb2RlLCBwYXJlbnRDb21wb25lbnQpID0+IHtcbiAgICBjb25zdCBwYXJlbnROb2RlMiA9IG9sZE5vZGUucGFyZW50Tm9kZTtcbiAgICBpZiAocGFyZW50Tm9kZTIpIHtcbiAgICAgIHBhcmVudE5vZGUyLnJlcGxhY2VDaGlsZChuZXdOb2RlLCBvbGROb2RlKTtcbiAgICB9XG4gICAgbGV0IHBhcmVudCA9IHBhcmVudENvbXBvbmVudDtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICBpZiAocGFyZW50LnZub2RlLmVsID09PSBvbGROb2RlKSB7XG4gICAgICAgIHBhcmVudC52bm9kZS5lbCA9IHBhcmVudC5zdWJUcmVlLmVsID0gbmV3Tm9kZTtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgfVxuICB9O1xuICBjb25zdCBpc1RlbXBsYXRlTm9kZSA9IChub2RlKSA9PiB7XG4gICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IDEgLyogRUxFTUVOVCAqLyAmJiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0ZW1wbGF0ZVwiO1xuICB9O1xuICByZXR1cm4gW2h5ZHJhdGUsIGh5ZHJhdGVOb2RlXTtcbn1cbmZ1bmN0aW9uIHByb3BIYXNNaXNtYXRjaChlbCwga2V5LCBjbGllbnRWYWx1ZSwgdm5vZGUsIGluc3RhbmNlKSB7XG4gIHZhciBfYTtcbiAgbGV0IG1pc21hdGNoVHlwZTtcbiAgbGV0IG1pc21hdGNoS2V5O1xuICBsZXQgYWN0dWFsO1xuICBsZXQgZXhwZWN0ZWQ7XG4gIGlmIChrZXkgPT09IFwiY2xhc3NcIikge1xuICAgIGFjdHVhbCA9IGVsLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpO1xuICAgIGV4cGVjdGVkID0gbm9ybWFsaXplQ2xhc3MoY2xpZW50VmFsdWUpO1xuICAgIGlmICghaXNTZXRFcXVhbCh0b0NsYXNzU2V0KGFjdHVhbCB8fCBcIlwiKSwgdG9DbGFzc1NldChleHBlY3RlZCkpKSB7XG4gICAgICBtaXNtYXRjaFR5cGUgPSBtaXNtYXRjaEtleSA9IGBjbGFzc2A7XG4gICAgfVxuICB9IGVsc2UgaWYgKGtleSA9PT0gXCJzdHlsZVwiKSB7XG4gICAgYWN0dWFsID0gZWwuZ2V0QXR0cmlidXRlKFwic3R5bGVcIik7XG4gICAgZXhwZWN0ZWQgPSBpc1N0cmluZyhjbGllbnRWYWx1ZSkgPyBjbGllbnRWYWx1ZSA6IHN0cmluZ2lmeVN0eWxlKG5vcm1hbGl6ZVN0eWxlKGNsaWVudFZhbHVlKSk7XG4gICAgY29uc3QgYWN0dWFsTWFwID0gdG9TdHlsZU1hcChhY3R1YWwpO1xuICAgIGNvbnN0IGV4cGVjdGVkTWFwID0gdG9TdHlsZU1hcChleHBlY3RlZCk7XG4gICAgaWYgKHZub2RlLmRpcnMpIHtcbiAgICAgIGZvciAoY29uc3QgeyBkaXIsIHZhbHVlIH0gb2Ygdm5vZGUuZGlycykge1xuICAgICAgICBpZiAoZGlyLm5hbWUgPT09IFwic2hvd1wiICYmICF2YWx1ZSkge1xuICAgICAgICAgIGV4cGVjdGVkTWFwLnNldChcImRpc3BsYXlcIiwgXCJub25lXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJvb3QgPSBpbnN0YW5jZSA9PSBudWxsID8gdm9pZCAwIDogaW5zdGFuY2Uuc3ViVHJlZTtcbiAgICBpZiAodm5vZGUgPT09IHJvb3QgfHwgKHJvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IHJvb3QudHlwZSkgPT09IEZyYWdtZW50ICYmIHJvb3QuY2hpbGRyZW4uaW5jbHVkZXModm5vZGUpKSB7XG4gICAgICBjb25zdCBjc3NWYXJzID0gKF9hID0gaW5zdGFuY2UgPT0gbnVsbCA/IHZvaWQgMCA6IGluc3RhbmNlLmdldENzc1ZhcnMpID09IG51bGwgPyB2b2lkIDAgOiBfYS5jYWxsKGluc3RhbmNlKTtcbiAgICAgIGZvciAoY29uc3Qga2V5MiBpbiBjc3NWYXJzKSB7XG4gICAgICAgIGV4cGVjdGVkTWFwLnNldChgLS0ke2tleTJ9YCwgU3RyaW5nKGNzc1ZhcnNba2V5Ml0pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFpc01hcEVxdWFsKGFjdHVhbE1hcCwgZXhwZWN0ZWRNYXApKSB7XG4gICAgICBtaXNtYXRjaFR5cGUgPSBtaXNtYXRjaEtleSA9IFwic3R5bGVcIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBTVkdFbGVtZW50ICYmIGlzS25vd25TdmdBdHRyKGtleSkgfHwgZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiAoaXNCb29sZWFuQXR0cihrZXkpIHx8IGlzS25vd25IdG1sQXR0cihrZXkpKSkge1xuICAgIGlmIChpc0Jvb2xlYW5BdHRyKGtleSkpIHtcbiAgICAgIGFjdHVhbCA9IGVsLmhhc0F0dHJpYnV0ZShrZXkpO1xuICAgICAgZXhwZWN0ZWQgPSBpbmNsdWRlQm9vbGVhbkF0dHIoY2xpZW50VmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoY2xpZW50VmFsdWUgPT0gbnVsbCkge1xuICAgICAgYWN0dWFsID0gZWwuaGFzQXR0cmlidXRlKGtleSk7XG4gICAgICBleHBlY3RlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZWwuaGFzQXR0cmlidXRlKGtleSkpIHtcbiAgICAgICAgYWN0dWFsID0gZWwuZ2V0QXR0cmlidXRlKGtleSk7XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJ2YWx1ZVwiICYmIGVsLnRhZ05hbWUgPT09IFwiVEVYVEFSRUFcIikge1xuICAgICAgICBhY3R1YWwgPSBlbC52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdHVhbCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgZXhwZWN0ZWQgPSBpc1JlbmRlcmFibGVBdHRyVmFsdWUoY2xpZW50VmFsdWUpID8gU3RyaW5nKGNsaWVudFZhbHVlKSA6IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkge1xuICAgICAgbWlzbWF0Y2hUeXBlID0gYGF0dHJpYnV0ZWA7XG4gICAgICBtaXNtYXRjaEtleSA9IGtleTtcbiAgICB9XG4gIH1cbiAgaWYgKG1pc21hdGNoVHlwZSkge1xuICAgIGNvbnN0IGZvcm1hdCA9ICh2KSA9PiB2ID09PSBmYWxzZSA/IGAobm90IHJlbmRlcmVkKWAgOiBgJHttaXNtYXRjaEtleX09XCIke3Z9XCJgO1xuICAgIGNvbnN0IHByZVNlZ21lbnQgPSBgSHlkcmF0aW9uICR7bWlzbWF0Y2hUeXBlfSBtaXNtYXRjaCBvbmA7XG4gICAgY29uc3QgcG9zdFNlZ21lbnQgPSBgXG4gIC0gcmVuZGVyZWQgb24gc2VydmVyOiAke2Zvcm1hdChhY3R1YWwpfVxuICAtIGV4cGVjdGVkIG9uIGNsaWVudDogJHtmb3JtYXQoZXhwZWN0ZWQpfVxuICBOb3RlOiB0aGlzIG1pc21hdGNoIGlzIGNoZWNrLW9ubHkuIFRoZSBET00gd2lsbCBub3QgYmUgcmVjdGlmaWVkIGluIHByb2R1Y3Rpb24gZHVlIHRvIHBlcmZvcm1hbmNlIG92ZXJoZWFkLlxuICBZb3Ugc2hvdWxkIGZpeCB0aGUgc291cmNlIG9mIHRoZSBtaXNtYXRjaC5gO1xuICAgIHtcbiAgICAgIHdhcm4kMShwcmVTZWdtZW50LCBlbCwgcG9zdFNlZ21lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiB0b0NsYXNzU2V0KHN0cikge1xuICByZXR1cm4gbmV3IFNldChzdHIudHJpbSgpLnNwbGl0KC9cXHMrLykpO1xufVxuZnVuY3Rpb24gaXNTZXRFcXVhbChhLCBiKSB7XG4gIGlmIChhLnNpemUgIT09IGIuc2l6ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmb3IgKGNvbnN0IHMgb2YgYSkge1xuICAgIGlmICghYi5oYXMocykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiB0b1N0eWxlTWFwKHN0cikge1xuICBjb25zdCBzdHlsZU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGZvciAoY29uc3QgaXRlbSBvZiBzdHIuc3BsaXQoXCI7XCIpKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IGl0ZW0uc3BsaXQoXCI6XCIpO1xuICAgIGtleSA9IGtleSA9PSBudWxsID8gdm9pZCAwIDoga2V5LnRyaW0oKTtcbiAgICB2YWx1ZSA9IHZhbHVlID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZS50cmltKCk7XG4gICAgaWYgKGtleSAmJiB2YWx1ZSkge1xuICAgICAgc3R5bGVNYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3R5bGVNYXA7XG59XG5mdW5jdGlvbiBpc01hcEVxdWFsKGEsIGIpIHtcbiAgaWYgKGEuc2l6ZSAhPT0gYi5zaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGEpIHtcbiAgICBpZiAodmFsdWUgIT09IGIuZ2V0KGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmxldCBzdXBwb3J0ZWQ7XG5sZXQgcGVyZjtcbmZ1bmN0aW9uIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgdHlwZSkge1xuICBpZiAoaW5zdGFuY2UuYXBwQ29udGV4dC5jb25maWcucGVyZm9ybWFuY2UgJiYgaXNTdXBwb3J0ZWQoKSkge1xuICAgIHBlcmYubWFyayhgdnVlLSR7dHlwZX0tJHtpbnN0YW5jZS51aWR9YCk7XG4gIH1cbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XG4gICAgZGV2dG9vbHNQZXJmU3RhcnQoaW5zdGFuY2UsIHR5cGUsIGlzU3VwcG9ydGVkKCkgPyBwZXJmLm5vdygpIDogRGF0ZS5ub3coKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVuZE1lYXN1cmUoaW5zdGFuY2UsIHR5cGUpIHtcbiAgaWYgKGluc3RhbmNlLmFwcENvbnRleHQuY29uZmlnLnBlcmZvcm1hbmNlICYmIGlzU3VwcG9ydGVkKCkpIHtcbiAgICBjb25zdCBzdGFydFRhZyA9IGB2dWUtJHt0eXBlfS0ke2luc3RhbmNlLnVpZH1gO1xuICAgIGNvbnN0IGVuZFRhZyA9IHN0YXJ0VGFnICsgYDplbmRgO1xuICAgIHBlcmYubWFyayhlbmRUYWcpO1xuICAgIHBlcmYubWVhc3VyZShcbiAgICAgIGA8JHtmb3JtYXRDb21wb25lbnROYW1lKGluc3RhbmNlLCBpbnN0YW5jZS50eXBlKX0+ICR7dHlwZX1gLFxuICAgICAgc3RhcnRUYWcsXG4gICAgICBlbmRUYWdcbiAgICApO1xuICAgIHBlcmYuY2xlYXJNYXJrcyhzdGFydFRhZyk7XG4gICAgcGVyZi5jbGVhck1hcmtzKGVuZFRhZyk7XG4gIH1cbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgX19WVUVfUFJPRF9ERVZUT09MU19fKSB7XG4gICAgZGV2dG9vbHNQZXJmRW5kKGluc3RhbmNlLCB0eXBlLCBpc1N1cHBvcnRlZCgpID8gcGVyZi5ub3coKSA6IERhdGUubm93KCkpO1xuICB9XG59XG5mdW5jdGlvbiBpc1N1cHBvcnRlZCgpIHtcbiAgaWYgKHN1cHBvcnRlZCAhPT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHN1cHBvcnRlZDtcbiAgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cucGVyZm9ybWFuY2UpIHtcbiAgICBzdXBwb3J0ZWQgPSB0cnVlO1xuICAgIHBlcmYgPSB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIH0gZWxzZSB7XG4gICAgc3VwcG9ydGVkID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHN1cHBvcnRlZDtcbn1cblxuZnVuY3Rpb24gaW5pdEZlYXR1cmVGbGFncygpIHtcbiAgY29uc3QgbmVlZFdhcm4gPSBbXTtcbiAgaWYgKHR5cGVvZiBfX1ZVRV9PUFRJT05TX0FQSV9fICE9PSBcImJvb2xlYW5cIikge1xuICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgbmVlZFdhcm4ucHVzaChgX19WVUVfT1BUSU9OU19BUElfX2ApO1xuICAgIGdldEdsb2JhbFRoaXMoKS5fX1ZVRV9PUFRJT05TX0FQSV9fID0gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIF9fVlVFX1BST0RfREVWVE9PTFNfXyAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIG5lZWRXYXJuLnB1c2goYF9fVlVFX1BST0RfREVWVE9PTFNfX2ApO1xuICAgIGdldEdsb2JhbFRoaXMoKS5fX1ZVRV9QUk9EX0RFVlRPT0xTX18gPSBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIF9fVlVFX1BST0RfSFlEUkFUSU9OX01JU01BVENIX0RFVEFJTFNfXyAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIG5lZWRXYXJuLnB1c2goYF9fVlVFX1BST0RfSFlEUkFUSU9OX01JU01BVENIX0RFVEFJTFNfX2ApO1xuICAgIGdldEdsb2JhbFRoaXMoKS5fX1ZVRV9QUk9EX0hZRFJBVElPTl9NSVNNQVRDSF9ERVRBSUxTX18gPSBmYWxzZTtcbiAgfVxuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBuZWVkV2Fybi5sZW5ndGgpIHtcbiAgICBjb25zdCBtdWx0aSA9IG5lZWRXYXJuLmxlbmd0aCA+IDE7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYEZlYXR1cmUgZmxhZyR7bXVsdGkgPyBgc2AgOiBgYH0gJHtuZWVkV2Fybi5qb2luKFwiLCBcIil9ICR7bXVsdGkgPyBgYXJlYCA6IGBpc2B9IG5vdCBleHBsaWNpdGx5IGRlZmluZWQuIFlvdSBhcmUgcnVubmluZyB0aGUgZXNtLWJ1bmRsZXIgYnVpbGQgb2YgVnVlLCB3aGljaCBleHBlY3RzIHRoZXNlIGNvbXBpbGUtdGltZSBmZWF0dXJlIGZsYWdzIHRvIGJlIGdsb2JhbGx5IGluamVjdGVkIHZpYSB0aGUgYnVuZGxlciBjb25maWcgaW4gb3JkZXIgdG8gZ2V0IGJldHRlciB0cmVlLXNoYWtpbmcgaW4gdGhlIHByb2R1Y3Rpb24gYnVuZGxlLlxuXG5Gb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9saW5rLnZ1ZWpzLm9yZy9mZWF0dXJlLWZsYWdzLmBcbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHF1ZXVlUG9zdFJlbmRlckVmZmVjdCA9IHF1ZXVlRWZmZWN0V2l0aFN1c3BlbnNlIDtcbmZ1bmN0aW9uIGNyZWF0ZVJlbmRlcmVyKG9wdGlvbnMpIHtcbiAgcmV0dXJuIGJhc2VDcmVhdGVSZW5kZXJlcihvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUh5ZHJhdGlvblJlbmRlcmVyKG9wdGlvbnMpIHtcbiAgcmV0dXJuIGJhc2VDcmVhdGVSZW5kZXJlcihvcHRpb25zLCBjcmVhdGVIeWRyYXRpb25GdW5jdGlvbnMpO1xufVxuZnVuY3Rpb24gYmFzZUNyZWF0ZVJlbmRlcmVyKG9wdGlvbnMsIGNyZWF0ZUh5ZHJhdGlvbkZucykge1xuICB7XG4gICAgaW5pdEZlYXR1cmVGbGFncygpO1xuICB9XG4gIGNvbnN0IHRhcmdldCA9IGdldEdsb2JhbFRoaXMoKTtcbiAgdGFyZ2V0Ll9fVlVFX18gPSB0cnVlO1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcbiAgICBzZXREZXZ0b29sc0hvb2skMSh0YXJnZXQuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXywgdGFyZ2V0KTtcbiAgfVxuICBjb25zdCB7XG4gICAgaW5zZXJ0OiBob3N0SW5zZXJ0LFxuICAgIHJlbW92ZTogaG9zdFJlbW92ZSxcbiAgICBwYXRjaFByb3A6IGhvc3RQYXRjaFByb3AsXG4gICAgY3JlYXRlRWxlbWVudDogaG9zdENyZWF0ZUVsZW1lbnQsXG4gICAgY3JlYXRlVGV4dDogaG9zdENyZWF0ZVRleHQsXG4gICAgY3JlYXRlQ29tbWVudDogaG9zdENyZWF0ZUNvbW1lbnQsXG4gICAgc2V0VGV4dDogaG9zdFNldFRleHQsXG4gICAgc2V0RWxlbWVudFRleHQ6IGhvc3RTZXRFbGVtZW50VGV4dCxcbiAgICBwYXJlbnROb2RlOiBob3N0UGFyZW50Tm9kZSxcbiAgICBuZXh0U2libGluZzogaG9zdE5leHRTaWJsaW5nLFxuICAgIHNldFNjb3BlSWQ6IGhvc3RTZXRTY29wZUlkID0gTk9PUCxcbiAgICBpbnNlcnRTdGF0aWNDb250ZW50OiBob3N0SW5zZXJ0U3RhdGljQ29udGVudFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcGF0Y2ggPSAobjEsIG4yLCBjb250YWluZXIsIGFuY2hvciA9IG51bGwsIHBhcmVudENvbXBvbmVudCA9IG51bGwsIHBhcmVudFN1c3BlbnNlID0gbnVsbCwgbmFtZXNwYWNlID0gdm9pZCAwLCBzbG90U2NvcGVJZHMgPSBudWxsLCBvcHRpbWl6ZWQgPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGlzSG1yVXBkYXRpbmcgPyBmYWxzZSA6ICEhbjIuZHluYW1pY0NoaWxkcmVuKSA9PiB7XG4gICAgaWYgKG4xID09PSBuMikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobjEgJiYgIWlzU2FtZVZOb2RlVHlwZShuMSwgbjIpKSB7XG4gICAgICBhbmNob3IgPSBnZXROZXh0SG9zdE5vZGUobjEpO1xuICAgICAgdW5tb3VudChuMSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgdHJ1ZSk7XG4gICAgICBuMSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChuMi5wYXRjaEZsYWcgPT09IC0yKSB7XG4gICAgICBvcHRpbWl6ZWQgPSBmYWxzZTtcbiAgICAgIG4yLmR5bmFtaWNDaGlsZHJlbiA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHsgdHlwZSwgcmVmLCBzaGFwZUZsYWcgfSA9IG4yO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBUZXh0OlxuICAgICAgICBwcm9jZXNzVGV4dChuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbW1lbnQ6XG4gICAgICAgIHByb2Nlc3NDb21tZW50Tm9kZShuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN0YXRpYzpcbiAgICAgICAgaWYgKG4xID09IG51bGwpIHtcbiAgICAgICAgICBtb3VudFN0YXRpY05vZGUobjIsIGNvbnRhaW5lciwgYW5jaG9yLCBuYW1lc3BhY2UpO1xuICAgICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICBwYXRjaFN0YXRpY05vZGUobjEsIG4yLCBjb250YWluZXIsIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICBwcm9jZXNzRnJhZ21lbnQoXG4gICAgICAgICAgbjEsXG4gICAgICAgICAgbjIsXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2hhcGVGbGFnICYgMSkge1xuICAgICAgICAgIHByb2Nlc3NFbGVtZW50KFxuICAgICAgICAgICAgbjEsXG4gICAgICAgICAgICBuMixcbiAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChzaGFwZUZsYWcgJiA2KSB7XG4gICAgICAgICAgcHJvY2Vzc0NvbXBvbmVudChcbiAgICAgICAgICAgIG4xLFxuICAgICAgICAgICAgbjIsXG4gICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2hhcGVGbGFnICYgNjQpIHtcbiAgICAgICAgICB0eXBlLnByb2Nlc3MoXG4gICAgICAgICAgICBuMSxcbiAgICAgICAgICAgIG4yLFxuICAgICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgICBvcHRpbWl6ZWQsXG4gICAgICAgICAgICBpbnRlcm5hbHNcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRmxhZyAmIDEyOCkge1xuICAgICAgICAgIHR5cGUucHJvY2VzcyhcbiAgICAgICAgICAgIG4xLFxuICAgICAgICAgICAgbjIsXG4gICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICAgIG9wdGltaXplZCxcbiAgICAgICAgICAgIGludGVybmFsc1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIHdhcm4kMShcIkludmFsaWQgVk5vZGUgdHlwZTpcIiwgdHlwZSwgYCgke3R5cGVvZiB0eXBlfSlgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVmICE9IG51bGwgJiYgcGFyZW50Q29tcG9uZW50KSB7XG4gICAgICBzZXRSZWYocmVmLCBuMSAmJiBuMS5yZWYsIHBhcmVudFN1c3BlbnNlLCBuMiB8fCBuMSwgIW4yKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHByb2Nlc3NUZXh0ID0gKG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IpID0+IHtcbiAgICBpZiAobjEgPT0gbnVsbCkge1xuICAgICAgaG9zdEluc2VydChcbiAgICAgICAgbjIuZWwgPSBob3N0Q3JlYXRlVGV4dChuMi5jaGlsZHJlbiksXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgYW5jaG9yXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlbCA9IG4yLmVsID0gbjEuZWw7XG4gICAgICBpZiAobjIuY2hpbGRyZW4gIT09IG4xLmNoaWxkcmVuKSB7XG4gICAgICAgIGhvc3RTZXRUZXh0KGVsLCBuMi5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBwcm9jZXNzQ29tbWVudE5vZGUgPSAobjEsIG4yLCBjb250YWluZXIsIGFuY2hvcikgPT4ge1xuICAgIGlmIChuMSA9PSBudWxsKSB7XG4gICAgICBob3N0SW5zZXJ0KFxuICAgICAgICBuMi5lbCA9IGhvc3RDcmVhdGVDb21tZW50KG4yLmNoaWxkcmVuIHx8IFwiXCIpLFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIGFuY2hvclxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbjIuZWwgPSBuMS5lbDtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG1vdW50U3RhdGljTm9kZSA9IChuMiwgY29udGFpbmVyLCBhbmNob3IsIG5hbWVzcGFjZSkgPT4ge1xuICAgIFtuMi5lbCwgbjIuYW5jaG9yXSA9IGhvc3RJbnNlcnRTdGF0aWNDb250ZW50KFxuICAgICAgbjIuY2hpbGRyZW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICBhbmNob3IsXG4gICAgICBuYW1lc3BhY2UsXG4gICAgICBuMi5lbCxcbiAgICAgIG4yLmFuY2hvclxuICAgICk7XG4gIH07XG4gIGNvbnN0IHBhdGNoU3RhdGljTm9kZSA9IChuMSwgbjIsIGNvbnRhaW5lciwgbmFtZXNwYWNlKSA9PiB7XG4gICAgaWYgKG4yLmNoaWxkcmVuICE9PSBuMS5jaGlsZHJlbikge1xuICAgICAgY29uc3QgYW5jaG9yID0gaG9zdE5leHRTaWJsaW5nKG4xLmFuY2hvcik7XG4gICAgICByZW1vdmVTdGF0aWNOb2RlKG4xKTtcbiAgICAgIFtuMi5lbCwgbjIuYW5jaG9yXSA9IGhvc3RJbnNlcnRTdGF0aWNDb250ZW50KFxuICAgICAgICBuMi5jaGlsZHJlbixcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICBhbmNob3IsXG4gICAgICAgIG5hbWVzcGFjZVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbjIuZWwgPSBuMS5lbDtcbiAgICAgIG4yLmFuY2hvciA9IG4xLmFuY2hvcjtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG1vdmVTdGF0aWNOb2RlID0gKHsgZWwsIGFuY2hvciB9LCBjb250YWluZXIsIG5leHRTaWJsaW5nKSA9PiB7XG4gICAgbGV0IG5leHQ7XG4gICAgd2hpbGUgKGVsICYmIGVsICE9PSBhbmNob3IpIHtcbiAgICAgIG5leHQgPSBob3N0TmV4dFNpYmxpbmcoZWwpO1xuICAgICAgaG9zdEluc2VydChlbCwgY29udGFpbmVyLCBuZXh0U2libGluZyk7XG4gICAgICBlbCA9IG5leHQ7XG4gICAgfVxuICAgIGhvc3RJbnNlcnQoYW5jaG9yLCBjb250YWluZXIsIG5leHRTaWJsaW5nKTtcbiAgfTtcbiAgY29uc3QgcmVtb3ZlU3RhdGljTm9kZSA9ICh7IGVsLCBhbmNob3IgfSkgPT4ge1xuICAgIGxldCBuZXh0O1xuICAgIHdoaWxlIChlbCAmJiBlbCAhPT0gYW5jaG9yKSB7XG4gICAgICBuZXh0ID0gaG9zdE5leHRTaWJsaW5nKGVsKTtcbiAgICAgIGhvc3RSZW1vdmUoZWwpO1xuICAgICAgZWwgPSBuZXh0O1xuICAgIH1cbiAgICBob3N0UmVtb3ZlKGFuY2hvcik7XG4gIH07XG4gIGNvbnN0IHByb2Nlc3NFbGVtZW50ID0gKG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIG5hbWVzcGFjZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpID0+IHtcbiAgICBpZiAobjIudHlwZSA9PT0gXCJzdmdcIikge1xuICAgICAgbmFtZXNwYWNlID0gXCJzdmdcIjtcbiAgICB9IGVsc2UgaWYgKG4yLnR5cGUgPT09IFwibWF0aFwiKSB7XG4gICAgICBuYW1lc3BhY2UgPSBcIm1hdGhtbFwiO1xuICAgIH1cbiAgICBpZiAobjEgPT0gbnVsbCkge1xuICAgICAgbW91bnRFbGVtZW50KFxuICAgICAgICBuMixcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICBhbmNob3IsXG4gICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGNoRWxlbWVudChcbiAgICAgICAgbjEsXG4gICAgICAgIG4yLFxuICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgb3B0aW1pemVkXG4gICAgICApO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgbW91bnRFbGVtZW50ID0gKHZub2RlLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgbmFtZXNwYWNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCkgPT4ge1xuICAgIGxldCBlbDtcbiAgICBsZXQgdm5vZGVIb29rO1xuICAgIGNvbnN0IHsgcHJvcHMsIHNoYXBlRmxhZywgdHJhbnNpdGlvbiwgZGlycyB9ID0gdm5vZGU7XG4gICAgZWwgPSB2bm9kZS5lbCA9IGhvc3RDcmVhdGVFbGVtZW50KFxuICAgICAgdm5vZGUudHlwZSxcbiAgICAgIG5hbWVzcGFjZSxcbiAgICAgIHByb3BzICYmIHByb3BzLmlzLFxuICAgICAgcHJvcHNcbiAgICApO1xuICAgIGlmIChzaGFwZUZsYWcgJiA4KSB7XG4gICAgICBob3N0U2V0RWxlbWVudFRleHQoZWwsIHZub2RlLmNoaWxkcmVuKTtcbiAgICB9IGVsc2UgaWYgKHNoYXBlRmxhZyAmIDE2KSB7XG4gICAgICBtb3VudENoaWxkcmVuKFxuICAgICAgICB2bm9kZS5jaGlsZHJlbixcbiAgICAgICAgZWwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgIHJlc29sdmVDaGlsZHJlbk5hbWVzcGFjZSh2bm9kZSwgbmFtZXNwYWNlKSxcbiAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkaXJzKSB7XG4gICAgICBpbnZva2VEaXJlY3RpdmVIb29rKHZub2RlLCBudWxsLCBwYXJlbnRDb21wb25lbnQsIFwiY3JlYXRlZFwiKTtcbiAgICB9XG4gICAgc2V0U2NvcGVJZChlbCwgdm5vZGUsIHZub2RlLnNjb3BlSWQsIHNsb3RTY29wZUlkcywgcGFyZW50Q29tcG9uZW50KTtcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XG4gICAgICAgIGlmIChrZXkgIT09IFwidmFsdWVcIiAmJiAhaXNSZXNlcnZlZFByb3Aoa2V5KSkge1xuICAgICAgICAgIGhvc3RQYXRjaFByb3AoXG4gICAgICAgICAgICBlbCxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBwcm9wc1trZXldLFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgdm5vZGUuY2hpbGRyZW4sXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgIHVubW91bnRDaGlsZHJlblxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChcInZhbHVlXCIgaW4gcHJvcHMpIHtcbiAgICAgICAgaG9zdFBhdGNoUHJvcChlbCwgXCJ2YWx1ZVwiLCBudWxsLCBwcm9wcy52YWx1ZSwgbmFtZXNwYWNlKTtcbiAgICAgIH1cbiAgICAgIGlmICh2bm9kZUhvb2sgPSBwcm9wcy5vblZub2RlQmVmb3JlTW91bnQpIHtcbiAgICAgICAgaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgcGFyZW50Q29tcG9uZW50LCB2bm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsLCBcIl9fdm5vZGVcIiwge1xuICAgICAgICB2YWx1ZTogdm5vZGUsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbCwgXCJfX3Z1ZVBhcmVudENvbXBvbmVudFwiLCB7XG4gICAgICAgIHZhbHVlOiBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGRpcnMpIHtcbiAgICAgIGludm9rZURpcmVjdGl2ZUhvb2sodm5vZGUsIG51bGwsIHBhcmVudENvbXBvbmVudCwgXCJiZWZvcmVNb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgbmVlZENhbGxUcmFuc2l0aW9uSG9va3MgPSBuZWVkVHJhbnNpdGlvbihwYXJlbnRTdXNwZW5zZSwgdHJhbnNpdGlvbik7XG4gICAgaWYgKG5lZWRDYWxsVHJhbnNpdGlvbkhvb2tzKSB7XG4gICAgICB0cmFuc2l0aW9uLmJlZm9yZUVudGVyKGVsKTtcbiAgICB9XG4gICAgaG9zdEluc2VydChlbCwgY29udGFpbmVyLCBhbmNob3IpO1xuICAgIGlmICgodm5vZGVIb29rID0gcHJvcHMgJiYgcHJvcHMub25Wbm9kZU1vdW50ZWQpIHx8IG5lZWRDYWxsVHJhbnNpdGlvbkhvb2tzIHx8IGRpcnMpIHtcbiAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHZub2RlSG9vayAmJiBpbnZva2VWTm9kZUhvb2sodm5vZGVIb29rLCBwYXJlbnRDb21wb25lbnQsIHZub2RlKTtcbiAgICAgICAgbmVlZENhbGxUcmFuc2l0aW9uSG9va3MgJiYgdHJhbnNpdGlvbi5lbnRlcihlbCk7XG4gICAgICAgIGRpcnMgJiYgaW52b2tlRGlyZWN0aXZlSG9vayh2bm9kZSwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBcIm1vdW50ZWRcIik7XG4gICAgICB9LCBwYXJlbnRTdXNwZW5zZSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBzZXRTY29wZUlkID0gKGVsLCB2bm9kZSwgc2NvcGVJZCwgc2xvdFNjb3BlSWRzLCBwYXJlbnRDb21wb25lbnQpID0+IHtcbiAgICBpZiAoc2NvcGVJZCkge1xuICAgICAgaG9zdFNldFNjb3BlSWQoZWwsIHNjb3BlSWQpO1xuICAgIH1cbiAgICBpZiAoc2xvdFNjb3BlSWRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsb3RTY29wZUlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBob3N0U2V0U2NvcGVJZChlbCwgc2xvdFNjb3BlSWRzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhcmVudENvbXBvbmVudCkge1xuICAgICAgbGV0IHN1YlRyZWUgPSBwYXJlbnRDb21wb25lbnQuc3ViVHJlZTtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHN1YlRyZWUucGF0Y2hGbGFnID4gMCAmJiBzdWJUcmVlLnBhdGNoRmxhZyAmIDIwNDgpIHtcbiAgICAgICAgc3ViVHJlZSA9IGZpbHRlclNpbmdsZVJvb3Qoc3ViVHJlZS5jaGlsZHJlbikgfHwgc3ViVHJlZTtcbiAgICAgIH1cbiAgICAgIGlmICh2bm9kZSA9PT0gc3ViVHJlZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRWTm9kZSA9IHBhcmVudENvbXBvbmVudC52bm9kZTtcbiAgICAgICAgc2V0U2NvcGVJZChcbiAgICAgICAgICBlbCxcbiAgICAgICAgICBwYXJlbnRWTm9kZSxcbiAgICAgICAgICBwYXJlbnRWTm9kZS5zY29wZUlkLFxuICAgICAgICAgIHBhcmVudFZOb2RlLnNsb3RTY29wZUlkcyxcbiAgICAgICAgICBwYXJlbnRDb21wb25lbnQucGFyZW50XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBtb3VudENoaWxkcmVuID0gKGNoaWxkcmVuLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgbmFtZXNwYWNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCwgc3RhcnQgPSAwKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV0gPSBvcHRpbWl6ZWQgPyBjbG9uZUlmTW91bnRlZChjaGlsZHJlbltpXSkgOiBub3JtYWxpemVWTm9kZShjaGlsZHJlbltpXSk7XG4gICAgICBwYXRjaChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY2hpbGQsXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgYW5jaG9yLFxuICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgb3B0aW1pemVkXG4gICAgICApO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcGF0Y2hFbGVtZW50ID0gKG4xLCBuMiwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgbmFtZXNwYWNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbjIuZWwgPSBuMS5lbDtcbiAgICBsZXQgeyBwYXRjaEZsYWcsIGR5bmFtaWNDaGlsZHJlbiwgZGlycyB9ID0gbjI7XG4gICAgcGF0Y2hGbGFnIHw9IG4xLnBhdGNoRmxhZyAmIDE2O1xuICAgIGNvbnN0IG9sZFByb3BzID0gbjEucHJvcHMgfHwgRU1QVFlfT0JKO1xuICAgIGNvbnN0IG5ld1Byb3BzID0gbjIucHJvcHMgfHwgRU1QVFlfT0JKO1xuICAgIGxldCB2bm9kZUhvb2s7XG4gICAgcGFyZW50Q29tcG9uZW50ICYmIHRvZ2dsZVJlY3Vyc2UocGFyZW50Q29tcG9uZW50LCBmYWxzZSk7XG4gICAgaWYgKHZub2RlSG9vayA9IG5ld1Byb3BzLm9uVm5vZGVCZWZvcmVVcGRhdGUpIHtcbiAgICAgIGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudENvbXBvbmVudCwgbjIsIG4xKTtcbiAgICB9XG4gICAgaWYgKGRpcnMpIHtcbiAgICAgIGludm9rZURpcmVjdGl2ZUhvb2sobjIsIG4xLCBwYXJlbnRDb21wb25lbnQsIFwiYmVmb3JlVXBkYXRlXCIpO1xuICAgIH1cbiAgICBwYXJlbnRDb21wb25lbnQgJiYgdG9nZ2xlUmVjdXJzZShwYXJlbnRDb21wb25lbnQsIHRydWUpO1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGlzSG1yVXBkYXRpbmcpIHtcbiAgICAgIHBhdGNoRmxhZyA9IDA7XG4gICAgICBvcHRpbWl6ZWQgPSBmYWxzZTtcbiAgICAgIGR5bmFtaWNDaGlsZHJlbiA9IG51bGw7XG4gICAgfVxuICAgIGlmIChkeW5hbWljQ2hpbGRyZW4pIHtcbiAgICAgIHBhdGNoQmxvY2tDaGlsZHJlbihcbiAgICAgICAgbjEuZHluYW1pY0NoaWxkcmVuLFxuICAgICAgICBkeW5hbWljQ2hpbGRyZW4sXG4gICAgICAgIGVsLFxuICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICByZXNvbHZlQ2hpbGRyZW5OYW1lc3BhY2UobjIsIG5hbWVzcGFjZSksXG4gICAgICAgIHNsb3RTY29wZUlkc1xuICAgICAgKTtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgIHRyYXZlcnNlU3RhdGljQ2hpbGRyZW4objEsIG4yKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFvcHRpbWl6ZWQpIHtcbiAgICAgIHBhdGNoQ2hpbGRyZW4oXG4gICAgICAgIG4xLFxuICAgICAgICBuMixcbiAgICAgICAgZWwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgIHJlc29sdmVDaGlsZHJlbk5hbWVzcGFjZShuMiwgbmFtZXNwYWNlKSxcbiAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHBhdGNoRmxhZyA+IDApIHtcbiAgICAgIGlmIChwYXRjaEZsYWcgJiAxNikge1xuICAgICAgICBwYXRjaFByb3BzKFxuICAgICAgICAgIGVsLFxuICAgICAgICAgIG4yLFxuICAgICAgICAgIG9sZFByb3BzLFxuICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICBuYW1lc3BhY2VcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwYXRjaEZsYWcgJiAyKSB7XG4gICAgICAgICAgaWYgKG9sZFByb3BzLmNsYXNzICE9PSBuZXdQcm9wcy5jbGFzcykge1xuICAgICAgICAgICAgaG9zdFBhdGNoUHJvcChlbCwgXCJjbGFzc1wiLCBudWxsLCBuZXdQcm9wcy5jbGFzcywgbmFtZXNwYWNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGNoRmxhZyAmIDQpIHtcbiAgICAgICAgICBob3N0UGF0Y2hQcm9wKGVsLCBcInN0eWxlXCIsIG9sZFByb3BzLnN0eWxlLCBuZXdQcm9wcy5zdHlsZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0Y2hGbGFnICYgOCkge1xuICAgICAgICAgIGNvbnN0IHByb3BzVG9VcGRhdGUgPSBuMi5keW5hbWljUHJvcHM7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wc1RvVXBkYXRlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBwcm9wc1RvVXBkYXRlW2ldO1xuICAgICAgICAgICAgY29uc3QgcHJldiA9IG9sZFByb3BzW2tleV07XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gbmV3UHJvcHNba2V5XTtcbiAgICAgICAgICAgIGlmIChuZXh0ICE9PSBwcmV2IHx8IGtleSA9PT0gXCJ2YWx1ZVwiKSB7XG4gICAgICAgICAgICAgIGhvc3RQYXRjaFByb3AoXG4gICAgICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHByZXYsXG4gICAgICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgICAgICAgbjEuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgICAgICAgIHVubW91bnRDaGlsZHJlblxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBhdGNoRmxhZyAmIDEpIHtcbiAgICAgICAgaWYgKG4xLmNoaWxkcmVuICE9PSBuMi5jaGlsZHJlbikge1xuICAgICAgICAgIGhvc3RTZXRFbGVtZW50VGV4dChlbCwgbjIuY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghb3B0aW1pemVkICYmIGR5bmFtaWNDaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICBwYXRjaFByb3BzKFxuICAgICAgICBlbCxcbiAgICAgICAgbjIsXG4gICAgICAgIG9sZFByb3BzLFxuICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgbmFtZXNwYWNlXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoKHZub2RlSG9vayA9IG5ld1Byb3BzLm9uVm5vZGVVcGRhdGVkKSB8fCBkaXJzKSB7XG4gICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2bm9kZUhvb2sgJiYgaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgcGFyZW50Q29tcG9uZW50LCBuMiwgbjEpO1xuICAgICAgICBkaXJzICYmIGludm9rZURpcmVjdGl2ZUhvb2sobjIsIG4xLCBwYXJlbnRDb21wb25lbnQsIFwidXBkYXRlZFwiKTtcbiAgICAgIH0sIHBhcmVudFN1c3BlbnNlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHBhdGNoQmxvY2tDaGlsZHJlbiA9IChvbGRDaGlsZHJlbiwgbmV3Q2hpbGRyZW4sIGZhbGxiYWNrQ29udGFpbmVyLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBuYW1lc3BhY2UsIHNsb3RTY29wZUlkcykgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5baV07XG4gICAgICBjb25zdCBuZXdWTm9kZSA9IG5ld0NoaWxkcmVuW2ldO1xuICAgICAgY29uc3QgY29udGFpbmVyID0gKFxuICAgICAgICAvLyBvbGRWTm9kZSBtYXkgYmUgYW4gZXJyb3JlZCBhc3luYyBzZXR1cCgpIGNvbXBvbmVudCBpbnNpZGUgU3VzcGVuc2VcbiAgICAgICAgLy8gd2hpY2ggd2lsbCBub3QgaGF2ZSBhIG1vdW50ZWQgZWxlbWVudFxuICAgICAgICBvbGRWTm9kZS5lbCAmJiAvLyAtIEluIHRoZSBjYXNlIG9mIGEgRnJhZ21lbnQsIHdlIG5lZWQgdG8gcHJvdmlkZSB0aGUgYWN0dWFsIHBhcmVudFxuICAgICAgICAvLyBvZiB0aGUgRnJhZ21lbnQgaXRzZWxmIHNvIGl0IGNhbiBtb3ZlIGl0cyBjaGlsZHJlbi5cbiAgICAgICAgKG9sZFZOb2RlLnR5cGUgPT09IEZyYWdtZW50IHx8IC8vIC0gSW4gdGhlIGNhc2Ugb2YgZGlmZmVyZW50IG5vZGVzLCB0aGVyZSBpcyBnb2luZyB0byBiZSBhIHJlcGxhY2VtZW50XG4gICAgICAgIC8vIHdoaWNoIGFsc28gcmVxdWlyZXMgdGhlIGNvcnJlY3QgcGFyZW50IGNvbnRhaW5lclxuICAgICAgICAhaXNTYW1lVk5vZGVUeXBlKG9sZFZOb2RlLCBuZXdWTm9kZSkgfHwgLy8gLSBJbiB0aGUgY2FzZSBvZiBhIGNvbXBvbmVudCwgaXQgY291bGQgY29udGFpbiBhbnl0aGluZy5cbiAgICAgICAgb2xkVk5vZGUuc2hhcGVGbGFnICYgKDYgfCA2NCkpID8gaG9zdFBhcmVudE5vZGUob2xkVk5vZGUuZWwpIDogKFxuICAgICAgICAgIC8vIEluIG90aGVyIGNhc2VzLCB0aGUgcGFyZW50IGNvbnRhaW5lciBpcyBub3QgYWN0dWFsbHkgdXNlZCBzbyB3ZVxuICAgICAgICAgIC8vIGp1c3QgcGFzcyB0aGUgYmxvY2sgZWxlbWVudCBoZXJlIHRvIGF2b2lkIGEgRE9NIHBhcmVudE5vZGUgY2FsbC5cbiAgICAgICAgICBmYWxsYmFja0NvbnRhaW5lclxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcGF0Y2goXG4gICAgICAgIG9sZFZOb2RlLFxuICAgICAgICBuZXdWTm9kZSxcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICBudWxsLFxuICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHBhdGNoUHJvcHMgPSAoZWwsIHZub2RlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIG5hbWVzcGFjZSkgPT4ge1xuICAgIGlmIChvbGRQcm9wcyAhPT0gbmV3UHJvcHMpIHtcbiAgICAgIGlmIChvbGRQcm9wcyAhPT0gRU1QVFlfT0JKKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9sZFByb3BzKSB7XG4gICAgICAgICAgaWYgKCFpc1Jlc2VydmVkUHJvcChrZXkpICYmICEoa2V5IGluIG5ld1Byb3BzKSkge1xuICAgICAgICAgICAgaG9zdFBhdGNoUHJvcChcbiAgICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgb2xkUHJvcHNba2V5XSxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgICB2bm9kZS5jaGlsZHJlbixcbiAgICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgICAgdW5tb3VudENoaWxkcmVuXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmV3UHJvcHMpIHtcbiAgICAgICAgaWYgKGlzUmVzZXJ2ZWRQcm9wKGtleSkpXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IG5leHQgPSBuZXdQcm9wc1trZXldO1xuICAgICAgICBjb25zdCBwcmV2ID0gb2xkUHJvcHNba2V5XTtcbiAgICAgICAgaWYgKG5leHQgIT09IHByZXYgJiYga2V5ICE9PSBcInZhbHVlXCIpIHtcbiAgICAgICAgICBob3N0UGF0Y2hQcm9wKFxuICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBwcmV2LFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIHZub2RlLmNoaWxkcmVuLFxuICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgICB1bm1vdW50Q2hpbGRyZW5cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIG5ld1Byb3BzKSB7XG4gICAgICAgIGhvc3RQYXRjaFByb3AoZWwsIFwidmFsdWVcIiwgb2xkUHJvcHMudmFsdWUsIG5ld1Byb3BzLnZhbHVlLCBuYW1lc3BhY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgcHJvY2Vzc0ZyYWdtZW50ID0gKG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIG5hbWVzcGFjZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQpID0+IHtcbiAgICBjb25zdCBmcmFnbWVudFN0YXJ0QW5jaG9yID0gbjIuZWwgPSBuMSA/IG4xLmVsIDogaG9zdENyZWF0ZVRleHQoXCJcIik7XG4gICAgY29uc3QgZnJhZ21lbnRFbmRBbmNob3IgPSBuMi5hbmNob3IgPSBuMSA/IG4xLmFuY2hvciA6IGhvc3RDcmVhdGVUZXh0KFwiXCIpO1xuICAgIGxldCB7IHBhdGNoRmxhZywgZHluYW1pY0NoaWxkcmVuLCBzbG90U2NvcGVJZHM6IGZyYWdtZW50U2xvdFNjb3BlSWRzIH0gPSBuMjtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAvLyAjNTUyMyBkZXYgcm9vdCBmcmFnbWVudCBtYXkgaW5oZXJpdCBkaXJlY3RpdmVzXG4gICAgKGlzSG1yVXBkYXRpbmcgfHwgcGF0Y2hGbGFnICYgMjA0OCkpIHtcbiAgICAgIHBhdGNoRmxhZyA9IDA7XG4gICAgICBvcHRpbWl6ZWQgPSBmYWxzZTtcbiAgICAgIGR5bmFtaWNDaGlsZHJlbiA9IG51bGw7XG4gICAgfVxuICAgIGlmIChmcmFnbWVudFNsb3RTY29wZUlkcykge1xuICAgICAgc2xvdFNjb3BlSWRzID0gc2xvdFNjb3BlSWRzID8gc2xvdFNjb3BlSWRzLmNvbmNhdChmcmFnbWVudFNsb3RTY29wZUlkcykgOiBmcmFnbWVudFNsb3RTY29wZUlkcztcbiAgICB9XG4gICAgaWYgKG4xID09IG51bGwpIHtcbiAgICAgIGhvc3RJbnNlcnQoZnJhZ21lbnRTdGFydEFuY2hvciwgY29udGFpbmVyLCBhbmNob3IpO1xuICAgICAgaG9zdEluc2VydChmcmFnbWVudEVuZEFuY2hvciwgY29udGFpbmVyLCBhbmNob3IpO1xuICAgICAgbW91bnRDaGlsZHJlbihcbiAgICAgICAgLy8gIzEwMDA3XG4gICAgICAgIC8vIHN1Y2ggZnJhZ21lbnQgbGlrZSBgPD48Lz5gIHdpbGwgYmUgY29tcGlsZWQgaW50b1xuICAgICAgICAvLyBhIGZyYWdtZW50IHdoaWNoIGRvZXNuJ3QgaGF2ZSBhIGNoaWxkcmVuLlxuICAgICAgICAvLyBJbiB0aGlzIGNhc2UgZmFsbGJhY2sgdG8gYW4gZW1wdHkgYXJyYXlcbiAgICAgICAgbjIuY2hpbGRyZW4gfHwgW10sXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgZnJhZ21lbnRFbmRBbmNob3IsXG4gICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwYXRjaEZsYWcgPiAwICYmIHBhdGNoRmxhZyAmIDY0ICYmIGR5bmFtaWNDaGlsZHJlbiAmJiAvLyAjMjcxNSB0aGUgcHJldmlvdXMgZnJhZ21lbnQgY291bGQndmUgYmVlbiBhIEJBSUxlZCBvbmUgYXMgYSByZXN1bHRcbiAgICAgIC8vIG9mIHJlbmRlclNsb3QoKSB3aXRoIG5vIHZhbGlkIGNoaWxkcmVuXG4gICAgICBuMS5keW5hbWljQ2hpbGRyZW4pIHtcbiAgICAgICAgcGF0Y2hCbG9ja0NoaWxkcmVuKFxuICAgICAgICAgIG4xLmR5bmFtaWNDaGlsZHJlbixcbiAgICAgICAgICBkeW5hbWljQ2hpbGRyZW4sXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgc2xvdFNjb3BlSWRzXG4gICAgICAgICk7XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgdHJhdmVyc2VTdGF0aWNDaGlsZHJlbihuMSwgbjIpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIC8vICMyMDgwIGlmIHRoZSBzdGFibGUgZnJhZ21lbnQgaGFzIGEga2V5LCBpdCdzIGEgPHRlbXBsYXRlIHYtZm9yPiB0aGF0IG1heVxuICAgICAgICAgIC8vICBnZXQgbW92ZWQgYXJvdW5kLiBNYWtlIHN1cmUgYWxsIHJvb3QgbGV2ZWwgdm5vZGVzIGluaGVyaXQgZWwuXG4gICAgICAgICAgLy8gIzIxMzQgb3IgaWYgaXQncyBhIGNvbXBvbmVudCByb290LCBpdCBtYXkgYWxzbyBnZXQgbW92ZWQgYXJvdW5kXG4gICAgICAgICAgLy8gYXMgdGhlIGNvbXBvbmVudCBpcyBiZWluZyBtb3ZlZC5cbiAgICAgICAgICBuMi5rZXkgIT0gbnVsbCB8fCBwYXJlbnRDb21wb25lbnQgJiYgbjIgPT09IHBhcmVudENvbXBvbmVudC5zdWJUcmVlXG4gICAgICAgICkge1xuICAgICAgICAgIHRyYXZlcnNlU3RhdGljQ2hpbGRyZW4oXG4gICAgICAgICAgICBuMSxcbiAgICAgICAgICAgIG4yLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgLyogc2hhbGxvdyAqL1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdGNoQ2hpbGRyZW4oXG4gICAgICAgICAgbjEsXG4gICAgICAgICAgbjIsXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIGZyYWdtZW50RW5kQW5jaG9yLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgcHJvY2Vzc0NvbXBvbmVudCA9IChuMSwgbjIsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBuYW1lc3BhY2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKSA9PiB7XG4gICAgbjIuc2xvdFNjb3BlSWRzID0gc2xvdFNjb3BlSWRzO1xuICAgIGlmIChuMSA9PSBudWxsKSB7XG4gICAgICBpZiAobjIuc2hhcGVGbGFnICYgNTEyKSB7XG4gICAgICAgIHBhcmVudENvbXBvbmVudC5jdHguYWN0aXZhdGUoXG4gICAgICAgICAgbjIsXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtb3VudENvbXBvbmVudChcbiAgICAgICAgICBuMixcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwZGF0ZUNvbXBvbmVudChuMSwgbjIsIG9wdGltaXplZCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBtb3VudENvbXBvbmVudCA9IChpbml0aWFsVk5vZGUsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBuYW1lc3BhY2UsIG9wdGltaXplZCkgPT4ge1xuICAgIGNvbnN0IGluc3RhbmNlID0gKGluaXRpYWxWTm9kZS5jb21wb25lbnQgPSBjcmVhdGVDb21wb25lbnRJbnN0YW5jZShcbiAgICAgIGluaXRpYWxWTm9kZSxcbiAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgIHBhcmVudFN1c3BlbnNlXG4gICAgKSk7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgaW5zdGFuY2UudHlwZS5fX2htcklkKSB7XG4gICAgICByZWdpc3RlckhNUihpbnN0YW5jZSk7XG4gICAgfVxuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICBwdXNoV2FybmluZ0NvbnRleHQoaW5pdGlhbFZOb2RlKTtcbiAgICAgIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgYG1vdW50YCk7XG4gICAgfVxuICAgIGlmIChpc0tlZXBBbGl2ZShpbml0aWFsVk5vZGUpKSB7XG4gICAgICBpbnN0YW5jZS5jdHgucmVuZGVyZXIgPSBpbnRlcm5hbHM7XG4gICAgfVxuICAgIHtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgYGluaXRgKTtcbiAgICAgIH1cbiAgICAgIHNldHVwQ29tcG9uZW50KGluc3RhbmNlKTtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGBpbml0YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpbnN0YW5jZS5hc3luY0RlcCkge1xuICAgICAgcGFyZW50U3VzcGVuc2UgJiYgcGFyZW50U3VzcGVuc2UucmVnaXN0ZXJEZXAoaW5zdGFuY2UsIHNldHVwUmVuZGVyRWZmZWN0KTtcbiAgICAgIGlmICghaW5pdGlhbFZOb2RlLmVsKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gaW5zdGFuY2Uuc3ViVHJlZSA9IGNyZWF0ZVZOb2RlKENvbW1lbnQpO1xuICAgICAgICBwcm9jZXNzQ29tbWVudE5vZGUobnVsbCwgcGxhY2Vob2xkZXIsIGNvbnRhaW5lciwgYW5jaG9yKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2V0dXBSZW5kZXJFZmZlY3QoXG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBpbml0aWFsVk5vZGUsXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgYW5jaG9yLFxuICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICBwb3BXYXJuaW5nQ29udGV4dCgpO1xuICAgICAgZW5kTWVhc3VyZShpbnN0YW5jZSwgYG1vdW50YCk7XG4gICAgfVxuICB9O1xuICBjb25zdCB1cGRhdGVDb21wb25lbnQgPSAobjEsIG4yLCBvcHRpbWl6ZWQpID0+IHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG4yLmNvbXBvbmVudCA9IG4xLmNvbXBvbmVudDtcbiAgICBpZiAoc2hvdWxkVXBkYXRlQ29tcG9uZW50KG4xLCBuMiwgb3B0aW1pemVkKSkge1xuICAgICAgaWYgKGluc3RhbmNlLmFzeW5jRGVwICYmICFpbnN0YW5jZS5hc3luY1Jlc29sdmVkKSB7XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgcHVzaFdhcm5pbmdDb250ZXh0KG4yKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVDb21wb25lbnRQcmVSZW5kZXIoaW5zdGFuY2UsIG4yLCBvcHRpbWl6ZWQpO1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIHBvcFdhcm5pbmdDb250ZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5zdGFuY2UubmV4dCA9IG4yO1xuICAgICAgICBpbnZhbGlkYXRlSm9iKGluc3RhbmNlLnVwZGF0ZSk7XG4gICAgICAgIGluc3RhbmNlLmVmZmVjdC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuMi5lbCA9IG4xLmVsO1xuICAgICAgaW5zdGFuY2Uudm5vZGUgPSBuMjtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHNldHVwUmVuZGVyRWZmZWN0ID0gKGluc3RhbmNlLCBpbml0aWFsVk5vZGUsIGNvbnRhaW5lciwgYW5jaG9yLCBwYXJlbnRTdXNwZW5zZSwgbmFtZXNwYWNlLCBvcHRpbWl6ZWQpID0+IHtcbiAgICBjb25zdCBjb21wb25lbnRVcGRhdGVGbiA9ICgpID0+IHtcbiAgICAgIGlmICghaW5zdGFuY2UuaXNNb3VudGVkKSB7XG4gICAgICAgIGxldCB2bm9kZUhvb2s7XG4gICAgICAgIGNvbnN0IHsgZWwsIHByb3BzIH0gPSBpbml0aWFsVk5vZGU7XG4gICAgICAgIGNvbnN0IHsgYm0sIG0sIHBhcmVudCB9ID0gaW5zdGFuY2U7XG4gICAgICAgIGNvbnN0IGlzQXN5bmNXcmFwcGVyVk5vZGUgPSBpc0FzeW5jV3JhcHBlcihpbml0aWFsVk5vZGUpO1xuICAgICAgICB0b2dnbGVSZWN1cnNlKGluc3RhbmNlLCBmYWxzZSk7XG4gICAgICAgIGlmIChibSkge1xuICAgICAgICAgIGludm9rZUFycmF5Rm5zKGJtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzQXN5bmNXcmFwcGVyVk5vZGUgJiYgKHZub2RlSG9vayA9IHByb3BzICYmIHByb3BzLm9uVm5vZGVCZWZvcmVNb3VudCkpIHtcbiAgICAgICAgICBpbnZva2VWTm9kZUhvb2sodm5vZGVIb29rLCBwYXJlbnQsIGluaXRpYWxWTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9nZ2xlUmVjdXJzZShpbnN0YW5jZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChlbCAmJiBoeWRyYXRlTm9kZSkge1xuICAgICAgICAgIGNvbnN0IGh5ZHJhdGVTdWJUcmVlID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICAgICAgc3RhcnRNZWFzdXJlKGluc3RhbmNlLCBgcmVuZGVyYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnN0YW5jZS5zdWJUcmVlID0gcmVuZGVyQ29tcG9uZW50Um9vdChpbnN0YW5jZSk7XG4gICAgICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgICAgICBlbmRNZWFzdXJlKGluc3RhbmNlLCBgcmVuZGVyYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgICAgICBzdGFydE1lYXN1cmUoaW5zdGFuY2UsIGBoeWRyYXRlYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoeWRyYXRlTm9kZShcbiAgICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICAgIGluc3RhbmNlLnN1YlRyZWUsXG4gICAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGBoeWRyYXRlYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoaXNBc3luY1dyYXBwZXJWTm9kZSkge1xuICAgICAgICAgICAgaW5pdGlhbFZOb2RlLnR5cGUuX19hc3luY0xvYWRlcigpLnRoZW4oXG4gICAgICAgICAgICAgIC8vIG5vdGU6IHdlIGFyZSBtb3ZpbmcgdGhlIHJlbmRlciBjYWxsIGludG8gYW4gYXN5bmMgY2FsbGJhY2ssXG4gICAgICAgICAgICAgIC8vIHdoaWNoIG1lYW5zIGl0IHdvbid0IHRyYWNrIGRlcGVuZGVuY2llcyAtIGJ1dCBpdCdzIG9rIGJlY2F1c2VcbiAgICAgICAgICAgICAgLy8gYSBzZXJ2ZXItcmVuZGVyZWQgYXN5bmMgd3JhcHBlciBpcyBhbHJlYWR5IGluIHJlc29sdmVkIHN0YXRlXG4gICAgICAgICAgICAgIC8vIGFuZCBpdCB3aWxsIG5ldmVyIG5lZWQgdG8gY2hhbmdlLlxuICAgICAgICAgICAgICAoKSA9PiAhaW5zdGFuY2UuaXNVbm1vdW50ZWQgJiYgaHlkcmF0ZVN1YlRyZWUoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaHlkcmF0ZVN1YlRyZWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICAgIHN0YXJ0TWVhc3VyZShpbnN0YW5jZSwgYHJlbmRlcmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdWJUcmVlID0gaW5zdGFuY2Uuc3ViVHJlZSA9IHJlbmRlckNvbXBvbmVudFJvb3QoaW5zdGFuY2UpO1xuICAgICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgICBlbmRNZWFzdXJlKGluc3RhbmNlLCBgcmVuZGVyYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgICBzdGFydE1lYXN1cmUoaW5zdGFuY2UsIGBwYXRjaGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXRjaChcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBzdWJUcmVlLFxuICAgICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgIG5hbWVzcGFjZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGBwYXRjaGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbml0aWFsVk5vZGUuZWwgPSBzdWJUcmVlLmVsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtKSB7XG4gICAgICAgICAgcXVldWVQb3N0UmVuZGVyRWZmZWN0KG0sIHBhcmVudFN1c3BlbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzQXN5bmNXcmFwcGVyVk5vZGUgJiYgKHZub2RlSG9vayA9IHByb3BzICYmIHByb3BzLm9uVm5vZGVNb3VudGVkKSkge1xuICAgICAgICAgIGNvbnN0IHNjb3BlZEluaXRpYWxWTm9kZSA9IGluaXRpYWxWTm9kZTtcbiAgICAgICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiBpbnZva2VWTm9kZUhvb2sodm5vZGVIb29rLCBwYXJlbnQsIHNjb3BlZEluaXRpYWxWTm9kZSksXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluaXRpYWxWTm9kZS5zaGFwZUZsYWcgJiAyNTYgfHwgcGFyZW50ICYmIGlzQXN5bmNXcmFwcGVyKHBhcmVudC52bm9kZSkgJiYgcGFyZW50LnZub2RlLnNoYXBlRmxhZyAmIDI1Nikge1xuICAgICAgICAgIGluc3RhbmNlLmEgJiYgcXVldWVQb3N0UmVuZGVyRWZmZWN0KGluc3RhbmNlLmEsIHBhcmVudFN1c3BlbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZS5pc01vdW50ZWQgPSB0cnVlO1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcbiAgICAgICAgICBkZXZ0b29sc0NvbXBvbmVudEFkZGVkKGluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpbml0aWFsVk5vZGUgPSBjb250YWluZXIgPSBhbmNob3IgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHsgbmV4dCwgYnUsIHUsIHBhcmVudCwgdm5vZGUgfSA9IGluc3RhbmNlO1xuICAgICAgICB7XG4gICAgICAgICAgY29uc3Qgbm9uSHlkcmF0ZWRBc3luY1Jvb3QgPSBsb2NhdGVOb25IeWRyYXRlZEFzeW5jUm9vdChpbnN0YW5jZSk7XG4gICAgICAgICAgaWYgKG5vbkh5ZHJhdGVkQXN5bmNSb290KSB7XG4gICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICBuZXh0LmVsID0gdm5vZGUuZWw7XG4gICAgICAgICAgICAgIHVwZGF0ZUNvbXBvbmVudFByZVJlbmRlcihpbnN0YW5jZSwgbmV4dCwgb3B0aW1pemVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vbkh5ZHJhdGVkQXN5bmNSb290LmFzeW5jRGVwLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWluc3RhbmNlLmlzVW5tb3VudGVkKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50VXBkYXRlRm4oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBvcmlnaW5OZXh0ID0gbmV4dDtcbiAgICAgICAgbGV0IHZub2RlSG9vaztcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICBwdXNoV2FybmluZ0NvbnRleHQobmV4dCB8fCBpbnN0YW5jZS52bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9nZ2xlUmVjdXJzZShpbnN0YW5jZSwgZmFsc2UpO1xuICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgIG5leHQuZWwgPSB2bm9kZS5lbDtcbiAgICAgICAgICB1cGRhdGVDb21wb25lbnRQcmVSZW5kZXIoaW5zdGFuY2UsIG5leHQsIG9wdGltaXplZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dCA9IHZub2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidSkge1xuICAgICAgICAgIGludm9rZUFycmF5Rm5zKGJ1KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodm5vZGVIb29rID0gbmV4dC5wcm9wcyAmJiBuZXh0LnByb3BzLm9uVm5vZGVCZWZvcmVVcGRhdGUpIHtcbiAgICAgICAgICBpbnZva2VWTm9kZUhvb2sodm5vZGVIb29rLCBwYXJlbnQsIG5leHQsIHZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0b2dnbGVSZWN1cnNlKGluc3RhbmNlLCB0cnVlKTtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICBzdGFydE1lYXN1cmUoaW5zdGFuY2UsIGByZW5kZXJgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXh0VHJlZSA9IHJlbmRlckNvbXBvbmVudFJvb3QoaW5zdGFuY2UpO1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGByZW5kZXJgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2VHJlZSA9IGluc3RhbmNlLnN1YlRyZWU7XG4gICAgICAgIGluc3RhbmNlLnN1YlRyZWUgPSBuZXh0VHJlZTtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICBzdGFydE1lYXN1cmUoaW5zdGFuY2UsIGBwYXRjaGApO1xuICAgICAgICB9XG4gICAgICAgIHBhdGNoKFxuICAgICAgICAgIHByZXZUcmVlLFxuICAgICAgICAgIG5leHRUcmVlLFxuICAgICAgICAgIC8vIHBhcmVudCBtYXkgaGF2ZSBjaGFuZ2VkIGlmIGl0J3MgaW4gYSB0ZWxlcG9ydFxuICAgICAgICAgIGhvc3RQYXJlbnROb2RlKHByZXZUcmVlLmVsKSxcbiAgICAgICAgICAvLyBhbmNob3IgbWF5IGhhdmUgY2hhbmdlZCBpZiBpdCdzIGluIGEgZnJhZ21lbnRcbiAgICAgICAgICBnZXROZXh0SG9zdE5vZGUocHJldlRyZWUpLFxuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgIG5hbWVzcGFjZVxuICAgICAgICApO1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGBwYXRjaGApO1xuICAgICAgICB9XG4gICAgICAgIG5leHQuZWwgPSBuZXh0VHJlZS5lbDtcbiAgICAgICAgaWYgKG9yaWdpbk5leHQgPT09IG51bGwpIHtcbiAgICAgICAgICB1cGRhdGVIT0NIb3N0RWwoaW5zdGFuY2UsIG5leHRUcmVlLmVsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodSkge1xuICAgICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCh1LCBwYXJlbnRTdXNwZW5zZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZub2RlSG9vayA9IG5leHQucHJvcHMgJiYgbmV4dC5wcm9wcy5vblZub2RlVXBkYXRlZCkge1xuICAgICAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdChcbiAgICAgICAgICAgICgpID0+IGludm9rZVZOb2RlSG9vayh2bm9kZUhvb2ssIHBhcmVudCwgbmV4dCwgdm5vZGUpLFxuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2VcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xuICAgICAgICAgIGRldnRvb2xzQ29tcG9uZW50VXBkYXRlZChpbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICBwb3BXYXJuaW5nQ29udGV4dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBlZmZlY3QgPSBpbnN0YW5jZS5lZmZlY3QgPSBuZXcgUmVhY3RpdmVFZmZlY3QoXG4gICAgICBjb21wb25lbnRVcGRhdGVGbixcbiAgICAgIE5PT1AsXG4gICAgICAoKSA9PiBxdWV1ZUpvYih1cGRhdGUpLFxuICAgICAgaW5zdGFuY2Uuc2NvcGVcbiAgICAgIC8vIHRyYWNrIGl0IGluIGNvbXBvbmVudCdzIGVmZmVjdCBzY29wZVxuICAgICk7XG4gICAgY29uc3QgdXBkYXRlID0gaW5zdGFuY2UudXBkYXRlID0gKCkgPT4ge1xuICAgICAgaWYgKGVmZmVjdC5kaXJ0eSkge1xuICAgICAgICBlZmZlY3QucnVuKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB1cGRhdGUuaWQgPSBpbnN0YW5jZS51aWQ7XG4gICAgdG9nZ2xlUmVjdXJzZShpbnN0YW5jZSwgdHJ1ZSk7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgIGVmZmVjdC5vblRyYWNrID0gaW5zdGFuY2UucnRjID8gKGUpID0+IGludm9rZUFycmF5Rm5zKGluc3RhbmNlLnJ0YywgZSkgOiB2b2lkIDA7XG4gICAgICBlZmZlY3Qub25UcmlnZ2VyID0gaW5zdGFuY2UucnRnID8gKGUpID0+IGludm9rZUFycmF5Rm5zKGluc3RhbmNlLnJ0ZywgZSkgOiB2b2lkIDA7XG4gICAgICB1cGRhdGUub3duZXJJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgIH1cbiAgICB1cGRhdGUoKTtcbiAgfTtcbiAgY29uc3QgdXBkYXRlQ29tcG9uZW50UHJlUmVuZGVyID0gKGluc3RhbmNlLCBuZXh0Vk5vZGUsIG9wdGltaXplZCkgPT4ge1xuICAgIG5leHRWTm9kZS5jb21wb25lbnQgPSBpbnN0YW5jZTtcbiAgICBjb25zdCBwcmV2UHJvcHMgPSBpbnN0YW5jZS52bm9kZS5wcm9wcztcbiAgICBpbnN0YW5jZS52bm9kZSA9IG5leHRWTm9kZTtcbiAgICBpbnN0YW5jZS5uZXh0ID0gbnVsbDtcbiAgICB1cGRhdGVQcm9wcyhpbnN0YW5jZSwgbmV4dFZOb2RlLnByb3BzLCBwcmV2UHJvcHMsIG9wdGltaXplZCk7XG4gICAgdXBkYXRlU2xvdHMoaW5zdGFuY2UsIG5leHRWTm9kZS5jaGlsZHJlbiwgb3B0aW1pemVkKTtcbiAgICBwYXVzZVRyYWNraW5nKCk7XG4gICAgZmx1c2hQcmVGbHVzaENicyhpbnN0YW5jZSk7XG4gICAgcmVzZXRUcmFja2luZygpO1xuICB9O1xuICBjb25zdCBwYXRjaENoaWxkcmVuID0gKG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIG5hbWVzcGFjZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IGMxID0gbjEgJiYgbjEuY2hpbGRyZW47XG4gICAgY29uc3QgcHJldlNoYXBlRmxhZyA9IG4xID8gbjEuc2hhcGVGbGFnIDogMDtcbiAgICBjb25zdCBjMiA9IG4yLmNoaWxkcmVuO1xuICAgIGNvbnN0IHsgcGF0Y2hGbGFnLCBzaGFwZUZsYWcgfSA9IG4yO1xuICAgIGlmIChwYXRjaEZsYWcgPiAwKSB7XG4gICAgICBpZiAocGF0Y2hGbGFnICYgMTI4KSB7XG4gICAgICAgIHBhdGNoS2V5ZWRDaGlsZHJlbihcbiAgICAgICAgICBjMSxcbiAgICAgICAgICBjMixcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKHBhdGNoRmxhZyAmIDI1Nikge1xuICAgICAgICBwYXRjaFVua2V5ZWRDaGlsZHJlbihcbiAgICAgICAgICBjMSxcbiAgICAgICAgICBjMixcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzaGFwZUZsYWcgJiA4KSB7XG4gICAgICBpZiAocHJldlNoYXBlRmxhZyAmIDE2KSB7XG4gICAgICAgIHVubW91bnRDaGlsZHJlbihjMSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSk7XG4gICAgICB9XG4gICAgICBpZiAoYzIgIT09IGMxKSB7XG4gICAgICAgIGhvc3RTZXRFbGVtZW50VGV4dChjb250YWluZXIsIGMyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByZXZTaGFwZUZsYWcgJiAxNikge1xuICAgICAgICBpZiAoc2hhcGVGbGFnICYgMTYpIHtcbiAgICAgICAgICBwYXRjaEtleWVkQ2hpbGRyZW4oXG4gICAgICAgICAgICBjMSxcbiAgICAgICAgICAgIGMyLFxuICAgICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVubW91bnRDaGlsZHJlbihjMSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcmV2U2hhcGVGbGFnICYgOCkge1xuICAgICAgICAgIGhvc3RTZXRFbGVtZW50VGV4dChjb250YWluZXIsIFwiXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaGFwZUZsYWcgJiAxNikge1xuICAgICAgICAgIG1vdW50Q2hpbGRyZW4oXG4gICAgICAgICAgICBjMixcbiAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgcGF0Y2hVbmtleWVkQ2hpbGRyZW4gPSAoYzEsIGMyLCBjb250YWluZXIsIGFuY2hvciwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgbmFtZXNwYWNlLCBzbG90U2NvcGVJZHMsIG9wdGltaXplZCkgPT4ge1xuICAgIGMxID0gYzEgfHwgRU1QVFlfQVJSO1xuICAgIGMyID0gYzIgfHwgRU1QVFlfQVJSO1xuICAgIGNvbnN0IG9sZExlbmd0aCA9IGMxLmxlbmd0aDtcbiAgICBjb25zdCBuZXdMZW5ndGggPSBjMi5sZW5ndGg7XG4gICAgY29uc3QgY29tbW9uTGVuZ3RoID0gTWF0aC5taW4ob2xkTGVuZ3RoLCBuZXdMZW5ndGgpO1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBjb21tb25MZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbmV4dENoaWxkID0gYzJbaV0gPSBvcHRpbWl6ZWQgPyBjbG9uZUlmTW91bnRlZChjMltpXSkgOiBub3JtYWxpemVWTm9kZShjMltpXSk7XG4gICAgICBwYXRjaChcbiAgICAgICAgYzFbaV0sXG4gICAgICAgIG5leHRDaGlsZCxcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICBudWxsLFxuICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgb3B0aW1pemVkXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob2xkTGVuZ3RoID4gbmV3TGVuZ3RoKSB7XG4gICAgICB1bm1vdW50Q2hpbGRyZW4oXG4gICAgICAgIGMxLFxuICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICB0cnVlLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgY29tbW9uTGVuZ3RoXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBtb3VudENoaWxkcmVuKFxuICAgICAgICBjMixcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICBhbmNob3IsXG4gICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICBvcHRpbWl6ZWQsXG4gICAgICAgIGNvbW1vbkxlbmd0aFxuICAgICAgKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHBhdGNoS2V5ZWRDaGlsZHJlbiA9IChjMSwgYzIsIGNvbnRhaW5lciwgcGFyZW50QW5jaG9yLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBuYW1lc3BhY2UsIHNsb3RTY29wZUlkcywgb3B0aW1pemVkKSA9PiB7XG4gICAgbGV0IGkgPSAwO1xuICAgIGNvbnN0IGwyID0gYzIubGVuZ3RoO1xuICAgIGxldCBlMSA9IGMxLmxlbmd0aCAtIDE7XG4gICAgbGV0IGUyID0gbDIgLSAxO1xuICAgIHdoaWxlIChpIDw9IGUxICYmIGkgPD0gZTIpIHtcbiAgICAgIGNvbnN0IG4xID0gYzFbaV07XG4gICAgICBjb25zdCBuMiA9IGMyW2ldID0gb3B0aW1pemVkID8gY2xvbmVJZk1vdW50ZWQoYzJbaV0pIDogbm9ybWFsaXplVk5vZGUoYzJbaV0pO1xuICAgICAgaWYgKGlzU2FtZVZOb2RlVHlwZShuMSwgbjIpKSB7XG4gICAgICAgIHBhdGNoKFxuICAgICAgICAgIG4xLFxuICAgICAgICAgIG4yLFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgfVxuICAgIHdoaWxlIChpIDw9IGUxICYmIGkgPD0gZTIpIHtcbiAgICAgIGNvbnN0IG4xID0gYzFbZTFdO1xuICAgICAgY29uc3QgbjIgPSBjMltlMl0gPSBvcHRpbWl6ZWQgPyBjbG9uZUlmTW91bnRlZChjMltlMl0pIDogbm9ybWFsaXplVk5vZGUoYzJbZTJdKTtcbiAgICAgIGlmIChpc1NhbWVWTm9kZVR5cGUobjEsIG4yKSkge1xuICAgICAgICBwYXRjaChcbiAgICAgICAgICBuMSxcbiAgICAgICAgICBuMixcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZTEtLTtcbiAgICAgIGUyLS07XG4gICAgfVxuICAgIGlmIChpID4gZTEpIHtcbiAgICAgIGlmIChpIDw9IGUyKSB7XG4gICAgICAgIGNvbnN0IG5leHRQb3MgPSBlMiArIDE7XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IG5leHRQb3MgPCBsMiA/IGMyW25leHRQb3NdLmVsIDogcGFyZW50QW5jaG9yO1xuICAgICAgICB3aGlsZSAoaSA8PSBlMikge1xuICAgICAgICAgIHBhdGNoKFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGMyW2ldID0gb3B0aW1pemVkID8gY2xvbmVJZk1vdW50ZWQoYzJbaV0pIDogbm9ybWFsaXplVk5vZGUoYzJbaV0pLFxuICAgICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaSA+IGUyKSB7XG4gICAgICB3aGlsZSAoaSA8PSBlMSkge1xuICAgICAgICB1bm1vdW50KGMxW2ldLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCB0cnVlKTtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzMSA9IGk7XG4gICAgICBjb25zdCBzMiA9IGk7XG4gICAgICBjb25zdCBrZXlUb05ld0luZGV4TWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgIGZvciAoaSA9IHMyOyBpIDw9IGUyOyBpKyspIHtcbiAgICAgICAgY29uc3QgbmV4dENoaWxkID0gYzJbaV0gPSBvcHRpbWl6ZWQgPyBjbG9uZUlmTW91bnRlZChjMltpXSkgOiBub3JtYWxpemVWTm9kZShjMltpXSk7XG4gICAgICAgIGlmIChuZXh0Q2hpbGQua2V5ICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBrZXlUb05ld0luZGV4TWFwLmhhcyhuZXh0Q2hpbGQua2V5KSkge1xuICAgICAgICAgICAgd2FybiQxKFxuICAgICAgICAgICAgICBgRHVwbGljYXRlIGtleXMgZm91bmQgZHVyaW5nIHVwZGF0ZTpgLFxuICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShuZXh0Q2hpbGQua2V5KSxcbiAgICAgICAgICAgICAgYE1ha2Ugc3VyZSBrZXlzIGFyZSB1bmlxdWUuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAga2V5VG9OZXdJbmRleE1hcC5zZXQobmV4dENoaWxkLmtleSwgaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBqO1xuICAgICAgbGV0IHBhdGNoZWQgPSAwO1xuICAgICAgY29uc3QgdG9CZVBhdGNoZWQgPSBlMiAtIHMyICsgMTtcbiAgICAgIGxldCBtb3ZlZCA9IGZhbHNlO1xuICAgICAgbGV0IG1heE5ld0luZGV4U29GYXIgPSAwO1xuICAgICAgY29uc3QgbmV3SW5kZXhUb09sZEluZGV4TWFwID0gbmV3IEFycmF5KHRvQmVQYXRjaGVkKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0b0JlUGF0Y2hlZDsgaSsrKVxuICAgICAgICBuZXdJbmRleFRvT2xkSW5kZXhNYXBbaV0gPSAwO1xuICAgICAgZm9yIChpID0gczE7IGkgPD0gZTE7IGkrKykge1xuICAgICAgICBjb25zdCBwcmV2Q2hpbGQgPSBjMVtpXTtcbiAgICAgICAgaWYgKHBhdGNoZWQgPj0gdG9CZVBhdGNoZWQpIHtcbiAgICAgICAgICB1bm1vdW50KHByZXZDaGlsZCwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgdHJ1ZSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld0luZGV4O1xuICAgICAgICBpZiAocHJldkNoaWxkLmtleSAhPSBudWxsKSB7XG4gICAgICAgICAgbmV3SW5kZXggPSBrZXlUb05ld0luZGV4TWFwLmdldChwcmV2Q2hpbGQua2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGogPSBzMjsgaiA8PSBlMjsgaisrKSB7XG4gICAgICAgICAgICBpZiAobmV3SW5kZXhUb09sZEluZGV4TWFwW2ogLSBzMl0gPT09IDAgJiYgaXNTYW1lVk5vZGVUeXBlKHByZXZDaGlsZCwgYzJbal0pKSB7XG4gICAgICAgICAgICAgIG5ld0luZGV4ID0gajtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdJbmRleCA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgdW5tb3VudChwcmV2Q2hpbGQsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0luZGV4VG9PbGRJbmRleE1hcFtuZXdJbmRleCAtIHMyXSA9IGkgKyAxO1xuICAgICAgICAgIGlmIChuZXdJbmRleCA+PSBtYXhOZXdJbmRleFNvRmFyKSB7XG4gICAgICAgICAgICBtYXhOZXdJbmRleFNvRmFyID0gbmV3SW5kZXg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGF0Y2goXG4gICAgICAgICAgICBwcmV2Q2hpbGQsXG4gICAgICAgICAgICBjMltuZXdJbmRleF0sXG4gICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgICBzbG90U2NvcGVJZHMsXG4gICAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHBhdGNoZWQrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgaW5jcmVhc2luZ05ld0luZGV4U2VxdWVuY2UgPSBtb3ZlZCA/IGdldFNlcXVlbmNlKG5ld0luZGV4VG9PbGRJbmRleE1hcCkgOiBFTVBUWV9BUlI7XG4gICAgICBqID0gaW5jcmVhc2luZ05ld0luZGV4U2VxdWVuY2UubGVuZ3RoIC0gMTtcbiAgICAgIGZvciAoaSA9IHRvQmVQYXRjaGVkIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gczIgKyBpO1xuICAgICAgICBjb25zdCBuZXh0Q2hpbGQgPSBjMltuZXh0SW5kZXhdO1xuICAgICAgICBjb25zdCBhbmNob3IgPSBuZXh0SW5kZXggKyAxIDwgbDIgPyBjMltuZXh0SW5kZXggKyAxXS5lbCA6IHBhcmVudEFuY2hvcjtcbiAgICAgICAgaWYgKG5ld0luZGV4VG9PbGRJbmRleE1hcFtpXSA9PT0gMCkge1xuICAgICAgICAgIHBhdGNoKFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIG5leHRDaGlsZCxcbiAgICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgICAgb3B0aW1pemVkXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChtb3ZlZCkge1xuICAgICAgICAgIGlmIChqIDwgMCB8fCBpICE9PSBpbmNyZWFzaW5nTmV3SW5kZXhTZXF1ZW5jZVtqXSkge1xuICAgICAgICAgICAgbW92ZShuZXh0Q2hpbGQsIGNvbnRhaW5lciwgYW5jaG9yLCAyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgai0tO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgbW92ZSA9ICh2bm9kZSwgY29udGFpbmVyLCBhbmNob3IsIG1vdmVUeXBlLCBwYXJlbnRTdXNwZW5zZSA9IG51bGwpID0+IHtcbiAgICBjb25zdCB7IGVsLCB0eXBlLCB0cmFuc2l0aW9uLCBjaGlsZHJlbiwgc2hhcGVGbGFnIH0gPSB2bm9kZTtcbiAgICBpZiAoc2hhcGVGbGFnICYgNikge1xuICAgICAgbW92ZSh2bm9kZS5jb21wb25lbnQuc3ViVHJlZSwgY29udGFpbmVyLCBhbmNob3IsIG1vdmVUeXBlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNoYXBlRmxhZyAmIDEyOCkge1xuICAgICAgdm5vZGUuc3VzcGVuc2UubW92ZShjb250YWluZXIsIGFuY2hvciwgbW92ZVR5cGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc2hhcGVGbGFnICYgNjQpIHtcbiAgICAgIHR5cGUubW92ZSh2bm9kZSwgY29udGFpbmVyLCBhbmNob3IsIGludGVybmFscyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBGcmFnbWVudCkge1xuICAgICAgaG9zdEluc2VydChlbCwgY29udGFpbmVyLCBhbmNob3IpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBtb3ZlKGNoaWxkcmVuW2ldLCBjb250YWluZXIsIGFuY2hvciwgbW92ZVR5cGUpO1xuICAgICAgfVxuICAgICAgaG9zdEluc2VydCh2bm9kZS5hbmNob3IsIGNvbnRhaW5lciwgYW5jaG9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09IFN0YXRpYykge1xuICAgICAgbW92ZVN0YXRpY05vZGUodm5vZGUsIGNvbnRhaW5lciwgYW5jaG9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmVlZFRyYW5zaXRpb24yID0gbW92ZVR5cGUgIT09IDIgJiYgc2hhcGVGbGFnICYgMSAmJiB0cmFuc2l0aW9uO1xuICAgIGlmIChuZWVkVHJhbnNpdGlvbjIpIHtcbiAgICAgIGlmIChtb3ZlVHlwZSA9PT0gMCkge1xuICAgICAgICB0cmFuc2l0aW9uLmJlZm9yZUVudGVyKGVsKTtcbiAgICAgICAgaG9zdEluc2VydChlbCwgY29udGFpbmVyLCBhbmNob3IpO1xuICAgICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoKCkgPT4gdHJhbnNpdGlvbi5lbnRlcihlbCksIHBhcmVudFN1c3BlbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGVhdmUsIGRlbGF5TGVhdmUsIGFmdGVyTGVhdmUgfSA9IHRyYW5zaXRpb247XG4gICAgICAgIGNvbnN0IHJlbW92ZTIgPSAoKSA9PiBob3N0SW5zZXJ0KGVsLCBjb250YWluZXIsIGFuY2hvcik7XG4gICAgICAgIGNvbnN0IHBlcmZvcm1MZWF2ZSA9ICgpID0+IHtcbiAgICAgICAgICBsZWF2ZShlbCwgKCkgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlMigpO1xuICAgICAgICAgICAgYWZ0ZXJMZWF2ZSAmJiBhZnRlckxlYXZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChkZWxheUxlYXZlKSB7XG4gICAgICAgICAgZGVsYXlMZWF2ZShlbCwgcmVtb3ZlMiwgcGVyZm9ybUxlYXZlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZXJmb3JtTGVhdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBob3N0SW5zZXJ0KGVsLCBjb250YWluZXIsIGFuY2hvcik7XG4gICAgfVxuICB9O1xuICBjb25zdCB1bm1vdW50ID0gKHZub2RlLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBkb1JlbW92ZSA9IGZhbHNlLCBvcHRpbWl6ZWQgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIHJlZixcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZHluYW1pY0NoaWxkcmVuLFxuICAgICAgc2hhcGVGbGFnLFxuICAgICAgcGF0Y2hGbGFnLFxuICAgICAgZGlyc1xuICAgIH0gPSB2bm9kZTtcbiAgICBpZiAocmVmICE9IG51bGwpIHtcbiAgICAgIHNldFJlZihyZWYsIG51bGwsIHBhcmVudFN1c3BlbnNlLCB2bm9kZSwgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChzaGFwZUZsYWcgJiAyNTYpIHtcbiAgICAgIHBhcmVudENvbXBvbmVudC5jdHguZGVhY3RpdmF0ZSh2bm9kZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNob3VsZEludm9rZURpcnMgPSBzaGFwZUZsYWcgJiAxICYmIGRpcnM7XG4gICAgY29uc3Qgc2hvdWxkSW52b2tlVm5vZGVIb29rID0gIWlzQXN5bmNXcmFwcGVyKHZub2RlKTtcbiAgICBsZXQgdm5vZGVIb29rO1xuICAgIGlmIChzaG91bGRJbnZva2VWbm9kZUhvb2sgJiYgKHZub2RlSG9vayA9IHByb3BzICYmIHByb3BzLm9uVm5vZGVCZWZvcmVVbm1vdW50KSkge1xuICAgICAgaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgcGFyZW50Q29tcG9uZW50LCB2bm9kZSk7XG4gICAgfVxuICAgIGlmIChzaGFwZUZsYWcgJiA2KSB7XG4gICAgICB1bm1vdW50Q29tcG9uZW50KHZub2RlLmNvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIGRvUmVtb3ZlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNoYXBlRmxhZyAmIDEyOCkge1xuICAgICAgICB2bm9kZS5zdXNwZW5zZS51bm1vdW50KHBhcmVudFN1c3BlbnNlLCBkb1JlbW92ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRJbnZva2VEaXJzKSB7XG4gICAgICAgIGludm9rZURpcmVjdGl2ZUhvb2sodm5vZGUsIG51bGwsIHBhcmVudENvbXBvbmVudCwgXCJiZWZvcmVVbm1vdW50XCIpO1xuICAgICAgfVxuICAgICAgaWYgKHNoYXBlRmxhZyAmIDY0KSB7XG4gICAgICAgIHZub2RlLnR5cGUucmVtb3ZlKFxuICAgICAgICAgIHZub2RlLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICBvcHRpbWl6ZWQsXG4gICAgICAgICAgaW50ZXJuYWxzLFxuICAgICAgICAgIGRvUmVtb3ZlXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGR5bmFtaWNDaGlsZHJlbiAmJiAvLyAjMTE1MzogZmFzdCBwYXRoIHNob3VsZCBub3QgYmUgdGFrZW4gZm9yIG5vbi1zdGFibGUgKHYtZm9yKSBmcmFnbWVudHNcbiAgICAgICh0eXBlICE9PSBGcmFnbWVudCB8fCBwYXRjaEZsYWcgPiAwICYmIHBhdGNoRmxhZyAmIDY0KSkge1xuICAgICAgICB1bm1vdW50Q2hpbGRyZW4oXG4gICAgICAgICAgZHluYW1pY0NoaWxkcmVuLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZyYWdtZW50ICYmIHBhdGNoRmxhZyAmICgxMjggfCAyNTYpIHx8ICFvcHRpbWl6ZWQgJiYgc2hhcGVGbGFnICYgMTYpIHtcbiAgICAgICAgdW5tb3VudENoaWxkcmVuKGNoaWxkcmVuLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlKTtcbiAgICAgIH1cbiAgICAgIGlmIChkb1JlbW92ZSkge1xuICAgICAgICByZW1vdmUodm5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2hvdWxkSW52b2tlVm5vZGVIb29rICYmICh2bm9kZUhvb2sgPSBwcm9wcyAmJiBwcm9wcy5vblZub2RlVW5tb3VudGVkKSB8fCBzaG91bGRJbnZva2VEaXJzKSB7XG4gICAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2bm9kZUhvb2sgJiYgaW52b2tlVk5vZGVIb29rKHZub2RlSG9vaywgcGFyZW50Q29tcG9uZW50LCB2bm9kZSk7XG4gICAgICAgIHNob3VsZEludm9rZURpcnMgJiYgaW52b2tlRGlyZWN0aXZlSG9vayh2bm9kZSwgbnVsbCwgcGFyZW50Q29tcG9uZW50LCBcInVubW91bnRlZFwiKTtcbiAgICAgIH0sIHBhcmVudFN1c3BlbnNlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHJlbW92ZSA9ICh2bm9kZSkgPT4ge1xuICAgIGNvbnN0IHsgdHlwZSwgZWwsIGFuY2hvciwgdHJhbnNpdGlvbiB9ID0gdm5vZGU7XG4gICAgaWYgKHR5cGUgPT09IEZyYWdtZW50KSB7XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB2bm9kZS5wYXRjaEZsYWcgPiAwICYmIHZub2RlLnBhdGNoRmxhZyAmIDIwNDggJiYgdHJhbnNpdGlvbiAmJiAhdHJhbnNpdGlvbi5wZXJzaXN0ZWQpIHtcbiAgICAgICAgdm5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gQ29tbWVudCkge1xuICAgICAgICAgICAgaG9zdFJlbW92ZShjaGlsZC5lbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbW92ZShjaGlsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZUZyYWdtZW50KGVsLCBhbmNob3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gU3RhdGljKSB7XG4gICAgICByZW1vdmVTdGF0aWNOb2RlKHZub2RlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGVyZm9ybVJlbW92ZSA9ICgpID0+IHtcbiAgICAgIGhvc3RSZW1vdmUoZWwpO1xuICAgICAgaWYgKHRyYW5zaXRpb24gJiYgIXRyYW5zaXRpb24ucGVyc2lzdGVkICYmIHRyYW5zaXRpb24uYWZ0ZXJMZWF2ZSkge1xuICAgICAgICB0cmFuc2l0aW9uLmFmdGVyTGVhdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmICh2bm9kZS5zaGFwZUZsYWcgJiAxICYmIHRyYW5zaXRpb24gJiYgIXRyYW5zaXRpb24ucGVyc2lzdGVkKSB7XG4gICAgICBjb25zdCB7IGxlYXZlLCBkZWxheUxlYXZlIH0gPSB0cmFuc2l0aW9uO1xuICAgICAgY29uc3QgcGVyZm9ybUxlYXZlID0gKCkgPT4gbGVhdmUoZWwsIHBlcmZvcm1SZW1vdmUpO1xuICAgICAgaWYgKGRlbGF5TGVhdmUpIHtcbiAgICAgICAgZGVsYXlMZWF2ZSh2bm9kZS5lbCwgcGVyZm9ybVJlbW92ZSwgcGVyZm9ybUxlYXZlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlcmZvcm1MZWF2ZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZXJmb3JtUmVtb3ZlKCk7XG4gICAgfVxuICB9O1xuICBjb25zdCByZW1vdmVGcmFnbWVudCA9IChjdXIsIGVuZCkgPT4ge1xuICAgIGxldCBuZXh0O1xuICAgIHdoaWxlIChjdXIgIT09IGVuZCkge1xuICAgICAgbmV4dCA9IGhvc3ROZXh0U2libGluZyhjdXIpO1xuICAgICAgaG9zdFJlbW92ZShjdXIpO1xuICAgICAgY3VyID0gbmV4dDtcbiAgICB9XG4gICAgaG9zdFJlbW92ZShlbmQpO1xuICB9O1xuICBjb25zdCB1bm1vdW50Q29tcG9uZW50ID0gKGluc3RhbmNlLCBwYXJlbnRTdXNwZW5zZSwgZG9SZW1vdmUpID0+IHtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBpbnN0YW5jZS50eXBlLl9faG1ySWQpIHtcbiAgICAgIHVucmVnaXN0ZXJITVIoaW5zdGFuY2UpO1xuICAgIH1cbiAgICBjb25zdCB7IGJ1bSwgc2NvcGUsIHVwZGF0ZSwgc3ViVHJlZSwgdW0gfSA9IGluc3RhbmNlO1xuICAgIGlmIChidW0pIHtcbiAgICAgIGludm9rZUFycmF5Rm5zKGJ1bSk7XG4gICAgfVxuICAgIHNjb3BlLnN0b3AoKTtcbiAgICBpZiAodXBkYXRlKSB7XG4gICAgICB1cGRhdGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICB1bm1vdW50KHN1YlRyZWUsIGluc3RhbmNlLCBwYXJlbnRTdXNwZW5zZSwgZG9SZW1vdmUpO1xuICAgIH1cbiAgICBpZiAodW0pIHtcbiAgICAgIHF1ZXVlUG9zdFJlbmRlckVmZmVjdCh1bSwgcGFyZW50U3VzcGVuc2UpO1xuICAgIH1cbiAgICBxdWV1ZVBvc3RSZW5kZXJFZmZlY3QoKCkgPT4ge1xuICAgICAgaW5zdGFuY2UuaXNVbm1vdW50ZWQgPSB0cnVlO1xuICAgIH0sIHBhcmVudFN1c3BlbnNlKTtcbiAgICBpZiAocGFyZW50U3VzcGVuc2UgJiYgcGFyZW50U3VzcGVuc2UucGVuZGluZ0JyYW5jaCAmJiAhcGFyZW50U3VzcGVuc2UuaXNVbm1vdW50ZWQgJiYgaW5zdGFuY2UuYXN5bmNEZXAgJiYgIWluc3RhbmNlLmFzeW5jUmVzb2x2ZWQgJiYgaW5zdGFuY2Uuc3VzcGVuc2VJZCA9PT0gcGFyZW50U3VzcGVuc2UucGVuZGluZ0lkKSB7XG4gICAgICBwYXJlbnRTdXNwZW5zZS5kZXBzLS07XG4gICAgICBpZiAocGFyZW50U3VzcGVuc2UuZGVwcyA9PT0gMCkge1xuICAgICAgICBwYXJlbnRTdXNwZW5zZS5yZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHx8IF9fVlVFX1BST0RfREVWVE9PTFNfXykge1xuICAgICAgZGV2dG9vbHNDb21wb25lbnRSZW1vdmVkKGluc3RhbmNlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHVubW91bnRDaGlsZHJlbiA9IChjaGlsZHJlbiwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgZG9SZW1vdmUgPSBmYWxzZSwgb3B0aW1pemVkID0gZmFsc2UsIHN0YXJ0ID0gMCkgPT4ge1xuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB1bm1vdW50KGNoaWxkcmVuW2ldLCBwYXJlbnRDb21wb25lbnQsIHBhcmVudFN1c3BlbnNlLCBkb1JlbW92ZSwgb3B0aW1pemVkKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGdldE5leHRIb3N0Tm9kZSA9ICh2bm9kZSkgPT4ge1xuICAgIGlmICh2bm9kZS5zaGFwZUZsYWcgJiA2KSB7XG4gICAgICByZXR1cm4gZ2V0TmV4dEhvc3ROb2RlKHZub2RlLmNvbXBvbmVudC5zdWJUcmVlKTtcbiAgICB9XG4gICAgaWYgKHZub2RlLnNoYXBlRmxhZyAmIDEyOCkge1xuICAgICAgcmV0dXJuIHZub2RlLnN1c3BlbnNlLm5leHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGhvc3ROZXh0U2libGluZyh2bm9kZS5hbmNob3IgfHwgdm5vZGUuZWwpO1xuICB9O1xuICBsZXQgaXNGbHVzaGluZyA9IGZhbHNlO1xuICBjb25zdCByZW5kZXIgPSAodm5vZGUsIGNvbnRhaW5lciwgbmFtZXNwYWNlKSA9PiB7XG4gICAgaWYgKHZub2RlID09IG51bGwpIHtcbiAgICAgIGlmIChjb250YWluZXIuX3Zub2RlKSB7XG4gICAgICAgIHVubW91bnQoY29udGFpbmVyLl92bm9kZSwgbnVsbCwgbnVsbCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGNoKFxuICAgICAgICBjb250YWluZXIuX3Zub2RlIHx8IG51bGwsXG4gICAgICAgIHZub2RlLFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG5hbWVzcGFjZVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFpc0ZsdXNoaW5nKSB7XG4gICAgICBpc0ZsdXNoaW5nID0gdHJ1ZTtcbiAgICAgIGZsdXNoUHJlRmx1c2hDYnMoKTtcbiAgICAgIGZsdXNoUG9zdEZsdXNoQ2JzKCk7XG4gICAgICBpc0ZsdXNoaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIGNvbnRhaW5lci5fdm5vZGUgPSB2bm9kZTtcbiAgfTtcbiAgY29uc3QgaW50ZXJuYWxzID0ge1xuICAgIHA6IHBhdGNoLFxuICAgIHVtOiB1bm1vdW50LFxuICAgIG06IG1vdmUsXG4gICAgcjogcmVtb3ZlLFxuICAgIG10OiBtb3VudENvbXBvbmVudCxcbiAgICBtYzogbW91bnRDaGlsZHJlbixcbiAgICBwYzogcGF0Y2hDaGlsZHJlbixcbiAgICBwYmM6IHBhdGNoQmxvY2tDaGlsZHJlbixcbiAgICBuOiBnZXROZXh0SG9zdE5vZGUsXG4gICAgbzogb3B0aW9uc1xuICB9O1xuICBsZXQgaHlkcmF0ZTtcbiAgbGV0IGh5ZHJhdGVOb2RlO1xuICBpZiAoY3JlYXRlSHlkcmF0aW9uRm5zKSB7XG4gICAgW2h5ZHJhdGUsIGh5ZHJhdGVOb2RlXSA9IGNyZWF0ZUh5ZHJhdGlvbkZucyhcbiAgICAgIGludGVybmFsc1xuICAgICk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICByZW5kZXIsXG4gICAgaHlkcmF0ZSxcbiAgICBjcmVhdGVBcHA6IGNyZWF0ZUFwcEFQSShyZW5kZXIsIGh5ZHJhdGUpXG4gIH07XG59XG5mdW5jdGlvbiByZXNvbHZlQ2hpbGRyZW5OYW1lc3BhY2UoeyB0eXBlLCBwcm9wcyB9LCBjdXJyZW50TmFtZXNwYWNlKSB7XG4gIHJldHVybiBjdXJyZW50TmFtZXNwYWNlID09PSBcInN2Z1wiICYmIHR5cGUgPT09IFwiZm9yZWlnbk9iamVjdFwiIHx8IGN1cnJlbnROYW1lc3BhY2UgPT09IFwibWF0aG1sXCIgJiYgdHlwZSA9PT0gXCJhbm5vdGF0aW9uLXhtbFwiICYmIHByb3BzICYmIHByb3BzLmVuY29kaW5nICYmIHByb3BzLmVuY29kaW5nLmluY2x1ZGVzKFwiaHRtbFwiKSA/IHZvaWQgMCA6IGN1cnJlbnROYW1lc3BhY2U7XG59XG5mdW5jdGlvbiB0b2dnbGVSZWN1cnNlKHsgZWZmZWN0LCB1cGRhdGUgfSwgYWxsb3dlZCkge1xuICBlZmZlY3QuYWxsb3dSZWN1cnNlID0gdXBkYXRlLmFsbG93UmVjdXJzZSA9IGFsbG93ZWQ7XG59XG5mdW5jdGlvbiBuZWVkVHJhbnNpdGlvbihwYXJlbnRTdXNwZW5zZSwgdHJhbnNpdGlvbikge1xuICByZXR1cm4gKCFwYXJlbnRTdXNwZW5zZSB8fCBwYXJlbnRTdXNwZW5zZSAmJiAhcGFyZW50U3VzcGVuc2UucGVuZGluZ0JyYW5jaCkgJiYgdHJhbnNpdGlvbiAmJiAhdHJhbnNpdGlvbi5wZXJzaXN0ZWQ7XG59XG5mdW5jdGlvbiB0cmF2ZXJzZVN0YXRpY0NoaWxkcmVuKG4xLCBuMiwgc2hhbGxvdyA9IGZhbHNlKSB7XG4gIGNvbnN0IGNoMSA9IG4xLmNoaWxkcmVuO1xuICBjb25zdCBjaDIgPSBuMi5jaGlsZHJlbjtcbiAgaWYgKGlzQXJyYXkoY2gxKSAmJiBpc0FycmF5KGNoMikpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoMS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYzEgPSBjaDFbaV07XG4gICAgICBsZXQgYzIgPSBjaDJbaV07XG4gICAgICBpZiAoYzIuc2hhcGVGbGFnICYgMSAmJiAhYzIuZHluYW1pY0NoaWxkcmVuKSB7XG4gICAgICAgIGlmIChjMi5wYXRjaEZsYWcgPD0gMCB8fCBjMi5wYXRjaEZsYWcgPT09IDMyKSB7XG4gICAgICAgICAgYzIgPSBjaDJbaV0gPSBjbG9uZUlmTW91bnRlZChjaDJbaV0pO1xuICAgICAgICAgIGMyLmVsID0gYzEuZWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzaGFsbG93KVxuICAgICAgICAgIHRyYXZlcnNlU3RhdGljQ2hpbGRyZW4oYzEsIGMyKTtcbiAgICAgIH1cbiAgICAgIGlmIChjMi50eXBlID09PSBUZXh0KSB7XG4gICAgICAgIGMyLmVsID0gYzEuZWw7XG4gICAgICB9XG4gICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBjMi50eXBlID09PSBDb21tZW50ICYmICFjMi5lbCkge1xuICAgICAgICBjMi5lbCA9IGMxLmVsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0U2VxdWVuY2UoYXJyKSB7XG4gIGNvbnN0IHAgPSBhcnIuc2xpY2UoKTtcbiAgY29uc3QgcmVzdWx0ID0gWzBdO1xuICBsZXQgaSwgaiwgdSwgdiwgYztcbiAgY29uc3QgbGVuID0gYXJyLmxlbmd0aDtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgYXJySSA9IGFycltpXTtcbiAgICBpZiAoYXJySSAhPT0gMCkge1xuICAgICAgaiA9IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XG4gICAgICBpZiAoYXJyW2pdIDwgYXJySSkge1xuICAgICAgICBwW2ldID0gajtcbiAgICAgICAgcmVzdWx0LnB1c2goaSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdSA9IDA7XG4gICAgICB2ID0gcmVzdWx0Lmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAodSA8IHYpIHtcbiAgICAgICAgYyA9IHUgKyB2ID4+IDE7XG4gICAgICAgIGlmIChhcnJbcmVzdWx0W2NdXSA8IGFyckkpIHtcbiAgICAgICAgICB1ID0gYyArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdiA9IGM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChhcnJJIDwgYXJyW3Jlc3VsdFt1XV0pIHtcbiAgICAgICAgaWYgKHUgPiAwKSB7XG4gICAgICAgICAgcFtpXSA9IHJlc3VsdFt1IC0gMV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0W3VdID0gaTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdSA9IHJlc3VsdC5sZW5ndGg7XG4gIHYgPSByZXN1bHRbdSAtIDFdO1xuICB3aGlsZSAodS0tID4gMCkge1xuICAgIHJlc3VsdFt1XSA9IHY7XG4gICAgdiA9IHBbdl07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGxvY2F0ZU5vbkh5ZHJhdGVkQXN5bmNSb290KGluc3RhbmNlKSB7XG4gIGNvbnN0IHN1YkNvbXBvbmVudCA9IGluc3RhbmNlLnN1YlRyZWUuY29tcG9uZW50O1xuICBpZiAoc3ViQ29tcG9uZW50KSB7XG4gICAgaWYgKHN1YkNvbXBvbmVudC5hc3luY0RlcCAmJiAhc3ViQ29tcG9uZW50LmFzeW5jUmVzb2x2ZWQpIHtcbiAgICAgIHJldHVybiBzdWJDb21wb25lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBsb2NhdGVOb25IeWRyYXRlZEFzeW5jUm9vdChzdWJDb21wb25lbnQpO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBpc1RlbGVwb3J0ID0gKHR5cGUpID0+IHR5cGUuX19pc1RlbGVwb3J0O1xuY29uc3QgaXNUZWxlcG9ydERpc2FibGVkID0gKHByb3BzKSA9PiBwcm9wcyAmJiAocHJvcHMuZGlzYWJsZWQgfHwgcHJvcHMuZGlzYWJsZWQgPT09IFwiXCIpO1xuY29uc3QgaXNUYXJnZXRTVkcgPSAodGFyZ2V0KSA9PiB0eXBlb2YgU1ZHRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0YXJnZXQgaW5zdGFuY2VvZiBTVkdFbGVtZW50O1xuY29uc3QgaXNUYXJnZXRNYXRoTUwgPSAodGFyZ2V0KSA9PiB0eXBlb2YgTWF0aE1MRWxlbWVudCA9PT0gXCJmdW5jdGlvblwiICYmIHRhcmdldCBpbnN0YW5jZW9mIE1hdGhNTEVsZW1lbnQ7XG5jb25zdCByZXNvbHZlVGFyZ2V0ID0gKHByb3BzLCBzZWxlY3QpID0+IHtcbiAgY29uc3QgdGFyZ2V0U2VsZWN0b3IgPSBwcm9wcyAmJiBwcm9wcy50bztcbiAgaWYgKGlzU3RyaW5nKHRhcmdldFNlbGVjdG9yKSkge1xuICAgIGlmICghc2VsZWN0KSB7XG4gICAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHdhcm4kMShcbiAgICAgICAgYEN1cnJlbnQgcmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBzdHJpbmcgdGFyZ2V0IGZvciBUZWxlcG9ydHMuIChtaXNzaW5nIHF1ZXJ5U2VsZWN0b3IgcmVuZGVyZXIgb3B0aW9uKWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gc2VsZWN0KHRhcmdldFNlbGVjdG9yKTtcbiAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgd2FybiQxKFxuICAgICAgICAgIGBGYWlsZWQgdG8gbG9jYXRlIFRlbGVwb3J0IHRhcmdldCB3aXRoIHNlbGVjdG9yIFwiJHt0YXJnZXRTZWxlY3Rvcn1cIi4gTm90ZSB0aGUgdGFyZ2V0IGVsZW1lbnQgbXVzdCBleGlzdCBiZWZvcmUgdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkIC0gaS5lLiB0aGUgdGFyZ2V0IGNhbm5vdCBiZSByZW5kZXJlZCBieSB0aGUgY29tcG9uZW50IGl0c2VsZiwgYW5kIGlkZWFsbHkgc2hvdWxkIGJlIG91dHNpZGUgb2YgdGhlIGVudGlyZSBWdWUgY29tcG9uZW50IHRyZWUuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIXRhcmdldFNlbGVjdG9yICYmICFpc1RlbGVwb3J0RGlzYWJsZWQocHJvcHMpKSB7XG4gICAgICB3YXJuJDEoYEludmFsaWQgVGVsZXBvcnQgdGFyZ2V0OiAke3RhcmdldFNlbGVjdG9yfWApO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0U2VsZWN0b3I7XG4gIH1cbn07XG5jb25zdCBUZWxlcG9ydEltcGwgPSB7XG4gIG5hbWU6IFwiVGVsZXBvcnRcIixcbiAgX19pc1RlbGVwb3J0OiB0cnVlLFxuICBwcm9jZXNzKG4xLCBuMiwgY29udGFpbmVyLCBhbmNob3IsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIG5hbWVzcGFjZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQsIGludGVybmFscykge1xuICAgIGNvbnN0IHtcbiAgICAgIG1jOiBtb3VudENoaWxkcmVuLFxuICAgICAgcGM6IHBhdGNoQ2hpbGRyZW4sXG4gICAgICBwYmM6IHBhdGNoQmxvY2tDaGlsZHJlbixcbiAgICAgIG86IHsgaW5zZXJ0LCBxdWVyeVNlbGVjdG9yLCBjcmVhdGVUZXh0LCBjcmVhdGVDb21tZW50IH1cbiAgICB9ID0gaW50ZXJuYWxzO1xuICAgIGNvbnN0IGRpc2FibGVkID0gaXNUZWxlcG9ydERpc2FibGVkKG4yLnByb3BzKTtcbiAgICBsZXQgeyBzaGFwZUZsYWcsIGNoaWxkcmVuLCBkeW5hbWljQ2hpbGRyZW4gfSA9IG4yO1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIGlzSG1yVXBkYXRpbmcpIHtcbiAgICAgIG9wdGltaXplZCA9IGZhbHNlO1xuICAgICAgZHluYW1pY0NoaWxkcmVuID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKG4xID09IG51bGwpIHtcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gbjIuZWwgPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gY3JlYXRlQ29tbWVudChcInRlbGVwb3J0IHN0YXJ0XCIpIDogY3JlYXRlVGV4dChcIlwiKTtcbiAgICAgIGNvbnN0IG1haW5BbmNob3IgPSBuMi5hbmNob3IgPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gY3JlYXRlQ29tbWVudChcInRlbGVwb3J0IGVuZFwiKSA6IGNyZWF0ZVRleHQoXCJcIik7XG4gICAgICBpbnNlcnQocGxhY2Vob2xkZXIsIGNvbnRhaW5lciwgYW5jaG9yKTtcbiAgICAgIGluc2VydChtYWluQW5jaG9yLCBjb250YWluZXIsIGFuY2hvcik7XG4gICAgICBjb25zdCB0YXJnZXQgPSBuMi50YXJnZXQgPSByZXNvbHZlVGFyZ2V0KG4yLnByb3BzLCBxdWVyeVNlbGVjdG9yKTtcbiAgICAgIGNvbnN0IHRhcmdldEFuY2hvciA9IG4yLnRhcmdldEFuY2hvciA9IGNyZWF0ZVRleHQoXCJcIik7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGluc2VydCh0YXJnZXRBbmNob3IsIHRhcmdldCk7XG4gICAgICAgIGlmIChuYW1lc3BhY2UgPT09IFwic3ZnXCIgfHwgaXNUYXJnZXRTVkcodGFyZ2V0KSkge1xuICAgICAgICAgIG5hbWVzcGFjZSA9IFwic3ZnXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobmFtZXNwYWNlID09PSBcIm1hdGhtbFwiIHx8IGlzVGFyZ2V0TWF0aE1MKHRhcmdldCkpIHtcbiAgICAgICAgICBuYW1lc3BhY2UgPSBcIm1hdGhtbFwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIWRpc2FibGVkKSB7XG4gICAgICAgIHdhcm4kMShcIkludmFsaWQgVGVsZXBvcnQgdGFyZ2V0IG9uIG1vdW50OlwiLCB0YXJnZXQsIGAoJHt0eXBlb2YgdGFyZ2V0fSlgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1vdW50ID0gKGNvbnRhaW5lcjIsIGFuY2hvcjIpID0+IHtcbiAgICAgICAgaWYgKHNoYXBlRmxhZyAmIDE2KSB7XG4gICAgICAgICAgbW91bnRDaGlsZHJlbihcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgY29udGFpbmVyMixcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgbW91bnQoY29udGFpbmVyLCBtYWluQW5jaG9yKTtcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0KSB7XG4gICAgICAgIG1vdW50KHRhcmdldCwgdGFyZ2V0QW5jaG9yKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbjIuZWwgPSBuMS5lbDtcbiAgICAgIGNvbnN0IG1haW5BbmNob3IgPSBuMi5hbmNob3IgPSBuMS5hbmNob3I7XG4gICAgICBjb25zdCB0YXJnZXQgPSBuMi50YXJnZXQgPSBuMS50YXJnZXQ7XG4gICAgICBjb25zdCB0YXJnZXRBbmNob3IgPSBuMi50YXJnZXRBbmNob3IgPSBuMS50YXJnZXRBbmNob3I7XG4gICAgICBjb25zdCB3YXNEaXNhYmxlZCA9IGlzVGVsZXBvcnREaXNhYmxlZChuMS5wcm9wcyk7XG4gICAgICBjb25zdCBjdXJyZW50Q29udGFpbmVyID0gd2FzRGlzYWJsZWQgPyBjb250YWluZXIgOiB0YXJnZXQ7XG4gICAgICBjb25zdCBjdXJyZW50QW5jaG9yID0gd2FzRGlzYWJsZWQgPyBtYWluQW5jaG9yIDogdGFyZ2V0QW5jaG9yO1xuICAgICAgaWYgKG5hbWVzcGFjZSA9PT0gXCJzdmdcIiB8fCBpc1RhcmdldFNWRyh0YXJnZXQpKSB7XG4gICAgICAgIG5hbWVzcGFjZSA9IFwic3ZnXCI7XG4gICAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZSA9PT0gXCJtYXRobWxcIiB8fCBpc1RhcmdldE1hdGhNTCh0YXJnZXQpKSB7XG4gICAgICAgIG5hbWVzcGFjZSA9IFwibWF0aG1sXCI7XG4gICAgICB9XG4gICAgICBpZiAoZHluYW1pY0NoaWxkcmVuKSB7XG4gICAgICAgIHBhdGNoQmxvY2tDaGlsZHJlbihcbiAgICAgICAgICBuMS5keW5hbWljQ2hpbGRyZW4sXG4gICAgICAgICAgZHluYW1pY0NoaWxkcmVuLFxuICAgICAgICAgIGN1cnJlbnRDb250YWluZXIsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICBzbG90U2NvcGVJZHNcbiAgICAgICAgKTtcbiAgICAgICAgdHJhdmVyc2VTdGF0aWNDaGlsZHJlbihuMSwgbjIsIHRydWUpO1xuICAgICAgfSBlbHNlIGlmICghb3B0aW1pemVkKSB7XG4gICAgICAgIHBhdGNoQ2hpbGRyZW4oXG4gICAgICAgICAgbjEsXG4gICAgICAgICAgbjIsXG4gICAgICAgICAgY3VycmVudENvbnRhaW5lcixcbiAgICAgICAgICBjdXJyZW50QW5jaG9yLFxuICAgICAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgICAgICBwYXJlbnRTdXNwZW5zZSxcbiAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKCF3YXNEaXNhYmxlZCkge1xuICAgICAgICAgIG1vdmVUZWxlcG9ydChcbiAgICAgICAgICAgIG4yLFxuICAgICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgICAgbWFpbkFuY2hvcixcbiAgICAgICAgICAgIGludGVybmFscyxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChuMi5wcm9wcyAmJiBuMS5wcm9wcyAmJiBuMi5wcm9wcy50byAhPT0gbjEucHJvcHMudG8pIHtcbiAgICAgICAgICAgIG4yLnByb3BzLnRvID0gbjEucHJvcHMudG87XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoKG4yLnByb3BzICYmIG4yLnByb3BzLnRvKSAhPT0gKG4xLnByb3BzICYmIG4xLnByb3BzLnRvKSkge1xuICAgICAgICAgIGNvbnN0IG5leHRUYXJnZXQgPSBuMi50YXJnZXQgPSByZXNvbHZlVGFyZ2V0KFxuICAgICAgICAgICAgbjIucHJvcHMsXG4gICAgICAgICAgICBxdWVyeVNlbGVjdG9yXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobmV4dFRhcmdldCkge1xuICAgICAgICAgICAgbW92ZVRlbGVwb3J0KFxuICAgICAgICAgICAgICBuMixcbiAgICAgICAgICAgICAgbmV4dFRhcmdldCxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgaW50ZXJuYWxzLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgICAgd2FybiQxKFxuICAgICAgICAgICAgICBcIkludmFsaWQgVGVsZXBvcnQgdGFyZ2V0IG9uIHVwZGF0ZTpcIixcbiAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICBgKCR7dHlwZW9mIHRhcmdldH0pYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAod2FzRGlzYWJsZWQpIHtcbiAgICAgICAgICBtb3ZlVGVsZXBvcnQoXG4gICAgICAgICAgICBuMixcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHRhcmdldEFuY2hvcixcbiAgICAgICAgICAgIGludGVybmFscyxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZUNzc1ZhcnMobjIpO1xuICB9LFxuICByZW1vdmUodm5vZGUsIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIG9wdGltaXplZCwgeyB1bTogdW5tb3VudCwgbzogeyByZW1vdmU6IGhvc3RSZW1vdmUgfSB9LCBkb1JlbW92ZSkge1xuICAgIGNvbnN0IHsgc2hhcGVGbGFnLCBjaGlsZHJlbiwgYW5jaG9yLCB0YXJnZXRBbmNob3IsIHRhcmdldCwgcHJvcHMgfSA9IHZub2RlO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGhvc3RSZW1vdmUodGFyZ2V0QW5jaG9yKTtcbiAgICB9XG4gICAgZG9SZW1vdmUgJiYgaG9zdFJlbW92ZShhbmNob3IpO1xuICAgIGlmIChzaGFwZUZsYWcgJiAxNikge1xuICAgICAgY29uc3Qgc2hvdWxkUmVtb3ZlID0gZG9SZW1vdmUgfHwgIWlzVGVsZXBvcnREaXNhYmxlZChwcm9wcyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICAgIHVubW91bnQoXG4gICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgIHNob3VsZFJlbW92ZSxcbiAgICAgICAgICAhIWNoaWxkLmR5bmFtaWNDaGlsZHJlblxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbW92ZTogbW92ZVRlbGVwb3J0LFxuICBoeWRyYXRlOiBoeWRyYXRlVGVsZXBvcnRcbn07XG5mdW5jdGlvbiBtb3ZlVGVsZXBvcnQodm5vZGUsIGNvbnRhaW5lciwgcGFyZW50QW5jaG9yLCB7IG86IHsgaW5zZXJ0IH0sIG06IG1vdmUgfSwgbW92ZVR5cGUgPSAyKSB7XG4gIGlmIChtb3ZlVHlwZSA9PT0gMCkge1xuICAgIGluc2VydCh2bm9kZS50YXJnZXRBbmNob3IsIGNvbnRhaW5lciwgcGFyZW50QW5jaG9yKTtcbiAgfVxuICBjb25zdCB7IGVsLCBhbmNob3IsIHNoYXBlRmxhZywgY2hpbGRyZW4sIHByb3BzIH0gPSB2bm9kZTtcbiAgY29uc3QgaXNSZW9yZGVyID0gbW92ZVR5cGUgPT09IDI7XG4gIGlmIChpc1Jlb3JkZXIpIHtcbiAgICBpbnNlcnQoZWwsIGNvbnRhaW5lciwgcGFyZW50QW5jaG9yKTtcbiAgfVxuICBpZiAoIWlzUmVvcmRlciB8fCBpc1RlbGVwb3J0RGlzYWJsZWQocHJvcHMpKSB7XG4gICAgaWYgKHNoYXBlRmxhZyAmIDE2KSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1vdmUoXG4gICAgICAgICAgY2hpbGRyZW5baV0sXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIHBhcmVudEFuY2hvcixcbiAgICAgICAgICAyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChpc1Jlb3JkZXIpIHtcbiAgICBpbnNlcnQoYW5jaG9yLCBjb250YWluZXIsIHBhcmVudEFuY2hvcik7XG4gIH1cbn1cbmZ1bmN0aW9uIGh5ZHJhdGVUZWxlcG9ydChub2RlLCB2bm9kZSwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSwgc2xvdFNjb3BlSWRzLCBvcHRpbWl6ZWQsIHtcbiAgbzogeyBuZXh0U2libGluZywgcGFyZW50Tm9kZSwgcXVlcnlTZWxlY3RvciB9XG59LCBoeWRyYXRlQ2hpbGRyZW4pIHtcbiAgY29uc3QgdGFyZ2V0ID0gdm5vZGUudGFyZ2V0ID0gcmVzb2x2ZVRhcmdldChcbiAgICB2bm9kZS5wcm9wcyxcbiAgICBxdWVyeVNlbGVjdG9yXG4gICk7XG4gIGlmICh0YXJnZXQpIHtcbiAgICBjb25zdCB0YXJnZXROb2RlID0gdGFyZ2V0Ll9scGEgfHwgdGFyZ2V0LmZpcnN0Q2hpbGQ7XG4gICAgaWYgKHZub2RlLnNoYXBlRmxhZyAmIDE2KSB7XG4gICAgICBpZiAoaXNUZWxlcG9ydERpc2FibGVkKHZub2RlLnByb3BzKSkge1xuICAgICAgICB2bm9kZS5hbmNob3IgPSBoeWRyYXRlQ2hpbGRyZW4oXG4gICAgICAgICAgbmV4dFNpYmxpbmcobm9kZSksXG4gICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgcGFyZW50Tm9kZShub2RlKSxcbiAgICAgICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICAgICAgc2xvdFNjb3BlSWRzLFxuICAgICAgICAgIG9wdGltaXplZFxuICAgICAgICApO1xuICAgICAgICB2bm9kZS50YXJnZXRBbmNob3IgPSB0YXJnZXROb2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm5vZGUuYW5jaG9yID0gbmV4dFNpYmxpbmcobm9kZSk7XG4gICAgICAgIGxldCB0YXJnZXRBbmNob3IgPSB0YXJnZXROb2RlO1xuICAgICAgICB3aGlsZSAodGFyZ2V0QW5jaG9yKSB7XG4gICAgICAgICAgdGFyZ2V0QW5jaG9yID0gbmV4dFNpYmxpbmcodGFyZ2V0QW5jaG9yKTtcbiAgICAgICAgICBpZiAodGFyZ2V0QW5jaG9yICYmIHRhcmdldEFuY2hvci5ub2RlVHlwZSA9PT0gOCAmJiB0YXJnZXRBbmNob3IuZGF0YSA9PT0gXCJ0ZWxlcG9ydCBhbmNob3JcIikge1xuICAgICAgICAgICAgdm5vZGUudGFyZ2V0QW5jaG9yID0gdGFyZ2V0QW5jaG9yO1xuICAgICAgICAgICAgdGFyZ2V0Ll9scGEgPSB2bm9kZS50YXJnZXRBbmNob3IgJiYgbmV4dFNpYmxpbmcodm5vZGUudGFyZ2V0QW5jaG9yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoeWRyYXRlQ2hpbGRyZW4oXG4gICAgICAgICAgdGFyZ2V0Tm9kZSxcbiAgICAgICAgICB2bm9kZSxcbiAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICAgIHBhcmVudFN1c3BlbnNlLFxuICAgICAgICAgIHNsb3RTY29wZUlkcyxcbiAgICAgICAgICBvcHRpbWl6ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlQ3NzVmFycyh2bm9kZSk7XG4gIH1cbiAgcmV0dXJuIHZub2RlLmFuY2hvciAmJiBuZXh0U2libGluZyh2bm9kZS5hbmNob3IpO1xufVxuY29uc3QgVGVsZXBvcnQgPSBUZWxlcG9ydEltcGw7XG5mdW5jdGlvbiB1cGRhdGVDc3NWYXJzKHZub2RlKSB7XG4gIGNvbnN0IGN0eCA9IHZub2RlLmN0eDtcbiAgaWYgKGN0eCAmJiBjdHgudXQpIHtcbiAgICBsZXQgbm9kZSA9IHZub2RlLmNoaWxkcmVuWzBdLmVsO1xuICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IHZub2RlLnRhcmdldEFuY2hvcikge1xuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDEpXG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZGF0YS12LW93bmVyXCIsIGN0eC51aWQpO1xuICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgfVxuICAgIGN0eC51dCgpO1xuICB9XG59XG5cbmNvbnN0IEZyYWdtZW50ID0gU3ltYm9sLmZvcihcInYtZmd0XCIpO1xuY29uc3QgVGV4dCA9IFN5bWJvbC5mb3IoXCJ2LXR4dFwiKTtcbmNvbnN0IENvbW1lbnQgPSBTeW1ib2wuZm9yKFwidi1jbXRcIik7XG5jb25zdCBTdGF0aWMgPSBTeW1ib2wuZm9yKFwidi1zdGNcIik7XG5jb25zdCBibG9ja1N0YWNrID0gW107XG5sZXQgY3VycmVudEJsb2NrID0gbnVsbDtcbmZ1bmN0aW9uIG9wZW5CbG9jayhkaXNhYmxlVHJhY2tpbmcgPSBmYWxzZSkge1xuICBibG9ja1N0YWNrLnB1c2goY3VycmVudEJsb2NrID0gZGlzYWJsZVRyYWNraW5nID8gbnVsbCA6IFtdKTtcbn1cbmZ1bmN0aW9uIGNsb3NlQmxvY2soKSB7XG4gIGJsb2NrU3RhY2sucG9wKCk7XG4gIGN1cnJlbnRCbG9jayA9IGJsb2NrU3RhY2tbYmxvY2tTdGFjay5sZW5ndGggLSAxXSB8fCBudWxsO1xufVxubGV0IGlzQmxvY2tUcmVlRW5hYmxlZCA9IDE7XG5mdW5jdGlvbiBzZXRCbG9ja1RyYWNraW5nKHZhbHVlKSB7XG4gIGlzQmxvY2tUcmVlRW5hYmxlZCArPSB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHNldHVwQmxvY2sodm5vZGUpIHtcbiAgdm5vZGUuZHluYW1pY0NoaWxkcmVuID0gaXNCbG9ja1RyZWVFbmFibGVkID4gMCA/IGN1cnJlbnRCbG9jayB8fCBFTVBUWV9BUlIgOiBudWxsO1xuICBjbG9zZUJsb2NrKCk7XG4gIGlmIChpc0Jsb2NrVHJlZUVuYWJsZWQgPiAwICYmIGN1cnJlbnRCbG9jaykge1xuICAgIGN1cnJlbnRCbG9jay5wdXNoKHZub2RlKTtcbiAgfVxuICByZXR1cm4gdm5vZGU7XG59XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50QmxvY2sodHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBwYXRjaEZsYWcsIGR5bmFtaWNQcm9wcywgc2hhcGVGbGFnKSB7XG4gIHJldHVybiBzZXR1cEJsb2NrKFxuICAgIGNyZWF0ZUJhc2VWTm9kZShcbiAgICAgIHR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgcGF0Y2hGbGFnLFxuICAgICAgZHluYW1pY1Byb3BzLFxuICAgICAgc2hhcGVGbGFnLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUJsb2NrKHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgcGF0Y2hGbGFnLCBkeW5hbWljUHJvcHMpIHtcbiAgcmV0dXJuIHNldHVwQmxvY2soXG4gICAgY3JlYXRlVk5vZGUoXG4gICAgICB0eXBlLFxuICAgICAgcHJvcHMsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIHBhdGNoRmxhZyxcbiAgICAgIGR5bmFtaWNQcm9wcyxcbiAgICAgIHRydWVcbiAgICApXG4gICk7XG59XG5mdW5jdGlvbiBpc1ZOb2RlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IHZhbHVlLl9fdl9pc1ZOb2RlID09PSB0cnVlIDogZmFsc2U7XG59XG5mdW5jdGlvbiBpc1NhbWVWTm9kZVR5cGUobjEsIG4yKSB7XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIG4yLnNoYXBlRmxhZyAmIDYgJiYgaG1yRGlydHlDb21wb25lbnRzLmhhcyhuMi50eXBlKSkge1xuICAgIG4xLnNoYXBlRmxhZyAmPSB+MjU2O1xuICAgIG4yLnNoYXBlRmxhZyAmPSB+NTEyO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gbjEudHlwZSA9PT0gbjIudHlwZSAmJiBuMS5rZXkgPT09IG4yLmtleTtcbn1cbmxldCB2bm9kZUFyZ3NUcmFuc2Zvcm1lcjtcbmZ1bmN0aW9uIHRyYW5zZm9ybVZOb2RlQXJncyh0cmFuc2Zvcm1lcikge1xuICB2bm9kZUFyZ3NUcmFuc2Zvcm1lciA9IHRyYW5zZm9ybWVyO1xufVxuY29uc3QgY3JlYXRlVk5vZGVXaXRoQXJnc1RyYW5zZm9ybSA9ICguLi5hcmdzKSA9PiB7XG4gIHJldHVybiBfY3JlYXRlVk5vZGUoXG4gICAgLi4udm5vZGVBcmdzVHJhbnNmb3JtZXIgPyB2bm9kZUFyZ3NUcmFuc2Zvcm1lcihhcmdzLCBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UpIDogYXJnc1xuICApO1xufTtcbmNvbnN0IEludGVybmFsT2JqZWN0S2V5ID0gYF9fdkludGVybmFsYDtcbmNvbnN0IG5vcm1hbGl6ZUtleSA9ICh7IGtleSB9KSA9PiBrZXkgIT0gbnVsbCA/IGtleSA6IG51bGw7XG5jb25zdCBub3JtYWxpemVSZWYgPSAoe1xuICByZWYsXG4gIHJlZl9rZXksXG4gIHJlZl9mb3Jcbn0pID0+IHtcbiAgaWYgKHR5cGVvZiByZWYgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZWYgPSBcIlwiICsgcmVmO1xuICB9XG4gIHJldHVybiByZWYgIT0gbnVsbCA/IGlzU3RyaW5nKHJlZikgfHwgaXNSZWYocmVmKSB8fCBpc0Z1bmN0aW9uKHJlZikgPyB7IGk6IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSwgcjogcmVmLCBrOiByZWZfa2V5LCBmOiAhIXJlZl9mb3IgfSA6IHJlZiA6IG51bGw7XG59O1xuZnVuY3Rpb24gY3JlYXRlQmFzZVZOb2RlKHR5cGUsIHByb3BzID0gbnVsbCwgY2hpbGRyZW4gPSBudWxsLCBwYXRjaEZsYWcgPSAwLCBkeW5hbWljUHJvcHMgPSBudWxsLCBzaGFwZUZsYWcgPSB0eXBlID09PSBGcmFnbWVudCA/IDAgOiAxLCBpc0Jsb2NrTm9kZSA9IGZhbHNlLCBuZWVkRnVsbENoaWxkcmVuTm9ybWFsaXphdGlvbiA9IGZhbHNlKSB7XG4gIGNvbnN0IHZub2RlID0ge1xuICAgIF9fdl9pc1ZOb2RlOiB0cnVlLFxuICAgIF9fdl9za2lwOiB0cnVlLFxuICAgIHR5cGUsXG4gICAgcHJvcHMsXG4gICAga2V5OiBwcm9wcyAmJiBub3JtYWxpemVLZXkocHJvcHMpLFxuICAgIHJlZjogcHJvcHMgJiYgbm9ybWFsaXplUmVmKHByb3BzKSxcbiAgICBzY29wZUlkOiBjdXJyZW50U2NvcGVJZCxcbiAgICBzbG90U2NvcGVJZHM6IG51bGwsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50OiBudWxsLFxuICAgIHN1c3BlbnNlOiBudWxsLFxuICAgIHNzQ29udGVudDogbnVsbCxcbiAgICBzc0ZhbGxiYWNrOiBudWxsLFxuICAgIGRpcnM6IG51bGwsXG4gICAgdHJhbnNpdGlvbjogbnVsbCxcbiAgICBlbDogbnVsbCxcbiAgICBhbmNob3I6IG51bGwsXG4gICAgdGFyZ2V0OiBudWxsLFxuICAgIHRhcmdldEFuY2hvcjogbnVsbCxcbiAgICBzdGF0aWNDb3VudDogMCxcbiAgICBzaGFwZUZsYWcsXG4gICAgcGF0Y2hGbGFnLFxuICAgIGR5bmFtaWNQcm9wcyxcbiAgICBkeW5hbWljQ2hpbGRyZW46IG51bGwsXG4gICAgYXBwQ29udGV4dDogbnVsbCxcbiAgICBjdHg6IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZVxuICB9O1xuICBpZiAobmVlZEZ1bGxDaGlsZHJlbk5vcm1hbGl6YXRpb24pIHtcbiAgICBub3JtYWxpemVDaGlsZHJlbih2bm9kZSwgY2hpbGRyZW4pO1xuICAgIGlmIChzaGFwZUZsYWcgJiAxMjgpIHtcbiAgICAgIHR5cGUubm9ybWFsaXplKHZub2RlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW4pIHtcbiAgICB2bm9kZS5zaGFwZUZsYWcgfD0gaXNTdHJpbmcoY2hpbGRyZW4pID8gOCA6IDE2O1xuICB9XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHZub2RlLmtleSAhPT0gdm5vZGUua2V5KSB7XG4gICAgd2FybiQxKGBWTm9kZSBjcmVhdGVkIHdpdGggaW52YWxpZCBrZXkgKE5hTikuIFZOb2RlIHR5cGU6YCwgdm5vZGUudHlwZSk7XG4gIH1cbiAgaWYgKGlzQmxvY2tUcmVlRW5hYmxlZCA+IDAgJiYgLy8gYXZvaWQgYSBibG9jayBub2RlIGZyb20gdHJhY2tpbmcgaXRzZWxmXG4gICFpc0Jsb2NrTm9kZSAmJiAvLyBoYXMgY3VycmVudCBwYXJlbnQgYmxvY2tcbiAgY3VycmVudEJsb2NrICYmIC8vIHByZXNlbmNlIG9mIGEgcGF0Y2ggZmxhZyBpbmRpY2F0ZXMgdGhpcyBub2RlIG5lZWRzIHBhdGNoaW5nIG9uIHVwZGF0ZXMuXG4gIC8vIGNvbXBvbmVudCBub2RlcyBhbHNvIHNob3VsZCBhbHdheXMgYmUgcGF0Y2hlZCwgYmVjYXVzZSBldmVuIGlmIHRoZVxuICAvLyBjb21wb25lbnQgZG9lc24ndCBuZWVkIHRvIHVwZGF0ZSwgaXQgbmVlZHMgdG8gcGVyc2lzdCB0aGUgaW5zdGFuY2Ugb24gdG9cbiAgLy8gdGhlIG5leHQgdm5vZGUgc28gdGhhdCBpdCBjYW4gYmUgcHJvcGVybHkgdW5tb3VudGVkIGxhdGVyLlxuICAodm5vZGUucGF0Y2hGbGFnID4gMCB8fCBzaGFwZUZsYWcgJiA2KSAmJiAvLyB0aGUgRVZFTlRTIGZsYWcgaXMgb25seSBmb3IgaHlkcmF0aW9uIGFuZCBpZiBpdCBpcyB0aGUgb25seSBmbGFnLCB0aGVcbiAgLy8gdm5vZGUgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGR5bmFtaWMgZHVlIHRvIGhhbmRsZXIgY2FjaGluZy5cbiAgdm5vZGUucGF0Y2hGbGFnICE9PSAzMikge1xuICAgIGN1cnJlbnRCbG9jay5wdXNoKHZub2RlKTtcbiAgfVxuICByZXR1cm4gdm5vZGU7XG59XG5jb25zdCBjcmVhdGVWTm9kZSA9ICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyBjcmVhdGVWTm9kZVdpdGhBcmdzVHJhbnNmb3JtIDogX2NyZWF0ZVZOb2RlO1xuZnVuY3Rpb24gX2NyZWF0ZVZOb2RlKHR5cGUsIHByb3BzID0gbnVsbCwgY2hpbGRyZW4gPSBudWxsLCBwYXRjaEZsYWcgPSAwLCBkeW5hbWljUHJvcHMgPSBudWxsLCBpc0Jsb2NrTm9kZSA9IGZhbHNlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlID09PSBOVUxMX0RZTkFNSUNfQ09NUE9ORU5UKSB7XG4gICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgIXR5cGUpIHtcbiAgICAgIHdhcm4kMShgSW52YWxpZCB2bm9kZSB0eXBlIHdoZW4gY3JlYXRpbmcgdm5vZGU6ICR7dHlwZX0uYCk7XG4gICAgfVxuICAgIHR5cGUgPSBDb21tZW50O1xuICB9XG4gIGlmIChpc1ZOb2RlKHR5cGUpKSB7XG4gICAgY29uc3QgY2xvbmVkID0gY2xvbmVWTm9kZShcbiAgICAgIHR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIHRydWVcbiAgICAgIC8qIG1lcmdlUmVmOiB0cnVlICovXG4gICAgKTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIG5vcm1hbGl6ZUNoaWxkcmVuKGNsb25lZCwgY2hpbGRyZW4pO1xuICAgIH1cbiAgICBpZiAoaXNCbG9ja1RyZWVFbmFibGVkID4gMCAmJiAhaXNCbG9ja05vZGUgJiYgY3VycmVudEJsb2NrKSB7XG4gICAgICBpZiAoY2xvbmVkLnNoYXBlRmxhZyAmIDYpIHtcbiAgICAgICAgY3VycmVudEJsb2NrW2N1cnJlbnRCbG9jay5pbmRleE9mKHR5cGUpXSA9IGNsb25lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnRCbG9jay5wdXNoKGNsb25lZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNsb25lZC5wYXRjaEZsYWcgfD0gLTI7XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxuICBpZiAoaXNDbGFzc0NvbXBvbmVudCh0eXBlKSkge1xuICAgIHR5cGUgPSB0eXBlLl9fdmNjT3B0cztcbiAgfVxuICBpZiAocHJvcHMpIHtcbiAgICBwcm9wcyA9IGd1YXJkUmVhY3RpdmVQcm9wcyhwcm9wcyk7XG4gICAgbGV0IHsgY2xhc3M6IGtsYXNzLCBzdHlsZSB9ID0gcHJvcHM7XG4gICAgaWYgKGtsYXNzICYmICFpc1N0cmluZyhrbGFzcykpIHtcbiAgICAgIHByb3BzLmNsYXNzID0gbm9ybWFsaXplQ2xhc3Moa2xhc3MpO1xuICAgIH1cbiAgICBpZiAoaXNPYmplY3Qoc3R5bGUpKSB7XG4gICAgICBpZiAoaXNQcm94eShzdHlsZSkgJiYgIWlzQXJyYXkoc3R5bGUpKSB7XG4gICAgICAgIHN0eWxlID0gZXh0ZW5kKHt9LCBzdHlsZSk7XG4gICAgICB9XG4gICAgICBwcm9wcy5zdHlsZSA9IG5vcm1hbGl6ZVN0eWxlKHN0eWxlKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgc2hhcGVGbGFnID0gaXNTdHJpbmcodHlwZSkgPyAxIDogaXNTdXNwZW5zZSh0eXBlKSA/IDEyOCA6IGlzVGVsZXBvcnQodHlwZSkgPyA2NCA6IGlzT2JqZWN0KHR5cGUpID8gNCA6IGlzRnVuY3Rpb24odHlwZSkgPyAyIDogMDtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgc2hhcGVGbGFnICYgNCAmJiBpc1Byb3h5KHR5cGUpKSB7XG4gICAgdHlwZSA9IHRvUmF3KHR5cGUpO1xuICAgIHdhcm4kMShcbiAgICAgIGBWdWUgcmVjZWl2ZWQgYSBDb21wb25lbnQgdGhhdCB3YXMgbWFkZSBhIHJlYWN0aXZlIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCBhbmQgc2hvdWxkIGJlIGF2b2lkZWQgYnkgbWFya2luZyB0aGUgY29tcG9uZW50IHdpdGggXFxgbWFya1Jhd1xcYCBvciB1c2luZyBcXGBzaGFsbG93UmVmXFxgIGluc3RlYWQgb2YgXFxgcmVmXFxgLmAsXG4gICAgICBgXG5Db21wb25lbnQgdGhhdCB3YXMgbWFkZSByZWFjdGl2ZTogYCxcbiAgICAgIHR5cGVcbiAgICApO1xuICB9XG4gIHJldHVybiBjcmVhdGVCYXNlVk5vZGUoXG4gICAgdHlwZSxcbiAgICBwcm9wcyxcbiAgICBjaGlsZHJlbixcbiAgICBwYXRjaEZsYWcsXG4gICAgZHluYW1pY1Byb3BzLFxuICAgIHNoYXBlRmxhZyxcbiAgICBpc0Jsb2NrTm9kZSxcbiAgICB0cnVlXG4gICk7XG59XG5mdW5jdGlvbiBndWFyZFJlYWN0aXZlUHJvcHMocHJvcHMpIHtcbiAgaWYgKCFwcm9wcylcbiAgICByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGlzUHJveHkocHJvcHMpIHx8IEludGVybmFsT2JqZWN0S2V5IGluIHByb3BzID8gZXh0ZW5kKHt9LCBwcm9wcykgOiBwcm9wcztcbn1cbmZ1bmN0aW9uIGNsb25lVk5vZGUodm5vZGUsIGV4dHJhUHJvcHMsIG1lcmdlUmVmID0gZmFsc2UpIHtcbiAgY29uc3QgeyBwcm9wcywgcmVmLCBwYXRjaEZsYWcsIGNoaWxkcmVuIH0gPSB2bm9kZTtcbiAgY29uc3QgbWVyZ2VkUHJvcHMgPSBleHRyYVByb3BzID8gbWVyZ2VQcm9wcyhwcm9wcyB8fCB7fSwgZXh0cmFQcm9wcykgOiBwcm9wcztcbiAgY29uc3QgY2xvbmVkID0ge1xuICAgIF9fdl9pc1ZOb2RlOiB0cnVlLFxuICAgIF9fdl9za2lwOiB0cnVlLFxuICAgIHR5cGU6IHZub2RlLnR5cGUsXG4gICAgcHJvcHM6IG1lcmdlZFByb3BzLFxuICAgIGtleTogbWVyZ2VkUHJvcHMgJiYgbm9ybWFsaXplS2V5KG1lcmdlZFByb3BzKSxcbiAgICByZWY6IGV4dHJhUHJvcHMgJiYgZXh0cmFQcm9wcy5yZWYgPyAoXG4gICAgICAvLyAjMjA3OCBpbiB0aGUgY2FzZSBvZiA8Y29tcG9uZW50IDppcz1cInZub2RlXCIgcmVmPVwiZXh0cmFcIi8+XG4gICAgICAvLyBpZiB0aGUgdm5vZGUgaXRzZWxmIGFscmVhZHkgaGFzIGEgcmVmLCBjbG9uZVZOb2RlIHdpbGwgbmVlZCB0byBtZXJnZVxuICAgICAgLy8gdGhlIHJlZnMgc28gdGhlIHNpbmdsZSB2bm9kZSBjYW4gYmUgc2V0IG9uIG11bHRpcGxlIHJlZnNcbiAgICAgIG1lcmdlUmVmICYmIHJlZiA/IGlzQXJyYXkocmVmKSA/IHJlZi5jb25jYXQobm9ybWFsaXplUmVmKGV4dHJhUHJvcHMpKSA6IFtyZWYsIG5vcm1hbGl6ZVJlZihleHRyYVByb3BzKV0gOiBub3JtYWxpemVSZWYoZXh0cmFQcm9wcylcbiAgICApIDogcmVmLFxuICAgIHNjb3BlSWQ6IHZub2RlLnNjb3BlSWQsXG4gICAgc2xvdFNjb3BlSWRzOiB2bm9kZS5zbG90U2NvcGVJZHMsXG4gICAgY2hpbGRyZW46ICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgcGF0Y2hGbGFnID09PSAtMSAmJiBpc0FycmF5KGNoaWxkcmVuKSA/IGNoaWxkcmVuLm1hcChkZWVwQ2xvbmVWTm9kZSkgOiBjaGlsZHJlbixcbiAgICB0YXJnZXQ6IHZub2RlLnRhcmdldCxcbiAgICB0YXJnZXRBbmNob3I6IHZub2RlLnRhcmdldEFuY2hvcixcbiAgICBzdGF0aWNDb3VudDogdm5vZGUuc3RhdGljQ291bnQsXG4gICAgc2hhcGVGbGFnOiB2bm9kZS5zaGFwZUZsYWcsXG4gICAgLy8gaWYgdGhlIHZub2RlIGlzIGNsb25lZCB3aXRoIGV4dHJhIHByb3BzLCB3ZSBjYW4gbm8gbG9uZ2VyIGFzc3VtZSBpdHNcbiAgICAvLyBleGlzdGluZyBwYXRjaCBmbGFnIHRvIGJlIHJlbGlhYmxlIGFuZCBuZWVkIHRvIGFkZCB0aGUgRlVMTF9QUk9QUyBmbGFnLlxuICAgIC8vIG5vdGU6IHByZXNlcnZlIGZsYWcgZm9yIGZyYWdtZW50cyBzaW5jZSB0aGV5IHVzZSB0aGUgZmxhZyBmb3IgY2hpbGRyZW5cbiAgICAvLyBmYXN0IHBhdGhzIG9ubHkuXG4gICAgcGF0Y2hGbGFnOiBleHRyYVByb3BzICYmIHZub2RlLnR5cGUgIT09IEZyYWdtZW50ID8gcGF0Y2hGbGFnID09PSAtMSA/IDE2IDogcGF0Y2hGbGFnIHwgMTYgOiBwYXRjaEZsYWcsXG4gICAgZHluYW1pY1Byb3BzOiB2bm9kZS5keW5hbWljUHJvcHMsXG4gICAgZHluYW1pY0NoaWxkcmVuOiB2bm9kZS5keW5hbWljQ2hpbGRyZW4sXG4gICAgYXBwQ29udGV4dDogdm5vZGUuYXBwQ29udGV4dCxcbiAgICBkaXJzOiB2bm9kZS5kaXJzLFxuICAgIHRyYW5zaXRpb246IHZub2RlLnRyYW5zaXRpb24sXG4gICAgLy8gVGhlc2Ugc2hvdWxkIHRlY2huaWNhbGx5IG9ubHkgYmUgbm9uLW51bGwgb24gbW91bnRlZCBWTm9kZXMuIEhvd2V2ZXIsXG4gICAgLy8gdGhleSAqc2hvdWxkKiBiZSBjb3BpZWQgZm9yIGtlcHQtYWxpdmUgdm5vZGVzLiBTbyB3ZSBqdXN0IGFsd2F5cyBjb3B5XG4gICAgLy8gdGhlbSBzaW5jZSB0aGVtIGJlaW5nIG5vbi1udWxsIGR1cmluZyBhIG1vdW50IGRvZXNuJ3QgYWZmZWN0IHRoZSBsb2dpYyBhc1xuICAgIC8vIHRoZXkgd2lsbCBzaW1wbHkgYmUgb3ZlcndyaXR0ZW4uXG4gICAgY29tcG9uZW50OiB2bm9kZS5jb21wb25lbnQsXG4gICAgc3VzcGVuc2U6IHZub2RlLnN1c3BlbnNlLFxuICAgIHNzQ29udGVudDogdm5vZGUuc3NDb250ZW50ICYmIGNsb25lVk5vZGUodm5vZGUuc3NDb250ZW50KSxcbiAgICBzc0ZhbGxiYWNrOiB2bm9kZS5zc0ZhbGxiYWNrICYmIGNsb25lVk5vZGUodm5vZGUuc3NGYWxsYmFjayksXG4gICAgZWw6IHZub2RlLmVsLFxuICAgIGFuY2hvcjogdm5vZGUuYW5jaG9yLFxuICAgIGN0eDogdm5vZGUuY3R4LFxuICAgIGNlOiB2bm9kZS5jZVxuICB9O1xuICByZXR1cm4gY2xvbmVkO1xufVxuZnVuY3Rpb24gZGVlcENsb25lVk5vZGUodm5vZGUpIHtcbiAgY29uc3QgY2xvbmVkID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gIGlmIChpc0FycmF5KHZub2RlLmNoaWxkcmVuKSkge1xuICAgIGNsb25lZC5jaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuLm1hcChkZWVwQ2xvbmVWTm9kZSk7XG4gIH1cbiAgcmV0dXJuIGNsb25lZDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHRWTm9kZSh0ZXh0ID0gXCIgXCIsIGZsYWcgPSAwKSB7XG4gIHJldHVybiBjcmVhdGVWTm9kZShUZXh0LCBudWxsLCB0ZXh0LCBmbGFnKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVN0YXRpY1ZOb2RlKGNvbnRlbnQsIG51bWJlck9mTm9kZXMpIHtcbiAgY29uc3Qgdm5vZGUgPSBjcmVhdGVWTm9kZShTdGF0aWMsIG51bGwsIGNvbnRlbnQpO1xuICB2bm9kZS5zdGF0aWNDb3VudCA9IG51bWJlck9mTm9kZXM7XG4gIHJldHVybiB2bm9kZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnRWTm9kZSh0ZXh0ID0gXCJcIiwgYXNCbG9jayA9IGZhbHNlKSB7XG4gIHJldHVybiBhc0Jsb2NrID8gKG9wZW5CbG9jaygpLCBjcmVhdGVCbG9jayhDb21tZW50LCBudWxsLCB0ZXh0KSkgOiBjcmVhdGVWTm9kZShDb21tZW50LCBudWxsLCB0ZXh0KTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZOb2RlKGNoaWxkKSB7XG4gIGlmIChjaGlsZCA9PSBudWxsIHx8IHR5cGVvZiBjaGlsZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICByZXR1cm4gY3JlYXRlVk5vZGUoQ29tbWVudCk7XG4gIH0gZWxzZSBpZiAoaXNBcnJheShjaGlsZCkpIHtcbiAgICByZXR1cm4gY3JlYXRlVk5vZGUoXG4gICAgICBGcmFnbWVudCxcbiAgICAgIG51bGwsXG4gICAgICAvLyAjMzY2NiwgYXZvaWQgcmVmZXJlbmNlIHBvbGx1dGlvbiB3aGVuIHJldXNpbmcgdm5vZGVcbiAgICAgIGNoaWxkLnNsaWNlKClcbiAgICApO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBjaGlsZCA9PT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBjbG9uZUlmTW91bnRlZChjaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNyZWF0ZVZOb2RlKFRleHQsIG51bGwsIFN0cmluZyhjaGlsZCkpO1xuICB9XG59XG5mdW5jdGlvbiBjbG9uZUlmTW91bnRlZChjaGlsZCkge1xuICByZXR1cm4gY2hpbGQuZWwgPT09IG51bGwgJiYgY2hpbGQucGF0Y2hGbGFnICE9PSAtMSB8fCBjaGlsZC5tZW1vID8gY2hpbGQgOiBjbG9uZVZOb2RlKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbikge1xuICBsZXQgdHlwZSA9IDA7XG4gIGNvbnN0IHsgc2hhcGVGbGFnIH0gPSB2bm9kZTtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICBjaGlsZHJlbiA9IG51bGw7XG4gIH0gZWxzZSBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICB0eXBlID0gMTY7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNoaWxkcmVuID09PSBcIm9iamVjdFwiKSB7XG4gICAgaWYgKHNoYXBlRmxhZyAmICgxIHwgNjQpKSB7XG4gICAgICBjb25zdCBzbG90ID0gY2hpbGRyZW4uZGVmYXVsdDtcbiAgICAgIGlmIChzbG90KSB7XG4gICAgICAgIHNsb3QuX2MgJiYgKHNsb3QuX2QgPSBmYWxzZSk7XG4gICAgICAgIG5vcm1hbGl6ZUNoaWxkcmVuKHZub2RlLCBzbG90KCkpO1xuICAgICAgICBzbG90Ll9jICYmIChzbG90Ll9kID0gdHJ1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGUgPSAzMjtcbiAgICAgIGNvbnN0IHNsb3RGbGFnID0gY2hpbGRyZW4uXztcbiAgICAgIGlmICghc2xvdEZsYWcgJiYgIShJbnRlcm5hbE9iamVjdEtleSBpbiBjaGlsZHJlbikpIHtcbiAgICAgICAgY2hpbGRyZW4uX2N0eCA9IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTtcbiAgICAgIH0gZWxzZSBpZiAoc2xvdEZsYWcgPT09IDMgJiYgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlKSB7XG4gICAgICAgIGlmIChjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2Uuc2xvdHMuXyA9PT0gMSkge1xuICAgICAgICAgIGNoaWxkcmVuLl8gPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoaWxkcmVuLl8gPSAyO1xuICAgICAgICAgIHZub2RlLnBhdGNoRmxhZyB8PSAxMDI0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24oY2hpbGRyZW4pKSB7XG4gICAgY2hpbGRyZW4gPSB7IGRlZmF1bHQ6IGNoaWxkcmVuLCBfY3R4OiBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgfTtcbiAgICB0eXBlID0gMzI7XG4gIH0gZWxzZSB7XG4gICAgY2hpbGRyZW4gPSBTdHJpbmcoY2hpbGRyZW4pO1xuICAgIGlmIChzaGFwZUZsYWcgJiA2NCkge1xuICAgICAgdHlwZSA9IDE2O1xuICAgICAgY2hpbGRyZW4gPSBbY3JlYXRlVGV4dFZOb2RlKGNoaWxkcmVuKV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGUgPSA4O1xuICAgIH1cbiAgfVxuICB2bm9kZS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB2bm9kZS5zaGFwZUZsYWcgfD0gdHlwZTtcbn1cbmZ1bmN0aW9uIG1lcmdlUHJvcHMoLi4uYXJncykge1xuICBjb25zdCByZXQgPSB7fTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdG9NZXJnZSA9IGFyZ3NbaV07XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdG9NZXJnZSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJjbGFzc1wiKSB7XG4gICAgICAgIGlmIChyZXQuY2xhc3MgIT09IHRvTWVyZ2UuY2xhc3MpIHtcbiAgICAgICAgICByZXQuY2xhc3MgPSBub3JtYWxpemVDbGFzcyhbcmV0LmNsYXNzLCB0b01lcmdlLmNsYXNzXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgcmV0LnN0eWxlID0gbm9ybWFsaXplU3R5bGUoW3JldC5zdHlsZSwgdG9NZXJnZS5zdHlsZV0pO1xuICAgICAgfSBlbHNlIGlmIChpc09uKGtleSkpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSByZXRba2V5XTtcbiAgICAgICAgY29uc3QgaW5jb21pbmcgPSB0b01lcmdlW2tleV07XG4gICAgICAgIGlmIChpbmNvbWluZyAmJiBleGlzdGluZyAhPT0gaW5jb21pbmcgJiYgIShpc0FycmF5KGV4aXN0aW5nKSAmJiBleGlzdGluZy5pbmNsdWRlcyhpbmNvbWluZykpKSB7XG4gICAgICAgICAgcmV0W2tleV0gPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgaW5jb21pbmcpIDogaW5jb21pbmc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5ICE9PSBcIlwiKSB7XG4gICAgICAgIHJldFtrZXldID0gdG9NZXJnZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuZnVuY3Rpb24gaW52b2tlVk5vZGVIb29rKGhvb2ssIGluc3RhbmNlLCB2bm9kZSwgcHJldlZOb2RlID0gbnVsbCkge1xuICBjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZyhob29rLCBpbnN0YW5jZSwgNywgW1xuICAgIHZub2RlLFxuICAgIHByZXZWTm9kZVxuICBdKTtcbn1cblxuY29uc3QgZW1wdHlBcHBDb250ZXh0ID0gY3JlYXRlQXBwQ29udGV4dCgpO1xubGV0IHVpZCA9IDA7XG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZSh2bm9kZSwgcGFyZW50LCBzdXNwZW5zZSkge1xuICBjb25zdCB0eXBlID0gdm5vZGUudHlwZTtcbiAgY29uc3QgYXBwQ29udGV4dCA9IChwYXJlbnQgPyBwYXJlbnQuYXBwQ29udGV4dCA6IHZub2RlLmFwcENvbnRleHQpIHx8IGVtcHR5QXBwQ29udGV4dDtcbiAgY29uc3QgaW5zdGFuY2UgPSB7XG4gICAgdWlkOiB1aWQrKyxcbiAgICB2bm9kZSxcbiAgICB0eXBlLFxuICAgIHBhcmVudCxcbiAgICBhcHBDb250ZXh0LFxuICAgIHJvb3Q6IG51bGwsXG4gICAgLy8gdG8gYmUgaW1tZWRpYXRlbHkgc2V0XG4gICAgbmV4dDogbnVsbCxcbiAgICBzdWJUcmVlOiBudWxsLFxuICAgIC8vIHdpbGwgYmUgc2V0IHN5bmNocm9ub3VzbHkgcmlnaHQgYWZ0ZXIgY3JlYXRpb25cbiAgICBlZmZlY3Q6IG51bGwsXG4gICAgdXBkYXRlOiBudWxsLFxuICAgIC8vIHdpbGwgYmUgc2V0IHN5bmNocm9ub3VzbHkgcmlnaHQgYWZ0ZXIgY3JlYXRpb25cbiAgICBzY29wZTogbmV3IEVmZmVjdFNjb3BlKFxuICAgICAgdHJ1ZVxuICAgICAgLyogZGV0YWNoZWQgKi9cbiAgICApLFxuICAgIHJlbmRlcjogbnVsbCxcbiAgICBwcm94eTogbnVsbCxcbiAgICBleHBvc2VkOiBudWxsLFxuICAgIGV4cG9zZVByb3h5OiBudWxsLFxuICAgIHdpdGhQcm94eTogbnVsbCxcbiAgICBwcm92aWRlczogcGFyZW50ID8gcGFyZW50LnByb3ZpZGVzIDogT2JqZWN0LmNyZWF0ZShhcHBDb250ZXh0LnByb3ZpZGVzKSxcbiAgICBhY2Nlc3NDYWNoZTogbnVsbCxcbiAgICByZW5kZXJDYWNoZTogW10sXG4gICAgLy8gbG9jYWwgcmVzb2x2ZWQgYXNzZXRzXG4gICAgY29tcG9uZW50czogbnVsbCxcbiAgICBkaXJlY3RpdmVzOiBudWxsLFxuICAgIC8vIHJlc29sdmVkIHByb3BzIGFuZCBlbWl0cyBvcHRpb25zXG4gICAgcHJvcHNPcHRpb25zOiBub3JtYWxpemVQcm9wc09wdGlvbnModHlwZSwgYXBwQ29udGV4dCksXG4gICAgZW1pdHNPcHRpb25zOiBub3JtYWxpemVFbWl0c09wdGlvbnModHlwZSwgYXBwQ29udGV4dCksXG4gICAgLy8gZW1pdFxuICAgIGVtaXQ6IG51bGwsXG4gICAgLy8gdG8gYmUgc2V0IGltbWVkaWF0ZWx5XG4gICAgZW1pdHRlZDogbnVsbCxcbiAgICAvLyBwcm9wcyBkZWZhdWx0IHZhbHVlXG4gICAgcHJvcHNEZWZhdWx0czogRU1QVFlfT0JKLFxuICAgIC8vIGluaGVyaXRBdHRyc1xuICAgIGluaGVyaXRBdHRyczogdHlwZS5pbmhlcml0QXR0cnMsXG4gICAgLy8gc3RhdGVcbiAgICBjdHg6IEVNUFRZX09CSixcbiAgICBkYXRhOiBFTVBUWV9PQkosXG4gICAgcHJvcHM6IEVNUFRZX09CSixcbiAgICBhdHRyczogRU1QVFlfT0JKLFxuICAgIHNsb3RzOiBFTVBUWV9PQkosXG4gICAgcmVmczogRU1QVFlfT0JKLFxuICAgIHNldHVwU3RhdGU6IEVNUFRZX09CSixcbiAgICBzZXR1cENvbnRleHQ6IG51bGwsXG4gICAgYXR0cnNQcm94eTogbnVsbCxcbiAgICBzbG90c1Byb3h5OiBudWxsLFxuICAgIC8vIHN1c3BlbnNlIHJlbGF0ZWRcbiAgICBzdXNwZW5zZSxcbiAgICBzdXNwZW5zZUlkOiBzdXNwZW5zZSA/IHN1c3BlbnNlLnBlbmRpbmdJZCA6IDAsXG4gICAgYXN5bmNEZXA6IG51bGwsXG4gICAgYXN5bmNSZXNvbHZlZDogZmFsc2UsXG4gICAgLy8gbGlmZWN5Y2xlIGhvb2tzXG4gICAgLy8gbm90IHVzaW5nIGVudW1zIGhlcmUgYmVjYXVzZSBpdCByZXN1bHRzIGluIGNvbXB1dGVkIHByb3BlcnRpZXNcbiAgICBpc01vdW50ZWQ6IGZhbHNlLFxuICAgIGlzVW5tb3VudGVkOiBmYWxzZSxcbiAgICBpc0RlYWN0aXZhdGVkOiBmYWxzZSxcbiAgICBiYzogbnVsbCxcbiAgICBjOiBudWxsLFxuICAgIGJtOiBudWxsLFxuICAgIG06IG51bGwsXG4gICAgYnU6IG51bGwsXG4gICAgdTogbnVsbCxcbiAgICB1bTogbnVsbCxcbiAgICBidW06IG51bGwsXG4gICAgZGE6IG51bGwsXG4gICAgYTogbnVsbCxcbiAgICBydGc6IG51bGwsXG4gICAgcnRjOiBudWxsLFxuICAgIGVjOiBudWxsLFxuICAgIHNwOiBudWxsXG4gIH07XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgaW5zdGFuY2UuY3R4ID0gY3JlYXRlRGV2UmVuZGVyQ29udGV4dChpbnN0YW5jZSk7XG4gIH0gZWxzZSB7XG4gICAgaW5zdGFuY2UuY3R4ID0geyBfOiBpbnN0YW5jZSB9O1xuICB9XG4gIGluc3RhbmNlLnJvb3QgPSBwYXJlbnQgPyBwYXJlbnQucm9vdCA6IGluc3RhbmNlO1xuICBpbnN0YW5jZS5lbWl0ID0gZW1pdC5iaW5kKG51bGwsIGluc3RhbmNlKTtcbiAgaWYgKHZub2RlLmNlKSB7XG4gICAgdm5vZGUuY2UoaW5zdGFuY2UpO1xuICB9XG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmxldCBjdXJyZW50SW5zdGFuY2UgPSBudWxsO1xuY29uc3QgZ2V0Q3VycmVudEluc3RhbmNlID0gKCkgPT4gY3VycmVudEluc3RhbmNlIHx8IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTtcbmxldCBpbnRlcm5hbFNldEN1cnJlbnRJbnN0YW5jZTtcbmxldCBzZXRJblNTUlNldHVwU3RhdGU7XG57XG4gIGNvbnN0IGcgPSBnZXRHbG9iYWxUaGlzKCk7XG4gIGNvbnN0IHJlZ2lzdGVyR2xvYmFsU2V0dGVyID0gKGtleSwgc2V0dGVyKSA9PiB7XG4gICAgbGV0IHNldHRlcnM7XG4gICAgaWYgKCEoc2V0dGVycyA9IGdba2V5XSkpXG4gICAgICBzZXR0ZXJzID0gZ1trZXldID0gW107XG4gICAgc2V0dGVycy5wdXNoKHNldHRlcik7XG4gICAgcmV0dXJuICh2KSA9PiB7XG4gICAgICBpZiAoc2V0dGVycy5sZW5ndGggPiAxKVxuICAgICAgICBzZXR0ZXJzLmZvckVhY2goKHNldCkgPT4gc2V0KHYpKTtcbiAgICAgIGVsc2VcbiAgICAgICAgc2V0dGVyc1swXSh2KTtcbiAgICB9O1xuICB9O1xuICBpbnRlcm5hbFNldEN1cnJlbnRJbnN0YW5jZSA9IHJlZ2lzdGVyR2xvYmFsU2V0dGVyKFxuICAgIGBfX1ZVRV9JTlNUQU5DRV9TRVRURVJTX19gLFxuICAgICh2KSA9PiBjdXJyZW50SW5zdGFuY2UgPSB2XG4gICk7XG4gIHNldEluU1NSU2V0dXBTdGF0ZSA9IHJlZ2lzdGVyR2xvYmFsU2V0dGVyKFxuICAgIGBfX1ZVRV9TU1JfU0VUVEVSU19fYCxcbiAgICAodikgPT4gaXNJblNTUkNvbXBvbmVudFNldHVwID0gdlxuICApO1xufVxuY29uc3Qgc2V0Q3VycmVudEluc3RhbmNlID0gKGluc3RhbmNlKSA9PiB7XG4gIGNvbnN0IHByZXYgPSBjdXJyZW50SW5zdGFuY2U7XG4gIGludGVybmFsU2V0Q3VycmVudEluc3RhbmNlKGluc3RhbmNlKTtcbiAgaW5zdGFuY2Uuc2NvcGUub24oKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpbnN0YW5jZS5zY29wZS5vZmYoKTtcbiAgICBpbnRlcm5hbFNldEN1cnJlbnRJbnN0YW5jZShwcmV2KTtcbiAgfTtcbn07XG5jb25zdCB1bnNldEN1cnJlbnRJbnN0YW5jZSA9ICgpID0+IHtcbiAgY3VycmVudEluc3RhbmNlICYmIGN1cnJlbnRJbnN0YW5jZS5zY29wZS5vZmYoKTtcbiAgaW50ZXJuYWxTZXRDdXJyZW50SW5zdGFuY2UobnVsbCk7XG59O1xuY29uc3QgaXNCdWlsdEluVGFnID0gLyogQF9fUFVSRV9fICovIG1ha2VNYXAoXCJzbG90LGNvbXBvbmVudFwiKTtcbmZ1bmN0aW9uIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lLCB7IGlzTmF0aXZlVGFnIH0pIHtcbiAgaWYgKGlzQnVpbHRJblRhZyhuYW1lKSB8fCBpc05hdGl2ZVRhZyhuYW1lKSkge1xuICAgIHdhcm4kMShcbiAgICAgIFwiRG8gbm90IHVzZSBidWlsdC1pbiBvciByZXNlcnZlZCBIVE1MIGVsZW1lbnRzIGFzIGNvbXBvbmVudCBpZDogXCIgKyBuYW1lXG4gICAgKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNTdGF0ZWZ1bENvbXBvbmVudChpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2Uudm5vZGUuc2hhcGVGbGFnICYgNDtcbn1cbmxldCBpc0luU1NSQ29tcG9uZW50U2V0dXAgPSBmYWxzZTtcbmZ1bmN0aW9uIHNldHVwQ29tcG9uZW50KGluc3RhbmNlLCBpc1NTUiA9IGZhbHNlKSB7XG4gIGlzU1NSICYmIHNldEluU1NSU2V0dXBTdGF0ZShpc1NTUik7XG4gIGNvbnN0IHsgcHJvcHMsIGNoaWxkcmVuIH0gPSBpbnN0YW5jZS52bm9kZTtcbiAgY29uc3QgaXNTdGF0ZWZ1bCA9IGlzU3RhdGVmdWxDb21wb25lbnQoaW5zdGFuY2UpO1xuICBpbml0UHJvcHMoaW5zdGFuY2UsIHByb3BzLCBpc1N0YXRlZnVsLCBpc1NTUik7XG4gIGluaXRTbG90cyhpbnN0YW5jZSwgY2hpbGRyZW4pO1xuICBjb25zdCBzZXR1cFJlc3VsdCA9IGlzU3RhdGVmdWwgPyBzZXR1cFN0YXRlZnVsQ29tcG9uZW50KGluc3RhbmNlLCBpc1NTUikgOiB2b2lkIDA7XG4gIGlzU1NSICYmIHNldEluU1NSU2V0dXBTdGF0ZShmYWxzZSk7XG4gIHJldHVybiBzZXR1cFJlc3VsdDtcbn1cbmZ1bmN0aW9uIHNldHVwU3RhdGVmdWxDb21wb25lbnQoaW5zdGFuY2UsIGlzU1NSKSB7XG4gIHZhciBfYTtcbiAgY29uc3QgQ29tcG9uZW50ID0gaW5zdGFuY2UudHlwZTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBpZiAoQ29tcG9uZW50Lm5hbWUpIHtcbiAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShDb21wb25lbnQubmFtZSwgaW5zdGFuY2UuYXBwQ29udGV4dC5jb25maWcpO1xuICAgIH1cbiAgICBpZiAoQ29tcG9uZW50LmNvbXBvbmVudHMpIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoQ29tcG9uZW50LmNvbXBvbmVudHMpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUobmFtZXNbaV0sIGluc3RhbmNlLmFwcENvbnRleHQuY29uZmlnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKENvbXBvbmVudC5kaXJlY3RpdmVzKSB7XG4gICAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKENvbXBvbmVudC5kaXJlY3RpdmVzKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsaWRhdGVEaXJlY3RpdmVOYW1lKG5hbWVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKENvbXBvbmVudC5jb21waWxlck9wdGlvbnMgJiYgaXNSdW50aW1lT25seSgpKSB7XG4gICAgICB3YXJuJDEoXG4gICAgICAgIGBcImNvbXBpbGVyT3B0aW9uc1wiIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSBidWlsZCBvZiBWdWUgdGhhdCBpbmNsdWRlcyB0aGUgcnVudGltZSBjb21waWxlci4gU2luY2UgeW91IGFyZSB1c2luZyBhIHJ1bnRpbWUtb25seSBidWlsZCwgdGhlIG9wdGlvbnMgc2hvdWxkIGJlIHBhc3NlZCB2aWEgeW91ciBidWlsZCB0b29sIGNvbmZpZyBpbnN0ZWFkLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGluc3RhbmNlLmFjY2Vzc0NhY2hlID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGluc3RhbmNlLnByb3h5ID0gbWFya1JhdyhuZXcgUHJveHkoaW5zdGFuY2UuY3R4LCBQdWJsaWNJbnN0YW5jZVByb3h5SGFuZGxlcnMpKTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBleHBvc2VQcm9wc09uUmVuZGVyQ29udGV4dChpbnN0YW5jZSk7XG4gIH1cbiAgY29uc3QgeyBzZXR1cCB9ID0gQ29tcG9uZW50O1xuICBpZiAoc2V0dXApIHtcbiAgICBjb25zdCBzZXR1cENvbnRleHQgPSBpbnN0YW5jZS5zZXR1cENvbnRleHQgPSBzZXR1cC5sZW5ndGggPiAxID8gY3JlYXRlU2V0dXBDb250ZXh0KGluc3RhbmNlKSA6IG51bGw7XG4gICAgY29uc3QgcmVzZXQgPSBzZXRDdXJyZW50SW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgIHBhdXNlVHJhY2tpbmcoKTtcbiAgICBjb25zdCBzZXR1cFJlc3VsdCA9IGNhbGxXaXRoRXJyb3JIYW5kbGluZyhcbiAgICAgIHNldHVwLFxuICAgICAgaW5zdGFuY2UsXG4gICAgICAwLFxuICAgICAgW1xuICAgICAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gc2hhbGxvd1JlYWRvbmx5KGluc3RhbmNlLnByb3BzKSA6IGluc3RhbmNlLnByb3BzLFxuICAgICAgICBzZXR1cENvbnRleHRcbiAgICAgIF1cbiAgICApO1xuICAgIHJlc2V0VHJhY2tpbmcoKTtcbiAgICByZXNldCgpO1xuICAgIGlmIChpc1Byb21pc2Uoc2V0dXBSZXN1bHQpKSB7XG4gICAgICBzZXR1cFJlc3VsdC50aGVuKHVuc2V0Q3VycmVudEluc3RhbmNlLCB1bnNldEN1cnJlbnRJbnN0YW5jZSk7XG4gICAgICBpZiAoaXNTU1IpIHtcbiAgICAgICAgcmV0dXJuIHNldHVwUmVzdWx0LnRoZW4oKHJlc29sdmVkUmVzdWx0KSA9PiB7XG4gICAgICAgICAgaGFuZGxlU2V0dXBSZXN1bHQoaW5zdGFuY2UsIHJlc29sdmVkUmVzdWx0LCBpc1NTUik7XG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgaGFuZGxlRXJyb3IoZSwgaW5zdGFuY2UsIDApO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RhbmNlLmFzeW5jRGVwID0gc2V0dXBSZXN1bHQ7XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFpbnN0YW5jZS5zdXNwZW5zZSkge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSAoX2EgPSBDb21wb25lbnQubmFtZSkgIT0gbnVsbCA/IF9hIDogXCJBbm9ueW1vdXNcIjtcbiAgICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgICBgQ29tcG9uZW50IDwke25hbWV9Pjogc2V0dXAgZnVuY3Rpb24gcmV0dXJuZWQgYSBwcm9taXNlLCBidXQgbm8gPFN1c3BlbnNlPiBib3VuZGFyeSB3YXMgZm91bmQgaW4gdGhlIHBhcmVudCBjb21wb25lbnQgdHJlZS4gQSBjb21wb25lbnQgd2l0aCBhc3luYyBzZXR1cCgpIG11c3QgYmUgbmVzdGVkIGluIGEgPFN1c3BlbnNlPiBpbiBvcmRlciB0byBiZSByZW5kZXJlZC5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoYW5kbGVTZXR1cFJlc3VsdChpbnN0YW5jZSwgc2V0dXBSZXN1bHQsIGlzU1NSKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZmluaXNoQ29tcG9uZW50U2V0dXAoaW5zdGFuY2UsIGlzU1NSKTtcbiAgfVxufVxuZnVuY3Rpb24gaGFuZGxlU2V0dXBSZXN1bHQoaW5zdGFuY2UsIHNldHVwUmVzdWx0LCBpc1NTUikge1xuICBpZiAoaXNGdW5jdGlvbihzZXR1cFJlc3VsdCkpIHtcbiAgICBpZiAoaW5zdGFuY2UudHlwZS5fX3NzcklubGluZVJlbmRlcikge1xuICAgICAgaW5zdGFuY2Uuc3NyUmVuZGVyID0gc2V0dXBSZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlLnJlbmRlciA9IHNldHVwUmVzdWx0O1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdChzZXR1cFJlc3VsdCkpIHtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiBpc1ZOb2RlKHNldHVwUmVzdWx0KSkge1xuICAgICAgd2FybiQxKFxuICAgICAgICBgc2V0dXAoKSBzaG91bGQgbm90IHJldHVybiBWTm9kZXMgZGlyZWN0bHkgLSByZXR1cm4gYSByZW5kZXIgZnVuY3Rpb24gaW5zdGVhZC5gXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pIHtcbiAgICAgIGluc3RhbmNlLmRldnRvb2xzUmF3U2V0dXBTdGF0ZSA9IHNldHVwUmVzdWx0O1xuICAgIH1cbiAgICBpbnN0YW5jZS5zZXR1cFN0YXRlID0gcHJveHlSZWZzKHNldHVwUmVzdWx0KTtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgZXhwb3NlU2V0dXBTdGF0ZU9uUmVuZGVyQ29udGV4dChpbnN0YW5jZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgc2V0dXBSZXN1bHQgIT09IHZvaWQgMCkge1xuICAgIHdhcm4kMShcbiAgICAgIGBzZXR1cCgpIHNob3VsZCByZXR1cm4gYW4gb2JqZWN0LiBSZWNlaXZlZDogJHtzZXR1cFJlc3VsdCA9PT0gbnVsbCA/IFwibnVsbFwiIDogdHlwZW9mIHNldHVwUmVzdWx0fWBcbiAgICApO1xuICB9XG4gIGZpbmlzaENvbXBvbmVudFNldHVwKGluc3RhbmNlLCBpc1NTUik7XG59XG5sZXQgY29tcGlsZTtcbmxldCBpbnN0YWxsV2l0aFByb3h5O1xuZnVuY3Rpb24gcmVnaXN0ZXJSdW50aW1lQ29tcGlsZXIoX2NvbXBpbGUpIHtcbiAgY29tcGlsZSA9IF9jb21waWxlO1xuICBpbnN0YWxsV2l0aFByb3h5ID0gKGkpID0+IHtcbiAgICBpZiAoaS5yZW5kZXIuX3JjKSB7XG4gICAgICBpLndpdGhQcm94eSA9IG5ldyBQcm94eShpLmN0eCwgUnVudGltZUNvbXBpbGVkUHVibGljSW5zdGFuY2VQcm94eUhhbmRsZXJzKTtcbiAgICB9XG4gIH07XG59XG5jb25zdCBpc1J1bnRpbWVPbmx5ID0gKCkgPT4gIWNvbXBpbGU7XG5mdW5jdGlvbiBmaW5pc2hDb21wb25lbnRTZXR1cChpbnN0YW5jZSwgaXNTU1IsIHNraXBPcHRpb25zKSB7XG4gIGNvbnN0IENvbXBvbmVudCA9IGluc3RhbmNlLnR5cGU7XG4gIGlmICghaW5zdGFuY2UucmVuZGVyKSB7XG4gICAgaWYgKCFpc1NTUiAmJiBjb21waWxlICYmICFDb21wb25lbnQucmVuZGVyKSB7XG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IENvbXBvbmVudC50ZW1wbGF0ZSB8fCByZXNvbHZlTWVyZ2VkT3B0aW9ucyhpbnN0YW5jZSkudGVtcGxhdGU7XG4gICAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICAgICAgICBzdGFydE1lYXN1cmUoaW5zdGFuY2UsIGBjb21waWxlYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBpc0N1c3RvbUVsZW1lbnQsIGNvbXBpbGVyT3B0aW9ucyB9ID0gaW5zdGFuY2UuYXBwQ29udGV4dC5jb25maWc7XG4gICAgICAgIGNvbnN0IHsgZGVsaW1pdGVycywgY29tcGlsZXJPcHRpb25zOiBjb21wb25lbnRDb21waWxlck9wdGlvbnMgfSA9IENvbXBvbmVudDtcbiAgICAgICAgY29uc3QgZmluYWxDb21waWxlck9wdGlvbnMgPSBleHRlbmQoXG4gICAgICAgICAgZXh0ZW5kKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpc0N1c3RvbUVsZW1lbnQsXG4gICAgICAgICAgICAgIGRlbGltaXRlcnNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21waWxlck9wdGlvbnNcbiAgICAgICAgICApLFxuICAgICAgICAgIGNvbXBvbmVudENvbXBpbGVyT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICBDb21wb25lbnQucmVuZGVyID0gY29tcGlsZSh0ZW1wbGF0ZSwgZmluYWxDb21waWxlck9wdGlvbnMpO1xuICAgICAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgICAgIGVuZE1lYXN1cmUoaW5zdGFuY2UsIGBjb21waWxlYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaW5zdGFuY2UucmVuZGVyID0gQ29tcG9uZW50LnJlbmRlciB8fCBOT09QO1xuICAgIGlmIChpbnN0YWxsV2l0aFByb3h5KSB7XG4gICAgICBpbnN0YWxsV2l0aFByb3h5KGluc3RhbmNlKTtcbiAgICB9XG4gIH1cbiAgaWYgKF9fVlVFX09QVElPTlNfQVBJX18gJiYgdHJ1ZSkge1xuICAgIGNvbnN0IHJlc2V0ID0gc2V0Q3VycmVudEluc3RhbmNlKGluc3RhbmNlKTtcbiAgICBwYXVzZVRyYWNraW5nKCk7XG4gICAgdHJ5IHtcbiAgICAgIGFwcGx5T3B0aW9ucyhpbnN0YW5jZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlc2V0VHJhY2tpbmcoKTtcbiAgICAgIHJlc2V0KCk7XG4gICAgfVxuICB9XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFDb21wb25lbnQucmVuZGVyICYmIGluc3RhbmNlLnJlbmRlciA9PT0gTk9PUCAmJiAhaXNTU1IpIHtcbiAgICBpZiAoIWNvbXBpbGUgJiYgQ29tcG9uZW50LnRlbXBsYXRlKSB7XG4gICAgICB3YXJuJDEoXG4gICAgICAgIGBDb21wb25lbnQgcHJvdmlkZWQgdGVtcGxhdGUgb3B0aW9uIGJ1dCBydW50aW1lIGNvbXBpbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBidWlsZCBvZiBWdWUuYCArIChgIENvbmZpZ3VyZSB5b3VyIGJ1bmRsZXIgdG8gYWxpYXMgXCJ2dWVcIiB0byBcInZ1ZS9kaXN0L3Z1ZS5lc20tYnVuZGxlci5qc1wiLmAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2FybiQxKGBDb21wb25lbnQgaXMgbWlzc2luZyB0ZW1wbGF0ZSBvciByZW5kZXIgZnVuY3Rpb24uYCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRBdHRyc1Byb3h5KGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZS5hdHRyc1Byb3h5IHx8IChpbnN0YW5jZS5hdHRyc1Byb3h5ID0gbmV3IFByb3h5KFxuICAgIGluc3RhbmNlLmF0dHJzLFxuICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyB7XG4gICAgICBnZXQodGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgbWFya0F0dHJzQWNjZXNzZWQoKTtcbiAgICAgICAgdHJhY2soaW5zdGFuY2UsIFwiZ2V0XCIsIFwiJGF0dHJzXCIpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0W2tleV07XG4gICAgICB9LFxuICAgICAgc2V0KCkge1xuICAgICAgICB3YXJuJDEoYHNldHVwQ29udGV4dC5hdHRycyBpcyByZWFkb25seS5gKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGRlbGV0ZVByb3BlcnR5KCkge1xuICAgICAgICB3YXJuJDEoYHNldHVwQ29udGV4dC5hdHRycyBpcyByZWFkb25seS5gKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICBnZXQodGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgdHJhY2soaW5zdGFuY2UsIFwiZ2V0XCIsIFwiJGF0dHJzXCIpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0W2tleV07XG4gICAgICB9XG4gICAgfVxuICApKTtcbn1cbmZ1bmN0aW9uIGdldFNsb3RzUHJveHkoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlLnNsb3RzUHJveHkgfHwgKGluc3RhbmNlLnNsb3RzUHJveHkgPSBuZXcgUHJveHkoaW5zdGFuY2Uuc2xvdHMsIHtcbiAgICBnZXQodGFyZ2V0LCBrZXkpIHtcbiAgICAgIHRyYWNrKGluc3RhbmNlLCBcImdldFwiLCBcIiRzbG90c1wiKTtcbiAgICAgIHJldHVybiB0YXJnZXRba2V5XTtcbiAgICB9XG4gIH0pKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVNldHVwQ29udGV4dChpbnN0YW5jZSkge1xuICBjb25zdCBleHBvc2UgPSAoZXhwb3NlZCkgPT4ge1xuICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICBpZiAoaW5zdGFuY2UuZXhwb3NlZCkge1xuICAgICAgICB3YXJuJDEoYGV4cG9zZSgpIHNob3VsZCBiZSBjYWxsZWQgb25seSBvbmNlIHBlciBzZXR1cCgpLmApO1xuICAgICAgfVxuICAgICAgaWYgKGV4cG9zZWQgIT0gbnVsbCkge1xuICAgICAgICBsZXQgZXhwb3NlZFR5cGUgPSB0eXBlb2YgZXhwb3NlZDtcbiAgICAgICAgaWYgKGV4cG9zZWRUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgaWYgKGlzQXJyYXkoZXhwb3NlZCkpIHtcbiAgICAgICAgICAgIGV4cG9zZWRUeXBlID0gXCJhcnJheVwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNSZWYoZXhwb3NlZCkpIHtcbiAgICAgICAgICAgIGV4cG9zZWRUeXBlID0gXCJyZWZcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cG9zZWRUeXBlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgd2FybiQxKFxuICAgICAgICAgICAgYGV4cG9zZSgpIHNob3VsZCBiZSBwYXNzZWQgYSBwbGFpbiBvYmplY3QsIHJlY2VpdmVkICR7ZXhwb3NlZFR5cGV9LmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGluc3RhbmNlLmV4cG9zZWQgPSBleHBvc2VkIHx8IHt9O1xuICB9O1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICAgIGdldCBhdHRycygpIHtcbiAgICAgICAgcmV0dXJuIGdldEF0dHJzUHJveHkoaW5zdGFuY2UpO1xuICAgICAgfSxcbiAgICAgIGdldCBzbG90cygpIHtcbiAgICAgICAgcmV0dXJuIGdldFNsb3RzUHJveHkoaW5zdGFuY2UpO1xuICAgICAgfSxcbiAgICAgIGdldCBlbWl0KCkge1xuICAgICAgICByZXR1cm4gKGV2ZW50LCAuLi5hcmdzKSA9PiBpbnN0YW5jZS5lbWl0KGV2ZW50LCAuLi5hcmdzKTtcbiAgICAgIH0sXG4gICAgICBleHBvc2VcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0IGF0dHJzKCkge1xuICAgICAgICByZXR1cm4gZ2V0QXR0cnNQcm94eShpbnN0YW5jZSk7XG4gICAgICB9LFxuICAgICAgc2xvdHM6IGluc3RhbmNlLnNsb3RzLFxuICAgICAgZW1pdDogaW5zdGFuY2UuZW1pdCxcbiAgICAgIGV4cG9zZVxuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEV4cG9zZVByb3h5KGluc3RhbmNlKSB7XG4gIGlmIChpbnN0YW5jZS5leHBvc2VkKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmV4cG9zZVByb3h5IHx8IChpbnN0YW5jZS5leHBvc2VQcm94eSA9IG5ldyBQcm94eShwcm94eVJlZnMobWFya1JhdyhpbnN0YW5jZS5leHBvc2VkKSksIHtcbiAgICAgIGdldCh0YXJnZXQsIGtleSkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldCkge1xuICAgICAgICAgIHJldHVybiB0YXJnZXRba2V5XTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgaW4gcHVibGljUHJvcGVydGllc01hcCkge1xuICAgICAgICAgIHJldHVybiBwdWJsaWNQcm9wZXJ0aWVzTWFwW2tleV0oaW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFzKHRhcmdldCwga2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgaW4gdGFyZ2V0IHx8IGtleSBpbiBwdWJsaWNQcm9wZXJ0aWVzTWFwO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxufVxuY29uc3QgY2xhc3NpZnlSRSA9IC8oPzpefFstX10pKFxcdykvZztcbmNvbnN0IGNsYXNzaWZ5ID0gKHN0cikgPT4gc3RyLnJlcGxhY2UoY2xhc3NpZnlSRSwgKGMpID0+IGMudG9VcHBlckNhc2UoKSkucmVwbGFjZSgvWy1fXS9nLCBcIlwiKTtcbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50LCBpbmNsdWRlSW5mZXJyZWQgPSB0cnVlKSB7XG4gIHJldHVybiBpc0Z1bmN0aW9uKENvbXBvbmVudCkgPyBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgOiBDb21wb25lbnQubmFtZSB8fCBpbmNsdWRlSW5mZXJyZWQgJiYgQ29tcG9uZW50Ll9fbmFtZTtcbn1cbmZ1bmN0aW9uIGZvcm1hdENvbXBvbmVudE5hbWUoaW5zdGFuY2UsIENvbXBvbmVudCwgaXNSb290ID0gZmFsc2UpIHtcbiAgbGV0IG5hbWUgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCk7XG4gIGlmICghbmFtZSAmJiBDb21wb25lbnQuX19maWxlKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBDb21wb25lbnQuX19maWxlLm1hdGNoKC8oW14vXFxcXF0rKVxcLlxcdyskLyk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBuYW1lID0gbWF0Y2hbMV07XG4gICAgfVxuICB9XG4gIGlmICghbmFtZSAmJiBpbnN0YW5jZSAmJiBpbnN0YW5jZS5wYXJlbnQpIHtcbiAgICBjb25zdCBpbmZlckZyb21SZWdpc3RyeSA9IChyZWdpc3RyeSkgPT4ge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVnaXN0cnkpIHtcbiAgICAgICAgaWYgKHJlZ2lzdHJ5W2tleV0gPT09IENvbXBvbmVudCkge1xuICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIG5hbWUgPSBpbmZlckZyb21SZWdpc3RyeShcbiAgICAgIGluc3RhbmNlLmNvbXBvbmVudHMgfHwgaW5zdGFuY2UucGFyZW50LnR5cGUuY29tcG9uZW50c1xuICAgICkgfHwgaW5mZXJGcm9tUmVnaXN0cnkoaW5zdGFuY2UuYXBwQ29udGV4dC5jb21wb25lbnRzKTtcbiAgfVxuICByZXR1cm4gbmFtZSA/IGNsYXNzaWZ5KG5hbWUpIDogaXNSb290ID8gYEFwcGAgOiBgQW5vbnltb3VzYDtcbn1cbmZ1bmN0aW9uIGlzQ2xhc3NDb21wb25lbnQodmFsdWUpIHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUpICYmIFwiX192Y2NPcHRzXCIgaW4gdmFsdWU7XG59XG5cbmNvbnN0IGNvbXB1dGVkID0gKGdldHRlck9yT3B0aW9ucywgZGVidWdPcHRpb25zKSA9PiB7XG4gIGNvbnN0IGMgPSBjb21wdXRlZCQxKGdldHRlck9yT3B0aW9ucywgZGVidWdPcHRpb25zLCBpc0luU1NSQ29tcG9uZW50U2V0dXApO1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIGNvbnN0IGkgPSBnZXRDdXJyZW50SW5zdGFuY2UoKTtcbiAgICBpZiAoaSAmJiBpLmFwcENvbnRleHQuY29uZmlnLndhcm5SZWN1cnNpdmVDb21wdXRlZCkge1xuICAgICAgYy5fd2FyblJlY3Vyc2l2ZSA9IHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBjO1xufTtcblxuZnVuY3Rpb24gdXNlTW9kZWwocHJvcHMsIG5hbWUsIG9wdGlvbnMgPSBFTVBUWV9PQkopIHtcbiAgY29uc3QgaSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhaSkge1xuICAgIHdhcm4kMShgdXNlTW9kZWwoKSBjYWxsZWQgd2l0aG91dCBhY3RpdmUgaW5zdGFuY2UuYCk7XG4gICAgcmV0dXJuIHJlZigpO1xuICB9XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmICFpLnByb3BzT3B0aW9uc1swXVtuYW1lXSkge1xuICAgIHdhcm4kMShgdXNlTW9kZWwoKSBjYWxsZWQgd2l0aCBwcm9wIFwiJHtuYW1lfVwiIHdoaWNoIGlzIG5vdCBkZWNsYXJlZC5gKTtcbiAgICByZXR1cm4gcmVmKCk7XG4gIH1cbiAgY29uc3QgY2FtZWxpemVkTmFtZSA9IGNhbWVsaXplKG5hbWUpO1xuICBjb25zdCBoeXBoZW5hdGVkTmFtZSA9IGh5cGhlbmF0ZShuYW1lKTtcbiAgY29uc3QgcmVzID0gY3VzdG9tUmVmKCh0cmFjaywgdHJpZ2dlcikgPT4ge1xuICAgIGxldCBsb2NhbFZhbHVlO1xuICAgIHdhdGNoU3luY0VmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wVmFsdWUgPSBwcm9wc1tuYW1lXTtcbiAgICAgIGlmIChoYXNDaGFuZ2VkKGxvY2FsVmFsdWUsIHByb3BWYWx1ZSkpIHtcbiAgICAgICAgbG9jYWxWYWx1ZSA9IHByb3BWYWx1ZTtcbiAgICAgICAgdHJpZ2dlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHRyYWNrKCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmdldCA/IG9wdGlvbnMuZ2V0KGxvY2FsVmFsdWUpIDogbG9jYWxWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgcmF3UHJvcHMgPSBpLnZub2RlLnByb3BzO1xuICAgICAgICBpZiAoIShyYXdQcm9wcyAmJiAvLyBjaGVjayBpZiBwYXJlbnQgaGFzIHBhc3NlZCB2LW1vZGVsXG4gICAgICAgIChuYW1lIGluIHJhd1Byb3BzIHx8IGNhbWVsaXplZE5hbWUgaW4gcmF3UHJvcHMgfHwgaHlwaGVuYXRlZE5hbWUgaW4gcmF3UHJvcHMpICYmIChgb25VcGRhdGU6JHtuYW1lfWAgaW4gcmF3UHJvcHMgfHwgYG9uVXBkYXRlOiR7Y2FtZWxpemVkTmFtZX1gIGluIHJhd1Byb3BzIHx8IGBvblVwZGF0ZToke2h5cGhlbmF0ZWROYW1lfWAgaW4gcmF3UHJvcHMpKSAmJiBoYXNDaGFuZ2VkKHZhbHVlLCBsb2NhbFZhbHVlKSkge1xuICAgICAgICAgIGxvY2FsVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICB0cmlnZ2VyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaS5lbWl0KGB1cGRhdGU6JHtuYW1lfWAsIG9wdGlvbnMuc2V0ID8gb3B0aW9ucy5zZXQodmFsdWUpIDogdmFsdWUpO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuICBjb25zdCBtb2RpZmllcktleSA9IG5hbWUgPT09IFwibW9kZWxWYWx1ZVwiID8gXCJtb2RlbE1vZGlmaWVyc1wiIDogYCR7bmFtZX1Nb2RpZmllcnNgO1xuICByZXNbU3ltYm9sLml0ZXJhdG9yXSA9ICgpID0+IHtcbiAgICBsZXQgaTIgPSAwO1xuICAgIHJldHVybiB7XG4gICAgICBuZXh0KCkge1xuICAgICAgICBpZiAoaTIgPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGkyKysgPyBwcm9wc1ttb2RpZmllcktleV0gfHwge30gOiByZXMsIGRvbmU6IGZhbHNlIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gaCh0eXBlLCBwcm9wc09yQ2hpbGRyZW4sIGNoaWxkcmVuKSB7XG4gIGNvbnN0IGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuICBpZiAobCA9PT0gMikge1xuICAgIGlmIChpc09iamVjdChwcm9wc09yQ2hpbGRyZW4pICYmICFpc0FycmF5KHByb3BzT3JDaGlsZHJlbikpIHtcbiAgICAgIGlmIChpc1ZOb2RlKHByb3BzT3JDaGlsZHJlbikpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKHR5cGUsIG51bGwsIFtwcm9wc09yQ2hpbGRyZW5dKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVWTm9kZSh0eXBlLCBwcm9wc09yQ2hpbGRyZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3JlYXRlVk5vZGUodHlwZSwgbnVsbCwgcHJvcHNPckNoaWxkcmVuKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGwgPiAzKSB7XG4gICAgICBjaGlsZHJlbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgfSBlbHNlIGlmIChsID09PSAzICYmIGlzVk5vZGUoY2hpbGRyZW4pKSB7XG4gICAgICBjaGlsZHJlbiA9IFtjaGlsZHJlbl07XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVWTm9kZSh0eXBlLCBwcm9wc09yQ2hpbGRyZW4sIGNoaWxkcmVuKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0Q3VzdG9tRm9ybWF0dGVyKCkge1xuICBpZiAoISEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgfHwgdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB2dWVTdHlsZSA9IHsgc3R5bGU6IFwiY29sb3I6IzNiYTc3NlwiIH07XG4gIGNvbnN0IG51bWJlclN0eWxlID0geyBzdHlsZTogXCJjb2xvcjojMTY3N2ZmXCIgfTtcbiAgY29uc3Qgc3RyaW5nU3R5bGUgPSB7IHN0eWxlOiBcImNvbG9yOiNmNTIyMmRcIiB9O1xuICBjb25zdCBrZXl3b3JkU3R5bGUgPSB7IHN0eWxlOiBcImNvbG9yOiNlYjJmOTZcIiB9O1xuICBjb25zdCBmb3JtYXR0ZXIgPSB7XG4gICAgaGVhZGVyKG9iaikge1xuICAgICAgaWYgKCFpc09iamVjdChvYmopKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKG9iai5fX2lzVnVlKSB7XG4gICAgICAgIHJldHVybiBbXCJkaXZcIiwgdnVlU3R5bGUsIGBWdWVJbnN0YW5jZWBdO1xuICAgICAgfSBlbHNlIGlmIChpc1JlZihvYmopKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7fSxcbiAgICAgICAgICBbXCJzcGFuXCIsIHZ1ZVN0eWxlLCBnZW5SZWZGbGFnKG9iaildLFxuICAgICAgICAgIFwiPFwiLFxuICAgICAgICAgIGZvcm1hdFZhbHVlKG9iai52YWx1ZSksXG4gICAgICAgICAgYD5gXG4gICAgICAgIF07XG4gICAgICB9IGVsc2UgaWYgKGlzUmVhY3RpdmUob2JqKSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge30sXG4gICAgICAgICAgW1wic3BhblwiLCB2dWVTdHlsZSwgaXNTaGFsbG93KG9iaikgPyBcIlNoYWxsb3dSZWFjdGl2ZVwiIDogXCJSZWFjdGl2ZVwiXSxcbiAgICAgICAgICBcIjxcIixcbiAgICAgICAgICBmb3JtYXRWYWx1ZShvYmopLFxuICAgICAgICAgIGA+JHtpc1JlYWRvbmx5KG9iaikgPyBgIChyZWFkb25seSlgIDogYGB9YFxuICAgICAgICBdO1xuICAgICAgfSBlbHNlIGlmIChpc1JlYWRvbmx5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIFtcInNwYW5cIiwgdnVlU3R5bGUsIGlzU2hhbGxvdyhvYmopID8gXCJTaGFsbG93UmVhZG9ubHlcIiA6IFwiUmVhZG9ubHlcIl0sXG4gICAgICAgICAgXCI8XCIsXG4gICAgICAgICAgZm9ybWF0VmFsdWUob2JqKSxcbiAgICAgICAgICBcIj5cIlxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBoYXNCb2R5KG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiBvYmouX19pc1Z1ZTtcbiAgICB9LFxuICAgIGJvZHkob2JqKSB7XG4gICAgICBpZiAob2JqICYmIG9iai5fX2lzVnVlKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7fSxcbiAgICAgICAgICAuLi5mb3JtYXRJbnN0YW5jZShvYmouJClcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGZ1bmN0aW9uIGZvcm1hdEluc3RhbmNlKGluc3RhbmNlKSB7XG4gICAgY29uc3QgYmxvY2tzID0gW107XG4gICAgaWYgKGluc3RhbmNlLnR5cGUucHJvcHMgJiYgaW5zdGFuY2UucHJvcHMpIHtcbiAgICAgIGJsb2Nrcy5wdXNoKGNyZWF0ZUluc3RhbmNlQmxvY2soXCJwcm9wc1wiLCB0b1JhdyhpbnN0YW5jZS5wcm9wcykpKTtcbiAgICB9XG4gICAgaWYgKGluc3RhbmNlLnNldHVwU3RhdGUgIT09IEVNUFRZX09CSikge1xuICAgICAgYmxvY2tzLnB1c2goY3JlYXRlSW5zdGFuY2VCbG9jayhcInNldHVwXCIsIGluc3RhbmNlLnNldHVwU3RhdGUpKTtcbiAgICB9XG4gICAgaWYgKGluc3RhbmNlLmRhdGEgIT09IEVNUFRZX09CSikge1xuICAgICAgYmxvY2tzLnB1c2goY3JlYXRlSW5zdGFuY2VCbG9jayhcImRhdGFcIiwgdG9SYXcoaW5zdGFuY2UuZGF0YSkpKTtcbiAgICB9XG4gICAgY29uc3QgY29tcHV0ZWQgPSBleHRyYWN0S2V5cyhpbnN0YW5jZSwgXCJjb21wdXRlZFwiKTtcbiAgICBpZiAoY29tcHV0ZWQpIHtcbiAgICAgIGJsb2Nrcy5wdXNoKGNyZWF0ZUluc3RhbmNlQmxvY2soXCJjb21wdXRlZFwiLCBjb21wdXRlZCkpO1xuICAgIH1cbiAgICBjb25zdCBpbmplY3RlZCA9IGV4dHJhY3RLZXlzKGluc3RhbmNlLCBcImluamVjdFwiKTtcbiAgICBpZiAoaW5qZWN0ZWQpIHtcbiAgICAgIGJsb2Nrcy5wdXNoKGNyZWF0ZUluc3RhbmNlQmxvY2soXCJpbmplY3RlZFwiLCBpbmplY3RlZCkpO1xuICAgIH1cbiAgICBibG9ja3MucHVzaChbXG4gICAgICBcImRpdlwiLFxuICAgICAge30sXG4gICAgICBbXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IGtleXdvcmRTdHlsZS5zdHlsZSArIFwiO29wYWNpdHk6MC42NlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiJCAoaW50ZXJuYWwpOiBcIlxuICAgICAgXSxcbiAgICAgIFtcIm9iamVjdFwiLCB7IG9iamVjdDogaW5zdGFuY2UgfV1cbiAgICBdKTtcbiAgICByZXR1cm4gYmxvY2tzO1xuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlQmxvY2sodHlwZSwgdGFyZ2V0KSB7XG4gICAgdGFyZ2V0ID0gZXh0ZW5kKHt9LCB0YXJnZXQpO1xuICAgIGlmICghT2JqZWN0LmtleXModGFyZ2V0KS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXCJzcGFuXCIsIHt9XTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IHN0eWxlOiBcImxpbmUtaGVpZ2h0OjEuMjVlbTttYXJnaW4tYm90dG9tOjAuNmVtXCIgfSxcbiAgICAgIFtcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiBcImNvbG9yOiM0NzY1ODJcIlxuICAgICAgICB9LFxuICAgICAgICB0eXBlXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IFwicGFkZGluZy1sZWZ0OjEuMjVlbVwiXG4gICAgICAgIH0sXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHRhcmdldCkubWFwKChrZXkpID0+IHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgW1wic3BhblwiLCBrZXl3b3JkU3R5bGUsIGtleSArIFwiOiBcIl0sXG4gICAgICAgICAgICBmb3JtYXRWYWx1ZSh0YXJnZXRba2V5XSwgZmFsc2UpXG4gICAgICAgICAgXTtcbiAgICAgICAgfSlcbiAgICAgIF1cbiAgICBdO1xuICB9XG4gIGZ1bmN0aW9uIGZvcm1hdFZhbHVlKHYsIGFzUmF3ID0gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgcmV0dXJuIFtcInNwYW5cIiwgbnVtYmVyU3R5bGUsIHZdO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBbXCJzcGFuXCIsIHN0cmluZ1N0eWxlLCBKU09OLnN0cmluZ2lmeSh2KV07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBbXCJzcGFuXCIsIGtleXdvcmRTdHlsZSwgdl07XG4gICAgfSBlbHNlIGlmIChpc09iamVjdCh2KSkge1xuICAgICAgcmV0dXJuIFtcIm9iamVjdFwiLCB7IG9iamVjdDogYXNSYXcgPyB0b1Jhdyh2KSA6IHYgfV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXCJzcGFuXCIsIHN0cmluZ1N0eWxlLCBTdHJpbmcodildO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBleHRyYWN0S2V5cyhpbnN0YW5jZSwgdHlwZSkge1xuICAgIGNvbnN0IENvbXAgPSBpbnN0YW5jZS50eXBlO1xuICAgIGlmIChpc0Z1bmN0aW9uKENvbXApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV4dHJhY3RlZCA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIGluc3RhbmNlLmN0eCkge1xuICAgICAgaWYgKGlzS2V5T2ZUeXBlKENvbXAsIGtleSwgdHlwZSkpIHtcbiAgICAgICAgZXh0cmFjdGVkW2tleV0gPSBpbnN0YW5jZS5jdHhba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4dHJhY3RlZDtcbiAgfVxuICBmdW5jdGlvbiBpc0tleU9mVHlwZShDb21wLCBrZXksIHR5cGUpIHtcbiAgICBjb25zdCBvcHRzID0gQ29tcFt0eXBlXTtcbiAgICBpZiAoaXNBcnJheShvcHRzKSAmJiBvcHRzLmluY2x1ZGVzKGtleSkgfHwgaXNPYmplY3Qob3B0cykgJiYga2V5IGluIG9wdHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoQ29tcC5leHRlbmRzICYmIGlzS2V5T2ZUeXBlKENvbXAuZXh0ZW5kcywga2V5LCB0eXBlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChDb21wLm1peGlucyAmJiBDb21wLm1peGlucy5zb21lKChtKSA9PiBpc0tleU9mVHlwZShtLCBrZXksIHR5cGUpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdlblJlZkZsYWcodikge1xuICAgIGlmIChpc1NoYWxsb3codikpIHtcbiAgICAgIHJldHVybiBgU2hhbGxvd1JlZmA7XG4gICAgfVxuICAgIGlmICh2LmVmZmVjdCkge1xuICAgICAgcmV0dXJuIGBDb21wdXRlZFJlZmA7XG4gICAgfVxuICAgIHJldHVybiBgUmVmYDtcbiAgfVxuICBpZiAod2luZG93LmRldnRvb2xzRm9ybWF0dGVycykge1xuICAgIHdpbmRvdy5kZXZ0b29sc0Zvcm1hdHRlcnMucHVzaChmb3JtYXR0ZXIpO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5kZXZ0b29sc0Zvcm1hdHRlcnMgPSBbZm9ybWF0dGVyXTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3aXRoTWVtbyhtZW1vLCByZW5kZXIsIGNhY2hlLCBpbmRleCkge1xuICBjb25zdCBjYWNoZWQgPSBjYWNoZVtpbmRleF07XG4gIGlmIChjYWNoZWQgJiYgaXNNZW1vU2FtZShjYWNoZWQsIG1lbW8pKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuICBjb25zdCByZXQgPSByZW5kZXIoKTtcbiAgcmV0Lm1lbW8gPSBtZW1vLnNsaWNlKCk7XG4gIHJldHVybiBjYWNoZVtpbmRleF0gPSByZXQ7XG59XG5mdW5jdGlvbiBpc01lbW9TYW1lKGNhY2hlZCwgbWVtbykge1xuICBjb25zdCBwcmV2ID0gY2FjaGVkLm1lbW87XG4gIGlmIChwcmV2Lmxlbmd0aCAhPSBtZW1vLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXYubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaGFzQ2hhbmdlZChwcmV2W2ldLCBtZW1vW2ldKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoaXNCbG9ja1RyZWVFbmFibGVkID4gMCAmJiBjdXJyZW50QmxvY2spIHtcbiAgICBjdXJyZW50QmxvY2sucHVzaChjYWNoZWQpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5jb25zdCB2ZXJzaW9uID0gXCIzLjQuMjFcIjtcbmNvbnN0IHdhcm4gPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpID8gd2FybiQxIDogTk9PUDtcbmNvbnN0IEVycm9yVHlwZVN0cmluZ3MgPSBFcnJvclR5cGVTdHJpbmdzJDEgO1xuY29uc3QgZGV2dG9vbHMgPSAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHx8IHRydWUgPyBkZXZ0b29scyQxIDogdm9pZCAwO1xuY29uc3Qgc2V0RGV2dG9vbHNIb29rID0gISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB8fCB0cnVlID8gc2V0RGV2dG9vbHNIb29rJDEgOiBOT09QO1xuY29uc3QgX3NzclV0aWxzID0ge1xuICBjcmVhdGVDb21wb25lbnRJbnN0YW5jZSxcbiAgc2V0dXBDb21wb25lbnQsXG4gIHJlbmRlckNvbXBvbmVudFJvb3QsXG4gIHNldEN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSxcbiAgaXNWTm9kZTogaXNWTm9kZSxcbiAgbm9ybWFsaXplVk5vZGVcbn07XG5jb25zdCBzc3JVdGlscyA9IF9zc3JVdGlscyA7XG5jb25zdCByZXNvbHZlRmlsdGVyID0gbnVsbDtcbmNvbnN0IGNvbXBhdFV0aWxzID0gbnVsbDtcbmNvbnN0IERlcHJlY2F0aW9uVHlwZXMgPSBudWxsO1xuXG5leHBvcnQgeyBCYXNlVHJhbnNpdGlvbiwgQmFzZVRyYW5zaXRpb25Qcm9wc1ZhbGlkYXRvcnMsIENvbW1lbnQsIERlcHJlY2F0aW9uVHlwZXMsIEVycm9yQ29kZXMsIEVycm9yVHlwZVN0cmluZ3MsIEZyYWdtZW50LCBLZWVwQWxpdmUsIFN0YXRpYywgU3VzcGVuc2UsIFRlbGVwb3J0LCBUZXh0LCBhc3NlcnROdW1iZXIsIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nLCBjYWxsV2l0aEVycm9ySGFuZGxpbmcsIGNsb25lVk5vZGUsIGNvbXBhdFV0aWxzLCBjb21wdXRlZCwgY3JlYXRlQmxvY2ssIGNyZWF0ZUNvbW1lbnRWTm9kZSwgY3JlYXRlRWxlbWVudEJsb2NrLCBjcmVhdGVCYXNlVk5vZGUgYXMgY3JlYXRlRWxlbWVudFZOb2RlLCBjcmVhdGVIeWRyYXRpb25SZW5kZXJlciwgY3JlYXRlUHJvcHNSZXN0UHJveHksIGNyZWF0ZVJlbmRlcmVyLCBjcmVhdGVTbG90cywgY3JlYXRlU3RhdGljVk5vZGUsIGNyZWF0ZVRleHRWTm9kZSwgY3JlYXRlVk5vZGUsIGRlZmluZUFzeW5jQ29tcG9uZW50LCBkZWZpbmVDb21wb25lbnQsIGRlZmluZUVtaXRzLCBkZWZpbmVFeHBvc2UsIGRlZmluZU1vZGVsLCBkZWZpbmVPcHRpb25zLCBkZWZpbmVQcm9wcywgZGVmaW5lU2xvdHMsIGRldnRvb2xzLCBnZXRDdXJyZW50SW5zdGFuY2UsIGdldFRyYW5zaXRpb25SYXdDaGlsZHJlbiwgZ3VhcmRSZWFjdGl2ZVByb3BzLCBoLCBoYW5kbGVFcnJvciwgaGFzSW5qZWN0aW9uQ29udGV4dCwgaW5pdEN1c3RvbUZvcm1hdHRlciwgaW5qZWN0LCBpc01lbW9TYW1lLCBpc1J1bnRpbWVPbmx5LCBpc1ZOb2RlLCBtZXJnZURlZmF1bHRzLCBtZXJnZU1vZGVscywgbWVyZ2VQcm9wcywgbmV4dFRpY2ssIG9uQWN0aXZhdGVkLCBvbkJlZm9yZU1vdW50LCBvbkJlZm9yZVVubW91bnQsIG9uQmVmb3JlVXBkYXRlLCBvbkRlYWN0aXZhdGVkLCBvbkVycm9yQ2FwdHVyZWQsIG9uTW91bnRlZCwgb25SZW5kZXJUcmFja2VkLCBvblJlbmRlclRyaWdnZXJlZCwgb25TZXJ2ZXJQcmVmZXRjaCwgb25Vbm1vdW50ZWQsIG9uVXBkYXRlZCwgb3BlbkJsb2NrLCBwb3BTY29wZUlkLCBwcm92aWRlLCBwdXNoU2NvcGVJZCwgcXVldWVQb3N0Rmx1c2hDYiwgcmVnaXN0ZXJSdW50aW1lQ29tcGlsZXIsIHJlbmRlckxpc3QsIHJlbmRlclNsb3QsIHJlc29sdmVDb21wb25lbnQsIHJlc29sdmVEaXJlY3RpdmUsIHJlc29sdmVEeW5hbWljQ29tcG9uZW50LCByZXNvbHZlRmlsdGVyLCByZXNvbHZlVHJhbnNpdGlvbkhvb2tzLCBzZXRCbG9ja1RyYWNraW5nLCBzZXREZXZ0b29sc0hvb2ssIHNldFRyYW5zaXRpb25Ib29rcywgc3NyQ29udGV4dEtleSwgc3NyVXRpbHMsIHRvSGFuZGxlcnMsIHRyYW5zZm9ybVZOb2RlQXJncywgdXNlQXR0cnMsIHVzZU1vZGVsLCB1c2VTU1JDb250ZXh0LCB1c2VTbG90cywgdXNlVHJhbnNpdGlvblN0YXRlLCB2ZXJzaW9uLCB3YXJuLCB3YXRjaCwgd2F0Y2hFZmZlY3QsIHdhdGNoUG9zdEVmZmVjdCwgd2F0Y2hTeW5jRWZmZWN0LCB3aXRoQXN5bmNDb250ZXh0LCB3aXRoQ3R4LCB3aXRoRGVmYXVsdHMsIHdpdGhEaXJlY3RpdmVzLCB3aXRoTWVtbywgd2l0aFNjb3BlSWQgfTtcbiIsIi8qKlxuKiBAdnVlL3J1bnRpbWUtZG9tIHYzLjQuMjFcbiogKGMpIDIwMTgtcHJlc2VudCBZdXhpIChFdmFuKSBZb3UgYW5kIFZ1ZSBjb250cmlidXRvcnNcbiogQGxpY2Vuc2UgTUlUXG4qKi9cbmltcG9ydCB7IGgsIEJhc2VUcmFuc2l0aW9uLCBCYXNlVHJhbnNpdGlvblByb3BzVmFsaWRhdG9ycywgYXNzZXJ0TnVtYmVyLCBnZXRDdXJyZW50SW5zdGFuY2UsIHdhcm4sIHdhdGNoUG9zdEVmZmVjdCwgb25Nb3VudGVkLCBvblVubW91bnRlZCwgRnJhZ21lbnQsIFN0YXRpYywgY2FtZWxpemUsIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nLCBkZWZpbmVDb21wb25lbnQsIG5leHRUaWNrLCBjcmVhdGVWTm9kZSwgdXNlVHJhbnNpdGlvblN0YXRlLCBvblVwZGF0ZWQsIHRvUmF3LCBnZXRUcmFuc2l0aW9uUmF3Q2hpbGRyZW4sIHNldFRyYW5zaXRpb25Ib29rcywgcmVzb2x2ZVRyYW5zaXRpb25Ib29rcywgaXNSdW50aW1lT25seSwgY3JlYXRlUmVuZGVyZXIsIGNyZWF0ZUh5ZHJhdGlvblJlbmRlcmVyIH0gZnJvbSAnQHZ1ZS9ydW50aW1lLWNvcmUnO1xuZXhwb3J0ICogZnJvbSAnQHZ1ZS9ydW50aW1lLWNvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBpc09iamVjdCwgdG9OdW1iZXIsIGlzQXJyYXksIGlzU3RyaW5nLCBoeXBoZW5hdGUsIGNhcGl0YWxpemUsIGlzU3BlY2lhbEJvb2xlYW5BdHRyLCBpbmNsdWRlQm9vbGVhbkF0dHIsIGlzT24sIGlzTW9kZWxMaXN0ZW5lciwgaXNGdW5jdGlvbiwgY2FtZWxpemUgYXMgY2FtZWxpemUkMSwgRU1QVFlfT0JKLCBsb29zZVRvTnVtYmVyLCBsb29zZUluZGV4T2YsIGlzU2V0LCBsb29zZUVxdWFsLCBpbnZva2VBcnJheUZucywgaXNIVE1MVGFnLCBpc1NWR1RhZywgaXNNYXRoTUxUYWcgfSBmcm9tICdAdnVlL3NoYXJlZCc7XG5cbmNvbnN0IHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuY29uc3QgbWF0aG1sTlMgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIjtcbmNvbnN0IGRvYyA9IHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiA/IGRvY3VtZW50IDogbnVsbDtcbmNvbnN0IHRlbXBsYXRlQ29udGFpbmVyID0gZG9jICYmIC8qIEBfX1BVUkVfXyAqLyBkb2MuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuY29uc3Qgbm9kZU9wcyA9IHtcbiAgaW5zZXJ0OiAoY2hpbGQsIHBhcmVudCwgYW5jaG9yKSA9PiB7XG4gICAgcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgYW5jaG9yIHx8IG51bGwpO1xuICB9LFxuICByZW1vdmU6IChjaGlsZCkgPT4ge1xuICAgIGNvbnN0IHBhcmVudCA9IGNoaWxkLnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICB9XG4gIH0sXG4gIGNyZWF0ZUVsZW1lbnQ6ICh0YWcsIG5hbWVzcGFjZSwgaXMsIHByb3BzKSA9PiB7XG4gICAgY29uc3QgZWwgPSBuYW1lc3BhY2UgPT09IFwic3ZnXCIgPyBkb2MuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCB0YWcpIDogbmFtZXNwYWNlID09PSBcIm1hdGhtbFwiID8gZG9jLmNyZWF0ZUVsZW1lbnROUyhtYXRobWxOUywgdGFnKSA6IGRvYy5jcmVhdGVFbGVtZW50KHRhZywgaXMgPyB7IGlzIH0gOiB2b2lkIDApO1xuICAgIGlmICh0YWcgPT09IFwic2VsZWN0XCIgJiYgcHJvcHMgJiYgcHJvcHMubXVsdGlwbGUgIT0gbnVsbCkge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKFwibXVsdGlwbGVcIiwgcHJvcHMubXVsdGlwbGUpO1xuICAgIH1cbiAgICByZXR1cm4gZWw7XG4gIH0sXG4gIGNyZWF0ZVRleHQ6ICh0ZXh0KSA9PiBkb2MuY3JlYXRlVGV4dE5vZGUodGV4dCksXG4gIGNyZWF0ZUNvbW1lbnQ6ICh0ZXh0KSA9PiBkb2MuY3JlYXRlQ29tbWVudCh0ZXh0KSxcbiAgc2V0VGV4dDogKG5vZGUsIHRleHQpID0+IHtcbiAgICBub2RlLm5vZGVWYWx1ZSA9IHRleHQ7XG4gIH0sXG4gIHNldEVsZW1lbnRUZXh0OiAoZWwsIHRleHQpID0+IHtcbiAgICBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIH0sXG4gIHBhcmVudE5vZGU6IChub2RlKSA9PiBub2RlLnBhcmVudE5vZGUsXG4gIG5leHRTaWJsaW5nOiAobm9kZSkgPT4gbm9kZS5uZXh0U2libGluZyxcbiAgcXVlcnlTZWxlY3RvcjogKHNlbGVjdG9yKSA9PiBkb2MucXVlcnlTZWxlY3RvcihzZWxlY3RvciksXG4gIHNldFNjb3BlSWQoZWwsIGlkKSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKGlkLCBcIlwiKTtcbiAgfSxcbiAgLy8gX19VTlNBRkVfX1xuICAvLyBSZWFzb246IGlubmVySFRNTC5cbiAgLy8gU3RhdGljIGNvbnRlbnQgaGVyZSBjYW4gb25seSBjb21lIGZyb20gY29tcGlsZWQgdGVtcGxhdGVzLlxuICAvLyBBcyBsb25nIGFzIHRoZSB1c2VyIG9ubHkgdXNlcyB0cnVzdGVkIHRlbXBsYXRlcywgdGhpcyBpcyBzYWZlLlxuICBpbnNlcnRTdGF0aWNDb250ZW50KGNvbnRlbnQsIHBhcmVudCwgYW5jaG9yLCBuYW1lc3BhY2UsIHN0YXJ0LCBlbmQpIHtcbiAgICBjb25zdCBiZWZvcmUgPSBhbmNob3IgPyBhbmNob3IucHJldmlvdXNTaWJsaW5nIDogcGFyZW50Lmxhc3RDaGlsZDtcbiAgICBpZiAoc3RhcnQgJiYgKHN0YXJ0ID09PSBlbmQgfHwgc3RhcnQubmV4dFNpYmxpbmcpKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHN0YXJ0LmNsb25lTm9kZSh0cnVlKSwgYW5jaG9yKTtcbiAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQgfHwgIShzdGFydCA9IHN0YXJ0Lm5leHRTaWJsaW5nKSlcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGVtcGxhdGVDb250YWluZXIuaW5uZXJIVE1MID0gbmFtZXNwYWNlID09PSBcInN2Z1wiID8gYDxzdmc+JHtjb250ZW50fTwvc3ZnPmAgOiBuYW1lc3BhY2UgPT09IFwibWF0aG1sXCIgPyBgPG1hdGg+JHtjb250ZW50fTwvbWF0aD5gIDogY29udGVudDtcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGVtcGxhdGVDb250YWluZXIuY29udGVudDtcbiAgICAgIGlmIChuYW1lc3BhY2UgPT09IFwic3ZnXCIgfHwgbmFtZXNwYWNlID09PSBcIm1hdGhtbFwiKSB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSB0ZW1wbGF0ZS5maXJzdENoaWxkO1xuICAgICAgICB3aGlsZSAod3JhcHBlci5maXJzdENoaWxkKSB7XG4gICAgICAgICAgdGVtcGxhdGUuYXBwZW5kQ2hpbGQod3JhcHBlci5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZS5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUodGVtcGxhdGUsIGFuY2hvcik7XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICAvLyBmaXJzdFxuICAgICAgYmVmb3JlID8gYmVmb3JlLm5leHRTaWJsaW5nIDogcGFyZW50LmZpcnN0Q2hpbGQsXG4gICAgICAvLyBsYXN0XG4gICAgICBhbmNob3IgPyBhbmNob3IucHJldmlvdXNTaWJsaW5nIDogcGFyZW50Lmxhc3RDaGlsZFxuICAgIF07XG4gIH1cbn07XG5cbmNvbnN0IFRSQU5TSVRJT04gPSBcInRyYW5zaXRpb25cIjtcbmNvbnN0IEFOSU1BVElPTiA9IFwiYW5pbWF0aW9uXCI7XG5jb25zdCB2dGNLZXkgPSBTeW1ib2woXCJfdnRjXCIpO1xuY29uc3QgVHJhbnNpdGlvbiA9IChwcm9wcywgeyBzbG90cyB9KSA9PiBoKEJhc2VUcmFuc2l0aW9uLCByZXNvbHZlVHJhbnNpdGlvblByb3BzKHByb3BzKSwgc2xvdHMpO1xuVHJhbnNpdGlvbi5kaXNwbGF5TmFtZSA9IFwiVHJhbnNpdGlvblwiO1xuY29uc3QgRE9NVHJhbnNpdGlvblByb3BzVmFsaWRhdG9ycyA9IHtcbiAgbmFtZTogU3RyaW5nLFxuICB0eXBlOiBTdHJpbmcsXG4gIGNzczoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogdHJ1ZVxuICB9LFxuICBkdXJhdGlvbjogW1N0cmluZywgTnVtYmVyLCBPYmplY3RdLFxuICBlbnRlckZyb21DbGFzczogU3RyaW5nLFxuICBlbnRlckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGVudGVyVG9DbGFzczogU3RyaW5nLFxuICBhcHBlYXJGcm9tQ2xhc3M6IFN0cmluZyxcbiAgYXBwZWFyQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgYXBwZWFyVG9DbGFzczogU3RyaW5nLFxuICBsZWF2ZUZyb21DbGFzczogU3RyaW5nLFxuICBsZWF2ZUFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGxlYXZlVG9DbGFzczogU3RyaW5nXG59O1xuY29uc3QgVHJhbnNpdGlvblByb3BzVmFsaWRhdG9ycyA9IFRyYW5zaXRpb24ucHJvcHMgPSAvKiBAX19QVVJFX18gKi8gZXh0ZW5kKFxuICB7fSxcbiAgQmFzZVRyYW5zaXRpb25Qcm9wc1ZhbGlkYXRvcnMsXG4gIERPTVRyYW5zaXRpb25Qcm9wc1ZhbGlkYXRvcnNcbik7XG5jb25zdCBjYWxsSG9vayA9IChob29rLCBhcmdzID0gW10pID0+IHtcbiAgaWYgKGlzQXJyYXkoaG9vaykpIHtcbiAgICBob29rLmZvckVhY2goKGgyKSA9PiBoMiguLi5hcmdzKSk7XG4gIH0gZWxzZSBpZiAoaG9vaykge1xuICAgIGhvb2soLi4uYXJncyk7XG4gIH1cbn07XG5jb25zdCBoYXNFeHBsaWNpdENhbGxiYWNrID0gKGhvb2spID0+IHtcbiAgcmV0dXJuIGhvb2sgPyBpc0FycmF5KGhvb2spID8gaG9vay5zb21lKChoMikgPT4gaDIubGVuZ3RoID4gMSkgOiBob29rLmxlbmd0aCA+IDEgOiBmYWxzZTtcbn07XG5mdW5jdGlvbiByZXNvbHZlVHJhbnNpdGlvblByb3BzKHJhd1Byb3BzKSB7XG4gIGNvbnN0IGJhc2VQcm9wcyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiByYXdQcm9wcykge1xuICAgIGlmICghKGtleSBpbiBET01UcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzKSkge1xuICAgICAgYmFzZVByb3BzW2tleV0gPSByYXdQcm9wc1trZXldO1xuICAgIH1cbiAgfVxuICBpZiAocmF3UHJvcHMuY3NzID09PSBmYWxzZSkge1xuICAgIHJldHVybiBiYXNlUHJvcHM7XG4gIH1cbiAgY29uc3Qge1xuICAgIG5hbWUgPSBcInZcIixcbiAgICB0eXBlLFxuICAgIGR1cmF0aW9uLFxuICAgIGVudGVyRnJvbUNsYXNzID0gYCR7bmFtZX0tZW50ZXItZnJvbWAsXG4gICAgZW50ZXJBY3RpdmVDbGFzcyA9IGAke25hbWV9LWVudGVyLWFjdGl2ZWAsXG4gICAgZW50ZXJUb0NsYXNzID0gYCR7bmFtZX0tZW50ZXItdG9gLFxuICAgIGFwcGVhckZyb21DbGFzcyA9IGVudGVyRnJvbUNsYXNzLFxuICAgIGFwcGVhckFjdGl2ZUNsYXNzID0gZW50ZXJBY3RpdmVDbGFzcyxcbiAgICBhcHBlYXJUb0NsYXNzID0gZW50ZXJUb0NsYXNzLFxuICAgIGxlYXZlRnJvbUNsYXNzID0gYCR7bmFtZX0tbGVhdmUtZnJvbWAsXG4gICAgbGVhdmVBY3RpdmVDbGFzcyA9IGAke25hbWV9LWxlYXZlLWFjdGl2ZWAsXG4gICAgbGVhdmVUb0NsYXNzID0gYCR7bmFtZX0tbGVhdmUtdG9gXG4gIH0gPSByYXdQcm9wcztcbiAgY29uc3QgZHVyYXRpb25zID0gbm9ybWFsaXplRHVyYXRpb24oZHVyYXRpb24pO1xuICBjb25zdCBlbnRlckR1cmF0aW9uID0gZHVyYXRpb25zICYmIGR1cmF0aW9uc1swXTtcbiAgY29uc3QgbGVhdmVEdXJhdGlvbiA9IGR1cmF0aW9ucyAmJiBkdXJhdGlvbnNbMV07XG4gIGNvbnN0IHtcbiAgICBvbkJlZm9yZUVudGVyLFxuICAgIG9uRW50ZXIsXG4gICAgb25FbnRlckNhbmNlbGxlZCxcbiAgICBvbkxlYXZlLFxuICAgIG9uTGVhdmVDYW5jZWxsZWQsXG4gICAgb25CZWZvcmVBcHBlYXIgPSBvbkJlZm9yZUVudGVyLFxuICAgIG9uQXBwZWFyID0gb25FbnRlcixcbiAgICBvbkFwcGVhckNhbmNlbGxlZCA9IG9uRW50ZXJDYW5jZWxsZWRcbiAgfSA9IGJhc2VQcm9wcztcbiAgY29uc3QgZmluaXNoRW50ZXIgPSAoZWwsIGlzQXBwZWFyLCBkb25lKSA9PiB7XG4gICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBpc0FwcGVhciA/IGFwcGVhclRvQ2xhc3MgOiBlbnRlclRvQ2xhc3MpO1xuICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgaXNBcHBlYXIgPyBhcHBlYXJBY3RpdmVDbGFzcyA6IGVudGVyQWN0aXZlQ2xhc3MpO1xuICAgIGRvbmUgJiYgZG9uZSgpO1xuICB9O1xuICBjb25zdCBmaW5pc2hMZWF2ZSA9IChlbCwgZG9uZSkgPT4ge1xuICAgIGVsLl9pc0xlYXZpbmcgPSBmYWxzZTtcbiAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlRnJvbUNsYXNzKTtcbiAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICBkb25lICYmIGRvbmUoKTtcbiAgfTtcbiAgY29uc3QgbWFrZUVudGVySG9vayA9IChpc0FwcGVhcikgPT4ge1xuICAgIHJldHVybiAoZWwsIGRvbmUpID0+IHtcbiAgICAgIGNvbnN0IGhvb2sgPSBpc0FwcGVhciA/IG9uQXBwZWFyIDogb25FbnRlcjtcbiAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBmaW5pc2hFbnRlcihlbCwgaXNBcHBlYXIsIGRvbmUpO1xuICAgICAgY2FsbEhvb2soaG9vaywgW2VsLCByZXNvbHZlXSk7XG4gICAgICBuZXh0RnJhbWUoKCkgPT4ge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGlzQXBwZWFyID8gYXBwZWFyRnJvbUNsYXNzIDogZW50ZXJGcm9tQ2xhc3MpO1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGlzQXBwZWFyID8gYXBwZWFyVG9DbGFzcyA6IGVudGVyVG9DbGFzcyk7XG4gICAgICAgIGlmICghaGFzRXhwbGljaXRDYWxsYmFjayhob29rKSkge1xuICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgZW50ZXJEdXJhdGlvbiwgcmVzb2x2ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG4gIHJldHVybiBleHRlbmQoYmFzZVByb3BzLCB7XG4gICAgb25CZWZvcmVFbnRlcihlbCkge1xuICAgICAgY2FsbEhvb2sob25CZWZvcmVFbnRlciwgW2VsXSk7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGVudGVyRnJvbUNsYXNzKTtcbiAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgZW50ZXJBY3RpdmVDbGFzcyk7XG4gICAgfSxcbiAgICBvbkJlZm9yZUFwcGVhcihlbCkge1xuICAgICAgY2FsbEhvb2sob25CZWZvcmVBcHBlYXIsIFtlbF0pO1xuICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBhcHBlYXJGcm9tQ2xhc3MpO1xuICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBhcHBlYXJBY3RpdmVDbGFzcyk7XG4gICAgfSxcbiAgICBvbkVudGVyOiBtYWtlRW50ZXJIb29rKGZhbHNlKSxcbiAgICBvbkFwcGVhcjogbWFrZUVudGVySG9vayh0cnVlKSxcbiAgICBvbkxlYXZlKGVsLCBkb25lKSB7XG4gICAgICBlbC5faXNMZWF2aW5nID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBmaW5pc2hMZWF2ZShlbCwgZG9uZSk7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlRnJvbUNsYXNzKTtcbiAgICAgIGZvcmNlUmVmbG93KCk7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgICAgbmV4dEZyYW1lKCgpID0+IHtcbiAgICAgICAgaWYgKCFlbC5faXNMZWF2aW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVGcm9tQ2xhc3MpO1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICAgIGlmICghaGFzRXhwbGljaXRDYWxsYmFjayhvbkxlYXZlKSkge1xuICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgbGVhdmVEdXJhdGlvbiwgcmVzb2x2ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY2FsbEhvb2sob25MZWF2ZSwgW2VsLCByZXNvbHZlXSk7XG4gICAgfSxcbiAgICBvbkVudGVyQ2FuY2VsbGVkKGVsKSB7XG4gICAgICBmaW5pc2hFbnRlcihlbCwgZmFsc2UpO1xuICAgICAgY2FsbEhvb2sob25FbnRlckNhbmNlbGxlZCwgW2VsXSk7XG4gICAgfSxcbiAgICBvbkFwcGVhckNhbmNlbGxlZChlbCkge1xuICAgICAgZmluaXNoRW50ZXIoZWwsIHRydWUpO1xuICAgICAgY2FsbEhvb2sob25BcHBlYXJDYW5jZWxsZWQsIFtlbF0pO1xuICAgIH0sXG4gICAgb25MZWF2ZUNhbmNlbGxlZChlbCkge1xuICAgICAgZmluaXNoTGVhdmUoZWwpO1xuICAgICAgY2FsbEhvb2sob25MZWF2ZUNhbmNlbGxlZCwgW2VsXSk7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZUR1cmF0aW9uKGR1cmF0aW9uKSB7XG4gIGlmIChkdXJhdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoZHVyYXRpb24pKSB7XG4gICAgcmV0dXJuIFtOdW1iZXJPZihkdXJhdGlvbi5lbnRlciksIE51bWJlck9mKGR1cmF0aW9uLmxlYXZlKV07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbiA9IE51bWJlck9mKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gW24sIG5dO1xuICB9XG59XG5mdW5jdGlvbiBOdW1iZXJPZih2YWwpIHtcbiAgY29uc3QgcmVzID0gdG9OdW1iZXIodmFsKTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBhc3NlcnROdW1iZXIocmVzLCBcIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBkdXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBjbHMpIHtcbiAgY2xzLnNwbGl0KC9cXHMrLykuZm9yRWFjaCgoYykgPT4gYyAmJiBlbC5jbGFzc0xpc3QuYWRkKGMpKTtcbiAgKGVsW3Z0Y0tleV0gfHwgKGVsW3Z0Y0tleV0gPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSkuYWRkKGNscyk7XG59XG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGNscykge1xuICBjbHMuc3BsaXQoL1xccysvKS5mb3JFYWNoKChjKSA9PiBjICYmIGVsLmNsYXNzTGlzdC5yZW1vdmUoYykpO1xuICBjb25zdCBfdnRjID0gZWxbdnRjS2V5XTtcbiAgaWYgKF92dGMpIHtcbiAgICBfdnRjLmRlbGV0ZShjbHMpO1xuICAgIGlmICghX3Z0Yy5zaXplKSB7XG4gICAgICBlbFt2dGNLZXldID0gdm9pZCAwO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbmV4dEZyYW1lKGNiKSB7XG4gIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNiKTtcbiAgfSk7XG59XG5sZXQgZW5kSWQgPSAwO1xuZnVuY3Rpb24gd2hlblRyYW5zaXRpb25FbmRzKGVsLCBleHBlY3RlZFR5cGUsIGV4cGxpY2l0VGltZW91dCwgcmVzb2x2ZSkge1xuICBjb25zdCBpZCA9IGVsLl9lbmRJZCA9ICsrZW5kSWQ7XG4gIGNvbnN0IHJlc29sdmVJZk5vdFN0YWxlID0gKCkgPT4ge1xuICAgIGlmIChpZCA9PT0gZWwuX2VuZElkKSB7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfVxuICB9O1xuICBpZiAoZXhwbGljaXRUaW1lb3V0KSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQocmVzb2x2ZUlmTm90U3RhbGUsIGV4cGxpY2l0VGltZW91dCk7XG4gIH1cbiAgY29uc3QgeyB0eXBlLCB0aW1lb3V0LCBwcm9wQ291bnQgfSA9IGdldFRyYW5zaXRpb25JbmZvKGVsLCBleHBlY3RlZFR5cGUpO1xuICBpZiAoIXR5cGUpIHtcbiAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICB9XG4gIGNvbnN0IGVuZEV2ZW50ID0gdHlwZSArIFwiZW5kXCI7XG4gIGxldCBlbmRlZCA9IDA7XG4gIGNvbnN0IGVuZCA9ICgpID0+IHtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGVuZEV2ZW50LCBvbkVuZCk7XG4gICAgcmVzb2x2ZUlmTm90U3RhbGUoKTtcbiAgfTtcbiAgY29uc3Qgb25FbmQgPSAoZSkgPT4ge1xuICAgIGlmIChlLnRhcmdldCA9PT0gZWwgJiYgKytlbmRlZCA+PSBwcm9wQ291bnQpIHtcbiAgICAgIGVuZCgpO1xuICAgIH1cbiAgfTtcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgaWYgKGVuZGVkIDwgcHJvcENvdW50KSB7XG4gICAgICBlbmQoKTtcbiAgICB9XG4gIH0sIHRpbWVvdXQgKyAxKTtcbiAgZWwuYWRkRXZlbnRMaXN0ZW5lcihlbmRFdmVudCwgb25FbmQpO1xufVxuZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkluZm8oZWwsIGV4cGVjdGVkVHlwZSkge1xuICBjb25zdCBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG4gIGNvbnN0IGdldFN0eWxlUHJvcGVydGllcyA9IChrZXkpID0+IChzdHlsZXNba2V5XSB8fCBcIlwiKS5zcGxpdChcIiwgXCIpO1xuICBjb25zdCB0cmFuc2l0aW9uRGVsYXlzID0gZ2V0U3R5bGVQcm9wZXJ0aWVzKGAke1RSQU5TSVRJT059RGVsYXlgKTtcbiAgY29uc3QgdHJhbnNpdGlvbkR1cmF0aW9ucyA9IGdldFN0eWxlUHJvcGVydGllcyhgJHtUUkFOU0lUSU9OfUR1cmF0aW9uYCk7XG4gIGNvbnN0IHRyYW5zaXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dCh0cmFuc2l0aW9uRGVsYXlzLCB0cmFuc2l0aW9uRHVyYXRpb25zKTtcbiAgY29uc3QgYW5pbWF0aW9uRGVsYXlzID0gZ2V0U3R5bGVQcm9wZXJ0aWVzKGAke0FOSU1BVElPTn1EZWxheWApO1xuICBjb25zdCBhbmltYXRpb25EdXJhdGlvbnMgPSBnZXRTdHlsZVByb3BlcnRpZXMoYCR7QU5JTUFUSU9OfUR1cmF0aW9uYCk7XG4gIGNvbnN0IGFuaW1hdGlvblRpbWVvdXQgPSBnZXRUaW1lb3V0KGFuaW1hdGlvbkRlbGF5cywgYW5pbWF0aW9uRHVyYXRpb25zKTtcbiAgbGV0IHR5cGUgPSBudWxsO1xuICBsZXQgdGltZW91dCA9IDA7XG4gIGxldCBwcm9wQ291bnQgPSAwO1xuICBpZiAoZXhwZWN0ZWRUeXBlID09PSBUUkFOU0lUSU9OKSB7XG4gICAgaWYgKHRyYW5zaXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgdHlwZSA9IFRSQU5TSVRJT047XG4gICAgICB0aW1lb3V0ID0gdHJhbnNpdGlvblRpbWVvdXQ7XG4gICAgICBwcm9wQ291bnQgPSB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSBBTklNQVRJT04pIHtcbiAgICBpZiAoYW5pbWF0aW9uVGltZW91dCA+IDApIHtcbiAgICAgIHR5cGUgPSBBTklNQVRJT047XG4gICAgICB0aW1lb3V0ID0gYW5pbWF0aW9uVGltZW91dDtcbiAgICAgIHByb3BDb3VudCA9IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRpbWVvdXQgPSBNYXRoLm1heCh0cmFuc2l0aW9uVGltZW91dCwgYW5pbWF0aW9uVGltZW91dCk7XG4gICAgdHlwZSA9IHRpbWVvdXQgPiAwID8gdHJhbnNpdGlvblRpbWVvdXQgPiBhbmltYXRpb25UaW1lb3V0ID8gVFJBTlNJVElPTiA6IEFOSU1BVElPTiA6IG51bGw7XG4gICAgcHJvcENvdW50ID0gdHlwZSA/IHR5cGUgPT09IFRSQU5TSVRJT04gPyB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aCA6IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGggOiAwO1xuICB9XG4gIGNvbnN0IGhhc1RyYW5zZm9ybSA9IHR5cGUgPT09IFRSQU5TSVRJT04gJiYgL1xcYih0cmFuc2Zvcm18YWxsKSgsfCQpLy50ZXN0KFxuICAgIGdldFN0eWxlUHJvcGVydGllcyhgJHtUUkFOU0lUSU9OfVByb3BlcnR5YCkudG9TdHJpbmcoKVxuICApO1xuICByZXR1cm4ge1xuICAgIHR5cGUsXG4gICAgdGltZW91dCxcbiAgICBwcm9wQ291bnQsXG4gICAgaGFzVHJhbnNmb3JtXG4gIH07XG59XG5mdW5jdGlvbiBnZXRUaW1lb3V0KGRlbGF5cywgZHVyYXRpb25zKSB7XG4gIHdoaWxlIChkZWxheXMubGVuZ3RoIDwgZHVyYXRpb25zLmxlbmd0aCkge1xuICAgIGRlbGF5cyA9IGRlbGF5cy5jb25jYXQoZGVsYXlzKTtcbiAgfVxuICByZXR1cm4gTWF0aC5tYXgoLi4uZHVyYXRpb25zLm1hcCgoZCwgaSkgPT4gdG9NcyhkKSArIHRvTXMoZGVsYXlzW2ldKSkpO1xufVxuZnVuY3Rpb24gdG9NcyhzKSB7XG4gIGlmIChzID09PSBcImF1dG9cIilcbiAgICByZXR1cm4gMDtcbiAgcmV0dXJuIE51bWJlcihzLnNsaWNlKDAsIC0xKS5yZXBsYWNlKFwiLFwiLCBcIi5cIikpICogMWUzO1xufVxuZnVuY3Rpb24gZm9yY2VSZWZsb3coKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodDtcbn1cblxuZnVuY3Rpb24gcGF0Y2hDbGFzcyhlbCwgdmFsdWUsIGlzU1ZHKSB7XG4gIGNvbnN0IHRyYW5zaXRpb25DbGFzc2VzID0gZWxbdnRjS2V5XTtcbiAgaWYgKHRyYW5zaXRpb25DbGFzc2VzKSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPyBbdmFsdWUsIC4uLnRyYW5zaXRpb25DbGFzc2VzXSA6IFsuLi50cmFuc2l0aW9uQ2xhc3Nlc10pLmpvaW4oXCIgXCIpO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgZWwucmVtb3ZlQXR0cmlidXRlKFwiY2xhc3NcIik7XG4gIH0gZWxzZSBpZiAoaXNTVkcpIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgZWwuY2xhc3NOYW1lID0gdmFsdWU7XG4gIH1cbn1cblxuY29uc3QgdlNob3dPcmlnaW5hbERpc3BsYXkgPSBTeW1ib2woXCJfdm9kXCIpO1xuY29uc3QgdlNob3dIaWRkZW4gPSBTeW1ib2woXCJfdnNoXCIpO1xuY29uc3QgdlNob3cgPSB7XG4gIGJlZm9yZU1vdW50KGVsLCB7IHZhbHVlIH0sIHsgdHJhbnNpdGlvbiB9KSB7XG4gICAgZWxbdlNob3dPcmlnaW5hbERpc3BsYXldID0gZWwuc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgPyBcIlwiIDogZWwuc3R5bGUuZGlzcGxheTtcbiAgICBpZiAodHJhbnNpdGlvbiAmJiB2YWx1ZSkge1xuICAgICAgdHJhbnNpdGlvbi5iZWZvcmVFbnRlcihlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldERpc3BsYXkoZWwsIHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQoZWwsIHsgdmFsdWUgfSwgeyB0cmFuc2l0aW9uIH0pIHtcbiAgICBpZiAodHJhbnNpdGlvbiAmJiB2YWx1ZSkge1xuICAgICAgdHJhbnNpdGlvbi5lbnRlcihlbCk7XG4gICAgfVxuICB9LFxuICB1cGRhdGVkKGVsLCB7IHZhbHVlLCBvbGRWYWx1ZSB9LCB7IHRyYW5zaXRpb24gfSkge1xuICAgIGlmICghdmFsdWUgPT09ICFvbGRWYWx1ZSlcbiAgICAgIHJldHVybjtcbiAgICBpZiAodHJhbnNpdGlvbikge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRyYW5zaXRpb24uYmVmb3JlRW50ZXIoZWwpO1xuICAgICAgICBzZXREaXNwbGF5KGVsLCB0cnVlKTtcbiAgICAgICAgdHJhbnNpdGlvbi5lbnRlcihlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2l0aW9uLmxlYXZlKGVsLCAoKSA9PiB7XG4gICAgICAgICAgc2V0RGlzcGxheShlbCwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2V0RGlzcGxheShlbCwgdmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgYmVmb3JlVW5tb3VudChlbCwgeyB2YWx1ZSB9KSB7XG4gICAgc2V0RGlzcGxheShlbCwgdmFsdWUpO1xuICB9XG59O1xuaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgdlNob3cubmFtZSA9IFwic2hvd1wiO1xufVxuZnVuY3Rpb24gc2V0RGlzcGxheShlbCwgdmFsdWUpIHtcbiAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gZWxbdlNob3dPcmlnaW5hbERpc3BsYXldIDogXCJub25lXCI7XG4gIGVsW3ZTaG93SGlkZGVuXSA9ICF2YWx1ZTtcbn1cbmZ1bmN0aW9uIGluaXRWU2hvd0ZvclNTUigpIHtcbiAgdlNob3cuZ2V0U1NSUHJvcHMgPSAoeyB2YWx1ZSB9KSA9PiB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIHsgc3R5bGU6IHsgZGlzcGxheTogXCJub25lXCIgfSB9O1xuICAgIH1cbiAgfTtcbn1cblxuY29uc3QgQ1NTX1ZBUl9URVhUID0gU3ltYm9sKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgPyBcIkNTU19WQVJfVEVYVFwiIDogXCJcIik7XG5mdW5jdGlvbiB1c2VDc3NWYXJzKGdldHRlcikge1xuICBjb25zdCBpbnN0YW5jZSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICBpZiAoIWluc3RhbmNlKSB7XG4gICAgISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiB3YXJuKGB1c2VDc3NWYXJzIGlzIGNhbGxlZCB3aXRob3V0IGN1cnJlbnQgYWN0aXZlIGNvbXBvbmVudCBpbnN0YW5jZS5gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgdXBkYXRlVGVsZXBvcnRzID0gaW5zdGFuY2UudXQgPSAodmFycyA9IGdldHRlcihpbnN0YW5jZS5wcm94eSkpID0+IHtcbiAgICBBcnJheS5mcm9tKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtdi1vd25lcj1cIiR7aW5zdGFuY2UudWlkfVwiXWApXG4gICAgKS5mb3JFYWNoKChub2RlKSA9PiBzZXRWYXJzT25Ob2RlKG5vZGUsIHZhcnMpKTtcbiAgfTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBpbnN0YW5jZS5nZXRDc3NWYXJzID0gKCkgPT4gZ2V0dGVyKGluc3RhbmNlLnByb3h5KTtcbiAgfVxuICBjb25zdCBzZXRWYXJzID0gKCkgPT4ge1xuICAgIGNvbnN0IHZhcnMgPSBnZXR0ZXIoaW5zdGFuY2UucHJveHkpO1xuICAgIHNldFZhcnNPblZOb2RlKGluc3RhbmNlLnN1YlRyZWUsIHZhcnMpO1xuICAgIHVwZGF0ZVRlbGVwb3J0cyh2YXJzKTtcbiAgfTtcbiAgd2F0Y2hQb3N0RWZmZWN0KHNldFZhcnMpO1xuICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9iID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoc2V0VmFycyk7XG4gICAgb2Iub2JzZXJ2ZShpbnN0YW5jZS5zdWJUcmVlLmVsLnBhcmVudE5vZGUsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIG9uVW5tb3VudGVkKCgpID0+IG9iLmRpc2Nvbm5lY3QoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gc2V0VmFyc09uVk5vZGUodm5vZGUsIHZhcnMpIHtcbiAgaWYgKHZub2RlLnNoYXBlRmxhZyAmIDEyOCkge1xuICAgIGNvbnN0IHN1c3BlbnNlID0gdm5vZGUuc3VzcGVuc2U7XG4gICAgdm5vZGUgPSBzdXNwZW5zZS5hY3RpdmVCcmFuY2g7XG4gICAgaWYgKHN1c3BlbnNlLnBlbmRpbmdCcmFuY2ggJiYgIXN1c3BlbnNlLmlzSHlkcmF0aW5nKSB7XG4gICAgICBzdXNwZW5zZS5lZmZlY3RzLnB1c2goKCkgPT4ge1xuICAgICAgICBzZXRWYXJzT25WTm9kZShzdXNwZW5zZS5hY3RpdmVCcmFuY2gsIHZhcnMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHdoaWxlICh2bm9kZS5jb21wb25lbnQpIHtcbiAgICB2bm9kZSA9IHZub2RlLmNvbXBvbmVudC5zdWJUcmVlO1xuICB9XG4gIGlmICh2bm9kZS5zaGFwZUZsYWcgJiAxICYmIHZub2RlLmVsKSB7XG4gICAgc2V0VmFyc09uTm9kZSh2bm9kZS5lbCwgdmFycyk7XG4gIH0gZWxzZSBpZiAodm5vZGUudHlwZSA9PT0gRnJhZ21lbnQpIHtcbiAgICB2bm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiBzZXRWYXJzT25WTm9kZShjLCB2YXJzKSk7XG4gIH0gZWxzZSBpZiAodm5vZGUudHlwZSA9PT0gU3RhdGljKSB7XG4gICAgbGV0IHsgZWwsIGFuY2hvciB9ID0gdm5vZGU7XG4gICAgd2hpbGUgKGVsKSB7XG4gICAgICBzZXRWYXJzT25Ob2RlKGVsLCB2YXJzKTtcbiAgICAgIGlmIChlbCA9PT0gYW5jaG9yKVxuICAgICAgICBicmVhaztcbiAgICAgIGVsID0gZWwubmV4dFNpYmxpbmc7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzZXRWYXJzT25Ob2RlKGVsLCB2YXJzKSB7XG4gIGlmIChlbC5ub2RlVHlwZSA9PT0gMSkge1xuICAgIGNvbnN0IHN0eWxlID0gZWwuc3R5bGU7XG4gICAgbGV0IGNzc1RleHQgPSBcIlwiO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHZhcnMpIHtcbiAgICAgIHN0eWxlLnNldFByb3BlcnR5KGAtLSR7a2V5fWAsIHZhcnNba2V5XSk7XG4gICAgICBjc3NUZXh0ICs9IGAtLSR7a2V5fTogJHt2YXJzW2tleV19O2A7XG4gICAgfVxuICAgIHN0eWxlW0NTU19WQVJfVEVYVF0gPSBjc3NUZXh0O1xuICB9XG59XG5cbmNvbnN0IGRpc3BsYXlSRSA9IC8oXnw7KVxccypkaXNwbGF5XFxzKjovO1xuZnVuY3Rpb24gcGF0Y2hTdHlsZShlbCwgcHJldiwgbmV4dCkge1xuICBjb25zdCBzdHlsZSA9IGVsLnN0eWxlO1xuICBjb25zdCBpc0Nzc1N0cmluZyA9IGlzU3RyaW5nKG5leHQpO1xuICBsZXQgaGFzQ29udHJvbGxlZERpc3BsYXkgPSBmYWxzZTtcbiAgaWYgKG5leHQgJiYgIWlzQ3NzU3RyaW5nKSB7XG4gICAgaWYgKHByZXYpIHtcbiAgICAgIGlmICghaXNTdHJpbmcocHJldikpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJldikge1xuICAgICAgICAgIGlmIChuZXh0W2tleV0gPT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0U3R5bGUoc3R5bGUsIGtleSwgXCJcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IHByZXZTdHlsZSBvZiBwcmV2LnNwbGl0KFwiO1wiKSkge1xuICAgICAgICAgIGNvbnN0IGtleSA9IHByZXZTdHlsZS5zbGljZSgwLCBwcmV2U3R5bGUuaW5kZXhPZihcIjpcIikpLnRyaW0oKTtcbiAgICAgICAgICBpZiAobmV4dFtrZXldID09IG51bGwpIHtcbiAgICAgICAgICAgIHNldFN0eWxlKHN0eWxlLCBrZXksIFwiXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBuZXh0KSB7XG4gICAgICBpZiAoa2V5ID09PSBcImRpc3BsYXlcIikge1xuICAgICAgICBoYXNDb250cm9sbGVkRGlzcGxheSA9IHRydWU7XG4gICAgICB9XG4gICAgICBzZXRTdHlsZShzdHlsZSwga2V5LCBuZXh0W2tleV0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNDc3NTdHJpbmcpIHtcbiAgICAgIGlmIChwcmV2ICE9PSBuZXh0KSB7XG4gICAgICAgIGNvbnN0IGNzc1ZhclRleHQgPSBzdHlsZVtDU1NfVkFSX1RFWFRdO1xuICAgICAgICBpZiAoY3NzVmFyVGV4dCkge1xuICAgICAgICAgIG5leHQgKz0gXCI7XCIgKyBjc3NWYXJUZXh0O1xuICAgICAgICB9XG4gICAgICAgIHN0eWxlLmNzc1RleHQgPSBuZXh0O1xuICAgICAgICBoYXNDb250cm9sbGVkRGlzcGxheSA9IGRpc3BsYXlSRS50ZXN0KG5leHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJldikge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwic3R5bGVcIik7XG4gICAgfVxuICB9XG4gIGlmICh2U2hvd09yaWdpbmFsRGlzcGxheSBpbiBlbCkge1xuICAgIGVsW3ZTaG93T3JpZ2luYWxEaXNwbGF5XSA9IGhhc0NvbnRyb2xsZWREaXNwbGF5ID8gc3R5bGUuZGlzcGxheSA6IFwiXCI7XG4gICAgaWYgKGVsW3ZTaG93SGlkZGVuXSkge1xuICAgICAgc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIH1cbiAgfVxufVxuY29uc3Qgc2VtaWNvbG9uUkUgPSAvW15cXFxcXTtcXHMqJC87XG5jb25zdCBpbXBvcnRhbnRSRSA9IC9cXHMqIWltcG9ydGFudCQvO1xuZnVuY3Rpb24gc2V0U3R5bGUoc3R5bGUsIG5hbWUsIHZhbCkge1xuICBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgdmFsLmZvckVhY2goKHYpID0+IHNldFN0eWxlKHN0eWxlLCBuYW1lLCB2KSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHZhbCA9PSBudWxsKVxuICAgICAgdmFsID0gXCJcIjtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgICAgaWYgKHNlbWljb2xvblJFLnRlc3QodmFsKSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIGBVbmV4cGVjdGVkIHNlbWljb2xvbiBhdCB0aGUgZW5kIG9mICcke25hbWV9JyBzdHlsZSB2YWx1ZTogJyR7dmFsfSdgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuICAgICAgc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcHJlZml4ZWQgPSBhdXRvUHJlZml4KHN0eWxlLCBuYW1lKTtcbiAgICAgIGlmIChpbXBvcnRhbnRSRS50ZXN0KHZhbCkpIHtcbiAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgaHlwaGVuYXRlKHByZWZpeGVkKSxcbiAgICAgICAgICB2YWwucmVwbGFjZShpbXBvcnRhbnRSRSwgXCJcIiksXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVbcHJlZml4ZWRdID0gdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuY29uc3QgcHJlZml4ZXMgPSBbXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJtc1wiXTtcbmNvbnN0IHByZWZpeENhY2hlID0ge307XG5mdW5jdGlvbiBhdXRvUHJlZml4KHN0eWxlLCByYXdOYW1lKSB7XG4gIGNvbnN0IGNhY2hlZCA9IHByZWZpeENhY2hlW3Jhd05hbWVdO1xuICBpZiAoY2FjaGVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuICBsZXQgbmFtZSA9IGNhbWVsaXplKHJhd05hbWUpO1xuICBpZiAobmFtZSAhPT0gXCJmaWx0ZXJcIiAmJiBuYW1lIGluIHN0eWxlKSB7XG4gICAgcmV0dXJuIHByZWZpeENhY2hlW3Jhd05hbWVdID0gbmFtZTtcbiAgfVxuICBuYW1lID0gY2FwaXRhbGl6ZShuYW1lKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByZWZpeGVkID0gcHJlZml4ZXNbaV0gKyBuYW1lO1xuICAgIGlmIChwcmVmaXhlZCBpbiBzdHlsZSkge1xuICAgICAgcmV0dXJuIHByZWZpeENhY2hlW3Jhd05hbWVdID0gcHJlZml4ZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByYXdOYW1lO1xufVxuXG5jb25zdCB4bGlua05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI7XG5mdW5jdGlvbiBwYXRjaEF0dHIoZWwsIGtleSwgdmFsdWUsIGlzU1ZHLCBpbnN0YW5jZSkge1xuICBpZiAoaXNTVkcgJiYga2V5LnN0YXJ0c1dpdGgoXCJ4bGluazpcIikpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywga2V5LnNsaWNlKDYsIGtleS5sZW5ndGgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc2V0QXR0cmlidXRlTlMoeGxpbmtOUywga2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGlzQm9vbGVhbiA9IGlzU3BlY2lhbEJvb2xlYW5BdHRyKGtleSk7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgaXNCb29sZWFuICYmICFpbmNsdWRlQm9vbGVhbkF0dHIodmFsdWUpKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKGtleSwgaXNCb29sZWFuID8gXCJcIiA6IHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcGF0Y2hET01Qcm9wKGVsLCBrZXksIHZhbHVlLCBwcmV2Q2hpbGRyZW4sIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHVubW91bnRDaGlsZHJlbikge1xuICBpZiAoa2V5ID09PSBcImlubmVySFRNTFwiIHx8IGtleSA9PT0gXCJ0ZXh0Q29udGVudFwiKSB7XG4gICAgaWYgKHByZXZDaGlsZHJlbikge1xuICAgICAgdW5tb3VudENoaWxkcmVuKHByZXZDaGlsZHJlbiwgcGFyZW50Q29tcG9uZW50LCBwYXJlbnRTdXNwZW5zZSk7XG4gICAgfVxuICAgIGVsW2tleV0gPSB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB0YWcgPSBlbC50YWdOYW1lO1xuICBpZiAoa2V5ID09PSBcInZhbHVlXCIgJiYgdGFnICE9PSBcIlBST0dSRVNTXCIgJiYgLy8gY3VzdG9tIGVsZW1lbnRzIG1heSB1c2UgX3ZhbHVlIGludGVybmFsbHlcbiAgIXRhZy5pbmNsdWRlcyhcIi1cIikpIHtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRhZyA9PT0gXCJPUFRJT05cIiA/IGVsLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpIHx8IFwiXCIgOiBlbC52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gICAgaWYgKG9sZFZhbHVlICE9PSBuZXdWYWx1ZSB8fCAhKFwiX3ZhbHVlXCIgaW4gZWwpKSB7XG4gICAgICBlbC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgfVxuICAgIGVsLl92YWx1ZSA9IHZhbHVlO1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgbmVlZFJlbW92ZSA9IGZhbHNlO1xuICBpZiAodmFsdWUgPT09IFwiXCIgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgZWxba2V5XTtcbiAgICBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHZhbHVlID0gaW5jbHVkZUJvb2xlYW5BdHRyKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09IG51bGwgJiYgdHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgbmVlZFJlbW92ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICB2YWx1ZSA9IDA7XG4gICAgICBuZWVkUmVtb3ZlID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICBlbFtrZXldID0gdmFsdWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhbmVlZFJlbW92ZSkge1xuICAgICAgd2FybihcbiAgICAgICAgYEZhaWxlZCBzZXR0aW5nIHByb3AgXCIke2tleX1cIiBvbiA8JHt0YWcudG9Mb3dlckNhc2UoKX0+OiB2YWx1ZSAke3ZhbHVlfSBpcyBpbnZhbGlkLmAsXG4gICAgICAgIGVcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIG5lZWRSZW1vdmUgJiYgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG59XG5cbmZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoZWwsIGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihlbCwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgb3B0aW9ucyk7XG59XG5jb25zdCB2ZWlLZXkgPSBTeW1ib2woXCJfdmVpXCIpO1xuZnVuY3Rpb24gcGF0Y2hFdmVudChlbCwgcmF3TmFtZSwgcHJldlZhbHVlLCBuZXh0VmFsdWUsIGluc3RhbmNlID0gbnVsbCkge1xuICBjb25zdCBpbnZva2VycyA9IGVsW3ZlaUtleV0gfHwgKGVsW3ZlaUtleV0gPSB7fSk7XG4gIGNvbnN0IGV4aXN0aW5nSW52b2tlciA9IGludm9rZXJzW3Jhd05hbWVdO1xuICBpZiAobmV4dFZhbHVlICYmIGV4aXN0aW5nSW52b2tlcikge1xuICAgIGV4aXN0aW5nSW52b2tlci52YWx1ZSA9IG5leHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBbbmFtZSwgb3B0aW9uc10gPSBwYXJzZU5hbWUocmF3TmFtZSk7XG4gICAgaWYgKG5leHRWYWx1ZSkge1xuICAgICAgY29uc3QgaW52b2tlciA9IGludm9rZXJzW3Jhd05hbWVdID0gY3JlYXRlSW52b2tlcihuZXh0VmFsdWUsIGluc3RhbmNlKTtcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWwsIG5hbWUsIGludm9rZXIsIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdJbnZva2VyKSB7XG4gICAgICByZW1vdmVFdmVudExpc3RlbmVyKGVsLCBuYW1lLCBleGlzdGluZ0ludm9rZXIsIG9wdGlvbnMpO1xuICAgICAgaW52b2tlcnNbcmF3TmFtZV0gPSB2b2lkIDA7XG4gICAgfVxuICB9XG59XG5jb25zdCBvcHRpb25zTW9kaWZpZXJSRSA9IC8oPzpPbmNlfFBhc3NpdmV8Q2FwdHVyZSkkLztcbmZ1bmN0aW9uIHBhcnNlTmFtZShuYW1lKSB7XG4gIGxldCBvcHRpb25zO1xuICBpZiAob3B0aW9uc01vZGlmaWVyUkUudGVzdChuYW1lKSkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgICBsZXQgbTtcbiAgICB3aGlsZSAobSA9IG5hbWUubWF0Y2gob3B0aW9uc01vZGlmaWVyUkUpKSB7XG4gICAgICBuYW1lID0gbmFtZS5zbGljZSgwLCBuYW1lLmxlbmd0aCAtIG1bMF0ubGVuZ3RoKTtcbiAgICAgIG9wdGlvbnNbbVswXS50b0xvd2VyQ2FzZSgpXSA9IHRydWU7XG4gICAgfVxuICB9XG4gIGNvbnN0IGV2ZW50ID0gbmFtZVsyXSA9PT0gXCI6XCIgPyBuYW1lLnNsaWNlKDMpIDogaHlwaGVuYXRlKG5hbWUuc2xpY2UoMikpO1xuICByZXR1cm4gW2V2ZW50LCBvcHRpb25zXTtcbn1cbmxldCBjYWNoZWROb3cgPSAwO1xuY29uc3QgcCA9IC8qIEBfX1BVUkVfXyAqLyBQcm9taXNlLnJlc29sdmUoKTtcbmNvbnN0IGdldE5vdyA9ICgpID0+IGNhY2hlZE5vdyB8fCAocC50aGVuKCgpID0+IGNhY2hlZE5vdyA9IDApLCBjYWNoZWROb3cgPSBEYXRlLm5vdygpKTtcbmZ1bmN0aW9uIGNyZWF0ZUludm9rZXIoaW5pdGlhbFZhbHVlLCBpbnN0YW5jZSkge1xuICBjb25zdCBpbnZva2VyID0gKGUpID0+IHtcbiAgICBpZiAoIWUuX3Z0cykge1xuICAgICAgZS5fdnRzID0gRGF0ZS5ub3coKTtcbiAgICB9IGVsc2UgaWYgKGUuX3Z0cyA8PSBpbnZva2VyLmF0dGFjaGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nKFxuICAgICAgcGF0Y2hTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oZSwgaW52b2tlci52YWx1ZSksXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIDUsXG4gICAgICBbZV1cbiAgICApO1xuICB9O1xuICBpbnZva2VyLnZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICBpbnZva2VyLmF0dGFjaGVkID0gZ2V0Tm93KCk7XG4gIHJldHVybiBpbnZva2VyO1xufVxuZnVuY3Rpb24gcGF0Y2hTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oZSwgdmFsdWUpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxTdG9wID0gZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247XG4gICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSAoKSA9PiB7XG4gICAgICBvcmlnaW5hbFN0b3AuY2FsbChlKTtcbiAgICAgIGUuX3N0b3BwZWQgPSB0cnVlO1xuICAgIH07XG4gICAgcmV0dXJuIHZhbHVlLm1hcCgoZm4pID0+IChlMikgPT4gIWUyLl9zdG9wcGVkICYmIGZuICYmIGZuKGUyKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmNvbnN0IGlzTmF0aXZlT24gPSAoa2V5KSA9PiBrZXkuY2hhckNvZGVBdCgwKSA9PT0gMTExICYmIGtleS5jaGFyQ29kZUF0KDEpID09PSAxMTAgJiYgLy8gbG93ZXJjYXNlIGxldHRlclxua2V5LmNoYXJDb2RlQXQoMikgPiA5NiAmJiBrZXkuY2hhckNvZGVBdCgyKSA8IDEyMztcbmNvbnN0IHBhdGNoUHJvcCA9IChlbCwga2V5LCBwcmV2VmFsdWUsIG5leHRWYWx1ZSwgbmFtZXNwYWNlLCBwcmV2Q2hpbGRyZW4sIHBhcmVudENvbXBvbmVudCwgcGFyZW50U3VzcGVuc2UsIHVubW91bnRDaGlsZHJlbikgPT4ge1xuICBjb25zdCBpc1NWRyA9IG5hbWVzcGFjZSA9PT0gXCJzdmdcIjtcbiAgaWYgKGtleSA9PT0gXCJjbGFzc1wiKSB7XG4gICAgcGF0Y2hDbGFzcyhlbCwgbmV4dFZhbHVlLCBpc1NWRyk7XG4gIH0gZWxzZSBpZiAoa2V5ID09PSBcInN0eWxlXCIpIHtcbiAgICBwYXRjaFN0eWxlKGVsLCBwcmV2VmFsdWUsIG5leHRWYWx1ZSk7XG4gIH0gZWxzZSBpZiAoaXNPbihrZXkpKSB7XG4gICAgaWYgKCFpc01vZGVsTGlzdGVuZXIoa2V5KSkge1xuICAgICAgcGF0Y2hFdmVudChlbCwga2V5LCBwcmV2VmFsdWUsIG5leHRWYWx1ZSwgcGFyZW50Q29tcG9uZW50KTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoa2V5WzBdID09PSBcIi5cIiA/IChrZXkgPSBrZXkuc2xpY2UoMSksIHRydWUpIDoga2V5WzBdID09PSBcIl5cIiA/IChrZXkgPSBrZXkuc2xpY2UoMSksIGZhbHNlKSA6IHNob3VsZFNldEFzUHJvcChlbCwga2V5LCBuZXh0VmFsdWUsIGlzU1ZHKSkge1xuICAgIHBhdGNoRE9NUHJvcChcbiAgICAgIGVsLFxuICAgICAga2V5LFxuICAgICAgbmV4dFZhbHVlLFxuICAgICAgcHJldkNoaWxkcmVuLFxuICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgcGFyZW50U3VzcGVuc2UsXG4gICAgICB1bm1vdW50Q2hpbGRyZW5cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGlmIChrZXkgPT09IFwidHJ1ZS12YWx1ZVwiKSB7XG4gICAgICBlbC5fdHJ1ZVZhbHVlID0gbmV4dFZhbHVlO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcImZhbHNlLXZhbHVlXCIpIHtcbiAgICAgIGVsLl9mYWxzZVZhbHVlID0gbmV4dFZhbHVlO1xuICAgIH1cbiAgICBwYXRjaEF0dHIoZWwsIGtleSwgbmV4dFZhbHVlLCBpc1NWRyk7XG4gIH1cbn07XG5mdW5jdGlvbiBzaG91bGRTZXRBc1Byb3AoZWwsIGtleSwgdmFsdWUsIGlzU1ZHKSB7XG4gIGlmIChpc1NWRykge1xuICAgIGlmIChrZXkgPT09IFwiaW5uZXJIVE1MXCIgfHwga2V5ID09PSBcInRleHRDb250ZW50XCIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoa2V5IGluIGVsICYmIGlzTmF0aXZlT24oa2V5KSAmJiBpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoa2V5ID09PSBcInNwZWxsY2hlY2tcIiB8fCBrZXkgPT09IFwiZHJhZ2dhYmxlXCIgfHwga2V5ID09PSBcInRyYW5zbGF0ZVwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChrZXkgPT09IFwiZm9ybVwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChrZXkgPT09IFwibGlzdFwiICYmIGVsLnRhZ05hbWUgPT09IFwiSU5QVVRcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoa2V5ID09PSBcInR5cGVcIiAmJiBlbC50YWdOYW1lID09PSBcIlRFWFRBUkVBXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGtleSA9PT0gXCJ3aWR0aFwiIHx8IGtleSA9PT0gXCJoZWlnaHRcIikge1xuICAgIGNvbnN0IHRhZyA9IGVsLnRhZ05hbWU7XG4gICAgaWYgKHRhZyA9PT0gXCJJTUdcIiB8fCB0YWcgPT09IFwiVklERU9cIiB8fCB0YWcgPT09IFwiQ0FOVkFTXCIgfHwgdGFnID09PSBcIlNPVVJDRVwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGlmIChpc05hdGl2ZU9uKGtleSkgJiYgaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBrZXkgaW4gZWw7XG59XG5cbi8qISAjX19OT19TSURFX0VGRkVDVFNfXyAqL1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmZ1bmN0aW9uIGRlZmluZUN1c3RvbUVsZW1lbnQob3B0aW9ucywgaHlkcmF0ZTIpIHtcbiAgY29uc3QgQ29tcCA9IGRlZmluZUNvbXBvbmVudChvcHRpb25zKTtcbiAgY2xhc3MgVnVlQ3VzdG9tRWxlbWVudCBleHRlbmRzIFZ1ZUVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKGluaXRpYWxQcm9wcykge1xuICAgICAgc3VwZXIoQ29tcCwgaW5pdGlhbFByb3BzLCBoeWRyYXRlMik7XG4gICAgfVxuICB9XG4gIFZ1ZUN1c3RvbUVsZW1lbnQuZGVmID0gQ29tcDtcbiAgcmV0dXJuIFZ1ZUN1c3RvbUVsZW1lbnQ7XG59XG4vKiEgI19fTk9fU0lERV9FRkZFQ1RTX18gKi9cbmNvbnN0IGRlZmluZVNTUkN1c3RvbUVsZW1lbnQgPSAvKiBAX19OT19TSURFX0VGRkVDVFNfXyAqLyAob3B0aW9ucykgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGRlZmluZUN1c3RvbUVsZW1lbnQob3B0aW9ucywgaHlkcmF0ZSk7XG59O1xuY29uc3QgQmFzZUNsYXNzID0gdHlwZW9mIEhUTUxFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiID8gSFRNTEVsZW1lbnQgOiBjbGFzcyB7XG59O1xuY2xhc3MgVnVlRWxlbWVudCBleHRlbmRzIEJhc2VDbGFzcyB7XG4gIGNvbnN0cnVjdG9yKF9kZWYsIF9wcm9wcyA9IHt9LCBoeWRyYXRlMikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZGVmID0gX2RlZjtcbiAgICB0aGlzLl9wcm9wcyA9IF9wcm9wcztcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB0aGlzLl9pbnN0YW5jZSA9IG51bGw7XG4gICAgdGhpcy5fY29ubmVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVzb2x2ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9udW1iZXJQcm9wcyA9IG51bGw7XG4gICAgdGhpcy5fb2IgPSBudWxsO1xuICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QgJiYgaHlkcmF0ZTIpIHtcbiAgICAgIGh5ZHJhdGUyKHRoaXMuX2NyZWF0ZVZOb2RlKCksIHRoaXMuc2hhZG93Um9vdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHRoaXMuc2hhZG93Um9vdCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIGBDdXN0b20gZWxlbWVudCBoYXMgcHJlLXJlbmRlcmVkIGRlY2xhcmF0aXZlIHNoYWRvdyByb290IGJ1dCBpcyBub3QgZGVmaW5lZCBhcyBoeWRyYXRhYmxlLiBVc2UgXFxgZGVmaW5lU1NSQ3VzdG9tRWxlbWVudFxcYC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICAgICAgaWYgKCF0aGlzLl9kZWYuX19hc3luY0xvYWRlcikge1xuICAgICAgICB0aGlzLl9yZXNvbHZlUHJvcHModGhpcy5fZGVmKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5fY29ubmVjdGVkID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICBpZiAodGhpcy5fcmVzb2x2ZWQpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yZXNvbHZlRGVmKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuX2Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLl9vYikge1xuICAgICAgdGhpcy5fb2IuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5fb2IgPSBudWxsO1xuICAgIH1cbiAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2Nvbm5lY3RlZCkge1xuICAgICAgICByZW5kZXIobnVsbCwgdGhpcy5zaGFkb3dSb290KTtcbiAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiByZXNvbHZlIGlubmVyIGNvbXBvbmVudCBkZWZpbml0aW9uIChoYW5kbGUgcG9zc2libGUgYXN5bmMgY29tcG9uZW50KVxuICAgKi9cbiAgX3Jlc29sdmVEZWYoKSB7XG4gICAgdGhpcy5fcmVzb2x2ZWQgPSB0cnVlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLl9zZXRBdHRyKHRoaXMuYXR0cmlidXRlc1tpXS5uYW1lKTtcbiAgICB9XG4gICAgdGhpcy5fb2IgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG0gb2YgbXV0YXRpb25zKSB7XG4gICAgICAgIHRoaXMuX3NldEF0dHIobS5hdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl9vYi5vYnNlcnZlKHRoaXMsIHsgYXR0cmlidXRlczogdHJ1ZSB9KTtcbiAgICBjb25zdCByZXNvbHZlID0gKGRlZiwgaXNBc3luYyA9IGZhbHNlKSA9PiB7XG4gICAgICBjb25zdCB7IHByb3BzLCBzdHlsZXMgfSA9IGRlZjtcbiAgICAgIGxldCBudW1iZXJQcm9wcztcbiAgICAgIGlmIChwcm9wcyAmJiAhaXNBcnJheShwcm9wcykpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICBjb25zdCBvcHQgPSBwcm9wc1trZXldO1xuICAgICAgICAgIGlmIChvcHQgPT09IE51bWJlciB8fCBvcHQgJiYgb3B0LnR5cGUgPT09IE51bWJlcikge1xuICAgICAgICAgICAgaWYgKGtleSBpbiB0aGlzLl9wcm9wcykge1xuICAgICAgICAgICAgICB0aGlzLl9wcm9wc1trZXldID0gdG9OdW1iZXIodGhpcy5fcHJvcHNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAobnVtYmVyUHJvcHMgfHwgKG51bWJlclByb3BzID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCkpKVtjYW1lbGl6ZSQxKGtleSldID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuX251bWJlclByb3BzID0gbnVtYmVyUHJvcHM7XG4gICAgICBpZiAoaXNBc3luYykge1xuICAgICAgICB0aGlzLl9yZXNvbHZlUHJvcHMoZGVmKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2FwcGx5U3R5bGVzKHN0eWxlcyk7XG4gICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICB9O1xuICAgIGNvbnN0IGFzeW5jRGVmID0gdGhpcy5fZGVmLl9fYXN5bmNMb2FkZXI7XG4gICAgaWYgKGFzeW5jRGVmKSB7XG4gICAgICBhc3luY0RlZigpLnRoZW4oKGRlZikgPT4gcmVzb2x2ZShkZWYsIHRydWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZSh0aGlzLl9kZWYpO1xuICAgIH1cbiAgfVxuICBfcmVzb2x2ZVByb3BzKGRlZikge1xuICAgIGNvbnN0IHsgcHJvcHMgfSA9IGRlZjtcbiAgICBjb25zdCBkZWNsYXJlZFByb3BLZXlzID0gaXNBcnJheShwcm9wcykgPyBwcm9wcyA6IE9iamVjdC5rZXlzKHByb3BzIHx8IHt9KTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzKSkge1xuICAgICAgaWYgKGtleVswXSAhPT0gXCJfXCIgJiYgZGVjbGFyZWRQcm9wS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIHRoaXMuX3NldFByb3Aoa2V5LCB0aGlzW2tleV0sIHRydWUsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZGVjbGFyZWRQcm9wS2V5cy5tYXAoY2FtZWxpemUkMSkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRQcm9wKGtleSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCh2YWwpIHtcbiAgICAgICAgICB0aGlzLl9zZXRQcm9wKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIF9zZXRBdHRyKGtleSkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKGtleSk7XG4gICAgY29uc3QgY2FtZWxLZXkgPSBjYW1lbGl6ZSQxKGtleSk7XG4gICAgaWYgKHRoaXMuX251bWJlclByb3BzICYmIHRoaXMuX251bWJlclByb3BzW2NhbWVsS2V5XSkge1xuICAgICAgdmFsdWUgPSB0b051bWJlcih2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuX3NldFByb3AoY2FtZWxLZXksIHZhbHVlLCBmYWxzZSk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2dldFByb3Aoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb3BzW2tleV07XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3NldFByb3Aoa2V5LCB2YWwsIHNob3VsZFJlZmxlY3QgPSB0cnVlLCBzaG91bGRVcGRhdGUgPSB0cnVlKSB7XG4gICAgaWYgKHZhbCAhPT0gdGhpcy5fcHJvcHNba2V5XSkge1xuICAgICAgdGhpcy5fcHJvcHNba2V5XSA9IHZhbDtcbiAgICAgIGlmIChzaG91bGRVcGRhdGUgJiYgdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkUmVmbGVjdCkge1xuICAgICAgICBpZiAodmFsID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoaHlwaGVuYXRlKGtleSksIFwiXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGh5cGhlbmF0ZShrZXkpLCB2YWwgKyBcIlwiKTtcbiAgICAgICAgfSBlbHNlIGlmICghdmFsKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoaHlwaGVuYXRlKGtleSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF91cGRhdGUoKSB7XG4gICAgcmVuZGVyKHRoaXMuX2NyZWF0ZVZOb2RlKCksIHRoaXMuc2hhZG93Um9vdCk7XG4gIH1cbiAgX2NyZWF0ZVZOb2RlKCkge1xuICAgIGNvbnN0IHZub2RlID0gY3JlYXRlVk5vZGUodGhpcy5fZGVmLCBleHRlbmQoe30sIHRoaXMuX3Byb3BzKSk7XG4gICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgdm5vZGUuY2UgPSAoaW5zdGFuY2UpID0+IHtcbiAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgaW5zdGFuY2UuaXNDRSA9IHRydWU7XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgaW5zdGFuY2UuY2VSZWxvYWQgPSAobmV3U3R5bGVzKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fc3R5bGVzKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3N0eWxlcy5mb3JFYWNoKChzKSA9PiB0aGlzLnNoYWRvd1Jvb3QucmVtb3ZlQ2hpbGQocykpO1xuICAgICAgICAgICAgICB0aGlzLl9zdHlsZXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2FwcGx5U3R5bGVzKG5ld1N0eWxlcyk7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpc3BhdGNoID0gKGV2ZW50LCBhcmdzKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KGV2ZW50LCB7XG4gICAgICAgICAgICAgIGRldGFpbDogYXJnc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgICAgICBpbnN0YW5jZS5lbWl0ID0gKGV2ZW50LCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgZGlzcGF0Y2goZXZlbnQsIGFyZ3MpO1xuICAgICAgICAgIGlmIChoeXBoZW5hdGUoZXZlbnQpICE9PSBldmVudCkge1xuICAgICAgICAgICAgZGlzcGF0Y2goaHlwaGVuYXRlKGV2ZW50KSwgYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBsZXQgcGFyZW50ID0gdGhpcztcbiAgICAgICAgd2hpbGUgKHBhcmVudCA9IHBhcmVudCAmJiAocGFyZW50LnBhcmVudE5vZGUgfHwgcGFyZW50Lmhvc3QpKSB7XG4gICAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFZ1ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLnBhcmVudCA9IHBhcmVudC5faW5zdGFuY2U7XG4gICAgICAgICAgICBpbnN0YW5jZS5wcm92aWRlcyA9IHBhcmVudC5faW5zdGFuY2UucHJvdmlkZXM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB2bm9kZTtcbiAgfVxuICBfYXBwbHlTdHlsZXMoc3R5bGVzKSB7XG4gICAgaWYgKHN0eWxlcykge1xuICAgICAgc3R5bGVzLmZvckVhY2goKGNzcykgPT4ge1xuICAgICAgICBjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgICAgICBzLnRleHRDb250ZW50ID0gY3NzO1xuICAgICAgICB0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQocyk7XG4gICAgICAgIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgKHRoaXMuX3N0eWxlcyB8fCAodGhpcy5fc3R5bGVzID0gW10pKS5wdXNoKHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlQ3NzTW9kdWxlKG5hbWUgPSBcIiRzdHlsZVwiKSB7XG4gIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgd2FybihgdXNlQ3NzTW9kdWxlIG11c3QgYmUgY2FsbGVkIGluc2lkZSBzZXR1cCgpYCk7XG4gICAgICByZXR1cm4gRU1QVFlfT0JKO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVzID0gaW5zdGFuY2UudHlwZS5fX2Nzc01vZHVsZXM7XG4gICAgaWYgKCFtb2R1bGVzKSB7XG4gICAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHdhcm4oYEN1cnJlbnQgaW5zdGFuY2UgZG9lcyBub3QgaGF2ZSBDU1MgbW9kdWxlcyBpbmplY3RlZC5gKTtcbiAgICAgIHJldHVybiBFTVBUWV9PQko7XG4gICAgfVxuICAgIGNvbnN0IG1vZCA9IG1vZHVsZXNbbmFtZV07XG4gICAgaWYgKCFtb2QpIHtcbiAgICAgICEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgJiYgd2FybihgQ3VycmVudCBpbnN0YW5jZSBkb2VzIG5vdCBoYXZlIENTUyBtb2R1bGUgbmFtZWQgXCIke25hbWV9XCIuYCk7XG4gICAgICByZXR1cm4gRU1QVFlfT0JKO1xuICAgIH1cbiAgICByZXR1cm4gbW9kO1xuICB9XG59XG5cbmNvbnN0IHBvc2l0aW9uTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG5jb25zdCBuZXdQb3NpdGlvbk1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xuY29uc3QgbW92ZUNiS2V5ID0gU3ltYm9sKFwiX21vdmVDYlwiKTtcbmNvbnN0IGVudGVyQ2JLZXkgPSBTeW1ib2woXCJfZW50ZXJDYlwiKTtcbmNvbnN0IFRyYW5zaXRpb25Hcm91cEltcGwgPSB7XG4gIG5hbWU6IFwiVHJhbnNpdGlvbkdyb3VwXCIsXG4gIHByb3BzOiAvKiBAX19QVVJFX18gKi8gZXh0ZW5kKHt9LCBUcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzLCB7XG4gICAgdGFnOiBTdHJpbmcsXG4gICAgbW92ZUNsYXNzOiBTdHJpbmdcbiAgfSksXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICAgIGNvbnN0IHN0YXRlID0gdXNlVHJhbnNpdGlvblN0YXRlKCk7XG4gICAgbGV0IHByZXZDaGlsZHJlbjtcbiAgICBsZXQgY2hpbGRyZW47XG4gICAgb25VcGRhdGVkKCgpID0+IHtcbiAgICAgIGlmICghcHJldkNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtb3ZlQ2xhc3MgPSBwcm9wcy5tb3ZlQ2xhc3MgfHwgYCR7cHJvcHMubmFtZSB8fCBcInZcIn0tbW92ZWA7XG4gICAgICBpZiAoIWhhc0NTU1RyYW5zZm9ybShcbiAgICAgICAgcHJldkNoaWxkcmVuWzBdLmVsLFxuICAgICAgICBpbnN0YW5jZS52bm9kZS5lbCxcbiAgICAgICAgbW92ZUNsYXNzXG4gICAgICApKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHByZXZDaGlsZHJlbi5mb3JFYWNoKGNhbGxQZW5kaW5nQ2JzKTtcbiAgICAgIHByZXZDaGlsZHJlbi5mb3JFYWNoKHJlY29yZFBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IG1vdmVkQ2hpbGRyZW4gPSBwcmV2Q2hpbGRyZW4uZmlsdGVyKGFwcGx5VHJhbnNsYXRpb24pO1xuICAgICAgZm9yY2VSZWZsb3coKTtcbiAgICAgIG1vdmVkQ2hpbGRyZW4uZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICBjb25zdCBlbCA9IGMuZWw7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gZWwuc3R5bGU7XG4gICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbW92ZUNsYXNzKTtcbiAgICAgICAgc3R5bGUudHJhbnNmb3JtID0gc3R5bGUud2Via2l0VHJhbnNmb3JtID0gc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gXCJcIjtcbiAgICAgICAgY29uc3QgY2IgPSBlbFttb3ZlQ2JLZXldID0gKGUpID0+IHtcbiAgICAgICAgICBpZiAoZSAmJiBlLnRhcmdldCAhPT0gZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFlIHx8IC90cmFuc2Zvcm0kLy50ZXN0KGUucHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgY2IpO1xuICAgICAgICAgICAgZWxbbW92ZUNiS2V5XSA9IG51bGw7XG4gICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBjYik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgcmF3UHJvcHMgPSB0b1Jhdyhwcm9wcyk7XG4gICAgICBjb25zdCBjc3NUcmFuc2l0aW9uUHJvcHMgPSByZXNvbHZlVHJhbnNpdGlvblByb3BzKHJhd1Byb3BzKTtcbiAgICAgIGxldCB0YWcgPSByYXdQcm9wcy50YWcgfHwgRnJhZ21lbnQ7XG4gICAgICBwcmV2Q2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgIGNoaWxkcmVuID0gc2xvdHMuZGVmYXVsdCA/IGdldFRyYW5zaXRpb25SYXdDaGlsZHJlbihzbG90cy5kZWZhdWx0KCkpIDogW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICAgIGlmIChjaGlsZC5rZXkgIT0gbnVsbCkge1xuICAgICAgICAgIHNldFRyYW5zaXRpb25Ib29rcyhcbiAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgcmVzb2x2ZVRyYW5zaXRpb25Ib29rcyhjaGlsZCwgY3NzVHJhbnNpdGlvblByb3BzLCBzdGF0ZSwgaW5zdGFuY2UpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpKSB7XG4gICAgICAgICAgd2FybihgPFRyYW5zaXRpb25Hcm91cD4gY2hpbGRyZW4gbXVzdCBiZSBrZXllZC5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByZXZDaGlsZHJlbikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNoaWxkID0gcHJldkNoaWxkcmVuW2ldO1xuICAgICAgICAgIHNldFRyYW5zaXRpb25Ib29rcyhcbiAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgcmVzb2x2ZVRyYW5zaXRpb25Ib29rcyhjaGlsZCwgY3NzVHJhbnNpdGlvblByb3BzLCBzdGF0ZSwgaW5zdGFuY2UpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBwb3NpdGlvbk1hcC5zZXQoY2hpbGQsIGNoaWxkLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKHRhZywgbnVsbCwgY2hpbGRyZW4pO1xuICAgIH07XG4gIH1cbn07XG5jb25zdCByZW1vdmVNb2RlID0gKHByb3BzKSA9PiBkZWxldGUgcHJvcHMubW9kZTtcbi8qIEBfX1BVUkVfXyAqLyByZW1vdmVNb2RlKFRyYW5zaXRpb25Hcm91cEltcGwucHJvcHMpO1xuY29uc3QgVHJhbnNpdGlvbkdyb3VwID0gVHJhbnNpdGlvbkdyb3VwSW1wbDtcbmZ1bmN0aW9uIGNhbGxQZW5kaW5nQ2JzKGMpIHtcbiAgY29uc3QgZWwgPSBjLmVsO1xuICBpZiAoZWxbbW92ZUNiS2V5XSkge1xuICAgIGVsW21vdmVDYktleV0oKTtcbiAgfVxuICBpZiAoZWxbZW50ZXJDYktleV0pIHtcbiAgICBlbFtlbnRlckNiS2V5XSgpO1xuICB9XG59XG5mdW5jdGlvbiByZWNvcmRQb3NpdGlvbihjKSB7XG4gIG5ld1Bvc2l0aW9uTWFwLnNldChjLCBjLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cbmZ1bmN0aW9uIGFwcGx5VHJhbnNsYXRpb24oYykge1xuICBjb25zdCBvbGRQb3MgPSBwb3NpdGlvbk1hcC5nZXQoYyk7XG4gIGNvbnN0IG5ld1BvcyA9IG5ld1Bvc2l0aW9uTWFwLmdldChjKTtcbiAgY29uc3QgZHggPSBvbGRQb3MubGVmdCAtIG5ld1Bvcy5sZWZ0O1xuICBjb25zdCBkeSA9IG9sZFBvcy50b3AgLSBuZXdQb3MudG9wO1xuICBpZiAoZHggfHwgZHkpIHtcbiAgICBjb25zdCBzID0gYy5lbC5zdHlsZTtcbiAgICBzLnRyYW5zZm9ybSA9IHMud2Via2l0VHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke2R4fXB4LCR7ZHl9cHgpYDtcbiAgICBzLnRyYW5zaXRpb25EdXJhdGlvbiA9IFwiMHNcIjtcbiAgICByZXR1cm4gYztcbiAgfVxufVxuZnVuY3Rpb24gaGFzQ1NTVHJhbnNmb3JtKGVsLCByb290LCBtb3ZlQ2xhc3MpIHtcbiAgY29uc3QgY2xvbmUgPSBlbC5jbG9uZU5vZGUoKTtcbiAgY29uc3QgX3Z0YyA9IGVsW3Z0Y0tleV07XG4gIGlmIChfdnRjKSB7XG4gICAgX3Z0Yy5mb3JFYWNoKChjbHMpID0+IHtcbiAgICAgIGNscy5zcGxpdCgvXFxzKy8pLmZvckVhY2goKGMpID0+IGMgJiYgY2xvbmUuY2xhc3NMaXN0LnJlbW92ZShjKSk7XG4gICAgfSk7XG4gIH1cbiAgbW92ZUNsYXNzLnNwbGl0KC9cXHMrLykuZm9yRWFjaCgoYykgPT4gYyAmJiBjbG9uZS5jbGFzc0xpc3QuYWRkKGMpKTtcbiAgY2xvbmUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICBjb25zdCBjb250YWluZXIgPSByb290Lm5vZGVUeXBlID09PSAxID8gcm9vdCA6IHJvb3QucGFyZW50Tm9kZTtcbiAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNsb25lKTtcbiAgY29uc3QgeyBoYXNUcmFuc2Zvcm0gfSA9IGdldFRyYW5zaXRpb25JbmZvKGNsb25lKTtcbiAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNsb25lKTtcbiAgcmV0dXJuIGhhc1RyYW5zZm9ybTtcbn1cblxuY29uc3QgZ2V0TW9kZWxBc3NpZ25lciA9ICh2bm9kZSkgPT4ge1xuICBjb25zdCBmbiA9IHZub2RlLnByb3BzW1wib25VcGRhdGU6bW9kZWxWYWx1ZVwiXSB8fCBmYWxzZTtcbiAgcmV0dXJuIGlzQXJyYXkoZm4pID8gKHZhbHVlKSA9PiBpbnZva2VBcnJheUZucyhmbiwgdmFsdWUpIDogZm47XG59O1xuZnVuY3Rpb24gb25Db21wb3NpdGlvblN0YXJ0KGUpIHtcbiAgZS50YXJnZXQuY29tcG9zaW5nID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIG9uQ29tcG9zaXRpb25FbmQoZSkge1xuICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldDtcbiAgaWYgKHRhcmdldC5jb21wb3NpbmcpIHtcbiAgICB0YXJnZXQuY29tcG9zaW5nID0gZmFsc2U7XG4gICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIikpO1xuICB9XG59XG5jb25zdCBhc3NpZ25LZXkgPSBTeW1ib2woXCJfYXNzaWduXCIpO1xuY29uc3Qgdk1vZGVsVGV4dCA9IHtcbiAgY3JlYXRlZChlbCwgeyBtb2RpZmllcnM6IHsgbGF6eSwgdHJpbSwgbnVtYmVyIH0gfSwgdm5vZGUpIHtcbiAgICBlbFthc3NpZ25LZXldID0gZ2V0TW9kZWxBc3NpZ25lcih2bm9kZSk7XG4gICAgY29uc3QgY2FzdFRvTnVtYmVyID0gbnVtYmVyIHx8IHZub2RlLnByb3BzICYmIHZub2RlLnByb3BzLnR5cGUgPT09IFwibnVtYmVyXCI7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcihlbCwgbGF6eSA/IFwiY2hhbmdlXCIgOiBcImlucHV0XCIsIChlKSA9PiB7XG4gICAgICBpZiAoZS50YXJnZXQuY29tcG9zaW5nKVxuICAgICAgICByZXR1cm47XG4gICAgICBsZXQgZG9tVmFsdWUgPSBlbC52YWx1ZTtcbiAgICAgIGlmICh0cmltKSB7XG4gICAgICAgIGRvbVZhbHVlID0gZG9tVmFsdWUudHJpbSgpO1xuICAgICAgfVxuICAgICAgaWYgKGNhc3RUb051bWJlcikge1xuICAgICAgICBkb21WYWx1ZSA9IGxvb3NlVG9OdW1iZXIoZG9tVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxbYXNzaWduS2V5XShkb21WYWx1ZSk7XG4gICAgfSk7XG4gICAgaWYgKHRyaW0pIHtcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWwsIFwiY2hhbmdlXCIsICgpID0+IHtcbiAgICAgICAgZWwudmFsdWUgPSBlbC52YWx1ZS50cmltKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCFsYXp5KSB7XG4gICAgICBhZGRFdmVudExpc3RlbmVyKGVsLCBcImNvbXBvc2l0aW9uc3RhcnRcIiwgb25Db21wb3NpdGlvblN0YXJ0KTtcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWwsIFwiY29tcG9zaXRpb25lbmRcIiwgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICBhZGRFdmVudExpc3RlbmVyKGVsLCBcImNoYW5nZVwiLCBvbkNvbXBvc2l0aW9uRW5kKTtcbiAgICB9XG4gIH0sXG4gIC8vIHNldCB2YWx1ZSBvbiBtb3VudGVkIHNvIGl0J3MgYWZ0ZXIgbWluL21heCBmb3IgdHlwZT1cInJhbmdlXCJcbiAgbW91bnRlZChlbCwgeyB2YWx1ZSB9KSB7XG4gICAgZWwudmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBiZWZvcmVVcGRhdGUoZWwsIHsgdmFsdWUsIG1vZGlmaWVyczogeyBsYXp5LCB0cmltLCBudW1iZXIgfSB9LCB2bm9kZSkge1xuICAgIGVsW2Fzc2lnbktleV0gPSBnZXRNb2RlbEFzc2lnbmVyKHZub2RlKTtcbiAgICBpZiAoZWwuY29tcG9zaW5nKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGVsVmFsdWUgPSBudW1iZXIgfHwgZWwudHlwZSA9PT0gXCJudW1iZXJcIiA/IGxvb3NlVG9OdW1iZXIoZWwudmFsdWUpIDogZWwudmFsdWU7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICAgIGlmIChlbFZhbHVlID09PSBuZXdWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZWwgJiYgZWwudHlwZSAhPT0gXCJyYW5nZVwiKSB7XG4gICAgICBpZiAobGF6eSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHJpbSAmJiBlbC52YWx1ZS50cmltKCkgPT09IG5ld1ZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgZWwudmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxufTtcbmNvbnN0IHZNb2RlbENoZWNrYm94ID0ge1xuICAvLyAjNDA5NiBhcnJheSBjaGVja2JveGVzIG5lZWQgdG8gYmUgZGVlcCB0cmF2ZXJzZWRcbiAgZGVlcDogdHJ1ZSxcbiAgY3JlYXRlZChlbCwgXywgdm5vZGUpIHtcbiAgICBlbFthc3NpZ25LZXldID0gZ2V0TW9kZWxBc3NpZ25lcih2bm9kZSk7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcihlbCwgXCJjaGFuZ2VcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWxWYWx1ZSA9IGVsLl9tb2RlbFZhbHVlO1xuICAgICAgY29uc3QgZWxlbWVudFZhbHVlID0gZ2V0VmFsdWUoZWwpO1xuICAgICAgY29uc3QgY2hlY2tlZCA9IGVsLmNoZWNrZWQ7XG4gICAgICBjb25zdCBhc3NpZ24gPSBlbFthc3NpZ25LZXldO1xuICAgICAgaWYgKGlzQXJyYXkobW9kZWxWYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBsb29zZUluZGV4T2YobW9kZWxWYWx1ZSwgZWxlbWVudFZhbHVlKTtcbiAgICAgICAgY29uc3QgZm91bmQgPSBpbmRleCAhPT0gLTE7XG4gICAgICAgIGlmIChjaGVja2VkICYmICFmb3VuZCkge1xuICAgICAgICAgIGFzc2lnbihtb2RlbFZhbHVlLmNvbmNhdChlbGVtZW50VmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIGlmICghY2hlY2tlZCAmJiBmb3VuZCkge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gWy4uLm1vZGVsVmFsdWVdO1xuICAgICAgICAgIGZpbHRlcmVkLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgYXNzaWduKGZpbHRlcmVkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1NldChtb2RlbFZhbHVlKSkge1xuICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgU2V0KG1vZGVsVmFsdWUpO1xuICAgICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICAgIGNsb25lZC5hZGQoZWxlbWVudFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbG9uZWQuZGVsZXRlKGVsZW1lbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXNzaWduKGNsb25lZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NpZ24oZ2V0Q2hlY2tib3hWYWx1ZShlbCwgY2hlY2tlZCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICAvLyBzZXQgaW5pdGlhbCBjaGVja2VkIG9uIG1vdW50IHRvIHdhaXQgZm9yIHRydWUtdmFsdWUvZmFsc2UtdmFsdWVcbiAgbW91bnRlZDogc2V0Q2hlY2tlZCxcbiAgYmVmb3JlVXBkYXRlKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIGVsW2Fzc2lnbktleV0gPSBnZXRNb2RlbEFzc2lnbmVyKHZub2RlKTtcbiAgICBzZXRDaGVja2VkKGVsLCBiaW5kaW5nLCB2bm9kZSk7XG4gIH1cbn07XG5mdW5jdGlvbiBzZXRDaGVja2VkKGVsLCB7IHZhbHVlLCBvbGRWYWx1ZSB9LCB2bm9kZSkge1xuICBlbC5fbW9kZWxWYWx1ZSA9IHZhbHVlO1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBlbC5jaGVja2VkID0gbG9vc2VJbmRleE9mKHZhbHVlLCB2bm9kZS5wcm9wcy52YWx1ZSkgPiAtMTtcbiAgfSBlbHNlIGlmIChpc1NldCh2YWx1ZSkpIHtcbiAgICBlbC5jaGVja2VkID0gdmFsdWUuaGFzKHZub2RlLnByb3BzLnZhbHVlKTtcbiAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICBlbC5jaGVja2VkID0gbG9vc2VFcXVhbCh2YWx1ZSwgZ2V0Q2hlY2tib3hWYWx1ZShlbCwgdHJ1ZSkpO1xuICB9XG59XG5jb25zdCB2TW9kZWxSYWRpbyA9IHtcbiAgY3JlYXRlZChlbCwgeyB2YWx1ZSB9LCB2bm9kZSkge1xuICAgIGVsLmNoZWNrZWQgPSBsb29zZUVxdWFsKHZhbHVlLCB2bm9kZS5wcm9wcy52YWx1ZSk7XG4gICAgZWxbYXNzaWduS2V5XSA9IGdldE1vZGVsQXNzaWduZXIodm5vZGUpO1xuICAgIGFkZEV2ZW50TGlzdGVuZXIoZWwsIFwiY2hhbmdlXCIsICgpID0+IHtcbiAgICAgIGVsW2Fzc2lnbktleV0oZ2V0VmFsdWUoZWwpKTtcbiAgICB9KTtcbiAgfSxcbiAgYmVmb3JlVXBkYXRlKGVsLCB7IHZhbHVlLCBvbGRWYWx1ZSB9LCB2bm9kZSkge1xuICAgIGVsW2Fzc2lnbktleV0gPSBnZXRNb2RlbEFzc2lnbmVyKHZub2RlKTtcbiAgICBpZiAodmFsdWUgIT09IG9sZFZhbHVlKSB7XG4gICAgICBlbC5jaGVja2VkID0gbG9vc2VFcXVhbCh2YWx1ZSwgdm5vZGUucHJvcHMudmFsdWUpO1xuICAgIH1cbiAgfVxufTtcbmNvbnN0IHZNb2RlbFNlbGVjdCA9IHtcbiAgLy8gPHNlbGVjdCBtdWx0aXBsZT4gdmFsdWUgbmVlZCB0byBiZSBkZWVwIHRyYXZlcnNlZFxuICBkZWVwOiB0cnVlLFxuICBjcmVhdGVkKGVsLCB7IHZhbHVlLCBtb2RpZmllcnM6IHsgbnVtYmVyIH0gfSwgdm5vZGUpIHtcbiAgICBjb25zdCBpc1NldE1vZGVsID0gaXNTZXQodmFsdWUpO1xuICAgIGFkZEV2ZW50TGlzdGVuZXIoZWwsIFwiY2hhbmdlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkVmFsID0gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGVsLm9wdGlvbnMsIChvKSA9PiBvLnNlbGVjdGVkKS5tYXAoXG4gICAgICAgIChvKSA9PiBudW1iZXIgPyBsb29zZVRvTnVtYmVyKGdldFZhbHVlKG8pKSA6IGdldFZhbHVlKG8pXG4gICAgICApO1xuICAgICAgZWxbYXNzaWduS2V5XShcbiAgICAgICAgZWwubXVsdGlwbGUgPyBpc1NldE1vZGVsID8gbmV3IFNldChzZWxlY3RlZFZhbCkgOiBzZWxlY3RlZFZhbCA6IHNlbGVjdGVkVmFsWzBdXG4gICAgICApO1xuICAgICAgZWwuX2Fzc2lnbmluZyA9IHRydWU7XG4gICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGVsLl9hc3NpZ25pbmcgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGVsW2Fzc2lnbktleV0gPSBnZXRNb2RlbEFzc2lnbmVyKHZub2RlKTtcbiAgfSxcbiAgLy8gc2V0IHZhbHVlIGluIG1vdW50ZWQgJiB1cGRhdGVkIGJlY2F1c2UgPHNlbGVjdD4gcmVsaWVzIG9uIGl0cyBjaGlsZHJlblxuICAvLyA8b3B0aW9uPnMuXG4gIG1vdW50ZWQoZWwsIHsgdmFsdWUsIG1vZGlmaWVyczogeyBudW1iZXIgfSB9KSB7XG4gICAgc2V0U2VsZWN0ZWQoZWwsIHZhbHVlLCBudW1iZXIpO1xuICB9LFxuICBiZWZvcmVVcGRhdGUoZWwsIF9iaW5kaW5nLCB2bm9kZSkge1xuICAgIGVsW2Fzc2lnbktleV0gPSBnZXRNb2RlbEFzc2lnbmVyKHZub2RlKTtcbiAgfSxcbiAgdXBkYXRlZChlbCwgeyB2YWx1ZSwgbW9kaWZpZXJzOiB7IG51bWJlciB9IH0pIHtcbiAgICBpZiAoIWVsLl9hc3NpZ25pbmcpIHtcbiAgICAgIHNldFNlbGVjdGVkKGVsLCB2YWx1ZSwgbnVtYmVyKTtcbiAgICB9XG4gIH1cbn07XG5mdW5jdGlvbiBzZXRTZWxlY3RlZChlbCwgdmFsdWUsIG51bWJlcikge1xuICBjb25zdCBpc011bHRpcGxlID0gZWwubXVsdGlwbGU7XG4gIGNvbnN0IGlzQXJyYXlWYWx1ZSA9IGlzQXJyYXkodmFsdWUpO1xuICBpZiAoaXNNdWx0aXBsZSAmJiAhaXNBcnJheVZhbHVlICYmICFpc1NldCh2YWx1ZSkpIHtcbiAgICAhIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHdhcm4oXG4gICAgICBgPHNlbGVjdCBtdWx0aXBsZSB2LW1vZGVsPiBleHBlY3RzIGFuIEFycmF5IG9yIFNldCB2YWx1ZSBmb3IgaXRzIGJpbmRpbmcsIGJ1dCBnb3QgJHtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKX0uYFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAobGV0IGkgPSAwLCBsID0gZWwub3B0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb25zdCBvcHRpb24gPSBlbC5vcHRpb25zW2ldO1xuICAgIGNvbnN0IG9wdGlvblZhbHVlID0gZ2V0VmFsdWUob3B0aW9uKTtcbiAgICBpZiAoaXNNdWx0aXBsZSkge1xuICAgICAgaWYgKGlzQXJyYXlWYWx1ZSkge1xuICAgICAgICBjb25zdCBvcHRpb25UeXBlID0gdHlwZW9mIG9wdGlvblZhbHVlO1xuICAgICAgICBpZiAob3B0aW9uVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBvcHRpb25UeXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdmFsdWUuaW5jbHVkZXMoXG4gICAgICAgICAgICBudW1iZXIgPyBsb29zZVRvTnVtYmVyKG9wdGlvblZhbHVlKSA6IG9wdGlvblZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBsb29zZUluZGV4T2YodmFsdWUsIG9wdGlvblZhbHVlKSA+IC0xO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB2YWx1ZS5oYXMob3B0aW9uVmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobG9vc2VFcXVhbChnZXRWYWx1ZShvcHRpb24pLCB2YWx1ZSkpIHtcbiAgICAgIGlmIChlbC5zZWxlY3RlZEluZGV4ICE9PSBpKVxuICAgICAgICBlbC5zZWxlY3RlZEluZGV4ID0gaTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc011bHRpcGxlICYmIGVsLnNlbGVjdGVkSW5kZXggIT09IC0xKSB7XG4gICAgZWwuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICB9XG59XG5mdW5jdGlvbiBnZXRWYWx1ZShlbCkge1xuICByZXR1cm4gXCJfdmFsdWVcIiBpbiBlbCA/IGVsLl92YWx1ZSA6IGVsLnZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0Q2hlY2tib3hWYWx1ZShlbCwgY2hlY2tlZCkge1xuICBjb25zdCBrZXkgPSBjaGVja2VkID8gXCJfdHJ1ZVZhbHVlXCIgOiBcIl9mYWxzZVZhbHVlXCI7XG4gIHJldHVybiBrZXkgaW4gZWwgPyBlbFtrZXldIDogY2hlY2tlZDtcbn1cbmNvbnN0IHZNb2RlbER5bmFtaWMgPSB7XG4gIGNyZWF0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gICAgY2FsbE1vZGVsSG9vayhlbCwgYmluZGluZywgdm5vZGUsIG51bGwsIFwiY3JlYXRlZFwiKTtcbiAgfSxcbiAgbW91bnRlZChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICBjYWxsTW9kZWxIb29rKGVsLCBiaW5kaW5nLCB2bm9kZSwgbnVsbCwgXCJtb3VudGVkXCIpO1xuICB9LFxuICBiZWZvcmVVcGRhdGUoZWwsIGJpbmRpbmcsIHZub2RlLCBwcmV2Vk5vZGUpIHtcbiAgICBjYWxsTW9kZWxIb29rKGVsLCBiaW5kaW5nLCB2bm9kZSwgcHJldlZOb2RlLCBcImJlZm9yZVVwZGF0ZVwiKTtcbiAgfSxcbiAgdXBkYXRlZChlbCwgYmluZGluZywgdm5vZGUsIHByZXZWTm9kZSkge1xuICAgIGNhbGxNb2RlbEhvb2soZWwsIGJpbmRpbmcsIHZub2RlLCBwcmV2Vk5vZGUsIFwidXBkYXRlZFwiKTtcbiAgfVxufTtcbmZ1bmN0aW9uIHJlc29sdmVEeW5hbWljTW9kZWwodGFnTmFtZSwgdHlwZSkge1xuICBzd2l0Y2ggKHRhZ05hbWUpIHtcbiAgICBjYXNlIFwiU0VMRUNUXCI6XG4gICAgICByZXR1cm4gdk1vZGVsU2VsZWN0O1xuICAgIGNhc2UgXCJURVhUQVJFQVwiOlxuICAgICAgcmV0dXJuIHZNb2RlbFRleHQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiY2hlY2tib3hcIjpcbiAgICAgICAgICByZXR1cm4gdk1vZGVsQ2hlY2tib3g7XG4gICAgICAgIGNhc2UgXCJyYWRpb1wiOlxuICAgICAgICAgIHJldHVybiB2TW9kZWxSYWRpbztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gdk1vZGVsVGV4dDtcbiAgICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY2FsbE1vZGVsSG9vayhlbCwgYmluZGluZywgdm5vZGUsIHByZXZWTm9kZSwgaG9vaykge1xuICBjb25zdCBtb2RlbFRvVXNlID0gcmVzb2x2ZUR5bmFtaWNNb2RlbChcbiAgICBlbC50YWdOYW1lLFxuICAgIHZub2RlLnByb3BzICYmIHZub2RlLnByb3BzLnR5cGVcbiAgKTtcbiAgY29uc3QgZm4gPSBtb2RlbFRvVXNlW2hvb2tdO1xuICBmbiAmJiBmbihlbCwgYmluZGluZywgdm5vZGUsIHByZXZWTm9kZSk7XG59XG5mdW5jdGlvbiBpbml0Vk1vZGVsRm9yU1NSKCkge1xuICB2TW9kZWxUZXh0LmdldFNTUlByb3BzID0gKHsgdmFsdWUgfSkgPT4gKHsgdmFsdWUgfSk7XG4gIHZNb2RlbFJhZGlvLmdldFNTUlByb3BzID0gKHsgdmFsdWUgfSwgdm5vZGUpID0+IHtcbiAgICBpZiAodm5vZGUucHJvcHMgJiYgbG9vc2VFcXVhbCh2bm9kZS5wcm9wcy52YWx1ZSwgdmFsdWUpKSB7XG4gICAgICByZXR1cm4geyBjaGVja2VkOiB0cnVlIH07XG4gICAgfVxuICB9O1xuICB2TW9kZWxDaGVja2JveC5nZXRTU1JQcm9wcyA9ICh7IHZhbHVlIH0sIHZub2RlKSA9PiB7XG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBpZiAodm5vZGUucHJvcHMgJiYgbG9vc2VJbmRleE9mKHZhbHVlLCB2bm9kZS5wcm9wcy52YWx1ZSkgPiAtMSkge1xuICAgICAgICByZXR1cm4geyBjaGVja2VkOiB0cnVlIH07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1NldCh2YWx1ZSkpIHtcbiAgICAgIGlmICh2bm9kZS5wcm9wcyAmJiB2YWx1ZS5oYXModm5vZGUucHJvcHMudmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IGNoZWNrZWQ6IHRydWUgfTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4geyBjaGVja2VkOiB0cnVlIH07XG4gICAgfVxuICB9O1xuICB2TW9kZWxEeW5hbWljLmdldFNTUlByb3BzID0gKGJpbmRpbmcsIHZub2RlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2bm9kZS50eXBlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1vZGVsVG9Vc2UgPSByZXNvbHZlRHluYW1pY01vZGVsKFxuICAgICAgLy8gcmVzb2x2ZUR5bmFtaWNNb2RlbCBleHBlY3RzIGFuIHVwcGVyY2FzZSB0YWcgbmFtZSwgYnV0IHZub2RlLnR5cGUgaXMgbG93ZXJjYXNlXG4gICAgICB2bm9kZS50eXBlLnRvVXBwZXJDYXNlKCksXG4gICAgICB2bm9kZS5wcm9wcyAmJiB2bm9kZS5wcm9wcy50eXBlXG4gICAgKTtcbiAgICBpZiAobW9kZWxUb1VzZS5nZXRTU1JQcm9wcykge1xuICAgICAgcmV0dXJuIG1vZGVsVG9Vc2UuZ2V0U1NSUHJvcHMoYmluZGluZywgdm5vZGUpO1xuICAgIH1cbiAgfTtcbn1cblxuY29uc3Qgc3lzdGVtTW9kaWZpZXJzID0gW1wiY3RybFwiLCBcInNoaWZ0XCIsIFwiYWx0XCIsIFwibWV0YVwiXTtcbmNvbnN0IG1vZGlmaWVyR3VhcmRzID0ge1xuICBzdG9wOiAoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKSxcbiAgcHJldmVudDogKGUpID0+IGUucHJldmVudERlZmF1bHQoKSxcbiAgc2VsZjogKGUpID0+IGUudGFyZ2V0ICE9PSBlLmN1cnJlbnRUYXJnZXQsXG4gIGN0cmw6IChlKSA9PiAhZS5jdHJsS2V5LFxuICBzaGlmdDogKGUpID0+ICFlLnNoaWZ0S2V5LFxuICBhbHQ6IChlKSA9PiAhZS5hbHRLZXksXG4gIG1ldGE6IChlKSA9PiAhZS5tZXRhS2V5LFxuICBsZWZ0OiAoZSkgPT4gXCJidXR0b25cIiBpbiBlICYmIGUuYnV0dG9uICE9PSAwLFxuICBtaWRkbGU6IChlKSA9PiBcImJ1dHRvblwiIGluIGUgJiYgZS5idXR0b24gIT09IDEsXG4gIHJpZ2h0OiAoZSkgPT4gXCJidXR0b25cIiBpbiBlICYmIGUuYnV0dG9uICE9PSAyLFxuICBleGFjdDogKGUsIG1vZGlmaWVycykgPT4gc3lzdGVtTW9kaWZpZXJzLnNvbWUoKG0pID0+IGVbYCR7bX1LZXlgXSAmJiAhbW9kaWZpZXJzLmluY2x1ZGVzKG0pKVxufTtcbmNvbnN0IHdpdGhNb2RpZmllcnMgPSAoZm4sIG1vZGlmaWVycykgPT4ge1xuICBjb25zdCBjYWNoZSA9IGZuLl93aXRoTW9kcyB8fCAoZm4uX3dpdGhNb2RzID0ge30pO1xuICBjb25zdCBjYWNoZUtleSA9IG1vZGlmaWVycy5qb2luKFwiLlwiKTtcbiAgcmV0dXJuIGNhY2hlW2NhY2hlS2V5XSB8fCAoY2FjaGVbY2FjaGVLZXldID0gKGV2ZW50LCAuLi5hcmdzKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2RpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGd1YXJkID0gbW9kaWZpZXJHdWFyZHNbbW9kaWZpZXJzW2ldXTtcbiAgICAgIGlmIChndWFyZCAmJiBndWFyZChldmVudCwgbW9kaWZpZXJzKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gZm4oZXZlbnQsIC4uLmFyZ3MpO1xuICB9KTtcbn07XG5jb25zdCBrZXlOYW1lcyA9IHtcbiAgZXNjOiBcImVzY2FwZVwiLFxuICBzcGFjZTogXCIgXCIsXG4gIHVwOiBcImFycm93LXVwXCIsXG4gIGxlZnQ6IFwiYXJyb3ctbGVmdFwiLFxuICByaWdodDogXCJhcnJvdy1yaWdodFwiLFxuICBkb3duOiBcImFycm93LWRvd25cIixcbiAgZGVsZXRlOiBcImJhY2tzcGFjZVwiXG59O1xuY29uc3Qgd2l0aEtleXMgPSAoZm4sIG1vZGlmaWVycykgPT4ge1xuICBjb25zdCBjYWNoZSA9IGZuLl93aXRoS2V5cyB8fCAoZm4uX3dpdGhLZXlzID0ge30pO1xuICBjb25zdCBjYWNoZUtleSA9IG1vZGlmaWVycy5qb2luKFwiLlwiKTtcbiAgcmV0dXJuIGNhY2hlW2NhY2hlS2V5XSB8fCAoY2FjaGVbY2FjaGVLZXldID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKCEoXCJrZXlcIiBpbiBldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXZlbnRLZXkgPSBoeXBoZW5hdGUoZXZlbnQua2V5KTtcbiAgICBpZiAobW9kaWZpZXJzLnNvbWUoKGspID0+IGsgPT09IGV2ZW50S2V5IHx8IGtleU5hbWVzW2tdID09PSBldmVudEtleSkpIHtcbiAgICAgIHJldHVybiBmbihldmVudCk7XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IHJlbmRlcmVyT3B0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBleHRlbmQoeyBwYXRjaFByb3AgfSwgbm9kZU9wcyk7XG5sZXQgcmVuZGVyZXI7XG5sZXQgZW5hYmxlZEh5ZHJhdGlvbiA9IGZhbHNlO1xuZnVuY3Rpb24gZW5zdXJlUmVuZGVyZXIoKSB7XG4gIHJldHVybiByZW5kZXJlciB8fCAocmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihyZW5kZXJlck9wdGlvbnMpKTtcbn1cbmZ1bmN0aW9uIGVuc3VyZUh5ZHJhdGlvblJlbmRlcmVyKCkge1xuICByZW5kZXJlciA9IGVuYWJsZWRIeWRyYXRpb24gPyByZW5kZXJlciA6IGNyZWF0ZUh5ZHJhdGlvblJlbmRlcmVyKHJlbmRlcmVyT3B0aW9ucyk7XG4gIGVuYWJsZWRIeWRyYXRpb24gPSB0cnVlO1xuICByZXR1cm4gcmVuZGVyZXI7XG59XG5jb25zdCByZW5kZXIgPSAoLi4uYXJncykgPT4ge1xuICBlbnN1cmVSZW5kZXJlcigpLnJlbmRlciguLi5hcmdzKTtcbn07XG5jb25zdCBoeWRyYXRlID0gKC4uLmFyZ3MpID0+IHtcbiAgZW5zdXJlSHlkcmF0aW9uUmVuZGVyZXIoKS5oeWRyYXRlKC4uLmFyZ3MpO1xufTtcbmNvbnN0IGNyZWF0ZUFwcCA9ICguLi5hcmdzKSA9PiB7XG4gIGNvbnN0IGFwcCA9IGVuc3VyZVJlbmRlcmVyKCkuY3JlYXRlQXBwKC4uLmFyZ3MpO1xuICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSkge1xuICAgIGluamVjdE5hdGl2ZVRhZ0NoZWNrKGFwcCk7XG4gICAgaW5qZWN0Q29tcGlsZXJPcHRpb25zQ2hlY2soYXBwKTtcbiAgfVxuICBjb25zdCB7IG1vdW50IH0gPSBhcHA7XG4gIGFwcC5tb3VudCA9IChjb250YWluZXJPclNlbGVjdG9yKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbm9ybWFsaXplQ29udGFpbmVyKGNvbnRhaW5lck9yU2VsZWN0b3IpO1xuICAgIGlmICghY29udGFpbmVyKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IGFwcC5fY29tcG9uZW50O1xuICAgIGlmICghaXNGdW5jdGlvbihjb21wb25lbnQpICYmICFjb21wb25lbnQucmVuZGVyICYmICFjb21wb25lbnQudGVtcGxhdGUpIHtcbiAgICAgIGNvbXBvbmVudC50ZW1wbGF0ZSA9IGNvbnRhaW5lci5pbm5lckhUTUw7XG4gICAgfVxuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBcIlwiO1xuICAgIGNvbnN0IHByb3h5ID0gbW91bnQoY29udGFpbmVyLCBmYWxzZSwgcmVzb2x2ZVJvb3ROYW1lc3BhY2UoY29udGFpbmVyKSk7XG4gICAgaWYgKGNvbnRhaW5lciBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoXCJ2LWNsb2FrXCIpO1xuICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtdi1hcHBcIiwgXCJcIik7XG4gICAgfVxuICAgIHJldHVybiBwcm94eTtcbiAgfTtcbiAgcmV0dXJuIGFwcDtcbn07XG5jb25zdCBjcmVhdGVTU1JBcHAgPSAoLi4uYXJncykgPT4ge1xuICBjb25zdCBhcHAgPSBlbnN1cmVIeWRyYXRpb25SZW5kZXJlcigpLmNyZWF0ZUFwcCguLi5hcmdzKTtcbiAgaWYgKCEhKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikpIHtcbiAgICBpbmplY3ROYXRpdmVUYWdDaGVjayhhcHApO1xuICAgIGluamVjdENvbXBpbGVyT3B0aW9uc0NoZWNrKGFwcCk7XG4gIH1cbiAgY29uc3QgeyBtb3VudCB9ID0gYXBwO1xuICBhcHAubW91bnQgPSAoY29udGFpbmVyT3JTZWxlY3RvcikgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG5vcm1hbGl6ZUNvbnRhaW5lcihjb250YWluZXJPclNlbGVjdG9yKTtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gbW91bnQoY29udGFpbmVyLCB0cnVlLCByZXNvbHZlUm9vdE5hbWVzcGFjZShjb250YWluZXIpKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBhcHA7XG59O1xuZnVuY3Rpb24gcmVzb2x2ZVJvb3ROYW1lc3BhY2UoY29udGFpbmVyKSB7XG4gIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSB7XG4gICAgcmV0dXJuIFwic3ZnXCI7XG4gIH1cbiAgaWYgKHR5cGVvZiBNYXRoTUxFbGVtZW50ID09PSBcImZ1bmN0aW9uXCIgJiYgY29udGFpbmVyIGluc3RhbmNlb2YgTWF0aE1MRWxlbWVudCkge1xuICAgIHJldHVybiBcIm1hdGhtbFwiO1xuICB9XG59XG5mdW5jdGlvbiBpbmplY3ROYXRpdmVUYWdDaGVjayhhcHApIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFwcC5jb25maWcsIFwiaXNOYXRpdmVUYWdcIiwge1xuICAgIHZhbHVlOiAodGFnKSA9PiBpc0hUTUxUYWcodGFnKSB8fCBpc1NWR1RhZyh0YWcpIHx8IGlzTWF0aE1MVGFnKHRhZyksXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xufVxuZnVuY3Rpb24gaW5qZWN0Q29tcGlsZXJPcHRpb25zQ2hlY2soYXBwKSB7XG4gIGlmIChpc1J1bnRpbWVPbmx5KCkpIHtcbiAgICBjb25zdCBpc0N1c3RvbUVsZW1lbnQgPSBhcHAuY29uZmlnLmlzQ3VzdG9tRWxlbWVudDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXBwLmNvbmZpZywgXCJpc0N1c3RvbUVsZW1lbnRcIiwge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gaXNDdXN0b21FbGVtZW50O1xuICAgICAgfSxcbiAgICAgIHNldCgpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBgVGhlIFxcYGlzQ3VzdG9tRWxlbWVudFxcYCBjb25maWcgb3B0aW9uIGlzIGRlcHJlY2F0ZWQuIFVzZSBcXGBjb21waWxlck9wdGlvbnMuaXNDdXN0b21FbGVtZW50XFxgIGluc3RlYWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbXBpbGVyT3B0aW9ucyA9IGFwcC5jb25maWcuY29tcGlsZXJPcHRpb25zO1xuICAgIGNvbnN0IG1zZyA9IGBUaGUgXFxgY29tcGlsZXJPcHRpb25zXFxgIGNvbmZpZyBvcHRpb24gaXMgb25seSByZXNwZWN0ZWQgd2hlbiB1c2luZyBhIGJ1aWxkIG9mIFZ1ZS5qcyB0aGF0IGluY2x1ZGVzIHRoZSBydW50aW1lIGNvbXBpbGVyIChha2EgXCJmdWxsIGJ1aWxkXCIpLiBTaW5jZSB5b3UgYXJlIHVzaW5nIHRoZSBydW50aW1lLW9ubHkgYnVpbGQsIFxcYGNvbXBpbGVyT3B0aW9uc1xcYCBtdXN0IGJlIHBhc3NlZCB0byBcXGBAdnVlL2NvbXBpbGVyLWRvbVxcYCBpbiB0aGUgYnVpbGQgc2V0dXAgaW5zdGVhZC5cbi0gRm9yIHZ1ZS1sb2FkZXI6IHBhc3MgaXQgdmlhIHZ1ZS1sb2FkZXIncyBcXGBjb21waWxlck9wdGlvbnNcXGAgbG9hZGVyIG9wdGlvbi5cbi0gRm9yIHZ1ZS1jbGk6IHNlZSBodHRwczovL2NsaS52dWVqcy5vcmcvZ3VpZGUvd2VicGFjay5odG1sI21vZGlmeWluZy1vcHRpb25zLW9mLWEtbG9hZGVyXG4tIEZvciB2aXRlOiBwYXNzIGl0IHZpYSBAdml0ZWpzL3BsdWdpbi12dWUgb3B0aW9ucy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS1wbHVnaW4tdnVlL3RyZWUvbWFpbi9wYWNrYWdlcy9wbHVnaW4tdnVlI2V4YW1wbGUtZm9yLXBhc3Npbmctb3B0aW9ucy10by12dWVjb21waWxlci1zZmNgO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcHAuY29uZmlnLCBcImNvbXBpbGVyT3B0aW9uc1wiLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHdhcm4obXNnKTtcbiAgICAgICAgcmV0dXJuIGNvbXBpbGVyT3B0aW9ucztcbiAgICAgIH0sXG4gICAgICBzZXQoKSB7XG4gICAgICAgIHdhcm4obXNnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gbm9ybWFsaXplQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICBpZiAoaXNTdHJpbmcoY29udGFpbmVyKSkge1xuICAgIGNvbnN0IHJlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY29udGFpbmVyKTtcbiAgICBpZiAoISEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSAmJiAhcmVzKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBgRmFpbGVkIHRvIG1vdW50IGFwcDogbW91bnQgdGFyZ2V0IHNlbGVjdG9yIFwiJHtjb250YWluZXJ9XCIgcmV0dXJuZWQgbnVsbC5gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIGlmICghIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHdpbmRvdy5TaGFkb3dSb290ICYmIGNvbnRhaW5lciBpbnN0YW5jZW9mIHdpbmRvdy5TaGFkb3dSb290ICYmIGNvbnRhaW5lci5tb2RlID09PSBcImNsb3NlZFwiKSB7XG4gICAgd2FybihcbiAgICAgIGBtb3VudGluZyBvbiBhIFNoYWRvd1Jvb3Qgd2l0aCBcXGB7bW9kZTogXCJjbG9zZWRcIn1cXGAgbWF5IGxlYWQgdG8gdW5wcmVkaWN0YWJsZSBidWdzYFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNvbnRhaW5lcjtcbn1cbmxldCBzc3JEaXJlY3RpdmVJbml0aWFsaXplZCA9IGZhbHNlO1xuY29uc3QgaW5pdERpcmVjdGl2ZXNGb3JTU1IgPSAoKSA9PiB7XG4gIGlmICghc3NyRGlyZWN0aXZlSW5pdGlhbGl6ZWQpIHtcbiAgICBzc3JEaXJlY3RpdmVJbml0aWFsaXplZCA9IHRydWU7XG4gICAgaW5pdFZNb2RlbEZvclNTUigpO1xuICAgIGluaXRWU2hvd0ZvclNTUigpO1xuICB9XG59IDtcblxuZXhwb3J0IHsgVHJhbnNpdGlvbiwgVHJhbnNpdGlvbkdyb3VwLCBWdWVFbGVtZW50LCBjcmVhdGVBcHAsIGNyZWF0ZVNTUkFwcCwgZGVmaW5lQ3VzdG9tRWxlbWVudCwgZGVmaW5lU1NSQ3VzdG9tRWxlbWVudCwgaHlkcmF0ZSwgaW5pdERpcmVjdGl2ZXNGb3JTU1IsIHJlbmRlciwgdXNlQ3NzTW9kdWxlLCB1c2VDc3NWYXJzLCB2TW9kZWxDaGVja2JveCwgdk1vZGVsRHluYW1pYywgdk1vZGVsUmFkaW8sIHZNb2RlbFNlbGVjdCwgdk1vZGVsVGV4dCwgdlNob3csIHdpdGhLZXlzLCB3aXRoTW9kaWZpZXJzIH07XG4iLCIvKiFcbiAgKiB2dWUtaTE4biB2OS4xMC4yXG4gICogKGMpIDIwMjQga2F6dXlhIGthd2FndWNoaVxuICAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAgKi9cbid1c2Ugc3RyaWN0JztcblxudmFyIHNoYXJlZCA9IHJlcXVpcmUoJ0BpbnRsaWZ5L3NoYXJlZCcpO1xudmFyIGNvcmVCYXNlID0gcmVxdWlyZSgnQGludGxpZnkvY29yZS1iYXNlJyk7XG52YXIgdnVlID0gcmVxdWlyZSgndnVlJyk7XG5cbi8qKlxuICogVnVlIEkxOG4gVmVyc2lvblxuICpcbiAqIEByZW1hcmtzXG4gKiBTZW12ZXIgZm9ybWF0LiBTYW1lIGZvcm1hdCBhcyB0aGUgcGFja2FnZS5qc29uIGB2ZXJzaW9uYCBmaWVsZC5cbiAqXG4gKiBAVnVlSTE4bkdlbmVyYWxcbiAqL1xuY29uc3QgVkVSU0lPTiA9ICc5LjEwLjInO1xuXG5jb25zdCBjb2RlJDEgPSBjb3JlQmFzZS5Db3JlV2FybkNvZGVzLl9fRVhURU5EX1BPSU5UX187XG5jb25zdCBpbmMkMSA9IHNoYXJlZC5pbmNyZW1lbnRlcihjb2RlJDEpO1xuY29uc3QgSTE4bldhcm5Db2RlcyA9IHtcbiAgICBGQUxMQkFDS19UT19ST09UOiBjb2RlJDEsIC8vIDlcbiAgICBOT1RfU1VQUE9SVEVEX1BSRVNFUlZFOiBpbmMkMSgpLCAvLyAxMFxuICAgIE5PVF9TVVBQT1JURURfRk9STUFUVEVSOiBpbmMkMSgpLCAvLyAxMVxuICAgIE5PVF9TVVBQT1JURURfUFJFU0VSVkVfRElSRUNUSVZFOiBpbmMkMSgpLCAvLyAxMlxuICAgIE5PVF9TVVBQT1JURURfR0VUX0NIT0lDRV9JTkRFWDogaW5jJDEoKSwgLy8gMTNcbiAgICBDT01QT05FTlRfTkFNRV9MRUdBQ1lfQ09NUEFUSUJMRTogaW5jJDEoKSwgLy8gMTRcbiAgICBOT1RfRk9VTkRfUEFSRU5UX1NDT1BFOiBpbmMkMSgpLCAvLyAxNVxuICAgIElHTk9SRV9PQkpfRkxBVFRFTjogaW5jJDEoKSwgLy8gMTZcbiAgICBOT1RJQ0VfRFJPUF9BTExPV19DT01QT1NJVElPTjogaW5jJDEoKSwgLy8gMTdcbiAgICBOT1RJQ0VfRFJPUF9UUkFOU0xBVEVfRVhJU1RfQ09NUEFUSUJMRV9GTEFHOiBpbmMkMSgpIC8vIDE4XG59O1xuY29uc3Qgd2Fybk1lc3NhZ2VzID0ge1xuICAgIFtJMThuV2FybkNvZGVzLkZBTExCQUNLX1RPX1JPT1RdOiBgRmFsbCBiYWNrIHRvIHt0eXBlfSAne2tleX0nIHdpdGggcm9vdCBsb2NhbGUuYCxcbiAgICBbSTE4bldhcm5Db2Rlcy5OT1RfU1VQUE9SVEVEX1BSRVNFUlZFXTogYE5vdCBzdXBwb3J0ZWQgJ3ByZXNlcnZlJy5gLFxuICAgIFtJMThuV2FybkNvZGVzLk5PVF9TVVBQT1JURURfRk9STUFUVEVSXTogYE5vdCBzdXBwb3J0ZWQgJ2Zvcm1hdHRlcicuYCxcbiAgICBbSTE4bldhcm5Db2Rlcy5OT1RfU1VQUE9SVEVEX1BSRVNFUlZFX0RJUkVDVElWRV06IGBOb3Qgc3VwcG9ydGVkICdwcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQnLmAsXG4gICAgW0kxOG5XYXJuQ29kZXMuTk9UX1NVUFBPUlRFRF9HRVRfQ0hPSUNFX0lOREVYXTogYE5vdCBzdXBwb3J0ZWQgJ2dldENob2ljZUluZGV4Jy5gLFxuICAgIFtJMThuV2FybkNvZGVzLkNPTVBPTkVOVF9OQU1FX0xFR0FDWV9DT01QQVRJQkxFXTogYENvbXBvbmVudCBuYW1lIGxlZ2FjeSBjb21wYXRpYmxlOiAne25hbWV9JyAtPiAnaTE4bidgLFxuICAgIFtJMThuV2FybkNvZGVzLk5PVF9GT1VORF9QQVJFTlRfU0NPUEVdOiBgTm90IGZvdW5kIHBhcmVudCBzY29wZS4gdXNlIHRoZSBnbG9iYWwgc2NvcGUuYCxcbiAgICBbSTE4bldhcm5Db2Rlcy5JR05PUkVfT0JKX0ZMQVRURU5dOiBgSWdub3JlIG9iamVjdCBmbGF0dGVuOiAne2tleX0nIGtleSBoYXMgYW4gc3RyaW5nIHZhbHVlYCxcbiAgICBbSTE4bldhcm5Db2Rlcy5OT1RJQ0VfRFJPUF9BTExPV19DT01QT1NJVElPTl06IGAnYWxsb3dDb21wb3NpdGlvbicgb3B0aW9uIHdpbGwgYmUgZHJvcHBlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSDwn5GJIGh0dHBzOi8vdGlueXVybC5jb20vMnA5N21jemVgLFxuICAgIFtJMThuV2FybkNvZGVzLk5PVElDRV9EUk9QX1RSQU5TTEFURV9FWElTVF9DT01QQVRJQkxFX0ZMQUddOiBgJ3RyYW5zbGF0ZUV4aXN0Q29tcGF0aWJsZScgb3B0aW9uIHdpbGwgYmUgZHJvcHBlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLmBcbn07XG5mdW5jdGlvbiBnZXRXYXJuTWVzc2FnZShjb2RlLCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHNoYXJlZC5mb3JtYXQod2Fybk1lc3NhZ2VzW2NvZGVdLCAuLi5hcmdzKTtcbn1cblxuY29uc3QgY29kZSA9IGNvcmVCYXNlLkNvcmVFcnJvckNvZGVzLl9fRVhURU5EX1BPSU5UX187XG5jb25zdCBpbmMgPSBzaGFyZWQuaW5jcmVtZW50ZXIoY29kZSk7XG5jb25zdCBJMThuRXJyb3JDb2RlcyA9IHtcbiAgICAvLyBjb21wb3NlciBtb2R1bGUgZXJyb3JzXG4gICAgVU5FWFBFQ1RFRF9SRVRVUk5fVFlQRTogY29kZSwgLy8gMjZcbiAgICAvLyBsZWdhY3kgbW9kdWxlIGVycm9yc1xuICAgIElOVkFMSURfQVJHVU1FTlQ6IGluYygpLCAvLyAyN1xuICAgIC8vIGkxOG4gbW9kdWxlIGVycm9yc1xuICAgIE1VU1RfQkVfQ0FMTF9TRVRVUF9UT1A6IGluYygpLCAvLyAyOFxuICAgIE5PVF9JTlNUQUxMRUQ6IGluYygpLCAvLyAyOVxuICAgIE5PVF9BVkFJTEFCTEVfSU5fTEVHQUNZX01PREU6IGluYygpLCAvLyAzMFxuICAgIC8vIGRpcmVjdGl2ZSBtb2R1bGUgZXJyb3JzXG4gICAgUkVRVUlSRURfVkFMVUU6IGluYygpLCAvLyAzMVxuICAgIElOVkFMSURfVkFMVUU6IGluYygpLCAvLyAzMlxuICAgIC8vIHZ1ZS1kZXZ0b29scyBlcnJvcnNcbiAgICBDQU5OT1RfU0VUVVBfVlVFX0RFVlRPT0xTX1BMVUdJTjogaW5jKCksIC8vIDMzXG4gICAgTk9UX0lOU1RBTExFRF9XSVRIX1BST1ZJREU6IGluYygpLCAvLyAzNFxuICAgIC8vIHVuZXhwZWN0ZWQgZXJyb3JcbiAgICBVTkVYUEVDVEVEX0VSUk9SOiBpbmMoKSwgLy8gMzVcbiAgICAvLyBub3QgY29tcGF0aWJsZSBsZWdhY3kgdnVlLWkxOG4gY29uc3RydWN0b3JcbiAgICBOT1RfQ09NUEFUSUJMRV9MRUdBQ1lfVlVFX0kxOE46IGluYygpLCAvLyAzNlxuICAgIC8vIGJyaWRnZSBzdXBwb3J0IHZ1ZSAyLnggb25seVxuICAgIEJSSURHRV9TVVBQT1JUX1ZVRV8yX09OTFk6IGluYygpLCAvLyAzN1xuICAgIC8vIG5lZWQgdG8gZGVmaW5lIGBpMThuYCBvcHRpb24gaW4gYGFsbG93Q29tcG9zaXRpb246IHRydWVgIGFuZCBgdXNlU2NvcGU6ICdsb2NhbCcgYXQgYHVzZUkxOG5gYFxuICAgIE1VU1RfREVGSU5FX0kxOE5fT1BUSU9OX0lOX0FMTE9XX0NPTVBPU0lUSU9OOiBpbmMoKSwgLy8gMzhcbiAgICAvLyBOb3QgYXZhaWxhYmxlIENvbXBvc3Rpb24gQVBJIGluIExlZ2FjeSBBUEkgbW9kZS4gUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSBsZWdhY3kgQVBJIG1vZGUgaXMgd29ya2luZyBwcm9wZXJseVxuICAgIE5PVF9BVkFJTEFCTEVfQ09NUE9TSVRJT05fSU5fTEVHQUNZOiBpbmMoKSwgLy8gMzlcbiAgICAvLyBmb3IgZW5oYW5jZW1lbnRcbiAgICBfX0VYVEVORF9QT0lOVF9fOiBpbmMoKSAvLyA0MFxufTtcbmZ1bmN0aW9uIGNyZWF0ZUkxOG5FcnJvcihjb2RlLCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIGNvcmVCYXNlLmNyZWF0ZUNvbXBpbGVFcnJvcihjb2RlLCBudWxsLCB7IG1lc3NhZ2VzOiBlcnJvck1lc3NhZ2VzLCBhcmdzIH0gKTtcbn1cbmNvbnN0IGVycm9yTWVzc2FnZXMgPSB7XG4gICAgW0kxOG5FcnJvckNvZGVzLlVORVhQRUNURURfUkVUVVJOX1RZUEVdOiAnVW5leHBlY3RlZCByZXR1cm4gdHlwZSBpbiBjb21wb3NlcicsXG4gICAgW0kxOG5FcnJvckNvZGVzLklOVkFMSURfQVJHVU1FTlRdOiAnSW52YWxpZCBhcmd1bWVudCcsXG4gICAgW0kxOG5FcnJvckNvZGVzLk1VU1RfQkVfQ0FMTF9TRVRVUF9UT1BdOiAnTXVzdCBiZSBjYWxsZWQgYXQgdGhlIHRvcCBvZiBhIGBzZXR1cGAgZnVuY3Rpb24nLFxuICAgIFtJMThuRXJyb3JDb2Rlcy5OT1RfSU5TVEFMTEVEXTogJ05lZWQgdG8gaW5zdGFsbCB3aXRoIGBhcHAudXNlYCBmdW5jdGlvbicsXG4gICAgW0kxOG5FcnJvckNvZGVzLlVORVhQRUNURURfRVJST1JdOiAnVW5leHBlY3RlZCBlcnJvcicsXG4gICAgW0kxOG5FcnJvckNvZGVzLk5PVF9BVkFJTEFCTEVfSU5fTEVHQUNZX01PREVdOiAnTm90IGF2YWlsYWJsZSBpbiBsZWdhY3kgbW9kZScsXG4gICAgW0kxOG5FcnJvckNvZGVzLlJFUVVJUkVEX1ZBTFVFXTogYFJlcXVpcmVkIGluIHZhbHVlOiB7MH1gLFxuICAgIFtJMThuRXJyb3JDb2Rlcy5JTlZBTElEX1ZBTFVFXTogYEludmFsaWQgdmFsdWVgLFxuICAgIFtJMThuRXJyb3JDb2Rlcy5DQU5OT1RfU0VUVVBfVlVFX0RFVlRPT0xTX1BMVUdJTl06IGBDYW5ub3Qgc2V0dXAgdnVlLWRldnRvb2xzIHBsdWdpbmAsXG4gICAgW0kxOG5FcnJvckNvZGVzLk5PVF9JTlNUQUxMRURfV0lUSF9QUk9WSURFXTogJ05lZWQgdG8gaW5zdGFsbCB3aXRoIGBwcm92aWRlYCBmdW5jdGlvbicsXG4gICAgW0kxOG5FcnJvckNvZGVzLk5PVF9DT01QQVRJQkxFX0xFR0FDWV9WVUVfSTE4Tl06ICdOb3QgY29tcGF0aWJsZSBsZWdhY3kgVnVlSTE4bi4nLFxuICAgIFtJMThuRXJyb3JDb2Rlcy5CUklER0VfU1VQUE9SVF9WVUVfMl9PTkxZXTogJ3Z1ZS1pMThuLWJyaWRnZSBzdXBwb3J0IFZ1ZSAyLnggb25seScsXG4gICAgW0kxOG5FcnJvckNvZGVzLk1VU1RfREVGSU5FX0kxOE5fT1BUSU9OX0lOX0FMTE9XX0NPTVBPU0lUSU9OXTogJ011c3QgZGVmaW5lIOKAmGkxOG7igJkgb3B0aW9uIG9yIGN1c3RvbSBibG9jayBpbiBDb21wb3NpdGlvbiBBUEkgd2l0aCB1c2luZyBsb2NhbCBzY29wZSBpbiBMZWdhY3kgQVBJIG1vZGUnLFxuICAgIFtJMThuRXJyb3JDb2Rlcy5OT1RfQVZBSUxBQkxFX0NPTVBPU0lUSU9OX0lOX0xFR0FDWV06ICdOb3QgYXZhaWxhYmxlIENvbXBvc3Rpb24gQVBJIGluIExlZ2FjeSBBUEkgbW9kZS4gUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSBsZWdhY3kgQVBJIG1vZGUgaXMgd29ya2luZyBwcm9wZXJseSdcbn07XG5cbmNvbnN0IFRyYW5zbGF0ZVZOb2RlU3ltYm9sID0gXG4vKiAjX19QVVJFX18qLyBzaGFyZWQubWFrZVN5bWJvbCgnX190cmFuc2xhdGVWTm9kZScpO1xuY29uc3QgRGF0ZXRpbWVQYXJ0c1N5bWJvbCA9IC8qICNfX1BVUkVfXyovIHNoYXJlZC5tYWtlU3ltYm9sKCdfX2RhdGV0aW1lUGFydHMnKTtcbmNvbnN0IE51bWJlclBhcnRzU3ltYm9sID0gLyogI19fUFVSRV9fKi8gc2hhcmVkLm1ha2VTeW1ib2woJ19fbnVtYmVyUGFydHMnKTtcbmNvbnN0IEVuYWJsZUVtaXR0ZXIgPSAvKiAjX19QVVJFX18qLyBzaGFyZWQubWFrZVN5bWJvbCgnX19lbmFibGVFbWl0dGVyJyk7XG5jb25zdCBEaXNhYmxlRW1pdHRlciA9IC8qICNfX1BVUkVfXyovIHNoYXJlZC5tYWtlU3ltYm9sKCdfX2Rpc2FibGVFbWl0dGVyJyk7XG5jb25zdCBTZXRQbHVyYWxSdWxlc1N5bWJvbCA9IHNoYXJlZC5tYWtlU3ltYm9sKCdfX3NldFBsdXJhbFJ1bGVzJyk7XG5zaGFyZWQubWFrZVN5bWJvbCgnX19pbnRsaWZ5TWV0YScpO1xuY29uc3QgSW5lamN0V2l0aE9wdGlvblN5bWJvbCA9IFxuLyogI19fUFVSRV9fKi8gc2hhcmVkLm1ha2VTeW1ib2woJ19faW5qZWN0V2l0aE9wdGlvbicpO1xuY29uc3QgRGlzcG9zZVN5bWJvbCA9IC8qICNfX1BVUkVfXyovIHNoYXJlZC5tYWtlU3ltYm9sKCdfX2Rpc3Bvc2UnKTtcbmNvbnN0IF9fVlVFX0kxOE5fQlJJREdFX18gPSAgJ19fVlVFX0kxOE5fQlJJREdFX18nO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKipcbiAqIFRyYW5zZm9ybSBmbGF0IGpzb24gaW4gb2JqIHRvIG5vcm1hbCBqc29uIGluIG9ialxuICovXG5mdW5jdGlvbiBoYW5kbGVGbGF0SnNvbihvYmopIHtcbiAgICAvLyBjaGVjayBvYmpcbiAgICBpZiAoIXNoYXJlZC5pc09iamVjdChvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICAvLyBjaGVjayBrZXlcbiAgICAgICAgaWYgKCFzaGFyZWQuaGFzT3duKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGFuZGxlIGZvciBub3JtYWwganNvblxuICAgICAgICBpZiAoIWtleS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgICAgICAvLyByZWN1cnNpdmUgcHJvY2VzcyB2YWx1ZSBpZiB2YWx1ZSBpcyBhbHNvIGEgb2JqZWN0XG4gICAgICAgICAgICBpZiAoc2hhcmVkLmlzT2JqZWN0KG9ialtrZXldKSkge1xuICAgICAgICAgICAgICAgIGhhbmRsZUZsYXRKc29uKG9ialtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBoYW5kbGUgZm9yIGZsYXQganNvbiwgdHJhbnNmb3JtIHRvIG5vcm1hbCBqc29uXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZ28gdG8gdGhlIGxhc3Qgb2JqZWN0XG4gICAgICAgICAgICBjb25zdCBzdWJLZXlzID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBjb25zdCBsYXN0SW5kZXggPSBzdWJLZXlzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBsZXQgY3VycmVudE9iaiA9IG9iajtcbiAgICAgICAgICAgIGxldCBoYXNTdHJpbmdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXN0SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghKHN1YktleXNbaV0gaW4gY3VycmVudE9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE9ialtzdWJLZXlzW2ldXSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXNoYXJlZC5pc09iamVjdChjdXJyZW50T2JqW3N1YktleXNbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICBzaGFyZWQud2FybihnZXRXYXJuTWVzc2FnZShJMThuV2FybkNvZGVzLklHTk9SRV9PQkpfRkxBVFRFTiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogc3ViS2V5c1tpXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICBoYXNTdHJpbmdWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50T2JqID0gY3VycmVudE9ialtzdWJLZXlzW2ldXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHVwZGF0ZSBsYXN0IG9iamVjdCB2YWx1ZSwgZGVsZXRlIG9sZCBwcm9wZXJ0eVxuICAgICAgICAgICAgaWYgKCFoYXNTdHJpbmdWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRPYmpbc3ViS2V5c1tsYXN0SW5kZXhdXSA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJlY3Vyc2l2ZSBwcm9jZXNzIHZhbHVlIGlmIHZhbHVlIGlzIGFsc28gYSBvYmplY3RcbiAgICAgICAgICAgIGlmIChzaGFyZWQuaXNPYmplY3QoY3VycmVudE9ialtzdWJLZXlzW2xhc3RJbmRleF1dKSkge1xuICAgICAgICAgICAgICAgIGhhbmRsZUZsYXRKc29uKGN1cnJlbnRPYmpbc3ViS2V5c1tsYXN0SW5kZXhdXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGdldExvY2FsZU1lc3NhZ2VzKGxvY2FsZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHsgbWVzc2FnZXMsIF9faTE4biwgbWVzc2FnZVJlc29sdmVyLCBmbGF0SnNvbiB9ID0gb3B0aW9ucztcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBjb25zdCByZXQgPSAoc2hhcmVkLmlzUGxhaW5PYmplY3QobWVzc2FnZXMpXG4gICAgICAgID8gbWVzc2FnZXNcbiAgICAgICAgOiBzaGFyZWQuaXNBcnJheShfX2kxOG4pXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHsgW2xvY2FsZV06IHt9IH0pO1xuICAgIC8vIG1lcmdlIGxvY2FsZSBtZXNzYWdlcyBvZiBpMThuIGN1c3RvbSBibG9ja1xuICAgIGlmIChzaGFyZWQuaXNBcnJheShfX2kxOG4pKSB7XG4gICAgICAgIF9faTE4bi5mb3JFYWNoKGN1c3RvbSA9PiB7XG4gICAgICAgICAgICBpZiAoJ2xvY2FsZScgaW4gY3VzdG9tICYmICdyZXNvdXJjZScgaW4gY3VzdG9tKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBsb2NhbGUsIHJlc291cmNlIH0gPSBjdXN0b207XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXRbbG9jYWxlXSA9IHJldFtsb2NhbGVdIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBzaGFyZWQuZGVlcENvcHkocmVzb3VyY2UsIHJldFtsb2NhbGVdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNoYXJlZC5kZWVwQ29weShyZXNvdXJjZSwgcmV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaGFyZWQuaXNTdHJpbmcoY3VzdG9tKSAmJiBzaGFyZWQuZGVlcENvcHkoSlNPTi5wYXJzZShjdXN0b20pLCByZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaGFuZGxlIG1lc3NhZ2VzIGZvciBmbGF0IGpzb25cbiAgICBpZiAobWVzc2FnZVJlc29sdmVyID09IG51bGwgJiYgZmxhdEpzb24pIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmV0KSB7XG4gICAgICAgICAgICBpZiAoc2hhcmVkLmhhc093bihyZXQsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVGbGF0SnNvbihyZXRba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBnZXRDb21wb25lbnRPcHRpb25zKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLnR5cGUgO1xufVxuZnVuY3Rpb24gYWRqdXN0STE4blJlc291cmNlcyhnbCwgb3B0aW9ucywgY29tcG9uZW50T3B0aW9ucyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbikge1xuICAgIGxldCBtZXNzYWdlcyA9IHNoYXJlZC5pc09iamVjdChvcHRpb25zLm1lc3NhZ2VzKSA/IG9wdGlvbnMubWVzc2FnZXMgOiB7fTtcbiAgICBpZiAoJ19faTE4bkdsb2JhbCcgaW4gY29tcG9uZW50T3B0aW9ucykge1xuICAgICAgICBtZXNzYWdlcyA9IGdldExvY2FsZU1lc3NhZ2VzKGdsLmxvY2FsZS52YWx1ZSwge1xuICAgICAgICAgICAgbWVzc2FnZXMsXG4gICAgICAgICAgICBfX2kxOG46IGNvbXBvbmVudE9wdGlvbnMuX19pMThuR2xvYmFsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBtZXJnZSBsb2NhbGUgbWVzc2FnZXNcbiAgICBjb25zdCBsb2NhbGVzID0gT2JqZWN0LmtleXMobWVzc2FnZXMpO1xuICAgIGlmIChsb2NhbGVzLmxlbmd0aCkge1xuICAgICAgICBsb2NhbGVzLmZvckVhY2gobG9jYWxlID0+IHtcbiAgICAgICAgICAgIGdsLm1lcmdlTG9jYWxlTWVzc2FnZShsb2NhbGUsIG1lc3NhZ2VzW2xvY2FsZV0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAge1xuICAgICAgICAvLyBtZXJnZSBkYXRldGltZSBmb3JtYXRzXG4gICAgICAgIGlmIChzaGFyZWQuaXNPYmplY3Qob3B0aW9ucy5kYXRldGltZUZvcm1hdHMpKSB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbGVzID0gT2JqZWN0LmtleXMob3B0aW9ucy5kYXRldGltZUZvcm1hdHMpO1xuICAgICAgICAgICAgaWYgKGxvY2FsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlcy5mb3JFYWNoKGxvY2FsZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdsLm1lcmdlRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBvcHRpb25zLmRhdGV0aW1lRm9ybWF0c1tsb2NhbGVdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBtZXJnZSBudW1iZXIgZm9ybWF0c1xuICAgICAgICBpZiAoc2hhcmVkLmlzT2JqZWN0KG9wdGlvbnMubnVtYmVyRm9ybWF0cykpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsZXMgPSBPYmplY3Qua2V5cyhvcHRpb25zLm51bWJlckZvcm1hdHMpO1xuICAgICAgICAgICAgaWYgKGxvY2FsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlcy5mb3JFYWNoKGxvY2FsZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdsLm1lcmdlTnVtYmVyRm9ybWF0KGxvY2FsZSwgb3B0aW9ucy5udW1iZXJGb3JtYXRzW2xvY2FsZV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUoa2V5KSB7XG4gICAgcmV0dXJuIHZ1ZS5jcmVhdGVWTm9kZSh2dWUuVGV4dCwgbnVsbCwga2V5LCAwKVxuICAgICAgICA7XG59XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLy8gZXh0ZW5kIFZOb2RlIGludGVyZmFjZVxuY29uc3QgREVWVE9PTFNfTUVUQSA9ICdfX0lOVExJRllfTUVUQV9fJztcbmNvbnN0IE5PT1BfUkVUVVJOX0FSUkFZID0gKCkgPT4gW107XG5jb25zdCBOT09QX1JFVFVSTl9GQUxTRSA9ICgpID0+IGZhbHNlO1xubGV0IGNvbXBvc2VySUQgPSAwO1xuZnVuY3Rpb24gZGVmaW5lQ29yZU1pc3NpbmdIYW5kbGVyKG1pc3NpbmcpIHtcbiAgICByZXR1cm4gKChjdHgsIGxvY2FsZSwga2V5LCB0eXBlKSA9PiB7XG4gICAgICAgIHJldHVybiBtaXNzaW5nKGxvY2FsZSwga2V5LCB2dWUuZ2V0Q3VycmVudEluc3RhbmNlKCkgfHwgdW5kZWZpbmVkLCB0eXBlKTtcbiAgICB9KTtcbn1cbi8vIGZvciBJbnRsaWZ5IERldlRvb2xzXG4vKiAjX19OT19TSURFX0VGRkVDVFNfXyAqL1xuY29uc3QgZ2V0TWV0YUluZm8gPSAoKSA9PiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB2dWUuZ2V0Q3VycmVudEluc3RhbmNlKCk7XG4gICAgbGV0IG1ldGEgPSBudWxsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gaW5zdGFuY2UgJiYgKG1ldGEgPSBnZXRDb21wb25lbnRPcHRpb25zKGluc3RhbmNlKVtERVZUT09MU19NRVRBXSlcbiAgICAgICAgPyB7IFtERVZUT09MU19NRVRBXTogbWV0YSB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICA6IG51bGw7XG59O1xuLyoqXG4gKiBDcmVhdGUgY29tcG9zZXIgaW50ZXJmYWNlIGZhY3RvcnlcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvc2VyKG9wdGlvbnMgPSB7fSwgVnVlSTE4bkxlZ2FjeSkge1xuICAgIGNvbnN0IHsgX19yb290LCBfX2luamVjdFdpdGhPcHRpb24gfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgX2lzR2xvYmFsID0gX19yb290ID09PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgZmxhdEpzb24gPSBvcHRpb25zLmZsYXRKc29uO1xuICAgIGNvbnN0IF9yZWYgPSBzaGFyZWQuaW5Ccm93c2VyID8gdnVlLnJlZiA6IHZ1ZS5zaGFsbG93UmVmO1xuICAgIGNvbnN0IHRyYW5zbGF0ZUV4aXN0Q29tcGF0aWJsZSA9ICEhb3B0aW9ucy50cmFuc2xhdGVFeGlzdENvbXBhdGlibGU7XG4gICAge1xuICAgICAgICBpZiAodHJhbnNsYXRlRXhpc3RDb21wYXRpYmxlICYmICFmYWxzZSkge1xuICAgICAgICAgICAgc2hhcmVkLndhcm5PbmNlKGdldFdhcm5NZXNzYWdlKEkxOG5XYXJuQ29kZXMuTk9USUNFX0RST1BfVFJBTlNMQVRFX0VYSVNUX0NPTVBBVElCTEVfRkxBRykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBfaW5oZXJpdExvY2FsZSA9IHNoYXJlZC5pc0Jvb2xlYW4ob3B0aW9ucy5pbmhlcml0TG9jYWxlKVxuICAgICAgICA/IG9wdGlvbnMuaW5oZXJpdExvY2FsZVxuICAgICAgICA6IHRydWU7XG4gICAgY29uc3QgX2xvY2FsZSA9IF9yZWYoXG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgX19yb290ICYmIF9pbmhlcml0TG9jYWxlXG4gICAgICAgID8gX19yb290LmxvY2FsZS52YWx1ZVxuICAgICAgICA6IHNoYXJlZC5pc1N0cmluZyhvcHRpb25zLmxvY2FsZSlcbiAgICAgICAgICAgID8gb3B0aW9ucy5sb2NhbGVcbiAgICAgICAgICAgIDogY29yZUJhc2UuREVGQVVMVF9MT0NBTEUpO1xuICAgIGNvbnN0IF9mYWxsYmFja0xvY2FsZSA9IF9yZWYoXG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgX19yb290ICYmIF9pbmhlcml0TG9jYWxlXG4gICAgICAgID8gX19yb290LmZhbGxiYWNrTG9jYWxlLnZhbHVlXG4gICAgICAgIDogc2hhcmVkLmlzU3RyaW5nKG9wdGlvbnMuZmFsbGJhY2tMb2NhbGUpIHx8XG4gICAgICAgICAgICBzaGFyZWQuaXNBcnJheShvcHRpb25zLmZhbGxiYWNrTG9jYWxlKSB8fFxuICAgICAgICAgICAgc2hhcmVkLmlzUGxhaW5PYmplY3Qob3B0aW9ucy5mYWxsYmFja0xvY2FsZSkgfHxcbiAgICAgICAgICAgIG9wdGlvbnMuZmFsbGJhY2tMb2NhbGUgPT09IGZhbHNlXG4gICAgICAgICAgICA/IG9wdGlvbnMuZmFsbGJhY2tMb2NhbGVcbiAgICAgICAgICAgIDogX2xvY2FsZS52YWx1ZSk7XG4gICAgY29uc3QgX21lc3NhZ2VzID0gX3JlZihnZXRMb2NhbGVNZXNzYWdlcyhfbG9jYWxlLnZhbHVlLCBvcHRpb25zKSk7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgY29uc3QgX2RhdGV0aW1lRm9ybWF0cyA9IF9yZWYoc2hhcmVkLmlzUGxhaW5PYmplY3Qob3B0aW9ucy5kYXRldGltZUZvcm1hdHMpXG4gICAgICAgICAgICA/IG9wdGlvbnMuZGF0ZXRpbWVGb3JtYXRzXG4gICAgICAgICAgICA6IHsgW19sb2NhbGUudmFsdWVdOiB7fSB9KVxuICAgICAgICA7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgY29uc3QgX251bWJlckZvcm1hdHMgPSBfcmVmKHNoYXJlZC5pc1BsYWluT2JqZWN0KG9wdGlvbnMubnVtYmVyRm9ybWF0cylcbiAgICAgICAgICAgID8gb3B0aW9ucy5udW1iZXJGb3JtYXRzXG4gICAgICAgICAgICA6IHsgW19sb2NhbGUudmFsdWVdOiB7fSB9KVxuICAgICAgICA7XG4gICAgLy8gd2FybmluZyBzdXBwcmVzcyBvcHRpb25zXG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgbGV0IF9taXNzaW5nV2FybiA9IF9fcm9vdFxuICAgICAgICA/IF9fcm9vdC5taXNzaW5nV2FyblxuICAgICAgICA6IHNoYXJlZC5pc0Jvb2xlYW4ob3B0aW9ucy5taXNzaW5nV2FybikgfHwgc2hhcmVkLmlzUmVnRXhwKG9wdGlvbnMubWlzc2luZ1dhcm4pXG4gICAgICAgICAgICA/IG9wdGlvbnMubWlzc2luZ1dhcm5cbiAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBsZXQgX2ZhbGxiYWNrV2FybiA9IF9fcm9vdFxuICAgICAgICA/IF9fcm9vdC5mYWxsYmFja1dhcm5cbiAgICAgICAgOiBzaGFyZWQuaXNCb29sZWFuKG9wdGlvbnMuZmFsbGJhY2tXYXJuKSB8fCBzaGFyZWQuaXNSZWdFeHAob3B0aW9ucy5mYWxsYmFja1dhcm4pXG4gICAgICAgICAgICA/IG9wdGlvbnMuZmFsbGJhY2tXYXJuXG4gICAgICAgICAgICA6IHRydWU7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgbGV0IF9mYWxsYmFja1Jvb3QgPSBfX3Jvb3RcbiAgICAgICAgPyBfX3Jvb3QuZmFsbGJhY2tSb290XG4gICAgICAgIDogc2hhcmVkLmlzQm9vbGVhbihvcHRpb25zLmZhbGxiYWNrUm9vdClcbiAgICAgICAgICAgID8gb3B0aW9ucy5mYWxsYmFja1Jvb3RcbiAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAvLyBjb25maWd1cmUgZmFsbCBiYWNrIHRvIHJvb3RcbiAgICBsZXQgX2ZhbGxiYWNrRm9ybWF0ID0gISFvcHRpb25zLmZhbGxiYWNrRm9ybWF0O1xuICAgIC8vIHJ1bnRpbWUgbWlzc2luZ1xuICAgIGxldCBfbWlzc2luZyA9IHNoYXJlZC5pc0Z1bmN0aW9uKG9wdGlvbnMubWlzc2luZykgPyBvcHRpb25zLm1pc3NpbmcgOiBudWxsO1xuICAgIGxldCBfcnVudGltZU1pc3NpbmcgPSBzaGFyZWQuaXNGdW5jdGlvbihvcHRpb25zLm1pc3NpbmcpXG4gICAgICAgID8gZGVmaW5lQ29yZU1pc3NpbmdIYW5kbGVyKG9wdGlvbnMubWlzc2luZylcbiAgICAgICAgOiBudWxsO1xuICAgIC8vIHBvc3RUcmFuc2xhdGlvbiBoYW5kbGVyXG4gICAgbGV0IF9wb3N0VHJhbnNsYXRpb24gPSBzaGFyZWQuaXNGdW5jdGlvbihvcHRpb25zLnBvc3RUcmFuc2xhdGlvbilcbiAgICAgICAgPyBvcHRpb25zLnBvc3RUcmFuc2xhdGlvblxuICAgICAgICA6IG51bGw7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgbGV0IF93YXJuSHRtbE1lc3NhZ2UgPSBfX3Jvb3RcbiAgICAgICAgPyBfX3Jvb3Qud2Fybkh0bWxNZXNzYWdlXG4gICAgICAgIDogc2hhcmVkLmlzQm9vbGVhbihvcHRpb25zLndhcm5IdG1sTWVzc2FnZSlcbiAgICAgICAgICAgID8gb3B0aW9ucy53YXJuSHRtbE1lc3NhZ2VcbiAgICAgICAgICAgIDogdHJ1ZTtcbiAgICBsZXQgX2VzY2FwZVBhcmFtZXRlciA9ICEhb3B0aW9ucy5lc2NhcGVQYXJhbWV0ZXI7XG4gICAgLy8gY3VzdG9tIGxpbmtlZCBtb2RpZmllcnNcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBjb25zdCBfbW9kaWZpZXJzID0gX19yb290XG4gICAgICAgID8gX19yb290Lm1vZGlmaWVyc1xuICAgICAgICA6IHNoYXJlZC5pc1BsYWluT2JqZWN0KG9wdGlvbnMubW9kaWZpZXJzKVxuICAgICAgICAgICAgPyBvcHRpb25zLm1vZGlmaWVyc1xuICAgICAgICAgICAgOiB7fTtcbiAgICAvLyBwbHVyYWxSdWxlc1xuICAgIGxldCBfcGx1cmFsUnVsZXMgPSBvcHRpb25zLnBsdXJhbFJ1bGVzIHx8IChfX3Jvb3QgJiYgX19yb290LnBsdXJhbFJ1bGVzKTtcbiAgICAvLyBydW50aW1lIGNvbnRleHRcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgbGV0IF9jb250ZXh0O1xuICAgIGNvbnN0IGdldENvcmVDb250ZXh0ID0gKCkgPT4ge1xuICAgICAgICBfaXNHbG9iYWwgJiYgY29yZUJhc2Uuc2V0RmFsbGJhY2tDb250ZXh0KG51bGwpO1xuICAgICAgICBjb25zdCBjdHhPcHRpb25zID0ge1xuICAgICAgICAgICAgdmVyc2lvbjogVkVSU0lPTixcbiAgICAgICAgICAgIGxvY2FsZTogX2xvY2FsZS52YWx1ZSxcbiAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlOiBfZmFsbGJhY2tMb2NhbGUudmFsdWUsXG4gICAgICAgICAgICBtZXNzYWdlczogX21lc3NhZ2VzLnZhbHVlLFxuICAgICAgICAgICAgbW9kaWZpZXJzOiBfbW9kaWZpZXJzLFxuICAgICAgICAgICAgcGx1cmFsUnVsZXM6IF9wbHVyYWxSdWxlcyxcbiAgICAgICAgICAgIG1pc3Npbmc6IF9ydW50aW1lTWlzc2luZyA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IF9ydW50aW1lTWlzc2luZyxcbiAgICAgICAgICAgIG1pc3NpbmdXYXJuOiBfbWlzc2luZ1dhcm4sXG4gICAgICAgICAgICBmYWxsYmFja1dhcm46IF9mYWxsYmFja1dhcm4sXG4gICAgICAgICAgICBmYWxsYmFja0Zvcm1hdDogX2ZhbGxiYWNrRm9ybWF0LFxuICAgICAgICAgICAgdW5yZXNvbHZpbmc6IHRydWUsXG4gICAgICAgICAgICBwb3N0VHJhbnNsYXRpb246IF9wb3N0VHJhbnNsYXRpb24gPT09IG51bGwgPyB1bmRlZmluZWQgOiBfcG9zdFRyYW5zbGF0aW9uLFxuICAgICAgICAgICAgd2Fybkh0bWxNZXNzYWdlOiBfd2Fybkh0bWxNZXNzYWdlLFxuICAgICAgICAgICAgZXNjYXBlUGFyYW1ldGVyOiBfZXNjYXBlUGFyYW1ldGVyLFxuICAgICAgICAgICAgbWVzc2FnZVJlc29sdmVyOiBvcHRpb25zLm1lc3NhZ2VSZXNvbHZlcixcbiAgICAgICAgICAgIG1lc3NhZ2VDb21waWxlcjogb3B0aW9ucy5tZXNzYWdlQ29tcGlsZXIsXG4gICAgICAgICAgICBfX21ldGE6IHsgZnJhbWV3b3JrOiAndnVlJyB9XG4gICAgICAgIH07XG4gICAgICAgIHtcbiAgICAgICAgICAgIGN0eE9wdGlvbnMuZGF0ZXRpbWVGb3JtYXRzID0gX2RhdGV0aW1lRm9ybWF0cy52YWx1ZTtcbiAgICAgICAgICAgIGN0eE9wdGlvbnMubnVtYmVyRm9ybWF0cyA9IF9udW1iZXJGb3JtYXRzLnZhbHVlO1xuICAgICAgICAgICAgY3R4T3B0aW9ucy5fX2RhdGV0aW1lRm9ybWF0dGVycyA9IHNoYXJlZC5pc1BsYWluT2JqZWN0KF9jb250ZXh0KVxuICAgICAgICAgICAgICAgID8gX2NvbnRleHQuX19kYXRldGltZUZvcm1hdHRlcnNcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGN0eE9wdGlvbnMuX19udW1iZXJGb3JtYXR0ZXJzID0gc2hhcmVkLmlzUGxhaW5PYmplY3QoX2NvbnRleHQpXG4gICAgICAgICAgICAgICAgPyBfY29udGV4dC5fX251bWJlckZvcm1hdHRlcnNcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB7XG4gICAgICAgICAgICBjdHhPcHRpb25zLl9fdl9lbWl0dGVyID0gc2hhcmVkLmlzUGxhaW5PYmplY3QoX2NvbnRleHQpXG4gICAgICAgICAgICAgICAgPyBfY29udGV4dC5fX3ZfZW1pdHRlclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN0eCA9IGNvcmVCYXNlLmNyZWF0ZUNvcmVDb250ZXh0KGN0eE9wdGlvbnMpO1xuICAgICAgICBfaXNHbG9iYWwgJiYgY29yZUJhc2Uuc2V0RmFsbGJhY2tDb250ZXh0KGN0eCk7XG4gICAgICAgIHJldHVybiBjdHg7XG4gICAgfTtcbiAgICBfY29udGV4dCA9IGdldENvcmVDb250ZXh0KCk7XG4gICAgY29yZUJhc2UudXBkYXRlRmFsbGJhY2tMb2NhbGUoX2NvbnRleHQsIF9sb2NhbGUudmFsdWUsIF9mYWxsYmFja0xvY2FsZS52YWx1ZSk7XG4gICAgLy8gdHJhY2sgcmVhY3Rpdml0eVxuICAgIGZ1bmN0aW9uIHRyYWNrUmVhY3Rpdml0eVZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBfbG9jYWxlLnZhbHVlLFxuICAgICAgICAgICAgICAgIF9mYWxsYmFja0xvY2FsZS52YWx1ZSxcbiAgICAgICAgICAgICAgICBfbWVzc2FnZXMudmFsdWUsXG4gICAgICAgICAgICAgICAgX2RhdGV0aW1lRm9ybWF0cy52YWx1ZSxcbiAgICAgICAgICAgICAgICBfbnVtYmVyRm9ybWF0cy52YWx1ZVxuICAgICAgICAgICAgXVxuICAgICAgICAgICAgO1xuICAgIH1cbiAgICAvLyBsb2NhbGVcbiAgICBjb25zdCBsb2NhbGUgPSB2dWUuY29tcHV0ZWQoe1xuICAgICAgICBnZXQ6ICgpID0+IF9sb2NhbGUudmFsdWUsXG4gICAgICAgIHNldDogdmFsID0+IHtcbiAgICAgICAgICAgIF9sb2NhbGUudmFsdWUgPSB2YWw7XG4gICAgICAgICAgICBfY29udGV4dC5sb2NhbGUgPSBfbG9jYWxlLnZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gZmFsbGJhY2tMb2NhbGVcbiAgICBjb25zdCBmYWxsYmFja0xvY2FsZSA9IHZ1ZS5jb21wdXRlZCh7XG4gICAgICAgIGdldDogKCkgPT4gX2ZhbGxiYWNrTG9jYWxlLnZhbHVlLFxuICAgICAgICBzZXQ6IHZhbCA9PiB7XG4gICAgICAgICAgICBfZmFsbGJhY2tMb2NhbGUudmFsdWUgPSB2YWw7XG4gICAgICAgICAgICBfY29udGV4dC5mYWxsYmFja0xvY2FsZSA9IF9mYWxsYmFja0xvY2FsZS52YWx1ZTtcbiAgICAgICAgICAgIGNvcmVCYXNlLnVwZGF0ZUZhbGxiYWNrTG9jYWxlKF9jb250ZXh0LCBfbG9jYWxlLnZhbHVlLCB2YWwpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gbWVzc2FnZXNcbiAgICBjb25zdCBtZXNzYWdlcyA9IHZ1ZS5jb21wdXRlZCgoKSA9PiBfbWVzc2FnZXMudmFsdWUpO1xuICAgIC8vIGRhdGV0aW1lRm9ybWF0c1xuICAgIGNvbnN0IGRhdGV0aW1lRm9ybWF0cyA9IC8qICNfX1BVUkVfXyovIHZ1ZS5jb21wdXRlZCgoKSA9PiBfZGF0ZXRpbWVGb3JtYXRzLnZhbHVlKTtcbiAgICAvLyBudW1iZXJGb3JtYXRzXG4gICAgY29uc3QgbnVtYmVyRm9ybWF0cyA9IC8qICNfX1BVUkVfXyovIHZ1ZS5jb21wdXRlZCgoKSA9PiBfbnVtYmVyRm9ybWF0cy52YWx1ZSk7XG4gICAgLy8gZ2V0UG9zdFRyYW5zbGF0aW9uSGFuZGxlclxuICAgIGZ1bmN0aW9uIGdldFBvc3RUcmFuc2xhdGlvbkhhbmRsZXIoKSB7XG4gICAgICAgIHJldHVybiBzaGFyZWQuaXNGdW5jdGlvbihfcG9zdFRyYW5zbGF0aW9uKSA/IF9wb3N0VHJhbnNsYXRpb24gOiBudWxsO1xuICAgIH1cbiAgICAvLyBzZXRQb3N0VHJhbnNsYXRpb25IYW5kbGVyXG4gICAgZnVuY3Rpb24gc2V0UG9zdFRyYW5zbGF0aW9uSGFuZGxlcihoYW5kbGVyKSB7XG4gICAgICAgIF9wb3N0VHJhbnNsYXRpb24gPSBoYW5kbGVyO1xuICAgICAgICBfY29udGV4dC5wb3N0VHJhbnNsYXRpb24gPSBoYW5kbGVyO1xuICAgIH1cbiAgICAvLyBnZXRNaXNzaW5nSGFuZGxlclxuICAgIGZ1bmN0aW9uIGdldE1pc3NpbmdIYW5kbGVyKCkge1xuICAgICAgICByZXR1cm4gX21pc3Npbmc7XG4gICAgfVxuICAgIC8vIHNldE1pc3NpbmdIYW5kbGVyXG4gICAgZnVuY3Rpb24gc2V0TWlzc2luZ0hhbmRsZXIoaGFuZGxlcikge1xuICAgICAgICBpZiAoaGFuZGxlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgX3J1bnRpbWVNaXNzaW5nID0gZGVmaW5lQ29yZU1pc3NpbmdIYW5kbGVyKGhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICAgIF9taXNzaW5nID0gaGFuZGxlcjtcbiAgICAgICAgX2NvbnRleHQubWlzc2luZyA9IF9ydW50aW1lTWlzc2luZztcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNSZXNvbHZlZFRyYW5zbGF0ZU1lc3NhZ2UodHlwZSwgYXJnIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICkge1xuICAgICAgICByZXR1cm4gdHlwZSAhPT0gJ3RyYW5zbGF0ZScgfHwgIWFyZy5yZXNvbHZlZE1lc3NhZ2U7XG4gICAgfVxuICAgIGNvbnN0IHdyYXBXaXRoRGVwcyA9IChmbiwgYXJndW1lbnRQYXJzZXIsIHdhcm5UeXBlLCBmYWxsYmFja1N1Y2Nlc3MsIGZhbGxiYWNrRmFpbCwgc3VjY2Vzc0NvbmRpdGlvbikgPT4ge1xuICAgICAgICB0cmFja1JlYWN0aXZpdHlWYWx1ZXMoKTsgLy8gdHJhY2sgcmVhY3RpdmUgZGVwZW5kZW5jeVxuICAgICAgICAvLyBOT1RFOiBleHBlcmltZW50YWwgISFcbiAgICAgICAgbGV0IHJldDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0cnVlIHx8IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgY29yZUJhc2Uuc2V0QWRkaXRpb25hbE1ldGEoZ2V0TWV0YUluZm8oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIV9pc0dsb2JhbCkge1xuICAgICAgICAgICAgICAgIF9jb250ZXh0LmZhbGxiYWNrQ29udGV4dCA9IF9fcm9vdFxuICAgICAgICAgICAgICAgICAgICA/IGNvcmVCYXNlLmdldEZhbGxiYWNrQ29udGV4dCgpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0ID0gZm4oX2NvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvcmVCYXNlLnNldEFkZGl0aW9uYWxNZXRhKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFfaXNHbG9iYWwpIHtcbiAgICAgICAgICAgICAgICBfY29udGV4dC5mYWxsYmFja0NvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCh3YXJuVHlwZSAhPT0gJ3RyYW5zbGF0ZSBleGlzdHMnICYmIC8vIGZvciBub3QgYHRlYCAoZS5nIGB0YClcbiAgICAgICAgICAgIHNoYXJlZC5pc051bWJlcihyZXQpICYmXG4gICAgICAgICAgICByZXQgPT09IGNvcmVCYXNlLk5PVF9SRU9TTFZFRCkgfHxcbiAgICAgICAgICAgICh3YXJuVHlwZSA9PT0gJ3RyYW5zbGF0ZSBleGlzdHMnICYmICFyZXQpIC8vIGZvciBgdGVgXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgW2tleSwgYXJnMl0gPSBhcmd1bWVudFBhcnNlcigpO1xuICAgICAgICAgICAgaWYgKF9fcm9vdCAmJlxuICAgICAgICAgICAgICAgIHNoYXJlZC5pc1N0cmluZyhrZXkpICYmXG4gICAgICAgICAgICAgICAgaXNSZXNvbHZlZFRyYW5zbGF0ZU1lc3NhZ2Uod2FyblR5cGUsIGFyZzIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9mYWxsYmFja1Jvb3QgJiZcbiAgICAgICAgICAgICAgICAgICAgKGNvcmVCYXNlLmlzVHJhbnNsYXRlRmFsbGJhY2tXYXJuKF9mYWxsYmFja1dhcm4sIGtleSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVCYXNlLmlzVHJhbnNsYXRlTWlzc2luZ1dhcm4oX21pc3NpbmdXYXJuLCBrZXkpKSkge1xuICAgICAgICAgICAgICAgICAgICBzaGFyZWQud2FybihnZXRXYXJuTWVzc2FnZShJMThuV2FybkNvZGVzLkZBTExCQUNLX1RPX1JPT1QsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHdhcm5UeXBlXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZm9yIHZ1ZS1kZXZ0b29scyB0aW1lbGluZSBldmVudFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBfX3ZfZW1pdHRlcjogZW1pdHRlciB9ID0gX2NvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbWl0dGVyICYmIF9mYWxsYmFja1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIuZW1pdChcImZhbGxiYWNrXCIgLyogVnVlRGV2VG9vbHNUaW1lbGluZUV2ZW50cy5GQUxCQUNLICovLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogd2FyblR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cElkOiBgJHt3YXJuVHlwZX06JHtrZXl9YFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX19yb290ICYmIF9mYWxsYmFja1Jvb3RcbiAgICAgICAgICAgICAgICA/IGZhbGxiYWNrU3VjY2VzcyhfX3Jvb3QpXG4gICAgICAgICAgICAgICAgOiBmYWxsYmFja0ZhaWwoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdWNjZXNzQ29uZGl0aW9uKHJldCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlSTE4bkVycm9yKEkxOG5FcnJvckNvZGVzLlVORVhQRUNURURfUkVUVVJOX1RZUEUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvLyB0XG4gICAgZnVuY3Rpb24gdCguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB3cmFwV2l0aERlcHMoY29udGV4dCA9PiBSZWZsZWN0LmFwcGx5KGNvcmVCYXNlLnRyYW5zbGF0ZSwgbnVsbCwgW2NvbnRleHQsIC4uLmFyZ3NdKSwgKCkgPT4gY29yZUJhc2UucGFyc2VUcmFuc2xhdGVBcmdzKC4uLmFyZ3MpLCAndHJhbnNsYXRlJywgcm9vdCA9PiBSZWZsZWN0LmFwcGx5KHJvb3QudCwgcm9vdCwgWy4uLmFyZ3NdKSwga2V5ID0+IGtleSwgdmFsID0+IHNoYXJlZC5pc1N0cmluZyh2YWwpKTtcbiAgICB9XG4gICAgLy8gcnRcbiAgICBmdW5jdGlvbiBydCguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IFthcmcxLCBhcmcyLCBhcmczXSA9IGFyZ3M7XG4gICAgICAgIGlmIChhcmczICYmICFzaGFyZWQuaXNPYmplY3QoYXJnMykpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUkxOG5FcnJvcihJMThuRXJyb3JDb2Rlcy5JTlZBTElEX0FSR1VNRU5UKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdCguLi5bYXJnMSwgYXJnMiwgc2hhcmVkLmFzc2lnbih7IHJlc29sdmVkTWVzc2FnZTogdHJ1ZSB9LCBhcmczIHx8IHt9KV0pO1xuICAgIH1cbiAgICAvLyBkXG4gICAgZnVuY3Rpb24gZCguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB3cmFwV2l0aERlcHMoY29udGV4dCA9PiBSZWZsZWN0LmFwcGx5KGNvcmVCYXNlLmRhdGV0aW1lLCBudWxsLCBbY29udGV4dCwgLi4uYXJnc10pLCAoKSA9PiBjb3JlQmFzZS5wYXJzZURhdGVUaW1lQXJncyguLi5hcmdzKSwgJ2RhdGV0aW1lIGZvcm1hdCcsIHJvb3QgPT4gUmVmbGVjdC5hcHBseShyb290LmQsIHJvb3QsIFsuLi5hcmdzXSksICgpID0+IGNvcmVCYXNlLk1JU1NJTkdfUkVTT0xWRV9WQUxVRSwgdmFsID0+IHNoYXJlZC5pc1N0cmluZyh2YWwpKTtcbiAgICB9XG4gICAgLy8gblxuICAgIGZ1bmN0aW9uIG4oLi4uYXJncykge1xuICAgICAgICByZXR1cm4gd3JhcFdpdGhEZXBzKGNvbnRleHQgPT4gUmVmbGVjdC5hcHBseShjb3JlQmFzZS5udW1iZXIsIG51bGwsIFtjb250ZXh0LCAuLi5hcmdzXSksICgpID0+IGNvcmVCYXNlLnBhcnNlTnVtYmVyQXJncyguLi5hcmdzKSwgJ251bWJlciBmb3JtYXQnLCByb290ID0+IFJlZmxlY3QuYXBwbHkocm9vdC5uLCByb290LCBbLi4uYXJnc10pLCAoKSA9PiBjb3JlQmFzZS5NSVNTSU5HX1JFU09MVkVfVkFMVUUsIHZhbCA9PiBzaGFyZWQuaXNTdHJpbmcodmFsKSk7XG4gICAgfVxuICAgIC8vIGZvciBjdXN0b20gcHJvY2Vzc29yXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplKHZhbHVlcykge1xuICAgICAgICByZXR1cm4gdmFsdWVzLm1hcCh2YWwgPT4gc2hhcmVkLmlzU3RyaW5nKHZhbCkgfHwgc2hhcmVkLmlzTnVtYmVyKHZhbCkgfHwgc2hhcmVkLmlzQm9vbGVhbih2YWwpXG4gICAgICAgICAgICA/IGNyZWF0ZVRleHROb2RlKFN0cmluZyh2YWwpKVxuICAgICAgICAgICAgOiB2YWwpO1xuICAgIH1cbiAgICBjb25zdCBpbnRlcnBvbGF0ZSA9ICh2YWwpID0+IHZhbDtcbiAgICBjb25zdCBwcm9jZXNzb3IgPSB7XG4gICAgICAgIG5vcm1hbGl6ZSxcbiAgICAgICAgaW50ZXJwb2xhdGUsXG4gICAgICAgIHR5cGU6ICd2bm9kZSdcbiAgICB9O1xuICAgIC8vIHRyYW5zbGF0ZVZOb2RlLCB1c2luZyBmb3IgYGkxOG4tdGAgY29tcG9uZW50XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlVk5vZGUoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gd3JhcFdpdGhEZXBzKGNvbnRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJldDtcbiAgICAgICAgICAgIGNvbnN0IF9jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQucHJvY2Vzc29yID0gcHJvY2Vzc29yO1xuICAgICAgICAgICAgICAgIHJldCA9IFJlZmxlY3QuYXBwbHkoY29yZUJhc2UudHJhbnNsYXRlLCBudWxsLCBbX2NvbnRleHQsIC4uLmFyZ3NdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIF9jb250ZXh0LnByb2Nlc3NvciA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9LCAoKSA9PiBjb3JlQmFzZS5wYXJzZVRyYW5zbGF0ZUFyZ3MoLi4uYXJncyksICd0cmFuc2xhdGUnLCBcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgcm9vdCA9PiByb290W1RyYW5zbGF0ZVZOb2RlU3ltYm9sXSguLi5hcmdzKSwga2V5ID0+IFtjcmVhdGVUZXh0Tm9kZShrZXkpXSwgdmFsID0+IHNoYXJlZC5pc0FycmF5KHZhbCkpO1xuICAgIH1cbiAgICAvLyBudW1iZXJQYXJ0cywgdXNpbmcgZm9yIGBpMThuLW5gIGNvbXBvbmVudFxuICAgIGZ1bmN0aW9uIG51bWJlclBhcnRzKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHdyYXBXaXRoRGVwcyhjb250ZXh0ID0+IFJlZmxlY3QuYXBwbHkoY29yZUJhc2UubnVtYmVyLCBudWxsLCBbY29udGV4dCwgLi4uYXJnc10pLCAoKSA9PiBjb3JlQmFzZS5wYXJzZU51bWJlckFyZ3MoLi4uYXJncyksICdudW1iZXIgZm9ybWF0JywgXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHJvb3QgPT4gcm9vdFtOdW1iZXJQYXJ0c1N5bWJvbF0oLi4uYXJncyksIE5PT1BfUkVUVVJOX0FSUkFZLCB2YWwgPT4gc2hhcmVkLmlzU3RyaW5nKHZhbCkgfHwgc2hhcmVkLmlzQXJyYXkodmFsKSk7XG4gICAgfVxuICAgIC8vIGRhdGV0aW1lUGFydHMsIHVzaW5nIGZvciBgaTE4bi1kYCBjb21wb25lbnRcbiAgICBmdW5jdGlvbiBkYXRldGltZVBhcnRzKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHdyYXBXaXRoRGVwcyhjb250ZXh0ID0+IFJlZmxlY3QuYXBwbHkoY29yZUJhc2UuZGF0ZXRpbWUsIG51bGwsIFtjb250ZXh0LCAuLi5hcmdzXSksICgpID0+IGNvcmVCYXNlLnBhcnNlRGF0ZVRpbWVBcmdzKC4uLmFyZ3MpLCAnZGF0ZXRpbWUgZm9ybWF0JywgXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHJvb3QgPT4gcm9vdFtEYXRldGltZVBhcnRzU3ltYm9sXSguLi5hcmdzKSwgTk9PUF9SRVRVUk5fQVJSQVksIHZhbCA9PiBzaGFyZWQuaXNTdHJpbmcodmFsKSB8fCBzaGFyZWQuaXNBcnJheSh2YWwpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0UGx1cmFsUnVsZXMocnVsZXMpIHtcbiAgICAgICAgX3BsdXJhbFJ1bGVzID0gcnVsZXM7XG4gICAgICAgIF9jb250ZXh0LnBsdXJhbFJ1bGVzID0gX3BsdXJhbFJ1bGVzO1xuICAgIH1cbiAgICAvLyB0ZVxuICAgIGZ1bmN0aW9uIHRlKGtleSwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiB3cmFwV2l0aERlcHMoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRMb2NhbGUgPSBzaGFyZWQuaXNTdHJpbmcobG9jYWxlKSA/IGxvY2FsZSA6IF9sb2NhbGUudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZ2V0TG9jYWxlTWVzc2FnZSh0YXJnZXRMb2NhbGUpO1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBfY29udGV4dC5tZXNzYWdlUmVzb2x2ZXIobWVzc2FnZSwga2V5KTtcbiAgICAgICAgICAgIHJldHVybiAhdHJhbnNsYXRlRXhpc3RDb21wYXRpYmxlXG4gICAgICAgICAgICAgICAgPyBjb3JlQmFzZS5pc01lc3NhZ2VBU1QocmVzb2x2ZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgIGNvcmVCYXNlLmlzTWVzc2FnZUZ1bmN0aW9uKHJlc29sdmVkKSB8fFxuICAgICAgICAgICAgICAgICAgICBzaGFyZWQuaXNTdHJpbmcocmVzb2x2ZWQpXG4gICAgICAgICAgICAgICAgOiByZXNvbHZlZCAhPSBudWxsO1xuICAgICAgICB9LCAoKSA9PiBba2V5XSwgJ3RyYW5zbGF0ZSBleGlzdHMnLCByb290ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHJvb3QudGUsIHJvb3QsIFtrZXksIGxvY2FsZV0pO1xuICAgICAgICB9LCBOT09QX1JFVFVSTl9GQUxTRSwgdmFsID0+IHNoYXJlZC5pc0Jvb2xlYW4odmFsKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVNZXNzYWdlcyhrZXkpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2VzID0gbnVsbDtcbiAgICAgICAgY29uc3QgbG9jYWxlcyA9IGNvcmVCYXNlLmZhbGxiYWNrV2l0aExvY2FsZUNoYWluKF9jb250ZXh0LCBfZmFsbGJhY2tMb2NhbGUudmFsdWUsIF9sb2NhbGUudmFsdWUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxvY2FsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldExvY2FsZU1lc3NhZ2VzID0gX21lc3NhZ2VzLnZhbHVlW2xvY2FsZXNbaV1dIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZVZhbHVlID0gX2NvbnRleHQubWVzc2FnZVJlc29sdmVyKHRhcmdldExvY2FsZU1lc3NhZ2VzLCBrZXkpO1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2VWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlVmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cbiAgICAvLyB0bVxuICAgIGZ1bmN0aW9uIHRtKGtleSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlcyA9IHJlc29sdmVNZXNzYWdlcyhrZXkpO1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VzICE9IG51bGxcbiAgICAgICAgICAgID8gbWVzc2FnZXNcbiAgICAgICAgICAgIDogX19yb290XG4gICAgICAgICAgICAgICAgPyBfX3Jvb3QudG0oa2V5KSB8fCB7fVxuICAgICAgICAgICAgICAgIDoge307XG4gICAgfVxuICAgIC8vIGdldExvY2FsZU1lc3NhZ2VcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGVNZXNzYWdlKGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gKF9tZXNzYWdlcy52YWx1ZVtsb2NhbGVdIHx8IHt9KTtcbiAgICB9XG4gICAgLy8gc2V0TG9jYWxlTWVzc2FnZVxuICAgIGZ1bmN0aW9uIHNldExvY2FsZU1lc3NhZ2UobG9jYWxlLCBtZXNzYWdlKSB7XG4gICAgICAgIGlmIChmbGF0SnNvbikge1xuICAgICAgICAgICAgY29uc3QgX21lc3NhZ2UgPSB7IFtsb2NhbGVdOiBtZXNzYWdlIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBfbWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGlmIChzaGFyZWQuaGFzT3duKF9tZXNzYWdlLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUZsYXRKc29uKF9tZXNzYWdlW2tleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1lc3NhZ2UgPSBfbWVzc2FnZVtsb2NhbGVdO1xuICAgICAgICB9XG4gICAgICAgIF9tZXNzYWdlcy52YWx1ZVtsb2NhbGVdID0gbWVzc2FnZTtcbiAgICAgICAgX2NvbnRleHQubWVzc2FnZXMgPSBfbWVzc2FnZXMudmFsdWU7XG4gICAgfVxuICAgIC8vIG1lcmdlTG9jYWxlTWVzc2FnZVxuICAgIGZ1bmN0aW9uIG1lcmdlTG9jYWxlTWVzc2FnZShsb2NhbGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgX21lc3NhZ2VzLnZhbHVlW2xvY2FsZV0gPSBfbWVzc2FnZXMudmFsdWVbbG9jYWxlXSB8fCB7fTtcbiAgICAgICAgY29uc3QgX21lc3NhZ2UgPSB7IFtsb2NhbGVdOiBtZXNzYWdlIH07XG4gICAgICAgIGlmIChmbGF0SnNvbikge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gX21lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2hhcmVkLmhhc093bihfbWVzc2FnZSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVGbGF0SnNvbihfbWVzc2FnZVtrZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZSA9IF9tZXNzYWdlW2xvY2FsZV07XG4gICAgICAgIHNoYXJlZC5kZWVwQ29weShtZXNzYWdlLCBfbWVzc2FnZXMudmFsdWVbbG9jYWxlXSk7XG4gICAgICAgIF9jb250ZXh0Lm1lc3NhZ2VzID0gX21lc3NhZ2VzLnZhbHVlO1xuICAgIH1cbiAgICAvLyBnZXREYXRlVGltZUZvcm1hdFxuICAgIGZ1bmN0aW9uIGdldERhdGVUaW1lRm9ybWF0KGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gX2RhdGV0aW1lRm9ybWF0cy52YWx1ZVtsb2NhbGVdIHx8IHt9O1xuICAgIH1cbiAgICAvLyBzZXREYXRlVGltZUZvcm1hdFxuICAgIGZ1bmN0aW9uIHNldERhdGVUaW1lRm9ybWF0KGxvY2FsZSwgZm9ybWF0KSB7XG4gICAgICAgIF9kYXRldGltZUZvcm1hdHMudmFsdWVbbG9jYWxlXSA9IGZvcm1hdDtcbiAgICAgICAgX2NvbnRleHQuZGF0ZXRpbWVGb3JtYXRzID0gX2RhdGV0aW1lRm9ybWF0cy52YWx1ZTtcbiAgICAgICAgY29yZUJhc2UuY2xlYXJEYXRlVGltZUZvcm1hdChfY29udGV4dCwgbG9jYWxlLCBmb3JtYXQpO1xuICAgIH1cbiAgICAvLyBtZXJnZURhdGVUaW1lRm9ybWF0XG4gICAgZnVuY3Rpb24gbWVyZ2VEYXRlVGltZUZvcm1hdChsb2NhbGUsIGZvcm1hdCkge1xuICAgICAgICBfZGF0ZXRpbWVGb3JtYXRzLnZhbHVlW2xvY2FsZV0gPSBzaGFyZWQuYXNzaWduKF9kYXRldGltZUZvcm1hdHMudmFsdWVbbG9jYWxlXSB8fCB7fSwgZm9ybWF0KTtcbiAgICAgICAgX2NvbnRleHQuZGF0ZXRpbWVGb3JtYXRzID0gX2RhdGV0aW1lRm9ybWF0cy52YWx1ZTtcbiAgICAgICAgY29yZUJhc2UuY2xlYXJEYXRlVGltZUZvcm1hdChfY29udGV4dCwgbG9jYWxlLCBmb3JtYXQpO1xuICAgIH1cbiAgICAvLyBnZXROdW1iZXJGb3JtYXRcbiAgICBmdW5jdGlvbiBnZXROdW1iZXJGb3JtYXQobG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBfbnVtYmVyRm9ybWF0cy52YWx1ZVtsb2NhbGVdIHx8IHt9O1xuICAgIH1cbiAgICAvLyBzZXROdW1iZXJGb3JtYXRcbiAgICBmdW5jdGlvbiBzZXROdW1iZXJGb3JtYXQobG9jYWxlLCBmb3JtYXQpIHtcbiAgICAgICAgX251bWJlckZvcm1hdHMudmFsdWVbbG9jYWxlXSA9IGZvcm1hdDtcbiAgICAgICAgX2NvbnRleHQubnVtYmVyRm9ybWF0cyA9IF9udW1iZXJGb3JtYXRzLnZhbHVlO1xuICAgICAgICBjb3JlQmFzZS5jbGVhck51bWJlckZvcm1hdChfY29udGV4dCwgbG9jYWxlLCBmb3JtYXQpO1xuICAgIH1cbiAgICAvLyBtZXJnZU51bWJlckZvcm1hdFxuICAgIGZ1bmN0aW9uIG1lcmdlTnVtYmVyRm9ybWF0KGxvY2FsZSwgZm9ybWF0KSB7XG4gICAgICAgIF9udW1iZXJGb3JtYXRzLnZhbHVlW2xvY2FsZV0gPSBzaGFyZWQuYXNzaWduKF9udW1iZXJGb3JtYXRzLnZhbHVlW2xvY2FsZV0gfHwge30sIGZvcm1hdCk7XG4gICAgICAgIF9jb250ZXh0Lm51bWJlckZvcm1hdHMgPSBfbnVtYmVyRm9ybWF0cy52YWx1ZTtcbiAgICAgICAgY29yZUJhc2UuY2xlYXJOdW1iZXJGb3JtYXQoX2NvbnRleHQsIGxvY2FsZSwgZm9ybWF0KTtcbiAgICB9XG4gICAgLy8gZm9yIGRlYnVnXG4gICAgY29tcG9zZXJJRCsrO1xuICAgIC8vIHdhdGNoIHJvb3QgbG9jYWxlICYgZmFsbGJhY2tMb2NhbGVcbiAgICBpZiAoX19yb290ICYmIHNoYXJlZC5pbkJyb3dzZXIpIHtcbiAgICAgICAgdnVlLndhdGNoKF9fcm9vdC5sb2NhbGUsICh2YWwpID0+IHtcbiAgICAgICAgICAgIGlmIChfaW5oZXJpdExvY2FsZSkge1xuICAgICAgICAgICAgICAgIF9sb2NhbGUudmFsdWUgPSB2YWw7XG4gICAgICAgICAgICAgICAgX2NvbnRleHQubG9jYWxlID0gdmFsO1xuICAgICAgICAgICAgICAgIGNvcmVCYXNlLnVwZGF0ZUZhbGxiYWNrTG9jYWxlKF9jb250ZXh0LCBfbG9jYWxlLnZhbHVlLCBfZmFsbGJhY2tMb2NhbGUudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdnVlLndhdGNoKF9fcm9vdC5mYWxsYmFja0xvY2FsZSwgKHZhbCkgPT4ge1xuICAgICAgICAgICAgaWYgKF9pbmhlcml0TG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgX2ZhbGxiYWNrTG9jYWxlLnZhbHVlID0gdmFsO1xuICAgICAgICAgICAgICAgIF9jb250ZXh0LmZhbGxiYWNrTG9jYWxlID0gdmFsO1xuICAgICAgICAgICAgICAgIGNvcmVCYXNlLnVwZGF0ZUZhbGxiYWNrTG9jYWxlKF9jb250ZXh0LCBfbG9jYWxlLnZhbHVlLCBfZmFsbGJhY2tMb2NhbGUudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gZGVmaW5lIGJhc2ljIGNvbXBvc2l0aW9uIEFQSSFcbiAgICBjb25zdCBjb21wb3NlciA9IHtcbiAgICAgICAgaWQ6IGNvbXBvc2VySUQsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgIGdldCBpbmhlcml0TG9jYWxlKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9pbmhlcml0TG9jYWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQgaW5oZXJpdExvY2FsZSh2YWwpIHtcbiAgICAgICAgICAgIF9pbmhlcml0TG9jYWxlID0gdmFsO1xuICAgICAgICAgICAgaWYgKHZhbCAmJiBfX3Jvb3QpIHtcbiAgICAgICAgICAgICAgICBfbG9jYWxlLnZhbHVlID0gX19yb290LmxvY2FsZS52YWx1ZTtcbiAgICAgICAgICAgICAgICBfZmFsbGJhY2tMb2NhbGUudmFsdWUgPSBfX3Jvb3QuZmFsbGJhY2tMb2NhbGUudmFsdWU7XG4gICAgICAgICAgICAgICAgY29yZUJhc2UudXBkYXRlRmFsbGJhY2tMb2NhbGUoX2NvbnRleHQsIF9sb2NhbGUudmFsdWUsIF9mYWxsYmFja0xvY2FsZS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBhdmFpbGFibGVMb2NhbGVzKCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKF9tZXNzYWdlcy52YWx1ZSkuc29ydCgpO1xuICAgICAgICB9LFxuICAgICAgICBtZXNzYWdlcyxcbiAgICAgICAgZ2V0IG1vZGlmaWVycygpIHtcbiAgICAgICAgICAgIHJldHVybiBfbW9kaWZpZXJzO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgcGx1cmFsUnVsZXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3BsdXJhbFJ1bGVzIHx8IHt9O1xuICAgICAgICB9LFxuICAgICAgICBnZXQgaXNHbG9iYWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gX2lzR2xvYmFsO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgbWlzc2luZ1dhcm4oKSB7XG4gICAgICAgICAgICByZXR1cm4gX21pc3NpbmdXYXJuO1xuICAgICAgICB9LFxuICAgICAgICBzZXQgbWlzc2luZ1dhcm4odmFsKSB7XG4gICAgICAgICAgICBfbWlzc2luZ1dhcm4gPSB2YWw7XG4gICAgICAgICAgICBfY29udGV4dC5taXNzaW5nV2FybiA9IF9taXNzaW5nV2FybjtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGZhbGxiYWNrV2FybigpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmFsbGJhY2tXYXJuO1xuICAgICAgICB9LFxuICAgICAgICBzZXQgZmFsbGJhY2tXYXJuKHZhbCkge1xuICAgICAgICAgICAgX2ZhbGxiYWNrV2FybiA9IHZhbDtcbiAgICAgICAgICAgIF9jb250ZXh0LmZhbGxiYWNrV2FybiA9IF9mYWxsYmFja1dhcm47XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBmYWxsYmFja1Jvb3QoKSB7XG4gICAgICAgICAgICByZXR1cm4gX2ZhbGxiYWNrUm9vdDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0IGZhbGxiYWNrUm9vdCh2YWwpIHtcbiAgICAgICAgICAgIF9mYWxsYmFja1Jvb3QgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBmYWxsYmFja0Zvcm1hdCgpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmFsbGJhY2tGb3JtYXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCBmYWxsYmFja0Zvcm1hdCh2YWwpIHtcbiAgICAgICAgICAgIF9mYWxsYmFja0Zvcm1hdCA9IHZhbDtcbiAgICAgICAgICAgIF9jb250ZXh0LmZhbGxiYWNrRm9ybWF0ID0gX2ZhbGxiYWNrRm9ybWF0O1xuICAgICAgICB9LFxuICAgICAgICBnZXQgd2Fybkh0bWxNZXNzYWdlKCkge1xuICAgICAgICAgICAgcmV0dXJuIF93YXJuSHRtbE1lc3NhZ2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCB3YXJuSHRtbE1lc3NhZ2UodmFsKSB7XG4gICAgICAgICAgICBfd2Fybkh0bWxNZXNzYWdlID0gdmFsO1xuICAgICAgICAgICAgX2NvbnRleHQud2Fybkh0bWxNZXNzYWdlID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgZXNjYXBlUGFyYW1ldGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9lc2NhcGVQYXJhbWV0ZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCBlc2NhcGVQYXJhbWV0ZXIodmFsKSB7XG4gICAgICAgICAgICBfZXNjYXBlUGFyYW1ldGVyID0gdmFsO1xuICAgICAgICAgICAgX2NvbnRleHQuZXNjYXBlUGFyYW1ldGVyID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICB0LFxuICAgICAgICBnZXRMb2NhbGVNZXNzYWdlLFxuICAgICAgICBzZXRMb2NhbGVNZXNzYWdlLFxuICAgICAgICBtZXJnZUxvY2FsZU1lc3NhZ2UsXG4gICAgICAgIGdldFBvc3RUcmFuc2xhdGlvbkhhbmRsZXIsXG4gICAgICAgIHNldFBvc3RUcmFuc2xhdGlvbkhhbmRsZXIsXG4gICAgICAgIGdldE1pc3NpbmdIYW5kbGVyLFxuICAgICAgICBzZXRNaXNzaW5nSGFuZGxlcixcbiAgICAgICAgW1NldFBsdXJhbFJ1bGVzU3ltYm9sXTogc2V0UGx1cmFsUnVsZXNcbiAgICB9O1xuICAgIHtcbiAgICAgICAgY29tcG9zZXIuZGF0ZXRpbWVGb3JtYXRzID0gZGF0ZXRpbWVGb3JtYXRzO1xuICAgICAgICBjb21wb3Nlci5udW1iZXJGb3JtYXRzID0gbnVtYmVyRm9ybWF0cztcbiAgICAgICAgY29tcG9zZXIucnQgPSBydDtcbiAgICAgICAgY29tcG9zZXIudGUgPSB0ZTtcbiAgICAgICAgY29tcG9zZXIudG0gPSB0bTtcbiAgICAgICAgY29tcG9zZXIuZCA9IGQ7XG4gICAgICAgIGNvbXBvc2VyLm4gPSBuO1xuICAgICAgICBjb21wb3Nlci5nZXREYXRlVGltZUZvcm1hdCA9IGdldERhdGVUaW1lRm9ybWF0O1xuICAgICAgICBjb21wb3Nlci5zZXREYXRlVGltZUZvcm1hdCA9IHNldERhdGVUaW1lRm9ybWF0O1xuICAgICAgICBjb21wb3Nlci5tZXJnZURhdGVUaW1lRm9ybWF0ID0gbWVyZ2VEYXRlVGltZUZvcm1hdDtcbiAgICAgICAgY29tcG9zZXIuZ2V0TnVtYmVyRm9ybWF0ID0gZ2V0TnVtYmVyRm9ybWF0O1xuICAgICAgICBjb21wb3Nlci5zZXROdW1iZXJGb3JtYXQgPSBzZXROdW1iZXJGb3JtYXQ7XG4gICAgICAgIGNvbXBvc2VyLm1lcmdlTnVtYmVyRm9ybWF0ID0gbWVyZ2VOdW1iZXJGb3JtYXQ7XG4gICAgICAgIGNvbXBvc2VyW0luZWpjdFdpdGhPcHRpb25TeW1ib2xdID0gX19pbmplY3RXaXRoT3B0aW9uO1xuICAgICAgICBjb21wb3NlcltUcmFuc2xhdGVWTm9kZVN5bWJvbF0gPSB0cmFuc2xhdGVWTm9kZTtcbiAgICAgICAgY29tcG9zZXJbRGF0ZXRpbWVQYXJ0c1N5bWJvbF0gPSBkYXRldGltZVBhcnRzO1xuICAgICAgICBjb21wb3NlcltOdW1iZXJQYXJ0c1N5bWJvbF0gPSBudW1iZXJQYXJ0cztcbiAgICB9XG4gICAgLy8gZm9yIHZ1ZS1kZXZ0b29scyB0aW1lbGluZSBldmVudFxuICAgIHtcbiAgICAgICAgY29tcG9zZXJbRW5hYmxlRW1pdHRlcl0gPSAoZW1pdHRlcikgPT4ge1xuICAgICAgICAgICAgX2NvbnRleHQuX192X2VtaXR0ZXIgPSBlbWl0dGVyO1xuICAgICAgICB9O1xuICAgICAgICBjb21wb3NlcltEaXNhYmxlRW1pdHRlcl0gPSAoKSA9PiB7XG4gICAgICAgICAgICBfY29udGV4dC5fX3ZfZW1pdHRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvc2VyO1xufVxuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qKlxuICogQ29udmVydCB0byBJMThuIENvbXBvc2VyIE9wdGlvbnMgZnJvbSBWdWVJMThuIE9wdGlvbnNcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gY29udmVydENvbXBvc2VyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgY29uc3QgbG9jYWxlID0gc2hhcmVkLmlzU3RyaW5nKG9wdGlvbnMubG9jYWxlKSA/IG9wdGlvbnMubG9jYWxlIDogY29yZUJhc2UuREVGQVVMVF9MT0NBTEU7XG4gICAgY29uc3QgZmFsbGJhY2tMb2NhbGUgPSBzaGFyZWQuaXNTdHJpbmcob3B0aW9ucy5mYWxsYmFja0xvY2FsZSkgfHxcbiAgICAgICAgc2hhcmVkLmlzQXJyYXkob3B0aW9ucy5mYWxsYmFja0xvY2FsZSkgfHxcbiAgICAgICAgc2hhcmVkLmlzUGxhaW5PYmplY3Qob3B0aW9ucy5mYWxsYmFja0xvY2FsZSkgfHxcbiAgICAgICAgb3B0aW9ucy5mYWxsYmFja0xvY2FsZSA9PT0gZmFsc2VcbiAgICAgICAgPyBvcHRpb25zLmZhbGxiYWNrTG9jYWxlXG4gICAgICAgIDogbG9jYWxlO1xuICAgIGNvbnN0IG1pc3NpbmcgPSBzaGFyZWQuaXNGdW5jdGlvbihvcHRpb25zLm1pc3NpbmcpID8gb3B0aW9ucy5taXNzaW5nIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1pc3NpbmdXYXJuID0gc2hhcmVkLmlzQm9vbGVhbihvcHRpb25zLnNpbGVudFRyYW5zbGF0aW9uV2FybikgfHxcbiAgICAgICAgc2hhcmVkLmlzUmVnRXhwKG9wdGlvbnMuc2lsZW50VHJhbnNsYXRpb25XYXJuKVxuICAgICAgICA/ICFvcHRpb25zLnNpbGVudFRyYW5zbGF0aW9uV2FyblxuICAgICAgICA6IHRydWU7XG4gICAgY29uc3QgZmFsbGJhY2tXYXJuID0gc2hhcmVkLmlzQm9vbGVhbihvcHRpb25zLnNpbGVudEZhbGxiYWNrV2FybikgfHxcbiAgICAgICAgc2hhcmVkLmlzUmVnRXhwKG9wdGlvbnMuc2lsZW50RmFsbGJhY2tXYXJuKVxuICAgICAgICA/ICFvcHRpb25zLnNpbGVudEZhbGxiYWNrV2FyblxuICAgICAgICA6IHRydWU7XG4gICAgY29uc3QgZmFsbGJhY2tSb290ID0gc2hhcmVkLmlzQm9vbGVhbihvcHRpb25zLmZhbGxiYWNrUm9vdClcbiAgICAgICAgPyBvcHRpb25zLmZhbGxiYWNrUm9vdFxuICAgICAgICA6IHRydWU7XG4gICAgY29uc3QgZmFsbGJhY2tGb3JtYXQgPSAhIW9wdGlvbnMuZm9ybWF0RmFsbGJhY2tNZXNzYWdlcztcbiAgICBjb25zdCBtb2RpZmllcnMgPSBzaGFyZWQuaXNQbGFpbk9iamVjdChvcHRpb25zLm1vZGlmaWVycykgPyBvcHRpb25zLm1vZGlmaWVycyA6IHt9O1xuICAgIGNvbnN0IHBsdXJhbGl6YXRpb25SdWxlcyA9IG9wdGlvbnMucGx1cmFsaXphdGlvblJ1bGVzO1xuICAgIGNvbnN0IHBvc3RUcmFuc2xhdGlvbiA9IHNoYXJlZC5pc0Z1bmN0aW9uKG9wdGlvbnMucG9zdFRyYW5zbGF0aW9uKVxuICAgICAgICA/IG9wdGlvbnMucG9zdFRyYW5zbGF0aW9uXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHdhcm5IdG1sTWVzc2FnZSA9IHNoYXJlZC5pc1N0cmluZyhvcHRpb25zLndhcm5IdG1sSW5NZXNzYWdlKVxuICAgICAgICA/IG9wdGlvbnMud2Fybkh0bWxJbk1lc3NhZ2UgIT09ICdvZmYnXG4gICAgICAgIDogdHJ1ZTtcbiAgICBjb25zdCBlc2NhcGVQYXJhbWV0ZXIgPSAhIW9wdGlvbnMuZXNjYXBlUGFyYW1ldGVySHRtbDtcbiAgICBjb25zdCBpbmhlcml0TG9jYWxlID0gc2hhcmVkLmlzQm9vbGVhbihvcHRpb25zLnN5bmMpID8gb3B0aW9ucy5zeW5jIDogdHJ1ZTtcbiAgICBpZiAob3B0aW9ucy5mb3JtYXR0ZXIpIHtcbiAgICAgICAgc2hhcmVkLndhcm4oZ2V0V2Fybk1lc3NhZ2UoSTE4bldhcm5Db2Rlcy5OT1RfU1VQUE9SVEVEX0ZPUk1BVFRFUikpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQpIHtcbiAgICAgICAgc2hhcmVkLndhcm4oZ2V0V2Fybk1lc3NhZ2UoSTE4bldhcm5Db2Rlcy5OT1RfU1VQUE9SVEVEX1BSRVNFUlZFX0RJUkVDVElWRSkpO1xuICAgIH1cbiAgICBsZXQgbWVzc2FnZXMgPSBvcHRpb25zLm1lc3NhZ2VzO1xuICAgIGlmIChzaGFyZWQuaXNQbGFpbk9iamVjdChvcHRpb25zLnNoYXJlZE1lc3NhZ2VzKSkge1xuICAgICAgICBjb25zdCBzaGFyZWRNZXNzYWdlcyA9IG9wdGlvbnMuc2hhcmVkTWVzc2FnZXM7XG4gICAgICAgIGNvbnN0IGxvY2FsZXMgPSBPYmplY3Qua2V5cyhzaGFyZWRNZXNzYWdlcyk7XG4gICAgICAgIG1lc3NhZ2VzID0gbG9jYWxlcy5yZWR1Y2UoKG1lc3NhZ2VzLCBsb2NhbGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlc1tsb2NhbGVdIHx8IChtZXNzYWdlc1tsb2NhbGVdID0ge30pO1xuICAgICAgICAgICAgc2hhcmVkLmFzc2lnbihtZXNzYWdlLCBzaGFyZWRNZXNzYWdlc1tsb2NhbGVdKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICAgICAgfSwgKG1lc3NhZ2VzIHx8IHt9KSk7XG4gICAgfVxuICAgIGNvbnN0IHsgX19pMThuLCBfX3Jvb3QsIF9faW5qZWN0V2l0aE9wdGlvbiB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBkYXRldGltZUZvcm1hdHMgPSBvcHRpb25zLmRhdGV0aW1lRm9ybWF0cztcbiAgICBjb25zdCBudW1iZXJGb3JtYXRzID0gb3B0aW9ucy5udW1iZXJGb3JtYXRzO1xuICAgIGNvbnN0IGZsYXRKc29uID0gb3B0aW9ucy5mbGF0SnNvbjtcbiAgICBjb25zdCB0cmFuc2xhdGVFeGlzdENvbXBhdGlibGUgPSBvcHRpb25zXG4gICAgICAgIC50cmFuc2xhdGVFeGlzdENvbXBhdGlibGU7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBmYWxsYmFja0xvY2FsZSxcbiAgICAgICAgbWVzc2FnZXMsXG4gICAgICAgIGZsYXRKc29uLFxuICAgICAgICBkYXRldGltZUZvcm1hdHMsXG4gICAgICAgIG51bWJlckZvcm1hdHMsXG4gICAgICAgIG1pc3NpbmcsXG4gICAgICAgIG1pc3NpbmdXYXJuLFxuICAgICAgICBmYWxsYmFja1dhcm4sXG4gICAgICAgIGZhbGxiYWNrUm9vdCxcbiAgICAgICAgZmFsbGJhY2tGb3JtYXQsXG4gICAgICAgIG1vZGlmaWVycyxcbiAgICAgICAgcGx1cmFsUnVsZXM6IHBsdXJhbGl6YXRpb25SdWxlcyxcbiAgICAgICAgcG9zdFRyYW5zbGF0aW9uLFxuICAgICAgICB3YXJuSHRtbE1lc3NhZ2UsXG4gICAgICAgIGVzY2FwZVBhcmFtZXRlcixcbiAgICAgICAgbWVzc2FnZVJlc29sdmVyOiBvcHRpb25zLm1lc3NhZ2VSZXNvbHZlcixcbiAgICAgICAgaW5oZXJpdExvY2FsZSxcbiAgICAgICAgdHJhbnNsYXRlRXhpc3RDb21wYXRpYmxlLFxuICAgICAgICBfX2kxOG4sXG4gICAgICAgIF9fcm9vdCxcbiAgICAgICAgX19pbmplY3RXaXRoT3B0aW9uXG4gICAgfTtcbn1cbi8qKlxuICogY3JlYXRlIFZ1ZUkxOG4gaW50ZXJmYWNlIGZhY3RvcnlcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbmZ1bmN0aW9uIGNyZWF0ZVZ1ZUkxOG4ob3B0aW9ucyA9IHt9LCBWdWVJMThuTGVnYWN5KSB7XG4gICAge1xuICAgICAgICBjb25zdCBjb21wb3NlciA9IGNyZWF0ZUNvbXBvc2VyKGNvbnZlcnRDb21wb3Nlck9wdGlvbnMob3B0aW9ucykpO1xuICAgICAgICBjb25zdCB7IF9fZXh0ZW5kZXIgfSA9IG9wdGlvbnM7XG4gICAgICAgIC8vIGRlZmluZXMgVnVlSTE4blxuICAgICAgICBjb25zdCB2dWVJMThuID0ge1xuICAgICAgICAgICAgLy8gaWRcbiAgICAgICAgICAgIGlkOiBjb21wb3Nlci5pZCxcbiAgICAgICAgICAgIC8vIGxvY2FsZVxuICAgICAgICAgICAgZ2V0IGxvY2FsZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9zZXIubG9jYWxlLnZhbHVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBsb2NhbGUodmFsKSB7XG4gICAgICAgICAgICAgICAgY29tcG9zZXIubG9jYWxlLnZhbHVlID0gdmFsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGZhbGxiYWNrTG9jYWxlXG4gICAgICAgICAgICBnZXQgZmFsbGJhY2tMb2NhbGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2VyLmZhbGxiYWNrTG9jYWxlLnZhbHVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBmYWxsYmFja0xvY2FsZSh2YWwpIHtcbiAgICAgICAgICAgICAgICBjb21wb3Nlci5mYWxsYmFja0xvY2FsZS52YWx1ZSA9IHZhbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBtZXNzYWdlc1xuICAgICAgICAgICAgZ2V0IG1lc3NhZ2VzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wb3Nlci5tZXNzYWdlcy52YWx1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBkYXRldGltZUZvcm1hdHNcbiAgICAgICAgICAgIGdldCBkYXRldGltZUZvcm1hdHMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2VyLmRhdGV0aW1lRm9ybWF0cy52YWx1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBudW1iZXJGb3JtYXRzXG4gICAgICAgICAgICBnZXQgbnVtYmVyRm9ybWF0cygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9zZXIubnVtYmVyRm9ybWF0cy52YWx1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBhdmFpbGFibGVMb2NhbGVzXG4gICAgICAgICAgICBnZXQgYXZhaWxhYmxlTG9jYWxlcygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9zZXIuYXZhaWxhYmxlTG9jYWxlcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBmb3JtYXR0ZXJcbiAgICAgICAgICAgIGdldCBmb3JtYXR0ZXIoKSB7XG4gICAgICAgICAgICAgICAgc2hhcmVkLndhcm4oZ2V0V2Fybk1lc3NhZ2UoSTE4bldhcm5Db2Rlcy5OT1RfU1VQUE9SVEVEX0ZPUk1BVFRFUikpO1xuICAgICAgICAgICAgICAgIC8vIGR1bW15XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBmb3JtYXR0ZXIodmFsKSB7XG4gICAgICAgICAgICAgICAgc2hhcmVkLndhcm4oZ2V0V2Fybk1lc3NhZ2UoSTE4bldhcm5Db2Rlcy5OT1RfU1VQUE9SVEVEX0ZPUk1BVFRFUikpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIG1pc3NpbmdcbiAgICAgICAgICAgIGdldCBtaXNzaW5nKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wb3Nlci5nZXRNaXNzaW5nSGFuZGxlcigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBtaXNzaW5nKGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICBjb21wb3Nlci5zZXRNaXNzaW5nSGFuZGxlcihoYW5kbGVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBzaWxlbnRUcmFuc2xhdGlvbldhcm5cbiAgICAgICAgICAgIGdldCBzaWxlbnRUcmFuc2xhdGlvbldhcm4oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNoYXJlZC5pc0Jvb2xlYW4oY29tcG9zZXIubWlzc2luZ1dhcm4pXG4gICAgICAgICAgICAgICAgICAgID8gIWNvbXBvc2VyLm1pc3NpbmdXYXJuXG4gICAgICAgICAgICAgICAgICAgIDogY29tcG9zZXIubWlzc2luZ1dhcm47XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IHNpbGVudFRyYW5zbGF0aW9uV2Fybih2YWwpIHtcbiAgICAgICAgICAgICAgICBjb21wb3Nlci5taXNzaW5nV2FybiA9IHNoYXJlZC5pc0Jvb2xlYW4odmFsKSA/ICF2YWwgOiB2YWw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gc2lsZW50RmFsbGJhY2tXYXJuXG4gICAgICAgICAgICBnZXQgc2lsZW50RmFsbGJhY2tXYXJuKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaGFyZWQuaXNCb29sZWFuKGNvbXBvc2VyLmZhbGxiYWNrV2FybilcbiAgICAgICAgICAgICAgICAgICAgPyAhY29tcG9zZXIuZmFsbGJhY2tXYXJuXG4gICAgICAgICAgICAgICAgICAgIDogY29tcG9zZXIuZmFsbGJhY2tXYXJuO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBzaWxlbnRGYWxsYmFja1dhcm4odmFsKSB7XG4gICAgICAgICAgICAgICAgY29tcG9zZXIuZmFsbGJhY2tXYXJuID0gc2hhcmVkLmlzQm9vbGVhbih2YWwpID8gIXZhbCA6IHZhbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBtb2RpZmllcnNcbiAgICAgICAgICAgIGdldCBtb2RpZmllcnMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2VyLm1vZGlmaWVycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBmb3JtYXRGYWxsYmFja01lc3NhZ2VzXG4gICAgICAgICAgICBnZXQgZm9ybWF0RmFsbGJhY2tNZXNzYWdlcygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9zZXIuZmFsbGJhY2tGb3JtYXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IGZvcm1hdEZhbGxiYWNrTWVzc2FnZXModmFsKSB7XG4gICAgICAgICAgICAgICAgY29tcG9zZXIuZmFsbGJhY2tGb3JtYXQgPSB2YWw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gcG9zdFRyYW5zbGF0aW9uXG4gICAgICAgICAgICBnZXQgcG9zdFRyYW5zbGF0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wb3Nlci5nZXRQb3N0VHJhbnNsYXRpb25IYW5kbGVyKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IHBvc3RUcmFuc2xhdGlvbihoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgY29tcG9zZXIuc2V0UG9zdFRyYW5zbGF0aW9uSGFuZGxlcihoYW5kbGVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBzeW5jXG4gICAgICAgICAgICBnZXQgc3luYygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9zZXIuaW5oZXJpdExvY2FsZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgc3luYyh2YWwpIHtcbiAgICAgICAgICAgICAgICBjb21wb3Nlci5pbmhlcml0TG9jYWxlID0gdmFsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIHdhcm5Jbkh0bWxNZXNzYWdlXG4gICAgICAgICAgICBnZXQgd2Fybkh0bWxJbk1lc3NhZ2UoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2VyLndhcm5IdG1sTWVzc2FnZSA/ICd3YXJuJyA6ICdvZmYnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCB3YXJuSHRtbEluTWVzc2FnZSh2YWwpIHtcbiAgICAgICAgICAgICAgICBjb21wb3Nlci53YXJuSHRtbE1lc3NhZ2UgPSB2YWwgIT09ICdvZmYnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGVzY2FwZVBhcmFtZXRlckh0bWxcbiAgICAgICAgICAgIGdldCBlc2NhcGVQYXJhbWV0ZXJIdG1sKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wb3Nlci5lc2NhcGVQYXJhbWV0ZXI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IGVzY2FwZVBhcmFtZXRlckh0bWwodmFsKSB7XG4gICAgICAgICAgICAgICAgY29tcG9zZXIuZXNjYXBlUGFyYW1ldGVyID0gdmFsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIHByZXNlcnZlRGlyZWN0aXZlQ29udGVudFxuICAgICAgICAgICAgZ2V0IHByZXNlcnZlRGlyZWN0aXZlQ29udGVudCgpIHtcbiAgICAgICAgICAgICAgICBzaGFyZWQud2FybihnZXRXYXJuTWVzc2FnZShJMThuV2FybkNvZGVzLk5PVF9TVVBQT1JURURfUFJFU0VSVkVfRElSRUNUSVZFKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IHByZXNlcnZlRGlyZWN0aXZlQ29udGVudCh2YWwpIHtcbiAgICAgICAgICAgICAgICBzaGFyZWQud2FybihnZXRXYXJuTWVzc2FnZShJMThuV2FybkNvZGVzLk5PVF9TVVBQT1JURURfUFJFU0VSVkVfRElSRUNUSVZFKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gcGx1cmFsaXphdGlvblJ1bGVzXG4gICAgICAgICAgICBnZXQgcGx1cmFsaXphdGlvblJ1bGVzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wb3Nlci5wbHVyYWxSdWxlcyB8fCB7fTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBmb3IgaW50ZXJuYWxcbiAgICAgICAgICAgIF9fY29tcG9zZXI6IGNvbXBvc2VyLFxuICAgICAgICAgICAgLy8gdFxuICAgICAgICAgICAgdCguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2FyZzEsIGFyZzIsIGFyZzNdID0gYXJncztcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIGxldCBuYW1lZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKCFzaGFyZWQuaXNTdHJpbmcoYXJnMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlSTE4bkVycm9yKEkxOG5FcnJvckNvZGVzLklOVkFMSURfQVJHVU1FTlQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBhcmcxO1xuICAgICAgICAgICAgICAgIGlmIChzaGFyZWQuaXNTdHJpbmcoYXJnMikpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2NhbGUgPSBhcmcyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzaGFyZWQuaXNBcnJheShhcmcyKSkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ID0gYXJnMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2hhcmVkLmlzUGxhaW5PYmplY3QoYXJnMikpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZWQgPSBhcmcyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2hhcmVkLmlzQXJyYXkoYXJnMykpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGFyZzM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNoYXJlZC5pc1BsYWluT2JqZWN0KGFyZzMpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWVkID0gYXJnMztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGNvbXBvc2VyLnQoa2V5LCAobGlzdCB8fCBuYW1lZCB8fCB7fSkgYXMgYW55LCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGNvbXBvc2VyLnQsIGNvbXBvc2VyLCBbXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgKGxpc3QgfHwgbmFtZWQgfHwge30pLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnQoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGNvbXBvc2VyLnJ0LCBjb21wb3NlciwgWy4uLmFyZ3NdKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyB0Y1xuICAgICAgICAgICAgdGMoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IFthcmcxLCBhcmcyLCBhcmczXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgcGx1cmFsOiAxIH07XG4gICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIGxldCBuYW1lZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKCFzaGFyZWQuaXNTdHJpbmcoYXJnMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlSTE4bkVycm9yKEkxOG5FcnJvckNvZGVzLklOVkFMSURfQVJHVU1FTlQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBhcmcxO1xuICAgICAgICAgICAgICAgIGlmIChzaGFyZWQuaXNTdHJpbmcoYXJnMikpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2NhbGUgPSBhcmcyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzaGFyZWQuaXNOdW1iZXIoYXJnMikpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wbHVyYWwgPSBhcmcyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzaGFyZWQuaXNBcnJheShhcmcyKSkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ID0gYXJnMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2hhcmVkLmlzUGxhaW5PYmplY3QoYXJnMikpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZWQgPSBhcmcyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2hhcmVkLmlzU3RyaW5nKGFyZzMpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubG9jYWxlID0gYXJnMztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2hhcmVkLmlzQXJyYXkoYXJnMykpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGFyZzM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNoYXJlZC5pc1BsYWluT2JqZWN0KGFyZzMpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWVkID0gYXJnMztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGNvbXBvc2VyLnQoa2V5LCAobGlzdCB8fCBuYW1lZCB8fCB7fSkgYXMgYW55LCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGNvbXBvc2VyLnQsIGNvbXBvc2VyLCBbXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgKGxpc3QgfHwgbmFtZWQgfHwge30pLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gdGVcbiAgICAgICAgICAgIHRlKGtleSwgbG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2VyLnRlKGtleSwgbG9jYWxlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyB0bVxuICAgICAgICAgICAgdG0oa2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2VyLnRtKGtleSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZ2V0TG9jYWxlTWVzc2FnZVxuICAgICAgICAgICAgZ2V0TG9jYWxlTWVzc2FnZShsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9zZXIuZ2V0TG9jYWxlTWVzc2FnZShsb2NhbGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIHNldExvY2FsZU1lc3NhZ2VcbiAgICAgICAgICAgIHNldExvY2FsZU1lc3NhZ2UobG9jYWxlLCBtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgY29tcG9zZXIuc2V0TG9jYWxlTWVzc2FnZShsb2NhbGUsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIG1lcmdlTG9jYWxlTWVzc2FnZVxuICAgICAgICAgICAgbWVyZ2VMb2NhbGVNZXNzYWdlKGxvY2FsZSwgbWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGNvbXBvc2VyLm1lcmdlTG9jYWxlTWVzc2FnZShsb2NhbGUsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGRcbiAgICAgICAgICAgIGQoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGNvbXBvc2VyLmQsIGNvbXBvc2VyLCBbLi4uYXJnc10pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGdldERhdGVUaW1lRm9ybWF0XG4gICAgICAgICAgICBnZXREYXRlVGltZUZvcm1hdChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9zZXIuZ2V0RGF0ZVRpbWVGb3JtYXQobG9jYWxlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBzZXREYXRlVGltZUZvcm1hdFxuICAgICAgICAgICAgc2V0RGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBmb3JtYXQpIHtcbiAgICAgICAgICAgICAgICBjb21wb3Nlci5zZXREYXRlVGltZUZvcm1hdChsb2NhbGUsIGZvcm1hdCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gbWVyZ2VEYXRlVGltZUZvcm1hdFxuICAgICAgICAgICAgbWVyZ2VEYXRlVGltZUZvcm1hdChsb2NhbGUsIGZvcm1hdCkge1xuICAgICAgICAgICAgICAgIGNvbXBvc2VyLm1lcmdlRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBmb3JtYXQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIG5cbiAgICAgICAgICAgIG4oLi4uYXJncykge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGNvbXBvc2VyLm4sIGNvbXBvc2VyLCBbLi4uYXJnc10pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGdldE51bWJlckZvcm1hdFxuICAgICAgICAgICAgZ2V0TnVtYmVyRm9ybWF0KGxvY2FsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wb3Nlci5nZXROdW1iZXJGb3JtYXQobG9jYWxlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBzZXROdW1iZXJGb3JtYXRcbiAgICAgICAgICAgIHNldE51bWJlckZvcm1hdChsb2NhbGUsIGZvcm1hdCkge1xuICAgICAgICAgICAgICAgIGNvbXBvc2VyLnNldE51bWJlckZvcm1hdChsb2NhbGUsIGZvcm1hdCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gbWVyZ2VOdW1iZXJGb3JtYXRcbiAgICAgICAgICAgIG1lcmdlTnVtYmVyRm9ybWF0KGxvY2FsZSwgZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgY29tcG9zZXIubWVyZ2VOdW1iZXJGb3JtYXQobG9jYWxlLCBmb3JtYXQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGdldENob2ljZUluZGV4XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICBnZXRDaG9pY2VJbmRleChjaG9pY2UsIGNob2ljZXNMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBzaGFyZWQud2FybihnZXRXYXJuTWVzc2FnZShJMThuV2FybkNvZGVzLk5PVF9TVVBQT1JURURfR0VUX0NIT0lDRV9JTkRFWCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdnVlSTE4bi5fX2V4dGVuZGVyID0gX19leHRlbmRlcjtcbiAgICAgICAgLy8gZm9yIHZ1ZS1kZXZ0b29scyB0aW1lbGluZSBldmVudFxuICAgICAgICB7XG4gICAgICAgICAgICB2dWVJMThuLl9fZW5hYmxlRW1pdHRlciA9IChlbWl0dGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX19jb21wb3NlciA9IGNvbXBvc2VyO1xuICAgICAgICAgICAgICAgIF9fY29tcG9zZXJbRW5hYmxlRW1pdHRlcl0gJiYgX19jb21wb3NlcltFbmFibGVFbWl0dGVyXShlbWl0dGVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2dWVJMThuLl9fZGlzYWJsZUVtaXR0ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX19jb21wb3NlciA9IGNvbXBvc2VyO1xuICAgICAgICAgICAgICAgIF9fY29tcG9zZXJbRGlzYWJsZUVtaXR0ZXJdICYmIF9fY29tcG9zZXJbRGlzYWJsZUVtaXR0ZXJdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2dWVJMThuO1xuICAgIH1cbn1cbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5jb25zdCBiYXNlRm9ybWF0UHJvcHMgPSB7XG4gICAgdGFnOiB7XG4gICAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF1cbiAgICB9LFxuICAgIGxvY2FsZToge1xuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICB9LFxuICAgIHNjb3BlOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgLy8gTk9URTogYXZvaWQgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9ydXNoc3RhY2svaXNzdWVzLzEwNTBcbiAgICAgICAgdmFsaWRhdG9yOiAodmFsIC8qIENvbXBvbmVudEkxOG5TY29wZSAqLykgPT4gdmFsID09PSAncGFyZW50JyB8fCB2YWwgPT09ICdnbG9iYWwnLFxuICAgICAgICBkZWZhdWx0OiAncGFyZW50JyAvKiBDb21wb25lbnRJMThuU2NvcGUgKi9cbiAgICB9LFxuICAgIGkxOG46IHtcbiAgICAgICAgdHlwZTogT2JqZWN0XG4gICAgfVxufTtcblxuZnVuY3Rpb24gZ2V0SW50ZXJwb2xhdGVBcmcoXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxueyBzbG90cyB9LCAvLyBTZXR1cENvbnRleHQsXG5rZXlzKSB7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAxICYmIGtleXNbMF0gPT09ICdkZWZhdWx0Jykge1xuICAgICAgICAvLyBkZWZhdWx0IHNsb3Qgd2l0aCBsaXN0XG4gICAgICAgIGNvbnN0IHJldCA9IHNsb3RzLmRlZmF1bHQgPyBzbG90cy5kZWZhdWx0KCkgOiBbXTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgcmV0dXJuIHJldC5yZWR1Y2UoKHNsb3QsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgLi4uc2xvdCxcbiAgICAgICAgICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgICAgICAgICAuLi4oY3VycmVudC50eXBlID09PSB2dWUuRnJhZ21lbnQgPyBjdXJyZW50LmNoaWxkcmVuIDogW2N1cnJlbnRdXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF07XG4gICAgICAgIH0sIFtdKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIG5hbWVkIHNsb3RzXG4gICAgICAgIHJldHVybiBrZXlzLnJlZHVjZSgoYXJnLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNsb3QgPSBzbG90c1trZXldO1xuICAgICAgICAgICAgaWYgKHNsb3QpIHtcbiAgICAgICAgICAgICAgICBhcmdba2V5XSA9IHNsb3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gZ2V0RnJhZ21lbnRhYmxlVGFnKHRhZykge1xuICAgIHJldHVybiB2dWUuRnJhZ21lbnQgO1xufVxuXG5jb25zdCBUcmFuc2xhdGlvbkltcGwgPSAvKiNfX1BVUkVfXyovIHZ1ZS5kZWZpbmVDb21wb25lbnQoe1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgbmFtZTogJ2kxOG4tdCcsXG4gICAgcHJvcHM6IHNoYXJlZC5hc3NpZ24oe1xuICAgICAgICBrZXlwYXRoOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBwbHVyYWw6IHtcbiAgICAgICAgICAgIHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgdmFsaWRhdG9yOiAodmFsKSA9PiBzaGFyZWQuaXNOdW1iZXIodmFsKSB8fCAhaXNOYU4odmFsKVxuICAgICAgICB9XG4gICAgfSwgYmFzZUZvcm1hdFByb3BzKSxcbiAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBzZXR1cChwcm9wcywgY29udGV4dCkge1xuICAgICAgICBjb25zdCB7IHNsb3RzLCBhdHRycyB9ID0gY29udGV4dDtcbiAgICAgICAgLy8gTk9URTogYXZvaWQgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9ydXNoc3RhY2svaXNzdWVzLzEwNTBcbiAgICAgICAgY29uc3QgaTE4biA9IHByb3BzLmkxOG4gfHxcbiAgICAgICAgICAgIHVzZUkxOG4oe1xuICAgICAgICAgICAgICAgIHVzZVNjb3BlOiBwcm9wcy5zY29wZSxcbiAgICAgICAgICAgICAgICBfX3VzZUNvbXBvbmVudDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2xvdHMpLmZpbHRlcihrZXkgPT4ga2V5ICE9PSAnXycpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgaWYgKHByb3BzLmxvY2FsZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMubG9jYWxlID0gcHJvcHMubG9jYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BzLnBsdXJhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5wbHVyYWwgPSBzaGFyZWQuaXNTdHJpbmcocHJvcHMucGx1cmFsKSA/ICtwcm9wcy5wbHVyYWwgOiBwcm9wcy5wbHVyYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBnZXRJbnRlcnBvbGF0ZUFyZyhjb250ZXh0LCBrZXlzKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGkxOG5bVHJhbnNsYXRlVk5vZGVTeW1ib2xdKHByb3BzLmtleXBhdGgsIGFyZywgb3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBhc3NpZ25lZEF0dHJzID0gc2hhcmVkLmFzc2lnbih7fSwgYXR0cnMpO1xuICAgICAgICAgICAgY29uc3QgdGFnID0gc2hhcmVkLmlzU3RyaW5nKHByb3BzLnRhZykgfHwgc2hhcmVkLmlzT2JqZWN0KHByb3BzLnRhZylcbiAgICAgICAgICAgICAgICA/IHByb3BzLnRhZ1xuICAgICAgICAgICAgICAgIDogZ2V0RnJhZ21lbnRhYmxlVGFnKCk7XG4gICAgICAgICAgICByZXR1cm4gdnVlLmgodGFnLCBhc3NpZ25lZEF0dHJzLCBjaGlsZHJlbik7XG4gICAgICAgIH07XG4gICAgfVxufSk7XG4vKipcbiAqIGV4cG9ydCB0aGUgcHVibGljIHR5cGUgZm9yIGgvdHN4IGluZmVyZW5jZVxuICogYWxzbyB0byBhdm9pZCBpbmxpbmUgaW1wb3J0KCkgaW4gZ2VuZXJhdGVkIGQudHMgZmlsZXNcbiAqL1xuLyoqXG4gKiBUcmFuc2xhdGlvbiBDb21wb25lbnRcbiAqXG4gKiBAcmVtYXJrc1xuICogU2VlIHRoZSBmb2xsb3dpbmcgaXRlbXMgZm9yIHByb3BlcnR5IGFib3V0IGRldGFpbHNcbiAqXG4gKiBAVnVlSTE4blNlZSBbVHJhbnNsYXRpb25Qcm9wc10oY29tcG9uZW50I3RyYW5zbGF0aW9ucHJvcHMpXG4gKiBAVnVlSTE4blNlZSBbQmFzZUZvcm1hdFByb3BzXShjb21wb25lbnQjYmFzZWZvcm1hdHByb3BzKVxuICogQFZ1ZUkxOG5TZWUgW0NvbXBvbmVudCBJbnRlcnBvbGF0aW9uXSguLi9ndWlkZS9hZHZhbmNlZC9jb21wb25lbnQpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxkaXYgaWQ9XCJhcHBcIj5cbiAqICAgPCEtLSAuLi4gLS0+XG4gKiAgIDxpMThuIGtleXBhdGg9XCJ0ZXJtXCIgdGFnPVwibGFiZWxcIiBmb3I9XCJ0b3NcIj5cbiAqICAgICA8YSA6aHJlZj1cInVybFwiIHRhcmdldD1cIl9ibGFua1wiPnt7ICR0KCd0b3MnKSB9fTwvYT5cbiAqICAgPC9pMThuPlxuICogICA8IS0tIC4uLiAtLT5cbiAqIDwvZGl2PlxuICogYGBgXG4gKiBgYGBqc1xuICogaW1wb3J0IHsgY3JlYXRlQXBwIH0gZnJvbSAndnVlJ1xuICogaW1wb3J0IHsgY3JlYXRlSTE4biB9IGZyb20gJ3Z1ZS1pMThuJ1xuICpcbiAqIGNvbnN0IG1lc3NhZ2VzID0ge1xuICogICBlbjoge1xuICogICAgIHRvczogJ1Rlcm0gb2YgU2VydmljZScsXG4gKiAgICAgdGVybTogJ0kgYWNjZXB0IHh4eCB7MH0uJ1xuICogICB9LFxuICogICBqYToge1xuICogICAgIHRvczogJ+WIqeeUqOimj+e0hCcsXG4gKiAgICAgdGVybTogJ+engeOBryB4eHgg44GuezB944Gr5ZCM5oSP44GX44G+44GZ44CCJ1xuICogICB9XG4gKiB9XG4gKlxuICogY29uc3QgaTE4biA9IGNyZWF0ZUkxOG4oe1xuICogICBsb2NhbGU6ICdlbicsXG4gKiAgIG1lc3NhZ2VzXG4gKiB9KVxuICpcbiAqIGNvbnN0IGFwcCA9IGNyZWF0ZUFwcCh7XG4gKiAgIGRhdGE6IHtcbiAqICAgICB1cmw6ICcvdGVybSdcbiAqICAgfVxuICogfSkudXNlKGkxOG4pLm1vdW50KCcjYXBwJylcbiAqIGBgYFxuICpcbiAqIEBWdWVJMThuQ29tcG9uZW50XG4gKi9cbmNvbnN0IFRyYW5zbGF0aW9uID0gVHJhbnNsYXRpb25JbXBsO1xuY29uc3QgSTE4blQgPSBUcmFuc2xhdGlvbjtcblxuZnVuY3Rpb24gaXNWTm9kZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gc2hhcmVkLmlzQXJyYXkodGFyZ2V0KSAmJiAhc2hhcmVkLmlzU3RyaW5nKHRhcmdldFswXSk7XG59XG5mdW5jdGlvbiByZW5kZXJGb3JtYXR0ZXIocHJvcHMsIGNvbnRleHQsIHNsb3RLZXlzLCBwYXJ0Rm9ybWF0dGVyKSB7XG4gICAgY29uc3QgeyBzbG90cywgYXR0cnMgfSA9IGNvbnRleHQ7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgcGFydDogdHJ1ZSB9O1xuICAgICAgICBsZXQgb3ZlcnJpZGVzID0ge307XG4gICAgICAgIGlmIChwcm9wcy5sb2NhbGUpIHtcbiAgICAgICAgICAgIG9wdGlvbnMubG9jYWxlID0gcHJvcHMubG9jYWxlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaGFyZWQuaXNTdHJpbmcocHJvcHMuZm9ybWF0KSkge1xuICAgICAgICAgICAgb3B0aW9ucy5rZXkgPSBwcm9wcy5mb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2hhcmVkLmlzT2JqZWN0KHByb3BzLmZvcm1hdCkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBpZiAoc2hhcmVkLmlzU3RyaW5nKHByb3BzLmZvcm1hdC5rZXkpKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICBvcHRpb25zLmtleSA9IHByb3BzLmZvcm1hdC5rZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IG51bWJlciBmb3JtYXQgb3B0aW9ucyBvbmx5XG4gICAgICAgICAgICBvdmVycmlkZXMgPSBPYmplY3Qua2V5cyhwcm9wcy5mb3JtYXQpLnJlZHVjZSgob3B0aW9ucywgcHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzbG90S2V5cy5pbmNsdWRlcyhwcm9wKVxuICAgICAgICAgICAgICAgICAgICA/IHNoYXJlZC5hc3NpZ24oe30sIG9wdGlvbnMsIHsgW3Byb3BdOiBwcm9wcy5mb3JtYXRbcHJvcF0gfSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgICAgIDogb3B0aW9ucztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJ0cyA9IHBhcnRGb3JtYXR0ZXIoLi4uW3Byb3BzLnZhbHVlLCBvcHRpb25zLCBvdmVycmlkZXNdKTtcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gW29wdGlvbnMua2V5XTtcbiAgICAgICAgaWYgKHNoYXJlZC5pc0FycmF5KHBhcnRzKSkge1xuICAgICAgICAgICAgY2hpbGRyZW4gPSBwYXJ0cy5tYXAoKHBhcnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2xvdCA9IHNsb3RzW3BhcnQudHlwZV07XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHNsb3RcbiAgICAgICAgICAgICAgICAgICAgPyBzbG90KHsgW3BhcnQudHlwZV06IHBhcnQudmFsdWUsIGluZGV4LCBwYXJ0cyB9KVxuICAgICAgICAgICAgICAgICAgICA6IFtwYXJ0LnZhbHVlXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNWTm9kZShub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlWzBdLmtleSA9IGAke3BhcnQudHlwZX0tJHtpbmRleH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNoYXJlZC5pc1N0cmluZyhwYXJ0cykpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gW3BhcnRzXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhc3NpZ25lZEF0dHJzID0gc2hhcmVkLmFzc2lnbih7fSwgYXR0cnMpO1xuICAgICAgICBjb25zdCB0YWcgPSBzaGFyZWQuaXNTdHJpbmcocHJvcHMudGFnKSB8fCBzaGFyZWQuaXNPYmplY3QocHJvcHMudGFnKVxuICAgICAgICAgICAgPyBwcm9wcy50YWdcbiAgICAgICAgICAgIDogZ2V0RnJhZ21lbnRhYmxlVGFnKCk7XG4gICAgICAgIHJldHVybiB2dWUuaCh0YWcsIGFzc2lnbmVkQXR0cnMsIGNoaWxkcmVuKTtcbiAgICB9O1xufVxuXG5jb25zdCBOdW1iZXJGb3JtYXRJbXBsID0gLyojX19QVVJFX18qLyB2dWUuZGVmaW5lQ29tcG9uZW50KHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIG5hbWU6ICdpMThuLW4nLFxuICAgIHByb3BzOiBzaGFyZWQuYXNzaWduKHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgdHlwZTogW1N0cmluZywgT2JqZWN0XVxuICAgICAgICB9XG4gICAgfSwgYmFzZUZvcm1hdFByb3BzKSxcbiAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBzZXR1cChwcm9wcywgY29udGV4dCkge1xuICAgICAgICBjb25zdCBpMThuID0gcHJvcHMuaTE4biB8fFxuICAgICAgICAgICAgdXNlSTE4bih7XG4gICAgICAgICAgICAgICAgdXNlU2NvcGU6ICdwYXJlbnQnLFxuICAgICAgICAgICAgICAgIF9fdXNlQ29tcG9uZW50OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlbmRlckZvcm1hdHRlcihwcm9wcywgY29udGV4dCwgY29yZUJhc2UuTlVNQkVSX0ZPUk1BVF9PUFRJT05TX0tFWVMsICguLi5hcmdzKSA9PiBcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgaTE4bltOdW1iZXJQYXJ0c1N5bWJvbF0oLi4uYXJncykpO1xuICAgIH1cbn0pO1xuLyoqXG4gKiBleHBvcnQgdGhlIHB1YmxpYyB0eXBlIGZvciBoL3RzeCBpbmZlcmVuY2VcbiAqIGFsc28gdG8gYXZvaWQgaW5saW5lIGltcG9ydCgpIGluIGdlbmVyYXRlZCBkLnRzIGZpbGVzXG4gKi9cbi8qKlxuICogTnVtYmVyIEZvcm1hdCBDb21wb25lbnRcbiAqXG4gKiBAcmVtYXJrc1xuICogU2VlIHRoZSBmb2xsb3dpbmcgaXRlbXMgZm9yIHByb3BlcnR5IGFib3V0IGRldGFpbHNcbiAqXG4gKiBAVnVlSTE4blNlZSBbRm9ybWF0dGFibGVQcm9wc10oY29tcG9uZW50I2Zvcm1hdHRhYmxlcHJvcHMpXG4gKiBAVnVlSTE4blNlZSBbQmFzZUZvcm1hdFByb3BzXShjb21wb25lbnQjYmFzZWZvcm1hdHByb3BzKVxuICogQFZ1ZUkxOG5TZWUgW0N1c3RvbSBGb3JtYXR0aW5nXSguLi9ndWlkZS9lc3NlbnRpYWxzL251bWJlciNjdXN0b20tZm9ybWF0dGluZylcbiAqXG4gKiBAVnVlSTE4bkRhbmdlclxuICogTm90IHN1cHBvcnRlZCBJRSwgZHVlIHRvIG5vIHN1cHBvcnQgYEludGwuTnVtYmVyRm9ybWF0I2Zvcm1hdFRvUGFydHNgIGluIFtJRV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9OdW1iZXJGb3JtYXQvZm9ybWF0VG9QYXJ0cylcbiAqXG4gKiBJZiB5b3Ugd2FudCB0byB1c2UgaXQsIHlvdSBuZWVkIHRvIHVzZSBbcG9seWZpbGxdKGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtYXRqcy9mb3JtYXRqcy90cmVlL21haW4vcGFja2FnZXMvaW50bC1udW1iZXJmb3JtYXQpXG4gKlxuICogQFZ1ZUkxOG5Db21wb25lbnRcbiAqL1xuY29uc3QgTnVtYmVyRm9ybWF0ID0gTnVtYmVyRm9ybWF0SW1wbDtcbmNvbnN0IEkxOG5OID0gTnVtYmVyRm9ybWF0O1xuXG5jb25zdCBEYXRldGltZUZvcm1hdEltcGwgPSAvKiAjX19QVVJFX18qLyB2dWUuZGVmaW5lQ29tcG9uZW50KHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIG5hbWU6ICdpMThuLWQnLFxuICAgIHByb3BzOiBzaGFyZWQuYXNzaWduKHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHR5cGU6IFtOdW1iZXIsIERhdGVdLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICB0eXBlOiBbU3RyaW5nLCBPYmplY3RdXG4gICAgICAgIH1cbiAgICB9LCBiYXNlRm9ybWF0UHJvcHMpLFxuICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHNldHVwKHByb3BzLCBjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGkxOG4gPSBwcm9wcy5pMThuIHx8XG4gICAgICAgICAgICB1c2VJMThuKHtcbiAgICAgICAgICAgICAgICB1c2VTY29wZTogJ3BhcmVudCcsXG4gICAgICAgICAgICAgICAgX191c2VDb21wb25lbnQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVuZGVyRm9ybWF0dGVyKHByb3BzLCBjb250ZXh0LCBjb3JlQmFzZS5EQVRFVElNRV9GT1JNQVRfT1BUSU9OU19LRVlTLCAoLi4uYXJncykgPT4gXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGkxOG5bRGF0ZXRpbWVQYXJ0c1N5bWJvbF0oLi4uYXJncykpO1xuICAgIH1cbn0pO1xuLyoqXG4gKiBEYXRldGltZSBGb3JtYXQgQ29tcG9uZW50XG4gKlxuICogQHJlbWFya3NcbiAqIFNlZSB0aGUgZm9sbG93aW5nIGl0ZW1zIGZvciBwcm9wZXJ0eSBhYm91dCBkZXRhaWxzXG4gKlxuICogQFZ1ZUkxOG5TZWUgW0Zvcm1hdHRhYmxlUHJvcHNdKGNvbXBvbmVudCNmb3JtYXR0YWJsZXByb3BzKVxuICogQFZ1ZUkxOG5TZWUgW0Jhc2VGb3JtYXRQcm9wc10oY29tcG9uZW50I2Jhc2Vmb3JtYXRwcm9wcylcbiAqIEBWdWVJMThuU2VlIFtDdXN0b20gRm9ybWF0dGluZ10oLi4vZ3VpZGUvZXNzZW50aWFscy9kYXRldGltZSNjdXN0b20tZm9ybWF0dGluZylcbiAqXG4gKiBAVnVlSTE4bkRhbmdlclxuICogTm90IHN1cHBvcnRlZCBJRSwgZHVlIHRvIG5vIHN1cHBvcnQgYEludGwuRGF0ZVRpbWVGb3JtYXQjZm9ybWF0VG9QYXJ0c2AgaW4gW0lFXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL0RhdGVUaW1lRm9ybWF0L2Zvcm1hdFRvUGFydHMpXG4gKlxuICogSWYgeW91IHdhbnQgdG8gdXNlIGl0LCB5b3UgbmVlZCB0byB1c2UgW3BvbHlmaWxsXShodHRwczovL2dpdGh1Yi5jb20vZm9ybWF0anMvZm9ybWF0anMvdHJlZS9tYWluL3BhY2thZ2VzL2ludGwtZGF0ZXRpbWVmb3JtYXQpXG4gKlxuICogQFZ1ZUkxOG5Db21wb25lbnRcbiAqL1xuY29uc3QgRGF0ZXRpbWVGb3JtYXQgPSBEYXRldGltZUZvcm1hdEltcGw7XG5jb25zdCBJMThuRCA9IERhdGV0aW1lRm9ybWF0O1xuXG5mdW5jdGlvbiBnZXRDb21wb3NlciQxKGkxOG4sIGluc3RhbmNlKSB7XG4gICAgY29uc3QgaTE4bkludGVybmFsID0gaTE4bjtcbiAgICBpZiAoaTE4bi5tb2RlID09PSAnY29tcG9zaXRpb24nKSB7XG4gICAgICAgIHJldHVybiAoaTE4bkludGVybmFsLl9fZ2V0SW5zdGFuY2UoaW5zdGFuY2UpIHx8IGkxOG4uZ2xvYmFsKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHZ1ZUkxOG4gPSBpMThuSW50ZXJuYWwuX19nZXRJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgIHJldHVybiB2dWVJMThuICE9IG51bGxcbiAgICAgICAgICAgID8gdnVlSTE4bi5fX2NvbXBvc2VyXG4gICAgICAgICAgICA6IGkxOG4uZ2xvYmFsLl9fY29tcG9zZXI7XG4gICAgfVxufVxuZnVuY3Rpb24gdlREaXJlY3RpdmUoaTE4bikge1xuICAgIGNvbnN0IF9wcm9jZXNzID0gKGJpbmRpbmcpID0+IHtcbiAgICAgICAgY29uc3QgeyBpbnN0YW5jZSwgbW9kaWZpZXJzLCB2YWx1ZSB9ID0gYmluZGluZztcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghaW5zdGFuY2UgfHwgIWluc3RhbmNlLiQpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUkxOG5FcnJvcihJMThuRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX0VSUk9SKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb3NlciA9IGdldENvbXBvc2VyJDEoaTE4biwgaW5zdGFuY2UuJCk7XG4gICAgICAgIGlmIChtb2RpZmllcnMucHJlc2VydmUpIHtcbiAgICAgICAgICAgIHNoYXJlZC53YXJuKGdldFdhcm5NZXNzYWdlKEkxOG5XYXJuQ29kZXMuTk9UX1NVUFBPUlRFRF9QUkVTRVJWRSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gcGFyc2VWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBSZWZsZWN0LmFwcGx5KGNvbXBvc2VyLnQsIGNvbXBvc2VyLCBbLi4ubWFrZVBhcmFtcyhwYXJzZWRWYWx1ZSldKSxcbiAgICAgICAgICAgIGNvbXBvc2VyXG4gICAgICAgIF07XG4gICAgfTtcbiAgICBjb25zdCByZWdpc3RlciA9IChlbCwgYmluZGluZykgPT4ge1xuICAgICAgICBjb25zdCBbdGV4dENvbnRlbnQsIGNvbXBvc2VyXSA9IF9wcm9jZXNzKGJpbmRpbmcpO1xuICAgICAgICBpZiAoc2hhcmVkLmluQnJvd3NlciAmJiBpMThuLmdsb2JhbCA9PT0gY29tcG9zZXIpIHtcbiAgICAgICAgICAgIC8vIGdsb2JhbCBzY29wZSBvbmx5XG4gICAgICAgICAgICBlbC5fX2kxOG5XYXRjaGVyID0gdnVlLndhdGNoKGNvbXBvc2VyLmxvY2FsZSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGJpbmRpbmcuaW5zdGFuY2UgJiYgYmluZGluZy5pbnN0YW5jZS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsLl9fY29tcG9zZXIgPSBjb21wb3NlcjtcbiAgICAgICAgZWwudGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudDtcbiAgICB9O1xuICAgIGNvbnN0IHVucmVnaXN0ZXIgPSAoZWwpID0+IHtcbiAgICAgICAgaWYgKHNoYXJlZC5pbkJyb3dzZXIgJiYgZWwuX19pMThuV2F0Y2hlcikge1xuICAgICAgICAgICAgZWwuX19pMThuV2F0Y2hlcigpO1xuICAgICAgICAgICAgZWwuX19pMThuV2F0Y2hlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGRlbGV0ZSBlbC5fX2kxOG5XYXRjaGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbC5fX2NvbXBvc2VyKSB7XG4gICAgICAgICAgICBlbC5fX2NvbXBvc2VyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZGVsZXRlIGVsLl9fY29tcG9zZXI7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZSA9IChlbCwgeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgIGlmIChlbC5fX2NvbXBvc2VyKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb3NlciA9IGVsLl9fY29tcG9zZXI7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgZWwudGV4dENvbnRlbnQgPSBSZWZsZWN0LmFwcGx5KGNvbXBvc2VyLnQsIGNvbXBvc2VyLCBbXG4gICAgICAgICAgICAgICAgLi4ubWFrZVBhcmFtcyhwYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBnZXRTU1JQcm9wcyA9IChiaW5kaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IFt0ZXh0Q29udGVudF0gPSBfcHJvY2VzcyhiaW5kaW5nKTtcbiAgICAgICAgcmV0dXJuIHsgdGV4dENvbnRlbnQgfTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIGNyZWF0ZWQ6IHJlZ2lzdGVyLFxuICAgICAgICB1bm1vdW50ZWQ6IHVucmVnaXN0ZXIsXG4gICAgICAgIGJlZm9yZVVwZGF0ZTogdXBkYXRlLFxuICAgICAgICBnZXRTU1JQcm9wc1xuICAgIH07XG59XG5mdW5jdGlvbiBwYXJzZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHNoYXJlZC5pc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgcGF0aDogdmFsdWUgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2hhcmVkLmlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgIGlmICghKCdwYXRoJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUkxOG5FcnJvcihJMThuRXJyb3JDb2Rlcy5SRVFVSVJFRF9WQUxVRSwgJ3BhdGgnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBjcmVhdGVJMThuRXJyb3IoSTE4bkVycm9yQ29kZXMuSU5WQUxJRF9WQUxVRSk7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFrZVBhcmFtcyh2YWx1ZSkge1xuICAgIGNvbnN0IHsgcGF0aCwgbG9jYWxlLCBhcmdzLCBjaG9pY2UsIHBsdXJhbCB9ID0gdmFsdWU7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgIGNvbnN0IG5hbWVkID0gYXJncyB8fCB7fTtcbiAgICBpZiAoc2hhcmVkLmlzU3RyaW5nKGxvY2FsZSkpIHtcbiAgICAgICAgb3B0aW9ucy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgfVxuICAgIGlmIChzaGFyZWQuaXNOdW1iZXIoY2hvaWNlKSkge1xuICAgICAgICBvcHRpb25zLnBsdXJhbCA9IGNob2ljZTtcbiAgICB9XG4gICAgaWYgKHNoYXJlZC5pc051bWJlcihwbHVyYWwpKSB7XG4gICAgICAgIG9wdGlvbnMucGx1cmFsID0gcGx1cmFsO1xuICAgIH1cbiAgICByZXR1cm4gW3BhdGgsIG5hbWVkLCBvcHRpb25zXTtcbn1cblxuZnVuY3Rpb24gYXBwbHkoYXBwLCBpMThuLCAuLi5vcHRpb25zKSB7XG4gICAgY29uc3QgcGx1Z2luT3B0aW9ucyA9IHNoYXJlZC5pc1BsYWluT2JqZWN0KG9wdGlvbnNbMF0pXG4gICAgICAgID8gb3B0aW9uc1swXVxuICAgICAgICA6IHt9O1xuICAgIGNvbnN0IHVzZUkxOG5Db21wb25lbnROYW1lID0gISFwbHVnaW5PcHRpb25zLnVzZUkxOG5Db21wb25lbnROYW1lO1xuICAgIGNvbnN0IGdsb2JhbEluc3RhbGwgPSBzaGFyZWQuaXNCb29sZWFuKHBsdWdpbk9wdGlvbnMuZ2xvYmFsSW5zdGFsbClcbiAgICAgICAgPyBwbHVnaW5PcHRpb25zLmdsb2JhbEluc3RhbGxcbiAgICAgICAgOiB0cnVlO1xuICAgIGlmIChnbG9iYWxJbnN0YWxsICYmIHVzZUkxOG5Db21wb25lbnROYW1lKSB7XG4gICAgICAgIHNoYXJlZC53YXJuKGdldFdhcm5NZXNzYWdlKEkxOG5XYXJuQ29kZXMuQ09NUE9ORU5UX05BTUVfTEVHQUNZX0NPTVBBVElCTEUsIHtcbiAgICAgICAgICAgIG5hbWU6IFRyYW5zbGF0aW9uLm5hbWVcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBpZiAoZ2xvYmFsSW5zdGFsbCkge1xuICAgICAgICBbIXVzZUkxOG5Db21wb25lbnROYW1lID8gVHJhbnNsYXRpb24ubmFtZSA6ICdpMThuJywgJ0kxOG5UJ10uZm9yRWFjaChuYW1lID0+IGFwcC5jb21wb25lbnQobmFtZSwgVHJhbnNsYXRpb24pKTtcbiAgICAgICAgW051bWJlckZvcm1hdC5uYW1lLCAnSTE4bk4nXS5mb3JFYWNoKG5hbWUgPT4gYXBwLmNvbXBvbmVudChuYW1lLCBOdW1iZXJGb3JtYXQpKTtcbiAgICAgICAgW0RhdGV0aW1lRm9ybWF0Lm5hbWUsICdJMThuRCddLmZvckVhY2gobmFtZSA9PiBhcHAuY29tcG9uZW50KG5hbWUsIERhdGV0aW1lRm9ybWF0KSk7XG4gICAgfVxuICAgIC8vIGluc3RhbGwgZGlyZWN0aXZlXG4gICAge1xuICAgICAgICBhcHAuZGlyZWN0aXZlKCd0JywgdlREaXJlY3RpdmUoaTE4bikpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBTdXBwb3J0cyBjb21wYXRpYmlsaXR5IGZvciBsZWdhY3kgdnVlLWkxOG4gQVBJc1xuICogVGhpcyBtaXhpbiBpcyB1c2VkIHdoZW4gd2UgdXNlIHZ1ZS1pMThuQHY5Lnggb3IgbGF0ZXJcbiAqL1xuZnVuY3Rpb24gZGVmaW5lTWl4aW4odnVlaTE4biwgY29tcG9zZXIsIGkxOG4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHZ1ZS5nZXRDdXJyZW50SW5zdGFuY2UoKTtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRocm93IGNyZWF0ZUkxOG5FcnJvcihJMThuRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX0VSUk9SKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaTE4bikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnNJMThuID0gb3B0aW9ucy5pMThuO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLl9faTE4bikge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zSTE4bi5fX2kxOG4gPSBvcHRpb25zLl9faTE4bjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0aW9uc0kxOG4uX19yb290ID0gY29tcG9zZXI7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMgPT09IHRoaXMuJHJvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2Ugb3B0aW9uIGFuZCBndHRhY2ggZ2xvYmFsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGkxOG4gPSBtZXJnZVRvR2xvYmFsKHZ1ZWkxOG4sIG9wdGlvbnNJMThuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNJMThuLl9faW5qZWN0V2l0aE9wdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNJMThuLl9fZXh0ZW5kZXIgPSBpMThuLl9fdnVlSTE4bkV4dGVuZDtcbiAgICAgICAgICAgICAgICAgICAgLy8gYXR0dGFjaCBsb2NhbCBWdWVJMThuIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGkxOG4gPSBjcmVhdGVWdWVJMThuKG9wdGlvbnNJMThuKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXh0ZW5kIFZ1ZUkxOG4gaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX3Z1ZUkxOG4gPSB0aGlzLiRpMThuO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX3Z1ZUkxOG4uX19leHRlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3Z1ZUkxOG4uX19kaXNwb3NlciA9IF92dWVJMThuLl9fZXh0ZW5kZXIodGhpcy4kaTE4bik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLl9faTE4bikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzID09PSB0aGlzLiRyb290KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG1lcmdlIG9wdGlvbiBhbmQgZ3R0YWNoIGdsb2JhbFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRpMThuID0gbWVyZ2VUb0dsb2JhbCh2dWVpMThuLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGF0dHRhY2ggbG9jYWwgVnVlSTE4biBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRpMThuID0gY3JlYXRlVnVlSTE4bih7XG4gICAgICAgICAgICAgICAgICAgICAgICBfX2kxOG46IG9wdGlvbnMuX19pMThuLFxuICAgICAgICAgICAgICAgICAgICAgICAgX19pbmplY3RXaXRoT3B0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgX19leHRlbmRlcjogaTE4bi5fX3Z1ZUkxOG5FeHRlbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3Jvb3Q6IGNvbXBvc2VyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBleHRlbmQgVnVlSTE4biBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBfdnVlSTE4biA9IHRoaXMuJGkxOG47XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdnVlSTE4bi5fX2V4dGVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdnVlSTE4bi5fX2Rpc3Bvc2VyID0gX3Z1ZUkxOG4uX19leHRlbmRlcih0aGlzLiRpMThuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGF0dGFjaCBnbG9iYWwgVnVlSTE4biBpbnN0YW5jZVxuICAgICAgICAgICAgICAgIHRoaXMuJGkxOG4gPSB2dWVpMThuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuX19pMThuR2xvYmFsKSB7XG4gICAgICAgICAgICAgICAgYWRqdXN0STE4blJlc291cmNlcyhjb21wb3Nlciwgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkZWZpbmVzIHZ1ZS1pMThuIGxlZ2FjeSBBUElzXG4gICAgICAgICAgICB0aGlzLiR0ID0gKC4uLmFyZ3MpID0+IHRoaXMuJGkxOG4udCguLi5hcmdzKTtcbiAgICAgICAgICAgIHRoaXMuJHJ0ID0gKC4uLmFyZ3MpID0+IHRoaXMuJGkxOG4ucnQoLi4uYXJncyk7XG4gICAgICAgICAgICB0aGlzLiR0YyA9ICguLi5hcmdzKSA9PiB0aGlzLiRpMThuLnRjKC4uLmFyZ3MpO1xuICAgICAgICAgICAgdGhpcy4kdGUgPSAoa2V5LCBsb2NhbGUpID0+IHRoaXMuJGkxOG4udGUoa2V5LCBsb2NhbGUpO1xuICAgICAgICAgICAgdGhpcy4kZCA9ICguLi5hcmdzKSA9PiB0aGlzLiRpMThuLmQoLi4uYXJncyk7XG4gICAgICAgICAgICB0aGlzLiRuID0gKC4uLmFyZ3MpID0+IHRoaXMuJGkxOG4ubiguLi5hcmdzKTtcbiAgICAgICAgICAgIHRoaXMuJHRtID0gKGtleSkgPT4gdGhpcy4kaTE4bi50bShrZXkpO1xuICAgICAgICAgICAgaTE4bi5fX3NldEluc3RhbmNlKGluc3RhbmNlLCB0aGlzLiRpMThuKTtcbiAgICAgICAgfSxcbiAgICAgICAgbW91bnRlZCgpIHtcbiAgICAgICAgfSxcbiAgICAgICAgdW5tb3VudGVkKCkge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB2dWUuZ2V0Q3VycmVudEluc3RhbmNlKCk7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVJMThuRXJyb3IoSTE4bkVycm9yQ29kZXMuVU5FWFBFQ1RFRF9FUlJPUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBfdnVlSTE4biA9IHRoaXMuJGkxOG47XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kdDtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLiRydDtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLiR0YztcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLiR0ZTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLiRkO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuJG47XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kdG07XG4gICAgICAgICAgICBpZiAoX3Z1ZUkxOG4uX19kaXNwb3Nlcikge1xuICAgICAgICAgICAgICAgIF92dWVJMThuLl9fZGlzcG9zZXIoKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgX3Z1ZUkxOG4uX19kaXNwb3NlcjtcbiAgICAgICAgICAgICAgICBkZWxldGUgX3Z1ZUkxOG4uX19leHRlbmRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkxOG4uX19kZWxldGVJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kaTE4bjtcbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiBtZXJnZVRvR2xvYmFsKGcsIG9wdGlvbnMpIHtcbiAgICBnLmxvY2FsZSA9IG9wdGlvbnMubG9jYWxlIHx8IGcubG9jYWxlO1xuICAgIGcuZmFsbGJhY2tMb2NhbGUgPSBvcHRpb25zLmZhbGxiYWNrTG9jYWxlIHx8IGcuZmFsbGJhY2tMb2NhbGU7XG4gICAgZy5taXNzaW5nID0gb3B0aW9ucy5taXNzaW5nIHx8IGcubWlzc2luZztcbiAgICBnLnNpbGVudFRyYW5zbGF0aW9uV2FybiA9XG4gICAgICAgIG9wdGlvbnMuc2lsZW50VHJhbnNsYXRpb25XYXJuIHx8IGcuc2lsZW50RmFsbGJhY2tXYXJuO1xuICAgIGcuc2lsZW50RmFsbGJhY2tXYXJuID0gb3B0aW9ucy5zaWxlbnRGYWxsYmFja1dhcm4gfHwgZy5zaWxlbnRGYWxsYmFja1dhcm47XG4gICAgZy5mb3JtYXRGYWxsYmFja01lc3NhZ2VzID1cbiAgICAgICAgb3B0aW9ucy5mb3JtYXRGYWxsYmFja01lc3NhZ2VzIHx8IGcuZm9ybWF0RmFsbGJhY2tNZXNzYWdlcztcbiAgICBnLnBvc3RUcmFuc2xhdGlvbiA9IG9wdGlvbnMucG9zdFRyYW5zbGF0aW9uIHx8IGcucG9zdFRyYW5zbGF0aW9uO1xuICAgIGcud2Fybkh0bWxJbk1lc3NhZ2UgPSBvcHRpb25zLndhcm5IdG1sSW5NZXNzYWdlIHx8IGcud2Fybkh0bWxJbk1lc3NhZ2U7XG4gICAgZy5lc2NhcGVQYXJhbWV0ZXJIdG1sID0gb3B0aW9ucy5lc2NhcGVQYXJhbWV0ZXJIdG1sIHx8IGcuZXNjYXBlUGFyYW1ldGVySHRtbDtcbiAgICBnLnN5bmMgPSBvcHRpb25zLnN5bmMgfHwgZy5zeW5jO1xuICAgIGcuX19jb21wb3NlcltTZXRQbHVyYWxSdWxlc1N5bWJvbF0ob3B0aW9ucy5wbHVyYWxpemF0aW9uUnVsZXMgfHwgZy5wbHVyYWxpemF0aW9uUnVsZXMpO1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gZ2V0TG9jYWxlTWVzc2FnZXMoZy5sb2NhbGUsIHtcbiAgICAgICAgbWVzc2FnZXM6IG9wdGlvbnMubWVzc2FnZXMsXG4gICAgICAgIF9faTE4bjogb3B0aW9ucy5fX2kxOG5cbiAgICB9KTtcbiAgICBPYmplY3Qua2V5cyhtZXNzYWdlcykuZm9yRWFjaChsb2NhbGUgPT4gZy5tZXJnZUxvY2FsZU1lc3NhZ2UobG9jYWxlLCBtZXNzYWdlc1tsb2NhbGVdKSk7XG4gICAgaWYgKG9wdGlvbnMuZGF0ZXRpbWVGb3JtYXRzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMuZGF0ZXRpbWVGb3JtYXRzKS5mb3JFYWNoKGxvY2FsZSA9PiBnLm1lcmdlRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBvcHRpb25zLmRhdGV0aW1lRm9ybWF0c1tsb2NhbGVdKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm51bWJlckZvcm1hdHMpIHtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5udW1iZXJGb3JtYXRzKS5mb3JFYWNoKGxvY2FsZSA9PiBnLm1lcmdlTnVtYmVyRm9ybWF0KGxvY2FsZSwgb3B0aW9ucy5udW1iZXJGb3JtYXRzW2xvY2FsZV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGc7XG59XG5cbi8qKlxuICogSW5qZWN0aW9uIGtleSBmb3Ige0BsaW5rIHVzZUkxOG59XG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBnbG9iYWwgaW5qZWN0aW9uIGtleSBmb3IgSTE4biBpbnN0YW5jZXMgd2l0aCBgdXNlSTE4bmAuIHRoaXMgaW5qZWN0aW9uIGtleSBpcyB1c2VkIGluIFdlYiBDb21wb25lbnRzLlxuICogU3BlY2lmeSB0aGUgaTE4biBpbnN0YW5jZSBjcmVhdGVkIGJ5IHtAbGluayBjcmVhdGVJMThufSB0b2dldGhlciB3aXRoIGBwcm92aWRlYCBmdW5jdGlvbi5cbiAqXG4gKiBAVnVlSTE4bkdlbmVyYWxcbiAqL1xuY29uc3QgSTE4bkluamVjdGlvbktleSA9IFxuLyogI19fUFVSRV9fKi8gc2hhcmVkLm1ha2VTeW1ib2woJ2dsb2JhbC12dWUtaTE4bicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbmZ1bmN0aW9uIGNyZWF0ZUkxOG4ob3B0aW9ucyA9IHt9LCBWdWVJMThuTGVnYWN5KSB7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgY29uc3QgX19sZWdhY3lNb2RlID0gc2hhcmVkLmlzQm9vbGVhbihvcHRpb25zLmxlZ2FjeSlcbiAgICAgICAgICAgID8gb3B0aW9ucy5sZWdhY3lcbiAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBjb25zdCBfX2dsb2JhbEluamVjdGlvbiA9IHNoYXJlZC5pc0Jvb2xlYW4ob3B0aW9ucy5nbG9iYWxJbmplY3Rpb24pXG4gICAgICAgID8gb3B0aW9ucy5nbG9iYWxJbmplY3Rpb25cbiAgICAgICAgOiB0cnVlO1xuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIGNvbnN0IF9fYWxsb3dDb21wb3NpdGlvbiA9IF9fbGVnYWN5TW9kZVxuICAgICAgICAgICAgPyAhIW9wdGlvbnMuYWxsb3dDb21wb3NpdGlvblxuICAgICAgICAgICAgOiB0cnVlO1xuICAgIGNvbnN0IF9faW5zdGFuY2VzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IFtnbG9iYWxTY29wZSwgX19nbG9iYWxdID0gY3JlYXRlR2xvYmFsKG9wdGlvbnMsIF9fbGVnYWN5TW9kZSk7XG4gICAgY29uc3Qgc3ltYm9sID0gLyogI19fUFVSRV9fKi8gc2hhcmVkLm1ha2VTeW1ib2woJ3Z1ZS1pMThuJyApO1xuICAgIHtcbiAgICAgICAgaWYgKF9fbGVnYWN5TW9kZSAmJiBfX2FsbG93Q29tcG9zaXRpb24gJiYgIWZhbHNlKSB7XG4gICAgICAgICAgICBzaGFyZWQud2FybihnZXRXYXJuTWVzc2FnZShJMThuV2FybkNvZGVzLk5PVElDRV9EUk9QX0FMTE9XX0NPTVBPU0lUSU9OKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gX19nZXRJbnN0YW5jZShjb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIF9faW5zdGFuY2VzLmdldChjb21wb25lbnQpIHx8IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9fc2V0SW5zdGFuY2UoY29tcG9uZW50LCBpbnN0YW5jZSkge1xuICAgICAgICBfX2luc3RhbmNlcy5zZXQoY29tcG9uZW50LCBpbnN0YW5jZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9fZGVsZXRlSW5zdGFuY2UoY29tcG9uZW50KSB7XG4gICAgICAgIF9faW5zdGFuY2VzLmRlbGV0ZShjb21wb25lbnQpO1xuICAgIH1cbiAgICB7XG4gICAgICAgIGNvbnN0IGkxOG4gPSB7XG4gICAgICAgICAgICAvLyBtb2RlXG4gICAgICAgICAgICBnZXQgbW9kZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19sZWdhY3lNb2RlXG4gICAgICAgICAgICAgICAgICAgID8gJ2xlZ2FjeSdcbiAgICAgICAgICAgICAgICAgICAgOiAnY29tcG9zaXRpb24nO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGFsbG93Q29tcG9zaXRpb25cbiAgICAgICAgICAgIGdldCBhbGxvd0NvbXBvc2l0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfX2FsbG93Q29tcG9zaXRpb247XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gaW5zdGFsbCBwbHVnaW5cbiAgICAgICAgICAgIGFzeW5jIGluc3RhbGwoYXBwLCAuLi5vcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0dXAgZ2xvYmFsIHByb3ZpZGVyXG4gICAgICAgICAgICAgICAgYXBwLl9fVlVFX0kxOE5fU1lNQk9MX18gPSBzeW1ib2w7XG4gICAgICAgICAgICAgICAgYXBwLnByb3ZpZGUoYXBwLl9fVlVFX0kxOE5fU1lNQk9MX18sIGkxOG4pO1xuICAgICAgICAgICAgICAgIC8vIHNldCBjb21wb3NlciAmIHZ1ZWkxOG4gZXh0ZW5kIGhvb2sgb3B0aW9ucyBmcm9tIHBsdWdpbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgaWYgKHNoYXJlZC5pc1BsYWluT2JqZWN0KG9wdGlvbnNbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zWzBdO1xuICAgICAgICAgICAgICAgICAgICBpMThuLl9fY29tcG9zZXJFeHRlbmQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5fX2NvbXBvc2VyRXh0ZW5kO1xuICAgICAgICAgICAgICAgICAgICBpMThuLl9fdnVlSTE4bkV4dGVuZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzLl9fdnVlSTE4bkV4dGVuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZ2xvYmFsIG1ldGhvZCBhbmQgcHJvcGVydGllcyBpbmplY3Rpb24gZm9yIENvbXBvc2l0aW9uIEFQSVxuICAgICAgICAgICAgICAgIGxldCBnbG9iYWxSZWxlYXNlSGFuZGxlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKCFfX2xlZ2FjeU1vZGUgJiYgX19nbG9iYWxJbmplY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsUmVsZWFzZUhhbmRsZXIgPSBpbmplY3RHbG9iYWxGaWVsZHMoYXBwLCBpMThuLmdsb2JhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGluc3RhbGwgYnVpbHQtaW4gY29tcG9uZW50cyBhbmQgZGlyZWN0aXZlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhcHBseShhcHAsIGkxOG4sIC4uLm9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzZXR1cCBtaXhpbiBmb3IgTGVnYWN5IEFQSVxuICAgICAgICAgICAgICAgIGlmIChfX2xlZ2FjeU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwLm1peGluKGRlZmluZU1peGluKF9fZ2xvYmFsLCBfX2dsb2JhbC5fX2NvbXBvc2VyLCBpMThuKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHJlbGVhc2UgZ2xvYmFsIHNjb3BlXG4gICAgICAgICAgICAgICAgY29uc3QgdW5tb3VudEFwcCA9IGFwcC51bm1vdW50O1xuICAgICAgICAgICAgICAgIGFwcC51bm1vdW50ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWxSZWxlYXNlSGFuZGxlciAmJiBnbG9iYWxSZWxlYXNlSGFuZGxlcigpO1xuICAgICAgICAgICAgICAgICAgICBpMThuLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdW5tb3VudEFwcCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZ2xvYmFsIGFjY2Vzc29yXG4gICAgICAgICAgICBnZXQgZ2xvYmFsKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfX2dsb2JhbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkaXNwb3NlKCkge1xuICAgICAgICAgICAgICAgIGdsb2JhbFNjb3BlLnN0b3AoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBAaW50ZXJuYWxcbiAgICAgICAgICAgIF9faW5zdGFuY2VzLFxuICAgICAgICAgICAgLy8gQGludGVybmFsXG4gICAgICAgICAgICBfX2dldEluc3RhbmNlLFxuICAgICAgICAgICAgLy8gQGludGVybmFsXG4gICAgICAgICAgICBfX3NldEluc3RhbmNlLFxuICAgICAgICAgICAgLy8gQGludGVybmFsXG4gICAgICAgICAgICBfX2RlbGV0ZUluc3RhbmNlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBpMThuO1xuICAgIH1cbn1cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXG5mdW5jdGlvbiB1c2VJMThuKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gdnVlLmdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IGNyZWF0ZUkxOG5FcnJvcihJMThuRXJyb3JDb2Rlcy5NVVNUX0JFX0NBTExfU0VUVVBfVE9QKTtcbiAgICB9XG4gICAgaWYgKCFpbnN0YW5jZS5pc0NFICYmXG4gICAgICAgIGluc3RhbmNlLmFwcENvbnRleHQuYXBwICE9IG51bGwgJiZcbiAgICAgICAgIWluc3RhbmNlLmFwcENvbnRleHQuYXBwLl9fVlVFX0kxOE5fU1lNQk9MX18pIHtcbiAgICAgICAgdGhyb3cgY3JlYXRlSTE4bkVycm9yKEkxOG5FcnJvckNvZGVzLk5PVF9JTlNUQUxMRUQpO1xuICAgIH1cbiAgICBjb25zdCBpMThuID0gZ2V0STE4bkluc3RhbmNlKGluc3RhbmNlKTtcbiAgICBjb25zdCBnbCA9IGdldEdsb2JhbENvbXBvc2VyKGkxOG4pO1xuICAgIGNvbnN0IGNvbXBvbmVudE9wdGlvbnMgPSBnZXRDb21wb25lbnRPcHRpb25zKGluc3RhbmNlKTtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKG9wdGlvbnMsIGNvbXBvbmVudE9wdGlvbnMpO1xuICAgIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgaWYgKGkxOG4ubW9kZSA9PT0gJ2xlZ2FjeScgJiYgIW9wdGlvbnMuX191c2VDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGlmICghaTE4bi5hbGxvd0NvbXBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlSTE4bkVycm9yKEkxOG5FcnJvckNvZGVzLk5PVF9BVkFJTEFCTEVfSU5fTEVHQUNZX01PREUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVzZUkxOG5Gb3JMZWdhY3koaW5zdGFuY2UsIHNjb3BlLCBnbCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNjb3BlID09PSAnZ2xvYmFsJykge1xuICAgICAgICBhZGp1c3RJMThuUmVzb3VyY2VzKGdsLCBvcHRpb25zLCBjb21wb25lbnRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGdsO1xuICAgIH1cbiAgICBpZiAoc2NvcGUgPT09ICdwYXJlbnQnKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGxldCBjb21wb3NlciA9IGdldENvbXBvc2VyKGkxOG4sIGluc3RhbmNlLCBvcHRpb25zLl9fdXNlQ29tcG9uZW50KTtcbiAgICAgICAgaWYgKGNvbXBvc2VyID09IG51bGwpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaGFyZWQud2FybihnZXRXYXJuTWVzc2FnZShJMThuV2FybkNvZGVzLk5PVF9GT1VORF9QQVJFTlRfU0NPUEUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBvc2VyID0gZ2w7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvc2VyO1xuICAgIH1cbiAgICBjb25zdCBpMThuSW50ZXJuYWwgPSBpMThuO1xuICAgIGxldCBjb21wb3NlciA9IGkxOG5JbnRlcm5hbC5fX2dldEluc3RhbmNlKGluc3RhbmNlKTtcbiAgICBpZiAoY29tcG9zZXIgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb21wb3Nlck9wdGlvbnMgPSBzaGFyZWQuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCdfX2kxOG4nIGluIGNvbXBvbmVudE9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbXBvc2VyT3B0aW9ucy5fX2kxOG4gPSBjb21wb25lbnRPcHRpb25zLl9faTE4bjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2wpIHtcbiAgICAgICAgICAgIGNvbXBvc2VyT3B0aW9ucy5fX3Jvb3QgPSBnbDtcbiAgICAgICAgfVxuICAgICAgICBjb21wb3NlciA9IGNyZWF0ZUNvbXBvc2VyKGNvbXBvc2VyT3B0aW9ucyk7XG4gICAgICAgIGlmIChpMThuSW50ZXJuYWwuX19jb21wb3NlckV4dGVuZCkge1xuICAgICAgICAgICAgY29tcG9zZXJbRGlzcG9zZVN5bWJvbF0gPVxuICAgICAgICAgICAgICAgIGkxOG5JbnRlcm5hbC5fX2NvbXBvc2VyRXh0ZW5kKGNvbXBvc2VyKTtcbiAgICAgICAgfVxuICAgICAgICBzZXR1cExpZmVDeWNsZShpMThuSW50ZXJuYWwsIGluc3RhbmNlLCBjb21wb3Nlcik7XG4gICAgICAgIGkxOG5JbnRlcm5hbC5fX3NldEluc3RhbmNlKGluc3RhbmNlLCBjb21wb3Nlcik7XG4gICAgfVxuICAgIHJldHVybiBjb21wb3Nlcjtcbn1cbi8qKlxuICogQ2FzdCB0byBWdWVJMThuIGxlZ2FjeSBjb21wYXRpYmxlIHR5cGVcbiAqXG4gKiBAcmVtYXJrc1xuICogVGhpcyBBUEkgaXMgcHJvdmlkZWQgb25seSB3aXRoIFt2dWUtaTE4bi1icmlkZ2VdKGh0dHBzOi8vdnVlLWkxOG4uaW50bGlmeS5kZXYvZ3VpZGUvbWlncmF0aW9uL3dheXMuaHRtbCN3aGF0LWlzLXZ1ZS1pMThuLWJyaWRnZSkuXG4gKlxuICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBjb252ZXJ0IGFuIHtAbGluayBJMThufSBpbnN0YW5jZSBjcmVhdGVkIHdpdGgge0BsaW5rIGNyZWF0ZUkxOG4gfCBjcmVhdGVJMThuKGxlZ2FjeTogdHJ1ZSl9IGludG8gYSBgdnVlLWkxOG5AdjgueGAgY29tcGF0aWJsZSBpbnN0YW5jZSBvZiBgbmV3IFZ1ZUkxOG5gIGluIGEgVHlwZVNjcmlwdCBlbnZpcm9ubWVudC5cbiAqXG4gKiBAcGFyYW0gaTE4biAtIEFuIGluc3RhbmNlIG9mIHtAbGluayBJMThufVxuICogQHJldHVybnMgQSBpMThuIGluc3RhbmNlIHdoaWNoIGlzIGNhc3RlZCB0byB7QGxpbmsgVnVlSTE4bn0gdHlwZVxuICpcbiAqIEBWdWVJMThuVGlwXG4gKiA6bmV3OiBwcm92aWRlZCBieSAqKnZ1ZS1pMThuLWJyaWRnZSBvbmx5KipcbiAqXG4gKiBAVnVlSTE4bkdlbmVyYWxcbiAqL1xuLyogI19fTk9fU0lERV9FRkZFQ1RTX18gKi9cbmNvbnN0IGNhc3RUb1Z1ZUkxOG4gPSAoaTE4blxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbikgPT4ge1xuICAgIGlmICghKF9fVlVFX0kxOE5fQlJJREdFX18gaW4gaTE4bikpIHtcbiAgICAgICAgdGhyb3cgY3JlYXRlSTE4bkVycm9yKEkxOG5FcnJvckNvZGVzLk5PVF9DT01QQVRJQkxFX0xFR0FDWV9WVUVfSTE4Tik7XG4gICAgfVxuICAgIHJldHVybiBpMThuO1xufTtcbmZ1bmN0aW9uIGNyZWF0ZUdsb2JhbChvcHRpb25zLCBsZWdhY3lNb2RlLCBWdWVJMThuTGVnYWN5IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuKSB7XG4gICAgY29uc3Qgc2NvcGUgPSB2dWUuZWZmZWN0U2NvcGUoKTtcbiAgICB7XG4gICAgICAgIGNvbnN0IG9iaiA9IGxlZ2FjeU1vZGVcbiAgICAgICAgICAgID8gc2NvcGUucnVuKCgpID0+IGNyZWF0ZVZ1ZUkxOG4ob3B0aW9ucykpXG4gICAgICAgICAgICA6IHNjb3BlLnJ1bigoKSA9PiBjcmVhdGVDb21wb3NlcihvcHRpb25zKSk7XG4gICAgICAgIGlmIChvYmogPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlSTE4bkVycm9yKEkxOG5FcnJvckNvZGVzLlVORVhQRUNURURfRVJST1IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbc2NvcGUsIG9ial07XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0STE4bkluc3RhbmNlKGluc3RhbmNlKSB7XG4gICAge1xuICAgICAgICBjb25zdCBpMThuID0gdnVlLmluamVjdCghaW5zdGFuY2UuaXNDRVxuICAgICAgICAgICAgPyBpbnN0YW5jZS5hcHBDb250ZXh0LmFwcC5fX1ZVRV9JMThOX1NZTUJPTF9fXG4gICAgICAgICAgICA6IEkxOG5JbmplY3Rpb25LZXkpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFpMThuKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVJMThuRXJyb3IoIWluc3RhbmNlLmlzQ0VcbiAgICAgICAgICAgICAgICA/IEkxOG5FcnJvckNvZGVzLlVORVhQRUNURURfRVJST1JcbiAgICAgICAgICAgICAgICA6IEkxOG5FcnJvckNvZGVzLk5PVF9JTlNUQUxMRURfV0lUSF9QUk9WSURFKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaTE4bjtcbiAgICB9XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gZ2V0U2NvcGUob3B0aW9ucywgY29tcG9uZW50T3B0aW9ucykge1xuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIHJldHVybiBzaGFyZWQuaXNFbXB0eU9iamVjdChvcHRpb25zKVxuICAgICAgICA/ICgnX19pMThuJyBpbiBjb21wb25lbnRPcHRpb25zKVxuICAgICAgICAgICAgPyAnbG9jYWwnXG4gICAgICAgICAgICA6ICdnbG9iYWwnXG4gICAgICAgIDogIW9wdGlvbnMudXNlU2NvcGVcbiAgICAgICAgICAgID8gJ2xvY2FsJ1xuICAgICAgICAgICAgOiBvcHRpb25zLnVzZVNjb3BlO1xufVxuZnVuY3Rpb24gZ2V0R2xvYmFsQ29tcG9zZXIoaTE4bikge1xuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIHJldHVybiBpMThuLm1vZGUgPT09ICdjb21wb3NpdGlvbidcbiAgICAgICAgICAgID8gaTE4bi5nbG9iYWxcbiAgICAgICAgICAgIDogaTE4bi5nbG9iYWwuX19jb21wb3NlclxuICAgICAgICA7XG59XG5mdW5jdGlvbiBnZXRDb21wb3NlcihpMThuLCB0YXJnZXQsIHVzZUNvbXBvbmVudCA9IGZhbHNlKSB7XG4gICAgbGV0IGNvbXBvc2VyID0gbnVsbDtcbiAgICBjb25zdCByb290ID0gdGFyZ2V0LnJvb3Q7XG4gICAgbGV0IGN1cnJlbnQgPSBnZXRQYXJlbnRDb21wb25lbnRJbnN0YW5jZSh0YXJnZXQsIHVzZUNvbXBvbmVudCk7XG4gICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBpMThuSW50ZXJuYWwgPSBpMThuO1xuICAgICAgICBpZiAoaTE4bi5tb2RlID09PSAnY29tcG9zaXRpb24nKSB7XG4gICAgICAgICAgICBjb21wb3NlciA9IGkxOG5JbnRlcm5hbC5fX2dldEluc3RhbmNlKGN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZ1ZUkxOG4gPSBpMThuSW50ZXJuYWwuX19nZXRJbnN0YW5jZShjdXJyZW50KTtcbiAgICAgICAgICAgICAgICBpZiAodnVlSTE4biAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2VyID0gdnVlSTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgLl9fY29tcG9zZXI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2VDb21wb25lbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhY29tcG9zZXJbSW5lamN0V2l0aE9wdGlvblN5bWJvbF0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb3NlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAocm9vdCA9PT0gY3VycmVudCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gY29tcG9zZXI7XG59XG5mdW5jdGlvbiBnZXRQYXJlbnRDb21wb25lbnRJbnN0YW5jZSh0YXJnZXQsIHVzZUNvbXBvbmVudCA9IGZhbHNlKSB7XG4gICAgaWYgKHRhcmdldCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB7XG4gICAgICAgIC8vIGlmIGB1c2VDb21wb25lbnQ6IHRydWVgIHdpbGwgYmUgc3BlY2lmaWVkLCB3ZSBnZXQgbGV4aWNhbCBzY29wZSBvd25lciBpbnN0YW5jZSBmb3IgdXNlLWNhc2Ugc2xvdHNcbiAgICAgICAgcmV0dXJuICF1c2VDb21wb25lbnRcbiAgICAgICAgICAgID8gdGFyZ2V0LnBhcmVudFxuICAgICAgICAgICAgOiB0YXJnZXQudm5vZGUuY3R4IHx8IHRhcmdldC5wYXJlbnQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIH1cbn1cbmZ1bmN0aW9uIHNldHVwTGlmZUN5Y2xlKGkxOG4sIHRhcmdldCwgY29tcG9zZXIpIHtcbiAgICB7XG4gICAgICAgIHZ1ZS5vbk1vdW50ZWQoKCkgPT4ge1xuICAgICAgICB9LCB0YXJnZXQpO1xuICAgICAgICB2dWUub25Vbm1vdW50ZWQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGNvbnN0IF9jb21wb3NlciA9IGNvbXBvc2VyO1xuICAgICAgICAgICAgaTE4bi5fX2RlbGV0ZUluc3RhbmNlKHRhcmdldCk7XG4gICAgICAgICAgICAvLyBkaXNwb3NlIGV4dGVuZGVkIHJlc291cmNlc1xuICAgICAgICAgICAgY29uc3QgZGlzcG9zZSA9IF9jb21wb3NlcltEaXNwb3NlU3ltYm9sXTtcbiAgICAgICAgICAgIGlmIChkaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBfY29tcG9zZXJbRGlzcG9zZVN5bWJvbF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRhcmdldCk7XG4gICAgfVxufVxuZnVuY3Rpb24gdXNlSTE4bkZvckxlZ2FjeShpbnN0YW5jZSwgc2NvcGUsIHJvb3QsIG9wdGlvbnMgPSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbikge1xuICAgIGNvbnN0IGlzTG9jYWxTY29wZSA9IHNjb3BlID09PSAnbG9jYWwnO1xuICAgIGNvbnN0IF9jb21wb3NlciA9IHZ1ZS5zaGFsbG93UmVmKG51bGwpO1xuICAgIGlmIChpc0xvY2FsU2NvcGUgJiZcbiAgICAgICAgaW5zdGFuY2UucHJveHkgJiZcbiAgICAgICAgIShpbnN0YW5jZS5wcm94eS4kb3B0aW9ucy5pMThuIHx8IGluc3RhbmNlLnByb3h5LiRvcHRpb25zLl9faTE4bikpIHtcbiAgICAgICAgdGhyb3cgY3JlYXRlSTE4bkVycm9yKEkxOG5FcnJvckNvZGVzLk1VU1RfREVGSU5FX0kxOE5fT1BUSU9OX0lOX0FMTE9XX0NPTVBPU0lUSU9OKTtcbiAgICB9XG4gICAgY29uc3QgX2luaGVyaXRMb2NhbGUgPSBzaGFyZWQuaXNCb29sZWFuKG9wdGlvbnMuaW5oZXJpdExvY2FsZSlcbiAgICAgICAgPyBvcHRpb25zLmluaGVyaXRMb2NhbGVcbiAgICAgICAgOiAhc2hhcmVkLmlzU3RyaW5nKG9wdGlvbnMubG9jYWxlKTtcbiAgICBjb25zdCBfbG9jYWxlID0gdnVlLnJlZihcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAhaXNMb2NhbFNjb3BlIHx8IF9pbmhlcml0TG9jYWxlXG4gICAgICAgID8gcm9vdC5sb2NhbGUudmFsdWVcbiAgICAgICAgOiBzaGFyZWQuaXNTdHJpbmcob3B0aW9ucy5sb2NhbGUpXG4gICAgICAgICAgICA/IG9wdGlvbnMubG9jYWxlXG4gICAgICAgICAgICA6IGNvcmVCYXNlLkRFRkFVTFRfTE9DQUxFKTtcbiAgICBjb25zdCBfZmFsbGJhY2tMb2NhbGUgPSB2dWUucmVmKFxuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICFpc0xvY2FsU2NvcGUgfHwgX2luaGVyaXRMb2NhbGVcbiAgICAgICAgPyByb290LmZhbGxiYWNrTG9jYWxlLnZhbHVlXG4gICAgICAgIDogc2hhcmVkLmlzU3RyaW5nKG9wdGlvbnMuZmFsbGJhY2tMb2NhbGUpIHx8XG4gICAgICAgICAgICBzaGFyZWQuaXNBcnJheShvcHRpb25zLmZhbGxiYWNrTG9jYWxlKSB8fFxuICAgICAgICAgICAgc2hhcmVkLmlzUGxhaW5PYmplY3Qob3B0aW9ucy5mYWxsYmFja0xvY2FsZSkgfHxcbiAgICAgICAgICAgIG9wdGlvbnMuZmFsbGJhY2tMb2NhbGUgPT09IGZhbHNlXG4gICAgICAgICAgICA/IG9wdGlvbnMuZmFsbGJhY2tMb2NhbGVcbiAgICAgICAgICAgIDogX2xvY2FsZS52YWx1ZSk7XG4gICAgY29uc3QgX21lc3NhZ2VzID0gdnVlLnJlZihnZXRMb2NhbGVNZXNzYWdlcyhfbG9jYWxlLnZhbHVlLCBvcHRpb25zKSk7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgY29uc3QgX2RhdGV0aW1lRm9ybWF0cyA9IHZ1ZS5yZWYoc2hhcmVkLmlzUGxhaW5PYmplY3Qob3B0aW9ucy5kYXRldGltZUZvcm1hdHMpXG4gICAgICAgID8gb3B0aW9ucy5kYXRldGltZUZvcm1hdHNcbiAgICAgICAgOiB7IFtfbG9jYWxlLnZhbHVlXToge30gfSk7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgY29uc3QgX251bWJlckZvcm1hdHMgPSB2dWUucmVmKHNoYXJlZC5pc1BsYWluT2JqZWN0KG9wdGlvbnMubnVtYmVyRm9ybWF0cylcbiAgICAgICAgPyBvcHRpb25zLm51bWJlckZvcm1hdHNcbiAgICAgICAgOiB7IFtfbG9jYWxlLnZhbHVlXToge30gfSk7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgY29uc3QgX21pc3NpbmdXYXJuID0gaXNMb2NhbFNjb3BlXG4gICAgICAgID8gcm9vdC5taXNzaW5nV2FyblxuICAgICAgICA6IHNoYXJlZC5pc0Jvb2xlYW4ob3B0aW9ucy5taXNzaW5nV2FybikgfHwgc2hhcmVkLmlzUmVnRXhwKG9wdGlvbnMubWlzc2luZ1dhcm4pXG4gICAgICAgICAgICA/IG9wdGlvbnMubWlzc2luZ1dhcm5cbiAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBjb25zdCBfZmFsbGJhY2tXYXJuID0gaXNMb2NhbFNjb3BlXG4gICAgICAgID8gcm9vdC5mYWxsYmFja1dhcm5cbiAgICAgICAgOiBzaGFyZWQuaXNCb29sZWFuKG9wdGlvbnMuZmFsbGJhY2tXYXJuKSB8fCBzaGFyZWQuaXNSZWdFeHAob3B0aW9ucy5mYWxsYmFja1dhcm4pXG4gICAgICAgICAgICA/IG9wdGlvbnMuZmFsbGJhY2tXYXJuXG4gICAgICAgICAgICA6IHRydWU7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgY29uc3QgX2ZhbGxiYWNrUm9vdCA9IGlzTG9jYWxTY29wZVxuICAgICAgICA/IHJvb3QuZmFsbGJhY2tSb290XG4gICAgICAgIDogc2hhcmVkLmlzQm9vbGVhbihvcHRpb25zLmZhbGxiYWNrUm9vdClcbiAgICAgICAgICAgID8gb3B0aW9ucy5mYWxsYmFja1Jvb3RcbiAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAvLyBjb25maWd1cmUgZmFsbCBiYWNrIHRvIHJvb3RcbiAgICBjb25zdCBfZmFsbGJhY2tGb3JtYXQgPSAhIW9wdGlvbnMuZmFsbGJhY2tGb3JtYXQ7XG4gICAgLy8gcnVudGltZSBtaXNzaW5nXG4gICAgY29uc3QgX21pc3NpbmcgPSBzaGFyZWQuaXNGdW5jdGlvbihvcHRpb25zLm1pc3NpbmcpID8gb3B0aW9ucy5taXNzaW5nIDogbnVsbDtcbiAgICAvLyBwb3N0VHJhbnNsYXRpb24gaGFuZGxlclxuICAgIGNvbnN0IF9wb3N0VHJhbnNsYXRpb24gPSBzaGFyZWQuaXNGdW5jdGlvbihvcHRpb25zLnBvc3RUcmFuc2xhdGlvbilcbiAgICAgICAgPyBvcHRpb25zLnBvc3RUcmFuc2xhdGlvblxuICAgICAgICA6IG51bGw7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgY29uc3QgX3dhcm5IdG1sTWVzc2FnZSA9IGlzTG9jYWxTY29wZVxuICAgICAgICA/IHJvb3Qud2Fybkh0bWxNZXNzYWdlXG4gICAgICAgIDogc2hhcmVkLmlzQm9vbGVhbihvcHRpb25zLndhcm5IdG1sTWVzc2FnZSlcbiAgICAgICAgICAgID8gb3B0aW9ucy53YXJuSHRtbE1lc3NhZ2VcbiAgICAgICAgICAgIDogdHJ1ZTtcbiAgICBjb25zdCBfZXNjYXBlUGFyYW1ldGVyID0gISFvcHRpb25zLmVzY2FwZVBhcmFtZXRlcjtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBjb25zdCBfbW9kaWZpZXJzID0gaXNMb2NhbFNjb3BlXG4gICAgICAgID8gcm9vdC5tb2RpZmllcnNcbiAgICAgICAgOiBzaGFyZWQuaXNQbGFpbk9iamVjdChvcHRpb25zLm1vZGlmaWVycylcbiAgICAgICAgICAgID8gb3B0aW9ucy5tb2RpZmllcnNcbiAgICAgICAgICAgIDoge307XG4gICAgLy8gcGx1cmFsUnVsZXNcbiAgICBjb25zdCBfcGx1cmFsUnVsZXMgPSBvcHRpb25zLnBsdXJhbFJ1bGVzIHx8IChpc0xvY2FsU2NvcGUgJiYgcm9vdC5wbHVyYWxSdWxlcyk7XG4gICAgLy8gdHJhY2sgcmVhY3Rpdml0eVxuICAgIGZ1bmN0aW9uIHRyYWNrUmVhY3Rpdml0eVZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIF9sb2NhbGUudmFsdWUsXG4gICAgICAgICAgICBfZmFsbGJhY2tMb2NhbGUudmFsdWUsXG4gICAgICAgICAgICBfbWVzc2FnZXMudmFsdWUsXG4gICAgICAgICAgICBfZGF0ZXRpbWVGb3JtYXRzLnZhbHVlLFxuICAgICAgICAgICAgX251bWJlckZvcm1hdHMudmFsdWVcbiAgICAgICAgXTtcbiAgICB9XG4gICAgLy8gbG9jYWxlXG4gICAgY29uc3QgbG9jYWxlID0gdnVlLmNvbXB1dGVkKHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gX2NvbXBvc2VyLnZhbHVlID8gX2NvbXBvc2VyLnZhbHVlLmxvY2FsZS52YWx1ZSA6IF9sb2NhbGUudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogdmFsID0+IHtcbiAgICAgICAgICAgIGlmIChfY29tcG9zZXIudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfY29tcG9zZXIudmFsdWUubG9jYWxlLnZhbHVlID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2xvY2FsZS52YWx1ZSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIGZhbGxiYWNrTG9jYWxlXG4gICAgY29uc3QgZmFsbGJhY2tMb2NhbGUgPSB2dWUuY29tcHV0ZWQoe1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBfY29tcG9zZXIudmFsdWVcbiAgICAgICAgICAgICAgICA/IF9jb21wb3Nlci52YWx1ZS5mYWxsYmFja0xvY2FsZS52YWx1ZVxuICAgICAgICAgICAgICAgIDogX2ZhbGxiYWNrTG9jYWxlLnZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHZhbCA9PiB7XG4gICAgICAgICAgICBpZiAoX2NvbXBvc2VyLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX2NvbXBvc2VyLnZhbHVlLmZhbGxiYWNrTG9jYWxlLnZhbHVlID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2ZhbGxiYWNrTG9jYWxlLnZhbHVlID0gdmFsO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gbWVzc2FnZXNcbiAgICBjb25zdCBtZXNzYWdlcyA9IHZ1ZS5jb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGlmIChfY29tcG9zZXIudmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICByZXR1cm4gX2NvbXBvc2VyLnZhbHVlLm1lc3NhZ2VzLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIHJldHVybiBfbWVzc2FnZXMudmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBkYXRldGltZUZvcm1hdHMgPSB2dWUuY29tcHV0ZWQoKCkgPT4gX2RhdGV0aW1lRm9ybWF0cy52YWx1ZSk7XG4gICAgY29uc3QgbnVtYmVyRm9ybWF0cyA9IHZ1ZS5jb21wdXRlZCgoKSA9PiBfbnVtYmVyRm9ybWF0cy52YWx1ZSk7XG4gICAgZnVuY3Rpb24gZ2V0UG9zdFRyYW5zbGF0aW9uSGFuZGxlcigpIHtcbiAgICAgICAgcmV0dXJuIF9jb21wb3Nlci52YWx1ZVxuICAgICAgICAgICAgPyBfY29tcG9zZXIudmFsdWUuZ2V0UG9zdFRyYW5zbGF0aW9uSGFuZGxlcigpXG4gICAgICAgICAgICA6IF9wb3N0VHJhbnNsYXRpb247XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFBvc3RUcmFuc2xhdGlvbkhhbmRsZXIoaGFuZGxlcikge1xuICAgICAgICBpZiAoX2NvbXBvc2VyLnZhbHVlKSB7XG4gICAgICAgICAgICBfY29tcG9zZXIudmFsdWUuc2V0UG9zdFRyYW5zbGF0aW9uSGFuZGxlcihoYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRNaXNzaW5nSGFuZGxlcigpIHtcbiAgICAgICAgcmV0dXJuIF9jb21wb3Nlci52YWx1ZSA/IF9jb21wb3Nlci52YWx1ZS5nZXRNaXNzaW5nSGFuZGxlcigpIDogX21pc3Npbmc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldE1pc3NpbmdIYW5kbGVyKGhhbmRsZXIpIHtcbiAgICAgICAgaWYgKF9jb21wb3Nlci52YWx1ZSkge1xuICAgICAgICAgICAgX2NvbXBvc2VyLnZhbHVlLnNldE1pc3NpbmdIYW5kbGVyKGhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcnBXaXRoRGVwcyhmbikge1xuICAgICAgICB0cmFja1JlYWN0aXZpdHlWYWx1ZXMoKTtcbiAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHQoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gX2NvbXBvc2VyLnZhbHVlXG4gICAgICAgICAgICA/IHdhcnBXaXRoRGVwcygoKSA9PiBSZWZsZWN0LmFwcGx5KF9jb21wb3Nlci52YWx1ZS50LCBudWxsLCBbLi4uYXJnc10pKVxuICAgICAgICAgICAgOiB3YXJwV2l0aERlcHMoKCkgPT4gJycpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBydCguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBfY29tcG9zZXIudmFsdWVcbiAgICAgICAgICAgID8gUmVmbGVjdC5hcHBseShfY29tcG9zZXIudmFsdWUucnQsIG51bGwsIFsuLi5hcmdzXSlcbiAgICAgICAgICAgIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGQoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gX2NvbXBvc2VyLnZhbHVlXG4gICAgICAgICAgICA/IHdhcnBXaXRoRGVwcygoKSA9PiBSZWZsZWN0LmFwcGx5KF9jb21wb3Nlci52YWx1ZS5kLCBudWxsLCBbLi4uYXJnc10pKVxuICAgICAgICAgICAgOiB3YXJwV2l0aERlcHMoKCkgPT4gJycpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBuKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9jb21wb3Nlci52YWx1ZVxuICAgICAgICAgICAgPyB3YXJwV2l0aERlcHMoKCkgPT4gUmVmbGVjdC5hcHBseShfY29tcG9zZXIudmFsdWUubiwgbnVsbCwgWy4uLmFyZ3NdKSlcbiAgICAgICAgICAgIDogd2FycFdpdGhEZXBzKCgpID0+ICcnKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdG0oa2V5KSB7XG4gICAgICAgIHJldHVybiBfY29tcG9zZXIudmFsdWUgPyBfY29tcG9zZXIudmFsdWUudG0oa2V5KSA6IHt9O1xuICAgIH1cbiAgICBmdW5jdGlvbiB0ZShrZXksIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gX2NvbXBvc2VyLnZhbHVlID8gX2NvbXBvc2VyLnZhbHVlLnRlKGtleSwgbG9jYWxlKSA6IGZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRMb2NhbGVNZXNzYWdlKGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gX2NvbXBvc2VyLnZhbHVlID8gX2NvbXBvc2VyLnZhbHVlLmdldExvY2FsZU1lc3NhZ2UobG9jYWxlKSA6IHt9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRMb2NhbGVNZXNzYWdlKGxvY2FsZSwgbWVzc2FnZSkge1xuICAgICAgICBpZiAoX2NvbXBvc2VyLnZhbHVlKSB7XG4gICAgICAgICAgICBfY29tcG9zZXIudmFsdWUuc2V0TG9jYWxlTWVzc2FnZShsb2NhbGUsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgX21lc3NhZ2VzLnZhbHVlW2xvY2FsZV0gPSBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1lcmdlTG9jYWxlTWVzc2FnZShsb2NhbGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKF9jb21wb3Nlci52YWx1ZSkge1xuICAgICAgICAgICAgX2NvbXBvc2VyLnZhbHVlLm1lcmdlTG9jYWxlTWVzc2FnZShsb2NhbGUsIG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldERhdGVUaW1lRm9ybWF0KGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gX2NvbXBvc2VyLnZhbHVlID8gX2NvbXBvc2VyLnZhbHVlLmdldERhdGVUaW1lRm9ybWF0KGxvY2FsZSkgOiB7fTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0RGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKF9jb21wb3Nlci52YWx1ZSkge1xuICAgICAgICAgICAgX2NvbXBvc2VyLnZhbHVlLnNldERhdGVUaW1lRm9ybWF0KGxvY2FsZSwgZm9ybWF0KTtcbiAgICAgICAgICAgIF9kYXRldGltZUZvcm1hdHMudmFsdWVbbG9jYWxlXSA9IGZvcm1hdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtZXJnZURhdGVUaW1lRm9ybWF0KGxvY2FsZSwgZm9ybWF0KSB7XG4gICAgICAgIGlmIChfY29tcG9zZXIudmFsdWUpIHtcbiAgICAgICAgICAgIF9jb21wb3Nlci52YWx1ZS5tZXJnZURhdGVUaW1lRm9ybWF0KGxvY2FsZSwgZm9ybWF0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROdW1iZXJGb3JtYXQobG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBfY29tcG9zZXIudmFsdWUgPyBfY29tcG9zZXIudmFsdWUuZ2V0TnVtYmVyRm9ybWF0KGxvY2FsZSkgOiB7fTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0TnVtYmVyRm9ybWF0KGxvY2FsZSwgZm9ybWF0KSB7XG4gICAgICAgIGlmIChfY29tcG9zZXIudmFsdWUpIHtcbiAgICAgICAgICAgIF9jb21wb3Nlci52YWx1ZS5zZXROdW1iZXJGb3JtYXQobG9jYWxlLCBmb3JtYXQpO1xuICAgICAgICAgICAgX251bWJlckZvcm1hdHMudmFsdWVbbG9jYWxlXSA9IGZvcm1hdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtZXJnZU51bWJlckZvcm1hdChsb2NhbGUsIGZvcm1hdCkge1xuICAgICAgICBpZiAoX2NvbXBvc2VyLnZhbHVlKSB7XG4gICAgICAgICAgICBfY29tcG9zZXIudmFsdWUubWVyZ2VOdW1iZXJGb3JtYXQobG9jYWxlLCBmb3JtYXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHdyYXBwZXIgPSB7XG4gICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgIHJldHVybiBfY29tcG9zZXIudmFsdWUgPyBfY29tcG9zZXIudmFsdWUuaWQgOiAtMTtcbiAgICAgICAgfSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBmYWxsYmFja0xvY2FsZSxcbiAgICAgICAgbWVzc2FnZXMsXG4gICAgICAgIGRhdGV0aW1lRm9ybWF0cyxcbiAgICAgICAgbnVtYmVyRm9ybWF0cyxcbiAgICAgICAgZ2V0IGluaGVyaXRMb2NhbGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gX2NvbXBvc2VyLnZhbHVlID8gX2NvbXBvc2VyLnZhbHVlLmluaGVyaXRMb2NhbGUgOiBfaW5oZXJpdExvY2FsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0IGluaGVyaXRMb2NhbGUodmFsKSB7XG4gICAgICAgICAgICBpZiAoX2NvbXBvc2VyLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX2NvbXBvc2VyLnZhbHVlLmluaGVyaXRMb2NhbGUgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBhdmFpbGFibGVMb2NhbGVzKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9jb21wb3Nlci52YWx1ZVxuICAgICAgICAgICAgICAgID8gX2NvbXBvc2VyLnZhbHVlLmF2YWlsYWJsZUxvY2FsZXNcbiAgICAgICAgICAgICAgICA6IE9iamVjdC5rZXlzKF9tZXNzYWdlcy52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBtb2RpZmllcnMoKSB7XG4gICAgICAgICAgICByZXR1cm4gKF9jb21wb3Nlci52YWx1ZSA/IF9jb21wb3Nlci52YWx1ZS5tb2RpZmllcnMgOiBfbW9kaWZpZXJzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IHBsdXJhbFJ1bGVzKCkge1xuICAgICAgICAgICAgcmV0dXJuIChfY29tcG9zZXIudmFsdWUgPyBfY29tcG9zZXIudmFsdWUucGx1cmFsUnVsZXMgOiBfcGx1cmFsUnVsZXMpO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgaXNHbG9iYWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gX2NvbXBvc2VyLnZhbHVlID8gX2NvbXBvc2VyLnZhbHVlLmlzR2xvYmFsIDogZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBtaXNzaW5nV2FybigpIHtcbiAgICAgICAgICAgIHJldHVybiBfY29tcG9zZXIudmFsdWUgPyBfY29tcG9zZXIudmFsdWUubWlzc2luZ1dhcm4gOiBfbWlzc2luZ1dhcm47XG4gICAgICAgIH0sXG4gICAgICAgIHNldCBtaXNzaW5nV2Fybih2YWwpIHtcbiAgICAgICAgICAgIGlmIChfY29tcG9zZXIudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfY29tcG9zZXIudmFsdWUubWlzc2luZ1dhcm4gPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBmYWxsYmFja1dhcm4oKSB7XG4gICAgICAgICAgICByZXR1cm4gX2NvbXBvc2VyLnZhbHVlID8gX2NvbXBvc2VyLnZhbHVlLmZhbGxiYWNrV2FybiA6IF9mYWxsYmFja1dhcm47XG4gICAgICAgIH0sXG4gICAgICAgIHNldCBmYWxsYmFja1dhcm4odmFsKSB7XG4gICAgICAgICAgICBpZiAoX2NvbXBvc2VyLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX2NvbXBvc2VyLnZhbHVlLm1pc3NpbmdXYXJuID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXQgZmFsbGJhY2tSb290KCkge1xuICAgICAgICAgICAgcmV0dXJuIF9jb21wb3Nlci52YWx1ZSA/IF9jb21wb3Nlci52YWx1ZS5mYWxsYmFja1Jvb3QgOiBfZmFsbGJhY2tSb290O1xuICAgICAgICB9LFxuICAgICAgICBzZXQgZmFsbGJhY2tSb290KHZhbCkge1xuICAgICAgICAgICAgaWYgKF9jb21wb3Nlci52YWx1ZSkge1xuICAgICAgICAgICAgICAgIF9jb21wb3Nlci52YWx1ZS5mYWxsYmFja1Jvb3QgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBmYWxsYmFja0Zvcm1hdCgpIHtcbiAgICAgICAgICAgIHJldHVybiBfY29tcG9zZXIudmFsdWUgPyBfY29tcG9zZXIudmFsdWUuZmFsbGJhY2tGb3JtYXQgOiBfZmFsbGJhY2tGb3JtYXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCBmYWxsYmFja0Zvcm1hdCh2YWwpIHtcbiAgICAgICAgICAgIGlmIChfY29tcG9zZXIudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfY29tcG9zZXIudmFsdWUuZmFsbGJhY2tGb3JtYXQgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldCB3YXJuSHRtbE1lc3NhZ2UoKSB7XG4gICAgICAgICAgICByZXR1cm4gX2NvbXBvc2VyLnZhbHVlXG4gICAgICAgICAgICAgICAgPyBfY29tcG9zZXIudmFsdWUud2Fybkh0bWxNZXNzYWdlXG4gICAgICAgICAgICAgICAgOiBfd2Fybkh0bWxNZXNzYWdlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQgd2Fybkh0bWxNZXNzYWdlKHZhbCkge1xuICAgICAgICAgICAgaWYgKF9jb21wb3Nlci52YWx1ZSkge1xuICAgICAgICAgICAgICAgIF9jb21wb3Nlci52YWx1ZS53YXJuSHRtbE1lc3NhZ2UgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBlc2NhcGVQYXJhbWV0ZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gX2NvbXBvc2VyLnZhbHVlXG4gICAgICAgICAgICAgICAgPyBfY29tcG9zZXIudmFsdWUuZXNjYXBlUGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgOiBfZXNjYXBlUGFyYW1ldGVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQgZXNjYXBlUGFyYW1ldGVyKHZhbCkge1xuICAgICAgICAgICAgaWYgKF9jb21wb3Nlci52YWx1ZSkge1xuICAgICAgICAgICAgICAgIF9jb21wb3Nlci52YWx1ZS5lc2NhcGVQYXJhbWV0ZXIgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHQsXG4gICAgICAgIGdldFBvc3RUcmFuc2xhdGlvbkhhbmRsZXIsXG4gICAgICAgIHNldFBvc3RUcmFuc2xhdGlvbkhhbmRsZXIsXG4gICAgICAgIGdldE1pc3NpbmdIYW5kbGVyLFxuICAgICAgICBzZXRNaXNzaW5nSGFuZGxlcixcbiAgICAgICAgcnQsXG4gICAgICAgIGQsXG4gICAgICAgIG4sXG4gICAgICAgIHRtLFxuICAgICAgICB0ZSxcbiAgICAgICAgZ2V0TG9jYWxlTWVzc2FnZSxcbiAgICAgICAgc2V0TG9jYWxlTWVzc2FnZSxcbiAgICAgICAgbWVyZ2VMb2NhbGVNZXNzYWdlLFxuICAgICAgICBnZXREYXRlVGltZUZvcm1hdCxcbiAgICAgICAgc2V0RGF0ZVRpbWVGb3JtYXQsXG4gICAgICAgIG1lcmdlRGF0ZVRpbWVGb3JtYXQsXG4gICAgICAgIGdldE51bWJlckZvcm1hdCxcbiAgICAgICAgc2V0TnVtYmVyRm9ybWF0LFxuICAgICAgICBtZXJnZU51bWJlckZvcm1hdFxuICAgIH07XG4gICAgZnVuY3Rpb24gc3luYyhjb21wb3Nlcikge1xuICAgICAgICBjb21wb3Nlci5sb2NhbGUudmFsdWUgPSBfbG9jYWxlLnZhbHVlO1xuICAgICAgICBjb21wb3Nlci5mYWxsYmFja0xvY2FsZS52YWx1ZSA9IF9mYWxsYmFja0xvY2FsZS52YWx1ZTtcbiAgICAgICAgT2JqZWN0LmtleXMoX21lc3NhZ2VzLnZhbHVlKS5mb3JFYWNoKGxvY2FsZSA9PiB7XG4gICAgICAgICAgICBjb21wb3Nlci5tZXJnZUxvY2FsZU1lc3NhZ2UobG9jYWxlLCBfbWVzc2FnZXMudmFsdWVbbG9jYWxlXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3Qua2V5cyhfZGF0ZXRpbWVGb3JtYXRzLnZhbHVlKS5mb3JFYWNoKGxvY2FsZSA9PiB7XG4gICAgICAgICAgICBjb21wb3Nlci5tZXJnZURhdGVUaW1lRm9ybWF0KGxvY2FsZSwgX2RhdGV0aW1lRm9ybWF0cy52YWx1ZVtsb2NhbGVdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5rZXlzKF9udW1iZXJGb3JtYXRzLnZhbHVlKS5mb3JFYWNoKGxvY2FsZSA9PiB7XG4gICAgICAgICAgICBjb21wb3Nlci5tZXJnZU51bWJlckZvcm1hdChsb2NhbGUsIF9udW1iZXJGb3JtYXRzLnZhbHVlW2xvY2FsZV0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY29tcG9zZXIuZXNjYXBlUGFyYW1ldGVyID0gX2VzY2FwZVBhcmFtZXRlcjtcbiAgICAgICAgY29tcG9zZXIuZmFsbGJhY2tGb3JtYXQgPSBfZmFsbGJhY2tGb3JtYXQ7XG4gICAgICAgIGNvbXBvc2VyLmZhbGxiYWNrUm9vdCA9IF9mYWxsYmFja1Jvb3Q7XG4gICAgICAgIGNvbXBvc2VyLmZhbGxiYWNrV2FybiA9IF9mYWxsYmFja1dhcm47XG4gICAgICAgIGNvbXBvc2VyLm1pc3NpbmdXYXJuID0gX21pc3NpbmdXYXJuO1xuICAgICAgICBjb21wb3Nlci53YXJuSHRtbE1lc3NhZ2UgPSBfd2Fybkh0bWxNZXNzYWdlO1xuICAgIH1cbiAgICB2dWUub25CZWZvcmVNb3VudCgoKSA9PiB7XG4gICAgICAgIGlmIChpbnN0YW5jZS5wcm94eSA9PSBudWxsIHx8IGluc3RhbmNlLnByb3h5LiRpMThuID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUkxOG5FcnJvcihJMThuRXJyb3JDb2Rlcy5OT1RfQVZBSUxBQkxFX0NPTVBPU0lUSU9OX0lOX0xFR0FDWSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgY29tcG9zZXIgPSAoX2NvbXBvc2VyLnZhbHVlID0gaW5zdGFuY2UucHJveHkuJGkxOG5cbiAgICAgICAgICAgIC5fX2NvbXBvc2VyKTtcbiAgICAgICAgaWYgKHNjb3BlID09PSAnZ2xvYmFsJykge1xuICAgICAgICAgICAgX2xvY2FsZS52YWx1ZSA9IGNvbXBvc2VyLmxvY2FsZS52YWx1ZTtcbiAgICAgICAgICAgIF9mYWxsYmFja0xvY2FsZS52YWx1ZSA9IGNvbXBvc2VyLmZhbGxiYWNrTG9jYWxlLnZhbHVlO1xuICAgICAgICAgICAgX21lc3NhZ2VzLnZhbHVlID0gY29tcG9zZXIubWVzc2FnZXMudmFsdWU7XG4gICAgICAgICAgICBfZGF0ZXRpbWVGb3JtYXRzLnZhbHVlID0gY29tcG9zZXIuZGF0ZXRpbWVGb3JtYXRzLnZhbHVlO1xuICAgICAgICAgICAgX251bWJlckZvcm1hdHMudmFsdWUgPSBjb21wb3Nlci5udW1iZXJGb3JtYXRzLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzTG9jYWxTY29wZSkge1xuICAgICAgICAgICAgc3luYyhjb21wb3Nlcik7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gd3JhcHBlcjtcbn1cbmNvbnN0IGdsb2JhbEV4cG9ydFByb3BzID0gW1xuICAgICdsb2NhbGUnLFxuICAgICdmYWxsYmFja0xvY2FsZScsXG4gICAgJ2F2YWlsYWJsZUxvY2FsZXMnXG5dO1xuY29uc3QgZ2xvYmFsRXhwb3J0TWV0aG9kcyA9IFsndCcsICdydCcsICdkJywgJ24nLCAndG0nLCAndGUnXVxuICAgIDtcbmZ1bmN0aW9uIGluamVjdEdsb2JhbEZpZWxkcyhhcHAsIGNvbXBvc2VyKSB7XG4gICAgY29uc3QgaTE4biA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZ2xvYmFsRXhwb3J0UHJvcHMuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29tcG9zZXIsIHByb3ApO1xuICAgICAgICBpZiAoIWRlc2MpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUkxOG5FcnJvcihJMThuRXJyb3JDb2Rlcy5VTkVYUEVDVEVEX0VSUk9SKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3cmFwID0gdnVlLmlzUmVmKGRlc2MudmFsdWUpIC8vIGNoZWNrIGNvbXB1dGVkIHByb3BzXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICBzZXQodmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2MudmFsdWUudmFsdWUgPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVzYy5nZXQgJiYgZGVzYy5nZXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaTE4biwgcHJvcCwgd3JhcCk7XG4gICAgfSk7XG4gICAgYXBwLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLiRpMThuID0gaTE4bjtcbiAgICBnbG9iYWxFeHBvcnRNZXRob2RzLmZvckVhY2gobWV0aG9kID0+IHtcbiAgICAgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29tcG9zZXIsIG1ldGhvZCk7XG4gICAgICAgIGlmICghZGVzYyB8fCAhZGVzYy52YWx1ZSkge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlSTE4bkVycm9yKEkxOG5FcnJvckNvZGVzLlVORVhQRUNURURfRVJST1IpO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcHAuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMsIGAkJHttZXRob2R9YCwgZGVzYyk7XG4gICAgfSk7XG4gICAgY29uc3QgZGlzcG9zZSA9ICgpID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgZGVsZXRlIGFwcC5jb25maWcuZ2xvYmFsUHJvcGVydGllcy4kaTE4bjtcbiAgICAgICAgZ2xvYmFsRXhwb3J0TWV0aG9kcy5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgZGVsZXRlIGFwcC5jb25maWcuZ2xvYmFsUHJvcGVydGllc1tgJCR7bWV0aG9kfWBdO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBkaXNwb3NlO1xufVxuXG4vLyByZWdpc3RlciBtZXNzYWdlIGNvbXBpbGVyIGF0IHZ1ZS1pMThuXG57XG4gICAgY29yZUJhc2UucmVnaXN0ZXJNZXNzYWdlQ29tcGlsZXIoY29yZUJhc2UuY29tcGlsZSk7XG59XG4vLyByZWdpc3RlciBtZXNzYWdlIHJlc29sdmVyIGF0IHZ1ZS1pMThuXG5jb3JlQmFzZS5yZWdpc3Rlck1lc3NhZ2VSZXNvbHZlcihjb3JlQmFzZS5yZXNvbHZlVmFsdWUpO1xuLy8gcmVnaXN0ZXIgZmFsbGJhY2sgbG9jYWxlIGF0IHZ1ZS1pMThuXG5jb3JlQmFzZS5yZWdpc3RlckxvY2FsZUZhbGxiYWNrZXIoY29yZUJhc2UuZmFsbGJhY2tXaXRoTG9jYWxlQ2hhaW4pO1xuLy8gTk9URTogZXhwZXJpbWVudGFsICEhXG57XG4gICAgY29uc3QgdGFyZ2V0ID0gc2hhcmVkLmdldEdsb2JhbFRoaXMoKTtcbiAgICB0YXJnZXQuX19JTlRMSUZZX18gPSB0cnVlO1xuICAgIGNvcmVCYXNlLnNldERldlRvb2xzSG9vayh0YXJnZXQuX19JTlRMSUZZX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pO1xufVxuXG5leHBvcnRzLkRhdGV0aW1lRm9ybWF0ID0gRGF0ZXRpbWVGb3JtYXQ7XG5leHBvcnRzLkkxOG5EID0gSTE4bkQ7XG5leHBvcnRzLkkxOG5JbmplY3Rpb25LZXkgPSBJMThuSW5qZWN0aW9uS2V5O1xuZXhwb3J0cy5JMThuTiA9IEkxOG5OO1xuZXhwb3J0cy5JMThuVCA9IEkxOG5UO1xuZXhwb3J0cy5OdW1iZXJGb3JtYXQgPSBOdW1iZXJGb3JtYXQ7XG5leHBvcnRzLlRyYW5zbGF0aW9uID0gVHJhbnNsYXRpb247XG5leHBvcnRzLlZFUlNJT04gPSBWRVJTSU9OO1xuZXhwb3J0cy5jYXN0VG9WdWVJMThuID0gY2FzdFRvVnVlSTE4bjtcbmV4cG9ydHMuY3JlYXRlSTE4biA9IGNyZWF0ZUkxOG47XG5leHBvcnRzLnVzZUkxOG4gPSB1c2VJMThuO1xuZXhwb3J0cy52VERpcmVjdGl2ZSA9IHZURGlyZWN0aXZlO1xuIiwiLyohXG4gKiBwaW5pYSB2Mi4yLjJcbiAqIChjKSAyMDI0IEVkdWFyZG8gU2FuIE1hcnRpbiBNb3JvdGVcbiAqIEBsaWNlbnNlIE1JVFxuICovXG5pbXBvcnQgeyBoYXNJbmplY3Rpb25Db250ZXh0LCBpbmplY3QsIHRvUmF3LCB3YXRjaCwgdW5yZWYsIG1hcmtSYXcsIGVmZmVjdFNjb3BlLCByZWYsIGlzVnVlMiwgaXNSZWYsIGlzUmVhY3RpdmUsIHNldCwgZ2V0Q3VycmVudFNjb3BlLCBvblNjb3BlRGlzcG9zZSwgZ2V0Q3VycmVudEluc3RhbmNlLCByZWFjdGl2ZSwgdG9SZWYsIGRlbCwgbmV4dFRpY2ssIGNvbXB1dGVkLCB0b1JlZnMgfSBmcm9tICd2dWUtZGVtaSc7XG5pbXBvcnQgeyBzZXR1cERldnRvb2xzUGx1Z2luIH0gZnJvbSAnQHZ1ZS9kZXZ0b29scy1hcGknO1xuXG4vKipcbiAqIHNldEFjdGl2ZVBpbmlhIG11c3QgYmUgY2FsbGVkIHRvIGhhbmRsZSBTU1IgYXQgdGhlIHRvcCBvZiBmdW5jdGlvbnMgbGlrZVxuICogYGZldGNoYCwgYHNldHVwYCwgYHNlcnZlclByZWZldGNoYCBhbmQgb3RoZXJzXG4gKi9cbmxldCBhY3RpdmVQaW5pYTtcbi8qKlxuICogU2V0cyBvciB1bnNldHMgdGhlIGFjdGl2ZSBwaW5pYS4gVXNlZCBpbiBTU1IgYW5kIGludGVybmFsbHkgd2hlbiBjYWxsaW5nXG4gKiBhY3Rpb25zIGFuZCBnZXR0ZXJzXG4gKlxuICogQHBhcmFtIHBpbmlhIC0gUGluaWEgaW5zdGFuY2VcbiAqL1xuLy8gQHRzLWV4cGVjdC1lcnJvcjogY2Fubm90IGNvbnN0cmFpbiB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuXG5jb25zdCBzZXRBY3RpdmVQaW5pYSA9IChwaW5pYSkgPT4gKGFjdGl2ZVBpbmlhID0gcGluaWEpO1xuLyoqXG4gKiBHZXQgdGhlIGN1cnJlbnRseSBhY3RpdmUgcGluaWEgaWYgdGhlcmUgaXMgYW55LlxuICovXG5jb25zdCBnZXRBY3RpdmVQaW5pYSA9ICgpID0+IChoYXNJbmplY3Rpb25Db250ZXh0KCkgJiYgaW5qZWN0KHBpbmlhU3ltYm9sKSkgfHwgYWN0aXZlUGluaWE7XG5jb25zdCBwaW5pYVN5bWJvbCA9ICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgPyBTeW1ib2woJ3BpbmlhJykgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBTeW1ib2woKSk7XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QoXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxubykge1xuICAgIHJldHVybiAobyAmJlxuICAgICAgICB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSAnW29iamVjdCBPYmplY3RdJyAmJlxuICAgICAgICB0eXBlb2Ygby50b0pTT04gIT09ICdmdW5jdGlvbicpO1xufVxuLy8gdHlwZSBEZWVwUmVhZG9ubHk8VD4gPSB7IHJlYWRvbmx5IFtQIGluIGtleW9mIFRdOiBEZWVwUmVhZG9ubHk8VFtQXT4gfVxuLy8gVE9ETzogY2FuIHdlIGNoYW5nZSB0aGVzZSB0byBudW1iZXJzP1xuLyoqXG4gKiBQb3NzaWJsZSB0eXBlcyBmb3IgU3Vic2NyaXB0aW9uQ2FsbGJhY2tcbiAqL1xudmFyIE11dGF0aW9uVHlwZTtcbihmdW5jdGlvbiAoTXV0YXRpb25UeXBlKSB7XG4gICAgLyoqXG4gICAgICogRGlyZWN0IG11dGF0aW9uIG9mIHRoZSBzdGF0ZTpcbiAgICAgKlxuICAgICAqIC0gYHN0b3JlLm5hbWUgPSAnbmV3IG5hbWUnYFxuICAgICAqIC0gYHN0b3JlLiRzdGF0ZS5uYW1lID0gJ25ldyBuYW1lJ2BcbiAgICAgKiAtIGBzdG9yZS5saXN0LnB1c2goJ25ldyBpdGVtJylgXG4gICAgICovXG4gICAgTXV0YXRpb25UeXBlW1wiZGlyZWN0XCJdID0gXCJkaXJlY3RcIjtcbiAgICAvKipcbiAgICAgKiBNdXRhdGVkIHRoZSBzdGF0ZSB3aXRoIGAkcGF0Y2hgIGFuZCBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIC0gYHN0b3JlLiRwYXRjaCh7IG5hbWU6ICduZXdOYW1lJyB9KWBcbiAgICAgKi9cbiAgICBNdXRhdGlvblR5cGVbXCJwYXRjaE9iamVjdFwiXSA9IFwicGF0Y2ggb2JqZWN0XCI7XG4gICAgLyoqXG4gICAgICogTXV0YXRlZCB0aGUgc3RhdGUgd2l0aCBgJHBhdGNoYCBhbmQgYSBmdW5jdGlvblxuICAgICAqXG4gICAgICogLSBgc3RvcmUuJHBhdGNoKHN0YXRlID0+IHN0YXRlLm5hbWUgPSAnbmV3TmFtZScpYFxuICAgICAqL1xuICAgIE11dGF0aW9uVHlwZVtcInBhdGNoRnVuY3Rpb25cIl0gPSBcInBhdGNoIGZ1bmN0aW9uXCI7XG4gICAgLy8gbWF5YmUgcmVzZXQ/IGZvciAkc3RhdGUgPSB7fSBhbmQgJHJlc2V0XG59KShNdXRhdGlvblR5cGUgfHwgKE11dGF0aW9uVHlwZSA9IHt9KSk7XG5cbmNvbnN0IElTX0NMSUVOVCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG4vKlxuICogRmlsZVNhdmVyLmpzIEEgc2F2ZUFzKCkgRmlsZVNhdmVyIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIE9yaWdpbmFsbHkgYnkgRWxpIEdyZXksIGFkYXB0ZWQgYXMgYW4gRVNNIG1vZHVsZSBieSBFZHVhcmRvIFNhbiBNYXJ0aW5cbiAqIE1vcm90ZS5cbiAqXG4gKiBMaWNlbnNlIDogTUlUXG4gKi9cbi8vIFRoZSBvbmUgYW5kIG9ubHkgd2F5IG9mIGdldHRpbmcgZ2xvYmFsIHNjb3BlIGluIGFsbCBlbnZpcm9ubWVudHNcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8zMjc3MTgyLzEwMDg5OTlcbmNvbnN0IF9nbG9iYWwgPSAvKiNfX1BVUkVfXyovICgoKSA9PiB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyAmJiB3aW5kb3cud2luZG93ID09PSB3aW5kb3dcbiAgICA/IHdpbmRvd1xuICAgIDogdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZlxuICAgICAgICA/IHNlbGZcbiAgICAgICAgOiB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWxcbiAgICAgICAgICAgID8gZ2xvYmFsXG4gICAgICAgICAgICA6IHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgID8gZ2xvYmFsVGhpc1xuICAgICAgICAgICAgICAgIDogeyBIVE1MRWxlbWVudDogbnVsbCB9KSgpO1xuZnVuY3Rpb24gYm9tKGJsb2IsIHsgYXV0b0JvbSA9IGZhbHNlIH0gPSB7fSkge1xuICAgIC8vIHByZXBlbmQgQk9NIGZvciBVVEYtOCBYTUwgYW5kIHRleHQvKiB0eXBlcyAoaW5jbHVkaW5nIEhUTUwpXG4gICAgLy8gbm90ZTogeW91ciBicm93c2VyIHdpbGwgYXV0b21hdGljYWxseSBjb252ZXJ0IFVURi0xNiBVK0ZFRkYgdG8gRUYgQkIgQkZcbiAgICBpZiAoYXV0b0JvbSAmJlxuICAgICAgICAvXlxccyooPzp0ZXh0XFwvXFxTKnxhcHBsaWNhdGlvblxcL3htbHxcXFMqXFwvXFxTKlxcK3htbClcXHMqOy4qY2hhcnNldFxccyo9XFxzKnV0Zi04L2kudGVzdChibG9iLnR5cGUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbU3RyaW5nLmZyb21DaGFyQ29kZSgweGZlZmYpLCBibG9iXSwgeyB0eXBlOiBibG9iLnR5cGUgfSk7XG4gICAgfVxuICAgIHJldHVybiBibG9iO1xufVxuZnVuY3Rpb24gZG93bmxvYWQodXJsLCBuYW1lLCBvcHRzKSB7XG4gICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJztcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzYXZlQXMoeGhyLnJlc3BvbnNlLCBuYW1lLCBvcHRzKTtcbiAgICB9O1xuICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdjb3VsZCBub3QgZG93bmxvYWQgZmlsZScpO1xuICAgIH07XG4gICAgeGhyLnNlbmQoKTtcbn1cbmZ1bmN0aW9uIGNvcnNFbmFibGVkKHVybCkge1xuICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIC8vIHVzZSBzeW5jIHRvIGF2b2lkIHBvcHVwIGJsb2NrZXJcbiAgICB4aHIub3BlbignSEVBRCcsIHVybCwgZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICAgIHhoci5zZW5kKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7IH1cbiAgICByZXR1cm4geGhyLnN0YXR1cyA+PSAyMDAgJiYgeGhyLnN0YXR1cyA8PSAyOTk7XG59XG4vLyBgYS5jbGljaygpYCBkb2Vzbid0IHdvcmsgZm9yIGFsbCBicm93c2VycyAoIzQ2NSlcbmZ1bmN0aW9uIGNsaWNrKG5vZGUpIHtcbiAgICB0cnkge1xuICAgICAgICBub2RlLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ2NsaWNrJykpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTtcbiAgICAgICAgZXZ0LmluaXRNb3VzZUV2ZW50KCdjbGljaycsIHRydWUsIHRydWUsIHdpbmRvdywgMCwgMCwgMCwgODAsIDIwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCwgbnVsbCk7XG4gICAgICAgIG5vZGUuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgIH1cbn1cbmNvbnN0IF9uYXZpZ2F0b3IgPSB0eXBlb2YgbmF2aWdhdG9yID09PSAnb2JqZWN0JyA/IG5hdmlnYXRvciA6IHsgdXNlckFnZW50OiAnJyB9O1xuLy8gRGV0ZWN0IFdlYlZpZXcgaW5zaWRlIGEgbmF0aXZlIG1hY09TIGFwcCBieSBydWxpbmcgb3V0IGFsbCBicm93c2Vyc1xuLy8gV2UganVzdCBuZWVkIHRvIGNoZWNrIGZvciAnU2FmYXJpJyBiZWNhdXNlIGFsbCBvdGhlciBicm93c2VycyAoYmVzaWRlcyBGaXJlZm94KSBpbmNsdWRlIHRoYXQgdG9vXG4vLyBodHRwczovL3d3dy53aGF0aXNteWJyb3dzZXIuY29tL2d1aWRlcy90aGUtbGF0ZXN0LXVzZXItYWdlbnQvbWFjb3NcbmNvbnN0IGlzTWFjT1NXZWJWaWV3ID0gLyojX19QVVJFX18qLyAoKCkgPT4gL01hY2ludG9zaC8udGVzdChfbmF2aWdhdG9yLnVzZXJBZ2VudCkgJiZcbiAgICAvQXBwbGVXZWJLaXQvLnRlc3QoX25hdmlnYXRvci51c2VyQWdlbnQpICYmXG4gICAgIS9TYWZhcmkvLnRlc3QoX25hdmlnYXRvci51c2VyQWdlbnQpKSgpO1xuY29uc3Qgc2F2ZUFzID0gIUlTX0NMSUVOVFxuICAgID8gKCkgPT4geyB9IC8vIG5vb3BcbiAgICA6IC8vIFVzZSBkb3dubG9hZCBhdHRyaWJ1dGUgZmlyc3QgaWYgcG9zc2libGUgKCMxOTMgTHVtaWEgbW9iaWxlKSB1bmxlc3MgdGhpcyBpcyBhIG1hY09TIFdlYlZpZXcgb3IgbWluaSBwcm9ncmFtXG4gICAgICAgIHR5cGVvZiBIVE1MQW5jaG9yRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICdkb3dubG9hZCcgaW4gSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlICYmXG4gICAgICAgICAgICAhaXNNYWNPU1dlYlZpZXdcbiAgICAgICAgICAgID8gZG93bmxvYWRTYXZlQXNcbiAgICAgICAgICAgIDogLy8gVXNlIG1zU2F2ZU9yT3BlbkJsb2IgYXMgYSBzZWNvbmQgYXBwcm9hY2hcbiAgICAgICAgICAgICAgICAnbXNTYXZlT3JPcGVuQmxvYicgaW4gX25hdmlnYXRvclxuICAgICAgICAgICAgICAgICAgICA/IG1zU2F2ZUFzXG4gICAgICAgICAgICAgICAgICAgIDogLy8gRmFsbGJhY2sgdG8gdXNpbmcgRmlsZVJlYWRlciBhbmQgYSBwb3B1cFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVNhdmVyU2F2ZUFzO1xuZnVuY3Rpb24gZG93bmxvYWRTYXZlQXMoYmxvYiwgbmFtZSA9ICdkb3dubG9hZCcsIG9wdHMpIHtcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGEuZG93bmxvYWQgPSBuYW1lO1xuICAgIGEucmVsID0gJ25vb3BlbmVyJzsgLy8gdGFibmFiYmluZ1xuICAgIC8vIFRPRE86IGRldGVjdCBjaHJvbWUgZXh0ZW5zaW9ucyAmIHBhY2thZ2VkIGFwcHNcbiAgICAvLyBhLnRhcmdldCA9ICdfYmxhbmsnXG4gICAgaWYgKHR5cGVvZiBibG9iID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBTdXBwb3J0IHJlZ3VsYXIgbGlua3NcbiAgICAgICAgYS5ocmVmID0gYmxvYjtcbiAgICAgICAgaWYgKGEub3JpZ2luICE9PSBsb2NhdGlvbi5vcmlnaW4pIHtcbiAgICAgICAgICAgIGlmIChjb3JzRW5hYmxlZChhLmhyZWYpKSB7XG4gICAgICAgICAgICAgICAgZG93bmxvYWQoYmxvYiwgbmFtZSwgb3B0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgICAgICAgICAgIGNsaWNrKGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2xpY2soYSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYmxvYnNcbiAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGEuaHJlZik7XG4gICAgICAgIH0sIDRlNCk7IC8vIDQwc1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNsaWNrKGEpO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG59XG5mdW5jdGlvbiBtc1NhdmVBcyhibG9iLCBuYW1lID0gJ2Rvd25sb2FkJywgb3B0cykge1xuICAgIGlmICh0eXBlb2YgYmxvYiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGNvcnNFbmFibGVkKGJsb2IpKSB7XG4gICAgICAgICAgICBkb3dubG9hZChibG9iLCBuYW1lLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgICAgICBhLmhyZWYgPSBibG9iO1xuICAgICAgICAgICAgYS50YXJnZXQgPSAnX2JsYW5rJztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNsaWNrKGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IHdvcmtzIG9uIHdpbmRvd3NcbiAgICAgICAgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoYm9tKGJsb2IsIG9wdHMpLCBuYW1lKTtcbiAgICB9XG59XG5mdW5jdGlvbiBmaWxlU2F2ZXJTYXZlQXMoYmxvYiwgbmFtZSwgb3B0cywgcG9wdXApIHtcbiAgICAvLyBPcGVuIGEgcG9wdXAgaW1tZWRpYXRlbHkgZG8gZ28gYXJvdW5kIHBvcHVwIGJsb2NrZXJcbiAgICAvLyBNb3N0bHkgb25seSBhdmFpbGFibGUgb24gdXNlciBpbnRlcmFjdGlvbiBhbmQgdGhlIGZpbGVSZWFkZXIgaXMgYXN5bmMgc28uLi5cbiAgICBwb3B1cCA9IHBvcHVwIHx8IG9wZW4oJycsICdfYmxhbmsnKTtcbiAgICBpZiAocG9wdXApIHtcbiAgICAgICAgcG9wdXAuZG9jdW1lbnQudGl0bGUgPSBwb3B1cC5kb2N1bWVudC5ib2R5LmlubmVyVGV4dCA9ICdkb3dubG9hZGluZy4uLic7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYmxvYiA9PT0gJ3N0cmluZycpXG4gICAgICAgIHJldHVybiBkb3dubG9hZChibG9iLCBuYW1lLCBvcHRzKTtcbiAgICBjb25zdCBmb3JjZSA9IGJsb2IudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gICAgY29uc3QgaXNTYWZhcmkgPSAvY29uc3RydWN0b3IvaS50ZXN0KFN0cmluZyhfZ2xvYmFsLkhUTUxFbGVtZW50KSkgfHwgJ3NhZmFyaScgaW4gX2dsb2JhbDtcbiAgICBjb25zdCBpc0Nocm9tZUlPUyA9IC9DcmlPU1xcL1tcXGRdKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBpZiAoKGlzQ2hyb21lSU9TIHx8IChmb3JjZSAmJiBpc1NhZmFyaSkgfHwgaXNNYWNPU1dlYlZpZXcpICYmXG4gICAgICAgIHR5cGVvZiBGaWxlUmVhZGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBTYWZhcmkgZG9lc24ndCBhbGxvdyBkb3dubG9hZGluZyBvZiBibG9iIFVSTHNcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB1cmwgPSByZWFkZXIucmVzdWx0O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcG9wdXAgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgcmVhZGVyLnJlc3VsdCB0eXBlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cmwgPSBpc0Nocm9tZUlPU1xuICAgICAgICAgICAgICAgID8gdXJsXG4gICAgICAgICAgICAgICAgOiB1cmwucmVwbGFjZSgvXmRhdGE6W147XSo7LywgJ2RhdGE6YXR0YWNobWVudC9maWxlOycpO1xuICAgICAgICAgICAgaWYgKHBvcHVwKSB7XG4gICAgICAgICAgICAgICAgcG9wdXAubG9jYXRpb24uaHJlZiA9IHVybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uLmFzc2lnbih1cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9wdXAgPSBudWxsOyAvLyByZXZlcnNlLXRhYm5hYmJpbmcgIzQ2MFxuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgIGlmIChwb3B1cClcbiAgICAgICAgICAgIHBvcHVwLmxvY2F0aW9uLmFzc2lnbih1cmwpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gdXJsO1xuICAgICAgICBwb3B1cCA9IG51bGw7IC8vIHJldmVyc2UtdGFibmFiYmluZyAjNDYwXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICB9LCA0ZTQpOyAvLyA0MHNcbiAgICB9XG59XG5cbi8qKlxuICogU2hvd3MgYSB0b2FzdCBvciBjb25zb2xlLmxvZ1xuICpcbiAqIEBwYXJhbSBtZXNzYWdlIC0gbWVzc2FnZSB0byBsb2dcbiAqIEBwYXJhbSB0eXBlIC0gZGlmZmVyZW50IGNvbG9yIG9mIHRoZSB0b29sdGlwXG4gKi9cbmZ1bmN0aW9uIHRvYXN0TWVzc2FnZShtZXNzYWdlLCB0eXBlKSB7XG4gICAgY29uc3QgcGluaWFNZXNzYWdlID0gJ/CfjY0gJyArIG1lc3NhZ2U7XG4gICAgaWYgKHR5cGVvZiBfX1ZVRV9ERVZUT09MU19UT0FTVF9fID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIE5vIGxvbmdlciBhdmFpbGFibGUgOihcbiAgICAgICAgX19WVUVfREVWVE9PTFNfVE9BU1RfXyhwaW5pYU1lc3NhZ2UsIHR5cGUpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlID09PSAnZXJyb3InKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IocGluaWFNZXNzYWdlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ3dhcm4nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihwaW5pYU1lc3NhZ2UpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2cocGluaWFNZXNzYWdlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpc1BpbmlhKG8pIHtcbiAgICByZXR1cm4gJ19hJyBpbiBvICYmICdpbnN0YWxsJyBpbiBvO1xufVxuXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWluIGRldnRvb2xzIGFjdGlvbnMsIHRoZXkgYXJlIG5vdCBQaW5pYSBhY3Rpb25zLlxuICovXG4vLyAtLS1cbmZ1bmN0aW9uIGNoZWNrQ2xpcGJvYXJkQWNjZXNzKCkge1xuICAgIGlmICghKCdjbGlwYm9hcmQnIGluIG5hdmlnYXRvcikpIHtcbiAgICAgICAgdG9hc3RNZXNzYWdlKGBZb3VyIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHRoZSBDbGlwYm9hcmQgQVBJYCwgJ2Vycm9yJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrTm90Rm9jdXNlZEVycm9yKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgICAgZXJyb3IubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdkb2N1bWVudCBpcyBub3QgZm9jdXNlZCcpKSB7XG4gICAgICAgIHRvYXN0TWVzc2FnZSgnWW91IG5lZWQgdG8gYWN0aXZhdGUgdGhlIFwiRW11bGF0ZSBhIGZvY3VzZWQgcGFnZVwiIHNldHRpbmcgaW4gdGhlIFwiUmVuZGVyaW5nXCIgcGFuZWwgb2YgZGV2dG9vbHMuJywgJ3dhcm4nKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdsb2JhbENvcHlTdGF0ZShwaW5pYSkge1xuICAgIGlmIChjaGVja0NsaXBib2FyZEFjY2VzcygpKVxuICAgICAgICByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoSlNPTi5zdHJpbmdpZnkocGluaWEuc3RhdGUudmFsdWUpKTtcbiAgICAgICAgdG9hc3RNZXNzYWdlKCdHbG9iYWwgc3RhdGUgY29waWVkIHRvIGNsaXBib2FyZC4nKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChjaGVja05vdEZvY3VzZWRFcnJvcihlcnJvcikpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRvYXN0TWVzc2FnZShgRmFpbGVkIHRvIHNlcmlhbGl6ZSB0aGUgc3RhdGUuIENoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGRldGFpbHMuYCwgJ2Vycm9yJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdsb2JhbFBhc3RlU3RhdGUocGluaWEpIHtcbiAgICBpZiAoY2hlY2tDbGlwYm9hcmRBY2Nlc3MoKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICAgIGxvYWRTdG9yZXNTdGF0ZShwaW5pYSwgSlNPTi5wYXJzZShhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLnJlYWRUZXh0KCkpKTtcbiAgICAgICAgdG9hc3RNZXNzYWdlKCdHbG9iYWwgc3RhdGUgcGFzdGVkIGZyb20gY2xpcGJvYXJkLicpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGNoZWNrTm90Rm9jdXNlZEVycm9yKGVycm9yKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdG9hc3RNZXNzYWdlKGBGYWlsZWQgdG8gZGVzZXJpYWxpemUgdGhlIHN0YXRlIGZyb20gY2xpcGJvYXJkLiBDaGVjayB0aGUgY29uc29sZSBmb3IgbW9yZSBkZXRhaWxzLmAsICdlcnJvcicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiBhY3Rpb25HbG9iYWxTYXZlU3RhdGUocGluaWEpIHtcbiAgICB0cnkge1xuICAgICAgICBzYXZlQXMobmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KHBpbmlhLnN0YXRlLnZhbHVlKV0sIHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgnLFxuICAgICAgICB9KSwgJ3BpbmlhLXN0YXRlLmpzb24nKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRvYXN0TWVzc2FnZShgRmFpbGVkIHRvIGV4cG9ydCB0aGUgc3RhdGUgYXMgSlNPTi4gQ2hlY2sgdGhlIGNvbnNvbGUgZm9yIG1vcmUgZGV0YWlscy5gLCAnZXJyb3InKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxufVxubGV0IGZpbGVJbnB1dDtcbmZ1bmN0aW9uIGdldEZpbGVPcGVuZXIoKSB7XG4gICAgaWYgKCFmaWxlSW5wdXQpIHtcbiAgICAgICAgZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgZmlsZUlucHV0LnR5cGUgPSAnZmlsZSc7XG4gICAgICAgIGZpbGVJbnB1dC5hY2NlcHQgPSAnLmpzb24nO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvcGVuRmlsZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGZpbGVJbnB1dC5vbmNoYW5nZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlcyA9IGZpbGVJbnB1dC5maWxlcztcbiAgICAgICAgICAgICAgICBpZiAoIWZpbGVzKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gZmlsZXMuaXRlbSgwKTtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbGUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHsgdGV4dDogYXdhaXQgZmlsZS50ZXh0KCksIGZpbGUgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZTogVE9ETzogY2hhbmdlZCBmcm9tIDQuMyB0byA0LjRcbiAgICAgICAgICAgIGZpbGVJbnB1dC5vbmNhbmNlbCA9ICgpID0+IHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICBmaWxlSW5wdXQub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgIGZpbGVJbnB1dC5jbGljaygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZW5GaWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2xvYmFsT3BlblN0YXRlRmlsZShwaW5pYSkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9wZW4gPSBnZXRGaWxlT3BlbmVyKCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZW4oKTtcbiAgICAgICAgaWYgKCFyZXN1bHQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHsgdGV4dCwgZmlsZSB9ID0gcmVzdWx0O1xuICAgICAgICBsb2FkU3RvcmVzU3RhdGUocGluaWEsIEpTT04ucGFyc2UodGV4dCkpO1xuICAgICAgICB0b2FzdE1lc3NhZ2UoYEdsb2JhbCBzdGF0ZSBpbXBvcnRlZCBmcm9tIFwiJHtmaWxlLm5hbWV9XCIuYCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICB0b2FzdE1lc3NhZ2UoYEZhaWxlZCB0byBpbXBvcnQgdGhlIHN0YXRlIGZyb20gSlNPTi4gQ2hlY2sgdGhlIGNvbnNvbGUgZm9yIG1vcmUgZGV0YWlscy5gLCAnZXJyb3InKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gbG9hZFN0b3Jlc1N0YXRlKHBpbmlhLCBzdGF0ZSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHN0b3JlU3RhdGUgPSBwaW5pYS5zdGF0ZS52YWx1ZVtrZXldO1xuICAgICAgICAvLyBzdG9yZSBpcyBhbHJlYWR5IGluc3RhbnRpYXRlZCwgcGF0Y2ggaXRcbiAgICAgICAgaWYgKHN0b3JlU3RhdGUpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc3RvcmVTdGF0ZSwgc3RhdGVba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBzdG9yZSBpcyBub3QgaW5zdGFudGlhdGVkLCBzZXQgdGhlIGluaXRpYWwgc3RhdGVcbiAgICAgICAgICAgIHBpbmlhLnN0YXRlLnZhbHVlW2tleV0gPSBzdGF0ZVtrZXldO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXREaXNwbGF5KGRpc3BsYXkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBfY3VzdG9tOiB7XG4gICAgICAgICAgICBkaXNwbGF5LFxuICAgICAgICB9LFxuICAgIH07XG59XG5jb25zdCBQSU5JQV9ST09UX0xBQkVMID0gJ/CfjY0gUGluaWEgKHJvb3QpJztcbmNvbnN0IFBJTklBX1JPT1RfSUQgPSAnX3Jvb3QnO1xuZnVuY3Rpb24gZm9ybWF0U3RvcmVGb3JJbnNwZWN0b3JUcmVlKHN0b3JlKSB7XG4gICAgcmV0dXJuIGlzUGluaWEoc3RvcmUpXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaWQ6IFBJTklBX1JPT1RfSUQsXG4gICAgICAgICAgICBsYWJlbDogUElOSUFfUk9PVF9MQUJFTCxcbiAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGlkOiBzdG9yZS4kaWQsXG4gICAgICAgICAgICBsYWJlbDogc3RvcmUuJGlkLFxuICAgICAgICB9O1xufVxuZnVuY3Rpb24gZm9ybWF0U3RvcmVGb3JJbnNwZWN0b3JTdGF0ZShzdG9yZSkge1xuICAgIGlmIChpc1BpbmlhKHN0b3JlKSkge1xuICAgICAgICBjb25zdCBzdG9yZU5hbWVzID0gQXJyYXkuZnJvbShzdG9yZS5fcy5rZXlzKCkpO1xuICAgICAgICBjb25zdCBzdG9yZU1hcCA9IHN0b3JlLl9zO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgICAgICAgIHN0YXRlOiBzdG9yZU5hbWVzLm1hcCgoc3RvcmVJZCkgPT4gKHtcbiAgICAgICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBrZXk6IHN0b3JlSWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHN0b3JlLnN0YXRlLnZhbHVlW3N0b3JlSWRdLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgZ2V0dGVyczogc3RvcmVOYW1lc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGlkKSA9PiBzdG9yZU1hcC5nZXQoaWQpLl9nZXR0ZXJzKVxuICAgICAgICAgICAgICAgIC5tYXAoKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBzdG9yZU1hcC5nZXQoaWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAga2V5OiBpZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0b3JlLl9nZXR0ZXJzLnJlZHVjZSgoZ2V0dGVycywga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJzW2tleV0gPSBzdG9yZVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldHRlcnM7XG4gICAgICAgICAgICAgICAgICAgIH0sIHt9KSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgIHN0YXRlOiBPYmplY3Qua2V5cyhzdG9yZS4kc3RhdGUpLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZTogc3RvcmUuJHN0YXRlW2tleV0sXG4gICAgICAgIH0pKSxcbiAgICB9O1xuICAgIC8vIGF2b2lkIGFkZGluZyBlbXB0eSBnZXR0ZXJzXG4gICAgaWYgKHN0b3JlLl9nZXR0ZXJzICYmIHN0b3JlLl9nZXR0ZXJzLmxlbmd0aCkge1xuICAgICAgICBzdGF0ZS5nZXR0ZXJzID0gc3RvcmUuX2dldHRlcnMubWFwKChnZXR0ZXJOYW1lKSA9PiAoe1xuICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAga2V5OiBnZXR0ZXJOYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHN0b3JlW2dldHRlck5hbWVdLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGlmIChzdG9yZS5fY3VzdG9tUHJvcGVydGllcy5zaXplKSB7XG4gICAgICAgIHN0YXRlLmN1c3RvbVByb3BlcnRpZXMgPSBBcnJheS5mcm9tKHN0b3JlLl9jdXN0b21Qcm9wZXJ0aWVzKS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWU6IHN0b3JlW2tleV0sXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlO1xufVxuZnVuY3Rpb24gZm9ybWF0RXZlbnREYXRhKGV2ZW50cykge1xuICAgIGlmICghZXZlbnRzKVxuICAgICAgICByZXR1cm4ge307XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnRzKSkge1xuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgYWRkIGFuZCBkZWxldGUgZm9yIGFycmF5cyBhbmQgb2JqZWN0c1xuICAgICAgICByZXR1cm4gZXZlbnRzLnJlZHVjZSgoZGF0YSwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGRhdGEua2V5cy5wdXNoKGV2ZW50LmtleSk7XG4gICAgICAgICAgICBkYXRhLm9wZXJhdGlvbnMucHVzaChldmVudC50eXBlKTtcbiAgICAgICAgICAgIGRhdGEub2xkVmFsdWVbZXZlbnQua2V5XSA9IGV2ZW50Lm9sZFZhbHVlO1xuICAgICAgICAgICAgZGF0YS5uZXdWYWx1ZVtldmVudC5rZXldID0gZXZlbnQubmV3VmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgb2xkVmFsdWU6IHt9LFxuICAgICAgICAgICAga2V5czogW10sXG4gICAgICAgICAgICBvcGVyYXRpb25zOiBbXSxcbiAgICAgICAgICAgIG5ld1ZhbHVlOiB7fSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBmb3JtYXREaXNwbGF5KGV2ZW50cy50eXBlKSxcbiAgICAgICAgICAgIGtleTogZm9ybWF0RGlzcGxheShldmVudHMua2V5KSxcbiAgICAgICAgICAgIG9sZFZhbHVlOiBldmVudHMub2xkVmFsdWUsXG4gICAgICAgICAgICBuZXdWYWx1ZTogZXZlbnRzLm5ld1ZhbHVlLFxuICAgICAgICB9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZvcm1hdE11dGF0aW9uVHlwZSh0eXBlKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgTXV0YXRpb25UeXBlLmRpcmVjdDpcbiAgICAgICAgICAgIHJldHVybiAnbXV0YXRpb24nO1xuICAgICAgICBjYXNlIE11dGF0aW9uVHlwZS5wYXRjaEZ1bmN0aW9uOlxuICAgICAgICAgICAgcmV0dXJuICckcGF0Y2gnO1xuICAgICAgICBjYXNlIE11dGF0aW9uVHlwZS5wYXRjaE9iamVjdDpcbiAgICAgICAgICAgIHJldHVybiAnJHBhdGNoJztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxufVxuXG4vLyB0aW1lbGluZSBjYW4gYmUgcGF1c2VkIHdoZW4gZGlyZWN0bHkgY2hhbmdpbmcgdGhlIHN0YXRlXG5sZXQgaXNUaW1lbGluZUFjdGl2ZSA9IHRydWU7XG5jb25zdCBjb21wb25lbnRTdGF0ZVR5cGVzID0gW107XG5jb25zdCBNVVRBVElPTlNfTEFZRVJfSUQgPSAncGluaWE6bXV0YXRpb25zJztcbmNvbnN0IElOU1BFQ1RPUl9JRCA9ICdwaW5pYSc7XG5jb25zdCB7IGFzc2lnbjogYXNzaWduJDEgfSA9IE9iamVjdDtcbi8qKlxuICogR2V0cyB0aGUgZGlzcGxheWVkIG5hbWUgb2YgYSBzdG9yZSBpbiBkZXZ0b29sc1xuICpcbiAqIEBwYXJhbSBpZCAtIGlkIG9mIHRoZSBzdG9yZVxuICogQHJldHVybnMgYSBmb3JtYXR0ZWQgc3RyaW5nXG4gKi9cbmNvbnN0IGdldFN0b3JlVHlwZSA9IChpZCkgPT4gJ/CfjY0gJyArIGlkO1xuLyoqXG4gKiBBZGQgdGhlIHBpbmlhIHBsdWdpbiB3aXRob3V0IGFueSBzdG9yZS4gQWxsb3dzIGRpc3BsYXlpbmcgYSBQaW5pYSBwbHVnaW4gdGFiXG4gKiBhcyBzb29uIGFzIGl0IGlzIGFkZGVkIHRvIHRoZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVnVlIGFwcGxpY2F0aW9uXG4gKiBAcGFyYW0gcGluaWEgLSBwaW5pYSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiByZWdpc3RlclBpbmlhRGV2dG9vbHMoYXBwLCBwaW5pYSkge1xuICAgIHNldHVwRGV2dG9vbHNQbHVnaW4oe1xuICAgICAgICBpZDogJ2Rldi5lc20ucGluaWEnLFxuICAgICAgICBsYWJlbDogJ1BpbmlhIPCfjY0nLFxuICAgICAgICBsb2dvOiAnaHR0cHM6Ly9waW5pYS52dWVqcy5vcmcvbG9nby5zdmcnLFxuICAgICAgICBwYWNrYWdlTmFtZTogJ3BpbmlhJyxcbiAgICAgICAgaG9tZXBhZ2U6ICdodHRwczovL3BpbmlhLnZ1ZWpzLm9yZycsXG4gICAgICAgIGNvbXBvbmVudFN0YXRlVHlwZXMsXG4gICAgICAgIGFwcCxcbiAgICB9LCAoYXBpKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgYXBpLm5vdyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdG9hc3RNZXNzYWdlKCdZb3Ugc2VlbSB0byBiZSB1c2luZyBhbiBvdXRkYXRlZCB2ZXJzaW9uIG9mIFZ1ZSBEZXZ0b29scy4gQXJlIHlvdSBzdGlsbCB1c2luZyB0aGUgQmV0YSByZWxlYXNlIGluc3RlYWQgb2YgdGhlIHN0YWJsZSBvbmU/IFlvdSBjYW4gZmluZCB0aGUgbGlua3MgYXQgaHR0cHM6Ly9kZXZ0b29scy52dWVqcy5vcmcvZ3VpZGUvaW5zdGFsbGF0aW9uLmh0bWwuJyk7XG4gICAgICAgIH1cbiAgICAgICAgYXBpLmFkZFRpbWVsaW5lTGF5ZXIoe1xuICAgICAgICAgICAgaWQ6IE1VVEFUSU9OU19MQVlFUl9JRCxcbiAgICAgICAgICAgIGxhYmVsOiBgUGluaWEg8J+NjWAsXG4gICAgICAgICAgICBjb2xvcjogMHhlNWRmODgsXG4gICAgICAgIH0pO1xuICAgICAgICBhcGkuYWRkSW5zcGVjdG9yKHtcbiAgICAgICAgICAgIGlkOiBJTlNQRUNUT1JfSUQsXG4gICAgICAgICAgICBsYWJlbDogJ1BpbmlhIPCfjY0nLFxuICAgICAgICAgICAgaWNvbjogJ3N0b3JhZ2UnLFxuICAgICAgICAgICAgdHJlZUZpbHRlclBsYWNlaG9sZGVyOiAnU2VhcmNoIHN0b3JlcycsXG4gICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnY29udGVudF9jb3B5JyxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25HbG9iYWxDb3B5U3RhdGUocGluaWEpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiAnU2VyaWFsaXplIGFuZCBjb3B5IHRoZSBzdGF0ZScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdjb250ZW50X3Bhc3RlJyxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBhY3Rpb25HbG9iYWxQYXN0ZVN0YXRlKHBpbmlhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yVHJlZShJTlNQRUNUT1JfSUQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBpLnNlbmRJbnNwZWN0b3JTdGF0ZShJTlNQRUNUT1JfSUQpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiAnUmVwbGFjZSB0aGUgc3RhdGUgd2l0aCB0aGUgY29udGVudCBvZiB5b3VyIGNsaXBib2FyZCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdzYXZlJyxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25HbG9iYWxTYXZlU3RhdGUocGluaWEpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiAnU2F2ZSB0aGUgc3RhdGUgYXMgYSBKU09OIGZpbGUnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnZm9sZGVyX29wZW4nLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGFjdGlvbkdsb2JhbE9wZW5TdGF0ZUZpbGUocGluaWEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBpLnNlbmRJbnNwZWN0b3JUcmVlKElOU1BFQ1RPUl9JRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcGkuc2VuZEluc3BlY3RvclN0YXRlKElOU1BFQ1RPUl9JRCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdJbXBvcnQgdGhlIHN0YXRlIGZyb20gYSBKU09OIGZpbGUnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbm9kZUFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICdyZXN0b3JlJyxcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogJ1Jlc2V0IHRoZSBzdGF0ZSAod2l0aCBcIiRyZXNldFwiKScsXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogKG5vZGVJZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBwaW5pYS5fcy5nZXQobm9kZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RvcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdE1lc3NhZ2UoYENhbm5vdCByZXNldCBcIiR7bm9kZUlkfVwiIHN0b3JlIGJlY2F1c2UgaXQgd2Fzbid0IGZvdW5kLmAsICd3YXJuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc3RvcmUuJHJlc2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3RNZXNzYWdlKGBDYW5ub3QgcmVzZXQgXCIke25vZGVJZH1cIiBzdG9yZSBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhIFwiJHJlc2V0XCIgbWV0aG9kIGltcGxlbWVudGVkLmAsICd3YXJuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS4kcmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdE1lc3NhZ2UoYFN0b3JlIFwiJHtub2RlSWR9XCIgcmVzZXQuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uaW5zcGVjdENvbXBvbmVudCgocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm94eSA9IChwYXlsb2FkLmNvbXBvbmVudEluc3RhbmNlICYmXG4gICAgICAgICAgICAgICAgcGF5bG9hZC5jb21wb25lbnRJbnN0YW5jZS5wcm94eSk7XG4gICAgICAgICAgICBpZiAocHJveHkgJiYgcHJveHkuX3BTdG9yZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaW5pYVN0b3JlcyA9IHBheWxvYWQuY29tcG9uZW50SW5zdGFuY2UucHJveHkuX3BTdG9yZXM7XG4gICAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhwaW5pYVN0b3JlcykuZm9yRWFjaCgoc3RvcmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pbnN0YW5jZURhdGEuc3RhdGUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBnZXRTdG9yZVR5cGUoc3RvcmUuJGlkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3N0YXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0b3JlLl9pc09wdGlvbnNBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRvUmF3KHN0b3JlLiRzdGF0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAncmVzdG9yZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdSZXNldCB0aGUgc3RhdGUgb2YgdGhpcyBzdG9yZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gc3RvcmUuJHJlc2V0KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLy8gTk9URTogd29ya2Fyb3VuZCB0byB1bndyYXAgdHJhbnNmZXJyZWQgcmVmc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhzdG9yZS4kc3RhdGUpLnJlZHVjZSgoc3RhdGUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVba2V5XSA9IHN0b3JlLiRzdGF0ZVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7fSksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RvcmUuX2dldHRlcnMgJiYgc3RvcmUuX2dldHRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmluc3RhbmNlRGF0YS5zdGF0ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBnZXRTdG9yZVR5cGUoc3RvcmUuJGlkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdnZXR0ZXJzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0b3JlLl9nZXR0ZXJzLnJlZHVjZSgoZ2V0dGVycywga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJzW2tleV0gPSBzdG9yZVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogd2UganVzdCB3YW50IHRvIHNob3cgaXQgaW4gZGV2dG9vbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcnNba2V5XSA9IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHt9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yVHJlZSgocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBheWxvYWQuYXBwID09PSBhcHAgJiYgcGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gSU5TUEVDVE9SX0lEKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0b3JlcyA9IFtwaW5pYV07XG4gICAgICAgICAgICAgICAgc3RvcmVzID0gc3RvcmVzLmNvbmNhdChBcnJheS5mcm9tKHBpbmlhLl9zLnZhbHVlcygpKSk7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5yb290Tm9kZXMgPSAocGF5bG9hZC5maWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgPyBzdG9yZXMuZmlsdGVyKChzdG9yZSkgPT4gJyRpZCcgaW4gc3RvcmVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc3RvcmUuJGlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5jbHVkZXMocGF5bG9hZC5maWx0ZXIudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogUElOSUFfUk9PVF9MQUJFTC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHBheWxvYWQuZmlsdGVyLnRvTG93ZXJDYXNlKCkpKVxuICAgICAgICAgICAgICAgICAgICA6IHN0b3JlcykubWFwKGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yVHJlZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBFeHBvc2UgcGluaWEgaW5zdGFuY2UgYXMgJHBpbmlhIHRvIHdpbmRvd1xuICAgICAgICBnbG9iYWxUaGlzLiRwaW5pYSA9IHBpbmlhO1xuICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yU3RhdGUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmFwcCA9PT0gYXBwICYmIHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IElOU1BFQ1RPUl9JRCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3BlY3RlZFN0b3JlID0gcGF5bG9hZC5ub2RlSWQgPT09IFBJTklBX1JPT1RfSURcbiAgICAgICAgICAgICAgICAgICAgPyBwaW5pYVxuICAgICAgICAgICAgICAgICAgICA6IHBpbmlhLl9zLmdldChwYXlsb2FkLm5vZGVJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpbnNwZWN0ZWRTdG9yZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGNvdWxkIGJlIHRoZSBzZWxlY3RlZCBzdG9yZSByZXN0b3JlZCBmb3IgYSBkaWZmZXJlbnQgcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAvLyBzbyBpdCdzIGJldHRlciBub3QgdG8gc2F5IGFueXRoaW5nIGhlcmVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5zcGVjdGVkU3RvcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhwb3NlIHNlbGVjdGVkIHN0b3JlIGFzICRzdG9yZSB0byB3aW5kb3dcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubm9kZUlkICE9PSBQSU5JQV9ST09UX0lEKVxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVGhpcy4kc3RvcmUgPSB0b1JhdyhpbnNwZWN0ZWRTdG9yZSk7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQuc3RhdGUgPSBmb3JtYXRTdG9yZUZvckluc3BlY3RvclN0YXRlKGluc3BlY3RlZFN0b3JlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZWRpdEluc3BlY3RvclN0YXRlKChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmFwcCA9PT0gYXBwICYmIHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IElOU1BFQ1RPUl9JRCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3BlY3RlZFN0b3JlID0gcGF5bG9hZC5ub2RlSWQgPT09IFBJTklBX1JPT1RfSURcbiAgICAgICAgICAgICAgICAgICAgPyBwaW5pYVxuICAgICAgICAgICAgICAgICAgICA6IHBpbmlhLl9zLmdldChwYXlsb2FkLm5vZGVJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpbnNwZWN0ZWRTdG9yZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9hc3RNZXNzYWdlKGBzdG9yZSBcIiR7cGF5bG9hZC5ub2RlSWR9XCIgbm90IGZvdW5kYCwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgcGF0aCB9ID0gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICBpZiAoIWlzUGluaWEoaW5zcGVjdGVkU3RvcmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFjY2VzcyBvbmx5IHRoZSBzdGF0ZVxuICAgICAgICAgICAgICAgICAgICBpZiAocGF0aC5sZW5ndGggIT09IDEgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICFpbnNwZWN0ZWRTdG9yZS5fY3VzdG9tUHJvcGVydGllcy5oYXMocGF0aFswXSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhbMF0gaW4gaW5zcGVjdGVkU3RvcmUuJHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnVuc2hpZnQoJyRzdGF0ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBSb290IGFjY2Vzcywgd2UgY2FuIG9taXQgdGhlIGAudmFsdWVgIGJlY2F1c2UgdGhlIGRldnRvb2xzIEFQSSBkb2VzIGl0IGZvciB1c1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnVuc2hpZnQoJ3N0YXRlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlzVGltZWxpbmVBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLnNldChpbnNwZWN0ZWRTdG9yZSwgcGF0aCwgcGF5bG9hZC5zdGF0ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaXNUaW1lbGluZUFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhcGkub24uZWRpdENvbXBvbmVudFN0YXRlKChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICBpZiAocGF5bG9hZC50eXBlLnN0YXJ0c1dpdGgoJ/CfjY0nKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlSWQgPSBwYXlsb2FkLnR5cGUucmVwbGFjZSgvXvCfjY1cXHMqLywgJycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gcGluaWEuX3MuZ2V0KHN0b3JlSWQpO1xuICAgICAgICAgICAgICAgIGlmICghc3RvcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvYXN0TWVzc2FnZShgc3RvcmUgXCIke3N0b3JlSWR9XCIgbm90IGZvdW5kYCwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgcGF0aCB9ID0gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICBpZiAocGF0aFswXSAhPT0gJ3N0YXRlJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9hc3RNZXNzYWdlKGBJbnZhbGlkIHBhdGggZm9yIHN0b3JlIFwiJHtzdG9yZUlkfVwiOlxcbiR7cGF0aH1cXG5Pbmx5IHN0YXRlIGNhbiBiZSBtb2RpZmllZC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcmV3cml0ZSB0aGUgZmlyc3QgZW50cnkgdG8gYmUgYWJsZSB0byBkaXJlY3RseSBzZXQgdGhlIHN0YXRlIGFzXG4gICAgICAgICAgICAgICAgLy8gd2VsbCBhcyBhbnkgb3RoZXIgcGF0aFxuICAgICAgICAgICAgICAgIHBhdGhbMF0gPSAnJHN0YXRlJztcbiAgICAgICAgICAgICAgICBpc1RpbWVsaW5lQWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5zZXQoc3RvcmUsIHBhdGgsIHBheWxvYWQuc3RhdGUudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlzVGltZWxpbmVBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGFkZFN0b3JlVG9EZXZ0b29scyhhcHAsIHN0b3JlKSB7XG4gICAgaWYgKCFjb21wb25lbnRTdGF0ZVR5cGVzLmluY2x1ZGVzKGdldFN0b3JlVHlwZShzdG9yZS4kaWQpKSkge1xuICAgICAgICBjb21wb25lbnRTdGF0ZVR5cGVzLnB1c2goZ2V0U3RvcmVUeXBlKHN0b3JlLiRpZCkpO1xuICAgIH1cbiAgICBzZXR1cERldnRvb2xzUGx1Z2luKHtcbiAgICAgICAgaWQ6ICdkZXYuZXNtLnBpbmlhJyxcbiAgICAgICAgbGFiZWw6ICdQaW5pYSDwn42NJyxcbiAgICAgICAgbG9nbzogJ2h0dHBzOi8vcGluaWEudnVlanMub3JnL2xvZ28uc3ZnJyxcbiAgICAgICAgcGFja2FnZU5hbWU6ICdwaW5pYScsXG4gICAgICAgIGhvbWVwYWdlOiAnaHR0cHM6Ly9waW5pYS52dWVqcy5vcmcnLFxuICAgICAgICBjb21wb25lbnRTdGF0ZVR5cGVzLFxuICAgICAgICBhcHAsXG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgICBsb2dTdG9yZUNoYW5nZXM6IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ05vdGlmeSBhYm91dCBuZXcvZGVsZXRlZCBzdG9yZXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gdXNlRW1vamlzOiB7XG4gICAgICAgICAgICAvLyAgIGxhYmVsOiAnVXNlIGVtb2ppcyBpbiBtZXNzYWdlcyDimqHvuI8nLFxuICAgICAgICAgICAgLy8gICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICAvLyAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgIH0sXG4gICAgfSwgKGFwaSkgPT4ge1xuICAgICAgICAvLyBncmFjZWZ1bGx5IGhhbmRsZSBlcnJvcnNcbiAgICAgICAgY29uc3Qgbm93ID0gdHlwZW9mIGFwaS5ub3cgPT09ICdmdW5jdGlvbicgPyBhcGkubm93LmJpbmQoYXBpKSA6IERhdGUubm93O1xuICAgICAgICBzdG9yZS4kb25BY3Rpb24oKHsgYWZ0ZXIsIG9uRXJyb3IsIG5hbWUsIGFyZ3MgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBJZCA9IHJ1bm5pbmdBY3Rpb25JZCsrO1xuICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgIGxheWVySWQ6IE1VVEFUSU9OU19MQVlFUl9JRCxcbiAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICB0aW1lOiBub3coKSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfwn5urICcgKyBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmU6IGZvcm1hdERpc3BsYXkoc3RvcmUuJGlkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogZm9ybWF0RGlzcGxheShuYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwSWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYWZ0ZXIoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUFjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IE1VVEFUSU9OU19MQVlFUl9JRCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IG5vdygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfwn5usICcgKyBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6ICdlbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiBmb3JtYXREaXNwbGF5KHN0b3JlLiRpZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmb3JtYXREaXNwbGF5KG5hbWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG9uRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgYWN0aXZlQWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJJZDogTVVUQVRJT05TX0xBWUVSX0lELFxuICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogbm93KCksXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dUeXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfwn5KlICcgKyBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6ICdlbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiBmb3JtYXREaXNwbGF5KHN0b3JlLiRpZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmb3JtYXREaXNwbGF5KG5hbWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgc3RvcmUuX2N1c3RvbVByb3BlcnRpZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgd2F0Y2goKCkgPT4gdW5yZWYoc3RvcmVbbmFtZV0pLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgYXBpLm5vdGlmeUNvbXBvbmVudFVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yU3RhdGUoSU5TUEVDVE9SX0lEKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNUaW1lbGluZUFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBNVVRBVElPTlNfTEFZRVJfSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IG5vdygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnQ2hhbmdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGFjdGl2ZUFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHsgZGVlcDogdHJ1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN0b3JlLiRzdWJzY3JpYmUoKHsgZXZlbnRzLCB0eXBlIH0sIHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBhcGkubm90aWZ5Q29tcG9uZW50VXBkYXRlKCk7XG4gICAgICAgICAgICBhcGkuc2VuZEluc3BlY3RvclN0YXRlKElOU1BFQ1RPUl9JRCk7XG4gICAgICAgICAgICBpZiAoIWlzVGltZWxpbmVBY3RpdmUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy8gcm9vdFN0b3JlLnN0YXRlW3N0b3JlLmlkXSA9IHN0YXRlXG4gICAgICAgICAgICBjb25zdCBldmVudERhdGEgPSB7XG4gICAgICAgICAgICAgICAgdGltZTogbm93KCksXG4gICAgICAgICAgICAgICAgdGl0bGU6IGZvcm1hdE11dGF0aW9uVHlwZSh0eXBlKSxcbiAgICAgICAgICAgICAgICBkYXRhOiBhc3NpZ24kMSh7IHN0b3JlOiBmb3JtYXREaXNwbGF5KHN0b3JlLiRpZCkgfSwgZm9ybWF0RXZlbnREYXRhKGV2ZW50cykpLFxuICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGFjdGl2ZUFjdGlvbixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gTXV0YXRpb25UeXBlLnBhdGNoRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBldmVudERhdGEuc3VidGl0bGUgPSAn4qS177iPJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IE11dGF0aW9uVHlwZS5wYXRjaE9iamVjdCkge1xuICAgICAgICAgICAgICAgIGV2ZW50RGF0YS5zdWJ0aXRsZSA9ICfwn6epJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50cyAmJiAhQXJyYXkuaXNBcnJheShldmVudHMpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnREYXRhLnN1YnRpdGxlID0gZXZlbnRzLnR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgICAgICAgICAgZXZlbnREYXRhLmRhdGFbJ3Jhd0V2ZW50KHMpJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgIF9jdXN0b206IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdEZWJ1Z2dlckV2ZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogJ3JhdyBEZWJ1Z2dlckV2ZW50W10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgIGxheWVySWQ6IE1VVEFUSU9OU19MQVlFUl9JRCxcbiAgICAgICAgICAgICAgICBldmVudDogZXZlbnREYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHsgZGV0YWNoZWQ6IHRydWUsIGZsdXNoOiAnc3luYycgfSk7XG4gICAgICAgIGNvbnN0IGhvdFVwZGF0ZSA9IHN0b3JlLl9ob3RVcGRhdGU7XG4gICAgICAgIHN0b3JlLl9ob3RVcGRhdGUgPSBtYXJrUmF3KChuZXdTdG9yZSkgPT4ge1xuICAgICAgICAgICAgaG90VXBkYXRlKG5ld1N0b3JlKTtcbiAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgICAgICBsYXllcklkOiBNVVRBVElPTlNfTEFZRVJfSUQsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdGltZTogbm93KCksXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn8J+UpSAnICsgc3RvcmUuJGlkLFxuICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogJ0hNUiB1cGRhdGUnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZTogZm9ybWF0RGlzcGxheShzdG9yZS4kaWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5mbzogZm9ybWF0RGlzcGxheShgSE1SIHVwZGF0ZWApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgZGV2dG9vbHMgdG9vXG4gICAgICAgICAgICBhcGkubm90aWZ5Q29tcG9uZW50VXBkYXRlKCk7XG4gICAgICAgICAgICBhcGkuc2VuZEluc3BlY3RvclRyZWUoSU5TUEVDVE9SX0lEKTtcbiAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yU3RhdGUoSU5TUEVDVE9SX0lEKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHsgJGRpc3Bvc2UgfSA9IHN0b3JlO1xuICAgICAgICBzdG9yZS4kZGlzcG9zZSA9ICgpID0+IHtcbiAgICAgICAgICAgICRkaXNwb3NlKCk7XG4gICAgICAgICAgICBhcGkubm90aWZ5Q29tcG9uZW50VXBkYXRlKCk7XG4gICAgICAgICAgICBhcGkuc2VuZEluc3BlY3RvclRyZWUoSU5TUEVDVE9SX0lEKTtcbiAgICAgICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yU3RhdGUoSU5TUEVDVE9SX0lEKTtcbiAgICAgICAgICAgIGFwaS5nZXRTZXR0aW5ncygpLmxvZ1N0b3JlQ2hhbmdlcyAmJlxuICAgICAgICAgICAgICAgIHRvYXN0TWVzc2FnZShgRGlzcG9zZWQgXCIke3N0b3JlLiRpZH1cIiBzdG9yZSDwn5eRYCk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIHRyaWdnZXIgYW4gdXBkYXRlIHNvIGl0IGNhbiBkaXNwbGF5IG5ldyByZWdpc3RlcmVkIHN0b3Jlc1xuICAgICAgICBhcGkubm90aWZ5Q29tcG9uZW50VXBkYXRlKCk7XG4gICAgICAgIGFwaS5zZW5kSW5zcGVjdG9yVHJlZShJTlNQRUNUT1JfSUQpO1xuICAgICAgICBhcGkuc2VuZEluc3BlY3RvclN0YXRlKElOU1BFQ1RPUl9JRCk7XG4gICAgICAgIGFwaS5nZXRTZXR0aW5ncygpLmxvZ1N0b3JlQ2hhbmdlcyAmJlxuICAgICAgICAgICAgdG9hc3RNZXNzYWdlKGBcIiR7c3RvcmUuJGlkfVwiIHN0b3JlIGluc3RhbGxlZCDwn4aVYCk7XG4gICAgfSk7XG59XG5sZXQgcnVubmluZ0FjdGlvbklkID0gMDtcbmxldCBhY3RpdmVBY3Rpb247XG4vKipcbiAqIFBhdGNoZXMgYSBzdG9yZSB0byBlbmFibGUgYWN0aW9uIGdyb3VwaW5nIGluIGRldnRvb2xzIGJ5IHdyYXBwaW5nIHRoZSBzdG9yZSB3aXRoIGEgUHJveHkgdGhhdCBpcyBwYXNzZWQgYXMgdGhlXG4gKiBjb250ZXh0IG9mIGFsbCBhY3Rpb25zLCBhbGxvd2luZyB1cyB0byBzZXQgYHJ1bm5pbmdBY3Rpb25gIG9uIGVhY2ggYWNjZXNzIGFuZCBlZmZlY3RpdmVseSBhc3NvY2lhdGluZyBhbnkgc3RhdGVcbiAqIG11dGF0aW9uIHRvIHRoZSBhY3Rpb24uXG4gKlxuICogQHBhcmFtIHN0b3JlIC0gc3RvcmUgdG8gcGF0Y2hcbiAqIEBwYXJhbSBhY3Rpb25OYW1lcyAtIGxpc3Qgb2YgYWN0aW9uc3QgdG8gcGF0Y2hcbiAqL1xuZnVuY3Rpb24gcGF0Y2hBY3Rpb25Gb3JHcm91cGluZyhzdG9yZSwgYWN0aW9uTmFtZXMsIHdyYXBXaXRoUHJveHkpIHtcbiAgICAvLyBvcmlnaW5hbCBhY3Rpb25zIG9mIHRoZSBzdG9yZSBhcyB0aGV5IGFyZSBnaXZlbiBieSBwaW5pYS4gV2UgYXJlIGdvaW5nIHRvIG92ZXJyaWRlIHRoZW1cbiAgICBjb25zdCBhY3Rpb25zID0gYWN0aW9uTmFtZXMucmVkdWNlKChzdG9yZUFjdGlvbnMsIGFjdGlvbk5hbWUpID0+IHtcbiAgICAgICAgLy8gdXNlIHRvUmF3IHRvIGF2b2lkIHRyYWNraW5nICM1NDFcbiAgICAgICAgc3RvcmVBY3Rpb25zW2FjdGlvbk5hbWVdID0gdG9SYXcoc3RvcmUpW2FjdGlvbk5hbWVdO1xuICAgICAgICByZXR1cm4gc3RvcmVBY3Rpb25zO1xuICAgIH0sIHt9KTtcbiAgICBmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gYWN0aW9ucykge1xuICAgICAgICBzdG9yZVthY3Rpb25OYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIHRoZSBydW5uaW5nIGFjdGlvbiBpZCBpcyBpbmNyZW1lbnRlZCBpbiBhIGJlZm9yZSBhY3Rpb24gaG9va1xuICAgICAgICAgICAgY29uc3QgX2FjdGlvbklkID0gcnVubmluZ0FjdGlvbklkO1xuICAgICAgICAgICAgY29uc3QgdHJhY2tlZFN0b3JlID0gd3JhcFdpdGhQcm94eVxuICAgICAgICAgICAgICAgID8gbmV3IFByb3h5KHN0b3JlLCB7XG4gICAgICAgICAgICAgICAgICAgIGdldCguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVBY3Rpb24gPSBfYWN0aW9uSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQoLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNldCguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVBY3Rpb24gPSBfYWN0aW9uSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5zZXQoLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IHN0b3JlO1xuICAgICAgICAgICAgLy8gRm9yIFNldHVwIFN0b3JlcyB3ZSBuZWVkIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFzeW5jLWNvbnRleHRcbiAgICAgICAgICAgIGFjdGl2ZUFjdGlvbiA9IF9hY3Rpb25JZDtcbiAgICAgICAgICAgIGNvbnN0IHJldFZhbHVlID0gYWN0aW9uc1thY3Rpb25OYW1lXS5hcHBseSh0cmFja2VkU3RvcmUsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHNhZmVyIGFzIGFzeW5jIGFjdGlvbnMgaW4gU2V0dXAgU3RvcmVzIHdvdWxkIGFzc29jaWF0ZSBtdXRhdGlvbnMgZG9uZSBvdXRzaWRlIG9mIHRoZSBhY3Rpb25cbiAgICAgICAgICAgIGFjdGl2ZUFjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiByZXRWYWx1ZTtcbiAgICAgICAgfTtcbiAgICB9XG59XG4vKipcbiAqIHBpbmlhLnVzZShkZXZ0b29sc1BsdWdpbilcbiAqL1xuZnVuY3Rpb24gZGV2dG9vbHNQbHVnaW4oeyBhcHAsIHN0b3JlLCBvcHRpb25zIH0pIHtcbiAgICAvLyBITVIgbW9kdWxlXG4gICAgaWYgKHN0b3JlLiRpZC5zdGFydHNXaXRoKCdfX2hvdDonKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGRldGVjdCBvcHRpb24gYXBpIHZzIHNldHVwIGFwaVxuICAgIHN0b3JlLl9pc09wdGlvbnNBUEkgPSAhIW9wdGlvbnMuc3RhdGU7XG4gICAgLy8gRG8gbm90IG92ZXJ3cml0ZSBhY3Rpb25zIG1vY2tlZCBieSBAcGluaWEvdGVzdGluZyAoIzIyOTgpXG4gICAgaWYgKCFzdG9yZS5fcC5fdGVzdGluZykge1xuICAgICAgICBwYXRjaEFjdGlvbkZvckdyb3VwaW5nKHN0b3JlLCBPYmplY3Qua2V5cyhvcHRpb25zLmFjdGlvbnMpLCBzdG9yZS5faXNPcHRpb25zQVBJKTtcbiAgICAgICAgLy8gVXBncmFkZSB0aGUgSE1SIHRvIGFsc28gdXBkYXRlIHRoZSBuZXcgYWN0aW9uc1xuICAgICAgICBjb25zdCBvcmlnaW5hbEhvdFVwZGF0ZSA9IHN0b3JlLl9ob3RVcGRhdGU7XG4gICAgICAgIHRvUmF3KHN0b3JlKS5faG90VXBkYXRlID0gZnVuY3Rpb24gKG5ld1N0b3JlKSB7XG4gICAgICAgICAgICBvcmlnaW5hbEhvdFVwZGF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgcGF0Y2hBY3Rpb25Gb3JHcm91cGluZyhzdG9yZSwgT2JqZWN0LmtleXMobmV3U3RvcmUuX2htclBheWxvYWQuYWN0aW9ucyksICEhc3RvcmUuX2lzT3B0aW9uc0FQSSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGFkZFN0b3JlVG9EZXZ0b29scyhhcHAsIFxuICAgIC8vIEZJWE1FOiBpcyB0aGVyZSBhIHdheSB0byBhbGxvdyB0aGUgYXNzaWdubWVudCBmcm9tIFN0b3JlPElkLCBTLCBHLCBBPiB0byBTdG9yZUdlbmVyaWM/XG4gICAgc3RvcmUpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBQaW5pYSBpbnN0YW5jZSB0byBiZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvblxuICovXG5mdW5jdGlvbiBjcmVhdGVQaW5pYSgpIHtcbiAgICBjb25zdCBzY29wZSA9IGVmZmVjdFNjb3BlKHRydWUpO1xuICAgIC8vIE5PVEU6IGhlcmUgd2UgY291bGQgY2hlY2sgdGhlIHdpbmRvdyBvYmplY3QgZm9yIGEgc3RhdGUgYW5kIGRpcmVjdGx5IHNldCBpdFxuICAgIC8vIGlmIHRoZXJlIGlzIGFueXRoaW5nIGxpa2UgaXQgd2l0aCBWdWUgMyBTU1JcbiAgICBjb25zdCBzdGF0ZSA9IHNjb3BlLnJ1bigoKSA9PiByZWYoe30pKTtcbiAgICBsZXQgX3AgPSBbXTtcbiAgICAvLyBwbHVnaW5zIGFkZGVkIGJlZm9yZSBjYWxsaW5nIGFwcC51c2UocGluaWEpXG4gICAgbGV0IHRvQmVJbnN0YWxsZWQgPSBbXTtcbiAgICBjb25zdCBwaW5pYSA9IG1hcmtSYXcoe1xuICAgICAgICBpbnN0YWxsKGFwcCkge1xuICAgICAgICAgICAgLy8gdGhpcyBhbGxvd3MgY2FsbGluZyB1c2VTdG9yZSgpIG91dHNpZGUgb2YgYSBjb21wb25lbnQgc2V0dXAgYWZ0ZXJcbiAgICAgICAgICAgIC8vIGluc3RhbGxpbmcgcGluaWEncyBwbHVnaW5cbiAgICAgICAgICAgIHNldEFjdGl2ZVBpbmlhKHBpbmlhKTtcbiAgICAgICAgICAgIGlmICghaXNWdWUyKSB7XG4gICAgICAgICAgICAgICAgcGluaWEuX2EgPSBhcHA7XG4gICAgICAgICAgICAgICAgYXBwLnByb3ZpZGUocGluaWFTeW1ib2wsIHBpbmlhKTtcbiAgICAgICAgICAgICAgICBhcHAuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMuJHBpbmlhID0gcGluaWE7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgICAgICBpZiAoKCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgKHR5cGVvZiBfX1ZVRV9QUk9EX0RFVlRPT0xTX18gIT09ICd1bmRlZmluZWQnICYmIF9fVlVFX1BST0RfREVWVE9PTFNfXykpICYmICEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0JykpICYmIElTX0NMSUVOVCkge1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RlclBpbmlhRGV2dG9vbHMoYXBwLCBwaW5pYSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRvQmVJbnN0YWxsZWQuZm9yRWFjaCgocGx1Z2luKSA9PiBfcC5wdXNoKHBsdWdpbikpO1xuICAgICAgICAgICAgICAgIHRvQmVJbnN0YWxsZWQgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdXNlKHBsdWdpbikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9hICYmICFpc1Z1ZTIpIHtcbiAgICAgICAgICAgICAgICB0b0JlSW5zdGFsbGVkLnB1c2gocGx1Z2luKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIF9wLnB1c2gocGx1Z2luKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBfcCxcbiAgICAgICAgLy8gaXQncyBhY3R1YWxseSB1bmRlZmluZWQgaGVyZVxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIF9hOiBudWxsLFxuICAgICAgICBfZTogc2NvcGUsXG4gICAgICAgIF9zOiBuZXcgTWFwKCksXG4gICAgICAgIHN0YXRlLFxuICAgIH0pO1xuICAgIC8vIHBpbmlhIGRldnRvb2xzIHJlbHkgb24gZGV2IG9ubHkgZmVhdHVyZXMgc28gdGhleSBjYW5ub3QgYmUgZm9yY2VkIHVubGVzc1xuICAgIC8vIHRoZSBkZXYgYnVpbGQgb2YgVnVlIGlzIHVzZWQuIEF2b2lkIG9sZCBicm93c2VycyBsaWtlIElFMTEuXG4gICAgaWYgKCgoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8ICh0eXBlb2YgX19WVUVfUFJPRF9ERVZUT09MU19fICE9PSAndW5kZWZpbmVkJyAmJiBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pKSAmJiAhKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpKSAmJiB0eXBlb2YgUHJveHkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHBpbmlhLnVzZShkZXZ0b29sc1BsdWdpbik7XG4gICAgfVxuICAgIHJldHVybiBwaW5pYTtcbn1cbi8qKlxuICogRGlzcG9zZSBhIFBpbmlhIGluc3RhbmNlIGJ5IHN0b3BwaW5nIGl0cyBlZmZlY3RTY29wZSBhbmQgcmVtb3ZpbmcgdGhlIHN0YXRlLCBwbHVnaW5zIGFuZCBzdG9yZXMuIFRoaXMgaXMgbW9zdGx5XG4gKiB1c2VmdWwgaW4gdGVzdHMsIHdpdGggYm90aCBhIHRlc3RpbmcgcGluaWEgb3IgYSByZWd1bGFyIHBpbmlhIGFuZCBpbiBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgbXVsdGlwbGUgcGluaWEgaW5zdGFuY2VzLlxuICogT25jZSBkaXNwb3NlZCwgdGhlIHBpbmlhIGluc3RhbmNlIGNhbm5vdCBiZSB1c2VkIGFueW1vcmUuXG4gKlxuICogQHBhcmFtIHBpbmlhIC0gcGluaWEgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gZGlzcG9zZVBpbmlhKHBpbmlhKSB7XG4gICAgcGluaWEuX2Uuc3RvcCgpO1xuICAgIHBpbmlhLl9zLmNsZWFyKCk7XG4gICAgcGluaWEuX3Auc3BsaWNlKDApO1xuICAgIHBpbmlhLnN0YXRlLnZhbHVlID0ge307XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbm9uIHZhbGlkXG4gICAgcGluaWEuX2EgPSBudWxsO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZ1bmN0aW9uIGlzIGEgYFN0b3JlRGVmaW5pdGlvbmAuXG4gKlxuICogQHBhcmFtIGZuIC0gb2JqZWN0IHRvIHRlc3RcbiAqIEByZXR1cm5zIHRydWUgaWYgYGZuYCBpcyBhIFN0b3JlRGVmaW5pdGlvblxuICovXG5jb25zdCBpc1VzZVN0b3JlID0gKGZuKSA9PiB7XG4gICAgcmV0dXJuIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZm4uJGlkID09PSAnc3RyaW5nJztcbn07XG4vKipcbiAqIE11dGF0ZXMgaW4gcGxhY2UgYG5ld1N0YXRlYCB3aXRoIGBvbGRTdGF0ZWAgdG8gX2hvdCB1cGRhdGVfIGl0LiBJdCB3aWxsXG4gKiByZW1vdmUgYW55IGtleSBub3QgZXhpc3RpbmcgaW4gYG5ld1N0YXRlYCBhbmQgcmVjdXJzaXZlbHkgbWVyZ2UgcGxhaW5cbiAqIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIG5ld1N0YXRlIC0gbmV3IHN0YXRlIG9iamVjdCB0byBiZSBwYXRjaGVkXG4gKiBAcGFyYW0gb2xkU3RhdGUgLSBvbGQgc3RhdGUgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBwYXRjaCBuZXdTdGF0ZVxuICogQHJldHVybnMgLSBuZXdTdGF0ZVxuICovXG5mdW5jdGlvbiBwYXRjaE9iamVjdChuZXdTdGF0ZSwgb2xkU3RhdGUpIHtcbiAgICAvLyBubyBuZWVkIHRvIGdvIHRocm91Z2ggc3ltYm9scyBiZWNhdXNlIHRoZXkgY2Fubm90IGJlIHNlcmlhbGl6ZWQgYW55d2F5XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2xkU3RhdGUpIHtcbiAgICAgICAgY29uc3Qgc3ViUGF0Y2ggPSBvbGRTdGF0ZVtrZXldO1xuICAgICAgICAvLyBza2lwIHRoZSB3aG9sZSBzdWIgdHJlZVxuICAgICAgICBpZiAoIShrZXkgaW4gbmV3U3RhdGUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IG5ld1N0YXRlW2tleV07XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHRhcmdldFZhbHVlKSAmJlxuICAgICAgICAgICAgaXNQbGFpbk9iamVjdChzdWJQYXRjaCkgJiZcbiAgICAgICAgICAgICFpc1JlZihzdWJQYXRjaCkgJiZcbiAgICAgICAgICAgICFpc1JlYWN0aXZlKHN1YlBhdGNoKSkge1xuICAgICAgICAgICAgbmV3U3RhdGVba2V5XSA9IHBhdGNoT2JqZWN0KHRhcmdldFZhbHVlLCBzdWJQYXRjaCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBvYmplY3RzIGFyZSBlaXRoZXIgYSBiaXQgbW9yZSBjb21wbGV4IChlLmcuIHJlZnMpIG9yIHByaW1pdGl2ZXMsIHNvIHdlXG4gICAgICAgICAgICAvLyBqdXN0IHNldCB0aGUgd2hvbGUgdGhpbmdcbiAgICAgICAgICAgIGlmIChpc1Z1ZTIpIHtcbiAgICAgICAgICAgICAgICBzZXQobmV3U3RhdGUsIGtleSwgc3ViUGF0Y2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3U3RhdGVba2V5XSA9IHN1YlBhdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBfYWNjZXB0XyBmdW5jdGlvbiB0byBwYXNzIHRvIGBpbXBvcnQubWV0YS5ob3RgIGluIFZpdGUgYXBwbGljYXRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBqc1xuICogY29uc3QgdXNlVXNlciA9IGRlZmluZVN0b3JlKC4uLilcbiAqIGlmIChpbXBvcnQubWV0YS5ob3QpIHtcbiAqICAgaW1wb3J0Lm1ldGEuaG90LmFjY2VwdChhY2NlcHRITVJVcGRhdGUodXNlVXNlciwgaW1wb3J0Lm1ldGEuaG90KSlcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBpbml0aWFsVXNlU3RvcmUgLSByZXR1cm4gb2YgdGhlIGRlZmluZVN0b3JlIHRvIGhvdCB1cGRhdGVcbiAqIEBwYXJhbSBob3QgLSBgaW1wb3J0Lm1ldGEuaG90YFxuICovXG5mdW5jdGlvbiBhY2NlcHRITVJVcGRhdGUoaW5pdGlhbFVzZVN0b3JlLCBob3QpIHtcbiAgICAvLyBzdHJpcCBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gaWlmZS5wcm9kXG4gICAgaWYgKCEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHsgfTtcbiAgICB9XG4gICAgcmV0dXJuIChuZXdNb2R1bGUpID0+IHtcbiAgICAgICAgY29uc3QgcGluaWEgPSBob3QuZGF0YS5waW5pYSB8fCBpbml0aWFsVXNlU3RvcmUuX3BpbmlhO1xuICAgICAgICBpZiAoIXBpbmlhKSB7XG4gICAgICAgICAgICAvLyB0aGlzIHN0b3JlIGlzIHN0aWxsIG5vdCB1c2VkXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJlc2VydmUgdGhlIHBpbmlhIGluc3RhbmNlIGFjcm9zcyBsb2Fkc1xuICAgICAgICBob3QuZGF0YS5waW5pYSA9IHBpbmlhO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnZ290IGRhdGEnLCBuZXdTdG9yZSlcbiAgICAgICAgZm9yIChjb25zdCBleHBvcnROYW1lIGluIG5ld01vZHVsZSkge1xuICAgICAgICAgICAgY29uc3QgdXNlU3RvcmUgPSBuZXdNb2R1bGVbZXhwb3J0TmFtZV07XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2hlY2tpbmcgZm9yJywgZXhwb3J0TmFtZSlcbiAgICAgICAgICAgIGlmIChpc1VzZVN0b3JlKHVzZVN0b3JlKSAmJiBwaW5pYS5fcy5oYXModXNlU3RvcmUuJGlkKSkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdBY2NlcHRpbmcgdXBkYXRlIGZvcicsIHVzZVN0b3JlLiRpZClcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHVzZVN0b3JlLiRpZDtcbiAgICAgICAgICAgICAgICBpZiAoaWQgIT09IGluaXRpYWxVc2VTdG9yZS4kaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBUaGUgaWQgb2YgdGhlIHN0b3JlIGNoYW5nZWQgZnJvbSBcIiR7aW5pdGlhbFVzZVN0b3JlLiRpZH1cIiB0byBcIiR7aWR9XCIuIFJlbG9hZGluZy5gKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGltcG9ydC5tZXRhLmhvdC5pbnZhbGlkYXRlKClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhvdC5pbnZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nU3RvcmUgPSBwaW5pYS5fcy5nZXQoaWQpO1xuICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdTdG9yZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgW1BpbmlhXTogc2tpcHBpbmcgaG1yIGJlY2F1c2Ugc3RvcmUgZG9lc24ndCBleGlzdCB5ZXRgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1c2VTdG9yZShwaW5pYSwgZXhpc3RpbmdTdG9yZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5jb25zdCBub29wID0gKCkgPT4geyB9O1xuZnVuY3Rpb24gYWRkU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbnMsIGNhbGxiYWNrLCBkZXRhY2hlZCwgb25DbGVhbnVwID0gbm9vcCkge1xuICAgIHN1YnNjcmlwdGlvbnMucHVzaChjYWxsYmFjayk7XG4gICAgY29uc3QgcmVtb3ZlU3Vic2NyaXB0aW9uID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBpZHggPSBzdWJzY3JpcHRpb25zLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICBpZiAoaWR4ID4gLTEpIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICBvbkNsZWFudXAoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgaWYgKCFkZXRhY2hlZCAmJiBnZXRDdXJyZW50U2NvcGUoKSkge1xuICAgICAgICBvblNjb3BlRGlzcG9zZShyZW1vdmVTdWJzY3JpcHRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcmVtb3ZlU3Vic2NyaXB0aW9uO1xufVxuZnVuY3Rpb24gdHJpZ2dlclN1YnNjcmlwdGlvbnMoc3Vic2NyaXB0aW9ucywgLi4uYXJncykge1xuICAgIHN1YnNjcmlwdGlvbnMuc2xpY2UoKS5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgICBjYWxsYmFjayguLi5hcmdzKTtcbiAgICB9KTtcbn1cblxuY29uc3QgZmFsbGJhY2tSdW5XaXRoQ29udGV4dCA9IChmbikgPT4gZm4oKTtcbi8qKlxuICogTWFya3MgYSBmdW5jdGlvbiBhcyBhbiBhY3Rpb24gZm9yIGAkb25BY3Rpb25gXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgQUNUSU9OX01BUktFUiA9IFN5bWJvbCgpO1xuLyoqXG4gKiBBY3Rpb24gbmFtZSBzeW1ib2wuIEFsbG93cyB0byBhZGQgYSBuYW1lIHRvIGFuIGFjdGlvbiBhZnRlciBkZWZpbmluZyBpdFxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IEFDVElPTl9OQU1FID0gU3ltYm9sKCk7XG5mdW5jdGlvbiBtZXJnZVJlYWN0aXZlT2JqZWN0cyh0YXJnZXQsIHBhdGNoVG9BcHBseSkge1xuICAgIC8vIEhhbmRsZSBNYXAgaW5zdGFuY2VzXG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIE1hcCAmJiBwYXRjaFRvQXBwbHkgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgcGF0Y2hUb0FwcGx5LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHRhcmdldC5zZXQoa2V5LCB2YWx1ZSkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTZXQgJiYgcGF0Y2hUb0FwcGx5IGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgIC8vIEhhbmRsZSBTZXQgaW5zdGFuY2VzXG4gICAgICAgIHBhdGNoVG9BcHBseS5mb3JFYWNoKHRhcmdldC5hZGQsIHRhcmdldCk7XG4gICAgfVxuICAgIC8vIG5vIG5lZWQgdG8gZ28gdGhyb3VnaCBzeW1ib2xzIGJlY2F1c2UgdGhleSBjYW5ub3QgYmUgc2VyaWFsaXplZCBhbnl3YXlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXRjaFRvQXBwbHkpIHtcbiAgICAgICAgaWYgKCFwYXRjaFRvQXBwbHkuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBzdWJQYXRjaCA9IHBhdGNoVG9BcHBseVtrZXldO1xuICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRhcmdldFtrZXldO1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdCh0YXJnZXRWYWx1ZSkgJiZcbiAgICAgICAgICAgIGlzUGxhaW5PYmplY3Qoc3ViUGF0Y2gpICYmXG4gICAgICAgICAgICB0YXJnZXQuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgICAgIWlzUmVmKHN1YlBhdGNoKSAmJlxuICAgICAgICAgICAgIWlzUmVhY3RpdmUoc3ViUGF0Y2gpKSB7XG4gICAgICAgICAgICAvLyBOT1RFOiBoZXJlIEkgd2FudGVkIHRvIHdhcm4gYWJvdXQgaW5jb25zaXN0ZW50IHR5cGVzIGJ1dCBpdCdzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIGluIHNldHVwIHN0b3JlcyBvbmUgbWlnaHRcbiAgICAgICAgICAgIC8vIHN0YXJ0IHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGFzIGEgY2VydGFpbiB0eXBlIGUuZy4gYSBNYXAsIGFuZCB0aGVuIGZvciBzb21lIHJlYXNvbiwgZHVyaW5nIFNTUiwgY2hhbmdlIHRoYXRcbiAgICAgICAgICAgIC8vIHRvIGB1bmRlZmluZWRgLiBXaGVuIHRyeWluZyB0byBoeWRyYXRlLCB3ZSB3YW50IHRvIG92ZXJyaWRlIHRoZSBNYXAgd2l0aCBgdW5kZWZpbmVkYC5cbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gbWVyZ2VSZWFjdGl2ZU9iamVjdHModGFyZ2V0VmFsdWUsIHN1YlBhdGNoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHN1YlBhdGNoIGlzIGEgdmFsaWQgdmFsdWVcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gc3ViUGF0Y2g7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbmNvbnN0IHNraXBIeWRyYXRlU3ltYm9sID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpXG4gICAgPyBTeW1ib2woJ3BpbmlhOnNraXBIeWRyYXRpb24nKVxuICAgIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gU3ltYm9sKCk7XG5jb25zdCBza2lwSHlkcmF0ZU1hcCA9IC8qI19fUFVSRV9fKi8gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogVGVsbHMgUGluaWEgdG8gc2tpcCB0aGUgaHlkcmF0aW9uIHByb2Nlc3Mgb2YgYSBnaXZlbiBvYmplY3QuIFRoaXMgaXMgdXNlZnVsIGluIHNldHVwIHN0b3JlcyAob25seSkgd2hlbiB5b3UgcmV0dXJuIGFcbiAqIHN0YXRlZnVsIG9iamVjdCBpbiB0aGUgc3RvcmUgYnV0IGl0IGlzbid0IHJlYWxseSBzdGF0ZS4gZS5nLiByZXR1cm5pbmcgYSByb3V0ZXIgaW5zdGFuY2UgaW4gYSBzZXR1cCBzdG9yZS5cbiAqXG4gKiBAcGFyYW0gb2JqIC0gdGFyZ2V0IG9iamVjdFxuICogQHJldHVybnMgb2JqXG4gKi9cbmZ1bmN0aW9uIHNraXBIeWRyYXRlKG9iaikge1xuICAgIHJldHVybiBpc1Z1ZTJcbiAgICAgICAgPyAvLyBpbiBAdnVlL2NvbXBvc2l0aW9uLWFwaSwgdGhlIHJlZnMgYXJlIHNlYWxlZCBzbyBkZWZpbmVQcm9wZXJ0eSBkb2Vzbid0IHdvcmsuLi5cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHNraXBIeWRyYXRlTWFwLnNldChvYmosIDEpICYmIG9ialxuICAgICAgICA6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHNraXBIeWRyYXRlU3ltYm9sLCB7fSk7XG59XG4vKipcbiAqIFJldHVybnMgd2hldGhlciBhIHZhbHVlIHNob3VsZCBiZSBoeWRyYXRlZFxuICpcbiAqIEBwYXJhbSBvYmogLSB0YXJnZXQgdmFyaWFibGVcbiAqIEByZXR1cm5zIHRydWUgaWYgYG9iamAgc2hvdWxkIGJlIGh5ZHJhdGVkXG4gKi9cbmZ1bmN0aW9uIHNob3VsZEh5ZHJhdGUob2JqKSB7XG4gICAgcmV0dXJuIGlzVnVlMlxuICAgICAgICA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovICFza2lwSHlkcmF0ZU1hcC5oYXMob2JqKVxuICAgICAgICA6ICFpc1BsYWluT2JqZWN0KG9iaikgfHwgIW9iai5oYXNPd25Qcm9wZXJ0eShza2lwSHlkcmF0ZVN5bWJvbCk7XG59XG5jb25zdCB7IGFzc2lnbiB9ID0gT2JqZWN0O1xuZnVuY3Rpb24gaXNDb21wdXRlZChvKSB7XG4gICAgcmV0dXJuICEhKGlzUmVmKG8pICYmIG8uZWZmZWN0KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnNTdG9yZShpZCwgb3B0aW9ucywgcGluaWEsIGhvdCkge1xuICAgIGNvbnN0IHsgc3RhdGUsIGFjdGlvbnMsIGdldHRlcnMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0gcGluaWEuc3RhdGUudmFsdWVbaWRdO1xuICAgIGxldCBzdG9yZTtcbiAgICBmdW5jdGlvbiBzZXR1cCgpIHtcbiAgICAgICAgaWYgKCFpbml0aWFsU3RhdGUgJiYgKCEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgIWhvdCkpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKGlzVnVlMikge1xuICAgICAgICAgICAgICAgIHNldChwaW5pYS5zdGF0ZS52YWx1ZSwgaWQsIHN0YXRlID8gc3RhdGUoKSA6IHt9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBpbmlhLnN0YXRlLnZhbHVlW2lkXSA9IHN0YXRlID8gc3RhdGUoKSA6IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGF2b2lkIGNyZWF0aW5nIGEgc3RhdGUgaW4gcGluaWEuc3RhdGUudmFsdWVcbiAgICAgICAgY29uc3QgbG9jYWxTdGF0ZSA9IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBob3RcbiAgICAgICAgICAgID8gLy8gdXNlIHJlZigpIHRvIHVud3JhcCByZWZzIGluc2lkZSBzdGF0ZSBUT0RPOiBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIG5lY2Vzc2FyeVxuICAgICAgICAgICAgICAgIHRvUmVmcyhyZWYoc3RhdGUgPyBzdGF0ZSgpIDoge30pLnZhbHVlKVxuICAgICAgICAgICAgOiB0b1JlZnMocGluaWEuc3RhdGUudmFsdWVbaWRdKTtcbiAgICAgICAgcmV0dXJuIGFzc2lnbihsb2NhbFN0YXRlLCBhY3Rpb25zLCBPYmplY3Qua2V5cyhnZXR0ZXJzIHx8IHt9KS5yZWR1Y2UoKGNvbXB1dGVkR2V0dGVycywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBuYW1lIGluIGxvY2FsU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFvwn42NXTogQSBnZXR0ZXIgY2Fubm90IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBhbm90aGVyIHN0YXRlIHByb3BlcnR5LiBSZW5hbWUgb25lIG9mIHRoZW0uIEZvdW5kIHdpdGggXCIke25hbWV9XCIgaW4gc3RvcmUgXCIke2lkfVwiLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcHV0ZWRHZXR0ZXJzW25hbWVdID0gbWFya1Jhdyhjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0QWN0aXZlUGluaWEocGluaWEpO1xuICAgICAgICAgICAgICAgIC8vIGl0IHdhcyBjcmVhdGVkIGp1c3QgYmVmb3JlXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBwaW5pYS5fcy5nZXQoaWQpO1xuICAgICAgICAgICAgICAgIC8vIGFsbG93IGNyb3NzIHVzaW5nIHN0b3Jlc1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmIChpc1Z1ZTIgJiYgIXN0b3JlLl9yKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgIC8vIHJldHVybiBnZXR0ZXJzIVtuYW1lXS5jYWxsKGNvbnRleHQsIGNvbnRleHQpXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogYXZvaWQgcmVhZGluZyB0aGUgZ2V0dGVyIHdoaWxlIGFzc2lnbmluZyB3aXRoIGEgZ2xvYmFsIHZhcmlhYmxlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldHRlcnNbbmFtZV0uY2FsbChzdG9yZSwgc3RvcmUpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVkR2V0dGVycztcbiAgICAgICAgfSwge30pKTtcbiAgICB9XG4gICAgc3RvcmUgPSBjcmVhdGVTZXR1cFN0b3JlKGlkLCBzZXR1cCwgb3B0aW9ucywgcGluaWEsIGhvdCwgdHJ1ZSk7XG4gICAgcmV0dXJuIHN0b3JlO1xufVxuZnVuY3Rpb24gY3JlYXRlU2V0dXBTdG9yZSgkaWQsIHNldHVwLCBvcHRpb25zID0ge30sIHBpbmlhLCBob3QsIGlzT3B0aW9uc1N0b3JlKSB7XG4gICAgbGV0IHNjb3BlO1xuICAgIGNvbnN0IG9wdGlvbnNGb3JQbHVnaW4gPSBhc3NpZ24oeyBhY3Rpb25zOiB7fSB9LCBvcHRpb25zKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFwaW5pYS5fZS5hY3RpdmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaW5pYSBkZXN0cm95ZWQnKTtcbiAgICB9XG4gICAgLy8gd2F0Y2hlciBvcHRpb25zIGZvciAkc3Vic2NyaWJlXG4gICAgY29uc3QgJHN1YnNjcmliZU9wdGlvbnMgPSB7IGRlZXA6IHRydWUgfTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWlzVnVlMikge1xuICAgICAgICAkc3Vic2NyaWJlT3B0aW9ucy5vblRyaWdnZXIgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAoaXNMaXN0ZW5pbmcpIHtcbiAgICAgICAgICAgICAgICBkZWJ1Z2dlckV2ZW50cyA9IGV2ZW50O1xuICAgICAgICAgICAgICAgIC8vIGF2b2lkIHRyaWdnZXJpbmcgdGhpcyB3aGlsZSB0aGUgc3RvcmUgaXMgYmVpbmcgYnVpbHQgYW5kIHRoZSBzdGF0ZSBpcyBiZWluZyBzZXQgaW4gcGluaWFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzTGlzdGVuaW5nID09IGZhbHNlICYmICFzdG9yZS5faG90VXBkYXRpbmcpIHtcbiAgICAgICAgICAgICAgICAvLyBsZXQgcGF0Y2ggc2VuZCBhbGwgdGhlIGV2ZW50cyB0b2dldGhlciBsYXRlclxuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGVidWdnZXJFdmVudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyRXZlbnRzLnB1c2goZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign8J+NjSBkZWJ1Z2dlckV2ZW50cyBzaG91bGQgYmUgYW4gYXJyYXkuIFRoaXMgaXMgbW9zdCBsaWtlbHkgYW4gaW50ZXJuYWwgUGluaWEgYnVnLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gaW50ZXJuYWwgc3RhdGVcbiAgICBsZXQgaXNMaXN0ZW5pbmc7IC8vIHNldCB0byB0cnVlIGF0IHRoZSBlbmRcbiAgICBsZXQgaXNTeW5jTGlzdGVuaW5nOyAvLyBzZXQgdG8gdHJ1ZSBhdCB0aGUgZW5kXG4gICAgbGV0IHN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICBsZXQgYWN0aW9uU3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIGxldCBkZWJ1Z2dlckV2ZW50cztcbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSBwaW5pYS5zdGF0ZS52YWx1ZVskaWRdO1xuICAgIC8vIGF2b2lkIHNldHRpbmcgdGhlIHN0YXRlIGZvciBvcHRpb24gc3RvcmVzIGlmIGl0IGlzIHNldFxuICAgIC8vIGJ5IHRoZSBzZXR1cFxuICAgIGlmICghaXNPcHRpb25zU3RvcmUgJiYgIWluaXRpYWxTdGF0ZSAmJiAoIShwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCAhaG90KSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGlzVnVlMikge1xuICAgICAgICAgICAgc2V0KHBpbmlhLnN0YXRlLnZhbHVlLCAkaWQsIHt9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBpbmlhLnN0YXRlLnZhbHVlWyRpZF0gPSB7fTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBob3RTdGF0ZSA9IHJlZih7fSk7XG4gICAgLy8gYXZvaWQgdHJpZ2dlcmluZyB0b28gbWFueSBsaXN0ZW5lcnNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvcGluaWEvaXNzdWVzLzExMjlcbiAgICBsZXQgYWN0aXZlTGlzdGVuZXI7XG4gICAgZnVuY3Rpb24gJHBhdGNoKHBhcnRpYWxTdGF0ZU9yTXV0YXRvcikge1xuICAgICAgICBsZXQgc3Vic2NyaXB0aW9uTXV0YXRpb247XG4gICAgICAgIGlzTGlzdGVuaW5nID0gaXNTeW5jTGlzdGVuaW5nID0gZmFsc2U7XG4gICAgICAgIC8vIHJlc2V0IHRoZSBkZWJ1Z2dlciBldmVudHMgc2luY2UgcGF0Y2hlcyBhcmUgc3luY1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICAgICAgICBkZWJ1Z2dlckV2ZW50cyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcGFydGlhbFN0YXRlT3JNdXRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwYXJ0aWFsU3RhdGVPck11dGF0b3IocGluaWEuc3RhdGUudmFsdWVbJGlkXSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb25NdXRhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBNdXRhdGlvblR5cGUucGF0Y2hGdW5jdGlvbixcbiAgICAgICAgICAgICAgICBzdG9yZUlkOiAkaWQsXG4gICAgICAgICAgICAgICAgZXZlbnRzOiBkZWJ1Z2dlckV2ZW50cyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtZXJnZVJlYWN0aXZlT2JqZWN0cyhwaW5pYS5zdGF0ZS52YWx1ZVskaWRdLCBwYXJ0aWFsU3RhdGVPck11dGF0b3IpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uTXV0YXRpb24gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogTXV0YXRpb25UeXBlLnBhdGNoT2JqZWN0LFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHBhcnRpYWxTdGF0ZU9yTXV0YXRvcixcbiAgICAgICAgICAgICAgICBzdG9yZUlkOiAkaWQsXG4gICAgICAgICAgICAgICAgZXZlbnRzOiBkZWJ1Z2dlckV2ZW50cyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXlMaXN0ZW5lcklkID0gKGFjdGl2ZUxpc3RlbmVyID0gU3ltYm9sKCkpO1xuICAgICAgICBuZXh0VGljaygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZUxpc3RlbmVyID09PSBteUxpc3RlbmVySWQpIHtcbiAgICAgICAgICAgICAgICBpc0xpc3RlbmluZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpc1N5bmNMaXN0ZW5pbmcgPSB0cnVlO1xuICAgICAgICAvLyBiZWNhdXNlIHdlIHBhdXNlZCB0aGUgd2F0Y2hlciwgd2UgbmVlZCB0byBtYW51YWxseSBjYWxsIHRoZSBzdWJzY3JpcHRpb25zXG4gICAgICAgIHRyaWdnZXJTdWJzY3JpcHRpb25zKHN1YnNjcmlwdGlvbnMsIHN1YnNjcmlwdGlvbk11dGF0aW9uLCBwaW5pYS5zdGF0ZS52YWx1ZVskaWRdKTtcbiAgICB9XG4gICAgY29uc3QgJHJlc2V0ID0gaXNPcHRpb25zU3RvcmVcbiAgICAgICAgPyBmdW5jdGlvbiAkcmVzZXQoKSB7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXRlIH0gPSBvcHRpb25zO1xuICAgICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZSA/IHN0YXRlKCkgOiB7fTtcbiAgICAgICAgICAgIC8vIHdlIHVzZSBhIHBhdGNoIHRvIGdyb3VwIGFsbCBjaGFuZ2VzIGludG8gb25lIHNpbmdsZSBzdWJzY3JpcHRpb25cbiAgICAgICAgICAgIHRoaXMuJHBhdGNoKCgkc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBGSVhNRTogc2hvdWxkbid0IGVycm9yP1xuICAgICAgICAgICAgICAgIGFzc2lnbigkc3RhdGUsIG5ld1N0YXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKVxuICAgICAgICAgICAgICAgID8gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYPCfjY06IFN0b3JlIFwiJHskaWR9XCIgaXMgYnVpbHQgdXNpbmcgdGhlIHNldHVwIHN5bnRheCBhbmQgZG9lcyBub3QgaW1wbGVtZW50ICRyZXNldCgpLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG5vb3A7XG4gICAgZnVuY3Rpb24gJGRpc3Bvc2UoKSB7XG4gICAgICAgIHNjb3BlLnN0b3AoKTtcbiAgICAgICAgc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgICAgICBhY3Rpb25TdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgIHBpbmlhLl9zLmRlbGV0ZSgkaWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgdGhhdCB3cmFwcyBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgdHJhY2tlZCB3aXRoICRvbkFjdGlvblxuICAgICAqIEBwYXJhbSBmbiAtIGFjdGlvbiB0byB3cmFwXG4gICAgICogQHBhcmFtIG5hbWUgLSBuYW1lIG9mIHRoZSBhY3Rpb25cbiAgICAgKi9cbiAgICBjb25zdCBhY3Rpb24gPSAoZm4sIG5hbWUgPSAnJykgPT4ge1xuICAgICAgICBpZiAoQUNUSU9OX01BUktFUiBpbiBmbikge1xuICAgICAgICAgICAgZm5bQUNUSU9OX05BTUVdID0gbmFtZTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3cmFwcGVkQWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2V0QWN0aXZlUGluaWEocGluaWEpO1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IEFycmF5LmZyb20oYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyQ2FsbGJhY2tMaXN0ID0gW107XG4gICAgICAgICAgICBjb25zdCBvbkVycm9yQ2FsbGJhY2tMaXN0ID0gW107XG4gICAgICAgICAgICBmdW5jdGlvbiBhZnRlcihjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGFmdGVyQ2FsbGJhY2tMaXN0LnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gb25FcnJvcihjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIG9uRXJyb3JDYWxsYmFja0xpc3QucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICB0cmlnZ2VyU3Vic2NyaXB0aW9ucyhhY3Rpb25TdWJzY3JpcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgICBuYW1lOiB3cmFwcGVkQWN0aW9uW0FDVElPTl9OQU1FXSxcbiAgICAgICAgICAgICAgICBzdG9yZSxcbiAgICAgICAgICAgICAgICBhZnRlcixcbiAgICAgICAgICAgICAgICBvbkVycm9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgcmV0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXQgPSBmbi5hcHBseSh0aGlzICYmIHRoaXMuJGlkID09PSAkaWQgPyB0aGlzIDogc3RvcmUsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBzeW5jIGVycm9yc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlclN1YnNjcmlwdGlvbnMob25FcnJvckNhbGxiYWNrTGlzdCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0XG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyU3Vic2NyaXB0aW9ucyhhZnRlckNhbGxiYWNrTGlzdCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyU3Vic2NyaXB0aW9ucyhvbkVycm9yQ2FsbGJhY2tMaXN0LCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0cmlnZ2VyIGFmdGVyIGNhbGxiYWNrc1xuICAgICAgICAgICAgdHJpZ2dlclN1YnNjcmlwdGlvbnMoYWZ0ZXJDYWxsYmFja0xpc3QsIHJldCk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9O1xuICAgICAgICB3cmFwcGVkQWN0aW9uW0FDVElPTl9NQVJLRVJdID0gdHJ1ZTtcbiAgICAgICAgd3JhcHBlZEFjdGlvbltBQ1RJT05fTkFNRV0gPSBuYW1lOyAvLyB3aWxsIGJlIHNldCBsYXRlclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiB3ZSBhcmUgaW50ZW50aW9uYWxseSBsaW1pdGluZyB0aGUgcmV0dXJuZWQgdHlwZSB0byBqdXN0IEZuXG4gICAgICAgIC8vIGJlY2F1c2UgYWxsIHRoZSBhZGRlZCBwcm9wZXJ0aWVzIGFyZSBpbnRlcm5hbHMgdGhhdCBhcmUgZXhwb3NlZCB0aHJvdWdoIGAkb25BY3Rpb24oKWAgb25seVxuICAgICAgICByZXR1cm4gd3JhcHBlZEFjdGlvbjtcbiAgICB9O1xuICAgIGNvbnN0IF9obXJQYXlsb2FkID0gLyojX19QVVJFX18qLyBtYXJrUmF3KHtcbiAgICAgICAgYWN0aW9uczoge30sXG4gICAgICAgIGdldHRlcnM6IHt9LFxuICAgICAgICBzdGF0ZTogW10sXG4gICAgICAgIGhvdFN0YXRlLFxuICAgIH0pO1xuICAgIGNvbnN0IHBhcnRpYWxTdG9yZSA9IHtcbiAgICAgICAgX3A6IHBpbmlhLFxuICAgICAgICAvLyBfczogc2NvcGUsXG4gICAgICAgICRpZCxcbiAgICAgICAgJG9uQWN0aW9uOiBhZGRTdWJzY3JpcHRpb24uYmluZChudWxsLCBhY3Rpb25TdWJzY3JpcHRpb25zKSxcbiAgICAgICAgJHBhdGNoLFxuICAgICAgICAkcmVzZXQsXG4gICAgICAgICRzdWJzY3JpYmUoY2FsbGJhY2ssIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlU3Vic2NyaXB0aW9uID0gYWRkU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbnMsIGNhbGxiYWNrLCBvcHRpb25zLmRldGFjaGVkLCAoKSA9PiBzdG9wV2F0Y2hlcigpKTtcbiAgICAgICAgICAgIGNvbnN0IHN0b3BXYXRjaGVyID0gc2NvcGUucnVuKCgpID0+IHdhdGNoKCgpID0+IHBpbmlhLnN0YXRlLnZhbHVlWyRpZF0sIChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZsdXNoID09PSAnc3luYycgPyBpc1N5bmNMaXN0ZW5pbmcgOiBpc0xpc3RlbmluZykge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZUlkOiAkaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBNdXRhdGlvblR5cGUuZGlyZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiBkZWJ1Z2dlckV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgfSwgc3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGFzc2lnbih7fSwgJHN1YnNjcmliZU9wdGlvbnMsIG9wdGlvbnMpKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVtb3ZlU3Vic2NyaXB0aW9uO1xuICAgICAgICB9LFxuICAgICAgICAkZGlzcG9zZSxcbiAgICB9O1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc1Z1ZTIpIHtcbiAgICAgICAgLy8gc3RhcnQgYXMgbm9uIHJlYWR5XG4gICAgICAgIHBhcnRpYWxTdG9yZS5fciA9IGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzdG9yZSA9IHJlYWN0aXZlKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB8fCAoKCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgKHR5cGVvZiBfX1ZVRV9QUk9EX0RFVlRPT0xTX18gIT09ICd1bmRlZmluZWQnICYmIF9fVlVFX1BST0RfREVWVE9PTFNfXykpICYmICEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0JykpICYmIElTX0NMSUVOVClcbiAgICAgICAgPyBhc3NpZ24oe1xuICAgICAgICAgICAgX2htclBheWxvYWQsXG4gICAgICAgICAgICBfY3VzdG9tUHJvcGVydGllczogbWFya1JhdyhuZXcgU2V0KCkpLCAvLyBkZXZ0b29scyBjdXN0b20gcHJvcGVydGllc1xuICAgICAgICB9LCBwYXJ0aWFsU3RvcmVcbiAgICAgICAgLy8gbXVzdCBiZSBhZGRlZCBsYXRlclxuICAgICAgICAvLyBzZXR1cFN0b3JlXG4gICAgICAgIClcbiAgICAgICAgOiBwYXJ0aWFsU3RvcmUpO1xuICAgIC8vIHN0b3JlIHRoZSBwYXJ0aWFsIHN0b3JlIG5vdyBzbyB0aGUgc2V0dXAgb2Ygc3RvcmVzIGNhbiBpbnN0YW50aWF0ZSBlYWNoIG90aGVyIGJlZm9yZSB0aGV5IGFyZSBmaW5pc2hlZCB3aXRob3V0XG4gICAgLy8gY3JlYXRpbmcgaW5maW5pdGUgbG9vcHMuXG4gICAgcGluaWEuX3Muc2V0KCRpZCwgc3RvcmUpO1xuICAgIGNvbnN0IHJ1bldpdGhDb250ZXh0ID0gKHBpbmlhLl9hICYmIHBpbmlhLl9hLnJ1bldpdGhDb250ZXh0KSB8fCBmYWxsYmFja1J1bldpdGhDb250ZXh0O1xuICAgIC8vIFRPRE86IGlkZWEgY3JlYXRlIHNraXBTZXJpYWxpemUgdGhhdCBtYXJrcyBwcm9wZXJ0aWVzIGFzIG5vbiBzZXJpYWxpemFibGUgYW5kIHRoZXkgYXJlIHNraXBwZWRcbiAgICBjb25zdCBzZXR1cFN0b3JlID0gcnVuV2l0aENvbnRleHQoKCkgPT4gcGluaWEuX2UucnVuKCgpID0+IChzY29wZSA9IGVmZmVjdFNjb3BlKCkpLnJ1bigoKSA9PiBzZXR1cCh7IGFjdGlvbiB9KSkpKTtcbiAgICAvLyBvdmVyd3JpdGUgZXhpc3RpbmcgYWN0aW9ucyB0byBzdXBwb3J0ICRvbkFjdGlvblxuICAgIGZvciAoY29uc3Qga2V5IGluIHNldHVwU3RvcmUpIHtcbiAgICAgICAgY29uc3QgcHJvcCA9IHNldHVwU3RvcmVba2V5XTtcbiAgICAgICAgaWYgKChpc1JlZihwcm9wKSAmJiAhaXNDb21wdXRlZChwcm9wKSkgfHwgaXNSZWFjdGl2ZShwcm9wKSkge1xuICAgICAgICAgICAgLy8gbWFyayBpdCBhcyBhIHBpZWNlIG9mIHN0YXRlIHRvIGJlIHNlcmlhbGl6ZWRcbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgaG90KSB7XG4gICAgICAgICAgICAgICAgc2V0KGhvdFN0YXRlLnZhbHVlLCBrZXksIHRvUmVmKHNldHVwU3RvcmUsIGtleSkpO1xuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZU9wdGlvblN0b3JlIGRpcmVjdGx5IHNldHMgdGhlIHN0YXRlIGluIHBpbmlhLnN0YXRlLnZhbHVlIHNvIHdlXG4gICAgICAgICAgICAgICAgLy8gY2FuIGp1c3Qgc2tpcCB0aGF0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghaXNPcHRpb25zU3RvcmUpIHtcbiAgICAgICAgICAgICAgICAvLyBpbiBzZXR1cCBzdG9yZXMgd2UgbXVzdCBoeWRyYXRlIHRoZSBzdGF0ZSBhbmQgc3luYyBwaW5pYSBzdGF0ZSB0cmVlIHdpdGggdGhlIHJlZnMgdGhlIHVzZXIganVzdCBjcmVhdGVkXG4gICAgICAgICAgICAgICAgaWYgKGluaXRpYWxTdGF0ZSAmJiBzaG91bGRIeWRyYXRlKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1JlZihwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcC52YWx1ZSA9IGluaXRpYWxTdGF0ZVtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvYmFibHkgYSByZWFjdGl2ZSBvYmplY3QsIGxldHMgcmVjdXJzaXZlbHkgYXNzaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBwcm9wIGlzIHVua25vd25cbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlUmVhY3RpdmVPYmplY3RzKHByb3AsIGluaXRpYWxTdGF0ZVtrZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyB0cmFuc2ZlciB0aGUgcmVmIHRvIHRoZSBwaW5pYSBzdGF0ZSB0byBrZWVwIGV2ZXJ5dGhpbmcgaW4gc3luY1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmIChpc1Z1ZTIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0KHBpbmlhLnN0YXRlLnZhbHVlWyRpZF0sIGtleSwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwaW5pYS5zdGF0ZS52YWx1ZVskaWRdW2tleV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICAgICAgICAgICAgX2htclBheWxvYWQuc3RhdGUucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYWN0aW9uXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHByb3AgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvblZhbHVlID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmIGhvdCA/IHByb3AgOiBhY3Rpb24ocHJvcCwga2V5KTtcbiAgICAgICAgICAgIC8vIHRoaXMgYSBob3QgbW9kdWxlIHJlcGxhY2VtZW50IHN0b3JlIGJlY2F1c2UgdGhlIGhvdFVwZGF0ZSBtZXRob2QgbmVlZHNcbiAgICAgICAgICAgIC8vIHRvIGRvIGl0IHdpdGggdGhlIHJpZ2h0IGNvbnRleHRcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKGlzVnVlMikge1xuICAgICAgICAgICAgICAgIHNldChzZXR1cFN0b3JlLCBrZXksIGFjdGlvblZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICBzZXR1cFN0b3JlW2tleV0gPSBhY3Rpb25WYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICAgICAgICAgICAgX2htclBheWxvYWQuYWN0aW9uc1trZXldID0gcHJvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGxpc3QgYWN0aW9ucyBzbyB0aGV5IGNhbiBiZSB1c2VkIGluIHBsdWdpbnNcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIG9wdGlvbnNGb3JQbHVnaW4uYWN0aW9uc1trZXldID0gcHJvcDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICAgICAgICAgIC8vIGFkZCBnZXR0ZXJzIGZvciBkZXZ0b29sc1xuICAgICAgICAgICAgaWYgKGlzQ29tcHV0ZWQocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBfaG1yUGF5bG9hZC5nZXR0ZXJzW2tleV0gPSBpc09wdGlvbnNTdG9yZVxuICAgICAgICAgICAgICAgICAgICA/IC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZ2V0dGVyc1trZXldXG4gICAgICAgICAgICAgICAgICAgIDogcHJvcDtcbiAgICAgICAgICAgICAgICBpZiAoSVNfQ0xJRU5UKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldHRlcnMgPSBzZXR1cFN0b3JlLl9nZXR0ZXJzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBzYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2V0dXBTdG9yZS5fZ2V0dGVycyA9IG1hcmtSYXcoW10pKTtcbiAgICAgICAgICAgICAgICAgICAgZ2V0dGVycy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGFkZCB0aGUgc3RhdGUsIGdldHRlcnMsIGFuZCBhY3Rpb24gcHJvcGVydGllc1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc1Z1ZTIpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoc2V0dXBTdG9yZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBzZXQoc3RvcmUsIGtleSwgc2V0dXBTdG9yZVtrZXldKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhc3NpZ24oc3RvcmUsIHNldHVwU3RvcmUpO1xuICAgICAgICAvLyBhbGxvd3MgcmV0cmlldmluZyByZWFjdGl2ZSBvYmplY3RzIHdpdGggYHN0b3JlVG9SZWZzKClgLiBNdXN0IGJlIGNhbGxlZCBhZnRlciBhc3NpZ25pbmcgdG8gdGhlIHJlYWN0aXZlIG9iamVjdC5cbiAgICAgICAgLy8gTWFrZSBgc3RvcmVUb1JlZnMoKWAgd29yayB3aXRoIGByZWFjdGl2ZSgpYCAjNzk5XG4gICAgICAgIGFzc2lnbih0b1JhdyhzdG9yZSksIHNldHVwU3RvcmUpO1xuICAgIH1cbiAgICAvLyB1c2UgdGhpcyBpbnN0ZWFkIG9mIGEgY29tcHV0ZWQgd2l0aCBzZXR0ZXIgdG8gYmUgYWJsZSB0byBjcmVhdGUgaXQgYW55d2hlcmVcbiAgICAvLyB3aXRob3V0IGxpbmtpbmcgdGhlIGNvbXB1dGVkIGxpZmVzcGFuIHRvIHdoZXJldmVyIHRoZSBzdG9yZSBpcyBmaXJzdFxuICAgIC8vIGNyZWF0ZWQuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0b3JlLCAnJHN0YXRlJywge1xuICAgICAgICBnZXQ6ICgpID0+ICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgaG90ID8gaG90U3RhdGUudmFsdWUgOiBwaW5pYS5zdGF0ZS52YWx1ZVskaWRdKSxcbiAgICAgICAgc2V0OiAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiBob3QpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBzZXQgaG90U3RhdGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRwYXRjaCgoJHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogRklYTUU6IHNob3VsZG4ndCBlcnJvcj9cbiAgICAgICAgICAgICAgICBhc3NpZ24oJHN0YXRlLCBzdGF0ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICAvLyBhZGQgdGhlIGhvdFVwZGF0ZSBiZWZvcmUgcGx1Z2lucyB0byBhbGxvdyB0aGVtIHRvIG92ZXJyaWRlIGl0XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICAgIHN0b3JlLl9ob3RVcGRhdGUgPSBtYXJrUmF3KChuZXdTdG9yZSkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuX2hvdFVwZGF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIG5ld1N0b3JlLl9obXJQYXlsb2FkLnN0YXRlLmZvckVhY2goKHN0YXRlS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlS2V5IGluIHN0b3JlLiRzdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdTdGF0ZVRhcmdldCA9IG5ld1N0b3JlLiRzdGF0ZVtzdGF0ZUtleV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZFN0YXRlU291cmNlID0gc3RvcmUuJHN0YXRlW3N0YXRlS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBuZXdTdGF0ZVRhcmdldCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUGxhaW5PYmplY3QobmV3U3RhdGVUYXJnZXQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BsYWluT2JqZWN0KG9sZFN0YXRlU291cmNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hPYmplY3QobmV3U3RhdGVUYXJnZXQsIG9sZFN0YXRlU291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zZmVyIHRoZSByZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0b3JlLiRzdGF0ZVtzdGF0ZUtleV0gPSBvbGRTdGF0ZVNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBwYXRjaCBkaXJlY3QgYWNjZXNzIHByb3BlcnRpZXMgdG8gYWxsb3cgc3RvcmUuc3RhdGVQcm9wZXJ0eSB0byB3b3JrIGFzXG4gICAgICAgICAgICAgICAgLy8gc3RvcmUuJHN0YXRlLnN0YXRlUHJvcGVydHlcbiAgICAgICAgICAgICAgICBzZXQoc3RvcmUsIHN0YXRlS2V5LCB0b1JlZihuZXdTdG9yZS4kc3RhdGUsIHN0YXRlS2V5KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBkZWxldGVkIHN0YXRlIHByb3BlcnRpZXNcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHN0b3JlLiRzdGF0ZSkuZm9yRWFjaCgoc3RhdGVLZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIShzdGF0ZUtleSBpbiBuZXdTdG9yZS4kc3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbChzdG9yZSwgc3RhdGVLZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gYXZvaWQgZGV2dG9vbHMgbG9nZ2luZyB0aGlzIGFzIGEgbXV0YXRpb25cbiAgICAgICAgICAgIGlzTGlzdGVuaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpc1N5bmNMaXN0ZW5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHBpbmlhLnN0YXRlLnZhbHVlWyRpZF0gPSB0b1JlZihuZXdTdG9yZS5faG1yUGF5bG9hZCwgJ2hvdFN0YXRlJyk7XG4gICAgICAgICAgICBpc1N5bmNMaXN0ZW5pbmcgPSB0cnVlO1xuICAgICAgICAgICAgbmV4dFRpY2soKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpc0xpc3RlbmluZyA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0aW9uTmFtZSBpbiBuZXdTdG9yZS5faG1yUGF5bG9hZC5hY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uRm4gPSBuZXdTdG9yZVthY3Rpb25OYW1lXTtcbiAgICAgICAgICAgICAgICBzZXQoc3RvcmUsIGFjdGlvbk5hbWUsIGFjdGlvbihhY3Rpb25GbiwgYWN0aW9uTmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVE9ETzogZG9lcyB0aGlzIHdvcmsgaW4gYm90aCBzZXR1cCBhbmQgb3B0aW9uIHN0b3JlP1xuICAgICAgICAgICAgZm9yIChjb25zdCBnZXR0ZXJOYW1lIGluIG5ld1N0b3JlLl9obXJQYXlsb2FkLmdldHRlcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBnZXR0ZXIgPSBuZXdTdG9yZS5faG1yUGF5bG9hZC5nZXR0ZXJzW2dldHRlck5hbWVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdldHRlclZhbHVlID0gaXNPcHRpb25zU3RvcmVcbiAgICAgICAgICAgICAgICAgICAgPyAvLyBzcGVjaWFsIGhhbmRsaW5nIG9mIG9wdGlvbnMgYXBpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlUGluaWEocGluaWEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXIuY2FsbChzdG9yZSwgc3RvcmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBnZXR0ZXI7XG4gICAgICAgICAgICAgICAgc2V0KHN0b3JlLCBnZXR0ZXJOYW1lLCBnZXR0ZXJWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZW1vdmUgZGVsZXRlZCBnZXR0ZXJzXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhzdG9yZS5faG1yUGF5bG9hZC5nZXR0ZXJzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gbmV3U3RvcmUuX2htclBheWxvYWQuZ2V0dGVycykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsKHN0b3JlLCBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gcmVtb3ZlIG9sZCBhY3Rpb25zXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhzdG9yZS5faG1yUGF5bG9hZC5hY3Rpb25zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gbmV3U3RvcmUuX2htclBheWxvYWQuYWN0aW9ucykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsKHN0b3JlLCBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSB2YWx1ZXMgdXNlZCBpbiBkZXZ0b29scyBhbmQgdG8gYWxsb3cgZGVsZXRpbmcgbmV3IHByb3BlcnRpZXMgbGF0ZXIgb25cbiAgICAgICAgICAgIHN0b3JlLl9obXJQYXlsb2FkID0gbmV3U3RvcmUuX2htclBheWxvYWQ7XG4gICAgICAgICAgICBzdG9yZS5fZ2V0dGVycyA9IG5ld1N0b3JlLl9nZXR0ZXJzO1xuICAgICAgICAgICAgc3RvcmUuX2hvdFVwZGF0aW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoKCgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgfHwgKHR5cGVvZiBfX1ZVRV9QUk9EX0RFVlRPT0xTX18gIT09ICd1bmRlZmluZWQnICYmIF9fVlVFX1BST0RfREVWVE9PTFNfXykpICYmICEocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0JykpICYmIElTX0NMSUVOVCkge1xuICAgICAgICBjb25zdCBub25FbnVtZXJhYmxlID0ge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAvLyBhdm9pZCB3YXJuaW5nIG9uIGRldnRvb2xzIHRyeWluZyB0byBkaXNwbGF5IHRoaXMgcHJvcGVydHlcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICBbJ19wJywgJ19obXJQYXlsb2FkJywgJ19nZXR0ZXJzJywgJ19jdXN0b21Qcm9wZXJ0aWVzJ10uZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0b3JlLCBwLCBhc3NpZ24oeyB2YWx1ZTogc3RvcmVbcF0gfSwgbm9uRW51bWVyYWJsZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzVnVlMikge1xuICAgICAgICAvLyBtYXJrIHRoZSBzdG9yZSBhcyByZWFkeSBiZWZvcmUgcGx1Z2luc1xuICAgICAgICBzdG9yZS5fciA9IHRydWU7XG4gICAgfVxuICAgIC8vIGFwcGx5IGFsbCBwbHVnaW5zXG4gICAgcGluaWEuX3AuZm9yRWFjaCgoZXh0ZW5kZXIpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKCgoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8ICh0eXBlb2YgX19WVUVfUFJPRF9ERVZUT09MU19fICE9PSAndW5kZWZpbmVkJyAmJiBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pKSAmJiAhKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpKSAmJiBJU19DTElFTlQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBzY29wZS5ydW4oKCkgPT4gZXh0ZW5kZXIoe1xuICAgICAgICAgICAgICAgIHN0b3JlOiBzdG9yZSxcbiAgICAgICAgICAgICAgICBhcHA6IHBpbmlhLl9hLFxuICAgICAgICAgICAgICAgIHBpbmlhLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNGb3JQbHVnaW4sXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhleHRlbnNpb25zIHx8IHt9KS5mb3JFYWNoKChrZXkpID0+IHN0b3JlLl9jdXN0b21Qcm9wZXJ0aWVzLmFkZChrZXkpKTtcbiAgICAgICAgICAgIGFzc2lnbihzdG9yZSwgZXh0ZW5zaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3NpZ24oc3RvcmUsIHNjb3BlLnJ1bigoKSA9PiBleHRlbmRlcih7XG4gICAgICAgICAgICAgICAgc3RvcmU6IHN0b3JlLFxuICAgICAgICAgICAgICAgIGFwcDogcGluaWEuX2EsXG4gICAgICAgICAgICAgICAgcGluaWEsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc0ZvclBsdWdpbixcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmXG4gICAgICAgIHN0b3JlLiRzdGF0ZSAmJlxuICAgICAgICB0eXBlb2Ygc3RvcmUuJHN0YXRlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0eXBlb2Ygc3RvcmUuJHN0YXRlLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICFzdG9yZS4kc3RhdGUuY29uc3RydWN0b3IudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW/CfjY1dOiBUaGUgXCJzdGF0ZVwiIG11c3QgYmUgYSBwbGFpbiBvYmplY3QuIEl0IGNhbm5vdCBiZVxcbmAgK1xuICAgICAgICAgICAgYFxcdHN0YXRlOiAoKSA9PiBuZXcgTXlDbGFzcygpXFxuYCArXG4gICAgICAgICAgICBgRm91bmQgaW4gc3RvcmUgXCIke3N0b3JlLiRpZH1cIi5gKTtcbiAgICB9XG4gICAgLy8gb25seSBhcHBseSBoeWRyYXRlIHRvIG9wdGlvbiBzdG9yZXMgd2l0aCBhbiBpbml0aWFsIHN0YXRlIGluIHBpbmlhXG4gICAgaWYgKGluaXRpYWxTdGF0ZSAmJlxuICAgICAgICBpc09wdGlvbnNTdG9yZSAmJlxuICAgICAgICBvcHRpb25zLmh5ZHJhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5oeWRyYXRlKHN0b3JlLiRzdGF0ZSwgaW5pdGlhbFN0YXRlKTtcbiAgICB9XG4gICAgaXNMaXN0ZW5pbmcgPSB0cnVlO1xuICAgIGlzU3luY0xpc3RlbmluZyA9IHRydWU7XG4gICAgcmV0dXJuIHN0b3JlO1xufVxuLy8gaW1wcm92ZXMgdHJlZSBzaGFraW5nXG4vKiNfX05PX1NJREVfRUZGRUNUU19fKi9cbmZ1bmN0aW9uIGRlZmluZVN0b3JlKFxuLy8gVE9ETzogYWRkIHByb3BlciB0eXBlcyBmcm9tIGFib3ZlXG5pZE9yT3B0aW9ucywgc2V0dXAsIHNldHVwT3B0aW9ucykge1xuICAgIGxldCBpZDtcbiAgICBsZXQgb3B0aW9ucztcbiAgICBjb25zdCBpc1NldHVwU3RvcmUgPSB0eXBlb2Ygc2V0dXAgPT09ICdmdW5jdGlvbic7XG4gICAgaWYgKHR5cGVvZiBpZE9yT3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWQgPSBpZE9yT3B0aW9ucztcbiAgICAgICAgLy8gdGhlIG9wdGlvbiBzdG9yZSBzZXR1cCB3aWxsIGNvbnRhaW4gdGhlIGFjdHVhbCBvcHRpb25zIGluIHRoaXMgY2FzZVxuICAgICAgICBvcHRpb25zID0gaXNTZXR1cFN0b3JlID8gc2V0dXBPcHRpb25zIDogc2V0dXA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBvcHRpb25zID0gaWRPck9wdGlvbnM7XG4gICAgICAgIGlkID0gaWRPck9wdGlvbnMuaWQ7XG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgdHlwZW9mIGlkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBb8J+NjV06IFwiZGVmaW5lU3RvcmUoKVwiIG11c3QgYmUgcGFzc2VkIGEgc3RvcmUgaWQgYXMgaXRzIGZpcnN0IGFyZ3VtZW50LmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVzZVN0b3JlKHBpbmlhLCBob3QpIHtcbiAgICAgICAgY29uc3QgaGFzQ29udGV4dCA9IGhhc0luamVjdGlvbkNvbnRleHQoKTtcbiAgICAgICAgcGluaWEgPVxuICAgICAgICAgICAgLy8gaW4gdGVzdCBtb2RlLCBpZ25vcmUgdGhlIGFyZ3VtZW50IHByb3ZpZGVkIGFzIHdlIGNhbiBhbHdheXMgcmV0cmlldmUgYVxuICAgICAgICAgICAgLy8gcGluaWEgaW5zdGFuY2Ugd2l0aCBnZXRBY3RpdmVQaW5pYSgpXG4gICAgICAgICAgICAoKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpICYmIGFjdGl2ZVBpbmlhICYmIGFjdGl2ZVBpbmlhLl90ZXN0aW5nID8gbnVsbCA6IHBpbmlhKSB8fFxuICAgICAgICAgICAgICAgIChoYXNDb250ZXh0ID8gaW5qZWN0KHBpbmlhU3ltYm9sLCBudWxsKSA6IG51bGwpO1xuICAgICAgICBpZiAocGluaWEpXG4gICAgICAgICAgICBzZXRBY3RpdmVQaW5pYShwaW5pYSk7XG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWFjdGl2ZVBpbmlhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFvwn42NXTogXCJnZXRBY3RpdmVQaW5pYSgpXCIgd2FzIGNhbGxlZCBidXQgdGhlcmUgd2FzIG5vIGFjdGl2ZSBQaW5pYS4gQXJlIHlvdSB0cnlpbmcgdG8gdXNlIGEgc3RvcmUgYmVmb3JlIGNhbGxpbmcgXCJhcHAudXNlKHBpbmlhKVwiP1xcbmAgK1xuICAgICAgICAgICAgICAgIGBTZWUgaHR0cHM6Ly9waW5pYS52dWVqcy5vcmcvY29yZS1jb25jZXB0cy9vdXRzaWRlLWNvbXBvbmVudC11c2FnZS5odG1sIGZvciBoZWxwLlxcbmAgK1xuICAgICAgICAgICAgICAgIGBUaGlzIHdpbGwgZmFpbCBpbiBwcm9kdWN0aW9uLmApO1xuICAgICAgICB9XG4gICAgICAgIHBpbmlhID0gYWN0aXZlUGluaWE7XG4gICAgICAgIGlmICghcGluaWEuX3MuaGFzKGlkKSkge1xuICAgICAgICAgICAgLy8gY3JlYXRpbmcgdGhlIHN0b3JlIHJlZ2lzdGVycyBpdCBpbiBgcGluaWEuX3NgXG4gICAgICAgICAgICBpZiAoaXNTZXR1cFN0b3JlKSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlU2V0dXBTdG9yZShpZCwgc2V0dXAsIG9wdGlvbnMsIHBpbmlhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNyZWF0ZU9wdGlvbnNTdG9yZShpZCwgb3B0aW9ucywgcGluaWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBub3QgdGhlIHJpZ2h0IGluZmVycmVkIHR5cGVcbiAgICAgICAgICAgICAgICB1c2VTdG9yZS5fcGluaWEgPSBwaW5pYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdG9yZSA9IHBpbmlhLl9zLmdldChpZCk7XG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgaG90KSB7XG4gICAgICAgICAgICBjb25zdCBob3RJZCA9ICdfX2hvdDonICsgaWQ7XG4gICAgICAgICAgICBjb25zdCBuZXdTdG9yZSA9IGlzU2V0dXBTdG9yZVxuICAgICAgICAgICAgICAgID8gY3JlYXRlU2V0dXBTdG9yZShob3RJZCwgc2V0dXAsIG9wdGlvbnMsIHBpbmlhLCB0cnVlKVxuICAgICAgICAgICAgICAgIDogY3JlYXRlT3B0aW9uc1N0b3JlKGhvdElkLCBhc3NpZ24oe30sIG9wdGlvbnMpLCBwaW5pYSwgdHJ1ZSk7XG4gICAgICAgICAgICBob3QuX2hvdFVwZGF0ZShuZXdTdG9yZSk7XG4gICAgICAgICAgICAvLyBjbGVhbnVwIHRoZSBzdGF0ZSBwcm9wZXJ0aWVzIGFuZCB0aGUgc3RvcmUgZnJvbSB0aGUgY2FjaGVcbiAgICAgICAgICAgIGRlbGV0ZSBwaW5pYS5zdGF0ZS52YWx1ZVtob3RJZF07XG4gICAgICAgICAgICBwaW5pYS5fcy5kZWxldGUoaG90SWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgSVNfQ0xJRU5UKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SW5zdGFuY2UgPSBnZXRDdXJyZW50SW5zdGFuY2UoKTtcbiAgICAgICAgICAgIC8vIHNhdmUgc3RvcmVzIGluIGluc3RhbmNlcyB0byBhY2Nlc3MgdGhlbSBkZXZ0b29sc1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRJbnN0YW5jZSAmJlxuICAgICAgICAgICAgICAgIGN1cnJlbnRJbnN0YW5jZS5wcm94eSAmJlxuICAgICAgICAgICAgICAgIC8vIGF2b2lkIGFkZGluZyBzdG9yZXMgdGhhdCBhcmUganVzdCBidWlsdCBmb3IgaG90IG1vZHVsZSByZXBsYWNlbWVudFxuICAgICAgICAgICAgICAgICFob3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2bSA9IGN1cnJlbnRJbnN0YW5jZS5wcm94eTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZSA9ICdfcFN0b3JlcycgaW4gdm0gPyB2bS5fcFN0b3JlcyA6ICh2bS5fcFN0b3JlcyA9IHt9KTtcbiAgICAgICAgICAgICAgICBjYWNoZVtpZF0gPSBzdG9yZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBTdG9yZUdlbmVyaWMgY2Fubm90IGJlIGNhc3RlZCB0b3dhcmRzIFN0b3JlXG4gICAgICAgIHJldHVybiBzdG9yZTtcbiAgICB9XG4gICAgdXNlU3RvcmUuJGlkID0gaWQ7XG4gICAgcmV0dXJuIHVzZVN0b3JlO1xufVxuXG5sZXQgbWFwU3RvcmVTdWZmaXggPSAnU3RvcmUnO1xuLyoqXG4gKiBDaGFuZ2VzIHRoZSBzdWZmaXggYWRkZWQgYnkgYG1hcFN0b3JlcygpYC4gQ2FuIGJlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcuXG4gKiBEZWZhdWx0cyB0byBgXCJTdG9yZVwiYC4gTWFrZSBzdXJlIHRvIGV4dGVuZCB0aGUgTWFwU3RvcmVzQ3VzdG9taXphdGlvblxuICogaW50ZXJmYWNlIGlmIHlvdSBhcmUgdXNpbmcgVHlwZVNjcmlwdC5cbiAqXG4gKiBAcGFyYW0gc3VmZml4IC0gbmV3IHN1ZmZpeFxuICovXG5mdW5jdGlvbiBzZXRNYXBTdG9yZVN1ZmZpeChzdWZmaXggLy8gY291bGQgYmUgJ1N0b3JlJyBidXQgdGhhdCB3b3VsZCBiZSBhbm5veWluZyBmb3IgSlNcbikge1xuICAgIG1hcFN0b3JlU3VmZml4ID0gc3VmZml4O1xufVxuLyoqXG4gKiBBbGxvd3MgdXNpbmcgc3RvcmVzIHdpdGhvdXQgdGhlIGNvbXBvc2l0aW9uIEFQSSAoYHNldHVwKClgKSBieSBnZW5lcmF0aW5nIGFuXG4gKiBvYmplY3QgdG8gYmUgc3ByZWFkIGluIHRoZSBgY29tcHV0ZWRgIGZpZWxkIG9mIGEgY29tcG9uZW50LiBJdCBhY2NlcHRzIGEgbGlzdFxuICogb2Ygc3RvcmUgZGVmaW5pdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBleHBvcnQgZGVmYXVsdCB7XG4gKiAgIGNvbXB1dGVkOiB7XG4gKiAgICAgLy8gb3RoZXIgY29tcHV0ZWQgcHJvcGVydGllc1xuICogICAgIC4uLm1hcFN0b3Jlcyh1c2VVc2VyU3RvcmUsIHVzZUNhcnRTdG9yZSlcbiAqICAgfSxcbiAqXG4gKiAgIGNyZWF0ZWQoKSB7XG4gKiAgICAgdGhpcy51c2VyU3RvcmUgLy8gc3RvcmUgd2l0aCBpZCBcInVzZXJcIlxuICogICAgIHRoaXMuY2FydFN0b3JlIC8vIHN0b3JlIHdpdGggaWQgXCJjYXJ0XCJcbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIHN0b3JlcyAtIGxpc3Qgb2Ygc3RvcmVzIHRvIG1hcCB0byBhbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gbWFwU3RvcmVzKC4uLnN0b3Jlcykge1xuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgQXJyYXkuaXNBcnJheShzdG9yZXNbMF0pKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW/CfjY1dOiBEaXJlY3RseSBwYXNzIGFsbCBzdG9yZXMgdG8gXCJtYXBTdG9yZXMoKVwiIHdpdGhvdXQgcHV0dGluZyB0aGVtIGluIGFuIGFycmF5OlxcbmAgK1xuICAgICAgICAgICAgYFJlcGxhY2VcXG5gICtcbiAgICAgICAgICAgIGBcXHRtYXBTdG9yZXMoW3VzZUF1dGhTdG9yZSwgdXNlQ2FydFN0b3JlXSlcXG5gICtcbiAgICAgICAgICAgIGB3aXRoXFxuYCArXG4gICAgICAgICAgICBgXFx0bWFwU3RvcmVzKHVzZUF1dGhTdG9yZSwgdXNlQ2FydFN0b3JlKVxcbmAgK1xuICAgICAgICAgICAgYFRoaXMgd2lsbCBmYWlsIGluIHByb2R1Y3Rpb24gaWYgbm90IGZpeGVkLmApO1xuICAgICAgICBzdG9yZXMgPSBzdG9yZXNbMF07XG4gICAgfVxuICAgIHJldHVybiBzdG9yZXMucmVkdWNlKChyZWR1Y2VkLCB1c2VTdG9yZSkgPT4ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiAkaWQgaXMgYWRkZWQgYnkgZGVmaW5lU3RvcmVcbiAgICAgICAgcmVkdWNlZFt1c2VTdG9yZS4kaWQgKyBtYXBTdG9yZVN1ZmZpeF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdXNlU3RvcmUodGhpcy4kcGluaWEpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVkdWNlZDtcbiAgICB9LCB7fSk7XG59XG4vKipcbiAqIEFsbG93cyB1c2luZyBzdGF0ZSBhbmQgZ2V0dGVycyBmcm9tIG9uZSBzdG9yZSB3aXRob3V0IHVzaW5nIHRoZSBjb21wb3NpdGlvblxuICogQVBJIChgc2V0dXAoKWApIGJ5IGdlbmVyYXRpbmcgYW4gb2JqZWN0IHRvIGJlIHNwcmVhZCBpbiB0aGUgYGNvbXB1dGVkYCBmaWVsZFxuICogb2YgYSBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHVzZVN0b3JlIC0gc3RvcmUgdG8gbWFwIGZyb21cbiAqIEBwYXJhbSBrZXlzT3JNYXBwZXIgLSBhcnJheSBvciBvYmplY3RcbiAqL1xuZnVuY3Rpb24gbWFwU3RhdGUodXNlU3RvcmUsIGtleXNPck1hcHBlcikge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGtleXNPck1hcHBlcilcbiAgICAgICAgPyBrZXlzT3JNYXBwZXIucmVkdWNlKChyZWR1Y2VkLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHJlZHVjZWRba2V5XSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXNlU3RvcmUodGhpcy4kcGluaWEpW2tleV07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZWQ7XG4gICAgICAgIH0sIHt9KVxuICAgICAgICA6IE9iamVjdC5rZXlzKGtleXNPck1hcHBlcikucmVkdWNlKChyZWR1Y2VkLCBrZXkpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIHJlZHVjZWRba2V5XSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IHVzZVN0b3JlKHRoaXMuJHBpbmlhKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9yZUtleSA9IGtleXNPck1hcHBlcltrZXldO1xuICAgICAgICAgICAgICAgIC8vIGZvciBzb21lIHJlYXNvbiBUUyBpcyB1bmFibGUgdG8gaW5mZXIgdGhlIHR5cGUgb2Ygc3RvcmVLZXkgdG8gYmUgYVxuICAgICAgICAgICAgICAgIC8vIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBzdG9yZUtleSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICA/IHN0b3JlS2V5LmNhbGwodGhpcywgc3RvcmUpXG4gICAgICAgICAgICAgICAgICAgIDogc3RvcmVbc3RvcmVLZXldO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VkO1xuICAgICAgICB9LCB7fSk7XG59XG4vKipcbiAqIEFsaWFzIGZvciBgbWFwU3RhdGUoKWAuIFlvdSBzaG91bGQgdXNlIGBtYXBTdGF0ZSgpYCBpbnN0ZWFkLlxuICogQGRlcHJlY2F0ZWQgdXNlIGBtYXBTdGF0ZSgpYCBpbnN0ZWFkLlxuICovXG5jb25zdCBtYXBHZXR0ZXJzID0gbWFwU3RhdGU7XG4vKipcbiAqIEFsbG93cyBkaXJlY3RseSB1c2luZyBhY3Rpb25zIGZyb20geW91ciBzdG9yZSB3aXRob3V0IHVzaW5nIHRoZSBjb21wb3NpdGlvblxuICogQVBJIChgc2V0dXAoKWApIGJ5IGdlbmVyYXRpbmcgYW4gb2JqZWN0IHRvIGJlIHNwcmVhZCBpbiB0aGUgYG1ldGhvZHNgIGZpZWxkXG4gKiBvZiBhIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0gdXNlU3RvcmUgLSBzdG9yZSB0byBtYXAgZnJvbVxuICogQHBhcmFtIGtleXNPck1hcHBlciAtIGFycmF5IG9yIG9iamVjdFxuICovXG5mdW5jdGlvbiBtYXBBY3Rpb25zKHVzZVN0b3JlLCBrZXlzT3JNYXBwZXIpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShrZXlzT3JNYXBwZXIpXG4gICAgICAgID8ga2V5c09yTWFwcGVyLnJlZHVjZSgocmVkdWNlZCwga2V5KSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICByZWR1Y2VkW2tleV0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IEZJWE1FOiBzaG91bGQgd29yaz9cbiAgICAgICAgICAgICAgICByZXR1cm4gdXNlU3RvcmUodGhpcy4kcGluaWEpW2tleV0oLi4uYXJncyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZWQ7XG4gICAgICAgIH0sIHt9KVxuICAgICAgICA6IE9iamVjdC5rZXlzKGtleXNPck1hcHBlcikucmVkdWNlKChyZWR1Y2VkLCBrZXkpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIHJlZHVjZWRba2V5XSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogRklYTUU6IHNob3VsZCB3b3JrP1xuICAgICAgICAgICAgICAgIHJldHVybiB1c2VTdG9yZSh0aGlzLiRwaW5pYSlba2V5c09yTWFwcGVyW2tleV1dKC4uLmFyZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VkO1xuICAgICAgICB9LCB7fSk7XG59XG4vKipcbiAqIEFsbG93cyB1c2luZyBzdGF0ZSBhbmQgZ2V0dGVycyBmcm9tIG9uZSBzdG9yZSB3aXRob3V0IHVzaW5nIHRoZSBjb21wb3NpdGlvblxuICogQVBJIChgc2V0dXAoKWApIGJ5IGdlbmVyYXRpbmcgYW4gb2JqZWN0IHRvIGJlIHNwcmVhZCBpbiB0aGUgYGNvbXB1dGVkYCBmaWVsZFxuICogb2YgYSBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHVzZVN0b3JlIC0gc3RvcmUgdG8gbWFwIGZyb21cbiAqIEBwYXJhbSBrZXlzT3JNYXBwZXIgLSBhcnJheSBvciBvYmplY3RcbiAqL1xuZnVuY3Rpb24gbWFwV3JpdGFibGVTdGF0ZSh1c2VTdG9yZSwga2V5c09yTWFwcGVyKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoa2V5c09yTWFwcGVyKVxuICAgICAgICA/IGtleXNPck1hcHBlci5yZWR1Y2UoKHJlZHVjZWQsIGtleSkgPT4ge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgcmVkdWNlZFtrZXldID0ge1xuICAgICAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogRklYTUU6IHNob3VsZCB3b3JrP1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlU3RvcmUodGhpcy4kcGluaWEpW2tleV07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogRklYTUU6IHNob3VsZCB3b3JrP1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHVzZVN0b3JlKHRoaXMuJHBpbmlhKVtrZXldID0gdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZWQ7XG4gICAgICAgIH0sIHt9KVxuICAgICAgICA6IE9iamVjdC5rZXlzKGtleXNPck1hcHBlcikucmVkdWNlKChyZWR1Y2VkLCBrZXkpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHJlZHVjZWRba2V5XSA9IHtcbiAgICAgICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IEZJWE1FOiBzaG91bGQgd29yaz9cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZVN0b3JlKHRoaXMuJHBpbmlhKVtrZXlzT3JNYXBwZXJba2V5XV07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogRklYTUU6IHNob3VsZCB3b3JrP1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHVzZVN0b3JlKHRoaXMuJHBpbmlhKVtrZXlzT3JNYXBwZXJba2V5XV0gPSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlZDtcbiAgICAgICAgfSwge30pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IG9mIHJlZmVyZW5jZXMgd2l0aCBhbGwgdGhlIHN0YXRlLCBnZXR0ZXJzLCBhbmQgcGx1Z2luLWFkZGVkXG4gKiBzdGF0ZSBwcm9wZXJ0aWVzIG9mIHRoZSBzdG9yZS4gU2ltaWxhciB0byBgdG9SZWZzKClgIGJ1dCBzcGVjaWZpY2FsbHlcbiAqIGRlc2lnbmVkIGZvciBQaW5pYSBzdG9yZXMgc28gbWV0aG9kcyBhbmQgbm9uIHJlYWN0aXZlIHByb3BlcnRpZXMgYXJlXG4gKiBjb21wbGV0ZWx5IGlnbm9yZWQuXG4gKlxuICogQHBhcmFtIHN0b3JlIC0gc3RvcmUgdG8gZXh0cmFjdCB0aGUgcmVmcyBmcm9tXG4gKi9cbmZ1bmN0aW9uIHN0b3JlVG9SZWZzKHN0b3JlKSB7XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy9waW5pYS9pc3N1ZXMvODUyXG4gICAgLy8gSXQncyBlYXNpZXIgdG8ganVzdCB1c2UgdG9SZWZzKCkgZXZlbiBpZiBpdCBpbmNsdWRlcyBtb3JlIHN0dWZmXG4gICAgaWYgKGlzVnVlMikge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiB0b1JlZnMgaW5jbHVkZSBtZXRob2RzIGFuZCBvdGhlcnNcbiAgICAgICAgcmV0dXJuIHRvUmVmcyhzdG9yZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzdG9yZSA9IHRvUmF3KHN0b3JlKTtcbiAgICAgICAgY29uc3QgcmVmcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzdG9yZSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBzdG9yZVtrZXldO1xuICAgICAgICAgICAgaWYgKGlzUmVmKHZhbHVlKSB8fCBpc1JlYWN0aXZlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHRoZSBrZXkgaXMgc3RhdGUgb3IgZ2V0dGVyXG4gICAgICAgICAgICAgICAgcmVmc1trZXldID1cbiAgICAgICAgICAgICAgICAgICAgLy8gLS0tXG4gICAgICAgICAgICAgICAgICAgIHRvUmVmKHN0b3JlLCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWZzO1xuICAgIH1cbn1cblxuLyoqXG4gKiBWdWUgMiBQbHVnaW4gdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBmb3IgcGluaWEgdG8gd29yay4gTm90ZSAqKnlvdSBkb24ndCBuZWVkXG4gKiB0aGlzIHBsdWdpbiBpZiB5b3UgYXJlIHVzaW5nIE51eHQuanMqKi4gVXNlIHRoZSBgYnVpbGRNb2R1bGVgIGluc3RlYWQ6XG4gKiBodHRwczovL3BpbmlhLnZ1ZWpzLm9yZy9zc3IvbnV4dC5odG1sLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBqc1xuICogaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG4gKiBpbXBvcnQgeyBQaW5pYVZ1ZVBsdWdpbiwgY3JlYXRlUGluaWEgfSBmcm9tICdwaW5pYSdcbiAqXG4gKiBWdWUudXNlKFBpbmlhVnVlUGx1Z2luKVxuICogY29uc3QgcGluaWEgPSBjcmVhdGVQaW5pYSgpXG4gKlxuICogbmV3IFZ1ZSh7XG4gKiAgIGVsOiAnI2FwcCcsXG4gKiAgIC8vIC4uLlxuICogICBwaW5pYSxcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gX1Z1ZSAtIGBWdWVgIGltcG9ydGVkIGZyb20gJ3Z1ZScuXG4gKi9cbmNvbnN0IFBpbmlhVnVlUGx1Z2luID0gZnVuY3Rpb24gKF9WdWUpIHtcbiAgICAvLyBFcXVpdmFsZW50IG9mXG4gICAgLy8gYXBwLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLiRwaW5pYSA9IHBpbmlhXG4gICAgX1Z1ZS5taXhpbih7XG4gICAgICAgIGJlZm9yZUNyZWF0ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMucGluaWEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaW5pYSA9IG9wdGlvbnMucGluaWE7XG4gICAgICAgICAgICAgICAgLy8gSEFDSzogdGFrZW4gZnJvbSBwcm92aWRlKCk6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy9jb21wb3NpdGlvbi1hcGkvYmxvYi9tYWluL3NyYy9hcGlzL2luamVjdC50cyNMMzFcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcHJvdmlkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvdmlkZUNhY2hlID0ge307XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX3Byb3ZpZGVkJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiBwcm92aWRlQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6ICh2KSA9PiBPYmplY3QuYXNzaWduKHByb3ZpZGVDYWNoZSwgdiksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9wcm92aWRlZFtwaW5pYVN5bWJvbF0gPSBwaW5pYTtcbiAgICAgICAgICAgICAgICAvLyBwcm9wYWdhdGUgdGhlIHBpbmlhIGluc3RhbmNlIGluIGFuIFNTUiBmcmllbmRseSB3YXlcbiAgICAgICAgICAgICAgICAvLyBhdm9pZCBhZGRpbmcgaXQgdG8gbnV4dCB0d2ljZVxuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiRwaW5pYSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRwaW5pYSA9IHBpbmlhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwaW5pYS5fYSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgaWYgKElTX0NMSUVOVCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGFsbG93cyBjYWxsaW5nIHVzZVN0b3JlKCkgb3V0c2lkZSBvZiBhIGNvbXBvbmVudCBzZXR1cCBhZnRlclxuICAgICAgICAgICAgICAgICAgICAvLyBpbnN0YWxsaW5nIHBpbmlhJ3MgcGx1Z2luXG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVBpbmlhKHBpbmlhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCgoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHx8ICh0eXBlb2YgX19WVUVfUFJPRF9ERVZUT09MU19fICE9PSAndW5kZWZpbmVkJyAmJiBfX1ZVRV9QUk9EX0RFVlRPT0xTX18pKSAmJiAhKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpKSAmJiBJU19DTElFTlQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJQaW5pYURldnRvb2xzKHBpbmlhLl9hLCBwaW5pYSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuJHBpbmlhICYmIG9wdGlvbnMucGFyZW50ICYmIG9wdGlvbnMucGFyZW50LiRwaW5pYSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHBpbmlhID0gb3B0aW9ucy5wYXJlbnQuJHBpbmlhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkZXN0cm95ZWQoKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fcFN0b3JlcztcbiAgICAgICAgfSxcbiAgICB9KTtcbn07XG5cbmV4cG9ydCB7IE11dGF0aW9uVHlwZSwgUGluaWFWdWVQbHVnaW4sIGFjY2VwdEhNUlVwZGF0ZSwgY3JlYXRlUGluaWEsIGRlZmluZVN0b3JlLCBkaXNwb3NlUGluaWEsIGdldEFjdGl2ZVBpbmlhLCBtYXBBY3Rpb25zLCBtYXBHZXR0ZXJzLCBtYXBTdGF0ZSwgbWFwU3RvcmVzLCBtYXBXcml0YWJsZVN0YXRlLCBzZXRBY3RpdmVQaW5pYSwgc2V0TWFwU3RvcmVTdWZmaXgsIHNraXBIeWRyYXRlLCBzdG9yZVRvUmVmcyB9O1xuIiwiLyohIEVsZW1lbnQgUGx1cyBJY29ucyBWdWUgdjIuMy4xICovXG5cblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2FkZC1sb2NhdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGFkZF9sb2NhdGlvbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQoe1xuICBuYW1lOiBcIkFkZExvY2F0aW9uXCIsXG4gIF9fbmFtZTogXCJhZGQtbG9jYXRpb25cIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jaygpLCBfY3JlYXRlRWxlbWVudEJsb2NrKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjg4IDg5Nmg0NDhxMzIgMCAzMiAzMnQtMzIgMzJIMjg4cS0zMiAwLTMyLTMydDMyLTMyXCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk04MDAgNDE2YTI4OCAyODggMCAxIDAtNTc2IDBjMCAxMTguMTQ0IDk0LjUyOCAyNzIuMTI4IDI4OCA0NTYuNTc2QzcwNS40NzIgNjg4LjEyOCA4MDAgNTM0LjE0NCA4MDAgNDE2TTUxMiA5NjBDMjc3LjMxMiA3NDYuNjg4IDE2MCA1NjUuMzEyIDE2MCA0MTZhMzUyIDM1MiAwIDAgMSA3MDQgMGMwIDE0OS4zMTItMTE3LjMxMiAzMzAuNjg4LTM1MiA1NDRcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTU0NCAzODRoOTZhMzIgMzIgMCAxIDEgMCA2NGgtOTZ2OTZhMzIgMzIgMCAwIDEtNjQgMHYtOTZoLTk2YTMyIDMyIDAgMCAxIDAtNjRoOTZ2LTk2YTMyIDMyIDAgMCAxIDY0IDB6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvYWRkLWxvY2F0aW9uLnZ1ZVxudmFyIGFkZF9sb2NhdGlvbl9kZWZhdWx0ID0gYWRkX2xvY2F0aW9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9haW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMiwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazIgfSBmcm9tIFwidnVlXCI7XG52YXIgYWltX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDIoe1xuICBuYW1lOiBcIkFpbVwiLFxuICBfX25hbWU6IFwiYWltXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syKCksIF9jcmVhdGVFbGVtZW50QmxvY2syKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA4OTZhMzg0IDM4NCAwIDEgMCAwLTc2OCAzODQgMzg0IDAgMCAwIDAgNzY4bTAgNjRhNDQ4IDQ0OCAwIDEgMSAwLTg5NiA0NDggNDQ4IDAgMCAxIDAgODk2XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDk2YTMyIDMyIDAgMCAxIDMyIDMydjE5MmEzMiAzMiAwIDAgMS02NCAwVjEyOGEzMiAzMiAwIDAgMSAzMi0zMm0wIDU3NmEzMiAzMiAwIDAgMSAzMiAzMnYxOTJhMzIgMzIgMCAxIDEtNjQgMFY3MDRhMzIgMzIgMCAwIDEgMzItMzJNOTYgNTEyYTMyIDMyIDAgMCAxIDMyLTMyaDE5MmEzMiAzMiAwIDAgMSAwIDY0SDEyOGEzMiAzMiAwIDAgMS0zMi0zMm01NzYgMGEzMiAzMiAwIDAgMSAzMi0zMmgxOTJhMzIgMzIgMCAxIDEgMCA2NEg3MDRhMzIgMzIgMCAwIDEtMzItMzJcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9haW0udnVlXG52YXIgYWltX2RlZmF1bHQgPSBhaW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2FsYXJtLWNsb2NrLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDMgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTMsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2szIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGFsYXJtX2Nsb2NrX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDMoe1xuICBuYW1lOiBcIkFsYXJtQ2xvY2tcIixcbiAgX19uYW1lOiBcImFsYXJtLWNsb2NrXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2szKCksIF9jcmVhdGVFbGVtZW50QmxvY2szKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUzKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA4MzJhMzIwIDMyMCAwIDEgMCAwLTY0MCAzMjAgMzIwIDAgMCAwIDAgNjQwbTAgNjRhMzg0IDM4NCAwIDEgMSAwLTc2OCAzODQgMzg0IDAgMCAxIDAgNzY4XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTMoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJtMjkyLjI4OCA4MjQuNTc2IDU1LjQyNCAzMi00OCA4My4xMzZhMzIgMzIgMCAxIDEtNTUuNDI0LTMyem00MzkuNDI0IDAtNTUuNDI0IDMyIDQ4IDgzLjEzNmEzMiAzMiAwIDEgMCA1NS40MjQtMzJ6TTUxMiA1MTJoMTYwYTMyIDMyIDAgMSAxIDAgNjRINDgwYTMyIDMyIDAgMCAxLTMyLTMyVjMyMGEzMiAzMiAwIDAgMSA2NCAwek05MC40OTYgMzEyLjI1NkExNjAgMTYwIDAgMCAxIDMxMi4zMiA5MC40OTZsLTQ2Ljg0OCA0Ni44NDhhOTYgOTYgMCAwIDAtMTI4IDEyOEw5MC41NiAzMTIuMjU2em04MzUuMjY0IDBBMTYwIDE2MCAwIDAgMCA3MDQgOTAuNDk2bDQ2Ljg0OCA0Ni44NDhhOTYgOTYgMCAwIDEgMTI4IDEyOHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9hbGFybS1jbG9jay52dWVcbnZhciBhbGFybV9jbG9ja19kZWZhdWx0ID0gYWxhcm1fY2xvY2tfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2FwcGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTQsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGFwcGxlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDQoe1xuICBuYW1lOiBcIkFwcGxlXCIsXG4gIF9fbmFtZTogXCJhcHBsZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrNChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01OTkuODcyIDIwMy43NzZhMTg5LjQ0IDE4OS40NCAwIDAgMSA2NC4zODQtNC42NzJsMi42MjQuMTI4YzMxLjE2OCAxLjAyNCA1MS4yIDQuMDk2IDc5LjQ4OCAxNi4zMiAzNy42MzIgMTYuMTI4IDc0LjQ5NiA0NS4wNTYgMTExLjQ4OCA4OS4zNDQgOTYuMzg0IDExNS4yNjQgODIuNzUyIDM3Mi44LTM0Ljc1MiA1MjEuNzI4LTcuNjggOS43MjgtMzIgNDEuNi0zMC43MiAzOS45MzZhNDI2LjYyNCA0MjYuNjI0IDAgMCAxLTMwLjA4IDM1Ljc3NmMtMzEuMjMyIDMyLjU3Ni02NS4yOCA0OS4yMTYtMTEwLjA4IDUwLjA0OC0zMS4zNi42NC01My41NjgtNS4zMTItODQuMjg4LTE4Ljc1MmwtNi41MjgtMi44OGMtMjAuOTkyLTkuMjE2LTMwLjU5Mi0xMS45MDQtNDcuMjk2LTExLjkwNC0xOC4xMTIgMC0yOC42MDggMi44OC01MS4xMzYgMTIuNjcybC02LjQ2NCAyLjgxNmMtMjguNDE2IDEyLjIyNC00OC4zMiAxOC4wNDgtNzYuMTYgMTkuMi03NC4xMTIgMi43NTItMTE2LjkyOC0zOC4wOC0xODAuNjcyLTEzMi4xNi05Ni42NC0xNDIuMDgtMTMyLjYwOC0zNDkuMzEyLTU1LjA0LTQ4Ni40IDQ2LjI3Mi04MS45MiAxMjkuOTItMTMzLjYzMiAyMjAuNjcyLTEzNS4wNCAzMi44MzItLjU3NiA2MC4yODggNi44NDggOTkuNjQ4IDIyLjcyIDI3LjEzNiAxMC44OCAzNC43NTIgMTMuNzYgMzcuMzc2IDE0LjI3MiAxNi4yNTYtMjAuMTYgMjcuNzc2LTM2Ljk5MiAzNC41Ni01MC4yNCAxMy41NjgtMjYuMzA0IDI3LjItNTkuOTY4IDQwLjcwNC0xMDAuOGEzMiAzMiAwIDEgMSA2MC44IDIwLjIyNGMtMTIuNjA4IDM3Ljg4OC0yNS40MDggNzAuNC0zOC41MjggOTcuNjY0em0tNTEuNTIgNzguMDhjLTE0LjUyOCAxNy43OTItMzEuODA4IDM3LjM3Ni01MS45MDQgNTguODE2YTMyIDMyIDAgMSAxLTQ2LjcyLTQzLjc3NmwxMi4yODgtMTMuMjQ4Yy0yOC4wMzItMTEuMi02MS4yNDgtMjYuNjg4LTk1LjY4LTI2LjExMi03MC40IDEuMDg4LTEzNS4yOTYgNDEuNi0xNzEuNjQ4IDEwNS43OTJDMTIxLjYgNDkyLjYwOCAxNzYgNjg0LjE2IDI0Ny4yOTYgNzg4Ljk5MmMzNC44MTYgNTEuMzI4IDc2LjM1MiAxMDguOTkyIDEzMC45NDQgMTA2Ljk0NCA1Mi40OC0yLjExMiA3Mi4zMi0zNC42ODggMTM1Ljg3Mi0zNC42ODggNjMuNTUyIDAgODEuMjggMzQuNjg4IDEzNi45NiAzMy41MzYgNTYuNDQ4LTEuMDg4IDc1Ljc3Ni0zOS4wNCAxMjYuODQ4LTEwMy44NzIgMTA3LjkwNC0xMzYuNzY4IDEwNy45MDQtMzYyLjc1MiAzNS43NzYtNDQ5LjA4OC03Mi4xOTItODYuMjcyLTEyNC42NzItODQuMDk2LTE1MS42OC04NS4xMi00MS40NzItNC4yODgtODEuNiAxMi41NDQtMTEzLjY2NCAyNS4xNTJ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvYXBwbGUudnVlXG52YXIgYXBwbGVfZGVmYXVsdCA9IGFwcGxlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9hcnJvdy1kb3duLWJvbGQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50NSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlNSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s1LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazUgfSBmcm9tIFwidnVlXCI7XG52YXIgYXJyb3dfZG93bl9ib2xkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDUoe1xuICBuYW1lOiBcIkFycm93RG93bkJvbGRcIixcbiAgX19uYW1lOiBcImFycm93LWRvd24tYm9sZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrNShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xMDQuNzA0IDMzOC43NTJhNjQgNjQgMCAwIDEgOTAuNDk2IDBsMzE2LjggMzE2LjggMzE2LjgtMzE2LjhhNjQgNjQgMCAwIDEgOTAuNDk2IDkwLjQ5Nkw1NTcuMjQ4IDc5MS4yOTZhNjQgNjQgMCAwIDEtOTAuNDk2IDBMMTA0LjcwNCA0MjkuMjQ4YTY0IDY0IDAgMCAxIDAtOTAuNDk2elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2Fycm93LWRvd24tYm9sZC52dWVcbnZhciBhcnJvd19kb3duX2JvbGRfZGVmYXVsdCA9IGFycm93X2Rvd25fYm9sZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvYXJyb3ctZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ2IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU2LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazYsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrNiB9IGZyb20gXCJ2dWVcIjtcbnZhciBhcnJvd19kb3duX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDYoe1xuICBuYW1lOiBcIkFycm93RG93blwiLFxuICBfX25hbWU6IFwiYXJyb3ctZG93blwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNigpLCBfY3JlYXRlRWxlbWVudEJsb2NrNihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk04MzEuODcyIDM0MC44NjQgNTEyIDY1Mi42NzIgMTkyLjEyOCAzNDAuODY0YTMwLjU5MiAzMC41OTIgMCAwIDAtNDIuNzUyIDAgMjkuMTIgMjkuMTIgMCAwIDAgMCA0MS42TDQ4OS42NjQgNzE0LjI0YTMyIDMyIDAgMCAwIDQ0LjY3MiAwbDM0MC4yODgtMzMxLjcxMmEyOS4xMiAyOS4xMiAwIDAgMCAwLTQxLjcyOCAzMC41OTIgMzAuNTkyIDAgMCAwLTQyLjc1MiAwelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2Fycm93LWRvd24udnVlXG52YXIgYXJyb3dfZG93bl9kZWZhdWx0ID0gYXJyb3dfZG93bl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvYXJyb3ctbGVmdC1ib2xkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDcgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTcsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s3IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGFycm93X2xlZnRfYm9sZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ3KHtcbiAgbmFtZTogXCJBcnJvd0xlZnRCb2xkXCIsXG4gIF9fbmFtZTogXCJhcnJvdy1sZWZ0LWJvbGRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazcoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazcoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTcoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNjg1LjI0OCAxMDQuNzA0YTY0IDY0IDAgMCAxIDAgOTAuNDk2TDM2OC40NDggNTEybDMxNi44IDMxNi44YTY0IDY0IDAgMCAxLTkwLjQ5NiA5MC40OTZMMjMyLjcwNCA1NTcuMjQ4YTY0IDY0IDAgMCAxIDAtOTAuNDk2bDM2Mi4wNDgtMzYyLjA0OGE2NCA2NCAwIDAgMSA5MC40OTYgMHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9hcnJvdy1sZWZ0LWJvbGQudnVlXG52YXIgYXJyb3dfbGVmdF9ib2xkX2RlZmF1bHQgPSBhcnJvd19sZWZ0X2JvbGRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2Fycm93LWxlZnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50OCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlOCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s4LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazggfSBmcm9tIFwidnVlXCI7XG52YXIgYXJyb3dfbGVmdF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ4KHtcbiAgbmFtZTogXCJBcnJvd0xlZnRcIixcbiAgX19uYW1lOiBcImFycm93LWxlZnRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazgoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazgoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTgoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNjA5LjQwOCAxNDkuMzc2IDI3Ny43NiA0ODkuNmEzMiAzMiAwIDAgMCAwIDQ0LjY3MmwzMzEuNjQ4IDM0MC4zNTJhMjkuMTIgMjkuMTIgMCAwIDAgNDEuNzI4IDAgMzAuNTkyIDMwLjU5MiAwIDAgMCAwLTQyLjc1MkwzMzkuMjY0IDUxMS45MzZsMzExLjg3Mi0zMTkuODcyYTMwLjU5MiAzMC41OTIgMCAwIDAgMC00Mi42ODggMjkuMTIgMjkuMTIgMCAwIDAtNDEuNzI4IDB6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvYXJyb3ctbGVmdC52dWVcbnZhciBhcnJvd19sZWZ0X2RlZmF1bHQgPSBhcnJvd19sZWZ0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9hcnJvdy1yaWdodC1ib2xkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDkgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTksIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrOSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s5IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGFycm93X3JpZ2h0X2JvbGRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50OSh7XG4gIG5hbWU6IFwiQXJyb3dSaWdodEJvbGRcIixcbiAgX19uYW1lOiBcImFycm93LXJpZ2h0LWJvbGRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazkoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazkoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTkoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMzM4Ljc1MiAxMDQuNzA0YTY0IDY0IDAgMCAwIDAgOTAuNDk2bDMxNi44IDMxNi44LTMxNi44IDMxNi44YTY0IDY0IDAgMCAwIDkwLjQ5NiA5MC40OTZsMzYyLjA0OC0zNjIuMDQ4YTY0IDY0IDAgMCAwIDAtOTAuNDk2TDQyOS4yNDggMTA0LjcwNGE2NCA2NCAwIDAgMC05MC40OTYgMHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9hcnJvdy1yaWdodC1ib2xkLnZ1ZVxudmFyIGFycm93X3JpZ2h0X2JvbGRfZGVmYXVsdCA9IGFycm93X3JpZ2h0X2JvbGRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2Fycm93LXJpZ2h0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDEwIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxMCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMCB9IGZyb20gXCJ2dWVcIjtcbnZhciBhcnJvd19yaWdodF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxMCh7XG4gIG5hbWU6IFwiQXJyb3dSaWdodFwiLFxuICBfX25hbWU6IFwiYXJyb3ctcmlnaHRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazEwKCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMzQwLjg2NCAxNDkuMzEyYTMwLjU5MiAzMC41OTIgMCAwIDAgMCA0Mi43NTJMNjUyLjczNiA1MTIgMzQwLjg2NCA4MzEuODcyYTMwLjU5MiAzMC41OTIgMCAwIDAgMCA0Mi43NTIgMjkuMTIgMjkuMTIgMCAwIDAgNDEuNzI4IDBMNzE0LjI0IDUzNC4zMzZhMzIgMzIgMCAwIDAgMC00NC42NzJMMzgyLjU5MiAxNDkuMzc2YTI5LjEyIDI5LjEyIDAgMCAwLTQxLjcyOCAwelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2Fycm93LXJpZ2h0LnZ1ZVxudmFyIGFycm93X3JpZ2h0X2RlZmF1bHQgPSBhcnJvd19yaWdodF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvYXJyb3ctdXAtYm9sZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTEsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTEsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTEgfSBmcm9tIFwidnVlXCI7XG52YXIgYXJyb3dfdXBfYm9sZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxMSh7XG4gIG5hbWU6IFwiQXJyb3dVcEJvbGRcIixcbiAgX19uYW1lOiBcImFycm93LXVwLWJvbGRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazExKCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTEoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTA0LjcwNCA2ODUuMjQ4YTY0IDY0IDAgMCAwIDkwLjQ5NiAwbDMxNi44LTMxNi44IDMxNi44IDMxNi44YTY0IDY0IDAgMCAwIDkwLjQ5Ni05MC40OTZMNTU3LjI0OCAyMzIuNzA0YTY0IDY0IDAgMCAwLTkwLjQ5NiAwTDEwNC43MDQgNTk0Ljc1MmE2NCA2NCAwIDAgMCAwIDkwLjQ5NnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9hcnJvdy11cC1ib2xkLnZ1ZVxudmFyIGFycm93X3VwX2JvbGRfZGVmYXVsdCA9IGFycm93X3VwX2JvbGRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2Fycm93LXVwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDEyIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxMiwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMiB9IGZyb20gXCJ2dWVcIjtcbnZhciBhcnJvd191cF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxMih7XG4gIG5hbWU6IFwiQXJyb3dVcFwiLFxuICBfX25hbWU6IFwiYXJyb3ctdXBcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazEyKCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJtNDg4LjgzMiAzNDQuMzItMzM5Ljg0IDM1Ni42NzJhMzIgMzIgMCAwIDAgMCA0NC4xNmwuMzg0LjM4NGEyOS40NCAyOS40NCAwIDAgMCA0Mi42ODggMGwzMjAtMzM1Ljg3MiAzMTkuODcyIDMzNS44NzJhMjkuNDQgMjkuNDQgMCAwIDAgNDIuNjg4IDBsLjM4NC0uMzg0YTMyIDMyIDAgMCAwIDAtNDQuMTZMNTM1LjE2OCAzNDQuMzJhMzIgMzIgMCAwIDAtNDYuMzM2IDBcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9hcnJvdy11cC52dWVcbnZhciBhcnJvd191cF9kZWZhdWx0ID0gYXJyb3dfdXBfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2F2YXRhci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTMsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTMsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTMgfSBmcm9tIFwidnVlXCI7XG52YXIgYXZhdGFyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDEzKHtcbiAgbmFtZTogXCJBdmF0YXJcIixcbiAgX19uYW1lOiBcImF2YXRhclwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTMoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazEzKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxMyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk02MjguNzM2IDUyOC44OTZBNDE2IDQxNiAwIDAgMSA5MjggOTI4SDk2YTQxNS44NzIgNDE1Ljg3MiAwIDAgMSAyOTkuMjY0LTM5OS4xMDRMNTEyIDcwNHpNNzIwIDMwNGEyMDggMjA4IDAgMSAxLTQxNiAwIDIwOCAyMDggMCAwIDEgNDE2IDBcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9hdmF0YXIudnVlXG52YXIgYXZhdGFyX2RlZmF1bHQgPSBhdmF0YXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2JhY2sudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE0LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE0LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGJhY2tfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTQoe1xuICBuYW1lOiBcIkJhY2tcIixcbiAgX19uYW1lOiBcImJhY2tcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE0KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTQoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjI0IDQ4MGg2NDBhMzIgMzIgMCAxIDEgMCA2NEgyMjRhMzIgMzIgMCAwIDEgMC02NFwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIm0yMzcuMjQ4IDUxMiAyNjUuNDA4IDI2NS4zNDRhMzIgMzIgMCAwIDEtNDUuMzEyIDQ1LjMxMmwtMjg4LTI4OGEzMiAzMiAwIDAgMSAwLTQ1LjMxMmwyODgtMjg4YTMyIDMyIDAgMSAxIDQ1LjMxMiA0NS4zMTJ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvYmFjay52dWVcbnZhciBiYWNrX2RlZmF1bHQgPSBiYWNrX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9iYXNlYmFsbC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTUsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTUsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTUgfSBmcm9tIFwidnVlXCI7XG52YXIgYmFzZWJhbGxfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTUoe1xuICBuYW1lOiBcIkJhc2ViYWxsXCIsXG4gIF9fbmFtZTogXCJiYXNlYmFsbFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTUoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE1KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xOTUuMiA4MjguOGE0NDggNDQ4IDAgMSAxIDYzMy42LTYzMy42IDQ0OCA0NDggMCAwIDEtNjMzLjYgNjMzLjZ6bTQ1LjI0OC00NS4yNDhhMzg0IDM4NCAwIDEgMCA1NDMuMTA0LTU0My4xMDQgMzg0IDM4NCAwIDAgMC01NDMuMTA0IDU0My4xMDRcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTUoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNDk3LjQ3MiA5Ni44OTZjMjIuNzg0IDQuNjcyIDQ0LjQxNiA5LjQ3MiA2NC44OTYgMTQuNTI4YTI1Ni4xMjggMjU2LjEyOCAwIDAgMCAzNTAuMjA4IDM1MC4yMDhjNS4wNTYgMjAuNDggOS44NTYgNDIuMTEyIDE0LjUyOCA2NC44OTZBMzIwLjEyOCAzMjAuMTI4IDAgMCAxIDQ5Ny40NzIgOTYuODk2ek0xMDguNDggNDkxLjkwNGEzMjAuMTI4IDMyMC4xMjggMCAwIDEgNDIzLjYxNiA0MjMuNjhjLTIzLjA0LTMuNjQ4LTQ0Ljk5Mi03LjQyNC02NS43MjgtMTEuNTJhMjU2LjEyOCAyNTYuMTI4IDAgMCAwLTM0Ni40OTYtMzQ2LjQzMiAxNzM2LjY0IDE3MzYuNjQgMCAwIDEtMTEuMzkyLTY1LjcyOHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9iYXNlYmFsbC52dWVcbnZhciBiYXNlYmFsbF9kZWZhdWx0ID0gYmFzZWJhbGxfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2Jhc2tldGJhbGwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTYgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE2LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE2LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE2IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGJhc2tldGJhbGxfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTYoe1xuICBuYW1lOiBcIkJhc2tldGJhbGxcIixcbiAgX19uYW1lOiBcImJhc2tldGJhbGxcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE2KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNzc4Ljc1MiA3ODguMjI0YTM4Mi40NjQgMzgyLjQ2NCAwIDAgMCAxMTYuMDMyLTI0NS42MzIgMjU2LjUxMiAyNTYuNTEyIDAgMCAwLTI0MS43MjgtMTMuOTUyIDc2Mi44OCA3NjIuODggMCAwIDEgMTI1LjY5NiAyNTkuNTg0em0tNTUuMDQgNDQuMjI0YTY5OS42NDggNjk5LjY0OCAwIDAgMC0xMjUuMDU2LTI2OS42MzIgMjU2LjEyOCAyNTYuMTI4IDAgMCAwLTU2LjA2NCAzMzEuOTY4IDM4Mi43MiAzODIuNzIgMCAwIDAgMTgxLjEyLTYyLjMzNm0tMjU0LjA4IDYxLjI0OEEzMjAuMTI4IDMyMC4xMjggMCAwIDEgNTU3Ljc2IDUxMy42YTcxNS44NCA3MTUuODQgMCAwIDAtNDguMTkyLTQ4LjEyOCAzMjAuMTI4IDMyMC4xMjggMCAwIDEtMzc5LjI2NCA4OC4zODQgMzgyLjQgMzgyLjQgMCAwIDAgMTEwLjE0NCAyMjkuNjk2IDM4Mi40IDM4Mi40IDAgMCAwIDIyOS4xODQgMTEwLjA4ek0xMjkuMjggNDgxLjA4OGEyNTYuMTI4IDI1Ni4xMjggMCAwIDAgMzMxLjA3Mi01Ni40NDggNjk5LjY0OCA2OTkuNjQ4IDAgMCAwLTI2OC44LTEyNC4zNTIgMzgyLjY1NiAzODIuNjU2IDAgMCAwLTYyLjI3MiAxODAuOG0xMDYuNTYtMjM1Ljg0YTc2Mi44OCA3NjIuODggMCAwIDEgMjU4LjY4OCAxMjUuMDU2IDI1Ni41MTIgMjU2LjUxMiAwIDAgMC0xMy40NC0yNDEuMDg4QTM4Mi40NjQgMzgyLjQ2NCAwIDAgMCAyMzUuODQgMjQ1LjI0OHptMzE4LjA4LTExNC45NDRjNDAuNTc2IDg5LjUzNiAzNy43NiAxOTMuOTItOC40NDggMjgxLjM0NGE3NzkuODQgNzc5Ljg0IDAgMCAxIDY2LjE3NiA2Ni4xMTIgMzIwLjgzMiAzMjAuODMyIDAgMCAxIDI4Mi4xMTItOC4xMjggMzgyLjQgMzgyLjQgMCAwIDAtMTEwLjE0NC0yMjkuMTIgMzgyLjQgMzgyLjQgMCAwIDAtMjI5LjYzMi0xMTAuMjA4ek04MjguOCA4MjguOGE0NDggNDQ4IDAgMSAxLTYzMy42LTYzMy42IDQ0OCA0NDggMCAwIDEgNjMzLjYgNjMzLjZcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9iYXNrZXRiYWxsLnZ1ZVxudmFyIGJhc2tldGJhbGxfZGVmYXVsdCA9IGJhc2tldGJhbGxfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2JlbGwtZmlsbGVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDE3IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxNyB9IGZyb20gXCJ2dWVcIjtcbnZhciBiZWxsX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNyh7XG4gIG5hbWU6IFwiQmVsbEZpbGxlZFwiLFxuICBfX25hbWU6IFwiYmVsbC1maWxsZWRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE3KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTcoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNjQwIDgzMmExMjggMTI4IDAgMCAxLTI1NiAwem0xOTItNjRIMTM0LjRhMzguNCAzOC40IDAgMCAxIDAtNzYuOEgxOTJWNDQ4YzAtMTU0Ljg4IDExMC4wOC0yODQuMTYgMjU2LjMyLTMxMy42YTY0IDY0IDAgMSAxIDEyNy4zNiAwQTMyMC4xMjggMzIwLjEyOCAwIDAgMSA4MzIgNDQ4djI0My4yaDU3LjZhMzguNCAzOC40IDAgMCAxIDAgNzYuOHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9iZWxsLWZpbGxlZC52dWVcbnZhciBiZWxsX2ZpbGxlZF9kZWZhdWx0ID0gYmVsbF9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2JlbGwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTggfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE4LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE4LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE4IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGJlbGxfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTgoe1xuICBuYW1lOiBcIkJlbGxcIixcbiAgX19uYW1lOiBcImJlbGxcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE4KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxOChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTgoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDY0YTY0IDY0IDAgMCAxIDY0IDY0djY0SDQ0OHYtNjRhNjQgNjQgMCAwIDEgNjQtNjRcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTgoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjU2IDc2OGg1MTJWNDQ4YTI1NiAyNTYgMCAxIDAtNTEyIDB6bTI1Ni02NDBhMzIwIDMyMCAwIDAgMSAzMjAgMzIwdjM4NEgxOTJWNDQ4YTMyMCAzMjAgMCAwIDEgMzIwLTMyMFwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxOChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk05NiA3NjhoODMycTMyIDAgMzIgMzJ0LTMyIDMySDk2cS0zMiAwLTMyLTMydDMyLTMybTM1MiAxMjhoMTI4YTY0IDY0IDAgMCAxLTEyOCAwXCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvYmVsbC52dWVcbnZhciBiZWxsX2RlZmF1bHQgPSBiZWxsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9iaWN5Y2xlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDE5IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxOSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxOSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxOSB9IGZyb20gXCJ2dWVcIjtcbnZhciBiaWN5Y2xlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE5KHtcbiAgbmFtZTogXCJCaWN5Y2xlXCIsXG4gIF9fbmFtZTogXCJiaWN5Y2xlXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxOSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTkoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTI1NiA4MzJhMTI4IDEyOCAwIDEgMCAwLTI1NiAxMjggMTI4IDAgMCAwIDAgMjU2bTAgNjRhMTkyIDE5MiAwIDEgMSAwLTM4NCAxOTIgMTkyIDAgMCAxIDAgMzg0XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTI4OCA2NzJoMzIwcTMyIDAgMzIgMzJ0LTMyIDMySDI4OHEtMzIgMC0zMi0zMnQzMi0zMlwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxOShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk03NjggODMyYTEyOCAxMjggMCAxIDAgMC0yNTYgMTI4IDEyOCAwIDAgMCAwIDI1Nm0wIDY0YTE5MiAxOTIgMCAxIDEgMC0zODQgMTkyIDE5MiAwIDAgMSAwIDM4NFwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxOShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00ODAgMTkyYTMyIDMyIDAgMCAxIDAtNjRoMTYwYTMyIDMyIDAgMCAxIDMxLjA0IDI0LjI1Nmw5NiAzODRhMzIgMzIgMCAwIDEtNjIuMDggMTUuNDg4TDYxNS4wNCAxOTJ6TTk2IDM4NGEzMiAzMiAwIDAgMSAwLTY0aDEyOGEzMiAzMiAwIDAgMSAzMC4zMzYgMjEuODg4bDY0IDE5MmEzMiAzMiAwIDEgMS02MC42NzIgMjAuMjI0TDIwMC45NiAzODR6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTM3My4zNzYgNTk5LjgwOC00Mi43NTItNDcuNjE2IDMyMC0yODggNDIuNzUyIDQ3LjYxNnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9iaWN5Y2xlLnZ1ZVxudmFyIGJpY3ljbGVfZGVmYXVsdCA9IGJpY3ljbGVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2JvdHRvbS1sZWZ0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIwIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyMCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMCB9IGZyb20gXCJ2dWVcIjtcbnZhciBib3R0b21fbGVmdF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyMCh7XG4gIG5hbWU6IFwiQm90dG9tTGVmdFwiLFxuICBfX25hbWU6IFwiYm90dG9tLWxlZnRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIwKCksIF9jcmVhdGVFbGVtZW50QmxvY2syMChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjU2IDc2OGg0MTZhMzIgMzIgMCAxIDEgMCA2NEgyMjRhMzIgMzIgMCAwIDEtMzItMzJWMzUyYTMyIDMyIDAgMCAxIDY0IDB6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTI0Ni42NTYgODIyLjY1NmEzMiAzMiAwIDAgMS00NS4zMTItNDUuMzEybDU0NC01NDRhMzIgMzIgMCAwIDEgNDUuMzEyIDQ1LjMxMmwtNTQ0IDU0NHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9ib3R0b20tbGVmdC52dWVcbnZhciBib3R0b21fbGVmdF9kZWZhdWx0ID0gYm90dG9tX2xlZnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2JvdHRvbS1yaWdodC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyMSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjEsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjEsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjEgfSBmcm9tIFwidnVlXCI7XG52YXIgYm90dG9tX3JpZ2h0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDIxKHtcbiAgbmFtZTogXCJCb3R0b21SaWdodFwiLFxuICBfX25hbWU6IFwiYm90dG9tLXJpZ2h0XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjEoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIxKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTM1MiA3NjhhMzIgMzIgMCAxIDAgMCA2NGg0NDhhMzIgMzIgMCAwIDAgMzItMzJWMzUyYTMyIDMyIDAgMCAwLTY0IDB2NDE2elwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk03NzcuMzQ0IDgyMi42NTZhMzIgMzIgMCAwIDAgNDUuMzEyLTQ1LjMxMmwtNTQ0LTU0NGEzMiAzMiAwIDAgMC00NS4zMTIgNDUuMzEyelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2JvdHRvbS1yaWdodC52dWVcbnZhciBib3R0b21fcmlnaHRfZGVmYXVsdCA9IGJvdHRvbV9yaWdodF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvYm90dG9tLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIyIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyMiwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMiB9IGZyb20gXCJ2dWVcIjtcbnZhciBib3R0b21fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjIoe1xuICBuYW1lOiBcIkJvdHRvbVwiLFxuICBfX25hbWU6IFwiYm90dG9tXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjIoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIyKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTU0NCA4MDUuODg4VjE2OGEzMiAzMiAwIDEgMC02NCAwdjYzNy44ODhMMjQ2LjY1NiA1NTcuOTUyYTMwLjcyIDMwLjcyIDAgMCAwLTQ1LjMxMiAwIDM1LjUyIDM1LjUyIDAgMCAwIDAgNDguMDY0bDI4OCAzMDYuMDQ4YTMwLjcyIDMwLjcyIDAgMCAwIDQ1LjMxMiAwbDI4OC0zMDYuMDQ4YTM1LjUyIDM1LjUyIDAgMCAwIDAtNDggMzAuNzIgMzAuNzIgMCAwIDAtNDUuMzEyIDBMNTQ0IDgwNS44MjR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvYm90dG9tLnZ1ZVxudmFyIGJvdHRvbV9kZWZhdWx0ID0gYm90dG9tX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9ib3dsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIzIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyMywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMyB9IGZyb20gXCJ2dWVcIjtcbnZhciBib3dsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDIzKHtcbiAgbmFtZTogXCJCb3dsXCIsXG4gIF9fbmFtZTogXCJib3dsXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMygpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjMoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIzKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTcxNC40MzIgNzA0YTM1MS43NDQgMzUxLjc0NCAwIDAgMCAxNDguMTYtMjU2SDE2MS40MDhhMzUxLjc0NCAzNTEuNzQ0IDAgMCAwIDE0OC4xNiAyNTZ6TTI4OCA3NjYuNTkyQTQxNS42OCA0MTUuNjggMCAwIDEgOTYgNDE2YTMyIDMyIDAgMCAxIDMyLTMyaDc2OGEzMiAzMiAwIDAgMSAzMiAzMiA0MTUuNjggNDE1LjY4IDAgMCAxLTE5MiAzNTAuNTkyVjgzMmE2NCA2NCAwIDAgMS02NCA2NEgzNTJhNjQgNjQgMCAwIDEtNjQtNjR6TTQ5My4yNDggMzIwaC05MC40OTZsMjU0LjQtMjU0LjRhMzIgMzIgMCAxIDEgNDUuMjQ4IDQ1LjI0OHptMTg3LjMyOCAwaC0xMjhsMjY5LjY5Ni0xNTUuNzEyYTMyIDMyIDAgMCAxIDMyIDU1LjQyNHpNMzUyIDc2OHY2NGgzMjB2LTY0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2Jvd2wudnVlXG52YXIgYm93bF9kZWZhdWx0ID0gYm93bF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI0IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syNCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNCB9IGZyb20gXCJ2dWVcIjtcbnZhciBib3hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjQoe1xuICBuYW1lOiBcIkJveFwiLFxuICBfX25hbWU6IFwiYm94XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjQoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTMxNy4wNTYgMTI4IDEyOCAzNDQuMDY0Vjg5Nmg3NjhWMzQ0LjA2NEw3MDYuOTQ0IDEyOHptLTE0LjUyOC02NGg0MTguOTQ0YTMyIDMyIDAgMCAxIDI0LjA2NCAxMC44OGwyMDYuNTI4IDIzNi4wOTZBMzIgMzIgMCAwIDEgOTYwIDMzMi4wMzJWOTI4YTMyIDMyIDAgMCAxLTMyIDMySDk2YTMyIDMyIDAgMCAxLTMyLTMyVjMzMi4wMzJhMzIgMzIgMCAwIDEgNy45MzYtMjEuMTJMMjc4LjQgNzUuMDA4QTMyIDMyIDAgMCAxIDMwMi41MjggNjR6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTY0IDMyMGg4OTZ2NjRINjR6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTQ0OCAzMjcuODcyVjY0MGgxMjhWMzI3Ljg3Mkw1MjYuMDggMTI4aC0yOC4xNnpNNDQ4IDY0aDEyOGw2NCAyNTZ2MzUyYTMyIDMyIDAgMCAxLTMyIDMySDQxNmEzMiAzMiAwIDAgMS0zMi0zMlYzMjB6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvYm94LnZ1ZVxudmFyIGJveF9kZWZhdWx0ID0gYm94X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9icmllZmNhc2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjUgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI1LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI1LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI1IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGJyaWVmY2FzZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyNSh7XG4gIG5hbWU6IFwiQnJpZWZjYXNlXCIsXG4gIF9fbmFtZTogXCJicmllZmNhc2VcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI1KCksIF9jcmVhdGVFbGVtZW50QmxvY2syNShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjUoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMzIwIDMyMFYxMjhoMzg0djE5MmgxOTJ2MTkySDEyOFYzMjB6TTEyOCA1NzZoNzY4djMyMEgxMjh6bTI1Ni0yNTZoMjU2LjA2NFYxOTJIMzg0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2JyaWVmY2FzZS52dWVcbnZhciBicmllZmNhc2VfZGVmYXVsdCA9IGJyaWVmY2FzZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvYnJ1c2gtZmlsbGVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI2IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNiwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syNiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNiB9IGZyb20gXCJ2dWVcIjtcbnZhciBicnVzaF9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjYoe1xuICBuYW1lOiBcIkJydXNoRmlsbGVkXCIsXG4gIF9fbmFtZTogXCJicnVzaC1maWxsZWRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI2KCksIF9jcmVhdGVFbGVtZW50QmxvY2syNihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNjA4IDcwNHYxNjBhOTYgOTYgMCAwIDEtMTkyIDBWNzA0aC05NmExMjggMTI4IDAgMCAxLTEyOC0xMjhoNjQwYTEyOCAxMjggMCAwIDEtMTI4IDEyOHpNMTkyIDUxMlYxMjguMDY0aDY0MFY1MTJ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvYnJ1c2gtZmlsbGVkLnZ1ZVxudmFyIGJydXNoX2ZpbGxlZF9kZWZhdWx0ID0gYnJ1c2hfZmlsbGVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9icnVzaC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyNyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjcsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjcsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjcgfSBmcm9tIFwidnVlXCI7XG52YXIgYnJ1c2hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50Mjcoe1xuICBuYW1lOiBcIkJydXNoXCIsXG4gIF9fbmFtZTogXCJicnVzaFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjcoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI3KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk04OTYgNDQ4SDEyOHYxOTJhNjQgNjQgMCAwIDAgNjQgNjRoMTkydjE5MmgyNTZWNzA0aDE5MmE2NCA2NCAwIDAgMCA2NC02NHptLTc3MC43NTItNjRjMC00Ny41NTIgNS4yNDgtOTAuMjQgMTUuNTUyLTEyOCAxNC43Mi01NC4wMTYgNDIuNDk2LTEwNy4zOTIgODMuMi0xNjBoNDE3LjI4bC0xNS4zNiA3MC4zMzZMNzM2IDk2aDIxMS4yYy0yNC44MzIgNDIuODgtNDEuOTIgOTYuMjU2LTUxLjIgMTYwYTY2My44NzIgNjYzLjg3MiAwIDAgMC02LjE0NCAxMjhIOTYwdjI1NmExMjggMTI4IDAgMCAxLTEyOCAxMjhINzA0djE2MGEzMiAzMiAwIDAgMS0zMiAzMkgzNTJhMzIgMzIgMCAwIDEtMzItMzJWNzY4SDE5MkExMjggMTI4IDAgMCAxIDY0IDY0MFYzODRoNjEuMjQ4em02NCAwaDYzNi41NDRjLTIuMDQ4LTQ1LjgyNC4yNTYtOTEuNTg0IDYuODQ4LTEzNy4yMTYgNC40OC0zMC44NDggMTAuNjg4LTU5Ljc3NiAxOC42ODgtODYuNzg0aC05Ni42NGwtMjIxLjEyIDE0MS4yNDhMNTYxLjkyIDE2MEgyNTYuNTEyYy0yNS44NTYgMzcuODg4LTQzLjc3NiA3NS40NTYtNTMuOTUyIDExMi44MzItOC43NjggMzIuMDY0LTEzLjI0OCA2OS4xMi0xMy4zMTIgMTExLjE2OHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9icnVzaC52dWVcbnZhciBicnVzaF9kZWZhdWx0ID0gYnJ1c2hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2J1cmdlci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyOCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjgsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjgsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjggfSBmcm9tIFwidnVlXCI7XG52YXIgYnVyZ2VyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI4KHtcbiAgbmFtZTogXCJCdXJnZXJcIixcbiAgX19uYW1lOiBcImJ1cmdlclwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjgoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI4KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyOChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xNjAgNTEyYTMyIDMyIDAgMCAwLTMyIDMydjY0YTMyIDMyIDAgMCAwIDMwLjA4IDMySDg2NGEzMiAzMiAwIDAgMCAzMi0zMnYtNjRhMzIgMzIgMCAwIDAtMzItMzJ6bTczNi01OC41NkE5NiA5NiAwIDAgMSA5NjAgNTQ0djY0YTk2IDk2IDAgMCAxLTUxLjk2OCA4NS4zMTJMODU1LjM2IDgzMy42YTk2IDk2IDAgMCAxLTg5Ljg1NiA2Mi4yNzJIMjU4LjQ5NkE5NiA5NiAwIDAgMSAxNjguNjQgODMzLjZsLTUyLjYwOC0xNDAuMjI0QTk2IDk2IDAgMCAxIDY0IDYwOHYtNjRhOTYgOTYgMCAwIDEgNjQtOTAuNTZWNDQ4YTM4NCAzODQgMCAxIDEgNzY4IDUuNDRNODMyIDQ0OGEzMjAgMzIwIDAgMCAwLTY0MCAwek01MTIgNzA0SDE4OC4zNTJsNDAuMTkyIDEwNy4xMzZhMzIgMzIgMCAwIDAgMjkuOTUyIDIwLjczNmg1MDcuMDA4YTMyIDMyIDAgMCAwIDI5Ljk1Mi0yMC43MzZMODM1LjY0OCA3MDR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvYnVyZ2VyLnZ1ZVxudmFyIGJ1cmdlcl9kZWZhdWx0ID0gYnVyZ2VyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9jYWxlbmRhci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyOSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjksIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjksIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjkgfSBmcm9tIFwidnVlXCI7XG52YXIgY2FsZW5kYXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50Mjkoe1xuICBuYW1lOiBcIkNhbGVuZGFyXCIsXG4gIF9fbmFtZTogXCJjYWxlbmRhclwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjkoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI5KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyOShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xMjggMzg0djUxMmg3NjhWMTkySDc2OHYzMmEzMiAzMiAwIDEgMS02NCAwdi0zMkgzMjB2MzJhMzIgMzIgMCAwIDEtNjQgMHYtMzJIMTI4djEyOGg3Njh2NjR6bTE5Mi0yNTZoMzg0Vjk2YTMyIDMyIDAgMSAxIDY0IDB2MzJoMTYwYTMyIDMyIDAgMCAxIDMyIDMydjc2OGEzMiAzMiAwIDAgMS0zMiAzMkg5NmEzMiAzMiAwIDAgMS0zMi0zMlYxNjBhMzIgMzIgMCAwIDEgMzItMzJoMTYwVjk2YTMyIDMyIDAgMCAxIDY0IDB6bS0zMiAzODRoNjRhMzIgMzIgMCAwIDEgMCA2NGgtNjRhMzIgMzIgMCAwIDEgMC02NG0wIDE5Mmg2NGEzMiAzMiAwIDEgMSAwIDY0aC02NGEzMiAzMiAwIDEgMSAwLTY0bTE5Mi0xOTJoNjRhMzIgMzIgMCAwIDEgMCA2NGgtNjRhMzIgMzIgMCAwIDEgMC02NG0wIDE5Mmg2NGEzMiAzMiAwIDEgMSAwIDY0aC02NGEzMiAzMiAwIDEgMSAwLTY0bTE5Mi0xOTJoNjRhMzIgMzIgMCAxIDEgMCA2NGgtNjRhMzIgMzIgMCAxIDEgMC02NG0wIDE5Mmg2NGEzMiAzMiAwIDEgMSAwIDY0aC02NGEzMiAzMiAwIDEgMSAwLTY0XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvY2FsZW5kYXIudnVlXG52YXIgY2FsZW5kYXJfZGVmYXVsdCA9IGNhbGVuZGFyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9jYW1lcmEtZmlsbGVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDMwIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUzMCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2szMCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2szMCB9IGZyb20gXCJ2dWVcIjtcbnZhciBjYW1lcmFfZmlsbGVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDMwKHtcbiAgbmFtZTogXCJDYW1lcmFGaWxsZWRcIixcbiAgX19uYW1lOiBcImNhbWVyYS1maWxsZWRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazMwKCksIF9jcmVhdGVFbGVtZW50QmxvY2szMChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMzAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTYwIDIyNGE2NCA2NCAwIDAgMC02NCA2NHY1MTJhNjQgNjQgMCAwIDAgNjQgNjRoNzA0YTY0IDY0IDAgMCAwIDY0LTY0VjI4OGE2NCA2NCAwIDAgMC02NC02NEg3NDguNDE2bC00Ni40NjQtOTIuNjcyQTY0IDY0IDAgMCAwIDY0NC43MzYgOTZIMzc5LjMyOGE2NCA2NCAwIDAgMC01Ny4yMTYgMzUuMzkyTDI3NS43NzYgMjI0em0zNTIgNDM1LjJhMTE1LjIgMTE1LjIgMCAxIDAgMC0yMzAuNCAxMTUuMiAxMTUuMiAwIDAgMCAwIDIzMC40bTAgMTQwLjhhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMCAxIDAgNTEyXCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvY2FtZXJhLWZpbGxlZC52dWVcbnZhciBjYW1lcmFfZmlsbGVkX2RlZmF1bHQgPSBjYW1lcmFfZmlsbGVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9jYW1lcmEudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MzEgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTMxLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazMxLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazMxIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGNhbWVyYV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQzMSh7XG4gIG5hbWU6IFwiQ2FtZXJhXCIsXG4gIF9fbmFtZTogXCJjYW1lcmFcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazMxKCksIF9jcmVhdGVFbGVtZW50QmxvY2szMShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMzEoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNODk2IDI1NkgxMjh2NTc2aDc2OHptLTE5OS40MjQtNjQtMzIuMDY0LTY0aC0zMDQuOTZsLTMyIDY0ek05NiAxOTJoMTYwbDQ2LjMzNi05Mi42MDhBNjQgNjQgMCAwIDEgMzU5LjU1MiA2NGgzMDQuOTZhNjQgNjQgMCAwIDEgNTcuMjE2IDM1LjMyOEw3NjguMTkyIDE5Mkg5MjhhMzIgMzIgMCAwIDEgMzIgMzJ2NjQwYTMyIDMyIDAgMCAxLTMyIDMySDk2YTMyIDMyIDAgMCAxLTMyLTMyVjIyNGEzMiAzMiAwIDAgMSAzMi0zMm00MTYgNTEyYTE2MCAxNjAgMCAxIDAgMC0zMjAgMTYwIDE2MCAwIDAgMCAwIDMyMG0wIDY0YTIyNCAyMjQgMCAxIDEgMC00NDggMjI0IDIyNCAwIDAgMSAwIDQ0OFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2NhbWVyYS52dWVcbnZhciBjYW1lcmFfZGVmYXVsdCA9IGNhbWVyYV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvY2FyZXQtYm90dG9tLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDMyIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUzMiwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2szMiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2szMiB9IGZyb20gXCJ2dWVcIjtcbnZhciBjYXJldF9ib3R0b21fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MzIoe1xuICBuYW1lOiBcIkNhcmV0Qm90dG9tXCIsXG4gIF9fbmFtZTogXCJjYXJldC1ib3R0b21cIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazMyKCksIF9jcmVhdGVFbGVtZW50QmxvY2szMihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMzIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJtMTkyIDM4NCAzMjAgMzg0IDMyMC0zODR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvY2FyZXQtYm90dG9tLnZ1ZVxudmFyIGNhcmV0X2JvdHRvbV9kZWZhdWx0ID0gY2FyZXRfYm90dG9tX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9jYXJldC1sZWZ0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDMzIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUzMywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2szMywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2szMyB9IGZyb20gXCJ2dWVcIjtcbnZhciBjYXJldF9sZWZ0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDMzKHtcbiAgbmFtZTogXCJDYXJldExlZnRcIixcbiAgX19uYW1lOiBcImNhcmV0LWxlZnRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazMzKCksIF9jcmVhdGVFbGVtZW50QmxvY2szMyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMzMoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNjcyIDE5MiAyODggNTExLjkzNiA2NzIgODMyelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2NhcmV0LWxlZnQudnVlXG52YXIgY2FyZXRfbGVmdF9kZWZhdWx0ID0gY2FyZXRfbGVmdF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvY2FyZXQtcmlnaHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MzQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTM0LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazM0LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazM0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGNhcmV0X3JpZ2h0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDM0KHtcbiAgbmFtZTogXCJDYXJldFJpZ2h0XCIsXG4gIF9fbmFtZTogXCJjYXJldC1yaWdodFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMzQoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazM0KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUzNChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zODQgMTkydjY0MGwzODQtMzIwLjA2NHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jYXJldC1yaWdodC52dWVcbnZhciBjYXJldF9yaWdodF9kZWZhdWx0ID0gY2FyZXRfcmlnaHRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2NhcmV0LXRvcC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQzNSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMzUsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMzUsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMzUgfSBmcm9tIFwidnVlXCI7XG52YXIgY2FyZXRfdG9wX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDM1KHtcbiAgbmFtZTogXCJDYXJldFRvcFwiLFxuICBfX25hbWU6IFwiY2FyZXQtdG9wXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2szNSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMzUoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTM1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiAzMjAgMTkyIDcwNGg2MzkuOTM2elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2NhcmV0LXRvcC52dWVcbnZhciBjYXJldF90b3BfZGVmYXVsdCA9IGNhcmV0X3RvcF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvY2VsbHBob25lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDM2IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUzNiwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2szNiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2szNiB9IGZyb20gXCJ2dWVcIjtcbnZhciBjZWxscGhvbmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MzYoe1xuICBuYW1lOiBcIkNlbGxwaG9uZVwiLFxuICBfX25hbWU6IFwiY2VsbHBob25lXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2szNigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMzYoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTM2KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTI1NiAxMjhhNjQgNjQgMCAwIDAtNjQgNjR2NjQwYTY0IDY0IDAgMCAwIDY0IDY0aDUxMmE2NCA2NCAwIDAgMCA2NC02NFYxOTJhNjQgNjQgMCAwIDAtNjQtNjR6bTAtNjRoNTEyYTEyOCAxMjggMCAwIDEgMTI4IDEyOHY2NDBhMTI4IDEyOCAwIDAgMS0xMjggMTI4SDI1NmExMjggMTI4IDAgMCAxLTEyOC0xMjhWMTkyQTEyOCAxMjggMCAwIDEgMjU2IDY0bTEyOCAxMjhoMjU2YTMyIDMyIDAgMSAxIDAgNjRIMzg0YTMyIDMyIDAgMCAxIDAtNjRtMTI4IDY0MGE2NCA2NCAwIDEgMSAwLTEyOCA2NCA2NCAwIDAgMSAwIDEyOFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2NlbGxwaG9uZS52dWVcbnZhciBjZWxscGhvbmVfZGVmYXVsdCA9IGNlbGxwaG9uZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvY2hhdC1kb3Qtcm91bmQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MzcgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTM3LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazM3LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazM3IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGNoYXRfZG90X3JvdW5kX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDM3KHtcbiAgbmFtZTogXCJDaGF0RG90Um91bmRcIixcbiAgX19uYW1lOiBcImNoYXQtZG90LXJvdW5kXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2szNygpLCBfY3JlYXRlRWxlbWVudEJsb2NrMzcoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTM3KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTE3NC43MiA4NTUuNjggMTM1LjI5Ni00NS4xMiAyMy42OCAxMS44NEMzODguMDk2IDg0OS41MzYgNDQ4LjU3NiA4NjQgNTEyIDg2NGMyMTEuODQgMCAzODQtMTY2Ljc4NCAzODQtMzUyUzcyMy44NCAxNjAgNTEyIDE2MCAxMjggMzI2Ljc4NCAxMjggNTEyYzAgNjkuMTIgMjQuOTYgMTM5LjI2NCA3MC44NDggMTk5LjIzMmwyMi4wOCAyOC44LTQ2LjI3MiAxMTUuNTg0em0tNDUuMjQ4IDgyLjU2QTMyIDMyIDAgMCAxIDg5LjYgODk2bDU4LjM2OC0xNDUuOTJDOTQuNzIgNjgwLjMyIDY0IDU5Ni44NjQgNjQgNTEyIDY0IDI5OS45MDQgMjU2IDk2IDUxMiA5NnM0NDggMjAzLjkwNCA0NDggNDE2LTE5MiA0MTYtNDQ4IDQxNmE0NjEuMDU2IDQ2MS4wNTYgMCAwIDEtMjA2LjkxMi00OC4zODRsLTE3NS42MTYgNTguNTZ6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTM3KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA1NjMuMmE1MS4yIDUxLjIgMCAxIDEgMC0xMDIuNCA1MS4yIDUxLjIgMCAwIDEgMCAxMDIuNG0xOTIgMGE1MS4yIDUxLjIgMCAxIDEgMC0xMDIuNCA1MS4yIDUxLjIgMCAwIDEgMCAxMDIuNG0tMzg0IDBhNTEuMiA1MS4yIDAgMSAxIDAtMTAyLjQgNTEuMiA1MS4yIDAgMCAxIDAgMTAyLjRcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jaGF0LWRvdC1yb3VuZC52dWVcbnZhciBjaGF0X2RvdF9yb3VuZF9kZWZhdWx0ID0gY2hhdF9kb3Rfcm91bmRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2NoYXQtZG90LXNxdWFyZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQzOCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMzgsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMzgsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMzggfSBmcm9tIFwidnVlXCI7XG52YXIgY2hhdF9kb3Rfc3F1YXJlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDM4KHtcbiAgbmFtZTogXCJDaGF0RG90U3F1YXJlXCIsXG4gIF9fbmFtZTogXCJjaGF0LWRvdC1zcXVhcmVcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazM4KCksIF9jcmVhdGVFbGVtZW50QmxvY2szOChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMzgoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjczLjUzNiA3MzZIODAwYTY0IDY0IDAgMCAwIDY0LTY0VjI1NmE2NCA2NCAwIDAgMC02NC02NEgyMjRhNjQgNjQgMCAwIDAtNjQgNjR2NTcwLjg4ek0yOTYgODAwIDE0Ny45NjggOTE4LjRBMzIgMzIgMCAwIDEgOTYgODkzLjQ0VjI1NmExMjggMTI4IDAgMCAxIDEyOC0xMjhoNTc2YTEyOCAxMjggMCAwIDEgMTI4IDEyOHY0MTZhMTI4IDEyOCAwIDAgMS0xMjggMTI4elwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUzOChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01MTIgNDk5LjJhNTEuMiA1MS4yIDAgMSAxIDAtMTAyLjQgNTEuMiA1MS4yIDAgMCAxIDAgMTAyLjR6bTE5MiAwYTUxLjIgNTEuMiAwIDEgMSAwLTEwMi40IDUxLjIgNTEuMiAwIDAgMSAwIDEwMi40em0tMzg0IDBhNTEuMiA1MS4yIDAgMSAxIDAtMTAyLjQgNTEuMiA1MS4yIDAgMCAxIDAgMTAyLjR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvY2hhdC1kb3Qtc3F1YXJlLnZ1ZVxudmFyIGNoYXRfZG90X3NxdWFyZV9kZWZhdWx0ID0gY2hhdF9kb3Rfc3F1YXJlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9jaGF0LWxpbmUtcm91bmQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MzkgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTM5LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazM5LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazM5IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGNoYXRfbGluZV9yb3VuZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQzOSh7XG4gIG5hbWU6IFwiQ2hhdExpbmVSb3VuZFwiLFxuICBfX25hbWU6IFwiY2hhdC1saW5lLXJvdW5kXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2szOSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMzkoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTM5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTE3NC43MiA4NTUuNjggMTM1LjI5Ni00NS4xMiAyMy42OCAxMS44NEMzODguMDk2IDg0OS41MzYgNDQ4LjU3NiA4NjQgNTEyIDg2NGMyMTEuODQgMCAzODQtMTY2Ljc4NCAzODQtMzUyUzcyMy44NCAxNjAgNTEyIDE2MCAxMjggMzI2Ljc4NCAxMjggNTEyYzAgNjkuMTIgMjQuOTYgMTM5LjI2NCA3MC44NDggMTk5LjIzMmwyMi4wOCAyOC44LTQ2LjI3MiAxMTUuNTg0em0tNDUuMjQ4IDgyLjU2QTMyIDMyIDAgMCAxIDg5LjYgODk2bDU4LjM2OC0xNDUuOTJDOTQuNzIgNjgwLjMyIDY0IDU5Ni44NjQgNjQgNTEyIDY0IDI5OS45MDQgMjU2IDk2IDUxMiA5NnM0NDggMjAzLjkwNCA0NDggNDE2LTE5MiA0MTYtNDQ4IDQxNmE0NjEuMDU2IDQ2MS4wNTYgMCAwIDEtMjA2LjkxMi00OC4zODRsLTE3NS42MTYgNTguNTZ6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTM5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTM1MiA1NzZoMzIwcTMyIDAgMzIgMzJ0LTMyIDMySDM1MnEtMzIgMC0zMi0zMnQzMi0zMm0zMi0xOTJoMjU2cTMyIDAgMzIgMzJ0LTMyIDMySDM4NHEtMzIgMC0zMi0zMnQzMi0zMlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2NoYXQtbGluZS1yb3VuZC52dWVcbnZhciBjaGF0X2xpbmVfcm91bmRfZGVmYXVsdCA9IGNoYXRfbGluZV9yb3VuZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvY2hhdC1saW5lLXNxdWFyZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ0MCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlNDAsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNDAsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrNDAgfSBmcm9tIFwidnVlXCI7XG52YXIgY2hhdF9saW5lX3NxdWFyZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ0MCh7XG4gIG5hbWU6IFwiQ2hhdExpbmVTcXVhcmVcIixcbiAgX19uYW1lOiBcImNoYXQtbGluZS1zcXVhcmVcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazQwKCksIF9jcmVhdGVFbGVtZW50QmxvY2s0MChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNDAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTYwIDgyNi44OCAyNzMuNTM2IDczNkg4MDBhNjQgNjQgMCAwIDAgNjQtNjRWMjU2YTY0IDY0IDAgMCAwLTY0LTY0SDIyNGE2NCA2NCAwIDAgMC02NCA2NHpNMjk2IDgwMCAxNDcuOTY4IDkxOC40QTMyIDMyIDAgMCAxIDk2IDg5My40NFYyNTZhMTI4IDEyOCAwIDAgMSAxMjgtMTI4aDU3NmExMjggMTI4IDAgMCAxIDEyOCAxMjh2NDE2YTEyOCAxMjggMCAwIDEtMTI4IDEyOHpcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNDAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMzUyIDUxMmgzMjBxMzIgMCAzMiAzMnQtMzIgMzJIMzUycS0zMiAwLTMyLTMydDMyLTMybTAtMTkyaDMyMHEzMiAwIDMyIDMydC0zMiAzMkgzNTJxLTMyIDAtMzItMzJ0MzItMzJcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jaGF0LWxpbmUtc3F1YXJlLnZ1ZVxudmFyIGNoYXRfbGluZV9zcXVhcmVfZGVmYXVsdCA9IGNoYXRfbGluZV9zcXVhcmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2NoYXQtcm91bmQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50NDEgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTQxLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazQxLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazQxIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGNoYXRfcm91bmRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50NDEoe1xuICBuYW1lOiBcIkNoYXRSb3VuZFwiLFxuICBfX25hbWU6IFwiY2hhdC1yb3VuZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNDEoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazQxKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU0MShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIm0xNzQuNzIgODU1LjY4IDEzMC4wNDgtNDMuMzkyIDIzLjQyNCAxMS4zOTJDMzgyLjQgODQ5Ljk4NCA0NDQuMzUyIDg2NCA1MTIgODY0YzIyMy43NDQgMCAzODQtMTU5Ljg3MiAzODQtMzUyIDAtMTkyLjgzMi0xNTkuMTA0LTM1Mi0zODQtMzUyUzEyOCAzMTkuMTY4IDEyOCA1MTJhMzQxLjEyIDM0MS4xMiAwIDAgMCA2OS4yNDggMjA0LjI4OGwyMS42MzIgMjguOC00NC4xNiAxMTAuNTI4em0tNDUuMjQ4IDgyLjU2QTMyIDMyIDAgMCAxIDg5LjYgODk2bDU2LjUxMi0xNDEuMjQ4QTQwNS4xMiA0MDUuMTIgMCAwIDEgNjQgNTEyQzY0IDI5OS45MDQgMjM1LjY0OCA5NiA1MTIgOTZzNDQ4IDIwMy45MDQgNDQ4IDQxNi0xNzMuNDQgNDE2LTQ0OCA0MTZjLTc5LjY4IDAtMTUwLjg0OC0xNy4xNTItMjExLjcxMi00Ni43MmwtMTcwLjg4IDU2Ljk2elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2NoYXQtcm91bmQudnVlXG52YXIgY2hhdF9yb3VuZF9kZWZhdWx0ID0gY2hhdF9yb3VuZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvY2hhdC1zcXVhcmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50NDIgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTQyLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazQyLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazQyIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGNoYXRfc3F1YXJlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDQyKHtcbiAgbmFtZTogXCJDaGF0U3F1YXJlXCIsXG4gIF9fbmFtZTogXCJjaGF0LXNxdWFyZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNDIoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazQyKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU0MihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0yNzMuNTM2IDczNkg4MDBhNjQgNjQgMCAwIDAgNjQtNjRWMjU2YTY0IDY0IDAgMCAwLTY0LTY0SDIyNGE2NCA2NCAwIDAgMC02NCA2NHY1NzAuODh6TTI5NiA4MDAgMTQ3Ljk2OCA5MTguNEEzMiAzMiAwIDAgMSA5NiA4OTMuNDRWMjU2YTEyOCAxMjggMCAwIDEgMTI4LTEyOGg1NzZhMTI4IDEyOCAwIDAgMSAxMjggMTI4djQxNmExMjggMTI4IDAgMCAxLTEyOCAxMjh6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvY2hhdC1zcXVhcmUudnVlXG52YXIgY2hhdF9zcXVhcmVfZGVmYXVsdCA9IGNoYXRfc3F1YXJlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9jaGVjay52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ0MyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlNDMsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNDMsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrNDMgfSBmcm9tIFwidnVlXCI7XG52YXIgY2hlY2tfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50NDMoe1xuICBuYW1lOiBcIkNoZWNrXCIsXG4gIF9fbmFtZTogXCJjaGVja1wiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNDMoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazQzKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU0MyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00MDYuNjU2IDcwNi45NDQgMTk1Ljg0IDQ5Ni4yNTZhMzIgMzIgMCAxIDAtNDUuMjQ4IDQ1LjI0OGwyNTYgMjU2IDUxMi01MTJhMzIgMzIgMCAwIDAtNDUuMjQ4LTQ1LjI0OEw0MDYuNTkyIDcwNi45NDR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvY2hlY2sudnVlXG52YXIgY2hlY2tfZGVmYXVsdCA9IGNoZWNrX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9jaGVja2VkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDQ0IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU0NCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s0NCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s0NCB9IGZyb20gXCJ2dWVcIjtcbnZhciBjaGVja2VkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDQ0KHtcbiAgbmFtZTogXCJDaGVja2VkXCIsXG4gIF9fbmFtZTogXCJjaGVja2VkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s0NCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrNDQoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTQ0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTcwNCAxOTJoMTYwdjczNkgxNjBWMTkyaDE2MC4wNjR2NjRINzA0ek0zMTEuNjE2IDUzNy4yOGwtNDUuMzEyIDQ1LjI0OEw0NDcuMzYgNzYzLjUybDMxNi44LTMxNi44LTQ1LjMxMi00NS4xODRMNDQ3LjM2IDY3My4wMjR6TTM4NCAxOTJWOTZoMjU2djk2elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2NoZWNrZWQudnVlXG52YXIgY2hlY2tlZF9kZWZhdWx0ID0gY2hlY2tlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvY2hlcnJ5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDQ1IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU0NSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s0NSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s0NSB9IGZyb20gXCJ2dWVcIjtcbnZhciBjaGVycnlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50NDUoe1xuICBuYW1lOiBcIkNoZXJyeVwiLFxuICBfX25hbWU6IFwiY2hlcnJ5XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s0NSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrNDUoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTQ1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTI2MS4wNTYgNDQ5LjZjMTMuODI0LTY5LjY5NiAzNC44OC0xMjguOTYgNjMuMzYtMTc3LjcyOCAyMy43NDQtNDAuODMyIDYxLjEyLTg4LjY0IDExMi4yNTYtMTQzLjg3MkgzMjBhMzIgMzIgMCAwIDEgMC02NGgzODRhMzIgMzIgMCAxIDEgMCA2NEg1NTQuNzUyYzE0LjkxMiAzOS4xNjggNDEuMzQ0IDg2LjU5MiA3OS41NTIgMTQxLjc2IDQ3LjM2IDY4LjQ4IDg0LjggMTA2Ljc1MiAxMDYuMzA0IDExNC4zMDRhMjI0IDIyNCAwIDEgMS04NC45OTIgMTQuNzg0Yy0yMi42NTYtMjIuOTEyLTQ3LjA0LTUzLjc2LTczLjkyLTkyLjYwOC0zOC44NDgtNTYuMTI4LTY3LjAwOC0xMDUuNzkyLTg0LjM1Mi0xNDkuMzEyLTU1LjI5NiA1OC4yNC05NC41MjggMTA3LjUyLTExNy43NiAxNDcuMi0yMy4xNjggMzkuNzQ0LTQxLjA4OCA4OC43NjgtNTMuNTY4IDE0Ny4wNzJhMjI0LjA2NCAyMjQuMDY0IDAgMSAxLTY0Ljk2LTEuNnpNMjg4IDgzMmExNjAgMTYwIDAgMSAwIDAtMzIwIDE2MCAxNjAgMCAwIDAgMCAzMjBtNDQ4LTY0YTE2MCAxNjAgMCAxIDAgMC0zMjAgMTYwIDE2MCAwIDAgMCAwIDMyMFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2NoZXJyeS52dWVcbnZhciBjaGVycnlfZGVmYXVsdCA9IGNoZXJyeV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvY2hpY2tlbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ0NiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlNDYsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNDYsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrNDYgfSBmcm9tIFwidnVlXCI7XG52YXIgY2hpY2tlbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ0Nih7XG4gIG5hbWU6IFwiQ2hpY2tlblwiLFxuICBfX25hbWU6IFwiY2hpY2tlblwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNDYoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazQ2KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU0NihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zNDkuOTUyIDcxNi45OTIgNDc4LjcyIDU4OC4xNmExMDYuNjg4IDEwNi42ODggMCAwIDEtMjYuMTc2LTE5LjA3MiAxMDYuNjg4IDEwNi42ODggMCAwIDEtMTkuMDcyLTI2LjE3NkwzMDQuNzA0IDY3MS43NDRjLjc2OCAzLjA3MiAxLjQ3MiA2LjE0NCAyLjA0OCA5LjIxNmwyLjA0OCAzMS45MzYgMzEuODcyIDEuOTg0YzMuMTM2LjY0IDYuMjA4IDEuMjggOS4yOCAyLjExMnptNTcuMzQ0IDMzLjE1MmExMjggMTI4IDAgMSAxLTIxNi4zMiAxMTQuNDMybC0xLjkyLTMyLTMyLTEuOTJhMTI4IDEyOCAwIDEgMSAxMTQuNDMyLTIxNi4zMkw0MTYuNjQgNDY5LjI0OGMtMi40MzItMTAxLjQ0IDU4LjExMi0yMzkuMTA0IDE0OS4wNTYtMzMwLjA0OCAxMDcuMzI4LTEwNy4zMjggMjMxLjI5Ni04NS41MDQgMzE2LjggMCA4NS40NCA4NS40NCAxMDcuMzI4IDIwOS40MDggMCAzMTYuOC05MS4wMDggOTAuODgtMjI4LjY3MiAxNTEuNDI0LTMzMC4xMTIgMTQ5LjA1Nkw0MDcuMjk2IDc1MC4wOHptOTAuNDk2LTIyNi4zMDRjNDkuNTM2IDQ5LjUzNiAyMzMuMzQ0LTcuMDQgMzM5LjM5Mi0xMTMuMDg4IDc4LjIwOC03OC4yMDggNjMuMjMyLTE2My4wNzIgMC0yMjYuMzA0LTYzLjE2OC02My4yMzItMTQ4LjAzMi03OC4yMDgtMjI2LjI0IDBDNTA0Ljg5NiAyOTAuNDk2IDQ0OC4zMiA0NzQuMzY4IDQ5Ny43OTIgNTIzLjg0TTI0NC44NjQgNzA4LjkyOGE2NCA2NCAwIDEgMC01OS44NCA1OS44NGw1Ni4zMi0zLjUyem04LjA2NCAxMjcuNjhhNjQgNjQgMCAxIDAgNTkuODQtNTkuODRsLTU2LjMyIDMuNTItMy41MiA1Ni4zMnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jaGlja2VuLnZ1ZVxudmFyIGNoaWNrZW5fZGVmYXVsdCA9IGNoaWNrZW5fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2Nocm9tZS1maWxsZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50NDcgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTQ3LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazQ3LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazQ3IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGNocm9tZV9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50NDcoe1xuICBuYW1lOiBcIkNocm9tZUZpbGxlZFwiLFxuICBfX25hbWU6IFwiY2hyb21lLWZpbGxlZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNDcoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazQ3KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICBcInhtbDpzcGFjZVwiOiBcInByZXNlcnZlXCIsXG4gICAgICBzdHlsZTogeyBcImVuYWJsZS1iYWNrZ3JvdW5kXCI6IFwibmV3IDAgMCAxMDI0IDEwMjRcIiB9LFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNDcoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNOTM4LjY3IDUxMi4wMWMwLTQ0LjU5LTYuODItODcuNi0xOS41NC0xMjhINjgyLjY3YTIxMi4zNzIgMjEyLjM3MiAwIDAgMSA0Mi42NyAxMjhjLjA2IDM4LjcxLTEwLjQ1IDc2LjctMzAuNDIgMTA5Ljg3bC0xODIuOTEgMzE2LjhjMjM1LjY1LS4wMSA0MjYuNjYtMTkxLjAyIDQyNi42Ni00MjYuNjd6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTQ3KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTU3Ni43OSA0MDEuNjNhMTI3LjkyIDEyNy45MiAwIDAgMC02My41Ni0xNy42Yy0yMi4zNi0uMjItNDQuMzkgNS40My02My44OSAxNi4zOHMtMzUuNzkgMjYuODItNDcuMjUgNDYuMDJhMTI4LjAwNSAxMjguMDA1IDAgMCAwLTIuMTYgMTI3LjQ0bDEuMjQgMi4xM2ExMjcuOTA2IDEyNy45MDYgMCAwIDAgNDYuMzYgNDYuNjEgMTI3LjkwNyAxMjcuOTA3IDAgMCAwIDYzLjM4IDE3LjQ0YzIyLjI5LjIgNDQuMjQtNS40MyA2My42OC0xNi4zM2ExMjcuOTQgMTI3Ljk0IDAgMCAwIDQ3LjE2LTQ1Ljc5di0uMDFsMS4xMS0xLjkyYTEyNy45ODQgMTI3Ljk4NCAwIDAgMCAuMjktMTI3LjQ2IDEyNy45NTcgMTI3Ljk1NyAwIDAgMC00Ni4zNi00Ni45MVwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU0NyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zOTQuNDUgMzMzLjk2QTIxMy4zMzYgMjEzLjMzNiAwIDAgMSA1MTIgMjk4LjY3aDM2OS41OEE0MjYuNTAzIDQyNi41MDMgMCAwIDAgNTEyIDg1LjM0YTQyNS41OTggNDI1LjU5OCAwIDAgMC0xNzEuNzQgMzUuOTggNDI1LjY0NCA0MjUuNjQ0IDAgMCAwLTE0Mi42MiAxMDIuMjJsMTE4LjE0IDIwNC42M2EyMTMuMzk3IDIxMy4zOTcgMCAwIDEgNzguNjctOTQuMjFtMTE3LjU2IDYwNC43Mkg1MTJ6bS05Ny4yNS0yMzYuNzNhMjEzLjI4NCAyMTMuMjg0IDAgMCAxLTg5LjU0LTg2LjgxTDE0Mi40OCAyOTguNmMtMzYuMzUgNjIuODEtNTcuMTMgMTM1LjY4LTU3LjEzIDIxMy40MiAwIDIwMy44MSAxNDIuOTMgMzc0LjIyIDMzMy45NSA0MTYuNTVoLjA0bDExOC4xOS0yMDQuNzFhMjEzLjMxNSAyMTMuMzE1IDAgMCAxLTEyMi43Ny0yMS45MXpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jaHJvbWUtZmlsbGVkLnZ1ZVxudmFyIGNocm9tZV9maWxsZWRfZGVmYXVsdCA9IGNocm9tZV9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2NpcmNsZS1jaGVjay1maWxsZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50NDggfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTQ4LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazQ4LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazQ4IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGNpcmNsZV9jaGVja19maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50NDgoe1xuICBuYW1lOiBcIkNpcmNsZUNoZWNrRmlsbGVkXCIsXG4gIF9fbmFtZTogXCJjaXJjbGUtY2hlY2stZmlsbGVkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s0OCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrNDgoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTQ4KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA2NGE0NDggNDQ4IDAgMSAxIDAgODk2IDQ0OCA0NDggMCAwIDEgMC04OTZtLTU1LjgwOCA1MzYuMzg0LTk5LjUyLTk5LjU4NGEzOC40IDM4LjQgMCAxIDAtNTQuMzM2IDU0LjMzNmwxMjYuNzIgMTI2LjcyYTM4LjI3MiAzOC4yNzIgMCAwIDAgNTQuMzM2IDBsMjYyLjQtMjYyLjQ2NGEzOC40IDM4LjQgMCAxIDAtNTQuMjcyLTU0LjMzNnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jaXJjbGUtY2hlY2stZmlsbGVkLnZ1ZVxudmFyIGNpcmNsZV9jaGVja19maWxsZWRfZGVmYXVsdCA9IGNpcmNsZV9jaGVja19maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2NpcmNsZS1jaGVjay52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ0OSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlNDksIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNDksIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrNDkgfSBmcm9tIFwidnVlXCI7XG52YXIgY2lyY2xlX2NoZWNrX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDQ5KHtcbiAgbmFtZTogXCJDaXJjbGVDaGVja1wiLFxuICBfX25hbWU6IFwiY2lyY2xlLWNoZWNrXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s0OSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrNDkoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTQ5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA4OTZhMzg0IDM4NCAwIDEgMCAwLTc2OCAzODQgMzg0IDAgMCAwIDAgNzY4bTAgNjRhNDQ4IDQ0OCAwIDEgMSAwLTg5NiA0NDggNDQ4IDAgMCAxIDAgODk2XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTQ5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTc0NS4zNDQgMzYxLjM0NGEzMiAzMiAwIDAgMSA0NS4zMTIgNDUuMzEybC0yODggMjg4YTMyIDMyIDAgMCAxLTQ1LjMxMiAwbC0xNjAtMTYwYTMyIDMyIDAgMSAxIDQ1LjMxMi00NS4zMTJMNDgwIDYyNi43NTJsMjY1LjM0NC0yNjUuNDA4elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2NpcmNsZS1jaGVjay52dWVcbnZhciBjaXJjbGVfY2hlY2tfZGVmYXVsdCA9IGNpcmNsZV9jaGVja192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvY2lyY2xlLWNsb3NlLWZpbGxlZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ1MCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlNTAsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNTAsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrNTAgfSBmcm9tIFwidnVlXCI7XG52YXIgY2lyY2xlX2Nsb3NlX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ1MCh7XG4gIG5hbWU6IFwiQ2lyY2xlQ2xvc2VGaWxsZWRcIixcbiAgX19uYW1lOiBcImNpcmNsZS1jbG9zZS1maWxsZWRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazUwKCksIF9jcmVhdGVFbGVtZW50QmxvY2s1MChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNTAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDY0YTQ0OCA0NDggMCAxIDEgMCA4OTYgNDQ4IDQ0OCAwIDAgMSAwLTg5Nm0wIDM5My42NjRMNDA3LjkzNiAzNTMuNmEzOC40IDM4LjQgMCAxIDAtNTQuMzM2IDU0LjMzNkw0NTcuNjY0IDUxMiAzNTMuNiA2MTYuMDY0YTM4LjQgMzguNCAwIDEgMCA1NC4zMzYgNTQuMzM2TDUxMiA1NjYuMzM2IDYxNi4wNjQgNjcwLjRhMzguNCAzOC40IDAgMSAwIDU0LjMzNi01NC4zMzZMNTY2LjMzNiA1MTIgNjcwLjQgNDA3LjkzNmEzOC40IDM4LjQgMCAxIDAtNTQuMzM2LTU0LjMzNnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jaXJjbGUtY2xvc2UtZmlsbGVkLnZ1ZVxudmFyIGNpcmNsZV9jbG9zZV9maWxsZWRfZGVmYXVsdCA9IGNpcmNsZV9jbG9zZV9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2NpcmNsZS1jbG9zZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ1MSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlNTEsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNTEsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrNTEgfSBmcm9tIFwidnVlXCI7XG52YXIgY2lyY2xlX2Nsb3NlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDUxKHtcbiAgbmFtZTogXCJDaXJjbGVDbG9zZVwiLFxuICBfX25hbWU6IFwiY2lyY2xlLWNsb3NlXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s1MSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrNTEoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTUxKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTQ2Ni43NTIgNTEyLTkwLjQ5Ni05MC40OTZhMzIgMzIgMCAwIDEgNDUuMjQ4LTQ1LjI0OEw1MTIgNDY2Ljc1Mmw5MC40OTYtOTAuNDk2YTMyIDMyIDAgMSAxIDQ1LjI0OCA0NS4yNDhMNTU3LjI0OCA1MTJsOTAuNDk2IDkwLjQ5NmEzMiAzMiAwIDEgMS00NS4yNDggNDUuMjQ4TDUxMiA1NTcuMjQ4bC05MC40OTYgOTAuNDk2YTMyIDMyIDAgMCAxLTQ1LjI0OC00NS4yNDh6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTUxKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA4OTZhMzg0IDM4NCAwIDEgMCAwLTc2OCAzODQgMzg0IDAgMCAwIDAgNzY4bTAgNjRhNDQ4IDQ0OCAwIDEgMSAwLTg5NiA0NDggNDQ4IDAgMCAxIDAgODk2XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvY2lyY2xlLWNsb3NlLnZ1ZVxudmFyIGNpcmNsZV9jbG9zZV9kZWZhdWx0ID0gY2lyY2xlX2Nsb3NlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9jaXJjbGUtcGx1cy1maWxsZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50NTIgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTUyLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazUyLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazUyIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGNpcmNsZV9wbHVzX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ1Mih7XG4gIG5hbWU6IFwiQ2lyY2xlUGx1c0ZpbGxlZFwiLFxuICBfX25hbWU6IFwiY2lyY2xlLXBsdXMtZmlsbGVkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s1MigpLCBfY3JlYXRlRWxlbWVudEJsb2NrNTIoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTUyKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA2NGE0NDggNDQ4IDAgMSAxIDAgODk2IDQ0OCA0NDggMCAwIDEgMC04OTZtLTM4LjQgNDA5LjZIMzI2LjRhMzguNCAzOC40IDAgMSAwIDAgNzYuOGgxNDcuMnYxNDcuMmEzOC40IDM4LjQgMCAwIDAgNzYuOCAwVjU1MC40aDE0Ny4yYTM4LjQgMzguNCAwIDAgMCAwLTc2LjhINTUwLjRWMzI2LjRhMzguNCAzOC40IDAgMSAwLTc2LjggMHYxNDcuMnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jaXJjbGUtcGx1cy1maWxsZWQudnVlXG52YXIgY2lyY2xlX3BsdXNfZmlsbGVkX2RlZmF1bHQgPSBjaXJjbGVfcGx1c19maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2NpcmNsZS1wbHVzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDUzIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU1Mywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s1MywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s1MyB9IGZyb20gXCJ2dWVcIjtcbnZhciBjaXJjbGVfcGx1c192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ1Myh7XG4gIG5hbWU6IFwiQ2lyY2xlUGx1c1wiLFxuICBfX25hbWU6IFwiY2lyY2xlLXBsdXNcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazUzKCksIF9jcmVhdGVFbGVtZW50QmxvY2s1MyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNTMoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMzUyIDQ4MGgzMjBhMzIgMzIgMCAxIDEgMCA2NEgzNTJhMzIgMzIgMCAwIDEgMC02NFwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU1MyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00ODAgNjcyVjM1MmEzMiAzMiAwIDEgMSA2NCAwdjMyMGEzMiAzMiAwIDAgMS02NCAwXCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTUzKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA4OTZhMzg0IDM4NCAwIDEgMCAwLTc2OCAzODQgMzg0IDAgMCAwIDAgNzY4bTAgNjRhNDQ4IDQ0OCAwIDEgMSAwLTg5NiA0NDggNDQ4IDAgMCAxIDAgODk2XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvY2lyY2xlLXBsdXMudnVlXG52YXIgY2lyY2xlX3BsdXNfZGVmYXVsdCA9IGNpcmNsZV9wbHVzX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9jbG9jay52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ1NCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlNTQsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNTQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrNTQgfSBmcm9tIFwidnVlXCI7XG52YXIgY2xvY2tfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50NTQoe1xuICBuYW1lOiBcIkNsb2NrXCIsXG4gIF9fbmFtZTogXCJjbG9ja1wiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNTQoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazU0KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU1NChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01MTIgODk2YTM4NCAzODQgMCAxIDAgMC03NjggMzg0IDM4NCAwIDAgMCAwIDc2OG0wIDY0YTQ0OCA0NDggMCAxIDEgMC04OTYgNDQ4IDQ0OCAwIDAgMSAwIDg5NlwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU1NChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00ODAgMjU2YTMyIDMyIDAgMCAxIDMyIDMydjI1NmEzMiAzMiAwIDAgMS02NCAwVjI4OGEzMiAzMiAwIDAgMSAzMi0zMlwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU1NChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00ODAgNTEyaDI1NnEzMiAwIDMyIDMydC0zMiAzMkg0ODBxLTMyIDAtMzItMzJ0MzItMzJcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jbG9jay52dWVcbnZhciBjbG9ja19kZWZhdWx0ID0gY2xvY2tfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2Nsb3NlLWJvbGQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50NTUgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTU1LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazU1LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazU1IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGNsb3NlX2JvbGRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50NTUoe1xuICBuYW1lOiBcIkNsb3NlQm9sZFwiLFxuICBfX25hbWU6IFwiY2xvc2UtYm9sZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNTUoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazU1KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU1NShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xOTUuMiAxOTUuMmE2NCA2NCAwIDAgMSA5MC40OTYgMEw1MTIgNDIxLjUwNCA3MzguMzA0IDE5NS4yYTY0IDY0IDAgMCAxIDkwLjQ5NiA5MC40OTZMNjAyLjQ5NiA1MTIgODI4LjggNzM4LjMwNGE2NCA2NCAwIDAgMS05MC40OTYgOTAuNDk2TDUxMiA2MDIuNDk2IDI4NS42OTYgODI4LjhhNjQgNjQgMCAwIDEtOTAuNDk2LTkwLjQ5Nkw0MjEuNTA0IDUxMiAxOTUuMiAyODUuNjk2YTY0IDY0IDAgMCAxIDAtOTAuNDk2elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2Nsb3NlLWJvbGQudnVlXG52YXIgY2xvc2VfYm9sZF9kZWZhdWx0ID0gY2xvc2VfYm9sZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvY2xvc2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50NTYgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTU2LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazU2LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazU2IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGNsb3NlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDU2KHtcbiAgbmFtZTogXCJDbG9zZVwiLFxuICBfX25hbWU6IFwiY2xvc2VcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazU2KCksIF9jcmVhdGVFbGVtZW50QmxvY2s1NihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNTYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNzY0LjI4OCAyMTQuNTkyIDUxMiA0NjYuODggMjU5LjcxMiAyMTQuNTkyYTMxLjkzNiAzMS45MzYgMCAwIDAtNDUuMTIgNDUuMTJMNDY2Ljc1MiA1MTIgMjE0LjUyOCA3NjQuMjI0YTMxLjkzNiAzMS45MzYgMCAxIDAgNDUuMTIgNDUuMTg0TDUxMiA1NTcuMTg0bDI1Mi4yODggMjUyLjI4OGEzMS45MzYgMzEuOTM2IDAgMCAwIDQ1LjEyLTQ1LjEyTDU1Ny4xMiA1MTIuMDY0bDI1Mi4yODgtMjUyLjM1MmEzMS45MzYgMzEuOTM2IDAgMSAwLTQ1LjEyLTQ1LjE4NHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jbG9zZS52dWVcbnZhciBjbG9zZV9kZWZhdWx0ID0gY2xvc2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2Nsb3VkeS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ1NyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlNTcsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNTcsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrNTcgfSBmcm9tIFwidnVlXCI7XG52YXIgY2xvdWR5X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDU3KHtcbiAgbmFtZTogXCJDbG91ZHlcIixcbiAgX19uYW1lOiBcImNsb3VkeVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNTcoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazU3KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU1NyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01OTguNCA4MzEuODcySDMyOC4xOTJhMjU2IDI1NiAwIDAgMS0zNC40OTYtNTEwLjUyOEEzNTIgMzUyIDAgMSAxIDU5OC40IDgzMS44NzJtLTI3MS4zNi02NGgyNzIuMjU2YTI4OCAyODggMCAxIDAtMjQ4LjUxMi00MTcuNjY0TDMzNS4wNCAzODEuNDRsLTM0LjgxNiAzLjU4NGExOTIgMTkyIDAgMCAwIDI2Ljg4IDM4Mi44NDh6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvY2xvdWR5LnZ1ZVxudmFyIGNsb3VkeV9kZWZhdWx0ID0gY2xvdWR5X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9jb2ZmZWUtY3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDU4IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU1OCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s1OCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s1OCB9IGZyb20gXCJ2dWVcIjtcbnZhciBjb2ZmZWVfY3VwX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDU4KHtcbiAgbmFtZTogXCJDb2ZmZWVDdXBcIixcbiAgX19uYW1lOiBcImNvZmZlZS1jdXBcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazU4KCksIF9jcmVhdGVFbGVtZW50QmxvY2s1OChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNTgoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNzY4IDE5MmExOTIgMTkyIDAgMSAxLTggMzgzLjgwOEEyNTYuMTI4IDI1Ni4xMjggMCAwIDEgNTEyIDc2OEgzMjBBMjU2IDI1NiAwIDAgMSA2NCA1MTJWMTYwYTMyIDMyIDAgMCAxIDMyLTMyaDY0MGEzMiAzMiAwIDAgMSAzMiAzMnptMCA2NHYyNTZhMTI4IDEyOCAwIDEgMCAwLTI1Nk05NiA4MzJoNjQwYTMyIDMyIDAgMSAxIDAgNjRIOTZhMzIgMzIgMCAxIDEgMC02NG0zMi02NDB2MzIwYTE5MiAxOTIgMCAwIDAgMTkyIDE5MmgxOTJhMTkyIDE5MiAwIDAgMCAxOTItMTkyVjE5MnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jb2ZmZWUtY3VwLnZ1ZVxudmFyIGNvZmZlZV9jdXBfZGVmYXVsdCA9IGNvZmZlZV9jdXBfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2NvZmZlZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ1OSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlNTksIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNTksIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrNTkgfSBmcm9tIFwidnVlXCI7XG52YXIgY29mZmVlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDU5KHtcbiAgbmFtZTogXCJDb2ZmZWVcIixcbiAgX19uYW1lOiBcImNvZmZlZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNTkoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazU5KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU1OShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk04MjIuNTkyIDE5MmgxNC4yNzJhMzIgMzIgMCAwIDEgMzEuNjE2IDI2Ljc1MmwyMS4zMTIgMTI4QTMyIDMyIDAgMCAxIDg1OC4yNCAzODRoLTQ5LjM0NGwtMzkuMDQgNTQ2LjMwNEEzMiAzMiAwIDAgMSA3MzcuOTIgOTYwSDI4NS44MjRhMzIgMzIgMCAwIDEtMzItMjkuNjk2TDIxNC45MTIgMzg0SDE2NS43NmEzMiAzMiAwIDAgMS0zMS41NTItMzcuMjQ4bDIxLjMxMi0xMjhBMzIgMzIgMCAwIDEgMTg3LjEzNiAxOTJoMTQuMDE2bC02LjcyLTkzLjY5NkEzMiAzMiAwIDAgMSAyMjYuMzY4IDY0aDU3MS4wMDhhMzIgMzIgMCAwIDEgMzEuOTM2IDM0LjMwNHptLTY0LjEyOCAwIDQuNTQ0LTY0SDI2MC43MzZsNC41NDQgNjRoNDkzLjE4NG0tNTQ4LjE2IDEyOEg4MjAuNDhsLTEwLjY4OC02NEgyMTQuMjA4bC0xMC42ODggNjRoNi43ODRtNjguNzM2IDY0IDM2LjU0NCA1MTJINzA4LjE2bDM2LjU0NC01MTJ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvY29mZmVlLnZ1ZVxudmFyIGNvZmZlZV9kZWZhdWx0ID0gY29mZmVlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9jb2luLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDYwIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU2MCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s2MCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s2MCB9IGZyb20gXCJ2dWVcIjtcbnZhciBjb2luX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDYwKHtcbiAgbmFtZTogXCJDb2luXCIsXG4gIF9fbmFtZTogXCJjb2luXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s2MCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrNjAoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTYwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTE2MS45MiA1ODAuNzM2IDI5Ljg4OCA1OC44OEMxNzEuMzI4IDY1OS43NzYgMTYwIDY4MS43MjggMTYwIDcwNGMwIDgyLjMwNCAxNTUuMzI4IDE2MCAzNTIgMTYwczM1Mi03Ny42OTYgMzUyLTE2MGMwLTIyLjI3Mi0xMS4zOTItNDQuMTYtMzEuODA4LTY0LjMybDMwLjQ2NC01OC40MzJDOTAzLjkzNiA2MTUuODA4IDkyOCA2NTcuNjY0IDkyOCA3MDRjMCAxMjkuNzI4LTE4OC41NDQgMjI0LTQxNiAyMjRTOTYgODMzLjcyOCA5NiA3MDRjMC00Ni41OTIgMjQuMzItODguNTc2IDY1LjkyLTEyMy4yNjR6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTYwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTE2MS45MiAzODguNzM2IDI5Ljg4OCA1OC44OEMxNzEuMzI4IDQ2Ny44NCAxNjAgNDg5Ljc5MiAxNjAgNTEyYzAgODIuMzA0IDE1NS4zMjggMTYwIDM1MiAxNjBzMzUyLTc3LjY5NiAzNTItMTYwYzAtMjIuMjcyLTExLjM5Mi00NC4xNi0zMS44MDgtNjQuMzJsMzAuNDY0LTU4LjQzMkM5MDMuOTM2IDQyMy44MDggOTI4IDQ2NS42NjQgOTI4IDUxMmMwIDEyOS43MjgtMTg4LjU0NCAyMjQtNDE2IDIyNFM5NiA2NDEuNzI4IDk2IDUxMmMwLTQ2LjU5MiAyNC4zMi04OC41NzYgNjUuOTItMTIzLjI2NHpcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNjAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDU0NGMtMjI3LjQ1NiAwLTQxNi05NC4yNzItNDE2LTIyNFMyODQuNTQ0IDk2IDUxMiA5NnM0MTYgOTQuMjcyIDQxNiAyMjQtMTg4LjU0NCAyMjQtNDE2IDIyNG0wLTY0YzE5Ni42NzIgMCAzNTItNzcuNjk2IDM1Mi0xNjBTNzA4LjY3MiAxNjAgNTEyIDE2MHMtMzUyIDc3LjY5Ni0zNTIgMTYwIDE1NS4zMjggMTYwIDM1MiAxNjBcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jb2luLnZ1ZVxudmFyIGNvaW5fZGVmYXVsdCA9IGNvaW5fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2NvbGQtZHJpbmsudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50NjEgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTYxLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazYxLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazYxIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGNvbGRfZHJpbmtfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50NjEoe1xuICBuYW1lOiBcIkNvbGREcmlua1wiLFxuICBfX25hbWU6IFwiY29sZC1kcmlua1wiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNjEoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazYxKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU2MShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk03NjggNjRhMTkyIDE5MiAwIDEgMS02OS45NTIgMzcwLjg4TDQ4MCA3MjUuMzc2Vjg5Nmg5NmEzMiAzMiAwIDEgMSAwIDY0SDMyMGEzMiAzMiAwIDEgMSAwLTY0aDk2VjcyNS4zNzZMNzYuOCAyNzMuNTM2YTY0IDY0IDAgMCAxLTEyLjgtMzguNHYtMTAuNjg4YTMyIDMyIDAgMCAxIDMyLTMyaDcxLjgwOGwtNjUuNTM2LTgzLjg0YTMyIDMyIDAgMCAxIDUwLjQzMi0zOS40MjRsOTYuMjU2IDEyMy4yNjRoMzM3LjcyOEExOTIuMDY0IDE5Mi4wNjQgMCAwIDEgNzY4IDY0TTY1Ni44OTYgMTkyLjQ0OEg4MDBhMzIgMzIgMCAwIDEgMzIgMzJ2MTAuNjI0YTY0IDY0IDAgMCAxLTEyLjggMzguNGwtODAuNDQ4IDEwNy4yYTEyOCAxMjggMCAxIDAtODEuOTItMTg4LjE2di0uMDY0em0tMzU3Ljg4OCA2NCAxMjkuNDcyIDE2NS43NmEzMiAzMiAwIDAgMS01MC40MzIgMzkuMzZsLTE2MC4yNTYtMjA1LjEySDE0NGwzMDQgNDA0LjkyOCAzMDQtNDA0LjkyOHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jb2xkLWRyaW5rLnZ1ZVxudmFyIGNvbGRfZHJpbmtfZGVmYXVsdCA9IGNvbGRfZHJpbmtfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2NvbGxlY3Rpb24tdGFnLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDYyIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU2Miwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s2MiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s2MiB9IGZyb20gXCJ2dWVcIjtcbnZhciBjb2xsZWN0aW9uX3RhZ192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ2Mih7XG4gIG5hbWU6IFwiQ29sbGVjdGlvblRhZ1wiLFxuICBfX25hbWU6IFwiY29sbGVjdGlvbi10YWdcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazYyKCksIF9jcmVhdGVFbGVtZW50QmxvY2s2MihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNjIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjU2IDEyOHY2OTguODhsMTk2LjAzMi0xNTYuODY0YTk2IDk2IDAgMCAxIDExOS45MzYgMEw3NjggODI2LjgxNlYxMjh6bS0zMi02NGg1NzZhMzIgMzIgMCAwIDEgMzIgMzJ2Nzk3LjQ0YTMyIDMyIDAgMCAxLTUxLjk2OCAyNC45Nkw1MzEuOTY4IDcyMGEzMiAzMiAwIDAgMC0zOS45MzYgMEwyNDMuOTY4IDkxOC40QTMyIDMyIDAgMCAxIDE5MiA4OTMuNDRWOTZhMzIgMzIgMCAwIDEgMzItMzJcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLXRhZy52dWVcbnZhciBjb2xsZWN0aW9uX3RhZ19kZWZhdWx0ID0gY29sbGVjdGlvbl90YWdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2NvbGxlY3Rpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50NjMgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTYzLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazYzLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazYzIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGNvbGxlY3Rpb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50NjMoe1xuICBuYW1lOiBcIkNvbGxlY3Rpb25cIixcbiAgX19uYW1lOiBcImNvbGxlY3Rpb25cIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazYzKCksIF9jcmVhdGVFbGVtZW50QmxvY2s2MyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNjMoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTkyIDczNmg2NDBWMTI4SDI1NmE2NCA2NCAwIDAgMC02NCA2NHptNjQtNjcyaDYwOGEzMiAzMiAwIDAgMSAzMiAzMnY2NzJhMzIgMzIgMCAwIDEtMzIgMzJIMTYwbC0zMiA1Ny41MzZWMTkyQTEyOCAxMjggMCAwIDEgMjU2IDY0XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTYzKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTI0MCA4MDBhNDggNDggMCAxIDAgMCA5Nmg1OTJ2LTk2em0wLTY0aDY1NnYxNjBhNjQgNjQgMCAwIDEtNjQgNjRIMjQwYTExMiAxMTIgMCAwIDEgMC0yMjRtMTQ0LTYwOHYyNTAuODhsOTYtNzYuOCA5NiA3Ni44VjEyOHptLTY0LTY0aDMyMHYzODEuNDRhMzIgMzIgMCAwIDEtNTEuOTY4IDI0Ljk2TDQ4MCAzODRsLTEwOC4wMzIgODYuNEEzMiAzMiAwIDAgMSAzMjAgNDQ1LjQ0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2NvbGxlY3Rpb24udnVlXG52YXIgY29sbGVjdGlvbl9kZWZhdWx0ID0gY29sbGVjdGlvbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvY29tbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ2NCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlNjQsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNjQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrNjQgfSBmcm9tIFwidnVlXCI7XG52YXIgY29tbWVudF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ2NCh7XG4gIG5hbWU6IFwiQ29tbWVudFwiLFxuICBfX25hbWU6IFwiY29tbWVudFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNjQoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazY0KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU2NChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk03MzYgNTA0YTU2IDU2IDAgMSAxIDAtMTEyIDU2IDU2IDAgMCAxIDAgMTEybS0yMjQgMGE1NiA1NiAwIDEgMSAwLTExMiA1NiA1NiAwIDAgMSAwIDExMm0tMjI0IDBhNTYgNTYgMCAxIDEgMC0xMTIgNTYgNTYgMCAwIDEgMCAxMTJNMTI4IDEyOHY2NDBoMTkydjE2MGwyMjQtMTYwaDM1MlYxMjh6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvY29tbWVudC52dWVcbnZhciBjb21tZW50X2RlZmF1bHQgPSBjb21tZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9jb21wYXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDY1IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU2NSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s2NSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s2NSB9IGZyb20gXCJ2dWVcIjtcbnZhciBjb21wYXNzX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDY1KHtcbiAgbmFtZTogXCJDb21wYXNzXCIsXG4gIF9fbmFtZTogXCJjb21wYXNzXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s2NSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrNjUoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTY1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA4OTZhMzg0IDM4NCAwIDEgMCAwLTc2OCAzODQgMzg0IDAgMCAwIDAgNzY4bTAgNjRhNDQ4IDQ0OCAwIDEgMSAwLTg5NiA0NDggNDQ4IDAgMCAxIDAgODk2XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTY1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTcyNS44ODggMzE1LjAwOEM2NzYuNDggNDI4LjY3MiA2MjQgNTEzLjI4IDU2OC41NzYgNTY4LjY0Yy01NS40MjQgNTUuNDI0LTEzOS45NjggMTA3LjkwNC0yNTMuNTY4IDE1Ny4zMTJhMTIuOCAxMi44IDAgMCAxLTE2Ljg5Ni0xNi44MzJjNDkuNTM2LTExMy43MjggMTAyLjAxNi0xOTguMjcyIDE1Ny4zMTItMjUzLjYzMiA1NS4zNi01NS4yOTYgMTM5LjkwNC0xMDcuNzc2IDI1My42MzItMTU3LjMxMmExMi44IDEyLjggMCAwIDEgMTYuODMyIDE2LjgzMlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2NvbXBhc3MudnVlXG52YXIgY29tcGFzc19kZWZhdWx0ID0gY29tcGFzc192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvY29ubmVjdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ2NiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlNjYsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNjYsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrNjYgfSBmcm9tIFwidnVlXCI7XG52YXIgY29ubmVjdGlvbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ2Nih7XG4gIG5hbWU6IFwiQ29ubmVjdGlvblwiLFxuICBfX25hbWU6IFwiY29ubmVjdGlvblwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNjYoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazY2KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU2NihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk02NDAgMzg0djY0SDQ0OGExMjggMTI4IDAgMCAwLTEyOCAxMjh2MTI4YTEyOCAxMjggMCAwIDAgMTI4IDEyOGgzMjBhMTI4IDEyOCAwIDAgMCAxMjgtMTI4VjU3NmExMjggMTI4IDAgMCAwLTY0LTExMC44NDhWMzk0Ljg4Yzc0LjU2IDI2LjM2OCAxMjggOTcuNDcyIDEyOCAxODEuMDU2djEyOGExOTIgMTkyIDAgMCAxLTE5MiAxOTJINDQ4YTE5MiAxOTIgMCAwIDEtMTkyLTE5MlY1NzZhMTkyIDE5MiAwIDAgMSAxOTItMTkyelwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU2NihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zODQgNjQwdi02NGgxOTJhMTI4IDEyOCAwIDAgMCAxMjgtMTI4VjMyMGExMjggMTI4IDAgMCAwLTEyOC0xMjhIMjU2YTEyOCAxMjggMCAwIDAtMTI4IDEyOHYxMjhhMTI4IDEyOCAwIDAgMCA2NCAxMTAuODQ4djcwLjI3MkExOTIuMDY0IDE5Mi4wNjQgMCAwIDEgNjQgNDQ4VjMyMGExOTIgMTkyIDAgMCAxIDE5Mi0xOTJoMzIwYTE5MiAxOTIgMCAwIDEgMTkyIDE5MnYxMjhhMTkyIDE5MiAwIDAgMS0xOTIgMTkyelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2Nvbm5lY3Rpb24udnVlXG52YXIgY29ubmVjdGlvbl9kZWZhdWx0ID0gY29ubmVjdGlvbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvY29vcmRpbmF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ2NyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlNjcsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNjcsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrNjcgfSBmcm9tIFwidnVlXCI7XG52YXIgY29vcmRpbmF0ZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ2Nyh7XG4gIG5hbWU6IFwiQ29vcmRpbmF0ZVwiLFxuICBfX25hbWU6IFwiY29vcmRpbmF0ZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNjcoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazY3KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU2NyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00ODAgNTEyaDY0djMyMGgtNjR6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTY3KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTE5MiA4OTZoNjQwYTY0IDY0IDAgMCAwLTY0LTY0SDI1NmE2NCA2NCAwIDAgMC02NCA2NG02NC0xMjhoNTEyYTEyOCAxMjggMCAwIDEgMTI4IDEyOHY2NEgxMjh2LTY0YTEyOCAxMjggMCAwIDEgMTI4LTEyOG0yNTYtMjU2YTE5MiAxOTIgMCAxIDAgMC0zODQgMTkyIDE5MiAwIDAgMCAwIDM4NG0wIDY0YTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDAgMSAwIDUxMlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2Nvb3JkaW5hdGUudnVlXG52YXIgY29vcmRpbmF0ZV9kZWZhdWx0ID0gY29vcmRpbmF0ZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvY29weS1kb2N1bWVudC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ2OCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlNjgsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNjgsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrNjggfSBmcm9tIFwidnVlXCI7XG52YXIgY29weV9kb2N1bWVudF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ2OCh7XG4gIG5hbWU6IFwiQ29weURvY3VtZW50XCIsXG4gIF9fbmFtZTogXCJjb3B5LWRvY3VtZW50XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s2OCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrNjgoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTY4KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTc2OCA4MzJhMTI4IDEyOCAwIDAgMS0xMjggMTI4SDE5MkExMjggMTI4IDAgMCAxIDY0IDgzMlYzODRhMTI4IDEyOCAwIDAgMSAxMjgtMTI4djY0YTY0IDY0IDAgMCAwLTY0IDY0djQ0OGE2NCA2NCAwIDAgMCA2NCA2NGg0NDhhNjQgNjQgMCAwIDAgNjQtNjR6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTY4KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTM4NCAxMjhhNjQgNjQgMCAwIDAtNjQgNjR2NDQ4YTY0IDY0IDAgMCAwIDY0IDY0aDQ0OGE2NCA2NCAwIDAgMCA2NC02NFYxOTJhNjQgNjQgMCAwIDAtNjQtNjR6bTAtNjRoNDQ4YTEyOCAxMjggMCAwIDEgMTI4IDEyOHY0NDhhMTI4IDEyOCAwIDAgMS0xMjggMTI4SDM4NGExMjggMTI4IDAgMCAxLTEyOC0xMjhWMTkyQTEyOCAxMjggMCAwIDEgMzg0IDY0XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvY29weS1kb2N1bWVudC52dWVcbnZhciBjb3B5X2RvY3VtZW50X2RlZmF1bHQgPSBjb3B5X2RvY3VtZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9jcHUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50NjkgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTY5LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazY5LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazY5IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGNwdV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ2OSh7XG4gIG5hbWU6IFwiQ3B1XCIsXG4gIF9fbmFtZTogXCJjcHVcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazY5KCksIF9jcmVhdGVFbGVtZW50QmxvY2s2OShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNjkoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMzIwIDI1NmE2NCA2NCAwIDAgMC02NCA2NHYzODRhNjQgNjQgMCAwIDAgNjQgNjRoMzg0YTY0IDY0IDAgMCAwIDY0LTY0VjMyMGE2NCA2NCAwIDAgMC02NC02NHptMC02NGgzODRhMTI4IDEyOCAwIDAgMSAxMjggMTI4djM4NGExMjggMTI4IDAgMCAxLTEyOCAxMjhIMzIwYTEyOCAxMjggMCAwIDEtMTI4LTEyOFYzMjBhMTI4IDEyOCAwIDAgMSAxMjgtMTI4XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTY5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA2NGEzMiAzMiAwIDAgMSAzMiAzMnYxMjhoLTY0Vjk2YTMyIDMyIDAgMCAxIDMyLTMybTE2MCAwYTMyIDMyIDAgMCAxIDMyIDMydjEyOGgtNjRWOTZhMzIgMzIgMCAwIDEgMzItMzJtLTMyMCAwYTMyIDMyIDAgMCAxIDMyIDMydjEyOGgtNjRWOTZhMzIgMzIgMCAwIDEgMzItMzJtMTYwIDg5NmEzMiAzMiAwIDAgMS0zMi0zMlY4MDBoNjR2MTI4YTMyIDMyIDAgMCAxLTMyIDMybTE2MCAwYTMyIDMyIDAgMCAxLTMyLTMyVjgwMGg2NHYxMjhhMzIgMzIgMCAwIDEtMzIgMzJtLTMyMCAwYTMyIDMyIDAgMCAxLTMyLTMyVjgwMGg2NHYxMjhhMzIgMzIgMCAwIDEtMzIgMzJNNjQgNTEyYTMyIDMyIDAgMCAxIDMyLTMyaDEyOHY2NEg5NmEzMiAzMiAwIDAgMS0zMi0zMm0wLTE2MGEzMiAzMiAwIDAgMSAzMi0zMmgxMjh2NjRIOTZhMzIgMzIgMCAwIDEtMzItMzJtMCAzMjBhMzIgMzIgMCAwIDEgMzItMzJoMTI4djY0SDk2YTMyIDMyIDAgMCAxLTMyLTMybTg5Ni0xNjBhMzIgMzIgMCAwIDEtMzIgMzJIODAwdi02NGgxMjhhMzIgMzIgMCAwIDEgMzIgMzJtMC0xNjBhMzIgMzIgMCAwIDEtMzIgMzJIODAwdi02NGgxMjhhMzIgMzIgMCAwIDEgMzIgMzJtMCAzMjBhMzIgMzIgMCAwIDEtMzIgMzJIODAwdi02NGgxMjhhMzIgMzIgMCAwIDEgMzIgMzJcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9jcHUudnVlXG52YXIgY3B1X2RlZmF1bHQgPSBjcHVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2NyZWRpdC1jYXJkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDcwIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU3MCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s3MCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s3MCB9IGZyb20gXCJ2dWVcIjtcbnZhciBjcmVkaXRfY2FyZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ3MCh7XG4gIG5hbWU6IFwiQ3JlZGl0Q2FyZFwiLFxuICBfX25hbWU6IFwiY3JlZGl0LWNhcmRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazcwKCksIF9jcmVhdGVFbGVtZW50QmxvY2s3MChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNzAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNODk2IDMyNC4wOTZjMC00Mi4zNjgtMi40OTYtNTUuMjk2LTkuNTM2LTY4LjQ4YTUyLjM1MiA1Mi4zNTIgMCAwIDAtMjIuMTQ0LTIyLjA4Yy0xMy4xMi03LjA0LTI2LjA0OC05LjUzNi02OC40MTYtOS41MzZIMjI4LjA5NmMtNDIuMzY4IDAtNTUuMjk2IDIuNDk2LTY4LjQ4IDkuNTM2YTUyLjM1MiA1Mi4zNTIgMCAwIDAtMjIuMDggMjIuMTQ0Yy03LjA0IDEzLjEyLTkuNTM2IDI2LjA0OC05LjUzNiA2OC40MTZ2Mzc1LjgwOGMwIDQyLjM2OCAyLjQ5NiA1NS4yOTYgOS41MzYgNjguNDhhNTIuMzUyIDUyLjM1MiAwIDAgMCAyMi4xNDQgMjIuMDhjMTMuMTIgNy4wNCAyNi4wNDggOS41MzYgNjguNDE2IDkuNTM2aDU2Ny44MDhjNDIuMzY4IDAgNTUuMjk2LTIuNDk2IDY4LjQ4LTkuNTM2YTUyLjM1MiA1Mi4zNTIgMCAwIDAgMjIuMDgtMjIuMTQ0YzcuMDQtMTMuMTIgOS41MzYtMjYuMDQ4IDkuNTM2LTY4LjQxNnptNjQgMHYzNzUuODA4YzAgNTcuMDg4LTUuOTUyIDc3Ljc2LTE3LjA4OCA5OC41Ni0xMS4xMzYgMjAuOTI4LTI3LjUyIDM3LjMxMi00OC4zODQgNDguNDQ4LTIwLjg2NCAxMS4xMzYtNDEuNiAxNy4wODgtOTguNTYgMTcuMDg4SDIyOC4wMzJjLTU3LjA4OCAwLTc3Ljc2LTUuOTUyLTk4LjU2LTE3LjA4OGExMTYuMjg4IDExNi4yODggMCAwIDEtNDguNDQ4LTQ4LjM4NGMtMTEuMTM2LTIwLjg2NC0xNy4wODgtNDEuNi0xNy4wODgtOTguNTZWMzI0LjAzMmMwLTU3LjA4OCA1Ljk1Mi03Ny43NiAxNy4wODgtOTguNTYgMTEuMTM2LTIwLjkyOCAyNy41Mi0zNy4zMTIgNDguMzg0LTQ4LjQ0OCAyMC44NjQtMTEuMTM2IDQxLjYtMTcuMDg4IDk4LjU2LTE3LjA4OEg3OTUuODRjNTcuMDg4IDAgNzcuNzYgNS45NTIgOTguNTYgMTcuMDg4IDIwLjkyOCAxMS4xMzYgMzcuMzEyIDI3LjUyIDQ4LjQ0OCA0OC4zODQgMTEuMTM2IDIwLjg2NCAxNy4wODggNDEuNiAxNy4wODggOTguNTZ6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTcwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTY0IDMyMGg4OTZ2NjRINjR6bTAgMTI4aDg5NnY2NEg2NHptMTI4IDE5MmgyNTZ2NjRIMTkyelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2NyZWRpdC1jYXJkLnZ1ZVxudmFyIGNyZWRpdF9jYXJkX2RlZmF1bHQgPSBjcmVkaXRfY2FyZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvY3JvcC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ3MSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlNzEsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrNzEsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrNzEgfSBmcm9tIFwidnVlXCI7XG52YXIgY3JvcF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ3MSh7XG4gIG5hbWU6IFwiQ3JvcFwiLFxuICBfX25hbWU6IFwiY3JvcFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNzEoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazcxKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU3MShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0yNTYgNzY4aDY3MmEzMiAzMiAwIDEgMSAwIDY0SDIyNGEzMiAzMiAwIDAgMS0zMi0zMlY5NmEzMiAzMiAwIDAgMSA2NCAwelwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU3MShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk04MzIgMjI0djcwNGEzMiAzMiAwIDEgMS02NCAwVjI1Nkg5NmEzMiAzMiAwIDAgMSAwLTY0aDcwNGEzMiAzMiAwIDAgMSAzMiAzMlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2Nyb3AudnVlXG52YXIgY3JvcF9kZWZhdWx0ID0gY3JvcF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZC1hcnJvdy1sZWZ0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDcyIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU3Miwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s3MiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s3MiB9IGZyb20gXCJ2dWVcIjtcbnZhciBkX2Fycm93X2xlZnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50NzIoe1xuICBuYW1lOiBcIkRBcnJvd0xlZnRcIixcbiAgX19uYW1lOiBcImQtYXJyb3ctbGVmdFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNzIoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazcyKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU3MihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01MjkuNDA4IDE0OS4zNzZhMjkuMTIgMjkuMTIgMCAwIDEgNDEuNzI4IDAgMzAuNTkyIDMwLjU5MiAwIDAgMSAwIDQyLjY4OEwyNTkuMjY0IDUxMS45MzZsMzExLjg3MiAzMTkuOTM2YTMwLjU5MiAzMC41OTIgMCAwIDEtLjUxMiA0My4yNjQgMjkuMTIgMjkuMTIgMCAwIDEtNDEuMjE2LS41MTJMMTk3Ljc2IDUzNC4yNzJhMzIgMzIgMCAwIDEgMC00NC42NzJsMzMxLjY0OC0zNDAuMjI0em0yNTYgMGEyOS4xMiAyOS4xMiAwIDAgMSA0MS43MjggMCAzMC41OTIgMzAuNTkyIDAgMCAxIDAgNDIuNjg4TDUxNS4yNjQgNTExLjkzNmwzMTEuODcyIDMxOS45MzZhMzAuNTkyIDMwLjU5MiAwIDAgMS0uNTEyIDQzLjI2NCAyOS4xMiAyOS4xMiAwIDAgMS00MS4yMTYtLjUxMkw0NTMuNzYgNTM0LjI3MmEzMiAzMiAwIDAgMSAwLTQ0LjY3MmwzMzEuNjQ4LTM0MC4yMjR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZC1hcnJvdy1sZWZ0LnZ1ZVxudmFyIGRfYXJyb3dfbGVmdF9kZWZhdWx0ID0gZF9hcnJvd19sZWZ0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9kLWFycm93LXJpZ2h0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDczIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU3Mywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s3MywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s3MyB9IGZyb20gXCJ2dWVcIjtcbnZhciBkX2Fycm93X3JpZ2h0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDczKHtcbiAgbmFtZTogXCJEQXJyb3dSaWdodFwiLFxuICBfX25hbWU6IFwiZC1hcnJvdy1yaWdodFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNzMoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazczKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU3MyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00NTIuODY0IDE0OS4zMTJhMjkuMTIgMjkuMTIgMCAwIDEgNDEuNzI4LjA2NEw4MjYuMjQgNDg5LjY2NGEzMiAzMiAwIDAgMSAwIDQ0LjY3Mkw0OTQuNTkyIDg3NC42MjRhMjkuMTIgMjkuMTIgMCAwIDEtNDEuNzI4IDAgMzAuNTkyIDMwLjU5MiAwIDAgMSAwLTQyLjc1Mkw3NjQuNzM2IDUxMiA0NTIuODY0IDE5MmEzMC41OTIgMzAuNTkyIDAgMCAxIDAtNDIuNjg4bS0yNTYgMGEyOS4xMiAyOS4xMiAwIDAgMSA0MS43MjguMDY0TDU3MC4yNCA0ODkuNjY0YTMyIDMyIDAgMCAxIDAgNDQuNjcyTDIzOC41OTIgODc0LjYyNGEyOS4xMiAyOS4xMiAwIDAgMS00MS43MjggMCAzMC41OTIgMzAuNTkyIDAgMCAxIDAtNDIuNzUyTDUwOC43MzYgNTEyIDE5Ni44NjQgMTkyYTMwLjU5MiAzMC41OTIgMCAwIDEgMC00Mi42ODh6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZC1hcnJvdy1yaWdodC52dWVcbnZhciBkX2Fycm93X3JpZ2h0X2RlZmF1bHQgPSBkX2Fycm93X3JpZ2h0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9kLWNhcmV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDc0IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU3NCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s3NCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s3NCB9IGZyb20gXCJ2dWVcIjtcbnZhciBkX2NhcmV0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDc0KHtcbiAgbmFtZTogXCJEQ2FyZXRcIixcbiAgX19uYW1lOiBcImQtY2FyZXRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazc0KCksIF9jcmVhdGVFbGVtZW50QmxvY2s3NChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNzQoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJtNTEyIDEyOCAyODggMzIwSDIyNHpNMjI0IDU3Nmg1NzZMNTEyIDg5NnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9kLWNhcmV0LnZ1ZVxudmFyIGRfY2FyZXRfZGVmYXVsdCA9IGRfY2FyZXRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2RhdGEtYW5hbHlzaXMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50NzUgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTc1LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazc1LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazc1IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGRhdGFfYW5hbHlzaXNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50NzUoe1xuICBuYW1lOiBcIkRhdGFBbmFseXNpc1wiLFxuICBfX25hbWU6IFwiZGF0YS1hbmFseXNpc1wiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNzUoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazc1KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU3NShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIm02NjUuMjE2IDc2OCAxMTAuODQ4IDE5MmgtNzMuODU2TDU5MS4zNiA3NjhINDMzLjAyNEwzMjIuMTc2IDk2MEgyNDguMzJsMTEwLjg0OC0xOTJIMTYwYTMyIDMyIDAgMCAxLTMyLTMyVjE5Mkg2NGEzMiAzMiAwIDAgMSAwLTY0aDg5NmEzMiAzMiAwIDEgMSAwIDY0aC02NHY1NDRhMzIgMzIgMCAwIDEtMzIgMzJ6TTgzMiAxOTJIMTkydjUxMmg2NDB6TTM1MiA0NDhhMzIgMzIgMCAwIDEgMzIgMzJ2NjRhMzIgMzIgMCAwIDEtNjQgMHYtNjRhMzIgMzIgMCAwIDEgMzItMzJtMTYwLTY0YTMyIDMyIDAgMCAxIDMyIDMydjEyOGEzMiAzMiAwIDAgMS02NCAwVjQxNmEzMiAzMiAwIDAgMSAzMi0zMm0xNjAtNjRhMzIgMzIgMCAwIDEgMzIgMzJ2MTkyYTMyIDMyIDAgMSAxLTY0IDBWMzUyYTMyIDMyIDAgMCAxIDMyLTMyXCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZGF0YS1hbmFseXNpcy52dWVcbnZhciBkYXRhX2FuYWx5c2lzX2RlZmF1bHQgPSBkYXRhX2FuYWx5c2lzX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9kYXRhLWJvYXJkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDc2IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU3Niwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s3NiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s3NiB9IGZyb20gXCJ2dWVcIjtcbnZhciBkYXRhX2JvYXJkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDc2KHtcbiAgbmFtZTogXCJEYXRhQm9hcmRcIixcbiAgX19uYW1lOiBcImRhdGEtYm9hcmRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazc2KCksIF9jcmVhdGVFbGVtZW50QmxvY2s3NihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNzYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMzIgMTI4aDk2MHY2NEgzMnpcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNzYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTkyIDE5MnY1MTJoNjQwVjE5MnptLTY0LTY0aDc2OHY2MDhhMzIgMzIgMCAwIDEtMzIgMzJIMTYwYTMyIDMyIDAgMCAxLTMyLTMyelwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU3NihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zMjIuMTc2IDk2MEgyNDguMzJsMTQ0LjY0LTI1MC41NiA1NS40MjQgMzJ6bTQ1My44ODggMGgtNzMuODU2TDU3NiA3NDEuNDRsNTUuNDI0LTMyelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2RhdGEtYm9hcmQudnVlXG52YXIgZGF0YV9ib2FyZF9kZWZhdWx0ID0gZGF0YV9ib2FyZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZGF0YS1saW5lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDc3IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU3Nywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s3NywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s3NyB9IGZyb20gXCJ2dWVcIjtcbnZhciBkYXRhX2xpbmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50Nzcoe1xuICBuYW1lOiBcIkRhdGFMaW5lXCIsXG4gIF9fbmFtZTogXCJkYXRhLWxpbmVcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazc3KCksIF9jcmVhdGVFbGVtZW50QmxvY2s3NyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNzcoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMzU5LjE2OCA3NjhIMTYwYTMyIDMyIDAgMCAxLTMyLTMyVjE5Mkg2NGEzMiAzMiAwIDAgMSAwLTY0aDg5NmEzMiAzMiAwIDEgMSAwIDY0aC02NHY1NDRhMzIgMzIgMCAwIDEtMzIgMzJINjY1LjIxNmwxMTAuODQ4IDE5MmgtNzMuODU2TDU5MS4zNiA3NjhINDMzLjAyNEwzMjIuMTc2IDk2MEgyNDguMzJ6TTgzMiAxOTJIMTkydjUxMmg2NDB6TTM0Mi42NTYgNTM0LjY1NmEzMiAzMiAwIDEgMS00NS4zMTItNDUuMzEyTDQ0NC45OTIgMzQxLjc2bDEyNS40NCA5NC4wOEw2NzkuMDQgMzAwLjAzMmEzMiAzMiAwIDEgMSA0OS45MiAzOS45MzZMNTgxLjYzMiA1MjQuMjI0IDQ1MS4wMDggNDI2LjI0IDM0Mi42NTYgNTM0LjU5MnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9kYXRhLWxpbmUudnVlXG52YXIgZGF0YV9saW5lX2RlZmF1bHQgPSBkYXRhX2xpbmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2RlbGV0ZS1maWxsZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50NzggfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTc4LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazc4LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazc4IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGRlbGV0ZV9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50Nzgoe1xuICBuYW1lOiBcIkRlbGV0ZUZpbGxlZFwiLFxuICBfX25hbWU6IFwiZGVsZXRlLWZpbGxlZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrNzgoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazc4KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU3OChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zNTIgMTkyVjk1LjkzNmEzMiAzMiAwIDAgMSAzMi0zMmgyNTZhMzIgMzIgMCAwIDEgMzIgMzJWMTkyaDI1NmEzMiAzMiAwIDEgMSAwIDY0SDk2YTMyIDMyIDAgMCAxIDAtNjR6bTY0IDBoMTkydi02NEg0MTZ6TTE5MiA5NjBhMzIgMzIgMCAwIDEtMzItMzJWMjU2aDcwNHY2NzJhMzIgMzIgMCAwIDEtMzIgMzJ6bTIyNC0xOTJhMzIgMzIgMCAwIDAgMzItMzJWNDE2YTMyIDMyIDAgMCAwLTY0IDB2MzIwYTMyIDMyIDAgMCAwIDMyIDMybTE5MiAwYTMyIDMyIDAgMCAwIDMyLTMyVjQxNmEzMiAzMiAwIDAgMC02NCAwdjMyMGEzMiAzMiAwIDAgMCAzMiAzMlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2RlbGV0ZS1maWxsZWQudnVlXG52YXIgZGVsZXRlX2ZpbGxlZF9kZWZhdWx0ID0gZGVsZXRlX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZGVsZXRlLWxvY2F0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDc5IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU3OSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s3OSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s3OSB9IGZyb20gXCJ2dWVcIjtcbnZhciBkZWxldGVfbG9jYXRpb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50Nzkoe1xuICBuYW1lOiBcIkRlbGV0ZUxvY2F0aW9uXCIsXG4gIF9fbmFtZTogXCJkZWxldGUtbG9jYXRpb25cIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazc5KCksIF9jcmVhdGVFbGVtZW50QmxvY2s3OShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlNzkoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjg4IDg5Nmg0NDhxMzIgMCAzMiAzMnQtMzIgMzJIMjg4cS0zMiAwLTMyLTMydDMyLTMyXCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTc5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTgwMCA0MTZhMjg4IDI4OCAwIDEgMC01NzYgMGMwIDExOC4xNDQgOTQuNTI4IDI3Mi4xMjggMjg4IDQ1Ni41NzZDNzA1LjQ3MiA2ODguMTI4IDgwMCA1MzQuMTQ0IDgwMCA0MTZNNTEyIDk2MEMyNzcuMzEyIDc0Ni42ODggMTYwIDU2NS4zMTIgMTYwIDQxNmEzNTIgMzUyIDAgMCAxIDcwNCAwYzAgMTQ5LjMxMi0xMTcuMzEyIDMzMC42ODgtMzUyIDU0NFwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU3OShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zODQgMzg0aDI1NnEzMiAwIDMyIDMydC0zMiAzMkgzODRxLTMyIDAtMzItMzJ0MzItMzJcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9kZWxldGUtbG9jYXRpb24udnVlXG52YXIgZGVsZXRlX2xvY2F0aW9uX2RlZmF1bHQgPSBkZWxldGVfbG9jYXRpb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2RlbGV0ZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ4MCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlODAsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrODAsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrODAgfSBmcm9tIFwidnVlXCI7XG52YXIgZGVsZXRlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDgwKHtcbiAgbmFtZTogXCJEZWxldGVcIixcbiAgX19uYW1lOiBcImRlbGV0ZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrODAoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazgwKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU4MChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xNjAgMjU2SDk2YTMyIDMyIDAgMCAxIDAtNjRoMjU2Vjk1LjkzNmEzMiAzMiAwIDAgMSAzMi0zMmgyNTZhMzIgMzIgMCAwIDEgMzIgMzJWMTkyaDI1NmEzMiAzMiAwIDEgMSAwIDY0aC02NHY2NzJhMzIgMzIgMCAwIDEtMzIgMzJIMTkyYTMyIDMyIDAgMCAxLTMyLTMyem00NDgtNjR2LTY0SDQxNnY2NHpNMjI0IDg5Nmg1NzZWMjU2SDIyNHptMTkyLTEyOGEzMiAzMiAwIDAgMS0zMi0zMlY0MTZhMzIgMzIgMCAwIDEgNjQgMHYzMjBhMzIgMzIgMCAwIDEtMzIgMzJtMTkyIDBhMzIgMzIgMCAwIDEtMzItMzJWNDE2YTMyIDMyIDAgMCAxIDY0IDB2MzIwYTMyIDMyIDAgMCAxLTMyIDMyXCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZGVsZXRlLnZ1ZVxudmFyIGRlbGV0ZV9kZWZhdWx0ID0gZGVsZXRlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9kZXNzZXJ0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDgxIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU4MSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s4MSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s4MSB9IGZyb20gXCJ2dWVcIjtcbnZhciBkZXNzZXJ0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDgxKHtcbiAgbmFtZTogXCJEZXNzZXJ0XCIsXG4gIF9fbmFtZTogXCJkZXNzZXJ0XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s4MSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrODEoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTgxKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTEyOCA0MTZ2LTQ4YTE0NCAxNDQgMCAwIDEgMTY4LjY0LTE0MS44ODggMjI0LjEyOCAyMjQuMTI4IDAgMCAxIDQzMC43MiAwQTE0NCAxNDQgMCAwIDEgODk2IDM2OHY0OGEzODQgMzg0IDAgMCAxLTM1MiAzODIuNzJWODk2aC02NHYtOTcuMjhBMzg0IDM4NCAwIDAgMSAxMjggNDE2bTI4Ny4xMDQtMzIuMDY0aDE5My43OTJhMTQzLjgwOCAxNDMuODA4IDAgMCAxIDU4Ljg4LTEzMi43MzYgMTYwLjA2NCAxNjAuMDY0IDAgMCAwLTMxMS41NTIgMCAxNDMuODA4IDE0My44MDggMCAwIDEgNTguODggMTMyLjh6bS03Mi44OTYgMGE3MiA3MiAwIDEgMC0xNDAuNDggMGgxNDAuNDhtMzM5LjU4NCAwaDE0MC40MTZhNzIgNzIgMCAxIDAtMTQwLjQ4IDB6TTUxMiA3MzZhMzIwIDMyMCAwIDAgMCAzMTguNC0yODguMDY0SDE5My42QTMyMCAzMjAgMCAwIDAgNTEyIDczNk0zODQgODk2LjA2NGgyNTZhMzIgMzIgMCAxIDEgMCA2NEgzODRhMzIgMzIgMCAxIDEgMC02NFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2Rlc3NlcnQudnVlXG52YXIgZGVzc2VydF9kZWZhdWx0ID0gZGVzc2VydF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZGlzY291bnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50ODIgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTgyLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazgyLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazgyIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGRpc2NvdW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDgyKHtcbiAgbmFtZTogXCJEaXNjb3VudFwiLFxuICBfX25hbWU6IFwiZGlzY291bnRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazgyKCksIF9jcmVhdGVFbGVtZW50QmxvY2s4MihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlODIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjI0IDcwNGg1NzZWMzE4LjMzNkw1NTIuNTEyIDExNS44NGE2NCA2NCAwIDAgMC04MS4wMjQgMEwyMjQgMzE4LjMzNnptMCA2NHYxMjhoNTc2Vjc2OHpNNTkzLjAyNCA2Ni4zMDRsMjU5LjIgMjEyLjA5NkEzMiAzMiAwIDAgMSA4NjQgMzAzLjE2OFY5MjhhMzIgMzIgMCAwIDEtMzIgMzJIMTkyYTMyIDMyIDAgMCAxLTMyLTMyVjMwMy4xNjhhMzIgMzIgMCAwIDEgMTEuNzEyLTI0Ljc2OGwyNTkuMi0yMTIuMDk2YTEyOCAxMjggMCAwIDEgMTYyLjExMiAwXCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTgyKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA0NDhhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAwIDAgMCAxMjhtMCA2NGExMjggMTI4IDAgMSAxIDAtMjU2IDEyOCAxMjggMCAwIDEgMCAyNTZcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9kaXNjb3VudC52dWVcbnZhciBkaXNjb3VudF9kZWZhdWx0ID0gZGlzY291bnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2Rpc2gtZG90LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDgzIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU4Mywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s4MywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s4MyB9IGZyb20gXCJ2dWVcIjtcbnZhciBkaXNoX2RvdF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ4Myh7XG4gIG5hbWU6IFwiRGlzaERvdFwiLFxuICBfX25hbWU6IFwiZGlzaC1kb3RcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazgzKCksIF9jcmVhdGVFbGVtZW50QmxvY2s4MyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlODMoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJtMzg0LjA2NCAyNzQuNTYuMDY0LTUwLjY4OEExMjggMTI4IDAgMCAxIDUxMi4xMjggOTZjNzAuNTI4IDAgMTI3LjY4IDU3LjE1MiAxMjcuNjggMTI3LjY4djUwLjc1MkE0NDguMTkyIDQ0OC4xOTIgMCAwIDEgOTU1LjM5MiA3NjhINjguNTQ0QTQ0OC4xOTIgNDQ4LjE5MiAwIDAgMSAzODQgMjc0LjU2ek05NiA4MzJoODMyYTMyIDMyIDAgMSAxIDAgNjRIOTZhMzIgMzIgMCAxIDEgMC02NG0zMi0xMjhoNzY4YTM4NCAzODQgMCAxIDAtNzY4IDBtNDQ3LjgwOC00NDh2LTMyLjMyYTYzLjY4IDYzLjY4IDAgMCAwLTYzLjY4LTYzLjY4IDY0IDY0IDAgMCAwLTY0IDYzLjkzNlYyNTZ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZGlzaC1kb3QudnVlXG52YXIgZGlzaF9kb3RfZGVmYXVsdCA9IGRpc2hfZG90X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9kaXNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDg0IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU4NCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s4NCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s4NCB9IGZyb20gXCJ2dWVcIjtcbnZhciBkaXNoX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDg0KHtcbiAgbmFtZTogXCJEaXNoXCIsXG4gIF9fbmFtZTogXCJkaXNoXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s4NCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrODQoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTg0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTQ4MCAyNTcuMTUyVjE5MmgtOTZhMzIgMzIgMCAwIDEgMC02NGgyNTZhMzIgMzIgMCAxIDEgMCA2NGgtOTZ2NjUuMTUyQTQ0OCA0NDggMCAwIDEgOTU1LjUyIDc2OEg2OC40OEE0NDggNDQ4IDAgMCAxIDQ4MCAyNTcuMTUyTTEyOCA3MDRoNzY4YTM4NCAzODQgMCAxIDAtNzY4IDBNOTYgODMyaDgzMmEzMiAzMiAwIDEgMSAwIDY0SDk2YTMyIDMyIDAgMSAxIDAtNjRcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9kaXNoLnZ1ZVxudmFyIGRpc2hfZGVmYXVsdCA9IGRpc2hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2RvY3VtZW50LWFkZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ4NSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlODUsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrODUsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrODUgfSBmcm9tIFwidnVlXCI7XG52YXIgZG9jdW1lbnRfYWRkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDg1KHtcbiAgbmFtZTogXCJEb2N1bWVudEFkZFwiLFxuICBfX25hbWU6IFwiZG9jdW1lbnQtYWRkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s4NSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrODUoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTg1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTgzMiAzODRINTc2VjEyOEgxOTJ2NzY4aDY0MHptLTI2LjQ5Ni02NEw2NDAgMTU0LjQ5NlYzMjB6TTE2MCA2NGg0ODBsMjU2IDI1NnY2MDhhMzIgMzIgMCAwIDEtMzIgMzJIMTYwYTMyIDMyIDAgMCAxLTMyLTMyVjk2YTMyIDMyIDAgMCAxIDMyLTMybTMyMCA1MTJWNDQ4aDY0djEyOGgxMjh2NjRINTQ0djEyOGgtNjRWNjQwSDM1MnYtNjR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZG9jdW1lbnQtYWRkLnZ1ZVxudmFyIGRvY3VtZW50X2FkZF9kZWZhdWx0ID0gZG9jdW1lbnRfYWRkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9kb2N1bWVudC1jaGVja2VkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDg2IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU4Niwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s4NiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s4NiB9IGZyb20gXCJ2dWVcIjtcbnZhciBkb2N1bWVudF9jaGVja2VkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDg2KHtcbiAgbmFtZTogXCJEb2N1bWVudENoZWNrZWRcIixcbiAgX19uYW1lOiBcImRvY3VtZW50LWNoZWNrZWRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazg2KCksIF9jcmVhdGVFbGVtZW50QmxvY2s4NihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlODYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNODA1LjUwNCAzMjAgNjQwIDE1NC40OTZWMzIwek04MzIgMzg0SDU3NlYxMjhIMTkydjc2OGg2NDB6TTE2MCA2NGg0ODBsMjU2IDI1NnY2MDhhMzIgMzIgMCAwIDEtMzIgMzJIMTYwYTMyIDMyIDAgMCAxLTMyLTMyVjk2YTMyIDMyIDAgMCAxIDMyLTMybTMxOC40IDU4Mi4xNDQgMTgwLjk5Mi0xODAuOTkyTDcwNC42NCA1MTAuNCA0NzguNCA3MzYuNjQgMzIwIDU3OC4zMDRsNDUuMjQ4LTQ1LjMxMnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9kb2N1bWVudC1jaGVja2VkLnZ1ZVxudmFyIGRvY3VtZW50X2NoZWNrZWRfZGVmYXVsdCA9IGRvY3VtZW50X2NoZWNrZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2RvY3VtZW50LWNvcHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50ODcgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTg3LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazg3LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazg3IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGRvY3VtZW50X2NvcHlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50ODcoe1xuICBuYW1lOiBcIkRvY3VtZW50Q29weVwiLFxuICBfX25hbWU6IFwiZG9jdW1lbnQtY29weVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrODcoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazg3KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU4NyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xMjggMzIwdjU3Nmg1NzZWMzIwem0tMzItNjRoNjQwYTMyIDMyIDAgMCAxIDMyIDMydjY0MGEzMiAzMiAwIDAgMS0zMiAzMkg5NmEzMiAzMiAwIDAgMS0zMi0zMlYyODhhMzIgMzIgMCAwIDEgMzItMzJNOTYwIDk2djcwNGEzMiAzMiAwIDAgMS0zMiAzMmgtOTZ2LTY0aDY0VjEyOEgzODR2NjRoLTY0Vjk2YTMyIDMyIDAgMCAxIDMyLTMyaDU3NmEzMiAzMiAwIDAgMSAzMiAzMk0yNTYgNjcyaDMyMHY2NEgyNTZ6bTAtMTkyaDMyMHY2NEgyNTZ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZG9jdW1lbnQtY29weS52dWVcbnZhciBkb2N1bWVudF9jb3B5X2RlZmF1bHQgPSBkb2N1bWVudF9jb3B5X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9kb2N1bWVudC1kZWxldGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50ODggfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTg4LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazg4LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazg4IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGRvY3VtZW50X2RlbGV0ZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ4OCh7XG4gIG5hbWU6IFwiRG9jdW1lbnREZWxldGVcIixcbiAgX19uYW1lOiBcImRvY3VtZW50LWRlbGV0ZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrODgoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazg4KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU4OChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk04MDUuNTA0IDMyMCA2NDAgMTU0LjQ5NlYzMjB6TTgzMiAzODRINTc2VjEyOEgxOTJ2NzY4aDY0MHpNMTYwIDY0aDQ4MGwyNTYgMjU2djYwOGEzMiAzMiAwIDAgMS0zMiAzMkgxNjBhMzIgMzIgMCAwIDEtMzItMzJWOTZhMzIgMzIgMCAwIDEgMzItMzJtMzA4Ljk5MiA1NDYuMzA0LTkwLjQ5Ni05MC42MjQgNDUuMjQ4LTQ1LjI0OCA5MC41NiA5MC40OTYgOTAuNDk2LTkwLjQzMiA0NS4yNDggNDUuMjQ4LTkwLjQ5NiA5MC41NiA5MC40OTYgOTAuNDk2LTQ1LjI0OCA0NS4yNDgtOTAuNDk2LTkwLjQ5Ni05MC41NiA5MC40OTYtNDUuMjQ4LTQ1LjI0OCA5MC40OTYtOTAuNDk2elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2RvY3VtZW50LWRlbGV0ZS52dWVcbnZhciBkb2N1bWVudF9kZWxldGVfZGVmYXVsdCA9IGRvY3VtZW50X2RlbGV0ZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZG9jdW1lbnQtcmVtb3ZlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDg5IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU4OSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s4OSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s4OSB9IGZyb20gXCJ2dWVcIjtcbnZhciBkb2N1bWVudF9yZW1vdmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50ODkoe1xuICBuYW1lOiBcIkRvY3VtZW50UmVtb3ZlXCIsXG4gIF9fbmFtZTogXCJkb2N1bWVudC1yZW1vdmVcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazg5KCksIF9jcmVhdGVFbGVtZW50QmxvY2s4OShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlODkoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNODA1LjUwNCAzMjAgNjQwIDE1NC40OTZWMzIwek04MzIgMzg0SDU3NlYxMjhIMTkydjc2OGg2NDB6TTE2MCA2NGg0ODBsMjU2IDI1NnY2MDhhMzIgMzIgMCAwIDEtMzIgMzJIMTYwYTMyIDMyIDAgMCAxLTMyLTMyVjk2YTMyIDMyIDAgMCAxIDMyLTMybTE5MiA1MTJoMzIwdjY0SDM1MnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9kb2N1bWVudC1yZW1vdmUudnVlXG52YXIgZG9jdW1lbnRfcmVtb3ZlX2RlZmF1bHQgPSBkb2N1bWVudF9yZW1vdmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2RvY3VtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDkwIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU5MCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s5MCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s5MCB9IGZyb20gXCJ2dWVcIjtcbnZhciBkb2N1bWVudF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ5MCh7XG4gIG5hbWU6IFwiRG9jdW1lbnRcIixcbiAgX19uYW1lOiBcImRvY3VtZW50XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s5MCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrOTAoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTkwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTgzMiAzODRINTc2VjEyOEgxOTJ2NzY4aDY0MHptLTI2LjQ5Ni02NEw2NDAgMTU0LjQ5NlYzMjB6TTE2MCA2NGg0ODBsMjU2IDI1NnY2MDhhMzIgMzIgMCAwIDEtMzIgMzJIMTYwYTMyIDMyIDAgMCAxLTMyLTMyVjk2YTMyIDMyIDAgMCAxIDMyLTMybTE2MCA0NDhoMzg0djY0SDMyMHptMC0xOTJoMTYwdjY0SDMyMHptMCAzODRoMzg0djY0SDMyMHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9kb2N1bWVudC52dWVcbnZhciBkb2N1bWVudF9kZWZhdWx0ID0gZG9jdW1lbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2Rvd25sb2FkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDkxIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU5MSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s5MSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s5MSB9IGZyb20gXCJ2dWVcIjtcbnZhciBkb3dubG9hZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ5MSh7XG4gIG5hbWU6IFwiRG93bmxvYWRcIixcbiAgX19uYW1lOiBcImRvd25sb2FkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s5MSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrOTEoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTkxKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTE2MCA4MzJoNzA0YTMyIDMyIDAgMSAxIDAgNjRIMTYwYTMyIDMyIDAgMSAxIDAtNjRtMzg0LTI1My42OTYgMjM2LjI4OC0yMzYuMzUyIDQ1LjI0OCA0NS4yNDhMNTA4LjggNzA0IDE5MiAzODcuMmw0NS4yNDgtNDUuMjQ4TDQ4MCA1ODQuNzA0VjEyOGg2NHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9kb3dubG9hZC52dWVcbnZhciBkb3dubG9hZF9kZWZhdWx0ID0gZG93bmxvYWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2RyaXp6bGluZy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ5MiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlOTIsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrOTIsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrOTIgfSBmcm9tIFwidnVlXCI7XG52YXIgZHJpenpsaW5nX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDkyKHtcbiAgbmFtZTogXCJEcml6emxpbmdcIixcbiAgX19uYW1lOiBcImRyaXp6bGluZ1wiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrOTIoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazkyKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU5MihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIm03MzkuMzI4IDI5MS4zMjgtMzUuMi02LjU5Mi0xMi44LTMzLjQwOGExOTIuMDY0IDE5Mi4wNjQgMCAwIDAtMzY1Ljk1MiAyMy4yMzJsLTkuOTIgNDAuODk2LTQxLjQ3MiA3LjA0YTE3Ni4zMiAxNzYuMzIgMCAwIDAtMTQ2LjI0IDE3My41NjhjMCA5Ny4yOCA3OC43MiAxNzUuOTM2IDE3NS44MDggMTc1LjkzNmg0MDBhMTkyIDE5MiAwIDAgMCAzNS43NzYtMzgwLjY3MnpNOTU5LjU1MiA0ODBhMjU2IDI1NiAwIDAgMS0yNTYgMjU2aC00MDBBMjM5LjgwOCAyMzkuODA4IDAgMCAxIDYzLjc0NCA0OTYuMTkyYTI0MC4zMiAyNDAuMzIgMCAwIDEgMTk5LjQ4OC0yMzYuOCAyNTYuMTI4IDI1Ni4xMjggMCAwIDEgNDg3Ljg3Mi0zMC45NzZBMjU2LjA2NCAyNTYuMDY0IDAgMCAxIDk1OS41NTIgNDgwTTI4OCA4MDBoNjR2NjRoLTY0em0xOTIgMGg2NHY2NGgtNjR6bS05NiA5Nmg2NHY2NGgtNjR6bTE5MiAwaDY0djY0aC02NHptOTYtOTZoNjR2NjRoLTY0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2RyaXp6bGluZy52dWVcbnZhciBkcml6emxpbmdfZGVmYXVsdCA9IGRyaXp6bGluZ192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZWRpdC1wZW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50OTMgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTkzLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazkzLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazkzIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGVkaXRfcGVuX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDkzKHtcbiAgbmFtZTogXCJFZGl0UGVuXCIsXG4gIF9fbmFtZTogXCJlZGl0LXBlblwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrOTMoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazkzKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU5MyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIm0xOTkuMDQgNjcyLjY0IDE5My45ODQgMTEyIDIyNC0zODcuOTY4LTE5My45Mi0xMTItMjI0IDM4OC4wMzJ6bS0yMy44NzIgNjAuMTYgMzIuODk2IDE0OC4yODggMTQ0Ljg5Ni00NS42OTZ6TTQ1NS4wNCAyMjkuMjQ4bDE5My45MiAxMTIgNTYuNzA0LTk4LjExMi0xOTMuOTg0LTExMi01Ni42NCA5OC4xMTJ6TTEwNC4zMiA3MDguOGwzODQtNjY1LjAyNCAzMDQuNzY4IDE3NS45MzZMNDA5LjE1MiA4ODQuOGguMDY0bC0yNDguNDQ4IDc4LjMzNnptMzg0IDI1NC4yNzJ2LTY0aDQ0OHY2NGgtNDQ4elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2VkaXQtcGVuLnZ1ZVxudmFyIGVkaXRfcGVuX2RlZmF1bHQgPSBlZGl0X3Blbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZWRpdC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ5NCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlOTQsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrOTQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrOTQgfSBmcm9tIFwidnVlXCI7XG52YXIgZWRpdF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ5NCh7XG4gIG5hbWU6IFwiRWRpdFwiLFxuICBfX25hbWU6IFwiZWRpdFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrOTQoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazk0KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU5NChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk04MzIgNTEyYTMyIDMyIDAgMSAxIDY0IDB2MzUyYTMyIDMyIDAgMCAxLTMyIDMySDE2MGEzMiAzMiAwIDAgMS0zMi0zMlYxNjBhMzIgMzIgMCAwIDEgMzItMzJoMzUyYTMyIDMyIDAgMCAxIDAgNjRIMTkydjY0MGg2NDB6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTk0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTQ2OS45NTIgNTU0LjI0IDUyLjgtNy41NTJMODQ3LjEwNCAyMjIuNGEzMiAzMiAwIDEgMC00NS4yNDgtNDUuMjQ4TDQ3Ny40NCA1MDEuNDRsLTcuNTUyIDUyLjh6bTQyMi40LTQyMi40YTk2IDk2IDAgMCAxIDAgMTM1LjgwOGwtMzMxLjg0IDMzMS44NGEzMiAzMiAwIDAgMS0xOC4xMTIgOS4wODhMNDM2LjggNjIzLjY4YTMyIDMyIDAgMCAxLTM2LjIyNC0zNi4yMjRsMTUuMTA0LTEwNS42YTMyIDMyIDAgMCAxIDkuMDI0LTE4LjExMmwzMzEuOTA0LTMzMS44NGE5NiA5NiAwIDAgMSAxMzUuNzQ0IDB6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZWRpdC52dWVcbnZhciBlZGl0X2RlZmF1bHQgPSBlZGl0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9lbGVtZS1maWxsZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50OTUgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTk1LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazk1LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazk1IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGVsZW1lX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQ5NSh7XG4gIG5hbWU6IFwiRWxlbWVGaWxsZWRcIixcbiAgX19uYW1lOiBcImVsZW1lLWZpbGxlZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrOTUoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazk1KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU5NShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xNzYgNjRoNjcyYzYxLjgyNCAwIDExMiA1MC4xNzYgMTEyIDExMnY2NzJhMTEyIDExMiAwIDAgMS0xMTIgMTEySDE3NkExMTIgMTEyIDAgMCAxIDY0IDg0OFYxNzZjMC02MS44MjQgNTAuMTc2LTExMiAxMTItMTEybTE1MC41MjggMTczLjU2OGMtMTUyLjg5NiA5OS45NjgtMTk2LjU0NCAzMDQuMDY0LTk3LjQwOCA0NTYuOTZhMzMwLjY4OCAzMzAuNjg4IDAgMCAwIDQ1Ni45NiA5Ni42NGM5LjIxNi01Ljg4OCAxNy42LTExLjc3NiAyNS4xNTItMTguNTZhMTguMjQgMTguMjQgMCAwIDAgNC4yMjQtMjQuMzJMNzAwLjM1MiA3MjQuOGE0Ny41NTIgNDcuNTUyIDAgMCAwLTY1LjUzNi0xNC4yNzJBMjM0LjU2IDIzNC41NiAwIDAgMSAzMTAuNTkyIDY0MS42QzI0MCA1MzMuMjQ4IDI3MS4xMDQgMzg3Ljk2OCAzNzkuNDU2IDMxNi40OGEyMzQuMzA0IDIzNC4zMDQgMCAwIDEgMjc2LjM1MiAxNS4xNjhjMS42NjQuODMyIDIuNTYgMi41NiAzLjM5MiA0LjIyNCA1Ljg4OCA4LjM4NCAzLjMyOCAxOS4zMjgtNS4xMiAyNS4yMTZMNDU2LjgzMiA0ODkuNmE0Ny41NTIgNDcuNTUyIDAgMCAwLTE0LjMzNiA2NS40NzJsMTYgMjQuMzg0YzUuODg4IDguMzg0IDE2Ljc2OCAxMC44OCAyNS4yMTYgNS4wNTZsMzA4LjIyNC0xOTkuOTM2YTE5LjU4NCAxOS41ODQgMCAwIDAgNi43Mi0yMy40ODh2LS44OTZjLTQuOTkyLTkuMjE2LTEwLjA0OC0xNy42LTE1LjEwNC0yNi44OC05OS45NjgtMTUxLjE2OC0zMDQuMDY0LTE5NC44OC00NTYuOTYtOTUuNzQ0ek03ODYuODggNTA0LjcwNGwtNjIuMjA4IDQwLjMyYy04LjMyIDUuODg4LTEwLjg4IDE2Ljc2OC00Ljk5MiAyNS4yMTZMNzYwIDYzMi4zMmM1Ljg4OCA4LjQ0OCAxNi43NjggMTEuMDA4IDI1LjE1MiA1LjEybDMxLjEwNC0yMC4xNmE1NS4zNiA1NS4zNiAwIDAgMCAxNi03Ni40OGwtMjAuMjI0LTMxLjA0YTE5LjUyIDE5LjUyIDAgMCAwLTI1LjE1Mi01LjEyelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2VsZW1lLWZpbGxlZC52dWVcbnZhciBlbGVtZV9maWxsZWRfZGVmYXVsdCA9IGVsZW1lX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZWxlbWUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50OTYgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTk2LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazk2LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazk2IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGVsZW1lX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDk2KHtcbiAgbmFtZTogXCJFbGVtZVwiLFxuICBfX25hbWU6IFwiZWxlbWVcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazk2KCksIF9jcmVhdGVFbGVtZW50QmxvY2s5NihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlOTYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMzAwLjAzMiAxODguOGMxNzQuNzItMTEzLjI4IDQwOC02My4zNiA1MjIuMjQgMTA5LjQ0IDUuNzYgMTAuNTYgMTEuNTIgMjAuMTYgMTcuMjggMzAuNzJ2Ljk2YTIyLjQgMjIuNCAwIDAgMS03LjY4IDI2Ljg4bC0zNTIuMzIgMjI4LjQ4Yy05LjYgNi43Mi0yMi4wOCAzLjg0LTI4LjgtNS43NmwtMTguMjQtMjcuODRhNTQuMzM2IDU0LjMzNiAwIDAgMSAxNi4zMi03NC44OGwyMjUuNi0xNDYuODhjOS42LTYuNzIgMTIuNDgtMTkuMiA1Ljc2LTI4LjgtLjk2LTEuOTItMS45Mi0zLjg0LTMuODQtNC44YTI2Ny44NCAyNjcuODQgMCAwIDAtMzE1Ljg0LTE3LjI4Yy0xMjMuODQgODEuNi0xNTkuMzYgMjQ3LjY4LTc4LjcyIDM3MS41MmEyNjguMDk2IDI2OC4wOTYgMCAwIDAgMzcwLjU2IDc4LjcyIDU0LjMzNiA1NC4zMzYgMCAwIDEgNzQuODggMTYuMzJsMTcuMjggMjYuODhjNS43NiA5LjYgMy44NCAyMS4xMi00LjggMjcuODQtOC42NCA3LjY4LTE4LjI0IDE0LjQtMjguOCAyMS4xMmEzNzcuOTIgMzc3LjkyIDAgMCAxLTUyMi4yNC0xMTAuNGMtMTEzLjI4LTE3NC43Mi02My4zNi00MDggMTExLjM2LTUyMi4yNHptNTI2LjA4IDMwNS4yOGEyMi4zMzYgMjIuMzM2IDAgMCAxIDI4LjggNS43NmwyMy4wNCAzNS41MmE2My4yMzIgNjMuMjMyIDAgMCAxLTE4LjI0IDg3LjM2bC0zNS41MiAyMy4wNGMtOS42IDYuNzItMjIuMDggMy44NC0yOC44LTUuNzZsLTQ2LjA4LTcxLjA0Yy02LjcyLTkuNi0zLjg0LTIyLjA4IDUuNzYtMjguOGw3MS4wNC00Ni4wOHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9lbGVtZS52dWVcbnZhciBlbGVtZV9kZWZhdWx0ID0gZWxlbWVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2VsZW1lbnQtcGx1cy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ5NyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlOTcsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrOTcsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrOTcgfSBmcm9tIFwidnVlXCI7XG52YXIgZWxlbWVudF9wbHVzX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDk3KHtcbiAgbmFtZTogXCJFbGVtZW50UGx1c1wiLFxuICBfX25hbWU6IFwiZWxlbWVudC1wbHVzXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s5NygpLCBfY3JlYXRlRWxlbWVudEJsb2NrOTcoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTk3KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTgzOS43IDczNC43YzAgMzMuMy0xNy45IDQxLTE3LjkgNDFTNTE5LjcgOTQ5LjggNDk5LjIgOTYwYy0xMC4yIDUuMS0yMC41IDUuMS0zMC43IDAgMCAwLTMxNC45LTE4NC4zLTMyNS4xLTE5Mi01LjEtNS4xLTEwLjItMTIuOC0xMi44LTIwLjVWMzY4LjZjMC0xNy45IDIwLjUtMjguMiAyMC41LTI4LjJMNDY2IDE1OC42YzEyLjgtNS4xIDI1LjYtNS4xIDM4LjQgMCAwIDAgMjc5IDE2MS4zIDMwOS44IDE3OS4yIDE3LjkgNy43IDI4LjIgMjUuNiAyNS42IDQ2LjEtLjEtNS0uMSAzMTcuNS0uMSAzNTAuOE03MTQuMiAzNzEuMmMtNjQtMzUuOC0yMTcuNi0xMjUuNC0yMTcuNi0xMjUuNC03LjctNS4xLTIwLjUtNS4xLTMwLjcgMEwyMTcuNiAzODkuMXMtMTcuOSAxMC4yLTE3LjkgMjN2Mjk3YzAgNS4xIDUuMSAxMi44IDcuNyAxNy45IDcuNyA1LjEgMjU2IDE0OC41IDI1NiAxNDguNSA3LjcgNS4xIDE3LjkgNS4xIDI1LjYgMCAxNS40LTcuNyAyNTAuOS0xNDUuOSAyNTAuOS0xNDUuOXMxMi44LTUuMSAxMi44LTMwLjd2LTc0LjJsLTI3Ni41IDE2OXYtNjRjMC0xNy45IDcuNy0zMC43IDIwLjUtNDYuMUw3NDUgNTM1YzUuMS03LjcgMTAuMi0yMC41IDEwLjItMzAuN3YtNjYuNmwtMjc5IDE2OXYtNjkuMWMwLTE1LjQgNS4xLTMwLjcgMTcuOS0zOC40bDIyMC4xLTEyOHpNOTE5IDEzNS43YzAtNS4xLTUuMS03LjctNy43LTcuN2gtNTguOVY2Ni42YzAtNS4xLTUuMS01LjEtMTAuMi01LjFsLTMwLjcgNS4xYy01LjEgMC01LjEgMi42LTUuMSA1LjFWMTI4aC01Ni4zYy01LjEgMC01LjEgNS4xLTcuNyA1LjF2MzguNGg2OS4xdjY0YzAgNS4xIDUuMSA1LjEgMTAuMiA1LjFsMzAuNy01LjFjNS4xIDAgNS4xLTIuNiA1LjEtNS4xdi01Ni4zaDY0bC0yLjUtMzguNHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9lbGVtZW50LXBsdXMudnVlXG52YXIgZWxlbWVudF9wbHVzX2RlZmF1bHQgPSBlbGVtZW50X3BsdXNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2V4cGFuZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQ5OCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlOTgsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrOTgsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrOTggfSBmcm9tIFwidnVlXCI7XG52YXIgZXhwYW5kX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDk4KHtcbiAgbmFtZTogXCJFeHBhbmRcIixcbiAgX19uYW1lOiBcImV4cGFuZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrOTgoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazk4KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGU5OChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xMjggMTkyaDc2OHYxMjhIMTI4em0wIDI1Nmg1MTJ2MTI4SDEyOHptMCAyNTZoNzY4djEyOEgxMjh6bTU3Ni0zNTIgMTkyIDE2MC0xOTIgMTI4elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2V4cGFuZC52dWVcbnZhciBleHBhbmRfZGVmYXVsdCA9IGV4cGFuZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZmFpbGVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDk5IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGU5OSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2s5OSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2s5OSB9IGZyb20gXCJ2dWVcIjtcbnZhciBmYWlsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50OTkoe1xuICBuYW1lOiBcIkZhaWxlZFwiLFxuICBfX25hbWU6IFwiZmFpbGVkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2s5OSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrOTkoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTk5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTU1Ny4yNDggNjA4IDEzNS43NDQtMTM1Ljc0NC00NS4yNDgtNDUuMjQ4LTEzNS42OCAxMzUuNzQ0LTEzNS44MDgtMTM1LjY4LTQ1LjI0OCA0NS4xODRMNDY2Ljc1MiA2MDhsLTEzNS42OCAxMzUuNjggNDUuMTg0IDQ1LjMxMkw1MTIgNjUzLjI0OGwxMzUuNzQ0IDEzNS43NDQgNDUuMjQ4LTQ1LjI0OEw1NTcuMzEyIDYwOHpNNzA0IDE5MmgxNjB2NzM2SDE2MFYxOTJoMTYwdjY0aDM4NHptLTMyMCAwVjk2aDI1NnY5NnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9mYWlsZWQudnVlXG52YXIgZmFpbGVkX2RlZmF1bHQgPSBmYWlsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2ZlbWFsZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMDAgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTEwMCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMDAsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTAwIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGZlbWFsZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxMDAoe1xuICBuYW1lOiBcIkZlbWFsZVwiLFxuICBfX25hbWU6IFwiZmVtYWxlXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxMDAoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazEwMChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTAwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA2NDBhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMCAwIDAgNTEybTAgNjRhMzIwIDMyMCAwIDEgMSAwLTY0MCAzMjAgMzIwIDAgMCAxIDAgNjQwXCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEwMChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01MTIgNjQwcTMyIDAgMzIgMzJ2MjU2cTAgMzItMzIgMzJ0LTMyLTMyVjY3MnEwLTMyIDMyLTMyXCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEwMChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zNTIgODAwaDMyMHEzMiAwIDMyIDMydC0zMiAzMkgzNTJxLTMyIDAtMzItMzJ0MzItMzJcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9mZW1hbGUudnVlXG52YXIgZmVtYWxlX2RlZmF1bHQgPSBmZW1hbGVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2ZpbGVzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDEwMSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTAxLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazEwMSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMDEgfSBmcm9tIFwidnVlXCI7XG52YXIgZmlsZXNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTAxKHtcbiAgbmFtZTogXCJGaWxlc1wiLFxuICBfX25hbWU6IFwiZmlsZXNcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazEwMSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTAxKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxMDEoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTI4IDM4NHY0NDhoNzY4VjM4NHptLTMyLTY0aDgzMmEzMiAzMiAwIDAgMSAzMiAzMnY1MTJhMzIgMzIgMCAwIDEtMzIgMzJIOTZhMzIgMzIgMCAwIDEtMzItMzJWMzUyYTMyIDMyIDAgMCAxIDMyLTMybTY0LTEyOGg3MDR2NjRIMTYwem05Ni0xMjhoNTEydjY0SDI1NnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9maWxlcy52dWVcbnZhciBmaWxlc19kZWZhdWx0ID0gZmlsZXNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2ZpbG0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTAyIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxMDIsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTAyLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazEwMiB9IGZyb20gXCJ2dWVcIjtcbnZhciBmaWxtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDEwMih7XG4gIG5hbWU6IFwiRmlsbVwiLFxuICBfX25hbWU6IFwiZmlsbVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTAyKCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMDIoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEwMihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xNjAgMTYwdjcwNGg3MDRWMTYwem0tMzItNjRoNzY4YTMyIDMyIDAgMCAxIDMyIDMydjc2OGEzMiAzMiAwIDAgMS0zMiAzMkgxMjhhMzIgMzIgMCAwIDEtMzItMzJWMTI4YTMyIDMyIDAgMCAxIDMyLTMyXCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEwMihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zMjAgMjg4VjEyOGg2NHYzNTJoMjU2VjEyOGg2NHYxNjBoMTYwdjY0SDcwNHYxMjhoMTYwdjY0SDcwNHYxMjhoMTYwdjY0SDcwNHYxNjBoLTY0VjU0NEgzODR2MzUyaC02NFY3MzZIMTI4di02NGgxOTJWNTQ0SDEyOHYtNjRoMTkyVjM1MkgxMjh2LTY0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2ZpbG0udnVlXG52YXIgZmlsbV9kZWZhdWx0ID0gZmlsbV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZmlsdGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDEwMyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTAzLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazEwMywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMDMgfSBmcm9tIFwidnVlXCI7XG52YXIgZmlsdGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDEwMyh7XG4gIG5hbWU6IFwiRmlsdGVyXCIsXG4gIF9fbmFtZTogXCJmaWx0ZXJcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazEwMygpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTAzKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxMDMoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMzg0IDUyMy4zOTJWOTI4YTMyIDMyIDAgMCAwIDQ2LjMzNiAyOC42MDhsMTkyLTk2QTMyIDMyIDAgMCAwIDY0MCA4MzJWNTIzLjM5MmwyODAuNzY4LTM0My4xMDRhMzIgMzIgMCAxIDAtNDkuNTM2LTQwLjU3NmwtMjg4IDM1MkEzMiAzMiAwIDAgMCA1NzYgNTEydjMwMC4yMjRsLTEyOCA2NFY1MTJhMzIgMzIgMCAwIDAtNy4yMzItMjAuMjg4TDE5NS41MiAxOTJINzA0YTMyIDMyIDAgMSAwIDAtNjRIMTI4YTMyIDMyIDAgMCAwLTI0Ljc2OCA1Mi4yODh6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZmlsdGVyLnZ1ZVxudmFyIGZpbHRlcl9kZWZhdWx0ID0gZmlsdGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9maW5pc2hlZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMDQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTEwNCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMDQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTA0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGZpbmlzaGVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDEwNCh7XG4gIG5hbWU6IFwiRmluaXNoZWRcIixcbiAgX19uYW1lOiBcImZpbmlzaGVkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxMDQoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazEwNChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTA0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTI4MC43NjggNzUzLjcyOCA2OTEuNDU2IDE2Ny4wNGEzMiAzMiAwIDEgMSA1Mi40MTYgMzYuNjcyTDMxNC4yNCA4MTcuNDcyYTMyIDMyIDAgMCAxLTQ1LjQ0IDcuMjk2bC0yMzAuNC0xNzIuOGEzMiAzMiAwIDAgMSAzOC40LTUxLjJsMjAzLjk2OCAxNTIuOTZ6TTczNiA0NDhhMzIgMzIgMCAxIDEgMC02NGgxOTJhMzIgMzIgMCAxIDEgMCA2NHpNNjA4IDY0MGEzMiAzMiAwIDAgMSAwLTY0aDMxOS45MzZhMzIgMzIgMCAxIDEgMCA2NHpNNDgwIDgzMmEzMiAzMiAwIDEgMSAwLTY0aDQ0Ny45MzZhMzIgMzIgMCAxIDEgMCA2NHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9maW5pc2hlZC52dWVcbnZhciBmaW5pc2hlZF9kZWZhdWx0ID0gZmluaXNoZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2ZpcnN0LWFpZC1raXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTA1IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxMDUsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTA1LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazEwNSB9IGZyb20gXCJ2dWVcIjtcbnZhciBmaXJzdF9haWRfa2l0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDEwNSh7XG4gIG5hbWU6IFwiRmlyc3RBaWRLaXRcIixcbiAgX19uYW1lOiBcImZpcnN0LWFpZC1raXRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazEwNSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTA1KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxMDUoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTkyIDI1NmE2NCA2NCAwIDAgMC02NCA2NHY0NDhhNjQgNjQgMCAwIDAgNjQgNjRoNjQwYTY0IDY0IDAgMCAwIDY0LTY0VjMyMGE2NCA2NCAwIDAgMC02NC02NHptMC02NGg2NDBhMTI4IDEyOCAwIDAgMSAxMjggMTI4djQ0OGExMjggMTI4IDAgMCAxLTEyOCAxMjhIMTkyQTEyOCAxMjggMCAwIDEgNjQgNzY4VjMyMGExMjggMTI4IDAgMCAxIDEyOC0xMjhcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTA1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTU0NCA1MTJoOTZhMzIgMzIgMCAwIDEgMCA2NGgtOTZ2OTZhMzIgMzIgMCAwIDEtNjQgMHYtOTZoLTk2YTMyIDMyIDAgMCAxIDAtNjRoOTZ2LTk2YTMyIDMyIDAgMCAxIDY0IDB6TTM1MiAxMjh2NjRoMzIwdi02NHptLTMyLTY0aDM4NGEzMiAzMiAwIDAgMSAzMiAzMnYxMjhhMzIgMzIgMCAwIDEtMzIgMzJIMzIwYTMyIDMyIDAgMCAxLTMyLTMyVjk2YTMyIDMyIDAgMCAxIDMyLTMyXCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZmlyc3QtYWlkLWtpdC52dWVcbnZhciBmaXJzdF9haWRfa2l0X2RlZmF1bHQgPSBmaXJzdF9haWRfa2l0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9mbGFnLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDEwNiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTA2LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazEwNiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMDYgfSBmcm9tIFwidnVlXCI7XG52YXIgZmxhZ192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxMDYoe1xuICBuYW1lOiBcIkZsYWdcIixcbiAgX19uYW1lOiBcImZsYWdcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazEwNigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTA2KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxMDYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjg4IDEyOGg2MDhMNzM2IDM4NGwxNjAgMjU2SDI4OHYzMjBoLTk2VjY0aDk2elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2ZsYWcudnVlXG52YXIgZmxhZ19kZWZhdWx0ID0gZmxhZ192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZm9sZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMDcgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTEwNywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMDcsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTA3IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGZvbGRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTA3KHtcbiAgbmFtZTogXCJGb2xkXCIsXG4gIF9fbmFtZTogXCJmb2xkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxMDcoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazEwNyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTA3KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTg5NiAxOTJIMTI4djEyOGg3Njh6bTAgMjU2SDM4NHYxMjhoNTEyem0wIDI1NkgxMjh2MTI4aDc2OHpNMzIwIDM4NCAxMjggNTEybDE5MiAxMjh6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZm9sZC52dWVcbnZhciBmb2xkX2RlZmF1bHQgPSBmb2xkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9mb2xkZXItYWRkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDEwOCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTA4LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazEwOCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMDggfSBmcm9tIFwidnVlXCI7XG52YXIgZm9sZGVyX2FkZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxMDgoe1xuICBuYW1lOiBcIkZvbGRlckFkZFwiLFxuICBfX25hbWU6IFwiZm9sZGVyLWFkZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTA4KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMDgoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEwOChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xMjggMTkydjY0MGg3NjhWMzIwSDQ4NS43NkwzNTcuNTA0IDE5MnptLTMyLTY0aDI4Ny44NzJsMTI4LjM4NCAxMjhIOTI4YTMyIDMyIDAgMCAxIDMyIDMydjU3NmEzMiAzMiAwIDAgMS0zMiAzMkg5NmEzMiAzMiAwIDAgMS0zMi0zMlYxNjBhMzIgMzIgMCAwIDEgMzItMzJtMzg0IDQxNlY0MTZoNjR2MTI4aDEyOHY2NEg1NDR2MTI4aC02NFY2MDhIMzUydi02NHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9mb2xkZXItYWRkLnZ1ZVxudmFyIGZvbGRlcl9hZGRfZGVmYXVsdCA9IGZvbGRlcl9hZGRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2ZvbGRlci1jaGVja2VkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDEwOSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTA5LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazEwOSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMDkgfSBmcm9tIFwidnVlXCI7XG52YXIgZm9sZGVyX2NoZWNrZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTA5KHtcbiAgbmFtZTogXCJGb2xkZXJDaGVja2VkXCIsXG4gIF9fbmFtZTogXCJmb2xkZXItY2hlY2tlZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTA5KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMDkoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEwOShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xMjggMTkydjY0MGg3NjhWMzIwSDQ4NS43NkwzNTcuNTA0IDE5MnptLTMyLTY0aDI4Ny44NzJsMTI4LjM4NCAxMjhIOTI4YTMyIDMyIDAgMCAxIDMyIDMydjU3NmEzMiAzMiAwIDAgMS0zMiAzMkg5NmEzMiAzMiAwIDAgMS0zMi0zMlYxNjBhMzIgMzIgMCAwIDEgMzItMzJtNDE0LjA4IDUwMi4xNDQgMTgwLjk5Mi0xODAuOTkyTDczNi4zMiA0OTQuNCA1MTAuMDggNzIwLjY0bC0xNTguNC0xNTguMzM2IDQ1LjI0OC00NS4zMTJ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZm9sZGVyLWNoZWNrZWQudnVlXG52YXIgZm9sZGVyX2NoZWNrZWRfZGVmYXVsdCA9IGZvbGRlcl9jaGVja2VkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9mb2xkZXItZGVsZXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDExMCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTEwLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazExMCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMTAgfSBmcm9tIFwidnVlXCI7XG52YXIgZm9sZGVyX2RlbGV0ZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxMTAoe1xuICBuYW1lOiBcIkZvbGRlckRlbGV0ZVwiLFxuICBfX25hbWU6IFwiZm9sZGVyLWRlbGV0ZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTEwKCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMTAoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTExMChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xMjggMTkydjY0MGg3NjhWMzIwSDQ4NS43NkwzNTcuNTA0IDE5MnptLTMyLTY0aDI4Ny44NzJsMTI4LjM4NCAxMjhIOTI4YTMyIDMyIDAgMCAxIDMyIDMydjU3NmEzMiAzMiAwIDAgMS0zMiAzMkg5NmEzMiAzMiAwIDAgMS0zMi0zMlYxNjBhMzIgMzIgMCAwIDEgMzItMzJtMzcwLjc1MiA0NDgtOTAuNDk2LTkwLjQ5NiA0NS4yNDgtNDUuMjQ4TDUxMiA1MzAuNzUybDkwLjQ5Ni05MC40OTYgNDUuMjQ4IDQ1LjI0OEw1NTcuMjQ4IDU3Nmw5MC40OTYgOTAuNDk2LTQ1LjI0OCA0NS4yNDhMNTEyIDYyMS4yNDhsLTkwLjQ5NiA5MC40OTYtNDUuMjQ4LTQ1LjI0OHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9mb2xkZXItZGVsZXRlLnZ1ZVxudmFyIGZvbGRlcl9kZWxldGVfZGVmYXVsdCA9IGZvbGRlcl9kZWxldGVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2ZvbGRlci1vcGVuZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTExIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxMTEsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTExLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazExMSB9IGZyb20gXCJ2dWVcIjtcbnZhciBmb2xkZXJfb3BlbmVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDExMSh7XG4gIG5hbWU6IFwiRm9sZGVyT3BlbmVkXCIsXG4gIF9fbmFtZTogXCJmb2xkZXItb3BlbmVkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxMTEoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazExMShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTExKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTg3OC4wOCA0NDhIMjQxLjkybC05NiAzODRoNjM2LjE2bDk2LTM4NHpNODMyIDM4NHYtNjRINDg1Ljc2TDM1Ny41MDQgMTkySDEyOHY0NDhsNTcuOTItMjMxLjc0NEEzMiAzMiAwIDAgMSAyMTYuOTYgMzg0em0tMjQuOTYgNTEySDk2YTMyIDMyIDAgMCAxLTMyLTMyVjE2MGEzMiAzMiAwIDAgMSAzMi0zMmgyODcuODcybDEyOC4zODQgMTI4SDg2NGEzMiAzMiAwIDAgMSAzMiAzMnY5NmgyMy4wNGEzMiAzMiAwIDAgMSAzMS4wNCAzOS43NDRsLTExMiA0NDhBMzIgMzIgMCAwIDEgODA3LjA0IDg5NlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2ZvbGRlci1vcGVuZWQudnVlXG52YXIgZm9sZGVyX29wZW5lZF9kZWZhdWx0ID0gZm9sZGVyX29wZW5lZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZm9sZGVyLXJlbW92ZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMTIgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTExMiwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMTIsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTEyIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGZvbGRlcl9yZW1vdmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTEyKHtcbiAgbmFtZTogXCJGb2xkZXJSZW1vdmVcIixcbiAgX19uYW1lOiBcImZvbGRlci1yZW1vdmVcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazExMigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTEyKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxMTIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTI4IDE5MnY2NDBoNzY4VjMyMEg0ODUuNzZMMzU3LjUwNCAxOTJ6bS0zMi02NGgyODcuODcybDEyOC4zODQgMTI4SDkyOGEzMiAzMiAwIDAgMSAzMiAzMnY1NzZhMzIgMzIgMCAwIDEtMzIgMzJIOTZhMzIgMzIgMCAwIDEtMzItMzJWMTYwYTMyIDMyIDAgMCAxIDMyLTMybTI1NiA0MTZoMzIwdjY0SDM1MnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9mb2xkZXItcmVtb3ZlLnZ1ZVxudmFyIGZvbGRlcl9yZW1vdmVfZGVmYXVsdCA9IGZvbGRlcl9yZW1vdmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2ZvbGRlci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMTMgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTExMywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMTMsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTEzIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGZvbGRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxMTMoe1xuICBuYW1lOiBcIkZvbGRlclwiLFxuICBfX25hbWU6IFwiZm9sZGVyXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxMTMoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazExMyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTEzKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTEyOCAxOTJ2NjQwaDc2OFYzMjBINDg1Ljc2TDM1Ny41MDQgMTkyem0tMzItNjRoMjg3Ljg3MmwxMjguMzg0IDEyOEg5MjhhMzIgMzIgMCAwIDEgMzIgMzJ2NTc2YTMyIDMyIDAgMCAxLTMyIDMySDk2YTMyIDMyIDAgMCAxLTMyLTMyVjE2MGEzMiAzMiAwIDAgMSAzMi0zMlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2ZvbGRlci52dWVcbnZhciBmb2xkZXJfZGVmYXVsdCA9IGZvbGRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZm9vZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMTQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTExNCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMTQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTE0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGZvb2RfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTE0KHtcbiAgbmFtZTogXCJGb29kXCIsXG4gIF9fbmFtZTogXCJmb29kXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxMTQoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazExNChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTE0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTEyOCAzNTIuNTc2VjM1MmEyODggMjg4IDAgMCAxIDQ5MS4wNzItMjA0LjIyNCAxOTIgMTkyIDAgMCAxIDI3NC4yNCAyMDQuNDggNjQgNjQgMCAwIDEgNTcuMjE2IDc0LjI0QzkyMS42IDYwMC41MTIgODUwLjA0OCA3MTAuNjU2IDczNiA3NTYuOTkyVjgwMGE5NiA5NiAwIDAgMS05NiA5NkgzODRhOTYgOTYgMCAwIDEtOTYtOTZ2LTQzLjAwOGMtMTE0LjA0OC00Ni4zMzYtMTg1LjYtMTU2LjQ4LTIxNC41MjgtMzMwLjQ5NkE2NCA2NCAwIDAgMSAxMjggMzUyLjY0em02NC0uNTc2aDY0YTE2MCAxNjAgMCAwIDEgMzIwIDBoNjRhMjI0IDIyNCAwIDAgMC00NDggMG0xMjggMGgxOTJhOTYgOTYgMCAwIDAtMTkyIDBtNDM5LjQyNCAwaDY4LjU0NEExMjguMjU2IDEyOC4yNTYgMCAwIDAgNzA0IDE5MmMtMTUuMzYgMC0yOS45NTIgMi42ODgtNDMuNTIgNy42MTYgMTEuMzI4IDE4LjE3NiAyMC42NzIgMzcuNzYgMjcuODQgNTguMzA0QTY0LjEyOCA2NC4xMjggMCAwIDEgNzU5LjQyNCAzNTJNNjcyIDc2OEgzNTJ2MzJhMzIgMzIgMCAwIDAgMzIgMzJoMjU2YTMyIDMyIDAgMCAwIDMyLTMyem0tMzQyLjUyOC02NGgzNjUuMDU2YzEwMS41MDQtMzIuNjQgMTY1Ljc2LTEyNC45MjggMTkyLjg5Ni0yODhIMTM2LjU3NmMyNy4xMzYgMTYzLjA3MiA5MS4zOTIgMjU1LjM2IDE5Mi44OTYgMjg4XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZm9vZC52dWVcbnZhciBmb29kX2RlZmF1bHQgPSBmb29kX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9mb290YmFsbC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMTUgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTExNSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMTUsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTE1IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGZvb3RiYWxsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDExNSh7XG4gIG5hbWU6IFwiRm9vdGJhbGxcIixcbiAgX19uYW1lOiBcImZvb3RiYWxsXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxMTUoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazExNShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTE1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA5NjBhNDQ4IDQ0OCAwIDEgMSAwLTg5NiA0NDggNDQ4IDAgMCAxIDAgODk2bTAtNjRhMzg0IDM4NCAwIDEgMCAwLTc2OCAzODQgMzg0IDAgMCAwIDAgNzY4XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTExNShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xODYuODE2IDI2OC4yODhjMTYtMTYuMzg0IDMxLjYxNi0zMS43NDQgNDYuOTc2LTQ2LjA4IDE3LjQ3MiAzMC42NTYgMzkuODA4IDU4LjExMiA2NS45ODQgODEuMjhsLTMyLjUxMiA1Ni40NDhhMzg1Ljk4NCAzODUuOTg0IDAgMCAxLTgwLjQ0OC05MS42NDh6bTY1My42OTYtNS4zMTJhMzg1LjkyIDM4NS45MiAwIDAgMS04My43NzYgOTYuOTZsLTMyLjUxMi01Ni4zODRhMzIyLjkyMyAzMjIuOTIzIDAgMCAwIDY4LjQ4LTg1Ljc2YzE1LjU1MiAxNC4wOCAzMS40ODggMjkuMTIgNDcuODA4IDQ1LjE4NHpNNDY1Ljk4NCA0NDUuMjQ4bDExLjEzNi02My4xMDRhMzIzLjU4NCAzMjMuNTg0IDAgMCAwIDY5Ljc2IDBsMTEuMTM2IDYzLjEwNGEzODcuOTY4IDM4Ny45NjggMCAwIDEtOTIuMDMyIDBtLTYyLjcyLTEyLjhBMzgxLjgyNCAzODEuODI0IDAgMCAxIDMyMCAzOTYuNTQ0bDMyLTU1LjQyNGEzMTkuODg1IDMxOS44ODUgMCAwIDAgNjIuNDY0IDI3LjcxMmwtMTEuMiA2My40ODh6bTMwMC44LTM1Ljg0YTM4MS44MjQgMzgxLjgyNCAwIDAgMS04My4zMjggMzUuODRsLTExLjItNjMuNTUyQTMxOS44ODUgMzE5Ljg4NSAwIDAgMCA2NzIgMzQxLjE4NGwzMiA1NS40MjR6bS01MjAuNzY4IDM2NC44YTM4NS45MiAzODUuOTIgMCAwIDEgODMuOTY4LTk3LjI4bDMyLjUxMiA1Ni4zMmMtMjYuODggMjMuOTM2LTQ5Ljg1NiA1Mi4zNTItNjcuNTIgODQuMDMyLTE2LTEzLjQ0LTMyLjMyLTI3LjcxMi00OC45Ni00My4wNzJ6bTY1Ny41MzYuMTI4YTE0NDIuNzU5IDE0NDIuNzU5IDAgMCAxLTQ5LjAyNCA0My4wNzIgMzIxLjQwOCAzMjEuNDA4IDAgMCAwLTY3LjU4NC04NC4xNmwzMi41MTItNTYuMzJjMzMuMjE2IDI3LjQ1NiA2MS42OTYgNjAuMzUyIDg0LjA5NiA5Ny40MDh6TTQ2NS45MiA1NzguNzUyYTM4Ny45NjggMzg3Ljk2OCAwIDAgMSA5Mi4wMzIgMGwtMTEuMTM2IDYzLjEwNGEzMjMuNTg0IDMyMy41ODQgMCAwIDAtNjkuNzYgMHptLTYyLjcyIDEyLjggMTEuMiA2My41NTJhMzE5Ljg4NSAzMTkuODg1IDAgMCAwLTYyLjQ2NCAyNy43MTJMMzIwIDYyNy4zOTJhMzgxLjgyNCAzODEuODI0IDAgMCAxIDgzLjI2NC0zNS44NHptMzAwLjggMzUuODQtMzIgNTUuNDI0YTMxOC4yNzIgMzE4LjI3MiAwIDAgMC02Mi41MjgtMjcuNzEybDExLjItNjMuNDg4YzI5LjQ0IDguNjQgNTcuMjggMjAuNzM2IDgzLjI2NCAzNS43NzZ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZm9vdGJhbGwudnVlXG52YXIgZm9vdGJhbGxfZGVmYXVsdCA9IGZvb3RiYWxsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9mb3JrLXNwb29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDExNiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTE2LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazExNiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMTYgfSBmcm9tIFwidnVlXCI7XG52YXIgZm9ya19zcG9vbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxMTYoe1xuICBuYW1lOiBcIkZvcmtTcG9vblwiLFxuICBfX25hbWU6IFwiZm9yay1zcG9vblwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTE2KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMTYoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTExNihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0yNTYgNDEwLjMwNFY5NmEzMiAzMiAwIDAgMSA2NCAwdjMxNC4zMDRhOTYgOTYgMCAwIDAgNjQtOTAuNTZWOTZhMzIgMzIgMCAwIDEgNjQgMHYyMjMuNzQ0YTE2MCAxNjAgMCAwIDEtMTI4IDE1Ni44VjkyOGEzMiAzMiAwIDEgMS02NCAwVjQ3Ni41NDRhMTYwIDE2MCAwIDAgMS0xMjgtMTU2LjhWOTZhMzIgMzIgMCAwIDEgNjQgMHYyMjMuNzQ0YTk2IDk2IDAgMCAwIDY0IDkwLjU2ek02NzIgNTcyLjQ4QzU4MS4xODQgNTUyLjEyOCA1MTIgNDQ2Ljg0OCA1MTIgMzIwYzAtMTQxLjQ0IDg1Ljk1Mi0yNTYgMTkyLTI1NnMxOTIgMTE0LjU2IDE5MiAyNTZjMCAxMjYuODQ4LTY5LjE4NCAyMzIuMTI4LTE2MCAyNTIuNDhWOTI4YTMyIDMyIDAgMSAxLTY0IDB6TTcwNCA1MTJjNjYuMDQ4IDAgMTI4LTgyLjU2IDEyOC0xOTJzLTYxLjk1Mi0xOTItMTI4LTE5Mi0xMjggODIuNTYtMTI4IDE5MiA2MS45NTIgMTkyIDEyOCAxOTJcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9mb3JrLXNwb29uLnZ1ZVxudmFyIGZvcmtfc3Bvb25fZGVmYXVsdCA9IGZvcmtfc3Bvb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2ZyaWVzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDExNyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTE3LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazExNywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMTcgfSBmcm9tIFwidnVlXCI7XG52YXIgZnJpZXNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTE3KHtcbiAgbmFtZTogXCJGcmllc1wiLFxuICBfX25hbWU6IFwiZnJpZXNcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazExNygpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTE3KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxMTcoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNjA4IDIyNHYtNjRhMzIgMzIgMCAwIDAtNjQgMHYzMzZoMjYuODhBNjQgNjQgMCAwIDAgNjA4IDQ4NC4wOTZ6bTEwMS4xMiAxNjBBNjQgNjQgMCAwIDAgNjcyIDM5NS45MDRWMzg0aDY0VjIyNGEzMiAzMiAwIDEgMC02NCAwdjE2MHptNzQuODggMGE5Mi45MjggOTIuOTI4IDAgMCAxIDkxLjMyOCAxMTAuMDhsLTYwLjY3MiAzMjMuNTg0QTk2IDk2IDAgMCAxIDcyMC4zMiA4OTZIMzAzLjY4YTk2IDk2IDAgMCAxLTk0LjMzNi03OC4zMzZMMTQ4LjY3MiA0OTQuMDhBOTIuOTI4IDkyLjkyOCAwIDAgMSAyNDAgMzg0aC0xNlYyMjRhOTYgOTYgMCAwIDEgMTg4LjYwOC0yNS4yOEE5NS43NDQgOTUuNzQ0IDAgMCAxIDQ4MCAxOTcuNDRWMTYwYTk2IDk2IDAgMCAxIDE4OC42MDgtMjUuMjhBOTYgOTYgMCAwIDEgODAwIDIyNHYxNjB6TTY3MC43ODQgNTEyYTEyOCAxMjggMCAwIDEtOTkuOTA0IDQ4SDQ1My4xMmExMjggMTI4IDAgMCAxLTk5Ljg0LTQ4SDM1MnYtMS41MzZhMTI4LjEyOCAxMjguMTI4IDAgMCAxLTkuOTg0LTE0Ljk3NkwzMTQuODggNDQ4SDI0MGEyOC45MjggMjguOTI4IDAgMCAwLTI4LjQ4IDM0LjMwNEwyNDEuMDg4IDY0MGg1NDEuODI0bDI5LjU2OC0xNTcuNjk2QTI4LjkyOCAyOC45MjggMCAwIDAgNzg0IDQ0OGgtNzQuODhsLTI3LjEzNiA0Ny40ODhBMTMyLjQwNSAxMzIuNDA1IDAgMCAxIDY3MiA1MTAuNDY0VjUxMnpNNDgwIDI4OGEzMiAzMiAwIDAgMC02NCAwdjE5Ni4wOTZBNjQgNjQgMCAwIDAgNDUzLjEyIDQ5Nkg0ODB6bS0xMjggOTZWMjI0YTMyIDMyIDAgMCAwLTY0IDB2MTYwemgtMzcuMTJBNjQgNjQgMCAwIDEgMzUyIDM5NS45MDR6bS05OC44OCAzMjAgMTkuMDcyIDEwMS44ODhBMzIgMzIgMCAwIDAgMzAzLjY4IDgzMmg0MTYuNjRhMzIgMzIgMCAwIDAgMzEuNDg4LTI2LjExMkw3NzAuODggNzA0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2ZyaWVzLnZ1ZVxudmFyIGZyaWVzX2RlZmF1bHQgPSBmcmllc192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZnVsbC1zY3JlZW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTE4IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxMTgsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTE4LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazExOCB9IGZyb20gXCJ2dWVcIjtcbnZhciBmdWxsX3NjcmVlbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxMTgoe1xuICBuYW1lOiBcIkZ1bGxTY3JlZW5cIixcbiAgX19uYW1lOiBcImZ1bGwtc2NyZWVuXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxMTgoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazExOChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTE4KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTE2MCA5Ni4wNjQgMTkyIC4xOTJhMzIgMzIgMCAwIDEgMCA2NGwtMTkyLS4xOTJWMzUyYTMyIDMyIDAgMCAxLTY0IDBWOTZoNjR6bTAgODMxLjg3MlY5MjhIOTZWNjcyYTMyIDMyIDAgMSAxIDY0IDB2MTkxLjkzNmwxOTItLjE5MmEzMiAzMiAwIDEgMSAwIDY0ek04NjQgOTYuMDY0Vjk2aDY0djI1NmEzMiAzMiAwIDEgMS02NCAwVjE2MC4wNjRsLTE5MiAuMTkyYTMyIDMyIDAgMSAxIDAtNjRsMTkyLS4xOTJ6bTAgODMxLjg3Mi0xOTItLjE5MmEzMiAzMiAwIDAgMSAwLTY0bDE5MiAuMTkyVjY3MmEzMiAzMiAwIDEgMSA2NCAwdjI1NmgtNjR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZnVsbC1zY3JlZW4udnVlXG52YXIgZnVsbF9zY3JlZW5fZGVmYXVsdCA9IGZ1bGxfc2NyZWVuX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9nb2JsZXQtZnVsbC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMTkgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTExOSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMTksIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTE5IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGdvYmxldF9mdWxsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDExOSh7XG4gIG5hbWU6IFwiR29ibGV0RnVsbFwiLFxuICBfX25hbWU6IFwiZ29ibGV0LWZ1bGxcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazExOSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTE5KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxMTkoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjU2IDMyMGg1MTJjMC03OC41OTItMTIuNjA4LTE0Mi40LTM2LjkyOC0xOTJoLTQzNC4yNEMyNjkuNTA0IDE5Mi4zODQgMjU2IDI1Ni4yNTYgMjU2IDMyMG01MDMuOTM2IDY0SDI2NC4wNjRhMjU2LjEyOCAyNTYuMTI4IDAgMCAwIDQ5NS44NzIgMHpNNTQ0IDYzOC40Vjg5Nmg5NmEzMiAzMiAwIDEgMSAwIDY0SDM4NGEzMiAzMiAwIDEgMSAwLTY0aDk2VjYzOC40QTMyMCAzMjAgMCAwIDEgMTkyIDMyMGMwLTg1LjYzMiAyMS4zMTItMTcwLjk0NCA2NC0yNTZoNTEyYzQyLjY4OCA2NC4zMiA2NCAxNDkuNjMyIDY0IDI1NmEzMjAgMzIwIDAgMCAxLTI4OCAzMTguNFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2dvYmxldC1mdWxsLnZ1ZVxudmFyIGdvYmxldF9mdWxsX2RlZmF1bHQgPSBnb2JsZXRfZnVsbF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZ29ibGV0LXNxdWFyZS1mdWxsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDEyMCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTIwLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazEyMCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMjAgfSBmcm9tIFwidnVlXCI7XG52YXIgZ29ibGV0X3NxdWFyZV9mdWxsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDEyMCh7XG4gIG5hbWU6IFwiR29ibGV0U3F1YXJlRnVsbFwiLFxuICBfX25hbWU6IFwiZ29ibGV0LXNxdWFyZS1mdWxsXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxMjAoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazEyMChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTIwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTI1NiAyNzAuOTEyYzEwLjA0OCA2LjcyIDIyLjQ2NCAxNC45MTIgMjguOTkyIDE4LjYyNGEyMjAuMTYgMjIwLjE2IDAgMCAwIDExNC43NTIgMzAuNzJjMzAuNTkyIDAgNDkuNDA4LTkuNDcyIDkxLjA3Mi00MS4xNTJsLjY0LS40NDhjNTIuOTI4LTQwLjMyIDgyLjM2OC01NS4wNCAxMzIuMjg4LTU0LjY1NiA1NS41NTIuNDQ4IDk5LjU4NCAyMC44IDE0Mi43MiA1Ny40MDhsMS41MzYgMS4yOFYxMjhIMjU2djE0Mi45MTJ6bS45NiA3Ni4yODhDMjY2LjM2OCA0ODIuMTc2IDM0Ni44OCA1NzUuODcyIDUxMiA1NzZjMTU3LjQ0LjA2NCAyMzcuOTUyLTg1LjA1NiAyNTMuMjQ4LTIwOS45ODRhOTUyLjMyIDk1Mi4zMiAwIDAgMS00MC4xOTItMzUuNzEyYy0zMi43MDQtMjcuNzc2LTYzLjM2LTQxLjkyLTEwMS44ODgtNDIuMjQtMzEuNTUyLS4yNTYtNTAuNjI0IDkuMjgtOTMuMTIgNDEuNmwtLjU3Ni40NDhjLTUyLjA5NiAzOS42MTYtODEuMDI0IDU0LjIwOC0xMjkuNzkyIDU0LjIwOC01NC43ODQgMC0xMDAuNDgtMTMuMzc2LTE0Mi43ODQtMzcuMDU2ek00ODAgNjM4Ljg0OEMyNTAuNjI0IDYyMy40MjQgMTkyIDQ0Mi40OTYgMTkyIDMxOS42OFY5NmEzMiAzMiAwIDAgMSAzMi0zMmg1NzZhMzIgMzIgMCAwIDEgMzIgMzJ2MjI0YzAgMTIyLjgxNi01OC42MjQgMzAzLjY4LTI4OCAzMTguOTEyVjg5Nmg5NmEzMiAzMiAwIDEgMSAwIDY0SDM4NGEzMiAzMiAwIDEgMSAwLTY0aDk2elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2dvYmxldC1zcXVhcmUtZnVsbC52dWVcbnZhciBnb2JsZXRfc3F1YXJlX2Z1bGxfZGVmYXVsdCA9IGdvYmxldF9zcXVhcmVfZnVsbF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZ29ibGV0LXNxdWFyZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMjEgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTEyMSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMjEsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTIxIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGdvYmxldF9zcXVhcmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTIxKHtcbiAgbmFtZTogXCJHb2JsZXRTcXVhcmVcIixcbiAgX19uYW1lOiBcImdvYmxldC1zcXVhcmVcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazEyMSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTIxKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxMjEoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTQ0IDYzOC45MTJWODk2aDk2YTMyIDMyIDAgMSAxIDAgNjRIMzg0YTMyIDMyIDAgMSAxIDAtNjRoOTZWNjM4Ljg0OEMyNTAuNjI0IDYyMy40MjQgMTkyIDQ0Mi40OTYgMTkyIDMxOS42OFY5NmEzMiAzMiAwIDAgMSAzMi0zMmg1NzZhMzIgMzIgMCAwIDEgMzIgMzJ2MjI0YzAgMTIyLjgxNi01OC42MjQgMzAzLjY4LTI4OCAzMTguOTEyTTI1NiAzMTkuNjhjMCAxNDkuNTY4IDgwIDI1Ni4xOTIgMjU2IDI1Ni4yNTZDNjg4LjEyOCA1NzYgNzY4IDQ2OS41NjggNzY4IDMyMFYxMjhIMjU2elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2dvYmxldC1zcXVhcmUudnVlXG52YXIgZ29ibGV0X3NxdWFyZV9kZWZhdWx0ID0gZ29ibGV0X3NxdWFyZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZ29ibGV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDEyMiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTIyLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazEyMiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMjIgfSBmcm9tIFwidnVlXCI7XG52YXIgZ29ibGV0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDEyMih7XG4gIG5hbWU6IFwiR29ibGV0XCIsXG4gIF9fbmFtZTogXCJnb2JsZXRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazEyMigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTIyKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxMjIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTQ0IDYzOC40Vjg5Nmg5NmEzMiAzMiAwIDEgMSAwIDY0SDM4NGEzMiAzMiAwIDEgMSAwLTY0aDk2VjYzOC40QTMyMCAzMjAgMCAwIDEgMTkyIDMyMGMwLTg1LjYzMiAyMS4zMTItMTcwLjk0NCA2NC0yNTZoNTEyYzQyLjY4OCA2NC4zMiA2NCAxNDkuNjMyIDY0IDI1NmEzMjAgMzIwIDAgMCAxLTI4OCAzMTguNE0yNTYgMzIwYTI1NiAyNTYgMCAxIDAgNTEyIDBjMC03OC41OTItMTIuNjA4LTE0Mi40LTM2LjkyOC0xOTJoLTQzNC4yNEMyNjkuNTA0IDE5Mi4zODQgMjU2IDI1Ni4yNTYgMjU2IDMyMFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2dvYmxldC52dWVcbnZhciBnb2JsZXRfZGVmYXVsdCA9IGdvYmxldF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZ29sZC1tZWRhbC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMjMgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTEyMywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMjMsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTIzIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGdvbGRfbWVkYWxfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTIzKHtcbiAgbmFtZTogXCJHb2xkTWVkYWxcIixcbiAgX19uYW1lOiBcImdvbGQtbWVkYWxcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazEyMygpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTIzKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICBcInhtbDpzcGFjZVwiOiBcInByZXNlcnZlXCIsXG4gICAgICBzdHlsZTogeyBcImVuYWJsZS1iYWNrZ3JvdW5kXCI6IFwibmV3IDAgMCAxMDI0IDEwMjRcIiB9LFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTIzKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTc3Mi4xMyA0NTIuODQgNTMuODYtMzUxLjgxYzEuMzItMTAuMDEtMS4xNy0xOC42OC03LjQ5LTI2LjAyUzgwNC4zNSA2NCA3OTUuMDEgNjRIMjI4Ljk5di0uMDFoLS4wNmMtOS4zMyAwLTE3LjE1IDMuNjctMjMuNDkgMTEuMDFzLTguODMgMTYuMDEtNy40OSAyNi4wMmw1My44NyAzNTEuODlDMjEzLjU0IDUwNS43MyAxOTMuNTkgNTY4LjA5IDE5MiA2NDBjMiA5MC42NyAzMy4xNyAxNjYuMTcgOTMuNSAyMjYuNVM0MjEuMzMgOTU3Ljk5IDUxMiA5NjBjOTAuNjctMiAxNjYuMTctMzMuMTcgMjI2LjUtOTMuNSA2MC4zMy02MC4zNCA5MS40OS0xMzUuODMgOTMuNS0yMjYuNS0xLjU5LTcxLjk0LTIxLjU2LTEzNC4zMi01OS44Ny0xODcuMTZ6TTY0MC4wMSAxMjhoMTE3LjAybC0zOS4wMSAyNTQuMDJjLTIwLjc1LTEwLjY0LTQwLjc0LTE5LjczLTU5Ljk0LTI3LjI4LTUuOTItMy0xMS45NS01LjgtMTguMDgtOC40MVYxMjhoLjAxek01NzYgMTI4djE5OC43NmMtMTMuMTgtMi41OC0yNi43NC00LjQzLTQwLjY3LTUuNTUtOC4wNy0uOC0xNS44NS0xLjItMjMuMzMtMS4yLTEwLjU0IDAtMjEuMDkuNjYtMzEuNjQgMS45NmEzNTkuODQ0IDM1OS44NDQgMCAwIDAtMzIuMzYgNC43OVYxMjh6bS0xOTIgMGguMDR2MjE4LjNjLTYuMjIgMi42Ni0xMi4zNCA1LjUtMTguMzYgOC41Ni0xOS4xMyA3LjU0LTM5LjAyIDE2LjYtNTkuNjYgMjcuMTZMMjY3LjAxIDEyOHptMzA4Ljk5IDY5Mi45OWMtNDggNDgtMTA4LjMzIDczLTE4MC45OSA3NS4wMS03Mi42Ni0yLjAxLTEzMi45OS0yNy4wMS0xODAuOTktNzUuMDFTMjU4LjAxIDcxMi42NiAyNTYgNjQwYzIuMDEtNzIuNjYgMjcuMDEtMTMyLjk5IDc1LjAxLTE4MC45OSAxOS42Ny0xOS42NyA0MS40MS0zNS40NyA2NS4yMi00Ny40MSAzOC4zMy0xNS4wNCA3MS4xNS0yMy45MiA5OC40NC0yNi42NSA1LjA3LS40MSAxMC4yLS43IDE1LjM5LS44OC42My0uMDEgMS4yOC0uMDMgMS45MS0uMDMuNjYgMCAxLjM1LjAzIDIuMDIuMDQgNS4xMS4xNyAxMC4xNS40NiAxNS4xMy44NiAyNy40IDIuNzEgNjAuMzcgMTEuNjUgOTguOTEgMjYuNzkgMjMuNzEgMTEuOTMgNDUuMzYgMjcuNjkgNjQuOTYgNDcuMjkgNDggNDggNzMgMTA4LjMzIDc1LjAxIDE4MC45OS0yLjAxIDcyLjY1LTI3LjAxIDEzMi45OC03NS4wMSAxODAuOTh6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEyMyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01NDQgNDgwSDQxNnY2NGg2NHYxOTJoLTY0djY0aDE5MnYtNjRoLTY0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2dvbGQtbWVkYWwudnVlXG52YXIgZ29sZF9tZWRhbF9kZWZhdWx0ID0gZ29sZF9tZWRhbF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvZ29vZHMtZmlsbGVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDEyNCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTI0LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazEyNCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMjQgfSBmcm9tIFwidnVlXCI7XG52YXIgZ29vZHNfZmlsbGVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDEyNCh7XG4gIG5hbWU6IFwiR29vZHNGaWxsZWRcIixcbiAgX19uYW1lOiBcImdvb2RzLWZpbGxlZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTI0KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMjQoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEyNChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xOTIgMzUyaDY0MGw2NCA1NDRIMTI4em0xMjggMjI0aDY0VjQ0OGgtNjR6bTMyMCAwaDY0VjQ0OGgtNjR6TTM4NCAyODhoLTY0YTE5MiAxOTIgMCAxIDEgMzg0IDBoLTY0YTEyOCAxMjggMCAxIDAtMjU2IDBcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9nb29kcy1maWxsZWQudnVlXG52YXIgZ29vZHNfZmlsbGVkX2RlZmF1bHQgPSBnb29kc19maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2dvb2RzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDEyNSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTI1LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazEyNSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMjUgfSBmcm9tIFwidnVlXCI7XG52YXIgZ29vZHNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTI1KHtcbiAgbmFtZTogXCJHb29kc1wiLFxuICBfX25hbWU6IFwiZ29vZHNcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazEyNSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTI1KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxMjUoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMzIwIDI4OHYtMjIuMzM2QzMyMCAxNTQuNjg4IDQwNS41MDQgNjQgNTEyIDY0czE5MiA5MC42ODggMTkyIDIwMS42NjR2MjIuNGgxMzEuMDcyYTMyIDMyIDAgMCAxIDMxLjgwOCAyOC44bDU3LjYgNTc2YTMyIDMyIDAgMCAxLTMxLjgwOCAzNS4ySDEzMS4zMjhhMzIgMzIgMCAwIDEtMzEuODA4LTM1LjJsNTcuNi01NzZhMzIgMzIgMCAwIDEgMzEuODA4LTI4LjhIMzIwem02NCAwaDI1NnYtMjIuMzM2QzY0MCAxODkuMjQ4IDU4Mi4yNzIgMTI4IDUxMiAxMjhjLTcwLjI3MiAwLTEyOCA2MS4yNDgtMTI4IDEzNy42NjR2MjIuNHptLTY0IDY0SDIxNy45MmwtNTEuMiA1MTJoNjkwLjU2bC01MS4yNjQtNTEySDcwNHY5NmEzMiAzMiAwIDEgMS02NCAwdi05NkgzODR2OTZhMzIgMzIgMCAwIDEtNjQgMHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9nb29kcy52dWVcbnZhciBnb29kc19kZWZhdWx0ID0gZ29vZHNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2dyYXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDEyNiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTI2LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazEyNiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMjYgfSBmcm9tIFwidnVlXCI7XG52YXIgZ3JhcGVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTI2KHtcbiAgbmFtZTogXCJHcmFwZVwiLFxuICBfX25hbWU6IFwiZ3JhcGVcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazEyNigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTI2KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxMjYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTQ0IDE5NS4yYTE2MCAxNjAgMCAwIDEgOTYgNjAuOCAxNjAgMTYwIDAgMSAxIDE0Ni4yNCAyNTQuOTc2IDE2MCAxNjAgMCAwIDEtMTI4IDIyNCAxNjAgMTYwIDAgMSAxLTI5Mi40OCAwIDE2MCAxNjAgMCAwIDEtMTI4LTIyNEExNjAgMTYwIDAgMSAxIDM4NCAyNTZhMTYwIDE2MCAwIDAgMSA5Ni02MC44VjEyOGgtNjRhMzIgMzIgMCAwIDEgMC02NGgxOTJhMzIgMzIgMCAwIDEgMCA2NGgtNjR6TTUxMiA0NDhhOTYgOTYgMCAxIDAgMC0xOTIgOTYgOTYgMCAwIDAgMCAxOTJtLTI1NiAwYTk2IDk2IDAgMSAwIDAtMTkyIDk2IDk2IDAgMCAwIDAgMTkybTEyOCAyMjRhOTYgOTYgMCAxIDAgMC0xOTIgOTYgOTYgMCAwIDAgMCAxOTJtMTI4IDIyNGE5NiA5NiAwIDEgMCAwLTE5MiA5NiA5NiAwIDAgMCAwIDE5Mm0xMjgtMjI0YTk2IDk2IDAgMSAwIDAtMTkyIDk2IDk2IDAgMCAwIDAgMTkybTEyOC0yMjRhOTYgOTYgMCAxIDAgMC0xOTIgOTYgOTYgMCAwIDAgMCAxOTJcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9ncmFwZS52dWVcbnZhciBncmFwZV9kZWZhdWx0ID0gZ3JhcGVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2dyaWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTI3IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxMjcsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTI3LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazEyNyB9IGZyb20gXCJ2dWVcIjtcbnZhciBncmlkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDEyNyh7XG4gIG5hbWU6IFwiR3JpZFwiLFxuICBfX25hbWU6IFwiZ3JpZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTI3KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMjcoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEyNyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk02NDAgMzg0djI1NkgzODRWMzg0em02NCAwaDE5MnYyNTZINzA0em0tNjQgNTEySDM4NFY3MDRoMjU2em02NCAwVjcwNGgxOTJ2MTkyem0tNjQtNzY4djE5MkgzODRWMTI4em02NCAwaDE5MnYxOTJINzA0ek0zMjAgMzg0djI1NkgxMjhWMzg0em0wIDUxMkgxMjhWNzA0aDE5MnptMC03Njh2MTkySDEyOFYxMjh6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvZ3JpZC52dWVcbnZhciBncmlkX2RlZmF1bHQgPSBncmlkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9ndWlkZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMjggfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTEyOCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMjgsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTI4IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGd1aWRlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDEyOCh7XG4gIG5hbWU6IFwiR3VpZGVcIixcbiAgX19uYW1lOiBcImd1aWRlXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxMjgoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazEyOChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTI4KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTY0MCA2MDhoLTY0VjQxNmg2NHptMCAxNjB2MTYwYTMyIDMyIDAgMCAxLTMyIDMySDQxNmEzMiAzMiAwIDAgMS0zMi0zMlY3NjhoNjR2MTI4aDEyOFY3Njh6TTM4NCA2MDhWNDE2aDY0djE5MnptMjU2LTM1MmgtNjRWMTI4SDQ0OHYxMjhoLTY0Vjk2YTMyIDMyIDAgMCAxIDMyLTMyaDE5MmEzMiAzMiAwIDAgMSAzMiAzMnpcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTI4KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTIyMC44IDI1Ni03MS4yMzIgODAgNzEuMTY4IDgwSDc2OFYyNTZIMjIwLjh6bS0xNC40LTY0SDgwMGEzMiAzMiAwIDAgMSAzMiAzMnYyMjRhMzIgMzIgMCAwIDEtMzIgMzJIMjA2LjRhMzIgMzIgMCAwIDEtMjMuOTM2LTEwLjc1MmwtOTkuNTg0LTExMmEzMiAzMiAwIDAgMSAwLTQyLjQ5Nmw5OS41ODQtMTEyQTMyIDMyIDAgMCAxIDIwNi40IDE5Mm02NzguNzg0IDQ5Ni03MS4xMDQgODBIMjY2LjgxNlY2MDhoNTQ3LjJsNzEuMTY4IDgwem0tNTYuNzY4LTE0NEgyMzQuODhhMzIgMzIgMCAwIDAtMzIgMzJ2MjI0YTMyIDMyIDAgMCAwIDMyIDMyaDU5My42YTMyIDMyIDAgMCAwIDIzLjkzNi0xMC43NTJsOTkuNTg0LTExMmEzMiAzMiAwIDAgMCAwLTQyLjQ5NmwtOTkuNTg0LTExMkEzMiAzMiAwIDAgMCA4MjguNDggNTQ0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2d1aWRlLnZ1ZVxudmFyIGd1aWRlX2RlZmF1bHQgPSBndWlkZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvaGFuZGJhZy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMjkgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTEyOSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMjksIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTI5IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGhhbmRiYWdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTI5KHtcbiAgbmFtZTogXCJIYW5kYmFnXCIsXG4gIF9fbmFtZTogXCJoYW5kYmFnXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxMjkoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazEyOShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgXCJ4bWw6c3BhY2VcIjogXCJwcmVzZXJ2ZVwiLFxuICAgICAgc3R5bGU6IHsgXCJlbmFibGUtYmFja2dyb3VuZFwiOiBcIm5ldyAwIDAgMTAyNCAxMDI0XCIgfSxcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEyOShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk04ODcuMDEgMjY0Ljk5Yy02LTUuOTktMTMuNjctOC45OS0yMy4wMS04Ljk5SDcwNGMtMS4zNC01NC42OC0yMC4wMS0xMDAuMDEtNTYtMTM2cy04MS4zMi01NC42Ni0xMzYtNTZjLTU0LjY4IDEuMzQtMTAwLjAxIDIwLjAxLTEzNiA1NnMtNTQuNjYgODEuMzItNTYgMTM2SDE2MGMtOS4zNSAwLTE3LjAyIDMtMjMuMDEgOC45OS01Ljk5IDYtOC45OSAxMy42Ny04Ljk5IDIzLjAxdjY0MGMwIDkuMzUgMi45OSAxNy4wMiA4Ljk5IDIzLjAxUzE1MC42NiA5NjAgMTYwIDk2MGg3MDRjOS4zNSAwIDE3LjAyLTIuOTkgMjMuMDEtOC45OVM4OTYgOTM3LjM0IDg5NiA5MjhWMjg4YzAtOS4zNS0yLjk5LTE3LjAyLTguOTktMjMuMDFNNDIxLjUgMTY1LjVjMjQuMzItMjQuMzQgNTQuNDktMzYuODQgOTAuNS0zNy41IDM1Ljk5LjY4IDY2LjE2IDEzLjE4IDkwLjUgMzcuNXMzNi44NCA1NC40OSAzNy41IDkwLjVIMzg0Yy42OC0zNS45OSAxMy4xOC02Ni4xNiAzNy41LTkwLjVNODMyIDg5NkgxOTJWMzIwaDEyOHYxMjhoNjRWMzIwaDI1NnYxMjhoNjRWMzIwaDEyOHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9oYW5kYmFnLnZ1ZVxudmFyIGhhbmRiYWdfZGVmYXVsdCA9IGhhbmRiYWdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2hlYWRzZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTMwIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxMzAsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTMwLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazEzMCB9IGZyb20gXCJ2dWVcIjtcbnZhciBoZWFkc2V0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDEzMCh7XG4gIG5hbWU6IFwiSGVhZHNldFwiLFxuICBfX25hbWU6IFwiaGVhZHNldFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTMwKCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMzAoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEzMChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk04OTYgNTI5LjE1MlY1MTJhMzg0IDM4NCAwIDEgMC03NjggMHYxNy4xNTJBMTI4IDEyOCAwIDAgMSAzMjAgNjQwdjEyOGExMjggMTI4IDAgMSAxLTI1NiAwVjUxMmE0NDggNDQ4IDAgMSAxIDg5NiAwdjI1NmExMjggMTI4IDAgMSAxLTI1NiAwVjY0MGExMjggMTI4IDAgMCAxIDE5Mi0xMTAuODQ4TTg5NiA2NDBhNjQgNjQgMCAwIDAtMTI4IDB2MTI4YTY0IDY0IDAgMCAwIDEyOCAwem0tNzY4IDB2MTI4YTY0IDY0IDAgMCAwIDEyOCAwVjY0MGE2NCA2NCAwIDEgMC0xMjggMFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2hlYWRzZXQudnVlXG52YXIgaGVhZHNldF9kZWZhdWx0ID0gaGVhZHNldF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvaGVscC1maWxsZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTMxIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxMzEsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTMxLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazEzMSB9IGZyb20gXCJ2dWVcIjtcbnZhciBoZWxwX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxMzEoe1xuICBuYW1lOiBcIkhlbHBGaWxsZWRcIixcbiAgX19uYW1lOiBcImhlbHAtZmlsbGVkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxMzEoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazEzMShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTMxKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTkyNi43ODQgNDgwSDcwMS4zMTJBMTkyLjUxMiAxOTIuNTEyIDAgMCAwIDU0NCAzMjIuNjg4Vjk3LjIxNkE0MTYuMDY0IDQxNi4wNjQgMCAwIDEgOTI2Ljc4NCA0ODBtMCA2NEE0MTYuMDY0IDQxNi4wNjQgMCAwIDEgNTQ0IDkyNi43ODRWNzAxLjMxMkExOTIuNTEyIDE5Mi41MTIgMCAwIDAgNzAxLjMxMiA1NDR6TTk3LjI4IDU0NGgyMjUuNDcyQTE5Mi41MTIgMTkyLjUxMiAwIDAgMCA0ODAgNzAxLjMxMnYyMjUuNDcyQTQxNi4wNjQgNDE2LjA2NCAwIDAgMSA5Ny4yMTYgNTQ0em0wLTY0QTQxNi4wNjQgNDE2LjA2NCAwIDAgMSA0ODAgOTcuMjE2djIyNS40NzJBMTkyLjUxMiAxOTIuNTEyIDAgMCAwIDMyMi42ODggNDgwSDk3LjIxNnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9oZWxwLWZpbGxlZC52dWVcbnZhciBoZWxwX2ZpbGxlZF9kZWZhdWx0ID0gaGVscF9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2hlbHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTMyIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxMzIsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTMyLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazEzMiB9IGZyb20gXCJ2dWVcIjtcbnZhciBoZWxwX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDEzMih7XG4gIG5hbWU6IFwiSGVscFwiLFxuICBfX25hbWU6IFwiaGVscFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTMyKCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMzIoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEzMihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIm03NTkuOTM2IDgwNS4yNDgtOTAuOTQ0LTkxLjAwOEEyNTQuOTEyIDI1NC45MTIgMCAwIDEgNTEyIDc2OGEyNTQuOTEyIDI1NC45MTIgMCAwIDEtMTU2Ljk5Mi01My43NmwtOTAuOTQ0IDkxLjAwOEEzODIuNDY0IDM4Mi40NjQgMCAwIDAgNTEyIDg5NmM5NC41MjggMCAxODEuMTItMzQuMTc2IDI0Ny45MzYtOTAuNzUybTQ1LjMxMi00NS4zMTJBMzgyLjQ2NCAzODIuNDY0IDAgMCAwIDg5NiA1MTJjMC05NC41MjgtMzQuMTc2LTE4MS4xMi05MC43NTItMjQ3LjkzNmwtOTEuMDA4IDkwLjk0NEM3NDcuOTA0IDM5OC40IDc2OCA0NTIuODY0IDc2OCA1MTJjMCA1OS4xMzYtMjAuMDk2IDExMy42LTUzLjc2IDE1Ni45OTJsOTEuMDA4IDkwLjk0NHptLTQ1LjMxMi01NDEuMTg0QTM4Mi40NjQgMzgyLjQ2NCAwIDAgMCA1MTIgMTI4Yy05NC41MjggMC0xODEuMTIgMzQuMTc2LTI0Ny45MzYgOTAuNzUybDkwLjk0NCA5MS4wMDhBMjU0LjkxMiAyNTQuOTEyIDAgMCAxIDUxMiAyNTZjNTkuMTM2IDAgMTEzLjYgMjAuMDk2IDE1Ni45OTIgNTMuNzZsOTAuOTQ0LTkxLjAwOHptLTU0MS4xODQgNDUuMzEyQTM4Mi40NjQgMzgyLjQ2NCAwIDAgMCAxMjggNTEyYzAgOTQuNTI4IDM0LjE3NiAxODEuMTIgOTAuNzUyIDI0Ny45MzZsOTEuMDA4LTkwLjk0NEEyNTQuOTEyIDI1NC45MTIgMCAwIDEgMjU2IDUxMmMwLTU5LjEzNiAyMC4wOTYtMTEzLjYgNTMuNzYtMTU2Ljk5MnptNDE3LjI4IDM5NC40OTZhMTk0LjU2IDE5NC41NiAwIDAgMCAyMi41MjgtMjIuNTI4QzY4Ni45MTIgNjAyLjU2IDcwNCA1NTkuMjMyIDcwNCA1MTJhMTkxLjIzMiAxOTEuMjMyIDAgMCAwLTY3Ljk2OC0xNDYuNTZBMTkxLjI5NiAxOTEuMjk2IDAgMCAwIDUxMiAzMjBhMTkxLjIzMiAxOTEuMjMyIDAgMCAwLTE0Ni41NiA2Ny45NjhDMzM3LjA4OCA0MjEuNDQgMzIwIDQ2NC43NjggMzIwIDUxMmExOTEuMjMyIDE5MS4yMzIgMCAwIDAgNjcuOTY4IDE0Ni41NkM0MjEuNDQgNjg2LjkxMiA0NjQuNzY4IDcwNCA1MTIgNzA0YzQ3LjI5NiAwIDkwLjU2LTE3LjA4OCAxMjQuMDMyLTQ1LjQ0ek01MTIgOTYwYTQ0OCA0NDggMCAxIDEgMC04OTYgNDQ4IDQ0OCAwIDAgMSAwIDg5NlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2hlbHAudnVlXG52YXIgaGVscF9kZWZhdWx0ID0gaGVscF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvaGlkZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMzMgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTEzMywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMzMsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTMzIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGhpZGVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTMzKHtcbiAgbmFtZTogXCJIaWRlXCIsXG4gIF9fbmFtZTogXCJoaWRlXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxMzMoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazEzMyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTMzKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTg3Ni44IDE1Ni44YzAtOS42LTMuMi0xNi05LjYtMjIuNC02LjQtNi40LTEyLjgtOS42LTIyLjQtOS42LTkuNiAwLTE2IDMuMi0yMi40IDkuNkw3MzYgMjIwLjhjLTY0LTMyLTEzNy42LTUxLjItMjI0LTYwLjgtMTYwIDE2LTI4OCA3My42LTM3Ny42IDE3NkM0NC44IDQzOC40IDAgNDk2IDAgNTEyczQ4IDczLjYgMTM0LjQgMTc2YzIyLjQgMjUuNiA0NC44IDQ4IDczLjYgNjcuMmwtODYuNCA4OS42Yy02LjQgNi40LTkuNiAxMi44LTkuNiAyMi40IDAgOS42IDMuMiAxNiA5LjYgMjIuNCA2LjQgNi40IDEyLjggOS42IDIyLjQgOS42IDkuNiAwIDE2LTMuMiAyMi40LTkuNmw3MDQtNzEwLjRjMy4yLTYuNCA2LjQtMTIuOCA2LjQtMjIuNFptLTY0Ni40IDUyOGMtNzYuOC03MC40LTEyOC0xMjgtMTUzLjYtMTcyLjggMjguOC00OCA4MC0xMDUuNiAxNTMuNi0xNzIuOEMzMDQgMjcyIDQwMCAyMzAuNCA1MTIgMjI0YzY0IDMuMiAxMjQuOCAxOS4yIDE3NiA0NC44bC01NC40IDU0LjRDNTk4LjQgMzAwLjggNTYwIDI4OCA1MTIgMjg4Yy02NCAwLTExNS4yIDIyLjQtMTYwIDY0cy02NCA5Ni02NCAxNjBjMCA0OCAxMi44IDg5LjYgMzUuMiAxMjQuOEwyNTYgNzA3LjJjLTkuNi02LjQtMTkuMi0xNi0yNS42LTIyLjRabTE0MC44LTk2Yy0xMi44LTIyLjQtMTkuMi00OC0xOS4yLTc2LjggMC00NC44IDE2LTgzLjIgNDgtMTEyIDMyLTI4LjggNjcuMi00OCAxMTItNDggMjguOCAwIDU0LjQgNi40IDczLjYgMTkuMnpNODg5LjU5OSAzMzZjLTEyLjgtMTYtMjguOC0yOC44LTQxLjYtNDEuNmwtNDggNDhjNzMuNiA2Ny4yIDEyNC44IDEyNC44IDE1MC40IDE2OS42LTI4LjggNDgtODAgMTA1LjYtMTUzLjYgMTcyLjgtNzMuNiA2Ny4yLTE3Mi44IDEwOC44LTI4NC44IDExNS4yLTUxLjItMy4yLTk5LjItMTIuOC0xNDAuOC0yOC44bC00OCA0OGM1Ny42IDIyLjQgMTE4LjQgMzguNCAxODguOCA0NC44IDE2MC0xNiAyODgtNzMuNiAzNzcuNi0xNzZDOTc5LjE5OSA1ODUuNiAxMDI0IDUyOCAxMDI0IDUxMnMtNDguMDAxLTczLjYtMTM0LjQwMS0xNzZaXCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEzMyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01MTEuOTk4IDY3MmMtMTIuOCAwLTI1LjYtMy4yLTM4LjQtNi40bC01MS4yIDUxLjJjMjguOCAxMi44IDU3LjYgMTkuMiA4OS42IDE5LjIgNjQgMCAxMTUuMi0yMi40IDE2MC02NCA0MS42LTQxLjYgNjQtOTYgNjQtMTYwIDAtMzItNi40LTY0LTE5LjItODkuNmwtNTEuMiA1MS4yYzMuMiAxMi44IDYuNCAyNS42IDYuNCAzOC40IDAgNDQuOC0xNiA4My4yLTQ4IDExMi0zMiAyOC44LTY3LjIgNDgtMTEyIDQ4WlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2hpZGUudnVlXG52YXIgaGlkZV9kZWZhdWx0ID0gaGlkZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvaGlzdG9ncmFtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDEzNCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTM0LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazEzNCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMzQgfSBmcm9tIFwidnVlXCI7XG52YXIgaGlzdG9ncmFtX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDEzNCh7XG4gIG5hbWU6IFwiSGlzdG9ncmFtXCIsXG4gIF9fbmFtZTogXCJoaXN0b2dyYW1cIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazEzNCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTM0KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxMzQoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNDE2IDg5NlYxMjhoMTkydjc2OHptLTI4OCAwVjQ0OGgxOTJ2NDQ4em01NzYgMFYzMjBoMTkydjU3NnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9oaXN0b2dyYW0udnVlXG52YXIgaGlzdG9ncmFtX2RlZmF1bHQgPSBoaXN0b2dyYW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2hvbWUtZmlsbGVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDEzNSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTM1LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazEzNSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxMzUgfSBmcm9tIFwidnVlXCI7XG52YXIgaG9tZV9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTM1KHtcbiAgbmFtZTogXCJIb21lRmlsbGVkXCIsXG4gIF9fbmFtZTogXCJob21lLWZpbGxlZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTM1KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMzUoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEzNShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01MTIgMTI4IDEyOCA0NDcuOTM2Vjg5NmgyNTUuOTM2VjY0MEg2NDB2MjU2aDI1NS45MzZWNDQ3LjkzNnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9ob21lLWZpbGxlZC52dWVcbnZhciBob21lX2ZpbGxlZF9kZWZhdWx0ID0gaG9tZV9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2hvdC13YXRlci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMzYgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTEzNiwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMzYsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTM2IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGhvdF93YXRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxMzYoe1xuICBuYW1lOiBcIkhvdFdhdGVyXCIsXG4gIF9fbmFtZTogXCJob3Qtd2F0ZXJcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazEzNigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTM2KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxMzYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjczLjA2NyA0NzcuODY3aDQ3Ny44NjZWNDA5LjZIMjczLjA2N3ptMCA2OC4yNjZ2NTEuMkExODcuNzMzIDE4Ny43MzMgMCAwIDAgNDYwLjggNzg1LjA2N2gxMDIuNGExODcuNzMzIDE4Ny43MzMgMCAwIDAgMTg3LjczMy0xODcuNzM0di01MS4ySDI3My4wNjd6bS0zNC4xMzQtMjA0LjhoNTQ2LjEzNGEzNC4xMzMgMzQuMTMzIDAgMCAxIDM0LjEzMyAzNC4xMzR2MjIxLjg2NmEyNTYgMjU2IDAgMCAxLTI1NiAyNTZINDYwLjhhMjU2IDI1NiAwIDAgMS0yNTYtMjU2VjM3NS40NjdhMzQuMTMzIDM0LjEzMyAwIDAgMSAzNC4xMzMtMzQuMTM0ek01MTIgMzQuMTMzYTM0LjEzMyAzNC4xMzMgMCAwIDEgMzQuMTMzIDM0LjEzNHYxNzAuNjY2YTM0LjEzMyAzNC4xMzMgMCAwIDEtNjguMjY2IDBWNjguMjY3QTM0LjEzMyAzNC4xMzMgMCAwIDEgNTEyIDM0LjEzM3pNMzc1LjQ2NyAxMDIuNGEzNC4xMzMgMzQuMTMzIDAgMCAxIDM0LjEzMyAzNC4xMzN2MTAyLjRhMzQuMTMzIDM0LjEzMyAwIDAgMS02OC4yNjcgMHYtMTAyLjRhMzQuMTMzIDM0LjEzMyAwIDAgMSAzNC4xMzQtMzQuMTMzbTI3My4wNjYgMGEzNC4xMzMgMzQuMTMzIDAgMCAxIDM0LjEzNCAzNC4xMzN2MTAyLjRhMzQuMTMzIDM0LjEzMyAwIDEgMS02OC4yNjcgMHYtMTAyLjRhMzQuMTMzIDM0LjEzMyAwIDAgMSAzNC4xMzMtMzQuMTMzTTE3MC42NjcgOTIxLjY2OGg2ODIuNjY2YTM0LjEzMyAzNC4xMzMgMCAxIDEgMCA2OC4yNjdIMTcwLjY2N2EzNC4xMzMgMzQuMTMzIDAgMSAxIDAtNjguMjY3elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2hvdC13YXRlci52dWVcbnZhciBob3Rfd2F0ZXJfZGVmYXVsdCA9IGhvdF93YXRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvaG91c2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTM3IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxMzcsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTM3LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazEzNyB9IGZyb20gXCJ2dWVcIjtcbnZhciBob3VzZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxMzcoe1xuICBuYW1lOiBcIkhvdXNlXCIsXG4gIF9fbmFtZTogXCJob3VzZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTM3KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMzcoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEzNyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xOTIgNDEzLjk1MlY4OTZoNjQwVjQxMy45NTJMNTEyIDE0Ny4zMjh6TTEzOS41MiAzNzQuNGwzNTItMjkzLjMxMmEzMiAzMiAwIDAgMSA0MC45NiAwbDM1MiAyOTMuMzEyQTMyIDMyIDAgMCAxIDg5NiAzOTguOTc2VjkyOGEzMiAzMiAwIDAgMS0zMiAzMkgxNjBhMzIgMzIgMCAwIDEtMzItMzJWMzk4Ljk3NmEzMiAzMiAwIDAgMSAxMS41Mi0yNC41NzZcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9ob3VzZS52dWVcbnZhciBob3VzZV9kZWZhdWx0ID0gaG91c2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2ljZS1jcmVhbS1yb3VuZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMzggfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTEzOCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMzgsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTM4IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGljZV9jcmVhbV9yb3VuZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxMzgoe1xuICBuYW1lOiBcIkljZUNyZWFtUm91bmRcIixcbiAgX19uYW1lOiBcImljZS1jcmVhbS1yb3VuZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTM4KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMzgoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEzOChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIm0zMDguMzUyIDQ4OS4zNDQgMjI2LjMwNCAyMjYuMzA0YTMyIDMyIDAgMCAwIDQ1LjI0OCAwTDc4My41NTIgNTEyQTE5MiAxOTIgMCAxIDAgNTEyIDI0MC40NDhMMzA4LjM1MiA0NDQuMTZhMzIgMzIgMCAwIDAgMCA0NS4yNDh6bTEzNS43NDQgMjI2LjMwNEwzMDguMzUyIDg1MS4zOTJhOTYgOTYgMCAwIDEtMTM1Ljc0NC0xMzUuNzQ0bDEzNS43NDQtMTM1Ljc0NC00NS4yNDgtNDUuMjQ4YTk2IDk2IDAgMCAxIDAtMTM1LjgwOEw0NjYuNzUyIDE5NS4yQTI1NiAyNTYgMCAwIDEgODI4LjggNTU3LjI0OEw2MjUuMTUyIDc2MC45NmE5NiA5NiAwIDAgMS0xMzUuODA4IDBsLTQ1LjI0OC00NS4yNDh6TTM5OC44NDggNjcwLjQgMzUzLjYgNjI1LjE1MiAyMTcuODU2IDc2MC44OTZhMzIgMzIgMCAwIDAgNDUuMjQ4IDQ1LjI0OHptMjQ4Ljk2LTM4NC42NGEzMiAzMiAwIDAgMSAwIDQ1LjI0OEw0NjYuNjI0IDUxMmEzMiAzMiAwIDEgMS00NS4xODQtNDUuMjQ4bDE4MC45OTItMTgxLjA1NmEzMiAzMiAwIDAgMSA0NS4yNDggMHptOTAuNDk2IDkwLjQ5NmEzMiAzMiAwIDAgMSAwIDQ1LjI0OEw1NTcuMjQ4IDYwMi40OTZBMzIgMzIgMCAxIDEgNTEyIDU1Ny4yNDhsMTgwLjk5Mi0xODAuOTkyYTMyIDMyIDAgMCAxIDQ1LjMxMiAwelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2ljZS1jcmVhbS1yb3VuZC52dWVcbnZhciBpY2VfY3JlYW1fcm91bmRfZGVmYXVsdCA9IGljZV9jcmVhbV9yb3VuZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvaWNlLWNyZWFtLXNxdWFyZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxMzkgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTEzOSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxMzksIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTM5IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGljZV9jcmVhbV9zcXVhcmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTM5KHtcbiAgbmFtZTogXCJJY2VDcmVhbVNxdWFyZVwiLFxuICBfX25hbWU6IFwiaWNlLWNyZWFtLXNxdWFyZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTM5KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxMzkoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTEzOShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00MTYgNjQwaDI1NmEzMiAzMiAwIDAgMCAzMi0zMlYxNjBhMzIgMzIgMCAwIDAtMzItMzJIMzUyYTMyIDMyIDAgMCAwLTMyIDMydjQ0OGEzMiAzMiAwIDAgMCAzMiAzMnptMTkyIDY0djE2MGE5NiA5NiAwIDAgMS0xOTIgMFY3MDRoLTY0YTk2IDk2IDAgMCAxLTk2LTk2VjE2MGE5NiA5NiAwIDAgMSA5Ni05NmgzMjBhOTYgOTYgMCAwIDEgOTYgOTZ2NDQ4YTk2IDk2IDAgMCAxLTk2IDk2em0tNjQgMGgtNjR2MTYwYTMyIDMyIDAgMSAwIDY0IDB6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvaWNlLWNyZWFtLXNxdWFyZS52dWVcbnZhciBpY2VfY3JlYW1fc3F1YXJlX2RlZmF1bHQgPSBpY2VfY3JlYW1fc3F1YXJlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9pY2UtY3JlYW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTQwIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNDAsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTQwLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE0MCB9IGZyb20gXCJ2dWVcIjtcbnZhciBpY2VfY3JlYW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTQwKHtcbiAgbmFtZTogXCJJY2VDcmVhbVwiLFxuICBfX25hbWU6IFwiaWNlLWNyZWFtXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxNDAoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE0MChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTQwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTEyOC42NCA0NDhhMjA4IDIwOCAwIDAgMSAxOTMuNTM2LTE5MS41NTIgMjI0IDIyNCAwIDAgMSA0NDUuMjQ4IDE1LjQ4OEEyMDguMTI4IDIwOC4xMjggMCAwIDEgODk0Ljc4NCA0NDhIODk2TDU0OC44IDk4My42OGEzMiAzMiAwIDAgMS01My4yNDguNzA0TDEyOCA0NDh6bTY0LjI1NiAwaDI4Ni4yMDhhMTQ0IDE0NCAwIDAgMC0yODYuMjA4IDB6bTM1MS4zNiAwaDI4Ni4yNzJhMTQ0IDE0NCAwIDAgMC0yODYuMjcyIDB6bS0yOTQuODQ4IDY0IDI3MS44MDggMzk2LjYwOEw3NzguMjQgNTEySDI0OS40MDh6TTUxMS42OCAzNTIuNjRhMjA3Ljg3MiAyMDcuODcyIDAgMCAxIDE4OS4xODQtOTYuMTkyIDE2MCAxNjAgMCAwIDAtMzE0Ljc1MiA1LjYzMmM1Mi42MDggMTIuOTkyIDk3LjI4IDQ2LjA4IDEyNS41NjggOTAuNTZcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9pY2UtY3JlYW0udnVlXG52YXIgaWNlX2NyZWFtX2RlZmF1bHQgPSBpY2VfY3JlYW1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2ljZS1kcmluay52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNDEgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE0MSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNDEsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTQxIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGljZV9kcmlua192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNDEoe1xuICBuYW1lOiBcIkljZURyaW5rXCIsXG4gIF9fbmFtZTogXCJpY2UtZHJpbmtcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE0MSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTQxKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNDEoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDQ0OHYxMjhoMjM5LjY4bDE2LjA2NC0xMjh6bS02NCAwSDI1Ni4yNTZsMTYuMDY0IDEyOEg0NDh6bTY0LTI1NS4zNlYzODRoMjQ3Ljc0NEEyNTYuMTI4IDI1Ni4xMjggMCAwIDAgNTEyIDE5Mi42NG0tNjQgOC4wNjRBMjU2LjQ0OCAyNTYuNDQ4IDAgMCAwIDI2NC4yNTYgMzg0SDQ0OHptNjQtNzIuMDY0QTMyMC4xMjggMzIwLjEyOCAwIDAgMSA4MjUuNDcyIDM4NEg4OTZhMzIgMzIgMCAxIDEgMCA2NGgtNjR2MS45MmwtNTYuOTYgNDU0LjAxNkE2NCA2NCAwIDAgMSA3MTEuNTUyIDk2MEgzMTIuNDQ4YTY0IDY0IDAgMCAxLTYzLjQ4OC01Ni4wNjRMMTkyIDQ0OS45MlY0NDhoLTY0YTMyIDMyIDAgMCAxIDAtNjRoNzAuNTI4QTMyMC4zODQgMzIwLjM4NCAwIDAgMSA0NDggMTM1LjA0Vjk2YTk2IDk2IDAgMCAxIDk2LTk2aDEyOGEzMiAzMiAwIDEgMSAwIDY0SDU0NGEzMiAzMiAwIDAgMC0zMiAzMnpNNzQzLjY4IDY0MEgyODAuMzJsMzIuMTI4IDI1NmgzOTkuMTA0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2ljZS1kcmluay52dWVcbnZhciBpY2VfZHJpbmtfZGVmYXVsdCA9IGljZV9kcmlua192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvaWNlLXRlYS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNDIgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE0Miwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNDIsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTQyIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGljZV90ZWFfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTQyKHtcbiAgbmFtZTogXCJJY2VUZWFcIixcbiAgX19uYW1lOiBcImljZS10ZWFcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE0MigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTQyKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNDIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTk3LjY5NiAyNTkuNjQ4YTMyMC4xMjggMzIwLjEyOCAwIDAgMSA2MjguNjA4IDBBOTYgOTYgMCAwIDEgODk2IDM1MnY2NGE5NiA5NiAwIDAgMS03MS42MTYgOTIuODY0bC00OS40MDggMzk1LjA3MkE2NCA2NCAwIDAgMSA3MTEuNDg4IDk2MEgzMTIuNTEyYTY0IDY0IDAgMCAxLTYzLjQ4OC01Ni4wNjRsLTQ5LjQwOC0zOTUuMDcyQTk2IDk2IDAgMCAxIDEyOCA0MTZ2LTY0YTk2IDk2IDAgMCAxIDY5LjY5Ni05Mi4zNTJNMjY0LjA2NCAyNTZoNDk1Ljg3MmEyNTYuMTI4IDI1Ni4xMjggMCAwIDAtNDk1Ljg3MiAwbTQ5NS40MjQgMjU2SDI2NC41MTJsNDggMzg0aDM5OC45NzZ6TTIyNCA0NDhoNTc2YTMyIDMyIDAgMCAwIDMyLTMydi02NGEzMiAzMiAwIDAgMC0zMi0zMkgyMjRhMzIgMzIgMCAwIDAtMzIgMzJ2NjRhMzIgMzIgMCAwIDAgMzIgMzJtMTYwIDE5Mmg2NHY2NGgtNjR6bTE5MiA2NGg2NHY2NGgtNjR6bS0xMjggNjRoNjR2NjRoLTY0em02NC0xOTJoNjR2NjRoLTY0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2ljZS10ZWEudnVlXG52YXIgaWNlX3RlYV9kZWZhdWx0ID0gaWNlX3RlYV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvaW5mby1maWxsZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTQzIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNDMsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTQzLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE0MyB9IGZyb20gXCJ2dWVcIjtcbnZhciBpbmZvX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNDMoe1xuICBuYW1lOiBcIkluZm9GaWxsZWRcIixcbiAgX19uYW1lOiBcImluZm8tZmlsbGVkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxNDMoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE0MyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTQzKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA2NGE0NDggNDQ4IDAgMSAxIDAgODk2LjA2NEE0NDggNDQ4IDAgMCAxIDUxMiA2NG02Ny4yIDI3NS4wNzJjMzMuMjggMCA2MC4yODgtMjMuMTA0IDYwLjI4OC01Ny4zNDRzLTI3LjA3Mi01Ny4zNDQtNjAuMjg4LTU3LjM0NGMtMzMuMjggMC02MC4xNiAyMy4xMDQtNjAuMTYgNTcuMzQ0czI2Ljg4IDU3LjM0NCA2MC4xNiA1Ny4zNDRNNTkwLjkxMiA2OTkuMmMwLTYuODQ4IDIuMzY4LTI0LjY0IDEuMDI0LTM0Ljc1MmwtNTIuNjA4IDYwLjU0NGMtMTAuODggMTEuNDU2LTI0LjUxMiAxOS4zOTItMzAuOTEyIDE3LjI4YTEyLjk5MiAxMi45OTIgMCAwIDEtOC4yNTYtMTQuNzJsODcuNjgtMjc2Ljk5MmM3LjE2OC0zNS4xMzYtMTIuNTQ0LTY3LjItNTQuMzM2LTcxLjI5Ni00NC4wOTYgMC0xMDguOTkyIDQ0LjczNi0xNDguNDggMTAxLjUwNCAwIDYuNzg0LTEuMjggMjMuNjguMDY0IDMzLjc5Mmw1Mi41NDQtNjAuNjA4YzEwLjg4LTExLjMyOCAyMy41NTItMTkuMzI4IDI5Ljk1Mi0xNy4xNTJhMTIuOCAxMi44IDAgMCAxIDcuODA4IDE2LjEyOEwzODguNDggNzI4LjU3NmMtMTAuMDQ4IDMyLjI1NiA4Ljk2IDYzLjg3MiA1NS4wNCA3MS4wNCA2Ny44NCAwIDEwNy45MDQtNDMuNjQ4IDE0Ny40NTYtMTAwLjQxNnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9pbmZvLWZpbGxlZC52dWVcbnZhciBpbmZvX2ZpbGxlZF9kZWZhdWx0ID0gaW5mb19maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2lwaG9uZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNDQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE0NCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNDQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTQ0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGlwaG9uZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNDQoe1xuICBuYW1lOiBcIklwaG9uZVwiLFxuICBfX25hbWU6IFwiaXBob25lXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxNDQoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE0NChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTQ0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTIyNCA3Njh2OTYuMDY0YTY0IDY0IDAgMCAwIDY0IDY0aDQ0OGE2NCA2NCAwIDAgMCA2NC02NFY3Njh6bTAtNjRoNTc2VjE2MGE2NCA2NCAwIDAgMC02NC02NEgyODhhNjQgNjQgMCAwIDAtNjQgNjR6bTMyIDI4OGE5NiA5NiAwIDAgMS05Ni05NlYxMjhhOTYgOTYgMCAwIDEgOTYtOTZoNTEyYTk2IDk2IDAgMCAxIDk2IDk2djc2OGE5NiA5NiAwIDAgMS05NiA5NnptMzA0LTE0NGE0OCA0OCAwIDEgMS05NiAwIDQ4IDQ4IDAgMCAxIDk2IDBcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9pcGhvbmUudnVlXG52YXIgaXBob25lX2RlZmF1bHQgPSBpcGhvbmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2tleS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNDUgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE0NSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNDUsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTQ1IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGtleV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNDUoe1xuICBuYW1lOiBcIktleVwiLFxuICBfX25hbWU6IFwia2V5XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxNDUoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE0NShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTQ1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTQ0OCA0NTYuMDY0Vjk2YTMyIDMyIDAgMCAxIDMyLTMyLjA2NEw2NzIgNjRhMzIgMzIgMCAwIDEgMCA2NEg1MTJ2MTI4aDE2MGEzMiAzMiAwIDAgMSAwIDY0SDUxMnYxMjhhMjU2IDI1NiAwIDEgMS02NCA4LjA2NE01MTIgODk2YTE5MiAxOTIgMCAxIDAgMC0zODQgMTkyIDE5MiAwIDAgMCAwIDM4NFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2tleS52dWVcbnZhciBrZXlfZGVmYXVsdCA9IGtleV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMva25pZmUtZm9yay52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNDYgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE0Niwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNDYsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTQ2IH0gZnJvbSBcInZ1ZVwiO1xudmFyIGtuaWZlX2ZvcmtfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTQ2KHtcbiAgbmFtZTogXCJLbmlmZUZvcmtcIixcbiAgX19uYW1lOiBcImtuaWZlLWZvcmtcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE0NigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTQ2KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNDYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjU2IDQxMC41NlY5NmEzMiAzMiAwIDAgMSA2NCAwdjMxNC41NkE5NiA5NiAwIDAgMCAzODQgMzIwVjk2YTMyIDMyIDAgMCAxIDY0IDB2MjI0YTE2MCAxNjAgMCAwIDEtMTI4IDE1Ni44VjkyOGEzMiAzMiAwIDEgMS02NCAwVjQ3Ni44QTE2MCAxNjAgMCAwIDEgMTI4IDMyMFY5NmEzMiAzMiAwIDAgMSA2NCAwdjIyNGE5NiA5NiAwIDAgMCA2NCA5MC41Nm0zODQtMjUwLjI0VjU0NGgxMjYuNzJjLTMuMzI4LTc4LjcyLTEyLjkyOC0xNDcuOTY4LTI4LjYwOC0yMDcuNzQ0LTE0LjMzNi01NC41MjgtNDYuODQ4LTExMy4zNDQtOTguMTEyLTE3NS44NzJ6TTY0MCA2MDh2MzIwYTMyIDMyIDAgMSAxLTY0IDBWNjRoNjRjODUuMzEyIDg5LjQ3MiAxMzguNjg4IDE3NC44NDggMTYwIDI1NiAyMS4zMTIgODEuMTUyIDMyIDE3Ny4xNTIgMzIgMjg4elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2tuaWZlLWZvcmsudnVlXG52YXIga25pZmVfZm9ya19kZWZhdWx0ID0ga25pZmVfZm9ya192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvbGlnaHRuaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDE0NyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTQ3LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE0NywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxNDcgfSBmcm9tIFwidnVlXCI7XG52YXIgbGlnaHRuaW5nX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE0Nyh7XG4gIG5hbWU6IFwiTGlnaHRuaW5nXCIsXG4gIF9fbmFtZTogXCJsaWdodG5pbmdcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE0NygpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTQ3KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNDcoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjg4IDY3MS4zNnY2NC4xMjhBMjM5LjgwOCAyMzkuODA4IDAgMCAxIDYzLjc0NCA0OTYuMTkyYTI0MC4zMiAyNDAuMzIgMCAwIDEgMTk5LjQ4OC0yMzYuOCAyNTYuMTI4IDI1Ni4xMjggMCAwIDEgNDg3Ljg3Mi0zMC45NzZBMjU2LjA2NCAyNTYuMDY0IDAgMCAxIDczNiA3MzQuMDE2di02NC43NjhhMTkyIDE5MiAwIDAgMCAzLjMyOC0zNzcuOTJsLTM1LjItNi41OTItMTIuOC0zMy40MDhhMTkyLjA2NCAxOTIuMDY0IDAgMCAwLTM2NS45NTIgMjMuMjMybC05LjkyIDQwLjg5Ni00MS40NzIgNy4wNGExNzYuMzIgMTc2LjMyIDAgMCAwLTE0Ni4yNCAxNzMuNTY4YzAgOTEuOTY4IDcwLjQ2NCAxNjcuMzYgMTYwLjI1NiAxNzUuMjMyelwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNDcoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNDE2IDczNmEzMiAzMiAwIDAgMS0yNy43NzYtNDcuODcybDEyOC0yMjRhMzIgMzIgMCAxIDEgNTUuNTUyIDMxLjc0NEw0NzEuMTY4IDY3Mkg2MDhhMzIgMzIgMCAwIDEgMjcuNzc2IDQ3Ljg3MmwtMTI4IDIyNGEzMiAzMiAwIDEgMS01NS42OC0zMS43NDRMNTUyLjk2IDczNnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9saWdodG5pbmcudnVlXG52YXIgbGlnaHRuaW5nX2RlZmF1bHQgPSBsaWdodG5pbmdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2xpbmsudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTQ4IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNDgsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTQ4LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE0OCB9IGZyb20gXCJ2dWVcIjtcbnZhciBsaW5rX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE0OCh7XG4gIG5hbWU6IFwiTGlua1wiLFxuICBfX25hbWU6IFwibGlua1wiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTQ4KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNDgoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE0OChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk03MTUuNjQ4IDYyNS4xNTIgNjcwLjQgNTc5LjkwNGw5MC40OTYtOTAuNTZjNzUuMDA4LTc0Ljk0NCA4NS4xMi0xODYuMzY4IDIyLjY1Ni0yNDguODk2LTYyLjUyOC02Mi40NjQtMTczLjk1Mi01Mi4zNTItMjQ4Ljk2IDIyLjY1Nkw0NDQuMTYgMzUzLjZsLTQ1LjI0OC00NS4yNDggOTAuNDk2LTkwLjQ5NmMxMDAuMDMyLTk5Ljk2OCAyNTEuOTY4LTExMC4wOCAzMzkuNDU2LTIyLjY1NiA4Ny40ODggODcuNDg4IDc3LjMxMiAyMzkuNDI0LTIyLjY1NiAzMzkuNDU2bC05MC40OTYgOTAuNDk2em0tOTAuNDk2IDkwLjQ5Ni05MC40OTYgOTAuNDk2QzQzNC42MjQgOTA2LjExMiAyODIuNjg4IDkxNi4yMjQgMTk1LjIgODI4LjhjLTg3LjQ4OC04Ny40ODgtNzcuMzEyLTIzOS40MjQgMjIuNjU2LTMzOS40NTZsOTAuNDk2LTkwLjQ5NiA0NS4yNDggNDUuMjQ4LTkwLjQ5NiA5MC41NmMtNzUuMDA4IDc0Ljk0NC04NS4xMiAxODYuMzY4LTIyLjY1NiAyNDguODk2IDYyLjUyOCA2Mi40NjQgMTczLjk1MiA1Mi4zNTIgMjQ4Ljk2LTIyLjY1Nmw5MC40OTYtOTAuNDk2em0wLTM2Mi4wNDggNDUuMjQ4IDQ1LjI0OEwzOTguODQ4IDY3MC40IDM1My42IDYyNS4xNTJ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvbGluay52dWVcbnZhciBsaW5rX2RlZmF1bHQgPSBsaW5rX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9saXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDE0OSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTQ5LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE0OSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxNDkgfSBmcm9tIFwidnVlXCI7XG52YXIgbGlzdF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNDkoe1xuICBuYW1lOiBcIkxpc3RcIixcbiAgX19uYW1lOiBcImxpc3RcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE0OSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTQ5KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNDkoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNzA0IDE5MmgxNjB2NzM2SDE2MFYxOTJoMTYwdjY0aDM4NHpNMjg4IDUxMmg0NDh2LTY0SDI4OHptMCAyNTZoNDQ4di02NEgyODh6bTk2LTU3NlY5NmgyNTZ2OTZ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvbGlzdC52dWVcbnZhciBsaXN0X2RlZmF1bHQgPSBsaXN0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9sb2FkaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDE1MCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTUwLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE1MCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxNTAgfSBmcm9tIFwidnVlXCI7XG52YXIgbG9hZGluZ192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNTAoe1xuICBuYW1lOiBcIkxvYWRpbmdcIixcbiAgX19uYW1lOiBcImxvYWRpbmdcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE1MCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTUwKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNTAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDY0YTMyIDMyIDAgMCAxIDMyIDMydjE5MmEzMiAzMiAwIDAgMS02NCAwVjk2YTMyIDMyIDAgMCAxIDMyLTMybTAgNjQwYTMyIDMyIDAgMCAxIDMyIDMydjE5MmEzMiAzMiAwIDEgMS02NCAwVjczNmEzMiAzMiAwIDAgMSAzMi0zMm00NDgtMTkyYTMyIDMyIDAgMCAxLTMyIDMySDczNmEzMiAzMiAwIDEgMSAwLTY0aDE5MmEzMiAzMiAwIDAgMSAzMiAzMm0tNjQwIDBhMzIgMzIgMCAwIDEtMzIgMzJIOTZhMzIgMzIgMCAwIDEgMC02NGgxOTJhMzIgMzIgMCAwIDEgMzIgMzJNMTk1LjIgMTk1LjJhMzIgMzIgMCAwIDEgNDUuMjQ4IDBMMzc2LjMyIDMzMS4wMDhhMzIgMzIgMCAwIDEtNDUuMjQ4IDQ1LjI0OEwxOTUuMiAyNDAuNDQ4YTMyIDMyIDAgMCAxIDAtNDUuMjQ4em00NTIuNTQ0IDQ1Mi41NDRhMzIgMzIgMCAwIDEgNDUuMjQ4IDBMODI4LjggNzgzLjU1MmEzMiAzMiAwIDAgMS00NS4yNDggNDUuMjQ4TDY0Ny43NDQgNjkyLjk5MmEzMiAzMiAwIDAgMSAwLTQ1LjI0OHpNODI4LjggMTk1LjI2NGEzMiAzMiAwIDAgMSAwIDQ1LjE4NEw2OTIuOTkyIDM3Ni4zMmEzMiAzMiAwIDAgMS00NS4yNDgtNDUuMjQ4bDEzNS44MDgtMTM1LjgwOGEzMiAzMiAwIDAgMSA0NS4yNDggMG0tNDUyLjU0NCA0NTIuNDhhMzIgMzIgMCAwIDEgMCA0NS4yNDhMMjQwLjQ0OCA4MjguOGEzMiAzMiAwIDAgMS00NS4yNDgtNDUuMjQ4bDEzNS44MDgtMTM1LjgwOGEzMiAzMiAwIDAgMSA0NS4yNDggMHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9sb2FkaW5nLnZ1ZVxudmFyIGxvYWRpbmdfZGVmYXVsdCA9IGxvYWRpbmdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2xvY2F0aW9uLWZpbGxlZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNTEgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE1MSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNTEsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTUxIH0gZnJvbSBcInZ1ZVwiO1xudmFyIGxvY2F0aW9uX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNTEoe1xuICBuYW1lOiBcIkxvY2F0aW9uRmlsbGVkXCIsXG4gIF9fbmFtZTogXCJsb2NhdGlvbi1maWxsZWRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE1MSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTUxKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNTEoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDkyOGMyMy45MzYgMCAxMTcuNTA0LTY4LjM1MiAxOTIuMDY0LTE1My4xNTJDODAzLjQ1NiA2NjEuODg4IDg2NCA1MzUuODA4IDg2NCA0MTZjMC0xODkuNjMyLTE1NS44NC0zMjAtMzUyLTMyMFMxNjAgMjI2LjM2OCAxNjAgNDE2YzAgMTIwLjMyIDYwLjU0NCAyNDYuNCAxNTkuOTM2IDM1OS4yMzJDMzk0LjQzMiA4NTkuODQgNDg4IDkyOCA1MTIgOTI4bTAtNDM1LjJhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAwIDAgMCAxMjhtMCAxNDAuOGEyMDQuOCAyMDQuOCAwIDEgMSAwLTQwOS42IDIwNC44IDIwNC44IDAgMCAxIDAgNDA5LjZcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9sb2NhdGlvbi1maWxsZWQudnVlXG52YXIgbG9jYXRpb25fZmlsbGVkX2RlZmF1bHQgPSBsb2NhdGlvbl9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2xvY2F0aW9uLWluZm9ybWF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDE1MiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTUyLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE1MiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxNTIgfSBmcm9tIFwidnVlXCI7XG52YXIgbG9jYXRpb25faW5mb3JtYXRpb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTUyKHtcbiAgbmFtZTogXCJMb2NhdGlvbkluZm9ybWF0aW9uXCIsXG4gIF9fbmFtZTogXCJsb2NhdGlvbi1pbmZvcm1hdGlvblwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTUyKCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNTIoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE1MihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0yODggODk2aDQ0OHEzMiAwIDMyIDMydC0zMiAzMkgyODhxLTMyIDAtMzItMzJ0MzItMzJcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTUyKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTgwMCA0MTZhMjg4IDI4OCAwIDEgMC01NzYgMGMwIDExOC4xNDQgOTQuNTI4IDI3Mi4xMjggMjg4IDQ1Ni41NzZDNzA1LjQ3MiA2ODguMTI4IDgwMCA1MzQuMTQ0IDgwMCA0MTZNNTEyIDk2MEMyNzcuMzEyIDc0Ni42ODggMTYwIDU2NS4zMTIgMTYwIDQxNmEzNTIgMzUyIDAgMCAxIDcwNCAwYzAgMTQ5LjMxMi0xMTcuMzEyIDMzMC42ODgtMzUyIDU0NFwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNTIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDUxMmE5NiA5NiAwIDEgMCAwLTE5MiA5NiA5NiAwIDAgMCAwIDE5Mm0wIDY0YTE2MCAxNjAgMCAxIDEgMC0zMjAgMTYwIDE2MCAwIDAgMSAwIDMyMFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2xvY2F0aW9uLWluZm9ybWF0aW9uLnZ1ZVxudmFyIGxvY2F0aW9uX2luZm9ybWF0aW9uX2RlZmF1bHQgPSBsb2NhdGlvbl9pbmZvcm1hdGlvbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvbG9jYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTUzIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNTMsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTUzLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE1MyB9IGZyb20gXCJ2dWVcIjtcbnZhciBsb2NhdGlvbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNTMoe1xuICBuYW1lOiBcIkxvY2F0aW9uXCIsXG4gIF9fbmFtZTogXCJsb2NhdGlvblwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTUzKCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNTMoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE1MyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk04MDAgNDE2YTI4OCAyODggMCAxIDAtNTc2IDBjMCAxMTguMTQ0IDk0LjUyOCAyNzIuMTI4IDI4OCA0NTYuNTc2QzcwNS40NzIgNjg4LjEyOCA4MDAgNTM0LjE0NCA4MDAgNDE2TTUxMiA5NjBDMjc3LjMxMiA3NDYuNjg4IDE2MCA1NjUuMzEyIDE2MCA0MTZhMzUyIDM1MiAwIDAgMSA3MDQgMGMwIDE0OS4zMTItMTE3LjMxMiAzMzAuNjg4LTM1MiA1NDRcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTUzKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA1MTJhOTYgOTYgMCAxIDAgMC0xOTIgOTYgOTYgMCAwIDAgMCAxOTJtMCA2NGExNjAgMTYwIDAgMSAxIDAtMzIwIDE2MCAxNjAgMCAwIDEgMCAzMjBcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9sb2NhdGlvbi52dWVcbnZhciBsb2NhdGlvbl9kZWZhdWx0ID0gbG9jYXRpb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL2xvY2sudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTU0IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNTQsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTU0LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE1NCB9IGZyb20gXCJ2dWVcIjtcbnZhciBsb2NrX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE1NCh7XG4gIG5hbWU6IFwiTG9ja1wiLFxuICBfX25hbWU6IFwibG9ja1wiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTU0KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNTQoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE1NChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0yMjQgNDQ4YTMyIDMyIDAgMCAwLTMyIDMydjM4NGEzMiAzMiAwIDAgMCAzMiAzMmg1NzZhMzIgMzIgMCAwIDAgMzItMzJWNDgwYTMyIDMyIDAgMCAwLTMyLTMyem0wLTY0aDU3NmE5NiA5NiAwIDAgMSA5NiA5NnYzODRhOTYgOTYgMCAwIDEtOTYgOTZIMjI0YTk2IDk2IDAgMCAxLTk2LTk2VjQ4MGE5NiA5NiAwIDAgMSA5Ni05NlwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNTQoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDU0NGEzMiAzMiAwIDAgMSAzMiAzMnYxOTJhMzIgMzIgMCAxIDEtNjQgMFY1NzZhMzIgMzIgMCAwIDEgMzItMzJtMTkyLTE2MHYtNjRhMTkyIDE5MiAwIDEgMC0zODQgMHY2NHpNNTEyIDY0YTI1NiAyNTYgMCAwIDEgMjU2IDI1NnYxMjhIMjU2VjMyMEEyNTYgMjU2IDAgMCAxIDUxMiA2NFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2xvY2sudnVlXG52YXIgbG9ja19kZWZhdWx0ID0gbG9ja192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvbG9sbGlwb3AudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTU1IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNTUsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTU1LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE1NSB9IGZyb20gXCJ2dWVcIjtcbnZhciBsb2xsaXBvcF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNTUoe1xuICBuYW1lOiBcIkxvbGxpcG9wXCIsXG4gIF9fbmFtZTogXCJsb2xsaXBvcFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTU1KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNTUoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE1NShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01MTMuMjggNDQ4YTY0IDY0IDAgMSAxIDc2LjU0NCA0OS43MjhBOTYgOTYgMCAwIDAgNzY4IDQ0OGg2NGExNjAgMTYwIDAgMCAxLTMyMCAwem0tMTI2Ljk3Ni0yOS42OTZhMjU2IDI1NiAwIDEgMCA0My41Mi0xODAuNDhBMjU2IDI1NiAwIDAgMSA4MzIgNDQ4aC02NGExOTIgMTkyIDAgMCAwLTM4MS42OTYtMjkuNjk2bTEwNS42NjQgMjQ5LjQ3MkwyODUuNjk2IDg3NC4wNDhhOTYgOTYgMCAwIDEtMTM1LjY4LTEzNS43NDRsMjA2LjIwOC0yMDYuMjcyYTMyMCAzMjAgMCAxIDEgMTM1Ljc0NCAxMzUuNzQ0em0tNTQuNDY0LTM2LjAzMmEzMjEuOTIgMzIxLjkyIDAgMCAxLTQ1LjI0OC00NS4yNDhMMTk1LjIgNzgzLjU1MmEzMiAzMiAwIDEgMCA0NS4yNDggNDUuMjQ4bDE5Ny4wNTYtMTk3LjEyelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL2xvbGxpcG9wLnZ1ZVxudmFyIGxvbGxpcG9wX2RlZmF1bHQgPSBsb2xsaXBvcF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvbWFnaWMtc3RpY2sudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTU2IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNTYsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTU2LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE1NiB9IGZyb20gXCJ2dWVcIjtcbnZhciBtYWdpY19zdGlja192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNTYoe1xuICBuYW1lOiBcIk1hZ2ljU3RpY2tcIixcbiAgX19uYW1lOiBcIm1hZ2ljLXN0aWNrXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxNTYoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE1NihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTU2KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA2NGg2NHYxOTJoLTY0em0wIDU3Nmg2NHYxOTJoLTY0ek0xNjAgNDgwdi02NGgxOTJ2NjR6bTU3NiAwdi02NGgxOTJ2NjR6TTI0OS44NTYgMTk5LjA0bDQ1LjI0OC00NS4xODRMNDMwLjg0OCAyODkuNiAzODUuNiAzMzQuODQ4IDI0OS44NTYgMTk5LjEwNHpNNjU3LjE1MiA2MDYuNGw0NS4yNDgtNDUuMjQ4IDEzNS43NDQgMTM1Ljc0NC00NS4yNDggNDUuMjQ4ek0xMTQuMDQ4IDkyMy4yIDY4LjggODc3Ljk1MmwzMTYuOC0zMTYuOCA0NS4yNDggNDUuMjQ4ek03MDIuNCAzMzQuODQ4IDY1Ny4xNTIgMjg5LjZsMTM1Ljc0NC0xMzUuNzQ0IDQ1LjI0OCA0NS4yNDh6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvbWFnaWMtc3RpY2sudnVlXG52YXIgbWFnaWNfc3RpY2tfZGVmYXVsdCA9IG1hZ2ljX3N0aWNrX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9tYWduZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTU3IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNTcsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTU3LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE1NyB9IGZyb20gXCJ2dWVcIjtcbnZhciBtYWduZXRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTU3KHtcbiAgbmFtZTogXCJNYWduZXRcIixcbiAgX19uYW1lOiBcIm1hZ25ldFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTU3KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNTcoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE1NyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk04MzIgMzIwVjE5Mkg3MDR2MzIwYTE5MiAxOTIgMCAxIDEtMzg0IDBWMTkySDE5MnYxMjhoMTI4djY0SDE5MnYxMjhhMzIwIDMyMCAwIDAgMCA2NDAgMFYzODRINzA0di02NHpNNjQwIDUxMlYxMjhoMjU2djM4NGEzODQgMzg0IDAgMSAxLTc2OCAwVjEyOGgyNTZ2Mzg0YTEyOCAxMjggMCAxIDAgMjU2IDBcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9tYWduZXQudnVlXG52YXIgbWFnbmV0X2RlZmF1bHQgPSBtYWduZXRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL21hbGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTU4IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNTgsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTU4LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE1OCB9IGZyb20gXCJ2dWVcIjtcbnZhciBtYWxlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE1OCh7XG4gIG5hbWU6IFwiTWFsZVwiLFxuICBfX25hbWU6IFwibWFsZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTU4KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNTgoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE1OChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zOTkuNSA4NDkuNWEyMjUgMjI1IDAgMSAwIDAtNDUwIDIyNSAyMjUgMCAwIDAgMCA0NTBtMCA1Ni4yNWEyODEuMjUgMjgxLjI1IDAgMSAxIDAtNTYyLjUgMjgxLjI1IDI4MS4yNSAwIDAgMSAwIDU2Mi41bTI1My4xMjUtNzg3LjVoMjI1cTI4LjEyNSAwIDI4LjEyNSAyOC4xMjVUODc3LjYyNSAxNzQuNWgtMjI1cS0yOC4xMjUgMC0yOC4xMjUtMjguMTI1dDI4LjEyNS0yOC4xMjVcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTU4KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTg3Ny42MjUgMTE4LjI1cTI4LjEyNSAwIDI4LjEyNSAyOC4xMjV2MjI1cTAgMjguMTI1LTI4LjEyNSAyOC4xMjVUODQ5LjUgMzcxLjM3NXYtMjI1cTAtMjguMTI1IDI4LjEyNS0yOC4xMjVcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTU4KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTYwNC44MTMgNDU4LjkgNTY1LjEgNDE5LjEzMWwyOTIuNjEzLTI5Mi42NjggMzkuODI1IDM5LjgyNHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9tYWxlLnZ1ZVxudmFyIG1hbGVfZGVmYXVsdCA9IG1hbGVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL21hbmFnZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTU5IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNTksIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTU5LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE1OSB9IGZyb20gXCJ2dWVcIjtcbnZhciBtYW5hZ2VtZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE1OSh7XG4gIG5hbWU6IFwiTWFuYWdlbWVudFwiLFxuICBfX25hbWU6IFwibWFuYWdlbWVudFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTU5KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNTkoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE1OShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01NzYgMTI4djI4OGw5Ni05NiA5NiA5NlYxMjhoMTI4djc2OEgzMjBWMTI4em0tNDQ4IDBoMTI4djc2OEgxMjh6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvbWFuYWdlbWVudC52dWVcbnZhciBtYW5hZ2VtZW50X2RlZmF1bHQgPSBtYW5hZ2VtZW50X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9tYXAtbG9jYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTYwIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNjAsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTYwLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE2MCB9IGZyb20gXCJ2dWVcIjtcbnZhciBtYXBfbG9jYXRpb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTYwKHtcbiAgbmFtZTogXCJNYXBMb2NhdGlvblwiLFxuICBfX25hbWU6IFwibWFwLWxvY2F0aW9uXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxNjAoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE2MChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTYwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTgwMCA0MTZhMjg4IDI4OCAwIDEgMC01NzYgMGMwIDExOC4xNDQgOTQuNTI4IDI3Mi4xMjggMjg4IDQ1Ni41NzZDNzA1LjQ3MiA2ODguMTI4IDgwMCA1MzQuMTQ0IDgwMCA0MTZNNTEyIDk2MEMyNzcuMzEyIDc0Ni42ODggMTYwIDU2NS4zMTIgMTYwIDQxNmEzNTIgMzUyIDAgMCAxIDcwNCAwYzAgMTQ5LjMxMi0xMTcuMzEyIDMzMC42ODgtMzUyIDU0NFwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNjAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDQ0OGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDAgMCAwIDEyOG0wIDY0YTEyOCAxMjggMCAxIDEgMC0yNTYgMTI4IDEyOCAwIDAgMSAwIDI1Nm0zNDUuNiAxOTJMOTYwIDk2MEg2NzJ2LTY0SDM1MnY2NEg2NGwxMDIuNC0yNTZ6bS02OC45MjggMEgyMzUuMzI4bC03Ni44IDE5Mmg3MDYuOTQ0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL21hcC1sb2NhdGlvbi52dWVcbnZhciBtYXBfbG9jYXRpb25fZGVmYXVsdCA9IG1hcF9sb2NhdGlvbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvbWVkYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTYxIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNjEsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTYxLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE2MSB9IGZyb20gXCJ2dWVcIjtcbnZhciBtZWRhbF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNjEoe1xuICBuYW1lOiBcIk1lZGFsXCIsXG4gIF9fbmFtZTogXCJtZWRhbFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTYxKCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNjEoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE2MShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01MTIgODk2YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDAgMCAwIDUxMm0wIDY0YTMyMCAzMjAgMCAxIDEgMC02NDAgMzIwIDMyMCAwIDAgMSAwIDY0MFwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNjEoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTc2IDEyOEg0NDh2MjAwYTI4Ni43MiAyODYuNzIgMCAwIDEgNjQtOGMxOS41MiAwIDQwLjgzMiAyLjY4OCA2NCA4em02NCAwdjIxOS42NDhjMjQuNDQ4IDkuMDg4IDUwLjU2IDIwLjQxNiA3OC40IDMzLjkyTDc1Ny40NCAxMjh6bS0yNTYgMEgyNjYuNjI0bDM5LjA0IDI1My41NjhjMjcuODQtMTMuNTA0IDUzLjg4OC0yNC44MzIgNzguMzM2LTMzLjkyVjEyOHpNMjI5LjMxMiA2NGg1NjUuMzc2YTMyIDMyIDAgMCAxIDMxLjYxNiAzNi44NjRMNzY4IDQ4MGMtMTEzLjc5Mi02NC0xOTkuMTA0LTk2LTI1Ni05Ni01Ni44OTYgMC0xNDIuMjA4IDMyLTI1NiA5NmwtNTguMzA0LTM3OS4xMzZBMzIgMzIgMCAwIDEgMjI5LjMxMiA2NFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL21lZGFsLnZ1ZVxudmFyIG1lZGFsX2RlZmF1bHQgPSBtZWRhbF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvbWVtby52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNjIgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE2Miwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNjIsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTYyIH0gZnJvbSBcInZ1ZVwiO1xudmFyIG1lbW9fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTYyKHtcbiAgbmFtZTogXCJNZW1vXCIsXG4gIF9fbmFtZTogXCJtZW1vXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxNjIoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE2MihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgXCJ4bWw6c3BhY2VcIjogXCJwcmVzZXJ2ZVwiLFxuICAgICAgc3R5bGU6IHsgXCJlbmFibGUtYmFja2dyb3VuZFwiOiBcIm5ldyAwIDAgMTAyNCAxMDI0XCIgfSxcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE2MihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00ODAgMzIwaDE5MmMyMS4zMyAwIDMyLTEwLjY3IDMyLTMycy0xMC42Ny0zMi0zMi0zMkg0ODBjLTIxLjMzIDAtMzIgMTAuNjctMzIgMzJzMTAuNjcgMzIgMzIgMzJcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTYyKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTg4Ny4wMSA3Mi45OUM4ODEuMDEgNjcgODczLjM0IDY0IDg2NCA2NEgxNjBjLTkuMzUgMC0xNy4wMiAzLTIzLjAxIDguOTlDMTMxIDc4Ljk5IDEyOCA4Ni42NiAxMjggOTZ2ODMyYzAgOS4zNSAyLjk5IDE3LjAyIDguOTkgMjMuMDFTMTUwLjY2IDk2MCAxNjAgOTYwaDcwNGM5LjM1IDAgMTcuMDItMi45OSAyMy4wMS04Ljk5Uzg5NiA5MzcuMzQgODk2IDkyOFY5NmMwLTkuMzUtMy0xNy4wMi04Ljk5LTIzLjAxTTE5MiA4OTZWMTI4aDk2djc2OHptNjQwIDBIMzUyVjEyOGg0ODB6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE2MihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00ODAgNTEyaDE5MmMyMS4zMyAwIDMyLTEwLjY3IDMyLTMycy0xMC42Ny0zMi0zMi0zMkg0ODBjLTIxLjMzIDAtMzIgMTAuNjctMzIgMzJzMTAuNjcgMzIgMzIgMzJtMCAxOTJoMTkyYzIxLjMzIDAgMzItMTAuNjcgMzItMzJzLTEwLjY3LTMyLTMyLTMySDQ4MGMtMjEuMzMgMC0zMiAxMC42Ny0zMiAzMnMxMC42NyAzMiAzMiAzMlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL21lbW8udnVlXG52YXIgbWVtb19kZWZhdWx0ID0gbWVtb192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvbWVudS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNjMgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE2Mywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNjMsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTYzIH0gZnJvbSBcInZ1ZVwiO1xudmFyIG1lbnVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTYzKHtcbiAgbmFtZTogXCJNZW51XCIsXG4gIF9fbmFtZTogXCJtZW51XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxNjMoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE2MyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTYzKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTE2MCA0NDhhMzIgMzIgMCAwIDEtMzItMzJWMTYwLjA2NGEzMiAzMiAwIDAgMSAzMi0zMmgyNTZhMzIgMzIgMCAwIDEgMzIgMzJWNDE2YTMyIDMyIDAgMCAxLTMyIDMyem00NDggMGEzMiAzMiAwIDAgMS0zMi0zMlYxNjAuMDY0YTMyIDMyIDAgMCAxIDMyLTMyaDI1NS45MzZhMzIgMzIgMCAwIDEgMzIgMzJWNDE2YTMyIDMyIDAgMCAxLTMyIDMyek0xNjAgODk2YTMyIDMyIDAgMCAxLTMyLTMyVjYwOGEzMiAzMiAwIDAgMSAzMi0zMmgyNTZhMzIgMzIgMCAwIDEgMzIgMzJ2MjU2YTMyIDMyIDAgMCAxLTMyIDMyem00NDggMGEzMiAzMiAwIDAgMS0zMi0zMlY2MDhhMzIgMzIgMCAwIDEgMzItMzJoMjU1LjkzNmEzMiAzMiAwIDAgMSAzMiAzMnYyNTZhMzIgMzIgMCAwIDEtMzIgMzJ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvbWVudS52dWVcbnZhciBtZW51X2RlZmF1bHQgPSBtZW51X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9tZXNzYWdlLWJveC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNjQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE2NCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNjQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTY0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIG1lc3NhZ2VfYm94X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE2NCh7XG4gIG5hbWU6IFwiTWVzc2FnZUJveFwiLFxuICBfX25hbWU6IFwibWVzc2FnZS1ib3hcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE2NCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTY0KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNjQoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjg4IDM4NGg0NDh2NjRIMjg4em05Ni0xMjhoMjU2djY0SDM4NHpNMTMxLjQ1NiA1MTJIMzg0djEyOGgyNTZWNTEyaDI1Mi41NDRMNzIxLjg1NiAxOTJIMzAyLjE0NHpNODk2IDU3Nkg3MDR2MTI4SDMyMFY1NzZIMTI4djI1Nmg3Njh6TTI3NS43NzYgMTI4aDQ3Mi40NDhhMzIgMzIgMCAwIDEgMjguNjA4IDE3LjY2NGwxNzkuODQgMzU5LjU1MkEzMiAzMiAwIDAgMSA5NjAgNTE5LjU1MlY4NjRhMzIgMzIgMCAwIDEtMzIgMzJIOTZhMzIgMzIgMCAwIDEtMzItMzJWNTE5LjU1MmEzMiAzMiAwIDAgMSAzLjM5Mi0xNC4zMzZsMTc5Ljc3Ni0zNTkuNTUyQTMyIDMyIDAgMCAxIDI3NS43NzYgMTI4elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL21lc3NhZ2UtYm94LnZ1ZVxudmFyIG1lc3NhZ2VfYm94X2RlZmF1bHQgPSBtZXNzYWdlX2JveF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvbWVzc2FnZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNjUgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE2NSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNjUsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTY1IH0gZnJvbSBcInZ1ZVwiO1xudmFyIG1lc3NhZ2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTY1KHtcbiAgbmFtZTogXCJNZXNzYWdlXCIsXG4gIF9fbmFtZTogXCJtZXNzYWdlXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxNjUoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE2NShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTY1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTEyOCAyMjR2NTEyYTY0IDY0IDAgMCAwIDY0IDY0aDY0MGE2NCA2NCAwIDAgMCA2NC02NFYyMjR6bTAtNjRoNzY4YTY0IDY0IDAgMCAxIDY0IDY0djUxMmExMjggMTI4IDAgMCAxLTEyOCAxMjhIMTkyQTEyOCAxMjggMCAwIDEgNjQgNzM2VjIyNGE2NCA2NCAwIDAgMSA2NC02NFwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNjUoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNOTA0IDIyNCA2NTYuNTEyIDUwNi44OGExOTIgMTkyIDAgMCAxLTI4OS4wMjQgMEwxMjAgMjI0em0tNjk4Ljk0NCAwIDIxMC41NiAyNDAuNzA0YTEyOCAxMjggMCAwIDAgMTkyLjcwNCAwTDgxOC45NDQgMjI0SDIwNS4wNTZcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9tZXNzYWdlLnZ1ZVxudmFyIG1lc3NhZ2VfZGVmYXVsdCA9IG1lc3NhZ2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL21pYy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNjYgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE2Niwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNjYsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTY2IH0gZnJvbSBcInZ1ZVwiO1xudmFyIG1pY192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNjYoe1xuICBuYW1lOiBcIk1pY1wiLFxuICBfX25hbWU6IFwibWljXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxNjYoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE2NihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTY2KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTQ4MCA3MDRoMTYwYTY0IDY0IDAgMCAwIDY0LTY0di0zMmgtOTZhMzIgMzIgMCAwIDEgMC02NGg5NnYtOTZoLTk2YTMyIDMyIDAgMCAxIDAtNjRoOTZ2LTk2aC05NmEzMiAzMiAwIDAgMSAwLTY0aDk2di0zMmE2NCA2NCAwIDAgMC02NC02NEgzODRhNjQgNjQgMCAwIDAtNjQgNjR2MzJoOTZhMzIgMzIgMCAwIDEgMCA2NGgtOTZ2OTZoOTZhMzIgMzIgMCAwIDEgMCA2NGgtOTZ2OTZoOTZhMzIgMzIgMCAwIDEgMCA2NGgtOTZ2MzJhNjQgNjQgMCAwIDAgNjQgNjR6bTY0IDY0djEyOGgxOTJhMzIgMzIgMCAxIDEgMCA2NEgyODhhMzIgMzIgMCAxIDEgMC02NGgxOTJWNzY4aC05NmExMjggMTI4IDAgMCAxLTEyOC0xMjhWMTkyQTEyOCAxMjggMCAwIDEgMzg0IDY0aDI1NmExMjggMTI4IDAgMCAxIDEyOCAxMjh2NDQ4YTEyOCAxMjggMCAwIDEtMTI4IDEyOHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9taWMudnVlXG52YXIgbWljX2RlZmF1bHQgPSBtaWNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL21pY3JvcGhvbmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTY3IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNjcsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTY3LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE2NyB9IGZyb20gXCJ2dWVcIjtcbnZhciBtaWNyb3Bob25lX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE2Nyh7XG4gIG5hbWU6IFwiTWljcm9waG9uZVwiLFxuICBfX25hbWU6IFwibWljcm9waG9uZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTY3KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNjcoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE2NyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01MTIgMTI4YTEyOCAxMjggMCAwIDAtMTI4IDEyOHYyNTZhMTI4IDEyOCAwIDEgMCAyNTYgMFYyNTZhMTI4IDEyOCAwIDAgMC0xMjgtMTI4bTAtNjRhMTkyIDE5MiAwIDAgMSAxOTIgMTkydjI1NmExOTIgMTkyIDAgMSAxLTM4NCAwVjI1NkExOTIgMTkyIDAgMCAxIDUxMiA2NG0tMzIgODMydi02NGEyODggMjg4IDAgMCAxLTI4OC0yODh2LTMyYTMyIDMyIDAgMCAxIDY0IDB2MzJhMjI0IDIyNCAwIDAgMCAyMjQgMjI0aDY0YTIyNCAyMjQgMCAwIDAgMjI0LTIyNHYtMzJhMzIgMzIgMCAxIDEgNjQgMHYzMmEyODggMjg4IDAgMCAxLTI4OCAyODh2NjRoNjRhMzIgMzIgMCAxIDEgMCA2NEg0MTZhMzIgMzIgMCAxIDEgMC02NHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9taWNyb3Bob25lLnZ1ZVxudmFyIG1pY3JvcGhvbmVfZGVmYXVsdCA9IG1pY3JvcGhvbmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL21pbGstdGVhLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDE2OCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTY4LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE2OCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxNjggfSBmcm9tIFwidnVlXCI7XG52YXIgbWlsa190ZWFfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTY4KHtcbiAgbmFtZTogXCJNaWxrVGVhXCIsXG4gIF9fbmFtZTogXCJtaWxrLXRlYVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTY4KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNjgoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE2OChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00MTYgMTI4Vjk2YTk2IDk2IDAgMCAxIDk2LTk2aDEyOGEzMiAzMiAwIDEgMSAwIDY0SDUxMmEzMiAzMiAwIDAgMC0zMiAzMnYzMmgzMjBhOTYgOTYgMCAwIDEgMTEuNzEyIDE5MS4yOTZsLTM5LjY4IDU4MS4wNTZBNjQgNjQgMCAwIDEgNzA4LjIyNCA5NjBIMzE1Ljc3NmE2NCA2NCAwIDAgMS02My44NzItNTkuNjQ4bC0zOS42MTYtNTgxLjA1NkE5NiA5NiAwIDAgMSAyMjQgMTI4ek0yNzYuNDggMzIwbDM5LjI5NiA1NzZoMzkyLjQ0OGw0LjgtNzAuNzg0YTIyNC4wNjQgMjI0LjA2NCAwIDAgMSAzMC4wMTYtNDM5LjgwOEw3NDcuNTIgMzIwek0yMjQgMjU2aDU3NmEzMiAzMiAwIDEgMCAwLTY0SDIyNGEzMiAzMiAwIDAgMCAwIDY0bTQ5My40NCA1MDMuODcyIDIxLjEyLTMwOS4xMmExNjAgMTYwIDAgMCAwLTIxLjEyIDMwOS4xMlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL21pbGstdGVhLnZ1ZVxudmFyIG1pbGtfdGVhX2RlZmF1bHQgPSBtaWxrX3RlYV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvbWludXMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTY5IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNjksIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTY5LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE2OSB9IGZyb20gXCJ2dWVcIjtcbnZhciBtaW51c192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNjkoe1xuICBuYW1lOiBcIk1pbnVzXCIsXG4gIF9fbmFtZTogXCJtaW51c1wiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTY5KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNjkoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE2OShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xMjggNTQ0aDc2OGEzMiAzMiAwIDEgMCAwLTY0SDEyOGEzMiAzMiAwIDAgMCAwIDY0XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvbWludXMudnVlXG52YXIgbWludXNfZGVmYXVsdCA9IG1pbnVzX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9tb25leS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNzAgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE3MCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNzAsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTcwIH0gZnJvbSBcInZ1ZVwiO1xudmFyIG1vbmV5X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE3MCh7XG4gIG5hbWU6IFwiTW9uZXlcIixcbiAgX19uYW1lOiBcIm1vbmV5XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxNzAoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE3MChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTcwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTI1NiA2NDB2MTkyaDY0MFYzODRINzY4di02NGgxNTAuOTc2YzE0LjI3MiAwIDE5LjQ1NiAxLjQ3MiAyNC42NCA0LjI4OGEyOS4wNTYgMjkuMDU2IDAgMCAxIDEyLjE2IDEyLjA5NmMyLjc1MiA1LjE4NCA0LjIyNCAxMC4zNjggNC4yMjQgMjQuNjR2NDkzLjk1MmMwIDE0LjI3Mi0xLjQ3MiAxOS40NTYtNC4yODggMjQuNjRhMjkuMDU2IDI5LjA1NiAwIDAgMS0xMi4wOTYgMTIuMTZjLTUuMTg0IDIuNzUyLTEwLjM2OCA0LjIyNC0yNC42NCA0LjIyNEgyMzMuMDI0Yy0xNC4yNzIgMC0xOS40NTYtMS40NzItMjQuNjQtNC4yODhhMjkuMDU2IDI5LjA1NiAwIDAgMS0xMi4xNi0xMi4wOTZjLTIuNjg4LTUuMTg0LTQuMjI0LTEwLjM2OC00LjIyNC0yNC41NzZWNjQwelwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNzAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNzY4IDE5MkgxMjh2NDQ4aDY0MHptNjQtMjIuOTc2djQ5My45NTJjMCAxNC4yNzItMS40NzIgMTkuNDU2LTQuMjg4IDI0LjY0YTI5LjA1NiAyOS4wNTYgMCAwIDEtMTIuMDk2IDEyLjE2Yy01LjE4NCAyLjc1Mi0xMC4zNjggNC4yMjQtMjQuNjQgNC4yMjRIMTA1LjAyNGMtMTQuMjcyIDAtMTkuNDU2LTEuNDcyLTI0LjY0LTQuMjg4YTI5LjA1NiAyOS4wNTYgMCAwIDEtMTIuMTYtMTIuMDk2QzY1LjUzNiA2ODIuNDMyIDY0IDY3Ny4yNDggNjQgNjYzLjA0VjE2OS4wMjRjMC0xNC4yNzIgMS40NzItMTkuNDU2IDQuMjg4LTI0LjY0YTI5LjA1NiAyOS4wNTYgMCAwIDEgMTIuMDk2LTEyLjE2Qzg1LjU2OCAxMjkuNTM2IDkwLjc1MiAxMjggMTA0Ljk2IDEyOGg2ODUuOTUyYzE0LjI3MiAwIDE5LjQ1NiAxLjQ3MiAyNC42NCA0LjI4OGEyOS4wNTYgMjkuMDU2IDAgMCAxIDEyLjE2IDEyLjA5NmMyLjc1MiA1LjE4NCA0LjIyNCAxMC4zNjggNC4yMjQgMjQuNjR6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE3MChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00NDggNTc2YTE2MCAxNjAgMCAxIDEgMC0zMjAgMTYwIDE2MCAwIDAgMSAwIDMyMG0wLTY0YTk2IDk2IDAgMSAwIDAtMTkyIDk2IDk2IDAgMCAwIDAgMTkyXCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvbW9uZXkudnVlXG52YXIgbW9uZXlfZGVmYXVsdCA9IG1vbmV5X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9tb25pdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDE3MSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTcxLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE3MSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxNzEgfSBmcm9tIFwidnVlXCI7XG52YXIgbW9uaXRvcl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNzEoe1xuICBuYW1lOiBcIk1vbml0b3JcIixcbiAgX19uYW1lOiBcIm1vbml0b3JcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE3MSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTcxKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNzEoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTQ0IDc2OHYxMjhoMTkyYTMyIDMyIDAgMSAxIDAgNjRIMjg4YTMyIDMyIDAgMSAxIDAtNjRoMTkyVjc2OEgxOTJBMTI4IDEyOCAwIDAgMSA2NCA2NDBWMjU2YTEyOCAxMjggMCAwIDEgMTI4LTEyOGg2NDBhMTI4IDEyOCAwIDAgMSAxMjggMTI4djM4NGExMjggMTI4IDAgMCAxLTEyOCAxMjh6TTE5MiAxOTJhNjQgNjQgMCAwIDAtNjQgNjR2Mzg0YTY0IDY0IDAgMCAwIDY0IDY0aDY0MGE2NCA2NCAwIDAgMCA2NC02NFYyNTZhNjQgNjQgMCAwIDAtNjQtNjR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvbW9uaXRvci52dWVcbnZhciBtb25pdG9yX2RlZmF1bHQgPSBtb25pdG9yX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9tb29uLW5pZ2h0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDE3MiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTcyLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE3MiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxNzIgfSBmcm9tIFwidnVlXCI7XG52YXIgbW9vbl9uaWdodF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNzIoe1xuICBuYW1lOiBcIk1vb25OaWdodFwiLFxuICBfX25hbWU6IFwibW9vbi1uaWdodFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTcyKCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNzIoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE3MihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zODQgNTEyYTQ0OCA0NDggMCAwIDEgMjE1Ljg3Mi0zODMuMjk2QTM4NCAzODQgMCAwIDAgMjEzLjc2IDY0MGgxODguOEE0NDguMjU2IDQ0OC4yNTYgMCAwIDEgMzg0IDUxMk0xNzEuMTM2IDcwNGE0NDggNDQ4IDAgMCAxIDYzNi45OTItNTc1LjI5NkEzODQgMzg0IDAgMCAwIDQ5OS4zMjggNzA0aC0zMjguMzJ6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE3MihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zMiA2NDBoOTYwcTMyIDAgMzIgMzJ0LTMyIDMySDMycS0zMiAwLTMyLTMydDMyLTMybTEyOCAxMjhoMzg0YTMyIDMyIDAgMSAxIDAgNjRIMTYwYTMyIDMyIDAgMSAxIDAtNjRtMTYwIDEyNy42OCAyMjQgLjI1NmEzMiAzMiAwIDAgMSAzMiAzMlY5MjhhMzIgMzIgMCAwIDEtMzIgMzJsLTIyNC0uMzg0YTMyIDMyIDAgMCAxLTMyLTMydi0uMDY0YTMyIDMyIDAgMCAxIDMyLTMyelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL21vb24tbmlnaHQudnVlXG52YXIgbW9vbl9uaWdodF9kZWZhdWx0ID0gbW9vbl9uaWdodF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvbW9vbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNzMgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE3Mywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNzMsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTczIH0gZnJvbSBcInZ1ZVwiO1xudmFyIG1vb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTczKHtcbiAgbmFtZTogXCJNb29uXCIsXG4gIF9fbmFtZTogXCJtb29uXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxNzMoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE3MyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTczKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTI0MC40NDggMjQwLjQ0OGEzODQgMzg0IDAgMSAwIDU1OS40MjQgNTI1LjY5NiA0NDggNDQ4IDAgMCAxLTU0Mi4wMTYtNTQyLjA4IDM5MC41OTIgMzkwLjU5MiAwIDAgMC0xNy40MDggMTYuMzg0em0xODEuMDU2IDM2Mi4wNDhhMzg0IDM4NCAwIDAgMCA1MjUuNjMyIDE2LjM4NEE0NDggNDQ4IDAgMSAxIDQwNS4wNTYgNzYuOGEzODQgMzg0IDAgMCAwIDE2LjQ0OCA1MjUuNjk2XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvbW9vbi52dWVcbnZhciBtb29uX2RlZmF1bHQgPSBtb29uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9tb3JlLWZpbGxlZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNzQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE3NCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNzQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTc0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIG1vcmVfZmlsbGVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE3NCh7XG4gIG5hbWU6IFwiTW9yZUZpbGxlZFwiLFxuICBfX25hbWU6IFwibW9yZS1maWxsZWRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE3NCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTc0KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNzQoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTc2IDQxNmExMTIgMTEyIDAgMSAxIDAgMjI0IDExMiAxMTIgMCAwIDEgMC0yMjRtMzM2IDBhMTEyIDExMiAwIDEgMSAwIDIyNCAxMTIgMTEyIDAgMCAxIDAtMjI0bTMzNiAwYTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDAgMSAwLTIyNFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL21vcmUtZmlsbGVkLnZ1ZVxudmFyIG1vcmVfZmlsbGVkX2RlZmF1bHQgPSBtb3JlX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvbW9yZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNzUgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE3NSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNzUsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTc1IH0gZnJvbSBcInZ1ZVwiO1xudmFyIG1vcmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTc1KHtcbiAgbmFtZTogXCJNb3JlXCIsXG4gIF9fbmFtZTogXCJtb3JlXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxNzUoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE3NShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTc1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTE3NiA0MTZhMTEyIDExMiAwIDEgMCAwIDIyNCAxMTIgMTEyIDAgMCAwIDAtMjI0bTAgNjRhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDAgMSAwLTk2bTMzNi02NGExMTIgMTEyIDAgMSAxIDAgMjI0IDExMiAxMTIgMCAwIDEgMC0yMjRtMCA2NGE0OCA0OCAwIDEgMCAwIDk2IDQ4IDQ4IDAgMCAwIDAtOTZtMzM2LTY0YTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDAgMSAwLTIyNG0wIDY0YTQ4IDQ4IDAgMSAwIDAgOTYgNDggNDggMCAwIDAgMC05NlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL21vcmUudnVlXG52YXIgbW9yZV9kZWZhdWx0ID0gbW9yZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvbW9zdGx5LWNsb3VkeS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNzYgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE3Niwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNzYsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTc2IH0gZnJvbSBcInZ1ZVwiO1xudmFyIG1vc3RseV9jbG91ZHlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTc2KHtcbiAgbmFtZTogXCJNb3N0bHlDbG91ZHlcIixcbiAgX19uYW1lOiBcIm1vc3RseS1jbG91ZHlcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE3NigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTc2KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNzYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNzM3LjIxNiAzNTcuOTUyIDcwNCAzNDkuODI0bC0xMS43NzYtMzJhMTkyLjA2NCAxOTIuMDY0IDAgMCAwLTM2Ny40MjQgMjMuMDRsLTguOTYgMzkuMDQtMzkuMDQgOC45NkExOTIuMDY0IDE5Mi4wNjQgMCAwIDAgMzIwIDc2OGgzNjhhMjA3LjgwOCAyMDcuODA4IDAgMCAwIDIwNy44MDgtMjA4IDIwOC4zMiAyMDguMzIgMCAwIDAtMTU4LjU5Mi0yMDIuMDQ4bTE1LjE2OC02Mi4yMDhBMjcyLjMyIDI3Mi4zMiAwIDAgMSA5NTkuNzQ0IDU2MGEyNzEuODA4IDI3MS44MDggMCAwIDEtMjcxLjU1MiAyNzJIMzIwYTI1NiAyNTYgMCAwIDEtNTcuNTM2LTUwNS41MzYgMjU2LjEyOCAyNTYuMTI4IDAgMCAxIDQ4OS45Mi0zMC43MlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL21vc3RseS1jbG91ZHkudnVlXG52YXIgbW9zdGx5X2Nsb3VkeV9kZWZhdWx0ID0gbW9zdGx5X2Nsb3VkeV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvbW91c2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTc3IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNzcsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTc3LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE3NyB9IGZyb20gXCJ2dWVcIjtcbnZhciBtb3VzZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNzcoe1xuICBuYW1lOiBcIk1vdXNlXCIsXG4gIF9fbmFtZTogXCJtb3VzZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTc3KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxNzcoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE3NyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00MzguMTQ0IDI1NmMtNjguMzUyIDAtOTIuNzM2IDQuNjcyLTExNy43NiAxOC4xMTItMjAuMDk2IDEwLjc1Mi0zNS41MiAyNi4xNzYtNDYuMjcyIDQ2LjI3MkMyNjAuNjcyIDM0NS40MDggMjU2IDM2OS43OTIgMjU2IDQzOC4xNDR2Mjc1LjcxMmMwIDY4LjM1MiA0LjY3MiA5Mi43MzYgMTguMTEyIDExNy43NiAxMC43NTIgMjAuMDk2IDI2LjE3NiAzNS41MiA0Ni4yNzIgNDYuMjcyQzM0NS40MDggODkxLjMyOCAzNjkuNzkyIDg5NiA0MzguMTQ0IDg5NmgxNDcuNzEyYzY4LjM1MiAwIDkyLjczNi00LjY3MiAxMTcuNzYtMTguMTEyIDIwLjA5Ni0xMC43NTIgMzUuNTItMjYuMTc2IDQ2LjI3Mi00Ni4yNzJDNzYzLjMyOCA4MDYuNTkyIDc2OCA3ODIuMjA4IDc2OCA3MTMuODU2VjQzOC4xNDRjMC02OC4zNTItNC42NzItOTIuNzM2LTE4LjExMi0xMTcuNzZhMTEwLjQ2NCAxMTAuNDY0IDAgMCAwLTQ2LjI3Mi00Ni4yNzJDNjc4LjU5MiAyNjAuNjcyIDY1NC4yMDggMjU2IDU4NS44NTYgMjU2em0wLTY0aDE0Ny43MTJjODUuNTY4IDAgMTE2LjYwOCA4Ljk2IDE0Ny45MDQgMjUuNiAzMS4zNiAxNi43NjggNTUuODcyIDQxLjM0NCA3Mi41NzYgNzIuNjRDODIzLjEwNCAzMjEuNTM2IDgzMiAzNTIuNTc2IDgzMiA0MzguMDh2Mjc1Ljg0YzAgODUuNTA0LTguOTYgMTE2LjU0NC0yNS42IDE0Ny44NGExNzQuNDY0IDE3NC40NjQgMCAwIDEtNzIuNjQgNzIuNTc2QzcwMi40NjQgOTUxLjEwNCA2NzEuNDI0IDk2MCA1ODUuOTIgOTYwSDQzOC4wOGMtODUuNTA0IDAtMTE2LjU0NC04Ljk2LTE0Ny44NC0yNS42YTE3NC40NjQgMTc0LjQ2NCAwIDAgMS03Mi42NC03Mi43MDRjLTE2Ljc2OC0zMS4yOTYtMjUuNjY0LTYyLjMzNi0yNS42NjQtMTQ3Ljg0di0yNzUuODRjMC04NS41MDQgOC45Ni0xMTYuNTQ0IDI1LjYtMTQ3Ljg0YTE3NC40NjQgMTc0LjQ2NCAwIDAgMSA3Mi43NjgtNzIuNTc2YzMxLjIzMi0xNi43MDQgNjIuMjcyLTI1LjYgMTQ3Ljc3Ni0yNS42elwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxNzcoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDMyMHEzMiAwIDMyIDMydjEyOHEwIDMyLTMyIDMydC0zMi0zMlYzNTJxMC0zMiAzMi0zMm0zMi05NmEzMiAzMiAwIDAgMS02NCAwdi02NGEzMiAzMiAwIDAgMC0zMi0zMmgtOTZhMzIgMzIgMCAwIDEgMC02NGg5NmE5NiA5NiAwIDAgMSA5NiA5NnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9tb3VzZS52dWVcbnZhciBtb3VzZV9kZWZhdWx0ID0gbW91c2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL211Zy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxNzggfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE3OCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxNzgsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTc4IH0gZnJvbSBcInZ1ZVwiO1xudmFyIG11Z192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNzgoe1xuICBuYW1lOiBcIk11Z1wiLFxuICBfX25hbWU6IFwibXVnXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxNzgoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE3OChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTc4KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTczNiA4MDBWMTYwSDE2MHY2NDBhNjQgNjQgMCAwIDAgNjQgNjRoNDQ4YTY0IDY0IDAgMCAwIDY0LTY0bTY0LTU0NGg2My41NTJhOTYgOTYgMCAwIDEgOTYgOTZ2MjI0YTk2IDk2IDAgMCAxLTk2IDk2SDgwMHYxMjhhMTI4IDEyOCAwIDAgMS0xMjggMTI4SDIyNEExMjggMTI4IDAgMCAxIDk2IDgwMFYxMjhhMzIgMzIgMCAwIDEgMzItMzJoNjQwYTMyIDMyIDAgMCAxIDMyIDMyem0wIDY0djI4OGg2My41NTJhMzIgMzIgMCAwIDAgMzItMzJWMzUyYTMyIDMyIDAgMCAwLTMyLTMyelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL211Zy52dWVcbnZhciBtdWdfZGVmYXVsdCA9IG11Z192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvbXV0ZS1ub3RpZmljYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTc5IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxNzksIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTc5LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE3OSB9IGZyb20gXCJ2dWVcIjtcbnZhciBtdXRlX25vdGlmaWNhdGlvbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxNzkoe1xuICBuYW1lOiBcIk11dGVOb3RpZmljYXRpb25cIixcbiAgX19uYW1lOiBcIm11dGUtbm90aWZpY2F0aW9uXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxNzkoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE3OShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTc5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTI0MS4yMTYgODMyIDYzLjYxNi02NEg3NjhWNDQ4YzAtNDIuMzY4LTEwLjI0LTgyLjMwNC0yOC40OC0xMTcuNTA0bDQ2LjkxMi00Ny4yMzJDODE1LjM2IDMzMS4zOTIgODMyIDM4Ny44NCA4MzIgNDQ4djMyMGg5NmEzMiAzMiAwIDEgMSAwIDY0em0tOTAuMjQgMEg5NmEzMiAzMiAwIDEgMSAwLTY0aDk2VjQ0OGEzMjAuMTI4IDMyMC4xMjggMCAwIDEgMjU2LTMxMy42VjEyOGE2NCA2NCAwIDEgMSAxMjggMHY2LjRhMzE5LjU1MiAzMTkuNTUyIDAgMCAxIDE3MS42NDggOTcuMDg4bC00NS4xODQgNDUuNDRBMjU2IDI1NiAwIDAgMCAyNTYgNDQ4djI3OC4zMzZMMTUxLjA0IDgzMnpNNDQ4IDg5NmgxMjhhNjQgNjQgMCAwIDEtMTI4IDBcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTc5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTE1MC43MiA4NTkuMDcyYTMyIDMyIDAgMCAxLTQ1LjQ0LTQ1LjA1Nmw3MDQtNzA4LjU0NGEzMiAzMiAwIDAgMSA0NS40NCA0NS4wNTZsLTcwNCA3MDguNTQ0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL211dGUtbm90aWZpY2F0aW9uLnZ1ZVxudmFyIG11dGVfbm90aWZpY2F0aW9uX2RlZmF1bHQgPSBtdXRlX25vdGlmaWNhdGlvbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvbXV0ZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxODAgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE4MCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxODAsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTgwIH0gZnJvbSBcInZ1ZVwiO1xudmFyIG11dGVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTgwKHtcbiAgbmFtZTogXCJNdXRlXCIsXG4gIF9fbmFtZTogXCJtdXRlXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxODAoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE4MChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTgwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTQxMi4xNiA1OTIuMTI4LTQ1LjQ0IDQ1LjQ0QTE5MS4yMzIgMTkxLjIzMiAwIDAgMSAzMjAgNTEyVjI1NmExOTIgMTkyIDAgMSAxIDM4NCAwdjQ0LjM1MmwtNjQgNjRWMjU2YTEyOCAxMjggMCAxIDAtMjU2IDB2MjU2YzAgMzAuMzM2IDEwLjU2IDU4LjI0IDI4LjE2IDgwLjEyOG01MS45NjggMzguNTkyQTEyOCAxMjggMCAwIDAgNjQwIDUxMnYtNTcuMTUybDY0LTY0VjUxMmExOTIgMTkyIDAgMCAxLTI4Ny42OCAxNjYuNTI4ek0zMTQuODggNzc5Ljk2OGw0Ni4xNDQtNDYuMDhBMjIyLjk3NiAyMjIuOTc2IDAgMCAwIDQ4MCA3NjhoNjRhMjI0IDIyNCAwIDAgMCAyMjQtMjI0di0zMmEzMiAzMiAwIDEgMSA2NCAwdjMyYTI4OCAyODggMCAwIDEtMjg4IDI4OHY2NGg2NGEzMiAzMiAwIDEgMSAwIDY0SDQxNmEzMiAzMiAwIDEgMSAwLTY0aDY0di02NGMtNjEuNDQgMC0xMTguNC0xOS4yLTE2NS4xMi01Mi4wMzJNMjY2Ljc1MiA3MzcuNkEyODYuOTc2IDI4Ni45NzYgMCAwIDEgMTkyIDU0NHYtMzJhMzIgMzIgMCAwIDEgNjQgMHYzMmMwIDU2LjgzMiAyMS4xODQgMTA4LjggNTYuMDY0IDE0OC4yODh6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE4MChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xNTAuNzIgODU5LjA3MmEzMiAzMiAwIDAgMS00NS40NC00NS4wNTZsNzA0LTcwOC41NDRhMzIgMzIgMCAwIDEgNDUuNDQgNDUuMDU2bC03MDQgNzA4LjU0NHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9tdXRlLnZ1ZVxudmFyIG11dGVfZGVmYXVsdCA9IG11dGVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL25vLXNtb2tpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTgxIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxODEsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTgxLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE4MSB9IGZyb20gXCJ2dWVcIjtcbnZhciBub19zbW9raW5nX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE4MSh7XG4gIG5hbWU6IFwiTm9TbW9raW5nXCIsXG4gIF9fbmFtZTogXCJuby1zbW9raW5nXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxODEoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE4MShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTgxKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTQ0MC4yNTYgNTc2SDI1NnYxMjhoNTYuMjU2bC02NCA2NEgyMjRhMzIgMzIgMCAwIDEtMzItMzJWNTQ0YTMyIDMyIDAgMCAxIDMyLTMyaDI4MC4yNTZ6bTE0My40ODggMTI4SDcwNFY1ODMuNzQ0TDc3NS43NDQgNTEySDkyOGEzMiAzMiAwIDAgMSAzMiAzMnYxOTJhMzIgMzIgMCAwIDEtMzIgMzJINTE5Ljc0NHpNNzY4IDU3NnYxMjhoMTI4VjU3NnptLTI5LjY5Ni0yMDcuNTUyIDQ1LjI0OCA0NS4yNDgtNDk3Ljg1NiA0OTcuODU2LTQ1LjI0OC00NS4yNDh6TTI1NiA2NGg2NHYzMjBoLTY0ek0xMjggMTkyaDY0djE5MmgtNjR6TTY0IDUxMmg2NHYyNTZINjR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvbm8tc21va2luZy52dWVcbnZhciBub19zbW9raW5nX2RlZmF1bHQgPSBub19zbW9raW5nX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9ub3RlYm9vay52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxODIgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE4Miwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxODIsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTgyIH0gZnJvbSBcInZ1ZVwiO1xudmFyIG5vdGVib29rX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE4Mih7XG4gIG5hbWU6IFwiTm90ZWJvb2tcIixcbiAgX19uYW1lOiBcIm5vdGVib29rXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxODIoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE4MihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTgyKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTE5MiAxMjh2NzY4aDY0MFYxMjh6bS0zMi02NGg3MDRhMzIgMzIgMCAwIDEgMzIgMzJ2ODMyYTMyIDMyIDAgMCAxLTMyIDMySDE2MGEzMiAzMiAwIDAgMS0zMi0zMlY5NmEzMiAzMiAwIDAgMSAzMi0zMlwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxODIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNjcyIDEyOGg2NHY3NjhoLTY0ek05NiAxOTJoMTI4cTMyIDAgMzIgMzJ0LTMyIDMySDk2cS0zMiAwLTMyLTMydDMyLTMybTAgMTkyaDEyOHEzMiAwIDMyIDMydC0zMiAzMkg5NnEtMzIgMC0zMi0zMnQzMi0zMm0wIDE5MmgxMjhxMzIgMCAzMiAzMnQtMzIgMzJIOTZxLTMyIDAtMzItMzJ0MzItMzJtMCAxOTJoMTI4cTMyIDAgMzIgMzJ0LTMyIDMySDk2cS0zMiAwLTMyLTMydDMyLTMyXCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvbm90ZWJvb2sudnVlXG52YXIgbm90ZWJvb2tfZGVmYXVsdCA9IG5vdGVib29rX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9ub3RpZmljYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTgzIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxODMsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTgzLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE4MyB9IGZyb20gXCJ2dWVcIjtcbnZhciBub3RpZmljYXRpb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTgzKHtcbiAgbmFtZTogXCJOb3RpZmljYXRpb25cIixcbiAgX19uYW1lOiBcIm5vdGlmaWNhdGlvblwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTgzKCksIF9jcmVhdGVFbGVtZW50QmxvY2sxODMoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE4MyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01MTIgMTI4djY0SDI1NmE2NCA2NCAwIDAgMC02NCA2NHY1MTJhNjQgNjQgMCAwIDAgNjQgNjRoNTEyYTY0IDY0IDAgMCAwIDY0LTY0VjUxMmg2NHYyNTZhMTI4IDEyOCAwIDAgMS0xMjggMTI4SDI1NmExMjggMTI4IDAgMCAxLTEyOC0xMjhWMjU2YTEyOCAxMjggMCAwIDEgMTI4LTEyOHpcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTgzKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTc2OCAzODRhMTI4IDEyOCAwIDEgMCAwLTI1NiAxMjggMTI4IDAgMCAwIDAgMjU2bTAgNjRhMTkyIDE5MiAwIDEgMSAwLTM4NCAxOTIgMTkyIDAgMCAxIDAgMzg0XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uLnZ1ZVxudmFyIG5vdGlmaWNhdGlvbl9kZWZhdWx0ID0gbm90aWZpY2F0aW9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9vZG9tZXRlci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxODQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE4NCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxODQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTg0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIG9kb21ldGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE4NCh7XG4gIG5hbWU6IFwiT2RvbWV0ZXJcIixcbiAgX19uYW1lOiBcIm9kb21ldGVyXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxODQoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE4NChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTg0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA4OTZhMzg0IDM4NCAwIDEgMCAwLTc2OCAzODQgMzg0IDAgMCAwIDAgNzY4bTAgNjRhNDQ4IDQ0OCAwIDEgMSAwLTg5NiA0NDggNDQ4IDAgMCAxIDAgODk2XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE4NChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xOTIgNTEyYTMyMCAzMjAgMCAxIDEgNjQwIDAgMzIgMzIgMCAxIDEtNjQgMCAyNTYgMjU2IDAgMSAwLTUxMiAwIDMyIDMyIDAgMCAxLTY0IDBcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTg0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTU3MC40MzIgNjI3Ljg0QTk2IDk2IDAgMSAxIDUwOS41NjggNjA4bDYwLjk5Mi0xODcuNzc2QTMyIDMyIDAgMSAxIDYzMS40MjQgNDQwbC02MC45OTIgMTg3Ljc3NnpNNTAyLjA4IDczNC40NjRhMzIgMzIgMCAxIDAgMTkuODQtNjAuOTI4IDMyIDMyIDAgMCAwLTE5Ljg0IDYwLjkyOFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL29kb21ldGVyLnZ1ZVxudmFyIG9kb21ldGVyX2RlZmF1bHQgPSBvZG9tZXRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvb2ZmaWNlLWJ1aWxkaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDE4NSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTg1LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE4NSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxODUgfSBmcm9tIFwidnVlXCI7XG52YXIgb2ZmaWNlX2J1aWxkaW5nX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE4NSh7XG4gIG5hbWU6IFwiT2ZmaWNlQnVpbGRpbmdcIixcbiAgX19uYW1lOiBcIm9mZmljZS1idWlsZGluZ1wiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTg1KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxODUoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE4NShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xOTIgMTI4djcwNGgzODRWMTI4em0tMzItNjRoNDQ4YTMyIDMyIDAgMCAxIDMyIDMydjc2OGEzMiAzMiAwIDAgMS0zMiAzMkgxNjBhMzIgMzIgMCAwIDEtMzItMzJWOTZhMzIgMzIgMCAwIDEgMzItMzJcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTg1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTI1NiAyNTZoMjU2djY0SDI1NnptMCAxOTJoMjU2djY0SDI1NnptMCAxOTJoMjU2djY0SDI1NnptMzg0LTEyOGgxMjh2NjRINjQwem0wIDEyOGgxMjh2NjRINjQwek02NCA4MzJoODk2djY0SDY0elwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxODUoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNjQwIDM4NHY0NDhoMTkyVjM4NHptLTMyLTY0aDI1NmEzMiAzMiAwIDAgMSAzMiAzMnY1MTJhMzIgMzIgMCAwIDEtMzIgMzJINjA4YTMyIDMyIDAgMCAxLTMyLTMyVjM1MmEzMiAzMiAwIDAgMSAzMi0zMlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL29mZmljZS1idWlsZGluZy52dWVcbnZhciBvZmZpY2VfYnVpbGRpbmdfZGVmYXVsdCA9IG9mZmljZV9idWlsZGluZ192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvb3Blbi52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxODYgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE4Niwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxODYsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTg2IH0gZnJvbSBcInZ1ZVwiO1xudmFyIG9wZW5fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTg2KHtcbiAgbmFtZTogXCJPcGVuXCIsXG4gIF9fbmFtZTogXCJvcGVuXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxODYoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE4NihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTg2KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTMyOS45NTYgMjU3LjEzOGEyNTQuODYyIDI1NC44NjIgMCAwIDAgMCA1MDkuNzI0aDM2NC4wODhhMjU0Ljg2MiAyNTQuODYyIDAgMCAwIDAtNTA5LjcyNHptMC03Mi44MThoMzY0LjA4OGEzMjcuNjggMzI3LjY4IDAgMSAxIDAgNjU1LjM2SDMyOS45NTZhMzI3LjY4IDMyNy42OCAwIDEgMSAwLTY1NS4zNnpcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTg2KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTY5NC4wNDQgNjIxLjIyN2ExMDkuMjI3IDEwOS4yMjcgMCAxIDAgMC0yMTguNDU0IDEwOS4yMjcgMTA5LjIyNyAwIDAgMCAwIDIxOC40NTRtMCA3Mi44MTdhMTgyLjA0NCAxODIuMDQ0IDAgMSAxIDAtMzY0LjA4OCAxODIuMDQ0IDE4Mi4wNDQgMCAwIDEgMCAzNjQuMDg4XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvb3Blbi52dWVcbnZhciBvcGVuX2RlZmF1bHQgPSBvcGVuX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9vcGVyYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTg3IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxODcsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTg3LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE4NyB9IGZyb20gXCJ2dWVcIjtcbnZhciBvcGVyYXRpb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTg3KHtcbiAgbmFtZTogXCJPcGVyYXRpb25cIixcbiAgX19uYW1lOiBcIm9wZXJhdGlvblwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTg3KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxODcoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE4NyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zODkuNDQgNzY4YTk2LjA2NCA5Ni4wNjQgMCAwIDEgMTgxLjEyIDBIODk2djY0SDU3MC41NmE5Ni4wNjQgOTYuMDY0IDAgMCAxLTE4MS4xMiAwSDEyOHYtNjR6bTE5Mi0yODhhOTYuMDY0IDk2LjA2NCAwIDAgMSAxODEuMTIgMEg4OTZ2NjRINzYyLjU2YTk2LjA2NCA5Ni4wNjQgMCAwIDEtMTgxLjEyIDBIMTI4di02NHptLTMyMC0yODhhOTYuMDY0IDk2LjA2NCAwIDAgMSAxODEuMTIgMEg4OTZ2NjRINDQyLjU2YTk2LjA2NCA5Ni4wNjQgMCAwIDEtMTgxLjEyIDBIMTI4di02NHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9vcGVyYXRpb24udnVlXG52YXIgb3BlcmF0aW9uX2RlZmF1bHQgPSBvcGVyYXRpb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL29wcG9ydHVuaXR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDE4OCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTg4LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE4OCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxODggfSBmcm9tIFwidnVlXCI7XG52YXIgb3Bwb3J0dW5pdHlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTg4KHtcbiAgbmFtZTogXCJPcHBvcnR1bml0eVwiLFxuICBfX25hbWU6IFwib3Bwb3J0dW5pdHlcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE4OCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTg4KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxODgoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMzg0IDk2MHYtNjRoMTkyLjA2NHY2NHptNDQ4LTU0NGEzNTAuNjU2IDM1MC42NTYgMCAwIDEtMTI4LjMyIDI3MS40MjRDNjY1LjM0NCA3MTkuMDQgNjQwIDc2My43NzYgNjQwIDgxMy41MDRWODMySDMyMHYtMTQuMzM2YzAtNDgtMTkuMzkyLTk1LjM2LTU3LjIxNi0xMjQuOTkyYTM1MS41NTIgMzUxLjU1MiAwIDAgMS0xMjguNDQ4LTM0NC4yNTZjMjUuMzQ0LTEzNi40NDggMTMzLjg4OC0yNDguMTI4IDI2OS43Ni0yNzYuNDhBMzUyLjM4NCAzNTIuMzg0IDAgMCAxIDgzMiA0MTZtLTU0NCAzMmMwLTEzMi4yODggNzUuOTA0LTIyNCAxOTItMjI0di02NGMtMTU0LjQzMiAwLTI1NiAxMjIuNzUyLTI1NiAyODh6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvb3Bwb3J0dW5pdHkudnVlXG52YXIgb3Bwb3J0dW5pdHlfZGVmYXVsdCA9IG9wcG9ydHVuaXR5X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9vcmFuZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTg5IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxODksIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTg5LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE4OSB9IGZyb20gXCJ2dWVcIjtcbnZhciBvcmFuZ2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTg5KHtcbiAgbmFtZTogXCJPcmFuZ2VcIixcbiAgX19uYW1lOiBcIm9yYW5nZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTg5KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxODkoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE4OShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01NDQgODk0LjcyYTM4Mi4zMzYgMzgyLjMzNiAwIDAgMCAyMTUuOTM2LTg5LjQ3Mkw1NzcuMDI0IDYyMi4yNzJjLTEwLjI0IDYuMDE2LTIxLjI0OCAxMC42ODgtMzMuMDI0IDEzLjY5NnYyNTguNjg4em0yNjEuMjQ4LTEzNC43ODRBMzgyLjMzNiAzODIuMzM2IDAgMCAwIDg5NC42NTYgNTQ0SDYzNS45NjhjLTMuMDA4IDExLjc3Ni03LjY4IDIyLjg0OC0xMy42OTYgMzMuMDI0bDE4Mi45NzYgMTgyLjkxMnpNODk0LjY1NiA0ODBhMzgyLjMzNiAzODIuMzM2IDAgMCAwLTg5LjQwOC0yMTUuOTM2TDYyMi4yNzIgNDQ2Ljk3NmM2LjAxNiAxMC4yNCAxMC42ODggMjEuMjQ4IDEzLjY5NiAzMy4wMjRoMjU4LjY4OHptLTEzNC43Mi0yNjEuMjQ4QTM4Mi4zMzYgMzgyLjMzNiAwIDAgMCA1NDQgMTI5LjM0NHYyNTguNjg4YzExLjc3NiAzLjAwOCAyMi44NDggNy42OCAzMy4wMjQgMTMuNjk2ek00ODAgMTI5LjM0NGEzODIuMzM2IDM4Mi4zMzYgMCAwIDAtMjE1LjkzNiA4OS40MDhsMTgyLjkxMiAxODIuOTc2YzEwLjI0LTYuMDE2IDIxLjI0OC0xMC42ODggMzMuMDI0LTEzLjY5NnptLTI2MS4yNDggMTM0LjcyQTM4Mi4zMzYgMzgyLjMzNiAwIDAgMCAxMjkuMzQ0IDQ4MGgyNTguNjg4YzMuMDA4LTExLjc3NiA3LjY4LTIyLjg0OCAxMy42OTYtMzMuMDI0ek0xMjkuMzQ0IDU0NGEzODIuMzM2IDM4Mi4zMzYgMCAwIDAgODkuNDA4IDIxNS45MzZsMTgyLjk3Ni0xODIuOTEyQTEyNy4yMzIgMTI3LjIzMiAwIDAgMSAzODguMDMyIDU0NHptMTM0LjcyIDI2MS4yNDhBMzgyLjMzNiAzODIuMzM2IDAgMCAwIDQ4MCA4OTQuNjU2VjYzNS45NjhhMTI3LjIzMiAxMjcuMjMyIDAgMCAxLTMzLjAyNC0xMy42OTZ6TTUxMiA5NjBhNDQ4IDQ0OCAwIDEgMSAwLTg5NiA0NDggNDQ4IDAgMCAxIDAgODk2bTAtMzg0YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMCAwIDAgMTI4XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvb3JhbmdlLnZ1ZVxudmFyIG9yYW5nZV9kZWZhdWx0ID0gb3JhbmdlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9wYXBlcmNsaXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTkwIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxOTAsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTkwLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE5MCB9IGZyb20gXCJ2dWVcIjtcbnZhciBwYXBlcmNsaXBfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTkwKHtcbiAgbmFtZTogXCJQYXBlcmNsaXBcIixcbiAgX19uYW1lOiBcInBhcGVyY2xpcFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTkwKCksIF9jcmVhdGVFbGVtZW50QmxvY2sxOTAoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE5MChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk02MDIuNDk2IDI0MC40NDhBMTkyIDE5MiAwIDEgMSA4NzQuMDQ4IDUxMmwtMzE2LjggMzE2LjhBMjU2IDI1NiAwIDAgMSAxOTUuMiA0NjYuNzUyTDYwMi40OTYgNTkuNDU2bDQ1LjI0OCA0NS4yNDhMMjQwLjQ0OCA1MTJBMTkyIDE5MiAwIDAgMCA1MTIgNzgzLjU1MmwzMTYuOC0zMTYuOGExMjggMTI4IDAgMSAwLTE4MS4wNTYtMTgxLjA1NkwzNTMuNiA1NzkuOTA0YTMyIDMyIDAgMSAwIDQ1LjI0OCA0NS4yNDhsMjk0LjE0NC0yOTQuMTQ0IDQ1LjMxMiA0NS4yNDhMNDQ0LjA5NiA2NzAuNGE5NiA5NiAwIDEgMS0xMzUuNzQ0LTEzNS43NDRsMjk0LjE0NC0yOTQuMjA4elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3BhcGVyY2xpcC52dWVcbnZhciBwYXBlcmNsaXBfZGVmYXVsdCA9IHBhcGVyY2xpcF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvcGFydGx5LWNsb3VkeS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxOTEgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE5MSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxOTEsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTkxIH0gZnJvbSBcInZ1ZVwiO1xudmFyIHBhcnRseV9jbG91ZHlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTkxKHtcbiAgbmFtZTogXCJQYXJ0bHlDbG91ZHlcIixcbiAgX19uYW1lOiBcInBhcnRseS1jbG91ZHlcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE5MSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTkxKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxOTEoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTk4LjQgODk1Ljg3MkgzMjguMTkyYTI1NiAyNTYgMCAwIDEtMzQuNDk2LTUxMC41MjhBMzUyIDM1MiAwIDEgMSA1OTguNCA4OTUuODcybS0yNzEuMzYtNjRoMjcyLjI1NmEyODggMjg4IDAgMSAwLTI0OC41MTItNDE3LjY2NEwzMzUuMDQgNDQ1LjQ0bC0zNC44MTYgMy41ODRhMTkyIDE5MiAwIDAgMCAyNi44OCAzODIuODQ4elwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxOTEoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTM5Ljg0IDUwMS44ODhhMjU2IDI1NiAwIDEgMSA0MTcuODU2LTI3Ny4xMmMtMTcuNzI4IDIuMTc2LTM4LjIwOCA4LjQ0OC02MS41MDQgMTguODE2QTE5MiAxOTIgMCAxIDAgMTg5LjEyIDQ2MC40OGE2MDAzLjg0IDYwMDMuODQgMCAwIDAtNDkuMjggNDEuNDA4elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3BhcnRseS1jbG91ZHkudnVlXG52YXIgcGFydGx5X2Nsb3VkeV9kZWZhdWx0ID0gcGFydGx5X2Nsb3VkeV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvcGVhci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxOTIgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE5Miwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxOTIsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTkyIH0gZnJvbSBcInZ1ZVwiO1xudmFyIHBlYXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTkyKHtcbiAgbmFtZTogXCJQZWFyXCIsXG4gIF9fbmFtZTogXCJwZWFyXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxOTIoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE5MihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTkyKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTU0Mi4zMzYgMjU4LjgxNmE0NDMuMjU1IDQ0My4yNTUgMCAwIDAtOS4wMjQgMjUuMDg4IDMyIDMyIDAgMSAxLTYwLjgtMjAuMDMybDEuMDg4LTMuMzI4YTE2Mi42ODggMTYyLjY4OCAwIDAgMC0xMjIuMDQ4IDEzMS4zOTJsLTE3LjA4OCAxMDIuNzItMjAuNzM2IDE1LjM2QzI1Ni4xOTIgNTUyLjcwNCAyMjQgNjEwLjg4IDIyNCA2NzJjMCAxMjAuNTc2IDEyNi40IDIyNCAyODggMjI0czI4OC0xMDMuNDI0IDI4OC0yMjRjMC02MS4xMi0zMi4xOTItMTE5LjI5Ni04OS43MjgtMTYxLjkybC0yMC43MzYtMTUuNDI0LTE3LjA4OC0xMDIuNzJhMTYyLjY4OCAxNjIuNjg4IDAgMCAwLTEzMC4xMTItMTMzLjEyem0tNDAuMTI4LTY2LjU2YzcuOTM2LTE1LjU1MiAxNi41NzYtMzAuMDggMjUuOTItNDMuNzc2IDIzLjI5Ni0zMy45MiA0OS40MDgtNTkuNzc2IDc4LjUyOC03Ny4xMmEzMiAzMiAwIDEgMSAzMi43MDQgNTUuMDRjLTIwLjU0NCAxMi4yMjQtNDAuMDY0IDMxLjU1Mi01OC40MzIgNTguMzA0YTMxNi42MDggMzE2LjYwOCAwIDAgMC05Ljc5MiAxNS4xMDQgMjI2LjY4OCAyMjYuNjg4IDAgMCAxIDE2NC40OCAxODEuNTY4bDEyLjggNzcuMjQ4QzgxOS40NTYgNTExLjM2IDg2NCA1ODcuMzkyIDg2NCA2NzJjMCAxNTkuMDQtMTU3LjU2OCAyODgtMzUyIDI4OFMxNjAgODMxLjA0IDE2MCA2NzJjMC04NC42MDggNDQuNjA4LTE2MC42NCAxMTUuNTg0LTIxMy4zNzZsMTIuOC03Ny4yNDhhMjI2LjYyNCAyMjYuNjI0IDAgMCAxIDIxMy43Ni0xODkuMTg0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3BlYXIudnVlXG52YXIgcGVhcl9kZWZhdWx0ID0gcGVhcl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvcGhvbmUtZmlsbGVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDE5MyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTkzLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE5MywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxOTMgfSBmcm9tIFwidnVlXCI7XG52YXIgcGhvbmVfZmlsbGVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE5Myh7XG4gIG5hbWU6IFwiUGhvbmVGaWxsZWRcIixcbiAgX19uYW1lOiBcInBob25lLWZpbGxlZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTkzKCksIF9jcmVhdGVFbGVtZW50QmxvY2sxOTMoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE5MyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xOTkuMjMyIDEyNS41NjggOTAuNjI0IDM3OS4wMDhhMzIgMzIgMCAwIDAgNi43ODQgMzUuMmw1MTIuMzg0IDUxMi4zODRhMzIgMzIgMCAwIDAgMzUuMiA2Ljc4NGwyNTMuNDQtMTA4LjYwOGEzMiAzMiAwIDAgMCAxMC4wNDgtNTIuMDMyTDc2OS42IDYzMy45MmEzMiAzMiAwIDAgMC0zNi45MjgtNS45NTJsLTEzMC4xNzYgNjUuMDg4LTI3MS40ODgtMjcxLjU1MiA2NS4wMjQtMTMwLjE3NmEzMiAzMiAwIDAgMC01Ljk1Mi0zNi45MjhMMjUxLjIgMTE1LjUyYTMyIDMyIDAgMCAwLTUxLjk2OCAxMC4wNDh6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvcGhvbmUtZmlsbGVkLnZ1ZVxudmFyIHBob25lX2ZpbGxlZF9kZWZhdWx0ID0gcGhvbmVfZmlsbGVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9waG9uZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQxOTQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTE5NCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2sxOTQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMTk0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHBob25lX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE5NCh7XG4gIG5hbWU6IFwiUGhvbmVcIixcbiAgX19uYW1lOiBcInBob25lXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxOTQoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE5NChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTk0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTc5LjM2IDQzMi4yNTYgNTkxLjc0NCA5NDQuNjRhMzIgMzIgMCAwIDAgMzUuMiA2Ljc4NGwyNTMuNDQtMTA4LjU0NGEzMiAzMiAwIDAgMCA5Ljk4NC01Mi4wMzJsLTE1My44NTYtMTUzLjkyYTMyIDMyIDAgMCAwLTM2LjkyOC02LjAxNmwtNjkuODg4IDM0Ljk0NEwzNTguMDggMzk0LjI0bDM1LjAwOC02OS44ODhhMzIgMzIgMCAwIDAtNS45NTItMzYuOTI4TDIzMy4xNTIgMTMzLjU2OGEzMiAzMiAwIDAgMC01Mi4wMzIgMTAuMDQ4TDcyLjUxMiAzOTcuMDU2YTMyIDMyIDAgMCAwIDYuNzg0IDM1LjJ6bTYwLjQ4LTI5Ljk1MiA4MS41MzYtMTkwLjA4TDMyNS41NjggMzE2LjQ4bC0yNC42NCA0OS4yMTYtMjAuNjA4IDQxLjIxNiAzMi41NzYgMzIuNjQgMjcxLjU1MiAyNzEuNTUyIDMyLjY0IDMyLjY0IDQxLjIxNi0yMC42NzIgNDkuMjgtMjQuNTc2IDEwNC4xOTIgMTA0LjEyOC0xOTAuMDggODEuNDcyTDEzOS44NCA0MDIuMzA0ek01MTIgMzIwdi02NGEyNTYgMjU2IDAgMCAxIDI1NiAyNTZoLTY0YTE5MiAxOTIgMCAwIDAtMTkyLTE5Mm0wLTE5MlY2NGE0NDggNDQ4IDAgMCAxIDQ0OCA0NDhoLTY0YTM4NCAzODQgMCAwIDAtMzg0LTM4NFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3Bob25lLnZ1ZVxudmFyIHBob25lX2RlZmF1bHQgPSBwaG9uZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvcGljdHVyZS1maWxsZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTk1IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxOTUsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTk1LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE5NSB9IGZyb20gXCJ2dWVcIjtcbnZhciBwaWN0dXJlX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQxOTUoe1xuICBuYW1lOiBcIlBpY3R1cmVGaWxsZWRcIixcbiAgX19uYW1lOiBcInBpY3R1cmUtZmlsbGVkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2sxOTUoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazE5NShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTk1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTk2IDg5NmEzMiAzMiAwIDAgMS0zMi0zMlYxNjBhMzIgMzIgMCAwIDEgMzItMzJoODMyYTMyIDMyIDAgMCAxIDMyIDMydjcwNGEzMiAzMiAwIDAgMS0zMiAzMnptMzE1LjUyLTIyOC40OC02OC45MjgtNjguOTI4YTMyIDMyIDAgMCAwLTQ1LjI0OCAwTDEyOCA3NjguMDY0aDc3OC42ODhsLTI0Mi4xMTItMjkwLjU2YTMyIDMyIDAgMCAwLTQ5LjIxNiAwTDQ1OC43NTIgNjY1LjQwOGEzMiAzMiAwIDAgMS00Ny4yMzIgMi4xMTJNMjU2IDM4NGE5NiA5NiAwIDEgMCAxOTIuMDY0LS4wNjRBOTYgOTYgMCAwIDAgMjU2IDM4NFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3BpY3R1cmUtZmlsbGVkLnZ1ZVxudmFyIHBpY3R1cmVfZmlsbGVkX2RlZmF1bHQgPSBwaWN0dXJlX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvcGljdHVyZS1yb3VuZGVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDE5NiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTk2LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE5NiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxOTYgfSBmcm9tIFwidnVlXCI7XG52YXIgcGljdHVyZV9yb3VuZGVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE5Nih7XG4gIG5hbWU6IFwiUGljdHVyZVJvdW5kZWRcIixcbiAgX19uYW1lOiBcInBpY3R1cmUtcm91bmRlZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTk2KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxOTYoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE5NihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01MTIgMTI4YTM4NCAzODQgMCAxIDAgMCA3NjggMzg0IDM4NCAwIDAgMCAwLTc2OG0wLTY0YTQ0OCA0NDggMCAxIDEgMCA4OTYgNDQ4IDQ0OCAwIDAgMSAwLTg5NlwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxOTYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNjQwIDI4OHE2NCAwIDY0IDY0dC02NCA2NHEtNjQgMC02NC02NHQ2NC02NE0yMTQuNjU2IDc5MC42NTZsLTQ1LjMxMi00NS4zMTIgMTg1LjY2NC0xODUuNmE5NiA5NiAwIDAgMSAxMjMuNzEyLTEwLjI0bDEzOC4yNCA5OC42ODhhMzIgMzIgMCAwIDAgMzkuODcyLTIuMTc2TDkwNi42ODggNDIyLjRsNDIuNjI0IDQ3Ljc0NEw2OTkuNTIgNjkzLjY5NmE5NiA5NiAwIDAgMS0xMTkuODA4IDYuNTkybC0xMzguMjQtOTguNzUyYTMyIDMyIDAgMCAwLTQxLjE1MiAzLjQ1NmwtMTg1LjY2NCAxODUuNnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9waWN0dXJlLXJvdW5kZWQudnVlXG52YXIgcGljdHVyZV9yb3VuZGVkX2RlZmF1bHQgPSBwaWN0dXJlX3JvdW5kZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3BpY3R1cmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MTk3IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUxOTcsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMTk3LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazE5NyB9IGZyb20gXCJ2dWVcIjtcbnZhciBwaWN0dXJlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE5Nyh7XG4gIG5hbWU6IFwiUGljdHVyZVwiLFxuICBfX25hbWU6IFwicGljdHVyZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTk3KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxOTcoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE5NyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xNjAgMTYwdjcwNGg3MDRWMTYwem0tMzItNjRoNzY4YTMyIDMyIDAgMCAxIDMyIDMydjc2OGEzMiAzMiAwIDAgMS0zMiAzMkgxMjhhMzIgMzIgMCAwIDEtMzItMzJWMTI4YTMyIDMyIDAgMCAxIDMyLTMyXCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE5NyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zODQgMjg4cTY0IDAgNjQgNjR0LTY0IDY0cS02NCAwLTY0LTY0dDY0LTY0TTE4NS40MDggODc2Ljk5MmwtNTAuODE2LTM4LjkxMkwzNTAuNzIgNTU2LjAzMmE5NiA5NiAwIDAgMSAxMzQuNTkyLTE3Ljg1NmwxLjg1NiAxLjQ3MiAxMjIuODggOTkuMTM2YTMyIDMyIDAgMCAwIDQ0Ljk5Mi00Ljg2NGwyMTYtMjY5Ljg4OCA0OS45MiAzOS45MzYtMjE1LjgwOCAyNjkuODI0LS4yNTYuMzJhOTYgOTYgMCAwIDEtMTM1LjA0IDE0LjQ2NGwtMTIyLjg4LTk5LjA3Mi0uNjQtLjUxMmEzMiAzMiAwIDAgMC00NC44IDUuOTUyelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3BpY3R1cmUudnVlXG52YXIgcGljdHVyZV9kZWZhdWx0ID0gcGljdHVyZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvcGllLWNoYXJ0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDE5OCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTk4LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE5OCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxOTggfSBmcm9tIFwidnVlXCI7XG52YXIgcGllX2NoYXJ0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDE5OCh7XG4gIG5hbWU6IFwiUGllQ2hhcnRcIixcbiAgX19uYW1lOiBcInBpZS1jaGFydFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMTk4KCksIF9jcmVhdGVFbGVtZW50QmxvY2sxOTgoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE5OChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00NDggNjguNDh2NjQuODMyQTM4NC4xMjggMzg0LjEyOCAwIDAgMCA1MTIgODk2YTM4NC4xMjggMzg0LjEyOCAwIDAgMCAzNzguNjg4LTMyMGg2NC43NjhBNDQ4LjEyOCA0NDguMTI4IDAgMCAxIDY0IDUxMiA0NDguMTI4IDQ0OC4xMjggMCAwIDEgNDQ4IDY4LjQ4elwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxOTgoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTc2IDk3LjI4VjQ0OGgzNTAuNzJBMzg0LjA2NCAzODQuMDY0IDAgMCAwIDU3NiA5Ny4yOHpNNTEyIDY0VjMzLjE1MkE0NDggNDQ4IDAgMCAxIDk5MC44NDggNTEySDUxMnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9waWUtY2hhcnQudnVlXG52YXIgcGllX2NoYXJ0X2RlZmF1bHQgPSBwaWVfY2hhcnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3BsYWNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDE5OSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMTk5LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazE5OSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2sxOTkgfSBmcm9tIFwidnVlXCI7XG52YXIgcGxhY2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MTk5KHtcbiAgbmFtZTogXCJQbGFjZVwiLFxuICBfX25hbWU6IFwicGxhY2VcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazE5OSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMTk5KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUxOTkoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDUxMmExOTIgMTkyIDAgMSAwIDAtMzg0IDE5MiAxOTIgMCAwIDAgMCAzODRtMCA2NGEyNTYgMjU2IDAgMSAxIDAtNTEyIDI1NiAyNTYgMCAwIDEgMCA1MTJcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMTk5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA1MTJhMzIgMzIgMCAwIDEgMzIgMzJ2MjU2YTMyIDMyIDAgMSAxLTY0IDBWNTQ0YTMyIDMyIDAgMCAxIDMyLTMyXCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTE5OShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zODQgNjQ5LjA4OHY2NC45NkMyNjkuNzYgNzMyLjM1MiAxOTIgNzcxLjkwNCAxOTIgODAwYzAgMzcuNjk2IDEzOS45MDQgOTYgMzIwIDk2czMyMC01OC4zMDQgMzIwLTk2YzAtMjguMTYtNzcuNzYtNjcuNjQ4LTE5Mi04NS45NTJ2LTY0Ljk2Qzc4OS4xMiA2NzEuMDQgODk2IDczMC4zNjggODk2IDgwMGMwIDg4LjMyLTE3MS45MDQgMTYwLTM4NCAxNjBzLTM4NC03MS42OC0zODQtMTYwYzAtNjkuNjk2IDEwNi44OC0xMjguOTYgMjU2LTE1MC45MTJcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9wbGFjZS52dWVcbnZhciBwbGFjZV9kZWZhdWx0ID0gcGxhY2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3BsYXRmb3JtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIwMCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjAwLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazIwMCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMDAgfSBmcm9tIFwidnVlXCI7XG52YXIgcGxhdGZvcm1fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjAwKHtcbiAgbmFtZTogXCJQbGF0Zm9ybVwiLFxuICBfX25hbWU6IFwicGxhdGZvcm1cIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIwMCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjAwKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMDAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNDQ4IDgzMnYtNjRoMTI4djY0aDE5MnY2NEgyNTZ2LTY0ek0xMjggNzA0VjEyOGg3Njh2NTc2elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3BsYXRmb3JtLnZ1ZVxudmFyIHBsYXRmb3JtX2RlZmF1bHQgPSBwbGF0Zm9ybV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvcGx1cy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyMDEgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTIwMSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMDEsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjAxIH0gZnJvbSBcInZ1ZVwiO1xudmFyIHBsdXNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjAxKHtcbiAgbmFtZTogXCJQbHVzXCIsXG4gIF9fbmFtZTogXCJwbHVzXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMDEoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazIwMShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjAxKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTQ4MCA0ODBWMTI4YTMyIDMyIDAgMCAxIDY0IDB2MzUyaDM1MmEzMiAzMiAwIDEgMSAwIDY0SDU0NHYzNTJhMzIgMzIgMCAxIDEtNjQgMFY1NDRIMTI4YTMyIDMyIDAgMCAxIDAtNjR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvcGx1cy52dWVcbnZhciBwbHVzX2RlZmF1bHQgPSBwbHVzX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9wb2ludGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIwMiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjAyLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazIwMiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMDIgfSBmcm9tIFwidnVlXCI7XG52YXIgcG9pbnRlcl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyMDIoe1xuICBuYW1lOiBcIlBvaW50ZXJcIixcbiAgX19uYW1lOiBcInBvaW50ZXJcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIwMigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjAyKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMDIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTExLjU1MiAxMjhjLTM1LjU4NCAwLTY0LjM4NCAyOC44LTY0LjM4NCA2NC40NDh2NTE2LjQ4TDI3NC4wNDggNTcwLjg4YTk0LjI3MiA5NC4yNzIgMCAwIDAtMTEyLjg5Ni0zLjQ1NiA0NC40MTYgNDQuNDE2IDAgMCAwLTguOTYgNjIuMjA4TDMzMi44IDg3MC40QTY0IDY0IDAgMCAwIDM4NCA4OTZoNTEyVjU3NS4yMzJhNjQgNjQgMCAwIDAtNDUuNjMyLTYxLjMxMmwtMjA1Ljk1Mi02MS43NkE5NiA5NiAwIDAgMSA1NzYgMzYwLjE5MlYxOTIuNDQ4QzU3NiAxNTYuOCA1NDcuMiAxMjggNTExLjU1MiAxMjhNMzU5LjA0IDU1Ni44bDI0LjEyOCAxOS4yVjE5Mi40NDhhMTI4LjQ0OCAxMjguNDQ4IDAgMSAxIDI1Ni44MzIgMHYxNjcuNzQ0YTMyIDMyIDAgMCAwIDIyLjc4NCAzMC42NTZsMjA2LjAxNiA2MS43NkExMjggMTI4IDAgMCAxIDk2MCA1NzUuMjMyVjg5NmE2NCA2NCAwIDAgMS02NCA2NEgzODRhMTI4IDEyOCAwIDAgMS0xMDIuNC01MS4yTDEwMS4wNTYgNjY4LjAzMkExMDguNDE2IDEwOC40MTYgMCAwIDEgMTI4IDUxMi41MTJhMTU4LjI3MiAxNTguMjcyIDAgMCAxIDE4NS45ODQgOC4zMnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9wb2ludGVyLnZ1ZVxudmFyIHBvaW50ZXJfZGVmYXVsdCA9IHBvaW50ZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3Bvc2l0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIwMyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjAzLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazIwMywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMDMgfSBmcm9tIFwidnVlXCI7XG52YXIgcG9zaXRpb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjAzKHtcbiAgbmFtZTogXCJQb3NpdGlvblwiLFxuICBfX25hbWU6IFwicG9zaXRpb25cIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIwMygpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjAzKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMDMoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJtMjQ5LjYgNDE3LjA4OCAzMTkuNzQ0IDQzLjA3MiAzOS4xNjggMzEwLjI3Mkw4NDUuMTIgMTc4Ljg4IDI0OS42IDQxNy4wODh6bS0xMjkuMDI0IDQ3LjE2OGEzMiAzMiAwIDAgMS03LjY4LTYxLjQ0bDc3Ny43OTItMzExLjA0YTMyIDMyIDAgMCAxIDQxLjYgNDEuNmwtMzEwLjMzNiA3NzUuNjhhMzIgMzIgMCAwIDEtNjEuNDQtNy44MDhMNTEyIDUxNi45OTJsLTM5MS40MjQtNTIuNzM2elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3Bvc2l0aW9uLnZ1ZVxudmFyIHBvc2l0aW9uX2RlZmF1bHQgPSBwb3NpdGlvbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvcG9zdGNhcmQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjA0IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyMDQsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjA0LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazIwNCB9IGZyb20gXCJ2dWVcIjtcbnZhciBwb3N0Y2FyZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyMDQoe1xuICBuYW1lOiBcIlBvc3RjYXJkXCIsXG4gIF9fbmFtZTogXCJwb3N0Y2FyZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjA0KCksIF9jcmVhdGVFbGVtZW50QmxvY2syMDQoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIwNChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xNjAgMjI0YTMyIDMyIDAgMCAwLTMyIDMydjUxMmEzMiAzMiAwIDAgMCAzMiAzMmg3MDRhMzIgMzIgMCAwIDAgMzItMzJWMjU2YTMyIDMyIDAgMCAwLTMyLTMyem0wLTY0aDcwNGE5NiA5NiAwIDAgMSA5NiA5NnY1MTJhOTYgOTYgMCAwIDEtOTYgOTZIMTYwYTk2IDk2IDAgMCAxLTk2LTk2VjI1NmE5NiA5NiAwIDAgMSA5Ni05NlwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMDQoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNzA0IDMyMGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDAgMSAwLTEyOE0yODggNDQ4aDI1NnEzMiAwIDMyIDMydC0zMiAzMkgyODhxLTMyIDAtMzItMzJ0MzItMzJtMCAxMjhoMjU2cTMyIDAgMzIgMzJ0LTMyIDMySDI4OHEtMzIgMC0zMi0zMnQzMi0zMlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3Bvc3RjYXJkLnZ1ZVxudmFyIHBvc3RjYXJkX2RlZmF1bHQgPSBwb3N0Y2FyZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvcG91cmluZy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyMDUgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTIwNSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMDUsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjA1IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHBvdXJpbmdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjA1KHtcbiAgbmFtZTogXCJQb3VyaW5nXCIsXG4gIF9fbmFtZTogXCJwb3VyaW5nXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMDUoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazIwNShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjA1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTczOS4zMjggMjkxLjMyOC0zNS4yLTYuNTkyLTEyLjgtMzMuNDA4YTE5Mi4wNjQgMTkyLjA2NCAwIDAgMC0zNjUuOTUyIDIzLjIzMmwtOS45MiA0MC44OTYtNDEuNDcyIDcuMDRhMTc2LjMyIDE3Ni4zMiAwIDAgMC0xNDYuMjQgMTczLjU2OGMwIDk3LjI4IDc4LjcyIDE3NS45MzYgMTc1LjgwOCAxNzUuOTM2aDQwMGExOTIgMTkyIDAgMCAwIDM1Ljc3Ni0zODAuNjcyek05NTkuNTUyIDQ4MGEyNTYgMjU2IDAgMCAxLTI1NiAyNTZoLTQwMEEyMzkuODA4IDIzOS44MDggMCAwIDEgNjMuNzQ0IDQ5Ni4xOTJhMjQwLjMyIDI0MC4zMiAwIDAgMSAxOTkuNDg4LTIzNi44IDI1Ni4xMjggMjU2LjEyOCAwIDAgMSA0ODcuODcyLTMwLjk3NkEyNTYuMDY0IDI1Ni4wNjQgMCAwIDEgOTU5LjU1MiA0ODBNMjI0IDgwMGEzMiAzMiAwIDAgMSAzMiAzMnY5NmEzMiAzMiAwIDEgMS02NCAwdi05NmEzMiAzMiAwIDAgMSAzMi0zMm0xOTIgMGEzMiAzMiAwIDAgMSAzMiAzMnY5NmEzMiAzMiAwIDEgMS02NCAwdi05NmEzMiAzMiAwIDAgMSAzMi0zMm0xOTIgMGEzMiAzMiAwIDAgMSAzMiAzMnY5NmEzMiAzMiAwIDEgMS02NCAwdi05NmEzMiAzMiAwIDAgMSAzMi0zMm0xOTIgMGEzMiAzMiAwIDAgMSAzMiAzMnY5NmEzMiAzMiAwIDEgMS02NCAwdi05NmEzMiAzMiAwIDAgMSAzMi0zMlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3BvdXJpbmcudnVlXG52YXIgcG91cmluZ19kZWZhdWx0ID0gcG91cmluZ192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvcHJlc2VudC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyMDYgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTIwNiwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMDYsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjA2IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHByZXNlbnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjA2KHtcbiAgbmFtZTogXCJQcmVzZW50XCIsXG4gIF9fbmFtZTogXCJwcmVzZW50XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMDYoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazIwNihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjA2KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTQ4MCA4OTZWNjQwSDE5MnYtNjRoMjg4VjMyMEgxOTJ2NTc2em02NCAwaDI4OFYzMjBINTQ0djI1NmgyODh2NjRINTQ0ek0xMjggMjU2aDc2OHY2NzJhMzIgMzIgMCAwIDEtMzIgMzJIMTYwYTMyIDMyIDAgMCAxLTMyLTMyelwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMDYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNOTYgMjU2aDgzMnEzMiAwIDMyIDMydC0zMiAzMkg5NnEtMzIgMC0zMi0zMnQzMi0zMlwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMDYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNDE2IDI1NmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDAgMCAwIDEyOG0wIDY0YTEyOCAxMjggMCAxIDEgMC0yNTYgMTI4IDEyOCAwIDAgMSAwIDI1NlwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMDYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNjA4IDI1NmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDAgMCAwIDEyOG0wIDY0YTEyOCAxMjggMCAxIDEgMC0yNTYgMTI4IDEyOCAwIDAgMSAwIDI1NlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3ByZXNlbnQudnVlXG52YXIgcHJlc2VudF9kZWZhdWx0ID0gcHJlc2VudF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvcHJpY2UtdGFnLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIwNyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjA3LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazIwNywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMDcgfSBmcm9tIFwidnVlXCI7XG52YXIgcHJpY2VfdGFnX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDIwNyh7XG4gIG5hbWU6IFwiUHJpY2VUYWdcIixcbiAgX19uYW1lOiBcInByaWNlLXRhZ1wiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjA3KCksIF9jcmVhdGVFbGVtZW50QmxvY2syMDcoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIwNyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0yMjQgMzE4LjMzNlY4OTZoNTc2VjMxOC4zMzZMNTUyLjUxMiAxMTUuODRhNjQgNjQgMCAwIDAtODEuMDI0IDB6TTU5My4wMjQgNjYuMzA0bDI1OS4yIDIxMi4wOTZBMzIgMzIgMCAwIDEgODY0IDMwMy4xNjhWOTI4YTMyIDMyIDAgMCAxLTMyIDMySDE5MmEzMiAzMiAwIDAgMS0zMi0zMlYzMDMuMTY4YTMyIDMyIDAgMCAxIDExLjcxMi0yNC43NjhsMjU5LjItMjEyLjA5NmExMjggMTI4IDAgMCAxIDE2Mi4xMTIgMHpcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjA3KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA0NDhhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAwIDAgMCAxMjhtMCA2NGExMjggMTI4IDAgMSAxIDAtMjU2IDEyOCAxMjggMCAwIDEgMCAyNTZcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9wcmljZS10YWcudnVlXG52YXIgcHJpY2VfdGFnX2RlZmF1bHQgPSBwcmljZV90YWdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3ByaW50ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjA4IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyMDgsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjA4LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazIwOCB9IGZyb20gXCJ2dWVcIjtcbnZhciBwcmludGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDIwOCh7XG4gIG5hbWU6IFwiUHJpbnRlclwiLFxuICBfX25hbWU6IFwicHJpbnRlclwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjA4KCksIF9jcmVhdGVFbGVtZW50QmxvY2syMDgoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIwOChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0yNTYgNzY4SDEwNS4wMjRjLTE0LjI3MiAwLTE5LjQ1Ni0xLjQ3Mi0yNC42NC00LjI4OGEyOS4wNTYgMjkuMDU2IDAgMCAxLTEyLjE2LTEyLjA5NkM2NS41MzYgNzQ2LjQzMiA2NCA3NDEuMjQ4IDY0IDcyNy4wNFYzNzkuMDcyYzAtNDIuODE2IDQuNDgtNTguMzA0IDEyLjgtNzMuOTg0IDguMzg0LTE1LjYxNiAyMC42NzItMjcuOTA0IDM2LjI4OC0zNi4yODggMTUuNjgtOC4zMiAzMS4xNjgtMTIuOCA3My45ODQtMTIuOEgyNTZWNjRoNTEydjE5Mmg2OC45MjhjNDIuODE2IDAgNTguMzA0IDQuNDggNzMuOTg0IDEyLjggMTUuNjE2IDguMzg0IDI3LjkwNCAyMC42NzIgMzYuMjg4IDM2LjI4OCA4LjMyIDE1LjY4IDEyLjggMzEuMTY4IDEyLjggNzMuOTg0djM0Ny45MDRjMCAxNC4yNzItMS40NzIgMTkuNDU2LTQuMjg4IDI0LjY0YTI5LjA1NiAyOS4wNTYgMCAwIDEtMTIuMDk2IDEyLjE2Yy01LjE4NCAyLjc1Mi0xMC4zNjggNC4yMjQtMjQuNjQgNC4yMjRINzY4djE5MkgyNTZ6bTY0LTE5MnYzMjBoMzg0VjU3NnptLTY0IDEyOFY1MTJoNTEydjE5MmgxMjhWMzc5LjA3MmMwLTI5LjM3Ni0xLjQwOC0zNi40OC01LjI0OC00My43NzZhMjMuMjk2IDIzLjI5NiAwIDAgMC0xMC4wNDgtMTAuMDQ4Yy03LjIzMi0zLjg0LTE0LjQtNS4yNDgtNDMuNzc2LTUuMjQ4SDE4Ny4wNzJjLTI5LjM3NiAwLTM2LjQ4IDEuNDA4LTQzLjc3NiA1LjI0OGEyMy4yOTYgMjMuMjk2IDAgMCAwLTEwLjA0OCAxMC4wNDhjLTMuODQgNy4yMzItNS4yNDggMTQuNC01LjI0OCA0My43NzZWNzA0em02NC00NDhoMzg0VjEyOEgzMjB6bS02NCAxMjhoNjR2NjRoLTY0em0xMjggMGg2NHY2NGgtNjR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvcHJpbnRlci52dWVcbnZhciBwcmludGVyX2RlZmF1bHQgPSBwcmludGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9wcm9tb3Rpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjA5IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyMDksIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjA5LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazIwOSB9IGZyb20gXCJ2dWVcIjtcbnZhciBwcm9tb3Rpb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjA5KHtcbiAgbmFtZTogXCJQcm9tb3Rpb25cIixcbiAgX19uYW1lOiBcInByb21vdGlvblwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjA5KCksIF9jcmVhdGVFbGVtZW50QmxvY2syMDkoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIwOShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIm02NCA0NDggODMyLTMyMC0xMjggNzA0LTQ0Ni4wOC0yNDMuMzI4TDgzMiAxOTIgMjQyLjgxNiA1NDUuNDcyem0yNTYgNTEyVjY1Ny4wMjRMNTEyIDc2OHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9wcm9tb3Rpb24udnVlXG52YXIgcHJvbW90aW9uX2RlZmF1bHQgPSBwcm9tb3Rpb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3F1YXJ0ei13YXRjaC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyMTAgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTIxMCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMTAsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjEwIH0gZnJvbSBcInZ1ZVwiO1xudmFyIHF1YXJ0el93YXRjaF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyMTAoe1xuICBuYW1lOiBcIlF1YXJ0eldhdGNoXCIsXG4gIF9fbmFtZTogXCJxdWFydHotd2F0Y2hcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIxMCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjEwKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICBcInhtbDpzcGFjZVwiOiBcInByZXNlcnZlXCIsXG4gICAgICBzdHlsZTogeyBcImVuYWJsZS1iYWNrZ3JvdW5kXCI6IFwibmV3IDAgMCAxMDI0IDEwMjRcIiB9LFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjEwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTQyMi4wMiA2MDIuMDF2LS4wM2MtNi42OC01Ljk5LTE0LjM1LTguODMtMjMuMDEtOC41MS04LjY3LjMyLTE2LjE3IDMuNjYtMjIuNSAxMC4wMi02LjMzIDYuMzYtOS41IDEzLjctOS41IDIyLjAyczMgMTUuODIgOC45OSAyMi41YzguNjggOC42OCAxOS4wMiAxMS4zNSAzMS4wMSA4czE5LjQ5LTEwLjg1IDIyLjUtMjIuNWMzLjAxLTExLjY1LjUxLTIyLjE1LTcuNDktMzEuNDl6TTM4NCA1MTJjMC05LjM1LTMtMTcuMDItOC45OS0yMy4wMS02LTUuOTktMTMuNjYtOC45OS0yMy4wMS04Ljk5LTkuMzUgMC0xNy4wMiAzLTIzLjAxIDguOTktNS45OSA2LTguOTkgMTMuNjYtOC45OSAyMy4wMXMzIDE3LjAyIDguOTkgMjMuMDFjNiA1Ljk5IDEzLjY2IDguOTkgMjMuMDEgOC45OSA5LjM1IDAgMTcuMDItMyAyMy4wMS04Ljk5IDUuOTktNiA4Ljk5LTEzLjY3IDguOTktMjMuMDFtNi41My04Mi40OWMxMS42NSAzLjAxIDIyLjE1LjUxIDMxLjQ5LTcuNDloLjA0YzUuOTktNi42OCA4LjgzLTE0LjM0IDguNTEtMjMuMDEtLjMyLTguNjctMy42Ni0xNi4xNi0xMC4wMi0yMi41LTYuMzYtNi4zMy0xMy43LTkuNS0yMi4wMi05LjVzLTE1LjgyIDMtMjIuNSA4Ljk5Yy04LjY4IDguNjktMTEuMzUgMTkuMDItOCAzMS4wMSAzLjM1IDExLjk5IDEwLjg1IDE5LjQ5IDIyLjUgMjIuNXptMjQyLjk0IDBjMTEuNjctMy4wMyAxOS4wMS0xMC4zNyAyMi4wMi0yMi4wMiAzLjAxLTExLjY1LjUxLTIyLjE1LTcuNDktMzEuNDloLjAxYy02LjY4LTUuOTktMTQuMTgtOC45OS0yMi41LTguOTlzLTE1LjY2IDMuMTYtMjIuMDIgOS41Yy02LjM2IDYuMzQtOS43IDEzLjg0LTEwLjAyIDIyLjUtLjMyIDguNjYgMi41MiAxNi4zMyA4LjUxIDIzLjAxIDkuMzIgOC4wMiAxOS44MiAxMC41MiAzMS40OSA3LjQ5TTUxMiA2NDBjLTkuMzUgMC0xNy4wMiAzLTIzLjAxIDguOTktNS45OSA2LTguOTkgMTMuNjYtOC45OSAyMy4wMXMzIDE3LjAyIDguOTkgMjMuMDFjNiA1Ljk5IDEzLjY3IDguOTkgMjMuMDEgOC45OSA5LjM1IDAgMTcuMDItMyAyMy4wMS04Ljk5IDUuOTktNiA4Ljk5LTEzLjY2IDguOTktMjMuMDFzLTMtMTcuMDItOC45OS0yMy4wMWMtNi01Ljk5LTEzLjY2LTguOTktMjMuMDEtOC45OW0xODMuMDEtMTUxLjAxYy02LTUuOTktMTMuNjYtOC45OS0yMy4wMS04Ljk5cy0xNy4wMiAzLTIzLjAxIDguOTljLTUuOTkgNi04Ljk5IDEzLjY2LTguOTkgMjMuMDFzMyAxNy4wMiA4Ljk5IDIzLjAxYzYgNS45OSAxMy42NiA4Ljk5IDIzLjAxIDguOTlzMTcuMDItMyAyMy4wMS04Ljk5YzUuOTktNiA4Ljk5LTEzLjY3IDguOTktMjMuMDEgMC05LjM1LTMtMTcuMDItOC45OS0yMy4wMVwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMTAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNODMyIDUxMmMtMi05MC42Ny0zMy4xNy0xNjYuMTctOTMuNS0yMjYuNS0yMC40My0yMC40Mi00Mi42LTM3LjQ5LTY2LjUtNTEuMjNWNjRIMzUydjE3MC4yNmMtMjMuOSAxMy43NC00Ni4wNyAzMC44MS02Ni41IDUxLjI0LTYwLjMzIDYwLjMzLTkxLjQ5IDEzNS44My05My41IDIyNi41IDIgOTAuNjcgMzMuMTcgMTY2LjE3IDkzLjUgMjI2LjUgMjAuNDMgMjAuNDMgNDIuNiAzNy41IDY2LjUgNTEuMjRWOTYwaDMyMFY3ODkuNzRjMjMuOS0xMy43NCA0Ni4wNy0zMC44MSA2Ni41LTUxLjI0IDYwLjMzLTYwLjM0IDkxLjQ5LTEzNS44MyA5My41LTIyNi41TTQxNiAxMjhoMTkydjc4LjY5Yy0yOS44NS05LjAzLTYxLjg1LTEzLjkzLTk2LTE0LjY5LTM0LjE1Ljc1LTY2LjE1IDUuNjUtOTYgMTQuNjh6bTE5MiA3NjhINDE2di03OC42OGMyOS44NSA5LjAzIDYxLjg1IDEzLjkzIDk2IDE0LjY4IDM0LjE1LS43NSA2Ni4xNS01LjY1IDk2LTE0LjY4em0tOTYtMTI4Yy03Mi42Ni0yLjAxLTEzMi45OS0yNy4wMS0xODAuOTktNzUuMDFTMjU4LjAxIDU4NC42NiAyNTYgNTEyYzIuMDEtNzIuNjYgMjcuMDEtMTMyLjk5IDc1LjAxLTE4MC45OVM0MzkuMzQgMjU4LjAxIDUxMiAyNTZjNzIuNjYgMi4wMSAxMzIuOTkgMjcuMDEgMTgwLjk5IDc1LjAxUzc2NS45OSA0MzkuMzQgNzY4IDUxMmMtMi4wMSA3Mi42Ni0yNy4wMSAxMzIuOTktNzUuMDEgMTgwLjk5UzU4NC42NiA3NjUuOTkgNTEyIDc2OFwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMTAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDMyMGMtOS4zNSAwLTE3LjAyIDMtMjMuMDEgOC45OS01Ljk5IDYtOC45OSAxMy42Ni04Ljk5IDIzLjAxIDAgOS4zNSAzIDE3LjAyIDguOTkgMjMuMDEgNiA1Ljk5IDEzLjY3IDguOTkgMjMuMDEgOC45OSA5LjM1IDAgMTcuMDItMyAyMy4wMS04Ljk5IDUuOTktNiA4Ljk5LTEzLjY2IDguOTktMjMuMDEgMC05LjM1LTMtMTcuMDItOC45OS0yMy4wMS02LTUuOTktMTMuNjYtOC45OS0yMy4wMS04Ljk5bTExMi45OSAyNzMuNWMtOC42Ni0uMzItMTYuMzMgMi41Mi0yMy4wMSA4LjUxLTcuOTggOS4zMi0xMC40OCAxOS44Mi03LjQ5IDMxLjQ5czEwLjQ5IDE5LjE3IDIyLjUgMjIuNSAyMi4zNS42NiAzMS4wMS04di4wNGM1Ljk5LTYuNjggOC45OS0xNC4xOCA4Ljk5LTIyLjVzLTMuMTYtMTUuNjYtOS41LTIyLjAyLTEzLjg0LTkuNy0yMi41LTEwLjAyXCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvcXVhcnR6LXdhdGNoLnZ1ZVxudmFyIHF1YXJ0el93YXRjaF9kZWZhdWx0ID0gcXVhcnR6X3dhdGNoX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9xdWVzdGlvbi1maWxsZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjExIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyMTEsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjExLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazIxMSB9IGZyb20gXCJ2dWVcIjtcbnZhciBxdWVzdGlvbl9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjExKHtcbiAgbmFtZTogXCJRdWVzdGlvbkZpbGxlZFwiLFxuICBfX25hbWU6IFwicXVlc3Rpb24tZmlsbGVkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMTEoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazIxMShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjExKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA2NGE0NDggNDQ4IDAgMSAxIDAgODk2IDQ0OCA0NDggMCAwIDEgMC04OTZtMjMuNzQ0IDE5MS40ODhjLTUyLjA5NiAwLTkyLjkyOCAxNC43ODQtMTIzLjIgNDQuMzUyLTMwLjk3NiAyOS41NjgtNDUuNzYgNzAuNC00NS43NiAxMjIuNDk2aDgwLjI1NmMwLTI5LjU2OCA1LjYzMi01Mi44IDE3LjYtNjguOTkyIDEzLjM3Ni0xOS43MTIgMzUuMi0yOC44NjQgNjYuMTc2LTI4Ljg2NCAyMy45MzYgMCA0Mi45NDQgNi4zMzYgNTYuMzIgMTkuNzEyIDEyLjY3MiAxMy4zNzYgMTkuNzEyIDMxLjY4IDE5LjcxMiA1NC45MTIgMCAxNy42LTYuMzM2IDM0LjQ5Ni0xOS4wMDggNDkuOTg0bC04LjQ0OCA5Ljg1NmMtNDUuNzYgNDAuODMyLTczLjIxNiA3MC40LTgyLjM2OCA4OS40MDgtOS44NTYgMTkuMDA4LTE0LjA4IDQyLjI0LTE0LjA4IDY4Ljk5MnY5Ljg1Nmg4MC45NnYtOS44NTZjMC0xNi44OTYgMy41Mi0zMS42OCAxMC41Ni00NS43NiA2LjMzNi0xMi42NzIgMTUuNDg4LTI0LjY0IDI4LjE2LTM1LjIgMzMuNzkyLTI5LjU2OCA1NC4yMDgtNDguNTc2IDYwLjU0NC01NS42MTYgMTYuODk2LTIyLjUyOCAyNi4wNDgtNTEuMzkyIDI2LjA0OC04Ni41OTIgMC00Mi45NDQtMTQuMDgtNzYuNzM2LTQyLjI0LTEwMS4zNzYtMjguMTYtMjUuMzQ0LTY1LjQ3Mi0zNy4zMTItMTExLjIzMi0zNy4zMTJ6bS0xMi42NzIgNDA2LjIwOGE1NC4yNzIgNTQuMjcyIDAgMCAwLTM4LjcyIDE0Ljc4NCA0OS40MDggNDkuNDA4IDAgMCAwLTE1LjQ4OCAzOC4wMTZjMCAxNS40ODggNC45MjggMjguMTYgMTUuNDg4IDM4LjAxNkE1NC44NDggNTQuODQ4IDAgMCAwIDUyMy4wNzIgNzY4YzE1LjQ4OCAwIDI4LjE2LTQuOTI4IDM4LjcyLTE0Ljc4NGE1MS41MiA1MS41MiAwIDAgMCAxNi4xOTItMzguNzIgNTEuOTY4IDUxLjk2OCAwIDAgMC0xNS40ODgtMzguMDE2IDU1LjkzNiA1NS45MzYgMCAwIDAtMzkuNDI0LTE0Ljc4NHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9xdWVzdGlvbi1maWxsZWQudnVlXG52YXIgcXVlc3Rpb25fZmlsbGVkX2RlZmF1bHQgPSBxdWVzdGlvbl9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3JhbmsudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjEyIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyMTIsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjEyLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazIxMiB9IGZyb20gXCJ2dWVcIjtcbnZhciByYW5rX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDIxMih7XG4gIG5hbWU6IFwiUmFua1wiLFxuICBfX25hbWU6IFwicmFua1wiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjEyKCksIF9jcmVhdGVFbGVtZW50QmxvY2syMTIoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIxMihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIm0xODYuNDk2IDU0NCA0MS40MDggNDEuMzQ0YTMyIDMyIDAgMSAxLTQ1LjI0OCA0NS4zMTJsLTk2LTk2YTMyIDMyIDAgMCAxIDAtNDUuMzEybDk2LTk2YTMyIDMyIDAgMSAxIDQ1LjI0OCA0NS4zMTJMMTg2LjQ5NiA0ODBoMjkwLjgxNlYxODYuNDMybC00MS40NzIgNDEuNDcyYTMyIDMyIDAgMSAxLTQ1LjI0OC00NS4xODRsOTYtOTYuMTI4YTMyIDMyIDAgMCAxIDQ1LjMxMiAwbDk2IDk2LjA2NGEzMiAzMiAwIDAgMS00NS4yNDggNDUuMTg0bC00MS4zNDQtNDEuMjhWNDgwSDgzMmwtNDEuMzQ0LTQxLjM0NGEzMiAzMiAwIDAgMSA0NS4yNDgtNDUuMzEybDk2IDk2YTMyIDMyIDAgMCAxIDAgNDUuMzEybC05NiA5NmEzMiAzMiAwIDAgMS00NS4yNDgtNDUuMzEyTDgzMiA1NDRINTQxLjMxMnYyOTMuNDRsNDEuMzQ0LTQxLjI4YTMyIDMyIDAgMSAxIDQ1LjI0OCA0NS4yNDhsLTk2IDk2YTMyIDMyIDAgMCAxLTQ1LjMxMiAwbC05Ni05NmEzMiAzMiAwIDEgMSA0NS4zMTItNDUuMjQ4bDQxLjQwOCA0MS40MDhWNTQ0SDE4Ni40OTZ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvcmFuay52dWVcbnZhciByYW5rX2RlZmF1bHQgPSByYW5rX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9yZWFkaW5nLWxhbXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjEzIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyMTMsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjEzLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazIxMyB9IGZyb20gXCJ2dWVcIjtcbnZhciByZWFkaW5nX2xhbXBfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjEzKHtcbiAgbmFtZTogXCJSZWFkaW5nTGFtcFwiLFxuICBfX25hbWU6IFwicmVhZGluZy1sYW1wXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMTMoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazIxMyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjEzKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTM1MiA4OTZoMzIwcTMyIDAgMzIgMzJ0LTMyIDMySDM1MnEtMzIgMC0zMi0zMnQzMi0zMm0tNDQuNjcyLTc2OC05OS41MiA0NDhoNjA4LjM4NGwtOTkuNTItNDQ4em0tMjUuNi02NGg0NjAuNjA4YTMyIDMyIDAgMCAxIDMxLjIzMiAyNS4wODhsMTEzLjc5MiA1MTJBMzIgMzIgMCAwIDEgODU2LjEyOCA2NDBIMTY3Ljg3MmEzMiAzMiAwIDAgMS0zMS4yMzItMzguOTEybDExMy43OTItNTEyQTMyIDMyIDAgMCAxIDI4MS42NjQgNjR6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIxMyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk02NzIgNTc2cTMyIDAgMzIgMzJ2MTI4cTAgMzItMzIgMzJ0LTMyLTMyVjYwOHEwLTMyIDMyLTMybS0xOTItLjA2NGg2NFY5NjBoLTY0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3JlYWRpbmctbGFtcC52dWVcbnZhciByZWFkaW5nX2xhbXBfZGVmYXVsdCA9IHJlYWRpbmdfbGFtcF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvcmVhZGluZy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyMTQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTIxNCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMTQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjE0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHJlYWRpbmdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjE0KHtcbiAgbmFtZTogXCJSZWFkaW5nXCIsXG4gIF9fbmFtZTogXCJyZWFkaW5nXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMTQoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazIxNChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjE0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTUxMiA4NjMuMzYgMzg0LTU0Ljg0OHYtNjM4LjcyTDUyNS41NjggMjIyLjcyYTk2IDk2IDAgMCAxLTI3LjEzNiAwTDEyOCAxNjkuNzkydjYzOC43MnpNMTM3LjAyNCAxMDYuNDMybDM3MC40MzIgNTIuOTI4YTMyIDMyIDAgMCAwIDkuMDg4IDBsMzcwLjQzMi01Mi45MjhBNjQgNjQgMCAwIDEgOTYwIDE2OS43OTJ2NjM4LjcyYTY0IDY0IDAgMCAxLTU0Ljk3NiA2My4zNmwtMzg4LjQ4IDU1LjQ4OGEzMiAzMiAwIDAgMS05LjA4OCAwbC0zODguNDgtNTUuNDg4QTY0IDY0IDAgMCAxIDY0IDgwOC41MTJ2LTYzOC43MmE2NCA2NCAwIDAgMSA3My4wMjQtNjMuMzZ6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIxNChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00ODAgMTkyaDY0djcwNGgtNjR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvcmVhZGluZy52dWVcbnZhciByZWFkaW5nX2RlZmF1bHQgPSByZWFkaW5nX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9yZWZyZXNoLWxlZnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjE1IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyMTUsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjE1LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazIxNSB9IGZyb20gXCJ2dWVcIjtcbnZhciByZWZyZXNoX2xlZnRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjE1KHtcbiAgbmFtZTogXCJSZWZyZXNoTGVmdFwiLFxuICBfX25hbWU6IFwicmVmcmVzaC1sZWZ0XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMTUoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazIxNShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjE1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTI4OS4wODggMjk2LjcwNGg5Mi45OTJhMzIgMzIgMCAwIDEgMCA2NEgyMzIuOTZhMzIgMzIgMCAwIDEtMzItMzJWMTc5LjcxMmEzMiAzMiAwIDAgMSA2NCAwdjUwLjU2YTM4NCAzODQgMCAwIDEgNjQzLjg0IDI4Mi44OCAzODQgMzg0IDAgMCAxLTM4My45MzYgMzg0IDM4NCAzODQgMCAwIDEtMzg0LTM4NGg2NGEzMjAgMzIwIDAgMSAwIDY0MCAwIDMyMCAzMjAgMCAwIDAtNTU1LjcxMi0yMTYuNDQ4elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3JlZnJlc2gtbGVmdC52dWVcbnZhciByZWZyZXNoX2xlZnRfZGVmYXVsdCA9IHJlZnJlc2hfbGVmdF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvcmVmcmVzaC1yaWdodC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyMTYgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTIxNiwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMTYsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjE2IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHJlZnJlc2hfcmlnaHRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjE2KHtcbiAgbmFtZTogXCJSZWZyZXNoUmlnaHRcIixcbiAgX19uYW1lOiBcInJlZnJlc2gtcmlnaHRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIxNigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjE2KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMTYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNzg0LjUxMiAyMzAuMjcydi01MC41NmEzMiAzMiAwIDEgMSA2NCAwdjE0OS4wNTZhMzIgMzIgMCAwIDEtMzIgMzJINjY3LjUyYTMyIDMyIDAgMSAxIDAtNjRoOTIuOTkyQTMyMCAzMjAgMCAxIDAgNTI0LjggODMzLjE1MmEzMjAgMzIwIDAgMCAwIDMyMC0zMjBoNjRhMzg0IDM4NCAwIDAgMS0zODQgMzg0IDM4NCAzODQgMCAwIDEtMzg0LTM4NCAzODQgMzg0IDAgMCAxIDY0My43MTItMjgyLjg4elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3JlZnJlc2gtcmlnaHQudnVlXG52YXIgcmVmcmVzaF9yaWdodF9kZWZhdWx0ID0gcmVmcmVzaF9yaWdodF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvcmVmcmVzaC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyMTcgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTIxNywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMTcsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjE3IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHJlZnJlc2hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjE3KHtcbiAgbmFtZTogXCJSZWZyZXNoXCIsXG4gIF9fbmFtZTogXCJyZWZyZXNoXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMTcoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazIxNyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjE3KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTc3MS43NzYgNzk0Ljg4QTM4NCAzODQgMCAwIDEgMTI4IDUxMmg2NGEzMjAgMzIwIDAgMCAwIDU1NS43MTIgMjE2LjQ0OEg2NTQuNzJhMzIgMzIgMCAxIDEgMC02NGgxNDkuMDU2YTMyIDMyIDAgMCAxIDMyIDMydjE0OC45MjhhMzIgMzIgMCAxIDEtNjQgMHYtNTAuNTZ6TTI3Ni4yODggMjk1LjYxNmg5Mi45OTJhMzIgMzIgMCAwIDEgMCA2NEgyMjAuMTZhMzIgMzIgMCAwIDEtMzItMzJWMTc4LjU2YTMyIDMyIDAgMCAxIDY0IDB2NTAuNTZBMzg0IDM4NCAwIDAgMSA4OTYuMTI4IDUxMmgtNjRhMzIwIDMyMCAwIDAgMC01NTUuNzc2LTIxNi4zODR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvcmVmcmVzaC52dWVcbnZhciByZWZyZXNoX2RlZmF1bHQgPSByZWZyZXNoX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9yZWZyaWdlcmF0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjE4IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyMTgsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjE4LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazIxOCB9IGZyb20gXCJ2dWVcIjtcbnZhciByZWZyaWdlcmF0b3JfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjE4KHtcbiAgbmFtZTogXCJSZWZyaWdlcmF0b3JcIixcbiAgX19uYW1lOiBcInJlZnJpZ2VyYXRvclwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjE4KCksIF9jcmVhdGVFbGVtZW50QmxvY2syMTgoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIxOChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0yNTYgNDQ4aDUxMlYxNjBhMzIgMzIgMCAwIDAtMzItMzJIMjg4YTMyIDMyIDAgMCAwLTMyIDMyem0wIDY0djM1MmEzMiAzMiAwIDAgMCAzMiAzMmg0NDhhMzIgMzIgMCAwIDAgMzItMzJWNTEyem0zMi00NDhoNDQ4YTk2IDk2IDAgMCAxIDk2IDk2djcwNGE5NiA5NiAwIDAgMS05NiA5NkgyODhhOTYgOTYgMCAwIDEtOTYtOTZWMTYwYTk2IDk2IDAgMCAxIDk2LTk2bTMyIDIyNGg2NHY5NmgtNjR6bTAgMjg4aDY0djk2aC02NHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9yZWZyaWdlcmF0b3IudnVlXG52YXIgcmVmcmlnZXJhdG9yX2RlZmF1bHQgPSByZWZyaWdlcmF0b3JfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3JlbW92ZS1maWxsZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjE5IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyMTksIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjE5LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazIxOSB9IGZyb20gXCJ2dWVcIjtcbnZhciByZW1vdmVfZmlsbGVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDIxOSh7XG4gIG5hbWU6IFwiUmVtb3ZlRmlsbGVkXCIsXG4gIF9fbmFtZTogXCJyZW1vdmUtZmlsbGVkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMTkoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazIxOShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjE5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA2NGE0NDggNDQ4IDAgMSAxIDAgODk2IDQ0OCA0NDggMCAwIDEgMC04OTZNMjg4IDUxMmEzOC40IDM4LjQgMCAwIDAgMzguNCAzOC40aDM3MS4yYTM4LjQgMzguNCAwIDAgMCAwLTc2LjhIMzI2LjRBMzguNCAzOC40IDAgMCAwIDI4OCA1MTJcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9yZW1vdmUtZmlsbGVkLnZ1ZVxudmFyIHJlbW92ZV9maWxsZWRfZGVmYXVsdCA9IHJlbW92ZV9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3JlbW92ZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyMjAgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTIyMCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMjAsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjIwIH0gZnJvbSBcInZ1ZVwiO1xudmFyIHJlbW92ZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyMjAoe1xuICBuYW1lOiBcIlJlbW92ZVwiLFxuICBfX25hbWU6IFwicmVtb3ZlXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMjAoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazIyMChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjIwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTM1MiA0ODBoMzIwYTMyIDMyIDAgMSAxIDAgNjRIMzUyYTMyIDMyIDAgMCAxIDAtNjRcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjIwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA4OTZhMzg0IDM4NCAwIDEgMCAwLTc2OCAzODQgMzg0IDAgMCAwIDAgNzY4bTAgNjRhNDQ4IDQ0OCAwIDEgMSAwLTg5NiA0NDggNDQ4IDAgMCAxIDAgODk2XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvcmVtb3ZlLnZ1ZVxudmFyIHJlbW92ZV9kZWZhdWx0ID0gcmVtb3ZlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9yaWdodC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyMjEgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTIyMSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMjEsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjIxIH0gZnJvbSBcInZ1ZVwiO1xudmFyIHJpZ2h0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDIyMSh7XG4gIG5hbWU6IFwiUmlnaHRcIixcbiAgX19uYW1lOiBcInJpZ2h0XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMjEoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazIyMShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjIxKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTc1NC43NTIgNDgwSDE2MGEzMiAzMiAwIDEgMCAwIDY0aDU5NC43NTJMNTIxLjM0NCA3NzcuMzQ0YTMyIDMyIDAgMCAwIDQ1LjMxMiA0NS4zMTJsMjg4LTI4OGEzMiAzMiAwIDAgMCAwLTQ1LjMxMmwtMjg4LTI4OGEzMiAzMiAwIDEgMC00NS4zMTIgNDUuMzEyelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3JpZ2h0LnZ1ZVxudmFyIHJpZ2h0X2RlZmF1bHQgPSByaWdodF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvc2NhbGUtdG8tb3JpZ2luYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjIyIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyMjIsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjIyLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazIyMiB9IGZyb20gXCJ2dWVcIjtcbnZhciBzY2FsZV90b19vcmlnaW5hbF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyMjIoe1xuICBuYW1lOiBcIlNjYWxlVG9PcmlnaW5hbFwiLFxuICBfX25hbWU6IFwic2NhbGUtdG8tb3JpZ2luYWxcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIyMigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjIyKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMjIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNODEzLjE3NiAxODAuNzA2YTYwLjIzNSA2MC4yMzUgMCAwIDEgNjAuMjM2IDYwLjIzNXY0ODEuODgzYTYwLjIzNSA2MC4yMzUgMCAwIDEtNjAuMjM2IDYwLjIzNUgyMTAuODI0YTYwLjIzNSA2MC4yMzUgMCAwIDEtNjAuMjM2LTYwLjIzNVYyNDAuOTRhNjAuMjM1IDYwLjIzNSAwIDAgMSA2MC4yMzYtNjAuMjM1aDYwMi4zNTJ6bTAtNjAuMjM1SDIxMC44MjRBMTIwLjQ3IDEyMC40NyAwIDAgMCA5MC4zNTMgMjQwLjk0djQ4MS44ODNhMTIwLjQ3IDEyMC40NyAwIDAgMCAxMjAuNDcgMTIwLjQ3aDYwMi4zNTNhMTIwLjQ3IDEyMC40NyAwIDAgMCAxMjAuNDcxLTEyMC40N1YyNDAuOTRhMTIwLjQ3IDEyMC40NyAwIDAgMC0xMjAuNDctMTIwLjQ3em0tMTIwLjQ3IDE4MC43MDVhMzAuMTE4IDMwLjExOCAwIDAgMC0zMC4xMTggMzAuMTE4djMwMS4xNzdhMzAuMTE4IDMwLjExOCAwIDAgMCA2MC4yMzYgMFYzMzEuMjk0YTMwLjExOCAzMC4xMTggMCAwIDAtMzAuMTE4LTMwLjExOHptLTM2MS40MTIgMGEzMC4xMTggMzAuMTE4IDAgMCAwLTMwLjExOCAzMC4xMTh2MzAxLjE3N2EzMC4xMTggMzAuMTE4IDAgMSAwIDYwLjIzNiAwVjMzMS4yOTRhMzAuMTE4IDMwLjExOCAwIDAgMC0zMC4xMTgtMzAuMTE4TTUxMiAzNjEuNDEyYTMwLjExOCAzMC4xMTggMCAwIDAtMzAuMTE4IDMwLjExN3YzMC4xMThhMzAuMTE4IDMwLjExOCAwIDAgMCA2MC4yMzYgMFYzOTEuNTNBMzAuMTE4IDMwLjExOCAwIDAgMCA1MTIgMzYxLjQxMk01MTIgNTEyYTMwLjExOCAzMC4xMTggMCAwIDAtMzAuMTE4IDMwLjExOHYzMC4xMTdhMzAuMTE4IDMwLjExOCAwIDAgMCA2MC4yMzYgMHYtMzAuMTE3QTMwLjExOCAzMC4xMTggMCAwIDAgNTEyIDUxMlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3NjYWxlLXRvLW9yaWdpbmFsLnZ1ZVxudmFyIHNjYWxlX3RvX29yaWdpbmFsX2RlZmF1bHQgPSBzY2FsZV90b19vcmlnaW5hbF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvc2Nob29sLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIyMyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjIzLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazIyMywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMjMgfSBmcm9tIFwidnVlXCI7XG52YXIgc2Nob29sX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDIyMyh7XG4gIG5hbWU6IFwiU2Nob29sXCIsXG4gIF9fbmFtZTogXCJzY2hvb2xcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIyMygpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjIzKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMjMoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjI0IDEyOHY3MDRoNTc2VjEyOHptLTMyLTY0aDY0MGEzMiAzMiAwIDAgMSAzMiAzMnY3NjhhMzIgMzIgMCAwIDEtMzIgMzJIMTkyYTMyIDMyIDAgMCAxLTMyLTMyVjk2YTMyIDMyIDAgMCAxIDMyLTMyXCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIyMyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk02NCA4MzJoODk2djY0SDY0em0yNTYtNjQwaDEyOHY5NkgzMjB6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIyMyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zODQgODMyaDI1NnYtNjRhMTI4IDEyOCAwIDEgMC0yNTYgMHptMTI4LTI1NmExOTIgMTkyIDAgMCAxIDE5MiAxOTJ2MTI4SDMyMFY3NjhhMTkyIDE5MiAwIDAgMSAxOTItMTkyTTMyMCAzODRoMTI4djk2SDMyMHptMjU2LTE5MmgxMjh2OTZINTc2em0wIDE5MmgxMjh2OTZINTc2elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3NjaG9vbC52dWVcbnZhciBzY2hvb2xfZGVmYXVsdCA9IHNjaG9vbF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvc2Npc3Nvci52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyMjQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTIyNCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMjQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjI0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHNjaXNzb3JfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjI0KHtcbiAgbmFtZTogXCJTY2lzc29yXCIsXG4gIF9fbmFtZTogXCJzY2lzc29yXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMjQoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazIyNChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjI0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTUxMi4wNjQgNTc4LjM2OC0xMDYuODggMTUyLjc2OGExNjAgMTYwIDAgMSAxLTIzLjM2LTc4LjIwOEw0NzIuOTYgNTIyLjU2IDE5Ni44NjQgMTI4LjI1NmEzMiAzMiAwIDEgMSA1Mi40OC0zNi43MzZsMzkzLjAyNCA1NjEuMzQ0YTE2MCAxNjAgMCAxIDEtMjMuMzYgNzguMjA4bC0xMDYuODgtMTUyLjcwNHptNTQuNC0xODkuMjQ4IDIwOC4zODQtMjk3LjZhMzIgMzIgMCAwIDEgNTIuNDggMzYuNzM2bC0yMjEuNzYgMzE2LjY3Mi0zOS4wNC01NS44MDh6bS0zNzYuMzIgNDI1Ljg1NmE5NiA5NiAwIDEgMCAxMTAuMTQ0LTE1Ny4yNDggOTYgOTYgMCAwIDAtMTEwLjA4IDE1Ny4yNDh6bTY0My44NCAwYTk2IDk2IDAgMSAwLTExMC4wOC0xNTcuMjQ4IDk2IDk2IDAgMCAwIDExMC4wOCAxNTcuMjQ4XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc2Npc3Nvci52dWVcbnZhciBzY2lzc29yX2RlZmF1bHQgPSBzY2lzc29yX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjI1IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyMjUsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjI1LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazIyNSB9IGZyb20gXCJ2dWVcIjtcbnZhciBzZWFyY2hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjI1KHtcbiAgbmFtZTogXCJTZWFyY2hcIixcbiAgX19uYW1lOiBcInNlYXJjaFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjI1KCksIF9jcmVhdGVFbGVtZW50QmxvY2syMjUoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIyNShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIm03OTUuOTA0IDc1MC43MiAxMjQuOTkyIDEyNC45MjhhMzIgMzIgMCAwIDEtNDUuMjQ4IDQ1LjI0OEw3NTAuNjU2IDc5NS45MDRhNDE2IDQxNiAwIDEgMSA0NS4yNDgtNDUuMjQ4ek00ODAgODMyYTM1MiAzNTIgMCAxIDAgMC03MDQgMzUyIDM1MiAwIDAgMCAwIDcwNFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3NlYXJjaC52dWVcbnZhciBzZWFyY2hfZGVmYXVsdCA9IHNlYXJjaF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvc2VsZWN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIyNiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjI2LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazIyNiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMjYgfSBmcm9tIFwidnVlXCI7XG52YXIgc2VsZWN0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDIyNih7XG4gIG5hbWU6IFwiU2VsZWN0XCIsXG4gIF9fbmFtZTogXCJzZWxlY3RcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIyNigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjI2KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMjYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNzcuMjQ4IDQxNS4wNGE2NCA2NCAwIDAgMSA5MC40OTYgMGwyMjYuMzA0IDIyNi4zMDRMODQ2LjUyOCAxODguOGE2NCA2NCAwIDEgMSA5MC41NiA5MC40OTZsLTU0My4wNCA1NDMuMDQtMzE2LjgtMzE2LjhhNjQgNjQgMCAwIDEgMC05MC40OTZ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc2VsZWN0LnZ1ZVxudmFyIHNlbGVjdF9kZWZhdWx0ID0gc2VsZWN0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zZWxsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIyNyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjI3LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazIyNywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMjcgfSBmcm9tIFwidnVlXCI7XG52YXIgc2VsbF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyMjcoe1xuICBuYW1lOiBcIlNlbGxcIixcbiAgX19uYW1lOiBcInNlbGxcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIyNygpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjI3KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMjcoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNzA0IDI4OGgxMzEuMDcyYTMyIDMyIDAgMCAxIDMxLjgwOCAyOC44TDg4Ni40IDUxMmgtNjQuMzg0bC0xNi0xNjBINzA0djk2YTMyIDMyIDAgMSAxLTY0IDB2LTk2SDM4NHY5NmEzMiAzMiAwIDAgMS02NCAwdi05NkgyMTcuOTJsLTUxLjIgNTEySDUxMnY2NEgxMzEuMzI4YTMyIDMyIDAgMCAxLTMxLjgwOC0zNS4ybDU3LjYtNTc2YTMyIDMyIDAgMCAxIDMxLjgwOC0yOC44SDMyMHYtMjIuMzM2QzMyMCAxNTQuNjg4IDQwNS41MDQgNjQgNTEyIDY0czE5MiA5MC42ODggMTkyIDIwMS42NjR2MjIuNHptLTY0IDB2LTIyLjMzNkM2NDAgMTg5LjI0OCA1ODIuMjcyIDEyOCA1MTIgMTI4Yy03MC4yNzIgMC0xMjggNjEuMjQ4LTEyOCAxMzcuNjY0djIyLjRoMjU2em0yMDEuNDA4IDQ4My44NEw3NjggNjk4LjQ5NlY5MjhhMzIgMzIgMCAxIDEtNjQgMFY2OTguNDk2bC03My4zNDQgNzMuMzQ0YTMyIDMyIDAgMSAxLTQ1LjI0OC00NS4yNDhsMTI4LTEyOGEzMiAzMiAwIDAgMSA0NS4yNDggMGwxMjggMTI4YTMyIDMyIDAgMSAxLTQ1LjI0OCA0NS4yNDh6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc2VsbC52dWVcbnZhciBzZWxsX2RlZmF1bHQgPSBzZWxsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zZW1pLXNlbGVjdC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyMjggfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTIyOCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMjgsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjI4IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHNlbWlfc2VsZWN0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDIyOCh7XG4gIG5hbWU6IFwiU2VtaVNlbGVjdFwiLFxuICBfX25hbWU6IFwic2VtaS1zZWxlY3RcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIyOCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjI4KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMjgoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTI4IDQ0OGg3NjhxNjQgMCA2NCA2NHQtNjQgNjRIMTI4cS02NCAwLTY0LTY0dDY0LTY0XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc2VtaS1zZWxlY3QudnVlXG52YXIgc2VtaV9zZWxlY3RfZGVmYXVsdCA9IHNlbWlfc2VsZWN0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zZXJ2aWNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIyOSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjI5LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazIyOSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMjkgfSBmcm9tIFwidnVlXCI7XG52YXIgc2VydmljZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyMjkoe1xuICBuYW1lOiBcIlNlcnZpY2VcIixcbiAgX19uYW1lOiBcInNlcnZpY2VcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIyOSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjI5KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMjkoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNODY0IDQwOS42YTE5MiAxOTIgMCAwIDEtMzcuODg4IDM0OS40NEEyNTYuMDY0IDI1Ni4wNjQgMCAwIDEgNTc2IDk2MGgtOTZhMzIgMzIgMCAxIDEgMC02NGg5NmExOTIuMDY0IDE5Mi4wNjQgMCAwIDAgMTgxLjEyLTEyOEg3MzZhMzIgMzIgMCAwIDEtMzItMzJWNDE2YTMyIDMyIDAgMCAxIDMyLTMyaDMyYzEwLjM2OCAwIDIwLjU0NC44MzIgMzAuNTI4IDIuNDMyYTI4OCAyODggMCAwIDAtNTczLjA1NiAwQTE5My4yMzUgMTkzLjIzNSAwIDAgMSAyNTYgMzg0aDMyYTMyIDMyIDAgMCAxIDMyIDMydjMyMGEzMiAzMiAwIDAgMS0zMiAzMmgtMzJhMTkyIDE5MiAwIDAgMS05Ni0zNTguNCAzNTIgMzUyIDAgMCAxIDcwNCAwTTI1NiA0NDhhMTI4IDEyOCAwIDEgMCAwIDI1NnptNjQwIDEyOGExMjggMTI4IDAgMCAwLTEyOC0xMjh2MjU2YTEyOCAxMjggMCAwIDAgMTI4LTEyOFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3NlcnZpY2UudnVlXG52YXIgc2VydmljZV9kZWZhdWx0ID0gc2VydmljZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvc2V0LXVwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIzMCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjMwLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazIzMCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMzAgfSBmcm9tIFwidnVlXCI7XG52YXIgc2V0X3VwX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDIzMCh7XG4gIG5hbWU6IFwiU2V0VXBcIixcbiAgX19uYW1lOiBcInNldC11cFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjMwKCksIF9jcmVhdGVFbGVtZW50QmxvY2syMzAoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIzMChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0yMjQgMTYwYTY0IDY0IDAgMCAwLTY0IDY0djU3NmE2NCA2NCAwIDAgMCA2NCA2NGg1NzZhNjQgNjQgMCAwIDAgNjQtNjRWMjI0YTY0IDY0IDAgMCAwLTY0LTY0em0wLTY0aDU3NmExMjggMTI4IDAgMCAxIDEyOCAxMjh2NTc2YTEyOCAxMjggMCAwIDEtMTI4IDEyOEgyMjRBMTI4IDEyOCAwIDAgMSA5NiA4MDBWMjI0QTEyOCAxMjggMCAwIDEgMjI0IDk2XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIzMChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zODQgNDE2YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMCAwIDAgMTI4bTAgNjRhMTI4IDEyOCAwIDEgMSAwLTI1NiAxMjggMTI4IDAgMCAxIDAgMjU2XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIzMChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00ODAgMzIwaDI1NnEzMiAwIDMyIDMydC0zMiAzMkg0ODBxLTMyIDAtMzItMzJ0MzItMzJtMTYwIDQxNmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDAgMCAwIDEyOG0wIDY0YTEyOCAxMjggMCAxIDEgMC0yNTYgMTI4IDEyOCAwIDAgMSAwIDI1NlwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMzAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjg4IDY0MGgyNTZxMzIgMCAzMiAzMnQtMzIgMzJIMjg4cS0zMiAwLTMyLTMydDMyLTMyXCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc2V0LXVwLnZ1ZVxudmFyIHNldF91cF9kZWZhdWx0ID0gc2V0X3VwX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zZXR0aW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIzMSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjMxLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazIzMSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMzEgfSBmcm9tIFwidnVlXCI7XG52YXIgc2V0dGluZ192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyMzEoe1xuICBuYW1lOiBcIlNldHRpbmdcIixcbiAgX19uYW1lOiBcInNldHRpbmdcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIzMSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjMxKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMzEoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNjAwLjcwNCA2NGEzMiAzMiAwIDAgMSAzMC40NjQgMjIuMjA4bDM1LjIgMTA5LjM3NmMxNC43ODQgNy4yMzIgMjguOTI4IDE1LjM2IDQyLjQzMiAyNC41MTJsMTEyLjM4NC0yNC4xOTJhMzIgMzIgMCAwIDEgMzQuNDMyIDE1LjM2TDk0NC4zMiAzNjQuOGEzMiAzMiAwIDAgMS00LjAzMiAzNy41MDRsLTc3LjEyIDg1LjEyYTM1Ny4xMiAzNTcuMTIgMCAwIDEgMCA0OS4wMjRsNzcuMTIgODUuMjQ4YTMyIDMyIDAgMCAxIDQuMDMyIDM3LjUwNGwtODguNzA0IDE1My42YTMyIDMyIDAgMCAxLTM0LjQzMiAxNS4yOTZMNzA4LjggODAzLjkwNGMtMTMuNDQgOS4wODgtMjcuNjQ4IDE3LjI4LTQyLjM2OCAyNC41MTJsLTM1LjI2NCAxMDkuMzc2QTMyIDMyIDAgMCAxIDYwMC43MDQgOTYwSDQyMy4yOTZhMzIgMzIgMCAwIDEtMzAuNDY0LTIyLjIwOEwzNTcuNjk2IDgyOC40OGEzNTEuNjE2IDM1MS42MTYgMCAwIDEtNDIuNTYtMjQuNjRsLTExMi4zMiAyNC4yNTZhMzIgMzIgMCAwIDEtMzQuNDMyLTE1LjM2TDc5LjY4IDY1OS4yYTMyIDMyIDAgMCAxIDQuMDMyLTM3LjUwNGw3Ny4xMi04NS4yNDhhMzU3LjEyIDM1Ny4xMiAwIDAgMSAwLTQ4Ljg5NmwtNzcuMTItODUuMjQ4QTMyIDMyIDAgMCAxIDc5LjY4IDM2NC44bDg4LjcwNC0xNTMuNmEzMiAzMiAwIDAgMSAzNC40MzItMTUuMjk2bDExMi4zMiAyNC4yNTZjMTMuNTY4LTkuMTUyIDI3Ljc3Ni0xNy40MDggNDIuNTYtMjQuNjRsMzUuMi0xMDkuMzEyQTMyIDMyIDAgMCAxIDQyMy4yMzIgNjRINjAwLjY0em0tMjMuNDI0IDY0SDQ0Ni43MmwtMzYuMzUyIDExMy4wODgtMjQuNTEyIDExLjk2OGEyOTQuMTEzIDI5NC4xMTMgMCAwIDAtMzQuODE2IDIwLjA5NmwtMjIuNjU2IDE1LjM2LTExNi4yMjQtMjUuMDg4LTY1LjI4IDExMy4xNTIgNzkuNjggODguMTkyLTEuOTIgMjcuMTM2YTI5My4xMiAyOTMuMTIgMCAwIDAgMCA0MC4xOTJsMS45MiAyNy4xMzYtNzkuODA4IDg4LjE5MiA2NS4zNDQgMTEzLjE1MiAxMTYuMjI0LTI1LjAyNCAyMi42NTYgMTUuMjk2YTI5NC4xMTMgMjk0LjExMyAwIDAgMCAzNC44MTYgMjAuMDk2bDI0LjUxMiAxMS45NjhMNDQ2LjcyIDg5NmgxMzAuNjg4bDM2LjQ4LTExMy4xNTIgMjQuNDQ4LTExLjkwNGEyODguMjgyIDI4OC4yODIgMCAwIDAgMzQuNzUyLTIwLjA5NmwyMi41OTItMTUuMjk2IDExNi4yODggMjUuMDI0IDY1LjI4LTExMy4xNTItNzkuNzQ0LTg4LjE5MiAxLjkyLTI3LjEzNmEyOTMuMTIgMjkzLjEyIDAgMCAwIDAtNDAuMjU2bC0xLjkyLTI3LjEzNiA3OS44MDgtODguMTI4LTY1LjM0NC0xMTMuMTUyLTExNi4yODggMjQuOTYtMjIuNTkyLTE1LjIzMmEyODcuNjE2IDI4Ny42MTYgMCAwIDAtMzQuNzUyLTIwLjA5NmwtMjQuNDQ4LTExLjkwNEw1NzcuMzQ0IDEyOHpNNTEyIDMyMGExOTIgMTkyIDAgMSAxIDAgMzg0IDE5MiAxOTIgMCAwIDEgMC0zODRtMCA2NGExMjggMTI4IDAgMSAwIDAgMjU2IDEyOCAxMjggMCAwIDAgMC0yNTZcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9zZXR0aW5nLnZ1ZVxudmFyIHNldHRpbmdfZGVmYXVsdCA9IHNldHRpbmdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3NoYXJlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIzMiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjMyLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazIzMiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMzIgfSBmcm9tIFwidnVlXCI7XG52YXIgc2hhcmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjMyKHtcbiAgbmFtZTogXCJTaGFyZVwiLFxuICBfX25hbWU6IFwic2hhcmVcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIzMigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjMyKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMzIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJtNjc5Ljg3MiAzNDguOC0zMDEuNzYgMTg4LjYwOGExMjcuODA4IDEyNy44MDggMCAwIDEgNS4xMiA1Mi4xNmwyNzkuOTM2IDEwNC45NmExMjggMTI4IDAgMSAxLTIyLjQ2NCA1OS45MDRsLTI3OS44NzItMTA0Ljk2YTEyOCAxMjggMCAxIDEtMTYuNjQtMTY2LjI3MmwzMDEuNjk2LTE4OC42MDhhMTI4IDEyOCAwIDEgMSAzMy45MiA1NC4yNzJ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc2hhcmUudnVlXG52YXIgc2hhcmVfZGVmYXVsdCA9IHNoYXJlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zaGlwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIzMyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjMzLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazIzMywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMzMgfSBmcm9tIFwidnVlXCI7XG52YXIgc2hpcF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyMzMoe1xuICBuYW1lOiBcIlNoaXBcIixcbiAgX19uYW1lOiBcInNoaXBcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIzMygpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjMzKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMzMoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDM4Ni44OFY0NDhoNDA1LjU2OGEzMiAzMiAwIDAgMSAzMC43MiA0MC43NjhsLTc2LjQ4IDI2Ny45NjhBMTkyIDE5MiAwIDAgMSA2ODcuMTY4IDg5NkgzMzYuODMyYTE5MiAxOTIgMCAwIDEtMTg0LjY0LTEzOS4yNjRMNzUuNjQ4IDQ4OC43NjhBMzIgMzIgMCAwIDEgMTA2LjM2OCA0NDhINDQ4VjExNy44ODhhMzIgMzIgMCAwIDEgNDcuMzYtMjguMDk2bDEzLjg4OCA3LjYxNkw1MTIgOTZ2Mi44OGwyMzEuNjggMTI2LjRhMzIgMzIgMCAwIDEtMi4wNDggNTcuMjE2em0wLTcwLjI3MiAxNDQuNzY4LTY1Ljc5Mkw1MTIgMTcxLjg0ek01MTIgNTEySDE0OC44NjRsMTguMjQgNjRIODU2Ljk2bDE4LjI0LTY0ek0xODUuNDA4IDY0MGwyOC4zNTIgOTkuMkExMjggMTI4IDAgMCAwIDMzNi44MzIgODMyaDM1MC4zMzZhMTI4IDEyOCAwIDAgMCAxMjMuMDcyLTkyLjhsMjguMzUyLTk5LjJIMTg1LjQwOFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3NoaXAudnVlXG52YXIgc2hpcF9kZWZhdWx0ID0gc2hpcF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvc2hvcC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyMzQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTIzNCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMzQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjM0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHNob3BfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjM0KHtcbiAgbmFtZTogXCJTaG9wXCIsXG4gIF9fbmFtZTogXCJzaG9wXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMzQoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazIzNChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjM0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTcwNCA3MDRoNjR2MTkySDI1NlY3MDRoNjR2NjRoMzg0em0xODguNTQ0LTE1Mi4xOTJDODk0LjUyOCA1NTkuNjE2IDg5NiA1NjcuNjE2IDg5NiA1NzZhOTYgOTYgMCAxIDEtMTkyIDAgOTYgOTYgMCAxIDEtMTkyIDAgOTYgOTYgMCAxIDEtMTkyIDAgOTYgOTYgMCAxIDEtMTkyIDBjMC04LjM4NCAxLjQwOC0xNi4zODQgMy4zOTItMjQuMTkyTDE5MiAxMjhoNjQwelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3Nob3AudnVlXG52YXIgc2hvcF9kZWZhdWx0ID0gc2hvcF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvc2hvcHBpbmctYmFnLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIzNSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjM1LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazIzNSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMzUgfSBmcm9tIFwidnVlXCI7XG52YXIgc2hvcHBpbmdfYmFnX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDIzNSh7XG4gIG5hbWU6IFwiU2hvcHBpbmdCYWdcIixcbiAgX19uYW1lOiBcInNob3BwaW5nLWJhZ1wiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjM1KCksIF9jcmVhdGVFbGVtZW50QmxvY2syMzUoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIzNShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk03MDQgMzIwdjk2YTMyIDMyIDAgMCAxLTMyIDMyaC0zMlYzMjBIMzg0djEyOGgtMzJhMzIgMzIgMCAwIDEtMzItMzJ2LTk2SDE5MnY1NzZoNjQwVjMyMHptLTM4NC02NGExOTIgMTkyIDAgMSAxIDM4NCAwaDE2MGEzMiAzMiAwIDAgMSAzMiAzMnY2NDBhMzIgMzIgMCAwIDEtMzIgMzJIMTYwYTMyIDMyIDAgMCAxLTMyLTMyVjI4OGEzMiAzMiAwIDAgMSAzMi0zMnptNjQgMGgyNTZhMTI4IDEyOCAwIDEgMC0yNTYgMFwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyMzUoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTkyIDcwNGg2NDB2NjRIMTkyelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3Nob3BwaW5nLWJhZy52dWVcbnZhciBzaG9wcGluZ19iYWdfZGVmYXVsdCA9IHNob3BwaW5nX2JhZ192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvc2hvcHBpbmctY2FydC1mdWxsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIzNiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjM2LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazIzNiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMzYgfSBmcm9tIFwidnVlXCI7XG52YXIgc2hvcHBpbmdfY2FydF9mdWxsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDIzNih7XG4gIG5hbWU6IFwiU2hvcHBpbmdDYXJ0RnVsbFwiLFxuICBfX25hbWU6IFwic2hvcHBpbmctY2FydC1mdWxsXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syMzYoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazIzNihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjM2KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTQzMiA5MjhhNDggNDggMCAxIDEgMC05NiA0OCA0OCAwIDAgMSAwIDk2bTMyMCAwYTQ4IDQ4IDAgMSAxIDAtOTYgNDggNDggMCAwIDEgMCA5Nk05NiAxMjhhMzIgMzIgMCAwIDEgMC02NGgxNjBhMzIgMzIgMCAwIDEgMzEuMzYgMjUuNzI4TDMyMC42NCAyNTZIOTI4YTMyIDMyIDAgMCAxIDMxLjI5NiAzOC43MmwtOTYgNDQ4QTMyIDMyIDAgMCAxIDgzMiA3NjhIMzg0YTMyIDMyIDAgMCAxLTMxLjM2LTI1LjcyOEwyMjkuNzYgMTI4em0zMTQuMjQgNTc2aDM5NS45MDRsODIuMzA0LTM4NEgzMzMuNDRsNzYuOCAzODR6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIzNihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk02OTkuNjQ4IDI1NiA2MDggMTQ1Ljk4NCA1MTYuMzUyIDI1NmgxODMuMjk2em0tMTQwLjgtMTUxLjA0YTY0IDY0IDAgMCAxIDk4LjMwNCAwTDgzNi4zNTIgMzIwSDM3OS42NDhsMTc5LjItMjE1LjA0XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc2hvcHBpbmctY2FydC1mdWxsLnZ1ZVxudmFyIHNob3BwaW5nX2NhcnRfZnVsbF9kZWZhdWx0ID0gc2hvcHBpbmdfY2FydF9mdWxsX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zaG9wcGluZy1jYXJ0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDIzNyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjM3LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazIzNywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syMzcgfSBmcm9tIFwidnVlXCI7XG52YXIgc2hvcHBpbmdfY2FydF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyMzcoe1xuICBuYW1lOiBcIlNob3BwaW5nQ2FydFwiLFxuICBfX25hbWU6IFwic2hvcHBpbmctY2FydFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjM3KCksIF9jcmVhdGVFbGVtZW50QmxvY2syMzcoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIzNyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00MzIgOTI4YTQ4IDQ4IDAgMSAxIDAtOTYgNDggNDggMCAwIDEgMCA5Nm0zMjAgMGE0OCA0OCAwIDEgMSAwLTk2IDQ4IDQ4IDAgMCAxIDAgOTZNOTYgMTI4YTMyIDMyIDAgMCAxIDAtNjRoMTYwYTMyIDMyIDAgMCAxIDMxLjM2IDI1LjcyOEwzMjAuNjQgMjU2SDkyOGEzMiAzMiAwIDAgMSAzMS4yOTYgMzguNzJsLTk2IDQ0OEEzMiAzMiAwIDAgMSA4MzIgNzY4SDM4NGEzMiAzMiAwIDAgMS0zMS4zNi0yNS43MjhMMjI5Ljc2IDEyOHptMzE0LjI0IDU3NmgzOTUuOTA0bDgyLjMwNC0zODRIMzMzLjQ0bDc2LjggMzg0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3Nob3BwaW5nLWNhcnQudnVlXG52YXIgc2hvcHBpbmdfY2FydF9kZWZhdWx0ID0gc2hvcHBpbmdfY2FydF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvc2hvcHBpbmctdHJvbGxleS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyMzggfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTIzOCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syMzgsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjM4IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHNob3BwaW5nX3Ryb2xsZXlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjM4KHtcbiAgbmFtZTogXCJTaG9wcGluZ1Ryb2xsZXlcIixcbiAgX19uYW1lOiBcInNob3BwaW5nLXRyb2xsZXlcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazIzOCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjM4KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICBcInhtbDpzcGFjZVwiOiBcInByZXNlcnZlXCIsXG4gICAgICBzdHlsZTogeyBcImVuYWJsZS1iYWNrZ3JvdW5kXCI6IFwibmV3IDAgMCAxMDI0IDEwMjRcIiB9LFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjM4KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTM2OCA4MzNjLTEzLjMgMC0yNC41IDQuNS0zMy41IDEzLjVTMzIxIDg2Ni43IDMyMSA4ODBzNC41IDI0LjUgMTMuNSAzMy41IDIwLjIgMTMuOCAzMy41IDE0LjVjMTMuMy0uNyAyNC41LTUuNSAzMy41LTE0LjVTNDE1IDg5My4zIDQxNSA4ODBzLTQuNS0yNC41LTEzLjUtMzMuNVMzODEuMyA4MzMgMzY4IDgzM200MzktMTkzYzcuNCAwIDEzLjgtMi4yIDE5LjUtNi41UzgzNiA2MjMuMyA4MzggNjE2bDExMi00NDhjMi0xMC0uMi0xOS4yLTYuNS0yNy41UzkyOSAxMjggOTE5IDEyOEg5NmMtOS4zIDAtMTcgMy0yMyA5cy05IDEzLjctOSAyMyAzIDE3IDkgMjMgMTMuNyA5IDIzIDloOTZ2NTc2aDY3MmM5LjMgMCAxNy0zIDIzLTlzOS0xMy43IDktMjMtMy0xNy05LTIzLTEzLjctOS0yMy05SDI1NnYtNjR6TTI1NiAxOTJoNjIybC05NiAzODRIMjU2em00MzIgNjQxYy0xMy4zIDAtMjQuNSA0LjUtMzMuNSAxMy41UzY0MSA4NjYuNyA2NDEgODgwczQuNSAyNC41IDEzLjUgMzMuNSAyMC4yIDEzLjggMzMuNSAxNC41YzEzLjMtLjcgMjQuNS01LjUgMzMuNS0xNC41UzczNSA4OTMuMyA3MzUgODgwcy00LjUtMjQuNS0xMy41LTMzLjVTNzAxLjMgODMzIDY4OCA4MzNcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9zaG9wcGluZy10cm9sbGV5LnZ1ZVxudmFyIHNob3BwaW5nX3Ryb2xsZXlfZGVmYXVsdCA9IHNob3BwaW5nX3Ryb2xsZXlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3Ntb2tpbmcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjM5IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyMzksIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjM5LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazIzOSB9IGZyb20gXCJ2dWVcIjtcbnZhciBzbW9raW5nX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDIzOSh7XG4gIG5hbWU6IFwiU21va2luZ1wiLFxuICBfX25hbWU6IFwic21va2luZ1wiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjM5KCksIF9jcmVhdGVFbGVtZW50QmxvY2syMzkoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIzOShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0yNTYgNTc2djEyOGg2NDBWNTc2em0tMzItNjRoNzA0YTMyIDMyIDAgMCAxIDMyIDMydjE5MmEzMiAzMiAwIDAgMS0zMiAzMkgyMjRhMzIgMzIgMCAwIDEtMzItMzJWNTQ0YTMyIDMyIDAgMCAxIDMyLTMyXCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTIzOShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk03MDQgNTc2aDY0djEyOGgtNjR6TTI1NiA2NGg2NHYzMjBoLTY0ek0xMjggMTkyaDY0djE5MmgtNjR6TTY0IDUxMmg2NHYyNTZINjR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc21va2luZy52dWVcbnZhciBzbW9raW5nX2RlZmF1bHQgPSBzbW9raW5nX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zb2NjZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjQwIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNDAsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjQwLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI0MCB9IGZyb20gXCJ2dWVcIjtcbnZhciBzb2NjZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjQwKHtcbiAgbmFtZTogXCJTb2NjZXJcIixcbiAgX19uYW1lOiBcInNvY2NlclwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjQwKCksIF9jcmVhdGVFbGVtZW50QmxvY2syNDAoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI0MChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00MTguNDk2IDg3MS4wNCAxNTIuMjU2IDYwNC44Yy0xNi41MTIgOTQuMDE2LTIuMzY4IDE3OC42MjQgNDIuOTQ0IDIyNCA0NC45MjggNDQuOTI4IDEyOS4zNDQgNTguNzUyIDIyMy4yOTYgNDIuMjRtNzIuMzItMTguMTc2YTU3My4wNTYgNTczLjA1NiAwIDAgMCAyMjQuODMyLTEzNy4yMTYgNTczLjEyIDU3My4xMiAwIDAgMCAxMzcuMjE2LTIyNC44MzJMNTMzLjg4OCAxNzEuODRhNTc4LjU2IDU3OC41NiAwIDAgMC0yMjcuNTIgMTM4LjQ5NkE1NjcuNjggNTY3LjY4IDAgMCAwIDE3MC40MzIgNTMyLjQ4bDMyMC4zODQgMzIwLjM4NHpNODcxLjA0IDQxOC40OTZjMTYuNTEyLTkzLjk1MiAyLjY4OC0xNzguMzY4LTQyLjI0LTIyMy4yOTYtNDQuNTQ0LTQ0LjU0NC0xMjguNzA0LTU4LjA0OC0yMjIuNTkyLTQxLjUzNnpNMTQ5Ljk1MiA4NzQuMDQ4Yy0xMTIuOTYtMTEyLjk2LTg4LjgzMi00MDguOTYgMTExLjE2OC02MDguOTZDNDYxLjA1NiA2NS4xNTIgNzYwLjk2IDM2LjkyOCA4NzQuMDQ4IDE0OS45NTJjMTEzLjAyNCAxMTMuMDI0IDg2Ljc4NCA0MTEuMDA4LTExMy4xNTIgNjEwLjk0NC0xOTkuOTM2IDE5OS45MzYtNDk3LjkyIDIyNi4xMTItNjEwLjk0NCAxMTMuMTUybTQ1Mi41NDQtNDk3Ljc5MiAyMi42NTYtMjIuNjU2YTMyIDMyIDAgMCAxIDQ1LjI0OCA0NS4yNDhsLTIyLjY1NiAyMi42NTYgNDUuMjQ4IDQ1LjI0OEEzMiAzMiAwIDEgMSA2NDcuNzQ0IDUxMmwtNDUuMjQ4LTQ1LjI0OEw1NTcuMjQ4IDUxMmw0NS4yNDggNDUuMjQ4YTMyIDMyIDAgMSAxLTQ1LjI0OCA0NS4yNDhMNTEyIDU1Ny4yNDhsLTQ1LjI0OCA0NS4yNDhMNTEyIDY0Ny43NDRhMzIgMzIgMCAxIDEtNDUuMjQ4IDQ1LjI0OGwtNDUuMjQ4LTQ1LjI0OC0yMi42NTYgMjIuNjU2YTMyIDMyIDAgMSAxLTQ1LjI0OC00NS4yNDhsMjIuNjU2LTIyLjY1Ni00NS4yNDgtNDUuMjQ4QTMyIDMyIDAgMSAxIDM3Ni4yNTYgNTEybDQ1LjI0OCA0NS4yNDhMNDY2Ljc1MiA1MTJsLTQ1LjI0OC00NS4yNDhhMzIgMzIgMCAxIDEgNDUuMjQ4LTQ1LjI0OEw1MTIgNDY2Ljc1Mmw0NS4yNDgtNDUuMjQ4TDUxMiAzNzYuMjU2YTMyIDMyIDAgMCAxIDQ1LjI0OC00NS4yNDhsNDUuMjQ4IDQ1LjI0OHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9zb2NjZXIudnVlXG52YXIgc29jY2VyX2RlZmF1bHQgPSBzb2NjZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3NvbGQtb3V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI0MSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjQxLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI0MSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNDEgfSBmcm9tIFwidnVlXCI7XG52YXIgc29sZF9vdXRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjQxKHtcbiAgbmFtZTogXCJTb2xkT3V0XCIsXG4gIF9fbmFtZTogXCJzb2xkLW91dFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjQxKCksIF9jcmVhdGVFbGVtZW50QmxvY2syNDEoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI0MShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk03MDQgMjg4aDEzMS4wNzJhMzIgMzIgMCAwIDEgMzEuODA4IDI4LjhMODg2LjQgNTEyaC02NC4zODRsLTE2LTE2MEg3MDR2OTZhMzIgMzIgMCAxIDEtNjQgMHYtOTZIMzg0djk2YTMyIDMyIDAgMCAxLTY0IDB2LTk2SDIxNy45MmwtNTEuMiA1MTJINTEydjY0SDEzMS4zMjhhMzIgMzIgMCAwIDEtMzEuODA4LTM1LjJsNTcuNi01NzZhMzIgMzIgMCAwIDEgMzEuODA4LTI4LjhIMzIwdi0yMi4zMzZDMzIwIDE1NC42ODggNDA1LjUwNCA2NCA1MTIgNjRzMTkyIDkwLjY4OCAxOTIgMjAxLjY2NHYyMi40em0tNjQgMHYtMjIuMzM2QzY0MCAxODkuMjQ4IDU4Mi4yNzIgMTI4IDUxMiAxMjhjLTcwLjI3MiAwLTEyOCA2MS4yNDgtMTI4IDEzNy42NjR2MjIuNGgyNTZ6bTIwMS40MDggNDc2LjE2YTMyIDMyIDAgMSAxIDQ1LjI0OCA0NS4xODRsLTEyOCAxMjhhMzIgMzIgMCAwIDEtNDUuMjQ4IDBsLTEyOC0xMjhhMzIgMzIgMCAxIDEgNDUuMjQ4LTQ1LjI0OEw3MDQgODM3LjUwNFY2MDhhMzIgMzIgMCAxIDEgNjQgMHYyMjkuNTA0bDczLjQwOC03My40MDh6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc29sZC1vdXQudnVlXG52YXIgc29sZF9vdXRfZGVmYXVsdCA9IHNvbGRfb3V0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zb3J0LWRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjQyIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNDIsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjQyLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI0MiB9IGZyb20gXCJ2dWVcIjtcbnZhciBzb3J0X2Rvd25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjQyKHtcbiAgbmFtZTogXCJTb3J0RG93blwiLFxuICBfX25hbWU6IFwic29ydC1kb3duXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNDIoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI0MihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjQyKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTU3NiA5NnY3MDkuNTY4TDMzMy4zMTIgNTYyLjgxNkEzMiAzMiAwIDEgMCAyODggNjA4bDI5Ny40MDggMjk3LjM0NEEzMiAzMiAwIDAgMCA2NDAgODgyLjY4OFY5NmEzMiAzMiAwIDAgMC02NCAwXCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc29ydC1kb3duLnZ1ZVxudmFyIHNvcnRfZG93bl9kZWZhdWx0ID0gc29ydF9kb3duX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zb3J0LXVwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI0MyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjQzLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI0MywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNDMgfSBmcm9tIFwidnVlXCI7XG52YXIgc29ydF91cF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyNDMoe1xuICBuYW1lOiBcIlNvcnRVcFwiLFxuICBfX25hbWU6IFwic29ydC11cFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjQzKCksIF9jcmVhdGVFbGVtZW50QmxvY2syNDMoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI0MyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zODQgMTQxLjI0OFY5MjhhMzIgMzIgMCAxIDAgNjQgMFYyMTguNTZsMjQyLjY4OCAyNDIuNjg4QTMyIDMyIDAgMSAwIDczNiA0MTZMNDM4LjU5MiAxMTguNjU2QTMyIDMyIDAgMCAwIDM4NCAxNDEuMjQ4XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc29ydC11cC52dWVcbnZhciBzb3J0X3VwX2RlZmF1bHQgPSBzb3J0X3VwX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zb3J0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI0NCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjQ0LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI0NCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNDQgfSBmcm9tIFwidnVlXCI7XG52YXIgc29ydF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyNDQoe1xuICBuYW1lOiBcIlNvcnRcIixcbiAgX19uYW1lOiBcInNvcnRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI0NCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjQ0KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNDQoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMzg0IDk2YTMyIDMyIDAgMCAxIDY0IDB2Nzg2Ljc1MmEzMiAzMiAwIDAgMS01NC41OTIgMjIuNjU2TDk1LjkzNiA2MDhhMzIgMzIgMCAwIDEgMC00NS4zMTJoLjEyOGEzMiAzMiAwIDAgMSA0NS4xODQgMEwzODQgODA1LjYzMnptMTkyIDQ1LjI0OGEzMiAzMiAwIDAgMSA1NC41OTItMjIuNTkyTDkyOC4wNjQgNDE2YTMyIDMyIDAgMCAxIDAgNDUuMzEyaC0uMTI4YTMyIDMyIDAgMCAxLTQ1LjE4NCAwTDY0MCAyMTguNDk2VjkyOGEzMiAzMiAwIDEgMS02NCAwVjE0MS4yNDh6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc29ydC52dWVcbnZhciBzb3J0X2RlZmF1bHQgPSBzb3J0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zdGFtcC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyNDUgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI0NSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syNDUsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjQ1IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHN0YW1wX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI0NSh7XG4gIG5hbWU6IFwiU3RhbXBcIixcbiAgX19uYW1lOiBcInN0YW1wXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNDUoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI0NShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjQ1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTYyNCA0NzUuOTY4VjY0MGgxNDRhMTI4IDEyOCAwIDAgMSAxMjggMTI4SDEyOGExMjggMTI4IDAgMCAxIDEyOC0xMjhoMTQ0VjQ3NS45NjhhMTkyIDE5MiAwIDEgMSAyMjQgME0xMjggODk2di02NGg3Njh2NjR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc3RhbXAudnVlXG52YXIgc3RhbXBfZGVmYXVsdCA9IHN0YW1wX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zdGFyLWZpbGxlZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyNDYgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI0Niwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syNDYsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjQ2IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHN0YXJfZmlsbGVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI0Nih7XG4gIG5hbWU6IFwiU3RhckZpbGxlZFwiLFxuICBfX25hbWU6IFwic3Rhci1maWxsZWRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI0NigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjQ2KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNDYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjgzLjg0IDg2Ny44NCA1MTIgNzQ3Ljc3NmwyMjguMTYgMTE5LjkzNmE2LjQgNi40IDAgMCAwIDkuMjgtNi43MmwtNDMuNTItMjU0LjA4IDE4NC41MTItMTc5LjkwNGE2LjQgNi40IDAgMCAwLTMuNTItMTAuODhsLTI1NS4xMDQtMzcuMTJMNTE3Ljc2IDE0Ny45MDRhNi40IDYuNCAwIDAgMC0xMS41MiAwTDM5Mi4xOTIgMzc5LjA3MmwtMjU1LjEwNCAzNy4xMmE2LjQgNi40IDAgMCAwLTMuNTIgMTAuODhMMzE4LjA4IDYwNi45NzZsLTQzLjU4NCAyNTQuMDhhNi40IDYuNCAwIDAgMCA5LjI4IDYuNzJ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc3Rhci1maWxsZWQudnVlXG52YXIgc3Rhcl9maWxsZWRfZGVmYXVsdCA9IHN0YXJfZmlsbGVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zdGFyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI0NyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjQ3LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI0NywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNDcgfSBmcm9tIFwidnVlXCI7XG52YXIgc3Rhcl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyNDcoe1xuICBuYW1lOiBcIlN0YXJcIixcbiAgX19uYW1lOiBcInN0YXJcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI0NygpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjQ3KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNDcoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJtNTEyIDc0Ny44NCAyMjguMTYgMTE5LjkzNmE2LjQgNi40IDAgMCAwIDkuMjgtNi43MmwtNDMuNTItMjU0LjA4IDE4NC41MTItMTc5LjkwNGE2LjQgNi40IDAgMCAwLTMuNTItMTAuODhsLTI1NS4xMDQtMzcuMTJMNTE3Ljc2IDE0Ny45MDRhNi40IDYuNCAwIDAgMC0xMS41MiAwTDM5Mi4xOTIgMzc5LjA3MmwtMjU1LjEwNCAzNy4xMmE2LjQgNi40IDAgMCAwLTMuNTIgMTAuODhMMzE4LjA4IDYwNi45NzZsLTQzLjU4NCAyNTQuMDhhNi40IDYuNCAwIDAgMCA5LjI4IDYuNzJ6TTMxMy42IDkyNC40OGE3MC40IDcwLjQgMCAwIDEtMTAyLjE0NC03NC4yNGwzNy44ODgtMjIwLjkyOEw4OC45NiA0NzIuOTZBNzAuNCA3MC40IDAgMCAxIDEyOCAzNTIuODk2bDIyMS43Ni0zMi4yNTYgOTkuMi0yMDAuOTZhNzAuNCA3MC40IDAgMCAxIDEyNi4yMDggMGw5OS4yIDIwMC45NiAyMjEuODI0IDMyLjI1NmE3MC40IDcwLjQgMCAwIDEgMzkuMDQgMTIwLjA2NEw3NzQuNzIgNjI5LjM3NmwzNy44ODggMjIwLjkyOGE3MC40IDcwLjQgMCAwIDEtMTAyLjE0NCA3NC4yNEw1MTIgODIwLjA5NmwtMTk4LjQgMTA0LjMyelwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3N0YXIudnVlXG52YXIgc3Rhcl9kZWZhdWx0ID0gc3Rhcl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvc3RvcHdhdGNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI0OCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjQ4LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI0OCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNDggfSBmcm9tIFwidnVlXCI7XG52YXIgc3RvcHdhdGNoX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI0OCh7XG4gIG5hbWU6IFwiU3RvcHdhdGNoXCIsXG4gIF9fbmFtZTogXCJzdG9wd2F0Y2hcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI0OCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjQ4KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNDgoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDg5NmEzODQgMzg0IDAgMSAwIDAtNzY4IDM4NCAzODQgMCAwIDAgMCA3NjhtMCA2NGE0NDggNDQ4IDAgMSAxIDAtODk2IDQ0OCA0NDggMCAwIDEgMCA4OTZcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjQ4KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTY3MiAyMzQuODhjLTM5LjE2OCAxNzQuNDY0LTgwIDI5OC42MjQtMTIyLjY4OCAzNzIuNDgtNjQgMTEwLjg0OC0yMDIuNjI0IDMwLjg0OC0xMzguNjI0LTgwQzQ1My4zNzYgNDUzLjQ0IDU0MC40OCAzNTUuOTY4IDY3MiAyMzQuODE2elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3N0b3B3YXRjaC52dWVcbnZhciBzdG9wd2F0Y2hfZGVmYXVsdCA9IHN0b3B3YXRjaF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvc3VjY2Vzcy1maWxsZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjQ5IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNDksIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjQ5LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI0OSB9IGZyb20gXCJ2dWVcIjtcbnZhciBzdWNjZXNzX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyNDkoe1xuICBuYW1lOiBcIlN1Y2Nlc3NGaWxsZWRcIixcbiAgX19uYW1lOiBcInN1Y2Nlc3MtZmlsbGVkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNDkoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI0OShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjQ5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA2NGE0NDggNDQ4IDAgMSAxIDAgODk2IDQ0OCA0NDggMCAwIDEgMC04OTZtLTU1LjgwOCA1MzYuMzg0LTk5LjUyLTk5LjU4NGEzOC40IDM4LjQgMCAxIDAtNTQuMzM2IDU0LjMzNmwxMjYuNzIgMTI2LjcyYTM4LjI3MiAzOC4yNzIgMCAwIDAgNTQuMzM2IDBsMjYyLjQtMjYyLjQ2NGEzOC40IDM4LjQgMCAxIDAtNTQuMjcyLTU0LjMzNnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9zdWNjZXNzLWZpbGxlZC52dWVcbnZhciBzdWNjZXNzX2ZpbGxlZF9kZWZhdWx0ID0gc3VjY2Vzc19maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3N1Z2FyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI1MCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjUwLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI1MCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNTAgfSBmcm9tIFwidnVlXCI7XG52YXIgc3VnYXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjUwKHtcbiAgbmFtZTogXCJTdWdhclwiLFxuICBfX25hbWU6IFwic3VnYXJcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI1MCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjUwKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNTAoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJtODAxLjcyOCAzNDkuMTg0IDQuNDggNC40OGExMjggMTI4IDAgMCAxIDAgMTgwLjk5Mkw1MzQuNjU2IDgwNi4xNDRhMTI4IDEyOCAwIDAgMS0xODEuMDU2IDBsLTQuNDgtNC40OC0xOS4zOTIgMTA5LjY5NmE2NCA2NCAwIDAgMS0xMDguMjg4IDM0LjE3Nkw3OC40NjQgODAyLjU2YTY0IDY0IDAgMCAxIDM0LjE3Ni0xMDguMjg4bDEwOS43Ni0xOS4zMjgtNC41NDQtNC41NDRhMTI4IDEyOCAwIDAgMSAwLTE4MS4wNTZsMjcxLjQ4OC0yNzEuNDg4YTEyOCAxMjggMCAwIDEgMTgxLjA1NiAwbDQuNDggNC40OCAxOS4zOTItMTA5LjUwNGE2NCA2NCAwIDAgMSAxMDguMzUyLTM0LjA0OGwxNDIuNTkyIDE0My4wNGE2NCA2NCAwIDAgMS0zNC4yNCAxMDguMTZsLTEwOS4yNDggMTkuMnptLTU0OC44IDE5OC43Mmg0NDcuMTY4djIuMjRsNjAuOC02MC44YTYzLjgwOCA2My44MDggMCAwIDAgMTguNzUyLTQ0LjQxNmgtNDI2Ljg4bC04OS42NjQgODkuNzI4YTY0LjA2NCA2NC4wNjQgMCAwIDAtMTAuMjQgMTMuMjQ4em0wIDY0YzIuNzUyIDQuNzM2IDYuMTQ0IDkuMTUyIDEwLjE3NiAxMy4yNDhsMTM1Ljc0NCAxMzUuNzQ0YTY0IDY0IDAgMCAwIDkwLjQ5NiAwTDYzOC40IDYxMS45MDR6bTQ5MC4wNDgtMjMwLjk3Nkw2MjUuMTUyIDI2My4xMDRhNjQgNjQgMCAwIDAtOTAuNDk2IDBMNDE2Ljc2OCAzODAuOTI4ek0xMjMuNzEyIDc1Ny4zMTJsMTQyLjk3NiAxNDIuOTc2IDI0LjMyLTEzNy42YTI1LjYgMjUuNiAwIDAgMC0yOS42OTYtMjkuNjMybC0xMzcuNiAyNC4yNTZ6bTYzMy42LTYzMy4zNDQtMjQuMzIgMTM3LjQ3MmEyNS42IDI1LjYgMCAwIDAgMjkuNjMyIDI5LjYzMmwxMzcuMjgtMjQuMDY0LTE0Mi42NTYtMTQzLjA0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3N1Z2FyLnZ1ZVxudmFyIHN1Z2FyX2RlZmF1bHQgPSBzdWdhcl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvc3VpdGNhc2UtbGluZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyNTEgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI1MSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syNTEsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjUxIH0gZnJvbSBcInZ1ZVwiO1xudmFyIHN1aXRjYXNlX2xpbmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjUxKHtcbiAgbmFtZTogXCJTdWl0Y2FzZUxpbmVcIixcbiAgX19uYW1lOiBcInN1aXRjYXNlLWxpbmVcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI1MSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjUxKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICBcInhtbDpzcGFjZVwiOiBcInByZXNlcnZlXCIsXG4gICAgICBzdHlsZTogeyBcImVuYWJsZS1iYWNrZ3JvdW5kXCI6IFwibmV3IDAgMCAxMDI0IDEwMjRcIiB9LFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjUxKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTkyMi41IDIyOS41Yy0yNC4zMi0yNC4zNC01NC40OS0zNi44NC05MC41LTM3LjVINzA0di02NGMtLjY4LTE3Ljk4LTcuMDItMzIuOTgtMTkuMDEtNDQuOTlTNjU4LjAxIDY0LjY2IDY0MCA2NEgzODRjLTE3Ljk4LjY4LTMyLjk4IDcuMDItNDQuOTkgMTkuMDFTMzIwLjY2IDExMCAzMjAgMTI4djY0SDE5MmMtMzUuOTkuNjgtNjYuMTYgMTMuMTgtOTAuNSAzNy41Qzc3LjE2IDI1My44MiA2NC42NiAyODMuOTkgNjQgMzIwdjQ0OGMuNjggMzUuOTkgMTMuMTggNjYuMTYgMzcuNSA5MC41czU0LjQ5IDM2Ljg0IDkwLjUgMzcuNWg2NDBjMzUuOTktLjY4IDY2LjE2LTEzLjE4IDkwLjUtMzcuNXMzNi44NC01NC40OSAzNy41LTkwLjVWMzIwYy0uNjgtMzUuOTktMTMuMTgtNjYuMTYtMzcuNS05MC41TTM4NCAxMjhoMjU2djY0SDM4NHpNMjU2IDgzMmgtNjRjLTE3Ljk4LS42OC0zMi45OC03LjAyLTQ0Ljk5LTE5LjAxUzEyOC42NiA3ODYuMDEgMTI4IDc2OFY0NDhoMTI4em00NDggMEgzMjBWNDQ4aDM4NHptMTkyLTY0Yy0uNjggMTcuOTgtNy4wMiAzMi45OC0xOS4wMSA0NC45OVM4NTAuMDEgODMxLjM0IDgzMiA4MzJoLTY0VjQ0OGgxMjh6bTAtMzg0SDEyOHYtNjRjLjY5LTE3Ljk4IDcuMDItMzIuOTggMTkuMDEtNDQuOTlTMTczLjk5IDI1Ni42NiAxOTIgMjU2aDY0MGMxNy45OC42OSAzMi45OCA3LjAyIDQ0Ljk5IDE5LjAxUzg5NS4zNCAzMDEuOTkgODk2IDMyMHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9zdWl0Y2FzZS1saW5lLnZ1ZVxudmFyIHN1aXRjYXNlX2xpbmVfZGVmYXVsdCA9IHN1aXRjYXNlX2xpbmVfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3N1aXRjYXNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI1MiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjUyLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI1MiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNTIgfSBmcm9tIFwidnVlXCI7XG52YXIgc3VpdGNhc2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjUyKHtcbiAgbmFtZTogXCJTdWl0Y2FzZVwiLFxuICBfX25hbWU6IFwic3VpdGNhc2VcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI1MigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjUyKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNTIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTI4IDM4NGg3Njh2LTY0YTY0IDY0IDAgMCAwLTY0LTY0SDE5MmE2NCA2NCAwIDAgMC02NCA2NHptMCA2NHYzMjBhNjQgNjQgMCAwIDAgNjQgNjRoNjQwYTY0IDY0IDAgMCAwIDY0LTY0VjQ0OHptNjQtMjU2aDY0MGExMjggMTI4IDAgMCAxIDEyOCAxMjh2NDQ4YTEyOCAxMjggMCAwIDEtMTI4IDEyOEgxOTJBMTI4IDEyOCAwIDAgMSA2NCA3NjhWMzIwYTEyOCAxMjggMCAwIDEgMTI4LTEyOFwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNTIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMzg0IDEyOHY2NGgyNTZ2LTY0em0wLTY0aDI1NmE2NCA2NCAwIDAgMSA2NCA2NHY2NGE2NCA2NCAwIDAgMS02NCA2NEgzODRhNjQgNjQgMCAwIDEtNjQtNjR2LTY0YTY0IDY0IDAgMCAxIDY0LTY0XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc3VpdGNhc2UudnVlXG52YXIgc3VpdGNhc2VfZGVmYXVsdCA9IHN1aXRjYXNlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zdW5ueS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyNTMgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI1Mywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syNTMsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjUzIH0gZnJvbSBcInZ1ZVwiO1xudmFyIHN1bm55X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI1Myh7XG4gIG5hbWU6IFwiU3VubnlcIixcbiAgX19uYW1lOiBcInN1bm55XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNTMoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI1MyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjUzKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA3MDRhMTkyIDE5MiAwIDEgMCAwLTM4NCAxOTIgMTkyIDAgMCAwIDAgMzg0bTAgNjRhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMCAxIDAgNTEybTAtNzA0YTMyIDMyIDAgMCAxIDMyIDMydjY0YTMyIDMyIDAgMCAxLTY0IDBWOTZhMzIgMzIgMCAwIDEgMzItMzJtMCA3NjhhMzIgMzIgMCAwIDEgMzIgMzJ2NjRhMzIgMzIgMCAxIDEtNjQgMHYtNjRhMzIgMzIgMCAwIDEgMzItMzJNMTk1LjIgMTk1LjJhMzIgMzIgMCAwIDEgNDUuMjQ4IDBsNDUuMjQ4IDQ1LjI0OGEzMiAzMiAwIDEgMS00NS4yNDggNDUuMjQ4TDE5NS4yIDI0MC40NDhhMzIgMzIgMCAwIDEgMC00NS4yNDh6bTU0My4xMDQgNTQzLjEwNGEzMiAzMiAwIDAgMSA0NS4yNDggMGw0NS4yNDggNDUuMjQ4YTMyIDMyIDAgMCAxLTQ1LjI0OCA0NS4yNDhsLTQ1LjI0OC00NS4yNDhhMzIgMzIgMCAwIDEgMC00NS4yNDhNNjQgNTEyYTMyIDMyIDAgMCAxIDMyLTMyaDY0YTMyIDMyIDAgMCAxIDAgNjRIOTZhMzIgMzIgMCAwIDEtMzItMzJtNzY4IDBhMzIgMzIgMCAwIDEgMzItMzJoNjRhMzIgMzIgMCAxIDEgMCA2NGgtNjRhMzIgMzIgMCAwIDEtMzItMzJNMTk1LjIgODI4LjhhMzIgMzIgMCAwIDEgMC00NS4yNDhsNDUuMjQ4LTQ1LjI0OGEzMiAzMiAwIDAgMSA0NS4yNDggNDUuMjQ4TDI0MC40NDggODI4LjhhMzIgMzIgMCAwIDEtNDUuMjQ4IDB6bTU0My4xMDQtNTQzLjEwNGEzMiAzMiAwIDAgMSAwLTQ1LjI0OGw0NS4yNDgtNDUuMjQ4YTMyIDMyIDAgMCAxIDQ1LjI0OCA0NS4yNDhsLTQ1LjI0OCA0NS4yNDhhMzIgMzIgMCAwIDEtNDUuMjQ4IDBcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9zdW5ueS52dWVcbnZhciBzdW5ueV9kZWZhdWx0ID0gc3VubnlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3N1bnJpc2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjU0IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNTQsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjU0LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI1NCB9IGZyb20gXCJ2dWVcIjtcbnZhciBzdW5yaXNlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI1NCh7XG4gIG5hbWU6IFwiU3VucmlzZVwiLFxuICBfX25hbWU6IFwic3VucmlzZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjU0KCksIF9jcmVhdGVFbGVtZW50QmxvY2syNTQoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI1NChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0zMiA3NjhoOTYwYTMyIDMyIDAgMSAxIDAgNjRIMzJhMzIgMzIgMCAxIDEgMC02NG0xMjkuNDA4LTk2YTM1MiAzNTIgMCAwIDEgNzAxLjE4NCAwaC02NC4zMmEyODggMjg4IDAgMCAwLTU3Mi41NDQgMGgtNjQuMzJ6TTUxMiAxMjhhMzIgMzIgMCAwIDEgMzIgMzJ2OTZhMzIgMzIgMCAwIDEtNjQgMHYtOTZhMzIgMzIgMCAwIDEgMzItMzJtNDA3LjI5NiAxNjguNzA0YTMyIDMyIDAgMCAxIDAgNDUuMjQ4bC02Ny44NCA2Ny44NGEzMiAzMiAwIDEgMS00NS4yNDgtNDUuMjQ4bDY3Ljg0LTY3Ljg0YTMyIDMyIDAgMCAxIDQ1LjI0OCAwem0tODE0LjU5MiAwYTMyIDMyIDAgMCAxIDQ1LjI0OCAwbDY3Ljg0IDY3Ljg0YTMyIDMyIDAgMSAxLTQ1LjI0OCA0NS4yNDhsLTY3Ljg0LTY3Ljg0YTMyIDMyIDAgMCAxIDAtNDUuMjQ4XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvc3VucmlzZS52dWVcbnZhciBzdW5yaXNlX2RlZmF1bHQgPSBzdW5yaXNlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy9zdW5zZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjU1IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNTUsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjU1LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI1NSB9IGZyb20gXCJ2dWVcIjtcbnZhciBzdW5zZXRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjU1KHtcbiAgbmFtZTogXCJTdW5zZXRcIixcbiAgX19uYW1lOiBcInN1bnNldFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjU1KCksIF9jcmVhdGVFbGVtZW50QmxvY2syNTUoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI1NShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk04Mi41NiA2NDBhNDQ4IDQ0OCAwIDEgMSA4NTguODggMGgtNjcuMmEzODQgMzg0IDAgMSAwLTcyNC4yODggMHpNMzIgNzA0aDk2MHEzMiAwIDMyIDMydC0zMiAzMkgzMnEtMzIgMC0zMi0zMnQzMi0zMm0yNTYgMTI4aDQ0OHEzMiAwIDMyIDMydC0zMiAzMkgyODhxLTMyIDAtMzItMzJ0MzItMzJcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9zdW5zZXQudnVlXG52YXIgc3Vuc2V0X2RlZmF1bHQgPSBzdW5zZXRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3N3aXRjaC1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjU2IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNTYsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjU2LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI1NiB9IGZyb20gXCJ2dWVcIjtcbnZhciBzd2l0Y2hfYnV0dG9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI1Nih7XG4gIG5hbWU6IFwiU3dpdGNoQnV0dG9uXCIsXG4gIF9fbmFtZTogXCJzd2l0Y2gtYnV0dG9uXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNTYoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI1NihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjU2KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTM1MiAxNTkuODcyVjIzMC40YTM1MiAzNTIgMCAxIDAgMzIwIDB2LTcwLjUyOEE0MTYuMTI4IDQxNi4xMjggMCAwIDEgNTEyIDk2MGE0MTYgNDE2IDAgMCAxLTE2MC04MDAuMTI4elwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNTYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDY0cTMyIDAgMzIgMzJ2MzIwcTAgMzItMzIgMzJ0LTMyLTMyVjk2cTAtMzIgMzItMzJcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9zd2l0Y2gtYnV0dG9uLnZ1ZVxudmFyIHN3aXRjaF9idXR0b25fZGVmYXVsdCA9IHN3aXRjaF9idXR0b25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3N3aXRjaC1maWxsZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjU3IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNTcsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjU3LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI1NyB9IGZyb20gXCJ2dWVcIjtcbnZhciBzd2l0Y2hfZmlsbGVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI1Nyh7XG4gIG5hbWU6IFwiU3dpdGNoRmlsbGVkXCIsXG4gIF9fbmFtZTogXCJzd2l0Y2gtZmlsbGVkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNTcoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI1NyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgXCJ4bWw6c3BhY2VcIjogXCJwcmVzZXJ2ZVwiLFxuICAgICAgc3R5bGU6IHsgXCJlbmFibGUtYmFja2dyb3VuZFwiOiBcIm5ldyAwIDAgMTAyNCAxMDI0XCIgfSxcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI1NyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0yNDcuNDcgMzU4LjR2LjA0Yy4wNyAxOS4xNyA3LjcyIDM3LjUzIDIxLjI3IDUxLjA5czMxLjkyIDIxLjIgNTEuMDkgMjEuMjdjMzkuODYgMCA3Mi40MS0zMi42IDcyLjQxLTcyLjRzLTMyLjYtNzIuMzYtNzIuNDEtNzIuMzYtNzIuMzYgMzIuNTUtNzIuMzYgNzIuMzZ6XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI1NyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00OTIuMzggMTI4SDMyNC43Yy01Mi4xNiAwLTEwMi4xOSAyMC43My0xMzkuMDggNTcuNjFhMTk2LjY1NSAxOTYuNjU1IDAgMCAwLTU3LjYxIDEzOS4wOFY2OTguN2MtLjAxIDI1Ljg0IDUuMDggNTEuNDIgMTQuOTYgNzUuMjlzMjQuMzYgNDUuNTYgNDIuNjMgNjMuODMgMzkuOTUgMzIuNzYgNjMuODIgNDIuNjVhMTk2LjY3IDE5Ni42NyAwIDAgMCA3NS4yOCAxNC45OGgxNjcuNjhjMy4wMyAwIDUuNDYtMi40MyA1LjQ2LTUuNDJWMTMzLjQyYy42LTIuOTktMS44My01LjQyLTUuNDYtNS40MnptLTU2LjExIDcwNS44OEgzMjQuN2MtMTcuNzYuMTMtMzUuMzYtMy4zMy01MS43NS0xMC4xOHMtMzEuMjItMTYuOTQtNDMuNjEtMjkuNjdjLTI1LjMtMjUuMzUtMzkuODEtNTkuMS0zOS44MS05NS4zMlYzMjQuNjljLS4xMy0xNy43NSAzLjMzLTM1LjM1IDEwLjE3LTUxLjc0YTEzMS42OTUgMTMxLjY5NSAwIDAgMSAyOS42NC00My42MmMyNS4zOS0yNS4zIDU5LjE0LTM5LjgxIDk1LjM2LTM5LjgxaDExMS41N3ptNDAyLjEyLTY0Ny42N2ExOTYuNjU1IDE5Ni42NTUgMCAwIDAtMTM5LjA4LTU3LjYxSDU4MC40OGMtMy4wMyAwLTQuODIgMi40My00LjgyIDQuODJ2NzU3LjE2Yy0uNiAyLjk5IDEuNzkgNS40MiA1LjQyIDUuNDJoMTE4LjIzYTE5Ni42OSAxOTYuNjkgMCAwIDAgMTM5LjA4LTU3LjYxQTE5Ni42NTUgMTk2LjY1NSAwIDAgMCA4OTYgNjk5LjMxVjMyNS4yOWExOTYuNjkgMTk2LjY5IDAgMCAwLTU3LjYxLTEzOS4wOHptLTExMS4zIDQ0MS45MmMtNDIuODMgMC03Ny44Mi0zNC45OS03Ny44Mi03Ny44MnMzNC45OC03Ny44MiA3Ny44Mi03Ny44MmM0Mi44MyAwIDc3LjgyIDM0Ljk5IDc3LjgyIDc3Ljgycy0zNC45OSA3Ny44Mi03Ny44MiA3Ny44MnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy9zd2l0Y2gtZmlsbGVkLnZ1ZVxudmFyIHN3aXRjaF9maWxsZWRfZGVmYXVsdCA9IHN3aXRjaF9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3N3aXRjaC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyNTggfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI1OCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syNTgsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjU4IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHN3aXRjaF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyNTgoe1xuICBuYW1lOiBcIlN3aXRjaFwiLFxuICBfX25hbWU6IFwic3dpdGNoXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNTgoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI1OChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjU4KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTExOC42NTYgNDM4LjY1NmEzMiAzMiAwIDAgMSAwLTQ1LjI0OEw0MTYgOTZsNC40OC0zLjc3NkEzMiAzMiAwIDAgMSA0NjEuMjQ4IDk2bDMuNzEyIDQuNDhhMzIuMDY0IDMyLjA2NCAwIDAgMS0zLjcxMiA0MC44MzJMMjE4LjU2IDM4NEg5MjhhMzIgMzIgMCAxIDEgMCA2NEgxNDEuMjQ4YTMyIDMyIDAgMCAxLTIyLjU5Mi05LjM0NHpNNjQgNjA4YTMyIDMyIDAgMCAxIDMyLTMyaDc4Ni43NTJhMzIgMzIgMCAwIDEgMjIuNjU2IDU0LjU5Mkw2MDggOTI4bC00LjQ4IDMuNzc2YTMyLjA2NCAzMi4wNjQgMCAwIDEtNDAuODMyLTQ5LjAyNEw4MDUuNjMyIDY0MEg5NmEzMiAzMiAwIDAgMS0zMi0zMlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3N3aXRjaC52dWVcbnZhciBzd2l0Y2hfZGVmYXVsdCA9IHN3aXRjaF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvdGFrZWF3YXktYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI1OSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjU5LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI1OSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNTkgfSBmcm9tIFwidnVlXCI7XG52YXIgdGFrZWF3YXlfYm94X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI1OSh7XG4gIG5hbWU6IFwiVGFrZWF3YXlCb3hcIixcbiAgX19uYW1lOiBcInRha2Vhd2F5LWJveFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjU5KCksIF9jcmVhdGVFbGVtZW50QmxvY2syNTkoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI1OShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk04MzIgMzg0SDE5MnY0NDhoNjQwek05NiAzMjBoODMyVjEyOEg5NnptODAwIDY0djQ4MGEzMiAzMiAwIDAgMS0zMiAzMkgxNjBhMzIgMzIgMCAwIDEtMzItMzJWMzg0SDY0YTMyIDMyIDAgMCAxLTMyLTMyVjk2YTMyIDMyIDAgMCAxIDMyLTMyaDg5NmEzMiAzMiAwIDAgMSAzMiAzMnYyNTZhMzIgMzIgMCAwIDEtMzIgMzJ6TTQxNiA1MTJoMTkyYTMyIDMyIDAgMCAxIDAgNjRINDE2YTMyIDMyIDAgMCAxIDAtNjRcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy90YWtlYXdheS1ib3gudnVlXG52YXIgdGFrZWF3YXlfYm94X2RlZmF1bHQgPSB0YWtlYXdheV9ib3hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3RpY2tldC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyNjAgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI2MCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syNjAsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjYwIH0gZnJvbSBcInZ1ZVwiO1xudmFyIHRpY2tldF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyNjAoe1xuICBuYW1lOiBcIlRpY2tldFwiLFxuICBfX25hbWU6IFwidGlja2V0XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNjAoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI2MChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjYwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTY0MCA4MzJINjRWNjQwYTEyOCAxMjggMCAxIDAgMC0yNTZWMTkyaDU3NnYxNjBoNjRWMTkyaDI1NnYxOTJhMTI4IDEyOCAwIDEgMCAwIDI1NnYxOTJINzA0VjY3MmgtNjR6bTAtNDE2djE5Mmg2NFY0MTZ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvdGlja2V0LnZ1ZVxudmFyIHRpY2tldF9kZWZhdWx0ID0gdGlja2V0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy90aWNrZXRzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI2MSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjYxLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI2MSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNjEgfSBmcm9tIFwidnVlXCI7XG52YXIgdGlja2V0c192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyNjEoe1xuICBuYW1lOiBcIlRpY2tldHNcIixcbiAgX19uYW1lOiBcInRpY2tldHNcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI2MSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjYxKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNjEoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTkyIDEyOHY3NjhoNjQwVjEyOHptLTMyLTY0aDcwNGEzMiAzMiAwIDAgMSAzMiAzMnY4MzJhMzIgMzIgMCAwIDEtMzIgMzJIMTYwYTMyIDMyIDAgMCAxLTMyLTMyVjk2YTMyIDMyIDAgMCAxIDMyLTMybTE2MCA0NDhoMzg0djY0SDMyMHptMC0xOTJoMTkydjY0SDMyMHptMCAzODRoMzg0djY0SDMyMHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy90aWNrZXRzLnZ1ZVxudmFyIHRpY2tldHNfZGVmYXVsdCA9IHRpY2tldHNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3RpbWVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI2MiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjYyLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI2MiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNjIgfSBmcm9tIFwidnVlXCI7XG52YXIgdGltZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjYyKHtcbiAgbmFtZTogXCJUaW1lclwiLFxuICBfX25hbWU6IFwidGltZXJcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI2MigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjYyKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNjIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDg5NmEzMjAgMzIwIDAgMSAwIDAtNjQwIDMyMCAzMjAgMCAwIDAgMCA2NDBtMCA2NGEzODQgMzg0IDAgMSAxIDAtNzY4IDM4NCAzODQgMCAwIDEgMCA3NjhcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjYyKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiAzMjBhMzIgMzIgMCAwIDEgMzIgMzJsLS41MTIgMjI0YTMyIDMyIDAgMSAxLTY0IDBMNDgwIDM1MmEzMiAzMiAwIDAgMSAzMi0zMlwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNjIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNDQ4IDU3NmE2NCA2NCAwIDEgMCAxMjggMCA2NCA2NCAwIDEgMC0xMjggMG05Ni00NDh2MTI4aC02NFYxMjhoLTk2YTMyIDMyIDAgMCAxIDAtNjRoMjU2YTMyIDMyIDAgMSAxIDAgNjR6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvdGltZXIudnVlXG52YXIgdGltZXJfZGVmYXVsdCA9IHRpbWVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy90b2lsZXQtcGFwZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjYzIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNjMsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjYzLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI2MyB9IGZyb20gXCJ2dWVcIjtcbnZhciB0b2lsZXRfcGFwZXJfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjYzKHtcbiAgbmFtZTogXCJUb2lsZXRQYXBlclwiLFxuICBfX25hbWU6IFwidG9pbGV0LXBhcGVyXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNjMoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI2MyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjYzKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTU5NS4yIDEyOEgzMjBhMTkyIDE5MiAwIDAgMC0xOTIgMTkydjU3NmgzODRWMzUyYzAtOTAuNDk2IDMyLjQ0OC0xNzEuMiA4My4yLTIyNE03MzYgNjRjMTIzLjcxMiAwIDIyNCAxMjguOTYgMjI0IDI4OFM4NTkuNzEyIDY0MCA3MzYgNjQwSDU3NnYzMjBINjRWMzIwQTI1NiAyNTYgMCAwIDEgMzIwIDY0ek01NzYgMzUydjIyNGgxNjBjODQuMzUyIDAgMTYwLTk3LjI4IDE2MC0yMjRzLTc1LjY0OC0yMjQtMTYwLTIyNC0xNjAgOTcuMjgtMTYwIDIyNFwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNjMoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNzM2IDQ0OGMtMzUuMzI4IDAtNjQtNDMuMDA4LTY0LTk2czI4LjY3Mi05NiA2NC05NiA2NCA0My4wMDggNjQgOTYtMjguNjcyIDk2LTY0IDk2XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvdG9pbGV0LXBhcGVyLnZ1ZVxudmFyIHRvaWxldF9wYXBlcl9kZWZhdWx0ID0gdG9pbGV0X3BhcGVyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy90b29scy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyNjQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI2NCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syNjQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjY0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHRvb2xzX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI2NCh7XG4gIG5hbWU6IFwiVG9vbHNcIixcbiAgX19uYW1lOiBcInRvb2xzXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNjQoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI2NChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjY0KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTc2NC40MTYgMjU0LjcyYTM1MS42OCAzNTEuNjggMCAwIDEgODYuMzM2IDE0OS4xODRIOTYwdjE5Mi4wNjRIODUwLjc1MmEzNTEuNjggMzUxLjY4IDAgMCAxLTg2LjMzNiAxNDkuMzEybDU0LjcyIDk0LjcyLTE2Ni4yNzIgOTYtNTQuNTkyLTk0LjcyYTM1Mi42NCAzNTIuNjQgMCAwIDEtMTcyLjQ4IDBMMzcxLjEzNiA5MzZsLTE2Ni4yNzItOTYgNTQuNzItOTQuNzJhMzUxLjY4IDM1MS42OCAwIDAgMS04Ni4zMzYtMTQ5LjMxMkg2NHYtMTkyaDEwOS4yNDhhMzUxLjY4IDM1MS42OCAwIDAgMSA4Ni4zMzYtMTQ5LjMxMkwyMDQuOCAxNjBsMTY2LjIwOC05NmguMTkybDU0LjY1NiA5NC41OTJhMzUyLjY0IDM1Mi42NCAwIDAgMSAxNzIuNDggMEw2NTIuOCA2NGguMTI4TDgxOS4yIDE2MGwtNTQuNzIgOTQuNzJ6TTcwNCA0OTkuOTY4YTE5MiAxOTIgMCAxIDAtMzg0IDAgMTkyIDE5MiAwIDAgMCAzODQgMFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3Rvb2xzLnZ1ZVxudmFyIHRvb2xzX2RlZmF1bHQgPSB0b29sc192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvdG9wLWxlZnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjY1IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNjUsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjY1LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI2NSB9IGZyb20gXCJ2dWVcIjtcbnZhciB0b3BfbGVmdF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyNjUoe1xuICBuYW1lOiBcIlRvcExlZnRcIixcbiAgX19uYW1lOiBcInRvcC1sZWZ0XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNjUoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI2NShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjY1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTI1NiAyNTZoNDE2YTMyIDMyIDAgMSAwIDAtNjRIMjI0YTMyIDMyIDAgMCAwLTMyIDMydjQ0OGEzMiAzMiAwIDAgMCA2NCAwelwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNjUoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMjQ2LjY1NiAyMDEuMzQ0YTMyIDMyIDAgMCAwLTQ1LjMxMiA0NS4zMTJsNTQ0IDU0NGEzMiAzMiAwIDAgMCA0NS4zMTItNDUuMzEybC01NDQtNTQ0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3RvcC1sZWZ0LnZ1ZVxudmFyIHRvcF9sZWZ0X2RlZmF1bHQgPSB0b3BfbGVmdF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvdG9wLXJpZ2h0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI2NiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjY2LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI2NiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNjYgfSBmcm9tIFwidnVlXCI7XG52YXIgdG9wX3JpZ2h0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI2Nih7XG4gIG5hbWU6IFwiVG9wUmlnaHRcIixcbiAgX19uYW1lOiBcInRvcC1yaWdodFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjY2KCksIF9jcmVhdGVFbGVtZW50QmxvY2syNjYoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI2NihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk03NjggMjU2SDM1My42YTMyIDMyIDAgMSAxIDAtNjRIODAwYTMyIDMyIDAgMCAxIDMyIDMydjQ0OGEzMiAzMiAwIDAgMS02NCAwelwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNjYoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNzc3LjM0NCAyMDEuMzQ0YTMyIDMyIDAgMCAxIDQ1LjMxMiA0NS4zMTJsLTU0NCA1NDRhMzIgMzIgMCAwIDEtNDUuMzEyLTQ1LjMxMmw1NDQtNTQ0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3RvcC1yaWdodC52dWVcbnZhciB0b3BfcmlnaHRfZGVmYXVsdCA9IHRvcF9yaWdodF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvdG9wLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI2NyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjY3LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI2NywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNjcgfSBmcm9tIFwidnVlXCI7XG52YXIgdG9wX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI2Nyh7XG4gIG5hbWU6IFwiVG9wXCIsXG4gIF9fbmFtZTogXCJ0b3BcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI2NygpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjY3KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNjcoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTcyLjIzNSAyMDUuMjgydjYwMC4zNjVhMzAuMTE4IDMwLjExOCAwIDEgMS02MC4yMzUgMFYyMDUuMjgyTDI5Mi4zODIgNDM4LjYzM2EyOC45MTMgMjguOTEzIDAgMCAxLTQyLjY0NiAwIDMzLjQzIDMzLjQzIDAgMCAxIDAtNDUuMjM2bDI3MS4wNTgtMjg4LjA0NWEyOC45MTMgMjguOTEzIDAgMCAxIDQyLjY0NyAwTDgzNC41IDM5My4zOTdhMzMuNDMgMzMuNDMgMCAwIDEgMCA0NS4xNzYgMjguOTEzIDI4LjkxMyAwIDAgMS00Mi42NDcgMGwtMjE5LjYxOC0yMzMuMjN6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvdG9wLnZ1ZVxudmFyIHRvcF9kZWZhdWx0ID0gdG9wX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy90cmVuZC1jaGFydHMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjY4IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNjgsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjY4LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI2OCB9IGZyb20gXCJ2dWVcIjtcbnZhciB0cmVuZF9jaGFydHNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjY4KHtcbiAgbmFtZTogXCJUcmVuZENoYXJ0c1wiLFxuICBfX25hbWU6IFwidHJlbmQtY2hhcnRzXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNjgoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI2OChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjY4KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTEyOCA4OTZWMTI4aDc2OHY3Njh6bTI5MS43MTItMzI3LjI5NiAxMjggMTAyLjQgMTgwLjE2LTIwMS43OTItNDcuNzQ0LTQyLjYyNC0xMzkuODQgMTU2LjYwOC0xMjgtMTAyLjQtMTgwLjE2IDIwMS43OTIgNDcuNzQ0IDQyLjYyNCAxMzkuODQtMTU2LjYwOHpNODE2IDM1MmE0OCA0OCAwIDEgMC05NiAwIDQ4IDQ4IDAgMCAwIDk2IDBcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy90cmVuZC1jaGFydHMudnVlXG52YXIgdHJlbmRfY2hhcnRzX2RlZmF1bHQgPSB0cmVuZF9jaGFydHNfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3Ryb3BoeS1iYXNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI2OSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjY5LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI2OSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNjkgfSBmcm9tIFwidnVlXCI7XG52YXIgdHJvcGh5X2Jhc2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjY5KHtcbiAgbmFtZTogXCJUcm9waHlCYXNlXCIsXG4gIF9fbmFtZTogXCJ0cm9waHktYmFzZVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjY5KCksIF9jcmVhdGVFbGVtZW50QmxvY2syNjkoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIFwieG1sOnNwYWNlXCI6IFwicHJlc2VydmVcIixcbiAgICAgIHN0eWxlOiB7IFwiZW5hYmxlLWJhY2tncm91bmRcIjogXCJuZXcgMCAwIDEwMjQgMTAyNFwiIH0sXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNjkoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNOTE4LjQgMjAxLjZjLTYuNC02LjQtMTIuOC05LjYtMjIuNC05LjZINzY4Vjk2YzAtOS42LTMuMi0xNi05LjYtMjIuNEM3NTIgNjcuMiA3NDUuNiA2NCA3MzYgNjRIMjg4Yy05LjYgMC0xNiAzLjItMjIuNCA5LjZDMjU5LjIgODAgMjU2IDg2LjQgMjU2IDk2djk2SDEyOGMtOS42IDAtMTYgMy4yLTIyLjQgOS42LTYuNCA2LjQtOS42IDE2LTkuNiAyMi40IDMuMiAxMDguOCAyNS42IDE4NS42IDY0IDIyNCAzNC40IDM0LjQgNzcuNTYgNTUuNjUgMTI3LjY1IDYxLjk5IDEwLjkxIDIwLjQ0IDI0Ljc4IDM5LjI1IDQxLjk1IDU2LjQxIDQwLjg2IDQwLjg2IDkxIDY1LjQ3IDE1MC40IDcxLjlWNzY4aC05NmMtOS42IDAtMTYgMy4yLTIyLjQgOS42LTYuNCA2LjQtOS42IDEyLjgtOS42IDIyLjRzMy4yIDE2IDkuNiAyMi40YzYuNCA2LjQgMTIuOCA5LjYgMjIuNCA5LjZoMjU2YzkuNiAwIDE2LTMuMiAyMi40LTkuNiA2LjQtNi40IDkuNi0xMi44IDkuNi0yMi40cy0zLjItMTYtOS42LTIyLjRjLTYuNC02LjQtMTIuOC05LjYtMjIuNC05LjZoLTk2VjYzNy4yNmM1OS40LTcuNzEgMTA5LjU0LTMwLjAxIDE1MC40LTcwLjg2IDE3LjItMTcuMiAzMS41MS0zNi4wNiA0Mi44MS01Ni41NSA0OC45My02LjUxIDkwLjAyLTI3LjcgMTI2Ljc5LTYxLjg1IDM4LjQtMzguNCA2MC44LTExMiA2NC0yMjQgMC02LjQtMy4yLTE2LTkuNi0yMi40ek0yNTYgNDM4LjRjLTE5LjItNi40LTM1LjItMTkuMi01MS4yLTM1LjItMjIuNC0yMi40LTM1LjItNzAuNC00MS42LTE0Ny4ySDI1NnptMzkwLjQgODBDNjA4IDU1My42IDU2Ni40IDU3NiA1MTIgNTc2cy05OS4yLTE5LjItMTM0LjQtNTcuNkMzNDIuNCA0ODAgMzIwIDQzOC40IDMyMCAzODRWMTI4aDM4NHYyNTZjMCA1NC40LTE5LjIgOTkuMi01Ny42IDEzNC40bTE3Mi44LTExNS4yYy0xNiAxNi0zMiAyNS42LTUxLjIgMzUuMlYyNTZoOTIuOGMtNi40IDc2LjgtMTkuMiAxMjQuOC00MS42IDE0Ny4yek03NjggODk2SDI1NmMtOS42IDAtMTYgMy4yLTIyLjQgOS42LTYuNCA2LjQtOS42IDEyLjgtOS42IDIyLjRzMy4yIDE2IDkuNiAyMi40YzYuNCA2LjQgMTIuOCA5LjYgMjIuNCA5LjZoNTEyYzkuNiAwIDE2LTMuMiAyMi40LTkuNiA2LjQtNi40IDkuNi0xMi44IDkuNi0yMi40cy0zLjItMTYtOS42LTIyLjRjLTYuNC02LjQtMTIuOC05LjYtMjIuNC05LjZcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy90cm9waHktYmFzZS52dWVcbnZhciB0cm9waHlfYmFzZV9kZWZhdWx0ID0gdHJvcGh5X2Jhc2VfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3Ryb3BoeS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyNzAgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI3MCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syNzAsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjcwIH0gZnJvbSBcInZ1ZVwiO1xudmFyIHRyb3BoeV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyNzAoe1xuICBuYW1lOiBcIlRyb3BoeVwiLFxuICBfX25hbWU6IFwidHJvcGh5XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNzAoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI3MChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjcwKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTQ4MCA4OTZWNzAyLjA4QTI1Ni4yNTYgMjU2LjI1NiAwIDAgMSAyNjQuMDY0IDUxMmgtMzIuNjRhOTYgOTYgMCAwIDEtOTEuOTY4LTY4LjQxNkw5My42MzIgMjkwLjg4YTc2LjggNzYuOCAwIDAgMSA3My42LTk4Ljg4SDI1NlY5NmEzMiAzMiAwIDAgMSAzMi0zMmg0NDhhMzIgMzIgMCAwIDEgMzIgMzJ2OTZoODguNzY4YTc2LjggNzYuOCAwIDAgMSA3My42IDk4Ljg4TDg4NC40OCA0NDMuNTJBOTYgOTYgMCAwIDEgNzkyLjU3NiA1MTJoLTMyLjY0QTI1Ni4yNTYgMjU2LjI1NiAwIDAgMSA1NDQgNzAyLjA4Vjg5NmgxMjhhMzIgMzIgMCAxIDEgMCA2NEgzNTJhMzIgMzIgMCAxIDEgMC02NHptMjI0LTQ0OFYxMjhIMzIwdjMyMGExOTIgMTkyIDAgMSAwIDM4NCAwbTY0IDBoMjQuNTc2YTMyIDMyIDAgMCAwIDMwLjY1Ni0yMi43ODRsNDUuODI0LTE1Mi43NjhBMTIuOCAxMi44IDAgMCAwIDg1Ni43NjggMjU2SDc2OHptLTUxMiAwVjI1NmgtODguNzY4YTEyLjggMTIuOCAwIDAgMC0xMi4yODggMTYuNDQ4bDQ1LjgyNCAxNTIuNzY4QTMyIDMyIDAgMCAwIDIzMS40MjQgNDQ4elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3Ryb3BoeS52dWVcbnZhciB0cm9waHlfZGVmYXVsdCA9IHRyb3BoeV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvdHVybi1vZmYudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjcxIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNzEsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjcxLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI3MSB9IGZyb20gXCJ2dWVcIjtcbnZhciB0dXJuX29mZl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyNzEoe1xuICBuYW1lOiBcIlR1cm5PZmZcIixcbiAgX19uYW1lOiBcInR1cm4tb2ZmXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNzEoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI3MShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjcxKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTMyOS45NTYgMjU3LjEzOGEyNTQuODYyIDI1NC44NjIgMCAwIDAgMCA1MDkuNzI0aDM2NC4wODhhMjU0Ljg2MiAyNTQuODYyIDAgMCAwIDAtNTA5LjcyNHptMC03Mi44MThoMzY0LjA4OGEzMjcuNjggMzI3LjY4IDAgMSAxIDAgNjU1LjM2SDMyOS45NTZhMzI3LjY4IDMyNy42OCAwIDEgMSAwLTY1NS4zNnpcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjcxKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTMyOS45NTYgNjIxLjIyN2ExMDkuMjI3IDEwOS4yMjcgMCAxIDAgMC0yMTguNDU0IDEwOS4yMjcgMTA5LjIyNyAwIDAgMCAwIDIxOC40NTRtMCA3Mi44MTdhMTgyLjA0NCAxODIuMDQ0IDAgMSAxIDAtMzY0LjA4OCAxODIuMDQ0IDE4Mi4wNDQgMCAwIDEgMCAzNjQuMDg4XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvdHVybi1vZmYudnVlXG52YXIgdHVybl9vZmZfZGVmYXVsdCA9IHR1cm5fb2ZmX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy91bWJyZWxsYS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyNzIgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI3Miwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syNzIsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjcyIH0gZnJvbSBcInZ1ZVwiO1xudmFyIHVtYnJlbGxhX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI3Mih7XG4gIG5hbWU6IFwiVW1icmVsbGFcIixcbiAgX19uYW1lOiBcInVtYnJlbGxhXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNzIoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI3MihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjcyKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTMyMCA3NjhhMzIgMzIgMCAxIDEgNjQgMCA2NCA2NCAwIDAgMCAxMjggMFY1MTJINjRhNDQ4IDQ0OCAwIDEgMSA4OTYgMEg1NzZ2MjU2YTEyOCAxMjggMCAxIDEtMjU2IDBtNTcwLjY4OC0zMjBhMzg0LjEyOCAzODQuMTI4IDAgMCAwLTc1Ny4zNzYgMHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy91bWJyZWxsYS52dWVcbnZhciB1bWJyZWxsYV9kZWZhdWx0ID0gdW1icmVsbGFfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3VubG9jay52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyNzMgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI3Mywgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syNzMsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjczIH0gZnJvbSBcInZ1ZVwiO1xudmFyIHVubG9ja192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyNzMoe1xuICBuYW1lOiBcIlVubG9ja1wiLFxuICBfX25hbWU6IFwidW5sb2NrXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNzMoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI3MyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjczKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTIyNCA0NDhhMzIgMzIgMCAwIDAtMzIgMzJ2Mzg0YTMyIDMyIDAgMCAwIDMyIDMyaDU3NmEzMiAzMiAwIDAgMCAzMi0zMlY0ODBhMzIgMzIgMCAwIDAtMzItMzJ6bTAtNjRoNTc2YTk2IDk2IDAgMCAxIDk2IDk2djM4NGE5NiA5NiAwIDAgMS05NiA5NkgyMjRhOTYgOTYgMCAwIDEtOTYtOTZWNDgwYTk2IDk2IDAgMCAxIDk2LTk2XCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI3MyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01MTIgNTQ0YTMyIDMyIDAgMCAxIDMyIDMydjE5MmEzMiAzMiAwIDEgMS02NCAwVjU3NmEzMiAzMiAwIDAgMSAzMi0zMm0xNzguMzA0LTI5NS4yOTZBMTkyLjA2NCAxOTIuMDY0IDAgMCAwIDMyMCAzMjB2NjRoMzUybDk2IDM4LjRWNDQ4SDI1NlYzMjBhMjU2IDI1NiAwIDAgMSA0OTMuNzYtOTUuMTA0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3VubG9jay52dWVcbnZhciB1bmxvY2tfZGVmYXVsdCA9IHVubG9ja192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvdXBsb2FkLWZpbGxlZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyNzQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI3NCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syNzQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjc0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHVwbG9hZF9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50Mjc0KHtcbiAgbmFtZTogXCJVcGxvYWRGaWxsZWRcIixcbiAgX19uYW1lOiBcInVwbG9hZC1maWxsZWRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI3NCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjc0KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNzQoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTQ0IDg2NFY2NzJoMTI4TDUxMiA0ODAgMzUyIDY3MmgxMjh2MTkySDMyMHYtMS42Yy01LjM3Ni4zMi0xMC40OTYgMS42LTE2IDEuNkEyNDAgMjQwIDAgMCAxIDY0IDYyNGMwLTEyMy4xMzYgOTMuMTItMjIzLjQ4OCAyMTIuNjA4LTIzNy4yNDhBMjM5LjgwOCAyMzkuODA4IDAgMCAxIDUxMiAxOTJhMjM5Ljg3MiAyMzkuODcyIDAgMCAxIDIzNS40NTYgMTk0Ljc1MmMxMTkuNDg4IDEzLjc2IDIxMi40OCAxMTQuMTEyIDIxMi40OCAyMzcuMjQ4YTI0MCAyNDAgMCAwIDEtMjQwIDI0MGMtNS4zNzYgMC0xMC41Ni0xLjI4LTE2LTEuNnYxLjZ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvdXBsb2FkLWZpbGxlZC52dWVcbnZhciB1cGxvYWRfZmlsbGVkX2RlZmF1bHQgPSB1cGxvYWRfZmlsbGVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy91cGxvYWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50Mjc1IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNzUsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjc1LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI3NSB9IGZyb20gXCJ2dWVcIjtcbnZhciB1cGxvYWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50Mjc1KHtcbiAgbmFtZTogXCJVcGxvYWRcIixcbiAgX19uYW1lOiBcInVwbG9hZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjc1KCksIF9jcmVhdGVFbGVtZW50QmxvY2syNzUoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI3NShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk0xNjAgODMyaDcwNGEzMiAzMiAwIDEgMSAwIDY0SDE2MGEzMiAzMiAwIDEgMSAwLTY0bTM4NC01NzguMzA0VjcwNGgtNjRWMjQ3LjI5NkwyMzcuMjQ4IDQ5MC4wNDggMTkyIDQ0NC44IDUwOC44IDEyOGwzMTYuOCAzMTYuOC00NS4zMTIgNDUuMjQ4elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3VwbG9hZC52dWVcbnZhciB1cGxvYWRfZGVmYXVsdCA9IHVwbG9hZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvdXNlci1maWxsZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50Mjc2IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNzYsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjc2LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI3NiB9IGZyb20gXCJ2dWVcIjtcbnZhciB1c2VyX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyNzYoe1xuICBuYW1lOiBcIlVzZXJGaWxsZWRcIixcbiAgX19uYW1lOiBcInVzZXItZmlsbGVkXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syNzYoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI3NihcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjc2KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTI4OCAzMjBhMjI0IDIyNCAwIDEgMCA0NDggMCAyMjQgMjI0IDAgMSAwLTQ0OCAwbTU0NCA2MDhIMTYwYTMyIDMyIDAgMCAxLTMyLTMydi05NmExNjAgMTYwIDAgMCAxIDE2MC0xNjBoNDQ4YTE2MCAxNjAgMCAwIDEgMTYwIDE2MHY5NmEzMiAzMiAwIDAgMS0zMiAzMnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy91c2VyLWZpbGxlZC52dWVcbnZhciB1c2VyX2ZpbGxlZF9kZWZhdWx0ID0gdXNlcl9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3VzZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50Mjc3IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNzcsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjc3LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI3NyB9IGZyb20gXCJ2dWVcIjtcbnZhciB1c2VyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI3Nyh7XG4gIG5hbWU6IFwiVXNlclwiLFxuICBfX25hbWU6IFwidXNlclwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjc3KCksIF9jcmVhdGVFbGVtZW50QmxvY2syNzcoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI3NyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01MTIgNTEyYTE5MiAxOTIgMCAxIDAgMC0zODQgMTkyIDE5MiAwIDAgMCAwIDM4NG0wIDY0YTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDAgMSAwIDUxMm0zMjAgMzIwdi05NmE5NiA5NiAwIDAgMC05Ni05NkgyODhhOTYgOTYgMCAwIDAtOTYgOTZ2OTZhMzIgMzIgMCAxIDEtNjQgMHYtOTZhMTYwIDE2MCAwIDAgMSAxNjAtMTYwaDQ0OGExNjAgMTYwIDAgMCAxIDE2MCAxNjB2OTZhMzIgMzIgMCAxIDEtNjQgMFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3VzZXIudnVlXG52YXIgdXNlcl9kZWZhdWx0ID0gdXNlcl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvdmFuLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI3OCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjc4LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI3OCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syNzggfSBmcm9tIFwidnVlXCI7XG52YXIgdmFuX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI3OCh7XG4gIG5hbWU6IFwiVmFuXCIsXG4gIF9fbmFtZTogXCJ2YW5cIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI3OCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjc4KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNzgoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNMTI4Ljg5NiA3MzZIOTZhMzIgMzIgMCAwIDEtMzItMzJWMjI0YTMyIDMyIDAgMCAxIDMyLTMyaDU3NmEzMiAzMiAwIDAgMSAzMiAzMnY5NmgxNjQuNTQ0YTMyIDMyIDAgMCAxIDMxLjYxNiAyNy4xMzZsNTQuMTQ0IDM1MkEzMiAzMiAwIDAgMSA5MjIuNjg4IDczNmgtOTEuNTJhMTQ0IDE0NCAwIDEgMS0yODYuMjcyIDBINDE1LjEwNGExNDQgMTQ0IDAgMSAxLTI4Ni4yNzIgMHptMjMuMzYtNjRhMTQzLjg3MiAxNDMuODcyIDAgMCAxIDIzOS40ODggMEg1NjguMzJjMTcuMDg4LTI1LjYgNDIuMjQtNDUuMzc2IDcxLjc0NC01NS44MDhWMjU2SDEyOHY0MTZ6bTY1NS40ODggMGg3Ny42MzJsLTE5LjY0OC0xMjhINzA0djY0Ljg5NkExNDQgMTQ0IDAgMCAxIDgwNy43NDQgNjcybTQ4LjEyOC0xOTItMTQuNzItOTZINzA0djk2aDE1MS44NzJNNjg4IDgzMmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDAgMCAwIDE2MG0tNDE2IDBhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAwIDAgMCAxNjBcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy92YW4udnVlXG52YXIgdmFuX2RlZmF1bHQgPSB2YW5fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3ZpZGVvLWNhbWVyYS1maWxsZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50Mjc5IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyNzksIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjc5LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI3OSB9IGZyb20gXCJ2dWVcIjtcbnZhciB2aWRlb19jYW1lcmFfZmlsbGVkX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI3OSh7XG4gIG5hbWU6IFwiVmlkZW9DYW1lcmFGaWxsZWRcIixcbiAgX19uYW1lOiBcInZpZGVvLWNhbWVyYS1maWxsZWRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI3OSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjc5KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyNzkoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJtNzY4IDU3NiAxOTItNjR2MzIwbC0xOTItNjR2OTZhMzIgMzIgMCAwIDEtMzIgMzJIOTZhMzIgMzIgMCAwIDEtMzItMzJWNDgwYTMyIDMyIDAgMCAxIDMyLTMyaDY0MGEzMiAzMiAwIDAgMSAzMiAzMnpNMTkyIDc2OHY2NGgzODR2LTY0em0xOTItNDgwYTE2MCAxNjAgMCAwIDEgMzIwIDAgMTYwIDE2MCAwIDAgMS0zMjAgMG02NCAwYTk2IDk2IDAgMSAwIDE5Mi4wNjQtLjA2NEE5NiA5NiAwIDAgMCA0NDggMjg4bS0zMjAgMzJhMTI4IDEyOCAwIDEgMSAyNTYuMDY0LjA2NEExMjggMTI4IDAgMCAxIDEyOCAzMjBtNjQgMGE2NCA2NCAwIDEgMCAxMjggMCA2NCA2NCAwIDAgMC0xMjggMFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3ZpZGVvLWNhbWVyYS1maWxsZWQudnVlXG52YXIgdmlkZW9fY2FtZXJhX2ZpbGxlZF9kZWZhdWx0ID0gdmlkZW9fY2FtZXJhX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvdmlkZW8tY2FtZXJhLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI4MCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjgwLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI4MCwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syODAgfSBmcm9tIFwidnVlXCI7XG52YXIgdmlkZW9fY2FtZXJhX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI4MCh7XG4gIG5hbWU6IFwiVmlkZW9DYW1lcmFcIixcbiAgX19uYW1lOiBcInZpZGVvLWNhbWVyYVwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjgwKCksIF9jcmVhdGVFbGVtZW50QmxvY2syODAoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI4MChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk03MDQgNzY4VjI1NkgxMjh2NTEyem02NC00MTYgMTkyLTk2djUxMmwtMTkyLTk2djEyOGEzMiAzMiAwIDAgMS0zMiAzMkg5NmEzMiAzMiAwIDAgMS0zMi0zMlYyMjRhMzIgMzIgMCAwIDEgMzItMzJoNjQwYTMyIDMyIDAgMCAxIDMyIDMyem0wIDcxLjU1MnYxNzYuODk2bDEyOCA2NFYzNTkuNTUyek0xOTIgMzIwaDE5MnY2NEgxOTJ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvdmlkZW8tY2FtZXJhLnZ1ZVxudmFyIHZpZGVvX2NhbWVyYV9kZWZhdWx0ID0gdmlkZW9fY2FtZXJhX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy92aWRlby1wYXVzZS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyODEgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI4MSwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syODEsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjgxIH0gZnJvbSBcInZ1ZVwiO1xudmFyIHZpZGVvX3BhdXNlX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI4MSh7XG4gIG5hbWU6IFwiVmlkZW9QYXVzZVwiLFxuICBfX25hbWU6IFwidmlkZW8tcGF1c2VcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI4MSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjgxKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyODEoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDY0YTQ0OCA0NDggMCAxIDEgMCA4OTYgNDQ4IDQ0OCAwIDAgMSAwLTg5Nm0wIDgzMmEzODQgMzg0IDAgMCAwIDAtNzY4IDM4NCAzODQgMCAwIDAgMCA3NjhtLTk2LTU0NHEzMiAwIDMyIDMydjI1NnEwIDMyLTMyIDMydC0zMi0zMlYzODRxMC0zMiAzMi0zMm0xOTIgMHEzMiAwIDMyIDMydjI1NnEwIDMyLTMyIDMydC0zMi0zMlYzODRxMC0zMiAzMi0zMlwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3ZpZGVvLXBhdXNlLnZ1ZVxudmFyIHZpZGVvX3BhdXNlX2RlZmF1bHQgPSB2aWRlb19wYXVzZV92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvdmlkZW8tcGxheS52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyODIgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI4Miwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syODIsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjgyIH0gZnJvbSBcInZ1ZVwiO1xudmFyIHZpZGVvX3BsYXlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50MjgyKHtcbiAgbmFtZTogXCJWaWRlb1BsYXlcIixcbiAgX19uYW1lOiBcInZpZGVvLXBsYXlcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI4MigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjgyKFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyODIoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDY0YTQ0OCA0NDggMCAxIDEgMCA4OTYgNDQ4IDQ0OCAwIDAgMSAwLTg5Nm0wIDgzMmEzODQgMzg0IDAgMCAwIDAtNzY4IDM4NCAzODQgMCAwIDAgMCA3NjhtLTQ4LTI0Ny42MTZMNjY4LjYwOCA1MTIgNDY0IDM3NS42MTZ6bTEwLjYyNC0zNDIuNjU2IDI0OS40NzIgMTY2LjMzNmE0OCA0OCAwIDAgMSAwIDc5Ljg3Mkw0NzQuNjI0IDcxOC4yNzJBNDggNDggMCAwIDEgNDAwIDY3OC4zMzZWMzQ1LjZhNDggNDggMCAwIDEgNzQuNjI0LTM5LjkzNnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy92aWRlby1wbGF5LnZ1ZVxudmFyIHZpZGVvX3BsYXlfZGVmYXVsdCA9IHZpZGVvX3BsYXlfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3ZpZXcudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjgzIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyODMsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjgzLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI4MyB9IGZyb20gXCJ2dWVcIjtcbnZhciB2aWV3X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI4Myh7XG4gIG5hbWU6IFwiVmlld1wiLFxuICBfX25hbWU6IFwidmlld1wiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjgzKCksIF9jcmVhdGVFbGVtZW50QmxvY2syODMoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI4MyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01MTIgMTYwYzMyMCAwIDUxMiAzNTIgNTEyIDM1MlM4MzIgODY0IDUxMiA4NjQgMCA1MTIgMCA1MTJzMTkyLTM1MiA1MTItMzUybTAgNjRjLTIyNS4yOCAwLTM4NC4xMjggMjA4LjA2NC00MzYuOCAyODggNTIuNjA4IDc5Ljg3MiAyMTEuNDU2IDI4OCA0MzYuOCAyODggMjI1LjI4IDAgMzg0LjEyOC0yMDguMDY0IDQzNi44LTI4OC01Mi42MDgtNzkuODcyLTIxMS40NTYtMjg4LTQzNi44LTI4OHptMCA2NGEyMjQgMjI0IDAgMSAxIDAgNDQ4IDIyNCAyMjQgMCAwIDEgMC00NDhtMCA2NGExNjAuMTkyIDE2MC4xOTIgMCAwIDAtMTYwIDE2MGMwIDg4LjE5MiA3MS43NDQgMTYwIDE2MCAxNjBzMTYwLTcxLjgwOCAxNjAtMTYwLTcxLjc0NC0xNjAtMTYwLTE2MFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3ZpZXcudnVlXG52YXIgdmlld19kZWZhdWx0ID0gdmlld192dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvd2FsbGV0LWZpbGxlZC52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyODQgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI4NCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syODQsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjg0IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHdhbGxldF9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50Mjg0KHtcbiAgbmFtZTogXCJXYWxsZXRGaWxsZWRcIixcbiAgX19uYW1lOiBcIndhbGxldC1maWxsZWRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI4NCgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjg0KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyODQoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNjg4IDUxMmExMTIgMTEyIDAgMSAwIDAgMjI0aDIwOHYxNjBIMTI4VjM1Mmg3Njh2MTYwem0zMiAxNjBoLTMyYTQ4IDQ4IDAgMCAxIDAtOTZoMzJhNDggNDggMCAwIDEgMCA5Nm0tODAtNTQ0IDEyOCAxNjBIMzg0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3dhbGxldC1maWxsZWQudnVlXG52YXIgd2FsbGV0X2ZpbGxlZF9kZWZhdWx0ID0gd2FsbGV0X2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvd2FsbGV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI4NSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjg1LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI4NSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syODUgfSBmcm9tIFwidnVlXCI7XG52YXIgd2FsbGV0X3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI4NSh7XG4gIG5hbWU6IFwiV2FsbGV0XCIsXG4gIF9fbmFtZTogXCJ3YWxsZXRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI4NSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjg1KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyODUoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNjQwIDI4OGgtNjRWMTI4SDEyOHY3MDRoMzg0djMyYTMyIDMyIDAgMCAwIDMyIDMySDk2YTMyIDMyIDAgMCAxLTMyLTMyVjk2YTMyIDMyIDAgMCAxIDMyLTMyaDUxMmEzMiAzMiAwIDAgMSAzMiAzMnpcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjg1KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTEyOCAzMjB2NTEyaDc2OFYzMjB6bS0zMi02NGg4MzJhMzIgMzIgMCAwIDEgMzIgMzJ2NTc2YTMyIDMyIDAgMCAxLTMyIDMySDk2YTMyIDMyIDAgMCAxLTMyLTMyVjI4OGEzMiAzMiAwIDAgMSAzMi0zMlwiXG4gICAgICB9KSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyODUoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNzA0IDY0MGE2NCA2NCAwIDEgMSAwLTEyOCA2NCA2NCAwIDAgMSAwIDEyOFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3dhbGxldC52dWVcbnZhciB3YWxsZXRfZGVmYXVsdCA9IHdhbGxldF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvd2Fybi10cmlhbmdsZS1maWxsZWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50Mjg2IH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyODYsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjg2LCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI4NiB9IGZyb20gXCJ2dWVcIjtcbnZhciB3YXJuX3RyaWFuZ2xlX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyODYoe1xuICBuYW1lOiBcIldhcm5UcmlhbmdsZUZpbGxlZFwiLFxuICBfX25hbWU6IFwid2Fybi10cmlhbmdsZS1maWxsZWRcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI4NigpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjg2KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICBcInhtbDpzcGFjZVwiOiBcInByZXNlcnZlXCIsXG4gICAgICBzdHlsZTogeyBcImVuYWJsZS1iYWNrZ3JvdW5kXCI6IFwibmV3IDAgMCAxMDI0IDEwMjRcIiB9LFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjg2KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTkyOC45OSA3NTUuODMgNTc0LjYgMjAzLjI1Yy0xMi44OS0yMC4xNi0zNi43Ni0zMi41OC02Mi42LTMyLjU4cy00OS43MSAxMi40My02Mi42IDMyLjU4TDk1LjAxIDc1NS44M2MtMTIuOTEgMjAuMTItMTIuOSA0NC45MS4wMSA2NS4wMyAxMi45MiAyMC4xMiAzNi43OCAzMi41MSA2Mi41OSAzMi40OWg3MDguNzhjMjUuODIuMDEgNDkuNjgtMTIuMzcgNjIuNTktMzIuNDkgMTIuOTEtMjAuMTIgMTIuOTItNDQuOTEuMDEtNjUuMDNNNTU0LjY3IDc2OGgtODUuMzN2LTg1LjMzaDg1LjMzem0wLTQyNi42N3YyOTguNjZoLTg1LjMzVjM0MS4zMnpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy93YXJuLXRyaWFuZ2xlLWZpbGxlZC52dWVcbnZhciB3YXJuX3RyaWFuZ2xlX2ZpbGxlZF9kZWZhdWx0ID0gd2Fybl90cmlhbmdsZV9maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3dhcm5pbmctZmlsbGVkLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI4NyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjg3LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI4NywgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syODcgfSBmcm9tIFwidnVlXCI7XG52YXIgd2FybmluZ19maWxsZWRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50Mjg3KHtcbiAgbmFtZTogXCJXYXJuaW5nRmlsbGVkXCIsXG4gIF9fbmFtZTogXCJ3YXJuaW5nLWZpbGxlZFwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjg3KCksIF9jcmVhdGVFbGVtZW50QmxvY2syODcoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI4NyhcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk01MTIgNjRhNDQ4IDQ0OCAwIDEgMSAwIDg5NiA0NDggNDQ4IDAgMCAxIDAtODk2bTAgMTkyYTU4LjQzMiA1OC40MzIgMCAwIDAtNTguMjQgNjMuNzQ0bDIzLjM2IDI1Ni4zODRhMzUuMDcyIDM1LjA3MiAwIDAgMCA2OS43NiAwbDIzLjI5Ni0yNTYuMzg0QTU4LjQzMiA1OC40MzIgMCAwIDAgNTEyIDI1Nm0wIDUxMmE1MS4yIDUxLjIgMCAxIDAgMC0xMDIuNCA1MS4yIDUxLjIgMCAwIDAgMCAxMDIuNFwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3dhcm5pbmctZmlsbGVkLnZ1ZVxudmFyIHdhcm5pbmdfZmlsbGVkX2RlZmF1bHQgPSB3YXJuaW5nX2ZpbGxlZF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvd2FybmluZy52dWU/dnVlJnR5cGU9c2NyaXB0JnNldHVwPXRydWUmbGFuZy50c1xuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQyODggfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZTI4OCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2syODgsIGNyZWF0ZUVsZW1lbnRCbG9jayBhcyBfY3JlYXRlRWxlbWVudEJsb2NrMjg4IH0gZnJvbSBcInZ1ZVwiO1xudmFyIHdhcm5pbmdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50Mjg4KHtcbiAgbmFtZTogXCJXYXJuaW5nXCIsXG4gIF9fbmFtZTogXCJ3YXJuaW5nXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syODgoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI4OChcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjg4KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTUxMiA2NGE0NDggNDQ4IDAgMSAxIDAgODk2IDQ0OCA0NDggMCAwIDEgMC04OTZtMCA4MzJhMzg0IDM4NCAwIDAgMCAwLTc2OCAzODQgMzg0IDAgMCAwIDAgNzY4bTQ4LTE3NmE0OCA0OCAwIDEgMS05NiAwIDQ4IDQ4IDAgMCAxIDk2IDBtLTQ4LTQ2NGEzMiAzMiAwIDAgMSAzMiAzMnYyODhhMzIgMzIgMCAwIDEtNjQgMFYyODhhMzIgMzIgMCAwIDEgMzItMzJcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy93YXJuaW5nLnZ1ZVxudmFyIHdhcm5pbmdfZGVmYXVsdCA9IHdhcm5pbmdfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3dhdGNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI4OSB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjg5LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI4OSwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syODkgfSBmcm9tIFwidnVlXCI7XG52YXIgd2F0Y2hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdCA9IC8qIEBfX1BVUkVfXyAqLyBfZGVmaW5lQ29tcG9uZW50Mjg5KHtcbiAgbmFtZTogXCJXYXRjaFwiLFxuICBfX25hbWU6IFwid2F0Y2hcIixcbiAgc2V0dXAoX19wcm9wcykge1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiAoX29wZW5CbG9jazI4OSgpLCBfY3JlYXRlRWxlbWVudEJsb2NrMjg5KFwic3ZnXCIsIHtcbiAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgIH0sIFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUyODkoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgZDogXCJNNTEyIDc2OGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAwIDAgMCA1MTJtMCA2NGEzMjAgMzIwIDAgMSAxIDAtNjQwIDMyMCAzMjAgMCAwIDEgMCA2NDBcIlxuICAgICAgfSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjg5KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTQ4MCAzNTJhMzIgMzIgMCAwIDEgMzIgMzJ2MTYwYTMyIDMyIDAgMCAxLTY0IDBWMzg0YTMyIDMyIDAgMCAxIDMyLTMyXCJcbiAgICAgIH0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI4OShcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIk00ODAgNTEyaDEyOHEzMiAwIDMyIDMydC0zMiAzMkg0ODBxLTMyIDAtMzItMzJ0MzItMzJtMTI4LTI1NlYxMjhINDE2djEyOGgtNjRWNjRoMzIwdjE5MnpNNDE2IDc2OHYxMjhoMTkyVjc2OGg2NHYxOTJIMzUyVjc2OHpcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy93YXRjaC52dWVcbnZhciB3YXRjaF9kZWZhdWx0ID0gd2F0Y2hfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3dhdGVybWVsb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjkwIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyOTAsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjkwLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI5MCB9IGZyb20gXCJ2dWVcIjtcbnZhciB3YXRlcm1lbG9uX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI5MCh7XG4gIG5hbWU6IFwiV2F0ZXJtZWxvblwiLFxuICBfX25hbWU6IFwid2F0ZXJtZWxvblwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjkwKCksIF9jcmVhdGVFbGVtZW50QmxvY2syOTAoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI5MChcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIm02ODMuMDcyIDYwMC4zMi00My42NDggMTYyLjgxNi02MS44MjQtMTYuNTEyIDUzLjI0OC0xOTguNTI4TDU3NiA0OTMuMjQ4bC0xNTguNCAxNTguNC00NS4yNDgtNDUuMjQ4IDE1OC40LTE1OC40LTU1LjYxNi01NS42MTYtMTk4LjUyOCA1My4yNDgtMTYuNTEyLTYxLjgyNCAxNjIuODE2LTQzLjY0OEwyODIuNzUyIDIwMEEzODQgMzg0IDAgMCAwIDgyNCA3NDEuMjQ4em0yMzEuNTUyIDE0MS4wNTZhNDQ4IDQ0OCAwIDEgMS02MzItNjMybDYzMiA2MzJcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy93YXRlcm1lbG9uLnZ1ZVxudmFyIHdhdGVybWVsb25fZGVmYXVsdCA9IHdhdGVybWVsb25fdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcblxuLy8gdW5wbHVnaW4tdnVlOi9ob21lL3J1bm5lci93b3JrL2VsZW1lbnQtcGx1cy1pY29ucy9lbGVtZW50LXBsdXMtaWNvbnMvcGFja2FnZXMvdnVlL3NyYy9jb21wb25lbnRzL3dpbmQtcG93ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjkxIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyOTEsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjkxLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI5MSB9IGZyb20gXCJ2dWVcIjtcbnZhciB3aW5kX3Bvd2VyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQgPSAvKiBAX19QVVJFX18gKi8gX2RlZmluZUNvbXBvbmVudDI5MSh7XG4gIG5hbWU6IFwiV2luZFBvd2VyXCIsXG4gIF9fbmFtZTogXCJ3aW5kLXBvd2VyXCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syOTEoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI5MShcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjkxKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwiTTE2MCA2NHEzMiAwIDMyIDMydjgzMnEwIDMyLTMyIDMydC0zMi0zMlY5NnEwLTMyIDMyLTMybTQxNiAzNTQuNjI0IDEyOC0xMS41ODRWMTY4Ljk2bC0xMjgtMTEuNTJ2MjYxLjEyem0tNjQgNS44MjRWMTUxLjU1MkwzMjAgMTM0LjA4VjE2MGgtNjRWNjRsNjE2LjcwNCA1Ni4wNjRBOTYgOTYgMCAwIDEgOTYwIDIxNS42OHYxNDQuNjRhOTYgOTYgMCAwIDEtODcuMjk2IDk1LjYxNkwyNTYgNTEyVjIyNGg2NHYyMTcuOTJ6bTI1Ni0yMy4yMzIgOTguODgtOC45NkEzMiAzMiAwIDAgMCA4OTYgMzYwLjMyVjIxNS42OGEzMiAzMiAwIDAgMC0yOS4xMi0zMS44NzJsLTk4Ljg4LTguOTZ6XCJcbiAgICAgIH0pXG4gICAgXSkpO1xuICB9XG59KTtcblxuLy8gc3JjL2NvbXBvbmVudHMvd2luZC1wb3dlci52dWVcbnZhciB3aW5kX3Bvd2VyX2RlZmF1bHQgPSB3aW5kX3Bvd2VyX3Z1ZV92dWVfdHlwZV9zY3JpcHRfc2V0dXBfdHJ1ZV9sYW5nX2RlZmF1bHQ7XG5cbi8vIHVucGx1Z2luLXZ1ZTovaG9tZS9ydW5uZXIvd29yay9lbGVtZW50LXBsdXMtaWNvbnMvZWxlbWVudC1wbHVzLWljb25zL3BhY2thZ2VzL3Z1ZS9zcmMvY29tcG9uZW50cy96b29tLWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nLnRzXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudDI5MiB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlMjkyLCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jazI5MiwgY3JlYXRlRWxlbWVudEJsb2NrIGFzIF9jcmVhdGVFbGVtZW50QmxvY2syOTIgfSBmcm9tIFwidnVlXCI7XG52YXIgem9vbV9pbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyOTIoe1xuICBuYW1lOiBcIlpvb21JblwiLFxuICBfX25hbWU6IFwiem9vbS1pblwiLFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgcmV0dXJuIChfY3R4LCBfY2FjaGUpID0+IChfb3BlbkJsb2NrMjkyKCksIF9jcmVhdGVFbGVtZW50QmxvY2syOTIoXCJzdmdcIiwge1xuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgfSwgW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZTI5MihcInBhdGhcIiwge1xuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICBkOiBcIm03OTUuOTA0IDc1MC43MiAxMjQuOTkyIDEyNC45MjhhMzIgMzIgMCAwIDEtNDUuMjQ4IDQ1LjI0OEw3NTAuNjU2IDc5NS45MDRhNDE2IDQxNiAwIDEgMSA0NS4yNDgtNDUuMjQ4ek00ODAgODMyYTM1MiAzNTIgMCAxIDAgMC03MDQgMzUyIDM1MiAwIDAgMCAwIDcwNG0tMzItMzg0di05NmEzMiAzMiAwIDAgMSA2NCAwdjk2aDk2YTMyIDMyIDAgMCAxIDAgNjRoLTk2djk2YTMyIDMyIDAgMCAxLTY0IDB2LTk2aC05NmEzMiAzMiAwIDAgMSAwLTY0elwiXG4gICAgICB9KVxuICAgIF0pKTtcbiAgfVxufSk7XG5cbi8vIHNyYy9jb21wb25lbnRzL3pvb20taW4udnVlXG52YXIgem9vbV9pbl9kZWZhdWx0ID0gem9vbV9pbl92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0O1xuXG4vLyB1bnBsdWdpbi12dWU6L2hvbWUvcnVubmVyL3dvcmsvZWxlbWVudC1wbHVzLWljb25zL2VsZW1lbnQtcGx1cy1pY29ucy9wYWNrYWdlcy92dWUvc3JjL2NvbXBvbmVudHMvem9vbS1vdXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZzZXR1cD10cnVlJmxhbmcudHNcbmltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50MjkzIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUyOTMsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrMjkzLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgX2NyZWF0ZUVsZW1lbnRCbG9jazI5MyB9IGZyb20gXCJ2dWVcIjtcbnZhciB6b29tX291dF92dWVfdnVlX3R5cGVfc2NyaXB0X3NldHVwX3RydWVfbGFuZ19kZWZhdWx0ID0gLyogQF9fUFVSRV9fICovIF9kZWZpbmVDb21wb25lbnQyOTMoe1xuICBuYW1lOiBcIlpvb21PdXRcIixcbiAgX19uYW1lOiBcInpvb20tb3V0XCIsXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICByZXR1cm4gKF9jdHgsIF9jYWNoZSkgPT4gKF9vcGVuQmxvY2syOTMoKSwgX2NyZWF0ZUVsZW1lbnRCbG9jazI5MyhcInN2Z1wiLCB7XG4gICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbiAgICB9LCBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlMjkzKFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgIGQ6IFwibTc5NS45MDQgNzUwLjcyIDEyNC45OTIgMTI0LjkyOGEzMiAzMiAwIDAgMS00NS4yNDggNDUuMjQ4TDc1MC42NTYgNzk1LjkwNGE0MTYgNDE2IDAgMSAxIDQ1LjI0OC00NS4yNDh6TTQ4MCA4MzJhMzUyIDM1MiAwIDEgMCAwLTcwNCAzNTIgMzUyIDAgMCAwIDAgNzA0TTM1MiA0NDhoMjU2YTMyIDMyIDAgMCAxIDAgNjRIMzUyYTMyIDMyIDAgMCAxIDAtNjRcIlxuICAgICAgfSlcbiAgICBdKSk7XG4gIH1cbn0pO1xuXG4vLyBzcmMvY29tcG9uZW50cy96b29tLW91dC52dWVcbnZhciB6b29tX291dF9kZWZhdWx0ID0gem9vbV9vdXRfdnVlX3Z1ZV90eXBlX3NjcmlwdF9zZXR1cF90cnVlX2xhbmdfZGVmYXVsdDtcbmV4cG9ydCB7XG4gIGFkZF9sb2NhdGlvbl9kZWZhdWx0IGFzIEFkZExvY2F0aW9uLFxuICBhaW1fZGVmYXVsdCBhcyBBaW0sXG4gIGFsYXJtX2Nsb2NrX2RlZmF1bHQgYXMgQWxhcm1DbG9jayxcbiAgYXBwbGVfZGVmYXVsdCBhcyBBcHBsZSxcbiAgYXJyb3dfZG93bl9kZWZhdWx0IGFzIEFycm93RG93bixcbiAgYXJyb3dfZG93bl9ib2xkX2RlZmF1bHQgYXMgQXJyb3dEb3duQm9sZCxcbiAgYXJyb3dfbGVmdF9kZWZhdWx0IGFzIEFycm93TGVmdCxcbiAgYXJyb3dfbGVmdF9ib2xkX2RlZmF1bHQgYXMgQXJyb3dMZWZ0Qm9sZCxcbiAgYXJyb3dfcmlnaHRfZGVmYXVsdCBhcyBBcnJvd1JpZ2h0LFxuICBhcnJvd19yaWdodF9ib2xkX2RlZmF1bHQgYXMgQXJyb3dSaWdodEJvbGQsXG4gIGFycm93X3VwX2RlZmF1bHQgYXMgQXJyb3dVcCxcbiAgYXJyb3dfdXBfYm9sZF9kZWZhdWx0IGFzIEFycm93VXBCb2xkLFxuICBhdmF0YXJfZGVmYXVsdCBhcyBBdmF0YXIsXG4gIGJhY2tfZGVmYXVsdCBhcyBCYWNrLFxuICBiYXNlYmFsbF9kZWZhdWx0IGFzIEJhc2ViYWxsLFxuICBiYXNrZXRiYWxsX2RlZmF1bHQgYXMgQmFza2V0YmFsbCxcbiAgYmVsbF9kZWZhdWx0IGFzIEJlbGwsXG4gIGJlbGxfZmlsbGVkX2RlZmF1bHQgYXMgQmVsbEZpbGxlZCxcbiAgYmljeWNsZV9kZWZhdWx0IGFzIEJpY3ljbGUsXG4gIGJvdHRvbV9kZWZhdWx0IGFzIEJvdHRvbSxcbiAgYm90dG9tX2xlZnRfZGVmYXVsdCBhcyBCb3R0b21MZWZ0LFxuICBib3R0b21fcmlnaHRfZGVmYXVsdCBhcyBCb3R0b21SaWdodCxcbiAgYm93bF9kZWZhdWx0IGFzIEJvd2wsXG4gIGJveF9kZWZhdWx0IGFzIEJveCxcbiAgYnJpZWZjYXNlX2RlZmF1bHQgYXMgQnJpZWZjYXNlLFxuICBicnVzaF9kZWZhdWx0IGFzIEJydXNoLFxuICBicnVzaF9maWxsZWRfZGVmYXVsdCBhcyBCcnVzaEZpbGxlZCxcbiAgYnVyZ2VyX2RlZmF1bHQgYXMgQnVyZ2VyLFxuICBjYWxlbmRhcl9kZWZhdWx0IGFzIENhbGVuZGFyLFxuICBjYW1lcmFfZGVmYXVsdCBhcyBDYW1lcmEsXG4gIGNhbWVyYV9maWxsZWRfZGVmYXVsdCBhcyBDYW1lcmFGaWxsZWQsXG4gIGNhcmV0X2JvdHRvbV9kZWZhdWx0IGFzIENhcmV0Qm90dG9tLFxuICBjYXJldF9sZWZ0X2RlZmF1bHQgYXMgQ2FyZXRMZWZ0LFxuICBjYXJldF9yaWdodF9kZWZhdWx0IGFzIENhcmV0UmlnaHQsXG4gIGNhcmV0X3RvcF9kZWZhdWx0IGFzIENhcmV0VG9wLFxuICBjZWxscGhvbmVfZGVmYXVsdCBhcyBDZWxscGhvbmUsXG4gIGNoYXRfZG90X3JvdW5kX2RlZmF1bHQgYXMgQ2hhdERvdFJvdW5kLFxuICBjaGF0X2RvdF9zcXVhcmVfZGVmYXVsdCBhcyBDaGF0RG90U3F1YXJlLFxuICBjaGF0X2xpbmVfcm91bmRfZGVmYXVsdCBhcyBDaGF0TGluZVJvdW5kLFxuICBjaGF0X2xpbmVfc3F1YXJlX2RlZmF1bHQgYXMgQ2hhdExpbmVTcXVhcmUsXG4gIGNoYXRfcm91bmRfZGVmYXVsdCBhcyBDaGF0Um91bmQsXG4gIGNoYXRfc3F1YXJlX2RlZmF1bHQgYXMgQ2hhdFNxdWFyZSxcbiAgY2hlY2tfZGVmYXVsdCBhcyBDaGVjayxcbiAgY2hlY2tlZF9kZWZhdWx0IGFzIENoZWNrZWQsXG4gIGNoZXJyeV9kZWZhdWx0IGFzIENoZXJyeSxcbiAgY2hpY2tlbl9kZWZhdWx0IGFzIENoaWNrZW4sXG4gIGNocm9tZV9maWxsZWRfZGVmYXVsdCBhcyBDaHJvbWVGaWxsZWQsXG4gIGNpcmNsZV9jaGVja19kZWZhdWx0IGFzIENpcmNsZUNoZWNrLFxuICBjaXJjbGVfY2hlY2tfZmlsbGVkX2RlZmF1bHQgYXMgQ2lyY2xlQ2hlY2tGaWxsZWQsXG4gIGNpcmNsZV9jbG9zZV9kZWZhdWx0IGFzIENpcmNsZUNsb3NlLFxuICBjaXJjbGVfY2xvc2VfZmlsbGVkX2RlZmF1bHQgYXMgQ2lyY2xlQ2xvc2VGaWxsZWQsXG4gIGNpcmNsZV9wbHVzX2RlZmF1bHQgYXMgQ2lyY2xlUGx1cyxcbiAgY2lyY2xlX3BsdXNfZmlsbGVkX2RlZmF1bHQgYXMgQ2lyY2xlUGx1c0ZpbGxlZCxcbiAgY2xvY2tfZGVmYXVsdCBhcyBDbG9jayxcbiAgY2xvc2VfZGVmYXVsdCBhcyBDbG9zZSxcbiAgY2xvc2VfYm9sZF9kZWZhdWx0IGFzIENsb3NlQm9sZCxcbiAgY2xvdWR5X2RlZmF1bHQgYXMgQ2xvdWR5LFxuICBjb2ZmZWVfZGVmYXVsdCBhcyBDb2ZmZWUsXG4gIGNvZmZlZV9jdXBfZGVmYXVsdCBhcyBDb2ZmZWVDdXAsXG4gIGNvaW5fZGVmYXVsdCBhcyBDb2luLFxuICBjb2xkX2RyaW5rX2RlZmF1bHQgYXMgQ29sZERyaW5rLFxuICBjb2xsZWN0aW9uX2RlZmF1bHQgYXMgQ29sbGVjdGlvbixcbiAgY29sbGVjdGlvbl90YWdfZGVmYXVsdCBhcyBDb2xsZWN0aW9uVGFnLFxuICBjb21tZW50X2RlZmF1bHQgYXMgQ29tbWVudCxcbiAgY29tcGFzc19kZWZhdWx0IGFzIENvbXBhc3MsXG4gIGNvbm5lY3Rpb25fZGVmYXVsdCBhcyBDb25uZWN0aW9uLFxuICBjb29yZGluYXRlX2RlZmF1bHQgYXMgQ29vcmRpbmF0ZSxcbiAgY29weV9kb2N1bWVudF9kZWZhdWx0IGFzIENvcHlEb2N1bWVudCxcbiAgY3B1X2RlZmF1bHQgYXMgQ3B1LFxuICBjcmVkaXRfY2FyZF9kZWZhdWx0IGFzIENyZWRpdENhcmQsXG4gIGNyb3BfZGVmYXVsdCBhcyBDcm9wLFxuICBkX2Fycm93X2xlZnRfZGVmYXVsdCBhcyBEQXJyb3dMZWZ0LFxuICBkX2Fycm93X3JpZ2h0X2RlZmF1bHQgYXMgREFycm93UmlnaHQsXG4gIGRfY2FyZXRfZGVmYXVsdCBhcyBEQ2FyZXQsXG4gIGRhdGFfYW5hbHlzaXNfZGVmYXVsdCBhcyBEYXRhQW5hbHlzaXMsXG4gIGRhdGFfYm9hcmRfZGVmYXVsdCBhcyBEYXRhQm9hcmQsXG4gIGRhdGFfbGluZV9kZWZhdWx0IGFzIERhdGFMaW5lLFxuICBkZWxldGVfZGVmYXVsdCBhcyBEZWxldGUsXG4gIGRlbGV0ZV9maWxsZWRfZGVmYXVsdCBhcyBEZWxldGVGaWxsZWQsXG4gIGRlbGV0ZV9sb2NhdGlvbl9kZWZhdWx0IGFzIERlbGV0ZUxvY2F0aW9uLFxuICBkZXNzZXJ0X2RlZmF1bHQgYXMgRGVzc2VydCxcbiAgZGlzY291bnRfZGVmYXVsdCBhcyBEaXNjb3VudCxcbiAgZGlzaF9kZWZhdWx0IGFzIERpc2gsXG4gIGRpc2hfZG90X2RlZmF1bHQgYXMgRGlzaERvdCxcbiAgZG9jdW1lbnRfZGVmYXVsdCBhcyBEb2N1bWVudCxcbiAgZG9jdW1lbnRfYWRkX2RlZmF1bHQgYXMgRG9jdW1lbnRBZGQsXG4gIGRvY3VtZW50X2NoZWNrZWRfZGVmYXVsdCBhcyBEb2N1bWVudENoZWNrZWQsXG4gIGRvY3VtZW50X2NvcHlfZGVmYXVsdCBhcyBEb2N1bWVudENvcHksXG4gIGRvY3VtZW50X2RlbGV0ZV9kZWZhdWx0IGFzIERvY3VtZW50RGVsZXRlLFxuICBkb2N1bWVudF9yZW1vdmVfZGVmYXVsdCBhcyBEb2N1bWVudFJlbW92ZSxcbiAgZG93bmxvYWRfZGVmYXVsdCBhcyBEb3dubG9hZCxcbiAgZHJpenpsaW5nX2RlZmF1bHQgYXMgRHJpenpsaW5nLFxuICBlZGl0X2RlZmF1bHQgYXMgRWRpdCxcbiAgZWRpdF9wZW5fZGVmYXVsdCBhcyBFZGl0UGVuLFxuICBlbGVtZV9kZWZhdWx0IGFzIEVsZW1lLFxuICBlbGVtZV9maWxsZWRfZGVmYXVsdCBhcyBFbGVtZUZpbGxlZCxcbiAgZWxlbWVudF9wbHVzX2RlZmF1bHQgYXMgRWxlbWVudFBsdXMsXG4gIGV4cGFuZF9kZWZhdWx0IGFzIEV4cGFuZCxcbiAgZmFpbGVkX2RlZmF1bHQgYXMgRmFpbGVkLFxuICBmZW1hbGVfZGVmYXVsdCBhcyBGZW1hbGUsXG4gIGZpbGVzX2RlZmF1bHQgYXMgRmlsZXMsXG4gIGZpbG1fZGVmYXVsdCBhcyBGaWxtLFxuICBmaWx0ZXJfZGVmYXVsdCBhcyBGaWx0ZXIsXG4gIGZpbmlzaGVkX2RlZmF1bHQgYXMgRmluaXNoZWQsXG4gIGZpcnN0X2FpZF9raXRfZGVmYXVsdCBhcyBGaXJzdEFpZEtpdCxcbiAgZmxhZ19kZWZhdWx0IGFzIEZsYWcsXG4gIGZvbGRfZGVmYXVsdCBhcyBGb2xkLFxuICBmb2xkZXJfZGVmYXVsdCBhcyBGb2xkZXIsXG4gIGZvbGRlcl9hZGRfZGVmYXVsdCBhcyBGb2xkZXJBZGQsXG4gIGZvbGRlcl9jaGVja2VkX2RlZmF1bHQgYXMgRm9sZGVyQ2hlY2tlZCxcbiAgZm9sZGVyX2RlbGV0ZV9kZWZhdWx0IGFzIEZvbGRlckRlbGV0ZSxcbiAgZm9sZGVyX29wZW5lZF9kZWZhdWx0IGFzIEZvbGRlck9wZW5lZCxcbiAgZm9sZGVyX3JlbW92ZV9kZWZhdWx0IGFzIEZvbGRlclJlbW92ZSxcbiAgZm9vZF9kZWZhdWx0IGFzIEZvb2QsXG4gIGZvb3RiYWxsX2RlZmF1bHQgYXMgRm9vdGJhbGwsXG4gIGZvcmtfc3Bvb25fZGVmYXVsdCBhcyBGb3JrU3Bvb24sXG4gIGZyaWVzX2RlZmF1bHQgYXMgRnJpZXMsXG4gIGZ1bGxfc2NyZWVuX2RlZmF1bHQgYXMgRnVsbFNjcmVlbixcbiAgZ29ibGV0X2RlZmF1bHQgYXMgR29ibGV0LFxuICBnb2JsZXRfZnVsbF9kZWZhdWx0IGFzIEdvYmxldEZ1bGwsXG4gIGdvYmxldF9zcXVhcmVfZGVmYXVsdCBhcyBHb2JsZXRTcXVhcmUsXG4gIGdvYmxldF9zcXVhcmVfZnVsbF9kZWZhdWx0IGFzIEdvYmxldFNxdWFyZUZ1bGwsXG4gIGdvbGRfbWVkYWxfZGVmYXVsdCBhcyBHb2xkTWVkYWwsXG4gIGdvb2RzX2RlZmF1bHQgYXMgR29vZHMsXG4gIGdvb2RzX2ZpbGxlZF9kZWZhdWx0IGFzIEdvb2RzRmlsbGVkLFxuICBncmFwZV9kZWZhdWx0IGFzIEdyYXBlLFxuICBncmlkX2RlZmF1bHQgYXMgR3JpZCxcbiAgZ3VpZGVfZGVmYXVsdCBhcyBHdWlkZSxcbiAgaGFuZGJhZ19kZWZhdWx0IGFzIEhhbmRiYWcsXG4gIGhlYWRzZXRfZGVmYXVsdCBhcyBIZWFkc2V0LFxuICBoZWxwX2RlZmF1bHQgYXMgSGVscCxcbiAgaGVscF9maWxsZWRfZGVmYXVsdCBhcyBIZWxwRmlsbGVkLFxuICBoaWRlX2RlZmF1bHQgYXMgSGlkZSxcbiAgaGlzdG9ncmFtX2RlZmF1bHQgYXMgSGlzdG9ncmFtLFxuICBob21lX2ZpbGxlZF9kZWZhdWx0IGFzIEhvbWVGaWxsZWQsXG4gIGhvdF93YXRlcl9kZWZhdWx0IGFzIEhvdFdhdGVyLFxuICBob3VzZV9kZWZhdWx0IGFzIEhvdXNlLFxuICBpY2VfY3JlYW1fZGVmYXVsdCBhcyBJY2VDcmVhbSxcbiAgaWNlX2NyZWFtX3JvdW5kX2RlZmF1bHQgYXMgSWNlQ3JlYW1Sb3VuZCxcbiAgaWNlX2NyZWFtX3NxdWFyZV9kZWZhdWx0IGFzIEljZUNyZWFtU3F1YXJlLFxuICBpY2VfZHJpbmtfZGVmYXVsdCBhcyBJY2VEcmluayxcbiAgaWNlX3RlYV9kZWZhdWx0IGFzIEljZVRlYSxcbiAgaW5mb19maWxsZWRfZGVmYXVsdCBhcyBJbmZvRmlsbGVkLFxuICBpcGhvbmVfZGVmYXVsdCBhcyBJcGhvbmUsXG4gIGtleV9kZWZhdWx0IGFzIEtleSxcbiAga25pZmVfZm9ya19kZWZhdWx0IGFzIEtuaWZlRm9yayxcbiAgbGlnaHRuaW5nX2RlZmF1bHQgYXMgTGlnaHRuaW5nLFxuICBsaW5rX2RlZmF1bHQgYXMgTGluayxcbiAgbGlzdF9kZWZhdWx0IGFzIExpc3QsXG4gIGxvYWRpbmdfZGVmYXVsdCBhcyBMb2FkaW5nLFxuICBsb2NhdGlvbl9kZWZhdWx0IGFzIExvY2F0aW9uLFxuICBsb2NhdGlvbl9maWxsZWRfZGVmYXVsdCBhcyBMb2NhdGlvbkZpbGxlZCxcbiAgbG9jYXRpb25faW5mb3JtYXRpb25fZGVmYXVsdCBhcyBMb2NhdGlvbkluZm9ybWF0aW9uLFxuICBsb2NrX2RlZmF1bHQgYXMgTG9jayxcbiAgbG9sbGlwb3BfZGVmYXVsdCBhcyBMb2xsaXBvcCxcbiAgbWFnaWNfc3RpY2tfZGVmYXVsdCBhcyBNYWdpY1N0aWNrLFxuICBtYWduZXRfZGVmYXVsdCBhcyBNYWduZXQsXG4gIG1hbGVfZGVmYXVsdCBhcyBNYWxlLFxuICBtYW5hZ2VtZW50X2RlZmF1bHQgYXMgTWFuYWdlbWVudCxcbiAgbWFwX2xvY2F0aW9uX2RlZmF1bHQgYXMgTWFwTG9jYXRpb24sXG4gIG1lZGFsX2RlZmF1bHQgYXMgTWVkYWwsXG4gIG1lbW9fZGVmYXVsdCBhcyBNZW1vLFxuICBtZW51X2RlZmF1bHQgYXMgTWVudSxcbiAgbWVzc2FnZV9kZWZhdWx0IGFzIE1lc3NhZ2UsXG4gIG1lc3NhZ2VfYm94X2RlZmF1bHQgYXMgTWVzc2FnZUJveCxcbiAgbWljX2RlZmF1bHQgYXMgTWljLFxuICBtaWNyb3Bob25lX2RlZmF1bHQgYXMgTWljcm9waG9uZSxcbiAgbWlsa190ZWFfZGVmYXVsdCBhcyBNaWxrVGVhLFxuICBtaW51c19kZWZhdWx0IGFzIE1pbnVzLFxuICBtb25leV9kZWZhdWx0IGFzIE1vbmV5LFxuICBtb25pdG9yX2RlZmF1bHQgYXMgTW9uaXRvcixcbiAgbW9vbl9kZWZhdWx0IGFzIE1vb24sXG4gIG1vb25fbmlnaHRfZGVmYXVsdCBhcyBNb29uTmlnaHQsXG4gIG1vcmVfZGVmYXVsdCBhcyBNb3JlLFxuICBtb3JlX2ZpbGxlZF9kZWZhdWx0IGFzIE1vcmVGaWxsZWQsXG4gIG1vc3RseV9jbG91ZHlfZGVmYXVsdCBhcyBNb3N0bHlDbG91ZHksXG4gIG1vdXNlX2RlZmF1bHQgYXMgTW91c2UsXG4gIG11Z19kZWZhdWx0IGFzIE11ZyxcbiAgbXV0ZV9kZWZhdWx0IGFzIE11dGUsXG4gIG11dGVfbm90aWZpY2F0aW9uX2RlZmF1bHQgYXMgTXV0ZU5vdGlmaWNhdGlvbixcbiAgbm9fc21va2luZ19kZWZhdWx0IGFzIE5vU21va2luZyxcbiAgbm90ZWJvb2tfZGVmYXVsdCBhcyBOb3RlYm9vayxcbiAgbm90aWZpY2F0aW9uX2RlZmF1bHQgYXMgTm90aWZpY2F0aW9uLFxuICBvZG9tZXRlcl9kZWZhdWx0IGFzIE9kb21ldGVyLFxuICBvZmZpY2VfYnVpbGRpbmdfZGVmYXVsdCBhcyBPZmZpY2VCdWlsZGluZyxcbiAgb3Blbl9kZWZhdWx0IGFzIE9wZW4sXG4gIG9wZXJhdGlvbl9kZWZhdWx0IGFzIE9wZXJhdGlvbixcbiAgb3Bwb3J0dW5pdHlfZGVmYXVsdCBhcyBPcHBvcnR1bml0eSxcbiAgb3JhbmdlX2RlZmF1bHQgYXMgT3JhbmdlLFxuICBwYXBlcmNsaXBfZGVmYXVsdCBhcyBQYXBlcmNsaXAsXG4gIHBhcnRseV9jbG91ZHlfZGVmYXVsdCBhcyBQYXJ0bHlDbG91ZHksXG4gIHBlYXJfZGVmYXVsdCBhcyBQZWFyLFxuICBwaG9uZV9kZWZhdWx0IGFzIFBob25lLFxuICBwaG9uZV9maWxsZWRfZGVmYXVsdCBhcyBQaG9uZUZpbGxlZCxcbiAgcGljdHVyZV9kZWZhdWx0IGFzIFBpY3R1cmUsXG4gIHBpY3R1cmVfZmlsbGVkX2RlZmF1bHQgYXMgUGljdHVyZUZpbGxlZCxcbiAgcGljdHVyZV9yb3VuZGVkX2RlZmF1bHQgYXMgUGljdHVyZVJvdW5kZWQsXG4gIHBpZV9jaGFydF9kZWZhdWx0IGFzIFBpZUNoYXJ0LFxuICBwbGFjZV9kZWZhdWx0IGFzIFBsYWNlLFxuICBwbGF0Zm9ybV9kZWZhdWx0IGFzIFBsYXRmb3JtLFxuICBwbHVzX2RlZmF1bHQgYXMgUGx1cyxcbiAgcG9pbnRlcl9kZWZhdWx0IGFzIFBvaW50ZXIsXG4gIHBvc2l0aW9uX2RlZmF1bHQgYXMgUG9zaXRpb24sXG4gIHBvc3RjYXJkX2RlZmF1bHQgYXMgUG9zdGNhcmQsXG4gIHBvdXJpbmdfZGVmYXVsdCBhcyBQb3VyaW5nLFxuICBwcmVzZW50X2RlZmF1bHQgYXMgUHJlc2VudCxcbiAgcHJpY2VfdGFnX2RlZmF1bHQgYXMgUHJpY2VUYWcsXG4gIHByaW50ZXJfZGVmYXVsdCBhcyBQcmludGVyLFxuICBwcm9tb3Rpb25fZGVmYXVsdCBhcyBQcm9tb3Rpb24sXG4gIHF1YXJ0el93YXRjaF9kZWZhdWx0IGFzIFF1YXJ0eldhdGNoLFxuICBxdWVzdGlvbl9maWxsZWRfZGVmYXVsdCBhcyBRdWVzdGlvbkZpbGxlZCxcbiAgcmFua19kZWZhdWx0IGFzIFJhbmssXG4gIHJlYWRpbmdfZGVmYXVsdCBhcyBSZWFkaW5nLFxuICByZWFkaW5nX2xhbXBfZGVmYXVsdCBhcyBSZWFkaW5nTGFtcCxcbiAgcmVmcmVzaF9kZWZhdWx0IGFzIFJlZnJlc2gsXG4gIHJlZnJlc2hfbGVmdF9kZWZhdWx0IGFzIFJlZnJlc2hMZWZ0LFxuICByZWZyZXNoX3JpZ2h0X2RlZmF1bHQgYXMgUmVmcmVzaFJpZ2h0LFxuICByZWZyaWdlcmF0b3JfZGVmYXVsdCBhcyBSZWZyaWdlcmF0b3IsXG4gIHJlbW92ZV9kZWZhdWx0IGFzIFJlbW92ZSxcbiAgcmVtb3ZlX2ZpbGxlZF9kZWZhdWx0IGFzIFJlbW92ZUZpbGxlZCxcbiAgcmlnaHRfZGVmYXVsdCBhcyBSaWdodCxcbiAgc2NhbGVfdG9fb3JpZ2luYWxfZGVmYXVsdCBhcyBTY2FsZVRvT3JpZ2luYWwsXG4gIHNjaG9vbF9kZWZhdWx0IGFzIFNjaG9vbCxcbiAgc2Npc3Nvcl9kZWZhdWx0IGFzIFNjaXNzb3IsXG4gIHNlYXJjaF9kZWZhdWx0IGFzIFNlYXJjaCxcbiAgc2VsZWN0X2RlZmF1bHQgYXMgU2VsZWN0LFxuICBzZWxsX2RlZmF1bHQgYXMgU2VsbCxcbiAgc2VtaV9zZWxlY3RfZGVmYXVsdCBhcyBTZW1pU2VsZWN0LFxuICBzZXJ2aWNlX2RlZmF1bHQgYXMgU2VydmljZSxcbiAgc2V0X3VwX2RlZmF1bHQgYXMgU2V0VXAsXG4gIHNldHRpbmdfZGVmYXVsdCBhcyBTZXR0aW5nLFxuICBzaGFyZV9kZWZhdWx0IGFzIFNoYXJlLFxuICBzaGlwX2RlZmF1bHQgYXMgU2hpcCxcbiAgc2hvcF9kZWZhdWx0IGFzIFNob3AsXG4gIHNob3BwaW5nX2JhZ19kZWZhdWx0IGFzIFNob3BwaW5nQmFnLFxuICBzaG9wcGluZ19jYXJ0X2RlZmF1bHQgYXMgU2hvcHBpbmdDYXJ0LFxuICBzaG9wcGluZ19jYXJ0X2Z1bGxfZGVmYXVsdCBhcyBTaG9wcGluZ0NhcnRGdWxsLFxuICBzaG9wcGluZ190cm9sbGV5X2RlZmF1bHQgYXMgU2hvcHBpbmdUcm9sbGV5LFxuICBzbW9raW5nX2RlZmF1bHQgYXMgU21va2luZyxcbiAgc29jY2VyX2RlZmF1bHQgYXMgU29jY2VyLFxuICBzb2xkX291dF9kZWZhdWx0IGFzIFNvbGRPdXQsXG4gIHNvcnRfZGVmYXVsdCBhcyBTb3J0LFxuICBzb3J0X2Rvd25fZGVmYXVsdCBhcyBTb3J0RG93bixcbiAgc29ydF91cF9kZWZhdWx0IGFzIFNvcnRVcCxcbiAgc3RhbXBfZGVmYXVsdCBhcyBTdGFtcCxcbiAgc3Rhcl9kZWZhdWx0IGFzIFN0YXIsXG4gIHN0YXJfZmlsbGVkX2RlZmF1bHQgYXMgU3RhckZpbGxlZCxcbiAgc3RvcHdhdGNoX2RlZmF1bHQgYXMgU3RvcHdhdGNoLFxuICBzdWNjZXNzX2ZpbGxlZF9kZWZhdWx0IGFzIFN1Y2Nlc3NGaWxsZWQsXG4gIHN1Z2FyX2RlZmF1bHQgYXMgU3VnYXIsXG4gIHN1aXRjYXNlX2RlZmF1bHQgYXMgU3VpdGNhc2UsXG4gIHN1aXRjYXNlX2xpbmVfZGVmYXVsdCBhcyBTdWl0Y2FzZUxpbmUsXG4gIHN1bm55X2RlZmF1bHQgYXMgU3VubnksXG4gIHN1bnJpc2VfZGVmYXVsdCBhcyBTdW5yaXNlLFxuICBzdW5zZXRfZGVmYXVsdCBhcyBTdW5zZXQsXG4gIHN3aXRjaF9kZWZhdWx0IGFzIFN3aXRjaCxcbiAgc3dpdGNoX2J1dHRvbl9kZWZhdWx0IGFzIFN3aXRjaEJ1dHRvbixcbiAgc3dpdGNoX2ZpbGxlZF9kZWZhdWx0IGFzIFN3aXRjaEZpbGxlZCxcbiAgdGFrZWF3YXlfYm94X2RlZmF1bHQgYXMgVGFrZWF3YXlCb3gsXG4gIHRpY2tldF9kZWZhdWx0IGFzIFRpY2tldCxcbiAgdGlja2V0c19kZWZhdWx0IGFzIFRpY2tldHMsXG4gIHRpbWVyX2RlZmF1bHQgYXMgVGltZXIsXG4gIHRvaWxldF9wYXBlcl9kZWZhdWx0IGFzIFRvaWxldFBhcGVyLFxuICB0b29sc19kZWZhdWx0IGFzIFRvb2xzLFxuICB0b3BfZGVmYXVsdCBhcyBUb3AsXG4gIHRvcF9sZWZ0X2RlZmF1bHQgYXMgVG9wTGVmdCxcbiAgdG9wX3JpZ2h0X2RlZmF1bHQgYXMgVG9wUmlnaHQsXG4gIHRyZW5kX2NoYXJ0c19kZWZhdWx0IGFzIFRyZW5kQ2hhcnRzLFxuICB0cm9waHlfZGVmYXVsdCBhcyBUcm9waHksXG4gIHRyb3BoeV9iYXNlX2RlZmF1bHQgYXMgVHJvcGh5QmFzZSxcbiAgdHVybl9vZmZfZGVmYXVsdCBhcyBUdXJuT2ZmLFxuICB1bWJyZWxsYV9kZWZhdWx0IGFzIFVtYnJlbGxhLFxuICB1bmxvY2tfZGVmYXVsdCBhcyBVbmxvY2ssXG4gIHVwbG9hZF9kZWZhdWx0IGFzIFVwbG9hZCxcbiAgdXBsb2FkX2ZpbGxlZF9kZWZhdWx0IGFzIFVwbG9hZEZpbGxlZCxcbiAgdXNlcl9kZWZhdWx0IGFzIFVzZXIsXG4gIHVzZXJfZmlsbGVkX2RlZmF1bHQgYXMgVXNlckZpbGxlZCxcbiAgdmFuX2RlZmF1bHQgYXMgVmFuLFxuICB2aWRlb19jYW1lcmFfZGVmYXVsdCBhcyBWaWRlb0NhbWVyYSxcbiAgdmlkZW9fY2FtZXJhX2ZpbGxlZF9kZWZhdWx0IGFzIFZpZGVvQ2FtZXJhRmlsbGVkLFxuICB2aWRlb19wYXVzZV9kZWZhdWx0IGFzIFZpZGVvUGF1c2UsXG4gIHZpZGVvX3BsYXlfZGVmYXVsdCBhcyBWaWRlb1BsYXksXG4gIHZpZXdfZGVmYXVsdCBhcyBWaWV3LFxuICB3YWxsZXRfZGVmYXVsdCBhcyBXYWxsZXQsXG4gIHdhbGxldF9maWxsZWRfZGVmYXVsdCBhcyBXYWxsZXRGaWxsZWQsXG4gIHdhcm5fdHJpYW5nbGVfZmlsbGVkX2RlZmF1bHQgYXMgV2FyblRyaWFuZ2xlRmlsbGVkLFxuICB3YXJuaW5nX2RlZmF1bHQgYXMgV2FybmluZyxcbiAgd2FybmluZ19maWxsZWRfZGVmYXVsdCBhcyBXYXJuaW5nRmlsbGVkLFxuICB3YXRjaF9kZWZhdWx0IGFzIFdhdGNoLFxuICB3YXRlcm1lbG9uX2RlZmF1bHQgYXMgV2F0ZXJtZWxvbixcbiAgd2luZF9wb3dlcl9kZWZhdWx0IGFzIFdpbmRQb3dlcixcbiAgem9vbV9pbl9kZWZhdWx0IGFzIFpvb21JbixcbiAgem9vbV9vdXRfZGVmYXVsdCBhcyBab29tT3V0XG59O1xuIiwiaW1wb3J0IHsgd2FybiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyBmcm9tUGFpcnMgfSBmcm9tICdsb2Rhc2gtdW5pZmllZCc7XG5pbXBvcnQgJy4uLy4uL3R5cGVzLm1qcyc7XG5pbXBvcnQgJy4uLy4uL29iamVjdHMubWpzJztcbmltcG9ydCB7IGlzT2JqZWN0LCBoYXNPd24gfSBmcm9tICdAdnVlL3NoYXJlZCc7XG5cbmNvbnN0IGVwUHJvcEtleSA9IFwiX19lcFByb3BLZXlcIjtcbmNvbnN0IGRlZmluZVByb3BUeXBlID0gKHZhbCkgPT4gdmFsO1xuY29uc3QgaXNFcFByb3AgPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmICEhdmFsW2VwUHJvcEtleV07XG5jb25zdCBidWlsZFByb3AgPSAocHJvcCwga2V5KSA9PiB7XG4gIGlmICghaXNPYmplY3QocHJvcCkgfHwgaXNFcFByb3AocHJvcCkpXG4gICAgcmV0dXJuIHByb3A7XG4gIGNvbnN0IHsgdmFsdWVzLCByZXF1aXJlZCwgZGVmYXVsdDogZGVmYXVsdFZhbHVlLCB0eXBlLCB2YWxpZGF0b3IgfSA9IHByb3A7XG4gIGNvbnN0IF92YWxpZGF0b3IgPSB2YWx1ZXMgfHwgdmFsaWRhdG9yID8gKHZhbCkgPT4ge1xuICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuICAgIGxldCBhbGxvd2VkVmFsdWVzID0gW107XG4gICAgaWYgKHZhbHVlcykge1xuICAgICAgYWxsb3dlZFZhbHVlcyA9IEFycmF5LmZyb20odmFsdWVzKTtcbiAgICAgIGlmIChoYXNPd24ocHJvcCwgXCJkZWZhdWx0XCIpKSB7XG4gICAgICAgIGFsbG93ZWRWYWx1ZXMucHVzaChkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgICAgdmFsaWQgfHwgKHZhbGlkID0gYWxsb3dlZFZhbHVlcy5pbmNsdWRlcyh2YWwpKTtcbiAgICB9XG4gICAgaWYgKHZhbGlkYXRvcilcbiAgICAgIHZhbGlkIHx8ICh2YWxpZCA9IHZhbGlkYXRvcih2YWwpKTtcbiAgICBpZiAoIXZhbGlkICYmIGFsbG93ZWRWYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYWxsb3dWYWx1ZXNUZXh0ID0gWy4uLm5ldyBTZXQoYWxsb3dlZFZhbHVlcyldLm1hcCgodmFsdWUpID0+IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkuam9pbihcIiwgXCIpO1xuICAgICAgd2FybihgSW52YWxpZCBwcm9wOiB2YWxpZGF0aW9uIGZhaWxlZCR7a2V5ID8gYCBmb3IgcHJvcCBcIiR7a2V5fVwiYCA6IFwiXCJ9LiBFeHBlY3RlZCBvbmUgb2YgWyR7YWxsb3dWYWx1ZXNUZXh0fV0sIGdvdCB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KHZhbCl9LmApO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWQ7XG4gIH0gOiB2b2lkIDA7XG4gIGNvbnN0IGVwUHJvcCA9IHtcbiAgICB0eXBlLFxuICAgIHJlcXVpcmVkOiAhIXJlcXVpcmVkLFxuICAgIHZhbGlkYXRvcjogX3ZhbGlkYXRvcixcbiAgICBbZXBQcm9wS2V5XTogdHJ1ZVxuICB9O1xuICBpZiAoaGFzT3duKHByb3AsIFwiZGVmYXVsdFwiKSlcbiAgICBlcFByb3AuZGVmYXVsdCA9IGRlZmF1bHRWYWx1ZTtcbiAgcmV0dXJuIGVwUHJvcDtcbn07XG5jb25zdCBidWlsZFByb3BzID0gKHByb3BzKSA9PiBmcm9tUGFpcnMoT2JqZWN0LmVudHJpZXMocHJvcHMpLm1hcCgoW2tleSwgb3B0aW9uXSkgPT4gW1xuICBrZXksXG4gIGJ1aWxkUHJvcChvcHRpb24sIGtleSlcbl0pKTtcblxuZXhwb3J0IHsgYnVpbGRQcm9wLCBidWlsZFByb3BzLCBkZWZpbmVQcm9wVHlwZSwgZXBQcm9wS2V5LCBpc0VwUHJvcCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cnVudGltZS5tanMubWFwXG4iLCJpbXBvcnQgeyBDbG9zZSwgU3VjY2Vzc0ZpbGxlZCwgSW5mb0ZpbGxlZCwgV2FybmluZ0ZpbGxlZCwgQ2lyY2xlQ2xvc2VGaWxsZWQsIExvYWRpbmcsIENpcmNsZUNoZWNrLCBDaXJjbGVDbG9zZSB9IGZyb20gJ0BlbGVtZW50LXBsdXMvaWNvbnMtdnVlJztcbmltcG9ydCAnLi9wcm9wcy9pbmRleC5tanMnO1xuaW1wb3J0IHsgZGVmaW5lUHJvcFR5cGUgfSBmcm9tICcuL3Byb3BzL3J1bnRpbWUubWpzJztcblxuY29uc3QgaWNvblByb3BUeXBlID0gZGVmaW5lUHJvcFR5cGUoW1xuICBTdHJpbmcsXG4gIE9iamVjdCxcbiAgRnVuY3Rpb25cbl0pO1xuY29uc3QgQ2xvc2VDb21wb25lbnRzID0ge1xuICBDbG9zZVxufTtcbmNvbnN0IFR5cGVDb21wb25lbnRzID0ge1xuICBDbG9zZSxcbiAgU3VjY2Vzc0ZpbGxlZCxcbiAgSW5mb0ZpbGxlZCxcbiAgV2FybmluZ0ZpbGxlZCxcbiAgQ2lyY2xlQ2xvc2VGaWxsZWRcbn07XG5jb25zdCBUeXBlQ29tcG9uZW50c01hcCA9IHtcbiAgc3VjY2VzczogU3VjY2Vzc0ZpbGxlZCxcbiAgd2FybmluZzogV2FybmluZ0ZpbGxlZCxcbiAgZXJyb3I6IENpcmNsZUNsb3NlRmlsbGVkLFxuICBpbmZvOiBJbmZvRmlsbGVkXG59O1xuY29uc3QgVmFsaWRhdGVDb21wb25lbnRzTWFwID0ge1xuICB2YWxpZGF0aW5nOiBMb2FkaW5nLFxuICBzdWNjZXNzOiBDaXJjbGVDaGVjayxcbiAgZXJyb3I6IENpcmNsZUNsb3NlXG59O1xuXG5leHBvcnQgeyBDbG9zZUNvbXBvbmVudHMsIFR5cGVDb21wb25lbnRzLCBUeXBlQ29tcG9uZW50c01hcCwgVmFsaWRhdGVDb21wb25lbnRzTWFwLCBpY29uUHJvcFR5cGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWljb24ubWpzLm1hcFxuIiwiaW1wb3J0IHsgTk9PUCB9IGZyb20gJ0B2dWUvc2hhcmVkJztcblxuY29uc3Qgd2l0aEluc3RhbGwgPSAobWFpbiwgZXh0cmEpID0+IHtcbiAgO1xuICBtYWluLmluc3RhbGwgPSAoYXBwKSA9PiB7XG4gICAgZm9yIChjb25zdCBjb21wIG9mIFttYWluLCAuLi5PYmplY3QudmFsdWVzKGV4dHJhICE9IG51bGwgPyBleHRyYSA6IHt9KV0pIHtcbiAgICAgIGFwcC5jb21wb25lbnQoY29tcC5uYW1lLCBjb21wKTtcbiAgICB9XG4gIH07XG4gIGlmIChleHRyYSkge1xuICAgIGZvciAoY29uc3QgW2tleSwgY29tcF0gb2YgT2JqZWN0LmVudHJpZXMoZXh0cmEpKSB7XG4gICAgICA7XG4gICAgICBtYWluW2tleV0gPSBjb21wO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWFpbjtcbn07XG5jb25zdCB3aXRoSW5zdGFsbEZ1bmN0aW9uID0gKGZuLCBuYW1lKSA9PiB7XG4gIDtcbiAgZm4uaW5zdGFsbCA9IChhcHApID0+IHtcbiAgICA7XG4gICAgZm4uX2NvbnRleHQgPSBhcHAuX2NvbnRleHQ7XG4gICAgYXBwLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzW25hbWVdID0gZm47XG4gIH07XG4gIHJldHVybiBmbjtcbn07XG5jb25zdCB3aXRoSW5zdGFsbERpcmVjdGl2ZSA9IChkaXJlY3RpdmUsIG5hbWUpID0+IHtcbiAgO1xuICBkaXJlY3RpdmUuaW5zdGFsbCA9IChhcHApID0+IHtcbiAgICBhcHAuZGlyZWN0aXZlKG5hbWUsIGRpcmVjdGl2ZSk7XG4gIH07XG4gIHJldHVybiBkaXJlY3RpdmU7XG59O1xuY29uc3Qgd2l0aE5vb3BJbnN0YWxsID0gKGNvbXBvbmVudCkgPT4ge1xuICA7XG4gIGNvbXBvbmVudC5pbnN0YWxsID0gTk9PUDtcbiAgcmV0dXJuIGNvbXBvbmVudDtcbn07XG5cbmV4cG9ydCB7IHdpdGhJbnN0YWxsLCB3aXRoSW5zdGFsbERpcmVjdGl2ZSwgd2l0aEluc3RhbGxGdW5jdGlvbiwgd2l0aE5vb3BJbnN0YWxsIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0YWxsLm1qcy5tYXBcbiIsImltcG9ydCAnLi4vdHlwZXMubWpzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAdnVlL3NoYXJlZCc7XG5cbmNvbnN0IGNvbXBvc2VSZWZzID0gKC4uLnJlZnMpID0+IHtcbiAgcmV0dXJuIChlbCkgPT4ge1xuICAgIHJlZnMuZm9yRWFjaCgocmVmKSA9PiB7XG4gICAgICBpZiAoaXNGdW5jdGlvbihyZWYpKSB7XG4gICAgICAgIHJlZihlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWYudmFsdWUgPSBlbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn07XG5cbmV4cG9ydCB7IGNvbXBvc2VSZWZzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWZzLm1qcy5tYXBcbiIsImNvbnN0IEVWRU5UX0NPREUgPSB7XG4gIHRhYjogXCJUYWJcIixcbiAgZW50ZXI6IFwiRW50ZXJcIixcbiAgc3BhY2U6IFwiU3BhY2VcIixcbiAgbGVmdDogXCJBcnJvd0xlZnRcIixcbiAgdXA6IFwiQXJyb3dVcFwiLFxuICByaWdodDogXCJBcnJvd1JpZ2h0XCIsXG4gIGRvd246IFwiQXJyb3dEb3duXCIsXG4gIGVzYzogXCJFc2NhcGVcIixcbiAgZGVsZXRlOiBcIkRlbGV0ZVwiLFxuICBiYWNrc3BhY2U6IFwiQmFja3NwYWNlXCIsXG4gIG51bXBhZEVudGVyOiBcIk51bXBhZEVudGVyXCIsXG4gIHBhZ2VVcDogXCJQYWdlVXBcIixcbiAgcGFnZURvd246IFwiUGFnZURvd25cIixcbiAgaG9tZTogXCJIb21lXCIsXG4gIGVuZDogXCJFbmRcIlxufTtcblxuZXhwb3J0IHsgRVZFTlRfQ09ERSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJpYS5tanMubWFwXG4iLCJjb25zdCBVUERBVEVfTU9ERUxfRVZFTlQgPSBcInVwZGF0ZTptb2RlbFZhbHVlXCI7XG5jb25zdCBDSEFOR0VfRVZFTlQgPSBcImNoYW5nZVwiO1xuY29uc3QgSU5QVVRfRVZFTlQgPSBcImlucHV0XCI7XG5cbmV4cG9ydCB7IENIQU5HRV9FVkVOVCwgSU5QVVRfRVZFTlQsIFVQREFURV9NT0RFTF9FVkVOVCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXZlbnQubWpzLm1hcFxuIiwiY29uc3QgY29tcG9uZW50U2l6ZXMgPSBbXCJcIiwgXCJkZWZhdWx0XCIsIFwic21hbGxcIiwgXCJsYXJnZVwiXTtcbmNvbnN0IGNvbXBvbmVudFNpemVNYXAgPSB7XG4gIGxhcmdlOiA0MCxcbiAgZGVmYXVsdDogMzIsXG4gIHNtYWxsOiAyNFxufTtcblxuZXhwb3J0IHsgY29tcG9uZW50U2l6ZU1hcCwgY29tcG9uZW50U2l6ZXMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNpemUubWpzLm1hcFxuIiwiaW1wb3J0ICcuLi8uLi9jb25zdGFudHMvaW5kZXgubWpzJztcbmltcG9ydCB7IGNvbXBvbmVudFNpemVzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3NpemUubWpzJztcbmltcG9ydCB7IGRhdGVQaWNrVHlwZXMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZGF0ZS5tanMnO1xuXG5jb25zdCBpc1ZhbGlkQ29tcG9uZW50U2l6ZSA9ICh2YWwpID0+IFtcIlwiLCAuLi5jb21wb25lbnRTaXplc10uaW5jbHVkZXModmFsKTtcbmNvbnN0IGlzVmFsaWREYXRlUGlja1R5cGUgPSAodmFsKSA9PiBbLi4uZGF0ZVBpY2tUeXBlc10uaW5jbHVkZXModmFsKTtcblxuZXhwb3J0IHsgaXNWYWxpZENvbXBvbmVudFNpemUsIGlzVmFsaWREYXRlUGlja1R5cGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZhbGlkYXRvci5tanMubWFwXG4iLCJpbXBvcnQgeyBpc1ZOb2RlLCBGcmFnbWVudCwgVGV4dCwgQ29tbWVudCwgb3BlbkJsb2NrLCBjcmVhdGVCbG9jaywgY3JlYXRlQ29tbWVudFZOb2RlIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IGhhc093biwgY2FtZWxpemUsIGlzQXJyYXkgfSBmcm9tICdAdnVlL3NoYXJlZCc7XG5pbXBvcnQgJy4uL29iamVjdHMubWpzJztcbmltcG9ydCB7IGRlYnVnV2FybiB9IGZyb20gJy4uL2Vycm9yLm1qcyc7XG5cbmNvbnN0IFNDT1BFID0gXCJ1dGlscy92dWUvdm5vZGVcIjtcbnZhciBQYXRjaEZsYWdzID0gLyogQF9fUFVSRV9fICovICgoUGF0Y2hGbGFnczIpID0+IHtcbiAgUGF0Y2hGbGFnczJbUGF0Y2hGbGFnczJbXCJURVhUXCJdID0gMV0gPSBcIlRFWFRcIjtcbiAgUGF0Y2hGbGFnczJbUGF0Y2hGbGFnczJbXCJDTEFTU1wiXSA9IDJdID0gXCJDTEFTU1wiO1xuICBQYXRjaEZsYWdzMltQYXRjaEZsYWdzMltcIlNUWUxFXCJdID0gNF0gPSBcIlNUWUxFXCI7XG4gIFBhdGNoRmxhZ3MyW1BhdGNoRmxhZ3MyW1wiUFJPUFNcIl0gPSA4XSA9IFwiUFJPUFNcIjtcbiAgUGF0Y2hGbGFnczJbUGF0Y2hGbGFnczJbXCJGVUxMX1BST1BTXCJdID0gMTZdID0gXCJGVUxMX1BST1BTXCI7XG4gIFBhdGNoRmxhZ3MyW1BhdGNoRmxhZ3MyW1wiSFlEUkFURV9FVkVOVFNcIl0gPSAzMl0gPSBcIkhZRFJBVEVfRVZFTlRTXCI7XG4gIFBhdGNoRmxhZ3MyW1BhdGNoRmxhZ3MyW1wiU1RBQkxFX0ZSQUdNRU5UXCJdID0gNjRdID0gXCJTVEFCTEVfRlJBR01FTlRcIjtcbiAgUGF0Y2hGbGFnczJbUGF0Y2hGbGFnczJbXCJLRVlFRF9GUkFHTUVOVFwiXSA9IDEyOF0gPSBcIktFWUVEX0ZSQUdNRU5UXCI7XG4gIFBhdGNoRmxhZ3MyW1BhdGNoRmxhZ3MyW1wiVU5LRVlFRF9GUkFHTUVOVFwiXSA9IDI1Nl0gPSBcIlVOS0VZRURfRlJBR01FTlRcIjtcbiAgUGF0Y2hGbGFnczJbUGF0Y2hGbGFnczJbXCJORUVEX1BBVENIXCJdID0gNTEyXSA9IFwiTkVFRF9QQVRDSFwiO1xuICBQYXRjaEZsYWdzMltQYXRjaEZsYWdzMltcIkRZTkFNSUNfU0xPVFNcIl0gPSAxMDI0XSA9IFwiRFlOQU1JQ19TTE9UU1wiO1xuICBQYXRjaEZsYWdzMltQYXRjaEZsYWdzMltcIkhPSVNURURcIl0gPSAtMV0gPSBcIkhPSVNURURcIjtcbiAgUGF0Y2hGbGFnczJbUGF0Y2hGbGFnczJbXCJCQUlMXCJdID0gLTJdID0gXCJCQUlMXCI7XG4gIHJldHVybiBQYXRjaEZsYWdzMjtcbn0pKFBhdGNoRmxhZ3MgfHwge30pO1xuZnVuY3Rpb24gaXNGcmFnbWVudChub2RlKSB7XG4gIHJldHVybiBpc1ZOb2RlKG5vZGUpICYmIG5vZGUudHlwZSA9PT0gRnJhZ21lbnQ7XG59XG5mdW5jdGlvbiBpc1RleHQobm9kZSkge1xuICByZXR1cm4gaXNWTm9kZShub2RlKSAmJiBub2RlLnR5cGUgPT09IFRleHQ7XG59XG5mdW5jdGlvbiBpc0NvbW1lbnQobm9kZSkge1xuICByZXR1cm4gaXNWTm9kZShub2RlKSAmJiBub2RlLnR5cGUgPT09IENvbW1lbnQ7XG59XG5jb25zdCBURU1QTEFURSA9IFwidGVtcGxhdGVcIjtcbmZ1bmN0aW9uIGlzVGVtcGxhdGUobm9kZSkge1xuICByZXR1cm4gaXNWTm9kZShub2RlKSAmJiBub2RlLnR5cGUgPT09IFRFTVBMQVRFO1xufVxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIGlzVk5vZGUobm9kZSkgJiYgIWlzRnJhZ21lbnQobm9kZSkgJiYgIWlzQ29tbWVudChub2RlKTtcbn1cbmZ1bmN0aW9uIGdldENoaWxkcmVuKG5vZGUsIGRlcHRoKSB7XG4gIGlmIChpc0NvbW1lbnQobm9kZSkpXG4gICAgcmV0dXJuO1xuICBpZiAoaXNGcmFnbWVudChub2RlKSB8fCBpc1RlbXBsYXRlKG5vZGUpKSB7XG4gICAgcmV0dXJuIGRlcHRoID4gMCA/IGdldEZpcnN0VmFsaWROb2RlKG5vZGUuY2hpbGRyZW4sIGRlcHRoIC0gMSkgOiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59XG5jb25zdCBnZXRGaXJzdFZhbGlkTm9kZSA9IChub2RlcywgbWF4RGVwdGggPSAzKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGVzKSkge1xuICAgIHJldHVybiBnZXRDaGlsZHJlbihub2Rlc1swXSwgbWF4RGVwdGgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRDaGlsZHJlbihub2RlcywgbWF4RGVwdGgpO1xuICB9XG59O1xuZnVuY3Rpb24gcmVuZGVySWYoY29uZGl0aW9uLCAuLi5hcmdzKSB7XG4gIHJldHVybiBjb25kaXRpb24gPyByZW5kZXJCbG9jayguLi5hcmdzKSA6IGNyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSk7XG59XG5mdW5jdGlvbiByZW5kZXJCbG9jayguLi5hcmdzKSB7XG4gIHJldHVybiBvcGVuQmxvY2soKSwgY3JlYXRlQmxvY2soLi4uYXJncyk7XG59XG5jb25zdCBnZXROb3JtYWxpemVkUHJvcHMgPSAobm9kZSkgPT4ge1xuICBpZiAoIWlzVk5vZGUobm9kZSkpIHtcbiAgICBkZWJ1Z1dhcm4oU0NPUEUsIFwiW2dldE5vcm1hbGl6ZWRQcm9wc10gbXVzdCBiZSBhIFZOb2RlXCIpO1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCByYXcgPSBub2RlLnByb3BzIHx8IHt9O1xuICBjb25zdCB0eXBlID0gKGlzVk5vZGUobm9kZS50eXBlKSA/IG5vZGUudHlwZS5wcm9wcyA6IHZvaWQgMCkgfHwge307XG4gIGNvbnN0IHByb3BzID0ge307XG4gIE9iamVjdC5rZXlzKHR5cGUpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChoYXNPd24odHlwZVtrZXldLCBcImRlZmF1bHRcIikpIHtcbiAgICAgIHByb3BzW2tleV0gPSB0eXBlW2tleV0uZGVmYXVsdDtcbiAgICB9XG4gIH0pO1xuICBPYmplY3Qua2V5cyhyYXcpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIHByb3BzW2NhbWVsaXplKGtleSldID0gcmF3W2tleV07XG4gIH0pO1xuICByZXR1cm4gcHJvcHM7XG59O1xuY29uc3QgZW5zdXJlT25seUNoaWxkID0gKGNoaWxkcmVuKSA9PiB7XG4gIGlmICghaXNBcnJheShjaGlsZHJlbikgfHwgY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImV4cGVjdCB0byByZWNlaXZlIGEgc2luZ2xlIFZ1ZSBlbGVtZW50IGNoaWxkXCIpO1xuICB9XG4gIHJldHVybiBjaGlsZHJlblswXTtcbn07XG5jb25zdCBmbGF0dGVkQ2hpbGRyZW4gPSAoY2hpbGRyZW4pID0+IHtcbiAgY29uc3Qgdk5vZGVzID0gaXNBcnJheShjaGlsZHJlbikgPyBjaGlsZHJlbiA6IFtjaGlsZHJlbl07XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICB2Tm9kZXMuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKGlzQXJyYXkoY2hpbGQpKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5mbGF0dGVkQ2hpbGRyZW4oY2hpbGQpKTtcbiAgICB9IGVsc2UgaWYgKGlzVk5vZGUoY2hpbGQpICYmIGlzQXJyYXkoY2hpbGQuY2hpbGRyZW4pKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5mbGF0dGVkQ2hpbGRyZW4oY2hpbGQuY2hpbGRyZW4pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goY2hpbGQpO1xuICAgICAgaWYgKGlzVk5vZGUoY2hpbGQpICYmICgoX2EgPSBjaGlsZC5jb21wb25lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYS5zdWJUcmVlKSkge1xuICAgICAgICByZXN1bHQucHVzaCguLi5mbGF0dGVkQ2hpbGRyZW4oY2hpbGQuY29tcG9uZW50LnN1YlRyZWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IHsgUGF0Y2hGbGFncywgZW5zdXJlT25seUNoaWxkLCBmbGF0dGVkQ2hpbGRyZW4sIGdldEZpcnN0VmFsaWROb2RlLCBnZXROb3JtYWxpemVkUHJvcHMsIGlzQ29tbWVudCwgaXNGcmFnbWVudCwgaXNUZW1wbGF0ZSwgaXNUZXh0LCBpc1ZhbGlkRWxlbWVudE5vZGUsIHJlbmRlckJsb2NrLCByZW5kZXJJZiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dm5vZGUubWpzLm1hcFxuIiwiZXhwb3J0IHsgY2FzdEFycmF5IGFzIGVuc3VyZUFycmF5IH0gZnJvbSAnbG9kYXNoLXVuaWZpZWQnO1xuXG5jb25zdCB1bmlxdWUgPSAoYXJyKSA9PiBbLi4ubmV3IFNldChhcnIpXTtcbmNvbnN0IGNhc3RBcnJheSA9IChhcnIpID0+IHtcbiAgaWYgKCFhcnIgJiYgYXJyICE9PSAwKVxuICAgIHJldHVybiBbXTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJyKSA/IGFyciA6IFthcnJdO1xufTtcblxuZXhwb3J0IHsgY2FzdEFycmF5LCB1bmlxdWUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFycmF5cy5tanMubWFwXG4iLCJjb25zdCBpc0tvcmVhbiA9ICh0ZXh0KSA9PiAvKFtcXHVBQzAwLVxcdUQ3QUZcXHUzMTMwLVxcdTMxOEZdKSsvZ2kudGVzdCh0ZXh0KTtcblxuZXhwb3J0IHsgaXNLb3JlYW4gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWkxOG4ubWpzLm1hcFxuIiwiY29uc3QgbXV0YWJsZSA9ICh2YWwpID0+IHZhbDtcblxuZXhwb3J0IHsgbXV0YWJsZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXNjcmlwdC5tanMubWFwXG4iLCJpbXBvcnQgeyBjb21wdXRlZCwgZ2V0Q3VycmVudEluc3RhbmNlIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IGZyb21QYWlycyB9IGZyb20gJ2xvZGFzaC11bmlmaWVkJztcbmltcG9ydCAnLi4vLi4vdXRpbHMvaW5kZXgubWpzJztcbmltcG9ydCB7IGRlYnVnV2FybiB9IGZyb20gJy4uLy4uL3V0aWxzL2Vycm9yLm1qcyc7XG5cbmNvbnN0IERFRkFVTFRfRVhDTFVERV9LRVlTID0gW1wiY2xhc3NcIiwgXCJzdHlsZVwiXTtcbmNvbnN0IExJU1RFTkVSX1BSRUZJWCA9IC9eb25bQS1aXS87XG5jb25zdCB1c2VBdHRycyA9IChwYXJhbXMgPSB7fSkgPT4ge1xuICBjb25zdCB7IGV4Y2x1ZGVMaXN0ZW5lcnMgPSBmYWxzZSwgZXhjbHVkZUtleXMgfSA9IHBhcmFtcztcbiAgY29uc3QgYWxsRXhjbHVkZUtleXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuICgoZXhjbHVkZUtleXMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4Y2x1ZGVLZXlzLnZhbHVlKSB8fCBbXSkuY29uY2F0KERFRkFVTFRfRVhDTFVERV9LRVlTKTtcbiAgfSk7XG4gIGNvbnN0IGluc3RhbmNlID0gZ2V0Q3VycmVudEluc3RhbmNlKCk7XG4gIGlmICghaW5zdGFuY2UpIHtcbiAgICBkZWJ1Z1dhcm4oXCJ1c2UtYXR0cnNcIiwgXCJnZXRDdXJyZW50SW5zdGFuY2UoKSByZXR1cm5lZCBudWxsLiB1c2VBdHRycygpIG11c3QgYmUgY2FsbGVkIGF0IHRoZSB0b3Agb2YgYSBzZXR1cCBmdW5jdGlvblwiKTtcbiAgICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gKHt9KSk7XG4gIH1cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIGZyb21QYWlycyhPYmplY3QuZW50cmllcygoX2EgPSBpbnN0YW5jZS5wcm94eSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLiRhdHRycykuZmlsdGVyKChba2V5XSkgPT4gIWFsbEV4Y2x1ZGVLZXlzLnZhbHVlLmluY2x1ZGVzKGtleSkgJiYgIShleGNsdWRlTGlzdGVuZXJzICYmIExJU1RFTkVSX1BSRUZJWC50ZXN0KGtleSkpKSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IHsgdXNlQXR0cnMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsImltcG9ydCB7IHdhdGNoLCB1bnJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgJy4uLy4uL3V0aWxzL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBkZWJ1Z1dhcm4gfSBmcm9tICcuLi8uLi91dGlscy9lcnJvci5tanMnO1xuXG5jb25zdCB1c2VEZXByZWNhdGVkID0gKHsgZnJvbSwgcmVwbGFjZW1lbnQsIHNjb3BlLCB2ZXJzaW9uLCByZWYsIHR5cGUgPSBcIkFQSVwiIH0sIGNvbmRpdGlvbikgPT4ge1xuICB3YXRjaCgoKSA9PiB1bnJlZihjb25kaXRpb24pLCAodmFsKSA9PiB7XG4gICAgaWYgKHZhbCkge1xuICAgICAgZGVidWdXYXJuKHNjb3BlLCBgWyR7dHlwZX1dICR7ZnJvbX0gaXMgYWJvdXQgdG8gYmUgZGVwcmVjYXRlZCBpbiB2ZXJzaW9uICR7dmVyc2lvbn0sIHBsZWFzZSB1c2UgJHtyZXBsYWNlbWVudH0gaW5zdGVhZC5cbkZvciBtb3JlIGRldGFpbCwgcGxlYXNlIHZpc2l0OiAke3JlZn1cbmApO1xuICAgIH1cbiAgfSwge1xuICAgIGltbWVkaWF0ZTogdHJ1ZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IHVzZURlcHJlY2F0ZWQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsImltcG9ydCB7IG9uTW91bnRlZCwgd2F0Y2hFZmZlY3QsIG9uQmVmb3JlVW5tb3VudCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgJy4uLy4uL3V0aWxzL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBhZGRVbml0IH0gZnJvbSAnLi4vLi4vdXRpbHMvZG9tL3N0eWxlLm1qcyc7XG5cbmNvbnN0IHVzZURyYWdnYWJsZSA9ICh0YXJnZXRSZWYsIGRyYWdSZWYsIGRyYWdnYWJsZSwgb3ZlcmZsb3cpID0+IHtcbiAgbGV0IHRyYW5zZm9ybSA9IHtcbiAgICBvZmZzZXRYOiAwLFxuICAgIG9mZnNldFk6IDBcbiAgfTtcbiAgY29uc3Qgb25Nb3VzZWRvd24gPSAoZSkgPT4ge1xuICAgIGNvbnN0IGRvd25YID0gZS5jbGllbnRYO1xuICAgIGNvbnN0IGRvd25ZID0gZS5jbGllbnRZO1xuICAgIGNvbnN0IHsgb2Zmc2V0WCwgb2Zmc2V0WSB9ID0gdHJhbnNmb3JtO1xuICAgIGNvbnN0IHRhcmdldFJlY3QgPSB0YXJnZXRSZWYudmFsdWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgdGFyZ2V0TGVmdCA9IHRhcmdldFJlY3QubGVmdDtcbiAgICBjb25zdCB0YXJnZXRUb3AgPSB0YXJnZXRSZWN0LnRvcDtcbiAgICBjb25zdCB0YXJnZXRXaWR0aCA9IHRhcmdldFJlY3Qud2lkdGg7XG4gICAgY29uc3QgdGFyZ2V0SGVpZ2h0ID0gdGFyZ2V0UmVjdC5oZWlnaHQ7XG4gICAgY29uc3QgY2xpZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgY29uc3QgY2xpZW50SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBtaW5MZWZ0ID0gLXRhcmdldExlZnQgKyBvZmZzZXRYO1xuICAgIGNvbnN0IG1pblRvcCA9IC10YXJnZXRUb3AgKyBvZmZzZXRZO1xuICAgIGNvbnN0IG1heExlZnQgPSBjbGllbnRXaWR0aCAtIHRhcmdldExlZnQgLSB0YXJnZXRXaWR0aCArIG9mZnNldFg7XG4gICAgY29uc3QgbWF4VG9wID0gY2xpZW50SGVpZ2h0IC0gdGFyZ2V0VG9wIC0gdGFyZ2V0SGVpZ2h0ICsgb2Zmc2V0WTtcbiAgICBjb25zdCBvbk1vdXNlbW92ZSA9IChlMikgPT4ge1xuICAgICAgbGV0IG1vdmVYID0gb2Zmc2V0WCArIGUyLmNsaWVudFggLSBkb3duWDtcbiAgICAgIGxldCBtb3ZlWSA9IG9mZnNldFkgKyBlMi5jbGllbnRZIC0gZG93blk7XG4gICAgICBpZiAoIShvdmVyZmxvdyA9PSBudWxsID8gdm9pZCAwIDogb3ZlcmZsb3cudmFsdWUpKSB7XG4gICAgICAgIG1vdmVYID0gTWF0aC5taW4oTWF0aC5tYXgobW92ZVgsIG1pbkxlZnQpLCBtYXhMZWZ0KTtcbiAgICAgICAgbW92ZVkgPSBNYXRoLm1pbihNYXRoLm1heChtb3ZlWSwgbWluVG9wKSwgbWF4VG9wKTtcbiAgICAgIH1cbiAgICAgIHRyYW5zZm9ybSA9IHtcbiAgICAgICAgb2Zmc2V0WDogbW92ZVgsXG4gICAgICAgIG9mZnNldFk6IG1vdmVZXG4gICAgICB9O1xuICAgICAgaWYgKHRhcmdldFJlZi52YWx1ZSkge1xuICAgICAgICB0YXJnZXRSZWYudmFsdWUuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke2FkZFVuaXQobW92ZVgpfSwgJHthZGRVbml0KG1vdmVZKX0pYDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9uTW91c2V1cCA9ICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgb25Nb3VzZW1vdmUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgb25Nb3VzZXVwKTtcbiAgICB9O1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgb25Nb3VzZW1vdmUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIG9uTW91c2V1cCk7XG4gIH07XG4gIGNvbnN0IG9uRHJhZ2dhYmxlID0gKCkgPT4ge1xuICAgIGlmIChkcmFnUmVmLnZhbHVlICYmIHRhcmdldFJlZi52YWx1ZSkge1xuICAgICAgZHJhZ1JlZi52YWx1ZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIG9uTW91c2Vkb3duKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG9mZkRyYWdnYWJsZSA9ICgpID0+IHtcbiAgICBpZiAoZHJhZ1JlZi52YWx1ZSAmJiB0YXJnZXRSZWYudmFsdWUpIHtcbiAgICAgIGRyYWdSZWYudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBvbk1vdXNlZG93bik7XG4gICAgfVxuICB9O1xuICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgIHdhdGNoRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChkcmFnZ2FibGUudmFsdWUpIHtcbiAgICAgICAgb25EcmFnZ2FibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9mZkRyYWdnYWJsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgb25CZWZvcmVVbm1vdW50KCgpID0+IHtcbiAgICBvZmZEcmFnZ2FibGUoKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgeyB1c2VEcmFnZ2FibGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsImltcG9ydCB7IHVucmVmLCBjb21wdXRlZCwgaXNSZWYsIHJlZiwgaW5qZWN0IH0gZnJvbSAndnVlJztcbmltcG9ydCB7IGdldCB9IGZyb20gJ2xvZGFzaC11bmlmaWVkJztcbmltcG9ydCBFbmdsaXNoIGZyb20gJy4uLy4uL2xvY2FsZS9sYW5nL2VuLm1qcyc7XG5cbmNvbnN0IGJ1aWxkVHJhbnNsYXRvciA9IChsb2NhbGUpID0+IChwYXRoLCBvcHRpb24pID0+IHRyYW5zbGF0ZShwYXRoLCBvcHRpb24sIHVucmVmKGxvY2FsZSkpO1xuY29uc3QgdHJhbnNsYXRlID0gKHBhdGgsIG9wdGlvbiwgbG9jYWxlKSA9PiBnZXQobG9jYWxlLCBwYXRoLCBwYXRoKS5yZXBsYWNlKC9cXHsoXFx3KylcXH0vZywgKF8sIGtleSkgPT4ge1xuICB2YXIgX2E7XG4gIHJldHVybiBgJHsoX2EgPSBvcHRpb24gPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbltrZXldKSAhPSBudWxsID8gX2EgOiBgeyR7a2V5fX1gfWA7XG59KTtcbmNvbnN0IGJ1aWxkTG9jYWxlQ29udGV4dCA9IChsb2NhbGUpID0+IHtcbiAgY29uc3QgbGFuZyA9IGNvbXB1dGVkKCgpID0+IHVucmVmKGxvY2FsZSkubmFtZSk7XG4gIGNvbnN0IGxvY2FsZVJlZiA9IGlzUmVmKGxvY2FsZSkgPyBsb2NhbGUgOiByZWYobG9jYWxlKTtcbiAgcmV0dXJuIHtcbiAgICBsYW5nLFxuICAgIGxvY2FsZTogbG9jYWxlUmVmLFxuICAgIHQ6IGJ1aWxkVHJhbnNsYXRvcihsb2NhbGUpXG4gIH07XG59O1xuY29uc3QgbG9jYWxlQ29udGV4dEtleSA9IFN5bWJvbChcImxvY2FsZUNvbnRleHRLZXlcIik7XG5jb25zdCB1c2VMb2NhbGUgPSAobG9jYWxlT3ZlcnJpZGVzKSA9PiB7XG4gIGNvbnN0IGxvY2FsZSA9IGxvY2FsZU92ZXJyaWRlcyB8fCBpbmplY3QobG9jYWxlQ29udGV4dEtleSwgcmVmKCkpO1xuICByZXR1cm4gYnVpbGRMb2NhbGVDb250ZXh0KGNvbXB1dGVkKCgpID0+IGxvY2FsZS52YWx1ZSB8fCBFbmdsaXNoKSk7XG59O1xuXG5leHBvcnQgeyBidWlsZExvY2FsZUNvbnRleHQsIGJ1aWxkVHJhbnNsYXRvciwgbG9jYWxlQ29udGV4dEtleSwgdHJhbnNsYXRlLCB1c2VMb2NhbGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsImltcG9ydCB7IGdldEN1cnJlbnRJbnN0YW5jZSwgaW5qZWN0LCByZWYsIGNvbXB1dGVkLCB1bnJlZiB9IGZyb20gJ3Z1ZSc7XG5cbmNvbnN0IGRlZmF1bHROYW1lc3BhY2UgPSBcImVsXCI7XG5jb25zdCBzdGF0ZVByZWZpeCA9IFwiaXMtXCI7XG5jb25zdCBfYmVtID0gKG5hbWVzcGFjZSwgYmxvY2ssIGJsb2NrU3VmZml4LCBlbGVtZW50LCBtb2RpZmllcikgPT4ge1xuICBsZXQgY2xzID0gYCR7bmFtZXNwYWNlfS0ke2Jsb2NrfWA7XG4gIGlmIChibG9ja1N1ZmZpeCkge1xuICAgIGNscyArPSBgLSR7YmxvY2tTdWZmaXh9YDtcbiAgfVxuICBpZiAoZWxlbWVudCkge1xuICAgIGNscyArPSBgX18ke2VsZW1lbnR9YDtcbiAgfVxuICBpZiAobW9kaWZpZXIpIHtcbiAgICBjbHMgKz0gYC0tJHttb2RpZmllcn1gO1xuICB9XG4gIHJldHVybiBjbHM7XG59O1xuY29uc3QgbmFtZXNwYWNlQ29udGV4dEtleSA9IFN5bWJvbChcIm5hbWVzcGFjZUNvbnRleHRLZXlcIik7XG5jb25zdCB1c2VHZXREZXJpdmVkTmFtZXNwYWNlID0gKG5hbWVzcGFjZU92ZXJyaWRlcykgPT4ge1xuICBjb25zdCBkZXJpdmVkTmFtZXNwYWNlID0gbmFtZXNwYWNlT3ZlcnJpZGVzIHx8IChnZXRDdXJyZW50SW5zdGFuY2UoKSA/IGluamVjdChuYW1lc3BhY2VDb250ZXh0S2V5LCByZWYoZGVmYXVsdE5hbWVzcGFjZSkpIDogcmVmKGRlZmF1bHROYW1lc3BhY2UpKTtcbiAgY29uc3QgbmFtZXNwYWNlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB1bnJlZihkZXJpdmVkTmFtZXNwYWNlKSB8fCBkZWZhdWx0TmFtZXNwYWNlO1xuICB9KTtcbiAgcmV0dXJuIG5hbWVzcGFjZTtcbn07XG5jb25zdCB1c2VOYW1lc3BhY2UgPSAoYmxvY2ssIG5hbWVzcGFjZU92ZXJyaWRlcykgPT4ge1xuICBjb25zdCBuYW1lc3BhY2UgPSB1c2VHZXREZXJpdmVkTmFtZXNwYWNlKG5hbWVzcGFjZU92ZXJyaWRlcyk7XG4gIGNvbnN0IGIgPSAoYmxvY2tTdWZmaXggPSBcIlwiKSA9PiBfYmVtKG5hbWVzcGFjZS52YWx1ZSwgYmxvY2ssIGJsb2NrU3VmZml4LCBcIlwiLCBcIlwiKTtcbiAgY29uc3QgZSA9IChlbGVtZW50KSA9PiBlbGVtZW50ID8gX2JlbShuYW1lc3BhY2UudmFsdWUsIGJsb2NrLCBcIlwiLCBlbGVtZW50LCBcIlwiKSA6IFwiXCI7XG4gIGNvbnN0IG0gPSAobW9kaWZpZXIpID0+IG1vZGlmaWVyID8gX2JlbShuYW1lc3BhY2UudmFsdWUsIGJsb2NrLCBcIlwiLCBcIlwiLCBtb2RpZmllcikgOiBcIlwiO1xuICBjb25zdCBiZSA9IChibG9ja1N1ZmZpeCwgZWxlbWVudCkgPT4gYmxvY2tTdWZmaXggJiYgZWxlbWVudCA/IF9iZW0obmFtZXNwYWNlLnZhbHVlLCBibG9jaywgYmxvY2tTdWZmaXgsIGVsZW1lbnQsIFwiXCIpIDogXCJcIjtcbiAgY29uc3QgZW0gPSAoZWxlbWVudCwgbW9kaWZpZXIpID0+IGVsZW1lbnQgJiYgbW9kaWZpZXIgPyBfYmVtKG5hbWVzcGFjZS52YWx1ZSwgYmxvY2ssIFwiXCIsIGVsZW1lbnQsIG1vZGlmaWVyKSA6IFwiXCI7XG4gIGNvbnN0IGJtID0gKGJsb2NrU3VmZml4LCBtb2RpZmllcikgPT4gYmxvY2tTdWZmaXggJiYgbW9kaWZpZXIgPyBfYmVtKG5hbWVzcGFjZS52YWx1ZSwgYmxvY2ssIGJsb2NrU3VmZml4LCBcIlwiLCBtb2RpZmllcikgOiBcIlwiO1xuICBjb25zdCBiZW0gPSAoYmxvY2tTdWZmaXgsIGVsZW1lbnQsIG1vZGlmaWVyKSA9PiBibG9ja1N1ZmZpeCAmJiBlbGVtZW50ICYmIG1vZGlmaWVyID8gX2JlbShuYW1lc3BhY2UudmFsdWUsIGJsb2NrLCBibG9ja1N1ZmZpeCwgZWxlbWVudCwgbW9kaWZpZXIpIDogXCJcIjtcbiAgY29uc3QgaXMgPSAobmFtZSwgLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gYXJncy5sZW5ndGggPj0gMSA/IGFyZ3NbMF0gOiB0cnVlO1xuICAgIHJldHVybiBuYW1lICYmIHN0YXRlID8gYCR7c3RhdGVQcmVmaXh9JHtuYW1lfWAgOiBcIlwiO1xuICB9O1xuICBjb25zdCBjc3NWYXIgPSAob2JqZWN0KSA9PiB7XG4gICAgY29uc3Qgc3R5bGVzID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBpZiAob2JqZWN0W2tleV0pIHtcbiAgICAgICAgc3R5bGVzW2AtLSR7bmFtZXNwYWNlLnZhbHVlfS0ke2tleX1gXSA9IG9iamVjdFtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3R5bGVzO1xuICB9O1xuICBjb25zdCBjc3NWYXJCbG9jayA9IChvYmplY3QpID0+IHtcbiAgICBjb25zdCBzdHlsZXMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGlmIChvYmplY3Rba2V5XSkge1xuICAgICAgICBzdHlsZXNbYC0tJHtuYW1lc3BhY2UudmFsdWV9LSR7YmxvY2t9LSR7a2V5fWBdID0gb2JqZWN0W2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHlsZXM7XG4gIH07XG4gIGNvbnN0IGNzc1Zhck5hbWUgPSAobmFtZSkgPT4gYC0tJHtuYW1lc3BhY2UudmFsdWV9LSR7bmFtZX1gO1xuICBjb25zdCBjc3NWYXJCbG9ja05hbWUgPSAobmFtZSkgPT4gYC0tJHtuYW1lc3BhY2UudmFsdWV9LSR7YmxvY2t9LSR7bmFtZX1gO1xuICByZXR1cm4ge1xuICAgIG5hbWVzcGFjZSxcbiAgICBiLFxuICAgIGUsXG4gICAgbSxcbiAgICBiZSxcbiAgICBlbSxcbiAgICBibSxcbiAgICBiZW0sXG4gICAgaXMsXG4gICAgY3NzVmFyLFxuICAgIGNzc1Zhck5hbWUsXG4gICAgY3NzVmFyQmxvY2ssXG4gICAgY3NzVmFyQmxvY2tOYW1lXG4gIH07XG59O1xuXG5leHBvcnQgeyBkZWZhdWx0TmFtZXNwYWNlLCBuYW1lc3BhY2VDb250ZXh0S2V5LCB1c2VHZXREZXJpdmVkTmFtZXNwYWNlLCB1c2VOYW1lc3BhY2UgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsImltcG9ydCB7IGlzUmVmLCB3YXRjaCwgb25TY29wZURpc3Bvc2UgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICdAdnVlL3JlYWN0aXZpdHknO1xuaW1wb3J0ICcuLi8uLi91dGlscy9pbmRleC5tanMnO1xuaW1wb3J0IHsgdXNlTmFtZXNwYWNlIH0gZnJvbSAnLi4vdXNlLW5hbWVzcGFjZS9pbmRleC5tanMnO1xuaW1wb3J0IHsgdGhyb3dFcnJvciB9IGZyb20gJy4uLy4uL3V0aWxzL2Vycm9yLm1qcyc7XG5pbXBvcnQgeyBpc0NsaWVudCB9IGZyb20gJ0B2dWV1c2UvY29yZSc7XG5pbXBvcnQgeyBoYXNDbGFzcywgcmVtb3ZlQ2xhc3MsIGdldFN0eWxlLCBhZGRDbGFzcyB9IGZyb20gJy4uLy4uL3V0aWxzL2RvbS9zdHlsZS5tanMnO1xuaW1wb3J0IHsgZ2V0U2Nyb2xsQmFyV2lkdGggfSBmcm9tICcuLi8uLi91dGlscy9kb20vc2Nyb2xsLm1qcyc7XG5cbmNvbnN0IHVzZUxvY2tzY3JlZW4gPSAodHJpZ2dlciwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmICghaXNSZWYodHJpZ2dlcikpIHtcbiAgICB0aHJvd0Vycm9yKFwiW3VzZUxvY2tzY3JlZW5dXCIsIFwiWW91IG5lZWQgdG8gcGFzcyBhIHJlZiBwYXJhbSB0byB0aGlzIGZ1bmN0aW9uXCIpO1xuICB9XG4gIGNvbnN0IG5zID0gb3B0aW9ucy5ucyB8fCB1c2VOYW1lc3BhY2UoXCJwb3B1cFwiKTtcbiAgY29uc3QgaGlkZGVuQ2xzID0gY29tcHV0ZWQoKCkgPT4gbnMuYm0oXCJwYXJlbnRcIiwgXCJoaWRkZW5cIikpO1xuICBpZiAoIWlzQ2xpZW50IHx8IGhhc0NsYXNzKGRvY3VtZW50LmJvZHksIGhpZGRlbkNscy52YWx1ZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IHNjcm9sbEJhcldpZHRoID0gMDtcbiAgbGV0IHdpdGhvdXRIaWRkZW5DbGFzcyA9IGZhbHNlO1xuICBsZXQgYm9keVdpZHRoID0gXCIwXCI7XG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZW1vdmVDbGFzcyhkb2N1bWVudCA9PSBudWxsID8gdm9pZCAwIDogZG9jdW1lbnQuYm9keSwgaGlkZGVuQ2xzLnZhbHVlKTtcbiAgICAgIGlmICh3aXRob3V0SGlkZGVuQ2xhc3MgJiYgZG9jdW1lbnQpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aCA9IGJvZHlXaWR0aDtcbiAgICAgIH1cbiAgICB9LCAyMDApO1xuICB9O1xuICB3YXRjaCh0cmlnZ2VyLCAodmFsKSA9PiB7XG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2l0aG91dEhpZGRlbkNsYXNzID0gIWhhc0NsYXNzKGRvY3VtZW50LmJvZHksIGhpZGRlbkNscy52YWx1ZSk7XG4gICAgaWYgKHdpdGhvdXRIaWRkZW5DbGFzcykge1xuICAgICAgYm9keVdpZHRoID0gZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aDtcbiAgICB9XG4gICAgc2Nyb2xsQmFyV2lkdGggPSBnZXRTY3JvbGxCYXJXaWR0aChucy5uYW1lc3BhY2UudmFsdWUpO1xuICAgIGNvbnN0IGJvZHlIYXNPdmVyZmxvdyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgPCBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCBib2R5T3ZlcmZsb3dZID0gZ2V0U3R5bGUoZG9jdW1lbnQuYm9keSwgXCJvdmVyZmxvd1lcIik7XG4gICAgaWYgKHNjcm9sbEJhcldpZHRoID4gMCAmJiAoYm9keUhhc092ZXJmbG93IHx8IGJvZHlPdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIpICYmIHdpdGhvdXRIaWRkZW5DbGFzcykge1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aCA9IGBjYWxjKDEwMCUgLSAke3Njcm9sbEJhcldpZHRofXB4KWA7XG4gICAgfVxuICAgIGFkZENsYXNzKGRvY3VtZW50LmJvZHksIGhpZGRlbkNscy52YWx1ZSk7XG4gIH0pO1xuICBvblNjb3BlRGlzcG9zZSgoKSA9PiBjbGVhbnVwKCkpO1xufTtcblxuZXhwb3J0IHsgdXNlTG9ja3NjcmVlbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwiaW1wb3J0IHsgZ2V0Q3VycmVudEluc3RhbmNlLCBjb21wdXRlZCwgd2F0Y2gsIG9uTW91bnRlZCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQHZ1ZS9zaGFyZWQnO1xuaW1wb3J0ICcuLi8uLi91dGlscy9pbmRleC5tanMnO1xuaW1wb3J0IHsgYnVpbGRQcm9wLCBkZWZpbmVQcm9wVHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL3Z1ZS9wcm9wcy9ydW50aW1lLm1qcyc7XG5pbXBvcnQgeyBpc0NsaWVudCB9IGZyb20gJ0B2dWV1c2UvY29yZSc7XG5pbXBvcnQgeyBpc0Jvb2xlYW4gfSBmcm9tICcuLi8uLi91dGlscy90eXBlcy5tanMnO1xuXG5jb25zdCBfcHJvcCA9IGJ1aWxkUHJvcCh7XG4gIHR5cGU6IGRlZmluZVByb3BUeXBlKEJvb2xlYW4pLFxuICBkZWZhdWx0OiBudWxsXG59KTtcbmNvbnN0IF9ldmVudCA9IGJ1aWxkUHJvcCh7XG4gIHR5cGU6IGRlZmluZVByb3BUeXBlKEZ1bmN0aW9uKVxufSk7XG5jb25zdCBjcmVhdGVNb2RlbFRvZ2dsZUNvbXBvc2FibGUgPSAobmFtZSkgPT4ge1xuICBjb25zdCB1cGRhdGVFdmVudEtleSA9IGB1cGRhdGU6JHtuYW1lfWA7XG4gIGNvbnN0IHVwZGF0ZUV2ZW50S2V5UmF3ID0gYG9uVXBkYXRlOiR7bmFtZX1gO1xuICBjb25zdCB1c2VNb2RlbFRvZ2dsZUVtaXRzMiA9IFt1cGRhdGVFdmVudEtleV07XG4gIGNvbnN0IHVzZU1vZGVsVG9nZ2xlUHJvcHMyID0ge1xuICAgIFtuYW1lXTogX3Byb3AsXG4gICAgW3VwZGF0ZUV2ZW50S2V5UmF3XTogX2V2ZW50XG4gIH07XG4gIGNvbnN0IHVzZU1vZGVsVG9nZ2xlMiA9ICh7XG4gICAgaW5kaWNhdG9yLFxuICAgIHRvZ2dsZVJlYXNvbixcbiAgICBzaG91bGRIaWRlV2hlblJvdXRlQ2hhbmdlcyxcbiAgICBzaG91bGRQcm9jZWVkLFxuICAgIG9uU2hvdyxcbiAgICBvbkhpZGVcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0Q3VycmVudEluc3RhbmNlKCk7XG4gICAgY29uc3QgeyBlbWl0IH0gPSBpbnN0YW5jZTtcbiAgICBjb25zdCBwcm9wcyA9IGluc3RhbmNlLnByb3BzO1xuICAgIGNvbnN0IGhhc1VwZGF0ZUhhbmRsZXIgPSBjb21wdXRlZCgoKSA9PiBpc0Z1bmN0aW9uKHByb3BzW3VwZGF0ZUV2ZW50S2V5UmF3XSkpO1xuICAgIGNvbnN0IGlzTW9kZWxCaW5kaW5nQWJzZW50ID0gY29tcHV0ZWQoKCkgPT4gcHJvcHNbbmFtZV0gPT09IG51bGwpO1xuICAgIGNvbnN0IGRvU2hvdyA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKGluZGljYXRvci52YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpbmRpY2F0b3IudmFsdWUgPSB0cnVlO1xuICAgICAgaWYgKHRvZ2dsZVJlYXNvbikge1xuICAgICAgICB0b2dnbGVSZWFzb24udmFsdWUgPSBldmVudDtcbiAgICAgIH1cbiAgICAgIGlmIChpc0Z1bmN0aW9uKG9uU2hvdykpIHtcbiAgICAgICAgb25TaG93KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRvSGlkZSA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKGluZGljYXRvci52YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaW5kaWNhdG9yLnZhbHVlID0gZmFsc2U7XG4gICAgICBpZiAodG9nZ2xlUmVhc29uKSB7XG4gICAgICAgIHRvZ2dsZVJlYXNvbi52YWx1ZSA9IGV2ZW50O1xuICAgICAgfVxuICAgICAgaWYgKGlzRnVuY3Rpb24ob25IaWRlKSkge1xuICAgICAgICBvbkhpZGUoZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2hvdyA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKHByb3BzLmRpc2FibGVkID09PSB0cnVlIHx8IGlzRnVuY3Rpb24oc2hvdWxkUHJvY2VlZCkgJiYgIXNob3VsZFByb2NlZWQoKSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY29uc3Qgc2hvdWxkRW1pdCA9IGhhc1VwZGF0ZUhhbmRsZXIudmFsdWUgJiYgaXNDbGllbnQ7XG4gICAgICBpZiAoc2hvdWxkRW1pdCkge1xuICAgICAgICBlbWl0KHVwZGF0ZUV2ZW50S2V5LCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc01vZGVsQmluZGluZ0Fic2VudC52YWx1ZSB8fCAhc2hvdWxkRW1pdCkge1xuICAgICAgICBkb1Nob3coZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGlkZSA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKHByb3BzLmRpc2FibGVkID09PSB0cnVlIHx8ICFpc0NsaWVudClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY29uc3Qgc2hvdWxkRW1pdCA9IGhhc1VwZGF0ZUhhbmRsZXIudmFsdWUgJiYgaXNDbGllbnQ7XG4gICAgICBpZiAoc2hvdWxkRW1pdCkge1xuICAgICAgICBlbWl0KHVwZGF0ZUV2ZW50S2V5LCBmYWxzZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNNb2RlbEJpbmRpbmdBYnNlbnQudmFsdWUgfHwgIXNob3VsZEVtaXQpIHtcbiAgICAgICAgZG9IaWRlKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9uQ2hhbmdlID0gKHZhbCkgPT4ge1xuICAgICAgaWYgKCFpc0Jvb2xlYW4odmFsKSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKHByb3BzLmRpc2FibGVkICYmIHZhbCkge1xuICAgICAgICBpZiAoaGFzVXBkYXRlSGFuZGxlci52YWx1ZSkge1xuICAgICAgICAgIGVtaXQodXBkYXRlRXZlbnRLZXksIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpbmRpY2F0b3IudmFsdWUgIT09IHZhbCkge1xuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgZG9TaG93KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9IaWRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHRvZ2dsZSA9ICgpID0+IHtcbiAgICAgIGlmIChpbmRpY2F0b3IudmFsdWUpIHtcbiAgICAgICAgaGlkZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hvdygpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2F0Y2goKCkgPT4gcHJvcHNbbmFtZV0sIG9uQ2hhbmdlKTtcbiAgICBpZiAoc2hvdWxkSGlkZVdoZW5Sb3V0ZUNoYW5nZXMgJiYgaW5zdGFuY2UuYXBwQ29udGV4dC5jb25maWcuZ2xvYmFsUHJvcGVydGllcy4kcm91dGUgIT09IHZvaWQgMCkge1xuICAgICAgd2F0Y2goKCkgPT4gKHtcbiAgICAgICAgLi4uaW5zdGFuY2UucHJveHkuJHJvdXRlXG4gICAgICB9KSwgKCkgPT4ge1xuICAgICAgICBpZiAoc2hvdWxkSGlkZVdoZW5Sb3V0ZUNoYW5nZXMudmFsdWUgJiYgaW5kaWNhdG9yLnZhbHVlKSB7XG4gICAgICAgICAgaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgb25Nb3VudGVkKCgpID0+IHtcbiAgICAgIG9uQ2hhbmdlKHByb3BzW25hbWVdKTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgaGlkZSxcbiAgICAgIHNob3csXG4gICAgICB0b2dnbGUsXG4gICAgICBoYXNVcGRhdGVIYW5kbGVyXG4gICAgfTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICB1c2VNb2RlbFRvZ2dsZTogdXNlTW9kZWxUb2dnbGUyLFxuICAgIHVzZU1vZGVsVG9nZ2xlUHJvcHM6IHVzZU1vZGVsVG9nZ2xlUHJvcHMyLFxuICAgIHVzZU1vZGVsVG9nZ2xlRW1pdHM6IHVzZU1vZGVsVG9nZ2xlRW1pdHMyXG4gIH07XG59O1xuY29uc3QgeyB1c2VNb2RlbFRvZ2dsZSwgdXNlTW9kZWxUb2dnbGVQcm9wcywgdXNlTW9kZWxUb2dnbGVFbWl0cyB9ID0gY3JlYXRlTW9kZWxUb2dnbGVDb21wb3NhYmxlKFwibW9kZWxWYWx1ZVwiKTtcblxuZXhwb3J0IHsgY3JlYXRlTW9kZWxUb2dnbGVDb21wb3NhYmxlLCB1c2VNb2RlbFRvZ2dsZSwgdXNlTW9kZWxUb2dnbGVFbWl0cywgdXNlTW9kZWxUb2dnbGVQcm9wcyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwiaW1wb3J0IHsgZ2V0Q3VycmVudEluc3RhbmNlLCBjb21wdXRlZCB9IGZyb20gJ3Z1ZSc7XG5cbmNvbnN0IHVzZVByb3AgPSAobmFtZSkgPT4ge1xuICBjb25zdCB2bSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgcmV0dXJuIChfYiA9IChfYSA9IHZtID09IG51bGwgPyB2b2lkIDAgOiB2bS5wcm94eSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLiRwcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9iW25hbWVdO1xuICB9KTtcbn07XG5cbmV4cG9ydCB7IHVzZVByb3AgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsInZhciBFPVwidG9wXCIsUj1cImJvdHRvbVwiLFc9XCJyaWdodFwiLFA9XCJsZWZ0XCIsbWU9XCJhdXRvXCIsRz1bRSxSLFcsUF0sVT1cInN0YXJ0XCIsSj1cImVuZFwiLFhlPVwiY2xpcHBpbmdQYXJlbnRzXCIsamU9XCJ2aWV3cG9ydFwiLEs9XCJwb3BwZXJcIixZZT1cInJlZmVyZW5jZVwiLERlPUcucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29uY2F0KFtlK1wiLVwiK1UsZStcIi1cIitKXSl9LFtdKSxFZT1bXS5jb25jYXQoRyxbbWVdKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb25jYXQoW2UsZStcIi1cIitVLGUrXCItXCIrSl0pfSxbXSksR2U9XCJiZWZvcmVSZWFkXCIsSmU9XCJyZWFkXCIsS2U9XCJhZnRlclJlYWRcIixRZT1cImJlZm9yZU1haW5cIixaZT1cIm1haW5cIixldD1cImFmdGVyTWFpblwiLHR0PVwiYmVmb3JlV3JpdGVcIixudD1cIndyaXRlXCIscnQ9XCJhZnRlcldyaXRlXCIsb3Q9W0dlLEplLEtlLFFlLFplLGV0LHR0LG50LHJ0XTtmdW5jdGlvbiBDKHQpe3JldHVybiB0Pyh0Lm5vZGVOYW1lfHxcIlwiKS50b0xvd2VyQ2FzZSgpOm51bGx9ZnVuY3Rpb24gSCh0KXtpZih0PT1udWxsKXJldHVybiB3aW5kb3c7aWYodC50b1N0cmluZygpIT09XCJbb2JqZWN0IFdpbmRvd11cIil7dmFyIGU9dC5vd25lckRvY3VtZW50O3JldHVybiBlJiZlLmRlZmF1bHRWaWV3fHx3aW5kb3d9cmV0dXJuIHR9ZnVuY3Rpb24gUSh0KXt2YXIgZT1IKHQpLkVsZW1lbnQ7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHx0IGluc3RhbmNlb2YgRWxlbWVudH1mdW5jdGlvbiBCKHQpe3ZhciBlPUgodCkuSFRNTEVsZW1lbnQ7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHx0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9ZnVuY3Rpb24gUGUodCl7aWYodHlwZW9mIFNoYWRvd1Jvb3Q9PVwidW5kZWZpbmVkXCIpcmV0dXJuITE7dmFyIGU9SCh0KS5TaGFkb3dSb290O3JldHVybiB0IGluc3RhbmNlb2YgZXx8dCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3R9ZnVuY3Rpb24gTXQodCl7dmFyIGU9dC5zdGF0ZTtPYmplY3Qua2V5cyhlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPWUuc3R5bGVzW25dfHx7fSxvPWUuYXR0cmlidXRlc1tuXXx8e30saT1lLmVsZW1lbnRzW25dOyFCKGkpfHwhQyhpKXx8KE9iamVjdC5hc3NpZ24oaS5zdHlsZSxyKSxPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPW9bYV07cz09PSExP2kucmVtb3ZlQXR0cmlidXRlKGEpOmkuc2V0QXR0cmlidXRlKGEscz09PSEwP1wiXCI6cyl9KSl9KX1mdW5jdGlvbiBSdCh0KXt2YXIgZT10LnN0YXRlLG49e3BvcHBlcjp7cG9zaXRpb246ZS5vcHRpb25zLnN0cmF0ZWd5LGxlZnQ6XCIwXCIsdG9wOlwiMFwiLG1hcmdpbjpcIjBcIn0sYXJyb3c6e3Bvc2l0aW9uOlwiYWJzb2x1dGVcIn0scmVmZXJlbmNlOnt9fTtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLmVsZW1lbnRzLnBvcHBlci5zdHlsZSxuLnBvcHBlciksZS5zdHlsZXM9bixlLmVsZW1lbnRzLmFycm93JiZPYmplY3QuYXNzaWduKGUuZWxlbWVudHMuYXJyb3cuc3R5bGUsbi5hcnJvdyksZnVuY3Rpb24oKXtPYmplY3Qua2V5cyhlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBvPWUuZWxlbWVudHNbcl0saT1lLmF0dHJpYnV0ZXNbcl18fHt9LGE9T2JqZWN0LmtleXMoZS5zdHlsZXMuaGFzT3duUHJvcGVydHkocik/ZS5zdHlsZXNbcl06bltyXSkscz1hLnJlZHVjZShmdW5jdGlvbihmLGMpe3JldHVybiBmW2NdPVwiXCIsZn0se30pOyFCKG8pfHwhQyhvKXx8KE9iamVjdC5hc3NpZ24oby5zdHlsZSxzKSxPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe28ucmVtb3ZlQXR0cmlidXRlKGYpfSkpfSl9fXZhciBBZT17bmFtZTpcImFwcGx5U3R5bGVzXCIsZW5hYmxlZDohMCxwaGFzZTpcIndyaXRlXCIsZm46TXQsZWZmZWN0OlJ0LHJlcXVpcmVzOltcImNvbXB1dGVTdHlsZXNcIl19O2Z1bmN0aW9uIHEodCl7cmV0dXJuIHQuc3BsaXQoXCItXCIpWzBdfXZhciBYPU1hdGgubWF4LHZlPU1hdGgubWluLFo9TWF0aC5yb3VuZDtmdW5jdGlvbiBlZSh0LGUpe2U9PT12b2lkIDAmJihlPSExKTt2YXIgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9MSxvPTE7aWYoQih0KSYmZSl7dmFyIGk9dC5vZmZzZXRIZWlnaHQsYT10Lm9mZnNldFdpZHRoO2E+MCYmKHI9WihuLndpZHRoKS9hfHwxKSxpPjAmJihvPVoobi5oZWlnaHQpL2l8fDEpfXJldHVybnt3aWR0aDpuLndpZHRoL3IsaGVpZ2h0Om4uaGVpZ2h0L28sdG9wOm4udG9wL28scmlnaHQ6bi5yaWdodC9yLGJvdHRvbTpuLmJvdHRvbS9vLGxlZnQ6bi5sZWZ0L3IseDpuLmxlZnQvcix5Om4udG9wL299fWZ1bmN0aW9uIGtlKHQpe3ZhciBlPWVlKHQpLG49dC5vZmZzZXRXaWR0aCxyPXQub2Zmc2V0SGVpZ2h0O3JldHVybiBNYXRoLmFicyhlLndpZHRoLW4pPD0xJiYobj1lLndpZHRoKSxNYXRoLmFicyhlLmhlaWdodC1yKTw9MSYmKHI9ZS5oZWlnaHQpLHt4OnQub2Zmc2V0TGVmdCx5OnQub2Zmc2V0VG9wLHdpZHRoOm4saGVpZ2h0OnJ9fWZ1bmN0aW9uIGl0KHQsZSl7dmFyIG49ZS5nZXRSb290Tm9kZSYmZS5nZXRSb290Tm9kZSgpO2lmKHQuY29udGFpbnMoZSkpcmV0dXJuITA7aWYobiYmUGUobikpe3ZhciByPWU7ZG97aWYociYmdC5pc1NhbWVOb2RlKHIpKXJldHVybiEwO3I9ci5wYXJlbnROb2RlfHxyLmhvc3R9d2hpbGUocil9cmV0dXJuITF9ZnVuY3Rpb24gTih0KXtyZXR1cm4gSCh0KS5nZXRDb21wdXRlZFN0eWxlKHQpfWZ1bmN0aW9uIFd0KHQpe3JldHVybltcInRhYmxlXCIsXCJ0ZFwiLFwidGhcIl0uaW5kZXhPZihDKHQpKT49MH1mdW5jdGlvbiBJKHQpe3JldHVybigoUSh0KT90Lm93bmVyRG9jdW1lbnQ6dC5kb2N1bWVudCl8fHdpbmRvdy5kb2N1bWVudCkuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIGdlKHQpe3JldHVybiBDKHQpPT09XCJodG1sXCI/dDp0LmFzc2lnbmVkU2xvdHx8dC5wYXJlbnROb2RlfHwoUGUodCk/dC5ob3N0Om51bGwpfHxJKHQpfWZ1bmN0aW9uIGF0KHQpe3JldHVybiFCKHQpfHxOKHQpLnBvc2l0aW9uPT09XCJmaXhlZFwiP251bGw6dC5vZmZzZXRQYXJlbnR9ZnVuY3Rpb24gQnQodCl7dmFyIGU9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJmaXJlZm94XCIpIT09LTEsbj1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJUcmlkZW50XCIpIT09LTE7aWYobiYmQih0KSl7dmFyIHI9Tih0KTtpZihyLnBvc2l0aW9uPT09XCJmaXhlZFwiKXJldHVybiBudWxsfXZhciBvPWdlKHQpO2ZvcihQZShvKSYmKG89by5ob3N0KTtCKG8pJiZbXCJodG1sXCIsXCJib2R5XCJdLmluZGV4T2YoQyhvKSk8MDspe3ZhciBpPU4obyk7aWYoaS50cmFuc2Zvcm0hPT1cIm5vbmVcInx8aS5wZXJzcGVjdGl2ZSE9PVwibm9uZVwifHxpLmNvbnRhaW49PT1cInBhaW50XCJ8fFtcInRyYW5zZm9ybVwiLFwicGVyc3BlY3RpdmVcIl0uaW5kZXhPZihpLndpbGxDaGFuZ2UpIT09LTF8fGUmJmkud2lsbENoYW5nZT09PVwiZmlsdGVyXCJ8fGUmJmkuZmlsdGVyJiZpLmZpbHRlciE9PVwibm9uZVwiKXJldHVybiBvO289by5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIHNlKHQpe2Zvcih2YXIgZT1IKHQpLG49YXQodCk7biYmV3QobikmJk4obikucG9zaXRpb249PT1cInN0YXRpY1wiOyluPWF0KG4pO3JldHVybiBuJiYoQyhuKT09PVwiaHRtbFwifHxDKG4pPT09XCJib2R5XCImJk4obikucG9zaXRpb249PT1cInN0YXRpY1wiKT9lOm58fEJ0KHQpfHxlfWZ1bmN0aW9uIExlKHQpe3JldHVybltcInRvcFwiLFwiYm90dG9tXCJdLmluZGV4T2YodCk+PTA/XCJ4XCI6XCJ5XCJ9ZnVuY3Rpb24gZmUodCxlLG4pe3JldHVybiBYKHQsdmUoZSxuKSl9ZnVuY3Rpb24gU3QodCxlLG4pe3ZhciByPWZlKHQsZSxuKTtyZXR1cm4gcj5uP246cn1mdW5jdGlvbiBzdCgpe3JldHVybnt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH19ZnVuY3Rpb24gZnQodCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sc3QoKSx0KX1mdW5jdGlvbiBjdCh0LGUpe3JldHVybiBlLnJlZHVjZShmdW5jdGlvbihuLHIpe3JldHVybiBuW3JdPXQsbn0se30pfXZhciBUdD1mdW5jdGlvbih0LGUpe3JldHVybiB0PXR5cGVvZiB0PT1cImZ1bmN0aW9uXCI/dChPYmplY3QuYXNzaWduKHt9LGUucmVjdHMse3BsYWNlbWVudDplLnBsYWNlbWVudH0pKTp0LGZ0KHR5cGVvZiB0IT1cIm51bWJlclwiP3Q6Y3QodCxHKSl9O2Z1bmN0aW9uIEh0KHQpe3ZhciBlLG49dC5zdGF0ZSxyPXQubmFtZSxvPXQub3B0aW9ucyxpPW4uZWxlbWVudHMuYXJyb3csYT1uLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxzPXEobi5wbGFjZW1lbnQpLGY9TGUocyksYz1bUCxXXS5pbmRleE9mKHMpPj0wLHU9Yz9cImhlaWdodFwiOlwid2lkdGhcIjtpZighKCFpfHwhYSkpe3ZhciBtPVR0KG8ucGFkZGluZyxuKSx2PWtlKGkpLGw9Zj09PVwieVwiP0U6UCxoPWY9PT1cInlcIj9SOlcscD1uLnJlY3RzLnJlZmVyZW5jZVt1XStuLnJlY3RzLnJlZmVyZW5jZVtmXS1hW2ZdLW4ucmVjdHMucG9wcGVyW3VdLGc9YVtmXS1uLnJlY3RzLnJlZmVyZW5jZVtmXSx4PXNlKGkpLHk9eD9mPT09XCJ5XCI/eC5jbGllbnRIZWlnaHR8fDA6eC5jbGllbnRXaWR0aHx8MDowLCQ9cC8yLWcvMixkPW1bbF0sYj15LXZbdV0tbVtoXSx3PXkvMi12W3VdLzIrJCxPPWZlKGQsdyxiKSxqPWY7bi5tb2RpZmllcnNEYXRhW3JdPShlPXt9LGVbal09TyxlLmNlbnRlck9mZnNldD1PLXcsZSl9fWZ1bmN0aW9uIEN0KHQpe3ZhciBlPXQuc3RhdGUsbj10Lm9wdGlvbnMscj1uLmVsZW1lbnQsbz1yPT09dm9pZCAwP1wiW2RhdGEtcG9wcGVyLWFycm93XVwiOnI7byE9bnVsbCYmKHR5cGVvZiBvPT1cInN0cmluZ1wiJiYobz1lLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKG8pLCFvKXx8IWl0KGUuZWxlbWVudHMucG9wcGVyLG8pfHwoZS5lbGVtZW50cy5hcnJvdz1vKSl9dmFyIHB0PXtuYW1lOlwiYXJyb3dcIixlbmFibGVkOiEwLHBoYXNlOlwibWFpblwiLGZuOkh0LGVmZmVjdDpDdCxyZXF1aXJlczpbXCJwb3BwZXJPZmZzZXRzXCJdLHJlcXVpcmVzSWZFeGlzdHM6W1wicHJldmVudE92ZXJmbG93XCJdfTtmdW5jdGlvbiB0ZSh0KXtyZXR1cm4gdC5zcGxpdChcIi1cIilbMV19dmFyIHF0PXt0b3A6XCJhdXRvXCIscmlnaHQ6XCJhdXRvXCIsYm90dG9tOlwiYXV0b1wiLGxlZnQ6XCJhdXRvXCJ9O2Z1bmN0aW9uIFZ0KHQpe3ZhciBlPXQueCxuPXQueSxyPXdpbmRvdyxvPXIuZGV2aWNlUGl4ZWxSYXRpb3x8MTtyZXR1cm57eDpaKGUqbykvb3x8MCx5OloobipvKS9vfHwwfX1mdW5jdGlvbiB1dCh0KXt2YXIgZSxuPXQucG9wcGVyLHI9dC5wb3BwZXJSZWN0LG89dC5wbGFjZW1lbnQsaT10LnZhcmlhdGlvbixhPXQub2Zmc2V0cyxzPXQucG9zaXRpb24sZj10LmdwdUFjY2VsZXJhdGlvbixjPXQuYWRhcHRpdmUsdT10LnJvdW5kT2Zmc2V0cyxtPXQuaXNGaXhlZCx2PWEueCxsPXY9PT12b2lkIDA/MDp2LGg9YS55LHA9aD09PXZvaWQgMD8wOmgsZz10eXBlb2YgdT09XCJmdW5jdGlvblwiP3Uoe3g6bCx5OnB9KTp7eDpsLHk6cH07bD1nLngscD1nLnk7dmFyIHg9YS5oYXNPd25Qcm9wZXJ0eShcInhcIikseT1hLmhhc093blByb3BlcnR5KFwieVwiKSwkPVAsZD1FLGI9d2luZG93O2lmKGMpe3ZhciB3PXNlKG4pLE89XCJjbGllbnRIZWlnaHRcIixqPVwiY2xpZW50V2lkdGhcIjtpZih3PT09SChuKSYmKHc9SShuKSxOKHcpLnBvc2l0aW9uIT09XCJzdGF0aWNcIiYmcz09PVwiYWJzb2x1dGVcIiYmKE89XCJzY3JvbGxIZWlnaHRcIixqPVwic2Nyb2xsV2lkdGhcIikpLHc9dyxvPT09RXx8KG89PT1QfHxvPT09VykmJmk9PT1KKXtkPVI7dmFyIEE9bSYmdz09PWImJmIudmlzdWFsVmlld3BvcnQ/Yi52aXN1YWxWaWV3cG9ydC5oZWlnaHQ6d1tPXTtwLT1BLXIuaGVpZ2h0LHAqPWY/MTotMX1pZihvPT09UHx8KG89PT1FfHxvPT09UikmJmk9PT1KKXskPVc7dmFyIGs9bSYmdz09PWImJmIudmlzdWFsVmlld3BvcnQ/Yi52aXN1YWxWaWV3cG9ydC53aWR0aDp3W2pdO2wtPWstci53aWR0aCxsKj1mPzE6LTF9fXZhciBEPU9iamVjdC5hc3NpZ24oe3Bvc2l0aW9uOnN9LGMmJnF0KSxTPXU9PT0hMD9WdCh7eDpsLHk6cH0pOnt4OmwseTpwfTtpZihsPVMueCxwPVMueSxmKXt2YXIgTDtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxELChMPXt9LExbZF09eT9cIjBcIjpcIlwiLExbJF09eD9cIjBcIjpcIlwiLEwudHJhbnNmb3JtPShiLmRldmljZVBpeGVsUmF0aW98fDEpPD0xP1widHJhbnNsYXRlKFwiK2wrXCJweCwgXCIrcCtcInB4KVwiOlwidHJhbnNsYXRlM2QoXCIrbCtcInB4LCBcIitwK1wicHgsIDApXCIsTCkpfXJldHVybiBPYmplY3QuYXNzaWduKHt9LEQsKGU9e30sZVtkXT15P3ArXCJweFwiOlwiXCIsZVskXT14P2wrXCJweFwiOlwiXCIsZS50cmFuc2Zvcm09XCJcIixlKSl9ZnVuY3Rpb24gTnQodCl7dmFyIGU9dC5zdGF0ZSxuPXQub3B0aW9ucyxyPW4uZ3B1QWNjZWxlcmF0aW9uLG89cj09PXZvaWQgMD8hMDpyLGk9bi5hZGFwdGl2ZSxhPWk9PT12b2lkIDA/ITA6aSxzPW4ucm91bmRPZmZzZXRzLGY9cz09PXZvaWQgMD8hMDpzLGM9e3BsYWNlbWVudDpxKGUucGxhY2VtZW50KSx2YXJpYXRpb246dGUoZS5wbGFjZW1lbnQpLHBvcHBlcjplLmVsZW1lbnRzLnBvcHBlcixwb3BwZXJSZWN0OmUucmVjdHMucG9wcGVyLGdwdUFjY2VsZXJhdGlvbjpvLGlzRml4ZWQ6ZS5vcHRpb25zLnN0cmF0ZWd5PT09XCJmaXhlZFwifTtlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyE9bnVsbCYmKGUuc3R5bGVzLnBvcHBlcj1PYmplY3QuYXNzaWduKHt9LGUuc3R5bGVzLnBvcHBlcix1dChPYmplY3QuYXNzaWduKHt9LGMse29mZnNldHM6ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMscG9zaXRpb246ZS5vcHRpb25zLnN0cmF0ZWd5LGFkYXB0aXZlOmEscm91bmRPZmZzZXRzOmZ9KSkpKSxlLm1vZGlmaWVyc0RhdGEuYXJyb3chPW51bGwmJihlLnN0eWxlcy5hcnJvdz1PYmplY3QuYXNzaWduKHt9LGUuc3R5bGVzLmFycm93LHV0KE9iamVjdC5hc3NpZ24oe30sYyx7b2Zmc2V0czplLm1vZGlmaWVyc0RhdGEuYXJyb3cscG9zaXRpb246XCJhYnNvbHV0ZVwiLGFkYXB0aXZlOiExLHJvdW5kT2Zmc2V0czpmfSkpKSksZS5hdHRyaWJ1dGVzLnBvcHBlcj1PYmplY3QuYXNzaWduKHt9LGUuYXR0cmlidXRlcy5wb3BwZXIse1wiZGF0YS1wb3BwZXItcGxhY2VtZW50XCI6ZS5wbGFjZW1lbnR9KX12YXIgTWU9e25hbWU6XCJjb21wdXRlU3R5bGVzXCIsZW5hYmxlZDohMCxwaGFzZTpcImJlZm9yZVdyaXRlXCIsZm46TnQsZGF0YTp7fX0seWU9e3Bhc3NpdmU6ITB9O2Z1bmN0aW9uIEl0KHQpe3ZhciBlPXQuc3RhdGUsbj10Lmluc3RhbmNlLHI9dC5vcHRpb25zLG89ci5zY3JvbGwsaT1vPT09dm9pZCAwPyEwOm8sYT1yLnJlc2l6ZSxzPWE9PT12b2lkIDA/ITA6YSxmPUgoZS5lbGVtZW50cy5wb3BwZXIpLGM9W10uY29uY2F0KGUuc2Nyb2xsUGFyZW50cy5yZWZlcmVuY2UsZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7cmV0dXJuIGkmJmMuZm9yRWFjaChmdW5jdGlvbih1KXt1LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixuLnVwZGF0ZSx5ZSl9KSxzJiZmLmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixuLnVwZGF0ZSx5ZSksZnVuY3Rpb24oKXtpJiZjLmZvckVhY2goZnVuY3Rpb24odSl7dS5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsbi51cGRhdGUseWUpfSkscyYmZi5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsbi51cGRhdGUseWUpfX12YXIgUmU9e25hbWU6XCJldmVudExpc3RlbmVyc1wiLGVuYWJsZWQ6ITAscGhhc2U6XCJ3cml0ZVwiLGZuOmZ1bmN0aW9uKCl7fSxlZmZlY3Q6SXQsZGF0YTp7fX0sX3Q9e2xlZnQ6XCJyaWdodFwiLHJpZ2h0OlwibGVmdFwiLGJvdHRvbTpcInRvcFwiLHRvcDpcImJvdHRvbVwifTtmdW5jdGlvbiBiZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZyxmdW5jdGlvbihlKXtyZXR1cm4gX3RbZV19KX12YXIgenQ9e3N0YXJ0OlwiZW5kXCIsZW5kOlwic3RhcnRcIn07ZnVuY3Rpb24gbHQodCl7cmV0dXJuIHQucmVwbGFjZSgvc3RhcnR8ZW5kL2csZnVuY3Rpb24oZSl7cmV0dXJuIHp0W2VdfSl9ZnVuY3Rpb24gV2UodCl7dmFyIGU9SCh0KSxuPWUucGFnZVhPZmZzZXQscj1lLnBhZ2VZT2Zmc2V0O3JldHVybntzY3JvbGxMZWZ0Om4sc2Nyb2xsVG9wOnJ9fWZ1bmN0aW9uIEJlKHQpe3JldHVybiBlZShJKHQpKS5sZWZ0K1dlKHQpLnNjcm9sbExlZnR9ZnVuY3Rpb24gRnQodCl7dmFyIGU9SCh0KSxuPUkodCkscj1lLnZpc3VhbFZpZXdwb3J0LG89bi5jbGllbnRXaWR0aCxpPW4uY2xpZW50SGVpZ2h0LGE9MCxzPTA7cmV0dXJuIHImJihvPXIud2lkdGgsaT1yLmhlaWdodCwvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfHwoYT1yLm9mZnNldExlZnQscz1yLm9mZnNldFRvcCkpLHt3aWR0aDpvLGhlaWdodDppLHg6YStCZSh0KSx5OnN9fWZ1bmN0aW9uIFV0KHQpe3ZhciBlLG49SSh0KSxyPVdlKHQpLG89KGU9dC5vd25lckRvY3VtZW50KT09bnVsbD92b2lkIDA6ZS5ib2R5LGk9WChuLnNjcm9sbFdpZHRoLG4uY2xpZW50V2lkdGgsbz9vLnNjcm9sbFdpZHRoOjAsbz9vLmNsaWVudFdpZHRoOjApLGE9WChuLnNjcm9sbEhlaWdodCxuLmNsaWVudEhlaWdodCxvP28uc2Nyb2xsSGVpZ2h0OjAsbz9vLmNsaWVudEhlaWdodDowKSxzPS1yLnNjcm9sbExlZnQrQmUodCksZj0tci5zY3JvbGxUb3A7cmV0dXJuIE4ob3x8bikuZGlyZWN0aW9uPT09XCJydGxcIiYmKHMrPVgobi5jbGllbnRXaWR0aCxvP28uY2xpZW50V2lkdGg6MCktaSkse3dpZHRoOmksaGVpZ2h0OmEseDpzLHk6Zn19ZnVuY3Rpb24gU2UodCl7dmFyIGU9Tih0KSxuPWUub3ZlcmZsb3cscj1lLm92ZXJmbG93WCxvPWUub3ZlcmZsb3dZO3JldHVybi9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChuK28rcil9ZnVuY3Rpb24gZHQodCl7cmV0dXJuW1wiaHRtbFwiLFwiYm9keVwiLFwiI2RvY3VtZW50XCJdLmluZGV4T2YoQyh0KSk+PTA/dC5vd25lckRvY3VtZW50LmJvZHk6Qih0KSYmU2UodCk/dDpkdChnZSh0KSl9ZnVuY3Rpb24gY2UodCxlKXt2YXIgbjtlPT09dm9pZCAwJiYoZT1bXSk7dmFyIHI9ZHQodCksbz1yPT09KChuPXQub3duZXJEb2N1bWVudCk9PW51bGw/dm9pZCAwOm4uYm9keSksaT1IKHIpLGE9bz9baV0uY29uY2F0KGkudmlzdWFsVmlld3BvcnR8fFtdLFNlKHIpP3I6W10pOnIscz1lLmNvbmNhdChhKTtyZXR1cm4gbz9zOnMuY29uY2F0KGNlKGdlKGEpKSl9ZnVuY3Rpb24gVGUodCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdCx7bGVmdDp0LngsdG9wOnQueSxyaWdodDp0LngrdC53aWR0aCxib3R0b206dC55K3QuaGVpZ2h0fSl9ZnVuY3Rpb24gWHQodCl7dmFyIGU9ZWUodCk7cmV0dXJuIGUudG9wPWUudG9wK3QuY2xpZW50VG9wLGUubGVmdD1lLmxlZnQrdC5jbGllbnRMZWZ0LGUuYm90dG9tPWUudG9wK3QuY2xpZW50SGVpZ2h0LGUucmlnaHQ9ZS5sZWZ0K3QuY2xpZW50V2lkdGgsZS53aWR0aD10LmNsaWVudFdpZHRoLGUuaGVpZ2h0PXQuY2xpZW50SGVpZ2h0LGUueD1lLmxlZnQsZS55PWUudG9wLGV9ZnVuY3Rpb24gaHQodCxlKXtyZXR1cm4gZT09PWplP1RlKEZ0KHQpKTpRKGUpP1h0KGUpOlRlKFV0KEkodCkpKX1mdW5jdGlvbiBZdCh0KXt2YXIgZT1jZShnZSh0KSksbj1bXCJhYnNvbHV0ZVwiLFwiZml4ZWRcIl0uaW5kZXhPZihOKHQpLnBvc2l0aW9uKT49MCxyPW4mJkIodCk/c2UodCk6dDtyZXR1cm4gUShyKT9lLmZpbHRlcihmdW5jdGlvbihvKXtyZXR1cm4gUShvKSYmaXQobyxyKSYmQyhvKSE9PVwiYm9keVwifSk6W119ZnVuY3Rpb24gR3QodCxlLG4pe3ZhciByPWU9PT1cImNsaXBwaW5nUGFyZW50c1wiP1l0KHQpOltdLmNvbmNhdChlKSxvPVtdLmNvbmNhdChyLFtuXSksaT1vWzBdLGE9by5yZWR1Y2UoZnVuY3Rpb24ocyxmKXt2YXIgYz1odCh0LGYpO3JldHVybiBzLnRvcD1YKGMudG9wLHMudG9wKSxzLnJpZ2h0PXZlKGMucmlnaHQscy5yaWdodCkscy5ib3R0b209dmUoYy5ib3R0b20scy5ib3R0b20pLHMubGVmdD1YKGMubGVmdCxzLmxlZnQpLHN9LGh0KHQsaSkpO3JldHVybiBhLndpZHRoPWEucmlnaHQtYS5sZWZ0LGEuaGVpZ2h0PWEuYm90dG9tLWEudG9wLGEueD1hLmxlZnQsYS55PWEudG9wLGF9ZnVuY3Rpb24gbXQodCl7dmFyIGU9dC5yZWZlcmVuY2Usbj10LmVsZW1lbnQscj10LnBsYWNlbWVudCxvPXI/cShyKTpudWxsLGk9cj90ZShyKTpudWxsLGE9ZS54K2Uud2lkdGgvMi1uLndpZHRoLzIscz1lLnkrZS5oZWlnaHQvMi1uLmhlaWdodC8yLGY7c3dpdGNoKG8pe2Nhc2UgRTpmPXt4OmEseTplLnktbi5oZWlnaHR9O2JyZWFrO2Nhc2UgUjpmPXt4OmEseTplLnkrZS5oZWlnaHR9O2JyZWFrO2Nhc2UgVzpmPXt4OmUueCtlLndpZHRoLHk6c307YnJlYWs7Y2FzZSBQOmY9e3g6ZS54LW4ud2lkdGgseTpzfTticmVhaztkZWZhdWx0OmY9e3g6ZS54LHk6ZS55fX12YXIgYz1vP0xlKG8pOm51bGw7aWYoYyE9bnVsbCl7dmFyIHU9Yz09PVwieVwiP1wiaGVpZ2h0XCI6XCJ3aWR0aFwiO3N3aXRjaChpKXtjYXNlIFU6ZltjXT1mW2NdLShlW3VdLzItblt1XS8yKTticmVhaztjYXNlIEo6ZltjXT1mW2NdKyhlW3VdLzItblt1XS8yKTticmVha319cmV0dXJuIGZ9ZnVuY3Rpb24gbmUodCxlKXtlPT09dm9pZCAwJiYoZT17fSk7dmFyIG49ZSxyPW4ucGxhY2VtZW50LG89cj09PXZvaWQgMD90LnBsYWNlbWVudDpyLGk9bi5ib3VuZGFyeSxhPWk9PT12b2lkIDA/WGU6aSxzPW4ucm9vdEJvdW5kYXJ5LGY9cz09PXZvaWQgMD9qZTpzLGM9bi5lbGVtZW50Q29udGV4dCx1PWM9PT12b2lkIDA/SzpjLG09bi5hbHRCb3VuZGFyeSx2PW09PT12b2lkIDA/ITE6bSxsPW4ucGFkZGluZyxoPWw9PT12b2lkIDA/MDpsLHA9ZnQodHlwZW9mIGghPVwibnVtYmVyXCI/aDpjdChoLEcpKSxnPXU9PT1LP1llOksseD10LnJlY3RzLnBvcHBlcix5PXQuZWxlbWVudHNbdj9nOnVdLCQ9R3QoUSh5KT95OnkuY29udGV4dEVsZW1lbnR8fEkodC5lbGVtZW50cy5wb3BwZXIpLGEsZiksZD1lZSh0LmVsZW1lbnRzLnJlZmVyZW5jZSksYj1tdCh7cmVmZXJlbmNlOmQsZWxlbWVudDp4LHN0cmF0ZWd5OlwiYWJzb2x1dGVcIixwbGFjZW1lbnQ6b30pLHc9VGUoT2JqZWN0LmFzc2lnbih7fSx4LGIpKSxPPXU9PT1LP3c6ZCxqPXt0b3A6JC50b3AtTy50b3ArcC50b3AsYm90dG9tOk8uYm90dG9tLSQuYm90dG9tK3AuYm90dG9tLGxlZnQ6JC5sZWZ0LU8ubGVmdCtwLmxlZnQscmlnaHQ6Ty5yaWdodC0kLnJpZ2h0K3AucmlnaHR9LEE9dC5tb2RpZmllcnNEYXRhLm9mZnNldDtpZih1PT09SyYmQSl7dmFyIGs9QVtvXTtPYmplY3Qua2V5cyhqKS5mb3JFYWNoKGZ1bmN0aW9uKEQpe3ZhciBTPVtXLFJdLmluZGV4T2YoRCk+PTA/MTotMSxMPVtFLFJdLmluZGV4T2YoRCk+PTA/XCJ5XCI6XCJ4XCI7altEXSs9a1tMXSpTfSl9cmV0dXJuIGp9ZnVuY3Rpb24gSnQodCxlKXtlPT09dm9pZCAwJiYoZT17fSk7dmFyIG49ZSxyPW4ucGxhY2VtZW50LG89bi5ib3VuZGFyeSxpPW4ucm9vdEJvdW5kYXJ5LGE9bi5wYWRkaW5nLHM9bi5mbGlwVmFyaWF0aW9ucyxmPW4uYWxsb3dlZEF1dG9QbGFjZW1lbnRzLGM9Zj09PXZvaWQgMD9FZTpmLHU9dGUociksbT11P3M/RGU6RGUuZmlsdGVyKGZ1bmN0aW9uKGgpe3JldHVybiB0ZShoKT09PXV9KTpHLHY9bS5maWx0ZXIoZnVuY3Rpb24oaCl7cmV0dXJuIGMuaW5kZXhPZihoKT49MH0pO3YubGVuZ3RoPT09MCYmKHY9bSk7dmFyIGw9di5yZWR1Y2UoZnVuY3Rpb24oaCxwKXtyZXR1cm4gaFtwXT1uZSh0LHtwbGFjZW1lbnQ6cCxib3VuZGFyeTpvLHJvb3RCb3VuZGFyeTppLHBhZGRpbmc6YX0pW3EocCldLGh9LHt9KTtyZXR1cm4gT2JqZWN0LmtleXMobCkuc29ydChmdW5jdGlvbihoLHApe3JldHVybiBsW2hdLWxbcF19KX1mdW5jdGlvbiBLdCh0KXtpZihxKHQpPT09bWUpcmV0dXJuW107dmFyIGU9YmUodCk7cmV0dXJuW2x0KHQpLGUsbHQoZSldfWZ1bmN0aW9uIFF0KHQpe3ZhciBlPXQuc3RhdGUsbj10Lm9wdGlvbnMscj10Lm5hbWU7aWYoIWUubW9kaWZpZXJzRGF0YVtyXS5fc2tpcCl7Zm9yKHZhciBvPW4ubWFpbkF4aXMsaT1vPT09dm9pZCAwPyEwOm8sYT1uLmFsdEF4aXMscz1hPT09dm9pZCAwPyEwOmEsZj1uLmZhbGxiYWNrUGxhY2VtZW50cyxjPW4ucGFkZGluZyx1PW4uYm91bmRhcnksbT1uLnJvb3RCb3VuZGFyeSx2PW4uYWx0Qm91bmRhcnksbD1uLmZsaXBWYXJpYXRpb25zLGg9bD09PXZvaWQgMD8hMDpsLHA9bi5hbGxvd2VkQXV0b1BsYWNlbWVudHMsZz1lLm9wdGlvbnMucGxhY2VtZW50LHg9cShnKSx5PXg9PT1nLCQ9Znx8KHl8fCFoP1tiZShnKV06S3QoZykpLGQ9W2ddLmNvbmNhdCgkKS5yZWR1Y2UoZnVuY3Rpb24oeixWKXtyZXR1cm4gei5jb25jYXQocShWKT09PW1lP0p0KGUse3BsYWNlbWVudDpWLGJvdW5kYXJ5OnUscm9vdEJvdW5kYXJ5Om0scGFkZGluZzpjLGZsaXBWYXJpYXRpb25zOmgsYWxsb3dlZEF1dG9QbGFjZW1lbnRzOnB9KTpWKX0sW10pLGI9ZS5yZWN0cy5yZWZlcmVuY2Usdz1lLnJlY3RzLnBvcHBlcixPPW5ldyBNYXAsaj0hMCxBPWRbMF0saz0wO2s8ZC5sZW5ndGg7aysrKXt2YXIgRD1kW2tdLFM9cShEKSxMPXRlKEQpPT09VSxyZT1bRSxSXS5pbmRleE9mKFMpPj0wLG9lPXJlP1wid2lkdGhcIjpcImhlaWdodFwiLE09bmUoZSx7cGxhY2VtZW50OkQsYm91bmRhcnk6dSxyb290Qm91bmRhcnk6bSxhbHRCb3VuZGFyeTp2LHBhZGRpbmc6Y30pLFQ9cmU/TD9XOlA6TD9SOkU7YltvZV0+d1tvZV0mJihUPWJlKFQpKTt2YXIgcGU9YmUoVCksXz1bXTtpZihpJiZfLnB1c2goTVtTXTw9MCkscyYmXy5wdXNoKE1bVF08PTAsTVtwZV08PTApLF8uZXZlcnkoZnVuY3Rpb24oeil7cmV0dXJuIHp9KSl7QT1ELGo9ITE7YnJlYWt9Ty5zZXQoRCxfKX1pZihqKWZvcih2YXIgdWU9aD8zOjEseGU9ZnVuY3Rpb24oeil7dmFyIFY9ZC5maW5kKGZ1bmN0aW9uKGRlKXt2YXIgYWU9Ty5nZXQoZGUpO2lmKGFlKXJldHVybiBhZS5zbGljZSgwLHopLmV2ZXJ5KGZ1bmN0aW9uKFkpe3JldHVybiBZfSl9KTtpZihWKXJldHVybiBBPVYsXCJicmVha1wifSxpZT11ZTtpZT4wO2llLS0pe3ZhciBsZT14ZShpZSk7aWYobGU9PT1cImJyZWFrXCIpYnJlYWt9ZS5wbGFjZW1lbnQhPT1BJiYoZS5tb2RpZmllcnNEYXRhW3JdLl9za2lwPSEwLGUucGxhY2VtZW50PUEsZS5yZXNldD0hMCl9fXZhciB2dD17bmFtZTpcImZsaXBcIixlbmFibGVkOiEwLHBoYXNlOlwibWFpblwiLGZuOlF0LHJlcXVpcmVzSWZFeGlzdHM6W1wib2Zmc2V0XCJdLGRhdGE6e19za2lwOiExfX07ZnVuY3Rpb24gZ3QodCxlLG4pe3JldHVybiBuPT09dm9pZCAwJiYobj17eDowLHk6MH0pLHt0b3A6dC50b3AtZS5oZWlnaHQtbi55LHJpZ2h0OnQucmlnaHQtZS53aWR0aCtuLngsYm90dG9tOnQuYm90dG9tLWUuaGVpZ2h0K24ueSxsZWZ0OnQubGVmdC1lLndpZHRoLW4ueH19ZnVuY3Rpb24geXQodCl7cmV0dXJuW0UsVyxSLFBdLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV0+PTB9KX1mdW5jdGlvbiBadCh0KXt2YXIgZT10LnN0YXRlLG49dC5uYW1lLHI9ZS5yZWN0cy5yZWZlcmVuY2Usbz1lLnJlY3RzLnBvcHBlcixpPWUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3csYT1uZShlLHtlbGVtZW50Q29udGV4dDpcInJlZmVyZW5jZVwifSkscz1uZShlLHthbHRCb3VuZGFyeTohMH0pLGY9Z3QoYSxyKSxjPWd0KHMsbyxpKSx1PXl0KGYpLG09eXQoYyk7ZS5tb2RpZmllcnNEYXRhW25dPXtyZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6Zixwb3BwZXJFc2NhcGVPZmZzZXRzOmMsaXNSZWZlcmVuY2VIaWRkZW46dSxoYXNQb3BwZXJFc2NhcGVkOm19LGUuYXR0cmlidXRlcy5wb3BwZXI9T2JqZWN0LmFzc2lnbih7fSxlLmF0dHJpYnV0ZXMucG9wcGVyLHtcImRhdGEtcG9wcGVyLXJlZmVyZW5jZS1oaWRkZW5cIjp1LFwiZGF0YS1wb3BwZXItZXNjYXBlZFwiOm19KX12YXIgYnQ9e25hbWU6XCJoaWRlXCIsZW5hYmxlZDohMCxwaGFzZTpcIm1haW5cIixyZXF1aXJlc0lmRXhpc3RzOltcInByZXZlbnRPdmVyZmxvd1wiXSxmbjpadH07ZnVuY3Rpb24gZW4odCxlLG4pe3ZhciByPXEodCksbz1bUCxFXS5pbmRleE9mKHIpPj0wPy0xOjEsaT10eXBlb2Ygbj09XCJmdW5jdGlvblwiP24oT2JqZWN0LmFzc2lnbih7fSxlLHtwbGFjZW1lbnQ6dH0pKTpuLGE9aVswXSxzPWlbMV07cmV0dXJuIGE9YXx8MCxzPShzfHwwKSpvLFtQLFddLmluZGV4T2Yocik+PTA/e3g6cyx5OmF9Ont4OmEseTpzfX1mdW5jdGlvbiB0bih0KXt2YXIgZT10LnN0YXRlLG49dC5vcHRpb25zLHI9dC5uYW1lLG89bi5vZmZzZXQsaT1vPT09dm9pZCAwP1swLDBdOm8sYT1FZS5yZWR1Y2UoZnVuY3Rpb24odSxtKXtyZXR1cm4gdVttXT1lbihtLGUucmVjdHMsaSksdX0se30pLHM9YVtlLnBsYWNlbWVudF0sZj1zLngsYz1zLnk7ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMhPW51bGwmJihlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54Kz1mLGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkrPWMpLGUubW9kaWZpZXJzRGF0YVtyXT1hfXZhciB3dD17bmFtZTpcIm9mZnNldFwiLGVuYWJsZWQ6ITAscGhhc2U6XCJtYWluXCIscmVxdWlyZXM6W1wicG9wcGVyT2Zmc2V0c1wiXSxmbjp0bn07ZnVuY3Rpb24gbm4odCl7dmFyIGU9dC5zdGF0ZSxuPXQubmFtZTtlLm1vZGlmaWVyc0RhdGFbbl09bXQoe3JlZmVyZW5jZTplLnJlY3RzLnJlZmVyZW5jZSxlbGVtZW50OmUucmVjdHMucG9wcGVyLHN0cmF0ZWd5OlwiYWJzb2x1dGVcIixwbGFjZW1lbnQ6ZS5wbGFjZW1lbnR9KX12YXIgSGU9e25hbWU6XCJwb3BwZXJPZmZzZXRzXCIsZW5hYmxlZDohMCxwaGFzZTpcInJlYWRcIixmbjpubixkYXRhOnt9fTtmdW5jdGlvbiBybih0KXtyZXR1cm4gdD09PVwieFwiP1wieVwiOlwieFwifWZ1bmN0aW9uIG9uKHQpe3ZhciBlPXQuc3RhdGUsbj10Lm9wdGlvbnMscj10Lm5hbWUsbz1uLm1haW5BeGlzLGk9bz09PXZvaWQgMD8hMDpvLGE9bi5hbHRBeGlzLHM9YT09PXZvaWQgMD8hMTphLGY9bi5ib3VuZGFyeSxjPW4ucm9vdEJvdW5kYXJ5LHU9bi5hbHRCb3VuZGFyeSxtPW4ucGFkZGluZyx2PW4udGV0aGVyLGw9dj09PXZvaWQgMD8hMDp2LGg9bi50ZXRoZXJPZmZzZXQscD1oPT09dm9pZCAwPzA6aCxnPW5lKGUse2JvdW5kYXJ5OmYscm9vdEJvdW5kYXJ5OmMscGFkZGluZzptLGFsdEJvdW5kYXJ5OnV9KSx4PXEoZS5wbGFjZW1lbnQpLHk9dGUoZS5wbGFjZW1lbnQpLCQ9IXksZD1MZSh4KSxiPXJuKGQpLHc9ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMsTz1lLnJlY3RzLnJlZmVyZW5jZSxqPWUucmVjdHMucG9wcGVyLEE9dHlwZW9mIHA9PVwiZnVuY3Rpb25cIj9wKE9iamVjdC5hc3NpZ24oe30sZS5yZWN0cyx7cGxhY2VtZW50OmUucGxhY2VtZW50fSkpOnAsaz10eXBlb2YgQT09XCJudW1iZXJcIj97bWFpbkF4aXM6QSxhbHRBeGlzOkF9Ok9iamVjdC5hc3NpZ24oe21haW5BeGlzOjAsYWx0QXhpczowfSxBKSxEPWUubW9kaWZpZXJzRGF0YS5vZmZzZXQ/ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtlLnBsYWNlbWVudF06bnVsbCxTPXt4OjAseTowfTtpZih3KXtpZihpKXt2YXIgTCxyZT1kPT09XCJ5XCI/RTpQLG9lPWQ9PT1cInlcIj9SOlcsTT1kPT09XCJ5XCI/XCJoZWlnaHRcIjpcIndpZHRoXCIsVD13W2RdLHBlPVQrZ1tyZV0sXz1ULWdbb2VdLHVlPWw/LWpbTV0vMjowLHhlPXk9PT1VP09bTV06altNXSxpZT15PT09VT8taltNXTotT1tNXSxsZT1lLmVsZW1lbnRzLmFycm93LHo9bCYmbGU/a2UobGUpOnt3aWR0aDowLGhlaWdodDowfSxWPWUubW9kaWZpZXJzRGF0YVtcImFycm93I3BlcnNpc3RlbnRcIl0/ZS5tb2RpZmllcnNEYXRhW1wiYXJyb3cjcGVyc2lzdGVudFwiXS5wYWRkaW5nOnN0KCksZGU9VltyZV0sYWU9VltvZV0sWT1mZSgwLE9bTV0seltNXSksanQ9JD9PW01dLzItdWUtWS1kZS1rLm1haW5BeGlzOnhlLVktZGUtay5tYWluQXhpcyxEdD0kPy1PW01dLzIrdWUrWSthZStrLm1haW5BeGlzOmllK1krYWUray5tYWluQXhpcyxPZT1lLmVsZW1lbnRzLmFycm93JiZzZShlLmVsZW1lbnRzLmFycm93KSxFdD1PZT9kPT09XCJ5XCI/T2UuY2xpZW50VG9wfHwwOk9lLmNsaWVudExlZnR8fDA6MCxDZT0oTD1EPT1udWxsP3ZvaWQgMDpEW2RdKSE9bnVsbD9MOjAsUHQ9VCtqdC1DZS1FdCxBdD1UK0R0LUNlLHFlPWZlKGw/dmUocGUsUHQpOnBlLFQsbD9YKF8sQXQpOl8pO3dbZF09cWUsU1tkXT1xZS1UfWlmKHMpe3ZhciBWZSxrdD1kPT09XCJ4XCI/RTpQLEx0PWQ9PT1cInhcIj9SOlcsRj13W2JdLGhlPWI9PT1cInlcIj9cImhlaWdodFwiOlwid2lkdGhcIixOZT1GK2dba3RdLEllPUYtZ1tMdF0sJGU9W0UsUF0uaW5kZXhPZih4KSE9PS0xLF9lPShWZT1EPT1udWxsP3ZvaWQgMDpEW2JdKSE9bnVsbD9WZTowLHplPSRlP05lOkYtT1toZV0taltoZV0tX2Uray5hbHRBeGlzLEZlPSRlP0YrT1toZV0raltoZV0tX2Utay5hbHRBeGlzOkllLFVlPWwmJiRlP1N0KHplLEYsRmUpOmZlKGw/emU6TmUsRixsP0ZlOkllKTt3W2JdPVVlLFNbYl09VWUtRn1lLm1vZGlmaWVyc0RhdGFbcl09U319dmFyIHh0PXtuYW1lOlwicHJldmVudE92ZXJmbG93XCIsZW5hYmxlZDohMCxwaGFzZTpcIm1haW5cIixmbjpvbixyZXF1aXJlc0lmRXhpc3RzOltcIm9mZnNldFwiXX07ZnVuY3Rpb24gYW4odCl7cmV0dXJue3Njcm9sbExlZnQ6dC5zY3JvbGxMZWZ0LHNjcm9sbFRvcDp0LnNjcm9sbFRvcH19ZnVuY3Rpb24gc24odCl7cmV0dXJuIHQ9PT1IKHQpfHwhQih0KT9XZSh0KTphbih0KX1mdW5jdGlvbiBmbih0KXt2YXIgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49WihlLndpZHRoKS90Lm9mZnNldFdpZHRofHwxLHI9WihlLmhlaWdodCkvdC5vZmZzZXRIZWlnaHR8fDE7cmV0dXJuIG4hPT0xfHxyIT09MX1mdW5jdGlvbiBjbih0LGUsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciByPUIoZSksbz1CKGUpJiZmbihlKSxpPUkoZSksYT1lZSh0LG8pLHM9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH0sZj17eDowLHk6MH07cmV0dXJuKHJ8fCFyJiYhbikmJigoQyhlKSE9PVwiYm9keVwifHxTZShpKSkmJihzPXNuKGUpKSxCKGUpPyhmPWVlKGUsITApLGYueCs9ZS5jbGllbnRMZWZ0LGYueSs9ZS5jbGllbnRUb3ApOmkmJihmLng9QmUoaSkpKSx7eDphLmxlZnQrcy5zY3JvbGxMZWZ0LWYueCx5OmEudG9wK3Muc2Nyb2xsVG9wLWYueSx3aWR0aDphLndpZHRoLGhlaWdodDphLmhlaWdodH19ZnVuY3Rpb24gcG4odCl7dmFyIGU9bmV3IE1hcCxuPW5ldyBTZXQscj1bXTt0LmZvckVhY2goZnVuY3Rpb24oaSl7ZS5zZXQoaS5uYW1lLGkpfSk7ZnVuY3Rpb24gbyhpKXtuLmFkZChpLm5hbWUpO3ZhciBhPVtdLmNvbmNhdChpLnJlcXVpcmVzfHxbXSxpLnJlcXVpcmVzSWZFeGlzdHN8fFtdKTthLmZvckVhY2goZnVuY3Rpb24ocyl7aWYoIW4uaGFzKHMpKXt2YXIgZj1lLmdldChzKTtmJiZvKGYpfX0pLHIucHVzaChpKX1yZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGkpe24uaGFzKGkubmFtZSl8fG8oaSl9KSxyfWZ1bmN0aW9uIHVuKHQpe3ZhciBlPXBuKHQpO3JldHVybiBvdC5yZWR1Y2UoZnVuY3Rpb24obixyKXtyZXR1cm4gbi5jb25jYXQoZS5maWx0ZXIoZnVuY3Rpb24obyl7cmV0dXJuIG8ucGhhc2U9PT1yfSkpfSxbXSl9ZnVuY3Rpb24gbG4odCl7dmFyIGU7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV8fChlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG4pe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtlPXZvaWQgMCxuKHQoKSl9KX0pKSxlfX1mdW5jdGlvbiBkbih0KXt2YXIgZT10LnJlZHVjZShmdW5jdGlvbihuLHIpe3ZhciBvPW5bci5uYW1lXTtyZXR1cm4gbltyLm5hbWVdPW8/T2JqZWN0LmFzc2lnbih7fSxvLHIse29wdGlvbnM6T2JqZWN0LmFzc2lnbih7fSxvLm9wdGlvbnMsci5vcHRpb25zKSxkYXRhOk9iamVjdC5hc3NpZ24oe30sby5kYXRhLHIuZGF0YSl9KTpyLG59LHt9KTtyZXR1cm4gT2JqZWN0LmtleXMoZSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBlW25dfSl9dmFyIE90PXtwbGFjZW1lbnQ6XCJib3R0b21cIixtb2RpZmllcnM6W10sc3RyYXRlZ3k6XCJhYnNvbHV0ZVwifTtmdW5jdGlvbiAkdCgpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KHQpLG49MDtuPHQ7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiFlLnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuIShyJiZ0eXBlb2Ygci5nZXRCb3VuZGluZ0NsaWVudFJlY3Q9PVwiZnVuY3Rpb25cIil9KX1mdW5jdGlvbiB3ZSh0KXt0PT09dm9pZCAwJiYodD17fSk7dmFyIGU9dCxuPWUuZGVmYXVsdE1vZGlmaWVycyxyPW49PT12b2lkIDA/W106bixvPWUuZGVmYXVsdE9wdGlvbnMsaT1vPT09dm9pZCAwP090Om87cmV0dXJuIGZ1bmN0aW9uKGEscyxmKXtmPT09dm9pZCAwJiYoZj1pKTt2YXIgYz17cGxhY2VtZW50OlwiYm90dG9tXCIsb3JkZXJlZE1vZGlmaWVyczpbXSxvcHRpb25zOk9iamVjdC5hc3NpZ24oe30sT3QsaSksbW9kaWZpZXJzRGF0YTp7fSxlbGVtZW50czp7cmVmZXJlbmNlOmEscG9wcGVyOnN9LGF0dHJpYnV0ZXM6e30sc3R5bGVzOnt9fSx1PVtdLG09ITEsdj17c3RhdGU6YyxzZXRPcHRpb25zOmZ1bmN0aW9uKHApe3ZhciBnPXR5cGVvZiBwPT1cImZ1bmN0aW9uXCI/cChjLm9wdGlvbnMpOnA7aCgpLGMub3B0aW9ucz1PYmplY3QuYXNzaWduKHt9LGksYy5vcHRpb25zLGcpLGMuc2Nyb2xsUGFyZW50cz17cmVmZXJlbmNlOlEoYSk/Y2UoYSk6YS5jb250ZXh0RWxlbWVudD9jZShhLmNvbnRleHRFbGVtZW50KTpbXSxwb3BwZXI6Y2Uocyl9O3ZhciB4PXVuKGRuKFtdLmNvbmNhdChyLGMub3B0aW9ucy5tb2RpZmllcnMpKSk7cmV0dXJuIGMub3JkZXJlZE1vZGlmaWVycz14LmZpbHRlcihmdW5jdGlvbih5KXtyZXR1cm4geS5lbmFibGVkfSksbCgpLHYudXBkYXRlKCl9LGZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7aWYoIW0pe3ZhciBwPWMuZWxlbWVudHMsZz1wLnJlZmVyZW5jZSx4PXAucG9wcGVyO2lmKCR0KGcseCkpe2MucmVjdHM9e3JlZmVyZW5jZTpjbihnLHNlKHgpLGMub3B0aW9ucy5zdHJhdGVneT09PVwiZml4ZWRcIikscG9wcGVyOmtlKHgpfSxjLnJlc2V0PSExLGMucGxhY2VtZW50PWMub3B0aW9ucy5wbGFjZW1lbnQsYy5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24oail7cmV0dXJuIGMubW9kaWZpZXJzRGF0YVtqLm5hbWVdPU9iamVjdC5hc3NpZ24oe30sai5kYXRhKX0pO2Zvcih2YXIgeT0wO3k8Yy5vcmRlcmVkTW9kaWZpZXJzLmxlbmd0aDt5Kyspe2lmKGMucmVzZXQ9PT0hMCl7Yy5yZXNldD0hMSx5PS0xO2NvbnRpbnVlfXZhciAkPWMub3JkZXJlZE1vZGlmaWVyc1t5XSxkPSQuZm4sYj0kLm9wdGlvbnMsdz1iPT09dm9pZCAwP3t9OmIsTz0kLm5hbWU7dHlwZW9mIGQ9PVwiZnVuY3Rpb25cIiYmKGM9ZCh7c3RhdGU6YyxvcHRpb25zOncsbmFtZTpPLGluc3RhbmNlOnZ9KXx8Yyl9fX19LHVwZGF0ZTpsbihmdW5jdGlvbigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihwKXt2LmZvcmNlVXBkYXRlKCkscChjKX0pfSksZGVzdHJveTpmdW5jdGlvbigpe2goKSxtPSEwfX07aWYoISR0KGEscykpcmV0dXJuIHY7di5zZXRPcHRpb25zKGYpLnRoZW4oZnVuY3Rpb24ocCl7IW0mJmYub25GaXJzdFVwZGF0ZSYmZi5vbkZpcnN0VXBkYXRlKHApfSk7ZnVuY3Rpb24gbCgpe2Mub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uKHApe3ZhciBnPXAubmFtZSx4PXAub3B0aW9ucyx5PXg9PT12b2lkIDA/e306eCwkPXAuZWZmZWN0O2lmKHR5cGVvZiAkPT1cImZ1bmN0aW9uXCIpe3ZhciBkPSQoe3N0YXRlOmMsbmFtZTpnLGluc3RhbmNlOnYsb3B0aW9uczp5fSksYj1mdW5jdGlvbigpe307dS5wdXNoKGR8fGIpfX0pfWZ1bmN0aW9uIGgoKXt1LmZvckVhY2goZnVuY3Rpb24ocCl7cmV0dXJuIHAoKX0pLHU9W119cmV0dXJuIHZ9fXZhciBobj13ZSgpLG1uPVtSZSxIZSxNZSxBZV0sdm49d2Uoe2RlZmF1bHRNb2RpZmllcnM6bW59KSxnbj1bUmUsSGUsTWUsQWUsd3QsdnQseHQscHQsYnRdLHluPXdlKHtkZWZhdWx0TW9kaWZpZXJzOmdufSk7ZXhwb3J0e2V0IGFzIGFmdGVyTWFpbixLZSBhcyBhZnRlclJlYWQscnQgYXMgYWZ0ZXJXcml0ZSxBZSBhcyBhcHBseVN0eWxlcyxwdCBhcyBhcnJvdyxtZSBhcyBhdXRvLEcgYXMgYmFzZVBsYWNlbWVudHMsUWUgYXMgYmVmb3JlTWFpbixHZSBhcyBiZWZvcmVSZWFkLHR0IGFzIGJlZm9yZVdyaXRlLFIgYXMgYm90dG9tLFhlIGFzIGNsaXBwaW5nUGFyZW50cyxNZSBhcyBjb21wdXRlU3R5bGVzLHluIGFzIGNyZWF0ZVBvcHBlcixobiBhcyBjcmVhdGVQb3BwZXJCYXNlLHZuIGFzIGNyZWF0ZVBvcHBlckxpdGUsbmUgYXMgZGV0ZWN0T3ZlcmZsb3csSiBhcyBlbmQsUmUgYXMgZXZlbnRMaXN0ZW5lcnMsdnQgYXMgZmxpcCxidCBhcyBoaWRlLFAgYXMgbGVmdCxaZSBhcyBtYWluLG90IGFzIG1vZGlmaWVyUGhhc2VzLHd0IGFzIG9mZnNldCxFZSBhcyBwbGFjZW1lbnRzLEsgYXMgcG9wcGVyLHdlIGFzIHBvcHBlckdlbmVyYXRvcixIZSBhcyBwb3BwZXJPZmZzZXRzLHh0IGFzIHByZXZlbnRPdmVyZmxvdyxKZSBhcyByZWFkLFllIGFzIHJlZmVyZW5jZSxXIGFzIHJpZ2h0LFUgYXMgc3RhcnQsRSBhcyB0b3AsRGUgYXMgdmFyaWF0aW9uUGxhY2VtZW50cyxqZSBhcyB2aWV3cG9ydCxudCBhcyB3cml0ZX07XG4iLCJpbXBvcnQgbm9ybWFsaXplV2hlZWwgZnJvbSAnbm9ybWFsaXplLXdoZWVsLWVzJztcblxuY29uc3QgbW91c2V3aGVlbCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNhbGxiYWNrKSB7XG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIGNvbnN0IGZuID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVXaGVlbChldmVudCk7XG4gICAgICBjYWxsYmFjayAmJiBSZWZsZWN0LmFwcGx5KGNhbGxiYWNrLCB0aGlzLCBbZXZlbnQsIG5vcm1hbGl6ZWRdKTtcbiAgICB9O1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIGZuLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIH1cbn07XG5jb25zdCBNb3VzZXdoZWVsID0ge1xuICBiZWZvcmVNb3VudChlbCwgYmluZGluZykge1xuICAgIG1vdXNld2hlZWwoZWwsIGJpbmRpbmcudmFsdWUpO1xuICB9XG59O1xuXG5leHBvcnQgeyBNb3VzZXdoZWVsIGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsImltcG9ydCAnLi4vLi4vLi4vLi4vdXRpbHMvaW5kZXgubWpzJztcbmltcG9ydCB7IGRpc2FibGVkVGltZUxpc3RzUHJvcHMgfSBmcm9tICcuL3NoYXJlZC5tanMnO1xuaW1wb3J0IHsgYnVpbGRQcm9wcywgZGVmaW5lUHJvcFR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy92dWUvcHJvcHMvcnVudGltZS5tanMnO1xuXG5jb25zdCBiYXNpY1RpbWVTcGlubmVyUHJvcHMgPSBidWlsZFByb3BzKHtcbiAgcm9sZToge1xuICAgIHR5cGU6IFN0cmluZyxcbiAgICByZXF1aXJlZDogdHJ1ZVxuICB9LFxuICBzcGlubmVyRGF0ZToge1xuICAgIHR5cGU6IGRlZmluZVByb3BUeXBlKE9iamVjdCksXG4gICAgcmVxdWlyZWQ6IHRydWVcbiAgfSxcbiAgc2hvd1NlY29uZHM6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IHRydWVcbiAgfSxcbiAgYXJyb3dDb250cm9sOiBCb29sZWFuLFxuICBhbVBtTW9kZToge1xuICAgIHR5cGU6IGRlZmluZVByb3BUeXBlKFN0cmluZyksXG4gICAgZGVmYXVsdDogXCJcIlxuICB9LFxuICAuLi5kaXNhYmxlZFRpbWVMaXN0c1Byb3BzXG59KTtcblxuZXhwb3J0IHsgYmFzaWNUaW1lU3Bpbm5lclByb3BzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYXNpYy10aW1lLXNwaW5uZXIubWpzLm1hcFxuIiwiaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50LCByZWYsIGNvbXB1dGVkLCB1bnJlZiwgbmV4dFRpY2ssIG9uTW91bnRlZCwgd2F0Y2gsIG9wZW5CbG9jaywgY3JlYXRlRWxlbWVudEJsb2NrLCBub3JtYWxpemVDbGFzcywgRnJhZ21lbnQsIHJlbmRlckxpc3QsIGNyZWF0ZUJsb2NrLCB3aXRoQ3R4LCBjcmVhdGVUZXh0Vk5vZGUsIHRvRGlzcGxheVN0cmluZywgY3JlYXRlQ29tbWVudFZOb2RlLCB3aXRoRGlyZWN0aXZlcywgY3JlYXRlVk5vZGUsIGNyZWF0ZUVsZW1lbnRWTm9kZSB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ2xvZGFzaC11bmlmaWVkJztcbmltcG9ydCAnLi4vLi4vLi4vLi4vZGlyZWN0aXZlcy9pbmRleC5tanMnO1xuaW1wb3J0IHsgRWxTY3JvbGxiYXIgfSBmcm9tICcuLi8uLi8uLi9zY3JvbGxiYXIvaW5kZXgubWpzJztcbmltcG9ydCB7IEVsSWNvbiB9IGZyb20gJy4uLy4uLy4uL2ljb24vaW5kZXgubWpzJztcbmltcG9ydCB7IEFycm93VXAsIEFycm93RG93biB9IGZyb20gJ0BlbGVtZW50LXBsdXMvaWNvbnMtdnVlJztcbmltcG9ydCAnLi4vLi4vLi4vLi4vaG9va3MvaW5kZXgubWpzJztcbmltcG9ydCAnLi4vLi4vLi4vLi4vdXRpbHMvaW5kZXgubWpzJztcbmltcG9ydCB7IHRpbWVVbml0cyB9IGZyb20gJy4uL2NvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgYnVpbGRUaW1lTGlzdCB9IGZyb20gJy4uL3V0aWxzLm1qcyc7XG5pbXBvcnQgeyBiYXNpY1RpbWVTcGlubmVyUHJvcHMgfSBmcm9tICcuLi9wcm9wcy9iYXNpYy10aW1lLXNwaW5uZXIubWpzJztcbmltcG9ydCB7IGdldFRpbWVMaXN0cyB9IGZyb20gJy4uL2NvbXBvc2FibGVzL3VzZS10aW1lLXBpY2tlci5tanMnO1xuaW1wb3J0IF9leHBvcnRfc2ZjIGZyb20gJy4uLy4uLy4uLy4uL192aXJ0dWFsL3BsdWdpbi12dWVfZXhwb3J0LWhlbHBlci5tanMnO1xuaW1wb3J0IHsgdXNlTmFtZXNwYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vaG9va3MvdXNlLW5hbWVzcGFjZS9pbmRleC5tanMnO1xuaW1wb3J0IHsgZ2V0U3R5bGUgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9kb20vc3R5bGUubWpzJztcbmltcG9ydCB7IHZSZXBlYXRDbGljayB9IGZyb20gJy4uLy4uLy4uLy4uL2RpcmVjdGl2ZXMvcmVwZWF0LWNsaWNrL2luZGV4Lm1qcyc7XG5cbmNvbnN0IF9ob2lzdGVkXzEgPSBbXCJvbkNsaWNrXCJdO1xuY29uc3QgX2hvaXN0ZWRfMiA9IFtcIm9uTW91c2VlbnRlclwiXTtcbmNvbnN0IF9zZmNfbWFpbiA9IC8qIEBfX1BVUkVfXyAqLyBkZWZpbmVDb21wb25lbnQoe1xuICBfX25hbWU6IFwiYmFzaWMtdGltZS1zcGlubmVyXCIsXG4gIHByb3BzOiBiYXNpY1RpbWVTcGlubmVyUHJvcHMsXG4gIGVtaXRzOiBbXCJjaGFuZ2VcIiwgXCJzZWxlY3QtcmFuZ2VcIiwgXCJzZXQtb3B0aW9uXCJdLFxuICBzZXR1cChfX3Byb3BzLCB7IGVtaXQgfSkge1xuICAgIGNvbnN0IHByb3BzID0gX19wcm9wcztcbiAgICBjb25zdCBucyA9IHVzZU5hbWVzcGFjZShcInRpbWVcIik7XG4gICAgY29uc3QgeyBnZXRIb3Vyc0xpc3QsIGdldE1pbnV0ZXNMaXN0LCBnZXRTZWNvbmRzTGlzdCB9ID0gZ2V0VGltZUxpc3RzKHByb3BzLmRpc2FibGVkSG91cnMsIHByb3BzLmRpc2FibGVkTWludXRlcywgcHJvcHMuZGlzYWJsZWRTZWNvbmRzKTtcbiAgICBsZXQgaXNTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICBjb25zdCBjdXJyZW50U2Nyb2xsYmFyID0gcmVmKCk7XG4gICAgY29uc3QgbGlzdEhvdXJzUmVmID0gcmVmKCk7XG4gICAgY29uc3QgbGlzdE1pbnV0ZXNSZWYgPSByZWYoKTtcbiAgICBjb25zdCBsaXN0U2Vjb25kc1JlZiA9IHJlZigpO1xuICAgIGNvbnN0IGxpc3RSZWZzTWFwID0ge1xuICAgICAgaG91cnM6IGxpc3RIb3Vyc1JlZixcbiAgICAgIG1pbnV0ZXM6IGxpc3RNaW51dGVzUmVmLFxuICAgICAgc2Vjb25kczogbGlzdFNlY29uZHNSZWZcbiAgICB9O1xuICAgIGNvbnN0IHNwaW5uZXJJdGVtcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHJldHVybiBwcm9wcy5zaG93U2Vjb25kcyA/IHRpbWVVbml0cyA6IHRpbWVVbml0cy5zbGljZSgwLCAyKTtcbiAgICB9KTtcbiAgICBjb25zdCB0aW1lUGFydGlhbHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBjb25zdCB7IHNwaW5uZXJEYXRlIH0gPSBwcm9wcztcbiAgICAgIGNvbnN0IGhvdXJzID0gc3Bpbm5lckRhdGUuaG91cigpO1xuICAgICAgY29uc3QgbWludXRlcyA9IHNwaW5uZXJEYXRlLm1pbnV0ZSgpO1xuICAgICAgY29uc3Qgc2Vjb25kcyA9IHNwaW5uZXJEYXRlLnNlY29uZCgpO1xuICAgICAgcmV0dXJuIHsgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgfTtcbiAgICB9KTtcbiAgICBjb25zdCB0aW1lTGlzdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIGNvbnN0IHsgaG91cnMsIG1pbnV0ZXMgfSA9IHVucmVmKHRpbWVQYXJ0aWFscyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBob3VyczogZ2V0SG91cnNMaXN0KHByb3BzLnJvbGUpLFxuICAgICAgICBtaW51dGVzOiBnZXRNaW51dGVzTGlzdChob3VycywgcHJvcHMucm9sZSksXG4gICAgICAgIHNlY29uZHM6IGdldFNlY29uZHNMaXN0KGhvdXJzLCBtaW51dGVzLCBwcm9wcy5yb2xlKVxuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCBhcnJvd0NvbnRyb2xUaW1lTGlzdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIGNvbnN0IHsgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgfSA9IHVucmVmKHRpbWVQYXJ0aWFscyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBob3VyczogYnVpbGRUaW1lTGlzdChob3VycywgMjMpLFxuICAgICAgICBtaW51dGVzOiBidWlsZFRpbWVMaXN0KG1pbnV0ZXMsIDU5KSxcbiAgICAgICAgc2Vjb25kczogYnVpbGRUaW1lTGlzdChzZWNvbmRzLCA1OSlcbiAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgZGVib3VuY2VkUmVzZXRTY3JvbGwgPSBkZWJvdW5jZSgodHlwZSkgPT4ge1xuICAgICAgaXNTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICAgIGFkanVzdEN1cnJlbnRTcGlubmVyKHR5cGUpO1xuICAgIH0sIDIwMCk7XG4gICAgY29uc3QgZ2V0QW1QbUZsYWcgPSAoaG91cikgPT4ge1xuICAgICAgY29uc3Qgc2hvdWxkU2hvd0FtUG0gPSAhIXByb3BzLmFtUG1Nb2RlO1xuICAgICAgaWYgKCFzaG91bGRTaG93QW1QbSlcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICBjb25zdCBpc0NhcGl0YWwgPSBwcm9wcy5hbVBtTW9kZSA9PT0gXCJBXCI7XG4gICAgICBsZXQgY29udGVudCA9IGhvdXIgPCAxMiA/IFwiIGFtXCIgOiBcIiBwbVwiO1xuICAgICAgaWYgKGlzQ2FwaXRhbClcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQudG9VcHBlckNhc2UoKTtcbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH07XG4gICAgY29uc3QgZW1pdFNlbGVjdFJhbmdlID0gKHR5cGUpID0+IHtcbiAgICAgIGxldCByYW5nZTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiaG91cnNcIjpcbiAgICAgICAgICByYW5nZSA9IFswLCAyXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm1pbnV0ZXNcIjpcbiAgICAgICAgICByYW5nZSA9IFszLCA1XTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInNlY29uZHNcIjpcbiAgICAgICAgICByYW5nZSA9IFs2LCA4XTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IFtsZWZ0LCByaWdodF0gPSByYW5nZTtcbiAgICAgIGVtaXQoXCJzZWxlY3QtcmFuZ2VcIiwgbGVmdCwgcmlnaHQpO1xuICAgICAgY3VycmVudFNjcm9sbGJhci52YWx1ZSA9IHR5cGU7XG4gICAgfTtcbiAgICBjb25zdCBhZGp1c3RDdXJyZW50U3Bpbm5lciA9ICh0eXBlKSA9PiB7XG4gICAgICBhZGp1c3RTcGlubmVyKHR5cGUsIHVucmVmKHRpbWVQYXJ0aWFscylbdHlwZV0pO1xuICAgIH07XG4gICAgY29uc3QgYWRqdXN0U3Bpbm5lcnMgPSAoKSA9PiB7XG4gICAgICBhZGp1c3RDdXJyZW50U3Bpbm5lcihcImhvdXJzXCIpO1xuICAgICAgYWRqdXN0Q3VycmVudFNwaW5uZXIoXCJtaW51dGVzXCIpO1xuICAgICAgYWRqdXN0Q3VycmVudFNwaW5uZXIoXCJzZWNvbmRzXCIpO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U2Nyb2xsYmFyRWxlbWVudCA9IChlbCkgPT4gZWwucXVlcnlTZWxlY3RvcihgLiR7bnMubmFtZXNwYWNlLnZhbHVlfS1zY3JvbGxiYXJfX3dyYXBgKTtcbiAgICBjb25zdCBhZGp1c3RTcGlubmVyID0gKHR5cGUsIHZhbHVlKSA9PiB7XG4gICAgICBpZiAocHJvcHMuYXJyb3dDb250cm9sKVxuICAgICAgICByZXR1cm47XG4gICAgICBjb25zdCBzY3JvbGxiYXIgPSB1bnJlZihsaXN0UmVmc01hcFt0eXBlXSk7XG4gICAgICBpZiAoc2Nyb2xsYmFyICYmIHNjcm9sbGJhci4kZWwpIHtcbiAgICAgICAgZ2V0U2Nyb2xsYmFyRWxlbWVudChzY3JvbGxiYXIuJGVsKS5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCB2YWx1ZSAqIHR5cGVJdGVtSGVpZ2h0KHR5cGUpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHR5cGVJdGVtSGVpZ2h0ID0gKHR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHNjcm9sbGJhciA9IHVucmVmKGxpc3RSZWZzTWFwW3R5cGVdKTtcbiAgICAgIGNvbnN0IGxpc3RJdGVtID0gc2Nyb2xsYmFyID09IG51bGwgPyB2b2lkIDAgOiBzY3JvbGxiYXIuJGVsLnF1ZXJ5U2VsZWN0b3IoXCJsaVwiKTtcbiAgICAgIGlmIChsaXN0SXRlbSkge1xuICAgICAgICByZXR1cm4gTnVtYmVyLnBhcnNlRmxvYXQoZ2V0U3R5bGUobGlzdEl0ZW0sIFwiaGVpZ2h0XCIpKSB8fCAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDA7XG4gICAgfTtcbiAgICBjb25zdCBvbkluY3JlbWVudCA9ICgpID0+IHtcbiAgICAgIHNjcm9sbERvd24oMSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkRlY3JlbWVudCA9ICgpID0+IHtcbiAgICAgIHNjcm9sbERvd24oLTEpO1xuICAgIH07XG4gICAgY29uc3Qgc2Nyb2xsRG93biA9IChzdGVwKSA9PiB7XG4gICAgICBpZiAoIWN1cnJlbnRTY3JvbGxiYXIudmFsdWUpIHtcbiAgICAgICAgZW1pdFNlbGVjdFJhbmdlKFwiaG91cnNcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBsYWJlbCA9IGN1cnJlbnRTY3JvbGxiYXIudmFsdWU7XG4gICAgICBjb25zdCBub3cgPSB1bnJlZih0aW1lUGFydGlhbHMpW2xhYmVsXTtcbiAgICAgIGNvbnN0IHRvdGFsID0gY3VycmVudFNjcm9sbGJhci52YWx1ZSA9PT0gXCJob3Vyc1wiID8gMjQgOiA2MDtcbiAgICAgIGNvbnN0IG5leHQgPSBmaW5kTmV4dFVuRGlzYWJsZWQobGFiZWwsIG5vdywgc3RlcCwgdG90YWwpO1xuICAgICAgbW9kaWZ5RGF0ZUZpZWxkKGxhYmVsLCBuZXh0KTtcbiAgICAgIGFkanVzdFNwaW5uZXIobGFiZWwsIG5leHQpO1xuICAgICAgbmV4dFRpY2soKCkgPT4gZW1pdFNlbGVjdFJhbmdlKGxhYmVsKSk7XG4gICAgfTtcbiAgICBjb25zdCBmaW5kTmV4dFVuRGlzYWJsZWQgPSAodHlwZSwgbm93LCBzdGVwLCB0b3RhbCkgPT4ge1xuICAgICAgbGV0IG5leHQgPSAobm93ICsgc3RlcCArIHRvdGFsKSAlIHRvdGFsO1xuICAgICAgY29uc3QgbGlzdCA9IHVucmVmKHRpbWVMaXN0KVt0eXBlXTtcbiAgICAgIHdoaWxlIChsaXN0W25leHRdICYmIG5leHQgIT09IG5vdykge1xuICAgICAgICBuZXh0ID0gKG5leHQgKyBzdGVwICsgdG90YWwpICUgdG90YWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICAgIGNvbnN0IG1vZGlmeURhdGVGaWVsZCA9ICh0eXBlLCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IHVucmVmKHRpbWVMaXN0KVt0eXBlXTtcbiAgICAgIGNvbnN0IGlzRGlzYWJsZWQgPSBsaXN0W3ZhbHVlXTtcbiAgICAgIGlmIChpc0Rpc2FibGVkKVxuICAgICAgICByZXR1cm47XG4gICAgICBjb25zdCB7IGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzIH0gPSB1bnJlZih0aW1lUGFydGlhbHMpO1xuICAgICAgbGV0IGNoYW5nZVRvO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJob3Vyc1wiOlxuICAgICAgICAgIGNoYW5nZVRvID0gcHJvcHMuc3Bpbm5lckRhdGUuaG91cih2YWx1ZSkubWludXRlKG1pbnV0ZXMpLnNlY29uZChzZWNvbmRzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm1pbnV0ZXNcIjpcbiAgICAgICAgICBjaGFuZ2VUbyA9IHByb3BzLnNwaW5uZXJEYXRlLmhvdXIoaG91cnMpLm1pbnV0ZSh2YWx1ZSkuc2Vjb25kKHNlY29uZHMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic2Vjb25kc1wiOlxuICAgICAgICAgIGNoYW5nZVRvID0gcHJvcHMuc3Bpbm5lckRhdGUuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpLnNlY29uZCh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBlbWl0KFwiY2hhbmdlXCIsIGNoYW5nZVRvKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUNsaWNrID0gKHR5cGUsIHsgdmFsdWUsIGRpc2FibGVkIH0pID0+IHtcbiAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgbW9kaWZ5RGF0ZUZpZWxkKHR5cGUsIHZhbHVlKTtcbiAgICAgICAgZW1pdFNlbGVjdFJhbmdlKHR5cGUpO1xuICAgICAgICBhZGp1c3RTcGlubmVyKHR5cGUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZVNjcm9sbCA9ICh0eXBlKSA9PiB7XG4gICAgICBpc1Njcm9sbGluZyA9IHRydWU7XG4gICAgICBkZWJvdW5jZWRSZXNldFNjcm9sbCh0eXBlKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gTWF0aC5taW4oTWF0aC5yb3VuZCgoZ2V0U2Nyb2xsYmFyRWxlbWVudCh1bnJlZihsaXN0UmVmc01hcFt0eXBlXSkuJGVsKS5zY3JvbGxUb3AgLSAoc2Nyb2xsQmFySGVpZ2h0KHR5cGUpICogMC41IC0gMTApIC8gdHlwZUl0ZW1IZWlnaHQodHlwZSkgKyAzKSAvIHR5cGVJdGVtSGVpZ2h0KHR5cGUpKSwgdHlwZSA9PT0gXCJob3Vyc1wiID8gMjMgOiA1OSk7XG4gICAgICBtb2RpZnlEYXRlRmllbGQodHlwZSwgdmFsdWUpO1xuICAgIH07XG4gICAgY29uc3Qgc2Nyb2xsQmFySGVpZ2h0ID0gKHR5cGUpID0+IHtcbiAgICAgIHJldHVybiB1bnJlZihsaXN0UmVmc01hcFt0eXBlXSkuJGVsLm9mZnNldEhlaWdodDtcbiAgICB9O1xuICAgIGNvbnN0IGJpbmRTY3JvbGxFdmVudCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGJpbmRGdW5jdGlvbiA9ICh0eXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGJhciA9IHVucmVmKGxpc3RSZWZzTWFwW3R5cGVdKTtcbiAgICAgICAgaWYgKHNjcm9sbGJhciAmJiBzY3JvbGxiYXIuJGVsKSB7XG4gICAgICAgICAgZ2V0U2Nyb2xsYmFyRWxlbWVudChzY3JvbGxiYXIuJGVsKS5vbnNjcm9sbCA9ICgpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVNjcm9sbCh0eXBlKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgYmluZEZ1bmN0aW9uKFwiaG91cnNcIik7XG4gICAgICBiaW5kRnVuY3Rpb24oXCJtaW51dGVzXCIpO1xuICAgICAgYmluZEZ1bmN0aW9uKFwic2Vjb25kc1wiKTtcbiAgICB9O1xuICAgIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICFwcm9wcy5hcnJvd0NvbnRyb2wgJiYgYmluZFNjcm9sbEV2ZW50KCk7XG4gICAgICAgIGFkanVzdFNwaW5uZXJzKCk7XG4gICAgICAgIGlmIChwcm9wcy5yb2xlID09PSBcInN0YXJ0XCIpXG4gICAgICAgICAgZW1pdFNlbGVjdFJhbmdlKFwiaG91cnNcIik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzZXRSZWYgPSAoc2Nyb2xsYmFyLCB0eXBlKSA9PiB7XG4gICAgICBsaXN0UmVmc01hcFt0eXBlXS52YWx1ZSA9IHNjcm9sbGJhcjtcbiAgICB9O1xuICAgIGVtaXQoXCJzZXQtb3B0aW9uXCIsIFtgJHtwcm9wcy5yb2xlfV9zY3JvbGxEb3duYCwgc2Nyb2xsRG93bl0pO1xuICAgIGVtaXQoXCJzZXQtb3B0aW9uXCIsIFtgJHtwcm9wcy5yb2xlfV9lbWl0U2VsZWN0UmFuZ2VgLCBlbWl0U2VsZWN0UmFuZ2VdKTtcbiAgICB3YXRjaCgoKSA9PiBwcm9wcy5zcGlubmVyRGF0ZSwgKCkgPT4ge1xuICAgICAgaWYgKGlzU2Nyb2xsaW5nKVxuICAgICAgICByZXR1cm47XG4gICAgICBhZGp1c3RTcGlubmVycygpO1xuICAgIH0pO1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiB7XG4gICAgICByZXR1cm4gb3BlbkJsb2NrKCksIGNyZWF0ZUVsZW1lbnRCbG9jayhcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhbdW5yZWYobnMpLmIoXCJzcGlubmVyXCIpLCB7IFwiaGFzLXNlY29uZHNcIjogX2N0eC5zaG93U2Vjb25kcyB9XSlcbiAgICAgIH0sIFtcbiAgICAgICAgIV9jdHguYXJyb3dDb250cm9sID8gKG9wZW5CbG9jayh0cnVlKSwgY3JlYXRlRWxlbWVudEJsb2NrKEZyYWdtZW50LCB7IGtleTogMCB9LCByZW5kZXJMaXN0KHVucmVmKHNwaW5uZXJJdGVtcyksIChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9wZW5CbG9jaygpLCBjcmVhdGVCbG9jayh1bnJlZihFbFNjcm9sbGJhciksIHtcbiAgICAgICAgICAgIGtleTogaXRlbSxcbiAgICAgICAgICAgIHJlZl9mb3I6IHRydWUsXG4gICAgICAgICAgICByZWY6IChzY3JvbGxiYXIpID0+IHNldFJlZihzY3JvbGxiYXIsIGl0ZW0pLFxuICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKHVucmVmKG5zKS5iZShcInNwaW5uZXJcIiwgXCJ3cmFwcGVyXCIpKSxcbiAgICAgICAgICAgIFwid3JhcC1zdHlsZVwiOiBcIm1heC1oZWlnaHQ6IGluaGVyaXQ7XCIsXG4gICAgICAgICAgICBcInZpZXctY2xhc3NcIjogdW5yZWYobnMpLmJlKFwic3Bpbm5lclwiLCBcImxpc3RcIiksXG4gICAgICAgICAgICBub3Jlc2l6ZTogXCJcIixcbiAgICAgICAgICAgIHRhZzogXCJ1bFwiLFxuICAgICAgICAgICAgb25Nb3VzZWVudGVyOiAoJGV2ZW50KSA9PiBlbWl0U2VsZWN0UmFuZ2UoaXRlbSksXG4gICAgICAgICAgICBvbk1vdXNlbW92ZTogKCRldmVudCkgPT4gYWRqdXN0Q3VycmVudFNwaW5uZXIoaXRlbSlcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBkZWZhdWx0OiB3aXRoQ3R4KCgpID0+IFtcbiAgICAgICAgICAgICAgKG9wZW5CbG9jayh0cnVlKSwgY3JlYXRlRWxlbWVudEJsb2NrKEZyYWdtZW50LCBudWxsLCByZW5kZXJMaXN0KHVucmVmKHRpbWVMaXN0KVtpdGVtXSwgKGRpc2FibGVkLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3BlbkJsb2NrKCksIGNyZWF0ZUVsZW1lbnRCbG9jayhcImxpXCIsIHtcbiAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhbXG4gICAgICAgICAgICAgICAgICAgIHVucmVmKG5zKS5iZShcInNwaW5uZXJcIiwgXCJpdGVtXCIpLFxuICAgICAgICAgICAgICAgICAgICB1bnJlZihucykuaXMoXCJhY3RpdmVcIiwga2V5ID09PSB1bnJlZih0aW1lUGFydGlhbHMpW2l0ZW1dKSxcbiAgICAgICAgICAgICAgICAgICAgdW5yZWYobnMpLmlzKFwiZGlzYWJsZWRcIiwgZGlzYWJsZWQpXG4gICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgkZXZlbnQpID0+IGhhbmRsZUNsaWNrKGl0ZW0sIHsgdmFsdWU6IGtleSwgZGlzYWJsZWQgfSlcbiAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICBpdGVtID09PSBcImhvdXJzXCIgPyAob3BlbkJsb2NrKCksIGNyZWF0ZUVsZW1lbnRCbG9jayhGcmFnbWVudCwgeyBrZXk6IDAgfSwgW1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVUZXh0Vk5vZGUodG9EaXNwbGF5U3RyaW5nKChcIjBcIiArIChfY3R4LmFtUG1Nb2RlID8ga2V5ICUgMTIgfHwgMTIgOiBrZXkpKS5zbGljZSgtMikpICsgdG9EaXNwbGF5U3RyaW5nKGdldEFtUG1GbGFnKGtleSkpLCAxKVxuICAgICAgICAgICAgICAgICAgXSwgNjQpKSA6IChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKEZyYWdtZW50LCB7IGtleTogMSB9LCBbXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVRleHRWTm9kZSh0b0Rpc3BsYXlTdHJpbmcoKFwiMFwiICsga2V5KS5zbGljZSgtMikpLCAxKVxuICAgICAgICAgICAgICAgICAgXSwgNjQpKVxuICAgICAgICAgICAgICAgIF0sIDEwLCBfaG9pc3RlZF8xKTtcbiAgICAgICAgICAgICAgfSksIDEyOCkpXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF86IDJcbiAgICAgICAgICB9LCAxMDMyLCBbXCJjbGFzc1wiLCBcInZpZXctY2xhc3NcIiwgXCJvbk1vdXNlZW50ZXJcIiwgXCJvbk1vdXNlbW92ZVwiXSk7XG4gICAgICAgIH0pLCAxMjgpKSA6IGNyZWF0ZUNvbW1lbnRWTm9kZShcInYtaWZcIiwgdHJ1ZSksXG4gICAgICAgIF9jdHguYXJyb3dDb250cm9sID8gKG9wZW5CbG9jayh0cnVlKSwgY3JlYXRlRWxlbWVudEJsb2NrKEZyYWdtZW50LCB7IGtleTogMSB9LCByZW5kZXJMaXN0KHVucmVmKHNwaW5uZXJJdGVtcyksIChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9wZW5CbG9jaygpLCBjcmVhdGVFbGVtZW50QmxvY2soXCJkaXZcIiwge1xuICAgICAgICAgICAga2V5OiBpdGVtLFxuICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKFt1bnJlZihucykuYmUoXCJzcGlubmVyXCIsIFwid3JhcHBlclwiKSwgdW5yZWYobnMpLmlzKFwiYXJyb3dcIildKSxcbiAgICAgICAgICAgIG9uTW91c2VlbnRlcjogKCRldmVudCkgPT4gZW1pdFNlbGVjdFJhbmdlKGl0ZW0pXG4gICAgICAgICAgfSwgW1xuICAgICAgICAgICAgd2l0aERpcmVjdGl2ZXMoKG9wZW5CbG9jaygpLCBjcmVhdGVCbG9jayh1bnJlZihFbEljb24pLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhbXCJhcnJvdy11cFwiLCB1bnJlZihucykuYmUoXCJzcGlubmVyXCIsIFwiYXJyb3dcIildKVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICBkZWZhdWx0OiB3aXRoQ3R4KCgpID0+IFtcbiAgICAgICAgICAgICAgICBjcmVhdGVWTm9kZSh1bnJlZihBcnJvd1VwKSlcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgIH0sIDgsIFtcImNsYXNzXCJdKSksIFtcbiAgICAgICAgICAgICAgW3VucmVmKHZSZXBlYXRDbGljayksIG9uRGVjcmVtZW50XVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB3aXRoRGlyZWN0aXZlcygob3BlbkJsb2NrKCksIGNyZWF0ZUJsb2NrKHVucmVmKEVsSWNvbiksIHtcbiAgICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKFtcImFycm93LWRvd25cIiwgdW5yZWYobnMpLmJlKFwic3Bpbm5lclwiLCBcImFycm93XCIpXSlcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgZGVmYXVsdDogd2l0aEN0eCgoKSA9PiBbXG4gICAgICAgICAgICAgICAgY3JlYXRlVk5vZGUodW5yZWYoQXJyb3dEb3duKSlcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgIH0sIDgsIFtcImNsYXNzXCJdKSksIFtcbiAgICAgICAgICAgICAgW3VucmVmKHZSZXBlYXRDbGljayksIG9uSW5jcmVtZW50XVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50Vk5vZGUoXCJ1bFwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyh1bnJlZihucykuYmUoXCJzcGlubmVyXCIsIFwibGlzdFwiKSlcbiAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgKG9wZW5CbG9jayh0cnVlKSwgY3JlYXRlRWxlbWVudEJsb2NrKEZyYWdtZW50LCBudWxsLCByZW5kZXJMaXN0KHVucmVmKGFycm93Q29udHJvbFRpbWVMaXN0KVtpdGVtXSwgKHRpbWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKFwibGlcIiwge1xuICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKFtcbiAgICAgICAgICAgICAgICAgICAgdW5yZWYobnMpLmJlKFwic3Bpbm5lclwiLCBcIml0ZW1cIiksXG4gICAgICAgICAgICAgICAgICAgIHVucmVmKG5zKS5pcyhcImFjdGl2ZVwiLCB0aW1lID09PSB1bnJlZih0aW1lUGFydGlhbHMpW2l0ZW1dKSxcbiAgICAgICAgICAgICAgICAgICAgdW5yZWYobnMpLmlzKFwiZGlzYWJsZWRcIiwgdW5yZWYodGltZUxpc3QpW2l0ZW1dW3RpbWVdKVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICB0eXBlb2YgdGltZSA9PT0gXCJudW1iZXJcIiA/IChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKEZyYWdtZW50LCB7IGtleTogMCB9LCBbXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPT09IFwiaG91cnNcIiA/IChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKEZyYWdtZW50LCB7IGtleTogMCB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgY3JlYXRlVGV4dFZOb2RlKHRvRGlzcGxheVN0cmluZygoXCIwXCIgKyAoX2N0eC5hbVBtTW9kZSA/IHRpbWUgJSAxMiB8fCAxMiA6IHRpbWUpKS5zbGljZSgtMikpICsgdG9EaXNwbGF5U3RyaW5nKGdldEFtUG1GbGFnKHRpbWUpKSwgMSlcbiAgICAgICAgICAgICAgICAgICAgXSwgNjQpKSA6IChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKEZyYWdtZW50LCB7IGtleTogMSB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgY3JlYXRlVGV4dFZOb2RlKHRvRGlzcGxheVN0cmluZygoXCIwXCIgKyB0aW1lKS5zbGljZSgtMikpLCAxKVxuICAgICAgICAgICAgICAgICAgICBdLCA2NCkpXG4gICAgICAgICAgICAgICAgICBdLCA2NCkpIDogY3JlYXRlQ29tbWVudFZOb2RlKFwidi1pZlwiLCB0cnVlKVxuICAgICAgICAgICAgICAgIF0sIDIpO1xuICAgICAgICAgICAgICB9KSwgMTI4KSlcbiAgICAgICAgICAgIF0sIDIpXG4gICAgICAgICAgXSwgNDIsIF9ob2lzdGVkXzIpO1xuICAgICAgICB9KSwgMTI4KSkgOiBjcmVhdGVDb21tZW50Vk5vZGUoXCJ2LWlmXCIsIHRydWUpXG4gICAgICBdLCAyKTtcbiAgICB9O1xuICB9XG59KTtcbnZhciBUaW1lU3Bpbm5lciA9IC8qIEBfX1BVUkVfXyAqLyBfZXhwb3J0X3NmYyhfc2ZjX21haW4sIFtbXCJfX2ZpbGVcIiwgXCJiYXNpYy10aW1lLXNwaW5uZXIudnVlXCJdXSk7XG5cbmV4cG9ydCB7IFRpbWVTcGlubmVyIGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhc2ljLXRpbWUtc3Bpbm5lci5tanMubWFwXG4iLCIvKiFcbiAqIGlzLXBsYWluLW9iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtcGxhaW4tb2JqZWN0PlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBKb24gU2NobGlua2VydC5cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG5mdW5jdGlvbiBpc09iamVjdChvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KG8pIHtcbiAgdmFyIGN0b3IscHJvdDtcblxuICBpZiAoaXNPYmplY3QobykgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgaGFzIG1vZGlmaWVkIGNvbnN0cnVjdG9yXG4gIGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuICBpZiAoY3RvciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcblxuICAvLyBJZiBoYXMgbW9kaWZpZWQgcHJvdG90eXBlXG4gIHByb3QgPSBjdG9yLnByb3RvdHlwZTtcbiAgaWYgKGlzT2JqZWN0KHByb3QpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIGNvbnN0cnVjdG9yIGRvZXMgbm90IGhhdmUgYW4gT2JqZWN0LXNwZWNpZmljIG1ldGhvZFxuICBpZiAocHJvdC5oYXNPd25Qcm9wZXJ0eSgnaXNQcm90b3R5cGVPZicpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIE1vc3QgbGlrZWx5IGEgcGxhaW4gT2JqZWN0XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgeyBpc1BsYWluT2JqZWN0IH07XG4iLCJpbXBvcnR7aXNQbGFpbk9iamVjdCBhcyBlfWZyb21cImlzLXBsYWluLW9iamVjdFwiO2Z1bmN0aW9uIHQoKXtyZXR1cm4gdD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG4oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpKXtpZih0LmluZGV4T2Yocik+PTApY29udGludWU7bltyXT1lW3JdfXJldHVybiBufWNvbnN0IHI9e3NpbGVudDohMSxsb2dMZXZlbDpcIndhcm5cIn0saT1bXCJ2YWxpZGF0b3JcIl0sbz1PYmplY3QucHJvdG90eXBlLGE9by50b1N0cmluZyxzPW8uaGFzT3duUHJvcGVydHksdT0vXlxccypmdW5jdGlvbiAoXFx3KykvO2Z1bmN0aW9uIGwoZSl7dmFyIHQ7Y29uc3Qgbj1udWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS50eXBlKSYmdm9pZCAwIT09dD90OmU7aWYobil7Y29uc3QgZT1uLnRvU3RyaW5nKCkubWF0Y2godSk7cmV0dXJuIGU/ZVsxXTpcIlwifXJldHVyblwiXCJ9Y29uc3QgYz1lO2Z1bmN0aW9uIGYoKXt9bGV0IGQ9ZjtpZihcInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WKXtjb25zdCBlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBjb25zb2xlO2Q9ZT9mdW5jdGlvbihlLHQ9ci5sb2dMZXZlbCl7ITE9PT1yLnNpbGVudCYmY29uc29sZVt0XShgW1Z1ZVR5cGVzIHdhcm5dOiAke2V9YCl9OmZ9Y29uc3QgcD0oZSx0KT0+cy5jYWxsKGUsdCkseT1OdW1iZXIuaXNJbnRlZ2VyfHxmdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmaXNGaW5pdGUoZSkmJk1hdGguZmxvb3IoZSk9PT1lfSx2PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09PWEuY2FsbChlKX0saD1lPT5cIltvYmplY3QgRnVuY3Rpb25dXCI9PT1hLmNhbGwoZSksYj0oZSx0KT0+YyhlKSYmcChlLFwiX3Z1ZVR5cGVzX25hbWVcIikmJighdHx8ZS5fdnVlVHlwZXNfbmFtZT09PXQpLGc9ZT0+YyhlKSYmKHAoZSxcInR5cGVcIil8fFtcIl92dWVUeXBlc19uYW1lXCIsXCJ2YWxpZGF0b3JcIixcImRlZmF1bHRcIixcInJlcXVpcmVkXCJdLnNvbWUodD0+cChlLHQpKSk7ZnVuY3Rpb24gTyhlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5iaW5kKHQpLFwiX19vcmlnaW5hbFwiLHt2YWx1ZTplfSl9ZnVuY3Rpb24gbShlLHQsbj0hMSl7bGV0IHIsaT0hMCxvPVwiXCI7cj1jKGUpP2U6e3R5cGU6ZX07Y29uc3QgYT1iKHIpP3IuX3Z1ZVR5cGVzX25hbWUrXCIgLSBcIjpcIlwiO2lmKGcocikmJm51bGwhPT1yLnR5cGUpe2lmKHZvaWQgMD09PXIudHlwZXx8ITA9PT1yLnR5cGUpcmV0dXJuIGk7aWYoIXIucmVxdWlyZWQmJm51bGw9PXQpcmV0dXJuIGk7dihyLnR5cGUpPyhpPXIudHlwZS5zb21lKGU9PiEwPT09bShlLHQsITApKSxvPXIudHlwZS5tYXAoZT0+bChlKSkuam9pbihcIiBvciBcIikpOihvPWwociksaT1cIkFycmF5XCI9PT1vP3YodCk6XCJPYmplY3RcIj09PW8/Yyh0KTpcIlN0cmluZ1wiPT09b3x8XCJOdW1iZXJcIj09PW98fFwiQm9vbGVhblwiPT09b3x8XCJGdW5jdGlvblwiPT09bz9mdW5jdGlvbihlKXtpZihudWxsPT1lKXJldHVyblwiXCI7Y29uc3QgdD1lLmNvbnN0cnVjdG9yLnRvU3RyaW5nKCkubWF0Y2godSk7cmV0dXJuIHQ/dFsxXS5yZXBsYWNlKC9eQXN5bmMvLFwiXCIpOlwiXCJ9KHQpPT09bzp0IGluc3RhbmNlb2Ygci50eXBlKX1pZighaSl7Y29uc3QgZT1gJHthfXZhbHVlIFwiJHt0fVwiIHNob3VsZCBiZSBvZiB0eXBlIFwiJHtvfVwiYDtyZXR1cm4hMT09PW4/KGQoZSksITEpOmV9aWYocChyLFwidmFsaWRhdG9yXCIpJiZoKHIudmFsaWRhdG9yKSl7Y29uc3QgZT1kLG89W107aWYoZD1lPT57by5wdXNoKGUpfSxpPXIudmFsaWRhdG9yKHQpLGQ9ZSwhaSl7Y29uc3QgZT0oby5sZW5ndGg+MT9cIiogXCI6XCJcIikrby5qb2luKFwiXFxuKiBcIik7cmV0dXJuIG8ubGVuZ3RoPTAsITE9PT1uPyhkKGUpLGkpOmV9fXJldHVybiBpfWZ1bmN0aW9uIGooZSx0KXtjb25zdCBuPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQse192dWVUeXBlc19uYW1lOnt2YWx1ZTplLHdyaXRhYmxlOiEwfSxpc1JlcXVpcmVkOntnZXQoKXtyZXR1cm4gdGhpcy5yZXF1aXJlZD0hMCx0aGlzfX0sZGVmOnt2YWx1ZShlKXtyZXR1cm4gdm9pZCAwPT09ZT90aGlzLnR5cGU9PT1Cb29sZWFufHxBcnJheS5pc0FycmF5KHRoaXMudHlwZSkmJnRoaXMudHlwZS5pbmNsdWRlcyhCb29sZWFuKT92b2lkKHRoaXMuZGVmYXVsdD12b2lkIDApOihwKHRoaXMsXCJkZWZhdWx0XCIpJiZkZWxldGUgdGhpcy5kZWZhdWx0LHRoaXMpOmgoZSl8fCEwPT09bSh0aGlzLGUsITApPyh0aGlzLmRlZmF1bHQ9dihlKT8oKT0+Wy4uLmVdOmMoZSk/KCk9Pk9iamVjdC5hc3NpZ24oe30sZSk6ZSx0aGlzKTooZChgJHt0aGlzLl92dWVUeXBlc19uYW1lfSAtIGludmFsaWQgZGVmYXVsdCB2YWx1ZTogXCIke2V9XCJgKSx0aGlzKX19fSkse3ZhbGlkYXRvcjpyfT1uO3JldHVybiBoKHIpJiYobi52YWxpZGF0b3I9TyhyLG4pKSxufWZ1bmN0aW9uIF8oZSx0KXtjb25zdCBuPWooZSx0KTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJ2YWxpZGF0ZVwiLHt2YWx1ZShlKXtyZXR1cm4gaCh0aGlzLnZhbGlkYXRvcikmJmQoYCR7dGhpcy5fdnVlVHlwZXNfbmFtZX0gLSBjYWxsaW5nIC52YWxpZGF0ZSgpIHdpbGwgb3ZlcndyaXRlIHRoZSBjdXJyZW50IGN1c3RvbSB2YWxpZGF0b3IgZnVuY3Rpb24uIFZhbGlkYXRvciBpbmZvOlxcbiR7SlNPTi5zdHJpbmdpZnkodGhpcyl9YCksdGhpcy52YWxpZGF0b3I9TyhlLHRoaXMpLHRoaXN9fSl9ZnVuY3Rpb24gVChlLHQscil7Y29uc3Qgbz1mdW5jdGlvbihlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5mb3JFYWNoKG49Pnt0W25dPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LHQpfSh0KTtpZihvLl92dWVUeXBlc19uYW1lPWUsIWMocikpcmV0dXJuIG87Y29uc3R7dmFsaWRhdG9yOmF9PXIscz1uKHIsaSk7aWYoaChhKSl7bGV0e3ZhbGlkYXRvcjplfT1vO2UmJihlPW51bGwhPT0obD0odT1lKS5fX29yaWdpbmFsKSYmdm9pZCAwIT09bD9sOnUpLG8udmFsaWRhdG9yPU8oZT9mdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxsKHRoaXMsdCkmJmEuY2FsbCh0aGlzLHQpfTphLG8pfXZhciB1LGw7cmV0dXJuIE9iamVjdC5hc3NpZ24obyxzKX1mdW5jdGlvbiAkKGUpe3JldHVybiBlLnJlcGxhY2UoL14oPyFcXHMqJCkvZ20sXCIgIFwiKX1jb25zdCB3PSgpPT5fKFwiYW55XCIse30pLHg9KCk9Pl8oXCJmdW5jdGlvblwiLHt0eXBlOkZ1bmN0aW9ufSksUD0oKT0+XyhcImJvb2xlYW5cIix7dHlwZTpCb29sZWFufSksQT0oKT0+XyhcInN0cmluZ1wiLHt0eXBlOlN0cmluZ30pLEU9KCk9Pl8oXCJudW1iZXJcIix7dHlwZTpOdW1iZXJ9KSxTPSgpPT5fKFwiYXJyYXlcIix7dHlwZTpBcnJheX0pLE49KCk9Pl8oXCJvYmplY3RcIix7dHlwZTpPYmplY3R9KSxWPSgpPT5qKFwiaW50ZWdlclwiLHt0eXBlOk51bWJlcix2YWxpZGF0b3IoZSl7Y29uc3QgdD15KGUpO3JldHVybiExPT09dCYmZChgaW50ZWdlciAtIFwiJHtlfVwiIGlzIG5vdCBhbiBpbnRlZ2VyYCksdH19KSxxPSgpPT5qKFwic3ltYm9sXCIse3ZhbGlkYXRvcihlKXtjb25zdCB0PVwic3ltYm9sXCI9PXR5cGVvZiBlO3JldHVybiExPT09dCYmZChgc3ltYm9sIC0gaW52YWxpZCB2YWx1ZSBcIiR7ZX1cImApLHR9fSksaz0oKT0+T2JqZWN0LmRlZmluZVByb3BlcnR5KHt0eXBlOm51bGwsdmFsaWRhdG9yKGUpe2NvbnN0IHQ9bnVsbD09PWU7cmV0dXJuITE9PT10JiZkKFwibnVsbGFibGUgLSB2YWx1ZSBzaG91bGQgYmUgbnVsbFwiKSx0fX0sXCJfdnVlVHlwZXNfbmFtZVwiLHt2YWx1ZTpcIm51bGxhYmxlXCJ9KTtmdW5jdGlvbiBEKGUsdD1cImN1c3RvbSB2YWxpZGF0aW9uIGZhaWxlZFwiKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJbVnVlVHlwZXMgZXJyb3JdOiBZb3UgbXVzdCBwcm92aWRlIGEgZnVuY3Rpb24gYXMgYXJndW1lbnRcIik7cmV0dXJuIGooZS5uYW1lfHxcIjw8YW5vbnltb3VzIGZ1bmN0aW9uPj5cIix7dHlwZTpudWxsLHZhbGlkYXRvcihuKXtjb25zdCByPWUobik7cmV0dXJuIHJ8fGQoYCR7dGhpcy5fdnVlVHlwZXNfbmFtZX0gLSAke3R9YCkscn19KX1mdW5jdGlvbiBMKGUpe2lmKCF2KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJbVnVlVHlwZXMgZXJyb3JdOiBZb3UgbXVzdCBwcm92aWRlIGFuIGFycmF5IGFzIGFyZ3VtZW50LlwiKTtjb25zdCB0PWBvbmVPZiAtIHZhbHVlIHNob3VsZCBiZSBvbmUgb2YgXCIke2UubWFwKGU9Plwic3ltYm9sXCI9PXR5cGVvZiBlP2UudG9TdHJpbmcoKTplKS5qb2luKCdcIiwgXCInKX1cIi5gLG49e3ZhbGlkYXRvcihuKXtjb25zdCByPS0xIT09ZS5pbmRleE9mKG4pO3JldHVybiByfHxkKHQpLHJ9fTtpZigtMT09PWUuaW5kZXhPZihudWxsKSl7Y29uc3QgdD1lLnJlZHVjZSgoZSx0KT0+e2lmKG51bGwhPXQpe2NvbnN0IG49dC5jb25zdHJ1Y3RvcjstMT09PWUuaW5kZXhPZihuKSYmZS5wdXNoKG4pfXJldHVybiBlfSxbXSk7dC5sZW5ndGg+MCYmKG4udHlwZT10KX1yZXR1cm4gaihcIm9uZU9mXCIsbil9ZnVuY3Rpb24gQihlKXtpZighdihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiW1Z1ZVR5cGVzIGVycm9yXTogWW91IG11c3QgcHJvdmlkZSBhbiBhcnJheSBhcyBhcmd1bWVudFwiKTtsZXQgdD0hMSxuPSExLHI9W107Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0xKXtjb25zdCBvPWVbaV07aWYoZyhvKSl7aWYoaChvLnZhbGlkYXRvcikmJih0PSEwKSxiKG8sXCJvbmVPZlwiKSYmby50eXBlKXtyPXIuY29uY2F0KG8udHlwZSk7Y29udGludWV9aWYoYihvLFwibnVsbGFibGVcIikpe249ITA7Y29udGludWV9aWYoITA9PT1vLnR5cGV8fCFvLnR5cGUpe2QoJ29uZU9mVHlwZSAtIGludmFsaWQgdXNhZ2Ugb2YgXCJ0cnVlXCIgYW5kIFwibnVsbFwiIGFzIHR5cGVzLicpO2NvbnRpbnVlfXI9ci5jb25jYXQoby50eXBlKX1lbHNlIHIucHVzaChvKX1yPXIuZmlsdGVyKChlLHQpPT5yLmluZGV4T2YoZSk9PT10KTtjb25zdCBpPSExPT09biYmci5sZW5ndGg+MD9yOm51bGw7cmV0dXJuIGooXCJvbmVPZlR5cGVcIix0P3t0eXBlOmksdmFsaWRhdG9yKHQpe2NvbnN0IG49W10scj1lLnNvbWUoZT0+e2NvbnN0IHI9bShlLHQsITApO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiByJiZuLnB1c2gociksITA9PT1yfSk7cmV0dXJuIHJ8fGQoYG9uZU9mVHlwZSAtIHByb3ZpZGVkIHZhbHVlIGRvZXMgbm90IG1hdGNoIGFueSBvZiB0aGUgJHtuLmxlbmd0aH0gcGFzc2VkLWluIHZhbGlkYXRvcnM6XFxuJHskKG4uam9pbihcIlxcblwiKSl9YCkscn19Ont0eXBlOml9KX1mdW5jdGlvbiBGKGUpe3JldHVybiBqKFwiYXJyYXlPZlwiLHt0eXBlOkFycmF5LHZhbGlkYXRvcih0KXtsZXQgbj1cIlwiO2NvbnN0IHI9dC5ldmVyeSh0PT4obj1tKGUsdCwhMCksITA9PT1uKSk7cmV0dXJuIHJ8fGQoYGFycmF5T2YgLSB2YWx1ZSB2YWxpZGF0aW9uIGVycm9yOlxcbiR7JChuKX1gKSxyfX0pfWZ1bmN0aW9uIFkoZSl7cmV0dXJuIGooXCJpbnN0YW5jZU9mXCIse3R5cGU6ZX0pfWZ1bmN0aW9uIEkoZSl7cmV0dXJuIGooXCJvYmplY3RPZlwiLHt0eXBlOk9iamVjdCx2YWxpZGF0b3IodCl7bGV0IG49XCJcIjtjb25zdCByPU9iamVjdC5rZXlzKHQpLmV2ZXJ5KHI9PihuPW0oZSx0W3JdLCEwKSwhMD09PW4pKTtyZXR1cm4gcnx8ZChgb2JqZWN0T2YgLSB2YWx1ZSB2YWxpZGF0aW9uIGVycm9yOlxcbiR7JChuKX1gKSxyfX0pfWZ1bmN0aW9uIEooZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQuZmlsdGVyKHQ9Pnt2YXIgbjtyZXR1cm4hKG51bGw9PT0obj1lW3RdKXx8dm9pZCAwPT09bnx8IW4ucmVxdWlyZWQpfSkscj1qKFwic2hhcGVcIix7dHlwZTpPYmplY3QsdmFsaWRhdG9yKHIpe2lmKCFjKHIpKXJldHVybiExO2NvbnN0IGk9T2JqZWN0LmtleXMocik7aWYobi5sZW5ndGg+MCYmbi5zb21lKGU9Pi0xPT09aS5pbmRleE9mKGUpKSl7Y29uc3QgZT1uLmZpbHRlcihlPT4tMT09PWkuaW5kZXhPZihlKSk7cmV0dXJuIGQoMT09PWUubGVuZ3RoP2BzaGFwZSAtIHJlcXVpcmVkIHByb3BlcnR5IFwiJHtlWzBdfVwiIGlzIG5vdCBkZWZpbmVkLmA6YHNoYXBlIC0gcmVxdWlyZWQgcHJvcGVydGllcyBcIiR7ZS5qb2luKCdcIiwgXCInKX1cIiBhcmUgbm90IGRlZmluZWQuYCksITF9cmV0dXJuIGkuZXZlcnkobj0+e2lmKC0xPT09dC5pbmRleE9mKG4pKXJldHVybiEwPT09dGhpcy5fdnVlVHlwZXNfaXNMb29zZXx8KGQoYHNoYXBlIC0gc2hhcGUgZGVmaW5pdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEgXCIke259XCIgcHJvcGVydHkuIEFsbG93ZWQga2V5czogXCIke3Quam9pbignXCIsIFwiJyl9XCIuYCksITEpO2NvbnN0IGk9bShlW25dLHJbbl0sITApO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBpJiZkKGBzaGFwZSAtIFwiJHtufVwiIHByb3BlcnR5IHZhbGlkYXRpb24gZXJyb3I6XFxuICR7JChpKX1gKSwhMD09PWl9KX19KTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfdnVlVHlwZXNfaXNMb29zZVwiLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwibG9vc2VcIix7Z2V0KCl7cmV0dXJuIHRoaXMuX3Z1ZVR5cGVzX2lzTG9vc2U9ITAsdGhpc319KSxyfWNvbnN0IE09W1wibmFtZVwiLFwidmFsaWRhdGVcIixcImdldHRlclwiXSxSPS8qI19fUFVSRV9fKi8oZT0+KChlPWNsYXNze3N0YXRpYyBnZXQgYW55KCl7cmV0dXJuIHcoKX1zdGF0aWMgZ2V0IGZ1bmMoKXtyZXR1cm4geCgpLmRlZih0aGlzLmRlZmF1bHRzLmZ1bmMpfXN0YXRpYyBnZXQgYm9vbCgpe3JldHVybiB2b2lkIDA9PT10aGlzLmRlZmF1bHRzLmJvb2w/UCgpOlAoKS5kZWYodGhpcy5kZWZhdWx0cy5ib29sKX1zdGF0aWMgZ2V0IHN0cmluZygpe3JldHVybiBBKCkuZGVmKHRoaXMuZGVmYXVsdHMuc3RyaW5nKX1zdGF0aWMgZ2V0IG51bWJlcigpe3JldHVybiBFKCkuZGVmKHRoaXMuZGVmYXVsdHMubnVtYmVyKX1zdGF0aWMgZ2V0IGFycmF5KCl7cmV0dXJuIFMoKS5kZWYodGhpcy5kZWZhdWx0cy5hcnJheSl9c3RhdGljIGdldCBvYmplY3QoKXtyZXR1cm4gTigpLmRlZih0aGlzLmRlZmF1bHRzLm9iamVjdCl9c3RhdGljIGdldCBpbnRlZ2VyKCl7cmV0dXJuIFYoKS5kZWYodGhpcy5kZWZhdWx0cy5pbnRlZ2VyKX1zdGF0aWMgZ2V0IHN5bWJvbCgpe3JldHVybiBxKCl9c3RhdGljIGdldCBudWxsYWJsZSgpe3JldHVybiBrKCl9c3RhdGljIGV4dGVuZChlKXtpZihkKFwiVnVlVHlwZXMuZXh0ZW5kIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgRVM2KyBtZXRob2QgaW5zdGVhZC4gU2VlIGh0dHBzOi8vZHdpZ2h0amFjay5naXRodWIuaW8vdnVlLXR5cGVzL2FkdmFuY2VkL2V4dGVuZGluZy12dWUtdHlwZXMuaHRtbCNleHRlbmRpbmctbmFtZXNwYWNlZC12YWxpZGF0b3JzLWluLWVzNiBmb3IgZGV0YWlscy5cIiksdihlKSlyZXR1cm4gZS5mb3JFYWNoKGU9PnRoaXMuZXh0ZW5kKGUpKSx0aGlzO2NvbnN0e25hbWU6dCx2YWxpZGF0ZTpyPSExLGdldHRlcjppPSExfT1lLG89bihlLE0pO2lmKHAodGhpcyx0KSl0aHJvdyBuZXcgVHlwZUVycm9yKGBbVnVlVHlwZXMgZXJyb3JdOiBUeXBlIFwiJHt0fVwiIGFscmVhZHkgZGVmaW5lZGApO2NvbnN0e3R5cGU6YX09bztpZihiKGEpKXJldHVybiBkZWxldGUgby50eXBlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQsaT97Z2V0OigpPT5UKHQsYSxvKX06e3ZhbHVlKC4uLmUpe2NvbnN0IG49VCh0LGEsbyk7cmV0dXJuIG4udmFsaWRhdG9yJiYobi52YWxpZGF0b3I9bi52YWxpZGF0b3IuYmluZChuLC4uLmUpKSxufX0pO2xldCBzO3JldHVybiBzPWk/e2dldCgpe2NvbnN0IGU9T2JqZWN0LmFzc2lnbih7fSxvKTtyZXR1cm4gcj9fKHQsZSk6aih0LGUpfSxlbnVtZXJhYmxlOiEwfTp7dmFsdWUoLi4uZSl7Y29uc3Qgbj1PYmplY3QuYXNzaWduKHt9LG8pO2xldCBpO3JldHVybiBpPXI/Xyh0LG4pOmoodCxuKSxuLnZhbGlkYXRvciYmKGkudmFsaWRhdG9yPW4udmFsaWRhdG9yLmJpbmQoaSwuLi5lKSksaX0sZW51bWVyYWJsZTohMH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCxzKX19KS5kZWZhdWx0cz17fSxlLnNlbnNpYmxlRGVmYXVsdHM9dm9pZCAwLGUuY29uZmlnPXIsZS5jdXN0b209RCxlLm9uZU9mPUwsZS5pbnN0YW5jZU9mPVksZS5vbmVPZlR5cGU9QixlLmFycmF5T2Y9RixlLm9iamVjdE9mPUksZS5zaGFwZT1KLGUudXRpbHM9e3ZhbGlkYXRlOihlLHQpPT4hMD09PW0odCxlLCEwKSx0b1R5cGU6KGUsdCxuPSExKT0+bj9fKGUsdCk6aihlLHQpfSxlKSkoKTtmdW5jdGlvbiBVKGU9e2Z1bmM6KCk9Pnt9LGJvb2w6ITAsc3RyaW5nOlwiXCIsbnVtYmVyOjAsYXJyYXk6KCk9PltdLG9iamVjdDooKT0+KHt9KSxpbnRlZ2VyOjB9KXt2YXIgbjtyZXR1cm4obj1jbGFzcyBleHRlbmRzIFJ7c3RhdGljIGdldCBzZW5zaWJsZURlZmF1bHRzKCl7cmV0dXJuIHQoe30sdGhpcy5kZWZhdWx0cyl9c3RhdGljIHNldCBzZW5zaWJsZURlZmF1bHRzKG4pe3RoaXMuZGVmYXVsdHM9ITEhPT1uP3Qoe30sITAhPT1uP246ZSk6e319fSkuZGVmYXVsdHM9dCh7fSxlKSxufWNsYXNzIHogZXh0ZW5kcyhVKCkpe31leHBvcnR7dyBhcyBhbnksUyBhcyBhcnJheSxGIGFzIGFycmF5T2YsUCBhcyBib29sLHIgYXMgY29uZmlnLFUgYXMgY3JlYXRlVHlwZXMsRCBhcyBjdXN0b20seiBhcyBkZWZhdWx0LFQgYXMgZnJvbVR5cGUseCBhcyBmdW5jLFkgYXMgaW5zdGFuY2VPZixWIGFzIGludGVnZXIsayBhcyBudWxsYWJsZSxFIGFzIG51bWJlcixOIGFzIG9iamVjdCxJIGFzIG9iamVjdE9mLEwgYXMgb25lT2YsQiBhcyBvbmVPZlR5cGUsSiBhcyBzaGFwZSxBIGFzIHN0cmluZyxxIGFzIHN5bWJvbCxqIGFzIHRvVHlwZSxfIGFzIHRvVmFsaWRhYmxlVHlwZSxtIGFzIHZhbGlkYXRlVHlwZX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD12dWUtdHlwZXMubW9kZXJuLmpzLm1hcFxuIiwiaW1wb3J0IHsgVnVlVHlwZVZhbGlkYWJsZURlZiwgVnVlVHlwZXNJbnRlcmZhY2UsIGNyZWF0ZVR5cGVzLCB0b1ZhbGlkYWJsZVR5cGUgfSBmcm9tICd2dWUtdHlwZXMnXHJcbmltcG9ydCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tICd2dWUnXHJcblxyXG50eXBlIFByb3BUeXBlcyA9IFZ1ZVR5cGVzSW50ZXJmYWNlICYge1xyXG4gIHJlYWRvbmx5IHN0eWxlOiBWdWVUeXBlVmFsaWRhYmxlRGVmPENTU1Byb3BlcnRpZXM+XHJcbn1cclxuY29uc3QgbmV3UHJvcFR5cGVzID0gY3JlYXRlVHlwZXMoe1xyXG4gIGZ1bmM6IHVuZGVmaW5lZCxcclxuICBib29sOiB1bmRlZmluZWQsXHJcbiAgc3RyaW5nOiB1bmRlZmluZWQsXHJcbiAgbnVtYmVyOiB1bmRlZmluZWQsXHJcbiAgb2JqZWN0OiB1bmRlZmluZWQsXHJcbiAgaW50ZWdlcjogdW5kZWZpbmVkXHJcbn0pIGFzIFByb3BUeXBlc1xyXG5cclxuY2xhc3MgcHJvcFR5cGVzIGV4dGVuZHMgbmV3UHJvcFR5cGVzIHtcclxuICBzdGF0aWMgZ2V0IHN0eWxlKCkge1xyXG4gICAgcmV0dXJuIHRvVmFsaWRhYmxlVHlwZSgnc3R5bGUnLCB7XHJcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgeyBwcm9wVHlwZXMgfVxyXG4iLCJpbXBvcnQgdmFyaWFibGVzIGZyb20gJ0Avc3R5bGVzL2dsb2JhbC5tb2R1bGUuc2NzcydcclxuXHJcbmV4cG9ydCBjb25zdCB1c2VEZXNpZ24gPSAoKSA9PiB7XHJcbiAgY29uc3Qgc2Nzc1ZhcmlhYmxlcyA9IHZhcmlhYmxlc1xyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gc2NvcGUg57G75ZCNXHJcbiAgICogQHJldHVybnMg6L+U5Zue56m66Ze05ZCNLeexu+WQjVxyXG4gICAqL1xyXG4gIGNvbnN0IGdldFByZWZpeENscyA9IChzY29wZTogc3RyaW5nKSA9PiB7XHJcbiAgICByZXR1cm4gYCR7c2Nzc1ZhcmlhYmxlcy5uYW1lc3BhY2V9LSR7c2NvcGV9YFxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHZhcmlhYmxlczogc2Nzc1ZhcmlhYmxlcyxcclxuICAgIGdldFByZWZpeENsc1xyXG4gIH1cclxufVxyXG4iLCIvKiFcbiAqIEBmb3JtLWNyZWF0ZS9lbGVtZW50LXVpIHYzLjIuOFxuICogKGMpIDIwMTgtMjAyNCB4YWJveVxuICogR2l0aHViIGh0dHBzOi8vZ2l0aHViLmNvbS94YWJveS9mb3JtLWNyZWF0ZVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQsIHRvUmVmLCByZWYsIHdhdGNoLCBjcmVhdGVWTm9kZSwgcmVzb2x2ZUNvbXBvbmVudCwgbWVyZ2VQcm9wcyBhcyBtZXJnZVByb3BzJDEsIG9wZW5CbG9jaywgY3JlYXRlRWxlbWVudEJsb2NrLCBjcmVhdGVFbGVtZW50Vk5vZGUsIGlzVk5vZGUsIG5leHRUaWNrLCBjcmVhdGVUZXh0Vk5vZGUsIG1hcmtSYXcsIHJlYWN0aXZlLCBnZXRDdXJyZW50SW5zdGFuY2UsIHByb3ZpZGUsIGluamVjdCwgdG9SZWZzLCBvbkJlZm9yZU1vdW50LCB3YXRjaEVmZmVjdCwgb25Nb3VudGVkLCBvbkJlZm9yZVVubW91bnQsIG9uVXBkYXRlZCwgY29tcHV0ZWQsIHdpdGhEaXJlY3RpdmVzLCByZXNvbHZlRGlyZWN0aXZlLCBjcmVhdGVBcHAsIGggfSBmcm9tICd2dWUnO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG5cbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHtcbiAgICAgIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuXG4gIHRyeSB7XG4gICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksXG4gICAgICAgIHJlc3VsdDtcblxuICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuXG4gICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgcmV0dXJuIGFycjI7XG59XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbmZ1bmN0aW9uIGdldFNsb3Qoc2xvdHMsIGV4Y2x1ZGUpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHNsb3RzKS5yZWR1Y2UoZnVuY3Rpb24gKGxzdCwgbmFtZSkge1xuICAgIGlmICghZXhjbHVkZSB8fCBleGNsdWRlLmluZGV4T2YobmFtZSkgPT09IC0xKSB7XG4gICAgICBsc3QucHVzaChzbG90c1tuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxzdDtcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW251bGwsIHVuZGVmaW5lZCwgJyddLmluZGV4T2YodmFsdWUpID4gLTEgPyBbXSA6IFt2YWx1ZV07XG59XG5cbnZhciBOQU1FJDggPSAnZmNDaGVja2JveCc7XG52YXIgQ2hlY2tib3ggPSBkZWZpbmVDb21wb25lbnQoe1xuICBuYW1lOiBOQU1FJDgsXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG4gIHByb3BzOiB7XG4gICAgZm9ybUNyZWF0ZUluamVjdDogT2JqZWN0LFxuICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSxcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgaW5wdXQ6IEJvb2xlYW4sXG4gICAgaW5wdXRWYWx1ZTogU3RyaW5nXG4gIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2ZjLmVsJ10sXG4gIHNldHVwOiBmdW5jdGlvbiBzZXR1cChwcm9wcywgXykge1xuICAgIHZhciBvcHRpb25zID0gdG9SZWYocHJvcHMuZm9ybUNyZWF0ZUluamVjdCwgJ29wdGlvbnMnLCBbXSk7XG4gICAgdmFyIHZhbHVlID0gdG9SZWYocHJvcHMsICdtb2RlbFZhbHVlJyk7XG4gICAgdmFyIGlucHV0VmFsdWUgPSB0b1JlZihwcm9wcywgJ2lucHV0VmFsdWUnLCAnJyk7XG4gICAgdmFyIGN1c3RvbVZhbHVlID0gcmVmKGlucHV0VmFsdWUudmFsdWUpO1xuICAgIHZhciBpbnB1dCA9IHRvUmVmKHByb3BzLCAnaW5wdXQnLCBmYWxzZSk7XG5cbiAgICB2YXIgdXBkYXRlQ3VzdG9tVmFsdWUgPSBmdW5jdGlvbiB1cGRhdGVDdXN0b21WYWx1ZShuKSB7XG4gICAgICB2YXIgX3ZhbHVlID0gX3RvQ29uc3VtYWJsZUFycmF5KHRvQXJyYXkodmFsdWUudmFsdWUpKTtcblxuICAgICAgdmFyIGlkeCA9IF92YWx1ZS5pbmRleE9mKGN1c3RvbVZhbHVlLnZhbHVlKTtcblxuICAgICAgY3VzdG9tVmFsdWUudmFsdWUgPSBuO1xuXG4gICAgICBpZiAoaWR4ID4gLTEpIHtcbiAgICAgICAgX3ZhbHVlLnNwbGljZShpZHgsIDEpO1xuXG4gICAgICAgIF92YWx1ZS5wdXNoKG4pO1xuXG4gICAgICAgIG9uSW5wdXQoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2F0Y2goaW5wdXRWYWx1ZSwgZnVuY3Rpb24gKG4pIHtcbiAgICAgIGlmICghaW5wdXQudmFsdWUpIHtcbiAgICAgICAgY3VzdG9tVmFsdWUudmFsdWUgPSBuO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVDdXN0b21WYWx1ZShuKTtcbiAgICB9KTtcblxuICAgIHZhciBfb3B0aW9ucyA9IGZ1bmN0aW9uIF9vcHRpb25zKCkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkob3B0aW9ucy52YWx1ZSkgPyBvcHRpb25zLnZhbHVlIDogW107XG4gICAgfTtcblxuICAgIHZhciBvbklucHV0ID0gZnVuY3Rpb24gb25JbnB1dChuKSB7XG4gICAgICBfLmVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgbik7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBvcHRpb25zOiBfb3B0aW9ucyxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIG9uSW5wdXQ6IG9uSW5wdXQsXG4gICAgICB1cGRhdGVDdXN0b21WYWx1ZTogdXBkYXRlQ3VzdG9tVmFsdWUsXG4gICAgICBtYWtlSW5wdXQ6IGZ1bmN0aW9uIG1ha2VJbnB1dChUeXBlKSB7XG4gICAgICAgIGlmICghaW5wdXQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKFR5cGUsIHtcbiAgICAgICAgICBcInZhbHVlXCI6IGN1c3RvbVZhbHVlLnZhbHVlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICBcImxhYmVsXCI6IGN1c3RvbVZhbHVlLnZhbHVlIHx8IHVuZGVmaW5lZFxuICAgICAgICB9LCB7XG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICAgICAgcmV0dXJuIFtjcmVhdGVWTm9kZShyZXNvbHZlQ29tcG9uZW50KFwiRWxJbnB1dFwiKSwge1xuICAgICAgICAgICAgICBcInNpemVcIjogXCJzbWFsbFwiLFxuICAgICAgICAgICAgICBcIm1vZGVsVmFsdWVcIjogY3VzdG9tVmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiB1cGRhdGVDdXN0b21WYWx1ZVxuICAgICAgICAgICAgfSwgbnVsbCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJCRzbG90cyRkZWZhdWx0LFxuICAgICAgICBfdGhpcyQkc2xvdHMsXG4gICAgICAgIF90aGlzID0gdGhpcztcblxuICAgIHZhciBuYW1lID0gdGhpcy50eXBlID09PSAnYnV0dG9uJyA/ICdFbENoZWNrYm94QnV0dG9uJyA6ICdFbENoZWNrYm94JztcbiAgICB2YXIgVHlwZSA9IHJlc29sdmVDb21wb25lbnQobmFtZSk7XG4gICAgcmV0dXJuIGNyZWF0ZVZOb2RlKHJlc29sdmVDb21wb25lbnQoXCJFbENoZWNrYm94R3JvdXBcIiksIG1lcmdlUHJvcHMkMSh0aGlzLiRhdHRycywge1xuICAgICAgXCJtb2RlbFZhbHVlXCI6IHRoaXMudmFsdWUsXG4gICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogdGhpcy5vbklucHV0LFxuICAgICAgXCJyZWZcIjogXCJlbFwiXG4gICAgfSksIF9vYmplY3RTcHJlYWQyKHtcbiAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFtfdGhpcy5vcHRpb25zKCkubWFwKGZ1bmN0aW9uIChvcHQsIGluZGV4KSB7XG4gICAgICAgICAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZDIoe30sIG9wdCk7XG5cbiAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcbiAgICAgICAgICB2YXIgbGFiZWwgPSBwcm9wcy5sYWJlbDtcbiAgICAgICAgICBkZWxldGUgcHJvcHMudmFsdWU7XG4gICAgICAgICAgZGVsZXRlIHByb3BzLmxhYmVsO1xuICAgICAgICAgIHJldHVybiBjcmVhdGVWTm9kZShUeXBlLCBtZXJnZVByb3BzJDEocHJvcHMsIHtcbiAgICAgICAgICAgIFwibGFiZWxcIjogdmFsdWUsXG4gICAgICAgICAgICBcInZhbHVlXCI6IHZhbHVlLFxuICAgICAgICAgICAgXCJrZXlcIjogbmFtZSArIGluZGV4ICsgJy0nICsgdmFsdWVcbiAgICAgICAgICB9KSwge1xuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICAgICAgICByZXR1cm4gW2xhYmVsIHx8IHZhbHVlIHx8ICcnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksIChfdGhpcyQkc2xvdHMkZGVmYXVsdCA9IChfdGhpcyQkc2xvdHMgPSBfdGhpcy4kc2xvdHMpW1wiZGVmYXVsdFwiXSkgPT09IG51bGwgfHwgX3RoaXMkJHNsb3RzJGRlZmF1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJCRzbG90cyRkZWZhdWx0LmNhbGwoX3RoaXMkJHNsb3RzKSwgX3RoaXMubWFrZUlucHV0KFR5cGUpXTtcbiAgICAgIH1cbiAgICB9LCBnZXRTbG90KHRoaXMuJHNsb3RzLCBbJ2RlZmF1bHQnXSkpKTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB0aGlzLiRlbWl0KCdmYy5lbCcsIHRoaXMuJHJlZnMuZWwpO1xuICB9XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9taXR0XG5mdW5jdGlvbiBNaXR0KGFsbCkge1xuICBhbGwgPSBhbGwgfHwgbmV3IE1hcCgpO1xuICB2YXIgbWl0dCA9IHtcbiAgICAkb246IGZ1bmN0aW9uICRvbih0eXBlLCBoYW5kbGVyKSB7XG4gICAgICB2YXIgaGFuZGxlcnMgPSBhbGwuZ2V0KHR5cGUpO1xuICAgICAgdmFyIGFkZGVkID0gaGFuZGxlcnMgJiYgaGFuZGxlcnMucHVzaChoYW5kbGVyKTtcblxuICAgICAgaWYgKCFhZGRlZCkge1xuICAgICAgICBhbGwuc2V0KHR5cGUsIFtoYW5kbGVyXSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAkb25jZTogZnVuY3Rpb24gJG9uY2UodHlwZSwgaGFuZGxlcikge1xuICAgICAgaGFuZGxlci5fb25jZSA9IHRydWU7XG4gICAgICBtaXR0LiRvbih0eXBlLCBoYW5kbGVyKTtcbiAgICB9LFxuICAgICRvZmY6IGZ1bmN0aW9uICRvZmYodHlwZSwgaGFuZGxlcikge1xuICAgICAgdmFyIGhhbmRsZXJzID0gYWxsLmdldCh0eXBlKTtcblxuICAgICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICAgIGhhbmRsZXJzLnNwbGljZShoYW5kbGVycy5pbmRleE9mKGhhbmRsZXIpID4+PiAwLCAxKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICRlbWl0OiBmdW5jdGlvbiAkZW1pdCh0eXBlKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICAoYWxsLmdldCh0eXBlKSB8fCBbXSkuc2xpY2UoKS5tYXAoZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgaWYgKGhhbmRsZXIuX29uY2UpIHtcbiAgICAgICAgICBtaXR0LiRvZmYodHlwZSwgaGFuZGxlcik7XG4gICAgICAgICAgZGVsZXRlIGhhbmRsZXIuX29uY2U7XG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVyLmFwcGx5KHZvaWQgMCwgYXJncyk7XG4gICAgICB9KTtcbiAgICAgIChhbGwuZ2V0KCcqJykgfHwgW10pLnNsaWNlKCkubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIGhhbmRsZXIodHlwZSwgYXJncyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBtaXR0O1xufVxuXG5mdW5jdGlvbiBzdHlsZUluamVjdChjc3MsIHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBpbnNlcnRBdCA9IHJlZi5pbnNlcnRBdDtcblxuICBpZiAoIWNzcyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybjsgfVxuXG4gIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcblxuICBpZiAoaW5zZXJ0QXQgPT09ICd0b3AnKSB7XG4gICAgaWYgKGhlYWQuZmlyc3RDaGlsZCkge1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbnZhciBjc3NfMjQ4eiQzID0gXCIuX2ZjLWZyYW1lIC5fZmMtZmlsZXMgaW1ne2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOnRvcDt3aWR0aDoxMDAlfS5fZmMtZnJhbWUgLl9mYy11cGxvYWQtYnRue2JvcmRlcjoxcHggZGFzaGVkICNjMGNjZGE7Y3Vyc29yOnBvaW50ZXJ9Ll9mYy1mcmFtZS5fZmMtZGlzYWJsZWQgLl9mYy11cGxvYWQtYnRuLC5fZmMtZnJhbWUuX2ZjLWRpc2FibGVkIC5lbC1idXR0b257Y29sb3I6Izk5OTtjdXJzb3I6bm90LWFsbG93ZWQhaW1wb3J0YW50fS5fZmMtZnJhbWUgLl9mYy11cGxvYWQtY292ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC42KTtib3R0b206MDtsZWZ0OjA7b3BhY2l0eTowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzOy1vLXRyYW5zaXRpb246b3BhY2l0eSAuM3M7dHJhbnNpdGlvbjpvcGFjaXR5IC4zc30uX2ZjLWZyYW1lIC5fZmMtdXBsb2FkLWNvdmVyIGl7Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MjBweDttYXJnaW46MCAycHh9Ll9mYy1mcmFtZSAuX2ZjLWZpbGVzOmhvdmVyIC5fZmMtdXBsb2FkLWNvdmVye29wYWNpdHk6MX0uX2ZjLWZyYW1lIC5lbC11cGxvYWR7ZGlzcGxheTpibG9ja30uX2ZjLWZyYW1lIC5fZmMtdXBsb2FkLWljb257Y3Vyc29yOnBvaW50ZXJ9Ll9mYy1maWxlcywuX2ZjLWZyYW1lIC5fZmMtdXBsb2FkLWJ0bntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjYzBjY2RhO2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzoycHggMnB4IDVweCByZ2JhKDAsMCwwLC4xKTtib3gtc2hhZG93OjJweCAycHggNXB4IHJnYmEoMCwwLDAsLjEpOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6NThweDtsaW5lLWhlaWdodDo1OHB4O21hcmdpbi1yaWdodDo0cHg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjU4cHh9XCI7XG5zdHlsZUluamVjdChjc3NfMjQ4eiQzKTtcblxudmFyIHNjcmlwdCQ2ID0ge1xuICBuYW1lOiAnSWNvbkNpcmNsZUNsb3NlJ1xufTtcblxudmFyIF9ob2lzdGVkXzEkNiA9IHtcbiAgXCJjbGFzc1wiOiBcImljb25cIixcbiAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbn07XG5cbnZhciBfaG9pc3RlZF8yJDYgPSAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7XG4gIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gIGQ6IFwiTTQ2Ni43NTIgNTEybC05MC40OTYtOTAuNDk2YTMyIDMyIDAgMDE0NS4yNDgtNDUuMjQ4TDUxMiA0NjYuNzUybDkwLjQ5Ni05MC40OTZhMzIgMzIgMCAxMTQ1LjI0OCA0NS4yNDhMNTU3LjI0OCA1MTJsOTAuNDk2IDkwLjQ5NmEzMiAzMiAwIDExLTQ1LjI0OCA0NS4yNDhMNTEyIDU1Ny4yNDhsLTkwLjQ5NiA5MC40OTZhMzIgMzIgMCAwMS00NS4yNDgtNDUuMjQ4TDQ2Ni43NTIgNTEyelwiXG59LCBudWxsLCAtMSk7XG5cbnZhciBfaG9pc3RlZF8zJDYgPSAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7XG4gIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gIGQ6IFwiTTUxMiA4OTZhMzg0IDM4NCAwIDEwMC03NjggMzg0IDM4NCAwIDAwMCA3Njh6bTAgNjRhNDQ4IDQ0OCAwIDExMC04OTYgNDQ4IDQ0OCAwIDAxMCA4OTZ6XCJcbn0sIG51bGwsIC0xKTtcblxudmFyIF9ob2lzdGVkXzQgPSBbX2hvaXN0ZWRfMiQ2LCBfaG9pc3RlZF8zJDZdO1xuZnVuY3Rpb24gcmVuZGVyJDYoX2N0eCwgX2NhY2hlLCAkcHJvcHMsICRzZXR1cCwgJGRhdGEsICRvcHRpb25zKSB7XG4gIHJldHVybiBvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKFwic3ZnXCIsIF9ob2lzdGVkXzEkNiwgX2hvaXN0ZWRfNCk7XG59XG5cbnNjcmlwdCQ2LnJlbmRlciA9IHJlbmRlciQ2O1xuXG52YXIgc2NyaXB0JDUgPSB7XG4gIG5hbWU6ICdJY29uRG9jdW1lbnQnXG59O1xuXG52YXIgX2hvaXN0ZWRfMSQ1ID0ge1xuICBcImNsYXNzXCI6IFwiaWNvblwiLFxuICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufTtcblxudmFyIF9ob2lzdGVkXzIkNSA9IC8qI19fUFVSRV9fKi9jcmVhdGVFbGVtZW50Vk5vZGUoXCJwYXRoXCIsIHtcbiAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgZDogXCJNODMyIDM4NEg1NzZWMTI4SDE5MnY3NjhoNjQwVjM4NHptLTI2LjQ5Ni02NEw2NDAgMTU0LjQ5NlYzMjBoMTY1LjUwNHpNMTYwIDY0aDQ4MGwyNTYgMjU2djYwOGEzMiAzMiAwIDAxLTMyIDMySDE2MGEzMiAzMiAwIDAxLTMyLTMyVjk2YTMyIDMyIDAgMDEzMi0zMnptMTYwIDQ0OGgzODR2NjRIMzIwdi02NHptMC0xOTJoMTYwdjY0SDMyMHYtNjR6bTAgMzg0aDM4NHY2NEgzMjB2LTY0elwiXG59LCBudWxsLCAtMSk7XG5cbnZhciBfaG9pc3RlZF8zJDUgPSBbX2hvaXN0ZWRfMiQ1XTtcbmZ1bmN0aW9uIHJlbmRlciQ1KF9jdHgsIF9jYWNoZSwgJHByb3BzLCAkc2V0dXAsICRkYXRhLCAkb3B0aW9ucykge1xuICByZXR1cm4gb3BlbkJsb2NrKCksIGNyZWF0ZUVsZW1lbnRCbG9jayhcInN2Z1wiLCBfaG9pc3RlZF8xJDUsIF9ob2lzdGVkXzMkNSk7XG59XG5cbnNjcmlwdCQ1LnJlbmRlciA9IHJlbmRlciQ1O1xuXG52YXIgc2NyaXB0JDQgPSB7XG4gIG5hbWU6ICdJY29uRGVsZXRlJ1xufTtcblxudmFyIF9ob2lzdGVkXzEkNCA9IHtcbiAgXCJjbGFzc1wiOiBcImljb25cIixcbiAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbn07XG5cbnZhciBfaG9pc3RlZF8yJDQgPSAvKiNfX1BVUkVfXyovY3JlYXRlRWxlbWVudFZOb2RlKFwicGF0aFwiLCB7XG4gIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gIGQ6IFwiTTE2MCAyNTZIOTZhMzIgMzIgMCAwMTAtNjRoMjU2Vjk1LjkzNmEzMiAzMiAwIDAxMzItMzJoMjU2YTMyIDMyIDAgMDEzMiAzMlYxOTJoMjU2YTMyIDMyIDAgMTEwIDY0aC02NHY2NzJhMzIgMzIgMCAwMS0zMiAzMkgxOTJhMzIgMzIgMCAwMS0zMi0zMlYyNTZ6bTQ0OC02NHYtNjRINDE2djY0aDE5MnpNMjI0IDg5Nmg1NzZWMjU2SDIyNHY2NDB6bTE5Mi0xMjhhMzIgMzIgMCAwMS0zMi0zMlY0MTZhMzIgMzIgMCAwMTY0IDB2MzIwYTMyIDMyIDAgMDEtMzIgMzJ6bTE5MiAwYTMyIDMyIDAgMDEtMzItMzJWNDE2YTMyIDMyIDAgMDE2NCAwdjMyMGEzMiAzMiAwIDAxLTMyIDMyelwiXG59LCBudWxsLCAtMSk7XG5cbnZhciBfaG9pc3RlZF8zJDQgPSBbX2hvaXN0ZWRfMiQ0XTtcbmZ1bmN0aW9uIHJlbmRlciQ0KF9jdHgsIF9jYWNoZSwgJHByb3BzLCAkc2V0dXAsICRkYXRhLCAkb3B0aW9ucykge1xuICByZXR1cm4gb3BlbkJsb2NrKCksIGNyZWF0ZUVsZW1lbnRCbG9jayhcInN2Z1wiLCBfaG9pc3RlZF8xJDQsIF9ob2lzdGVkXzMkNCk7XG59XG5cbnNjcmlwdCQ0LnJlbmRlciA9IHJlbmRlciQ0O1xuXG52YXIgc2NyaXB0JDMgPSB7XG4gIG5hbWU6ICdJY29uVmlldydcbn07XG5cbnZhciBfaG9pc3RlZF8xJDMgPSB7XG4gIFwiY2xhc3NcIjogXCJpY29uXCIsXG4gIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59O1xuXG52YXIgX2hvaXN0ZWRfMiQzID0gLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICBkOiBcIk01MTIgMTYwYzMyMCAwIDUxMiAzNTIgNTEyIDM1MlM4MzIgODY0IDUxMiA4NjQgMCA1MTIgMCA1MTJzMTkyLTM1MiA1MTItMzUyem0wIDY0Yy0yMjUuMjggMC0zODQuMTI4IDIwOC4wNjQtNDM2LjggMjg4IDUyLjYwOCA3OS44NzIgMjExLjQ1NiAyODggNDM2LjggMjg4IDIyNS4yOCAwIDM4NC4xMjgtMjA4LjA2NCA0MzYuOC0yODgtNTIuNjA4LTc5Ljg3Mi0yMTEuNDU2LTI4OC00MzYuOC0yODh6bTAgNjRhMjI0IDIyNCAwIDExMCA0NDggMjI0IDIyNCAwIDAxMC00NDh6bTAgNjRhMTYwLjE5MiAxNjAuMTkyIDAgMDAtMTYwIDE2MGMwIDg4LjE5MiA3MS43NDQgMTYwIDE2MCAxNjBzMTYwLTcxLjgwOCAxNjAtMTYwLTcxLjc0NC0xNjAtMTYwLTE2MHpcIlxufSwgbnVsbCwgLTEpO1xuXG52YXIgX2hvaXN0ZWRfMyQzID0gW19ob2lzdGVkXzIkM107XG5mdW5jdGlvbiByZW5kZXIkMyhfY3R4LCBfY2FjaGUsICRwcm9wcywgJHNldHVwLCAkZGF0YSwgJG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wZW5CbG9jaygpLCBjcmVhdGVFbGVtZW50QmxvY2soXCJzdmdcIiwgX2hvaXN0ZWRfMSQzLCBfaG9pc3RlZF8zJDMpO1xufVxuXG5zY3JpcHQkMy5yZW5kZXIgPSByZW5kZXIkMztcblxudmFyIHNjcmlwdCQyID0ge1xuICBuYW1lOiAnSWNvbkZvbGRlck9wZW5lZCdcbn07XG5cbnZhciBfaG9pc3RlZF8xJDIgPSB7XG4gIFwiY2xhc3NcIjogXCJpY29uXCIsXG4gIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59O1xuXG52YXIgX2hvaXN0ZWRfMiQyID0gLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICBkOiBcIk04NzguMDggNDQ4SDI0MS45MmwtOTYgMzg0aDYzNi4xNmw5Ni0zODR6TTgzMiAzODR2LTY0SDQ4NS43NkwzNTcuNTA0IDE5MkgxMjh2NDQ4bDU3LjkyLTIzMS43NDRBMzIgMzIgMCAwMTIxNi45NiAzODRIODMyem0tMjQuOTYgNTEySDk2YTMyIDMyIDAgMDEtMzItMzJWMTYwYTMyIDMyIDAgMDEzMi0zMmgyODcuODcybDEyOC4zODQgMTI4SDg2NGEzMiAzMiAwIDAxMzIgMzJ2OTZoMjMuMDRhMzIgMzIgMCAwMTMxLjA0IDM5Ljc0NGwtMTEyIDQ0OEEzMiAzMiAwIDAxODA3LjA0IDg5NnpcIlxufSwgbnVsbCwgLTEpO1xuXG52YXIgX2hvaXN0ZWRfMyQyID0gW19ob2lzdGVkXzIkMl07XG5mdW5jdGlvbiByZW5kZXIkMihfY3R4LCBfY2FjaGUsICRwcm9wcywgJHNldHVwLCAkZGF0YSwgJG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wZW5CbG9jaygpLCBjcmVhdGVFbGVtZW50QmxvY2soXCJzdmdcIiwgX2hvaXN0ZWRfMSQyLCBfaG9pc3RlZF8zJDIpO1xufVxuXG5zY3JpcHQkMi5yZW5kZXIgPSByZW5kZXIkMjtcblxuZnVuY3Rpb24gX2lzU2xvdChzKSB7XG4gIHJldHVybiB0eXBlb2YgcyA9PT0gJ2Z1bmN0aW9uJyB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocykgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmICFpc1ZOb2RlKHMpO1xufVxuXG52YXIgTkFNRSQ3ID0gJ2ZjRnJhbWUnO1xudmFyIEZyYW1lID0gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogTkFNRSQ3LFxuICBwcm9wczoge1xuICAgIHR5cGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIFwiZGVmYXVsdFwiOiAnaW5wdXQnXG4gICAgfSxcbiAgICBmaWVsZDogU3RyaW5nLFxuICAgIGhlbHBlcjoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIFwiZGVmYXVsdFwiOiB0cnVlXG4gICAgfSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgIH0sXG4gICAgc3JjOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgaWNvbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgXCJkZWZhdWx0XCI6ICdJY29uRm9sZGVyT3BlbmVkJ1xuICAgIH0sXG4gICAgd2lkdGg6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIFwiZGVmYXVsdFwiOiAnNTAwcHgnXG4gICAgfSxcbiAgICBoZWlnaHQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIFwiZGVmYXVsdFwiOiAnMzcwcHgnXG4gICAgfSxcbiAgICBtYXhMZW5ndGg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIFwiZGVmYXVsdFwiOiAwXG4gICAgfSxcbiAgICBva0J0blRleHQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIFwiZGVmYXVsdFwiOiAn56Gu5a6aJ1xuICAgIH0sXG4gICAgY2xvc2VCdG5UZXh0OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBcImRlZmF1bHRcIjogJ+WFs+mXrSdcbiAgICB9LFxuICAgIG1vZGFsVGl0bGU6IFN0cmluZyxcbiAgICBoYW5kbGVJY29uOiB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIFwiZGVmYXVsdFwiOiB1bmRlZmluZWRcbiAgICB9LFxuICAgIHRpdGxlOiBTdHJpbmcsXG4gICAgYWxsb3dSZW1vdmU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBcImRlZmF1bHRcIjogdHJ1ZVxuICAgIH0sXG4gICAgb25PcGVuOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHt9XG4gICAgfSxcbiAgICBvbk9rOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHt9XG4gICAgfSxcbiAgICBvbkNhbmNlbDoge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBcImRlZmF1bHRcIjogZnVuY3Rpb24gX2RlZmF1bHQoKSB7fVxuICAgIH0sXG4gICAgb25Mb2FkOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHt9XG4gICAgfSxcbiAgICBvbkJlZm9yZVJlbW92ZToge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBcImRlZmF1bHRcIjogZnVuY3Rpb24gX2RlZmF1bHQoKSB7fVxuICAgIH0sXG4gICAgb25SZW1vdmU6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge31cbiAgICB9LFxuICAgIG9uSGFuZGxlOiBGdW5jdGlvbixcbiAgICBtb2RhbDoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgfSxcbiAgICBzcmNLZXk6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgbW9kZWxWYWx1ZTogW0FycmF5LCBTdHJpbmcsIE51bWJlciwgT2JqZWN0XSxcbiAgICBwcmV2aWV3TWFzazogdW5kZWZpbmVkLFxuICAgIGZvb3Rlcjoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIFwiZGVmYXVsdFwiOiB0cnVlXG4gICAgfSxcbiAgICByZWxvYWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBcImRlZmF1bHRcIjogdHJ1ZVxuICAgIH0sXG4gICAgY2xvc2VCdG46IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBcImRlZmF1bHRcIjogdHJ1ZVxuICAgIH0sXG4gICAgb2tCdG46IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBcImRlZmF1bHRcIjogdHJ1ZVxuICAgIH0sXG4gICAgZm9ybUNyZWF0ZUluamVjdDogT2JqZWN0XG4gIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZSddLFxuICBjb21wb25lbnRzOiB7XG4gICAgSWNvbkZvbGRlck9wZW5lZDogc2NyaXB0JDIsXG4gICAgSWNvblZpZXc6IHNjcmlwdCQzXG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGVMaXN0OiB0b0FycmF5KHRoaXMubW9kZWxWYWx1ZSksXG4gICAgICBwcmV2aWV3VmlzaWJsZTogZmFsc2UsXG4gICAgICBmcmFtZVZpc2libGU6IGZhbHNlLFxuICAgICAgcHJldmlld0ltYWdlOiAnJyxcbiAgICAgIGJ1czogbmV3IE1pdHQoKVxuICAgIH07XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZTogZnVuY3Rpb24gbW9kZWxWYWx1ZShuKSB7XG4gICAgICB0aGlzLmZpbGVMaXN0ID0gdG9BcnJheShuKTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICB0aGlzLmNsb3NlTW9kZWwodHJ1ZSk7XG4gICAgfSxcbiAgICBjbG9zZU1vZGVsOiBmdW5jdGlvbiBjbG9zZU1vZGVsKGNsb3NlKSB7XG4gICAgICB0aGlzLmJ1cy4kZW1pdChjbG9zZSA/ICckY2xvc2UnIDogJyRvaycpO1xuXG4gICAgICBpZiAodGhpcy5yZWxvYWQpIHtcbiAgICAgICAgdGhpcy5idXMuJG9mZignJG9rJyk7XG4gICAgICAgIHRoaXMuYnVzLiRvZmYoJyRjbG9zZScpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZyYW1lVmlzaWJsZSA9IGZhbHNlO1xuICAgIH0sXG4gICAgaGFuZGxlQ2FuY2VsOiBmdW5jdGlvbiBoYW5kbGVDYW5jZWwoKSB7XG4gICAgICB0aGlzLnByZXZpZXdWaXNpYmxlID0gZmFsc2U7XG4gICAgfSxcbiAgICBzaG93TW9kZWw6IGZ1bmN0aW9uIHNob3dNb2RlbCgpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IGZhbHNlID09PSB0aGlzLm9uT3BlbigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mcmFtZVZpc2libGUgPSB0cnVlO1xuICAgIH0sXG4gICAgaW5wdXQ6IGZ1bmN0aW9uIGlucHV0KCkge1xuICAgICAgdmFyIG4gPSB0aGlzLmZpbGVMaXN0O1xuICAgICAgdmFyIHZhbCA9IHRoaXMubWF4TGVuZ3RoID09PSAxID8gblswXSB8fCAnJyA6IG47XG4gICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbCk7XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWwpO1xuICAgIH0sXG4gICAgbWFrZUlucHV0OiBmdW5jdGlvbiBtYWtlSW5wdXQoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICByZXR1cm4gY3JlYXRlVk5vZGUocmVzb2x2ZUNvbXBvbmVudChcIkVsSW5wdXRcIiksIG1lcmdlUHJvcHMkMSh7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgbW9kZWxWYWx1ZTogdGhpcy5maWxlTGlzdC5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuZ2V0U3JjKHYpO1xuICAgICAgICB9KS50b1N0cmluZygpLFxuICAgICAgICByZWFkb25seTogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBcImtleVwiOiAxXG4gICAgICB9KSwge1xuICAgICAgICBhcHBlbmQ6IGZ1bmN0aW9uIGFwcGVuZCgpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlVk5vZGUocmVzb2x2ZUNvbXBvbmVudChcIkVsQnV0dG9uXCIpLCB7XG4gICAgICAgICAgICBcImljb25cIjogcmVzb2x2ZUNvbXBvbmVudChfdGhpcy5pY29uKSxcbiAgICAgICAgICAgIFwib25DbGlja1wiOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuc2hvd01vZGVsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgbnVsbCk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1ZmZpeDogZnVuY3Rpb24gc3VmZml4KCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5maWxlTGlzdC5sZW5ndGggJiYgIV90aGlzLmRpc2FibGVkID8gY3JlYXRlVk5vZGUocmVzb2x2ZUNvbXBvbmVudChcIkVsSWNvblwiKSwge1xuICAgICAgICAgICAgXCJjbGFzc1wiOiBcImVsLWlucHV0X19pY29uIF9mYy11cGxvYWQtaWNvblwiLFxuICAgICAgICAgICAgXCJvbkNsaWNrXCI6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgICAgIF90aGlzLmZpbGVMaXN0ID0gW107XG5cbiAgICAgICAgICAgICAgX3RoaXMuaW5wdXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbY3JlYXRlVk5vZGUoc2NyaXB0JDYsIG51bGwsIG51bGwpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbWFrZUdyb3VwOiBmdW5jdGlvbiBtYWtlR3JvdXAoY2hpbGRyZW4pIHtcbiAgICAgIGlmICghdGhpcy5tYXhMZW5ndGggfHwgdGhpcy5maWxlTGlzdC5sZW5ndGggPCB0aGlzLm1heExlbmd0aCkge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKHRoaXMubWFrZUJ0bigpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKFwiZGl2XCIsIHtcbiAgICAgICAgXCJrZXlcIjogMlxuICAgICAgfSwgW2NoaWxkcmVuXSk7XG4gICAgfSxcbiAgICBtYWtlSXRlbTogZnVuY3Rpb24gbWFrZUl0ZW0oaW5kZXgsIGNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gY3JlYXRlVk5vZGUoXCJkaXZcIiwge1xuICAgICAgICBcImNsYXNzXCI6IFwiX2ZjLWZpbGVzXCIsXG4gICAgICAgIFwia2V5XCI6ICczJyArIGluZGV4XG4gICAgICB9LCBbY2hpbGRyZW5dKTtcbiAgICB9LFxuICAgIHZhbGlkOiBmdW5jdGlvbiB2YWxpZChmKSB7XG4gICAgICB2YXIgZmllbGQgPSB0aGlzLmZvcm1DcmVhdGVJbmplY3QuZmllbGQgfHwgdGhpcy5maWVsZDtcblxuICAgICAgaWYgKGZpZWxkICYmIGYgIT09IGZpZWxkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignW2ZyYW1lXeaXoOaViOeahOWtl+auteWAvCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbWFrZUljb25zOiBmdW5jdGlvbiBtYWtlSWNvbnModmFsLCBpbmRleCkge1xuICAgICAgaWYgKHRoaXMuaGFuZGxlSWNvbiAhPT0gZmFsc2UgfHwgdGhpcy5hbGxvd1JlbW92ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB2YXIgaWNvbnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy50eXBlICE9PSAnZmlsZScgJiYgdGhpcy5oYW5kbGVJY29uICE9PSBmYWxzZSB8fCB0aGlzLnR5cGUgPT09ICdmaWxlJyAmJiB0aGlzLmhhbmRsZUljb24pIHtcbiAgICAgICAgICBpY29ucy5wdXNoKHRoaXMubWFrZUhhbmRsZUljb24odmFsLCBpbmRleCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dSZW1vdmUpIHtcbiAgICAgICAgICBpY29ucy5wdXNoKHRoaXMubWFrZVJlbW92ZUljb24odmFsLCBpbmRleCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKFwiZGl2XCIsIHtcbiAgICAgICAgICBcImNsYXNzXCI6IFwiX2ZjLXVwbG9hZC1jb3ZlclwiLFxuICAgICAgICAgIFwia2V5XCI6IDRcbiAgICAgICAgfSwgW2ljb25zXSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtYWtlSGFuZGxlSWNvbjogZnVuY3Rpb24gbWFrZUhhbmRsZUljb24odmFsLCBpbmRleCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBUeXBlID0gcmVzb2x2ZUNvbXBvbmVudCh0aGlzLmhhbmRsZUljb24gPT09IHRydWUgfHwgdGhpcy5oYW5kbGVJY29uID09PSB1bmRlZmluZWQgPyAnaWNvbi12aWV3JyA6IHRoaXMuaGFuZGxlSWNvbik7XG4gICAgICByZXR1cm4gY3JlYXRlVk5vZGUocmVzb2x2ZUNvbXBvbmVudChcIkVsSWNvblwiKSwge1xuICAgICAgICBcIm9uQ2xpY2tcIjogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLmhhbmRsZUNsaWNrKHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIFwia2V5XCI6ICc1JyArIGluZGV4XG4gICAgICB9LCB7XG4gICAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgICByZXR1cm4gW2NyZWF0ZVZOb2RlKFR5cGUsIG51bGwsIG51bGwpXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBtYWtlUmVtb3ZlSWNvbjogZnVuY3Rpb24gbWFrZVJlbW92ZUljb24odmFsLCBpbmRleCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHJldHVybiBjcmVhdGVWTm9kZShyZXNvbHZlQ29tcG9uZW50KFwiRWxJY29uXCIpLCB7XG4gICAgICAgIFwib25DbGlja1wiOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMuaGFuZGxlUmVtb3ZlKHZhbCk7XG4gICAgICAgIH0sXG4gICAgICAgIFwia2V5XCI6ICc2JyArIGluZGV4XG4gICAgICB9LCB7XG4gICAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgICByZXR1cm4gW2NyZWF0ZVZOb2RlKHNjcmlwdCQ0LCBudWxsLCBudWxsKV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbWFrZUZpbGVzOiBmdW5jdGlvbiBtYWtlRmlsZXMoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgcmV0dXJuIHRoaXMubWFrZUdyb3VwKHRoaXMuZmlsZUxpc3QubWFwKGZ1bmN0aW9uIChzcmMsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdGhpczQubWFrZUl0ZW0oaW5kZXgsIFtjcmVhdGVWTm9kZShyZXNvbHZlQ29tcG9uZW50KFwiRWxJY29uXCIpLCB7XG4gICAgICAgICAgXCJvbkNsaWNrXCI6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0LmhhbmRsZUNsaWNrKHNyYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICAgICAgcmV0dXJuIFtjcmVhdGVWTm9kZShzY3JpcHQkNSwgbnVsbCwgbnVsbCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksIF90aGlzNC5tYWtlSWNvbnMoc3JjLCBpbmRleCldKTtcbiAgICAgIH0pKTtcbiAgICB9LFxuICAgIG1ha2VJbWFnZXM6IGZ1bmN0aW9uIG1ha2VJbWFnZXMoKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgcmV0dXJuIHRoaXMubWFrZUdyb3VwKHRoaXMuZmlsZUxpc3QubWFwKGZ1bmN0aW9uIChzcmMsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdGhpczUubWFrZUl0ZW0oaW5kZXgsIFtjcmVhdGVWTm9kZShcImltZ1wiLCB7XG4gICAgICAgICAgXCJzcmNcIjogX3RoaXM1LmdldFNyYyhzcmMpXG4gICAgICAgIH0sIG51bGwpLCBfdGhpczUubWFrZUljb25zKHNyYywgaW5kZXgpXSk7XG4gICAgICB9KSk7XG4gICAgfSxcbiAgICBtYWtlQnRuOiBmdW5jdGlvbiBtYWtlQnRuKCkge1xuICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICAgIHZhciBUeXBlID0gcmVzb2x2ZUNvbXBvbmVudCh0aGlzLmljb24pO1xuICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKFwiZGl2XCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcIl9mYy11cGxvYWQtYnRuXCIsXG4gICAgICAgIFwib25DbGlja1wiOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczYuc2hvd01vZGVsKCk7XG4gICAgICAgIH0sXG4gICAgICAgIFwia2V5XCI6IDdcbiAgICAgIH0sIFtjcmVhdGVWTm9kZShyZXNvbHZlQ29tcG9uZW50KFwiRWxJY29uXCIpLCBudWxsLCB7XG4gICAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgICByZXR1cm4gW2NyZWF0ZVZOb2RlKFR5cGUsIG51bGwsIG51bGwpXTtcbiAgICAgICAgfVxuICAgICAgfSldKTtcbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljayhzcmMpIHtcbiAgICAgIGlmICh0aGlzLm9uSGFuZGxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uSGFuZGxlKHNyYyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByZXZpZXdJbWFnZSA9IHRoaXMuZ2V0U3JjKHNyYyk7XG4gICAgICAgIHRoaXMucHJldmlld1Zpc2libGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlUmVtb3ZlOiBmdW5jdGlvbiBoYW5kbGVSZW1vdmUoc3JjKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChmYWxzZSAhPT0gdGhpcy5vbkJlZm9yZVJlbW92ZShzcmMpKSB7XG4gICAgICAgIHRoaXMuZmlsZUxpc3Quc3BsaWNlKHRoaXMuZmlsZUxpc3QuaW5kZXhPZihzcmMpLCAxKTtcbiAgICAgICAgdGhpcy5pbnB1dCgpO1xuICAgICAgICB0aGlzLm9uUmVtb3ZlKHNyYyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRTcmM6IGZ1bmN0aW9uIGdldFNyYyhzcmMpIHtcbiAgICAgIHJldHVybiAhdGhpcy5zcmNLZXkgPyBzcmMgOiBzcmNbdGhpcy5zcmNLZXldO1xuICAgIH0sXG4gICAgZnJhbWVMb2FkOiBmdW5jdGlvbiBmcmFtZUxvYWQoaWZyYW1lKSB7XG4gICAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgICAgdGhpcy5vbkxvYWQoaWZyYW1lKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHRoaXMuaGVscGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgaWZyYW1lWydmb3JtX2NyZWF0ZV9oZWxwZXInXSA9IHtcbiAgICAgICAgICAgIGFwaTogdGhpcy5mb3JtQ3JlYXRlSW5qZWN0LmFwaSxcbiAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZShmaWVsZCkge1xuICAgICAgICAgICAgICBfdGhpczcudmFsaWQoZmllbGQpO1xuXG4gICAgICAgICAgICAgIF90aGlzNy5jbG9zZU1vZGVsKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoZmllbGQsIHZhbHVlKSB7XG4gICAgICAgICAgICAgIF90aGlzNy52YWxpZChmaWVsZCk7XG5cbiAgICAgICAgICAgICAgIV90aGlzNy5kaXNhYmxlZCAmJiBfdGhpczcuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGZpZWxkKSB7XG4gICAgICAgICAgICAgIF90aGlzNy52YWxpZChmaWVsZCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNy5tb2RlbFZhbHVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uT2s6IGZ1bmN0aW9uIG9uT2soZm4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNy5idXMuJG9uKCckb2snLCBmbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZShmbikge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXM3LmJ1cy4kb24oJyRjbG9zZScsIGZuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtYWtlRm9vdGVyOiBmdW5jdGlvbiBtYWtlRm9vdGVyKCkge1xuICAgICAgdmFyIF90aGlzOCA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyQkcHJvcHMgPSB0aGlzLiRwcm9wcyxcbiAgICAgICAgICBva0J0blRleHQgPSBfdGhpcyQkcHJvcHMub2tCdG5UZXh0LFxuICAgICAgICAgIGNsb3NlQnRuVGV4dCA9IF90aGlzJCRwcm9wcy5jbG9zZUJ0blRleHQsXG4gICAgICAgICAgY2xvc2VCdG4gPSBfdGhpcyQkcHJvcHMuY2xvc2VCdG4sXG4gICAgICAgICAgb2tCdG4gPSBfdGhpcyQkcHJvcHMub2tCdG4sXG4gICAgICAgICAgZm9vdGVyID0gX3RoaXMkJHByb3BzLmZvb3RlcjtcblxuICAgICAgaWYgKCFmb290ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JlYXRlVk5vZGUoXCJkaXZcIiwgbnVsbCwgW2Nsb3NlQnRuID8gY3JlYXRlVk5vZGUocmVzb2x2ZUNvbXBvbmVudChcIkVsQnV0dG9uXCIpLCB7XG4gICAgICAgIFwib25DbGlja1wiOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczgub25DYW5jZWwoKSAhPT0gZmFsc2UgJiYgKF90aGlzOC5mcmFtZVZpc2libGUgPSBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIF9pc1Nsb3QoY2xvc2VCdG5UZXh0KSA/IGNsb3NlQnRuVGV4dCA6IHtcbiAgICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICAgIHJldHVybiBbY2xvc2VCdG5UZXh0XTtcbiAgICAgICAgfVxuICAgICAgfSkgOiBudWxsLCBva0J0biA/IGNyZWF0ZVZOb2RlKHJlc29sdmVDb21wb25lbnQoXCJFbEJ1dHRvblwiKSwge1xuICAgICAgICBcInR5cGVcIjogXCJwcmltYXJ5XCIsXG4gICAgICAgIFwib25DbGlja1wiOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczgub25PaygpICE9PSBmYWxzZSAmJiBfdGhpczguY2xvc2VNb2RlbCgpO1xuICAgICAgICB9XG4gICAgICB9LCBfaXNTbG90KG9rQnRuVGV4dCkgPyBva0J0blRleHQgOiB7XG4gICAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgICByZXR1cm4gW29rQnRuVGV4dF07XG4gICAgICAgIH1cbiAgICAgIH0pIDogbnVsbF0pO1xuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICB2YXIgdHlwZSA9IHRoaXMudHlwZTtcbiAgICB2YXIgbm9kZTtcblxuICAgIGlmICh0eXBlID09PSAnaW5wdXQnKSB7XG4gICAgICBub2RlID0gdGhpcy5tYWtlSW5wdXQoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgIG5vZGUgPSB0aGlzLm1ha2VJbWFnZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZSA9IHRoaXMubWFrZUZpbGVzKCk7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzJCRwcm9wczIgPSB0aGlzLiRwcm9wcyxcbiAgICAgICAgX3RoaXMkJHByb3BzMiR3aWR0aCA9IF90aGlzJCRwcm9wczIud2lkdGgsXG4gICAgICAgIHdpZHRoID0gX3RoaXMkJHByb3BzMiR3aWR0aCA9PT0gdm9pZCAwID8gJzMwJScgOiBfdGhpcyQkcHJvcHMyJHdpZHRoLFxuICAgICAgICBoZWlnaHQgPSBfdGhpcyQkcHJvcHMyLmhlaWdodCxcbiAgICAgICAgc3JjID0gX3RoaXMkJHByb3BzMi5zcmMsXG4gICAgICAgIHRpdGxlID0gX3RoaXMkJHByb3BzMi50aXRsZSxcbiAgICAgICAgbW9kYWxUaXRsZSA9IF90aGlzJCRwcm9wczIubW9kYWxUaXRsZTtcbiAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXM5LiRyZWZzLmZyYW1lKSB7XG4gICAgICAgIF90aGlzOS5mcmFtZUxvYWQoX3RoaXM5LiRyZWZzLmZyYW1lLmNvbnRlbnRXaW5kb3cgfHwge30pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjcmVhdGVWTm9kZShcImRpdlwiLCB7XG4gICAgICBcImNsYXNzXCI6IHtcbiAgICAgICAgJ19mYy1mcmFtZSc6IHRydWUsXG4gICAgICAgICdfZmMtZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSwgW25vZGUsIGNyZWF0ZVZOb2RlKHJlc29sdmVDb21wb25lbnQoXCJFbERpYWxvZ1wiKSwge1xuICAgICAgXCJhcHBlbmRUb0JvZHlcIjogdHJ1ZSxcbiAgICAgIFwibW9kYWxcIjogdGhpcy5wcmV2aWV3TWFzayxcbiAgICAgIFwidGl0bGVcIjogbW9kYWxUaXRsZSxcbiAgICAgIFwibW9kZWxWYWx1ZVwiOiB0aGlzLnByZXZpZXdWaXNpYmxlLFxuICAgICAgXCJvbkNsb3NlXCI6IHRoaXMuaGFuZGxlQ2FuY2VsXG4gICAgfSwge1xuICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gW2NyZWF0ZVZOb2RlKFwiaW1nXCIsIHtcbiAgICAgICAgICBcInN0eWxlXCI6IFwid2lkdGg6IDEwMCVcIixcbiAgICAgICAgICBcInNyY1wiOiBfdGhpczkucHJldmlld0ltYWdlXG4gICAgICAgIH0sIG51bGwpXTtcbiAgICAgIH1cbiAgICB9KSwgY3JlYXRlVk5vZGUocmVzb2x2ZUNvbXBvbmVudChcIkVsRGlhbG9nXCIpLCBtZXJnZVByb3BzJDEoe1xuICAgICAgXCJhcHBlbmRUb0JvZHlcIjogdHJ1ZVxuICAgIH0sIF9vYmplY3RTcHJlYWQyKHtcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIHRpdGxlOiB0aXRsZVxuICAgIH0sIHRoaXMubW9kYWwpLCB7XG4gICAgICBcIm1vZGVsVmFsdWVcIjogdGhpcy5mcmFtZVZpc2libGUsXG4gICAgICBcIm9uQ2xvc2VcIjogZnVuY3Rpb24gb25DbG9zZSgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzOS5jbG9zZU1vZGVsKHRydWUpO1xuICAgICAgfVxuICAgIH0pLCB7XG4gICAgICBcImRlZmF1bHRcIjogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbX3RoaXM5LmZyYW1lVmlzaWJsZSB8fCAhX3RoaXM5LnJlbG9hZCA/IGNyZWF0ZVZOb2RlKFwiaWZyYW1lXCIsIHtcbiAgICAgICAgICBcInJlZlwiOiBcImZyYW1lXCIsXG4gICAgICAgICAgXCJzcmNcIjogc3JjLFxuICAgICAgICAgIFwiZnJhbWVCb3JkZXJcIjogXCIwXCIsXG4gICAgICAgICAgXCJzdHlsZVwiOiB7XG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgICdib3JkZXInOiAnMCBub25lJyxcbiAgICAgICAgICAgICd3aWR0aCc6ICcxMDAlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgbnVsbCkgOiBudWxsXTtcbiAgICAgIH0sXG4gICAgICBmb290ZXI6IGZ1bmN0aW9uIGZvb3RlcigpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzOS5tYWtlRm9vdGVyKCk7XG4gICAgICB9XG4gICAgfSldKTtcbiAgfSxcbiAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uIGJlZm9yZU1vdW50KCkge1xuICAgIHZhciBfdGhpcyRmb3JtQ3JlYXRlSW5qZWMgPSB0aGlzLmZvcm1DcmVhdGVJbmplY3QsXG4gICAgICAgIG5hbWUgPSBfdGhpcyRmb3JtQ3JlYXRlSW5qZWMubmFtZSxcbiAgICAgICAgZmllbGQgPSBfdGhpcyRmb3JtQ3JlYXRlSW5qZWMuZmllbGQsXG4gICAgICAgIGFwaSA9IF90aGlzJGZvcm1DcmVhdGVJbmplYy5hcGk7XG4gICAgbmFtZSAmJiBhcGkub24oJ2ZjOmNsb3NlTW9kYWw6JyArIG5hbWUsIHRoaXMuY2xvc2UpO1xuICAgIGZpZWxkICYmIGFwaS5vbignZmM6Y2xvc2VNb2RhbDonICsgZmllbGQsIHRoaXMuY2xvc2UpO1xuICB9LFxuICBiZWZvcmVVbm1vdW50OiBmdW5jdGlvbiBiZWZvcmVVbm1vdW50KCkge1xuICAgIHZhciBfdGhpcyRmb3JtQ3JlYXRlSW5qZWMyID0gdGhpcy5mb3JtQ3JlYXRlSW5qZWN0LFxuICAgICAgICBuYW1lID0gX3RoaXMkZm9ybUNyZWF0ZUluamVjMi5uYW1lLFxuICAgICAgICBmaWVsZCA9IF90aGlzJGZvcm1DcmVhdGVJbmplYzIuZmllbGQsXG4gICAgICAgIGFwaSA9IF90aGlzJGZvcm1DcmVhdGVJbmplYzIuYXBpO1xuICAgIG5hbWUgJiYgYXBpLm9mZignZmM6Y2xvc2VNb2RhbDonICsgbmFtZSwgdGhpcy5jbG9zZSk7XG4gICAgZmllbGQgJiYgYXBpLm9mZignZmM6Y2xvc2VNb2RhbDonICsgZmllbGQsIHRoaXMuY2xvc2UpO1xuICB9XG59KTtcblxudmFyIE5BTUUkNiA9ICdmY1JhZGlvJztcbnZhciBSYWRpbyA9IGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IE5BTUUkNixcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcbiAgcHJvcHM6IHtcbiAgICBmb3JtQ3JlYXRlSW5qZWN0OiBPYmplY3QsXG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyLCBCb29sZWFuXSxcbiAgICAgIFwiZGVmYXVsdFwiOiAnJ1xuICAgIH0sXG4gICAgdHlwZTogU3RyaW5nLFxuICAgIGlucHV0OiBCb29sZWFuLFxuICAgIGlucHV0VmFsdWU6IFN0cmluZ1xuICB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICdmYy5lbCddLFxuICBzZXR1cDogZnVuY3Rpb24gc2V0dXAocHJvcHMsIF8pIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvUmVmKHByb3BzLmZvcm1DcmVhdGVJbmplY3QsICdvcHRpb25zJywgW10pO1xuICAgIHZhciB2YWx1ZSA9IHRvUmVmKHByb3BzLCAnbW9kZWxWYWx1ZScpO1xuICAgIHZhciBpbnB1dFZhbHVlID0gdG9SZWYocHJvcHMsICdpbnB1dFZhbHVlJywgJycpO1xuICAgIHZhciBjdXN0b21WYWx1ZSA9IHJlZihpbnB1dFZhbHVlLnZhbHVlKTtcbiAgICB2YXIgaW5wdXQgPSB0b1JlZihwcm9wcywgJ2lucHV0JywgZmFsc2UpO1xuXG4gICAgdmFyIF9vcHRpb25zID0gZnVuY3Rpb24gX29wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShvcHRpb25zLnZhbHVlKSA/IG9wdGlvbnMudmFsdWUgOiBbXTtcbiAgICB9O1xuXG4gICAgd2F0Y2goaW5wdXRWYWx1ZSwgZnVuY3Rpb24gKG4pIHtcbiAgICAgIGlmICghaW5wdXQudmFsdWUpIHtcbiAgICAgICAgY3VzdG9tVmFsdWUudmFsdWUgPSBuO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVDdXN0b21WYWx1ZShuKTtcbiAgICB9KTtcblxuICAgIHZhciBvbklucHV0ID0gZnVuY3Rpb24gb25JbnB1dChuKSB7XG4gICAgICBfLmVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgbik7XG4gICAgfTtcblxuICAgIHZhciB1cGRhdGVDdXN0b21WYWx1ZSA9IGZ1bmN0aW9uIHVwZGF0ZUN1c3RvbVZhbHVlKG4pIHtcbiAgICAgIHZhciBvID0gY3VzdG9tVmFsdWUudmFsdWU7XG4gICAgICBjdXN0b21WYWx1ZS52YWx1ZSA9IG47XG5cbiAgICAgIGlmICh2YWx1ZS52YWx1ZSA9PT0gbykge1xuICAgICAgICBvbklucHV0KG4pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW9uczogX29wdGlvbnMsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBvbklucHV0OiBvbklucHV0LFxuICAgICAgdXBkYXRlQ3VzdG9tVmFsdWU6IHVwZGF0ZUN1c3RvbVZhbHVlLFxuICAgICAgY3VzdG9tVmFsdWU6IGN1c3RvbVZhbHVlLFxuICAgICAgbWFrZUlucHV0OiBmdW5jdGlvbiBtYWtlSW5wdXQoVHlwZSkge1xuICAgICAgICBpZiAoIWlucHV0LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVWTm9kZShUeXBlLCB7XG4gICAgICAgICAgXCJjaGVja2VkXCI6IGZhbHNlLFxuICAgICAgICAgIFwidmFsdWVcIjogY3VzdG9tVmFsdWUudmFsdWUgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIFwibGFiZWxcIjogY3VzdG9tVmFsdWUudmFsdWUgfHwgdW5kZWZpbmVkXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBcImRlZmF1bHRcIjogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgICAgICByZXR1cm4gW2NyZWF0ZVZOb2RlKHJlc29sdmVDb21wb25lbnQoXCJFbElucHV0XCIpLCB7XG4gICAgICAgICAgICAgIFwic2l6ZVwiOiBcInNtYWxsXCIsXG4gICAgICAgICAgICAgIFwibW9kZWxWYWx1ZVwiOiBjdXN0b21WYWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgXCJvblVwZGF0ZTptb2RlbFZhbHVlXCI6IHVwZGF0ZUN1c3RvbVZhbHVlXG4gICAgICAgICAgICB9LCBudWxsKV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkJHNsb3RzJGRlZmF1bHQsXG4gICAgICAgIF90aGlzJCRzbG90cyxcbiAgICAgICAgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIG5hbWUgPSB0aGlzLnR5cGUgPT09ICdidXR0b24nID8gJ0VsUmFkaW9CdXR0b24nIDogJ0VsUmFkaW8nO1xuICAgIHZhciBUeXBlID0gcmVzb2x2ZUNvbXBvbmVudChuYW1lKTtcbiAgICByZXR1cm4gY3JlYXRlVk5vZGUocmVzb2x2ZUNvbXBvbmVudChcIkVsUmFkaW9Hcm91cFwiKSwgbWVyZ2VQcm9wcyQxKHRoaXMuJGF0dHJzLCB7XG4gICAgICBcIm1vZGVsVmFsdWVcIjogdGhpcy52YWx1ZSxcbiAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiB0aGlzLm9uSW5wdXQsXG4gICAgICBcInJlZlwiOiBcImVsXCJcbiAgICB9KSwgX29iamVjdFNwcmVhZDIoe1xuICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gW190aGlzLm9wdGlvbnMoKS5tYXAoZnVuY3Rpb24gKG9wdCwgaW5kZXgpIHtcbiAgICAgICAgICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkMih7fSwgb3B0KTtcblxuICAgICAgICAgIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuICAgICAgICAgIHZhciBsYWJlbCA9IHByb3BzLmxhYmVsO1xuICAgICAgICAgIGRlbGV0ZSBwcm9wcy52YWx1ZTtcbiAgICAgICAgICBkZWxldGUgcHJvcHMubGFiZWw7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKFR5cGUsIG1lcmdlUHJvcHMkMShwcm9wcywge1xuICAgICAgICAgICAgXCJsYWJlbFwiOiB2YWx1ZSxcbiAgICAgICAgICAgIFwidmFsdWVcIjogdmFsdWUsXG4gICAgICAgICAgICBcImtleVwiOiBuYW1lICsgaW5kZXggKyAnLScgKyB2YWx1ZVxuICAgICAgICAgIH0pLCB7XG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbbGFiZWwgfHwgdmFsdWUgfHwgJyddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSwgKF90aGlzJCRzbG90cyRkZWZhdWx0ID0gKF90aGlzJCRzbG90cyA9IF90aGlzLiRzbG90cylbXCJkZWZhdWx0XCJdKSA9PT0gbnVsbCB8fCBfdGhpcyQkc2xvdHMkZGVmYXVsdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkJHNsb3RzJGRlZmF1bHQuY2FsbChfdGhpcyQkc2xvdHMpLCBfdGhpcy5tYWtlSW5wdXQoVHlwZSldO1xuICAgICAgfVxuICAgIH0sIGdldFNsb3QodGhpcy4kc2xvdHMsIFsnZGVmYXVsdCddKSkpO1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHRoaXMuJGVtaXQoJ2ZjLmVsJywgdGhpcy4kcmVmcy5lbCk7XG4gIH1cbn0pO1xuXG52YXIgaXMgPSB7XG4gIHR5cGU6IGZ1bmN0aW9uIHR5cGUoYXJnLCBfdHlwZSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgJyArIF90eXBlICsgJ10nO1xuICB9LFxuICBVbmRlZjogZnVuY3Rpb24gVW5kZWYodikge1xuICAgIHJldHVybiB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbDtcbiAgfSxcbiAgRWxlbWVudDogZnVuY3Rpb24gRWxlbWVudChhcmcpIHtcbiAgICByZXR1cm4gX3R5cGVvZihhcmcpID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGwgJiYgYXJnLm5vZGVUeXBlID09PSAxICYmICFpcy5PYmplY3QoYXJnKTtcbiAgfSxcbiAgdHJ1ZUFycmF5OiBmdW5jdGlvbiB0cnVlQXJyYXkoZGF0YSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEpICYmIGRhdGEubGVuZ3RoID4gMDtcbiAgfSxcbiAgRnVuY3Rpb246IGZ1bmN0aW9uIEZ1bmN0aW9uKHYpIHtcbiAgICB2YXIgdHlwZSA9IHRoaXMuZ2V0VHlwZSh2KTtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ0Z1bmN0aW9uJyB8fCB0eXBlID09PSAnQXN5bmNGdW5jdGlvbic7XG4gIH0sXG4gIGdldFR5cGU6IGZ1bmN0aW9uIGdldFR5cGUodikge1xuICAgIHZhciBzdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodik7XG4gICAgcmV0dXJuIC9eXFxbb2JqZWN0ICguKilcXF0kLy5leGVjKHN0cilbMV07XG4gIH0sXG4gIGVtcHR5OiBmdW5jdGlvbiBlbXB0eSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgIXZhbHVlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXZhbHVlO1xuICB9XG59O1xuWydEYXRlJywgJ09iamVjdCcsICdTdHJpbmcnLCAnQm9vbGVhbicsICdBcnJheScsICdOdW1iZXInXS5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7XG4gIGlzW3RdID0gZnVuY3Rpb24gKGFyZykge1xuICAgIHJldHVybiBpcy50eXBlKGFyZywgdCk7XG4gIH07XG59KTtcbmZ1bmN0aW9uIGhhc1Byb3BlcnR5KHJ1bGUsIGspIHtcbiAgcmV0dXJuIHt9Lmhhc093blByb3BlcnR5LmNhbGwocnVsZSwgayk7XG59XG5cbnZhciBOQU1FJDUgPSAnZmNTZWxlY3QnO1xudmFyIFNlbGVjdCA9IGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IE5BTUUkNSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcbiAgcHJvcHM6IHtcbiAgICBmb3JtQ3JlYXRlSW5qZWN0OiBPYmplY3QsXG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogW0FycmF5LCBTdHJpbmcsIE51bWJlciwgQm9vbGVhbiwgT2JqZWN0XSxcbiAgICAgIFwiZGVmYXVsdFwiOiB1bmRlZmluZWRcbiAgICB9LFxuICAgIHR5cGU6IFN0cmluZ1xuICB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICdmYy5lbCddLFxuICBzZXR1cDogZnVuY3Rpb24gc2V0dXAocHJvcHMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvUmVmKHByb3BzLmZvcm1DcmVhdGVJbmplY3QsICdvcHRpb25zJywgW10pO1xuICAgIHZhciB2YWx1ZSA9IHRvUmVmKHByb3BzLCAnbW9kZWxWYWx1ZScpO1xuXG4gICAgdmFyIF9vcHRpb25zID0gZnVuY3Rpb24gX29wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShvcHRpb25zLnZhbHVlKSA/IG9wdGlvbnMudmFsdWUgOiBbXTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfTtcbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcyxcbiAgICAgICAgX3RoaXMkJHNsb3RzJGRlZmF1bHQsXG4gICAgICAgIF90aGlzJCRzbG90cztcblxuICAgIHZhciBtYWtlT3B0aW9uID0gZnVuY3Rpb24gbWFrZU9wdGlvbihwcm9wcywgaW5kZXgpIHtcbiAgICAgIHJldHVybiBjcmVhdGVWTm9kZShyZXNvbHZlQ29tcG9uZW50KFwiRWxPcHRpb25cIiksIG1lcmdlUHJvcHMkMShwcm9wcywge1xuICAgICAgICBcImtleVwiOiAnJyArIGluZGV4ICsgJy0nICsgcHJvcHMudmFsdWVcbiAgICAgIH0pLCBudWxsKTtcbiAgICB9O1xuXG4gICAgdmFyIG1ha2VPcHRpb25Hcm91cCA9IGZ1bmN0aW9uIG1ha2VPcHRpb25Hcm91cChwcm9wcywgaW5kZXgpIHtcbiAgICAgIHJldHVybiBjcmVhdGVWTm9kZShyZXNvbHZlQ29tcG9uZW50KFwiRWxPcHRpb25Hcm91cFwiKSwge1xuICAgICAgICBcImxhYmVsXCI6IHByb3BzLmxhYmVsLFxuICAgICAgICBcImtleVwiOiAnJyArIGluZGV4ICsgJy0nICsgcHJvcHMubGFiZWxcbiAgICAgIH0sIHtcbiAgICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICAgIHJldHVybiBbaXMudHJ1ZUFycmF5KHByb3BzLm9wdGlvbnMpICYmIHByb3BzLm9wdGlvbnMubWFwKGZ1bmN0aW9uICh2LCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIG1ha2VPcHRpb24odiwgaW5kZXgpO1xuICAgICAgICAgIH0pXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zKCk7XG4gICAgcmV0dXJuIGNyZWF0ZVZOb2RlKHJlc29sdmVDb21wb25lbnQoXCJFbFNlbGVjdFwiKSwgbWVyZ2VQcm9wcyQxKHRoaXMuJGF0dHJzLCB7XG4gICAgICBcIm1vZGVsVmFsdWVcIjogdGhpcy52YWx1ZSxcbiAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiBmdW5jdGlvbiBvblVwZGF0ZU1vZGVsVmFsdWUodikge1xuICAgICAgICByZXR1cm4gX3RoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdik7XG4gICAgICB9LFxuICAgICAgXCJyZWZcIjogXCJlbFwiXG4gICAgfSksIF9vYmplY3RTcHJlYWQyKHtcbiAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFtvcHRpb25zLm1hcChmdW5jdGlvbiAocHJvcHMsIGluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIGhhc1Byb3BlcnR5KHByb3BzIHx8ICcnLCAnb3B0aW9ucycpID8gbWFrZU9wdGlvbkdyb3VwKHByb3BzLCBpbmRleCkgOiBtYWtlT3B0aW9uKHByb3BzLCBpbmRleCk7XG4gICAgICAgIH0pLCAoX3RoaXMkJHNsb3RzJGRlZmF1bHQgPSAoX3RoaXMkJHNsb3RzID0gX3RoaXMuJHNsb3RzKVtcImRlZmF1bHRcIl0pID09PSBudWxsIHx8IF90aGlzJCRzbG90cyRkZWZhdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyQkc2xvdHMkZGVmYXVsdC5jYWxsKF90aGlzJCRzbG90cyldO1xuICAgICAgfVxuICAgIH0sIGdldFNsb3QodGhpcy4kc2xvdHMsIFsnZGVmYXVsdCddKSkpO1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHRoaXMuJGVtaXQoJ2ZjLmVsJywgdGhpcy4kcmVmcy5lbCk7XG4gIH1cbn0pO1xuXG52YXIgTkFNRSQ0ID0gJ2ZjVHJlZSc7XG52YXIgVHJlZSA9IGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IE5BTUUkNCxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcbiAgZm9ybUNyZWF0ZVBhcnNlcjoge1xuICAgIG1lcmdlUHJvcDogZnVuY3Rpb24gbWVyZ2VQcm9wKGN0eCkge1xuICAgICAgdmFyIHByb3BzID0gY3R4LnByb3AucHJvcHM7XG4gICAgICBpZiAoIXByb3BzLm5vZGVLZXkpIHByb3BzLm5vZGVLZXkgPSAnaWQnO1xuICAgICAgaWYgKCFwcm9wcy5wcm9wcykgcHJvcHMucHJvcHMgPSB7XG4gICAgICAgIGxhYmVsOiAndGl0bGUnXG4gICAgICB9O1xuICAgIH1cbiAgfSxcbiAgcHJvcHM6IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogW0FycmF5LCBTdHJpbmcsIE51bWJlcl0sXG4gICAgICBcImRlZmF1bHRcIjogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2ZjLmVsJ10sXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZTogZnVuY3Rpb24gbW9kZWxWYWx1ZSgpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWUoKTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVWYWx1ZTogZnVuY3Rpb24gdXBkYXRlVmFsdWUoKSB7XG4gICAgICBpZiAoIXRoaXMuJHJlZnMudHJlZSkgcmV0dXJuO1xuICAgICAgdmFyIHZhbHVlO1xuXG4gICAgICBpZiAodGhpcy50eXBlID09PSAnc2VsZWN0ZWQnKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy4kcmVmcy50cmVlLmdldEN1cnJlbnRLZXkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy4kcmVmcy50cmVlLmdldENoZWNrZWRLZXlzKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VmFsdWU6IGZ1bmN0aW9uIHNldFZhbHVlKCkge1xuICAgICAgaWYgKCF0aGlzLiRyZWZzLnRyZWUpIHJldHVybjtcbiAgICAgIHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG4gICAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdGVkJykge1xuICAgICAgICB0aGlzLiRyZWZzLnRyZWUuc2V0Q3VycmVudEtleSh0aGlzLm1vZGVsVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kcmVmcy50cmVlLnNldENoZWNrZWRLZXlzKHRvQXJyYXkodGhpcy5tb2RlbFZhbHVlKSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICByZXR1cm4gY3JlYXRlVk5vZGUocmVzb2x2ZUNvbXBvbmVudChcIkVsVHJlZVwiKSwgbWVyZ2VQcm9wcyQxKHRoaXMuJGF0dHJzLCB7XG4gICAgICBcInJlZlwiOiBcInRyZWVcIixcbiAgICAgIFwib25DaGVja1wiOiB0aGlzLnVwZGF0ZVZhbHVlLFxuICAgICAgXCJvbk5vZGUtY2xpY2tcIjogdGhpcy51cGRhdGVWYWx1ZVxuICAgIH0pLCB0aGlzLiRzbG90cyk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5zZXRWYWx1ZSgpO1xuICAgIHRoaXMuJGVtaXQoJ2ZjLmVsJywgdGhpcy4kcmVmcy50cmVlKTtcbiAgfVxufSk7XG5cbnZhciBjc3NfMjQ4eiQyID0gXCIuX2ZjLXVwbG9hZHt3aWR0aDoxMDAlfS5fZmMtZXhjZWVkIC5lbC11cGxvYWR7ZGlzcGxheTpub25lfS5lbC11cGxvYWQtbGlzdC5pcy1kaXNhYmxlZCAuZWwtdXBsb2Fke2N1cnNvcjpub3QtYWxsb3dlZCFpbXBvcnRhbnR9XCI7XG5zdHlsZUluamVjdChjc3NfMjQ4eiQyKTtcblxudmFyIHNjcmlwdCQxID0ge1xuICBuYW1lOiAnSWNvblVwbG9hZCdcbn07XG5cbnZhciBfaG9pc3RlZF8xJDEgPSB7XG4gIFwiY2xhc3NcIjogXCJpY29uXCIsXG4gIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59O1xuXG52YXIgX2hvaXN0ZWRfMiQxID0gLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICBkOiBcIk0xNjAgODMyaDcwNGEzMiAzMiAwIDExMCA2NEgxNjBhMzIgMzIgMCAxMTAtNjR6bTM4NC01NzguMzA0VjcwNGgtNjRWMjQ3LjI5NkwyMzcuMjQ4IDQ5MC4wNDggMTkyIDQ0NC44IDUwOC44IDEyOGwzMTYuOCAzMTYuOC00NS4zMTIgNDUuMjQ4TDU0NCAyNTMuNjk2elwiXG59LCBudWxsLCAtMSk7XG5cbnZhciBfaG9pc3RlZF8zJDEgPSBbX2hvaXN0ZWRfMiQxXTtcbmZ1bmN0aW9uIHJlbmRlciQxKF9jdHgsIF9jYWNoZSwgJHByb3BzLCAkc2V0dXAsICRkYXRhLCAkb3B0aW9ucykge1xuICByZXR1cm4gb3BlbkJsb2NrKCksIGNyZWF0ZUVsZW1lbnRCbG9jayhcInN2Z1wiLCBfaG9pc3RlZF8xJDEsIF9ob2lzdGVkXzMkMSk7XG59XG5cbnNjcmlwdCQxLnJlbmRlciA9IHJlbmRlciQxO1xuXG5mdW5jdGlvbiBwYXJzZUZpbGUoZmlsZSwgaSkge1xuICByZXR1cm4ge1xuICAgIHVybDogZmlsZSxcbiAgICBuYW1lOiBnZXRGaWxlTmFtZShmaWxlKSxcbiAgICB1aWQ6IGlcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RmlsZU5hbWUoZmlsZSkge1xuICByZXR1cm4gKCcnICsgZmlsZSkuc3BsaXQoJy8nKS5wb3AoKTtcbn1cblxudmFyIE5BTUUkMyA9ICdmY1VwbG9hZCc7XG52YXIgVXBsb2FkID0gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogTkFNRSQzLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuICBmb3JtQ3JlYXRlUGFyc2VyOiB7XG4gICAgdG9Gb3JtVmFsdWU6IGZ1bmN0aW9uIHRvRm9ybVZhbHVlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdG9BcnJheSh2YWx1ZSk7XG4gICAgfSxcbiAgICB0b1ZhbHVlOiBmdW5jdGlvbiB0b1ZhbHVlKGZvcm1WYWx1ZSwgY3R4KSB7XG4gICAgICByZXR1cm4gY3R4LnByb3AucHJvcHMubGltaXQgPT09IDEgPyBmb3JtVmFsdWVbMF0gfHwgJycgOiBmb3JtVmFsdWU7XG4gICAgfVxuICB9LFxuICBwcm9wczoge1xuICAgIHByZXZpZXdNYXNrOiB1bmRlZmluZWQsXG4gICAgb25QcmV2aWV3OiBGdW5jdGlvbixcbiAgICBtb2RhbFRpdGxlOiBTdHJpbmcsXG4gICAgbGlzdFR5cGU6IFN0cmluZyxcbiAgICBtb2RlbFZhbHVlOiBbQXJyYXksIFN0cmluZ11cbiAgfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJywgJ3JlbW92ZScsICdmYy5lbCddLFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwcmV2aWV3VmlzaWJsZTogZmFsc2UsXG4gICAgICBwcmV2aWV3SW1hZ2U6ICcnLFxuICAgICAgZmlsZUxpc3Q6IFtdXG4gICAgfTtcbiAgfSxcbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLmZpbGVMaXN0ID0gdG9BcnJheSh0aGlzLm1vZGVsVmFsdWUpLm1hcChwYXJzZUZpbGUpO1xuICB9LFxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWU6IGZ1bmN0aW9uIG1vZGVsVmFsdWUobikge1xuICAgICAgdGhpcy5maWxlTGlzdCA9IHRvQXJyYXkobikubWFwKHBhcnNlRmlsZSk7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlUHJldmlldzogZnVuY3Rpb24gaGFuZGxlUHJldmlldyhmaWxlKSB7XG4gICAgICBpZiAodGhpcy5vblByZXZpZXcpIHtcbiAgICAgICAgdGhpcy5vblByZXZpZXcuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgndGV4dCcgPT09IHRoaXMubGlzdFR5cGUpIHtcbiAgICAgICAgICB3aW5kb3cub3BlbihmaWxlLnVybCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2UgPSBmaWxlLnVybDtcbiAgICAgICAgICB0aGlzLnByZXZpZXdWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoZmlsZUxpc3QpIHtcbiAgICAgIHZhciBmaWxlcyA9IGZpbGVMaXN0Lm1hcChmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICByZXR1cm4gZmlsZS51cmw7XG4gICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKHVybCkge1xuICAgICAgICByZXR1cm4gdXJsICE9PSB1bmRlZmluZWQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgZmlsZXMpO1xuICAgIH0sXG4gICAgaGFuZGxlQ2FuY2VsOiBmdW5jdGlvbiBoYW5kbGVDYW5jZWwoKSB7XG4gICAgICB0aGlzLnByZXZpZXdWaXNpYmxlID0gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShmaWxlLCBmaWxlTGlzdCkge1xuICAgICAgdGhpcy4kZW1pdC5hcHBseSh0aGlzLCBbJ2NoYW5nZSddLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG5cbiAgICAgIGlmIChmaWxlLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgIHRoaXMudXBkYXRlKGZpbGVMaXN0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVJlbW92ZTogZnVuY3Rpb24gaGFuZGxlUmVtb3ZlKGZpbGUsIGZpbGVMaXN0KSB7XG4gICAgICB0aGlzLiRlbWl0LmFwcGx5KHRoaXMsIFsncmVtb3ZlJ10uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAgICAgIHRoaXMudXBkYXRlKGZpbGVMaXN0KTtcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyQkc2xvdHMkZGVmYXVsdCxcbiAgICAgICAgX3RoaXMkJHNsb3RzLFxuICAgICAgICBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgbGVuID0gdG9BcnJheSh0aGlzLm1vZGVsVmFsdWUpLmxlbmd0aDtcbiAgICByZXR1cm4gY3JlYXRlVk5vZGUoXCJkaXZcIiwge1xuICAgICAgXCJjbGFzc1wiOiBcIl9mYy11cGxvYWRcIlxuICAgIH0sIFtjcmVhdGVWTm9kZShyZXNvbHZlQ29tcG9uZW50KFwiRWxVcGxvYWRcIiksIG1lcmdlUHJvcHMkMSh7XG4gICAgICBcImtleVwiOiBsZW5cbiAgICB9LCB0aGlzLiRhdHRycywge1xuICAgICAgXCJsaXN0LXR5cGVcIjogdGhpcy5saXN0VHlwZSB8fCAncGljdHVyZS1jYXJkJyxcbiAgICAgIFwiY2xhc3NcIjoge1xuICAgICAgICAnX2ZjLWV4Y2VlZCc6IHRoaXMuJGF0dHJzLmxpbWl0ID8gdGhpcy4kYXR0cnMubGltaXQgPD0gbGVuIDogZmFsc2VcbiAgICAgIH0sXG4gICAgICBcIm9uUHJldmlld1wiOiB0aGlzLmhhbmRsZVByZXZpZXcsXG4gICAgICBcIm9uQ2hhbmdlXCI6IHRoaXMuaGFuZGxlQ2hhbmdlLFxuICAgICAgXCJvblJlbW92ZVwiOiB0aGlzLmhhbmRsZVJlbW92ZSxcbiAgICAgIFwiZmlsZUxpc3RcIjogdGhpcy5maWxlTGlzdCxcbiAgICAgIFwicmVmXCI6IFwidXBsb2FkXCJcbiAgICB9KSwgX29iamVjdFNwcmVhZDIoe1xuICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gWyhfdGhpcyQkc2xvdHMkZGVmYXVsdCA9IChfdGhpcyQkc2xvdHMgPSBfdGhpcy4kc2xvdHMpW1wiZGVmYXVsdFwiXSkgIT09IG51bGwgJiYgX3RoaXMkJHNsb3RzJGRlZmF1bHQgIT09IHZvaWQgMCAmJiBfdGhpcyQkc2xvdHMkZGVmYXVsdC5jYWxsKF90aGlzJCRzbG90cykgfHwgWyd0ZXh0JywgJ3BpY3R1cmUnXS5pbmRleE9mKF90aGlzLmxpc3RUeXBlKSA9PT0gLTEgPyBjcmVhdGVWTm9kZShyZXNvbHZlQ29tcG9uZW50KFwiRWxJY29uXCIpLCBudWxsLCB7XG4gICAgICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICAgICAgcmV0dXJuIFtjcmVhdGVWTm9kZShzY3JpcHQkMSwgbnVsbCwgbnVsbCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgOiBjcmVhdGVWTm9kZShyZXNvbHZlQ29tcG9uZW50KFwiRWxCdXR0b25cIiksIHtcbiAgICAgICAgICBcInR5cGVcIjogXCJwcmltYXJ5XCJcbiAgICAgICAgfSwge1xuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgICAgIHJldHVybiBbY3JlYXRlVGV4dFZOb2RlKFwiXFx1NzBCOVxcdTUxRkJcXHU0RTBBXFx1NEYyMFwiKV07XG4gICAgICAgICAgfVxuICAgICAgICB9KV07XG4gICAgICB9XG4gICAgfSwgZ2V0U2xvdCh0aGlzLiRzbG90cywgWydkZWZhdWx0J10pKSksIGNyZWF0ZVZOb2RlKHJlc29sdmVDb21wb25lbnQoXCJFbERpYWxvZ1wiKSwge1xuICAgICAgXCJhcHBlbmRUb0JvZHlcIjogdHJ1ZSxcbiAgICAgIFwibW9kYWxcIjogdGhpcy5wcmV2aWV3TWFzayxcbiAgICAgIFwidGl0bGVcIjogdGhpcy5tb2RhbFRpdGxlLFxuICAgICAgXCJtb2RlbFZhbHVlXCI6IHRoaXMucHJldmlld1Zpc2libGUsXG4gICAgICBcIm9uQ2xvc2VcIjogdGhpcy5oYW5kbGVDYW5jZWxcbiAgICB9LCB7XG4gICAgICBcImRlZmF1bHRcIjogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbY3JlYXRlVk5vZGUoXCJpbWdcIiwge1xuICAgICAgICAgIFwic3R5bGVcIjogXCJ3aWR0aDogMTAwJVwiLFxuICAgICAgICAgIFwic3JjXCI6IF90aGlzLnByZXZpZXdJbWFnZVxuICAgICAgICB9LCBudWxsKV07XG4gICAgICB9XG4gICAgfSldKTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB0aGlzLiRlbWl0KCdmYy5lbCcsIHRoaXMuJHJlZnMudXBsb2FkKTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uICRzZXQodGFyZ2V0LCBmaWVsZCwgdmFsdWUpIHtcbiAgdGFyZ2V0W2ZpZWxkXSA9IHZhbHVlO1xufVxuZnVuY3Rpb24gJGRlbCh0YXJnZXQsIGZpZWxkKSB7XG4gIGRlbGV0ZSB0YXJnZXRbZmllbGRdO1xufVxuXG5mdW5jdGlvbiBkZWVwRXh0ZW5kKG9yaWdpbikge1xuICB2YXIgdGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIG1vZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGlzQXJyID0gZmFsc2U7XG5cbiAgZm9yICh2YXIga2V5IGluIHRhcmdldCkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpKSB7XG4gICAgICB2YXIgY2xvbmUgPSB0YXJnZXRba2V5XTtcblxuICAgICAgaWYgKChpc0FyciA9IEFycmF5LmlzQXJyYXkoY2xvbmUpKSB8fCBpcy5PYmplY3QoY2xvbmUpKSB7XG4gICAgICAgIHZhciBuc3QgPSBvcmlnaW5ba2V5XSA9PT0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChpc0Fycikge1xuICAgICAgICAgIGlzQXJyID0gZmFsc2U7XG4gICAgICAgICAgbnN0ICYmICRzZXQob3JpZ2luLCBrZXksIFtdKTtcbiAgICAgICAgfSBlbHNlIGlmIChjbG9uZS5fY2xvbmUgJiYgbW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKG1vZGUpIHtcbiAgICAgICAgICAgIGNsb25lID0gY2xvbmUuZ2V0UnVsZSgpO1xuICAgICAgICAgICAgbnN0ICYmICRzZXQob3JpZ2luLCBrZXksIHt9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJHNldChvcmlnaW4sIGtleSwgY2xvbmUuX2Nsb25lKCkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5zdCAmJiAkc2V0KG9yaWdpbiwga2V5LCB7fSk7XG4gICAgICAgIH1cblxuICAgICAgICBvcmlnaW5ba2V5XSA9IGRlZXBFeHRlbmQob3JpZ2luW2tleV0sIGNsb25lLCBtb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRzZXQob3JpZ2luLCBrZXksIGNsb25lKTtcblxuICAgICAgICBpZiAoIWlzLlVuZGVmKGNsb25lKSkge1xuICAgICAgICAgIGlmICghaXMuVW5kZWYoY2xvbmUuX19qc29uKSkge1xuICAgICAgICAgICAgb3JpZ2luW2tleV0uX19qc29uID0gY2xvbmUuX19qc29uO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaXMuVW5kZWYoY2xvbmUuX19vcmlnaW4pKSB7XG4gICAgICAgICAgICBvcmlnaW5ba2V5XS5fX29yaWdpbiA9IGNsb25lLl9fb3JpZ2luO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb2RlICE9PSB1bmRlZmluZWQgJiYgQXJyYXkuaXNBcnJheShvcmlnaW4pID8gb3JpZ2luLmZpbHRlcihmdW5jdGlvbiAodikge1xuICAgIHJldHVybiAhdiB8fCAhdi5fX2N0cmw7XG4gIH0pIDogb3JpZ2luO1xufVxuZnVuY3Rpb24gZGVlcENvcHkodmFsdWUpIHtcbiAgcmV0dXJuIGRlZXBFeHRlbmQoe30sIHtcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSkudmFsdWU7XG59XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKGEpIHtcbiAgZm9yICh2YXIgYiwgYyA9IDE7IGMgPCBhcmd1bWVudHMubGVuZ3RoOyBjKyspIHtcbiAgICBmb3IgKHZhciBkIGluIGIgPSBhcmd1bWVudHNbY10sIGIpIHtcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBkKSAmJiAkc2V0KGEsIGQsIGJbZF0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhO1xufTtcblxuZnVuY3Rpb24gZXh0ZW5kKCkge1xuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cbmZ1bmN0aW9uIGNvcHkkMShvYmopIHtcbiAgaWYgKF90eXBlb2Yob2JqKSAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSByZXR1cm4gb2JqO1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgQXJyYXkgPyBfdG9Db25zdW1hYmxlQXJyYXkob2JqKSA6IF9vYmplY3RTcHJlYWQyKHt9LCBvYmopO1xufVxuXG52YXIgY3NzXzI0OHokMSA9IFwiLl9mYy1ncm91cHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWluLWhlaWdodDozOHB4O3dpZHRoOjEwMCV9Ll9mYy1ncm91cC1kaXNhYmxlZCAuX2ZjLWdyb3VwLWFkZCwuX2ZjLWdyb3VwLWRpc2FibGVkIC5fZmMtZ3JvdXAtYnRue2N1cnNvcjpub3QtYWxsb3dlZH0uX2ZjLWdyb3VwLWhhbmRsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBkYXNoZWQgI2Q5ZDlkOTtib3JkZXItcmFkaXVzOjE1cHg7Ym90dG9tOi0xNXB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7cGFkZGluZzozcHggOHB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjMwcHh9Ll9mYy1ncm91cC1idG57Y3Vyc29yOnBvaW50ZXJ9Ll9mYy1ncm91cC1pZHh7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6I2VlZTtib3JkZXItcmFkaXVzOjE1cHg7Ym90dG9tOi0xNXB4O2Rpc3BsYXk6ZmxleDtmb250LXdlaWdodDo3MDA7aGVpZ2h0OjMwcHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtsZWZ0OjEwcHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MzBweH0uX2ZjLWdyb3VwLWhhbmRsZSAuX2ZjLWdyb3VwLWJ0bisuX2ZjLWdyb3VwLWJ0bnttYXJnaW4tbGVmdDo3cHh9Ll9mYy1ncm91cC1jb250YWluZXJ7Ym9yZGVyOjFweCBkYXNoZWQgI2Q5ZDlkOTtib3JkZXItcmFkaXVzOjVweDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21hcmdpbjo1cHggNXB4IDI1cHg7cGFkZGluZzoyMHB4IDIwcHggMjVweDtwb3NpdGlvbjpyZWxhdGl2ZX0uX2ZjLWdyb3VwLWFycm93e2hlaWdodDoyMHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjIwcHh9Ll9mYy1ncm91cC1hcnJvdzpiZWZvcmV7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICM5OTk7Ym9yZGVyLXRvcDoycHggc29saWQgIzk5OTtjb250ZW50OlxcXCJcXFwiO2hlaWdodDo5cHg7bGVmdDo1cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjhweDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTt3aWR0aDo5cHh9Ll9mYy1ncm91cC1hcnJvdy5fZmMtZ3JvdXAtZG93bnt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9Ll9mYy1ncm91cC1wbHVzLW1pbnVze2N1cnNvcjpwb2ludGVyO2hlaWdodDoyMHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjIwcHh9Ll9mYy1ncm91cC1wbHVzLW1pbnVzOmFmdGVyLC5fZmMtZ3JvdXAtcGx1cy1taW51czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojNDA5ZWZmO2NvbnRlbnQ6XFxcIlxcXCI7aGVpZ2h0OjJweDtsZWZ0OjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt3aWR0aDo2MCV9Ll9mYy1ncm91cC1wbHVzLW1pbnVzOmJlZm9yZXt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgcm90YXRlKDkwZGVnKX0uX2ZjLWdyb3VwLXBsdXMtbWludXMuX2ZjLWdyb3VwLW1pbnVzOmJlZm9yZXtkaXNwbGF5Om5vbmV9Ll9mYy1ncm91cC1wbHVzLW1pbnVzLl9mYy1ncm91cC1taW51czphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTZjNmN9Ll9mYy1ncm91cC1hZGR7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDY0LDE1OCwyNTUsLjUpO2JvcmRlci1yYWRpdXM6MTVweDtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6MjVweDt3aWR0aDoyNXB4fS5fZmMtZ3JvdXAtYWRkLl9mYy1ncm91cC1wbHVzLW1pbnVzOmFmdGVyLC5fZmMtZ3JvdXAtYWRkLl9mYy1ncm91cC1wbHVzLW1pbnVzOmJlZm9yZXt3aWR0aDo1MCV9XCI7XG5zdHlsZUluamVjdChjc3NfMjQ4eiQxKTtcblxudmFyIE5BTUUkMiA9ICdmY0dyb3VwJztcbnZhciBHcm91cCA9IGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IE5BTUUkMixcbiAgcHJvcHM6IHtcbiAgICBmaWVsZDogU3RyaW5nLFxuICAgIHJ1bGU6IEFycmF5LFxuICAgIGV4cGFuZDogTnVtYmVyLFxuICAgIG9wdGlvbnM6IE9iamVjdCxcbiAgICBidXR0b246IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBcImRlZmF1bHRcIjogdHJ1ZVxuICAgIH0sXG4gICAgbWF4OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBcImRlZmF1bHRcIjogMFxuICAgIH0sXG4gICAgbWluOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBcImRlZmF1bHRcIjogMFxuICAgIH0sXG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBcImRlZmF1bHRcIjogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlZmF1bHRWYWx1ZTogT2JqZWN0LFxuICAgIHNvcnRCdG46IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBcImRlZmF1bHRcIjogdHJ1ZVxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICB9LFxuICAgIHN5bmNEaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIFwiZGVmYXVsdFwiOiB0cnVlXG4gICAgfSxcbiAgICBvbkJlZm9yZVJlbW92ZToge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBcImRlZmF1bHRcIjogZnVuY3Rpb24gX2RlZmF1bHQoKSB7fVxuICAgIH0sXG4gICAgb25CZWZvcmVBZGQ6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge31cbiAgICB9LFxuICAgIGZvcm1DcmVhdGVJbmplY3Q6IE9iamVjdCxcbiAgICBwYXJzZTogRnVuY3Rpb25cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGVuOiAwLFxuICAgICAgY2FjaGVSdWxlOiB7fSxcbiAgICAgIGNhY2hlVmFsdWU6IHt9LFxuICAgICAgc29ydDogW10sXG4gICAgICBmb3JtOiBtYXJrUmF3KHRoaXMuZm9ybUNyZWF0ZUluamVjdC5mb3JtLiRmb3JtKCkpXG4gICAgfTtcbiAgfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJywgJ2l0ZW1Nb3VudGVkJywgJ3JlbW92ZScsICdhZGQnXSxcbiAgd2F0Y2g6IHtcbiAgICBydWxlOiB7XG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKG4sIG8pIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmNhY2hlUnVsZSkuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICAgIHZhciBpdGVtID0gX3RoaXMuY2FjaGVSdWxlW3ZdO1xuXG4gICAgICAgICAgaWYgKGl0ZW0uJGYpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBpdGVtLiRmLmZvcm1EYXRhKCk7XG5cbiAgICAgICAgICAgIGlmIChuID09PSBvKSB7XG4gICAgICAgICAgICAgIGl0ZW0uJGYuZGVmZXJTeW5jVmFsdWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoaXRlbS5ydWxlLCBuKTtcbiAgICAgICAgICAgICAgICBpdGVtLiRmLnNldFZhbHVlKHZhbCk7XG4gICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIF92YWwgPSBpdGVtLiRmLmZvcm1EYXRhKCk7XG5cbiAgICAgICAgICAgICAgaXRlbS4kZi5vbmNlKCdyZWxvYWRpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXRlbS4kZi5zZXRWYWx1ZShfdmFsKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGl0ZW0ucnVsZSA9IGRlZXBDb3B5KG4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZGVlcDogdHJ1ZVxuICAgIH0sXG4gICAgZXhwYW5kOiBmdW5jdGlvbiBleHBhbmQobikge1xuICAgICAgdmFyIGQgPSBuIC0gdGhpcy5tb2RlbFZhbHVlLmxlbmd0aDtcblxuICAgICAgaWYgKGQgPiAwKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kUnVsZShkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIobikge1xuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgICBuID0gbiB8fCBbXTtcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLnNvcnQsXG4gICAgICAgICAgICB0b3RhbCA9IGtleXMubGVuZ3RoLFxuICAgICAgICAgICAgbGVuID0gdG90YWwgLSBuLmxlbmd0aDtcblxuICAgICAgICBpZiAobGVuIDwgMCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCAwOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuYWRkUnVsZShuLmxlbmd0aCArIGksIHRydWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB0b3RhbDsgX2krKykge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShrZXlzW19pXSwgbltfaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAobGVuID4gMCkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgbGVuOyBfaTIrKykge1xuICAgICAgICAgICAgICB0aGlzLnJlbW92ZVJ1bGUoa2V5c1t0b3RhbCAtIF9pMiAtIDFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuLmZvckVhY2goZnVuY3Rpb24gKHZhbCwgaSkge1xuICAgICAgICAgICAgX3RoaXMyLnNldFZhbHVlKGtleXNbaV0sIG5baV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVlcDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIF92YWx1ZTogZnVuY3Rpb24gX3ZhbHVlKHYpIHtcbiAgICAgIHJldHVybiB2ICYmIGhhc1Byb3BlcnR5KHYsIHRoaXMuZmllbGQpID8gdlt0aGlzLmZpZWxkXSA6IHY7XG4gICAgfSxcbiAgICBjYWNoZTogZnVuY3Rpb24gY2FjaGUoaywgdmFsKSB7XG4gICAgICB0aGlzLmNhY2hlVmFsdWVba10gPSBKU09OLnN0cmluZ2lmeSh2YWwpO1xuICAgIH0sXG4gICAgaW5wdXQ6IGZ1bmN0aW9uIGlucHV0KHZhbHVlKSB7XG4gICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKTtcbiAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKTtcbiAgICB9LFxuICAgIGZvcm1EYXRhOiBmdW5jdGlvbiBmb3JtRGF0YShrZXksIF9mb3JtRGF0YSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBjYWNoZVJ1bGUgPSB0aGlzLmNhY2hlUnVsZTtcbiAgICAgIHZhciBrZXlzID0gdGhpcy5zb3J0O1xuXG4gICAgICBpZiAoa2V5cy5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlUnVsZVtrXS4kZjtcbiAgICAgIH0pLmxlbmd0aCAhPT0ga2V5cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWUgPSBrZXlzLm1hcChmdW5jdGlvbiAoaykge1xuICAgICAgICB2YXIgZGF0YSA9IGtleSA9PT0gayA/IF9mb3JtRGF0YSA6IF9vYmplY3RTcHJlYWQyKHt9LCBfdGhpczMuY2FjaGVSdWxlW2tdLiRmLmZvcm0pO1xuICAgICAgICB2YXIgdmFsdWUgPSBfdGhpczMuZmllbGQgPyBkYXRhW190aGlzMy5maWVsZF0gfHwgbnVsbCA6IGRhdGE7XG5cbiAgICAgICAgX3RoaXMzLmNhY2hlKGssIHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaW5wdXQodmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VmFsdWU6IGZ1bmN0aW9uIHNldFZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBmaWVsZCA9IHRoaXMuZmllbGQ7XG5cbiAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICB2YWx1ZSA9IF9kZWZpbmVQcm9wZXJ0eSh7fSwgZmllbGQsIHRoaXMuX3ZhbHVlKHZhbHVlKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNhY2hlVmFsdWVba2V5XSA9PT0gSlNPTi5zdHJpbmdpZnkoZmllbGQgPyB2YWx1ZVtmaWVsZF0gOiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNhY2hlKGtleSwgdmFsdWUpO1xuICAgIH0sXG4gICAgYWRkUnVsZTogZnVuY3Rpb24gYWRkUnVsZShpLCBlbWl0KSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIHJ1bGUgPSB0aGlzLmZvcm1DcmVhdGVJbmplY3QuZm9ybS5jb3B5UnVsZXModGhpcy5ydWxlIHx8IFtdKTtcbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zID8gX29iamVjdFNwcmVhZDIoe30sIHRoaXMub3B0aW9ucykgOiB7XG4gICAgICAgIHN1Ym1pdEJ0bjogZmFsc2UsXG4gICAgICAgIHJlc2V0QnRuOiBmYWxzZVxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5mb3JtRGF0YSkgb3B0aW9ucy5mb3JtRGF0YSA9IHt9O1xuICAgICAgICB2YXIgZGVmVmFsID0gZGVlcENvcHkodGhpcy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICBleHRlbmQob3B0aW9ucy5mb3JtRGF0YSwgdGhpcy5maWVsZCA/IF9kZWZpbmVQcm9wZXJ0eSh7fSwgdGhpcy5maWVsZCwgZGVmVmFsKSA6IGRlZlZhbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGFyc2UgJiYgdGhpcy5wYXJzZSh7XG4gICAgICAgIHJ1bGU6IHJ1bGUsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIGluZGV4OiB0aGlzLnNvcnQubGVuZ3RoXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2FjaGVSdWxlWysrdGhpcy5sZW5dID0ge1xuICAgICAgICBydWxlOiBydWxlLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICB9O1xuXG4gICAgICBpZiAoZW1pdCkge1xuICAgICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzNC4kZW1pdCgnYWRkJywgcnVsZSwgT2JqZWN0LmtleXMoX3RoaXM0LmNhY2hlUnVsZSkubGVuZ3RoIC0gMSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgYWRkJGY6IGZ1bmN0aW9uIGFkZCRmKGksIGtleSwgJGYpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICB0aGlzLmNhY2hlUnVsZVtrZXldLiRmID0gJGY7XG4gICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzNS4kZW1pdCgnaXRlbU1vdW50ZWQnLCAkZiwgT2JqZWN0LmtleXMoX3RoaXM1LmNhY2hlUnVsZSkuaW5kZXhPZihrZXkpKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgcmVtb3ZlUnVsZTogZnVuY3Rpb24gcmVtb3ZlUnVsZShrZXksIGVtaXQpIHtcbiAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICB2YXIgaW5kZXggPSBPYmplY3Qua2V5cyh0aGlzLmNhY2hlUnVsZSkuaW5kZXhPZihrZXkpO1xuICAgICAgZGVsZXRlIHRoaXMuY2FjaGVSdWxlW2tleV07XG4gICAgICBkZWxldGUgdGhpcy5jYWNoZVZhbHVlW2tleV07XG5cbiAgICAgIGlmIChlbWl0KSB7XG4gICAgICAgIG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM2LiRlbWl0KCdyZW1vdmUnLCBpbmRleCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgYWRkOiBmdW5jdGlvbiBhZGQoaSkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgZmFsc2UgPT09IHRoaXMub25CZWZvcmVBZGQodGhpcy5tb2RlbFZhbHVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZSA9IF90b0NvbnN1bWFibGVBcnJheSh0aGlzLm1vZGVsVmFsdWUpO1xuXG4gICAgICB2YWx1ZS5wdXNoKHRoaXMuZGVmYXVsdFZhbHVlID8gZGVlcENvcHkodGhpcy5kZWZhdWx0VmFsdWUpIDogdGhpcy5maWVsZCA/IG51bGwgOiB7fSk7XG4gICAgICB0aGlzLmlucHV0KHZhbHVlKTtcbiAgICB9LFxuICAgIGRlbDogZnVuY3Rpb24gZGVsKGluZGV4LCBrZXkpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IGZhbHNlID09PSB0aGlzLm9uQmVmb3JlUmVtb3ZlKHRoaXMubW9kZWxWYWx1ZSwgaW5kZXgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZW1vdmVSdWxlKGtleSwgdHJ1ZSk7XG5cbiAgICAgIHZhciB2YWx1ZSA9IF90b0NvbnN1bWFibGVBcnJheSh0aGlzLm1vZGVsVmFsdWUpO1xuXG4gICAgICB2YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy5pbnB1dCh2YWx1ZSk7XG4gICAgfSxcbiAgICBhZGRJY29uOiBmdW5jdGlvbiBhZGRJY29uKGtleSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKFwiZGl2XCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcIl9mYy1ncm91cC1idG4gX2ZjLWdyb3VwLXBsdXMtbWludXNcIixcbiAgICAgICAgXCJvbkNsaWNrXCI6IHRoaXMuYWRkXG4gICAgICB9LCBudWxsKTtcbiAgICB9LFxuICAgIGRlbEljb246IGZ1bmN0aW9uIGRlbEljb24oaW5kZXgsIGtleSkge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgIHJldHVybiBjcmVhdGVWTm9kZShcImRpdlwiLCB7XG4gICAgICAgIFwiY2xhc3NcIjogXCJfZmMtZ3JvdXAtYnRuIF9mYy1ncm91cC1wbHVzLW1pbnVzIF9mYy1ncm91cC1taW51c1wiLFxuICAgICAgICBcIm9uQ2xpY2tcIjogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM3LmRlbChpbmRleCwga2V5KTtcbiAgICAgICAgfVxuICAgICAgfSwgbnVsbCk7XG4gICAgfSxcbiAgICBzb3J0VXBJY29uOiBmdW5jdGlvbiBzb3J0VXBJY29uKGluZGV4KSB7XG4gICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKFwiZGl2XCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcIl9mYy1ncm91cC1idG4gX2ZjLWdyb3VwLWFycm93IF9mYy1ncm91cC11cFwiLFxuICAgICAgICBcIm9uQ2xpY2tcIjogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM4LmNoYW5nZVNvcnQoaW5kZXgsIC0xKTtcbiAgICAgICAgfVxuICAgICAgfSwgbnVsbCk7XG4gICAgfSxcbiAgICBzb3J0RG93bkljb246IGZ1bmN0aW9uIHNvcnREb3duSWNvbihpbmRleCkge1xuICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICAgIHJldHVybiBjcmVhdGVWTm9kZShcImRpdlwiLCB7XG4gICAgICAgIFwiY2xhc3NcIjogXCJfZmMtZ3JvdXAtYnRuIF9mYy1ncm91cC1hcnJvdyBfZmMtZ3JvdXAtZG93blwiLFxuICAgICAgICBcIm9uQ2xpY2tcIjogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM5LmNoYW5nZVNvcnQoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9LCBudWxsKTtcbiAgICB9LFxuICAgIGNoYW5nZVNvcnQ6IGZ1bmN0aW9uIGNoYW5nZVNvcnQoaW5kZXgsIHNvcnQpIHtcbiAgICAgIHZhciBfdGhpczEwID0gdGhpcztcblxuICAgICAgdmFyIGEgPSB0aGlzLnNvcnRbaW5kZXhdO1xuICAgICAgdGhpcy5zb3J0W2luZGV4XSA9IHRoaXMuc29ydFtpbmRleCArIHNvcnRdO1xuICAgICAgdGhpcy5zb3J0W2luZGV4ICsgc29ydF0gPSBhO1xuICAgICAgdGhpcy5mb3JtQ3JlYXRlSW5qZWN0LnN1YkZvcm0odGhpcy5zb3J0Lm1hcChmdW5jdGlvbiAoaykge1xuICAgICAgICByZXR1cm4gX3RoaXMxMC5jYWNoZVJ1bGVba10uJGY7XG4gICAgICB9KSk7XG4gICAgICB0aGlzLmZvcm1EYXRhKDApO1xuICAgIH0sXG4gICAgbWFrZUljb246IGZ1bmN0aW9uIG1ha2VJY29uKHRvdGFsLCBpbmRleCwga2V5KSB7XG4gICAgICB2YXIgX3RoaXMxMSA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLiRzbG90cy5idXR0b24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNsb3RzLmJ1dHRvbih7XG4gICAgICAgICAgdG90YWw6IHRvdGFsLFxuICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICB2bTogdGhpcyxcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICBkZWw6IGZ1bmN0aW9uIGRlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczExLmRlbChpbmRleCwga2V5KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFkZDogdGhpcy5hZGRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBidG4gPSBbXTtcblxuICAgICAgaWYgKCghdGhpcy5tYXggfHwgdG90YWwgPCB0aGlzLm1heCkgJiYgdG90YWwgPT09IGluZGV4ICsgMSkge1xuICAgICAgICBidG4ucHVzaCh0aGlzLmFkZEljb24oa2V5KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0b3RhbCA+IHRoaXMubWluKSB7XG4gICAgICAgIGJ0bi5wdXNoKHRoaXMuZGVsSWNvbihpbmRleCwga2V5KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnNvcnRCdG4gJiYgaW5kZXgpIHtcbiAgICAgICAgYnRuLnB1c2godGhpcy5zb3J0VXBJY29uKGluZGV4KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnNvcnRCdG4gJiYgaW5kZXggIT09IHRvdGFsIC0gMSkge1xuICAgICAgICBidG4ucHVzaCh0aGlzLnNvcnREb3duSWNvbihpbmRleCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnRuO1xuICAgIH0sXG4gICAgZW1pdEV2ZW50OiBmdW5jdGlvbiBlbWl0RXZlbnQobmFtZSwgYXJncywgaW5kZXgsIGtleSkge1xuICAgICAgdGhpcy4kZW1pdC5hcHBseSh0aGlzLCBbbmFtZV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhcmdzKSwgW3RoaXMuY2FjaGVSdWxlW2tleV0uJGYsIGluZGV4XSkpO1xuICAgIH0sXG4gICAgZXhwYW5kUnVsZTogZnVuY3Rpb24gZXhwYW5kUnVsZShuKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICB0aGlzLmFkZFJ1bGUoaSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHZhciBfdGhpczEyID0gdGhpcztcblxuICAgIHdhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkMih7fSwgX3RoaXMxMi5jYWNoZVJ1bGUpO1xuICAgIH0sIGZ1bmN0aW9uIChuKSB7XG4gICAgICBfdGhpczEyLnNvcnQgPSBPYmplY3Qua2V5cyhuKTtcbiAgICB9LCB7XG4gICAgICBpbW1lZGlhdGU6IHRydWVcbiAgICB9KTtcbiAgICB2YXIgZCA9ICh0aGlzLmV4cGFuZCB8fCAwKSAtIHRoaXMubW9kZWxWYWx1ZS5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubW9kZWxWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hZGRSdWxlKGkpO1xuICAgIH1cblxuICAgIGlmIChkID4gMCkge1xuICAgICAgdGhpcy5leHBhbmRSdWxlKGQpO1xuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzMTMgPSB0aGlzO1xuXG4gICAgdmFyIGtleXMgPSB0aGlzLnNvcnQ7XG4gICAgdmFyIGJ1dHRvbiA9IHRoaXMuYnV0dG9uO1xuICAgIHZhciBUeXBlID0gdGhpcy5mb3JtO1xuICAgIHZhciBkaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG4gICAgdmFyIGNoaWxkcmVuID0ga2V5cy5sZW5ndGggPT09IDAgPyB0aGlzLiRzbG90c1tcImRlZmF1bHRcIl0gPyB0aGlzLiRzbG90c1tcImRlZmF1bHRcIl0oe1xuICAgICAgdm06IHRoaXMsXG4gICAgICBhZGQ6IHRoaXMuYWRkXG4gICAgfSkgOiBjcmVhdGVWTm9kZShcImRpdlwiLCB7XG4gICAgICBcImtleVwiOiAnYV9kZWYnLFxuICAgICAgXCJjbGFzc1wiOiBcIl9mYy1ncm91cC1wbHVzLW1pbnVzIF9mYy1ncm91cC1hZGQgZmMtY2xvY2tcIixcbiAgICAgIFwib25DbGlja1wiOiB0aGlzLmFkZFxuICAgIH0sIG51bGwpIDoga2V5cy5tYXAoZnVuY3Rpb24gKGtleSwgaW5kZXgpIHtcbiAgICAgIHZhciBfdGhpczEzJGNhY2hlUnVsZSRrZXkgPSBfdGhpczEzLmNhY2hlUnVsZVtrZXldLFxuICAgICAgICAgIHJ1bGUgPSBfdGhpczEzJGNhY2hlUnVsZSRrZXkucnVsZSxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMxMyRjYWNoZVJ1bGUka2V5Lm9wdGlvbnM7XG4gICAgICB2YXIgYnRuID0gYnV0dG9uICYmICFkaXNhYmxlZCA/IF90aGlzMTMubWFrZUljb24oa2V5cy5sZW5ndGgsIGluZGV4LCBrZXkpIDogW107XG4gICAgICByZXR1cm4gY3JlYXRlVk5vZGUoXCJkaXZcIiwge1xuICAgICAgICBcImNsYXNzXCI6IFwiX2ZjLWdyb3VwLWNvbnRhaW5lclwiLFxuICAgICAgICBcImtleVwiOiBrZXlcbiAgICAgIH0sIFtjcmVhdGVWTm9kZShUeXBlLCBtZXJnZVByb3BzJDEoe1xuICAgICAgICBcImtleVwiOiBrZXlcbiAgICAgIH0sIHtcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAnb25VcGRhdGU6bW9kZWxWYWx1ZSc6IGZ1bmN0aW9uIG9uVXBkYXRlTW9kZWxWYWx1ZShmb3JtRGF0YSkge1xuICAgICAgICAgIHJldHVybiBfdGhpczEzLmZvcm1EYXRhKGtleSwgZm9ybURhdGEpO1xuICAgICAgICB9LFxuICAgICAgICAnb25FbWl0LWV2ZW50JzogZnVuY3Rpb24gb25FbWl0RXZlbnQobmFtZSkge1xuICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBfdGhpczEzLmVtaXRFdmVudChuYW1lLCBhcmdzLCBpbmRleCwga2V5KTtcbiAgICAgICAgfSxcbiAgICAgICAgJ29uVXBkYXRlOmFwaSc6IGZ1bmN0aW9uIG9uVXBkYXRlQXBpKCRmKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMTMuYWRkJGYoaW5kZXgsIGtleSwgJGYpO1xuICAgICAgICB9LFxuICAgICAgICBpbkZvcjogdHJ1ZSxcbiAgICAgICAgbW9kZWxWYWx1ZTogX3RoaXMxMy5maWVsZCA/IF9kZWZpbmVQcm9wZXJ0eSh7fSwgX3RoaXMxMy5maWVsZCwgX3RoaXMxMy5fdmFsdWUoX3RoaXMxMy5tb2RlbFZhbHVlW2luZGV4XSkpIDogX3RoaXMxMy5tb2RlbFZhbHVlW2luZGV4XSxcbiAgICAgICAgcnVsZTogcnVsZSxcbiAgICAgICAgb3B0aW9uOiBvcHRpb25zLFxuICAgICAgICBleHRlbmRPcHRpb246IHRydWVcbiAgICAgIH0pLCBudWxsKSwgY3JlYXRlVk5vZGUoXCJkaXZcIiwge1xuICAgICAgICBcImNsYXNzXCI6IFwiX2ZjLWdyb3VwLWlkeFwiXG4gICAgICB9LCBbaW5kZXggKyAxXSksIGJ0bi5sZW5ndGggPyBjcmVhdGVWTm9kZShcImRpdlwiLCB7XG4gICAgICAgIFwiY2xhc3NcIjogXCJfZmMtZ3JvdXAtaGFuZGxlIGZjLWNsb2NrXCJcbiAgICAgIH0sIFtidG5dKSA6IG51bGxdKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY3JlYXRlVk5vZGUoXCJkaXZcIiwge1xuICAgICAgXCJrZXlcIjogJ2NvbicsXG4gICAgICBcImNsYXNzXCI6ICdfZmMtZ3JvdXAgJyArIChkaXNhYmxlZCA/ICdfZmMtZ3JvdXAtZGlzYWJsZWQnIDogJycpXG4gICAgfSwgW2NoaWxkcmVuXSk7XG4gIH1cbn0pO1xuXG52YXIgTkFNRSQxID0gJ2ZjU3ViRm9ybSc7XG52YXIgU3ViID0gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogTkFNRSQxLFxuICBwcm9wczoge1xuICAgIHJ1bGU6IEFycmF5LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHJlYWN0aXZlKHtcbiAgICAgICAgICBzdWJtaXRCdG46IGZhbHNlLFxuICAgICAgICAgIHJlc2V0QnRuOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICB9LFxuICAgIHN5bmNEaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIFwiZGVmYXVsdFwiOiB0cnVlXG4gICAgfSxcbiAgICBmb3JtQ3JlYXRlSW5qZWN0OiBPYmplY3RcbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2FjaGVWYWx1ZToge30sXG4gICAgICBzdWJBcGk6IHt9LFxuICAgICAgZm9ybTogbWFya1Jhdyh0aGlzLmZvcm1DcmVhdGVJbmplY3QuZm9ybS4kZm9ybSgpKVxuICAgIH07XG4gIH0sXG4gIGVtaXRzOiBbJ2ZjOnN1YmZvcm0nLCAndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJywgJ2l0ZW1Nb3VudGVkJ10sXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZTogZnVuY3Rpb24gbW9kZWxWYWx1ZShuKSB7XG4gICAgICB0aGlzLnNldFZhbHVlKG4pO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGZvcm1EYXRhOiBmdW5jdGlvbiBmb3JtRGF0YSh2YWx1ZSkge1xuICAgICAgdGhpcy5jYWNoZVZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWx1ZSk7XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRWYWx1ZTogZnVuY3Rpb24gc2V0VmFsdWUodmFsdWUpIHtcbiAgICAgIHZhciBzdHIgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG5cbiAgICAgIGlmICh0aGlzLmNhY2hlVmFsdWUgPT09IHN0cikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FjaGVWYWx1ZSA9IHN0cjtcbiAgICAgIHRoaXMuc3ViQXBpLmNvdmVyVmFsdWUodmFsdWUgfHwge30pO1xuICAgIH0sXG4gICAgYWRkJGY6IGZ1bmN0aW9uIGFkZCRmKGFwaSkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy5zdWJBcGkgPSBhcGk7XG4gICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLiRlbWl0KCdpdGVtTW91bnRlZCcsIGFwaSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBUeXBlID0gdGhpcy5mb3JtO1xuICAgIHJldHVybiBjcmVhdGVWTm9kZShUeXBlLCB7XG4gICAgICBcImRpc2FibGVkXCI6IHRoaXMuZGlzYWJsZWQsXG4gICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogdGhpcy5mb3JtRGF0YSxcbiAgICAgIFwibW9kZWxWYWx1ZVwiOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBcIm9uRW1pdC1ldmVudFwiOiB0aGlzLiRlbWl0LFxuICAgICAgXCJvblVwZGF0ZTphcGlcIjogdGhpcy5hZGQkZixcbiAgICAgIFwicnVsZVwiOiB0aGlzLnJ1bGUsXG4gICAgICBcIm9wdGlvblwiOiB0aGlzLm9wdGlvbnMsXG4gICAgICBcImV4dGVuZE9wdGlvblwiOiB0cnVlXG4gICAgfSwgbnVsbCk7XG4gIH1cbn0pO1xuXG52YXIgc2NyaXB0ID0ge1xuICBuYW1lOiAnSWNvbldhcm5pbmcnXG59O1xuXG52YXIgX2hvaXN0ZWRfMSA9IHtcbiAgXCJjbGFzc1wiOiBcImljb25cIixcbiAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbn07XG5cbnZhciBfaG9pc3RlZF8yID0gLyojX19QVVJFX18qL2NyZWF0ZUVsZW1lbnRWTm9kZShcInBhdGhcIiwge1xuICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICBkOiBcIk01MTIgNjRhNDQ4IDQ0OCAwIDExMCA4OTYgNDQ4IDQ0OCAwIDAxMC04OTZ6bTAgODMyYTM4NCAzODQgMCAwMDAtNzY4IDM4NCAzODQgMCAwMDAgNzY4em00OC0xNzZhNDggNDggMCAxMS05NiAwIDQ4IDQ4IDAgMDE5NiAwem0tNDgtNDY0YTMyIDMyIDAgMDEzMiAzMnYyODhhMzIgMzIgMCAwMS02NCAwVjI4OGEzMiAzMiAwIDAxMzItMzJ6XCJcbn0sIG51bGwsIC0xKTtcblxudmFyIF9ob2lzdGVkXzMgPSBbX2hvaXN0ZWRfMl07XG5mdW5jdGlvbiByZW5kZXIoX2N0eCwgX2NhY2hlLCAkcHJvcHMsICRzZXR1cCwgJGRhdGEsICRvcHRpb25zKSB7XG4gIHJldHVybiBvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKFwic3ZnXCIsIF9ob2lzdGVkXzEsIF9ob2lzdGVkXzMpO1xufVxuXG5zY3JpcHQucmVuZGVyID0gcmVuZGVyO1xuXG52YXIgY29tcG9uZW50cyA9IFtDaGVja2JveCwgRnJhbWUsIFJhZGlvLCBTZWxlY3QsIFRyZWUsIFVwbG9hZCwgR3JvdXAsIFN1Yiwgc2NyaXB0XTtcblxuZnVuY3Rpb24gZGVib3VuY2UoZm4sIHdhaXQpIHtcbiAgdmFyIHRpbWVvdXQgPSBudWxsO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJnID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIGlmICh0aW1lb3V0ICE9PSBudWxsKSBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwuYXBwbHkoZm4sIFtfdGhpc10uY29uY2F0KGFyZykpO1xuICAgIH0sIHdhaXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0b0xpbmUobmFtZSkge1xuICB2YXIgbGluZSA9IG5hbWUucmVwbGFjZSgvKFtBLVpdKS9nLCAnLSQxJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgaWYgKGxpbmUuaW5kZXhPZignLScpID09PSAwKSBsaW5lID0gbGluZS5zdWJzdHIoMSk7XG4gIHJldHVybiBsaW5lO1xufVxuZnVuY3Rpb24gdXBwZXIoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShzdHJbMF0sIHN0clswXS50b0xvY2FsZVVwcGVyQ2FzZSgpKTtcbn1cblxudmFyIF9nZXRHcm91cEluamVjdCA9IGZ1bmN0aW9uIGdldEdyb3VwSW5qZWN0KHZtLCBwYXJlbnQpIHtcbiAgaWYgKCF2bSB8fCB2bSA9PT0gcGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHZtLnByb3BzLmZvcm1DcmVhdGVJbmplY3QpIHtcbiAgICByZXR1cm4gdm0ucHJvcHMuZm9ybUNyZWF0ZUluamVjdDtcbiAgfVxuXG4gIGlmICh2bS5wYXJlbnQpIHtcbiAgICByZXR1cm4gX2dldEdyb3VwSW5qZWN0KHZtLnBhcmVudCwgcGFyZW50KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gJEZvcm1DcmVhdGUoRm9ybUNyZWF0ZSwgY29tcG9uZW50cywgZGlyZWN0aXZlcykge1xuICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KHtcbiAgICBuYW1lOiAnRm9ybUNyZWF0ZScgKyAoRm9ybUNyZWF0ZS5pc01vYmlsZSA/ICdNb2JpbGUnIDogJycpLFxuICAgIGNvbXBvbmVudHM6IGNvbXBvbmVudHMsXG4gICAgZGlyZWN0aXZlczogZGlyZWN0aXZlcyxcbiAgICBwcm9wczoge1xuICAgICAgcnVsZToge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvcHRpb246IHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICBcImRlZmF1bHRcIjogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXh0ZW5kT3B0aW9uOiBCb29sZWFuLFxuICAgICAgZHJpdmVyOiBbU3RyaW5nLCBPYmplY3RdLFxuICAgICAgbW9kZWxWYWx1ZTogT2JqZWN0LFxuICAgICAgZGlzYWJsZWQ6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgXCJkZWZhdWx0XCI6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIHByZXZpZXc6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgXCJkZWZhdWx0XCI6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIGluZGV4OiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgYXBpOiBPYmplY3QsXG4gICAgICBuYW1lOiBTdHJpbmcsXG4gICAgICBzdWJGb3JtOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIFwiZGVmYXVsdFwiOiB0cnVlXG4gICAgICB9LFxuICAgICAgaW5Gb3I6IEJvb2xlYW5cbiAgICB9LFxuICAgIGVtaXRzOiBbJ3VwZGF0ZTphcGknLCAndXBkYXRlOm1vZGVsVmFsdWUnLCAnbW91bnRlZCcsICdzdWJtaXQnLCAnY2hhbmdlJywgJ2VtaXQtZXZlbnQnLCAnY29udHJvbCcsICdyZW1vdmUtcnVsZScsICdyZW1vdmUtZmllbGQnLCAnc3luYycsICdyZWxvYWQnLCAncmVwZWF0LWZpZWxkJywgJ3VwZGF0ZScsICd2YWxpZGF0ZS1maWVsZC1mYWlsJywgJ3ZhbGlkYXRlLWZhaWwnLCAnY3JlYXRlZCddLFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmMucmVuZGVyKCk7XG4gICAgfSxcbiAgICBzZXR1cDogZnVuY3Rpb24gc2V0dXAocHJvcHMpIHtcbiAgICAgIHZhciB2bSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICAgICAgcHJvdmlkZSgncGFyZW50RkMnLCB2bSk7XG4gICAgICB2YXIgcGFyZW50ID0gaW5qZWN0KCdwYXJlbnRGQycsIG51bGwpO1xuXG4gICAgICB2YXIgX3RvUmVmcyA9IHRvUmVmcyhwcm9wcyksXG4gICAgICAgICAgcnVsZSA9IF90b1JlZnMucnVsZSxcbiAgICAgICAgICBtb2RlbFZhbHVlID0gX3RvUmVmcy5tb2RlbFZhbHVlLFxuICAgICAgICAgIHN1YkZvcm0gPSBfdG9SZWZzLnN1YkZvcm0sXG4gICAgICAgICAgaW5Gb3IgPSBfdG9SZWZzLmluRm9yO1xuXG4gICAgICB2YXIgZGF0YSA9IHJlYWN0aXZlKHtcbiAgICAgICAgY3R4SW5qZWN0OiB7fSxcbiAgICAgICAgZGVzdHJveWVkOiBmYWxzZSxcbiAgICAgICAgaXNTaG93OiB0cnVlLFxuICAgICAgICB1bmlxdWU6IDEsXG4gICAgICAgIHJlbmRlclJ1bGU6IF90b0NvbnN1bWFibGVBcnJheShydWxlLnZhbHVlIHx8IFtdKSxcbiAgICAgICAgdXBkYXRlVmFsdWU6IEpTT04uc3RyaW5naWZ5KG1vZGVsVmFsdWUudmFsdWUgfHwge30pXG4gICAgICB9KTtcbiAgICAgIHZhciBmYyA9IG5ldyBGb3JtQ3JlYXRlKHZtKTtcbiAgICAgIHZhciBmYXBpID0gZmMuYXBpKCk7XG4gICAgICB2YXIgaXNNb3JlID0gaW5Gb3IudmFsdWU7XG5cbiAgICAgIHZhciBhZGRTdWJGb3JtID0gZnVuY3Rpb24gYWRkU3ViRm9ybSgpIHtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgIHZhciBfaW5qZWN0ID0gX2dldEdyb3VwSW5qZWN0KHZtLCBwYXJlbnQpO1xuXG4gICAgICAgICAgaWYgKF9pbmplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdWI7XG5cbiAgICAgICAgICAgIGlmIChpc01vcmUpIHtcbiAgICAgICAgICAgICAgc3ViID0gdG9BcnJheShfaW5qZWN0LmdldFN1YkZvcm0oKSk7XG4gICAgICAgICAgICAgIHN1Yi5wdXNoKGZhcGkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3ViID0gZmFwaTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX2luamVjdC5zdWJGb3JtKHN1Yik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB2YXIgcm1TdWJGb3JtID0gZnVuY3Rpb24gcm1TdWJGb3JtKCkge1xuICAgICAgICB2YXIgaW5qZWN0ID0gX2dldEdyb3VwSW5qZWN0KHZtLCBwYXJlbnQpO1xuXG4gICAgICAgIGlmIChpbmplY3QpIHtcbiAgICAgICAgICBpZiAoaXNNb3JlKSB7XG4gICAgICAgICAgICB2YXIgc3ViID0gdG9BcnJheShpbmplY3QuZ2V0U3ViRm9ybSgpKTtcbiAgICAgICAgICAgIHZhciBpZHggPSBzdWIuaW5kZXhPZihmYXBpKTtcblxuICAgICAgICAgICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICAgICAgICAgIHN1Yi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5qZWN0LnN1YkZvcm0oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHZhciBzdHlsZUVsID0gbnVsbDtcbiAgICAgIG9uQmVmb3JlTW91bnQoZnVuY3Rpb24gKCkge1xuICAgICAgICB3YXRjaEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGNvbnRlbnQgPSAnJztcbiAgICAgICAgICB2YXIgZ2xvYmFsQ2xhc3MgPSBwcm9wcy5vcHRpb24gJiYgcHJvcHMub3B0aW9uLmdsb2JhbENsYXNzIHx8IHt9O1xuICAgICAgICAgIE9iamVjdC5rZXlzKGdsb2JhbENsYXNzKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICB2YXIgc3ViQ3NzID0gJyc7XG4gICAgICAgICAgICBnbG9iYWxDbGFzc1trXS5zdHlsZSAmJiBPYmplY3Qua2V5cyhnbG9iYWxDbGFzc1trXS5zdHlsZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgIHN1YkNzcyArPSB0b0xpbmUoa2V5KSArICc6JyArIGdsb2JhbENsYXNzW2tdLnN0eWxlW2tleV0gKyAnOyc7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGdsb2JhbENsYXNzW2tdLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgc3ViQ3NzICs9IGdsb2JhbENsYXNzW2tdLmNvbnRlbnQgKyAnOyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdWJDc3MpIHtcbiAgICAgICAgICAgICAgY29udGVudCArPSBcIi5cIi5jb25jYXQoaywgXCJ7XCIpLmNvbmNhdChzdWJDc3MsIFwifVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChwcm9wcy5vcHRpb24gJiYgcHJvcHMub3B0aW9uLnN0eWxlKSB7XG4gICAgICAgICAgICBjb250ZW50ICs9IHByb3BzLm9wdGlvbi5zdHlsZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0eWxlRWwpIHtcbiAgICAgICAgICAgIHN0eWxlRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICAgICAgc3R5bGVFbC50eXBlID0gJ3RleHQvY3NzJztcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3R5bGVFbC5pbm5lckhUTUwgPSBjb250ZW50IHx8ICcnO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGVtaXQkdG9wRm9ybSA9IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZmMuYnVzLiRlbWl0KCckbG9hZERhdGEuJHRvcEZvcm0nKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgICB2YXIgZW1pdCRmb3JtID0gZGVib3VuY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICBmYy5idXMuJGVtaXQoJyRsb2FkRGF0YS4kZm9ybScpO1xuICAgICAgfSwgMTAwKTtcblxuICAgICAgdmFyIGVtaXQkY2hhbmdlID0gZnVuY3Rpb24gZW1pdCRjaGFuZ2UoZmllbGQpIHtcbiAgICAgICAgZmMuYnVzLiRlbWl0KCdjaGFuZ2UtJGZvcm0uJyArIGZpZWxkKTtcbiAgICAgIH07XG5cbiAgICAgIG9uTW91bnRlZChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICBmYXBpLnRvcC5idXMuJG9uKCckbG9hZERhdGEuJGZvcm0nLCBlbWl0JHRvcEZvcm0pO1xuICAgICAgICAgIGZhcGkudG9wLmJ1cy4kb24oJ2NoYW5nZScsIGVtaXQkY2hhbmdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZjLm1vdW50ZWQoKTtcbiAgICAgIH0pO1xuICAgICAgb25CZWZvcmVVbm1vdW50KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgIGZhcGkudG9wLmJ1cy4kb2ZmKCckbG9hZERhdGEuJGZvcm0nLCBlbWl0JHRvcEZvcm0pO1xuICAgICAgICAgIGZhcGkudG9wLmJ1cy4kb2ZmKCdjaGFuZ2UnLCBlbWl0JGNoYW5nZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZUVsICYmIGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoc3R5bGVFbCk7XG4gICAgICAgIHJtU3ViRm9ybSgpO1xuICAgICAgICBkYXRhLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIGZjLnVubW91bnQoKTtcbiAgICAgIH0pO1xuICAgICAgb25VcGRhdGVkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZmMudXBkYXRlZCgpO1xuICAgICAgfSk7XG4gICAgICB3YXRjaChzdWJGb3JtLCBmdW5jdGlvbiAobikge1xuICAgICAgICBuID8gYWRkU3ViRm9ybSgpIDogcm1TdWJGb3JtKCk7XG4gICAgICB9LCB7XG4gICAgICAgIGltbWVkaWF0ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICB3YXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdG9Db25zdW1hYmxlQXJyYXkocnVsZS52YWx1ZSk7XG4gICAgICB9LCBmdW5jdGlvbiAobikge1xuICAgICAgICBpZiAoZmMuJGhhbmRsZS5pc0JyZWFrV2F0Y2goKSB8fCBuLmxlbmd0aCA9PT0gZGF0YS5yZW5kZXJSdWxlLmxlbmd0aCAmJiBuLmV2ZXJ5KGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGEucmVuZGVyUnVsZS5pbmRleE9mKHYpID4gLTE7XG4gICAgICAgIH0pKSByZXR1cm47XG4gICAgICAgIGZjLiRoYW5kbGUucmVsb2FkUnVsZShydWxlLnZhbHVlKTtcbiAgICAgICAgdm0uc2V0dXBTdGF0ZS5yZW5kZXJSdWxlKCk7XG4gICAgICB9KTtcbiAgICAgIHdhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHByb3BzLm9wdGlvbjtcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZmMuaW5pdE9wdGlvbnMoKTtcbiAgICAgICAgZmFwaS5yZWZyZXNoKCk7XG4gICAgICB9LCB7XG4gICAgICAgIGRlZXA6IHRydWVcbiAgICAgIH0pO1xuICAgICAgd2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gW3Byb3BzLmRpc2FibGVkLCBwcm9wcy5wcmV2aWV3XTtcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZmFwaS5yZWZyZXNoKCk7XG4gICAgICB9KTtcbiAgICAgIHdhdGNoKG1vZGVsVmFsdWUsIGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShuIHx8IHt9KSA9PT0gZGF0YS51cGRhdGVWYWx1ZSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChmYXBpLmNvbmZpZy5mb3JjZUNvdmVyVmFsdWUpIHtcbiAgICAgICAgICBmYXBpLmNvdmVyVmFsdWUobiB8fCB7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmFwaS5zZXRWYWx1ZShuIHx8IHt9KTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBkZWVwOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHdhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHByb3BzLmluZGV4O1xuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmYXBpLmNvdmVyVmFsdWUoe30pO1xuICAgICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZmFwaS5jbGVhclZhbGlkYXRlU3RhdGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9LCB7XG4gICAgICAgIGZsdXNoOiAnc3luYydcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHtcbiAgICAgICAgZmM6IG1hcmtSYXcoZmMpLFxuICAgICAgICBwYXJlbnQ6IHBhcmVudCA/IG1hcmtSYXcocGFyZW50KSA6IHBhcmVudCxcbiAgICAgICAgZmFwaTogbWFya1JhdyhmYXBpKVxuICAgICAgfSwgdG9SZWZzKGRhdGEpKSwge30sIHtcbiAgICAgICAgZ2V0R3JvdXBJbmplY3Q6IGZ1bmN0aW9uIGdldEdyb3VwSW5qZWN0KCkge1xuICAgICAgICAgIHJldHVybiBfZ2V0R3JvdXBJbmplY3Qodm0sIHBhcmVudCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZnJlc2g6IGZ1bmN0aW9uIHJlZnJlc2goKSB7XG4gICAgICAgICAgKytkYXRhLnVuaXF1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyUnVsZTogZnVuY3Rpb24gcmVuZGVyUnVsZSgpIHtcbiAgICAgICAgICBkYXRhLnJlbmRlclJ1bGUgPSBfdG9Db25zdW1hYmxlQXJyYXkocnVsZS52YWx1ZSB8fCBbXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZVZhbHVlOiBmdW5jdGlvbiB1cGRhdGVWYWx1ZSh2YWx1ZSkge1xuICAgICAgICAgIGlmIChkYXRhLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgIHZhciBqc29uID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXG4gICAgICAgICAgaWYgKGRhdGEudXBkYXRlVmFsdWUgPT09IGpzb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhLnVwZGF0ZVZhbHVlID0ganNvbjtcbiAgICAgICAgICB2bS5lbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKTtcbiAgICAgICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbWl0JGZvcm0oKTtcblxuICAgICAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgICAgZW1pdCR0b3BGb3JtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICAgIHZhciB2bSA9IGdldEN1cnJlbnRJbnN0YW5jZSgpO1xuICAgICAgdm0uZW1pdCgndXBkYXRlOmFwaScsIHZtLnNldHVwU3RhdGUuZmFwaSk7XG4gICAgICB2bS5zZXR1cFN0YXRlLmZjLmluaXQoKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgbm9ybWFsTWVyZ2UgPSBbJ3Byb3BzJ107XG52YXIgdG9BcnJheU1lcmdlID0gWydjbGFzcycsICdzdHlsZScsICdkaXJlY3RpdmVzJ107XG52YXIgZnVuY3Rpb25hbE1lcmdlID0gWydvbiddO1xuXG52YXIgbWVyZ2VQcm9wcyA9IGZ1bmN0aW9uIG1lcmdlUHJvcHMob2JqZWN0cykge1xuICB2YXIgaW5pdGlhbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhciBvcHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG4gIHZhciBfbm9ybWFsTWVyZ2UgPSBbXS5jb25jYXQobm9ybWFsTWVyZ2UsIF90b0NvbnN1bWFibGVBcnJheShvcHRbJ25vcm1hbCddIHx8IFtdKSk7XG5cbiAgdmFyIF90b0FycmF5TWVyZ2UgPSBbXS5jb25jYXQodG9BcnJheU1lcmdlLCBfdG9Db25zdW1hYmxlQXJyYXkob3B0WydhcnJheSddIHx8IFtdKSk7XG5cbiAgdmFyIF9mdW5jdGlvbmFsTWVyZ2UgPSBbXS5jb25jYXQoZnVuY3Rpb25hbE1lcmdlLCBfdG9Db25zdW1hYmxlQXJyYXkob3B0WydmdW5jdGlvbmFsJ10gfHwgW10pKTtcblxuICB2YXIgcHJvcHNNZXJnZSA9IG9wdFsncHJvcHMnXSB8fCBbXTtcbiAgcmV0dXJuIG9iamVjdHMucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgZm9yICh2YXIga2V5IGluIGIpIHtcbiAgICAgIGlmIChhW2tleV0pIHtcbiAgICAgICAgaWYgKHByb3BzTWVyZ2UuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgICAgICBhW2tleV0gPSBtZXJnZVByb3BzKFtiW2tleV1dLCBhW2tleV0pO1xuICAgICAgICB9IGVsc2UgaWYgKF9ub3JtYWxNZXJnZS5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgICAgIGFba2V5XSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBhW2tleV0pLCBiW2tleV0pO1xuICAgICAgICB9IGVsc2UgaWYgKF90b0FycmF5TWVyZ2UuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgICAgICB2YXIgYXJyQSA9IGFba2V5XSBpbnN0YW5jZW9mIEFycmF5ID8gYVtrZXldIDogW2Fba2V5XV07XG4gICAgICAgICAgdmFyIGFyckIgPSBiW2tleV0gaW5zdGFuY2VvZiBBcnJheSA/IGJba2V5XSA6IFtiW2tleV1dO1xuICAgICAgICAgIGFba2V5XSA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoYXJyQSksIF90b0NvbnN1bWFibGVBcnJheShhcnJCKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoX2Z1bmN0aW9uYWxNZXJnZS5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgICAgIGZvciAodmFyIGV2ZW50IGluIGJba2V5XSkge1xuICAgICAgICAgICAgaWYgKGFba2V5XVtldmVudF0pIHtcbiAgICAgICAgICAgICAgdmFyIF9hcnJBID0gYVtrZXldW2V2ZW50XSBpbnN0YW5jZW9mIEFycmF5ID8gYVtrZXldW2V2ZW50XSA6IFthW2tleV1bZXZlbnRdXTtcblxuICAgICAgICAgICAgICB2YXIgX2FyckIgPSBiW2tleV1bZXZlbnRdIGluc3RhbmNlb2YgQXJyYXkgPyBiW2tleV1bZXZlbnRdIDogW2Jba2V5XVtldmVudF1dO1xuXG4gICAgICAgICAgICAgIGFba2V5XVtldmVudF0gPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KF9hcnJBKSwgX3RvQ29uc3VtYWJsZUFycmF5KF9hcnJCKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhW2tleV1bZXZlbnRdID0gYltrZXldW2V2ZW50XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaG9vaycpIHtcbiAgICAgICAgICBmb3IgKHZhciBob29rIGluIGJba2V5XSkge1xuICAgICAgICAgICAgaWYgKGFba2V5XVtob29rXSkge1xuICAgICAgICAgICAgICBhW2tleV1baG9va10gPSBtZXJnZUZuKGFba2V5XVtob29rXSwgYltrZXldW2hvb2tdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFba2V5XVtob29rXSA9IGJba2V5XVtob29rXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYVtrZXldID0gYltrZXldO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoX25vcm1hbE1lcmdlLmluZGV4T2Yoa2V5KSA+IC0xIHx8IF9mdW5jdGlvbmFsTWVyZ2UuaW5kZXhPZihrZXkpID4gLTEgfHwgcHJvcHNNZXJnZS5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgICAgIGFba2V5XSA9IF9vYmplY3RTcHJlYWQyKHt9LCBiW2tleV0pO1xuICAgICAgICB9IGVsc2UgaWYgKF90b0FycmF5TWVyZ2UuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgICAgICBhW2tleV0gPSBiW2tleV0gaW5zdGFuY2VvZiBBcnJheSA/IF90b0NvbnN1bWFibGVBcnJheShiW2tleV0pIDogX3R5cGVvZihiW2tleV0pID09PSAnb2JqZWN0JyA/IF9vYmplY3RTcHJlYWQyKHt9LCBiW2tleV0pIDogYltrZXldO1xuICAgICAgICB9IGVsc2UgYVtrZXldID0gYltrZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9LCBpbml0aWFsKTtcbn07XG5cbnZhciBtZXJnZUZuID0gZnVuY3Rpb24gbWVyZ2VGbihmbjEsIGZuMikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGZuMSAmJiBmbjEuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBmbjIgJiYgZm4yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuXG52YXIga2V5QXR0cnMgPSBbJ3R5cGUnLCAnc2xvdCcsICdlbWl0UHJlZml4JywgJ3ZhbHVlJywgJ25hbWUnLCAnbmF0aXZlJywgJ2hpZGRlbicsICdkaXNwbGF5JywgJ2luamVjdCcsICdvcHRpb25zJywgJ2VtaXQnLCAnbGluaycsICdwcmVmaXgnLCAnc3VmZml4JywgJ3VwZGF0ZScsICdzeW5jJywgJ29wdGlvbnNUbycsICdrZXknLCAnc2xvdFVwZGF0ZScsICdjb21wdXRlZCcsICdwcmV2aWV3JywgJ2NvbXBvbmVudCcsICdjYWNoZScsICdtb2RlbEVtaXQnXTtcbnZhciBhcnJheUF0dHJzID0gWyd2YWxpZGF0ZScsICdjaGlsZHJlbicsICdjb250cm9sJ107XG52YXIgbm9ybWFsQXR0cnMgPSBbJ2VmZmVjdCcsICdkZWVwJ107XG5mdW5jdGlvbiBhdHRycygpIHtcbiAgcmV0dXJuIFtdLmNvbmNhdChrZXlBdHRycywgX3RvQ29uc3VtYWJsZUFycmF5KG5vcm1hbE1lcmdlKSwgX3RvQ29uc3VtYWJsZUFycmF5KHRvQXJyYXlNZXJnZSksIF90b0NvbnN1bWFibGVBcnJheShmdW5jdGlvbmFsTWVyZ2UpLCBhcnJheUF0dHJzLCBub3JtYWxBdHRycyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdCh0eXBlLCBtc2csIHJ1bGUpIHtcbiAgcmV0dXJuIFwiW2Zvcm0tY3JlYXRlIFwiLmNvbmNhdCh0eXBlLCBcIl06IFwiKS5jb25jYXQobXNnKSArIChydWxlID8gJ1xcblxcbnJ1bGU6ICcgKyBKU09OLnN0cmluZ2lmeShydWxlLmdldFJ1bGUgPyBydWxlLmdldFJ1bGUoKSA6IHJ1bGUpIDogJycpO1xufVxuZnVuY3Rpb24gZXJyKG1zZywgcnVsZSkge1xuICBjb25zb2xlLmVycm9yKGZvcm1hdCgnZXJyJywgbXNnLCBydWxlKSk7XG59XG5mdW5jdGlvbiBsb2dFcnJvcihlKSB7XG4gIGVycihlLnRvU3RyaW5nKCkpO1xuICBjb25zb2xlLmVycm9yKGUpO1xufVxuXG52YXIgUFJFRklYID0gJ1tbRk9STS1DUkVBVEUtUFJFRklYLSc7XG52YXIgU1VGRklYID0gJy1GT1JNLUNSRUFURS1TVUZGSVhdXSc7XG52YXIgJFQgPSAnJEZOOic7XG52YXIgJFRYID0gJyRGTlg6JztcbnZhciAkT04gPSAnJEdMT0JBTDonO1xudmFyIEZVTkNUSU9OID0gJ2Z1bmN0aW9uJztcbmZ1bmN0aW9uIHRvSnNvbihvYmosIHNwYWNlKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShkZWVwRXh0ZW5kKEFycmF5LmlzQXJyYXkob2JqKSA/IFtdIDoge30sIG9iaiwgdHJ1ZSksIGZ1bmN0aW9uIChrZXksIHZhbCkge1xuICAgIGlmICh2YWwgJiYgdmFsLl9pc1Z1ZSA9PT0gdHJ1ZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGlmIChfdHlwZW9mKHZhbCkgIT09IEZVTkNUSU9OKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxuICAgIGlmICh2YWwuX19qc29uKSB7XG4gICAgICByZXR1cm4gdmFsLl9fanNvbjtcbiAgICB9XG5cbiAgICBpZiAodmFsLl9fb3JpZ2luKSB2YWwgPSB2YWwuX19vcmlnaW47XG4gICAgaWYgKHZhbC5fX2VtaXQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIFBSRUZJWCArIHZhbCArIFNVRkZJWDtcbiAgfSwgc3BhY2UpO1xufVxuXG5mdW5jdGlvbiBtYWtlRm4oZm4pIHtcbiAgcmV0dXJuIG5ldyBGdW5jdGlvbigncmV0dXJuICcgKyBmbikoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGbihmbiwgbW9kZSkge1xuICBpZiAoZm4gJiYgaXMuU3RyaW5nKGZuKSAmJiBmbi5sZW5ndGggPiA0KSB7XG4gICAgdmFyIHYgPSBmbi50cmltKCk7XG4gICAgdmFyIGZsYWcgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAodi5pbmRleE9mKFNVRkZJWCkgPiAwICYmIHYuaW5kZXhPZihQUkVGSVgpID09PSAwKSB7XG4gICAgICAgIHYgPSB2LnJlcGxhY2UoU1VGRklYLCAnJykucmVwbGFjZShQUkVGSVgsICcnKTtcbiAgICAgICAgZmxhZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHYuaW5kZXhPZigkVCkgPT09IDApIHtcbiAgICAgICAgdiA9IHYucmVwbGFjZSgkVCwgJycpO1xuICAgICAgICBmbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodi5pbmRleE9mKCRPTikgPT09IDApIHtcbiAgICAgICAgdmFyIG5hbWUgPSB2LnJlcGxhY2UoJE9OLCAnJyk7XG5cbiAgICAgICAgdiA9IGZ1bmN0aW9uIHYoKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3NbMF0uYXBpLmdldEdsb2JhbEV2ZW50KG5hbWUpO1xuXG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbC5hcHBseShjYWxsYmFjaywgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfTtcblxuICAgICAgICB2Ll9fanNvbiA9IGZuO1xuICAgICAgICB2Ll9faW5qZWN0ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2UgaWYgKHYuaW5kZXhPZigkVFgpID09PSAwKSB7XG4gICAgICAgIHYgPSBtYWtlRm4oJ2Z1bmN0aW9uKCRpbmplY3QpeycgKyB2LnJlcGxhY2UoJFRYLCAnJykgKyAnfScpO1xuICAgICAgICB2Ll9fanNvbiA9IGZuO1xuICAgICAgICB2Ll9faW5qZWN0ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2UgaWYgKCFtb2RlICYmIHYuaW5kZXhPZihGVU5DVElPTikgPT09IDAgJiYgdiAhPT0gRlVOQ1RJT04pIHtcbiAgICAgICAgZmxhZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghZmxhZykgcmV0dXJuIGZuO1xuICAgICAgdmFyIHZhbCA9IG1ha2VGbih2LmluZGV4T2YoRlVOQ1RJT04pID09PSAtMSAmJiB2LmluZGV4T2YoJygnKSAhPT0gMCA/IEZVTkNUSU9OICsgJyAnICsgdiA6IHYpO1xuICAgICAgdmFsLl9fanNvbiA9IGZuO1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnIoXCJcXHU4OUUzXFx1Njc5MFxcdTU5MzFcXHU4RDI1OlwiLmNvbmNhdCh2LCBcIlxcblxcbmVycjogXCIpLmNvbmNhdChlKSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmbjtcbn1cbmZ1bmN0aW9uIHBhcnNlSnNvbihqc29uLCBtb2RlKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKGpzb24sIGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKGlzLlVuZGVmKHYpIHx8ICF2LmluZGV4T2YpIHJldHVybiB2O1xuICAgIHJldHVybiBwYXJzZUZuKHYsIG1vZGUpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZW51bWVyYWJsZSh2YWx1ZSwgd3JpdGFibGUpIHtcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICB3cml0YWJsZTogISF3cml0YWJsZVxuICB9O1xufSAvL3RvZG8g5LyY5YyW5L2N572uXG5cbmZ1bmN0aW9uIGNvcHlSdWxlKHJ1bGUsIG1vZGUpIHtcbiAgcmV0dXJuIGNvcHlSdWxlcyhbcnVsZV0sIG1vZGUgfHwgZmFsc2UpWzBdO1xufVxuZnVuY3Rpb24gY29weVJ1bGVzKHJ1bGVzLCBtb2RlKSB7XG4gIHJldHVybiBkZWVwRXh0ZW5kKFtdLCBfdG9Db25zdW1hYmxlQXJyYXkocnVsZXMpLCBtb2RlIHx8IGZhbHNlKTtcbn1cbmZ1bmN0aW9uIG1lcmdlUnVsZShydWxlLCBtZXJnZSkge1xuICBtZXJnZVByb3BzKEFycmF5LmlzQXJyYXkobWVyZ2UpID8gbWVyZ2UgOiBbbWVyZ2VdLCBydWxlLCB7XG4gICAgYXJyYXk6IGFycmF5QXR0cnMsXG4gICAgbm9ybWFsOiBub3JtYWxBdHRyc1xuICB9KTtcbiAgcmV0dXJuIHJ1bGU7XG59XG5mdW5jdGlvbiBnZXRSdWxlKHJ1bGUpIHtcbiAgdmFyIHIgPSBpcy5GdW5jdGlvbihydWxlLmdldFJ1bGUpID8gcnVsZS5nZXRSdWxlKCkgOiBydWxlO1xuXG4gIGlmICghci50eXBlKSB7XG4gICAgci50eXBlID0gJ2lucHV0JztcbiAgfVxuXG4gIHJldHVybiByO1xufVxuZnVuY3Rpb24gbWVyZ2VHbG9iYWwodGFyZ2V0LCBtZXJnZSkge1xuICBpZiAoIXRhcmdldCkgcmV0dXJuIG1lcmdlO1xuICBPYmplY3Qua2V5cyhtZXJnZSB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIGlmIChtZXJnZVtrXSkge1xuICAgICAgdGFyZ2V0W2tdID0gbWVyZ2VSdWxlKHRhcmdldFtrXSB8fCB7fSwgbWVyZ2Vba10pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0YXJnZXQ7XG59XG5mdW5jdGlvbiBmdW5jUHJveHkodGhhdCwgcHJveHkpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhhdCwgT2JqZWN0LmtleXMocHJveHkpLnJlZHVjZShmdW5jdGlvbiAoaW5pdGlhbCwgaykge1xuICAgIGluaXRpYWxba10gPSB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHByb3h5W2tdKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gaW5pdGlhbDtcbiAgfSwge30pKTtcbn1cbmZ1bmN0aW9uIGJ5Q3R4KHJ1bGUpIHtcbiAgcmV0dXJuIHJ1bGUuX19mY19fIHx8IChydWxlLl9fb3JpZ2luX18gPyBydWxlLl9fb3JpZ2luX18uX19mY19fIDogbnVsbCk7XG59XG5mdW5jdGlvbiBpbnZva2UoZm4sIGRlZikge1xuICB0cnkge1xuICAgIGRlZiA9IGZuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgfVxuXG4gIHJldHVybiBkZWY7XG59XG5mdW5jdGlvbiBtYWtlU2xvdEJhZygpIHtcbiAgdmFyIHNsb3RCYWcgPSB7fTtcblxuICB2YXIgc2xvdE5hbWUgPSBmdW5jdGlvbiBzbG90TmFtZShuKSB7XG4gICAgcmV0dXJuIG4gfHwgJ2RlZmF1bHQnO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgc2V0U2xvdDogZnVuY3Rpb24gc2V0U2xvdChzbG90LCB2bkZuKSB7XG4gICAgICBzbG90ID0gc2xvdE5hbWUoc2xvdCk7XG4gICAgICBpZiAoIXZuRm4gfHwgQXJyYXkuaXNBcnJheSh2bkZuKSAmJiB2bkZuLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgaWYgKCFzbG90QmFnW3Nsb3RdKSBzbG90QmFnW3Nsb3RdID0gW107XG4gICAgICBzbG90QmFnW3Nsb3RdLnB1c2godm5Gbik7XG4gICAgfSxcbiAgICBnZXRTbG90OiBmdW5jdGlvbiBnZXRTbG90KHNsb3QsIHZhbCkge1xuICAgICAgc2xvdCA9IHNsb3ROYW1lKHNsb3QpO1xuICAgICAgdmFyIGNoaWxkcmVuID0gW107XG4gICAgICAoc2xvdEJhZ1tzbG90XSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZm4pKSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaC5hcHBseShjaGlsZHJlbiwgX3RvQ29uc3VtYWJsZUFycmF5KGZuKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXMuRnVuY3Rpb24oZm4pKSB7XG4gICAgICAgICAgdmFyIHJlcyA9IGZuLmFwcGx5KHZvaWQgMCwgX3RvQ29uc3VtYWJsZUFycmF5KHZhbCB8fCBbXSkpO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzKSkge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaC5hcHBseShjaGlsZHJlbiwgX3RvQ29uc3VtYWJsZUFycmF5KHJlcykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFpcy5VbmRlZihmbikpIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKGZuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfSxcbiAgICBnZXRTbG90czogZnVuY3Rpb24gZ2V0U2xvdHMoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgc2xvdHMgPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKHNsb3RCYWcpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgc2xvdHNba10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBfdGhpcy5nZXRTbG90KGssIGFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gc2xvdHM7XG4gICAgfSxcbiAgICBzbG90TGVuOiBmdW5jdGlvbiBzbG90TGVuKHNsb3QpIHtcbiAgICAgIHNsb3QgPSBzbG90TmFtZShzbG90KTtcbiAgICAgIHJldHVybiBzbG90QmFnW3Nsb3RdID8gc2xvdEJhZ1tzbG90XS5sZW5ndGggOiAwO1xuICAgIH0sXG4gICAgbWVyZ2VCYWc6IGZ1bmN0aW9uIG1lcmdlQmFnKGJhZykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghYmFnKSByZXR1cm4gdGhpcztcbiAgICAgIHZhciBzbG90cyA9IGlzLkZ1bmN0aW9uKGJhZy5nZXRTbG90cykgPyBiYWcuZ2V0U2xvdHMoKSA6IGJhZztcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYmFnKSB8fCBpc1ZOb2RlKGJhZykpIHtcbiAgICAgICAgdGhpcy5zZXRTbG90KHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBiYWc7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmtleXMoc2xvdHMpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICBfdGhpczIuc2V0U2xvdChrLCBzbG90c1trXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiB0b1Byb3BzKHJ1bGUpIHtcbiAgdmFyIHByb3AgPSBfb2JqZWN0U3ByZWFkMih7fSwgcnVsZS5wcm9wcyB8fCB7fSk7XG5cbiAgT2JqZWN0LmtleXMocnVsZS5vbiB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIHZhciBuYW1lID0gXCJvblwiLmNvbmNhdCh1cHBlcihrKSk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wW25hbWVdKSkge1xuICAgICAgcHJvcFtuYW1lXSA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocHJvcFtuYW1lXSksIFtydWxlLm9uW2tdXSk7XG4gICAgfSBlbHNlIGlmIChwcm9wW25hbWVdKSB7XG4gICAgICBwcm9wW25hbWVdID0gW3Byb3BbbmFtZV0sIHJ1bGUub25ba11dO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9wW25hbWVdID0gcnVsZS5vbltrXTtcbiAgICB9XG4gIH0pO1xuICBwcm9wLmtleSA9IHJ1bGUua2V5O1xuICBwcm9wLnJlZiA9IHJ1bGUucmVmO1xuICBwcm9wW1wiY2xhc3NcIl0gPSBydWxlW1wiY2xhc3NcIl07XG4gIHByb3AuaWQgPSBydWxlLmlkO1xuICBwcm9wLnN0eWxlID0gcnVsZS5zdHlsZTtcbiAgaWYgKHByb3Auc2xvdCkgZGVsZXRlIHByb3Auc2xvdDtcbiAgcmV0dXJuIHByb3A7XG59XG5mdW5jdGlvbiBzZXRQcm90b3R5cGVPZihvLCBwcm90bykge1xuICBPYmplY3Quc2V0UHJvdG90eXBlT2YobywgcHJvdG8pO1xuICByZXR1cm4gbztcbn1cblxudmFyIGNoYW5nZVR5cGUgPSBmdW5jdGlvbiBjaGFuZ2VUeXBlKGEsIGIpIHtcbiAgaWYgKHR5cGVvZiBhID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBTdHJpbmcoYik7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIE51bWJlcihiKTtcbiAgfVxuXG4gIHJldHVybiBiO1xufTtcblxudmFyIGNvbmRpdGlvbiA9IHtcbiAgJz09JzogZnVuY3Rpb24gXyhhLCBiKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGEpID09PSBKU09OLnN0cmluZ2lmeShjaGFuZ2VUeXBlKGEsIGIpKTtcbiAgfSxcbiAgJyE9JzogZnVuY3Rpb24gXyhhLCBiKSB7XG4gICAgcmV0dXJuICFjb25kaXRpb25bJz09J10oYSwgYik7XG4gIH0sXG4gICc+JzogZnVuY3Rpb24gXyhhLCBiKSB7XG4gICAgcmV0dXJuIGEgPiBiO1xuICB9LFxuICAnPj0nOiBmdW5jdGlvbiBfKGEsIGIpIHtcbiAgICByZXR1cm4gYSA+PSBiO1xuICB9LFxuICAnPCc6IGZ1bmN0aW9uIF8oYSwgYikge1xuICAgIHJldHVybiBhIDwgYjtcbiAgfSxcbiAgJzw9JzogZnVuY3Rpb24gXyhhLCBiKSB7XG4gICAgcmV0dXJuIGEgPD0gYjtcbiAgfSxcbiAgb246IGZ1bmN0aW9uIG9uKGEsIGIpIHtcbiAgICByZXR1cm4gYSAmJiBhLmluZGV4T2YgJiYgYS5pbmRleE9mKGNoYW5nZVR5cGUoYVswXSwgYikpID4gLTE7XG4gIH0sXG4gIG5vdE9uOiBmdW5jdGlvbiBub3RPbihhLCBiKSB7XG4gICAgcmV0dXJuICFjb25kaXRpb24ub24oYSwgYik7XG4gIH0sXG4gIFwiaW5cIjogZnVuY3Rpb24gX2luKGEsIGIpIHtcbiAgICByZXR1cm4gYiAmJiBiLmluZGV4T2YgJiYgYi5pbmRleE9mKGEpID4gLTE7XG4gIH0sXG4gIG5vdEluOiBmdW5jdGlvbiBub3RJbihhLCBiKSB7XG4gICAgcmV0dXJuICFjb25kaXRpb25bXCJpblwiXShhLCBiKTtcbiAgfSxcbiAgYmV0d2VlbjogZnVuY3Rpb24gYmV0d2VlbihhLCBiKSB7XG4gICAgcmV0dXJuIGEgPiBiWzBdICYmIGEgPCBiWzFdO1xuICB9LFxuICBub3RCZXR3ZWVuOiBmdW5jdGlvbiBub3RCZXR3ZWVuKGEsIGIpIHtcbiAgICByZXR1cm4gYSA8IGJbMF0gfHwgYSA+IGJbMV07XG4gIH0sXG4gIGVtcHR5OiBmdW5jdGlvbiBlbXB0eShhKSB7XG4gICAgcmV0dXJuIGlzLmVtcHR5KGEpO1xuICB9LFxuICBub3RFbXB0eTogZnVuY3Rpb24gbm90RW1wdHkoYSkge1xuICAgIHJldHVybiAhaXMuZW1wdHkoYSk7XG4gIH0sXG4gIHBhdHRlcm46IGZ1bmN0aW9uIHBhdHRlcm4oYSwgYikge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGIsICdnJykudGVzdChhKTtcbiAgfVxufTtcbmZ1bmN0aW9uIGRlZXBHZXQodmFsLCBzcGxpdCkge1xuICAoQXJyYXkuaXNBcnJheShzcGxpdCkgPyBzcGxpdCA6IChzcGxpdCB8fCAnJykuc3BsaXQoJy4nKSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgdmFsID0gdmFsW2tdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB2YWw7XG59XG5mdW5jdGlvbiBleHRyYWN0VmFyKHN0cikge1xuICB2YXIgcmVnZXggPSAve3tcXHMqKC4qPylcXHMqfX0vZztcbiAgdmFyIG1hdGNoO1xuICB2YXIgbWF0Y2hlcyA9IHt9O1xuXG4gIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgaWYgKG1hdGNoWzFdKSB7XG4gICAgICBtYXRjaGVzW21hdGNoWzFdXSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1hdGNoZXMpO1xufVxuXG5mdW5jdGlvbiBiYXNlUnVsZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBwcm9wczoge30sXG4gICAgb246IHt9LFxuICAgIG9wdGlvbnM6IFtdLFxuICAgIGNoaWxkcmVuOiBbXSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGRpc3BsYXk6IHRydWUsXG4gICAgdmFsdWU6IHVuZGVmaW5lZFxuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRvckZhY3RvcnkobmFtZSwgaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRpdGxlLCBmaWVsZCwgdmFsdWUpIHtcbiAgICB2YXIgcHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9O1xuICAgIHZhciBtYWtlciA9IG5ldyBDcmVhdG9yKG5hbWUsIHRpdGxlLCBmaWVsZCwgdmFsdWUsIHByb3BzKTtcblxuICAgIGlmIChpbml0KSB7XG4gICAgICBpZiAoaXMuRnVuY3Rpb24oaW5pdCkpIGluaXQobWFrZXIpO2Vsc2UgbWFrZXIucHJvcHMoaW5pdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VyO1xuICB9O1xufVxuZnVuY3Rpb24gQ3JlYXRvcih0eXBlLCB0aXRsZSwgZmllbGQsIHZhbHVlLCBwcm9wcykge1xuICB0aGlzLl9kYXRhID0gZXh0ZW5kKGJhc2VSdWxlKCksIHtcbiAgICB0eXBlOiB0eXBlLFxuICAgIHRpdGxlOiB0aXRsZSxcbiAgICBmaWVsZDogZmllbGQsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIHByb3BzOiBwcm9wcyB8fCB7fVxuICB9KTtcbiAgdGhpcy5ldmVudCA9IHRoaXMub247XG59XG5leHRlbmQoQ3JlYXRvci5wcm90b3R5cGUsIHtcbiAgZ2V0UnVsZTogZnVuY3Rpb24gZ2V0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfSxcbiAgc2V0UHJvcDogZnVuY3Rpb24gc2V0UHJvcChrZXksIHZhbHVlKSB7XG4gICAgJHNldCh0aGlzLl9kYXRhLCBrZXksIHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgbW9kZWxGaWVsZDogZnVuY3Rpb24gbW9kZWxGaWVsZChmaWVsZCkge1xuICAgIHRoaXMuX2RhdGEubW9kZWxGaWVsZCA9IGZpZWxkO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBfY2xvbmU6IGZ1bmN0aW9uIF9jbG9uZSgpIHtcbiAgICB2YXIgY2xvbmUgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpO1xuICAgIGNsb25lLl9kYXRhID0gY29weVJ1bGUodGhpcy5fZGF0YSk7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG59KTtcbmZ1bmN0aW9uIGFwcGVuZFByb3RvKGF0dHJzKSB7XG4gIGF0dHJzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBDcmVhdG9yLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIG1lcmdlUnVsZSh0aGlzLl9kYXRhLCBfZGVmaW5lUHJvcGVydHkoe30sIG5hbWUsIGFyZ3VtZW50cy5sZW5ndGggPCAyID8ga2V5IDogX2RlZmluZVByb3BlcnR5KHt9LCBrZXksIGFyZ3VtZW50c1sxXSkpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gIH0pO1xufVxuYXBwZW5kUHJvdG8oYXR0cnMoKSk7XG5cbnZhciBjb21tb25NYWtlciA9IGNyZWF0b3JGYWN0b3J5KCcnKTtcbmZ1bmN0aW9uIGNyZWF0ZSh0eXBlLCBmaWVsZCwgdGl0bGUpIHtcbiAgdmFyIG1ha2UgPSBjb21tb25NYWtlcignJywgZmllbGQpO1xuICBtYWtlLl9kYXRhLnR5cGUgPSB0eXBlO1xuICBtYWtlLl9kYXRhLnRpdGxlID0gdGl0bGU7XG4gIHJldHVybiBtYWtlO1xufVxuZnVuY3Rpb24gbWFrZXJGYWN0b3J5KCkge1xuICByZXR1cm4ge1xuICAgIGNyZWF0ZTogY3JlYXRlLFxuICAgIGZhY3Rvcnk6IGNyZWF0b3JGYWN0b3J5XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEVycm9yKGFjdGlvbiwgb3B0aW9uLCB4aHIpIHtcbiAgdmFyIG1zZyA9IFwiZmFpbCB0byBcIi5jb25jYXQoYWN0aW9uLCBcIiBcIikuY29uY2F0KHhoci5zdGF0dXMsIFwiJ1wiKTtcbiAgdmFyIGVyciA9IG5ldyBFcnJvcihtc2cpO1xuICBlcnIuc3RhdHVzID0geGhyLnN0YXR1cztcbiAgZXJyLnVybCA9IGFjdGlvbjtcbiAgcmV0dXJuIGVycjtcbn1cblxuZnVuY3Rpb24gZ2V0Qm9keSh4aHIpIHtcbiAgdmFyIHRleHQgPSB4aHIucmVzcG9uc2VUZXh0IHx8IHhoci5yZXNwb25zZTtcblxuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBmZXRjaCQxKG9wdGlvbikge1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgdmFyIGFjdGlvbiA9IG9wdGlvbi5hY3Rpb247XG5cbiAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbiBlcnJvcihlKSB7XG4gICAgb3B0aW9uLm9uRXJyb3IoZSk7XG4gIH07XG5cbiAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIG9ubG9hZCgpIHtcbiAgICBpZiAoeGhyLnN0YXR1cyA8IDIwMCB8fCB4aHIuc3RhdHVzID49IDMwMCkge1xuICAgICAgcmV0dXJuIG9wdGlvbi5vbkVycm9yKGdldEVycm9yKGFjdGlvbiwgb3B0aW9uLCB4aHIpLCBnZXRCb2R5KHhocikpO1xuICAgIH1cblxuICAgIG9wdGlvbi5vblN1Y2Nlc3MoZ2V0Qm9keSh4aHIpKTtcbiAgfTtcblxuICB4aHIub3BlbihvcHRpb24ubWV0aG9kIHx8ICdnZXQnLCBhY3Rpb24sIHRydWUpO1xuICB2YXIgZm9ybURhdGE7XG5cbiAgaWYgKG9wdGlvbi5kYXRhKSB7XG4gICAgaWYgKChvcHRpb24uZGF0YVR5cGUgfHwgJycpLnRvTG93ZXJDYXNlKCkgIT09ICdqc29uJykge1xuICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIE9iamVjdC5rZXlzKG9wdGlvbi5kYXRhKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBvcHRpb24uZGF0YVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtRGF0YSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbi5kYXRhKTtcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb24ud2l0aENyZWRlbnRpYWxzICYmICd3aXRoQ3JlZGVudGlhbHMnIGluIHhocikge1xuICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICB9XG5cbiAgdmFyIGhlYWRlcnMgPSBvcHRpb24uaGVhZGVycyB8fCB7fTtcbiAgT2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgIGlmIChoZWFkZXJzW2l0ZW1dICE9IG51bGwpIHtcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGl0ZW0sIGhlYWRlcnNbaXRlbV0pO1xuICAgIH1cbiAgfSk7XG4gIHhoci5zZW5kKGZvcm1EYXRhKTtcbn1cbmZ1bmN0aW9uIGFzeW5jRmV0Y2goY29uZmlnLCBfZmV0Y2gpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAoX2ZldGNoIHx8IGZldGNoJDEpKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBjb25maWcpLCB7fSwge1xuICAgICAgb25TdWNjZXNzOiBmdW5jdGlvbiBvblN1Y2Nlc3MocmVzKSB7XG4gICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIGZuKHYpIHtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcGFyc2UgPSBwYXJzZUZuKGNvbmZpZy5wYXJzZSk7XG5cbiAgICAgICAgaWYgKGlzLkZ1bmN0aW9uKHBhcnNlKSkge1xuICAgICAgICAgIGZuID0gcGFyc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyc2UgJiYgaXMuU3RyaW5nKHBhcnNlKSkge1xuICAgICAgICAgIGZuID0gZnVuY3Rpb24gZm4odikge1xuICAgICAgICAgICAgcmV0dXJuIGRlZXBHZXQodiwgcGFyc2UpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKGZuKHJlcykpO1xuICAgICAgfSxcbiAgICAgIG9uRXJyb3I6IGZ1bmN0aW9uIG9uRXJyb3IoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvcHkodmFsdWUpIHtcbiAgcmV0dXJuIGRlZXBDb3B5KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gQXBpKGgpIHtcbiAgZnVuY3Rpb24gdGlkeUZpZWxkcyhmaWVsZHMpIHtcbiAgICBpZiAoaXMuVW5kZWYoZmllbGRzKSkgZmllbGRzID0gaC5maWVsZHMoKTtlbHNlIGlmICghQXJyYXkuaXNBcnJheShmaWVsZHMpKSBmaWVsZHMgPSBbZmllbGRzXTtcbiAgICByZXR1cm4gZmllbGRzO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvcHMoZmllbGRzLCBrZXksIHZhbCkge1xuICAgIHRpZHlGaWVsZHMoZmllbGRzKS5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgaC5nZXRDdHhzKGZpZWxkKS5mb3JFYWNoKGZ1bmN0aW9uIChjdHgpIHtcbiAgICAgICAgJHNldChjdHgucnVsZSwga2V5LCB2YWwpO1xuICAgICAgICBoLiRyZW5kZXIuY2xlYXJDYWNoZShjdHgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBhbGxTdWJGb3JtKCkge1xuICAgIHZhciBzdWJzID0gaC5zdWJGb3JtO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzdWJzKS5yZWR1Y2UoZnVuY3Rpb24gKGluaXRpYWwsIGspIHtcbiAgICAgIHZhciBzdWIgPSBzdWJzW2tdO1xuICAgICAgaWYgKCFzdWIpIHJldHVybiBpbml0aWFsO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3ViKSkgaW5pdGlhbC5wdXNoLmFwcGx5KGluaXRpYWwsIF90b0NvbnN1bWFibGVBcnJheShzdWIpKTtlbHNlIGluaXRpYWwucHVzaChzdWIpO1xuICAgICAgcmV0dXJuIGluaXRpYWw7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgdmFyIGFwaSA9IHtcbiAgICBnZXQgY29uZmlnKCkge1xuICAgICAgcmV0dXJuIGgub3B0aW9ucztcbiAgICB9LFxuXG4gICAgc2V0IGNvbmZpZyh2YWwpIHtcbiAgICAgIGguZmMub3B0aW9ucy52YWx1ZSA9IHZhbDtcbiAgICB9LFxuXG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaC5vcHRpb25zO1xuICAgIH0sXG5cbiAgICBzZXQgb3B0aW9ucyh2YWwpIHtcbiAgICAgIGguZmMub3B0aW9ucy52YWx1ZSA9IHZhbDtcbiAgICB9LFxuXG4gICAgZ2V0IGZvcm0oKSB7XG4gICAgICByZXR1cm4gaC5mb3JtO1xuICAgIH0sXG5cbiAgICBnZXQgcnVsZSgpIHtcbiAgICAgIHJldHVybiBoLnJ1bGVzO1xuICAgIH0sXG5cbiAgICBnZXQgcGFyZW50KCkge1xuICAgICAgcmV0dXJuIGgudm0uc2V0dXBTdGF0ZS5wYXJlbnQgJiYgaC52bS5zZXR1cFN0YXRlLnBhcmVudC5zZXR1cFN0YXRlLmZhcGk7XG4gICAgfSxcblxuICAgIGdldCB0b3AoKSB7XG4gICAgICBpZiAoYXBpLnBhcmVudCkge1xuICAgICAgICByZXR1cm4gYXBpLnBhcmVudC50b3A7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcGk7XG4gICAgfSxcblxuICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiBhbGxTdWJGb3JtKCk7XG4gICAgfSxcblxuICAgIGdldCBzaWJsaW5ncygpIHtcbiAgICAgIHZhciBpbmplY3QgPSBoLnZtLnNldHVwU3RhdGUuZ2V0R3JvdXBJbmplY3QoKTtcblxuICAgICAgaWYgKGluamVjdCkge1xuICAgICAgICB2YXIgc3ViRm9ybSA9IGluamVjdC5nZXRTdWJGb3JtKCk7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3ViRm9ybSkpIHtcbiAgICAgICAgICByZXR1cm4gX3RvQ29uc3VtYWJsZUFycmF5KHN1YkZvcm0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcblxuICAgIGdldCBpbmRleCgpIHtcbiAgICAgIHZhciBzaWJsaW5ncyA9IGFwaS5zaWJsaW5ncztcblxuICAgICAgaWYgKHNpYmxpbmdzKSB7XG4gICAgICAgIHZhciBpZHggPSBzaWJsaW5ncy5pbmRleE9mKGFwaSk7XG4gICAgICAgIHJldHVybiBpZHggPiAtMSA/IGlkeCA6IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgZm9ybURhdGE6IGZ1bmN0aW9uIGZvcm1EYXRhKGZpZWxkcykge1xuICAgICAgcmV0dXJuIHRpZHlGaWVsZHMoZmllbGRzKS5yZWR1Y2UoZnVuY3Rpb24gKGluaXRpYWwsIGlkKSB7XG4gICAgICAgIHZhciBjdHggPSBoLmdldEZpZWxkQ3R4KGlkKTtcbiAgICAgICAgaWYgKCFjdHgpIHJldHVybiBpbml0aWFsO1xuICAgICAgICBpbml0aWFsW2N0eC5maWVsZF0gPSBjb3B5KGN0eC5ydWxlLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGluaXRpYWw7XG4gICAgICB9LCBoLm9wdGlvbnMuYXBwZW5kVmFsdWUgIT09IGZhbHNlID8gY29weShoLmFwcGVuZERhdGEpIDoge30pO1xuICAgIH0sXG4gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKGZpZWxkKSB7XG4gICAgICB2YXIgY3R4ID0gaC5nZXRGaWVsZEN0eChmaWVsZCk7XG4gICAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgICAgcmV0dXJuIGNvcHkoY3R4LnJ1bGUudmFsdWUpO1xuICAgIH0sXG4gICAgY292ZXJWYWx1ZTogZnVuY3Rpb24gY292ZXJWYWx1ZShmb3JtRGF0YSkge1xuICAgICAgdmFyIGRhdGEgPSBfb2JqZWN0U3ByZWFkMih7fSwgZm9ybURhdGEgfHwge30pO1xuXG4gICAgICBoLmRlZmVyU3luY1ZhbHVlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaC5hcHBlbmREYXRhID0ge307XG4gICAgICAgIGFwaS5maWVsZHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICB2YXIgY3R4cyA9IGguZmllbGRDdHhba2V5XTtcblxuICAgICAgICAgIGlmIChjdHhzKSB7XG4gICAgICAgICAgICB2YXIgZmxhZyA9IGhhc1Byb3BlcnR5KGZvcm1EYXRhLCBrZXkpO1xuICAgICAgICAgICAgY3R4cy5mb3JFYWNoKGZ1bmN0aW9uIChjdHgpIHtcbiAgICAgICAgICAgICAgY3R4LnJ1bGUudmFsdWUgPSBmbGFnID8gZm9ybURhdGFba2V5XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGVsZXRlIGRhdGFba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBleHRlbmQoaC5hcHBlbmREYXRhLCBkYXRhKTtcbiAgICAgIH0sIHRydWUpO1xuICAgIH0sXG4gICAgc2V0VmFsdWU6IGZ1bmN0aW9uIHNldFZhbHVlKGZpZWxkKSB7XG4gICAgICB2YXIgZm9ybURhdGEgPSBmaWVsZDtcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIGZvcm1EYXRhID0gX2RlZmluZVByb3BlcnR5KHt9LCBmaWVsZCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIGguZGVmZXJTeW5jVmFsdWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBPYmplY3Qua2V5cyhmb3JtRGF0YSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgdmFyIGN0eHMgPSBoLmZpZWxkQ3R4W2tleV07XG4gICAgICAgICAgaWYgKCFjdHhzKSByZXR1cm4gaC5hcHBlbmREYXRhW2tleV0gPSBmb3JtRGF0YVtrZXldO1xuICAgICAgICAgIGN0eHMuZm9yRWFjaChmdW5jdGlvbiAoY3R4KSB7XG4gICAgICAgICAgICBjdHgucnVsZS52YWx1ZSA9IGZvcm1EYXRhW2tleV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgdHJ1ZSk7XG4gICAgfSxcbiAgICByZW1vdmVGaWVsZDogZnVuY3Rpb24gcmVtb3ZlRmllbGQoZmllbGQpIHtcbiAgICAgIHZhciBjdHggPSBoLmdldEN0eChmaWVsZCk7XG4gICAgICBoLmRlZmVyU3luY1ZhbHVlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaC5nZXRDdHhzKGZpZWxkKS5mb3JFYWNoKGZ1bmN0aW9uIChjdHgpIHtcbiAgICAgICAgICBjdHgucm0oKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCB0cnVlKTtcbiAgICAgIHJldHVybiBjdHggPyBjdHgub3JpZ2luIDogdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgcmVtb3ZlUnVsZTogZnVuY3Rpb24gcmVtb3ZlUnVsZShydWxlKSB7XG4gICAgICB2YXIgY3R4ID0gcnVsZSAmJiBieUN0eChydWxlKTtcbiAgICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgICBjdHgucm0oKTtcbiAgICAgIHJldHVybiBjdHgub3JpZ2luO1xuICAgIH0sXG4gICAgZmllbGRzOiBmdW5jdGlvbiBmaWVsZHMoKSB7XG4gICAgICByZXR1cm4gaC5maWVsZHMoKTtcbiAgICB9LFxuICAgIGFwcGVuZDogZnVuY3Rpb24gYXBwZW5kKHJ1bGUsIGFmdGVyLCBjaGlsZCkge1xuICAgICAgdmFyIGluZGV4ID0gaC5zb3J0Lmxlbmd0aCAtIDEsXG4gICAgICAgICAgcnVsZXM7XG4gICAgICB2YXIgY3R4ID0gaC5nZXRDdHgoYWZ0ZXIpO1xuXG4gICAgICBpZiAoY3R4KSB7XG4gICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgIHJ1bGVzID0gY3R4LmdldFBlbmRpbmcoJ2NoaWxkcmVuJywgY3R4LnJ1bGUuY2hpbGRyZW4pO1xuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShydWxlcykpIHJldHVybjtcbiAgICAgICAgICBpbmRleCA9IGN0eC5ydWxlLmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5kZXggPSBjdHgucm9vdC5pbmRleE9mKGN0eC5vcmlnaW4pO1xuICAgICAgICAgIHJ1bGVzID0gY3R4LnJvb3Q7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBydWxlcyA9IGgucnVsZXM7XG5cbiAgICAgIHJ1bGVzLnNwbGljZShpbmRleCArIDEsIDAsIHJ1bGUpO1xuICAgIH0sXG4gICAgcHJlcGVuZDogZnVuY3Rpb24gcHJlcGVuZChydWxlLCBhZnRlciwgY2hpbGQpIHtcbiAgICAgIHZhciBpbmRleCA9IDAsXG4gICAgICAgICAgcnVsZXM7XG4gICAgICB2YXIgY3R4ID0gaC5nZXRDdHgoYWZ0ZXIpO1xuXG4gICAgICBpZiAoY3R4KSB7XG4gICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgIHJ1bGVzID0gY3R4LmdldFBlbmRpbmcoJ2NoaWxkcmVuJywgY3R4LnJ1bGUuY2hpbGRyZW4pO1xuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShydWxlcykpIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbmRleCA9IGN0eC5yb290LmluZGV4T2YoY3R4Lm9yaWdpbik7XG4gICAgICAgICAgcnVsZXMgPSBjdHgucm9vdDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHJ1bGVzID0gaC5ydWxlcztcblxuICAgICAgcnVsZXMuc3BsaWNlKGluZGV4LCAwLCBydWxlKTtcbiAgICB9LFxuICAgIGhpZGRlbjogZnVuY3Rpb24gaGlkZGVuKHN0YXRlLCBmaWVsZHMpIHtcbiAgICAgIHByb3BzKGZpZWxkcywgJ2hpZGRlbicsICEhc3RhdGUpO1xuICAgICAgaC5yZWZyZXNoKCk7XG4gICAgfSxcbiAgICBoaWRkZW5TdGF0dXM6IGZ1bmN0aW9uIGhpZGRlblN0YXR1cyhpZCkge1xuICAgICAgdmFyIGN0eCA9IGguZ2V0Q3R4KGlkKTtcbiAgICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgICByZXR1cm4gISFjdHgucnVsZS5oaWRkZW47XG4gICAgfSxcbiAgICBkaXNwbGF5OiBmdW5jdGlvbiBkaXNwbGF5KHN0YXRlLCBmaWVsZHMpIHtcbiAgICAgIHByb3BzKGZpZWxkcywgJ2Rpc3BsYXknLCAhIXN0YXRlKTtcbiAgICAgIGgucmVmcmVzaCgpO1xuICAgIH0sXG4gICAgZGlzcGxheVN0YXR1czogZnVuY3Rpb24gZGlzcGxheVN0YXR1cyhpZCkge1xuICAgICAgdmFyIGN0eCA9IGguZ2V0Q3R4KGlkKTtcbiAgICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgICByZXR1cm4gISFjdHgucnVsZS5kaXNwbGF5O1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGZ1bmN0aW9uIGRpc2FibGVkKF9kaXNhYmxlZCwgZmllbGRzKSB7XG4gICAgICB0aWR5RmllbGRzKGZpZWxkcykuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgaC5nZXRDdHhzKGZpZWxkKS5mb3JFYWNoKGZ1bmN0aW9uIChjdHgpIHtcbiAgICAgICAgICAkc2V0KGN0eC5ydWxlLnByb3BzLCAnZGlzYWJsZWQnLCAhIV9kaXNhYmxlZCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBoLnJlZnJlc2goKTtcbiAgICB9LFxuICAgIGFsbDogZnVuY3Rpb24gYWxsKG9yaWdpbikge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGguY3R4cykubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHZhciBjdHggPSBoLmN0eHNba107XG4gICAgICAgIHJldHVybiBvcmlnaW4gPyBjdHgub3JpZ2luIDogY3R4LnJ1bGU7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG1vZGVsOiBmdW5jdGlvbiBtb2RlbChvcmlnaW4pIHtcbiAgICAgIHJldHVybiBoLmZpZWxkcygpLnJlZHVjZShmdW5jdGlvbiAoaW5pdGlhbCwga2V5KSB7XG4gICAgICAgIHZhciBjdHggPSBoLmZpZWxkQ3R4W2tleV1bMF07XG4gICAgICAgIGluaXRpYWxba2V5XSA9IG9yaWdpbiA/IGN0eC5vcmlnaW4gOiBjdHgucnVsZTtcbiAgICAgICAgcmV0dXJuIGluaXRpYWw7XG4gICAgICB9LCB7fSk7XG4gICAgfSxcbiAgICBjb21wb25lbnQ6IGZ1bmN0aW9uIGNvbXBvbmVudChvcmlnaW4pIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhoLm5hbWVDdHgpLnJlZHVjZShmdW5jdGlvbiAoaW5pdGlhbCwga2V5KSB7XG4gICAgICAgIHZhciBjdHggPSBoLm5hbWVDdHhba2V5XS5tYXAoZnVuY3Rpb24gKGN0eCkge1xuICAgICAgICAgIHJldHVybiBvcmlnaW4gPyBjdHgub3JpZ2luIDogY3R4LnJ1bGU7XG4gICAgICAgIH0pO1xuICAgICAgICBpbml0aWFsW2tleV0gPSBjdHgubGVuZ3RoID09PSAxID8gY3R4WzBdIDogY3R4O1xuICAgICAgICByZXR1cm4gaW5pdGlhbDtcbiAgICAgIH0sIHt9KTtcbiAgICB9LFxuICAgIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoKSB7XG4gICAgICByZXR1cm4gYXBpLmZvcm07XG4gICAgfSxcbiAgICByZWxvYWQ6IGZ1bmN0aW9uIHJlbG9hZChydWxlcykge1xuICAgICAgaC5yZWxvYWRSdWxlKHJ1bGVzKTtcbiAgICB9LFxuICAgIHVwZGF0ZU9wdGlvbnM6IGZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMob3B0aW9ucykge1xuICAgICAgaC5mYy51cGRhdGVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgYXBpLnJlZnJlc2goKTtcbiAgICB9LFxuICAgIG9uU3VibWl0OiBmdW5jdGlvbiBvblN1Ym1pdChmbikge1xuICAgICAgYXBpLnVwZGF0ZU9wdGlvbnMoe1xuICAgICAgICBvblN1Ym1pdDogZm5cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc3luYzogZnVuY3Rpb24gc3luYyhmaWVsZCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQpKSB7XG4gICAgICAgIGZpZWxkLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICByZXR1cm4gYXBpLnN5bmModik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjdHhzID0gaXMuT2JqZWN0KGZpZWxkKSA/IGJ5Q3R4KGZpZWxkKSA6IGguZ2V0Q3R4cyhmaWVsZCk7XG5cbiAgICAgIGlmICghY3R4cykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGN0eHMgPSBBcnJheS5pc0FycmF5KGN0eHMpID8gY3R4cyA6IFtjdHhzXTtcbiAgICAgIGN0eHMuZm9yRWFjaChmdW5jdGlvbiAoY3R4KSB7XG4gICAgICAgIGlmICghY3R4LmRlbGV0ZWQpIHtcbiAgICAgICAgICB2YXIgc3ViRm9ybSA9IGguc3ViRm9ybVtjdHguaWRdO1xuXG4gICAgICAgICAgaWYgKHN1YkZvcm0pIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHN1YkZvcm0pKSB7XG4gICAgICAgICAgICAgIHN1YkZvcm0uZm9yRWFjaChmdW5jdGlvbiAoZm9ybSkge1xuICAgICAgICAgICAgICAgIGZvcm0ucmVmcmVzaCgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViRm9ybSkge1xuICAgICAgICAgICAgICBzdWJGb3JtLnJlZnJlc2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vY3R4LnVwZGF0ZUtleSh0cnVlKTtcblxuXG4gICAgICAgICAgaC4kcmVuZGVyLmNsZWFyQ2FjaGUoY3R4KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBoLnJlZnJlc2goKTtcbiAgICB9LFxuICAgIHJlZnJlc2g6IGZ1bmN0aW9uIHJlZnJlc2goKSB7XG4gICAgICBhbGxTdWJGb3JtKCkuZm9yRWFjaChmdW5jdGlvbiAoc3ViKSB7XG4gICAgICAgIHN1Yi5yZWZyZXNoKCk7XG4gICAgICB9KTtcbiAgICAgIGguJHJlbmRlci5jbGVhckNhY2hlQWxsKCk7XG4gICAgICBoLnJlZnJlc2goKTtcbiAgICB9LFxuICAgIHJlZnJlc2hPcHRpb25zOiBmdW5jdGlvbiByZWZyZXNoT3B0aW9ucygpIHtcbiAgICAgIGguJG1hbmFnZXIudXBkYXRlT3B0aW9ucyhoLm9wdGlvbnMpO1xuICAgICAgYXBpLnJlZnJlc2goKTtcbiAgICB9LFxuICAgIGhpZGVGb3JtOiBmdW5jdGlvbiBoaWRlRm9ybShoaWRlKSB7XG4gICAgICBoLnZtLnNldHVwU3RhdGUuaXNTaG93ID0gIWhpZGU7XG4gICAgfSxcbiAgICBjaGFuZ2VTdGF0dXM6IGZ1bmN0aW9uIGNoYW5nZVN0YXR1cygpIHtcbiAgICAgIHJldHVybiBoLmNoYW5nZVN0YXR1cztcbiAgICB9LFxuICAgIGNsZWFyQ2hhbmdlU3RhdHVzOiBmdW5jdGlvbiBjbGVhckNoYW5nZVN0YXR1cygpIHtcbiAgICAgIGguY2hhbmdlU3RhdHVzID0gZmFsc2U7XG4gICAgfSxcbiAgICB1cGRhdGVSdWxlOiBmdW5jdGlvbiB1cGRhdGVSdWxlKGlkLCBydWxlKSB7XG4gICAgICBoLmdldEN0eHMoaWQpLmZvckVhY2goZnVuY3Rpb24gKGN0eCkge1xuICAgICAgICBleHRlbmQoY3R4LnJ1bGUsIHJ1bGUpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB1cGRhdGVSdWxlczogZnVuY3Rpb24gdXBkYXRlUnVsZXMocnVsZXMpIHtcbiAgICAgIE9iamVjdC5rZXlzKHJ1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgICAgICBhcGkudXBkYXRlUnVsZShpZCwgcnVsZXNbaWRdKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbWVyZ2VSdWxlOiBmdW5jdGlvbiBtZXJnZVJ1bGUkMShpZCwgcnVsZSkge1xuICAgICAgaC5nZXRDdHhzKGlkKS5mb3JFYWNoKGZ1bmN0aW9uIChjdHgpIHtcbiAgICAgICAgbWVyZ2VSdWxlKGN0eC5ydWxlLCBydWxlKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbWVyZ2VSdWxlczogZnVuY3Rpb24gbWVyZ2VSdWxlcyhydWxlcykge1xuICAgICAgT2JqZWN0LmtleXMocnVsZXMpLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgIGFwaS5tZXJnZVJ1bGUoaWQsIHJ1bGVzW2lkXSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldFJ1bGU6IGZ1bmN0aW9uIGdldFJ1bGUoaWQsIG9yaWdpbikge1xuICAgICAgdmFyIGN0eCA9IGguZ2V0Q3R4KGlkKTtcblxuICAgICAgaWYgKGN0eCkge1xuICAgICAgICByZXR1cm4gb3JpZ2luID8gY3R4Lm9yaWdpbiA6IGN0eC5ydWxlO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0UmVuZGVyUnVsZTogZnVuY3Rpb24gZ2V0UmVuZGVyUnVsZShpZCkge1xuICAgICAgdmFyIGN0eCA9IGguZ2V0Q3R4KGlkKTtcblxuICAgICAgaWYgKGN0eCkge1xuICAgICAgICByZXR1cm4gY3R4LnByb3A7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRSZWZSdWxlOiBmdW5jdGlvbiBnZXRSZWZSdWxlKGlkKSB7XG4gICAgICB2YXIgY3R4cyA9IGguZ2V0Q3R4cyhpZCk7XG5cbiAgICAgIGlmIChjdHhzKSB7XG4gICAgICAgIHZhciBydWxlcyA9IGN0eHMubWFwKGZ1bmN0aW9uIChjdHgpIHtcbiAgICAgICAgICByZXR1cm4gY3R4LnJ1bGU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcnVsZXMubGVuZ3RoID09PSAxID8gcnVsZXNbMF0gOiBydWxlcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldEVmZmVjdDogZnVuY3Rpb24gc2V0RWZmZWN0KGlkLCBhdHRyLCB2YWx1ZSkge1xuICAgICAgdmFyIGN0eCA9IGguZ2V0Q3R4KGlkKTtcblxuICAgICAgaWYgKGN0eCAmJiBhdHRyKSB7XG4gICAgICAgIGlmIChhdHRyWzBdID09PSAnJCcpIHtcbiAgICAgICAgICBhdHRyID0gYXR0ci5zdWJzdHIoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzUHJvcGVydHkoY3R4LnJ1bGUsICckJyArIGF0dHIpKSB7XG4gICAgICAgICAgJHNldChjdHgucnVsZSwgJyQnICsgYXR0ciwgdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFoYXNQcm9wZXJ0eShjdHgucnVsZSwgJ2VmZmVjdCcpKSB7XG4gICAgICAgICAgY3R4LnJ1bGUuZWZmZWN0ID0ge307XG4gICAgICAgIH1cblxuICAgICAgICAkc2V0KGN0eC5ydWxlLmVmZmVjdCwgYXR0ciwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xlYXJFZmZlY3REYXRhOiBmdW5jdGlvbiBjbGVhckVmZmVjdERhdGEoaWQsIGF0dHIpIHtcbiAgICAgIHZhciBjdHggPSBoLmdldEN0eChpZCk7XG5cbiAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgaWYgKGF0dHIgJiYgYXR0clswXSA9PT0gJyQnKSB7XG4gICAgICAgICAgYXR0ciA9IGF0dHIuc3Vic3RyKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LmNsZWFyRWZmZWN0RGF0YShhdHRyKTtcbiAgICAgICAgYXBpLnN5bmMoaWQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXBkYXRlVmFsaWRhdGU6IGZ1bmN0aW9uIHVwZGF0ZVZhbGlkYXRlKGlkLCB2YWxpZGF0ZSwgbWVyZ2UpIHtcbiAgICAgIGlmIChtZXJnZSkge1xuICAgICAgICBhcGkubWVyZ2VSdWxlKGlkLCB7XG4gICAgICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcHMoaWQsICd2YWxpZGF0ZScsIHZhbGlkYXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZVZhbGlkYXRlczogZnVuY3Rpb24gdXBkYXRlVmFsaWRhdGVzKHZhbGlkYXRlcywgbWVyZ2UpIHtcbiAgICAgIE9iamVjdC5rZXlzKHZhbGlkYXRlcykuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgYXBpLnVwZGF0ZVZhbGlkYXRlKGlkLCB2YWxpZGF0ZXNbaWRdLCBtZXJnZSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHJlZnJlc2hWYWxpZGF0ZTogZnVuY3Rpb24gcmVmcmVzaFZhbGlkYXRlKCkge1xuICAgICAgYXBpLnJlZnJlc2goKTtcbiAgICB9LFxuICAgIHJlc2V0RmllbGRzOiBmdW5jdGlvbiByZXNldEZpZWxkcyhmaWVsZHMpIHtcbiAgICAgIHRpZHlGaWVsZHMoZmllbGRzKS5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgICBoLmdldEN0eHMoZmllbGQpLmZvckVhY2goZnVuY3Rpb24gKGN0eCkge1xuICAgICAgICAgIGguJHJlbmRlci5jbGVhckNhY2hlKGN0eCk7XG4gICAgICAgICAgY3R4LnJ1bGUudmFsdWUgPSBjb3B5KGN0eC5kZWZhdWx0VmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBhcGkuY2xlYXJWYWxpZGF0ZVN0YXRlKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG1ldGhvZDogZnVuY3Rpb24gbWV0aG9kKGlkLCBuYW1lKSB7XG4gICAgICB2YXIgZWwgPSBhcGkuZWwoaWQpO1xuICAgICAgaWYgKCFlbCB8fCAhZWxbbmFtZV0pIHRocm93IG5ldyBFcnJvcihmb3JtYXQoJ2VycicsIFwiXCIuY29uY2F0KG5hbWUsIFwiXFx1NjVCOVxcdTZDRDVcXHU0RTBEXFx1NUI1OFxcdTU3MjhcIikpKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBlbFtuYW1lXS5hcHBseShlbCwgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgfSxcbiAgICBleGVjOiBmdW5jdGlvbiBleGVjKGlkLCBuYW1lKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW52b2tlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGFwaS5tZXRob2QoaWQsIG5hbWUpLmFwcGx5KHZvaWQgMCwgYXJncyk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHRvSnNvbjogZnVuY3Rpb24gdG9Kc29uJDEoc3BhY2UpIHtcbiAgICAgIHJldHVybiB0b0pzb24oYXBpLnJ1bGUsIHNwYWNlKTtcbiAgICB9LFxuICAgIHRyaWdnZXI6IGZ1bmN0aW9uIHRyaWdnZXIoaWQsIGV2ZW50KSB7XG4gICAgICB2YXIgZWwgPSBhcGkuZWwoaWQpO1xuXG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAyIDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBlbCAmJiBlbC4kZW1pdC5hcHBseShlbCwgW2V2ZW50XS5jb25jYXQoYXJncykpO1xuICAgIH0sXG4gICAgZWw6IGZ1bmN0aW9uIGVsKGlkKSB7XG4gICAgICB2YXIgY3R4ID0gaC5nZXRDdHgoaWQpO1xuICAgICAgaWYgKGN0eCkgcmV0dXJuIGN0eC5lbCB8fCBoLnZtLnJlZnNbY3R4LnJlZl07XG4gICAgfSxcbiAgICBjbG9zZU1vZGFsOiBmdW5jdGlvbiBjbG9zZU1vZGFsKGlkKSB7XG4gICAgICBoLmJ1cy4kZW1pdCgnZmM6Y2xvc2VNb2RhbDonICsgaWQpO1xuICAgIH0sXG4gICAgZ2V0U3ViRm9ybTogZnVuY3Rpb24gZ2V0U3ViRm9ybShmaWVsZCkge1xuICAgICAgdmFyIGN0eCA9IGguZ2V0Q3R4KGZpZWxkKTtcbiAgICAgIHJldHVybiBjdHggPyBoLnN1YkZvcm1bY3R4LmlkXSA6IHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGdldENoaWxkcmVuUnVsZUxpc3Q6IGZ1bmN0aW9uIGdldENoaWxkcmVuUnVsZUxpc3QoaWQpIHtcbiAgICAgIHZhciBmbGFnID0gX3R5cGVvZihpZCkgPT09ICdvYmplY3QnO1xuICAgICAgdmFyIGN0eCA9IGZsYWcgPyBieUN0eChpZCkgOiBoLmdldEN0eChpZCk7XG4gICAgICB2YXIgcnVsZSA9IGN0eCA/IGN0eC5ydWxlIDogZmxhZyA/IGlkIDogYXBpLmdldFJ1bGUoaWQpO1xuXG4gICAgICBpZiAoIXJ1bGUpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICB2YXIgcnVsZXMgPSBbXTtcblxuICAgICAgdmFyIGZpbmRSdWxlcyA9IGZ1bmN0aW9uIGZpbmRSdWxlcyhjaGlsZHJlbikge1xuICAgICAgICBjaGlsZHJlbiAmJiBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgaWYgKF90eXBlb2YoaXRlbSkgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGl0ZW0uZmllbGQpIHtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goaXRlbSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcnVsZXMucHVzaC5hcHBseShydWxlcywgX3RvQ29uc3VtYWJsZUFycmF5KGFwaS5nZXRDaGlsZHJlblJ1bGVMaXN0KGl0ZW0pKSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgZmluZFJ1bGVzKGN0eCA/IGN0eC5sb2FkQ2hpbGRyZW5QZW5kaW5nKCkgOiBydWxlLmNoaWxkcmVuKTtcbiAgICAgIHJldHVybiBydWxlcztcbiAgICB9LFxuICAgIGdldFBhcmVudFN1YlJ1bGU6IGZ1bmN0aW9uIGdldFBhcmVudFN1YlJ1bGUoaWQpIHtcbiAgICAgIHZhciBmbGFnID0gX3R5cGVvZihpZCkgPT09ICdvYmplY3QnO1xuICAgICAgdmFyIGN0eCA9IGZsYWcgPyBieUN0eChpZCkgOiBoLmdldEN0eChpZCk7XG5cbiAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgdmFyIGdyb3VwID0gY3R4LmdldFBhcmVudEdyb3VwKCk7XG5cbiAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgcmV0dXJuIGdyb3VwLnJ1bGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGdldENoaWxkcmVuRm9ybURhdGE6IGZ1bmN0aW9uIGdldENoaWxkcmVuRm9ybURhdGEoaWQpIHtcbiAgICAgIHZhciBydWxlcyA9IGFwaS5nZXRDaGlsZHJlblJ1bGVMaXN0KGlkKTtcbiAgICAgIHJldHVybiBydWxlcy5yZWR1Y2UoZnVuY3Rpb24gKGZvcm1EYXRhLCBydWxlKSB7XG4gICAgICAgIGZvcm1EYXRhW3J1bGUuZmllbGRdID0gY29weShydWxlLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhO1xuICAgICAgfSwge30pO1xuICAgIH0sXG4gICAgc2V0Q2hpbGRyZW5Gb3JtRGF0YTogZnVuY3Rpb24gc2V0Q2hpbGRyZW5Gb3JtRGF0YShpZCwgZm9ybURhdGEsIGNvdmVyKSB7XG4gICAgICB2YXIgcnVsZXMgPSBhcGkuZ2V0Q2hpbGRyZW5SdWxlTGlzdChpZCk7XG4gICAgICBoLmRlZmVyU3luY1ZhbHVlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcnVsZXMuZm9yRWFjaChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgICAgIGlmIChoYXNQcm9wZXJ0eShmb3JtRGF0YSwgcnVsZS5maWVsZCkpIHtcbiAgICAgICAgICAgIHJ1bGUudmFsdWUgPSBmb3JtRGF0YVtydWxlLmZpZWxkXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvdmVyKSB7XG4gICAgICAgICAgICBydWxlLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldEdsb2JhbEV2ZW50OiBmdW5jdGlvbiBnZXRHbG9iYWxFdmVudChuYW1lKSB7XG4gICAgICB2YXIgZXZlbnQgPSBhcGkub3B0aW9ucy5nbG9iYWxFdmVudFtuYW1lXTtcblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGlmIChfdHlwZW9mKGV2ZW50KSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBldmVudCA9IGV2ZW50LmhhbmRsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZUZuKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGdldEdsb2JhbERhdGE6IGZ1bmN0aW9uIGdldEdsb2JhbERhdGEobmFtZSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCBpbmplY3QpIHtcbiAgICAgICAgdmFyIGNvbmZpZyA9IGFwaS5vcHRpb25zLmdsb2JhbERhdGFbbmFtZV07XG5cbiAgICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgICByZXNvbHZlKGguZmMubG9hZERhdGFbbmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy50eXBlID09PSAnZmV0Y2gnKSB7XG4gICAgICAgICAgYXBpLmZldGNoKGNvbmZpZykudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgfSlbXCJjYXRjaFwiXShpbmplY3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoY29uZmlnLmRhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG5leHRUaWNrOiBmdW5jdGlvbiBuZXh0VGljayhmbikge1xuICAgICAgaC5idXMuJG9uY2UoJ25leHQtdGljaycsIGZuKTtcbiAgICAgIGgucmVmcmVzaCgpO1xuICAgIH0sXG4gICAgbmV4dFJlZnJlc2g6IGZ1bmN0aW9uIG5leHRSZWZyZXNoKGZuKSB7XG4gICAgICBoLm5leHRSZWZyZXNoKCk7XG4gICAgICBmbiAmJiBpbnZva2UoZm4pO1xuICAgIH0sXG4gICAgZGVmZXJTeW5jVmFsdWU6IGZ1bmN0aW9uIGRlZmVyU3luY1ZhbHVlKGZuLCBzeW5jKSB7XG4gICAgICBoLmRlZmVyU3luY1ZhbHVlKGZuLCBzeW5jKTtcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uIGVtaXQobmFtZSkge1xuICAgICAgdmFyIF9oJHZtO1xuXG4gICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMgPiAxID8gX2xlbjMgLSAxIDogMCksIF9rZXkzID0gMTsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICBhcmdzW19rZXkzIC0gMV0gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuXG4gICAgICAoX2gkdm0gPSBoLnZtKS5lbWl0LmFwcGx5KF9oJHZtLCBbbmFtZV0uY29uY2F0KGFyZ3MpKTtcbiAgICB9LFxuICAgIGJ1czogaC5idXMsXG4gICAgZmV0Y2g6IGZ1bmN0aW9uIGZldGNoKG9wdCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgb3B0ID0gZGVlcENvcHkob3B0KTtcbiAgICAgICAgb3B0ID0gaC5sb2FkRmV0Y2hWYXIob3B0KTtcbiAgICAgICAgaC5iZWZvcmVGZXRjaChvcHQpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBhc3luY0ZldGNoKG9wdCwgaC5mYy5jcmVhdGUuZmV0Y2gpLnRoZW4ocmVzb2x2ZSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgd2F0Y2hGZXRjaDogZnVuY3Rpb24gd2F0Y2hGZXRjaChvcHQsIGNhbGxiYWNrLCBlcnJvcikge1xuICAgICAgcmV0dXJuIGguZmMud2F0Y2hMb2FkRGF0YShmdW5jdGlvbiAoZ2V0LCBjaGFuZ2UpIHtcbiAgICAgICAgdmFyIF9vcHQgPSBkZWVwQ29weShvcHQpO1xuXG4gICAgICAgIF9vcHQgPSBoLmxvYWRGZXRjaFZhcihfb3B0LCBnZXQpO1xuICAgICAgICBoLmJlZm9yZUZldGNoKF9vcHQpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBhc3luY0ZldGNoKF9vcHQsIGguZmMuY3JlYXRlLmZldGNoKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHJlcywgY2hhbmdlKTtcbiAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBlcnJvciAmJiBlcnJvcihlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldERhdGE6IGZ1bmN0aW9uIGdldERhdGEoaWQsIGRlZikge1xuICAgICAgcmV0dXJuIGguZmMuZ2V0TG9hZERhdGEoaWQsIGRlZik7XG4gICAgfSxcbiAgICBzZXREYXRhOiBmdW5jdGlvbiBzZXREYXRhKGlkLCBkYXRhKSB7XG4gICAgICByZXR1cm4gaC5mYy5zZXREYXRhKGlkLCBkYXRhKTtcbiAgICB9LFxuICAgIHJlZnJlc2hEYXRhOiBmdW5jdGlvbiByZWZyZXNoRGF0YShpZCkge1xuICAgICAgcmV0dXJuIGguZmMucmVmcmVzaERhdGEoaWQpO1xuICAgIH0sXG4gICAgaGVscGVyOiB7XG4gICAgICB0aWR5RmllbGRzOiB0aWR5RmllbGRzLFxuICAgICAgcHJvcHM6IHByb3BzXG4gICAgfVxuICB9O1xuICBbJ29uJywgJ29uY2UnLCAnb2ZmJ10uZm9yRWFjaChmdW5jdGlvbiAobikge1xuICAgIGFwaVtuXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfaCRidXM7XG5cbiAgICAgIChfaCRidXMgPSBoLmJ1cylbXCIkXCIuY29uY2F0KG4pXS5hcHBseShfaCRidXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfSk7XG4gIGFwaS5jaGFuZ2VWYWx1ZSA9IGFwaS5jaGFuZ2VGaWVsZCA9IGFwaS5zZXRWYWx1ZTtcbiAgcmV0dXJuIGFwaTtcbn1cblxuZnVuY3Rpb24gdXNlQ2FjaGUoUmVuZGVyKSB7XG4gIGV4dGVuZChSZW5kZXIucHJvdG90eXBlLCB7XG4gICAgaW5pdENhY2hlOiBmdW5jdGlvbiBpbml0Q2FjaGUoKSB7XG4gICAgICB0aGlzLmNsZWFyQ2FjaGVBbGwoKTtcbiAgICB9LFxuICAgIGNsZWFyQ2FjaGU6IGZ1bmN0aW9uIGNsZWFyQ2FjaGUoY3R4KSB7XG4gICAgICBpZiAoY3R4LnJ1bGUuY2FjaGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuY2FjaGVbY3R4LmlkXSkge1xuICAgICAgICBpZiAoY3R4LnBhcmVudCkge1xuICAgICAgICAgIHRoaXMuY2xlYXJDYWNoZShjdHgucGFyZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY2FjaGVbY3R4LmlkXS51c2UgPT09IHRydWUgfHwgdGhpcy5jYWNoZVtjdHguaWRdLnBhcmVudCkge1xuICAgICAgICB0aGlzLiRoYW5kbGUucmVmcmVzaCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jYWNoZVtjdHguaWRdLnBhcmVudCkge1xuICAgICAgICB0aGlzLmNsZWFyQ2FjaGUodGhpcy5jYWNoZVtjdHguaWRdLnBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FjaGVbY3R4LmlkXSA9IG51bGw7XG4gICAgfSxcbiAgICBjbGVhckNhY2hlQWxsOiBmdW5jdGlvbiBjbGVhckNhY2hlQWxsKCkge1xuICAgICAgdGhpcy5jYWNoZSA9IHt9O1xuICAgIH0sXG4gICAgc2V0Q2FjaGU6IGZ1bmN0aW9uIHNldENhY2hlKGN0eCwgdm5vZGUsIHBhcmVudCkge1xuICAgICAgdGhpcy5jYWNoZVtjdHguaWRdID0ge1xuICAgICAgICB2bm9kZTogdm5vZGUsXG4gICAgICAgIHVzZTogZmFsc2UsXG4gICAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgICBzbG90OiBjdHgucnVsZS5zbG90XG4gICAgICB9O1xuICAgIH0sXG4gICAgZ2V0Q2FjaGU6IGZ1bmN0aW9uIGdldENhY2hlKGN0eCkge1xuICAgICAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZVtjdHguaWRdO1xuXG4gICAgICBpZiAoY2FjaGUpIHtcbiAgICAgICAgY2FjaGUudXNlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGNhY2hlLnZub2RlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvQ2FzZShzdHIpIHtcbiAgdmFyIHRvID0gc3RyLnJlcGxhY2UoLygtW2Etel0pL2csIGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIHYucmVwbGFjZSgnLScsICcnKS50b0xvY2FsZVVwcGVyQ2FzZSgpO1xuICB9KTtcbiAgcmV0dXJuIGxvd2VyKHRvKTtcbn1cbmZ1bmN0aW9uIGxvd2VyKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2Uoc3RyWzBdLCBzdHJbMF0udG9Mb3dlckNhc2UoKSk7XG59XG5cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdmFsID09IG51bGwgPyAnJyA6IF90eXBlb2YodmFsKSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeSh2YWwsIG51bGwsIDIpIDogU3RyaW5nKHZhbCk7XG59XG5cbnZhciBpZCQyID0gMDtcbmZ1bmN0aW9uIHVuaXF1ZUlkKCkge1xuICB2YXIgbnVtID0gMzcwICsgKytpZCQyO1xuICByZXR1cm4gJ0YnICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDMsIDMpICsgTnVtYmVyKFwiXCIuY29uY2F0KERhdGUubm93KCkpKS50b1N0cmluZygzNikgKyBudW0udG9TdHJpbmcoMzYpICsgJ2MnO1xufVxuXG5mdW5jdGlvbiBkZWVwU2V0KGRhdGEsIGlkeCwgdmFsKSB7XG4gIHZhciBfZGF0YSA9IGRhdGEsXG4gICAgICB0bztcbiAgKGlkeCB8fCAnJykuc3BsaXQoJy4nKS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKHRvKSB7XG4gICAgICBpZiAoIV9kYXRhW3RvXSB8fCBfdHlwZW9mKF9kYXRhW3RvXSkgIT0gJ29iamVjdCcpIHtcbiAgICAgICAgX2RhdGFbdG9dID0ge307XG4gICAgICB9XG5cbiAgICAgIF9kYXRhID0gX2RhdGFbdG9dO1xuICAgIH1cblxuICAgIHRvID0gdjtcbiAgfSk7XG4gIF9kYXRhW3RvXSA9IHZhbDtcbiAgcmV0dXJuIF9kYXRhO1xufVxuXG5mdW5jdGlvbiB1c2VSZW5kZXIkMShSZW5kZXIpIHtcbiAgZXh0ZW5kKFJlbmRlci5wcm90b3R5cGUsIHtcbiAgICBpbml0UmVuZGVyOiBmdW5jdGlvbiBpbml0UmVuZGVyKCkge1xuICAgICAgdGhpcy5jYWNoZUNvbmZpZyA9IHt9O1xuICAgIH0sXG4gICAgZ2V0VHlwZVNsb3Q6IGZ1bmN0aW9uIGdldFR5cGVTbG90KGN0eCkge1xuICAgICAgdmFyIF9mbiA9IGZ1bmN0aW9uIF9mbih2bSkge1xuICAgICAgICBpZiAodm0pIHtcbiAgICAgICAgICB2YXIgc2xvdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChjdHgucnVsZS5maWVsZCkge1xuICAgICAgICAgICAgc2xvdCA9IHZtLnNsb3RzWydmaWVsZC0nICsgdG9MaW5lKGN0eC5ydWxlLmZpZWxkKV0gfHwgdm0uc2xvdHNbJ2ZpZWxkLScgKyBjdHgucnVsZS5maWVsZF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzbG90KSB7XG4gICAgICAgICAgICBzbG90ID0gdm0uc2xvdHNbJ3R5cGUtJyArIHRvTGluZShjdHgudHlwZSldIHx8IHZtLnNsb3RzWyd0eXBlLScgKyBjdHgudHlwZV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNsb3QpIHtcbiAgICAgICAgICAgIHJldHVybiBzbG90O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBfZm4odm0uc2V0dXBTdGF0ZS5wYXJlbnQpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX2ZuKHRoaXMudm0pO1xuICAgIH0sXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAvLyBjb25zb2xlLndhcm4oJ3JlbmRlcnJycnInLCB0aGlzLmlkKTtcbiAgICAgIGlmICghdGhpcy52bS5zZXR1cFN0YXRlLmlzU2hvdykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJG1hbmFnZXIuYmVmb3JlUmVuZGVyKCk7XG4gICAgICB2YXIgc2xvdEJhZyA9IG1ha2VTbG90QmFnKCk7XG4gICAgICB0aGlzLnNvcnQuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICBfdGhpcy5yZW5kZXJTbG90KHNsb3RCYWcsIF90aGlzLiRoYW5kbGUuY3R4c1trXSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzLiRtYW5hZ2VyLnJlbmRlcihzbG90QmFnKTtcbiAgICB9LFxuICAgIHJlbmRlclNsb3Q6IGZ1bmN0aW9uIHJlbmRlclNsb3Qoc2xvdEJhZywgY3R4LCBwYXJlbnQpIHtcbiAgICAgIGlmICh0aGlzLmlzRnJhZ21lbnQoY3R4KSkge1xuICAgICAgICBjdHguaW5pdFByb3AoKTtcbiAgICAgICAgdGhpcy5tZXJnZUdsb2JhbChjdHgpO1xuICAgICAgICBjdHguaW5pdE5vbmUoKTtcbiAgICAgICAgdmFyIHNsb3RzID0gdGhpcy5yZW5kZXJDaGlsZHJlbihjdHgubG9hZENoaWxkcmVuUGVuZGluZygpLCBjdHgpO1xuICAgICAgICB2YXIgZGVmID0gc2xvdHNbXCJkZWZhdWx0XCJdO1xuICAgICAgICBkZWYgJiYgc2xvdEJhZy5zZXRTbG90KGN0eC5ydWxlLnNsb3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZGVmKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBkZWxldGUgc2xvdHNbXCJkZWZhdWx0XCJdO1xuICAgICAgICBzbG90QmFnLm1lcmdlQmFnKHNsb3RzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsb3RCYWcuc2V0U2xvdChjdHgucnVsZS5zbG90LCB0aGlzLnJlbmRlckN0eChjdHgsIHBhcmVudCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbWVyZ2VHbG9iYWw6IGZ1bmN0aW9uIG1lcmdlR2xvYmFsKGN0eCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBnID0gdGhpcy4kaGFuZGxlLm9wdGlvbnMuZ2xvYmFsO1xuICAgICAgaWYgKCFnKSByZXR1cm47XG5cbiAgICAgIGlmICghdGhpcy5jYWNoZUNvbmZpZ1tjdHgudHJ1ZVR5cGVdKSB7XG4gICAgICAgIHRoaXMuY2FjaGVDb25maWdbY3R4LnRydWVUeXBlXSA9IGNvbXB1dGVkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgZyA9IF90aGlzMi4kaGFuZGxlLm9wdGlvbnMuZ2xvYmFsO1xuICAgICAgICAgIHJldHVybiBtZXJnZVJ1bGUoe30sIFtnWycqJ10sIGdbY3R4Lm9yaWdpblR5cGVdIHx8IGdbY3R4LnR5cGVdIHx8IGdbY3R4LnR5cGVdIHx8IHt9XSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjdHgucHJvcCA9IG1lcmdlUnVsZSh7fSwgW3RoaXMuY2FjaGVDb25maWdbY3R4LnRydWVUeXBlXS52YWx1ZSwgY3R4LnByb3BdKTtcbiAgICB9LFxuICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uIHNldE9wdGlvbnMoY3R4KSB7XG4gICAgICB2YXIgb3B0ID0gY3R4LmxvYWRQZW5kaW5nKHtcbiAgICAgICAga2V5OiAnb3B0aW9ucycsXG4gICAgICAgIG9yaWdpbjogY3R4LnByb3Aub3B0aW9ucyxcbiAgICAgICAgZGVmOiBbXVxuICAgICAgfSk7XG4gICAgICBjdHgucHJvcC5vcHRpb25zID0gb3B0O1xuXG4gICAgICBpZiAoY3R4LnByb3Aub3B0aW9uc1RvICYmIG9wdCkge1xuICAgICAgICBkZWVwU2V0KGN0eC5wcm9wLCBjdHgucHJvcC5vcHRpb25zVG8sIG9wdCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZWVwU2V0OiBmdW5jdGlvbiBkZWVwU2V0JDEoY3R4KSB7XG4gICAgICB2YXIgZGVlcCA9IGN0eC5ydWxlLmRlZXA7XG4gICAgICBkZWVwICYmIE9iamVjdC5rZXlzKGRlZXApLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEubGVuZ3RoIDwgYi5sZW5ndGggPyAtMSA6IDE7XG4gICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgZGVlcFNldChjdHgucHJvcCwgc3RyLCBkZWVwW3N0cl0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwYXJzZVNpZGU6IGZ1bmN0aW9uIHBhcnNlU2lkZShzaWRlLCBjdHgpIHtcbiAgICAgIHJldHVybiBpcy5PYmplY3Qoc2lkZSkgPyBtZXJnZVJ1bGUoe1xuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIGZvcm1DcmVhdGVJbmplY3Q6IGN0eC5wcm9wLnByb3BzLmZvcm1DcmVhdGVJbmplY3RcbiAgICAgICAgfVxuICAgICAgfSwgc2lkZSkgOiBzaWRlO1xuICAgIH0sXG4gICAgcmVuZGVyU2lkZXM6IGZ1bmN0aW9uIHJlbmRlclNpZGVzKHZuLCBjdHgsIHRlbXApIHtcbiAgICAgIHZhciBwcm9wID0gY3R4W3RlbXAgPyAncnVsZScgOiAncHJvcCddO1xuICAgICAgcmV0dXJuIFt0aGlzLnJlbmRlclJ1bGUodGhpcy5wYXJzZVNpZGUocHJvcC5wcmVmaXgsIGN0eCkpLCB2biwgdGhpcy5yZW5kZXJSdWxlKHRoaXMucGFyc2VTaWRlKHByb3Auc3VmZml4LCBjdHgpKV07XG4gICAgfSxcbiAgICByZW5kZXJJZDogZnVuY3Rpb24gcmVuZGVySWQobmFtZSwgdHlwZSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBjdHhzID0gdGhpcy4kaGFuZGxlW3R5cGUgPT09ICdmaWVsZCcgPyAnZmllbGRDdHgnIDogJ25hbWVDdHgnXVtuYW1lXTtcbiAgICAgIHJldHVybiBjdHhzID8gY3R4cy5tYXAoZnVuY3Rpb24gKGN0eCkge1xuICAgICAgICByZXR1cm4gX3RoaXMzLnJlbmRlckN0eChjdHgsIGN0eC5wYXJlbnQpO1xuICAgICAgfSkgOiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICByZW5kZXJDdHg6IGZ1bmN0aW9uIHJlbmRlckN0eChjdHgsIHBhcmVudCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChjdHgudHlwZSA9PT0gJ2hpZGRlbicpIHJldHVybjtcbiAgICAgICAgdmFyIHJ1bGUgPSBjdHgucnVsZTtcblxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbY3R4LmlkXSB8fCB0aGlzLmNhY2hlW2N0eC5pZF0uc2xvdCAhPT0gcnVsZS5zbG90KSB7XG4gICAgICAgICAgdmFyIHZuO1xuICAgICAgICAgIGN0eC5pbml0UHJvcCgpO1xuICAgICAgICAgIHRoaXMubWVyZ2VHbG9iYWwoY3R4KTtcbiAgICAgICAgICBjdHguaW5pdE5vbmUoKTtcbiAgICAgICAgICB0aGlzLiRtYW5hZ2VyLnRpZHlSdWxlKGN0eCk7XG4gICAgICAgICAgdGhpcy5kZWVwU2V0KGN0eCk7XG4gICAgICAgICAgdGhpcy5zZXRPcHRpb25zKGN0eCk7XG4gICAgICAgICAgdGhpcy5jdHhQcm9wKGN0eCk7XG4gICAgICAgICAgdmFyIHByb3AgPSBjdHgucHJvcDtcbiAgICAgICAgICBwcm9wLnByZXZpZXcgPSAhIShwcm9wLnByZXZpZXcgIT0gbnVsbCA/IHByb3AucHJldmlldyA6IHRoaXMudm0ucHJvcHMucHJldmlldyAhPT0gdW5kZWZpbmVkID8gdGhpcy52bS5wcm9wcy5wcmV2aWV3IDogdGhpcy5vcHRpb25zLnByZXZpZXcgfHwgZmFsc2UpO1xuICAgICAgICAgIHByb3AucHJvcHMuZm9ybUNyZWF0ZUluamVjdCA9IHRoaXMuaW5qZWN0UHJvcChjdHgpO1xuICAgICAgICAgIHZhciBjYWNoZUZsYWcgPSBwcm9wLmNhY2hlICE9PSBmYWxzZTtcbiAgICAgICAgICB2YXIgcHJldmlldyA9IHByb3AucHJldmlldztcblxuICAgICAgICAgIGlmIChwcm9wLmhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5zZXRDYWNoZShjdHgsIHVuZGVmaW5lZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2biA9IGZ1bmN0aW9uIHZuKCkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHNsb3RWYWx1ZSA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgICAgc2xvdFZhbHVlW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgaW5qZWN0ID0ge1xuICAgICAgICAgICAgICBydWxlOiBydWxlLFxuICAgICAgICAgICAgICBwcm9wOiBwcm9wLFxuICAgICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICAgICAgICBhcGk6IF90aGlzNC4kaGFuZGxlLmFwaSxcbiAgICAgICAgICAgICAgbW9kZWw6IHByb3AubW9kZWwgfHwge30sXG4gICAgICAgICAgICAgIHNsb3RWYWx1ZTogc2xvdFZhbHVlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoc2xvdFZhbHVlLmxlbmd0aCAmJiBydWxlLnNsb3RVcGRhdGUpIHtcbiAgICAgICAgICAgICAgaW52b2tlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVsZS5zbG90VXBkYXRlKGluamVjdCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB7fTtcblxuICAgICAgICAgICAgdmFyIF9sb2FkID0gY3R4LmxvYWRDaGlsZHJlblBlbmRpbmcoKTtcblxuICAgICAgICAgICAgaWYgKGN0eC5wYXJzZXIucmVuZGVyQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjdHgucGFyc2VyLnJlbmRlckNoaWxkcmVuKF9sb2FkLCBjdHgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjdHgucGFyc2VyLmxvYWRDaGlsZHJlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW4gPSBfdGhpczQucmVuZGVyQ2hpbGRyZW4oX2xvYWQsIGN0eCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzbG90ID0gX3RoaXM0LmdldFR5cGVTbG90KGN0eCk7XG5cbiAgICAgICAgICAgIHZhciBfdm47XG5cbiAgICAgICAgICAgIGlmIChzbG90KSB7XG4gICAgICAgICAgICAgIGluamVjdC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICAgICAgICBfdm4gPSBzbG90KGluamVjdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBfdm4gPSBwcmV2aWV3ID8gY3R4LnBhcnNlci5wcmV2aWV3KGNvcHkkMShjaGlsZHJlbiksIGN0eCkgOiBjdHgucGFyc2VyLnJlbmRlcihjb3B5JDEoY2hpbGRyZW4pLCBjdHgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfdm4gPSBfdGhpczQucmVuZGVyU2lkZXMoX3ZuLCBjdHgpO1xuXG4gICAgICAgICAgICBpZiAoISghY3R4LmlucHV0ICYmIGlzLlVuZGVmKHByb3BbXCJuYXRpdmVcIl0pKSAmJiBwcm9wW1wibmF0aXZlXCJdICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgIF90aGlzNC5mYy50YXJnZXRGb3JtRHJpdmVyKCd1cGRhdGVXcmFwJywgY3R4KTtcblxuICAgICAgICAgICAgICBfdm4gPSBfdGhpczQuJG1hbmFnZXIubWFrZVdyYXAoY3R4LCBfdm4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3R4Lm5vbmUpIHtcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3ZuKSkge1xuICAgICAgICAgICAgICAgIF92biA9IF92bi5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgIGlmICghdiB8fCAhdi5fX3ZfaXNWTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNC5ub25lKHYpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF92biA9IF90aGlzNC5ub25lKF92bik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGVGbGFnICYmIF90aGlzNC5zZXRDYWNoZShjdHgsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNC5zdGFibGUoX3ZuKTtcbiAgICAgICAgICAgIH0sIHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm4gX3ZuO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLnNldENhY2hlKGN0eCwgdm4sIHBhcmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBjYWNoZSA9IF90aGlzNC5nZXRDYWNoZShjdHgpO1xuXG4gICAgICAgICAgaWYgKGNhY2hlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGUuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoX3RoaXM0LmNhY2hlW2N0eC5pZF0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3ZuID0gX3RoaXM0LnJlbmRlckN0eChjdHgsIGN0eC5wYXJlbnQpO1xuXG4gICAgICAgICAgaWYgKF92bikge1xuICAgICAgICAgICAgcmV0dXJuIF92bigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0sXG4gICAgbm9uZTogZnVuY3Rpb24gbm9uZSh2bikge1xuICAgICAgaWYgKHZuKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZuLnByb3BzW1wiY2xhc3NcIl0pKSB7XG4gICAgICAgICAgdm4ucHJvcHNbXCJjbGFzc1wiXS5wdXNoKCdmYy1ub25lJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdm4ucHJvcHNbXCJjbGFzc1wiXSA9IHZuLnByb3BzW1wiY2xhc3NcIl0gPyBbdm4ucHJvcHNbXCJjbGFzc1wiXSwgJ2ZjLW5vbmUnXSA6ICdmYy1ub25lJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2bjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHN0YWJsZTogZnVuY3Rpb24gc3RhYmxlKHZuKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdmFyIGxpc3QgPSBBcnJheS5pc0FycmF5KHZuKSA/IHZuIDogW3ZuXTtcbiAgICAgIGxpc3QuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAodiAmJiB2Ll9fdl9pc1ZOb2RlICYmIHYuY2hpbGRyZW4gJiYgX3R5cGVvZih2LmNoaWxkcmVuKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB2LmNoaWxkcmVuLiRzdGFibGUgPSB0cnVlO1xuXG4gICAgICAgICAgX3RoaXM1LnN0YWJsZSh2LmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdm47XG4gICAgfSxcbiAgICBnZXRNb2RlbEZpZWxkOiBmdW5jdGlvbiBnZXRNb2RlbEZpZWxkKGN0eCkge1xuICAgICAgcmV0dXJuIGN0eC5wcm9wLm1vZGVsRmllbGQgfHwgY3R4LnBhcnNlci5tb2RlbEZpZWxkIHx8IHRoaXMuZmMubW9kZWxGaWVsZHNbdGhpcy52Tm9kZS5hbGlhc01hcFtjdHgudHlwZV1dIHx8IHRoaXMuZmMubW9kZWxGaWVsZHNbY3R4LnR5cGVdIHx8IHRoaXMuZmMubW9kZWxGaWVsZHNbY3R4Lm9yaWdpblR5cGVdIHx8ICdtb2RlbFZhbHVlJztcbiAgICB9LFxuICAgIGlzRnJhZ21lbnQ6IGZ1bmN0aW9uIGlzRnJhZ21lbnQoY3R4KSB7XG4gICAgICByZXR1cm4gY3R4LnR5cGUgPT09ICdmcmFnbWVudCcgfHwgY3R4LnR5cGUgPT09ICd0ZW1wbGF0ZSc7XG4gICAgfSxcbiAgICBpbmplY3RQcm9wOiBmdW5jdGlvbiBpbmplY3RQcm9wKGN0eCkge1xuICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICAgIHZhciBzdGF0ZSA9IHRoaXMudm0uc2V0dXBTdGF0ZTtcblxuICAgICAgaWYgKCFzdGF0ZS5jdHhJbmplY3RbY3R4LmlkXSkge1xuICAgICAgICBzdGF0ZS5jdHhJbmplY3RbY3R4LmlkXSA9IHtcbiAgICAgICAgICBhcGk6IHRoaXMuJGhhbmRsZS5hcGksXG4gICAgICAgICAgZm9ybTogdGhpcy5mYy5jcmVhdGUsXG4gICAgICAgICAgc3ViRm9ybTogZnVuY3Rpb24gc3ViRm9ybShfc3ViRm9ybSkge1xuICAgICAgICAgICAgX3RoaXM2LiRoYW5kbGUuYWRkU3ViRm9ybShjdHgsIF9zdWJGb3JtKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldFN1YkZvcm06IGZ1bmN0aW9uIGdldFN1YkZvcm0oKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM2LiRoYW5kbGUuc3ViRm9ybVtjdHguaWRdO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgIHByZXZpZXc6IGZhbHNlLFxuICAgICAgICAgIGlkOiBjdHguaWQsXG4gICAgICAgICAgZmllbGQ6IGN0eC5maWVsZCxcbiAgICAgICAgICBydWxlOiBjdHgucnVsZSxcbiAgICAgICAgICBpbnB1dDogY3R4LmlucHV0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBpbmplY3QgPSBzdGF0ZS5jdHhJbmplY3RbY3R4LmlkXTtcbiAgICAgIGV4dGVuZChpbmplY3QsIHtcbiAgICAgICAgcHJldmlldzogY3R4LnByb3AucHJldmlldyxcbiAgICAgICAgb3B0aW9uczogY3R4LnByb3Aub3B0aW9ucyxcbiAgICAgICAgY2hpbGRyZW46IGN0eC5sb2FkQ2hpbGRyZW5QZW5kaW5nKClcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGluamVjdDtcbiAgICB9LFxuICAgIGN0eFByb3A6IGZ1bmN0aW9uIGN0eFByb3AoY3R4KSB7XG4gICAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgICAgdmFyIHJlZiA9IGN0eC5yZWYsXG4gICAgICAgICAga2V5ID0gY3R4LmtleSxcbiAgICAgICAgICBydWxlID0gY3R4LnJ1bGU7XG4gICAgICB0aGlzLiRtYW5hZ2VyLm1lcmdlUHJvcChjdHgpO1xuICAgICAgY3R4LnBhcnNlci5tZXJnZVByb3AoY3R4KTtcbiAgICAgIHZhciBwcm9wcyA9IFt7XG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICBrZXk6IHJ1bGUua2V5IHx8IFwiXCIuY29uY2F0KGtleSwgXCJmY1wiKSxcbiAgICAgICAgc2xvdDogdW5kZWZpbmVkLFxuICAgICAgICBvbjoge1xuICAgICAgICAgIHZub2RlTW91bnRlZDogZnVuY3Rpb24gdm5vZGVNb3VudGVkKHZuKSB7XG4gICAgICAgICAgICB2bi5lbC5fX3J1bGVfXyA9IGN0eC5ydWxlO1xuXG4gICAgICAgICAgICBfdGhpczcub25Nb3VudGVkKGN0eCwgdm4uZWwpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2ZjLnVwZGF0ZVZhbHVlJzogZnVuY3Rpb24gZmNVcGRhdGVWYWx1ZShkYXRhKSB7XG4gICAgICAgICAgICBfdGhpczcuJGhhbmRsZS5vblVwZGF0ZVZhbHVlKGN0eCwgZGF0YSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAnZmMuZWwnOiBmdW5jdGlvbiBmY0VsKGVsKSB7XG4gICAgICAgICAgICBjdHguZXhwb3J0RWwgPSBlbDtcblxuICAgICAgICAgICAgaWYgKGVsKSB7XG4gICAgICAgICAgICAgIChlbC4kZWwgfHwgZWwpLl9fcnVsZV9fID0gY3R4LnJ1bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XTtcblxuICAgICAgaWYgKGN0eC5pbnB1dCkge1xuICAgICAgICBpZiAodGhpcy52bS5wcm9wcy5kaXNhYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGN0eC5wcm9wLnByb3BzLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmaWVsZCA9IHRoaXMuZ2V0TW9kZWxGaWVsZChjdHgpO1xuICAgICAgICB2YXIgbW9kZWwgPSB7XG4gICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKHZhbHVlKSB7XG4gICAgICAgICAgICBfdGhpczcub25JbnB1dChjdHgsIHZhbHVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRoYW5kbGUuZ2V0Rm9ybURhdGEoY3R4KVxuICAgICAgICB9O1xuICAgICAgICBwcm9wcy5wdXNoKHtcbiAgICAgICAgICBvbjogX29iamVjdFNwcmVhZDIoX2RlZmluZVByb3BlcnR5KHt9LCBcInVwZGF0ZTpcIi5jb25jYXQoZmllbGQpLCBtb2RlbC5jYWxsYmFjayksIGN0eC5wcm9wLm1vZGVsRW1pdCA/IF9kZWZpbmVQcm9wZXJ0eSh7fSwgY3R4LnByb3AubW9kZWxFbWl0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM3Lm9uRW1pdElucHV0KGN0eCk7XG4gICAgICAgICAgfSkgOiB7fSksXG4gICAgICAgICAgcHJvcHM6IF9kZWZpbmVQcm9wZXJ0eSh7fSwgZmllbGQsIG1vZGVsLnZhbHVlKVxuICAgICAgICB9KTtcbiAgICAgICAgY3R4LnByb3AubW9kZWwgPSBtb2RlbDtcbiAgICAgIH1cblxuICAgICAgbWVyZ2VQcm9wcyhwcm9wcywgY3R4LnByb3ApO1xuICAgICAgcmV0dXJuIGN0eC5wcm9wO1xuICAgIH0sXG4gICAgb25Nb3VudGVkOiBmdW5jdGlvbiBvbk1vdW50ZWQoY3R4LCBlbCkge1xuICAgICAgY3R4LmVsID0gdGhpcy52bS5yZWZzW2N0eC5yZWZdIHx8IGVsO1xuICAgICAgY3R4LnBhcnNlci5tb3VudGVkKGN0eCk7XG4gICAgICB0aGlzLiRoYW5kbGUuZWZmZWN0KGN0eCwgJ21vdW50ZWQnKTtcbiAgICB9LFxuICAgIG9uSW5wdXQ6IGZ1bmN0aW9uIG9uSW5wdXQoY3R4LCB2YWx1ZSkge1xuICAgICAgaWYgKGN0eC5wcm9wLm1vZGVsRW1pdCkge1xuICAgICAgICB0aGlzLiRoYW5kbGUub25CYXNlSW5wdXQoY3R4LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy4kaGFuZGxlLm9uSW5wdXQoY3R4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBvbkVtaXRJbnB1dDogZnVuY3Rpb24gb25FbWl0SW5wdXQoY3R4KSB7XG4gICAgICB0aGlzLiRoYW5kbGUuc2V0VmFsdWUoY3R4LCBjdHgucGFyc2VyLnRvVmFsdWUoY3R4Lm1vZGVsVmFsdWUsIGN0eCksIGN0eC5tb2RlbFZhbHVlKTtcbiAgICB9LFxuICAgIHJlbmRlckNoaWxkcmVuOiBmdW5jdGlvbiByZW5kZXJDaGlsZHJlbihjaGlsZHJlbiwgY3R4KSB7XG4gICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgaWYgKCFpcy50cnVlQXJyYXkoY2hpbGRyZW4pKSByZXR1cm4ge307XG4gICAgICB2YXIgc2xvdEJhZyA9IG1ha2VTbG90QmFnKCk7XG4gICAgICBjaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGlmICghY2hpbGQpIHJldHVybjtcbiAgICAgICAgaWYgKGlzLlN0cmluZyhjaGlsZCkpIHJldHVybiBzbG90QmFnLnNldFNsb3QobnVsbCwgY2hpbGQpO1xuXG4gICAgICAgIGlmIChjaGlsZC5fX2ZjX18pIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM4LnJlbmRlclNsb3Qoc2xvdEJhZywgY2hpbGQuX19mY19fLCBjdHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkLnR5cGUpIHtcbiAgICAgICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpczguJGhhbmRsZS5sb2FkQ2hpbGRyZW4oY2hpbGRyZW4sIGN0eCk7XG5cbiAgICAgICAgICAgIF90aGlzOC4kaGFuZGxlLnJlZnJlc2goKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc2xvdEJhZy5nZXRTbG90cygpO1xuICAgIH0sXG4gICAgZGVmYXVsdFJlbmRlcjogZnVuY3Rpb24gZGVmYXVsdFJlbmRlcihjdHgsIGNoaWxkcmVuKSB7XG4gICAgICB2YXIgcHJvcCA9IGN0eC5wcm9wO1xuXG4gICAgICBpZiAocHJvcC5jb21wb25lbnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wLmNvbXBvbmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy52Tm9kZS5tYWtlKHByb3AuY29tcG9uZW50LCBwcm9wLCBjaGlsZHJlbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudk5vZGUubWFrZUNvbXBvbmVudChwcm9wLmNvbXBvbmVudCwgcHJvcCwgY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnZOb2RlW2N0eC50eXBlXSkgcmV0dXJuIHRoaXMudk5vZGVbY3R4LnR5cGVdKHByb3AsIGNoaWxkcmVuKTtcbiAgICAgIGlmICh0aGlzLnZOb2RlW2N0eC5vcmlnaW5UeXBlXSkgcmV0dXJuIHRoaXMudk5vZGVbY3R4Lm9yaWdpblR5cGVdKHByb3AsIGNoaWxkcmVuKTtcbiAgICAgIHJldHVybiB0aGlzLnZOb2RlLm1ha2UobG93ZXIocHJvcC50eXBlKSwgcHJvcCwgY2hpbGRyZW4pO1xuICAgIH0sXG4gICAgcmVuZGVyUnVsZTogZnVuY3Rpb24gcmVuZGVyUnVsZShydWxlLCBjaGlsZHJlbiwgb3JpZ2luKSB7XG4gICAgICB2YXIgX3RoaXM5ID0gdGhpcztcblxuICAgICAgaWYgKCFydWxlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgaWYgKGlzLlN0cmluZyhydWxlKSkgcmV0dXJuIHJ1bGU7XG4gICAgICB2YXIgdHlwZTtcblxuICAgICAgaWYgKG9yaWdpbikge1xuICAgICAgICB0eXBlID0gcnVsZS50eXBlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZSA9IHJ1bGUuaXM7XG5cbiAgICAgICAgaWYgKHJ1bGUudHlwZSkge1xuICAgICAgICAgIHR5cGUgPSB0b0Nhc2UocnVsZS50eXBlKTtcbiAgICAgICAgICB2YXIgYWxpYXMgPSB0aGlzLnZOb2RlLmFsaWFzTWFwW3R5cGVdO1xuICAgICAgICAgIGlmIChhbGlhcykgdHlwZSA9IHRvQ2FzZShhbGlhcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF0eXBlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgdmFyIHNsb3RCYWcgPSBtYWtlU2xvdEJhZygpO1xuXG4gICAgICBpZiAoaXMudHJ1ZUFycmF5KHJ1bGUuY2hpbGRyZW4pKSB7XG4gICAgICAgIHJ1bGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICAgIHYgJiYgc2xvdEJhZy5zZXRTbG90KHYgPT09IG51bGwgfHwgdiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdi5zbG90LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM5LnJlbmRlclJ1bGUodik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkMih7fSwgcnVsZSk7XG5cbiAgICAgIGRlbGV0ZSBwcm9wcy50eXBlO1xuICAgICAgZGVsZXRlIHByb3BzLmlzO1xuICAgICAgcmV0dXJuIHRoaXMudk5vZGUubWFrZSh0eXBlLCBwcm9wcywgc2xvdEJhZy5tZXJnZUJhZyhjaGlsZHJlbikuZ2V0U2xvdHMoKSk7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIGlkJDEgPSAxO1xuZnVuY3Rpb24gUmVuZGVyKGhhbmRsZSkge1xuICBleHRlbmQodGhpcywge1xuICAgICRoYW5kbGU6IGhhbmRsZSxcbiAgICBmYzogaGFuZGxlLmZjLFxuICAgIHZtOiBoYW5kbGUudm0sXG4gICAgJG1hbmFnZXI6IGhhbmRsZS4kbWFuYWdlcixcbiAgICB2Tm9kZTogbmV3IGhhbmRsZS5mYy5DcmVhdGVOb2RlKGhhbmRsZS52bSksXG4gICAgaWQ6IGlkJDErK1xuICB9KTtcbiAgZnVuY1Byb3h5KHRoaXMsIHtcbiAgICBvcHRpb25zOiBmdW5jdGlvbiBvcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGhhbmRsZS5vcHRpb25zO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydCgpIHtcbiAgICAgIHJldHVybiBoYW5kbGUuc29ydDtcbiAgICB9XG4gIH0pO1xuICB0aGlzLmluaXRDYWNoZSgpO1xuICB0aGlzLmluaXRSZW5kZXIoKTtcbn1cbnVzZUNhY2hlKFJlbmRlcik7XG51c2VSZW5kZXIkMShSZW5kZXIpO1xuXG5mdW5jdGlvbiB1c2VJbmplY3QoSGFuZGxlcikge1xuICBleHRlbmQoSGFuZGxlci5wcm90b3R5cGUsIHtcbiAgICBwYXJzZUluamVjdEV2ZW50OiBmdW5jdGlvbiBwYXJzZUluamVjdEV2ZW50KHJ1bGUsIG9uKSB7XG4gICAgICB2YXIgaW5qZWN0ID0gcnVsZS5pbmplY3QgfHwgdGhpcy5vcHRpb25zLmluamVjdEV2ZW50O1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VFdmVudExzdChydWxlLCBvbiwgaW5qZWN0KTtcbiAgICB9LFxuICAgIHBhcnNlRXZlbnRMc3Q6IGZ1bmN0aW9uIHBhcnNlRXZlbnRMc3QocnVsZSwgZGF0YSwgaW5qZWN0LCBkZWVwKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHZhciBmbiA9IF90aGlzLnBhcnNlRXZlbnQocnVsZSwgZGF0YVtrXSwgaW5qZWN0LCBkZWVwKTtcblxuICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICBkYXRhW2tdID0gZm47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcbiAgICBwYXJzZUV2ZW50OiBmdW5jdGlvbiBwYXJzZUV2ZW50KHJ1bGUsIGZuLCBpbmplY3QsIGRlZXApIHtcbiAgICAgIGlmIChpcy5GdW5jdGlvbihmbikgJiYgKGluamVjdCAhPT0gZmFsc2UgJiYgIWlzLlVuZGVmKGluamVjdCkgfHwgZm4uX19pbmplY3QpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluamVjdChydWxlLCBmbiwgaW5qZWN0KTtcbiAgICAgIH0gZWxzZSBpZiAoIWRlZXAgJiYgQXJyYXkuaXNBcnJheShmbikgJiYgZm5bMF0gJiYgKGlzLlN0cmluZyhmblswXSkgfHwgaXMuRnVuY3Rpb24oZm5bMF0pKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUV2ZW50THN0KHJ1bGUsIGZuLCBpbmplY3QsIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChpcy5TdHJpbmcoZm4pKSB7XG4gICAgICAgIHZhciB2YWwgPSBwYXJzZUZuKGZuKTtcblxuICAgICAgICBpZiAodmFsICYmIGZuICE9PSB2YWwpIHtcbiAgICAgICAgICByZXR1cm4gdmFsLl9faW5qZWN0ID8gdGhpcy5wYXJzZUV2ZW50KHJ1bGUsIHZhbCwgaW5qZWN0LCB0cnVlKSA6IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgcGFyc2VFbWl0OiBmdW5jdGlvbiBwYXJzZUVtaXQoY3R4KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIGV2ZW50ID0ge30sXG4gICAgICAgICAgcnVsZSA9IGN0eC5ydWxlLFxuICAgICAgICAgIGVtaXRQcmVmaXggPSBydWxlLmVtaXRQcmVmaXgsXG4gICAgICAgICAgZmllbGQgPSBydWxlLmZpZWxkLFxuICAgICAgICAgIG5hbWUgPSBydWxlLm5hbWUsXG4gICAgICAgICAgaW5qZWN0ID0gcnVsZS5pbmplY3Q7XG4gICAgICB2YXIgZW1pdCA9IHJ1bGUuZW1pdCB8fCBbXTtcblxuICAgICAgaWYgKGlzLnRydWVBcnJheShlbWl0KSkge1xuICAgICAgICBlbWl0LmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgICAgIGlmICghZXZlbnROYW1lKSByZXR1cm47XG4gICAgICAgICAgdmFyIGV2ZW50SW5qZWN0O1xuICAgICAgICAgIHZhciBlbWl0S2V5ID0gZW1pdFByZWZpeCB8fCBmaWVsZCB8fCBuYW1lO1xuXG4gICAgICAgICAgaWYgKGlzLk9iamVjdChldmVudE5hbWUpKSB7XG4gICAgICAgICAgICBldmVudEluamVjdCA9IGV2ZW50TmFtZS5pbmplY3Q7XG4gICAgICAgICAgICBldmVudE5hbWUgPSBldmVudE5hbWUubmFtZTtcbiAgICAgICAgICAgIGVtaXRLZXkgPSBldmVudE5hbWUucHJlZml4IHx8IGVtaXRLZXk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGVtaXRLZXkpIHtcbiAgICAgICAgICAgIHZhciBmaWVsZEtleSA9IHRvTGluZShcIlwiLmNvbmNhdChlbWl0S2V5LCBcIi1cIikuY29uY2F0KGV2ZW50TmFtZSkpO1xuXG4gICAgICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgdmFyIF90aGlzMiR2bSwgX3RoaXMyJHZtMiwgX3RoaXMyJGJ1cztcblxuICAgICAgICAgICAgICBpZiAoX3RoaXMyLnZtLmVtaXRzT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIF90aGlzMi52bS5lbWl0c09wdGlvbnNbZmllbGRLZXldID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmcgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgKF90aGlzMiR2bSA9IF90aGlzMi52bSkuZW1pdC5hcHBseShfdGhpczIkdm0sIFtmaWVsZEtleV0uY29uY2F0KGFyZykpO1xuXG4gICAgICAgICAgICAgIChfdGhpczIkdm0yID0gX3RoaXMyLnZtKS5lbWl0LmFwcGx5KF90aGlzMiR2bTIsIFsnZW1pdC1ldmVudCcsIGZpZWxkS2V5XS5jb25jYXQoYXJnKSk7XG5cbiAgICAgICAgICAgICAgKF90aGlzMiRidXMgPSBfdGhpczIuYnVzKS4kZW1pdC5hcHBseShfdGhpczIkYnVzLCBbZmllbGRLZXldLmNvbmNhdChhcmcpKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZuLl9fZW1pdCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICghZXZlbnRJbmplY3QgJiYgaW5qZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBldmVudFtldmVudE5hbWVdID0gZm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgX2luamVjdCA9IGV2ZW50SW5qZWN0IHx8IGluamVjdCB8fCBfdGhpczIub3B0aW9ucy5pbmplY3RFdmVudDtcblxuICAgICAgICAgICAgICBldmVudFtldmVudE5hbWVdID0gaXMuVW5kZWYoX2luamVjdCkgPyBmbiA6IF90aGlzMi5pbmplY3QocnVsZSwgZm4sIF9pbmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGN0eC5jb21wdXRlZC5vbiA9IGV2ZW50O1xuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH0sXG4gICAgZ2V0SW5qZWN0RGF0YTogZnVuY3Rpb24gZ2V0SW5qZWN0RGF0YShzZWxmLCBpbmplY3QpIHtcbiAgICAgIHZhciAkYXBpID0gc2VsZi5fX2ZjX18gJiYgc2VsZi5fX2ZjX18uJGFwaTtcbiAgICAgIHZhciB2bSA9IHNlbGYuX19mY19fICYmIHNlbGYuX19mY19fLiRoYW5kbGUudm0gfHwgdGhpcy52bS5wcm9wcztcbiAgICAgIHZhciBfdm0kcHJvcHMgPSB2bS5wcm9wcyxcbiAgICAgICAgICBvcHRpb24gPSBfdm0kcHJvcHMub3B0aW9uLFxuICAgICAgICAgIHJ1bGUgPSBfdm0kcHJvcHMucnVsZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICRmOiAkYXBpIHx8IHRoaXMuYXBpLFxuICAgICAgICBhcGk6ICRhcGkgfHwgdGhpcy5hcGksXG4gICAgICAgIHJ1bGU6IHJ1bGUsXG4gICAgICAgIHNlbGY6IHNlbGYuX19vcmlnaW5fXyxcbiAgICAgICAgb3B0aW9uOiBvcHRpb24sXG4gICAgICAgIGluamVjdDogaW5qZWN0XG4gICAgICB9O1xuICAgIH0sXG4gICAgaW5qZWN0OiBmdW5jdGlvbiBpbmplY3Qoc2VsZiwgX2ZuLCBfaW5qZWN0Mikge1xuICAgICAgaWYgKF9mbi5fX29yaWdpbikge1xuICAgICAgICBpZiAodGhpcy53YXRjaGluZyAmJiAhdGhpcy5sb2FkaW5nKSByZXR1cm4gX2ZuO1xuICAgICAgICBfZm4gPSBfZm4uX19vcmlnaW47XG4gICAgICB9XG5cbiAgICAgIHZhciBoID0gdGhpcztcblxuICAgICAgdmFyIGZuID0gZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgIHZhciBkYXRhID0gaC5nZXRJbmplY3REYXRhKHNlbGYsIF9pbmplY3QyKTtcblxuICAgICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhLmFyZ3MgPSBbXS5jb25jYXQoYXJncyk7XG4gICAgICAgIGFyZ3MudW5zaGlmdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIF9mbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH07XG5cbiAgICAgIGZuLl9fb3JpZ2luID0gX2ZuO1xuICAgICAgZm4uX19qc29uID0gX2ZuLl9fanNvbjtcbiAgICAgIHJldHVybiBmbjtcbiAgICB9LFxuICAgIGxvYWRTdHJWYXI6IGZ1bmN0aW9uIGxvYWRTdHJWYXIoc3RyLCBnZXQpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBpZiAoc3RyICYmIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnICYmIHN0ci5pbmRleE9mKCd7eycpID4gLTEgJiYgc3RyLmluZGV4T2YoJ319JykgPiAtMSkge1xuICAgICAgICB2YXIgdG1wID0gc3RyO1xuICAgICAgICB2YXIgdmFycyA9IGV4dHJhY3RWYXIoc3RyKTtcbiAgICAgICAgdmFyIGxhc3RWYWw7XG4gICAgICAgIHZhcnMuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICAgIHZhciBzcGxpdCA9IHYuc3BsaXQoJ3x8Jyk7XG4gICAgICAgICAgdmFyIGZpZWxkID0gc3BsaXRbMF0udHJpbSgpO1xuXG4gICAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICB2YXIgZGVmID0gKHNwbGl0WzFdIHx8ICcnKS50cmltKCk7XG4gICAgICAgICAgICB2YXIgdmFsID0gZ2V0ID8gZ2V0KGZpZWxkLCBkZWYpIDogX3RoaXMzLmZjLmdldExvYWREYXRhKGZpZWxkLCBkZWYpO1xuICAgICAgICAgICAgbGFzdFZhbCA9IHZhbDtcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlQWxsKFwie3tcIi5jb25jYXQodiwgXCJ9fVwiKSwgdmFsID09IG51bGwgPyAnJyA6IHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodmFycy5sZW5ndGggPT09IDEgJiYgdG1wID09PSBcInt7XCIuY29uY2F0KHZhcnNbMF0sIFwifX1cIikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdFZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RyO1xuICAgIH0sXG4gICAgbG9hZEZldGNoVmFyOiBmdW5jdGlvbiBsb2FkRmV0Y2hWYXIob3B0aW9ucywgZ2V0KSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIGxvYWRWYWwgPSBmdW5jdGlvbiBsb2FkVmFsKHN0cikge1xuICAgICAgICByZXR1cm4gX3RoaXM0LmxvYWRTdHJWYXIoc3RyLCBnZXQpO1xuICAgICAgfTtcblxuICAgICAgb3B0aW9ucy5hY3Rpb24gPSBsb2FkVmFsKG9wdGlvbnMuYWN0aW9uKTtcblxuICAgICAgaWYgKG9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICB2YXIgX2hlYWRlcnMgPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgX2hlYWRlcnNbbG9hZFZhbChrKV0gPSBsb2FkVmFsKG9wdGlvbnMuaGVhZGVyc1trXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSBfaGVhZGVycztcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgICB2YXIgX2RhdGEgPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5kYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgX2RhdGFbbG9hZFZhbChrKV0gPSBsb2FkVmFsKG9wdGlvbnMuZGF0YVtrXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcHRpb25zLmRhdGEgPSBfZGF0YTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIEVWRU5UID0gWydob29rOnVwZGF0ZWQnLCAnaG9vazptb3VudGVkJ107XG5mdW5jdGlvbiB1c2VQYWdlKEhhbmRsZXIpIHtcbiAgZXh0ZW5kKEhhbmRsZXIucHJvdG90eXBlLCB7XG4gICAgdXNlUGFnZTogZnVuY3Rpb24gdXNlUGFnZSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBwYWdlID0gdGhpcy5vcHRpb25zLnBhZ2U7XG4gICAgICBpZiAoIXBhZ2UpIHJldHVybjtcbiAgICAgIHZhciBmaXJzdCA9IDI1O1xuICAgICAgdmFyIGxpbWl0ID0gZ2V0TGltaXQodGhpcy5ydWxlcyk7XG5cbiAgICAgIGlmIChpcy5PYmplY3QocGFnZSkpIHtcbiAgICAgICAgaWYgKHBhZ2UuZmlyc3QpIGZpcnN0ID0gcGFyc2VJbnQocGFnZS5maXJzdCwgMTApIHx8IGZpcnN0O1xuICAgICAgICBpZiAocGFnZS5saW1pdCkgbGltaXQgPSBwYXJzZUludChwYWdlLmxpbWl0LCAxMCkgfHwgbGltaXQ7XG4gICAgICB9XG5cbiAgICAgIGV4dGVuZCh0aGlzLCB7XG4gICAgICAgIGZpcnN0OiBmaXJzdCxcbiAgICAgICAgbGltaXQ6IGxpbWl0LFxuICAgICAgICBwYWdlRW5kOiB0aGlzLnJ1bGVzLmxlbmd0aCA8PSBmaXJzdFxuICAgICAgfSk7XG4gICAgICB0aGlzLmJ1cy4kb24oJ3BhZ2UtZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMudm0uZW1pdCgncGFnZS1lbmQnLCBfdGhpcy5hcGkpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnBhZ2VMb2FkKCk7XG4gICAgfSxcbiAgICBwYWdlTG9hZDogZnVuY3Rpb24gcGFnZUxvYWQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHBhZ2VGbiA9IGZ1bmN0aW9uIHBhZ2VGbigpIHtcbiAgICAgICAgaWYgKF90aGlzMi5wYWdlRW5kKSB7XG4gICAgICAgICAgX3RoaXMyLmJ1cy4kb2ZmKEVWRU5ULCBwYWdlRm4pO1xuXG4gICAgICAgICAgX3RoaXMyLmJ1cy4kZW1pdCgncGFnZS1lbmQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpczIuZmlyc3QgKz0gX3RoaXMyLmxpbWl0O1xuICAgICAgICAgIF90aGlzMi5wYWdlRW5kID0gX3RoaXMyLnJ1bGVzLmxlbmd0aCA8PSBfdGhpczIuZmlyc3Q7XG5cbiAgICAgICAgICBfdGhpczIubG9hZFJ1bGUoKTtcblxuICAgICAgICAgIF90aGlzMi5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuYnVzLiRvbihFVkVOVCwgcGFnZUZuKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRMaW1pdChydWxlcykge1xuICByZXR1cm4gcnVsZXMubGVuZ3RoIDwgMzEgPyAzMSA6IE1hdGguY2VpbChydWxlcy5sZW5ndGggLyAzKTtcbn1cblxuZnVuY3Rpb24gdXNlUmVuZGVyKEhhbmRsZXIpIHtcbiAgZXh0ZW5kKEhhbmRsZXIucHJvdG90eXBlLCB7XG4gICAgY2xlYXJOZXh0VGljazogZnVuY3Rpb24gY2xlYXJOZXh0VGljaygpIHtcbiAgICAgIHRoaXMubmV4dFRpY2sgJiYgY2xlYXJUaW1lb3V0KHRoaXMubmV4dFRpY2spO1xuICAgICAgdGhpcy5uZXh0VGljayA9IG51bGw7XG4gICAgfSxcbiAgICBiaW5kTmV4dFRpY2s6IGZ1bmN0aW9uIGJpbmROZXh0VGljayhmbikge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy5jbGVhck5leHRUaWNrKCk7XG4gICAgICB0aGlzLm5leHRUaWNrID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZuKCk7XG4gICAgICAgIF90aGlzLm5leHRUaWNrID0gbnVsbDtcbiAgICAgIH0sIDEwKTtcbiAgICB9LFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgLy8gY29uc29sZS53YXJuKCclYyByZW5kZXInLCAnY29sb3I6Z3JlZW4nKTtcbiAgICAgICsrdGhpcy5sb2FkZWRJZDtcbiAgICAgIGlmICh0aGlzLnZtLnNldHVwU3RhdGUudW5pcXVlID4gMCkgcmV0dXJuIHRoaXMuJHJlbmRlci5yZW5kZXIoKTtlbHNlIHtcbiAgICAgICAgdGhpcy52bS5zZXR1cFN0YXRlLnVuaXF1ZSA9IDE7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBiaW5kKGN0eCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjdHgub3JpZ2luLCB7XG4gICAgX19mY19fOiBlbnVtZXJhYmxlKG1hcmtSYXcoY3R4KSwgdHJ1ZSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFJ1bGVDb250ZXh0KGhhbmRsZSwgcnVsZSwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciBpZCA9IHVuaXF1ZUlkKCk7XG4gIHZhciBpc0lucHV0ID0gISFydWxlLmZpZWxkO1xuICBleHRlbmQodGhpcywge1xuICAgIGlkOiBpZCxcbiAgICByZWY6IGlkLFxuICAgIHdyYXBSZWY6IGlkICsgJ2ZpJyxcbiAgICBydWxlOiBydWxlLFxuICAgIG9yaWdpbjogcnVsZS5fX29yaWdpbl9fIHx8IHJ1bGUsXG4gICAgbmFtZTogcnVsZS5uYW1lLFxuICAgIHBlbmRpbmc6IHt9LFxuICAgIG5vbmU6IGZhbHNlLFxuICAgIHdhdGNoOiBbXSxcbiAgICBsaW5rT246IFtdLFxuICAgIHJvb3Q6IFtdLFxuICAgIGN0cmxSdWxlOiBbXSxcbiAgICBjaGlsZHJlbjogW10sXG4gICAgcGFyZW50OiBudWxsLFxuICAgIGdyb3VwOiBydWxlLnN1YlJ1bGUgPyB0aGlzIDogbnVsbCxcbiAgICBjYWNoZUNvbmZpZzogbnVsbCxcbiAgICBwcm9wOiBfb2JqZWN0U3ByZWFkMih7fSwgcnVsZSksXG4gICAgY29tcHV0ZWQ6IHt9LFxuICAgIHBheWxvYWQ6IHt9LFxuICAgIHJlZlJ1bGU6IHt9LFxuICAgIGlucHV0OiBpc0lucHV0LFxuICAgIGVsOiB1bmRlZmluZWQsXG4gICAgZXhwb3J0RWw6IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VmFsdWU6IGlzSW5wdXQgPyBkZWVwQ29weShkZWZhdWx0VmFsdWUpIDogdW5kZWZpbmVkLFxuICAgIGZpZWxkOiBydWxlLmZpZWxkIHx8IHVuZGVmaW5lZFxuICB9KTtcbiAgdGhpcy51cGRhdGVLZXkoKTtcbiAgYmluZCh0aGlzKTtcbiAgdGhpcy51cGRhdGUoaGFuZGxlLCB0cnVlKTtcbn1cbmV4dGVuZChSdWxlQ29udGV4dC5wcm90b3R5cGUsIHtcbiAgZ2V0UGFyZW50R3JvdXA6IGZ1bmN0aW9uIGdldFBhcmVudEdyb3VwKCkge1xuICAgIHZhciBjdHggPSB0aGlzLnBhcmVudDtcblxuICAgIHdoaWxlIChjdHgpIHtcbiAgICAgIGlmIChjdHguZ3JvdXApIHtcbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICAgIH1cblxuICAgICAgY3R4ID0gY3R4LnBhcmVudDtcbiAgICB9XG4gIH0sXG4gIGxvYWRDaGlsZHJlblBlbmRpbmc6IGZ1bmN0aW9uIGxvYWRDaGlsZHJlblBlbmRpbmcoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucnVsZS5jaGlsZHJlbiB8fCBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybiBjaGlsZHJlbjtcbiAgICByZXR1cm4gdGhpcy5sb2FkUGVuZGluZyh7XG4gICAgICBrZXk6ICdjaGlsZHJlbicsXG4gICAgICBvcmlnaW46IGNoaWxkcmVuLFxuICAgICAgZGVmOiBbXSxcbiAgICAgIG9uTG9hZDogZnVuY3Rpb24gb25Mb2FkKGRhdGEpIHtcbiAgICAgICAgX3RoaXMuJGhhbmRsZSAmJiBfdGhpcy4kaGFuZGxlLmxvYWRDaGlsZHJlbihkYXRhLCBfdGhpcyk7XG4gICAgICB9LFxuICAgICAgb25VcGRhdGU6IGZ1bmN0aW9uIG9uVXBkYXRlKHZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICBpZiAoX3RoaXMuJGhhbmRsZSkge1xuICAgICAgICAgIHZhbHVlID09PSBvbGRWYWx1ZSA/IF90aGlzLiRoYW5kbGUubG9hZENoaWxkcmVuKHZhbHVlLCBfdGhpcykgOiBfdGhpcy4kaGFuZGxlLnVwZGF0ZUNoaWxkcmVuKF90aGlzLCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25SZWxvYWQ6IGZ1bmN0aW9uIG9uUmVsb2FkKHZhbHVlKSB7XG4gICAgICAgIGlmIChfdGhpcy4kaGFuZGxlKSB7XG4gICAgICAgICAgX3RoaXMuJGhhbmRsZS51cGRhdGVDaGlsZHJlbihfdGhpcywgW10sIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgX3RoaXMucGVuZGluZy5jaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICBsb2FkUGVuZGluZzogZnVuY3Rpb24gbG9hZFBlbmRpbmcoY29uZmlnKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIga2V5ID0gY29uZmlnLmtleSxcbiAgICAgICAgb3JpZ2luID0gY29uZmlnLm9yaWdpbixcbiAgICAgICAgZGVmID0gY29uZmlnLmRlZixcbiAgICAgICAgb25Mb2FkID0gY29uZmlnLm9uTG9hZCxcbiAgICAgICAgb25SZWxvYWQgPSBjb25maWcub25SZWxvYWQsXG4gICAgICAgIG9uVXBkYXRlID0gY29uZmlnLm9uVXBkYXRlO1xuXG4gICAgaWYgKHRoaXMucGVuZGluZ1trZXldICYmIHRoaXMucGVuZGluZ1trZXldLm9yaWdpbiA9PT0gb3JpZ2luKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQZW5kaW5nKGtleSwgZGVmKTtcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy5wZW5kaW5nW2tleV07XG4gICAgdmFyIHZhbHVlID0gb3JpZ2luO1xuXG4gICAgaWYgKGlzLkZ1bmN0aW9uKG9yaWdpbikpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBpbnZva2UoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3JpZ2luKHtcbiAgICAgICAgICBydWxlOiBfdGhpczIucnVsZSxcbiAgICAgICAgICBhcGk6IF90aGlzMi4kYXBpLFxuICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKGRhdGEpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGEgfHwgZGVmO1xuXG4gICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBfdGhpczIuZ2V0UGVuZGluZyhrZXksIGRlZik7XG5cbiAgICAgICAgICAgIF90aGlzMi5zZXRQZW5kaW5nKGtleSwgb3JpZ2luLCB2YWx1ZSk7XG5cbiAgICAgICAgICAgIG9uVXBkYXRlICYmIG9uVXBkYXRlKHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWxvYWQ6IGZ1bmN0aW9uIHJlbG9hZCgpIHtcbiAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IF90aGlzMi5nZXRQZW5kaW5nKGtleSwgZGVmKTtcblxuICAgICAgICAgICAgZGVsZXRlIF90aGlzMi5wZW5kaW5nW2tleV07XG4gICAgICAgICAgICBvblJlbG9hZCAmJiBvblJlbG9hZChvbGRWYWx1ZSk7XG4gICAgICAgICAgICBfdGhpczIuJGFwaSAmJiBfdGhpczIuJGFwaS5zeW5jKF90aGlzMi5ydWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChzb3VyY2UgJiYgaXMuRnVuY3Rpb24oc291cmNlLnRoZW4pKSB7XG4gICAgICAgIHNvdXJjZS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gZGF0YSB8fCBkZWY7XG5cbiAgICAgICAgICBfdGhpczIuc2V0UGVuZGluZyhrZXksIG9yaWdpbiwgdmFsdWUpO1xuXG4gICAgICAgICAgb25Mb2FkICYmIG9uTG9hZCh2YWx1ZSk7XG4gICAgICAgICAgX3RoaXMyLiRhcGkgJiYgX3RoaXMyLiRhcGkuc3luYyhfdGhpczIucnVsZSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFsdWUgPSBkZWY7XG4gICAgICAgIHRoaXMuc2V0UGVuZGluZyhrZXksIG9yaWdpbiwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBzb3VyY2UgfHwgZGVmO1xuICAgICAgICB0aGlzLnNldFBlbmRpbmcoa2V5LCBvcmlnaW4sIHZhbHVlKTtcbiAgICAgICAgb25Mb2FkICYmIG9uTG9hZCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBnZXRQZW5kaW5nOiBmdW5jdGlvbiBnZXRQZW5kaW5nKGtleSwgZGVmKSB7XG4gICAgcmV0dXJuIHRoaXMucGVuZGluZ1trZXldICYmIHRoaXMucGVuZGluZ1trZXldLnZhbHVlIHx8IGRlZjtcbiAgfSxcbiAgc2V0UGVuZGluZzogZnVuY3Rpb24gc2V0UGVuZGluZyhrZXksIG9yaWdpbiwgdmFsdWUpIHtcbiAgICB0aGlzLnBlbmRpbmdba2V5XSA9IHtcbiAgICAgIG9yaWdpbjogb3JpZ2luLFxuICAgICAgdmFsdWU6IHJlYWN0aXZlKHZhbHVlKVxuICAgIH07XG4gIH0sXG4gIGVmZmVjdERhdGE6IGZ1bmN0aW9uIGVmZmVjdERhdGEobmFtZSkge1xuICAgIGlmICghdGhpcy5wYXlsb2FkW25hbWVdKSB7XG4gICAgICB0aGlzLnBheWxvYWRbbmFtZV0gPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wYXlsb2FkW25hbWVdO1xuICB9LFxuICBjbGVhckVmZmVjdERhdGE6IGZ1bmN0aW9uIGNsZWFyRWZmZWN0RGF0YShuYW1lKSB7XG4gICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wYXlsb2FkID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnBheWxvYWRbbmFtZV07XG4gICAgfVxuICB9LFxuICB1cGRhdGVLZXk6IGZ1bmN0aW9uIHVwZGF0ZUtleShmbGFnKSB7XG4gICAgdGhpcy5rZXkgPSB1bmlxdWVJZCgpO1xuICAgIGZsYWcgJiYgdGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQudXBkYXRlS2V5KGZsYWcpO1xuICB9LFxuICB1cGRhdGVUeXBlOiBmdW5jdGlvbiB1cGRhdGVUeXBlKCkge1xuICAgIHRoaXMub3JpZ2luVHlwZSA9IHRoaXMucnVsZS50eXBlO1xuICAgIHRoaXMudHlwZSA9IHRvQ2FzZSh0aGlzLnJ1bGUudHlwZSk7XG4gICAgdGhpcy50cnVlVHlwZSA9IHRoaXMuJGhhbmRsZS5nZXRUeXBlKHRoaXMub3JpZ2luVHlwZSk7XG4gIH0sXG4gIHNldFBhcnNlcjogZnVuY3Rpb24gc2V0UGFyc2VyKHBhcnNlcikge1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHBhcnNlci5pbml0KHRoaXMpO1xuICB9LFxuICBpbml0UHJvcDogZnVuY3Rpb24gaW5pdFByb3AoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgcnVsZSA9IF9vYmplY3RTcHJlYWQyKHt9LCB0aGlzLnJ1bGUpO1xuXG4gICAgZGVsZXRlIHJ1bGUuY2hpbGRyZW47XG4gICAgdGhpcy5wcm9wID0gbWVyZ2VSdWxlKHt9LCBbcnVsZV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3Qua2V5cyh0aGlzLnBheWxvYWQpLm1hcChmdW5jdGlvbiAoaykge1xuICAgICAgcmV0dXJuIF90aGlzMy5wYXlsb2FkW2tdO1xuICAgIH0pKSwgW3RoaXMuY29tcHV0ZWRdKSk7XG4gIH0sXG4gIGluaXROb25lOiBmdW5jdGlvbiBpbml0Tm9uZSgpIHtcbiAgICB0aGlzLm5vbmUgPSAhKGlzLlVuZGVmKHRoaXMucHJvcC5kaXNwbGF5KSB8fCAhIXRoaXMucHJvcC5kaXNwbGF5KTtcbiAgfSxcbiAgaW5qZWN0VmFsaWRhdGU6IGZ1bmN0aW9uIGluamVjdFZhbGlkYXRlKCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgcmV0dXJuIHRvQXJyYXkodGhpcy5wcm9wLnZhbGlkYXRlKS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIGlmIChpcy5GdW5jdGlvbihpdGVtLnZhbGlkYXRvcikpIHtcbiAgICAgICAgdmFyIHRlbXAgPSBfb2JqZWN0U3ByZWFkMih7fSwgaXRlbSk7XG5cbiAgICAgICAgdmFyIHRoYXQgPSBfdGhpczQ7XG5cbiAgICAgICAgdGVtcC52YWxpZGF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF9pdGVtJHZhbGlkYXRvcjtcblxuICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gKF9pdGVtJHZhbGlkYXRvciA9IGl0ZW0udmFsaWRhdG9yKS5jYWxsLmFwcGx5KF9pdGVtJHZhbGlkYXRvciwgW3tcbiAgICAgICAgICAgIHRoYXQ6IHRoaXMsXG4gICAgICAgICAgICBpZDogdGhhdC5pZCxcbiAgICAgICAgICAgIGZpZWxkOiB0aGF0LmZpZWxkLFxuICAgICAgICAgICAgcnVsZTogdGhhdC5ydWxlLFxuICAgICAgICAgICAgYXBpOiB0aGF0LiRoYW5kbGUuYXBpXG4gICAgICAgICAgfV0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGVtcDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfSk7XG4gIH0sXG4gIGNoZWNrOiBmdW5jdGlvbiBjaGVjayhoYW5kbGUpIHtcbiAgICByZXR1cm4gdGhpcy52bSA9PT0gaGFuZGxlLnZtO1xuICB9LFxuICB1bndhdGNoOiBmdW5jdGlvbiB1bndhdGNoKCkge1xuICAgIHRoaXMud2F0Y2guZm9yRWFjaChmdW5jdGlvbiAodW4pIHtcbiAgICAgIHJldHVybiB1bigpO1xuICAgIH0pO1xuICAgIHRoaXMud2F0Y2ggPSBbXTtcbiAgICB0aGlzLnJlZlJ1bGUgPSB7fTtcbiAgfSxcbiAgdW5saW5rOiBmdW5jdGlvbiB1bmxpbmsoKSB7XG4gICAgdGhpcy5saW5rT24uZm9yRWFjaChmdW5jdGlvbiAodW4pIHtcbiAgICAgIHJldHVybiB1bigpO1xuICAgIH0pO1xuICAgIHRoaXMubGlua09uID0gW107XG4gIH0sXG4gIGxpbms6IGZ1bmN0aW9uIGxpbmsoKSB7XG4gICAgdGhpcy51bmxpbmsoKTtcbiAgICB0aGlzLiRoYW5kbGUuYXBwZW5kTGluayh0aGlzKTtcbiAgfSxcbiAgd2F0Y2hUbzogZnVuY3Rpb24gd2F0Y2hUbygpIHtcbiAgICB0aGlzLiRoYW5kbGUud2F0Y2hDdHgodGhpcyk7XG4gIH0sXG4gIFwiZGVsZXRlXCI6IGZ1bmN0aW9uIF9kZWxldGUoKSB7XG4gICAgdGhpcy51bndhdGNoKCk7XG4gICAgdGhpcy51bmxpbmsoKTtcbiAgICB0aGlzLnJtQ3RybCgpO1xuXG4gICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICB0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UodGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKSA+Pj4gMCwgMSk7XG4gICAgfVxuXG4gICAgZXh0ZW5kKHRoaXMsIHtcbiAgICAgIGRlbGV0ZWQ6IHRydWUsXG4gICAgICBjb21wdXRlZDoge30sXG4gICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICBjaGlsZHJlbjogW10sXG4gICAgICBjYWNoZUNvbmZpZzogbnVsbCxcbiAgICAgIG5vbmU6IGZhbHNlXG4gICAgfSk7XG4gIH0sXG4gIHJtQ3RybDogZnVuY3Rpb24gcm1DdHJsKCkge1xuICAgIHRoaXMuY3RybFJ1bGUuZm9yRWFjaChmdW5jdGlvbiAoY3RybCkge1xuICAgICAgcmV0dXJuIGN0cmwuX19mY19fICYmIGN0cmwuX19mY19fLnJtKCk7XG4gICAgfSk7XG4gICAgdGhpcy5jdHJsUnVsZSA9IFtdO1xuICB9LFxuICBybTogZnVuY3Rpb24gcm0oKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICB2YXIgX3JtID0gZnVuY3Rpb24gX3JtKCkge1xuICAgICAgdmFyIGluZGV4ID0gX3RoaXM1LnJvb3QuaW5kZXhPZihfdGhpczUub3JpZ2luKTtcblxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgX3RoaXM1LnJvb3Quc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICBfdGhpczUuJGhhbmRsZSAmJiBfdGhpczUuJGhhbmRsZS5yZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLmRlbGV0ZWQpIHtcbiAgICAgIF9ybSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4kaGFuZGxlLm5vV2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LiRoYW5kbGUuZGVmZXJTeW5jVmFsdWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczUucm1DdHJsKCk7XG5cbiAgICAgICAgX3JtKCk7XG5cbiAgICAgICAgX3RoaXM1LiRoYW5kbGUucm1DdHgoX3RoaXM1KTtcblxuICAgICAgICBleHRlbmQoX3RoaXM1LCB7XG4gICAgICAgICAgcm9vdDogW11cbiAgICAgICAgfSk7XG4gICAgICB9LCBfdGhpczUuaW5wdXQpO1xuICAgIH0pO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShoYW5kbGUsIGluaXQpIHtcbiAgICBleHRlbmQodGhpcywge1xuICAgICAgZGVsZXRlZDogZmFsc2UsXG4gICAgICAkaGFuZGxlOiBoYW5kbGUsXG4gICAgICAkcmVuZGVyOiBoYW5kbGUuJHJlbmRlcixcbiAgICAgICRhcGk6IGhhbmRsZS5hcGksXG4gICAgICB2bTogaGFuZGxlLnZtLFxuICAgICAgdk5vZGU6IGhhbmRsZS4kcmVuZGVyLnZOb2RlLFxuICAgICAgdXBkYXRlZDogZmFsc2UsXG4gICAgICBjYWNoZVZhbHVlOiB0aGlzLnJ1bGUudmFsdWVcbiAgICB9KTtcbiAgICAhaW5pdCAmJiB0aGlzLnVud2F0Y2goKTtcbiAgICB0aGlzLndhdGNoVG8oKTtcbiAgICB0aGlzLmxpbmsoKTtcbiAgICB0aGlzLnVwZGF0ZVR5cGUoKTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHVzZUxvYWRlcihIYW5kbGVyKSB7XG4gIGV4dGVuZChIYW5kbGVyLnByb3RvdHlwZSwge1xuICAgIG5leHRSZWZyZXNoOiBmdW5jdGlvbiBuZXh0UmVmcmVzaChmbikge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIGlkID0gdGhpcy5sb2FkZWRJZDtcbiAgICAgIG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWQgPT09IF90aGlzLmxvYWRlZElkICYmIChmbiA/IGZuKCkgOiBfdGhpcy5yZWZyZXNoKCkpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwYXJzZVJ1bGU6IGZ1bmN0aW9uIHBhcnNlUnVsZShfcnVsZSkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBydWxlID0gZ2V0UnVsZShfcnVsZSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhydWxlLCB7XG4gICAgICAgIF9fb3JpZ2luX186IGVudW1lcmFibGUoX3J1bGUsIHRydWUpXG4gICAgICB9KTtcbiAgICAgIGZ1bGxSdWxlKHJ1bGUpO1xuICAgICAgdGhpcy5hcHBlbmRWYWx1ZShydWxlKTtcbiAgICAgIFtydWxlLCBydWxlWydwcmVmaXgnXSwgcnVsZVsnc3VmZml4J11dLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMyLmxvYWRGbihpdGVtLCBydWxlKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2FkQ3RybChydWxlKTtcblxuICAgICAgaWYgKHJ1bGUudXBkYXRlKSB7XG4gICAgICAgIHJ1bGUudXBkYXRlID0gcGFyc2VGbihydWxlLnVwZGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBydWxlO1xuICAgIH0sXG4gICAgbG9hZEZuOiBmdW5jdGlvbiBsb2FkRm4oaXRlbSwgcnVsZSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIFsnb24nLCAncHJvcHMnLCAnZGVlcCddLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgaXRlbVtrXSAmJiBfdGhpczMucGFyc2VJbmplY3RFdmVudChydWxlLCBpdGVtW2tdKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbG9hZEN0cmw6IGZ1bmN0aW9uIGxvYWRDdHJsKHJ1bGUpIHtcbiAgICAgIHJ1bGUuY29udHJvbCAmJiBydWxlLmNvbnRyb2wuZm9yRWFjaChmdW5jdGlvbiAoY3RybCkge1xuICAgICAgICBpZiAoY3RybC5oYW5kbGUpIHtcbiAgICAgICAgICBjdHJsLmhhbmRsZSA9IHBhcnNlRm4oY3RybC5oYW5kbGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHN5bmNQcm9wOiBmdW5jdGlvbiBzeW5jUHJvcChjdHgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgcnVsZSA9IGN0eC5ydWxlO1xuICAgICAgaXMudHJ1ZUFycmF5KHJ1bGUuc3luYykgJiYgbWVyZ2VQcm9wcyhbe1xuICAgICAgICBvbjogcnVsZS5zeW5jLnJlZHVjZShmdW5jdGlvbiAocHJlLCBwcm9wKSB7XG4gICAgICAgICAgcHJlW1widXBkYXRlOlwiLmNvbmNhdChwcm9wKV0gPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBydWxlLnByb3BzW3Byb3BdID0gdmFsO1xuXG4gICAgICAgICAgICBfdGhpczQudm0uZW1pdCgnc3luYycsIHByb3AsIHZhbCwgcnVsZSwgX3RoaXM0LmZhcGkpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gcHJlO1xuICAgICAgICB9LCB7fSlcbiAgICAgIH1dLCBjdHguY29tcHV0ZWQpO1xuICAgIH0sXG4gICAgbG9hZFJ1bGU6IGZ1bmN0aW9uIGxvYWRSdWxlKCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIC8vIGNvbnNvbGUud2FybignJWMgbG9hZCcsICdjb2xvcjpibHVlJyk7XG4gICAgICB0aGlzLmN5Y2xlTG9hZCA9IGZhbHNlO1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHRoaXMucGFnZUVuZCkge1xuICAgICAgICB0aGlzLmJ1cy4kZW1pdCgnbG9hZC1zdGFydCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRlZmVyU3luY1ZhbHVlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXM1Ll9sb2FkUnVsZShfdGhpczUucnVsZXMpO1xuXG4gICAgICAgIF90aGlzNS5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKF90aGlzNS5jeWNsZUxvYWQgJiYgX3RoaXM1LnBhZ2VFbmQpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXM1LmxvYWRSdWxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczUuc3luY0Zvcm0oKTtcblxuICAgICAgICBpZiAoX3RoaXM1LnBhZ2VFbmQpIHtcbiAgICAgICAgICBfdGhpczUuYnVzLiRlbWl0KCdsb2FkLWVuZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXM1LnZtLnNldHVwU3RhdGUucmVuZGVyUnVsZSgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBsb2FkQ2hpbGRyZW46IGZ1bmN0aW9uIGxvYWRDaGlsZHJlbihjaGlsZHJlbiwgcGFyZW50KSB7XG4gICAgICB0aGlzLmN5Y2xlTG9hZCA9IGZhbHNlO1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuYnVzLiRlbWl0KCdsb2FkLXN0YXJ0Jyk7XG5cbiAgICAgIHRoaXMuX2xvYWRSdWxlKGNoaWxkcmVuLCBwYXJlbnQpO1xuXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMuY3ljbGVMb2FkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRSdWxlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN5bmNGb3JtKCk7XG4gICAgICAgIHRoaXMuYnVzLiRlbWl0KCdsb2FkLWVuZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiRyZW5kZXIuY2xlYXJDYWNoZShwYXJlbnQpO1xuICAgIH0sXG4gICAgX2xvYWRSdWxlOiBmdW5jdGlvbiBfbG9hZFJ1bGUocnVsZXMsIHBhcmVudCkge1xuICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICAgIHZhciBwcmVJbmRleCA9IGZ1bmN0aW9uIHByZUluZGV4KGkpIHtcbiAgICAgICAgdmFyIHByZSA9IHJ1bGVzW2kgLSAxXTtcblxuICAgICAgICBpZiAoIXByZSB8fCAhcHJlLl9fZmNfXykge1xuICAgICAgICAgIHJldHVybiBpID4gMCA/IHByZUluZGV4KGkgLSAxKSA6IC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGluZGV4ID0gX3RoaXM2LnNvcnQuaW5kZXhPZihwcmUuX19mY19fLmlkKTtcblxuICAgICAgICByZXR1cm4gaW5kZXggPiAtMSA/IGluZGV4IDogcHJlSW5kZXgoaSAtIDEpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGxvYWRDaGlsZHJlbiA9IGZ1bmN0aW9uIGxvYWRDaGlsZHJlbihjaGlsZHJlbiwgcGFyZW50KSB7XG4gICAgICAgIGlmIChpcy50cnVlQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgX3RoaXM2Ll9sb2FkUnVsZShjaGlsZHJlbiwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdmFyIGN0eHMgPSBydWxlcy5tYXAoZnVuY3Rpb24gKF9ydWxlLCBpbmRleCkge1xuICAgICAgICBpZiAocGFyZW50ICYmICFpcy5PYmplY3QoX3J1bGUpKSByZXR1cm47XG4gICAgICAgIGlmICghX3RoaXM2LnBhZ2VFbmQgJiYgIXBhcmVudCAmJiBpbmRleCA+PSBfdGhpczYuZmlyc3QpIHJldHVybjtcblxuICAgICAgICBpZiAoX3J1bGUuX19mY19fICYmIF9ydWxlLl9fZmNfXy5yb290ID09PSBydWxlcyAmJiBfdGhpczYuY3R4c1tfcnVsZS5fX2ZjX18uaWRdKSB7XG4gICAgICAgICAgbG9hZENoaWxkcmVuKF9ydWxlLl9fZmNfXy5sb2FkQ2hpbGRyZW5QZW5kaW5nKCksIF9ydWxlLl9fZmNfXyk7XG4gICAgICAgICAgcmV0dXJuIF9ydWxlLl9fZmNfXztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBydWxlID0gZ2V0UnVsZShfcnVsZSk7XG5cbiAgICAgICAgdmFyIGlzUmVwZWF0ID0gZnVuY3Rpb24gaXNSZXBlYXQoKSB7XG4gICAgICAgICAgcmV0dXJuICEhKHJ1bGUuZmllbGQgJiYgX3RoaXM2LmZpZWxkQ3R4W3J1bGUuZmllbGRdICYmIF90aGlzNi5maWVsZEN0eFtydWxlLmZpZWxkXVswXSAhPT0gX3J1bGUuX19mY19fKTtcbiAgICAgICAgfTtcblxuICAgICAgICBfdGhpczYuZmMudGFyZ2V0Rm9ybURyaXZlcignbG9hZFJ1bGUnLCB7XG4gICAgICAgICAgcnVsZTogcnVsZSxcbiAgICAgICAgICBhcGk6IF90aGlzNi5hcGlcbiAgICAgICAgfSwgX3RoaXM2LmZjKTtcblxuICAgICAgICBfdGhpczYucnVsZUVmZmVjdChydWxlLCAnaW5pdCcsIHtcbiAgICAgICAgICByZXBlYXQ6IGlzUmVwZWF0KClcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzUmVwZWF0KCkpIHtcbiAgICAgICAgICBfdGhpczYudm0uZW1pdCgncmVwZWF0LWZpZWxkJywgX3J1bGUsIF90aGlzNi5hcGkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN0eDtcbiAgICAgICAgdmFyIGlzQ29weSA9IGZhbHNlO1xuICAgICAgICB2YXIgaXNJbml0ID0gISFfcnVsZS5fX2ZjX187XG4gICAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSBydWxlLnZhbHVlO1xuXG4gICAgICAgIGlmIChpc0luaXQpIHtcbiAgICAgICAgICBjdHggPSBfcnVsZS5fX2ZjX187XG4gICAgICAgICAgZGVmYXVsdFZhbHVlID0gY3R4LmRlZmF1bHRWYWx1ZTtcblxuICAgICAgICAgIGlmIChjdHguZGVsZXRlZCkge1xuICAgICAgICAgICAgaWYgKGlzQ3RybChjdHgpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3R4LnVwZGF0ZShfdGhpczYpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWN0eC5jaGVjayhfdGhpczYpKSB7XG4gICAgICAgICAgICAgIGlmIChpc0N0cmwoY3R4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJ1bGVzW2luZGV4XSA9IF9ydWxlID0gX3J1bGUuX2Nsb25lID8gX3J1bGUuX2Nsb25lKCkgOiBjb3B5UnVsZShfcnVsZSk7XG4gICAgICAgICAgICAgIGN0eCA9IG51bGw7XG4gICAgICAgICAgICAgIGlzQ29weSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjdHgpIHtcbiAgICAgICAgICB2YXIgX3J1bGUyID0gX3RoaXM2LnBhcnNlUnVsZShfcnVsZSk7XG5cbiAgICAgICAgICBjdHggPSBuZXcgUnVsZUNvbnRleHQoX3RoaXM2LCBfcnVsZTIsIGRlZmF1bHRWYWx1ZSk7XG5cbiAgICAgICAgICBfdGhpczYuYmluZFBhcnNlcihjdHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChjdHgub3JpZ2luVHlwZSAhPT0gY3R4LnJ1bGUudHlwZSkge1xuICAgICAgICAgICAgY3R4LnVwZGF0ZVR5cGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpczYuYmluZFBhcnNlcihjdHgpO1xuXG4gICAgICAgICAgX3RoaXM2LmFwcGVuZFZhbHVlKGN0eC5ydWxlKTtcblxuICAgICAgICAgIGlmIChjdHgucGFyZW50ICYmIGN0eC5wYXJlbnQgIT09IHBhcmVudCkge1xuICAgICAgICAgICAgX3RoaXM2LnJtU3ViUnVsZURhdGEoY3R4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczYucGFyc2VFbWl0KGN0eCk7XG5cbiAgICAgICAgX3RoaXM2LnN5bmNQcm9wKGN0eCk7XG5cbiAgICAgICAgY3R4LnBhcmVudCA9IHBhcmVudCB8fCBudWxsO1xuICAgICAgICBjdHgucm9vdCA9IHJ1bGVzO1xuXG4gICAgICAgIF90aGlzNi5zZXRDdHgoY3R4KTtcblxuICAgICAgICAhaXNDb3B5ICYmICFpc0luaXQgJiYgX3RoaXM2LmVmZmVjdChjdHgsICdsb2FkJyk7XG5cbiAgICAgICAgX3RoaXM2LmVmZmVjdChjdHgsICdjcmVhdGVkJyk7XG5cbiAgICAgICAgdmFyIF9sb2FkID0gY3R4LmxvYWRDaGlsZHJlblBlbmRpbmcoKTtcblxuICAgICAgICBjdHgucGFyc2VyLmxvYWRDaGlsZHJlbiA9PT0gZmFsc2UgfHwgbG9hZENoaWxkcmVuKF9sb2FkLCBjdHgpO1xuXG4gICAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgICAgdmFyIF9wcmVJbmRleCA9IHByZUluZGV4KGluZGV4KTtcblxuICAgICAgICAgIGlmIChfcHJlSW5kZXggPiAtMSB8fCAhaW5kZXgpIHtcbiAgICAgICAgICAgIF90aGlzNi5zb3J0LnNwbGljZShfcHJlSW5kZXggKyAxLCAwLCBjdHguaWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpczYuc29ydC5wdXNoKGN0eC5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHIgPSBjdHgucnVsZTtcblxuICAgICAgICBpZiAoIWN0eC51cGRhdGVkKSB7XG4gICAgICAgICAgY3R4LnVwZGF0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKGlzLkZ1bmN0aW9uKHIudXBkYXRlKSkge1xuICAgICAgICAgICAgX3RoaXM2LmJ1cy4kb25jZSgnbG9hZC1lbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIF90aGlzNi5yZWZyZXNoVXBkYXRlKGN0eCwgci52YWx1ZSwgJ2luaXQnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90aGlzNi5lZmZlY3QoY3R4LCAnbG9hZGVkJyk7XG4gICAgICAgIH0gLy8gaWYgKGN0eC5pbnB1dClcbiAgICAgICAgLy8gICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCAndmFsdWUnLCB0aGlzLnZhbHVlSGFuZGxlKGN0eCkpO1xuXG5cbiAgICAgICAgaWYgKF90aGlzNi5yZWZyZXNoQ29udHJvbChjdHgpKSBfdGhpczYuY3ljbGVMb2FkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICAgIH0pLmZpbHRlcihmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gISF2O1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgcGFyZW50LmNoaWxkcmVuID0gY3R4cztcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlZnJlc2hDb250cm9sOiBmdW5jdGlvbiByZWZyZXNoQ29udHJvbChjdHgpIHtcbiAgICAgIHJldHVybiBjdHguaW5wdXQgJiYgY3R4LnJ1bGUuY29udHJvbCAmJiB0aGlzLnVzZUN0cmwoY3R4KTtcbiAgICB9LFxuICAgIHVzZUN0cmw6IGZ1bmN0aW9uIHVzZUN0cmwoY3R4KSB7XG4gICAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgICAgdmFyIGNvbnRyb2xzID0gZ2V0Q3RybChjdHgpLFxuICAgICAgICAgIHZhbGlkYXRlID0gW10sXG4gICAgICAgICAgYXBpID0gdGhpcy5hcGk7XG4gICAgICBpZiAoIWNvbnRyb2xzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgIHZhciBjb250cm9sID0gY29udHJvbHNbaV0sXG4gICAgICAgICAgICBoYW5kbGVGbiA9IGNvbnRyb2wuaGFuZGxlIHx8IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICByZXR1cm4gKGNvbmRpdGlvbltjb250cm9sLmNvbmRpdGlvbiB8fCAnPT0nXSB8fCBjb25kaXRpb25bJz09J10pKHZhbCwgY29udHJvbC52YWx1ZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCFpcy50cnVlQXJyYXkoY29udHJvbC5ydWxlKSkgcmV0dXJuIFwiY29udGludWVcIjtcblxuICAgICAgICB2YXIgZGF0YSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBjb250cm9sKSwge30sIHtcbiAgICAgICAgICB2YWxpZDogaW52b2tlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVGbihjdHgucnVsZS52YWx1ZSwgYXBpKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjdHJsOiBmaW5kQ3RybChjdHgsIGNvbnRyb2wucnVsZSksXG4gICAgICAgICAgaXNIaWRkZW46IGlzLlN0cmluZyhjb250cm9sLnJ1bGVbMF0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChkYXRhLnZhbGlkICYmIGRhdGEuY3RybCB8fCAhZGF0YS52YWxpZCAmJiAhZGF0YS5jdHJsICYmICFkYXRhLmlzSGlkZGVuKSByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICB2YWxpZGF0ZS5wdXNoKGRhdGEpO1xuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250cm9scy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgX3JldCA9IF9sb29wKGkpO1xuXG4gICAgICAgIGlmIChfcmV0ID09PSBcImNvbnRpbnVlXCIpIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXZhbGlkYXRlLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGhpZGVMc3QgPSBbXTtcbiAgICAgIHZhciBmbGFnID0gZmFsc2U7XG4gICAgICB0aGlzLmRlZmVyU3luY1ZhbHVlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFsaWRhdGUucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgICB2YXIgaXNIaWRkZW4gPSBfcmVmLmlzSGlkZGVuLFxuICAgICAgICAgICAgICB2YWxpZCA9IF9yZWYudmFsaWQsXG4gICAgICAgICAgICAgIHJ1bGUgPSBfcmVmLnJ1bGUsXG4gICAgICAgICAgICAgIHByZXBlbmQgPSBfcmVmLnByZXBlbmQsXG4gICAgICAgICAgICAgIGFwcGVuZCA9IF9yZWYuYXBwZW5kLFxuICAgICAgICAgICAgICBjaGlsZCA9IF9yZWYuY2hpbGQsXG4gICAgICAgICAgICAgIGN0cmwgPSBfcmVmLmN0cmwsXG4gICAgICAgICAgICAgIG1ldGhvZCA9IF9yZWYubWV0aG9kO1xuXG4gICAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgICB2YWxpZCA/IGN0eC5jdHJsUnVsZS5wdXNoKHtcbiAgICAgICAgICAgICAgX19jdHJsOiB0cnVlLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogcnVsZSxcbiAgICAgICAgICAgICAgdmFsaWQ6IHZhbGlkXG4gICAgICAgICAgICB9KSA6IGN0eC5jdHJsUnVsZS5zcGxpY2UoY3R4LmN0cmxSdWxlLmluZGV4T2YoY3RybCksIDEpO1xuICAgICAgICAgICAgaGlkZUxzdFt2YWxpZCA/ICdwdXNoJyA6ICd1bnNoaWZ0J10oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBpZiAobWV0aG9kID09PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgICAgICAgICAgX3RoaXM3LmFwaS5kaXNhYmxlZCghdmFsaWQsIHJ1bGUpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ2Rpc3BsYXknKSB7XG4gICAgICAgICAgICAgICAgX3RoaXM3LmFwaS5kaXNwbGF5KHZhbGlkLCBydWxlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdyZXF1aXJlZCcpIHtcbiAgICAgICAgICAgICAgICBydWxlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgIF90aGlzNy5hcGkuc2V0RWZmZWN0KGl0ZW0sICdyZXF1aXJlZCcsIHZhbGlkKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgIF90aGlzNy5hcGkuY2xlYXJWYWxpZGF0ZVN0YXRlKHJ1bGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfdGhpczcuYXBpLmhpZGRlbighdmFsaWQsIHJ1bGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIHJ1bGVDb24gPSB7XG4gICAgICAgICAgICAgIHR5cGU6ICdmcmFnbWVudCcsXG4gICAgICAgICAgICAgIFwibmF0aXZlXCI6IHRydWUsXG4gICAgICAgICAgICAgIF9fY3RybDogdHJ1ZSxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IHJ1bGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjdHguY3RybFJ1bGUucHVzaChydWxlQ29uKTtcblxuICAgICAgICAgICAgX3RoaXM3LmJ1cy4kb25jZSgnbG9hZC1zdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgLy8gdGhpcy5jeWNsZUxvYWQgPSB0cnVlO1xuICAgICAgICAgICAgICBpZiAocHJlcGVuZCkge1xuICAgICAgICAgICAgICAgIGFwaS5wcmVwZW5kKHJ1bGVDb24sIHByZXBlbmQsIGNoaWxkKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcHBlbmQgfHwgY2hpbGQpIHtcbiAgICAgICAgICAgICAgICBhcGkuYXBwZW5kKHJ1bGVDb24sIGFwcGVuZCB8fCBjdHguaWQsIGNoaWxkKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdHgucm9vdC5zcGxpY2UoY3R4LnJvb3QuaW5kZXhPZihjdHgub3JpZ2luKSArIDEsIDAsIHJ1bGVDb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3R4LmN0cmxSdWxlLnNwbGljZShjdHguY3RybFJ1bGUuaW5kZXhPZihjdHJsKSwgMSk7XG4gICAgICAgICAgICB2YXIgY3RybEN0eCA9IGJ5Q3R4KGN0cmwpO1xuICAgICAgICAgICAgY3RybEN0eCAmJiBjdHJsQ3R4LnJtKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaGlkZUxzdC5sZW5ndGggJiYgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBoaWRlTHN0LmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICByZXR1cm4gdigpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy52bS5lbWl0KCdjb250cm9sJywgY3R4Lm9yaWdpbiwgdGhpcy5hcGkpO1xuICAgICAgdGhpcy5lZmZlY3QoY3R4LCAnY29udHJvbCcpO1xuICAgICAgcmV0dXJuIGZsYWc7XG4gICAgfSxcbiAgICByZWxvYWRSdWxlOiBmdW5jdGlvbiByZWxvYWRSdWxlKHJ1bGVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVsb2FkUnVsZShydWxlcyk7XG4gICAgfSxcbiAgICBfcmVsb2FkUnVsZTogZnVuY3Rpb24gX3JlbG9hZFJ1bGUocnVsZXMpIHtcbiAgICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgICAvLyBjb25zb2xlLndhcm4oJyVjIHJlbG9hZCcsICdjb2xvcjpyZWQnKTtcbiAgICAgIGlmICghcnVsZXMpIHJ1bGVzID0gdGhpcy5ydWxlcztcblxuICAgICAgdmFyIGN0eHMgPSBfb2JqZWN0U3ByZWFkMih7fSwgdGhpcy5jdHhzKTtcblxuICAgICAgdGhpcy5jbGVhck5leHRUaWNrKCk7XG4gICAgICB0aGlzLmluaXREYXRhKHJ1bGVzKTtcbiAgICAgIHRoaXMuZmMucnVsZXMgPSBydWxlcztcbiAgICAgIHRoaXMuZGVmZXJTeW5jVmFsdWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczguYnVzLiRvbmNlKCdsb2FkLWVuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhjdHhzKS5maWx0ZXIoZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM4LmN0eHNbaWRdID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczgucm1DdHgoY3R4c1tpZF0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgX3RoaXM4LiRyZW5kZXIuY2xlYXJDYWNoZUFsbCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBfdGhpczgucmVsb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICBfdGhpczgubG9hZFJ1bGUoKTtcblxuICAgICAgICBfdGhpczgucmVsb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgX3RoaXM4LnJlZnJlc2goKTtcblxuICAgICAgICBfdGhpczguYnVzLiRlbWl0KCdyZWxvYWRpbmcnLCBfdGhpczguYXBpKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5idXMuJG9mZignbmV4dC10aWNrJywgdGhpcy5uZXh0UmVsb2FkKTtcbiAgICAgIHRoaXMuYnVzLiRvbmNlKCduZXh0LXRpY2snLCB0aGlzLm5leHRSZWxvYWQpO1xuICAgICAgdGhpcy5idXMuJGVtaXQoJ3VwZGF0ZScsIHRoaXMuYXBpKTtcbiAgICB9LFxuICAgIC8vdG9kbyDnu4Tku7bnlJ/miJDlhajpg6jpgJrov4cgYWxpYXNcbiAgICByZWZyZXNoOiBmdW5jdGlvbiByZWZyZXNoKCkge1xuICAgICAgdGhpcy52bS5zZXR1cFN0YXRlLnJlZnJlc2goKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmdWxsUnVsZShydWxlKSB7XG4gIHZhciBkZWYgPSBiYXNlUnVsZSgpO1xuICBPYmplY3Qua2V5cyhkZWYpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICBpZiAoIWhhc1Byb3BlcnR5KHJ1bGUsIGspKSBydWxlW2tdID0gZGVmW2tdO1xuICB9KTtcbiAgcmV0dXJuIHJ1bGU7XG59XG5cbmZ1bmN0aW9uIGdldEN0cmwoY3R4KSB7XG4gIHZhciBjb250cm9sID0gY3R4LnJ1bGUuY29udHJvbCB8fCBbXTtcbiAgaWYgKGlzLk9iamVjdChjb250cm9sKSkgcmV0dXJuIFtjb250cm9sXTtlbHNlIHJldHVybiBjb250cm9sO1xufVxuXG5mdW5jdGlvbiBmaW5kQ3RybChjdHgsIHJ1bGUpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdHguY3RybFJ1bGUubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY3RybCA9IGN0eC5jdHJsUnVsZVtpXTtcbiAgICBpZiAoY3RybC5jaGlsZHJlbiA9PT0gcnVsZSkgcmV0dXJuIGN0cmw7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDdHJsKGN0eCkge1xuICByZXR1cm4gISFjdHgucnVsZS5fX2N0cmw7XG59XG5cbmZ1bmN0aW9uIHVzZUlucHV0KEhhbmRsZXIpIHtcbiAgZXh0ZW5kKEhhbmRsZXIucHJvdG90eXBlLCB7XG4gICAgc2V0VmFsdWU6IGZ1bmN0aW9uIHNldFZhbHVlKGN0eCwgdmFsdWUsIGZvcm1WYWx1ZSwgc2V0RmxhZykge1xuICAgICAgaWYgKGN0eC5kZWxldGVkKSByZXR1cm47XG4gICAgICBjdHgucnVsZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0dXMgPSB0cnVlO1xuICAgICAgdGhpcy5uZXh0UmVmcmVzaCgpO1xuICAgICAgdGhpcy4kcmVuZGVyLmNsZWFyQ2FjaGUoY3R4KTtcbiAgICAgIHRoaXMuc2V0Rm9ybURhdGEoY3R4LCBmb3JtVmFsdWUpO1xuICAgICAgdGhpcy5zeW5jVmFsdWUoKTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UoY3R4LCB2YWx1ZSk7XG4gICAgICB0aGlzLnZtLmVtaXQoJ2NoYW5nZScsIGN0eC5maWVsZCwgdmFsdWUsIGN0eC5vcmlnaW4sIHRoaXMuYXBpLCBzZXRGbGFnIHx8IGZhbHNlKTtcbiAgICAgIHRoaXMuZWZmZWN0KGN0eCwgJ3ZhbHVlJyk7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywgY3R4LmZpZWxkLCB2YWx1ZSwge1xuICAgICAgICBydWxlOiBjdHgub3JpZ2luLFxuICAgICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgICBzZXRGbGFnOiBzZXRGbGFnIHx8IGZhbHNlXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uSW5wdXQ6IGZ1bmN0aW9uIG9uSW5wdXQoY3R4LCB2YWx1ZSkge1xuICAgICAgdmFyIHZhbDtcblxuICAgICAgaWYgKGN0eC5pbnB1dCAmJiAodGhpcy5pc1F1b3RlKGN0eCwgdmFsID0gY3R4LnBhcnNlci50b1ZhbHVlKHZhbHVlLCBjdHgpKSB8fCB0aGlzLmlzQ2hhbmdlKGN0eCwgdmFsdWUpKSkge1xuICAgICAgICB0aGlzLnNldFZhbHVlKGN0eCwgdmFsLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvblVwZGF0ZVZhbHVlOiBmdW5jdGlvbiBvblVwZGF0ZVZhbHVlKGN0eCwgZGF0YSkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy5kZWZlclN5bmNWYWx1ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBncm91cCA9IGN0eC5nZXRQYXJlbnRHcm91cCgpO1xuICAgICAgICB2YXIgc3ViRm9ybSA9IGdyb3VwID8gX3RoaXMuc3ViUnVsZURhdGFbZ3JvdXAuaWRdIDogbnVsbDtcbiAgICAgICAgdmFyIHN1YkRhdGEgPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXMoZGF0YSB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgIGlmIChzdWJGb3JtICYmIGhhc1Byb3BlcnR5KHN1YkZvcm0sIGspKSB7XG4gICAgICAgICAgICBzdWJEYXRhW2tdID0gZGF0YVtrXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc1Byb3BlcnR5KF90aGlzLmFwaS5mb3JtLCBrKSkge1xuICAgICAgICAgICAgX3RoaXMuYXBpLmZvcm1ba10gPSBkYXRhW2tdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoX3RoaXMuYXBpLnRvcCAhPT0gX3RoaXMuYXBpICYmIGhhc1Byb3BlcnR5KF90aGlzLmFwaS50b3AuZm9ybSwgaykpIHtcbiAgICAgICAgICAgIF90aGlzLmFwaS50b3AuZm9ybVtrXSA9IGRhdGFba107XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoc3ViRGF0YSkubGVuZ3RoKSB7XG4gICAgICAgICAgX3RoaXMuYXBpLnNldENoaWxkcmVuRm9ybURhdGEoZ3JvdXAucnVsZSwgc3ViRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb25CYXNlSW5wdXQ6IGZ1bmN0aW9uIG9uQmFzZUlucHV0KGN0eCwgdmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0Rm9ybURhdGEoY3R4LCB2YWx1ZSk7XG4gICAgICBjdHgubW9kZWxWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5uZXh0UmVmcmVzaCgpO1xuICAgICAgdGhpcy4kcmVuZGVyLmNsZWFyQ2FjaGUoY3R4KTtcbiAgICB9LFxuICAgIHNldEZvcm1EYXRhOiBmdW5jdGlvbiBzZXRGb3JtRGF0YShjdHgsIHZhbHVlKSB7XG4gICAgICBjdHgubW9kZWxWYWx1ZSA9IHZhbHVlO1xuICAgICAgdmFyIGdyb3VwID0gY3R4LmdldFBhcmVudEdyb3VwKCk7XG5cbiAgICAgIGlmIChncm91cCkge1xuICAgICAgICBpZiAoIXRoaXMuc3ViUnVsZURhdGFbZ3JvdXAuaWRdKSB7XG4gICAgICAgICAgdGhpcy5zdWJSdWxlRGF0YVtncm91cC5pZF0gPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3ViUnVsZURhdGFbZ3JvdXAuaWRdW2N0eC5maWVsZF0gPSBjdHgucnVsZS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgJHNldCh0aGlzLmZvcm1EYXRhLCBjdHguaWQsIHZhbHVlKTtcbiAgICB9LFxuICAgIHJtU3ViUnVsZURhdGE6IGZ1bmN0aW9uIHJtU3ViUnVsZURhdGEoY3R4KSB7XG4gICAgICB2YXIgZ3JvdXAgPSBjdHguZ2V0UGFyZW50R3JvdXAoKTtcblxuICAgICAgaWYgKGdyb3VwICYmIHRoaXMuc3ViUnVsZURhdGFbZ3JvdXAuaWRdKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnN1YlJ1bGVEYXRhW2dyb3VwLmlkXVtjdHguZmllbGRdO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIGdldEZvcm1EYXRhKGN0eCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybURhdGFbY3R4LmlkXTtcbiAgICB9LFxuICAgIHN5bmNGb3JtOiBmdW5jdGlvbiBzeW5jRm9ybSgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgZGF0YSA9IHJlYWN0aXZlKHt9KTtcbiAgICAgIHZhciBmaWVsZHMgPSB0aGlzLmZpZWxkcygpO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFwcGVuZFZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmFwcGVuZERhdGEpLnJlZHVjZShmdW5jdGlvbiAoaW5pdGlhbCwgZmllbGQpIHtcbiAgICAgICAgICBpZiAoZmllbGRzLmluZGV4T2YoZmllbGQpID09PSAtMSkge1xuICAgICAgICAgICAgaW5pdGlhbFtmaWVsZF0gPSB0b1JlZihfdGhpczIuYXBwZW5kRGF0YSwgZmllbGQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBpbml0aWFsO1xuICAgICAgICB9LCBkYXRhKTtcbiAgICAgIH1cblxuICAgICAgZmllbGRzLnJlZHVjZShmdW5jdGlvbiAoaW5pdGlhbCwgZmllbGQpIHtcbiAgICAgICAgdmFyIGN0eCA9IF90aGlzMi5nZXRDdHgoZmllbGQpO1xuXG4gICAgICAgIGluaXRpYWxbZmllbGRdID0gdG9SZWYoY3R4LnJ1bGUsICd2YWx1ZScpO1xuICAgICAgICByZXR1cm4gaW5pdGlhbDtcbiAgICAgIH0sIGRhdGEpO1xuICAgICAgdGhpcy5mb3JtID0gZGF0YTtcbiAgICAgIHRoaXMuc3luY1ZhbHVlKCk7XG4gICAgfSxcbiAgICBhcHBlbmRWYWx1ZTogZnVuY3Rpb24gYXBwZW5kVmFsdWUocnVsZSkge1xuICAgICAgaWYgKCFydWxlLmZpZWxkIHx8ICFoYXNQcm9wZXJ0eSh0aGlzLmFwcGVuZERhdGEsIHJ1bGUuZmllbGQpKSByZXR1cm47XG4gICAgICBydWxlLnZhbHVlID0gdGhpcy5hcHBlbmREYXRhW3J1bGUuZmllbGRdO1xuICAgICAgZGVsZXRlIHRoaXMuYXBwZW5kRGF0YVtydWxlLmZpZWxkXTtcbiAgICB9LFxuICAgIGFkZFN1YkZvcm06IGZ1bmN0aW9uIGFkZFN1YkZvcm0oY3R4LCBzdWJGb3JtKSB7XG4gICAgICB0aGlzLnN1YkZvcm1bY3R4LmlkXSA9IHN1YkZvcm07XG4gICAgfSxcbiAgICBkZWZlclN5bmNWYWx1ZTogZnVuY3Rpb24gZGVmZXJTeW5jVmFsdWUoZm4sIHN5bmMpIHtcbiAgICAgIGlmICghdGhpcy5kZWZlclN5bmNGbikge1xuICAgICAgICB0aGlzLmRlZmVyU3luY0ZuID0gZm47XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5kZWZlclN5bmNGbi5zeW5jKSB7XG4gICAgICAgIHRoaXMuZGVmZXJTeW5jRm4uc3luYyA9IHN5bmM7XG4gICAgICB9XG5cbiAgICAgIGludm9rZShmbik7XG5cbiAgICAgIGlmICh0aGlzLmRlZmVyU3luY0ZuID09PSBmbikge1xuICAgICAgICB0aGlzLmRlZmVyU3luY0ZuID0gbnVsbDtcblxuICAgICAgICBpZiAoZm4uc3luYykge1xuICAgICAgICAgIHRoaXMuc3luY0Zvcm0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgc3luY1ZhbHVlOiBmdW5jdGlvbiBzeW5jVmFsdWUoKSB7XG4gICAgICBpZiAodGhpcy5kZWZlclN5bmNGbikge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZlclN5bmNGbi5zeW5jID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy52bS5zZXR1cFN0YXRlLnVwZGF0ZVZhbHVlKF9vYmplY3RTcHJlYWQyKHt9LCB0aGlzLmZvcm0pKTtcbiAgICB9LFxuICAgIGlzQ2hhbmdlOiBmdW5jdGlvbiBpc0NoYW5nZShjdHgsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRGb3JtRGF0YShjdHgpLCBzdHJGbikgIT09IEpTT04uc3RyaW5naWZ5KHZhbHVlLCBzdHJGbik7XG4gICAgfSxcbiAgICBpc1F1b3RlOiBmdW5jdGlvbiBpc1F1b3RlKGN0eCwgdmFsdWUpIHtcbiAgICAgIHJldHVybiAoaXMuT2JqZWN0KHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgJiYgdmFsdWUgPT09IGN0eC5ydWxlLnZhbHVlO1xuICAgIH0sXG4gICAgcmVmcmVzaFVwZGF0ZTogZnVuY3Rpb24gcmVmcmVzaFVwZGF0ZShjdHgsIHZhbCwgb3JpZ2luLCBmaWVsZCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmIChpcy5GdW5jdGlvbihjdHgucnVsZS51cGRhdGUpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGludm9rZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGN0eC5ydWxlLnVwZGF0ZSh2YWwsIGN0eC5vcmlnaW4sIF90aGlzMy5hcGksIHtcbiAgICAgICAgICAgIG9yaWdpbjogb3JpZ2luIHx8ICdjaGFuZ2UnLFxuICAgICAgICAgICAgbGlua0ZpZWxkOiBmaWVsZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgICAgY3R4LnJ1bGUuaGlkZGVuID0gc3RhdGUgPT09IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWx1ZUNoYW5nZTogZnVuY3Rpb24gdmFsdWVDaGFuZ2UoY3R4LCB2YWwpIHtcbiAgICAgIHRoaXMucmVmcmVzaFJ1bGUoY3R4LCB2YWwpO1xuICAgICAgdGhpcy5idXMuJGVtaXQoJ2NoYW5nZS0nICsgY3R4LmZpZWxkLCB2YWwpO1xuICAgIH0sXG4gICAgcmVmcmVzaFJ1bGU6IGZ1bmN0aW9uIHJlZnJlc2hSdWxlKGN0eCwgdmFsLCBvcmlnaW4sIGZpZWxkKSB7XG4gICAgICBpZiAodGhpcy5yZWZyZXNoQ29udHJvbChjdHgpKSB7XG4gICAgICAgIHRoaXMuJHJlbmRlci5jbGVhckNhY2hlQWxsKCk7XG4gICAgICAgIHRoaXMubG9hZFJ1bGUoKTtcbiAgICAgICAgdGhpcy5idXMuJGVtaXQoJ3VwZGF0ZScsIHRoaXMuYXBpKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVmcmVzaFVwZGF0ZShjdHgsIHZhbCwgb3JpZ2luLCBmaWVsZCk7XG4gICAgfSxcbiAgICBhcHBlbmRMaW5rOiBmdW5jdGlvbiBhcHBlbmRMaW5rKGN0eCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBsaW5rID0gY3R4LnJ1bGUubGluaztcbiAgICAgIGlzLnRydWVBcnJheShsaW5rKSAmJiBsaW5rLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIGZuKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQucmVmcmVzaFJ1bGUoY3R4LCBjdHgucnVsZS52YWx1ZSwgJ2xpbmsnLCBmaWVsZCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgX3RoaXM0LmJ1cy4kb24oJ2NoYW5nZS0nICsgZmllbGQsIGZuKTtcblxuICAgICAgICBjdHgubGlua09uLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQuYnVzLiRvZmYoJ2NoYW5nZS0nICsgZmllbGQsIGZuKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGZpZWxkczogZnVuY3Rpb24gZmllbGRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZmllbGRDdHgpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHN0ckZuKGtleSwgdmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nID8gJycgKyB2YWwgOiB2YWw7XG59XG5cbnZhciBCYXNlUGFyc2VyID0ge1xuICBpbml0OiBmdW5jdGlvbiBpbml0KGN0eCkge30sXG4gIHRvRm9ybVZhbHVlOiBmdW5jdGlvbiB0b0Zvcm1WYWx1ZSh2YWx1ZSwgY3R4KSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICB0b1ZhbHVlOiBmdW5jdGlvbiB0b1ZhbHVlKGZvcm1WYWx1ZSwgY3R4KSB7XG4gICAgcmV0dXJuIGZvcm1WYWx1ZTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZChjdHgpIHt9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihjaGlsZHJlbiwgY3R4KSB7XG4gICAgaWYgKGN0eC4kaGFuZGxlLmZjLnJlbmRlckRyaXZlciAmJiBjdHguJGhhbmRsZS5mYy5yZW5kZXJEcml2ZXIuZGVmYXVsdFJlbmRlcikge1xuICAgICAgcmV0dXJuIGN0eC4kaGFuZGxlLmZjLnJlbmRlckRyaXZlci5kZWZhdWx0UmVuZGVyKGN0eCwgY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHJldHVybiBjdHguJHJlbmRlci5kZWZhdWx0UmVuZGVyKGN0eCwgY2hpbGRyZW4pO1xuICB9LFxuICBwcmV2aWV3OiBmdW5jdGlvbiBwcmV2aWV3KGNoaWxkcmVuLCBjdHgpIHtcbiAgICBpZiAoY3R4LiRoYW5kbGUuZmMucmVuZGVyRHJpdmVyICYmIGN0eC4kaGFuZGxlLmZjLnJlbmRlckRyaXZlci5kZWZhdWx0UHJldmlldykge1xuICAgICAgcmV0dXJuIGN0eC4kaGFuZGxlLmZjLnJlbmRlckRyaXZlci5kZWZhdWx0UHJldmlldyhjdHgsIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZW5kZXIoY2hpbGRyZW4sIGN0eCk7XG4gIH0sXG4gIG1lcmdlUHJvcDogZnVuY3Rpb24gbWVyZ2VQcm9wKGN0eCkge31cbn07XG5cbnZhciBub25lS2V5ID0gWydmaWVsZCcsICd2YWx1ZScsICd2bScsICd0ZW1wbGF0ZScsICduYW1lJywgJ2NvbmZpZycsICdjb250cm9sJywgJ2luamVjdCcsICdzeW5jJywgJ3BheWxvYWQnLCAnb3B0aW9uc1RvJywgJ3VwZGF0ZScsICdzbG90VXBkYXRlJywgJ2NvbXB1dGVkJywgJ2NvbXBvbmVudCcsICdjYWNoZSddO1xuZnVuY3Rpb24gdXNlQ29udGV4dChIYW5kbGVyKSB7XG4gIGV4dGVuZChIYW5kbGVyLnByb3RvdHlwZSwge1xuICAgIGdldEN0eDogZnVuY3Rpb24gZ2V0Q3R4KGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZEN0eChpZCkgfHwgdGhpcy5nZXROYW1lQ3R4KGlkKVswXSB8fCB0aGlzLmN0eHNbaWRdO1xuICAgIH0sXG4gICAgZ2V0Q3R4czogZnVuY3Rpb24gZ2V0Q3R4cyhpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmllbGRDdHhbaWRdIHx8IHRoaXMubmFtZUN0eFtpZF0gfHwgKHRoaXMuY3R4c1tpZF0gPyBbdGhpcy5jdHhzW2lkXV0gOiBbXSk7XG4gICAgfSxcbiAgICBzZXRJZEN0eDogZnVuY3Rpb24gc2V0SWRDdHgoY3R4LCBrZXksIHR5cGUpIHtcbiAgICAgIHZhciBmaWVsZCA9IFwiXCIuY29uY2F0KHR5cGUsIFwiQ3R4XCIpO1xuXG4gICAgICBpZiAoIXRoaXNbZmllbGRdW2tleV0pIHtcbiAgICAgICAgdGhpc1tmaWVsZF1ba2V5XSA9IFtjdHhdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1tmaWVsZF1ba2V5XS5wdXNoKGN0eCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBybUlkQ3R4OiBmdW5jdGlvbiBybUlkQ3R4KGN0eCwga2V5LCB0eXBlKSB7XG4gICAgICB2YXIgZmllbGQgPSBcIlwiLmNvbmNhdCh0eXBlLCBcIkN0eFwiKTtcbiAgICAgIHZhciBsc3QgPSB0aGlzW2ZpZWxkXVtrZXldO1xuICAgICAgaWYgKCFsc3QpIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciBmbGFnID0gbHN0LnNwbGljZShsc3QuaW5kZXhPZihjdHgpID4+PiAwLCAxKS5sZW5ndGggPiAwO1xuXG4gICAgICBpZiAoIWxzdC5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNbZmllbGRdW2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbGFnO1xuICAgIH0sXG4gICAgZ2V0RmllbGRDdHg6IGZ1bmN0aW9uIGdldEZpZWxkQ3R4KGZpZWxkKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZmllbGRDdHhbZmllbGRdIHx8IFtdKVswXTtcbiAgICB9LFxuICAgIGdldE5hbWVDdHg6IGZ1bmN0aW9uIGdldE5hbWVDdHgobmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMubmFtZUN0eFtuYW1lXSB8fCBbXTtcbiAgICB9LFxuICAgIHNldEN0eDogZnVuY3Rpb24gc2V0Q3R4KGN0eCkge1xuICAgICAgdmFyIGlkID0gY3R4LmlkLFxuICAgICAgICAgIGZpZWxkID0gY3R4LmZpZWxkLFxuICAgICAgICAgIG5hbWUgPSBjdHgubmFtZSxcbiAgICAgICAgICBydWxlID0gY3R4LnJ1bGU7XG4gICAgICB0aGlzLmN0eHNbaWRdID0gY3R4O1xuICAgICAgbmFtZSAmJiB0aGlzLnNldElkQ3R4KGN0eCwgbmFtZSwgJ25hbWUnKTtcbiAgICAgIGlmICghY3R4LmlucHV0KSByZXR1cm47XG4gICAgICB0aGlzLnNldElkQ3R4KGN0eCwgZmllbGQsICdmaWVsZCcpO1xuICAgICAgdGhpcy5zZXRGb3JtRGF0YShjdHgsIGN0eC5wYXJzZXIudG9Gb3JtVmFsdWUocnVsZS52YWx1ZSwgY3R4KSk7XG5cbiAgICAgIGlmICh0aGlzLmlzTW91bnRlZCAmJiAhdGhpcy5yZWxvYWRpbmcpIHtcbiAgICAgICAgdGhpcy52bS5lbWl0KCdjaGFuZ2UnLCBjdHguZmllbGQsIHJ1bGUudmFsdWUsIGN0eC5vcmlnaW4sIHRoaXMuYXBpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFBhcnNlcjogZnVuY3Rpb24gZ2V0UGFyc2VyKGN0eCkge1xuICAgICAgdmFyIGxpc3QgPSB0aGlzLmZjLnBhcnNlcnM7XG4gICAgICB2YXIgcmVuZGVyRHJpdmVyID0gdGhpcy5mYy5yZW5kZXJEcml2ZXI7XG5cbiAgICAgIGlmIChyZW5kZXJEcml2ZXIpIHtcbiAgICAgICAgdmFyIF9saXN0ID0gcmVuZGVyRHJpdmVyLnBhcnNlcnMgfHwge307XG5cbiAgICAgICAgdmFyIHBhcnNlciA9IF9saXN0W2N0eC5vcmlnaW5UeXBlXSB8fCBfbGlzdFt0b0Nhc2UoY3R4LnR5cGUpXSB8fCBfbGlzdFtjdHgudHJ1ZVR5cGVdO1xuXG4gICAgICAgIGlmIChwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaXN0W2N0eC5vcmlnaW5UeXBlXSB8fCBsaXN0W3RvQ2FzZShjdHgudHlwZSldIHx8IGxpc3RbY3R4LnRydWVUeXBlXSB8fCBCYXNlUGFyc2VyO1xuICAgIH0sXG4gICAgYmluZFBhcnNlcjogZnVuY3Rpb24gYmluZFBhcnNlcihjdHgpIHtcbiAgICAgIGN0eC5zZXRQYXJzZXIodGhpcy5nZXRQYXJzZXIoY3R4KSk7XG4gICAgfSxcbiAgICBnZXRUeXBlOiBmdW5jdGlvbiBnZXRUeXBlKGFsaWFzKSB7XG4gICAgICB2YXIgbWFwID0gdGhpcy5mYy5DcmVhdGVOb2RlLmFsaWFzTWFwO1xuICAgICAgdmFyIHR5cGUgPSBtYXBbYWxpYXNdIHx8IG1hcFt0b0Nhc2UoYWxpYXMpXSB8fCBhbGlhcztcbiAgICAgIHJldHVybiB0b0Nhc2UodHlwZSk7XG4gICAgfSxcbiAgICBub1dhdGNoOiBmdW5jdGlvbiBub1dhdGNoKGZuKSB7XG4gICAgICBpZiAoIXRoaXMubm9XYXRjaEZuKSB7XG4gICAgICAgIHRoaXMubm9XYXRjaEZuID0gZm47XG4gICAgICB9XG5cbiAgICAgIGludm9rZShmbik7XG5cbiAgICAgIGlmICh0aGlzLm5vV2F0Y2hGbiA9PT0gZm4pIHtcbiAgICAgICAgdGhpcy5ub1dhdGNoRm4gPSBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgd2F0Y2hDdHg6IGZ1bmN0aW9uIHdhdGNoQ3R4KGN0eCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIGFsbCA9IGF0dHJzKCk7XG4gICAgICBhbGwuZmlsdGVyKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHJldHVybiBrWzBdICE9PSAnXycgJiYga1swXSAhPT0gJyQnICYmIG5vbmVLZXkuaW5kZXhPZihrKSA9PT0gLTE7XG4gICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHJlZiA9IHRvUmVmKGN0eC5ydWxlLCBrZXkpO1xuICAgICAgICB2YXIgZmxhZyA9IGtleSA9PT0gJ2NoaWxkcmVuJztcbiAgICAgICAgY3R4LnJlZlJ1bGVba2V5XSA9IHJlZjtcbiAgICAgICAgY3R4LndhdGNoLnB1c2god2F0Y2goZmxhZyA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gaXMuRnVuY3Rpb24ocmVmLnZhbHVlKSA/IHJlZi52YWx1ZSA6IF90b0NvbnN1bWFibGVBcnJheShyZWYudmFsdWUgfHwgW10pO1xuICAgICAgICB9IDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiByZWYudmFsdWU7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChfLCBvKSB7XG4gICAgICAgICAgdmFyIG4gPSByZWYudmFsdWU7XG4gICAgICAgICAgaWYgKF90aGlzLmlzQnJlYWtXYXRjaCgpKSByZXR1cm47XG5cbiAgICAgICAgICBpZiAoZmxhZyAmJiBjdHgucGFyc2VyLmxvYWRDaGlsZHJlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIF90aGlzLiRyZW5kZXIuY2xlYXJDYWNoZShjdHgpO1xuXG4gICAgICAgICAgICBfdGhpcy5uZXh0UmVmcmVzaCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMud2F0Y2hpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKGtleSA9PT0gJ2xpbmsnKSB7XG4gICAgICAgICAgICBjdHgubGluaygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gZWxzZSBpZiAoWydwcm9wcycsICdvbicsICdkZWVwJ10uaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgICAgICAgIF90aGlzLnBhcnNlSW5qZWN0RXZlbnQoY3R4LnJ1bGUsIG4gfHwge30pO1xuXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAncHJvcHMnICYmIGN0eC5pbnB1dCkge1xuICAgICAgICAgICAgICBfdGhpcy5zZXRGb3JtRGF0YShjdHgsIGN0eC5wYXJzZXIudG9Gb3JtVmFsdWUoY3R4LnJ1bGUudmFsdWUsIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZW1pdCcpIHtcbiAgICAgICAgICAgIF90aGlzLnBhcnNlRW1pdChjdHgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaGlkZGVuJyAmJiBCb29sZWFuKG4pICE9PSBCb29sZWFuKG8pKSB7XG4gICAgICAgICAgICBfdGhpcy4kcmVuZGVyLmNsZWFyQ2FjaGVBbGwoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFsncHJlZml4JywgJ3N1ZmZpeCddLmluZGV4T2Yoa2V5KSA+IC0xKSBuICYmIF90aGlzLmxvYWRGbihuLCBjdHgucnVsZSk7ZWxzZSBpZiAoa2V5ID09PSAndHlwZScpIHtcbiAgICAgICAgICAgIGN0eC51cGRhdGVUeXBlKCk7XG5cbiAgICAgICAgICAgIF90aGlzLmJpbmRQYXJzZXIoY3R4KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZsYWcpIHtcbiAgICAgICAgICAgIGlmIChpcy5GdW5jdGlvbihvKSkge1xuICAgICAgICAgICAgICBvID0gY3R4LmdldFBlbmRpbmcoJ2NoaWxkcmVuJywgW10pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXMuRnVuY3Rpb24obikpIHtcbiAgICAgICAgICAgICAgbiA9IGN0eC5sb2FkQ2hpbGRyZW5QZW5kaW5nKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF90aGlzLnVwZGF0ZUNoaWxkcmVuKGN0eCwgbiwgbyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMuJHJlbmRlci5jbGVhckNhY2hlKGN0eCk7XG5cbiAgICAgICAgICBfdGhpcy5yZWZyZXNoKCk7XG5cbiAgICAgICAgICBfdGhpcy53YXRjaGluZyA9IGZhbHNlO1xuICAgICAgICB9LCB7XG4gICAgICAgICAgZGVlcDogIWZsYWcsXG4gICAgICAgICAgc3luYzogZmxhZ1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGN0eC5pbnB1dCkge1xuICAgICAgICB2YXIgdmFsID0gdG9SZWYoY3R4LnJ1bGUsICd2YWx1ZScpO1xuICAgICAgICBjdHgud2F0Y2gucHVzaCh3YXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbC52YWx1ZTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBmb3JtVmFsdWUgPSBjdHgucGFyc2VyLnRvRm9ybVZhbHVlKHZhbC52YWx1ZSwgY3R4KTtcblxuICAgICAgICAgIGlmIChfdGhpcy5pc0NoYW5nZShjdHgsIGZvcm1WYWx1ZSkpIHtcbiAgICAgICAgICAgIF90aGlzLnNldFZhbHVlKGN0eCwgdmFsLnZhbHVlLCBmb3JtVmFsdWUsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmJ1cy4kb25jZSgnbG9hZC1lbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb21wdXRlZCA9IGN0eC5ydWxlLmNvbXB1dGVkO1xuXG4gICAgICAgIGlmICghY29tcHV0ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX3R5cGVvZihjb21wdXRlZCkgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29tcHV0ZWQgPSB7XG4gICAgICAgICAgICB2YWx1ZTogY29tcHV0ZWRcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY29tcHV0ZWQpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICBjdHgud2F0Y2gucHVzaCh3YXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IGNvbXB1dGVkW2tdO1xuICAgICAgICAgICAgaWYgKCFpdGVtKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIGZuO1xuXG4gICAgICAgICAgICBpZiAoX3R5cGVvZihpdGVtKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgdmFyIGdyb3VwID0gY3R4LmdldFBhcmVudEdyb3VwKCk7XG5cbiAgICAgICAgICAgICAgdmFyIGNoZWNrQ29uZGl0aW9uID0gZnVuY3Rpb24gY2hlY2tDb25kaXRpb24oaXRlbSkge1xuICAgICAgICAgICAgICAgIGl0ZW0gPSBBcnJheS5pc0FycmF5KGl0ZW0pID8ge1xuICAgICAgICAgICAgICAgICAgbW9kZTogJ0FORCcsXG4gICAgICAgICAgICAgICAgICBncm91cDogaXRlbVxuICAgICAgICAgICAgICAgIH0gOiBpdGVtO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFpcy50cnVlQXJyYXkoaXRlbS5ncm91cCkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBvciA9IGl0ZW0ubW9kZSA9PT0gJ09SJztcbiAgICAgICAgICAgICAgICB2YXIgdmFsaWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtLmdyb3VwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgb25lID0gaXRlbS5ncm91cFtpXTtcbiAgICAgICAgICAgICAgICAgIHZhciBmbGFnID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgICBpZiAob25lLm1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IGNoZWNrQ29uZGl0aW9uKG9uZSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFjb25kaXRpb25bb25lLmNvbmRpdGlvbl0pIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IG5ldyBGdW5jdGlvbignXyQnLCAnXyR2YWwnLCAnJGZvcm0nLCAnX2dyb3VwJywgXCJ3aXRoKCRmb3JtKXt3aXRoKHRoaXMpe3dpdGgoX2dyb3VwKXsgcmV0dXJuIF8kWydcIi5jb25jYXQob25lLmNvbmRpdGlvbiwgXCInXShcIikuY29uY2F0KG9uZS5maWVsZCwgXCIsIFwiKS5jb25jYXQob25lLmNvbXBhcmUgPyBvbmUuY29tcGFyZSA6ICdfJHZhbCcsIFwiKTsgfX19XCIpKS5jYWxsKF90aGlzLmFwaS5mb3JtLCBjb25kaXRpb24sIG9uZS52YWx1ZSwgX3RoaXMuYXBpLnRvcC5mb3JtLCBncm91cCA/IF90aGlzLnN1YlJ1bGVEYXRhW2dyb3VwLmlkXSB8fCB7fSA6IHt9KTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKG9yICYmIGZsYWcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmICghb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiBmbGFnO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBvciA/IGZhbHNlIDogdmFsaWQ7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgdmFyIF92YWwgPSBjaGVja0NvbmRpdGlvbihpdGVtKTtcblxuICAgICAgICAgICAgICByZXR1cm4gaXRlbS5pbnZlcnQgPT09IHRydWUgPyAhX3ZhbCA6IF92YWw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzLkZ1bmN0aW9uKGl0ZW0pKSB7XG4gICAgICAgICAgICAgIGZuID0gZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0oX3RoaXMuYXBpLmZvcm0sIF90aGlzLmFwaSk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgX2dyb3VwID0gY3R4LmdldFBhcmVudEdyb3VwKCk7XG5cbiAgICAgICAgICAgICAgZm4gPSBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKCdfZm9ybXVsYXMnLCAnJGZvcm0nLCAnX2dyb3VwJywgJyRydWxlJywgJyRhcGknLCBcIndpdGgoJGZvcm0pe3dpdGgodGhpcyl7d2l0aChfZ3JvdXApe3dpdGgoX2Zvcm11bGFzKXsgcmV0dXJuIFwiLmNvbmNhdChpdGVtLCBcIiB9fX19XCIpKS5jYWxsKF90aGlzLmFwaS5mb3JtLCBfdGhpcy5mYy5mb3JtdWxhcywgX3RoaXMuYXBpLnRvcC5mb3JtLCBfZ3JvdXAgPyBfdGhpcy5zdWJSdWxlRGF0YVtfZ3JvdXAuaWRdIHx8IHt9IDoge30sIGN0eC5ydWxlLCBfdGhpcy5hcGkpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gaW52b2tlKGZuLCB1bmRlZmluZWQpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKGsgPT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5vbklucHV0KGN0eCwgbik7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoa1swXSA9PT0gJyQnKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuYXBpLnNldEVmZmVjdChjdHguaWQsIGssIG4pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlZXBTZXQoY3R4LnJ1bGUsIGssIG4pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBpbW1lZGlhdGU6IGsgPT09ICd2YWx1ZScgPyBbdW5kZWZpbmVkLCBudWxsLCAnJ10uaW5kZXhPZihjdHgucnVsZS52YWx1ZSkgPiAtMSA6IHRydWVcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLndhdGNoRWZmZWN0KGN0eCk7XG4gICAgfSxcbiAgICB1cGRhdGVDaGlsZHJlbjogZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4oY3R4LCBuLCBvKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdGhpcy5kZWZlclN5bmNWYWx1ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIG8gJiYgby5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgIGlmICgobiB8fCBbXSkuaW5kZXhPZihjaGlsZCkgPT09IC0xICYmIGNoaWxkICYmICFpcy5TdHJpbmcoY2hpbGQpICYmIGNoaWxkLl9fZmNfXyAmJiBjaGlsZC5fX2ZjX18ucGFyZW50ID09PSBjdHgpIHtcbiAgICAgICAgICAgIF90aGlzMi5ybUN0eChjaGlsZC5fX2ZjX18pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzLnRydWVBcnJheShuKSkge1xuICAgICAgICAgIF90aGlzMi5sb2FkQ2hpbGRyZW4obiwgY3R4KTtcblxuICAgICAgICAgIF90aGlzMi5idXMuJGVtaXQoJ3VwZGF0ZScsIF90aGlzMi5hcGkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHJtU3ViOiBmdW5jdGlvbiBybVN1YihzdWIpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBpcy50cnVlQXJyYXkoc3ViKSAmJiBzdWIuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgICByICYmIHIuX19mY19fICYmIF90aGlzMy5ybUN0eChyLl9fZmNfXyk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHJtQ3R4OiBmdW5jdGlvbiBybUN0eChjdHgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICBpZiAoY3R4LmRlbGV0ZWQpIHJldHVybjtcbiAgICAgIHZhciBpZCA9IGN0eC5pZCxcbiAgICAgICAgICBmaWVsZCA9IGN0eC5maWVsZCxcbiAgICAgICAgICBpbnB1dCA9IGN0eC5pbnB1dCxcbiAgICAgICAgICBuYW1lID0gY3R4Lm5hbWU7XG4gICAgICAkZGVsKHRoaXMuY3R4cywgaWQpO1xuICAgICAgJGRlbCh0aGlzLmZvcm1EYXRhLCBpZCk7XG4gICAgICAkZGVsKHRoaXMuc3ViRm9ybSwgaWQpO1xuICAgICAgJGRlbCh0aGlzLnZtLnNldHVwU3RhdGUuY3R4SW5qZWN0LCBpZCk7XG4gICAgICB2YXIgZ3JvdXAgPSBjdHguZ2V0UGFyZW50R3JvdXAoKTtcblxuICAgICAgaWYgKGdyb3VwICYmIHRoaXMuc3ViUnVsZURhdGFbZ3JvdXAuaWRdKSB7XG4gICAgICAgICRkZWwodGhpcy5zdWJSdWxlRGF0YVtncm91cC5pZF0sIGZpZWxkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN0eC5ncm91cCkge1xuICAgICAgICAkZGVsKHRoaXMuc3ViUnVsZURhdGEsIGlkKTtcbiAgICAgIH1cblxuICAgICAgaW5wdXQgJiYgdGhpcy5ybUlkQ3R4KGN0eCwgZmllbGQsICdmaWVsZCcpO1xuICAgICAgbmFtZSAmJiB0aGlzLnJtSWRDdHgoY3R4LCBuYW1lLCAnbmFtZScpO1xuXG4gICAgICBpZiAoaW5wdXQgJiYgIWhhc1Byb3BlcnR5KHRoaXMuZmllbGRDdHgsIGZpZWxkKSkge1xuICAgICAgICAkZGVsKHRoaXMuZm9ybSwgZmllbGQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRlZmVyU3luY1ZhbHVlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFfdGhpczQucmVsb2FkaW5nKSB7XG4gICAgICAgICAgaWYgKGN0eC5wYXJzZXIubG9hZENoaWxkcmVuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gY3R4LmdldFBlbmRpbmcoJ2NoaWxkcmVuJywgY3R4LnJ1bGUuY2hpbGRyZW4pO1xuXG4gICAgICAgICAgICBpZiAoaXMudHJ1ZUFycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGguX19mY19fICYmIF90aGlzNC5ybUN0eChoLl9fZmNfXyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjdHgucm9vdCA9PT0gX3RoaXM0LnJ1bGVzKSB7XG4gICAgICAgICAgICBfdGhpczQudm0uc2V0dXBTdGF0ZS5yZW5kZXJSdWxlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCBpbnB1dCk7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLnNvcnQuaW5kZXhPZihpZCk7XG5cbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuc29ydC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiRyZW5kZXIuY2xlYXJDYWNoZShjdHgpO1xuICAgICAgY3R4W1wiZGVsZXRlXCJdKCk7XG4gICAgICB0aGlzLmVmZmVjdChjdHgsICdkZWxldGVkJyk7XG4gICAgICBpbnB1dCAmJiAhdGhpcy5maWVsZEN0eFtmaWVsZF0gJiYgdGhpcy52bS5lbWl0KCdyZW1vdmUtZmllbGQnLCBmaWVsZCwgY3R4LnJ1bGUsIHRoaXMuYXBpKTtcbiAgICAgIGN0eC5ydWxlLl9fY3RybCB8fCB0aGlzLnZtLmVtaXQoJ3JlbW92ZS1ydWxlJywgY3R4LnJ1bGUsIHRoaXMuYXBpKTtcbiAgICAgIHJldHVybiBjdHg7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdXNlTGlmZWN5Y2xlKEhhbmRsZXIpIHtcbiAgZXh0ZW5kKEhhbmRsZXIucHJvdG90eXBlLCB7XG4gICAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBfbW91bnRlZCA9IGZ1bmN0aW9uIF9tb3VudGVkKCkge1xuICAgICAgICBfdGhpcy5pc01vdW50ZWQgPSB0cnVlO1xuXG4gICAgICAgIF90aGlzLmxpZmVjeWNsZSgnbW91bnRlZCcpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMucGFnZUVuZCkge1xuICAgICAgICBfbW91bnRlZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5idXMuJG9uY2UoJ3BhZ2UtZW5kJywgX21vdW50ZWQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbGlmZWN5Y2xlOiBmdW5jdGlvbiBsaWZlY3ljbGUobmFtZSkge1xuICAgICAgdGhpcy5mYy50YXJnZXRGb3JtRHJpdmVyKG5hbWUsIHRoaXMuYXBpLCB0aGlzLmZjKTtcbiAgICAgIHRoaXMudm0uZW1pdChuYW1lLCB0aGlzLmFwaSk7XG4gICAgICB0aGlzLmVtaXRFdmVudChuYW1lLCB0aGlzLmFwaSk7XG4gICAgfSxcbiAgICBlbWl0RXZlbnQ6IGZ1bmN0aW9uIGVtaXRFdmVudChuYW1lKSB7XG4gICAgICB2YXIgX3RoaXMkYnVzO1xuXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2ZuID0gdGhpcy5vcHRpb25zW25hbWVdIHx8IHRoaXMub3B0aW9uc1t0b0Nhc2UoJ29uLScgKyBuYW1lKV07XG5cbiAgICAgIGlmIChfZm4pIHtcbiAgICAgICAgdmFyIGZuID0gcGFyc2VGbihfZm4pO1xuICAgICAgICBpcy5GdW5jdGlvbihmbikgJiYgaW52b2tlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIChfdGhpcyRidXMgPSB0aGlzLmJ1cykuJGVtaXQuYXBwbHkoX3RoaXMkYnVzLCBbbmFtZV0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1c2VFZmZlY3QoSGFuZGxlcikge1xuICBleHRlbmQoSGFuZGxlci5wcm90b3R5cGUsIHtcbiAgICB1c2VQcm92aWRlcjogZnVuY3Rpb24gdXNlUHJvdmlkZXIoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgcHMgPSB0aGlzLmZjLnByb3ZpZGVycztcbiAgICAgIE9iamVjdC5rZXlzKHBzKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHZhciBwcm9wID0gcHNba107XG5cbiAgICAgICAgaWYgKGlzLkZ1bmN0aW9uKHByb3ApKSB7XG4gICAgICAgICAgcHJvcCA9IHByb3AoX3RoaXMuZmMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvcC5fYyA9IGdldENvbXBvbmVudChwcm9wKTtcblxuICAgICAgICBfdGhpcy5vbkVmZmVjdChwcm9wKTtcblxuICAgICAgICBfdGhpcy5wcm92aWRlcnNba10gPSBwcm9wO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbkVmZmVjdDogZnVuY3Rpb24gb25FZmZlY3QocHJvdmlkZXIpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgdXNlZCA9IFtdO1xuICAgICAgKHByb3ZpZGVyLl9jIHx8IFsnKiddKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciB0eXBlID0gbmFtZSA9PT0gJyonID8gJyonIDogX3RoaXMyLmdldFR5cGUobmFtZSk7XG4gICAgICAgIGlmICh1c2VkLmluZGV4T2YodHlwZSkgPiAtMSkgcmV0dXJuO1xuICAgICAgICB1c2VkLnB1c2godHlwZSk7XG5cbiAgICAgICAgX3RoaXMyLmJ1cy4kb24oXCJwOlwiLmNvbmNhdChwcm92aWRlci5uYW1lLCBcIjpcIikuY29uY2F0KHR5cGUsIFwiOlwiKS5jb25jYXQocHJvdmlkZXIuaW5wdXQgPyAxIDogMCksIGZ1bmN0aW9uIChldmVudCwgYXJncykge1xuICAgICAgICAgIHByb3ZpZGVyW2V2ZW50XSAmJiBwcm92aWRlcltldmVudF0uYXBwbHkocHJvdmlkZXIsIF90b0NvbnN1bWFibGVBcnJheShhcmdzKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBwcm92aWRlci5fdXNlZCA9IHVzZWQ7XG4gICAgfSxcbiAgICB3YXRjaEVmZmVjdDogZnVuY3Rpb24gd2F0Y2hFZmZlY3QoY3R4KSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIGVmZmVjdCA9IHtcbiAgICAgICAgcmVxdWlyZWQ6IGZ1bmN0aW9uIHJlcXVpcmVkKCkge1xuICAgICAgICAgIHZhciBfY3R4JHJ1bGUsIF9jdHgkcnVsZSRlZmZlY3Q7XG5cbiAgICAgICAgICByZXR1cm4gKGhhc1Byb3BlcnR5KGN0eC5ydWxlLCAnJHJlcXVpcmVkJykgPyBjdHgucnVsZVsnJHJlcXVpcmVkJ10gOiAoX2N0eCRydWxlID0gY3R4LnJ1bGUpID09PSBudWxsIHx8IF9jdHgkcnVsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9jdHgkcnVsZSRlZmZlY3QgPSBfY3R4JHJ1bGUuZWZmZWN0KSA9PT0gbnVsbCB8fCBfY3R4JHJ1bGUkZWZmZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY3R4JHJ1bGUkZWZmZWN0LnJlcXVpcmVkKSB8fCBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIE9iamVjdC5rZXlzKGN0eC5ydWxlLmVmZmVjdCB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICBlZmZlY3Rba10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGN0eC5ydWxlLmVmZmVjdFtrXTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmtleXMoY3R4LnJ1bGUpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgaWYgKGtbMF0gPT09ICckJykge1xuICAgICAgICAgIGVmZmVjdFtrLnN1YnN0cigxKV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4LnJ1bGVba107XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBPYmplY3Qua2V5cyhlZmZlY3QpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgY3R4LndhdGNoLnB1c2god2F0Y2goZWZmZWN0W2tdLCBmdW5jdGlvbiAobikge1xuICAgICAgICAgIF90aGlzMy5lZmZlY3QoY3R4LCAnd2F0Y2gnLCBfZGVmaW5lUHJvcGVydHkoe30sIGssIG4pKTtcbiAgICAgICAgfSwge1xuICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBydWxlRWZmZWN0OiBmdW5jdGlvbiBydWxlRWZmZWN0KHJ1bGUsIGV2ZW50LCBhcHBlbmQpIHtcbiAgICAgIHRoaXMuZW1pdEVmZmVjdCh7XG4gICAgICAgIHJ1bGU6IHJ1bGUsXG4gICAgICAgIGlucHV0OiAhIXJ1bGUuZmllbGQsXG4gICAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZShydWxlLnR5cGUpXG4gICAgICB9LCBldmVudCwgYXBwZW5kKTtcbiAgICB9LFxuICAgIGVmZmVjdDogZnVuY3Rpb24gZWZmZWN0KGN0eCwgZXZlbnQsIGN1c3RvbSkge1xuICAgICAgdGhpcy5lbWl0RWZmZWN0KHtcbiAgICAgICAgcnVsZTogY3R4LnJ1bGUsXG4gICAgICAgIGlucHV0OiBjdHguaW5wdXQsXG4gICAgICAgIHR5cGU6IGN0eC50cnVlVHlwZSxcbiAgICAgICAgY3R4OiBjdHgsXG4gICAgICAgIGN1c3RvbTogY3VzdG9tXG4gICAgICB9LCBldmVudCk7XG4gICAgfSxcbiAgICBnZXRFZmZlY3Q6IGZ1bmN0aW9uIGdldEVmZmVjdChydWxlLCBuYW1lKSB7XG4gICAgICBpZiAoaGFzUHJvcGVydHkocnVsZSwgJyQnICsgbmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGVbJyQnICsgbmFtZV07XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNQcm9wZXJ0eShydWxlLCAnZWZmZWN0JykgJiYgaGFzUHJvcGVydHkocnVsZS5lZmZlY3QsIG5hbWUpKSByZXR1cm4gcnVsZS5lZmZlY3RbbmFtZV07XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgZW1pdEVmZmVjdDogZnVuY3Rpb24gZW1pdEVmZmVjdChfcmVmLCBldmVudCwgYXBwZW5kKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIGN0eCA9IF9yZWYuY3R4LFxuICAgICAgICAgIHJ1bGUgPSBfcmVmLnJ1bGUsXG4gICAgICAgICAgaW5wdXQgPSBfcmVmLmlucHV0LFxuICAgICAgICAgIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICAgICAgY3VzdG9tID0gX3JlZi5jdXN0b207XG4gICAgICBpZiAoIXR5cGUgfHwgWydmY0ZyYWdtZW50JywgJ2ZyYWdtZW50J10uaW5kZXhPZih0eXBlKSA+IC0xKSByZXR1cm47XG4gICAgICB2YXIgZWZmZWN0ID0gY3VzdG9tID8gY3VzdG9tIDogT2JqZWN0LmtleXMocnVsZSkucmVkdWNlKGZ1bmN0aW9uIChpLCBrKSB7XG4gICAgICAgIGlmIChrWzBdID09PSAnJCcpIHtcbiAgICAgICAgICBpW2suc3Vic3RyKDEpXSA9IHJ1bGVba107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH0sIF9vYmplY3RTcHJlYWQyKHt9LCBydWxlLmVmZmVjdCB8fCB7fSkpO1xuICAgICAgT2JqZWN0LmtleXMoZWZmZWN0KS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIHZhciBwID0gX3RoaXM0LnByb3ZpZGVyc1thdHRyXTtcbiAgICAgICAgaWYgKCFwIHx8IHAuaW5wdXQgJiYgIWlucHV0KSByZXR1cm47XG5cbiAgICAgICAgdmFyIF90eXBlO1xuXG4gICAgICAgIGlmICghcC5fYykge1xuICAgICAgICAgIF90eXBlID0gJyonO1xuICAgICAgICB9IGVsc2UgaWYgKHAuX3VzZWQuaW5kZXhPZih0eXBlKSA+IC0xKSB7XG4gICAgICAgICAgX3R5cGUgPSB0eXBlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkYXRhID0gX29iamVjdFNwcmVhZDIoe1xuICAgICAgICAgIHZhbHVlOiBlZmZlY3RbYXR0cl0sXG4gICAgICAgICAgZ2V0VmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzNC5nZXRFZmZlY3QocnVsZSwgYXR0cik7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBhcHBlbmQgfHwge30pO1xuXG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICBkYXRhLmdldFByb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4LmVmZmVjdERhdGEoYXR0cik7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGRhdGEuY2xlYXJQcm9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5jbGVhckVmZmVjdERhdGEoYXR0cik7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGRhdGEubWVyZ2VQcm9wID0gZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBtZXJnZVJ1bGUoZGF0YS5nZXRQcm9wKCksIFtwcm9wXSk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGRhdGEuaWQgPSBjdHguaWQ7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczQuYnVzLiRlbWl0KFwicDpcIi5jb25jYXQoYXR0ciwgXCI6XCIpLmNvbmNhdChfdHlwZSwgXCI6XCIpLmNvbmNhdChwLmlucHV0ID8gMSA6IDApLCBldmVudCwgW2RhdGEsIHJ1bGUsIF90aGlzNC5hcGldKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHVuaXF1ZShhcnIpIHtcbiAgcmV0dXJuIGFyci5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0sIGluZGV4LCBhcnIpIHtcbiAgICByZXR1cm4gYXJyLmluZGV4T2YoaXRlbSwgMCkgPT09IGluZGV4O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50KHApIHtcbiAgdmFyIGMgPSBwLmNvbXBvbmVudHM7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICB2YXIgYXJyID0gdW5pcXVlKGMuZmlsdGVyKGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gdiAhPT0gJyonO1xuICAgIH0pKTtcbiAgICByZXR1cm4gYXJyLmxlbmd0aCA/IGFyciA6IGZhbHNlO1xuICB9IGVsc2UgaWYgKGlzLlN0cmluZyhjKSkgcmV0dXJuIFtjXTtlbHNlIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gSGFuZGxlcihmYykge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIGZ1bmNQcm94eSh0aGlzLCB7XG4gICAgb3B0aW9uczogZnVuY3Rpb24gb3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBmYy5vcHRpb25zLnZhbHVlIHx8IHt9O1xuICAgIH0sXG4gICAgYnVzOiBmdW5jdGlvbiBidXMoKSB7XG4gICAgICByZXR1cm4gZmMuYnVzO1xuICAgIH1cbiAgfSk7XG4gIGV4dGVuZCh0aGlzLCB7XG4gICAgZmM6IGZjLFxuICAgIHZtOiBmYy52bSxcbiAgICB3YXRjaGluZzogZmFsc2UsXG4gICAgbG9hZGluZzogZmFsc2UsXG4gICAgcmVsb2FkaW5nOiBmYWxzZSxcbiAgICBub1dhdGNoRm46IG51bGwsXG4gICAgZGVmZXJTeW5jRm46IG51bGwsXG4gICAgaXNNb3VudGVkOiBmYWxzZSxcbiAgICBmb3JtRGF0YTogcmVhY3RpdmUoe30pLFxuICAgIHN1YlJ1bGVEYXRhOiByZWFjdGl2ZSh7fSksXG4gICAgc3ViRm9ybToge30sXG4gICAgZm9ybTogcmVhY3RpdmUoe30pLFxuICAgIGFwcGVuZERhdGE6IHt9LFxuICAgIHByb3ZpZGVyczoge30sXG4gICAgY3ljbGVMb2FkOiBudWxsLFxuICAgIGxvYWRlZElkOiAxLFxuICAgIG5leHRUaWNrOiBudWxsLFxuICAgIGNoYW5nZVN0YXR1czogZmFsc2UsXG4gICAgcGFnZUVuZDogdHJ1ZSxcbiAgICBuZXh0UmVsb2FkOiBmdW5jdGlvbiBuZXh0UmVsb2FkKCkge1xuICAgICAgX3RoaXMubGlmZWN5Y2xlKCdyZWxvYWQnKTtcbiAgICB9XG4gIH0pO1xuICB0aGlzLmluaXREYXRhKGZjLnJ1bGVzKTtcbiAgdGhpcy4kbWFuYWdlciA9IG5ldyBmYy5tYW5hZ2VyKHRoaXMpO1xuICB0aGlzLiRyZW5kZXIgPSBuZXcgUmVuZGVyKHRoaXMpO1xuICB0aGlzLmFwaSA9IGZjLmV4dGVuZEFwaUZuLnJlZHVjZShmdW5jdGlvbiAoYXBpLCBmbikge1xuICAgIGV4dGVuZChhcGksIGludm9rZShmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZm4oYXBpLCBfdGhpcyk7XG4gICAgfSwge30pKTtcbiAgICByZXR1cm4gYXBpO1xuICB9LCBBcGkodGhpcykpO1xufVxuZXh0ZW5kKEhhbmRsZXIucHJvdG90eXBlLCB7XG4gIGluaXREYXRhOiBmdW5jdGlvbiBpbml0RGF0YShydWxlcykge1xuICAgIGV4dGVuZCh0aGlzLCB7XG4gICAgICBjdHhzOiB7fSxcbiAgICAgIGZpZWxkQ3R4OiB7fSxcbiAgICAgIG5hbWVDdHg6IHt9LFxuICAgICAgc29ydDogW10sXG4gICAgICBydWxlczogcnVsZXNcbiAgICB9KTtcbiAgfSxcbiAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB0aGlzLmFwcGVuZERhdGEgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgdGhpcy5vcHRpb25zLmZvcm1EYXRhIHx8IHt9KSwgdGhpcy5mYy52bS5wcm9wcy5tb2RlbFZhbHVlIHx8IHt9KSwgdGhpcy5hcHBlbmREYXRhKTtcbiAgICB0aGlzLnVzZVByb3ZpZGVyKCk7XG4gICAgdGhpcy51c2VQYWdlKCk7XG4gICAgdGhpcy5sb2FkUnVsZSgpO1xuXG4gICAgdGhpcy4kbWFuYWdlci5fX2luaXQoKTtcblxuICAgIHRoaXMubGlmZWN5Y2xlKCdjcmVhdGVkJyk7XG4gIH0sXG4gIGlzQnJlYWtXYXRjaDogZnVuY3Rpb24gaXNCcmVha1dhdGNoKCkge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmcgfHwgdGhpcy5ub1dhdGNoRm4gfHwgdGhpcy5yZWxvYWRpbmc7XG4gIH0sXG4gIGJlZm9yZUZldGNoOiBmdW5jdGlvbiBiZWZvcmVGZXRjaChvcHQpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgdmFyIHNvdXJjZSA9IF90aGlzMi5vcHRpb25zLmJlZm9yZUZldGNoICYmIGludm9rZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIub3B0aW9ucy5iZWZvcmVGZXRjaChvcHQsIHtcbiAgICAgICAgICBhcGk6IF90aGlzMi5hcGlcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHNvdXJjZSAmJiBpcy5GdW5jdGlvbihzb3VyY2UudGhlbikpIHtcbiAgICAgICAgc291cmNlLnRoZW4ocmVzb2x2ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0pO1xudXNlSW5qZWN0KEhhbmRsZXIpO1xudXNlUGFnZShIYW5kbGVyKTtcbnVzZVJlbmRlcihIYW5kbGVyKTtcbnVzZUxvYWRlcihIYW5kbGVyKTtcbnVzZUlucHV0KEhhbmRsZXIpO1xudXNlQ29udGV4dChIYW5kbGVyKTtcbnVzZUxpZmVjeWNsZShIYW5kbGVyKTtcbnVzZUVmZmVjdChIYW5kbGVyKTtcblxudmFyIE5BTUUgPSAnZmNGcmFnbWVudCc7XG52YXIgZnJhZ21lbnQgPSBkZWZpbmVDb21wb25lbnQoe1xuICBuYW1lOiBOQU1FLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuICBwcm9wczogWyd2bm9kZSddLFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy52bm9kZTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHRpZHlEaXJlY3RpdmVzKGRpcmVjdGl2ZXMpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGRpcmVjdGl2ZXMpLm1hcChmdW5jdGlvbiAobikge1xuICAgIHZhciBkYXRhID0gZGlyZWN0aXZlc1tuXTtcbiAgICB2YXIgZGlyZWN0aXZlID0gcmVzb2x2ZURpcmVjdGl2ZShuKTtcbiAgICBpZiAoIWRpcmVjdGl2ZSkgcmV0dXJuO1xuICAgIHJldHVybiBbZGlyZWN0aXZlLCBkYXRhLnZhbHVlLCBkYXRhLmFyZywgZGF0YS5tb2RpZmllcnNdO1xuICB9KS5maWx0ZXIoZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gISF2O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFrZURpcmVjdGl2ZShkYXRhLCB2bikge1xuICB2YXIgZGlyZWN0aXZlcyA9IGRhdGEuZGlyZWN0aXZlcztcbiAgaWYgKCFkaXJlY3RpdmVzKSByZXR1cm4gdm47XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGRpcmVjdGl2ZXMpKSB7XG4gICAgZGlyZWN0aXZlcyA9IFtkaXJlY3RpdmVzXTtcbiAgfVxuXG4gIHJldHVybiB3aXRoRGlyZWN0aXZlcyh2biwgZGlyZWN0aXZlcy5yZWR1Y2UoZnVuY3Rpb24gKGxzdCwgdikge1xuICAgIHJldHVybiBsc3QuY29uY2F0KHRpZHlEaXJlY3RpdmVzKHYpKTtcbiAgfSwgW10pKTtcbn1cblxuZnVuY3Rpb24gQ3JlYXRlTm9kZUZhY3RvcnkoKSB7XG4gIHZhciBhbGlhc01hcCA9IHt9O1xuXG4gIGZ1bmN0aW9uIENyZWF0ZU5vZGUoKSB7fVxuXG4gIGV4dGVuZChDcmVhdGVOb2RlLnByb3RvdHlwZSwge1xuICAgIG1ha2U6IGZ1bmN0aW9uIG1ha2UodGFnLCBkYXRhLCBjaGlsZHJlbikge1xuICAgICAgcmV0dXJuIG1ha2VEaXJlY3RpdmUoZGF0YSwgdGhpcy5oKHRhZywgdG9Qcm9wcyhkYXRhKSwgY2hpbGRyZW4pKTtcbiAgICB9LFxuICAgIG1ha2VDb21wb25lbnQ6IGZ1bmN0aW9uIG1ha2VDb21wb25lbnQodHlwZSwgZGF0YSwgY2hpbGRyZW4pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtYWtlRGlyZWN0aXZlKGRhdGEsIGNyZWF0ZVZOb2RlKHR5cGUsIHRvUHJvcHMoZGF0YSksIGNoaWxkcmVuKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVWTm9kZSgnJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoOiBmdW5jdGlvbiBoKHRhZywgZGF0YSwgY2hpbGRyZW4pIHtcbiAgICAgIHZhciBpc05hdGl2ZVRhZyA9IGdldEN1cnJlbnRJbnN0YW5jZSgpLmFwcENvbnRleHQuY29uZmlnLmlzTmF0aXZlVGFnKHRhZyk7XG5cbiAgICAgIGlmIChpc05hdGl2ZVRhZykge1xuICAgICAgICBkZWxldGUgZGF0YS5mb3JtQ3JlYXRlSW5qZWN0O1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gY3JlYXRlVk5vZGUoaXNOYXRpdmVUYWcgPyB0YWcgOiByZXNvbHZlQ29tcG9uZW50KHRhZyksIGRhdGEsIGNoaWxkcmVuKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVZOb2RlKCcnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFsaWFzTWFwOiBhbGlhc01hcFxuICB9KTtcbiAgZXh0ZW5kKENyZWF0ZU5vZGUsIHtcbiAgICBhbGlhc01hcDogYWxpYXNNYXAsXG4gICAgYWxpYXM6IGZ1bmN0aW9uIGFsaWFzKF9hbGlhcywgbmFtZSkge1xuICAgICAgYWxpYXNNYXBbX2FsaWFzXSA9IG5hbWU7XG4gICAgfSxcbiAgICB1c2U6IGZ1bmN0aW9uIHVzZShub2Rlcykge1xuICAgICAgT2JqZWN0LmtleXMobm9kZXMpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgdmFyIGxpbmUgPSB0b0xpbmUoayk7XG4gICAgICAgIHZhciBsb3dlciA9IHRvU3RyaW5nKGspLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciB2ID0gbm9kZXNba107XG4gICAgICAgIFtrLCBsaW5lLCBsb3dlcl0uZm9yRWFjaChmdW5jdGlvbiAobikge1xuICAgICAgICAgIENyZWF0ZU5vZGUuYWxpYXMoaywgdik7XG5cbiAgICAgICAgICBDcmVhdGVOb2RlLnByb3RvdHlwZVtuXSA9IGZ1bmN0aW9uIChkYXRhLCBjaGlsZHJlbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZSh2LCBkYXRhLCBjaGlsZHJlbik7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gQ3JlYXRlTm9kZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWFuYWdlcihwcm90bykge1xuICB2YXIgQ3VzdG9tTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX01hbmFnZXIpIHtcbiAgICBfaW5oZXJpdHMoQ3VzdG9tTWFuYWdlciwgX01hbmFnZXIpO1xuXG4gICAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihDdXN0b21NYW5hZ2VyKTtcblxuICAgIGZ1bmN0aW9uIEN1c3RvbU1hbmFnZXIoKSB7XG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ3VzdG9tTWFuYWdlcik7XG5cbiAgICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQ3VzdG9tTWFuYWdlcjtcbiAgfShNYW5hZ2VyKTtcblxuICBPYmplY3QuYXNzaWduKEN1c3RvbU1hbmFnZXIucHJvdG90eXBlLCBwcm90byk7XG4gIHJldHVybiBDdXN0b21NYW5hZ2VyO1xufVxuZnVuY3Rpb24gTWFuYWdlcihoYW5kbGVyKSB7XG4gIGV4dGVuZCh0aGlzLCB7XG4gICAgJGhhbmRsZTogaGFuZGxlcixcbiAgICB2bTogaGFuZGxlci52bSxcbiAgICBvcHRpb25zOiB7fSxcbiAgICByZWY6ICdmY0Zvcm0nLFxuICAgIG1lcmdlT3B0aW9uc1J1bGU6IHtcbiAgICAgIG5vcm1hbDogWydmb3JtJywgJ3JvdycsICdpbmZvJywgJ3N1Ym1pdEJ0bicsICdyZXNldEJ0biddXG4gICAgfVxuICB9KTtcbiAgdGhpcy51cGRhdGVLZXkoKTtcbiAgdGhpcy5pbml0KCk7XG59XG5leHRlbmQoTWFuYWdlci5wcm90b3R5cGUsIHtcbiAgX19pbml0OiBmdW5jdGlvbiBfX2luaXQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuJHJlbmRlciA9IHRoaXMuJGhhbmRsZS4kcmVuZGVyO1xuXG4gICAgdGhpcy4kciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyQkcmVuZGVyO1xuXG4gICAgICByZXR1cm4gKF90aGlzJCRyZW5kZXIgPSBfdGhpcy4kcmVuZGVyKS5yZW5kZXJSdWxlLmFwcGx5KF90aGlzJCRyZW5kZXIsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfSxcbiAgdXBkYXRlS2V5OiBmdW5jdGlvbiB1cGRhdGVLZXkoKSB7XG4gICAgdGhpcy5rZXkgPSB1bmlxdWVJZCgpO1xuICB9LFxuICAvL1RPRE8gaW50ZXJmYWNlXG4gIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7fSxcbiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7fSxcbiAgYmVmb3JlUmVuZGVyOiBmdW5jdGlvbiBiZWZvcmVSZW5kZXIoKSB7fSxcbiAgZm9ybTogZnVuY3Rpb24gZm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy52bS5yZWZzW3RoaXMucmVmXTtcbiAgfSxcbiAgZ2V0U2xvdDogZnVuY3Rpb24gZ2V0U2xvdChuYW1lKSB7XG4gICAgdmFyIF9mbiA9IGZ1bmN0aW9uIF9mbih2bSkge1xuICAgICAgaWYgKHZtKSB7XG4gICAgICAgIHZhciBzbG90ID0gdm0uc2xvdHNbbmFtZV07XG5cbiAgICAgICAgaWYgKHNsb3QpIHtcbiAgICAgICAgICByZXR1cm4gc2xvdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfZm4odm0uc2V0dXBTdGF0ZS5wYXJlbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICByZXR1cm4gX2ZuKHRoaXMudm0pO1xuICB9LFxuICBtZXJnZU9wdGlvbnM6IGZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhhcmdzLCBvcHQpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBtZXJnZVByb3BzKGFyZ3MubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gX3RoaXMyLnRpZHlPcHRpb25zKHYpO1xuICAgIH0pLCBvcHQsIHRoaXMubWVyZ2VPcHRpb25zUnVsZSk7XG4gIH0sXG4gIHVwZGF0ZU9wdGlvbnM6IGZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMuJGhhbmRsZS5mYy50YXJnZXRGb3JtRHJpdmVyKCd1cGRhdGVPcHRpb25zJywgb3B0aW9ucywge1xuICAgICAgaGFuZGxlOiB0aGlzLiRoYW5kbGUsXG4gICAgICBhcGk6IHRoaXMuJGhhbmRsZS5hcGlcbiAgICB9KTtcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLm1lcmdlT3B0aW9ucyhbb3B0aW9uc10sIHRoaXMuZ2V0RGVmYXVsdE9wdGlvbnMoKSk7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfSxcbiAgdGlkeU9wdGlvbnM6IGZ1bmN0aW9uIHRpZHlPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfSxcbiAgdGlkeVJ1bGU6IGZ1bmN0aW9uIHRpZHlSdWxlKGN0eCkge30sXG4gIG1lcmdlUHJvcDogZnVuY3Rpb24gbWVyZ2VQcm9wKGN0eCkge30sXG4gIGdldERlZmF1bHRPcHRpb25zOiBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgICByZXR1cm4ge307XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGNoaWxkcmVuKSB7fVxufSk7XG5cbnZhciBsb2FkRGF0YSA9IGZ1bmN0aW9uIGxvYWREYXRhKGZjKSB7XG4gIHZhciBsb2FkRGF0YSA9IHtcbiAgICBuYW1lOiAnbG9hZERhdGEnLFxuICAgIF9mbjogW10sXG4gICAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZChpbmplY3QsIHJ1bGUsIGFwaSkge1xuICAgICAgdGhpcy5kZWxldGVkKGluamVjdCk7XG4gICAgICB2YXIgYXR0cnMgPSB0b0FycmF5KGluamVjdC5nZXRWYWx1ZSgpKTtcbiAgICAgIHZhciB1bndhdGNocyA9IFtdO1xuICAgICAgYXR0cnMuZm9yRWFjaChmdW5jdGlvbiAoYXR0cikge1xuICAgICAgICBpZiAoYXR0ciAmJiAoYXR0ci5hdHRyIHx8IGF0dHIudGVtcGxhdGUpKSB7XG4gICAgICAgICAgdmFyIHVud2F0Y2ggPSBmYy53YXRjaExvYWREYXRhKGRlYm91bmNlKGZ1bmN0aW9uIChnZXQpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKGF0dHIudGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBmYy4kaGFuZGxlLmxvYWRTdHJWYXIoYXR0ci50ZW1wbGF0ZSwgZ2V0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gZ2V0KGF0dHIuYXR0ciwgYXR0cltcImRlZmF1bHRcIl0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYXR0ci5jb3B5ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IGRlZXBDb3B5KHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIF9ydWxlID0gYXR0ci5tb2RpZnkgPyBydWxlIDogaW5qZWN0LmdldFByb3AoKTtcblxuICAgICAgICAgICAgaWYgKGF0dHIudG8gPT09ICdjaGlsZCcpIHtcbiAgICAgICAgICAgICAgaWYgKF9ydWxlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgX3J1bGUuY2hpbGRyZW5bMF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfcnVsZS5jaGlsZHJlbiA9IFt2YWx1ZV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlZXBTZXQoX3J1bGUsIGF0dHIudG8gfHwgJ29wdGlvbnMnLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwaS5zeW5jKHJ1bGUpO1xuICAgICAgICAgIH0sIGF0dHIud2FpdCB8fCAzMDApKTtcblxuICAgICAgICAgIGlmIChhdHRyLndhdGNoICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdW53YXRjaHMucHVzaCh1bndhdGNoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW53YXRjaCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9mbltpbmplY3QuaWRdID0gdW53YXRjaHM7XG4gICAgfSxcbiAgICBkZWxldGVkOiBmdW5jdGlvbiBkZWxldGVkKGluamVjdCkge1xuICAgICAgaWYgKHRoaXMuX2ZuW2luamVjdC5pZF0pIHtcbiAgICAgICAgdGhpcy5fZm5baW5qZWN0LmlkXS5mb3JFYWNoKGZ1bmN0aW9uICh1bikge1xuICAgICAgICAgIHVuKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpbmplY3QuY2xlYXJQcm9wKCk7XG4gICAgfVxuICB9O1xuICBsb2FkRGF0YS53YXRjaCA9IGxvYWREYXRhLmNyZWF0ZWQ7XG4gIHJldHVybiBsb2FkRGF0YTtcbn07XG5cbnZhciBjb21wb25lbnRWYWxpZGF0ZSA9IHtcbiAgbmFtZTogJ2NvbXBvbmVudFZhbGlkYXRlJyxcbiAgbG9hZDogZnVuY3Rpb24gbG9hZChhdHRyLCBydWxlLCBhcGkpIHtcbiAgICB2YXIgbWV0aG9kID0gYXR0ci5nZXRWYWx1ZSgpO1xuXG4gICAgaWYgKCFtZXRob2QpIHtcbiAgICAgIGF0dHIuY2xlYXJQcm9wKCk7XG4gICAgICBhcGkuY2xlYXJWYWxpZGF0ZVN0YXRlKFtydWxlLmZpZWxkXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHIuZ2V0UHJvcCgpLnZhbGlkYXRlID0gW3tcbiAgICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IoKSB7XG4gICAgICAgICAgdmFyIGN0eCA9IGJ5Q3R4KHJ1bGUpO1xuXG4gICAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBhcGkuZXhlYy5hcHBseShhcGksIFtjdHguaWQsIG1ldGhvZCA9PT0gdHJ1ZSA/ICdmb3JtQ3JlYXRlVmFsaWRhdGUnIDogbWV0aG9kXS5jb25jYXQoYXJncywgW3tcbiAgICAgICAgICAgICAgYXR0cjogYXR0cixcbiAgICAgICAgICAgICAgcnVsZTogcnVsZSxcbiAgICAgICAgICAgICAgYXBpOiBhcGlcbiAgICAgICAgICAgIH1dKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XTtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiBmdW5jdGlvbiB3YXRjaCgpIHtcbiAgICBjb21wb25lbnRWYWxpZGF0ZS5sb2FkLmFwcGx5KGNvbXBvbmVudFZhbGlkYXRlLCBhcmd1bWVudHMpO1xuICB9XG59O1xuXG52YXIgZmV0Y2ggPSBmdW5jdGlvbiBmZXRjaChmYykge1xuICBmdW5jdGlvbiBwYXJzZU9wdChvcHRpb24pIHtcbiAgICBpZiAoaXMuU3RyaW5nKG9wdGlvbikpIHtcbiAgICAgIG9wdGlvbiA9IHtcbiAgICAgICAgYWN0aW9uOiBvcHRpb24sXG4gICAgICAgIHRvOiAnb3B0aW9ucydcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJ1bihpbmplY3QsIHJ1bGUsIGFwaSkge1xuICAgIHZhciBvcHRpb24gPSBpbmplY3QudmFsdWU7XG4gICAgZmV0Y2hBdHRyLmRlbGV0ZWQoaW5qZWN0KTtcblxuICAgIGlmIChpcy5GdW5jdGlvbihvcHRpb24pKSB7XG4gICAgICBvcHRpb24gPSBvcHRpb24ocnVsZSwgYXBpKTtcbiAgICB9XG5cbiAgICBvcHRpb24gPSBwYXJzZU9wdChvcHRpb24pO1xuXG4gICAgdmFyIHNldCA9IGZ1bmN0aW9uIHNldCh2YWwpIHtcbiAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpbmplY3QuY2xlYXJQcm9wKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWVwU2V0KGluamVjdC5nZXRQcm9wKCksIG9wdGlvbi50byB8fCAnb3B0aW9ucycsIHZhbCk7XG4gICAgICB9XG5cbiAgICAgIGFwaS5zeW5jKHJ1bGUpO1xuICAgIH07XG5cbiAgICBpZiAoIW9wdGlvbiB8fCAhb3B0aW9uLmFjdGlvbiAmJiAhb3B0aW9uLmtleSkge1xuICAgICAgc2V0KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3B0aW9uID0gZGVlcENvcHkob3B0aW9uKTtcblxuICAgIGlmICghb3B0aW9uLnRvKSB7XG4gICAgICBvcHRpb24udG8gPSAnb3B0aW9ucyc7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbi5rZXkpIHtcbiAgICAgIHZhciBpdGVtID0gZmMuJGhhbmRsZS5vcHRpb25zLmdsb2JhbERhdGFbb3B0aW9uLmtleV07XG5cbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICBzZXQodW5kZWZpbmVkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbS50eXBlID09PSAnc3RhdGljJykge1xuICAgICAgICBzZXQoaXRlbS5kYXRhKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9uID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG9wdGlvbiksIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBfb25FcnJvciA9IG9wdGlvbi5vbkVycm9yO1xuXG4gICAgdmFyIGNoZWNrID0gZnVuY3Rpb24gY2hlY2soKSB7XG4gICAgICBpZiAoIWluamVjdC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgIGluamVjdC5jbGVhclByb3AoKTtcbiAgICAgICAgYXBpLnN5bmMocnVsZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmZXRjaEF0dHIuX2ZuW2luamVjdC5pZF0gPSBmYy53YXRjaExvYWREYXRhKGRlYm91bmNlKGZ1bmN0aW9uIChnZXQsIGNoYW5nZSkge1xuICAgICAgaWYgKGNoYW5nZSAmJiBvcHRpb24ud2F0Y2ggPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmZXRjaEF0dHIuX2ZuW2luamVjdC5pZF0oKTtcbiAgICAgIH1cblxuICAgICAgdmFyIF9vcHRpb24gPSBmYy4kaGFuZGxlLmxvYWRGZXRjaFZhcihkZWVwQ29weShvcHRpb24pLCBnZXQpO1xuXG4gICAgICB2YXIgY29uZmlnID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe1xuICAgICAgICBoZWFkZXJzOiB7fVxuICAgICAgfSwgX29wdGlvbiksIHt9LCB7XG4gICAgICAgIG9uU3VjY2VzczogZnVuY3Rpb24gb25TdWNjZXNzKGJvZHksIGZsYWcpIHtcbiAgICAgICAgICBpZiAoY2hlY2soKSkgcmV0dXJuO1xuXG4gICAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gZm4odikge1xuICAgICAgICAgICAgcmV0dXJuIGZsYWcgPyB2IDogaGFzUHJvcGVydHkodiwgJ2RhdGEnKSA/IHYuZGF0YSA6IHY7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHZhciBwYXJzZSA9IHBhcnNlRm4oX29wdGlvbi5wYXJzZSk7XG5cbiAgICAgICAgICBpZiAoaXMuRnVuY3Rpb24ocGFyc2UpKSB7XG4gICAgICAgICAgICBmbiA9IHBhcnNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2UgJiYgaXMuU3RyaW5nKHBhcnNlKSkge1xuICAgICAgICAgICAgZm4gPSBmdW5jdGlvbiBmbih2KSB7XG4gICAgICAgICAgICAgIHJldHVybiBkZWVwR2V0KHYsIHBhcnNlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2V0KGZuKGJvZHksIHJ1bGUsIGFwaSkpO1xuICAgICAgICAgIGFwaS5zeW5jKHJ1bGUpO1xuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yOiBmdW5jdGlvbiBvbkVycm9yKGUpIHtcbiAgICAgICAgICBzZXQodW5kZWZpbmVkKTtcbiAgICAgICAgICBpZiAoY2hlY2soKSkgcmV0dXJuO1xuXG4gICAgICAgICAgKF9vbkVycm9yIHx8IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyKGUubWVzc2FnZSB8fCAnZmV0Y2ggZmFpbCAnICsgX29wdGlvbi5hY3Rpb24pO1xuICAgICAgICAgIH0pKGUsIHJ1bGUsIGFwaSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmYy4kaGFuZGxlLmJlZm9yZUZldGNoKGNvbmZpZywge1xuICAgICAgICBydWxlOiBydWxlLFxuICAgICAgICBhcGk6IGFwaVxuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpcy5GdW5jdGlvbihfb3B0aW9uLmFjdGlvbikpIHtcbiAgICAgICAgICBfb3B0aW9uLmFjdGlvbihydWxlLCBhcGkpLnRoZW4oZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgY29uZmlnLm9uU3VjY2Vzcyh2YWwsIHRydWUpO1xuICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGNvbmZpZy5vbkVycm9yKGUpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW52b2tlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZmMuY3JlYXRlLmZldGNoKGNvbmZpZywge1xuICAgICAgICAgICAgaW5qZWN0OiBpbmplY3QsXG4gICAgICAgICAgICBydWxlOiBydWxlLFxuICAgICAgICAgICAgYXBpOiBhcGlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCBvcHRpb24ud2FpdCB8fCA2MDApKTtcbiAgfVxuXG4gIHZhciBmZXRjaEF0dHIgPSB7XG4gICAgbmFtZTogJ2ZldGNoJyxcbiAgICBfZm46IFtdLFxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgICBydW4uYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgd2F0Y2g6IGZ1bmN0aW9uIHdhdGNoKCkge1xuICAgICAgcnVuLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGRlbGV0ZWQ6IGZ1bmN0aW9uIGRlbGV0ZWQoaW5qZWN0KSB7XG4gICAgICBpZiAodGhpcy5fZm5baW5qZWN0LmlkXSkge1xuICAgICAgICB0aGlzLl9mbltpbmplY3QuaWRdKCk7XG4gICAgICB9XG5cbiAgICAgIGluamVjdC5jbGVhclByb3AoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBmZXRjaEF0dHI7XG59O1xuXG52YXIgJHByb3ZpZGVyID0ge1xuICBmZXRjaDogZmV0Y2gsXG4gIGxvYWREYXRhOiBsb2FkRGF0YSxcbiAgY29tcG9uZW50VmFsaWRhdGU6IGNvbXBvbmVudFZhbGlkYXRlXG59O1xuXG52YXIgbmFtZSQ2ID0gJ2h0bWwnO1xudmFyIGh0bWwgPSB7XG4gIG5hbWU6IG5hbWUkNixcbiAgbG9hZENoaWxkcmVuOiBmYWxzZSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoY2hpbGRyZW4sIGN0eCkge1xuICAgIGN0eC5wcm9wLnByb3BzLmlubmVySFRNTCA9IGNoaWxkcmVuW1wiZGVmYXVsdFwiXSgpO1xuICAgIHJldHVybiBjdHgudk5vZGUubWFrZShjdHgucHJvcC5wcm9wcy50YWcgfHwgJ2RpdicsIGN0eC5wcm9wKTtcbiAgfSxcbiAgcmVuZGVyQ2hpbGRyZW46IGZ1bmN0aW9uIHJlbmRlckNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAodikge1xuICAgICAgICAgIHJldHVybiBpcy5TdHJpbmcodik7XG4gICAgICAgIH0pLmpvaW4oJycpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldENvb2tpZShuYW1lKSB7XG4gIG5hbWUgPSBuYW1lICsgJz0nO1xuICB2YXIgZGVjb2RlZENvb2tpZSA9IGRlY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5jb29raWUpO1xuICB2YXIgY29va2llQXJyYXkgPSBkZWNvZGVkQ29va2llLnNwbGl0KCc7Jyk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb29raWVBcnJheS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjb29raWUgPSBjb29raWVBcnJheVtpXTtcblxuICAgIHdoaWxlIChjb29raWUuY2hhckF0KDApID09PSAnICcpIHtcbiAgICAgIGNvb2tpZSA9IGNvb2tpZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgaWYgKGNvb2tpZS5pbmRleE9mKG5hbWUpID09PSAwKSB7XG4gICAgICBjb29raWUgPSBjb29raWUuc3Vic3RyaW5nKG5hbWUubGVuZ3RoLCBjb29raWUubGVuZ3RoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoY29va2llKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGNvb2tpZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0TG9jYWxTdG9yYWdlKG5hbWUpIHtcbiAgdmFyIHZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG5cbiAgaWYgKHZhbHVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGJhc2VEcml2ZXIoZHJpdmVyLCBuYW1lKSB7XG4gIGlmICghbmFtZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHNwbGl0ID0gbmFtZS5zcGxpdCgnLicpO1xuICB2YXIgdmFsdWUgPSBkcml2ZXIoc3BsaXQuc2hpZnQoKSk7XG5cbiAgaWYgKCFzcGxpdC5sZW5ndGgpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGRlZXBHZXQodmFsdWUsIHNwbGl0KTtcbn1cbmZ1bmN0aW9uIGNvb2tpZURyaXZlcihuYW1lKSB7XG4gIHJldHVybiBiYXNlRHJpdmVyKGdldENvb2tpZSwgbmFtZSk7XG59XG5mdW5jdGlvbiBsb2NhbFN0b3JhZ2VEcml2ZXIobmFtZSkge1xuICByZXR1cm4gYmFzZURyaXZlcihnZXRMb2NhbFN0b3JhZ2UsIG5hbWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVByb3AobmFtZSwgaWQpIHtcbiAgdmFyIHByb3A7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBwcm9wID0gYXJndW1lbnRzWzFdO1xuICAgIGlkID0gcHJvcFtuYW1lXTtcbiAgfSBlbHNlIHtcbiAgICBwcm9wID0gYXJndW1lbnRzWzJdO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogaWQsXG4gICAgcHJvcDogcHJvcFxuICB9O1xufVxuXG5mdW5jdGlvbiBuYW1lUHJvcCgpIHtcbiAgcmV0dXJuIHBhcnNlUHJvcC5hcHBseSh2b2lkIDAsIFsnbmFtZSddLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG59XG5cbmZ1bmN0aW9uIGV4cG9ydEF0dHJzKGF0dHJzKSB7XG4gIHZhciBrZXkgPSBhdHRycy5rZXkgfHwgW107XG4gIHZhciBhcnJheSA9IGF0dHJzLmFycmF5IHx8IFtdO1xuICB2YXIgbm9ybWFsID0gYXR0cnMubm9ybWFsIHx8IFtdO1xuICBrZXlBdHRycy5wdXNoLmFwcGx5KGtleUF0dHJzLCBfdG9Db25zdW1hYmxlQXJyYXkoa2V5KSk7XG4gIGFycmF5QXR0cnMucHVzaC5hcHBseShhcnJheUF0dHJzLCBfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTtcbiAgbm9ybWFsQXR0cnMucHVzaC5hcHBseShub3JtYWxBdHRycywgX3RvQ29uc3VtYWJsZUFycmF5KG5vcm1hbCkpO1xuICBhcHBlbmRQcm90byhbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGtleSksIF90b0NvbnN1bWFibGVBcnJheShhcnJheSksIF90b0NvbnN1bWFibGVBcnJheShub3JtYWwpKSk7XG59XG5cbnZhciBpZCA9IDE7XG52YXIgaW5zdGFuY2UgPSB7fTsgLy90b2RvIOihqOWNleW1jOWll1xuXG5mdW5jdGlvbiBGb3JtQ3JlYXRlRmFjdG9yeShjb25maWcpIHtcbiAgdmFyIGNvbXBvbmVudHMgPSBfZGVmaW5lUHJvcGVydHkoe30sIGZyYWdtZW50Lm5hbWUsIGZyYWdtZW50KTtcblxuICB2YXIgcGFyc2VycyA9IHt9O1xuICB2YXIgZGlyZWN0aXZlcyA9IHt9O1xuICB2YXIgbW9kZWxGaWVsZHMgPSB7fTtcbiAgdmFyIGRyaXZlcnMgPSB7fTtcbiAgdmFyIHVzZUFwcHMgPSBbXTtcbiAgdmFyIGxpc3RlbmVyID0gW107XG4gIHZhciBleHRlbmRBcGlGbiA9IFtjb25maWcuZXh0ZW5kQXBpXTtcblxuICB2YXIgcHJvdmlkZXJzID0gX29iamVjdFNwcmVhZDIoe30sICRwcm92aWRlcik7XG5cbiAgdmFyIG1ha2VyID0gbWFrZXJGYWN0b3J5KCk7XG4gIHZhciBnbG9iYWxDb25maWcgPSB7XG4gICAgZ2xvYmFsOiB7fVxuICB9O1xuICB2YXIgbG9hZERhdGEgPSByZWFjdGl2ZSh7fSk7XG4gIHZhciBDcmVhdGVOb2RlID0gQ3JlYXRlTm9kZUZhY3RvcnkoKTtcbiAgdmFyIGZvcm11bGFzID0ge307XG4gIHZhciBpc01vYmlsZSA9IGNvbmZpZy5pc01vYmlsZSA9PT0gdHJ1ZTtcbiAgZXhwb3J0QXR0cnMoY29uZmlnLmF0dHJzIHx8IHt9KTtcblxuICBmdW5jdGlvbiBnZXRBcGkobmFtZSkge1xuICAgIHZhciB2YWwgPSBpbnN0YW5jZVtuYW1lXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIHJldHVybiB2YWwubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiB2LmFwaSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh2YWwpIHtcbiAgICAgIHJldHVybiB2YWwuYXBpKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXNlQXBwKGZuKSB7XG4gICAgdXNlQXBwcy5wdXNoKGZuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpcmVjdGl2ZSgpIHtcbiAgICB2YXIgZGF0YSA9IG5hbWVQcm9wLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICBpZiAoZGF0YS5pZCAmJiBkYXRhLnByb3ApIGRpcmVjdGl2ZXNbZGF0YS5pZF0gPSBkYXRhLnByb3A7XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlcigpIHtcbiAgICB2YXIgZGF0YSA9IG5hbWVQcm9wLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICBpZiAoZGF0YS5pZCAmJiBkYXRhLnByb3ApIHByb3ZpZGVyc1tkYXRhLmlkXSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBkYXRhLnByb3ApLCB7fSwge1xuICAgICAgbmFtZTogZGF0YS5pZFxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcG9uZW50QWxpYXMoYWxpYXMpIHtcbiAgICBDcmVhdGVOb2RlLnVzZShhbGlhcyk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZXIoKSB7XG4gICAgdmFyIGRhdGEgPSBuYW1lUHJvcC5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgaWYgKCFkYXRhLmlkIHx8ICFkYXRhLnByb3ApIHJldHVybiBCYXNlUGFyc2VyO1xuICAgIHZhciBuYW1lID0gdG9DYXNlKGRhdGEuaWQpO1xuICAgIHZhciBwYXJzZXIgPSBkYXRhLnByb3A7XG4gICAgdmFyIGJhc2UgPSBwYXJzZXIubWVyZ2UgPT09IHRydWUgPyBwYXJzZXJzW25hbWVdIDogdW5kZWZpbmVkO1xuICAgIHBhcnNlcnNbbmFtZV0gPSBzZXRQcm90b3R5cGVPZihwYXJzZXIsIGJhc2UgfHwgQmFzZVBhcnNlcik7XG4gICAgbWFrZXJbbmFtZV0gPSBjcmVhdG9yRmFjdG9yeShuYW1lKTtcbiAgICBwYXJzZXIubWFrZXIgJiYgZXh0ZW5kKG1ha2VyLCBwYXJzZXIubWFrZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcG9uZW50KGlkLCBjb21wb25lbnQpIHtcbiAgICB2YXIgbmFtZTtcblxuICAgIGlmIChpcy5TdHJpbmcoaWQpKSB7XG4gICAgICBuYW1lID0gaWQ7XG5cbiAgICAgIGlmIChjb21wb25lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IGlkLmRpc3BsYXlOYW1lIHx8IGlkLm5hbWU7XG4gICAgICBjb21wb25lbnQgPSBpZDtcbiAgICB9XG5cbiAgICBpZiAoIW5hbWUgfHwgIWNvbXBvbmVudCkgcmV0dXJuO1xuICAgIHZhciBuYW1lQWxpYXMgPSB0b0Nhc2UobmFtZSk7XG4gICAgY29tcG9uZW50c1tuYW1lXSA9IGNvbXBvbmVudDtcbiAgICBjb21wb25lbnRzW25hbWVBbGlhc10gPSBjb21wb25lbnQ7XG4gICAgZGVsZXRlIENyZWF0ZU5vZGUuYWxpYXNNYXBbbmFtZV07XG4gICAgZGVsZXRlIENyZWF0ZU5vZGUuYWxpYXNNYXBbbmFtZUFsaWFzXTtcbiAgICBkZWxldGUgcGFyc2Vyc1tuYW1lXTtcbiAgICBkZWxldGUgcGFyc2Vyc1tuYW1lQWxpYXNdO1xuICAgIGlmIChjb21wb25lbnQuZm9ybUNyZWF0ZVBhcnNlcikgcGFyc2VyKG5hbWUsIGNvbXBvbmVudC5mb3JtQ3JlYXRlUGFyc2VyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uICRmb3JtKCkge1xuICAgIHJldHVybiAkRm9ybUNyZWF0ZShGb3JtQ3JlYXRlLCBjb21wb25lbnRzLCBkaXJlY3RpdmVzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUZvcm1BcHAocnVsZSwgb3B0aW9uKSB7XG4gICAgdmFyIFR5cGUgPSAkZm9ybSgpO1xuICAgIHJldHVybiBjcmVhdGVBcHAoe1xuICAgICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHJlYWN0aXZlKHtcbiAgICAgICAgICBydWxlOiBydWxlLFxuICAgICAgICAgIG9wdGlvbjogb3B0aW9uXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gaChUeXBlLCBfb2JqZWN0U3ByZWFkMih7XG4gICAgICAgICAgcmVmOiAnZmMnXG4gICAgICAgIH0sIHRoaXMuJGRhdGEpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uICR2bm9kZSgpIHtcbiAgICByZXR1cm4gZnJhZ21lbnQ7XG4gIH0gLy90b2RvIOajgOafpeWbnuiwg+WHveaVsOS9nOeUqOWfn1xuXG5cbiAgZnVuY3Rpb24gdXNlKGZuLCBvcHQpIHtcbiAgICBpZiAoaXMuRnVuY3Rpb24oZm4uaW5zdGFsbCkpIGZuLmluc3RhbGwoY3JlYXRlLCBvcHQpO2Vsc2UgaWYgKGlzLkZ1bmN0aW9uKGZuKSkgZm4oY3JlYXRlLCBvcHQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlKHJ1bGVzLCBvcHRpb24pIHtcbiAgICB2YXIgYXBwID0gY3JlYXRlRm9ybUFwcChydWxlcywgb3B0aW9uIHx8IHt9KTtcbiAgICB1c2VBcHBzLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgIGludm9rZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB2KGNyZWF0ZSwgYXBwKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAoKG9wdGlvbiA9PT0gbnVsbCB8fCBvcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbi5lbCkgfHwgZG9jdW1lbnQuYm9keSkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICB2YXIgdm0gPSBhcHAubW91bnQoZGl2KTtcbiAgICByZXR1cm4gdm0uJHJlZnMuZmMuZmFwaTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZhY3RvcnkoaW5oZXJpdCkge1xuICAgIHZhciBfY29uZmlnID0gX29iamVjdFNwcmVhZDIoe30sIGNvbmZpZyk7XG5cbiAgICBpZiAoaW5oZXJpdCkge1xuICAgICAgX2NvbmZpZy5pbmhlcml0ID0ge1xuICAgICAgICBjb21wb25lbnRzOiBjb21wb25lbnRzLFxuICAgICAgICBwYXJzZXJzOiBwYXJzZXJzLFxuICAgICAgICBkaXJlY3RpdmVzOiBkaXJlY3RpdmVzLFxuICAgICAgICBtb2RlbEZpZWxkczogbW9kZWxGaWVsZHMsXG4gICAgICAgIHByb3ZpZGVyczogcHJvdmlkZXJzLFxuICAgICAgICB1c2VBcHBzOiB1c2VBcHBzLFxuICAgICAgICBtYWtlcjogbWFrZXIsXG4gICAgICAgIGZvcm11bGFzOiBmb3JtdWxhcyxcbiAgICAgICAgbG9hZERhdGE6IGxvYWREYXRhXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgX2NvbmZpZy5pbmhlcml0O1xuICAgIH1cblxuICAgIHJldHVybiBGb3JtQ3JlYXRlRmFjdG9yeShfY29uZmlnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldE1vZGVsRmllbGQobmFtZSwgZmllbGQpIHtcbiAgICBtb2RlbEZpZWxkc1tuYW1lXSA9IGZpZWxkO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0Rm9ybXVsYShuYW1lLCBmbikge1xuICAgIGZvcm11bGFzW25hbWVdID0gZm47XG4gIH1cblxuICBmdW5jdGlvbiBzZXREcml2ZXIobmFtZSwgZHJpdmVyKSB7XG4gICAgdmFyIHBhcmVudCA9IGRyaXZlcnNbbmFtZV0gfHwge307XG4gICAgdmFyIHBhcnNlcnMgPSBwYXJlbnQucGFyc2VycyB8fCB7fTtcblxuICAgIGlmIChkcml2ZXIucGFyc2Vycykge1xuICAgICAgT2JqZWN0LmtleXMoZHJpdmVyLnBhcnNlcnMpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgcGFyc2Vyc1trXSA9IHNldFByb3RvdHlwZU9mKGRyaXZlci5wYXJzZXJzW2tdLCBCYXNlUGFyc2VyKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGRyaXZlci5uYW1lID0gbmFtZTtcbiAgICBkcml2ZXJzW25hbWVdID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHBhcmVudCksIGRyaXZlciksIHt9LCB7XG4gICAgICBwYXJzZXJzOiBwYXJzZXJzXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWZyZXNoRGF0YShpZCkge1xuICAgIGlmIChpZCkge1xuICAgICAgT2JqZWN0LmtleXMoaW5zdGFuY2UpLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgdmFyIGFwaXMgPSBBcnJheS5pc0FycmF5KGluc3RhbmNlW3ZdKSA/IGluc3RhbmNlW3ZdIDogW2luc3RhbmNlW3ZdXTtcbiAgICAgICAgYXBpcy5mb3JFYWNoKGZ1bmN0aW9uICh0aGF0KSB7XG4gICAgICAgICAgdGhhdC5idXMuJGVtaXQoJyRsb2FkRGF0YS4nICsgaWQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldERhdGEoaWQsIGRhdGEpIHtcbiAgICBsb2FkRGF0YVtpZF0gPSBkYXRhO1xuICAgIHJlZnJlc2hEYXRhKGlkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldERhdGFEcml2ZXIoaWQsIGRhdGEpIHtcbiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW52b2tlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGRhdGEuYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjYWxsYmFjay5fZHJpdmVyID0gdHJ1ZTtcbiAgICBzZXREYXRhKGlkLCBjYWxsYmFjayk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXREYXRhKGlkLCBkZWYpIHtcbiAgICB2YXIgc3BsaXQgPSAoaWQgfHwgJycpLnNwbGl0KCcuJyk7XG4gICAgaWQgPSBzcGxpdC5zaGlmdCgpO1xuICAgIHZhciBmaWVsZCA9IHNwbGl0LmpvaW4oJy4nKTtcblxuICAgIGlmIChoYXNQcm9wZXJ0eShsb2FkRGF0YSwgaWQpKSB7XG4gICAgICB2YXIgdmFsID0gbG9hZERhdGFbaWRdO1xuXG4gICAgICBpZiAodmFsICYmIHZhbC5fZHJpdmVyKSB7XG4gICAgICAgIHZhbCA9IHZhbChmaWVsZCk7XG4gICAgICB9IGVsc2UgaWYgKHNwbGl0Lmxlbmd0aCkge1xuICAgICAgICB2YWwgPSBkZWVwR2V0KHZhbCwgc3BsaXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsID09IG51bGwgfHwgdmFsID09PSAnJyA/IGRlZiA6IHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRlZjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBleHRlbmRBcGkoZm4pIHtcbiAgICBleHRlbmRBcGlGbi5wdXNoKGZuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZURhdGEoaWQpIHtcbiAgICBkZWxldGUgbG9hZERhdGFbaWRdO1xuICAgIHJlZnJlc2hEYXRhKGlkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgbGlzdGVuZXIucHVzaCh7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBGb3JtQ3JlYXRlKHZtKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGV4dGVuZCh0aGlzLCB7XG4gICAgICBpZDogaWQrKyxcbiAgICAgIGNyZWF0ZTogY3JlYXRlLFxuICAgICAgdm06IHZtLFxuICAgICAgbWFuYWdlcjogY3JlYXRlTWFuYWdlcihjb25maWcubWFuYWdlciksXG4gICAgICBwYXJzZXJzOiBwYXJzZXJzLFxuICAgICAgcHJvdmlkZXJzOiBwcm92aWRlcnMsXG4gICAgICBtb2RlbEZpZWxkczogbW9kZWxGaWVsZHMsXG4gICAgICBmb3JtdWxhczogZm9ybXVsYXMsXG4gICAgICBpc01vYmlsZTogaXNNb2JpbGUsXG4gICAgICBydWxlczogdm0ucHJvcHMucnVsZSxcbiAgICAgIG5hbWU6IHZtLnByb3BzLm5hbWUgfHwgdW5pcXVlSWQoKSxcbiAgICAgIGluRm9yOiB2bS5wcm9wcy5pbkZvcixcbiAgICAgIHByb3A6IHtcbiAgICAgICAgY29tcG9uZW50czogY29tcG9uZW50cyxcbiAgICAgICAgZGlyZWN0aXZlczogZGlyZWN0aXZlc1xuICAgICAgfSxcbiAgICAgIGRyaXZlcnM6IGRyaXZlcnMsXG4gICAgICByZW5kZXJEcml2ZXI6IG51bGwsXG4gICAgICBzZXREYXRhOiBzZXREYXRhLFxuICAgICAgZ2V0RGF0YTogZ2V0RGF0YSxcbiAgICAgIHJlZnJlc2hEYXRhOiByZWZyZXNoRGF0YSxcbiAgICAgIGxvYWREYXRhOiBsb2FkRGF0YSxcbiAgICAgIENyZWF0ZU5vZGU6IENyZWF0ZU5vZGUsXG4gICAgICBidXM6IG5ldyBNaXR0KCksXG4gICAgICB1bndhdGNoOiBbXSxcbiAgICAgIG9wdGlvbnM6IHJlZih7fSksXG4gICAgICBleHRlbmRBcGlGbjogZXh0ZW5kQXBpRm4sXG4gICAgICBmZXRjaENhY2hlOiBuZXcgV2Vha01hcCgpXG4gICAgfSk7XG4gICAgbGlzdGVuZXIuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgX3RoaXMuYnVzLiRvbihpdGVtLm5hbWUsIGl0ZW0uY2FsbGJhY2spO1xuICAgIH0pO1xuICAgIG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhdGNoKF90aGlzLm9wdGlvbnMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuJGhhbmRsZS4kbWFuYWdlci51cGRhdGVPcHRpb25zKF90aGlzLm9wdGlvbnMudmFsdWUpO1xuXG4gICAgICAgIF90aGlzLmFwaSgpLnJlZnJlc2goKTtcbiAgICAgIH0sIHtcbiAgICAgICAgZGVlcDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZXh0ZW5kKHZtLmFwcENvbnRleHQuY29tcG9uZW50cywgY29tcG9uZW50cyk7XG4gICAgZXh0ZW5kKHZtLmFwcENvbnRleHQuZGlyZWN0aXZlcywgZGlyZWN0aXZlcyk7XG4gICAgdGhpcy4kaGFuZGxlID0gbmV3IEhhbmRsZXIodGhpcyk7XG5cbiAgICBpZiAodGhpcy5uYW1lKSB7XG4gICAgICBpZiAodGhpcy5pbkZvcikge1xuICAgICAgICBpZiAoIWluc3RhbmNlW3RoaXMubmFtZV0pIGluc3RhbmNlW3RoaXMubmFtZV0gPSBbXTtcbiAgICAgICAgaW5zdGFuY2VbdGhpcy5uYW1lXS5wdXNoKHRoaXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5zdGFuY2VbdGhpcy5uYW1lXSA9IHRoaXM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgRm9ybUNyZWF0ZS5pc01vYmlsZSA9IGlzTW9iaWxlO1xuICBleHRlbmQoRm9ybUNyZWF0ZS5wcm90b3R5cGUsIHtcbiAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmlzU3ViKCkpIHtcbiAgICAgICAgdGhpcy51bndhdGNoLnB1c2god2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIudm0uc2V0dXBTdGF0ZS5wYXJlbnQuc2V0dXBTdGF0ZS5mYy5vcHRpb25zLnZhbHVlO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLmluaXRPcHRpb25zKCk7XG5cbiAgICAgICAgICBfdGhpczIuJGhhbmRsZS5hcGkucmVmcmVzaCgpO1xuICAgICAgICB9LCB7XG4gICAgICAgICAgZGVlcDogdHJ1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnZtLnByb3BzLmRyaXZlcikge1xuICAgICAgICB0aGlzLnJlbmRlckRyaXZlciA9IF90eXBlb2YodGhpcy52bS5wcm9wcy5kcml2ZXIpID09PSAnb2JqZWN0JyA/IHRoaXMudm0ucHJvcHMuZHJpdmVyIDogdGhpcy5kcml2ZXJzW3RoaXMudm0ucHJvcHMuZHJpdmVyXTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnJlbmRlckRyaXZlciAmJiB0aGlzLnZtLnNldHVwU3RhdGUucGFyZW50KSB7XG4gICAgICAgIHRoaXMucmVuZGVyRHJpdmVyID0gdGhpcy52bS5zZXR1cFN0YXRlLnBhcmVudC5zZXR1cFN0YXRlLmZjLnJlbmRlckRyaXZlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnJlbmRlckRyaXZlcikge1xuICAgICAgICB0aGlzLnJlbmRlckRyaXZlciA9IHRoaXMuZHJpdmVyc1tcImRlZmF1bHRcIl07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW5pdE9wdGlvbnMoKTtcbiAgICAgIHRoaXMuJGhhbmRsZS5pbml0KCk7XG4gICAgfSxcbiAgICB0YXJnZXRGb3JtRHJpdmVyOiBmdW5jdGlvbiB0YXJnZXRGb3JtRHJpdmVyKG1ldGhvZCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnJlbmRlckRyaXZlciAmJiB0aGlzLnJlbmRlckRyaXZlclttZXRob2RdKSB7XG4gICAgICAgIHJldHVybiBpbnZva2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBfdGhpczMkcmVuZGVyRHJpdmVyO1xuXG4gICAgICAgICAgcmV0dXJuIChfdGhpczMkcmVuZGVyRHJpdmVyID0gX3RoaXMzLnJlbmRlckRyaXZlcilbbWV0aG9kXS5hcHBseShfdGhpczMkcmVuZGVyRHJpdmVyLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnbG9iYWxEYXRhRHJpdmVyOiBmdW5jdGlvbiBnbG9iYWxEYXRhRHJpdmVyKGlkKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIHNwbGl0ID0gaWQuc3BsaXQoJy4nKTtcbiAgICAgIHZhciBrZXkgPSBzcGxpdC5zaGlmdCgpO1xuICAgICAgdmFyIG9wdGlvbiA9IHRoaXMub3B0aW9ucy52YWx1ZS5nbG9iYWxEYXRhICYmIHRoaXMub3B0aW9ucy52YWx1ZS5nbG9iYWxEYXRhW2tleV07XG5cbiAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgaWYgKG9wdGlvbi50eXBlID09PSAnc3RhdGljJykge1xuICAgICAgICAgIHJldHVybiBkZWVwR2V0KG9wdGlvbi5kYXRhLCBzcGxpdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHZhbDtcbiAgICAgICAgICB2YXIgcmVzID0gdGhpcy5mZXRjaENhY2hlLmdldChvcHRpb24pO1xuXG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgdmFsID0gZGVlcEdldChyZXMuZGF0YSwgc3BsaXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXJlcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZldGNoQ2FjaGUuc2V0KG9wdGlvbiwgcmVzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mZXRjaENhY2hlLnNldChvcHRpb24sIHtcbiAgICAgICAgICAgICAgc3RhdHVzOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHJlbG9hZCA9IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHVud2F0Y2goKTtcblxuICAgICAgICAgICAgdmFyIHJlcyA9IF90aGlzNC5mZXRjaENhY2hlLmdldChvcHRpb24pO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXM0Lm9wdGlvbnMudmFsdWUuZ2xvYmFsRGF0YSAmJiBPYmplY3QudmFsdWVzKF90aGlzNC5vcHRpb25zLnZhbHVlLmdsb2JhbERhdGEpLmluZGV4T2Yob3B0aW9uKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHJlcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIF90aGlzNC5mZXRjaENhY2hlLnNldChvcHRpb24sIHJlcyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBfdGhpczQuYnVzLiRlbWl0KCckbG9hZERhdGEuJGdsb2JhbERhdGEuJyArIGtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBfdGhpczQuZmV0Y2hDYWNoZVtcImRlbGV0ZVwiXShvcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIG9wdGlvbi53YWl0IHx8IDYwMCk7XG5cbiAgICAgICAgICB2YXIgX2VtaXQgPSBmdW5jdGlvbiBfZW1pdChkYXRhKSB7XG4gICAgICAgICAgICBfdGhpczQuZmV0Y2hDYWNoZS5zZXQob3B0aW9uLCB7XG4gICAgICAgICAgICAgIHN0YXR1czogdHJ1ZSxcbiAgICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIF90aGlzNC5idXMuJGVtaXQoJyRsb2FkRGF0YS4kZ2xvYmFsRGF0YS4nICsga2V5KTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gY2FsbGJhY2soZ2V0LCBjaGFuZ2UpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2UgJiYgb3B0aW9uLndhdGNoID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdW53YXRjaCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2hhbmdlKSB7XG4gICAgICAgICAgICAgIHJlbG9hZCgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvcHRpb25zID0gX3RoaXM0LiRoYW5kbGUubG9hZEZldGNoVmFyKGNvcHkkMShvcHRpb24pLCBnZXQpO1xuXG4gICAgICAgICAgICBfdGhpczQuJGhhbmRsZS5hcGkuZmV0Y2gob3B0aW9ucykudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgIF9lbWl0KHJlcyk7XG4gICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgIF9lbWl0KG51bGwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHZhciB1bndhdGNoID0gdGhpcy53YXRjaExvYWREYXRhKGNhbGxiYWNrKTtcbiAgICAgICAgICB0aGlzLnVud2F0Y2gucHVzaCh1bndhdGNoKTtcbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBnbG9iYWxWYXJEcml2ZXI6IGZ1bmN0aW9uIGdsb2JhbFZhckRyaXZlcihpZCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBzcGxpdCA9IGlkLnNwbGl0KCcuJyk7XG4gICAgICB2YXIga2V5ID0gc3BsaXQuc2hpZnQoKTtcbiAgICAgIHZhciBvcHRpb24gPSB0aGlzLm9wdGlvbnMudmFsdWUuZ2xvYmFsVmFyaWFibGUgJiYgdGhpcy5vcHRpb25zLnZhbHVlLmdsb2JhbFZhcmlhYmxlW2tleV07XG5cbiAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgdmFyIGhhbmRsZSA9IGlzLkZ1bmN0aW9uKG9wdGlvbikgPyBvcHRpb24gOiBvcHRpb24uaGFuZGxlO1xuXG4gICAgICAgIGlmIChoYW5kbGUpIHtcbiAgICAgICAgICB2YXIgdmFsO1xuICAgICAgICAgIHZhciB1bndhdGNoID0gdGhpcy53YXRjaExvYWREYXRhKGZ1bmN0aW9uIChnZXQsIGNoYW5nZSkge1xuICAgICAgICAgICAgaWYgKGNoYW5nZSkge1xuICAgICAgICAgICAgICB1bndhdGNoKCk7XG5cbiAgICAgICAgICAgICAgX3RoaXM1LmJ1cy4kZW1pdCgnJGxvYWREYXRhLiR2YXIuJyArIGtleSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsID0gaW52b2tlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShnZXQsIF90aGlzNS4kaGFuZGxlLmFwaSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnVud2F0Y2gucHVzaCh1bndhdGNoKTtcbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRMb2FkRGF0YTogZnVuY3Rpb24gZ2V0TG9hZERhdGEoaWQsIGRlZikge1xuICAgICAgdmFyIHZhbCA9IG51bGw7XG5cbiAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgIHZhciBzcGxpdCA9IGlkLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBrZXkgPSBzcGxpdC5zaGlmdCgpO1xuXG4gICAgICAgIGlmIChrZXkgPT09ICckZm9ybScpIHtcbiAgICAgICAgICB2YWwgPSB0aGlzLiRoYW5kbGUuYXBpLnRvcC5mb3JtRGF0YSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJyRzdWJGb3JtJykge1xuICAgICAgICAgIHZhbCA9IHRoaXMuJGhhbmRsZS5hcGkuZm9ybURhdGEoKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICckb3B0aW9ucycpIHtcbiAgICAgICAgICB2YWwgPSB0aGlzLm9wdGlvbnMudmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnJGdsb2JhbERhdGEnKSB7XG4gICAgICAgICAgdmFsID0gdGhpcy5nbG9iYWxEYXRhRHJpdmVyKHNwbGl0LmpvaW4oJy4nKSk7XG4gICAgICAgICAgc3BsaXQgPSBbXTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICckdmFyJykge1xuICAgICAgICAgIHZhbCA9IHRoaXMuZ2xvYmFsVmFyRHJpdmVyKHNwbGl0LmpvaW4oJy4nKSk7XG4gICAgICAgICAgc3BsaXQgPSBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWwgPSBnZXREYXRhKGlkLCBkZWYpO1xuICAgICAgICAgIHNwbGl0ID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3BsaXQubGVuZ3RoKSB7XG4gICAgICAgICAgdmFsID0gZGVlcEdldCh2YWwsIHNwbGl0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsID09IG51bGwgfHwgdmFsID09PSAnJyA/IGRlZiA6IHZhbDtcbiAgICB9LFxuICAgIHdhdGNoTG9hZERhdGE6IGZ1bmN0aW9uIHdhdGNoTG9hZERhdGEoZm4pIHtcbiAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICB2YXIgdW53YXRjaCA9IHt9O1xuXG4gICAgICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKGZsYWcpIHtcbiAgICAgICAgaW52b2tlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmbihnZXQsIGZsYWcpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBnZXQgPSBmdW5jdGlvbiBnZXQoaWQsIGRlZikge1xuICAgICAgICBpZiAodW53YXRjaFtpZF0pIHtcbiAgICAgICAgICByZXR1cm4gdW53YXRjaFtpZF0udmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHZhbCA9IF90aGlzNi5nZXRMb2FkRGF0YShpZCwgZGVmKTtcblxuICAgICAgICB2YXIgc3BsaXQgPSBpZC5zcGxpdCgnLicpO1xuICAgICAgICB2YXIga2V5ID0gc3BsaXQuc2hpZnQoKTtcbiAgICAgICAgdmFyIGtleTIgPSBzcGxpdC5zaGlmdCgpIHx8ICcnO1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGtleSAhPT0gaWQpIHtcbiAgICAgICAgICAgIHZhciB0ZW1wID0gX3RoaXM2LmdldExvYWREYXRhKGlkLCBkZWYpO1xuXG4gICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGVtcCkgIT09IEpTT04uc3RyaW5naWZ5KHVud2F0Y2hbaWRdLnZhbCkpIHtcbiAgICAgICAgICAgICAgdW53YXRjaFtpZF0udmFsID0gdGVtcDtcbiAgICAgICAgICAgICAgcnVuKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBydW4odHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcblxuICAgICAgICBfdGhpczYuYnVzLiRvbignJGxvYWREYXRhLicgKyBrZXksIGNhbGxiYWNrKTtcblxuICAgICAgICBpZiAoa2V5Mikge1xuICAgICAgICAgIF90aGlzNi5idXMuJG9uKCckbG9hZERhdGEuJyArIGtleSArICcuJyArIGtleTIsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVud2F0Y2hbaWRdID0ge1xuICAgICAgICAgIGZuOiBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgICAgIF90aGlzNi5idXMuJG9mZignJGxvYWREYXRhLicgKyBrZXksIGNhbGxiYWNrKTtcblxuICAgICAgICAgICAgaWYgKGtleTIpIHtcbiAgICAgICAgICAgICAgX3RoaXM2LmJ1cy4kb2ZmKCckbG9hZERhdGEuJyArIGtleSArICcuJyArIGtleTIsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHZhbDogdmFsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9O1xuXG4gICAgICBydW4oZmFsc2UpO1xuXG4gICAgICB2YXIgdW4gPSBmdW5jdGlvbiB1bigpIHtcbiAgICAgICAgT2JqZWN0LmtleXModW53YXRjaCkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgIHJldHVybiB1bndhdGNoW2tdLmZuKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB1bndhdGNoID0ge307XG4gICAgICB9O1xuXG4gICAgICB0aGlzLnVud2F0Y2gucHVzaCh1bik7XG4gICAgICByZXR1cm4gdW47XG4gICAgfSxcbiAgICBpc1N1YjogZnVuY3Rpb24gaXNTdWIoKSB7XG4gICAgICByZXR1cm4gdGhpcy52bS5zZXR1cFN0YXRlLnBhcmVudCAmJiB0aGlzLnZtLnByb3BzLmV4dGVuZE9wdGlvbjtcbiAgICB9LFxuICAgIGluaXRPcHRpb25zOiBmdW5jdGlvbiBpbml0T3B0aW9ucygpIHtcbiAgICAgIHRoaXMub3B0aW9ucy52YWx1ZSA9IHt9O1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IF9vYmplY3RTcHJlYWQyKHtcbiAgICAgICAgZm9ybURhdGE6IHt9LFxuICAgICAgICBzdWJtaXRCdG46IHt9LFxuICAgICAgICByZXNldEJ0bjoge30sXG4gICAgICAgIGdsb2JhbEV2ZW50OiB7fSxcbiAgICAgICAgZ2xvYmFsRGF0YToge31cbiAgICAgIH0sIGRlZXBDb3B5KGdsb2JhbENvbmZpZykpO1xuXG4gICAgICBpZiAodGhpcy5pc1N1YigpKSB7XG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm1lcmdlT3B0aW9ucyhvcHRpb25zLCB0aGlzLnZtLnNldHVwU3RhdGUucGFyZW50LnNldHVwU3RhdGUuZmMub3B0aW9ucy52YWx1ZSB8fCB7fSwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbnMgPSB0aGlzLm1lcmdlT3B0aW9ucyhvcHRpb25zLCB0aGlzLnZtLnByb3BzLm9wdGlvbik7XG4gICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgfSxcbiAgICBtZXJnZU9wdGlvbnM6IGZ1bmN0aW9uIG1lcmdlT3B0aW9ucyh0YXJnZXQsIG9wdCwgcGFyZW50KSB7XG4gICAgICBvcHQgPSBkZWVwQ29weShvcHQpO1xuICAgICAgcGFyZW50ICYmIFsncGFnZScsICdvblN1Ym1pdCcsICdtb3VudGVkJywgJ3JlbG9hZCcsICdmb3JtRGF0YScsICdlbCcsICdnbG9iYWxDbGFzcycsICdzdHlsZSddLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgZGVsZXRlIG9wdFtuXTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAob3B0Lmdsb2JhbCkge1xuICAgICAgICB0YXJnZXQuZ2xvYmFsID0gbWVyZ2VHbG9iYWwodGFyZ2V0Lmdsb2JhbCwgb3B0Lmdsb2JhbCk7XG4gICAgICAgIGRlbGV0ZSBvcHQuZ2xvYmFsO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiRoYW5kbGUuJG1hbmFnZXIubWVyZ2VPcHRpb25zKFtvcHRdLCB0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9LFxuICAgIHVwZGF0ZU9wdGlvbnM6IGZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMob3B0aW9ucykge1xuICAgICAgdGhpcy5vcHRpb25zLnZhbHVlID0gdGhpcy5tZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLnZhbHVlLCBvcHRpb25zKTtcbiAgICAgIHRoaXMuJGhhbmRsZS4kbWFuYWdlci51cGRhdGVPcHRpb25zKHRoaXMub3B0aW9ucy52YWx1ZSk7XG4gICAgICB0aGlzLmJ1cy4kZW1pdCgnJGxvYWREYXRhLiRvcHRpb25zJyk7XG4gICAgfSxcbiAgICBhcGk6IGZ1bmN0aW9uIGFwaSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRoYW5kbGUuYXBpO1xuICAgIH0sXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kaGFuZGxlLnJlbmRlcigpO1xuICAgIH0sXG4gICAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICAgIHRoaXMuJGhhbmRsZS5tb3VudGVkKCk7XG4gICAgfSxcbiAgICB1bm1vdW50OiBmdW5jdGlvbiB1bm1vdW50KCkge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLm5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5Gb3IpIHtcbiAgICAgICAgICB2YXIgaWR4ID0gaW5zdGFuY2VbdGhpcy5uYW1lXS5pbmRleE9mKHRoaXMpO1xuICAgICAgICAgIGluc3RhbmNlW3RoaXMubmFtZV0uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGluc3RhbmNlW3RoaXMubmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXIuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBfdGhpczcuYnVzLiRvZmYoaXRlbS5uYW1lLCBpdGVtLmNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy51bndhdGNoLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVud2F0Y2ggPSBbXTtcbiAgICAgIHRoaXMuJGhhbmRsZS5yZWxvYWRSdWxlKFtdKTtcbiAgICB9LFxuICAgIHVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZGF0ZWQoKSB7XG4gICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgdGhpcy4kaGFuZGxlLmJpbmROZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczguYnVzLiRlbWl0KCduZXh0LXRpY2snLCBfdGhpczguJGhhbmRsZS5hcGkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiB1c2VBdHRyKGZvcm1DcmVhdGUpIHtcbiAgICBleHRlbmQoZm9ybUNyZWF0ZSwge1xuICAgICAgdmVyc2lvbjogY29uZmlnLnZlcnNpb24sXG4gICAgICB1aTogY29uZmlnLnVpLFxuICAgICAgZXh0ZW5kQXBpOiBleHRlbmRBcGksXG4gICAgICBnZXREYXRhOiBnZXREYXRhLFxuICAgICAgc2V0RGF0YURyaXZlcjogc2V0RGF0YURyaXZlcixcbiAgICAgIHNldERhdGE6IHNldERhdGEsXG4gICAgICByZW1vdmVEYXRhOiByZW1vdmVEYXRhLFxuICAgICAgcmVmcmVzaERhdGE6IHJlZnJlc2hEYXRhLFxuICAgICAgbWFrZXI6IG1ha2VyLFxuICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsXG4gICAgICBkaXJlY3RpdmU6IGRpcmVjdGl2ZSxcbiAgICAgIHNldE1vZGVsRmllbGQ6IHNldE1vZGVsRmllbGQsXG4gICAgICBzZXRGb3JtdWxhOiBzZXRGb3JtdWxhLFxuICAgICAgc2V0RHJpdmVyOiBzZXREcml2ZXIsXG4gICAgICByZWdpc3RlcjogcmVnaXN0ZXIsXG4gICAgICAkdm5vZGU6ICR2bm9kZSxcbiAgICAgIHBhcnNlcjogcGFyc2VyLFxuICAgICAgdXNlOiB1c2UsXG4gICAgICBmYWN0b3J5OiBmYWN0b3J5LFxuICAgICAgY29tcG9uZW50QWxpYXM6IGNvbXBvbmVudEFsaWFzLFxuICAgICAgY29weVJ1bGU6IGNvcHlSdWxlLFxuICAgICAgY29weVJ1bGVzOiBjb3B5UnVsZXMsXG4gICAgICBmZXRjaDogZmV0Y2gkMSxcbiAgICAgICRmb3JtOiAkZm9ybSxcbiAgICAgIHBhcnNlRm46IHBhcnNlRm4sXG4gICAgICBwYXJzZUpzb246IHBhcnNlSnNvbixcbiAgICAgIHRvSnNvbjogdG9Kc29uLFxuICAgICAgdXNlQXBwOiB1c2VBcHAsXG4gICAgICBnZXRBcGk6IGdldEFwaSxcbiAgICAgIG9uOiBvblxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdXNlU3RhdGljKGZvcm1DcmVhdGUpIHtcbiAgICBleHRlbmQoZm9ybUNyZWF0ZSwge1xuICAgICAgY3JlYXRlOiBjcmVhdGUsXG4gICAgICBpc01vYmlsZTogaXNNb2JpbGUsXG4gICAgICBpbnN0YWxsOiBmdW5jdGlvbiBpbnN0YWxsKGFwcCwgb3B0aW9ucykge1xuICAgICAgICBnbG9iYWxDb25maWcgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgZ2xvYmFsQ29uZmlnKSwgb3B0aW9ucyB8fCB7fSk7XG4gICAgICAgIHZhciBrZXkgPSAnX2luc3RhbGxlZEZvcm1DcmVhdGVfJyArIGNvbmZpZy51aTtcbiAgICAgICAgaWYgKGFwcFtrZXldID09PSB0cnVlKSByZXR1cm47XG4gICAgICAgIGFwcFtrZXldID0gdHJ1ZTtcblxuICAgICAgICB2YXIgJGZvcm1DcmVhdGUgPSBmdW5jdGlvbiAkZm9ybUNyZWF0ZShydWxlcykge1xuICAgICAgICAgIHZhciBvcHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgICAgIHJldHVybiBjcmVhdGUocnVsZXMsIG9wdCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdXNlQXR0cigkZm9ybUNyZWF0ZSk7XG4gICAgICAgIGFwcC5jb25maWcuZ2xvYmFsUHJvcGVydGllcy4kZm9ybUNyZWF0ZSA9ICRmb3JtQ3JlYXRlO1xuICAgICAgICB2YXIgJGNvbXBvbmVudCA9ICRmb3JtKCk7XG4gICAgICAgIGFwcC5jb21wb25lbnQoJGNvbXBvbmVudC5uYW1lLCAkY29tcG9uZW50KTtcbiAgICAgICAgdXNlQXBwcy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgaW52b2tlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB2KGZvcm1DcmVhdGUsIGFwcCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdXNlQXR0cihjcmVhdGUpO1xuICB1c2VTdGF0aWMoY3JlYXRlKTtcbiAgc2V0RGF0YURyaXZlcignJGNvb2tpZScsIGNvb2tpZURyaXZlcik7XG4gIHNldERhdGFEcml2ZXIoJyRsb2NhbFN0b3JhZ2UnLCBsb2NhbFN0b3JhZ2VEcml2ZXIpO1xuICBDcmVhdGVOb2RlLnVzZSh7XG4gICAgZnJhZ21lbnQ6ICdmY0ZyYWdtZW50J1xuICB9KTtcbiAgY29uZmlnLmluc3RhbGwgJiYgY3JlYXRlLnVzZShjb25maWcpO1xuICB1c2VBcHAoZnVuY3Rpb24gKF8sIGFwcCkge1xuICAgIGFwcC5taXhpbih7XG4gICAgICBwcm9wczogWydmb3JtQ3JlYXRlSW5qZWN0J11cbiAgICB9KTtcbiAgfSk7XG4gIHBhcnNlcihodG1sKTtcblxuICBpZiAoY29uZmlnLmluaGVyaXQpIHtcbiAgICB2YXIgaW5oZXJpdCA9IGNvbmZpZy5pbmhlcml0O1xuICAgIGluaGVyaXQuY29tcG9uZW50cyAmJiBleHRlbmQoY29tcG9uZW50cywgaW5oZXJpdC5jb21wb25lbnRzKTtcbiAgICBpbmhlcml0LnBhcnNlcnMgJiYgZXh0ZW5kKHBhcnNlcnMsIGluaGVyaXQucGFyc2Vycyk7XG4gICAgaW5oZXJpdC5kaXJlY3RpdmVzICYmIGV4dGVuZChkaXJlY3RpdmVzLCBpbmhlcml0LmRpcmVjdGl2ZXMpO1xuICAgIGluaGVyaXQubW9kZWxGaWVsZHMgJiYgZXh0ZW5kKG1vZGVsRmllbGRzLCBpbmhlcml0Lm1vZGVsRmllbGRzKTtcbiAgICBpbmhlcml0LnByb3ZpZGVycyAmJiBleHRlbmQocHJvdmlkZXJzLCBpbmhlcml0LnByb3ZpZGVycyk7XG4gICAgaW5oZXJpdC51c2VBcHBzICYmIGV4dGVuZCh1c2VBcHBzLCBpbmhlcml0LnVzZUFwcHMpO1xuICAgIGluaGVyaXQubWFrZXIgJiYgZXh0ZW5kKG1ha2VyLCBpbmhlcml0Lm1ha2VyKTtcbiAgICBpbmhlcml0LmxvYWREYXRhICYmIGV4dGVuZChsb2FkRGF0YSwgaW5oZXJpdC5sb2FkRGF0YSk7XG4gICAgaW5oZXJpdC5mb3JtdWxhcyAmJiBleHRlbmQoZm9ybXVsYXMsIGluaGVyaXQuZm9ybXVsYXMpO1xuICB9XG5cbiAgdmFyIEZjQ29tcG9uZW50ID0gJGZvcm0oKTtcbiAgc2V0UHJvdG90eXBlT2YoRmNDb21wb25lbnQsIGNyZWF0ZSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZjQ29tcG9uZW50LCB7XG4gICAgZmV0Y2g6IHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlLmZldGNoO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgICAgICBjcmVhdGUuZmV0Y2ggPSB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgRmNDb21wb25lbnQudXRpbCA9IGNyZWF0ZTtcbiAgcmV0dXJuIEZjQ29tcG9uZW50O1xufVxuXG52YXIgREVGQVVMVF9GT1JNQVRTID0ge1xuICBkYXRlOiAnWVlZWS1NTS1ERCcsXG4gIG1vbnRoOiAnWVlZWS1NTScsXG4gIGRhdGV0aW1lOiAnWVlZWS1NTS1ERCBISDptbTpzcycsXG4gIHRpbWVyYW5nZTogJ0hIOm1tOnNzJyxcbiAgZGF0ZXJhbmdlOiAnWVlZWS1NTS1ERCcsXG4gIG1vbnRocmFuZ2U6ICdZWVlZLU1NJyxcbiAgZGF0ZXRpbWVyYW5nZTogJ1lZWVktTU0tREQgSEg6bW06c3MnLFxuICB5ZWFyOiAnWVlZWSdcbn07XG52YXIgbmFtZSQ1ID0gJ2RhdGVQaWNrZXInO1xudmFyIGRhdGVQaWNrZXIgPSB7XG4gIG5hbWU6IG5hbWUkNSxcbiAgbWFrZXI6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gWyd5ZWFyJywgJ21vbnRoJywgJ2RhdGUnLCAnZGF0ZXMnLCAnd2VlaycsICdkYXRldGltZScsICdkYXRldGltZVJhbmdlJywgJ2RhdGVSYW5nZScsICdtb250aFJhbmdlJ10ucmVkdWNlKGZ1bmN0aW9uIChpbml0aWFsLCB0eXBlKSB7XG4gICAgICBpbml0aWFsW3R5cGVdID0gY3JlYXRvckZhY3RvcnkobmFtZSQ1LCB7XG4gICAgICAgIHR5cGU6IHR5cGUudG9Mb3dlckNhc2UoKVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gaW5pdGlhbDtcbiAgICB9LCB7fSk7XG4gIH0oKSxcbiAgbWVyZ2VQcm9wOiBmdW5jdGlvbiBtZXJnZVByb3AoY3R4KSB7XG4gICAgdmFyIHByb3BzID0gY3R4LnByb3AucHJvcHM7XG5cbiAgICBpZiAoIXByb3BzLnZhbHVlRm9ybWF0KSB7XG4gICAgICBwcm9wcy52YWx1ZUZvcm1hdCA9IERFRkFVTFRfRk9STUFUU1twcm9wcy50eXBlXSB8fCBERUZBVUxUX0ZPUk1BVFNbJ2RhdGUnXTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBuYW1lJDQgPSAnaGlkZGVuJztcbnZhciBoaWRkZW4gPSB7XG4gIG5hbWU6IG5hbWUkNCxcbiAgbWFrZXI6IF9kZWZpbmVQcm9wZXJ0eSh7fSwgbmFtZSQ0LCBmdW5jdGlvbiAoZmllbGQsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGNyZWF0b3JGYWN0b3J5KG5hbWUkNCkoJycsIGZpZWxkLCB2YWx1ZSk7XG4gIH0pLFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbnZhciBuYW1lJDMgPSAnaW5wdXQnO1xudmFyIGlucHV0ID0ge1xuICBuYW1lOiBuYW1lJDMsXG4gIG1ha2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1ha2VyID0gWydwYXNzd29yZCcsICd1cmwnLCAnZW1haWwnLCAndGV4dCcsICd0ZXh0YXJlYSddLnJlZHVjZShmdW5jdGlvbiAobWFrZXIsIHR5cGUpIHtcbiAgICAgIG1ha2VyW3R5cGVdID0gY3JlYXRvckZhY3RvcnkobmFtZSQzLCB7XG4gICAgICAgIHR5cGU6IHR5cGVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG1ha2VyO1xuICAgIH0sIHt9KTtcbiAgICBtYWtlci5pZGF0ZSA9IGNyZWF0b3JGYWN0b3J5KG5hbWUkMywge1xuICAgICAgdHlwZTogJ2RhdGUnXG4gICAgfSk7XG4gICAgcmV0dXJuIG1ha2VyO1xuICB9KCksXG4gIG1lcmdlUHJvcDogZnVuY3Rpb24gbWVyZ2VQcm9wKGN0eCkge1xuICAgIHZhciBwcm9wcyA9IGN0eC5wcm9wLnByb3BzO1xuXG4gICAgaWYgKHByb3BzICYmIHByb3BzLmF1dG9zaXplICYmIHByb3BzLmF1dG9zaXplLm1pblJvd3MpIHtcbiAgICAgIHByb3BzLnJvd3MgPSBwcm9wcy5hdXRvc2l6ZS5taW5Sb3dzIHx8IDI7XG4gICAgfVxuICB9XG59O1xuXG52YXIgbmFtZSQyID0gJ3NsaWRlcic7XG52YXIgc2xpZGVyID0ge1xuICBuYW1lOiBuYW1lJDIsXG4gIG1ha2VyOiB7XG4gICAgc2xpZGVyUmFuZ2U6IGNyZWF0b3JGYWN0b3J5KG5hbWUkMiwge1xuICAgICAgcmFuZ2U6IHRydWVcbiAgICB9KVxuICB9LFxuICB0b0Zvcm1WYWx1ZTogZnVuY3Rpb24gdG9Gb3JtVmFsdWUodmFsdWUsIGN0eCkge1xuICAgIHZhciBpc0FyciA9IEFycmF5LmlzQXJyYXkodmFsdWUpLFxuICAgICAgICBwcm9wcyA9IGN0eC5wcm9wLnByb3BzLFxuICAgICAgICBtaW4gPSBwcm9wcy5taW4gfHwgMCxcbiAgICAgICAgcGFyc2VWYWx1ZTtcblxuICAgIGlmIChwcm9wcy5yYW5nZSA9PT0gdHJ1ZSkge1xuICAgICAgcGFyc2VWYWx1ZSA9IGlzQXJyID8gdmFsdWUgOiBbbWluLCBwYXJzZUZsb2F0KHZhbHVlKSB8fCBtaW5dO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZVZhbHVlID0gaXNBcnIgPyBwYXJzZUZsb2F0KHZhbHVlWzBdKSB8fCBtaW4gOiBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VWYWx1ZTtcbiAgfVxufTtcblxudmFyIG5hbWUkMSA9ICd0aW1lUGlja2VyJztcbnZhciB0aW1lUGlja2VyID0ge1xuICBuYW1lOiBuYW1lJDEsXG4gIG1ha2VyOiB7XG4gICAgdGltZTogY3JlYXRvckZhY3RvcnkobmFtZSQxLCBmdW5jdGlvbiAobSkge1xuICAgICAgcmV0dXJuIG0ucHJvcHMuaXNSYW5nZSA9IGZhbHNlO1xuICAgIH0pLFxuICAgIHRpbWVSYW5nZTogY3JlYXRvckZhY3RvcnkobmFtZSQxLCBmdW5jdGlvbiAobSkge1xuICAgICAgcmV0dXJuIG0ucHJvcHMuaXNSYW5nZSA9IHRydWU7XG4gICAgfSlcbiAgfSxcbiAgbWVyZ2VQcm9wOiBmdW5jdGlvbiBtZXJnZVByb3AoY3R4KSB7XG4gICAgdmFyIHByb3BzID0gY3R4LnByb3AucHJvcHM7XG5cbiAgICBpZiAoIXByb3BzLnZhbHVlRm9ybWF0KSB7XG4gICAgICBwcm9wcy52YWx1ZUZvcm1hdCA9ICdISDptbTpzcyc7XG4gICAgfVxuICB9XG59O1xuXG52YXIgcm93ID0ge1xuICBuYW1lOiAnRmNSb3cnLFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihfLCBjdHgpIHtcbiAgICByZXR1cm4gY3R4LnZOb2RlLmNvbCh7XG4gICAgICBwcm9wczoge1xuICAgICAgICBzcGFuOiAyNFxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFtjdHgudk5vZGUucm93KGN0eC5wcm9wLCBfKV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5cbnZhciBuYW1lID0gJ3NlbGVjdCc7XG52YXIgc2VsZWN0ID0ge1xuICBuYW1lOiBuYW1lLFxuICB0b0Zvcm1WYWx1ZTogZnVuY3Rpb24gdG9Gb3JtVmFsdWUodmFsdWUsIGN0eCkge1xuICAgIGlmIChjdHgucHJvcC5wcm9wcy5tdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0b0FycmF5KHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxufTtcblxudmFyIHBhcnNlcnMgPSBbZGF0ZVBpY2tlciwgaGlkZGVuLCBpbnB1dCwgc2xpZGVyLCB0aW1lUGlja2VyLCByb3csIHNlbGVjdF07XG5cbnZhciBQUkUgPSAnZWwnO1xudmFyIGFsaWFzID0ge1xuICBidXR0b246IFBSRSArICctYnV0dG9uJyxcbiAgaWNvbjogUFJFICsgJy1pY29uJyxcbiAgc2xpZGVyOiBQUkUgKyAnLXNsaWRlcicsXG4gIHJhdGU6IFBSRSArICctcmF0ZScsXG4gIHVwbG9hZDogJ2ZjLXVwbG9hZCcsXG4gIGNhc2NhZGVyOiBQUkUgKyAnLWNhc2NhZGVyJyxcbiAgcG9wb3ZlcjogUFJFICsgJy1wb3BvdmVyJyxcbiAgdG9vbHRpcDogUFJFICsgJy10b29sdGlwJyxcbiAgY29sb3JQaWNrZXI6IFBSRSArICctY29sb3JQaWNrZXInLFxuICB0aW1lUGlja2VyOiBQUkUgKyAnLXRpbWUtcGlja2VyJyxcbiAgdGltZVNlbGVjdDogUFJFICsgJy10aW1lLXNlbGVjdCcsXG4gIGRhdGVQaWNrZXI6IFBSRSArICctZGF0ZS1waWNrZXInLFxuICAnc3dpdGNoJzogUFJFICsgJy1zd2l0Y2gnLFxuICBzZWxlY3Q6ICdmYy1zZWxlY3QnLFxuICBjaGVja2JveDogJ2ZjLWNoZWNrYm94JyxcbiAgcmFkaW86ICdmYy1yYWRpbycsXG4gIGlucHV0TnVtYmVyOiBQUkUgKyAnLWlucHV0LW51bWJlcicsXG4gIG51bWJlcjogUFJFICsgJy1pbnB1dC1udW1iZXInLFxuICBpbnB1dDogUFJFICsgJy1pbnB1dCcsXG4gIGZvcm1JdGVtOiBQUkUgKyAnLWZvcm0taXRlbScsXG4gIGZvcm06IFBSRSArICctZm9ybScsXG4gIGZyYW1lOiAnZmMtZnJhbWUnLFxuICBjb2w6IFBSRSArICctY29sJyxcbiAgcm93OiBQUkUgKyAnLXJvdycsXG4gIHRyZWU6ICdmYy10cmVlJyxcbiAgYXV0b0NvbXBsZXRlOiBQUkUgKyAnLWF1dG9jb21wbGV0ZScsXG4gIGF1dG86IFBSRSArICctYXV0b2NvbXBsZXRlJyxcbiAgZ3JvdXA6ICdmYy1ncm91cCcsXG4gIG9iamVjdDogJ2ZjLXN1Yi1mb3JtJyxcbiAgc3ViRm9ybTogJ2ZjLXN1Yi1mb3JtJ1xufTtcblxuZnVuY3Rpb24gZ2V0Q29uZmlnKCkge1xuICByZXR1cm4ge1xuICAgIGZvcm06IHtcbiAgICAgIGlubGluZTogZmFsc2UsXG4gICAgICBsYWJlbFBvc2l0aW9uOiAncmlnaHQnLFxuICAgICAgbGFiZWxXaWR0aDogJzEyNXB4JyxcbiAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIHNpemU6IHVuZGVmaW5lZFxuICAgIH0sXG4gICAgcm93OiB7XG4gICAgICBzaG93OiB0cnVlLFxuICAgICAgZ3V0dGVyOiAwXG4gICAgfSxcbiAgICBzdWJtaXRCdG46IHtcbiAgICAgIHR5cGU6ICdwcmltYXJ5JyxcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgaW5uZXJUZXh0OiAn5o+Q5LqkJyxcbiAgICAgIHNob3c6IHRydWUsXG4gICAgICBjb2w6IHVuZGVmaW5lZCxcbiAgICAgIGNsaWNrOiB1bmRlZmluZWRcbiAgICB9LFxuICAgIHJlc2V0QnRuOiB7XG4gICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIGlubmVyVGV4dDogJ+mHjee9ricsXG4gICAgICBzaG93OiBmYWxzZSxcbiAgICAgIGNvbDogdW5kZWZpbmVkLFxuICAgICAgY2xpY2s6IHVuZGVmaW5lZFxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNUb29sdGlwKGluZm8pIHtcbiAgcmV0dXJuIGluZm8udHlwZSA9PT0gJ3Rvb2x0aXAnO1xufVxuXG5mdW5jdGlvbiB0aWR5KHByb3BzLCBuYW1lKSB7XG4gIGlmICghaGFzUHJvcGVydHkocHJvcHMsIG5hbWUpKSByZXR1cm47XG5cbiAgaWYgKGlzLlN0cmluZyhwcm9wc1tuYW1lXSkpIHtcbiAgICB2YXIgX3Byb3BzJG5hbWU7XG5cbiAgICBwcm9wc1tuYW1lXSA9IChfcHJvcHMkbmFtZSA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX3Byb3BzJG5hbWUsIG5hbWUsIHByb3BzW25hbWVdKSwgX2RlZmluZVByb3BlcnR5KF9wcm9wcyRuYW1lLCBcInNob3dcIiwgdHJ1ZSksIF9wcm9wcyRuYW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0ZhbHNlKHZhbCkge1xuICByZXR1cm4gdmFsID09PSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdGlkeUJvb2wob3B0LCBuYW1lKSB7XG4gIGlmIChoYXNQcm9wZXJ0eShvcHQsIG5hbWUpICYmICFpcy5PYmplY3Qob3B0W25hbWVdKSkge1xuICAgIG9wdFtuYW1lXSA9IHtcbiAgICAgIHNob3c6ICEhb3B0W25hbWVdXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0aWR5UnVsZShydWxlKSB7XG4gIHZhciBfcnVsZSA9IF9vYmplY3RTcHJlYWQyKHt9LCBydWxlKTtcblxuICBkZWxldGUgX3J1bGUuY2hpbGRyZW47XG4gIHJldHVybiBfcnVsZTtcbn1cblxudmFyIG1hbmFnZXIgPSB7XG4gIHZhbGlkYXRlOiBmdW5jdGlvbiB2YWxpZGF0ZSgpIHtcbiAgICB2YXIgZm9ybSA9IHRoaXMuZm9ybSgpO1xuXG4gICAgaWYgKGZvcm0pIHtcbiAgICAgIHJldHVybiBmb3JtLnZhbGlkYXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gdigpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICB2YWxpZGF0ZUZpZWxkOiBmdW5jdGlvbiB2YWxpZGF0ZUZpZWxkKGZpZWxkKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZm9ybSA9IF90aGlzLmZvcm0oKTtcblxuICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgZm9ybS52YWxpZGF0ZUZpZWxkKGZpZWxkLCBmdW5jdGlvbiAocmVzLCBlcnIpIHtcbiAgICAgICAgICBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUocmVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gIGNsZWFyVmFsaWRhdGVTdGF0ZTogZnVuY3Rpb24gY2xlYXJWYWxpZGF0ZVN0YXRlKGN0eCkge1xuICAgIHZhciBmSXRlbSA9IHRoaXMudm0ucmVmc1tjdHgud3JhcFJlZl07XG5cbiAgICBpZiAoZkl0ZW0pIHtcbiAgICAgIGZJdGVtLmNsZWFyVmFsaWRhdGUoKTtcbiAgICB9XG4gIH0sXG4gIHRpZHlPcHRpb25zOiBmdW5jdGlvbiB0aWR5T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgWydzdWJtaXRCdG4nLCAncmVzZXRCdG4nLCAncm93JywgJ2luZm8nLCAnd3JhcCcsICdjb2wnLCAndGl0bGUnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB0aWR5Qm9vbChvcHRpb25zLCBuYW1lKTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfSxcbiAgdGlkeVJ1bGU6IGZ1bmN0aW9uIHRpZHlSdWxlKF9yZWYpIHtcbiAgICB2YXIgcHJvcCA9IF9yZWYucHJvcDtcbiAgICB0aWR5KHByb3AsICd0aXRsZScpO1xuICAgIHRpZHkocHJvcCwgJ2luZm8nKTtcbiAgICByZXR1cm4gcHJvcDtcbiAgfSxcbiAgbWVyZ2VQcm9wOiBmdW5jdGlvbiBtZXJnZVByb3AoY3R4KSB7XG4gICAgY3R4LnByb3AgPSBtZXJnZVByb3BzKFt7XG4gICAgICBpbmZvOiB0aGlzLm9wdGlvbnMuaW5mbyB8fCB7fSxcbiAgICAgIHdyYXA6IHRoaXMub3B0aW9ucy53cmFwIHx8IHt9LFxuICAgICAgY29sOiB0aGlzLm9wdGlvbnMuY29sIHx8IHt9LFxuICAgICAgdGl0bGU6IHRoaXMub3B0aW9ucy50aXRsZSB8fCB7fVxuICAgIH0sIGN0eC5wcm9wXSwge1xuICAgICAgaW5mbzoge1xuICAgICAgICB0cmlnZ2VyOiAnaG92ZXInLFxuICAgICAgICBwbGFjZW1lbnQ6ICd0b3Atc3RhcnQnLFxuICAgICAgICBpY29uOiB0cnVlXG4gICAgICB9LFxuICAgICAgdGl0bGU6IHt9LFxuICAgICAgY29sOiB7XG4gICAgICAgIHNwYW46IDI0XG4gICAgICB9LFxuICAgICAgd3JhcDoge31cbiAgICB9LCB7XG4gICAgICBub3JtYWw6IFsndGl0bGUnLCAnaW5mbycsICdjb2wnLCAnd3JhcCddXG4gICAgfSk7XG4gIH0sXG4gIGdldERlZmF1bHRPcHRpb25zOiBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0Q29uZmlnKCk7XG4gIH0sXG4gIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHZhciBmb3JtID0gdGhpcy5vcHRpb25zLmZvcm07XG4gICAgdGhpcy5ydWxlID0ge1xuICAgICAgcHJvcHM6IF9vYmplY3RTcHJlYWQyKHt9LCBmb3JtKSxcbiAgICAgIG9uOiB7XG4gICAgICAgIHN1Ym1pdDogZnVuY3Rpb24gc3VibWl0KGUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImNsYXNzXCI6IFtmb3JtLmNsYXNzTmFtZSwgZm9ybVtcImNsYXNzXCJdLCAnZm9ybS1jcmVhdGUnLCB0aGlzLm9wdGlvbnMucHJldmlldyA/ICdpcy1wcmV2aWV3JyA6ICcnXSxcbiAgICAgIHN0eWxlOiBmb3JtLnN0eWxlLFxuICAgICAgdHlwZTogJ2Zvcm0nXG4gICAgfTtcbiAgfSxcbiAgYmVmb3JlUmVuZGVyOiBmdW5jdGlvbiBiZWZvcmVSZW5kZXIoKSB7XG4gICAgdmFyIGtleSA9IHRoaXMua2V5LFxuICAgICAgICByZWYgPSB0aGlzLnJlZixcbiAgICAgICAgJGhhbmRsZSA9IHRoaXMuJGhhbmRsZTtcbiAgICBleHRlbmQodGhpcy5ydWxlLCB7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIHJlZjogcmVmXG4gICAgfSk7XG4gICAgZXh0ZW5kKHRoaXMucnVsZS5wcm9wcywge1xuICAgICAgbW9kZWw6ICRoYW5kbGUuZm9ybURhdGFcbiAgICB9KTtcbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoY2hpbGRyZW4pIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIGlmIChjaGlsZHJlbi5zbG90TGVuKCkgJiYgIXRoaXMub3B0aW9ucy5wcmV2aWV3KSB7XG4gICAgICBjaGlsZHJlbi5zZXRTbG90KHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLm1ha2VGb3JtQnRuKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4kcih0aGlzLnJ1bGUsIGlzRmFsc2UodGhpcy5vcHRpb25zLnJvdy5zaG93KSA/IGNoaWxkcmVuLmdldFNsb3RzKCkgOiBbdGhpcy5tYWtlUm93KGNoaWxkcmVuKV0pO1xuICB9LFxuICBtYWtlV3JhcDogZnVuY3Rpb24gbWFrZVdyYXAoY3R4LCBjaGlsZHJlbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIHJ1bGUgPSBjdHgucHJvcDtcbiAgICB2YXIgdW5pID0gXCJcIi5jb25jYXQodGhpcy5rZXkpLmNvbmNhdChjdHgua2V5KTtcbiAgICB2YXIgY29sID0gcnVsZS5jb2w7XG4gICAgdmFyIGlzVGl0bGUgPSB0aGlzLmlzVGl0bGUocnVsZSkgJiYgcnVsZS53cmFwLnRpdGxlICE9PSBmYWxzZTtcbiAgICB2YXIgbGFiZWxXaWR0aCA9ICFjb2wubGFiZWxXaWR0aCAmJiAhaXNUaXRsZSA/IDAgOiBjb2wubGFiZWxXaWR0aDtcbiAgICB2YXIgX3RoaXMkcnVsZSRwcm9wcyA9IHRoaXMucnVsZS5wcm9wcyxcbiAgICAgICAgaW5saW5lID0gX3RoaXMkcnVsZSRwcm9wcy5pbmxpbmUsXG4gICAgICAgIF9jb2wgPSBfdGhpcyRydWxlJHByb3BzLmNvbDtcbiAgICBkZWxldGUgcnVsZS53cmFwLnRpdGxlO1xuICAgIHZhciBpdGVtID0gaXNGYWxzZShydWxlLndyYXAuc2hvdykgPyBjaGlsZHJlbiA6IHRoaXMuJHIobWVyZ2VQcm9wcyhbcnVsZS53cmFwLCB7XG4gICAgICBwcm9wczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe1xuICAgICAgICBsYWJlbFdpZHRoOiBsYWJlbFdpZHRoID09PSB2b2lkIDAgPyBsYWJlbFdpZHRoIDogdG9TdHJpbmcobGFiZWxXaWR0aCksXG4gICAgICAgIGxhYmVsOiBpc1RpdGxlID8gcnVsZS50aXRsZS50aXRsZSA6IHVuZGVmaW5lZFxuICAgICAgfSwgdGlkeVJ1bGUocnVsZS53cmFwIHx8IHt9KSksIHt9LCB7XG4gICAgICAgIHByb3A6IGN0eC5pZCxcbiAgICAgICAgcnVsZXM6IGN0eC5pbmplY3RWYWxpZGF0ZSgpXG4gICAgICB9KSxcbiAgICAgIFwiY2xhc3NcIjogcnVsZS5jbGFzc05hbWUsXG4gICAgICBrZXk6IFwiXCIuY29uY2F0KHVuaSwgXCJmaVwiKSxcbiAgICAgIHJlZjogY3R4LndyYXBSZWYsXG4gICAgICB0eXBlOiAnZm9ybUl0ZW0nXG4gICAgfV0pLCBfb2JqZWN0U3ByZWFkMih7XG4gICAgICBcImRlZmF1bHRcIjogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICAgIH1cbiAgICB9LCBpc1RpdGxlID8ge1xuICAgICAgbGFiZWw6IGZ1bmN0aW9uIGxhYmVsKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMzLm1ha2VJbmZvKHJ1bGUsIHVuaSwgY3R4KTtcbiAgICAgIH1cbiAgICB9IDoge30pKTtcbiAgICByZXR1cm4gaW5saW5lID09PSB0cnVlIHx8IGlzRmFsc2UoX2NvbCkgfHwgaXNGYWxzZShjb2wuc2hvdykgPyBpdGVtIDogdGhpcy5tYWtlQ29sKHJ1bGUsIHVuaSwgW2l0ZW1dKTtcbiAgfSxcbiAgaXNUaXRsZTogZnVuY3Rpb24gaXNUaXRsZShydWxlKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5mb3JtLnRpdGxlID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciB0aXRsZSA9IHJ1bGUudGl0bGU7XG4gICAgcmV0dXJuICEoIXRpdGxlLnRpdGxlICYmICF0aXRsZVtcIm5hdGl2ZVwiXSB8fCBpc0ZhbHNlKHRpdGxlLnNob3cpKTtcbiAgfSxcbiAgbWFrZUluZm86IGZ1bmN0aW9uIG1ha2VJbmZvKHJ1bGUsIHVuaSwgY3R4KSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgdGl0bGVQcm9wID0gX29iamVjdFNwcmVhZDIoe30sIHJ1bGUudGl0bGUpO1xuXG4gICAgdmFyIGluZm9Qcm9wID0gX29iamVjdFNwcmVhZDIoe30sIHJ1bGUuaW5mbyk7XG5cbiAgICB2YXIgaXNUaXAgPSBpc1Rvb2x0aXAoaW5mb1Byb3ApO1xuICAgIHZhciBmb3JtID0gdGhpcy5vcHRpb25zLmZvcm07XG4gICAgdmFyIHRpdGxlU2xvdCA9IHRoaXMuZ2V0U2xvdCgndGl0bGUnKTtcbiAgICB2YXIgY2hpbGRyZW4gPSBbdGl0bGVTbG90ID8gdGl0bGVTbG90KHtcbiAgICAgIHRpdGxlOiB0aXRsZVByb3AudGl0bGUgfHwgJycsXG4gICAgICBydWxlOiBjdHgucnVsZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9uc1xuICAgIH0pIDogKHRpdGxlUHJvcC50aXRsZSB8fCAnJykgKyAoZm9ybS5sYWJlbFN1ZmZpeCB8fCBmb3JtWydsYWJlbC1zdWZmaXgnXSB8fCAnJyldO1xuXG4gICAgaWYgKCFpc0ZhbHNlKGluZm9Qcm9wLnNob3cpICYmIChpbmZvUHJvcC5pbmZvIHx8IGluZm9Qcm9wW1wibmF0aXZlXCJdKSAmJiAhaXNGYWxzZShpbmZvUHJvcC5pY29uKSkge1xuICAgICAgdmFyIHByb3AgPSB7XG4gICAgICAgIHR5cGU6IGluZm9Qcm9wLnR5cGUgfHwgJ3BvcG92ZXInLFxuICAgICAgICBwcm9wczogdGlkeVJ1bGUoaW5mb1Byb3ApLFxuICAgICAgICBrZXk6IFwiXCIuY29uY2F0KHVuaSwgXCJwb3BcIilcbiAgICAgIH07XG4gICAgICBkZWxldGUgcHJvcC5wcm9wcy5pY29uO1xuICAgICAgZGVsZXRlIHByb3AucHJvcHMuc2hvdztcbiAgICAgIGRlbGV0ZSBwcm9wLnByb3BzLmluZm87XG4gICAgICBkZWxldGUgcHJvcC5wcm9wcy5hbGlnbjtcbiAgICAgIGRlbGV0ZSBwcm9wLnByb3BzW1wibmF0aXZlXCJdO1xuICAgICAgdmFyIGZpZWxkID0gJ2NvbnRlbnQnO1xuXG4gICAgICBpZiAoaW5mb1Byb3AuaW5mbyAmJiAhaGFzUHJvcGVydHkocHJvcC5wcm9wcywgZmllbGQpKSB7XG4gICAgICAgIHByb3AucHJvcHNbZmllbGRdID0gaW5mb1Byb3AuaW5mbztcbiAgICAgIH1cblxuICAgICAgY2hpbGRyZW5baW5mb1Byb3AuYWxpZ24gIT09ICdsZWZ0JyA/ICd1bnNoaWZ0JyA6ICdwdXNoJ10odGhpcy4kcihtZXJnZVByb3BzKFtpbmZvUHJvcCwgcHJvcF0pLCBfZGVmaW5lUHJvcGVydHkoe30sIHRpdGxlUHJvcC5zbG90IHx8IChpc1RpcCA/ICdkZWZhdWx0JyA6ICdyZWZlcmVuY2UnKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXM0LiRyKHtcbiAgICAgICAgICB0eXBlOiAnRWxJY29uJyxcbiAgICAgICAgICBzdHlsZTogJ3RvcDoycHgnLFxuICAgICAgICAgIGtleTogXCJcIi5jb25jYXQodW5pLCBcImlcIilcbiAgICAgICAgfSwge1xuICAgICAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczQuJHIoe1xuICAgICAgICAgICAgICB0eXBlOiBpbmZvUHJvcC5pY29uID09PSB0cnVlID8gJ2ljb24td2FybmluZycgOiBpbmZvUHJvcC5pY29uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICB2YXIgX3Byb3AgPSBtZXJnZVByb3BzKFt0aXRsZVByb3AsIHtcbiAgICAgIHByb3BzOiB0aWR5UnVsZSh0aXRsZVByb3ApLFxuICAgICAga2V5OiBcIlwiLmNvbmNhdCh1bmksIFwidGl0XCIpLFxuICAgICAgdHlwZTogdGl0bGVQcm9wLnR5cGUgfHwgJ3NwYW4nXG4gICAgfV0pO1xuXG4gICAgZGVsZXRlIF9wcm9wLnByb3BzLnNob3c7XG4gICAgZGVsZXRlIF9wcm9wLnByb3BzLnRpdGxlO1xuICAgIGRlbGV0ZSBfcHJvcC5wcm9wc1tcIm5hdGl2ZVwiXTtcbiAgICByZXR1cm4gdGhpcy4kcihfcHJvcCwgY2hpbGRyZW4pO1xuICB9LFxuICBtYWtlQ29sOiBmdW5jdGlvbiBtYWtlQ29sKHJ1bGUsIHVuaSwgY2hpbGRyZW4pIHtcbiAgICB2YXIgY29sID0gcnVsZS5jb2w7XG4gICAgcmV0dXJuIHRoaXMuJHIoe1xuICAgICAgXCJjbGFzc1wiOiBjb2xbXCJjbGFzc1wiXSxcbiAgICAgIHR5cGU6ICdjb2wnLFxuICAgICAgcHJvcHM6IGNvbCB8fCB7XG4gICAgICAgIHNwYW46IDI0XG4gICAgICB9LFxuICAgICAga2V5OiBcIlwiLmNvbmNhdCh1bmksIFwiY29sXCIpXG4gICAgfSwgY2hpbGRyZW4pO1xuICB9LFxuICBtYWtlUm93OiBmdW5jdGlvbiBtYWtlUm93KGNoaWxkcmVuKSB7XG4gICAgdmFyIHJvdyA9IHRoaXMub3B0aW9ucy5yb3cgfHwge307XG4gICAgcmV0dXJuIHRoaXMuJHIoe1xuICAgICAgdHlwZTogJ3JvdycsXG4gICAgICBwcm9wczogcm93LFxuICAgICAgXCJjbGFzc1wiOiByb3dbXCJjbGFzc1wiXSxcbiAgICAgIGtleTogXCJcIi5jb25jYXQodGhpcy5rZXksIFwicm93XCIpXG4gICAgfSwgY2hpbGRyZW4pO1xuICB9LFxuICBtYWtlRm9ybUJ0bjogZnVuY3Rpb24gbWFrZUZvcm1CdG4oKSB7XG4gICAgdmFyIHZuID0gW107XG5cbiAgICBpZiAoIWlzRmFsc2UodGhpcy5vcHRpb25zLnN1Ym1pdEJ0bi5zaG93KSkge1xuICAgICAgdm4ucHVzaCh0aGlzLm1ha2VTdWJtaXRCdG4oKSk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0ZhbHNlKHRoaXMub3B0aW9ucy5yZXNldEJ0bi5zaG93KSkge1xuICAgICAgdm4ucHVzaCh0aGlzLm1ha2VSZXNldEJ0bigpKTtcbiAgICB9XG5cbiAgICBpZiAoIXZuLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpdGVtID0gdGhpcy4kcih7XG4gICAgICB0eXBlOiAnZm9ybUl0ZW0nLFxuICAgICAga2V5OiBcIlwiLmNvbmNhdCh0aGlzLmtleSwgXCJmYlwiKVxuICAgIH0sIHZuKTtcbiAgICByZXR1cm4gdGhpcy5ydWxlLnByb3BzLmlubGluZSA9PT0gdHJ1ZSA/IGl0ZW0gOiB0aGlzLiRyKHtcbiAgICAgIHR5cGU6ICdjb2wnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgc3BhbjogMjRcbiAgICAgIH0sXG4gICAgICBrZXk6IFwiXCIuY29uY2F0KHRoaXMua2V5LCBcImZjXCIpXG4gICAgfSwgW2l0ZW1dKTtcbiAgfSxcbiAgbWFrZVJlc2V0QnRuOiBmdW5jdGlvbiBtYWtlUmVzZXRCdG4oKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICB2YXIgcmVzZXRCdG4gPSBfb2JqZWN0U3ByZWFkMih7fSwgdGhpcy5vcHRpb25zLnJlc2V0QnRuKTtcblxuICAgIHZhciBpbm5lclRleHQgPSByZXNldEJ0bi5pbm5lclRleHQ7XG4gICAgZGVsZXRlIHJlc2V0QnRuLmlubmVyVGV4dDtcbiAgICBkZWxldGUgcmVzZXRCdG4uY2xpY2s7XG4gICAgZGVsZXRlIHJlc2V0QnRuLmNvbDtcbiAgICBkZWxldGUgcmVzZXRCdG4uc2hvdztcbiAgICByZXR1cm4gdGhpcy4kcih7XG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIHByb3BzOiByZXNldEJ0bixcbiAgICAgIFwiY2xhc3NcIjogJ19mYy1yZXNldC1idG4nLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgd2lkdGg6IHJlc2V0QnRuLndpZHRoXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIGNsaWNrKCkge1xuICAgICAgICAgIHZhciBmQXBpID0gX3RoaXM1LiRoYW5kbGUuYXBpO1xuICAgICAgICAgIF90aGlzNS5vcHRpb25zLnJlc2V0QnRuLmNsaWNrID8gX3RoaXM1Lm9wdGlvbnMucmVzZXRCdG4uY2xpY2soZkFwaSkgOiBmQXBpLnJlc2V0RmllbGRzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBrZXk6IFwiXCIuY29uY2F0KHRoaXMua2V5LCBcImIyXCIpXG4gICAgfSwgW2lubmVyVGV4dF0pO1xuICB9LFxuICBtYWtlU3VibWl0QnRuOiBmdW5jdGlvbiBtYWtlU3VibWl0QnRuKCkge1xuICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgdmFyIHN1Ym1pdEJ0biA9IF9vYmplY3RTcHJlYWQyKHt9LCB0aGlzLm9wdGlvbnMuc3VibWl0QnRuKTtcblxuICAgIHZhciBpbm5lclRleHQgPSBzdWJtaXRCdG4uaW5uZXJUZXh0O1xuICAgIGRlbGV0ZSBzdWJtaXRCdG4uaW5uZXJUZXh0O1xuICAgIGRlbGV0ZSBzdWJtaXRCdG4uY2xpY2s7XG4gICAgZGVsZXRlIHN1Ym1pdEJ0bi5jb2w7XG4gICAgZGVsZXRlIHN1Ym1pdEJ0bi5zaG93O1xuICAgIHJldHVybiB0aGlzLiRyKHtcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgcHJvcHM6IHN1Ym1pdEJ0bixcbiAgICAgIFwiY2xhc3NcIjogJ19mYy1zdWJtaXQtYnRuJyxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHdpZHRoOiBzdWJtaXRCdG4ud2lkdGhcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24gY2xpY2soKSB7XG4gICAgICAgICAgdmFyIGZBcGkgPSBfdGhpczYuJGhhbmRsZS5hcGk7XG4gICAgICAgICAgX3RoaXM2Lm9wdGlvbnMuc3VibWl0QnRuLmNsaWNrID8gX3RoaXM2Lm9wdGlvbnMuc3VibWl0QnRuLmNsaWNrKGZBcGkpIDogZkFwaS5zdWJtaXQoKVtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGtleTogXCJcIi5jb25jYXQodGhpcy5rZXksIFwiYjFcIilcbiAgICB9LCBbaW5uZXJUZXh0XSk7XG4gIH1cbn07XG5cbnZhciBtYWtlciQxID0ge307XG51c2VBbGlhcyhtYWtlciQxKTtcbnVzZVNlbGVjdChtYWtlciQxKTtcbnVzZVRyZWUobWFrZXIkMSk7XG51c2VVcGxvYWQobWFrZXIkMSk7XG51c2VGcmFtZShtYWtlciQxKTtcblxuZnVuY3Rpb24gdXNlQWxpYXMobWFrZXIpIHtcbiAgWydncm91cCcsICd0cmVlJywgJ3N3aXRjaCcsICd1cGxvYWQnLCAnYXV0b0NvbXBsZXRlJywgJ2NoZWNrYm94JywgJ2Nhc2NhZGVyJywgJ2NvbG9yUGlja2VyJywgJ2RhdGVQaWNrZXInLCAnZnJhbWUnLCAnaW5wdXROdW1iZXInLCAncmFkaW8nLCAncmF0ZSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBtYWtlcltuYW1lXSA9IGNyZWF0b3JGYWN0b3J5KG5hbWUpO1xuICB9KTtcbiAgbWFrZXIuYXV0byA9IG1ha2VyLmF1dG9Db21wbGV0ZTtcbiAgbWFrZXIubnVtYmVyID0gbWFrZXIuaW5wdXROdW1iZXI7XG4gIG1ha2VyLmNvbG9yID0gbWFrZXIuY29sb3JQaWNrZXI7XG59XG5cbmZ1bmN0aW9uIHVzZVNlbGVjdChtYWtlcikge1xuICB2YXIgc2VsZWN0ID0gJ3NlbGVjdCc7XG4gIHZhciBtdWx0aXBsZSA9ICdtdWx0aXBsZSc7XG4gIG1ha2VyWydzZWxlY3RNdWx0aXBsZSddID0gY3JlYXRvckZhY3Rvcnkoc2VsZWN0LCBfZGVmaW5lUHJvcGVydHkoe30sIG11bHRpcGxlLCB0cnVlKSk7XG4gIG1ha2VyWydzZWxlY3RPbmUnXSA9IGNyZWF0b3JGYWN0b3J5KHNlbGVjdCwgX2RlZmluZVByb3BlcnR5KHt9LCBtdWx0aXBsZSwgZmFsc2UpKTtcbn1cblxuZnVuY3Rpb24gdXNlVHJlZShtYWtlcikge1xuICB2YXIgbmFtZSA9ICd0cmVlJztcbiAgdmFyIHR5cGVzID0ge1xuICAgICd0cmVlU2VsZWN0ZWQnOiAnc2VsZWN0ZWQnLFxuICAgICd0cmVlQ2hlY2tlZCc6ICdjaGVja2VkJ1xuICB9O1xuICBPYmplY3Qua2V5cyh0eXBlcykucmVkdWNlKGZ1bmN0aW9uIChtLCBrZXkpIHtcbiAgICBtW2tleV0gPSBjcmVhdG9yRmFjdG9yeShuYW1lLCB7XG4gICAgICB0eXBlOiB0eXBlc1trZXldXG4gICAgfSk7XG4gICAgcmV0dXJuIG07XG4gIH0sIG1ha2VyKTtcbn1cblxuZnVuY3Rpb24gdXNlVXBsb2FkKG1ha2VyKSB7XG4gIHZhciBuYW1lID0gJ3VwbG9hZCc7XG4gIHZhciB0eXBlcyA9IHtcbiAgICBpbWFnZTogWydpbWFnZScsIDBdLFxuICAgIGZpbGU6IFsnZmlsZScsIDBdLFxuICAgIHVwbG9hZEZpbGVPbmU6IFsnZmlsZScsIDFdLFxuICAgIHVwbG9hZEltYWdlT25lOiBbJ2ltYWdlJywgMV1cbiAgfTtcbiAgT2JqZWN0LmtleXModHlwZXMpLnJlZHVjZShmdW5jdGlvbiAobSwga2V5KSB7XG4gICAgbVtrZXldID0gY3JlYXRvckZhY3RvcnkobmFtZSwgZnVuY3Rpb24gKG0pIHtcbiAgICAgIHJldHVybiBtLnByb3BzKHtcbiAgICAgICAgdXBsb2FkVHlwZTogdHlwZXNba2V5XVswXSxcbiAgICAgICAgbWF4TGVuZ3RoOiB0eXBlc1trZXldWzFdXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gbTtcbiAgfSwgbWFrZXIpO1xuICBtYWtlci51cGxvYWRJbWFnZSA9IG1ha2VyLmltYWdlO1xuICBtYWtlci51cGxvYWRGaWxlID0gbWFrZXIuZmlsZTtcbn1cblxuZnVuY3Rpb24gdXNlRnJhbWUobWFrZXIpIHtcbiAgdmFyIHR5cGVzID0ge1xuICAgIGZyYW1lSW5wdXRzOiBbJ2lucHV0JywgMF0sXG4gICAgZnJhbWVGaWxlczogWydmaWxlJywgMF0sXG4gICAgZnJhbWVJbWFnZXM6IFsnaW1hZ2UnLCAwXSxcbiAgICBmcmFtZUlucHV0T25lOiBbJ2lucHV0JywgMV0sXG4gICAgZnJhbWVGaWxlT25lOiBbJ2ZpbGUnLCAxXSxcbiAgICBmcmFtZUltYWdlT25lOiBbJ2ltYWdlJywgMV1cbiAgfTtcbiAgT2JqZWN0LmtleXModHlwZXMpLnJlZHVjZShmdW5jdGlvbiAobWFrZXIsIGtleSkge1xuICAgIG1ha2VyW2tleV0gPSBjcmVhdG9yRmFjdG9yeSgnZnJhbWUnLCBmdW5jdGlvbiAobSkge1xuICAgICAgcmV0dXJuIG0ucHJvcHMoe1xuICAgICAgICB0eXBlOiB0eXBlc1trZXldWzBdLFxuICAgICAgICBtYXhMZW5ndGg6IHR5cGVzW2tleV1bMV1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBtYWtlcjtcbiAgfSwgbWFrZXIpO1xuICBtYWtlci5mcmFtZUlucHV0ID0gbWFrZXIuZnJhbWVJbnB1dHM7XG4gIG1ha2VyLmZyYW1lRmlsZSA9IG1ha2VyLmZyYW1lRmlsZXM7XG4gIG1ha2VyLmZyYW1lSW1hZ2UgPSBtYWtlci5mcmFtZUltYWdlcztcbiAgcmV0dXJuIG1ha2VyO1xufVxuXG52YXIgY3NzXzI0OHogPSBcIi5mb3JtLWNyZWF0ZSAuZm9ybS1jcmVhdGUgLmVsLWZvcm0taXRlbXttYXJnaW4tYm90dG9tOjIycHh9LmZvcm0tY3JlYXRle3dpZHRoOjEwMCV9LmZvcm0tY3JlYXRlIC5mYy1ub25lLC5mb3JtLWNyZWF0ZS5pcy1wcmV2aWV3IC5lbC1mb3JtLWl0ZW0uaXMtcmVxdWlyZWQ+LmVsLWZvcm0taXRlbV9fbGFiZWwtd3JhcD4uZWwtZm9ybS1pdGVtX19sYWJlbDpiZWZvcmUsLmZvcm0tY3JlYXRlLmlzLXByZXZpZXcgLmVsLWZvcm0taXRlbS5pcy1yZXF1aXJlZD4uZWwtZm9ybS1pdGVtX19sYWJlbDpiZWZvcmUsLmZvcm0tY3JlYXRlLmlzLXByZXZpZXcgLmZjLWNsb2Nre2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmZjLXdyYXAtbGVmdCAuZWwtZm9ybS1pdGVtX19sYWJlbHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmZjLXdyYXAtdG9wLmVsLWZvcm0taXRlbXtkaXNwbGF5OmJsb2NrfS5mYy13cmFwLXRvcC5lbC1mb3JtLWl0ZW0gLmVsLWZvcm0taXRlbV9fbGFiZWx7ZGlzcGxheTpibG9jaztoZWlnaHQ6YXV0bztsaW5lLWhlaWdodDoyMnB4O21hcmdpbi1ib3R0b206OHB4O3RleHQtYWxpZ246bGVmdH0uZWwtZm9ybS0tbGFyZ2UgLmZjLXdyYXAtdG9wLmVsLWZvcm0taXRlbSAuZWwtZm9ybS1pdGVtX19sYWJlbHtsaW5lLWhlaWdodDoyMnB4O21hcmdpbi1ib3R0b206MTJweH0uZWwtZm9ybS0tZGVmYXVsdCAuZmMtd3JhcC10b3AuZWwtZm9ybS1pdGVtIC5lbC1mb3JtLWl0ZW1fX2xhYmVse2xpbmUtaGVpZ2h0OjIycHg7bWFyZ2luLWJvdHRvbTo4cHh9LmVsLWZvcm0tLXNtYWxsIC5mYy13cmFwLXRvcC5lbC1mb3JtLWl0ZW0gLmVsLWZvcm0taXRlbV9fbGFiZWx7bGluZS1oZWlnaHQ6MjBweDttYXJnaW4tYm90dG9tOjRweH1cIjtcbnN0eWxlSW5qZWN0KGNzc18yNDh6KTtcblxuZnVuY3Rpb24gdGlkeUJ0blByb3AoYnRuLCBkZWYpIHtcbiAgaWYgKGlzLkJvb2xlYW4oYnRuKSkgYnRuID0ge1xuICAgIHNob3c6IGJ0blxuICB9O2Vsc2UgaWYgKCFpcy5VbmRlZihidG4pICYmICFpcy5PYmplY3QoYnRuKSkgYnRuID0ge1xuICAgIHNob3c6IGRlZlxuICB9O1xuICByZXR1cm4gYnRuO1xufVxuXG5mdW5jdGlvbiBleHRlbmRBcGkoYXBpLCBoKSB7XG4gIHJldHVybiB7XG4gICAgZm9ybUVsOiBmdW5jdGlvbiBmb3JtRWwoKSB7XG4gICAgICByZXR1cm4gaC4kbWFuYWdlci5mb3JtKCk7XG4gICAgfSxcbiAgICB3cmFwRWw6IGZ1bmN0aW9uIHdyYXBFbChpZCkge1xuICAgICAgdmFyIGN0eCA9IGguZ2V0RmllbGRDdHgoaWQpO1xuICAgICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICAgIHJldHVybiBoLnZtLnJlZnNbY3R4LndyYXBSZWZdO1xuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIHZhbGlkYXRlKGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgZm9ybXMgPSBhcGkuY2hpbGRyZW47XG4gICAgICAgIHZhciBhbGwgPSBbaC4kbWFuYWdlci52YWxpZGF0ZSgpXTtcbiAgICAgICAgZm9ybXMuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICAgIGFsbC5wdXNoKHYudmFsaWRhdGUoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBQcm9taXNlLmFsbChhbGwpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soZSk7XG4gICAgICAgICAgaC52bS5lbWl0KCd2YWxpZGF0ZS1mYWlsJywgZSwge1xuICAgICAgICAgICAgYXBpOiBhcGlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHZhbGlkYXRlRmllbGQ6IGZ1bmN0aW9uIHZhbGlkYXRlRmllbGQoZmllbGQsIGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgY3R4ID0gaC5nZXRGaWVsZEN0eChmaWVsZCk7XG4gICAgICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgICAgIHZhciBzdWIgPSBoLnN1YkZvcm1bY3R4LmlkXTtcbiAgICAgICAgdmFyIGFsbCA9IFtoLiRtYW5hZ2VyLnZhbGlkYXRlRmllbGQoY3R4LmlkKV07XG4gICAgICAgIHRvQXJyYXkoc3ViKS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgYWxsLnB1c2godi52YWxpZGF0ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFByb21pc2UuYWxsKGFsbCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhlKTtcbiAgICAgICAgICBoLnZtLmVtaXQoJ3ZhbGlkYXRlLWZpZWxkLWZhaWwnLCBlLCB7XG4gICAgICAgICAgICBmaWVsZDogZmllbGQsXG4gICAgICAgICAgICBhcGk6IGFwaVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xlYXJWYWxpZGF0ZVN0YXRlOiBmdW5jdGlvbiBjbGVhclZhbGlkYXRlU3RhdGUoZmllbGRzKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgY2xlYXJTdWIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gICAgICBhcGkuaGVscGVyLnRpZHlGaWVsZHMoZmllbGRzKS5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgICBpZiAoY2xlYXJTdWIpIF90aGlzLmNsZWFyU3ViVmFsaWRhdGVTdGF0ZShmaWVsZCk7XG4gICAgICAgIGguZ2V0Q3R4cyhmaWVsZCkuZm9yRWFjaChmdW5jdGlvbiAoY3R4KSB7XG4gICAgICAgICAgaC4kbWFuYWdlci5jbGVhclZhbGlkYXRlU3RhdGUoY3R4KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNsZWFyU3ViVmFsaWRhdGVTdGF0ZTogZnVuY3Rpb24gY2xlYXJTdWJWYWxpZGF0ZVN0YXRlKGZpZWxkcykge1xuICAgICAgYXBpLmhlbHBlci50aWR5RmllbGRzKGZpZWxkcykuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgaC5nZXRDdHhzKGZpZWxkKS5mb3JFYWNoKGZ1bmN0aW9uIChjdHgpIHtcbiAgICAgICAgICB2YXIgc3ViRm9ybSA9IGguc3ViRm9ybVtjdHguaWRdO1xuICAgICAgICAgIGlmICghc3ViRm9ybSkgcmV0dXJuO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3ViRm9ybSkpIHtcbiAgICAgICAgICAgIHN1YkZvcm0uZm9yRWFjaChmdW5jdGlvbiAoZm9ybSkge1xuICAgICAgICAgICAgICBmb3JtLmNsZWFyVmFsaWRhdGVTdGF0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdWJGb3JtKSB7XG4gICAgICAgICAgICBzdWJGb3JtLmNsZWFyVmFsaWRhdGVTdGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGJ0bjoge1xuICAgICAgbG9hZGluZzogZnVuY3Rpb24gbG9hZGluZygpIHtcbiAgICAgICAgdmFyIF9sb2FkaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0cnVlO1xuXG4gICAgICAgIGFwaS5zdWJtaXRCdG5Qcm9wcyh7XG4gICAgICAgICAgbG9hZGluZzogISFfbG9hZGluZ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlZDogZnVuY3Rpb24gZGlzYWJsZWQoKSB7XG4gICAgICAgIHZhciBfZGlzYWJsZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRydWU7XG5cbiAgICAgICAgYXBpLnN1Ym1pdEJ0blByb3BzKHtcbiAgICAgICAgICBkaXNhYmxlZDogISFfZGlzYWJsZWRcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgc2hvdzogZnVuY3Rpb24gc2hvdygpIHtcbiAgICAgICAgdmFyIGlzU2hvdyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgICAgICAgYXBpLnN1Ym1pdEJ0blByb3BzKHtcbiAgICAgICAgICBzaG93OiAhIWlzU2hvd1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlc2V0QnRuOiB7XG4gICAgICBsb2FkaW5nOiBmdW5jdGlvbiBsb2FkaW5nKCkge1xuICAgICAgICB2YXIgX2xvYWRpbmcyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0cnVlO1xuXG4gICAgICAgIGFwaS5yZXNldEJ0blByb3BzKHtcbiAgICAgICAgICBsb2FkaW5nOiAhIV9sb2FkaW5nMlxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlZDogZnVuY3Rpb24gZGlzYWJsZWQoKSB7XG4gICAgICAgIHZhciBfZGlzYWJsZWQyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0cnVlO1xuXG4gICAgICAgIGFwaS5yZXNldEJ0blByb3BzKHtcbiAgICAgICAgICBkaXNhYmxlZDogISFfZGlzYWJsZWQyXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHNob3c6IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICAgIHZhciBpc1Nob3cgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRydWU7XG4gICAgICAgIGFwaS5yZXNldEJ0blByb3BzKHtcbiAgICAgICAgICBzaG93OiAhIWlzU2hvd1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHN1Ym1pdEJ0blByb3BzOiBmdW5jdGlvbiBzdWJtaXRCdG5Qcm9wcygpIHtcbiAgICAgIHZhciBwcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICB2YXIgYnRuID0gdGlkeUJ0blByb3AoaC5vcHRpb25zLnN1Ym1pdEJ0biwgdHJ1ZSk7XG4gICAgICBleHRlbmQoYnRuLCBwcm9wcyk7XG4gICAgICBoLm9wdGlvbnMuc3VibWl0QnRuID0gYnRuO1xuICAgICAgYXBpLnJlZnJlc2hPcHRpb25zKCk7XG4gICAgfSxcbiAgICByZXNldEJ0blByb3BzOiBmdW5jdGlvbiByZXNldEJ0blByb3BzKCkge1xuICAgICAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAgIHZhciBidG4gPSB0aWR5QnRuUHJvcChoLm9wdGlvbnMucmVzZXRCdG4sIGZhbHNlKTtcbiAgICAgIGV4dGVuZChidG4sIHByb3BzKTtcbiAgICAgIGgub3B0aW9ucy5yZXNldEJ0biA9IGJ0bjtcbiAgICAgIGFwaS5yZWZyZXNoT3B0aW9ucygpO1xuICAgIH0sXG4gICAgc3VibWl0OiBmdW5jdGlvbiBzdWJtaXQoc3VjY2Vzc0ZuLCBmYWlsRm4pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGFwaS52YWxpZGF0ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBmb3JtRGF0YSA9IGFwaS5mb3JtRGF0YSgpO1xuICAgICAgICAgIGlzLkZ1bmN0aW9uKHN1Y2Nlc3NGbikgJiYgaW52b2tlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzdWNjZXNzRm4oZm9ybURhdGEsIGFwaSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaXMuRnVuY3Rpb24oaC5vcHRpb25zLm9uU3VibWl0KSAmJiBpbnZva2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGgub3B0aW9ucy5vblN1Ym1pdChmb3JtRGF0YSwgYXBpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBoLnZtLmVtaXQoJ3N1Ym1pdCcsIGZvcm1EYXRhLCBhcGkpO1xuICAgICAgICAgIHJlc29sdmUoZm9ybURhdGEpO1xuICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaXMuRnVuY3Rpb24oZmFpbEZuKSAmJiBpbnZva2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhaWxGbi5hcHBseSh2b2lkIDAsIFthcGldLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVqZWN0LmFwcGx5KHZvaWQgMCwgYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgcmVxdWlyZWQgPSB7XG4gIG5hbWU6ICdyZXF1aXJlZCcsXG4gIGxvYWQ6IGZ1bmN0aW9uIGxvYWQoaW5qZWN0LCBydWxlLCBhcGkpIHtcbiAgICB2YXIgdmFsID0gcGFyc2VWYWwoaW5qZWN0LmdldFZhbHVlKCkpO1xuXG4gICAgaWYgKHZhbC5yZXF1aXJlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGluamVjdC5jbGVhclByb3AoKTtcbiAgICAgIGFwaS5jbGVhclZhbGlkYXRlU3RhdGUoW3J1bGUuZmllbGRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZhbGlkYXRlID0gX29iamVjdFNwcmVhZDIoe1xuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IoXywgdiwgY2FsbCkge1xuICAgICAgICAgIGlzLmVtcHR5KHYpID8gY2FsbCh2YWxpZGF0ZS5tZXNzYWdlKSA6IGNhbGwoKTtcbiAgICAgICAgfVxuICAgICAgfSwgdmFsKTtcblxuICAgICAgaWYgKCF2YWxpZGF0ZS5tZXNzYWdlKSB7XG4gICAgICAgIHZhciB0aXRsZSA9IHJ1bGUudGl0bGUgfHwgJyc7XG4gICAgICAgIHZhbGlkYXRlLm1lc3NhZ2UgPSAoKF90eXBlb2YodGl0bGUpID09PSAnb2JqZWN0JyA/IHRpdGxlLnRpdGxlIDogdGl0bGUpIHx8ICcnKSArICfkuI3og73kuLrnqbonO1xuICAgICAgfVxuXG4gICAgICBpbmplY3QuZ2V0UHJvcCgpLnZhbGlkYXRlID0gW3ZhbGlkYXRlXTtcbiAgICB9XG5cbiAgICBhcGkuc3luYyhydWxlKTtcbiAgfSxcbiAgd2F0Y2g6IGZ1bmN0aW9uIHdhdGNoKCkge1xuICAgIHJlcXVpcmVkLmxvYWQuYXBwbHkocmVxdWlyZWQsIGFyZ3VtZW50cyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHBhcnNlVmFsKHZhbCkge1xuICBpZiAoaXMuQm9vbGVhbih2YWwpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVpcmVkOiB2YWxcbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzLlN0cmluZyh2YWwpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IHZhbFxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXMuVW5kZWYodmFsKSkge1xuICAgIHJldHVybiB7XG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzLkZ1bmN0aW9uKHZhbCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWRhdG9yOiB2YWxcbiAgICB9O1xuICB9IGVsc2UgaWYgKCFpcy5PYmplY3QodmFsKSkge1xuICAgIHJldHVybiB7fTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc3RhbGwoRm9ybUNyZWF0ZSkge1xuICBGb3JtQ3JlYXRlLmNvbXBvbmVudEFsaWFzKGFsaWFzKTtcbiAgY29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChjb21wb25lbnQpIHtcbiAgICBGb3JtQ3JlYXRlLmNvbXBvbmVudChjb21wb25lbnQubmFtZSwgY29tcG9uZW50KTtcbiAgfSk7XG4gIEZvcm1DcmVhdGUucmVnaXN0ZXIocmVxdWlyZWQpO1xuICBwYXJzZXJzLmZvckVhY2goZnVuY3Rpb24gKHBhcnNlcikge1xuICAgIEZvcm1DcmVhdGUucGFyc2VyKHBhcnNlcik7XG4gIH0pO1xuICBPYmplY3Qua2V5cyhtYWtlciQxKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgRm9ybUNyZWF0ZS5tYWtlcltuYW1lXSA9IG1ha2VyJDFbbmFtZV07XG4gIH0pO1xuXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuRWxlbWVudFBsdXMpIHtcbiAgICBGb3JtQ3JlYXRlLnVzZUFwcChmdW5jdGlvbiAoXywgYXBwKSB7XG4gICAgICBhcHAudXNlKHdpbmRvdy5FbGVtZW50UGx1cyk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZWxtRm9ybUNyZWF0ZSgpIHtcbiAgcmV0dXJuIEZvcm1DcmVhdGVGYWN0b3J5KHtcbiAgICB1aTogJ2VsZW1lbnQtdWknLFxuICAgIHZlcnNpb246ICczLjIuOCcsXG4gICAgbWFuYWdlcjogbWFuYWdlcixcbiAgICBleHRlbmRBcGk6IGV4dGVuZEFwaSxcbiAgICBpbnN0YWxsOiBpbnN0YWxsLFxuICAgIGF0dHJzOiB7XG4gICAgICBub3JtYWw6IFsnY29sJywgJ3dyYXAnXSxcbiAgICAgIGFycmF5OiBbJ2NsYXNzTmFtZSddLFxuICAgICAga2V5OiBbJ3RpdGxlJywgJ2luZm8nXVxuICAgIH1cbiAgfSk7XG59XG5cbnZhciBGb3JtQ3JlYXRlID0gZWxtRm9ybUNyZWF0ZSgpO1xuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgd2luZG93LmZvcm1DcmVhdGUgPSBGb3JtQ3JlYXRlO1xufVxuXG52YXIgbWFrZXIgPSBGb3JtQ3JlYXRlLm1ha2VyO1xuXG5leHBvcnQgeyBGb3JtQ3JlYXRlIGFzIGRlZmF1bHQsIG1ha2VyIH07XG4iLCIvKiFcbiAqIEZvcm1DcmVhdGUg5Y+v6KeG5YyW6KGo5Y2V6K6+6K6h5ZmoXG4gKiBAZm9ybS1jcmVhdGUvZGVzaWduZXIgdjMuMi41XG4gKiAoYykgMjAyMS0yMDI0IHhhYm95XG4gKiBHaXRodWIgaHR0cHM6Ly9naXRodWIuY29tL3hhYm95L2Zvcm0tY3JlYXRlLWRlc2lnbmVyXG4gKiBTaXRlIGh0dHBzOi8vZm9ybS1jcmVhdGUuY29tL1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG4oZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt0cnl7aWYodHlwZW9mIGRvY3VtZW50IT1cInVuZGVmaW5lZFwiKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7ZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnLkNvZGVNaXJyb3J7Y29sb3I6IzAwMDtkaXJlY3Rpb246bHRyO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtoZWlnaHQ6MzAwcHh9LkNvZGVNaXJyb3ItbGluZXN7cGFkZGluZzo0cHggMH0uQ29kZU1pcnJvciBwcmUuQ29kZU1pcnJvci1saW5lLC5Db2RlTWlycm9yIHByZS5Db2RlTWlycm9yLWxpbmUtbGlrZXtwYWRkaW5nOjAgNHB4fS5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIsLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LkNvZGVNaXJyb3ItZ3V0dGVyc3tiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y3Zjc7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkO3doaXRlLXNwYWNlOm5vd3JhcH0uQ29kZU1pcnJvci1saW5lbnVtYmVye2NvbG9yOiM5OTk7bWluLXdpZHRoOjIwcHg7cGFkZGluZzowIDNweCAwIDVweDt0ZXh0LWFsaWduOnJpZ2h0O3doaXRlLXNwYWNlOm5vd3JhcH0uQ29kZU1pcnJvci1ndXR0ZXJtYXJrZXJ7Y29sb3I6IzAwMH0uQ29kZU1pcnJvci1ndXR0ZXJtYXJrZXItc3VidGxle2NvbG9yOiM5OTl9LkNvZGVNaXJyb3ItY3Vyc29ye2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjMDAwO2JvcmRlci1yaWdodDpub25lO3dpZHRoOjB9LkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29ye2JvcmRlci1sZWZ0OjFweCBzb2xpZCBzaWx2ZXJ9LmNtLWZhdC1jdXJzb3IgLkNvZGVNaXJyb3ItY3Vyc29ye2JhY2tncm91bmQ6IzdlNztib3JkZXI6MCFpbXBvcnRhbnQ7d2lkdGg6YXV0b30uY20tZmF0LWN1cnNvciBkaXYuQ29kZU1pcnJvci1jdXJzb3Jze3otaW5kZXg6MX0uY20tZmF0LWN1cnNvciAuQ29kZU1pcnJvci1saW5lOjpzZWxlY3Rpb24sLmNtLWZhdC1jdXJzb3IgLkNvZGVNaXJyb3ItbGluZT5zcGFuOjpzZWxlY3Rpb24sLmNtLWZhdC1jdXJzb3IgLkNvZGVNaXJyb3ItbGluZT5zcGFuPnNwYW46OnNlbGVjdGlvbntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5jbS1mYXQtY3Vyc29yIC5Db2RlTWlycm9yLWxpbmU6Oi1tb3otc2VsZWN0aW9uLC5jbS1mYXQtY3Vyc29yIC5Db2RlTWlycm9yLWxpbmU+c3Bhbjo6LW1vei1zZWxlY3Rpb24sLmNtLWZhdC1jdXJzb3IgLkNvZGVNaXJyb3ItbGluZT5zcGFuPnNwYW46Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9LmNtLWZhdC1jdXJzb3J7Y2FyZXQtY29sb3I6dHJhbnNwYXJlbnR9LmNtLXRhYntkaXNwbGF5OmlubGluZS1ibG9jazt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH0uQ29kZU1pcnJvci1ydWxlcnN7Ym90dG9tOjA7bGVmdDowO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDotNTBweH0uQ29kZU1pcnJvci1ydWxlcntib3JkZXItbGVmdDoxcHggc29saWQgI2NjYztib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0uY20tcy1kZWZhdWx0IC5jbS1oZWFkZXJ7Y29sb3I6IzAwZn0uY20tcy1kZWZhdWx0IC5jbS1xdW90ZXtjb2xvcjojMDkwfS5jbS1uZWdhdGl2ZXtjb2xvcjojZDQ0fS5jbS1wb3NpdGl2ZXtjb2xvcjojMjkyfS5jbS1oZWFkZXIsLmNtLXN0cm9uZ3tmb250LXdlaWdodDo3MDB9LmNtLWVte2ZvbnQtc3R5bGU6aXRhbGljfS5jbS1saW5re3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmNtLXN0cmlrZXRocm91Z2h7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0uY20tcy1kZWZhdWx0IC5jbS1rZXl3b3Jke2NvbG9yOiM3MDh9LmNtLXMtZGVmYXVsdCAuY20tYXRvbXtjb2xvcjojMjE5fS5jbS1zLWRlZmF1bHQgLmNtLW51bWJlcntjb2xvcjojMTY0fS5jbS1zLWRlZmF1bHQgLmNtLWRlZntjb2xvcjojMDBmfS5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTJ7Y29sb3I6IzA1YX0uY20tcy1kZWZhdWx0IC5jbS10eXBlLC5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTN7Y29sb3I6IzA4NX0uY20tcy1kZWZhdWx0IC5jbS1jb21tZW50e2NvbG9yOiNhNTB9LmNtLXMtZGVmYXVsdCAuY20tc3RyaW5ne2NvbG9yOiNhMTF9LmNtLXMtZGVmYXVsdCAuY20tc3RyaW5nLTJ7Y29sb3I6I2Y1MH0uY20tcy1kZWZhdWx0IC5jbS1tZXRhLC5jbS1zLWRlZmF1bHQgLmNtLXF1YWxpZmllcntjb2xvcjojNTU1fS5jbS1zLWRlZmF1bHQgLmNtLWJ1aWx0aW57Y29sb3I6IzMwYX0uY20tcy1kZWZhdWx0IC5jbS1icmFja2V0e2NvbG9yOiM5OTd9LmNtLXMtZGVmYXVsdCAuY20tdGFne2NvbG9yOiMxNzB9LmNtLXMtZGVmYXVsdCAuY20tYXR0cmlidXRle2NvbG9yOiMwMGN9LmNtLXMtZGVmYXVsdCAuY20taHJ7Y29sb3I6Izk5OX0uY20tcy1kZWZhdWx0IC5jbS1saW5re2NvbG9yOiMwMGN9LmNtLWludmFsaWRjaGFyLC5jbS1zLWRlZmF1bHQgLmNtLWVycm9ye2NvbG9yOnJlZH0uQ29kZU1pcnJvci1jb21wb3Npbmd7Ym9yZGVyLWJvdHRvbToycHggc29saWR9ZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldHtjb2xvcjojMGIwfWRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXR7Y29sb3I6I2EyMn0uQ29kZU1pcnJvci1tYXRjaGluZ3RhZ3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MCwwLC4zKX0uQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmR7YmFja2dyb3VuZDojZThmMmZmfS5Db2RlTWlycm9ye2JhY2tncm91bmQ6I2ZmZjtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9LkNvZGVNaXJyb3Itc2Nyb2xse2hlaWdodDoxMDAlO21hcmdpbi1ib3R0b206LTUwcHg7bWFyZ2luLXJpZ2h0Oi01MHB4O291dGxpbmU6bm9uZTtvdmVyZmxvdzpzY3JvbGwhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjUwcHg7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowfS5Db2RlTWlycm9yLXNpemVye2JvcmRlci1yaWdodDo1MHB4IHNvbGlkIHRyYW5zcGFyZW50O3Bvc2l0aW9uOnJlbGF0aXZlfS5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIsLkNvZGVNaXJyb3ItaHNjcm9sbGJhciwuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLC5Db2RlTWlycm9yLXZzY3JvbGxiYXJ7ZGlzcGxheTpub25lO291dGxpbmU6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjV9LkNvZGVNaXJyb3ItdnNjcm9sbGJhcntvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OnNjcm9sbDtyaWdodDowO3RvcDowfS5Db2RlTWlycm9yLWhzY3JvbGxiYXJ7Ym90dG9tOjA7bGVmdDowO292ZXJmbG93LXg6c2Nyb2xsO292ZXJmbG93LXk6aGlkZGVufS5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXJ7Ym90dG9tOjA7cmlnaHQ6MH0uQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVye2JvdHRvbTowO2xlZnQ6MH0uQ29kZU1pcnJvci1ndXR0ZXJze2xlZnQ6MDttaW4taGVpZ2h0OjEwMCU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7ei1pbmRleDozfS5Db2RlTWlycm9yLWd1dHRlcntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTttYXJnaW4tYm90dG9tOi01MHB4O3ZlcnRpY2FsLWFsaWduOnRvcDt3aGl0ZS1zcGFjZTpub3JtYWx9LkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXJ7YmFja2dyb3VuZDpub25lIWltcG9ydGFudDtib3JkZXI6bm9uZSFpbXBvcnRhbnQ7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo0fS5Db2RlTWlycm9yLWd1dHRlci1iYWNrZ3JvdW5ke2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3otaW5kZXg6NH0uQ29kZU1pcnJvci1ndXR0ZXItZWx0e2N1cnNvcjpkZWZhdWx0O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6NH0uQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlciA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5Db2RlTWlycm9yLWd1dHRlci13cmFwcGVyIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uQ29kZU1pcnJvci1saW5lc3tjdXJzb3I6dGV4dDttaW4taGVpZ2h0OjFweH0uQ29kZU1pcnJvciBwcmUuQ29kZU1pcnJvci1saW5lLC5Db2RlTWlycm9yIHByZS5Db2RlTWlycm9yLWxpbmUtbGlrZXt3b3JkLXdyYXA6bm9ybWFsOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MDtib3JkZXItd2lkdGg6MDtjb2xvcjppbmhlcml0O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpjb250ZXh0dWFsO2xpbmUtaGVpZ2h0OmluaGVyaXQ7bWFyZ2luOjA7b3ZlcmZsb3c6dmlzaWJsZTtwb3NpdGlvbjpyZWxhdGl2ZTt3aGl0ZS1zcGFjZTpwcmU7ei1pbmRleDoyfS5Db2RlTWlycm9yLXdyYXAgcHJlLkNvZGVNaXJyb3ItbGluZSwuQ29kZU1pcnJvci13cmFwIHByZS5Db2RlTWlycm9yLWxpbmUtbGlrZXt3b3JkLXdyYXA6YnJlYWstd29yZDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3b3JkLWJyZWFrOm5vcm1hbH0uQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZHtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt6LWluZGV4OjB9LkNvZGVNaXJyb3ItbGluZXdpZGdldHtwYWRkaW5nOi4xcHg7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoyfS5Db2RlTWlycm9yLXJ0bCBwcmV7ZGlyZWN0aW9uOnJ0bH0uQ29kZU1pcnJvci1jb2Rle291dGxpbmU6bm9uZX0uQ29kZU1pcnJvci1ndXR0ZXIsLkNvZGVNaXJyb3ItZ3V0dGVycywuQ29kZU1pcnJvci1saW5lbnVtYmVyLC5Db2RlTWlycm9yLXNjcm9sbCwuQ29kZU1pcnJvci1zaXplcntib3gtc2l6aW5nOmNvbnRlbnQtYm94fS5Db2RlTWlycm9yLW1lYXN1cmV7aGVpZ2h0OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjEwMCV9LkNvZGVNaXJyb3ItY3Vyc29ye3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGV9LkNvZGVNaXJyb3ItbWVhc3VyZSBwcmV7cG9zaXRpb246c3RhdGljfWRpdi5Db2RlTWlycm9yLWN1cnNvcnN7cG9zaXRpb246cmVsYXRpdmU7dmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDozfS5Db2RlTWlycm9yLWZvY3VzZWQgZGl2LkNvZGVNaXJyb3ItY3Vyc29ycyxkaXYuQ29kZU1pcnJvci1kcmFnY3Vyc29yc3t2aXNpYmlsaXR5OnZpc2libGV9LkNvZGVNaXJyb3Itc2VsZWN0ZWR7YmFja2dyb3VuZDojZDlkOWQ5fS5Db2RlTWlycm9yLWZvY3VzZWQgLkNvZGVNaXJyb3Itc2VsZWN0ZWR7YmFja2dyb3VuZDojZDdkNGYwfS5Db2RlTWlycm9yLWNyb3NzaGFpcntjdXJzb3I6Y3Jvc3NoYWlyfS5Db2RlTWlycm9yLWxpbmU6OnNlbGVjdGlvbiwuQ29kZU1pcnJvci1saW5lPnNwYW46OnNlbGVjdGlvbiwuQ29kZU1pcnJvci1saW5lPnNwYW4+c3Bhbjo6c2VsZWN0aW9ue2JhY2tncm91bmQ6I2Q3ZDRmMH0uQ29kZU1pcnJvci1saW5lOjotbW96LXNlbGVjdGlvbiwuQ29kZU1pcnJvci1saW5lPnNwYW46Oi1tb3otc2VsZWN0aW9uLC5Db2RlTWlycm9yLWxpbmU+c3Bhbj5zcGFuOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kOiNkN2Q0ZjB9LmNtLXNlYXJjaGluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmE7YmFja2dyb3VuZC1jb2xvcjojZmYwNn0uY20tZm9yY2UtYm9yZGVye3BhZGRpbmctcmlnaHQ6LjFweH1AbWVkaWEgcHJpbnR7LkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yc3t2aXNpYmlsaXR5OmhpZGRlbn19LmNtLXRhYi13cmFwLWhhY2s6YWZ0ZXJ7Y29udGVudDpcIlwifXNwYW4uQ29kZU1pcnJvci1zZWxlY3RlZHRleHR7YmFja2dyb3VuZDpub25lfS5Db2RlTWlycm9yLWhpbnRze2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHNpbHZlcjtib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjJweCAzcHggNXB4ICMwMDAzO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6OTAlO2xpc3Qtc3R5bGU6bm9uZTttYXJnaW46MDttYXgtaGVpZ2h0OjIwZW07b3ZlcmZsb3c6aGlkZGVuO292ZXJmbG93LXk6YXV0bztwYWRkaW5nOjJweDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjF9LkNvZGVNaXJyb3ItaGludHtib3JkZXItcmFkaXVzOjJweDtjb2xvcjojMDAwO2N1cnNvcjpwb2ludGVyO21hcmdpbjowO3BhZGRpbmc6MCA0cHg7d2hpdGUtc3BhY2U6cHJlfWxpLkNvZGVNaXJyb3ItaGludC1hY3RpdmV7YmFja2dyb3VuZDojMDhmO2NvbG9yOiNmZmZ9Ll9mZC1mbntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9Ll9mZC1mbiAuZWwtYnV0dG9ue2JvdHRvbTozcHg7Ym94LXNoYWRvdzowIDZweCAxNnB4ICMwMDAwMDAxNCwwIDNweCA2cHggLTRweCAjMDAwMDAwMWYsMCA5cHggMjhweCA4cHggIzAwMDAwMDBkO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjVweH0uX2ZkLWZuLWVkaXRvcntkaXNwbGF5OmZsZXg7ZmxleDoxO292ZXJmbG93OnNjcm9sbDt3aWR0aDoxMDAlfS5fZmQtZm4tZWRpdG9yIC5Db2RlTWlycm9ye2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9Ll9mZC1mbi10aXB7Y29sb3I6IzAwMDtkaXJlY3Rpb246bHRyO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZX0uX2ZkLWZuLXRpcCAuY20ta2V5d29yZHtjb2xvcjojNzA4O2xpbmUtaGVpZ2h0OjI0cHg7b3ZlcmZsb3cteDphdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uX2ZkLWZuLXRpcCAuY20ta2V5d29yZDo6LXdlYmtpdC1zY3JvbGxiYXJ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtoZWlnaHQ6MDt3aWR0aDowfS5fZmQtZm4taW5ke2JhY2tncm91bmQtY29sb3I6I2Y3ZjdmNztib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNkZGQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6bGVmdDtoZWlnaHQ6MjRweDttYXJnaW4tcmlnaHQ6NHB4O3dpZHRoOjI5cHh9Ll9mZC1mbi1hcmd7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uX2ZkLWZuLWFyZyBpe2NvbG9yOiMzMDczZmY7Zm9udC1zaXplOjEycHh9Ll9mZC1ldmVudCAuZWwtYnV0dG9ue2JvcmRlci1jb2xvcjojMmU3M2ZmO2NvbG9yOiMyZTczZmY7Zm9udC13ZWlnaHQ6NDAwO3dpZHRoOjEwMCV9Ll9mZC1ldmVudCAuZWwtYmFkZ2V7d2lkdGg6MTAwJX0uX2ZkLWV2ZW50LWRpYWxvZyAuZWwtZGlhbG9nX19ib2R5e3BhZGRpbmc6MTBweCAyMHB4fS5fZmQtZXZlbnQtY29uIC5lbC1tYWlue3BhZGRpbmc6MH0uX2ZkLWV2ZW50LWwsLl9mZC1ldmVudC1ye2JvcmRlcjoxcHggc29saWQgI2VjZWNlYztkaXNwbGF5OmZsZXg7ZmxleDoxO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJX0uX2ZkLWV2ZW50LWRyb3Bkb3duIC5lbC1kcm9wZG93bi1tZW51e21heC1oZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6c2Nyb2xsfS5fZmQtZXZlbnQtaGVhZHthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDojZjhmOWZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlZWU7ZGlzcGxheTpmbGV4O3BhZGRpbmc6NXB4IDE1cHh9Ll9mZC1ldmVudC1oZWFkIC5lbC1idXR0b24uaXMtbGlua3tjb2xvcjojMmY3M2ZmfS5fZmQtZXZlbnQtcntib3JkZXItbGVmdDowfS5fZmQtZXZlbnQtciAuX2ZkLWV2ZW50LWhlYWR7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Ll9mZC1ldmVudC1sPi5lbC1tYWluLC5fZmQtZXZlbnQtcj4uZWwtbWFpbntib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXg6MTtmbGV4LWJhc2lzOmF1dG87ZmxleC1kaXJlY3Rpb246cm93O21pbi13aWR0aDowO3dpZHRoOjEwMCV9Ll9mZC1ldmVudC1pdGVtLC5fZmQtZXZlbnQtcj4uZWwtbWFpbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59Ll9mZC1ldmVudC1pdGVte2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MTRweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21heC13aWR0aDoyNTBweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6cHJlLXdyYXB9Ll9mZC1ldmVudC1sIC5lbC1tZW51e2JvcmRlci1yaWdodDowO2JvcmRlci10b3A6MDtvdmVyZmxvdzphdXRvO3BhZGRpbmc6MCAxMHB4IDVweDt3aWR0aDoxMDAlfS5fZmQtZXZlbnQtbCAuZWwtbWVudS1pdGVtLmlzLWFjdGl2ZXtiYWNrZ3JvdW5kOiNlNGU3ZWQ7Y29sb3I6IzMwMzEzM30uX2ZkLWV2ZW50LWwgLmVsLW1lbnUtaXRlbXtib3JkZXI6MXB4IHNvbGlkICNlY2VjZWM7Ym9yZGVyLXJhZGl1czo1cHg7aGVpZ2h0OmF1dG87bGluZS1oZWlnaHQ6MWVtO21hcmdpbi10b3A6NXB4O3BhZGRpbmc6MH0uX2ZkLWV2ZW50LW1ldGhvZHtjb2xvcjojOWQyMzhjO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxNHB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOnByZS13cmFwO3dpZHRoOjIyNXB4fS5fZmQtZXZlbnQtbWV0aG9kPnNwYW46Zmlyc3QtY2hpbGQsLl9mZC1mbi1saXN0LW1ldGhvZD5zcGFuOmZpcnN0LWNoaWxke2NvbG9yOiM5ZDIzOGN9Ll9mZC1ldmVudC1tZXRob2Q+c3BhbjpmaXJzdC1jaGlsZD5zcGFuLC5fZmQtZm4tbGlzdC1tZXRob2Q+c3BhbjpmaXJzdC1jaGlsZD5zcGFue2NvbG9yOiMwMDA7bWFyZ2luLWxlZnQ6MTBweH0uX2ZkLWV2ZW50LXRpdGxle2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzoxMHB4IDA7d2lkdGg6MTAwJX0uX2ZkLWV2ZW50LXRpdGxlIC5mYy1pY29ue2NvbG9yOiMyODI4Mjg7Zm9udC1zaXplOjE4cHg7bWFyZ2luLXJpZ2h0OjZweH0uX2ZkLWV2ZW50LXRpdGxlIC5lbC1pbnB1dHt3aWR0aDoyMDBweH0uX2ZkLWV2ZW50LXRpdGxlIC5lbC1pbnB1dF9fd3JhcHBlcntib3gtc2hhZG93Om5vbmV9Ll9mZC1ldmVudC10aXRsZSAuZWwtbWVudS1pdGVtLmlzLWFjdGl2ZSBpe2NvbG9yOiMyODI4Mjh9Ll9mZC1ldmVudC1jb24gLkNvZGVNaXJyb3J7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uX2ZkLWV2ZW50LWNvbiAuQ29kZU1pcnJvci13cmFwIHByZS5Db2RlTWlycm9yLWxpbmV7cGFkZGluZy1sZWZ0OjIwcHh9Ll9mZC1kcmFnLXRvb2x7d29yZC13cmFwOmJyZWFrLXdvcmQ7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWluLWhlaWdodDoyMHB4O291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1mYy10b29sLWJvcmRlci1jb2xvcik7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MnB4O3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246b3V0bGluZS1jb2xvciAuM3MgZWFzZTt3b3JkLWJyZWFrOmJyZWFrLWFsbH0uX2ZkLWRyYWctdG9vbCAuX2ZkLWRyYWctdG9vbHtoZWlnaHQ6Y2FsYygxMDAlIC0gNnB4KTttYXJnaW46M3B4fS5fZmQtZHJhZy10b29sKy5fZmQtZHJhZy10b29se21hcmdpbi10b3A6NXB4fS5fZmQtZHJhZy10b29sLmFjdGl2ZXtvdXRsaW5lOjJweCBzb2xpZCAjMmU3M2ZmfS5fZmQtZHJhZy10b29sLmFjdGl2ZT5kaXY+Ll9mZC1kcmFnLWJ0bntkaXNwbGF5OmZsZXh9Ll9mZC1kcmFnLXRvb2wuX2ZkLWRyb3AtaG92ZXIgLl9mZC1kcmFnLWJveHtwYWRkaW5nLWJvdHRvbToxNXB4IWltcG9ydGFudDtwYWRkaW5nLXRvcDoxNXB4IWltcG9ydGFudH0uX2ZkLWRyYWctdG9vbCAuX2ZkLWRyYWctYnRue2Rpc3BsYXk6bm9uZX0uZHJhZy1ye2JvdHRvbToycHg7cmlnaHQ6MnB4fS5fZmQtZHJhZy1sLC5kcmFnLXJ7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoyfS5fZmQtZHJhZy1se2xlZnQ6MDt0b3A6MH0uX2ZkLWRyYWctYnRue2JhY2tncm91bmQtY29sb3I6IzJlNzNmZjtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyO2Zsb2F0OmxlZnQ7aGVpZ2h0OjE4cHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoyMHB4O3BhZGRpbmctYm90dG9tOjFweDt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxOHB4fS5fZmQtZHJhZy1idG4rLl9mZC1kcmFnLWJ0bnttYXJnaW4tbGVmdDoycHh9Ll9mZC1kcmFnLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjJlMmV9Ll9mZC1kcmFnLWJ0biBpe2ZvbnQtc2l6ZToxNHB4fS5fZmQtZHJhZy1tYXNre2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowO3otaW5kZXg6MX0uX2ZkLXN0cnVjdCwuX2ZkLXN0cnVjdCAuZWwtYmFkZ2V7d2lkdGg6MTAwJX0uX2ZkLXN0cnVjdCAuZWwtYnV0dG9ue2JvcmRlci1jb2xvcjojMmU3M2ZmO2NvbG9yOiMyZTczZmY7Zm9udC13ZWlnaHQ6NDAwO3dpZHRoOjEwMCV9Ll9mZC1zdHJ1Y3QgLkNvZGVNaXJyb3J7aGVpZ2h0OjQ1MHB4fS5fZmQtc3RydWN0IC5Db2RlTWlycm9yLWxpbmV7Zm9udC1zaXplOjEzcHghaW1wb3J0YW50O2xpbmUtaGVpZ2h0OjE2cHghaW1wb3J0YW50fS5fZmQtc3RydWN0LWNvbiAuQ29kZU1pcnJvci1saW50LXRvb2x0aXB7ei1pbmRleDoxIWltcG9ydGFudH0uX2ZkLXN0cnVjdC1jb24gLmVsLWRpYWxvZ19fYm9keXtwYWRkaW5nOjAgMjBweH0uX2ZkLXJvdywuX2ZkLWh0bWwtZWRpdG9ye3dpZHRoOjEwMCV9Ll9mZC1odG1sLWVkaXRvciAuZWwtYnV0dG9ue2JvcmRlci1jb2xvcjojMmU3M2ZmO2NvbG9yOiMyZTczZmY7Zm9udC13ZWlnaHQ6NDAwO3dpZHRoOjEwMCV9Ll9mZC1odG1sLWVkaXRvci1jb24gLkNvZGVNaXJyb3J7aGVpZ2h0OjQ1MHB4fS5fZmQtaHRtbC1lZGl0b3ItY29uIC5Db2RlTWlycm9yLWxpbmV7Zm9udC1zaXplOjEzcHghaW1wb3J0YW50O2xpbmUtaGVpZ2h0OjE2cHghaW1wb3J0YW50fS5fZmQtaHRtbC1lZGl0b3ItY29uIC5Db2RlTWlycm9yLWxpbnQtdG9vbHRpcHt6LWluZGV4OjEhaW1wb3J0YW50fS5fZmQtaHRtbC1lZGl0b3ItY29uIC5lbC1kaWFsb2dfX2JvZHl7cGFkZGluZzowIDIwcHh9Ll9mZC1zdHJ1Y3QtZWRpdG9ye2ZsZXg6MTt3aWR0aDoxMDAlfS5fZmQtc3RydWN0LWVkaXRvcj5kaXZ7aGVpZ2h0OjEwMCV9Ll9mZC1nZmMsLl9mZC1nZmMgLmVsLWJhZGdle3dpZHRoOjEwMCV9Ll9mZC1nZmMgLmVsLWJ1dHRvbntib3JkZXItY29sb3I6IzJlNzNmZjtjb2xvcjojMmU3M2ZmO2ZvbnQtd2VpZ2h0OjQwMDt3aWR0aDoxMDAlfS5fZmQtZ2ZjLWRpYWxvZyAuZWwtdGFic19faGVhZGVye21hcmdpbi1ib3R0b206MH0uX2ZkLWdmYy1kaWFsb2cgLmZvcm0tY3JlYXRle21hcmdpbi10b3A6MTVweH0uX2ZkLWdmYy1jb24gLkNvZGVNaXJyb3J7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uX2ZkLWdmYy1jb24gLkNvZGVNaXJyb3Itd3JhcCBwcmUuQ29kZU1pcnJvci1saW5le3BhZGRpbmctbGVmdDoyMHB4fS5fZmQtY29sb3ItaW5wdXR7d2lkdGg6MTUwcHh9Ll9mZC1jb2xvci1pbnB1dCAuZWwtaW5wdXQgLmVsLWNvbG9yLXBpY2tlcnttYXJnaW46MH0uX2ZkLWNvbG9yLWlucHV0IC5lbC1pbnB1dCAuZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZHtwYWRkaW5nOjA7d2lkdGg6MjRweH0uX2ZkLWNvbG9yLWlucHV0IC5lbC1pbnB1dCAuZWwtY29sb3ItcGlja2VyX190cmlnZ2Vye2JvcmRlci1sZWZ0OjA7Ym9yZGVyLXJhZGl1czowIDNweCAzcHggMH0uX2ZkLXNpemUtaW5wdXR7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uX2ZkLXNpemUtaW5wdXQgLmVsLWlucHV0LW51bWJlci0tc21hbGx7d2lkdGg6MTIycHh9Ll9mZC1zaXplLWlucHV0IC5lbC1idXR0b257Zm9udC1zaXplOjE0cHg7bWFyZ2luLWxlZnQ6M3B4O3BhZGRpbmc6NXB4O3dpZHRoOjI1cHh9Ll9mZC1maWVsZC1pbnB1dHt3aWR0aDoxMDAlfS5fZmQtZmllbGQtaW5wdXQgLmVsLWlucHV0LWdyb3VwX19hcHBlbmR7Y29sb3I6IzYwNjI2NjtjdXJzb3I6cG9pbnRlcjttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6MjVweH0uX2ZkLWZuLWxpc3QsLl9mZC1mbi1saXN0IC5lbC1iYWRnZXt3aWR0aDoxMDAlfS5fZmQtZm4tbGlzdCAuZWwtYnV0dG9ue2JvcmRlci1jb2xvcjojMmU3M2ZmO2NvbG9yOiMyZTczZmY7Zm9udC13ZWlnaHQ6NDAwO3dpZHRoOjEwMCV9Ll9mZC1mbi1saXN0LWRpYWxvZyAuZWwtZGlhbG9nX19ib2R5e3BhZGRpbmc6MTBweCAyMHB4fS5fZmQtZm4tbGlzdC1jb24gLmVsLW1haW57cGFkZGluZzowfS5fZmQtZm4tbGlzdC1sLC5fZmQtZm4tbGlzdC1ye2JvcmRlcjoxcHggc29saWQgI2VjZWNlYztkaXNwbGF5OmZsZXg7ZmxleDoxO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJX0uX2ZkLWZuLWxpc3QtaGVhZHthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDojZjhmOWZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlZWU7ZGlzcGxheTpmbGV4O3BhZGRpbmc6NXB4IDE1cHh9Ll9mZC1mbi1saXN0LWhlYWQgLmVsLWJ1dHRvbi5pcy1saW5re2NvbG9yOiMyZjczZmZ9Ll9mZC1mbi1saXN0LXJ7Ym9yZGVyLWxlZnQ6MH0uX2ZkLWZuLWxpc3QtciAuX2ZkLWZuLWxpc3QtaGVhZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Ll9mZC1mbi1saXN0LWw+LmVsLW1haW4sLl9mZC1mbi1saXN0LXI+LmVsLW1haW57Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4OjE7ZmxleC1iYXNpczphdXRvO2ZsZXgtZGlyZWN0aW9uOnJvdzttaW4td2lkdGg6MDt3aWR0aDoxMDAlfS5fZmQtZm4tbGlzdC1yPi5lbC1tYWlue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uX2ZkLWZuLWxpc3QtbCAuZWwtbWVudXtib3JkZXItcmlnaHQ6MDtib3JkZXItdG9wOjA7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjAgMTBweCA1cHg7d2lkdGg6MTAwJX0uX2ZkLWZuLWxpc3QtbCAuZWwtbWVudS1pdGVtLmlzLWFjdGl2ZXtiYWNrZ3JvdW5kOiNlNGU3ZWQ7Y29sb3I6IzMwMzEzM30uX2ZkLWZuLWxpc3QtbCAuZWwtbWVudS1pdGVte2JvcmRlcjoxcHggc29saWQgI2VjZWNlYztib3JkZXItcmFkaXVzOjVweDtoZWlnaHQ6YXV0bztsaW5lLWhlaWdodDoxZW07bWFyZ2luLXRvcDo1cHg7cGFkZGluZzowfS5fZmQtZm4tbGlzdC1tZXRob2R7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjE0cHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxZW07b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MTBweCAwO3doaXRlLXNwYWNlOnByZS13cmFwO3dpZHRoOjEwMCV9Ll9mZC1mbi1saXN0LW1ldGhvZC1pbmZvPnNwYW46Zmlyc3QtY2hpbGQsLl9mZC1mbi1saXN0LW1ldGhvZD5zcGFuOmZpcnN0LWNoaWxke2NvbG9yOiM5ZDIzOGN9Ll9mZC1mbi1saXN0LW1ldGhvZC1pbmZvPnNwYW46Zmlyc3QtY2hpbGQ+c3BhbiwuX2ZkLWZuLWxpc3QtbWV0aG9kPnNwYW46Zmlyc3QtY2hpbGQ+c3Bhbntjb2xvcjojMDAwO21hcmdpbi1sZWZ0OjEwcHh9Ll9mZC1mbi1saXN0LWNvbiAuQ29kZU1pcnJvcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5fZmQtZm4tbGlzdC1jb24gLkNvZGVNaXJyb3Itd3JhcCBwcmUuQ29kZU1pcnJvci1saW5le3BhZGRpbmctbGVmdDoyMHB4fS5fZmQtdGFibGUtdmlld3tvdmVyZmxvdzphdXRvfS5fZmQtdGFibGUtdmlldy1jZWxse2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IGluc2V0IHJnYmEoMCwwLDAsLjEpO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6NTBweH0uX2ZkLXRhYmxlLXZpZXctY2VsbD4uX2ZkLWRyYWctdG9vbHtib3JkZXI6MDtoZWlnaHQ6MTAwJTttYXJnaW46MH0uX2ZkLXRhYmxlLXZpZXctYnRue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjB9Ll9mZC10YWJsZS12aWV3LWJ0biAuZmMtaWNvbntjb2xvcjojZmZmO2ZvbnQtc2l6ZToxNnB4O3dpZHRoOjE4cHh9Ll9mZC10YWJsZS12aWV3LWljb257Y29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tdG9wOjFweDt3aWR0aDoxMDAlfS5fZmQtdGFibGUtdmlldz50YWJsZXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlZWY1O2JvcmRlci1yaWdodDoxcHggc29saWQgI2ViZWVmNTtib3JkZXItY29sb3I6I2ViZWVmNSBjdXJyZW50Y29sb3IgY3VycmVudGNvbG9yICNlYmVlZjU7Ym9yZGVyLXN0eWxlOnNvbGlkIG5vbmUgbm9uZSBzb2xpZDtib3JkZXItd2lkdGg6MXB4IDAgMCAxcHg7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RhYmxlLWxheW91dDpmaXhlZDt3aWR0aDoxMDAlfS5fZmQtdGFibGUtdmlldyB0cnttaW4taGVpZ2h0OjUwcHh9Ll9mZC10YWJsZS12aWV3IHRke2JvcmRlci1ib3R0b206MDtib3JkZXItcmlnaHQ6MDtib3JkZXItY29sb3I6Y3VycmVudGNvbG9yICNlYmVlZjUgI2ViZWVmNSBjdXJyZW50Y29sb3I7Ym9yZGVyLXN0eWxlOm5vbmUgc29saWQgc29saWQgbm9uZTtib3JkZXItd2lkdGg6MCAxcHggMXB4IDA7Ym94LXNpemluZzpib3JkZXItYm94O21pbi1oZWlnaHQ6NTBweDttaW4td2lkdGg6ODBweDtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7cGFkZGluZzo1cHg7cG9zaXRpb246cmVsYXRpdmU7d2hpdGUtc3BhY2U6bm93cmFwfS5fZmQtdGFibGVDZWxsLWRyYWd7aGVpZ2h0OjEwMCV9Ll9mYy10YWJsZXtvdmVyZmxvdzphdXRvfS5fZmMtdGFibGU+dGFibGV7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWVmNTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlYmVlZjU7Ym9yZGVyLWNvbG9yOiNlYmVlZjUgY3VycmVudGNvbG9yIGN1cnJlbnRjb2xvciAjZWJlZWY1O2JvcmRlci1zdHlsZTpzb2xpZCBub25lIG5vbmUgc29saWQ7Ym9yZGVyLXdpZHRoOjFweCAwIDAgMXB4O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MTAwJX0uX2ZjLXRhYmxlIHRkLC5fZmMtdGFibGUgdHJ7bWluLWhlaWdodDo1MHB4fS5fZmMtdGFibGUgdGR7Ym9yZGVyLWJvdHRvbTowO2JvcmRlci1yaWdodDowO2JvcmRlci1jb2xvcjpjdXJyZW50Y29sb3IgI2ViZWVmNSAjZWJlZWY1IGN1cnJlbnRjb2xvcjtib3JkZXItc3R5bGU6bm9uZSBzb2xpZCBzb2xpZCBub25lO2JvcmRlci13aWR0aDowIDFweCAxcHggMDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjgwcHg7b3ZlcmZsb3c6aGlkZGVuO292ZXJmbG93LXdyYXA6YnJlYWstd29yZDtwYWRkaW5nOjVweDtwb3NpdGlvbjpyZWxhdGl2ZX0uX2ZkLXZhbGlkYXRlIC5hcHBlbmQtbXNne2N1cnNvcjpwb2ludGVyfS5fZmQtdmFsaWRhdGUgLmVsLWlucHV0LWdyb3VwX19hcHBlbmR7cGFkZGluZzowIDEwcHh9Ll9mZC1yZXF1aXJlZHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCV9Ll9mZC1yZXF1aXJlZCAuZWwtaW5wdXR7bWFyZ2luLWxlZnQ6MTVweH0uX2ZkLXJlcXVpcmVkIC5lbC1zd2l0Y2h7aGVpZ2h0OjI4cHh9Ll90ZC10YWJsZS1vcHRbZGF0YS12LTc1NTYxOTgwXXt3aWR0aDoxMDAlfS5fdGQtdGFibGUtb3B0LWhhbmRsZVtkYXRhLXYtNzU1NjE5ODBde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZy1yaWdodDo1cHh9Ll9mZC10cmVlLW9wdCAuX2ZkLXRyZWUtb3B0LWJ0bntiYWNrZ3JvdW5kLWNvbG9yOiMyZjczZmY7Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjtmbG9hdDpsZWZ0O2hlaWdodDoxOXB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MjBweDtwYWRkaW5nLWJvdHRvbToxcHg7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MThweH0uX2ZkLXRyZWUtb3B0LW5vZGV7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uX2ZkLXRyZWUtb3B0LWZpcnN0e21hcmdpbi1yaWdodDo1cHg7d2lkdGg6NjBweH0uX2ZkLXRyZWUtb3B0LWxhc3R7d2lkdGg6MTEwcHh9Ll9mZC10cmVlLW9wdCAuX2ZkLXRyZWUtb3B0LWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjJkMmU7Ym9yZGVyLXJhZGl1czowIDJweCAycHggMH0uX2ZkLXRyZWUtb3B0IC5lbC10cmVlLW5vZGVfX2NvbnRlbnR7aGVpZ2h0OjI4cHg7bWFyZ2luLWJvdHRvbTozcHh9Ll9mZC10cmVlLW9wdCAuZWwtaW5wdXRfX2lubmVye2JvcmRlci1yaWdodDowfS5fZmQtdHJlZS1vcHQgLmVsLWlucHV0LWdyb3VwX19hcHBlbmR7YmFja2dyb3VuZDojZmZmO3BhZGRpbmctbGVmdDoxcHg7cGFkZGluZy1yaWdodDoycHg7d2lkdGg6OTBweH0uX2ZkLXRhYmxlLWZvcm17YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2VjZWNlYzt3aWR0aDoxMDAlfS5fZmMtY2hpbGQtZW1wdHksLl9mZC10YWJsZS1mb3Jte21pbi1oZWlnaHQ6MTMwcHh9Ll9mZC10Zi13cmFwe2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzphdXRvfS5fZmQtdGYtd3JhcD4uX2ZkLWRyYWctdG9vbHtkaXNwbGF5OmZsZXg7ZmxleC1zaHJpbms6MDtoZWlnaHQ6YXV0bzttYXJnaW46MnB4fS5fZmMtdGFibGUtZm9ybXtjb2xvcjojNjY2O292ZXJmbG93OmF1dG99Ll9mYy10YWJsZS1mb3JtIC5mb3JtLWNyZWF0ZSAuZWwtZm9ybS1pdGVte21hcmdpbi1ib3R0b206MXB4fS5fZmMtdGFibGUtZm9ybSAuZm9ybS1jcmVhdGUgLmVsLWZvcm0taXRlbS5pcy1lcnJvcnttYXJnaW4tYm90dG9tOjIycHh9Ll9mYy10YWJsZS1mb3JtIC5lbC1mb3JtLWl0ZW1fX2xhYmVse2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9Ll9mYy10YWJsZS1mb3JtIC5lbC1mb3JtLWl0ZW1fX2NvbnRlbnR7ZGlzcGxheTpmbGV4O21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50O3dpZHRoOjEwMCUhaW1wb3J0YW50fS5fZmMtdGYtaGVhZC1pZHgsLl9mYy10Zi1pZHh7Zm9udC13ZWlnaHQ6NTAwO21pbi13aWR0aDo0MHB4O3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjQwcHh9Ll9mYy10Zi1idG4sLl9mYy10Zi1lZGl0e21pbi13aWR0aDo3MHB4O3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjcwcHh9Ll9mYy10Zi1idG4gLmZjLWljb257Y3Vyc29yOnBvaW50ZXJ9Ll9mYy10YWJsZS1mb3JtLl9mYy1kaXNhYmxlZCAuX2ZjLXRmLWJ0biAuZmMtaWNvbiwuX2ZjLXRhYmxlLWZvcm0uX2ZjLWRpc2FibGVkPi5lbC1idXR0b257Y3Vyc29yOm5vdC1hbGxvd2VkfS5fZmMtdGYtdGFibGV7Ym9yZGVyOjFweCBzb2xpZCAjZWJlZWY1O2JvcmRlci1ib3R0b206MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGFibGUtbGF5b3V0OmZpeGVkO3dpZHRoOjEwMCV9Ll9mYy10YWJsZS1mb3JtIC5fZmMtdGYtdGFibGU+dGhlYWQ+dHI+dGh7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWVmNTtmb250LXdlaWdodDo1MDA7aGVpZ2h0OjQwcHh9Ll9mYy10YWJsZS1mb3JtIC5fZmMtdGYtdGFibGU+dGhlYWQ+dHI+dGgrdGh7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmVlZjV9Ll9mYy10YWJsZS1mb3JtIHRye21pbi1oZWlnaHQ6NTBweH0uX2ZjLXRhYmxlLWZvcm0gLl9mYy1yZWFkLXZpZXd7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTAwJX0uX2ZjLXRhYmxlLWZvcm0gdGR7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWVmNTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLWhlaWdodDo1MHB4O21pbi13aWR0aDo4MHB4O292ZXJmbG93OmhpZGRlbjtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7cGFkZGluZzo1cHg7cG9zaXRpb246cmVsYXRpdmV9Ll9mYy10YWJsZS1mb3JtIHRkK3Rke2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlZWY1fS5fZmMtdGYtdGFibGUgLmVsLWNhc2NhZGVyLC5fZmMtdGYtdGFibGUgLmVsLWRhdGUtZWRpdG9yLC5fZmMtdGYtdGFibGUgLmVsLWlucHV0LW51bWJlciwuX2ZjLXRmLXRhYmxlIC5lbC1zZWxlY3QsLl9mYy10Zi10YWJsZSAuZWwtc2xpZGVye3dpZHRoOjEwMCV9Ll9mZC10Zi1jb2wgLl9mZC10Zi1jb24gLmVsLWZvcm0taXRlbXttYXJnaW4tYm90dG9tOjFweH0uX2ZkLXRmLWNvbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtc2hyaW5rOjA7ZmxleC13cmFwOndyYXA7d2lkdGg6MTgwcHh9Ll9mZC10Zi1jb24gLmVsLWZvcm0taXRlbV9fbGFiZWx7ZGlzcGxheTpub25lIWltcG9ydGFudH0uX2ZkLXRmLWNvbntkaXNwbGF5OmZsZXg7ZmxleDoxO3dpZHRoOjEwMCV9Ll9mZC10Zi1jb24gLmVsLWZvcm0taXRlbV9fY29udGVudHtkaXNwbGF5OmZsZXg7bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnQ7d2lkdGg6MTAwJSFpbXBvcnRhbnR9Ll9mZC10Zi10aXRsZXthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWVmNTtkaXNwbGF5OmZsZXg7aGVpZ2h0OjQwcHg7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctbGVmdDo1cHg7d2lkdGg6MTAwJSFpbXBvcnRhbnR9Ll9mZC10Zi1jb24gLl9mYy1sLWl0ZW17ZGlzcGxheTpmbGV4O2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXRvcDo0cHg7d2lkdGg6MTAwJX0uX2ZkLXRmLWNvbiAuX2ZjLWwtaXRlbT4qe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9Ll9mZC10Zi1jb24gLmVsLWNhc2NhZGVyLC5fZmQtdGYtY29uIC5lbC1kYXRlLWVkaXRvciwuX2ZkLXRmLWNvbiAuZWwtaW5wdXQtbnVtYmVyLC5fZmQtdGYtY29uIC5lbC1zZWxlY3QsLl9mZC10Zi1jb24gLmVsLXNsaWRlcnt3aWR0aDoxMDAlfS5fZmMtZGVzaWduZXJ7LS1mYy1kcmFnLWVtcHR5OlwiXFxcXDYyZDZcXFxcNjJmZFxcXFw1ZGU2XFxcXDRmYTdcXFxcNTIxN1xcXFw4ODY4XFxcXDRlMmRcXFxcNzY4NFxcXFw3ZWM0XFxcXDRlZjZcXFxcNTIzMFxcXFw2YjY0XFxcXDU5MDRcIjstLWZjLWNoaWxkLWVtcHR5OlwiXFxcXDcwYjlcXFxcNTFmYlxcXFw1M2YzXFxcXDRlMGJcXFxcODlkMiAgXFxcXGU3ODkgIFxcXFw2MzA5XFxcXDk0YWVcXFxcNmRmYlxcXFw1MmEwXFxcXDRlMDBcXFxcNTIxN1wiOy0tZmMtdG9vbC1ib3JkZXItY29sb3I6IzJlNzNmZjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y3Vyc29yOmRlZmF1bHQ7aGVpZ2h0OjEwMCU7bWluLWhlaWdodDo1MDBweDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Ll9mYy1kZXNpZ25lcj4uZWwtbWFpbntib3R0b206MDtsZWZ0OjA7cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9Ll9mYy1tIC5mb3JtLWNyZWF0ZSAuX2ZjLWwtaXRlbXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDojZjVmNWY1O2JvcmRlcjoxcHggZGFzaGVkICMwMDA7Ym9yZGVyLXJhZGl1czo0cHg7Y29sb3I6IzAwMDtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2hlaWdodDozMHB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjVweCAwO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWJvdHRvbTowO3RyYW5zaXRpb246YWxsIC4zcyBlYXNlO3dpZHRoOjEwMCV9Ll9mYy1tIC5mb3JtLWNyZWF0ZSAuX2ZjLWwtaXRlbSAuX2ZjLWwtaWNvbntkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnQ7cGFkZGluZzowIDRweH0uX2ZjLW0gLmZvcm0tY3JlYXRlIC5fZmMtbC1pdGVtIC5fZmMtbC1uYW1le2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudDtmb250LXNpemU6MTJweH0uX2ZjLWwsLl9mYy1tLC5fZmMtcntib3JkZXItdG9wOjFweCBzb2xpZCAjZWNlY2VjO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uX2ZjLXJ7LS1lbC1jb2xvci1wcmltYXJ5OiMyZTczZmZ9Ll9mYy1yLXRhYi1wcm9wc3twYWRkaW5nOjAgMjBweH0uX2ZjLXItdGl0bGV7Y29sb3I6IzMzMztmb250LXNpemU6MTJweDttYXJnaW46MTVweCAwIDVweH0uX2ZjLXItc3ViIC5fZmMtci10aXRsZXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5fZmMtci1zdWIgLmZjLWljb257Y3Vyc29yOnBvaW50ZXJ9Ll9mYy1yLXN1YiAuX2ZkLWNvbmZpZy1pdGVtKy5fZmQtY29uZmlnLWl0ZW17bWFyZ2luLXRvcDo4cHh9Ll9mYy1yLXN1Yj4uX2ZkLWNvbmZpZy1pdGVtPi5fZmQtY2ktaGVhZHtwYWRkaW5nLWxlZnQ6OHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5fZmMtci1zdWI+Ll9mZC1jb25maWctaXRlbT4uX2ZkLWNpLWhlYWQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzMzMztib3JkZXItcmFkaXVzOjI1cHg7Y29udGVudDpcIiBcIjtoZWlnaHQ6NXB4O2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo1cHh9Ll9mYy1yLW5hbWUtaW5wdXQgLmVsLWlucHV0LWdyb3VwX19hcHBlbmR7Y29sb3I6IzYwNjI2NjtjdXJzb3I6cG9pbnRlcjttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6MjVweH0uX2ZjLXIgLmVsLW1haW57cGFkZGluZy1ib3R0b206MTAwcHh9Ll9mYy1sIC5lbC1tYWlue3BhZGRpbmc6MH0uX2ZjLWwgLmVsLXRyZWUtbm9kZV9fbGFiZWx7Y29sb3I6IzMzMztmb250LXdlaWdodDo0MDA7cGFkZGluZzozcHh9Ll9mYy1sIC5lbC10cmVlLW5vZGVfX2NvbnRlbnR7aGVpZ2h0OjMwcHg7bWFyZ2luLXRvcDo1cHh9Ll9mYy1sIC5lbC10cmVlLW5vZGVfX2NvbnRlbnQ+LmVsLXRyZWUtbm9kZV9fZXhwYW5kLWljb257Y29sb3I6IzMzM30uX2ZjLWwgLmVsLXRyZWUtbm9kZV9fZXhwYW5kLWljb24uaXMtbGVhZntjb2xvcjp0cmFuc3BhcmVudH1Aa2V5ZnJhbWVzIGF7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19Ll9mYy1sb2FkaW5ne2FuaW1hdGlvbjphIDJzIGxpbmVhciBpbmZpbml0ZX0uX2ZjLXRyZWUtbm9kZXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2hlaWdodDoyNnB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xpbmUtaGVpZ2h0OjI2cHg7cGFkZGluZy1yaWdodDo1cHg7d2lkdGg6MTAwJX0uX2ZjLXRyZWUtbm9kZS5hY3RpdmUsLl9mYy10cmVlLW5vZGUuYWN0aXZlIC5pY29uLW1vcmV7Y29sb3I6IzJlNzNmZn0uX2ZjLXRyZWUtbGFiZWx7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uX2ZjLXRyZWUtbGFiZWw+aXtmb250LXdlaWdodDo3MDA7bWFyZ2luLXJpZ2h0OjVweH0uX2ZjLXRyZWUtbW9yZXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjAgMTVweH0uX2ZjLWwtdGFic3tib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWNlY2VjO2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjB9Ll9mYy1sLXRhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6IzMwMzEzMztkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4OjE7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2hlaWdodDo0MHB4O2xpbmUtaGVpZ2h0OjQwcHg7bGlzdC1zdHlsZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyfS5fZmMtbCAuX2ZjLWwtdGFiLmFjdGl2ZXtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjNDA5ZWZmO2NvbG9yOiM0MDllZmZ9Ll9mYy1sLWdyb3Vwe2JvcmRlcjoxcHggc29saWQgI2VlZTttYXJnaW46MTJweDtwYWRkaW5nOjA7dXNlci1zZWxlY3Q6bm9uZX0uX2ZjLWwtZ3JvdXAgLl9mYy1sLWxpc3R7YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgzLDFmcil9Ll9mYy1sLXRpdGxle2FsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC13ZWlnaHQ6NjAwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbjowO3BhZGRpbmc6MTJweH0uX2ZjLWwtdGl0bGUsLl9mYy1sLXRpdGxlIGl7Zm9udC1zaXplOjE0cHh9Ll9mYy1sLXRpdGxlIGkuZG93bnt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uX2ZjLWwtaXRlbXtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzAwMDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoxO3BhZGRpbmctYm90dG9tOjEwcHg7dGV4dC1hbGlnbjpjZW50ZXI7dHJhbnNpdGlvbjphbGwgLjJzIGVhc2V9Ll9mYy1sLWl0ZW0gaXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MjFweH0uX2ZjLWwtaXRlbSAuX2ZjLWwtbmFtZXtmb250LXNpemU6MTJweH0uX2ZjLWwtaXRlbSAuX2ZjLWwtaWNvbntwYWRkaW5nOjEwcHggNXB4IDEycHh9Ll9mYy1sLWl0ZW06aG92ZXJ7YmFja2dyb3VuZDojMmU3M2ZmO2NvbG9yOiNmZmZ9Ll9mYy1tLXRvb2xze2JvcmRlcjoxcHggc29saWQgI2VjZWNlYztib3JkZXItdG9wOjA7aGVpZ2h0OjQwcHg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47d2hpdGUtc3BhY2U6bm93cmFwfS5fZmMtbS10b29scywuX2ZjLW0tdG9vbHMtbCwuX2ZjLW0tdG9vbHMtcnthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fS5fZmMtbS10b29scy1ye292ZXJmbG93OmF1dG99Ll9mYy1tLXRvb2xzLWwgc3Zne2N1cnNvcjpwb2ludGVyO3dpZHRoOjE4cHh9Ll9mYy1tLXRvb2xzLWwgc3ZnK3N2Z3ttYXJnaW4tbGVmdDoxMHB4fS5fZmMtbS10b29scyAubGluZXtiYWNrZ3JvdW5kOiNkOGQ4ZDg7aGVpZ2h0OjI0cHg7bWFyZ2luOjAgMTBweDt3aWR0aDoxcHh9Ll9mYy1tLXRvb2xzIC5lbC1idXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlci1yYWRpdXM6NXB4O2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjVweCAxMHB4fS5fZmMtbS10b29scyAuZWwtYnV0dG9uPnNwYW57YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uX2ZjLW0tdG9vbHMgLmVsLWJ1dHRvbisuZWwtYnV0dG9uLC5fZmMtbS10b29scyAuZWwtZHJvcGRvd257bWFyZ2luLWxlZnQ6MTBweH0uX2ZjLW0tdG9vbHMgLl9mZC1tLWV4dGVuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmMWYxZjE7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6IzY2NjtwYWRkaW5nOjVweH0uX2ZjLW0tdG9vbHMgLl9mZC1tLWV4dGVuZCAuZmMtaWNvbnttYXJnaW4tcmlnaHQ6MH0uX2ZjLW0tdG9vbHMgLl9mZC1pbnB1dC1idG57YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MTJweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uX2ZjLW0tdG9vbHMgLl9mZC1pbnB1dC1idG4gLmljb24tY2hlY2t7Y29sb3I6IzY3YzIzYTtmb250LXNpemU6MThweH0uX2ZjLW0tdG9vbHMtciAuZmMtaWNvbntmb250LXNpemU6MTRweDttYXJnaW4tcmlnaHQ6MnB4fS5fZmMtbS10b29scy1sIC5mYy1pY29ue2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxOHB4fS5fZmMtbS10b29scy1sIC5mYy1pY29uKy5mYy1pY29ue21hcmdpbi1sZWZ0OjEwcHh9Ll9mYy1tLXRvb2xzLWwgLmZjLWljb24uZGlzYWJsZWR7Y29sb3I6Izk5OTtjdXJzb3I6bm90LWFsbG93ZWR9Ll9mYy1yIC5lbC10YWJzX19uYXYtd3JhcDphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlY2VjZWM7aGVpZ2h0OjFweH0uX2ZjLXIgLl9mYy1yLXRhYnN7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VjZWNlYztkaXNwbGF5OmZsZXg7cGFkZGluZzowfS5fZmMtciAuZWwtYnV0dG9uLC5fZmMtciAuZWwtcmFkaW8tYnV0dG9uX19pbm5lciwuX2ZjLXIgLmVsLXRhYmxlX19jZWxsIC5jZWxse2ZvbnQtd2VpZ2h0OjQwMH0uX2ZjLXIgLl9mYy1yLXRhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6IzMwMzEzMztkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4OjE7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2hlaWdodDo0MHB4O2xpbmUtaGVpZ2h0OjQwcHg7bGlzdC1zdHlsZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyfS5fZmMtciAuX2ZjLXItdGFiLmFjdGl2ZXtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjNDA5ZWZmO2NvbG9yOiM0MDllZmZ9Ll9mYy1tLWNvbntiYWNrZ3JvdW5kOiNmNWY1ZjU7cGFkZGluZzoyMHB4IDIwcHggMzZweDtwb3NpdGlvbjpyZWxhdGl2ZX0uX2ZjLW0tZHJhZ3tib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjAgYXV0bztvdmVyZmxvdzphdXRvO3BhZGRpbmc6MnB4fS5fZmMtbS1pbnB1dHtwYWRkaW5nOjVweCA1cHggODBweH0uX2ZjLW0taW5wdXQtaGFuZGxle2JhY2tncm91bmQ6I2ZmZjtib3R0b206MTdweDtib3gtc2hhZG93OjAgLThweCAxNHB4ICMwMDAwMDAxYTtsZWZ0OjA7bWFyZ2luOjIwcHg7cGFkZGluZzoxMnB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dGV4dC1hbGlnbjpjZW50ZXI7ei1pbmRleDoyfS5fZmMtbS1kcmFnLm1vYmlsZXt3aWR0aDozNTBweH0uX2ZjLW0tZHJhZy5wYWR7d2lkdGg6NzcwcHh9Ll9mYy1tLWRyYWcsLmRyYWdnYWJsZS1kcmFne2JhY2tncm91bmQ6I2ZmZjtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0uX2ZjLW0tZHJhZz5mb3JtLC5fZmMtbS1kcmFnPmZvcm0+LmVsLXJvd3toZWlnaHQ6MTAwJX0uX2ZjLW0tZHJhZyAuZWwtdHJlZXt3aWR0aDoxMDAlfS5fZmQtZHJhZy1ib3h7aGVpZ2h0OjEwMCU7bWluLWhlaWdodDo2MHB4O3RyYW5zaXRpb246cGFkZGluZy1ib3R0b20scGFkZGluZy10b3AgLjNzIGVhc2U7d2lkdGg6MTAwJX0uX2ZkLWRyYWctYm94IC5fZmQtZHJhZy1ib3h7b3V0bGluZToxcHggZGFzaGVkICNlY2VjZWN9Ll9mZC1kcmFnLXRvb2w+Ll9mZC1kcmFnLWJveHtvdXRsaW5lOm5vbmV9Ll9mZC1kcmFnLWJveD5kaXZbZGF0YS1kcmFnZ2FibGVde21hcmdpbi1ib3R0b206MXB4fS5fZmMtciAuX2ZjLWdyb3VwLWNvbnRhaW5lcisuX2ZjLWdyb3VwLWNvbnRhaW5lcnttYXJnaW4tdG9wOjIwcHh9Ll9mYy1yIC5fZmMtZ3JvdXAtY29udGFpbmVye21hcmdpbjowO3BhZGRpbmc6MTBweH0uX2ZjLXIgLl9mYy1ncm91cC1oYW5kbGV7cmlnaHQ6MTVweH0uX2ZjLXIgLmVsLWZvcm0taXRlbXttYXJnaW4tYm90dG9tOjEwcHghaW1wb3J0YW50fS5fZmMtciAuZWwtZm9ybS1pdGVtX19sYWJlbHtjb2xvcjojMzMzfS5fZmMtdXBsb2FkLXByZXZpZXd7Ym9yZGVyLXJhZGl1czo1cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEyMHB4O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMjBweH0uX2ZjLXRhYnMgLmVsLXRhYnNfX2l0ZW17Zm9udC13ZWlnaHQ6NDAwfS5fZmMtdGFicyAuZWwtdGFic19fbmF2LXNjcm9sbHtwYWRkaW5nOjAgMTVweH0uX2ZjLXRhYnMgLmVsLXRhYi1wYW5le21hcmdpbi1yaWdodDoxNXB4fS5fZmMtdGFicyAuZWwtdGFic19fbmF2LXdyYXA6YWZ0ZXJ7aGVpZ2h0OjFweH0uZm9ybS1jcmVhdGUgLmZjLW5vbmV7ZGlzcGxheTpub25lfS5fZmQtZHJhZ2dhYmxlLWRyYWcuZHJhZy1ob2xkZXIsLl9mZC1lbENhcmQtZHJhZy5kcmFnLWhvbGRlciwuX2ZkLWVsQ29sbGFwc2VJdGVtLWRyYWcuZHJhZy1ob2xkZXIsLl9mZC1lbFRhYlBhbmUtZHJhZy5kcmFnLWhvbGRlciwuX2ZkLWdyb3VwLWRyYWcuZHJhZy1ob2xkZXIsLl9mZC1zdWJGb3JtLWRyYWcuZHJhZy1ob2xkZXIsLl9mZC10YWJsZUZvcm1Db2x1bW4tZHJhZy5kcmFnLWhvbGRlcntiYWNrZ3JvdW5kOiNmNWY1ZjU7YmFja2dyb3VuZC1zaXplOjA7bWluLWhlaWdodDo5MHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5fZmMtY2hpbGQtZW1wdHk6YWZ0ZXIsLl9mZC1kcmFnZ2FibGUtZHJhZy5kcmFnLWhvbGRlcjphZnRlciwuX2ZkLWVsQ2FyZC1kcmFnLmRyYWctaG9sZGVyOmFmdGVyLC5fZmQtZWxDb2xsYXBzZUl0ZW0tZHJhZy5kcmFnLWhvbGRlcjphZnRlciwuX2ZkLWVsVGFiUGFuZS1kcmFnLmRyYWctaG9sZGVyOmFmdGVyLC5fZmQtZ3JvdXAtZHJhZy5kcmFnLWhvbGRlcjphZnRlciwuX2ZkLXN1YkZvcm0tZHJhZy5kcmFnLWhvbGRlcjphZnRlciwuX2ZkLXRhYmxlRm9ybUNvbHVtbi1kcmFnLmRyYWctaG9sZGVyOmFmdGVye2FsaWduLWl0ZW1zOmNlbnRlcjtib3R0b206MDtjb2xvcjojYWFhO2NvbnRlbnQ6dmFyKC0tZmMtZHJhZy1lbXB0eSk7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToxMnB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9Ll9mYy1kZXNpZ25lciAuX2ZjLW0tZHJhZyAuX2ZkLWRyYWdnYWJsZS1kcmFne292ZXJmbG93OnNjcm9sbDtwYWRkaW5nOjJweCAycHggMTAwcHh9Ll9mYy1tLWRyYWcuX2ZkLWRyb3AtaG92ZXIgLl9mZC1kcmFnZ2FibGUtZHJhZ3twYWRkaW5nLXRvcDoyMHB4fS5fZmQtZHJhZ2dhYmxlLWRyYWcuZHJhZy1ob2xkZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5fZmQtZHJhZ2dhYmxlLWRyYWcuZHJhZy1ob2xkZXI6YWZ0ZXJ7Zm9udC1zaXplOjE2cHh9Ll9mYy1jaGlsZC1lbXB0eTphZnRlcntjb250ZW50OnZhcigtLWZjLWNoaWxkLWVtcHR5KTtmb250LWZhbWlseTpmYy1pY29uIWltcG9ydGFudH0uZmMtY29uZmlndXJlZHtjb2xvcjojOTk5O21hcmdpbi1sZWZ0OjVweH0uX2ZjLW1hbmFnZS10ZXh0e2NvbG9yOiMyZjczZmY7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEycHg7bWFyZ2luLWxlZnQ6NHB4fS5fZmMtbWFuYWdlLXRleHQgaXtmb250LXNpemU6MTJweH0uX2ZjLW1lc3NhZ2UtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6OHB4O2JveC1zaGFkb3c6MCA2cHggMTZweCAjMDAwMDAwMTQsMCAzcHggNnB4IC00cHggIzAwMDAwMDFmLDAgOXB4IDI4cHggOHB4ICMwMDAwMDAwZDtwYWRkaW5nOjlweCAxM3B4O3RvcDoxNnB4O3otaW5kZXg6M30uX2ZjLW1lc3NhZ2UtZXJyb3I+LmVsLWljb257Zm9udC1zaXplOjE4cHh9Ll9mYy1tZXNzYWdlLWVycm9yIC5lbC1tZXNzYWdlX19jb250ZW50e2NvbG9yOiMwMDAwMDBlMDtmb250LXNpemU6MTRweH0uX2ZkLXByZXZpZXctZGlhbG9ne2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmctdG9wOjB9Ll9mZC1wcmV2aWV3LWRpYWxvZyAuZWwtZGlhbG9nX19oZWFkZXJ7ZmxvYXQ6cmlnaHQ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt6LWluZGV4OjF9Ll9mZC1wcmV2aWV3LWNvZGV7bWFyZ2luLXRvcDowO21heC1oZWlnaHQ6NTEwcHg7b3ZlcmZsb3c6c2Nyb2xsfS5fZmQtcHJldmlldy10YWJzIC5lbC10YWJzX19uYXYtd3JhcDphZnRlcntoZWlnaHQ6MXB4fS5fZmQtcHJldmlldy10YWJzIC5lbC10YWJzX19pdGVte2hlaWdodDo0NnB4fS5fZmQtcHJldmlldy1jb2RlPmNvZGV7d2hpdGUtc3BhY2U6cHJlLXdyYXB9Ll9mZC1yb3ctbGluZXtiYWNrZ3JvdW5kOiNkOGQ4ZDg7aGVpZ2h0OjFweDttYXJnaW46MTBweCAwO3dpZHRoOjEwMCV9LkNvZGVNaXJyb3ItaGludHN7ei1pbmRleDo0fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6ZmMtaWNvbjtzcmM6dXJsKGRhdGE6Zm9udC93b2ZmO2Jhc2U2NCxkMDlHUmdBQkFBQUFBRFdRQUFzQUFBQUFYSHdBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkhVMVZDQUFBQkNBQUFBRHNBQUFCVUlJc2xlazlUTHpJQUFBRkVBQUFBUkFBQUFHQThGVTVOWTIxaGNBQUFBWWdBQUFNL0FBQUgyQlZsdXlsbmJIbG1BQUFFeUFBQUt5a0FBRWtRamZiSU9HaGxZV1FBQUMvMEFBQUFNUUFBQURZb0JoNWhhR2hsWVFBQU1DZ0FBQUFlQUFBQUpBZmZCRVZvYlhSNEFBQXdTQUFBQURVQUFBR01qZ2YvL1d4dlkyRUFBRENBQUFBQXlBQUFBTWh0UzMzOGJXRjRjQUFBTVVnQUFBQWZBQUFBSUFGL0FNRnVZVzFsQUFBeGFBQUFBVUFBQUFKbkVLTThzSEJ2YzNRQUFES29BQUFDNXdBQUJPd050ZElqZUp4allHUmdZT0JpTUdDd1kyQnljZk1KWWVETFNTekpZNUJpWUdHQUFKQThNcHN4SnpNOWtZRUR4Z1BLc1lCcERpQm1nNGdDQUNZN0JVZ0FlSnhqWUdGaFpaekF3TXJBd05USmRJYUJnYUVmUWpPK1pqQmk1QUNLTXJBeU0yQUZBV211S1F3SG5qRzhybUJ1K04vQXdNQjhod0ZJTWpDaUtHSUNBSEpBRE9KNG5OM1ZWM09VWlJqRzhmOG02MFkzTVZiUWFDQmlRNlVZaUwzRmt0Z1NlNEZRUW5UMGlBT3dib2k5QzVab0VNNzVCaHd4ZzRPRklVSE1oQy9nY0h6Zk03dEhEQjhBci9lOU1ud0J6dGhuZnBsM2QyYWZmY3Q5WFFFdUF0cGx0VlIxMkVWRlI3VFY5R21sL0x5ZGV2bDV0ZktmM2orcXBlOUVOVHFpTTdxakovcGlJQVpqT0VaakxNWmpJbmJFVkV6SFRCeUlrN2s5OStlaFBKeEhjejVQNTVubVhQTlVxOTZhUEh0V094QzFxSmM3OUVhL2RoaUtrWE03TkJaM1dOQU9POHNkanVTeGNvZlpjb2RHc2NONXZTcTZqcWQ1bHRGeXZjeEdyVTFzT2JmZVhGeHZhUjBzMSsrY0tOZDh1ZUI2ZW5WbmlydTBqT1gwMGNZdDNNQUtidVFtbG5BdGQ5UERkZHpLU2k3V25hMXhHMHU1aGp1NWdpdTVpcXZwMG4yOG1jdTRuRXZaeWpnUHNZMEpIdVlOL2VvakRHbzl5YkNPbnRKNVBxTXpIZEY1UHNmenZNQ0x2TVNRenZrVlhjT3J2TWJyYk5EWmorbjhOK3VUdGR6RHZkekgvVHpBZy9Temp2VU1jQmUzNjFtdTRRNVdjUWtkUE00VGROUEpZN3BXS3JYenZKc1h3cXVyK0ZOZFdIejNkakdocGlkTlZFelBuR2l6SWhmUmJrV0dvbXBGYnFKbW1nMml3elFsUk4wMEwwU25VZXpYYlpvaG9zYzBUVVN2YWE2SVphWUpJNWFiWm8zb00wMGQwVythUDJLZGFSS0o5VWF4OTRCcE9vbEIwNXdTUTZhSkpZWk5zMHVNV05FUE1Xb1UxemRtbW14aTNEVGp4SVJwMm9rZHBya25HcVlFRUpPbUxCQzdUS2tncGt6NUlLYXRlREl4WTJYM0hEQ2xoMWd3NVlnNGFVb1V1ZDJVTFhLbktXWGtPNmE4a2UrYWtrZStaOG9nK2I0cGplUUhwbHlTSDVvU1NqWk1XU1VuVFZrbGQ1blNTMDVaZWZ5UktkUGt4NlowazU5WStkMVBUWWtuUHpObG4vemMxQUxrRjZZK0lMODBOUVA1bGFranlLOU5iVUYrWStvTjhsdFRnNURmbWJxRS9ON1VLdVJ1VTcrUWUweE5RLzVnNmh6eVIxUFhrRCtaZW9qODJkUkk1TFNwbThoZlRDMUYvbXJxSzNMRzFGemtYbE9Ia2IrWjJvemNaK1Z2N1RjMUhIbkkxSFhrWVZQcmtVZE0vVWYrWVdwQzhrOVRKNUovbWRxUi9OdlVrK1JSVTJPU3gwemRTYzZhV3BTY00vVXBlZHpVck9RL1Z2d2Z6Uk9tdGlYL05mVXVPVzlxWVBLMHFZdkpNNlpXcGpscjZtZWFjNmFtcG5uSzFObTA2cWIycHRVdzlUaXRTV1BMLzBhcHBlVUFlSnl0ZkFtY0ZNVzljRmZWOURFOVBkM1QwelBkc3pNNzk4NE15MTZ6TzBmRExpekxJYUFjQ3lnSUM4b3FCaERCaUVlV2FJeUxrUmp5cWFDaWlTWWFmTkY0Zk04Y0dxTXhIcWpmTS9rMDhmRVNqeGRmUEtQb014Nko1c1dvMjgzM3IrNlp2WUFrNy8yKzJlNnFmMVg5NjY3NlgxVzlqSWRoRHYrSy9Kek1aVUpNTXpPVnFUSU02akowUXcveEhNOWxDdmxDdm14V3phcVJvZUVRVGVtaTRUSk5RYVYwVjdnemxFMW5LcDFsTE8zWWRFYlBqQms5WjJ6Nll4M1lzWEgxeXE1U3FXdmw2bCtlN0FJbjIwK2swZFowMnQ2WEpuTW00RHJBWElyeXl3bVo3THZTOEdQZ1J4eG5OeEdZR0ZOZ3VxR2xHUzZzcHRWMFY3V2NoMFpBSUtSRGs2b1Z0WndudXBGQVBPSk5WRFVxZVI1eFlSNFNvZW1vQ2kwdmtCT2tvSFVIYXBXQ1FjbitDWFh4UG5DbnlxTGdZZTJmZDNoUWhlTlN1djA0NzlYOGcxNGU5UnFlYUVNZTNRem96K0xWd1Fqa3NMYlNmQWhLUXUxSTVNSmUreWxQQjZxd2FBWXk3TWM1Y2IxZjh5SU96WWpPajhScDI0TXcxbjhsdHhBdm96Qkpwc1NVbVQ1bU5yT0VXY29NTUd1WlRjeG01bnptQW1Zbjh5M21kdWJIZEI3ME9BcHgwTEg4VEZTdWxuTFFRNGh3ZWdnUmVTMWNUOHlHNjdFVFppVGRnMmlnQmRHQUNWbXpuUm5JV09yc1F1TlR3c2NNNURJY0ZFem5HNmE5NUl3eVhRWXdma2FYRHBWbjhnVllDbG02WG1CeFFMQmNKZE9Ec1ZqUWVvUzZlSTcxU0d0UFR5dWVBeTV5WTd2ZG9IV0ppaXJCb1AyMGlpNVVWNm53TEZIaFowOVhYMUFuUFdoRkxKV0tLWHBBTnhSZGlhWlRNZFhRQWhDOFhBbHFzcGlTQTM3MUNqSGdEMGh5MEtjRVZmeE1MUGhUV2owNFBUTmFmOW82dzNIczZpdGFOS3E5OGdvTnY0S01vS29HNmR1aXJnb0dWNm4yZDJqOXgxRm5IbzNlbmlsbi9ONVF5T3NIUUpFQ0lkRWYxZUtoc0Y4UmZENUJrYngrTGFHTnJzbkw4TDFNbUdtRE9XVlFPODdJaUpkeEFwZlN2YVFka1hRNzZVV3pjQy9FSkhFQ3lhZ0Q4WVpad0M5enZhZWZjOW9zcnJRMEwzV3ZMYU5ONWRXbVdGaTh3ZjV1dHJ1Smo1YlRVM211ZGU2aTJWTlp0dGcxVFZvMDBqTmo2TWN6MEx2VDFwYkxhNmRKOHdZM3IrekM1WldiVHAxclA0Z3kwK2JOYWhHOFhibWVOTTdPekxmNDVKV2ZtNysvcDJmSGoyY3dIcWVObS9GL1FtczEyRHNKaHRGZzIrVFNYVHJzR0djTndZNnBhbnhXSzJuWkRsUXF2STJMMWgxNFdEVU0xYUx1U0hyTjdjdHVYNVBldmJtTXYya2R4TVZsdFFTVkl0bXBaV2l2ZmM2eVpjUDE4VGdYZndqMEpPZFFrNk1SRGsxR21YWmM3c1ZkQ1J6aUNGL0l3MHBMSXIxckZvSkZsc0hNR2F0TzZ1enE2anhwMVMvcXdKZGF6eDgrZjNXeHVOcjF6bnB1bTZBcndpV0N6cjh0S0RyKzB3UmtCN0IrMERxS1RqM1U4ZHhXUUlVOHd0dENPRkJ2NjFiOFd5YkNkREE5ZE1jbEVJeUlqRnBnQW1HYTZBSlh5NzJveE5hSUMyeU9KSUplbEZ3YXd3TSt4MmN6N2FocUVtKzBQUlpyajk1VmtUTCs2ZDhyVENleHRoajZ4T2JwcXJ0YjhaWEtYdWtuc0N5LzZ3c2d2KzkzSW5YeHYwTWVld2h5bFNYc002c0Z0QWZnYWxTemg3U29XQ29KT0txaDNWcjBkMHBZUlRLOERNTTViVDRMdjhjRW1DeU03M3lnSE51ZzVUQ29RT09Na0xOUmdjYmwycEVURTY3SDlDSTJYMmdIaXNqVlVjeGlnYzF6RGs0dEpzK1dDeFdLcFVCUkRock1oNG55R1FnRFVhakY5Q0x5T1ZiVHRjT01IeWwrMWhQd0krSzMvNFQ5b3E3YVYwa0JpV1VWUDFwbXhCQWkySnRUN0gyU29Bb0N4SjBwSVdSZjRrdjZiTnV2aUJMTktDSjBJVUpJS0NobitUSFdlVjZXdG9ySWVrMUtnQy81ZUY3eGJmVWgvRlNJRXpUYmxoUi95SVA4aUZYQ1hwbndRZnRLS2VqVFBFaENLL1M0SmJBeXE5alh5RG1CU09nc1NVYkxKZVN6TGIraStRVEk0MHY4TThhSXc1b0FkYWtSZ2ZpMmlRSGM2UU5QOW1zczhXMlZrb3pxak84ekJJTW5NWDZtZ1lreWVXWUdzeGpvOUJxZzB4dUJUcC9IN0dadVlMNEhvLzZQVVZzVGxnbUVaUXlJN1JqaWFpdHFQREdmUUpIL2ZsRm90Q2g4UkZFNU91ZWxNRjJXd0JEQ0dqcFIwK3k3TlhTemRxb0d6MG9OZmlzVDVhU2FtcXBidCtsVFV5b0U4Rm9BazBrZHI5VVRDWHVaOWtBdytJQ0d5TGdzSGNseUFoRHRZYU01cGFxcFpnTU4yOE0wQzZLdWRYTWtlT0xTUkNtQno5SnF2dzQzODJiSXQ3MmVaenVVTURNWjNrN3piUThuclU4bklXK0M5TzIxdGptWlpnQWV0QWljNUcvZURFWnhYNklyOFNiTURYYm1xUisvQWJ1WWg1bHc2Sm1heGkvWm5YaTJ0UVRmaTgrMU85Ry9ubXN0WVdnNjRKNkpmK3JRdnlsTWhabkQ5TU8rZ2ZrTFozTVR4WVlzUzRjMFhTY0VkSmhSUlFQdW0zWTRIcERLOFBnQWNrbW9TMEN6YnNDQjhjMjMzV2FmMVpqUE42SS94Z3FGbUxWZlRjS1EvVEZCQnpGaEI1S2xoQ2g3OFpXaTN5OWE1M25sOFRCNkJ5Qk5sa2RFdjJINDhkWDMvYUFRczdmUlV0QzFzY0ljdlpuT1dNTGVCbVVrU2tuVTdHTC9HQXJSL0g1MEV4VHloQ2pMSXA3cEZQaUU3UGZMRks3Ump2UHdSNHdQeGlFRjY3b2JaQThHWlN2WmNLbFNnamRyVUJkOHRrQ2pqSkxKMDBnbm5UakxyRlJ4dSs5QWVYS2tCSkpGWkhrdXQ3eXBhVTUzcnVkR1pPUjZjcm5XSE1yMVhKRzdZcWExcnlIVHF2cHh2NlMyWmtSVnNuN2tCNkFCYjRWb2RNWHk1OWF2Znk1eC8vMkpxNjkrN3M0Nzc3cnJ1UWNlZUM2T25zbEdOcStSVkZWYXN6bVN0VFpSa1l0Q0VFdTc0Nm54bStlaFIzR1FDaWtIVGdNRGhvbEkwTzNaaTJBMjJoSHJORGtOalVjT3QwdkRQT1d5Vkx5QnJRWXNCLy9aam1hbVorQkJoekxkbVV5MzlWZDBLTkZpN1o2S1BYWTBNUlVQdGRqN2IvSXBpbzg2K0RsQXRQc3ozZWwwZHdiOUNBS1ZxWW51N3NSVTY1R1dCSnByUDV4bytRcklLdkJRSG5QNE0vSjFVb0V4TjREM01zZ0UzczhiZk1HTEMzeUJDZ0ttNGNXbWdRcTRNQy95bGE5OWhaMjNGS2gweVA3MGxYa2lCQ1B6MXRtZjJuOUEzRWZ6N0Uvbm9TODRPT0s4RXhGbi84SCs5SzR4SENEYWZKSGlNQUxVdVorOFNnWmg1ZnNZR2VST0hhaFlnZ0VoR2xYU2FpbnM3aFVENXJkUWNsNnpVREVxemxzaUtZczVRSmlSWVR4c0RSKzRaTzN3bm1INnRnM0Q3NUpMOFA0RFRyS1RkZ21OYXh2ZU96eEFrUzVoeE5GNlBVN05Dc3lKNGNnYkdWaHJNQzh3N0h5aGhJeHNvUWNjczJLRUNidzBQbXhrYVRzUWpZSUdrQU45cDUxbWI0V2kzOWs3dkxjYnFoazVRTnV6YWRQakFLTXZENVBCa1Q1eTRKYlRyRDRJLzNEUDhCNjBCUnljdDRiWGJCb2V4cGZ0SE43Sk1DeTA1OXZrUTNLR0kyOW5ZVzNNb3F0OWxKVTdHejQ5S2N5cldSV2xKNHJldkZsMWRuWUh5cGZSRjE2S1Q1a1NmNm14dVJtOStsRWtrNGxRcC9NeHU0MDBjcUxJamJ6QmU3MDMvZEFiREhwL3lKTU5VK0wyZkVCdFJBL0dwMlFpZHBGbVFBY2ptUlB0MDlITjFsS1I3K1JGeDJtOERBRDdZOUhMWGNhcTliYS81YlJkTzFiYmFWdHprK0ltdDUzbFhZSUUwbFVJN1J6WFlIeUE5cUdSOW1ia1c2UVJXczJQdkFFOUlFK09OdjZJQnA4NHZqc2puNDIxM3J5TTg0cklDd0duOVc3N2J5QnZrSFBIajMydTR1cHBkVzZsVGdvWDBwVTBncmIyMU1ncU1NQzhVY2c3QkFkRWtBdytyYm5SbmsrSEh6M1kySHhFNjFCbzBuQkNnNXpoYkJqdEtTYmpSc0RhZXBRcHE3WDlLbWo3cGducjVuL1FkczNRblhrQUthcnJ2OUYyWnpCaEtUaURpY1hSOVdhbnhxKzMrNDgyWjVUR0g3Nld2RWUyamNvdmNXZmZVNGxDZFNRSzFSVXY2b0ZDU2MwaWVQRlhCd2JXckJrWXNONENCMEI0eWZEQUFMNXl3TDV4WUFCdEhLajdyNDdreVlzamVaZjJ3bjcvQSt4M0dmWjRHek9UWVF5SEUvYldCR2xPSzQwTlJrWE5WOUhFWkRRcCtlUmdWQXBGUXI2R2x2c0ZyNDhEQi90SXlZMlVvdmFuWTdHRDBTRFpMSVVrZUVhK0dZd1NWV0N0QjFoQllQRkNWaGo1NEcrbHV1MStobnhFVG9JUlVrRnZpOEtVcDZueTZ2QjlMcHRESllPWWxYU1ltQ1dVSmI4Y0dRem9lb0RzRCtqSUNJejhGbWw5d29zRzJ2STB1eEFGZDNYcUtjTkk2VC9FencxWi8zVGZXV2VoTzRlc0ZrZTNvUE9BcjJTOERoVmtVSDFwcE1lZ1FqcWN4bTNsM0VDdVluOWszMUFCb0d4L2RDOGRYbHpLVlNvNTYwcDBnUHAyWDl1QXN5Nmg0UGZ3VytQbWR1TE1zdU1EdkZPNk81djJEZTdzdW1VZldtTWRXck1HUnlHbVBxa0R0ZmwwMXc2cDBXK0hadE9YUUZtcVV4N3kwNlpTMXluTGViV1JGMGtlM3VHQmtSZEgyMm5qMDBmTEFVM1pCT0pmcXIyNStwcEQzQVhPTTdMay9QUHhaNS8vL0hmUTQzWnYvVjJJdXV4blVCY0RJOGdjdm9mWVpPbTQ4aWhmb1h1VE1TYVZtL3RiOVZpL09QOThlOGJrV3BlZ2EreXo2Ky94aUhsMFV2Z3dnNWlhckhGNDJNT1E0Ykh4TWJKcXFUNUdHc0I5ZlgwZ0ZoOUFmZWdBZFlmNytpRER5SDU4d09yREIwYjJPOUtLc3phR3lmN1JjaGdXV2t2SGgvNmhWNkdJdmhHYUdYSXlmV1I0WkppK1I4czNPanUwajRPb3p6NWdEMU1YcXNXdjBocXRQbUNVVHAzczRjTzBBMURFMk9neGFLSUJBRFFKS0E5NFNycjJrZ094WEM0Mk1reGR0eDNXL2dQb0FIMElrNHRaVGdJR3Q4OGF4bjAyQ09YMWx4RW0xRmR3OU9zNXpBbk04cVBYU25TUWlQSUZqdGVOcW1ud1hEWmZxT2EwYkNITFo3VjBTVGRDa0FETFdqVkFFdTB5ODdrc3p5bW9WTWhCc0dybWoyem5aUnNTYzdEU1B0OURGa3dUNStDR002L2dlZnZFY3hmcDUrc25iRWRuQ3FleVBiTzgyL2Z0UG01ZUZ3aDQxeUdFUGRuVmVkVGUyOXNLV3V2a3ZxSFh5WURDTlJQUHFldFpOQ2Nrck9ldXY5WmovM3JPSE5UT3pxa0cvZFBYb1BhN2x6Y1h2aWlJNHFZejR3dFIzclZYVGhpRDdERjZQaW51eUw0TStqWE5iL1ZSOXlpanJ2bHRKd2tkOEZON0ZPY3VWSnhteXN3aVpoVnpCck9WK1R4d1hsZnByNXJWV2FpU3BSWVpucU9HbUVJZXFMRlpwY3ErVWFyUU1JZ1ROSkhxa0h6VjdFV0ZjcjVRQVNtNlRBMEtNQU9sTGxJeUVrUkdmTmJJVmtxVWtvYzRPaHM1RUNWSmxwUk1JMHRDUmp5ZDFVS2duRXVHb0lpaVgwbW1BbjZGOXdhaWFpb0Y2b29xaGh2aldqRFhGelpFZjhSNDBORFVFTXFuOUtpVzFlTHg0VDFONjRXQ0VoU1FOK3dyOHJ3cE4wcGUyUmNzMlYrOTJCaTQrSXd2clY0NTljVC8wa1VmeGl6aHhLVVN6d3NlWU9TU1h3dlBhRzdnZkNMTCs1U2xva1JJUkRlU21hYXB2VWFXVS94VGpHd3pSN3lGaG5BbVNJajl6MGhIaUF0cW1vRDJyQlNDQVVualdJVDRlV2lGL2YyUkN5bU5aUTYvQnZzdENmd3RCRndpeFRTQjl0aktGR0ZzcHpFem1EN1lWaFZuVUN1bEVBOGp3aUZIa1dLcHZoUkdWSitxMEFVTEl4Nm1jVWJ0cFZnbXZIVDFvcHVwMVh6bS9DbUZxOVlOMm5mMWR5YndHLzNKRWFzLzhVWFR4THM3clk1TytrTlBEUTQrTkRob1h6NDRtRnpnV05ZM3IxKzNwekNGOVBZbkVwREpPZ3VjUkNmZWFKcDlnNE1QdzdOK1BiN2N5Y3BRNm5YNE1QNDFjYXdibE5HWlhoQmtxMTBHaUlRODR0QWNRZUxRMmZZMW5LUnk2Q0tPczNkeFBvQzJvVzJjNm1QdHk3Z0FqYXJieXc3Z1cyQWNGaklyWVZWbFhTdWVxME1CMTNFR0lXUWthRXd2Z2lXRDNGVlRVN1FTT0NUajBaQkpWMTZaZGNVblY1aENCelkzTCszTlpudVhObSttaTNwenRkelZyeHVHM3Y4NWM3Tlg5b0p1L0tyZTMxV3V1cWtUY2MwU3hiVk9oYjF3R1kyd3YrVFg5bWY3bHE5ZU1TdXJSVFhEV0ZhcW5sc3RMV3YzS3FvaW9QN1NNc09BK095c0ZUV01pRTR4cGtQZVdEQllvN2VQa01mSkhDYkNWSmhlNTJRa2dlalJDTzFtcGtEN1ZuWjZZY0NtTVhycDlnN1JKSjRxeW5SajBYMlRKN1MvanBMSnJGNSswczVNT3AyKzlLVGxQMXgrMHFVQVpnQmNzMkNWZDdaUVdURTlORnRTZWQ5TXI1WnNUdzRzQXFFanBldGtkanF6ODZRVlAxeCtvb00rQ2o2NmVDRVBpeThYeW5UTDRWQXNGOHlub28xVHBtV21yN0FYMG53cG5aTGh3MzhrZTBrQXFMMVpQOWNKbDhyMWJWNmhXbnNQck01ZWhFb2gxK0JYTmVtbUJnMGlXNUZCM2FDb21GbmJ2N2kxdmRjc0Q1eXlkZk45MVptYS84bWg5aHZ0cDN2Yld4ZjNyMTF6WS92UWszNXRadlcrelZ0UEdTaWIrTmZ0clV2NjEyMDdaYUJpYmx5OTYrZCtyWGZ4YXZ2NzYvb1h0N1d2WHR5citYKythL1ZHc3pKd2lxTXZIaUQza1d5TlBoYWdsVDJ3cnhZeXg5UFZOWmxhMHExa0hDWHVhSGdUTEhNbUpHYzdxVWhFano1dU05SnB3MzRya2s1SFBuNysrY3hZNkU5UFBZVU8xNEtwVk9URHA1KzJuKzlBVTR0RjhQNWM3T2dva2t3OURUVVk2WUhuN29UZ0lab0JSWTMwNEZObzZzUXcza1l6WFVlejAySWNPOVRodjVCYkNBLzh0d0NVcEF5cmlwNy9VTHN6cHVZbTEwQklKV1E4YW5LdUc2YllDYWMwNDd0SENUQ1ZvRUhMME1uMFVENGVDTVR6SWV1Uk9rU1BZZHpqR0hDdEYrSzNKUkszeGVOb1F6eHUzeFRISHBIdmx3U2hYd2dUSHJERDFxTmhOMThZejZaUVQxU3pIcVUyYkR4Ymk1NFpUeVRpRjFESC9tTS9MNFlobStEcVMzOGtYeUIra0tWYm1HNll2YzlCbjhLakhRZzdSalRIa0o0ZXM3Qlhha1owZ0ZpRFdrUU1haGt4Qzd4Wm1oalVxTEhONFR5NjIxRXFQNnZPYVZNSi9kbCtNeGlOQmxITWZyT1IydDhic1JucmlNRnp4aGswL2d4N0Iya1RpbWt0M3FpbGkwSWJPUmVDSFNrTm1JOFRmSW9hbGxwYnFYdjFHSWovVjNlRFp2OGdHSjBPQmFMbGplMk44TmcvZ0FxbVExWEx0WWJ1MzNRR0RYOU9hVzVXY240ajJEa3hoRmFxRWRVNkdSeDQ4SjNnTU1CQktFRzVBcjg1WWU3bk1Fc2RTK1E2WmpOekNiUEhYUWtUVGNWSDJuZlpmL0NNNzlob1I5aWpqNnlFWk1LRnVLckdDMkhyL1hBaEVRZ2tDbUVjdE43WFlqRU5CMkU5V08rb3FEY1l0QjlYMFdYQjFVRjQrdW1CbXQwMk9mcVN4czc0M3lnSHYwbWp0dFRUSEdCR1ROdENFY0JaNFo3U0JkVTJ0elI3ZHYzZzdrb285NWpaUUR1aTQzMDUvdUNJOFQ0TEpLSWR6QmVaWGYrRGZUZGhHQXZqUjF2VFF3cGxEVnltZy9LR2RqUUxtRU92ZTF6VVpSN3poSlhrUXRtWW9zU3lJZXYzZFFqSHJkOEhJNUVnam9OcmZSejdWZ3dlNUhYOVhZMnhXR083SUdTelFrQVhtcktDb1NDaHFVbEFpaUZrbXdSOXZZdm1Qdmg5dDJTdGlaYmNwT0U0cmNPTUJNY3ErQm90ajc1TDNDejJvNEpiYklDV0duQUxEZERxdUJqOHRsSFVNYnZyei9EUGdZcUhtUXpJOXd6Q0tRTE1QNWpTcW13bVg2RHMwSkFSeWNnb2xLaUpBd1FHeGxYL2dRU1E3MTlsSGJpSzQ2N0NmVmRKOXZ3djNqdHIxcjBmVXVmaTR2S09qdVdEMUNrNjl2SVoxRUUzb2xiN1dhbFJzcDlGclZINzRwMDdMNll2K240TkZSejcxUm91T0tOdGZJeElUQjdtZmhHendUMG5vOHdQT0hnQ1pxYmtzRVI2ZUoxQWxQYzVmNVZxR2JubmtZNWM2NXlFMGNOTGd6THhBaklvWDh4WHlsWE40WTcwQk55RXVIRElMY0xneUVPaHBya3J6cjA0bTVVVkxpeHBoVk1INXMzSUp4b0tBdFlrWG1hTmtDSjVXVXYzUmpWeDdZTGVWSlJ3bkpQamt3c0d2WEZOdEJkdEZtTnlvazJhdFg3TnZKbTVSQ3hUbVhtbUZzclB5c2M2UTZlZmdxNmRVanlsdTUvemhLSUs4VXhyT2I2dHE3VkRqQ2tjMjVqUVF3SEVLK2dDVVl1S2E2dkxXanBZdjVydlhEZTlmL21nTnhnVjBack5vdFNXa0dQMmIyaSt6dmJtdVMxbmFwMk5VSFE0ZUhwZlhUZjlqT3pDZjNWc1gyMUgwMWttN2cvVDJVTlplblNTcnVCYnFhM0tUanBtcnRmc0pNdUJSUDJhaCtNdXFMRVN1NG8zVG1tMEU0NE44ZlhHS2QyY3gwNUF1Z2U5N3VHZXB0ektMcUtEd1ZnM1U5ZGx5RGI4a2RPV1ZtWTZNNS9aZEdTTGNwTnZmbVJkRmdGb09qMmRQVVlBT1llM1lWaUtqa3RQcEZIVnJNQUNkZHhlUkNTMW9VRzFYcWN1VGxpdk4wK2Ixb3dUemFaNStSOGtXZkdCZ3hYL0tCaVF4a0Q3bTFLSUZYMWVVZlNDS2hLS09BR2Z6d25naDhiS1ZCdk1hYzFRc0duU2dxZlpmdzdvY2tDVTVKMk9Md2ErREw3aTg2cG9oaExSdVY1V0RhbWVPWndlVVdod2pnZUNiQzhOMXVadDdCN1A0di9PTFI3ZU9jMXg5MlFMb2hJc2pJUlp5WExPWGdYNXNGejlCKy8yYkpTMTY3eUtGNTdyaEVBdzRFWFhlVlV2UE5kcC8rQmRuLzJhREFVRUEwSTlJL0lHYUVpbXFpMlZGNkdqL3dmMjgvaXoyVUx0SmcyampXZDQ2ditBU1Y1ZXhDOFZpMWEyV0VTdElQVTlXMFR2RkQ4cXd2UGJJdnlzbWZWa0luVVdpNTMyWGNYYTc0c3VsdDFKQTI0N0R6OUQ5cEZaUjI4bkdpK09wc2NIMVBFQncyMlUyOEFKZWNpK0V2enM2MHExMzg2U2JaZEtDSmZzRUEyUzN0TElYOEFUQWVkeGlPOHRXWCt0WTd4RkVmQUhkWVQ2SHR1Rm5oN1gxZ0tNWlphcUxGVHBCL0xOVGdyVXFUbUVubHpVMnRzYXlrN0podEN1OGFEanU0SGhaR3RyTWtSRG9URW9WRXNOWmFGZW9YWXUrZllFKzE0ajZOdU1tVmJUYkRoYlFUVS81L2pwQ3JYcXFScEVYSWxtMlk4aHp5K1FpYzZ6cjBUbWlMMEN2VzRuME8zMmRlZzNMeno3elhVUnRMVG5oUmZzOXh6djgyanBEQWk4ajViYTk2RGdDeS9VZVFROUU1V0J4cFNCd2dDUHlEaEtMS0lHazBxWkQzR09wbGZJbTcwWU5nNkxISVdXQ2t1Z1FBUEpwM2RXY2c1Wm9RbzFQYWNvb0h3RkhjcXVpMmN5YXBQUmtrdk1UdXFTeEhFSXMwUU5hNUtDcnJMZm5kSjZxR3RlTUVBWG85R2l2cFd4MWlhTVE4RE5RNHB5S05DbTJPOHF1SnJKeE5kbEEzSWkxOUxXcHFVNEl2ajhBcEFTaGZWd3lqd1V5c3pyT21TMHF2YTdtV0RncmN6cHZ6Y1NORnRiNEpCQ2l6SEcrUFEyL0Y3dHp0bTh2Myt2VEQzS3ZiS0NTZS9sS0dqMG9nN3hxeEVRY2c5UkYwZXRRdzROaTRMclJ0WkNCNWZ4Y3BEdjYrT0RNcjhNYU45UEl1cmRsUFRkN1dEYzNldzY5cXFEdEppREIybjQ0SVBMS0Ria2daekxIRk95eituRFR2em5jWHhnQVhNaWN4SXp5SnptM0g3NS84UVJ4cTl6NDVnQmtuTDR3cUZBUTBPQWRuM0t0R2xUbks1LzlUOHBCL2hQaHkrTWdnRnBETFMvMVJTT2g4V0FGaENiamdMaGg2SFl0eHpXMEtBMlZNMW02eTFuV0J0Z2lENVdLRXZ3eWNPTzd3MWNyRGlzSVlCME9SeVd4WURYRzdqY2hZQnZmSDBVY3M2RFBpUHJnV2JxUUlPbU11MU1sM3ZIMDVWODBkK1FmRkhONW0vV3JNSDRyMVNqYk94b3RFYUFteXNLVlJFOTFvaWpHM3BBMmJKdXczdXRjK2o3WVE5cTZpR1NxMDQyRmh1UG9VM2FNUEJNejNSN0ZucU12bzUrL0JuWkFtMmxNbnNMeUpSOXpITG05SDlRVG9lVzBqOXQ4a28xL200RXdhTks4OGlvMGd3OWM1Um1EMVdhUjN2MlNoOG55VnlweENvK3JvOEV1TDhackkvQTMxQ29IK3UrdXdjdDYrTmtIMlRqZkRMWDUzbWpqNVVsR3BKa3RzL3o3aXl1SHVKbWVSajNKSUxzSjRTZXFPZkM5T29KN05sMkdCbERsekU5b0tZWHRCSVlCTmUwSXdHUS9RMU5EVTF6VjNmWSszYjRVQ1R0UHlCSi8rTFY5UURIQ1JlaXphc1huZERTK3NrendZYUc0RFBGaytmbXZ1alBHRmg2MUovMS80dkFjUUZERnk1c2JUbCtjYTNlV3dpbTlacGh1aDFjeFRFTnNqT21KTEFEdFNNWjYwbVVkb1NNd1ZxMWFPdFl0WUxoVm10Lzh4alZTazJUcW5Wc1dOOGhCWEthZTRxRUp0MVpOT2lKUlFDOVJ1OFQyVWs5bFRTbzJFbE9TK29qZCtxcGxFNU8xcE5uV2FHNjdmSWQvQmhBZm1vSE5lbGFjVXBMMThwUnlIK001UGJoZTBQeGtUL0VRL2hlYThuMkxueHBQR3k5amhQaGVKZnR5Q0MwUFRlVFU4Z0d0ejNhVWRyelc3eVVOc2U2eDdsUHRkUzZoNXdPemJuZFNDWU5zdHFBNWdTWitoblplVURUVmpDbmd2Wi9Mdk5sOTN3L2pySXlxbDNnY3V5azRYcllJVUhqVHBqcmRWTHJLMlZKTXQwajlOWnBWeS9kSSsyWUw5WE1zaHpON3lKeGs2QjZPdjU0WDdMbFkzcHQ2T09QZmJMcys5aUZGVTFSUkVocFNkcEI2ajRwQndMeWt3MXRXVTNMdGpXZzkydlF2bjBpeGFNWjk4bncyNmZJc2pJT3FxZmlqMW9URzVBTWRPY2lKYVJjNUVDZHpsMmxsQ2pYNjBEdkoxc2FHbWo1ZG5CaVRYZkxZUm1lNnhyZ3Q4OXgzSWphdkJ6MklOSUM4OUlBOCtKZVU0TGQ3VjVXWWtjcFJVdFNSMVAwd0RiQ29qdjA1QWdFeVZsNkVyYzhwYWNnTXFXZjBHSlhuRnR0VDlmdW1QMFZ5cVMzeGhpTnVJTTlXaWhRSUxhZFVsQ09KNXd6OEZWVHErYVhMNGUxcUN0bkV3LzZzcDYwMnRNbGNqVnZTQ1B2QmVNc1JDcUdSRFFLZWxqMGh2MDg3cWxYUENVaStuVFYzaUpGUXVDajY2VUk0OXJ1UHlCWEVwSEpVVHJveUYxWmVzRUpwcFNlMFNSUTNkUk81NUduVi83d3l4M0xpc1ZsSGZZODhOc0tLL3EwVmFVSDIvdmI0WG13ZEtLbWF1amcxSVVyRjA0Rlo3NytpL25uNkszVjVvV3JGazd0YXBhblJ1NFp2ZFA4VS94MUdNc1VjQXozUmxYOVBoVzlUZFZicytWVDgzOFZaU0V5WDZocEVQZ2UrMThYN2xpd1lNZEMxT240MW44bEZpMWZOQ09WbXVGNjZMV3JpOVZxOGVycGcrYTBRYng3L282OU8rWTd6dmtKaXJQaWhKbko1TXdUVml5eUg4NXR1M0JiZnZyNjdldk51dXkvQTM4R3ZLR1ZtUW42L1BIQUcwNWl0akJmWUM1MUpBQm5PTkpIMklKaFVGUW5vV29DbHlpa1FaVExUUktBSEw0QjBpV0lrOWxLMm5CT0hVMmp3SnRkMUY1T1ZTakhBa0NoRmxReEhFTkJwVXpQTmNLdWlKaW5NUHJmaWtGMEJUVTNkWFkyV1E5a3U3cXkvL1p2TkNxQSt4M1AvbFdpQmFOYlZhTkJzVjlVSXcwQmxMZGZoSGZCN01Sc3BDN0txQ3ZVektLT1JQTHRRRmp3ODM2Zm4rV0pHQXFrVmlXTG9reDQzaThYVGI4c2M2RFRtL2d6UGJCVGllQ3VKbnNYclFrdnpuYTE2Z0hyUjA1TjZNdVFSRm9iNzJrSXJBd2FEWUVWcWpGbDFWOWl0OThlZTd4WWZIeG81Y29oam9ldEovczloSGg0TVJ4WHhNZFhzTmlqK25uK0NwN1ZCRC9oUjJYSHMvSDd3SXNYTVo5anZ1cFFLRmRlY2lURit2MFhxbDY1cGxsM1BOM3hwWmM2eW5XaEVoSWRmYk9kcmxkMytIT3dSMnNnMWNieWxKKzdueEVZR2NySXpDcmRhdUdRZ2lHT2NoZktyUlAwWmphSlBDUXBBZDlEa2hieVdRZXBHMnRVZlRFNjhMalkxTmxsTC9BcmpXZ0ZId3J4YjNQSUkwc2V6TDZkN0doTDIxZDBMdWdLK01KR09NYXlIdDZ2SmtSeGwyRTBITmZRNXNFWUtoYzhwdENnOExzNGpzVXkrbHpBa0VLKzEyZ0ZyL21ERVVucGJIcVpWdkphcG1oL0g0cUppT2VJTU5CZXFNRFRsZDNlMUhud2sweXhtSGxVVW1LUGl1R3dhSC9FSXFROExPNHg1aHZSYU1rajhsNmVZTFlrRUNVTkE2M3lncGNaNVFWMG5LbDgyOEtZTU5wMHowMlFiOGF2YXJyS3liamJpL3c0bU5UUDBtaUU2dklNb2xvdjU2dlZQTTZBYXlqV3k0cGhLRGlqR0Z1dUZWVlZCQ2ZnRzRWdW9ZRDlCK3B1VjBNcWZxK2FIOHR0WFZyUGFpajIyNUNzNnNyWFFHMVZRWEZKVUQrczJrL1NyS2k3VGtlMk9QM1NqbTVMVXRNNUU4UVZwQ0JDNzVoblMxbVllV28yeFNZcEdhbVVZVjFQK1NiZVlsMlB0OWpYdnlBWUNoSEl1d1Nqckkvbk53b2tvQXRrNVF2NHZTVEZCSHk4eFVoV3JldC85UWtraGJ3ZSt3T0NFT1l2NWZXQVFEWis0dDdoc01tbElNZFFPNGxKOVNGMnpENHlaak1wak5sSHhtd201cWo1TWl6andxZ1NESlFSTTFzR1R1NnFWTHBPSG5pMkRteFp1M1JSVzN0NzI2S2xQNmtEYXhjTUhYZmMwRlZEeDZINUZ5d3cxNXZtK3JQWG05VlQ4VmkrMHVxQlgxT2dOQ0dmQS9UUEg3cHlhUDc4b1FVTGgrYVZuSnptK3MrZmF0YnZRbDhPZldvRnJZakp1U2JvZ21PRGJxZUhrTE53THlpendDdm85eWVHemxGTE5jZER2d29ncmtGSE93Q3pXc2gzWUJDTGNZYjJOUWt6QWw1WHhkUU4vRmhRditHR1FIdGNVMGw2UjBEaWhGemtqc1crNW9hNDdBdmc0KytJTkxHQ0ZOd1I1NElob0ZkQkRCdkxJN0U1NVhJdngzb1BybVdqN05xRFBJOFFlNE92aVNmS3crU1VpTGhraVNqNzJ4dHUzUjVvMHh1U0pINURPS3F3SWQ4TmNaTFd3eDJoN2QrTnRLakUwNDBSOG5DQlg4ckRYa2xrbXg3eCtSN0xDVExoMkt1Q1AvRUpoS3pIeFRFNzRTYjh6dWg5dlI1NlkrOEkyV3p5VFcrMXBCcGhlbUpQS1gvSnVlUk1qK1pWZU9tMTU5ZHdOelZZV0U4bTJ0b1NqcERTN2ZQN2ZkYWJwU2QyL2F6YUR5OUticm5sbGkxYmR1M0M3N1FsckNjcE51NU90SlZrMFhxU291SnVVZDVocjBPM3R1NytjR1hpYXgrdVROb1BtT2dlODNhek5tZGI4UDFNbENuU1c4RzFyZW9ZbVdFUHdJNkdEUUZUVUdVcGpVMVhLSDBjMDlMejZLWWwvb2k4aEEvTC9CRG5aeVg4QlVIZ05mU281TGYyeWhGWmx2QiswQmd3TTJqZkxVRUluVGpJeTJGK0wvSGd2WHlZWjlHanN2Uzk3OUdVQTQ0VHBjM2hhM1RvTFNZTTQ5ak1sSm5qbUpYT1dSNWRPK1B1dzd0SGVXejk0cWxhdTNxYVRhdVVBWElPRjBqV3VFR2QzQU96bkJpUjVTZUZDZCtjbEFQUjlwajFRYXd0QmcrV3JRK29Edll6dElaNjluOWN3bkV6V2ErWC9RdDFYanVXZ3c4bC9LQjJXYkgyS0JTRzZYYzRwVmpRK2pRWXc0UFdmbERwdUdETXVnbjlobVdMMk1PdTR6eGtoWmVOMFp3SlRyaEM0Qnd3eGdsN0JMYVJYaHBzWklVNmpUNEp2K0RRc2pSSVJUM0hvR2VnZnRIZGhXUlFNS3NzcW9KVXhNT1lBSVVoRXdJcFBSN1hyWWVwaStkYUR6dHZWbzd3WG85aXZlVDRDS01UdkVySWEvL0VxL2o0dytoNGJ5QWsydmQ3QTZLQW54L0xxOGRMMXNOeHlNdDZ4YkJzdmFTd0ltL0VJQ3NLQnJ6MlQ3MUk0SU9vak9aN2tSb1E3UWNoN0EwNHV2WW41SjlJQ1BqTnljd2djeVpvSUJjeGx6blVNSnN2alA2Wm85ZURnQ2FFZGZmZUVMQmcrbkVsVnlqcFpnV1FxR1c1Qk9UUk9UN3BRTFdzemkwSm1zM0pUZHc3RUJuT1BBSXdqZ0RRUzlrUWFlL0lOVVgxQUpubDVYT1pyNnhZdldiRHlqbHRFUlZINXJTYzBKeHJESWtzS3lJaGM3UG52RGppZURHUW1rblVrTmFveDRKRkRmbkRVMmN1V3JWazZZTHR5UXpMVDFjMFBabWFjazFzYWl4ZWFLekc4M0Y0OXNJTEVmdGRiNWtieVJFdUdrNFpNWTA3ZGVPNlZjdUhZbkU1Y0Z4bCtkUk8xblA1bkdhVzhHeFlpb3JHVk9YNGtqWlhWRUo2T1FpeHdHUTRyMXJjaHFia0YzZjArS1ZvNUl5NWk1ZXZIUWdhb1ViTlFETkRqWTJGZU96TEdxMGhQaE84UW1Pakd4bS8xdldZVWJuNzdCcS9uSHFNKzJMWjJ2Y20yZHFOVldxNXlwWklzYUdwcWNIYVQxMjh3Ym9SYjd6cG9tQkQ4Q0ovTU9oSEpYOFFxd0dDM3h2RkFPMjgyN29SZmQ4KzZDQVVBVFVvK1lQaithTUttbjZSM3VtbG1pWG9sYUJWbHVtM1lZV2pIaXpRTmhXb1BNZTd1OW5kMjVpWmU5RzZTbW45UmJ1b1YyeS9hTzZXQ1Z5TzhyMGJHNUloRWszcVJXaEpOQmpFLzFwSHAxNTdzVlNhZ08xd3lZY1VRdytBQ0xJNUtIMUUyLytSRkJ5emRXN0JqOEJJQnBrRUhjR2pmT2RvMEZiV1B0clJ4c0ZQNGlIcmJIeVg0UGNMMWlyQi83SmY4Y1B6cmhUdyt3TVN2c3A2RWVjN0pNRzZsU0xnZGFFRS9SREZla0RTTkFrdkhJUEg1TG1UOEYyd3kxUW1CcHBiaDhPTjZERkRXU3QxT1FjUjVXcDZGTXFPUXJ5TEJkQlQrTXhVeXZwR0tuVW1mVlNzdVA2ZmFsNHRWY1YzbGN1SG1YSlVrdXV2VldxUTVOcGEybFNUS2F1VHVXSCtTRzVvd0ZaUHVnYnN2Q04rQXgzTGg4WXhRZHlhSHVPQ2R2TlBIMkJESEJHRVgvRkI5aWtnazVxSThYc1UwMkdEWnJxdE9wNE4zdmZra3p3R2RFUDhEeDZ6SU1lSkloWXdydkh1M2ZneGdQeE1ITGpPZE9BNkRPSU55cEUxczBBWk5KbndqVU0xVDJvM25LbmVNZm43aC9GcDZJTkZpd1lIUTRzWHIxLy82UFdOVS9LeDYyTjVuQTM2cmhmRjYzM29rMi9FY3Zub04yTDVRa0Q4aGdnUG5sWHR6dVh0L2QzZ29wZHpqWmJWbU1zREEybk1XUTlBYzNsUm5GMklIaGxaMDAycG5CdGdNaUI5SEFlYTZTbEFVZW0zM0hmQ3lOZXRkQTZybzRyUDZBNnBhMU5vOUc0TFJZT0pZa2N2dXRTVnBOem9OMmZscWprT3pvMjdGbU1lQTNadWVuRVQyYTFyM3grSFZDcVhucERETUYxNy9ETE1XWjVxaUVOMCt2WVE2K3doT3ZON0lBU0M3MzdlZ1h4RGdHQTloSDVFayt4K0dqTU9SbTE3NmxsOFI0RU9GdjIwcXNjaEhKS0xFWnEyZ2FaRjhNTkR0UHBybktxYU9UZkhFTFRMV2tkemlIdHArTlp4YmJ1ZUtySWhlVDFORGZzdmNyM0JDWkV2UEJHanVCMmpUdVFKTjUzVVpjY3QrUGZPWG0yQStXc0J1V2RzdDQ3dXgzcE1qbzRWSFRWeUJIQWZ2amFUc2JabE1qVS9HS2dCdUR2YTFGUnFham9VeldiTDJldzdiZ2cvWEsxYXI1c3h2NEw4MWVwRE5LclVaSDh3MFIrVGIvOFp2K1RzNVhYTVZ1Wmk1a3JIRmpwT0MrZDBjMHoxZGphNWU2VW5UZTlaMVRUd21yTHVYc29hTy9ESjFoREg0cXI1Q1pJYkZIYUVOTWVPclZmSElJbGVRWGNvNGJCaXIxYkNSSThKTEJxaXdwTzlteFhRdCt4L1Y4TDIyNGFpNjhycEZNbVFCTlNqeTJpS2srUGZaZDErRTBYQ0NnMFQzWDVXWUQrbWVjR3hoNmt3MWtORFBmanFzWGpjcnNzYmFPWU5zbjRlalp0R25YMVE4ajVJVUhWZGhRUjdIaThaRk1tdDgza0gzaUNGN01kSGN5Q3JCa0FWSDQzR2pwNUpVbDVNVDgxTVppNnpERWIrVE9ZTHp2ZVNyakJlRjhxejQwbHBPMkpyMXZGMHpTL1I4MHA2YmpuaEFsc2RydlNpc1VDNU9vWlVtWVJGaWh1QVA5clBCcVBxS2lPYk5mQUdJNHN6MWx2QXVsRWJPQnV0Sy9EWjFqVjR1NjJXZktyaUwva0M4dTNVQVVnbDhoMTFVTFdmTFlIeTVZT3c4cjBTM1U0MFhjSDNSeWdYaTdodTFyQU9PcFVVRzlKbWlQTFlrT3R1M0dqOVgzVFRScVZCcVQxK3FRYmRwSWI5aXVSVmFoNHpVZGZPMTc2aStudi9EU0FzSXpSZWd0Q3lZOE5WVjdMSHl3TzdPcWl3VUtiQ3dvV25sRW5KZnNNVkkvWmZTNXQ3clYvVnlGRzBhMnRQUjlrVk02ZzNlL1pGNkhaVmZKUG1lRk5VN1plcE5OUVFyTWtUdmFCWGpzb1R6bmNlRTAweC9CZ3RMckhqWUNML2d5SURmdERhamEraE1nZGczVFZaOG5EbGljTWo1SHpDZ2w2V1l5b3dqdjNRRXVkZXRlSW9yUFcxQi9wci9XT3EycTdVSm9VTHBydmNrbWh5Q242Z1h6RjJSK1JsUHpzcEcwRlBSektyN0FhQlRkRHRBTTVlTHh2bkJJRURaMjhyRi9MTjg0VzQxdTZ4U0x6bkRGVTlvODE2am42Z2hsdmFyUGRwQWhxaXJyMTdEUDZXNllXZk9UN1p0ZDFiWkNlaFBmVTYzM0pYMG1vQkpEZXkwL291K3NDMHZvdXZ0cmFlamZObkEzU0tpejlDdmswOE1CNGQ5TnNHK204SzZMY0pMcEVMZzJqTUdXeTJ2a1hyaEcvMFUvdFBpQmQvaVhEc2N0WXp4OE11QndVUWh3R3d6bkhDd09IK0pJZlozeEh5YmRhTHp2ZXdyTWUrUXZSY3dKRzc3aUljUjE2a2g2c3ZrbHE3WHlHM2tCU3M3ODVqclcxSDg1M0E3V3NjSFRZNlpyYWZkcW81ZmJwNTZtbXYxNEhqUS80ZFdtTm9TTlkwdVFhUTFBUU1CN0FIWlcxSERhY09qT2tRTzBHZWlzQmFhYS9kQTNJdU9kVUVkdWVDazNNWGFOekZQR2NSMCtaaFp2SHhjODN5ek43eXREa243RHRoenJSeTc4eXlPZmY0UmMwTG1wc1huRWlkNWxSYlcxOWJHejZRaXBlSzU1eDZUckVjVDZmalpRY3N4VlBmYVRuaDVPTmJXbzQvK1lTVzVSMXpPdUJoYXVjWXQ1TGZrWFdPM2x6SVU3SkpPVk9IKzk4bG5ITXVtQ3ZGTWZMcUR0V0VDYXo5U3hCNlI1aWVmOUZqUnZMQ1RaeDhlRFhQczVkNGZKNUxXRjQ0MlphNWI3UHN0M24vNGRVQ2paWkdvMi95b0srUHdaNmJqb3JpZ1FMdGs5M28vd2RQMjVNQ0FBQUFlSnhqWUdSZ1lBRGlFMnJCYnZIOE5sOFp1RmtZUU9CUmNhNFJqUDcvLzM4REN5TnpBNURMd2NBRUVnVUFLbWdMTHdBQUFIaWNZMkJrWUdCdStOL0FFTU9TOUI4SVdCZ1pnQ0lvSUJrQXFyUUhLd0FBZUp4allXQmdZTkVCWW1RYUhTY3lNREMvd0NGSE1mNy9INEh4cUlPNXpRQ0hPMEZpbm1oaXJMUnlNNGs0aVRoMUFIOGdDb3NBQUFBQUFBQUFBRllBdGdHZ0FmSUNLQUorQXRnRGlBUmNCSElFOWdWZ0JiQUY2Z1ltQm00R3pBY3NCNG9INkFnZUNIb0lyQWpXQ1FZSktnbFNDWllKdWduV0NmUUtMQXF1Q3VnTGpndnlEQllNamd6dURUNE50ZzRpRHJRUGJCQWNFRzRSQ0JGT0VlUVNWaEtxRXdBVFFoT0FFL0FVVWhUd0ZVWVYyQllVRmxBV2RCYVlGcndYWkJlT0Y5QVlDaGhVR1E0Wndob3VHbmdhNGh0aUc3d2NCaHlVSFB3ZHhoNElIbVllcWg3c0gwQWZvaUNBSU5JaGpDSXVJbzRpMGlOQ0kxb2puaVBvSkRRa2lIaWNZMkJrWUdCSVp0aktJTVFBQWt4QXpBV0VEQXovd1h3R0FDWUdBa0VBZUp5RmtUMXV3a0FRaFovQmtBU1VLRXFrTkdsV0tTZ1N5ZnlVU0tsUW9LZWdCN1BtUjdiWFdpOUkxRGxOanBBVDVBanBhSE9LU0huWVF3TkZ2TnJaYjk2K21SM0pBTzZ3aDRmeXUrY3UyY01sczVJcnVNQ2pjSlg2azdCUGZoYXVvWW1lY0ozNnEzQURMM2dUYnJKanhnNmVmOFdzaFhkaEQ3ZjRFSzdnQnAvQ1ZlcGZ3ajc1VzdpR0Ivd0kxNm4vQ2pjdzhhNkZtMmg1NGNEcXFkTnpOZHVwVldqU3lLVHVlSTcxWWhOUDdhazgwVFpmbVZSMWc4NVJHdWxVMjJPYmZMdm9PUmVweUpwRURYbXI0OWlvekpxMURsMndkQzdydDl1UjZFRm9FZ3hnb1RHRlk1eERZWVlkNHdvaERGSkVSWFJuK1pqdUJUYUlXV24vZFUvb3RzaXBIM0tGTGdKMHpsd2p1dExDZVRwTmppMWY2MUYxZEN0dXk1cUVOSlJhelVsaXN1SVBQTnl0cVlUVUF5eUxxZ3g5dExtaUUzOVF6SkQ4QWRpVGIxZDRuRzFUNTMvYk5oRFZTMDFxV2s0Y3UwMTNtKzV4SFVuM1N0T2s2ZDU3RnlSUEVtb0lZQUZRc3YvN0hrajlYTGtOUHdCM2o0ZkR2WGVIM3JsZTk0MTZ0LzlLbk1NZDJFR0dISDBNTU1RSVkweXdpeW4yY0I0WHNJK0xPTUFoN3NSZHVJUzdjUS91eFgyNEh3L2dRVHlFaDNFWmorQlJQSWJIOFFTZXhGTjRHcy9nV1JDZXcvTjRBUy9pQ3E3aUpieU1WL0FxWHNQcmVBTnY0aTI4alhkd0RlL2lPdDdERGR6RSs3aUZEL0FoUHNMSCtBU2Y0ak44amkvd0piN0MxL2dHMytJN2ZJOGY4Q04rd3MvNEJiL2lOL3lPUC9BbkZBcVVxSHBUcXRod1pDcTFMdzFueEpXT0U0cXFNRXd6NTVkWEp4VFVpc2xabzYzOFYwMTBPWlVMTG84R0ZKMHpVZGNqV3F2SWZxbjgwZmJSS3htVmJFemVRUmt0NHRJSXBIeVZrWEhsVVovQ1FsVnV2YnZaU2R2QThaQXE3Ym1NMmxueWJ1MTV4VDd3OUN4Nlljc3RuV21XOXRML2tNM0pBL3FyQ1ZIUFRpalVxbVRsWFdPcnc3Tmd3WEhOYkE5SUdUMjNPdkl5VUtFQ0o4b1h0OEdaNFdPMjFmNDJWcklWOG1mQ1F2UWN5OFdralNjckxKU0kxRHJKUFAvdjdWM2czaW5RSmRzLzlkT1pFSldQdThJdjFFWjEwTUdwcDl1K0ZFblA2U25ZdW52L2llbVRWNVZ1UWs3S2k0VFNBMjJQaHZSM3d5R3BOaURQTTg5aE1TRHBRdFIyUHFUSXgzSTNxeUhWS29TMTg5VjRxNzg1clpScGVJZjRoRWRwb2RLNHdEbk5SV1BoR3lMWGJlQ1lWRlZ0SnF6ZjJ0RnZkaG1GcGZNeUhJblZqaVNmeXdSNVpxbkJTRGVGTllmUzZ6cFZHTVpVcWFpNkNvYXB5MGJWUWF6YWMzdlppS3dVM0pwVFNWdG9LVlRKU0t5a3ZMcmNtR1BoVW0xc29kb1VxY0srMUdrcTlwUE5UcTVtTytyS1htaFR5YWl1dFRRcVZWajBxV2hpZERZWFllc21EcnZYVUxqanZGWFlaYkpGSVdxYlpjRkN0S21OVTVXRXFWQXFTWjUzUTVjbkJzNW55Wk5jeXJDUE8ybTRCOUs0bGE3UzBVNEZhWVJYTnN3U2t0Nm5TMzlNaXNoYXNiS2tpNnhSTDJXZGV5MzFkczlhbnB1clQvcWtsN1ZMMllYUUlNbTEwcnhPeXErNDEvc0hmd0o3cEFBPSkgZm9ybWF0KFwid29mZlwiKX0uZmMtaWNvbnstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTtmb250LWZhbWlseTpmYy1pY29uIWltcG9ydGFudDtmb250LXNpemU6MTZweDtmb250LXN0eWxlOm5vcm1hbH0uaWNvbi1kYXRhLXRhYmxlOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3YmVcIn0uaWNvbi1kZWxldGUtY2lyY2xlOmJlZm9yZXtjb250ZW50OlwiXFxcXGU2MDRcIn0uaWNvbi1lZGl0OmJlZm9yZXtjb250ZW50OlwiXFxcXGU2MGJcIn0uaWNvbi1zYXZlLW9ubGluZTpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjRiXCJ9Lmljb24tYXV0bzpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjkyXCJ9Lmljb24tY2hlY2s6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTY0Y1wifS5pY29uLXRvb2x0aXA6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTdmM1wifS5pY29uLXdhdGVybWFyazpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjQ1XCJ9Lmljb24tdGFibGUtZm9ybTM6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTYwM1wifS5pY29uLXRhYmxlLWZvcm0yOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3ZjFcIn0uaWNvbi1jYXJkOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3NmJcIn0uaWNvbi1sb2NrOmJlZm9yZXtjb250ZW50OlwiXFxcXGVhZGNcIn0uaWNvbi1zaGFkb3c6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTZjY1wifS5pY29uLXNoYWRvdy1pbnNldDpiZWZvcmV7Y29udGVudDpcIlxcXFxlNmNkXCJ9Lmljb24tYWxpZ25pdGVtcy1mbGV4c3RhcnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTYzMFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uaWNvbi1hbGlnbi1jZW50ZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTYwN1wiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5pY29uLWFsaWduLWZsZXhzdGFydDpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjBhXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Lmljb24tYWxpZ24tc3BhY2Vhcm91bmQ6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTYxZlwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKX0uaWNvbi1hbGlnbi1zcGFjZWJldHdlZW46YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTY1ZVwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKX0uaWNvbi1hbGlnbi1zdHJldGNoOmJlZm9yZXtjb250ZW50OlwiXFxcXGU2MDZcIjtkaXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyl9Lmljb24tYWxpZ24tZmxleGVuZDpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjBhXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpfS5pY29uLWp1c3RpZnktZmxleGVuZDpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjBhXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfS5pY29uLWRpcmVjdGlvbi1yb3dyZXZlcnNlOmJlZm9yZXtjb250ZW50OlwiXFxcXGU2NzdcIn0uaWNvbi1kaXJlY3Rpb24tcm93OmJlZm9yZXtjb250ZW50OlwiXFxcXGU2NzhcIn0uaWNvbi1kaXJlY3Rpb24tY29sdW1uOmJlZm9yZXtjb250ZW50OlwiXFxcXGU2NzlcIn0uaWNvbi1kaXJlY3Rpb24tY29sdW1ucmV2ZXJzZTpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjdhXCJ9Lmljb24tanVzdGlmeS1zcGFjZWFyb3VuZDpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjFmXCJ9Lmljb24tanVzdGlmeS1zcGFjZWJldHdlZW46YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTY1ZVwifS5pY29uLWFsaWduaXRlbXMtYmFzZWxpbmU6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTY2MFwifS5pY29uLWFsaWduaXRlbXMtZmxleGVuZDpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjMwXCJ9Lmljb24tYWxpZ25pdGVtcy1jZW50ZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTYzMlwifS5pY29uLWFsaWduaXRlbXMtc3RyZXRjaDpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjMzXCJ9Lmljb24tZmxleC1ub3dyYXA6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTYwMFwifS5pY29uLWZsZXgtd3JhcDpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjAxXCJ9Lmljb24tanVzdGlmeS1zdHJldGNoOmJlZm9yZXtjb250ZW50OlwiXFxcXGU2MDZcIn0uaWNvbi1qdXN0aWZ5LWNlbnRlcjpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjA3XCJ9Lmljb24tanVzdGlmeS1mbGV4c3RhcnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTYwYVwifS5pY29uLWRpc3BsYXktZmxleDpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjE5XCJ9Lmljb24tZGlzcGxheS1pbmxpbmVibG9jazpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjFjXCJ9Lmljb24tZGlzcGxheS1ibG9jazpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjFkXCJ9Lmljb24tZGlzcGxheS1pbmxpbmU6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTYxZVwifS5pY29uLXJhZGl1czpiZWZvcmV7Y29udGVudDpcIlxcXFxlNmExXCJ9Lmljb24tYXJyb3c6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTYwZVwifS5pY29uLWxpbms6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTYzZlwifS5pY29uLXF1ZXN0aW9uOmJlZm9yZXtjb250ZW50OlwiXFxcXGU2NDRcIn0uaWNvbi1yZWZyZXNoOmJlZm9yZXtjb250ZW50OlwiXFxcXGU2NTlcIn0uaWNvbi1zZXR0aW5nOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3YzZcIn0uaWNvbi10ZXh0YXJlYTpiZWZvcmV7Y29udGVudDpcIlxcXFxlN2M5XCJ9Lmljb24tcGFzc3dvcmQ6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTdjYVwifS5pY29uLXRhYmxlLWZvcm06YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTdjN1wifS5pY29uLXZhbHVlOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3YzhcIn0uaWNvbi1leWU6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc5NlwifS5pY29uLWV5ZS1jbG9zZTpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjZmXCJ9Lmljb24tY2VsbDpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjAyXCJ9Lmljb24tZ3JvdXA6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTdjMFwifS5pY29uLXN0ZXAtZm9ybTpiZWZvcmV7Y29udGVudDpcIlxcXFxlN2MxXCJ9Lmljb24tYWRkLWNpcmNsZTpiZWZvcmV7Y29udGVudDpcIlxcXFxlN2MzXCJ9Lmljb24tYWRkLXRyOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3YzRcIn0uaWNvbi1hZGQtdGQ6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTdjNVwifS5pY29uLW1vcmU6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTYzMVwifS5pY29uLWZsZXg6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTdiNlwifS5pY29uLXRhZzpiZWZvcmV7Y29udGVudDpcIlxcXFxlN2I5XCJ9Lmljb24taHRtbDpiZWZvcmV7Y29udGVudDpcIlxcXFxlNjhmXCJ9Lmljb24tdHJlZS1zZWxlY3Q6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTdiY1wifS5pY29uLWRlc2NyaXB0aW9uczpiZWZvcmV7Y29udGVudDpcIlxcXFxlN2JkXCJ9Lmljb24tdGFibGU6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZWIwYVwifS5pY29uLWNvbGxhcHNlOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3YmZcIn0uaWNvbi1wcmUtc3RlcDpiZWZvcmV7Y29udGVudDpcIlxcXFxlNzcyXCJ9Lmljb24tbmV4dC1zdGVwOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3NzVcIn0uaWNvbi1tb2JpbGUtYWN0aXZlOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3NzhcIn0uaWNvbi1wYy1hY3RpdmU6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc3OVwifS5pY29uLXBjOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3N2FcIn0uaWNvbi1tb2JpbGU6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc3ZFwifS5pY29uLXBhZC1hY3RpdmU6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc4Y1wifS5pY29uLXBhZDpiZWZvcmV7Y29udGVudDpcIlxcXFxlNzk1XCJ9Lmljb24tc3ViZm9ybTpiZWZvcmV7Y29udGVudDpcIlxcXFxlYjc3XCJ9Lmljb24tYWRkLWNoaWxkOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3ODlcIn0uaWNvbi1zd2l0Y2g6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc3Y1wifS5pY29uLXRhYjpiZWZvcmV7Y29udGVudDpcIlxcXFxlNzdiXCJ9Lmljb24tYnV0dG9uOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3N2VcIn0uaWNvbi1pbnB1dDpiZWZvcmV7Y29udGVudDpcIlxcXFxlNzdmXCJ9Lmljb24tY2hlY2tib3g6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc4MFwifS5pY29uLXJhZGlvOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3ODFcIn0uaWNvbi1yYXRlOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3ODJcIn0uaWNvbi1udW1iZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc4M1wifS5pY29uLXVwbG9hZDpiZWZvcmV7Y29udGVudDpcIlxcXFxlNzg0XCJ9Lmljb24tY2FzY2FkZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc4NVwifS5pY29uLXNwYWNlOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3ODZcIn0uaWNvbi1jb2xvcjpiZWZvcmV7Y29udGVudDpcIlxcXFxlNzg3XCJ9Lmljb24tc3BhbjpiZWZvcmV7Y29udGVudDpcIlxcXFxlNzg4XCJ9Lmljb24tYWxlcnQ6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc4YVwifS5pY29uLXJvdzpiZWZvcmV7Y29udGVudDpcIlxcXFxlNzhiXCJ9Lmljb24tZGl2aWRlcjpiZWZvcmV7Y29udGVudDpcIlxcXFxlNzhkXCJ9Lmljb24tc2VsZWN0OmJlZm9yZXtjb250ZW50OlwiXFxcXGU3OGVcIn0uaWNvbi10cmFuc2ZlcjpiZWZvcmV7Y29udGVudDpcIlxcXFxlNzhmXCJ9Lmljb24tZWRpdG9yOmJlZm9yZXtjb250ZW50OlwiXFxcXGU3OTBcIn0uaWNvbi1zbGlkZXI6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc5MVwifS5pY29uLXRyZWU6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc5MlwifS5pY29uLWRhdGU6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc5M1wifS5pY29uLXRpbWU6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc5NFwifS5pY29uLWdyaWQ6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZWI3OFwifS5pY29uLWRlbGV0ZTpiZWZvcmV7Y29udGVudDpcIlxcXFxlNzcwXCJ9Lmljb24tY29weTpiZWZvcmV7Y29udGVudDpcIlxcXFxlNzcxXCJ9Lmljb24taW1wb3J0OmJlZm9yZXtjb250ZW50OlwiXFxcXGU3NzNcIn0uaWNvbi1hZGQ6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc3NFwifS5pY29uLXByZXZpZXc6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc3NlwifS5pY29uLW1vdmU6YmVmb3Jle2NvbnRlbnQ6XCJcXFxcZTc3N1wifXByZSBjb2RlLmhsanN7ZGlzcGxheTpibG9jaztvdmVyZmxvdy14OmF1dG87cGFkZGluZzoxZW19Y29kZS5obGpze3BhZGRpbmc6M3B4IDVweH0uaGxqc3tiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzAwMH0uaGxqcy1zdWJzdCwuaGxqcy10aXRsZXtjb2xvcjojMDAwO2ZvbnQtd2VpZ2h0OjQwMH0uaGxqcy10aXRsZS5mdW5jdGlvbl97Y29sb3I6IzdhN2E0M30uaGxqcy1jb2RlLC5obGpzLWNvbW1lbnQsLmhsanMtcXVvdGV7Y29sb3I6IzhjOGM4Yztmb250LXN0eWxlOml0YWxpY30uaGxqcy1tZXRhe2NvbG9yOiM5ZTg4MGR9LmhsanMtc2VjdGlvbntjb2xvcjojODcxMDk0fS5obGpzLWJ1aWx0X2luLC5obGpzLWtleXdvcmQsLmhsanMtbGl0ZXJhbCwuaGxqcy1tZXRhIC5obGpzLWtleXdvcmQsLmhsanMtbmFtZSwuaGxqcy1zZWxlY3Rvci1hdHRyLC5obGpzLXNlbGVjdG9yLWNsYXNzLC5obGpzLXNlbGVjdG9yLWlkLC5obGpzLXNlbGVjdG9yLXBzZXVkbywuaGxqcy1zZWxlY3Rvci10YWcsLmhsanMtc3ltYm9sLC5obGpzLXRlbXBsYXRlLXRhZywuaGxqcy10eXBlLC5obGpzLXZhcmlhYmxlLmxhbmd1YWdlX3tjb2xvcjojMDAzM2IzfS5obGpzLWF0dHIsLmhsanMtcHJvcGVydHl7Y29sb3I6Izg3MTA5NH0uaGxqcy1hdHRyaWJ1dGV7Y29sb3I6IzE3NGFkNH0uaGxqcy1udW1iZXJ7Y29sb3I6IzE3NTBlYn0uaGxqcy1yZWdleHB7Y29sb3I6IzI2NGVmZn0uaGxqcy1saW5re2NvbG9yOiMwMDZkY2M7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uaGxqcy1tZXRhIC5obGpzLXN0cmluZywuaGxqcy1zdHJpbmd7Y29sb3I6IzA2N2QxN30uaGxqcy1jaGFyLmVzY2FwZV97Y29sb3I6IzAwMzdhNn0uaGxqcy1kb2N0YWd7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uaGxqcy10ZW1wbGF0ZS12YXJpYWJsZXtjb2xvcjojMjQ4ZjhmfS5obGpzLWFkZGl0aW9ue2JhY2tncm91bmQ6I2JlZTZiZX0uaGxqcy1kZWxldGlvbntiYWNrZ3JvdW5kOiNkNmQ2ZDZ9LmhsanMtZW1waGFzaXN7Zm9udC1zdHlsZTppdGFsaWN9LmhsanMtc3Ryb25ne2ZvbnQtd2VpZ2h0OjcwMH0nKSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlKX19Y2F0Y2gobyl7Y29uc29sZS5lcnJvcihcInZpdGUtcGx1Z2luLWNzcy1pbmplY3RlZC1ieS1qc1wiLG8pfX0pKCk7XG5pbXBvcnQgeyBjb21wdXRlZCBhcyBZbiwgdW5yZWYgYXMgRmQsIGlzUmVmIGFzIG1oLCByZWYgYXMgcG8sIHJlc29sdmVDb21wb25lbnQgYXMgYmUsIFRyYW5zaXRpb25Hcm91cCBhcyBnaCwgZGVmaW5lQ29tcG9uZW50IGFzIHd0LCBoIGFzIGhvLCBuZXh0VGljayBhcyBhciwgbWFya1JhdyBhcyBZciwgb3BlbkJsb2NrIGFzIGZlLCBjcmVhdGVFbGVtZW50QmxvY2sgYXMgeGUsIGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBoZSwgY3JlYXRlVGV4dFZOb2RlIGFzICRlLCB0b0Rpc3BsYXlTdHJpbmcgYXMgSWUsIEZyYWdtZW50IGFzIGh0LCByZW5kZXJMaXN0IGFzIGhuLCBjcmVhdGVCbG9jayBhcyBLZSwgd2l0aEN0eCBhcyByZSwgY3JlYXRlVk5vZGUgYXMgdWUsIGNyZWF0ZUNvbW1lbnRWTm9kZSBhcyBqZSwgd2l0aE1vZGlmaWVycyBhcyBIbiwgd2l0aEtleXMgYXMgeWgsIHRvUmVmcyBhcyBqZiwgZ2V0Q3VycmVudEluc3RhbmNlIGFzIEFoLCByZWFjdGl2ZSBhcyBtYSwgcHJvdmlkZSBhcyBVZiwgdG9SZWYgYXMgb28sIHdhdGNoIGFzIE9sLCBub3JtYWxpemVTdHlsZSBhcyBDbywgbm9ybWFsaXplQ2xhc3MgYXMgQ24sIHdpdGhEaXJlY3RpdmVzIGFzIGdpLCB2U2hvdyBhcyB5aSwgcmVuZGVyU2xvdCBhcyBzciwgbWVyZ2VQcm9wcyBhcyBFbywgY3JlYXRlU2xvdHMgYXMgYmgsIHB1c2hTY29wZUlkIGFzIENoLCBwb3BTY29wZUlkIGFzIEVoLCByZXNvbHZlRHluYW1pY0NvbXBvbmVudCBhcyBTaCB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCBFYSBmcm9tIFwiQGZvcm0tY3JlYXRlL2VsZW1lbnQtdWlcIjtcbmltcG9ydCB7IEVsTWVzc2FnZSBhcyB4aCB9IGZyb20gXCJlbGVtZW50LXBsdXNcIjtcbmNvbnN0IGZ0ID0ge1xuICB0eXBlKHIsIGYpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpID09PSBcIltvYmplY3QgXCIgKyBmICsgXCJdXCI7XG4gIH0sXG4gIFVuZGVmKHIpIHtcbiAgICByZXR1cm4gciA9PSBudWxsO1xuICB9LFxuICBFbGVtZW50KHIpIHtcbiAgICByZXR1cm4gdHlwZW9mIHIgPT0gXCJvYmplY3RcIiAmJiByICE9PSBudWxsICYmIHIubm9kZVR5cGUgPT09IDEgJiYgIWZ0Lk9iamVjdChyKTtcbiAgfSxcbiAgdHJ1ZUFycmF5KHIpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyKSAmJiByLmxlbmd0aCA+IDA7XG4gIH0sXG4gIEZ1bmN0aW9uKHIpIHtcbiAgICBjb25zdCBmID0gdGhpcy5nZXRUeXBlKHIpO1xuICAgIHJldHVybiBmID09PSBcIkZ1bmN0aW9uXCIgfHwgZiA9PT0gXCJBc3luY0Z1bmN0aW9uXCI7XG4gIH0sXG4gIGdldFR5cGUocikge1xuICAgIGNvbnN0IGYgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocik7XG4gICAgcmV0dXJuIC9eXFxbb2JqZWN0ICguKilcXF0kLy5leGVjKGYpWzFdO1xuICB9LFxuICBlbXB0eShyKSB7XG4gICAgcmV0dXJuIHIgPT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHIpICYmIEFycmF5LmlzQXJyYXkocikgJiYgIXIubGVuZ3RoID8gITAgOiB0eXBlb2YgciA9PSBcInN0cmluZ1wiICYmICFyO1xuICB9XG59O1xuW1wiRGF0ZVwiLCBcIk9iamVjdFwiLCBcIlN0cmluZ1wiLCBcIkJvb2xlYW5cIiwgXCJBcnJheVwiLCBcIk51bWJlclwiXS5mb3JFYWNoKChyKSA9PiB7XG4gIGZ0W3JdID0gZnVuY3Rpb24oZikge1xuICAgIHJldHVybiBmdC50eXBlKGYsIHIpO1xuICB9O1xufSk7XG5mdW5jdGlvbiBzbyhyLCBmKSB7XG4gIHJldHVybiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIGYpO1xufVxuZnVuY3Rpb24gYW8ociwgZiwgbykge1xuICByW2ZdID0gbztcbn1cbmZ1bmN0aW9uIFJhKHIsIGYgPSB7fSwgbykge1xuICBsZXQgaSA9ICExO1xuICBmb3IgKGxldCB0IGluIGYpXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLCB0KSkge1xuICAgICAgbGV0IHMgPSBmW3RdO1xuICAgICAgaWYgKChpID0gQXJyYXkuaXNBcnJheShzKSkgfHwgZnQuT2JqZWN0KHMpKSB7XG4gICAgICAgIGxldCBkID0gclt0XSA9PT0gdm9pZCAwO1xuICAgICAgICBpZiAoaSlcbiAgICAgICAgICBpID0gITEsIGQgJiYgYW8ociwgdCwgW10pO1xuICAgICAgICBlbHNlIGlmIChzLl9jbG9uZSAmJiBvICE9PSB2b2lkIDApXG4gICAgICAgICAgaWYgKG8pXG4gICAgICAgICAgICBzID0gcy5nZXRSdWxlKCksIGQgJiYgYW8ociwgdCwge30pO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYW8ociwgdCwgcy5fY2xvbmUoKSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBkICYmIGFvKHIsIHQsIHt9KTtcbiAgICAgICAgclt0XSA9IFJhKHJbdF0sIHMsIG8pO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGFvKHIsIHQsIHMpLCBmdC5VbmRlZihzKSB8fCAoZnQuVW5kZWYocy5fX2pzb24pIHx8IChyW3RdLl9fanNvbiA9IHMuX19qc29uKSwgZnQuVW5kZWYocy5fX29yaWdpbikgfHwgKHJbdF0uX19vcmlnaW4gPSBzLl9fb3JpZ2luKSk7XG4gICAgfVxuICByZXR1cm4gbyAhPT0gdm9pZCAwICYmIEFycmF5LmlzQXJyYXkocikgPyByLmZpbHRlcigodCkgPT4gIXQgfHwgIXQuX19jdHJsKSA6IHI7XG59XG5mdW5jdGlvbiBWdChyKSB7XG4gIHJldHVybiBSYSh7fSwgeyB2YWx1ZTogciB9KS52YWx1ZTtcbn1cbmZ1bmN0aW9uIHdoKHIsIGYsIG8pIHtcbiAgcmV0dXJuIGBbZm9ybS1jcmVhdGUgJHtyfV06ICR7Zn1gICsgKG8gPyBgXG5cbnJ1bGU6IGAgKyBKU09OLnN0cmluZ2lmeShvLmdldFJ1bGUgPyBvLmdldFJ1bGUoKSA6IG8pIDogXCJcIik7XG59XG5mdW5jdGlvbiBUaChyLCBmKSB7XG4gIGNvbnNvbGUuZXJyb3Iod2goXCJlcnJcIiwgciwgZikpO1xufVxuY29uc3QgemYgPSBcIltbRk9STS1DUkVBVEUtUFJFRklYLVwiLCBWZiA9IFwiLUZPUk0tQ1JFQVRFLVNVRkZJWF1dXCIsIFdmID0gXCIkRk46XCIsIEdmID0gXCIkRk5YOlwiLCBRZiA9IFwiJEdMT0JBTDpcIiwgbGEgPSBcImZ1bmN0aW9uXCI7XG5mdW5jdGlvbiBZZihyKSB7XG4gIHJldHVybiBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gXCIgKyByKSgpO1xufVxuZnVuY3Rpb24gRGgociwgZikge1xuICBpZiAociAmJiBmdC5TdHJpbmcocikgJiYgci5sZW5ndGggPiA0KSB7XG4gICAgbGV0IG8gPSByLnRyaW0oKSwgaSA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoby5pbmRleE9mKFZmKSA+IDAgJiYgby5pbmRleE9mKHpmKSA9PT0gMClcbiAgICAgICAgbyA9IG8ucmVwbGFjZShWZiwgXCJcIikucmVwbGFjZSh6ZiwgXCJcIiksIGkgPSAhMDtcbiAgICAgIGVsc2UgaWYgKG8uaW5kZXhPZihXZikgPT09IDApXG4gICAgICAgIG8gPSBvLnJlcGxhY2UoV2YsIFwiXCIpLCBpID0gITA7XG4gICAgICBlbHNlIGlmIChvLmluZGV4T2YoUWYpID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHMgPSBvLnJlcGxhY2UoUWYsIFwiXCIpO1xuICAgICAgICByZXR1cm4gbyA9IGZ1bmN0aW9uKC4uLmQpIHtcbiAgICAgICAgICBjb25zdCBjID0gZFswXS5hcGkuZ2V0R2xvYmFsRXZlbnQocyk7XG4gICAgICAgICAgaWYgKGMpXG4gICAgICAgICAgICByZXR1cm4gYy5jYWxsKHRoaXMsIC4uLmQpO1xuICAgICAgICB9LCBvLl9fanNvbiA9IHIsIG8uX19pbmplY3QgPSAhMCwgbztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvLmluZGV4T2YoR2YpID09PSAwKVxuICAgICAgICAgIHJldHVybiBvID0gWWYoXCJmdW5jdGlvbigkaW5qZWN0KXtcIiArIG8ucmVwbGFjZShHZiwgXCJcIikgKyBcIn1cIiksIG8uX19qc29uID0gciwgby5fX2luamVjdCA9ICEwLCBvO1xuICAgICAgICAhZiAmJiBvLmluZGV4T2YobGEpID09PSAwICYmIG8gIT09IGxhICYmIChpID0gITApO1xuICAgICAgfVxuICAgICAgaWYgKCFpKVxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIGNvbnN0IHQgPSBZZihvLmluZGV4T2YobGEpID09PSAtMSAmJiBvLmluZGV4T2YoXCIoXCIpICE9PSAwID8gbGEgKyBcIiBcIiArIG8gOiBvKTtcbiAgICAgIHJldHVybiB0Ll9fanNvbiA9IHIsIHQ7XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgVGgoYFxcdTg5RTNcXHU2NzkwXFx1NTkzMVxcdThEMjU6JHtvfVxuXG5lcnI6ICR7dH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiBSaChyKSB7XG4gIGNvbnN0IGYgPSByLnJlcGxhY2UoLygtW2Etel0pL2csIGZ1bmN0aW9uKG8pIHtcbiAgICByZXR1cm4gby5yZXBsYWNlKFwiLVwiLCBcIlwiKS50b0xvY2FsZVVwcGVyQ2FzZSgpO1xuICB9KTtcbiAgcmV0dXJuIHhzKGYpO1xufVxuZnVuY3Rpb24geHMocikge1xuICByZXR1cm4gci5yZXBsYWNlKHJbMF0sIHJbMF0udG9Mb3dlckNhc2UoKSk7XG59XG5jb25zdCBMZCA9IHtcbiAgbmFtZTogXCJ6aC1jblwiLFxuICBmb3JtOiB7XG4gICAgZmllbGQ6IFwiXFx1NUI1N1xcdTZCQjUgSURcIixcbiAgICB0aXRsZTogXCJcXHU1QjU3XFx1NkJCNVxcdTU0MERcXHU3OUYwXCIsXG4gICAgaW5mbzogXCJcXHU2M0QwXFx1NzkzQVxcdTRGRTFcXHU2MDZGXCIsXG4gICAgY29udHJvbDogXCJcXHU4MDU0XFx1NTJBOFxcdTY1NzBcXHU2MzZFXCIsXG4gICAgbGFiZWxQb3NpdGlvbjogXCJcXHU2ODA3XFx1N0I3RVxcdTc2ODRcXHU0RjREXFx1N0Y2RVwiLFxuICAgIGxhYmVsU3R5bGU6IFwiXFx1NjgwN1xcdTdCN0VcXHU3Njg0XFx1NjgzN1xcdTVGMEZcIixcbiAgICBsYWJlbFN1ZmZpeDogXCJcXHU2ODA3XFx1N0I3RVxcdTc2ODRcXHU1NDBFXFx1N0YwMFwiLFxuICAgIHNpemU6IFwiXFx1ODg2OFxcdTUzNTVcXHU3Njg0XFx1NUMzQVxcdTVCRjhcIixcbiAgICBldmVudDogXCJcXHU4ODY4XFx1NTM1NVxcdTRFOEJcXHU0RUY2XCIsXG4gICAgbGFiZWxXaWR0aDogXCJcXHU2ODA3XFx1N0I3RVxcdTc2ODRcXHU1QkJEXFx1NUVBNlwiLFxuICAgIGhpZGVSZXF1aXJlZEFzdGVyaXNrOiBcIlxcdTk2OTBcXHU4NUNGXFx1NUZDNVxcdTU4NkJcXHU1QjU3XFx1NkJCNVxcdTc2ODRcXHU2ODA3XFx1N0I3RVxcdTY1QzFcXHU4RkI5XFx1NzY4NFxcdTdFQTJcXHU4MjcyXFx1NjYxRlxcdTUzRjdcIixcbiAgICBzaG93TWVzc2FnZTogXCJcXHU2NjNFXFx1NzkzQVxcdTY4MjFcXHU5QThDXFx1OTUxOVxcdThCRUZcXHU0RkUxXFx1NjA2RlwiLFxuICAgIGlubGluZU1lc3NhZ2U6IFwiXFx1NEVFNVxcdTg4NENcXHU1MTg1XFx1NUY2MlxcdTVGMEZcXHU1QzU1XFx1NzkzQVxcdTY4MjFcXHU5QThDXFx1NEZFMVxcdTYwNkZcIixcbiAgICBzdWJtaXRCdG46IFwiXFx1NjYyRlxcdTU0MjZcXHU2NjNFXFx1NzkzQVxcdTg4NjhcXHU1MzU1XFx1NjNEMFxcdTRFQTRcXHU2MzA5XFx1OTRBRVwiLFxuICAgIHJlc2V0QnRuOiBcIlxcdTY2MkZcXHU1NDI2XFx1NjYzRVxcdTc5M0FcXHU4ODY4XFx1NTM1NVxcdTkxQ0RcXHU3RjZFXFx1NjMwOVxcdTk0QUVcIixcbiAgICBhcHBlbmRDaGlsZDogXCJcXHU2REZCXFx1NTJBMFxcdTVCNTBcXHU3RUE3XCIsXG4gICAgZm9ybU1vZGU6IFwiXFx1ODg2OFxcdTUzNTVcXHU2QTIxXFx1NUYwRlwiLFxuICAgIGZvcm1OYW1lOiBcIlxcdTg4NjhcXHU1MzU1XFx1NTQwRFxcdTc5RjBcIixcbiAgICBjb21wb25lbnRNb2RlOiBcIlxcdTc1MUZcXHU2MjEwXFx1N0VDNFxcdTRFRjZcIixcbiAgICBkb2N1bWVudDogXCJcXHU1RTJFXFx1NTJBOVxcdTY1ODdcXHU2ODYzXCJcbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBmaWVsZFVzZWQ6IFwiXFx1MzAxMHtsYWJlbH1cXHUzMDExXFx1NTcyOFxcdThCQTFcXHU3Qjk3XFx1NTE2Q1xcdTVGMEZcXHU0RTJEXFx1ODhBQlxcdTRGN0ZcXHU3NTI4XFx1RkYwQ1xcdThCRjdcXHU1MTQ4XFx1NEZFRVxcdTY1MzlcXHU1QkY5XFx1NUU5NFxcdTUxNkNcXHU1RjBGXCIsXG4gICAgZmllbGRFeGlzdDogXCJcXHUzMDEwe2xhYmVsfVxcdTMwMTFcXHU1QjU3XFx1NkJCNVxcdTVERjJcXHU1QjU4XFx1NTcyOFwiLFxuICAgIGZpZWxkRW1wdHk6IFwiXFx1NUI1N1xcdTZCQjVcXHU1NDBEXFx1NzlGMFxcdTRFMERcXHU4MEZEXFx1NEUzQVxcdTdBN0FcIixcbiAgICBmaWVsZENoYXI6IFwiXFx1NUI1N1xcdTZCQjVcXHU1NDBEXFx1NzlGMFxcdTVGQzVcXHU5ODdCXFx1NEVFNVxcdTVCNTdcXHU2QkNEXFx1NUYwMFxcdTU5MzRcIlxuICB9LFxuICB2YWxpZGF0ZToge1xuICAgIHR5cGU6IFwiXFx1NUI1N1xcdTZCQjVcXHU3QzdCXFx1NTc4QlwiLFxuICAgIHR5cGVQbGFjZWhvbGRlcjogXCJcXHU4QkY3XFx1OTAwOVxcdTYyRTlcIixcbiAgICB0cmlnZ2VyOiBcIlxcdTg5RTZcXHU1M0QxXFx1NjVCOVxcdTVGMEZcIixcbiAgICBtb2RlOiBcIlxcdTlBOENcXHU4QkMxXFx1NjVCOVxcdTVGMEZcIixcbiAgICBtb2Rlczoge1xuICAgICAgcmVxdWlyZWQ6IFwiXFx1NUZDNVxcdTU4NkJcIixcbiAgICAgIHBhdHRlcm46IFwiXFx1NkI2M1xcdTUyMTlcXHU4ODY4XFx1OEZCRVxcdTVGMEZcIixcbiAgICAgIG1pbjogXCJcXHU2NzAwXFx1NUMwRlxcdTUwM0NcIixcbiAgICAgIG1heDogXCJcXHU2NzAwXFx1NTkyN1xcdTUwM0NcIixcbiAgICAgIGxlbjogXCJcXHU5NTdGXFx1NUVBNlwiXG4gICAgfSxcbiAgICB0eXBlczoge1xuICAgICAgc3RyaW5nOiBcIlxcdTVCNTdcXHU3QjI2XFx1NEUzMlwiLFxuICAgICAgYXJyYXk6IFwiXFx1NTkxQVxcdTkwMDlcIixcbiAgICAgIG51bWJlcjogXCJcXHU2NTcwXFx1NUI1N1wiLFxuICAgICAgaW50ZWdlcjogXCJcXHU2NTc0XFx1NjU3MFwiLFxuICAgICAgZmxvYXQ6IFwiXFx1NUMwRlxcdTY1NzBcIixcbiAgICAgIG9iamVjdDogXCJcXHU1NDA4XFx1OTZDNlwiLFxuICAgICAgZGF0ZTogXCJcXHU2NUU1XFx1NjcxRlwiLFxuICAgICAgdXJsOiBcIlVSTFxcdTk0RkVcXHU2M0E1XCIsXG4gICAgICBlbWFpbDogXCJcXHU5MEFFXFx1N0JCMVxcdTU3MzBcXHU1NzQwXCJcbiAgICB9LFxuICAgIG1lc3NhZ2U6IFwiXFx1OTUxOVxcdThCRUZcXHU0RkUxXFx1NjA2RlwiLFxuICAgIGF1dG86IFwiXFx1ODFFQVxcdTUyQThcXHU4M0I3XFx1NTNENlwiLFxuICAgIGF1dG9SZXF1aXJlZDogXCJcXHU4QkY3XFx1OEY5M1xcdTUxNjV7dGl0bGV9XCIsXG4gICAgYXV0b01vZGU6IFwiXFx1OEJGN1xcdThGOTNcXHU1MTY1XFx1NkI2M1xcdTc4NkVcXHU3Njg0e3RpdGxlfVwiLFxuICAgIHJlcXVpcmVkUGxhY2Vob2xkZXI6IFwiXFx1OEJGN1xcdThGOTNcXHU1MTY1XFx1NjNEMFxcdTc5M0FcXHU4QkVEXCIsXG4gICAgcmVxdWlyZWQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU1RkM1XFx1NTg2QlwiLFxuICAgIHJ1bGU6IFwiXFx1OUE4Q1xcdThCQzFcXHU4OUM0XFx1NTIxOVwiXG4gIH0sXG4gIHRhYmxlT3B0aW9uczoge1xuICAgIGhhbmRsZTogXCJcXHU2NENEXFx1NEY1Q1wiLFxuICAgIGFkZDogXCJcXHU2REZCXFx1NTJBMFwiLFxuICAgIGVtcHR5MTogXCJcXHU3MEI5XFx1NTFGQlxcdTUzRjNcXHU0RTBCXFx1ODlEMlwiLFxuICAgIGVtcHR5MjogXCJcXHU2MzA5XFx1OTRBRVxcdTZERkJcXHU1MkEwXFx1NEUwMFxcdTUyMTdcIixcbiAgICBybUNvbDogXCJcXHU1MjIwXFx1OTY2NFxcdTVGNTNcXHU1MjREXFx1NTIxN1wiLFxuICAgIHJtUm93OiBcIlxcdTUyMjBcXHU5NjY0XFx1NUY1M1xcdTUyNERcXHU4ODRDXCIsXG4gICAgc3BsaXRSb3c6IFwiXFx1NjJDNlxcdTUyMDZcXHU2MjEwXFx1ODg0Q1wiLFxuICAgIHNwbGl0Q29sOiBcIlxcdTYyQzZcXHU1MjA2XFx1NjIxMFxcdTUyMTdcIixcbiAgICBtZXJnZUJvdHRvbTogXCJcXHU1NDExXFx1NEUwQlxcdTU0MDhcXHU1RTc2XCIsXG4gICAgbWVyZ2VSaWdodDogXCJcXHU1NDExXFx1NTNGM1xcdTU0MDhcXHU1RTc2XCIsXG4gICAgYWRkVG9wOiBcIlxcdTZERkJcXHU1MkEwXFx1NEUwQVxcdTUyMTdcIixcbiAgICBhZGRCb3R0b206IFwiXFx1NkRGQlxcdTUyQTBcXHU0RTBCXFx1NTIxN1wiLFxuICAgIGFkZExlZnQ6IFwiXFx1NkRGQlxcdTUyQTBcXHU1REU2XFx1NTIxN1wiLFxuICAgIGFkZFJpZ2h0OiBcIlxcdTZERkJcXHU1MkEwXFx1NTNGM1xcdTUyMTdcIixcbiAgICBrZXlWYWx1ZTogXCJcXHU5NTJFXFx1NTAzQ1xcdTVCRjlcIlxuICB9LFxuICBzdHJ1Y3Q6IHtcbiAgICB0aXRsZTogXCJcXHU3RjE2XFx1OEY5MVxcdTY1NzBcXHU2MzZFXCIsXG4gICAgb25seTogXCJcXHUzMDEwe2xhYmVsfVxcdTMwMTFcXHU1M0VBXFx1NTE0MVxcdThCQjhcXHU2REZCXFx1NTJBMFxcdTRFMDBcXHU0RTJBXCIsXG4gICAgZXJyb3JNc2c6IFwiXFx1OEY5M1xcdTUxNjVcXHU3Njg0XFx1NTE4NVxcdTVCQjlcXHU4QkVEXFx1NkNENVxcdTk1MTlcXHU4QkVGXCIsXG4gICAgY29uZmlndXJlZDogXCJcXHU1REYyXFx1OTE0RFxcdTdGNkVcIlxuICB9LFxuICBldmVudDoge1xuICAgIHRpdGxlOiBcIlxcdThCQkVcXHU3RjZFXFx1NEU4QlxcdTRFRjZcIixcbiAgICBjcmVhdGU6IFwiXFx1NTIxQlxcdTVFRkFcXHU0RThCXFx1NEVGNlwiLFxuICAgIGxpc3Q6IFwiXFx1NEU4QlxcdTRFRjZcXHU1MjE3XFx1ODg2OFwiLFxuICAgIHBsYWNlaG9sZGVyOiBcIlxcdThCRjdcXHU4RjkzXFx1NTE2NVxcdTRFOEJcXHU0RUY2XFx1NzY4NFxcdTU0MERcXHU3OUYwXCIsXG4gICAgc2F2ZU1zZzogXCJcXHU4QkY3XFx1NTE0OFxcdTRGRERcXHU1QjU4XFx1NUY1M1xcdTUyNERcXHU2QjYzXFx1NTcyOFxcdTdGMTZcXHU4RjkxXFx1NzY4NFxcdTRFOEJcXHU0RUY2XCIsXG4gICAgdHlwZTogXCJcXHU3QzdCXFx1NTc4QlwiLFxuICAgIGluZm86IFwiXFx1OEJGNFxcdTY2MEVcIixcbiAgICBsYWJlbDogXCJcXHU1QjU3XFx1NkJCNVwiLFxuICAgIGluamVjdDoge1xuICAgICAgYXBpOiBcIlxcdTVGNTNcXHU1MjREXFx1ODg2OFxcdTUzNTVcXHU3Njg0YXBpXCIsXG4gICAgICBydWxlOiBcIlxcdTVGNTNcXHU1MjREXFx1ODg2OFxcdTUzNTVcXHU3Njg0XFx1NzUxRlxcdTYyMTBcXHU4OUM0XFx1NTIxOVwiLFxuICAgICAgc2VsZjogXCJcXHU3RUM0XFx1NEVGNlxcdTc2ODRcXHU3NTFGXFx1NjIxMFxcdTg5QzRcXHU1MjE5XCIsXG4gICAgICBvcHRpb246IFwiXFx1ODg2OFxcdTUzNTVcXHU3Njg0XFx1OTE0RFxcdTdGNkVcIixcbiAgICAgIGFyZ3M6IFwiXFx1NEU4QlxcdTRFRjZcXHU3Njg0XFx1NTM5RlxcdTU5Q0JcXHU1M0MyXFx1NjU3MFwiXG4gICAgfVxuICB9LFxuICBmZXRjaDoge1xuICAgIHRpdGxlOiBcIlxcdThCQkVcXHU3RjZFXFx1NjU3MFxcdTYzNkVcXHU2RTkwXCIsXG4gICAgY3JlYXRlOiBcIlxcdTUyMUJcXHU1RUZBXFx1NjU3MFxcdTYzNkVcXHU2RTkwXCIsXG4gICAgY29uZmlnOiBcIlxcdThCRjdcXHU2QzQyXFx1OTE0RFxcdTdGNkVcIixcbiAgICBhY3Rpb246IFwiXFx1OEJGN1xcdTZDNDJcXHU5NEZFXFx1NjNBNVwiLFxuICAgIGFjdGlvblJlcXVpcmVkOiBcIlxcdThCRjdcXHU4RjkzXFx1NTE2NVxcdTZCNjNcXHU3ODZFXFx1NzY4NFxcdTk0RkVcXHU2M0E1XCIsXG4gICAgcGxhY2Vob2xkZXI6IFwiXFx1OEJGN1xcdThGOTNcXHU1MTY1XFx1NjU3MFxcdTYzNkVcXHU2RTkwXFx1NzY4NFxcdTU0MERcXHU3OUYwXCIsXG4gICAgbWV0aG9kOiBcIlxcdThCRjdcXHU2QzQyXFx1NjVCOVxcdTVGMEZcIixcbiAgICBkYXRhOiBcIlxcdTk2NDRcXHU1RTI2XFx1NjU3MFxcdTYzNkVcIixcbiAgICBoZWFkZXJzOiBcIlxcdThCRjdcXHU2QzQyXFx1NTkzNFxcdTkwRThcIixcbiAgICBwYXJzZTogXCJcXHU2NTcwXFx1NjM2RVxcdTU5MDRcXHU3NDA2XCIsXG4gICAgcmVzcG9uc2U6IFwiXFx1NjNBNVxcdTUzRTNcXHU4RkQ0XFx1NTZERVxcdTc2ODRcXHU2NTcwXFx1NjM2RVwiLFxuICAgIG9uRXJyb3I6IFwiXFx1OTUxOVxcdThCRUZcXHU1OTA0XFx1NzQwNlwiLFxuICAgIHJlbW90ZTogXCJcXHU4RkRDXFx1N0EwQlxcdTY1NzBcXHU2MzZFXCIsXG4gICAgc3RhdGljOiBcIlxcdTk3NTlcXHU2MDAxXFx1NjU3MFxcdTYzNkVcIixcbiAgICBvcHRpb25zVHlwZToge1xuICAgICAgZmV0Y2g6IFwiXFx1OEZEQ1xcdTdBMEJcXHU2NTcwXFx1NjM2RVwiLFxuICAgICAgc3RydWN0OiBcIlxcdTk3NTlcXHU2MDAxXFx1NjU3MFxcdTYzNkVcIlxuICAgIH1cbiAgfSxcbiAgZGVzaWduZXI6IHtcbiAgICBjb21wb25lbnQ6IFwiXFx1N0VDNFxcdTRFRjZcXHU5MTREXFx1N0Y2RVwiLFxuICAgIGlkOiBcIlxcdTU1MkZcXHU0RTAwXFx1NTAzQ1wiLFxuICAgIG5hbWU6IFwiXFx1N0YxNlxcdTUzRjdcIixcbiAgICB0eXBlOiBcIlxcdTdFQzRcXHU0RUY2XFx1N0M3QlxcdTU3OEJcIixcbiAgICBmb3JtOiBcIlxcdTg4NjhcXHU1MzU1XFx1OTE0RFxcdTdGNkVcIixcbiAgICBzdHlsZTogXCJcXHU3RUM0XFx1NEVGNlxcdTY4MzdcXHU1RjBGXFx1OTE0RFxcdTdGNkVcIixcbiAgICBydWxlOiBcIlxcdTU3RkFcXHU3ODQwXFx1OTE0RFxcdTdGNkVcIixcbiAgICBhZHZhbmNlZDogXCJcXHU5QUQ4XFx1N0VBN1xcdTkxNERcXHU3RjZFXCIsXG4gICAgcHJvcHM6IFwiXFx1NUM1RVxcdTYwMjdcXHU5MTREXFx1N0Y2RVwiLFxuICAgIHZhbGlkYXRlOiBcIlxcdTlBOENcXHU4QkMxXFx1OTE0RFxcdTdGNkVcIixcbiAgICBldmVudDogXCJcXHU0RThCXFx1NEVGNlxcdTkxNERcXHU3RjZFXCIsXG4gICAgY2xlYXJXYXJuOiBcIlxcdTZFMDVcXHU3QTdBXFx1NTQwRVxcdTVDMDZcXHU0RTBEXFx1ODBGRFxcdTYwNjJcXHU1OTBEXFx1RkYwQ1xcdTc4NkVcXHU1QjlBXFx1ODk4MVxcdTZFMDVcXHU3QTdBXFx1NTQxN1xcdUZGMUZcIixcbiAgICBjaGlsZEVtcHR5OiBcIlxcdTcwQjlcXHU1MUZCXFx1NTNGM1xcdTRFMEJcXHU4OUQyIFxcXFxlNzg5ICBcXHU2MzA5XFx1OTRBRVxcdTZERkJcXHU1MkEwXFx1NEUwMFxcdTUyMTdcIixcbiAgICBkcmFnRW1wdHk6IFwiXFx1NjJENlxcdTYyRkRcXHU1REU2XFx1NEZBN1xcdTUyMTdcXHU4ODY4XFx1NEUyRFxcdTc2ODRcXHU3RUM0XFx1NEVGNlxcdTUyMzBcXHU2QjY0XFx1NTkwNFwiLFxuICAgIHVubG9hZDogXCJcXHU3ODZFXFx1NUI5QVxcdTc5QkJcXHU1RjAwXFx1NUY1M1xcdTUyNERcXHU5ODc1XFx1OTc2MlxcdTU0MTc/XCJcbiAgfSxcbiAgbWVudToge1xuICAgIG1haW46IFwiXFx1NTdGQVxcdTc4NDBcXHU3RUM0XFx1NEVGNlwiLFxuICAgIGFpZGU6IFwiXFx1OEY4NVxcdTUyQTlcXHU3RUM0XFx1NEVGNlwiLFxuICAgIGxheW91dDogXCJcXHU1RTAzXFx1NUM0MFxcdTdFQzRcXHU0RUY2XCIsXG4gICAgY29tcG9uZW50OiBcIlxcdTdFQzRcXHU0RUY2XCIsXG4gICAgc3ViZm9ybTogXCJcXHU1QjUwXFx1ODg2OFxcdTUzNTVcXHU3RUM0XFx1NEVGNlwiLFxuICAgIHRyZWU6IFwiXFx1NTkyN1xcdTdFQjJcIlxuICB9LFxuICBwcm9wczoge1xuICAgIHRpdGxlOiBcIlxcdTY4MDdcXHU5ODk4XCIsXG4gICAgY29udGVudDogXCJcXHU1MTg1XFx1NUJCOVwiLFxuICAgIGNvbGxlY3Rpb246IFwiXFx1NTQwOFxcdTk2QzZcIixcbiAgICBncm91cDogXCJcXHU1MjA2XFx1N0VDNFwiLFxuICAgIGN1c3RvbTogXCJcXHU4MUVBXFx1NUI5QVxcdTRFNDlcIixcbiAgICBjaGFuZ2U6IFwiXFx1NjUzOVxcdTUzRDhcIixcbiAgICBibHVyOiBcIlxcdTU5MzFcXHU1M0JCXFx1NzEyNlxcdTcwQjlcIixcbiAgICBwcmV2aWV3OiBcIlxcdTk4ODRcXHU4OUM4XCIsXG4gICAgY2xlYXI6IFwiXFx1NkUwNVxcdTdBN0FcIixcbiAgICBjYW5jZWw6IFwiXFx1NTNENlxcdTZEODhcIixcbiAgICBjbG9zZTogXCJcXHU1MTczXFx1OTVFRFwiLFxuICAgIG9rOiBcIlxcdTc4NkVcXHU1QjlBXCIsXG4gICAgaGVpZ2h0OiBcIlxcdTlBRDhcXHU1RUE2XCIsXG4gICAgd2lkdGg6IFwiXFx1NUJCRFxcdTVFQTZcIixcbiAgICBjbGFzczogXCJDbGFzc1wiLFxuICAgIHNhdmU6IFwiXFx1NEZERFxcdTVCNThcIixcbiAgICByZWZyZXNoOiBcIlxcdTUyMzdcXHU2NUIwXCIsXG4gICAgc3VibWl0OiBcIlxcdTYzRDBcXHU0RUE0XCIsXG4gICAgcmVzZXQ6IFwiXFx1OTFDRFxcdTdGNkVcIixcbiAgICBjb3B5OiBcIlxcdTU5MERcXHU1MjM2XCIsXG4gICAgZGVsZXRlOiBcIlxcdTUyMjBcXHU5NjY0XCIsXG4gICAgaGlkZTogXCJcXHU5NjkwXFx1ODVDRlwiLFxuICAgIHBvc2l0aW9uOiBcIlxcdTRGNERcXHU3RjZFXCIsXG4gICAgcmVuZGVyOiBcIlxcdTZFMzJcXHU2N0QzXCIsXG4gICAgbGFyZ2U6IFwiXFx1NTkyN1wiLFxuICAgIGRlZmF1bHQ6IFwiXFx1OUVEOFxcdThCQTRcIixcbiAgICBzbWFsbDogXCJcXHU1QzBGXCIsXG4gICAgYWx3YXlzOiBcIlxcdTVFMzhcXHU2NjNFXCIsXG4gICAgbmV2ZXI6IFwiXFx1NEUwRFxcdTY2M0VcXHU3OTNBXCIsXG4gICAgaG92ZXI6IFwiXFx1NjBBQ1xcdTZENkVcIixcbiAgICBjbGljazogXCJcXHU3MEI5XFx1NTFGQlwiLFxuICAgIGJ1dHRvbjogXCJcXHU2MzA5XFx1OTRBRVwiLFxuICAgIHllYXI6IFwiXFx1NUU3NFxcdTRFRkRcIixcbiAgICBtb250aDogXCJcXHU2NzA4XFx1NEVGRFwiLFxuICAgIGRhdGU6IFwiXFx1NjVFNVxcdTY3MUZcIixcbiAgICBkYXRlczogXCJcXHU2NUU1XFx1NjcxRlxcdTU5MUFcXHU5MDA5XCIsXG4gICAgd2VlazogXCJcXHU0RTAwXFx1NTQ2OFwiLFxuICAgIGRhdGV0aW1lOiBcIlxcdTY1RTVcXHU2NzFGXFx1NjVGNlxcdTk1RjRcIixcbiAgICBkYXRldGltZXJhbmdlOiBcIlxcdTY1RTVcXHU2NzFGXFx1NjVGNlxcdTk1RjRcXHU1MzNBXFx1OTVGNFwiLFxuICAgIGRhdGVyYW5nZTogXCJcXHU2NUU1XFx1NjcxRlxcdTUzM0FcXHU5NUY0XCIsXG4gICAgbW9udGhyYW5nZTogXCJcXHU2NzA4XFx1NEVGRFxcdTUzM0FcXHU5NUY0XCIsXG4gICAgbGVmdDogXCJcXHU1REU2XFx1NUJGOVxcdTlGNTBcIixcbiAgICByaWdodDogXCJcXHU1M0YzXFx1NUJGOVxcdTlGNTBcIixcbiAgICB0b3A6IFwiXFx1OTg3NlxcdTkwRThcIixcbiAgICB0ZXh0OiBcIlxcdTY1ODdcXHU1QjU3XCIsXG4gICAgcGljdHVyZTogXCJcXHU1NkZFXFx1NzI0N1wiLFxuICAgIFwicGljdHVyZS1jYXJkXCI6IFwiXFx1NTM2MVxcdTcyNDdcIixcbiAgICBjZW50ZXI6IFwiXFx1NUM0NVxcdTRFMkRcIixcbiAgICB2ZXJ0aWNhbDogXCJcXHU3QUQ2XFx1NTQxMVwiLFxuICAgIGhvcml6b250YWw6IFwiXFx1NkEyQVxcdTU0MTFcIixcbiAgICBtYW5hZ2U6IFwiXFx1N0JBMVxcdTc0MDZcIixcbiAgICBrZXk6IFwiXFx1OTUyRVxcdTU0MERcIixcbiAgICBuYW1lOiBcIlxcdTU0MERcXHU3OUYwXCIsXG4gICAgdmFsdWU6IFwiXFx1NTAzQ1wiLFxuICAgIGlucHV0RGF0YTogXCJcXHU1RjU1XFx1NTE2NVxcdTY1NzBcXHU2MzZFXCIsXG4gICAgb3B0aW9uczogXCJcXHU5MDA5XFx1OTg3OVxcdTY1NzBcXHU2MzZFXCIsXG4gICAgb3B0aW9uOiBcIlxcdTkwMDlcXHU5ODc5XCIsXG4gICAgX3NlbGY6IFwiXFx1NUY1M1xcdTUyNERcXHU3QTk3XFx1NTNFM1wiLFxuICAgIF9ibGFuazogXCJcXHU2NUIwXFx1NzY4NFxcdTdBOTdcXHU1M0UzXCIsXG4gICAgX3BhcmVudDogXCJcXHU3MjM2XFx1N0VBN1xcdTdBOTdcXHU1M0UzXCIsXG4gICAgX3RvcDogXCJcXHU5ODc2XFx1N0VBN1xcdTdBOTdcXHU1M0UzXCJcbiAgfSxcbiAgY29tOiB7XG4gICAgY2FzY2FkZXI6IHtcbiAgICAgIG5hbWU6IFwiXFx1N0VBN1xcdTgwNTRcXHU5MDA5XFx1NjJFOVxcdTU2NjhcIixcbiAgICAgIGV2ZW50OiB7XG4gICAgICAgIGV4cGFuZENoYW5nZTogXCJcXHU1RjUzXFx1NUM1NVxcdTVGMDBcXHU4MjgyXFx1NzBCOVxcdTUzRDFcXHU3NTFGXFx1NTNEOFxcdTUzMTZcXHU2NUY2XFx1ODlFNlxcdTUzRDFcIixcbiAgICAgICAgcmVtb3ZlVGFnOiBcIlxcdTU3MjhcXHU1OTFBXFx1OTAwOVxcdTZBMjFcXHU1RjBGXFx1NEUwQlxcdUZGMENcXHU3OUZCXFx1OTY2NFRhZ1xcdTY1RjZcXHU4OUU2XFx1NTNEMVwiXG4gICAgICB9LFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgcHJvcHM6IFwiXFx1OTE0RFxcdTdGNkVcXHU5MDA5XFx1OTg3OVwiLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJcXHU4RjkzXFx1NTE2NVxcdTY4NDZcXHU1MzYwXFx1NEY0RFxcdTY1ODdcXHU2NzJDXCIsXG4gICAgICAgIGRpc2FibGVkOiBcIlxcdTY2MkZcXHU1NDI2XFx1Nzk4MVxcdTc1MjhcIixcbiAgICAgICAgY2xlYXJhYmxlOiBcIlxcdTY2MkZcXHU1NDI2XFx1NjUyRlxcdTYzMDFcXHU2RTA1XFx1N0E3QVxcdTkwMDlcXHU5ODc5XCIsXG4gICAgICAgIHNob3dBbGxMZXZlbHM6IFwiXFx1OEY5M1xcdTUxNjVcXHU2ODQ2XFx1NEUyRFxcdTY2MkZcXHU1NDI2XFx1NjYzRVxcdTc5M0FcXHU5MDA5XFx1NEUyRFxcdTUwM0NcXHU3Njg0XFx1NUI4Q1xcdTY1NzRcXHU4REVGXFx1NUY4NFwiLFxuICAgICAgICBjb2xsYXBzZVRhZ3M6IFwiXFx1NTkxQVxcdTkwMDlcXHU2QTIxXFx1NUYwRlxcdTRFMEJcXHU2NjJGXFx1NTQyNlxcdTYyOThcXHU1M0UwVGFnXCIsXG4gICAgICAgIGNvbGxhcHNlVGFnc1Rvb2x0aXA6IFwiXFx1NUY1M1xcdTlGMjBcXHU2ODA3XFx1NjBBQ1xcdTUwNUNcXHU0RThFXFx1NjI5OFxcdTUzRTBcXHU2ODA3XFx1N0I3RVxcdTc2ODRcXHU2NTg3XFx1NjcyQ1xcdTY1RjZcXHVGRjBDXFx1NjYyRlxcdTU0MjZcXHU2NjNFXFx1NzkzQVxcdTYyNDBcXHU2NzA5XFx1OTAwOVxcdTRFMkRcXHU3Njg0XFx1NjgwN1xcdTdCN0VcIixcbiAgICAgICAgc2VwYXJhdG9yOiBcIlxcdTkwMDlcXHU5ODc5XFx1NTIwNlxcdTk2OTRcXHU3QjI2XCIsXG4gICAgICAgIGZpbHRlcmFibGU6IFwiXFx1OEJFNVxcdTkwMDlcXHU5ODc5XFx1NjYyRlxcdTU0MjZcXHU1M0VGXFx1NEVFNVxcdTg4QUJcXHU2NDFDXFx1N0QyMlwiLFxuICAgICAgICB0YWdUeXBlOiBcIlxcdTY4MDdcXHU3QjdFXFx1N0M3QlxcdTU3OEJcIlxuICAgICAgfSxcbiAgICAgIHByb3BzT3B0OiB7XG4gICAgICAgIG11bHRpcGxlOiBcIlxcdTY2MkZcXHU1NDI2XFx1NTkxQVxcdTkwMDlcIixcbiAgICAgICAgZXhwYW5kVHJpZ2dlcjogXCJcXHU2QjIxXFx1N0VBN1xcdTgzRENcXHU1MzU1XFx1NzY4NFxcdTVDNTVcXHU1RjAwXFx1NjVCOVxcdTVGMEZcIixcbiAgICAgICAgY2hlY2tTdHJpY3RseTogXCJcXHU2NjJGXFx1NTQyNlxcdTRFMjVcXHU2ODNDXFx1NzY4NFxcdTkwNzVcXHU1Qjg4XFx1NzIzNlxcdTVCNTBcXHU4MjgyXFx1NzBCOVxcdTRFMERcXHU0RTkyXFx1NzZGOFxcdTUxNzNcXHU4MDU0XCIsXG4gICAgICAgIGVtaXRQYXRoOiBcIlxcdTU3MjhcXHU5MDA5XFx1NEUyRFxcdTgyODJcXHU3MEI5XFx1NjUzOVxcdTUzRDhcXHU2NUY2XFx1RkYwQ1xcdTY2MkZcXHU1NDI2XFx1OEZENFxcdTU2REVcXHU3NTMxXFx1OEJFNVxcdTgyODJcXHU3MEI5XFx1NjI0MFxcdTU3MjhcXHU3Njg0XFx1NTQwNFxcdTdFQTdcXHU4M0RDXFx1NTM1NVxcdTc2ODRcXHU1MDNDXFx1NjI0MFxcdTdFQzRcXHU2MjEwXFx1NzY4NFxcdTY1NzBcXHU3RUM0XCIsXG4gICAgICAgIHZhbHVlOiBcIlxcdTYzMDdcXHU1QjlBXFx1OTAwOVxcdTk4NzlcXHU3Njg0XFx1NTAzQ1xcdTRFM0FcXHU5MDA5XFx1OTg3OVxcdTVCRjlcXHU4QzYxXFx1NzY4NFxcdTY3RDBcXHU0RTJBXFx1NUM1RVxcdTYwMjdcXHU1MDNDXCIsXG4gICAgICAgIGxhYmVsOiBcIlxcdTYzMDdcXHU1QjlBXFx1OTAwOVxcdTk4NzlcXHU2ODA3XFx1N0I3RVxcdTRFM0FcXHU5MDA5XFx1OTg3OVxcdTVCRjlcXHU4QzYxXFx1NzY4NFxcdTY3RDBcXHU0RTJBXFx1NUM1RVxcdTYwMjdcXHU1MDNDXCIsXG4gICAgICAgIGNoaWxkcmVuOiBcIlxcdTYzMDdcXHU1QjlBXFx1OTAwOVxcdTk4NzlcXHU3Njg0XFx1NUI1MFxcdTkwMDlcXHU5ODc5XFx1NEUzQVxcdTkwMDlcXHU5ODc5XFx1NUJGOVxcdThDNjFcXHU3Njg0XFx1NjdEMFxcdTRFMkFcXHU1QzVFXFx1NjAyN1xcdTUwM0NcIixcbiAgICAgICAgZGlzYWJsZWQ6IFwiXFx1NjMwN1xcdTVCOUFcXHU5MDA5XFx1OTg3OVxcdTc2ODRcXHU3OTgxXFx1NzUyOFxcdTRFM0FcXHU5MDA5XFx1OTg3OVxcdTVCRjlcXHU4QzYxXFx1NzY4NFxcdTY3RDBcXHU0RTJBXFx1NUM1RVxcdTYwMjdcXHU1MDNDXCIsXG4gICAgICAgIGxlYWY6IFwiXFx1NjMwN1xcdTVCOUFcXHU5MDA5XFx1OTg3OVxcdTc2ODRcXHU1M0Y2XFx1NUI1MFxcdTgyODJcXHU3MEI5XFx1NzY4NFxcdTY4MDdcXHU1RkQ3XFx1NEY0RFxcdTRFM0FcXHU5MDA5XFx1OTg3OVxcdTVCRjlcXHU4QzYxXFx1NzY4NFxcdTY3RDBcXHU0RTJBXFx1NUM1RVxcdTYwMjdcXHU1MDNDXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIGNoZWNrYm94OiB7XG4gICAgICBuYW1lOiBcIlxcdTU5MUFcXHU5MDA5XFx1Njg0NlwiLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdHlwZTogXCJcXHU2MzA5XFx1OTRBRVxcdTdDN0JcXHU1NzhCXCIsXG4gICAgICAgIGRpc2FibGVkOiBcIlxcdTY2MkZcXHU1NDI2XFx1Nzk4MVxcdTc1MjhcIixcbiAgICAgICAgbWluOiBcIlxcdTUzRUZcXHU4OEFCXFx1NTJGRVxcdTkwMDlcXHU3Njg0XFx1NjcwMFxcdTVDMEZcXHU2NTcwXFx1OTFDRlwiLFxuICAgICAgICBtYXg6IFwiXFx1NTNFRlxcdTg4QUJcXHU1MkZFXFx1OTAwOVxcdTc2ODRcXHU2NzAwXFx1NTkyN1xcdTY1NzBcXHU5MUNGXCIsXG4gICAgICAgIHRleHRDb2xvcjogXCJcXHU1RjUzXFx1NjMwOVxcdTk0QUVcXHU0RTNBXFx1NkQzQlxcdThEQzNcXHU3MkI2XFx1NjAwMVxcdTY1RjZcXHU3Njg0XFx1NUI1N1xcdTRGNTNcXHU5ODlDXFx1ODI3MlwiLFxuICAgICAgICBmaWxsOiBcIlxcdTVGNTNcXHU2MzA5XFx1OTRBRVxcdTRFM0FcXHU2RDNCXFx1OERDM1xcdTcyQjZcXHU2MDAxXFx1NjVGNlxcdTc2ODRcXHU4RkI5XFx1Njg0NlxcdTU0OENcXHU4MENDXFx1NjY2RlxcdTk4OUNcXHU4MjcyXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbDoge1xuICAgICAgbmFtZTogXCJcXHU1RTAzXFx1NUM0MFxcdTY4M0NcXHU1QjUwXCIsXG4gICAgICBwcm9wczoge1xuICAgICAgICBzcGFuOiBcIlxcdTY4MDVcXHU2ODNDXFx1NTM2MFxcdTYzNkVcXHU3Njg0XFx1NTIxN1xcdTY1NzBcIixcbiAgICAgICAgb2Zmc2V0OiBcIlxcdTY4MDVcXHU2ODNDXFx1NURFNlxcdTRGQTdcXHU3Njg0XFx1OTVGNFxcdTk2OTRcXHU2ODNDXFx1NjU3MFwiLFxuICAgICAgICBwdXNoOiBcIlxcdTY4MDVcXHU2ODNDXFx1NTQxMVxcdTUzRjNcXHU3OUZCXFx1NTJBOFxcdTY4M0NcXHU2NTcwXCIsXG4gICAgICAgIHB1bGw6IFwiXFx1NjgwNVxcdTY4M0NcXHU1NDExXFx1NURFNlxcdTc5RkJcXHU1MkE4XFx1NjgzQ1xcdTY1NzBcIlxuICAgICAgfVxuICAgIH0sXG4gICAgY29sb3JQaWNrZXI6IHtcbiAgICAgIG5hbWU6IFwiXFx1OTg5Q1xcdTgyNzJcXHU5MDA5XFx1NjJFOVxcdTU2NjhcIixcbiAgICAgIGV2ZW50OiB7XG4gICAgICAgIGFjdGl2ZUNoYW5nZTogXCJcXHU5NzYyXFx1Njc3RlxcdTRFMkRcXHU1RjUzXFx1NTI0RFxcdTY2M0VcXHU3OTNBXFx1NzY4NFxcdTk4OUNcXHU4MjcyXFx1NTNEMVxcdTc1MUZcXHU2NTM5XFx1NTNEOFxcdTY1RjZcXHU4OUU2XFx1NTNEMVwiXG4gICAgICB9LFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgZGlzYWJsZWQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU3OTgxXFx1NzUyOFwiLFxuICAgICAgICBzaG93QWxwaGE6IFwiXFx1NjYyRlxcdTU0MjZcXHU2NTJGXFx1NjMwMVxcdTkwMEZcXHU2NjBFXFx1NUVBNlxcdTkwMDlcXHU2MkU5XCIsXG4gICAgICAgIGNvbG9yRm9ybWF0OiBcIlxcdTk4OUNcXHU4MjcyXFx1NzY4NFxcdTY4M0NcXHU1RjBGXCIsXG4gICAgICAgIHByZWRlZmluZTogXCJcXHU5ODg0XFx1NUI5QVxcdTRFNDlcXHU5ODlDXFx1ODI3MlwiXG4gICAgICB9XG4gICAgfSxcbiAgICBkYXRlUGlja2VyOiB7XG4gICAgICBuYW1lOiBcIlxcdTY1RTVcXHU2NzFGXCIsXG4gICAgICBwcm9wczoge1xuICAgICAgICBwaWNrZXJPcHRpb25zOiBcIlxcdTVGNTNcXHU1MjREXFx1NjVGNlxcdTk1RjRcXHU2NUU1XFx1NjcxRlxcdTkwMDlcXHU2MkU5XFx1NTY2OFxcdTcyNzlcXHU2NzA5XFx1NzY4NFxcdTkwMDlcXHU5ODc5XCIsXG4gICAgICAgIHJlYWRvbmx5OiBcIlxcdTVCOENcXHU1MTY4XFx1NTNFQVxcdThCRkJcIixcbiAgICAgICAgZGlzYWJsZWQ6IFwiXFx1Nzk4MVxcdTc1MjhcIixcbiAgICAgICAgdHlwZTogXCJcXHU2NjNFXFx1NzkzQVxcdTdDN0JcXHU1NzhCXCIsXG4gICAgICAgIGVkaXRhYmxlOiBcIlxcdTY1ODdcXHU2NzJDXFx1Njg0NlxcdTUzRUZcXHU4RjkzXFx1NTE2NVwiLFxuICAgICAgICBjbGVhcmFibGU6IFwiXFx1NjYyRlxcdTU0MjZcXHU2NjNFXFx1NzkzQVxcdTZFMDVcXHU5NjY0XFx1NjMwOVxcdTk0QUVcIixcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiXFx1OTc1RVxcdTgzMDNcXHU1NkY0XFx1OTAwOVxcdTYyRTlcXHU2NUY2XFx1NzY4NFxcdTUzNjBcXHU0RjREXFx1NTE4NVxcdTVCQjlcIixcbiAgICAgICAgc3RhcnRQbGFjZWhvbGRlcjogXCJcXHU4MzAzXFx1NTZGNFxcdTkwMDlcXHU2MkU5XFx1NjVGNlxcdTVGMDBcXHU1OUNCXFx1NjVFNVxcdTY3MUZcXHU3Njg0XFx1NTM2MFxcdTRGNERcXHU1MTg1XFx1NUJCOVwiLFxuICAgICAgICBlbmRQbGFjZWhvbGRlcjogXCJcXHU4MzAzXFx1NTZGNFxcdTkwMDlcXHU2MkU5XFx1NjVGNlxcdTdFRDNcXHU2NzVGXFx1NjVFNVxcdTY3MUZcXHU3Njg0XFx1NTM2MFxcdTRGNERcXHU1MTg1XFx1NUJCOVwiLFxuICAgICAgICBmb3JtYXQ6IFwiXFx1NjYzRVxcdTc5M0FcXHU1NzI4XFx1OEY5M1xcdTUxNjVcXHU2ODQ2XFx1NEUyRFxcdTc2ODRcXHU2ODNDXFx1NUYwRlwiLFxuICAgICAgICBhbGlnbjogXCJcXHU1QkY5XFx1OUY1MFxcdTY1QjlcXHU1RjBGXCIsXG4gICAgICAgIHJhbmdlU2VwYXJhdG9yOiBcIlxcdTkwMDlcXHU2MkU5XFx1ODMwM1xcdTU2RjRcXHU2NUY2XFx1NzY4NFxcdTUyMDZcXHU5Njk0XFx1N0IyNlwiLFxuICAgICAgICB1bmxpbmtQYW5lbHM6IFwiXFx1NTcyOFxcdTgzMDNcXHU1NkY0XFx1OTAwOVxcdTYyRTlcXHU1NjY4XFx1OTFDQ1xcdTUzRDZcXHU2RDg4XFx1NEUyNFxcdTRFMkFcXHU2NUU1XFx1NjcxRlxcdTk3NjJcXHU2NzdGXFx1NEU0QlxcdTk1RjRcXHU3Njg0XFx1ODA1NFxcdTUyQThcIlxuICAgICAgfVxuICAgIH0sXG4gICAgZGF0ZVJhbmdlOiB7XG4gICAgICBuYW1lOiBcIlxcdTY1RTVcXHU2NzFGXFx1NTMzQVxcdTk1RjRcIlxuICAgIH0sXG4gICAgdGltZVJhbmdlOiB7XG4gICAgICBuYW1lOiBcIlxcdTY1RjZcXHU5NUY0XFx1NTMzQVxcdTk1RjRcIlxuICAgIH0sXG4gICAgZWxBbGVydDoge1xuICAgICAgbmFtZTogXCJcXHU2M0QwXFx1NzkzQVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiXFx1OEJGNFxcdTY2MEVcXHU2NTg3XFx1NUI1N1wiLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdGl0bGU6IFwiXFx1NjgwN1xcdTk4OThcIixcbiAgICAgICAgdHlwZTogXCJcXHU0RTNCXFx1OTg5OFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJcXHU4Rjg1XFx1NTJBOVxcdTYwMjdcXHU2NTg3XFx1NUI1N1wiLFxuICAgICAgICBjbG9zYWJsZTogXCJcXHU2NjJGXFx1NTQyNlxcdTUzRUZcXHU1MTczXFx1OTVFRFwiLFxuICAgICAgICBjZW50ZXI6IFwiXFx1NjU4N1xcdTVCNTdcXHU2NjJGXFx1NTQyNlxcdTVDNDVcXHU0RTJEXCIsXG4gICAgICAgIGNsb3NlVGV4dDogXCJcXHU1MTczXFx1OTVFRFxcdTYzMDlcXHU5NEFFXFx1ODFFQVxcdTVCOUFcXHU0RTQ5XFx1NjU4N1xcdTY3MkNcIixcbiAgICAgICAgc2hvd0ljb246IFwiXFx1NjYyRlxcdTU0MjZcXHU2NjNFXFx1NzkzQVxcdTU2RkVcXHU2ODA3XCIsXG4gICAgICAgIGVmZmVjdDogXCJcXHU5MDA5XFx1NjJFOVxcdTYzRDBcXHU0RjlCXFx1NzY4NFxcdTRFM0JcXHU5ODk4XCJcbiAgICAgIH1cbiAgICB9LFxuICAgIGVsQnV0dG9uOiB7XG4gICAgICBuYW1lOiBcIlxcdTYzMDlcXHU5NEFFXCIsXG4gICAgICBwcm9wczoge1xuICAgICAgICBmb3JtQ3JlYXRlQ2hpbGQ6IFwiXFx1NTE4NVxcdTVCQjlcIixcbiAgICAgICAgc2l6ZTogXCJcXHU1QzNBXFx1NUJGOFwiLFxuICAgICAgICB0eXBlOiBcIlxcdTdDN0JcXHU1NzhCXCIsXG4gICAgICAgIHBsYWluOiBcIlxcdTY2MkZcXHU1NDI2XFx1NjczNFxcdTdEMjBcXHU2MzA5XFx1OTRBRVwiLFxuICAgICAgICByb3VuZDogXCJcXHU2NjJGXFx1NTQyNlxcdTU3MDZcXHU4OUQyXFx1NjMwOVxcdTk0QUVcIixcbiAgICAgICAgY2lyY2xlOiBcIlxcdTY2MkZcXHU1NDI2XFx1NTcwNlxcdTVGNjJcXHU2MzA5XFx1OTRBRVwiLFxuICAgICAgICBsb2FkaW5nOiBcIlxcdTY2MkZcXHU1NDI2XFx1NTJBMFxcdThGN0RcXHU0RTJEXFx1NzJCNlxcdTYwMDFcIixcbiAgICAgICAgZGlzYWJsZWQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU3OTgxXFx1NzUyOFxcdTcyQjZcXHU2MDAxXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIGVsQ2FyZDoge1xuICAgICAgbmFtZTogXCJcXHU1MzYxXFx1NzI0N1wiLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgaGVhZGVyOiBcIlxcdTY4MDdcXHU5ODk4XCIsXG4gICAgICAgIHNoYWRvdzogXCJcXHU5NjM0XFx1NUY3MVxcdTY2M0VcXHU3OTNBXFx1NjVGNlxcdTY3M0FcIlxuICAgICAgfVxuICAgIH0sXG4gICAgZWxDb2xsYXBzZToge1xuICAgICAgbmFtZTogXCJcXHU2Mjk4XFx1NTNFMFxcdTk3NjJcXHU2NzdGXCIsXG4gICAgICBldmVudDoge1xuICAgICAgICBjaGFuZ2U6IFwiXFx1NTIwN1xcdTYzNjJcXHU1RjUzXFx1NTI0RFxcdTZEM0JcXHU1MkE4XFx1OTc2MlxcdTY3N0ZcXHVGRjBDXFx1NTcyOFxcdTYyNEJcXHU5OENFXFx1NzQzNFxcdTZBMjFcXHU1RjBGXFx1NEUwQlxcdTUxNzZcXHU3QzdCXFx1NTc4QlxcdTY2MkZzdHJpbmdcXHVGRjBDXFx1NTcyOFxcdTUxNzZcXHU0RUQ2XFx1NkEyMVxcdTVGMEZcXHU0RTBCXFx1NjYyRmFycmF5XCJcbiAgICAgIH0sXG4gICAgICBwcm9wczoge1xuICAgICAgICBhY2NvcmRpb246IFwiXFx1NjYyRlxcdTU0MjZcXHU2MjRCXFx1OThDRVxcdTc0MzRcXHU2QTIxXFx1NUYwRlwiXG4gICAgICB9XG4gICAgfSxcbiAgICBlbENvbGxhcHNlSXRlbToge1xuICAgICAgbmFtZTogXCJcXHU5NzYyXFx1Njc3RlwiLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdGl0bGU6IFwiXFx1OTc2MlxcdTY3N0ZcXHU2ODA3XFx1OTg5OFwiLFxuICAgICAgICBuYW1lOiBcIlxcdTU1MkZcXHU0RTAwXFx1NjgwN1xcdTVGRDdcXHU3QjI2XCIsXG4gICAgICAgIGRpc2FibGVkOiBcIlxcdTY2MkZcXHU1NDI2XFx1Nzk4MVxcdTc1MjhcIlxuICAgICAgfVxuICAgIH0sXG4gICAgZWxEaXZpZGVyOiB7XG4gICAgICBuYW1lOiBcIlxcdTUyMDZcXHU1MjcyXFx1N0VCRlwiLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgZm9ybUNyZWF0ZUNoaWxkOiBcIlxcdThCQkVcXHU3RjZFXFx1NTIwNlxcdTUyNzJcXHU3RUJGXFx1NjU4N1xcdTY4NDhcIixcbiAgICAgICAgY29udGVudFBvc2l0aW9uOiBcIlxcdThCQkVcXHU3RjZFXFx1NTIwNlxcdTUyNzJcXHU3RUJGXFx1NjU4N1xcdTY4NDhcXHU3Njg0XFx1NEY0RFxcdTdGNkVcIlxuICAgICAgfVxuICAgIH0sXG4gICAgZWxUYWJQYW5lOiB7XG4gICAgICBuYW1lOiBcIlxcdTkwMDlcXHU5ODc5XFx1NTM2MVwiLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgbGFiZWw6IFwiXFx1OTAwOVxcdTk4NzlcXHU1MzYxXFx1NjgwN1xcdTk4OThcIixcbiAgICAgICAgZGlzYWJsZWQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU3OTgxXFx1NzUyOFwiLFxuICAgICAgICBuYW1lOiBcIlxcdTkwMDlcXHU5ODc5XFx1NTM2MVxcdTc2ODRcXHU2ODA3XFx1OEJDNlxcdTdCMjZcIixcbiAgICAgICAgbGF6eTogXCJcXHU2ODA3XFx1N0I3RVxcdTY2MkZcXHU1NDI2XFx1NUVGNlxcdThGREZcXHU2RTMyXFx1NjdEM1wiXG4gICAgICB9XG4gICAgfSxcbiAgICBlbFRhYnM6IHtcbiAgICAgIG5hbWU6IFwiXFx1NjgwN1xcdTdCN0VcXHU5ODc1XCIsXG4gICAgICBldmVudDoge1xuICAgICAgICB0YWJDbGljazogXCJ0YWIgXFx1ODhBQlxcdTkwMDlcXHU0RTJEXFx1NjVGNlxcdTg5RTZcXHU1M0QxXCIsXG4gICAgICAgIHRhYkNoYW5nZTogXCJhY3RpdmVOYW1lIFxcdTY1MzlcXHU1M0Q4XFx1NjVGNlxcdTg5RTZcXHU1M0QxXCIsXG4gICAgICAgIHRhYlJlbW92ZTogXCJcXHU3MEI5XFx1NTFGQiB0YWIgXFx1NzlGQlxcdTk2NjRcXHU2MzA5XFx1OTRBRVxcdTY1RjZcXHU4OUU2XFx1NTNEMVwiLFxuICAgICAgICB0YWJBZGQ6IFwiXFx1NzBCOVxcdTUxRkIgdGFiIFxcdTY1QjBcXHU1ODlFXFx1NjMwOVxcdTk0QUVcXHU2NUY2XFx1ODlFNlxcdTUzRDFcIixcbiAgICAgICAgZWRpdDogXCJcXHU3MEI5XFx1NTFGQiB0YWIgXFx1NzY4NFxcdTY1QjBcXHU1ODlFXFx1NjIxNlxcdTc5RkJcXHU5NjY0XFx1NjMwOVxcdTk0QUVcXHU1NDBFXFx1ODlFNlxcdTUzRDFcIlxuICAgICAgfSxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHR5cGU6IFwiXFx1OThDRVxcdTY4M0NcXHU3QzdCXFx1NTc4QlwiLFxuICAgICAgICBjbG9zYWJsZTogXCJcXHU2ODA3XFx1N0I3RVxcdTY2MkZcXHU1NDI2XFx1NTNFRlxcdTUxNzNcXHU5NUVEXCIsXG4gICAgICAgIHRhYlBvc2l0aW9uOiBcIlxcdTkwMDlcXHU5ODc5XFx1NTM2MVxcdTYyNDBcXHU1NzI4XFx1NEY0RFxcdTdGNkVcIixcbiAgICAgICAgc3RyZXRjaDogXCJcXHU2ODA3XFx1N0I3RVxcdTc2ODRcXHU1QkJEXFx1NUVBNlxcdTY2MkZcXHU1NDI2XFx1ODFFQVxcdTY0OTFcXHU1RjAwXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIGVsVGFnOiB7XG4gICAgICBuYW1lOiBcIlxcdTY4MDdcXHU3QjdFXCIsXG4gICAgICBwcm9wczoge1xuICAgICAgICBmb3JtQ3JlYXRlTmF0aXZlOiBcIlxcdTY2MkZcXHU1NDI2XFx1NjYzRVxcdTc5M0FcXHU2ODA3XFx1OTg5OFwiLFxuICAgICAgICBmb3JtQ3JlYXRlVGl0bGU6IFwiXFx1NjgwN1xcdTk4OThcIixcbiAgICAgICAgZm9ybUNyZWF0ZUNoaWxkOiBcIlxcdTY4MDdcXHU3QjdFXFx1NTE4NVxcdTVCQjlcIixcbiAgICAgICAgdHlwZTogXCJcXHU2ODA3XFx1N0I3RVxcdTc2ODRcXHU3QzdCXFx1NTc4QlwiLFxuICAgICAgICBzaXplOiBcIlxcdTY4MDdcXHU3QjdFXFx1NzY4NFxcdTVDM0FcXHU1QkY4XCIsXG4gICAgICAgIGVmZmVjdDogXCJcXHU2ODA3XFx1N0I3RVxcdTc2ODRcXHU0RTNCXFx1OTg5OFwiLFxuICAgICAgICBjbG9zYWJsZTogXCJcXHU2NjJGXFx1NTQyNlxcdTUzRUZcXHU1MTczXFx1OTVFRFwiLFxuICAgICAgICBkaXNhYmxlVHJhbnNpdGlvbnM6IFwiXFx1NjYyRlxcdTU0MjZcXHU3OTgxXFx1NzUyOFxcdTZFMTBcXHU1M0Q4XFx1NTJBOFxcdTc1M0JcIixcbiAgICAgICAgaGl0OiBcIlxcdTY2MkZcXHU1NDI2XFx1NjcwOVxcdThGQjlcXHU2ODQ2XFx1NjNDRlxcdThGQjlcIixcbiAgICAgICAgcm91bmQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU0RTNBXFx1NTcwNlxcdTVGNjJcIixcbiAgICAgICAgY29sb3I6IFwiXFx1ODBDQ1xcdTY2NkZcXHU4MjcyXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIGVsVHJhbnNmZXI6IHtcbiAgICAgIG5hbWU6IFwiXFx1N0E3RlxcdTY4QURcXHU2ODQ2XCIsXG4gICAgICBldmVudDoge1xuICAgICAgICBsZWZ0Q2hlY2tDaGFuZ2U6IFwiXFx1NURFNlxcdTRGQTdcXHU1MjE3XFx1ODg2OFxcdTUxNDNcXHU3RDIwXFx1ODhBQlxcdTc1MjhcXHU2MjM3XFx1OTAwOVxcdTRFMkQgLyBcXHU1M0Q2XFx1NkQ4OFxcdTkwMDlcXHU0RTJEXFx1NjVGNlxcdTg5RTZcXHU1M0QxXCIsXG4gICAgICAgIHJpZ2h0Q2hlY2tDaGFuZ2U6IFwiXFx1NTNGM1xcdTRGQTdcXHU1MjE3XFx1ODg2OFxcdTUxNDNcXHU3RDIwXFx1ODhBQlxcdTc1MjhcXHU2MjM3XFx1OTAwOVxcdTRFMkQgLyBcXHU1M0Q2XFx1NkQ4OFxcdTkwMDlcXHU0RTJEXFx1NjVGNlxcdTg5RTZcXHU1M0QxXCJcbiAgICAgIH0sXG4gICAgICBwcm9wczoge1xuICAgICAgICBmaWx0ZXJhYmxlOiBcIlxcdTY2MkZcXHU1NDI2XFx1NTNFRlxcdTY0MUNcXHU3RDIyXCIsXG4gICAgICAgIGZpbHRlclBsYWNlaG9sZGVyOiBcIlxcdTY0MUNcXHU3RDIyXFx1Njg0NlxcdTUzNjBcXHU0RjREXFx1N0IyNlwiLFxuICAgICAgICB0YXJnZXRPcmRlcjogXCJcXHU1M0YzXFx1NEZBN1xcdTUyMTdcXHU4ODY4XFx1NTE0M1xcdTdEMjBcXHU3Njg0XFx1NjM5MlxcdTVFOEZcXHU3QjU2XFx1NzU2NVwiLFxuICAgICAgICB0YXJnZXRPcmRlckluZm86IFwiXFx1ODJFNVxcdTRFM0Egb3JpZ2luYWxcXHVGRjBDXFx1NTIxOVxcdTRGRERcXHU2MzAxXFx1NEUwRVxcdTY1NzBcXHU2MzZFXFx1NzZGOFxcdTU0MENcXHU3Njg0XFx1OTg3QVxcdTVFOEZcXHVGRjFCXFx1ODJFNVxcdTRFM0EgcHVzaFxcdUZGMENcXHU1MjE5XFx1NjVCMFxcdTUyQTBcXHU1MTY1XFx1NzY4NFxcdTUxNDNcXHU3RDIwXFx1NjM5MlxcdTU3MjhcXHU2NzAwXFx1NTQwRVxcdUZGMUJcXHU4MkU1XFx1NEUzQSB1bnNoaWZ0XFx1RkYwQ1xcdTUyMTlcXHU2NUIwXFx1NTJBMFxcdTUxNjVcXHU3Njg0XFx1NTE0M1xcdTdEMjBcXHU2MzkyXFx1NTcyOFxcdTY3MDBcXHU1MjREXCIsXG4gICAgICAgIHRpdGxlczogXCJcXHU4MUVBXFx1NUI5QVxcdTRFNDlcXHU1MjE3XFx1ODg2OFxcdTY4MDdcXHU5ODk4XCIsXG4gICAgICAgIGJ1dHRvblRleHRzOiBcIlxcdTgxRUFcXHU1QjlBXFx1NEU0OVxcdTYzMDlcXHU5NEFFXFx1NjU4N1xcdTY4NDhcIixcbiAgICAgICAgcHJvcHM6IFwiXFx1NjU3MFxcdTYzNkVcXHU2RTkwXFx1NzY4NFxcdTVCNTdcXHU2QkI1XFx1NTIyQlxcdTU0MERcIlxuICAgICAgfVxuICAgIH0sXG4gICAgZWxUcmVlU2VsZWN0OiB7XG4gICAgICBuYW1lOiBcIlxcdTY4MTFcXHU1RjYyXFx1OTAwOVxcdTYyRTlcIixcbiAgICAgIGV2ZW50OiB7XG4gICAgICAgIHJlbW92ZVRhZzogXCJcXHU1OTFBXFx1OTAwOVxcdTZBMjFcXHU1RjBGXFx1NEUwQlxcdTc5RkJcXHU5NjY0dGFnXFx1NjVGNlxcdTg5RTZcXHU1M0QxXCJcbiAgICAgIH0sXG4gICAgICBwcm9wczoge1xuICAgICAgICBtdWx0aXBsZTogXCJcXHU2NjJGXFx1NTQyNlxcdTU5MUFcXHU5MDA5XCIsXG4gICAgICAgIGRpc2FibGVkOiBcIlxcdTY2MkZcXHU1NDI2XFx1Nzk4MVxcdTc1MjhcIixcbiAgICAgICAgY2xlYXJhYmxlOiBcIlxcdTY2MkZcXHU1NDI2XFx1NTNFRlxcdTRFRTVcXHU2RTA1XFx1N0E3QVxcdTkwMDlcXHU5ODc5XCIsXG4gICAgICAgIGNvbGxhcHNlVGFnczogXCJcXHU1OTFBXFx1OTAwOVxcdTY1RjZcXHU2NjJGXFx1NTQyNlxcdTVDMDZcXHU5MDA5XFx1NEUyRFxcdTUwM0NcXHU2MzA5XFx1NjU4N1xcdTVCNTdcXHU3Njg0XFx1NUY2MlxcdTVGMEZcXHU1QzU1XFx1NzkzQVwiLFxuICAgICAgICBtdWx0aXBsZUxpbWl0OiBcIlxcdTU5MUFcXHU5MDA5XFx1NjVGNlxcdTc1MjhcXHU2MjM3XFx1NjcwMFxcdTU5MUFcXHU1M0VGXFx1NEVFNVxcdTkwMDlcXHU2MkU5XFx1NzY4NFxcdTk4NzlcXHU3NkVFXFx1NjU3MFxcdUZGMENcXHU0RTNBIDAgXFx1NTIxOVxcdTRFMERcXHU5NjUwXFx1NTIzNlwiLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJcXHU1MzYwXFx1NEY0RFxcdTdCMjZcIixcbiAgICAgICAgcHJvcHM6IFwiXFx1OTE0RFxcdTdGNkVcXHU5MDA5XFx1OTg3OVwiLFxuICAgICAgICByZW5kZXJBZnRlckV4cGFuZDogXCJcXHU2NjJGXFx1NTQyNlxcdTU3MjhcXHU3QjJDXFx1NEUwMFxcdTZCMjFcXHU1QzU1XFx1NUYwMFxcdTY3RDBcXHU0RTJBXFx1NjgxMVxcdTgyODJcXHU3MEI5XFx1NTQwRVxcdTYyNERcXHU2RTMyXFx1NjdEM1xcdTUxNzZcXHU1QjUwXFx1ODI4MlxcdTcwQjlcIixcbiAgICAgICAgZGVmYXVsdEV4cGFuZEFsbDogXCJcXHU2NjJGXFx1NTQyNlxcdTlFRDhcXHU4QkE0XFx1NUM1NVxcdTVGMDBcXHU2MjQwXFx1NjcwOVxcdTgyODJcXHU3MEI5XCIsXG4gICAgICAgIGV4cGFuZE9uQ2xpY2tOb2RlOiBcIlxcdTY2MkZcXHU1NDI2XFx1NTcyOFxcdTcwQjlcXHU1MUZCXFx1ODI4MlxcdTcwQjlcXHU3Njg0XFx1NjVGNlxcdTUwMTlcXHU1QzU1XFx1NUYwMFxcdTYyMTZcXHU4MDA1XFx1NjUzNlxcdTdGMjlcXHU4MjgyXFx1NzBCOVwiLFxuICAgICAgICBjaGVja09uQ2xpY2tOb2RlOiBcIlxcdTY2MkZcXHU1NDI2XFx1NTcyOFxcdTcwQjlcXHU1MUZCXFx1ODI4MlxcdTcwQjlcXHU3Njg0XFx1NjVGNlxcdTUwMTlcXHU5MDA5XFx1NEUyRFxcdTgyODJcXHU3MEI5XCIsXG4gICAgICAgIG5vZGVLZXk6IFwiXFx1NkJDRlxcdTRFMkFcXHU2ODExXFx1ODI4MlxcdTcwQjlcXHU3NTI4XFx1Njc2NVxcdTRGNUNcXHU0RTNBXFx1NTUyRlxcdTRFMDBcXHU2ODA3XFx1OEJDNlxcdTc2ODRcXHU1QzVFXFx1NjAyN1xcdUZGMENcXHU2NTc0XFx1NjhGNVxcdTY4MTFcXHU1RTk0XFx1OEJFNVxcdTY2MkZcXHU1NTJGXFx1NEUwMFxcdTc2ODRcIlxuICAgICAgfVxuICAgIH0sXG4gICAgZmNFZGl0b3I6IHtcbiAgICAgIG5hbWU6IFwiXFx1NUJDQ1xcdTY1ODdcXHU2NzJDXFx1Njg0NlwiLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgZGlzYWJsZWQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU3OTgxXFx1NzUyOFwiXG4gICAgICB9XG4gICAgfSxcbiAgICBmY1Jvdzoge1xuICAgICAgbmFtZTogXCJcXHU2ODA1XFx1NjgzQ1xcdTVFMDNcXHU1QzQwXCIsXG4gICAgICBwcm9wczoge1xuICAgICAgICBndXR0ZXI6IFwiXFx1NjgwNVxcdTY4M0NcXHU5NUY0XFx1OTY5NFwiLFxuICAgICAgICB0eXBlOiBcImZsZXhcXHU1RTAzXFx1NUM0MFxcdTZBMjFcXHU1RjBGXCIsXG4gICAgICAgIGp1c3RpZnk6IFwiZmxleFxcdTVFMDNcXHU1QzQwXFx1NEUwQlxcdTc2ODRcXHU2QzM0XFx1NUU3M1xcdTYzOTJcXHU1MjE3XFx1NjVCOVxcdTVGMEZcIixcbiAgICAgICAgYWxpZ246IFwiZmxleFxcdTVFMDNcXHU1QzQwXFx1NEUwQlxcdTc2ODRcXHU1NzgyXFx1NzZGNFxcdTYzOTJcXHU1MjE3XFx1NjVCOVxcdTVGMEZcIlxuICAgICAgfVxuICAgIH0sXG4gICAgZmNUYWJsZToge1xuICAgICAgbmFtZTogXCJcXHU4ODY4XFx1NjgzQ1xcdTVFMDNcXHU1QzQwXCIsXG4gICAgICBwcm9wczoge1xuICAgICAgICBib3JkZXI6IFwiXFx1NjYyRlxcdTU0MjZcXHU2NjNFXFx1NzkzQVxcdThGQjlcXHU2ODQ2XCIsXG4gICAgICAgIGJvcmRlckNvbG9yOiBcIlxcdThGQjlcXHU2ODQ2XFx1OTg5Q1xcdTgyNzJcIixcbiAgICAgICAgYm9yZGVyV2lkdGg6IFwiXFx1OEZCOVxcdTY4NDZcXHU1QkJEXFx1NUVBNlwiXG4gICAgICB9XG4gICAgfSxcbiAgICBmY1RhYmxlR3JpZDoge1xuICAgICAgbmFtZTogXCJcXHU2ODNDXFx1NUI1MFwiXG4gICAgfSxcbiAgICBncm91cDoge1xuICAgICAgbmFtZTogXCJcXHU1QjUwXFx1ODg2OFxcdTUzNTVcIixcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGRpc2FibGVkOiBcIlxcdTY2MkZcXHU1NDI2XFx1Nzk4MVxcdTc1MjhcIixcbiAgICAgICAgc3luY0Rpc2FibGVkOiBcIlxcdTY2MkZcXHU1NDI2XFx1NEUwRVxcdTVCNTBcXHU4ODY4XFx1NTM1NVxcdTVGM0FcXHU1MjM2XFx1NTQwQ1xcdTZCNjVcXHU3OTgxXFx1NzUyOFxcdTcyQjZcXHU2MDAxXCIsXG4gICAgICAgIGV4cGFuZDogXCJcXHU4QkJFXFx1N0Y2RVxcdTlFRDhcXHU4QkE0XFx1NUM1NVxcdTVGMDBcXHU1MUUwXFx1OTg3OVwiLFxuICAgICAgICBidXR0b246IFwiXFx1NjYyRlxcdTU0MjZcXHU2NjNFXFx1NzkzQVxcdTY0Q0RcXHU0RjVDXFx1NjMwOVxcdTk0QUVcIixcbiAgICAgICAgc29ydEJ0bjogXCJcXHU2NjJGXFx1NTQyNlxcdTY2M0VcXHU3OTNBXFx1NjM5MlxcdTVFOEZcXHU2MzA5XFx1OTRBRVwiLFxuICAgICAgICBtaW46IFwiXFx1OEJCRVxcdTdGNkVcXHU2NzAwXFx1NUMwRlxcdTZERkJcXHU1MkEwXFx1NTFFMFxcdTk4NzlcIixcbiAgICAgICAgbWF4OiBcIlxcdThCQkVcXHU3RjZFXFx1NjcwMFxcdTU5MUFcXHU2REZCXFx1NTJBMFxcdTUxRTBcXHU5ODc5XCJcbiAgICAgIH1cbiAgICB9LFxuICAgIGh0bWw6IHtcbiAgICAgIG5hbWU6IFwiSFRNTFwiLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgZm9ybUNyZWF0ZU5hdGl2ZTogXCJcXHU2NjJGXFx1NTQyNlxcdTY2M0VcXHU3OTNBXFx1NjgwN1xcdTk4OThcIixcbiAgICAgICAgZm9ybUNyZWF0ZVRpdGxlOiBcIlxcdTY4MDdcXHU5ODk4XCIsXG4gICAgICAgIGZvcm1DcmVhdGVDaGlsZDogXCJcXHU1MTg1XFx1NUJCOVwiXG4gICAgICB9XG4gICAgfSxcbiAgICBpbnB1dDoge1xuICAgICAgbmFtZTogXCJcXHU4RjkzXFx1NTE2NVxcdTY4NDZcIixcbiAgICAgIGV2ZW50OiB7XG4gICAgICAgIGNoYW5nZTogXCJcXHU1RjUzXFx1NTAzQ1xcdTY1MzlcXHU1M0Q4XFx1NjVGNlxcdUZGMENcXHU1RjUzXFx1N0VDNFxcdTRFRjZcXHU1OTMxXFx1NTNCQlxcdTcxMjZcXHU3MEI5XFx1NjIxNlxcdTc1MjhcXHU2MjM3XFx1NjMwOUVudGVyXFx1NjVGNlxcdTg5RTZcXHU1M0QxXCJcbiAgICAgIH0sXG4gICAgICBwcm9wczoge1xuICAgICAgICBtYXhsZW5ndGg6IFwiXFx1NjcwMFxcdTU5MjdcXHU4RjkzXFx1NTE2NVxcdTk1N0ZcXHU1RUE2XCIsXG4gICAgICAgIG1pbmxlbmd0aDogXCJcXHU2NzAwXFx1NUMwRlxcdThGOTNcXHU1MTY1XFx1OTU3RlxcdTVFQTZcIixcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiXFx1OEY5M1xcdTUxNjVcXHU2ODQ2XFx1NTM2MFxcdTRGNERcXHU2NTg3XFx1NjcyQ1wiLFxuICAgICAgICBjbGVhcmFibGU6IFwiXFx1NjYyRlxcdTU0MjZcXHU2NjNFXFx1NzkzQVxcdTZFMDVcXHU5NjY0XFx1NjMwOVxcdTk0QUVcIixcbiAgICAgICAgZGlzYWJsZWQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU3OTgxXFx1NzUyOFwiLFxuICAgICAgICByZWFkb25seTogXCJcXHU2NjJGXFx1NTQyNlxcdTUzRUFcXHU4QkZCXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIGlucHV0TnVtYmVyOiB7XG4gICAgICBuYW1lOiBcIlxcdThCQTFcXHU2NTcwXFx1NTY2OFwiLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgbWluOiBcIlxcdThCQkVcXHU3RjZFXFx1OEJBMVxcdTY1NzBcXHU1NjY4XFx1NTE0MVxcdThCQjhcXHU3Njg0XFx1NjcwMFxcdTVDMEZcXHU1MDNDXCIsXG4gICAgICAgIG1heDogXCJcXHU4QkJFXFx1N0Y2RVxcdThCQTFcXHU2NTcwXFx1NTY2OFxcdTUxNDFcXHU4QkI4XFx1NzY4NFxcdTY3MDBcXHU1OTI3XFx1NTAzQ1wiLFxuICAgICAgICBzdGVwOiBcIlxcdThCQTFcXHU2NTcwXFx1NTY2OFxcdTZCNjVcXHU5NTdGXCIsXG4gICAgICAgIHN0ZXBTdHJpY3RseTogXCJcXHU2NjJGXFx1NTQyNlxcdTUzRUFcXHU4MEZEXFx1OEY5M1xcdTUxNjUgc3RlcCBcXHU3Njg0XFx1NTAwRFxcdTY1NzBcIixcbiAgICAgICAgZGlzYWJsZWQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU3OTgxXFx1NzUyOFxcdThCQTFcXHU2NTcwXFx1NTY2OFwiLFxuICAgICAgICBjb250cm9sczogXCJcXHU2NjJGXFx1NTQyNlxcdTRGN0ZcXHU3NTI4XFx1NjNBN1xcdTUyMzZcXHU2MzA5XFx1OTRBRVwiLFxuICAgICAgICBjb250cm9sc1Bvc2l0aW9uOiBcIlxcdTYzQTdcXHU1MjM2XFx1NjMwOVxcdTk0QUVcXHU0RjREXFx1N0Y2RVwiLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJcXHU4RjkzXFx1NTE2NVxcdTY4NDZcXHU1MzYwXFx1NEY0RFxcdTY1ODdcXHU2NzJDXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhc3N3b3JkOiB7XG4gICAgICBuYW1lOiBcIlxcdTVCQzZcXHU3ODAxXFx1OEY5M1xcdTUxNjVcXHU2ODQ2XCIsXG4gICAgICBldmVudDoge1xuICAgICAgICBjaGFuZ2U6IFwiXFx1NUY1M1xcdTUwM0NcXHU2NTM5XFx1NTNEOFxcdTY1RjZcXHVGRjBDXFx1NUY1M1xcdTdFQzRcXHU0RUY2XFx1NTkzMVxcdTUzQkJcXHU3MTI2XFx1NzBCOVxcdTYyMTZcXHU3NTI4XFx1NjIzN1xcdTYzMDlFbnRlclxcdTY1RjZcXHU4OUU2XFx1NTNEMVwiXG4gICAgICB9LFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgZGlzYWJsZWQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU3OTgxXFx1NzUyOFwiLFxuICAgICAgICByZWFkb25seTogXCJcXHU2NjJGXFx1NTQyNlxcdTUzRUFcXHU4QkZCXCIsXG4gICAgICAgIG1heGxlbmd0aDogXCJcXHU2NzAwXFx1NTkyN1xcdThGOTNcXHU1MTY1XFx1OTU3RlxcdTVFQTZcIixcbiAgICAgICAgbWlubGVuZ3RoOiBcIlxcdTY3MDBcXHU1QzBGXFx1OEY5M1xcdTUxNjVcXHU5NTdGXFx1NUVBNlwiLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJcXHU4RjkzXFx1NTE2NVxcdTY4NDZcXHU1MzYwXFx1NEY0RFxcdTY1ODdcXHU2NzJDXCIsXG4gICAgICAgIGNsZWFyYWJsZTogXCJcXHU2NjJGXFx1NTQyNlxcdTY2M0VcXHU3OTNBXFx1NkUwNVxcdTk2NjRcXHU2MzA5XFx1OTRBRVwiXG4gICAgICB9XG4gICAgfSxcbiAgICByYWRpbzoge1xuICAgICAgbmFtZTogXCJcXHU1MzU1XFx1OTAwOVxcdTY4NDZcIixcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGRpc2FibGVkOiBcIlxcdTY2MkZcXHU1NDI2XFx1Nzk4MVxcdTc1MjhcIixcbiAgICAgICAgdHlwZTogXCJcXHU2MzA5XFx1OTRBRVxcdTVGNjJcXHU1RjBGXCIsXG4gICAgICAgIHRleHRDb2xvcjogXCJcXHU2MzA5XFx1OTRBRVxcdTVGNjJcXHU1RjBGXFx1NkZDMFxcdTZEM0JcXHU2NUY2XFx1NzY4NFxcdTY1ODdcXHU2NzJDXFx1OTg5Q1xcdTgyNzJcIixcbiAgICAgICAgZmlsbDogXCJcXHU2MzA5XFx1OTRBRVxcdTVGNjJcXHU1RjBGXFx1NkZDMFxcdTZEM0JcXHU2NUY2XFx1NzY4NFxcdTU4NkJcXHU1MTQ1XFx1ODI3MlxcdTU0OENcXHU4RkI5XFx1Njg0NlxcdTgyNzJcIlxuICAgICAgfVxuICAgIH0sXG4gICAgcmF0ZToge1xuICAgICAgbmFtZTogXCJcXHU4QkM0XFx1NTIwNlwiLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgbWF4OiBcIlxcdTY3MDBcXHU1OTI3XFx1NTIwNlxcdTUwM0NcIixcbiAgICAgICAgZGlzYWJsZWQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU3OTgxXFx1NzUyOFwiLFxuICAgICAgICBhbGxvd0hhbGY6IFwiXFx1NjYyRlxcdTU0MjZcXHU1MTQxXFx1OEJCOFxcdTUzNEFcXHU5MDA5XCIsXG4gICAgICAgIHZvaWRDb2xvcjogXCJcXHU2NzJBXFx1OTAwOVxcdTRFMkRcXHU2NUY2XFx1NTZGRVxcdTY4MDdcXHU3Njg0XFx1OTg5Q1xcdTgyNzJcIixcbiAgICAgICAgZGlzYWJsZWRWb2lkQ29sb3I6IFwiXFx1NTNFQVxcdThCRkJcXHU2NUY2XFx1NjcyQVxcdTkwMDlcXHU0RTJEXFx1NjVGNlxcdTU2RkVcXHU2ODA3XFx1NzY4NFxcdTk4OUNcXHU4MjcyXCIsXG4gICAgICAgIHZvaWRJY29uQ2xhc3M6IFwiXFx1NjcyQVxcdTkwMDlcXHU0RTJEXFx1NjVGNlxcdTU2RkVcXHU2ODA3XFx1NzY4NFxcdTdDN0JcXHU1NDBEXCIsXG4gICAgICAgIGRpc2FibGVkVm9pZEljb25DbGFzczogXCJcXHU1M0VBXFx1OEJGQlxcdTY1RjZcXHU2NzJBXFx1OTAwOVxcdTRFMkRcXHU2NUY2XFx1NTZGRVxcdTY4MDdcXHU3Njg0XFx1N0M3QlxcdTU0MERcIixcbiAgICAgICAgc2hvd1Njb3JlOiBcIlxcdTY2MkZcXHU1NDI2XFx1NjYzRVxcdTc5M0FcXHU1RjUzXFx1NTI0RFxcdTUyMDZcXHU2NTcwXCIsXG4gICAgICAgIHRleHRDb2xvcjogXCJcXHU4Rjg1XFx1NTJBOVxcdTY1ODdcXHU1QjU3XFx1NzY4NFxcdTk4OUNcXHU4MjcyXCIsXG4gICAgICAgIHNjb3JlVGVtcGxhdGU6IFwiXFx1NTIwNlxcdTY1NzBcXHU2NjNFXFx1NzkzQVxcdTZBMjFcXHU2NzdGXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIHNlbGVjdDoge1xuICAgICAgbmFtZTogXCJcXHU5MDA5XFx1NjJFOVxcdTU2NjhcIixcbiAgICAgIGV2ZW50OiB7XG4gICAgICAgIHJlbW92ZVRhZzogXCJcXHU1OTFBXFx1OTAwOVxcdTZBMjFcXHU1RjBGXFx1NEUwQlxcdTc5RkJcXHU5NjY0dGFnXFx1NjVGNlxcdTg5RTZcXHU1M0QxXCJcbiAgICAgIH0sXG4gICAgICBwcm9wczoge1xuICAgICAgICBtdWx0aXBsZTogXCJcXHU2NjJGXFx1NTQyNlxcdTU5MUFcXHU5MDA5XCIsXG4gICAgICAgIGRpc2FibGVkOiBcIlxcdTY2MkZcXHU1NDI2XFx1Nzk4MVxcdTc1MjhcIixcbiAgICAgICAgY2xlYXJhYmxlOiBcIlxcdTY2MkZcXHU1NDI2XFx1NTNFRlxcdTRFRTVcXHU2RTA1XFx1N0E3QVxcdTkwMDlcXHU5ODc5XCIsXG4gICAgICAgIGNvbGxhcHNlVGFnczogXCJcXHU1OTFBXFx1OTAwOVxcdTY1RjZcXHU2NjJGXFx1NTQyNlxcdTVDMDZcXHU5MDA5XFx1NEUyRFxcdTUwM0NcXHU2MzA5XFx1NjU4N1xcdTVCNTdcXHU3Njg0XFx1NUY2MlxcdTVGMEZcXHU1QzU1XFx1NzkzQVwiLFxuICAgICAgICBtdWx0aXBsZUxpbWl0OiBcIlxcdTU5MUFcXHU5MDA5XFx1NjVGNlxcdTc1MjhcXHU2MjM3XFx1NjcwMFxcdTU5MUFcXHU1M0VGXFx1NEVFNVxcdTkwMDlcXHU2MkU5XFx1NzY4NFxcdTk4NzlcXHU3NkVFXFx1NjU3MFxcdUZGMENcXHU0RTNBIDAgXFx1NTIxOVxcdTRFMERcXHU5NjUwXFx1NTIzNlwiLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJcXHU1MzYwXFx1NEY0RFxcdTdCMjZcIixcbiAgICAgICAgZmlsdGVyYWJsZTogXCJcXHU2NjJGXFx1NTQyNlxcdTUzRUZcXHU2NDFDXFx1N0QyMlwiLFxuICAgICAgICBhbGxvd0NyZWF0ZTogXCJcXHU2NjJGXFx1NTQyNlxcdTUxNDFcXHU4QkI4XFx1NzUyOFxcdTYyMzdcXHU1MjFCXFx1NUVGQVxcdTY1QjBcXHU2NzYxXFx1NzZFRVwiLFxuICAgICAgICBub01hdGNoVGV4dDogXCJcXHU2NDFDXFx1N0QyMlxcdTY3NjFcXHU0RUY2XFx1NjVFMFxcdTUzMzlcXHU5MTREXFx1NjVGNlxcdTY2M0VcXHU3OTNBXFx1NzY4NFxcdTY1ODdcXHU1QjU3XCIsXG4gICAgICAgIG5vRGF0YVRleHQ6IFwiXFx1OTAwOVxcdTk4NzlcXHU0RTNBXFx1N0E3QVxcdTY1RjZcXHU2NjNFXFx1NzkzQVxcdTc2ODRcXHU2NTg3XFx1NUI1N1wiLFxuICAgICAgICByZXNlcnZlS2V5d29yZDogXCJcXHU1OTFBXFx1OTAwOVxcdTRFMTRcXHU1M0VGXFx1NjQxQ1xcdTdEMjJcXHU2NUY2XFx1RkYwQ1xcdTY2MkZcXHU1NDI2XFx1NTcyOFxcdTkwMDlcXHU0RTJEXFx1NEUwMFxcdTRFMkFcXHU5MDA5XFx1OTg3OVxcdTU0MEVcXHU0RkREXFx1NzU1OVxcdTVGNTNcXHU1MjREXFx1NzY4NFxcdTY0MUNcXHU3RDIyXFx1NTE3M1xcdTk1MkVcXHU4QkNEXCIsXG4gICAgICAgIGRlZmF1bHRGaXJzdE9wdGlvbjogXCJcXHU1NzI4XFx1OEY5M1xcdTUxNjVcXHU2ODQ2XFx1NjMwOVxcdTRFMEJcXHU1NkRFXFx1OEY2NlxcdUZGMENcXHU5MDA5XFx1NjJFOVxcdTdCMkNcXHU0RTAwXFx1NEUyQVxcdTUzMzlcXHU5MTREXFx1OTg3OVwiLFxuICAgICAgICByZW1vdGU6IFwiXFx1NTE3NlxcdTRFMkRcXHU3Njg0XFx1OTAwOVxcdTk4NzlcXHU2NjJGXFx1NTQyNlxcdTRFQ0VcXHU2NzBEXFx1NTJBMVxcdTU2NjhcXHU4RkRDXFx1N0EwQlxcdTUyQTBcXHU4RjdEXCIsXG4gICAgICAgIHJlbW90ZU1ldGhvZDogXCJcXHU4MUVBXFx1NUI5QVxcdTRFNDlcXHU4RkRDXFx1N0EwQlxcdTY0MUNcXHU3RDIyXFx1NjVCOVxcdTZDRDVcIlxuICAgICAgfVxuICAgIH0sXG4gICAgc2xpZGVyOiB7XG4gICAgICBuYW1lOiBcIlxcdTZFRDFcXHU1NzU3XCIsXG4gICAgICBwcm9wczoge1xuICAgICAgICBtaW46IFwiXFx1NjcwMFxcdTVDMEZcXHU1MDNDXCIsXG4gICAgICAgIG1heDogXCJcXHU2NzAwXFx1NTkyN1xcdTUwM0NcIixcbiAgICAgICAgZGlzYWJsZWQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU3OTgxXFx1NzUyOFwiLFxuICAgICAgICBzdGVwOiBcIlxcdTZCNjVcXHU5NTdGXCIsXG4gICAgICAgIHNob3dJbnB1dDogXCJcXHU2NjJGXFx1NTQyNlxcdTY2M0VcXHU3OTNBXFx1OEY5M1xcdTUxNjVcXHU2ODQ2XFx1RkYwQ1xcdTRFQzVcXHU1NzI4XFx1OTc1RVxcdTgzMDNcXHU1NkY0XFx1OTAwOVxcdTYyRTlcXHU2NUY2XFx1NjcwOVxcdTY1NDhcIixcbiAgICAgICAgc2hvd0lucHV0Q29udHJvbHM6IFwiXFx1NTcyOFxcdTY2M0VcXHU3OTNBXFx1OEY5M1xcdTUxNjVcXHU2ODQ2XFx1NzY4NFxcdTYwQzVcXHU1MUI1XFx1NEUwQlxcdUZGMENcXHU2NjJGXFx1NTQyNlxcdTY2M0VcXHU3OTNBXFx1OEY5M1xcdTUxNjVcXHU2ODQ2XFx1NzY4NFxcdTYzQTdcXHU1MjM2XFx1NjMwOVxcdTk0QUVcIixcbiAgICAgICAgc2hvd1N0b3BzOiBcIlxcdTY2MkZcXHU1NDI2XFx1NjYzRVxcdTc5M0FcXHU5NUY0XFx1NjVBRFxcdTcwQjlcIixcbiAgICAgICAgcmFuZ2U6IFwiXFx1NjYyRlxcdTU0MjZcXHU0RTNBXFx1ODMwM1xcdTU2RjRcXHU5MDA5XFx1NjJFOVwiLFxuICAgICAgICB2ZXJ0aWNhbDogXCJcXHU2NjJGXFx1NTQyNlxcdTdBRDZcXHU1NDExXFx1NkEyMVxcdTVGMEZcIixcbiAgICAgICAgaGVpZ2h0OiBcIlNsaWRlciBcXHU5QUQ4XFx1NUVBNlxcdUZGMENcXHU3QUQ2XFx1NTQxMVxcdTZBMjFcXHU1RjBGXFx1NjVGNlxcdTVGQzVcXHU1ODZCXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIHNwYWNlOiB7XG4gICAgICBuYW1lOiBcIlxcdTk1RjRcXHU4REREXCIsXG4gICAgICBwcm9wczoge1xuICAgICAgICBoZWlnaHQ6IFwiXFx1OUFEOFxcdTVFQTZcIlxuICAgICAgfVxuICAgIH0sXG4gICAgc3ViRm9ybToge1xuICAgICAgbmFtZTogXCJcXHU1MjA2XFx1N0VDNFwiLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgZGlzYWJsZWQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU3OTgxXFx1NzUyOFwiLFxuICAgICAgICBzeW5jRGlzYWJsZWQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU0RTBFXFx1NUI1MFxcdTg4NjhcXHU1MzU1XFx1NUYzQVxcdTUyMzZcXHU1NDBDXFx1NkI2NVxcdTc5ODFcXHU3NTI4XFx1NzJCNlxcdTYwMDFcIlxuICAgICAgfVxuICAgIH0sXG4gICAgc3dpdGNoOiB7XG4gICAgICBuYW1lOiBcIlxcdTVGMDBcXHU1MTczXCIsXG4gICAgICBwcm9wczoge1xuICAgICAgICBkaXNhYmxlZDogXCJcXHU2NjJGXFx1NTQyNlxcdTc5ODFcXHU3NTI4XCIsXG4gICAgICAgIHdpZHRoOiBcIlxcdTVCQkRcXHU1RUE2XFx1RkYwOHB4XFx1RkYwOVwiLFxuICAgICAgICBhY3RpdmVUZXh0OiBcIlxcdTYyNTNcXHU1RjAwXFx1NjVGNlxcdTc2ODRcXHU2NTg3XFx1NUI1N1xcdTYzQ0ZcXHU4RkYwXCIsXG4gICAgICAgIGluYWN0aXZlVGV4dDogXCJcXHU1MTczXFx1OTVFRFxcdTY1RjZcXHU3Njg0XFx1NjU4N1xcdTVCNTdcXHU2M0NGXFx1OEZGMFwiLFxuICAgICAgICBhY3RpdmVWYWx1ZTogXCJcXHU2MjUzXFx1NUYwMFxcdTY1RjZcXHU3Njg0XFx1NTAzQ1wiLFxuICAgICAgICBpbmFjdGl2ZVZhbHVlOiBcIlxcdTUxNzNcXHU5NUVEXFx1NjVGNlxcdTc2ODRcXHU1MDNDXCIsXG4gICAgICAgIGFjdGl2ZUNvbG9yOiBcIlxcdTYyNTNcXHU1RjAwXFx1NjVGNlxcdTc2ODRcXHU4MENDXFx1NjY2RlxcdTgyNzJcIixcbiAgICAgICAgaW5hY3RpdmVDb2xvcjogXCJcXHU1MTczXFx1OTVFRFxcdTY1RjZcXHU3Njg0XFx1ODBDQ1xcdTY2NkZcXHU4MjcyXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIHRhYmxlRm9ybToge1xuICAgICAgbmFtZTogXCJcXHU4ODY4XFx1NjgzQ1xcdTg4NjhcXHU1MzU1XCIsXG4gICAgICBwcm9wczoge1xuICAgICAgICBkaXNhYmxlZDogXCJcXHU2NjJGXFx1NTQyNlxcdTc5ODFcXHU3NTI4XCIsXG4gICAgICAgIG1heDogXCJcXHU2NzAwXFx1NTkxQVxcdTZERkJcXHU1MkEwXFx1NTFFMFxcdTg4NENcXHVGRjBDXFx1NEUzQSAwIFxcdTUyMTlcXHU0RTBEXFx1OTY1MFxcdTUyMzZcIlxuICAgICAgfVxuICAgIH0sXG4gICAgdGFibGVGb3JtQ29sdW1uOiB7XG4gICAgICBuYW1lOiBcIlxcdTg4NjhcXHU2ODNDXFx1NjgzQ1xcdTVCNTBcIixcbiAgICAgIGxhYmVsOiBcIlxcdTgxRUFcXHU1QjlBXFx1NEU0OVxcdTU0MERcXHU3OUYwXCIsXG4gICAgICBwcm9wczoge1xuICAgICAgICBsYWJlbDogXCJcXHU2ODA3XFx1OTg5OFwiLFxuICAgICAgICB3aWR0aDogXCJcXHU1QkJEXFx1NUVBNlwiLFxuICAgICAgICBjb2xvcjogXCJcXHU5ODlDXFx1ODI3MlwiXG4gICAgICB9XG4gICAgfSxcbiAgICB0ZXh0OiB7XG4gICAgICBuYW1lOiBcIlxcdTY1ODdcXHU1QjU3XCIsXG4gICAgICBwcm9wczoge1xuICAgICAgICBmb3JtQ3JlYXRlTmF0aXZlOiBcIlxcdTY2MkZcXHU1NDI2XFx1NjYzRVxcdTc5M0FcXHU2ODA3XFx1OTg5OFwiLFxuICAgICAgICBmb3JtQ3JlYXRlVGl0bGU6IFwiXFx1NjgwN1xcdTk4OThcIixcbiAgICAgICAgZm9ybUNyZWF0ZUNoaWxkOiBcIlxcdTUxODVcXHU1QkI5XCJcbiAgICAgIH1cbiAgICB9LFxuICAgIHRleHRhcmVhOiB7XG4gICAgICBuYW1lOiBcIlxcdTU5MUFcXHU4ODRDXFx1OEY5M1xcdTUxNjVcXHU2ODQ2XCIsXG4gICAgICBldmVudDoge1xuICAgICAgICBjaGFuZ2U6IFwiXFx1NUY1M1xcdTUwM0NcXHU2NTM5XFx1NTNEOFxcdTY1RjZcXHVGRjBDXFx1NUY1M1xcdTdFQzRcXHU0RUY2XFx1NTkzMVxcdTUzQkJcXHU3MTI2XFx1NzBCOVxcdTYyMTZcXHU3NTI4XFx1NjIzN1xcdTYzMDlFbnRlclxcdTY1RjZcXHU4OUU2XFx1NTNEMVwiXG4gICAgICB9LFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgZGlzYWJsZWQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU3OTgxXFx1NzUyOFwiLFxuICAgICAgICByZWFkb25seTogXCJcXHU2NjJGXFx1NTQyNlxcdTUzRUFcXHU4QkZCXCIsXG4gICAgICAgIG1heGxlbmd0aDogXCJcXHU2NzAwXFx1NTkyN1xcdThGOTNcXHU1MTY1XFx1OTU3RlxcdTVFQTZcIixcbiAgICAgICAgbWlubGVuZ3RoOiBcIlxcdTY3MDBcXHU1QzBGXFx1OEY5M1xcdTUxNjVcXHU5NTdGXFx1NUVBNlwiLFxuICAgICAgICBzaG93V29yZExpbWl0OiBcIlxcdTY2MkZcXHU1NDI2XFx1NjYzRVxcdTc5M0FcXHU3RURGXFx1OEJBMVxcdTVCNTdcXHU2NTcwXCIsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIlxcdThGOTNcXHU1MTY1XFx1Njg0NlxcdTUzNjBcXHU0RjREXFx1NjU4N1xcdTY3MkNcIixcbiAgICAgICAgcm93czogXCJcXHU4RjkzXFx1NTE2NVxcdTY4NDZcXHU4ODRDXFx1NjU3MFwiLFxuICAgICAgICBhdXRvc2l6ZTogXCJcXHU5QUQ4XFx1NUVBNlxcdTY2MkZcXHU1NDI2XFx1ODFFQVxcdTkwMDJcXHU1RTk0XCJcbiAgICAgIH1cbiAgICB9LFxuICAgIHRpbWVQaWNrZXI6IHtcbiAgICAgIG5hbWU6IFwiXFx1NjVGNlxcdTk1RjRcIixcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHBpY2tlck9wdGlvbnM6IFwiXFx1NUY1M1xcdTUyNERcXHU2NUY2XFx1OTVGNFxcdTY1RTVcXHU2NzFGXFx1OTAwOVxcdTYyRTlcXHU1NjY4XFx1NzI3OVxcdTY3MDlcXHU3Njg0XFx1OTAwOVxcdTk4NzlcIixcbiAgICAgICAgcmVhZG9ubHk6IFwiXFx1NUI4Q1xcdTUxNjhcXHU1M0VBXFx1OEJGQlwiLFxuICAgICAgICBkaXNhYmxlZDogXCJcXHU3OTgxXFx1NzUyOFwiLFxuICAgICAgICBlZGl0YWJsZTogXCJcXHU2NTg3XFx1NjcyQ1xcdTY4NDZcXHU1M0VGXFx1OEY5M1xcdTUxNjVcIixcbiAgICAgICAgY2xlYXJhYmxlOiBcIlxcdTY2MkZcXHU1NDI2XFx1NjYzRVxcdTc5M0FcXHU2RTA1XFx1OTY2NFxcdTYzMDlcXHU5NEFFXCIsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIlxcdTk3NUVcXHU4MzAzXFx1NTZGNFxcdTkwMDlcXHU2MkU5XFx1NjVGNlxcdTc2ODRcXHU1MzYwXFx1NEY0RFxcdTUxODVcXHU1QkI5XCIsXG4gICAgICAgIHN0YXJ0UGxhY2Vob2xkZXI6IFwiXFx1ODMwM1xcdTU2RjRcXHU5MDA5XFx1NjJFOVxcdTY1RjZcXHU1RjAwXFx1NTlDQlxcdTY1RTVcXHU2NzFGXFx1NzY4NFxcdTUzNjBcXHU0RjREXFx1NTE4NVxcdTVCQjlcIixcbiAgICAgICAgZW5kUGxhY2Vob2xkZXI6IFwiXFx1ODMwM1xcdTU2RjRcXHU5MDA5XFx1NjJFOVxcdTY1RjZcXHU1RjAwXFx1NTlDQlxcdTY1RTVcXHU2NzFGXFx1NzY4NFxcdTUzNjBcXHU0RjREXFx1NTE4NVxcdTVCQjlcIixcbiAgICAgICAgaXNSYW5nZTogXCJcXHU2NjJGXFx1NTQyNlxcdTRFM0FcXHU2NUY2XFx1OTVGNFxcdTgzMDNcXHU1NkY0XFx1OTAwOVxcdTYyRTlcIixcbiAgICAgICAgYXJyb3dDb250cm9sOiBcIlxcdTY2MkZcXHU1NDI2XFx1NEY3RlxcdTc1MjhcXHU3QkFEXFx1NTkzNFxcdThGREJcXHU4ODRDXFx1NjVGNlxcdTk1RjRcXHU5MDA5XFx1NjJFOVwiLFxuICAgICAgICBhbGlnbjogXCJcXHU1QkY5XFx1OUY1MFxcdTY1QjlcXHU1RjBGXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIHRyZWU6IHtcbiAgICAgIG5hbWU6IFwiXFx1NjgxMVxcdTVGNjJcXHU2M0E3XFx1NEVGNlwiLFxuICAgICAgZXZlbnQ6IHtcbiAgICAgICAgbm9kZUNsaWNrOiBcIlxcdTVGNTNcXHU4MjgyXFx1NzBCOVxcdTg4QUJcXHU3MEI5XFx1NTFGQlxcdTc2ODRcXHU2NUY2XFx1NTAxOVxcdTg5RTZcXHU1M0QxXCIsXG4gICAgICAgIG5vZGVDb250ZXh0bWVudTogXCJcXHU1RjUzXFx1NjdEMFxcdTRFMDBcXHU4MjgyXFx1NzBCOVxcdTg4QUJcXHU5RjIwXFx1NjgwN1xcdTUzRjNcXHU5NTJFXFx1NzBCOVxcdTUxRkJcXHU2NUY2XFx1NEYxQVxcdTg5RTZcXHU1M0QxXFx1OEJFNVxcdTRFOEJcXHU0RUY2XCIsXG4gICAgICAgIGNoZWNrQ2hhbmdlOiBcIlxcdTVGNTNcXHU1OTBEXFx1OTAwOVxcdTY4NDZcXHU4OEFCXFx1NzBCOVxcdTUxRkJcXHU3Njg0XFx1NjVGNlxcdTUwMTlcXHU4OUU2XFx1NTNEMVwiLFxuICAgICAgICBjaGVjazogXCJcXHU3MEI5XFx1NTFGQlxcdTgyODJcXHU3MEI5XFx1NTkwRFxcdTkwMDlcXHU2ODQ2XFx1NEU0QlxcdTU0MEVcXHU4OUU2XFx1NTNEMVwiLFxuICAgICAgICBjdXJyZW50Q2hhbmdlOiBcIlxcdTVGNTNcXHU1MjREXFx1OTAwOVxcdTRFMkRcXHU4MjgyXFx1NzBCOVxcdTUzRDhcXHU1MzE2XFx1NjVGNlxcdTg5RTZcXHU1M0QxXFx1NzY4NFxcdTRFOEJcXHU0RUY2XCIsXG4gICAgICAgIG5vZGVFeHBhbmQ6IFwiXFx1ODI4MlxcdTcwQjlcXHU4OEFCXFx1NUM1NVxcdTVGMDBcXHU2NUY2XFx1ODlFNlxcdTUzRDFcXHU3Njg0XFx1NEU4QlxcdTRFRjZcIixcbiAgICAgICAgbm9kZUNvbGxhcHNlOiBcIlxcdTgyODJcXHU3MEI5XFx1ODhBQlxcdTUxNzNcXHU5NUVEXFx1NjVGNlxcdTg5RTZcXHU1M0QxXFx1NzY4NFxcdTRFOEJcXHU0RUY2XCIsXG4gICAgICAgIG5vZGVEcmFnU3RhcnQ6IFwiXFx1ODI4MlxcdTcwQjlcXHU1RjAwXFx1NTlDQlxcdTYyRDZcXHU2MkZEXFx1NjVGNlxcdTg5RTZcXHU1M0QxXFx1NzY4NFxcdTRFOEJcXHU0RUY2XCIsXG4gICAgICAgIG5vZGVEcmFnRW50ZXI6IFwiXFx1NjJENlxcdTYyRkRcXHU4RkRCXFx1NTE2NVxcdTUxNzZcXHU0RUQ2XFx1ODI4MlxcdTcwQjlcXHU2NUY2XFx1ODlFNlxcdTUzRDFcXHU3Njg0XFx1NEU4QlxcdTRFRjZcIixcbiAgICAgICAgbm9kZURyYWdMZWF2ZTogXCJcXHU2MkQ2XFx1NjJGRFxcdTc5QkJcXHU1RjAwXFx1NjdEMFxcdTRFMkFcXHU4MjgyXFx1NzBCOVxcdTY1RjZcXHU4OUU2XFx1NTNEMVxcdTc2ODRcXHU0RThCXFx1NEVGNlwiLFxuICAgICAgICBub2RlRHJhZ092ZXI6IFwiXFx1NTcyOFxcdTYyRDZcXHU2MkZEXFx1ODI4MlxcdTcwQjlcXHU2NUY2XFx1ODlFNlxcdTUzRDFcXHU3Njg0XFx1NEU4QlxcdTRFRjZcXHVGRjA4XFx1N0M3QlxcdTRGM0NcXHU2RDRGXFx1ODlDOFxcdTU2NjhcXHU3Njg0IG1vdXNlb3ZlciBcXHU0RThCXFx1NEVGNlxcdUZGMDlcIixcbiAgICAgICAgbm9kZURyYWdFbmQ6IFwiXFx1NjJENlxcdTYyRkRcXHU3RUQzXFx1Njc1RlxcdTY1RjZcXHVGRjA4XFx1NTNFRlxcdTgwRkRcXHU2NzJBXFx1NjIxMFxcdTUyOUZcXHVGRjA5XFx1ODlFNlxcdTUzRDFcXHU3Njg0XFx1NEU4QlxcdTRFRjZcIixcbiAgICAgICAgbm9kZURyb3A6IFwiXFx1NjJENlxcdTYyRkRcXHU2MjEwXFx1NTI5RlxcdTVCOENcXHU2MjEwXFx1NjVGNlxcdTg5RTZcXHU1M0QxXFx1NzY4NFxcdTRFOEJcXHU0RUY2XCJcbiAgICAgIH0sXG4gICAgICBwcm9wczoge1xuICAgICAgICBlbXB0eVRleHQ6IFwiXFx1NTE4NVxcdTVCQjlcXHU0RTNBXFx1N0E3QVxcdTc2ODRcXHU2NUY2XFx1NTAxOVxcdTVDNTVcXHU3OTNBXFx1NzY4NFxcdTY1ODdcXHU2NzJDXCIsXG4gICAgICAgIHByb3BzOiBcIlxcdTkxNERcXHU3RjZFXFx1OTAwOVxcdTk4NzlcIixcbiAgICAgICAgcmVuZGVyQWZ0ZXJFeHBhbmQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU1NzI4XFx1N0IyQ1xcdTRFMDBcXHU2QjIxXFx1NUM1NVxcdTVGMDBcXHU2N0QwXFx1NEUyQVxcdTY4MTFcXHU4MjgyXFx1NzBCOVxcdTU0MEVcXHU2MjREXFx1NkUzMlxcdTY3RDNcXHU1MTc2XFx1NUI1MFxcdTgyODJcXHU3MEI5XCIsXG4gICAgICAgIGRlZmF1bHRFeHBhbmRBbGw6IFwiXFx1NjYyRlxcdTU0MjZcXHU5RUQ4XFx1OEJBNFxcdTVDNTVcXHU1RjAwXFx1NjI0MFxcdTY3MDlcXHU4MjgyXFx1NzBCOVwiLFxuICAgICAgICBleHBhbmRPbkNsaWNrTm9kZTogXCJcXHU2NjJGXFx1NTQyNlxcdTU3MjhcXHU3MEI5XFx1NTFGQlxcdTgyODJcXHU3MEI5XFx1NzY4NFxcdTY1RjZcXHU1MDE5XFx1NUM1NVxcdTVGMDBcXHU2MjE2XFx1ODAwNVxcdTY1MzZcXHU3RjI5XFx1ODI4MlxcdTcwQjlcXHVGRjBDXFx1NTk4MlxcdTY3OUNcXHU0RTNBIGZhbHNlXFx1RkYwQ1xcdTUyMTlcXHU1M0VBXFx1NjcwOVxcdTcwQjlcXHU3QkFEXFx1NTkzNFxcdTU2RkVcXHU2ODA3XFx1NzY4NFxcdTY1RjZcXHU1MDE5XFx1NjI0RFxcdTRGMUFcXHU1QzU1XFx1NUYwMFxcdTYyMTZcXHU4MDA1XFx1NjUzNlxcdTdGMjlcXHU4MjgyXFx1NzBCOVxcdTMwMDJcIixcbiAgICAgICAgY2hlY2tPbkNsaWNrTm9kZTogXCJcXHU2NjJGXFx1NTQyNlxcdTU3MjhcXHU3MEI5XFx1NTFGQlxcdTgyODJcXHU3MEI5XFx1NzY4NFxcdTY1RjZcXHU1MDE5XFx1OTAwOVxcdTRFMkRcXHU4MjgyXFx1NzBCOVwiLFxuICAgICAgICBhdXRvRXhwYW5kUGFyZW50OiBcIlxcdTVDNTVcXHU1RjAwXFx1NUI1MFxcdTgyODJcXHU3MEI5XFx1NzY4NFxcdTY1RjZcXHU1MDE5XFx1NjYyRlxcdTU0MjZcXHU4MUVBXFx1NTJBOFxcdTVDNTVcXHU1RjAwXFx1NzIzNlxcdTgyODJcXHU3MEI5XCIsXG4gICAgICAgIGNoZWNrU3RyaWN0bHk6IFwiXFx1NTcyOFxcdTY2M0VcXHU3OTNBXFx1NTkwRFxcdTkwMDlcXHU2ODQ2XFx1NzY4NFxcdTYwQzVcXHU1MUI1XFx1NEUwQlxcdUZGMENcXHU2NjJGXFx1NTQyNlxcdTRFMjVcXHU2ODNDXFx1NzY4NFxcdTkwNzVcXHU1RkFBXFx1NzIzNlxcdTVCNTBcXHU0RTBEXFx1NEU5MlxcdTc2RjhcXHU1MTczXFx1ODA1NFxcdTc2ODRcXHU1MDVBXFx1NkNENVwiLFxuICAgICAgICBhY2NvcmRpb246IFwiXFx1NjYyRlxcdTU0MjZcXHU2QkNGXFx1NkIyMVxcdTUzRUFcXHU2MjUzXFx1NUYwMFxcdTRFMDBcXHU0RTJBXFx1NTQwQ1xcdTdFQTdcXHU2ODExXFx1ODI4MlxcdTcwQjlcXHU1QzU1XFx1NUYwMFwiLFxuICAgICAgICBpbmRlbnQ6IFwiXFx1NzZGOFxcdTkwQkJcXHU3RUE3XFx1ODI4MlxcdTcwQjlcXHU5NUY0XFx1NzY4NFxcdTZDMzRcXHU1RTczXFx1N0YyOVxcdThGREIocHgpXCIsXG4gICAgICAgIG5vZGVLZXk6IFwiXFx1NkJDRlxcdTRFMkFcXHU2ODExXFx1ODI4MlxcdTcwQjlcXHU3NTI4XFx1Njc2NVxcdTRGNUNcXHU0RTNBXFx1NTUyRlxcdTRFMDBcXHU2ODA3XFx1OEJDNlxcdTc2ODRcXHU1QzVFXFx1NjAyN1xcdUZGMENcXHU2NTc0XFx1NjhGNVxcdTY4MTFcXHU1RTk0XFx1OEJFNVxcdTY2MkZcXHU1NTJGXFx1NEUwMFxcdTc2ODRcIlxuICAgICAgfVxuICAgIH0sXG4gICAgdXBsb2FkOiB7XG4gICAgICBuYW1lOiBcIlxcdTRFMEFcXHU0RjIwXCIsXG4gICAgICBpbmZvOiBcIlxcdTU3MjhvblN1Y2Nlc3NcXHU2NUI5XFx1NkNENVxcdTRFMkRcXHU1QzA2XFx1NjNBNVxcdTUzRTNcXHU4RkQ0XFx1NTZERVxcdTc2ODR1cmxcXHU4RDRCXFx1NTAzQ1xcdTdFRDlmaWxlLnVybFwiLFxuICAgICAgZXZlbnQ6IHtcbiAgICAgICAgcmVtb3ZlOiBcIlxcdTY1ODdcXHU0RUY2XFx1NTIxN1xcdTg4NjhcXHU3OUZCXFx1OTY2NFxcdTY1ODdcXHU0RUY2XFx1NjVGNlxcdTg5RTZcXHU1M0QxXCJcbiAgICAgIH0sXG4gICAgICBwcm9wczoge1xuICAgICAgICBsaXN0VHlwZTogXCJcXHU0RTBBXFx1NEYyMFxcdTdDN0JcXHU1NzhCXCIsXG4gICAgICAgIG11bHRpcGxlOiBcIlxcdTY2MkZcXHU1NDI2XFx1NjUyRlxcdTYzMDFcXHU1OTFBXFx1OTAwOVxcdTY1ODdcXHU0RUY2XCIsXG4gICAgICAgIGFjdGlvbjogXCJcXHU0RTBBXFx1NEYyMFxcdTc2ODRcXHU1NzMwXFx1NTc0MChcXHU1RkM1XFx1NTg2QilcIixcbiAgICAgICAgb25TdWNjZXNzOiBcIlxcdTRFMEFcXHU0RjIwXFx1NjIxMFxcdTUyOUZcXHU1NkRFXFx1OEMwM1wiLFxuICAgICAgICBoZWFkZXJzOiBcIlxcdThCQkVcXHU3RjZFXFx1NEUwQVxcdTRGMjBcXHU3Njg0XFx1OEJGN1xcdTZDNDJcXHU1OTM0XFx1OTBFOFwiLFxuICAgICAgICBkYXRhOiBcIlxcdTRFMEFcXHU0RjIwXFx1NjVGNlxcdTk2NDRcXHU1RTI2XFx1NzY4NFxcdTk4OURcXHU1OTE2XFx1NTNDMlxcdTY1NzBcIixcbiAgICAgICAgbmFtZTogXCJcXHU0RTBBXFx1NEYyMFxcdTc2ODRcXHU2NTg3XFx1NEVGNlxcdTVCNTdcXHU2QkI1XFx1NTQwRFwiLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IFwiXFx1NjUyRlxcdTYzMDFcXHU1M0QxXFx1OTAwMSBjb29raWUgXFx1NTFFRFxcdThCQzFcXHU0RkUxXFx1NjA2RlwiLFxuICAgICAgICBhY2NlcHQ6IFwiXFx1NjNBNVxcdTUzRDdcXHU0RTBBXFx1NEYyMFxcdTc2ODRcXHU2NTg3XFx1NEVGNlxcdTdDN0JcXHU1NzhCXCIsXG4gICAgICAgIGF1dG9VcGxvYWQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU1NzI4XFx1OTAwOVxcdTUzRDZcXHU2NTg3XFx1NEVGNlxcdTU0MEVcXHU3QUNCXFx1NTM3M1xcdThGREJcXHU4ODRDXFx1NEUwQVxcdTRGMjBcIixcbiAgICAgICAgZGlzYWJsZWQ6IFwiXFx1NjYyRlxcdTU0MjZcXHU3OTgxXFx1NzUyOFwiLFxuICAgICAgICBsaW1pdDogXCJcXHU2NzAwXFx1NTkyN1xcdTUxNDFcXHU4QkI4XFx1NEUwQVxcdTRGMjBcXHU0RTJBXFx1NjU3MFwiXG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuZnVuY3Rpb24gTWgocikge1xuICByLmFkZEtleU1hcCh7XG4gICAgbmFtZTogXCJhdXRvUGFyZW50aGVzZXNcIixcbiAgICBcIicoJ1wiOiAoZikgPT4ge1xuICAgICAgY29uc3QgbyA9IGYuZ2V0Q3Vyc29yKCk7XG4gICAgICBmLnJlcGxhY2VSYW5nZShcIigpXCIsIG8sIG8sIFwiK2luc2VydFwiKSwgZi5kb2Muc2V0Q3Vyc29yKHsgbGluZTogby5saW5lLCBjaDogby5jaCArIDEgfSk7XG4gICAgfVxuICB9KSwgci5hZGRLZXlNYXAoe1xuICAgIG5hbWU6IFwiYXV0b0JyYWNlc1wiLFxuICAgIFwiJ3snXCI6IChmKSA9PiB7XG4gICAgICBjb25zdCBvID0gZi5nZXRDdXJzb3IoKTtcbiAgICAgIGYucmVwbGFjZVJhbmdlKFwie31cIiwgbywgbywgXCIraW5zZXJ0XCIpLCBmLmRvYy5zZXRDdXJzb3IoeyBsaW5lOiBvLmxpbmUsIGNoOiBvLmNoICsgMSB9KTtcbiAgICB9XG4gIH0pLCByLmFkZEtleU1hcCh7XG4gICAgbmFtZTogXCJhdXRvQnJhY2tldHNcIixcbiAgICBcIidbJ1wiOiAoZikgPT4ge1xuICAgICAgY29uc3QgbyA9IGYuZ2V0Q3Vyc29yKCk7XG4gICAgICBmLnJlcGxhY2VSYW5nZShcIltdXCIsIG8sIG8sIFwiK2luc2VydFwiKSwgZi5kb2Muc2V0Q3Vyc29yKHsgbGluZTogby5saW5lLCBjaDogby5jaCArIDEgfSk7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIE5yKHIsIGYsIG8sIGkgPSBbXSkge1xuICBmLmlkIHx8IChmLmlkID0gMSksIG8gJiYgby0tO1xuICBmb3IgKGxldCB0ID0gMDsgdCA8IDM7IHQrKykge1xuICAgIGNvbnN0IHMgPSB7XG4gICAgICBbZi5sYWJlbF06IHIgKyBvICogMTAgKyB0LFxuICAgICAgW2YudmFsdWVdOiBcIlwiICsgZi5pZCsrXG4gICAgfTtcbiAgICBvICYmIE5yKHIsIGYsIG8sIHMuY2hpbGRyZW4gPSBbXSksIGkucHVzaChzKTtcbiAgfVxuICByZXR1cm4gaTtcbn1cbmZ1bmN0aW9uIE1hKHIsIGYpIHtcbiAgY29uc3QgbyA9IFtcbiAgICB7IGxhYmVsOiByKFwiZmV0Y2gub3B0aW9uc1R5cGUuc3RydWN0XCIpLCB2YWx1ZTogMiB9LFxuICAgIHsgbGFiZWw6IHIoXCJmZXRjaC5vcHRpb25zVHlwZS5mZXRjaFwiKSwgdmFsdWU6IDEgfVxuICBdLCBpID0gW1xuICAgIHtcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgcnVsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJGZXRjaENvbmZpZ1wiLFxuICAgICAgICAgIGZpZWxkOiBcImZvcm1DcmVhdGVFZmZlY3Q+ZmV0Y2hcIixcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgdG86IGZcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiAyLFxuICAgICAgcnVsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJUYWJsZU9wdGlvbnNcIixcbiAgICAgICAgICBmaWVsZDogXCJmb3JtQ3JlYXRlXCIgKyBTbyhmKS5yZXBsYWNlKFwiLlwiLCBcIj5cIiksXG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGtleVZhbHVlOiBcImxhYmVsXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIF07XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJyYWRpb1wiLFxuICAgIHRpdGxlOiByKFwicHJvcHMub3B0aW9uc1wiKSxcbiAgICBmaWVsZDogXCJfb3B0aW9uVHlwZVwiLFxuICAgIHZhbHVlOiAyLFxuICAgIG9wdGlvbnM6IG8sXG4gICAgcHJvcHM6IHtcbiAgICAgIHR5cGU6IFwiYnV0dG9uXCJcbiAgICB9LFxuICAgIGNvbnRyb2w6IGlcbiAgfTtcbn1cbmZ1bmN0aW9uIElhKHsgdDogciwgdG86IGYsIGxhYmVsOiBvLCB2YWx1ZTogaSB9KSB7XG4gIGNvbnN0IHQgPSBbXG4gICAgeyBsYWJlbDogcihcImZldGNoLm9wdGlvbnNUeXBlLnN0cnVjdFwiKSwgdmFsdWU6IDIgfSxcbiAgICB7IGxhYmVsOiByKFwiZmV0Y2gub3B0aW9uc1R5cGUuZmV0Y2hcIiksIHZhbHVlOiAxIH1cbiAgXSwgcyA9IFtcbiAgICB7XG4gICAgICB2YWx1ZTogMSxcbiAgICAgIHJ1bGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiRmV0Y2hDb25maWdcIixcbiAgICAgICAgICBmaWVsZDogXCJmb3JtQ3JlYXRlRWZmZWN0PmZldGNoXCIsXG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIHRvOiBmXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogMixcbiAgICAgIHJ1bGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiVHJlZU9wdGlvbnNcIixcbiAgICAgICAgICBmaWVsZDogXCJmb3JtQ3JlYXRlXCIgKyBTbyhmKS5yZXBsYWNlKFwiLlwiLCBcIj5cIiksXG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgICAgICAgbGFiZWw6IG8sXG4gICAgICAgICAgICAgIHZhbHVlOiBpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2V5VmFsdWU6IG9cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIF07XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJyYWRpb1wiLFxuICAgIHRpdGxlOiByKFwicHJvcHMub3B0aW9uc1wiKSxcbiAgICBmaWVsZDogXCJfb3B0aW9uVHlwZVwiLFxuICAgIHZhbHVlOiAyLFxuICAgIG9wdGlvbnM6IHQsXG4gICAgcHJvcHM6IHtcbiAgICAgIHR5cGU6IFwiYnV0dG9uXCJcbiAgICB9LFxuICAgIGNvbnRyb2w6IHNcbiAgfTtcbn1cbmZ1bmN0aW9uIFNvKHIpIHtcbiAgcmV0dXJuIHIucmVwbGFjZShyWzBdLCByWzBdLnRvTG9jYWxlVXBwZXJDYXNlKCkpO1xufVxuY29uc3QgSXIgPSBmdW5jdGlvbihyKSB7XG4gIGNvbnN0IGYgPSAvb2JqZWN0IChbYS16QS1aXSopLy5leGVjKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKSk7XG4gIHJldHVybiBmICYmIEtmW2ZbMV0udG9Mb3dlckNhc2UoKV0gPyBLZltmWzFdLnRvTG93ZXJDYXNlKCldKHIpIDogcjtcbn0sIEtmID0ge1xuICBvYmplY3Q6IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZiA9IFtdO1xuICAgIGZvciAodmFyIG8gaW4gcilcbiAgICAgICFzbyhyLCBvKSB8fCBmLnB1c2goXG4gICAgICAgIElyKG8pICsgXCI6IFwiICsgKHJbb10gIT0gbnVsbCA/IElyKHJbb10pIDogXCJudWxsXCIpXG4gICAgICApO1xuICAgIHJldHVybiBge1xuIGAgKyBmLmpvaW4oYCxcbiBgKSArIGBcbn1gO1xuICB9LFxuICBmdW5jdGlvbjogZnVuY3Rpb24ocikge1xuICAgIHIgPSBcIlwiICsgcjtcbiAgICB2YXIgZiA9IC9eICooW1xcd10rKSAqXFwoLy5leGVjKHIpO1xuICAgIHJldHVybiBmICYmIGZbMV0gIT09IFwiZnVuY3Rpb25cIiA/IFwiZnVuY3Rpb24gXCIgKyByIDogcjtcbiAgfSxcbiAgYXJyYXk6IGZ1bmN0aW9uKHIpIHtcbiAgICBmb3IgKHZhciBmID0gMCwgbyA9IFtdOyBmIDwgci5sZW5ndGg7IGYrKylcbiAgICAgIG9bZl0gPSByW2ZdICE9IG51bGwgPyBJcihyW2ZdKSA6IFwibnVsbFwiO1xuICAgIHJldHVybiBcIltcIiArIG8uam9pbihcIiwgXCIpICsgXCJdXCI7XG4gIH0sXG4gIHN0cmluZzogZnVuY3Rpb24ocikge1xuICAgIGZvciAodmFyIGYgPSByLnNwbGl0KFwiXCIpLCBvID0gMDsgbyA8IGYubGVuZ3RoOyBvKyspIHtcbiAgICAgIHZhciBpID0gZltvXTtcbiAgICAgIGkgPj0gXCIgXCIgPyBpID09PSBcIlxcXFxcIiA/IGZbb10gPSBcIlxcXFxcXFxcXCIgOiBpID09PSAnXCInICYmIChmW29dID0gJ1xcXFxcIicpIDogZltvXSA9IGkgPT09IGBcbmAgPyBcIlxcXFxuXCIgOiBpID09PSBcIlxcclwiID8gXCJcXFxcclwiIDogaSA9PT0gXCJcdFwiID8gXCJcXFxcdFwiIDogaSA9PT0gXCJcXGJcIiA/IFwiXFxcXGJcIiA6IGkgPT09IFwiXFxmXCIgPyBcIlxcXFxmXCIgOiAoaSA9IGkuY2hhckNvZGVBdCgpLCBcIlxcXFx1MDBcIiArIChpID4gMTUgPyAxIDogMCkgKyBpICUgMTYpO1xuICAgIH1cbiAgICByZXR1cm4gJ1wiJyArIGYuam9pbihcIlwiKSArICdcIic7XG4gIH1cbn0sIEJkID0gZnVuY3Rpb24ocikge1xuICBpZiAociAmJiB0eXBlb2YgciA9PSBcIm9iamVjdFwiKSB7XG4gICAgZm9yIChsZXQgZiBpbiByKVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCBmKSkge1xuICAgICAgICBsZXQgbyA9IHJbZl07XG4gICAgICAgIChBcnJheS5pc0FycmF5KG8pIHx8IGZ0Lk9iamVjdChvKSkgJiYgQmQobyksIGZ0LlN0cmluZyhvKSAmJiAocltmXSA9IERoKG8pKTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gcjtcbn07XG5mdW5jdGlvbiBJaChyLCBmLCBvKSB7XG4gIGYgPSAoZiB8fCBcIlwiKS5zcGxpdChcIi5cIik7XG4gIGxldCBpID0gMCwgdCA9IGYubGVuZ3RoO1xuICBmb3IgKDsgciAhPSBudWxsICYmIGkgPCB0OyApXG4gICAgciA9IHJbZltpKytdXTtcbiAgcmV0dXJuIGkgJiYgaSA9PT0gdCAmJiByICE9PSB2b2lkIDAgPyByIDogbztcbn1cbmNvbnN0IE5oID0gKHIpID0+IChmLCBvKSA9PiBPaChmLCBvLCBGZChyKSksIE9oID0gKHIsIGYsIG8pID0+IEloKG8sIHIsIFwiXCIpLnJlcGxhY2UoXG4gIC9cXHsoXFx3KylcXH0vZyxcbiAgKGksIHQpID0+IHtcbiAgICB2YXIgcztcbiAgICByZXR1cm4gYCR7KHMgPSBmID09IG51bGwgPyB2b2lkIDAgOiBmW3RdKSAhPSBudWxsID8gcyA6IGB7JHt0fX1gfWA7XG4gIH1cbiksIFBoID0gKHIpID0+IHtcbiAgY29uc3QgZiA9IFluKCgpID0+IEZkKHIpLm5hbWUpLCBvID0gWW4oKCkgPT4gU28oUmgoZi52YWx1ZSB8fCBcIlwiKSkpLCBpID0gbWgocikgPyByIDogcG8ocik7XG4gIHJldHVybiB7XG4gICAgbGFuZzogZixcbiAgICBuYW1lOiBvLFxuICAgIGxvY2FsZTogaSxcbiAgICB0OiBOaChyKVxuICB9O1xufSwgd3MgPSAocikgPT4gUGgoWW4oKCkgPT4gci52YWx1ZSB8fCBMZCkpLCBYdCA9IChyLCBmLCBvKSA9PiBmLm1hcCgoaSkgPT4gKGkubGFiZWwgPSByKChvIHx8IFwicHJvcHNcIikgKyBcIi5cIiArIGkudmFsdWUpIHx8IGkubGFiZWwsIGkpKSwgWmUgPSAociwgZiwgbykgPT4gby5tYXAoKGkpID0+IChpLmZpZWxkID09PSBcImZvcm1DcmVhdGUkcmVxdWlyZWRcIiA/IGkudGl0bGUgPSByKFwidmFsaWRhdGUucmVxdWlyZWRcIikgfHwgaS50aXRsZSA6IGkuZmllbGQgJiYgaS5maWVsZCAhPT0gXCJfb3B0aW9uVHlwZVwiICYmIChpLnRpdGxlID0gcihcImNvbS5cIiArIGYgKyBcIi5cIiArIGkuZmllbGQpIHx8IGkudGl0bGUpLCBpLnR5cGUgPT09IFwidGVtcGxhdGVcIiAmJiBmdC50cnVlQXJyYXkoaS5jaGlsZHJlbikgJiYgKGkuY2hpbGRyZW4gPSBaZShyLCBmLCBpLmNoaWxkcmVuKSksIGkpKSwgVHMgPSAocikgPT4ge1xuICBjb25zdCBmID0gW107XG4gIHJldHVybiByICYmIHIuZm9yRWFjaCgobykgPT4ge1xuICAgIGlmIChvLl9mY19kcmFnX3RhZykge1xuICAgICAgY29uc3QgaSA9IHtcbiAgICAgICAgaWQ6IG8uX19mY19fLmlkLFxuICAgICAgICBydWxlOiBvLFxuICAgICAgICBjaGlsZHJlbjogVHMoby5jaGlsZHJlbilcbiAgICAgIH07XG4gICAgICBpLmNoaWxkcmVuLmxlbmd0aCB8fCBkZWxldGUgaS5jaGlsZHJlbiwgZi5wdXNoKGkpO1xuICAgIH0gZWxzZVxuICAgICAgZi5wdXNoKC4uLlRzKG8uY2hpbGRyZW4pKTtcbiAgfSksIGY7XG59LCBYZiA9IChyKSA9PiB7XG4gIGNvbnN0IGYgPSAobykgPT4ge1xuICAgIGNvbnN0IGkgPSBbXTtcbiAgICByZXR1cm4gbyAmJiBvLmZvckVhY2goKHQpID0+IHtcbiAgICAgIHQuZmllbGQgPyAodC5jaGlsZHJlbiA9IGYodC5jaGlsZHJlbiB8fCBbXSksIHQuY2hpbGRyZW4ubGVuZ3RoIHx8IGRlbGV0ZSB0LmNoaWxkcmVuLCBpLnB1c2godCkpIDogaS5wdXNoKC4uLmYodC5jaGlsZHJlbiB8fCBbXSkpO1xuICAgIH0pLCBpO1xuICB9O1xuICByZXR1cm4gZihyKTtcbn0sIEpmID0gKHIpID0+IHtcbiAgY29uc3QgZiA9IChvKSA9PiB7XG4gICAgY29uc3QgaSA9IFtdO1xuICAgIHJldHVybiBvICYmIG8uZm9yRWFjaCgodCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0ID09IFwib2JqZWN0XCIpXG4gICAgICAgIGlmICh0Ll9mY19kcmFnX3RhZykge1xuICAgICAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgICAgICBfZmNfaWQ6IHQuX2ZjX2lkLFxuICAgICAgICAgICAgdHlwZTogdC50eXBlLFxuICAgICAgICAgICAgZmllbGQ6IHQuZmllbGQsXG4gICAgICAgICAgICB0aXRsZTogdC50aXRsZSxcbiAgICAgICAgICAgIG5hbWU6IHQubmFtZSxcbiAgICAgICAgICAgIHNsb3Q6IHQuc2xvdCxcbiAgICAgICAgICAgIHByb3BzOiB7IC4uLnQucHJvcHMgfHwge30gfSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBmKHQuY2hpbGRyZW4gfHwgW10pXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0LmNoaWxkcmVuICYmIHR5cGVvZiB0LmNoaWxkcmVuWzBdID09IFwic3RyaW5nXCIgJiYgKHMuY29udGVudCA9IHQuY2hpbGRyZW5bMF0pLCBzLmNoaWxkcmVuLmxlbmd0aCB8fCBkZWxldGUgcy5jaGlsZHJlbiwgaS5wdXNoKHMpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBpLnB1c2goLi4uZih0LmNoaWxkcmVuKSk7XG4gICAgfSksIGk7XG4gIH07XG4gIHJldHVybiBmKHIpO1xufTtcbmZ1bmN0aW9uIEhkKHIpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcIiRpbmplY3RcIixcbiAgICBjb2x1bW5zOiBbXG4gICAgICB7IGxhYmVsOiBcIiRpbmplY3QuYXBpXCIsIGluZm86IHIoXCJldmVudC5pbmplY3QuYXBpXCIpLCB0eXBlOiBcIkFwaVwiIH0sXG4gICAgICB7IGxhYmVsOiBcIiRpbmplY3QucnVsZVwiLCBpbmZvOiByKFwiZXZlbnQuaW5qZWN0LnJ1bGVcIiksIHR5cGU6IFwiUnVsZVtdXCIgfSxcbiAgICAgIHsgbGFiZWw6IFwiJGluamVjdC5zZWxmXCIsIGluZm86IHIoXCJldmVudC5pbmplY3Quc2VsZlwiKSwgdHlwZTogXCJSdWxlXCIgfSxcbiAgICAgIHsgbGFiZWw6IFwiJGluamVjdC5vcHRpb25cIiwgaW5mbzogcihcImV2ZW50LmluamVjdC5vcHRpb25cIiksIHR5cGU6IFwiT2JqZWN0XCIgfSxcbiAgICAgIHsgbGFiZWw6IFwiJGluamVjdC5hcmdzXCIsIGluZm86IHIoXCJldmVudC5pbmplY3QuYXJnc1wiKSwgdHlwZTogXCJBcnJheVwiIH1cbiAgICBdXG4gIH07XG59XG5mdW5jdGlvbiB4aShyKSB7XG4gIHJldHVybiBbXCJcIiwgbnVsbCwgdm9pZCAwXS5pbmRleE9mKHIpICE9PSAtMTtcbn1cbmZ1bmN0aW9uIEZoKHIsIGYpIHtcbiAgcmV0dXJuIGA8dGVtcGxhdGU+XG4gIDxmb3JtLWNyZWF0ZVxuICAgIHYtbW9kZWw9XCJmb3JtRGF0YVwiXG4gICAgdi1tb2RlbDphcGk9XCJmYXBpXCJcbiAgICA6cnVsZT1cInJ1bGVcIlxuICAgIDpvcHRpb249XCJvcHRpb25cIlxuICAgIEBzdWJtaXQ9XCJvblN1Ym1pdFwiXG4gID48L2Zvcm0tY3JlYXRlPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBmb3JtQ3JlYXRlIGZyb20gXCJAZm9ybS1jcmVhdGUvZWxlbWVudC11aVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICBmb3JtQ3JlYXRlOiBmb3JtQ3JlYXRlLiRmb3JtKClcbiAgfSxcbiAgZGF0YSAoKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gZm9ybUNyZWF0ZS5wYXJzZUpzb24oJyR7Zi5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIlxcXFxcXFxcXCIpLnJlcGxhY2VBbGwoXCInXCIsIFwiXFxcXFwiKX0nKTtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybURhdGE6IHt9LFxuICAgICAgZmFwaTogbnVsbCxcbiAgICAgIHJ1bGU6IGZvcm1DcmVhdGUucGFyc2VKc29uKCcke3IucmVwbGFjZUFsbChcIlxcXFxcIiwgXCJcXFxcXFxcXFwiKS5yZXBsYWNlQWxsKFwiJ1wiLCBcIlxcXFxcIil9JyksXG4gICAgICBvcHRpb246IG9wdGlvblxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIG9uU3VibWl0IChmb3JtRGF0YSkge1xuICAgICAgLy90b2RvIFxcdTYzRDBcXHU0RUE0XFx1ODg2OFxcdTUzNTVcbiAgICB9XG4gIH1cbn1cbjxcXC9zY3JpcHQ+YDtcbn1cbmZ1bmN0aW9uIExoKHIsIGYpIHtcbiAgY29uc3QgbyA9IHIuc3BsaXQoXCIuXCIpLCBpID0gZi5zcGxpdChcIi5cIiksIHQgPSBNYXRoLm1pbihvLmxlbmd0aCwgaS5sZW5ndGgpO1xuICBmb3IgKHZhciBzID0gMDsgcyA8IHQ7IHMrKykge1xuICAgIHZhciBkID0gcGFyc2VJbnQob1tzXSwgMTApIC0gcGFyc2VJbnQoaVtzXSwgMTApO1xuICAgIGlmIChkID4gMClcbiAgICAgIHJldHVybiAxO1xuICAgIGlmIChkIDwgMClcbiAgICAgIHJldHVybiAtMTtcbiAgfVxuICByZXR1cm4gby5sZW5ndGggPT09IGkubGVuZ3RoID8gMCA6IG8ubGVuZ3RoIDwgaS5sZW5ndGggPyAtMSA6IDE7XG59XG5mdW5jdGlvbiBaZih7IHQ6IHIgfSkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgIGZpZWxkOiBcIj5mb3JtTmFtZVwiLFxuICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICB0aXRsZTogcihcImZvcm0uZm9ybU5hbWVcIilcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgIGZpZWxkOiBcImxhYmVsUG9zaXRpb25cIixcbiAgICAgIHZhbHVlOiBcImxlZnRcIixcbiAgICAgIHRpdGxlOiByKFwiZm9ybS5sYWJlbFBvc2l0aW9uXCIpLFxuICAgICAgb3B0aW9uczogWHQociwgW1xuICAgICAgICB7IHZhbHVlOiBcImxlZnRcIiwgbGFiZWw6IFwibGVmdFwiIH0sXG4gICAgICAgIHsgdmFsdWU6IFwicmlnaHRcIiwgbGFiZWw6IFwicmlnaHRcIiB9LFxuICAgICAgICB7IHZhbHVlOiBcInRvcFwiLCBsYWJlbDogXCJ0b3BcIiB9XG4gICAgICBdKVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogXCJyYWRpb1wiLFxuICAgICAgZmllbGQ6IFwic2l6ZVwiLFxuICAgICAgdmFsdWU6IFwic21hbGxcIixcbiAgICAgIHRpdGxlOiByKFwiZm9ybS5zaXplXCIpLFxuICAgICAgb3B0aW9uczogWHQociwgW1xuICAgICAgICB7IHZhbHVlOiBcImxhcmdlXCIsIGxhYmVsOiBcImxhcmdlXCIgfSxcbiAgICAgICAgeyB2YWx1ZTogXCJkZWZhdWx0XCIsIGxhYmVsOiBcImRlZmF1bHRcIiB9LFxuICAgICAgICB7IHZhbHVlOiBcInNtYWxsXCIsIGxhYmVsOiBcInNtYWxsXCIgfVxuICAgICAgXSlcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgIGZpZWxkOiBcImxhYmVsU3VmZml4XCIsXG4gICAgICB2YWx1ZTogXCJcIixcbiAgICAgIHRpdGxlOiByKFwiZm9ybS5sYWJlbFN1ZmZpeFwiKSxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHdpZHRoOiBcIjE1MHB4XCJcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFwiU2l6ZUlucHV0XCIsXG4gICAgICBmaWVsZDogXCJsYWJlbFdpZHRoXCIsXG4gICAgICB2YWx1ZTogXCIxMjVweFwiLFxuICAgICAgdGl0bGU6IHIoXCJmb3JtLmxhYmVsV2lkdGhcIilcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJoaWRlUmVxdWlyZWRBc3Rlcmlza1wiLFxuICAgICAgdmFsdWU6ICExLFxuICAgICAgdGl0bGU6IHIoXCJmb3JtLmhpZGVSZXF1aXJlZEFzdGVyaXNrXCIpXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgZmllbGQ6IFwic2hvd01lc3NhZ2VcIixcbiAgICAgIHZhbHVlOiAhMCxcbiAgICAgIHRpdGxlOiByKFwiZm9ybS5zaG93TWVzc2FnZVwiKVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgIGZpZWxkOiBcImlubGluZU1lc3NhZ2VcIixcbiAgICAgIHZhbHVlOiAhMSxcbiAgICAgIHRpdGxlOiByKFwiZm9ybS5pbmxpbmVNZXNzYWdlXCIpXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgZmllbGQ6IFwiX3N1Ym1pdEJ0bj5zaG93XCIsXG4gICAgICB2YWx1ZTogITAsXG4gICAgICB0aXRsZTogcihcImZvcm0uc3VibWl0QnRuXCIpXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgZmllbGQ6IFwiX3Jlc2V0QnRuPnNob3dcIixcbiAgICAgIHZhbHVlOiAhMSxcbiAgICAgIHRpdGxlOiByKFwiZm9ybS5yZXNldEJ0blwiKVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogXCJGbkNvbmZpZ1wiLFxuICAgICAgZmllbGQ6IFwiPl9ldmVudFwiLFxuICAgICAgaW5mbzoge1xuICAgICAgICB0eXBlOiBcInRvb2x0aXBcIixcbiAgICAgICAgbmF0aXZlOiAhMCxcbiAgICAgICAgZWZmZWN0OiBcImxpZ2h0XCIsXG4gICAgICAgIGFsaWduOiBcImxlZnRcIixcbiAgICAgICAgY29udGVudDogcihcImZvcm0uZG9jdW1lbnRcIikgKyAnXFx1RkYxQTxhIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCJodHRwczovL2Zvcm0tY3JlYXRlLmNvbS92My9ndWlkZS9nbG9iYWwtZXZlbnRcIj5odHRwczovL2Zvcm0tY3JlYXRlLmNvbS92My9ndWlkZS9nbG9iYWwtZXZlbnQ8L2E+JyxcbiAgICAgICAgcmF3Q29udGVudDogITBcbiAgICAgIH0sXG4gICAgICB2YWx1ZToge30sXG4gICAgICBjb2w6IHsgc2hvdzogITAgfSxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGV2ZW50Q29uZmlnOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJvblN1Ym1pdFwiLFxuICAgICAgICAgICAgYXJnczogW1wiZm9ybURhdGFcIiwgXCJhcGlcIl1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwib25DcmVhdGVkXCIsXG4gICAgICAgICAgICBhcmdzOiBbXCJhcGlcIl1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwib25Nb3VudGVkXCIsXG4gICAgICAgICAgICBhcmdzOiBbXCJhcGlcIl1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwib25DaGFuZ2VcIixcbiAgICAgICAgICAgIGFyZ3M6IFtcImZpZWxkXCIsIFwidmFsdWVcIiwgXCJvcHRpb25zXCJdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImJlZm9yZUZldGNoXCIsXG4gICAgICAgICAgICBhcmdzOiBbXCJjb25maWdcIiwgXCJkYXRhXCJdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgdGl0bGU6IHIoXCJmb3JtLmV2ZW50XCIpXG4gICAgfVxuICBdO1xufVxuZnVuY3Rpb24gbG8oeyB0OiByIH0pIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0eXBlOiBcIkZpZWxkSW5wdXRcIixcbiAgICAgIGZpZWxkOiBcImZpZWxkXCIsXG4gICAgICB2YWx1ZTogXCJcIixcbiAgICAgIHRpdGxlOiByKFwiZm9ybS5maWVsZFwiKVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgZmllbGQ6IFwidGl0bGVcIixcbiAgICAgIHZhbHVlOiBcIlwiLFxuICAgICAgdGl0bGU6IHIoXCJmb3JtLnRpdGxlXCIpXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICBmaWVsZDogXCJpbmZvXCIsXG4gICAgICB2YWx1ZTogXCJcIixcbiAgICAgIHRpdGxlOiByKFwiZm9ybS5pbmZvXCIpXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBcIlNpemVJbnB1dFwiLFxuICAgICAgZmllbGQ6IFwiZm9ybUNyZWF0ZVdyYXA+bGFiZWxXaWR0aFwiLFxuICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICB0aXRsZTogcihcImZvcm0ubGFiZWxXaWR0aFwiKVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogXCJTdHJ1Y3RcIixcbiAgICAgIGZpZWxkOiBcIl9jb250cm9sXCIsXG4gICAgICB2YWx1ZTogW10sXG4gICAgICB0aXRsZTogcihcImZvcm0uY29udHJvbFwiKSxcbiAgICAgIGluZm86IHtcbiAgICAgICAgdHlwZTogXCJ0b29sdGlwXCIsXG4gICAgICAgIG5hdGl2ZTogITAsXG4gICAgICAgIGVmZmVjdDogXCJsaWdodFwiLFxuICAgICAgICBhbGlnbjogXCJsZWZ0XCIsXG4gICAgICAgIGNvbnRlbnQ6IHIoXCJmb3JtLmRvY3VtZW50XCIpICsgJ1xcdUZGMUE8YSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiaHR0cHM6Ly9mb3JtLWNyZWF0ZS5jb20vdjMvZ3VpZGUvY29udHJvbFwiPmh0dHBzOi8vZm9ybS1jcmVhdGUuY29tL3YzL2d1aWRlL2NvbnRyb2w8L2E+JyxcbiAgICAgICAgcmF3Q29udGVudDogITBcbiAgICAgIH0sXG4gICAgICBwcm9wczoge1xuICAgICAgICBkZWZhdWx0VmFsdWU6IFtdLFxuICAgICAgICB2YWxpZGF0ZShmKSB7XG4gICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZikgPyBmLmxlbmd0aCA/ICFmLnNvbWUoKHsgcnVsZTogbyB9KSA9PiAhQXJyYXkuaXNBcnJheShvKSkgOiAhMCA6ICExO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuZnVuY3Rpb24gcWYoeyB0OiByIH0pIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0eXBlOiBcIlJlcXVpcmVkXCIsXG4gICAgICBmaWVsZDogXCIkcmVxdWlyZWRcIixcbiAgICAgIHRpdGxlOiByKFwidmFsaWRhdGUucmVxdWlyZWRcIilcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFwidmFsaWRhdGVcIixcbiAgICAgIGZpZWxkOiBcInZhbGlkYXRlXCIsXG4gICAgICB0aXRsZTogcihcInZhbGlkYXRlLnJ1bGVcIiksXG4gICAgICB2YWx1ZTogW11cbiAgICB9XG4gIF07XG59XG5mdW5jdGlvbiBCaChyKSB7XG4gIHIgPSByIHx8IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGNvbnN0IGYgPSB7XG4gICAgJG9uKG8sIGkpIHtcbiAgICAgIGNvbnN0IHQgPSByLmdldChvKTtcbiAgICAgIHQgJiYgdC5wdXNoKGkpIHx8IHIuc2V0KG8sIFtpXSk7XG4gICAgfSxcbiAgICAkb25jZShvLCBpKSB7XG4gICAgICBpLl9vbmNlID0gITAsIGYuJG9uKG8sIGkpO1xuICAgIH0sXG4gICAgJG9mZihvLCBpKSB7XG4gICAgICBjb25zdCB0ID0gci5nZXQobyk7XG4gICAgICB0ICYmIHQuc3BsaWNlKHQuaW5kZXhPZihpKSA+Pj4gMCwgMSk7XG4gICAgfSxcbiAgICAkZW1pdChvLCAuLi5pKSB7XG4gICAgICAoci5nZXQobykgfHwgW10pLnNsaWNlKCkubWFwKCh0KSA9PiB7XG4gICAgICAgIHQuX29uY2UgJiYgKGYuJG9mZihvLCB0KSwgZGVsZXRlIHQuX29uY2UpLCB0KC4uLmkpO1xuICAgICAgfSksIChyLmdldChcIipcIikgfHwgW10pLnNsaWNlKCkubWFwKCh0KSA9PiB7XG4gICAgICAgIHQobywgaSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBmO1xufVxubGV0IEhoID0gMDtcbmZ1bmN0aW9uIF9lKCkge1xuICBjb25zdCByID0gMzcwICsgKytIaDtcbiAgcmV0dXJuIFwiRlwiICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDMsIDMpICsgTnVtYmVyKGAke0RhdGUubm93KCl9YCkudG9TdHJpbmcoMzYpICsgci50b1N0cmluZygzNikgKyBcImNcIjtcbn1cbmNvbnN0ICRoID0gXCJcXHU1MzU1XFx1OTAwOVxcdTY4NDZcIiwgUGwgPSBcInJhZGlvXCIsIGtoID0ge1xuICBtZW51OiBcIm1haW5cIixcbiAgaWNvbjogXCJpY29uLXJhZGlvXCIsXG4gIGxhYmVsOiAkaCxcbiAgbmFtZTogUGwsXG4gIGV2ZW50OiBbXCJjaGFuZ2VcIl0sXG4gIHZhbGlkYXRlOiBbXCJzdHJpbmdcIiwgXCJudW1iZXJcIl0sXG4gIHJ1bGUoeyB0OiByIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogUGwsXG4gICAgICBmaWVsZDogX2UoKSxcbiAgICAgIHRpdGxlOiByKFwiY29tLnJhZGlvLm5hbWVcIiksXG4gICAgICBpbmZvOiBcIlwiLFxuICAgICAgZWZmZWN0OiB7XG4gICAgICAgIGZldGNoOiBcIlwiXG4gICAgICB9LFxuICAgICAgJHJlcXVpcmVkOiAhMSxcbiAgICAgIHByb3BzOiB7fSxcbiAgICAgIG9wdGlvbnM6IE5yKHIoXCJwcm9wcy5vcHRpb25cIiksIHsgbGFiZWw6IFwibGFiZWxcIiwgdmFsdWU6IFwidmFsdWVcIiB9LCAxKVxuICAgIH07XG4gIH0sXG4gIHByb3BzKHIsIHsgdDogZiB9KSB7XG4gICAgcmV0dXJuIFplKGYsIFBsICsgXCIucHJvcHNcIiwgW1xuICAgICAgTWEoZiwgXCJvcHRpb25zXCIpLFxuICAgICAgeyB0eXBlOiBcInN3aXRjaFwiLCBmaWVsZDogXCJkaXNhYmxlZFwiIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcInR5cGVcIixcbiAgICAgICAgcHJvcHM6IHsgYWN0aXZlVmFsdWU6IFwiYnV0dG9uXCIsIGluYWN0aXZlVmFsdWU6IFwiZGVmYXVsdFwiIH1cbiAgICAgIH0sXG4gICAgICB7IHR5cGU6IFwiQ29sb3JJbnB1dFwiLCBmaWVsZDogXCJ0ZXh0Q29sb3JcIiB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcIkNvbG9ySW5wdXRcIixcbiAgICAgICAgZmllbGQ6IFwiZmlsbFwiXG4gICAgICB9XG4gICAgXSk7XG4gIH1cbn0sIGpoID0gXCJcXHU1OTFBXFx1OTAwOVxcdTY4NDZcIiwgRmwgPSBcImNoZWNrYm94XCIsIFVoID0ge1xuICBtZW51OiBcIm1haW5cIixcbiAgaWNvbjogXCJpY29uLWNoZWNrYm94XCIsXG4gIGxhYmVsOiBqaCxcbiAgbmFtZTogRmwsXG4gIGV2ZW50OiBbXCJjaGFuZ2VcIl0sXG4gIHZhbGlkYXRlOiBbXCJhcnJheVwiXSxcbiAgcnVsZSh7IHQ6IHIgfSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBGbCxcbiAgICAgIGZpZWxkOiBfZSgpLFxuICAgICAgdGl0bGU6IHIoXCJjb20uY2hlY2tib3gubmFtZVwiKSxcbiAgICAgIGluZm86IFwiXCIsXG4gICAgICBlZmZlY3Q6IHtcbiAgICAgICAgZmV0Y2g6IFwiXCJcbiAgICAgIH0sXG4gICAgICAkcmVxdWlyZWQ6ICExLFxuICAgICAgcHJvcHM6IHt9LFxuICAgICAgb3B0aW9uczogTnIocihcInByb3BzLm9wdGlvblwiKSwgeyBsYWJlbDogXCJsYWJlbFwiLCB2YWx1ZTogXCJ2YWx1ZVwiIH0sIDEpXG4gICAgfTtcbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgRmwgKyBcIi5wcm9wc1wiLCBbXG4gICAgICBNYShmLCBcIm9wdGlvbnNcIiksXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcImRpc2FibGVkXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcInR5cGVcIixcbiAgICAgICAgcHJvcHM6IHsgYWN0aXZlVmFsdWU6IFwiYnV0dG9uXCIsIGluYWN0aXZlVmFsdWU6IFwiZGVmYXVsdFwiIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZpZWxkOiBcIm1pblwiLFxuICAgICAgICB0eXBlOiBcImlucHV0TnVtYmVyXCIsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgbWluOiAwXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZpZWxkOiBcIm1heFwiLFxuICAgICAgICB0eXBlOiBcImlucHV0TnVtYmVyXCIsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgbWluOiAwXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ29sb3JJbnB1dFwiLFxuICAgICAgICBmaWVsZDogXCJ0ZXh0Q29sb3JcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDb2xvcklucHV0XCIsXG4gICAgICAgIGZpZWxkOiBcImZpbGxcIlxuICAgICAgfVxuICAgIF0pO1xuICB9XG59LCB6aCA9IFwiXFx1OEY5M1xcdTUxNjVcXHU2ODQ2XCIsIExsID0gXCJpbnB1dFwiLCBWaCA9IHtcbiAgbWVudTogXCJtYWluXCIsXG4gIGljb246IFwiaWNvbi1pbnB1dFwiLFxuICBsYWJlbDogemgsXG4gIG5hbWU6IExsLFxuICBldmVudDogW1wiYmx1clwiLCBcImZvY3VzXCIsIFwiY2hhbmdlXCIsIFwiaW5wdXRcIiwgXCJjbGVhclwiXSxcbiAgdmFsaWRhdGU6IFtcInN0cmluZ1wiLCBcInVybFwiLCBcImVtYWlsXCJdLFxuICBydWxlKHsgdDogciB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IExsLFxuICAgICAgZmllbGQ6IF9lKCksXG4gICAgICB0aXRsZTogcihcImNvbS5pbnB1dC5uYW1lXCIpLFxuICAgICAgaW5mbzogXCJcIixcbiAgICAgICRyZXF1aXJlZDogITEsXG4gICAgICBwcm9wczoge31cbiAgICB9O1xuICB9LFxuICBwcm9wcyhyLCB7IHQ6IGYgfSkge1xuICAgIHJldHVybiBaZShmLCBMbCArIFwiLnByb3BzXCIsIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgICAgZmllbGQ6IFwiZGlzYWJsZWRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgICAgZmllbGQ6IFwicmVhZG9ubHlcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJpbnB1dE51bWJlclwiLFxuICAgICAgICBmaWVsZDogXCJtYXhsZW5ndGhcIixcbiAgICAgICAgcHJvcHM6IHsgbWluOiAwIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiaW5wdXROdW1iZXJcIixcbiAgICAgICAgZmllbGQ6IFwibWlubGVuZ3RoXCIsXG4gICAgICAgIHByb3BzOiB7IG1pbjogMCB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICAgIGZpZWxkOiBcInBsYWNlaG9sZGVyXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcImNsZWFyYWJsZVwiXG4gICAgICB9XG4gICAgXSk7XG4gIH1cbn0sIFdoID0gXCJcXHU1OTFBXFx1ODg0Q1xcdThGOTNcXHU1MTY1XFx1Njg0NlwiLCBfZiA9IFwidGV4dGFyZWFcIiwgR2ggPSB7XG4gIG1lbnU6IFwibWFpblwiLFxuICBpY29uOiBcImljb24tdGV4dGFyZWFcIixcbiAgbGFiZWw6IFdoLFxuICBuYW1lOiBfZixcbiAgZXZlbnQ6IFtcImJsdXJcIiwgXCJmb2N1c1wiLCBcImNoYW5nZVwiLCBcImlucHV0XCJdLFxuICB2YWxpZGF0ZTogW1wic3RyaW5nXCJdLFxuICBydWxlKHsgdDogciB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgIGZpZWxkOiBfZSgpLFxuICAgICAgdGl0bGU6IHIoXCJjb20udGV4dGFyZWEubmFtZVwiKSxcbiAgICAgIGluZm86IFwiXCIsXG4gICAgICAkcmVxdWlyZWQ6ICExLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0YXJlYVwiXG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgX2YgKyBcIi5wcm9wc1wiLCBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcImRpc2FibGVkXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcInJlYWRvbmx5XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiaW5wdXROdW1iZXJcIixcbiAgICAgICAgZmllbGQ6IFwibWF4bGVuZ3RoXCIsXG4gICAgICAgIHByb3BzOiB7IG1pbjogMCB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImlucHV0TnVtYmVyXCIsXG4gICAgICAgIGZpZWxkOiBcIm1pbmxlbmd0aFwiLFxuICAgICAgICBwcm9wczogeyBtaW46IDAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgICAgZmllbGQ6IFwic2hvd1dvcmRMaW1pdFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICAgIGZpZWxkOiBcInBsYWNlaG9sZGVyXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiaW5wdXROdW1iZXJcIixcbiAgICAgICAgZmllbGQ6IFwicm93c1wiLFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG1pbjogMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJhdXRvc2l6ZVwiXG4gICAgICB9XG4gICAgXSk7XG4gIH1cbn0sIFFoID0gXCJcXHU1QkM2XFx1NzgwMVxcdThGOTNcXHU1MTY1XFx1Njg0NlwiLCBlZCA9IFwicGFzc3dvcmRcIiwgWWggPSB7XG4gIG1lbnU6IFwibWFpblwiLFxuICBpY29uOiBcImljb24tcGFzc3dvcmRcIixcbiAgbGFiZWw6IFFoLFxuICBuYW1lOiBlZCxcbiAgZXZlbnQ6IFtcImJsdXJcIiwgXCJmb2N1c1wiLCBcImNoYW5nZVwiLCBcImlucHV0XCIsIFwiY2xlYXJcIl0sXG4gIHZhbGlkYXRlOiBbXCJzdHJpbmdcIl0sXG4gIHJ1bGUoeyB0OiByIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgZmllbGQ6IF9lKCksXG4gICAgICB0aXRsZTogcihcImNvbS5wYXNzd29yZC5uYW1lXCIpLFxuICAgICAgaW5mbzogXCJcIixcbiAgICAgICRyZXF1aXJlZDogITEsXG4gICAgICBwcm9wczoge1xuICAgICAgICB0eXBlOiBcInBhc3N3b3JkXCJcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBwcm9wcyhyLCB7IHQ6IGYgfSkge1xuICAgIHJldHVybiBaZShmLCBlZCArIFwiLnByb3BzXCIsIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgICAgZmllbGQ6IFwiZGlzYWJsZWRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgICAgZmllbGQ6IFwicmVhZG9ubHlcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJpbnB1dE51bWJlclwiLFxuICAgICAgICBmaWVsZDogXCJtYXhsZW5ndGhcIixcbiAgICAgICAgcHJvcHM6IHsgbWluOiAwIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiaW5wdXROdW1iZXJcIixcbiAgICAgICAgZmllbGQ6IFwibWlubGVuZ3RoXCIsXG4gICAgICAgIHByb3BzOiB7IG1pbjogMCB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICAgIGZpZWxkOiBcInBsYWNlaG9sZGVyXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcImNsZWFyYWJsZVwiXG4gICAgICB9XG4gICAgXSk7XG4gIH1cbn0sIEtoID0gXCJcXHU4QkExXFx1NjU3MFxcdTU2NjhcIiwgQmwgPSBcImlucHV0TnVtYmVyXCIsIFhoID0ge1xuICBtZW51OiBcIm1haW5cIixcbiAgaWNvbjogXCJpY29uLW51bWJlclwiLFxuICBsYWJlbDogS2gsXG4gIG5hbWU6IEJsLFxuICBldmVudDogW1wiYmx1clwiLCBcImZvY3VzXCIsIFwiY2hhbmdlXCJdLFxuICB2YWxpZGF0ZTogW1wibnVtYmVyXCIsIFwiaW50ZWdlclwiLCBcImZsb2F0XCJdLFxuICBydWxlKHsgdDogciB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IEJsLFxuICAgICAgZmllbGQ6IF9lKCksXG4gICAgICB0aXRsZTogcihcImNvbS5pbnB1dE51bWJlci5uYW1lXCIpLFxuICAgICAgaW5mbzogXCJcIixcbiAgICAgICRyZXF1aXJlZDogITEsXG4gICAgICBwcm9wczoge31cbiAgICB9O1xuICB9LFxuICBwcm9wcyhyLCB7IHQ6IGYgfSkge1xuICAgIHJldHVybiBaZShmLCBCbCArIFwiLnByb3BzXCIsIFt7IHR5cGU6IFwic3dpdGNoXCIsIGZpZWxkOiBcImRpc2FibGVkXCIgfSwge1xuICAgICAgdHlwZTogXCJpbnB1dE51bWJlclwiLFxuICAgICAgZmllbGQ6IFwibWluXCJcbiAgICB9LCB7XG4gICAgICB0eXBlOiBcImlucHV0TnVtYmVyXCIsXG4gICAgICBmaWVsZDogXCJtYXhcIlxuICAgIH0sIHsgdHlwZTogXCJpbnB1dE51bWJlclwiLCBmaWVsZDogXCJzdGVwXCIsIHByb3BzOiB7IG1pbjogMCB9IH0sIHtcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJzdGVwU3RyaWN0bHlcIlxuICAgIH0sIHtcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJjb250cm9sc1wiLFxuICAgICAgdmFsdWU6ICEwXG4gICAgfSwge1xuICAgICAgdHlwZTogXCJzZWxlY3RcIixcbiAgICAgIGZpZWxkOiBcImNvbnRyb2xzUG9zaXRpb25cIixcbiAgICAgIG9wdGlvbnM6IFh0KGYsIFt7IGxhYmVsOiBcImRlZmF1bHRcIiwgdmFsdWU6IFwiXCIgfSwgeyBsYWJlbDogXCJyaWdodFwiLCB2YWx1ZTogXCJyaWdodFwiIH1dKVxuICAgIH0sIHsgdHlwZTogXCJpbnB1dFwiLCBmaWVsZDogXCJwbGFjZWhvbGRlclwiIH1dKTtcbiAgfVxufSwgSmggPSBcIlxcdTkwMDlcXHU2MkU5XFx1NTY2OFwiLCBIbCA9IFwic2VsZWN0XCIsIFpoID0ge1xuICBtZW51OiBcIm1haW5cIixcbiAgaWNvbjogXCJpY29uLXNlbGVjdFwiLFxuICBsYWJlbDogSmgsXG4gIG5hbWU6IEhsLFxuICBldmVudDogW1wiY2hhbmdlXCIsIFwidmlzaWJsZUNoYW5nZVwiLCBcInJlbW92ZVRhZ1wiLCBcImNsZWFyXCIsIFwiYmx1clwiLCBcImZvY3VzXCJdLFxuICB2YWxpZGF0ZTogW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiYXJyYXlcIl0sXG4gIHJ1bGUoeyB0OiByIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogSGwsXG4gICAgICBmaWVsZDogX2UoKSxcbiAgICAgIHRpdGxlOiByKFwiY29tLnNlbGVjdC5uYW1lXCIpLFxuICAgICAgaW5mbzogXCJcIixcbiAgICAgIGVmZmVjdDoge1xuICAgICAgICBmZXRjaDogXCJcIlxuICAgICAgfSxcbiAgICAgICRyZXF1aXJlZDogITEsXG4gICAgICBwcm9wczoge30sXG4gICAgICBvcHRpb25zOiBOcihyKFwicHJvcHMub3B0aW9uXCIpLCB7IGxhYmVsOiBcImxhYmVsXCIsIHZhbHVlOiBcInZhbHVlXCIgfSwgMSlcbiAgICB9O1xuICB9LFxuICB3YXRjaDoge1xuICAgIG11bHRpcGxlKHsgcnVsZTogciB9KSB7XG4gICAgICByLmtleSA9IF9lKCk7XG4gICAgfVxuICB9LFxuICBwcm9wcyhyLCB7IHQ6IGYgfSkge1xuICAgIHJldHVybiBaZShmLCBIbCArIFwiLnByb3BzXCIsIFtcbiAgICAgIE1hKGYsIFwib3B0aW9uc1wiKSxcbiAgICAgIHsgdHlwZTogXCJzd2l0Y2hcIiwgZmllbGQ6IFwibXVsdGlwbGVcIiB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJkaXNhYmxlZFwiXG4gICAgICB9LFxuICAgICAgeyB0eXBlOiBcInN3aXRjaFwiLCBmaWVsZDogXCJjbGVhcmFibGVcIiB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJjb2xsYXBzZVRhZ3NcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJpbnB1dE51bWJlclwiLFxuICAgICAgICBmaWVsZDogXCJtdWx0aXBsZUxpbWl0XCIsXG4gICAgICAgIHByb3BzOiB7IG1pbjogMCB9XG4gICAgICB9LFxuICAgICAgeyB0eXBlOiBcImlucHV0XCIsIGZpZWxkOiBcInBsYWNlaG9sZGVyXCIgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgICAgZmllbGQ6IFwiZmlsdGVyYWJsZVwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJyZW1vdGVcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJGbkVkaXRvclwiLFxuICAgICAgICBmaWVsZDogXCJyZW1vdGVNZXRob2RcIixcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBib2R5OiAhMCxcbiAgICAgICAgICBidXR0b246ICEwLFxuICAgICAgICAgIGZueDogITAsXG4gICAgICAgICAgbmFtZTogXCJyZW1vdGVNZXRob2RcIixcbiAgICAgICAgICBhcmdzOiBbSGQoZildXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IHR5cGU6IFwic3dpdGNoXCIsIGZpZWxkOiBcImFsbG93Q3JlYXRlXCIgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgICBmaWVsZDogXCJub01hdGNoVGV4dFwiXG4gICAgICB9LFxuICAgICAgeyB0eXBlOiBcImlucHV0XCIsIGZpZWxkOiBcIm5vRGF0YVRleHRcIiB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJyZXNlcnZlS2V5d29yZFwiXG4gICAgICB9LFxuICAgICAgeyB0eXBlOiBcInN3aXRjaFwiLCBmaWVsZDogXCJkZWZhdWx0Rmlyc3RPcHRpb25cIiB9XG4gICAgXSk7XG4gIH1cbn0sIHFoID0gXCJcXHU1RjAwXFx1NTE3M1wiLCAkbCA9IFwic3dpdGNoXCIsIF9oID0ge1xuICBtZW51OiBcIm1haW5cIixcbiAgaWNvbjogXCJpY29uLXN3aXRjaFwiLFxuICBsYWJlbDogcWgsXG4gIG5hbWU6ICRsLFxuICBldmVudDogW1wiY2hhbmdlXCJdLFxuICBydWxlKHsgdDogciB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICRsLFxuICAgICAgZmllbGQ6IF9lKCksXG4gICAgICB0aXRsZTogcihcImNvbS5zd2l0Y2gubmFtZVwiKSxcbiAgICAgIGluZm86IFwiXCIsXG4gICAgICAkcmVxdWlyZWQ6ICExLFxuICAgICAgcHJvcHM6IHt9XG4gICAgfTtcbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgJGwgKyBcIi5wcm9wc1wiLCBbe1xuICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgIGZpZWxkOiBcImRpc2FibGVkXCJcbiAgICB9LCB7XG4gICAgICB0eXBlOiBcImlucHV0TnVtYmVyXCIsXG4gICAgICBmaWVsZDogXCJ3aWR0aFwiLFxuICAgICAgcHJvcHM6IHsgbWluOiAwIH1cbiAgICB9LCB7IHR5cGU6IFwiaW5wdXRcIiwgZmllbGQ6IFwiYWN0aXZlVGV4dFwiIH0sIHtcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgIGZpZWxkOiBcImluYWN0aXZlVGV4dFwiXG4gICAgfSwgeyB0eXBlOiBcImlucHV0XCIsIGZpZWxkOiBcImFjdGl2ZVZhbHVlXCIgfSwge1xuICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgZmllbGQ6IFwiaW5hY3RpdmVWYWx1ZVwiXG4gICAgfSwgeyB0eXBlOiBcIkNvbG9ySW5wdXRcIiwgZmllbGQ6IFwiYWN0aXZlQ29sb3JcIiB9LCB7XG4gICAgICB0eXBlOiBcIkNvbG9ySW5wdXRcIixcbiAgICAgIGZpZWxkOiBcImluYWN0aXZlQ29sb3JcIlxuICAgIH1dKTtcbiAgfVxufSwgZXYgPSBcIlxcdTZFRDFcXHU1NzU3XCIsIGtsID0gXCJzbGlkZXJcIiwgdHYgPSB7XG4gIG1lbnU6IFwibWFpblwiLFxuICBpY29uOiBcImljb24tc2xpZGVyXCIsXG4gIGxhYmVsOiBldixcbiAgbmFtZToga2wsXG4gIGV2ZW50OiBbXCJjaGFuZ2VcIiwgXCJpbnB1dFwiXSxcbiAgdmFsaWRhdGU6IFtcIm51bWJlclwiLCBcImFycmF5XCJdLFxuICBydWxlKHsgdDogciB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IGtsLFxuICAgICAgZmllbGQ6IF9lKCksXG4gICAgICB0aXRsZTogcihcImNvbS5zbGlkZXIubmFtZVwiKSxcbiAgICAgIGluZm86IFwiXCIsXG4gICAgICAkcmVxdWlyZWQ6ICExLFxuICAgICAgcHJvcHM6IHt9XG4gICAgfTtcbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwga2wgKyBcIi5wcm9wc1wiLCBbeyB0eXBlOiBcInN3aXRjaFwiLCBmaWVsZDogXCJkaXNhYmxlZFwiIH0sIHtcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJyYW5nZVwiXG4gICAgfSwge1xuICAgICAgdHlwZTogXCJpbnB1dE51bWJlclwiLFxuICAgICAgZmllbGQ6IFwibWluXCIsXG4gICAgICBwcm9wczogeyBtaW46IDAgfVxuICAgIH0sIHtcbiAgICAgIHR5cGU6IFwiaW5wdXROdW1iZXJcIixcbiAgICAgIGZpZWxkOiBcIm1heFwiLFxuICAgICAgcHJvcHM6IHsgbWluOiAwIH1cbiAgICB9LCB7XG4gICAgICB0eXBlOiBcImlucHV0TnVtYmVyXCIsXG4gICAgICBmaWVsZDogXCJzdGVwXCIsXG4gICAgICBwcm9wczogeyBtaW46IDAgfVxuICAgIH0sIHsgdHlwZTogXCJzd2l0Y2hcIiwgZmllbGQ6IFwic2hvd0lucHV0XCIgfSwge1xuICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgIGZpZWxkOiBcInNob3dJbnB1dENvbnRyb2xzXCIsXG4gICAgICB2YWx1ZTogITBcbiAgICB9LCB7IHR5cGU6IFwic3dpdGNoXCIsIGZpZWxkOiBcInNob3dTdG9wc1wiIH0sIHtcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJ2ZXJ0aWNhbFwiXG4gICAgfSwge1xuICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgZmllbGQ6IFwiaGVpZ2h0XCJcbiAgICB9XSk7XG4gIH1cbn0sIG52ID0gXCJcXHU2NUY2XFx1OTVGNFwiLCBqbCA9IFwidGltZVBpY2tlclwiLCBydiA9IHtcbiAgbWVudTogXCJtYWluXCIsXG4gIGljb246IFwiaWNvbi10aW1lXCIsXG4gIGxhYmVsOiBudixcbiAgbmFtZTogamwsXG4gIGV2ZW50OiBbXCJjaGFuZ2VcIiwgXCJibHVyXCIsIFwiZm9jdXNcIiwgXCJ2aXNpYmxlQ2hhbmdlXCJdLFxuICBydWxlKHsgdDogciB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IGpsLFxuICAgICAgZmllbGQ6IF9lKCksXG4gICAgICB0aXRsZTogcihcImNvbS50aW1lUGlja2VyLm5hbWVcIiksXG4gICAgICBpbmZvOiBcIlwiLFxuICAgICAgJHJlcXVpcmVkOiAhMSxcbiAgICAgIHByb3BzOiB7fVxuICAgIH07XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgaXNSYW5nZSh7IHJ1bGU6IHIgfSkge1xuICAgICAgci5rZXkgPSBfZSgpO1xuICAgIH1cbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgamwgKyBcIi5wcm9wc1wiLCBbeyB0eXBlOiBcInN3aXRjaFwiLCBmaWVsZDogXCJyZWFkb25seVwiIH0sIHtcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJkaXNhYmxlZFwiXG4gICAgfSwge1xuICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgIGZpZWxkOiBcImlzUmFuZ2VcIlxuICAgIH0sIHtcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJjbGVhcmFibGVcIixcbiAgICAgIHZhbHVlOiAhMFxuICAgIH0sIHtcbiAgICAgIHR5cGU6IFwiU3RydWN0XCIsXG4gICAgICBmaWVsZDogXCJwaWNrZXJPcHRpb25zXCIsXG4gICAgICBwcm9wczogeyBkZWZhdWx0VmFsdWU6IHt9IH1cbiAgICB9LCB7IHR5cGU6IFwic3dpdGNoXCIsIGZpZWxkOiBcImVkaXRhYmxlXCIsIHZhbHVlOiAhMCB9LCB7XG4gICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICBmaWVsZDogXCJwbGFjZWhvbGRlclwiXG4gICAgfSwge1xuICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgZmllbGQ6IFwic3RhcnRQbGFjZWhvbGRlclwiXG4gICAgfSwgeyB0eXBlOiBcImlucHV0XCIsIGZpZWxkOiBcImVuZFBsYWNlaG9sZGVyXCIgfSwge1xuICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgIGZpZWxkOiBcImFycm93Q29udHJvbFwiXG4gICAgfSwge1xuICAgICAgdHlwZTogXCJzZWxlY3RcIixcbiAgICAgIGZpZWxkOiBcImFsaWduXCIsXG4gICAgICBvcHRpb25zOiBYdChmLCBbeyBsYWJlbDogXCJsZWZ0XCIsIHZhbHVlOiBcImxlZnRcIiB9LCB7IGxhYmVsOiBcImNlbnRlclwiLCB2YWx1ZTogXCJjZW50ZXJcIiB9LCB7XG4gICAgICAgIGxhYmVsOiBcInJpZ2h0XCIsXG4gICAgICAgIHZhbHVlOiBcInJpZ2h0XCJcbiAgICAgIH1dKVxuICAgIH1dKTtcbiAgfVxufSwgaXYgPSBcIlxcdTY1RjZcXHU5NUY0XFx1NTMzQVxcdTk1RjRcIiwgb3YgPSBcInRpbWVSYW5nZVwiLCBhdiA9IHtcbiAgbWVudTogXCJtYWluXCIsXG4gIGljb246IFwiaWNvbi10aW1lXCIsXG4gIGxhYmVsOiBpdixcbiAgbmFtZTogb3YsXG4gIGV2ZW50OiBbXCJjaGFuZ2VcIiwgXCJibHVyXCIsIFwiZm9jdXNcIiwgXCJ2aXNpYmxlQ2hhbmdlXCJdLFxuICBydWxlKHsgdDogciB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwidGltZVBpY2tlclwiLFxuICAgICAgZmllbGQ6IF9lKCksXG4gICAgICB0aXRsZTogcihcImNvbS50aW1lUmFuZ2UubmFtZVwiKSxcbiAgICAgIGluZm86IFwiXCIsXG4gICAgICAkcmVxdWlyZWQ6ICExLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgaXNSYW5nZTogITBcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBwcm9wcyhyLCB7IHQ6IGYgfSkge1xuICAgIHJldHVybiBaZShmLCBcInRpbWVQaWNrZXIucHJvcHNcIiwgW3sgdHlwZTogXCJzd2l0Y2hcIiwgZmllbGQ6IFwicmVhZG9ubHlcIiB9LCB7XG4gICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgZmllbGQ6IFwiZGlzYWJsZWRcIlxuICAgIH0sIHtcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJjbGVhcmFibGVcIixcbiAgICAgIHZhbHVlOiAhMFxuICAgIH0sIHtcbiAgICAgIHR5cGU6IFwiU3RydWN0XCIsXG4gICAgICBmaWVsZDogXCJwaWNrZXJPcHRpb25zXCIsXG4gICAgICBwcm9wczogeyBkZWZhdWx0VmFsdWU6IHt9IH1cbiAgICB9LCB7IHR5cGU6IFwic3dpdGNoXCIsIGZpZWxkOiBcImVkaXRhYmxlXCIsIHZhbHVlOiAhMCB9LCB7XG4gICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICBmaWVsZDogXCJzdGFydFBsYWNlaG9sZGVyXCJcbiAgICB9LCB7IHR5cGU6IFwiaW5wdXRcIiwgZmllbGQ6IFwiZW5kUGxhY2Vob2xkZXJcIiB9LCB7XG4gICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgZmllbGQ6IFwiYXJyb3dDb250cm9sXCJcbiAgICB9LCB7XG4gICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgZmllbGQ6IFwiYWxpZ25cIixcbiAgICAgIG9wdGlvbnM6IFh0KGYsIFt7IGxhYmVsOiBcImxlZnRcIiwgdmFsdWU6IFwibGVmdFwiIH0sIHsgbGFiZWw6IFwiY2VudGVyXCIsIHZhbHVlOiBcImNlbnRlclwiIH0sIHtcbiAgICAgICAgbGFiZWw6IFwicmlnaHRcIixcbiAgICAgICAgdmFsdWU6IFwicmlnaHRcIlxuICAgICAgfV0pXG4gICAgfV0pO1xuICB9XG59LCBsdiA9IFwiXFx1NjVFNVxcdTY3MUZcIiwgVWwgPSBcImRhdGVQaWNrZXJcIiwgc3YgPSB7XG4gIG1lbnU6IFwibWFpblwiLFxuICBpY29uOiBcImljb24tZGF0ZVwiLFxuICBsYWJlbDogbHYsXG4gIG5hbWU6IFVsLFxuICBldmVudDogW1wiY2hhbmdlXCIsIFwiYmx1clwiLCBcImZvY3VzXCIsIFwiY2FsZW5kYXJDaGFuZ2VcIiwgXCJwYW5lbENoYW5nZVwiLCBcInZpc2libGVDaGFuZ2VcIl0sXG4gIHJ1bGUoeyB0OiByIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogVWwsXG4gICAgICBmaWVsZDogX2UoKSxcbiAgICAgIHRpdGxlOiByKFwiY29tLmRhdGVQaWNrZXIubmFtZVwiKSxcbiAgICAgIGluZm86IFwiXCIsXG4gICAgICAkcmVxdWlyZWQ6ICExLFxuICAgICAgcHJvcHM6IHt9XG4gICAgfTtcbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgVWwgKyBcIi5wcm9wc1wiLCBbeyB0eXBlOiBcInN3aXRjaFwiLCBmaWVsZDogXCJyZWFkb25seVwiIH0sIHtcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJkaXNhYmxlZFwiXG4gICAgfSwge1xuICAgICAgdHlwZTogXCJzZWxlY3RcIixcbiAgICAgIGZpZWxkOiBcInR5cGVcIixcbiAgICAgIG9wdGlvbnM6IFh0KGYsIFt7IGxhYmVsOiBcInllYXJcIiwgdmFsdWU6IFwieWVhclwiIH0sIHsgbGFiZWw6IFwibW9udGhcIiwgdmFsdWU6IFwibW9udGhcIiB9LCB7XG4gICAgICAgIGxhYmVsOiBcImRhdGVcIixcbiAgICAgICAgdmFsdWU6IFwiZGF0ZVwiXG4gICAgICB9LCB7IGxhYmVsOiBcImRhdGVzXCIsIHZhbHVlOiBcImRhdGVzXCIgfSwgeyBsYWJlbDogXCJ3ZWVrXCIsIHZhbHVlOiBcIndlZWtcIiB9LCB7XG4gICAgICAgIGxhYmVsOiBcImRhdGV0aW1lXCIsXG4gICAgICAgIHZhbHVlOiBcImRhdGV0aW1lXCJcbiAgICAgIH0sIHsgbGFiZWw6IFwiZGF0ZXRpbWVyYW5nZVwiLCB2YWx1ZTogXCJkYXRldGltZXJhbmdlXCIgfSwge1xuICAgICAgICBsYWJlbDogXCJkYXRlcmFuZ2VcIixcbiAgICAgICAgdmFsdWU6IFwiZGF0ZXJhbmdlXCJcbiAgICAgIH0sIHsgbGFiZWw6IFwibW9udGhyYW5nZVwiLCB2YWx1ZTogXCJtb250aHJhbmdlXCIgfV0pXG4gICAgfSwge1xuICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgIGZpZWxkOiBcImNsZWFyYWJsZVwiLFxuICAgICAgdmFsdWU6ICEwXG4gICAgfSwge1xuICAgICAgdHlwZTogXCJTdHJ1Y3RcIixcbiAgICAgIGZpZWxkOiBcInBpY2tlck9wdGlvbnNcIixcbiAgICAgIHByb3BzOiB7IGRlZmF1bHRWYWx1ZToge30gfVxuICAgIH0sIHsgdHlwZTogXCJzd2l0Y2hcIiwgZmllbGQ6IFwiZWRpdGFibGVcIiwgdmFsdWU6ICEwIH0sIHtcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgIGZpZWxkOiBcInBsYWNlaG9sZGVyXCJcbiAgICB9LCB7XG4gICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICBmaWVsZDogXCJzdGFydFBsYWNlaG9sZGVyXCJcbiAgICB9LCB7IHR5cGU6IFwiaW5wdXRcIiwgZmllbGQ6IFwiZW5kUGxhY2Vob2xkZXJcIiB9LCB7XG4gICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICBmaWVsZDogXCJmb3JtYXRcIlxuICAgIH0sIHtcbiAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICBmaWVsZDogXCJhbGlnblwiLFxuICAgICAgb3B0aW9uczogWHQoZiwgW3sgbGFiZWw6IFwibGVmdFwiLCB2YWx1ZTogXCJsZWZ0XCIgfSwgeyBsYWJlbDogXCJjZW50ZXJcIiwgdmFsdWU6IFwiY2VudGVyXCIgfSwge1xuICAgICAgICBsYWJlbDogXCJyaWdodFwiLFxuICAgICAgICB2YWx1ZTogXCJyaWdodFwiXG4gICAgICB9XSlcbiAgICB9LCB7IHR5cGU6IFwiaW5wdXRcIiwgZmllbGQ6IFwicmFuZ2VTZXBhcmF0b3JcIiB9LCB7XG4gICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgZmllbGQ6IFwidW5saW5rUGFuZWxzXCJcbiAgICB9XSk7XG4gIH1cbn0sIHV2ID0gXCJcXHU2NUU1XFx1NjcxRlxcdTUzM0FcXHU5NUY0XCIsIGZ2ID0gXCJkYXRlUmFuZ2VcIiwgZHYgPSB7XG4gIG1lbnU6IFwibWFpblwiLFxuICBpY29uOiBcImljb24tZGF0ZVwiLFxuICBsYWJlbDogdXYsXG4gIG5hbWU6IGZ2LFxuICBldmVudDogW1wiY2hhbmdlXCIsIFwiYmx1clwiLCBcImZvY3VzXCIsIFwiY2FsZW5kYXJDaGFuZ2VcIiwgXCJwYW5lbENoYW5nZVwiLCBcInZpc2libGVDaGFuZ2VcIl0sXG4gIHJ1bGUoeyB0OiByIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJkYXRlUGlja2VyXCIsXG4gICAgICBmaWVsZDogX2UoKSxcbiAgICAgIHRpdGxlOiByKFwiY29tLmRhdGVSYW5nZS5uYW1lXCIpLFxuICAgICAgaW5mbzogXCJcIixcbiAgICAgICRyZXF1aXJlZDogITEsXG4gICAgICBwcm9wczoge1xuICAgICAgICB0eXBlOiBcImRhdGV0aW1lcmFuZ2VcIlxuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIHByb3BzKHIsIHsgdDogZiB9KSB7XG4gICAgcmV0dXJuIFplKGYsIFwiZGF0ZVBpY2tlci5wcm9wc1wiLCBbeyB0eXBlOiBcInN3aXRjaFwiLCBmaWVsZDogXCJyZWFkb25seVwiIH0sIHtcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJkaXNhYmxlZFwiXG4gICAgfSwge1xuICAgICAgdHlwZTogXCJzZWxlY3RcIixcbiAgICAgIGZpZWxkOiBcInR5cGVcIixcbiAgICAgIG9wdGlvbnM6IFh0KGYsIFtcbiAgICAgICAgeyBsYWJlbDogXCJkYXRldGltZXJhbmdlXCIsIHZhbHVlOiBcImRhdGV0aW1lcmFuZ2VcIiB9LFxuICAgICAgICB7IGxhYmVsOiBcImRhdGVyYW5nZVwiLCB2YWx1ZTogXCJkYXRlcmFuZ2VcIiB9LFxuICAgICAgICB7IGxhYmVsOiBcIm1vbnRocmFuZ2VcIiwgdmFsdWU6IFwibW9udGhyYW5nZVwiIH1cbiAgICAgIF0pXG4gICAgfSwge1xuICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgIGZpZWxkOiBcImNsZWFyYWJsZVwiLFxuICAgICAgdmFsdWU6ICEwXG4gICAgfSwge1xuICAgICAgdHlwZTogXCJTdHJ1Y3RcIixcbiAgICAgIGZpZWxkOiBcInBpY2tlck9wdGlvbnNcIixcbiAgICAgIHByb3BzOiB7IGRlZmF1bHRWYWx1ZToge30gfVxuICAgIH0sIHsgdHlwZTogXCJzd2l0Y2hcIiwgZmllbGQ6IFwiZWRpdGFibGVcIiwgdmFsdWU6ICEwIH0sIHtcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgIGZpZWxkOiBcInN0YXJ0UGxhY2Vob2xkZXJcIlxuICAgIH0sIHsgdHlwZTogXCJpbnB1dFwiLCBmaWVsZDogXCJlbmRQbGFjZWhvbGRlclwiIH0sIHtcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgIGZpZWxkOiBcImZvcm1hdFwiXG4gICAgfSwge1xuICAgICAgdHlwZTogXCJzZWxlY3RcIixcbiAgICAgIGZpZWxkOiBcImFsaWduXCIsXG4gICAgICBvcHRpb25zOiBYdChmLCBbeyBsYWJlbDogXCJsZWZ0XCIsIHZhbHVlOiBcImxlZnRcIiB9LCB7IGxhYmVsOiBcImNlbnRlclwiLCB2YWx1ZTogXCJjZW50ZXJcIiB9LCB7XG4gICAgICAgIGxhYmVsOiBcInJpZ2h0XCIsXG4gICAgICAgIHZhbHVlOiBcInJpZ2h0XCJcbiAgICAgIH1dKVxuICAgIH0sIHsgdHlwZTogXCJpbnB1dFwiLCBmaWVsZDogXCJyYW5nZVNlcGFyYXRvclwiIH0sIHtcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJ1bmxpbmtQYW5lbHNcIlxuICAgIH1dKTtcbiAgfVxufSwgY3YgPSBcIlxcdThCQzRcXHU1MjA2XCIsIHpsID0gXCJyYXRlXCIsIHB2ID0ge1xuICBtZW51OiBcIm1haW5cIixcbiAgaWNvbjogXCJpY29uLXJhdGVcIixcbiAgbGFiZWw6IGN2LFxuICBuYW1lOiB6bCxcbiAgZXZlbnQ6IFtcImNoYW5nZVwiXSxcbiAgdmFsaWRhdGU6IFtcIm51bWJlclwiXSxcbiAgcnVsZSh7IHQ6IHIgfSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB6bCxcbiAgICAgIGZpZWxkOiBfZSgpLFxuICAgICAgdGl0bGU6IHIoXCJjb20ucmF0ZS5uYW1lXCIpLFxuICAgICAgaW5mbzogXCJcIixcbiAgICAgICRyZXF1aXJlZDogITEsXG4gICAgICBwcm9wczoge31cbiAgICB9O1xuICB9LFxuICBwcm9wcyhyLCB7IHQ6IGYgfSkge1xuICAgIHJldHVybiBaZShmLCB6bCArIFwiLnByb3BzXCIsIFtcbiAgICAgIHsgdHlwZTogXCJpbnB1dE51bWJlclwiLCBmaWVsZDogXCJtYXhcIiwgcHJvcHM6IHsgbWluOiAwIH0gfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgICAgZmllbGQ6IFwiZGlzYWJsZWRcIlxuICAgICAgfSxcbiAgICAgIHsgdHlwZTogXCJzd2l0Y2hcIiwgZmllbGQ6IFwiYWxsb3dIYWxmXCIgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDb2xvcklucHV0XCIsXG4gICAgICAgIGZpZWxkOiBcInZvaWRDb2xvclwiXG4gICAgICB9LFxuICAgICAgeyB0eXBlOiBcIkNvbG9ySW5wdXRcIiwgZmllbGQ6IFwiZGlzYWJsZWRWb2lkQ29sb3JcIiB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICAgIGZpZWxkOiBcInZvaWRJY29uQ2xhc3NcIlxuICAgICAgfSxcbiAgICAgIHsgdHlwZTogXCJpbnB1dFwiLCBmaWVsZDogXCJkaXNhYmxlZFZvaWRJY29uQ2xhc3NcIiB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJzaG93U2NvcmVcIlxuICAgICAgfSxcbiAgICAgIHsgdHlwZTogXCJDb2xvcklucHV0XCIsIGZpZWxkOiBcInRleHRDb2xvclwiIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgICAgZmllbGQ6IFwic2NvcmVUZW1wbGF0ZVwiXG4gICAgICB9XG4gICAgXSk7XG4gIH1cbn0sIGh2ID0gXCJcXHU5ODlDXFx1ODI3MlxcdTkwMDlcXHU2MkU5XFx1NTY2OFwiLCBWbCA9IFwiY29sb3JQaWNrZXJcIiwgdnYgPSB7XG4gIG1lbnU6IFwibWFpblwiLFxuICBpY29uOiBcImljb24tY29sb3JcIixcbiAgbGFiZWw6IGh2LFxuICBuYW1lOiBWbCxcbiAgZXZlbnQ6IFtcImNoYW5nZVwiLCBcImFjdGl2ZUNoYW5nZVwiLCBcImZvY3VzXCIsIFwiYmx1clwiXSxcbiAgdmFsaWRhdGU6IFtcInN0cmluZ1wiXSxcbiAgcnVsZSh7IHQ6IHIgfSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBWbCxcbiAgICAgIGZpZWxkOiBfZSgpLFxuICAgICAgdGl0bGU6IHIoXCJjb20uY29sb3JQaWNrZXIubmFtZVwiKSxcbiAgICAgIGluZm86IFwiXCIsXG4gICAgICAkcmVxdWlyZWQ6ICExLFxuICAgICAgcHJvcHM6IHt9XG4gICAgfTtcbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgVmwgKyBcIi5wcm9wc1wiLCBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcImRpc2FibGVkXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcInNob3dBbHBoYVwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgICBmaWVsZDogXCJjb2xvckZvcm1hdFwiLFxuICAgICAgICBvcHRpb25zOiBbeyBsYWJlbDogXCJoc2xcIiwgdmFsdWU6IFwiaHNsXCIgfSwgeyBsYWJlbDogXCJoc3ZcIiwgdmFsdWU6IFwiaHN2XCIgfSwge1xuICAgICAgICAgIGxhYmVsOiBcImhleFwiLFxuICAgICAgICAgIHZhbHVlOiBcImhleFwiXG4gICAgICAgIH0sIHsgbGFiZWw6IFwicmdiXCIsIHZhbHVlOiBcInJnYlwiIH1dXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInRhYmxlT3B0aW9uc1wiLFxuICAgICAgICBmaWVsZDogXCJwcmVkZWZpbmVcIixcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBjb2x1bW46IFt7IGxhYmVsOiBmKFwicHJvcHMudmFsdWVcIiksIGtleTogXCJ2YWx1ZVwiIH1dLFxuICAgICAgICAgIHZhbHVlVHlwZTogXCJzdHJpbmdcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgXSk7XG4gIH1cbn0sIG12ID0gXCJcXHU2ODA1XFx1NjgzQ1xcdTVFMDNcXHU1QzQwXCIsIFdsID0gXCJmY1Jvd1wiLCBndiA9IHtcbiAgbWVudTogXCJsYXlvdXRcIixcbiAgaWNvbjogXCJpY29uLXJvd1wiLFxuICBsYWJlbDogbXYsXG4gIG5hbWU6IFdsLFxuICBtYXNrOiAhMSxcbiAgY2hpbGRyZW46IFwiY29sXCIsXG4gIGNoaWxkcmVuTGVuOiAyLFxuICBydWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBXbCxcbiAgICAgIHByb3BzOiB7fSxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH07XG4gIH0sXG4gIHByb3BzKHIsIHsgdDogZiB9KSB7XG4gICAgcmV0dXJuIFplKGYsIFdsICsgXCIucHJvcHNcIiwgW3tcbiAgICAgIHR5cGU6IFwiaW5wdXROdW1iZXJcIixcbiAgICAgIGZpZWxkOiBcImd1dHRlclwiLFxuICAgICAgcHJvcHM6IHsgbWluOiAwIH1cbiAgICB9LCB7XG4gICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgZmllbGQ6IFwidHlwZVwiLFxuICAgICAgcHJvcHM6IHsgYWN0aXZlVmFsdWU6IFwiZmxleFwiLCBpbmFjdGl2ZVZhbHVlOiBcImRlZmF1bHRcIiB9XG4gICAgfSwge1xuICAgICAgdHlwZTogXCJzZWxlY3RcIixcbiAgICAgIGZpZWxkOiBcImp1c3RpZnlcIixcbiAgICAgIG9wdGlvbnM6IFt7IGxhYmVsOiBcInN0YXJ0XCIsIHZhbHVlOiBcInN0YXJ0XCIgfSwgeyBsYWJlbDogXCJlbmRcIiwgdmFsdWU6IFwiZW5kXCIgfSwge1xuICAgICAgICBsYWJlbDogXCJjZW50ZXJcIixcbiAgICAgICAgdmFsdWU6IFwiY2VudGVyXCJcbiAgICAgIH0sIHsgbGFiZWw6IFwic3BhY2UtYXJvdW5kXCIsIHZhbHVlOiBcInNwYWNlLWFyb3VuZFwiIH0sIHsgbGFiZWw6IFwic3BhY2UtYmV0d2VlblwiLCB2YWx1ZTogXCJzcGFjZS1iZXR3ZWVuXCIgfV1cbiAgICB9LCB7XG4gICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgZmllbGQ6IFwiYWxpZ25cIixcbiAgICAgIG9wdGlvbnM6IFt7IGxhYmVsOiBcInRvcFwiLCB2YWx1ZTogXCJ0b3BcIiB9LCB7IGxhYmVsOiBcIm1pZGRsZVwiLCB2YWx1ZTogXCJtaWRkbGVcIiB9LCB7XG4gICAgICAgIGxhYmVsOiBcImJvdHRvbVwiLFxuICAgICAgICB2YWx1ZTogXCJib3R0b21cIlxuICAgICAgfV1cbiAgICB9XSk7XG4gIH1cbn0sIEdsID0gXCJjb2xcIiwgeXYgPSB7XG4gIG5hbWU6IEdsLFxuICBsYWJlbDogXCJcXHU2ODNDXFx1NUI1MFwiLFxuICBkcmFnOiAhMCxcbiAgZHJhZ0J0bjogITEsXG4gIGluc2lkZTogITAsXG4gIG1hc2s6ICExLFxuICBydWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBHbCxcbiAgICAgIHByb3BzOiB7IHNwYW46IDEyIH0sXG4gICAgICBjaGlsZHJlbjogW11cbiAgICB9O1xuICB9LFxuICBwcm9wcyhyLCB7IHQ6IGYgfSkge1xuICAgIHJldHVybiBaZShmLCBHbCArIFwiLnByb3BzXCIsIFtcbiAgICAgIHsgdHlwZTogXCJzbGlkZXJcIiwgZmllbGQ6IFwic3BhblwiLCB2YWx1ZTogMTIsIHByb3BzOiB7IG1pbjogMCwgbWF4OiAyNCB9IH0sXG4gICAgICB7IHR5cGU6IFwic2xpZGVyXCIsIGZpZWxkOiBcIm9mZnNldFwiLCBwcm9wczogeyBtaW46IDAsIG1heDogMjQgfSB9LFxuICAgICAgeyB0eXBlOiBcInNsaWRlclwiLCBmaWVsZDogXCJwdXNoXCIsIHByb3BzOiB7IG1pbjogMCwgbWF4OiAyNCB9IH0sXG4gICAgICB7IHR5cGU6IFwic2xpZGVyXCIsIGZpZWxkOiBcInB1bGxcIiwgcHJvcHM6IHsgbWluOiAwLCBtYXg6IDI0IH0gfVxuICAgIF0pO1xuICB9XG59LCBBdiA9IFwiXFx1OTAwOVxcdTk4NzlcXHU1MzYxXCIsIFFsID0gXCJlbFRhYlBhbmVcIiwgYnYgPSB7XG4gIGxhYmVsOiBBdixcbiAgbmFtZTogUWwsXG4gIGluc2lkZTogITAsXG4gIGRyYWc6ICEwLFxuICBkcmFnQnRuOiAhMSxcbiAgbWFzazogITEsXG4gIHJ1bGUoeyB0OiByIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogUWwsXG4gICAgICBwcm9wczogeyBsYWJlbDogcihcImNvbS5lbFRhYlBhbmUubmFtZVwiKSB9LFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgUWwgKyBcIi5wcm9wc1wiLCBbeyB0eXBlOiBcImlucHV0XCIsIGZpZWxkOiBcImxhYmVsXCIgfSwge1xuICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgIGZpZWxkOiBcImRpc2FibGVkXCJcbiAgICB9LCB7IHR5cGU6IFwiaW5wdXRcIiwgZmllbGQ6IFwibmFtZVwiIH0sIHtcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJsYXp5XCJcbiAgICB9XSk7XG4gIH1cbn0sIEN2ID0gXCJcXHU1MjA2XFx1NTI3MlxcdTdFQkZcIiwgWWwgPSBcImVsRGl2aWRlclwiLCBFdiA9IHtcbiAgbWVudTogXCJhaWRlXCIsXG4gIGljb246IFwiaWNvbi1kaXZpZGVyXCIsXG4gIGxhYmVsOiBDdixcbiAgbmFtZTogWWwsXG4gIHJ1bGUoeyB0OiByIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogWWwsXG4gICAgICBwcm9wczoge30sXG4gICAgICBjaGlsZHJlbjogW3IoXCJjb20uZWxEaXZpZGVyLm5hbWVcIildXG4gICAgfTtcbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgWWwgKyBcIi5wcm9wc1wiLCBbe1xuICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgZmllbGQ6IFwiZm9ybUNyZWF0ZUNoaWxkXCJcbiAgICB9LCB7XG4gICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgZmllbGQ6IFwiY29udGVudFBvc2l0aW9uXCIsXG4gICAgICBvcHRpb25zOiBYdChmLCBbeyBsYWJlbDogXCJsZWZ0XCIsIHZhbHVlOiBcImxlZnRcIiB9LCB7IGxhYmVsOiBcInJpZ2h0XCIsIHZhbHVlOiBcInJpZ2h0XCIgfSwge1xuICAgICAgICBsYWJlbDogXCJjZW50ZXJcIixcbiAgICAgICAgdmFsdWU6IFwiY2VudGVyXCJcbiAgICAgIH1dKVxuICAgIH1dKTtcbiAgfVxufSwgU3YgPSBcIlxcdTdFQTdcXHU4MDU0XFx1OTAwOVxcdTYyRTlcXHU1NjY4XCIsIHNhID0gXCJjYXNjYWRlclwiLCB4diA9IHtcbiAgbWVudTogXCJtYWluXCIsXG4gIGljb246IFwiaWNvbi1jYXNjYWRlclwiLFxuICBsYWJlbDogU3YsXG4gIG5hbWU6IHNhLFxuICBldmVudDogW1wiY2hhbmdlXCIsIFwiZXhwYW5kQ2hhbmdlXCIsIFwiYmx1clwiLCBcImZvY3VzXCIsIFwidmlzaWJsZUNoYW5nZVwiLCBcInJlbW92ZVRhZ1wiXSxcbiAgdmFsaWRhdGU6IFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImFycmF5XCJdLFxuICBydWxlKHsgdDogciB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHNhLFxuICAgICAgZmllbGQ6IF9lKCksXG4gICAgICB0aXRsZTogcihcImNvbS5jYXNjYWRlci5uYW1lXCIpLFxuICAgICAgaW5mbzogXCJcIixcbiAgICAgIGVmZmVjdDoge1xuICAgICAgICBmZXRjaDogXCJcIlxuICAgICAgfSxcbiAgICAgICRyZXF1aXJlZDogITEsXG4gICAgICBwcm9wczoge1xuICAgICAgICBvcHRpb25zOiBOcihyKFwicHJvcHMub3B0aW9uXCIpLCB7IGxhYmVsOiBcImxhYmVsXCIsIHZhbHVlOiBcInZhbHVlXCIgfSwgMylcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBwcm9wcyhyLCB7IHQ6IGYgfSkge1xuICAgIHJldHVybiBaZShmLCBzYSArIFwiLnByb3BzXCIsIFtcbiAgICAgIElhKHsgdDogZiwgdG86IFwicHJvcHMub3B0aW9uc1wiIH0pLFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJkaXNhYmxlZFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJjbGVhcmFibGVcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgICBmaWVsZDogXCJwbGFjZWhvbGRlclwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcIk9iamVjdFwiLFxuICAgICAgICBmaWVsZDogXCJwcm9wc1wiLFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIHJ1bGU6IFplKGYsIHNhICsgXCIucHJvcHNPcHRcIiwgW3tcbiAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgICAgICBmaWVsZDogXCJtdWx0aXBsZVwiXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgdHlwZTogXCJzZWxlY3RcIixcbiAgICAgICAgICAgIGZpZWxkOiBcImV4cGFuZFRyaWdnZXJcIixcbiAgICAgICAgICAgIG9wdGlvbnM6IFh0KGYsIFt7IGxhYmVsOiBcImNsaWNrXCIsIHZhbHVlOiBcImNsaWNrXCIgfSwge1xuICAgICAgICAgICAgICBsYWJlbDogXCJob3ZlclwiLFxuICAgICAgICAgICAgICB2YWx1ZTogXCJob3ZlclwiXG4gICAgICAgICAgICB9XSlcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICAgICAgZmllbGQ6IFwiY2hlY2tTdHJpY3RseVwiXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgICAgICAgIGZpZWxkOiBcImVtaXRQYXRoXCIsXG4gICAgICAgICAgICB2YWx1ZTogITBcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICAgICAgICBmaWVsZDogXCJ2YWx1ZVwiLFxuICAgICAgICAgICAgdmFsdWU6IFwidmFsdWVcIlxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgICAgICAgIGZpZWxkOiBcImxhYmVsXCIsXG4gICAgICAgICAgICB2YWx1ZTogXCJsYWJlbFwiXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgICAgICAgZmllbGQ6IFwiY2hpbGRyZW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBcImNoaWxkcmVuXCJcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICAgICAgICBmaWVsZDogXCJkaXNhYmxlZFwiLFxuICAgICAgICAgICAgdmFsdWU6IFwiZGlzYWJsZWRcIlxuICAgICAgICAgIH0sIHsgdHlwZTogXCJpbnB1dFwiLCBmaWVsZDogXCJsZWFmXCIgfV0pXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcInNob3dBbGxMZXZlbHNcIixcbiAgICAgICAgdmFsdWU6ICEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJjb2xsYXBzZVRhZ3NcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgICAgZmllbGQ6IFwiY29sbGFwc2VUYWdzVG9vbHRpcFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICAgIGZpZWxkOiBcInNlcGFyYXRvclwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJmaWx0ZXJhYmxlXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgIGZpZWxkOiBcInRhZ1R5cGVcIixcbiAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgIHsgbGFiZWw6IFwic3VjY2Vzc1wiLCB2YWx1ZTogXCJzdWNjZXNzXCIgfSxcbiAgICAgICAgICB7IGxhYmVsOiBcImluZm9cIiwgdmFsdWU6IFwiaW5mb1wiIH0sXG4gICAgICAgICAgeyBsYWJlbDogXCJ3YXJuaW5nXCIsIHZhbHVlOiBcIndhcm5pbmdcIiB9LFxuICAgICAgICAgIHsgbGFiZWw6IFwiZGFuZ2VyXCIsIHZhbHVlOiBcImRhbmdlclwiIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pO1xuICB9XG59LCB3diA9IFwiXFx1NEUwQVxcdTRGMjBcIiwgS2wgPSBcInVwbG9hZFwiLCBUdiA9IHtcbiAgbWVudTogXCJtYWluXCIsXG4gIGljb246IFwiaWNvbi11cGxvYWRcIixcbiAgbGFiZWw6IHd2LFxuICBuYW1lOiBLbCxcbiAgZXZlbnQ6IFtcImNoYW5nZVwiLCBcInJlbW92ZVwiXSxcbiAgdmFsaWRhdGU6IFtcImFycmF5XCJdLFxuICBydWxlKHsgdDogciB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IEtsLFxuICAgICAgZmllbGQ6IF9lKCksXG4gICAgICB0aXRsZTogcihcImNvbS51cGxvYWQubmFtZVwiKSxcbiAgICAgIGluZm86IFwiXCIsXG4gICAgICAkcmVxdWlyZWQ6ICExLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgYWN0aW9uOiBcIi9cIixcbiAgICAgICAgb25TdWNjZXNzKGYsIG8pIHtcbiAgICAgICAgICBvLnVybCA9IGYuZGF0YS51cmw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBwcm9wcyhyLCB7IHQ6IGYgfSkge1xuICAgIHJldHVybiBaZShmLCBLbCArIFwiLnByb3BzXCIsIFt7XG4gICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgZmllbGQ6IFwiZGlzYWJsZWRcIlxuICAgIH0sIHtcbiAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICBmaWVsZDogXCJsaXN0VHlwZVwiLFxuICAgICAgdmFsdWU6IFwidGV4dFwiLFxuICAgICAgb3B0aW9uczogWHQoZiwgW3sgbGFiZWw6IFwidGV4dFwiLCB2YWx1ZTogXCJ0ZXh0XCIgfSwge1xuICAgICAgICBsYWJlbDogXCJwaWN0dXJlXCIsXG4gICAgICAgIHZhbHVlOiBcInBpY3R1cmVcIlxuICAgICAgfSwge1xuICAgICAgICBsYWJlbDogXCJwaWN0dXJlLWNhcmRcIixcbiAgICAgICAgdmFsdWU6IFwicGljdHVyZS1jYXJkXCJcbiAgICAgIH1dKVxuICAgIH0sIHsgdHlwZTogXCJzd2l0Y2hcIiwgZmllbGQ6IFwibXVsdGlwbGVcIiB9LCB7XG4gICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICBmaWVsZDogXCJhY3Rpb25cIlxuICAgIH0sIHtcbiAgICAgIHR5cGU6IFwiRm5FZGl0b3JcIixcbiAgICAgIGZpZWxkOiBcIm9uU3VjY2Vzc1wiLFxuICAgICAgaW5mbzogZihcImNvbS51cGxvYWQuaW5mb1wiKSxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGFyZ3M6IFtcInJlc1wiLCBcImZpbGVcIl0sXG4gICAgICAgIG5hbWU6IFwib25TdWNjZXNzXCIsXG4gICAgICAgIGJ1dHRvbjogITBcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICB0eXBlOiBcIlRhYmxlT3B0aW9uc1wiLFxuICAgICAgZmllbGQ6IFwiaGVhZGVyc1wiLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY29sdW1uOiBbeyBsYWJlbDogZihcInByb3BzLmtleVwiKSwga2V5OiBcImxhYmVsXCIgfSwgeyBsYWJlbDogZihcInByb3BzLnZhbHVlXCIpLCBrZXk6IFwidmFsdWVcIiB9XSxcbiAgICAgICAgdmFsdWVUeXBlOiBcIm9iamVjdFwiXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgdHlwZTogXCJUYWJsZU9wdGlvbnNcIixcbiAgICAgIGZpZWxkOiBcImRhdGFcIixcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGNvbHVtbjogW3sgbGFiZWw6IGYoXCJwcm9wcy5rZXlcIiksIGtleTogXCJsYWJlbFwiIH0sIHsgbGFiZWw6IGYoXCJwcm9wcy52YWx1ZVwiKSwga2V5OiBcInZhbHVlXCIgfV0sXG4gICAgICAgIHZhbHVlVHlwZTogXCJvYmplY3RcIlxuICAgICAgfVxuICAgIH0sIHsgdHlwZTogXCJpbnB1dFwiLCBmaWVsZDogXCJuYW1lXCIgfSwge1xuICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgIGZpZWxkOiBcIndpdGhDcmVkZW50aWFsc1wiXG4gICAgfSwgeyB0eXBlOiBcImlucHV0XCIsIGZpZWxkOiBcImFjY2VwdFwiIH0sIHtcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJhdXRvVXBsb2FkXCIsXG4gICAgICB2YWx1ZTogITBcbiAgICB9LCB7XG4gICAgICB0eXBlOiBcImlucHV0TnVtYmVyXCIsXG4gICAgICBmaWVsZDogXCJsaW1pdFwiLFxuICAgICAgcHJvcHM6IHsgbWluOiAwIH1cbiAgICB9XSk7XG4gIH1cbn0sIER2ID0gXCJcXHU3QTdGXFx1NjhBRFxcdTY4NDZcIiwgWGwgPSBcImVsVHJhbnNmZXJcIiwgUnYgPSB7XG4gIG1lbnU6IFwibWFpblwiLFxuICBpY29uOiBcImljb24tdHJhbnNmZXJcIixcbiAgbGFiZWw6IER2LFxuICBuYW1lOiBYbCxcbiAgZXZlbnQ6IFtcImNoYW5nZVwiLCBcImxlZnRDaGVja0NoYW5nZVwiLCBcInJpZ2h0Q2hlY2tDaGFuZ2VcIl0sXG4gIHZhbGlkYXRlOiBbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJhcnJheVwiXSxcbiAgcnVsZSh7IHQ6IHIgfSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBYbCxcbiAgICAgIGZpZWxkOiBfZSgpLFxuICAgICAgdGl0bGU6IHIoXCJjb20uZWxUcmFuc2Zlci5uYW1lXCIpLFxuICAgICAgaW5mbzogXCJcIixcbiAgICAgICRyZXF1aXJlZDogITEsXG4gICAgICBwcm9wczoge1xuICAgICAgICBkYXRhOiBOcihyKFwicHJvcHMub3B0aW9uXCIpLCB7IGxhYmVsOiBcImxhYmVsXCIsIHZhbHVlOiBcImtleVwiIH0sIDEpXG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgWGwgKyBcIi5wcm9wc1wiLCBbXG4gICAgICBJYSh7IHQ6IGYsIHRvOiBcInByb3BzLmRhdGFcIiwgbGFiZWw6IFwibGFiZWxcIiwgdmFsdWU6IFwia2V5XCIgfSksXG4gICAgICB7IHR5cGU6IFwic3dpdGNoXCIsIGZpZWxkOiBcImZpbHRlcmFibGVcIiB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICAgIGZpZWxkOiBcImZpbHRlclBsYWNlaG9sZGVyXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgIGZpZWxkOiBcInRhcmdldE9yZGVyXCIsXG4gICAgICAgIGluZm86IGYoXCJjb20uZWxUcmFuc2Zlci50YXJnZXRPcmRlckluZm9cIiksXG4gICAgICAgIG9wdGlvbnM6IFt7IGxhYmVsOiBcIm9yaWdpbmFsXCIsIHZhbHVlOiBcIm9yaWdpbmFsXCIgfSwge1xuICAgICAgICAgIGxhYmVsOiBcInB1c2hcIixcbiAgICAgICAgICB2YWx1ZTogXCJwdXNoXCJcbiAgICAgICAgfSwgeyBsYWJlbDogXCJ1bnNoaWZ0XCIsIHZhbHVlOiBcInVuc2hpZnRcIiB9XVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJUYWJsZU9wdGlvbnNcIixcbiAgICAgICAgZmllbGQ6IFwidGl0bGVzXCIsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgY29sdW1uOiBbeyBsYWJlbDogZihcInByb3BzLnZhbHVlXCIpLCBrZXk6IFwidmFsdWVcIiB9XSxcbiAgICAgICAgICB2YWx1ZVR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgbWF4OiAyXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiVGFibGVPcHRpb25zXCIsXG4gICAgICAgIGZpZWxkOiBcImJ1dHRvblRleHRzXCIsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgY29sdW1uOiBbeyBsYWJlbDogZihcInByb3BzLnZhbHVlXCIpLCBrZXk6IFwidmFsdWVcIiB9XSxcbiAgICAgICAgICB2YWx1ZVR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgbWF4OiAyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdKTtcbiAgfVxufSwgTXYgPSBcIlxcdTY4MTFcXHU1RjYyXFx1NjNBN1xcdTRFRjZcIiwgSmwgPSBcInRyZWVcIiwgSXYgPSB7XG4gIG1lbnU6IFwibWFpblwiLFxuICBpY29uOiBcImljb24tdHJlZVwiLFxuICBsYWJlbDogTXYsXG4gIG5hbWU6IEpsLFxuICBldmVudDogW1wibm9kZUNsaWNrXCIsIFwibm9kZUNvbnRleHRtZW51XCIsIFwiY2hlY2tDaGFuZ2VcIiwgXCJjaGVja1wiLCBcImN1cnJlbnRDaGFuZ2VcIiwgXCJub2RlRXhwYW5kXCIsIFwibm9kZUNvbGxhcHNlXCIsIFwibm9kZURyYWdTdGFydFwiLCBcIm5vZGVEcmFnRW50ZXJcIiwgXCJub2RlRHJhZ0xlYXZlXCIsIFwibm9kZURyYWdPdmVyXCIsIFwibm9kZURyYWdFbmRcIiwgXCJub2RlRHJvcFwiXSxcbiAgdmFsaWRhdGU6IFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImFycmF5XCJdLFxuICBydWxlKHsgdDogciB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IEpsLFxuICAgICAgZmllbGQ6IF9lKCksXG4gICAgICB0aXRsZTogcihcImNvbS50cmVlLm5hbWVcIiksXG4gICAgICBpbmZvOiBcIlwiLFxuICAgICAgZWZmZWN0OiB7XG4gICAgICAgIGZldGNoOiBcIlwiXG4gICAgICB9LFxuICAgICAgJHJlcXVpcmVkOiAhMSxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgbGFiZWw6IFwibGFiZWxcIlxuICAgICAgICB9LFxuICAgICAgICBzaG93Q2hlY2tib3g6ICEwLFxuICAgICAgICBub2RlS2V5OiBcImlkXCIsXG4gICAgICAgIGRhdGE6IE5yKHIoXCJwcm9wcy5vcHRpb25cIiksIHsgbGFiZWw6IFwibGFiZWxcIiwgdmFsdWU6IFwiaWRcIiB9LCAzKVxuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIHByb3BzKHIsIHsgdDogZiB9KSB7XG4gICAgcmV0dXJuIFplKGYsIEpsICsgXCIucHJvcHNcIiwgW1xuICAgICAgSWEoeyB0OiBmLCB0bzogXCJwcm9wcy5kYXRhXCIsIGxhYmVsOiBcImxhYmVsXCIsIHZhbHVlOiBcImlkXCIgfSksXG4gICAgICB7IHR5cGU6IFwiaW5wdXRcIiwgZmllbGQ6IFwiZW1wdHlUZXh0XCIgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJUYWJsZU9wdGlvbnNcIixcbiAgICAgICAgZmllbGQ6IFwicHJvcHNcIixcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBjb2x1bW46IFt7IGxhYmVsOiBmKFwicHJvcHMua2V5XCIpLCBrZXk6IFwibGFiZWxcIiB9LCB7IGxhYmVsOiBmKFwicHJvcHMudmFsdWVcIiksIGtleTogXCJ2YWx1ZVwiIH1dLFxuICAgICAgICAgIHZhbHVlVHlwZTogXCJvYmplY3RcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJyZW5kZXJBZnRlckV4cGFuZFwiLFxuICAgICAgICB2YWx1ZTogITBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcImRlZmF1bHRFeHBhbmRBbGxcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgICAgZmllbGQ6IFwiZXhwYW5kT25DbGlja05vZGVcIixcbiAgICAgICAgdmFsdWU6ICEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJjaGVja09uQ2xpY2tOb2RlXCJcbiAgICAgIH0sXG4gICAgICB7IHR5cGU6IFwic3dpdGNoXCIsIGZpZWxkOiBcImF1dG9FeHBhbmRQYXJlbnRcIiwgdmFsdWU6ICEwIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcImNoZWNrU3RyaWN0bHlcIlxuICAgICAgfSxcbiAgICAgIHsgdHlwZTogXCJzd2l0Y2hcIiwgZmllbGQ6IFwiYWNjb3JkaW9uXCIgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJpbnB1dE51bWJlclwiLFxuICAgICAgICBmaWVsZDogXCJpbmRlbnRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgICBmaWVsZDogXCJub2RlS2V5XCJcbiAgICAgIH1cbiAgICBdKTtcbiAgfVxufSwgTnYgPSBcIlxcdTYzRDBcXHU3OTNBXCIsIFpsID0gXCJlbEFsZXJ0XCIsIE92ID0ge1xuICBtZW51OiBcImFpZGVcIixcbiAgaWNvbjogXCJpY29uLWFsZXJ0XCIsXG4gIGxhYmVsOiBOdixcbiAgbmFtZTogWmwsXG4gIGV2ZW50OiBbXCJjbG9zZVwiXSxcbiAgcnVsZSh7IHQ6IHIgfSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBabCxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRpdGxlOiByKFwiY29tLmVsQWxlcnQubmFtZVwiKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHIoXCJjb20uZWxBbGVydC5kZXNjcmlwdGlvblwiKSxcbiAgICAgICAgdHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICAgIGVmZmVjdDogXCJkYXJrXCJcbiAgICAgIH0sXG4gICAgICBjaGlsZHJlbjogW11cbiAgICB9O1xuICB9LFxuICBwcm9wcyhyLCB7IHQ6IGYgfSkge1xuICAgIHJldHVybiBaZShmLCBabCArIFwiLnByb3BzXCIsIFt7IHR5cGU6IFwiaW5wdXRcIiwgZmllbGQ6IFwidGl0bGVcIiB9LCB7XG4gICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgZmllbGQ6IFwidHlwZVwiLFxuICAgICAgb3B0aW9uczogW3sgbGFiZWw6IFwic3VjY2Vzc1wiLCB2YWx1ZTogXCJzdWNjZXNzXCIgfSwgeyBsYWJlbDogXCJ3YXJuaW5nXCIsIHZhbHVlOiBcIndhcm5pbmdcIiB9LCB7XG4gICAgICAgIGxhYmVsOiBcImluZm9cIixcbiAgICAgICAgdmFsdWU6IFwiaW5mb1wiXG4gICAgICB9LCB7IGxhYmVsOiBcImVycm9yXCIsIHZhbHVlOiBcImVycm9yXCIgfV1cbiAgICB9LCB7IHR5cGU6IFwiaW5wdXRcIiwgZmllbGQ6IFwiZGVzY3JpcHRpb25cIiB9LCB7XG4gICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgZmllbGQ6IFwiY2xvc2FibGVcIixcbiAgICAgIHZhbHVlOiAhMFxuICAgIH0sIHsgdHlwZTogXCJzd2l0Y2hcIiwgZmllbGQ6IFwiY2VudGVyXCIsIHZhbHVlOiAhMCB9LCB7XG4gICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICBmaWVsZDogXCJjbG9zZVRleHRcIlxuICAgIH0sIHsgdHlwZTogXCJzd2l0Y2hcIiwgZmllbGQ6IFwic2hvd0ljb25cIiB9LCB7XG4gICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgZmllbGQ6IFwiZWZmZWN0XCIsXG4gICAgICBvcHRpb25zOiBbeyBsYWJlbDogXCJsaWdodFwiLCB2YWx1ZTogXCJsaWdodFwiIH0sIHsgbGFiZWw6IFwiZGFya1wiLCB2YWx1ZTogXCJkYXJrXCIgfV1cbiAgICB9XSk7XG4gIH1cbn0sIFB2ID0gXCJcXHU2NTg3XFx1NUI1N1wiLCB0ZCA9IFwidGV4dFwiLCBGdiA9IHtcbiAgbWVudTogXCJhaWRlXCIsXG4gIGljb246IFwiaWNvbi1zcGFuXCIsXG4gIGxhYmVsOiBQdixcbiAgbmFtZTogdGQsXG4gIHJ1bGUoeyB0OiByIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJkaXZcIixcbiAgICAgIHRpdGxlOiBcIlwiLFxuICAgICAgbmF0aXZlOiAhMCxcbiAgICAgIGNoaWxkcmVuOiBbcihcImNvbS50ZXh0Lm5hbWVcIildXG4gICAgfTtcbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBmb3JtQ3JlYXRlTmF0aXZlKHsgdmFsdWU6IHIsIHJ1bGU6IGYgfSkge1xuICAgICAgciAmJiAoZi50aXRsZSA9IFwiXCIpO1xuICAgIH1cbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgdGQgKyBcIi5wcm9wc1wiLCBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcImZvcm1DcmVhdGVOYXRpdmVcIixcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBhY3RpdmVWYWx1ZTogITEsXG4gICAgICAgICAgaW5hY3RpdmVWYWx1ZTogITBcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbDogW3sgdmFsdWU6ICExLCBydWxlOiBbXCJmb3JtQ3JlYXRlVGl0bGVcIl0gfV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgICAgZmllbGQ6IFwiZm9ybUNyZWF0ZVRpdGxlXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgICAgZmllbGQ6IFwiZm9ybUNyZWF0ZUNoaWxkXCIsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0YXJlYVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdKTtcbiAgfVxufSwgTHYgPSBcIlxcdTk1RjRcXHU4REREXCIsIG5kID0gXCJzcGFjZVwiLCBCdiA9IHtcbiAgbWVudTogXCJsYXlvdXRcIixcbiAgaWNvbjogXCJpY29uLXNwYWNlXCIsXG4gIGxhYmVsOiBMdixcbiAgbmFtZTogbmQsXG4gIHJ1bGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZGl2XCIsXG4gICAgICB3cmFwOiB7XG4gICAgICAgIHNob3c6ICExXG4gICAgICB9LFxuICAgICAgbmF0aXZlOiAhMCxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgaGVpZ2h0OiBcIjIwcHhcIlxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH07XG4gIH0sXG4gIHByb3BzKHIsIHsgdDogZiB9KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgZmllbGQ6IFwiZm9ybUNyZWF0ZVN0eWxlXCIsXG4gICAgICAgIG5hdGl2ZTogITAsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgcnVsZTogWmUoZiwgbmQgKyBcIi5wcm9wc1wiLCBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgICAgICAgICAgZmllbGQ6IFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICAgIHRpdGxlOiBcImhlaWdodFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF07XG4gIH1cbn0sIEh2ID0gXCJcXHU2ODA3XFx1N0I3RVxcdTk4NzVcIiwgcWwgPSBcImVsVGFic1wiLCAkdiA9IHtcbiAgbWVudTogXCJsYXlvdXRcIixcbiAgaWNvbjogXCJpY29uLXRhYlwiLFxuICBsYWJlbDogSHYsXG4gIG5hbWU6IHFsLFxuICBtYXNrOiAhMSxcbiAgZXZlbnQ6IFtcInRhYkNsaWNrXCIsIFwidGFiQ2hhbmdlXCIsIFwidGFiUmVtb3ZlXCIsIFwidGFiQWRkXCIsIFwiZWRpdFwiXSxcbiAgY2hpbGRyZW46IFwiZWxUYWJQYW5lXCIsXG4gIHJ1bGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHFsLFxuICAgICAgc3R5bGU6IHsgd2lkdGg6IFwiMTAwJVwiIH0sXG4gICAgICBjaGlsZHJlbjogW11cbiAgICB9O1xuICB9LFxuICBwcm9wcyhyLCB7IHQ6IGYgfSkge1xuICAgIHJldHVybiBaZShmLCBxbCArIFwiLnByb3BzXCIsIFt7XG4gICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgZmllbGQ6IFwidHlwZVwiLFxuICAgICAgb3B0aW9uczogW3tcbiAgICAgICAgbGFiZWw6IFwiY2FyZFwiLFxuICAgICAgICB2YWx1ZTogXCJjYXJkXCJcbiAgICAgIH0sIHsgbGFiZWw6IFwiYm9yZGVyLWNhcmRcIiwgdmFsdWU6IFwiYm9yZGVyLWNhcmRcIiB9XVxuICAgIH0sIHsgdHlwZTogXCJzd2l0Y2hcIiwgZmllbGQ6IFwiY2xvc2FibGVcIiB9LCB7XG4gICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgZmllbGQ6IFwidGFiUG9zaXRpb25cIixcbiAgICAgIG9wdGlvbnM6IFh0KGYsIFt7IGxhYmVsOiBcInRvcFwiLCB2YWx1ZTogXCJ0b3BcIiB9LCB7IGxhYmVsOiBcInJpZ2h0XCIsIHZhbHVlOiBcInJpZ2h0XCIgfSwge1xuICAgICAgICBsYWJlbDogXCJsZWZ0XCIsXG4gICAgICAgIHZhbHVlOiBcImxlZnRcIlxuICAgICAgfV0pXG4gICAgfSwgeyB0eXBlOiBcInN3aXRjaFwiLCBmaWVsZDogXCJzdHJldGNoXCIgfV0pO1xuICB9XG59LCBrdiA9IFwiXFx1NjMwOVxcdTk0QUVcIiwgX2wgPSBcImVsQnV0dG9uXCIsIGp2ID0ge1xuICBtZW51OiBcImFpZGVcIixcbiAgaWNvbjogXCJpY29uLWJ1dHRvblwiLFxuICBsYWJlbDoga3YsXG4gIG5hbWU6IF9sLFxuICBtYXNrOiAhMCxcbiAgZXZlbnQ6IFtcImNsaWNrXCJdLFxuICBydWxlKHsgdDogciB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IF9sLFxuICAgICAgcHJvcHM6IHt9LFxuICAgICAgY2hpbGRyZW46IFtyKFwiY29tLmVsQnV0dG9uLm5hbWVcIildXG4gICAgfTtcbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgX2wgKyBcIi5wcm9wc1wiLCBbe1xuICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgZmllbGQ6IFwiZm9ybUNyZWF0ZUNoaWxkXCJcbiAgICB9LCB7XG4gICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgZmllbGQ6IFwic2l6ZVwiLFxuICAgICAgb3B0aW9uczogWHQoZiwgW3sgbGFiZWw6IFwibGFyZ2VcIiwgdmFsdWU6IFwibGFyZ2VcIiB9LCB7IGxhYmVsOiBcImRlZmF1bHRcIiwgdmFsdWU6IFwiZGVmYXVsdFwiIH0sIHtcbiAgICAgICAgbGFiZWw6IFwic21hbGxcIixcbiAgICAgICAgdmFsdWU6IFwic21hbGxcIlxuICAgICAgfV0pXG4gICAgfSwge1xuICAgICAgdHlwZTogXCJzZWxlY3RcIixcbiAgICAgIGZpZWxkOiBcInR5cGVcIixcbiAgICAgIG9wdGlvbnM6IFt7IGxhYmVsOiBcInByaW1hcnlcIiwgdmFsdWU6IFwicHJpbWFyeVwiIH0sIHtcbiAgICAgICAgbGFiZWw6IFwic3VjY2Vzc1wiLFxuICAgICAgICB2YWx1ZTogXCJzdWNjZXNzXCJcbiAgICAgIH0sIHsgbGFiZWw6IFwid2FybmluZ1wiLCB2YWx1ZTogXCJ3YXJuaW5nXCIgfSwgeyBsYWJlbDogXCJkYW5nZXJcIiwgdmFsdWU6IFwiZGFuZ2VyXCIgfSwge1xuICAgICAgICBsYWJlbDogXCJpbmZvXCIsXG4gICAgICAgIHZhbHVlOiBcImluZm9cIlxuICAgICAgfV1cbiAgICB9LCB7IHR5cGU6IFwic3dpdGNoXCIsIGZpZWxkOiBcInBsYWluXCIgfSwge1xuICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgIGZpZWxkOiBcInJvdW5kXCJcbiAgICB9LCB7IHR5cGU6IFwic3dpdGNoXCIsIGZpZWxkOiBcImNpcmNsZVwiIH0sIHtcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJsb2FkaW5nXCJcbiAgICB9LCB7IHR5cGU6IFwic3dpdGNoXCIsIGZpZWxkOiBcImRpc2FibGVkXCIgfV0pO1xuICB9XG59LCBVdiA9IFwiXFx1NUJDQ1xcdTY1ODdcXHU2NzJDXFx1Njg0NlwiLCBlcyA9IFwiZmNFZGl0b3JcIiwgenYgPSB7XG4gIG1lbnU6IFwibWFpblwiLFxuICBpY29uOiBcImljb24tZWRpdG9yXCIsXG4gIGxhYmVsOiBVdixcbiAgbmFtZTogZXMsXG4gIGV2ZW50OiBbXCJjaGFuZ2VcIl0sXG4gIHZhbGlkYXRlOiBbXCJzdHJpbmdcIl0sXG4gIHJ1bGUoeyB0OiByIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogZXMsXG4gICAgICBmaWVsZDogX2UoKSxcbiAgICAgIHRpdGxlOiByKFwiY29tLmZjRWRpdG9yLm5hbWVcIiksXG4gICAgICBpbmZvOiBcIlwiLFxuICAgICAgJHJlcXVpcmVkOiAhMSxcbiAgICAgIHByb3BzOiB7fVxuICAgIH07XG4gIH0sXG4gIHByb3BzKHIsIHsgdDogZiB9KSB7XG4gICAgcmV0dXJuIFplKGYsIGVzICsgXCIucHJvcHNcIiwgW3tcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJkaXNhYmxlZFwiXG4gICAgfV0pO1xuICB9XG59LCBWdiA9IFwiXFx1NUI1MFxcdTg4NjhcXHU1MzU1XCIsIHJkID0gXCJncm91cFwiLCBXdiA9IHtcbiAgbWVudTogXCJzdWJmb3JtXCIsXG4gIGljb246IFwiaWNvbi1zdWJmb3JtXCIsXG4gIGxhYmVsOiBWdixcbiAgbmFtZTogcmQsXG4gIGluc2lkZTogITEsXG4gIGRyYWc6ICEwLFxuICBkcmFnQnRuOiAhMCxcbiAgbWFzazogITEsXG4gIGV2ZW50OiBbXCJjaGFuZ2VcIl0sXG4gIHN1YkZvcm06IFwiYXJyYXlcIixcbiAgbG9hZFJ1bGUocikge1xuICAgIHIuY2hpbGRyZW4gPSByLnByb3BzLnJ1bGUgfHwgW10sIHIudHlwZSA9IFwiRmNSb3dcIiwgZGVsZXRlIHIucHJvcHMucnVsZTtcbiAgfSxcbiAgcGFyc2VSdWxlKHIpIHtcbiAgICByLnByb3BzLnJ1bGUgPSByLmNoaWxkcmVuLCByLnR5cGUgPSBcImdyb3VwXCIsIGRlbGV0ZSByLmNoaWxkcmVuLCBkZWxldGUgci5wcm9wcy5tb2RlO1xuICB9LFxuICBydWxlKHsgdDogciB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZmNSb3dcIixcbiAgICAgIGZpZWxkOiBfZSgpLFxuICAgICAgdGl0bGU6IHIoXCJjb20uZ3JvdXAubmFtZVwiKSxcbiAgICAgIGluZm86IFwiXCIsXG4gICAgICAkcmVxdWlyZWQ6ICExLFxuICAgICAgcHJvcHM6IHt9LFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgcmQgKyBcIi5wcm9wc1wiLCBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcImRpc2FibGVkXCJcbiAgICAgIH0sXG4gICAgICB7IHR5cGU6IFwic3dpdGNoXCIsIGZpZWxkOiBcInN5bmNEaXNhYmxlZFwiLCB2YWx1ZTogITAgfSxcbiAgICAgIHsgdHlwZTogXCJzd2l0Y2hcIiwgZmllbGQ6IFwiYnV0dG9uXCIsIHZhbHVlOiAhMCB9LFxuICAgICAgeyB0eXBlOiBcInN3aXRjaFwiLCBmaWVsZDogXCJzb3J0QnRuXCIsIHZhbHVlOiAhMCB9LFxuICAgICAgeyB0eXBlOiBcImlucHV0TnVtYmVyXCIsIGZpZWxkOiBcImV4cGFuZFwiIH0sXG4gICAgICB7IHR5cGU6IFwiaW5wdXROdW1iZXJcIiwgZmllbGQ6IFwibWluXCIgfSxcbiAgICAgIHsgdHlwZTogXCJpbnB1dE51bWJlclwiLCBmaWVsZDogXCJtYXhcIiB9XG4gICAgXSk7XG4gIH1cbn0sIEd2ID0gXCJcXHU1MjA2XFx1N0VDNFwiLCBpZCA9IFwic3ViRm9ybVwiLCBRdiA9IHtcbiAgbWVudTogXCJzdWJmb3JtXCIsXG4gIGljb246IFwiaWNvbi1ncm91cFwiLFxuICBsYWJlbDogR3YsXG4gIG5hbWU6IGlkLFxuICBpbnNpZGU6ICExLFxuICBkcmFnOiAhMCxcbiAgZHJhZ0J0bjogITAsXG4gIG1hc2s6ICExLFxuICBzdWJGb3JtOiBcIm9iamVjdFwiLFxuICBldmVudDogW1wiY2hhbmdlXCJdLFxuICBsb2FkUnVsZShyKSB7XG4gICAgci5jaGlsZHJlbiA9IHIucHJvcHMucnVsZSB8fCBbXSwgci50eXBlID0gXCJGY1Jvd1wiLCBkZWxldGUgci5wcm9wcy5ydWxlO1xuICB9LFxuICBwYXJzZVJ1bGUocikge1xuICAgIHIucHJvcHMucnVsZSA9IHIuY2hpbGRyZW4sIHIudHlwZSA9IFwic3ViRm9ybVwiLCBkZWxldGUgci5jaGlsZHJlbjtcbiAgfSxcbiAgcnVsZSh7IHQ6IHIgfSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImZjUm93XCIsXG4gICAgICBmaWVsZDogX2UoKSxcbiAgICAgIHRpdGxlOiByKFwiY29tLnN1YkZvcm0ubmFtZVwiKSxcbiAgICAgIGluZm86IFwiXCIsXG4gICAgICAkcmVxdWlyZWQ6ICExLFxuICAgICAgcHJvcHM6IHt9LFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgaWQgKyBcIi5wcm9wc1wiLCBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcImRpc2FibGVkXCJcbiAgICAgIH0sXG4gICAgICB7IHR5cGU6IFwic3dpdGNoXCIsIGZpZWxkOiBcInN5bmNEaXNhYmxlZFwiLCB2YWx1ZTogITAgfVxuICAgIF0pO1xuICB9XG59LCBZdiA9IFwiXFx1NTM2MVxcdTcyNDdcIiwgdHMgPSBcImVsQ2FyZFwiLCBLdiA9IHtcbiAgbWVudTogXCJsYXlvdXRcIixcbiAgaWNvbjogXCJpY29uLWNhcmRcIixcbiAgbGFiZWw6IFl2LFxuICBuYW1lOiB0cyxcbiAgZHJhZzogITAsXG4gIGluc2lkZTogITEsXG4gIG1hc2s6ICExLFxuICBydWxlKHsgdDogciB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHRzLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgaGVhZGVyOiByKFwiY29tLmVsQ2FyZC5wcm9wcy5oZWFkZXJcIilcbiAgICAgIH0sXG4gICAgICBzdHlsZToge1xuICAgICAgICB3aWR0aDogXCIxMDAlXCJcbiAgICAgIH0sXG4gICAgICBjaGlsZHJlbjogW11cbiAgICB9O1xuICB9LFxuICBwcm9wcyhyLCB7IHQ6IGYgfSkge1xuICAgIHJldHVybiBaZShmLCB0cyArIFwiLnByb3BzXCIsIFt7XG4gICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICBmaWVsZDogXCJoZWFkZXJcIlxuICAgIH0sIHtcbiAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICBmaWVsZDogXCJzaGFkb3dcIixcbiAgICAgIHZhbHVlOiBcImFsd2F5c1wiLFxuICAgICAgb3B0aW9uczogWHQoZiwgW3sgbGFiZWw6IFwiYWx3YXlzXCIsIHZhbHVlOiBcImFsd2F5c1wiIH0sIHsgbGFiZWw6IFwibmV2ZXJcIiwgdmFsdWU6IFwibmV2ZXJcIiB9LCB7XG4gICAgICAgIGxhYmVsOiBcImhvdmVyXCIsXG4gICAgICAgIHZhbHVlOiBcImhvdmVyXCJcbiAgICAgIH1dKVxuICAgIH1dKTtcbiAgfVxufSwgWHYgPSBcIlxcdTYyOThcXHU1M0UwXFx1OTc2MlxcdTY3N0ZcIiwgbnMgPSBcImVsQ29sbGFwc2VcIiwgSnYgPSB7XG4gIG1lbnU6IFwibGF5b3V0XCIsXG4gIGljb246IFwiaWNvbi1jb2xsYXBzZVwiLFxuICBsYWJlbDogWHYsXG4gIG5hbWU6IG5zLFxuICBtYXNrOiAhMSxcbiAgY2hpbGRyZW46IFwiZWxDb2xsYXBzZUl0ZW1cIixcbiAgZXZlbnQ6IFtcImNoYW5nZVwiXSxcbiAgcnVsZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogbnMsXG4gICAgICBwcm9wczoge30sXG4gICAgICBzdHlsZToge1xuICAgICAgICB3aWR0aDogXCIxMDAlXCJcbiAgICAgIH0sXG4gICAgICBjaGlsZHJlbjogW11cbiAgICB9O1xuICB9LFxuICBwcm9wcyhyLCB7IHQ6IGYgfSkge1xuICAgIHJldHVybiBaZShmLCBucyArIFwiLnByb3BzXCIsIFt7XG4gICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgZmllbGQ6IFwiYWNjb3JkaW9uXCJcbiAgICB9XSk7XG4gIH1cbn0sIFp2ID0gXCJcXHU5NzYyXFx1Njc3RlwiLCBycyA9IFwiZWxDb2xsYXBzZUl0ZW1cIiwgcXYgPSB7XG4gIGljb246IFwiaWNvbi1jZWxsXCIsXG4gIGxhYmVsOiBadixcbiAgbmFtZTogcnMsXG4gIGRyYWc6ICEwLFxuICBkcmFnQnRuOiAhMSxcbiAgaW5zaWRlOiAhMCxcbiAgbWFzazogITEsXG4gIHJ1bGUoeyB0OiByIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogcnMsXG4gICAgICBwcm9wczoge1xuICAgICAgICB0aXRsZTogcihcImNvbS5lbENvbGxhcHNlSXRlbS5uYW1lXCIpXG4gICAgICB9LFxuICAgICAgc3R5bGU6IHt9LFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgcnMgKyBcIi5wcm9wc1wiLCBbe1xuICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgZmllbGQ6IFwidGl0bGVcIlxuICAgIH0sIHtcbiAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgIGZpZWxkOiBcIm5hbWVcIlxuICAgIH0sIHtcbiAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICBmaWVsZDogXCJkaXNhYmxlZFwiXG4gICAgfV0pO1xuICB9XG59LCBfdiA9IFwiXFx1NjgxMVxcdTVGNjJcXHU5MDA5XFx1NjJFOVwiLCBpcyA9IFwiZWxUcmVlU2VsZWN0XCIsIGVtID0ge1xuICBtZW51OiBcIm1haW5cIixcbiAgaWNvbjogXCJpY29uLXRyZWUtc2VsZWN0XCIsXG4gIGxhYmVsOiBfdixcbiAgbmFtZTogaXMsXG4gIGV2ZW50OiBbXCJjaGFuZ2VcIiwgXCJ2aXNpYmxlQ2hhbmdlXCIsIFwicmVtb3ZlVGFnXCIsIFwiY2xlYXJcIiwgXCJibHVyXCIsIFwiZm9jdXNcIl0sXG4gIHZhbGlkYXRlOiBbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJhcnJheVwiXSxcbiAgcnVsZSh7IHQ6IHIgfSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBpcyxcbiAgICAgIGZpZWxkOiBfZSgpLFxuICAgICAgdGl0bGU6IHIoXCJjb20uZWxUcmVlU2VsZWN0Lm5hbWVcIiksXG4gICAgICBpbmZvOiBcIlwiLFxuICAgICAgZWZmZWN0OiB7XG4gICAgICAgIGZldGNoOiBcIlwiXG4gICAgICB9LFxuICAgICAgJHJlcXVpcmVkOiAhMSxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIG5vZGVLZXk6IFwidmFsdWVcIixcbiAgICAgICAgc2hvd0NoZWNrYm94OiAhMCxcbiAgICAgICAgZGF0YTogTnIocihcInByb3BzLm9wdGlvblwiKSwgeyBsYWJlbDogXCJsYWJlbFwiLCB2YWx1ZTogXCJ2YWx1ZVwiIH0sIDMpXG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBtdWx0aXBsZSh7IHJ1bGU6IHIgfSkge1xuICAgICAgci5rZXkgPSBfZSgpO1xuICAgIH1cbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgaXMgKyBcIi5wcm9wc1wiLCBbXG4gICAgICBJYSh7IHQ6IGYsIHRvOiBcInByb3BzLmRhdGFcIiwgbGFiZWw6IFwibGFiZWxcIiwgdmFsdWU6IFwidmFsdWVcIiB9KSxcbiAgICAgIHsgdHlwZTogXCJzd2l0Y2hcIiwgZmllbGQ6IFwibXVsdGlwbGVcIiB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJkaXNhYmxlZFwiXG4gICAgICB9LFxuICAgICAgeyB0eXBlOiBcInN3aXRjaFwiLCBmaWVsZDogXCJjbGVhcmFibGVcIiB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJjb2xsYXBzZVRhZ3NcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJpbnB1dE51bWJlclwiLFxuICAgICAgICBmaWVsZDogXCJtdWx0aXBsZUxpbWl0XCIsXG4gICAgICAgIHByb3BzOiB7IG1pbjogMCB9XG4gICAgICB9LFxuICAgICAgeyB0eXBlOiBcImlucHV0XCIsIGZpZWxkOiBcInBsYWNlaG9sZGVyXCIgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJUYWJsZU9wdGlvbnNcIixcbiAgICAgICAgZmllbGQ6IFwicHJvcHNcIixcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBjb2x1bW46IFt7IGxhYmVsOiBmKFwicHJvcHMua2V5XCIpLCBrZXk6IFwibGFiZWxcIiB9LCB7IGxhYmVsOiBmKFwicHJvcHMudmFsdWVcIiksIGtleTogXCJ2YWx1ZVwiIH1dLFxuICAgICAgICAgIHZhbHVlVHlwZTogXCJvYmplY3RcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJyZW5kZXJBZnRlckV4cGFuZFwiLFxuICAgICAgICB2YWx1ZTogITBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcImRlZmF1bHRFeHBhbmRBbGxcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgICAgZmllbGQ6IFwiZXhwYW5kT25DbGlja05vZGVcIixcbiAgICAgICAgdmFsdWU6ICEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJjaGVja09uQ2xpY2tOb2RlXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgICAgZmllbGQ6IFwibm9kZUtleVwiXG4gICAgICB9XG4gICAgXSk7XG4gIH1cbn0sIHRtID0gXCJcXHU2ODA3XFx1N0I3RVwiLCBvcyA9IFwiZWxUYWdcIiwgbm0gPSB7XG4gIG1lbnU6IFwiYWlkZVwiLFxuICBpY29uOiBcImljb24tdGFnXCIsXG4gIGxhYmVsOiB0bSxcbiAgbmFtZTogb3MsXG4gIG1hc2s6ICEwLFxuICBldmVudDogW1wiY2xpY2tcIiwgXCJjbG9zZVwiXSxcbiAgcnVsZSh7IHQ6IHIgfSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBvcyxcbiAgICAgIHRpdGxlOiBcIlwiLFxuICAgICAgbmF0aXZlOiAhMCxcbiAgICAgIGNoaWxkcmVuOiBbcihcImNvbS5lbFRhZy5uYW1lXCIpXVxuICAgIH07XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgZm9ybUNyZWF0ZU5hdGl2ZSh7IHZhbHVlOiByLCBydWxlOiBmIH0pIHtcbiAgICAgIHIgJiYgKGYudGl0bGUgPSBcIlwiKTtcbiAgICB9XG4gIH0sXG4gIHByb3BzKHIsIHsgdDogZiB9KSB7XG4gICAgcmV0dXJuIFplKGYsIG9zICsgXCIucHJvcHNcIiwgW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJmb3JtQ3JlYXRlTmF0aXZlXCIsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgYWN0aXZlVmFsdWU6ICExLFxuICAgICAgICAgIGluYWN0aXZlVmFsdWU6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2w6IFt7IHZhbHVlOiAhMSwgcnVsZTogW1wiZm9ybUNyZWF0ZVRpdGxlXCJdIH1dXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICAgIGZpZWxkOiBcImZvcm1DcmVhdGVUaXRsZVwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICAgIGZpZWxkOiBcImZvcm1DcmVhdGVDaGlsZFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgICBmaWVsZDogXCJ0eXBlXCIsXG4gICAgICAgIG9wdGlvbnM6IFt7IGxhYmVsOiBcInByaW1hcnlcIiwgdmFsdWU6IFwicHJpbWFyeVwiIH0sIHtcbiAgICAgICAgICBsYWJlbDogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgdmFsdWU6IFwic3VjY2Vzc1wiXG4gICAgICAgIH0sIHsgbGFiZWw6IFwid2FybmluZ1wiLCB2YWx1ZTogXCJ3YXJuaW5nXCIgfSwgeyBsYWJlbDogXCJkYW5nZXJcIiwgdmFsdWU6IFwiZGFuZ2VyXCIgfSwge1xuICAgICAgICAgIGxhYmVsOiBcImluZm9cIixcbiAgICAgICAgICB2YWx1ZTogXCJpbmZvXCJcbiAgICAgICAgfV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgIGZpZWxkOiBcInNpemVcIixcbiAgICAgICAgb3B0aW9uczogWHQoZiwgW3sgbGFiZWw6IFwibGFyZ2VcIiwgdmFsdWU6IFwibGFyZ2VcIiB9LCB7XG4gICAgICAgICAgbGFiZWw6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgIHZhbHVlOiBcImRlZmF1bHRcIlxuICAgICAgICB9LCB7IGxhYmVsOiBcInNtYWxsXCIsIHZhbHVlOiBcInNtYWxsXCIgfV0pXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgICBmaWVsZDogXCJlZmZlY3RcIixcbiAgICAgICAgb3B0aW9uczogW3sgbGFiZWw6IFwiZGFya1wiLCB2YWx1ZTogXCJkYXJrXCIgfSwge1xuICAgICAgICAgIGxhYmVsOiBcImxpZ2h0XCIsXG4gICAgICAgICAgdmFsdWU6IFwibGlnaHRcIlxuICAgICAgICB9LCB7IGxhYmVsOiBcInBsYWluXCIsIHZhbHVlOiBcInBsYWluXCIgfV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcImNsb3NhYmxlXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcImRpc2FibGVUcmFuc2l0aW9uc1wiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxuICAgICAgICBmaWVsZDogXCJoaXRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcbiAgICAgICAgZmllbGQ6IFwicm91bmRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDb2xvcklucHV0XCIsXG4gICAgICAgIGZpZWxkOiBcImNvbG9yXCJcbiAgICAgIH1cbiAgICBdKTtcbiAgfVxufSwgcm0gPSBcIkhUTUxcIiwgYXMgPSBcImh0bWxcIiwgaW0gPSB7XG4gIG1lbnU6IFwiYWlkZVwiLFxuICBpY29uOiBcImljb24taHRtbFwiLFxuICBsYWJlbDogcm0sXG4gIG5hbWU6IGFzLFxuICBydWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBhcyxcbiAgICAgIHRpdGxlOiBcIlwiLFxuICAgICAgbmF0aXZlOiAhMCxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGlubmVySFRNTDogXCJcIlxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbYDxkaXYgc3R5bGU9XCJjb2xvcjpibHVlO1wiPlxuIGh0bWwgaHRtbCBodG1sIGh0bWwgaHRtbCBodG1sIGh0bWwgaHRtbCBodG1sXG4gIDwvZGl2PmBdXG4gICAgfTtcbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBmb3JtQ3JlYXRlTmF0aXZlKHsgdmFsdWU6IHIsIHJ1bGU6IGYgfSkge1xuICAgICAgciAmJiAoZi50aXRsZSA9IFwiXCIpO1xuICAgIH1cbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgYXMgKyBcIi5wcm9wc1wiLCBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcImZvcm1DcmVhdGVOYXRpdmVcIixcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBhY3RpdmVWYWx1ZTogITEsXG4gICAgICAgICAgaW5hY3RpdmVWYWx1ZTogITBcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbDogW3sgdmFsdWU6ICExLCBydWxlOiBbXCJmb3JtQ3JlYXRlVGl0bGVcIl0gfV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgICAgZmllbGQ6IFwiZm9ybUNyZWF0ZVRpdGxlXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiSHRtbEVkaXRvclwiLFxuICAgICAgICBmaWVsZDogXCJmb3JtQ3JlYXRlQ2hpbGRcIlxuICAgICAgfVxuICAgIF0pO1xuICB9XG59LCBvbSA9IFwiXFx1ODg2OFxcdTY4M0NcXHU1RTAzXFx1NUM0MFwiLCBscyA9IFwiZmNUYWJsZVwiLCBhbSA9IHtcbiAgbWVudTogXCJsYXlvdXRcIixcbiAgaWNvbjogXCJpY29uLXRhYmxlXCIsXG4gIGxhYmVsOiBvbSxcbiAgbmFtZTogbHMsXG4gIGluc2lkZTogITEsXG4gIG1hc2s6ICExLFxuICBydWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBscyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHJ1bGU6IHtcbiAgICAgICAgICByb3c6IDMsXG4gICAgICAgICAgY29sOiA0LFxuICAgICAgICAgIHN0eWxlOiB7fSxcbiAgICAgICAgICBjbGFzczoge30sXG4gICAgICAgICAgbGF5b3V0OiBbXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgbHMgKyBcIi5wcm9wc1wiLCBbXG4gICAgICB7IHR5cGU6IFwic3dpdGNoXCIsIGZpZWxkOiBcImJvcmRlclwiLCB2YWx1ZTogITAgfSxcbiAgICAgIHsgdHlwZTogXCJDb2xvcklucHV0XCIsIGZpZWxkOiBcImJvcmRlckNvbG9yXCIgfSxcbiAgICAgIHsgdHlwZTogXCJpbnB1dFwiLCBmaWVsZDogXCJib3JkZXJXaWR0aFwiIH1cbiAgICBdKTtcbiAgfVxufSwgbG0gPSBcIlxcdTg4NjhcXHU2ODNDXFx1ODg2OFxcdTUzNTVcIiwgc3MgPSBcInRhYmxlRm9ybVwiLCBzbSA9IHtcbiAgbWVudTogXCJzdWJmb3JtXCIsXG4gIGljb246IFwiaWNvbi10YWJsZS1mb3JtXCIsXG4gIGxhYmVsOiBsbSxcbiAgbmFtZTogc3MsXG4gIG1hc2s6ICExLFxuICBzdWJGb3JtOiBcImFycmF5XCIsXG4gIGV2ZW50OiBbXCJjaGFuZ2VcIiwgXCJhZGRcIiwgXCJkZWxldGVcIl0sXG4gIGNoaWxkcmVuOiBcInRhYmxlRm9ybUNvbHVtblwiLFxuICBsb2FkUnVsZShyKSB7XG4gICAgci5wcm9wcyB8fCAoci5wcm9wcyA9IHt9KTtcbiAgICBjb25zdCBmID0gci5wcm9wcy5jb2x1bW5zIHx8IFtdO1xuICAgIHIuY2hpbGRyZW4gPSBmLm1hcCgobykgPT4gKHtcbiAgICAgIHR5cGU6IFwidGFibGVGb3JtQ29sdW1uXCIsXG4gICAgICBfZmNfZHJhZ190YWc6IFwidGFibGVGb3JtQ29sdW1uXCIsXG4gICAgICBwcm9wczoge1xuICAgICAgICBsYWJlbDogby5sYWJlbCxcbiAgICAgICAgd2lkdGg6IG8uc3R5bGUud2lkdGggfHwgXCJcIixcbiAgICAgICAgY29sb3I6IG8uc3R5bGUuY29sb3IgfHwgXCJcIlxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBvLnJ1bGUgfHwgW11cbiAgICB9KSksIGRlbGV0ZSByLnByb3BzLmNvbHVtbnM7XG4gIH0sXG4gIHBhcnNlUnVsZShyKSB7XG4gICAgY29uc3QgZiA9IHIuY2hpbGRyZW4gfHwgW107XG4gICAgci5wcm9wcy5jb2x1bW5zID0gZi5tYXAoKG8pID0+ICh7XG4gICAgICBsYWJlbDogby5wcm9wcy5sYWJlbCxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHdpZHRoOiBvLnByb3BzLndpZHRoLFxuICAgICAgICBjb2xvcjogby5wcm9wcy5jb2xvclxuICAgICAgfSxcbiAgICAgIHJ1bGU6IG8uY2hpbGRyZW4gfHwgW11cbiAgICB9KSksIHIuY2hpbGRyZW4gPSBbXTtcbiAgfSxcbiAgcnVsZSh7IHQ6IHIgfSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBzcyxcbiAgICAgIGZpZWxkOiBfZSgpLFxuICAgICAgdGl0bGU6IHIoXCJjb20udGFibGVGb3JtLm5hbWVcIiksXG4gICAgICBpbmZvOiBcIlwiLFxuICAgICAgcHJvcHM6IHt9LFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcbiAgfSxcbiAgcHJvcHMociwgeyB0OiBmIH0pIHtcbiAgICByZXR1cm4gWmUoZiwgc3MgKyBcIi5wcm9wc1wiLCBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXG4gICAgICAgIGZpZWxkOiBcImRpc2FibGVkXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiaW5wdXROdW1iZXJcIixcbiAgICAgICAgZmllbGQ6IFwibWF4XCIsXG4gICAgICAgIHByb3BzOiB7IG1pbjogMCB9XG4gICAgICB9XG4gICAgXSk7XG4gIH1cbn0sIHVzID0gXCJ0YWJsZUZvcm1Db2x1bW5cIiwgdW0gPSB7XG4gIGljb246IFwiaWNvbi1jZWxsXCIsXG4gIG5hbWU6IHVzLFxuICBkcmFnOiAhMCxcbiAgZHJhZ0J0bjogITEsXG4gIG1hc2s6ICExLFxuICBydWxlKHsgdDogciB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHVzLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgbGFiZWw6IHIoXCJjb20udGFibGVGb3JtQ29sdW1uLmxhYmVsXCIpLFxuICAgICAgICB3aWR0aDogXCJhdXRvXCJcbiAgICAgIH0sXG4gICAgICBjaGlsZHJlbjogW11cbiAgICB9O1xuICB9LFxuICBwcm9wcyhyLCB7IHQ6IGYgfSkge1xuICAgIHJldHVybiBaZShmLCB1cyArIFwiLnByb3BzXCIsIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgICBmaWVsZDogXCJsYWJlbFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICAgIGZpZWxkOiBcIndpZHRoXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ29sb3JJbnB1dFwiLFxuICAgICAgICBmaWVsZDogXCJjb2xvclwiXG4gICAgICB9XG4gICAgXSk7XG4gIH1cbn0sIGZtID0gW1xuICBWaCxcbiAgR2gsXG4gIFloLFxuICBYaCxcbiAga2gsXG4gIFVoLFxuICBaaCxcbiAgX2gsXG4gIHB2LFxuICBydixcbiAgYXYsXG4gIHR2LFxuICBzdixcbiAgZHYsXG4gIHZ2LFxuICB4dixcbiAgVHYsXG4gIFJ2LFxuICBJdixcbiAgZW0sXG4gIHp2LFxuICBXdixcbiAgUXYsXG4gIHNtLFxuICB1bSxcbiAgT3YsXG4gIGp2LFxuICBGdixcbiAgaW0sXG4gIEV2LFxuICBubSxcbiAgZ3YsXG4gIGFtLFxuICAkdixcbiAgQnYsXG4gIEt2LFxuICBKdixcbiAgeXYsXG4gIGJ2LFxuICBxdlxuXTtcbmZ1bmN0aW9uIGRtKHIpIHtcbiAgcmV0dXJuIHtcbiAgICBpY29uOiByLmZpZWxkID8gXCJpY29uLWlucHV0XCIgOiBcImljb24tY2VsbFwiLFxuICAgIGxhYmVsOiByLmZpZWxkIHx8IHIudHlwZSxcbiAgICBuYW1lOiBcIl9cIixcbiAgICBtYXNrOiAhMCxcbiAgICBoYW5kbGVCdG46IFtcImRlbGV0ZVwiXSxcbiAgICBydWxlKCkge1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSxcbiAgICBwcm9wcygpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH07XG59XG4vKiohXG4gKiBTb3J0YWJsZSAxLjE0LjBcbiAqIEBhdXRob3JcdFJ1YmFYYSAgIDx0cmFzaEBydWJheGEub3JnPlxuICogQGF1dGhvclx0b3dlbm0gICAgPG93ZW4yMzM1NUBnbWFpbC5jb20+XG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuZnVuY3Rpb24gb2QociwgZikge1xuICB2YXIgbyA9IE9iamVjdC5rZXlzKHIpO1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBpID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKTtcbiAgICBmICYmIChpID0gaS5maWx0ZXIoZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IociwgdCkuZW51bWVyYWJsZTtcbiAgICB9KSksIG8ucHVzaC5hcHBseShvLCBpKTtcbiAgfVxuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIEpuKHIpIHtcbiAgZm9yICh2YXIgZiA9IDE7IGYgPCBhcmd1bWVudHMubGVuZ3RoOyBmKyspIHtcbiAgICB2YXIgbyA9IGFyZ3VtZW50c1tmXSAhPSBudWxsID8gYXJndW1lbnRzW2ZdIDoge307XG4gICAgZiAlIDIgPyBvZChPYmplY3QobyksICEwKS5mb3JFYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgIGNtKHIsIGksIG9baV0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhyLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvKSkgOiBvZChPYmplY3QobykpLmZvckVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIGksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgaSkpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiByO1xufVxuZnVuY3Rpb24gZ2Eocikge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSBcInN5bWJvbFwiID8gZ2EgPSBmdW5jdGlvbihmKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBmO1xuICB9IDogZ2EgPSBmdW5jdGlvbihmKSB7XG4gICAgcmV0dXJuIGYgJiYgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZi5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIGYgIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIGY7XG4gIH0sIGdhKHIpO1xufVxuZnVuY3Rpb24gY20ociwgZiwgbykge1xuICByZXR1cm4gZiBpbiByID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIGYsIHtcbiAgICB2YWx1ZTogbyxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IHJbZl0gPSBvLCByO1xufVxuZnVuY3Rpb24gdXIoKSB7XG4gIHJldHVybiB1ciA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24ocikge1xuICAgIGZvciAodmFyIGYgPSAxOyBmIDwgYXJndW1lbnRzLmxlbmd0aDsgZisrKSB7XG4gICAgICB2YXIgbyA9IGFyZ3VtZW50c1tmXTtcbiAgICAgIGZvciAodmFyIGkgaW4gbylcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGkpICYmIChyW2ldID0gb1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9LCB1ci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuZnVuY3Rpb24gcG0ociwgZikge1xuICBpZiAociA9PSBudWxsKVxuICAgIHJldHVybiB7fTtcbiAgdmFyIG8gPSB7fSwgaSA9IE9iamVjdC5rZXlzKHIpLCB0LCBzO1xuICBmb3IgKHMgPSAwOyBzIDwgaS5sZW5ndGg7IHMrKylcbiAgICB0ID0gaVtzXSwgIShmLmluZGV4T2YodCkgPj0gMCkgJiYgKG9bdF0gPSByW3RdKTtcbiAgcmV0dXJuIG87XG59XG5mdW5jdGlvbiBobShyLCBmKSB7XG4gIGlmIChyID09IG51bGwpXG4gICAgcmV0dXJuIHt9O1xuICB2YXIgbyA9IHBtKHIsIGYpLCBpLCB0O1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKTtcbiAgICBmb3IgKHQgPSAwOyB0IDwgcy5sZW5ndGg7IHQrKylcbiAgICAgIGkgPSBzW3RdLCAhKGYuaW5kZXhPZihpKSA+PSAwKSAmJiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChyLCBpKSB8fCAob1tpXSA9IHJbaV0pKTtcbiAgfVxuICByZXR1cm4gbztcbn1cbnZhciB2bSA9IFwiMS4xNC4wXCI7XG5mdW5jdGlvbiBscihyKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93IDwgXCJ1XCIgJiYgd2luZG93Lm5hdmlnYXRvcilcbiAgICByZXR1cm4gISEvKiBAX19QVVJFX18gKi8gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChyKTtcbn1cbnZhciBmciA9IGxyKC8oPzpUcmlkZW50LipydlsgOl0/MTFcXC58bXNpZXxpZW1vYmlsZXxXaW5kb3dzIFBob25lKS9pKSwgd28gPSBscigvRWRnZS9pKSwgYWQgPSBscigvZmlyZWZveC9pKSwgdm8gPSBscigvc2FmYXJpL2kpICYmICFscigvY2hyb21lL2kpICYmICFscigvYW5kcm9pZC9pKSwgJGQgPSBscigvaVAoYWR8b2R8aG9uZSkvaSksIG1tID0gbHIoL2Nocm9tZS9pKSAmJiBscigvYW5kcm9pZC9pKSwga2QgPSB7XG4gIGNhcHR1cmU6ICExLFxuICBwYXNzaXZlOiAhMVxufTtcbmZ1bmN0aW9uIGR0KHIsIGYsIG8pIHtcbiAgci5hZGRFdmVudExpc3RlbmVyKGYsIG8sICFmciAmJiBrZCk7XG59XG5mdW5jdGlvbiBpdChyLCBmLCBvKSB7XG4gIHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihmLCBvLCAhZnIgJiYga2QpO1xufVxuZnVuY3Rpb24gU2EociwgZikge1xuICBpZiAoISFmKSB7XG4gICAgaWYgKGZbMF0gPT09IFwiPlwiICYmIChmID0gZi5zdWJzdHJpbmcoMSkpLCByKVxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHIubWF0Y2hlcylcbiAgICAgICAgICByZXR1cm4gci5tYXRjaGVzKGYpO1xuICAgICAgICBpZiAoci5tc01hdGNoZXNTZWxlY3RvcilcbiAgICAgICAgICByZXR1cm4gci5tc01hdGNoZXNTZWxlY3RvcihmKTtcbiAgICAgICAgaWYgKHIud2Via2l0TWF0Y2hlc1NlbGVjdG9yKVxuICAgICAgICAgIHJldHVybiByLndlYmtpdE1hdGNoZXNTZWxlY3RvcihmKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gITE7XG4gICAgICB9XG4gICAgcmV0dXJuICExO1xuICB9XG59XG5mdW5jdGlvbiBnbShyKSB7XG4gIHJldHVybiByLmhvc3QgJiYgciAhPT0gZG9jdW1lbnQgJiYgci5ob3N0Lm5vZGVUeXBlID8gci5ob3N0IDogci5wYXJlbnROb2RlO1xufVxuZnVuY3Rpb24gS24ociwgZiwgbywgaSkge1xuICBpZiAocikge1xuICAgIG8gPSBvIHx8IGRvY3VtZW50O1xuICAgIGRvIHtcbiAgICAgIGlmIChmICE9IG51bGwgJiYgKGZbMF0gPT09IFwiPlwiID8gci5wYXJlbnROb2RlID09PSBvICYmIFNhKHIsIGYpIDogU2EociwgZikpIHx8IGkgJiYgciA9PT0gbylcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICBpZiAociA9PT0gbylcbiAgICAgICAgYnJlYWs7XG4gICAgfSB3aGlsZSAociA9IGdtKHIpKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbnZhciBsZCA9IC9cXHMrL2c7XG5mdW5jdGlvbiBibihyLCBmLCBvKSB7XG4gIGlmIChyICYmIGYpXG4gICAgaWYgKHIuY2xhc3NMaXN0KVxuICAgICAgci5jbGFzc0xpc3RbbyA/IFwiYWRkXCIgOiBcInJlbW92ZVwiXShmKTtcbiAgICBlbHNlIHtcbiAgICAgIHZhciBpID0gKFwiIFwiICsgci5jbGFzc05hbWUgKyBcIiBcIikucmVwbGFjZShsZCwgXCIgXCIpLnJlcGxhY2UoXCIgXCIgKyBmICsgXCIgXCIsIFwiIFwiKTtcbiAgICAgIHIuY2xhc3NOYW1lID0gKGkgKyAobyA/IFwiIFwiICsgZiA6IFwiXCIpKS5yZXBsYWNlKGxkLCBcIiBcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gV2UociwgZiwgbykge1xuICB2YXIgaSA9IHIgJiYgci5zdHlsZTtcbiAgaWYgKGkpIHtcbiAgICBpZiAobyA9PT0gdm9pZCAwKVxuICAgICAgcmV0dXJuIGRvY3VtZW50LmRlZmF1bHRWaWV3ICYmIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUgPyBvID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShyLCBcIlwiKSA6IHIuY3VycmVudFN0eWxlICYmIChvID0gci5jdXJyZW50U3R5bGUpLCBmID09PSB2b2lkIDAgPyBvIDogb1tmXTtcbiAgICAhKGYgaW4gaSkgJiYgZi5pbmRleE9mKFwid2Via2l0XCIpID09PSAtMSAmJiAoZiA9IFwiLXdlYmtpdC1cIiArIGYpLCBpW2ZdID0gbyArICh0eXBlb2YgbyA9PSBcInN0cmluZ1wiID8gXCJcIiA6IFwicHhcIik7XG4gIH1cbn1cbmZ1bmN0aW9uIFRpKHIsIGYpIHtcbiAgdmFyIG8gPSBcIlwiO1xuICBpZiAodHlwZW9mIHIgPT0gXCJzdHJpbmdcIilcbiAgICBvID0gcjtcbiAgZWxzZVxuICAgIGRvIHtcbiAgICAgIHZhciBpID0gV2UociwgXCJ0cmFuc2Zvcm1cIik7XG4gICAgICBpICYmIGkgIT09IFwibm9uZVwiICYmIChvID0gaSArIFwiIFwiICsgbyk7XG4gICAgfSB3aGlsZSAoIWYgJiYgKHIgPSByLnBhcmVudE5vZGUpKTtcbiAgdmFyIHQgPSB3aW5kb3cuRE9NTWF0cml4IHx8IHdpbmRvdy5XZWJLaXRDU1NNYXRyaXggfHwgd2luZG93LkNTU01hdHJpeCB8fCB3aW5kb3cuTVNDU1NNYXRyaXg7XG4gIHJldHVybiB0ICYmIG5ldyB0KG8pO1xufVxuZnVuY3Rpb24gamQociwgZiwgbykge1xuICBpZiAocikge1xuICAgIHZhciBpID0gci5nZXRFbGVtZW50c0J5VGFnTmFtZShmKSwgdCA9IDAsIHMgPSBpLmxlbmd0aDtcbiAgICBpZiAobylcbiAgICAgIGZvciAoOyB0IDwgczsgdCsrKVxuICAgICAgICBvKGlbdF0sIHQpO1xuICAgIHJldHVybiBpO1xuICB9XG4gIHJldHVybiBbXTtcbn1cbmZ1bmN0aW9uIFhuKCkge1xuICB2YXIgciA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIHJldHVybiByIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbn1cbmZ1bmN0aW9uIFd0KHIsIGYsIG8sIGksIHQpIHtcbiAgaWYgKCEoIXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICYmIHIgIT09IHdpbmRvdykpIHtcbiAgICB2YXIgcywgZCwgYywgcCwgdiwgYiwgUztcbiAgICBpZiAociAhPT0gd2luZG93ICYmIHIucGFyZW50Tm9kZSAmJiByICE9PSBYbigpID8gKHMgPSByLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBkID0gcy50b3AsIGMgPSBzLmxlZnQsIHAgPSBzLmJvdHRvbSwgdiA9IHMucmlnaHQsIGIgPSBzLmhlaWdodCwgUyA9IHMud2lkdGgpIDogKGQgPSAwLCBjID0gMCwgcCA9IHdpbmRvdy5pbm5lckhlaWdodCwgdiA9IHdpbmRvdy5pbm5lcldpZHRoLCBiID0gd2luZG93LmlubmVySGVpZ2h0LCBTID0gd2luZG93LmlubmVyV2lkdGgpLCAoZiB8fCBvKSAmJiByICE9PSB3aW5kb3cgJiYgKHQgPSB0IHx8IHIucGFyZW50Tm9kZSwgIWZyKSlcbiAgICAgIGRvXG4gICAgICAgIGlmICh0ICYmIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICYmIChXZSh0LCBcInRyYW5zZm9ybVwiKSAhPT0gXCJub25lXCIgfHwgbyAmJiBXZSh0LCBcInBvc2l0aW9uXCIpICE9PSBcInN0YXRpY1wiKSkge1xuICAgICAgICAgIHZhciBEID0gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBkIC09IEQudG9wICsgcGFyc2VJbnQoV2UodCwgXCJib3JkZXItdG9wLXdpZHRoXCIpKSwgYyAtPSBELmxlZnQgKyBwYXJzZUludChXZSh0LCBcImJvcmRlci1sZWZ0LXdpZHRoXCIpKSwgcCA9IGQgKyBzLmhlaWdodCwgdiA9IGMgKyBzLndpZHRoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB3aGlsZSAodCA9IHQucGFyZW50Tm9kZSk7XG4gICAgaWYgKGkgJiYgciAhPT0gd2luZG93KSB7XG4gICAgICB2YXIgVCA9IFRpKHQgfHwgciksIG0gPSBUICYmIFQuYSwgeCA9IFQgJiYgVC5kO1xuICAgICAgVCAmJiAoZCAvPSB4LCBjIC89IG0sIFMgLz0gbSwgYiAvPSB4LCBwID0gZCArIGIsIHYgPSBjICsgUyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0b3A6IGQsXG4gICAgICBsZWZ0OiBjLFxuICAgICAgYm90dG9tOiBwLFxuICAgICAgcmlnaHQ6IHYsXG4gICAgICB3aWR0aDogUyxcbiAgICAgIGhlaWdodDogYlxuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIHNkKHIsIGYsIG8pIHtcbiAgZm9yICh2YXIgaSA9IE1yKHIsICEwKSwgdCA9IFd0KHIpW2ZdOyBpOyApIHtcbiAgICB2YXIgcyA9IFd0KGkpW29dLCBkID0gdm9pZCAwO1xuICAgIGlmIChvID09PSBcInRvcFwiIHx8IG8gPT09IFwibGVmdFwiID8gZCA9IHQgPj0gcyA6IGQgPSB0IDw9IHMsICFkKVxuICAgICAgcmV0dXJuIGk7XG4gICAgaWYgKGkgPT09IFhuKCkpXG4gICAgICBicmVhaztcbiAgICBpID0gTXIoaSwgITEpO1xuICB9XG4gIHJldHVybiAhMTtcbn1cbmZ1bmN0aW9uIFJpKHIsIGYsIG8sIGkpIHtcbiAgZm9yICh2YXIgdCA9IDAsIHMgPSAwLCBkID0gci5jaGlsZHJlbjsgcyA8IGQubGVuZ3RoOyApIHtcbiAgICBpZiAoZFtzXS5zdHlsZS5kaXNwbGF5ICE9PSBcIm5vbmVcIiAmJiBkW3NdICE9PSBHZS5naG9zdCAmJiAoaSB8fCBkW3NdICE9PSBHZS5kcmFnZ2VkKSAmJiBLbihkW3NdLCBvLmRyYWdnYWJsZSwgciwgITEpKSB7XG4gICAgICBpZiAodCA9PT0gZilcbiAgICAgICAgcmV0dXJuIGRbc107XG4gICAgICB0Kys7XG4gICAgfVxuICAgIHMrKztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIEZzKHIsIGYpIHtcbiAgZm9yICh2YXIgbyA9IHIubGFzdEVsZW1lbnRDaGlsZDsgbyAmJiAobyA9PT0gR2UuZ2hvc3QgfHwgV2UobywgXCJkaXNwbGF5XCIpID09PSBcIm5vbmVcIiB8fCBmICYmICFTYShvLCBmKSk7IClcbiAgICBvID0gby5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICByZXR1cm4gbyB8fCBudWxsO1xufVxuZnVuY3Rpb24gUm4ociwgZikge1xuICB2YXIgbyA9IDA7XG4gIGlmICghciB8fCAhci5wYXJlbnROb2RlKVxuICAgIHJldHVybiAtMTtcbiAgZm9yICg7IHIgPSByLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7IClcbiAgICByLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgIT09IFwiVEVNUExBVEVcIiAmJiByICE9PSBHZS5jbG9uZSAmJiAoIWYgfHwgU2EociwgZikpICYmIG8rKztcbiAgcmV0dXJuIG87XG59XG5mdW5jdGlvbiB1ZChyKSB7XG4gIHZhciBmID0gMCwgbyA9IDAsIGkgPSBYbigpO1xuICBpZiAocilcbiAgICBkbyB7XG4gICAgICB2YXIgdCA9IFRpKHIpLCBzID0gdC5hLCBkID0gdC5kO1xuICAgICAgZiArPSByLnNjcm9sbExlZnQgKiBzLCBvICs9IHIuc2Nyb2xsVG9wICogZDtcbiAgICB9IHdoaWxlIChyICE9PSBpICYmIChyID0gci5wYXJlbnROb2RlKSk7XG4gIHJldHVybiBbZiwgb107XG59XG5mdW5jdGlvbiB5bShyLCBmKSB7XG4gIGZvciAodmFyIG8gaW4gcilcbiAgICBpZiAoISFyLmhhc093blByb3BlcnR5KG8pKSB7XG4gICAgICBmb3IgKHZhciBpIGluIGYpXG4gICAgICAgIGlmIChmLmhhc093blByb3BlcnR5KGkpICYmIGZbaV0gPT09IHJbb11baV0pXG4gICAgICAgICAgcmV0dXJuIE51bWJlcihvKTtcbiAgICB9XG4gIHJldHVybiAtMTtcbn1cbmZ1bmN0aW9uIE1yKHIsIGYpIHtcbiAgaWYgKCFyIHx8ICFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdClcbiAgICByZXR1cm4gWG4oKTtcbiAgdmFyIG8gPSByLCBpID0gITE7XG4gIGRvXG4gICAgaWYgKG8uY2xpZW50V2lkdGggPCBvLnNjcm9sbFdpZHRoIHx8IG8uY2xpZW50SGVpZ2h0IDwgby5zY3JvbGxIZWlnaHQpIHtcbiAgICAgIHZhciB0ID0gV2Uobyk7XG4gICAgICBpZiAoby5jbGllbnRXaWR0aCA8IG8uc2Nyb2xsV2lkdGggJiYgKHQub3ZlcmZsb3dYID09IFwiYXV0b1wiIHx8IHQub3ZlcmZsb3dYID09IFwic2Nyb2xsXCIpIHx8IG8uY2xpZW50SGVpZ2h0IDwgby5zY3JvbGxIZWlnaHQgJiYgKHQub3ZlcmZsb3dZID09IFwiYXV0b1wiIHx8IHQub3ZlcmZsb3dZID09IFwic2Nyb2xsXCIpKSB7XG4gICAgICAgIGlmICghby5nZXRCb3VuZGluZ0NsaWVudFJlY3QgfHwgbyA9PT0gZG9jdW1lbnQuYm9keSlcbiAgICAgICAgICByZXR1cm4gWG4oKTtcbiAgICAgICAgaWYgKGkgfHwgZilcbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgaSA9ICEwO1xuICAgICAgfVxuICAgIH1cbiAgd2hpbGUgKG8gPSBvLnBhcmVudE5vZGUpO1xuICByZXR1cm4gWG4oKTtcbn1cbmZ1bmN0aW9uIEFtKHIsIGYpIHtcbiAgaWYgKHIgJiYgZilcbiAgICBmb3IgKHZhciBvIGluIGYpXG4gICAgICBmLmhhc093blByb3BlcnR5KG8pICYmIChyW29dID0gZltvXSk7XG4gIHJldHVybiByO1xufVxuZnVuY3Rpb24gZnMociwgZikge1xuICByZXR1cm4gTWF0aC5yb3VuZChyLnRvcCkgPT09IE1hdGgucm91bmQoZi50b3ApICYmIE1hdGgucm91bmQoci5sZWZ0KSA9PT0gTWF0aC5yb3VuZChmLmxlZnQpICYmIE1hdGgucm91bmQoci5oZWlnaHQpID09PSBNYXRoLnJvdW5kKGYuaGVpZ2h0KSAmJiBNYXRoLnJvdW5kKHIud2lkdGgpID09PSBNYXRoLnJvdW5kKGYud2lkdGgpO1xufVxudmFyIG1vO1xuZnVuY3Rpb24gVWQociwgZikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCFtbykge1xuICAgICAgdmFyIG8gPSBhcmd1bWVudHMsIGkgPSB0aGlzO1xuICAgICAgby5sZW5ndGggPT09IDEgPyByLmNhbGwoaSwgb1swXSkgOiByLmFwcGx5KGksIG8pLCBtbyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIG1vID0gdm9pZCAwO1xuICAgICAgfSwgZik7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gYm0oKSB7XG4gIGNsZWFyVGltZW91dChtbyksIG1vID0gdm9pZCAwO1xufVxuZnVuY3Rpb24gemQociwgZiwgbykge1xuICByLnNjcm9sbExlZnQgKz0gZiwgci5zY3JvbGxUb3AgKz0gbztcbn1cbmZ1bmN0aW9uIFZkKHIpIHtcbiAgdmFyIGYgPSB3aW5kb3cuUG9seW1lciwgbyA9IHdpbmRvdy5qUXVlcnkgfHwgd2luZG93LlplcHRvO1xuICByZXR1cm4gZiAmJiBmLmRvbSA/IGYuZG9tKHIpLmNsb25lTm9kZSghMCkgOiBvID8gbyhyKS5jbG9uZSghMClbMF0gOiByLmNsb25lTm9kZSghMCk7XG59XG52YXIgU24gPSBcIlNvcnRhYmxlXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbmZ1bmN0aW9uIENtKCkge1xuICB2YXIgciA9IFtdLCBmO1xuICByZXR1cm4ge1xuICAgIGNhcHR1cmVBbmltYXRpb25TdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAociA9IFtdLCAhIXRoaXMub3B0aW9ucy5hbmltYXRpb24pIHtcbiAgICAgICAgdmFyIGkgPSBbXS5zbGljZS5jYWxsKHRoaXMuZWwuY2hpbGRyZW4pO1xuICAgICAgICBpLmZvckVhY2goZnVuY3Rpb24odCkge1xuICAgICAgICAgIGlmICghKFdlKHQsIFwiZGlzcGxheVwiKSA9PT0gXCJub25lXCIgfHwgdCA9PT0gR2UuZ2hvc3QpKSB7XG4gICAgICAgICAgICByLnB1c2goe1xuICAgICAgICAgICAgICB0YXJnZXQ6IHQsXG4gICAgICAgICAgICAgIHJlY3Q6IFd0KHQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzID0gSm4oe30sIHJbci5sZW5ndGggLSAxXS5yZWN0KTtcbiAgICAgICAgICAgIGlmICh0LnRoaXNBbmltYXRpb25EdXJhdGlvbikge1xuICAgICAgICAgICAgICB2YXIgZCA9IFRpKHQsICEwKTtcbiAgICAgICAgICAgICAgZCAmJiAocy50b3AgLT0gZC5mLCBzLmxlZnQgLT0gZC5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQuZnJvbVJlY3QgPSBzO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBhZGRBbmltYXRpb25TdGF0ZTogZnVuY3Rpb24oaSkge1xuICAgICAgci5wdXNoKGkpO1xuICAgIH0sXG4gICAgcmVtb3ZlQW5pbWF0aW9uU3RhdGU6IGZ1bmN0aW9uKGkpIHtcbiAgICAgIHIuc3BsaWNlKHltKHIsIHtcbiAgICAgICAgdGFyZ2V0OiBpXG4gICAgICB9KSwgMSk7XG4gICAgfSxcbiAgICBhbmltYXRlQWxsOiBmdW5jdGlvbihpKSB7XG4gICAgICB2YXIgdCA9IHRoaXM7XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5hbmltYXRpb24pIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGYpLCB0eXBlb2YgaSA9PSBcImZ1bmN0aW9uXCIgJiYgaSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgcyA9ICExLCBkID0gMDtcbiAgICAgIHIuZm9yRWFjaChmdW5jdGlvbihjKSB7XG4gICAgICAgIHZhciBwID0gMCwgdiA9IGMudGFyZ2V0LCBiID0gdi5mcm9tUmVjdCwgUyA9IFd0KHYpLCBEID0gdi5wcmV2RnJvbVJlY3QsIFQgPSB2LnByZXZUb1JlY3QsIG0gPSBjLnJlY3QsIHggPSBUaSh2LCAhMCk7XG4gICAgICAgIHggJiYgKFMudG9wIC09IHguZiwgUy5sZWZ0IC09IHguZSksIHYudG9SZWN0ID0gUywgdi50aGlzQW5pbWF0aW9uRHVyYXRpb24gJiYgZnMoRCwgUykgJiYgIWZzKGIsIFMpICYmIChtLnRvcCAtIFMudG9wKSAvIChtLmxlZnQgLSBTLmxlZnQpID09PSAoYi50b3AgLSBTLnRvcCkgLyAoYi5sZWZ0IC0gUy5sZWZ0KSAmJiAocCA9IFNtKG0sIEQsIFQsIHQub3B0aW9ucykpLCBmcyhTLCBiKSB8fCAodi5wcmV2RnJvbVJlY3QgPSBiLCB2LnByZXZUb1JlY3QgPSBTLCBwIHx8IChwID0gdC5vcHRpb25zLmFuaW1hdGlvbiksIHQuYW5pbWF0ZSh2LCBtLCBTLCBwKSksIHAgJiYgKHMgPSAhMCwgZCA9IE1hdGgubWF4KGQsIHApLCBjbGVhclRpbWVvdXQodi5hbmltYXRpb25SZXNldFRpbWVyKSwgdi5hbmltYXRpb25SZXNldFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICB2LmFuaW1hdGlvblRpbWUgPSAwLCB2LnByZXZGcm9tUmVjdCA9IG51bGwsIHYuZnJvbVJlY3QgPSBudWxsLCB2LnByZXZUb1JlY3QgPSBudWxsLCB2LnRoaXNBbmltYXRpb25EdXJhdGlvbiA9IG51bGw7XG4gICAgICAgIH0sIHApLCB2LnRoaXNBbmltYXRpb25EdXJhdGlvbiA9IHApO1xuICAgICAgfSksIGNsZWFyVGltZW91dChmKSwgcyA/IGYgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICB0eXBlb2YgaSA9PSBcImZ1bmN0aW9uXCIgJiYgaSgpO1xuICAgICAgfSwgZCkgOiB0eXBlb2YgaSA9PSBcImZ1bmN0aW9uXCIgJiYgaSgpLCByID0gW107XG4gICAgfSxcbiAgICBhbmltYXRlOiBmdW5jdGlvbihpLCB0LCBzLCBkKSB7XG4gICAgICBpZiAoZCkge1xuICAgICAgICBXZShpLCBcInRyYW5zaXRpb25cIiwgXCJcIiksIFdlKGksIFwidHJhbnNmb3JtXCIsIFwiXCIpO1xuICAgICAgICB2YXIgYyA9IFRpKHRoaXMuZWwpLCBwID0gYyAmJiBjLmEsIHYgPSBjICYmIGMuZCwgYiA9ICh0LmxlZnQgLSBzLmxlZnQpIC8gKHAgfHwgMSksIFMgPSAodC50b3AgLSBzLnRvcCkgLyAodiB8fCAxKTtcbiAgICAgICAgaS5hbmltYXRpbmdYID0gISFiLCBpLmFuaW1hdGluZ1kgPSAhIVMsIFdlKGksIFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlM2QoXCIgKyBiICsgXCJweCxcIiArIFMgKyBcInB4LDApXCIpLCB0aGlzLmZvclJlcGFpbnREdW1teSA9IEVtKGkpLCBXZShpLCBcInRyYW5zaXRpb25cIiwgXCJ0cmFuc2Zvcm0gXCIgKyBkICsgXCJtc1wiICsgKHRoaXMub3B0aW9ucy5lYXNpbmcgPyBcIiBcIiArIHRoaXMub3B0aW9ucy5lYXNpbmcgOiBcIlwiKSksIFdlKGksIFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlM2QoMCwwLDApXCIpLCB0eXBlb2YgaS5hbmltYXRlZCA9PSBcIm51bWJlclwiICYmIGNsZWFyVGltZW91dChpLmFuaW1hdGVkKSwgaS5hbmltYXRlZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgV2UoaSwgXCJ0cmFuc2l0aW9uXCIsIFwiXCIpLCBXZShpLCBcInRyYW5zZm9ybVwiLCBcIlwiKSwgaS5hbmltYXRlZCA9ICExLCBpLmFuaW1hdGluZ1ggPSAhMSwgaS5hbmltYXRpbmdZID0gITE7XG4gICAgICAgIH0sIGQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIEVtKHIpIHtcbiAgcmV0dXJuIHIub2Zmc2V0V2lkdGg7XG59XG5mdW5jdGlvbiBTbShyLCBmLCBvLCBpKSB7XG4gIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coZi50b3AgLSByLnRvcCwgMikgKyBNYXRoLnBvdyhmLmxlZnQgLSByLmxlZnQsIDIpKSAvIE1hdGguc3FydChNYXRoLnBvdyhmLnRvcCAtIG8udG9wLCAyKSArIE1hdGgucG93KGYubGVmdCAtIG8ubGVmdCwgMikpICogaS5hbmltYXRpb247XG59XG52YXIgQWkgPSBbXSwgZHMgPSB7XG4gIGluaXRpYWxpemVCeURlZmF1bHQ6ICEwXG59LCBUbyA9IHtcbiAgbW91bnQ6IGZ1bmN0aW9uKGYpIHtcbiAgICBmb3IgKHZhciBvIGluIGRzKVxuICAgICAgZHMuaGFzT3duUHJvcGVydHkobykgJiYgIShvIGluIGYpICYmIChmW29dID0gZHNbb10pO1xuICAgIEFpLmZvckVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgaWYgKGkucGx1Z2luTmFtZSA9PT0gZi5wbHVnaW5OYW1lKVxuICAgICAgICB0aHJvdyBcIlNvcnRhYmxlOiBDYW5ub3QgbW91bnQgcGx1Z2luIFwiLmNvbmNhdChmLnBsdWdpbk5hbWUsIFwiIG1vcmUgdGhhbiBvbmNlXCIpO1xuICAgIH0pLCBBaS5wdXNoKGYpO1xuICB9LFxuICBwbHVnaW5FdmVudDogZnVuY3Rpb24oZiwgbywgaSkge1xuICAgIHZhciB0ID0gdGhpcztcbiAgICB0aGlzLmV2ZW50Q2FuY2VsZWQgPSAhMSwgaS5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgIHQuZXZlbnRDYW5jZWxlZCA9ICEwO1xuICAgIH07XG4gICAgdmFyIHMgPSBmICsgXCJHbG9iYWxcIjtcbiAgICBBaS5mb3JFYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICFvW2QucGx1Z2luTmFtZV0gfHwgKG9bZC5wbHVnaW5OYW1lXVtzXSAmJiBvW2QucGx1Z2luTmFtZV1bc10oSm4oe1xuICAgICAgICBzb3J0YWJsZTogb1xuICAgICAgfSwgaSkpLCBvLm9wdGlvbnNbZC5wbHVnaW5OYW1lXSAmJiBvW2QucGx1Z2luTmFtZV1bZl0gJiYgb1tkLnBsdWdpbk5hbWVdW2ZdKEpuKHtcbiAgICAgICAgc29ydGFibGU6IG9cbiAgICAgIH0sIGkpKSk7XG4gICAgfSk7XG4gIH0sXG4gIGluaXRpYWxpemVQbHVnaW5zOiBmdW5jdGlvbihmLCBvLCBpLCB0KSB7XG4gICAgQWkuZm9yRWFjaChmdW5jdGlvbihjKSB7XG4gICAgICB2YXIgcCA9IGMucGx1Z2luTmFtZTtcbiAgICAgIGlmICghKCFmLm9wdGlvbnNbcF0gJiYgIWMuaW5pdGlhbGl6ZUJ5RGVmYXVsdCkpIHtcbiAgICAgICAgdmFyIHYgPSBuZXcgYyhmLCBvLCBmLm9wdGlvbnMpO1xuICAgICAgICB2LnNvcnRhYmxlID0gZiwgdi5vcHRpb25zID0gZi5vcHRpb25zLCBmW3BdID0gdiwgdXIoaSwgdi5kZWZhdWx0cyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9yICh2YXIgcyBpbiBmLm9wdGlvbnMpXG4gICAgICBpZiAoISFmLm9wdGlvbnMuaGFzT3duUHJvcGVydHkocykpIHtcbiAgICAgICAgdmFyIGQgPSB0aGlzLm1vZGlmeU9wdGlvbihmLCBzLCBmLm9wdGlvbnNbc10pO1xuICAgICAgICB0eXBlb2YgZCA8IFwidVwiICYmIChmLm9wdGlvbnNbc10gPSBkKTtcbiAgICAgIH1cbiAgfSxcbiAgZ2V0RXZlbnRQcm9wZXJ0aWVzOiBmdW5jdGlvbihmLCBvKSB7XG4gICAgdmFyIGkgPSB7fTtcbiAgICByZXR1cm4gQWkuZm9yRWFjaChmdW5jdGlvbih0KSB7XG4gICAgICB0eXBlb2YgdC5ldmVudFByb3BlcnRpZXMgPT0gXCJmdW5jdGlvblwiICYmIHVyKGksIHQuZXZlbnRQcm9wZXJ0aWVzLmNhbGwob1t0LnBsdWdpbk5hbWVdLCBmKSk7XG4gICAgfSksIGk7XG4gIH0sXG4gIG1vZGlmeU9wdGlvbjogZnVuY3Rpb24oZiwgbywgaSkge1xuICAgIHZhciB0O1xuICAgIHJldHVybiBBaS5mb3JFYWNoKGZ1bmN0aW9uKHMpIHtcbiAgICAgICFmW3MucGx1Z2luTmFtZV0gfHwgcy5vcHRpb25MaXN0ZW5lcnMgJiYgdHlwZW9mIHMub3B0aW9uTGlzdGVuZXJzW29dID09IFwiZnVuY3Rpb25cIiAmJiAodCA9IHMub3B0aW9uTGlzdGVuZXJzW29dLmNhbGwoZltzLnBsdWdpbk5hbWVdLCBpKSk7XG4gICAgfSksIHQ7XG4gIH1cbn07XG5mdW5jdGlvbiB4bShyKSB7XG4gIHZhciBmID0gci5zb3J0YWJsZSwgbyA9IHIucm9vdEVsLCBpID0gci5uYW1lLCB0ID0gci50YXJnZXRFbCwgcyA9IHIuY2xvbmVFbCwgZCA9IHIudG9FbCwgYyA9IHIuZnJvbUVsLCBwID0gci5vbGRJbmRleCwgdiA9IHIubmV3SW5kZXgsIGIgPSByLm9sZERyYWdnYWJsZUluZGV4LCBTID0gci5uZXdEcmFnZ2FibGVJbmRleCwgRCA9IHIub3JpZ2luYWxFdmVudCwgVCA9IHIucHV0U29ydGFibGUsIG0gPSByLmV4dHJhRXZlbnRQcm9wZXJ0aWVzO1xuICBpZiAoZiA9IGYgfHwgbyAmJiBvW1NuXSwgISFmKSB7XG4gICAgdmFyIHgsIFIgPSBmLm9wdGlvbnMsIHcgPSBcIm9uXCIgKyBpLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgaS5zdWJzdHIoMSk7XG4gICAgd2luZG93LkN1c3RvbUV2ZW50ICYmICFmciAmJiAhd28gPyB4ID0gbmV3IEN1c3RvbUV2ZW50KGksIHtcbiAgICAgIGJ1YmJsZXM6ICEwLFxuICAgICAgY2FuY2VsYWJsZTogITBcbiAgICB9KSA6ICh4ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKSwgeC5pbml0RXZlbnQoaSwgITAsICEwKSksIHgudG8gPSBkIHx8IG8sIHguZnJvbSA9IGMgfHwgbywgeC5pdGVtID0gdCB8fCBvLCB4LmNsb25lID0gcywgeC5vbGRJbmRleCA9IHAsIHgubmV3SW5kZXggPSB2LCB4Lm9sZERyYWdnYWJsZUluZGV4ID0gYiwgeC5uZXdEcmFnZ2FibGVJbmRleCA9IFMsIHgub3JpZ2luYWxFdmVudCA9IEQsIHgucHVsbE1vZGUgPSBUID8gVC5sYXN0UHV0TW9kZSA6IHZvaWQgMDtcbiAgICB2YXIgQSA9IEpuKEpuKHt9LCBtKSwgVG8uZ2V0RXZlbnRQcm9wZXJ0aWVzKGksIGYpKTtcbiAgICBmb3IgKHZhciBFIGluIEEpXG4gICAgICB4W0VdID0gQVtFXTtcbiAgICBvICYmIG8uZGlzcGF0Y2hFdmVudCh4KSwgUlt3XSAmJiBSW3ddLmNhbGwoZiwgeCk7XG4gIH1cbn1cbnZhciB3bSA9IFtcImV2dFwiXSwgcG4gPSBmdW5jdGlvbihmLCBvKSB7XG4gIHZhciBpID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMl0gOiB7fSwgdCA9IGkuZXZ0LCBzID0gaG0oaSwgd20pO1xuICBUby5wbHVnaW5FdmVudC5iaW5kKEdlKShmLCBvLCBKbih7XG4gICAgZHJhZ0VsOiBTZSxcbiAgICBwYXJlbnRFbDogRHQsXG4gICAgZ2hvc3RFbDogSmUsXG4gICAgcm9vdEVsOiBFdCxcbiAgICBuZXh0RWw6IEdyLFxuICAgIGxhc3REb3duRWw6IHlhLFxuICAgIGNsb25lRWw6IFJ0LFxuICAgIGNsb25lSGlkZGVuOiBEcixcbiAgICBkcmFnU3RhcnRlZDogdW8sXG4gICAgcHV0U29ydGFibGU6IEt0LFxuICAgIGFjdGl2ZVNvcnRhYmxlOiBHZS5hY3RpdmUsXG4gICAgb3JpZ2luYWxFdmVudDogdCxcbiAgICBvbGRJbmRleDogd2ksXG4gICAgb2xkRHJhZ2dhYmxlSW5kZXg6IGdvLFxuICAgIG5ld0luZGV4OiBFbixcbiAgICBuZXdEcmFnZ2FibGVJbmRleDogVHIsXG4gICAgaGlkZUdob3N0Rm9yVGFyZ2V0OiBZZCxcbiAgICB1bmhpZGVHaG9zdEZvclRhcmdldDogS2QsXG4gICAgY2xvbmVOb3dIaWRkZW46IGZ1bmN0aW9uKCkge1xuICAgICAgRHIgPSAhMDtcbiAgICB9LFxuICAgIGNsb25lTm93U2hvd246IGZ1bmN0aW9uKCkge1xuICAgICAgRHIgPSAhMTtcbiAgICB9LFxuICAgIGRpc3BhdGNoU29ydGFibGVFdmVudDogZnVuY3Rpb24oYykge1xuICAgICAgbG4oe1xuICAgICAgICBzb3J0YWJsZTogbyxcbiAgICAgICAgbmFtZTogYyxcbiAgICAgICAgb3JpZ2luYWxFdmVudDogdFxuICAgICAgfSk7XG4gICAgfVxuICB9LCBzKSk7XG59O1xuZnVuY3Rpb24gbG4ocikge1xuICB4bShKbih7XG4gICAgcHV0U29ydGFibGU6IEt0LFxuICAgIGNsb25lRWw6IFJ0LFxuICAgIHRhcmdldEVsOiBTZSxcbiAgICByb290RWw6IEV0LFxuICAgIG9sZEluZGV4OiB3aSxcbiAgICBvbGREcmFnZ2FibGVJbmRleDogZ28sXG4gICAgbmV3SW5kZXg6IEVuLFxuICAgIG5ld0RyYWdnYWJsZUluZGV4OiBUclxuICB9LCByKSk7XG59XG52YXIgU2UsIER0LCBKZSwgRXQsIEdyLCB5YSwgUnQsIERyLCB3aSwgRW4sIGdvLCBUciwgdWEsIEt0LCBFaSA9ICExLCB4YSA9ICExLCB3YSA9IFtdLCBWciwgQm4sIGNzLCBwcywgZmQsIGRkLCB1bywgYmksIHlvLCBBbyA9ICExLCBmYSA9ICExLCBBYSwgcXQsIGhzID0gW10sIERzID0gITEsIFRhID0gW10sIE5hID0gdHlwZW9mIGRvY3VtZW50IDwgXCJ1XCIsIGRhID0gJGQsIGNkID0gd28gfHwgZnIgPyBcImNzc0Zsb2F0XCIgOiBcImZsb2F0XCIsIFRtID0gTmEgJiYgIW1tICYmICEkZCAmJiBcImRyYWdnYWJsZVwiIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIFdkID0gZnVuY3Rpb24oKSB7XG4gIGlmICghIU5hKSB7XG4gICAgaWYgKGZyKVxuICAgICAgcmV0dXJuICExO1xuICAgIHZhciByID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInhcIik7XG4gICAgcmV0dXJuIHIuc3R5bGUuY3NzVGV4dCA9IFwicG9pbnRlci1ldmVudHM6YXV0b1wiLCByLnN0eWxlLnBvaW50ZXJFdmVudHMgPT09IFwiYXV0b1wiO1xuICB9XG59KCksIEdkID0gZnVuY3Rpb24oZiwgbykge1xuICB2YXIgaSA9IFdlKGYpLCB0ID0gcGFyc2VJbnQoaS53aWR0aCkgLSBwYXJzZUludChpLnBhZGRpbmdMZWZ0KSAtIHBhcnNlSW50KGkucGFkZGluZ1JpZ2h0KSAtIHBhcnNlSW50KGkuYm9yZGVyTGVmdFdpZHRoKSAtIHBhcnNlSW50KGkuYm9yZGVyUmlnaHRXaWR0aCksIHMgPSBSaShmLCAwLCBvKSwgZCA9IFJpKGYsIDEsIG8pLCBjID0gcyAmJiBXZShzKSwgcCA9IGQgJiYgV2UoZCksIHYgPSBjICYmIHBhcnNlSW50KGMubWFyZ2luTGVmdCkgKyBwYXJzZUludChjLm1hcmdpblJpZ2h0KSArIFd0KHMpLndpZHRoLCBiID0gcCAmJiBwYXJzZUludChwLm1hcmdpbkxlZnQpICsgcGFyc2VJbnQocC5tYXJnaW5SaWdodCkgKyBXdChkKS53aWR0aDtcbiAgaWYgKGkuZGlzcGxheSA9PT0gXCJmbGV4XCIpXG4gICAgcmV0dXJuIGkuZmxleERpcmVjdGlvbiA9PT0gXCJjb2x1bW5cIiB8fCBpLmZsZXhEaXJlY3Rpb24gPT09IFwiY29sdW1uLXJldmVyc2VcIiA/IFwidmVydGljYWxcIiA6IFwiaG9yaXpvbnRhbFwiO1xuICBpZiAoaS5kaXNwbGF5ID09PSBcImdyaWRcIilcbiAgICByZXR1cm4gaS5ncmlkVGVtcGxhdGVDb2x1bW5zLnNwbGl0KFwiIFwiKS5sZW5ndGggPD0gMSA/IFwidmVydGljYWxcIiA6IFwiaG9yaXpvbnRhbFwiO1xuICBpZiAocyAmJiBjLmZsb2F0ICYmIGMuZmxvYXQgIT09IFwibm9uZVwiKSB7XG4gICAgdmFyIFMgPSBjLmZsb2F0ID09PSBcImxlZnRcIiA/IFwibGVmdFwiIDogXCJyaWdodFwiO1xuICAgIHJldHVybiBkICYmIChwLmNsZWFyID09PSBcImJvdGhcIiB8fCBwLmNsZWFyID09PSBTKSA/IFwidmVydGljYWxcIiA6IFwiaG9yaXpvbnRhbFwiO1xuICB9XG4gIHJldHVybiBzICYmIChjLmRpc3BsYXkgPT09IFwiYmxvY2tcIiB8fCBjLmRpc3BsYXkgPT09IFwiZmxleFwiIHx8IGMuZGlzcGxheSA9PT0gXCJ0YWJsZVwiIHx8IGMuZGlzcGxheSA9PT0gXCJncmlkXCIgfHwgdiA+PSB0ICYmIGlbY2RdID09PSBcIm5vbmVcIiB8fCBkICYmIGlbY2RdID09PSBcIm5vbmVcIiAmJiB2ICsgYiA+IHQpID8gXCJ2ZXJ0aWNhbFwiIDogXCJob3Jpem9udGFsXCI7XG59LCBEbSA9IGZ1bmN0aW9uKGYsIG8sIGkpIHtcbiAgdmFyIHQgPSBpID8gZi5sZWZ0IDogZi50b3AsIHMgPSBpID8gZi5yaWdodCA6IGYuYm90dG9tLCBkID0gaSA/IGYud2lkdGggOiBmLmhlaWdodCwgYyA9IGkgPyBvLmxlZnQgOiBvLnRvcCwgcCA9IGkgPyBvLnJpZ2h0IDogby5ib3R0b20sIHYgPSBpID8gby53aWR0aCA6IG8uaGVpZ2h0O1xuICByZXR1cm4gdCA9PT0gYyB8fCBzID09PSBwIHx8IHQgKyBkIC8gMiA9PT0gYyArIHYgLyAyO1xufSwgUm0gPSBmdW5jdGlvbihmLCBvKSB7XG4gIHZhciBpO1xuICByZXR1cm4gd2Euc29tZShmdW5jdGlvbih0KSB7XG4gICAgdmFyIHMgPSB0W1NuXS5vcHRpb25zLmVtcHR5SW5zZXJ0VGhyZXNob2xkO1xuICAgIGlmICghKCFzIHx8IEZzKHQpKSkge1xuICAgICAgdmFyIGQgPSBXdCh0KSwgYyA9IGYgPj0gZC5sZWZ0IC0gcyAmJiBmIDw9IGQucmlnaHQgKyBzLCBwID0gbyA+PSBkLnRvcCAtIHMgJiYgbyA8PSBkLmJvdHRvbSArIHM7XG4gICAgICBpZiAoYyAmJiBwKVxuICAgICAgICByZXR1cm4gaSA9IHQ7XG4gICAgfVxuICB9KSwgaTtcbn0sIFFkID0gZnVuY3Rpb24oZikge1xuICBmdW5jdGlvbiBvKHMsIGQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYywgcCwgdiwgYikge1xuICAgICAgdmFyIFMgPSBjLm9wdGlvbnMuZ3JvdXAubmFtZSAmJiBwLm9wdGlvbnMuZ3JvdXAubmFtZSAmJiBjLm9wdGlvbnMuZ3JvdXAubmFtZSA9PT0gcC5vcHRpb25zLmdyb3VwLm5hbWU7XG4gICAgICBpZiAocyA9PSBudWxsICYmIChkIHx8IFMpKVxuICAgICAgICByZXR1cm4gITA7XG4gICAgICBpZiAocyA9PSBudWxsIHx8IHMgPT09ICExKVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICBpZiAoZCAmJiBzID09PSBcImNsb25lXCIpXG4gICAgICAgIHJldHVybiBzO1xuICAgICAgaWYgKHR5cGVvZiBzID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgcmV0dXJuIG8ocyhjLCBwLCB2LCBiKSwgZCkoYywgcCwgdiwgYik7XG4gICAgICB2YXIgRCA9IChkID8gYyA6IHApLm9wdGlvbnMuZ3JvdXAubmFtZTtcbiAgICAgIHJldHVybiBzID09PSAhMCB8fCB0eXBlb2YgcyA9PSBcInN0cmluZ1wiICYmIHMgPT09IEQgfHwgcy5qb2luICYmIHMuaW5kZXhPZihEKSA+IC0xO1xuICAgIH07XG4gIH1cbiAgdmFyIGkgPSB7fSwgdCA9IGYuZ3JvdXA7XG4gICghdCB8fCBnYSh0KSAhPSBcIm9iamVjdFwiKSAmJiAodCA9IHtcbiAgICBuYW1lOiB0XG4gIH0pLCBpLm5hbWUgPSB0Lm5hbWUsIGkuY2hlY2tQdWxsID0gbyh0LnB1bGwsICEwKSwgaS5jaGVja1B1dCA9IG8odC5wdXQpLCBpLnJldmVydENsb25lID0gdC5yZXZlcnRDbG9uZSwgZi5ncm91cCA9IGk7XG59LCBZZCA9IGZ1bmN0aW9uKCkge1xuICAhV2QgJiYgSmUgJiYgV2UoSmUsIFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XG59LCBLZCA9IGZ1bmN0aW9uKCkge1xuICAhV2QgJiYgSmUgJiYgV2UoSmUsIFwiZGlzcGxheVwiLCBcIlwiKTtcbn07XG5OYSAmJiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24ocikge1xuICBpZiAoeGEpXG4gICAgcmV0dXJuIHIucHJldmVudERlZmF1bHQoKSwgci5zdG9wUHJvcGFnYXRpb24gJiYgci5zdG9wUHJvcGFnYXRpb24oKSwgci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gJiYgci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSwgeGEgPSAhMSwgITE7XG59LCAhMCk7XG52YXIgV3IgPSBmdW5jdGlvbihmKSB7XG4gIGlmIChTZSkge1xuICAgIGYgPSBmLnRvdWNoZXMgPyBmLnRvdWNoZXNbMF0gOiBmO1xuICAgIHZhciBvID0gUm0oZi5jbGllbnRYLCBmLmNsaWVudFkpO1xuICAgIGlmIChvKSB7XG4gICAgICB2YXIgaSA9IHt9O1xuICAgICAgZm9yICh2YXIgdCBpbiBmKVxuICAgICAgICBmLmhhc093blByb3BlcnR5KHQpICYmIChpW3RdID0gZlt0XSk7XG4gICAgICBpLnRhcmdldCA9IGkucm9vdEVsID0gbywgaS5wcmV2ZW50RGVmYXVsdCA9IHZvaWQgMCwgaS5zdG9wUHJvcGFnYXRpb24gPSB2b2lkIDAsIG9bU25dLl9vbkRyYWdPdmVyKGkpO1xuICAgIH1cbiAgfVxufSwgTW0gPSBmdW5jdGlvbihmKSB7XG4gIFNlICYmIFNlLnBhcmVudE5vZGVbU25dLl9pc091dHNpZGVUaGlzRWwoZi50YXJnZXQpO1xufTtcbmZ1bmN0aW9uIEdlKHIsIGYpIHtcbiAgaWYgKCEociAmJiByLm5vZGVUeXBlICYmIHIubm9kZVR5cGUgPT09IDEpKVxuICAgIHRocm93IFwiU29ydGFibGU6IGBlbGAgbXVzdCBiZSBhbiBIVE1MRWxlbWVudCwgbm90IFwiLmNvbmNhdCh7fS50b1N0cmluZy5jYWxsKHIpKTtcbiAgdGhpcy5lbCA9IHIsIHRoaXMub3B0aW9ucyA9IGYgPSB1cih7fSwgZiksIHJbU25dID0gdGhpcztcbiAgdmFyIG8gPSB7XG4gICAgZ3JvdXA6IG51bGwsXG4gICAgc29ydDogITAsXG4gICAgZGlzYWJsZWQ6ICExLFxuICAgIHN0b3JlOiBudWxsLFxuICAgIGhhbmRsZTogbnVsbCxcbiAgICBkcmFnZ2FibGU6IC9eW3VvXWwkL2kudGVzdChyLm5vZGVOYW1lKSA/IFwiPmxpXCIgOiBcIj4qXCIsXG4gICAgc3dhcFRocmVzaG9sZDogMSxcbiAgICBpbnZlcnRTd2FwOiAhMSxcbiAgICBpbnZlcnRlZFN3YXBUaHJlc2hvbGQ6IG51bGwsXG4gICAgcmVtb3ZlQ2xvbmVPbkhpZGU6ICEwLFxuICAgIGRpcmVjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gR2QociwgdGhpcy5vcHRpb25zKTtcbiAgICB9LFxuICAgIGdob3N0Q2xhc3M6IFwic29ydGFibGUtZ2hvc3RcIixcbiAgICBjaG9zZW5DbGFzczogXCJzb3J0YWJsZS1jaG9zZW5cIixcbiAgICBkcmFnQ2xhc3M6IFwic29ydGFibGUtZHJhZ1wiLFxuICAgIGlnbm9yZTogXCJhLCBpbWdcIixcbiAgICBmaWx0ZXI6IG51bGwsXG4gICAgcHJldmVudE9uRmlsdGVyOiAhMCxcbiAgICBhbmltYXRpb246IDAsXG4gICAgZWFzaW5nOiBudWxsLFxuICAgIHNldERhdGE6IGZ1bmN0aW9uKGQsIGMpIHtcbiAgICAgIGQuc2V0RGF0YShcIlRleHRcIiwgYy50ZXh0Q29udGVudCk7XG4gICAgfSxcbiAgICBkcm9wQnViYmxlOiAhMSxcbiAgICBkcmFnb3ZlckJ1YmJsZTogITEsXG4gICAgZGF0YUlkQXR0cjogXCJkYXRhLWlkXCIsXG4gICAgZGVsYXk6IDAsXG4gICAgZGVsYXlPblRvdWNoT25seTogITEsXG4gICAgdG91Y2hTdGFydFRocmVzaG9sZDogKE51bWJlci5wYXJzZUludCA/IE51bWJlciA6IHdpbmRvdykucGFyc2VJbnQod2luZG93LmRldmljZVBpeGVsUmF0aW8sIDEwKSB8fCAxLFxuICAgIGZvcmNlRmFsbGJhY2s6ICExLFxuICAgIGZhbGxiYWNrQ2xhc3M6IFwic29ydGFibGUtZmFsbGJhY2tcIixcbiAgICBmYWxsYmFja09uQm9keTogITEsXG4gICAgZmFsbGJhY2tUb2xlcmFuY2U6IDAsXG4gICAgZmFsbGJhY2tPZmZzZXQ6IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfSxcbiAgICBzdXBwb3J0UG9pbnRlcjogR2Uuc3VwcG9ydFBvaW50ZXIgIT09ICExICYmIFwiUG9pbnRlckV2ZW50XCIgaW4gd2luZG93ICYmICF2byxcbiAgICBlbXB0eUluc2VydFRocmVzaG9sZDogNVxuICB9O1xuICBUby5pbml0aWFsaXplUGx1Z2lucyh0aGlzLCByLCBvKTtcbiAgZm9yICh2YXIgaSBpbiBvKVxuICAgICEoaSBpbiBmKSAmJiAoZltpXSA9IG9baV0pO1xuICBRZChmKTtcbiAgZm9yICh2YXIgdCBpbiB0aGlzKVxuICAgIHQuY2hhckF0KDApID09PSBcIl9cIiAmJiB0eXBlb2YgdGhpc1t0XSA9PSBcImZ1bmN0aW9uXCIgJiYgKHRoaXNbdF0gPSB0aGlzW3RdLmJpbmQodGhpcykpO1xuICB0aGlzLm5hdGl2ZURyYWdnYWJsZSA9IGYuZm9yY2VGYWxsYmFjayA/ICExIDogVG0sIHRoaXMubmF0aXZlRHJhZ2dhYmxlICYmICh0aGlzLm9wdGlvbnMudG91Y2hTdGFydFRocmVzaG9sZCA9IDEpLCBmLnN1cHBvcnRQb2ludGVyID8gZHQociwgXCJwb2ludGVyZG93blwiLCB0aGlzLl9vblRhcFN0YXJ0KSA6IChkdChyLCBcIm1vdXNlZG93blwiLCB0aGlzLl9vblRhcFN0YXJ0KSwgZHQociwgXCJ0b3VjaHN0YXJ0XCIsIHRoaXMuX29uVGFwU3RhcnQpKSwgdGhpcy5uYXRpdmVEcmFnZ2FibGUgJiYgKGR0KHIsIFwiZHJhZ292ZXJcIiwgdGhpcyksIGR0KHIsIFwiZHJhZ2VudGVyXCIsIHRoaXMpKSwgd2EucHVzaCh0aGlzLmVsKSwgZi5zdG9yZSAmJiBmLnN0b3JlLmdldCAmJiB0aGlzLnNvcnQoZi5zdG9yZS5nZXQodGhpcykgfHwgW10pLCB1cih0aGlzLCBDbSgpKTtcbn1cbkdlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IEdlLFxuICBfaXNPdXRzaWRlVGhpc0VsOiBmdW5jdGlvbihmKSB7XG4gICAgIXRoaXMuZWwuY29udGFpbnMoZikgJiYgZiAhPT0gdGhpcy5lbCAmJiAoYmkgPSBudWxsKTtcbiAgfSxcbiAgX2dldERpcmVjdGlvbjogZnVuY3Rpb24oZiwgbykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5vcHRpb25zLmRpcmVjdGlvbiA9PSBcImZ1bmN0aW9uXCIgPyB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uLmNhbGwodGhpcywgZiwgbywgU2UpIDogdGhpcy5vcHRpb25zLmRpcmVjdGlvbjtcbiAgfSxcbiAgX29uVGFwU3RhcnQ6IGZ1bmN0aW9uKGYpIHtcbiAgICBpZiAoISFmLmNhbmNlbGFibGUpIHtcbiAgICAgIHZhciBvID0gdGhpcywgaSA9IHRoaXMuZWwsIHQgPSB0aGlzLm9wdGlvbnMsIHMgPSB0LnByZXZlbnRPbkZpbHRlciwgZCA9IGYudHlwZSwgYyA9IGYudG91Y2hlcyAmJiBmLnRvdWNoZXNbMF0gfHwgZi5wb2ludGVyVHlwZSAmJiBmLnBvaW50ZXJUeXBlID09PSBcInRvdWNoXCIgJiYgZiwgcCA9IChjIHx8IGYpLnRhcmdldCwgdiA9IGYudGFyZ2V0LnNoYWRvd1Jvb3QgJiYgKGYucGF0aCAmJiBmLnBhdGhbMF0gfHwgZi5jb21wb3NlZFBhdGggJiYgZi5jb21wb3NlZFBhdGgoKVswXSkgfHwgcCwgYiA9IHQuZmlsdGVyO1xuICAgICAgaWYgKEhtKGkpLCAhU2UgJiYgISgvbW91c2Vkb3dufHBvaW50ZXJkb3duLy50ZXN0KGQpICYmIGYuYnV0dG9uICE9PSAwIHx8IHQuZGlzYWJsZWQpICYmICF2LmlzQ29udGVudEVkaXRhYmxlICYmICEoIXRoaXMubmF0aXZlRHJhZ2dhYmxlICYmIHZvICYmIHAgJiYgcC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09IFwiU0VMRUNUXCIpICYmIChwID0gS24ocCwgdC5kcmFnZ2FibGUsIGksICExKSwgIShwICYmIHAuYW5pbWF0ZWQpICYmIHlhICE9PSBwKSkge1xuICAgICAgICBpZiAod2kgPSBSbihwKSwgZ28gPSBSbihwLCB0LmRyYWdnYWJsZSksIHR5cGVvZiBiID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGlmIChiLmNhbGwodGhpcywgZiwgcCwgdGhpcykpIHtcbiAgICAgICAgICAgIGxuKHtcbiAgICAgICAgICAgICAgc29ydGFibGU6IG8sXG4gICAgICAgICAgICAgIHJvb3RFbDogdixcbiAgICAgICAgICAgICAgbmFtZTogXCJmaWx0ZXJcIixcbiAgICAgICAgICAgICAgdGFyZ2V0RWw6IHAsXG4gICAgICAgICAgICAgIHRvRWw6IGksXG4gICAgICAgICAgICAgIGZyb21FbDogaVxuICAgICAgICAgICAgfSksIHBuKFwiZmlsdGVyXCIsIG8sIHtcbiAgICAgICAgICAgICAgZXZ0OiBmXG4gICAgICAgICAgICB9KSwgcyAmJiBmLmNhbmNlbGFibGUgJiYgZi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChiICYmIChiID0gYi5zcGxpdChcIixcIikuc29tZShmdW5jdGlvbihTKSB7XG4gICAgICAgICAgaWYgKFMgPSBLbih2LCBTLnRyaW0oKSwgaSwgITEpLCBTKVxuICAgICAgICAgICAgcmV0dXJuIGxuKHtcbiAgICAgICAgICAgICAgc29ydGFibGU6IG8sXG4gICAgICAgICAgICAgIHJvb3RFbDogUyxcbiAgICAgICAgICAgICAgbmFtZTogXCJmaWx0ZXJcIixcbiAgICAgICAgICAgICAgdGFyZ2V0RWw6IHAsXG4gICAgICAgICAgICAgIGZyb21FbDogaSxcbiAgICAgICAgICAgICAgdG9FbDogaVxuICAgICAgICAgICAgfSksIHBuKFwiZmlsdGVyXCIsIG8sIHtcbiAgICAgICAgICAgICAgZXZ0OiBmXG4gICAgICAgICAgICB9KSwgITA7XG4gICAgICAgIH0pLCBiKSkge1xuICAgICAgICAgIHMgJiYgZi5jYW5jZWxhYmxlICYmIGYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdC5oYW5kbGUgJiYgIUtuKHYsIHQuaGFuZGxlLCBpLCAhMSkgfHwgdGhpcy5fcHJlcGFyZURyYWdTdGFydChmLCBjLCBwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIF9wcmVwYXJlRHJhZ1N0YXJ0OiBmdW5jdGlvbihmLCBvLCBpKSB7XG4gICAgdmFyIHQgPSB0aGlzLCBzID0gdC5lbCwgZCA9IHQub3B0aW9ucywgYyA9IHMub3duZXJEb2N1bWVudCwgcDtcbiAgICBpZiAoaSAmJiAhU2UgJiYgaS5wYXJlbnROb2RlID09PSBzKSB7XG4gICAgICB2YXIgdiA9IFd0KGkpO1xuICAgICAgaWYgKEV0ID0gcywgU2UgPSBpLCBEdCA9IFNlLnBhcmVudE5vZGUsIEdyID0gU2UubmV4dFNpYmxpbmcsIHlhID0gaSwgdWEgPSBkLmdyb3VwLCBHZS5kcmFnZ2VkID0gU2UsIFZyID0ge1xuICAgICAgICB0YXJnZXQ6IFNlLFxuICAgICAgICBjbGllbnRYOiAobyB8fCBmKS5jbGllbnRYLFxuICAgICAgICBjbGllbnRZOiAobyB8fCBmKS5jbGllbnRZXG4gICAgICB9LCBmZCA9IFZyLmNsaWVudFggLSB2LmxlZnQsIGRkID0gVnIuY2xpZW50WSAtIHYudG9wLCB0aGlzLl9sYXN0WCA9IChvIHx8IGYpLmNsaWVudFgsIHRoaXMuX2xhc3RZID0gKG8gfHwgZikuY2xpZW50WSwgU2Uuc3R5bGVbXCJ3aWxsLWNoYW5nZVwiXSA9IFwiYWxsXCIsIHAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHBuKFwiZGVsYXlFbmRlZFwiLCB0LCB7XG4gICAgICAgICAgZXZ0OiBmXG4gICAgICAgIH0pLCBHZS5ldmVudENhbmNlbGVkKSB7XG4gICAgICAgICAgdC5fb25Ecm9wKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHQuX2Rpc2FibGVEZWxheWVkRHJhZ0V2ZW50cygpLCAhYWQgJiYgdC5uYXRpdmVEcmFnZ2FibGUgJiYgKFNlLmRyYWdnYWJsZSA9ICEwKSwgdC5fdHJpZ2dlckRyYWdTdGFydChmLCBvKSwgbG4oe1xuICAgICAgICAgIHNvcnRhYmxlOiB0LFxuICAgICAgICAgIG5hbWU6IFwiY2hvb3NlXCIsXG4gICAgICAgICAgb3JpZ2luYWxFdmVudDogZlxuICAgICAgICB9KSwgYm4oU2UsIGQuY2hvc2VuQ2xhc3MsICEwKTtcbiAgICAgIH0sIGQuaWdub3JlLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgamQoU2UsIGIudHJpbSgpLCB2cyk7XG4gICAgICB9KSwgZHQoYywgXCJkcmFnb3ZlclwiLCBXciksIGR0KGMsIFwibW91c2Vtb3ZlXCIsIFdyKSwgZHQoYywgXCJ0b3VjaG1vdmVcIiwgV3IpLCBkdChjLCBcIm1vdXNldXBcIiwgdC5fb25Ecm9wKSwgZHQoYywgXCJ0b3VjaGVuZFwiLCB0Ll9vbkRyb3ApLCBkdChjLCBcInRvdWNoY2FuY2VsXCIsIHQuX29uRHJvcCksIGFkICYmIHRoaXMubmF0aXZlRHJhZ2dhYmxlICYmICh0aGlzLm9wdGlvbnMudG91Y2hTdGFydFRocmVzaG9sZCA9IDQsIFNlLmRyYWdnYWJsZSA9ICEwKSwgcG4oXCJkZWxheVN0YXJ0XCIsIHRoaXMsIHtcbiAgICAgICAgZXZ0OiBmXG4gICAgICB9KSwgZC5kZWxheSAmJiAoIWQuZGVsYXlPblRvdWNoT25seSB8fCBvKSAmJiAoIXRoaXMubmF0aXZlRHJhZ2dhYmxlIHx8ICEod28gfHwgZnIpKSkge1xuICAgICAgICBpZiAoR2UuZXZlbnRDYW5jZWxlZCkge1xuICAgICAgICAgIHRoaXMuX29uRHJvcCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkdChjLCBcIm1vdXNldXBcIiwgdC5fZGlzYWJsZURlbGF5ZWREcmFnKSwgZHQoYywgXCJ0b3VjaGVuZFwiLCB0Ll9kaXNhYmxlRGVsYXllZERyYWcpLCBkdChjLCBcInRvdWNoY2FuY2VsXCIsIHQuX2Rpc2FibGVEZWxheWVkRHJhZyksIGR0KGMsIFwibW91c2Vtb3ZlXCIsIHQuX2RlbGF5ZWREcmFnVG91Y2hNb3ZlSGFuZGxlciksIGR0KGMsIFwidG91Y2htb3ZlXCIsIHQuX2RlbGF5ZWREcmFnVG91Y2hNb3ZlSGFuZGxlciksIGQuc3VwcG9ydFBvaW50ZXIgJiYgZHQoYywgXCJwb2ludGVybW92ZVwiLCB0Ll9kZWxheWVkRHJhZ1RvdWNoTW92ZUhhbmRsZXIpLCB0Ll9kcmFnU3RhcnRUaW1lciA9IHNldFRpbWVvdXQocCwgZC5kZWxheSk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgcCgpO1xuICAgIH1cbiAgfSxcbiAgX2RlbGF5ZWREcmFnVG91Y2hNb3ZlSGFuZGxlcjogZnVuY3Rpb24oZikge1xuICAgIHZhciBvID0gZi50b3VjaGVzID8gZi50b3VjaGVzWzBdIDogZjtcbiAgICBNYXRoLm1heChNYXRoLmFicyhvLmNsaWVudFggLSB0aGlzLl9sYXN0WCksIE1hdGguYWJzKG8uY2xpZW50WSAtIHRoaXMuX2xhc3RZKSkgPj0gTWF0aC5mbG9vcih0aGlzLm9wdGlvbnMudG91Y2hTdGFydFRocmVzaG9sZCAvICh0aGlzLm5hdGl2ZURyYWdnYWJsZSAmJiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSkgJiYgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKCk7XG4gIH0sXG4gIF9kaXNhYmxlRGVsYXllZERyYWc6IGZ1bmN0aW9uKCkge1xuICAgIFNlICYmIHZzKFNlKSwgY2xlYXJUaW1lb3V0KHRoaXMuX2RyYWdTdGFydFRpbWVyKSwgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnRXZlbnRzKCk7XG4gIH0sXG4gIF9kaXNhYmxlRGVsYXllZERyYWdFdmVudHM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBmID0gdGhpcy5lbC5vd25lckRvY3VtZW50O1xuICAgIGl0KGYsIFwibW91c2V1cFwiLCB0aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpLCBpdChmLCBcInRvdWNoZW5kXCIsIHRoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyksIGl0KGYsIFwidG91Y2hjYW5jZWxcIiwgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKSwgaXQoZiwgXCJtb3VzZW1vdmVcIiwgdGhpcy5fZGVsYXllZERyYWdUb3VjaE1vdmVIYW5kbGVyKSwgaXQoZiwgXCJ0b3VjaG1vdmVcIiwgdGhpcy5fZGVsYXllZERyYWdUb3VjaE1vdmVIYW5kbGVyKSwgaXQoZiwgXCJwb2ludGVybW92ZVwiLCB0aGlzLl9kZWxheWVkRHJhZ1RvdWNoTW92ZUhhbmRsZXIpO1xuICB9LFxuICBfdHJpZ2dlckRyYWdTdGFydDogZnVuY3Rpb24oZiwgbykge1xuICAgIG8gPSBvIHx8IGYucG9pbnRlclR5cGUgPT0gXCJ0b3VjaFwiICYmIGYsICF0aGlzLm5hdGl2ZURyYWdnYWJsZSB8fCBvID8gdGhpcy5vcHRpb25zLnN1cHBvcnRQb2ludGVyID8gZHQoZG9jdW1lbnQsIFwicG9pbnRlcm1vdmVcIiwgdGhpcy5fb25Ub3VjaE1vdmUpIDogbyA/IGR0KGRvY3VtZW50LCBcInRvdWNobW92ZVwiLCB0aGlzLl9vblRvdWNoTW92ZSkgOiBkdChkb2N1bWVudCwgXCJtb3VzZW1vdmVcIiwgdGhpcy5fb25Ub3VjaE1vdmUpIDogKGR0KFNlLCBcImRyYWdlbmRcIiwgdGhpcyksIGR0KEV0LCBcImRyYWdzdGFydFwiLCB0aGlzLl9vbkRyYWdTdGFydCkpO1xuICAgIHRyeSB7XG4gICAgICBkb2N1bWVudC5zZWxlY3Rpb24gPyBiYShmdW5jdGlvbigpIHtcbiAgICAgICAgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7XG4gICAgICB9KSA6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH0sXG4gIF9kcmFnU3RhcnRlZDogZnVuY3Rpb24oZiwgbykge1xuICAgIGlmIChFaSA9ICExLCBFdCAmJiBTZSkge1xuICAgICAgcG4oXCJkcmFnU3RhcnRlZFwiLCB0aGlzLCB7XG4gICAgICAgIGV2dDogb1xuICAgICAgfSksIHRoaXMubmF0aXZlRHJhZ2dhYmxlICYmIGR0KGRvY3VtZW50LCBcImRyYWdvdmVyXCIsIE1tKTtcbiAgICAgIHZhciBpID0gdGhpcy5vcHRpb25zO1xuICAgICAgIWYgJiYgYm4oU2UsIGkuZHJhZ0NsYXNzLCAhMSksIGJuKFNlLCBpLmdob3N0Q2xhc3MsICEwKSwgR2UuYWN0aXZlID0gdGhpcywgZiAmJiB0aGlzLl9hcHBlbmRHaG9zdCgpLCBsbih7XG4gICAgICAgIHNvcnRhYmxlOiB0aGlzLFxuICAgICAgICBuYW1lOiBcInN0YXJ0XCIsXG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IG9cbiAgICAgIH0pO1xuICAgIH0gZWxzZVxuICAgICAgdGhpcy5fbnVsbGluZygpO1xuICB9LFxuICBfZW11bGF0ZURyYWdPdmVyOiBmdW5jdGlvbigpIHtcbiAgICBpZiAoQm4pIHtcbiAgICAgIHRoaXMuX2xhc3RYID0gQm4uY2xpZW50WCwgdGhpcy5fbGFzdFkgPSBCbi5jbGllbnRZLCBZZCgpO1xuICAgICAgZm9yICh2YXIgZiA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoQm4uY2xpZW50WCwgQm4uY2xpZW50WSksIG8gPSBmOyBmICYmIGYuc2hhZG93Um9vdCAmJiAoZiA9IGYuc2hhZG93Um9vdC5lbGVtZW50RnJvbVBvaW50KEJuLmNsaWVudFgsIEJuLmNsaWVudFkpLCBmICE9PSBvKTsgKVxuICAgICAgICBvID0gZjtcbiAgICAgIGlmIChTZS5wYXJlbnROb2RlW1NuXS5faXNPdXRzaWRlVGhpc0VsKGYpLCBvKVxuICAgICAgICBkbyB7XG4gICAgICAgICAgaWYgKG9bU25dKSB7XG4gICAgICAgICAgICB2YXIgaSA9IHZvaWQgMDtcbiAgICAgICAgICAgIGlmIChpID0gb1tTbl0uX29uRHJhZ092ZXIoe1xuICAgICAgICAgICAgICBjbGllbnRYOiBCbi5jbGllbnRYLFxuICAgICAgICAgICAgICBjbGllbnRZOiBCbi5jbGllbnRZLFxuICAgICAgICAgICAgICB0YXJnZXQ6IGYsXG4gICAgICAgICAgICAgIHJvb3RFbDogb1xuICAgICAgICAgICAgfSksIGkgJiYgIXRoaXMub3B0aW9ucy5kcmFnb3ZlckJ1YmJsZSlcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGYgPSBvO1xuICAgICAgICB9IHdoaWxlIChvID0gby5wYXJlbnROb2RlKTtcbiAgICAgIEtkKCk7XG4gICAgfVxuICB9LFxuICBfb25Ub3VjaE1vdmU6IGZ1bmN0aW9uKGYpIHtcbiAgICBpZiAoVnIpIHtcbiAgICAgIHZhciBvID0gdGhpcy5vcHRpb25zLCBpID0gby5mYWxsYmFja1RvbGVyYW5jZSwgdCA9IG8uZmFsbGJhY2tPZmZzZXQsIHMgPSBmLnRvdWNoZXMgPyBmLnRvdWNoZXNbMF0gOiBmLCBkID0gSmUgJiYgVGkoSmUsICEwKSwgYyA9IEplICYmIGQgJiYgZC5hLCBwID0gSmUgJiYgZCAmJiBkLmQsIHYgPSBkYSAmJiBxdCAmJiB1ZChxdCksIGIgPSAocy5jbGllbnRYIC0gVnIuY2xpZW50WCArIHQueCkgLyAoYyB8fCAxKSArICh2ID8gdlswXSAtIGhzWzBdIDogMCkgLyAoYyB8fCAxKSwgUyA9IChzLmNsaWVudFkgLSBWci5jbGllbnRZICsgdC55KSAvIChwIHx8IDEpICsgKHYgPyB2WzFdIC0gaHNbMV0gOiAwKSAvIChwIHx8IDEpO1xuICAgICAgaWYgKCFHZS5hY3RpdmUgJiYgIUVpKSB7XG4gICAgICAgIGlmIChpICYmIE1hdGgubWF4KE1hdGguYWJzKHMuY2xpZW50WCAtIHRoaXMuX2xhc3RYKSwgTWF0aC5hYnMocy5jbGllbnRZIC0gdGhpcy5fbGFzdFkpKSA8IGkpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLl9vbkRyYWdTdGFydChmLCAhMCk7XG4gICAgICB9XG4gICAgICBpZiAoSmUpIHtcbiAgICAgICAgZCA/IChkLmUgKz0gYiAtIChjcyB8fCAwKSwgZC5mICs9IFMgLSAocHMgfHwgMCkpIDogZCA9IHtcbiAgICAgICAgICBhOiAxLFxuICAgICAgICAgIGI6IDAsXG4gICAgICAgICAgYzogMCxcbiAgICAgICAgICBkOiAxLFxuICAgICAgICAgIGU6IGIsXG4gICAgICAgICAgZjogU1xuICAgICAgICB9O1xuICAgICAgICB2YXIgRCA9IFwibWF0cml4KFwiLmNvbmNhdChkLmEsIFwiLFwiKS5jb25jYXQoZC5iLCBcIixcIikuY29uY2F0KGQuYywgXCIsXCIpLmNvbmNhdChkLmQsIFwiLFwiKS5jb25jYXQoZC5lLCBcIixcIikuY29uY2F0KGQuZiwgXCIpXCIpO1xuICAgICAgICBXZShKZSwgXCJ3ZWJraXRUcmFuc2Zvcm1cIiwgRCksIFdlKEplLCBcIm1velRyYW5zZm9ybVwiLCBEKSwgV2UoSmUsIFwibXNUcmFuc2Zvcm1cIiwgRCksIFdlKEplLCBcInRyYW5zZm9ybVwiLCBEKSwgY3MgPSBiLCBwcyA9IFMsIEJuID0gcztcbiAgICAgIH1cbiAgICAgIGYuY2FuY2VsYWJsZSAmJiBmLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9LFxuICBfYXBwZW5kR2hvc3Q6IGZ1bmN0aW9uKCkge1xuICAgIGlmICghSmUpIHtcbiAgICAgIHZhciBmID0gdGhpcy5vcHRpb25zLmZhbGxiYWNrT25Cb2R5ID8gZG9jdW1lbnQuYm9keSA6IEV0LCBvID0gV3QoU2UsICEwLCBkYSwgITAsIGYpLCBpID0gdGhpcy5vcHRpb25zO1xuICAgICAgaWYgKGRhKSB7XG4gICAgICAgIGZvciAocXQgPSBmOyBXZShxdCwgXCJwb3NpdGlvblwiKSA9PT0gXCJzdGF0aWNcIiAmJiBXZShxdCwgXCJ0cmFuc2Zvcm1cIikgPT09IFwibm9uZVwiICYmIHF0ICE9PSBkb2N1bWVudDsgKVxuICAgICAgICAgIHF0ID0gcXQucGFyZW50Tm9kZTtcbiAgICAgICAgcXQgIT09IGRvY3VtZW50LmJvZHkgJiYgcXQgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA/IChxdCA9PT0gZG9jdW1lbnQgJiYgKHF0ID0gWG4oKSksIG8udG9wICs9IHF0LnNjcm9sbFRvcCwgby5sZWZ0ICs9IHF0LnNjcm9sbExlZnQpIDogcXQgPSBYbigpLCBocyA9IHVkKHF0KTtcbiAgICAgIH1cbiAgICAgIEplID0gU2UuY2xvbmVOb2RlKCEwKSwgYm4oSmUsIGkuZ2hvc3RDbGFzcywgITEpLCBibihKZSwgaS5mYWxsYmFja0NsYXNzLCAhMCksIGJuKEplLCBpLmRyYWdDbGFzcywgITApLCBXZShKZSwgXCJ0cmFuc2l0aW9uXCIsIFwiXCIpLCBXZShKZSwgXCJ0cmFuc2Zvcm1cIiwgXCJcIiksIFdlKEplLCBcImJveC1zaXppbmdcIiwgXCJib3JkZXItYm94XCIpLCBXZShKZSwgXCJtYXJnaW5cIiwgMCksIFdlKEplLCBcInRvcFwiLCBvLnRvcCksIFdlKEplLCBcImxlZnRcIiwgby5sZWZ0KSwgV2UoSmUsIFwid2lkdGhcIiwgby53aWR0aCksIFdlKEplLCBcImhlaWdodFwiLCBvLmhlaWdodCksIFdlKEplLCBcIm9wYWNpdHlcIiwgXCIwLjhcIiksIFdlKEplLCBcInBvc2l0aW9uXCIsIGRhID8gXCJhYnNvbHV0ZVwiIDogXCJmaXhlZFwiKSwgV2UoSmUsIFwiekluZGV4XCIsIFwiMTAwMDAwXCIpLCBXZShKZSwgXCJwb2ludGVyRXZlbnRzXCIsIFwibm9uZVwiKSwgR2UuZ2hvc3QgPSBKZSwgZi5hcHBlbmRDaGlsZChKZSksIFdlKEplLCBcInRyYW5zZm9ybS1vcmlnaW5cIiwgZmQgLyBwYXJzZUludChKZS5zdHlsZS53aWR0aCkgKiAxMDAgKyBcIiUgXCIgKyBkZCAvIHBhcnNlSW50KEplLnN0eWxlLmhlaWdodCkgKiAxMDAgKyBcIiVcIik7XG4gICAgfVxuICB9LFxuICBfb25EcmFnU3RhcnQ6IGZ1bmN0aW9uKGYsIG8pIHtcbiAgICB2YXIgaSA9IHRoaXMsIHQgPSBmLmRhdGFUcmFuc2ZlciwgcyA9IGkub3B0aW9ucztcbiAgICBpZiAocG4oXCJkcmFnU3RhcnRcIiwgdGhpcywge1xuICAgICAgZXZ0OiBmXG4gICAgfSksIEdlLmV2ZW50Q2FuY2VsZWQpIHtcbiAgICAgIHRoaXMuX29uRHJvcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwbihcInNldHVwQ2xvbmVcIiwgdGhpcyksIEdlLmV2ZW50Q2FuY2VsZWQgfHwgKFJ0ID0gVmQoU2UpLCBSdC5kcmFnZ2FibGUgPSAhMSwgUnQuc3R5bGVbXCJ3aWxsLWNoYW5nZVwiXSA9IFwiXCIsIHRoaXMuX2hpZGVDbG9uZSgpLCBibihSdCwgdGhpcy5vcHRpb25zLmNob3NlbkNsYXNzLCAhMSksIEdlLmNsb25lID0gUnQpLCBpLmNsb25lSWQgPSBiYShmdW5jdGlvbigpIHtcbiAgICAgIHBuKFwiY2xvbmVcIiwgaSksICFHZS5ldmVudENhbmNlbGVkICYmIChpLm9wdGlvbnMucmVtb3ZlQ2xvbmVPbkhpZGUgfHwgRXQuaW5zZXJ0QmVmb3JlKFJ0LCBTZSksIGkuX2hpZGVDbG9uZSgpLCBsbih7XG4gICAgICAgIHNvcnRhYmxlOiBpLFxuICAgICAgICBuYW1lOiBcImNsb25lXCJcbiAgICAgIH0pKTtcbiAgICB9KSwgIW8gJiYgYm4oU2UsIHMuZHJhZ0NsYXNzLCAhMCksIG8gPyAoeGEgPSAhMCwgaS5fbG9vcElkID0gc2V0SW50ZXJ2YWwoaS5fZW11bGF0ZURyYWdPdmVyLCA1MCkpIDogKGl0KGRvY3VtZW50LCBcIm1vdXNldXBcIiwgaS5fb25Ecm9wKSwgaXQoZG9jdW1lbnQsIFwidG91Y2hlbmRcIiwgaS5fb25Ecm9wKSwgaXQoZG9jdW1lbnQsIFwidG91Y2hjYW5jZWxcIiwgaS5fb25Ecm9wKSwgdCAmJiAodC5lZmZlY3RBbGxvd2VkID0gXCJtb3ZlXCIsIHMuc2V0RGF0YSAmJiBzLnNldERhdGEuY2FsbChpLCB0LCBTZSkpLCBkdChkb2N1bWVudCwgXCJkcm9wXCIsIGkpLCBXZShTZSwgXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGVaKDApXCIpKSwgRWkgPSAhMCwgaS5fZHJhZ1N0YXJ0SWQgPSBiYShpLl9kcmFnU3RhcnRlZC5iaW5kKGksIG8sIGYpKSwgZHQoZG9jdW1lbnQsIFwic2VsZWN0c3RhcnRcIiwgaSksIHVvID0gITAsIHZvICYmIFdlKGRvY3VtZW50LmJvZHksIFwidXNlci1zZWxlY3RcIiwgXCJub25lXCIpO1xuICB9LFxuICBfb25EcmFnT3ZlcjogZnVuY3Rpb24oZikge1xuICAgIHZhciBvID0gdGhpcy5lbCwgaSA9IGYudGFyZ2V0LCB0LCBzLCBkLCBjID0gdGhpcy5vcHRpb25zLCBwID0gYy5ncm91cCwgdiA9IEdlLmFjdGl2ZSwgYiA9IHVhID09PSBwLCBTID0gYy5zb3J0LCBEID0gS3QgfHwgdiwgVCwgbSA9IHRoaXMsIHggPSAhMTtcbiAgICBpZiAoRHMpXG4gICAgICByZXR1cm47XG4gICAgZnVuY3Rpb24gUihRLCBYKSB7XG4gICAgICBwbihRLCBtLCBKbih7XG4gICAgICAgIGV2dDogZixcbiAgICAgICAgaXNPd25lcjogYixcbiAgICAgICAgYXhpczogVCA/IFwidmVydGljYWxcIiA6IFwiaG9yaXpvbnRhbFwiLFxuICAgICAgICByZXZlcnQ6IGQsXG4gICAgICAgIGRyYWdSZWN0OiB0LFxuICAgICAgICB0YXJnZXRSZWN0OiBzLFxuICAgICAgICBjYW5Tb3J0OiBTLFxuICAgICAgICBmcm9tU29ydGFibGU6IEQsXG4gICAgICAgIHRhcmdldDogaSxcbiAgICAgICAgY29tcGxldGVkOiBBLFxuICAgICAgICBvbk1vdmU6IGZ1bmN0aW9uKFosIGRlKSB7XG4gICAgICAgICAgcmV0dXJuIGNhKEV0LCBvLCBTZSwgdCwgWiwgV3QoWiksIGYsIGRlKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2hhbmdlZDogRVxuICAgICAgfSwgWCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3KCkge1xuICAgICAgUihcImRyYWdPdmVyQW5pbWF0aW9uQ2FwdHVyZVwiKSwgbS5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKSwgbSAhPT0gRCAmJiBELmNhcHR1cmVBbmltYXRpb25TdGF0ZSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBBKFEpIHtcbiAgICAgIHJldHVybiBSKFwiZHJhZ092ZXJDb21wbGV0ZWRcIiwge1xuICAgICAgICBpbnNlcnRpb246IFFcbiAgICAgIH0pLCBRICYmIChiID8gdi5faGlkZUNsb25lKCkgOiB2Ll9zaG93Q2xvbmUobSksIG0gIT09IEQgJiYgKGJuKFNlLCBLdCA/IEt0Lm9wdGlvbnMuZ2hvc3RDbGFzcyA6IHYub3B0aW9ucy5naG9zdENsYXNzLCAhMSksIGJuKFNlLCBjLmdob3N0Q2xhc3MsICEwKSksIEt0ICE9PSBtICYmIG0gIT09IEdlLmFjdGl2ZSA/IEt0ID0gbSA6IG0gPT09IEdlLmFjdGl2ZSAmJiBLdCAmJiAoS3QgPSBudWxsKSwgRCA9PT0gbSAmJiAobS5faWdub3JlV2hpbGVBbmltYXRpbmcgPSBpKSwgbS5hbmltYXRlQWxsKGZ1bmN0aW9uKCkge1xuICAgICAgICBSKFwiZHJhZ092ZXJBbmltYXRpb25Db21wbGV0ZVwiKSwgbS5faWdub3JlV2hpbGVBbmltYXRpbmcgPSBudWxsO1xuICAgICAgfSksIG0gIT09IEQgJiYgKEQuYW5pbWF0ZUFsbCgpLCBELl9pZ25vcmVXaGlsZUFuaW1hdGluZyA9IG51bGwpKSwgKGkgPT09IFNlICYmICFTZS5hbmltYXRlZCB8fCBpID09PSBvICYmICFpLmFuaW1hdGVkKSAmJiAoYmkgPSBudWxsKSwgIWMuZHJhZ292ZXJCdWJibGUgJiYgIWYucm9vdEVsICYmIGkgIT09IGRvY3VtZW50ICYmIChTZS5wYXJlbnROb2RlW1NuXS5faXNPdXRzaWRlVGhpc0VsKGYudGFyZ2V0KSwgIVEgJiYgV3IoZikpLCAhYy5kcmFnb3ZlckJ1YmJsZSAmJiBmLnN0b3BQcm9wYWdhdGlvbiAmJiBmLnN0b3BQcm9wYWdhdGlvbigpLCB4ID0gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIEUoKSB7XG4gICAgICBFbiA9IFJuKFNlKSwgVHIgPSBSbihTZSwgYy5kcmFnZ2FibGUpLCBsbih7XG4gICAgICAgIHNvcnRhYmxlOiBtLFxuICAgICAgICBuYW1lOiBcImNoYW5nZVwiLFxuICAgICAgICB0b0VsOiBvLFxuICAgICAgICBuZXdJbmRleDogRW4sXG4gICAgICAgIG5ld0RyYWdnYWJsZUluZGV4OiBUcixcbiAgICAgICAgb3JpZ2luYWxFdmVudDogZlxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChmLnByZXZlbnREZWZhdWx0ICE9PSB2b2lkIDAgJiYgZi5jYW5jZWxhYmxlICYmIGYucHJldmVudERlZmF1bHQoKSwgaSA9IEtuKGksIGMuZHJhZ2dhYmxlLCBvLCAhMCksIFIoXCJkcmFnT3ZlclwiKSwgR2UuZXZlbnRDYW5jZWxlZClcbiAgICAgIHJldHVybiB4O1xuICAgIGlmIChTZS5jb250YWlucyhmLnRhcmdldCkgfHwgaS5hbmltYXRlZCAmJiBpLmFuaW1hdGluZ1ggJiYgaS5hbmltYXRpbmdZIHx8IG0uX2lnbm9yZVdoaWxlQW5pbWF0aW5nID09PSBpKVxuICAgICAgcmV0dXJuIEEoITEpO1xuICAgIGlmICh4YSA9ICExLCB2ICYmICFjLmRpc2FibGVkICYmIChiID8gUyB8fCAoZCA9IER0ICE9PSBFdCkgOiBLdCA9PT0gdGhpcyB8fCAodGhpcy5sYXN0UHV0TW9kZSA9IHVhLmNoZWNrUHVsbCh0aGlzLCB2LCBTZSwgZikpICYmIHAuY2hlY2tQdXQodGhpcywgdiwgU2UsIGYpKSkge1xuICAgICAgaWYgKFQgPSB0aGlzLl9nZXREaXJlY3Rpb24oZiwgaSkgPT09IFwidmVydGljYWxcIiwgdCA9IFd0KFNlKSwgUihcImRyYWdPdmVyVmFsaWRcIiksIEdlLmV2ZW50Q2FuY2VsZWQpXG4gICAgICAgIHJldHVybiB4O1xuICAgICAgaWYgKGQpXG4gICAgICAgIHJldHVybiBEdCA9IEV0LCB3KCksIHRoaXMuX2hpZGVDbG9uZSgpLCBSKFwicmV2ZXJ0XCIpLCBHZS5ldmVudENhbmNlbGVkIHx8IChHciA/IEV0Lmluc2VydEJlZm9yZShTZSwgR3IpIDogRXQuYXBwZW5kQ2hpbGQoU2UpKSwgQSghMCk7XG4gICAgICB2YXIgQyA9IEZzKG8sIGMuZHJhZ2dhYmxlKTtcbiAgICAgIGlmICghQyB8fCBQbShmLCBULCB0aGlzKSAmJiAhQy5hbmltYXRlZCkge1xuICAgICAgICBpZiAoQyA9PT0gU2UpXG4gICAgICAgICAgcmV0dXJuIEEoITEpO1xuICAgICAgICBpZiAoQyAmJiBvID09PSBmLnRhcmdldCAmJiAoaSA9IEMpLCBpICYmIChzID0gV3QoaSkpLCBjYShFdCwgbywgU2UsIHQsIGksIHMsIGYsICEhaSkgIT09ICExKVxuICAgICAgICAgIHJldHVybiB3KCksIG8uYXBwZW5kQ2hpbGQoU2UpLCBEdCA9IG8sIEUoKSwgQSghMCk7XG4gICAgICB9IGVsc2UgaWYgKEMgJiYgT20oZiwgVCwgdGhpcykpIHtcbiAgICAgICAgdmFyIE0gPSBSaShvLCAwLCBjLCAhMCk7XG4gICAgICAgIGlmIChNID09PSBTZSlcbiAgICAgICAgICByZXR1cm4gQSghMSk7XG4gICAgICAgIGlmIChpID0gTSwgcyA9IFd0KGkpLCBjYShFdCwgbywgU2UsIHQsIGksIHMsIGYsICExKSAhPT0gITEpXG4gICAgICAgICAgcmV0dXJuIHcoKSwgby5pbnNlcnRCZWZvcmUoU2UsIE0pLCBEdCA9IG8sIEUoKSwgQSghMCk7XG4gICAgICB9IGVsc2UgaWYgKGkucGFyZW50Tm9kZSA9PT0gbykge1xuICAgICAgICBzID0gV3QoaSk7XG4gICAgICAgIHZhciB5ID0gMCwgQiwgJCA9IFNlLnBhcmVudE5vZGUgIT09IG8sIEYgPSAhRG0oU2UuYW5pbWF0ZWQgJiYgU2UudG9SZWN0IHx8IHQsIGkuYW5pbWF0ZWQgJiYgaS50b1JlY3QgfHwgcywgVCksIGsgPSBUID8gXCJ0b3BcIiA6IFwibGVmdFwiLCBoID0gc2QoaSwgXCJ0b3BcIiwgXCJ0b3BcIikgfHwgc2QoU2UsIFwidG9wXCIsIFwidG9wXCIpLCBOID0gaCA/IGguc2Nyb2xsVG9wIDogdm9pZCAwO1xuICAgICAgICBiaSAhPT0gaSAmJiAoQiA9IHNba10sIEFvID0gITEsIGZhID0gIUYgJiYgYy5pbnZlcnRTd2FwIHx8ICQpLCB5ID0gRm0oZiwgaSwgcywgVCwgRiA/IDEgOiBjLnN3YXBUaHJlc2hvbGQsIGMuaW52ZXJ0ZWRTd2FwVGhyZXNob2xkID09IG51bGwgPyBjLnN3YXBUaHJlc2hvbGQgOiBjLmludmVydGVkU3dhcFRocmVzaG9sZCwgZmEsIGJpID09PSBpKTtcbiAgICAgICAgdmFyIFA7XG4gICAgICAgIGlmICh5ICE9PSAwKSB7XG4gICAgICAgICAgdmFyIGogPSBSbihTZSk7XG4gICAgICAgICAgZG9cbiAgICAgICAgICAgIGogLT0geSwgUCA9IER0LmNoaWxkcmVuW2pdO1xuICAgICAgICAgIHdoaWxlIChQICYmIChXZShQLCBcImRpc3BsYXlcIikgPT09IFwibm9uZVwiIHx8IFAgPT09IEplKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHkgPT09IDAgfHwgUCA9PT0gaSlcbiAgICAgICAgICByZXR1cm4gQSghMSk7XG4gICAgICAgIGJpID0gaSwgeW8gPSB5O1xuICAgICAgICB2YXIgSSA9IGkubmV4dEVsZW1lbnRTaWJsaW5nLCBWID0gITE7XG4gICAgICAgIFYgPSB5ID09PSAxO1xuICAgICAgICB2YXIgVyA9IGNhKEV0LCBvLCBTZSwgdCwgaSwgcywgZiwgVik7XG4gICAgICAgIGlmIChXICE9PSAhMSlcbiAgICAgICAgICByZXR1cm4gKFcgPT09IDEgfHwgVyA9PT0gLTEpICYmIChWID0gVyA9PT0gMSksIERzID0gITAsIHNldFRpbWVvdXQoTm0sIDMwKSwgdygpLCBWICYmICFJID8gby5hcHBlbmRDaGlsZChTZSkgOiBpLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKFNlLCBWID8gSSA6IGkpLCBoICYmIHpkKGgsIDAsIE4gLSBoLnNjcm9sbFRvcCksIER0ID0gU2UucGFyZW50Tm9kZSwgQiAhPT0gdm9pZCAwICYmICFmYSAmJiAoQWEgPSBNYXRoLmFicyhCIC0gV3QoaSlba10pKSwgRSgpLCBBKCEwKTtcbiAgICAgIH1cbiAgICAgIGlmIChvLmNvbnRhaW5zKFNlKSlcbiAgICAgICAgcmV0dXJuIEEoITEpO1xuICAgIH1cbiAgICByZXR1cm4gITE7XG4gIH0sXG4gIF9pZ25vcmVXaGlsZUFuaW1hdGluZzogbnVsbCxcbiAgX29mZk1vdmVFdmVudHM6IGZ1bmN0aW9uKCkge1xuICAgIGl0KGRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCB0aGlzLl9vblRvdWNoTW92ZSksIGl0KGRvY3VtZW50LCBcInRvdWNobW92ZVwiLCB0aGlzLl9vblRvdWNoTW92ZSksIGl0KGRvY3VtZW50LCBcInBvaW50ZXJtb3ZlXCIsIHRoaXMuX29uVG91Y2hNb3ZlKSwgaXQoZG9jdW1lbnQsIFwiZHJhZ292ZXJcIiwgV3IpLCBpdChkb2N1bWVudCwgXCJtb3VzZW1vdmVcIiwgV3IpLCBpdChkb2N1bWVudCwgXCJ0b3VjaG1vdmVcIiwgV3IpO1xuICB9LFxuICBfb2ZmVXBFdmVudHM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBmID0gdGhpcy5lbC5vd25lckRvY3VtZW50O1xuICAgIGl0KGYsIFwibW91c2V1cFwiLCB0aGlzLl9vbkRyb3ApLCBpdChmLCBcInRvdWNoZW5kXCIsIHRoaXMuX29uRHJvcCksIGl0KGYsIFwicG9pbnRlcnVwXCIsIHRoaXMuX29uRHJvcCksIGl0KGYsIFwidG91Y2hjYW5jZWxcIiwgdGhpcy5fb25Ecm9wKSwgaXQoZG9jdW1lbnQsIFwic2VsZWN0c3RhcnRcIiwgdGhpcyk7XG4gIH0sXG4gIF9vbkRyb3A6IGZ1bmN0aW9uKGYpIHtcbiAgICB2YXIgbyA9IHRoaXMuZWwsIGkgPSB0aGlzLm9wdGlvbnM7XG4gICAgaWYgKEVuID0gUm4oU2UpLCBUciA9IFJuKFNlLCBpLmRyYWdnYWJsZSksIHBuKFwiZHJvcFwiLCB0aGlzLCB7XG4gICAgICBldnQ6IGZcbiAgICB9KSwgRHQgPSBTZSAmJiBTZS5wYXJlbnROb2RlLCBFbiA9IFJuKFNlKSwgVHIgPSBSbihTZSwgaS5kcmFnZ2FibGUpLCBHZS5ldmVudENhbmNlbGVkKSB7XG4gICAgICB0aGlzLl9udWxsaW5nKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIEVpID0gITEsIGZhID0gITEsIEFvID0gITEsIGNsZWFySW50ZXJ2YWwodGhpcy5fbG9vcElkKSwgY2xlYXJUaW1lb3V0KHRoaXMuX2RyYWdTdGFydFRpbWVyKSwgUnModGhpcy5jbG9uZUlkKSwgUnModGhpcy5fZHJhZ1N0YXJ0SWQpLCB0aGlzLm5hdGl2ZURyYWdnYWJsZSAmJiAoaXQoZG9jdW1lbnQsIFwiZHJvcFwiLCB0aGlzKSwgaXQobywgXCJkcmFnc3RhcnRcIiwgdGhpcy5fb25EcmFnU3RhcnQpKSwgdGhpcy5fb2ZmTW92ZUV2ZW50cygpLCB0aGlzLl9vZmZVcEV2ZW50cygpLCB2byAmJiBXZShkb2N1bWVudC5ib2R5LCBcInVzZXItc2VsZWN0XCIsIFwiXCIpLCBXZShTZSwgXCJ0cmFuc2Zvcm1cIiwgXCJcIiksIGYgJiYgKHVvICYmIChmLmNhbmNlbGFibGUgJiYgZi5wcmV2ZW50RGVmYXVsdCgpLCAhaS5kcm9wQnViYmxlICYmIGYuc3RvcFByb3BhZ2F0aW9uKCkpLCBKZSAmJiBKZS5wYXJlbnROb2RlICYmIEplLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoSmUpLCAoRXQgPT09IER0IHx8IEt0ICYmIEt0Lmxhc3RQdXRNb2RlICE9PSBcImNsb25lXCIpICYmIFJ0ICYmIFJ0LnBhcmVudE5vZGUgJiYgUnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChSdCksIFNlICYmICh0aGlzLm5hdGl2ZURyYWdnYWJsZSAmJiBpdChTZSwgXCJkcmFnZW5kXCIsIHRoaXMpLCB2cyhTZSksIFNlLnN0eWxlW1wid2lsbC1jaGFuZ2VcIl0gPSBcIlwiLCB1byAmJiAhRWkgJiYgYm4oU2UsIEt0ID8gS3Qub3B0aW9ucy5naG9zdENsYXNzIDogdGhpcy5vcHRpb25zLmdob3N0Q2xhc3MsICExKSwgYm4oU2UsIHRoaXMub3B0aW9ucy5jaG9zZW5DbGFzcywgITEpLCBsbih7XG4gICAgICBzb3J0YWJsZTogdGhpcyxcbiAgICAgIG5hbWU6IFwidW5jaG9vc2VcIixcbiAgICAgIHRvRWw6IER0LFxuICAgICAgbmV3SW5kZXg6IG51bGwsXG4gICAgICBuZXdEcmFnZ2FibGVJbmRleDogbnVsbCxcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IGZcbiAgICB9KSwgRXQgIT09IER0ID8gKEVuID49IDAgJiYgKGxuKHtcbiAgICAgIHJvb3RFbDogRHQsXG4gICAgICBuYW1lOiBcImFkZFwiLFxuICAgICAgdG9FbDogRHQsXG4gICAgICBmcm9tRWw6IEV0LFxuICAgICAgb3JpZ2luYWxFdmVudDogZlxuICAgIH0pLCBsbih7XG4gICAgICBzb3J0YWJsZTogdGhpcyxcbiAgICAgIG5hbWU6IFwicmVtb3ZlXCIsXG4gICAgICB0b0VsOiBEdCxcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IGZcbiAgICB9KSwgbG4oe1xuICAgICAgcm9vdEVsOiBEdCxcbiAgICAgIG5hbWU6IFwic29ydFwiLFxuICAgICAgdG9FbDogRHQsXG4gICAgICBmcm9tRWw6IEV0LFxuICAgICAgb3JpZ2luYWxFdmVudDogZlxuICAgIH0pLCBsbih7XG4gICAgICBzb3J0YWJsZTogdGhpcyxcbiAgICAgIG5hbWU6IFwic29ydFwiLFxuICAgICAgdG9FbDogRHQsXG4gICAgICBvcmlnaW5hbEV2ZW50OiBmXG4gICAgfSkpLCBLdCAmJiBLdC5zYXZlKCkpIDogRW4gIT09IHdpICYmIEVuID49IDAgJiYgKGxuKHtcbiAgICAgIHNvcnRhYmxlOiB0aGlzLFxuICAgICAgbmFtZTogXCJ1cGRhdGVcIixcbiAgICAgIHRvRWw6IER0LFxuICAgICAgb3JpZ2luYWxFdmVudDogZlxuICAgIH0pLCBsbih7XG4gICAgICBzb3J0YWJsZTogdGhpcyxcbiAgICAgIG5hbWU6IFwic29ydFwiLFxuICAgICAgdG9FbDogRHQsXG4gICAgICBvcmlnaW5hbEV2ZW50OiBmXG4gICAgfSkpLCBHZS5hY3RpdmUgJiYgKChFbiA9PSBudWxsIHx8IEVuID09PSAtMSkgJiYgKEVuID0gd2ksIFRyID0gZ28pLCBsbih7XG4gICAgICBzb3J0YWJsZTogdGhpcyxcbiAgICAgIG5hbWU6IFwiZW5kXCIsXG4gICAgICB0b0VsOiBEdCxcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IGZcbiAgICB9KSwgdGhpcy5zYXZlKCkpKSksIHRoaXMuX251bGxpbmcoKTtcbiAgfSxcbiAgX251bGxpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHBuKFwibnVsbGluZ1wiLCB0aGlzKSwgRXQgPSBTZSA9IER0ID0gSmUgPSBHciA9IFJ0ID0geWEgPSBEciA9IFZyID0gQm4gPSB1byA9IEVuID0gVHIgPSB3aSA9IGdvID0gYmkgPSB5byA9IEt0ID0gdWEgPSBHZS5kcmFnZ2VkID0gR2UuZ2hvc3QgPSBHZS5jbG9uZSA9IEdlLmFjdGl2ZSA9IG51bGwsIFRhLmZvckVhY2goZnVuY3Rpb24oZikge1xuICAgICAgZi5jaGVja2VkID0gITA7XG4gICAgfSksIFRhLmxlbmd0aCA9IGNzID0gcHMgPSAwO1xuICB9LFxuICBoYW5kbGVFdmVudDogZnVuY3Rpb24oZikge1xuICAgIHN3aXRjaCAoZi50eXBlKSB7XG4gICAgICBjYXNlIFwiZHJvcFwiOlxuICAgICAgY2FzZSBcImRyYWdlbmRcIjpcbiAgICAgICAgdGhpcy5fb25Ecm9wKGYpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkcmFnZW50ZXJcIjpcbiAgICAgIGNhc2UgXCJkcmFnb3ZlclwiOlxuICAgICAgICBTZSAmJiAodGhpcy5fb25EcmFnT3ZlcihmKSwgSW0oZikpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJzZWxlY3RzdGFydFwiOlxuICAgICAgICBmLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSxcbiAgdG9BcnJheTogZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgZiA9IFtdLCBvLCBpID0gdGhpcy5lbC5jaGlsZHJlbiwgdCA9IDAsIHMgPSBpLmxlbmd0aCwgZCA9IHRoaXMub3B0aW9uczsgdCA8IHM7IHQrKylcbiAgICAgIG8gPSBpW3RdLCBLbihvLCBkLmRyYWdnYWJsZSwgdGhpcy5lbCwgITEpICYmIGYucHVzaChvLmdldEF0dHJpYnV0ZShkLmRhdGFJZEF0dHIpIHx8IEJtKG8pKTtcbiAgICByZXR1cm4gZjtcbiAgfSxcbiAgc29ydDogZnVuY3Rpb24oZiwgbykge1xuICAgIHZhciBpID0ge30sIHQgPSB0aGlzLmVsO1xuICAgIHRoaXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24ocywgZCkge1xuICAgICAgdmFyIGMgPSB0LmNoaWxkcmVuW2RdO1xuICAgICAgS24oYywgdGhpcy5vcHRpb25zLmRyYWdnYWJsZSwgdCwgITEpICYmIChpW3NdID0gYyk7XG4gICAgfSwgdGhpcyksIG8gJiYgdGhpcy5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKSwgZi5mb3JFYWNoKGZ1bmN0aW9uKHMpIHtcbiAgICAgIGlbc10gJiYgKHQucmVtb3ZlQ2hpbGQoaVtzXSksIHQuYXBwZW5kQ2hpbGQoaVtzXSkpO1xuICAgIH0pLCBvICYmIHRoaXMuYW5pbWF0ZUFsbCgpO1xuICB9LFxuICBzYXZlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZiA9IHRoaXMub3B0aW9ucy5zdG9yZTtcbiAgICBmICYmIGYuc2V0ICYmIGYuc2V0KHRoaXMpO1xuICB9LFxuICBjbG9zZXN0OiBmdW5jdGlvbihmLCBvKSB7XG4gICAgcmV0dXJuIEtuKGYsIG8gfHwgdGhpcy5vcHRpb25zLmRyYWdnYWJsZSwgdGhpcy5lbCwgITEpO1xuICB9LFxuICBvcHRpb246IGZ1bmN0aW9uKGYsIG8pIHtcbiAgICB2YXIgaSA9IHRoaXMub3B0aW9ucztcbiAgICBpZiAobyA9PT0gdm9pZCAwKVxuICAgICAgcmV0dXJuIGlbZl07XG4gICAgdmFyIHQgPSBUby5tb2RpZnlPcHRpb24odGhpcywgZiwgbyk7XG4gICAgdHlwZW9mIHQgPCBcInVcIiA/IGlbZl0gPSB0IDogaVtmXSA9IG8sIGYgPT09IFwiZ3JvdXBcIiAmJiBRZChpKTtcbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgcG4oXCJkZXN0cm95XCIsIHRoaXMpO1xuICAgIHZhciBmID0gdGhpcy5lbDtcbiAgICBmW1NuXSA9IG51bGwsIGl0KGYsIFwibW91c2Vkb3duXCIsIHRoaXMuX29uVGFwU3RhcnQpLCBpdChmLCBcInRvdWNoc3RhcnRcIiwgdGhpcy5fb25UYXBTdGFydCksIGl0KGYsIFwicG9pbnRlcmRvd25cIiwgdGhpcy5fb25UYXBTdGFydCksIHRoaXMubmF0aXZlRHJhZ2dhYmxlICYmIChpdChmLCBcImRyYWdvdmVyXCIsIHRoaXMpLCBpdChmLCBcImRyYWdlbnRlclwiLCB0aGlzKSksIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZi5xdWVyeVNlbGVjdG9yQWxsKFwiW2RyYWdnYWJsZV1cIiksIGZ1bmN0aW9uKG8pIHtcbiAgICAgIG8ucmVtb3ZlQXR0cmlidXRlKFwiZHJhZ2dhYmxlXCIpO1xuICAgIH0pLCB0aGlzLl9vbkRyb3AoKSwgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnRXZlbnRzKCksIHdhLnNwbGljZSh3YS5pbmRleE9mKHRoaXMuZWwpLCAxKSwgdGhpcy5lbCA9IGYgPSBudWxsO1xuICB9LFxuICBfaGlkZUNsb25lOiBmdW5jdGlvbigpIHtcbiAgICBpZiAoIURyKSB7XG4gICAgICBpZiAocG4oXCJoaWRlQ2xvbmVcIiwgdGhpcyksIEdlLmV2ZW50Q2FuY2VsZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIFdlKFJ0LCBcImRpc3BsYXlcIiwgXCJub25lXCIpLCB0aGlzLm9wdGlvbnMucmVtb3ZlQ2xvbmVPbkhpZGUgJiYgUnQucGFyZW50Tm9kZSAmJiBSdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFJ0KSwgRHIgPSAhMDtcbiAgICB9XG4gIH0sXG4gIF9zaG93Q2xvbmU6IGZ1bmN0aW9uKGYpIHtcbiAgICBpZiAoZi5sYXN0UHV0TW9kZSAhPT0gXCJjbG9uZVwiKSB7XG4gICAgICB0aGlzLl9oaWRlQ2xvbmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKERyKSB7XG4gICAgICBpZiAocG4oXCJzaG93Q2xvbmVcIiwgdGhpcyksIEdlLmV2ZW50Q2FuY2VsZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIFNlLnBhcmVudE5vZGUgPT0gRXQgJiYgIXRoaXMub3B0aW9ucy5ncm91cC5yZXZlcnRDbG9uZSA/IEV0Lmluc2VydEJlZm9yZShSdCwgU2UpIDogR3IgPyBFdC5pbnNlcnRCZWZvcmUoUnQsIEdyKSA6IEV0LmFwcGVuZENoaWxkKFJ0KSwgdGhpcy5vcHRpb25zLmdyb3VwLnJldmVydENsb25lICYmIHRoaXMuYW5pbWF0ZShTZSwgUnQpLCBXZShSdCwgXCJkaXNwbGF5XCIsIFwiXCIpLCBEciA9ICExO1xuICAgIH1cbiAgfVxufTtcbmZ1bmN0aW9uIEltKHIpIHtcbiAgci5kYXRhVHJhbnNmZXIgJiYgKHIuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBcIm1vdmVcIiksIHIuY2FuY2VsYWJsZSAmJiByLnByZXZlbnREZWZhdWx0KCk7XG59XG5mdW5jdGlvbiBjYShyLCBmLCBvLCBpLCB0LCBzLCBkLCBjKSB7XG4gIHZhciBwLCB2ID0gcltTbl0sIGIgPSB2Lm9wdGlvbnMub25Nb3ZlLCBTO1xuICByZXR1cm4gd2luZG93LkN1c3RvbUV2ZW50ICYmICFmciAmJiAhd28gPyBwID0gbmV3IEN1c3RvbUV2ZW50KFwibW92ZVwiLCB7XG4gICAgYnViYmxlczogITAsXG4gICAgY2FuY2VsYWJsZTogITBcbiAgfSkgOiAocCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIiksIHAuaW5pdEV2ZW50KFwibW92ZVwiLCAhMCwgITApKSwgcC50byA9IGYsIHAuZnJvbSA9IHIsIHAuZHJhZ2dlZCA9IG8sIHAuZHJhZ2dlZFJlY3QgPSBpLCBwLnJlbGF0ZWQgPSB0IHx8IGYsIHAucmVsYXRlZFJlY3QgPSBzIHx8IFd0KGYpLCBwLndpbGxJbnNlcnRBZnRlciA9IGMsIHAub3JpZ2luYWxFdmVudCA9IGQsIHIuZGlzcGF0Y2hFdmVudChwKSwgYiAmJiAoUyA9IGIuY2FsbCh2LCBwLCBkKSksIFM7XG59XG5mdW5jdGlvbiB2cyhyKSB7XG4gIHIuZHJhZ2dhYmxlID0gITE7XG59XG5mdW5jdGlvbiBObSgpIHtcbiAgRHMgPSAhMTtcbn1cbmZ1bmN0aW9uIE9tKHIsIGYsIG8pIHtcbiAgdmFyIGkgPSBXdChSaShvLmVsLCAwLCBvLm9wdGlvbnMsICEwKSksIHQgPSAxMDtcbiAgcmV0dXJuIGYgPyByLmNsaWVudFggPCBpLmxlZnQgLSB0IHx8IHIuY2xpZW50WSA8IGkudG9wICYmIHIuY2xpZW50WCA8IGkucmlnaHQgOiByLmNsaWVudFkgPCBpLnRvcCAtIHQgfHwgci5jbGllbnRZIDwgaS5ib3R0b20gJiYgci5jbGllbnRYIDwgaS5sZWZ0O1xufVxuZnVuY3Rpb24gUG0ociwgZiwgbykge1xuICB2YXIgaSA9IFd0KEZzKG8uZWwsIG8ub3B0aW9ucy5kcmFnZ2FibGUpKSwgdCA9IDEwO1xuICByZXR1cm4gZiA/IHIuY2xpZW50WCA+IGkucmlnaHQgKyB0IHx8IHIuY2xpZW50WCA8PSBpLnJpZ2h0ICYmIHIuY2xpZW50WSA+IGkuYm90dG9tICYmIHIuY2xpZW50WCA+PSBpLmxlZnQgOiByLmNsaWVudFggPiBpLnJpZ2h0ICYmIHIuY2xpZW50WSA+IGkudG9wIHx8IHIuY2xpZW50WCA8PSBpLnJpZ2h0ICYmIHIuY2xpZW50WSA+IGkuYm90dG9tICsgdDtcbn1cbmZ1bmN0aW9uIEZtKHIsIGYsIG8sIGksIHQsIHMsIGQsIGMpIHtcbiAgdmFyIHAgPSBpID8gci5jbGllbnRZIDogci5jbGllbnRYLCB2ID0gaSA/IG8uaGVpZ2h0IDogby53aWR0aCwgYiA9IGkgPyBvLnRvcCA6IG8ubGVmdCwgUyA9IGkgPyBvLmJvdHRvbSA6IG8ucmlnaHQsIEQgPSAhMTtcbiAgaWYgKCFkKSB7XG4gICAgaWYgKGMgJiYgQWEgPCB2ICogdCkge1xuICAgICAgaWYgKCFBbyAmJiAoeW8gPT09IDEgPyBwID4gYiArIHYgKiBzIC8gMiA6IHAgPCBTIC0gdiAqIHMgLyAyKSAmJiAoQW8gPSAhMCksIEFvKVxuICAgICAgICBEID0gITA7XG4gICAgICBlbHNlIGlmICh5byA9PT0gMSA/IHAgPCBiICsgQWEgOiBwID4gUyAtIEFhKVxuICAgICAgICByZXR1cm4gLXlvO1xuICAgIH0gZWxzZSBpZiAocCA+IGIgKyB2ICogKDEgLSB0KSAvIDIgJiYgcCA8IFMgLSB2ICogKDEgLSB0KSAvIDIpXG4gICAgICByZXR1cm4gTG0oZik7XG4gIH1cbiAgcmV0dXJuIEQgPSBEIHx8IGQsIEQgJiYgKHAgPCBiICsgdiAqIHMgLyAyIHx8IHAgPiBTIC0gdiAqIHMgLyAyKSA/IHAgPiBiICsgdiAvIDIgPyAxIDogLTEgOiAwO1xufVxuZnVuY3Rpb24gTG0ocikge1xuICByZXR1cm4gUm4oU2UpIDwgUm4ocikgPyAxIDogLTE7XG59XG5mdW5jdGlvbiBCbShyKSB7XG4gIGZvciAodmFyIGYgPSByLnRhZ05hbWUgKyByLmNsYXNzTmFtZSArIHIuc3JjICsgci5ocmVmICsgci50ZXh0Q29udGVudCwgbyA9IGYubGVuZ3RoLCBpID0gMDsgby0tOyApXG4gICAgaSArPSBmLmNoYXJDb2RlQXQobyk7XG4gIHJldHVybiBpLnRvU3RyaW5nKDM2KTtcbn1cbmZ1bmN0aW9uIEhtKHIpIHtcbiAgVGEubGVuZ3RoID0gMDtcbiAgZm9yICh2YXIgZiA9IHIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKSwgbyA9IGYubGVuZ3RoOyBvLS07ICkge1xuICAgIHZhciBpID0gZltvXTtcbiAgICBpLmNoZWNrZWQgJiYgVGEucHVzaChpKTtcbiAgfVxufVxuZnVuY3Rpb24gYmEocikge1xuICByZXR1cm4gc2V0VGltZW91dChyLCAwKTtcbn1cbmZ1bmN0aW9uIFJzKHIpIHtcbiAgcmV0dXJuIGNsZWFyVGltZW91dChyKTtcbn1cbk5hICYmIGR0KGRvY3VtZW50LCBcInRvdWNobW92ZVwiLCBmdW5jdGlvbihyKSB7XG4gIChHZS5hY3RpdmUgfHwgRWkpICYmIHIuY2FuY2VsYWJsZSAmJiByLnByZXZlbnREZWZhdWx0KCk7XG59KTtcbkdlLnV0aWxzID0ge1xuICBvbjogZHQsXG4gIG9mZjogaXQsXG4gIGNzczogV2UsXG4gIGZpbmQ6IGpkLFxuICBpczogZnVuY3Rpb24oZiwgbykge1xuICAgIHJldHVybiAhIUtuKGYsIG8sIGYsICExKTtcbiAgfSxcbiAgZXh0ZW5kOiBBbSxcbiAgdGhyb3R0bGU6IFVkLFxuICBjbG9zZXN0OiBLbixcbiAgdG9nZ2xlQ2xhc3M6IGJuLFxuICBjbG9uZTogVmQsXG4gIGluZGV4OiBSbixcbiAgbmV4dFRpY2s6IGJhLFxuICBjYW5jZWxOZXh0VGljazogUnMsXG4gIGRldGVjdERpcmVjdGlvbjogR2QsXG4gIGdldENoaWxkOiBSaVxufTtcbkdlLmdldCA9IGZ1bmN0aW9uKHIpIHtcbiAgcmV0dXJuIHJbU25dO1xufTtcbkdlLm1vdW50ID0gZnVuY3Rpb24oKSB7XG4gIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBmID0gbmV3IEFycmF5KHIpLCBvID0gMDsgbyA8IHI7IG8rKylcbiAgICBmW29dID0gYXJndW1lbnRzW29dO1xuICBmWzBdLmNvbnN0cnVjdG9yID09PSBBcnJheSAmJiAoZiA9IGZbMF0pLCBmLmZvckVhY2goZnVuY3Rpb24oaSkge1xuICAgIGlmICghaS5wcm90b3R5cGUgfHwgIWkucHJvdG90eXBlLmNvbnN0cnVjdG9yKVxuICAgICAgdGhyb3cgXCJTb3J0YWJsZTogTW91bnRlZCBwbHVnaW4gbXVzdCBiZSBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLCBub3QgXCIuY29uY2F0KHt9LnRvU3RyaW5nLmNhbGwoaSkpO1xuICAgIGkudXRpbHMgJiYgKEdlLnV0aWxzID0gSm4oSm4oe30sIEdlLnV0aWxzKSwgaS51dGlscykpLCBUby5tb3VudChpKTtcbiAgfSk7XG59O1xuR2UuY3JlYXRlID0gZnVuY3Rpb24ociwgZikge1xuICByZXR1cm4gbmV3IEdlKHIsIGYpO1xufTtcbkdlLnZlcnNpb24gPSB2bTtcbnZhciBMdCA9IFtdLCBmbywgTXMsIElzID0gITEsIG1zLCBncywgRGEsIGNvO1xuZnVuY3Rpb24gJG0oKSB7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IHtcbiAgICAgIHNjcm9sbDogITAsXG4gICAgICBmb3JjZUF1dG9TY3JvbGxGYWxsYmFjazogITEsXG4gICAgICBzY3JvbGxTZW5zaXRpdml0eTogMzAsXG4gICAgICBzY3JvbGxTcGVlZDogMTAsXG4gICAgICBidWJibGVTY3JvbGw6ICEwXG4gICAgfTtcbiAgICBmb3IgKHZhciBmIGluIHRoaXMpXG4gICAgICBmLmNoYXJBdCgwKSA9PT0gXCJfXCIgJiYgdHlwZW9mIHRoaXNbZl0gPT0gXCJmdW5jdGlvblwiICYmICh0aGlzW2ZdID0gdGhpc1tmXS5iaW5kKHRoaXMpKTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUgPSB7XG4gICAgZHJhZ1N0YXJ0ZWQ6IGZ1bmN0aW9uKG8pIHtcbiAgICAgIHZhciBpID0gby5vcmlnaW5hbEV2ZW50O1xuICAgICAgdGhpcy5zb3J0YWJsZS5uYXRpdmVEcmFnZ2FibGUgPyBkdChkb2N1bWVudCwgXCJkcmFnb3ZlclwiLCB0aGlzLl9oYW5kbGVBdXRvU2Nyb2xsKSA6IHRoaXMub3B0aW9ucy5zdXBwb3J0UG9pbnRlciA/IGR0KGRvY3VtZW50LCBcInBvaW50ZXJtb3ZlXCIsIHRoaXMuX2hhbmRsZUZhbGxiYWNrQXV0b1Njcm9sbCkgOiBpLnRvdWNoZXMgPyBkdChkb2N1bWVudCwgXCJ0b3VjaG1vdmVcIiwgdGhpcy5faGFuZGxlRmFsbGJhY2tBdXRvU2Nyb2xsKSA6IGR0KGRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCB0aGlzLl9oYW5kbGVGYWxsYmFja0F1dG9TY3JvbGwpO1xuICAgIH0sXG4gICAgZHJhZ092ZXJDb21wbGV0ZWQ6IGZ1bmN0aW9uKG8pIHtcbiAgICAgIHZhciBpID0gby5vcmlnaW5hbEV2ZW50O1xuICAgICAgIXRoaXMub3B0aW9ucy5kcmFnT3ZlckJ1YmJsZSAmJiAhaS5yb290RWwgJiYgdGhpcy5faGFuZGxlQXV0b1Njcm9sbChpKTtcbiAgICB9LFxuICAgIGRyb3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5zb3J0YWJsZS5uYXRpdmVEcmFnZ2FibGUgPyBpdChkb2N1bWVudCwgXCJkcmFnb3ZlclwiLCB0aGlzLl9oYW5kbGVBdXRvU2Nyb2xsKSA6IChpdChkb2N1bWVudCwgXCJwb2ludGVybW92ZVwiLCB0aGlzLl9oYW5kbGVGYWxsYmFja0F1dG9TY3JvbGwpLCBpdChkb2N1bWVudCwgXCJ0b3VjaG1vdmVcIiwgdGhpcy5faGFuZGxlRmFsbGJhY2tBdXRvU2Nyb2xsKSwgaXQoZG9jdW1lbnQsIFwibW91c2Vtb3ZlXCIsIHRoaXMuX2hhbmRsZUZhbGxiYWNrQXV0b1Njcm9sbCkpLCBwZCgpLCBDYSgpLCBibSgpO1xuICAgIH0sXG4gICAgbnVsbGluZzogZnVuY3Rpb24oKSB7XG4gICAgICBEYSA9IE1zID0gZm8gPSBJcyA9IGNvID0gbXMgPSBncyA9IG51bGwsIEx0Lmxlbmd0aCA9IDA7XG4gICAgfSxcbiAgICBfaGFuZGxlRmFsbGJhY2tBdXRvU2Nyb2xsOiBmdW5jdGlvbihvKSB7XG4gICAgICB0aGlzLl9oYW5kbGVBdXRvU2Nyb2xsKG8sICEwKTtcbiAgICB9LFxuICAgIF9oYW5kbGVBdXRvU2Nyb2xsOiBmdW5jdGlvbihvLCBpKSB7XG4gICAgICB2YXIgdCA9IHRoaXMsIHMgPSAoby50b3VjaGVzID8gby50b3VjaGVzWzBdIDogbykuY2xpZW50WCwgZCA9IChvLnRvdWNoZXMgPyBvLnRvdWNoZXNbMF0gOiBvKS5jbGllbnRZLCBjID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChzLCBkKTtcbiAgICAgIGlmIChEYSA9IG8sIGkgfHwgdGhpcy5vcHRpb25zLmZvcmNlQXV0b1Njcm9sbEZhbGxiYWNrIHx8IHdvIHx8IGZyIHx8IHZvKSB7XG4gICAgICAgIHlzKG8sIHRoaXMub3B0aW9ucywgYywgaSk7XG4gICAgICAgIHZhciBwID0gTXIoYywgITApO1xuICAgICAgICBJcyAmJiAoIWNvIHx8IHMgIT09IG1zIHx8IGQgIT09IGdzKSAmJiAoY28gJiYgcGQoKSwgY28gPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgdiA9IE1yKGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQocywgZCksICEwKTtcbiAgICAgICAgICB2ICE9PSBwICYmIChwID0gdiwgQ2EoKSksIHlzKG8sIHQub3B0aW9ucywgdiwgaSk7XG4gICAgICAgIH0sIDEwKSwgbXMgPSBzLCBncyA9IGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuYnViYmxlU2Nyb2xsIHx8IE1yKGMsICEwKSA9PT0gWG4oKSkge1xuICAgICAgICAgIENhKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHlzKG8sIHRoaXMub3B0aW9ucywgTXIoYywgITEpLCAhMSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB1cihyLCB7XG4gICAgcGx1Z2luTmFtZTogXCJzY3JvbGxcIixcbiAgICBpbml0aWFsaXplQnlEZWZhdWx0OiAhMFxuICB9KTtcbn1cbmZ1bmN0aW9uIENhKCkge1xuICBMdC5mb3JFYWNoKGZ1bmN0aW9uKHIpIHtcbiAgICBjbGVhckludGVydmFsKHIucGlkKTtcbiAgfSksIEx0ID0gW107XG59XG5mdW5jdGlvbiBwZCgpIHtcbiAgY2xlYXJJbnRlcnZhbChjbyk7XG59XG52YXIgeXMgPSBVZChmdW5jdGlvbihyLCBmLCBvLCBpKSB7XG4gIGlmICghIWYuc2Nyb2xsKSB7XG4gICAgdmFyIHQgPSAoci50b3VjaGVzID8gci50b3VjaGVzWzBdIDogcikuY2xpZW50WCwgcyA9IChyLnRvdWNoZXMgPyByLnRvdWNoZXNbMF0gOiByKS5jbGllbnRZLCBkID0gZi5zY3JvbGxTZW5zaXRpdml0eSwgYyA9IGYuc2Nyb2xsU3BlZWQsIHAgPSBYbigpLCB2ID0gITEsIGI7XG4gICAgTXMgIT09IG8gJiYgKE1zID0gbywgQ2EoKSwgZm8gPSBmLnNjcm9sbCwgYiA9IGYuc2Nyb2xsRm4sIGZvID09PSAhMCAmJiAoZm8gPSBNcihvLCAhMCkpKTtcbiAgICB2YXIgUyA9IDAsIEQgPSBmbztcbiAgICBkbyB7XG4gICAgICB2YXIgVCA9IEQsIG0gPSBXdChUKSwgeCA9IG0udG9wLCBSID0gbS5ib3R0b20sIHcgPSBtLmxlZnQsIEEgPSBtLnJpZ2h0LCBFID0gbS53aWR0aCwgQyA9IG0uaGVpZ2h0LCBNID0gdm9pZCAwLCB5ID0gdm9pZCAwLCBCID0gVC5zY3JvbGxXaWR0aCwgJCA9IFQuc2Nyb2xsSGVpZ2h0LCBGID0gV2UoVCksIGsgPSBULnNjcm9sbExlZnQsIGggPSBULnNjcm9sbFRvcDtcbiAgICAgIFQgPT09IHAgPyAoTSA9IEUgPCBCICYmIChGLm92ZXJmbG93WCA9PT0gXCJhdXRvXCIgfHwgRi5vdmVyZmxvd1ggPT09IFwic2Nyb2xsXCIgfHwgRi5vdmVyZmxvd1ggPT09IFwidmlzaWJsZVwiKSwgeSA9IEMgPCAkICYmIChGLm92ZXJmbG93WSA9PT0gXCJhdXRvXCIgfHwgRi5vdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHwgRi5vdmVyZmxvd1kgPT09IFwidmlzaWJsZVwiKSkgOiAoTSA9IEUgPCBCICYmIChGLm92ZXJmbG93WCA9PT0gXCJhdXRvXCIgfHwgRi5vdmVyZmxvd1ggPT09IFwic2Nyb2xsXCIpLCB5ID0gQyA8ICQgJiYgKEYub3ZlcmZsb3dZID09PSBcImF1dG9cIiB8fCBGLm92ZXJmbG93WSA9PT0gXCJzY3JvbGxcIikpO1xuICAgICAgdmFyIE4gPSBNICYmIChNYXRoLmFicyhBIC0gdCkgPD0gZCAmJiBrICsgRSA8IEIpIC0gKE1hdGguYWJzKHcgLSB0KSA8PSBkICYmICEhayksIFAgPSB5ICYmIChNYXRoLmFicyhSIC0gcykgPD0gZCAmJiBoICsgQyA8ICQpIC0gKE1hdGguYWJzKHggLSBzKSA8PSBkICYmICEhaCk7XG4gICAgICBpZiAoIUx0W1NdKVxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8PSBTOyBqKyspXG4gICAgICAgICAgTHRbal0gfHwgKEx0W2pdID0ge30pO1xuICAgICAgKEx0W1NdLnZ4ICE9IE4gfHwgTHRbU10udnkgIT0gUCB8fCBMdFtTXS5lbCAhPT0gVCkgJiYgKEx0W1NdLmVsID0gVCwgTHRbU10udnggPSBOLCBMdFtTXS52eSA9IFAsIGNsZWFySW50ZXJ2YWwoTHRbU10ucGlkKSwgKE4gIT0gMCB8fCBQICE9IDApICYmICh2ID0gITAsIEx0W1NdLnBpZCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuICAgICAgICBpICYmIHRoaXMubGF5ZXIgPT09IDAgJiYgR2UuYWN0aXZlLl9vblRvdWNoTW92ZShEYSk7XG4gICAgICAgIHZhciBJID0gTHRbdGhpcy5sYXllcl0udnkgPyBMdFt0aGlzLmxheWVyXS52eSAqIGMgOiAwLCBWID0gTHRbdGhpcy5sYXllcl0udnggPyBMdFt0aGlzLmxheWVyXS52eCAqIGMgOiAwO1xuICAgICAgICB0eXBlb2YgYiA9PSBcImZ1bmN0aW9uXCIgJiYgYi5jYWxsKEdlLmRyYWdnZWQucGFyZW50Tm9kZVtTbl0sIFYsIEksIHIsIERhLCBMdFt0aGlzLmxheWVyXS5lbCkgIT09IFwiY29udGludWVcIiB8fCB6ZChMdFt0aGlzLmxheWVyXS5lbCwgViwgSSk7XG4gICAgICB9LmJpbmQoe1xuICAgICAgICBsYXllcjogU1xuICAgICAgfSksIDI0KSkpLCBTKys7XG4gICAgfSB3aGlsZSAoZi5idWJibGVTY3JvbGwgJiYgRCAhPT0gcCAmJiAoRCA9IE1yKEQsICExKSkpO1xuICAgIElzID0gdjtcbiAgfVxufSwgMzApLCBYZCA9IGZ1bmN0aW9uKGYpIHtcbiAgdmFyIG8gPSBmLm9yaWdpbmFsRXZlbnQsIGkgPSBmLnB1dFNvcnRhYmxlLCB0ID0gZi5kcmFnRWwsIHMgPSBmLmFjdGl2ZVNvcnRhYmxlLCBkID0gZi5kaXNwYXRjaFNvcnRhYmxlRXZlbnQsIGMgPSBmLmhpZGVHaG9zdEZvclRhcmdldCwgcCA9IGYudW5oaWRlR2hvc3RGb3JUYXJnZXQ7XG4gIGlmICghIW8pIHtcbiAgICB2YXIgdiA9IGkgfHwgcztcbiAgICBjKCk7XG4gICAgdmFyIGIgPSBvLmNoYW5nZWRUb3VjaGVzICYmIG8uY2hhbmdlZFRvdWNoZXMubGVuZ3RoID8gby5jaGFuZ2VkVG91Y2hlc1swXSA6IG8sIFMgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGIuY2xpZW50WCwgYi5jbGllbnRZKTtcbiAgICBwKCksIHYgJiYgIXYuZWwuY29udGFpbnMoUykgJiYgKGQoXCJzcGlsbFwiKSwgdGhpcy5vblNwaWxsKHtcbiAgICAgIGRyYWdFbDogdCxcbiAgICAgIHB1dFNvcnRhYmxlOiBpXG4gICAgfSkpO1xuICB9XG59O1xuZnVuY3Rpb24gTHMoKSB7XG59XG5Mcy5wcm90b3R5cGUgPSB7XG4gIHN0YXJ0SW5kZXg6IG51bGwsXG4gIGRyYWdTdGFydDogZnVuY3Rpb24oZikge1xuICAgIHZhciBvID0gZi5vbGREcmFnZ2FibGVJbmRleDtcbiAgICB0aGlzLnN0YXJ0SW5kZXggPSBvO1xuICB9LFxuICBvblNwaWxsOiBmdW5jdGlvbihmKSB7XG4gICAgdmFyIG8gPSBmLmRyYWdFbCwgaSA9IGYucHV0U29ydGFibGU7XG4gICAgdGhpcy5zb3J0YWJsZS5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKSwgaSAmJiBpLmNhcHR1cmVBbmltYXRpb25TdGF0ZSgpO1xuICAgIHZhciB0ID0gUmkodGhpcy5zb3J0YWJsZS5lbCwgdGhpcy5zdGFydEluZGV4LCB0aGlzLm9wdGlvbnMpO1xuICAgIHQgPyB0aGlzLnNvcnRhYmxlLmVsLmluc2VydEJlZm9yZShvLCB0KSA6IHRoaXMuc29ydGFibGUuZWwuYXBwZW5kQ2hpbGQobyksIHRoaXMuc29ydGFibGUuYW5pbWF0ZUFsbCgpLCBpICYmIGkuYW5pbWF0ZUFsbCgpO1xuICB9LFxuICBkcm9wOiBYZFxufTtcbnVyKExzLCB7XG4gIHBsdWdpbk5hbWU6IFwicmV2ZXJ0T25TcGlsbFwiXG59KTtcbmZ1bmN0aW9uIEJzKCkge1xufVxuQnMucHJvdG90eXBlID0ge1xuICBvblNwaWxsOiBmdW5jdGlvbihmKSB7XG4gICAgdmFyIG8gPSBmLmRyYWdFbCwgaSA9IGYucHV0U29ydGFibGUsIHQgPSBpIHx8IHRoaXMuc29ydGFibGU7XG4gICAgdC5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKSwgby5wYXJlbnROb2RlICYmIG8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSwgdC5hbmltYXRlQWxsKCk7XG4gIH0sXG4gIGRyb3A6IFhkXG59O1xudXIoQnMsIHtcbiAgcGx1Z2luTmFtZTogXCJyZW1vdmVPblNwaWxsXCJcbn0pO1xuR2UubW91bnQobmV3ICRtKCkpO1xuR2UubW91bnQoQnMsIExzKTtcbmZ1bmN0aW9uIEFzKHIpIHtcbiAgci5wYXJlbnRFbGVtZW50ICE9PSBudWxsICYmIHIucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChyKTtcbn1cbmZ1bmN0aW9uIGhkKHIsIGYsIG8pIHtcbiAgY29uc3QgaSA9IG8gPT09IDAgPyByLmNoaWxkcmVuWzBdIDogci5jaGlsZHJlbltvIC0gMV0ubmV4dFNpYmxpbmc7XG4gIHIuaW5zZXJ0QmVmb3JlKGYsIGkpO1xufVxuZnVuY3Rpb24ga20oKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93IDwgXCJ1XCIgPyB3aW5kb3cuY29uc29sZSA6IGdsb2JhbC5jb25zb2xlO1xufVxuY29uc3Qgam0gPSBrbSgpO1xuZnVuY3Rpb24gVW0ocikge1xuICBjb25zdCBmID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIGZbaV0gfHwgKGZbaV0gPSByKGkpKTtcbiAgfTtcbn1cbmNvbnN0IHptID0gLy0oXFx3KS9nLCBWbSA9IFVtKChyKSA9PiByLnJlcGxhY2Uoem0sIChmLCBvKSA9PiBvLnRvVXBwZXJDYXNlKCkpKSwgSmQgPSBbXCJTdGFydFwiLCBcIkFkZFwiLCBcIlJlbW92ZVwiLCBcIlVwZGF0ZVwiLCBcIkVuZFwiXSwgWmQgPSBbXCJDaG9vc2VcIiwgXCJVbmNob29zZVwiLCBcIlNvcnRcIiwgXCJGaWx0ZXJcIiwgXCJDbG9uZVwiXSwgcWQgPSBbXCJNb3ZlXCJdLCBXbSA9IFtxZCwgSmQsIFpkXS5mbGF0TWFwKChyKSA9PiByKS5tYXAoKHIpID0+IGBvbiR7cn1gKSwgTnMgPSB7XG4gIG1hbmFnZTogcWQsXG4gIG1hbmFnZUFuZEVtaXQ6IEpkLFxuICBlbWl0OiBaZFxufTtcbmZ1bmN0aW9uIEdtKHIpIHtcbiAgcmV0dXJuIFdtLmluZGV4T2YocikgIT09IC0xO1xufVxuY29uc3QgUW0gPSBbXG4gIFwiYVwiLFxuICBcImFiYnJcIixcbiAgXCJhZGRyZXNzXCIsXG4gIFwiYXJlYVwiLFxuICBcImFydGljbGVcIixcbiAgXCJhc2lkZVwiLFxuICBcImF1ZGlvXCIsXG4gIFwiYlwiLFxuICBcImJhc2VcIixcbiAgXCJiZGlcIixcbiAgXCJiZG9cIixcbiAgXCJibG9ja3F1b3RlXCIsXG4gIFwiYm9keVwiLFxuICBcImJyXCIsXG4gIFwiYnV0dG9uXCIsXG4gIFwiY2FudmFzXCIsXG4gIFwiY2FwdGlvblwiLFxuICBcImNpdGVcIixcbiAgXCJjb2RlXCIsXG4gIFwiY29sXCIsXG4gIFwiY29sZ3JvdXBcIixcbiAgXCJkYXRhXCIsXG4gIFwiZGF0YWxpc3RcIixcbiAgXCJkZFwiLFxuICBcImRlbFwiLFxuICBcImRldGFpbHNcIixcbiAgXCJkZm5cIixcbiAgXCJkaWFsb2dcIixcbiAgXCJkaXZcIixcbiAgXCJkbFwiLFxuICBcImR0XCIsXG4gIFwiZW1cIixcbiAgXCJlbWJlZFwiLFxuICBcImZpZWxkc2V0XCIsXG4gIFwiZmlnY2FwdGlvblwiLFxuICBcImZpZ3VyZVwiLFxuICBcImZvb3RlclwiLFxuICBcImZvcm1cIixcbiAgXCJoMVwiLFxuICBcImgyXCIsXG4gIFwiaDNcIixcbiAgXCJoNFwiLFxuICBcImg1XCIsXG4gIFwiaDZcIixcbiAgXCJoZWFkXCIsXG4gIFwiaGVhZGVyXCIsXG4gIFwiaGdyb3VwXCIsXG4gIFwiaHJcIixcbiAgXCJodG1sXCIsXG4gIFwiaVwiLFxuICBcImlmcmFtZVwiLFxuICBcImltZ1wiLFxuICBcImlucHV0XCIsXG4gIFwiaW5zXCIsXG4gIFwia2JkXCIsXG4gIFwibGFiZWxcIixcbiAgXCJsZWdlbmRcIixcbiAgXCJsaVwiLFxuICBcImxpbmtcIixcbiAgXCJtYWluXCIsXG4gIFwibWFwXCIsXG4gIFwibWFya1wiLFxuICBcIm1hdGhcIixcbiAgXCJtZW51XCIsXG4gIFwibWVudWl0ZW1cIixcbiAgXCJtZXRhXCIsXG4gIFwibWV0ZXJcIixcbiAgXCJuYXZcIixcbiAgXCJub3NjcmlwdFwiLFxuICBcIm9iamVjdFwiLFxuICBcIm9sXCIsXG4gIFwib3B0Z3JvdXBcIixcbiAgXCJvcHRpb25cIixcbiAgXCJvdXRwdXRcIixcbiAgXCJwXCIsXG4gIFwicGFyYW1cIixcbiAgXCJwaWN0dXJlXCIsXG4gIFwicHJlXCIsXG4gIFwicHJvZ3Jlc3NcIixcbiAgXCJxXCIsXG4gIFwicmJcIixcbiAgXCJycFwiLFxuICBcInJ0XCIsXG4gIFwicnRjXCIsXG4gIFwicnVieVwiLFxuICBcInNcIixcbiAgXCJzYW1wXCIsXG4gIFwic2NyaXB0XCIsXG4gIFwic2VjdGlvblwiLFxuICBcInNlbGVjdFwiLFxuICBcInNsb3RcIixcbiAgXCJzbWFsbFwiLFxuICBcInNvdXJjZVwiLFxuICBcInNwYW5cIixcbiAgXCJzdHJvbmdcIixcbiAgXCJzdHlsZVwiLFxuICBcInN1YlwiLFxuICBcInN1bW1hcnlcIixcbiAgXCJzdXBcIixcbiAgXCJzdmdcIixcbiAgXCJ0YWJsZVwiLFxuICBcInRib2R5XCIsXG4gIFwidGRcIixcbiAgXCJ0ZW1wbGF0ZVwiLFxuICBcInRleHRhcmVhXCIsXG4gIFwidGZvb3RcIixcbiAgXCJ0aFwiLFxuICBcInRoZWFkXCIsXG4gIFwidGltZVwiLFxuICBcInRpdGxlXCIsXG4gIFwidHJcIixcbiAgXCJ0cmFja1wiLFxuICBcInVcIixcbiAgXCJ1bFwiLFxuICBcInZhclwiLFxuICBcInZpZGVvXCIsXG4gIFwid2JyXCJcbl07XG5mdW5jdGlvbiBZbShyKSB7XG4gIHJldHVybiBRbS5pbmNsdWRlcyhyKTtcbn1cbmZ1bmN0aW9uIEttKHIpIHtcbiAgcmV0dXJuIFtcInRyYW5zaXRpb24tZ3JvdXBcIiwgXCJUcmFuc2l0aW9uR3JvdXBcIl0uaW5jbHVkZXMocik7XG59XG5mdW5jdGlvbiBfZChyKSB7XG4gIHJldHVybiBbXCJpZFwiLCBcImNsYXNzXCIsIFwicm9sZVwiLCBcInN0eWxlXCJdLmluY2x1ZGVzKHIpIHx8IHIuc3RhcnRzV2l0aChcImRhdGEtXCIpIHx8IHIuc3RhcnRzV2l0aChcImFyaWEtXCIpIHx8IHIuc3RhcnRzV2l0aChcIm9uXCIpO1xufVxuZnVuY3Rpb24gZWMocikge1xuICByZXR1cm4gci5yZWR1Y2UoKGYsIFtvLCBpXSkgPT4gKGZbb10gPSBpLCBmKSwge30pO1xufVxuZnVuY3Rpb24gWG0oeyAkYXR0cnM6IHIsIGNvbXBvbmVudERhdGE6IGYgPSB7fSB9KSB7XG4gIHJldHVybiB7XG4gICAgLi4uZWMoXG4gICAgICBPYmplY3QuZW50cmllcyhyKS5maWx0ZXIoKFtpLCB0XSkgPT4gX2QoaSkpXG4gICAgKSxcbiAgICAuLi5mXG4gIH07XG59XG5mdW5jdGlvbiBKbSh7ICRhdHRyczogciwgY2FsbEJhY2tCdWlsZGVyOiBmIH0pIHtcbiAgY29uc3QgbyA9IGVjKHRjKHIpKTtcbiAgT2JqZWN0LmVudHJpZXMoZikuZm9yRWFjaCgoW3QsIHNdKSA9PiB7XG4gICAgTnNbdF0uZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgb1tgb24ke2R9YF0gPSBzKGQpO1xuICAgIH0pO1xuICB9KTtcbiAgY29uc3QgaSA9IGBbZGF0YS1kcmFnZ2FibGVdJHtvLmRyYWdnYWJsZSB8fCBcIlwifWA7XG4gIHJldHVybiB7XG4gICAgLi4ubyxcbiAgICBkcmFnZ2FibGU6IGlcbiAgfTtcbn1cbmZ1bmN0aW9uIHRjKHIpIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHIpLmZpbHRlcigoW2YsIG9dKSA9PiAhX2QoZikpLm1hcCgoW2YsIG9dKSA9PiBbVm0oZiksIG9dKS5maWx0ZXIoKFtmLCBvXSkgPT4gIUdtKGYpKTtcbn1cbmNvbnN0IHZkID0gKHsgZWw6IHIgfSkgPT4gciwgWm0gPSAociwgZikgPT4gci5fX2RyYWdnYWJsZV9jb250ZXh0ID0gZiwgbWQgPSAocikgPT4gci5fX2RyYWdnYWJsZV9jb250ZXh0O1xuY2xhc3MgcW0ge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgbm9kZXM6IHsgaGVhZGVyOiBmLCBkZWZhdWx0OiBvLCBmb290ZXI6IGkgfSxcbiAgICByb290OiB0LFxuICAgIHJlYWxMaXN0OiBzXG4gIH0pIHtcbiAgICB0aGlzLmRlZmF1bHROb2RlcyA9IG8sIHRoaXMuY2hpbGRyZW4gPSBbLi4uZiwgLi4ubywgLi4uaV0sIHRoaXMuZXh0ZXJuYWxDb21wb25lbnQgPSB0LmV4dGVybmFsQ29tcG9uZW50LCB0aGlzLnJvb3RUcmFuc2l0aW9uID0gdC50cmFuc2l0aW9uLCB0aGlzLnRhZyA9IHQudGFnLCB0aGlzLnJlYWxMaXN0ID0gcztcbiAgfVxuICBnZXQgX2lzUm9vdENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlcm5hbENvbXBvbmVudCB8fCB0aGlzLnJvb3RUcmFuc2l0aW9uO1xuICB9XG4gIHJlbmRlcihmLCBvKSB7XG4gICAgY29uc3QgeyB0YWc6IGksIGNoaWxkcmVuOiB0LCBfaXNSb290Q29tcG9uZW50OiBzIH0gPSB0aGlzO1xuICAgIHJldHVybiBmKGksIG8sIHMgPyB7IGRlZmF1bHQ6ICgpID0+IHQgfSA6IHQpO1xuICB9XG4gIHVwZGF0ZWQoKSB7XG4gICAgY29uc3QgeyBkZWZhdWx0Tm9kZXM6IGYsIHJlYWxMaXN0OiBvIH0gPSB0aGlzO1xuICAgIGYuZm9yRWFjaCgoaSwgdCkgPT4ge1xuICAgICAgWm0odmQoaSksIHtcbiAgICAgICAgZWxlbWVudDogb1t0XSxcbiAgICAgICAgaW5kZXg6IHRcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGdldFVuZGVybHlpbmdWbShmKSB7XG4gICAgcmV0dXJuIG1kKGYpO1xuICB9XG4gIGdldFZtSW5kZXhGcm9tRG9tSW5kZXgoZiwgbykge1xuICAgIGNvbnN0IHsgZGVmYXVsdE5vZGVzOiBpIH0gPSB0aGlzLCB7IGxlbmd0aDogdCB9ID0gaSwgcyA9IG8uY2hpbGRyZW4sIGQgPSBzLml0ZW0oZik7XG4gICAgaWYgKGQgPT09IG51bGwpXG4gICAgICByZXR1cm4gdDtcbiAgICBjb25zdCBjID0gbWQoZCk7XG4gICAgaWYgKGMpXG4gICAgICByZXR1cm4gYy5pbmRleDtcbiAgICBpZiAodCA9PT0gMClcbiAgICAgIHJldHVybiAwO1xuICAgIGNvbnN0IHAgPSB2ZChpWzBdKSwgdiA9IFsuLi5zXS5maW5kSW5kZXgoXG4gICAgICAoYikgPT4gYiA9PT0gcFxuICAgICk7XG4gICAgcmV0dXJuIGYgPCB2ID8gMCA6IHQ7XG4gIH1cbn1cbmZ1bmN0aW9uIF9tKHIsIGYpIHtcbiAgY29uc3QgbyA9IHJbZl07XG4gIHJldHVybiBvID8gbygpIDogW107XG59XG5mdW5jdGlvbiBlZyh7ICRzbG90czogciwgcmVhbExpc3Q6IGYsIGdldEtleTogbyB9KSB7XG4gIGNvbnN0IGkgPSBmIHx8IFtdLCBbdCwgc10gPSBbXCJoZWFkZXJcIiwgXCJmb290ZXJcIl0ubWFwKFxuICAgIChwKSA9PiBfbShyLCBwKVxuICApLCB7IGl0ZW06IGQgfSA9IHI7XG4gIGlmICghZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJkcmFnZ2FibGUgZWxlbWVudCBtdXN0IGhhdmUgYW4gaXRlbSBzbG90XCIpO1xuICBjb25zdCBjID0gaS5mbGF0TWFwKFxuICAgIChwLCB2KSA9PiBkKHsgZWxlbWVudDogcCwgaW5kZXg6IHYgfSkubWFwKChiKSA9PiAoYi5rZXkgPSBvKHApLCBiLnByb3BzID0geyAuLi5iLnByb3BzIHx8IHt9LCBcImRhdGEtZHJhZ2dhYmxlXCI6ICEwIH0sIGIpKVxuICApO1xuICBpZiAoYy5sZW5ndGggIT09IGkubGVuZ3RoKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkl0ZW0gc2xvdCBtdXN0IGhhdmUgb25seSBvbmUgY2hpbGRcIik7XG4gIHJldHVybiB7XG4gICAgaGVhZGVyOiB0LFxuICAgIGZvb3RlcjogcyxcbiAgICBkZWZhdWx0OiBjXG4gIH07XG59XG5mdW5jdGlvbiB0ZyhyKSB7XG4gIGNvbnN0IGYgPSBLbShyKSwgbyA9ICFZbShyKSAmJiAhZjtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2l0aW9uOiBmLFxuICAgIGV4dGVybmFsQ29tcG9uZW50OiBvLFxuICAgIHRhZzogbyA/IGJlKHIpIDogZiA/IGdoIDogclxuICB9O1xufVxuZnVuY3Rpb24gbmcoeyAkc2xvdHM6IHIsIHRhZzogZiwgcmVhbExpc3Q6IG8sIGdldEtleTogaSB9KSB7XG4gIGNvbnN0IHQgPSBlZyh7ICRzbG90czogciwgcmVhbExpc3Q6IG8sIGdldEtleTogaSB9KSwgcyA9IHRnKGYpO1xuICByZXR1cm4gbmV3IHFtKHsgbm9kZXM6IHQsIHJvb3Q6IHMsIHJlYWxMaXN0OiBvIH0pO1xufVxuZnVuY3Rpb24gbmMociwgZikge1xuICBhcigoKSA9PiB0aGlzLiRlbWl0KHIudG9Mb3dlckNhc2UoKSwgZikpO1xufVxuZnVuY3Rpb24gcmMocikge1xuICByZXR1cm4gKGYsIG8pID0+IHtcbiAgICBpZiAodGhpcy5yZWFsTGlzdCAhPT0gbnVsbClcbiAgICAgIHJldHVybiB0aGlzW2BvbkRyYWcke3J9YF0oZiwgbyk7XG4gIH07XG59XG5mdW5jdGlvbiByZyhyKSB7XG4gIGNvbnN0IGYgPSByYy5jYWxsKHRoaXMsIHIpO1xuICByZXR1cm4gKG8sIGkpID0+IHtcbiAgICBmLmNhbGwodGhpcywgbywgaSksIG5jLmNhbGwodGhpcywgciwgbyk7XG4gIH07XG59XG5sZXQgYnMgPSBudWxsO1xuY29uc3QgaWcgPSB7XG4gIGxpc3Q6IHtcbiAgICB0eXBlOiBBcnJheSxcbiAgICByZXF1aXJlZDogITEsXG4gICAgZGVmYXVsdDogbnVsbFxuICB9LFxuICBtb2RlbFZhbHVlOiB7XG4gICAgdHlwZTogQXJyYXksXG4gICAgcmVxdWlyZWQ6ICExLFxuICAgIGRlZmF1bHQ6IG51bGxcbiAgfSxcbiAgaXRlbUtleToge1xuICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICByZXF1aXJlZDogITBcbiAgfSxcbiAgY2xvbmU6IHtcbiAgICB0eXBlOiBGdW5jdGlvbixcbiAgICBkZWZhdWx0OiAocikgPT4gclxuICB9LFxuICB0YWc6IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgZGVmYXVsdDogXCJkaXZcIlxuICB9LFxuICBtb3ZlOiB7XG4gICAgdHlwZTogRnVuY3Rpb24sXG4gICAgZGVmYXVsdDogbnVsbFxuICB9LFxuICBjb21wb25lbnREYXRhOiB7XG4gICAgdHlwZTogT2JqZWN0LFxuICAgIHJlcXVpcmVkOiAhMSxcbiAgICBkZWZhdWx0OiBudWxsXG4gIH1cbn0sIG9nID0gW1xuICBcInVwZGF0ZTptb2RlbFZhbHVlXCIsXG4gIFwiY2hhbmdlXCIsXG4gIC4uLlsuLi5Ocy5tYW5hZ2VBbmRFbWl0LCAuLi5Ocy5lbWl0XS5tYXAoKHIpID0+IHIudG9Mb3dlckNhc2UoKSlcbl0sIEhzID0gd3Qoe1xuICBuYW1lOiBcImRyYWdnYWJsZVwiLFxuICBpbmhlcml0QXR0cnM6ICExLFxuICBwcm9wczogaWcsXG4gIGVtaXRzOiBvZyxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6ICExXG4gICAgfTtcbiAgfSxcbiAgcmVuZGVyKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmVycm9yID0gITE7XG4gICAgICBjb25zdCB7ICRzbG90czogciwgJGF0dHJzOiBmLCB0YWc6IG8sIGNvbXBvbmVudERhdGE6IGksIHJlYWxMaXN0OiB0LCBnZXRLZXk6IHMgfSA9IHRoaXMsIGQgPSBuZyh7XG4gICAgICAgICRzbG90czogcixcbiAgICAgICAgdGFnOiBvLFxuICAgICAgICByZWFsTGlzdDogdCxcbiAgICAgICAgZ2V0S2V5OiBzXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcG9uZW50U3RydWN0dXJlID0gZDtcbiAgICAgIGNvbnN0IGMgPSBYbSh7ICRhdHRyczogZiwgY29tcG9uZW50RGF0YTogaSB9KTtcbiAgICAgIHJldHVybiBkLnJlbmRlcihobywgYyk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3IgPSAhMCwgaG8oXCJwcmVcIiwgeyBzdHlsZTogeyBjb2xvcjogXCJyZWRcIiB9IH0sIHIuc3RhY2spO1xuICAgIH1cbiAgfSxcbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmxpc3QgIT09IG51bGwgJiYgdGhpcy5tb2RlbFZhbHVlICE9PSBudWxsICYmIGptLmVycm9yKFxuICAgICAgXCJtb2RlbFZhbHVlIGFuZCBsaXN0IHByb3BzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUhIFBsZWFzZSBzZXQgb25lIG9yIGFub3RoZXIuXCJcbiAgICApO1xuICB9LFxuICBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLmVycm9yKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHsgJGF0dHJzOiByLCAkZWw6IGYsIGNvbXBvbmVudFN0cnVjdHVyZTogbyB9ID0gdGhpcztcbiAgICBvLnVwZGF0ZWQoKTtcbiAgICBjb25zdCBpID0gSm0oe1xuICAgICAgJGF0dHJzOiByLFxuICAgICAgY2FsbEJhY2tCdWlsZGVyOiB7XG4gICAgICAgIG1hbmFnZUFuZEVtaXQ6IChzKSA9PiByZy5jYWxsKHRoaXMsIHMpLFxuICAgICAgICBlbWl0OiAocykgPT4gbmMuYmluZCh0aGlzLCBzKSxcbiAgICAgICAgbWFuYWdlOiAocykgPT4gcmMuY2FsbCh0aGlzLCBzKVxuICAgICAgfVxuICAgIH0pLCB0ID0gZi5ub2RlVHlwZSA9PT0gMSA/IGYgOiBmLnBhcmVudEVsZW1lbnQ7XG4gICAgdGhpcy5fc29ydGFibGUgPSBuZXcgR2UodCwgaSksIHRoaXMudGFyZ2V0RG9tRWxlbWVudCA9IHQsIHQuX19kcmFnZ2FibGVfY29tcG9uZW50X18gPSB0aGlzO1xuICB9LFxuICB1cGRhdGVkKCkge1xuICAgIHRoaXMuY29tcG9uZW50U3RydWN0dXJlLnVwZGF0ZWQoKTtcbiAgfSxcbiAgYmVmb3JlVW5tb3VudCgpIHtcbiAgICB0aGlzLl9zb3J0YWJsZSAhPT0gdm9pZCAwICYmIHRoaXMuX3NvcnRhYmxlLmRlc3Ryb3koKTtcbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICByZWFsTGlzdCgpIHtcbiAgICAgIGNvbnN0IHsgbGlzdDogciB9ID0gdGhpcztcbiAgICAgIHJldHVybiByIHx8IHRoaXMubW9kZWxWYWx1ZTtcbiAgICB9LFxuICAgIGdldEtleSgpIHtcbiAgICAgIGNvbnN0IHsgaXRlbUtleTogciB9ID0gdGhpcztcbiAgICAgIHJldHVybiB0eXBlb2YgciA9PSBcImZ1bmN0aW9uXCIgPyByIDogKGYpID0+IGZbcl07XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgICRhdHRyczoge1xuICAgICAgaGFuZGxlcihyKSB7XG4gICAgICAgIGNvbnN0IHsgX3NvcnRhYmxlOiBmIH0gPSB0aGlzO1xuICAgICAgICAhZiB8fCB0YyhyKS5mb3JFYWNoKChbbywgaV0pID0+IHtcbiAgICAgICAgICBmLm9wdGlvbihvLCBpKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZGVlcDogITBcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRVbmRlcmx5aW5nVm0ocikge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U3RydWN0dXJlLmdldFVuZGVybHlpbmdWbShyKSB8fCBudWxsO1xuICAgIH0sXG4gICAgZ2V0VW5kZXJseWluZ1BvdGVuY2lhbERyYWdnYWJsZUNvbXBvbmVudChyKSB7XG4gICAgICByZXR1cm4gci5fX2RyYWdnYWJsZV9jb21wb25lbnRfXztcbiAgICB9LFxuICAgIGVtaXRDaGFuZ2VzKHIpIHtcbiAgICAgIGFyKCgpID0+IHRoaXMuJGVtaXQoXCJjaGFuZ2VcIiwgcikpO1xuICAgIH0sXG4gICAgYWx0ZXJMaXN0KHIpIHtcbiAgICAgIGlmICh0aGlzLmxpc3QpIHtcbiAgICAgICAgcih0aGlzLmxpc3QpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBmID0gWy4uLnRoaXMubW9kZWxWYWx1ZV07XG4gICAgICByKGYpLCB0aGlzLiRlbWl0KFwidXBkYXRlOm1vZGVsVmFsdWVcIiwgZik7XG4gICAgfSxcbiAgICBzcGxpY2VMaXN0KCkge1xuICAgICAgY29uc3QgciA9IChmKSA9PiBmLnNwbGljZSguLi5hcmd1bWVudHMpO1xuICAgICAgdGhpcy5hbHRlckxpc3Qocik7XG4gICAgfSxcbiAgICB1cGRhdGVQb3NpdGlvbihyLCBmKSB7XG4gICAgICBjb25zdCBvID0gKGkpID0+IGkuc3BsaWNlKGYsIDAsIGkuc3BsaWNlKHIsIDEpWzBdKTtcbiAgICAgIHRoaXMuYWx0ZXJMaXN0KG8pO1xuICAgIH0sXG4gICAgZ2V0UmVsYXRlZENvbnRleHRGcm9tTW92ZUV2ZW50KHsgdG86IHIsIHJlbGF0ZWQ6IGYgfSkge1xuICAgICAgY29uc3QgbyA9IHRoaXMuZ2V0VW5kZXJseWluZ1BvdGVuY2lhbERyYWdnYWJsZUNvbXBvbmVudChyKTtcbiAgICAgIGlmICghbylcbiAgICAgICAgcmV0dXJuIHsgY29tcG9uZW50OiBvIH07XG4gICAgICBjb25zdCBpID0gby5yZWFsTGlzdCwgdCA9IHsgbGlzdDogaSwgY29tcG9uZW50OiBvIH07XG4gICAgICByZXR1cm4gciAhPT0gZiAmJiBpID8geyAuLi5vLmdldFVuZGVybHlpbmdWbShmKSB8fCB7fSwgLi4udCB9IDogdDtcbiAgICB9LFxuICAgIGdldFZtSW5kZXhGcm9tRG9tSW5kZXgocikge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U3RydWN0dXJlLmdldFZtSW5kZXhGcm9tRG9tSW5kZXgoXG4gICAgICAgIHIsXG4gICAgICAgIHRoaXMudGFyZ2V0RG9tRWxlbWVudFxuICAgICAgKTtcbiAgICB9LFxuICAgIG9uRHJhZ1N0YXJ0KHIpIHtcbiAgICAgIHRoaXMuY29udGV4dCA9IHRoaXMuZ2V0VW5kZXJseWluZ1ZtKHIuaXRlbSksIHIuaXRlbS5fdW5kZXJseWluZ192bV8gPSB0aGlzLmNsb25lKHRoaXMuY29udGV4dC5lbGVtZW50KSwgYnMgPSByLml0ZW07XG4gICAgfSxcbiAgICBvbkRyYWdBZGQocikge1xuICAgICAgY29uc3QgZiA9IHIuaXRlbS5fdW5kZXJseWluZ192bV87XG4gICAgICBpZiAoZiA9PT0gdm9pZCAwKVxuICAgICAgICByZXR1cm47XG4gICAgICBBcyhyLml0ZW0pO1xuICAgICAgY29uc3QgbyA9IHRoaXMuZ2V0Vm1JbmRleEZyb21Eb21JbmRleChyLm5ld0luZGV4KTtcbiAgICAgIHRoaXMuc3BsaWNlTGlzdChvLCAwLCBmKTtcbiAgICAgIGNvbnN0IGkgPSB7IGVsZW1lbnQ6IGYsIG5ld0luZGV4OiBvIH07XG4gICAgICB0aGlzLmVtaXRDaGFuZ2VzKHsgYWRkZWQ6IGkgfSk7XG4gICAgfSxcbiAgICBvbkRyYWdSZW1vdmUocikge1xuICAgICAgaWYgKGhkKHRoaXMuJGVsLCByLml0ZW0sIHIub2xkSW5kZXgpLCByLnB1bGxNb2RlID09PSBcImNsb25lXCIpIHtcbiAgICAgICAgQXMoci5jbG9uZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgaW5kZXg6IGYsIGVsZW1lbnQ6IG8gfSA9IHRoaXMuY29udGV4dDtcbiAgICAgIHRoaXMuc3BsaWNlTGlzdChmLCAxKTtcbiAgICAgIGNvbnN0IGkgPSB7IGVsZW1lbnQ6IG8sIG9sZEluZGV4OiBmIH07XG4gICAgICB0aGlzLmVtaXRDaGFuZ2VzKHsgcmVtb3ZlZDogaSB9KTtcbiAgICB9LFxuICAgIG9uRHJhZ1VwZGF0ZShyKSB7XG4gICAgICBBcyhyLml0ZW0pLCBoZChyLmZyb20sIHIuaXRlbSwgci5vbGRJbmRleCk7XG4gICAgICBjb25zdCBmID0gdGhpcy5jb250ZXh0LmluZGV4LCBvID0gdGhpcy5nZXRWbUluZGV4RnJvbURvbUluZGV4KHIubmV3SW5kZXgpO1xuICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbihmLCBvKTtcbiAgICAgIGNvbnN0IGkgPSB7IGVsZW1lbnQ6IHRoaXMuY29udGV4dC5lbGVtZW50LCBvbGRJbmRleDogZiwgbmV3SW5kZXg6IG8gfTtcbiAgICAgIHRoaXMuZW1pdENoYW5nZXMoeyBtb3ZlZDogaSB9KTtcbiAgICB9LFxuICAgIGNvbXB1dGVGdXR1cmVJbmRleChyLCBmKSB7XG4gICAgICBpZiAoIXIuZWxlbWVudClcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICBjb25zdCBvID0gWy4uLmYudG8uY2hpbGRyZW5dLmZpbHRlcihcbiAgICAgICAgKGQpID0+IGQuc3R5bGUuZGlzcGxheSAhPT0gXCJub25lXCJcbiAgICAgICksIGkgPSBvLmluZGV4T2YoZi5yZWxhdGVkKSwgdCA9IHIuY29tcG9uZW50LmdldFZtSW5kZXhGcm9tRG9tSW5kZXgoXG4gICAgICAgIGlcbiAgICAgICk7XG4gICAgICByZXR1cm4gby5pbmRleE9mKGJzKSAhPT0gLTEgfHwgIWYud2lsbEluc2VydEFmdGVyID8gdCA6IHQgKyAxO1xuICAgIH0sXG4gICAgb25EcmFnTW92ZShyLCBmKSB7XG4gICAgICBjb25zdCB7IG1vdmU6IG8sIHJlYWxMaXN0OiBpIH0gPSB0aGlzO1xuICAgICAgaWYgKCFvIHx8ICFpKVxuICAgICAgICByZXR1cm4gITA7XG4gICAgICBjb25zdCB0ID0gdGhpcy5nZXRSZWxhdGVkQ29udGV4dEZyb21Nb3ZlRXZlbnQociksIHMgPSB0aGlzLmNvbXB1dGVGdXR1cmVJbmRleCh0LCByKSwgZCA9IHtcbiAgICAgICAgLi4udGhpcy5jb250ZXh0LFxuICAgICAgICBmdXR1cmVJbmRleDogc1xuICAgICAgfSwgYyA9IHtcbiAgICAgICAgLi4ucixcbiAgICAgICAgcmVsYXRlZENvbnRleHQ6IHQsXG4gICAgICAgIGRyYWdnZWRDb250ZXh0OiBkXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG8oYywgZik7XG4gICAgfSxcbiAgICBvbkRyYWdFbmQoKSB7XG4gICAgICBicyA9IG51bGw7XG4gICAgfVxuICB9XG59KTtcbmZ1bmN0aW9uIGFnKCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIG5hbWU6IFwibWFpblwiLFxuICAgICAgdGl0bGU6IFwiXFx1NTdGQVxcdTc4NDBcXHU3RUM0XFx1NEVGNlwiLFxuICAgICAgbGlzdDogW11cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwic3ViZm9ybVwiLFxuICAgICAgdGl0bGU6IFwiXFx1NUI1MFxcdTg4NjhcXHU1MzU1XFx1N0VDNFxcdTRFRjZcIixcbiAgICAgIGxpc3Q6IFtdXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImFpZGVcIixcbiAgICAgIHRpdGxlOiBcIlxcdThGODVcXHU1MkE5XFx1N0VDNFxcdTRFRjZcIixcbiAgICAgIGxpc3Q6IFtdXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImxheW91dFwiLFxuICAgICAgdGl0bGU6IFwiXFx1NUUwM1xcdTVDNDBcXHU3RUM0XFx1NEVGNlwiLFxuICAgICAgbGlzdDogW11cbiAgICB9XG4gIF07XG59XG5jb25zdCBPYSA9IEVhLCBvdCA9IEVhLmZhY3RvcnkoKTtcbmxldCBpYyA9IG51bGwsIGdkID0gcG8obnVsbCk7XG5mdW5jdGlvbiBPcyguLi5yKSB7XG4gIHJldHVybiBpYyguLi5yKTtcbn1cbmNvbnN0IG9jID0gKHIpID0+IHtcbiAgZ2QudmFsdWUgPSByIHx8IExkO1xuICBjb25zdCBmID0gd3MoZ2QpO1xuICByZXR1cm4gaWMgPSBmLnQsIGY7XG59O1xub2MoKTtcbnZhciBsZyA9IHR5cGVvZiBnbG9iYWxUaGlzIDwgXCJ1XCIgPyBnbG9iYWxUaGlzIDogdHlwZW9mIHdpbmRvdyA8IFwidVwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCA8IFwidVwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgPCBcInVcIiA/IHNlbGYgOiB7fSwgQ3MgPSB7IGV4cG9ydHM6IHt9IH0sIHlkO1xuZnVuY3Rpb24gUGEoKSB7XG4gIHJldHVybiB5ZCB8fCAoeWQgPSAxLCBmdW5jdGlvbihyLCBmKSB7XG4gICAgKGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgIHIuZXhwb3J0cyA9IGkoKTtcbiAgICB9KShsZywgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbyA9IG5hdmlnYXRvci51c2VyQWdlbnQsIGkgPSBuYXZpZ2F0b3IucGxhdGZvcm0sIHQgPSAvZ2Vja29cXC9cXGQvaS50ZXN0KG8pLCBzID0gL01TSUUgXFxkLy50ZXN0KG8pLCBkID0gL1RyaWRlbnRcXC8oPzpbNy05XXxcXGR7Mix9KVxcLi4qcnY6KFxcZCspLy5leGVjKG8pLCBjID0gL0VkZ2VcXC8oXFxkKykvLmV4ZWMobyksIHAgPSBzIHx8IGQgfHwgYywgdiA9IHAgJiYgKHMgPyBkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgNiA6ICsoYyB8fCBkKVsxXSksIGIgPSAhYyAmJiAvV2ViS2l0XFwvLy50ZXN0KG8pLCBTID0gYiAmJiAvUXRcXC9cXGQrXFwuXFxkKy8udGVzdChvKSwgRCA9ICFjICYmIC9DaHJvbWVcXC8oXFxkKykvLmV4ZWMobyksIFQgPSBEICYmICtEWzFdLCBtID0gL09wZXJhXFwvLy50ZXN0KG8pLCB4ID0gL0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpLCBSID0gL01hYyBPUyBYIDFcXGRcXEQoWzgtOV18XFxkXFxkKVxcRC8udGVzdChvKSwgdyA9IC9QaGFudG9tSlMvLnRlc3QobyksIEEgPSB4ICYmICgvTW9iaWxlXFwvXFx3Ky8udGVzdChvKSB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAyKSwgRSA9IC9BbmRyb2lkLy50ZXN0KG8pLCBDID0gQSB8fCBFIHx8IC93ZWJPU3xCbGFja0JlcnJ5fE9wZXJhIE1pbml8T3BlcmEgTW9iaXxJRU1vYmlsZS9pLnRlc3QobyksIE0gPSBBIHx8IC9NYWMvLnRlc3QoaSksIHkgPSAvXFxiQ3JPU1xcYi8udGVzdChvKSwgQiA9IC93aW4vaS50ZXN0KGkpLCAkID0gbSAmJiBvLm1hdGNoKC9WZXJzaW9uXFwvKFxcZCpcXC5cXGQqKS8pO1xuICAgICAgJCAmJiAoJCA9IE51bWJlcigkWzFdKSksICQgJiYgJCA+PSAxNSAmJiAobSA9ICExLCBiID0gITApO1xuICAgICAgdmFyIEYgPSBNICYmIChTIHx8IG0gJiYgKCQgPT0gbnVsbCB8fCAkIDwgMTIuMTEpKSwgayA9IHQgfHwgcCAmJiB2ID49IDk7XG4gICAgICBmdW5jdGlvbiBoKGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIGUgKyBcIig/OiR8XFxcXHMpXFxcXHMqXCIpO1xuICAgICAgfVxuICAgICAgdmFyIE4gPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgICAgIHZhciBsID0gZS5jbGFzc05hbWUsIGEgPSBoKG4pLmV4ZWMobCk7XG4gICAgICAgIGlmIChhKSB7XG4gICAgICAgICAgdmFyIHUgPSBsLnNsaWNlKGEuaW5kZXggKyBhWzBdLmxlbmd0aCk7XG4gICAgICAgICAgZS5jbGFzc05hbWUgPSBsLnNsaWNlKDAsIGEuaW5kZXgpICsgKHUgPyBhWzFdICsgdSA6IFwiXCIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZnVuY3Rpb24gUChlKSB7XG4gICAgICAgIGZvciAodmFyIG4gPSBlLmNoaWxkTm9kZXMubGVuZ3RoOyBuID4gMDsgLS1uKVxuICAgICAgICAgIGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBqKGUsIG4pIHtcbiAgICAgICAgcmV0dXJuIFAoZSkuYXBwZW5kQ2hpbGQobik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBJKGUsIG4sIGwsIGEpIHtcbiAgICAgICAgdmFyIHUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO1xuICAgICAgICBpZiAobCAmJiAodS5jbGFzc05hbWUgPSBsKSwgYSAmJiAodS5zdHlsZS5jc3NUZXh0ID0gYSksIHR5cGVvZiBuID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgdS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSk7XG4gICAgICAgIGVsc2UgaWYgKG4pXG4gICAgICAgICAgZm9yICh2YXIgZyA9IDA7IGcgPCBuLmxlbmd0aDsgKytnKVxuICAgICAgICAgICAgdS5hcHBlbmRDaGlsZChuW2ddKTtcbiAgICAgICAgcmV0dXJuIHU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBWKGUsIG4sIGwsIGEpIHtcbiAgICAgICAgdmFyIHUgPSBJKGUsIG4sIGwsIGEpO1xuICAgICAgICByZXR1cm4gdS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwicHJlc2VudGF0aW9uXCIpLCB1O1xuICAgICAgfVxuICAgICAgdmFyIFc7XG4gICAgICBkb2N1bWVudC5jcmVhdGVSYW5nZSA/IFcgPSBmdW5jdGlvbihlLCBuLCBsLCBhKSB7XG4gICAgICAgIHZhciB1ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgcmV0dXJuIHUuc2V0RW5kKGEgfHwgZSwgbCksIHUuc2V0U3RhcnQoZSwgbiksIHU7XG4gICAgICB9IDogVyA9IGZ1bmN0aW9uKGUsIG4sIGwpIHtcbiAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGEubW92ZVRvRWxlbWVudFRleHQoZS5wYXJlbnROb2RlKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGEuY29sbGFwc2UoITApLCBhLm1vdmVFbmQoXCJjaGFyYWN0ZXJcIiwgbCksIGEubW92ZVN0YXJ0KFwiY2hhcmFjdGVyXCIsIG4pLCBhO1xuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIFEoZSwgbikge1xuICAgICAgICBpZiAobi5ub2RlVHlwZSA9PSAzICYmIChuID0gbi5wYXJlbnROb2RlKSwgZS5jb250YWlucylcbiAgICAgICAgICByZXR1cm4gZS5jb250YWlucyhuKTtcbiAgICAgICAgZG9cbiAgICAgICAgICBpZiAobi5ub2RlVHlwZSA9PSAxMSAmJiAobiA9IG4uaG9zdCksIG4gPT0gZSlcbiAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgd2hpbGUgKG4gPSBuLnBhcmVudE5vZGUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gWChlKSB7XG4gICAgICAgIHZhciBuO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG4gPSBlLmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIG4gPSBlLmJvZHkgfHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKDsgbiAmJiBuLnNoYWRvd1Jvb3QgJiYgbi5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7IClcbiAgICAgICAgICBuID0gbi5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBuO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gSihlLCBuKSB7XG4gICAgICAgIHZhciBsID0gZS5jbGFzc05hbWU7XG4gICAgICAgIGgobikudGVzdChsKSB8fCAoZS5jbGFzc05hbWUgKz0gKGwgPyBcIiBcIiA6IFwiXCIpICsgbik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBaKGUsIG4pIHtcbiAgICAgICAgZm9yICh2YXIgbCA9IGUuc3BsaXQoXCIgXCIpLCBhID0gMDsgYSA8IGwubGVuZ3RoOyBhKyspXG4gICAgICAgICAgbFthXSAmJiAhaChsW2FdKS50ZXN0KG4pICYmIChuICs9IFwiIFwiICsgbFthXSk7XG4gICAgICAgIHJldHVybiBuO1xuICAgICAgfVxuICAgICAgdmFyIGRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBlLnNlbGVjdCgpO1xuICAgICAgfTtcbiAgICAgIEEgPyBkZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZS5zZWxlY3Rpb25TdGFydCA9IDAsIGUuc2VsZWN0aW9uRW5kID0gZS52YWx1ZS5sZW5ndGg7XG4gICAgICB9IDogcCAmJiAoZGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZS5zZWxlY3QoKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZnVuY3Rpb24gdmUoZSkge1xuICAgICAgICByZXR1cm4gZS5kaXNwbGF5LndyYXBwZXIub3duZXJEb2N1bWVudDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHNlKGUpIHtcbiAgICAgICAgcmV0dXJuIHZlKGUpLmRlZmF1bHRWaWV3O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbWUoZSkge1xuICAgICAgICB2YXIgbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gZS5hcHBseShudWxsLCBuKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGxlKGUsIG4sIGwpIHtcbiAgICAgICAgbiB8fCAobiA9IHt9KTtcbiAgICAgICAgZm9yICh2YXIgYSBpbiBlKVxuICAgICAgICAgIGUuaGFzT3duUHJvcGVydHkoYSkgJiYgKGwgIT09ICExIHx8ICFuLmhhc093blByb3BlcnR5KGEpKSAmJiAoblthXSA9IGVbYV0pO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGllKGUsIG4sIGwsIGEsIHUpIHtcbiAgICAgICAgbiA9PSBudWxsICYmIChuID0gZS5zZWFyY2goL1teXFxzXFx1MDBhMF0vKSwgbiA9PSAtMSAmJiAobiA9IGUubGVuZ3RoKSk7XG4gICAgICAgIGZvciAodmFyIGcgPSBhIHx8IDAsIE8gPSB1IHx8IDA7IDsgKSB7XG4gICAgICAgICAgdmFyIEwgPSBlLmluZGV4T2YoXCJcdFwiLCBnKTtcbiAgICAgICAgICBpZiAoTCA8IDAgfHwgTCA+PSBuKVxuICAgICAgICAgICAgcmV0dXJuIE8gKyAobiAtIGcpO1xuICAgICAgICAgIE8gKz0gTCAtIGcsIE8gKz0gbCAtIE8gJSBsLCBnID0gTCArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBwZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmlkID0gbnVsbCwgdGhpcy5mID0gbnVsbCwgdGhpcy50aW1lID0gMCwgdGhpcy5oYW5kbGVyID0gbWUodGhpcy5vblRpbWVvdXQsIHRoaXMpO1xuICAgICAgfTtcbiAgICAgIHBlLnByb3RvdHlwZS5vblRpbWVvdXQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGUuaWQgPSAwLCBlLnRpbWUgPD0gK25ldyBEYXRlKCkgPyBlLmYoKSA6IHNldFRpbWVvdXQoZS5oYW5kbGVyLCBlLnRpbWUgLSArbmV3IERhdGUoKSk7XG4gICAgICB9LCBwZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oZSwgbikge1xuICAgICAgICB0aGlzLmYgPSBuO1xuICAgICAgICB2YXIgbCA9ICtuZXcgRGF0ZSgpICsgZTtcbiAgICAgICAgKCF0aGlzLmlkIHx8IGwgPCB0aGlzLnRpbWUpICYmIChjbGVhclRpbWVvdXQodGhpcy5pZCksIHRoaXMuaWQgPSBzZXRUaW1lb3V0KHRoaXMuaGFuZGxlciwgZSksIHRoaXMudGltZSA9IGwpO1xuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIHRlKGUsIG4pIHtcbiAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBlLmxlbmd0aDsgKytsKVxuICAgICAgICAgIGlmIChlW2xdID09IG4pXG4gICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGdlID0gNTAsIEFlID0geyB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBcIkNvZGVNaXJyb3IuUGFzc1wiO1xuICAgICAgfSB9LCBNZSA9IHsgc2Nyb2xsOiAhMSB9LCBZZSA9IHsgb3JpZ2luOiBcIiptb3VzZVwiIH0sIG50ID0geyBvcmlnaW46IFwiK21vdmVcIiB9O1xuICAgICAgZnVuY3Rpb24gZXQoZSwgbiwgbCkge1xuICAgICAgICBmb3IgKHZhciBhID0gMCwgdSA9IDA7IDsgKSB7XG4gICAgICAgICAgdmFyIGcgPSBlLmluZGV4T2YoXCJcdFwiLCBhKTtcbiAgICAgICAgICBnID09IC0xICYmIChnID0gZS5sZW5ndGgpO1xuICAgICAgICAgIHZhciBPID0gZyAtIGE7XG4gICAgICAgICAgaWYgKGcgPT0gZS5sZW5ndGggfHwgdSArIE8gPj0gbilcbiAgICAgICAgICAgIHJldHVybiBhICsgTWF0aC5taW4oTywgbiAtIHUpO1xuICAgICAgICAgIGlmICh1ICs9IGcgLSBhLCB1ICs9IGwgLSB1ICUgbCwgYSA9IGcgKyAxLCB1ID49IG4pXG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGd0ID0gW1wiXCJdO1xuICAgICAgZnVuY3Rpb24geXQoZSkge1xuICAgICAgICBmb3IgKDsgZ3QubGVuZ3RoIDw9IGU7IClcbiAgICAgICAgICBndC5wdXNoKEJlKGd0KSArIFwiIFwiKTtcbiAgICAgICAgcmV0dXJuIGd0W2VdO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gQmUoZSkge1xuICAgICAgICByZXR1cm4gZVtlLmxlbmd0aCAtIDFdO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcHQoZSwgbikge1xuICAgICAgICBmb3IgKHZhciBsID0gW10sIGEgPSAwOyBhIDwgZS5sZW5ndGg7IGErKylcbiAgICAgICAgICBsW2FdID0gbihlW2FdLCBhKTtcbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzbihlLCBuLCBsKSB7XG4gICAgICAgIGZvciAodmFyIGEgPSAwLCB1ID0gbChuKTsgYSA8IGUubGVuZ3RoICYmIGwoZVthXSkgPD0gdTsgKVxuICAgICAgICAgIGErKztcbiAgICAgICAgZS5zcGxpY2UoYSwgMCwgbik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBCdCgpIHtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGRyKGUsIG4pIHtcbiAgICAgICAgdmFyIGw7XG4gICAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlID8gbCA9IE9iamVjdC5jcmVhdGUoZSkgOiAoQnQucHJvdG90eXBlID0gZSwgbCA9IG5ldyBCdCgpKSwgbiAmJiBsZShuLCBsKSwgbDtcbiAgICAgIH1cbiAgICAgIHZhciAkbiA9IC9bXFx1MDBkZlxcdTA1ODdcXHUwNTkwLVxcdTA1ZjRcXHUwNjAwLVxcdTA2ZmZcXHUzMDQwLVxcdTMwOWZcXHUzMGEwLVxcdTMwZmZcXHUzNDAwLVxcdTRkYjVcXHU0ZTAwLVxcdTlmY2NcXHVhYzAwLVxcdWQ3YWZdLztcbiAgICAgIGZ1bmN0aW9uIHZuKGUpIHtcbiAgICAgICAgcmV0dXJuIC9cXHcvLnRlc3QoZSkgfHwgZSA+IFwiXFx4ODBcIiAmJiAoZS50b1VwcGVyQ2FzZSgpICE9IGUudG9Mb3dlckNhc2UoKSB8fCAkbi50ZXN0KGUpKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG1uKGUsIG4pIHtcbiAgICAgICAgcmV0dXJuIG4gPyBuLnNvdXJjZS5pbmRleE9mKFwiXFxcXHdcIikgPiAtMSAmJiB2bihlKSA/ICEwIDogbi50ZXN0KGUpIDogdm4oZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBrbihlKSB7XG4gICAgICAgIGZvciAodmFyIG4gaW4gZSlcbiAgICAgICAgICBpZiAoZS5oYXNPd25Qcm9wZXJ0eShuKSAmJiBlW25dKVxuICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICByZXR1cm4gITA7XG4gICAgICB9XG4gICAgICB2YXIgZ24gPSAvW1xcdTAzMDAtXFx1MDM2ZlxcdTA0ODMtXFx1MDQ4OVxcdTA1OTEtXFx1MDViZFxcdTA1YmZcXHUwNWMxXFx1MDVjMlxcdTA1YzRcXHUwNWM1XFx1MDVjN1xcdTA2MTAtXFx1MDYxYVxcdTA2NGItXFx1MDY1ZVxcdTA2NzBcXHUwNmQ2LVxcdTA2ZGNcXHUwNmRlLVxcdTA2ZTRcXHUwNmU3XFx1MDZlOFxcdTA2ZWEtXFx1MDZlZFxcdTA3MTFcXHUwNzMwLVxcdTA3NGFcXHUwN2E2LVxcdTA3YjBcXHUwN2ViLVxcdTA3ZjNcXHUwODE2LVxcdTA4MTlcXHUwODFiLVxcdTA4MjNcXHUwODI1LVxcdTA4MjdcXHUwODI5LVxcdTA4MmRcXHUwOTAwLVxcdTA5MDJcXHUwOTNjXFx1MDk0MS1cXHUwOTQ4XFx1MDk0ZFxcdTA5NTEtXFx1MDk1NVxcdTA5NjJcXHUwOTYzXFx1MDk4MVxcdTA5YmNcXHUwOWJlXFx1MDljMS1cXHUwOWM0XFx1MDljZFxcdTA5ZDdcXHUwOWUyXFx1MDllM1xcdTBhMDFcXHUwYTAyXFx1MGEzY1xcdTBhNDFcXHUwYTQyXFx1MGE0N1xcdTBhNDhcXHUwYTRiLVxcdTBhNGRcXHUwYTUxXFx1MGE3MFxcdTBhNzFcXHUwYTc1XFx1MGE4MVxcdTBhODJcXHUwYWJjXFx1MGFjMS1cXHUwYWM1XFx1MGFjN1xcdTBhYzhcXHUwYWNkXFx1MGFlMlxcdTBhZTNcXHUwYjAxXFx1MGIzY1xcdTBiM2VcXHUwYjNmXFx1MGI0MS1cXHUwYjQ0XFx1MGI0ZFxcdTBiNTZcXHUwYjU3XFx1MGI2MlxcdTBiNjNcXHUwYjgyXFx1MGJiZVxcdTBiYzBcXHUwYmNkXFx1MGJkN1xcdTBjM2UtXFx1MGM0MFxcdTBjNDYtXFx1MGM0OFxcdTBjNGEtXFx1MGM0ZFxcdTBjNTVcXHUwYzU2XFx1MGM2MlxcdTBjNjNcXHUwY2JjXFx1MGNiZlxcdTBjYzJcXHUwY2M2XFx1MGNjY1xcdTBjY2RcXHUwY2Q1XFx1MGNkNlxcdTBjZTJcXHUwY2UzXFx1MGQzZVxcdTBkNDEtXFx1MGQ0NFxcdTBkNGRcXHUwZDU3XFx1MGQ2MlxcdTBkNjNcXHUwZGNhXFx1MGRjZlxcdTBkZDItXFx1MGRkNFxcdTBkZDZcXHUwZGRmXFx1MGUzMVxcdTBlMzQtXFx1MGUzYVxcdTBlNDctXFx1MGU0ZVxcdTBlYjFcXHUwZWI0LVxcdTBlYjlcXHUwZWJiXFx1MGViY1xcdTBlYzgtXFx1MGVjZFxcdTBmMThcXHUwZjE5XFx1MGYzNVxcdTBmMzdcXHUwZjM5XFx1MGY3MS1cXHUwZjdlXFx1MGY4MC1cXHUwZjg0XFx1MGY4NlxcdTBmODdcXHUwZjkwLVxcdTBmOTdcXHUwZjk5LVxcdTBmYmNcXHUwZmM2XFx1MTAyZC1cXHUxMDMwXFx1MTAzMi1cXHUxMDM3XFx1MTAzOVxcdTEwM2FcXHUxMDNkXFx1MTAzZVxcdTEwNThcXHUxMDU5XFx1MTA1ZS1cXHUxMDYwXFx1MTA3MS1cXHUxMDc0XFx1MTA4MlxcdTEwODVcXHUxMDg2XFx1MTA4ZFxcdTEwOWRcXHUxMzVmXFx1MTcxMi1cXHUxNzE0XFx1MTczMi1cXHUxNzM0XFx1MTc1MlxcdTE3NTNcXHUxNzcyXFx1MTc3M1xcdTE3YjctXFx1MTdiZFxcdTE3YzZcXHUxN2M5LVxcdTE3ZDNcXHUxN2RkXFx1MTgwYi1cXHUxODBkXFx1MThhOVxcdTE5MjAtXFx1MTkyMlxcdTE5MjdcXHUxOTI4XFx1MTkzMlxcdTE5MzktXFx1MTkzYlxcdTFhMTdcXHUxYTE4XFx1MWE1NlxcdTFhNTgtXFx1MWE1ZVxcdTFhNjBcXHUxYTYyXFx1MWE2NS1cXHUxYTZjXFx1MWE3My1cXHUxYTdjXFx1MWE3ZlxcdTFiMDAtXFx1MWIwM1xcdTFiMzRcXHUxYjM2LVxcdTFiM2FcXHUxYjNjXFx1MWI0MlxcdTFiNmItXFx1MWI3M1xcdTFiODBcXHUxYjgxXFx1MWJhMi1cXHUxYmE1XFx1MWJhOFxcdTFiYTlcXHUxYzJjLVxcdTFjMzNcXHUxYzM2XFx1MWMzN1xcdTFjZDAtXFx1MWNkMlxcdTFjZDQtXFx1MWNlMFxcdTFjZTItXFx1MWNlOFxcdTFjZWRcXHUxZGMwLVxcdTFkZTZcXHUxZGZkLVxcdTFkZmZcXHUyMDBjXFx1MjAwZFxcdTIwZDAtXFx1MjBmMFxcdTJjZWYtXFx1MmNmMVxcdTJkZTAtXFx1MmRmZlxcdTMwMmEtXFx1MzAyZlxcdTMwOTlcXHUzMDlhXFx1YTY2Zi1cXHVhNjcyXFx1YTY3Y1xcdWE2N2RcXHVhNmYwXFx1YTZmMVxcdWE4MDJcXHVhODA2XFx1YTgwYlxcdWE4MjVcXHVhODI2XFx1YThjNFxcdWE4ZTAtXFx1YThmMVxcdWE5MjYtXFx1YTkyZFxcdWE5NDctXFx1YTk1MVxcdWE5ODAtXFx1YTk4MlxcdWE5YjNcXHVhOWI2LVxcdWE5YjlcXHVhOWJjXFx1YWEyOS1cXHVhYTJlXFx1YWEzMVxcdWFhMzJcXHVhYTM1XFx1YWEzNlxcdWFhNDNcXHVhYTRjXFx1YWFiMFxcdWFhYjItXFx1YWFiNFxcdWFhYjdcXHVhYWI4XFx1YWFiZVxcdWFhYmZcXHVhYWMxXFx1YWJlNVxcdWFiZThcXHVhYmVkXFx1ZGMwMC1cXHVkZmZmXFx1ZmIxZVxcdWZlMDAtXFx1ZmUwZlxcdWZlMjAtXFx1ZmUyNlxcdWZmOWVcXHVmZjlmXS87XG4gICAgICBmdW5jdGlvbiB4bihlKSB7XG4gICAgICAgIHJldHVybiBlLmNoYXJDb2RlQXQoMCkgPj0gNzY4ICYmIGduLnRlc3QoZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBPdChlLCBuLCBsKSB7XG4gICAgICAgIGZvciAoOyAobCA8IDAgPyBuID4gMCA6IG4gPCBlLmxlbmd0aCkgJiYgeG4oZS5jaGFyQXQobikpOyApXG4gICAgICAgICAgbiArPSBsO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGF0KGUsIG4sIGwpIHtcbiAgICAgICAgZm9yICh2YXIgYSA9IG4gPiBsID8gLTEgOiAxOyA7ICkge1xuICAgICAgICAgIGlmIChuID09IGwpXG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB2YXIgdSA9IChuICsgbCkgLyAyLCBnID0gYSA8IDAgPyBNYXRoLmNlaWwodSkgOiBNYXRoLmZsb29yKHUpO1xuICAgICAgICAgIGlmIChnID09IG4pXG4gICAgICAgICAgICByZXR1cm4gZShnKSA/IG4gOiBsO1xuICAgICAgICAgIGUoZykgPyBsID0gZyA6IG4gPSBnICsgYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdW4oZSwgbiwgbCwgYSkge1xuICAgICAgICBpZiAoIWUpXG4gICAgICAgICAgcmV0dXJuIGEobiwgbCwgXCJsdHJcIiwgMCk7XG4gICAgICAgIGZvciAodmFyIHUgPSAhMSwgZyA9IDA7IGcgPCBlLmxlbmd0aDsgKytnKSB7XG4gICAgICAgICAgdmFyIE8gPSBlW2ddO1xuICAgICAgICAgIChPLmZyb20gPCBsICYmIE8udG8gPiBuIHx8IG4gPT0gbCAmJiBPLnRvID09IG4pICYmIChhKE1hdGgubWF4KE8uZnJvbSwgbiksIE1hdGgubWluKE8udG8sIGwpLCBPLmxldmVsID09IDEgPyBcInJ0bFwiIDogXCJsdHJcIiwgZyksIHUgPSAhMCk7XG4gICAgICAgIH1cbiAgICAgICAgdSB8fCBhKG4sIGwsIFwibHRyXCIpO1xuICAgICAgfVxuICAgICAgdmFyIHFlID0gbnVsbDtcbiAgICAgIGZ1bmN0aW9uIERlKGUsIG4sIGwpIHtcbiAgICAgICAgdmFyIGE7XG4gICAgICAgIHFlID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCBlLmxlbmd0aDsgKyt1KSB7XG4gICAgICAgICAgdmFyIGcgPSBlW3VdO1xuICAgICAgICAgIGlmIChnLmZyb20gPCBuICYmIGcudG8gPiBuKVxuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgICAgZy50byA9PSBuICYmIChnLmZyb20gIT0gZy50byAmJiBsID09IFwiYmVmb3JlXCIgPyBhID0gdSA6IHFlID0gdSksIGcuZnJvbSA9PSBuICYmIChnLmZyb20gIT0gZy50byAmJiBsICE9IFwiYmVmb3JlXCIgPyBhID0gdSA6IHFlID0gdSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGEgIT0gbnVsbCA/IGEgOiBxZTtcbiAgICAgIH1cbiAgICAgIHZhciB3ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZSA9IFwiYmJiYmJiYmJidHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5OTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE5cIiwgbiA9IFwibm5ubm5uTk5yJSVyLHJOTm1tbW1tbW1tbW1tcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1tbW1tbW1tbm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1uTm1tbW1tbXJybW1ObW1tbXJyMTExMTExMTExMVwiO1xuICAgICAgICBmdW5jdGlvbiBsKFUpIHtcbiAgICAgICAgICByZXR1cm4gVSA8PSAyNDcgPyBlLmNoYXJBdChVKSA6IDE0MjQgPD0gVSAmJiBVIDw9IDE1MjQgPyBcIlJcIiA6IDE1MzYgPD0gVSAmJiBVIDw9IDE3ODUgPyBuLmNoYXJBdChVIC0gMTUzNikgOiAxNzc0IDw9IFUgJiYgVSA8PSAyMjIwID8gXCJyXCIgOiA4MTkyIDw9IFUgJiYgVSA8PSA4MjAzID8gXCJ3XCIgOiBVID09IDgyMDQgPyBcImJcIiA6IFwiTFwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhID0gL1tcXHUwNTkwLVxcdTA1ZjRcXHUwNjAwLVxcdTA2ZmZcXHUwNzAwLVxcdTA4YWNdLywgdSA9IC9bc3R3Tl0vLCBnID0gL1tMUnJdLywgTyA9IC9bTGIxbl0vLCBMID0gL1sxbl0vO1xuICAgICAgICBmdW5jdGlvbiBIKFUsIEcsIFkpIHtcbiAgICAgICAgICB0aGlzLmxldmVsID0gVSwgdGhpcy5mcm9tID0gRywgdGhpcy50byA9IFk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKFUsIEcpIHtcbiAgICAgICAgICB2YXIgWSA9IEcgPT0gXCJsdHJcIiA/IFwiTFwiIDogXCJSXCI7XG4gICAgICAgICAgaWYgKFUubGVuZ3RoID09IDAgfHwgRyA9PSBcImx0clwiICYmICFhLnRlc3QoVSkpXG4gICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgZm9yICh2YXIgZWUgPSBVLmxlbmd0aCwgXyA9IFtdLCBhZSA9IDA7IGFlIDwgZWU7ICsrYWUpXG4gICAgICAgICAgICBfLnB1c2gobChVLmNoYXJDb2RlQXQoYWUpKSk7XG4gICAgICAgICAgZm9yICh2YXIgY2UgPSAwLCB5ZSA9IFk7IGNlIDwgZWU7ICsrY2UpIHtcbiAgICAgICAgICAgIHZhciBDZSA9IF9bY2VdO1xuICAgICAgICAgICAgQ2UgPT0gXCJtXCIgPyBfW2NlXSA9IHllIDogeWUgPSBDZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgVGUgPSAwLCBFZSA9IFk7IFRlIDwgZWU7ICsrVGUpIHtcbiAgICAgICAgICAgIHZhciBOZSA9IF9bVGVdO1xuICAgICAgICAgICAgTmUgPT0gXCIxXCIgJiYgRWUgPT0gXCJyXCIgPyBfW1RlXSA9IFwiblwiIDogZy50ZXN0KE5lKSAmJiAoRWUgPSBOZSwgTmUgPT0gXCJyXCIgJiYgKF9bVGVdID0gXCJSXCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIga2UgPSAxLCBIZSA9IF9bMF07IGtlIDwgZWUgLSAxOyArK2tlKSB7XG4gICAgICAgICAgICB2YXIgWGUgPSBfW2tlXTtcbiAgICAgICAgICAgIFhlID09IFwiK1wiICYmIEhlID09IFwiMVwiICYmIF9ba2UgKyAxXSA9PSBcIjFcIiA/IF9ba2VdID0gXCIxXCIgOiBYZSA9PSBcIixcIiAmJiBIZSA9PSBfW2tlICsgMV0gJiYgKEhlID09IFwiMVwiIHx8IEhlID09IFwiblwiKSAmJiAoX1trZV0gPSBIZSksIEhlID0gWGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAodmFyIHZ0ID0gMDsgdnQgPCBlZTsgKyt2dCkge1xuICAgICAgICAgICAgdmFyIGp0ID0gX1t2dF07XG4gICAgICAgICAgICBpZiAoanQgPT0gXCIsXCIpXG4gICAgICAgICAgICAgIF9bdnRdID0gXCJOXCI7XG4gICAgICAgICAgICBlbHNlIGlmIChqdCA9PSBcIiVcIikge1xuICAgICAgICAgICAgICB2YXIgQ3QgPSB2b2lkIDA7XG4gICAgICAgICAgICAgIGZvciAoQ3QgPSB2dCArIDE7IEN0IDwgZWUgJiYgX1tDdF0gPT0gXCIlXCI7ICsrQ3QpXG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICBmb3IgKHZhciBjbiA9IHZ0ICYmIF9bdnQgLSAxXSA9PSBcIiFcIiB8fCBDdCA8IGVlICYmIF9bQ3RdID09IFwiMVwiID8gXCIxXCIgOiBcIk5cIiwgcm4gPSB2dDsgcm4gPCBDdDsgKytybilcbiAgICAgICAgICAgICAgICBfW3JuXSA9IGNuO1xuICAgICAgICAgICAgICB2dCA9IEN0IC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgSXQgPSAwLCBvbiA9IFk7IEl0IDwgZWU7ICsrSXQpIHtcbiAgICAgICAgICAgIHZhciBHdCA9IF9bSXRdO1xuICAgICAgICAgICAgb24gPT0gXCJMXCIgJiYgR3QgPT0gXCIxXCIgPyBfW0l0XSA9IFwiTFwiIDogZy50ZXN0KEd0KSAmJiAob24gPSBHdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAodmFyIEZ0ID0gMDsgRnQgPCBlZTsgKytGdClcbiAgICAgICAgICAgIGlmICh1LnRlc3QoX1tGdF0pKSB7XG4gICAgICAgICAgICAgIHZhciBOdCA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgZm9yIChOdCA9IEZ0ICsgMTsgTnQgPCBlZSAmJiB1LnRlc3QoX1tOdF0pOyArK050KVxuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgZm9yICh2YXIgeHQgPSAoRnQgPyBfW0Z0IC0gMV0gOiBZKSA9PSBcIkxcIiwgYW4gPSAoTnQgPCBlZSA/IF9bTnRdIDogWSkgPT0gXCJMXCIsIHZpID0geHQgPT0gYW4gPyB4dCA/IFwiTFwiIDogXCJSXCIgOiBZLCB3ciA9IEZ0OyB3ciA8IE50OyArK3dyKVxuICAgICAgICAgICAgICAgIF9bd3JdID0gdmk7XG4gICAgICAgICAgICAgIEZ0ID0gTnQgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGZvciAodmFyIFl0ID0gW10sIFFuLCBVdCA9IDA7IFV0IDwgZWU7IClcbiAgICAgICAgICAgIGlmIChPLnRlc3QoX1tVdF0pKSB7XG4gICAgICAgICAgICAgIHZhciBJbCA9IFV0O1xuICAgICAgICAgICAgICBmb3IgKCsrVXQ7IFV0IDwgZWUgJiYgTy50ZXN0KF9bVXRdKTsgKytVdClcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgIFl0LnB1c2gobmV3IEgoMCwgSWwsIFV0KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgb3IgPSBVdCwgVXIgPSBZdC5sZW5ndGgsIHpyID0gRyA9PSBcInJ0bFwiID8gMSA6IDA7XG4gICAgICAgICAgICAgIGZvciAoKytVdDsgVXQgPCBlZSAmJiBfW1V0XSAhPSBcIkxcIjsgKytVdClcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgIGZvciAodmFyIFp0ID0gb3I7IFp0IDwgVXQ7IClcbiAgICAgICAgICAgICAgICBpZiAoTC50ZXN0KF9bWnRdKSkge1xuICAgICAgICAgICAgICAgICAgb3IgPCBadCAmJiAoWXQuc3BsaWNlKFVyLCAwLCBuZXcgSCgxLCBvciwgWnQpKSwgVXIgKz0genIpO1xuICAgICAgICAgICAgICAgICAgdmFyIG1pID0gWnQ7XG4gICAgICAgICAgICAgICAgICBmb3IgKCsrWnQ7IFp0IDwgVXQgJiYgTC50ZXN0KF9bWnRdKTsgKytadClcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICAgWXQuc3BsaWNlKFVyLCAwLCBuZXcgSCgyLCBtaSwgWnQpKSwgVXIgKz0genIsIG9yID0gWnQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICArK1p0O1xuICAgICAgICAgICAgICBvciA8IFV0ICYmIFl0LnNwbGljZShVciwgMCwgbmV3IEgoMSwgb3IsIFV0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIEcgPT0gXCJsdHJcIiAmJiAoWXRbMF0ubGV2ZWwgPT0gMSAmJiAoUW4gPSBVLm1hdGNoKC9eXFxzKy8pKSAmJiAoWXRbMF0uZnJvbSA9IFFuWzBdLmxlbmd0aCwgWXQudW5zaGlmdChuZXcgSCgwLCAwLCBRblswXS5sZW5ndGgpKSksIEJlKFl0KS5sZXZlbCA9PSAxICYmIChRbiA9IFUubWF0Y2goL1xccyskLykpICYmIChCZShZdCkudG8gLT0gUW5bMF0ubGVuZ3RoLCBZdC5wdXNoKG5ldyBIKDAsIGVlIC0gUW5bMF0ubGVuZ3RoLCBlZSkpKSksIEcgPT0gXCJydGxcIiA/IFl0LnJldmVyc2UoKSA6IFl0O1xuICAgICAgICB9O1xuICAgICAgfSgpO1xuICAgICAgZnVuY3Rpb24gVWUoZSwgbikge1xuICAgICAgICB2YXIgbCA9IGUub3JkZXI7XG4gICAgICAgIHJldHVybiBsID09IG51bGwgJiYgKGwgPSBlLm9yZGVyID0gd2UoZS50ZXh0LCBuKSksIGw7XG4gICAgICB9XG4gICAgICB2YXIgUmUgPSBbXSwgbmUgPSBmdW5jdGlvbihlLCBuLCBsKSB7XG4gICAgICAgIGlmIChlLmFkZEV2ZW50TGlzdGVuZXIpXG4gICAgICAgICAgZS5hZGRFdmVudExpc3RlbmVyKG4sIGwsICExKTtcbiAgICAgICAgZWxzZSBpZiAoZS5hdHRhY2hFdmVudClcbiAgICAgICAgICBlLmF0dGFjaEV2ZW50KFwib25cIiArIG4sIGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgYSA9IGUuX2hhbmRsZXJzIHx8IChlLl9oYW5kbGVycyA9IHt9KTtcbiAgICAgICAgICBhW25dID0gKGFbbl0gfHwgUmUpLmNvbmNhdChsKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIExlKGUsIG4pIHtcbiAgICAgICAgcmV0dXJuIGUuX2hhbmRsZXJzICYmIGUuX2hhbmRsZXJzW25dIHx8IFJlO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gT2UoZSwgbiwgbCkge1xuICAgICAgICBpZiAoZS5yZW1vdmVFdmVudExpc3RlbmVyKVxuICAgICAgICAgIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLCBsLCAhMSk7XG4gICAgICAgIGVsc2UgaWYgKGUuZGV0YWNoRXZlbnQpXG4gICAgICAgICAgZS5kZXRhY2hFdmVudChcIm9uXCIgKyBuLCBsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIGEgPSBlLl9oYW5kbGVycywgdSA9IGEgJiYgYVtuXTtcbiAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgdmFyIGcgPSB0ZSh1LCBsKTtcbiAgICAgICAgICAgIGcgPiAtMSAmJiAoYVtuXSA9IHUuc2xpY2UoMCwgZykuY29uY2F0KHUuc2xpY2UoZyArIDEpKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBQZShlLCBuKSB7XG4gICAgICAgIHZhciBsID0gTGUoZSwgbik7XG4gICAgICAgIGlmICghIWwubGVuZ3RoKVxuICAgICAgICAgIGZvciAodmFyIGEgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLCB1ID0gMDsgdSA8IGwubGVuZ3RoOyArK3UpXG4gICAgICAgICAgICBsW3VdLmFwcGx5KG51bGwsIGEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gUWUoZSwgbiwgbCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG4gPT0gXCJzdHJpbmdcIiAmJiAobiA9IHsgdHlwZTogbiwgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9ICEwO1xuICAgICAgICB9IH0pLCBQZShlLCBsIHx8IG4udHlwZSwgZSwgbiksIGNyKG4pIHx8IG4uY29kZW1pcnJvcklnbm9yZTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF90KGUpIHtcbiAgICAgICAgdmFyIG4gPSBlLl9oYW5kbGVycyAmJiBlLl9oYW5kbGVycy5jdXJzb3JBY3Rpdml0eTtcbiAgICAgICAgaWYgKCEhbilcbiAgICAgICAgICBmb3IgKHZhciBsID0gZS5jdXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzIHx8IChlLmN1ck9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMgPSBbXSksIGEgPSAwOyBhIDwgbi5sZW5ndGg7ICsrYSlcbiAgICAgICAgICAgIHRlKGwsIG5bYV0pID09IC0xICYmIGwucHVzaChuW2FdKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGJ0KGUsIG4pIHtcbiAgICAgICAgcmV0dXJuIExlKGUsIG4pLmxlbmd0aCA+IDA7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBtdChlKSB7XG4gICAgICAgIGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24obiwgbCkge1xuICAgICAgICAgIG5lKHRoaXMsIG4sIGwpO1xuICAgICAgICB9LCBlLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbihuLCBsKSB7XG4gICAgICAgICAgT2UodGhpcywgbiwgbCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBsdChlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQgPyBlLnByZXZlbnREZWZhdWx0KCkgOiBlLnJldHVyblZhbHVlID0gITE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB3bihlKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID8gZS5zdG9wUHJvcGFnYXRpb24oKSA6IGUuY2FuY2VsQnViYmxlID0gITA7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjcihlKSB7XG4gICAgICAgIHJldHVybiBlLmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/IGUuZGVmYXVsdFByZXZlbnRlZCA6IGUucmV0dXJuVmFsdWUgPT0gITE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBJbihlKSB7XG4gICAgICAgIGx0KGUpLCB3bihlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGVuKGUpIHtcbiAgICAgICAgcmV0dXJuIGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE1pKGUpIHtcbiAgICAgICAgdmFyIG4gPSBlLndoaWNoO1xuICAgICAgICByZXR1cm4gbiA9PSBudWxsICYmIChlLmJ1dHRvbiAmIDEgPyBuID0gMSA6IGUuYnV0dG9uICYgMiA/IG4gPSAzIDogZS5idXR0b24gJiA0ICYmIChuID0gMikpLCBNICYmIGUuY3RybEtleSAmJiBuID09IDEgJiYgKG4gPSAzKSwgbjtcbiAgICAgIH1cbiAgICAgIHZhciAkYSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAocCAmJiB2IDwgOSlcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIHZhciBlID0gSShcImRpdlwiKTtcbiAgICAgICAgcmV0dXJuIFwiZHJhZ2dhYmxlXCIgaW4gZSB8fCBcImRyYWdEcm9wXCIgaW4gZTtcbiAgICAgIH0oKSwgVG47XG4gICAgICBmdW5jdGlvbiBrYShlKSB7XG4gICAgICAgIGlmIChUbiA9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIG4gPSBJKFwic3BhblwiLCBcIlxcdTIwMEJcIik7XG4gICAgICAgICAgaihlLCBJKFwic3BhblwiLCBbbiwgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJ4XCIpXSkpLCBlLmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0ICE9IDAgJiYgKFRuID0gbi5vZmZzZXRXaWR0aCA8PSAxICYmIG4ub2Zmc2V0SGVpZ2h0ID4gMiAmJiAhKHAgJiYgdiA8IDgpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbCA9IFRuID8gSShcInNwYW5cIiwgXCJcXHUyMDBCXCIpIDogSShcInNwYW5cIiwgXCJcXHhBMFwiLCBudWxsLCBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDFweDsgbWFyZ2luLXJpZ2h0OiAtMXB4XCIpO1xuICAgICAgICByZXR1cm4gbC5zZXRBdHRyaWJ1dGUoXCJjbS10ZXh0XCIsIFwiXCIpLCBsO1xuICAgICAgfVxuICAgICAgdmFyIFhyO1xuICAgICAgZnVuY3Rpb24gRG8oZSkge1xuICAgICAgICBpZiAoWHIgIT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gWHI7XG4gICAgICAgIHZhciBuID0gaihlLCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIkFcXHUwNjJFQVwiKSksIGwgPSBXKG4sIDAsIDEpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBhID0gVyhuLCAxLCAyKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgcmV0dXJuIFAoZSksICFsIHx8IGwubGVmdCA9PSBsLnJpZ2h0ID8gITEgOiBYciA9IGEucmlnaHQgLSBsLnJpZ2h0IDwgMztcbiAgICAgIH1cbiAgICAgIHZhciBJaSA9IGBcblxuYmAuc3BsaXQoL1xcbi8pLmxlbmd0aCAhPSAzID8gZnVuY3Rpb24oZSkge1xuICAgICAgICBmb3IgKHZhciBuID0gMCwgbCA9IFtdLCBhID0gZS5sZW5ndGg7IG4gPD0gYTsgKSB7XG4gICAgICAgICAgdmFyIHUgPSBlLmluZGV4T2YoYFxuYCwgbik7XG4gICAgICAgICAgdSA9PSAtMSAmJiAodSA9IGUubGVuZ3RoKTtcbiAgICAgICAgICB2YXIgZyA9IGUuc2xpY2UobiwgZS5jaGFyQXQodSAtIDEpID09IFwiXFxyXCIgPyB1IC0gMSA6IHUpLCBPID0gZy5pbmRleE9mKFwiXFxyXCIpO1xuICAgICAgICAgIE8gIT0gLTEgPyAobC5wdXNoKGcuc2xpY2UoMCwgTykpLCBuICs9IE8gKyAxKSA6IChsLnB1c2goZyksIG4gPSB1ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9IDogZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gZS5zcGxpdCgvXFxyXFxuP3xcXG4vKTtcbiAgICAgIH0sIHByID0gd2luZG93LmdldFNlbGVjdGlvbiA/IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZS5zZWxlY3Rpb25TdGFydCAhPSBlLnNlbGVjdGlvbkVuZDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB9XG4gICAgICB9IDogZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgbjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBuID0gZS5vd25lckRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIW4gfHwgbi5wYXJlbnRFbGVtZW50KCkgIT0gZSA/ICExIDogbi5jb21wYXJlRW5kUG9pbnRzKFwiU3RhcnRUb0VuZFwiLCBuKSAhPSAwO1xuICAgICAgfSwgam4gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGUgPSBJKFwiZGl2XCIpO1xuICAgICAgICByZXR1cm4gXCJvbmNvcHlcIiBpbiBlID8gITAgOiAoZS5zZXRBdHRyaWJ1dGUoXCJvbmNvcHlcIiwgXCJyZXR1cm47XCIpLCB0eXBlb2YgZS5vbmNvcHkgPT0gXCJmdW5jdGlvblwiKTtcbiAgICAgIH0oKSwgVW4gPSBudWxsO1xuICAgICAgZnVuY3Rpb24gUm8oZSkge1xuICAgICAgICBpZiAoVW4gIT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gVW47XG4gICAgICAgIHZhciBuID0gaihlLCBJKFwic3BhblwiLCBcInhcIikpLCBsID0gbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgYSA9IFcobiwgMCwgMSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiBVbiA9IE1hdGguYWJzKGwubGVmdCAtIGEubGVmdCkgPiAxO1xuICAgICAgfVxuICAgICAgdmFyIE5uID0ge30sIGhyID0ge307XG4gICAgICBmdW5jdGlvbiBNbyhlLCBuKSB7XG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIChuLmRlcGVuZGVuY2llcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMikpLCBObltlXSA9IG47XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBKcihlLCBuKSB7XG4gICAgICAgIGhyW2VdID0gbjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGZuKGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlID09IFwic3RyaW5nXCIgJiYgaHIuaGFzT3duUHJvcGVydHkoZSkpXG4gICAgICAgICAgZSA9IGhyW2VdO1xuICAgICAgICBlbHNlIGlmIChlICYmIHR5cGVvZiBlLm5hbWUgPT0gXCJzdHJpbmdcIiAmJiBoci5oYXNPd25Qcm9wZXJ0eShlLm5hbWUpKSB7XG4gICAgICAgICAgdmFyIG4gPSBocltlLm5hbWVdO1xuICAgICAgICAgIHR5cGVvZiBuID09IFwic3RyaW5nXCIgJiYgKG4gPSB7IG5hbWU6IG4gfSksIGUgPSBkcihuLCBlKSwgZS5uYW1lID0gbi5uYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgZSA9PSBcInN0cmluZ1wiICYmIC9eW1xcd1xcLV0rXFwvW1xcd1xcLV0rXFwreG1sJC8udGVzdChlKSlcbiAgICAgICAgICAgIHJldHVybiBmbihcImFwcGxpY2F0aW9uL3htbFwiKTtcbiAgICAgICAgICBpZiAodHlwZW9mIGUgPT0gXCJzdHJpbmdcIiAmJiAvXltcXHdcXC1dK1xcL1tcXHdcXC1dK1xcK2pzb24kLy50ZXN0KGUpKVxuICAgICAgICAgICAgcmV0dXJuIGZuKFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHlwZW9mIGUgPT0gXCJzdHJpbmdcIiA/IHsgbmFtZTogZSB9IDogZSB8fCB7IG5hbWU6IFwibnVsbFwiIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBabihlLCBuKSB7XG4gICAgICAgIG4gPSBmbihuKTtcbiAgICAgICAgdmFyIGwgPSBObltuLm5hbWVdO1xuICAgICAgICBpZiAoIWwpXG4gICAgICAgICAgcmV0dXJuIFpuKGUsIFwidGV4dC9wbGFpblwiKTtcbiAgICAgICAgdmFyIGEgPSBsKGUsIG4pO1xuICAgICAgICBpZiAodnIuaGFzT3duUHJvcGVydHkobi5uYW1lKSkge1xuICAgICAgICAgIHZhciB1ID0gdnJbbi5uYW1lXTtcbiAgICAgICAgICBmb3IgKHZhciBnIGluIHUpXG4gICAgICAgICAgICAhdS5oYXNPd25Qcm9wZXJ0eShnKSB8fCAoYS5oYXNPd25Qcm9wZXJ0eShnKSAmJiAoYVtcIl9cIiArIGddID0gYVtnXSksIGFbZ10gPSB1W2ddKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5uYW1lID0gbi5uYW1lLCBuLmhlbHBlclR5cGUgJiYgKGEuaGVscGVyVHlwZSA9IG4uaGVscGVyVHlwZSksIG4ubW9kZVByb3BzKVxuICAgICAgICAgIGZvciAodmFyIE8gaW4gbi5tb2RlUHJvcHMpXG4gICAgICAgICAgICBhW09dID0gbi5tb2RlUHJvcHNbT107XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfVxuICAgICAgdmFyIHZyID0ge307XG4gICAgICBmdW5jdGlvbiBJbyhlLCBuKSB7XG4gICAgICAgIHZhciBsID0gdnIuaGFzT3duUHJvcGVydHkoZSkgPyB2cltlXSA6IHZyW2VdID0ge307XG4gICAgICAgIGxlKG4sIGwpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcW4oZSwgbikge1xuICAgICAgICBpZiAobiA9PT0gITApXG4gICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIGlmIChlLmNvcHlTdGF0ZSlcbiAgICAgICAgICByZXR1cm4gZS5jb3B5U3RhdGUobik7XG4gICAgICAgIHZhciBsID0ge307XG4gICAgICAgIGZvciAodmFyIGEgaW4gbikge1xuICAgICAgICAgIHZhciB1ID0gblthXTtcbiAgICAgICAgICB1IGluc3RhbmNlb2YgQXJyYXkgJiYgKHUgPSB1LmNvbmNhdChbXSkpLCBsW2FdID0gdTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG1yKGUsIG4pIHtcbiAgICAgICAgZm9yICh2YXIgbDsgZS5pbm5lck1vZGUgJiYgKGwgPSBlLmlubmVyTW9kZShuKSwgISghbCB8fCBsLm1vZGUgPT0gZSkpOyApXG4gICAgICAgICAgbiA9IGwuc3RhdGUsIGUgPSBsLm1vZGU7XG4gICAgICAgIHJldHVybiBsIHx8IHsgbW9kZTogZSwgc3RhdGU6IG4gfTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE5pKGUsIG4sIGwpIHtcbiAgICAgICAgcmV0dXJuIGUuc3RhcnRTdGF0ZSA/IGUuc3RhcnRTdGF0ZShuLCBsKSA6ICEwO1xuICAgICAgfVxuICAgICAgdmFyIFN0ID0gZnVuY3Rpb24oZSwgbiwgbCkge1xuICAgICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQgPSAwLCB0aGlzLnN0cmluZyA9IGUsIHRoaXMudGFiU2l6ZSA9IG4gfHwgOCwgdGhpcy5sYXN0Q29sdW1uUG9zID0gdGhpcy5sYXN0Q29sdW1uVmFsdWUgPSAwLCB0aGlzLmxpbmVTdGFydCA9IDAsIHRoaXMubGluZU9yYWNsZSA9IGw7XG4gICAgICB9O1xuICAgICAgU3QucHJvdG90eXBlLmVvbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3MgPj0gdGhpcy5zdHJpbmcubGVuZ3RoO1xuICAgICAgfSwgU3QucHJvdG90eXBlLnNvbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3MgPT0gdGhpcy5saW5lU3RhcnQ7XG4gICAgICB9LCBTdC5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSB8fCB2b2lkIDA7XG4gICAgICB9LCBTdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5wb3MgPCB0aGlzLnN0cmluZy5sZW5ndGgpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcysrKTtcbiAgICAgIH0sIFN0LnByb3RvdHlwZS5lYXQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSwgbDtcbiAgICAgICAgaWYgKHR5cGVvZiBlID09IFwic3RyaW5nXCIgPyBsID0gbiA9PSBlIDogbCA9IG4gJiYgKGUudGVzdCA/IGUudGVzdChuKSA6IGUobikpLCBsKVxuICAgICAgICAgIHJldHVybiArK3RoaXMucG9zLCBuO1xuICAgICAgfSwgU3QucHJvdG90eXBlLmVhdFdoaWxlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBmb3IgKHZhciBuID0gdGhpcy5wb3M7IHRoaXMuZWF0KGUpOyApXG4gICAgICAgICAgO1xuICAgICAgICByZXR1cm4gdGhpcy5wb3MgPiBuO1xuICAgICAgfSwgU3QucHJvdG90eXBlLmVhdFNwYWNlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZvciAodmFyIGUgPSB0aGlzLnBvczsgL1tcXHNcXHUwMGEwXS8udGVzdCh0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpKTsgKVxuICAgICAgICAgICsrdGhpcy5wb3M7XG4gICAgICAgIHJldHVybiB0aGlzLnBvcyA+IGU7XG4gICAgICB9LCBTdC5wcm90b3R5cGUuc2tpcFRvRW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMucG9zID0gdGhpcy5zdHJpbmcubGVuZ3RoO1xuICAgICAgfSwgU3QucHJvdG90eXBlLnNraXBUbyA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLnN0cmluZy5pbmRleE9mKGUsIHRoaXMucG9zKTtcbiAgICAgICAgaWYgKG4gPiAtMSlcbiAgICAgICAgICByZXR1cm4gdGhpcy5wb3MgPSBuLCAhMDtcbiAgICAgIH0sIFN0LnByb3RvdHlwZS5iYWNrVXAgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHRoaXMucG9zIC09IGU7XG4gICAgICB9LCBTdC5wcm90b3R5cGUuY29sdW1uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhc3RDb2x1bW5Qb3MgPCB0aGlzLnN0YXJ0ICYmICh0aGlzLmxhc3RDb2x1bW5WYWx1ZSA9IGllKHRoaXMuc3RyaW5nLCB0aGlzLnN0YXJ0LCB0aGlzLnRhYlNpemUsIHRoaXMubGFzdENvbHVtblBvcywgdGhpcy5sYXN0Q29sdW1uVmFsdWUpLCB0aGlzLmxhc3RDb2x1bW5Qb3MgPSB0aGlzLnN0YXJ0KSwgdGhpcy5sYXN0Q29sdW1uVmFsdWUgLSAodGhpcy5saW5lU3RhcnQgPyBpZSh0aGlzLnN0cmluZywgdGhpcy5saW5lU3RhcnQsIHRoaXMudGFiU2l6ZSkgOiAwKTtcbiAgICAgIH0sIFN0LnByb3RvdHlwZS5pbmRlbnRhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaWUodGhpcy5zdHJpbmcsIG51bGwsIHRoaXMudGFiU2l6ZSkgLSAodGhpcy5saW5lU3RhcnQgPyBpZSh0aGlzLnN0cmluZywgdGhpcy5saW5lU3RhcnQsIHRoaXMudGFiU2l6ZSkgOiAwKTtcbiAgICAgIH0sIFN0LnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uKGUsIG4sIGwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICB2YXIgYSA9IGZ1bmN0aW9uKE8pIHtcbiAgICAgICAgICAgIHJldHVybiBsID8gTy50b0xvd2VyQ2FzZSgpIDogTztcbiAgICAgICAgICB9LCB1ID0gdGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLCBlLmxlbmd0aCk7XG4gICAgICAgICAgaWYgKGEodSkgPT0gYShlKSlcbiAgICAgICAgICAgIHJldHVybiBuICE9PSAhMSAmJiAodGhpcy5wb3MgKz0gZS5sZW5ndGgpLCAhMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZyA9IHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaChlKTtcbiAgICAgICAgICByZXR1cm4gZyAmJiBnLmluZGV4ID4gMCA/IG51bGwgOiAoZyAmJiBuICE9PSAhMSAmJiAodGhpcy5wb3MgKz0gZ1swXS5sZW5ndGgpLCBnKTtcbiAgICAgICAgfVxuICAgICAgfSwgU3QucHJvdG90eXBlLmN1cnJlbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMucG9zKTtcbiAgICAgIH0sIFN0LnByb3RvdHlwZS5oaWRlRmlyc3RDaGFycyA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICAgICAgdGhpcy5saW5lU3RhcnQgKz0gZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRoaXMubGluZVN0YXJ0IC09IGU7XG4gICAgICAgIH1cbiAgICAgIH0sIFN0LnByb3RvdHlwZS5sb29rQWhlYWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5saW5lT3JhY2xlO1xuICAgICAgICByZXR1cm4gbiAmJiBuLmxvb2tBaGVhZChlKTtcbiAgICAgIH0sIFN0LnByb3RvdHlwZS5iYXNlVG9rZW4gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGUgPSB0aGlzLmxpbmVPcmFjbGU7XG4gICAgICAgIHJldHVybiBlICYmIGUuYmFzZVRva2VuKHRoaXMucG9zKTtcbiAgICAgIH07XG4gICAgICBmdW5jdGlvbiBGZShlLCBuKSB7XG4gICAgICAgIGlmIChuIC09IGUuZmlyc3QsIG4gPCAwIHx8IG4gPj0gZS5zaXplKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGxpbmUgXCIgKyAobiArIGUuZmlyc3QpICsgXCIgaW4gdGhlIGRvY3VtZW50LlwiKTtcbiAgICAgICAgZm9yICh2YXIgbCA9IGU7ICFsLmxpbmVzOyApXG4gICAgICAgICAgZm9yICh2YXIgYSA9IDA7IDsgKythKSB7XG4gICAgICAgICAgICB2YXIgdSA9IGwuY2hpbGRyZW5bYV0sIGcgPSB1LmNodW5rU2l6ZSgpO1xuICAgICAgICAgICAgaWYgKG4gPCBnKSB7XG4gICAgICAgICAgICAgIGwgPSB1O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG4gLT0gZztcbiAgICAgICAgICB9XG4gICAgICAgIHJldHVybiBsLmxpbmVzW25dO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX24oZSwgbiwgbCkge1xuICAgICAgICB2YXIgYSA9IFtdLCB1ID0gbi5saW5lO1xuICAgICAgICByZXR1cm4gZS5pdGVyKG4ubGluZSwgbC5saW5lICsgMSwgZnVuY3Rpb24oZykge1xuICAgICAgICAgIHZhciBPID0gZy50ZXh0O1xuICAgICAgICAgIHUgPT0gbC5saW5lICYmIChPID0gTy5zbGljZSgwLCBsLmNoKSksIHUgPT0gbi5saW5lICYmIChPID0gTy5zbGljZShuLmNoKSksIGEucHVzaChPKSwgKyt1O1xuICAgICAgICB9KSwgYTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFpyKGUsIG4sIGwpIHtcbiAgICAgICAgdmFyIGEgPSBbXTtcbiAgICAgICAgcmV0dXJuIGUuaXRlcihuLCBsLCBmdW5jdGlvbih1KSB7XG4gICAgICAgICAgYS5wdXNoKHUudGV4dCk7XG4gICAgICAgIH0pLCBhO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gRG4oZSwgbikge1xuICAgICAgICB2YXIgbCA9IG4gLSBlLmhlaWdodDtcbiAgICAgICAgaWYgKGwpXG4gICAgICAgICAgZm9yICh2YXIgYSA9IGU7IGE7IGEgPSBhLnBhcmVudClcbiAgICAgICAgICAgIGEuaGVpZ2h0ICs9IGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzdChlKSB7XG4gICAgICAgIGlmIChlLnBhcmVudCA9PSBudWxsKVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBmb3IgKHZhciBuID0gZS5wYXJlbnQsIGwgPSB0ZShuLmxpbmVzLCBlKSwgYSA9IG4ucGFyZW50OyBhOyBuID0gYSwgYSA9IGEucGFyZW50KVxuICAgICAgICAgIGZvciAodmFyIHUgPSAwOyBhLmNoaWxkcmVuW3VdICE9IG47ICsrdSlcbiAgICAgICAgICAgIGwgKz0gYS5jaGlsZHJlblt1XS5jaHVua1NpemUoKTtcbiAgICAgICAgcmV0dXJuIGwgKyBuLmZpcnN0O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gem4oZSwgbikge1xuICAgICAgICB2YXIgbCA9IGUuZmlyc3Q7XG4gICAgICAgIGU6XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBlLmNoaWxkcmVuLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gZS5jaGlsZHJlblthXSwgZyA9IHUuaGVpZ2h0O1xuICAgICAgICAgICAgICBpZiAobiA8IGcpIHtcbiAgICAgICAgICAgICAgICBlID0gdTtcbiAgICAgICAgICAgICAgICBjb250aW51ZSBlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG4gLT0gZywgbCArPSB1LmNodW5rU2l6ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgfSB3aGlsZSAoIWUubGluZXMpO1xuICAgICAgICBmb3IgKHZhciBPID0gMDsgTyA8IGUubGluZXMubGVuZ3RoOyArK08pIHtcbiAgICAgICAgICB2YXIgTCA9IGUubGluZXNbT10sIEggPSBMLmhlaWdodDtcbiAgICAgICAgICBpZiAobiA8IEgpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBuIC09IEg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGwgKyBPO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24geihlLCBuKSB7XG4gICAgICAgIHJldHVybiBuID49IGUuZmlyc3QgJiYgbiA8IGUuZmlyc3QgKyBlLnNpemU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBLKGUsIG4pIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhlLmxpbmVOdW1iZXJGb3JtYXR0ZXIobiArIGUuZmlyc3RMaW5lTnVtYmVyKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBxKGUsIG4sIGwpIHtcbiAgICAgICAgaWYgKGwgPT09IHZvaWQgMCAmJiAobCA9IG51bGwpLCAhKHRoaXMgaW5zdGFuY2VvZiBxKSlcbiAgICAgICAgICByZXR1cm4gbmV3IHEoZSwgbiwgbCk7XG4gICAgICAgIHRoaXMubGluZSA9IGUsIHRoaXMuY2ggPSBuLCB0aGlzLnN0aWNreSA9IGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBvZShlLCBuKSB7XG4gICAgICAgIHJldHVybiBlLmxpbmUgLSBuLmxpbmUgfHwgZS5jaCAtIG4uY2g7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB6ZShlLCBuKSB7XG4gICAgICAgIHJldHVybiBlLnN0aWNreSA9PSBuLnN0aWNreSAmJiBvZShlLCBuKSA9PSAwO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdHQoZSkge1xuICAgICAgICByZXR1cm4gcShlLmxpbmUsIGUuY2gpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcnQoZSwgbikge1xuICAgICAgICByZXR1cm4gb2UoZSwgbikgPCAwID8gbiA6IGU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBQdChlLCBuKSB7XG4gICAgICAgIHJldHVybiBvZShlLCBuKSA8IDAgPyBlIDogbjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHluKGUsIG4pIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KGUuZmlyc3QsIE1hdGgubWluKG4sIGUuZmlyc3QgKyBlLnNpemUgLSAxKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBWZShlLCBuKSB7XG4gICAgICAgIGlmIChuLmxpbmUgPCBlLmZpcnN0KVxuICAgICAgICAgIHJldHVybiBxKGUuZmlyc3QsIDApO1xuICAgICAgICB2YXIgbCA9IGUuZmlyc3QgKyBlLnNpemUgLSAxO1xuICAgICAgICByZXR1cm4gbi5saW5lID4gbCA/IHEobCwgRmUoZSwgbCkudGV4dC5sZW5ndGgpIDogZ2MobiwgRmUoZSwgbi5saW5lKS50ZXh0Lmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBnYyhlLCBuKSB7XG4gICAgICAgIHZhciBsID0gZS5jaDtcbiAgICAgICAgcmV0dXJuIGwgPT0gbnVsbCB8fCBsID4gbiA/IHEoZS5saW5lLCBuKSA6IGwgPCAwID8gcShlLmxpbmUsIDApIDogZTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGpzKGUsIG4pIHtcbiAgICAgICAgZm9yICh2YXIgbCA9IFtdLCBhID0gMDsgYSA8IG4ubGVuZ3RoOyBhKyspXG4gICAgICAgICAgbFthXSA9IFZlKGUsIG5bYV0pO1xuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH1cbiAgICAgIHZhciBObyA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IGUsIHRoaXMubG9va0FoZWFkID0gbjtcbiAgICAgIH0sIFZuID0gZnVuY3Rpb24oZSwgbiwgbCwgYSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gbiwgdGhpcy5kb2MgPSBlLCB0aGlzLmxpbmUgPSBsLCB0aGlzLm1heExvb2tBaGVhZCA9IGEgfHwgMCwgdGhpcy5iYXNlVG9rZW5zID0gbnVsbCwgdGhpcy5iYXNlVG9rZW5Qb3MgPSAxO1xuICAgICAgfTtcbiAgICAgIFZuLnByb3RvdHlwZS5sb29rQWhlYWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5kb2MuZ2V0TGluZSh0aGlzLmxpbmUgKyBlKTtcbiAgICAgICAgcmV0dXJuIG4gIT0gbnVsbCAmJiBlID4gdGhpcy5tYXhMb29rQWhlYWQgJiYgKHRoaXMubWF4TG9va0FoZWFkID0gZSksIG47XG4gICAgICB9LCBWbi5wcm90b3R5cGUuYmFzZVRva2VuID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoIXRoaXMuYmFzZVRva2VucylcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgZm9yICg7IHRoaXMuYmFzZVRva2Vuc1t0aGlzLmJhc2VUb2tlblBvc10gPD0gZTsgKVxuICAgICAgICAgIHRoaXMuYmFzZVRva2VuUG9zICs9IDI7XG4gICAgICAgIHZhciBuID0gdGhpcy5iYXNlVG9rZW5zW3RoaXMuYmFzZVRva2VuUG9zICsgMV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogbiAmJiBuLnJlcGxhY2UoLyggfF4pb3ZlcmxheSAuKi8sIFwiXCIpLFxuICAgICAgICAgIHNpemU6IHRoaXMuYmFzZVRva2Vuc1t0aGlzLmJhc2VUb2tlblBvc10gLSBlXG4gICAgICAgIH07XG4gICAgICB9LCBWbi5wcm90b3R5cGUubmV4dExpbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5saW5lKyssIHRoaXMubWF4TG9va0FoZWFkID4gMCAmJiB0aGlzLm1heExvb2tBaGVhZC0tO1xuICAgICAgfSwgVm4uZnJvbVNhdmVkID0gZnVuY3Rpb24oZSwgbiwgbCkge1xuICAgICAgICByZXR1cm4gbiBpbnN0YW5jZW9mIE5vID8gbmV3IFZuKGUsIHFuKGUubW9kZSwgbi5zdGF0ZSksIGwsIG4ubG9va0FoZWFkKSA6IG5ldyBWbihlLCBxbihlLm1vZGUsIG4pLCBsKTtcbiAgICAgIH0sIFZuLnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgbiA9IGUgIT09ICExID8gcW4odGhpcy5kb2MubW9kZSwgdGhpcy5zdGF0ZSkgOiB0aGlzLnN0YXRlO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXhMb29rQWhlYWQgPiAwID8gbmV3IE5vKG4sIHRoaXMubWF4TG9va0FoZWFkKSA6IG47XG4gICAgICB9O1xuICAgICAgZnVuY3Rpb24gVXMoZSwgbiwgbCwgYSkge1xuICAgICAgICB2YXIgdSA9IFtlLnN0YXRlLm1vZGVHZW5dLCBnID0ge307XG4gICAgICAgIFlzKFxuICAgICAgICAgIGUsXG4gICAgICAgICAgbi50ZXh0LFxuICAgICAgICAgIGUuZG9jLm1vZGUsXG4gICAgICAgICAgbCxcbiAgICAgICAgICBmdW5jdGlvbihVLCBHKSB7XG4gICAgICAgICAgICByZXR1cm4gdS5wdXNoKFUsIEcpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZyxcbiAgICAgICAgICBhXG4gICAgICAgICk7XG4gICAgICAgIGZvciAodmFyIE8gPSBsLnN0YXRlLCBMID0gZnVuY3Rpb24oVSkge1xuICAgICAgICAgIGwuYmFzZVRva2VucyA9IHU7XG4gICAgICAgICAgdmFyIEcgPSBlLnN0YXRlLm92ZXJsYXlzW1VdLCBZID0gMSwgZWUgPSAwO1xuICAgICAgICAgIGwuc3RhdGUgPSAhMCwgWXMoZSwgbi50ZXh0LCBHLm1vZGUsIGwsIGZ1bmN0aW9uKF8sIGFlKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjZSA9IFk7IGVlIDwgXzsgKSB7XG4gICAgICAgICAgICAgIHZhciB5ZSA9IHVbWV07XG4gICAgICAgICAgICAgIHllID4gXyAmJiB1LnNwbGljZShZLCAxLCBfLCB1W1kgKyAxXSwgeWUpLCBZICs9IDIsIGVlID0gTWF0aC5taW4oXywgeWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEhYWUpXG4gICAgICAgICAgICAgIGlmIChHLm9wYXF1ZSlcbiAgICAgICAgICAgICAgICB1LnNwbGljZShjZSwgWSAtIGNlLCBfLCBcIm92ZXJsYXkgXCIgKyBhZSksIFkgPSBjZSArIDI7XG4gICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBmb3IgKDsgY2UgPCBZOyBjZSArPSAyKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgQ2UgPSB1W2NlICsgMV07XG4gICAgICAgICAgICAgICAgICB1W2NlICsgMV0gPSAoQ2UgPyBDZSArIFwiIFwiIDogXCJcIikgKyBcIm92ZXJsYXkgXCIgKyBhZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZyksIGwuc3RhdGUgPSBPLCBsLmJhc2VUb2tlbnMgPSBudWxsLCBsLmJhc2VUb2tlblBvcyA9IDE7XG4gICAgICAgIH0sIEggPSAwOyBIIDwgZS5zdGF0ZS5vdmVybGF5cy5sZW5ndGg7ICsrSClcbiAgICAgICAgICBMKEgpO1xuICAgICAgICByZXR1cm4geyBzdHlsZXM6IHUsIGNsYXNzZXM6IGcuYmdDbGFzcyB8fCBnLnRleHRDbGFzcyA/IGcgOiBudWxsIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB6cyhlLCBuLCBsKSB7XG4gICAgICAgIGlmICghbi5zdHlsZXMgfHwgbi5zdHlsZXNbMF0gIT0gZS5zdGF0ZS5tb2RlR2VuKSB7XG4gICAgICAgICAgdmFyIGEgPSBPaShlLCBzdChuKSksIHUgPSBuLnRleHQubGVuZ3RoID4gZS5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aCAmJiBxbihlLmRvYy5tb2RlLCBhLnN0YXRlKSwgZyA9IFVzKGUsIG4sIGEpO1xuICAgICAgICAgIHUgJiYgKGEuc3RhdGUgPSB1KSwgbi5zdGF0ZUFmdGVyID0gYS5zYXZlKCF1KSwgbi5zdHlsZXMgPSBnLnN0eWxlcywgZy5jbGFzc2VzID8gbi5zdHlsZUNsYXNzZXMgPSBnLmNsYXNzZXMgOiBuLnN0eWxlQ2xhc3NlcyAmJiAobi5zdHlsZUNsYXNzZXMgPSBudWxsKSwgbCA9PT0gZS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXIgJiYgKGUuZG9jLm1vZGVGcm9udGllciA9IE1hdGgubWF4KGUuZG9jLm1vZGVGcm9udGllciwgKytlLmRvYy5oaWdobGlnaHRGcm9udGllcikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuLnN0eWxlcztcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE9pKGUsIG4sIGwpIHtcbiAgICAgICAgdmFyIGEgPSBlLmRvYywgdSA9IGUuZGlzcGxheTtcbiAgICAgICAgaWYgKCFhLm1vZGUuc3RhcnRTdGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3IFZuKGEsICEwLCBuKTtcbiAgICAgICAgdmFyIGcgPSB5YyhlLCBuLCBsKSwgTyA9IGcgPiBhLmZpcnN0ICYmIEZlKGEsIGcgLSAxKS5zdGF0ZUFmdGVyLCBMID0gTyA/IFZuLmZyb21TYXZlZChhLCBPLCBnKSA6IG5ldyBWbihhLCBOaShhLm1vZGUpLCBnKTtcbiAgICAgICAgcmV0dXJuIGEuaXRlcihnLCBuLCBmdW5jdGlvbihIKSB7XG4gICAgICAgICAgamEoZSwgSC50ZXh0LCBMKTtcbiAgICAgICAgICB2YXIgVSA9IEwubGluZTtcbiAgICAgICAgICBILnN0YXRlQWZ0ZXIgPSBVID09IG4gLSAxIHx8IFUgJSA1ID09IDAgfHwgVSA+PSB1LnZpZXdGcm9tICYmIFUgPCB1LnZpZXdUbyA/IEwuc2F2ZSgpIDogbnVsbCwgTC5uZXh0TGluZSgpO1xuICAgICAgICB9KSwgbCAmJiAoYS5tb2RlRnJvbnRpZXIgPSBMLmxpbmUpLCBMO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gamEoZSwgbiwgbCwgYSkge1xuICAgICAgICB2YXIgdSA9IGUuZG9jLm1vZGUsIGcgPSBuZXcgU3QobiwgZS5vcHRpb25zLnRhYlNpemUsIGwpO1xuICAgICAgICBmb3IgKGcuc3RhcnQgPSBnLnBvcyA9IGEgfHwgMCwgbiA9PSBcIlwiICYmIFZzKHUsIGwuc3RhdGUpOyAhZy5lb2woKTsgKVxuICAgICAgICAgIFVhKHUsIGcsIGwuc3RhdGUpLCBnLnN0YXJ0ID0gZy5wb3M7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBWcyhlLCBuKSB7XG4gICAgICAgIGlmIChlLmJsYW5rTGluZSlcbiAgICAgICAgICByZXR1cm4gZS5ibGFua0xpbmUobik7XG4gICAgICAgIGlmICghIWUuaW5uZXJNb2RlKSB7XG4gICAgICAgICAgdmFyIGwgPSBtcihlLCBuKTtcbiAgICAgICAgICBpZiAobC5tb2RlLmJsYW5rTGluZSlcbiAgICAgICAgICAgIHJldHVybiBsLm1vZGUuYmxhbmtMaW5lKGwuc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBVYShlLCBuLCBsLCBhKSB7XG4gICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgMTA7IHUrKykge1xuICAgICAgICAgIGEgJiYgKGFbMF0gPSBtcihlLCBsKS5tb2RlKTtcbiAgICAgICAgICB2YXIgZyA9IGUudG9rZW4obiwgbCk7XG4gICAgICAgICAgaWYgKG4ucG9zID4gbi5zdGFydClcbiAgICAgICAgICAgIHJldHVybiBnO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1vZGUgXCIgKyBlLm5hbWUgKyBcIiBmYWlsZWQgdG8gYWR2YW5jZSBzdHJlYW0uXCIpO1xuICAgICAgfVxuICAgICAgdmFyIFdzID0gZnVuY3Rpb24oZSwgbiwgbCkge1xuICAgICAgICB0aGlzLnN0YXJ0ID0gZS5zdGFydCwgdGhpcy5lbmQgPSBlLnBvcywgdGhpcy5zdHJpbmcgPSBlLmN1cnJlbnQoKSwgdGhpcy50eXBlID0gbiB8fCBudWxsLCB0aGlzLnN0YXRlID0gbDtcbiAgICAgIH07XG4gICAgICBmdW5jdGlvbiBHcyhlLCBuLCBsLCBhKSB7XG4gICAgICAgIHZhciB1ID0gZS5kb2MsIGcgPSB1Lm1vZGUsIE87XG4gICAgICAgIG4gPSBWZSh1LCBuKTtcbiAgICAgICAgdmFyIEwgPSBGZSh1LCBuLmxpbmUpLCBIID0gT2koZSwgbi5saW5lLCBsKSwgVSA9IG5ldyBTdChMLnRleHQsIGUub3B0aW9ucy50YWJTaXplLCBIKSwgRztcbiAgICAgICAgZm9yIChhICYmIChHID0gW10pOyAoYSB8fCBVLnBvcyA8IG4uY2gpICYmICFVLmVvbCgpOyApXG4gICAgICAgICAgVS5zdGFydCA9IFUucG9zLCBPID0gVWEoZywgVSwgSC5zdGF0ZSksIGEgJiYgRy5wdXNoKG5ldyBXcyhVLCBPLCBxbih1Lm1vZGUsIEguc3RhdGUpKSk7XG4gICAgICAgIHJldHVybiBhID8gRyA6IG5ldyBXcyhVLCBPLCBILnN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFFzKGUsIG4pIHtcbiAgICAgICAgaWYgKGUpXG4gICAgICAgICAgZm9yICg7IDsgKSB7XG4gICAgICAgICAgICB2YXIgbCA9IGUubWF0Y2goLyg/Ol58XFxzKylsaW5lLShiYWNrZ3JvdW5kLSk/KFxcUyspLyk7XG4gICAgICAgICAgICBpZiAoIWwpXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZSA9IGUuc2xpY2UoMCwgbC5pbmRleCkgKyBlLnNsaWNlKGwuaW5kZXggKyBsWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICB2YXIgYSA9IGxbMV0gPyBcImJnQ2xhc3NcIiA6IFwidGV4dENsYXNzXCI7XG4gICAgICAgICAgICBuW2FdID09IG51bGwgPyBuW2FdID0gbFsyXSA6IG5ldyBSZWdFeHAoXCIoPzpefFxcXFxzKVwiICsgbFsyXSArIFwiKD86JHxcXFxccylcIikudGVzdChuW2FdKSB8fCAoblthXSArPSBcIiBcIiArIGxbMl0pO1xuICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBZcyhlLCBuLCBsLCBhLCB1LCBnLCBPKSB7XG4gICAgICAgIHZhciBMID0gbC5mbGF0dGVuU3BhbnM7XG4gICAgICAgIEwgPT0gbnVsbCAmJiAoTCA9IGUub3B0aW9ucy5mbGF0dGVuU3BhbnMpO1xuICAgICAgICB2YXIgSCA9IDAsIFUgPSBudWxsLCBHID0gbmV3IFN0KG4sIGUub3B0aW9ucy50YWJTaXplLCBhKSwgWSwgZWUgPSBlLm9wdGlvbnMuYWRkTW9kZUNsYXNzICYmIFtudWxsXTtcbiAgICAgICAgZm9yIChuID09IFwiXCIgJiYgUXMoVnMobCwgYS5zdGF0ZSksIGcpOyAhRy5lb2woKTsgKSB7XG4gICAgICAgICAgaWYgKEcucG9zID4gZS5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aCA/IChMID0gITEsIE8gJiYgamEoZSwgbiwgYSwgRy5wb3MpLCBHLnBvcyA9IG4ubGVuZ3RoLCBZID0gbnVsbCkgOiBZID0gUXMoVWEobCwgRywgYS5zdGF0ZSwgZWUpLCBnKSwgZWUpIHtcbiAgICAgICAgICAgIHZhciBfID0gZWVbMF0ubmFtZTtcbiAgICAgICAgICAgIF8gJiYgKFkgPSBcIm0tXCIgKyAoWSA/IF8gKyBcIiBcIiArIFkgOiBfKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghTCB8fCBVICE9IFkpIHtcbiAgICAgICAgICAgIGZvciAoOyBIIDwgRy5zdGFydDsgKVxuICAgICAgICAgICAgICBIID0gTWF0aC5taW4oRy5zdGFydCwgSCArIDVlMyksIHUoSCwgVSk7XG4gICAgICAgICAgICBVID0gWTtcbiAgICAgICAgICB9XG4gICAgICAgICAgRy5zdGFydCA9IEcucG9zO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoOyBIIDwgRy5wb3M7ICkge1xuICAgICAgICAgIHZhciBhZSA9IE1hdGgubWluKEcucG9zLCBIICsgNWUzKTtcbiAgICAgICAgICB1KGFlLCBVKSwgSCA9IGFlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB5YyhlLCBuLCBsKSB7XG4gICAgICAgIGZvciAodmFyIGEsIHUsIGcgPSBlLmRvYywgTyA9IGwgPyAtMSA6IG4gLSAoZS5kb2MubW9kZS5pbm5lck1vZGUgPyAxZTMgOiAxMDApLCBMID0gbjsgTCA+IE87IC0tTCkge1xuICAgICAgICAgIGlmIChMIDw9IGcuZmlyc3QpXG4gICAgICAgICAgICByZXR1cm4gZy5maXJzdDtcbiAgICAgICAgICB2YXIgSCA9IEZlKGcsIEwgLSAxKSwgVSA9IEguc3RhdGVBZnRlcjtcbiAgICAgICAgICBpZiAoVSAmJiAoIWwgfHwgTCArIChVIGluc3RhbmNlb2YgTm8gPyBVLmxvb2tBaGVhZCA6IDApIDw9IGcubW9kZUZyb250aWVyKSlcbiAgICAgICAgICAgIHJldHVybiBMO1xuICAgICAgICAgIHZhciBHID0gaWUoSC50ZXh0LCBudWxsLCBlLm9wdGlvbnMudGFiU2l6ZSk7XG4gICAgICAgICAgKHUgPT0gbnVsbCB8fCBhID4gRykgJiYgKHUgPSBMIC0gMSwgYSA9IEcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gQWMoZSwgbikge1xuICAgICAgICBpZiAoZS5tb2RlRnJvbnRpZXIgPSBNYXRoLm1pbihlLm1vZGVGcm9udGllciwgbiksICEoZS5oaWdobGlnaHRGcm9udGllciA8IG4gLSAxMCkpIHtcbiAgICAgICAgICBmb3IgKHZhciBsID0gZS5maXJzdCwgYSA9IG4gLSAxOyBhID4gbDsgYS0tKSB7XG4gICAgICAgICAgICB2YXIgdSA9IEZlKGUsIGEpLnN0YXRlQWZ0ZXI7XG4gICAgICAgICAgICBpZiAodSAmJiAoISh1IGluc3RhbmNlb2YgTm8pIHx8IGEgKyB1Lmxvb2tBaGVhZCA8IG4pKSB7XG4gICAgICAgICAgICAgIGwgPSBhICsgMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGUuaGlnaGxpZ2h0RnJvbnRpZXIgPSBNYXRoLm1pbihlLmhpZ2hsaWdodEZyb250aWVyLCBsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIEtzID0gITEsIGVyID0gITE7XG4gICAgICBmdW5jdGlvbiBiYygpIHtcbiAgICAgICAgS3MgPSAhMDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIENjKCkge1xuICAgICAgICBlciA9ICEwO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gT28oZSwgbiwgbCkge1xuICAgICAgICB0aGlzLm1hcmtlciA9IGUsIHRoaXMuZnJvbSA9IG4sIHRoaXMudG8gPSBsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gUGkoZSwgbikge1xuICAgICAgICBpZiAoZSlcbiAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGUubGVuZ3RoOyArK2wpIHtcbiAgICAgICAgICAgIHZhciBhID0gZVtsXTtcbiAgICAgICAgICAgIGlmIChhLm1hcmtlciA9PSBuKVxuICAgICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBFYyhlLCBuKSB7XG4gICAgICAgIGZvciAodmFyIGwsIGEgPSAwOyBhIDwgZS5sZW5ndGg7ICsrYSlcbiAgICAgICAgICBlW2FdICE9IG4gJiYgKGwgfHwgKGwgPSBbXSkpLnB1c2goZVthXSk7XG4gICAgICAgIHJldHVybiBsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gU2MoZSwgbiwgbCkge1xuICAgICAgICB2YXIgYSA9IGwgJiYgd2luZG93LldlYWtTZXQgJiYgKGwubWFya2VkU3BhbnMgfHwgKGwubWFya2VkU3BhbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKSkpO1xuICAgICAgICBhICYmIGUubWFya2VkU3BhbnMgJiYgYS5oYXMoZS5tYXJrZWRTcGFucykgPyBlLm1hcmtlZFNwYW5zLnB1c2gobikgOiAoZS5tYXJrZWRTcGFucyA9IGUubWFya2VkU3BhbnMgPyBlLm1hcmtlZFNwYW5zLmNvbmNhdChbbl0pIDogW25dLCBhICYmIGEuYWRkKGUubWFya2VkU3BhbnMpKSwgbi5tYXJrZXIuYXR0YWNoTGluZShlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHhjKGUsIG4sIGwpIHtcbiAgICAgICAgdmFyIGE7XG4gICAgICAgIGlmIChlKVxuICAgICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgZS5sZW5ndGg7ICsrdSkge1xuICAgICAgICAgICAgdmFyIGcgPSBlW3VdLCBPID0gZy5tYXJrZXIsIEwgPSBnLmZyb20gPT0gbnVsbCB8fCAoTy5pbmNsdXNpdmVMZWZ0ID8gZy5mcm9tIDw9IG4gOiBnLmZyb20gPCBuKTtcbiAgICAgICAgICAgIGlmIChMIHx8IGcuZnJvbSA9PSBuICYmIE8udHlwZSA9PSBcImJvb2ttYXJrXCIgJiYgKCFsIHx8ICFnLm1hcmtlci5pbnNlcnRMZWZ0KSkge1xuICAgICAgICAgICAgICB2YXIgSCA9IGcudG8gPT0gbnVsbCB8fCAoTy5pbmNsdXNpdmVSaWdodCA/IGcudG8gPj0gbiA6IGcudG8gPiBuKTtcbiAgICAgICAgICAgICAgKGEgfHwgKGEgPSBbXSkpLnB1c2gobmV3IE9vKE8sIGcuZnJvbSwgSCA/IG51bGwgOiBnLnRvKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHdjKGUsIG4sIGwpIHtcbiAgICAgICAgdmFyIGE7XG4gICAgICAgIGlmIChlKVxuICAgICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgZS5sZW5ndGg7ICsrdSkge1xuICAgICAgICAgICAgdmFyIGcgPSBlW3VdLCBPID0gZy5tYXJrZXIsIEwgPSBnLnRvID09IG51bGwgfHwgKE8uaW5jbHVzaXZlUmlnaHQgPyBnLnRvID49IG4gOiBnLnRvID4gbik7XG4gICAgICAgICAgICBpZiAoTCB8fCBnLmZyb20gPT0gbiAmJiBPLnR5cGUgPT0gXCJib29rbWFya1wiICYmICghbCB8fCBnLm1hcmtlci5pbnNlcnRMZWZ0KSkge1xuICAgICAgICAgICAgICB2YXIgSCA9IGcuZnJvbSA9PSBudWxsIHx8IChPLmluY2x1c2l2ZUxlZnQgPyBnLmZyb20gPD0gbiA6IGcuZnJvbSA8IG4pO1xuICAgICAgICAgICAgICAoYSB8fCAoYSA9IFtdKSkucHVzaChuZXcgT28oXG4gICAgICAgICAgICAgICAgTyxcbiAgICAgICAgICAgICAgICBIID8gbnVsbCA6IGcuZnJvbSAtIG4sXG4gICAgICAgICAgICAgICAgZy50byA9PSBudWxsID8gbnVsbCA6IGcudG8gLSBuXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB6YShlLCBuKSB7XG4gICAgICAgIGlmIChuLmZ1bGwpXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHZhciBsID0geihlLCBuLmZyb20ubGluZSkgJiYgRmUoZSwgbi5mcm9tLmxpbmUpLm1hcmtlZFNwYW5zLCBhID0geihlLCBuLnRvLmxpbmUpICYmIEZlKGUsIG4udG8ubGluZSkubWFya2VkU3BhbnM7XG4gICAgICAgIGlmICghbCAmJiAhYSlcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIHUgPSBuLmZyb20uY2gsIGcgPSBuLnRvLmNoLCBPID0gb2Uobi5mcm9tLCBuLnRvKSA9PSAwLCBMID0geGMobCwgdSwgTyksIEggPSB3YyhhLCBnLCBPKSwgVSA9IG4udGV4dC5sZW5ndGggPT0gMSwgRyA9IEJlKG4udGV4dCkubGVuZ3RoICsgKFUgPyB1IDogMCk7XG4gICAgICAgIGlmIChMKVxuICAgICAgICAgIGZvciAodmFyIFkgPSAwOyBZIDwgTC5sZW5ndGg7ICsrWSkge1xuICAgICAgICAgICAgdmFyIGVlID0gTFtZXTtcbiAgICAgICAgICAgIGlmIChlZS50byA9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBfID0gUGkoSCwgZWUubWFya2VyKTtcbiAgICAgICAgICAgICAgXyA/IFUgJiYgKGVlLnRvID0gXy50byA9PSBudWxsID8gbnVsbCA6IF8udG8gKyBHKSA6IGVlLnRvID0gdTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGlmIChIKVxuICAgICAgICAgIGZvciAodmFyIGFlID0gMDsgYWUgPCBILmxlbmd0aDsgKythZSkge1xuICAgICAgICAgICAgdmFyIGNlID0gSFthZV07XG4gICAgICAgICAgICBpZiAoY2UudG8gIT0gbnVsbCAmJiAoY2UudG8gKz0gRyksIGNlLmZyb20gPT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YXIgeWUgPSBQaShMLCBjZS5tYXJrZXIpO1xuICAgICAgICAgICAgICB5ZSB8fCAoY2UuZnJvbSA9IEcsIFUgJiYgKEwgfHwgKEwgPSBbXSkpLnB1c2goY2UpKTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICBjZS5mcm9tICs9IEcsIFUgJiYgKEwgfHwgKEwgPSBbXSkpLnB1c2goY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgTCAmJiAoTCA9IFhzKEwpKSwgSCAmJiBIICE9IEwgJiYgKEggPSBYcyhIKSk7XG4gICAgICAgIHZhciBDZSA9IFtMXTtcbiAgICAgICAgaWYgKCFVKSB7XG4gICAgICAgICAgdmFyIFRlID0gbi50ZXh0Lmxlbmd0aCAtIDIsIEVlO1xuICAgICAgICAgIGlmIChUZSA+IDAgJiYgTClcbiAgICAgICAgICAgIGZvciAodmFyIE5lID0gMDsgTmUgPCBMLmxlbmd0aDsgKytOZSlcbiAgICAgICAgICAgICAgTFtOZV0udG8gPT0gbnVsbCAmJiAoRWUgfHwgKEVlID0gW10pKS5wdXNoKG5ldyBPbyhMW05lXS5tYXJrZXIsIG51bGwsIG51bGwpKTtcbiAgICAgICAgICBmb3IgKHZhciBrZSA9IDA7IGtlIDwgVGU7ICsra2UpXG4gICAgICAgICAgICBDZS5wdXNoKEVlKTtcbiAgICAgICAgICBDZS5wdXNoKEgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBDZTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFhzKGUpIHtcbiAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLmxlbmd0aDsgKytuKSB7XG4gICAgICAgICAgdmFyIGwgPSBlW25dO1xuICAgICAgICAgIGwuZnJvbSAhPSBudWxsICYmIGwuZnJvbSA9PSBsLnRvICYmIGwubWFya2VyLmNsZWFyV2hlbkVtcHR5ICE9PSAhMSAmJiBlLnNwbGljZShuLS0sIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlLmxlbmd0aCA/IGUgOiBudWxsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gVGMoZSwgbiwgbCkge1xuICAgICAgICB2YXIgYSA9IG51bGw7XG4gICAgICAgIGlmIChlLml0ZXIobi5saW5lLCBsLmxpbmUgKyAxLCBmdW5jdGlvbihfKSB7XG4gICAgICAgICAgaWYgKF8ubWFya2VkU3BhbnMpXG4gICAgICAgICAgICBmb3IgKHZhciBhZSA9IDA7IGFlIDwgXy5tYXJrZWRTcGFucy5sZW5ndGg7ICsrYWUpIHtcbiAgICAgICAgICAgICAgdmFyIGNlID0gXy5tYXJrZWRTcGFuc1thZV0ubWFya2VyO1xuICAgICAgICAgICAgICBjZS5yZWFkT25seSAmJiAoIWEgfHwgdGUoYSwgY2UpID09IC0xKSAmJiAoYSB8fCAoYSA9IFtdKSkucHVzaChjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLCAhYSlcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgdSA9IFt7IGZyb206IG4sIHRvOiBsIH1dLCBnID0gMDsgZyA8IGEubGVuZ3RoOyArK2cpXG4gICAgICAgICAgZm9yICh2YXIgTyA9IGFbZ10sIEwgPSBPLmZpbmQoMCksIEggPSAwOyBIIDwgdS5sZW5ndGg7ICsrSCkge1xuICAgICAgICAgICAgdmFyIFUgPSB1W0hdO1xuICAgICAgICAgICAgaWYgKCEob2UoVS50bywgTC5mcm9tKSA8IDAgfHwgb2UoVS5mcm9tLCBMLnRvKSA+IDApKSB7XG4gICAgICAgICAgICAgIHZhciBHID0gW0gsIDFdLCBZID0gb2UoVS5mcm9tLCBMLmZyb20pLCBlZSA9IG9lKFUudG8sIEwudG8pO1xuICAgICAgICAgICAgICAoWSA8IDAgfHwgIU8uaW5jbHVzaXZlTGVmdCAmJiAhWSkgJiYgRy5wdXNoKHsgZnJvbTogVS5mcm9tLCB0bzogTC5mcm9tIH0pLCAoZWUgPiAwIHx8ICFPLmluY2x1c2l2ZVJpZ2h0ICYmICFlZSkgJiYgRy5wdXNoKHsgZnJvbTogTC50bywgdG86IFUudG8gfSksIHUuc3BsaWNlLmFwcGx5KHUsIEcpLCBIICs9IEcubGVuZ3RoIC0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIHJldHVybiB1O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gSnMoZSkge1xuICAgICAgICB2YXIgbiA9IGUubWFya2VkU3BhbnM7XG4gICAgICAgIGlmICghIW4pIHtcbiAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IG4ubGVuZ3RoOyArK2wpXG4gICAgICAgICAgICBuW2xdLm1hcmtlci5kZXRhY2hMaW5lKGUpO1xuICAgICAgICAgIGUubWFya2VkU3BhbnMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBacyhlLCBuKSB7XG4gICAgICAgIGlmICghIW4pIHtcbiAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IG4ubGVuZ3RoOyArK2wpXG4gICAgICAgICAgICBuW2xdLm1hcmtlci5hdHRhY2hMaW5lKGUpO1xuICAgICAgICAgIGUubWFya2VkU3BhbnMgPSBuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBQbyhlKSB7XG4gICAgICAgIHJldHVybiBlLmluY2x1c2l2ZUxlZnQgPyAtMSA6IDA7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBGbyhlKSB7XG4gICAgICAgIHJldHVybiBlLmluY2x1c2l2ZVJpZ2h0ID8gMSA6IDA7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBWYShlLCBuKSB7XG4gICAgICAgIHZhciBsID0gZS5saW5lcy5sZW5ndGggLSBuLmxpbmVzLmxlbmd0aDtcbiAgICAgICAgaWYgKGwgIT0gMClcbiAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgdmFyIGEgPSBlLmZpbmQoKSwgdSA9IG4uZmluZCgpLCBnID0gb2UoYS5mcm9tLCB1LmZyb20pIHx8IFBvKGUpIC0gUG8obik7XG4gICAgICAgIGlmIChnKVxuICAgICAgICAgIHJldHVybiAtZztcbiAgICAgICAgdmFyIE8gPSBvZShhLnRvLCB1LnRvKSB8fCBGbyhlKSAtIEZvKG4pO1xuICAgICAgICByZXR1cm4gTyB8fCBuLmlkIC0gZS5pZDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHFzKGUsIG4pIHtcbiAgICAgICAgdmFyIGwgPSBlciAmJiBlLm1hcmtlZFNwYW5zLCBhO1xuICAgICAgICBpZiAobClcbiAgICAgICAgICBmb3IgKHZhciB1ID0gdm9pZCAwLCBnID0gMDsgZyA8IGwubGVuZ3RoOyArK2cpXG4gICAgICAgICAgICB1ID0gbFtnXSwgdS5tYXJrZXIuY29sbGFwc2VkICYmIChuID8gdS5mcm9tIDogdS50bykgPT0gbnVsbCAmJiAoIWEgfHwgVmEoYSwgdS5tYXJrZXIpIDwgMCkgJiYgKGEgPSB1Lm1hcmtlcik7XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3MoZSkge1xuICAgICAgICByZXR1cm4gcXMoZSwgITApO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gTG8oZSkge1xuICAgICAgICByZXR1cm4gcXMoZSwgITEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gRGMoZSwgbikge1xuICAgICAgICB2YXIgbCA9IGVyICYmIGUubWFya2VkU3BhbnMsIGE7XG4gICAgICAgIGlmIChsKVxuICAgICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgbC5sZW5ndGg7ICsrdSkge1xuICAgICAgICAgICAgdmFyIGcgPSBsW3VdO1xuICAgICAgICAgICAgZy5tYXJrZXIuY29sbGFwc2VkICYmIChnLmZyb20gPT0gbnVsbCB8fCBnLmZyb20gPCBuKSAmJiAoZy50byA9PSBudWxsIHx8IGcudG8gPiBuKSAmJiAoIWEgfHwgVmEoYSwgZy5tYXJrZXIpIDwgMCkgJiYgKGEgPSBnLm1hcmtlcik7XG4gICAgICAgICAgfVxuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGV1KGUsIG4sIGwsIGEsIHUpIHtcbiAgICAgICAgdmFyIGcgPSBGZShlLCBuKSwgTyA9IGVyICYmIGcubWFya2VkU3BhbnM7XG4gICAgICAgIGlmIChPKVxuICAgICAgICAgIGZvciAodmFyIEwgPSAwOyBMIDwgTy5sZW5ndGg7ICsrTCkge1xuICAgICAgICAgICAgdmFyIEggPSBPW0xdO1xuICAgICAgICAgICAgaWYgKCEhSC5tYXJrZXIuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgIHZhciBVID0gSC5tYXJrZXIuZmluZCgwKSwgRyA9IG9lKFUuZnJvbSwgbCkgfHwgUG8oSC5tYXJrZXIpIC0gUG8odSksIFkgPSBvZShVLnRvLCBhKSB8fCBGbyhILm1hcmtlcikgLSBGbyh1KTtcbiAgICAgICAgICAgICAgaWYgKCEoRyA+PSAwICYmIFkgPD0gMCB8fCBHIDw9IDAgJiYgWSA+PSAwKSAmJiAoRyA8PSAwICYmIChILm1hcmtlci5pbmNsdXNpdmVSaWdodCAmJiB1LmluY2x1c2l2ZUxlZnQgPyBvZShVLnRvLCBsKSA+PSAwIDogb2UoVS50bywgbCkgPiAwKSB8fCBHID49IDAgJiYgKEgubWFya2VyLmluY2x1c2l2ZVJpZ2h0ICYmIHUuaW5jbHVzaXZlTGVmdCA/IG9lKFUuZnJvbSwgYSkgPD0gMCA6IG9lKFUuZnJvbSwgYSkgPCAwKSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE9uKGUpIHtcbiAgICAgICAgZm9yICh2YXIgbjsgbiA9IF9zKGUpOyApXG4gICAgICAgICAgZSA9IG4uZmluZCgtMSwgITApLmxpbmU7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gUmMoZSkge1xuICAgICAgICBmb3IgKHZhciBuOyBuID0gTG8oZSk7IClcbiAgICAgICAgICBlID0gbi5maW5kKDEsICEwKS5saW5lO1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE1jKGUpIHtcbiAgICAgICAgZm9yICh2YXIgbiwgbDsgbiA9IExvKGUpOyApXG4gICAgICAgICAgZSA9IG4uZmluZCgxLCAhMCkubGluZSwgKGwgfHwgKGwgPSBbXSkpLnB1c2goZSk7XG4gICAgICAgIHJldHVybiBsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gV2EoZSwgbikge1xuICAgICAgICB2YXIgbCA9IEZlKGUsIG4pLCBhID0gT24obCk7XG4gICAgICAgIHJldHVybiBsID09IGEgPyBuIDogc3QoYSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB0dShlLCBuKSB7XG4gICAgICAgIGlmIChuID4gZS5sYXN0TGluZSgpKVxuICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICB2YXIgbCA9IEZlKGUsIG4pLCBhO1xuICAgICAgICBpZiAoIWdyKGUsIGwpKVxuICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICBmb3IgKDsgYSA9IExvKGwpOyApXG4gICAgICAgICAgbCA9IGEuZmluZCgxLCAhMCkubGluZTtcbiAgICAgICAgcmV0dXJuIHN0KGwpICsgMTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGdyKGUsIG4pIHtcbiAgICAgICAgdmFyIGwgPSBlciAmJiBuLm1hcmtlZFNwYW5zO1xuICAgICAgICBpZiAobCkge1xuICAgICAgICAgIGZvciAodmFyIGEgPSB2b2lkIDAsIHUgPSAwOyB1IDwgbC5sZW5ndGg7ICsrdSlcbiAgICAgICAgICAgIGlmIChhID0gbFt1XSwgISFhLm1hcmtlci5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgaWYgKGEuZnJvbSA9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgaWYgKCFhLm1hcmtlci53aWRnZXROb2RlICYmIGEuZnJvbSA9PSAwICYmIGEubWFya2VyLmluY2x1c2l2ZUxlZnQgJiYgR2EoZSwgbiwgYSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBHYShlLCBuLCBsKSB7XG4gICAgICAgIGlmIChsLnRvID09IG51bGwpIHtcbiAgICAgICAgICB2YXIgYSA9IGwubWFya2VyLmZpbmQoMSwgITApO1xuICAgICAgICAgIHJldHVybiBHYShlLCBhLmxpbmUsIFBpKGEubGluZS5tYXJrZWRTcGFucywgbC5tYXJrZXIpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobC5tYXJrZXIuaW5jbHVzaXZlUmlnaHQgJiYgbC50byA9PSBuLnRleHQubGVuZ3RoKVxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgZm9yICh2YXIgdSA9IHZvaWQgMCwgZyA9IDA7IGcgPCBuLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytnKVxuICAgICAgICAgIGlmICh1ID0gbi5tYXJrZWRTcGFuc1tnXSwgdS5tYXJrZXIuY29sbGFwc2VkICYmICF1Lm1hcmtlci53aWRnZXROb2RlICYmIHUuZnJvbSA9PSBsLnRvICYmICh1LnRvID09IG51bGwgfHwgdS50byAhPSBsLmZyb20pICYmICh1Lm1hcmtlci5pbmNsdXNpdmVMZWZ0IHx8IGwubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSAmJiBHYShlLCBuLCB1KSlcbiAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHRyKGUpIHtcbiAgICAgICAgZSA9IE9uKGUpO1xuICAgICAgICBmb3IgKHZhciBuID0gMCwgbCA9IGUucGFyZW50LCBhID0gMDsgYSA8IGwubGluZXMubGVuZ3RoOyArK2EpIHtcbiAgICAgICAgICB2YXIgdSA9IGwubGluZXNbYV07XG4gICAgICAgICAgaWYgKHUgPT0gZSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIG4gKz0gdS5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgZyA9IGwucGFyZW50OyBnOyBsID0gZywgZyA9IGwucGFyZW50KVxuICAgICAgICAgIGZvciAodmFyIE8gPSAwOyBPIDwgZy5jaGlsZHJlbi5sZW5ndGg7ICsrTykge1xuICAgICAgICAgICAgdmFyIEwgPSBnLmNoaWxkcmVuW09dO1xuICAgICAgICAgICAgaWYgKEwgPT0gbClcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBuICs9IEwuaGVpZ2h0O1xuICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG47XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBCbyhlKSB7XG4gICAgICAgIGlmIChlLmhlaWdodCA9PSAwKVxuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBmb3IgKHZhciBuID0gZS50ZXh0Lmxlbmd0aCwgbCwgYSA9IGU7IGwgPSBfcyhhKTsgKSB7XG4gICAgICAgICAgdmFyIHUgPSBsLmZpbmQoMCwgITApO1xuICAgICAgICAgIGEgPSB1LmZyb20ubGluZSwgbiArPSB1LmZyb20uY2ggLSB1LnRvLmNoO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoYSA9IGU7IGwgPSBMbyhhKTsgKSB7XG4gICAgICAgICAgdmFyIGcgPSBsLmZpbmQoMCwgITApO1xuICAgICAgICAgIG4gLT0gYS50ZXh0Lmxlbmd0aCAtIGcuZnJvbS5jaCwgYSA9IGcudG8ubGluZSwgbiArPSBhLnRleHQubGVuZ3RoIC0gZy50by5jaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFFhKGUpIHtcbiAgICAgICAgdmFyIG4gPSBlLmRpc3BsYXksIGwgPSBlLmRvYztcbiAgICAgICAgbi5tYXhMaW5lID0gRmUobCwgbC5maXJzdCksIG4ubWF4TGluZUxlbmd0aCA9IEJvKG4ubWF4TGluZSksIG4ubWF4TGluZUNoYW5nZWQgPSAhMCwgbC5pdGVyKGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICB2YXIgdSA9IEJvKGEpO1xuICAgICAgICAgIHUgPiBuLm1heExpbmVMZW5ndGggJiYgKG4ubWF4TGluZUxlbmd0aCA9IHUsIG4ubWF4TGluZSA9IGEpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHZhciBxciA9IGZ1bmN0aW9uKGUsIG4sIGwpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gZSwgWnModGhpcywgbiksIHRoaXMuaGVpZ2h0ID0gbCA/IGwodGhpcykgOiAxO1xuICAgICAgfTtcbiAgICAgIHFyLnByb3RvdHlwZS5saW5lTm8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHN0KHRoaXMpO1xuICAgICAgfSwgbXQocXIpO1xuICAgICAgZnVuY3Rpb24gSWMoZSwgbiwgbCwgYSkge1xuICAgICAgICBlLnRleHQgPSBuLCBlLnN0YXRlQWZ0ZXIgJiYgKGUuc3RhdGVBZnRlciA9IG51bGwpLCBlLnN0eWxlcyAmJiAoZS5zdHlsZXMgPSBudWxsKSwgZS5vcmRlciAhPSBudWxsICYmIChlLm9yZGVyID0gbnVsbCksIEpzKGUpLCBacyhlLCBsKTtcbiAgICAgICAgdmFyIHUgPSBhID8gYShlKSA6IDE7XG4gICAgICAgIHUgIT0gZS5oZWlnaHQgJiYgRG4oZSwgdSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBOYyhlKSB7XG4gICAgICAgIGUucGFyZW50ID0gbnVsbCwgSnMoZSk7XG4gICAgICB9XG4gICAgICB2YXIgT2MgPSB7fSwgUGMgPSB7fTtcbiAgICAgIGZ1bmN0aW9uIG51KGUsIG4pIHtcbiAgICAgICAgaWYgKCFlIHx8IC9eXFxzKiQvLnRlc3QoZSkpXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHZhciBsID0gbi5hZGRNb2RlQ2xhc3MgPyBQYyA6IE9jO1xuICAgICAgICByZXR1cm4gbFtlXSB8fCAobFtlXSA9IGUucmVwbGFjZSgvXFxTKy9nLCBcImNtLSQmXCIpKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHJ1KGUsIG4pIHtcbiAgICAgICAgdmFyIGwgPSBWKFwic3BhblwiLCBudWxsLCBudWxsLCBiID8gXCJwYWRkaW5nLXJpZ2h0OiAuMXB4XCIgOiBudWxsKSwgYSA9IHtcbiAgICAgICAgICBwcmU6IFYoXCJwcmVcIiwgW2xdLCBcIkNvZGVNaXJyb3ItbGluZVwiKSxcbiAgICAgICAgICBjb250ZW50OiBsLFxuICAgICAgICAgIGNvbDogMCxcbiAgICAgICAgICBwb3M6IDAsXG4gICAgICAgICAgY206IGUsXG4gICAgICAgICAgdHJhaWxpbmdTcGFjZTogITEsXG4gICAgICAgICAgc3BsaXRTcGFjZXM6IGUuZ2V0T3B0aW9uKFwibGluZVdyYXBwaW5nXCIpXG4gICAgICAgIH07XG4gICAgICAgIG4ubWVhc3VyZSA9IHt9O1xuICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8PSAobi5yZXN0ID8gbi5yZXN0Lmxlbmd0aCA6IDApOyB1KyspIHtcbiAgICAgICAgICB2YXIgZyA9IHUgPyBuLnJlc3RbdSAtIDFdIDogbi5saW5lLCBPID0gdm9pZCAwO1xuICAgICAgICAgIGEucG9zID0gMCwgYS5hZGRUb2tlbiA9IExjLCBEbyhlLmRpc3BsYXkubWVhc3VyZSkgJiYgKE8gPSBVZShnLCBlLmRvYy5kaXJlY3Rpb24pKSAmJiAoYS5hZGRUb2tlbiA9IEhjKGEuYWRkVG9rZW4sIE8pKSwgYS5tYXAgPSBbXTtcbiAgICAgICAgICB2YXIgTCA9IG4gIT0gZS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgJiYgc3QoZyk7XG4gICAgICAgICAgJGMoZywgYSwgenMoZSwgZywgTCkpLCBnLnN0eWxlQ2xhc3NlcyAmJiAoZy5zdHlsZUNsYXNzZXMuYmdDbGFzcyAmJiAoYS5iZ0NsYXNzID0gWihnLnN0eWxlQ2xhc3Nlcy5iZ0NsYXNzLCBhLmJnQ2xhc3MgfHwgXCJcIikpLCBnLnN0eWxlQ2xhc3Nlcy50ZXh0Q2xhc3MgJiYgKGEudGV4dENsYXNzID0gWihnLnN0eWxlQ2xhc3Nlcy50ZXh0Q2xhc3MsIGEudGV4dENsYXNzIHx8IFwiXCIpKSksIGEubWFwLmxlbmd0aCA9PSAwICYmIGEubWFwLnB1c2goMCwgMCwgYS5jb250ZW50LmFwcGVuZENoaWxkKGthKGUuZGlzcGxheS5tZWFzdXJlKSkpLCB1ID09IDAgPyAobi5tZWFzdXJlLm1hcCA9IGEubWFwLCBuLm1lYXN1cmUuY2FjaGUgPSB7fSkgOiAoKG4ubWVhc3VyZS5tYXBzIHx8IChuLm1lYXN1cmUubWFwcyA9IFtdKSkucHVzaChhLm1hcCksIChuLm1lYXN1cmUuY2FjaGVzIHx8IChuLm1lYXN1cmUuY2FjaGVzID0gW10pKS5wdXNoKHt9KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIpIHtcbiAgICAgICAgICB2YXIgSCA9IGEuY29udGVudC5sYXN0Q2hpbGQ7XG4gICAgICAgICAgKC9cXGJjbS10YWJcXGIvLnRlc3QoSC5jbGFzc05hbWUpIHx8IEgucXVlcnlTZWxlY3RvciAmJiBILnF1ZXJ5U2VsZWN0b3IoXCIuY20tdGFiXCIpKSAmJiAoYS5jb250ZW50LmNsYXNzTmFtZSA9IFwiY20tdGFiLXdyYXAtaGFja1wiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGUoZSwgXCJyZW5kZXJMaW5lXCIsIGUsIG4ubGluZSwgYS5wcmUpLCBhLnByZS5jbGFzc05hbWUgJiYgKGEudGV4dENsYXNzID0gWihhLnByZS5jbGFzc05hbWUsIGEudGV4dENsYXNzIHx8IFwiXCIpKSwgYTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEZjKGUpIHtcbiAgICAgICAgdmFyIG4gPSBJKFwic3BhblwiLCBcIlxcdTIwMjJcIiwgXCJjbS1pbnZhbGlkY2hhclwiKTtcbiAgICAgICAgcmV0dXJuIG4udGl0bGUgPSBcIlxcXFx1XCIgKyBlLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLCBuLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgbi50aXRsZSksIG47XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBMYyhlLCBuLCBsLCBhLCB1LCBnLCBPKSB7XG4gICAgICAgIGlmICghIW4pIHtcbiAgICAgICAgICB2YXIgTCA9IGUuc3BsaXRTcGFjZXMgPyBCYyhuLCBlLnRyYWlsaW5nU3BhY2UpIDogbiwgSCA9IGUuY20uc3RhdGUuc3BlY2lhbENoYXJzLCBVID0gITEsIEc7XG4gICAgICAgICAgaWYgKCFILnRlc3QobikpXG4gICAgICAgICAgICBlLmNvbCArPSBuLmxlbmd0aCwgRyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKEwpLCBlLm1hcC5wdXNoKGUucG9zLCBlLnBvcyArIG4ubGVuZ3RoLCBHKSwgcCAmJiB2IDwgOSAmJiAoVSA9ICEwKSwgZS5wb3MgKz0gbi5sZW5ndGg7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBHID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICAgICAgZm9yICh2YXIgWSA9IDA7IDsgKSB7XG4gICAgICAgICAgICAgIEgubGFzdEluZGV4ID0gWTtcbiAgICAgICAgICAgICAgdmFyIGVlID0gSC5leGVjKG4pLCBfID0gZWUgPyBlZS5pbmRleCAtIFkgOiBuLmxlbmd0aCAtIFk7XG4gICAgICAgICAgICAgIGlmIChfKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoTC5zbGljZShZLCBZICsgXykpO1xuICAgICAgICAgICAgICAgIHAgJiYgdiA8IDkgPyBHLmFwcGVuZENoaWxkKEkoXCJzcGFuXCIsIFthZV0pKSA6IEcuYXBwZW5kQ2hpbGQoYWUpLCBlLm1hcC5wdXNoKGUucG9zLCBlLnBvcyArIF8sIGFlKSwgZS5jb2wgKz0gXywgZS5wb3MgKz0gXztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIWVlKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBZICs9IF8gKyAxO1xuICAgICAgICAgICAgICB2YXIgY2UgPSB2b2lkIDA7XG4gICAgICAgICAgICAgIGlmIChlZVswXSA9PSBcIlx0XCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgeWUgPSBlLmNtLm9wdGlvbnMudGFiU2l6ZSwgQ2UgPSB5ZSAtIGUuY29sICUgeWU7XG4gICAgICAgICAgICAgICAgY2UgPSBHLmFwcGVuZENoaWxkKEkoXCJzcGFuXCIsIHl0KENlKSwgXCJjbS10YWJcIikpLCBjZS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwicHJlc2VudGF0aW9uXCIpLCBjZS5zZXRBdHRyaWJ1dGUoXCJjbS10ZXh0XCIsIFwiXHRcIiksIGUuY29sICs9IENlO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBlZVswXSA9PSBcIlxcclwiIHx8IGVlWzBdID09IGBcbmAgPyAoY2UgPSBHLmFwcGVuZENoaWxkKEkoXCJzcGFuXCIsIGVlWzBdID09IFwiXFxyXCIgPyBcIlxcdTI0MERcIiA6IFwiXFx1MjQyNFwiLCBcImNtLWludmFsaWRjaGFyXCIpKSwgY2Uuc2V0QXR0cmlidXRlKFwiY20tdGV4dFwiLCBlZVswXSksIGUuY29sICs9IDEpIDogKGNlID0gZS5jbS5vcHRpb25zLnNwZWNpYWxDaGFyUGxhY2Vob2xkZXIoZWVbMF0pLCBjZS5zZXRBdHRyaWJ1dGUoXCJjbS10ZXh0XCIsIGVlWzBdKSwgcCAmJiB2IDwgOSA/IEcuYXBwZW5kQ2hpbGQoSShcInNwYW5cIiwgW2NlXSkpIDogRy5hcHBlbmRDaGlsZChjZSksIGUuY29sICs9IDEpO1xuICAgICAgICAgICAgICBlLm1hcC5wdXNoKGUucG9zLCBlLnBvcyArIDEsIGNlKSwgZS5wb3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGUudHJhaWxpbmdTcGFjZSA9IEwuY2hhckNvZGVBdChuLmxlbmd0aCAtIDEpID09IDMyLCBsIHx8IGEgfHwgdSB8fCBVIHx8IGcgfHwgTykge1xuICAgICAgICAgICAgdmFyIFRlID0gbCB8fCBcIlwiO1xuICAgICAgICAgICAgYSAmJiAoVGUgKz0gYSksIHUgJiYgKFRlICs9IHUpO1xuICAgICAgICAgICAgdmFyIEVlID0gSShcInNwYW5cIiwgW0ddLCBUZSwgZyk7XG4gICAgICAgICAgICBpZiAoTylcbiAgICAgICAgICAgICAgZm9yICh2YXIgTmUgaW4gTylcbiAgICAgICAgICAgICAgICBPLmhhc093blByb3BlcnR5KE5lKSAmJiBOZSAhPSBcInN0eWxlXCIgJiYgTmUgIT0gXCJjbGFzc1wiICYmIEVlLnNldEF0dHJpYnV0ZShOZSwgT1tOZV0pO1xuICAgICAgICAgICAgcmV0dXJuIGUuY29udGVudC5hcHBlbmRDaGlsZChFZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGUuY29udGVudC5hcHBlbmRDaGlsZChHKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gQmMoZSwgbikge1xuICAgICAgICBpZiAoZS5sZW5ndGggPiAxICYmICEvICAvLnRlc3QoZSkpXG4gICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgIGZvciAodmFyIGwgPSBuLCBhID0gXCJcIiwgdSA9IDA7IHUgPCBlLmxlbmd0aDsgdSsrKSB7XG4gICAgICAgICAgdmFyIGcgPSBlLmNoYXJBdCh1KTtcbiAgICAgICAgICBnID09IFwiIFwiICYmIGwgJiYgKHUgPT0gZS5sZW5ndGggLSAxIHx8IGUuY2hhckNvZGVBdCh1ICsgMSkgPT0gMzIpICYmIChnID0gXCJcXHhBMFwiKSwgYSArPSBnLCBsID0gZyA9PSBcIiBcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEhjKGUsIG4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGwsIGEsIHUsIGcsIE8sIEwsIEgpIHtcbiAgICAgICAgICB1ID0gdSA/IHUgKyBcIiBjbS1mb3JjZS1ib3JkZXJcIiA6IFwiY20tZm9yY2UtYm9yZGVyXCI7XG4gICAgICAgICAgZm9yICh2YXIgVSA9IGwucG9zLCBHID0gVSArIGEubGVuZ3RoOyA7ICkge1xuICAgICAgICAgICAgZm9yICh2YXIgWSA9IHZvaWQgMCwgZWUgPSAwOyBlZSA8IG4ubGVuZ3RoICYmIChZID0gbltlZV0sICEoWS50byA+IFUgJiYgWS5mcm9tIDw9IFUpKTsgZWUrKylcbiAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgaWYgKFkudG8gPj0gRylcbiAgICAgICAgICAgICAgcmV0dXJuIGUobCwgYSwgdSwgZywgTywgTCwgSCk7XG4gICAgICAgICAgICBlKGwsIGEuc2xpY2UoMCwgWS50byAtIFUpLCB1LCBnLCBudWxsLCBMLCBIKSwgZyA9IG51bGwsIGEgPSBhLnNsaWNlKFkudG8gLSBVKSwgVSA9IFkudG87XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gaXUoZSwgbiwgbCwgYSkge1xuICAgICAgICB2YXIgdSA9ICFhICYmIGwud2lkZ2V0Tm9kZTtcbiAgICAgICAgdSAmJiBlLm1hcC5wdXNoKGUucG9zLCBlLnBvcyArIG4sIHUpLCAhYSAmJiBlLmNtLmRpc3BsYXkuaW5wdXQubmVlZHNDb250ZW50QXR0cmlidXRlICYmICh1IHx8ICh1ID0gZS5jb250ZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpKSksIHUuc2V0QXR0cmlidXRlKFwiY20tbWFya2VyXCIsIGwuaWQpKSwgdSAmJiAoZS5jbS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUodSksIGUuY29udGVudC5hcHBlbmRDaGlsZCh1KSksIGUucG9zICs9IG4sIGUudHJhaWxpbmdTcGFjZSA9ICExO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gJGMoZSwgbiwgbCkge1xuICAgICAgICB2YXIgYSA9IGUubWFya2VkU3BhbnMsIHUgPSBlLnRleHQsIGcgPSAwO1xuICAgICAgICBpZiAoIWEpIHtcbiAgICAgICAgICBmb3IgKHZhciBPID0gMTsgTyA8IGwubGVuZ3RoOyBPICs9IDIpXG4gICAgICAgICAgICBuLmFkZFRva2VuKG4sIHUuc2xpY2UoZywgZyA9IGxbT10pLCBudShsW08gKyAxXSwgbi5jbS5vcHRpb25zKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIEwgPSB1Lmxlbmd0aCwgSCA9IDAsIFUgPSAxLCBHID0gXCJcIiwgWSwgZWUsIF8gPSAwLCBhZSwgY2UsIHllLCBDZSwgVGU7IDsgKSB7XG4gICAgICAgICAgaWYgKF8gPT0gSCkge1xuICAgICAgICAgICAgYWUgPSBjZSA9IHllID0gZWUgPSBcIlwiLCBUZSA9IG51bGwsIENlID0gbnVsbCwgXyA9IDEgLyAwO1xuICAgICAgICAgICAgZm9yICh2YXIgRWUgPSBbXSwgTmUgPSB2b2lkIDAsIGtlID0gMDsga2UgPCBhLmxlbmd0aDsgKytrZSkge1xuICAgICAgICAgICAgICB2YXIgSGUgPSBhW2tlXSwgWGUgPSBIZS5tYXJrZXI7XG4gICAgICAgICAgICAgIGlmIChYZS50eXBlID09IFwiYm9va21hcmtcIiAmJiBIZS5mcm9tID09IEggJiYgWGUud2lkZ2V0Tm9kZSlcbiAgICAgICAgICAgICAgICBFZS5wdXNoKFhlKTtcbiAgICAgICAgICAgICAgZWxzZSBpZiAoSGUuZnJvbSA8PSBIICYmIChIZS50byA9PSBudWxsIHx8IEhlLnRvID4gSCB8fCBYZS5jb2xsYXBzZWQgJiYgSGUudG8gPT0gSCAmJiBIZS5mcm9tID09IEgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKEhlLnRvICE9IG51bGwgJiYgSGUudG8gIT0gSCAmJiBfID4gSGUudG8gJiYgKF8gPSBIZS50bywgY2UgPSBcIlwiKSwgWGUuY2xhc3NOYW1lICYmIChhZSArPSBcIiBcIiArIFhlLmNsYXNzTmFtZSksIFhlLmNzcyAmJiAoZWUgPSAoZWUgPyBlZSArIFwiO1wiIDogXCJcIikgKyBYZS5jc3MpLCBYZS5zdGFydFN0eWxlICYmIEhlLmZyb20gPT0gSCAmJiAoeWUgKz0gXCIgXCIgKyBYZS5zdGFydFN0eWxlKSwgWGUuZW5kU3R5bGUgJiYgSGUudG8gPT0gXyAmJiAoTmUgfHwgKE5lID0gW10pKS5wdXNoKFhlLmVuZFN0eWxlLCBIZS50byksIFhlLnRpdGxlICYmICgoVGUgfHwgKFRlID0ge30pKS50aXRsZSA9IFhlLnRpdGxlKSwgWGUuYXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIHZ0IGluIFhlLmF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgICAgIChUZSB8fCAoVGUgPSB7fSkpW3Z0XSA9IFhlLmF0dHJpYnV0ZXNbdnRdO1xuICAgICAgICAgICAgICAgIFhlLmNvbGxhcHNlZCAmJiAoIUNlIHx8IFZhKENlLm1hcmtlciwgWGUpIDwgMCkgJiYgKENlID0gSGUpO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBIZS5mcm9tID4gSCAmJiBfID4gSGUuZnJvbSAmJiAoXyA9IEhlLmZyb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE5lKVxuICAgICAgICAgICAgICBmb3IgKHZhciBqdCA9IDA7IGp0IDwgTmUubGVuZ3RoOyBqdCArPSAyKVxuICAgICAgICAgICAgICAgIE5lW2p0ICsgMV0gPT0gXyAmJiAoY2UgKz0gXCIgXCIgKyBOZVtqdF0pO1xuICAgICAgICAgICAgaWYgKCFDZSB8fCBDZS5mcm9tID09IEgpXG4gICAgICAgICAgICAgIGZvciAodmFyIEN0ID0gMDsgQ3QgPCBFZS5sZW5ndGg7ICsrQ3QpXG4gICAgICAgICAgICAgICAgaXUobiwgMCwgRWVbQ3RdKTtcbiAgICAgICAgICAgIGlmIChDZSAmJiAoQ2UuZnJvbSB8fCAwKSA9PSBIKSB7XG4gICAgICAgICAgICAgIGlmIChpdShcbiAgICAgICAgICAgICAgICBuLFxuICAgICAgICAgICAgICAgIChDZS50byA9PSBudWxsID8gTCArIDEgOiBDZS50bykgLSBILFxuICAgICAgICAgICAgICAgIENlLm1hcmtlcixcbiAgICAgICAgICAgICAgICBDZS5mcm9tID09IG51bGxcbiAgICAgICAgICAgICAgKSwgQ2UudG8gPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIENlLnRvID09IEggJiYgKENlID0gITEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoSCA+PSBMKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZm9yICh2YXIgY24gPSBNYXRoLm1pbihMLCBfKTsgOyApIHtcbiAgICAgICAgICAgIGlmIChHKSB7XG4gICAgICAgICAgICAgIHZhciBybiA9IEggKyBHLmxlbmd0aDtcbiAgICAgICAgICAgICAgaWYgKCFDZSkge1xuICAgICAgICAgICAgICAgIHZhciBJdCA9IHJuID4gY24gPyBHLnNsaWNlKDAsIGNuIC0gSCkgOiBHO1xuICAgICAgICAgICAgICAgIG4uYWRkVG9rZW4oXG4gICAgICAgICAgICAgICAgICBuLFxuICAgICAgICAgICAgICAgICAgSXQsXG4gICAgICAgICAgICAgICAgICBZID8gWSArIGFlIDogYWUsXG4gICAgICAgICAgICAgICAgICB5ZSxcbiAgICAgICAgICAgICAgICAgIEggKyBJdC5sZW5ndGggPT0gXyA/IGNlIDogXCJcIixcbiAgICAgICAgICAgICAgICAgIGVlLFxuICAgICAgICAgICAgICAgICAgVGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChybiA+PSBjbikge1xuICAgICAgICAgICAgICAgIEcgPSBHLnNsaWNlKGNuIC0gSCksIEggPSBjbjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBIID0gcm4sIHllID0gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEcgPSB1LnNsaWNlKGcsIGcgPSBsW1UrK10pLCBZID0gbnUobFtVKytdLCBuLmNtLm9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gb3UoZSwgbiwgbCkge1xuICAgICAgICB0aGlzLmxpbmUgPSBuLCB0aGlzLnJlc3QgPSBNYyhuKSwgdGhpcy5zaXplID0gdGhpcy5yZXN0ID8gc3QoQmUodGhpcy5yZXN0KSkgLSBsICsgMSA6IDEsIHRoaXMubm9kZSA9IHRoaXMudGV4dCA9IG51bGwsIHRoaXMuaGlkZGVuID0gZ3IoZSwgbik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBIbyhlLCBuLCBsKSB7XG4gICAgICAgIGZvciAodmFyIGEgPSBbXSwgdSwgZyA9IG47IGcgPCBsOyBnID0gdSkge1xuICAgICAgICAgIHZhciBPID0gbmV3IG91KGUuZG9jLCBGZShlLmRvYywgZyksIGcpO1xuICAgICAgICAgIHUgPSBnICsgTy5zaXplLCBhLnB1c2goTyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9XG4gICAgICB2YXIgX3IgPSBudWxsO1xuICAgICAgZnVuY3Rpb24ga2MoZSkge1xuICAgICAgICBfciA/IF9yLm9wcy5wdXNoKGUpIDogZS5vd25zR3JvdXAgPSBfciA9IHtcbiAgICAgICAgICBvcHM6IFtlXSxcbiAgICAgICAgICBkZWxheWVkQ2FsbGJhY2tzOiBbXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gamMoZSkge1xuICAgICAgICB2YXIgbiA9IGUuZGVsYXllZENhbGxiYWNrcywgbCA9IDA7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBmb3IgKDsgbCA8IG4ubGVuZ3RoOyBsKyspXG4gICAgICAgICAgICBuW2xdLmNhbGwobnVsbCk7XG4gICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBlLm9wcy5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgdmFyIHUgPSBlLm9wc1thXTtcbiAgICAgICAgICAgIGlmICh1LmN1cnNvckFjdGl2aXR5SGFuZGxlcnMpXG4gICAgICAgICAgICAgIGZvciAoOyB1LmN1cnNvckFjdGl2aXR5Q2FsbGVkIDwgdS5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzLmxlbmd0aDsgKVxuICAgICAgICAgICAgICAgIHUuY3Vyc29yQWN0aXZpdHlIYW5kbGVyc1t1LmN1cnNvckFjdGl2aXR5Q2FsbGVkKytdLmNhbGwobnVsbCwgdS5jbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChsIDwgbi5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gVWMoZSwgbikge1xuICAgICAgICB2YXIgbCA9IGUub3duc0dyb3VwO1xuICAgICAgICBpZiAoISFsKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBqYyhsKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgX3IgPSBudWxsLCBuKGwpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBGaSA9IG51bGw7XG4gICAgICBmdW5jdGlvbiBIdChlLCBuKSB7XG4gICAgICAgIHZhciBsID0gTGUoZSwgbik7XG4gICAgICAgIGlmICghIWwubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGEgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLCB1O1xuICAgICAgICAgIF9yID8gdSA9IF9yLmRlbGF5ZWRDYWxsYmFja3MgOiBGaSA/IHUgPSBGaSA6ICh1ID0gRmkgPSBbXSwgc2V0VGltZW91dCh6YywgMCkpO1xuICAgICAgICAgIGZvciAodmFyIGcgPSBmdW5jdGlvbihMKSB7XG4gICAgICAgICAgICB1LnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiBsW0xdLmFwcGx5KG51bGwsIGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgTyA9IDA7IE8gPCBsLmxlbmd0aDsgKytPKVxuICAgICAgICAgICAgZyhPKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gemMoKSB7XG4gICAgICAgIHZhciBlID0gRmk7XG4gICAgICAgIEZpID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLmxlbmd0aDsgKytuKVxuICAgICAgICAgIGVbbl0oKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGF1KGUsIG4sIGwsIGEpIHtcbiAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCBuLmNoYW5nZXMubGVuZ3RoOyB1KyspIHtcbiAgICAgICAgICB2YXIgZyA9IG4uY2hhbmdlc1t1XTtcbiAgICAgICAgICBnID09IFwidGV4dFwiID8gV2MoZSwgbikgOiBnID09IFwiZ3V0dGVyXCIgPyBzdShlLCBuLCBsLCBhKSA6IGcgPT0gXCJjbGFzc1wiID8gWWEoZSwgbikgOiBnID09IFwid2lkZ2V0XCIgJiYgR2MoZSwgbiwgYSk7XG4gICAgICAgIH1cbiAgICAgICAgbi5jaGFuZ2VzID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIExpKGUpIHtcbiAgICAgICAgcmV0dXJuIGUubm9kZSA9PSBlLnRleHQgJiYgKGUubm9kZSA9IEkoXCJkaXZcIiwgbnVsbCwgbnVsbCwgXCJwb3NpdGlvbjogcmVsYXRpdmVcIiksIGUudGV4dC5wYXJlbnROb2RlICYmIGUudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlLm5vZGUsIGUudGV4dCksIGUubm9kZS5hcHBlbmRDaGlsZChlLnRleHQpLCBwICYmIHYgPCA4ICYmIChlLm5vZGUuc3R5bGUuekluZGV4ID0gMikpLCBlLm5vZGU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBWYyhlLCBuKSB7XG4gICAgICAgIHZhciBsID0gbi5iZ0NsYXNzID8gbi5iZ0NsYXNzICsgXCIgXCIgKyAobi5saW5lLmJnQ2xhc3MgfHwgXCJcIikgOiBuLmxpbmUuYmdDbGFzcztcbiAgICAgICAgaWYgKGwgJiYgKGwgKz0gXCIgQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZFwiKSwgbi5iYWNrZ3JvdW5kKVxuICAgICAgICAgIGwgPyBuLmJhY2tncm91bmQuY2xhc3NOYW1lID0gbCA6IChuLmJhY2tncm91bmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuLmJhY2tncm91bmQpLCBuLmJhY2tncm91bmQgPSBudWxsKTtcbiAgICAgICAgZWxzZSBpZiAobCkge1xuICAgICAgICAgIHZhciBhID0gTGkobik7XG4gICAgICAgICAgbi5iYWNrZ3JvdW5kID0gYS5pbnNlcnRCZWZvcmUoSShcImRpdlwiLCBudWxsLCBsKSwgYS5maXJzdENoaWxkKSwgZS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUobi5iYWNrZ3JvdW5kKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbHUoZSwgbikge1xuICAgICAgICB2YXIgbCA9IGUuZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkO1xuICAgICAgICByZXR1cm4gbCAmJiBsLmxpbmUgPT0gbi5saW5lID8gKGUuZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbnVsbCwgbi5tZWFzdXJlID0gbC5tZWFzdXJlLCBsLmJ1aWx0KSA6IHJ1KGUsIG4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gV2MoZSwgbikge1xuICAgICAgICB2YXIgbCA9IG4udGV4dC5jbGFzc05hbWUsIGEgPSBsdShlLCBuKTtcbiAgICAgICAgbi50ZXh0ID09IG4ubm9kZSAmJiAobi5ub2RlID0gYS5wcmUpLCBuLnRleHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYS5wcmUsIG4udGV4dCksIG4udGV4dCA9IGEucHJlLCBhLmJnQ2xhc3MgIT0gbi5iZ0NsYXNzIHx8IGEudGV4dENsYXNzICE9IG4udGV4dENsYXNzID8gKG4uYmdDbGFzcyA9IGEuYmdDbGFzcywgbi50ZXh0Q2xhc3MgPSBhLnRleHRDbGFzcywgWWEoZSwgbikpIDogbCAmJiAobi50ZXh0LmNsYXNzTmFtZSA9IGwpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gWWEoZSwgbikge1xuICAgICAgICBWYyhlLCBuKSwgbi5saW5lLndyYXBDbGFzcyA/IExpKG4pLmNsYXNzTmFtZSA9IG4ubGluZS53cmFwQ2xhc3MgOiBuLm5vZGUgIT0gbi50ZXh0ICYmIChuLm5vZGUuY2xhc3NOYW1lID0gXCJcIik7XG4gICAgICAgIHZhciBsID0gbi50ZXh0Q2xhc3MgPyBuLnRleHRDbGFzcyArIFwiIFwiICsgKG4ubGluZS50ZXh0Q2xhc3MgfHwgXCJcIikgOiBuLmxpbmUudGV4dENsYXNzO1xuICAgICAgICBuLnRleHQuY2xhc3NOYW1lID0gbCB8fCBcIlwiO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gc3UoZSwgbiwgbCwgYSkge1xuICAgICAgICBpZiAobi5ndXR0ZXIgJiYgKG4ubm9kZS5yZW1vdmVDaGlsZChuLmd1dHRlciksIG4uZ3V0dGVyID0gbnVsbCksIG4uZ3V0dGVyQmFja2dyb3VuZCAmJiAobi5ub2RlLnJlbW92ZUNoaWxkKG4uZ3V0dGVyQmFja2dyb3VuZCksIG4uZ3V0dGVyQmFja2dyb3VuZCA9IG51bGwpLCBuLmxpbmUuZ3V0dGVyQ2xhc3MpIHtcbiAgICAgICAgICB2YXIgdSA9IExpKG4pO1xuICAgICAgICAgIG4uZ3V0dGVyQmFja2dyb3VuZCA9IEkoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIFwiQ29kZU1pcnJvci1ndXR0ZXItYmFja2dyb3VuZCBcIiArIG4ubGluZS5ndXR0ZXJDbGFzcyxcbiAgICAgICAgICAgIFwibGVmdDogXCIgKyAoZS5vcHRpb25zLmZpeGVkR3V0dGVyID8gYS5maXhlZFBvcyA6IC1hLmd1dHRlclRvdGFsV2lkdGgpICsgXCJweDsgd2lkdGg6IFwiICsgYS5ndXR0ZXJUb3RhbFdpZHRoICsgXCJweFwiXG4gICAgICAgICAgKSwgZS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUobi5ndXR0ZXJCYWNrZ3JvdW5kKSwgdS5pbnNlcnRCZWZvcmUobi5ndXR0ZXJCYWNrZ3JvdW5kLCBuLnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBnID0gbi5saW5lLmd1dHRlck1hcmtlcnM7XG4gICAgICAgIGlmIChlLm9wdGlvbnMubGluZU51bWJlcnMgfHwgZykge1xuICAgICAgICAgIHZhciBPID0gTGkobiksIEwgPSBuLmd1dHRlciA9IEkoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWd1dHRlci13cmFwcGVyXCIsIFwibGVmdDogXCIgKyAoZS5vcHRpb25zLmZpeGVkR3V0dGVyID8gYS5maXhlZFBvcyA6IC1hLmd1dHRlclRvdGFsV2lkdGgpICsgXCJweFwiKTtcbiAgICAgICAgICBpZiAoTC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiLCBcInRydWVcIiksIGUuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKEwpLCBPLmluc2VydEJlZm9yZShMLCBuLnRleHQpLCBuLmxpbmUuZ3V0dGVyQ2xhc3MgJiYgKEwuY2xhc3NOYW1lICs9IFwiIFwiICsgbi5saW5lLmd1dHRlckNsYXNzKSwgZS5vcHRpb25zLmxpbmVOdW1iZXJzICYmICghZyB8fCAhZ1tcIkNvZGVNaXJyb3ItbGluZW51bWJlcnNcIl0pICYmIChuLmxpbmVOdW1iZXIgPSBMLmFwcGVuZENoaWxkKFxuICAgICAgICAgICAgSShcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgSyhlLm9wdGlvbnMsIGwpLFxuICAgICAgICAgICAgICBcIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHRcIixcbiAgICAgICAgICAgICAgXCJsZWZ0OiBcIiArIGEuZ3V0dGVyTGVmdFtcIkNvZGVNaXJyb3ItbGluZW51bWJlcnNcIl0gKyBcInB4OyB3aWR0aDogXCIgKyBlLmRpc3BsYXkubGluZU51bUlubmVyV2lkdGggKyBcInB4XCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICApKSwgZylcbiAgICAgICAgICAgIGZvciAodmFyIEggPSAwOyBIIDwgZS5kaXNwbGF5Lmd1dHRlclNwZWNzLmxlbmd0aDsgKytIKSB7XG4gICAgICAgICAgICAgIHZhciBVID0gZS5kaXNwbGF5Lmd1dHRlclNwZWNzW0hdLmNsYXNzTmFtZSwgRyA9IGcuaGFzT3duUHJvcGVydHkoVSkgJiYgZ1tVXTtcbiAgICAgICAgICAgICAgRyAmJiBMLmFwcGVuZENoaWxkKEkoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICBbR10sXG4gICAgICAgICAgICAgICAgXCJDb2RlTWlycm9yLWd1dHRlci1lbHRcIixcbiAgICAgICAgICAgICAgICBcImxlZnQ6IFwiICsgYS5ndXR0ZXJMZWZ0W1VdICsgXCJweDsgd2lkdGg6IFwiICsgYS5ndXR0ZXJXaWR0aFtVXSArIFwicHhcIlxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gR2MoZSwgbiwgbCkge1xuICAgICAgICBuLmFsaWduYWJsZSAmJiAobi5hbGlnbmFibGUgPSBudWxsKTtcbiAgICAgICAgZm9yICh2YXIgYSA9IGgoXCJDb2RlTWlycm9yLWxpbmV3aWRnZXRcIiksIHUgPSBuLm5vZGUuZmlyc3RDaGlsZCwgZyA9IHZvaWQgMDsgdTsgdSA9IGcpXG4gICAgICAgICAgZyA9IHUubmV4dFNpYmxpbmcsIGEudGVzdCh1LmNsYXNzTmFtZSkgJiYgbi5ub2RlLnJlbW92ZUNoaWxkKHUpO1xuICAgICAgICB1dShlLCBuLCBsKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFFjKGUsIG4sIGwsIGEpIHtcbiAgICAgICAgdmFyIHUgPSBsdShlLCBuKTtcbiAgICAgICAgcmV0dXJuIG4udGV4dCA9IG4ubm9kZSA9IHUucHJlLCB1LmJnQ2xhc3MgJiYgKG4uYmdDbGFzcyA9IHUuYmdDbGFzcyksIHUudGV4dENsYXNzICYmIChuLnRleHRDbGFzcyA9IHUudGV4dENsYXNzKSwgWWEoZSwgbiksIHN1KGUsIG4sIGwsIGEpLCB1dShlLCBuLCBhKSwgbi5ub2RlO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdXUoZSwgbiwgbCkge1xuICAgICAgICBpZiAoZnUoZSwgbi5saW5lLCBuLCBsLCAhMCksIG4ucmVzdClcbiAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IG4ucmVzdC5sZW5ndGg7IGErKylcbiAgICAgICAgICAgIGZ1KGUsIG4ucmVzdFthXSwgbiwgbCwgITEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZnUoZSwgbiwgbCwgYSwgdSkge1xuICAgICAgICBpZiAoISFuLndpZGdldHMpXG4gICAgICAgICAgZm9yICh2YXIgZyA9IExpKGwpLCBPID0gMCwgTCA9IG4ud2lkZ2V0czsgTyA8IEwubGVuZ3RoOyArK08pIHtcbiAgICAgICAgICAgIHZhciBIID0gTFtPXSwgVSA9IEkoXCJkaXZcIiwgW0gubm9kZV0sIFwiQ29kZU1pcnJvci1saW5ld2lkZ2V0XCIgKyAoSC5jbGFzc05hbWUgPyBcIiBcIiArIEguY2xhc3NOYW1lIDogXCJcIikpO1xuICAgICAgICAgICAgSC5oYW5kbGVNb3VzZUV2ZW50cyB8fCBVLnNldEF0dHJpYnV0ZShcImNtLWlnbm9yZS1ldmVudHNcIiwgXCJ0cnVlXCIpLCBZYyhILCBVLCBsLCBhKSwgZS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUoVSksIHUgJiYgSC5hYm92ZSA/IGcuaW5zZXJ0QmVmb3JlKFUsIGwuZ3V0dGVyIHx8IGwudGV4dCkgOiBnLmFwcGVuZENoaWxkKFUpLCBIdChILCBcInJlZHJhd1wiKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBZYyhlLCBuLCBsLCBhKSB7XG4gICAgICAgIGlmIChlLm5vSFNjcm9sbCkge1xuICAgICAgICAgIChsLmFsaWduYWJsZSB8fCAobC5hbGlnbmFibGUgPSBbXSkpLnB1c2gobik7XG4gICAgICAgICAgdmFyIHUgPSBhLndyYXBwZXJXaWR0aDtcbiAgICAgICAgICBuLnN0eWxlLmxlZnQgPSBhLmZpeGVkUG9zICsgXCJweFwiLCBlLmNvdmVyR3V0dGVyIHx8ICh1IC09IGEuZ3V0dGVyVG90YWxXaWR0aCwgbi5zdHlsZS5wYWRkaW5nTGVmdCA9IGEuZ3V0dGVyVG90YWxXaWR0aCArIFwicHhcIiksIG4uc3R5bGUud2lkdGggPSB1ICsgXCJweFwiO1xuICAgICAgICB9XG4gICAgICAgIGUuY292ZXJHdXR0ZXIgJiYgKG4uc3R5bGUuekluZGV4ID0gNSwgbi5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIiwgZS5ub0hTY3JvbGwgfHwgKG4uc3R5bGUubWFyZ2luTGVmdCA9IC1hLmd1dHRlclRvdGFsV2lkdGggKyBcInB4XCIpKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEJpKGUpIHtcbiAgICAgICAgaWYgKGUuaGVpZ2h0ICE9IG51bGwpXG4gICAgICAgICAgcmV0dXJuIGUuaGVpZ2h0O1xuICAgICAgICB2YXIgbiA9IGUuZG9jLmNtO1xuICAgICAgICBpZiAoIW4pXG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGlmICghUShkb2N1bWVudC5ib2R5LCBlLm5vZGUpKSB7XG4gICAgICAgICAgdmFyIGwgPSBcInBvc2l0aW9uOiByZWxhdGl2ZTtcIjtcbiAgICAgICAgICBlLmNvdmVyR3V0dGVyICYmIChsICs9IFwibWFyZ2luLWxlZnQ6IC1cIiArIG4uZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoICsgXCJweDtcIiksIGUubm9IU2Nyb2xsICYmIChsICs9IFwid2lkdGg6IFwiICsgbi5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGggKyBcInB4O1wiKSwgaihuLmRpc3BsYXkubWVhc3VyZSwgSShcImRpdlwiLCBbZS5ub2RlXSwgbnVsbCwgbCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlLmhlaWdodCA9IGUubm9kZS5wYXJlbnROb2RlLm9mZnNldEhlaWdodDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG5yKGUsIG4pIHtcbiAgICAgICAgZm9yICh2YXIgbCA9IGVuKG4pOyBsICE9IGUud3JhcHBlcjsgbCA9IGwucGFyZW50Tm9kZSlcbiAgICAgICAgICBpZiAoIWwgfHwgbC5ub2RlVHlwZSA9PSAxICYmIGwuZ2V0QXR0cmlidXRlKFwiY20taWdub3JlLWV2ZW50c1wiKSA9PSBcInRydWVcIiB8fCBsLnBhcmVudE5vZGUgPT0gZS5zaXplciAmJiBsICE9IGUubW92ZXIpXG4gICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiAkbyhlKSB7XG4gICAgICAgIHJldHVybiBlLmxpbmVTcGFjZS5vZmZzZXRUb3A7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBLYShlKSB7XG4gICAgICAgIHJldHVybiBlLm1vdmVyLm9mZnNldEhlaWdodCAtIGUubGluZVNwYWNlLm9mZnNldEhlaWdodDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGR1KGUpIHtcbiAgICAgICAgaWYgKGUuY2FjaGVkUGFkZGluZ0gpXG4gICAgICAgICAgcmV0dXJuIGUuY2FjaGVkUGFkZGluZ0g7XG4gICAgICAgIHZhciBuID0gaihlLm1lYXN1cmUsIEkoXCJwcmVcIiwgXCJ4XCIsIFwiQ29kZU1pcnJvci1saW5lLWxpa2VcIikpLCBsID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUgPyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShuKSA6IG4uY3VycmVudFN0eWxlLCBhID0geyBsZWZ0OiBwYXJzZUludChsLnBhZGRpbmdMZWZ0KSwgcmlnaHQ6IHBhcnNlSW50KGwucGFkZGluZ1JpZ2h0KSB9O1xuICAgICAgICByZXR1cm4gIWlzTmFOKGEubGVmdCkgJiYgIWlzTmFOKGEucmlnaHQpICYmIChlLmNhY2hlZFBhZGRpbmdIID0gYSksIGE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBXbihlKSB7XG4gICAgICAgIHJldHVybiBnZSAtIGUuZGlzcGxheS5uYXRpdmVCYXJXaWR0aDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFByKGUpIHtcbiAgICAgICAgcmV0dXJuIGUuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCAtIFduKGUpIC0gZS5kaXNwbGF5LmJhcldpZHRoO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gWGEoZSkge1xuICAgICAgICByZXR1cm4gZS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCAtIFduKGUpIC0gZS5kaXNwbGF5LmJhckhlaWdodDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEtjKGUsIG4sIGwpIHtcbiAgICAgICAgdmFyIGEgPSBlLm9wdGlvbnMubGluZVdyYXBwaW5nLCB1ID0gYSAmJiBQcihlKTtcbiAgICAgICAgaWYgKCFuLm1lYXN1cmUuaGVpZ2h0cyB8fCBhICYmIG4ubWVhc3VyZS53aWR0aCAhPSB1KSB7XG4gICAgICAgICAgdmFyIGcgPSBuLm1lYXN1cmUuaGVpZ2h0cyA9IFtdO1xuICAgICAgICAgIGlmIChhKSB7XG4gICAgICAgICAgICBuLm1lYXN1cmUud2lkdGggPSB1O1xuICAgICAgICAgICAgZm9yICh2YXIgTyA9IG4udGV4dC5maXJzdENoaWxkLmdldENsaWVudFJlY3RzKCksIEwgPSAwOyBMIDwgTy5sZW5ndGggLSAxOyBMKyspIHtcbiAgICAgICAgICAgICAgdmFyIEggPSBPW0xdLCBVID0gT1tMICsgMV07XG4gICAgICAgICAgICAgIE1hdGguYWJzKEguYm90dG9tIC0gVS5ib3R0b20pID4gMiAmJiBnLnB1c2goKEguYm90dG9tICsgVS50b3ApIC8gMiAtIGwudG9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZy5wdXNoKGwuYm90dG9tIC0gbC50b3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjdShlLCBuLCBsKSB7XG4gICAgICAgIGlmIChlLmxpbmUgPT0gbilcbiAgICAgICAgICByZXR1cm4geyBtYXA6IGUubWVhc3VyZS5tYXAsIGNhY2hlOiBlLm1lYXN1cmUuY2FjaGUgfTtcbiAgICAgICAgaWYgKGUucmVzdCkge1xuICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgZS5yZXN0Lmxlbmd0aDsgYSsrKVxuICAgICAgICAgICAgaWYgKGUucmVzdFthXSA9PSBuKVxuICAgICAgICAgICAgICByZXR1cm4geyBtYXA6IGUubWVhc3VyZS5tYXBzW2FdLCBjYWNoZTogZS5tZWFzdXJlLmNhY2hlc1thXSB9O1xuICAgICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgZS5yZXN0Lmxlbmd0aDsgdSsrKVxuICAgICAgICAgICAgaWYgKHN0KGUucmVzdFt1XSkgPiBsKVxuICAgICAgICAgICAgICByZXR1cm4geyBtYXA6IGUubWVhc3VyZS5tYXBzW3VdLCBjYWNoZTogZS5tZWFzdXJlLmNhY2hlc1t1XSwgYmVmb3JlOiAhMCB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBYYyhlLCBuKSB7XG4gICAgICAgIG4gPSBPbihuKTtcbiAgICAgICAgdmFyIGwgPSBzdChuKSwgYSA9IGUuZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbmV3IG91KGUuZG9jLCBuLCBsKTtcbiAgICAgICAgYS5saW5lTiA9IGw7XG4gICAgICAgIHZhciB1ID0gYS5idWlsdCA9IHJ1KGUsIGEpO1xuICAgICAgICByZXR1cm4gYS50ZXh0ID0gdS5wcmUsIGooZS5kaXNwbGF5LmxpbmVNZWFzdXJlLCB1LnByZSksIGE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwdShlLCBuLCBsLCBhKSB7XG4gICAgICAgIHJldHVybiBHbihlLCBlaShlLCBuKSwgbCwgYSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBKYShlLCBuKSB7XG4gICAgICAgIGlmIChuID49IGUuZGlzcGxheS52aWV3RnJvbSAmJiBuIDwgZS5kaXNwbGF5LnZpZXdUbylcbiAgICAgICAgICByZXR1cm4gZS5kaXNwbGF5LnZpZXdbQnIoZSwgbildO1xuICAgICAgICB2YXIgbCA9IGUuZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkO1xuICAgICAgICBpZiAobCAmJiBuID49IGwubGluZU4gJiYgbiA8IGwubGluZU4gKyBsLnNpemUpXG4gICAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBlaShlLCBuKSB7XG4gICAgICAgIHZhciBsID0gc3QobiksIGEgPSBKYShlLCBsKTtcbiAgICAgICAgYSAmJiAhYS50ZXh0ID8gYSA9IG51bGwgOiBhICYmIGEuY2hhbmdlcyAmJiAoYXUoZSwgYSwgbCwgdGwoZSkpLCBlLmN1ck9wLmZvcmNlVXBkYXRlID0gITApLCBhIHx8IChhID0gWGMoZSwgbikpO1xuICAgICAgICB2YXIgdSA9IGN1KGEsIG4sIGwpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmU6IG4sXG4gICAgICAgICAgdmlldzogYSxcbiAgICAgICAgICByZWN0OiBudWxsLFxuICAgICAgICAgIG1hcDogdS5tYXAsXG4gICAgICAgICAgY2FjaGU6IHUuY2FjaGUsXG4gICAgICAgICAgYmVmb3JlOiB1LmJlZm9yZSxcbiAgICAgICAgICBoYXNIZWlnaHRzOiAhMVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gR24oZSwgbiwgbCwgYSwgdSkge1xuICAgICAgICBuLmJlZm9yZSAmJiAobCA9IC0xKTtcbiAgICAgICAgdmFyIGcgPSBsICsgKGEgfHwgXCJcIiksIE87XG4gICAgICAgIHJldHVybiBuLmNhY2hlLmhhc093blByb3BlcnR5KGcpID8gTyA9IG4uY2FjaGVbZ10gOiAobi5yZWN0IHx8IChuLnJlY3QgPSBuLnZpZXcudGV4dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksIG4uaGFzSGVpZ2h0cyB8fCAoS2MoZSwgbi52aWV3LCBuLnJlY3QpLCBuLmhhc0hlaWdodHMgPSAhMCksIE8gPSBaYyhlLCBuLCBsLCBhKSwgTy5ib2d1cyB8fCAobi5jYWNoZVtnXSA9IE8pKSwge1xuICAgICAgICAgIGxlZnQ6IE8ubGVmdCxcbiAgICAgICAgICByaWdodDogTy5yaWdodCxcbiAgICAgICAgICB0b3A6IHUgPyBPLnJ0b3AgOiBPLnRvcCxcbiAgICAgICAgICBib3R0b206IHUgPyBPLnJib3R0b20gOiBPLmJvdHRvbVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIGh1ID0geyBsZWZ0OiAwLCByaWdodDogMCwgdG9wOiAwLCBib3R0b206IDAgfTtcbiAgICAgIGZ1bmN0aW9uIHZ1KGUsIG4sIGwpIHtcbiAgICAgICAgZm9yICh2YXIgYSwgdSwgZywgTywgTCwgSCwgVSA9IDA7IFUgPCBlLmxlbmd0aDsgVSArPSAzKVxuICAgICAgICAgIGlmIChMID0gZVtVXSwgSCA9IGVbVSArIDFdLCBuIDwgTCA/ICh1ID0gMCwgZyA9IDEsIE8gPSBcImxlZnRcIikgOiBuIDwgSCA/ICh1ID0gbiAtIEwsIGcgPSB1ICsgMSkgOiAoVSA9PSBlLmxlbmd0aCAtIDMgfHwgbiA9PSBIICYmIGVbVSArIDNdID4gbikgJiYgKGcgPSBIIC0gTCwgdSA9IGcgLSAxLCBuID49IEggJiYgKE8gPSBcInJpZ2h0XCIpKSwgdSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoYSA9IGVbVSArIDJdLCBMID09IEggJiYgbCA9PSAoYS5pbnNlcnRMZWZ0ID8gXCJsZWZ0XCIgOiBcInJpZ2h0XCIpICYmIChPID0gbCksIGwgPT0gXCJsZWZ0XCIgJiYgdSA9PSAwKVxuICAgICAgICAgICAgICBmb3IgKDsgVSAmJiBlW1UgLSAyXSA9PSBlW1UgLSAzXSAmJiBlW1UgLSAxXS5pbnNlcnRMZWZ0OyApXG4gICAgICAgICAgICAgICAgYSA9IGVbKFUgLT0gMykgKyAyXSwgTyA9IFwibGVmdFwiO1xuICAgICAgICAgICAgaWYgKGwgPT0gXCJyaWdodFwiICYmIHUgPT0gSCAtIEwpXG4gICAgICAgICAgICAgIGZvciAoOyBVIDwgZS5sZW5ndGggLSAzICYmIGVbVSArIDNdID09IGVbVSArIDRdICYmICFlW1UgKyA1XS5pbnNlcnRMZWZ0OyApXG4gICAgICAgICAgICAgICAgYSA9IGVbKFUgKz0gMykgKyAyXSwgTyA9IFwicmlnaHRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbm9kZTogYSwgc3RhcnQ6IHUsIGVuZDogZywgY29sbGFwc2U6IE8sIGNvdmVyU3RhcnQ6IEwsIGNvdmVyRW5kOiBIIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBKYyhlLCBuKSB7XG4gICAgICAgIHZhciBsID0gaHU7XG4gICAgICAgIGlmIChuID09IFwibGVmdFwiKVxuICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgZS5sZW5ndGggJiYgKGwgPSBlW2FdKS5sZWZ0ID09IGwucmlnaHQ7IGErKylcbiAgICAgICAgICAgIDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGZvciAodmFyIHUgPSBlLmxlbmd0aCAtIDE7IHUgPj0gMCAmJiAobCA9IGVbdV0pLmxlZnQgPT0gbC5yaWdodDsgdS0tKVxuICAgICAgICAgICAgO1xuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFpjKGUsIG4sIGwsIGEpIHtcbiAgICAgICAgdmFyIHUgPSB2dShuLm1hcCwgbCwgYSksIGcgPSB1Lm5vZGUsIE8gPSB1LnN0YXJ0LCBMID0gdS5lbmQsIEggPSB1LmNvbGxhcHNlLCBVO1xuICAgICAgICBpZiAoZy5ub2RlVHlwZSA9PSAzKSB7XG4gICAgICAgICAgZm9yICh2YXIgRyA9IDA7IEcgPCA0OyBHKyspIHtcbiAgICAgICAgICAgIGZvciAoOyBPICYmIHhuKG4ubGluZS50ZXh0LmNoYXJBdCh1LmNvdmVyU3RhcnQgKyBPKSk7IClcbiAgICAgICAgICAgICAgLS1PO1xuICAgICAgICAgICAgZm9yICg7IHUuY292ZXJTdGFydCArIEwgPCB1LmNvdmVyRW5kICYmIHhuKG4ubGluZS50ZXh0LmNoYXJBdCh1LmNvdmVyU3RhcnQgKyBMKSk7IClcbiAgICAgICAgICAgICAgKytMO1xuICAgICAgICAgICAgaWYgKHAgJiYgdiA8IDkgJiYgTyA9PSAwICYmIEwgPT0gdS5jb3ZlckVuZCAtIHUuY292ZXJTdGFydCA/IFUgPSBnLnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOiBVID0gSmMoVyhnLCBPLCBMKS5nZXRDbGllbnRSZWN0cygpLCBhKSwgVS5sZWZ0IHx8IFUucmlnaHQgfHwgTyA9PSAwKVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIEwgPSBPLCBPID0gTyAtIDEsIEggPSBcInJpZ2h0XCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHAgJiYgdiA8IDExICYmIChVID0gcWMoZS5kaXNwbGF5Lm1lYXN1cmUsIFUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPID4gMCAmJiAoSCA9IGEgPSBcInJpZ2h0XCIpO1xuICAgICAgICAgIHZhciBZO1xuICAgICAgICAgIGUub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgKFkgPSBnLmdldENsaWVudFJlY3RzKCkpLmxlbmd0aCA+IDEgPyBVID0gWVthID09IFwicmlnaHRcIiA/IFkubGVuZ3RoIC0gMSA6IDBdIDogVSA9IGcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHAgJiYgdiA8IDkgJiYgIU8gJiYgKCFVIHx8ICFVLmxlZnQgJiYgIVUucmlnaHQpKSB7XG4gICAgICAgICAgdmFyIGVlID0gZy5wYXJlbnROb2RlLmdldENsaWVudFJlY3RzKClbMF07XG4gICAgICAgICAgZWUgPyBVID0geyBsZWZ0OiBlZS5sZWZ0LCByaWdodDogZWUubGVmdCArIG5pKGUuZGlzcGxheSksIHRvcDogZWUudG9wLCBib3R0b206IGVlLmJvdHRvbSB9IDogVSA9IGh1O1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIF8gPSBVLnRvcCAtIG4ucmVjdC50b3AsIGFlID0gVS5ib3R0b20gLSBuLnJlY3QudG9wLCBjZSA9IChfICsgYWUpIC8gMiwgeWUgPSBuLnZpZXcubWVhc3VyZS5oZWlnaHRzLCBDZSA9IDA7IENlIDwgeWUubGVuZ3RoIC0gMSAmJiAhKGNlIDwgeWVbQ2VdKTsgQ2UrKylcbiAgICAgICAgICA7XG4gICAgICAgIHZhciBUZSA9IENlID8geWVbQ2UgLSAxXSA6IDAsIEVlID0geWVbQ2VdLCBOZSA9IHtcbiAgICAgICAgICBsZWZ0OiAoSCA9PSBcInJpZ2h0XCIgPyBVLnJpZ2h0IDogVS5sZWZ0KSAtIG4ucmVjdC5sZWZ0LFxuICAgICAgICAgIHJpZ2h0OiAoSCA9PSBcImxlZnRcIiA/IFUubGVmdCA6IFUucmlnaHQpIC0gbi5yZWN0LmxlZnQsXG4gICAgICAgICAgdG9wOiBUZSxcbiAgICAgICAgICBib3R0b206IEVlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiAhVS5sZWZ0ICYmICFVLnJpZ2h0ICYmIChOZS5ib2d1cyA9ICEwKSwgZS5vcHRpb25zLnNpbmdsZUN1cnNvckhlaWdodFBlckxpbmUgfHwgKE5lLnJ0b3AgPSBfLCBOZS5yYm90dG9tID0gYWUpLCBOZTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHFjKGUsIG4pIHtcbiAgICAgICAgaWYgKCF3aW5kb3cuc2NyZWVuIHx8IHNjcmVlbi5sb2dpY2FsWERQSSA9PSBudWxsIHx8IHNjcmVlbi5sb2dpY2FsWERQSSA9PSBzY3JlZW4uZGV2aWNlWERQSSB8fCAhUm8oZSkpXG4gICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIHZhciBsID0gc2NyZWVuLmxvZ2ljYWxYRFBJIC8gc2NyZWVuLmRldmljZVhEUEksIGEgPSBzY3JlZW4ubG9naWNhbFlEUEkgLyBzY3JlZW4uZGV2aWNlWURQSTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsZWZ0OiBuLmxlZnQgKiBsLFxuICAgICAgICAgIHJpZ2h0OiBuLnJpZ2h0ICogbCxcbiAgICAgICAgICB0b3A6IG4udG9wICogYSxcbiAgICAgICAgICBib3R0b206IG4uYm90dG9tICogYVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbXUoZSkge1xuICAgICAgICBpZiAoZS5tZWFzdXJlICYmIChlLm1lYXN1cmUuY2FjaGUgPSB7fSwgZS5tZWFzdXJlLmhlaWdodHMgPSBudWxsLCBlLnJlc3QpKVxuICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgZS5yZXN0Lmxlbmd0aDsgbisrKVxuICAgICAgICAgICAgZS5tZWFzdXJlLmNhY2hlc1tuXSA9IHt9O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZ3UoZSkge1xuICAgICAgICBlLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlID0gbnVsbCwgUChlLmRpc3BsYXkubGluZU1lYXN1cmUpO1xuICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGUuZGlzcGxheS52aWV3Lmxlbmd0aDsgbisrKVxuICAgICAgICAgIG11KGUuZGlzcGxheS52aWV3W25dKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEhpKGUpIHtcbiAgICAgICAgZ3UoZSksIGUuZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggPSBlLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCA9IGUuZGlzcGxheS5jYWNoZWRQYWRkaW5nSCA9IG51bGwsIGUub3B0aW9ucy5saW5lV3JhcHBpbmcgfHwgKGUuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9ICEwKSwgZS5kaXNwbGF5LmxpbmVOdW1DaGFycyA9IG51bGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB5dShlKSB7XG4gICAgICAgIHJldHVybiBEICYmIEUgPyAtKGUuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShlLmJvZHkpLm1hcmdpbkxlZnQpKSA6IGUuZGVmYXVsdFZpZXcucGFnZVhPZmZzZXQgfHwgKGUuZG9jdW1lbnRFbGVtZW50IHx8IGUuYm9keSkuc2Nyb2xsTGVmdDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEF1KGUpIHtcbiAgICAgICAgcmV0dXJuIEQgJiYgRSA/IC0oZS5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZS5ib2R5KS5tYXJnaW5Ub3ApKSA6IGUuZGVmYXVsdFZpZXcucGFnZVlPZmZzZXQgfHwgKGUuZG9jdW1lbnRFbGVtZW50IHx8IGUuYm9keSkuc2Nyb2xsVG9wO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gWmEoZSkge1xuICAgICAgICB2YXIgbiA9IE9uKGUpLCBsID0gbi53aWRnZXRzLCBhID0gMDtcbiAgICAgICAgaWYgKGwpXG4gICAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCBsLmxlbmd0aDsgKyt1KVxuICAgICAgICAgICAgbFt1XS5hYm92ZSAmJiAoYSArPSBCaShsW3VdKSk7XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24ga28oZSwgbiwgbCwgYSwgdSkge1xuICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICB2YXIgZyA9IFphKG4pO1xuICAgICAgICAgIGwudG9wICs9IGcsIGwuYm90dG9tICs9IGc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEgPT0gXCJsaW5lXCIpXG4gICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgIGEgfHwgKGEgPSBcImxvY2FsXCIpO1xuICAgICAgICB2YXIgTyA9IHRyKG4pO1xuICAgICAgICBpZiAoYSA9PSBcImxvY2FsXCIgPyBPICs9ICRvKGUuZGlzcGxheSkgOiBPIC09IGUuZGlzcGxheS52aWV3T2Zmc2V0LCBhID09IFwicGFnZVwiIHx8IGEgPT0gXCJ3aW5kb3dcIikge1xuICAgICAgICAgIHZhciBMID0gZS5kaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBPICs9IEwudG9wICsgKGEgPT0gXCJ3aW5kb3dcIiA/IDAgOiBBdSh2ZShlKSkpO1xuICAgICAgICAgIHZhciBIID0gTC5sZWZ0ICsgKGEgPT0gXCJ3aW5kb3dcIiA/IDAgOiB5dSh2ZShlKSkpO1xuICAgICAgICAgIGwubGVmdCArPSBILCBsLnJpZ2h0ICs9IEg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGwudG9wICs9IE8sIGwuYm90dG9tICs9IE8sIGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBidShlLCBuLCBsKSB7XG4gICAgICAgIGlmIChsID09IFwiZGl2XCIpXG4gICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIHZhciBhID0gbi5sZWZ0LCB1ID0gbi50b3A7XG4gICAgICAgIGlmIChsID09IFwicGFnZVwiKVxuICAgICAgICAgIGEgLT0geXUodmUoZSkpLCB1IC09IEF1KHZlKGUpKTtcbiAgICAgICAgZWxzZSBpZiAobCA9PSBcImxvY2FsXCIgfHwgIWwpIHtcbiAgICAgICAgICB2YXIgZyA9IGUuZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBhICs9IGcubGVmdCwgdSArPSBnLnRvcDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgTyA9IGUuZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiB7IGxlZnQ6IGEgLSBPLmxlZnQsIHRvcDogdSAtIE8udG9wIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBqbyhlLCBuLCBsLCBhLCB1KSB7XG4gICAgICAgIHJldHVybiBhIHx8IChhID0gRmUoZS5kb2MsIG4ubGluZSkpLCBrbyhlLCBhLCBwdShlLCBhLCBuLmNoLCB1KSwgbCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBQbihlLCBuLCBsLCBhLCB1LCBnKSB7XG4gICAgICAgIGEgPSBhIHx8IEZlKGUuZG9jLCBuLmxpbmUpLCB1IHx8ICh1ID0gZWkoZSwgYSkpO1xuICAgICAgICBmdW5jdGlvbiBPKGFlLCBjZSkge1xuICAgICAgICAgIHZhciB5ZSA9IEduKGUsIHUsIGFlLCBjZSA/IFwicmlnaHRcIiA6IFwibGVmdFwiLCBnKTtcbiAgICAgICAgICByZXR1cm4gY2UgPyB5ZS5sZWZ0ID0geWUucmlnaHQgOiB5ZS5yaWdodCA9IHllLmxlZnQsIGtvKGUsIGEsIHllLCBsKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgTCA9IFVlKGEsIGUuZG9jLmRpcmVjdGlvbiksIEggPSBuLmNoLCBVID0gbi5zdGlja3k7XG4gICAgICAgIGlmIChIID49IGEudGV4dC5sZW5ndGggPyAoSCA9IGEudGV4dC5sZW5ndGgsIFUgPSBcImJlZm9yZVwiKSA6IEggPD0gMCAmJiAoSCA9IDAsIFUgPSBcImFmdGVyXCIpLCAhTClcbiAgICAgICAgICByZXR1cm4gTyhVID09IFwiYmVmb3JlXCIgPyBIIC0gMSA6IEgsIFUgPT0gXCJiZWZvcmVcIik7XG4gICAgICAgIGZ1bmN0aW9uIEcoYWUsIGNlLCB5ZSkge1xuICAgICAgICAgIHZhciBDZSA9IExbY2VdLCBUZSA9IENlLmxldmVsID09IDE7XG4gICAgICAgICAgcmV0dXJuIE8oeWUgPyBhZSAtIDEgOiBhZSwgVGUgIT0geWUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBZID0gRGUoTCwgSCwgVSksIGVlID0gcWUsIF8gPSBHKEgsIFksIFUgPT0gXCJiZWZvcmVcIik7XG4gICAgICAgIHJldHVybiBlZSAhPSBudWxsICYmIChfLm90aGVyID0gRyhILCBlZSwgVSAhPSBcImJlZm9yZVwiKSksIF87XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBDdShlLCBuKSB7XG4gICAgICAgIHZhciBsID0gMDtcbiAgICAgICAgbiA9IFZlKGUuZG9jLCBuKSwgZS5vcHRpb25zLmxpbmVXcmFwcGluZyB8fCAobCA9IG5pKGUuZGlzcGxheSkgKiBuLmNoKTtcbiAgICAgICAgdmFyIGEgPSBGZShlLmRvYywgbi5saW5lKSwgdSA9IHRyKGEpICsgJG8oZS5kaXNwbGF5KTtcbiAgICAgICAgcmV0dXJuIHsgbGVmdDogbCwgcmlnaHQ6IGwsIHRvcDogdSwgYm90dG9tOiB1ICsgYS5oZWlnaHQgfTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHFhKGUsIG4sIGwsIGEsIHUpIHtcbiAgICAgICAgdmFyIGcgPSBxKGUsIG4sIGwpO1xuICAgICAgICByZXR1cm4gZy54UmVsID0gdSwgYSAmJiAoZy5vdXRzaWRlID0gYSksIGc7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfYShlLCBuLCBsKSB7XG4gICAgICAgIHZhciBhID0gZS5kb2M7XG4gICAgICAgIGlmIChsICs9IGUuZGlzcGxheS52aWV3T2Zmc2V0LCBsIDwgMClcbiAgICAgICAgICByZXR1cm4gcWEoYS5maXJzdCwgMCwgbnVsbCwgLTEsIC0xKTtcbiAgICAgICAgdmFyIHUgPSB6bihhLCBsKSwgZyA9IGEuZmlyc3QgKyBhLnNpemUgLSAxO1xuICAgICAgICBpZiAodSA+IGcpXG4gICAgICAgICAgcmV0dXJuIHFhKGEuZmlyc3QgKyBhLnNpemUgLSAxLCBGZShhLCBnKS50ZXh0Lmxlbmd0aCwgbnVsbCwgMSwgMSk7XG4gICAgICAgIG4gPCAwICYmIChuID0gMCk7XG4gICAgICAgIGZvciAodmFyIE8gPSBGZShhLCB1KTsgOyApIHtcbiAgICAgICAgICB2YXIgTCA9IF9jKGUsIE8sIHUsIG4sIGwpLCBIID0gRGMoTywgTC5jaCArIChMLnhSZWwgPiAwIHx8IEwub3V0c2lkZSA+IDAgPyAxIDogMCkpO1xuICAgICAgICAgIGlmICghSClcbiAgICAgICAgICAgIHJldHVybiBMO1xuICAgICAgICAgIHZhciBVID0gSC5maW5kKDEpO1xuICAgICAgICAgIGlmIChVLmxpbmUgPT0gdSlcbiAgICAgICAgICAgIHJldHVybiBVO1xuICAgICAgICAgIE8gPSBGZShhLCB1ID0gVS5saW5lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gRXUoZSwgbiwgbCwgYSkge1xuICAgICAgICBhIC09IFphKG4pO1xuICAgICAgICB2YXIgdSA9IG4udGV4dC5sZW5ndGgsIGcgPSBhdChmdW5jdGlvbihPKSB7XG4gICAgICAgICAgcmV0dXJuIEduKGUsIGwsIE8gLSAxKS5ib3R0b20gPD0gYTtcbiAgICAgICAgfSwgdSwgMCk7XG4gICAgICAgIHJldHVybiB1ID0gYXQoZnVuY3Rpb24oTykge1xuICAgICAgICAgIHJldHVybiBHbihlLCBsLCBPKS50b3AgPiBhO1xuICAgICAgICB9LCBnLCB1KSwgeyBiZWdpbjogZywgZW5kOiB1IH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBTdShlLCBuLCBsLCBhKSB7XG4gICAgICAgIGwgfHwgKGwgPSBlaShlLCBuKSk7XG4gICAgICAgIHZhciB1ID0ga28oZSwgbiwgR24oZSwgbCwgYSksIFwibGluZVwiKS50b3A7XG4gICAgICAgIHJldHVybiBFdShlLCBuLCBsLCB1KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGVsKGUsIG4sIGwsIGEpIHtcbiAgICAgICAgcmV0dXJuIGUuYm90dG9tIDw9IGwgPyAhMSA6IGUudG9wID4gbCA/ICEwIDogKGEgPyBlLmxlZnQgOiBlLnJpZ2h0KSA+IG47XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfYyhlLCBuLCBsLCBhLCB1KSB7XG4gICAgICAgIHUgLT0gdHIobik7XG4gICAgICAgIHZhciBnID0gZWkoZSwgbiksIE8gPSBaYShuKSwgTCA9IDAsIEggPSBuLnRleHQubGVuZ3RoLCBVID0gITAsIEcgPSBVZShuLCBlLmRvYy5kaXJlY3Rpb24pO1xuICAgICAgICBpZiAoRykge1xuICAgICAgICAgIHZhciBZID0gKGUub3B0aW9ucy5saW5lV3JhcHBpbmcgPyB0cCA6IGVwKShlLCBuLCBsLCBnLCBHLCBhLCB1KTtcbiAgICAgICAgICBVID0gWS5sZXZlbCAhPSAxLCBMID0gVSA/IFkuZnJvbSA6IFkudG8gLSAxLCBIID0gVSA/IFkudG8gOiBZLmZyb20gLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlZSA9IG51bGwsIF8gPSBudWxsLCBhZSA9IGF0KGZ1bmN0aW9uKGtlKSB7XG4gICAgICAgICAgdmFyIEhlID0gR24oZSwgZywga2UpO1xuICAgICAgICAgIHJldHVybiBIZS50b3AgKz0gTywgSGUuYm90dG9tICs9IE8sIGVsKEhlLCBhLCB1LCAhMSkgPyAoSGUudG9wIDw9IHUgJiYgSGUubGVmdCA8PSBhICYmIChlZSA9IGtlLCBfID0gSGUpLCAhMCkgOiAhMTtcbiAgICAgICAgfSwgTCwgSCksIGNlLCB5ZSwgQ2UgPSAhMTtcbiAgICAgICAgaWYgKF8pIHtcbiAgICAgICAgICB2YXIgVGUgPSBhIC0gXy5sZWZ0IDwgXy5yaWdodCAtIGEsIEVlID0gVGUgPT0gVTtcbiAgICAgICAgICBhZSA9IGVlICsgKEVlID8gMCA6IDEpLCB5ZSA9IEVlID8gXCJhZnRlclwiIDogXCJiZWZvcmVcIiwgY2UgPSBUZSA/IF8ubGVmdCA6IF8ucmlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgIVUgJiYgKGFlID09IEggfHwgYWUgPT0gTCkgJiYgYWUrKywgeWUgPSBhZSA9PSAwID8gXCJhZnRlclwiIDogYWUgPT0gbi50ZXh0Lmxlbmd0aCA/IFwiYmVmb3JlXCIgOiBHbihlLCBnLCBhZSAtIChVID8gMSA6IDApKS5ib3R0b20gKyBPIDw9IHUgPT0gVSA/IFwiYWZ0ZXJcIiA6IFwiYmVmb3JlXCI7XG4gICAgICAgICAgdmFyIE5lID0gUG4oZSwgcShsLCBhZSwgeWUpLCBcImxpbmVcIiwgbiwgZyk7XG4gICAgICAgICAgY2UgPSBOZS5sZWZ0LCBDZSA9IHUgPCBOZS50b3AgPyAtMSA6IHUgPj0gTmUuYm90dG9tID8gMSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFlID0gT3Qobi50ZXh0LCBhZSwgMSksIHFhKGwsIGFlLCB5ZSwgQ2UsIGEgLSBjZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBlcChlLCBuLCBsLCBhLCB1LCBnLCBPKSB7XG4gICAgICAgIHZhciBMID0gYXQoZnVuY3Rpb24oWSkge1xuICAgICAgICAgIHZhciBlZSA9IHVbWV0sIF8gPSBlZS5sZXZlbCAhPSAxO1xuICAgICAgICAgIHJldHVybiBlbChQbihcbiAgICAgICAgICAgIGUsXG4gICAgICAgICAgICBxKGwsIF8gPyBlZS50byA6IGVlLmZyb20sIF8gPyBcImJlZm9yZVwiIDogXCJhZnRlclwiKSxcbiAgICAgICAgICAgIFwibGluZVwiLFxuICAgICAgICAgICAgbixcbiAgICAgICAgICAgIGFcbiAgICAgICAgICApLCBnLCBPLCAhMCk7XG4gICAgICAgIH0sIDAsIHUubGVuZ3RoIC0gMSksIEggPSB1W0xdO1xuICAgICAgICBpZiAoTCA+IDApIHtcbiAgICAgICAgICB2YXIgVSA9IEgubGV2ZWwgIT0gMSwgRyA9IFBuKFxuICAgICAgICAgICAgZSxcbiAgICAgICAgICAgIHEobCwgVSA/IEguZnJvbSA6IEgudG8sIFUgPyBcImFmdGVyXCIgOiBcImJlZm9yZVwiKSxcbiAgICAgICAgICAgIFwibGluZVwiLFxuICAgICAgICAgICAgbixcbiAgICAgICAgICAgIGFcbiAgICAgICAgICApO1xuICAgICAgICAgIGVsKEcsIGcsIE8sICEwKSAmJiBHLnRvcCA+IE8gJiYgKEggPSB1W0wgLSAxXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEg7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB0cChlLCBuLCBsLCBhLCB1LCBnLCBPKSB7XG4gICAgICAgIHZhciBMID0gRXUoZSwgbiwgYSwgTyksIEggPSBMLmJlZ2luLCBVID0gTC5lbmQ7XG4gICAgICAgIC9cXHMvLnRlc3Qobi50ZXh0LmNoYXJBdChVIC0gMSkpICYmIFUtLTtcbiAgICAgICAgZm9yICh2YXIgRyA9IG51bGwsIFkgPSBudWxsLCBlZSA9IDA7IGVlIDwgdS5sZW5ndGg7IGVlKyspIHtcbiAgICAgICAgICB2YXIgXyA9IHVbZWVdO1xuICAgICAgICAgIGlmICghKF8uZnJvbSA+PSBVIHx8IF8udG8gPD0gSCkpIHtcbiAgICAgICAgICAgIHZhciBhZSA9IF8ubGV2ZWwgIT0gMSwgY2UgPSBHbihlLCBhLCBhZSA/IE1hdGgubWluKFUsIF8udG8pIC0gMSA6IE1hdGgubWF4KEgsIF8uZnJvbSkpLnJpZ2h0LCB5ZSA9IGNlIDwgZyA/IGcgLSBjZSArIDFlOSA6IGNlIC0gZztcbiAgICAgICAgICAgICghRyB8fCBZID4geWUpICYmIChHID0gXywgWSA9IHllKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEcgfHwgKEcgPSB1W3UubGVuZ3RoIC0gMV0pLCBHLmZyb20gPCBIICYmIChHID0geyBmcm9tOiBILCB0bzogRy50bywgbGV2ZWw6IEcubGV2ZWwgfSksIEcudG8gPiBVICYmIChHID0geyBmcm9tOiBHLmZyb20sIHRvOiBVLCBsZXZlbDogRy5sZXZlbCB9KSwgRztcbiAgICAgIH1cbiAgICAgIHZhciBGcjtcbiAgICAgIGZ1bmN0aW9uIHRpKGUpIHtcbiAgICAgICAgaWYgKGUuY2FjaGVkVGV4dEhlaWdodCAhPSBudWxsKVxuICAgICAgICAgIHJldHVybiBlLmNhY2hlZFRleHRIZWlnaHQ7XG4gICAgICAgIGlmIChGciA9PSBudWxsKSB7XG4gICAgICAgICAgRnIgPSBJKFwicHJlXCIsIG51bGwsIFwiQ29kZU1pcnJvci1saW5lLWxpa2VcIik7XG4gICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCA0OTsgKytuKVxuICAgICAgICAgICAgRnIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJ4XCIpKSwgRnIuYXBwZW5kQ2hpbGQoSShcImJyXCIpKTtcbiAgICAgICAgICBGci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcInhcIikpO1xuICAgICAgICB9XG4gICAgICAgIGooZS5tZWFzdXJlLCBGcik7XG4gICAgICAgIHZhciBsID0gRnIub2Zmc2V0SGVpZ2h0IC8gNTA7XG4gICAgICAgIHJldHVybiBsID4gMyAmJiAoZS5jYWNoZWRUZXh0SGVpZ2h0ID0gbCksIFAoZS5tZWFzdXJlKSwgbCB8fCAxO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbmkoZSkge1xuICAgICAgICBpZiAoZS5jYWNoZWRDaGFyV2lkdGggIT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gZS5jYWNoZWRDaGFyV2lkdGg7XG4gICAgICAgIHZhciBuID0gSShcInNwYW5cIiwgXCJ4eHh4eHh4eHh4XCIpLCBsID0gSShcInByZVwiLCBbbl0sIFwiQ29kZU1pcnJvci1saW5lLWxpa2VcIik7XG4gICAgICAgIGooZS5tZWFzdXJlLCBsKTtcbiAgICAgICAgdmFyIGEgPSBuLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCB1ID0gKGEucmlnaHQgLSBhLmxlZnQpIC8gMTA7XG4gICAgICAgIHJldHVybiB1ID4gMiAmJiAoZS5jYWNoZWRDaGFyV2lkdGggPSB1KSwgdSB8fCAxMDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHRsKGUpIHtcbiAgICAgICAgZm9yICh2YXIgbiA9IGUuZGlzcGxheSwgbCA9IHt9LCBhID0ge30sIHUgPSBuLmd1dHRlcnMuY2xpZW50TGVmdCwgZyA9IG4uZ3V0dGVycy5maXJzdENoaWxkLCBPID0gMDsgZzsgZyA9IGcubmV4dFNpYmxpbmcsICsrTykge1xuICAgICAgICAgIHZhciBMID0gZS5kaXNwbGF5Lmd1dHRlclNwZWNzW09dLmNsYXNzTmFtZTtcbiAgICAgICAgICBsW0xdID0gZy5vZmZzZXRMZWZ0ICsgZy5jbGllbnRMZWZ0ICsgdSwgYVtMXSA9IGcuY2xpZW50V2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmaXhlZFBvczogbmwobiksXG4gICAgICAgICAgZ3V0dGVyVG90YWxXaWR0aDogbi5ndXR0ZXJzLm9mZnNldFdpZHRoLFxuICAgICAgICAgIGd1dHRlckxlZnQ6IGwsXG4gICAgICAgICAgZ3V0dGVyV2lkdGg6IGEsXG4gICAgICAgICAgd3JhcHBlcldpZHRoOiBuLndyYXBwZXIuY2xpZW50V2lkdGhcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG5sKGUpIHtcbiAgICAgICAgcmV0dXJuIGUuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGUuc2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHh1KGUpIHtcbiAgICAgICAgdmFyIG4gPSB0aShlLmRpc3BsYXkpLCBsID0gZS5vcHRpb25zLmxpbmVXcmFwcGluZywgYSA9IGwgJiYgTWF0aC5tYXgoNSwgZS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoIC8gbmkoZS5kaXNwbGF5KSAtIDMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24odSkge1xuICAgICAgICAgIGlmIChncihlLmRvYywgdSkpXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB2YXIgZyA9IDA7XG4gICAgICAgICAgaWYgKHUud2lkZ2V0cylcbiAgICAgICAgICAgIGZvciAodmFyIE8gPSAwOyBPIDwgdS53aWRnZXRzLmxlbmd0aDsgTysrKVxuICAgICAgICAgICAgICB1LndpZGdldHNbT10uaGVpZ2h0ICYmIChnICs9IHUud2lkZ2V0c1tPXS5oZWlnaHQpO1xuICAgICAgICAgIHJldHVybiBsID8gZyArIChNYXRoLmNlaWwodS50ZXh0Lmxlbmd0aCAvIGEpIHx8IDEpICogbiA6IGcgKyBuO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcmwoZSkge1xuICAgICAgICB2YXIgbiA9IGUuZG9jLCBsID0geHUoZSk7XG4gICAgICAgIG4uaXRlcihmdW5jdGlvbihhKSB7XG4gICAgICAgICAgdmFyIHUgPSBsKGEpO1xuICAgICAgICAgIHUgIT0gYS5oZWlnaHQgJiYgRG4oYSwgdSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gTHIoZSwgbiwgbCwgYSkge1xuICAgICAgICB2YXIgdSA9IGUuZGlzcGxheTtcbiAgICAgICAgaWYgKCFsICYmIGVuKG4pLmdldEF0dHJpYnV0ZShcImNtLW5vdC1jb250ZW50XCIpID09IFwidHJ1ZVwiKVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgZywgTywgTCA9IHUubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGcgPSBuLmNsaWVudFggLSBMLmxlZnQsIE8gPSBuLmNsaWVudFkgLSBMLnRvcDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIEggPSBfYShlLCBnLCBPKSwgVTtcbiAgICAgICAgaWYgKGEgJiYgSC54UmVsID4gMCAmJiAoVSA9IEZlKGUuZG9jLCBILmxpbmUpLnRleHQpLmxlbmd0aCA9PSBILmNoKSB7XG4gICAgICAgICAgdmFyIEcgPSBpZShVLCBVLmxlbmd0aCwgZS5vcHRpb25zLnRhYlNpemUpIC0gVS5sZW5ndGg7XG4gICAgICAgICAgSCA9IHEoSC5saW5lLCBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKChnIC0gZHUoZS5kaXNwbGF5KS5sZWZ0KSAvIG5pKGUuZGlzcGxheSkpIC0gRykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBIO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gQnIoZSwgbikge1xuICAgICAgICBpZiAobiA+PSBlLmRpc3BsYXkudmlld1RvIHx8IChuIC09IGUuZGlzcGxheS52aWV3RnJvbSwgbiA8IDApKVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBmb3IgKHZhciBsID0gZS5kaXNwbGF5LnZpZXcsIGEgPSAwOyBhIDwgbC5sZW5ndGg7IGErKylcbiAgICAgICAgICBpZiAobiAtPSBsW2FdLnNpemUsIG4gPCAwKVxuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB0bihlLCBuLCBsLCBhKSB7XG4gICAgICAgIG4gPT0gbnVsbCAmJiAobiA9IGUuZG9jLmZpcnN0KSwgbCA9PSBudWxsICYmIChsID0gZS5kb2MuZmlyc3QgKyBlLmRvYy5zaXplKSwgYSB8fCAoYSA9IDApO1xuICAgICAgICB2YXIgdSA9IGUuZGlzcGxheTtcbiAgICAgICAgaWYgKGEgJiYgbCA8IHUudmlld1RvICYmICh1LnVwZGF0ZUxpbmVOdW1iZXJzID09IG51bGwgfHwgdS51cGRhdGVMaW5lTnVtYmVycyA+IG4pICYmICh1LnVwZGF0ZUxpbmVOdW1iZXJzID0gbiksIGUuY3VyT3Audmlld0NoYW5nZWQgPSAhMCwgbiA+PSB1LnZpZXdUbylcbiAgICAgICAgICBlciAmJiBXYShlLmRvYywgbikgPCB1LnZpZXdUbyAmJiBBcihlKTtcbiAgICAgICAgZWxzZSBpZiAobCA8PSB1LnZpZXdGcm9tKVxuICAgICAgICAgIGVyICYmIHR1KGUuZG9jLCBsICsgYSkgPiB1LnZpZXdGcm9tID8gQXIoZSkgOiAodS52aWV3RnJvbSArPSBhLCB1LnZpZXdUbyArPSBhKTtcbiAgICAgICAgZWxzZSBpZiAobiA8PSB1LnZpZXdGcm9tICYmIGwgPj0gdS52aWV3VG8pXG4gICAgICAgICAgQXIoZSk7XG4gICAgICAgIGVsc2UgaWYgKG4gPD0gdS52aWV3RnJvbSkge1xuICAgICAgICAgIHZhciBnID0gVW8oZSwgbCwgbCArIGEsIDEpO1xuICAgICAgICAgIGcgPyAodS52aWV3ID0gdS52aWV3LnNsaWNlKGcuaW5kZXgpLCB1LnZpZXdGcm9tID0gZy5saW5lTiwgdS52aWV3VG8gKz0gYSkgOiBBcihlKTtcbiAgICAgICAgfSBlbHNlIGlmIChsID49IHUudmlld1RvKSB7XG4gICAgICAgICAgdmFyIE8gPSBVbyhlLCBuLCBuLCAtMSk7XG4gICAgICAgICAgTyA/ICh1LnZpZXcgPSB1LnZpZXcuc2xpY2UoMCwgTy5pbmRleCksIHUudmlld1RvID0gTy5saW5lTikgOiBBcihlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgTCA9IFVvKGUsIG4sIG4sIC0xKSwgSCA9IFVvKGUsIGwsIGwgKyBhLCAxKTtcbiAgICAgICAgICBMICYmIEggPyAodS52aWV3ID0gdS52aWV3LnNsaWNlKDAsIEwuaW5kZXgpLmNvbmNhdChIbyhlLCBMLmxpbmVOLCBILmxpbmVOKSkuY29uY2F0KHUudmlldy5zbGljZShILmluZGV4KSksIHUudmlld1RvICs9IGEpIDogQXIoZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIFUgPSB1LmV4dGVybmFsTWVhc3VyZWQ7XG4gICAgICAgIFUgJiYgKGwgPCBVLmxpbmVOID8gVS5saW5lTiArPSBhIDogbiA8IFUubGluZU4gKyBVLnNpemUgJiYgKHUuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGwpKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHlyKGUsIG4sIGwpIHtcbiAgICAgICAgZS5jdXJPcC52aWV3Q2hhbmdlZCA9ICEwO1xuICAgICAgICB2YXIgYSA9IGUuZGlzcGxheSwgdSA9IGUuZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkO1xuICAgICAgICBpZiAodSAmJiBuID49IHUubGluZU4gJiYgbiA8IHUubGluZU4gKyB1LnNpemUgJiYgKGEuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGwpLCAhKG4gPCBhLnZpZXdGcm9tIHx8IG4gPj0gYS52aWV3VG8pKSB7XG4gICAgICAgICAgdmFyIGcgPSBhLnZpZXdbQnIoZSwgbildO1xuICAgICAgICAgIGlmIChnLm5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIE8gPSBnLmNoYW5nZXMgfHwgKGcuY2hhbmdlcyA9IFtdKTtcbiAgICAgICAgICAgIHRlKE8sIGwpID09IC0xICYmIE8ucHVzaChsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEFyKGUpIHtcbiAgICAgICAgZS5kaXNwbGF5LnZpZXdGcm9tID0gZS5kaXNwbGF5LnZpZXdUbyA9IGUuZG9jLmZpcnN0LCBlLmRpc3BsYXkudmlldyA9IFtdLCBlLmRpc3BsYXkudmlld09mZnNldCA9IDA7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBVbyhlLCBuLCBsLCBhKSB7XG4gICAgICAgIHZhciB1ID0gQnIoZSwgbiksIGcsIE8gPSBlLmRpc3BsYXkudmlldztcbiAgICAgICAgaWYgKCFlciB8fCBsID09IGUuZG9jLmZpcnN0ICsgZS5kb2Muc2l6ZSlcbiAgICAgICAgICByZXR1cm4geyBpbmRleDogdSwgbGluZU46IGwgfTtcbiAgICAgICAgZm9yICh2YXIgTCA9IGUuZGlzcGxheS52aWV3RnJvbSwgSCA9IDA7IEggPCB1OyBIKyspXG4gICAgICAgICAgTCArPSBPW0hdLnNpemU7XG4gICAgICAgIGlmIChMICE9IG4pIHtcbiAgICAgICAgICBpZiAoYSA+IDApIHtcbiAgICAgICAgICAgIGlmICh1ID09IE8ubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBnID0gTCArIE9bdV0uc2l6ZSAtIG4sIHUrKztcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIGcgPSBMIC0gbjtcbiAgICAgICAgICBuICs9IGcsIGwgKz0gZztcbiAgICAgICAgfVxuICAgICAgICBmb3IgKDsgV2EoZS5kb2MsIGwpICE9IGw7ICkge1xuICAgICAgICAgIGlmICh1ID09IChhIDwgMCA/IDAgOiBPLmxlbmd0aCAtIDEpKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgbCArPSBhICogT1t1IC0gKGEgPCAwID8gMSA6IDApXS5zaXplLCB1ICs9IGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgaW5kZXg6IHUsIGxpbmVOOiBsIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBucChlLCBuLCBsKSB7XG4gICAgICAgIHZhciBhID0gZS5kaXNwbGF5LCB1ID0gYS52aWV3O1xuICAgICAgICB1Lmxlbmd0aCA9PSAwIHx8IG4gPj0gYS52aWV3VG8gfHwgbCA8PSBhLnZpZXdGcm9tID8gKGEudmlldyA9IEhvKGUsIG4sIGwpLCBhLnZpZXdGcm9tID0gbikgOiAoYS52aWV3RnJvbSA+IG4gPyBhLnZpZXcgPSBIbyhlLCBuLCBhLnZpZXdGcm9tKS5jb25jYXQoYS52aWV3KSA6IGEudmlld0Zyb20gPCBuICYmIChhLnZpZXcgPSBhLnZpZXcuc2xpY2UoQnIoZSwgbikpKSwgYS52aWV3RnJvbSA9IG4sIGEudmlld1RvIDwgbCA/IGEudmlldyA9IGEudmlldy5jb25jYXQoSG8oZSwgYS52aWV3VG8sIGwpKSA6IGEudmlld1RvID4gbCAmJiAoYS52aWV3ID0gYS52aWV3LnNsaWNlKDAsIEJyKGUsIGwpKSkpLCBhLnZpZXdUbyA9IGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB3dShlKSB7XG4gICAgICAgIGZvciAodmFyIG4gPSBlLmRpc3BsYXkudmlldywgbCA9IDAsIGEgPSAwOyBhIDwgbi5sZW5ndGg7IGErKykge1xuICAgICAgICAgIHZhciB1ID0gblthXTtcbiAgICAgICAgICAhdS5oaWRkZW4gJiYgKCF1Lm5vZGUgfHwgdS5jaGFuZ2VzKSAmJiArK2w7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiAkaShlKSB7XG4gICAgICAgIGUuZGlzcGxheS5pbnB1dC5zaG93U2VsZWN0aW9uKGUuZGlzcGxheS5pbnB1dC5wcmVwYXJlU2VsZWN0aW9uKCkpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gVHUoZSwgbikge1xuICAgICAgICBuID09PSB2b2lkIDAgJiYgKG4gPSAhMCk7XG4gICAgICAgIHZhciBsID0gZS5kb2MsIGEgPSB7fSwgdSA9IGEuY3Vyc29ycyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgZyA9IGEuc2VsZWN0aW9uID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBPID0gZS5vcHRpb25zLiRjdXN0b21DdXJzb3I7XG4gICAgICAgIE8gJiYgKG4gPSAhMCk7XG4gICAgICAgIGZvciAodmFyIEwgPSAwOyBMIDwgbC5zZWwucmFuZ2VzLmxlbmd0aDsgTCsrKVxuICAgICAgICAgIGlmICghKCFuICYmIEwgPT0gbC5zZWwucHJpbUluZGV4KSkge1xuICAgICAgICAgICAgdmFyIEggPSBsLnNlbC5yYW5nZXNbTF07XG4gICAgICAgICAgICBpZiAoIShILmZyb20oKS5saW5lID49IGUuZGlzcGxheS52aWV3VG8gfHwgSC50bygpLmxpbmUgPCBlLmRpc3BsYXkudmlld0Zyb20pKSB7XG4gICAgICAgICAgICAgIHZhciBVID0gSC5lbXB0eSgpO1xuICAgICAgICAgICAgICBpZiAoTykge1xuICAgICAgICAgICAgICAgIHZhciBHID0gTyhlLCBIKTtcbiAgICAgICAgICAgICAgICBHICYmIGlsKGUsIEcsIHUpO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAoVSB8fCBlLm9wdGlvbnMuc2hvd0N1cnNvcldoZW5TZWxlY3RpbmcpICYmIGlsKGUsIEguaGVhZCwgdSk7XG4gICAgICAgICAgICAgIFUgfHwgcnAoZSwgSCwgZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGlsKGUsIG4sIGwpIHtcbiAgICAgICAgdmFyIGEgPSBQbihlLCBuLCBcImRpdlwiLCBudWxsLCBudWxsLCAhZS5vcHRpb25zLnNpbmdsZUN1cnNvckhlaWdodFBlckxpbmUpLCB1ID0gbC5hcHBlbmRDaGlsZChJKFwiZGl2XCIsIFwiXFx4QTBcIiwgXCJDb2RlTWlycm9yLWN1cnNvclwiKSk7XG4gICAgICAgIGlmICh1LnN0eWxlLmxlZnQgPSBhLmxlZnQgKyBcInB4XCIsIHUuc3R5bGUudG9wID0gYS50b3AgKyBcInB4XCIsIHUuc3R5bGUuaGVpZ2h0ID0gTWF0aC5tYXgoMCwgYS5ib3R0b20gLSBhLnRvcCkgKiBlLm9wdGlvbnMuY3Vyc29ySGVpZ2h0ICsgXCJweFwiLCAvXFxiY20tZmF0LWN1cnNvclxcYi8udGVzdChlLmdldFdyYXBwZXJFbGVtZW50KCkuY2xhc3NOYW1lKSkge1xuICAgICAgICAgIHZhciBnID0gam8oZSwgbiwgXCJkaXZcIiwgbnVsbCwgbnVsbCksIE8gPSBnLnJpZ2h0IC0gZy5sZWZ0O1xuICAgICAgICAgIHUuc3R5bGUud2lkdGggPSAoTyA+IDAgPyBPIDogZS5kZWZhdWx0Q2hhcldpZHRoKCkpICsgXCJweFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLm90aGVyKSB7XG4gICAgICAgICAgdmFyIEwgPSBsLmFwcGVuZENoaWxkKEkoXCJkaXZcIiwgXCJcXHhBMFwiLCBcIkNvZGVNaXJyb3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yXCIpKTtcbiAgICAgICAgICBMLnN0eWxlLmRpc3BsYXkgPSBcIlwiLCBMLnN0eWxlLmxlZnQgPSBhLm90aGVyLmxlZnQgKyBcInB4XCIsIEwuc3R5bGUudG9wID0gYS5vdGhlci50b3AgKyBcInB4XCIsIEwuc3R5bGUuaGVpZ2h0ID0gKGEub3RoZXIuYm90dG9tIC0gYS5vdGhlci50b3ApICogMC44NSArIFwicHhcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gem8oZSwgbikge1xuICAgICAgICByZXR1cm4gZS50b3AgLSBuLnRvcCB8fCBlLmxlZnQgLSBuLmxlZnQ7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBycChlLCBuLCBsKSB7XG4gICAgICAgIHZhciBhID0gZS5kaXNwbGF5LCB1ID0gZS5kb2MsIGcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIE8gPSBkdShlLmRpc3BsYXkpLCBMID0gTy5sZWZ0LCBIID0gTWF0aC5tYXgoYS5zaXplcldpZHRoLCBQcihlKSAtIGEuc2l6ZXIub2Zmc2V0TGVmdCkgLSBPLnJpZ2h0LCBVID0gdS5kaXJlY3Rpb24gPT0gXCJsdHJcIjtcbiAgICAgICAgZnVuY3Rpb24gRyhFZSwgTmUsIGtlLCBIZSkge1xuICAgICAgICAgIE5lIDwgMCAmJiAoTmUgPSAwKSwgTmUgPSBNYXRoLnJvdW5kKE5lKSwgSGUgPSBNYXRoLnJvdW5kKEhlKSwgZy5hcHBlbmRDaGlsZChJKFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1zZWxlY3RlZFwiLCBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogXCIgKyBFZSArIGBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBgICsgTmUgKyBcInB4OyB3aWR0aDogXCIgKyAoa2UgPT0gbnVsbCA/IEggLSBFZSA6IGtlKSArIGBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBgICsgKEhlIC0gTmUpICsgXCJweFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gWShFZSwgTmUsIGtlKSB7XG4gICAgICAgICAgdmFyIEhlID0gRmUodSwgRWUpLCBYZSA9IEhlLnRleHQubGVuZ3RoLCB2dCwganQ7XG4gICAgICAgICAgZnVuY3Rpb24gQ3QoSXQsIG9uKSB7XG4gICAgICAgICAgICByZXR1cm4gam8oZSwgcShFZSwgSXQpLCBcImRpdlwiLCBIZSwgb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBjbihJdCwgb24sIEd0KSB7XG4gICAgICAgICAgICB2YXIgRnQgPSBTdShlLCBIZSwgbnVsbCwgSXQpLCBOdCA9IG9uID09IFwibHRyXCIgPT0gKEd0ID09IFwiYWZ0ZXJcIikgPyBcImxlZnRcIiA6IFwicmlnaHRcIiwgeHQgPSBHdCA9PSBcImFmdGVyXCIgPyBGdC5iZWdpbiA6IEZ0LmVuZCAtICgvXFxzLy50ZXN0KEhlLnRleHQuY2hhckF0KEZ0LmVuZCAtIDEpKSA/IDIgOiAxKTtcbiAgICAgICAgICAgIHJldHVybiBDdCh4dCwgTnQpW050XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHJuID0gVWUoSGUsIHUuZGlyZWN0aW9uKTtcbiAgICAgICAgICByZXR1cm4gdW4ocm4sIE5lIHx8IDAsIGtlID09IG51bGwgPyBYZSA6IGtlLCBmdW5jdGlvbihJdCwgb24sIEd0LCBGdCkge1xuICAgICAgICAgICAgdmFyIE50ID0gR3QgPT0gXCJsdHJcIiwgeHQgPSBDdChJdCwgTnQgPyBcImxlZnRcIiA6IFwicmlnaHRcIiksIGFuID0gQ3Qob24gLSAxLCBOdCA/IFwicmlnaHRcIiA6IFwibGVmdFwiKSwgdmkgPSBOZSA9PSBudWxsICYmIEl0ID09IDAsIHdyID0ga2UgPT0gbnVsbCAmJiBvbiA9PSBYZSwgWXQgPSBGdCA9PSAwLCBRbiA9ICFybiB8fCBGdCA9PSBybi5sZW5ndGggLSAxO1xuICAgICAgICAgICAgaWYgKGFuLnRvcCAtIHh0LnRvcCA8PSAzKSB7XG4gICAgICAgICAgICAgIHZhciBVdCA9IChVID8gdmkgOiB3cikgJiYgWXQsIElsID0gKFUgPyB3ciA6IHZpKSAmJiBRbiwgb3IgPSBVdCA/IEwgOiAoTnQgPyB4dCA6IGFuKS5sZWZ0LCBVciA9IElsID8gSCA6IChOdCA/IGFuIDogeHQpLnJpZ2h0O1xuICAgICAgICAgICAgICBHKG9yLCB4dC50b3AsIFVyIC0gb3IsIHh0LmJvdHRvbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgenIsIFp0LCBtaSwgTmw7XG4gICAgICAgICAgICAgIE50ID8gKHpyID0gVSAmJiB2aSAmJiBZdCA/IEwgOiB4dC5sZWZ0LCBadCA9IFUgPyBIIDogY24oSXQsIEd0LCBcImJlZm9yZVwiKSwgbWkgPSBVID8gTCA6IGNuKG9uLCBHdCwgXCJhZnRlclwiKSwgTmwgPSBVICYmIHdyICYmIFFuID8gSCA6IGFuLnJpZ2h0KSA6ICh6ciA9IFUgPyBjbihJdCwgR3QsIFwiYmVmb3JlXCIpIDogTCwgWnQgPSAhVSAmJiB2aSAmJiBZdCA/IEggOiB4dC5yaWdodCwgbWkgPSAhVSAmJiB3ciAmJiBRbiA/IEwgOiBhbi5sZWZ0LCBObCA9IFUgPyBjbihvbiwgR3QsIFwiYWZ0ZXJcIikgOiBIKSwgRyh6ciwgeHQudG9wLCBadCAtIHpyLCB4dC5ib3R0b20pLCB4dC5ib3R0b20gPCBhbi50b3AgJiYgRyhMLCB4dC5ib3R0b20sIG51bGwsIGFuLnRvcCksIEcobWksIGFuLnRvcCwgTmwgLSBtaSwgYW4uYm90dG9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICghdnQgfHwgem8oeHQsIHZ0KSA8IDApICYmICh2dCA9IHh0KSwgem8oYW4sIHZ0KSA8IDAgJiYgKHZ0ID0gYW4pLCAoIWp0IHx8IHpvKHh0LCBqdCkgPCAwKSAmJiAoanQgPSB4dCksIHpvKGFuLCBqdCkgPCAwICYmIChqdCA9IGFuKTtcbiAgICAgICAgICB9KSwgeyBzdGFydDogdnQsIGVuZDoganQgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZWUgPSBuLmZyb20oKSwgXyA9IG4udG8oKTtcbiAgICAgICAgaWYgKGVlLmxpbmUgPT0gXy5saW5lKVxuICAgICAgICAgIFkoZWUubGluZSwgZWUuY2gsIF8uY2gpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgYWUgPSBGZSh1LCBlZS5saW5lKSwgY2UgPSBGZSh1LCBfLmxpbmUpLCB5ZSA9IE9uKGFlKSA9PSBPbihjZSksIENlID0gWShlZS5saW5lLCBlZS5jaCwgeWUgPyBhZS50ZXh0Lmxlbmd0aCArIDEgOiBudWxsKS5lbmQsIFRlID0gWShfLmxpbmUsIHllID8gMCA6IG51bGwsIF8uY2gpLnN0YXJ0O1xuICAgICAgICAgIHllICYmIChDZS50b3AgPCBUZS50b3AgLSAyID8gKEcoQ2UucmlnaHQsIENlLnRvcCwgbnVsbCwgQ2UuYm90dG9tKSwgRyhMLCBUZS50b3AsIFRlLmxlZnQsIFRlLmJvdHRvbSkpIDogRyhDZS5yaWdodCwgQ2UudG9wLCBUZS5sZWZ0IC0gQ2UucmlnaHQsIENlLmJvdHRvbSkpLCBDZS5ib3R0b20gPCBUZS50b3AgJiYgRyhMLCBDZS5ib3R0b20sIG51bGwsIFRlLnRvcCk7XG4gICAgICAgIH1cbiAgICAgICAgbC5hcHBlbmRDaGlsZChnKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG9sKGUpIHtcbiAgICAgICAgaWYgKCEhZS5zdGF0ZS5mb2N1c2VkKSB7XG4gICAgICAgICAgdmFyIG4gPSBlLmRpc3BsYXk7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChuLmJsaW5rZXIpO1xuICAgICAgICAgIHZhciBsID0gITA7XG4gICAgICAgICAgbi5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eSA9IFwiXCIsIGUub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUgPiAwID8gbi5ibGlua2VyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBlLmhhc0ZvY3VzKCkgfHwgcmkoZSksIG4uY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHkgPSAobCA9ICFsKSA/IFwiXCIgOiBcImhpZGRlblwiO1xuICAgICAgICAgIH0sIGUub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpIDogZS5vcHRpb25zLmN1cnNvckJsaW5rUmF0ZSA8IDAgJiYgKG4uY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gRHUoZSkge1xuICAgICAgICBlLmhhc0ZvY3VzKCkgfHwgKGUuZGlzcGxheS5pbnB1dC5mb2N1cygpLCBlLnN0YXRlLmZvY3VzZWQgfHwgbGwoZSkpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gYWwoZSkge1xuICAgICAgICBlLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50ID0gITAsIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCAmJiAoZS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9ICExLCBlLnN0YXRlLmZvY3VzZWQgJiYgcmkoZSkpO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbGwoZSwgbikge1xuICAgICAgICBlLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50ICYmICFlLnN0YXRlLmRyYWdnaW5nVGV4dCAmJiAoZS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9ICExKSwgZS5vcHRpb25zLnJlYWRPbmx5ICE9IFwibm9jdXJzb3JcIiAmJiAoZS5zdGF0ZS5mb2N1c2VkIHx8IChQZShlLCBcImZvY3VzXCIsIGUsIG4pLCBlLnN0YXRlLmZvY3VzZWQgPSAhMCwgSihlLmRpc3BsYXkud3JhcHBlciwgXCJDb2RlTWlycm9yLWZvY3VzZWRcIiksICFlLmN1ck9wICYmIGUuZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSAhPSBlLmRvYy5zZWwgJiYgKGUuZGlzcGxheS5pbnB1dC5yZXNldCgpLCBiICYmIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGUuZGlzcGxheS5pbnB1dC5yZXNldCghMCk7XG4gICAgICAgIH0sIDIwKSksIGUuZGlzcGxheS5pbnB1dC5yZWNlaXZlZEZvY3VzKCkpLCBvbChlKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiByaShlLCBuKSB7XG4gICAgICAgIGUuc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQgfHwgKGUuc3RhdGUuZm9jdXNlZCAmJiAoUGUoZSwgXCJibHVyXCIsIGUsIG4pLCBlLnN0YXRlLmZvY3VzZWQgPSAhMSwgTihlLmRpc3BsYXkud3JhcHBlciwgXCJDb2RlTWlycm9yLWZvY3VzZWRcIikpLCBjbGVhckludGVydmFsKGUuZGlzcGxheS5ibGlua2VyKSwgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBlLnN0YXRlLmZvY3VzZWQgfHwgKGUuZGlzcGxheS5zaGlmdCA9ICExKTtcbiAgICAgICAgfSwgMTUwKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBWbyhlKSB7XG4gICAgICAgIGZvciAodmFyIG4gPSBlLmRpc3BsYXksIGwgPSBuLmxpbmVEaXYub2Zmc2V0VG9wLCBhID0gTWF0aC5tYXgoMCwgbi5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ApLCB1ID0gbi5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCwgZyA9IDAsIE8gPSAwOyBPIDwgbi52aWV3Lmxlbmd0aDsgTysrKSB7XG4gICAgICAgICAgdmFyIEwgPSBuLnZpZXdbT10sIEggPSBlLm9wdGlvbnMubGluZVdyYXBwaW5nLCBVID0gdm9pZCAwLCBHID0gMDtcbiAgICAgICAgICBpZiAoIUwuaGlkZGVuKSB7XG4gICAgICAgICAgICBpZiAodSArPSBMLmxpbmUuaGVpZ2h0LCBwICYmIHYgPCA4KSB7XG4gICAgICAgICAgICAgIHZhciBZID0gTC5ub2RlLm9mZnNldFRvcCArIEwubm9kZS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgIFUgPSBZIC0gbCwgbCA9IFk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgZWUgPSBMLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgIFUgPSBlZS5ib3R0b20gLSBlZS50b3AsICFIICYmIEwudGV4dC5maXJzdENoaWxkICYmIChHID0gTC50ZXh0LmZpcnN0Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgLSBlZS5sZWZ0IC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgXyA9IEwubGluZS5oZWlnaHQgLSBVO1xuICAgICAgICAgICAgaWYgKChfID4gNWUtMyB8fCBfIDwgLTVlLTMpICYmICh1IDwgYSAmJiAoZyAtPSBfKSwgRG4oTC5saW5lLCBVKSwgUnUoTC5saW5lKSwgTC5yZXN0KSlcbiAgICAgICAgICAgICAgZm9yICh2YXIgYWUgPSAwOyBhZSA8IEwucmVzdC5sZW5ndGg7IGFlKyspXG4gICAgICAgICAgICAgICAgUnUoTC5yZXN0W2FlXSk7XG4gICAgICAgICAgICBpZiAoRyA+IGUuZGlzcGxheS5zaXplcldpZHRoKSB7XG4gICAgICAgICAgICAgIHZhciBjZSA9IE1hdGguY2VpbChHIC8gbmkoZS5kaXNwbGF5KSk7XG4gICAgICAgICAgICAgIGNlID4gZS5kaXNwbGF5Lm1heExpbmVMZW5ndGggJiYgKGUuZGlzcGxheS5tYXhMaW5lTGVuZ3RoID0gY2UsIGUuZGlzcGxheS5tYXhMaW5lID0gTC5saW5lLCBlLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSAhMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIE1hdGguYWJzKGcpID4gMiAmJiAobi5zY3JvbGxlci5zY3JvbGxUb3AgKz0gZyk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBSdShlKSB7XG4gICAgICAgIGlmIChlLndpZGdldHMpXG4gICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBlLndpZGdldHMubGVuZ3RoOyArK24pIHtcbiAgICAgICAgICAgIHZhciBsID0gZS53aWRnZXRzW25dLCBhID0gbC5ub2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgICBhICYmIChsLmhlaWdodCA9IGEub2Zmc2V0SGVpZ2h0KTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBXbyhlLCBuLCBsKSB7XG4gICAgICAgIHZhciBhID0gbCAmJiBsLnRvcCAhPSBudWxsID8gTWF0aC5tYXgoMCwgbC50b3ApIDogZS5zY3JvbGxlci5zY3JvbGxUb3A7XG4gICAgICAgIGEgPSBNYXRoLmZsb29yKGEgLSAkbyhlKSk7XG4gICAgICAgIHZhciB1ID0gbCAmJiBsLmJvdHRvbSAhPSBudWxsID8gbC5ib3R0b20gOiBhICsgZS53cmFwcGVyLmNsaWVudEhlaWdodCwgZyA9IHpuKG4sIGEpLCBPID0gem4obiwgdSk7XG4gICAgICAgIGlmIChsICYmIGwuZW5zdXJlKSB7XG4gICAgICAgICAgdmFyIEwgPSBsLmVuc3VyZS5mcm9tLmxpbmUsIEggPSBsLmVuc3VyZS50by5saW5lO1xuICAgICAgICAgIEwgPCBnID8gKGcgPSBMLCBPID0gem4obiwgdHIoRmUobiwgTCkpICsgZS53cmFwcGVyLmNsaWVudEhlaWdodCkpIDogTWF0aC5taW4oSCwgbi5sYXN0TGluZSgpKSA+PSBPICYmIChnID0gem4obiwgdHIoRmUobiwgSCkpIC0gZS53cmFwcGVyLmNsaWVudEhlaWdodCksIE8gPSBIKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBmcm9tOiBnLCB0bzogTWF0aC5tYXgoTywgZyArIDEpIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBpcChlLCBuKSB7XG4gICAgICAgIGlmICghUWUoZSwgXCJzY3JvbGxDdXJzb3JJbnRvVmlld1wiKSkge1xuICAgICAgICAgIHZhciBsID0gZS5kaXNwbGF5LCBhID0gbC5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgdSA9IG51bGwsIGcgPSBsLndyYXBwZXIub3duZXJEb2N1bWVudDtcbiAgICAgICAgICBpZiAobi50b3AgKyBhLnRvcCA8IDAgPyB1ID0gITAgOiBuLmJvdHRvbSArIGEudG9wID4gKGcuZGVmYXVsdFZpZXcuaW5uZXJIZWlnaHQgfHwgZy5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSAmJiAodSA9ICExKSwgdSAhPSBudWxsICYmICF3KSB7XG4gICAgICAgICAgICB2YXIgTyA9IEkoXCJkaXZcIiwgXCJcXHUyMDBCXCIsIG51bGwsIGBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBgICsgKG4udG9wIC0gbC52aWV3T2Zmc2V0IC0gJG8oZS5kaXNwbGF5KSkgKyBgcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBgICsgKG4uYm90dG9tIC0gbi50b3AgKyBXbihlKSArIGwuYmFySGVpZ2h0KSArIGBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBgICsgbi5sZWZ0ICsgXCJweDsgd2lkdGg6IFwiICsgTWF0aC5tYXgoMiwgbi5yaWdodCAtIG4ubGVmdCkgKyBcInB4O1wiKTtcbiAgICAgICAgICAgIGUuZGlzcGxheS5saW5lU3BhY2UuYXBwZW5kQ2hpbGQoTyksIE8uc2Nyb2xsSW50b1ZpZXcodSksIGUuZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoTyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBvcChlLCBuLCBsLCBhKSB7XG4gICAgICAgIGEgPT0gbnVsbCAmJiAoYSA9IDApO1xuICAgICAgICB2YXIgdTtcbiAgICAgICAgIWUub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgbiA9PSBsICYmIChsID0gbi5zdGlja3kgPT0gXCJiZWZvcmVcIiA/IHEobi5saW5lLCBuLmNoICsgMSwgXCJiZWZvcmVcIikgOiBuLCBuID0gbi5jaCA/IHEobi5saW5lLCBuLnN0aWNreSA9PSBcImJlZm9yZVwiID8gbi5jaCAtIDEgOiBuLmNoLCBcImFmdGVyXCIpIDogbik7XG4gICAgICAgIGZvciAodmFyIGcgPSAwOyBnIDwgNTsgZysrKSB7XG4gICAgICAgICAgdmFyIE8gPSAhMSwgTCA9IFBuKGUsIG4pLCBIID0gIWwgfHwgbCA9PSBuID8gTCA6IFBuKGUsIGwpO1xuICAgICAgICAgIHUgPSB7XG4gICAgICAgICAgICBsZWZ0OiBNYXRoLm1pbihMLmxlZnQsIEgubGVmdCksXG4gICAgICAgICAgICB0b3A6IE1hdGgubWluKEwudG9wLCBILnRvcCkgLSBhLFxuICAgICAgICAgICAgcmlnaHQ6IE1hdGgubWF4KEwubGVmdCwgSC5sZWZ0KSxcbiAgICAgICAgICAgIGJvdHRvbTogTWF0aC5tYXgoTC5ib3R0b20sIEguYm90dG9tKSArIGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZhciBVID0gc2woZSwgdSksIEcgPSBlLmRvYy5zY3JvbGxUb3AsIFkgPSBlLmRvYy5zY3JvbGxMZWZ0O1xuICAgICAgICAgIGlmIChVLnNjcm9sbFRvcCAhPSBudWxsICYmIChqaShlLCBVLnNjcm9sbFRvcCksIE1hdGguYWJzKGUuZG9jLnNjcm9sbFRvcCAtIEcpID4gMSAmJiAoTyA9ICEwKSksIFUuc2Nyb2xsTGVmdCAhPSBudWxsICYmIChIcihlLCBVLnNjcm9sbExlZnQpLCBNYXRoLmFicyhlLmRvYy5zY3JvbGxMZWZ0IC0gWSkgPiAxICYmIChPID0gITApKSwgIU8pXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGFwKGUsIG4pIHtcbiAgICAgICAgdmFyIGwgPSBzbChlLCBuKTtcbiAgICAgICAgbC5zY3JvbGxUb3AgIT0gbnVsbCAmJiBqaShlLCBsLnNjcm9sbFRvcCksIGwuc2Nyb2xsTGVmdCAhPSBudWxsICYmIEhyKGUsIGwuc2Nyb2xsTGVmdCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzbChlLCBuKSB7XG4gICAgICAgIHZhciBsID0gZS5kaXNwbGF5LCBhID0gdGkoZS5kaXNwbGF5KTtcbiAgICAgICAgbi50b3AgPCAwICYmIChuLnRvcCA9IDApO1xuICAgICAgICB2YXIgdSA9IGUuY3VyT3AgJiYgZS5jdXJPcC5zY3JvbGxUb3AgIT0gbnVsbCA/IGUuY3VyT3Auc2Nyb2xsVG9wIDogbC5zY3JvbGxlci5zY3JvbGxUb3AsIGcgPSBYYShlKSwgTyA9IHt9O1xuICAgICAgICBuLmJvdHRvbSAtIG4udG9wID4gZyAmJiAobi5ib3R0b20gPSBuLnRvcCArIGcpO1xuICAgICAgICB2YXIgTCA9IGUuZG9jLmhlaWdodCArIEthKGwpLCBIID0gbi50b3AgPCBhLCBVID0gbi5ib3R0b20gPiBMIC0gYTtcbiAgICAgICAgaWYgKG4udG9wIDwgdSlcbiAgICAgICAgICBPLnNjcm9sbFRvcCA9IEggPyAwIDogbi50b3A7XG4gICAgICAgIGVsc2UgaWYgKG4uYm90dG9tID4gdSArIGcpIHtcbiAgICAgICAgICB2YXIgRyA9IE1hdGgubWluKG4udG9wLCAoVSA/IEwgOiBuLmJvdHRvbSkgLSBnKTtcbiAgICAgICAgICBHICE9IHUgJiYgKE8uc2Nyb2xsVG9wID0gRyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIFkgPSBlLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyAwIDogbC5ndXR0ZXJzLm9mZnNldFdpZHRoLCBlZSA9IGUuY3VyT3AgJiYgZS5jdXJPcC5zY3JvbGxMZWZ0ICE9IG51bGwgPyBlLmN1ck9wLnNjcm9sbExlZnQgOiBsLnNjcm9sbGVyLnNjcm9sbExlZnQgLSBZLCBfID0gUHIoZSkgLSBsLmd1dHRlcnMub2Zmc2V0V2lkdGgsIGFlID0gbi5yaWdodCAtIG4ubGVmdCA+IF87XG4gICAgICAgIHJldHVybiBhZSAmJiAobi5yaWdodCA9IG4ubGVmdCArIF8pLCBuLmxlZnQgPCAxMCA/IE8uc2Nyb2xsTGVmdCA9IDAgOiBuLmxlZnQgPCBlZSA/IE8uc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIG4ubGVmdCArIFkgLSAoYWUgPyAwIDogMTApKSA6IG4ucmlnaHQgPiBfICsgZWUgLSAzICYmIChPLnNjcm9sbExlZnQgPSBuLnJpZ2h0ICsgKGFlID8gMCA6IDEwKSAtIF8pLCBPO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdWwoZSwgbikge1xuICAgICAgICBuICE9IG51bGwgJiYgKEdvKGUpLCBlLmN1ck9wLnNjcm9sbFRvcCA9IChlLmN1ck9wLnNjcm9sbFRvcCA9PSBudWxsID8gZS5kb2Muc2Nyb2xsVG9wIDogZS5jdXJPcC5zY3JvbGxUb3ApICsgbik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBpaShlKSB7XG4gICAgICAgIEdvKGUpO1xuICAgICAgICB2YXIgbiA9IGUuZ2V0Q3Vyc29yKCk7XG4gICAgICAgIGUuY3VyT3Auc2Nyb2xsVG9Qb3MgPSB7IGZyb206IG4sIHRvOiBuLCBtYXJnaW46IGUub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW4gfTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGtpKGUsIG4sIGwpIHtcbiAgICAgICAgKG4gIT0gbnVsbCB8fCBsICE9IG51bGwpICYmIEdvKGUpLCBuICE9IG51bGwgJiYgKGUuY3VyT3Auc2Nyb2xsTGVmdCA9IG4pLCBsICE9IG51bGwgJiYgKGUuY3VyT3Auc2Nyb2xsVG9wID0gbCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBscChlLCBuKSB7XG4gICAgICAgIEdvKGUpLCBlLmN1ck9wLnNjcm9sbFRvUG9zID0gbjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEdvKGUpIHtcbiAgICAgICAgdmFyIG4gPSBlLmN1ck9wLnNjcm9sbFRvUG9zO1xuICAgICAgICBpZiAobikge1xuICAgICAgICAgIGUuY3VyT3Auc2Nyb2xsVG9Qb3MgPSBudWxsO1xuICAgICAgICAgIHZhciBsID0gQ3UoZSwgbi5mcm9tKSwgYSA9IEN1KGUsIG4udG8pO1xuICAgICAgICAgIE11KGUsIGwsIGEsIG4ubWFyZ2luKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gTXUoZSwgbiwgbCwgYSkge1xuICAgICAgICB2YXIgdSA9IHNsKGUsIHtcbiAgICAgICAgICBsZWZ0OiBNYXRoLm1pbihuLmxlZnQsIGwubGVmdCksXG4gICAgICAgICAgdG9wOiBNYXRoLm1pbihuLnRvcCwgbC50b3ApIC0gYSxcbiAgICAgICAgICByaWdodDogTWF0aC5tYXgobi5yaWdodCwgbC5yaWdodCksXG4gICAgICAgICAgYm90dG9tOiBNYXRoLm1heChuLmJvdHRvbSwgbC5ib3R0b20pICsgYVxuICAgICAgICB9KTtcbiAgICAgICAga2koZSwgdS5zY3JvbGxMZWZ0LCB1LnNjcm9sbFRvcCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBqaShlLCBuKSB7XG4gICAgICAgIE1hdGguYWJzKGUuZG9jLnNjcm9sbFRvcCAtIG4pIDwgMiB8fCAodCB8fCBkbChlLCB7IHRvcDogbiB9KSwgSXUoZSwgbiwgITApLCB0ICYmIGRsKGUpLCBWaShlLCAxMDApKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEl1KGUsIG4sIGwpIHtcbiAgICAgICAgbiA9IE1hdGgubWF4KDAsIE1hdGgubWluKGUuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxIZWlnaHQgLSBlLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LCBuKSksICEoZS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9PSBuICYmICFsKSAmJiAoZS5kb2Muc2Nyb2xsVG9wID0gbiwgZS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKG4pLCBlLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICE9IG4gJiYgKGUuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSBuKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBIcihlLCBuLCBsLCBhKSB7XG4gICAgICAgIG4gPSBNYXRoLm1heCgwLCBNYXRoLm1pbihuLCBlLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsV2lkdGggLSBlLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpKSwgISgobCA/IG4gPT0gZS5kb2Muc2Nyb2xsTGVmdCA6IE1hdGguYWJzKGUuZG9jLnNjcm9sbExlZnQgLSBuKSA8IDIpICYmICFhKSAmJiAoZS5kb2Muc2Nyb2xsTGVmdCA9IG4sIEx1KGUpLCBlLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCAhPSBuICYmIChlLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IG4pLCBlLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxMZWZ0KG4pKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFVpKGUpIHtcbiAgICAgICAgdmFyIG4gPSBlLmRpc3BsYXksIGwgPSBuLmd1dHRlcnMub2Zmc2V0V2lkdGgsIGEgPSBNYXRoLnJvdW5kKGUuZG9jLmhlaWdodCArIEthKGUuZGlzcGxheSkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNsaWVudEhlaWdodDogbi5zY3JvbGxlci5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgdmlld0hlaWdodDogbi53cmFwcGVyLmNsaWVudEhlaWdodCxcbiAgICAgICAgICBzY3JvbGxXaWR0aDogbi5zY3JvbGxlci5zY3JvbGxXaWR0aCxcbiAgICAgICAgICBjbGllbnRXaWR0aDogbi5zY3JvbGxlci5jbGllbnRXaWR0aCxcbiAgICAgICAgICB2aWV3V2lkdGg6IG4ud3JhcHBlci5jbGllbnRXaWR0aCxcbiAgICAgICAgICBiYXJMZWZ0OiBlLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBsIDogMCxcbiAgICAgICAgICBkb2NIZWlnaHQ6IGEsXG4gICAgICAgICAgc2Nyb2xsSGVpZ2h0OiBhICsgV24oZSkgKyBuLmJhckhlaWdodCxcbiAgICAgICAgICBuYXRpdmVCYXJXaWR0aDogbi5uYXRpdmVCYXJXaWR0aCxcbiAgICAgICAgICBndXR0ZXJXaWR0aDogbFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyICRyID0gZnVuY3Rpb24oZSwgbiwgbCkge1xuICAgICAgICB0aGlzLmNtID0gbDtcbiAgICAgICAgdmFyIGEgPSB0aGlzLnZlcnQgPSBJKFwiZGl2XCIsIFtJKFwiZGl2XCIsIG51bGwsIG51bGwsIFwibWluLXdpZHRoOiAxcHhcIildLCBcIkNvZGVNaXJyb3ItdnNjcm9sbGJhclwiKSwgdSA9IHRoaXMuaG9yaXogPSBJKFwiZGl2XCIsIFtJKFwiZGl2XCIsIG51bGwsIG51bGwsIFwiaGVpZ2h0OiAxMDAlOyBtaW4taGVpZ2h0OiAxcHhcIildLCBcIkNvZGVNaXJyb3ItaHNjcm9sbGJhclwiKTtcbiAgICAgICAgYS50YWJJbmRleCA9IHUudGFiSW5kZXggPSAtMSwgZShhKSwgZSh1KSwgbmUoYSwgXCJzY3JvbGxcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgYS5jbGllbnRIZWlnaHQgJiYgbihhLnNjcm9sbFRvcCwgXCJ2ZXJ0aWNhbFwiKTtcbiAgICAgICAgfSksIG5lKHUsIFwic2Nyb2xsXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHUuY2xpZW50V2lkdGggJiYgbih1LnNjcm9sbExlZnQsIFwiaG9yaXpvbnRhbFwiKTtcbiAgICAgICAgfSksIHRoaXMuY2hlY2tlZFplcm9XaWR0aCA9ICExLCBwICYmIHYgPCA4ICYmICh0aGlzLmhvcml6LnN0eWxlLm1pbkhlaWdodCA9IHRoaXMudmVydC5zdHlsZS5taW5XaWR0aCA9IFwiMThweFwiKTtcbiAgICAgIH07XG4gICAgICAkci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgbiA9IGUuc2Nyb2xsV2lkdGggPiBlLmNsaWVudFdpZHRoICsgMSwgbCA9IGUuc2Nyb2xsSGVpZ2h0ID4gZS5jbGllbnRIZWlnaHQgKyAxLCBhID0gZS5uYXRpdmVCYXJXaWR0aDtcbiAgICAgICAgaWYgKGwpIHtcbiAgICAgICAgICB0aGlzLnZlcnQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIiwgdGhpcy52ZXJ0LnN0eWxlLmJvdHRvbSA9IG4gPyBhICsgXCJweFwiIDogXCIwXCI7XG4gICAgICAgICAgdmFyIHUgPSBlLnZpZXdIZWlnaHQgLSAobiA/IGEgOiAwKTtcbiAgICAgICAgICB0aGlzLnZlcnQuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQgPSBNYXRoLm1heCgwLCBlLnNjcm9sbEhlaWdodCAtIGUuY2xpZW50SGVpZ2h0ICsgdSkgKyBcInB4XCI7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHRoaXMudmVydC5zY3JvbGxUb3AgPSAwLCB0aGlzLnZlcnQuc3R5bGUuZGlzcGxheSA9IFwiXCIsIHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodCA9IFwiMFwiO1xuICAgICAgICBpZiAobikge1xuICAgICAgICAgIHRoaXMuaG9yaXouc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIiwgdGhpcy5ob3Jpei5zdHlsZS5yaWdodCA9IGwgPyBhICsgXCJweFwiIDogXCIwXCIsIHRoaXMuaG9yaXouc3R5bGUubGVmdCA9IGUuYmFyTGVmdCArIFwicHhcIjtcbiAgICAgICAgICB2YXIgZyA9IGUudmlld1dpZHRoIC0gZS5iYXJMZWZ0IC0gKGwgPyBhIDogMCk7XG4gICAgICAgICAgdGhpcy5ob3Jpei5maXJzdENoaWxkLnN0eWxlLndpZHRoID0gTWF0aC5tYXgoMCwgZS5zY3JvbGxXaWR0aCAtIGUuY2xpZW50V2lkdGggKyBnKSArIFwicHhcIjtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgdGhpcy5ob3Jpei5zdHlsZS5kaXNwbGF5ID0gXCJcIiwgdGhpcy5ob3Jpei5maXJzdENoaWxkLnN0eWxlLndpZHRoID0gXCIwXCI7XG4gICAgICAgIHJldHVybiAhdGhpcy5jaGVja2VkWmVyb1dpZHRoICYmIGUuY2xpZW50SGVpZ2h0ID4gMCAmJiAoYSA9PSAwICYmIHRoaXMuemVyb1dpZHRoSGFjaygpLCB0aGlzLmNoZWNrZWRaZXJvV2lkdGggPSAhMCksIHsgcmlnaHQ6IGwgPyBhIDogMCwgYm90dG9tOiBuID8gYSA6IDAgfTtcbiAgICAgIH0sICRyLnByb3RvdHlwZS5zZXRTY3JvbGxMZWZ0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB0aGlzLmhvcml6LnNjcm9sbExlZnQgIT0gZSAmJiAodGhpcy5ob3Jpei5zY3JvbGxMZWZ0ID0gZSksIHRoaXMuZGlzYWJsZUhvcml6ICYmIHRoaXMuZW5hYmxlWmVyb1dpZHRoQmFyKHRoaXMuaG9yaXosIHRoaXMuZGlzYWJsZUhvcml6LCBcImhvcml6XCIpO1xuICAgICAgfSwgJHIucHJvdG90eXBlLnNldFNjcm9sbFRvcCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdGhpcy52ZXJ0LnNjcm9sbFRvcCAhPSBlICYmICh0aGlzLnZlcnQuc2Nyb2xsVG9wID0gZSksIHRoaXMuZGlzYWJsZVZlcnQgJiYgdGhpcy5lbmFibGVaZXJvV2lkdGhCYXIodGhpcy52ZXJ0LCB0aGlzLmRpc2FibGVWZXJ0LCBcInZlcnRcIik7XG4gICAgICB9LCAkci5wcm90b3R5cGUuemVyb1dpZHRoSGFjayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZSA9IE0gJiYgIVIgPyBcIjEycHhcIiA6IFwiMThweFwiO1xuICAgICAgICB0aGlzLmhvcml6LnN0eWxlLmhlaWdodCA9IHRoaXMudmVydC5zdHlsZS53aWR0aCA9IGUsIHRoaXMuaG9yaXouc3R5bGUudmlzaWJpbGl0eSA9IHRoaXMudmVydC5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIiwgdGhpcy5kaXNhYmxlSG9yaXogPSBuZXcgcGUoKSwgdGhpcy5kaXNhYmxlVmVydCA9IG5ldyBwZSgpO1xuICAgICAgfSwgJHIucHJvdG90eXBlLmVuYWJsZVplcm9XaWR0aEJhciA9IGZ1bmN0aW9uKGUsIG4sIGwpIHtcbiAgICAgICAgZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJcIjtcbiAgICAgICAgZnVuY3Rpb24gYSgpIHtcbiAgICAgICAgICB2YXIgdSA9IGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGcgPSBsID09IFwidmVydFwiID8gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh1LnJpZ2h0IC0gMSwgKHUudG9wICsgdS5ib3R0b20pIC8gMikgOiBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KCh1LnJpZ2h0ICsgdS5sZWZ0KSAvIDIsIHUuYm90dG9tIC0gMSk7XG4gICAgICAgICAgZyAhPSBlID8gZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIiA6IG4uc2V0KDFlMywgYSk7XG4gICAgICAgIH1cbiAgICAgICAgbi5zZXQoMWUzLCBhKTtcbiAgICAgIH0sICRyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZSA9IHRoaXMuaG9yaXoucGFyZW50Tm9kZTtcbiAgICAgICAgZS5yZW1vdmVDaGlsZCh0aGlzLmhvcml6KSwgZS5yZW1vdmVDaGlsZCh0aGlzLnZlcnQpO1xuICAgICAgfTtcbiAgICAgIHZhciB6aSA9IGZ1bmN0aW9uKCkge1xuICAgICAgfTtcbiAgICAgIHppLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHsgYm90dG9tOiAwLCByaWdodDogMCB9O1xuICAgICAgfSwgemkucHJvdG90eXBlLnNldFNjcm9sbExlZnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIH0sIHppLnByb3RvdHlwZS5zZXRTY3JvbGxUb3AgPSBmdW5jdGlvbigpIHtcbiAgICAgIH0sIHppLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIG9pKGUsIG4pIHtcbiAgICAgICAgbiB8fCAobiA9IFVpKGUpKTtcbiAgICAgICAgdmFyIGwgPSBlLmRpc3BsYXkuYmFyV2lkdGgsIGEgPSBlLmRpc3BsYXkuYmFySGVpZ2h0O1xuICAgICAgICBOdShlLCBuKTtcbiAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCA0ICYmIGwgIT0gZS5kaXNwbGF5LmJhcldpZHRoIHx8IGEgIT0gZS5kaXNwbGF5LmJhckhlaWdodDsgdSsrKVxuICAgICAgICAgIGwgIT0gZS5kaXNwbGF5LmJhcldpZHRoICYmIGUub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgVm8oZSksIE51KGUsIFVpKGUpKSwgbCA9IGUuZGlzcGxheS5iYXJXaWR0aCwgYSA9IGUuZGlzcGxheS5iYXJIZWlnaHQ7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBOdShlLCBuKSB7XG4gICAgICAgIHZhciBsID0gZS5kaXNwbGF5LCBhID0gbC5zY3JvbGxiYXJzLnVwZGF0ZShuKTtcbiAgICAgICAgbC5zaXplci5zdHlsZS5wYWRkaW5nUmlnaHQgPSAobC5iYXJXaWR0aCA9IGEucmlnaHQpICsgXCJweFwiLCBsLnNpemVyLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAobC5iYXJIZWlnaHQgPSBhLmJvdHRvbSkgKyBcInB4XCIsIGwuaGVpZ2h0Rm9yY2VyLnN0eWxlLmJvcmRlckJvdHRvbSA9IGEuYm90dG9tICsgXCJweCBzb2xpZCB0cmFuc3BhcmVudFwiLCBhLnJpZ2h0ICYmIGEuYm90dG9tID8gKGwuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCIsIGwuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmhlaWdodCA9IGEuYm90dG9tICsgXCJweFwiLCBsLnNjcm9sbGJhckZpbGxlci5zdHlsZS53aWR0aCA9IGEucmlnaHQgKyBcInB4XCIpIDogbC5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuZGlzcGxheSA9IFwiXCIsIGEuYm90dG9tICYmIGUub3B0aW9ucy5jb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciAmJiBlLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyAobC5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIiwgbC5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0ID0gYS5ib3R0b20gKyBcInB4XCIsIGwuZ3V0dGVyRmlsbGVyLnN0eWxlLndpZHRoID0gbi5ndXR0ZXJXaWR0aCArIFwicHhcIikgOiBsLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIHZhciBPdSA9IHsgbmF0aXZlOiAkciwgbnVsbDogemkgfTtcbiAgICAgIGZ1bmN0aW9uIFB1KGUpIHtcbiAgICAgICAgZS5kaXNwbGF5LnNjcm9sbGJhcnMgJiYgKGUuZGlzcGxheS5zY3JvbGxiYXJzLmNsZWFyKCksIGUuZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNzICYmIE4oZS5kaXNwbGF5LndyYXBwZXIsIGUuZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNzKSksIGUuZGlzcGxheS5zY3JvbGxiYXJzID0gbmV3IE91W2Uub3B0aW9ucy5zY3JvbGxiYXJTdHlsZV0oZnVuY3Rpb24obikge1xuICAgICAgICAgIGUuZGlzcGxheS53cmFwcGVyLmluc2VydEJlZm9yZShuLCBlLmRpc3BsYXkuc2Nyb2xsYmFyRmlsbGVyKSwgbmUobiwgXCJtb3VzZWRvd25cIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBlLnN0YXRlLmZvY3VzZWQgJiYgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGUuZGlzcGxheS5pbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfSksIG4uc2V0QXR0cmlidXRlKFwiY20tbm90LWNvbnRlbnRcIiwgXCJ0cnVlXCIpO1xuICAgICAgICB9LCBmdW5jdGlvbihuLCBsKSB7XG4gICAgICAgICAgbCA9PSBcImhvcml6b250YWxcIiA/IEhyKGUsIG4pIDogamkoZSwgbik7XG4gICAgICAgIH0sIGUpLCBlLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyAmJiBKKGUuZGlzcGxheS53cmFwcGVyLCBlLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyk7XG4gICAgICB9XG4gICAgICB2YXIgc3AgPSAwO1xuICAgICAgZnVuY3Rpb24ga3IoZSkge1xuICAgICAgICBlLmN1ck9wID0ge1xuICAgICAgICAgIGNtOiBlLFxuICAgICAgICAgIHZpZXdDaGFuZ2VkOiAhMSxcbiAgICAgICAgICBzdGFydEhlaWdodDogZS5kb2MuaGVpZ2h0LFxuICAgICAgICAgIGZvcmNlVXBkYXRlOiAhMSxcbiAgICAgICAgICB1cGRhdGVJbnB1dDogMCxcbiAgICAgICAgICB0eXBpbmc6ICExLFxuICAgICAgICAgIGNoYW5nZU9ianM6IG51bGwsXG4gICAgICAgICAgY3Vyc29yQWN0aXZpdHlIYW5kbGVyczogbnVsbCxcbiAgICAgICAgICBjdXJzb3JBY3Rpdml0eUNhbGxlZDogMCxcbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAhMSxcbiAgICAgICAgICB1cGRhdGVNYXhMaW5lOiAhMSxcbiAgICAgICAgICBzY3JvbGxMZWZ0OiBudWxsLFxuICAgICAgICAgIHNjcm9sbFRvcDogbnVsbCxcbiAgICAgICAgICBzY3JvbGxUb1BvczogbnVsbCxcbiAgICAgICAgICBmb2N1czogITEsXG4gICAgICAgICAgaWQ6ICsrc3AsXG4gICAgICAgICAgbWFya0FycmF5czogbnVsbFxuICAgICAgICB9LCBrYyhlLmN1ck9wKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGpyKGUpIHtcbiAgICAgICAgdmFyIG4gPSBlLmN1ck9wO1xuICAgICAgICBuICYmIFVjKG4sIGZ1bmN0aW9uKGwpIHtcbiAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGwub3BzLmxlbmd0aDsgYSsrKVxuICAgICAgICAgICAgbC5vcHNbYV0uY20uY3VyT3AgPSBudWxsO1xuICAgICAgICAgIHVwKGwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHVwKGUpIHtcbiAgICAgICAgZm9yICh2YXIgbiA9IGUub3BzLCBsID0gMDsgbCA8IG4ubGVuZ3RoOyBsKyspXG4gICAgICAgICAgZnAobltsXSk7XG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgbi5sZW5ndGg7IGErKylcbiAgICAgICAgICBkcChuW2FdKTtcbiAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCBuLmxlbmd0aDsgdSsrKVxuICAgICAgICAgIGNwKG5bdV0pO1xuICAgICAgICBmb3IgKHZhciBnID0gMDsgZyA8IG4ubGVuZ3RoOyBnKyspXG4gICAgICAgICAgcHAobltnXSk7XG4gICAgICAgIGZvciAodmFyIE8gPSAwOyBPIDwgbi5sZW5ndGg7IE8rKylcbiAgICAgICAgICBocChuW09dKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGZwKGUpIHtcbiAgICAgICAgdmFyIG4gPSBlLmNtLCBsID0gbi5kaXNwbGF5O1xuICAgICAgICBtcChuKSwgZS51cGRhdGVNYXhMaW5lICYmIFFhKG4pLCBlLm11c3RVcGRhdGUgPSBlLnZpZXdDaGFuZ2VkIHx8IGUuZm9yY2VVcGRhdGUgfHwgZS5zY3JvbGxUb3AgIT0gbnVsbCB8fCBlLnNjcm9sbFRvUG9zICYmIChlLnNjcm9sbFRvUG9zLmZyb20ubGluZSA8IGwudmlld0Zyb20gfHwgZS5zY3JvbGxUb1Bvcy50by5saW5lID49IGwudmlld1RvKSB8fCBsLm1heExpbmVDaGFuZ2VkICYmIG4ub3B0aW9ucy5saW5lV3JhcHBpbmcsIGUudXBkYXRlID0gZS5tdXN0VXBkYXRlICYmIG5ldyBRbyhuLCBlLm11c3RVcGRhdGUgJiYgeyB0b3A6IGUuc2Nyb2xsVG9wLCBlbnN1cmU6IGUuc2Nyb2xsVG9Qb3MgfSwgZS5mb3JjZVVwZGF0ZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBkcChlKSB7XG4gICAgICAgIGUudXBkYXRlZERpc3BsYXkgPSBlLm11c3RVcGRhdGUgJiYgZmwoZS5jbSwgZS51cGRhdGUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gY3AoZSkge1xuICAgICAgICB2YXIgbiA9IGUuY20sIGwgPSBuLmRpc3BsYXk7XG4gICAgICAgIGUudXBkYXRlZERpc3BsYXkgJiYgVm8obiksIGUuYmFyTWVhc3VyZSA9IFVpKG4pLCBsLm1heExpbmVDaGFuZ2VkICYmICFuLm9wdGlvbnMubGluZVdyYXBwaW5nICYmIChlLmFkanVzdFdpZHRoVG8gPSBwdShuLCBsLm1heExpbmUsIGwubWF4TGluZS50ZXh0Lmxlbmd0aCkubGVmdCArIDMsIG4uZGlzcGxheS5zaXplcldpZHRoID0gZS5hZGp1c3RXaWR0aFRvLCBlLmJhck1lYXN1cmUuc2Nyb2xsV2lkdGggPSBNYXRoLm1heChsLnNjcm9sbGVyLmNsaWVudFdpZHRoLCBsLnNpemVyLm9mZnNldExlZnQgKyBlLmFkanVzdFdpZHRoVG8gKyBXbihuKSArIG4uZGlzcGxheS5iYXJXaWR0aCksIGUubWF4U2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIGwuc2l6ZXIub2Zmc2V0TGVmdCArIGUuYWRqdXN0V2lkdGhUbyAtIFByKG4pKSksIChlLnVwZGF0ZWREaXNwbGF5IHx8IGUuc2VsZWN0aW9uQ2hhbmdlZCkgJiYgKGUucHJlcGFyZWRTZWxlY3Rpb24gPSBsLmlucHV0LnByZXBhcmVTZWxlY3Rpb24oKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwcChlKSB7XG4gICAgICAgIHZhciBuID0gZS5jbTtcbiAgICAgICAgZS5hZGp1c3RXaWR0aFRvICE9IG51bGwgJiYgKG4uZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aCA9IGUuYWRqdXN0V2lkdGhUbyArIFwicHhcIiwgZS5tYXhTY3JvbGxMZWZ0IDwgbi5kb2Muc2Nyb2xsTGVmdCAmJiBIcihuLCBNYXRoLm1pbihuLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgZS5tYXhTY3JvbGxMZWZ0KSwgITApLCBuLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSAhMSk7XG4gICAgICAgIHZhciBsID0gZS5mb2N1cyAmJiBlLmZvY3VzID09IFgodmUobikpO1xuICAgICAgICBlLnByZXBhcmVkU2VsZWN0aW9uICYmIG4uZGlzcGxheS5pbnB1dC5zaG93U2VsZWN0aW9uKGUucHJlcGFyZWRTZWxlY3Rpb24sIGwpLCAoZS51cGRhdGVkRGlzcGxheSB8fCBlLnN0YXJ0SGVpZ2h0ICE9IG4uZG9jLmhlaWdodCkgJiYgb2kobiwgZS5iYXJNZWFzdXJlKSwgZS51cGRhdGVkRGlzcGxheSAmJiBwbChuLCBlLmJhck1lYXN1cmUpLCBlLnNlbGVjdGlvbkNoYW5nZWQgJiYgb2wobiksIG4uc3RhdGUuZm9jdXNlZCAmJiBlLnVwZGF0ZUlucHV0ICYmIG4uZGlzcGxheS5pbnB1dC5yZXNldChlLnR5cGluZyksIGwgJiYgRHUoZS5jbSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBocChlKSB7XG4gICAgICAgIHZhciBuID0gZS5jbSwgbCA9IG4uZGlzcGxheSwgYSA9IG4uZG9jO1xuICAgICAgICBpZiAoZS51cGRhdGVkRGlzcGxheSAmJiBGdShuLCBlLnVwZGF0ZSksIGwud2hlZWxTdGFydFggIT0gbnVsbCAmJiAoZS5zY3JvbGxUb3AgIT0gbnVsbCB8fCBlLnNjcm9sbExlZnQgIT0gbnVsbCB8fCBlLnNjcm9sbFRvUG9zKSAmJiAobC53aGVlbFN0YXJ0WCA9IGwud2hlZWxTdGFydFkgPSBudWxsKSwgZS5zY3JvbGxUb3AgIT0gbnVsbCAmJiBJdShuLCBlLnNjcm9sbFRvcCwgZS5mb3JjZVNjcm9sbCksIGUuc2Nyb2xsTGVmdCAhPSBudWxsICYmIEhyKG4sIGUuc2Nyb2xsTGVmdCwgITAsICEwKSwgZS5zY3JvbGxUb1Bvcykge1xuICAgICAgICAgIHZhciB1ID0gb3AoXG4gICAgICAgICAgICBuLFxuICAgICAgICAgICAgVmUoYSwgZS5zY3JvbGxUb1Bvcy5mcm9tKSxcbiAgICAgICAgICAgIFZlKGEsIGUuc2Nyb2xsVG9Qb3MudG8pLFxuICAgICAgICAgICAgZS5zY3JvbGxUb1Bvcy5tYXJnaW5cbiAgICAgICAgICApO1xuICAgICAgICAgIGlwKG4sIHUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBnID0gZS5tYXliZUhpZGRlbk1hcmtlcnMsIE8gPSBlLm1heWJlVW5oaWRkZW5NYXJrZXJzO1xuICAgICAgICBpZiAoZylcbiAgICAgICAgICBmb3IgKHZhciBMID0gMDsgTCA8IGcubGVuZ3RoOyArK0wpXG4gICAgICAgICAgICBnW0xdLmxpbmVzLmxlbmd0aCB8fCBQZShnW0xdLCBcImhpZGVcIik7XG4gICAgICAgIGlmIChPKVxuICAgICAgICAgIGZvciAodmFyIEggPSAwOyBIIDwgTy5sZW5ndGg7ICsrSClcbiAgICAgICAgICAgIE9bSF0ubGluZXMubGVuZ3RoICYmIFBlKE9bSF0sIFwidW5oaWRlXCIpO1xuICAgICAgICBsLndyYXBwZXIub2Zmc2V0SGVpZ2h0ICYmIChhLnNjcm9sbFRvcCA9IG4uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3ApLCBlLmNoYW5nZU9ianMgJiYgUGUobiwgXCJjaGFuZ2VzXCIsIG4sIGUuY2hhbmdlT2JqcyksIGUudXBkYXRlICYmIGUudXBkYXRlLmZpbmlzaCgpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZG4oZSwgbikge1xuICAgICAgICBpZiAoZS5jdXJPcClcbiAgICAgICAgICByZXR1cm4gbigpO1xuICAgICAgICBrcihlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGpyKGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiAkdChlLCBuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoZS5jdXJPcClcbiAgICAgICAgICAgIHJldHVybiBuLmFwcGx5KGUsIGFyZ3VtZW50cyk7XG4gICAgICAgICAga3IoZSk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuLmFwcGx5KGUsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGpyKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEp0KGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICh0aGlzLmN1ck9wKVxuICAgICAgICAgICAgcmV0dXJuIGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICBrcih0aGlzKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAganIodGhpcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24ga3QoZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIG4gPSB0aGlzLmNtO1xuICAgICAgICAgIGlmICghbiB8fCBuLmN1ck9wKVxuICAgICAgICAgICAgcmV0dXJuIGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICBrcihuKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAganIobik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gVmkoZSwgbikge1xuICAgICAgICBlLmRvYy5oaWdobGlnaHRGcm9udGllciA8IGUuZGlzcGxheS52aWV3VG8gJiYgZS5zdGF0ZS5oaWdobGlnaHQuc2V0KG4sIG1lKHZwLCBlKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB2cChlKSB7XG4gICAgICAgIHZhciBuID0gZS5kb2M7XG4gICAgICAgIGlmICghKG4uaGlnaGxpZ2h0RnJvbnRpZXIgPj0gZS5kaXNwbGF5LnZpZXdUbykpIHtcbiAgICAgICAgICB2YXIgbCA9ICtuZXcgRGF0ZSgpICsgZS5vcHRpb25zLndvcmtUaW1lLCBhID0gT2koZSwgbi5oaWdobGlnaHRGcm9udGllciksIHUgPSBbXTtcbiAgICAgICAgICBuLml0ZXIoYS5saW5lLCBNYXRoLm1pbihuLmZpcnN0ICsgbi5zaXplLCBlLmRpc3BsYXkudmlld1RvICsgNTAwKSwgZnVuY3Rpb24oZykge1xuICAgICAgICAgICAgaWYgKGEubGluZSA+PSBlLmRpc3BsYXkudmlld0Zyb20pIHtcbiAgICAgICAgICAgICAgdmFyIE8gPSBnLnN0eWxlcywgTCA9IGcudGV4dC5sZW5ndGggPiBlLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoID8gcW4obi5tb2RlLCBhLnN0YXRlKSA6IG51bGwsIEggPSBVcyhlLCBnLCBhLCAhMCk7XG4gICAgICAgICAgICAgIEwgJiYgKGEuc3RhdGUgPSBMKSwgZy5zdHlsZXMgPSBILnN0eWxlcztcbiAgICAgICAgICAgICAgdmFyIFUgPSBnLnN0eWxlQ2xhc3NlcywgRyA9IEguY2xhc3NlcztcbiAgICAgICAgICAgICAgRyA/IGcuc3R5bGVDbGFzc2VzID0gRyA6IFUgJiYgKGcuc3R5bGVDbGFzc2VzID0gbnVsbCk7XG4gICAgICAgICAgICAgIGZvciAodmFyIFkgPSAhTyB8fCBPLmxlbmd0aCAhPSBnLnN0eWxlcy5sZW5ndGggfHwgVSAhPSBHICYmICghVSB8fCAhRyB8fCBVLmJnQ2xhc3MgIT0gRy5iZ0NsYXNzIHx8IFUudGV4dENsYXNzICE9IEcudGV4dENsYXNzKSwgZWUgPSAwOyAhWSAmJiBlZSA8IE8ubGVuZ3RoOyArK2VlKVxuICAgICAgICAgICAgICAgIFkgPSBPW2VlXSAhPSBnLnN0eWxlc1tlZV07XG4gICAgICAgICAgICAgIFkgJiYgdS5wdXNoKGEubGluZSksIGcuc3RhdGVBZnRlciA9IGEuc2F2ZSgpLCBhLm5leHRMaW5lKCk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgZy50ZXh0Lmxlbmd0aCA8PSBlLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoICYmIGphKGUsIGcudGV4dCwgYSksIGcuc3RhdGVBZnRlciA9IGEubGluZSAlIDUgPT0gMCA/IGEuc2F2ZSgpIDogbnVsbCwgYS5uZXh0TGluZSgpO1xuICAgICAgICAgICAgaWYgKCtuZXcgRGF0ZSgpID4gbClcbiAgICAgICAgICAgICAgcmV0dXJuIFZpKGUsIGUub3B0aW9ucy53b3JrRGVsYXkpLCAhMDtcbiAgICAgICAgICB9KSwgbi5oaWdobGlnaHRGcm9udGllciA9IGEubGluZSwgbi5tb2RlRnJvbnRpZXIgPSBNYXRoLm1heChuLm1vZGVGcm9udGllciwgYS5saW5lKSwgdS5sZW5ndGggJiYgZG4oZSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBnID0gMDsgZyA8IHUubGVuZ3RoOyBnKyspXG4gICAgICAgICAgICAgIHlyKGUsIHVbZ10sIFwidGV4dFwiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIFFvID0gZnVuY3Rpb24oZSwgbiwgbCkge1xuICAgICAgICB2YXIgYSA9IGUuZGlzcGxheTtcbiAgICAgICAgdGhpcy52aWV3cG9ydCA9IG4sIHRoaXMudmlzaWJsZSA9IFdvKGEsIGUuZG9jLCBuKSwgdGhpcy5lZGl0b3JJc0hpZGRlbiA9ICFhLndyYXBwZXIub2Zmc2V0V2lkdGgsIHRoaXMud3JhcHBlckhlaWdodCA9IGEud3JhcHBlci5jbGllbnRIZWlnaHQsIHRoaXMud3JhcHBlcldpZHRoID0gYS53cmFwcGVyLmNsaWVudFdpZHRoLCB0aGlzLm9sZERpc3BsYXlXaWR0aCA9IFByKGUpLCB0aGlzLmZvcmNlID0gbCwgdGhpcy5kaW1zID0gdGwoZSksIHRoaXMuZXZlbnRzID0gW107XG4gICAgICB9O1xuICAgICAgUW8ucHJvdG90eXBlLnNpZ25hbCA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICAgICAgYnQoZSwgbikgJiYgdGhpcy5ldmVudHMucHVzaChhcmd1bWVudHMpO1xuICAgICAgfSwgUW8ucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmb3IgKHZhciBlID0gMDsgZSA8IHRoaXMuZXZlbnRzLmxlbmd0aDsgZSsrKVxuICAgICAgICAgIFBlLmFwcGx5KG51bGwsIHRoaXMuZXZlbnRzW2VdKTtcbiAgICAgIH07XG4gICAgICBmdW5jdGlvbiBtcChlKSB7XG4gICAgICAgIHZhciBuID0gZS5kaXNwbGF5O1xuICAgICAgICAhbi5zY3JvbGxiYXJzQ2xpcHBlZCAmJiBuLnNjcm9sbGVyLm9mZnNldFdpZHRoICYmIChuLm5hdGl2ZUJhcldpZHRoID0gbi5zY3JvbGxlci5vZmZzZXRXaWR0aCAtIG4uc2Nyb2xsZXIuY2xpZW50V2lkdGgsIG4uaGVpZ2h0Rm9yY2VyLnN0eWxlLmhlaWdodCA9IFduKGUpICsgXCJweFwiLCBuLnNpemVyLnN0eWxlLm1hcmdpbkJvdHRvbSA9IC1uLm5hdGl2ZUJhcldpZHRoICsgXCJweFwiLCBuLnNpemVyLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBXbihlKSArIFwicHhcIiwgbi5zY3JvbGxiYXJzQ2xpcHBlZCA9ICEwKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGdwKGUpIHtcbiAgICAgICAgaWYgKGUuaGFzRm9jdXMoKSlcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIG4gPSBYKHZlKGUpKTtcbiAgICAgICAgaWYgKCFuIHx8ICFRKGUuZGlzcGxheS5saW5lRGl2LCBuKSlcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIGwgPSB7IGFjdGl2ZUVsdDogbiB9O1xuICAgICAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuICAgICAgICAgIHZhciBhID0gc2UoZSkuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgYS5hbmNob3JOb2RlICYmIGEuZXh0ZW5kICYmIFEoZS5kaXNwbGF5LmxpbmVEaXYsIGEuYW5jaG9yTm9kZSkgJiYgKGwuYW5jaG9yTm9kZSA9IGEuYW5jaG9yTm9kZSwgbC5hbmNob3JPZmZzZXQgPSBhLmFuY2hvck9mZnNldCwgbC5mb2N1c05vZGUgPSBhLmZvY3VzTm9kZSwgbC5mb2N1c09mZnNldCA9IGEuZm9jdXNPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24geXAoZSkge1xuICAgICAgICBpZiAoISghZSB8fCAhZS5hY3RpdmVFbHQgfHwgZS5hY3RpdmVFbHQgPT0gWChlLmFjdGl2ZUVsdC5vd25lckRvY3VtZW50KSkgJiYgKGUuYWN0aXZlRWx0LmZvY3VzKCksICEvXihJTlBVVHxURVhUQVJFQSkkLy50ZXN0KGUuYWN0aXZlRWx0Lm5vZGVOYW1lKSAmJiBlLmFuY2hvck5vZGUgJiYgUShkb2N1bWVudC5ib2R5LCBlLmFuY2hvck5vZGUpICYmIFEoZG9jdW1lbnQuYm9keSwgZS5mb2N1c05vZGUpKSkge1xuICAgICAgICAgIHZhciBuID0gZS5hY3RpdmVFbHQub3duZXJEb2N1bWVudCwgbCA9IG4uZGVmYXVsdFZpZXcuZ2V0U2VsZWN0aW9uKCksIGEgPSBuLmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgYS5zZXRFbmQoZS5hbmNob3JOb2RlLCBlLmFuY2hvck9mZnNldCksIGEuY29sbGFwc2UoITEpLCBsLnJlbW92ZUFsbFJhbmdlcygpLCBsLmFkZFJhbmdlKGEpLCBsLmV4dGVuZChlLmZvY3VzTm9kZSwgZS5mb2N1c09mZnNldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGZsKGUsIG4pIHtcbiAgICAgICAgdmFyIGwgPSBlLmRpc3BsYXksIGEgPSBlLmRvYztcbiAgICAgICAgaWYgKG4uZWRpdG9ySXNIaWRkZW4pXG4gICAgICAgICAgcmV0dXJuIEFyKGUpLCAhMTtcbiAgICAgICAgaWYgKCFuLmZvcmNlICYmIG4udmlzaWJsZS5mcm9tID49IGwudmlld0Zyb20gJiYgbi52aXNpYmxlLnRvIDw9IGwudmlld1RvICYmIChsLnVwZGF0ZUxpbmVOdW1iZXJzID09IG51bGwgfHwgbC51cGRhdGVMaW5lTnVtYmVycyA+PSBsLnZpZXdUbykgJiYgbC5yZW5kZXJlZFZpZXcgPT0gbC52aWV3ICYmIHd1KGUpID09IDApXG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICBCdShlKSAmJiAoQXIoZSksIG4uZGltcyA9IHRsKGUpKTtcbiAgICAgICAgdmFyIHUgPSBhLmZpcnN0ICsgYS5zaXplLCBnID0gTWF0aC5tYXgobi52aXNpYmxlLmZyb20gLSBlLm9wdGlvbnMudmlld3BvcnRNYXJnaW4sIGEuZmlyc3QpLCBPID0gTWF0aC5taW4odSwgbi52aXNpYmxlLnRvICsgZS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTtcbiAgICAgICAgbC52aWV3RnJvbSA8IGcgJiYgZyAtIGwudmlld0Zyb20gPCAyMCAmJiAoZyA9IE1hdGgubWF4KGEuZmlyc3QsIGwudmlld0Zyb20pKSwgbC52aWV3VG8gPiBPICYmIGwudmlld1RvIC0gTyA8IDIwICYmIChPID0gTWF0aC5taW4odSwgbC52aWV3VG8pKSwgZXIgJiYgKGcgPSBXYShlLmRvYywgZyksIE8gPSB0dShlLmRvYywgTykpO1xuICAgICAgICB2YXIgTCA9IGcgIT0gbC52aWV3RnJvbSB8fCBPICE9IGwudmlld1RvIHx8IGwubGFzdFdyYXBIZWlnaHQgIT0gbi53cmFwcGVySGVpZ2h0IHx8IGwubGFzdFdyYXBXaWR0aCAhPSBuLndyYXBwZXJXaWR0aDtcbiAgICAgICAgbnAoZSwgZywgTyksIGwudmlld09mZnNldCA9IHRyKEZlKGUuZG9jLCBsLnZpZXdGcm9tKSksIGUuZGlzcGxheS5tb3Zlci5zdHlsZS50b3AgPSBsLnZpZXdPZmZzZXQgKyBcInB4XCI7XG4gICAgICAgIHZhciBIID0gd3UoZSk7XG4gICAgICAgIGlmICghTCAmJiBIID09IDAgJiYgIW4uZm9yY2UgJiYgbC5yZW5kZXJlZFZpZXcgPT0gbC52aWV3ICYmIChsLnVwZGF0ZUxpbmVOdW1iZXJzID09IG51bGwgfHwgbC51cGRhdGVMaW5lTnVtYmVycyA+PSBsLnZpZXdUbykpXG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB2YXIgVSA9IGdwKGUpO1xuICAgICAgICByZXR1cm4gSCA+IDQgJiYgKGwubGluZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCIpLCBBcChlLCBsLnVwZGF0ZUxpbmVOdW1iZXJzLCBuLmRpbXMpLCBIID4gNCAmJiAobC5saW5lRGl2LnN0eWxlLmRpc3BsYXkgPSBcIlwiKSwgbC5yZW5kZXJlZFZpZXcgPSBsLnZpZXcsIHlwKFUpLCBQKGwuY3Vyc29yRGl2KSwgUChsLnNlbGVjdGlvbkRpdiksIGwuZ3V0dGVycy5zdHlsZS5oZWlnaHQgPSBsLnNpemVyLnN0eWxlLm1pbkhlaWdodCA9IDAsIEwgJiYgKGwubGFzdFdyYXBIZWlnaHQgPSBuLndyYXBwZXJIZWlnaHQsIGwubGFzdFdyYXBXaWR0aCA9IG4ud3JhcHBlcldpZHRoLCBWaShlLCA0MDApKSwgbC51cGRhdGVMaW5lTnVtYmVycyA9IG51bGwsICEwO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gRnUoZSwgbikge1xuICAgICAgICBmb3IgKHZhciBsID0gbi52aWV3cG9ydCwgYSA9ICEwOyA7IGEgPSAhMSkge1xuICAgICAgICAgIGlmICghYSB8fCAhZS5vcHRpb25zLmxpbmVXcmFwcGluZyB8fCBuLm9sZERpc3BsYXlXaWR0aCA9PSBQcihlKSkge1xuICAgICAgICAgICAgaWYgKGwgJiYgbC50b3AgIT0gbnVsbCAmJiAobCA9IHsgdG9wOiBNYXRoLm1pbihlLmRvYy5oZWlnaHQgKyBLYShlLmRpc3BsYXkpIC0gWGEoZSksIGwudG9wKSB9KSwgbi52aXNpYmxlID0gV28oZS5kaXNwbGF5LCBlLmRvYywgbCksIG4udmlzaWJsZS5mcm9tID49IGUuZGlzcGxheS52aWV3RnJvbSAmJiBuLnZpc2libGUudG8gPD0gZS5kaXNwbGF5LnZpZXdUbylcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICBhICYmIChuLnZpc2libGUgPSBXbyhlLmRpc3BsYXksIGUuZG9jLCBsKSk7XG4gICAgICAgICAgaWYgKCFmbChlLCBuKSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIFZvKGUpO1xuICAgICAgICAgIHZhciB1ID0gVWkoZSk7XG4gICAgICAgICAgJGkoZSksIG9pKGUsIHUpLCBwbChlLCB1KSwgbi5mb3JjZSA9ICExO1xuICAgICAgICB9XG4gICAgICAgIG4uc2lnbmFsKGUsIFwidXBkYXRlXCIsIGUpLCAoZS5kaXNwbGF5LnZpZXdGcm9tICE9IGUuZGlzcGxheS5yZXBvcnRlZFZpZXdGcm9tIHx8IGUuZGlzcGxheS52aWV3VG8gIT0gZS5kaXNwbGF5LnJlcG9ydGVkVmlld1RvKSAmJiAobi5zaWduYWwoZSwgXCJ2aWV3cG9ydENoYW5nZVwiLCBlLCBlLmRpc3BsYXkudmlld0Zyb20sIGUuZGlzcGxheS52aWV3VG8pLCBlLmRpc3BsYXkucmVwb3J0ZWRWaWV3RnJvbSA9IGUuZGlzcGxheS52aWV3RnJvbSwgZS5kaXNwbGF5LnJlcG9ydGVkVmlld1RvID0gZS5kaXNwbGF5LnZpZXdUbyk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBkbChlLCBuKSB7XG4gICAgICAgIHZhciBsID0gbmV3IFFvKGUsIG4pO1xuICAgICAgICBpZiAoZmwoZSwgbCkpIHtcbiAgICAgICAgICBWbyhlKSwgRnUoZSwgbCk7XG4gICAgICAgICAgdmFyIGEgPSBVaShlKTtcbiAgICAgICAgICAkaShlKSwgb2koZSwgYSksIHBsKGUsIGEpLCBsLmZpbmlzaCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBBcChlLCBuLCBsKSB7XG4gICAgICAgIHZhciBhID0gZS5kaXNwbGF5LCB1ID0gZS5vcHRpb25zLmxpbmVOdW1iZXJzLCBnID0gYS5saW5lRGl2LCBPID0gZy5maXJzdENoaWxkO1xuICAgICAgICBmdW5jdGlvbiBMKGFlKSB7XG4gICAgICAgICAgdmFyIGNlID0gYWUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgcmV0dXJuIGIgJiYgTSAmJiBlLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0ID09IGFlID8gYWUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiIDogYWUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhZSksIGNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIEggPSBhLnZpZXcsIFUgPSBhLnZpZXdGcm9tLCBHID0gMDsgRyA8IEgubGVuZ3RoOyBHKyspIHtcbiAgICAgICAgICB2YXIgWSA9IEhbR107XG4gICAgICAgICAgaWYgKCFZLmhpZGRlbilcbiAgICAgICAgICAgIGlmICghWS5ub2RlIHx8IFkubm9kZS5wYXJlbnROb2RlICE9IGcpIHtcbiAgICAgICAgICAgICAgdmFyIGVlID0gUWMoZSwgWSwgVSwgbCk7XG4gICAgICAgICAgICAgIGcuaW5zZXJ0QmVmb3JlKGVlLCBPKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvciAoOyBPICE9IFkubm9kZTsgKVxuICAgICAgICAgICAgICAgIE8gPSBMKE8pO1xuICAgICAgICAgICAgICB2YXIgXyA9IHUgJiYgbiAhPSBudWxsICYmIG4gPD0gVSAmJiBZLmxpbmVOdW1iZXI7XG4gICAgICAgICAgICAgIFkuY2hhbmdlcyAmJiAodGUoWS5jaGFuZ2VzLCBcImd1dHRlclwiKSA+IC0xICYmIChfID0gITEpLCBhdShlLCBZLCBVLCBsKSksIF8gJiYgKFAoWS5saW5lTnVtYmVyKSwgWS5saW5lTnVtYmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKEsoZS5vcHRpb25zLCBVKSkpKSwgTyA9IFkubm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBVICs9IFkuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKDsgTzsgKVxuICAgICAgICAgIE8gPSBMKE8pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gY2woZSkge1xuICAgICAgICB2YXIgbiA9IGUuZ3V0dGVycy5vZmZzZXRXaWR0aDtcbiAgICAgICAgZS5zaXplci5zdHlsZS5tYXJnaW5MZWZ0ID0gbiArIFwicHhcIiwgSHQoZSwgXCJndXR0ZXJDaGFuZ2VkXCIsIGUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcGwoZSwgbikge1xuICAgICAgICBlLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0gbi5kb2NIZWlnaHQgKyBcInB4XCIsIGUuZGlzcGxheS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wID0gbi5kb2NIZWlnaHQgKyBcInB4XCIsIGUuZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IG4uZG9jSGVpZ2h0ICsgZS5kaXNwbGF5LmJhckhlaWdodCArIFduKGUpICsgXCJweFwiO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gTHUoZSkge1xuICAgICAgICB2YXIgbiA9IGUuZGlzcGxheSwgbCA9IG4udmlldztcbiAgICAgICAgaWYgKCEoIW4uYWxpZ25XaWRnZXRzICYmICghbi5ndXR0ZXJzLmZpcnN0Q2hpbGQgfHwgIWUub3B0aW9ucy5maXhlZEd1dHRlcikpKSB7XG4gICAgICAgICAgZm9yICh2YXIgYSA9IG5sKG4pIC0gbi5zY3JvbGxlci5zY3JvbGxMZWZ0ICsgZS5kb2Muc2Nyb2xsTGVmdCwgdSA9IG4uZ3V0dGVycy5vZmZzZXRXaWR0aCwgZyA9IGEgKyBcInB4XCIsIE8gPSAwOyBPIDwgbC5sZW5ndGg7IE8rKylcbiAgICAgICAgICAgIGlmICghbFtPXS5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgZS5vcHRpb25zLmZpeGVkR3V0dGVyICYmIChsW09dLmd1dHRlciAmJiAobFtPXS5ndXR0ZXIuc3R5bGUubGVmdCA9IGcpLCBsW09dLmd1dHRlckJhY2tncm91bmQgJiYgKGxbT10uZ3V0dGVyQmFja2dyb3VuZC5zdHlsZS5sZWZ0ID0gZykpO1xuICAgICAgICAgICAgICB2YXIgTCA9IGxbT10uYWxpZ25hYmxlO1xuICAgICAgICAgICAgICBpZiAoTClcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBIID0gMDsgSCA8IEwubGVuZ3RoOyBIKyspXG4gICAgICAgICAgICAgICAgICBMW0hdLnN0eWxlLmxlZnQgPSBnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGUub3B0aW9ucy5maXhlZEd1dHRlciAmJiAobi5ndXR0ZXJzLnN0eWxlLmxlZnQgPSBhICsgdSArIFwicHhcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEJ1KGUpIHtcbiAgICAgICAgaWYgKCFlLm9wdGlvbnMubGluZU51bWJlcnMpXG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB2YXIgbiA9IGUuZG9jLCBsID0gSyhlLm9wdGlvbnMsIG4uZmlyc3QgKyBuLnNpemUgLSAxKSwgYSA9IGUuZGlzcGxheTtcbiAgICAgICAgaWYgKGwubGVuZ3RoICE9IGEubGluZU51bUNoYXJzKSB7XG4gICAgICAgICAgdmFyIHUgPSBhLm1lYXN1cmUuYXBwZW5kQ2hpbGQoSShcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICBbSShcImRpdlwiLCBsKV0sXG4gICAgICAgICAgICBcIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHRcIlxuICAgICAgICAgICkpLCBnID0gdS5maXJzdENoaWxkLm9mZnNldFdpZHRoLCBPID0gdS5vZmZzZXRXaWR0aCAtIGc7XG4gICAgICAgICAgcmV0dXJuIGEubGluZUd1dHRlci5zdHlsZS53aWR0aCA9IFwiXCIsIGEubGluZU51bUlubmVyV2lkdGggPSBNYXRoLm1heChnLCBhLmxpbmVHdXR0ZXIub2Zmc2V0V2lkdGggLSBPKSArIDEsIGEubGluZU51bVdpZHRoID0gYS5saW5lTnVtSW5uZXJXaWR0aCArIE8sIGEubGluZU51bUNoYXJzID0gYS5saW5lTnVtSW5uZXJXaWR0aCA/IGwubGVuZ3RoIDogLTEsIGEubGluZUd1dHRlci5zdHlsZS53aWR0aCA9IGEubGluZU51bVdpZHRoICsgXCJweFwiLCBjbChlLmRpc3BsYXkpLCAhMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBobChlLCBuKSB7XG4gICAgICAgIGZvciAodmFyIGwgPSBbXSwgYSA9ICExLCB1ID0gMDsgdSA8IGUubGVuZ3RoOyB1KyspIHtcbiAgICAgICAgICB2YXIgZyA9IGVbdV0sIE8gPSBudWxsO1xuICAgICAgICAgIGlmICh0eXBlb2YgZyAhPSBcInN0cmluZ1wiICYmIChPID0gZy5zdHlsZSwgZyA9IGcuY2xhc3NOYW1lKSwgZyA9PSBcIkNvZGVNaXJyb3ItbGluZW51bWJlcnNcIilcbiAgICAgICAgICAgIGlmIChuKVxuICAgICAgICAgICAgICBhID0gITA7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIGwucHVzaCh7IGNsYXNzTmFtZTogZywgc3R5bGU6IE8gfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG4gJiYgIWEgJiYgbC5wdXNoKHsgY2xhc3NOYW1lOiBcIkNvZGVNaXJyb3ItbGluZW51bWJlcnNcIiwgc3R5bGU6IG51bGwgfSksIGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBIdShlKSB7XG4gICAgICAgIHZhciBuID0gZS5ndXR0ZXJzLCBsID0gZS5ndXR0ZXJTcGVjcztcbiAgICAgICAgUChuKSwgZS5saW5lR3V0dGVyID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBsLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgdmFyIHUgPSBsW2FdLCBnID0gdS5jbGFzc05hbWUsIE8gPSB1LnN0eWxlLCBMID0gbi5hcHBlbmRDaGlsZChJKFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1ndXR0ZXIgXCIgKyBnKSk7XG4gICAgICAgICAgTyAmJiAoTC5zdHlsZS5jc3NUZXh0ID0gTyksIGcgPT0gXCJDb2RlTWlycm9yLWxpbmVudW1iZXJzXCIgJiYgKGUubGluZUd1dHRlciA9IEwsIEwuc3R5bGUud2lkdGggPSAoZS5saW5lTnVtV2lkdGggfHwgMSkgKyBcInB4XCIpO1xuICAgICAgICB9XG4gICAgICAgIG4uc3R5bGUuZGlzcGxheSA9IGwubGVuZ3RoID8gXCJcIiA6IFwibm9uZVwiLCBjbChlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFdpKGUpIHtcbiAgICAgICAgSHUoZS5kaXNwbGF5KSwgdG4oZSksIEx1KGUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gYnAoZSwgbiwgbCwgYSkge1xuICAgICAgICB2YXIgdSA9IHRoaXM7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBsLCB1LnNjcm9sbGJhckZpbGxlciA9IEkoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXJcIiksIHUuc2Nyb2xsYmFyRmlsbGVyLnNldEF0dHJpYnV0ZShcImNtLW5vdC1jb250ZW50XCIsIFwidHJ1ZVwiKSwgdS5ndXR0ZXJGaWxsZXIgPSBJKFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyXCIpLCB1Lmd1dHRlckZpbGxlci5zZXRBdHRyaWJ1dGUoXCJjbS1ub3QtY29udGVudFwiLCBcInRydWVcIiksIHUubGluZURpdiA9IFYoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWNvZGVcIiksIHUuc2VsZWN0aW9uRGl2ID0gSShcImRpdlwiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMVwiKSwgdS5jdXJzb3JEaXYgPSBJKFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1jdXJzb3JzXCIpLCB1Lm1lYXN1cmUgPSBJKFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1tZWFzdXJlXCIpLCB1LmxpbmVNZWFzdXJlID0gSShcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItbWVhc3VyZVwiKSwgdS5saW5lU3BhY2UgPSBWKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgW3UubWVhc3VyZSwgdS5saW5lTWVhc3VyZSwgdS5zZWxlY3Rpb25EaXYsIHUuY3Vyc29yRGl2LCB1LmxpbmVEaXZdLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgXCJwb3NpdGlvbjogcmVsYXRpdmU7IG91dGxpbmU6IG5vbmVcIlxuICAgICAgICApO1xuICAgICAgICB2YXIgZyA9IFYoXCJkaXZcIiwgW3UubGluZVNwYWNlXSwgXCJDb2RlTWlycm9yLWxpbmVzXCIpO1xuICAgICAgICB1Lm1vdmVyID0gSShcImRpdlwiLCBbZ10sIG51bGwsIFwicG9zaXRpb246IHJlbGF0aXZlXCIpLCB1LnNpemVyID0gSShcImRpdlwiLCBbdS5tb3Zlcl0sIFwiQ29kZU1pcnJvci1zaXplclwiKSwgdS5zaXplcldpZHRoID0gbnVsbCwgdS5oZWlnaHRGb3JjZXIgPSBJKFwiZGl2XCIsIG51bGwsIG51bGwsIFwicG9zaXRpb246IGFic29sdXRlOyBoZWlnaHQ6IFwiICsgZ2UgKyBcInB4OyB3aWR0aDogMXB4O1wiKSwgdS5ndXR0ZXJzID0gSShcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItZ3V0dGVyc1wiKSwgdS5saW5lR3V0dGVyID0gbnVsbCwgdS5zY3JvbGxlciA9IEkoXCJkaXZcIiwgW3Uuc2l6ZXIsIHUuaGVpZ2h0Rm9yY2VyLCB1Lmd1dHRlcnNdLCBcIkNvZGVNaXJyb3Itc2Nyb2xsXCIpLCB1LnNjcm9sbGVyLnNldEF0dHJpYnV0ZShcInRhYkluZGV4XCIsIFwiLTFcIiksIHUud3JhcHBlciA9IEkoXCJkaXZcIiwgW3Uuc2Nyb2xsYmFyRmlsbGVyLCB1Lmd1dHRlckZpbGxlciwgdS5zY3JvbGxlcl0sIFwiQ29kZU1pcnJvclwiKSwgdS53cmFwcGVyLnNldEF0dHJpYnV0ZShcInRyYW5zbGF0ZVwiLCBcIm5vXCIpLCBwICYmIHYgPCA4ICYmICh1Lmd1dHRlcnMuc3R5bGUuekluZGV4ID0gLTEsIHUuc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0ID0gMCksICFiICYmICEodCAmJiBDKSAmJiAodS5zY3JvbGxlci5kcmFnZ2FibGUgPSAhMCksIGUgJiYgKGUuYXBwZW5kQ2hpbGQgPyBlLmFwcGVuZENoaWxkKHUud3JhcHBlcikgOiBlKHUud3JhcHBlcikpLCB1LnZpZXdGcm9tID0gdS52aWV3VG8gPSBuLmZpcnN0LCB1LnJlcG9ydGVkVmlld0Zyb20gPSB1LnJlcG9ydGVkVmlld1RvID0gbi5maXJzdCwgdS52aWV3ID0gW10sIHUucmVuZGVyZWRWaWV3ID0gbnVsbCwgdS5leHRlcm5hbE1lYXN1cmVkID0gbnVsbCwgdS52aWV3T2Zmc2V0ID0gMCwgdS5sYXN0V3JhcEhlaWdodCA9IHUubGFzdFdyYXBXaWR0aCA9IDAsIHUudXBkYXRlTGluZU51bWJlcnMgPSBudWxsLCB1Lm5hdGl2ZUJhcldpZHRoID0gdS5iYXJIZWlnaHQgPSB1LmJhcldpZHRoID0gMCwgdS5zY3JvbGxiYXJzQ2xpcHBlZCA9ICExLCB1LmxpbmVOdW1XaWR0aCA9IHUubGluZU51bUlubmVyV2lkdGggPSB1LmxpbmVOdW1DaGFycyA9IG51bGwsIHUuYWxpZ25XaWRnZXRzID0gITEsIHUuY2FjaGVkQ2hhcldpZHRoID0gdS5jYWNoZWRUZXh0SGVpZ2h0ID0gdS5jYWNoZWRQYWRkaW5nSCA9IG51bGwsIHUubWF4TGluZSA9IG51bGwsIHUubWF4TGluZUxlbmd0aCA9IDAsIHUubWF4TGluZUNoYW5nZWQgPSAhMSwgdS53aGVlbERYID0gdS53aGVlbERZID0gdS53aGVlbFN0YXJ0WCA9IHUud2hlZWxTdGFydFkgPSBudWxsLCB1LnNoaWZ0ID0gITEsIHUuc2VsRm9yQ29udGV4dE1lbnUgPSBudWxsLCB1LmFjdGl2ZVRvdWNoID0gbnVsbCwgdS5ndXR0ZXJTcGVjcyA9IGhsKGEuZ3V0dGVycywgYS5saW5lTnVtYmVycyksIEh1KHUpLCBsLmluaXQodSk7XG4gICAgICB9XG4gICAgICB2YXIgWW8gPSAwLCByciA9IG51bGw7XG4gICAgICBwID8gcnIgPSAtMC41MyA6IHQgPyByciA9IDE1IDogRCA/IHJyID0gLTAuNyA6IHggJiYgKHJyID0gLTEgLyAzKTtcbiAgICAgIGZ1bmN0aW9uICR1KGUpIHtcbiAgICAgICAgdmFyIG4gPSBlLndoZWVsRGVsdGFYLCBsID0gZS53aGVlbERlbHRhWTtcbiAgICAgICAgcmV0dXJuIG4gPT0gbnVsbCAmJiBlLmRldGFpbCAmJiBlLmF4aXMgPT0gZS5IT1JJWk9OVEFMX0FYSVMgJiYgKG4gPSBlLmRldGFpbCksIGwgPT0gbnVsbCAmJiBlLmRldGFpbCAmJiBlLmF4aXMgPT0gZS5WRVJUSUNBTF9BWElTID8gbCA9IGUuZGV0YWlsIDogbCA9PSBudWxsICYmIChsID0gZS53aGVlbERlbHRhKSwgeyB4OiBuLCB5OiBsIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBDcChlKSB7XG4gICAgICAgIHZhciBuID0gJHUoZSk7XG4gICAgICAgIHJldHVybiBuLnggKj0gcnIsIG4ueSAqPSByciwgbjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGt1KGUsIG4pIHtcbiAgICAgICAgRCAmJiBUID09IDEwMiAmJiAoZS5kaXNwbGF5LmNocm9tZVNjcm9sbEhhY2sgPT0gbnVsbCA/IGUuZGlzcGxheS5zaXplci5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCIgOiBjbGVhclRpbWVvdXQoZS5kaXNwbGF5LmNocm9tZVNjcm9sbEhhY2spLCBlLmRpc3BsYXkuY2hyb21lU2Nyb2xsSGFjayA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZS5kaXNwbGF5LmNocm9tZVNjcm9sbEhhY2sgPSBudWxsLCBlLmRpc3BsYXkuc2l6ZXIuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiXCI7XG4gICAgICAgIH0sIDEwMCkpO1xuICAgICAgICB2YXIgbCA9ICR1KG4pLCBhID0gbC54LCB1ID0gbC55LCBnID0gcnI7XG4gICAgICAgIG4uZGVsdGFNb2RlID09PSAwICYmIChhID0gbi5kZWx0YVgsIHUgPSBuLmRlbHRhWSwgZyA9IDEpO1xuICAgICAgICB2YXIgTyA9IGUuZGlzcGxheSwgTCA9IE8uc2Nyb2xsZXIsIEggPSBMLnNjcm9sbFdpZHRoID4gTC5jbGllbnRXaWR0aCwgVSA9IEwuc2Nyb2xsSGVpZ2h0ID4gTC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIGlmICghIShhICYmIEggfHwgdSAmJiBVKSkge1xuICAgICAgICAgIGlmICh1ICYmIE0gJiYgYikge1xuICAgICAgICAgICAgZTpcbiAgICAgICAgICAgICAgZm9yICh2YXIgRyA9IG4udGFyZ2V0LCBZID0gTy52aWV3OyBHICE9IEw7IEcgPSBHLnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgZWUgPSAwOyBlZSA8IFkubGVuZ3RoOyBlZSsrKVxuICAgICAgICAgICAgICAgICAgaWYgKFlbZWVdLm5vZGUgPT0gRykge1xuICAgICAgICAgICAgICAgICAgICBlLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0ID0gRztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGEgJiYgIXQgJiYgIW0gJiYgZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB1ICYmIFUgJiYgamkoZSwgTWF0aC5tYXgoMCwgTC5zY3JvbGxUb3AgKyB1ICogZykpLCBIcihlLCBNYXRoLm1heCgwLCBMLnNjcm9sbExlZnQgKyBhICogZykpLCAoIXUgfHwgdSAmJiBVKSAmJiBsdChuKSwgTy53aGVlbFN0YXJ0WCA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1ICYmIGcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIF8gPSB1ICogZywgYWUgPSBlLmRvYy5zY3JvbGxUb3AsIGNlID0gYWUgKyBPLndyYXBwZXIuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgXyA8IDAgPyBhZSA9IE1hdGgubWF4KDAsIGFlICsgXyAtIDUwKSA6IGNlID0gTWF0aC5taW4oZS5kb2MuaGVpZ2h0LCBjZSArIF8gKyA1MCksIGRsKGUsIHsgdG9wOiBhZSwgYm90dG9tOiBjZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgWW8gPCAyMCAmJiBuLmRlbHRhTW9kZSAhPT0gMCAmJiAoTy53aGVlbFN0YXJ0WCA9PSBudWxsID8gKE8ud2hlZWxTdGFydFggPSBMLnNjcm9sbExlZnQsIE8ud2hlZWxTdGFydFkgPSBMLnNjcm9sbFRvcCwgTy53aGVlbERYID0gYSwgTy53aGVlbERZID0gdSwgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChPLndoZWVsU3RhcnRYICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFyIHllID0gTC5zY3JvbGxMZWZ0IC0gTy53aGVlbFN0YXJ0WCwgQ2UgPSBMLnNjcm9sbFRvcCAtIE8ud2hlZWxTdGFydFksIFRlID0gQ2UgJiYgTy53aGVlbERZICYmIENlIC8gTy53aGVlbERZIHx8IHllICYmIE8ud2hlZWxEWCAmJiB5ZSAvIE8ud2hlZWxEWDtcbiAgICAgICAgICAgICAgTy53aGVlbFN0YXJ0WCA9IE8ud2hlZWxTdGFydFkgPSBudWxsLCBUZSAmJiAocnIgPSAocnIgKiBZbyArIFRlKSAvIChZbyArIDEpLCArK1lvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAyMDApKSA6IChPLndoZWVsRFggKz0gYSwgTy53aGVlbERZICs9IHUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIEFuID0gZnVuY3Rpb24oZSwgbikge1xuICAgICAgICB0aGlzLnJhbmdlcyA9IGUsIHRoaXMucHJpbUluZGV4ID0gbjtcbiAgICAgIH07XG4gICAgICBBbi5wcm90b3R5cGUucHJpbWFyeSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYW5nZXNbdGhpcy5wcmltSW5kZXhdO1xuICAgICAgfSwgQW4ucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKGUgPT0gdGhpcylcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIGlmIChlLnByaW1JbmRleCAhPSB0aGlzLnByaW1JbmRleCB8fCBlLnJhbmdlcy5sZW5ndGggIT0gdGhpcy5yYW5nZXMubGVuZ3RoKVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0aGlzLnJhbmdlcy5sZW5ndGg7IG4rKykge1xuICAgICAgICAgIHZhciBsID0gdGhpcy5yYW5nZXNbbl0sIGEgPSBlLnJhbmdlc1tuXTtcbiAgICAgICAgICBpZiAoIXplKGwuYW5jaG9yLCBhLmFuY2hvcikgfHwgIXplKGwuaGVhZCwgYS5oZWFkKSlcbiAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gITA7XG4gICAgICB9LCBBbi5wcm90b3R5cGUuZGVlcENvcHkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZm9yICh2YXIgZSA9IFtdLCBuID0gMDsgbiA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgbisrKVxuICAgICAgICAgIGVbbl0gPSBuZXcgdXQodHQodGhpcy5yYW5nZXNbbl0uYW5jaG9yKSwgdHQodGhpcy5yYW5nZXNbbl0uaGVhZCkpO1xuICAgICAgICByZXR1cm4gbmV3IEFuKGUsIHRoaXMucHJpbUluZGV4KTtcbiAgICAgIH0sIEFuLnByb3RvdHlwZS5zb21ldGhpbmdTZWxlY3RlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmb3IgKHZhciBlID0gMDsgZSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgZSsrKVxuICAgICAgICAgIGlmICghdGhpcy5yYW5nZXNbZV0uZW1wdHkoKSlcbiAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgcmV0dXJuICExO1xuICAgICAgfSwgQW4ucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24oZSwgbikge1xuICAgICAgICBuIHx8IChuID0gZSk7XG4gICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgICB2YXIgYSA9IHRoaXMucmFuZ2VzW2xdO1xuICAgICAgICAgIGlmIChvZShuLCBhLmZyb20oKSkgPj0gMCAmJiBvZShlLCBhLnRvKCkpIDw9IDApXG4gICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9O1xuICAgICAgdmFyIHV0ID0gZnVuY3Rpb24oZSwgbikge1xuICAgICAgICB0aGlzLmFuY2hvciA9IGUsIHRoaXMuaGVhZCA9IG47XG4gICAgICB9O1xuICAgICAgdXQucHJvdG90eXBlLmZyb20gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFB0KHRoaXMuYW5jaG9yLCB0aGlzLmhlYWQpO1xuICAgICAgfSwgdXQucHJvdG90eXBlLnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBydCh0aGlzLmFuY2hvciwgdGhpcy5oZWFkKTtcbiAgICAgIH0sIHV0LnByb3RvdHlwZS5lbXB0eSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFkLmxpbmUgPT0gdGhpcy5hbmNob3IubGluZSAmJiB0aGlzLmhlYWQuY2ggPT0gdGhpcy5hbmNob3IuY2g7XG4gICAgICB9O1xuICAgICAgZnVuY3Rpb24gRm4oZSwgbiwgbCkge1xuICAgICAgICB2YXIgYSA9IGUgJiYgZS5vcHRpb25zLnNlbGVjdGlvbnNNYXlUb3VjaCwgdSA9IG5bbF07XG4gICAgICAgIG4uc29ydChmdW5jdGlvbihlZSwgXykge1xuICAgICAgICAgIHJldHVybiBvZShlZS5mcm9tKCksIF8uZnJvbSgpKTtcbiAgICAgICAgfSksIGwgPSB0ZShuLCB1KTtcbiAgICAgICAgZm9yICh2YXIgZyA9IDE7IGcgPCBuLmxlbmd0aDsgZysrKSB7XG4gICAgICAgICAgdmFyIE8gPSBuW2ddLCBMID0gbltnIC0gMV0sIEggPSBvZShMLnRvKCksIE8uZnJvbSgpKTtcbiAgICAgICAgICBpZiAoYSAmJiAhTy5lbXB0eSgpID8gSCA+IDAgOiBIID49IDApIHtcbiAgICAgICAgICAgIHZhciBVID0gUHQoTC5mcm9tKCksIE8uZnJvbSgpKSwgRyA9IHJ0KEwudG8oKSwgTy50bygpKSwgWSA9IEwuZW1wdHkoKSA/IE8uZnJvbSgpID09IE8uaGVhZCA6IEwuZnJvbSgpID09IEwuaGVhZDtcbiAgICAgICAgICAgIGcgPD0gbCAmJiAtLWwsIG4uc3BsaWNlKC0tZywgMiwgbmV3IHV0KFkgPyBHIDogVSwgWSA/IFUgOiBHKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQW4obiwgbCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBicihlLCBuKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW4oW25ldyB1dChlLCBuIHx8IGUpXSwgMCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBDcihlKSB7XG4gICAgICAgIHJldHVybiBlLnRleHQgPyBxKFxuICAgICAgICAgIGUuZnJvbS5saW5lICsgZS50ZXh0Lmxlbmd0aCAtIDEsXG4gICAgICAgICAgQmUoZS50ZXh0KS5sZW5ndGggKyAoZS50ZXh0Lmxlbmd0aCA9PSAxID8gZS5mcm9tLmNoIDogMClcbiAgICAgICAgKSA6IGUudG87XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBqdShlLCBuKSB7XG4gICAgICAgIGlmIChvZShlLCBuLmZyb20pIDwgMClcbiAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgaWYgKG9lKGUsIG4udG8pIDw9IDApXG4gICAgICAgICAgcmV0dXJuIENyKG4pO1xuICAgICAgICB2YXIgbCA9IGUubGluZSArIG4udGV4dC5sZW5ndGggLSAobi50by5saW5lIC0gbi5mcm9tLmxpbmUpIC0gMSwgYSA9IGUuY2g7XG4gICAgICAgIHJldHVybiBlLmxpbmUgPT0gbi50by5saW5lICYmIChhICs9IENyKG4pLmNoIC0gbi50by5jaCksIHEobCwgYSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB2bChlLCBuKSB7XG4gICAgICAgIGZvciAodmFyIGwgPSBbXSwgYSA9IDA7IGEgPCBlLnNlbC5yYW5nZXMubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICB2YXIgdSA9IGUuc2VsLnJhbmdlc1thXTtcbiAgICAgICAgICBsLnB1c2gobmV3IHV0KFxuICAgICAgICAgICAganUodS5hbmNob3IsIG4pLFxuICAgICAgICAgICAganUodS5oZWFkLCBuKVxuICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBGbihlLmNtLCBsLCBlLnNlbC5wcmltSW5kZXgpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gVXUoZSwgbiwgbCkge1xuICAgICAgICByZXR1cm4gZS5saW5lID09IG4ubGluZSA/IHEobC5saW5lLCBlLmNoIC0gbi5jaCArIGwuY2gpIDogcShsLmxpbmUgKyAoZS5saW5lIC0gbi5saW5lKSwgZS5jaCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBFcChlLCBuLCBsKSB7XG4gICAgICAgIGZvciAodmFyIGEgPSBbXSwgdSA9IHEoZS5maXJzdCwgMCksIGcgPSB1LCBPID0gMDsgTyA8IG4ubGVuZ3RoOyBPKyspIHtcbiAgICAgICAgICB2YXIgTCA9IG5bT10sIEggPSBVdShMLmZyb20sIHUsIGcpLCBVID0gVXUoQ3IoTCksIHUsIGcpO1xuICAgICAgICAgIGlmICh1ID0gTC50bywgZyA9IFUsIGwgPT0gXCJhcm91bmRcIikge1xuICAgICAgICAgICAgdmFyIEcgPSBlLnNlbC5yYW5nZXNbT10sIFkgPSBvZShHLmhlYWQsIEcuYW5jaG9yKSA8IDA7XG4gICAgICAgICAgICBhW09dID0gbmV3IHV0KFkgPyBVIDogSCwgWSA/IEggOiBVKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIGFbT10gPSBuZXcgdXQoSCwgSCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBbihhLCBlLnNlbC5wcmltSW5kZXgpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbWwoZSkge1xuICAgICAgICBlLmRvYy5tb2RlID0gWm4oZS5vcHRpb25zLCBlLmRvYy5tb2RlT3B0aW9uKSwgR2koZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBHaShlKSB7XG4gICAgICAgIGUuZG9jLml0ZXIoZnVuY3Rpb24obikge1xuICAgICAgICAgIG4uc3RhdGVBZnRlciAmJiAobi5zdGF0ZUFmdGVyID0gbnVsbCksIG4uc3R5bGVzICYmIChuLnN0eWxlcyA9IG51bGwpO1xuICAgICAgICB9KSwgZS5kb2MubW9kZUZyb250aWVyID0gZS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXIgPSBlLmRvYy5maXJzdCwgVmkoZSwgMTAwKSwgZS5zdGF0ZS5tb2RlR2VuKyssIGUuY3VyT3AgJiYgdG4oZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB6dShlLCBuKSB7XG4gICAgICAgIHJldHVybiBuLmZyb20uY2ggPT0gMCAmJiBuLnRvLmNoID09IDAgJiYgQmUobi50ZXh0KSA9PSBcIlwiICYmICghZS5jbSB8fCBlLmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGdsKGUsIG4sIGwsIGEpIHtcbiAgICAgICAgZnVuY3Rpb24gdShUZSkge1xuICAgICAgICAgIHJldHVybiBsID8gbFtUZV0gOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGcoVGUsIEVlLCBOZSkge1xuICAgICAgICAgIEljKFRlLCBFZSwgTmUsIGEpLCBIdChUZSwgXCJjaGFuZ2VcIiwgVGUsIG4pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIE8oVGUsIEVlKSB7XG4gICAgICAgICAgZm9yICh2YXIgTmUgPSBbXSwga2UgPSBUZTsga2UgPCBFZTsgKytrZSlcbiAgICAgICAgICAgIE5lLnB1c2gobmV3IHFyKFVba2VdLCB1KGtlKSwgYSkpO1xuICAgICAgICAgIHJldHVybiBOZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgTCA9IG4uZnJvbSwgSCA9IG4udG8sIFUgPSBuLnRleHQsIEcgPSBGZShlLCBMLmxpbmUpLCBZID0gRmUoZSwgSC5saW5lKSwgZWUgPSBCZShVKSwgXyA9IHUoVS5sZW5ndGggLSAxKSwgYWUgPSBILmxpbmUgLSBMLmxpbmU7XG4gICAgICAgIGlmIChuLmZ1bGwpXG4gICAgICAgICAgZS5pbnNlcnQoMCwgTygwLCBVLmxlbmd0aCkpLCBlLnJlbW92ZShVLmxlbmd0aCwgZS5zaXplIC0gVS5sZW5ndGgpO1xuICAgICAgICBlbHNlIGlmICh6dShlLCBuKSkge1xuICAgICAgICAgIHZhciBjZSA9IE8oMCwgVS5sZW5ndGggLSAxKTtcbiAgICAgICAgICBnKFksIFkudGV4dCwgXyksIGFlICYmIGUucmVtb3ZlKEwubGluZSwgYWUpLCBjZS5sZW5ndGggJiYgZS5pbnNlcnQoTC5saW5lLCBjZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoRyA9PSBZKVxuICAgICAgICAgIGlmIChVLmxlbmd0aCA9PSAxKVxuICAgICAgICAgICAgZyhHLCBHLnRleHQuc2xpY2UoMCwgTC5jaCkgKyBlZSArIEcudGV4dC5zbGljZShILmNoKSwgXyk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgeWUgPSBPKDEsIFUubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB5ZS5wdXNoKG5ldyBxcihlZSArIEcudGV4dC5zbGljZShILmNoKSwgXywgYSkpLCBnKEcsIEcudGV4dC5zbGljZSgwLCBMLmNoKSArIFVbMF0sIHUoMCkpLCBlLmluc2VydChMLmxpbmUgKyAxLCB5ZSk7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChVLmxlbmd0aCA9PSAxKVxuICAgICAgICAgIGcoRywgRy50ZXh0LnNsaWNlKDAsIEwuY2gpICsgVVswXSArIFkudGV4dC5zbGljZShILmNoKSwgdSgwKSksIGUucmVtb3ZlKEwubGluZSArIDEsIGFlKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZyhHLCBHLnRleHQuc2xpY2UoMCwgTC5jaCkgKyBVWzBdLCB1KDApKSwgZyhZLCBlZSArIFkudGV4dC5zbGljZShILmNoKSwgXyk7XG4gICAgICAgICAgdmFyIENlID0gTygxLCBVLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIGFlID4gMSAmJiBlLnJlbW92ZShMLmxpbmUgKyAxLCBhZSAtIDEpLCBlLmluc2VydChMLmxpbmUgKyAxLCBDZSk7XG4gICAgICAgIH1cbiAgICAgICAgSHQoZSwgXCJjaGFuZ2VcIiwgZSwgbik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBFcihlLCBuLCBsKSB7XG4gICAgICAgIGZ1bmN0aW9uIGEodSwgZywgTykge1xuICAgICAgICAgIGlmICh1LmxpbmtlZClcbiAgICAgICAgICAgIGZvciAodmFyIEwgPSAwOyBMIDwgdS5saW5rZWQubGVuZ3RoOyArK0wpIHtcbiAgICAgICAgICAgICAgdmFyIEggPSB1LmxpbmtlZFtMXTtcbiAgICAgICAgICAgICAgaWYgKEguZG9jICE9IGcpIHtcbiAgICAgICAgICAgICAgICB2YXIgVSA9IE8gJiYgSC5zaGFyZWRIaXN0O1xuICAgICAgICAgICAgICAgIGwgJiYgIVUgfHwgKG4oSC5kb2MsIFUpLCBhKEguZG9jLCB1LCBVKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhKGUsIG51bGwsICEwKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFZ1KGUsIG4pIHtcbiAgICAgICAgaWYgKG4uY20pXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBkb2N1bWVudCBpcyBhbHJlYWR5IGluIHVzZS5cIik7XG4gICAgICAgIGUuZG9jID0gbiwgbi5jbSA9IGUsIHJsKGUpLCBtbChlKSwgV3UoZSksIGUub3B0aW9ucy5kaXJlY3Rpb24gPSBuLmRpcmVjdGlvbiwgZS5vcHRpb25zLmxpbmVXcmFwcGluZyB8fCBRYShlKSwgZS5vcHRpb25zLm1vZGUgPSBuLm1vZGVPcHRpb24sIHRuKGUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gV3UoZSkge1xuICAgICAgICAoZS5kb2MuZGlyZWN0aW9uID09IFwicnRsXCIgPyBKIDogTikoZS5kaXNwbGF5LmxpbmVEaXYsIFwiQ29kZU1pcnJvci1ydGxcIik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBTcChlKSB7XG4gICAgICAgIGRuKGUsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIFd1KGUpLCB0bihlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBLbyhlKSB7XG4gICAgICAgIHRoaXMuZG9uZSA9IFtdLCB0aGlzLnVuZG9uZSA9IFtdLCB0aGlzLnVuZG9EZXB0aCA9IGUgPyBlLnVuZG9EZXB0aCA6IDEgLyAwLCB0aGlzLmxhc3RNb2RUaW1lID0gdGhpcy5sYXN0U2VsVGltZSA9IDAsIHRoaXMubGFzdE9wID0gdGhpcy5sYXN0U2VsT3AgPSBudWxsLCB0aGlzLmxhc3RPcmlnaW4gPSB0aGlzLmxhc3RTZWxPcmlnaW4gPSBudWxsLCB0aGlzLmdlbmVyYXRpb24gPSB0aGlzLm1heEdlbmVyYXRpb24gPSBlID8gZS5tYXhHZW5lcmF0aW9uIDogMTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHlsKGUsIG4pIHtcbiAgICAgICAgdmFyIGwgPSB7IGZyb206IHR0KG4uZnJvbSksIHRvOiBDcihuKSwgdGV4dDogX24oZSwgbi5mcm9tLCBuLnRvKSB9O1xuICAgICAgICByZXR1cm4gWXUoZSwgbCwgbi5mcm9tLmxpbmUsIG4udG8ubGluZSArIDEpLCBFcihlLCBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgcmV0dXJuIFl1KGEsIGwsIG4uZnJvbS5saW5lLCBuLnRvLmxpbmUgKyAxKTtcbiAgICAgICAgfSwgITApLCBsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gR3UoZSkge1xuICAgICAgICBmb3IgKDsgZS5sZW5ndGg7ICkge1xuICAgICAgICAgIHZhciBuID0gQmUoZSk7XG4gICAgICAgICAgaWYgKG4ucmFuZ2VzKVxuICAgICAgICAgICAgZS5wb3AoKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24geHAoZSwgbikge1xuICAgICAgICBpZiAobilcbiAgICAgICAgICByZXR1cm4gR3UoZS5kb25lKSwgQmUoZS5kb25lKTtcbiAgICAgICAgaWYgKGUuZG9uZS5sZW5ndGggJiYgIUJlKGUuZG9uZSkucmFuZ2VzKVxuICAgICAgICAgIHJldHVybiBCZShlLmRvbmUpO1xuICAgICAgICBpZiAoZS5kb25lLmxlbmd0aCA+IDEgJiYgIWUuZG9uZVtlLmRvbmUubGVuZ3RoIC0gMl0ucmFuZ2VzKVxuICAgICAgICAgIHJldHVybiBlLmRvbmUucG9wKCksIEJlKGUuZG9uZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBRdShlLCBuLCBsLCBhKSB7XG4gICAgICAgIHZhciB1ID0gZS5oaXN0b3J5O1xuICAgICAgICB1LnVuZG9uZS5sZW5ndGggPSAwO1xuICAgICAgICB2YXIgZyA9ICtuZXcgRGF0ZSgpLCBPLCBMO1xuICAgICAgICBpZiAoKHUubGFzdE9wID09IGEgfHwgdS5sYXN0T3JpZ2luID09IG4ub3JpZ2luICYmIG4ub3JpZ2luICYmIChuLm9yaWdpbi5jaGFyQXQoMCkgPT0gXCIrXCIgJiYgdS5sYXN0TW9kVGltZSA+IGcgLSAoZS5jbSA/IGUuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheSA6IDUwMCkgfHwgbi5vcmlnaW4uY2hhckF0KDApID09IFwiKlwiKSkgJiYgKE8gPSB4cCh1LCB1Lmxhc3RPcCA9PSBhKSkpXG4gICAgICAgICAgTCA9IEJlKE8uY2hhbmdlcyksIG9lKG4uZnJvbSwgbi50bykgPT0gMCAmJiBvZShuLmZyb20sIEwudG8pID09IDAgPyBMLnRvID0gQ3IobikgOiBPLmNoYW5nZXMucHVzaCh5bChlLCBuKSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBIID0gQmUodS5kb25lKTtcbiAgICAgICAgICBmb3IgKCghSCB8fCAhSC5yYW5nZXMpICYmIFhvKGUuc2VsLCB1LmRvbmUpLCBPID0ge1xuICAgICAgICAgICAgY2hhbmdlczogW3lsKGUsIG4pXSxcbiAgICAgICAgICAgIGdlbmVyYXRpb246IHUuZ2VuZXJhdGlvblxuICAgICAgICAgIH0sIHUuZG9uZS5wdXNoKE8pOyB1LmRvbmUubGVuZ3RoID4gdS51bmRvRGVwdGg7IClcbiAgICAgICAgICAgIHUuZG9uZS5zaGlmdCgpLCB1LmRvbmVbMF0ucmFuZ2VzIHx8IHUuZG9uZS5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICAgIHUuZG9uZS5wdXNoKGwpLCB1LmdlbmVyYXRpb24gPSArK3UubWF4R2VuZXJhdGlvbiwgdS5sYXN0TW9kVGltZSA9IHUubGFzdFNlbFRpbWUgPSBnLCB1Lmxhc3RPcCA9IHUubGFzdFNlbE9wID0gYSwgdS5sYXN0T3JpZ2luID0gdS5sYXN0U2VsT3JpZ2luID0gbi5vcmlnaW4sIEwgfHwgUGUoZSwgXCJoaXN0b3J5QWRkZWRcIik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB3cChlLCBuLCBsLCBhKSB7XG4gICAgICAgIHZhciB1ID0gbi5jaGFyQXQoMCk7XG4gICAgICAgIHJldHVybiB1ID09IFwiKlwiIHx8IHUgPT0gXCIrXCIgJiYgbC5yYW5nZXMubGVuZ3RoID09IGEucmFuZ2VzLmxlbmd0aCAmJiBsLnNvbWV0aGluZ1NlbGVjdGVkKCkgPT0gYS5zb21ldGhpbmdTZWxlY3RlZCgpICYmIG5ldyBEYXRlKCkgLSBlLmhpc3RvcnkubGFzdFNlbFRpbWUgPD0gKGUuY20gPyBlLmNtLm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXkgOiA1MDApO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gVHAoZSwgbiwgbCwgYSkge1xuICAgICAgICB2YXIgdSA9IGUuaGlzdG9yeSwgZyA9IGEgJiYgYS5vcmlnaW47XG4gICAgICAgIGwgPT0gdS5sYXN0U2VsT3AgfHwgZyAmJiB1Lmxhc3RTZWxPcmlnaW4gPT0gZyAmJiAodS5sYXN0TW9kVGltZSA9PSB1Lmxhc3RTZWxUaW1lICYmIHUubGFzdE9yaWdpbiA9PSBnIHx8IHdwKGUsIGcsIEJlKHUuZG9uZSksIG4pKSA/IHUuZG9uZVt1LmRvbmUubGVuZ3RoIC0gMV0gPSBuIDogWG8obiwgdS5kb25lKSwgdS5sYXN0U2VsVGltZSA9ICtuZXcgRGF0ZSgpLCB1Lmxhc3RTZWxPcmlnaW4gPSBnLCB1Lmxhc3RTZWxPcCA9IGwsIGEgJiYgYS5jbGVhclJlZG8gIT09ICExICYmIEd1KHUudW5kb25lKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFhvKGUsIG4pIHtcbiAgICAgICAgdmFyIGwgPSBCZShuKTtcbiAgICAgICAgbCAmJiBsLnJhbmdlcyAmJiBsLmVxdWFscyhlKSB8fCBuLnB1c2goZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBZdShlLCBuLCBsLCBhKSB7XG4gICAgICAgIHZhciB1ID0gbltcInNwYW5zX1wiICsgZS5pZF0sIGcgPSAwO1xuICAgICAgICBlLml0ZXIoTWF0aC5tYXgoZS5maXJzdCwgbCksIE1hdGgubWluKGUuZmlyc3QgKyBlLnNpemUsIGEpLCBmdW5jdGlvbihPKSB7XG4gICAgICAgICAgTy5tYXJrZWRTcGFucyAmJiAoKHUgfHwgKHUgPSBuW1wic3BhbnNfXCIgKyBlLmlkXSA9IHt9KSlbZ10gPSBPLm1hcmtlZFNwYW5zKSwgKytnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIERwKGUpIHtcbiAgICAgICAgaWYgKCFlKVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBmb3IgKHZhciBuLCBsID0gMDsgbCA8IGUubGVuZ3RoOyArK2wpXG4gICAgICAgICAgZVtsXS5tYXJrZXIuZXhwbGljaXRseUNsZWFyZWQgPyBuIHx8IChuID0gZS5zbGljZSgwLCBsKSkgOiBuICYmIG4ucHVzaChlW2xdKTtcbiAgICAgICAgcmV0dXJuIG4gPyBuLmxlbmd0aCA/IG4gOiBudWxsIDogZTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFJwKGUsIG4pIHtcbiAgICAgICAgdmFyIGwgPSBuW1wic3BhbnNfXCIgKyBlLmlkXTtcbiAgICAgICAgaWYgKCFsKVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBmb3IgKHZhciBhID0gW10sIHUgPSAwOyB1IDwgbi50ZXh0Lmxlbmd0aDsgKyt1KVxuICAgICAgICAgIGEucHVzaChEcChsW3VdKSk7XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gS3UoZSwgbikge1xuICAgICAgICB2YXIgbCA9IFJwKGUsIG4pLCBhID0gemEoZSwgbik7XG4gICAgICAgIGlmICghbClcbiAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgaWYgKCFhKVxuICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IGwubGVuZ3RoOyArK3UpIHtcbiAgICAgICAgICB2YXIgZyA9IGxbdV0sIE8gPSBhW3VdO1xuICAgICAgICAgIGlmIChnICYmIE8pIHtcbiAgICAgICAgICAgIGU6XG4gICAgICAgICAgICAgIGZvciAodmFyIEwgPSAwOyBMIDwgTy5sZW5ndGg7ICsrTCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIEggPSBPW0xdLCBVID0gMDsgVSA8IGcubGVuZ3RoOyArK1UpXG4gICAgICAgICAgICAgICAgICBpZiAoZ1tVXS5tYXJrZXIgPT0gSC5tYXJrZXIpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGU7XG4gICAgICAgICAgICAgICAgZy5wdXNoKEgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICBPICYmIChsW3VdID0gTyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBhaShlLCBuLCBsKSB7XG4gICAgICAgIGZvciAodmFyIGEgPSBbXSwgdSA9IDA7IHUgPCBlLmxlbmd0aDsgKyt1KSB7XG4gICAgICAgICAgdmFyIGcgPSBlW3VdO1xuICAgICAgICAgIGlmIChnLnJhbmdlcykge1xuICAgICAgICAgICAgYS5wdXNoKGwgPyBBbi5wcm90b3R5cGUuZGVlcENvcHkuY2FsbChnKSA6IGcpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBPID0gZy5jaGFuZ2VzLCBMID0gW107XG4gICAgICAgICAgYS5wdXNoKHsgY2hhbmdlczogTCB9KTtcbiAgICAgICAgICBmb3IgKHZhciBIID0gMDsgSCA8IE8ubGVuZ3RoOyArK0gpIHtcbiAgICAgICAgICAgIHZhciBVID0gT1tIXSwgRyA9IHZvaWQgMDtcbiAgICAgICAgICAgIGlmIChMLnB1c2goeyBmcm9tOiBVLmZyb20sIHRvOiBVLnRvLCB0ZXh0OiBVLnRleHQgfSksIG4pXG4gICAgICAgICAgICAgIGZvciAodmFyIFkgaW4gVSlcbiAgICAgICAgICAgICAgICAoRyA9IFkubWF0Y2goL15zcGFuc18oXFxkKykkLykpICYmIHRlKG4sIE51bWJlcihHWzFdKSkgPiAtMSAmJiAoQmUoTClbWV0gPSBVW1ldLCBkZWxldGUgVVtZXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gQWwoZSwgbiwgbCwgYSkge1xuICAgICAgICBpZiAoYSkge1xuICAgICAgICAgIHZhciB1ID0gZS5hbmNob3I7XG4gICAgICAgICAgaWYgKGwpIHtcbiAgICAgICAgICAgIHZhciBnID0gb2UobiwgdSkgPCAwO1xuICAgICAgICAgICAgZyAhPSBvZShsLCB1KSA8IDAgPyAodSA9IG4sIG4gPSBsKSA6IGcgIT0gb2UobiwgbCkgPCAwICYmIChuID0gbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgdXQodSwgbik7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHJldHVybiBuZXcgdXQobCB8fCBuLCBuKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEpvKGUsIG4sIGwsIGEsIHUpIHtcbiAgICAgICAgdSA9PSBudWxsICYmICh1ID0gZS5jbSAmJiAoZS5jbS5kaXNwbGF5LnNoaWZ0IHx8IGUuZXh0ZW5kKSksIFF0KGUsIG5ldyBBbihbQWwoZS5zZWwucHJpbWFyeSgpLCBuLCBsLCB1KV0sIDApLCBhKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFh1KGUsIG4sIGwpIHtcbiAgICAgICAgZm9yICh2YXIgYSA9IFtdLCB1ID0gZS5jbSAmJiAoZS5jbS5kaXNwbGF5LnNoaWZ0IHx8IGUuZXh0ZW5kKSwgZyA9IDA7IGcgPCBlLnNlbC5yYW5nZXMubGVuZ3RoOyBnKyspXG4gICAgICAgICAgYVtnXSA9IEFsKGUuc2VsLnJhbmdlc1tnXSwgbltnXSwgbnVsbCwgdSk7XG4gICAgICAgIHZhciBPID0gRm4oZS5jbSwgYSwgZS5zZWwucHJpbUluZGV4KTtcbiAgICAgICAgUXQoZSwgTywgbCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBibChlLCBuLCBsLCBhKSB7XG4gICAgICAgIHZhciB1ID0gZS5zZWwucmFuZ2VzLnNsaWNlKDApO1xuICAgICAgICB1W25dID0gbCwgUXQoZSwgRm4oZS5jbSwgdSwgZS5zZWwucHJpbUluZGV4KSwgYSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBKdShlLCBuLCBsLCBhKSB7XG4gICAgICAgIFF0KGUsIGJyKG4sIGwpLCBhKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE1wKGUsIG4sIGwpIHtcbiAgICAgICAgdmFyIGEgPSB7XG4gICAgICAgICAgcmFuZ2VzOiBuLnJhbmdlcyxcbiAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHUpIHtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBnID0gMDsgZyA8IHUubGVuZ3RoOyBnKyspXG4gICAgICAgICAgICAgIHRoaXMucmFuZ2VzW2ddID0gbmV3IHV0KFxuICAgICAgICAgICAgICAgIFZlKGUsIHVbZ10uYW5jaG9yKSxcbiAgICAgICAgICAgICAgICBWZShlLCB1W2ddLmhlYWQpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcmlnaW46IGwgJiYgbC5vcmlnaW5cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFBlKGUsIFwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlXCIsIGUsIGEpLCBlLmNtICYmIFBlKGUuY20sIFwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlXCIsIGUuY20sIGEpLCBhLnJhbmdlcyAhPSBuLnJhbmdlcyA/IEZuKGUuY20sIGEucmFuZ2VzLCBhLnJhbmdlcy5sZW5ndGggLSAxKSA6IG47XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBadShlLCBuLCBsKSB7XG4gICAgICAgIHZhciBhID0gZS5oaXN0b3J5LmRvbmUsIHUgPSBCZShhKTtcbiAgICAgICAgdSAmJiB1LnJhbmdlcyA/IChhW2EubGVuZ3RoIC0gMV0gPSBuLCBabyhlLCBuLCBsKSkgOiBRdChlLCBuLCBsKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFF0KGUsIG4sIGwpIHtcbiAgICAgICAgWm8oZSwgbiwgbCksIFRwKGUsIGUuc2VsLCBlLmNtID8gZS5jbS5jdXJPcC5pZCA6IE5hTiwgbCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBabyhlLCBuLCBsKSB7XG4gICAgICAgIChidChlLCBcImJlZm9yZVNlbGVjdGlvbkNoYW5nZVwiKSB8fCBlLmNtICYmIGJ0KGUuY20sIFwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlXCIpKSAmJiAobiA9IE1wKGUsIG4sIGwpKTtcbiAgICAgICAgdmFyIGEgPSBsICYmIGwuYmlhcyB8fCAob2Uobi5wcmltYXJ5KCkuaGVhZCwgZS5zZWwucHJpbWFyeSgpLmhlYWQpIDwgMCA/IC0xIDogMSk7XG4gICAgICAgIHF1KGUsIGVmKGUsIG4sIGEsICEwKSksICEobCAmJiBsLnNjcm9sbCA9PT0gITEpICYmIGUuY20gJiYgZS5jbS5nZXRPcHRpb24oXCJyZWFkT25seVwiKSAhPSBcIm5vY3Vyc29yXCIgJiYgaWkoZS5jbSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBxdShlLCBuKSB7XG4gICAgICAgIG4uZXF1YWxzKGUuc2VsKSB8fCAoZS5zZWwgPSBuLCBlLmNtICYmIChlLmNtLmN1ck9wLnVwZGF0ZUlucHV0ID0gMSwgZS5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gITAsIF90KGUuY20pKSwgSHQoZSwgXCJjdXJzb3JBY3Rpdml0eVwiLCBlKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfdShlKSB7XG4gICAgICAgIHF1KGUsIGVmKGUsIGUuc2VsLCBudWxsLCAhMSkpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZWYoZSwgbiwgbCwgYSkge1xuICAgICAgICBmb3IgKHZhciB1LCBnID0gMDsgZyA8IG4ucmFuZ2VzLmxlbmd0aDsgZysrKSB7XG4gICAgICAgICAgdmFyIE8gPSBuLnJhbmdlc1tnXSwgTCA9IG4ucmFuZ2VzLmxlbmd0aCA9PSBlLnNlbC5yYW5nZXMubGVuZ3RoICYmIGUuc2VsLnJhbmdlc1tnXSwgSCA9IHFvKGUsIE8uYW5jaG9yLCBMICYmIEwuYW5jaG9yLCBsLCBhKSwgVSA9IE8uaGVhZCA9PSBPLmFuY2hvciA/IEggOiBxbyhlLCBPLmhlYWQsIEwgJiYgTC5oZWFkLCBsLCBhKTtcbiAgICAgICAgICAodSB8fCBIICE9IE8uYW5jaG9yIHx8IFUgIT0gTy5oZWFkKSAmJiAodSB8fCAodSA9IG4ucmFuZ2VzLnNsaWNlKDAsIGcpKSwgdVtnXSA9IG5ldyB1dChILCBVKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHUgPyBGbihlLmNtLCB1LCBuLnByaW1JbmRleCkgOiBuO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbGkoZSwgbiwgbCwgYSwgdSkge1xuICAgICAgICB2YXIgZyA9IEZlKGUsIG4ubGluZSk7XG4gICAgICAgIGlmIChnLm1hcmtlZFNwYW5zKVxuICAgICAgICAgIGZvciAodmFyIE8gPSAwOyBPIDwgZy5tYXJrZWRTcGFucy5sZW5ndGg7ICsrTykge1xuICAgICAgICAgICAgdmFyIEwgPSBnLm1hcmtlZFNwYW5zW09dLCBIID0gTC5tYXJrZXIsIFUgPSBcInNlbGVjdExlZnRcIiBpbiBIID8gIUguc2VsZWN0TGVmdCA6IEguaW5jbHVzaXZlTGVmdCwgRyA9IFwic2VsZWN0UmlnaHRcIiBpbiBIID8gIUguc2VsZWN0UmlnaHQgOiBILmluY2x1c2l2ZVJpZ2h0O1xuICAgICAgICAgICAgaWYgKChMLmZyb20gPT0gbnVsbCB8fCAoVSA/IEwuZnJvbSA8PSBuLmNoIDogTC5mcm9tIDwgbi5jaCkpICYmIChMLnRvID09IG51bGwgfHwgKEcgPyBMLnRvID49IG4uY2ggOiBMLnRvID4gbi5jaCkpKSB7XG4gICAgICAgICAgICAgIGlmICh1ICYmIChQZShILCBcImJlZm9yZUN1cnNvckVudGVyXCIpLCBILmV4cGxpY2l0bHlDbGVhcmVkKSlcbiAgICAgICAgICAgICAgICBpZiAoZy5tYXJrZWRTcGFucykge1xuICAgICAgICAgICAgICAgICAgLS1PO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgaWYgKCFILmF0b21pYylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgaWYgKGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgWSA9IEguZmluZChhIDwgMCA/IDEgOiAtMSksIGVlID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIGlmICgoYSA8IDAgPyBHIDogVSkgJiYgKFkgPSB0ZihlLCBZLCAtYSwgWSAmJiBZLmxpbmUgPT0gbi5saW5lID8gZyA6IG51bGwpKSwgWSAmJiBZLmxpbmUgPT0gbi5saW5lICYmIChlZSA9IG9lKFksIGwpKSAmJiAoYSA8IDAgPyBlZSA8IDAgOiBlZSA+IDApKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpKGUsIFksIG4sIGEsIHUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBfID0gSC5maW5kKGEgPCAwID8gLTEgOiAxKTtcbiAgICAgICAgICAgICAgcmV0dXJuIChhIDwgMCA/IFUgOiBHKSAmJiAoXyA9IHRmKGUsIF8sIGEsIF8ubGluZSA9PSBuLmxpbmUgPyBnIDogbnVsbCkpLCBfID8gbGkoZSwgXywgbiwgYSwgdSkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG47XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBxbyhlLCBuLCBsLCBhLCB1KSB7XG4gICAgICAgIHZhciBnID0gYSB8fCAxLCBPID0gbGkoZSwgbiwgbCwgZywgdSkgfHwgIXUgJiYgbGkoZSwgbiwgbCwgZywgITApIHx8IGxpKGUsIG4sIGwsIC1nLCB1KSB8fCAhdSAmJiBsaShlLCBuLCBsLCAtZywgITApO1xuICAgICAgICByZXR1cm4gTyB8fCAoZS5jYW50RWRpdCA9ICEwLCBxKGUuZmlyc3QsIDApKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHRmKGUsIG4sIGwsIGEpIHtcbiAgICAgICAgcmV0dXJuIGwgPCAwICYmIG4uY2ggPT0gMCA/IG4ubGluZSA+IGUuZmlyc3QgPyBWZShlLCBxKG4ubGluZSAtIDEpKSA6IG51bGwgOiBsID4gMCAmJiBuLmNoID09IChhIHx8IEZlKGUsIG4ubGluZSkpLnRleHQubGVuZ3RoID8gbi5saW5lIDwgZS5maXJzdCArIGUuc2l6ZSAtIDEgPyBxKG4ubGluZSArIDEsIDApIDogbnVsbCA6IG5ldyBxKG4ubGluZSwgbi5jaCArIGwpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbmYoZSkge1xuICAgICAgICBlLnNldFNlbGVjdGlvbihxKGUuZmlyc3RMaW5lKCksIDApLCBxKGUubGFzdExpbmUoKSksIE1lKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHJmKGUsIG4sIGwpIHtcbiAgICAgICAgdmFyIGEgPSB7XG4gICAgICAgICAgY2FuY2VsZWQ6ICExLFxuICAgICAgICAgIGZyb206IG4uZnJvbSxcbiAgICAgICAgICB0bzogbi50byxcbiAgICAgICAgICB0ZXh0OiBuLnRleHQsXG4gICAgICAgICAgb3JpZ2luOiBuLm9yaWdpbixcbiAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGEuY2FuY2VsZWQgPSAhMDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBsICYmIChhLnVwZGF0ZSA9IGZ1bmN0aW9uKHUsIGcsIE8sIEwpIHtcbiAgICAgICAgICB1ICYmIChhLmZyb20gPSBWZShlLCB1KSksIGcgJiYgKGEudG8gPSBWZShlLCBnKSksIE8gJiYgKGEudGV4dCA9IE8pLCBMICE9PSB2b2lkIDAgJiYgKGEub3JpZ2luID0gTCk7XG4gICAgICAgIH0pLCBQZShlLCBcImJlZm9yZUNoYW5nZVwiLCBlLCBhKSwgZS5jbSAmJiBQZShlLmNtLCBcImJlZm9yZUNoYW5nZVwiLCBlLmNtLCBhKSwgYS5jYW5jZWxlZCA/IChlLmNtICYmIChlLmNtLmN1ck9wLnVwZGF0ZUlucHV0ID0gMiksIG51bGwpIDogeyBmcm9tOiBhLmZyb20sIHRvOiBhLnRvLCB0ZXh0OiBhLnRleHQsIG9yaWdpbjogYS5vcmlnaW4gfTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHNpKGUsIG4sIGwpIHtcbiAgICAgICAgaWYgKGUuY20pIHtcbiAgICAgICAgICBpZiAoIWUuY20uY3VyT3ApXG4gICAgICAgICAgICByZXR1cm4gJHQoZS5jbSwgc2kpKGUsIG4sIGwpO1xuICAgICAgICAgIGlmIChlLmNtLnN0YXRlLnN1cHByZXNzRWRpdHMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoKGJ0KGUsIFwiYmVmb3JlQ2hhbmdlXCIpIHx8IGUuY20gJiYgYnQoZS5jbSwgXCJiZWZvcmVDaGFuZ2VcIikpICYmIChuID0gcmYoZSwgbiwgITApLCAhbikpKSB7XG4gICAgICAgICAgdmFyIGEgPSBLcyAmJiAhbCAmJiBUYyhlLCBuLmZyb20sIG4udG8pO1xuICAgICAgICAgIGlmIChhKVxuICAgICAgICAgICAgZm9yICh2YXIgdSA9IGEubGVuZ3RoIC0gMTsgdSA+PSAwOyAtLXUpXG4gICAgICAgICAgICAgIG9mKGUsIHsgZnJvbTogYVt1XS5mcm9tLCB0bzogYVt1XS50bywgdGV4dDogdSA/IFtcIlwiXSA6IG4udGV4dCwgb3JpZ2luOiBuLm9yaWdpbiB9KTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBvZihlLCBuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gb2YoZSwgbikge1xuICAgICAgICBpZiAoIShuLnRleHQubGVuZ3RoID09IDEgJiYgbi50ZXh0WzBdID09IFwiXCIgJiYgb2Uobi5mcm9tLCBuLnRvKSA9PSAwKSkge1xuICAgICAgICAgIHZhciBsID0gdmwoZSwgbik7XG4gICAgICAgICAgUXUoZSwgbiwgbCwgZS5jbSA/IGUuY20uY3VyT3AuaWQgOiBOYU4pLCBRaShlLCBuLCBsLCB6YShlLCBuKSk7XG4gICAgICAgICAgdmFyIGEgPSBbXTtcbiAgICAgICAgICBFcihlLCBmdW5jdGlvbih1LCBnKSB7XG4gICAgICAgICAgICAhZyAmJiB0ZShhLCB1Lmhpc3RvcnkpID09IC0xICYmICh1Zih1Lmhpc3RvcnksIG4pLCBhLnB1c2godS5oaXN0b3J5KSksIFFpKHUsIG4sIG51bGwsIHphKHUsIG4pKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX28oZSwgbiwgbCkge1xuICAgICAgICB2YXIgYSA9IGUuY20gJiYgZS5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzO1xuICAgICAgICBpZiAoIShhICYmICFsKSkge1xuICAgICAgICAgIGZvciAodmFyIHUgPSBlLmhpc3RvcnksIGcsIE8gPSBlLnNlbCwgTCA9IG4gPT0gXCJ1bmRvXCIgPyB1LmRvbmUgOiB1LnVuZG9uZSwgSCA9IG4gPT0gXCJ1bmRvXCIgPyB1LnVuZG9uZSA6IHUuZG9uZSwgVSA9IDA7IFUgPCBMLmxlbmd0aCAmJiAoZyA9IExbVV0sICEobCA/IGcucmFuZ2VzICYmICFnLmVxdWFscyhlLnNlbCkgOiAhZy5yYW5nZXMpKTsgVSsrKVxuICAgICAgICAgICAgO1xuICAgICAgICAgIGlmIChVICE9IEwubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKHUubGFzdE9yaWdpbiA9IHUubGFzdFNlbE9yaWdpbiA9IG51bGw7IDsgKVxuICAgICAgICAgICAgICBpZiAoZyA9IEwucG9wKCksIGcucmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKFhvKGcsIEgpLCBsICYmICFnLmVxdWFscyhlLnNlbCkpIHtcbiAgICAgICAgICAgICAgICAgIFF0KGUsIGcsIHsgY2xlYXJSZWRvOiAhMSB9KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgTyA9IGc7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYSkge1xuICAgICAgICAgICAgICAgIEwucHVzaChnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgdmFyIEcgPSBbXTtcbiAgICAgICAgICAgIFhvKE8sIEgpLCBILnB1c2goeyBjaGFuZ2VzOiBHLCBnZW5lcmF0aW9uOiB1LmdlbmVyYXRpb24gfSksIHUuZ2VuZXJhdGlvbiA9IGcuZ2VuZXJhdGlvbiB8fCArK3UubWF4R2VuZXJhdGlvbjtcbiAgICAgICAgICAgIGZvciAodmFyIFkgPSBidChlLCBcImJlZm9yZUNoYW5nZVwiKSB8fCBlLmNtICYmIGJ0KGUuY20sIFwiYmVmb3JlQ2hhbmdlXCIpLCBlZSA9IGZ1bmN0aW9uKGNlKSB7XG4gICAgICAgICAgICAgIHZhciB5ZSA9IGcuY2hhbmdlc1tjZV07XG4gICAgICAgICAgICAgIGlmICh5ZS5vcmlnaW4gPSBuLCBZICYmICFyZihlLCB5ZSwgITEpKVxuICAgICAgICAgICAgICAgIHJldHVybiBMLmxlbmd0aCA9IDAsIHt9O1xuICAgICAgICAgICAgICBHLnB1c2goeWwoZSwgeWUpKTtcbiAgICAgICAgICAgICAgdmFyIENlID0gY2UgPyB2bChlLCB5ZSkgOiBCZShMKTtcbiAgICAgICAgICAgICAgUWkoZSwgeWUsIENlLCBLdShlLCB5ZSkpLCAhY2UgJiYgZS5jbSAmJiBlLmNtLnNjcm9sbEludG9WaWV3KHsgZnJvbTogeWUuZnJvbSwgdG86IENyKHllKSB9KTtcbiAgICAgICAgICAgICAgdmFyIFRlID0gW107XG4gICAgICAgICAgICAgIEVyKGUsIGZ1bmN0aW9uKEVlLCBOZSkge1xuICAgICAgICAgICAgICAgICFOZSAmJiB0ZShUZSwgRWUuaGlzdG9yeSkgPT0gLTEgJiYgKHVmKEVlLmhpc3RvcnksIHllKSwgVGUucHVzaChFZS5oaXN0b3J5KSksIFFpKEVlLCB5ZSwgbnVsbCwgS3UoRWUsIHllKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgXyA9IGcuY2hhbmdlcy5sZW5ndGggLSAxOyBfID49IDA7IC0tXykge1xuICAgICAgICAgICAgICB2YXIgYWUgPSBlZShfKTtcbiAgICAgICAgICAgICAgaWYgKGFlKVxuICAgICAgICAgICAgICAgIHJldHVybiBhZS52O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gYWYoZSwgbikge1xuICAgICAgICBpZiAobiAhPSAwICYmIChlLmZpcnN0ICs9IG4sIGUuc2VsID0gbmV3IEFuKHB0KGUuc2VsLnJhbmdlcywgZnVuY3Rpb24odSkge1xuICAgICAgICAgIHJldHVybiBuZXcgdXQoXG4gICAgICAgICAgICBxKHUuYW5jaG9yLmxpbmUgKyBuLCB1LmFuY2hvci5jaCksXG4gICAgICAgICAgICBxKHUuaGVhZC5saW5lICsgbiwgdS5oZWFkLmNoKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pLCBlLnNlbC5wcmltSW5kZXgpLCBlLmNtKSkge1xuICAgICAgICAgIHRuKGUuY20sIGUuZmlyc3QsIGUuZmlyc3QgLSBuLCBuKTtcbiAgICAgICAgICBmb3IgKHZhciBsID0gZS5jbS5kaXNwbGF5LCBhID0gbC52aWV3RnJvbTsgYSA8IGwudmlld1RvOyBhKyspXG4gICAgICAgICAgICB5cihlLmNtLCBhLCBcImd1dHRlclwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gUWkoZSwgbiwgbCwgYSkge1xuICAgICAgICBpZiAoZS5jbSAmJiAhZS5jbS5jdXJPcClcbiAgICAgICAgICByZXR1cm4gJHQoZS5jbSwgUWkpKGUsIG4sIGwsIGEpO1xuICAgICAgICBpZiAobi50by5saW5lIDwgZS5maXJzdCkge1xuICAgICAgICAgIGFmKGUsIG4udGV4dC5sZW5ndGggLSAxIC0gKG4udG8ubGluZSAtIG4uZnJvbS5saW5lKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKG4uZnJvbS5saW5lID4gZS5sYXN0TGluZSgpKSkge1xuICAgICAgICAgIGlmIChuLmZyb20ubGluZSA8IGUuZmlyc3QpIHtcbiAgICAgICAgICAgIHZhciB1ID0gbi50ZXh0Lmxlbmd0aCAtIDEgLSAoZS5maXJzdCAtIG4uZnJvbS5saW5lKTtcbiAgICAgICAgICAgIGFmKGUsIHUpLCBuID0ge1xuICAgICAgICAgICAgICBmcm9tOiBxKGUuZmlyc3QsIDApLFxuICAgICAgICAgICAgICB0bzogcShuLnRvLmxpbmUgKyB1LCBuLnRvLmNoKSxcbiAgICAgICAgICAgICAgdGV4dDogW0JlKG4udGV4dCldLFxuICAgICAgICAgICAgICBvcmlnaW46IG4ub3JpZ2luXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgZyA9IGUubGFzdExpbmUoKTtcbiAgICAgICAgICBuLnRvLmxpbmUgPiBnICYmIChuID0ge1xuICAgICAgICAgICAgZnJvbTogbi5mcm9tLFxuICAgICAgICAgICAgdG86IHEoZywgRmUoZSwgZykudGV4dC5sZW5ndGgpLFxuICAgICAgICAgICAgdGV4dDogW24udGV4dFswXV0sXG4gICAgICAgICAgICBvcmlnaW46IG4ub3JpZ2luXG4gICAgICAgICAgfSksIG4ucmVtb3ZlZCA9IF9uKGUsIG4uZnJvbSwgbi50byksIGwgfHwgKGwgPSB2bChlLCBuKSksIGUuY20gPyBJcChlLmNtLCBuLCBhKSA6IGdsKGUsIG4sIGEpLCBabyhlLCBsLCBNZSksIGUuY2FudEVkaXQgJiYgcW8oZSwgcShlLmZpcnN0TGluZSgpLCAwKSkgJiYgKGUuY2FudEVkaXQgPSAhMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIElwKGUsIG4sIGwpIHtcbiAgICAgICAgdmFyIGEgPSBlLmRvYywgdSA9IGUuZGlzcGxheSwgZyA9IG4uZnJvbSwgTyA9IG4udG8sIEwgPSAhMSwgSCA9IGcubGluZTtcbiAgICAgICAgZS5vcHRpb25zLmxpbmVXcmFwcGluZyB8fCAoSCA9IHN0KE9uKEZlKGEsIGcubGluZSkpKSwgYS5pdGVyKEgsIE8ubGluZSArIDEsIGZ1bmN0aW9uKF8pIHtcbiAgICAgICAgICBpZiAoXyA9PSB1Lm1heExpbmUpXG4gICAgICAgICAgICByZXR1cm4gTCA9ICEwLCAhMDtcbiAgICAgICAgfSkpLCBhLnNlbC5jb250YWlucyhuLmZyb20sIG4udG8pID4gLTEgJiYgX3QoZSksIGdsKGEsIG4sIGwsIHh1KGUpKSwgZS5vcHRpb25zLmxpbmVXcmFwcGluZyB8fCAoYS5pdGVyKEgsIGcubGluZSArIG4udGV4dC5sZW5ndGgsIGZ1bmN0aW9uKF8pIHtcbiAgICAgICAgICB2YXIgYWUgPSBCbyhfKTtcbiAgICAgICAgICBhZSA+IHUubWF4TGluZUxlbmd0aCAmJiAodS5tYXhMaW5lID0gXywgdS5tYXhMaW5lTGVuZ3RoID0gYWUsIHUubWF4TGluZUNoYW5nZWQgPSAhMCwgTCA9ICExKTtcbiAgICAgICAgfSksIEwgJiYgKGUuY3VyT3AudXBkYXRlTWF4TGluZSA9ICEwKSksIEFjKGEsIGcubGluZSksIFZpKGUsIDQwMCk7XG4gICAgICAgIHZhciBVID0gbi50ZXh0Lmxlbmd0aCAtIChPLmxpbmUgLSBnLmxpbmUpIC0gMTtcbiAgICAgICAgbi5mdWxsID8gdG4oZSkgOiBnLmxpbmUgPT0gTy5saW5lICYmIG4udGV4dC5sZW5ndGggPT0gMSAmJiAhenUoZS5kb2MsIG4pID8geXIoZSwgZy5saW5lLCBcInRleHRcIikgOiB0bihlLCBnLmxpbmUsIE8ubGluZSArIDEsIFUpO1xuICAgICAgICB2YXIgRyA9IGJ0KGUsIFwiY2hhbmdlc1wiKSwgWSA9IGJ0KGUsIFwiY2hhbmdlXCIpO1xuICAgICAgICBpZiAoWSB8fCBHKSB7XG4gICAgICAgICAgdmFyIGVlID0ge1xuICAgICAgICAgICAgZnJvbTogZyxcbiAgICAgICAgICAgIHRvOiBPLFxuICAgICAgICAgICAgdGV4dDogbi50ZXh0LFxuICAgICAgICAgICAgcmVtb3ZlZDogbi5yZW1vdmVkLFxuICAgICAgICAgICAgb3JpZ2luOiBuLm9yaWdpblxuICAgICAgICAgIH07XG4gICAgICAgICAgWSAmJiBIdChlLCBcImNoYW5nZVwiLCBlLCBlZSksIEcgJiYgKGUuY3VyT3AuY2hhbmdlT2JqcyB8fCAoZS5jdXJPcC5jaGFuZ2VPYmpzID0gW10pKS5wdXNoKGVlKTtcbiAgICAgICAgfVxuICAgICAgICBlLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPSBudWxsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdWkoZSwgbiwgbCwgYSwgdSkge1xuICAgICAgICB2YXIgZztcbiAgICAgICAgYSB8fCAoYSA9IGwpLCBvZShhLCBsKSA8IDAgJiYgKGcgPSBbYSwgbF0sIGwgPSBnWzBdLCBhID0gZ1sxXSksIHR5cGVvZiBuID09IFwic3RyaW5nXCIgJiYgKG4gPSBlLnNwbGl0TGluZXMobikpLCBzaShlLCB7IGZyb206IGwsIHRvOiBhLCB0ZXh0OiBuLCBvcmlnaW46IHUgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBsZihlLCBuLCBsLCBhKSB7XG4gICAgICAgIGwgPCBlLmxpbmUgPyBlLmxpbmUgKz0gYSA6IG4gPCBlLmxpbmUgJiYgKGUubGluZSA9IG4sIGUuY2ggPSAwKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHNmKGUsIG4sIGwsIGEpIHtcbiAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCBlLmxlbmd0aDsgKyt1KSB7XG4gICAgICAgICAgdmFyIGcgPSBlW3VdLCBPID0gITA7XG4gICAgICAgICAgaWYgKGcucmFuZ2VzKSB7XG4gICAgICAgICAgICBnLmNvcGllZCB8fCAoZyA9IGVbdV0gPSBnLmRlZXBDb3B5KCksIGcuY29waWVkID0gITApO1xuICAgICAgICAgICAgZm9yICh2YXIgTCA9IDA7IEwgPCBnLnJhbmdlcy5sZW5ndGg7IEwrKylcbiAgICAgICAgICAgICAgbGYoZy5yYW5nZXNbTF0uYW5jaG9yLCBuLCBsLCBhKSwgbGYoZy5yYW5nZXNbTF0uaGVhZCwgbiwgbCwgYSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgSCA9IDA7IEggPCBnLmNoYW5nZXMubGVuZ3RoOyArK0gpIHtcbiAgICAgICAgICAgIHZhciBVID0gZy5jaGFuZ2VzW0hdO1xuICAgICAgICAgICAgaWYgKGwgPCBVLmZyb20ubGluZSlcbiAgICAgICAgICAgICAgVS5mcm9tID0gcShVLmZyb20ubGluZSArIGEsIFUuZnJvbS5jaCksIFUudG8gPSBxKFUudG8ubGluZSArIGEsIFUudG8uY2gpO1xuICAgICAgICAgICAgZWxzZSBpZiAobiA8PSBVLnRvLmxpbmUpIHtcbiAgICAgICAgICAgICAgTyA9ICExO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgTyB8fCAoZS5zcGxpY2UoMCwgdSArIDEpLCB1ID0gMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHVmKGUsIG4pIHtcbiAgICAgICAgdmFyIGwgPSBuLmZyb20ubGluZSwgYSA9IG4udG8ubGluZSwgdSA9IG4udGV4dC5sZW5ndGggLSAoYSAtIGwpIC0gMTtcbiAgICAgICAgc2YoZS5kb25lLCBsLCBhLCB1KSwgc2YoZS51bmRvbmUsIGwsIGEsIHUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gWWkoZSwgbiwgbCwgYSkge1xuICAgICAgICB2YXIgdSA9IG4sIGcgPSBuO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG4gPT0gXCJudW1iZXJcIiA/IGcgPSBGZShlLCB5bihlLCBuKSkgOiB1ID0gc3QobiksIHUgPT0gbnVsbCA/IG51bGwgOiAoYShnLCB1KSAmJiBlLmNtICYmIHlyKGUuY20sIHUsIGwpLCBnKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEtpKGUpIHtcbiAgICAgICAgdGhpcy5saW5lcyA9IGUsIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgbiA9IDAsIGwgPSAwOyBsIDwgZS5sZW5ndGg7ICsrbClcbiAgICAgICAgICBlW2xdLnBhcmVudCA9IHRoaXMsIG4gKz0gZVtsXS5oZWlnaHQ7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gbjtcbiAgICAgIH1cbiAgICAgIEtpLnByb3RvdHlwZSA9IHtcbiAgICAgICAgY2h1bmtTaXplOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5saW5lcy5sZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZUlubmVyOiBmdW5jdGlvbihlLCBuKSB7XG4gICAgICAgICAgZm9yICh2YXIgbCA9IGUsIGEgPSBlICsgbjsgbCA8IGE7ICsrbCkge1xuICAgICAgICAgICAgdmFyIHUgPSB0aGlzLmxpbmVzW2xdO1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgLT0gdS5oZWlnaHQsIE5jKHUpLCBIdCh1LCBcImRlbGV0ZVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5saW5lcy5zcGxpY2UoZSwgbik7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbGxhcHNlOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgZS5wdXNoLmFwcGx5KGUsIHRoaXMubGluZXMpO1xuICAgICAgICB9LFxuICAgICAgICBpbnNlcnRJbm5lcjogZnVuY3Rpb24oZSwgbiwgbCkge1xuICAgICAgICAgIHRoaXMuaGVpZ2h0ICs9IGwsIHRoaXMubGluZXMgPSB0aGlzLmxpbmVzLnNsaWNlKDAsIGUpLmNvbmNhdChuKS5jb25jYXQodGhpcy5saW5lcy5zbGljZShlKSk7XG4gICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBuLmxlbmd0aDsgKythKVxuICAgICAgICAgICAgblthXS5wYXJlbnQgPSB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBpdGVyTjogZnVuY3Rpb24oZSwgbiwgbCkge1xuICAgICAgICAgIGZvciAodmFyIGEgPSBlICsgbjsgZSA8IGE7ICsrZSlcbiAgICAgICAgICAgIGlmIChsKHRoaXMubGluZXNbZV0pKVxuICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBmdW5jdGlvbiBYaShlKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBlO1xuICAgICAgICBmb3IgKHZhciBuID0gMCwgbCA9IDAsIGEgPSAwOyBhIDwgZS5sZW5ndGg7ICsrYSkge1xuICAgICAgICAgIHZhciB1ID0gZVthXTtcbiAgICAgICAgICBuICs9IHUuY2h1bmtTaXplKCksIGwgKz0gdS5oZWlnaHQsIHUucGFyZW50ID0gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNpemUgPSBuLCB0aGlzLmhlaWdodCA9IGwsIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIFhpLnByb3RvdHlwZSA9IHtcbiAgICAgICAgY2h1bmtTaXplOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zaXplO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmVJbm5lcjogZnVuY3Rpb24oZSwgbikge1xuICAgICAgICAgIHRoaXMuc2l6ZSAtPSBuO1xuICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsrbCkge1xuICAgICAgICAgICAgdmFyIGEgPSB0aGlzLmNoaWxkcmVuW2xdLCB1ID0gYS5jaHVua1NpemUoKTtcbiAgICAgICAgICAgIGlmIChlIDwgdSkge1xuICAgICAgICAgICAgICB2YXIgZyA9IE1hdGgubWluKG4sIHUgLSBlKSwgTyA9IGEuaGVpZ2h0O1xuICAgICAgICAgICAgICBpZiAoYS5yZW1vdmVJbm5lcihlLCBnKSwgdGhpcy5oZWlnaHQgLT0gTyAtIGEuaGVpZ2h0LCB1ID09IGcgJiYgKHRoaXMuY2hpbGRyZW4uc3BsaWNlKGwtLSwgMSksIGEucGFyZW50ID0gbnVsbCksIChuIC09IGcpID09IDApXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIGUgLT0gdTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuc2l6ZSAtIG4gPCAyNSAmJiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiAxIHx8ICEodGhpcy5jaGlsZHJlblswXSBpbnN0YW5jZW9mIEtpKSkpIHtcbiAgICAgICAgICAgIHZhciBMID0gW107XG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlKEwpLCB0aGlzLmNoaWxkcmVuID0gW25ldyBLaShMKV0sIHRoaXMuY2hpbGRyZW5bMF0ucGFyZW50ID0gdGhpcztcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbGxhcHNlOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytuKVxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltuXS5jb2xsYXBzZShlKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0SW5uZXI6IGZ1bmN0aW9uKGUsIG4sIGwpIHtcbiAgICAgICAgICB0aGlzLnNpemUgKz0gbi5sZW5ndGgsIHRoaXMuaGVpZ2h0ICs9IGw7XG4gICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKythKSB7XG4gICAgICAgICAgICB2YXIgdSA9IHRoaXMuY2hpbGRyZW5bYV0sIGcgPSB1LmNodW5rU2l6ZSgpO1xuICAgICAgICAgICAgaWYgKGUgPD0gZykge1xuICAgICAgICAgICAgICBpZiAodS5pbnNlcnRJbm5lcihlLCBuLCBsKSwgdS5saW5lcyAmJiB1LmxpbmVzLmxlbmd0aCA+IDUwKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgTyA9IHUubGluZXMubGVuZ3RoICUgMjUgKyAyNSwgTCA9IE87IEwgPCB1LmxpbmVzLmxlbmd0aDsgKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgSCA9IG5ldyBLaSh1LmxpbmVzLnNsaWNlKEwsIEwgKz0gMjUpKTtcbiAgICAgICAgICAgICAgICAgIHUuaGVpZ2h0IC09IEguaGVpZ2h0LCB0aGlzLmNoaWxkcmVuLnNwbGljZSgrK2EsIDAsIEgpLCBILnBhcmVudCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHUubGluZXMgPSB1LmxpbmVzLnNsaWNlKDAsIE8pLCB0aGlzLm1heWJlU3BpbGwoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUgLT0gZztcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1heWJlU3BpbGw6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICghKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIDw9IDEwKSkge1xuICAgICAgICAgICAgdmFyIGUgPSB0aGlzO1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICB2YXIgbiA9IGUuY2hpbGRyZW4uc3BsaWNlKGUuY2hpbGRyZW4ubGVuZ3RoIC0gNSwgNSksIGwgPSBuZXcgWGkobik7XG4gICAgICAgICAgICAgIGlmIChlLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIGUuc2l6ZSAtPSBsLnNpemUsIGUuaGVpZ2h0IC09IGwuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHZhciB1ID0gdGUoZS5wYXJlbnQuY2hpbGRyZW4sIGUpO1xuICAgICAgICAgICAgICAgIGUucGFyZW50LmNoaWxkcmVuLnNwbGljZSh1ICsgMSwgMCwgbCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGEgPSBuZXcgWGkoZS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgYS5wYXJlbnQgPSBlLCBlLmNoaWxkcmVuID0gW2EsIGxdLCBlID0gYTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsLnBhcmVudCA9IGUucGFyZW50O1xuICAgICAgICAgICAgfSB3aGlsZSAoZS5jaGlsZHJlbi5sZW5ndGggPiAxMCk7XG4gICAgICAgICAgICBlLnBhcmVudC5tYXliZVNwaWxsKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBpdGVyTjogZnVuY3Rpb24oZSwgbiwgbCkge1xuICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsrYSkge1xuICAgICAgICAgICAgdmFyIHUgPSB0aGlzLmNoaWxkcmVuW2FdLCBnID0gdS5jaHVua1NpemUoKTtcbiAgICAgICAgICAgIGlmIChlIDwgZykge1xuICAgICAgICAgICAgICB2YXIgTyA9IE1hdGgubWluKG4sIGcgLSBlKTtcbiAgICAgICAgICAgICAgaWYgKHUuaXRlck4oZSwgTywgbCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgICBpZiAoKG4gLT0gTykgPT0gMClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgZSAtPSBnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciBKaSA9IGZ1bmN0aW9uKGUsIG4sIGwpIHtcbiAgICAgICAgaWYgKGwpXG4gICAgICAgICAgZm9yICh2YXIgYSBpbiBsKVxuICAgICAgICAgICAgbC5oYXNPd25Qcm9wZXJ0eShhKSAmJiAodGhpc1thXSA9IGxbYV0pO1xuICAgICAgICB0aGlzLmRvYyA9IGUsIHRoaXMubm9kZSA9IG47XG4gICAgICB9O1xuICAgICAgSmkucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlID0gdGhpcy5kb2MuY20sIG4gPSB0aGlzLmxpbmUud2lkZ2V0cywgbCA9IHRoaXMubGluZSwgYSA9IHN0KGwpO1xuICAgICAgICBpZiAoIShhID09IG51bGwgfHwgIW4pKSB7XG4gICAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCBuLmxlbmd0aDsgKyt1KVxuICAgICAgICAgICAgblt1XSA9PSB0aGlzICYmIG4uc3BsaWNlKHUtLSwgMSk7XG4gICAgICAgICAgbi5sZW5ndGggfHwgKGwud2lkZ2V0cyA9IG51bGwpO1xuICAgICAgICAgIHZhciBnID0gQmkodGhpcyk7XG4gICAgICAgICAgRG4obCwgTWF0aC5tYXgoMCwgbC5oZWlnaHQgLSBnKSksIGUgJiYgKGRuKGUsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZmYoZSwgbCwgLWcpLCB5cihlLCBhLCBcIndpZGdldFwiKTtcbiAgICAgICAgICB9KSwgSHQoZSwgXCJsaW5lV2lkZ2V0Q2xlYXJlZFwiLCBlLCB0aGlzLCBhKSk7XG4gICAgICAgIH1cbiAgICAgIH0sIEppLnByb3RvdHlwZS5jaGFuZ2VkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlID0gdGhpcywgbiA9IHRoaXMuaGVpZ2h0LCBsID0gdGhpcy5kb2MuY20sIGEgPSB0aGlzLmxpbmU7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gbnVsbDtcbiAgICAgICAgdmFyIHUgPSBCaSh0aGlzKSAtIG47XG4gICAgICAgICF1IHx8IChncih0aGlzLmRvYywgYSkgfHwgRG4oYSwgYS5oZWlnaHQgKyB1KSwgbCAmJiBkbihsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBsLmN1ck9wLmZvcmNlVXBkYXRlID0gITAsIGZmKGwsIGEsIHUpLCBIdChsLCBcImxpbmVXaWRnZXRDaGFuZ2VkXCIsIGwsIGUsIHN0KGEpKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSwgbXQoSmkpO1xuICAgICAgZnVuY3Rpb24gZmYoZSwgbiwgbCkge1xuICAgICAgICB0cihuKSA8IChlLmN1ck9wICYmIGUuY3VyT3Auc2Nyb2xsVG9wIHx8IGUuZG9jLnNjcm9sbFRvcCkgJiYgdWwoZSwgbCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBOcChlLCBuLCBsLCBhKSB7XG4gICAgICAgIHZhciB1ID0gbmV3IEppKGUsIGwsIGEpLCBnID0gZS5jbTtcbiAgICAgICAgcmV0dXJuIGcgJiYgdS5ub0hTY3JvbGwgJiYgKGcuZGlzcGxheS5hbGlnbldpZGdldHMgPSAhMCksIFlpKGUsIG4sIFwid2lkZ2V0XCIsIGZ1bmN0aW9uKE8pIHtcbiAgICAgICAgICB2YXIgTCA9IE8ud2lkZ2V0cyB8fCAoTy53aWRnZXRzID0gW10pO1xuICAgICAgICAgIGlmICh1Lmluc2VydEF0ID09IG51bGwgPyBMLnB1c2godSkgOiBMLnNwbGljZShNYXRoLm1pbihMLmxlbmd0aCwgTWF0aC5tYXgoMCwgdS5pbnNlcnRBdCkpLCAwLCB1KSwgdS5saW5lID0gTywgZyAmJiAhZ3IoZSwgTykpIHtcbiAgICAgICAgICAgIHZhciBIID0gdHIoTykgPCBlLnNjcm9sbFRvcDtcbiAgICAgICAgICAgIERuKE8sIE8uaGVpZ2h0ICsgQmkodSkpLCBIICYmIHVsKGcsIHUuaGVpZ2h0KSwgZy5jdXJPcC5mb3JjZVVwZGF0ZSA9ICEwO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIH0pLCBnICYmIEh0KGcsIFwibGluZVdpZGdldEFkZGVkXCIsIGcsIHUsIHR5cGVvZiBuID09IFwibnVtYmVyXCIgPyBuIDogc3QobikpLCB1O1xuICAgICAgfVxuICAgICAgdmFyIGRmID0gMCwgU3IgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgICAgIHRoaXMubGluZXMgPSBbXSwgdGhpcy50eXBlID0gbiwgdGhpcy5kb2MgPSBlLCB0aGlzLmlkID0gKytkZjtcbiAgICAgIH07XG4gICAgICBTci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKSB7XG4gICAgICAgICAgdmFyIGUgPSB0aGlzLmRvYy5jbSwgbiA9IGUgJiYgIWUuY3VyT3A7XG4gICAgICAgICAgaWYgKG4gJiYga3IoZSksIGJ0KHRoaXMsIFwiY2xlYXJcIikpIHtcbiAgICAgICAgICAgIHZhciBsID0gdGhpcy5maW5kKCk7XG4gICAgICAgICAgICBsICYmIEh0KHRoaXMsIFwiY2xlYXJcIiwgbC5mcm9tLCBsLnRvKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgYSA9IG51bGwsIHUgPSBudWxsLCBnID0gMDsgZyA8IHRoaXMubGluZXMubGVuZ3RoOyArK2cpIHtcbiAgICAgICAgICAgIHZhciBPID0gdGhpcy5saW5lc1tnXSwgTCA9IFBpKE8ubWFya2VkU3BhbnMsIHRoaXMpO1xuICAgICAgICAgICAgZSAmJiAhdGhpcy5jb2xsYXBzZWQgPyB5cihlLCBzdChPKSwgXCJ0ZXh0XCIpIDogZSAmJiAoTC50byAhPSBudWxsICYmICh1ID0gc3QoTykpLCBMLmZyb20gIT0gbnVsbCAmJiAoYSA9IHN0KE8pKSksIE8ubWFya2VkU3BhbnMgPSBFYyhPLm1hcmtlZFNwYW5zLCBMKSwgTC5mcm9tID09IG51bGwgJiYgdGhpcy5jb2xsYXBzZWQgJiYgIWdyKHRoaXMuZG9jLCBPKSAmJiBlICYmIERuKE8sIHRpKGUuZGlzcGxheSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZSAmJiB0aGlzLmNvbGxhcHNlZCAmJiAhZS5vcHRpb25zLmxpbmVXcmFwcGluZylcbiAgICAgICAgICAgIGZvciAodmFyIEggPSAwOyBIIDwgdGhpcy5saW5lcy5sZW5ndGg7ICsrSCkge1xuICAgICAgICAgICAgICB2YXIgVSA9IE9uKHRoaXMubGluZXNbSF0pLCBHID0gQm8oVSk7XG4gICAgICAgICAgICAgIEcgPiBlLmRpc3BsYXkubWF4TGluZUxlbmd0aCAmJiAoZS5kaXNwbGF5Lm1heExpbmUgPSBVLCBlLmRpc3BsYXkubWF4TGluZUxlbmd0aCA9IEcsIGUuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9ICEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBhICE9IG51bGwgJiYgZSAmJiB0aGlzLmNvbGxhcHNlZCAmJiB0bihlLCBhLCB1ICsgMSksIHRoaXMubGluZXMubGVuZ3RoID0gMCwgdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCA9ICEwLCB0aGlzLmF0b21pYyAmJiB0aGlzLmRvYy5jYW50RWRpdCAmJiAodGhpcy5kb2MuY2FudEVkaXQgPSAhMSwgZSAmJiBfdShlLmRvYykpLCBlICYmIEh0KGUsIFwibWFya2VyQ2xlYXJlZFwiLCBlLCB0aGlzLCBhLCB1KSwgbiAmJiBqcihlKSwgdGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgfSwgU3IucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgICAgIGUgPT0gbnVsbCAmJiB0aGlzLnR5cGUgPT0gXCJib29rbWFya1wiICYmIChlID0gMSk7XG4gICAgICAgIGZvciAodmFyIGwsIGEsIHUgPSAwOyB1IDwgdGhpcy5saW5lcy5sZW5ndGg7ICsrdSkge1xuICAgICAgICAgIHZhciBnID0gdGhpcy5saW5lc1t1XSwgTyA9IFBpKGcubWFya2VkU3BhbnMsIHRoaXMpO1xuICAgICAgICAgIGlmIChPLmZyb20gIT0gbnVsbCAmJiAobCA9IHEobiA/IGcgOiBzdChnKSwgTy5mcm9tKSwgZSA9PSAtMSkpXG4gICAgICAgICAgICByZXR1cm4gbDtcbiAgICAgICAgICBpZiAoTy50byAhPSBudWxsICYmIChhID0gcShuID8gZyA6IHN0KGcpLCBPLnRvKSwgZSA9PSAxKSlcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsICYmIHsgZnJvbTogbCwgdG86IGEgfTtcbiAgICAgIH0sIFNyLnByb3RvdHlwZS5jaGFuZ2VkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlID0gdGhpcywgbiA9IHRoaXMuZmluZCgtMSwgITApLCBsID0gdGhpcywgYSA9IHRoaXMuZG9jLmNtO1xuICAgICAgICAhbiB8fCAhYSB8fCBkbihhLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgdSA9IG4ubGluZSwgZyA9IHN0KG4ubGluZSksIE8gPSBKYShhLCBnKTtcbiAgICAgICAgICBpZiAoTyAmJiAobXUoTyksIGEuY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IGEuY3VyT3AuZm9yY2VVcGRhdGUgPSAhMCksIGEuY3VyT3AudXBkYXRlTWF4TGluZSA9ICEwLCAhZ3IobC5kb2MsIHUpICYmIGwuaGVpZ2h0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBMID0gbC5oZWlnaHQ7XG4gICAgICAgICAgICBsLmhlaWdodCA9IG51bGw7XG4gICAgICAgICAgICB2YXIgSCA9IEJpKGwpIC0gTDtcbiAgICAgICAgICAgIEggJiYgRG4odSwgdS5oZWlnaHQgKyBIKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgSHQoYSwgXCJtYXJrZXJDaGFuZ2VkXCIsIGEsIGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIFNyLnByb3RvdHlwZS5hdHRhY2hMaW5lID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoIXRoaXMubGluZXMubGVuZ3RoICYmIHRoaXMuZG9jLmNtKSB7XG4gICAgICAgICAgdmFyIG4gPSB0aGlzLmRvYy5jbS5jdXJPcDtcbiAgICAgICAgICAoIW4ubWF5YmVIaWRkZW5NYXJrZXJzIHx8IHRlKG4ubWF5YmVIaWRkZW5NYXJrZXJzLCB0aGlzKSA9PSAtMSkgJiYgKG4ubWF5YmVVbmhpZGRlbk1hcmtlcnMgfHwgKG4ubWF5YmVVbmhpZGRlbk1hcmtlcnMgPSBbXSkpLnB1c2godGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saW5lcy5wdXNoKGUpO1xuICAgICAgfSwgU3IucHJvdG90eXBlLmRldGFjaExpbmUgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICh0aGlzLmxpbmVzLnNwbGljZSh0ZSh0aGlzLmxpbmVzLCBlKSwgMSksICF0aGlzLmxpbmVzLmxlbmd0aCAmJiB0aGlzLmRvYy5jbSkge1xuICAgICAgICAgIHZhciBuID0gdGhpcy5kb2MuY20uY3VyT3A7XG4gICAgICAgICAgKG4ubWF5YmVIaWRkZW5NYXJrZXJzIHx8IChuLm1heWJlSGlkZGVuTWFya2VycyA9IFtdKSkucHVzaCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfSwgbXQoU3IpO1xuICAgICAgZnVuY3Rpb24gZmkoZSwgbiwgbCwgYSwgdSkge1xuICAgICAgICBpZiAoYSAmJiBhLnNoYXJlZClcbiAgICAgICAgICByZXR1cm4gT3AoZSwgbiwgbCwgYSwgdSk7XG4gICAgICAgIGlmIChlLmNtICYmICFlLmNtLmN1ck9wKVxuICAgICAgICAgIHJldHVybiAkdChlLmNtLCBmaSkoZSwgbiwgbCwgYSwgdSk7XG4gICAgICAgIHZhciBnID0gbmV3IFNyKGUsIHUpLCBPID0gb2UobiwgbCk7XG4gICAgICAgIGlmIChhICYmIGxlKGEsIGcsICExKSwgTyA+IDAgfHwgTyA9PSAwICYmIGcuY2xlYXJXaGVuRW1wdHkgIT09ICExKVxuICAgICAgICAgIHJldHVybiBnO1xuICAgICAgICBpZiAoZy5yZXBsYWNlZFdpdGggJiYgKGcuY29sbGFwc2VkID0gITAsIGcud2lkZ2V0Tm9kZSA9IFYoXCJzcGFuXCIsIFtnLnJlcGxhY2VkV2l0aF0sIFwiQ29kZU1pcnJvci13aWRnZXRcIiksIGEuaGFuZGxlTW91c2VFdmVudHMgfHwgZy53aWRnZXROb2RlLnNldEF0dHJpYnV0ZShcImNtLWlnbm9yZS1ldmVudHNcIiwgXCJ0cnVlXCIpLCBhLmluc2VydExlZnQgJiYgKGcud2lkZ2V0Tm9kZS5pbnNlcnRMZWZ0ID0gITApKSwgZy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICBpZiAoZXUoZSwgbi5saW5lLCBuLCBsLCBnKSB8fCBuLmxpbmUgIT0gbC5saW5lICYmIGV1KGUsIGwubGluZSwgbiwgbCwgZykpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnNlcnRpbmcgY29sbGFwc2VkIG1hcmtlciBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lXCIpO1xuICAgICAgICAgIENjKCk7XG4gICAgICAgIH1cbiAgICAgICAgZy5hZGRUb0hpc3RvcnkgJiYgUXUoZSwgeyBmcm9tOiBuLCB0bzogbCwgb3JpZ2luOiBcIm1hcmtUZXh0XCIgfSwgZS5zZWwsIE5hTik7XG4gICAgICAgIHZhciBMID0gbi5saW5lLCBIID0gZS5jbSwgVTtcbiAgICAgICAgaWYgKGUuaXRlcihMLCBsLmxpbmUgKyAxLCBmdW5jdGlvbihZKSB7XG4gICAgICAgICAgSCAmJiBnLmNvbGxhcHNlZCAmJiAhSC5vcHRpb25zLmxpbmVXcmFwcGluZyAmJiBPbihZKSA9PSBILmRpc3BsYXkubWF4TGluZSAmJiAoVSA9ICEwKSwgZy5jb2xsYXBzZWQgJiYgTCAhPSBuLmxpbmUgJiYgRG4oWSwgMCksIFNjKFksIG5ldyBPbyhcbiAgICAgICAgICAgIGcsXG4gICAgICAgICAgICBMID09IG4ubGluZSA/IG4uY2ggOiBudWxsLFxuICAgICAgICAgICAgTCA9PSBsLmxpbmUgPyBsLmNoIDogbnVsbFxuICAgICAgICAgICksIGUuY20gJiYgZS5jbS5jdXJPcCksICsrTDtcbiAgICAgICAgfSksIGcuY29sbGFwc2VkICYmIGUuaXRlcihuLmxpbmUsIGwubGluZSArIDEsIGZ1bmN0aW9uKFkpIHtcbiAgICAgICAgICBncihlLCBZKSAmJiBEbihZLCAwKTtcbiAgICAgICAgfSksIGcuY2xlYXJPbkVudGVyICYmIG5lKGcsIFwiYmVmb3JlQ3Vyc29yRW50ZXJcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGcuY2xlYXIoKTtcbiAgICAgICAgfSksIGcucmVhZE9ubHkgJiYgKGJjKCksIChlLmhpc3RvcnkuZG9uZS5sZW5ndGggfHwgZS5oaXN0b3J5LnVuZG9uZS5sZW5ndGgpICYmIGUuY2xlYXJIaXN0b3J5KCkpLCBnLmNvbGxhcHNlZCAmJiAoZy5pZCA9ICsrZGYsIGcuYXRvbWljID0gITApLCBIKSB7XG4gICAgICAgICAgaWYgKFUgJiYgKEguY3VyT3AudXBkYXRlTWF4TGluZSA9ICEwKSwgZy5jb2xsYXBzZWQpXG4gICAgICAgICAgICB0bihILCBuLmxpbmUsIGwubGluZSArIDEpO1xuICAgICAgICAgIGVsc2UgaWYgKGcuY2xhc3NOYW1lIHx8IGcuc3RhcnRTdHlsZSB8fCBnLmVuZFN0eWxlIHx8IGcuY3NzIHx8IGcuYXR0cmlidXRlcyB8fCBnLnRpdGxlKVxuICAgICAgICAgICAgZm9yICh2YXIgRyA9IG4ubGluZTsgRyA8PSBsLmxpbmU7IEcrKylcbiAgICAgICAgICAgICAgeXIoSCwgRywgXCJ0ZXh0XCIpO1xuICAgICAgICAgIGcuYXRvbWljICYmIF91KEguZG9jKSwgSHQoSCwgXCJtYXJrZXJBZGRlZFwiLCBILCBnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZztcbiAgICAgIH1cbiAgICAgIHZhciBaaSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICAgICAgdGhpcy5tYXJrZXJzID0gZSwgdGhpcy5wcmltYXJ5ID0gbjtcbiAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBlLmxlbmd0aDsgKytsKVxuICAgICAgICAgIGVbbF0ucGFyZW50ID0gdGhpcztcbiAgICAgIH07XG4gICAgICBaaS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKSB7XG4gICAgICAgICAgdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCA9ICEwO1xuICAgICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgdGhpcy5tYXJrZXJzLmxlbmd0aDsgKytlKVxuICAgICAgICAgICAgdGhpcy5tYXJrZXJzW2VdLmNsZWFyKCk7XG4gICAgICAgICAgSHQodGhpcywgXCJjbGVhclwiKTtcbiAgICAgICAgfVxuICAgICAgfSwgWmkucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaW1hcnkuZmluZChlLCBuKTtcbiAgICAgIH0sIG10KFppKTtcbiAgICAgIGZ1bmN0aW9uIE9wKGUsIG4sIGwsIGEsIHUpIHtcbiAgICAgICAgYSA9IGxlKGEpLCBhLnNoYXJlZCA9ICExO1xuICAgICAgICB2YXIgZyA9IFtmaShlLCBuLCBsLCBhLCB1KV0sIE8gPSBnWzBdLCBMID0gYS53aWRnZXROb2RlO1xuICAgICAgICByZXR1cm4gRXIoZSwgZnVuY3Rpb24oSCkge1xuICAgICAgICAgIEwgJiYgKGEud2lkZ2V0Tm9kZSA9IEwuY2xvbmVOb2RlKCEwKSksIGcucHVzaChmaShILCBWZShILCBuKSwgVmUoSCwgbCksIGEsIHUpKTtcbiAgICAgICAgICBmb3IgKHZhciBVID0gMDsgVSA8IEgubGlua2VkLmxlbmd0aDsgKytVKVxuICAgICAgICAgICAgaWYgKEgubGlua2VkW1VdLmlzUGFyZW50KVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgTyA9IEJlKGcpO1xuICAgICAgICB9KSwgbmV3IFppKGcsIE8pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gY2YoZSkge1xuICAgICAgICByZXR1cm4gZS5maW5kTWFya3MocShlLmZpcnN0LCAwKSwgZS5jbGlwUG9zKHEoZS5sYXN0TGluZSgpKSksIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICByZXR1cm4gbi5wYXJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gUHAoZSwgbikge1xuICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IG4ubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgICB2YXIgYSA9IG5bbF0sIHUgPSBhLmZpbmQoKSwgZyA9IGUuY2xpcFBvcyh1LmZyb20pLCBPID0gZS5jbGlwUG9zKHUudG8pO1xuICAgICAgICAgIGlmIChvZShnLCBPKSkge1xuICAgICAgICAgICAgdmFyIEwgPSBmaShlLCBnLCBPLCBhLnByaW1hcnksIGEucHJpbWFyeS50eXBlKTtcbiAgICAgICAgICAgIGEubWFya2Vycy5wdXNoKEwpLCBMLnBhcmVudCA9IGE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBGcChlKSB7XG4gICAgICAgIGZvciAodmFyIG4gPSBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgdmFyIHUgPSBlW2FdLCBnID0gW3UucHJpbWFyeS5kb2NdO1xuICAgICAgICAgIEVyKHUucHJpbWFyeS5kb2MsIGZ1bmN0aW9uKEgpIHtcbiAgICAgICAgICAgIHJldHVybiBnLnB1c2goSCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZm9yICh2YXIgTyA9IDA7IE8gPCB1Lm1hcmtlcnMubGVuZ3RoOyBPKyspIHtcbiAgICAgICAgICAgIHZhciBMID0gdS5tYXJrZXJzW09dO1xuICAgICAgICAgICAgdGUoZywgTC5kb2MpID09IC0xICYmIChMLnBhcmVudCA9IG51bGwsIHUubWFya2Vycy5zcGxpY2UoTy0tLCAxKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBsID0gMDsgbCA8IGUubGVuZ3RoOyBsKyspXG4gICAgICAgICAgbihsKTtcbiAgICAgIH1cbiAgICAgIHZhciBMcCA9IDAsIG5uID0gZnVuY3Rpb24oZSwgbiwgbCwgYSwgdSkge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2Ygbm4pKVxuICAgICAgICAgIHJldHVybiBuZXcgbm4oZSwgbiwgbCwgYSwgdSk7XG4gICAgICAgIGwgPT0gbnVsbCAmJiAobCA9IDApLCBYaS5jYWxsKHRoaXMsIFtuZXcgS2koW25ldyBxcihcIlwiLCBudWxsKV0pXSksIHRoaXMuZmlyc3QgPSBsLCB0aGlzLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsTGVmdCA9IDAsIHRoaXMuY2FudEVkaXQgPSAhMSwgdGhpcy5jbGVhbkdlbmVyYXRpb24gPSAxLCB0aGlzLm1vZGVGcm9udGllciA9IHRoaXMuaGlnaGxpZ2h0RnJvbnRpZXIgPSBsO1xuICAgICAgICB2YXIgZyA9IHEobCwgMCk7XG4gICAgICAgIHRoaXMuc2VsID0gYnIoZyksIHRoaXMuaGlzdG9yeSA9IG5ldyBLbyhudWxsKSwgdGhpcy5pZCA9ICsrTHAsIHRoaXMubW9kZU9wdGlvbiA9IG4sIHRoaXMubGluZVNlcCA9IGEsIHRoaXMuZGlyZWN0aW9uID0gdSA9PSBcInJ0bFwiID8gXCJydGxcIiA6IFwibHRyXCIsIHRoaXMuZXh0ZW5kID0gITEsIHR5cGVvZiBlID09IFwic3RyaW5nXCIgJiYgKGUgPSB0aGlzLnNwbGl0TGluZXMoZSkpLCBnbCh0aGlzLCB7IGZyb206IGcsIHRvOiBnLCB0ZXh0OiBlIH0pLCBRdCh0aGlzLCBicihnKSwgTWUpO1xuICAgICAgfTtcbiAgICAgIG5uLnByb3RvdHlwZSA9IGRyKFhpLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjogbm4sXG4gICAgICAgIGl0ZXI6IGZ1bmN0aW9uKGUsIG4sIGwpIHtcbiAgICAgICAgICBsID8gdGhpcy5pdGVyTihlIC0gdGhpcy5maXJzdCwgbiAtIGUsIGwpIDogdGhpcy5pdGVyTih0aGlzLmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5zaXplLCBlKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0OiBmdW5jdGlvbihlLCBuKSB7XG4gICAgICAgICAgZm9yICh2YXIgbCA9IDAsIGEgPSAwOyBhIDwgbi5sZW5ndGg7ICsrYSlcbiAgICAgICAgICAgIGwgKz0gblthXS5oZWlnaHQ7XG4gICAgICAgICAgdGhpcy5pbnNlcnRJbm5lcihlIC0gdGhpcy5maXJzdCwgbiwgbCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24oZSwgbikge1xuICAgICAgICAgIHRoaXMucmVtb3ZlSW5uZXIoZSAtIHRoaXMuZmlyc3QsIG4pO1xuICAgICAgICB9LFxuICAgICAgICBnZXRWYWx1ZTogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHZhciBuID0gWnIodGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSk7XG4gICAgICAgICAgcmV0dXJuIGUgPT09ICExID8gbiA6IG4uam9pbihlIHx8IHRoaXMubGluZVNlcGFyYXRvcigpKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0VmFsdWU6IGt0KGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICB2YXIgbiA9IHEodGhpcy5maXJzdCwgMCksIGwgPSB0aGlzLmZpcnN0ICsgdGhpcy5zaXplIC0gMTtcbiAgICAgICAgICBzaSh0aGlzLCB7XG4gICAgICAgICAgICBmcm9tOiBuLFxuICAgICAgICAgICAgdG86IHEobCwgRmUodGhpcywgbCkudGV4dC5sZW5ndGgpLFxuICAgICAgICAgICAgdGV4dDogdGhpcy5zcGxpdExpbmVzKGUpLFxuICAgICAgICAgICAgb3JpZ2luOiBcInNldFZhbHVlXCIsXG4gICAgICAgICAgICBmdWxsOiAhMFxuICAgICAgICAgIH0sICEwKSwgdGhpcy5jbSAmJiBraSh0aGlzLmNtLCAwLCAwKSwgUXQodGhpcywgYnIobiksIE1lKTtcbiAgICAgICAgfSksXG4gICAgICAgIHJlcGxhY2VSYW5nZTogZnVuY3Rpb24oZSwgbiwgbCwgYSkge1xuICAgICAgICAgIG4gPSBWZSh0aGlzLCBuKSwgbCA9IGwgPyBWZSh0aGlzLCBsKSA6IG4sIHVpKHRoaXMsIGUsIG4sIGwsIGEpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRSYW5nZTogZnVuY3Rpb24oZSwgbiwgbCkge1xuICAgICAgICAgIHZhciBhID0gX24odGhpcywgVmUodGhpcywgZSksIFZlKHRoaXMsIG4pKTtcbiAgICAgICAgICByZXR1cm4gbCA9PT0gITEgPyBhIDogbCA9PT0gXCJcIiA/IGEuam9pbihcIlwiKSA6IGEuam9pbihsIHx8IHRoaXMubGluZVNlcGFyYXRvcigpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0TGluZTogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHZhciBuID0gdGhpcy5nZXRMaW5lSGFuZGxlKGUpO1xuICAgICAgICAgIHJldHVybiBuICYmIG4udGV4dDtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0TGluZUhhbmRsZTogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIGlmICh6KHRoaXMsIGUpKVxuICAgICAgICAgICAgcmV0dXJuIEZlKHRoaXMsIGUpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRMaW5lTnVtYmVyOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgcmV0dXJuIHN0KGUpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRMaW5lSGFuZGxlVmlzdWFsU3RhcnQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIGUgPT0gXCJudW1iZXJcIiAmJiAoZSA9IEZlKHRoaXMsIGUpKSwgT24oZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGxpbmVDb3VudDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2l6ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZmlyc3RMaW5lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5maXJzdDtcbiAgICAgICAgfSxcbiAgICAgICAgbGFzdExpbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmZpcnN0ICsgdGhpcy5zaXplIC0gMTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xpcFBvczogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBWZSh0aGlzLCBlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Q3Vyc29yOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgdmFyIG4gPSB0aGlzLnNlbC5wcmltYXJ5KCksIGw7XG4gICAgICAgICAgcmV0dXJuIGUgPT0gbnVsbCB8fCBlID09IFwiaGVhZFwiID8gbCA9IG4uaGVhZCA6IGUgPT0gXCJhbmNob3JcIiA/IGwgPSBuLmFuY2hvciA6IGUgPT0gXCJlbmRcIiB8fCBlID09IFwidG9cIiB8fCBlID09PSAhMSA/IGwgPSBuLnRvKCkgOiBsID0gbi5mcm9tKCksIGw7XG4gICAgICAgIH0sXG4gICAgICAgIGxpc3RTZWxlY3Rpb25zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZWwucmFuZ2VzO1xuICAgICAgICB9LFxuICAgICAgICBzb21ldGhpbmdTZWxlY3RlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEN1cnNvcjoga3QoZnVuY3Rpb24oZSwgbiwgbCkge1xuICAgICAgICAgIEp1KHRoaXMsIFZlKHRoaXMsIHR5cGVvZiBlID09IFwibnVtYmVyXCIgPyBxKGUsIG4gfHwgMCkgOiBlKSwgbnVsbCwgbCk7XG4gICAgICAgIH0pLFxuICAgICAgICBzZXRTZWxlY3Rpb246IGt0KGZ1bmN0aW9uKGUsIG4sIGwpIHtcbiAgICAgICAgICBKdSh0aGlzLCBWZSh0aGlzLCBlKSwgVmUodGhpcywgbiB8fCBlKSwgbCk7XG4gICAgICAgIH0pLFxuICAgICAgICBleHRlbmRTZWxlY3Rpb246IGt0KGZ1bmN0aW9uKGUsIG4sIGwpIHtcbiAgICAgICAgICBKbyh0aGlzLCBWZSh0aGlzLCBlKSwgbiAmJiBWZSh0aGlzLCBuKSwgbCk7XG4gICAgICAgIH0pLFxuICAgICAgICBleHRlbmRTZWxlY3Rpb25zOiBrdChmdW5jdGlvbihlLCBuKSB7XG4gICAgICAgICAgWHUodGhpcywganModGhpcywgZSksIG4pO1xuICAgICAgICB9KSxcbiAgICAgICAgZXh0ZW5kU2VsZWN0aW9uc0J5OiBrdChmdW5jdGlvbihlLCBuKSB7XG4gICAgICAgICAgdmFyIGwgPSBwdCh0aGlzLnNlbC5yYW5nZXMsIGUpO1xuICAgICAgICAgIFh1KHRoaXMsIGpzKHRoaXMsIGwpLCBuKTtcbiAgICAgICAgfSksXG4gICAgICAgIHNldFNlbGVjdGlvbnM6IGt0KGZ1bmN0aW9uKGUsIG4sIGwpIHtcbiAgICAgICAgICBpZiAoISFlLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yICh2YXIgYSA9IFtdLCB1ID0gMDsgdSA8IGUubGVuZ3RoOyB1KyspXG4gICAgICAgICAgICAgIGFbdV0gPSBuZXcgdXQoXG4gICAgICAgICAgICAgICAgVmUodGhpcywgZVt1XS5hbmNob3IpLFxuICAgICAgICAgICAgICAgIFZlKHRoaXMsIGVbdV0uaGVhZCB8fCBlW3VdLmFuY2hvcilcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG4gPT0gbnVsbCAmJiAobiA9IE1hdGgubWluKGUubGVuZ3RoIC0gMSwgdGhpcy5zZWwucHJpbUluZGV4KSksIFF0KHRoaXMsIEZuKHRoaXMuY20sIGEsIG4pLCBsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBhZGRTZWxlY3Rpb246IGt0KGZ1bmN0aW9uKGUsIG4sIGwpIHtcbiAgICAgICAgICB2YXIgYSA9IHRoaXMuc2VsLnJhbmdlcy5zbGljZSgwKTtcbiAgICAgICAgICBhLnB1c2gobmV3IHV0KFZlKHRoaXMsIGUpLCBWZSh0aGlzLCBuIHx8IGUpKSksIFF0KHRoaXMsIEZuKHRoaXMuY20sIGEsIGEubGVuZ3RoIC0gMSksIGwpO1xuICAgICAgICB9KSxcbiAgICAgICAgZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgZm9yICh2YXIgbiA9IHRoaXMuc2VsLnJhbmdlcywgbCwgYSA9IDA7IGEgPCBuLmxlbmd0aDsgYSsrKSB7XG4gICAgICAgICAgICB2YXIgdSA9IF9uKHRoaXMsIG5bYV0uZnJvbSgpLCBuW2FdLnRvKCkpO1xuICAgICAgICAgICAgbCA9IGwgPyBsLmNvbmNhdCh1KSA6IHU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBlID09PSAhMSA/IGwgOiBsLmpvaW4oZSB8fCB0aGlzLmxpbmVTZXBhcmF0b3IoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFNlbGVjdGlvbnM6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICBmb3IgKHZhciBuID0gW10sIGwgPSB0aGlzLnNlbC5yYW5nZXMsIGEgPSAwOyBhIDwgbC5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgdmFyIHUgPSBfbih0aGlzLCBsW2FdLmZyb20oKSwgbFthXS50bygpKTtcbiAgICAgICAgICAgIGUgIT09ICExICYmICh1ID0gdS5qb2luKGUgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpKSwgblthXSA9IHU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICB9LFxuICAgICAgICByZXBsYWNlU2VsZWN0aW9uOiBmdW5jdGlvbihlLCBuLCBsKSB7XG4gICAgICAgICAgZm9yICh2YXIgYSA9IFtdLCB1ID0gMDsgdSA8IHRoaXMuc2VsLnJhbmdlcy5sZW5ndGg7IHUrKylcbiAgICAgICAgICAgIGFbdV0gPSBlO1xuICAgICAgICAgIHRoaXMucmVwbGFjZVNlbGVjdGlvbnMoYSwgbiwgbCB8fCBcIitpbnB1dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVwbGFjZVNlbGVjdGlvbnM6IGt0KGZ1bmN0aW9uKGUsIG4sIGwpIHtcbiAgICAgICAgICBmb3IgKHZhciBhID0gW10sIHUgPSB0aGlzLnNlbCwgZyA9IDA7IGcgPCB1LnJhbmdlcy5sZW5ndGg7IGcrKykge1xuICAgICAgICAgICAgdmFyIE8gPSB1LnJhbmdlc1tnXTtcbiAgICAgICAgICAgIGFbZ10gPSB7IGZyb206IE8uZnJvbSgpLCB0bzogTy50bygpLCB0ZXh0OiB0aGlzLnNwbGl0TGluZXMoZVtnXSksIG9yaWdpbjogbCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHZhciBMID0gbiAmJiBuICE9IFwiZW5kXCIgJiYgRXAodGhpcywgYSwgbiksIEggPSBhLmxlbmd0aCAtIDE7IEggPj0gMDsgSC0tKVxuICAgICAgICAgICAgc2kodGhpcywgYVtIXSk7XG4gICAgICAgICAgTCA/IFp1KHRoaXMsIEwpIDogdGhpcy5jbSAmJiBpaSh0aGlzLmNtKTtcbiAgICAgICAgfSksXG4gICAgICAgIHVuZG86IGt0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF9vKHRoaXMsIFwidW5kb1wiKTtcbiAgICAgICAgfSksXG4gICAgICAgIHJlZG86IGt0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF9vKHRoaXMsIFwicmVkb1wiKTtcbiAgICAgICAgfSksXG4gICAgICAgIHVuZG9TZWxlY3Rpb246IGt0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIF9vKHRoaXMsIFwidW5kb1wiLCAhMCk7XG4gICAgICAgIH0pLFxuICAgICAgICByZWRvU2VsZWN0aW9uOiBrdChmdW5jdGlvbigpIHtcbiAgICAgICAgICBfbyh0aGlzLCBcInJlZG9cIiwgITApO1xuICAgICAgICB9KSxcbiAgICAgICAgc2V0RXh0ZW5kaW5nOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgdGhpcy5leHRlbmQgPSBlO1xuICAgICAgICB9LFxuICAgICAgICBnZXRFeHRlbmRpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmV4dGVuZDtcbiAgICAgICAgfSxcbiAgICAgICAgaGlzdG9yeVNpemU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZvciAodmFyIGUgPSB0aGlzLmhpc3RvcnksIG4gPSAwLCBsID0gMCwgYSA9IDA7IGEgPCBlLmRvbmUubGVuZ3RoOyBhKyspXG4gICAgICAgICAgICBlLmRvbmVbYV0ucmFuZ2VzIHx8ICsrbjtcbiAgICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IGUudW5kb25lLmxlbmd0aDsgdSsrKVxuICAgICAgICAgICAgZS51bmRvbmVbdV0ucmFuZ2VzIHx8ICsrbDtcbiAgICAgICAgICByZXR1cm4geyB1bmRvOiBuLCByZWRvOiBsIH07XG4gICAgICAgIH0sXG4gICAgICAgIGNsZWFySGlzdG9yeTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGUgPSB0aGlzO1xuICAgICAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBLbyh0aGlzLmhpc3RvcnkpLCBFcih0aGlzLCBmdW5jdGlvbihuKSB7XG4gICAgICAgICAgICByZXR1cm4gbi5oaXN0b3J5ID0gZS5oaXN0b3J5O1xuICAgICAgICAgIH0sICEwKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWFya0NsZWFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aGlzLmNsZWFuR2VuZXJhdGlvbiA9IHRoaXMuY2hhbmdlR2VuZXJhdGlvbighMCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNoYW5nZUdlbmVyYXRpb246IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZSAmJiAodGhpcy5oaXN0b3J5Lmxhc3RPcCA9IHRoaXMuaGlzdG9yeS5sYXN0U2VsT3AgPSB0aGlzLmhpc3RvcnkubGFzdE9yaWdpbiA9IG51bGwpLCB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgaXNDbGVhbjogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbiA9PSAoZSB8fCB0aGlzLmNsZWFuR2VuZXJhdGlvbik7XG4gICAgICAgIH0sXG4gICAgICAgIGdldEhpc3Rvcnk6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb25lOiBhaSh0aGlzLmhpc3RvcnkuZG9uZSksXG4gICAgICAgICAgICB1bmRvbmU6IGFpKHRoaXMuaGlzdG9yeS51bmRvbmUpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0SGlzdG9yeTogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHZhciBuID0gdGhpcy5oaXN0b3J5ID0gbmV3IEtvKHRoaXMuaGlzdG9yeSk7XG4gICAgICAgICAgbi5kb25lID0gYWkoZS5kb25lLnNsaWNlKDApLCBudWxsLCAhMCksIG4udW5kb25lID0gYWkoZS51bmRvbmUuc2xpY2UoMCksIG51bGwsICEwKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0R3V0dGVyTWFya2VyOiBrdChmdW5jdGlvbihlLCBuLCBsKSB7XG4gICAgICAgICAgcmV0dXJuIFlpKHRoaXMsIGUsIFwiZ3V0dGVyXCIsIGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgIHZhciB1ID0gYS5ndXR0ZXJNYXJrZXJzIHx8IChhLmd1dHRlck1hcmtlcnMgPSB7fSk7XG4gICAgICAgICAgICByZXR1cm4gdVtuXSA9IGwsICFsICYmIGtuKHUpICYmIChhLmd1dHRlck1hcmtlcnMgPSBudWxsKSwgITA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICBjbGVhckd1dHRlcjoga3QoZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHZhciBuID0gdGhpcztcbiAgICAgICAgICB0aGlzLml0ZXIoZnVuY3Rpb24obCkge1xuICAgICAgICAgICAgbC5ndXR0ZXJNYXJrZXJzICYmIGwuZ3V0dGVyTWFya2Vyc1tlXSAmJiBZaShuLCBsLCBcImd1dHRlclwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGwuZ3V0dGVyTWFya2Vyc1tlXSA9IG51bGwsIGtuKGwuZ3V0dGVyTWFya2VycykgJiYgKGwuZ3V0dGVyTWFya2VycyA9IG51bGwpLCAhMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgbGluZUluZm86IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICB2YXIgbjtcbiAgICAgICAgICBpZiAodHlwZW9mIGUgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgaWYgKCF6KHRoaXMsIGUpIHx8IChuID0gZSwgZSA9IEZlKHRoaXMsIGUpLCAhZSkpXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0gZWxzZSBpZiAobiA9IHN0KGUpLCBuID09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGluZTogbixcbiAgICAgICAgICAgIGhhbmRsZTogZSxcbiAgICAgICAgICAgIHRleHQ6IGUudGV4dCxcbiAgICAgICAgICAgIGd1dHRlck1hcmtlcnM6IGUuZ3V0dGVyTWFya2VycyxcbiAgICAgICAgICAgIHRleHRDbGFzczogZS50ZXh0Q2xhc3MsXG4gICAgICAgICAgICBiZ0NsYXNzOiBlLmJnQ2xhc3MsXG4gICAgICAgICAgICB3cmFwQ2xhc3M6IGUud3JhcENsYXNzLFxuICAgICAgICAgICAgd2lkZ2V0czogZS53aWRnZXRzXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgYWRkTGluZUNsYXNzOiBrdChmdW5jdGlvbihlLCBuLCBsKSB7XG4gICAgICAgICAgcmV0dXJuIFlpKHRoaXMsIGUsIG4gPT0gXCJndXR0ZXJcIiA/IFwiZ3V0dGVyXCIgOiBcImNsYXNzXCIsIGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgIHZhciB1ID0gbiA9PSBcInRleHRcIiA/IFwidGV4dENsYXNzXCIgOiBuID09IFwiYmFja2dyb3VuZFwiID8gXCJiZ0NsYXNzXCIgOiBuID09IFwiZ3V0dGVyXCIgPyBcImd1dHRlckNsYXNzXCIgOiBcIndyYXBDbGFzc1wiO1xuICAgICAgICAgICAgaWYgKCFhW3VdKVxuICAgICAgICAgICAgICBhW3VdID0gbDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoaChsKS50ZXN0KGFbdV0pKVxuICAgICAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICAgICAgYVt1XSArPSBcIiBcIiArIGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICByZW1vdmVMaW5lQ2xhc3M6IGt0KGZ1bmN0aW9uKGUsIG4sIGwpIHtcbiAgICAgICAgICByZXR1cm4gWWkodGhpcywgZSwgbiA9PSBcImd1dHRlclwiID8gXCJndXR0ZXJcIiA6IFwiY2xhc3NcIiwgZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgdmFyIHUgPSBuID09IFwidGV4dFwiID8gXCJ0ZXh0Q2xhc3NcIiA6IG4gPT0gXCJiYWNrZ3JvdW5kXCIgPyBcImJnQ2xhc3NcIiA6IG4gPT0gXCJndXR0ZXJcIiA/IFwiZ3V0dGVyQ2xhc3NcIiA6IFwid3JhcENsYXNzXCIsIGcgPSBhW3VdO1xuICAgICAgICAgICAgaWYgKGcpXG4gICAgICAgICAgICAgIGlmIChsID09IG51bGwpXG4gICAgICAgICAgICAgICAgYVt1XSA9IG51bGw7XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBPID0gZy5tYXRjaChoKGwpKTtcbiAgICAgICAgICAgICAgICBpZiAoIU8pXG4gICAgICAgICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgdmFyIEwgPSBPLmluZGV4ICsgT1swXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgYVt1XSA9IGcuc2xpY2UoMCwgTy5pbmRleCkgKyAoIU8uaW5kZXggfHwgTCA9PSBnLmxlbmd0aCA/IFwiXCIgOiBcIiBcIikgKyBnLnNsaWNlKEwpIHx8IG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgYWRkTGluZVdpZGdldDoga3QoZnVuY3Rpb24oZSwgbiwgbCkge1xuICAgICAgICAgIHJldHVybiBOcCh0aGlzLCBlLCBuLCBsKTtcbiAgICAgICAgfSksXG4gICAgICAgIHJlbW92ZUxpbmVXaWRnZXQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICBlLmNsZWFyKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1hcmtUZXh0OiBmdW5jdGlvbihlLCBuLCBsKSB7XG4gICAgICAgICAgcmV0dXJuIGZpKHRoaXMsIFZlKHRoaXMsIGUpLCBWZSh0aGlzLCBuKSwgbCwgbCAmJiBsLnR5cGUgfHwgXCJyYW5nZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0Qm9va21hcms6IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICAgICAgICB2YXIgbCA9IHtcbiAgICAgICAgICAgIHJlcGxhY2VkV2l0aDogbiAmJiAobi5ub2RlVHlwZSA9PSBudWxsID8gbi53aWRnZXQgOiBuKSxcbiAgICAgICAgICAgIGluc2VydExlZnQ6IG4gJiYgbi5pbnNlcnRMZWZ0LFxuICAgICAgICAgICAgY2xlYXJXaGVuRW1wdHk6ICExLFxuICAgICAgICAgICAgc2hhcmVkOiBuICYmIG4uc2hhcmVkLFxuICAgICAgICAgICAgaGFuZGxlTW91c2VFdmVudHM6IG4gJiYgbi5oYW5kbGVNb3VzZUV2ZW50c1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGUgPSBWZSh0aGlzLCBlKSwgZmkodGhpcywgZSwgZSwgbCwgXCJib29rbWFya1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZmluZE1hcmtzQXQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICBlID0gVmUodGhpcywgZSk7XG4gICAgICAgICAgdmFyIG4gPSBbXSwgbCA9IEZlKHRoaXMsIGUubGluZSkubWFya2VkU3BhbnM7XG4gICAgICAgICAgaWYgKGwpXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGwubGVuZ3RoOyArK2EpIHtcbiAgICAgICAgICAgICAgdmFyIHUgPSBsW2FdO1xuICAgICAgICAgICAgICAodS5mcm9tID09IG51bGwgfHwgdS5mcm9tIDw9IGUuY2gpICYmICh1LnRvID09IG51bGwgfHwgdS50byA+PSBlLmNoKSAmJiBuLnB1c2godS5tYXJrZXIucGFyZW50IHx8IHUubWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgfSxcbiAgICAgICAgZmluZE1hcmtzOiBmdW5jdGlvbihlLCBuLCBsKSB7XG4gICAgICAgICAgZSA9IFZlKHRoaXMsIGUpLCBuID0gVmUodGhpcywgbik7XG4gICAgICAgICAgdmFyIGEgPSBbXSwgdSA9IGUubGluZTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pdGVyKGUubGluZSwgbi5saW5lICsgMSwgZnVuY3Rpb24oZykge1xuICAgICAgICAgICAgdmFyIE8gPSBnLm1hcmtlZFNwYW5zO1xuICAgICAgICAgICAgaWYgKE8pXG4gICAgICAgICAgICAgIGZvciAodmFyIEwgPSAwOyBMIDwgTy5sZW5ndGg7IEwrKykge1xuICAgICAgICAgICAgICAgIHZhciBIID0gT1tMXTtcbiAgICAgICAgICAgICAgICAhKEgudG8gIT0gbnVsbCAmJiB1ID09IGUubGluZSAmJiBlLmNoID49IEgudG8gfHwgSC5mcm9tID09IG51bGwgJiYgdSAhPSBlLmxpbmUgfHwgSC5mcm9tICE9IG51bGwgJiYgdSA9PSBuLmxpbmUgJiYgSC5mcm9tID49IG4uY2gpICYmICghbCB8fCBsKEgubWFya2VyKSkgJiYgYS5wdXNoKEgubWFya2VyLnBhcmVudCB8fCBILm1hcmtlcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICsrdTtcbiAgICAgICAgICB9KSwgYTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0QWxsTWFya3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBlID0gW107XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihuKSB7XG4gICAgICAgICAgICB2YXIgbCA9IG4ubWFya2VkU3BhbnM7XG4gICAgICAgICAgICBpZiAobClcbiAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBsLmxlbmd0aDsgKythKVxuICAgICAgICAgICAgICAgIGxbYV0uZnJvbSAhPSBudWxsICYmIGUucHVzaChsW2FdLm1hcmtlcik7XG4gICAgICAgICAgfSksIGU7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc0Zyb21JbmRleDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHZhciBuLCBsID0gdGhpcy5maXJzdCwgYSA9IHRoaXMubGluZVNlcGFyYXRvcigpLmxlbmd0aDtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pdGVyKGZ1bmN0aW9uKHUpIHtcbiAgICAgICAgICAgIHZhciBnID0gdS50ZXh0Lmxlbmd0aCArIGE7XG4gICAgICAgICAgICBpZiAoZyA+IGUpXG4gICAgICAgICAgICAgIHJldHVybiBuID0gZSwgITA7XG4gICAgICAgICAgICBlIC09IGcsICsrbDtcbiAgICAgICAgICB9KSwgVmUodGhpcywgcShsLCBuKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGluZGV4RnJvbVBvczogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIGUgPSBWZSh0aGlzLCBlKTtcbiAgICAgICAgICB2YXIgbiA9IGUuY2g7XG4gICAgICAgICAgaWYgKGUubGluZSA8IHRoaXMuZmlyc3QgfHwgZS5jaCA8IDApXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB2YXIgbCA9IHRoaXMubGluZVNlcGFyYXRvcigpLmxlbmd0aDtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pdGVyKHRoaXMuZmlyc3QsIGUubGluZSwgZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgbiArPSBhLnRleHQubGVuZ3RoICsgbDtcbiAgICAgICAgICB9KSwgbjtcbiAgICAgICAgfSxcbiAgICAgICAgY29weTogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHZhciBuID0gbmV3IG5uKFxuICAgICAgICAgICAgWnIodGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSksXG4gICAgICAgICAgICB0aGlzLm1vZGVPcHRpb24sXG4gICAgICAgICAgICB0aGlzLmZpcnN0LFxuICAgICAgICAgICAgdGhpcy5saW5lU2VwLFxuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb25cbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBuLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsVG9wLCBuLnNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQsIG4uc2VsID0gdGhpcy5zZWwsIG4uZXh0ZW5kID0gITEsIGUgJiYgKG4uaGlzdG9yeS51bmRvRGVwdGggPSB0aGlzLmhpc3RvcnkudW5kb0RlcHRoLCBuLnNldEhpc3RvcnkodGhpcy5nZXRIaXN0b3J5KCkpKSwgbjtcbiAgICAgICAgfSxcbiAgICAgICAgbGlua2VkRG9jOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgZSB8fCAoZSA9IHt9KTtcbiAgICAgICAgICB2YXIgbiA9IHRoaXMuZmlyc3QsIGwgPSB0aGlzLmZpcnN0ICsgdGhpcy5zaXplO1xuICAgICAgICAgIGUuZnJvbSAhPSBudWxsICYmIGUuZnJvbSA+IG4gJiYgKG4gPSBlLmZyb20pLCBlLnRvICE9IG51bGwgJiYgZS50byA8IGwgJiYgKGwgPSBlLnRvKTtcbiAgICAgICAgICB2YXIgYSA9IG5ldyBubihacih0aGlzLCBuLCBsKSwgZS5tb2RlIHx8IHRoaXMubW9kZU9wdGlvbiwgbiwgdGhpcy5saW5lU2VwLCB0aGlzLmRpcmVjdGlvbik7XG4gICAgICAgICAgcmV0dXJuIGUuc2hhcmVkSGlzdCAmJiAoYS5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5KSwgKHRoaXMubGlua2VkIHx8ICh0aGlzLmxpbmtlZCA9IFtdKSkucHVzaCh7IGRvYzogYSwgc2hhcmVkSGlzdDogZS5zaGFyZWRIaXN0IH0pLCBhLmxpbmtlZCA9IFt7IGRvYzogdGhpcywgaXNQYXJlbnQ6ICEwLCBzaGFyZWRIaXN0OiBlLnNoYXJlZEhpc3QgfV0sIFBwKGEsIGNmKHRoaXMpKSwgYTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5saW5rRG9jOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBBdCAmJiAoZSA9IGUuZG9jKSwgdGhpcy5saW5rZWQpXG4gICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHRoaXMubGlua2VkLmxlbmd0aDsgKytuKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gdGhpcy5saW5rZWRbbl07XG4gICAgICAgICAgICAgIGlmIChsLmRvYyA9PSBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saW5rZWQuc3BsaWNlKG4sIDEpLCBlLnVubGlua0RvYyh0aGlzKSwgRnAoY2YodGhpcykpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGUuaGlzdG9yeSA9PSB0aGlzLmhpc3RvcnkpIHtcbiAgICAgICAgICAgIHZhciBhID0gW2UuaWRdO1xuICAgICAgICAgICAgRXIoZSwgZnVuY3Rpb24odSkge1xuICAgICAgICAgICAgICByZXR1cm4gYS5wdXNoKHUuaWQpO1xuICAgICAgICAgICAgfSwgITApLCBlLmhpc3RvcnkgPSBuZXcgS28obnVsbCksIGUuaGlzdG9yeS5kb25lID0gYWkodGhpcy5oaXN0b3J5LmRvbmUsIGEpLCBlLmhpc3RvcnkudW5kb25lID0gYWkodGhpcy5oaXN0b3J5LnVuZG9uZSwgYSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBpdGVyTGlua2VkRG9jczogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIEVyKHRoaXMsIGUpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRNb2RlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlO1xuICAgICAgICB9LFxuICAgICAgICBnZXRFZGl0b3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNtO1xuICAgICAgICB9LFxuICAgICAgICBzcGxpdExpbmVzOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubGluZVNlcCA/IGUuc3BsaXQodGhpcy5saW5lU2VwKSA6IElpKGUpO1xuICAgICAgICB9LFxuICAgICAgICBsaW5lU2VwYXJhdG9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5saW5lU2VwIHx8IGBcbmA7XG4gICAgICAgIH0sXG4gICAgICAgIHNldERpcmVjdGlvbjoga3QoZnVuY3Rpb24oZSkge1xuICAgICAgICAgIGUgIT0gXCJydGxcIiAmJiAoZSA9IFwibHRyXCIpLCBlICE9IHRoaXMuZGlyZWN0aW9uICYmICh0aGlzLmRpcmVjdGlvbiA9IGUsIHRoaXMuaXRlcihmdW5jdGlvbihuKSB7XG4gICAgICAgICAgICByZXR1cm4gbi5vcmRlciA9IG51bGw7XG4gICAgICAgICAgfSksIHRoaXMuY20gJiYgU3AodGhpcy5jbSkpO1xuICAgICAgICB9KVxuICAgICAgfSksIG5uLnByb3RvdHlwZS5lYWNoTGluZSA9IG5uLnByb3RvdHlwZS5pdGVyO1xuICAgICAgdmFyIHBmID0gMDtcbiAgICAgIGZ1bmN0aW9uIEJwKGUpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzO1xuICAgICAgICBpZiAoaGYobiksICEoUWUobiwgZSkgfHwgbnIobi5kaXNwbGF5LCBlKSkpIHtcbiAgICAgICAgICBsdChlKSwgcCAmJiAocGYgPSArbmV3IERhdGUoKSk7XG4gICAgICAgICAgdmFyIGwgPSBMcihuLCBlLCAhMCksIGEgPSBlLmRhdGFUcmFuc2Zlci5maWxlcztcbiAgICAgICAgICBpZiAoISghbCB8fCBuLmlzUmVhZE9ubHkoKSkpXG4gICAgICAgICAgICBpZiAoYSAmJiBhLmxlbmd0aCAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiB3aW5kb3cuRmlsZSlcbiAgICAgICAgICAgICAgZm9yICh2YXIgdSA9IGEubGVuZ3RoLCBnID0gQXJyYXkodSksIE8gPSAwLCBMID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgKytPID09IHUgJiYgJHQobiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICBsID0gVmUobi5kb2MsIGwpO1xuICAgICAgICAgICAgICAgICAgdmFyIF8gPSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb206IGwsXG4gICAgICAgICAgICAgICAgICAgIHRvOiBsLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBuLmRvYy5zcGxpdExpbmVzKFxuICAgICAgICAgICAgICAgICAgICAgIGcuZmlsdGVyKGZ1bmN0aW9uKGFlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWUgIT0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKG4uZG9jLmxpbmVTZXBhcmF0b3IoKSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBcInBhc3RlXCJcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBzaShuLmRvYywgXyksIFp1KG4uZG9jLCBicihWZShuLmRvYywgbCksIFZlKG4uZG9jLCBDcihfKSkpKTtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICB9LCBIID0gZnVuY3Rpb24oXywgYWUpIHtcbiAgICAgICAgICAgICAgICBpZiAobi5vcHRpb25zLmFsbG93RHJvcEZpbGVUeXBlcyAmJiB0ZShuLm9wdGlvbnMuYWxsb3dEcm9wRmlsZVR5cGVzLCBfLnR5cGUpID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICBMKCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBjZSA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgY2Uub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIEwoKTtcbiAgICAgICAgICAgICAgICB9LCBjZS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIHZhciB5ZSA9IGNlLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgIGlmICgvW1xceDAwLVxceDA4XFx4MGUtXFx4MWZdezJ9Ly50ZXN0KHllKSkge1xuICAgICAgICAgICAgICAgICAgICBMKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGdbYWVdID0geWUsIEwoKTtcbiAgICAgICAgICAgICAgICB9LCBjZS5yZWFkQXNUZXh0KF8pO1xuICAgICAgICAgICAgICB9LCBVID0gMDsgVSA8IGEubGVuZ3RoOyBVKyspXG4gICAgICAgICAgICAgICAgSChhW1VdLCBVKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBpZiAobi5zdGF0ZS5kcmFnZ2luZ1RleHQgJiYgbi5kb2Muc2VsLmNvbnRhaW5zKGwpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBuLnN0YXRlLmRyYWdnaW5nVGV4dChlKSwgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBuLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9LCAyMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIEcgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKFwiVGV4dFwiKTtcbiAgICAgICAgICAgICAgICBpZiAoRykge1xuICAgICAgICAgICAgICAgICAgdmFyIFk7XG4gICAgICAgICAgICAgICAgICBpZiAobi5zdGF0ZS5kcmFnZ2luZ1RleHQgJiYgIW4uc3RhdGUuZHJhZ2dpbmdUZXh0LmNvcHkgJiYgKFkgPSBuLmxpc3RTZWxlY3Rpb25zKCkpLCBabyhuLmRvYywgYnIobCwgbCkpLCBZKVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBlZSA9IDA7IGVlIDwgWS5sZW5ndGg7ICsrZWUpXG4gICAgICAgICAgICAgICAgICAgICAgdWkobi5kb2MsIFwiXCIsIFlbZWVdLmFuY2hvciwgWVtlZV0uaGVhZCwgXCJkcmFnXCIpO1xuICAgICAgICAgICAgICAgICAgbi5yZXBsYWNlU2VsZWN0aW9uKEcsIFwiYXJvdW5kXCIsIFwicGFzdGVcIiksIG4uZGlzcGxheS5pbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gSHAoZSwgbikge1xuICAgICAgICBpZiAocCAmJiAoIWUuc3RhdGUuZHJhZ2dpbmdUZXh0IHx8ICtuZXcgRGF0ZSgpIC0gcGYgPCAxMDApKSB7XG4gICAgICAgICAgSW4obik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKFFlKGUsIG4pIHx8IG5yKGUuZGlzcGxheSwgbikpICYmIChuLmRhdGFUcmFuc2Zlci5zZXREYXRhKFwiVGV4dFwiLCBlLmdldFNlbGVjdGlvbigpKSwgbi5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9IFwiY29weU1vdmVcIiwgbi5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlICYmICF4KSkge1xuICAgICAgICAgIHZhciBsID0gSShcImltZ1wiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwO1wiKTtcbiAgICAgICAgICBsLnNyYyA9IFwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBQUFBQ0g1QkFFS0FBRUFMQUFBQUFBQkFBRUFBQUlDVEFFQU93PT1cIiwgbSAmJiAobC53aWR0aCA9IGwuaGVpZ2h0ID0gMSwgZS5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQobCksIGwuX3RvcCA9IGwub2Zmc2V0VG9wKSwgbi5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGwsIDAsIDApLCBtICYmIGwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gJHAoZSwgbikge1xuICAgICAgICB2YXIgbCA9IExyKGUsIG4pO1xuICAgICAgICBpZiAoISFsKSB7XG4gICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgICAgaWwoZSwgbCwgYSksIGUuZGlzcGxheS5kcmFnQ3Vyc29yIHx8IChlLmRpc3BsYXkuZHJhZ0N1cnNvciA9IEkoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWN1cnNvcnMgQ29kZU1pcnJvci1kcmFnY3Vyc29yc1wiKSwgZS5kaXNwbGF5LmxpbmVTcGFjZS5pbnNlcnRCZWZvcmUoZS5kaXNwbGF5LmRyYWdDdXJzb3IsIGUuZGlzcGxheS5jdXJzb3JEaXYpKSwgaihlLmRpc3BsYXkuZHJhZ0N1cnNvciwgYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGhmKGUpIHtcbiAgICAgICAgZS5kaXNwbGF5LmRyYWdDdXJzb3IgJiYgKGUuZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoZS5kaXNwbGF5LmRyYWdDdXJzb3IpLCBlLmRpc3BsYXkuZHJhZ0N1cnNvciA9IG51bGwpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdmYoZSkge1xuICAgICAgICBpZiAoISFkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSB7XG4gICAgICAgICAgZm9yICh2YXIgbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJDb2RlTWlycm9yXCIpLCBsID0gW10sIGEgPSAwOyBhIDwgbi5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgdmFyIHUgPSBuW2FdLkNvZGVNaXJyb3I7XG4gICAgICAgICAgICB1ICYmIGwucHVzaCh1KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbC5sZW5ndGggJiYgbFswXS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBnID0gMDsgZyA8IGwubGVuZ3RoOyBnKyspXG4gICAgICAgICAgICAgIGUobFtnXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBtZiA9ICExO1xuICAgICAgZnVuY3Rpb24ga3AoKSB7XG4gICAgICAgIG1mIHx8IChqcCgpLCBtZiA9ICEwKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGpwKCkge1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgbmUod2luZG93LCBcInJlc2l6ZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBlID09IG51bGwgJiYgKGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZSA9IG51bGwsIHZmKFVwKTtcbiAgICAgICAgICB9LCAxMDApKTtcbiAgICAgICAgfSksIG5lKHdpbmRvdywgXCJibHVyXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB2ZihyaSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gVXAoZSkge1xuICAgICAgICB2YXIgbiA9IGUuZGlzcGxheTtcbiAgICAgICAgbi5jYWNoZWRDaGFyV2lkdGggPSBuLmNhY2hlZFRleHRIZWlnaHQgPSBuLmNhY2hlZFBhZGRpbmdIID0gbnVsbCwgbi5zY3JvbGxiYXJzQ2xpcHBlZCA9ICExLCBlLnNldFNpemUoKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIHhyID0ge1xuICAgICAgICAzOiBcIlBhdXNlXCIsXG4gICAgICAgIDg6IFwiQmFja3NwYWNlXCIsXG4gICAgICAgIDk6IFwiVGFiXCIsXG4gICAgICAgIDEzOiBcIkVudGVyXCIsXG4gICAgICAgIDE2OiBcIlNoaWZ0XCIsXG4gICAgICAgIDE3OiBcIkN0cmxcIixcbiAgICAgICAgMTg6IFwiQWx0XCIsXG4gICAgICAgIDE5OiBcIlBhdXNlXCIsXG4gICAgICAgIDIwOiBcIkNhcHNMb2NrXCIsXG4gICAgICAgIDI3OiBcIkVzY1wiLFxuICAgICAgICAzMjogXCJTcGFjZVwiLFxuICAgICAgICAzMzogXCJQYWdlVXBcIixcbiAgICAgICAgMzQ6IFwiUGFnZURvd25cIixcbiAgICAgICAgMzU6IFwiRW5kXCIsXG4gICAgICAgIDM2OiBcIkhvbWVcIixcbiAgICAgICAgMzc6IFwiTGVmdFwiLFxuICAgICAgICAzODogXCJVcFwiLFxuICAgICAgICAzOTogXCJSaWdodFwiLFxuICAgICAgICA0MDogXCJEb3duXCIsXG4gICAgICAgIDQ0OiBcIlByaW50U2NyblwiLFxuICAgICAgICA0NTogXCJJbnNlcnRcIixcbiAgICAgICAgNDY6IFwiRGVsZXRlXCIsXG4gICAgICAgIDU5OiBcIjtcIixcbiAgICAgICAgNjE6IFwiPVwiLFxuICAgICAgICA5MTogXCJNb2RcIixcbiAgICAgICAgOTI6IFwiTW9kXCIsXG4gICAgICAgIDkzOiBcIk1vZFwiLFxuICAgICAgICAxMDY6IFwiKlwiLFxuICAgICAgICAxMDc6IFwiPVwiLFxuICAgICAgICAxMDk6IFwiLVwiLFxuICAgICAgICAxMTA6IFwiLlwiLFxuICAgICAgICAxMTE6IFwiL1wiLFxuICAgICAgICAxNDU6IFwiU2Nyb2xsTG9ja1wiLFxuICAgICAgICAxNzM6IFwiLVwiLFxuICAgICAgICAxODY6IFwiO1wiLFxuICAgICAgICAxODc6IFwiPVwiLFxuICAgICAgICAxODg6IFwiLFwiLFxuICAgICAgICAxODk6IFwiLVwiLFxuICAgICAgICAxOTA6IFwiLlwiLFxuICAgICAgICAxOTE6IFwiL1wiLFxuICAgICAgICAxOTI6IFwiYFwiLFxuICAgICAgICAyMTk6IFwiW1wiLFxuICAgICAgICAyMjA6IFwiXFxcXFwiLFxuICAgICAgICAyMjE6IFwiXVwiLFxuICAgICAgICAyMjI6IFwiJ1wiLFxuICAgICAgICAyMjQ6IFwiTW9kXCIsXG4gICAgICAgIDYzMjMyOiBcIlVwXCIsXG4gICAgICAgIDYzMjMzOiBcIkRvd25cIixcbiAgICAgICAgNjMyMzQ6IFwiTGVmdFwiLFxuICAgICAgICA2MzIzNTogXCJSaWdodFwiLFxuICAgICAgICA2MzI3MjogXCJEZWxldGVcIixcbiAgICAgICAgNjMyNzM6IFwiSG9tZVwiLFxuICAgICAgICA2MzI3NTogXCJFbmRcIixcbiAgICAgICAgNjMyNzY6IFwiUGFnZVVwXCIsXG4gICAgICAgIDYzMjc3OiBcIlBhZ2VEb3duXCIsXG4gICAgICAgIDYzMzAyOiBcIkluc2VydFwiXG4gICAgICB9LCBxaSA9IDA7IHFpIDwgMTA7IHFpKyspXG4gICAgICAgIHhyW3FpICsgNDhdID0geHJbcWkgKyA5Nl0gPSBTdHJpbmcocWkpO1xuICAgICAgZm9yICh2YXIgZWEgPSA2NTsgZWEgPD0gOTA7IGVhKyspXG4gICAgICAgIHhyW2VhXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZWEpO1xuICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8PSAxMjsgX2krKylcbiAgICAgICAgeHJbX2kgKyAxMTFdID0geHJbX2kgKyA2MzIzNV0gPSBcIkZcIiArIF9pO1xuICAgICAgdmFyIGlyID0ge307XG4gICAgICBpci5iYXNpYyA9IHtcbiAgICAgICAgTGVmdDogXCJnb0NoYXJMZWZ0XCIsXG4gICAgICAgIFJpZ2h0OiBcImdvQ2hhclJpZ2h0XCIsXG4gICAgICAgIFVwOiBcImdvTGluZVVwXCIsXG4gICAgICAgIERvd246IFwiZ29MaW5lRG93blwiLFxuICAgICAgICBFbmQ6IFwiZ29MaW5lRW5kXCIsXG4gICAgICAgIEhvbWU6IFwiZ29MaW5lU3RhcnRTbWFydFwiLFxuICAgICAgICBQYWdlVXA6IFwiZ29QYWdlVXBcIixcbiAgICAgICAgUGFnZURvd246IFwiZ29QYWdlRG93blwiLFxuICAgICAgICBEZWxldGU6IFwiZGVsQ2hhckFmdGVyXCIsXG4gICAgICAgIEJhY2tzcGFjZTogXCJkZWxDaGFyQmVmb3JlXCIsXG4gICAgICAgIFwiU2hpZnQtQmFja3NwYWNlXCI6IFwiZGVsQ2hhckJlZm9yZVwiLFxuICAgICAgICBUYWI6IFwiZGVmYXVsdFRhYlwiLFxuICAgICAgICBcIlNoaWZ0LVRhYlwiOiBcImluZGVudEF1dG9cIixcbiAgICAgICAgRW50ZXI6IFwibmV3bGluZUFuZEluZGVudFwiLFxuICAgICAgICBJbnNlcnQ6IFwidG9nZ2xlT3ZlcndyaXRlXCIsXG4gICAgICAgIEVzYzogXCJzaW5nbGVTZWxlY3Rpb25cIlxuICAgICAgfSwgaXIucGNEZWZhdWx0ID0ge1xuICAgICAgICBcIkN0cmwtQVwiOiBcInNlbGVjdEFsbFwiLFxuICAgICAgICBcIkN0cmwtRFwiOiBcImRlbGV0ZUxpbmVcIixcbiAgICAgICAgXCJDdHJsLVpcIjogXCJ1bmRvXCIsXG4gICAgICAgIFwiU2hpZnQtQ3RybC1aXCI6IFwicmVkb1wiLFxuICAgICAgICBcIkN0cmwtWVwiOiBcInJlZG9cIixcbiAgICAgICAgXCJDdHJsLUhvbWVcIjogXCJnb0RvY1N0YXJ0XCIsXG4gICAgICAgIFwiQ3RybC1FbmRcIjogXCJnb0RvY0VuZFwiLFxuICAgICAgICBcIkN0cmwtVXBcIjogXCJnb0xpbmVVcFwiLFxuICAgICAgICBcIkN0cmwtRG93blwiOiBcImdvTGluZURvd25cIixcbiAgICAgICAgXCJDdHJsLUxlZnRcIjogXCJnb0dyb3VwTGVmdFwiLFxuICAgICAgICBcIkN0cmwtUmlnaHRcIjogXCJnb0dyb3VwUmlnaHRcIixcbiAgICAgICAgXCJBbHQtTGVmdFwiOiBcImdvTGluZVN0YXJ0XCIsXG4gICAgICAgIFwiQWx0LVJpZ2h0XCI6IFwiZ29MaW5lRW5kXCIsXG4gICAgICAgIFwiQ3RybC1CYWNrc3BhY2VcIjogXCJkZWxHcm91cEJlZm9yZVwiLFxuICAgICAgICBcIkN0cmwtRGVsZXRlXCI6IFwiZGVsR3JvdXBBZnRlclwiLFxuICAgICAgICBcIkN0cmwtU1wiOiBcInNhdmVcIixcbiAgICAgICAgXCJDdHJsLUZcIjogXCJmaW5kXCIsXG4gICAgICAgIFwiQ3RybC1HXCI6IFwiZmluZE5leHRcIixcbiAgICAgICAgXCJTaGlmdC1DdHJsLUdcIjogXCJmaW5kUHJldlwiLFxuICAgICAgICBcIlNoaWZ0LUN0cmwtRlwiOiBcInJlcGxhY2VcIixcbiAgICAgICAgXCJTaGlmdC1DdHJsLVJcIjogXCJyZXBsYWNlQWxsXCIsXG4gICAgICAgIFwiQ3RybC1bXCI6IFwiaW5kZW50TGVzc1wiLFxuICAgICAgICBcIkN0cmwtXVwiOiBcImluZGVudE1vcmVcIixcbiAgICAgICAgXCJDdHJsLVVcIjogXCJ1bmRvU2VsZWN0aW9uXCIsXG4gICAgICAgIFwiU2hpZnQtQ3RybC1VXCI6IFwicmVkb1NlbGVjdGlvblwiLFxuICAgICAgICBcIkFsdC1VXCI6IFwicmVkb1NlbGVjdGlvblwiLFxuICAgICAgICBmYWxsdGhyb3VnaDogXCJiYXNpY1wiXG4gICAgICB9LCBpci5lbWFjc3kgPSB7XG4gICAgICAgIFwiQ3RybC1GXCI6IFwiZ29DaGFyUmlnaHRcIixcbiAgICAgICAgXCJDdHJsLUJcIjogXCJnb0NoYXJMZWZ0XCIsXG4gICAgICAgIFwiQ3RybC1QXCI6IFwiZ29MaW5lVXBcIixcbiAgICAgICAgXCJDdHJsLU5cIjogXCJnb0xpbmVEb3duXCIsXG4gICAgICAgIFwiQ3RybC1BXCI6IFwiZ29MaW5lU3RhcnRcIixcbiAgICAgICAgXCJDdHJsLUVcIjogXCJnb0xpbmVFbmRcIixcbiAgICAgICAgXCJDdHJsLVZcIjogXCJnb1BhZ2VEb3duXCIsXG4gICAgICAgIFwiU2hpZnQtQ3RybC1WXCI6IFwiZ29QYWdlVXBcIixcbiAgICAgICAgXCJDdHJsLURcIjogXCJkZWxDaGFyQWZ0ZXJcIixcbiAgICAgICAgXCJDdHJsLUhcIjogXCJkZWxDaGFyQmVmb3JlXCIsXG4gICAgICAgIFwiQWx0LUJhY2tzcGFjZVwiOiBcImRlbFdvcmRCZWZvcmVcIixcbiAgICAgICAgXCJDdHJsLUtcIjogXCJraWxsTGluZVwiLFxuICAgICAgICBcIkN0cmwtVFwiOiBcInRyYW5zcG9zZUNoYXJzXCIsXG4gICAgICAgIFwiQ3RybC1PXCI6IFwib3BlbkxpbmVcIlxuICAgICAgfSwgaXIubWFjRGVmYXVsdCA9IHtcbiAgICAgICAgXCJDbWQtQVwiOiBcInNlbGVjdEFsbFwiLFxuICAgICAgICBcIkNtZC1EXCI6IFwiZGVsZXRlTGluZVwiLFxuICAgICAgICBcIkNtZC1aXCI6IFwidW5kb1wiLFxuICAgICAgICBcIlNoaWZ0LUNtZC1aXCI6IFwicmVkb1wiLFxuICAgICAgICBcIkNtZC1ZXCI6IFwicmVkb1wiLFxuICAgICAgICBcIkNtZC1Ib21lXCI6IFwiZ29Eb2NTdGFydFwiLFxuICAgICAgICBcIkNtZC1VcFwiOiBcImdvRG9jU3RhcnRcIixcbiAgICAgICAgXCJDbWQtRW5kXCI6IFwiZ29Eb2NFbmRcIixcbiAgICAgICAgXCJDbWQtRG93blwiOiBcImdvRG9jRW5kXCIsXG4gICAgICAgIFwiQWx0LUxlZnRcIjogXCJnb0dyb3VwTGVmdFwiLFxuICAgICAgICBcIkFsdC1SaWdodFwiOiBcImdvR3JvdXBSaWdodFwiLFxuICAgICAgICBcIkNtZC1MZWZ0XCI6IFwiZ29MaW5lTGVmdFwiLFxuICAgICAgICBcIkNtZC1SaWdodFwiOiBcImdvTGluZVJpZ2h0XCIsXG4gICAgICAgIFwiQWx0LUJhY2tzcGFjZVwiOiBcImRlbEdyb3VwQmVmb3JlXCIsXG4gICAgICAgIFwiQ3RybC1BbHQtQmFja3NwYWNlXCI6IFwiZGVsR3JvdXBBZnRlclwiLFxuICAgICAgICBcIkFsdC1EZWxldGVcIjogXCJkZWxHcm91cEFmdGVyXCIsXG4gICAgICAgIFwiQ21kLVNcIjogXCJzYXZlXCIsXG4gICAgICAgIFwiQ21kLUZcIjogXCJmaW5kXCIsXG4gICAgICAgIFwiQ21kLUdcIjogXCJmaW5kTmV4dFwiLFxuICAgICAgICBcIlNoaWZ0LUNtZC1HXCI6IFwiZmluZFByZXZcIixcbiAgICAgICAgXCJDbWQtQWx0LUZcIjogXCJyZXBsYWNlXCIsXG4gICAgICAgIFwiU2hpZnQtQ21kLUFsdC1GXCI6IFwicmVwbGFjZUFsbFwiLFxuICAgICAgICBcIkNtZC1bXCI6IFwiaW5kZW50TGVzc1wiLFxuICAgICAgICBcIkNtZC1dXCI6IFwiaW5kZW50TW9yZVwiLFxuICAgICAgICBcIkNtZC1CYWNrc3BhY2VcIjogXCJkZWxXcmFwcGVkTGluZUxlZnRcIixcbiAgICAgICAgXCJDbWQtRGVsZXRlXCI6IFwiZGVsV3JhcHBlZExpbmVSaWdodFwiLFxuICAgICAgICBcIkNtZC1VXCI6IFwidW5kb1NlbGVjdGlvblwiLFxuICAgICAgICBcIlNoaWZ0LUNtZC1VXCI6IFwicmVkb1NlbGVjdGlvblwiLFxuICAgICAgICBcIkN0cmwtVXBcIjogXCJnb0RvY1N0YXJ0XCIsXG4gICAgICAgIFwiQ3RybC1Eb3duXCI6IFwiZ29Eb2NFbmRcIixcbiAgICAgICAgZmFsbHRocm91Z2g6IFtcImJhc2ljXCIsIFwiZW1hY3N5XCJdXG4gICAgICB9LCBpci5kZWZhdWx0ID0gTSA/IGlyLm1hY0RlZmF1bHQgOiBpci5wY0RlZmF1bHQ7XG4gICAgICBmdW5jdGlvbiB6cChlKSB7XG4gICAgICAgIHZhciBuID0gZS5zcGxpdCgvLSg/ISQpLyk7XG4gICAgICAgIGUgPSBuW24ubGVuZ3RoIC0gMV07XG4gICAgICAgIGZvciAodmFyIGwsIGEsIHUsIGcsIE8gPSAwOyBPIDwgbi5sZW5ndGggLSAxOyBPKyspIHtcbiAgICAgICAgICB2YXIgTCA9IG5bT107XG4gICAgICAgICAgaWYgKC9eKGNtZHxtZXRhfG0pJC9pLnRlc3QoTCkpXG4gICAgICAgICAgICBnID0gITA7XG4gICAgICAgICAgZWxzZSBpZiAoL15hKGx0KT8kL2kudGVzdChMKSlcbiAgICAgICAgICAgIGwgPSAhMDtcbiAgICAgICAgICBlbHNlIGlmICgvXihjfGN0cmx8Y29udHJvbCkkL2kudGVzdChMKSlcbiAgICAgICAgICAgIGEgPSAhMDtcbiAgICAgICAgICBlbHNlIGlmICgvXnMoaGlmdCk/JC9pLnRlc3QoTCkpXG4gICAgICAgICAgICB1ID0gITA7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIG1vZGlmaWVyIG5hbWU6IFwiICsgTCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGwgJiYgKGUgPSBcIkFsdC1cIiArIGUpLCBhICYmIChlID0gXCJDdHJsLVwiICsgZSksIGcgJiYgKGUgPSBcIkNtZC1cIiArIGUpLCB1ICYmIChlID0gXCJTaGlmdC1cIiArIGUpLCBlO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gVnAoZSkge1xuICAgICAgICB2YXIgbiA9IHt9O1xuICAgICAgICBmb3IgKHZhciBsIGluIGUpXG4gICAgICAgICAgaWYgKGUuaGFzT3duUHJvcGVydHkobCkpIHtcbiAgICAgICAgICAgIHZhciBhID0gZVtsXTtcbiAgICAgICAgICAgIGlmICgvXihuYW1lfGZhbGx0aHJvdWdofChkZXxhdCl0YWNoKSQvLnRlc3QobCkpXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKGEgPT0gXCIuLi5cIikge1xuICAgICAgICAgICAgICBkZWxldGUgZVtsXTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciB1ID0gcHQobC5zcGxpdChcIiBcIiksIHpwKSwgZyA9IDA7IGcgPCB1Lmxlbmd0aDsgZysrKSB7XG4gICAgICAgICAgICAgIHZhciBPID0gdm9pZCAwLCBMID0gdm9pZCAwO1xuICAgICAgICAgICAgICBnID09IHUubGVuZ3RoIC0gMSA/IChMID0gdS5qb2luKFwiIFwiKSwgTyA9IGEpIDogKEwgPSB1LnNsaWNlKDAsIGcgKyAxKS5qb2luKFwiIFwiKSwgTyA9IFwiLi4uXCIpO1xuICAgICAgICAgICAgICB2YXIgSCA9IG5bTF07XG4gICAgICAgICAgICAgIGlmICghSClcbiAgICAgICAgICAgICAgICBuW0xdID0gTztcbiAgICAgICAgICAgICAgZWxzZSBpZiAoSCAhPSBPKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY29uc2lzdGVudCBiaW5kaW5ncyBmb3IgXCIgKyBMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZSBlW2xdO1xuICAgICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgVSBpbiBuKVxuICAgICAgICAgIGVbVV0gPSBuW1VdO1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGRpKGUsIG4sIGwsIGEpIHtcbiAgICAgICAgbiA9IHRhKG4pO1xuICAgICAgICB2YXIgdSA9IG4uY2FsbCA/IG4uY2FsbChlLCBhKSA6IG5bZV07XG4gICAgICAgIGlmICh1ID09PSAhMSlcbiAgICAgICAgICByZXR1cm4gXCJub3RoaW5nXCI7XG4gICAgICAgIGlmICh1ID09PSBcIi4uLlwiKVxuICAgICAgICAgIHJldHVybiBcIm11bHRpXCI7XG4gICAgICAgIGlmICh1ICE9IG51bGwgJiYgbCh1KSlcbiAgICAgICAgICByZXR1cm4gXCJoYW5kbGVkXCI7XG4gICAgICAgIGlmIChuLmZhbGx0aHJvdWdoKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuLmZhbGx0aHJvdWdoKSAhPSBcIltvYmplY3QgQXJyYXldXCIpXG4gICAgICAgICAgICByZXR1cm4gZGkoZSwgbi5mYWxsdGhyb3VnaCwgbCwgYSk7XG4gICAgICAgICAgZm9yICh2YXIgZyA9IDA7IGcgPCBuLmZhbGx0aHJvdWdoLmxlbmd0aDsgZysrKSB7XG4gICAgICAgICAgICB2YXIgTyA9IGRpKGUsIG4uZmFsbHRocm91Z2hbZ10sIGwsIGEpO1xuICAgICAgICAgICAgaWYgKE8pXG4gICAgICAgICAgICAgIHJldHVybiBPO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZ2YoZSkge1xuICAgICAgICB2YXIgbiA9IHR5cGVvZiBlID09IFwic3RyaW5nXCIgPyBlIDogeHJbZS5rZXlDb2RlXTtcbiAgICAgICAgcmV0dXJuIG4gPT0gXCJDdHJsXCIgfHwgbiA9PSBcIkFsdFwiIHx8IG4gPT0gXCJTaGlmdFwiIHx8IG4gPT0gXCJNb2RcIjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHlmKGUsIG4sIGwpIHtcbiAgICAgICAgdmFyIGEgPSBlO1xuICAgICAgICByZXR1cm4gbi5hbHRLZXkgJiYgYSAhPSBcIkFsdFwiICYmIChlID0gXCJBbHQtXCIgKyBlKSwgKEYgPyBuLm1ldGFLZXkgOiBuLmN0cmxLZXkpICYmIGEgIT0gXCJDdHJsXCIgJiYgKGUgPSBcIkN0cmwtXCIgKyBlKSwgKEYgPyBuLmN0cmxLZXkgOiBuLm1ldGFLZXkpICYmIGEgIT0gXCJNb2RcIiAmJiAoZSA9IFwiQ21kLVwiICsgZSksICFsICYmIG4uc2hpZnRLZXkgJiYgYSAhPSBcIlNoaWZ0XCIgJiYgKGUgPSBcIlNoaWZ0LVwiICsgZSksIGU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBBZihlLCBuKSB7XG4gICAgICAgIGlmIChtICYmIGUua2V5Q29kZSA9PSAzNCAmJiBlLmNoYXIpXG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB2YXIgbCA9IHhyW2Uua2V5Q29kZV07XG4gICAgICAgIHJldHVybiBsID09IG51bGwgfHwgZS5hbHRHcmFwaEtleSA/ICExIDogKGUua2V5Q29kZSA9PSAzICYmIGUuY29kZSAmJiAobCA9IGUuY29kZSksIHlmKGwsIGUsIG4pKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHRhKGUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBlID09IFwic3RyaW5nXCIgPyBpcltlXSA6IGU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjaShlLCBuKSB7XG4gICAgICAgIGZvciAodmFyIGwgPSBlLmRvYy5zZWwucmFuZ2VzLCBhID0gW10sIHUgPSAwOyB1IDwgbC5sZW5ndGg7IHUrKykge1xuICAgICAgICAgIGZvciAodmFyIGcgPSBuKGxbdV0pOyBhLmxlbmd0aCAmJiBvZShnLmZyb20sIEJlKGEpLnRvKSA8PSAwOyApIHtcbiAgICAgICAgICAgIHZhciBPID0gYS5wb3AoKTtcbiAgICAgICAgICAgIGlmIChvZShPLmZyb20sIGcuZnJvbSkgPCAwKSB7XG4gICAgICAgICAgICAgIGcuZnJvbSA9IE8uZnJvbTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGEucHVzaChnKTtcbiAgICAgICAgfVxuICAgICAgICBkbihlLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmb3IgKHZhciBMID0gYS5sZW5ndGggLSAxOyBMID49IDA7IEwtLSlcbiAgICAgICAgICAgIHVpKGUuZG9jLCBcIlwiLCBhW0xdLmZyb20sIGFbTF0udG8sIFwiK2RlbGV0ZVwiKTtcbiAgICAgICAgICBpaShlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBDbChlLCBuLCBsKSB7XG4gICAgICAgIHZhciBhID0gT3QoZS50ZXh0LCBuICsgbCwgbCk7XG4gICAgICAgIHJldHVybiBhIDwgMCB8fCBhID4gZS50ZXh0Lmxlbmd0aCA/IG51bGwgOiBhO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gRWwoZSwgbiwgbCkge1xuICAgICAgICB2YXIgYSA9IENsKGUsIG4uY2gsIGwpO1xuICAgICAgICByZXR1cm4gYSA9PSBudWxsID8gbnVsbCA6IG5ldyBxKG4ubGluZSwgYSwgbCA8IDAgPyBcImFmdGVyXCIgOiBcImJlZm9yZVwiKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFNsKGUsIG4sIGwsIGEsIHUpIHtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICBuLmRvYy5kaXJlY3Rpb24gPT0gXCJydGxcIiAmJiAodSA9IC11KTtcbiAgICAgICAgICB2YXIgZyA9IFVlKGwsIG4uZG9jLmRpcmVjdGlvbik7XG4gICAgICAgICAgaWYgKGcpIHtcbiAgICAgICAgICAgIHZhciBPID0gdSA8IDAgPyBCZShnKSA6IGdbMF0sIEwgPSB1IDwgMCA9PSAoTy5sZXZlbCA9PSAxKSwgSCA9IEwgPyBcImFmdGVyXCIgOiBcImJlZm9yZVwiLCBVO1xuICAgICAgICAgICAgaWYgKE8ubGV2ZWwgPiAwIHx8IG4uZG9jLmRpcmVjdGlvbiA9PSBcInJ0bFwiKSB7XG4gICAgICAgICAgICAgIHZhciBHID0gZWkobiwgbCk7XG4gICAgICAgICAgICAgIFUgPSB1IDwgMCA/IGwudGV4dC5sZW5ndGggLSAxIDogMDtcbiAgICAgICAgICAgICAgdmFyIFkgPSBHbihuLCBHLCBVKS50b3A7XG4gICAgICAgICAgICAgIFUgPSBhdChmdW5jdGlvbihlZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBHbihuLCBHLCBlZSkudG9wID09IFk7XG4gICAgICAgICAgICAgIH0sIHUgPCAwID09IChPLmxldmVsID09IDEpID8gTy5mcm9tIDogTy50byAtIDEsIFUpLCBIID09IFwiYmVmb3JlXCIgJiYgKFUgPSBDbChsLCBVLCAxKSk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgVSA9IHUgPCAwID8gTy50byA6IE8uZnJvbTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcShhLCBVLCBIKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBxKGEsIHUgPCAwID8gbC50ZXh0Lmxlbmd0aCA6IDAsIHUgPCAwID8gXCJiZWZvcmVcIiA6IFwiYWZ0ZXJcIik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBXcChlLCBuLCBsLCBhKSB7XG4gICAgICAgIHZhciB1ID0gVWUobiwgZS5kb2MuZGlyZWN0aW9uKTtcbiAgICAgICAgaWYgKCF1KVxuICAgICAgICAgIHJldHVybiBFbChuLCBsLCBhKTtcbiAgICAgICAgbC5jaCA+PSBuLnRleHQubGVuZ3RoID8gKGwuY2ggPSBuLnRleHQubGVuZ3RoLCBsLnN0aWNreSA9IFwiYmVmb3JlXCIpIDogbC5jaCA8PSAwICYmIChsLmNoID0gMCwgbC5zdGlja3kgPSBcImFmdGVyXCIpO1xuICAgICAgICB2YXIgZyA9IERlKHUsIGwuY2gsIGwuc3RpY2t5KSwgTyA9IHVbZ107XG4gICAgICAgIGlmIChlLmRvYy5kaXJlY3Rpb24gPT0gXCJsdHJcIiAmJiBPLmxldmVsICUgMiA9PSAwICYmIChhID4gMCA/IE8udG8gPiBsLmNoIDogTy5mcm9tIDwgbC5jaCkpXG4gICAgICAgICAgcmV0dXJuIEVsKG4sIGwsIGEpO1xuICAgICAgICB2YXIgTCA9IGZ1bmN0aW9uKENlLCBUZSkge1xuICAgICAgICAgIHJldHVybiBDbChuLCBDZSBpbnN0YW5jZW9mIHEgPyBDZS5jaCA6IENlLCBUZSk7XG4gICAgICAgIH0sIEgsIFUgPSBmdW5jdGlvbihDZSkge1xuICAgICAgICAgIHJldHVybiBlLm9wdGlvbnMubGluZVdyYXBwaW5nID8gKEggPSBIIHx8IGVpKGUsIG4pLCBTdShlLCBuLCBILCBDZSkpIDogeyBiZWdpbjogMCwgZW5kOiBuLnRleHQubGVuZ3RoIH07XG4gICAgICAgIH0sIEcgPSBVKGwuc3RpY2t5ID09IFwiYmVmb3JlXCIgPyBMKGwsIC0xKSA6IGwuY2gpO1xuICAgICAgICBpZiAoZS5kb2MuZGlyZWN0aW9uID09IFwicnRsXCIgfHwgTy5sZXZlbCA9PSAxKSB7XG4gICAgICAgICAgdmFyIFkgPSBPLmxldmVsID09IDEgPT0gYSA8IDAsIGVlID0gTChsLCBZID8gMSA6IC0xKTtcbiAgICAgICAgICBpZiAoZWUgIT0gbnVsbCAmJiAoWSA/IGVlIDw9IE8udG8gJiYgZWUgPD0gRy5lbmQgOiBlZSA+PSBPLmZyb20gJiYgZWUgPj0gRy5iZWdpbikpIHtcbiAgICAgICAgICAgIHZhciBfID0gWSA/IFwiYmVmb3JlXCIgOiBcImFmdGVyXCI7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHEobC5saW5lLCBlZSwgXyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBhZSA9IGZ1bmN0aW9uKENlLCBUZSwgRWUpIHtcbiAgICAgICAgICBmb3IgKHZhciBOZSA9IGZ1bmN0aW9uKHZ0LCBqdCkge1xuICAgICAgICAgICAgcmV0dXJuIGp0ID8gbmV3IHEobC5saW5lLCBMKHZ0LCAxKSwgXCJiZWZvcmVcIikgOiBuZXcgcShsLmxpbmUsIHZ0LCBcImFmdGVyXCIpO1xuICAgICAgICAgIH07IENlID49IDAgJiYgQ2UgPCB1Lmxlbmd0aDsgQ2UgKz0gVGUpIHtcbiAgICAgICAgICAgIHZhciBrZSA9IHVbQ2VdLCBIZSA9IFRlID4gMCA9PSAoa2UubGV2ZWwgIT0gMSksIFhlID0gSGUgPyBFZS5iZWdpbiA6IEwoRWUuZW5kLCAtMSk7XG4gICAgICAgICAgICBpZiAoa2UuZnJvbSA8PSBYZSAmJiBYZSA8IGtlLnRvIHx8IChYZSA9IEhlID8ga2UuZnJvbSA6IEwoa2UudG8sIC0xKSwgRWUuYmVnaW4gPD0gWGUgJiYgWGUgPCBFZS5lbmQpKVxuICAgICAgICAgICAgICByZXR1cm4gTmUoWGUsIEhlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGNlID0gYWUoZyArIGEsIGEsIEcpO1xuICAgICAgICBpZiAoY2UpXG4gICAgICAgICAgcmV0dXJuIGNlO1xuICAgICAgICB2YXIgeWUgPSBhID4gMCA/IEcuZW5kIDogTChHLmJlZ2luLCAtMSk7XG4gICAgICAgIHJldHVybiB5ZSAhPSBudWxsICYmICEoYSA+IDAgJiYgeWUgPT0gbi50ZXh0Lmxlbmd0aCkgJiYgKGNlID0gYWUoYSA+IDAgPyAwIDogdS5sZW5ndGggLSAxLCBhLCBVKHllKSksIGNlKSA/IGNlIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIHZhciBlbyA9IHtcbiAgICAgICAgc2VsZWN0QWxsOiBuZixcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgcmV0dXJuIGUuc2V0U2VsZWN0aW9uKGUuZ2V0Q3Vyc29yKFwiYW5jaG9yXCIpLCBlLmdldEN1cnNvcihcImhlYWRcIiksIE1lKTtcbiAgICAgICAgfSxcbiAgICAgICAga2lsbExpbmU6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gY2koZSwgZnVuY3Rpb24obikge1xuICAgICAgICAgICAgaWYgKG4uZW1wdHkoKSkge1xuICAgICAgICAgICAgICB2YXIgbCA9IEZlKGUuZG9jLCBuLmhlYWQubGluZSkudGV4dC5sZW5ndGg7XG4gICAgICAgICAgICAgIHJldHVybiBuLmhlYWQuY2ggPT0gbCAmJiBuLmhlYWQubGluZSA8IGUubGFzdExpbmUoKSA/IHsgZnJvbTogbi5oZWFkLCB0bzogcShuLmhlYWQubGluZSArIDEsIDApIH0gOiB7IGZyb206IG4uaGVhZCwgdG86IHEobi5oZWFkLmxpbmUsIGwpIH07XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgcmV0dXJuIHsgZnJvbTogbi5mcm9tKCksIHRvOiBuLnRvKCkgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVsZXRlTGluZTogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBjaShlLCBmdW5jdGlvbihuKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBmcm9tOiBxKG4uZnJvbSgpLmxpbmUsIDApLFxuICAgICAgICAgICAgICB0bzogVmUoZS5kb2MsIHEobi50bygpLmxpbmUgKyAxLCAwKSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGRlbExpbmVMZWZ0OiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgcmV0dXJuIGNpKGUsIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGZyb206IHEobi5mcm9tKCkubGluZSwgMCksXG4gICAgICAgICAgICAgIHRvOiBuLmZyb20oKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVsV3JhcHBlZExpbmVMZWZ0OiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgcmV0dXJuIGNpKGUsIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgIHZhciBsID0gZS5jaGFyQ29vcmRzKG4uaGVhZCwgXCJkaXZcIikudG9wICsgNSwgYSA9IGUuY29vcmRzQ2hhcih7IGxlZnQ6IDAsIHRvcDogbCB9LCBcImRpdlwiKTtcbiAgICAgICAgICAgIHJldHVybiB7IGZyb206IGEsIHRvOiBuLmZyb20oKSB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBkZWxXcmFwcGVkTGluZVJpZ2h0OiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgcmV0dXJuIGNpKGUsIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgIHZhciBsID0gZS5jaGFyQ29vcmRzKG4uaGVhZCwgXCJkaXZcIikudG9wICsgNSwgYSA9IGUuY29vcmRzQ2hhcih7IGxlZnQ6IGUuZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoICsgMTAwLCB0b3A6IGwgfSwgXCJkaXZcIik7XG4gICAgICAgICAgICByZXR1cm4geyBmcm9tOiBuLmZyb20oKSwgdG86IGEgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5kbzogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLnVuZG8oKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVkbzogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLnJlZG8oKTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5kb1NlbGVjdGlvbjogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLnVuZG9TZWxlY3Rpb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVkb1NlbGVjdGlvbjogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLnJlZG9TZWxlY3Rpb24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ29Eb2NTdGFydDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLmV4dGVuZFNlbGVjdGlvbihxKGUuZmlyc3RMaW5lKCksIDApKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ29Eb2NFbmQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5leHRlbmRTZWxlY3Rpb24ocShlLmxhc3RMaW5lKCkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ29MaW5lU3RhcnQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5leHRlbmRTZWxlY3Rpb25zQnkoXG4gICAgICAgICAgICBmdW5jdGlvbihuKSB7XG4gICAgICAgICAgICAgIHJldHVybiBiZihlLCBuLmhlYWQubGluZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBvcmlnaW46IFwiK21vdmVcIiwgYmlhczogMSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ29MaW5lU3RhcnRTbWFydDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLmV4dGVuZFNlbGVjdGlvbnNCeShcbiAgICAgICAgICAgIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIENmKGUsIG4uaGVhZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBvcmlnaW46IFwiK21vdmVcIiwgYmlhczogMSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ29MaW5lRW5kOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgcmV0dXJuIGUuZXh0ZW5kU2VsZWN0aW9uc0J5KFxuICAgICAgICAgICAgZnVuY3Rpb24obikge1xuICAgICAgICAgICAgICByZXR1cm4gR3AoZSwgbi5oZWFkLmxpbmUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgb3JpZ2luOiBcIittb3ZlXCIsIGJpYXM6IC0xIH1cbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBnb0xpbmVSaWdodDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihuKSB7XG4gICAgICAgICAgICB2YXIgbCA9IGUuY3Vyc29yQ29vcmRzKG4uaGVhZCwgXCJkaXZcIikudG9wICsgNTtcbiAgICAgICAgICAgIHJldHVybiBlLmNvb3Jkc0NoYXIoeyBsZWZ0OiBlLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCArIDEwMCwgdG9wOiBsIH0sIFwiZGl2XCIpO1xuICAgICAgICAgIH0sIG50KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ29MaW5lTGVmdDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihuKSB7XG4gICAgICAgICAgICB2YXIgbCA9IGUuY3Vyc29yQ29vcmRzKG4uaGVhZCwgXCJkaXZcIikudG9wICsgNTtcbiAgICAgICAgICAgIHJldHVybiBlLmNvb3Jkc0NoYXIoeyBsZWZ0OiAwLCB0b3A6IGwgfSwgXCJkaXZcIik7XG4gICAgICAgICAgfSwgbnQpO1xuICAgICAgICB9LFxuICAgICAgICBnb0xpbmVMZWZ0U21hcnQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24obikge1xuICAgICAgICAgICAgdmFyIGwgPSBlLmN1cnNvckNvb3JkcyhuLmhlYWQsIFwiZGl2XCIpLnRvcCArIDUsIGEgPSBlLmNvb3Jkc0NoYXIoeyBsZWZ0OiAwLCB0b3A6IGwgfSwgXCJkaXZcIik7XG4gICAgICAgICAgICByZXR1cm4gYS5jaCA8IGUuZ2V0TGluZShhLmxpbmUpLnNlYXJjaCgvXFxTLykgPyBDZihlLCBuLmhlYWQpIDogYTtcbiAgICAgICAgICB9LCBudCk7XG4gICAgICAgIH0sXG4gICAgICAgIGdvTGluZVVwOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgcmV0dXJuIGUubW92ZVYoLTEsIFwibGluZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ29MaW5lRG93bjogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLm1vdmVWKDEsIFwibGluZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ29QYWdlVXA6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5tb3ZlVigtMSwgXCJwYWdlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBnb1BhZ2VEb3duOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgcmV0dXJuIGUubW92ZVYoMSwgXCJwYWdlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBnb0NoYXJMZWZ0OiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgcmV0dXJuIGUubW92ZUgoLTEsIFwiY2hhclwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ29DaGFyUmlnaHQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5tb3ZlSCgxLCBcImNoYXJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGdvQ29sdW1uTGVmdDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLm1vdmVIKC0xLCBcImNvbHVtblwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ29Db2x1bW5SaWdodDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLm1vdmVIKDEsIFwiY29sdW1uXCIpO1xuICAgICAgICB9LFxuICAgICAgICBnb1dvcmRMZWZ0OiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgcmV0dXJuIGUubW92ZUgoLTEsIFwid29yZFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ29Hcm91cFJpZ2h0OiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgcmV0dXJuIGUubW92ZUgoMSwgXCJncm91cFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ29Hcm91cExlZnQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5tb3ZlSCgtMSwgXCJncm91cFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ29Xb3JkUmlnaHQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5tb3ZlSCgxLCBcIndvcmRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGRlbENoYXJCZWZvcmU6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5kZWxldGVIKC0xLCBcImNvZGVwb2ludFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVsQ2hhckFmdGVyOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgcmV0dXJuIGUuZGVsZXRlSCgxLCBcImNoYXJcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGRlbFdvcmRCZWZvcmU6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5kZWxldGVIKC0xLCBcIndvcmRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGRlbFdvcmRBZnRlcjogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLmRlbGV0ZUgoMSwgXCJ3b3JkXCIpO1xuICAgICAgICB9LFxuICAgICAgICBkZWxHcm91cEJlZm9yZTogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLmRlbGV0ZUgoLTEsIFwiZ3JvdXBcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGRlbEdyb3VwQWZ0ZXI6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5kZWxldGVIKDEsIFwiZ3JvdXBcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGluZGVudEF1dG86IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5pbmRlbnRTZWxlY3Rpb24oXCJzbWFydFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5kZW50TW9yZTogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLmluZGVudFNlbGVjdGlvbihcImFkZFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5kZW50TGVzczogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLmluZGVudFNlbGVjdGlvbihcInN1YnRyYWN0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBpbnNlcnRUYWI6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5yZXBsYWNlU2VsZWN0aW9uKFwiXHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydFNvZnRUYWI6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICBmb3IgKHZhciBuID0gW10sIGwgPSBlLmxpc3RTZWxlY3Rpb25zKCksIGEgPSBlLm9wdGlvbnMudGFiU2l6ZSwgdSA9IDA7IHUgPCBsLmxlbmd0aDsgdSsrKSB7XG4gICAgICAgICAgICB2YXIgZyA9IGxbdV0uZnJvbSgpLCBPID0gaWUoZS5nZXRMaW5lKGcubGluZSksIGcuY2gsIGEpO1xuICAgICAgICAgICAgbi5wdXNoKHl0KGEgLSBPICUgYSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlLnJlcGxhY2VTZWxlY3Rpb25zKG4pO1xuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0VGFiOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgZS5zb21ldGhpbmdTZWxlY3RlZCgpID8gZS5pbmRlbnRTZWxlY3Rpb24oXCJhZGRcIikgOiBlLmV4ZWNDb21tYW5kKFwiaW5zZXJ0VGFiXCIpO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc3Bvc2VDaGFyczogZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBkbihlLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZvciAodmFyIG4gPSBlLmxpc3RTZWxlY3Rpb25zKCksIGwgPSBbXSwgYSA9IDA7IGEgPCBuLmxlbmd0aDsgYSsrKVxuICAgICAgICAgICAgICBpZiAoISFuW2FdLmVtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdSA9IG5bYV0uaGVhZCwgZyA9IEZlKGUuZG9jLCB1LmxpbmUpLnRleHQ7XG4gICAgICAgICAgICAgICAgaWYgKGcpIHtcbiAgICAgICAgICAgICAgICAgIGlmICh1LmNoID09IGcubGVuZ3RoICYmICh1ID0gbmV3IHEodS5saW5lLCB1LmNoIC0gMSkpLCB1LmNoID4gMClcbiAgICAgICAgICAgICAgICAgICAgdSA9IG5ldyBxKHUubGluZSwgdS5jaCArIDEpLCBlLnJlcGxhY2VSYW5nZShcbiAgICAgICAgICAgICAgICAgICAgICBnLmNoYXJBdCh1LmNoIC0gMSkgKyBnLmNoYXJBdCh1LmNoIC0gMiksXG4gICAgICAgICAgICAgICAgICAgICAgcSh1LmxpbmUsIHUuY2ggLSAyKSxcbiAgICAgICAgICAgICAgICAgICAgICB1LFxuICAgICAgICAgICAgICAgICAgICAgIFwiK3RyYW5zcG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBlbHNlIGlmICh1LmxpbmUgPiBlLmRvYy5maXJzdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgTyA9IEZlKGUuZG9jLCB1LmxpbmUgLSAxKS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICBPICYmICh1ID0gbmV3IHEodS5saW5lLCAxKSwgZS5yZXBsYWNlUmFuZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgZy5jaGFyQXQoMCkgKyBlLmRvYy5saW5lU2VwYXJhdG9yKCkgKyBPLmNoYXJBdChPLmxlbmd0aCAtIDEpLFxuICAgICAgICAgICAgICAgICAgICAgIHEodS5saW5lIC0gMSwgTy5sZW5ndGggLSAxKSxcbiAgICAgICAgICAgICAgICAgICAgICB1LFxuICAgICAgICAgICAgICAgICAgICAgIFwiK3RyYW5zcG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsLnB1c2gobmV3IHV0KHUsIHUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZS5zZXRTZWxlY3Rpb25zKGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBuZXdsaW5lQW5kSW5kZW50OiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgcmV0dXJuIGRuKGUsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZm9yICh2YXIgbiA9IGUubGlzdFNlbGVjdGlvbnMoKSwgbCA9IG4ubGVuZ3RoIC0gMTsgbCA+PSAwOyBsLS0pXG4gICAgICAgICAgICAgIGUucmVwbGFjZVJhbmdlKGUuZG9jLmxpbmVTZXBhcmF0b3IoKSwgbltsXS5hbmNob3IsIG5bbF0uaGVhZCwgXCIraW5wdXRcIik7XG4gICAgICAgICAgICBuID0gZS5saXN0U2VsZWN0aW9ucygpO1xuICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBuLmxlbmd0aDsgYSsrKVxuICAgICAgICAgICAgICBlLmluZGVudExpbmUoblthXS5mcm9tKCkubGluZSwgbnVsbCwgITApO1xuICAgICAgICAgICAgaWkoZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9wZW5MaW5lOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgcmV0dXJuIGUucmVwbGFjZVNlbGVjdGlvbihgXG5gLCBcInN0YXJ0XCIpO1xuICAgICAgICB9LFxuICAgICAgICB0b2dnbGVPdmVyd3JpdGU6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS50b2dnbGVPdmVyd3JpdGUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIGJmKGUsIG4pIHtcbiAgICAgICAgdmFyIGwgPSBGZShlLmRvYywgbiksIGEgPSBPbihsKTtcbiAgICAgICAgcmV0dXJuIGEgIT0gbCAmJiAobiA9IHN0KGEpKSwgU2woITAsIGUsIGEsIG4sIDEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gR3AoZSwgbikge1xuICAgICAgICB2YXIgbCA9IEZlKGUuZG9jLCBuKSwgYSA9IFJjKGwpO1xuICAgICAgICByZXR1cm4gYSAhPSBsICYmIChuID0gc3QoYSkpLCBTbCghMCwgZSwgbCwgbiwgLTEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gQ2YoZSwgbikge1xuICAgICAgICB2YXIgbCA9IGJmKGUsIG4ubGluZSksIGEgPSBGZShlLmRvYywgbC5saW5lKSwgdSA9IFVlKGEsIGUuZG9jLmRpcmVjdGlvbik7XG4gICAgICAgIGlmICghdSB8fCB1WzBdLmxldmVsID09IDApIHtcbiAgICAgICAgICB2YXIgZyA9IE1hdGgubWF4KGwuY2gsIGEudGV4dC5zZWFyY2goL1xcUy8pKSwgTyA9IG4ubGluZSA9PSBsLmxpbmUgJiYgbi5jaCA8PSBnICYmIG4uY2g7XG4gICAgICAgICAgcmV0dXJuIHEobC5saW5lLCBPID8gMCA6IGcsIGwuc3RpY2t5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG5hKGUsIG4sIGwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuID09IFwic3RyaW5nXCIgJiYgKG4gPSBlb1tuXSwgIW4pKVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgZS5kaXNwbGF5LmlucHV0LmVuc3VyZVBvbGxlZCgpO1xuICAgICAgICB2YXIgYSA9IGUuZGlzcGxheS5zaGlmdCwgdSA9ICExO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGUuaXNSZWFkT25seSgpICYmIChlLnN0YXRlLnN1cHByZXNzRWRpdHMgPSAhMCksIGwgJiYgKGUuZGlzcGxheS5zaGlmdCA9ICExKSwgdSA9IG4oZSkgIT0gQWU7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgZS5kaXNwbGF5LnNoaWZ0ID0gYSwgZS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0gITE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBRcChlLCBuLCBsKSB7XG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgZS5zdGF0ZS5rZXlNYXBzLmxlbmd0aDsgYSsrKSB7XG4gICAgICAgICAgdmFyIHUgPSBkaShuLCBlLnN0YXRlLmtleU1hcHNbYV0sIGwsIGUpO1xuICAgICAgICAgIGlmICh1KVxuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGUub3B0aW9ucy5leHRyYUtleXMgJiYgZGkobiwgZS5vcHRpb25zLmV4dHJhS2V5cywgbCwgZSkgfHwgZGkobiwgZS5vcHRpb25zLmtleU1hcCwgbCwgZSk7XG4gICAgICB9XG4gICAgICB2YXIgWXAgPSBuZXcgcGUoKTtcbiAgICAgIGZ1bmN0aW9uIHRvKGUsIG4sIGwsIGEpIHtcbiAgICAgICAgdmFyIHUgPSBlLnN0YXRlLmtleVNlcTtcbiAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICBpZiAoZ2YobikpXG4gICAgICAgICAgICByZXR1cm4gXCJoYW5kbGVkXCI7XG4gICAgICAgICAgaWYgKC9cXCckLy50ZXN0KG4pID8gZS5zdGF0ZS5rZXlTZXEgPSBudWxsIDogWXAuc2V0KDUwLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGUuc3RhdGUua2V5U2VxID09IHUgJiYgKGUuc3RhdGUua2V5U2VxID0gbnVsbCwgZS5kaXNwbGF5LmlucHV0LnJlc2V0KCkpO1xuICAgICAgICAgIH0pLCBFZihlLCB1ICsgXCIgXCIgKyBuLCBsLCBhKSlcbiAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRWYoZSwgbiwgbCwgYSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBFZihlLCBuLCBsLCBhKSB7XG4gICAgICAgIHZhciB1ID0gUXAoZSwgbiwgYSk7XG4gICAgICAgIHJldHVybiB1ID09IFwibXVsdGlcIiAmJiAoZS5zdGF0ZS5rZXlTZXEgPSBuKSwgdSA9PSBcImhhbmRsZWRcIiAmJiBIdChlLCBcImtleUhhbmRsZWRcIiwgZSwgbiwgbCksICh1ID09IFwiaGFuZGxlZFwiIHx8IHUgPT0gXCJtdWx0aVwiKSAmJiAobHQobCksIG9sKGUpKSwgISF1O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gU2YoZSwgbikge1xuICAgICAgICB2YXIgbCA9IEFmKG4sICEwKTtcbiAgICAgICAgcmV0dXJuIGwgPyBuLnNoaWZ0S2V5ICYmICFlLnN0YXRlLmtleVNlcSA/IHRvKGUsIFwiU2hpZnQtXCIgKyBsLCBuLCBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgcmV0dXJuIG5hKGUsIGEsICEwKTtcbiAgICAgICAgfSkgfHwgdG8oZSwgbCwgbiwgZnVuY3Rpb24oYSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgYSA9PSBcInN0cmluZ1wiID8gL15nb1tBLVpdLy50ZXN0KGEpIDogYS5tb3Rpb24pXG4gICAgICAgICAgICByZXR1cm4gbmEoZSwgYSk7XG4gICAgICAgIH0pIDogdG8oZSwgbCwgbiwgZnVuY3Rpb24oYSkge1xuICAgICAgICAgIHJldHVybiBuYShlLCBhKTtcbiAgICAgICAgfSkgOiAhMTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEtwKGUsIG4sIGwpIHtcbiAgICAgICAgcmV0dXJuIHRvKGUsIFwiJ1wiICsgbCArIFwiJ1wiLCBuLCBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgcmV0dXJuIG5hKGUsIGEsICEwKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB2YXIgeGwgPSBudWxsO1xuICAgICAgZnVuY3Rpb24geGYoZSkge1xuICAgICAgICB2YXIgbiA9IHRoaXM7XG4gICAgICAgIGlmICghKGUudGFyZ2V0ICYmIGUudGFyZ2V0ICE9IG4uZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpKSAmJiAobi5jdXJPcC5mb2N1cyA9IFgodmUobikpLCAhUWUobiwgZSkpKSB7XG4gICAgICAgICAgcCAmJiB2IDwgMTEgJiYgZS5rZXlDb2RlID09IDI3ICYmIChlLnJldHVyblZhbHVlID0gITEpO1xuICAgICAgICAgIHZhciBsID0gZS5rZXlDb2RlO1xuICAgICAgICAgIG4uZGlzcGxheS5zaGlmdCA9IGwgPT0gMTYgfHwgZS5zaGlmdEtleTtcbiAgICAgICAgICB2YXIgYSA9IFNmKG4sIGUpO1xuICAgICAgICAgIG0gJiYgKHhsID0gYSA/IGwgOiBudWxsLCAhYSAmJiBsID09IDg4ICYmICFqbiAmJiAoTSA/IGUubWV0YUtleSA6IGUuY3RybEtleSkgJiYgbi5yZXBsYWNlU2VsZWN0aW9uKFwiXCIsIG51bGwsIFwiY3V0XCIpKSwgdCAmJiAhTSAmJiAhYSAmJiBsID09IDQ2ICYmIGUuc2hpZnRLZXkgJiYgIWUuY3RybEtleSAmJiBkb2N1bWVudC5leGVjQ29tbWFuZCAmJiBkb2N1bWVudC5leGVjQ29tbWFuZChcImN1dFwiKSwgbCA9PSAxOCAmJiAhL1xcYkNvZGVNaXJyb3ItY3Jvc3NoYWlyXFxiLy50ZXN0KG4uZGlzcGxheS5saW5lRGl2LmNsYXNzTmFtZSkgJiYgWHAobik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFhwKGUpIHtcbiAgICAgICAgdmFyIG4gPSBlLmRpc3BsYXkubGluZURpdjtcbiAgICAgICAgSihuLCBcIkNvZGVNaXJyb3ItY3Jvc3NoYWlyXCIpO1xuICAgICAgICBmdW5jdGlvbiBsKGEpIHtcbiAgICAgICAgICAoYS5rZXlDb2RlID09IDE4IHx8ICFhLmFsdEtleSkgJiYgKE4obiwgXCJDb2RlTWlycm9yLWNyb3NzaGFpclwiKSwgT2UoZG9jdW1lbnQsIFwia2V5dXBcIiwgbCksIE9lKGRvY3VtZW50LCBcIm1vdXNlb3ZlclwiLCBsKSk7XG4gICAgICAgIH1cbiAgICAgICAgbmUoZG9jdW1lbnQsIFwia2V5dXBcIiwgbCksIG5lKGRvY3VtZW50LCBcIm1vdXNlb3ZlclwiLCBsKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHdmKGUpIHtcbiAgICAgICAgZS5rZXlDb2RlID09IDE2ICYmICh0aGlzLmRvYy5zZWwuc2hpZnQgPSAhMSksIFFlKHRoaXMsIGUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gVGYoZSkge1xuICAgICAgICB2YXIgbiA9IHRoaXM7XG4gICAgICAgIGlmICghKGUudGFyZ2V0ICYmIGUudGFyZ2V0ICE9IG4uZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpKSAmJiAhKG5yKG4uZGlzcGxheSwgZSkgfHwgUWUobiwgZSkgfHwgZS5jdHJsS2V5ICYmICFlLmFsdEtleSB8fCBNICYmIGUubWV0YUtleSkpIHtcbiAgICAgICAgICB2YXIgbCA9IGUua2V5Q29kZSwgYSA9IGUuY2hhckNvZGU7XG4gICAgICAgICAgaWYgKG0gJiYgbCA9PSB4bCkge1xuICAgICAgICAgICAgeGwgPSBudWxsLCBsdChlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEobSAmJiAoIWUud2hpY2ggfHwgZS53aGljaCA8IDEwKSAmJiBTZihuLCBlKSkpIHtcbiAgICAgICAgICAgIHZhciB1ID0gU3RyaW5nLmZyb21DaGFyQ29kZShhID09IG51bGwgPyBsIDogYSk7XG4gICAgICAgICAgICB1ICE9IFwiXFxiXCIgJiYgKEtwKG4sIGUsIHUpIHx8IG4uZGlzcGxheS5pbnB1dC5vbktleVByZXNzKGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBKcCA9IDQwMCwgd2wgPSBmdW5jdGlvbihlLCBuLCBsKSB7XG4gICAgICAgIHRoaXMudGltZSA9IGUsIHRoaXMucG9zID0gbiwgdGhpcy5idXR0b24gPSBsO1xuICAgICAgfTtcbiAgICAgIHdsLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24oZSwgbiwgbCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aW1lICsgSnAgPiBlICYmIG9lKG4sIHRoaXMucG9zKSA9PSAwICYmIGwgPT0gdGhpcy5idXR0b247XG4gICAgICB9O1xuICAgICAgdmFyIG5vLCBybztcbiAgICAgIGZ1bmN0aW9uIFpwKGUsIG4pIHtcbiAgICAgICAgdmFyIGwgPSArbmV3IERhdGUoKTtcbiAgICAgICAgcmV0dXJuIHJvICYmIHJvLmNvbXBhcmUobCwgZSwgbikgPyAobm8gPSBybyA9IG51bGwsIFwidHJpcGxlXCIpIDogbm8gJiYgbm8uY29tcGFyZShsLCBlLCBuKSA/IChybyA9IG5ldyB3bChsLCBlLCBuKSwgbm8gPSBudWxsLCBcImRvdWJsZVwiKSA6IChubyA9IG5ldyB3bChsLCBlLCBuKSwgcm8gPSBudWxsLCBcInNpbmdsZVwiKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIERmKGUpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLCBsID0gbi5kaXNwbGF5O1xuICAgICAgICBpZiAoIShRZShuLCBlKSB8fCBsLmFjdGl2ZVRvdWNoICYmIGwuaW5wdXQuc3VwcG9ydHNUb3VjaCgpKSkge1xuICAgICAgICAgIGlmIChsLmlucHV0LmVuc3VyZVBvbGxlZCgpLCBsLnNoaWZ0ID0gZS5zaGlmdEtleSwgbnIobCwgZSkpIHtcbiAgICAgICAgICAgIGIgfHwgKGwuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gITEsIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiBsLnNjcm9sbGVyLmRyYWdnYWJsZSA9ICEwO1xuICAgICAgICAgICAgfSwgMTAwKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghVGwobiwgZSkpIHtcbiAgICAgICAgICAgIHZhciBhID0gTHIobiwgZSksIHUgPSBNaShlKSwgZyA9IGEgPyBacChhLCB1KSA6IFwic2luZ2xlXCI7XG4gICAgICAgICAgICBzZShuKS5mb2N1cygpLCB1ID09IDEgJiYgbi5zdGF0ZS5zZWxlY3RpbmdUZXh0ICYmIG4uc3RhdGUuc2VsZWN0aW5nVGV4dChlKSwgIShhICYmIHFwKG4sIHUsIGEsIGcsIGUpKSAmJiAodSA9PSAxID8gYSA/IGVoKG4sIGEsIGcsIGUpIDogZW4oZSkgPT0gbC5zY3JvbGxlciAmJiBsdChlKSA6IHUgPT0gMiA/IChhICYmIEpvKG4uZG9jLCBhKSwgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGwuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0sIDIwKSkgOiB1ID09IDMgJiYgKGsgPyBuLmRpc3BsYXkuaW5wdXQub25Db250ZXh0TWVudShlKSA6IGFsKG4pKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBxcChlLCBuLCBsLCBhLCB1KSB7XG4gICAgICAgIHZhciBnID0gXCJDbGlja1wiO1xuICAgICAgICByZXR1cm4gYSA9PSBcImRvdWJsZVwiID8gZyA9IFwiRG91YmxlXCIgKyBnIDogYSA9PSBcInRyaXBsZVwiICYmIChnID0gXCJUcmlwbGVcIiArIGcpLCBnID0gKG4gPT0gMSA/IFwiTGVmdFwiIDogbiA9PSAyID8gXCJNaWRkbGVcIiA6IFwiUmlnaHRcIikgKyBnLCB0byhlLCB5ZihnLCB1KSwgdSwgZnVuY3Rpb24oTykge1xuICAgICAgICAgIGlmICh0eXBlb2YgTyA9PSBcInN0cmluZ1wiICYmIChPID0gZW9bT10pLCAhTylcbiAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICB2YXIgTCA9ICExO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBlLmlzUmVhZE9ubHkoKSAmJiAoZS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0gITApLCBMID0gTyhlLCBsKSAhPSBBZTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgZS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0gITE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBMO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9wKGUsIG4sIGwpIHtcbiAgICAgICAgdmFyIGEgPSBlLmdldE9wdGlvbihcImNvbmZpZ3VyZU1vdXNlXCIpLCB1ID0gYSA/IGEoZSwgbiwgbCkgOiB7fTtcbiAgICAgICAgaWYgKHUudW5pdCA9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGcgPSB5ID8gbC5zaGlmdEtleSAmJiBsLm1ldGFLZXkgOiBsLmFsdEtleTtcbiAgICAgICAgICB1LnVuaXQgPSBnID8gXCJyZWN0YW5nbGVcIiA6IG4gPT0gXCJzaW5nbGVcIiA/IFwiY2hhclwiIDogbiA9PSBcImRvdWJsZVwiID8gXCJ3b3JkXCIgOiBcImxpbmVcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHUuZXh0ZW5kID09IG51bGwgfHwgZS5kb2MuZXh0ZW5kKSAmJiAodS5leHRlbmQgPSBlLmRvYy5leHRlbmQgfHwgbC5zaGlmdEtleSksIHUuYWRkTmV3ID09IG51bGwgJiYgKHUuYWRkTmV3ID0gTSA/IGwubWV0YUtleSA6IGwuY3RybEtleSksIHUubW92ZU9uRHJhZyA9PSBudWxsICYmICh1Lm1vdmVPbkRyYWcgPSAhKE0gPyBsLmFsdEtleSA6IGwuY3RybEtleSkpLCB1O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZWgoZSwgbiwgbCwgYSkge1xuICAgICAgICBwID8gc2V0VGltZW91dChtZShEdSwgZSksIDApIDogZS5jdXJPcC5mb2N1cyA9IFgodmUoZSkpO1xuICAgICAgICB2YXIgdSA9IF9wKGUsIGwsIGEpLCBnID0gZS5kb2Muc2VsLCBPO1xuICAgICAgICBlLm9wdGlvbnMuZHJhZ0Ryb3AgJiYgJGEgJiYgIWUuaXNSZWFkT25seSgpICYmIGwgPT0gXCJzaW5nbGVcIiAmJiAoTyA9IGcuY29udGFpbnMobikpID4gLTEgJiYgKG9lKChPID0gZy5yYW5nZXNbT10pLmZyb20oKSwgbikgPCAwIHx8IG4ueFJlbCA+IDApICYmIChvZShPLnRvKCksIG4pID4gMCB8fCBuLnhSZWwgPCAwKSA/IHRoKGUsIGEsIG4sIHUpIDogbmgoZSwgYSwgbiwgdSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB0aChlLCBuLCBsLCBhKSB7XG4gICAgICAgIHZhciB1ID0gZS5kaXNwbGF5LCBnID0gITEsIE8gPSAkdChlLCBmdW5jdGlvbihVKSB7XG4gICAgICAgICAgYiAmJiAodS5zY3JvbGxlci5kcmFnZ2FibGUgPSAhMSksIGUuc3RhdGUuZHJhZ2dpbmdUZXh0ID0gITEsIGUuc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQgJiYgKGUuaGFzRm9jdXMoKSA/IGUuc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQgPSAhMSA6IGFsKGUpKSwgT2UodS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2V1cFwiLCBPKSwgT2UodS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2Vtb3ZlXCIsIEwpLCBPZSh1LnNjcm9sbGVyLCBcImRyYWdzdGFydFwiLCBIKSwgT2UodS5zY3JvbGxlciwgXCJkcm9wXCIsIE8pLCBnIHx8IChsdChVKSwgYS5hZGROZXcgfHwgSm8oZS5kb2MsIGwsIG51bGwsIG51bGwsIGEuZXh0ZW5kKSwgYiAmJiAheCB8fCBwICYmIHYgPT0gOSA/IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB1LndyYXBwZXIub3duZXJEb2N1bWVudC5ib2R5LmZvY3VzKHsgcHJldmVudFNjcm9sbDogITAgfSksIHUuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICB9LCAyMCkgOiB1LmlucHV0LmZvY3VzKCkpO1xuICAgICAgICB9KSwgTCA9IGZ1bmN0aW9uKFUpIHtcbiAgICAgICAgICBnID0gZyB8fCBNYXRoLmFicyhuLmNsaWVudFggLSBVLmNsaWVudFgpICsgTWF0aC5hYnMobi5jbGllbnRZIC0gVS5jbGllbnRZKSA+PSAxMDtcbiAgICAgICAgfSwgSCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBnID0gITA7XG4gICAgICAgIH07XG4gICAgICAgIGIgJiYgKHUuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gITApLCBlLnN0YXRlLmRyYWdnaW5nVGV4dCA9IE8sIE8uY29weSA9ICFhLm1vdmVPbkRyYWcsIG5lKHUud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNldXBcIiwgTyksIG5lKHUud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBMKSwgbmUodS5zY3JvbGxlciwgXCJkcmFnc3RhcnRcIiwgSCksIG5lKHUuc2Nyb2xsZXIsIFwiZHJvcFwiLCBPKSwgZS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9ICEwLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB1LmlucHV0LmZvY3VzKCk7XG4gICAgICAgIH0sIDIwKSwgdS5zY3JvbGxlci5kcmFnRHJvcCAmJiB1LnNjcm9sbGVyLmRyYWdEcm9wKCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBSZihlLCBuLCBsKSB7XG4gICAgICAgIGlmIChsID09IFwiY2hhclwiKVxuICAgICAgICAgIHJldHVybiBuZXcgdXQobiwgbik7XG4gICAgICAgIGlmIChsID09IFwid29yZFwiKVxuICAgICAgICAgIHJldHVybiBlLmZpbmRXb3JkQXQobik7XG4gICAgICAgIGlmIChsID09IFwibGluZVwiKVxuICAgICAgICAgIHJldHVybiBuZXcgdXQocShuLmxpbmUsIDApLCBWZShlLmRvYywgcShuLmxpbmUgKyAxLCAwKSkpO1xuICAgICAgICB2YXIgYSA9IGwoZSwgbik7XG4gICAgICAgIHJldHVybiBuZXcgdXQoYS5mcm9tLCBhLnRvKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG5oKGUsIG4sIGwsIGEpIHtcbiAgICAgICAgcCAmJiBhbChlKTtcbiAgICAgICAgdmFyIHUgPSBlLmRpc3BsYXksIGcgPSBlLmRvYztcbiAgICAgICAgbHQobik7XG4gICAgICAgIHZhciBPLCBMLCBIID0gZy5zZWwsIFUgPSBILnJhbmdlcztcbiAgICAgICAgaWYgKGEuYWRkTmV3ICYmICFhLmV4dGVuZCA/IChMID0gZy5zZWwuY29udGFpbnMobCksIEwgPiAtMSA/IE8gPSBVW0xdIDogTyA9IG5ldyB1dChsLCBsKSkgOiAoTyA9IGcuc2VsLnByaW1hcnkoKSwgTCA9IGcuc2VsLnByaW1JbmRleCksIGEudW5pdCA9PSBcInJlY3RhbmdsZVwiKVxuICAgICAgICAgIGEuYWRkTmV3IHx8IChPID0gbmV3IHV0KGwsIGwpKSwgbCA9IExyKGUsIG4sICEwLCAhMCksIEwgPSAtMTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIEcgPSBSZihlLCBsLCBhLnVuaXQpO1xuICAgICAgICAgIGEuZXh0ZW5kID8gTyA9IEFsKE8sIEcuYW5jaG9yLCBHLmhlYWQsIGEuZXh0ZW5kKSA6IE8gPSBHO1xuICAgICAgICB9XG4gICAgICAgIGEuYWRkTmV3ID8gTCA9PSAtMSA/IChMID0gVS5sZW5ndGgsIFF0KFxuICAgICAgICAgIGcsXG4gICAgICAgICAgRm4oZSwgVS5jb25jYXQoW09dKSwgTCksXG4gICAgICAgICAgeyBzY3JvbGw6ICExLCBvcmlnaW46IFwiKm1vdXNlXCIgfVxuICAgICAgICApKSA6IFUubGVuZ3RoID4gMSAmJiBVW0xdLmVtcHR5KCkgJiYgYS51bml0ID09IFwiY2hhclwiICYmICFhLmV4dGVuZCA/IChRdChcbiAgICAgICAgICBnLFxuICAgICAgICAgIEZuKGUsIFUuc2xpY2UoMCwgTCkuY29uY2F0KFUuc2xpY2UoTCArIDEpKSwgMCksXG4gICAgICAgICAgeyBzY3JvbGw6ICExLCBvcmlnaW46IFwiKm1vdXNlXCIgfVxuICAgICAgICApLCBIID0gZy5zZWwpIDogYmwoZywgTCwgTywgWWUpIDogKEwgPSAwLCBRdChnLCBuZXcgQW4oW09dLCAwKSwgWWUpLCBIID0gZy5zZWwpO1xuICAgICAgICB2YXIgWSA9IGw7XG4gICAgICAgIGZ1bmN0aW9uIGVlKEVlKSB7XG4gICAgICAgICAgaWYgKG9lKFksIEVlKSAhPSAwKVxuICAgICAgICAgICAgaWYgKFkgPSBFZSwgYS51bml0ID09IFwicmVjdGFuZ2xlXCIpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgTmUgPSBbXSwga2UgPSBlLm9wdGlvbnMudGFiU2l6ZSwgSGUgPSBpZShGZShnLCBsLmxpbmUpLnRleHQsIGwuY2gsIGtlKSwgWGUgPSBpZShGZShnLCBFZS5saW5lKS50ZXh0LCBFZS5jaCwga2UpLCB2dCA9IE1hdGgubWluKEhlLCBYZSksIGp0ID0gTWF0aC5tYXgoSGUsIFhlKSwgQ3QgPSBNYXRoLm1pbihsLmxpbmUsIEVlLmxpbmUpLCBjbiA9IE1hdGgubWluKGUubGFzdExpbmUoKSwgTWF0aC5tYXgobC5saW5lLCBFZS5saW5lKSk7IEN0IDw9IGNuOyBDdCsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJuID0gRmUoZywgQ3QpLnRleHQsIEl0ID0gZXQocm4sIHZ0LCBrZSk7XG4gICAgICAgICAgICAgICAgdnQgPT0ganQgPyBOZS5wdXNoKG5ldyB1dChxKEN0LCBJdCksIHEoQ3QsIEl0KSkpIDogcm4ubGVuZ3RoID4gSXQgJiYgTmUucHVzaChuZXcgdXQocShDdCwgSXQpLCBxKEN0LCBldChybiwganQsIGtlKSkpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBOZS5sZW5ndGggfHwgTmUucHVzaChuZXcgdXQobCwgbCkpLCBRdChcbiAgICAgICAgICAgICAgICBnLFxuICAgICAgICAgICAgICAgIEZuKGUsIEgucmFuZ2VzLnNsaWNlKDAsIEwpLmNvbmNhdChOZSksIEwpLFxuICAgICAgICAgICAgICAgIHsgb3JpZ2luOiBcIiptb3VzZVwiLCBzY3JvbGw6ICExIH1cbiAgICAgICAgICAgICAgKSwgZS5zY3JvbGxJbnRvVmlldyhFZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgb24gPSBPLCBHdCA9IFJmKGUsIEVlLCBhLnVuaXQpLCBGdCA9IG9uLmFuY2hvciwgTnQ7XG4gICAgICAgICAgICAgIG9lKEd0LmFuY2hvciwgRnQpID4gMCA/IChOdCA9IEd0LmhlYWQsIEZ0ID0gUHQob24uZnJvbSgpLCBHdC5hbmNob3IpKSA6IChOdCA9IEd0LmFuY2hvciwgRnQgPSBydChvbi50bygpLCBHdC5oZWFkKSk7XG4gICAgICAgICAgICAgIHZhciB4dCA9IEgucmFuZ2VzLnNsaWNlKDApO1xuICAgICAgICAgICAgICB4dFtMXSA9IHJoKGUsIG5ldyB1dChWZShnLCBGdCksIE50KSksIFF0KGcsIEZuKGUsIHh0LCBMKSwgWWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBfID0gdS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBhZSA9IDA7XG4gICAgICAgIGZ1bmN0aW9uIGNlKEVlKSB7XG4gICAgICAgICAgdmFyIE5lID0gKythZSwga2UgPSBMcihlLCBFZSwgITAsIGEudW5pdCA9PSBcInJlY3RhbmdsZVwiKTtcbiAgICAgICAgICBpZiAoISFrZSlcbiAgICAgICAgICAgIGlmIChvZShrZSwgWSkgIT0gMCkge1xuICAgICAgICAgICAgICBlLmN1ck9wLmZvY3VzID0gWCh2ZShlKSksIGVlKGtlKTtcbiAgICAgICAgICAgICAgdmFyIEhlID0gV28odSwgZyk7XG4gICAgICAgICAgICAgIChrZS5saW5lID49IEhlLnRvIHx8IGtlLmxpbmUgPCBIZS5mcm9tKSAmJiBzZXRUaW1lb3V0KCR0KGUsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGFlID09IE5lICYmIGNlKEVlKTtcbiAgICAgICAgICAgICAgfSksIDE1MCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgWGUgPSBFZS5jbGllbnRZIDwgXy50b3AgPyAtMjAgOiBFZS5jbGllbnRZID4gXy5ib3R0b20gPyAyMCA6IDA7XG4gICAgICAgICAgICAgIFhlICYmIHNldFRpbWVvdXQoJHQoZSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgYWUgPT0gTmUgJiYgKHUuc2Nyb2xsZXIuc2Nyb2xsVG9wICs9IFhlLCBjZShFZSkpO1xuICAgICAgICAgICAgICB9KSwgNTApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHllKEVlKSB7XG4gICAgICAgICAgZS5zdGF0ZS5zZWxlY3RpbmdUZXh0ID0gITEsIGFlID0gMSAvIDAsIEVlICYmIChsdChFZSksIHUuaW5wdXQuZm9jdXMoKSksIE9lKHUud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBDZSksIE9lKHUud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNldXBcIiwgVGUpLCBnLmhpc3RvcnkubGFzdFNlbE9yaWdpbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIENlID0gJHQoZSwgZnVuY3Rpb24oRWUpIHtcbiAgICAgICAgICBFZS5idXR0b25zID09PSAwIHx8ICFNaShFZSkgPyB5ZShFZSkgOiBjZShFZSk7XG4gICAgICAgIH0pLCBUZSA9ICR0KGUsIHllKTtcbiAgICAgICAgZS5zdGF0ZS5zZWxlY3RpbmdUZXh0ID0gVGUsIG5lKHUud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBDZSksIG5lKHUud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNldXBcIiwgVGUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcmgoZSwgbikge1xuICAgICAgICB2YXIgbCA9IG4uYW5jaG9yLCBhID0gbi5oZWFkLCB1ID0gRmUoZS5kb2MsIGwubGluZSk7XG4gICAgICAgIGlmIChvZShsLCBhKSA9PSAwICYmIGwuc3RpY2t5ID09IGEuc3RpY2t5KVxuICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICB2YXIgZyA9IFVlKHUpO1xuICAgICAgICBpZiAoIWcpXG4gICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIHZhciBPID0gRGUoZywgbC5jaCwgbC5zdGlja3kpLCBMID0gZ1tPXTtcbiAgICAgICAgaWYgKEwuZnJvbSAhPSBsLmNoICYmIEwudG8gIT0gbC5jaClcbiAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgdmFyIEggPSBPICsgKEwuZnJvbSA9PSBsLmNoID09IChMLmxldmVsICE9IDEpID8gMCA6IDEpO1xuICAgICAgICBpZiAoSCA9PSAwIHx8IEggPT0gZy5sZW5ndGgpXG4gICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIHZhciBVO1xuICAgICAgICBpZiAoYS5saW5lICE9IGwubGluZSlcbiAgICAgICAgICBVID0gKGEubGluZSAtIGwubGluZSkgKiAoZS5kb2MuZGlyZWN0aW9uID09IFwibHRyXCIgPyAxIDogLTEpID4gMDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIEcgPSBEZShnLCBhLmNoLCBhLnN0aWNreSksIFkgPSBHIC0gTyB8fCAoYS5jaCAtIGwuY2gpICogKEwubGV2ZWwgPT0gMSA/IC0xIDogMSk7XG4gICAgICAgICAgRyA9PSBIIC0gMSB8fCBHID09IEggPyBVID0gWSA8IDAgOiBVID0gWSA+IDA7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVlID0gZ1tIICsgKFUgPyAtMSA6IDApXSwgXyA9IFUgPT0gKGVlLmxldmVsID09IDEpLCBhZSA9IF8gPyBlZS5mcm9tIDogZWUudG8sIGNlID0gXyA/IFwiYWZ0ZXJcIiA6IFwiYmVmb3JlXCI7XG4gICAgICAgIHJldHVybiBsLmNoID09IGFlICYmIGwuc3RpY2t5ID09IGNlID8gbiA6IG5ldyB1dChuZXcgcShsLmxpbmUsIGFlLCBjZSksIGEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gTWYoZSwgbiwgbCwgYSkge1xuICAgICAgICB2YXIgdSwgZztcbiAgICAgICAgaWYgKG4udG91Y2hlcylcbiAgICAgICAgICB1ID0gbi50b3VjaGVzWzBdLmNsaWVudFgsIGcgPSBuLnRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB1ID0gbi5jbGllbnRYLCBnID0gbi5jbGllbnRZO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgIH1cbiAgICAgICAgaWYgKHUgPj0gTWF0aC5mbG9vcihlLmRpc3BsYXkuZ3V0dGVycy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCkpXG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICBhICYmIGx0KG4pO1xuICAgICAgICB2YXIgTyA9IGUuZGlzcGxheSwgTCA9IE8ubGluZURpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKGcgPiBMLmJvdHRvbSB8fCAhYnQoZSwgbCkpXG4gICAgICAgICAgcmV0dXJuIGNyKG4pO1xuICAgICAgICBnIC09IEwudG9wIC0gTy52aWV3T2Zmc2V0O1xuICAgICAgICBmb3IgKHZhciBIID0gMDsgSCA8IGUuZGlzcGxheS5ndXR0ZXJTcGVjcy5sZW5ndGg7ICsrSCkge1xuICAgICAgICAgIHZhciBVID0gTy5ndXR0ZXJzLmNoaWxkTm9kZXNbSF07XG4gICAgICAgICAgaWYgKFUgJiYgVS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCA+PSB1KSB7XG4gICAgICAgICAgICB2YXIgRyA9IHpuKGUuZG9jLCBnKSwgWSA9IGUuZGlzcGxheS5ndXR0ZXJTcGVjc1tIXTtcbiAgICAgICAgICAgIHJldHVybiBQZShlLCBsLCBlLCBHLCBZLmNsYXNzTmFtZSwgbiksIGNyKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gVGwoZSwgbikge1xuICAgICAgICByZXR1cm4gTWYoZSwgbiwgXCJndXR0ZXJDbGlja1wiLCAhMCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBJZihlLCBuKSB7XG4gICAgICAgIG5yKGUuZGlzcGxheSwgbikgfHwgaWgoZSwgbikgfHwgUWUoZSwgbiwgXCJjb250ZXh0bWVudVwiKSB8fCBrIHx8IGUuZGlzcGxheS5pbnB1dC5vbkNvbnRleHRNZW51KG4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gaWgoZSwgbikge1xuICAgICAgICByZXR1cm4gYnQoZSwgXCJndXR0ZXJDb250ZXh0TWVudVwiKSA/IE1mKGUsIG4sIFwiZ3V0dGVyQ29udGV4dE1lbnVcIiwgITEpIDogITE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBOZihlKSB7XG4gICAgICAgIGUuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSA9IGUuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9cXHMqY20tcy1cXFMrL2csIFwiXCIpICsgZS5vcHRpb25zLnRoZW1lLnJlcGxhY2UoLyhefFxccylcXHMqL2csIFwiIGNtLXMtXCIpLCBIaShlKTtcbiAgICAgIH1cbiAgICAgIHZhciBwaSA9IHsgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gXCJDb2RlTWlycm9yLkluaXRcIjtcbiAgICAgIH0gfSwgT2YgPSB7fSwgcmEgPSB7fTtcbiAgICAgIGZ1bmN0aW9uIG9oKGUpIHtcbiAgICAgICAgdmFyIG4gPSBlLm9wdGlvbkhhbmRsZXJzO1xuICAgICAgICBmdW5jdGlvbiBsKGEsIHUsIGcsIE8pIHtcbiAgICAgICAgICBlLmRlZmF1bHRzW2FdID0gdSwgZyAmJiAoblthXSA9IE8gPyBmdW5jdGlvbihMLCBILCBVKSB7XG4gICAgICAgICAgICBVICE9IHBpICYmIGcoTCwgSCwgVSk7XG4gICAgICAgICAgfSA6IGcpO1xuICAgICAgICB9XG4gICAgICAgIGUuZGVmaW5lT3B0aW9uID0gbCwgZS5Jbml0ID0gcGksIGwoXCJ2YWx1ZVwiLCBcIlwiLCBmdW5jdGlvbihhLCB1KSB7XG4gICAgICAgICAgcmV0dXJuIGEuc2V0VmFsdWUodSk7XG4gICAgICAgIH0sICEwKSwgbChcIm1vZGVcIiwgbnVsbCwgZnVuY3Rpb24oYSwgdSkge1xuICAgICAgICAgIGEuZG9jLm1vZGVPcHRpb24gPSB1LCBtbChhKTtcbiAgICAgICAgfSwgITApLCBsKFwiaW5kZW50VW5pdFwiLCAyLCBtbCwgITApLCBsKFwiaW5kZW50V2l0aFRhYnNcIiwgITEpLCBsKFwic21hcnRJbmRlbnRcIiwgITApLCBsKFwidGFiU2l6ZVwiLCA0LCBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgR2koYSksIEhpKGEpLCB0bihhKTtcbiAgICAgICAgfSwgITApLCBsKFwibGluZVNlcGFyYXRvclwiLCBudWxsLCBmdW5jdGlvbihhLCB1KSB7XG4gICAgICAgICAgaWYgKGEuZG9jLmxpbmVTZXAgPSB1LCAhIXUpIHtcbiAgICAgICAgICAgIHZhciBnID0gW10sIE8gPSBhLmRvYy5maXJzdDtcbiAgICAgICAgICAgIGEuZG9jLml0ZXIoZnVuY3Rpb24oSCkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBVID0gMDsgOyApIHtcbiAgICAgICAgICAgICAgICB2YXIgRyA9IEgudGV4dC5pbmRleE9mKHUsIFUpO1xuICAgICAgICAgICAgICAgIGlmIChHID09IC0xKVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgVSA9IEcgKyB1Lmxlbmd0aCwgZy5wdXNoKHEoTywgRykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIE8rKztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yICh2YXIgTCA9IGcubGVuZ3RoIC0gMTsgTCA+PSAwOyBMLS0pXG4gICAgICAgICAgICAgIHVpKGEuZG9jLCB1LCBnW0xdLCBxKGdbTF0ubGluZSwgZ1tMXS5jaCArIHUubGVuZ3RoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSwgbChcInNwZWNpYWxDaGFyc1wiLCAvW1xcdTAwMDAtXFx1MDAxZlxcdTAwN2YtXFx1MDA5ZlxcdTAwYWRcXHUwNjFjXFx1MjAwYlxcdTIwMGVcXHUyMDBmXFx1MjAyOFxcdTIwMjlcXHVmZWZmXFx1ZmZmOS1cXHVmZmZjXS9nLCBmdW5jdGlvbihhLCB1LCBnKSB7XG4gICAgICAgICAgYS5zdGF0ZS5zcGVjaWFsQ2hhcnMgPSBuZXcgUmVnRXhwKHUuc291cmNlICsgKHUudGVzdChcIlx0XCIpID8gXCJcIiA6IFwifFx0XCIpLCBcImdcIiksIGcgIT0gcGkgJiYgYS5yZWZyZXNoKCk7XG4gICAgICAgIH0pLCBsKFwic3BlY2lhbENoYXJQbGFjZWhvbGRlclwiLCBGYywgZnVuY3Rpb24oYSkge1xuICAgICAgICAgIHJldHVybiBhLnJlZnJlc2goKTtcbiAgICAgICAgfSwgITApLCBsKFwiZWxlY3RyaWNDaGFyc1wiLCAhMCksIGwoXCJpbnB1dFN0eWxlXCIsIEMgPyBcImNvbnRlbnRlZGl0YWJsZVwiIDogXCJ0ZXh0YXJlYVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnB1dFN0eWxlIGNhbiBub3QgKHlldCkgYmUgY2hhbmdlZCBpbiBhIHJ1bm5pbmcgZWRpdG9yXCIpO1xuICAgICAgICB9LCAhMCksIGwoXCJzcGVsbGNoZWNrXCIsICExLCBmdW5jdGlvbihhLCB1KSB7XG4gICAgICAgICAgcmV0dXJuIGEuZ2V0SW5wdXRGaWVsZCgpLnNwZWxsY2hlY2sgPSB1O1xuICAgICAgICB9LCAhMCksIGwoXCJhdXRvY29ycmVjdFwiLCAhMSwgZnVuY3Rpb24oYSwgdSkge1xuICAgICAgICAgIHJldHVybiBhLmdldElucHV0RmllbGQoKS5hdXRvY29ycmVjdCA9IHU7XG4gICAgICAgIH0sICEwKSwgbChcImF1dG9jYXBpdGFsaXplXCIsICExLCBmdW5jdGlvbihhLCB1KSB7XG4gICAgICAgICAgcmV0dXJuIGEuZ2V0SW5wdXRGaWVsZCgpLmF1dG9jYXBpdGFsaXplID0gdTtcbiAgICAgICAgfSwgITApLCBsKFwicnRsTW92ZVZpc3VhbGx5XCIsICFCKSwgbChcIndob2xlTGluZVVwZGF0ZUJlZm9yZVwiLCAhMCksIGwoXCJ0aGVtZVwiLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oYSkge1xuICAgICAgICAgIE5mKGEpLCBXaShhKTtcbiAgICAgICAgfSwgITApLCBsKFwia2V5TWFwXCIsIFwiZGVmYXVsdFwiLCBmdW5jdGlvbihhLCB1LCBnKSB7XG4gICAgICAgICAgdmFyIE8gPSB0YSh1KSwgTCA9IGcgIT0gcGkgJiYgdGEoZyk7XG4gICAgICAgICAgTCAmJiBMLmRldGFjaCAmJiBMLmRldGFjaChhLCBPKSwgTy5hdHRhY2ggJiYgTy5hdHRhY2goYSwgTCB8fCBudWxsKTtcbiAgICAgICAgfSksIGwoXCJleHRyYUtleXNcIiwgbnVsbCksIGwoXCJjb25maWd1cmVNb3VzZVwiLCBudWxsKSwgbChcImxpbmVXcmFwcGluZ1wiLCAhMSwgbGgsICEwKSwgbChcImd1dHRlcnNcIiwgW10sIGZ1bmN0aW9uKGEsIHUpIHtcbiAgICAgICAgICBhLmRpc3BsYXkuZ3V0dGVyU3BlY3MgPSBobCh1LCBhLm9wdGlvbnMubGluZU51bWJlcnMpLCBXaShhKTtcbiAgICAgICAgfSwgITApLCBsKFwiZml4ZWRHdXR0ZXJcIiwgITAsIGZ1bmN0aW9uKGEsIHUpIHtcbiAgICAgICAgICBhLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0ID0gdSA/IG5sKGEuZGlzcGxheSkgKyBcInB4XCIgOiBcIjBcIiwgYS5yZWZyZXNoKCk7XG4gICAgICAgIH0sICEwKSwgbChcImNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyXCIsICExLCBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgcmV0dXJuIG9pKGEpO1xuICAgICAgICB9LCAhMCksIGwoXCJzY3JvbGxiYXJTdHlsZVwiLCBcIm5hdGl2ZVwiLCBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgUHUoYSksIG9pKGEpLCBhLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxUb3AoYS5kb2Muc2Nyb2xsVG9wKSwgYS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdChhLmRvYy5zY3JvbGxMZWZ0KTtcbiAgICAgICAgfSwgITApLCBsKFwibGluZU51bWJlcnNcIiwgITEsIGZ1bmN0aW9uKGEsIHUpIHtcbiAgICAgICAgICBhLmRpc3BsYXkuZ3V0dGVyU3BlY3MgPSBobChhLm9wdGlvbnMuZ3V0dGVycywgdSksIFdpKGEpO1xuICAgICAgICB9LCAhMCksIGwoXCJmaXJzdExpbmVOdW1iZXJcIiwgMSwgV2ksICEwKSwgbChcImxpbmVOdW1iZXJGb3JtYXR0ZXJcIiwgZnVuY3Rpb24oYSkge1xuICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9LCBXaSwgITApLCBsKFwic2hvd0N1cnNvcldoZW5TZWxlY3RpbmdcIiwgITEsICRpLCAhMCksIGwoXCJyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnVcIiwgITApLCBsKFwibGluZVdpc2VDb3B5Q3V0XCIsICEwKSwgbChcInBhc3RlTGluZXNQZXJTZWxlY3Rpb25cIiwgITApLCBsKFwic2VsZWN0aW9uc01heVRvdWNoXCIsICExKSwgbChcInJlYWRPbmx5XCIsICExLCBmdW5jdGlvbihhLCB1KSB7XG4gICAgICAgICAgdSA9PSBcIm5vY3Vyc29yXCIgJiYgKHJpKGEpLCBhLmRpc3BsYXkuaW5wdXQuYmx1cigpKSwgYS5kaXNwbGF5LmlucHV0LnJlYWRPbmx5Q2hhbmdlZCh1KTtcbiAgICAgICAgfSksIGwoXCJzY3JlZW5SZWFkZXJMYWJlbFwiLCBudWxsLCBmdW5jdGlvbihhLCB1KSB7XG4gICAgICAgICAgdSA9IHUgPT09IFwiXCIgPyBudWxsIDogdSwgYS5kaXNwbGF5LmlucHV0LnNjcmVlblJlYWRlckxhYmVsQ2hhbmdlZCh1KTtcbiAgICAgICAgfSksIGwoXCJkaXNhYmxlSW5wdXRcIiwgITEsIGZ1bmN0aW9uKGEsIHUpIHtcbiAgICAgICAgICB1IHx8IGEuZGlzcGxheS5pbnB1dC5yZXNldCgpO1xuICAgICAgICB9LCAhMCksIGwoXCJkcmFnRHJvcFwiLCAhMCwgYWgpLCBsKFwiYWxsb3dEcm9wRmlsZVR5cGVzXCIsIG51bGwpLCBsKFwiY3Vyc29yQmxpbmtSYXRlXCIsIDUzMCksIGwoXCJjdXJzb3JTY3JvbGxNYXJnaW5cIiwgMCksIGwoXCJjdXJzb3JIZWlnaHRcIiwgMSwgJGksICEwKSwgbChcInNpbmdsZUN1cnNvckhlaWdodFBlckxpbmVcIiwgITAsICRpLCAhMCksIGwoXCJ3b3JrVGltZVwiLCAxMDApLCBsKFwid29ya0RlbGF5XCIsIDEwMCksIGwoXCJmbGF0dGVuU3BhbnNcIiwgITAsIEdpLCAhMCksIGwoXCJhZGRNb2RlQ2xhc3NcIiwgITEsIEdpLCAhMCksIGwoXCJwb2xsSW50ZXJ2YWxcIiwgMTAwKSwgbChcInVuZG9EZXB0aFwiLCAyMDAsIGZ1bmN0aW9uKGEsIHUpIHtcbiAgICAgICAgICByZXR1cm4gYS5kb2MuaGlzdG9yeS51bmRvRGVwdGggPSB1O1xuICAgICAgICB9KSwgbChcImhpc3RvcnlFdmVudERlbGF5XCIsIDEyNTApLCBsKFwidmlld3BvcnRNYXJnaW5cIiwgMTAsIGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICByZXR1cm4gYS5yZWZyZXNoKCk7XG4gICAgICAgIH0sICEwKSwgbChcIm1heEhpZ2hsaWdodExlbmd0aFwiLCAxZTQsIEdpLCAhMCksIGwoXCJtb3ZlSW5wdXRXaXRoQ3Vyc29yXCIsICEwLCBmdW5jdGlvbihhLCB1KSB7XG4gICAgICAgICAgdSB8fCBhLmRpc3BsYXkuaW5wdXQucmVzZXRQb3NpdGlvbigpO1xuICAgICAgICB9KSwgbChcInRhYmluZGV4XCIsIG51bGwsIGZ1bmN0aW9uKGEsIHUpIHtcbiAgICAgICAgICByZXR1cm4gYS5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCkudGFiSW5kZXggPSB1IHx8IFwiXCI7XG4gICAgICAgIH0pLCBsKFwiYXV0b2ZvY3VzXCIsIG51bGwpLCBsKFwiZGlyZWN0aW9uXCIsIFwibHRyXCIsIGZ1bmN0aW9uKGEsIHUpIHtcbiAgICAgICAgICByZXR1cm4gYS5kb2Muc2V0RGlyZWN0aW9uKHUpO1xuICAgICAgICB9LCAhMCksIGwoXCJwaHJhc2VzXCIsIG51bGwpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gYWgoZSwgbiwgbCkge1xuICAgICAgICB2YXIgYSA9IGwgJiYgbCAhPSBwaTtcbiAgICAgICAgaWYgKCFuICE9ICFhKSB7XG4gICAgICAgICAgdmFyIHUgPSBlLmRpc3BsYXkuZHJhZ0Z1bmN0aW9ucywgZyA9IG4gPyBuZSA6IE9lO1xuICAgICAgICAgIGcoZS5kaXNwbGF5LnNjcm9sbGVyLCBcImRyYWdzdGFydFwiLCB1LnN0YXJ0KSwgZyhlLmRpc3BsYXkuc2Nyb2xsZXIsIFwiZHJhZ2VudGVyXCIsIHUuZW50ZXIpLCBnKGUuZGlzcGxheS5zY3JvbGxlciwgXCJkcmFnb3ZlclwiLCB1Lm92ZXIpLCBnKGUuZGlzcGxheS5zY3JvbGxlciwgXCJkcmFnbGVhdmVcIiwgdS5sZWF2ZSksIGcoZS5kaXNwbGF5LnNjcm9sbGVyLCBcImRyb3BcIiwgdS5kcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbGgoZSkge1xuICAgICAgICBlLm9wdGlvbnMubGluZVdyYXBwaW5nID8gKEooZS5kaXNwbGF5LndyYXBwZXIsIFwiQ29kZU1pcnJvci13cmFwXCIpLCBlLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGggPSBcIlwiLCBlLmRpc3BsYXkuc2l6ZXJXaWR0aCA9IG51bGwpIDogKE4oZS5kaXNwbGF5LndyYXBwZXIsIFwiQ29kZU1pcnJvci13cmFwXCIpLCBRYShlKSksIHJsKGUpLCB0bihlKSwgSGkoZSksIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIG9pKGUpO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gQXQoZSwgbikge1xuICAgICAgICB2YXIgbCA9IHRoaXM7XG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBBdCkpXG4gICAgICAgICAgcmV0dXJuIG5ldyBBdChlLCBuKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gbiA9IG4gPyBsZShuKSA6IHt9LCBsZShPZiwgbiwgITEpO1xuICAgICAgICB2YXIgYSA9IG4udmFsdWU7XG4gICAgICAgIHR5cGVvZiBhID09IFwic3RyaW5nXCIgPyBhID0gbmV3IG5uKGEsIG4ubW9kZSwgbnVsbCwgbi5saW5lU2VwYXJhdG9yLCBuLmRpcmVjdGlvbikgOiBuLm1vZGUgJiYgKGEubW9kZU9wdGlvbiA9IG4ubW9kZSksIHRoaXMuZG9jID0gYTtcbiAgICAgICAgdmFyIHUgPSBuZXcgQXQuaW5wdXRTdHlsZXNbbi5pbnB1dFN0eWxlXSh0aGlzKSwgZyA9IHRoaXMuZGlzcGxheSA9IG5ldyBicChlLCBhLCB1LCBuKTtcbiAgICAgICAgZy53cmFwcGVyLkNvZGVNaXJyb3IgPSB0aGlzLCBOZih0aGlzKSwgbi5saW5lV3JhcHBpbmcgJiYgKHRoaXMuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSArPSBcIiBDb2RlTWlycm9yLXdyYXBcIiksIFB1KHRoaXMpLCB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgIGtleU1hcHM6IFtdLFxuICAgICAgICAgIG92ZXJsYXlzOiBbXSxcbiAgICAgICAgICBtb2RlR2VuOiAwLFxuICAgICAgICAgIG92ZXJ3cml0ZTogITEsXG4gICAgICAgICAgZGVsYXlpbmdCbHVyRXZlbnQ6ICExLFxuICAgICAgICAgIGZvY3VzZWQ6ICExLFxuICAgICAgICAgIHN1cHByZXNzRWRpdHM6ICExLFxuICAgICAgICAgIHBhc3RlSW5jb21pbmc6IC0xLFxuICAgICAgICAgIGN1dEluY29taW5nOiAtMSxcbiAgICAgICAgICBzZWxlY3RpbmdUZXh0OiAhMSxcbiAgICAgICAgICBkcmFnZ2luZ1RleHQ6ICExLFxuICAgICAgICAgIGhpZ2hsaWdodDogbmV3IHBlKCksXG4gICAgICAgICAga2V5U2VxOiBudWxsLFxuICAgICAgICAgIHNwZWNpYWxDaGFyczogbnVsbFxuICAgICAgICB9LCBuLmF1dG9mb2N1cyAmJiAhQyAmJiBnLmlucHV0LmZvY3VzKCksIHAgJiYgdiA8IDExICYmIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGwuZGlzcGxheS5pbnB1dC5yZXNldCghMCk7XG4gICAgICAgIH0sIDIwKSwgc2godGhpcyksIGtwKCksIGtyKHRoaXMpLCB0aGlzLmN1ck9wLmZvcmNlVXBkYXRlID0gITAsIFZ1KHRoaXMsIGEpLCBuLmF1dG9mb2N1cyAmJiAhQyB8fCB0aGlzLmhhc0ZvY3VzKCkgPyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGwuaGFzRm9jdXMoKSAmJiAhbC5zdGF0ZS5mb2N1c2VkICYmIGxsKGwpO1xuICAgICAgICB9LCAyMCkgOiByaSh0aGlzKTtcbiAgICAgICAgZm9yICh2YXIgTyBpbiByYSlcbiAgICAgICAgICByYS5oYXNPd25Qcm9wZXJ0eShPKSAmJiByYVtPXSh0aGlzLCBuW09dLCBwaSk7XG4gICAgICAgIEJ1KHRoaXMpLCBuLmZpbmlzaEluaXQgJiYgbi5maW5pc2hJbml0KHRoaXMpO1xuICAgICAgICBmb3IgKHZhciBMID0gMDsgTCA8IERsLmxlbmd0aDsgKytMKVxuICAgICAgICAgIERsW0xdKHRoaXMpO1xuICAgICAgICBqcih0aGlzKSwgYiAmJiBuLmxpbmVXcmFwcGluZyAmJiBnZXRDb21wdXRlZFN0eWxlKGcubGluZURpdikudGV4dFJlbmRlcmluZyA9PSBcIm9wdGltaXplbGVnaWJpbGl0eVwiICYmIChnLmxpbmVEaXYuc3R5bGUudGV4dFJlbmRlcmluZyA9IFwiYXV0b1wiKTtcbiAgICAgIH1cbiAgICAgIEF0LmRlZmF1bHRzID0gT2YsIEF0Lm9wdGlvbkhhbmRsZXJzID0gcmE7XG4gICAgICBmdW5jdGlvbiBzaChlKSB7XG4gICAgICAgIHZhciBuID0gZS5kaXNwbGF5O1xuICAgICAgICBuZShuLnNjcm9sbGVyLCBcIm1vdXNlZG93blwiLCAkdChlLCBEZikpLCBwICYmIHYgPCAxMSA/IG5lKG4uc2Nyb2xsZXIsIFwiZGJsY2xpY2tcIiwgJHQoZSwgZnVuY3Rpb24oSCkge1xuICAgICAgICAgIGlmICghUWUoZSwgSCkpIHtcbiAgICAgICAgICAgIHZhciBVID0gTHIoZSwgSCk7XG4gICAgICAgICAgICBpZiAoISghVSB8fCBUbChlLCBIKSB8fCBucihlLmRpc3BsYXksIEgpKSkge1xuICAgICAgICAgICAgICBsdChIKTtcbiAgICAgICAgICAgICAgdmFyIEcgPSBlLmZpbmRXb3JkQXQoVSk7XG4gICAgICAgICAgICAgIEpvKGUuZG9jLCBHLmFuY2hvciwgRy5oZWFkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pKSA6IG5lKG4uc2Nyb2xsZXIsIFwiZGJsY2xpY2tcIiwgZnVuY3Rpb24oSCkge1xuICAgICAgICAgIHJldHVybiBRZShlLCBIKSB8fCBsdChIKTtcbiAgICAgICAgfSksIG5lKG4uc2Nyb2xsZXIsIFwiY29udGV4dG1lbnVcIiwgZnVuY3Rpb24oSCkge1xuICAgICAgICAgIHJldHVybiBJZihlLCBIKTtcbiAgICAgICAgfSksIG5lKG4uaW5wdXQuZ2V0RmllbGQoKSwgXCJjb250ZXh0bWVudVwiLCBmdW5jdGlvbihIKSB7XG4gICAgICAgICAgbi5zY3JvbGxlci5jb250YWlucyhILnRhcmdldCkgfHwgSWYoZSwgSCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgbCwgYSA9IHsgZW5kOiAwIH07XG4gICAgICAgIGZ1bmN0aW9uIHUoKSB7XG4gICAgICAgICAgbi5hY3RpdmVUb3VjaCAmJiAobCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gbi5hY3RpdmVUb3VjaCA9IG51bGw7XG4gICAgICAgICAgfSwgMWUzKSwgYSA9IG4uYWN0aXZlVG91Y2gsIGEuZW5kID0gK25ldyBEYXRlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGcoSCkge1xuICAgICAgICAgIGlmIChILnRvdWNoZXMubGVuZ3RoICE9IDEpXG4gICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgdmFyIFUgPSBILnRvdWNoZXNbMF07XG4gICAgICAgICAgcmV0dXJuIFUucmFkaXVzWCA8PSAxICYmIFUucmFkaXVzWSA8PSAxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIE8oSCwgVSkge1xuICAgICAgICAgIGlmIChVLmxlZnQgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICB2YXIgRyA9IFUubGVmdCAtIEgubGVmdCwgWSA9IFUudG9wIC0gSC50b3A7XG4gICAgICAgICAgcmV0dXJuIEcgKiBHICsgWSAqIFkgPiAyMCAqIDIwO1xuICAgICAgICB9XG4gICAgICAgIG5lKG4uc2Nyb2xsZXIsIFwidG91Y2hzdGFydFwiLCBmdW5jdGlvbihIKSB7XG4gICAgICAgICAgaWYgKCFRZShlLCBIKSAmJiAhZyhIKSAmJiAhVGwoZSwgSCkpIHtcbiAgICAgICAgICAgIG4uaW5wdXQuZW5zdXJlUG9sbGVkKCksIGNsZWFyVGltZW91dChsKTtcbiAgICAgICAgICAgIHZhciBVID0gK25ldyBEYXRlKCk7XG4gICAgICAgICAgICBuLmFjdGl2ZVRvdWNoID0ge1xuICAgICAgICAgICAgICBzdGFydDogVSxcbiAgICAgICAgICAgICAgbW92ZWQ6ICExLFxuICAgICAgICAgICAgICBwcmV2OiBVIC0gYS5lbmQgPD0gMzAwID8gYSA6IG51bGxcbiAgICAgICAgICAgIH0sIEgudG91Y2hlcy5sZW5ndGggPT0gMSAmJiAobi5hY3RpdmVUb3VjaC5sZWZ0ID0gSC50b3VjaGVzWzBdLnBhZ2VYLCBuLmFjdGl2ZVRvdWNoLnRvcCA9IEgudG91Y2hlc1swXS5wYWdlWSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSwgbmUobi5zY3JvbGxlciwgXCJ0b3VjaG1vdmVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbi5hY3RpdmVUb3VjaCAmJiAobi5hY3RpdmVUb3VjaC5tb3ZlZCA9ICEwKTtcbiAgICAgICAgfSksIG5lKG4uc2Nyb2xsZXIsIFwidG91Y2hlbmRcIiwgZnVuY3Rpb24oSCkge1xuICAgICAgICAgIHZhciBVID0gbi5hY3RpdmVUb3VjaDtcbiAgICAgICAgICBpZiAoVSAmJiAhbnIobiwgSCkgJiYgVS5sZWZ0ICE9IG51bGwgJiYgIVUubW92ZWQgJiYgbmV3IERhdGUoKSAtIFUuc3RhcnQgPCAzMDApIHtcbiAgICAgICAgICAgIHZhciBHID0gZS5jb29yZHNDaGFyKG4uYWN0aXZlVG91Y2gsIFwicGFnZVwiKSwgWTtcbiAgICAgICAgICAgICFVLnByZXYgfHwgTyhVLCBVLnByZXYpID8gWSA9IG5ldyB1dChHLCBHKSA6ICFVLnByZXYucHJldiB8fCBPKFUsIFUucHJldi5wcmV2KSA/IFkgPSBlLmZpbmRXb3JkQXQoRykgOiBZID0gbmV3IHV0KHEoRy5saW5lLCAwKSwgVmUoZS5kb2MsIHEoRy5saW5lICsgMSwgMCkpKSwgZS5zZXRTZWxlY3Rpb24oWS5hbmNob3IsIFkuaGVhZCksIGUuZm9jdXMoKSwgbHQoSCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHUoKTtcbiAgICAgICAgfSksIG5lKG4uc2Nyb2xsZXIsIFwidG91Y2hjYW5jZWxcIiwgdSksIG5lKG4uc2Nyb2xsZXIsIFwic2Nyb2xsXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG4uc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICYmIChqaShlLCBuLnNjcm9sbGVyLnNjcm9sbFRvcCksIEhyKGUsIG4uc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgITApLCBQZShlLCBcInNjcm9sbFwiLCBlKSk7XG4gICAgICAgIH0pLCBuZShuLnNjcm9sbGVyLCBcIm1vdXNld2hlZWxcIiwgZnVuY3Rpb24oSCkge1xuICAgICAgICAgIHJldHVybiBrdShlLCBIKTtcbiAgICAgICAgfSksIG5lKG4uc2Nyb2xsZXIsIFwiRE9NTW91c2VTY3JvbGxcIiwgZnVuY3Rpb24oSCkge1xuICAgICAgICAgIHJldHVybiBrdShlLCBIKTtcbiAgICAgICAgfSksIG5lKG4ud3JhcHBlciwgXCJzY3JvbGxcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIG4ud3JhcHBlci5zY3JvbGxUb3AgPSBuLndyYXBwZXIuc2Nyb2xsTGVmdCA9IDA7XG4gICAgICAgIH0pLCBuLmRyYWdGdW5jdGlvbnMgPSB7XG4gICAgICAgICAgZW50ZXI6IGZ1bmN0aW9uKEgpIHtcbiAgICAgICAgICAgIFFlKGUsIEgpIHx8IEluKEgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb3ZlcjogZnVuY3Rpb24oSCkge1xuICAgICAgICAgICAgUWUoZSwgSCkgfHwgKCRwKGUsIEgpLCBJbihIKSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGFydDogZnVuY3Rpb24oSCkge1xuICAgICAgICAgICAgcmV0dXJuIEhwKGUsIEgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZHJvcDogJHQoZSwgQnApLFxuICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbihIKSB7XG4gICAgICAgICAgICBRZShlLCBIKSB8fCBoZihlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBMID0gbi5pbnB1dC5nZXRGaWVsZCgpO1xuICAgICAgICBuZShMLCBcImtleXVwXCIsIGZ1bmN0aW9uKEgpIHtcbiAgICAgICAgICByZXR1cm4gd2YuY2FsbChlLCBIKTtcbiAgICAgICAgfSksIG5lKEwsIFwia2V5ZG93blwiLCAkdChlLCB4ZikpLCBuZShMLCBcImtleXByZXNzXCIsICR0KGUsIFRmKSksIG5lKEwsIFwiZm9jdXNcIiwgZnVuY3Rpb24oSCkge1xuICAgICAgICAgIHJldHVybiBsbChlLCBIKTtcbiAgICAgICAgfSksIG5lKEwsIFwiYmx1clwiLCBmdW5jdGlvbihIKSB7XG4gICAgICAgICAgcmV0dXJuIHJpKGUsIEgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHZhciBEbCA9IFtdO1xuICAgICAgQXQuZGVmaW5lSW5pdEhvb2sgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHJldHVybiBEbC5wdXNoKGUpO1xuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIGlvKGUsIG4sIGwsIGEpIHtcbiAgICAgICAgdmFyIHUgPSBlLmRvYywgZztcbiAgICAgICAgbCA9PSBudWxsICYmIChsID0gXCJhZGRcIiksIGwgPT0gXCJzbWFydFwiICYmICh1Lm1vZGUuaW5kZW50ID8gZyA9IE9pKGUsIG4pLnN0YXRlIDogbCA9IFwicHJldlwiKTtcbiAgICAgICAgdmFyIE8gPSBlLm9wdGlvbnMudGFiU2l6ZSwgTCA9IEZlKHUsIG4pLCBIID0gaWUoTC50ZXh0LCBudWxsLCBPKTtcbiAgICAgICAgTC5zdGF0ZUFmdGVyICYmIChMLnN0YXRlQWZ0ZXIgPSBudWxsKTtcbiAgICAgICAgdmFyIFUgPSBMLnRleHQubWF0Y2goL15cXHMqLylbMF0sIEc7XG4gICAgICAgIGlmICghYSAmJiAhL1xcUy8udGVzdChMLnRleHQpKVxuICAgICAgICAgIEcgPSAwLCBsID0gXCJub3RcIjtcbiAgICAgICAgZWxzZSBpZiAobCA9PSBcInNtYXJ0XCIgJiYgKEcgPSB1Lm1vZGUuaW5kZW50KGcsIEwudGV4dC5zbGljZShVLmxlbmd0aCksIEwudGV4dCksIEcgPT0gQWUgfHwgRyA+IDE1MCkpIHtcbiAgICAgICAgICBpZiAoIWEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgbCA9IFwicHJldlwiO1xuICAgICAgICB9XG4gICAgICAgIGwgPT0gXCJwcmV2XCIgPyBuID4gdS5maXJzdCA/IEcgPSBpZShGZSh1LCBuIC0gMSkudGV4dCwgbnVsbCwgTykgOiBHID0gMCA6IGwgPT0gXCJhZGRcIiA/IEcgPSBIICsgZS5vcHRpb25zLmluZGVudFVuaXQgOiBsID09IFwic3VidHJhY3RcIiA/IEcgPSBIIC0gZS5vcHRpb25zLmluZGVudFVuaXQgOiB0eXBlb2YgbCA9PSBcIm51bWJlclwiICYmIChHID0gSCArIGwpLCBHID0gTWF0aC5tYXgoMCwgRyk7XG4gICAgICAgIHZhciBZID0gXCJcIiwgZWUgPSAwO1xuICAgICAgICBpZiAoZS5vcHRpb25zLmluZGVudFdpdGhUYWJzKVxuICAgICAgICAgIGZvciAodmFyIF8gPSBNYXRoLmZsb29yKEcgLyBPKTsgXzsgLS1fKVxuICAgICAgICAgICAgZWUgKz0gTywgWSArPSBcIlx0XCI7XG4gICAgICAgIGlmIChlZSA8IEcgJiYgKFkgKz0geXQoRyAtIGVlKSksIFkgIT0gVSlcbiAgICAgICAgICByZXR1cm4gdWkodSwgWSwgcShuLCAwKSwgcShuLCBVLmxlbmd0aCksIFwiK2lucHV0XCIpLCBMLnN0YXRlQWZ0ZXIgPSBudWxsLCAhMDtcbiAgICAgICAgZm9yICh2YXIgYWUgPSAwOyBhZSA8IHUuc2VsLnJhbmdlcy5sZW5ndGg7IGFlKyspIHtcbiAgICAgICAgICB2YXIgY2UgPSB1LnNlbC5yYW5nZXNbYWVdO1xuICAgICAgICAgIGlmIChjZS5oZWFkLmxpbmUgPT0gbiAmJiBjZS5oZWFkLmNoIDwgVS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciB5ZSA9IHEobiwgVS5sZW5ndGgpO1xuICAgICAgICAgICAgYmwodSwgYWUsIG5ldyB1dCh5ZSwgeWUpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIExuID0gbnVsbDtcbiAgICAgIGZ1bmN0aW9uIGlhKGUpIHtcbiAgICAgICAgTG4gPSBlO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gUmwoZSwgbiwgbCwgYSwgdSkge1xuICAgICAgICB2YXIgZyA9IGUuZG9jO1xuICAgICAgICBlLmRpc3BsYXkuc2hpZnQgPSAhMSwgYSB8fCAoYSA9IGcuc2VsKTtcbiAgICAgICAgdmFyIE8gPSArbmV3IERhdGUoKSAtIDIwMCwgTCA9IHUgPT0gXCJwYXN0ZVwiIHx8IGUuc3RhdGUucGFzdGVJbmNvbWluZyA+IE8sIEggPSBJaShuKSwgVSA9IG51bGw7XG4gICAgICAgIGlmIChMICYmIGEucmFuZ2VzLmxlbmd0aCA+IDEpXG4gICAgICAgICAgaWYgKExuICYmIExuLnRleHQuam9pbihgXG5gKSA9PSBuKSB7XG4gICAgICAgICAgICBpZiAoYS5yYW5nZXMubGVuZ3RoICUgTG4udGV4dC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICBVID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIEcgPSAwOyBHIDwgTG4udGV4dC5sZW5ndGg7IEcrKylcbiAgICAgICAgICAgICAgICBVLnB1c2goZy5zcGxpdExpbmVzKExuLnRleHRbR10pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIEgubGVuZ3RoID09IGEucmFuZ2VzLmxlbmd0aCAmJiBlLm9wdGlvbnMucGFzdGVMaW5lc1BlclNlbGVjdGlvbiAmJiAoVSA9IHB0KEgsIGZ1bmN0aW9uKENlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbQ2VdO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICBmb3IgKHZhciBZID0gZS5jdXJPcC51cGRhdGVJbnB1dCwgZWUgPSBhLnJhbmdlcy5sZW5ndGggLSAxOyBlZSA+PSAwOyBlZS0tKSB7XG4gICAgICAgICAgdmFyIF8gPSBhLnJhbmdlc1tlZV0sIGFlID0gXy5mcm9tKCksIGNlID0gXy50bygpO1xuICAgICAgICAgIF8uZW1wdHkoKSAmJiAobCAmJiBsID4gMCA/IGFlID0gcShhZS5saW5lLCBhZS5jaCAtIGwpIDogZS5zdGF0ZS5vdmVyd3JpdGUgJiYgIUwgPyBjZSA9IHEoY2UubGluZSwgTWF0aC5taW4oRmUoZywgY2UubGluZSkudGV4dC5sZW5ndGgsIGNlLmNoICsgQmUoSCkubGVuZ3RoKSkgOiBMICYmIExuICYmIExuLmxpbmVXaXNlICYmIExuLnRleHQuam9pbihgXG5gKSA9PSBILmpvaW4oYFxuYCkgJiYgKGFlID0gY2UgPSBxKGFlLmxpbmUsIDApKSk7XG4gICAgICAgICAgdmFyIHllID0ge1xuICAgICAgICAgICAgZnJvbTogYWUsXG4gICAgICAgICAgICB0bzogY2UsXG4gICAgICAgICAgICB0ZXh0OiBVID8gVVtlZSAlIFUubGVuZ3RoXSA6IEgsXG4gICAgICAgICAgICBvcmlnaW46IHUgfHwgKEwgPyBcInBhc3RlXCIgOiBlLnN0YXRlLmN1dEluY29taW5nID4gTyA/IFwiY3V0XCIgOiBcIitpbnB1dFwiKVxuICAgICAgICAgIH07XG4gICAgICAgICAgc2koZS5kb2MsIHllKSwgSHQoZSwgXCJpbnB1dFJlYWRcIiwgZSwgeWUpO1xuICAgICAgICB9XG4gICAgICAgIG4gJiYgIUwgJiYgRmYoZSwgbiksIGlpKGUpLCBlLmN1ck9wLnVwZGF0ZUlucHV0IDwgMiAmJiAoZS5jdXJPcC51cGRhdGVJbnB1dCA9IFkpLCBlLmN1ck9wLnR5cGluZyA9ICEwLCBlLnN0YXRlLnBhc3RlSW5jb21pbmcgPSBlLnN0YXRlLmN1dEluY29taW5nID0gLTE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBQZihlLCBuKSB7XG4gICAgICAgIHZhciBsID0gZS5jbGlwYm9hcmREYXRhICYmIGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwiVGV4dFwiKTtcbiAgICAgICAgaWYgKGwpXG4gICAgICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSwgIW4uaXNSZWFkT25seSgpICYmICFuLm9wdGlvbnMuZGlzYWJsZUlucHV0ICYmIG4uaGFzRm9jdXMoKSAmJiBkbihuLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBSbChuLCBsLCAwLCBudWxsLCBcInBhc3RlXCIpO1xuICAgICAgICAgIH0pLCAhMDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEZmKGUsIG4pIHtcbiAgICAgICAgaWYgKCEoIWUub3B0aW9ucy5lbGVjdHJpY0NoYXJzIHx8ICFlLm9wdGlvbnMuc21hcnRJbmRlbnQpKVxuICAgICAgICAgIGZvciAodmFyIGwgPSBlLmRvYy5zZWwsIGEgPSBsLnJhbmdlcy5sZW5ndGggLSAxOyBhID49IDA7IGEtLSkge1xuICAgICAgICAgICAgdmFyIHUgPSBsLnJhbmdlc1thXTtcbiAgICAgICAgICAgIGlmICghKHUuaGVhZC5jaCA+IDEwMCB8fCBhICYmIGwucmFuZ2VzW2EgLSAxXS5oZWFkLmxpbmUgPT0gdS5oZWFkLmxpbmUpKSB7XG4gICAgICAgICAgICAgIHZhciBnID0gZS5nZXRNb2RlQXQodS5oZWFkKSwgTyA9ICExO1xuICAgICAgICAgICAgICBpZiAoZy5lbGVjdHJpY0NoYXJzKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgTCA9IDA7IEwgPCBnLmVsZWN0cmljQ2hhcnMubGVuZ3RoOyBMKyspXG4gICAgICAgICAgICAgICAgICBpZiAobi5pbmRleE9mKGcuZWxlY3RyaWNDaGFycy5jaGFyQXQoTCkpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgTyA9IGlvKGUsIHUuaGVhZC5saW5lLCBcInNtYXJ0XCIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgZy5lbGVjdHJpY0lucHV0ICYmIGcuZWxlY3RyaWNJbnB1dC50ZXN0KEZlKGUuZG9jLCB1LmhlYWQubGluZSkudGV4dC5zbGljZSgwLCB1LmhlYWQuY2gpKSAmJiAoTyA9IGlvKGUsIHUuaGVhZC5saW5lLCBcInNtYXJ0XCIpKTtcbiAgICAgICAgICAgICAgTyAmJiBIdChlLCBcImVsZWN0cmljSW5wdXRcIiwgZSwgdS5oZWFkLmxpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIExmKGUpIHtcbiAgICAgICAgZm9yICh2YXIgbiA9IFtdLCBsID0gW10sIGEgPSAwOyBhIDwgZS5kb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGErKykge1xuICAgICAgICAgIHZhciB1ID0gZS5kb2Muc2VsLnJhbmdlc1thXS5oZWFkLmxpbmUsIGcgPSB7IGFuY2hvcjogcSh1LCAwKSwgaGVhZDogcSh1ICsgMSwgMCkgfTtcbiAgICAgICAgICBsLnB1c2goZyksIG4ucHVzaChlLmdldFJhbmdlKGcuYW5jaG9yLCBnLmhlYWQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB0ZXh0OiBuLCByYW5nZXM6IGwgfTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEJmKGUsIG4sIGwsIGEpIHtcbiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoXCJhdXRvY29ycmVjdFwiLCBsID8gXCJcIiA6IFwib2ZmXCIpLCBlLnNldEF0dHJpYnV0ZShcImF1dG9jYXBpdGFsaXplXCIsIGEgPyBcIlwiIDogXCJvZmZcIiksIGUuc2V0QXR0cmlidXRlKFwic3BlbGxjaGVja1wiLCAhIW4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gSGYoKSB7XG4gICAgICAgIHZhciBlID0gSShcInRleHRhcmVhXCIsIG51bGwsIG51bGwsIFwicG9zaXRpb246IGFic29sdXRlOyBib3R0b206IC0xZW07IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtOyBtaW4taGVpZ2h0OiAxZW07IG91dGxpbmU6IG5vbmVcIiksIG4gPSBJKFwiZGl2XCIsIFtlXSwgbnVsbCwgXCJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4O1wiKTtcbiAgICAgICAgcmV0dXJuIGIgPyBlLnN0eWxlLndpZHRoID0gXCIxMDAwcHhcIiA6IGUuc2V0QXR0cmlidXRlKFwid3JhcFwiLCBcIm9mZlwiKSwgQSAmJiAoZS5zdHlsZS5ib3JkZXIgPSBcIjFweCBzb2xpZCBibGFja1wiKSwgQmYoZSksIG47XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1aChlKSB7XG4gICAgICAgIHZhciBuID0gZS5vcHRpb25IYW5kbGVycywgbCA9IGUuaGVscGVycyA9IHt9O1xuICAgICAgICBlLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICBjb25zdHJ1Y3RvcjogZSxcbiAgICAgICAgICBmb2N1czogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBzZSh0aGlzKS5mb2N1cygpLCB0aGlzLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldE9wdGlvbjogZnVuY3Rpb24oYSwgdSkge1xuICAgICAgICAgICAgdmFyIGcgPSB0aGlzLm9wdGlvbnMsIE8gPSBnW2FdO1xuICAgICAgICAgICAgZ1thXSA9PSB1ICYmIGEgIT0gXCJtb2RlXCIgfHwgKGdbYV0gPSB1LCBuLmhhc093blByb3BlcnR5KGEpICYmICR0KHRoaXMsIG5bYV0pKHRoaXMsIHUsIE8pLCBQZSh0aGlzLCBcIm9wdGlvbkNoYW5nZVwiLCB0aGlzLCBhKSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXRPcHRpb246IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNbYV07XG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXREb2M6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYWRkS2V5TWFwOiBmdW5jdGlvbihhLCB1KSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlLmtleU1hcHNbdSA/IFwicHVzaFwiIDogXCJ1bnNoaWZ0XCJdKHRhKGEpKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlbW92ZUtleU1hcDogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgZm9yICh2YXIgdSA9IHRoaXMuc3RhdGUua2V5TWFwcywgZyA9IDA7IGcgPCB1Lmxlbmd0aDsgKytnKVxuICAgICAgICAgICAgICBpZiAodVtnXSA9PSBhIHx8IHVbZ10ubmFtZSA9PSBhKVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnNwbGljZShnLCAxKSwgITA7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBhZGRPdmVybGF5OiBKdChmdW5jdGlvbihhLCB1KSB7XG4gICAgICAgICAgICB2YXIgZyA9IGEudG9rZW4gPyBhIDogZS5nZXRNb2RlKHRoaXMub3B0aW9ucywgYSk7XG4gICAgICAgICAgICBpZiAoZy5zdGFydFN0YXRlKVxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPdmVybGF5cyBtYXkgbm90IGJlIHN0YXRlZnVsLlwiKTtcbiAgICAgICAgICAgIHNuKFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLm92ZXJsYXlzLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbW9kZTogZyxcbiAgICAgICAgICAgICAgICBtb2RlU3BlYzogYSxcbiAgICAgICAgICAgICAgICBvcGFxdWU6IHUgJiYgdS5vcGFxdWUsXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk6IHUgJiYgdS5wcmlvcml0eSB8fCAwXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uKE8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTy5wcmlvcml0eTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSwgdGhpcy5zdGF0ZS5tb2RlR2VuKyssIHRuKHRoaXMpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJlbW92ZU92ZXJsYXk6IEp0KGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHUgPSB0aGlzLnN0YXRlLm92ZXJsYXlzLCBnID0gMDsgZyA8IHUubGVuZ3RoOyArK2cpIHtcbiAgICAgICAgICAgICAgdmFyIE8gPSB1W2ddLm1vZGVTcGVjO1xuICAgICAgICAgICAgICBpZiAoTyA9PSBhIHx8IHR5cGVvZiBhID09IFwic3RyaW5nXCIgJiYgTy5uYW1lID09IGEpIHtcbiAgICAgICAgICAgICAgICB1LnNwbGljZShnLCAxKSwgdGhpcy5zdGF0ZS5tb2RlR2VuKyssIHRuKHRoaXMpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGluZGVudExpbmU6IEp0KGZ1bmN0aW9uKGEsIHUsIGcpIHtcbiAgICAgICAgICAgIHR5cGVvZiB1ICE9IFwic3RyaW5nXCIgJiYgdHlwZW9mIHUgIT0gXCJudW1iZXJcIiAmJiAodSA9PSBudWxsID8gdSA9IHRoaXMub3B0aW9ucy5zbWFydEluZGVudCA/IFwic21hcnRcIiA6IFwicHJldlwiIDogdSA9IHUgPyBcImFkZFwiIDogXCJzdWJ0cmFjdFwiKSwgeih0aGlzLmRvYywgYSkgJiYgaW8odGhpcywgYSwgdSwgZyk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgaW5kZW50U2VsZWN0aW9uOiBKdChmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciB1ID0gdGhpcy5kb2Muc2VsLnJhbmdlcywgZyA9IC0xLCBPID0gMDsgTyA8IHUubGVuZ3RoOyBPKyspIHtcbiAgICAgICAgICAgICAgdmFyIEwgPSB1W09dO1xuICAgICAgICAgICAgICBpZiAoTC5lbXB0eSgpKVxuICAgICAgICAgICAgICAgIEwuaGVhZC5saW5lID4gZyAmJiAoaW8odGhpcywgTC5oZWFkLmxpbmUsIGEsICEwKSwgZyA9IEwuaGVhZC5saW5lLCBPID09IHRoaXMuZG9jLnNlbC5wcmltSW5kZXggJiYgaWkodGhpcykpO1xuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgSCA9IEwuZnJvbSgpLCBVID0gTC50bygpLCBHID0gTWF0aC5tYXgoZywgSC5saW5lKTtcbiAgICAgICAgICAgICAgICBnID0gTWF0aC5taW4odGhpcy5sYXN0TGluZSgpLCBVLmxpbmUgLSAoVS5jaCA/IDAgOiAxKSkgKyAxO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIFkgPSBHOyBZIDwgZzsgKytZKVxuICAgICAgICAgICAgICAgICAgaW8odGhpcywgWSwgYSk7XG4gICAgICAgICAgICAgICAgdmFyIGVlID0gdGhpcy5kb2Muc2VsLnJhbmdlcztcbiAgICAgICAgICAgICAgICBILmNoID09IDAgJiYgdS5sZW5ndGggPT0gZWUubGVuZ3RoICYmIGVlW09dLmZyb20oKS5jaCA+IDAgJiYgYmwodGhpcy5kb2MsIE8sIG5ldyB1dChILCBlZVtPXS50bygpKSwgTWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZ2V0VG9rZW5BdDogZnVuY3Rpb24oYSwgdSkge1xuICAgICAgICAgICAgcmV0dXJuIEdzKHRoaXMsIGEsIHUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0TGluZVRva2VuczogZnVuY3Rpb24oYSwgdSkge1xuICAgICAgICAgICAgcmV0dXJuIEdzKHRoaXMsIHEoYSksIHUsICEwKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldFRva2VuVHlwZUF0OiBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICBhID0gVmUodGhpcy5kb2MsIGEpO1xuICAgICAgICAgICAgdmFyIHUgPSB6cyh0aGlzLCBGZSh0aGlzLmRvYywgYS5saW5lKSksIGcgPSAwLCBPID0gKHUubGVuZ3RoIC0gMSkgLyAyLCBMID0gYS5jaCwgSDtcbiAgICAgICAgICAgIGlmIChMID09IDApXG4gICAgICAgICAgICAgIEggPSB1WzJdO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBmb3IgKDsgOyApIHtcbiAgICAgICAgICAgICAgICB2YXIgVSA9IGcgKyBPID4+IDE7XG4gICAgICAgICAgICAgICAgaWYgKChVID8gdVtVICogMiAtIDFdIDogMCkgPj0gTClcbiAgICAgICAgICAgICAgICAgIE8gPSBVO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVbVSAqIDIgKyAxXSA8IEwpXG4gICAgICAgICAgICAgICAgICBnID0gVSArIDE7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICBIID0gdVtVICogMiArIDJdO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgRyA9IEggPyBILmluZGV4T2YoXCJvdmVybGF5IFwiKSA6IC0xO1xuICAgICAgICAgICAgcmV0dXJuIEcgPCAwID8gSCA6IEcgPT0gMCA/IG51bGwgOiBILnNsaWNlKDAsIEcgLSAxKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldE1vZGVBdDogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgdmFyIHUgPSB0aGlzLmRvYy5tb2RlO1xuICAgICAgICAgICAgcmV0dXJuIHUuaW5uZXJNb2RlID8gZS5pbm5lck1vZGUodSwgdGhpcy5nZXRUb2tlbkF0KGEpLnN0YXRlKS5tb2RlIDogdTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldEhlbHBlcjogZnVuY3Rpb24oYSwgdSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SGVscGVycyhhLCB1KVswXTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldEhlbHBlcnM6IGZ1bmN0aW9uKGEsIHUpIHtcbiAgICAgICAgICAgIHZhciBnID0gW107XG4gICAgICAgICAgICBpZiAoIWwuaGFzT3duUHJvcGVydHkodSkpXG4gICAgICAgICAgICAgIHJldHVybiBnO1xuICAgICAgICAgICAgdmFyIE8gPSBsW3VdLCBMID0gdGhpcy5nZXRNb2RlQXQoYSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIExbdV0gPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgT1tMW3VdXSAmJiBnLnB1c2goT1tMW3VdXSk7XG4gICAgICAgICAgICBlbHNlIGlmIChMW3VdKVxuICAgICAgICAgICAgICBmb3IgKHZhciBIID0gMDsgSCA8IExbdV0ubGVuZ3RoOyBIKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgVSA9IE9bTFt1XVtIXV07XG4gICAgICAgICAgICAgICAgVSAmJiBnLnB1c2goVSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgTC5oZWxwZXJUeXBlICYmIE9bTC5oZWxwZXJUeXBlXSA/IGcucHVzaChPW0wuaGVscGVyVHlwZV0pIDogT1tMLm5hbWVdICYmIGcucHVzaChPW0wubmFtZV0pO1xuICAgICAgICAgICAgZm9yICh2YXIgRyA9IDA7IEcgPCBPLl9nbG9iYWwubGVuZ3RoOyBHKyspIHtcbiAgICAgICAgICAgICAgdmFyIFkgPSBPLl9nbG9iYWxbR107XG4gICAgICAgICAgICAgIFkucHJlZChMLCB0aGlzKSAmJiB0ZShnLCBZLnZhbCkgPT0gLTEgJiYgZy5wdXNoKFkudmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0U3RhdGVBZnRlcjogZnVuY3Rpb24oYSwgdSkge1xuICAgICAgICAgICAgdmFyIGcgPSB0aGlzLmRvYztcbiAgICAgICAgICAgIHJldHVybiBhID0geW4oZywgYSA9PSBudWxsID8gZy5maXJzdCArIGcuc2l6ZSAtIDEgOiBhKSwgT2kodGhpcywgYSArIDEsIHUpLnN0YXRlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY3Vyc29yQ29vcmRzOiBmdW5jdGlvbihhLCB1KSB7XG4gICAgICAgICAgICB2YXIgZywgTyA9IHRoaXMuZG9jLnNlbC5wcmltYXJ5KCk7XG4gICAgICAgICAgICByZXR1cm4gYSA9PSBudWxsID8gZyA9IE8uaGVhZCA6IHR5cGVvZiBhID09IFwib2JqZWN0XCIgPyBnID0gVmUodGhpcy5kb2MsIGEpIDogZyA9IGEgPyBPLmZyb20oKSA6IE8udG8oKSwgUG4odGhpcywgZywgdSB8fCBcInBhZ2VcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGFyQ29vcmRzOiBmdW5jdGlvbihhLCB1KSB7XG4gICAgICAgICAgICByZXR1cm4gam8odGhpcywgVmUodGhpcy5kb2MsIGEpLCB1IHx8IFwicGFnZVwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvb3Jkc0NoYXI6IGZ1bmN0aW9uKGEsIHUpIHtcbiAgICAgICAgICAgIHJldHVybiBhID0gYnUodGhpcywgYSwgdSB8fCBcInBhZ2VcIiksIF9hKHRoaXMsIGEubGVmdCwgYS50b3ApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbGluZUF0SGVpZ2h0OiBmdW5jdGlvbihhLCB1KSB7XG4gICAgICAgICAgICByZXR1cm4gYSA9IGJ1KHRoaXMsIHsgdG9wOiBhLCBsZWZ0OiAwIH0sIHUgfHwgXCJwYWdlXCIpLnRvcCwgem4odGhpcy5kb2MsIGEgKyB0aGlzLmRpc3BsYXkudmlld09mZnNldCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBoZWlnaHRBdExpbmU6IGZ1bmN0aW9uKGEsIHUsIGcpIHtcbiAgICAgICAgICAgIHZhciBPID0gITEsIEw7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGEgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICB2YXIgSCA9IHRoaXMuZG9jLmZpcnN0ICsgdGhpcy5kb2Muc2l6ZSAtIDE7XG4gICAgICAgICAgICAgIGEgPCB0aGlzLmRvYy5maXJzdCA/IGEgPSB0aGlzLmRvYy5maXJzdCA6IGEgPiBIICYmIChhID0gSCwgTyA9ICEwKSwgTCA9IEZlKHRoaXMuZG9jLCBhKTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICBMID0gYTtcbiAgICAgICAgICAgIHJldHVybiBrbyh0aGlzLCBMLCB7IHRvcDogMCwgbGVmdDogMCB9LCB1IHx8IFwicGFnZVwiLCBnIHx8IE8pLnRvcCArIChPID8gdGhpcy5kb2MuaGVpZ2h0IC0gdHIoTCkgOiAwKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlZmF1bHRUZXh0SGVpZ2h0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aSh0aGlzLmRpc3BsYXkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVmYXVsdENoYXJXaWR0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gbmkodGhpcy5kaXNwbGF5KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldFZpZXdwb3J0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGZyb206IHRoaXMuZGlzcGxheS52aWV3RnJvbSwgdG86IHRoaXMuZGlzcGxheS52aWV3VG8gfTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFkZFdpZGdldDogZnVuY3Rpb24oYSwgdSwgZywgTywgTCkge1xuICAgICAgICAgICAgdmFyIEggPSB0aGlzLmRpc3BsYXk7XG4gICAgICAgICAgICBhID0gUG4odGhpcywgVmUodGhpcy5kb2MsIGEpKTtcbiAgICAgICAgICAgIHZhciBVID0gYS5ib3R0b20sIEcgPSBhLmxlZnQ7XG4gICAgICAgICAgICBpZiAodS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIiwgdS5zZXRBdHRyaWJ1dGUoXCJjbS1pZ25vcmUtZXZlbnRzXCIsIFwidHJ1ZVwiKSwgdGhpcy5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUodSksIEguc2l6ZXIuYXBwZW5kQ2hpbGQodSksIE8gPT0gXCJvdmVyXCIpXG4gICAgICAgICAgICAgIFUgPSBhLnRvcDtcbiAgICAgICAgICAgIGVsc2UgaWYgKE8gPT0gXCJhYm92ZVwiIHx8IE8gPT0gXCJuZWFyXCIpIHtcbiAgICAgICAgICAgICAgdmFyIFkgPSBNYXRoLm1heChILndyYXBwZXIuY2xpZW50SGVpZ2h0LCB0aGlzLmRvYy5oZWlnaHQpLCBlZSA9IE1hdGgubWF4KEguc2l6ZXIuY2xpZW50V2lkdGgsIEgubGluZVNwYWNlLmNsaWVudFdpZHRoKTtcbiAgICAgICAgICAgICAgKE8gPT0gXCJhYm92ZVwiIHx8IGEuYm90dG9tICsgdS5vZmZzZXRIZWlnaHQgPiBZKSAmJiBhLnRvcCA+IHUub2Zmc2V0SGVpZ2h0ID8gVSA9IGEudG9wIC0gdS5vZmZzZXRIZWlnaHQgOiBhLmJvdHRvbSArIHUub2Zmc2V0SGVpZ2h0IDw9IFkgJiYgKFUgPSBhLmJvdHRvbSksIEcgKyB1Lm9mZnNldFdpZHRoID4gZWUgJiYgKEcgPSBlZSAtIHUub2Zmc2V0V2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdS5zdHlsZS50b3AgPSBVICsgXCJweFwiLCB1LnN0eWxlLmxlZnQgPSB1LnN0eWxlLnJpZ2h0ID0gXCJcIiwgTCA9PSBcInJpZ2h0XCIgPyAoRyA9IEguc2l6ZXIuY2xpZW50V2lkdGggLSB1Lm9mZnNldFdpZHRoLCB1LnN0eWxlLnJpZ2h0ID0gXCIwcHhcIikgOiAoTCA9PSBcImxlZnRcIiA/IEcgPSAwIDogTCA9PSBcIm1pZGRsZVwiICYmIChHID0gKEguc2l6ZXIuY2xpZW50V2lkdGggLSB1Lm9mZnNldFdpZHRoKSAvIDIpLCB1LnN0eWxlLmxlZnQgPSBHICsgXCJweFwiKSwgZyAmJiBhcCh0aGlzLCB7IGxlZnQ6IEcsIHRvcDogVSwgcmlnaHQ6IEcgKyB1Lm9mZnNldFdpZHRoLCBib3R0b206IFUgKyB1Lm9mZnNldEhlaWdodCB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRyaWdnZXJPbktleURvd246IEp0KHhmKSxcbiAgICAgICAgICB0cmlnZ2VyT25LZXlQcmVzczogSnQoVGYpLFxuICAgICAgICAgIHRyaWdnZXJPbktleVVwOiB3ZixcbiAgICAgICAgICB0cmlnZ2VyT25Nb3VzZURvd246IEp0KERmKSxcbiAgICAgICAgICBleGVjQ29tbWFuZDogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgaWYgKGVvLmhhc093blByb3BlcnR5KGEpKVxuICAgICAgICAgICAgICByZXR1cm4gZW9bYV0uY2FsbChudWxsLCB0aGlzKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRyaWdnZXJFbGVjdHJpYzogSnQoZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgRmYodGhpcywgYSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZmluZFBvc0g6IGZ1bmN0aW9uKGEsIHUsIGcsIE8pIHtcbiAgICAgICAgICAgIHZhciBMID0gMTtcbiAgICAgICAgICAgIHUgPCAwICYmIChMID0gLTEsIHUgPSAtdSk7XG4gICAgICAgICAgICBmb3IgKHZhciBIID0gVmUodGhpcy5kb2MsIGEpLCBVID0gMDsgVSA8IHUgJiYgKEggPSBNbCh0aGlzLmRvYywgSCwgTCwgZywgTyksICFILmhpdFNpZGUpOyArK1UpXG4gICAgICAgICAgICAgIDtcbiAgICAgICAgICAgIHJldHVybiBIO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbW92ZUg6IEp0KGZ1bmN0aW9uKGEsIHUpIHtcbiAgICAgICAgICAgIHZhciBnID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKE8pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGcuZGlzcGxheS5zaGlmdCB8fCBnLmRvYy5leHRlbmQgfHwgTy5lbXB0eSgpID8gTWwoZy5kb2MsIE8uaGVhZCwgYSwgdSwgZy5vcHRpb25zLnJ0bE1vdmVWaXN1YWxseSkgOiBhIDwgMCA/IE8uZnJvbSgpIDogTy50bygpO1xuICAgICAgICAgICAgfSwgbnQpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGRlbGV0ZUg6IEp0KGZ1bmN0aW9uKGEsIHUpIHtcbiAgICAgICAgICAgIHZhciBnID0gdGhpcy5kb2Muc2VsLCBPID0gdGhpcy5kb2M7XG4gICAgICAgICAgICBnLnNvbWV0aGluZ1NlbGVjdGVkKCkgPyBPLnJlcGxhY2VTZWxlY3Rpb24oXCJcIiwgbnVsbCwgXCIrZGVsZXRlXCIpIDogY2kodGhpcywgZnVuY3Rpb24oTCkge1xuICAgICAgICAgICAgICB2YXIgSCA9IE1sKE8sIEwuaGVhZCwgYSwgdSwgITEpO1xuICAgICAgICAgICAgICByZXR1cm4gYSA8IDAgPyB7IGZyb206IEgsIHRvOiBMLmhlYWQgfSA6IHsgZnJvbTogTC5oZWFkLCB0bzogSCB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZmluZFBvc1Y6IGZ1bmN0aW9uKGEsIHUsIGcsIE8pIHtcbiAgICAgICAgICAgIHZhciBMID0gMSwgSCA9IE87XG4gICAgICAgICAgICB1IDwgMCAmJiAoTCA9IC0xLCB1ID0gLXUpO1xuICAgICAgICAgICAgZm9yICh2YXIgVSA9IFZlKHRoaXMuZG9jLCBhKSwgRyA9IDA7IEcgPCB1OyArK0cpIHtcbiAgICAgICAgICAgICAgdmFyIFkgPSBQbih0aGlzLCBVLCBcImRpdlwiKTtcbiAgICAgICAgICAgICAgaWYgKEggPT0gbnVsbCA/IEggPSBZLmxlZnQgOiBZLmxlZnQgPSBILCBVID0gJGYodGhpcywgWSwgTCwgZyksIFUuaGl0U2lkZSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBVO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbW92ZVY6IEp0KGZ1bmN0aW9uKGEsIHUpIHtcbiAgICAgICAgICAgIHZhciBnID0gdGhpcywgTyA9IHRoaXMuZG9jLCBMID0gW10sIEggPSAhdGhpcy5kaXNwbGF5LnNoaWZ0ICYmICFPLmV4dGVuZCAmJiBPLnNlbC5zb21ldGhpbmdTZWxlY3RlZCgpO1xuICAgICAgICAgICAgaWYgKE8uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKEcpIHtcbiAgICAgICAgICAgICAgaWYgKEgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPCAwID8gRy5mcm9tKCkgOiBHLnRvKCk7XG4gICAgICAgICAgICAgIHZhciBZID0gUG4oZywgRy5oZWFkLCBcImRpdlwiKTtcbiAgICAgICAgICAgICAgRy5nb2FsQ29sdW1uICE9IG51bGwgJiYgKFkubGVmdCA9IEcuZ29hbENvbHVtbiksIEwucHVzaChZLmxlZnQpO1xuICAgICAgICAgICAgICB2YXIgZWUgPSAkZihnLCBZLCBhLCB1KTtcbiAgICAgICAgICAgICAgcmV0dXJuIHUgPT0gXCJwYWdlXCIgJiYgRyA9PSBPLnNlbC5wcmltYXJ5KCkgJiYgdWwoZywgam8oZywgZWUsIFwiZGl2XCIpLnRvcCAtIFkudG9wKSwgZWU7XG4gICAgICAgICAgICB9LCBudCksIEwubGVuZ3RoKVxuICAgICAgICAgICAgICBmb3IgKHZhciBVID0gMDsgVSA8IE8uc2VsLnJhbmdlcy5sZW5ndGg7IFUrKylcbiAgICAgICAgICAgICAgICBPLnNlbC5yYW5nZXNbVV0uZ29hbENvbHVtbiA9IExbVV07XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZmluZFdvcmRBdDogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgdmFyIHUgPSB0aGlzLmRvYywgZyA9IEZlKHUsIGEubGluZSkudGV4dCwgTyA9IGEuY2gsIEwgPSBhLmNoO1xuICAgICAgICAgICAgaWYgKGcpIHtcbiAgICAgICAgICAgICAgdmFyIEggPSB0aGlzLmdldEhlbHBlcihhLCBcIndvcmRDaGFyc1wiKTtcbiAgICAgICAgICAgICAgKGEuc3RpY2t5ID09IFwiYmVmb3JlXCIgfHwgTCA9PSBnLmxlbmd0aCkgJiYgTyA/IC0tTyA6ICsrTDtcbiAgICAgICAgICAgICAgZm9yICh2YXIgVSA9IGcuY2hhckF0KE8pLCBHID0gbW4oVSwgSCkgPyBmdW5jdGlvbihZKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1uKFksIEgpO1xuICAgICAgICAgICAgICB9IDogL1xccy8udGVzdChVKSA/IGZ1bmN0aW9uKFkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gL1xccy8udGVzdChZKTtcbiAgICAgICAgICAgICAgfSA6IGZ1bmN0aW9uKFkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIS9cXHMvLnRlc3QoWSkgJiYgIW1uKFkpO1xuICAgICAgICAgICAgICB9OyBPID4gMCAmJiBHKGcuY2hhckF0KE8gLSAxKSk7IClcbiAgICAgICAgICAgICAgICAtLU87XG4gICAgICAgICAgICAgIGZvciAoOyBMIDwgZy5sZW5ndGggJiYgRyhnLmNoYXJBdChMKSk7IClcbiAgICAgICAgICAgICAgICArK0w7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IHV0KHEoYS5saW5lLCBPKSwgcShhLmxpbmUsIEwpKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgYSAhPSBudWxsICYmIGEgPT0gdGhpcy5zdGF0ZS5vdmVyd3JpdGUgfHwgKCh0aGlzLnN0YXRlLm92ZXJ3cml0ZSA9ICF0aGlzLnN0YXRlLm92ZXJ3cml0ZSkgPyBKKHRoaXMuZGlzcGxheS5jdXJzb3JEaXYsIFwiQ29kZU1pcnJvci1vdmVyd3JpdGVcIikgOiBOKHRoaXMuZGlzcGxheS5jdXJzb3JEaXYsIFwiQ29kZU1pcnJvci1vdmVyd3JpdGVcIiksIFBlKHRoaXMsIFwib3ZlcndyaXRlVG9nZ2xlXCIsIHRoaXMsIHRoaXMuc3RhdGUub3ZlcndyaXRlKSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBoYXNGb2N1czogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCkgPT0gWCh2ZSh0aGlzKSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpc1JlYWRPbmx5OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhISh0aGlzLm9wdGlvbnMucmVhZE9ubHkgfHwgdGhpcy5kb2MuY2FudEVkaXQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2Nyb2xsVG86IEp0KGZ1bmN0aW9uKGEsIHUpIHtcbiAgICAgICAgICAgIGtpKHRoaXMsIGEsIHUpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGdldFNjcm9sbEluZm86IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGEgPSB0aGlzLmRpc3BsYXkuc2Nyb2xsZXI7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBsZWZ0OiBhLnNjcm9sbExlZnQsXG4gICAgICAgICAgICAgIHRvcDogYS5zY3JvbGxUb3AsXG4gICAgICAgICAgICAgIGhlaWdodDogYS5zY3JvbGxIZWlnaHQgLSBXbih0aGlzKSAtIHRoaXMuZGlzcGxheS5iYXJIZWlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoOiBhLnNjcm9sbFdpZHRoIC0gV24odGhpcykgLSB0aGlzLmRpc3BsYXkuYmFyV2lkdGgsXG4gICAgICAgICAgICAgIGNsaWVudEhlaWdodDogWGEodGhpcyksXG4gICAgICAgICAgICAgIGNsaWVudFdpZHRoOiBQcih0aGlzKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNjcm9sbEludG9WaWV3OiBKdChmdW5jdGlvbihhLCB1KSB7XG4gICAgICAgICAgICBhID09IG51bGwgPyAoYSA9IHsgZnJvbTogdGhpcy5kb2Muc2VsLnByaW1hcnkoKS5oZWFkLCB0bzogbnVsbCB9LCB1ID09IG51bGwgJiYgKHUgPSB0aGlzLm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFyZ2luKSkgOiB0eXBlb2YgYSA9PSBcIm51bWJlclwiID8gYSA9IHsgZnJvbTogcShhLCAwKSwgdG86IG51bGwgfSA6IGEuZnJvbSA9PSBudWxsICYmIChhID0geyBmcm9tOiBhLCB0bzogbnVsbCB9KSwgYS50byB8fCAoYS50byA9IGEuZnJvbSksIGEubWFyZ2luID0gdSB8fCAwLCBhLmZyb20ubGluZSAhPSBudWxsID8gbHAodGhpcywgYSkgOiBNdSh0aGlzLCBhLmZyb20sIGEudG8sIGEubWFyZ2luKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzZXRTaXplOiBKdChmdW5jdGlvbihhLCB1KSB7XG4gICAgICAgICAgICB2YXIgZyA9IHRoaXMsIE8gPSBmdW5jdGlvbihIKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgSCA9PSBcIm51bWJlclwiIHx8IC9eXFxkKyQvLnRlc3QoU3RyaW5nKEgpKSA/IEggKyBcInB4XCIgOiBIO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGEgIT0gbnVsbCAmJiAodGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUud2lkdGggPSBPKGEpKSwgdSAhPSBudWxsICYmICh0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS5oZWlnaHQgPSBPKHUpKSwgdGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZyAmJiBndSh0aGlzKTtcbiAgICAgICAgICAgIHZhciBMID0gdGhpcy5kaXNwbGF5LnZpZXdGcm9tO1xuICAgICAgICAgICAgdGhpcy5kb2MuaXRlcihMLCB0aGlzLmRpc3BsYXkudmlld1RvLCBmdW5jdGlvbihIKSB7XG4gICAgICAgICAgICAgIGlmIChILndpZGdldHMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBVID0gMDsgVSA8IEgud2lkZ2V0cy5sZW5ndGg7IFUrKylcbiAgICAgICAgICAgICAgICAgIGlmIChILndpZGdldHNbVV0ubm9IU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgICAgIHlyKGcsIEwsIFwid2lkZ2V0XCIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICArK0w7XG4gICAgICAgICAgICB9KSwgdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZSA9ICEwLCBQZSh0aGlzLCBcInJlZnJlc2hcIiwgdGhpcyk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgb3BlcmF0aW9uOiBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICByZXR1cm4gZG4odGhpcywgYSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGFydE9wZXJhdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4ga3IodGhpcyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbmRPcGVyYXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGpyKHRoaXMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVmcmVzaDogSnQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgYSA9IHRoaXMuZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0O1xuICAgICAgICAgICAgdG4odGhpcyksIHRoaXMuY3VyT3AuZm9yY2VVcGRhdGUgPSAhMCwgSGkodGhpcyksIGtpKHRoaXMsIHRoaXMuZG9jLnNjcm9sbExlZnQsIHRoaXMuZG9jLnNjcm9sbFRvcCksIGNsKHRoaXMuZGlzcGxheSksIChhID09IG51bGwgfHwgTWF0aC5hYnMoYSAtIHRpKHRoaXMuZGlzcGxheSkpID4gMC41IHx8IHRoaXMub3B0aW9ucy5saW5lV3JhcHBpbmcpICYmIHJsKHRoaXMpLCBQZSh0aGlzLCBcInJlZnJlc2hcIiwgdGhpcyk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3dhcERvYzogSnQoZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgdmFyIHUgPSB0aGlzLmRvYztcbiAgICAgICAgICAgIHJldHVybiB1LmNtID0gbnVsbCwgdGhpcy5zdGF0ZS5zZWxlY3RpbmdUZXh0ICYmIHRoaXMuc3RhdGUuc2VsZWN0aW5nVGV4dCgpLCBWdSh0aGlzLCBhKSwgSGkodGhpcyksIHRoaXMuZGlzcGxheS5pbnB1dC5yZXNldCgpLCBraSh0aGlzLCBhLnNjcm9sbExlZnQsIGEuc2Nyb2xsVG9wKSwgdGhpcy5jdXJPcC5mb3JjZVNjcm9sbCA9ICEwLCBIdCh0aGlzLCBcInN3YXBEb2NcIiwgdGhpcywgdSksIHU7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcGhyYXNlOiBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICB2YXIgdSA9IHRoaXMub3B0aW9ucy5waHJhc2VzO1xuICAgICAgICAgICAgcmV0dXJuIHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHUsIGEpID8gdVthXSA6IGE7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXRJbnB1dEZpZWxkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldFdyYXBwZXJFbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXkud3JhcHBlcjtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldFNjcm9sbGVyRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5LnNjcm9sbGVyO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0R3V0dGVyRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5Lmd1dHRlcnM7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBtdChlKSwgZS5yZWdpc3RlckhlbHBlciA9IGZ1bmN0aW9uKGEsIHUsIGcpIHtcbiAgICAgICAgICBsLmhhc093blByb3BlcnR5KGEpIHx8IChsW2FdID0gZVthXSA9IHsgX2dsb2JhbDogW10gfSksIGxbYV1bdV0gPSBnO1xuICAgICAgICB9LCBlLnJlZ2lzdGVyR2xvYmFsSGVscGVyID0gZnVuY3Rpb24oYSwgdSwgZywgTykge1xuICAgICAgICAgIGUucmVnaXN0ZXJIZWxwZXIoYSwgdSwgTyksIGxbYV0uX2dsb2JhbC5wdXNoKHsgcHJlZDogZywgdmFsOiBPIH0pO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gTWwoZSwgbiwgbCwgYSwgdSkge1xuICAgICAgICB2YXIgZyA9IG4sIE8gPSBsLCBMID0gRmUoZSwgbi5saW5lKSwgSCA9IHUgJiYgZS5kaXJlY3Rpb24gPT0gXCJydGxcIiA/IC1sIDogbDtcbiAgICAgICAgZnVuY3Rpb24gVSgpIHtcbiAgICAgICAgICB2YXIgVGUgPSBuLmxpbmUgKyBIO1xuICAgICAgICAgIHJldHVybiBUZSA8IGUuZmlyc3QgfHwgVGUgPj0gZS5maXJzdCArIGUuc2l6ZSA/ICExIDogKG4gPSBuZXcgcShUZSwgbi5jaCwgbi5zdGlja3kpLCBMID0gRmUoZSwgVGUpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBHKFRlKSB7XG4gICAgICAgICAgdmFyIEVlO1xuICAgICAgICAgIGlmIChhID09IFwiY29kZXBvaW50XCIpIHtcbiAgICAgICAgICAgIHZhciBOZSA9IEwudGV4dC5jaGFyQ29kZUF0KG4uY2ggKyAobCA+IDAgPyAwIDogLTEpKTtcbiAgICAgICAgICAgIGlmIChpc05hTihOZSkpXG4gICAgICAgICAgICAgIEVlID0gbnVsbDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2YXIga2UgPSBsID4gMCA/IE5lID49IDU1Mjk2ICYmIE5lIDwgNTYzMjAgOiBOZSA+PSA1NjMyMCAmJiBOZSA8IDU3MzQzO1xuICAgICAgICAgICAgICBFZSA9IG5ldyBxKG4ubGluZSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oTC50ZXh0Lmxlbmd0aCwgbi5jaCArIGwgKiAoa2UgPyAyIDogMSkpKSwgLWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgdSA/IEVlID0gV3AoZS5jbSwgTCwgbiwgbCkgOiBFZSA9IEVsKEwsIG4sIGwpO1xuICAgICAgICAgIGlmIChFZSA9PSBudWxsKVxuICAgICAgICAgICAgaWYgKCFUZSAmJiBVKCkpXG4gICAgICAgICAgICAgIG4gPSBTbCh1LCBlLmNtLCBMLCBuLmxpbmUsIEgpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbiA9IEVlO1xuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYSA9PSBcImNoYXJcIiB8fCBhID09IFwiY29kZXBvaW50XCIpXG4gICAgICAgICAgRygpO1xuICAgICAgICBlbHNlIGlmIChhID09IFwiY29sdW1uXCIpXG4gICAgICAgICAgRyghMCk7XG4gICAgICAgIGVsc2UgaWYgKGEgPT0gXCJ3b3JkXCIgfHwgYSA9PSBcImdyb3VwXCIpXG4gICAgICAgICAgZm9yICh2YXIgWSA9IG51bGwsIGVlID0gYSA9PSBcImdyb3VwXCIsIF8gPSBlLmNtICYmIGUuY20uZ2V0SGVscGVyKG4sIFwid29yZENoYXJzXCIpLCBhZSA9ICEwOyAhKGwgPCAwICYmICFHKCFhZSkpOyBhZSA9ICExKSB7XG4gICAgICAgICAgICB2YXIgY2UgPSBMLnRleHQuY2hhckF0KG4uY2gpIHx8IGBcbmAsIHllID0gbW4oY2UsIF8pID8gXCJ3XCIgOiBlZSAmJiBjZSA9PSBgXG5gID8gXCJuXCIgOiAhZWUgfHwgL1xccy8udGVzdChjZSkgPyBudWxsIDogXCJwXCI7XG4gICAgICAgICAgICBpZiAoZWUgJiYgIWFlICYmICF5ZSAmJiAoeWUgPSBcInNcIiksIFkgJiYgWSAhPSB5ZSkge1xuICAgICAgICAgICAgICBsIDwgMCAmJiAobCA9IDEsIEcoKSwgbi5zdGlja3kgPSBcImFmdGVyXCIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh5ZSAmJiAoWSA9IHllKSwgbCA+IDAgJiYgIUcoIWFlKSlcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB2YXIgQ2UgPSBxbyhlLCBuLCBnLCBPLCAhMCk7XG4gICAgICAgIHJldHVybiB6ZShnLCBDZSkgJiYgKENlLmhpdFNpZGUgPSAhMCksIENlO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gJGYoZSwgbiwgbCwgYSkge1xuICAgICAgICB2YXIgdSA9IGUuZG9jLCBnID0gbi5sZWZ0LCBPO1xuICAgICAgICBpZiAoYSA9PSBcInBhZ2VcIikge1xuICAgICAgICAgIHZhciBMID0gTWF0aC5taW4oZS5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LCBzZShlKS5pbm5lckhlaWdodCB8fCB1KGUpLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpLCBIID0gTWF0aC5tYXgoTCAtIDAuNSAqIHRpKGUuZGlzcGxheSksIDMpO1xuICAgICAgICAgIE8gPSAobCA+IDAgPyBuLmJvdHRvbSA6IG4udG9wKSArIGwgKiBIO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBhID09IFwibGluZVwiICYmIChPID0gbCA+IDAgPyBuLmJvdHRvbSArIDMgOiBuLnRvcCAtIDMpO1xuICAgICAgICBmb3IgKHZhciBVOyBVID0gX2EoZSwgZywgTyksICEhVS5vdXRzaWRlOyApIHtcbiAgICAgICAgICBpZiAobCA8IDAgPyBPIDw9IDAgOiBPID49IHUuaGVpZ2h0KSB7XG4gICAgICAgICAgICBVLmhpdFNpZGUgPSAhMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBPICs9IGwgKiA1O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBVO1xuICAgICAgfVxuICAgICAgdmFyIGN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB0aGlzLmNtID0gZSwgdGhpcy5sYXN0QW5jaG9yTm9kZSA9IHRoaXMubGFzdEFuY2hvck9mZnNldCA9IHRoaXMubGFzdEZvY3VzTm9kZSA9IHRoaXMubGFzdEZvY3VzT2Zmc2V0ID0gbnVsbCwgdGhpcy5wb2xsaW5nID0gbmV3IHBlKCksIHRoaXMuY29tcG9zaW5nID0gbnVsbCwgdGhpcy5ncmFjZVBlcmlvZCA9ICExLCB0aGlzLnJlYWRET01UaW1lb3V0ID0gbnVsbDtcbiAgICAgIH07XG4gICAgICBjdC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLCBsID0gdGhpcywgYSA9IGwuY20sIHUgPSBsLmRpdiA9IGUubGluZURpdjtcbiAgICAgICAgdS5jb250ZW50RWRpdGFibGUgPSAhMCwgQmYodSwgYS5vcHRpb25zLnNwZWxsY2hlY2ssIGEub3B0aW9ucy5hdXRvY29ycmVjdCwgYS5vcHRpb25zLmF1dG9jYXBpdGFsaXplKTtcbiAgICAgICAgZnVuY3Rpb24gZyhMKSB7XG4gICAgICAgICAgZm9yICh2YXIgSCA9IEwudGFyZ2V0OyBIOyBIID0gSC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBpZiAoSCA9PSB1KVxuICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICBpZiAoL1xcYkNvZGVNaXJyb3ItKD86bGluZSk/d2lkZ2V0XFxiLy50ZXN0KEguY2xhc3NOYW1lKSlcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgfVxuICAgICAgICBuZSh1LCBcInBhc3RlXCIsIGZ1bmN0aW9uKEwpIHtcbiAgICAgICAgICAhZyhMKSB8fCBRZShhLCBMKSB8fCBQZihMLCBhKSB8fCB2IDw9IDExICYmIHNldFRpbWVvdXQoJHQoYSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gbi51cGRhdGVGcm9tRE9NKCk7XG4gICAgICAgICAgfSksIDIwKTtcbiAgICAgICAgfSksIG5lKHUsIFwiY29tcG9zaXRpb25zdGFydFwiLCBmdW5jdGlvbihMKSB7XG4gICAgICAgICAgbi5jb21wb3NpbmcgPSB7IGRhdGE6IEwuZGF0YSwgZG9uZTogITEgfTtcbiAgICAgICAgfSksIG5lKHUsIFwiY29tcG9zaXRpb251cGRhdGVcIiwgZnVuY3Rpb24oTCkge1xuICAgICAgICAgIG4uY29tcG9zaW5nIHx8IChuLmNvbXBvc2luZyA9IHsgZGF0YTogTC5kYXRhLCBkb25lOiAhMSB9KTtcbiAgICAgICAgfSksIG5lKHUsIFwiY29tcG9zaXRpb25lbmRcIiwgZnVuY3Rpb24oTCkge1xuICAgICAgICAgIG4uY29tcG9zaW5nICYmIChMLmRhdGEgIT0gbi5jb21wb3NpbmcuZGF0YSAmJiBuLnJlYWRGcm9tRE9NU29vbigpLCBuLmNvbXBvc2luZy5kb25lID0gITApO1xuICAgICAgICB9KSwgbmUodSwgXCJ0b3VjaHN0YXJ0XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBsLmZvcmNlQ29tcG9zaXRpb25FbmQoKTtcbiAgICAgICAgfSksIG5lKHUsIFwiaW5wdXRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbi5jb21wb3NpbmcgfHwgbi5yZWFkRnJvbURPTVNvb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIE8oTCkge1xuICAgICAgICAgIGlmICghKCFnKEwpIHx8IFFlKGEsIEwpKSkge1xuICAgICAgICAgICAgaWYgKGEuc29tZXRoaW5nU2VsZWN0ZWQoKSlcbiAgICAgICAgICAgICAgaWEoeyBsaW5lV2lzZTogITEsIHRleHQ6IGEuZ2V0U2VsZWN0aW9ucygpIH0pLCBMLnR5cGUgPT0gXCJjdXRcIiAmJiBhLnJlcGxhY2VTZWxlY3Rpb24oXCJcIiwgbnVsbCwgXCJjdXRcIik7XG4gICAgICAgICAgICBlbHNlIGlmIChhLm9wdGlvbnMubGluZVdpc2VDb3B5Q3V0KSB7XG4gICAgICAgICAgICAgIHZhciBIID0gTGYoYSk7XG4gICAgICAgICAgICAgIGlhKHsgbGluZVdpc2U6ICEwLCB0ZXh0OiBILnRleHQgfSksIEwudHlwZSA9PSBcImN1dFwiICYmIGEub3BlcmF0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGEuc2V0U2VsZWN0aW9ucyhILnJhbmdlcywgMCwgTWUpLCBhLnJlcGxhY2VTZWxlY3Rpb24oXCJcIiwgbnVsbCwgXCJjdXRcIik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmIChMLmNsaXBib2FyZERhdGEpIHtcbiAgICAgICAgICAgICAgTC5jbGlwYm9hcmREYXRhLmNsZWFyRGF0YSgpO1xuICAgICAgICAgICAgICB2YXIgVSA9IExuLnRleHQuam9pbihgXG5gKTtcbiAgICAgICAgICAgICAgaWYgKEwuY2xpcGJvYXJkRGF0YS5zZXREYXRhKFwiVGV4dFwiLCBVKSwgTC5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJUZXh0XCIpID09IFUpIHtcbiAgICAgICAgICAgICAgICBMLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgRyA9IEhmKCksIFkgPSBHLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBhLmRpc3BsYXkubGluZVNwYWNlLmluc2VydEJlZm9yZShHLCBhLmRpc3BsYXkubGluZVNwYWNlLmZpcnN0Q2hpbGQpLCBZLnZhbHVlID0gTG4udGV4dC5qb2luKGBcbmApO1xuICAgICAgICAgICAgdmFyIGVlID0gWCh1Lm93bmVyRG9jdW1lbnQpO1xuICAgICAgICAgICAgZGUoWSksIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGEuZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoRyksIGVlLmZvY3VzKCksIGVlID09IHUgJiYgbC5zaG93UHJpbWFyeVNlbGVjdGlvbigpO1xuICAgICAgICAgICAgfSwgNTApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZSh1LCBcImNvcHlcIiwgTyksIG5lKHUsIFwiY3V0XCIsIE8pO1xuICAgICAgfSwgY3QucHJvdG90eXBlLnNjcmVlblJlYWRlckxhYmVsQ2hhbmdlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZSA/IHRoaXMuZGl2LnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgZSkgOiB0aGlzLmRpdi5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIpO1xuICAgICAgfSwgY3QucHJvdG90eXBlLnByZXBhcmVTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGUgPSBUdSh0aGlzLmNtLCAhMSk7XG4gICAgICAgIHJldHVybiBlLmZvY3VzID0gWCh0aGlzLmRpdi5vd25lckRvY3VtZW50KSA9PSB0aGlzLmRpdiwgZTtcbiAgICAgIH0sIGN0LnByb3RvdHlwZS5zaG93U2VsZWN0aW9uID0gZnVuY3Rpb24oZSwgbikge1xuICAgICAgICAhZSB8fCAhdGhpcy5jbS5kaXNwbGF5LnZpZXcubGVuZ3RoIHx8ICgoZS5mb2N1cyB8fCBuKSAmJiB0aGlzLnNob3dQcmltYXJ5U2VsZWN0aW9uKCksIHRoaXMuc2hvd011bHRpcGxlU2VsZWN0aW9ucyhlKSk7XG4gICAgICB9LCBjdC5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNtLmRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LmdldFNlbGVjdGlvbigpO1xuICAgICAgfSwgY3QucHJvdG90eXBlLnNob3dQcmltYXJ5U2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlID0gdGhpcy5nZXRTZWxlY3Rpb24oKSwgbiA9IHRoaXMuY20sIGwgPSBuLmRvYy5zZWwucHJpbWFyeSgpLCBhID0gbC5mcm9tKCksIHUgPSBsLnRvKCk7XG4gICAgICAgIGlmIChuLmRpc3BsYXkudmlld1RvID09IG4uZGlzcGxheS52aWV3RnJvbSB8fCBhLmxpbmUgPj0gbi5kaXNwbGF5LnZpZXdUbyB8fCB1LmxpbmUgPCBuLmRpc3BsYXkudmlld0Zyb20pIHtcbiAgICAgICAgICBlLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZyA9IG9hKG4sIGUuYW5jaG9yTm9kZSwgZS5hbmNob3JPZmZzZXQpLCBPID0gb2EobiwgZS5mb2N1c05vZGUsIGUuZm9jdXNPZmZzZXQpO1xuICAgICAgICBpZiAoIShnICYmICFnLmJhZCAmJiBPICYmICFPLmJhZCAmJiBvZShQdChnLCBPKSwgYSkgPT0gMCAmJiBvZShydChnLCBPKSwgdSkgPT0gMCkpIHtcbiAgICAgICAgICB2YXIgTCA9IG4uZGlzcGxheS52aWV3LCBIID0gYS5saW5lID49IG4uZGlzcGxheS52aWV3RnJvbSAmJiBrZihuLCBhKSB8fCB7IG5vZGU6IExbMF0ubWVhc3VyZS5tYXBbMl0sIG9mZnNldDogMCB9LCBVID0gdS5saW5lIDwgbi5kaXNwbGF5LnZpZXdUbyAmJiBrZihuLCB1KTtcbiAgICAgICAgICBpZiAoIVUpIHtcbiAgICAgICAgICAgIHZhciBHID0gTFtMLmxlbmd0aCAtIDFdLm1lYXN1cmUsIFkgPSBHLm1hcHMgPyBHLm1hcHNbRy5tYXBzLmxlbmd0aCAtIDFdIDogRy5tYXA7XG4gICAgICAgICAgICBVID0geyBub2RlOiBZW1kubGVuZ3RoIC0gMV0sIG9mZnNldDogWVtZLmxlbmd0aCAtIDJdIC0gWVtZLmxlbmd0aCAtIDNdIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghSCB8fCAhVSkge1xuICAgICAgICAgICAgZS5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGVlID0gZS5yYW5nZUNvdW50ICYmIGUuZ2V0UmFuZ2VBdCgwKSwgXztcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgXyA9IFcoSC5ub2RlLCBILm9mZnNldCwgVS5vZmZzZXQsIFUubm9kZSk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgfVxuICAgICAgICAgIF8gJiYgKCF0ICYmIG4uc3RhdGUuZm9jdXNlZCA/IChlLmNvbGxhcHNlKEgubm9kZSwgSC5vZmZzZXQpLCBfLmNvbGxhcHNlZCB8fCAoZS5yZW1vdmVBbGxSYW5nZXMoKSwgZS5hZGRSYW5nZShfKSkpIDogKGUucmVtb3ZlQWxsUmFuZ2VzKCksIGUuYWRkUmFuZ2UoXykpLCBlZSAmJiBlLmFuY2hvck5vZGUgPT0gbnVsbCA/IGUuYWRkUmFuZ2UoZWUpIDogdCAmJiB0aGlzLnN0YXJ0R3JhY2VQZXJpb2QoKSksIHRoaXMucmVtZW1iZXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSwgY3QucHJvdG90eXBlLnN0YXJ0R3JhY2VQZXJpb2QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGUgPSB0aGlzO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ncmFjZVBlcmlvZCksIHRoaXMuZ3JhY2VQZXJpb2QgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGUuZ3JhY2VQZXJpb2QgPSAhMSwgZS5zZWxlY3Rpb25DaGFuZ2VkKCkgJiYgZS5jbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gZS5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gITA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIDIwKTtcbiAgICAgIH0sIGN0LnByb3RvdHlwZS5zaG93TXVsdGlwbGVTZWxlY3Rpb25zID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBqKHRoaXMuY20uZGlzcGxheS5jdXJzb3JEaXYsIGUuY3Vyc29ycyksIGoodGhpcy5jbS5kaXNwbGF5LnNlbGVjdGlvbkRpdiwgZS5zZWxlY3Rpb24pO1xuICAgICAgfSwgY3QucHJvdG90eXBlLnJlbWVtYmVyU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5sYXN0QW5jaG9yTm9kZSA9IGUuYW5jaG9yTm9kZSwgdGhpcy5sYXN0QW5jaG9yT2Zmc2V0ID0gZS5hbmNob3JPZmZzZXQsIHRoaXMubGFzdEZvY3VzTm9kZSA9IGUuZm9jdXNOb2RlLCB0aGlzLmxhc3RGb2N1c09mZnNldCA9IGUuZm9jdXNPZmZzZXQ7XG4gICAgICB9LCBjdC5wcm90b3R5cGUuc2VsZWN0aW9uSW5FZGl0b3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGUgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgICAgICBpZiAoIWUucmFuZ2VDb3VudClcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIHZhciBuID0gZS5nZXRSYW5nZUF0KDApLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xuICAgICAgICByZXR1cm4gUSh0aGlzLmRpdiwgbik7XG4gICAgICB9LCBjdC5wcm90b3R5cGUuZm9jdXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5jbS5vcHRpb25zLnJlYWRPbmx5ICE9IFwibm9jdXJzb3JcIiAmJiAoKCF0aGlzLnNlbGVjdGlvbkluRWRpdG9yKCkgfHwgWCh0aGlzLmRpdi5vd25lckRvY3VtZW50KSAhPSB0aGlzLmRpdikgJiYgdGhpcy5zaG93U2VsZWN0aW9uKHRoaXMucHJlcGFyZVNlbGVjdGlvbigpLCAhMCksIHRoaXMuZGl2LmZvY3VzKCkpO1xuICAgICAgfSwgY3QucHJvdG90eXBlLmJsdXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5kaXYuYmx1cigpO1xuICAgICAgfSwgY3QucHJvdG90eXBlLmdldEZpZWxkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpdjtcbiAgICAgIH0sIGN0LnByb3RvdHlwZS5zdXBwb3J0c1RvdWNoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIH0sIGN0LnByb3RvdHlwZS5yZWNlaXZlZEZvY3VzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlID0gdGhpcywgbiA9IHRoaXM7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSW5FZGl0b3IoKSA/IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGUucG9sbFNlbGVjdGlvbigpO1xuICAgICAgICB9LCAyMCkgOiBkbih0aGlzLmNtLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gbi5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gITA7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBsKCkge1xuICAgICAgICAgIG4uY20uc3RhdGUuZm9jdXNlZCAmJiAobi5wb2xsU2VsZWN0aW9uKCksIG4ucG9sbGluZy5zZXQobi5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgbCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9sbGluZy5zZXQodGhpcy5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgbCk7XG4gICAgICB9LCBjdC5wcm90b3R5cGUuc2VsZWN0aW9uQ2hhbmdlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZSA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHJldHVybiBlLmFuY2hvck5vZGUgIT0gdGhpcy5sYXN0QW5jaG9yTm9kZSB8fCBlLmFuY2hvck9mZnNldCAhPSB0aGlzLmxhc3RBbmNob3JPZmZzZXQgfHwgZS5mb2N1c05vZGUgIT0gdGhpcy5sYXN0Rm9jdXNOb2RlIHx8IGUuZm9jdXNPZmZzZXQgIT0gdGhpcy5sYXN0Rm9jdXNPZmZzZXQ7XG4gICAgICB9LCBjdC5wcm90b3R5cGUucG9sbFNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoISh0aGlzLnJlYWRET01UaW1lb3V0ICE9IG51bGwgfHwgdGhpcy5ncmFjZVBlcmlvZCB8fCAhdGhpcy5zZWxlY3Rpb25DaGFuZ2VkKCkpKSB7XG4gICAgICAgICAgdmFyIGUgPSB0aGlzLmdldFNlbGVjdGlvbigpLCBuID0gdGhpcy5jbTtcbiAgICAgICAgICBpZiAoRSAmJiBEICYmIHRoaXMuY20uZGlzcGxheS5ndXR0ZXJTcGVjcy5sZW5ndGggJiYgZmgoZS5hbmNob3JOb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5jbS50cmlnZ2VyT25LZXlEb3duKHsgdHlwZTogXCJrZXlkb3duXCIsIGtleUNvZGU6IDgsIHByZXZlbnREZWZhdWx0OiBNYXRoLmFicyB9KSwgdGhpcy5ibHVyKCksIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmNvbXBvc2luZykge1xuICAgICAgICAgICAgdGhpcy5yZW1lbWJlclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdmFyIGwgPSBvYShuLCBlLmFuY2hvck5vZGUsIGUuYW5jaG9yT2Zmc2V0KSwgYSA9IG9hKG4sIGUuZm9jdXNOb2RlLCBlLmZvY3VzT2Zmc2V0KTtcbiAgICAgICAgICAgIGwgJiYgYSAmJiBkbihuLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgUXQobi5kb2MsIGJyKGwsIGEpLCBNZSksIChsLmJhZCB8fCBhLmJhZCkgJiYgKG4uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9ICEwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgY3QucHJvdG90eXBlLnBvbGxDb250ZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMucmVhZERPTVRpbWVvdXQgIT0gbnVsbCAmJiAoY2xlYXJUaW1lb3V0KHRoaXMucmVhZERPTVRpbWVvdXQpLCB0aGlzLnJlYWRET01UaW1lb3V0ID0gbnVsbCk7XG4gICAgICAgIHZhciBlID0gdGhpcy5jbSwgbiA9IGUuZGlzcGxheSwgbCA9IGUuZG9jLnNlbC5wcmltYXJ5KCksIGEgPSBsLmZyb20oKSwgdSA9IGwudG8oKTtcbiAgICAgICAgaWYgKGEuY2ggPT0gMCAmJiBhLmxpbmUgPiBlLmZpcnN0TGluZSgpICYmIChhID0gcShhLmxpbmUgLSAxLCBGZShlLmRvYywgYS5saW5lIC0gMSkubGVuZ3RoKSksIHUuY2ggPT0gRmUoZS5kb2MsIHUubGluZSkudGV4dC5sZW5ndGggJiYgdS5saW5lIDwgZS5sYXN0TGluZSgpICYmICh1ID0gcSh1LmxpbmUgKyAxLCAwKSksIGEubGluZSA8IG4udmlld0Zyb20gfHwgdS5saW5lID4gbi52aWV3VG8gLSAxKVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgdmFyIGcsIE8sIEw7XG4gICAgICAgIGEubGluZSA9PSBuLnZpZXdGcm9tIHx8IChnID0gQnIoZSwgYS5saW5lKSkgPT0gMCA/IChPID0gc3Qobi52aWV3WzBdLmxpbmUpLCBMID0gbi52aWV3WzBdLm5vZGUpIDogKE8gPSBzdChuLnZpZXdbZ10ubGluZSksIEwgPSBuLnZpZXdbZyAtIDFdLm5vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgICB2YXIgSCA9IEJyKGUsIHUubGluZSksIFUsIEc7XG4gICAgICAgIGlmIChIID09IG4udmlldy5sZW5ndGggLSAxID8gKFUgPSBuLnZpZXdUbyAtIDEsIEcgPSBuLmxpbmVEaXYubGFzdENoaWxkKSA6IChVID0gc3Qobi52aWV3W0ggKyAxXS5saW5lKSAtIDEsIEcgPSBuLnZpZXdbSCArIDFdLm5vZGUucHJldmlvdXNTaWJsaW5nKSwgIUwpXG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICBmb3IgKHZhciBZID0gZS5kb2Muc3BsaXRMaW5lcyhkaChlLCBMLCBHLCBPLCBVKSksIGVlID0gX24oZS5kb2MsIHEoTywgMCksIHEoVSwgRmUoZS5kb2MsIFUpLnRleHQubGVuZ3RoKSk7IFkubGVuZ3RoID4gMSAmJiBlZS5sZW5ndGggPiAxOyApXG4gICAgICAgICAgaWYgKEJlKFkpID09IEJlKGVlKSlcbiAgICAgICAgICAgIFkucG9wKCksIGVlLnBvcCgpLCBVLS07XG4gICAgICAgICAgZWxzZSBpZiAoWVswXSA9PSBlZVswXSlcbiAgICAgICAgICAgIFkuc2hpZnQoKSwgZWUuc2hpZnQoKSwgTysrO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBmb3IgKHZhciBfID0gMCwgYWUgPSAwLCBjZSA9IFlbMF0sIHllID0gZWVbMF0sIENlID0gTWF0aC5taW4oY2UubGVuZ3RoLCB5ZS5sZW5ndGgpOyBfIDwgQ2UgJiYgY2UuY2hhckNvZGVBdChfKSA9PSB5ZS5jaGFyQ29kZUF0KF8pOyApXG4gICAgICAgICAgKytfO1xuICAgICAgICBmb3IgKHZhciBUZSA9IEJlKFkpLCBFZSA9IEJlKGVlKSwgTmUgPSBNYXRoLm1pbihcbiAgICAgICAgICBUZS5sZW5ndGggLSAoWS5sZW5ndGggPT0gMSA/IF8gOiAwKSxcbiAgICAgICAgICBFZS5sZW5ndGggLSAoZWUubGVuZ3RoID09IDEgPyBfIDogMClcbiAgICAgICAgKTsgYWUgPCBOZSAmJiBUZS5jaGFyQ29kZUF0KFRlLmxlbmd0aCAtIGFlIC0gMSkgPT0gRWUuY2hhckNvZGVBdChFZS5sZW5ndGggLSBhZSAtIDEpOyApXG4gICAgICAgICAgKythZTtcbiAgICAgICAgaWYgKFkubGVuZ3RoID09IDEgJiYgZWUubGVuZ3RoID09IDEgJiYgTyA9PSBhLmxpbmUpXG4gICAgICAgICAgZm9yICg7IF8gJiYgXyA+IGEuY2ggJiYgVGUuY2hhckNvZGVBdChUZS5sZW5ndGggLSBhZSAtIDEpID09IEVlLmNoYXJDb2RlQXQoRWUubGVuZ3RoIC0gYWUgLSAxKTsgKVxuICAgICAgICAgICAgXy0tLCBhZSsrO1xuICAgICAgICBZW1kubGVuZ3RoIC0gMV0gPSBUZS5zbGljZSgwLCBUZS5sZW5ndGggLSBhZSkucmVwbGFjZSgvXlxcdTIwMGIrLywgXCJcIiksIFlbMF0gPSBZWzBdLnNsaWNlKF8pLnJlcGxhY2UoL1xcdTIwMGIrJC8sIFwiXCIpO1xuICAgICAgICB2YXIga2UgPSBxKE8sIF8pLCBIZSA9IHEoVSwgZWUubGVuZ3RoID8gQmUoZWUpLmxlbmd0aCAtIGFlIDogMCk7XG4gICAgICAgIGlmIChZLmxlbmd0aCA+IDEgfHwgWVswXSB8fCBvZShrZSwgSGUpKVxuICAgICAgICAgIHJldHVybiB1aShlLmRvYywgWSwga2UsIEhlLCBcIitpbnB1dFwiKSwgITA7XG4gICAgICB9LCBjdC5wcm90b3R5cGUuZW5zdXJlUG9sbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuZm9yY2VDb21wb3NpdGlvbkVuZCgpO1xuICAgICAgfSwgY3QucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuZm9yY2VDb21wb3NpdGlvbkVuZCgpO1xuICAgICAgfSwgY3QucHJvdG90eXBlLmZvcmNlQ29tcG9zaXRpb25FbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgIXRoaXMuY29tcG9zaW5nIHx8IChjbGVhclRpbWVvdXQodGhpcy5yZWFkRE9NVGltZW91dCksIHRoaXMuY29tcG9zaW5nID0gbnVsbCwgdGhpcy51cGRhdGVGcm9tRE9NKCksIHRoaXMuZGl2LmJsdXIoKSwgdGhpcy5kaXYuZm9jdXMoKSk7XG4gICAgICB9LCBjdC5wcm90b3R5cGUucmVhZEZyb21ET01Tb29uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlID0gdGhpcztcbiAgICAgICAgdGhpcy5yZWFkRE9NVGltZW91dCA9PSBudWxsICYmICh0aGlzLnJlYWRET01UaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoZS5yZWFkRE9NVGltZW91dCA9IG51bGwsIGUuY29tcG9zaW5nKVxuICAgICAgICAgICAgaWYgKGUuY29tcG9zaW5nLmRvbmUpXG4gICAgICAgICAgICAgIGUuY29tcG9zaW5nID0gbnVsbDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGUudXBkYXRlRnJvbURPTSgpO1xuICAgICAgICB9LCA4MCkpO1xuICAgICAgfSwgY3QucHJvdG90eXBlLnVwZGF0ZUZyb21ET00gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGUgPSB0aGlzO1xuICAgICAgICAodGhpcy5jbS5pc1JlYWRPbmx5KCkgfHwgIXRoaXMucG9sbENvbnRlbnQoKSkgJiYgZG4odGhpcy5jbSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHRuKGUuY20pO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGN0LnByb3RvdHlwZS5zZXRVbmVkaXRhYmxlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBlLmNvbnRlbnRFZGl0YWJsZSA9IFwiZmFsc2VcIjtcbiAgICAgIH0sIGN0LnByb3RvdHlwZS5vbktleVByZXNzID0gZnVuY3Rpb24oZSkge1xuICAgICAgICBlLmNoYXJDb2RlID09IDAgfHwgdGhpcy5jb21wb3NpbmcgfHwgKGUucHJldmVudERlZmF1bHQoKSwgdGhpcy5jbS5pc1JlYWRPbmx5KCkgfHwgJHQodGhpcy5jbSwgUmwpKHRoaXMuY20sIFN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSA9PSBudWxsID8gZS5rZXlDb2RlIDogZS5jaGFyQ29kZSksIDApKTtcbiAgICAgIH0sIGN0LnByb3RvdHlwZS5yZWFkT25seUNoYW5nZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHRoaXMuZGl2LmNvbnRlbnRFZGl0YWJsZSA9IFN0cmluZyhlICE9IFwibm9jdXJzb3JcIik7XG4gICAgICB9LCBjdC5wcm90b3R5cGUub25Db250ZXh0TWVudSA9IGZ1bmN0aW9uKCkge1xuICAgICAgfSwgY3QucHJvdG90eXBlLnJlc2V0UG9zaXRpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgIH0sIGN0LnByb3RvdHlwZS5uZWVkc0NvbnRlbnRBdHRyaWJ1dGUgPSAhMDtcbiAgICAgIGZ1bmN0aW9uIGtmKGUsIG4pIHtcbiAgICAgICAgdmFyIGwgPSBKYShlLCBuLmxpbmUpO1xuICAgICAgICBpZiAoIWwgfHwgbC5oaWRkZW4pXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHZhciBhID0gRmUoZS5kb2MsIG4ubGluZSksIHUgPSBjdShsLCBhLCBuLmxpbmUpLCBnID0gVWUoYSwgZS5kb2MuZGlyZWN0aW9uKSwgTyA9IFwibGVmdFwiO1xuICAgICAgICBpZiAoZykge1xuICAgICAgICAgIHZhciBMID0gRGUoZywgbi5jaCk7XG4gICAgICAgICAgTyA9IEwgJSAyID8gXCJyaWdodFwiIDogXCJsZWZ0XCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIEggPSB2dSh1Lm1hcCwgbi5jaCwgTyk7XG4gICAgICAgIHJldHVybiBILm9mZnNldCA9IEguY29sbGFwc2UgPT0gXCJyaWdodFwiID8gSC5lbmQgOiBILnN0YXJ0LCBIO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZmgoZSkge1xuICAgICAgICBmb3IgKHZhciBuID0gZTsgbjsgbiA9IG4ucGFyZW50Tm9kZSlcbiAgICAgICAgICBpZiAoL0NvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIvLnRlc3Qobi5jbGFzc05hbWUpKVxuICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICByZXR1cm4gITE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBoaShlLCBuKSB7XG4gICAgICAgIHJldHVybiBuICYmIChlLmJhZCA9ICEwKSwgZTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGRoKGUsIG4sIGwsIGEsIHUpIHtcbiAgICAgICAgdmFyIGcgPSBcIlwiLCBPID0gITEsIEwgPSBlLmRvYy5saW5lU2VwYXJhdG9yKCksIEggPSAhMTtcbiAgICAgICAgZnVuY3Rpb24gVShfKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFlKSB7XG4gICAgICAgICAgICByZXR1cm4gYWUuaWQgPT0gXztcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIEcoKSB7XG4gICAgICAgICAgTyAmJiAoZyArPSBMLCBIICYmIChnICs9IEwpLCBPID0gSCA9ICExKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBZKF8pIHtcbiAgICAgICAgICBfICYmIChHKCksIGcgKz0gXyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZWUoXykge1xuICAgICAgICAgIGlmIChfLm5vZGVUeXBlID09IDEpIHtcbiAgICAgICAgICAgIHZhciBhZSA9IF8uZ2V0QXR0cmlidXRlKFwiY20tdGV4dFwiKTtcbiAgICAgICAgICAgIGlmIChhZSkge1xuICAgICAgICAgICAgICBZKGFlKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNlID0gXy5nZXRBdHRyaWJ1dGUoXCJjbS1tYXJrZXJcIiksIHllO1xuICAgICAgICAgICAgaWYgKGNlKSB7XG4gICAgICAgICAgICAgIHZhciBDZSA9IGUuZmluZE1hcmtzKHEoYSwgMCksIHEodSArIDEsIDApLCBVKCtjZSkpO1xuICAgICAgICAgICAgICBDZS5sZW5ndGggJiYgKHllID0gQ2VbMF0uZmluZCgwKSkgJiYgWShfbihlLmRvYywgeWUuZnJvbSwgeWUudG8pLmpvaW4oTCkpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXy5nZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikgPT0gXCJmYWxzZVwiKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgVGUgPSAvXihwcmV8ZGl2fHB8bGl8dGFibGV8YnIpJC9pLnRlc3QoXy5ub2RlTmFtZSk7XG4gICAgICAgICAgICBpZiAoIS9eYnIkL2kudGVzdChfLm5vZGVOYW1lKSAmJiBfLnRleHRDb250ZW50Lmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBUZSAmJiBHKCk7XG4gICAgICAgICAgICBmb3IgKHZhciBFZSA9IDA7IEVlIDwgXy5jaGlsZE5vZGVzLmxlbmd0aDsgRWUrKylcbiAgICAgICAgICAgICAgZWUoXy5jaGlsZE5vZGVzW0VlXSk7XG4gICAgICAgICAgICAvXihwcmV8cCkkL2kudGVzdChfLm5vZGVOYW1lKSAmJiAoSCA9ICEwKSwgVGUgJiYgKE8gPSAhMCk7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICBfLm5vZGVUeXBlID09IDMgJiYgWShfLm5vZGVWYWx1ZS5yZXBsYWNlKC9cXHUyMDBiL2csIFwiXCIpLnJlcGxhY2UoL1xcdTAwYTAvZywgXCIgXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKDsgZWUobiksIG4gIT0gbDsgKVxuICAgICAgICAgIG4gPSBuLm5leHRTaWJsaW5nLCBIID0gITE7XG4gICAgICAgIHJldHVybiBnO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gb2EoZSwgbiwgbCkge1xuICAgICAgICB2YXIgYTtcbiAgICAgICAgaWYgKG4gPT0gZS5kaXNwbGF5LmxpbmVEaXYpIHtcbiAgICAgICAgICBpZiAoYSA9IGUuZGlzcGxheS5saW5lRGl2LmNoaWxkTm9kZXNbbF0sICFhKVxuICAgICAgICAgICAgcmV0dXJuIGhpKGUuY2xpcFBvcyhxKGUuZGlzcGxheS52aWV3VG8gLSAxKSksICEwKTtcbiAgICAgICAgICBuID0gbnVsbCwgbCA9IDA7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGZvciAoYSA9IG47IDsgYSA9IGEucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgaWYgKCFhIHx8IGEgPT0gZS5kaXNwbGF5LmxpbmVEaXYpXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgaWYgKGEucGFyZW50Tm9kZSAmJiBhLnBhcmVudE5vZGUgPT0gZS5kaXNwbGF5LmxpbmVEaXYpXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCBlLmRpc3BsYXkudmlldy5sZW5ndGg7IHUrKykge1xuICAgICAgICAgIHZhciBnID0gZS5kaXNwbGF5LnZpZXdbdV07XG4gICAgICAgICAgaWYgKGcubm9kZSA9PSBhKVxuICAgICAgICAgICAgcmV0dXJuIGNoKGcsIG4sIGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjaChlLCBuLCBsKSB7XG4gICAgICAgIHZhciBhID0gZS50ZXh0LmZpcnN0Q2hpbGQsIHUgPSAhMTtcbiAgICAgICAgaWYgKCFuIHx8ICFRKGEsIG4pKVxuICAgICAgICAgIHJldHVybiBoaShxKHN0KGUubGluZSksIDApLCAhMCk7XG4gICAgICAgIGlmIChuID09IGEgJiYgKHUgPSAhMCwgbiA9IGEuY2hpbGROb2Rlc1tsXSwgbCA9IDAsICFuKSkge1xuICAgICAgICAgIHZhciBnID0gZS5yZXN0ID8gQmUoZS5yZXN0KSA6IGUubGluZTtcbiAgICAgICAgICByZXR1cm4gaGkocShzdChnKSwgZy50ZXh0Lmxlbmd0aCksIHUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBPID0gbi5ub2RlVHlwZSA9PSAzID8gbiA6IG51bGwsIEwgPSBuO1xuICAgICAgICBmb3IgKCFPICYmIG4uY2hpbGROb2Rlcy5sZW5ndGggPT0gMSAmJiBuLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT0gMyAmJiAoTyA9IG4uZmlyc3RDaGlsZCwgbCAmJiAobCA9IE8ubm9kZVZhbHVlLmxlbmd0aCkpOyBMLnBhcmVudE5vZGUgIT0gYTsgKVxuICAgICAgICAgIEwgPSBMLnBhcmVudE5vZGU7XG4gICAgICAgIHZhciBIID0gZS5tZWFzdXJlLCBVID0gSC5tYXBzO1xuICAgICAgICBmdW5jdGlvbiBHKHllLCBDZSwgVGUpIHtcbiAgICAgICAgICBmb3IgKHZhciBFZSA9IC0xOyBFZSA8IChVID8gVS5sZW5ndGggOiAwKTsgRWUrKylcbiAgICAgICAgICAgIGZvciAodmFyIE5lID0gRWUgPCAwID8gSC5tYXAgOiBVW0VlXSwga2UgPSAwOyBrZSA8IE5lLmxlbmd0aDsga2UgKz0gMykge1xuICAgICAgICAgICAgICB2YXIgSGUgPSBOZVtrZSArIDJdO1xuICAgICAgICAgICAgICBpZiAoSGUgPT0geWUgfHwgSGUgPT0gQ2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgWGUgPSBzdChFZSA8IDAgPyBlLmxpbmUgOiBlLnJlc3RbRWVdKSwgdnQgPSBOZVtrZV0gKyBUZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFRlIDwgMCB8fCBIZSAhPSB5ZSkgJiYgKHZ0ID0gTmVba2UgKyAoVGUgPyAxIDogMCldKSwgcShYZSwgdnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIFkgPSBHKE8sIEwsIGwpO1xuICAgICAgICBpZiAoWSlcbiAgICAgICAgICByZXR1cm4gaGkoWSwgdSk7XG4gICAgICAgIGZvciAodmFyIGVlID0gTC5uZXh0U2libGluZywgXyA9IE8gPyBPLm5vZGVWYWx1ZS5sZW5ndGggLSBsIDogMDsgZWU7IGVlID0gZWUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICBpZiAoWSA9IEcoZWUsIGVlLmZpcnN0Q2hpbGQsIDApLCBZKVxuICAgICAgICAgICAgcmV0dXJuIGhpKHEoWS5saW5lLCBZLmNoIC0gXyksIHUpO1xuICAgICAgICAgIF8gKz0gZWUudGV4dENvbnRlbnQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGFlID0gTC5wcmV2aW91c1NpYmxpbmcsIGNlID0gbDsgYWU7IGFlID0gYWUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICAgICAgaWYgKFkgPSBHKGFlLCBhZS5maXJzdENoaWxkLCAtMSksIFkpXG4gICAgICAgICAgICByZXR1cm4gaGkocShZLmxpbmUsIFkuY2ggKyBjZSksIHUpO1xuICAgICAgICAgIGNlICs9IGFlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIFR0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB0aGlzLmNtID0gZSwgdGhpcy5wcmV2SW5wdXQgPSBcIlwiLCB0aGlzLnBvbGxpbmdGYXN0ID0gITEsIHRoaXMucG9sbGluZyA9IG5ldyBwZSgpLCB0aGlzLmhhc1NlbGVjdGlvbiA9ICExLCB0aGlzLmNvbXBvc2luZyA9IG51bGw7XG4gICAgICB9O1xuICAgICAgVHQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBuID0gdGhpcywgbCA9IHRoaXMsIGEgPSB0aGlzLmNtO1xuICAgICAgICB0aGlzLmNyZWF0ZUZpZWxkKGUpO1xuICAgICAgICB2YXIgdSA9IHRoaXMudGV4dGFyZWE7XG4gICAgICAgIGUud3JhcHBlci5pbnNlcnRCZWZvcmUodGhpcy53cmFwcGVyLCBlLndyYXBwZXIuZmlyc3RDaGlsZCksIEEgJiYgKHUuc3R5bGUud2lkdGggPSBcIjBweFwiKSwgbmUodSwgXCJpbnB1dFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBwICYmIHYgPj0gOSAmJiBuLmhhc1NlbGVjdGlvbiAmJiAobi5oYXNTZWxlY3Rpb24gPSBudWxsKSwgbC5wb2xsKCk7XG4gICAgICAgIH0pLCBuZSh1LCBcInBhc3RlXCIsIGZ1bmN0aW9uKE8pIHtcbiAgICAgICAgICBRZShhLCBPKSB8fCBQZihPLCBhKSB8fCAoYS5zdGF0ZS5wYXN0ZUluY29taW5nID0gK25ldyBEYXRlKCksIGwuZmFzdFBvbGwoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBnKE8pIHtcbiAgICAgICAgICBpZiAoIVFlKGEsIE8pKSB7XG4gICAgICAgICAgICBpZiAoYS5zb21ldGhpbmdTZWxlY3RlZCgpKVxuICAgICAgICAgICAgICBpYSh7IGxpbmVXaXNlOiAhMSwgdGV4dDogYS5nZXRTZWxlY3Rpb25zKCkgfSk7XG4gICAgICAgICAgICBlbHNlIGlmIChhLm9wdGlvbnMubGluZVdpc2VDb3B5Q3V0KSB7XG4gICAgICAgICAgICAgIHZhciBMID0gTGYoYSk7XG4gICAgICAgICAgICAgIGlhKHsgbGluZVdpc2U6ICEwLCB0ZXh0OiBMLnRleHQgfSksIE8udHlwZSA9PSBcImN1dFwiID8gYS5zZXRTZWxlY3Rpb25zKEwucmFuZ2VzLCBudWxsLCBNZSkgOiAobC5wcmV2SW5wdXQgPSBcIlwiLCB1LnZhbHVlID0gTC50ZXh0LmpvaW4oYFxuYCksIGRlKHUpKTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBPLnR5cGUgPT0gXCJjdXRcIiAmJiAoYS5zdGF0ZS5jdXRJbmNvbWluZyA9ICtuZXcgRGF0ZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmUodSwgXCJjdXRcIiwgZyksIG5lKHUsIFwiY29weVwiLCBnKSwgbmUoZS5zY3JvbGxlciwgXCJwYXN0ZVwiLCBmdW5jdGlvbihPKSB7XG4gICAgICAgICAgaWYgKCEobnIoZSwgTykgfHwgUWUoYSwgTykpKSB7XG4gICAgICAgICAgICBpZiAoIXUuZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICAgICAgICBhLnN0YXRlLnBhc3RlSW5jb21pbmcgPSArbmV3IERhdGUoKSwgbC5mb2N1cygpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgTCA9IG5ldyBFdmVudChcInBhc3RlXCIpO1xuICAgICAgICAgICAgTC5jbGlwYm9hcmREYXRhID0gTy5jbGlwYm9hcmREYXRhLCB1LmRpc3BhdGNoRXZlbnQoTCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSwgbmUoZS5saW5lU3BhY2UsIFwic2VsZWN0c3RhcnRcIiwgZnVuY3Rpb24oTykge1xuICAgICAgICAgIG5yKGUsIE8pIHx8IGx0KE8pO1xuICAgICAgICB9KSwgbmUodSwgXCJjb21wb3NpdGlvbnN0YXJ0XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBPID0gYS5nZXRDdXJzb3IoXCJmcm9tXCIpO1xuICAgICAgICAgIGwuY29tcG9zaW5nICYmIGwuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCksIGwuY29tcG9zaW5nID0ge1xuICAgICAgICAgICAgc3RhcnQ6IE8sXG4gICAgICAgICAgICByYW5nZTogYS5tYXJrVGV4dChPLCBhLmdldEN1cnNvcihcInRvXCIpLCB7IGNsYXNzTmFtZTogXCJDb2RlTWlycm9yLWNvbXBvc2luZ1wiIH0pXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksIG5lKHUsIFwiY29tcG9zaXRpb25lbmRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbC5jb21wb3NpbmcgJiYgKGwucG9sbCgpLCBsLmNvbXBvc2luZy5yYW5nZS5jbGVhcigpLCBsLmNvbXBvc2luZyA9IG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIFR0LnByb3RvdHlwZS5jcmVhdGVGaWVsZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdGhpcy53cmFwcGVyID0gSGYoKSwgdGhpcy50ZXh0YXJlYSA9IHRoaXMud3JhcHBlci5maXJzdENoaWxkO1xuICAgICAgfSwgVHQucHJvdG90eXBlLnNjcmVlblJlYWRlckxhYmVsQ2hhbmdlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZSA/IHRoaXMudGV4dGFyZWEuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBlKSA6IHRoaXMudGV4dGFyZWEucmVtb3ZlQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcbiAgICAgIH0sIFR0LnByb3RvdHlwZS5wcmVwYXJlU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlID0gdGhpcy5jbSwgbiA9IGUuZGlzcGxheSwgbCA9IGUuZG9jLCBhID0gVHUoZSk7XG4gICAgICAgIGlmIChlLm9wdGlvbnMubW92ZUlucHV0V2l0aEN1cnNvcikge1xuICAgICAgICAgIHZhciB1ID0gUG4oZSwgbC5zZWwucHJpbWFyeSgpLmhlYWQsIFwiZGl2XCIpLCBnID0gbi53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBPID0gbi5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgIGEudGVUb3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihcbiAgICAgICAgICAgIG4ud3JhcHBlci5jbGllbnRIZWlnaHQgLSAxMCxcbiAgICAgICAgICAgIHUudG9wICsgTy50b3AgLSBnLnRvcFxuICAgICAgICAgICkpLCBhLnRlTGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKFxuICAgICAgICAgICAgbi53cmFwcGVyLmNsaWVudFdpZHRoIC0gMTAsXG4gICAgICAgICAgICB1LmxlZnQgKyBPLmxlZnQgLSBnLmxlZnRcbiAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0sIFR0LnByb3RvdHlwZS5zaG93U2VsZWN0aW9uID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgbiA9IHRoaXMuY20sIGwgPSBuLmRpc3BsYXk7XG4gICAgICAgIGoobC5jdXJzb3JEaXYsIGUuY3Vyc29ycyksIGoobC5zZWxlY3Rpb25EaXYsIGUuc2VsZWN0aW9uKSwgZS50ZVRvcCAhPSBudWxsICYmICh0aGlzLndyYXBwZXIuc3R5bGUudG9wID0gZS50ZVRvcCArIFwicHhcIiwgdGhpcy53cmFwcGVyLnN0eWxlLmxlZnQgPSBlLnRlTGVmdCArIFwicHhcIik7XG4gICAgICB9LCBUdC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICghKHRoaXMuY29udGV4dE1lbnVQZW5kaW5nIHx8IHRoaXMuY29tcG9zaW5nKSkge1xuICAgICAgICAgIHZhciBuID0gdGhpcy5jbTtcbiAgICAgICAgICBpZiAobi5zb21ldGhpbmdTZWxlY3RlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZJbnB1dCA9IFwiXCI7XG4gICAgICAgICAgICB2YXIgbCA9IG4uZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLnRleHRhcmVhLnZhbHVlID0gbCwgbi5zdGF0ZS5mb2N1c2VkICYmIGRlKHRoaXMudGV4dGFyZWEpLCBwICYmIHYgPj0gOSAmJiAodGhpcy5oYXNTZWxlY3Rpb24gPSBsKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIGUgfHwgKHRoaXMucHJldklucHV0ID0gdGhpcy50ZXh0YXJlYS52YWx1ZSA9IFwiXCIsIHAgJiYgdiA+PSA5ICYmICh0aGlzLmhhc1NlbGVjdGlvbiA9IG51bGwpKTtcbiAgICAgICAgfVxuICAgICAgfSwgVHQucHJvdG90eXBlLmdldEZpZWxkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHRhcmVhO1xuICAgICAgfSwgVHQucHJvdG90eXBlLnN1cHBvcnRzVG91Y2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICExO1xuICAgICAgfSwgVHQucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmNtLm9wdGlvbnMucmVhZE9ubHkgIT0gXCJub2N1cnNvclwiICYmICghQyB8fCBYKHRoaXMudGV4dGFyZWEub3duZXJEb2N1bWVudCkgIT0gdGhpcy50ZXh0YXJlYSkpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMudGV4dGFyZWEuZm9jdXMoKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB9XG4gICAgICB9LCBUdC5wcm90b3R5cGUuYmx1ciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnRleHRhcmVhLmJsdXIoKTtcbiAgICAgIH0sIFR0LnByb3RvdHlwZS5yZXNldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMud3JhcHBlci5zdHlsZS50b3AgPSB0aGlzLndyYXBwZXIuc3R5bGUubGVmdCA9IDA7XG4gICAgICB9LCBUdC5wcm90b3R5cGUucmVjZWl2ZWRGb2N1cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNsb3dQb2xsKCk7XG4gICAgICB9LCBUdC5wcm90b3R5cGUuc2xvd1BvbGwgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGUgPSB0aGlzO1xuICAgICAgICB0aGlzLnBvbGxpbmdGYXN0IHx8IHRoaXMucG9sbGluZy5zZXQodGhpcy5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZS5wb2xsKCksIGUuY20uc3RhdGUuZm9jdXNlZCAmJiBlLnNsb3dQb2xsKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgVHQucHJvdG90eXBlLmZhc3RQb2xsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlID0gITEsIG4gPSB0aGlzO1xuICAgICAgICBuLnBvbGxpbmdGYXN0ID0gITA7XG4gICAgICAgIGZ1bmN0aW9uIGwoKSB7XG4gICAgICAgICAgdmFyIGEgPSBuLnBvbGwoKTtcbiAgICAgICAgICAhYSAmJiAhZSA/IChlID0gITAsIG4ucG9sbGluZy5zZXQoNjAsIGwpKSA6IChuLnBvbGxpbmdGYXN0ID0gITEsIG4uc2xvd1BvbGwoKSk7XG4gICAgICAgIH1cbiAgICAgICAgbi5wb2xsaW5nLnNldCgyMCwgbCk7XG4gICAgICB9LCBUdC5wcm90b3R5cGUucG9sbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZSA9IHRoaXMsIG4gPSB0aGlzLmNtLCBsID0gdGhpcy50ZXh0YXJlYSwgYSA9IHRoaXMucHJldklucHV0O1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0TWVudVBlbmRpbmcgfHwgIW4uc3RhdGUuZm9jdXNlZCB8fCBwcihsKSAmJiAhYSAmJiAhdGhpcy5jb21wb3NpbmcgfHwgbi5pc1JlYWRPbmx5KCkgfHwgbi5vcHRpb25zLmRpc2FibGVJbnB1dCB8fCBuLnN0YXRlLmtleVNlcSlcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgaWYgKHUgPT0gYSAmJiAhbi5zb21ldGhpbmdTZWxlY3RlZCgpKVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgaWYgKHAgJiYgdiA+PSA5ICYmIHRoaXMuaGFzU2VsZWN0aW9uID09PSB1IHx8IE0gJiYgL1tcXHVmNzAwLVxcdWY3ZmZdLy50ZXN0KHUpKVxuICAgICAgICAgIHJldHVybiBuLmRpc3BsYXkuaW5wdXQucmVzZXQoKSwgITE7XG4gICAgICAgIGlmIChuLmRvYy5zZWwgPT0gbi5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51KSB7XG4gICAgICAgICAgdmFyIGcgPSB1LmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgaWYgKGcgPT0gODIwMyAmJiAhYSAmJiAoYSA9IFwiXFx1MjAwQlwiKSwgZyA9PSA4NjY2KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzZXQoKSwgdGhpcy5jbS5leGVjQ29tbWFuZChcInVuZG9cIik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgTyA9IDAsIEwgPSBNYXRoLm1pbihhLmxlbmd0aCwgdS5sZW5ndGgpOyBPIDwgTCAmJiBhLmNoYXJDb2RlQXQoTykgPT0gdS5jaGFyQ29kZUF0KE8pOyApXG4gICAgICAgICAgKytPO1xuICAgICAgICByZXR1cm4gZG4obiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgUmwoXG4gICAgICAgICAgICBuLFxuICAgICAgICAgICAgdS5zbGljZShPKSxcbiAgICAgICAgICAgIGEubGVuZ3RoIC0gTyxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBlLmNvbXBvc2luZyA/IFwiKmNvbXBvc2VcIiA6IG51bGxcbiAgICAgICAgICApLCB1Lmxlbmd0aCA+IDFlMyB8fCB1LmluZGV4T2YoYFxuYCkgPiAtMSA/IGwudmFsdWUgPSBlLnByZXZJbnB1dCA9IFwiXCIgOiBlLnByZXZJbnB1dCA9IHUsIGUuY29tcG9zaW5nICYmIChlLmNvbXBvc2luZy5yYW5nZS5jbGVhcigpLCBlLmNvbXBvc2luZy5yYW5nZSA9IG4ubWFya1RleHQoXG4gICAgICAgICAgICBlLmNvbXBvc2luZy5zdGFydCxcbiAgICAgICAgICAgIG4uZ2V0Q3Vyc29yKFwidG9cIiksXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogXCJDb2RlTWlycm9yLWNvbXBvc2luZ1wiIH1cbiAgICAgICAgICApKTtcbiAgICAgICAgfSksICEwO1xuICAgICAgfSwgVHQucHJvdG90eXBlLmVuc3VyZVBvbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnBvbGxpbmdGYXN0ICYmIHRoaXMucG9sbCgpICYmICh0aGlzLnBvbGxpbmdGYXN0ID0gITEpO1xuICAgICAgfSwgVHQucHJvdG90eXBlLm9uS2V5UHJlc3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcCAmJiB2ID49IDkgJiYgKHRoaXMuaGFzU2VsZWN0aW9uID0gbnVsbCksIHRoaXMuZmFzdFBvbGwoKTtcbiAgICAgIH0sIFR0LnByb3RvdHlwZS5vbkNvbnRleHRNZW51ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgbiA9IHRoaXMsIGwgPSBuLmNtLCBhID0gbC5kaXNwbGF5LCB1ID0gbi50ZXh0YXJlYTtcbiAgICAgICAgbi5jb250ZXh0TWVudVBlbmRpbmcgJiYgbi5jb250ZXh0TWVudVBlbmRpbmcoKTtcbiAgICAgICAgdmFyIGcgPSBMcihsLCBlKSwgTyA9IGEuc2Nyb2xsZXIuc2Nyb2xsVG9wO1xuICAgICAgICBpZiAoIWcgfHwgbSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBMID0gbC5vcHRpb25zLnJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudTtcbiAgICAgICAgTCAmJiBsLmRvYy5zZWwuY29udGFpbnMoZykgPT0gLTEgJiYgJHQobCwgUXQpKGwuZG9jLCBicihnKSwgTWUpO1xuICAgICAgICB2YXIgSCA9IHUuc3R5bGUuY3NzVGV4dCwgVSA9IG4ud3JhcHBlci5zdHlsZS5jc3NUZXh0LCBHID0gbi53cmFwcGVyLm9mZnNldFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgbi53cmFwcGVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBzdGF0aWNcIiwgdS5zdHlsZS5jc3NUZXh0ID0gYHBvc2l0aW9uOiBhYnNvbHV0ZTsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDtcbiAgICAgIHRvcDogYCArIChlLmNsaWVudFkgLSBHLnRvcCAtIDUpICsgXCJweDsgbGVmdDogXCIgKyAoZS5jbGllbnRYIC0gRy5sZWZ0IC0gNSkgKyBgcHg7XG4gICAgICB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiBgICsgKHAgPyBcInJnYmEoMjU1LCAyNTUsIDI1NSwgLjA1KVwiIDogXCJ0cmFuc3BhcmVudFwiKSArIGA7XG4gICAgICBvdXRsaW5lOiBub25lOyBib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUpO2A7XG4gICAgICAgIHZhciBZO1xuICAgICAgICBiICYmIChZID0gdS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LnNjcm9sbFkpLCBhLmlucHV0LmZvY3VzKCksIGIgJiYgdS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LnNjcm9sbFRvKG51bGwsIFkpLCBhLmlucHV0LnJlc2V0KCksIGwuc29tZXRoaW5nU2VsZWN0ZWQoKSB8fCAodS52YWx1ZSA9IG4ucHJldklucHV0ID0gXCIgXCIpLCBuLmNvbnRleHRNZW51UGVuZGluZyA9IF8sIGEuc2VsRm9yQ29udGV4dE1lbnUgPSBsLmRvYy5zZWwsIGNsZWFyVGltZW91dChhLmRldGVjdGluZ1NlbGVjdEFsbCk7XG4gICAgICAgIGZ1bmN0aW9uIGVlKCkge1xuICAgICAgICAgIGlmICh1LnNlbGVjdGlvblN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBjZSA9IGwuc29tZXRoaW5nU2VsZWN0ZWQoKSwgeWUgPSBcIlxcdTIwMEJcIiArIChjZSA/IHUudmFsdWUgOiBcIlwiKTtcbiAgICAgICAgICAgIHUudmFsdWUgPSBcIlxcdTIxREFcIiwgdS52YWx1ZSA9IHllLCBuLnByZXZJbnB1dCA9IGNlID8gXCJcIiA6IFwiXFx1MjAwQlwiLCB1LnNlbGVjdGlvblN0YXJ0ID0gMSwgdS5zZWxlY3Rpb25FbmQgPSB5ZS5sZW5ndGgsIGEuc2VsRm9yQ29udGV4dE1lbnUgPSBsLmRvYy5zZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF8oKSB7XG4gICAgICAgICAgaWYgKG4uY29udGV4dE1lbnVQZW5kaW5nID09IF8gJiYgKG4uY29udGV4dE1lbnVQZW5kaW5nID0gITEsIG4ud3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gVSwgdS5zdHlsZS5jc3NUZXh0ID0gSCwgcCAmJiB2IDwgOSAmJiBhLnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKGEuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gTyksIHUuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCkpIHtcbiAgICAgICAgICAgICghcCB8fCBwICYmIHYgPCA5KSAmJiBlZSgpO1xuICAgICAgICAgICAgdmFyIGNlID0gMCwgeWUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgYS5zZWxGb3JDb250ZXh0TWVudSA9PSBsLmRvYy5zZWwgJiYgdS5zZWxlY3Rpb25TdGFydCA9PSAwICYmIHUuc2VsZWN0aW9uRW5kID4gMCAmJiBuLnByZXZJbnB1dCA9PSBcIlxcdTIwMEJcIiA/ICR0KGwsIG5mKShsKSA6IGNlKysgPCAxMCA/IGEuZGV0ZWN0aW5nU2VsZWN0QWxsID0gc2V0VGltZW91dCh5ZSwgNTAwKSA6IChhLnNlbEZvckNvbnRleHRNZW51ID0gbnVsbCwgYS5pbnB1dC5yZXNldCgpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhLmRldGVjdGluZ1NlbGVjdEFsbCA9IHNldFRpbWVvdXQoeWUsIDIwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwICYmIHYgPj0gOSAmJiBlZSgpLCBrKSB7XG4gICAgICAgICAgSW4oZSk7XG4gICAgICAgICAgdmFyIGFlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBPZSh3aW5kb3csIFwibW91c2V1cFwiLCBhZSksIHNldFRpbWVvdXQoXywgMjApO1xuICAgICAgICAgIH07XG4gICAgICAgICAgbmUod2luZG93LCBcIm1vdXNldXBcIiwgYWUpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBzZXRUaW1lb3V0KF8sIDUwKTtcbiAgICAgIH0sIFR0LnByb3RvdHlwZS5yZWFkT25seUNoYW5nZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGUgfHwgdGhpcy5yZXNldCgpLCB0aGlzLnRleHRhcmVhLmRpc2FibGVkID0gZSA9PSBcIm5vY3Vyc29yXCIsIHRoaXMudGV4dGFyZWEucmVhZE9ubHkgPSAhIWU7XG4gICAgICB9LCBUdC5wcm90b3R5cGUuc2V0VW5lZGl0YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgfSwgVHQucHJvdG90eXBlLm5lZWRzQ29udGVudEF0dHJpYnV0ZSA9ICExO1xuICAgICAgZnVuY3Rpb24gcGgoZSwgbikge1xuICAgICAgICBpZiAobiA9IG4gPyBsZShuKSA6IHt9LCBuLnZhbHVlID0gZS52YWx1ZSwgIW4udGFiaW5kZXggJiYgZS50YWJJbmRleCAmJiAobi50YWJpbmRleCA9IGUudGFiSW5kZXgpLCAhbi5wbGFjZWhvbGRlciAmJiBlLnBsYWNlaG9sZGVyICYmIChuLnBsYWNlaG9sZGVyID0gZS5wbGFjZWhvbGRlciksIG4uYXV0b2ZvY3VzID09IG51bGwpIHtcbiAgICAgICAgICB2YXIgbCA9IFgoZS5vd25lckRvY3VtZW50KTtcbiAgICAgICAgICBuLmF1dG9mb2N1cyA9IGwgPT0gZSB8fCBlLmdldEF0dHJpYnV0ZShcImF1dG9mb2N1c1wiKSAhPSBudWxsICYmIGwgPT0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhKCkge1xuICAgICAgICAgIGUudmFsdWUgPSBMLmdldFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHU7XG4gICAgICAgIGlmIChlLmZvcm0gJiYgKG5lKGUuZm9ybSwgXCJzdWJtaXRcIiwgYSksICFuLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUpKSB7XG4gICAgICAgICAgdmFyIGcgPSBlLmZvcm07XG4gICAgICAgICAgdSA9IGcuc3VibWl0O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgTyA9IGcuc3VibWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGEoKSwgZy5zdWJtaXQgPSB1LCBnLnN1Ym1pdCgpLCBnLnN1Ym1pdCA9IE87XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuLmZpbmlzaEluaXQgPSBmdW5jdGlvbihIKSB7XG4gICAgICAgICAgSC5zYXZlID0gYSwgSC5nZXRUZXh0QXJlYSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgfSwgSC50b1RleHRBcmVhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBILnRvVGV4dEFyZWEgPSBpc05hTiwgYSgpLCBlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoSC5nZXRXcmFwcGVyRWxlbWVudCgpKSwgZS5zdHlsZS5kaXNwbGF5ID0gXCJcIiwgZS5mb3JtICYmIChPZShlLmZvcm0sIFwic3VibWl0XCIsIGEpLCAhbi5sZWF2ZVN1Ym1pdE1ldGhvZEFsb25lICYmIHR5cGVvZiBlLmZvcm0uc3VibWl0ID09IFwiZnVuY3Rpb25cIiAmJiAoZS5mb3JtLnN1Ym1pdCA9IHUpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9LCBlLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgdmFyIEwgPSBBdChcbiAgICAgICAgICBmdW5jdGlvbihIKSB7XG4gICAgICAgICAgICByZXR1cm4gZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShILCBlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIEw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBoaChlKSB7XG4gICAgICAgIGUub2ZmID0gT2UsIGUub24gPSBuZSwgZS53aGVlbEV2ZW50UGl4ZWxzID0gQ3AsIGUuRG9jID0gbm4sIGUuc3BsaXRMaW5lcyA9IElpLCBlLmNvdW50Q29sdW1uID0gaWUsIGUuZmluZENvbHVtbiA9IGV0LCBlLmlzV29yZENoYXIgPSB2biwgZS5QYXNzID0gQWUsIGUuc2lnbmFsID0gUGUsIGUuTGluZSA9IHFyLCBlLmNoYW5nZUVuZCA9IENyLCBlLnNjcm9sbGJhck1vZGVsID0gT3UsIGUuUG9zID0gcSwgZS5jbXBQb3MgPSBvZSwgZS5tb2RlcyA9IE5uLCBlLm1pbWVNb2RlcyA9IGhyLCBlLnJlc29sdmVNb2RlID0gZm4sIGUuZ2V0TW9kZSA9IFpuLCBlLm1vZGVFeHRlbnNpb25zID0gdnIsIGUuZXh0ZW5kTW9kZSA9IElvLCBlLmNvcHlTdGF0ZSA9IHFuLCBlLnN0YXJ0U3RhdGUgPSBOaSwgZS5pbm5lck1vZGUgPSBtciwgZS5jb21tYW5kcyA9IGVvLCBlLmtleU1hcCA9IGlyLCBlLmtleU5hbWUgPSBBZiwgZS5pc01vZGlmaWVyS2V5ID0gZ2YsIGUubG9va3VwS2V5ID0gZGksIGUubm9ybWFsaXplS2V5TWFwID0gVnAsIGUuU3RyaW5nU3RyZWFtID0gU3QsIGUuU2hhcmVkVGV4dE1hcmtlciA9IFppLCBlLlRleHRNYXJrZXIgPSBTciwgZS5MaW5lV2lkZ2V0ID0gSmksIGUuZV9wcmV2ZW50RGVmYXVsdCA9IGx0LCBlLmVfc3RvcFByb3BhZ2F0aW9uID0gd24sIGUuZV9zdG9wID0gSW4sIGUuYWRkQ2xhc3MgPSBKLCBlLmNvbnRhaW5zID0gUSwgZS5ybUNsYXNzID0gTiwgZS5rZXlOYW1lcyA9IHhyO1xuICAgICAgfVxuICAgICAgb2goQXQpLCB1aChBdCk7XG4gICAgICB2YXIgdmggPSBcIml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciBjb25zdHJ1Y3RvclwiLnNwbGl0KFwiIFwiKTtcbiAgICAgIGZvciAodmFyIGFhIGluIG5uLnByb3RvdHlwZSlcbiAgICAgICAgbm4ucHJvdG90eXBlLmhhc093blByb3BlcnR5KGFhKSAmJiB0ZSh2aCwgYWEpIDwgMCAmJiAoQXQucHJvdG90eXBlW2FhXSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gZS5hcHBseSh0aGlzLmRvYywgYXJndW1lbnRzKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KG5uLnByb3RvdHlwZVthYV0pKTtcbiAgICAgIHJldHVybiBtdChubiksIEF0LmlucHV0U3R5bGVzID0geyB0ZXh0YXJlYTogVHQsIGNvbnRlbnRlZGl0YWJsZTogY3QgfSwgQXQuZGVmaW5lTW9kZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgIUF0LmRlZmF1bHRzLm1vZGUgJiYgZSAhPSBcIm51bGxcIiAmJiAoQXQuZGVmYXVsdHMubW9kZSA9IGUpLCBNby5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfSwgQXQuZGVmaW5lTUlNRSA9IEpyLCBBdC5kZWZpbmVNb2RlKFwibnVsbFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHsgdG9rZW46IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5za2lwVG9FbmQoKTtcbiAgICAgICAgfSB9O1xuICAgICAgfSksIEF0LmRlZmluZU1JTUUoXCJ0ZXh0L3BsYWluXCIsIFwibnVsbFwiKSwgQXQuZGVmaW5lRXh0ZW5zaW9uID0gZnVuY3Rpb24oZSwgbikge1xuICAgICAgICBBdC5wcm90b3R5cGVbZV0gPSBuO1xuICAgICAgfSwgQXQuZGVmaW5lRG9jRXh0ZW5zaW9uID0gZnVuY3Rpb24oZSwgbikge1xuICAgICAgICBubi5wcm90b3R5cGVbZV0gPSBuO1xuICAgICAgfSwgQXQuZnJvbVRleHRBcmVhID0gcGgsIGhoKEF0KSwgQXQudmVyc2lvbiA9IFwiNi42NS43XCIsIEF0O1xuICAgIH0pO1xuICB9KENzKSksIENzLmV4cG9ydHM7XG59XG52YXIgRGkgPSBQYSgpO1xuKGZ1bmN0aW9uKHIsIGYpIHtcbiAgKGZ1bmN0aW9uKG8pIHtcbiAgICBvKFBhKCkpO1xuICB9KShmdW5jdGlvbihvKSB7XG4gICAgby5kZWZpbmVNb2RlKFwiamF2YXNjcmlwdFwiLCBmdW5jdGlvbihpLCB0KSB7XG4gICAgICB2YXIgcyA9IGkuaW5kZW50VW5pdCwgZCA9IHQuc3RhdGVtZW50SW5kZW50LCBjID0gdC5qc29ubGQsIHAgPSB0Lmpzb24gfHwgYywgdiA9IHQudHJhY2tTY29wZSAhPT0gITEsIGIgPSB0LnR5cGVzY3JpcHQsIFMgPSB0LndvcmRDaGFyYWN0ZXJzIHx8IC9bXFx3JFxceGExLVxcdWZmZmZdLywgRCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmdW5jdGlvbiB6KFB0KSB7XG4gICAgICAgICAgcmV0dXJuIHsgdHlwZTogUHQsIHN0eWxlOiBcImtleXdvcmRcIiB9O1xuICAgICAgICB9XG4gICAgICAgIHZhciBLID0geihcImtleXdvcmQgYVwiKSwgcSA9IHooXCJrZXl3b3JkIGJcIiksIG9lID0geihcImtleXdvcmQgY1wiKSwgemUgPSB6KFwia2V5d29yZCBkXCIpLCB0dCA9IHooXCJvcGVyYXRvclwiKSwgcnQgPSB7IHR5cGU6IFwiYXRvbVwiLCBzdHlsZTogXCJhdG9tXCIgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZjogeihcImlmXCIpLFxuICAgICAgICAgIHdoaWxlOiBLLFxuICAgICAgICAgIHdpdGg6IEssXG4gICAgICAgICAgZWxzZTogcSxcbiAgICAgICAgICBkbzogcSxcbiAgICAgICAgICB0cnk6IHEsXG4gICAgICAgICAgZmluYWxseTogcSxcbiAgICAgICAgICByZXR1cm46IHplLFxuICAgICAgICAgIGJyZWFrOiB6ZSxcbiAgICAgICAgICBjb250aW51ZTogemUsXG4gICAgICAgICAgbmV3OiB6KFwibmV3XCIpLFxuICAgICAgICAgIGRlbGV0ZTogb2UsXG4gICAgICAgICAgdm9pZDogb2UsXG4gICAgICAgICAgdGhyb3c6IG9lLFxuICAgICAgICAgIGRlYnVnZ2VyOiB6KFwiZGVidWdnZXJcIiksXG4gICAgICAgICAgdmFyOiB6KFwidmFyXCIpLFxuICAgICAgICAgIGNvbnN0OiB6KFwidmFyXCIpLFxuICAgICAgICAgIGxldDogeihcInZhclwiKSxcbiAgICAgICAgICBmdW5jdGlvbjogeihcImZ1bmN0aW9uXCIpLFxuICAgICAgICAgIGNhdGNoOiB6KFwiY2F0Y2hcIiksXG4gICAgICAgICAgZm9yOiB6KFwiZm9yXCIpLFxuICAgICAgICAgIHN3aXRjaDogeihcInN3aXRjaFwiKSxcbiAgICAgICAgICBjYXNlOiB6KFwiY2FzZVwiKSxcbiAgICAgICAgICBkZWZhdWx0OiB6KFwiZGVmYXVsdFwiKSxcbiAgICAgICAgICBpbjogdHQsXG4gICAgICAgICAgdHlwZW9mOiB0dCxcbiAgICAgICAgICBpbnN0YW5jZW9mOiB0dCxcbiAgICAgICAgICB0cnVlOiBydCxcbiAgICAgICAgICBmYWxzZTogcnQsXG4gICAgICAgICAgbnVsbDogcnQsXG4gICAgICAgICAgdW5kZWZpbmVkOiBydCxcbiAgICAgICAgICBOYU46IHJ0LFxuICAgICAgICAgIEluZmluaXR5OiBydCxcbiAgICAgICAgICB0aGlzOiB6KFwidGhpc1wiKSxcbiAgICAgICAgICBjbGFzczogeihcImNsYXNzXCIpLFxuICAgICAgICAgIHN1cGVyOiB6KFwiYXRvbVwiKSxcbiAgICAgICAgICB5aWVsZDogb2UsXG4gICAgICAgICAgZXhwb3J0OiB6KFwiZXhwb3J0XCIpLFxuICAgICAgICAgIGltcG9ydDogeihcImltcG9ydFwiKSxcbiAgICAgICAgICBleHRlbmRzOiBvZSxcbiAgICAgICAgICBhd2FpdDogb2VcbiAgICAgICAgfTtcbiAgICAgIH0oKSwgVCA9IC9bK1xcLSomJT08PiE/fH5eQF0vLCBtID0gL15AKGNvbnRleHR8aWR8dmFsdWV8bGFuZ3VhZ2V8dHlwZXxjb250YWluZXJ8bGlzdHxzZXR8cmV2ZXJzZXxpbmRleHxiYXNlfHZvY2FifGdyYXBoKVwiLztcbiAgICAgIGZ1bmN0aW9uIHgoeikge1xuICAgICAgICBmb3IgKHZhciBLID0gITEsIHEsIG9lID0gITE7IChxID0gei5uZXh0KCkpICE9IG51bGw7ICkge1xuICAgICAgICAgIGlmICghSykge1xuICAgICAgICAgICAgaWYgKHEgPT0gXCIvXCIgJiYgIW9lKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBxID09IFwiW1wiID8gb2UgPSAhMCA6IG9lICYmIHEgPT0gXCJdXCIgJiYgKG9lID0gITEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBLID0gIUsgJiYgcSA9PSBcIlxcXFxcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIFIsIHc7XG4gICAgICBmdW5jdGlvbiBBKHosIEssIHEpIHtcbiAgICAgICAgcmV0dXJuIFIgPSB6LCB3ID0gcSwgSztcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEUoeiwgSykge1xuICAgICAgICB2YXIgcSA9IHoubmV4dCgpO1xuICAgICAgICBpZiAocSA9PSAnXCInIHx8IHEgPT0gXCInXCIpXG4gICAgICAgICAgcmV0dXJuIEsudG9rZW5pemUgPSBDKHEpLCBLLnRva2VuaXplKHosIEspO1xuICAgICAgICBpZiAocSA9PSBcIi5cIiAmJiB6Lm1hdGNoKC9eXFxkW1xcZF9dKig/OltlRV1bK1xcLV0/W1xcZF9dKyk/LykpXG4gICAgICAgICAgcmV0dXJuIEEoXCJudW1iZXJcIiwgXCJudW1iZXJcIik7XG4gICAgICAgIGlmIChxID09IFwiLlwiICYmIHoubWF0Y2goXCIuLlwiKSlcbiAgICAgICAgICByZXR1cm4gQShcInNwcmVhZFwiLCBcIm1ldGFcIik7XG4gICAgICAgIGlmICgvW1xcW1xcXXt9XFwoXFwpLDtcXDpcXC5dLy50ZXN0KHEpKVxuICAgICAgICAgIHJldHVybiBBKHEpO1xuICAgICAgICBpZiAocSA9PSBcIj1cIiAmJiB6LmVhdChcIj5cIikpXG4gICAgICAgICAgcmV0dXJuIEEoXCI9PlwiLCBcIm9wZXJhdG9yXCIpO1xuICAgICAgICBpZiAocSA9PSBcIjBcIiAmJiB6Lm1hdGNoKC9eKD86eFtcXGRBLUZhLWZfXSt8b1swLTdfXSt8YlswMV9dKyluPy8pKVxuICAgICAgICAgIHJldHVybiBBKFwibnVtYmVyXCIsIFwibnVtYmVyXCIpO1xuICAgICAgICBpZiAoL1xcZC8udGVzdChxKSlcbiAgICAgICAgICByZXR1cm4gei5tYXRjaCgvXltcXGRfXSooPzpufCg/OlxcLltcXGRfXSopPyg/OltlRV1bK1xcLV0/W1xcZF9dKyk/KT8vKSwgQShcIm51bWJlclwiLCBcIm51bWJlclwiKTtcbiAgICAgICAgaWYgKHEgPT0gXCIvXCIpXG4gICAgICAgICAgcmV0dXJuIHouZWF0KFwiKlwiKSA/IChLLnRva2VuaXplID0gTSwgTSh6LCBLKSkgOiB6LmVhdChcIi9cIikgPyAoei5za2lwVG9FbmQoKSwgQShcImNvbW1lbnRcIiwgXCJjb21tZW50XCIpKSA6IHpuKHosIEssIDEpID8gKHgoeiksIHoubWF0Y2goL15cXGIoKFtnaW15dXNdKSg/IVtnaW15dXNdKlxcMikpK1xcYi8pLCBBKFwicmVnZXhwXCIsIFwic3RyaW5nLTJcIikpIDogKHouZWF0KFwiPVwiKSwgQShcIm9wZXJhdG9yXCIsIFwib3BlcmF0b3JcIiwgei5jdXJyZW50KCkpKTtcbiAgICAgICAgaWYgKHEgPT0gXCJgXCIpXG4gICAgICAgICAgcmV0dXJuIEsudG9rZW5pemUgPSB5LCB5KHosIEspO1xuICAgICAgICBpZiAocSA9PSBcIiNcIiAmJiB6LnBlZWsoKSA9PSBcIiFcIilcbiAgICAgICAgICByZXR1cm4gei5za2lwVG9FbmQoKSwgQShcIm1ldGFcIiwgXCJtZXRhXCIpO1xuICAgICAgICBpZiAocSA9PSBcIiNcIiAmJiB6LmVhdFdoaWxlKFMpKVxuICAgICAgICAgIHJldHVybiBBKFwidmFyaWFibGVcIiwgXCJwcm9wZXJ0eVwiKTtcbiAgICAgICAgaWYgKHEgPT0gXCI8XCIgJiYgei5tYXRjaChcIiEtLVwiKSB8fCBxID09IFwiLVwiICYmIHoubWF0Y2goXCItPlwiKSAmJiAhL1xcUy8udGVzdCh6LnN0cmluZy5zbGljZSgwLCB6LnN0YXJ0KSkpXG4gICAgICAgICAgcmV0dXJuIHouc2tpcFRvRW5kKCksIEEoXCJjb21tZW50XCIsIFwiY29tbWVudFwiKTtcbiAgICAgICAgaWYgKFQudGVzdChxKSlcbiAgICAgICAgICByZXR1cm4gKHEgIT0gXCI+XCIgfHwgIUsubGV4aWNhbCB8fCBLLmxleGljYWwudHlwZSAhPSBcIj5cIikgJiYgKHouZWF0KFwiPVwiKSA/IChxID09IFwiIVwiIHx8IHEgPT0gXCI9XCIpICYmIHouZWF0KFwiPVwiKSA6IC9bPD4qK1xcLXwmP10vLnRlc3QocSkgJiYgKHouZWF0KHEpLCBxID09IFwiPlwiICYmIHouZWF0KHEpKSksIHEgPT0gXCI/XCIgJiYgei5lYXQoXCIuXCIpID8gQShcIi5cIikgOiBBKFwib3BlcmF0b3JcIiwgXCJvcGVyYXRvclwiLCB6LmN1cnJlbnQoKSk7XG4gICAgICAgIGlmIChTLnRlc3QocSkpIHtcbiAgICAgICAgICB6LmVhdFdoaWxlKFMpO1xuICAgICAgICAgIHZhciBvZSA9IHouY3VycmVudCgpO1xuICAgICAgICAgIGlmIChLLmxhc3RUeXBlICE9IFwiLlwiKSB7XG4gICAgICAgICAgICBpZiAoRC5wcm9wZXJ0eUlzRW51bWVyYWJsZShvZSkpIHtcbiAgICAgICAgICAgICAgdmFyIHplID0gRFtvZV07XG4gICAgICAgICAgICAgIHJldHVybiBBKHplLnR5cGUsIHplLnN0eWxlLCBvZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2UgPT0gXCJhc3luY1wiICYmIHoubWF0Y2goL14oXFxzfFxcL1xcKihbXipdfFxcKig/IVxcLykpKj9cXCpcXC8pKltcXFtcXChcXHddLywgITEpKVxuICAgICAgICAgICAgICByZXR1cm4gQShcImFzeW5jXCIsIFwia2V5d29yZFwiLCBvZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBBKFwidmFyaWFibGVcIiwgXCJ2YXJpYWJsZVwiLCBvZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEMoeikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oSywgcSkge1xuICAgICAgICAgIHZhciBvZSA9ICExLCB6ZTtcbiAgICAgICAgICBpZiAoYyAmJiBLLnBlZWsoKSA9PSBcIkBcIiAmJiBLLm1hdGNoKG0pKVxuICAgICAgICAgICAgcmV0dXJuIHEudG9rZW5pemUgPSBFLCBBKFwianNvbmxkLWtleXdvcmRcIiwgXCJtZXRhXCIpO1xuICAgICAgICAgIGZvciAoOyAoemUgPSBLLm5leHQoKSkgIT0gbnVsbCAmJiAhKHplID09IHogJiYgIW9lKTsgKVxuICAgICAgICAgICAgb2UgPSAhb2UgJiYgemUgPT0gXCJcXFxcXCI7XG4gICAgICAgICAgcmV0dXJuIG9lIHx8IChxLnRva2VuaXplID0gRSksIEEoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBNKHosIEspIHtcbiAgICAgICAgZm9yICh2YXIgcSA9ICExLCBvZTsgb2UgPSB6Lm5leHQoKTsgKSB7XG4gICAgICAgICAgaWYgKG9lID09IFwiL1wiICYmIHEpIHtcbiAgICAgICAgICAgIEsudG9rZW5pemUgPSBFO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBvZSA9PSBcIipcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQShcImNvbW1lbnRcIiwgXCJjb21tZW50XCIpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24geSh6LCBLKSB7XG4gICAgICAgIGZvciAodmFyIHEgPSAhMSwgb2U7IChvZSA9IHoubmV4dCgpKSAhPSBudWxsOyApIHtcbiAgICAgICAgICBpZiAoIXEgJiYgKG9lID09IFwiYFwiIHx8IG9lID09IFwiJFwiICYmIHouZWF0KFwie1wiKSkpIHtcbiAgICAgICAgICAgIEsudG9rZW5pemUgPSBFO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSAhcSAmJiBvZSA9PSBcIlxcXFxcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQShcInF1YXNpXCIsIFwic3RyaW5nLTJcIiwgei5jdXJyZW50KCkpO1xuICAgICAgfVxuICAgICAgdmFyIEIgPSBcIihbe31dKVwiO1xuICAgICAgZnVuY3Rpb24gJCh6LCBLKSB7XG4gICAgICAgIEsuZmF0QXJyb3dBdCAmJiAoSy5mYXRBcnJvd0F0ID0gbnVsbCk7XG4gICAgICAgIHZhciBxID0gei5zdHJpbmcuaW5kZXhPZihcIj0+XCIsIHouc3RhcnQpO1xuICAgICAgICBpZiAoIShxIDwgMCkpIHtcbiAgICAgICAgICBpZiAoYikge1xuICAgICAgICAgICAgdmFyIG9lID0gLzpcXHMqKD86XFx3Kyg/OjxbXj5dKj58XFxbXFxdKT98XFx7W159XSpcXH0pXFxzKiQvLmV4ZWMoei5zdHJpbmcuc2xpY2Uoei5zdGFydCwgcSkpO1xuICAgICAgICAgICAgb2UgJiYgKHEgPSBvZS5pbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAodmFyIHplID0gMCwgdHQgPSAhMSwgcnQgPSBxIC0gMTsgcnQgPj0gMDsgLS1ydCkge1xuICAgICAgICAgICAgdmFyIFB0ID0gei5zdHJpbmcuY2hhckF0KHJ0KSwgeW4gPSBCLmluZGV4T2YoUHQpO1xuICAgICAgICAgICAgaWYgKHluID49IDAgJiYgeW4gPCAzKSB7XG4gICAgICAgICAgICAgIGlmICghemUpIHtcbiAgICAgICAgICAgICAgICArK3J0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICgtLXplID09IDApIHtcbiAgICAgICAgICAgICAgICBQdCA9PSBcIihcIiAmJiAodHQgPSAhMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeW4gPj0gMyAmJiB5biA8IDYpXG4gICAgICAgICAgICAgICsremU7XG4gICAgICAgICAgICBlbHNlIGlmIChTLnRlc3QoUHQpKVxuICAgICAgICAgICAgICB0dCA9ICEwO1xuICAgICAgICAgICAgZWxzZSBpZiAoL1tcIidcXC9gXS8udGVzdChQdCkpXG4gICAgICAgICAgICAgIGZvciAoOyA7IC0tcnQpIHtcbiAgICAgICAgICAgICAgICBpZiAocnQgPT0gMClcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB2YXIgVmUgPSB6LnN0cmluZy5jaGFyQXQocnQgLSAxKTtcbiAgICAgICAgICAgICAgICBpZiAoVmUgPT0gUHQgJiYgei5zdHJpbmcuY2hhckF0KHJ0IC0gMikgIT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgIHJ0LS07XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR0ICYmICF6ZSkge1xuICAgICAgICAgICAgICArK3J0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdHQgJiYgIXplICYmIChLLmZhdEFycm93QXQgPSBydCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBGID0ge1xuICAgICAgICBhdG9tOiAhMCxcbiAgICAgICAgbnVtYmVyOiAhMCxcbiAgICAgICAgdmFyaWFibGU6ICEwLFxuICAgICAgICBzdHJpbmc6ICEwLFxuICAgICAgICByZWdleHA6ICEwLFxuICAgICAgICB0aGlzOiAhMCxcbiAgICAgICAgaW1wb3J0OiAhMCxcbiAgICAgICAgXCJqc29ubGQta2V5d29yZFwiOiAhMFxuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIGsoeiwgSywgcSwgb2UsIHplLCB0dCkge1xuICAgICAgICB0aGlzLmluZGVudGVkID0geiwgdGhpcy5jb2x1bW4gPSBLLCB0aGlzLnR5cGUgPSBxLCB0aGlzLnByZXYgPSB6ZSwgdGhpcy5pbmZvID0gdHQsIG9lICE9IG51bGwgJiYgKHRoaXMuYWxpZ24gPSBvZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBoKHosIEspIHtcbiAgICAgICAgaWYgKCF2KVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgZm9yICh2YXIgcSA9IHoubG9jYWxWYXJzOyBxOyBxID0gcS5uZXh0KVxuICAgICAgICAgIGlmIChxLm5hbWUgPT0gSylcbiAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgZm9yICh2YXIgb2UgPSB6LmNvbnRleHQ7IG9lOyBvZSA9IG9lLnByZXYpXG4gICAgICAgICAgZm9yICh2YXIgcSA9IG9lLnZhcnM7IHE7IHEgPSBxLm5leHQpXG4gICAgICAgICAgICBpZiAocS5uYW1lID09IEspXG4gICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE4oeiwgSywgcSwgb2UsIHplKSB7XG4gICAgICAgIHZhciB0dCA9IHouY2M7XG4gICAgICAgIGZvciAoUC5zdGF0ZSA9IHosIFAuc3RyZWFtID0gemUsIFAubWFya2VkID0gbnVsbCwgUC5jYyA9IHR0LCBQLnN0eWxlID0gSywgei5sZXhpY2FsLmhhc093blByb3BlcnR5KFwiYWxpZ25cIikgfHwgKHoubGV4aWNhbC5hbGlnbiA9ICEwKTsgOyApIHtcbiAgICAgICAgICB2YXIgcnQgPSB0dC5sZW5ndGggPyB0dC5wb3AoKSA6IHAgPyBBZSA6IHRlO1xuICAgICAgICAgIGlmIChydChxLCBvZSkpIHtcbiAgICAgICAgICAgIGZvciAoOyB0dC5sZW5ndGggJiYgdHRbdHQubGVuZ3RoIC0gMV0ubGV4OyApXG4gICAgICAgICAgICAgIHR0LnBvcCgpKCk7XG4gICAgICAgICAgICByZXR1cm4gUC5tYXJrZWQgPyBQLm1hcmtlZCA6IHEgPT0gXCJ2YXJpYWJsZVwiICYmIGgoeiwgb2UpID8gXCJ2YXJpYWJsZS0yXCIgOiBLO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIFAgPSB7IHN0YXRlOiBudWxsLCBjb2x1bW46IG51bGwsIG1hcmtlZDogbnVsbCwgY2M6IG51bGwgfTtcbiAgICAgIGZ1bmN0aW9uIGooKSB7XG4gICAgICAgIGZvciAodmFyIHogPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgeiA+PSAwOyB6LS0pXG4gICAgICAgICAgUC5jYy5wdXNoKGFyZ3VtZW50c1t6XSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBJKCkge1xuICAgICAgICByZXR1cm4gai5hcHBseShudWxsLCBhcmd1bWVudHMpLCAhMDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFYoeiwgSykge1xuICAgICAgICBmb3IgKHZhciBxID0gSzsgcTsgcSA9IHEubmV4dClcbiAgICAgICAgICBpZiAocS5uYW1lID09IHopXG4gICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFcoeikge1xuICAgICAgICB2YXIgSyA9IFAuc3RhdGU7XG4gICAgICAgIGlmIChQLm1hcmtlZCA9IFwiZGVmXCIsICEhdikge1xuICAgICAgICAgIGlmIChLLmNvbnRleHQpIHtcbiAgICAgICAgICAgIGlmIChLLmxleGljYWwuaW5mbyA9PSBcInZhclwiICYmIEsuY29udGV4dCAmJiBLLmNvbnRleHQuYmxvY2spIHtcbiAgICAgICAgICAgICAgdmFyIHEgPSBRKHosIEsuY29udGV4dCk7XG4gICAgICAgICAgICAgIGlmIChxICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBLLmNvbnRleHQgPSBxO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghVih6LCBLLmxvY2FsVmFycykpIHtcbiAgICAgICAgICAgICAgSy5sb2NhbFZhcnMgPSBuZXcgWih6LCBLLmxvY2FsVmFycyk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdC5nbG9iYWxWYXJzICYmICFWKHosIEsuZ2xvYmFsVmFycykgJiYgKEsuZ2xvYmFsVmFycyA9IG5ldyBaKHosIEsuZ2xvYmFsVmFycykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBRKHosIEspIHtcbiAgICAgICAgaWYgKEspXG4gICAgICAgICAgaWYgKEsuYmxvY2spIHtcbiAgICAgICAgICAgIHZhciBxID0gUSh6LCBLLnByZXYpO1xuICAgICAgICAgICAgcmV0dXJuIHEgPyBxID09IEsucHJldiA/IEsgOiBuZXcgSihxLCBLLnZhcnMsICEwKSA6IG51bGw7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICByZXR1cm4gVih6LCBLLnZhcnMpID8gSyA6IG5ldyBKKEsucHJldiwgbmV3IFooeiwgSy52YXJzKSwgITEpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBYKHopIHtcbiAgICAgICAgcmV0dXJuIHogPT0gXCJwdWJsaWNcIiB8fCB6ID09IFwicHJpdmF0ZVwiIHx8IHogPT0gXCJwcm90ZWN0ZWRcIiB8fCB6ID09IFwiYWJzdHJhY3RcIiB8fCB6ID09IFwicmVhZG9ubHlcIjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEooeiwgSywgcSkge1xuICAgICAgICB0aGlzLnByZXYgPSB6LCB0aGlzLnZhcnMgPSBLLCB0aGlzLmJsb2NrID0gcTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFooeiwgSykge1xuICAgICAgICB0aGlzLm5hbWUgPSB6LCB0aGlzLm5leHQgPSBLO1xuICAgICAgfVxuICAgICAgdmFyIGRlID0gbmV3IFooXCJ0aGlzXCIsIG5ldyBaKFwiYXJndW1lbnRzXCIsIG51bGwpKTtcbiAgICAgIGZ1bmN0aW9uIHZlKCkge1xuICAgICAgICBQLnN0YXRlLmNvbnRleHQgPSBuZXcgSihQLnN0YXRlLmNvbnRleHQsIFAuc3RhdGUubG9jYWxWYXJzLCAhMSksIFAuc3RhdGUubG9jYWxWYXJzID0gZGU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzZSgpIHtcbiAgICAgICAgUC5zdGF0ZS5jb250ZXh0ID0gbmV3IEooUC5zdGF0ZS5jb250ZXh0LCBQLnN0YXRlLmxvY2FsVmFycywgITApLCBQLnN0YXRlLmxvY2FsVmFycyA9IG51bGw7XG4gICAgICB9XG4gICAgICB2ZS5sZXggPSBzZS5sZXggPSAhMDtcbiAgICAgIGZ1bmN0aW9uIG1lKCkge1xuICAgICAgICBQLnN0YXRlLmxvY2FsVmFycyA9IFAuc3RhdGUuY29udGV4dC52YXJzLCBQLnN0YXRlLmNvbnRleHQgPSBQLnN0YXRlLmNvbnRleHQucHJldjtcbiAgICAgIH1cbiAgICAgIG1lLmxleCA9ICEwO1xuICAgICAgZnVuY3Rpb24gbGUoeiwgSykge1xuICAgICAgICB2YXIgcSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBvZSA9IFAuc3RhdGUsIHplID0gb2UuaW5kZW50ZWQ7XG4gICAgICAgICAgaWYgKG9lLmxleGljYWwudHlwZSA9PSBcInN0YXRcIilcbiAgICAgICAgICAgIHplID0gb2UubGV4aWNhbC5pbmRlbnRlZDtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmb3IgKHZhciB0dCA9IG9lLmxleGljYWw7IHR0ICYmIHR0LnR5cGUgPT0gXCIpXCIgJiYgdHQuYWxpZ247IHR0ID0gdHQucHJldilcbiAgICAgICAgICAgICAgemUgPSB0dC5pbmRlbnRlZDtcbiAgICAgICAgICBvZS5sZXhpY2FsID0gbmV3IGsoemUsIFAuc3RyZWFtLmNvbHVtbigpLCB6LCBudWxsLCBvZS5sZXhpY2FsLCBLKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHEubGV4ID0gITAsIHE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBpZSgpIHtcbiAgICAgICAgdmFyIHogPSBQLnN0YXRlO1xuICAgICAgICB6LmxleGljYWwucHJldiAmJiAoei5sZXhpY2FsLnR5cGUgPT0gXCIpXCIgJiYgKHouaW5kZW50ZWQgPSB6LmxleGljYWwuaW5kZW50ZWQpLCB6LmxleGljYWwgPSB6LmxleGljYWwucHJldik7XG4gICAgICB9XG4gICAgICBpZS5sZXggPSAhMDtcbiAgICAgIGZ1bmN0aW9uIHBlKHopIHtcbiAgICAgICAgZnVuY3Rpb24gSyhxKSB7XG4gICAgICAgICAgcmV0dXJuIHEgPT0geiA/IEkoKSA6IHogPT0gXCI7XCIgfHwgcSA9PSBcIn1cIiB8fCBxID09IFwiKVwiIHx8IHEgPT0gXCJdXCIgPyBqKCkgOiBJKEspO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBLO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdGUoeiwgSykge1xuICAgICAgICByZXR1cm4geiA9PSBcInZhclwiID8gSShsZShcInZhcmRlZlwiLCBLKSwgSW4sIHBlKFwiO1wiKSwgaWUpIDogeiA9PSBcImtleXdvcmQgYVwiID8gSShsZShcImZvcm1cIiksIFllLCB0ZSwgaWUpIDogeiA9PSBcImtleXdvcmQgYlwiID8gSShsZShcImZvcm1cIiksIHRlLCBpZSkgOiB6ID09IFwia2V5d29yZCBkXCIgPyBQLnN0cmVhbS5tYXRjaCgvXlxccyokLywgITEpID8gSSgpIDogSShsZShcInN0YXRcIiksIGV0LCBwZShcIjtcIiksIGllKSA6IHogPT0gXCJkZWJ1Z2dlclwiID8gSShwZShcIjtcIikpIDogeiA9PSBcIntcIiA/IEkobGUoXCJ9XCIpLCBzZSwgcWUsIGllLCBtZSkgOiB6ID09IFwiO1wiID8gSSgpIDogeiA9PSBcImlmXCIgPyAoUC5zdGF0ZS5sZXhpY2FsLmluZm8gPT0gXCJlbHNlXCIgJiYgUC5zdGF0ZS5jY1tQLnN0YXRlLmNjLmxlbmd0aCAtIDFdID09IGllICYmIFAuc3RhdGUuY2MucG9wKCkoKSwgSShsZShcImZvcm1cIiksIFllLCB0ZSwgaWUsIFhyKSkgOiB6ID09IFwiZnVuY3Rpb25cIiA/IEkoam4pIDogeiA9PSBcImZvclwiID8gSShsZShcImZvcm1cIiksIHNlLCBEbywgdGUsIG1lLCBpZSkgOiB6ID09IFwiY2xhc3NcIiB8fCBiICYmIEsgPT0gXCJpbnRlcmZhY2VcIiA/IChQLm1hcmtlZCA9IFwia2V5d29yZFwiLCBJKGxlKFwiZm9ybVwiLCB6ID09IFwiY2xhc3NcIiA/IHogOiBLKSwgTW8sIGllKSkgOiB6ID09IFwidmFyaWFibGVcIiA/IGIgJiYgSyA9PSBcImRlY2xhcmVcIiA/IChQLm1hcmtlZCA9IFwia2V5d29yZFwiLCBJKHRlKSkgOiBiICYmIChLID09IFwibW9kdWxlXCIgfHwgSyA9PSBcImVudW1cIiB8fCBLID09IFwidHlwZVwiKSAmJiBQLnN0cmVhbS5tYXRjaCgvXlxccypcXHcvLCAhMSkgPyAoUC5tYXJrZWQgPSBcImtleXdvcmRcIiwgSyA9PSBcImVudW1cIiA/IEkoWnIpIDogSyA9PSBcInR5cGVcIiA/IEkoUm8sIHBlKFwib3BlcmF0b3JcIiksIG5lLCBwZShcIjtcIikpIDogSShsZShcImZvcm1cIiksIGVuLCBwZShcIntcIiksIGxlKFwifVwiKSwgcWUsIGllLCBpZSkpIDogYiAmJiBLID09IFwibmFtZXNwYWNlXCIgPyAoUC5tYXJrZWQgPSBcImtleXdvcmRcIiwgSShsZShcImZvcm1cIiksIEFlLCB0ZSwgaWUpKSA6IGIgJiYgSyA9PSBcImFic3RyYWN0XCIgPyAoUC5tYXJrZWQgPSBcImtleXdvcmRcIiwgSSh0ZSkpIDogSShsZShcInN0YXRcIiksIG1uKSA6IHogPT0gXCJzd2l0Y2hcIiA/IEkoXG4gICAgICAgICAgbGUoXCJmb3JtXCIpLFxuICAgICAgICAgIFllLFxuICAgICAgICAgIHBlKFwie1wiKSxcbiAgICAgICAgICBsZShcIn1cIiwgXCJzd2l0Y2hcIiksXG4gICAgICAgICAgc2UsXG4gICAgICAgICAgcWUsXG4gICAgICAgICAgaWUsXG4gICAgICAgICAgaWUsXG4gICAgICAgICAgbWVcbiAgICAgICAgKSA6IHogPT0gXCJjYXNlXCIgPyBJKEFlLCBwZShcIjpcIikpIDogeiA9PSBcImRlZmF1bHRcIiA/IEkocGUoXCI6XCIpKSA6IHogPT0gXCJjYXRjaFwiID8gSShsZShcImZvcm1cIiksIHZlLCBnZSwgdGUsIGllLCBtZSkgOiB6ID09IFwiZXhwb3J0XCIgPyBJKGxlKFwic3RhdFwiKSwgdnIsIGllKSA6IHogPT0gXCJpbXBvcnRcIiA/IEkobGUoXCJzdGF0XCIpLCBxbiwgaWUpIDogeiA9PSBcImFzeW5jXCIgPyBJKHRlKSA6IEsgPT0gXCJAXCIgPyBJKEFlLCB0ZSkgOiBqKGxlKFwic3RhdFwiKSwgQWUsIHBlKFwiO1wiKSwgaWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZ2Uoeikge1xuICAgICAgICBpZiAoeiA9PSBcIihcIilcbiAgICAgICAgICByZXR1cm4gSShObiwgcGUoXCIpXCIpKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEFlKHosIEspIHtcbiAgICAgICAgcmV0dXJuIG50KHosIEssICExKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE1lKHosIEspIHtcbiAgICAgICAgcmV0dXJuIG50KHosIEssICEwKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFllKHopIHtcbiAgICAgICAgcmV0dXJuIHogIT0gXCIoXCIgPyBqKCkgOiBJKGxlKFwiKVwiKSwgZXQsIHBlKFwiKVwiKSwgaWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbnQoeiwgSywgcSkge1xuICAgICAgICBpZiAoUC5zdGF0ZS5mYXRBcnJvd0F0ID09IFAuc3RyZWFtLnN0YXJ0KSB7XG4gICAgICAgICAgdmFyIG9lID0gcSA/IEJ0IDogc247XG4gICAgICAgICAgaWYgKHogPT0gXCIoXCIpXG4gICAgICAgICAgICByZXR1cm4gSSh2ZSwgbGUoXCIpXCIpLCBhdChObiwgXCIpXCIpLCBpZSwgcGUoXCI9PlwiKSwgb2UsIG1lKTtcbiAgICAgICAgICBpZiAoeiA9PSBcInZhcmlhYmxlXCIpXG4gICAgICAgICAgICByZXR1cm4gaih2ZSwgZW4sIHBlKFwiPT5cIiksIG9lLCBtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHplID0gcSA/IHl0IDogZ3Q7XG4gICAgICAgIHJldHVybiBGLmhhc093blByb3BlcnR5KHopID8gSSh6ZSkgOiB6ID09IFwiZnVuY3Rpb25cIiA/IEkoam4sIHplKSA6IHogPT0gXCJjbGFzc1wiIHx8IGIgJiYgSyA9PSBcImludGVyZmFjZVwiID8gKFAubWFya2VkID0gXCJrZXl3b3JkXCIsIEkobGUoXCJmb3JtXCIpLCBociwgaWUpKSA6IHogPT0gXCJrZXl3b3JkIGNcIiB8fCB6ID09IFwiYXN5bmNcIiA/IEkocSA/IE1lIDogQWUpIDogeiA9PSBcIihcIiA/IEkobGUoXCIpXCIpLCBldCwgcGUoXCIpXCIpLCBpZSwgemUpIDogeiA9PSBcIm9wZXJhdG9yXCIgfHwgeiA9PSBcInNwcmVhZFwiID8gSShxID8gTWUgOiBBZSkgOiB6ID09IFwiW1wiID8gSShsZShcIl1cIiksIF9uLCBpZSwgemUpIDogeiA9PSBcIntcIiA/IHVuKGduLCBcIn1cIiwgbnVsbCwgemUpIDogeiA9PSBcInF1YXNpXCIgPyBqKEJlLCB6ZSkgOiB6ID09IFwibmV3XCIgPyBJKGRyKHEpKSA6IEkoKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGV0KHopIHtcbiAgICAgICAgcmV0dXJuIHoubWF0Y2goL1s7XFx9XFwpXFxdLF0vKSA/IGooKSA6IGooQWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZ3QoeiwgSykge1xuICAgICAgICByZXR1cm4geiA9PSBcIixcIiA/IEkoZXQpIDogeXQoeiwgSywgITEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24geXQoeiwgSywgcSkge1xuICAgICAgICB2YXIgb2UgPSBxID09ICExID8gZ3QgOiB5dCwgemUgPSBxID09ICExID8gQWUgOiBNZTtcbiAgICAgICAgaWYgKHogPT0gXCI9PlwiKVxuICAgICAgICAgIHJldHVybiBJKHZlLCBxID8gQnQgOiBzbiwgbWUpO1xuICAgICAgICBpZiAoeiA9PSBcIm9wZXJhdG9yXCIpXG4gICAgICAgICAgcmV0dXJuIC9cXCtcXCt8LS0vLnRlc3QoSykgfHwgYiAmJiBLID09IFwiIVwiID8gSShvZSkgOiBiICYmIEsgPT0gXCI8XCIgJiYgUC5zdHJlYW0ubWF0Y2goL14oW148Pl18PFtePD5dKj4pKj5cXHMqXFwoLywgITEpID8gSShsZShcIj5cIiksIGF0KG5lLCBcIj5cIiksIGllLCBvZSkgOiBLID09IFwiP1wiID8gSShBZSwgcGUoXCI6XCIpLCB6ZSkgOiBJKHplKTtcbiAgICAgICAgaWYgKHogPT0gXCJxdWFzaVwiKVxuICAgICAgICAgIHJldHVybiBqKEJlLCBvZSk7XG4gICAgICAgIGlmICh6ICE9IFwiO1wiKSB7XG4gICAgICAgICAgaWYgKHogPT0gXCIoXCIpXG4gICAgICAgICAgICByZXR1cm4gdW4oTWUsIFwiKVwiLCBcImNhbGxcIiwgb2UpO1xuICAgICAgICAgIGlmICh6ID09IFwiLlwiKVxuICAgICAgICAgICAgcmV0dXJuIEkoa24sIG9lKTtcbiAgICAgICAgICBpZiAoeiA9PSBcIltcIilcbiAgICAgICAgICAgIHJldHVybiBJKGxlKFwiXVwiKSwgZXQsIHBlKFwiXVwiKSwgaWUsIG9lKTtcbiAgICAgICAgICBpZiAoYiAmJiBLID09IFwiYXNcIilcbiAgICAgICAgICAgIHJldHVybiBQLm1hcmtlZCA9IFwia2V5d29yZFwiLCBJKG5lLCBvZSk7XG4gICAgICAgICAgaWYgKHogPT0gXCJyZWdleHBcIilcbiAgICAgICAgICAgIHJldHVybiBQLnN0YXRlLmxhc3RUeXBlID0gUC5tYXJrZWQgPSBcIm9wZXJhdG9yXCIsIFAuc3RyZWFtLmJhY2tVcChQLnN0cmVhbS5wb3MgLSBQLnN0cmVhbS5zdGFydCAtIDEpLCBJKHplKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gQmUoeiwgSykge1xuICAgICAgICByZXR1cm4geiAhPSBcInF1YXNpXCIgPyBqKCkgOiBLLnNsaWNlKEsubGVuZ3RoIC0gMikgIT0gXCIke1wiID8gSShCZSkgOiBJKGV0LCBwdCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwdCh6KSB7XG4gICAgICAgIGlmICh6ID09IFwifVwiKVxuICAgICAgICAgIHJldHVybiBQLm1hcmtlZCA9IFwic3RyaW5nLTJcIiwgUC5zdGF0ZS50b2tlbml6ZSA9IHksIEkoQmUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gc24oeikge1xuICAgICAgICByZXR1cm4gJChQLnN0cmVhbSwgUC5zdGF0ZSksIGooeiA9PSBcIntcIiA/IHRlIDogQWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gQnQoeikge1xuICAgICAgICByZXR1cm4gJChQLnN0cmVhbSwgUC5zdGF0ZSksIGooeiA9PSBcIntcIiA/IHRlIDogTWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZHIoeikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oSykge1xuICAgICAgICAgIHJldHVybiBLID09IFwiLlwiID8gSSh6ID8gdm4gOiAkbikgOiBLID09IFwidmFyaWFibGVcIiAmJiBiID8gSShsdCwgeiA/IHl0IDogZ3QpIDogaih6ID8gTWUgOiBBZSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiAkbih6LCBLKSB7XG4gICAgICAgIGlmIChLID09IFwidGFyZ2V0XCIpXG4gICAgICAgICAgcmV0dXJuIFAubWFya2VkID0gXCJrZXl3b3JkXCIsIEkoZ3QpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdm4oeiwgSykge1xuICAgICAgICBpZiAoSyA9PSBcInRhcmdldFwiKVxuICAgICAgICAgIHJldHVybiBQLm1hcmtlZCA9IFwia2V5d29yZFwiLCBJKHl0KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG1uKHopIHtcbiAgICAgICAgcmV0dXJuIHogPT0gXCI6XCIgPyBJKGllLCB0ZSkgOiBqKGd0LCBwZShcIjtcIiksIGllKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGtuKHopIHtcbiAgICAgICAgaWYgKHogPT0gXCJ2YXJpYWJsZVwiKVxuICAgICAgICAgIHJldHVybiBQLm1hcmtlZCA9IFwicHJvcGVydHlcIiwgSSgpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZ24oeiwgSykge1xuICAgICAgICBpZiAoeiA9PSBcImFzeW5jXCIpXG4gICAgICAgICAgcmV0dXJuIFAubWFya2VkID0gXCJwcm9wZXJ0eVwiLCBJKGduKTtcbiAgICAgICAgaWYgKHogPT0gXCJ2YXJpYWJsZVwiIHx8IFAuc3R5bGUgPT0gXCJrZXl3b3JkXCIpIHtcbiAgICAgICAgICBpZiAoUC5tYXJrZWQgPSBcInByb3BlcnR5XCIsIEsgPT0gXCJnZXRcIiB8fCBLID09IFwic2V0XCIpXG4gICAgICAgICAgICByZXR1cm4gSSh4bik7XG4gICAgICAgICAgdmFyIHE7XG4gICAgICAgICAgcmV0dXJuIGIgJiYgUC5zdGF0ZS5mYXRBcnJvd0F0ID09IFAuc3RyZWFtLnN0YXJ0ICYmIChxID0gUC5zdHJlYW0ubWF0Y2goL15cXHMqOlxccyovLCAhMSkpICYmIChQLnN0YXRlLmZhdEFycm93QXQgPSBQLnN0cmVhbS5wb3MgKyBxWzBdLmxlbmd0aCksIEkoT3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh6ID09IFwibnVtYmVyXCIgfHwgeiA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgcmV0dXJuIFAubWFya2VkID0gYyA/IFwicHJvcGVydHlcIiA6IFAuc3R5bGUgKyBcIiBwcm9wZXJ0eVwiLCBJKE90KTtcbiAgICAgICAgICBpZiAoeiA9PSBcImpzb25sZC1rZXl3b3JkXCIpXG4gICAgICAgICAgICByZXR1cm4gSShPdCk7XG4gICAgICAgICAgaWYgKGIgJiYgWChLKSlcbiAgICAgICAgICAgIHJldHVybiBQLm1hcmtlZCA9IFwia2V5d29yZFwiLCBJKGduKTtcbiAgICAgICAgICBpZiAoeiA9PSBcIltcIilcbiAgICAgICAgICAgIHJldHVybiBJKEFlLCBEZSwgcGUoXCJdXCIpLCBPdCk7XG4gICAgICAgICAgaWYgKHogPT0gXCJzcHJlYWRcIilcbiAgICAgICAgICAgIHJldHVybiBJKE1lLCBPdCk7XG4gICAgICAgICAgaWYgKEsgPT0gXCIqXCIpXG4gICAgICAgICAgICByZXR1cm4gUC5tYXJrZWQgPSBcImtleXdvcmRcIiwgSShnbik7XG4gICAgICAgICAgaWYgKHogPT0gXCI6XCIpXG4gICAgICAgICAgICByZXR1cm4gaihPdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHhuKHopIHtcbiAgICAgICAgcmV0dXJuIHogIT0gXCJ2YXJpYWJsZVwiID8gaihPdCkgOiAoUC5tYXJrZWQgPSBcInByb3BlcnR5XCIsIEkoam4pKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE90KHopIHtcbiAgICAgICAgaWYgKHogPT0gXCI6XCIpXG4gICAgICAgICAgcmV0dXJuIEkoTWUpO1xuICAgICAgICBpZiAoeiA9PSBcIihcIilcbiAgICAgICAgICByZXR1cm4gaihqbik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBhdCh6LCBLLCBxKSB7XG4gICAgICAgIGZ1bmN0aW9uIG9lKHplLCB0dCkge1xuICAgICAgICAgIGlmIChxID8gcS5pbmRleE9mKHplKSA+IC0xIDogemUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgIHZhciBydCA9IFAuc3RhdGUubGV4aWNhbDtcbiAgICAgICAgICAgIHJldHVybiBydC5pbmZvID09IFwiY2FsbFwiICYmIChydC5wb3MgPSAocnQucG9zIHx8IDApICsgMSksIEkoZnVuY3Rpb24oUHQsIHluKSB7XG4gICAgICAgICAgICAgIHJldHVybiBQdCA9PSBLIHx8IHluID09IEsgPyBqKCkgOiBqKHopO1xuICAgICAgICAgICAgfSwgb2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gemUgPT0gSyB8fCB0dCA9PSBLID8gSSgpIDogcSAmJiBxLmluZGV4T2YoXCI7XCIpID4gLTEgPyBqKHopIDogSShwZShLKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHplLCB0dCkge1xuICAgICAgICAgIHJldHVybiB6ZSA9PSBLIHx8IHR0ID09IEsgPyBJKCkgOiBqKHosIG9lKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHVuKHosIEssIHEpIHtcbiAgICAgICAgZm9yICh2YXIgb2UgPSAzOyBvZSA8IGFyZ3VtZW50cy5sZW5ndGg7IG9lKyspXG4gICAgICAgICAgUC5jYy5wdXNoKGFyZ3VtZW50c1tvZV0pO1xuICAgICAgICByZXR1cm4gSShsZShLLCBxKSwgYXQoeiwgSyksIGllKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHFlKHopIHtcbiAgICAgICAgcmV0dXJuIHogPT0gXCJ9XCIgPyBJKCkgOiBqKHRlLCBxZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBEZSh6LCBLKSB7XG4gICAgICAgIGlmIChiKSB7XG4gICAgICAgICAgaWYgKHogPT0gXCI6XCIpXG4gICAgICAgICAgICByZXR1cm4gSShuZSk7XG4gICAgICAgICAgaWYgKEsgPT0gXCI/XCIpXG4gICAgICAgICAgICByZXR1cm4gSShEZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHdlKHosIEspIHtcbiAgICAgICAgaWYgKGIgJiYgKHogPT0gXCI6XCIgfHwgSyA9PSBcImluXCIpKVxuICAgICAgICAgIHJldHVybiBJKG5lKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFVlKHopIHtcbiAgICAgICAgaWYgKGIgJiYgeiA9PSBcIjpcIilcbiAgICAgICAgICByZXR1cm4gUC5zdHJlYW0ubWF0Y2goL15cXHMqXFx3K1xccytpc1xcYi8sICExKSA/IEkoQWUsIFJlLCBuZSkgOiBJKG5lKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFJlKHosIEspIHtcbiAgICAgICAgaWYgKEsgPT0gXCJpc1wiKVxuICAgICAgICAgIHJldHVybiBQLm1hcmtlZCA9IFwia2V5d29yZFwiLCBJKCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBuZSh6LCBLKSB7XG4gICAgICAgIGlmIChLID09IFwia2V5b2ZcIiB8fCBLID09IFwidHlwZW9mXCIgfHwgSyA9PSBcImluZmVyXCIgfHwgSyA9PSBcInJlYWRvbmx5XCIpXG4gICAgICAgICAgcmV0dXJuIFAubWFya2VkID0gXCJrZXl3b3JkXCIsIEkoSyA9PSBcInR5cGVvZlwiID8gTWUgOiBuZSk7XG4gICAgICAgIGlmICh6ID09IFwidmFyaWFibGVcIiB8fCBLID09IFwidm9pZFwiKVxuICAgICAgICAgIHJldHVybiBQLm1hcmtlZCA9IFwidHlwZVwiLCBJKG10KTtcbiAgICAgICAgaWYgKEsgPT0gXCJ8XCIgfHwgSyA9PSBcIiZcIilcbiAgICAgICAgICByZXR1cm4gSShuZSk7XG4gICAgICAgIGlmICh6ID09IFwic3RyaW5nXCIgfHwgeiA9PSBcIm51bWJlclwiIHx8IHogPT0gXCJhdG9tXCIpXG4gICAgICAgICAgcmV0dXJuIEkobXQpO1xuICAgICAgICBpZiAoeiA9PSBcIltcIilcbiAgICAgICAgICByZXR1cm4gSShsZShcIl1cIiksIGF0KG5lLCBcIl1cIiwgXCIsXCIpLCBpZSwgbXQpO1xuICAgICAgICBpZiAoeiA9PSBcIntcIilcbiAgICAgICAgICByZXR1cm4gSShsZShcIn1cIiksIE9lLCBpZSwgbXQpO1xuICAgICAgICBpZiAoeiA9PSBcIihcIilcbiAgICAgICAgICByZXR1cm4gSShhdChidCwgXCIpXCIpLCBMZSwgbXQpO1xuICAgICAgICBpZiAoeiA9PSBcIjxcIilcbiAgICAgICAgICByZXR1cm4gSShhdChuZSwgXCI+XCIpLCBuZSk7XG4gICAgICAgIGlmICh6ID09IFwicXVhc2lcIilcbiAgICAgICAgICByZXR1cm4gaihRZSwgbXQpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gTGUoeikge1xuICAgICAgICBpZiAoeiA9PSBcIj0+XCIpXG4gICAgICAgICAgcmV0dXJuIEkobmUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gT2Uoeikge1xuICAgICAgICByZXR1cm4gei5tYXRjaCgvW1xcfVxcKVxcXV0vKSA/IEkoKSA6IHogPT0gXCIsXCIgfHwgeiA9PSBcIjtcIiA/IEkoT2UpIDogaihQZSwgT2UpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gUGUoeiwgSykge1xuICAgICAgICBpZiAoeiA9PSBcInZhcmlhYmxlXCIgfHwgUC5zdHlsZSA9PSBcImtleXdvcmRcIilcbiAgICAgICAgICByZXR1cm4gUC5tYXJrZWQgPSBcInByb3BlcnR5XCIsIEkoUGUpO1xuICAgICAgICBpZiAoSyA9PSBcIj9cIiB8fCB6ID09IFwibnVtYmVyXCIgfHwgeiA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgIHJldHVybiBJKFBlKTtcbiAgICAgICAgaWYgKHogPT0gXCI6XCIpXG4gICAgICAgICAgcmV0dXJuIEkobmUpO1xuICAgICAgICBpZiAoeiA9PSBcIltcIilcbiAgICAgICAgICByZXR1cm4gSShwZShcInZhcmlhYmxlXCIpLCB3ZSwgcGUoXCJdXCIpLCBQZSk7XG4gICAgICAgIGlmICh6ID09IFwiKFwiKVxuICAgICAgICAgIHJldHVybiBqKFVuLCBQZSk7XG4gICAgICAgIGlmICghei5tYXRjaCgvWztcXH1cXClcXF0sXS8pKVxuICAgICAgICAgIHJldHVybiBJKCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBRZSh6LCBLKSB7XG4gICAgICAgIHJldHVybiB6ICE9IFwicXVhc2lcIiA/IGooKSA6IEsuc2xpY2UoSy5sZW5ndGggLSAyKSAhPSBcIiR7XCIgPyBJKFFlKSA6IEkobmUsIF90KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF90KHopIHtcbiAgICAgICAgaWYgKHogPT0gXCJ9XCIpXG4gICAgICAgICAgcmV0dXJuIFAubWFya2VkID0gXCJzdHJpbmctMlwiLCBQLnN0YXRlLnRva2VuaXplID0geSwgSShRZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBidCh6LCBLKSB7XG4gICAgICAgIHJldHVybiB6ID09IFwidmFyaWFibGVcIiAmJiBQLnN0cmVhbS5tYXRjaCgvXlxccypbPzpdLywgITEpIHx8IEsgPT0gXCI/XCIgPyBJKGJ0KSA6IHogPT0gXCI6XCIgPyBJKG5lKSA6IHogPT0gXCJzcHJlYWRcIiA/IEkoYnQpIDogaihuZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBtdCh6LCBLKSB7XG4gICAgICAgIGlmIChLID09IFwiPFwiKVxuICAgICAgICAgIHJldHVybiBJKGxlKFwiPlwiKSwgYXQobmUsIFwiPlwiKSwgaWUsIG10KTtcbiAgICAgICAgaWYgKEsgPT0gXCJ8XCIgfHwgeiA9PSBcIi5cIiB8fCBLID09IFwiJlwiKVxuICAgICAgICAgIHJldHVybiBJKG5lKTtcbiAgICAgICAgaWYgKHogPT0gXCJbXCIpXG4gICAgICAgICAgcmV0dXJuIEkobmUsIHBlKFwiXVwiKSwgbXQpO1xuICAgICAgICBpZiAoSyA9PSBcImV4dGVuZHNcIiB8fCBLID09IFwiaW1wbGVtZW50c1wiKVxuICAgICAgICAgIHJldHVybiBQLm1hcmtlZCA9IFwia2V5d29yZFwiLCBJKG5lKTtcbiAgICAgICAgaWYgKEsgPT0gXCI/XCIpXG4gICAgICAgICAgcmV0dXJuIEkobmUsIHBlKFwiOlwiKSwgbmUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbHQoeiwgSykge1xuICAgICAgICBpZiAoSyA9PSBcIjxcIilcbiAgICAgICAgICByZXR1cm4gSShsZShcIj5cIiksIGF0KG5lLCBcIj5cIiksIGllLCBtdCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB3bigpIHtcbiAgICAgICAgcmV0dXJuIGoobmUsIGNyKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNyKHosIEspIHtcbiAgICAgICAgaWYgKEsgPT0gXCI9XCIpXG4gICAgICAgICAgcmV0dXJuIEkobmUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gSW4oeiwgSykge1xuICAgICAgICByZXR1cm4gSyA9PSBcImVudW1cIiA/IChQLm1hcmtlZCA9IFwia2V5d29yZFwiLCBJKFpyKSkgOiBqKGVuLCBEZSwgVG4sIGthKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGVuKHosIEspIHtcbiAgICAgICAgaWYgKGIgJiYgWChLKSlcbiAgICAgICAgICByZXR1cm4gUC5tYXJrZWQgPSBcImtleXdvcmRcIiwgSShlbik7XG4gICAgICAgIGlmICh6ID09IFwidmFyaWFibGVcIilcbiAgICAgICAgICByZXR1cm4gVyhLKSwgSSgpO1xuICAgICAgICBpZiAoeiA9PSBcInNwcmVhZFwiKVxuICAgICAgICAgIHJldHVybiBJKGVuKTtcbiAgICAgICAgaWYgKHogPT0gXCJbXCIpXG4gICAgICAgICAgcmV0dXJuIHVuKCRhLCBcIl1cIik7XG4gICAgICAgIGlmICh6ID09IFwie1wiKVxuICAgICAgICAgIHJldHVybiB1bihNaSwgXCJ9XCIpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gTWkoeiwgSykge1xuICAgICAgICByZXR1cm4geiA9PSBcInZhcmlhYmxlXCIgJiYgIVAuc3RyZWFtLm1hdGNoKC9eXFxzKjovLCAhMSkgPyAoVyhLKSwgSShUbikpIDogKHogPT0gXCJ2YXJpYWJsZVwiICYmIChQLm1hcmtlZCA9IFwicHJvcGVydHlcIiksIHogPT0gXCJzcHJlYWRcIiA/IEkoZW4pIDogeiA9PSBcIn1cIiA/IGooKSA6IHogPT0gXCJbXCIgPyBJKEFlLCBwZShcIl1cIiksIHBlKFwiOlwiKSwgTWkpIDogSShwZShcIjpcIiksIGVuLCBUbikpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gJGEoKSB7XG4gICAgICAgIHJldHVybiBqKGVuLCBUbik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBUbih6LCBLKSB7XG4gICAgICAgIGlmIChLID09IFwiPVwiKVxuICAgICAgICAgIHJldHVybiBJKE1lKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGthKHopIHtcbiAgICAgICAgaWYgKHogPT0gXCIsXCIpXG4gICAgICAgICAgcmV0dXJuIEkoSW4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gWHIoeiwgSykge1xuICAgICAgICBpZiAoeiA9PSBcImtleXdvcmQgYlwiICYmIEsgPT0gXCJlbHNlXCIpXG4gICAgICAgICAgcmV0dXJuIEkobGUoXCJmb3JtXCIsIFwiZWxzZVwiKSwgdGUsIGllKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIERvKHosIEspIHtcbiAgICAgICAgaWYgKEsgPT0gXCJhd2FpdFwiKVxuICAgICAgICAgIHJldHVybiBJKERvKTtcbiAgICAgICAgaWYgKHogPT0gXCIoXCIpXG4gICAgICAgICAgcmV0dXJuIEkobGUoXCIpXCIpLCBJaSwgaWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gSWkoeikge1xuICAgICAgICByZXR1cm4geiA9PSBcInZhclwiID8gSShJbiwgcHIpIDogeiA9PSBcInZhcmlhYmxlXCIgPyBJKHByKSA6IGoocHIpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcHIoeiwgSykge1xuICAgICAgICByZXR1cm4geiA9PSBcIilcIiA/IEkoKSA6IHogPT0gXCI7XCIgPyBJKHByKSA6IEsgPT0gXCJpblwiIHx8IEsgPT0gXCJvZlwiID8gKFAubWFya2VkID0gXCJrZXl3b3JkXCIsIEkoQWUsIHByKSkgOiBqKEFlLCBwcik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBqbih6LCBLKSB7XG4gICAgICAgIGlmIChLID09IFwiKlwiKVxuICAgICAgICAgIHJldHVybiBQLm1hcmtlZCA9IFwia2V5d29yZFwiLCBJKGpuKTtcbiAgICAgICAgaWYgKHogPT0gXCJ2YXJpYWJsZVwiKVxuICAgICAgICAgIHJldHVybiBXKEspLCBJKGpuKTtcbiAgICAgICAgaWYgKHogPT0gXCIoXCIpXG4gICAgICAgICAgcmV0dXJuIEkodmUsIGxlKFwiKVwiKSwgYXQoTm4sIFwiKVwiKSwgaWUsIFVlLCB0ZSwgbWUpO1xuICAgICAgICBpZiAoYiAmJiBLID09IFwiPFwiKVxuICAgICAgICAgIHJldHVybiBJKGxlKFwiPlwiKSwgYXQod24sIFwiPlwiKSwgaWUsIGpuKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFVuKHosIEspIHtcbiAgICAgICAgaWYgKEsgPT0gXCIqXCIpXG4gICAgICAgICAgcmV0dXJuIFAubWFya2VkID0gXCJrZXl3b3JkXCIsIEkoVW4pO1xuICAgICAgICBpZiAoeiA9PSBcInZhcmlhYmxlXCIpXG4gICAgICAgICAgcmV0dXJuIFcoSyksIEkoVW4pO1xuICAgICAgICBpZiAoeiA9PSBcIihcIilcbiAgICAgICAgICByZXR1cm4gSSh2ZSwgbGUoXCIpXCIpLCBhdChObiwgXCIpXCIpLCBpZSwgVWUsIG1lKTtcbiAgICAgICAgaWYgKGIgJiYgSyA9PSBcIjxcIilcbiAgICAgICAgICByZXR1cm4gSShsZShcIj5cIiksIGF0KHduLCBcIj5cIiksIGllLCBVbik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBSbyh6LCBLKSB7XG4gICAgICAgIGlmICh6ID09IFwia2V5d29yZFwiIHx8IHogPT0gXCJ2YXJpYWJsZVwiKVxuICAgICAgICAgIHJldHVybiBQLm1hcmtlZCA9IFwidHlwZVwiLCBJKFJvKTtcbiAgICAgICAgaWYgKEsgPT0gXCI8XCIpXG4gICAgICAgICAgcmV0dXJuIEkobGUoXCI+XCIpLCBhdCh3biwgXCI+XCIpLCBpZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBObih6LCBLKSB7XG4gICAgICAgIHJldHVybiBLID09IFwiQFwiICYmIEkoQWUsIE5uKSwgeiA9PSBcInNwcmVhZFwiID8gSShObikgOiBiICYmIFgoSykgPyAoUC5tYXJrZWQgPSBcImtleXdvcmRcIiwgSShObikpIDogYiAmJiB6ID09IFwidGhpc1wiID8gSShEZSwgVG4pIDogaihlbiwgRGUsIFRuKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGhyKHosIEspIHtcbiAgICAgICAgcmV0dXJuIHogPT0gXCJ2YXJpYWJsZVwiID8gTW8oeiwgSykgOiBKcih6LCBLKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE1vKHosIEspIHtcbiAgICAgICAgaWYgKHogPT0gXCJ2YXJpYWJsZVwiKVxuICAgICAgICAgIHJldHVybiBXKEspLCBJKEpyKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEpyKHosIEspIHtcbiAgICAgICAgaWYgKEsgPT0gXCI8XCIpXG4gICAgICAgICAgcmV0dXJuIEkobGUoXCI+XCIpLCBhdCh3biwgXCI+XCIpLCBpZSwgSnIpO1xuICAgICAgICBpZiAoSyA9PSBcImV4dGVuZHNcIiB8fCBLID09IFwiaW1wbGVtZW50c1wiIHx8IGIgJiYgeiA9PSBcIixcIilcbiAgICAgICAgICByZXR1cm4gSyA9PSBcImltcGxlbWVudHNcIiAmJiAoUC5tYXJrZWQgPSBcImtleXdvcmRcIiksIEkoYiA/IG5lIDogQWUsIEpyKTtcbiAgICAgICAgaWYgKHogPT0gXCJ7XCIpXG4gICAgICAgICAgcmV0dXJuIEkobGUoXCJ9XCIpLCBmbiwgaWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZm4oeiwgSykge1xuICAgICAgICBpZiAoeiA9PSBcImFzeW5jXCIgfHwgeiA9PSBcInZhcmlhYmxlXCIgJiYgKEsgPT0gXCJzdGF0aWNcIiB8fCBLID09IFwiZ2V0XCIgfHwgSyA9PSBcInNldFwiIHx8IGIgJiYgWChLKSkgJiYgUC5zdHJlYW0ubWF0Y2goL15cXHMrW1xcdyRcXHhhMS1cXHVmZmZmXS8sICExKSlcbiAgICAgICAgICByZXR1cm4gUC5tYXJrZWQgPSBcImtleXdvcmRcIiwgSShmbik7XG4gICAgICAgIGlmICh6ID09IFwidmFyaWFibGVcIiB8fCBQLnN0eWxlID09IFwia2V5d29yZFwiKVxuICAgICAgICAgIHJldHVybiBQLm1hcmtlZCA9IFwicHJvcGVydHlcIiwgSShabiwgZm4pO1xuICAgICAgICBpZiAoeiA9PSBcIm51bWJlclwiIHx8IHogPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICByZXR1cm4gSShabiwgZm4pO1xuICAgICAgICBpZiAoeiA9PSBcIltcIilcbiAgICAgICAgICByZXR1cm4gSShBZSwgRGUsIHBlKFwiXVwiKSwgWm4sIGZuKTtcbiAgICAgICAgaWYgKEsgPT0gXCIqXCIpXG4gICAgICAgICAgcmV0dXJuIFAubWFya2VkID0gXCJrZXl3b3JkXCIsIEkoZm4pO1xuICAgICAgICBpZiAoYiAmJiB6ID09IFwiKFwiKVxuICAgICAgICAgIHJldHVybiBqKFVuLCBmbik7XG4gICAgICAgIGlmICh6ID09IFwiO1wiIHx8IHogPT0gXCIsXCIpXG4gICAgICAgICAgcmV0dXJuIEkoZm4pO1xuICAgICAgICBpZiAoeiA9PSBcIn1cIilcbiAgICAgICAgICByZXR1cm4gSSgpO1xuICAgICAgICBpZiAoSyA9PSBcIkBcIilcbiAgICAgICAgICByZXR1cm4gSShBZSwgZm4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gWm4oeiwgSykge1xuICAgICAgICBpZiAoSyA9PSBcIiFcIiB8fCBLID09IFwiP1wiKVxuICAgICAgICAgIHJldHVybiBJKFpuKTtcbiAgICAgICAgaWYgKHogPT0gXCI6XCIpXG4gICAgICAgICAgcmV0dXJuIEkobmUsIFRuKTtcbiAgICAgICAgaWYgKEsgPT0gXCI9XCIpXG4gICAgICAgICAgcmV0dXJuIEkoTWUpO1xuICAgICAgICB2YXIgcSA9IFAuc3RhdGUubGV4aWNhbC5wcmV2LCBvZSA9IHEgJiYgcS5pbmZvID09IFwiaW50ZXJmYWNlXCI7XG4gICAgICAgIHJldHVybiBqKG9lID8gVW4gOiBqbik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB2cih6LCBLKSB7XG4gICAgICAgIHJldHVybiBLID09IFwiKlwiID8gKFAubWFya2VkID0gXCJrZXl3b3JkXCIsIEkoRmUsIHBlKFwiO1wiKSkpIDogSyA9PSBcImRlZmF1bHRcIiA/IChQLm1hcmtlZCA9IFwia2V5d29yZFwiLCBJKEFlLCBwZShcIjtcIikpKSA6IHogPT0gXCJ7XCIgPyBJKGF0KElvLCBcIn1cIiksIEZlLCBwZShcIjtcIikpIDogaih0ZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBJbyh6LCBLKSB7XG4gICAgICAgIGlmIChLID09IFwiYXNcIilcbiAgICAgICAgICByZXR1cm4gUC5tYXJrZWQgPSBcImtleXdvcmRcIiwgSShwZShcInZhcmlhYmxlXCIpKTtcbiAgICAgICAgaWYgKHogPT0gXCJ2YXJpYWJsZVwiKVxuICAgICAgICAgIHJldHVybiBqKE1lLCBJbyk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBxbih6KSB7XG4gICAgICAgIHJldHVybiB6ID09IFwic3RyaW5nXCIgPyBJKCkgOiB6ID09IFwiKFwiID8gaihBZSkgOiB6ID09IFwiLlwiID8gaihndCkgOiBqKG1yLCBOaSwgRmUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbXIoeiwgSykge1xuICAgICAgICByZXR1cm4geiA9PSBcIntcIiA/IHVuKG1yLCBcIn1cIikgOiAoeiA9PSBcInZhcmlhYmxlXCIgJiYgVyhLKSwgSyA9PSBcIipcIiAmJiAoUC5tYXJrZWQgPSBcImtleXdvcmRcIiksIEkoU3QpKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE5pKHopIHtcbiAgICAgICAgaWYgKHogPT0gXCIsXCIpXG4gICAgICAgICAgcmV0dXJuIEkobXIsIE5pKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFN0KHosIEspIHtcbiAgICAgICAgaWYgKEsgPT0gXCJhc1wiKVxuICAgICAgICAgIHJldHVybiBQLm1hcmtlZCA9IFwia2V5d29yZFwiLCBJKG1yKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEZlKHosIEspIHtcbiAgICAgICAgaWYgKEsgPT0gXCJmcm9tXCIpXG4gICAgICAgICAgcmV0dXJuIFAubWFya2VkID0gXCJrZXl3b3JkXCIsIEkoQWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX24oeikge1xuICAgICAgICByZXR1cm4geiA9PSBcIl1cIiA/IEkoKSA6IGooYXQoTWUsIFwiXVwiKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBacigpIHtcbiAgICAgICAgcmV0dXJuIGoobGUoXCJmb3JtXCIpLCBlbiwgcGUoXCJ7XCIpLCBsZShcIn1cIiksIGF0KERuLCBcIn1cIiksIGllLCBpZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBEbigpIHtcbiAgICAgICAgcmV0dXJuIGooZW4sIFRuKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHN0KHosIEspIHtcbiAgICAgICAgcmV0dXJuIHoubGFzdFR5cGUgPT0gXCJvcGVyYXRvclwiIHx8IHoubGFzdFR5cGUgPT0gXCIsXCIgfHwgVC50ZXN0KEsuY2hhckF0KDApKSB8fCAvWywuXS8udGVzdChLLmNoYXJBdCgwKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB6bih6LCBLLCBxKSB7XG4gICAgICAgIHJldHVybiBLLnRva2VuaXplID09IEUgJiYgL14oPzpvcGVyYXRvcnxzb2Z8a2V5d29yZCBbYmNkXXxjYXNlfG5ld3xleHBvcnR8ZGVmYXVsdHxzcHJlYWR8W1xcW3t9XFwoLDs6XXw9PikkLy50ZXN0KEsubGFzdFR5cGUpIHx8IEsubGFzdFR5cGUgPT0gXCJxdWFzaVwiICYmIC9cXHtcXHMqJC8udGVzdCh6LnN0cmluZy5zbGljZSgwLCB6LnBvcyAtIChxIHx8IDApKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbih6KSB7XG4gICAgICAgICAgdmFyIEsgPSB7XG4gICAgICAgICAgICB0b2tlbml6ZTogRSxcbiAgICAgICAgICAgIGxhc3RUeXBlOiBcInNvZlwiLFxuICAgICAgICAgICAgY2M6IFtdLFxuICAgICAgICAgICAgbGV4aWNhbDogbmV3IGsoKHogfHwgMCkgLSBzLCAwLCBcImJsb2NrXCIsICExKSxcbiAgICAgICAgICAgIGxvY2FsVmFyczogdC5sb2NhbFZhcnMsXG4gICAgICAgICAgICBjb250ZXh0OiB0LmxvY2FsVmFycyAmJiBuZXcgSihudWxsLCBudWxsLCAhMSksXG4gICAgICAgICAgICBpbmRlbnRlZDogeiB8fCAwXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gdC5nbG9iYWxWYXJzICYmIHR5cGVvZiB0Lmdsb2JhbFZhcnMgPT0gXCJvYmplY3RcIiAmJiAoSy5nbG9iYWxWYXJzID0gdC5nbG9iYWxWYXJzKSwgSztcbiAgICAgICAgfSxcbiAgICAgICAgdG9rZW46IGZ1bmN0aW9uKHosIEspIHtcbiAgICAgICAgICBpZiAoei5zb2woKSAmJiAoSy5sZXhpY2FsLmhhc093blByb3BlcnR5KFwiYWxpZ25cIikgfHwgKEsubGV4aWNhbC5hbGlnbiA9ICExKSwgSy5pbmRlbnRlZCA9IHouaW5kZW50YXRpb24oKSwgJCh6LCBLKSksIEsudG9rZW5pemUgIT0gTSAmJiB6LmVhdFNwYWNlKCkpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB2YXIgcSA9IEsudG9rZW5pemUoeiwgSyk7XG4gICAgICAgICAgcmV0dXJuIFIgPT0gXCJjb21tZW50XCIgPyBxIDogKEsubGFzdFR5cGUgPSBSID09IFwib3BlcmF0b3JcIiAmJiAodyA9PSBcIisrXCIgfHwgdyA9PSBcIi0tXCIpID8gXCJpbmNkZWNcIiA6IFIsIE4oSywgcSwgUiwgdywgeikpO1xuICAgICAgICB9LFxuICAgICAgICBpbmRlbnQ6IGZ1bmN0aW9uKHosIEspIHtcbiAgICAgICAgICBpZiAoei50b2tlbml6ZSA9PSBNIHx8IHoudG9rZW5pemUgPT0geSlcbiAgICAgICAgICAgIHJldHVybiBvLlBhc3M7XG4gICAgICAgICAgaWYgKHoudG9rZW5pemUgIT0gRSlcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIHZhciBxID0gSyAmJiBLLmNoYXJBdCgwKSwgb2UgPSB6LmxleGljYWwsIHplO1xuICAgICAgICAgIGlmICghL15cXHMqZWxzZVxcYi8udGVzdChLKSlcbiAgICAgICAgICAgIGZvciAodmFyIHR0ID0gei5jYy5sZW5ndGggLSAxOyB0dCA+PSAwOyAtLXR0KSB7XG4gICAgICAgICAgICAgIHZhciBydCA9IHouY2NbdHRdO1xuICAgICAgICAgICAgICBpZiAocnQgPT0gaWUpXG4gICAgICAgICAgICAgICAgb2UgPSBvZS5wcmV2O1xuICAgICAgICAgICAgICBlbHNlIGlmIChydCAhPSBYciAmJiBydCAhPSBtZSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKDsgKG9lLnR5cGUgPT0gXCJzdGF0XCIgfHwgb2UudHlwZSA9PSBcImZvcm1cIikgJiYgKHEgPT0gXCJ9XCIgfHwgKHplID0gei5jY1t6LmNjLmxlbmd0aCAtIDFdKSAmJiAoemUgPT0gZ3QgfHwgemUgPT0geXQpICYmICEvXlssXFwuPStcXC0qOj9bXFwoXS8udGVzdChLKSk7IClcbiAgICAgICAgICAgIG9lID0gb2UucHJldjtcbiAgICAgICAgICBkICYmIG9lLnR5cGUgPT0gXCIpXCIgJiYgb2UucHJldi50eXBlID09IFwic3RhdFwiICYmIChvZSA9IG9lLnByZXYpO1xuICAgICAgICAgIHZhciBQdCA9IG9lLnR5cGUsIHluID0gcSA9PSBQdDtcbiAgICAgICAgICByZXR1cm4gUHQgPT0gXCJ2YXJkZWZcIiA/IG9lLmluZGVudGVkICsgKHoubGFzdFR5cGUgPT0gXCJvcGVyYXRvclwiIHx8IHoubGFzdFR5cGUgPT0gXCIsXCIgPyBvZS5pbmZvLmxlbmd0aCArIDEgOiAwKSA6IFB0ID09IFwiZm9ybVwiICYmIHEgPT0gXCJ7XCIgPyBvZS5pbmRlbnRlZCA6IFB0ID09IFwiZm9ybVwiID8gb2UuaW5kZW50ZWQgKyBzIDogUHQgPT0gXCJzdGF0XCIgPyBvZS5pbmRlbnRlZCArIChzdCh6LCBLKSA/IGQgfHwgcyA6IDApIDogb2UuaW5mbyA9PSBcInN3aXRjaFwiICYmICF5biAmJiB0LmRvdWJsZUluZGVudFN3aXRjaCAhPSAhMSA/IG9lLmluZGVudGVkICsgKC9eKD86Y2FzZXxkZWZhdWx0KVxcYi8udGVzdChLKSA/IHMgOiAyICogcykgOiBvZS5hbGlnbiA/IG9lLmNvbHVtbiArICh5biA/IDAgOiAxKSA6IG9lLmluZGVudGVkICsgKHluID8gMCA6IHMpO1xuICAgICAgICB9LFxuICAgICAgICBlbGVjdHJpY0lucHV0OiAvXlxccyooPzpjYXNlIC4qPzp8ZGVmYXVsdDp8XFx7fFxcfSkkLyxcbiAgICAgICAgYmxvY2tDb21tZW50U3RhcnQ6IHAgPyBudWxsIDogXCIvKlwiLFxuICAgICAgICBibG9ja0NvbW1lbnRFbmQ6IHAgPyBudWxsIDogXCIqL1wiLFxuICAgICAgICBibG9ja0NvbW1lbnRDb250aW51ZTogcCA/IG51bGwgOiBcIiAqIFwiLFxuICAgICAgICBsaW5lQ29tbWVudDogcCA/IG51bGwgOiBcIi8vXCIsXG4gICAgICAgIGZvbGQ6IFwiYnJhY2VcIixcbiAgICAgICAgY2xvc2VCcmFja2V0czogXCIoKVtde30nJ1xcXCJcXFwiYGBcIixcbiAgICAgICAgaGVscGVyVHlwZTogcCA/IFwianNvblwiIDogXCJqYXZhc2NyaXB0XCIsXG4gICAgICAgIGpzb25sZE1vZGU6IGMsXG4gICAgICAgIGpzb25Nb2RlOiBwLFxuICAgICAgICBleHByZXNzaW9uQWxsb3dlZDogem4sXG4gICAgICAgIHNraXBFeHByZXNzaW9uOiBmdW5jdGlvbih6KSB7XG4gICAgICAgICAgTih6LCBcImF0b21cIiwgXCJhdG9tXCIsIFwidHJ1ZVwiLCBuZXcgby5TdHJpbmdTdHJlYW0oXCJcIiwgMiwgbnVsbCkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pLCBvLnJlZ2lzdGVySGVscGVyKFwid29yZENoYXJzXCIsIFwiamF2YXNjcmlwdFwiLCAvW1xcdyRdLyksIG8uZGVmaW5lTUlNRShcInRleHQvamF2YXNjcmlwdFwiLCBcImphdmFzY3JpcHRcIiksIG8uZGVmaW5lTUlNRShcInRleHQvZWNtYXNjcmlwdFwiLCBcImphdmFzY3JpcHRcIiksIG8uZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpLCBvLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpLCBvLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0XCIsIFwiamF2YXNjcmlwdFwiKSwgby5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vanNvblwiLCB7IG5hbWU6IFwiamF2YXNjcmlwdFwiLCBqc29uOiAhMCB9KSwgby5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24veC1qc29uXCIsIHsgbmFtZTogXCJqYXZhc2NyaXB0XCIsIGpzb246ICEwIH0pLCBvLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi9tYW5pZmVzdCtqc29uXCIsIHsgbmFtZTogXCJqYXZhc2NyaXB0XCIsIGpzb246ICEwIH0pLCBvLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi9sZCtqc29uXCIsIHsgbmFtZTogXCJqYXZhc2NyaXB0XCIsIGpzb25sZDogITAgfSksIG8uZGVmaW5lTUlNRShcInRleHQvdHlwZXNjcmlwdFwiLCB7IG5hbWU6IFwiamF2YXNjcmlwdFwiLCB0eXBlc2NyaXB0OiAhMCB9KSwgby5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vdHlwZXNjcmlwdFwiLCB7IG5hbWU6IFwiamF2YXNjcmlwdFwiLCB0eXBlc2NyaXB0OiAhMCB9KTtcbiAgfSk7XG59KSgpO1xuKGZ1bmN0aW9uKHIsIGYpIHtcbiAgKGZ1bmN0aW9uKG8pIHtcbiAgICBvKFBhKCkpO1xuICB9KShmdW5jdGlvbihvKSB7XG4gICAgdmFyIGkgPSBcIkNvZGVNaXJyb3ItaGludFwiLCB0ID0gXCJDb2RlTWlycm9yLWhpbnQtYWN0aXZlXCI7XG4gICAgby5zaG93SGludCA9IGZ1bmN0aW9uKHcsIEEsIEUpIHtcbiAgICAgIGlmICghQSlcbiAgICAgICAgcmV0dXJuIHcuc2hvd0hpbnQoRSk7XG4gICAgICBFICYmIEUuYXN5bmMgJiYgKEEuYXN5bmMgPSAhMCk7XG4gICAgICB2YXIgQyA9IHsgaGludDogQSB9O1xuICAgICAgaWYgKEUpXG4gICAgICAgIGZvciAodmFyIE0gaW4gRSlcbiAgICAgICAgICBDW01dID0gRVtNXTtcbiAgICAgIHJldHVybiB3LnNob3dIaW50KEMpO1xuICAgIH0sIG8uZGVmaW5lRXh0ZW5zaW9uKFwic2hvd0hpbnRcIiwgZnVuY3Rpb24odykge1xuICAgICAgdyA9IHAodGhpcywgdGhpcy5nZXRDdXJzb3IoXCJzdGFydFwiKSwgdyk7XG4gICAgICB2YXIgQSA9IHRoaXMubGlzdFNlbGVjdGlvbnMoKTtcbiAgICAgIGlmICghKEEubGVuZ3RoID4gMSkpIHtcbiAgICAgICAgaWYgKHRoaXMuc29tZXRoaW5nU2VsZWN0ZWQoKSkge1xuICAgICAgICAgIGlmICghdy5oaW50LnN1cHBvcnRzU2VsZWN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGZvciAodmFyIEUgPSAwOyBFIDwgQS5sZW5ndGg7IEUrKylcbiAgICAgICAgICAgIGlmIChBW0VdLmhlYWQubGluZSAhPSBBW0VdLmFuY2hvci5saW5lKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZS5jb21wbGV0aW9uQWN0aXZlICYmIHRoaXMuc3RhdGUuY29tcGxldGlvbkFjdGl2ZS5jbG9zZSgpO1xuICAgICAgICB2YXIgQyA9IHRoaXMuc3RhdGUuY29tcGxldGlvbkFjdGl2ZSA9IG5ldyBzKHRoaXMsIHcpO1xuICAgICAgICAhQy5vcHRpb25zLmhpbnQgfHwgKG8uc2lnbmFsKHRoaXMsIFwic3RhcnRDb21wbGV0aW9uXCIsIHRoaXMpLCBDLnVwZGF0ZSghMCkpO1xuICAgICAgfVxuICAgIH0pLCBvLmRlZmluZUV4dGVuc2lvbihcImNsb3NlSGludFwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuc3RhdGUuY29tcGxldGlvbkFjdGl2ZSAmJiB0aGlzLnN0YXRlLmNvbXBsZXRpb25BY3RpdmUuY2xvc2UoKTtcbiAgICB9KTtcbiAgICBmdW5jdGlvbiBzKHcsIEEpIHtcbiAgICAgIGlmICh0aGlzLmNtID0gdywgdGhpcy5vcHRpb25zID0gQSwgdGhpcy53aWRnZXQgPSBudWxsLCB0aGlzLmRlYm91bmNlID0gMCwgdGhpcy50aWNrID0gMCwgdGhpcy5zdGFydFBvcyA9IHRoaXMuY20uZ2V0Q3Vyc29yKFwic3RhcnRcIiksIHRoaXMuc3RhcnRMZW4gPSB0aGlzLmNtLmdldExpbmUodGhpcy5zdGFydFBvcy5saW5lKS5sZW5ndGggLSB0aGlzLmNtLmdldFNlbGVjdGlvbigpLmxlbmd0aCwgdGhpcy5vcHRpb25zLnVwZGF0ZU9uQ3Vyc29yQWN0aXZpdHkpIHtcbiAgICAgICAgdmFyIEUgPSB0aGlzO1xuICAgICAgICB3Lm9uKFwiY3Vyc29yQWN0aXZpdHlcIiwgdGhpcy5hY3Rpdml0eUZ1bmMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBFLmN1cnNvckFjdGl2aXR5KCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgZnVuY3Rpb24odykge1xuICAgICAgcmV0dXJuIHNldFRpbWVvdXQodywgMWUzIC8gNjApO1xuICAgIH0sIGMgPSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgfHwgY2xlYXJUaW1lb3V0O1xuICAgIHMucHJvdG90eXBlID0ge1xuICAgICAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICAhdGhpcy5hY3RpdmUoKSB8fCAodGhpcy5jbS5zdGF0ZS5jb21wbGV0aW9uQWN0aXZlID0gbnVsbCwgdGhpcy50aWNrID0gbnVsbCwgdGhpcy5vcHRpb25zLnVwZGF0ZU9uQ3Vyc29yQWN0aXZpdHkgJiYgdGhpcy5jbS5vZmYoXCJjdXJzb3JBY3Rpdml0eVwiLCB0aGlzLmFjdGl2aXR5RnVuYyksIHRoaXMud2lkZ2V0ICYmIHRoaXMuZGF0YSAmJiBvLnNpZ25hbCh0aGlzLmRhdGEsIFwiY2xvc2VcIiksIHRoaXMud2lkZ2V0ICYmIHRoaXMud2lkZ2V0LmNsb3NlKCksIG8uc2lnbmFsKHRoaXMuY20sIFwiZW5kQ29tcGxldGlvblwiLCB0aGlzLmNtKSk7XG4gICAgICB9LFxuICAgICAgYWN0aXZlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY20uc3RhdGUuY29tcGxldGlvbkFjdGl2ZSA9PSB0aGlzO1xuICAgICAgfSxcbiAgICAgIHBpY2s6IGZ1bmN0aW9uKHcsIEEpIHtcbiAgICAgICAgdmFyIEUgPSB3Lmxpc3RbQV0sIEMgPSB0aGlzO1xuICAgICAgICB0aGlzLmNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHtcbiAgICAgICAgICBFLmhpbnQgPyBFLmhpbnQoQy5jbSwgdywgRSkgOiBDLmNtLnJlcGxhY2VSYW5nZShcbiAgICAgICAgICAgIHYoRSksXG4gICAgICAgICAgICBFLmZyb20gfHwgdy5mcm9tLFxuICAgICAgICAgICAgRS50byB8fCB3LnRvLFxuICAgICAgICAgICAgXCJjb21wbGV0ZVwiXG4gICAgICAgICAgKSwgby5zaWduYWwodywgXCJwaWNrXCIsIEUpLCBDLmNtLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgIH0pLCB0aGlzLm9wdGlvbnMuY2xvc2VPblBpY2sgJiYgdGhpcy5jbG9zZSgpO1xuICAgICAgfSxcbiAgICAgIGN1cnNvckFjdGl2aXR5OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5kZWJvdW5jZSAmJiAoYyh0aGlzLmRlYm91bmNlKSwgdGhpcy5kZWJvdW5jZSA9IDApO1xuICAgICAgICB2YXIgdyA9IHRoaXMuc3RhcnRQb3M7XG4gICAgICAgIHRoaXMuZGF0YSAmJiAodyA9IHRoaXMuZGF0YS5mcm9tKTtcbiAgICAgICAgdmFyIEEgPSB0aGlzLmNtLmdldEN1cnNvcigpLCBFID0gdGhpcy5jbS5nZXRMaW5lKEEubGluZSk7XG4gICAgICAgIGlmIChBLmxpbmUgIT0gdGhpcy5zdGFydFBvcy5saW5lIHx8IEUubGVuZ3RoIC0gQS5jaCAhPSB0aGlzLnN0YXJ0TGVuIC0gdGhpcy5zdGFydFBvcy5jaCB8fCBBLmNoIDwgdy5jaCB8fCB0aGlzLmNtLnNvbWV0aGluZ1NlbGVjdGVkKCkgfHwgIUEuY2ggfHwgdGhpcy5vcHRpb25zLmNsb3NlQ2hhcmFjdGVycy50ZXN0KEUuY2hhckF0KEEuY2ggLSAxKSkpXG4gICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgQyA9IHRoaXM7XG4gICAgICAgICAgdGhpcy5kZWJvdW5jZSA9IGQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBDLnVwZGF0ZSgpO1xuICAgICAgICAgIH0pLCB0aGlzLndpZGdldCAmJiB0aGlzLndpZGdldC5kaXNhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uKHcpIHtcbiAgICAgICAgaWYgKHRoaXMudGljayAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIEEgPSB0aGlzLCBFID0gKyt0aGlzLnRpY2s7XG4gICAgICAgICAgbSh0aGlzLm9wdGlvbnMuaGludCwgdGhpcy5jbSwgdGhpcy5vcHRpb25zLCBmdW5jdGlvbihDKSB7XG4gICAgICAgICAgICBBLnRpY2sgPT0gRSAmJiBBLmZpbmlzaFVwZGF0ZShDLCB3KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGZpbmlzaFVwZGF0ZTogZnVuY3Rpb24odywgQSkge1xuICAgICAgICB0aGlzLmRhdGEgJiYgby5zaWduYWwodGhpcy5kYXRhLCBcInVwZGF0ZVwiKTtcbiAgICAgICAgdmFyIEUgPSB0aGlzLndpZGdldCAmJiB0aGlzLndpZGdldC5waWNrZWQgfHwgQSAmJiB0aGlzLm9wdGlvbnMuY29tcGxldGVTaW5nbGU7XG4gICAgICAgIHRoaXMud2lkZ2V0ICYmIHRoaXMud2lkZ2V0LmNsb3NlKCksIHRoaXMuZGF0YSA9IHcsIHcgJiYgdy5saXN0Lmxlbmd0aCAmJiAoRSAmJiB3Lmxpc3QubGVuZ3RoID09IDEgPyB0aGlzLnBpY2sodywgMCkgOiAodGhpcy53aWRnZXQgPSBuZXcgRCh0aGlzLCB3KSwgby5zaWduYWwodywgXCJzaG93blwiKSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gcCh3LCBBLCBFKSB7XG4gICAgICB2YXIgQyA9IHcub3B0aW9ucy5oaW50T3B0aW9ucywgTSA9IHt9O1xuICAgICAgZm9yICh2YXIgeSBpbiBSKVxuICAgICAgICBNW3ldID0gUlt5XTtcbiAgICAgIGlmIChDKVxuICAgICAgICBmb3IgKHZhciB5IGluIEMpXG4gICAgICAgICAgQ1t5XSAhPT0gdm9pZCAwICYmIChNW3ldID0gQ1t5XSk7XG4gICAgICBpZiAoRSlcbiAgICAgICAgZm9yICh2YXIgeSBpbiBFKVxuICAgICAgICAgIEVbeV0gIT09IHZvaWQgMCAmJiAoTVt5XSA9IEVbeV0pO1xuICAgICAgcmV0dXJuIE0uaGludC5yZXNvbHZlICYmIChNLmhpbnQgPSBNLmhpbnQucmVzb2x2ZSh3LCBBKSksIE07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHYodykge1xuICAgICAgcmV0dXJuIHR5cGVvZiB3ID09IFwic3RyaW5nXCIgPyB3IDogdy50ZXh0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBiKHcsIEEpIHtcbiAgICAgIHZhciBFID0ge1xuICAgICAgICBVcDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgQS5tb3ZlRm9jdXMoLTEpO1xuICAgICAgICB9LFxuICAgICAgICBEb3duOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBBLm1vdmVGb2N1cygxKTtcbiAgICAgICAgfSxcbiAgICAgICAgUGFnZVVwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBBLm1vdmVGb2N1cygtQS5tZW51U2l6ZSgpICsgMSwgITApO1xuICAgICAgICB9LFxuICAgICAgICBQYWdlRG93bjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgQS5tb3ZlRm9jdXMoQS5tZW51U2l6ZSgpIC0gMSwgITApO1xuICAgICAgICB9LFxuICAgICAgICBIb21lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBBLnNldEZvY3VzKDApO1xuICAgICAgICB9LFxuICAgICAgICBFbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIEEuc2V0Rm9jdXMoQS5sZW5ndGggLSAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgRW50ZXI6IEEucGljayxcbiAgICAgICAgVGFiOiBBLnBpY2ssXG4gICAgICAgIEVzYzogQS5jbG9zZVxuICAgICAgfSwgQyA9IC9NYWMvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTtcbiAgICAgIEMgJiYgKEVbXCJDdHJsLVBcIl0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgQS5tb3ZlRm9jdXMoLTEpO1xuICAgICAgfSwgRVtcIkN0cmwtTlwiXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBBLm1vdmVGb2N1cygxKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIE0gPSB3Lm9wdGlvbnMuY3VzdG9tS2V5cywgeSA9IE0gPyB7fSA6IEU7XG4gICAgICBmdW5jdGlvbiBCKGssIGgpIHtcbiAgICAgICAgdmFyIE47XG4gICAgICAgIHR5cGVvZiBoICE9IFwic3RyaW5nXCIgPyBOID0gZnVuY3Rpb24oUCkge1xuICAgICAgICAgIHJldHVybiBoKFAsIEEpO1xuICAgICAgICB9IDogRS5oYXNPd25Qcm9wZXJ0eShoKSA/IE4gPSBFW2hdIDogTiA9IGgsIHlba10gPSBOO1xuICAgICAgfVxuICAgICAgaWYgKE0pXG4gICAgICAgIGZvciAodmFyICQgaW4gTSlcbiAgICAgICAgICBNLmhhc093blByb3BlcnR5KCQpICYmIEIoJCwgTVskXSk7XG4gICAgICB2YXIgRiA9IHcub3B0aW9ucy5leHRyYUtleXM7XG4gICAgICBpZiAoRilcbiAgICAgICAgZm9yICh2YXIgJCBpbiBGKVxuICAgICAgICAgIEYuaGFzT3duUHJvcGVydHkoJCkgJiYgQigkLCBGWyRdKTtcbiAgICAgIHJldHVybiB5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBTKHcsIEEpIHtcbiAgICAgIGZvciAoOyBBICYmIEEgIT0gdzsgKSB7XG4gICAgICAgIGlmIChBLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09IFwiTElcIiAmJiBBLnBhcmVudE5vZGUgPT0gdylcbiAgICAgICAgICByZXR1cm4gQTtcbiAgICAgICAgQSA9IEEucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gRCh3LCBBKSB7XG4gICAgICB0aGlzLmlkID0gXCJjbS1jb21wbGV0ZS1cIiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oMWU2KSksIHRoaXMuY29tcGxldGlvbiA9IHcsIHRoaXMuZGF0YSA9IEEsIHRoaXMucGlja2VkID0gITE7XG4gICAgICB2YXIgRSA9IHRoaXMsIEMgPSB3LmNtLCBNID0gQy5nZXRJbnB1dEZpZWxkKCkub3duZXJEb2N1bWVudCwgeSA9IE0uZGVmYXVsdFZpZXcgfHwgTS5wYXJlbnRXaW5kb3csIEIgPSB0aGlzLmhpbnRzID0gTS5jcmVhdGVFbGVtZW50KFwidWxcIik7XG4gICAgICBCLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJsaXN0Ym94XCIpLCBCLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgXCJ0cnVlXCIpLCBCLmlkID0gdGhpcy5pZDtcbiAgICAgIHZhciAkID0gdy5jbS5vcHRpb25zLnRoZW1lO1xuICAgICAgQi5jbGFzc05hbWUgPSBcIkNvZGVNaXJyb3ItaGludHMgXCIgKyAkLCB0aGlzLnNlbGVjdGVkSGludCA9IEEuc2VsZWN0ZWRIaW50IHx8IDA7XG4gICAgICBmb3IgKHZhciBGID0gQS5saXN0LCBrID0gMDsgayA8IEYubGVuZ3RoOyArK2spIHtcbiAgICAgICAgdmFyIGggPSBCLmFwcGVuZENoaWxkKE0uY3JlYXRlRWxlbWVudChcImxpXCIpKSwgTiA9IEZba10sIFAgPSBpICsgKGsgIT0gdGhpcy5zZWxlY3RlZEhpbnQgPyBcIlwiIDogXCIgXCIgKyB0KTtcbiAgICAgICAgTi5jbGFzc05hbWUgIT0gbnVsbCAmJiAoUCA9IE4uY2xhc3NOYW1lICsgXCIgXCIgKyBQKSwgaC5jbGFzc05hbWUgPSBQLCBrID09IHRoaXMuc2VsZWN0ZWRIaW50ICYmIGguc2V0QXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiLCBcInRydWVcIiksIGguaWQgPSB0aGlzLmlkICsgXCItXCIgKyBrLCBoLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJvcHRpb25cIiksIE4ucmVuZGVyID8gTi5yZW5kZXIoaCwgQSwgTikgOiBoLmFwcGVuZENoaWxkKE0uY3JlYXRlVGV4dE5vZGUoTi5kaXNwbGF5VGV4dCB8fCB2KE4pKSksIGguaGludElkID0gaztcbiAgICAgIH1cbiAgICAgIHZhciBqID0gdy5vcHRpb25zLmNvbnRhaW5lciB8fCBNLmJvZHksIEkgPSBDLmN1cnNvckNvb3Jkcyh3Lm9wdGlvbnMuYWxpZ25XaXRoV29yZCA/IEEuZnJvbSA6IG51bGwpLCBWID0gSS5sZWZ0LCBXID0gSS5ib3R0b20sIFEgPSAhMCwgWCA9IDAsIEogPSAwO1xuICAgICAgaWYgKGogIT09IE0uYm9keSkge1xuICAgICAgICB2YXIgWiA9IFtcImFic29sdXRlXCIsIFwicmVsYXRpdmVcIiwgXCJmaXhlZFwiXS5pbmRleE9mKHkuZ2V0Q29tcHV0ZWRTdHlsZShqKS5wb3NpdGlvbikgIT09IC0xLCBkZSA9IFogPyBqIDogai5vZmZzZXRQYXJlbnQsIHZlID0gZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIHNlID0gTS5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBYID0gdmUubGVmdCAtIHNlLmxlZnQgLSBkZS5zY3JvbGxMZWZ0LCBKID0gdmUudG9wIC0gc2UudG9wIC0gZGUuc2Nyb2xsVG9wO1xuICAgICAgfVxuICAgICAgQi5zdHlsZS5sZWZ0ID0gViAtIFggKyBcInB4XCIsIEIuc3R5bGUudG9wID0gVyAtIEogKyBcInB4XCI7XG4gICAgICB2YXIgbWUgPSB5LmlubmVyV2lkdGggfHwgTWF0aC5tYXgoTS5ib2R5Lm9mZnNldFdpZHRoLCBNLmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCksIGxlID0geS5pbm5lckhlaWdodCB8fCBNYXRoLm1heChNLmJvZHkub2Zmc2V0SGVpZ2h0LCBNLmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQpO1xuICAgICAgai5hcHBlbmRDaGlsZChCKSwgQy5nZXRJbnB1dEZpZWxkKCkuc2V0QXR0cmlidXRlKFwiYXJpYS1hdXRvY29tcGxldGVcIiwgXCJsaXN0XCIpLCBDLmdldElucHV0RmllbGQoKS5zZXRBdHRyaWJ1dGUoXCJhcmlhLW93bnNcIiwgdGhpcy5pZCksIEMuZ2V0SW5wdXRGaWVsZCgpLnNldEF0dHJpYnV0ZShcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLCB0aGlzLmlkICsgXCItXCIgKyB0aGlzLnNlbGVjdGVkSGludCk7XG4gICAgICB2YXIgaWUgPSB3Lm9wdGlvbnMubW92ZU9uT3ZlcmxhcCA/IEIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOiBuZXcgRE9NUmVjdCgpLCBwZSA9IHcub3B0aW9ucy5wYWRkaW5nRm9yU2Nyb2xsYmFyID8gQi5zY3JvbGxIZWlnaHQgPiBCLmNsaWVudEhlaWdodCArIDEgOiAhMSwgdGU7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICB0ZSA9IEMuZ2V0U2Nyb2xsSW5mbygpO1xuICAgICAgfSk7XG4gICAgICB2YXIgZ2UgPSBpZS5ib3R0b20gLSBsZTtcbiAgICAgIGlmIChnZSA+IDApIHtcbiAgICAgICAgdmFyIEFlID0gaWUuYm90dG9tIC0gaWUudG9wLCBNZSA9IEkudG9wIC0gKEkuYm90dG9tIC0gaWUudG9wKTtcbiAgICAgICAgaWYgKE1lIC0gQWUgPiAwKVxuICAgICAgICAgIEIuc3R5bGUudG9wID0gKFcgPSBJLnRvcCAtIEFlIC0gSikgKyBcInB4XCIsIFEgPSAhMTtcbiAgICAgICAgZWxzZSBpZiAoQWUgPiBsZSkge1xuICAgICAgICAgIEIuc3R5bGUuaGVpZ2h0ID0gbGUgLSA1ICsgXCJweFwiLCBCLnN0eWxlLnRvcCA9IChXID0gSS5ib3R0b20gLSBpZS50b3AgLSBKKSArIFwicHhcIjtcbiAgICAgICAgICB2YXIgWWUgPSBDLmdldEN1cnNvcigpO1xuICAgICAgICAgIEEuZnJvbS5jaCAhPSBZZS5jaCAmJiAoSSA9IEMuY3Vyc29yQ29vcmRzKFllKSwgQi5zdHlsZS5sZWZ0ID0gKFYgPSBJLmxlZnQgLSBYKSArIFwicHhcIiwgaWUgPSBCLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIG50ID0gaWUucmlnaHQgLSBtZTtcbiAgICAgIGlmIChwZSAmJiAobnQgKz0gQy5kaXNwbGF5Lm5hdGl2ZUJhcldpZHRoKSwgbnQgPiAwICYmIChpZS5yaWdodCAtIGllLmxlZnQgPiBtZSAmJiAoQi5zdHlsZS53aWR0aCA9IG1lIC0gNSArIFwicHhcIiwgbnQgLT0gaWUucmlnaHQgLSBpZS5sZWZ0IC0gbWUpLCBCLnN0eWxlLmxlZnQgPSAoViA9IE1hdGgubWF4KEkubGVmdCAtIG50IC0gWCwgMCkpICsgXCJweFwiKSwgcGUpXG4gICAgICAgIGZvciAodmFyIGV0ID0gQi5maXJzdENoaWxkOyBldDsgZXQgPSBldC5uZXh0U2libGluZylcbiAgICAgICAgICBldC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBDLmRpc3BsYXkubmF0aXZlQmFyV2lkdGggKyBcInB4XCI7XG4gICAgICBpZiAoQy5hZGRLZXlNYXAodGhpcy5rZXlNYXAgPSBiKHcsIHtcbiAgICAgICAgbW92ZUZvY3VzOiBmdW5jdGlvbihCZSwgcHQpIHtcbiAgICAgICAgICBFLmNoYW5nZUFjdGl2ZShFLnNlbGVjdGVkSGludCArIEJlLCBwdCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEZvY3VzOiBmdW5jdGlvbihCZSkge1xuICAgICAgICAgIEUuY2hhbmdlQWN0aXZlKEJlKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVudVNpemU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBFLnNjcmVlbkFtb3VudCgpO1xuICAgICAgICB9LFxuICAgICAgICBsZW5ndGg6IEYubGVuZ3RoLFxuICAgICAgICBjbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdy5jbG9zZSgpO1xuICAgICAgICB9LFxuICAgICAgICBwaWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBFLnBpY2soKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogQVxuICAgICAgfSkpLCB3Lm9wdGlvbnMuY2xvc2VPblVuZm9jdXMpIHtcbiAgICAgICAgdmFyIGd0O1xuICAgICAgICBDLm9uKFwiYmx1clwiLCB0aGlzLm9uQmx1ciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGd0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHcuY2xvc2UoKTtcbiAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9KSwgQy5vbihcImZvY3VzXCIsIHRoaXMub25Gb2N1cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dChndCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgQy5vbihcInNjcm9sbFwiLCB0aGlzLm9uU2Nyb2xsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBCZSA9IEMuZ2V0U2Nyb2xsSW5mbygpLCBwdCA9IEMuZ2V0V3JhcHBlckVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGUgfHwgKHRlID0gQy5nZXRTY3JvbGxJbmZvKCkpO1xuICAgICAgICB2YXIgc24gPSBXICsgdGUudG9wIC0gQmUudG9wLCBCdCA9IHNuIC0gKHkucGFnZVlPZmZzZXQgfHwgKE0uZG9jdW1lbnRFbGVtZW50IHx8IE0uYm9keSkuc2Nyb2xsVG9wKTtcbiAgICAgICAgaWYgKFEgfHwgKEJ0ICs9IEIub2Zmc2V0SGVpZ2h0KSwgQnQgPD0gcHQudG9wIHx8IEJ0ID49IHB0LmJvdHRvbSlcbiAgICAgICAgICByZXR1cm4gdy5jbG9zZSgpO1xuICAgICAgICBCLnN0eWxlLnRvcCA9IHNuICsgXCJweFwiLCBCLnN0eWxlLmxlZnQgPSBWICsgdGUubGVmdCAtIEJlLmxlZnQgKyBcInB4XCI7XG4gICAgICB9KSwgby5vbihCLCBcImRibGNsaWNrXCIsIGZ1bmN0aW9uKEJlKSB7XG4gICAgICAgIHZhciBwdCA9IFMoQiwgQmUudGFyZ2V0IHx8IEJlLnNyY0VsZW1lbnQpO1xuICAgICAgICBwdCAmJiBwdC5oaW50SWQgIT0gbnVsbCAmJiAoRS5jaGFuZ2VBY3RpdmUocHQuaGludElkKSwgRS5waWNrKCkpO1xuICAgICAgfSksIG8ub24oQiwgXCJjbGlja1wiLCBmdW5jdGlvbihCZSkge1xuICAgICAgICB2YXIgcHQgPSBTKEIsIEJlLnRhcmdldCB8fCBCZS5zcmNFbGVtZW50KTtcbiAgICAgICAgcHQgJiYgcHQuaGludElkICE9IG51bGwgJiYgKEUuY2hhbmdlQWN0aXZlKHB0LmhpbnRJZCksIHcub3B0aW9ucy5jb21wbGV0ZU9uU2luZ2xlQ2xpY2sgJiYgRS5waWNrKCkpO1xuICAgICAgfSksIG8ub24oQiwgXCJtb3VzZWRvd25cIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgQy5mb2N1cygpO1xuICAgICAgICB9LCAyMCk7XG4gICAgICB9KTtcbiAgICAgIHZhciB5dCA9IHRoaXMuZ2V0U2VsZWN0ZWRIaW50UmFuZ2UoKTtcbiAgICAgIHJldHVybiAoeXQuZnJvbSAhPT0gMCB8fCB5dC50byAhPT0gMCkgJiYgdGhpcy5zY3JvbGxUb0FjdGl2ZSgpLCBvLnNpZ25hbChBLCBcInNlbGVjdFwiLCBGW3RoaXMuc2VsZWN0ZWRIaW50XSwgQi5jaGlsZE5vZGVzW3RoaXMuc2VsZWN0ZWRIaW50XSksICEwO1xuICAgIH1cbiAgICBELnByb3RvdHlwZSA9IHtcbiAgICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGxldGlvbi53aWRnZXQgPT0gdGhpcykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGlvbi53aWRnZXQgPSBudWxsLCB0aGlzLmhpbnRzLnBhcmVudE5vZGUgJiYgdGhpcy5oaW50cy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuaGludHMpLCB0aGlzLmNvbXBsZXRpb24uY20ucmVtb3ZlS2V5TWFwKHRoaXMua2V5TWFwKTtcbiAgICAgICAgICB2YXIgdyA9IHRoaXMuY29tcGxldGlvbi5jbS5nZXRJbnB1dEZpZWxkKCk7XG4gICAgICAgICAgdy5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiksIHcucmVtb3ZlQXR0cmlidXRlKFwiYXJpYS1vd25zXCIpO1xuICAgICAgICAgIHZhciBBID0gdGhpcy5jb21wbGV0aW9uLmNtO1xuICAgICAgICAgIHRoaXMuY29tcGxldGlvbi5vcHRpb25zLmNsb3NlT25VbmZvY3VzICYmIChBLm9mZihcImJsdXJcIiwgdGhpcy5vbkJsdXIpLCBBLm9mZihcImZvY3VzXCIsIHRoaXMub25Gb2N1cykpLCBBLm9mZihcInNjcm9sbFwiLCB0aGlzLm9uU2Nyb2xsKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmNvbXBsZXRpb24uY20ucmVtb3ZlS2V5TWFwKHRoaXMua2V5TWFwKTtcbiAgICAgICAgdmFyIHcgPSB0aGlzO1xuICAgICAgICB0aGlzLmtleU1hcCA9IHsgRW50ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHcucGlja2VkID0gITA7XG4gICAgICAgIH0gfSwgdGhpcy5jb21wbGV0aW9uLmNtLmFkZEtleU1hcCh0aGlzLmtleU1hcCk7XG4gICAgICB9LFxuICAgICAgcGljazogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuY29tcGxldGlvbi5waWNrKHRoaXMuZGF0YSwgdGhpcy5zZWxlY3RlZEhpbnQpO1xuICAgICAgfSxcbiAgICAgIGNoYW5nZUFjdGl2ZTogZnVuY3Rpb24odywgQSkge1xuICAgICAgICBpZiAodyA+PSB0aGlzLmRhdGEubGlzdC5sZW5ndGggPyB3ID0gQSA/IHRoaXMuZGF0YS5saXN0Lmxlbmd0aCAtIDEgOiAwIDogdyA8IDAgJiYgKHcgPSBBID8gMCA6IHRoaXMuZGF0YS5saXN0Lmxlbmd0aCAtIDEpLCB0aGlzLnNlbGVjdGVkSGludCAhPSB3KSB7XG4gICAgICAgICAgdmFyIEUgPSB0aGlzLmhpbnRzLmNoaWxkTm9kZXNbdGhpcy5zZWxlY3RlZEhpbnRdO1xuICAgICAgICAgIEUgJiYgKEUuY2xhc3NOYW1lID0gRS5jbGFzc05hbWUucmVwbGFjZShcIiBcIiArIHQsIFwiXCIpLCBFLnJlbW92ZUF0dHJpYnV0ZShcImFyaWEtc2VsZWN0ZWRcIikpLCBFID0gdGhpcy5oaW50cy5jaGlsZE5vZGVzW3RoaXMuc2VsZWN0ZWRIaW50ID0gd10sIEUuY2xhc3NOYW1lICs9IFwiIFwiICsgdCwgRS5zZXRBdHRyaWJ1dGUoXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiKSwgdGhpcy5jb21wbGV0aW9uLmNtLmdldElucHV0RmllbGQoKS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiwgRS5pZCksIHRoaXMuc2Nyb2xsVG9BY3RpdmUoKSwgby5zaWduYWwodGhpcy5kYXRhLCBcInNlbGVjdFwiLCB0aGlzLmRhdGEubGlzdFt0aGlzLnNlbGVjdGVkSGludF0sIEUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2Nyb2xsVG9BY3RpdmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdyA9IHRoaXMuZ2V0U2VsZWN0ZWRIaW50UmFuZ2UoKSwgQSA9IHRoaXMuaGludHMuY2hpbGROb2Rlc1t3LmZyb21dLCBFID0gdGhpcy5oaW50cy5jaGlsZE5vZGVzW3cudG9dLCBDID0gdGhpcy5oaW50cy5maXJzdENoaWxkO1xuICAgICAgICBBLm9mZnNldFRvcCA8IHRoaXMuaGludHMuc2Nyb2xsVG9wID8gdGhpcy5oaW50cy5zY3JvbGxUb3AgPSBBLm9mZnNldFRvcCAtIEMub2Zmc2V0VG9wIDogRS5vZmZzZXRUb3AgKyBFLm9mZnNldEhlaWdodCA+IHRoaXMuaGludHMuc2Nyb2xsVG9wICsgdGhpcy5oaW50cy5jbGllbnRIZWlnaHQgJiYgKHRoaXMuaGludHMuc2Nyb2xsVG9wID0gRS5vZmZzZXRUb3AgKyBFLm9mZnNldEhlaWdodCAtIHRoaXMuaGludHMuY2xpZW50SGVpZ2h0ICsgQy5vZmZzZXRUb3ApO1xuICAgICAgfSxcbiAgICAgIHNjcmVlbkFtb3VudDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMuaGludHMuY2xpZW50SGVpZ2h0IC8gdGhpcy5oaW50cy5maXJzdENoaWxkLm9mZnNldEhlaWdodCkgfHwgMTtcbiAgICAgIH0sXG4gICAgICBnZXRTZWxlY3RlZEhpbnRSYW5nZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB3ID0gdGhpcy5jb21wbGV0aW9uLm9wdGlvbnMuc2Nyb2xsTWFyZ2luIHx8IDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZnJvbTogTWF0aC5tYXgoMCwgdGhpcy5zZWxlY3RlZEhpbnQgLSB3KSxcbiAgICAgICAgICB0bzogTWF0aC5taW4odGhpcy5kYXRhLmxpc3QubGVuZ3RoIC0gMSwgdGhpcy5zZWxlY3RlZEhpbnQgKyB3KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gVCh3LCBBKSB7XG4gICAgICBpZiAoIXcuc29tZXRoaW5nU2VsZWN0ZWQoKSlcbiAgICAgICAgcmV0dXJuIEE7XG4gICAgICBmb3IgKHZhciBFID0gW10sIEMgPSAwOyBDIDwgQS5sZW5ndGg7IEMrKylcbiAgICAgICAgQVtDXS5zdXBwb3J0c1NlbGVjdGlvbiAmJiBFLnB1c2goQVtDXSk7XG4gICAgICByZXR1cm4gRTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbSh3LCBBLCBFLCBDKSB7XG4gICAgICBpZiAody5hc3luYylcbiAgICAgICAgdyhBLCBDLCBFKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgTSA9IHcoQSwgRSk7XG4gICAgICAgIE0gJiYgTS50aGVuID8gTS50aGVuKEMpIDogQyhNKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24geCh3LCBBKSB7XG4gICAgICB2YXIgRSA9IHcuZ2V0SGVscGVycyhBLCBcImhpbnRcIiksIEM7XG4gICAgICBpZiAoRS5sZW5ndGgpIHtcbiAgICAgICAgdmFyIE0gPSBmdW5jdGlvbih5LCBCLCAkKSB7XG4gICAgICAgICAgdmFyIEYgPSBUKHksIEUpO1xuICAgICAgICAgIGZ1bmN0aW9uIGsoaCkge1xuICAgICAgICAgICAgaWYgKGggPT0gRi5sZW5ndGgpXG4gICAgICAgICAgICAgIHJldHVybiBCKG51bGwpO1xuICAgICAgICAgICAgbShGW2hdLCB5LCAkLCBmdW5jdGlvbihOKSB7XG4gICAgICAgICAgICAgIE4gJiYgTi5saXN0Lmxlbmd0aCA+IDAgPyBCKE4pIDogayhoICsgMSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaygwKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE0uYXN5bmMgPSAhMCwgTS5zdXBwb3J0c1NlbGVjdGlvbiA9ICEwLCBNO1xuICAgICAgfSBlbHNlXG4gICAgICAgIHJldHVybiAoQyA9IHcuZ2V0SGVscGVyKHcuZ2V0Q3Vyc29yKCksIFwiaGludFdvcmRzXCIpKSA/IGZ1bmN0aW9uKHkpIHtcbiAgICAgICAgICByZXR1cm4gby5oaW50LmZyb21MaXN0KHksIHsgd29yZHM6IEMgfSk7XG4gICAgICAgIH0gOiBvLmhpbnQuYW55d29yZCA/IGZ1bmN0aW9uKHksIEIpIHtcbiAgICAgICAgICByZXR1cm4gby5oaW50LmFueXdvcmQoeSwgQik7XG4gICAgICAgIH0gOiBmdW5jdGlvbigpIHtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgby5yZWdpc3RlckhlbHBlcihcImhpbnRcIiwgXCJhdXRvXCIsIHtcbiAgICAgIHJlc29sdmU6IHhcbiAgICB9KSwgby5yZWdpc3RlckhlbHBlcihcImhpbnRcIiwgXCJmcm9tTGlzdFwiLCBmdW5jdGlvbih3LCBBKSB7XG4gICAgICB2YXIgRSA9IHcuZ2V0Q3Vyc29yKCksIEMgPSB3LmdldFRva2VuQXQoRSksIE0sIHkgPSBvLlBvcyhFLmxpbmUsIEMuc3RhcnQpLCBCID0gRTtcbiAgICAgIEMuc3RhcnQgPCBFLmNoICYmIC9cXHcvLnRlc3QoQy5zdHJpbmcuY2hhckF0KEUuY2ggLSBDLnN0YXJ0IC0gMSkpID8gTSA9IEMuc3RyaW5nLnN1YnN0cigwLCBFLmNoIC0gQy5zdGFydCkgOiAoTSA9IFwiXCIsIHkgPSBFKTtcbiAgICAgIGZvciAodmFyICQgPSBbXSwgRiA9IDA7IEYgPCBBLndvcmRzLmxlbmd0aDsgRisrKSB7XG4gICAgICAgIHZhciBrID0gQS53b3Jkc1tGXTtcbiAgICAgICAgay5zbGljZSgwLCBNLmxlbmd0aCkgPT0gTSAmJiAkLnB1c2goayk7XG4gICAgICB9XG4gICAgICBpZiAoJC5sZW5ndGgpXG4gICAgICAgIHJldHVybiB7IGxpc3Q6ICQsIGZyb206IHksIHRvOiBCIH07XG4gICAgfSksIG8uY29tbWFuZHMuYXV0b2NvbXBsZXRlID0gby5zaG93SGludDtcbiAgICB2YXIgUiA9IHtcbiAgICAgIGhpbnQ6IG8uaGludC5hdXRvLFxuICAgICAgY29tcGxldGVTaW5nbGU6ICEwLFxuICAgICAgYWxpZ25XaXRoV29yZDogITAsXG4gICAgICBjbG9zZUNoYXJhY3RlcnM6IC9bXFxzKClcXFtcXF17fTs6PixdLyxcbiAgICAgIGNsb3NlT25QaWNrOiAhMCxcbiAgICAgIGNsb3NlT25VbmZvY3VzOiAhMCxcbiAgICAgIHVwZGF0ZU9uQ3Vyc29yQWN0aXZpdHk6ICEwLFxuICAgICAgY29tcGxldGVPblNpbmdsZUNsaWNrOiAhMCxcbiAgICAgIGNvbnRhaW5lcjogbnVsbCxcbiAgICAgIGN1c3RvbUtleXM6IG51bGwsXG4gICAgICBleHRyYUtleXM6IG51bGwsXG4gICAgICBwYWRkaW5nRm9yU2Nyb2xsYmFyOiAhMCxcbiAgICAgIG1vdmVPbk92ZXJsYXA6ICEwXG4gICAgfTtcbiAgICBvLmRlZmluZU9wdGlvbihcImhpbnRPcHRpb25zXCIsIG51bGwpO1xuICB9KTtcbn0pKCk7XG4oZnVuY3Rpb24ociwgZikge1xuICAoZnVuY3Rpb24obykge1xuICAgIG8oUGEoKSk7XG4gIH0pKGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgaSA9IG8uUG9zO1xuICAgIGZ1bmN0aW9uIHQodywgQSkge1xuICAgICAgZm9yICh2YXIgRSA9IDAsIEMgPSB3Lmxlbmd0aDsgRSA8IEM7ICsrRSlcbiAgICAgICAgQSh3W0VdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcyh3LCBBKSB7XG4gICAgICBpZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGZvciAodmFyIEUgPSB3Lmxlbmd0aDsgRS0tOyApXG4gICAgICAgICAgaWYgKHdbRV0gPT09IEEpXG4gICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3LmluZGV4T2YoQSkgIT0gLTE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGQodywgQSwgRSwgQykge1xuICAgICAgdmFyIE0gPSB3LmdldEN1cnNvcigpLCB5ID0gRSh3LCBNKTtcbiAgICAgIGlmICghL1xcYig/OnN0cmluZ3xjb21tZW50KVxcYi8udGVzdCh5LnR5cGUpKSB7XG4gICAgICAgIHZhciBCID0gby5pbm5lck1vZGUody5nZXRNb2RlKCksIHkuc3RhdGUpO1xuICAgICAgICBpZiAoQi5tb2RlLmhlbHBlclR5cGUgIT09IFwianNvblwiKSB7XG4gICAgICAgICAgeS5zdGF0ZSA9IEIuc3RhdGUsIC9eW1xcdyRfXSokLy50ZXN0KHkuc3RyaW5nKSA/IHkuZW5kID4gTS5jaCAmJiAoeS5lbmQgPSBNLmNoLCB5LnN0cmluZyA9IHkuc3RyaW5nLnNsaWNlKDAsIE0uY2ggLSB5LnN0YXJ0KSkgOiB5ID0ge1xuICAgICAgICAgICAgc3RhcnQ6IE0uY2gsXG4gICAgICAgICAgICBlbmQ6IE0uY2gsXG4gICAgICAgICAgICBzdHJpbmc6IFwiXCIsXG4gICAgICAgICAgICBzdGF0ZTogeS5zdGF0ZSxcbiAgICAgICAgICAgIHR5cGU6IHkuc3RyaW5nID09IFwiLlwiID8gXCJwcm9wZXJ0eVwiIDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgZm9yICh2YXIgJCA9IHk7ICQudHlwZSA9PSBcInByb3BlcnR5XCI7ICkge1xuICAgICAgICAgICAgaWYgKCQgPSBFKHcsIGkoTS5saW5lLCAkLnN0YXJ0KSksICQuc3RyaW5nICE9IFwiLlwiKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAoJCA9IEUodywgaShNLmxpbmUsICQuc3RhcnQpKSwgIUYpXG4gICAgICAgICAgICAgIHZhciBGID0gW107XG4gICAgICAgICAgICBGLnB1c2goJCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaXN0OiBSKHksIEYsIEEsIEMpLFxuICAgICAgICAgICAgZnJvbTogaShNLmxpbmUsIHkuc3RhcnQpLFxuICAgICAgICAgICAgdG86IGkoTS5saW5lLCB5LmVuZClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGModywgQSkge1xuICAgICAgcmV0dXJuIGQoXG4gICAgICAgIHcsXG4gICAgICAgIFQsXG4gICAgICAgIGZ1bmN0aW9uKEUsIEMpIHtcbiAgICAgICAgICByZXR1cm4gRS5nZXRUb2tlbkF0KEMpO1xuICAgICAgICB9LFxuICAgICAgICBBXG4gICAgICApO1xuICAgIH1cbiAgICBvLnJlZ2lzdGVySGVscGVyKFwiaGludFwiLCBcImphdmFzY3JpcHRcIiwgYyk7XG4gICAgZnVuY3Rpb24gcCh3LCBBKSB7XG4gICAgICB2YXIgRSA9IHcuZ2V0VG9rZW5BdChBKTtcbiAgICAgIHJldHVybiBBLmNoID09IEUuc3RhcnQgKyAxICYmIEUuc3RyaW5nLmNoYXJBdCgwKSA9PSBcIi5cIiA/IChFLmVuZCA9IEUuc3RhcnQsIEUuc3RyaW5nID0gXCIuXCIsIEUudHlwZSA9IFwicHJvcGVydHlcIikgOiAvXlxcLltcXHckX10qJC8udGVzdChFLnN0cmluZykgJiYgKEUudHlwZSA9IFwicHJvcGVydHlcIiwgRS5zdGFydCsrLCBFLnN0cmluZyA9IEUuc3RyaW5nLnJlcGxhY2UoL1xcLi8sIFwiXCIpKSwgRTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdih3LCBBKSB7XG4gICAgICByZXR1cm4gZCh3LCBtLCBwLCBBKTtcbiAgICB9XG4gICAgby5yZWdpc3RlckhlbHBlcihcImhpbnRcIiwgXCJjb2ZmZWVzY3JpcHRcIiwgdik7XG4gICAgdmFyIGIgPSBcImNoYXJBdCBjaGFyQ29kZUF0IGluZGV4T2YgbGFzdEluZGV4T2Ygc3Vic3RyaW5nIHN1YnN0ciBzbGljZSB0cmltIHRyaW1MZWZ0IHRyaW1SaWdodCB0b1VwcGVyQ2FzZSB0b0xvd2VyQ2FzZSBzcGxpdCBjb25jYXQgbWF0Y2ggcmVwbGFjZSBzZWFyY2hcIi5zcGxpdChcIiBcIiksIFMgPSBcImxlbmd0aCBjb25jYXQgam9pbiBzcGxpY2UgcHVzaCBwb3Agc2hpZnQgdW5zaGlmdCBzbGljZSByZXZlcnNlIHNvcnQgaW5kZXhPZiBsYXN0SW5kZXhPZiBldmVyeSBzb21lIGZpbHRlciBmb3JFYWNoIG1hcCByZWR1Y2UgcmVkdWNlUmlnaHQgXCIuc3BsaXQoXCIgXCIpLCBEID0gXCJwcm90b3R5cGUgYXBwbHkgY2FsbCBiaW5kXCIuc3BsaXQoXCIgXCIpLCBUID0gXCJicmVhayBjYXNlIGNhdGNoIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlYnVnZ2VyIGRlZmF1bHQgZGVsZXRlIGRvIGVsc2UgZXhwb3J0IGV4dGVuZHMgZmFsc2UgZmluYWxseSBmb3IgZnVuY3Rpb24gaWYgaW4gaW1wb3J0IGluc3RhbmNlb2YgbmV3IG51bGwgcmV0dXJuIHN1cGVyIHN3aXRjaCB0aGlzIHRocm93IHRydWUgdHJ5IHR5cGVvZiB2YXIgdm9pZCB3aGlsZSB3aXRoIHlpZWxkXCIuc3BsaXQoXCIgXCIpLCBtID0gXCJhbmQgYnJlYWsgY2F0Y2ggY2xhc3MgY29udGludWUgZGVsZXRlIGRvIGVsc2UgZXh0ZW5kcyBmYWxzZSBmaW5hbGx5IGZvciBpZiBpbiBpbnN0YW5jZW9mIGlzbnQgbmV3IG5vIG5vdCBudWxsIG9mIG9mZiBvbiBvciByZXR1cm4gc3dpdGNoIHRoZW4gdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHVudGlsIHZvaWQgd2hpbGUgd2l0aCB5ZXNcIi5zcGxpdChcIiBcIik7XG4gICAgZnVuY3Rpb24geCh3LCBBKSB7XG4gICAgICBpZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8ICFPYmplY3QuZ2V0UHJvdG90eXBlT2YpXG4gICAgICAgIGZvciAodmFyIEUgaW4gdylcbiAgICAgICAgICBBKEUpO1xuICAgICAgZWxzZVxuICAgICAgICBmb3IgKHZhciBDID0gdzsgQzsgQyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihDKSlcbiAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhDKS5mb3JFYWNoKEEpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBSKHcsIEEsIEUsIEMpIHtcbiAgICAgIHZhciBNID0gW10sIHkgPSB3LnN0cmluZywgQiA9IEMgJiYgQy5nbG9iYWxTY29wZSB8fCB3aW5kb3c7XG4gICAgICBmdW5jdGlvbiAkKEkpIHtcbiAgICAgICAgSS5sYXN0SW5kZXhPZih5LCAwKSA9PSAwICYmICFzKE0sIEkpICYmIE0ucHVzaChJKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEYoSSkge1xuICAgICAgICB0eXBlb2YgSSA9PSBcInN0cmluZ1wiID8gdChiLCAkKSA6IEkgaW5zdGFuY2VvZiBBcnJheSA/IHQoUywgJCkgOiBJIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgdChELCAkKSwgeChJLCAkKTtcbiAgICAgIH1cbiAgICAgIGlmIChBICYmIEEubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrID0gQS5wb3AoKSwgaDtcbiAgICAgICAgZm9yIChrLnR5cGUgJiYgay50eXBlLmluZGV4T2YoXCJ2YXJpYWJsZVwiKSA9PT0gMCA/IChDICYmIEMuYWRkaXRpb25hbENvbnRleHQgJiYgKGggPSBDLmFkZGl0aW9uYWxDb250ZXh0W2suc3RyaW5nXSksICghQyB8fCBDLnVzZUdsb2JhbFNjb3BlICE9PSAhMSkgJiYgKGggPSBoIHx8IEJbay5zdHJpbmddKSkgOiBrLnR5cGUgPT0gXCJzdHJpbmdcIiA/IGggPSBcIlwiIDogay50eXBlID09IFwiYXRvbVwiID8gaCA9IDEgOiBrLnR5cGUgPT0gXCJmdW5jdGlvblwiICYmIChCLmpRdWVyeSAhPSBudWxsICYmIChrLnN0cmluZyA9PSBcIiRcIiB8fCBrLnN0cmluZyA9PSBcImpRdWVyeVwiKSAmJiB0eXBlb2YgQi5qUXVlcnkgPT0gXCJmdW5jdGlvblwiID8gaCA9IEIualF1ZXJ5KCkgOiBCLl8gIT0gbnVsbCAmJiBrLnN0cmluZyA9PSBcIl9cIiAmJiB0eXBlb2YgQi5fID09IFwiZnVuY3Rpb25cIiAmJiAoaCA9IEIuXygpKSk7IGggIT0gbnVsbCAmJiBBLmxlbmd0aDsgKVxuICAgICAgICAgIGggPSBoW0EucG9wKCkuc3RyaW5nXTtcbiAgICAgICAgaCAhPSBudWxsICYmIEYoaCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBOID0gdy5zdGF0ZS5sb2NhbFZhcnM7IE47IE4gPSBOLm5leHQpXG4gICAgICAgICAgJChOLm5hbWUpO1xuICAgICAgICBmb3IgKHZhciBQID0gdy5zdGF0ZS5jb250ZXh0OyBQOyBQID0gUC5wcmV2KVxuICAgICAgICAgIGZvciAodmFyIE4gPSBQLnZhcnM7IE47IE4gPSBOLm5leHQpXG4gICAgICAgICAgICAkKE4ubmFtZSk7XG4gICAgICAgIGZvciAodmFyIE4gPSB3LnN0YXRlLmdsb2JhbFZhcnM7IE47IE4gPSBOLm5leHQpXG4gICAgICAgICAgJChOLm5hbWUpO1xuICAgICAgICBpZiAoQyAmJiBDLmFkZGl0aW9uYWxDb250ZXh0ICE9IG51bGwpXG4gICAgICAgICAgZm9yICh2YXIgaiBpbiBDLmFkZGl0aW9uYWxDb250ZXh0KVxuICAgICAgICAgICAgJChqKTtcbiAgICAgICAgKCFDIHx8IEMudXNlR2xvYmFsU2NvcGUgIT09ICExKSAmJiBGKEIpLCB0KEUsICQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE07XG4gICAgfVxuICB9KTtcbn0pKCk7XG5jb25zdCBNbiA9IChyKSA9PiB4aCh7XG4gIG1lc3NhZ2U6IHIsXG4gIHR5cGU6IFwiZXJyb3JcIixcbiAgY3VzdG9tQ2xhc3M6IFwiX2ZjLW1lc3NhZ2UtZXJyb3JcIlxufSk7XG5jb25zdCBNdCA9IChyLCBmKSA9PiB7XG4gIGNvbnN0IG8gPSByLl9fdmNjT3B0cyB8fCByO1xuICBmb3IgKGNvbnN0IFtpLCB0XSBvZiBmKVxuICAgIG9baV0gPSB0O1xuICByZXR1cm4gbztcbn0sIEFkID0gXCJbW0ZPUk0tQ1JFQVRFLVBSRUZJWC1cIiwgYmQgPSBcIi1GT1JNLUNSRUFURS1TVUZGSVhdXVwiLCBzZyA9IHd0KHtcbiAgbmFtZTogXCJGbkVkaXRvclwiLFxuICBlbWl0czogW1widXBkYXRlOm1vZGVsVmFsdWVcIiwgXCJjaGFuZ2VcIl0sXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgIG5hbWU6IFN0cmluZyxcbiAgICBhcmdzOiBBcnJheSxcbiAgICBib2R5OiBCb29sZWFuLFxuICAgIGJ1dHRvbjogQm9vbGVhbixcbiAgICBmbng6IEJvb2xlYW5cbiAgfSxcbiAgaW5qZWN0OiBbXCJkZXNpZ25lclwiXSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgZm46IFwiXCIsXG4gICAgICB2aXNpYmxlOiAhMSxcbiAgICAgIHZhbHVlOiBcIlwiXG4gICAgfTtcbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHIpIHtcbiAgICAgIHIgIT0gdGhpcy52YWx1ZSAmJiAoIXIgfHwgIXIuX19qc29uIHx8IHIuX19qc29uICYmIHIuX19qc29uICE9IHRoaXMudmFsdWUpICYmIHRoaXMuZWRpdG9yICYmIHRoaXMuZWRpdG9yLnNldFZhbHVlKHRoaXMudGlkeVZhbHVlKCkpO1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICB0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVzaWduZXIuc2V0dXBTdGF0ZS50O1xuICAgIH0sXG4gICAgYXJnU3RyKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmFyZ3MgfHwgW10pLm1hcCgocikgPT4gdHlwZW9mIHIgPT0gXCJzdHJpbmdcIiA/IHIgOiByLm5hbWUpLmpvaW4oXCIsIFwiKTtcbiAgICB9LFxuICAgIGFyZ0xpc3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcmdzLm1hcCgocikgPT4gdHlwZW9mIHIgPT0gXCJzdHJpbmdcIiA/IHtcbiAgICAgICAgbmFtZTogcixcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIlxuICAgICAgfSA6IHIpO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICB0aGlzLmxvYWQoKTtcbiAgICB9KTtcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHNhdmUoKSB7XG4gICAgICBjb25zdCByID0gdGhpcy5lZGl0b3IuZ2V0VmFsdWUoKSB8fCBcIlwiO1xuICAgICAgaWYgKHIudHJpbSgpID09PSBcIlwiKVxuICAgICAgICB0aGlzLmZuID0gXCJcIjtcbiAgICAgIGVsc2Uge1xuICAgICAgICBsZXQgZjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmID0gbmV3IEZ1bmN0aW9uKFwicmV0dXJuIGZ1bmN0aW9uIFwiICsgdGhpcy5uYW1lICsgXCIoXCIgKyB0aGlzLmFyZ1N0ciArIFwiKXtcIiArIHIgKyBcIn1cIikoKTtcbiAgICAgICAgfSBjYXRjaCAobykge1xuICAgICAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKG8pLCBNbih0aGlzLnQoXCJzdHJ1Y3QuZXJyb3JNc2dcIikpLCAhMTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJvZHkgPyB0aGlzLmZuID0gKHRoaXMuZm54ID8gXCIkRk5YOlwiIDogXCJcIikgKyByIDogdGhpcy5mbiA9IEFkICsgZiArIGJkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCksICEwO1xuICAgIH0sXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy4kZW1pdChcInVwZGF0ZTptb2RlbFZhbHVlXCIsIHRoaXMuZm4pLCB0aGlzLiRlbWl0KFwiY2hhbmdlXCIsIHRoaXMuZm4pLCB0aGlzLnZhbHVlID0gdGhpcy5mbiwgdGhpcy52aXNpYmxlID0gITE7XG4gICAgfSxcbiAgICB0aWR5VmFsdWUoKSB7XG4gICAgICBsZXQgciA9IHRoaXMubW9kZWxWYWx1ZSB8fCBcIlwiO1xuICAgICAgcmV0dXJuIHIuX19qc29uICYmIChyID0gci5fX2pzb24pLCB0aGlzLmZueCAmJiByLmluZGV4T2YoXCIkRk5YOlwiKSA9PT0gMCAmJiAociA9IHIuc2xpY2UoNSkpLCB0eXBlb2YgciA9PSBcImZ1bmN0aW9uXCIgPyAociA9IElyKHIpLCByID0gLyg/OmZ1bmN0aW9uXFxzKlxcdypcXHMqXFwoLio/XFwpfFxcKFxccyouKj9cXHMqXFwpXFxzKj0+KVxccyp7KFtcXHNcXFNdKil9L2cuZXhlYyhyKVsxXS50cmltKCkpIDogdGhpcy5ib2R5IHx8IChyID0gci5yZXBsYWNlKEFkICsgXCJmdW5jdGlvbiBcIiArIHRoaXMubmFtZSArIFwiKFwiICsgdGhpcy5hcmdTdHIgKyBcIil7XCIsIFwiXCIpLnJlcGxhY2UoXCJ9XCIgKyBiZCwgXCJcIikpLCB0aGlzLnZhbHVlID0gciwgcjtcbiAgICB9LFxuICAgIGxvYWQoKSB7XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGxldCByID0gdGhpcy50aWR5VmFsdWUoKTtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBZcihEaSh0aGlzLiRyZWZzLmVkaXRvciwge1xuICAgICAgICAgIGxpbmVOdW1iZXJzOiAhMCxcbiAgICAgICAgICBtb2RlOiB7IG5hbWU6IFwiamF2YXNjcmlwdFwiLCBnbG9iYWxWYXJzOiAhMCB9LFxuICAgICAgICAgIGV4dHJhS2V5czogeyBcIkN0cmwtU3BhY2VcIjogXCJhdXRvY29tcGxldGVcIiB9LFxuICAgICAgICAgIGxpbmU6ICEwLFxuICAgICAgICAgIHRhYlNpemU6IDIsXG4gICAgICAgICAgbGluZVdyYXBwaW5nOiAhMCxcbiAgICAgICAgICB2YWx1ZTogclxuICAgICAgICB9KSksIHRoaXMuZWRpdG9yLm9uKFwiaW5wdXRSZWFkXCIsIChmLCBvKSA9PiB7XG4gICAgICAgICAgby5rZXlDb2RlID09PSAzMiAmJiBvLmN0cmxLZXkgJiYgRGkuc2hvd0hpbnQoZiwgRGkuaGludC5qYXZhc2NyaXB0KTtcbiAgICAgICAgfSksIHRoaXMuZWRpdG9yLm9uKFwiY2hhbmdlXCIsICgpID0+IHtcbiAgICAgICAgICB0aGlzLnZpc2libGUgPSAhMDtcbiAgICAgICAgfSksIE1oKHRoaXMuZWRpdG9yKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSksIHVnID0geyBjbGFzczogXCJfZmQtZm5cIiB9LCBmZyA9IHsgY2xhc3M6IFwiX2ZkLWZuLXRpcFwiIH0sIGRnID0gLyogQF9fUFVSRV9fICovIGhlKFwiZGl2XCIsIHsgY2xhc3M6IFwiX2ZkLWZuLWluZFwiIH0sIG51bGwsIC0xKSwgY2cgPSB7IGNsYXNzOiBcImNtLWtleXdvcmRcIiB9LCBwZyA9IHsga2V5OiAwIH0sIGhnID0geyBjbGFzczogXCJfZmQtZm4tYXJnXCIgfSwgdmcgPSAvKiBAX19QVVJFX18gKi8gaGUoXCJpXCIsIHsgY2xhc3M6IFwiZmMtaWNvbiBpY29uLXF1ZXN0aW9uXCIgfSwgbnVsbCwgLTEpLCBtZyA9IHtcbiAgcmVmOiBcImVkaXRvclwiLFxuICBjbGFzczogXCJfZmQtZm4tZWRpdG9yXCJcbn0sIGdnID0gLyogQF9fUFVSRV9fICovIGhlKFwiZGl2XCIsIHsgY2xhc3M6IFwiX2ZkLWZuLXRpcFwiIH0sIFtcbiAgLyogQF9fUFVSRV9fICovIGhlKFwiZGl2XCIsIHsgY2xhc3M6IFwiX2ZkLWZuLWluZFwiIH0pLFxuICAvKiBAX19QVVJFX18gKi8gaGUoXCJkaXZcIiwgeyBjbGFzczogXCJjbS1rZXl3b3JkXCIgfSwgXCJ9XCIpXG5dLCAtMSk7XG5mdW5jdGlvbiB5ZyhyLCBmLCBvLCBpLCB0LCBzKSB7XG4gIGNvbnN0IGQgPSBiZShcImVsLXRhYmxlLWNvbHVtblwiKSwgYyA9IGJlKFwiZWwtdGFibGVcIiksIHAgPSBiZShcImVsLXBvcG92ZXJcIiksIHYgPSBiZShcImVsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGZlKCksIHhlKFwiZGl2XCIsIHVnLCBbXG4gICAgaGUoXCJkaXZcIiwgZmcsIFtcbiAgICAgIGRnLFxuICAgICAgaGUoXCJkaXZcIiwgY2csIFtcbiAgICAgICAgaGUoXCJzcGFuXCIsIG51bGwsIFtcbiAgICAgICAgICAkZShcImZ1bmN0aW9uIFwiICsgSWUoci5uYW1lKSArIFwiKFwiLCAxKSxcbiAgICAgICAgICAoZmUoITApLCB4ZShodCwgbnVsbCwgaG4oci5hcmdMaXN0LCAoYiwgUykgPT4gKGZlKCksIHhlKGh0LCBudWxsLCBbXG4gICAgICAgICAgICAkZShJZShTID4gMCA/IFwiLCBcIiA6IFwiXCIpLCAxKSxcbiAgICAgICAgICAgIGIudHlwZSA9PT0gXCJzdHJpbmdcIiA/IChmZSgpLCB4ZShcInNwYW5cIiwgcGcsIEllKGIubmFtZSksIDEpKSA6IChmZSgpLCBLZShwLCB7XG4gICAgICAgICAgICAgIGtleTogMSxcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiBcInRvcC1zdGFydFwiLFxuICAgICAgICAgICAgICB3aWR0aDogNDAwLFxuICAgICAgICAgICAgICB0cmlnZ2VyOiBcImNsaWNrXCIsXG4gICAgICAgICAgICAgIHRpdGxlOiBiLm5hbWUsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGIuaW5mbyB8fCBcIlwiXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgIHJlZmVyZW5jZTogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgIGhlKFwic3BhblwiLCBoZywgW1xuICAgICAgICAgICAgICAgICAgJGUoSWUoYi5uYW1lKSwgMSksXG4gICAgICAgICAgICAgICAgICB2Z1xuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgYi5jb2x1bW5zID8gKGZlKCksIEtlKGMsIHtcbiAgICAgICAgICAgICAgICAgIGtleTogMCxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IGIuY29sdW1ucyxcbiAgICAgICAgICAgICAgICAgIGJvcmRlcjogXCJcIlxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgdWUoZCwge1xuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEyMFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBcImxhYmVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHIudChcImV2ZW50LmxhYmVsXCIpXG4gICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDgsIFtcImxhYmVsXCJdKSxcbiAgICAgICAgICAgICAgICAgICAgdWUoZCwge1xuICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBcImluZm9cIixcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogci50KFwiZXZlbnQuaW5mb1wiKVxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCA4LCBbXCJsYWJlbFwiXSksXG4gICAgICAgICAgICAgICAgICAgIHVlKGQsIHtcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCI4MFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBcInR5cGVcIixcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogci50KFwiZXZlbnQudHlwZVwiKVxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCA4LCBbXCJsYWJlbFwiXSlcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgXzogMlxuICAgICAgICAgICAgICAgIH0sIDEwMzIsIFtcImRhdGFcIl0pKSA6IGplKFwiXCIsICEwKVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgXzogMlxuICAgICAgICAgICAgfSwgMTAzMiwgW1widGl0bGVcIiwgXCJjb250ZW50XCJdKSlcbiAgICAgICAgICBdLCA2NCkpKSwgMjU2KSksXG4gICAgICAgICAgJGUoXCIpIHtcIilcbiAgICAgICAgXSlcbiAgICAgIF0pXG4gICAgXSksXG4gICAgaGUoXCJkaXZcIiwgbWcsIG51bGwsIDUxMiksXG4gICAgZ2csXG4gICAgci52aXNpYmxlICYmIHIuYnV0dG9uID8gKGZlKCksIEtlKHYsIHtcbiAgICAgIGtleTogMCxcbiAgICAgIHR5cGU6IFwicHJpbWFyeVwiLFxuICAgICAgc2l6ZTogXCJzbWFsbFwiLFxuICAgICAgb25DbGljazogci5zYXZlXG4gICAgfSwge1xuICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAkZShJZShyLnQoXCJwcm9wcy5zYXZlXCIpKSwgMSlcbiAgICAgIF0pLFxuICAgICAgXzogMVxuICAgIH0sIDgsIFtcIm9uQ2xpY2tcIl0pKSA6IGplKFwiXCIsICEwKVxuICBdKTtcbn1cbmNvbnN0IEZhID0gLyogQF9fUFVSRV9fICovIE10KHNnLCBbW1wicmVuZGVyXCIsIHlnXV0pO1xuY29uc3QgU2kgPSBcIiRGTlg6XCIsIHBhID0gKHIpID0+IGZ0LlN0cmluZyhyKSAmJiByLmluZGV4T2YoU2kpID09PSAwLCBBZyA9IHd0KHtcbiAgbmFtZTogXCJFdmVudENvbmZpZ1wiLFxuICBlbWl0czogW1widXBkYXRlOm1vZGVsVmFsdWVcIl0sXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogW09iamVjdCwgdm9pZCAwLCBudWxsXSxcbiAgICBjb21wb25lbnROYW1lOiBcIlwiLFxuICAgIGV2ZW50TmFtZToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiAoKSA9PiBbXVxuICAgIH1cbiAgfSxcbiAgaW5qZWN0OiBbXCJkZXNpZ25lclwiXSxcbiAgY29tcG9uZW50czoge1xuICAgIEZuRWRpdG9yOiBGYVxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB2aXNpYmxlOiAhMSxcbiAgICAgIGFjdGl2ZURhdGE6IG51bGwsXG4gICAgICB2YWw6IG51bGwsXG4gICAgICBkZWZBY3RpdmU6IFwibm9cIixcbiAgICAgIGV2ZW50OiB7fSxcbiAgICAgIGN1czogITEsXG4gICAgICBjdXNWYWx1ZTogXCJcIixcbiAgICAgIGV2ZW50U3RyOiBcIlwiXG4gICAgfTtcbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICB0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVzaWduZXIuc2V0dXBTdGF0ZS50O1xuICAgIH0sXG4gICAgZXZlbnROdW0oKSB7XG4gICAgICBsZXQgciA9IDA7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5tb2RlbFZhbHVlIHx8IHt9KS5mb3JFYWNoKChmKSA9PiB7XG4gICAgICAgIHIgKz0gQXJyYXkuaXNBcnJheSh0aGlzLm1vZGVsVmFsdWVbZl0pID8gdGhpcy5tb2RlbFZhbHVlW2ZdLmxlbmd0aCA6IDE7XG4gICAgICB9KSwgcjtcbiAgICB9LFxuICAgIGZuQXJncygpIHtcbiAgICAgIHJldHVybiBbSGQodGhpcy50KV07XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIHZpc2libGUocikge1xuICAgICAgdGhpcy5ldmVudCA9IHIgPyB0aGlzLmxvYWRGTihSYSh7fSwgdGhpcy5tb2RlbFZhbHVlIHx8IHt9KSkgOiB7fSwgciB8fCAodGhpcy5kZXN0cm95KCksIHRoaXMuY2xvc2VDdXMoKSk7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgYWRkQ3VzKCkge1xuICAgICAgY29uc3QgciA9IHRoaXMuY3VzVmFsdWUgJiYgdGhpcy5jdXNWYWx1ZS50cmltKCk7XG4gICAgICByICYmICh0aGlzLmNsb3NlQ3VzKCksIHRoaXMuYWRkKHIpKTtcbiAgICB9LFxuICAgIGNsb3NlQ3VzKCkge1xuICAgICAgdGhpcy5jdXMgPSAhMSwgdGhpcy5jdXNWYWx1ZSA9IFwiXCI7XG4gICAgfSxcbiAgICBjdXNFdmVudCgpIHtcbiAgICAgIHRoaXMuY3VzID0gITA7XG4gICAgfSxcbiAgICBsb2FkRk4ocikge1xuICAgICAgY29uc3QgZiA9IHt9O1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goKG8pID0+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocltvXSkpIHtcbiAgICAgICAgICBjb25zdCBpID0gW107XG4gICAgICAgICAgcltvXS5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICAgICAgICBwYSh0KSA/IGkucHVzaCh0LnJlcGxhY2UoU2ksIFwiXCIpKSA6IGZ0LkZ1bmN0aW9uKHQpICYmIHBhKHQuX19qc29uKSA/IGkucHVzaCh0Ll9fanNvbi5yZXBsYWNlKFNpLCBcIlwiKSkgOiB0ICYmIHQuaW5kZXhPZihcIiRHTE9CQUw6XCIpID09PSAwICYmIGkucHVzaCh0KTtcbiAgICAgICAgICB9KSwgZltvXSA9IGk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHBhKHJbb10pID8gZltvXSA9IFtyW29dLnJlcGxhY2UoU2ksIFwiXCIpXSA6IGZ0LkZ1bmN0aW9uKHJbb10pICYmIHBhKHJbb10uX19qc29uKSA/IGZbb10gPSBbcltvXS5fX2pzb24ucmVwbGFjZShTaSwgXCJcIildIDogcltvXSAmJiByW29dLmluZGV4T2YoXCIkR0xPQkFMOlwiKSA9PT0gMCAmJiAoZltvXSA9IFtyW29dXSk7XG4gICAgICB9KSwgZjtcbiAgICB9LFxuICAgIHBhcnNlRk4ocikge1xuICAgICAgY29uc3QgZiA9IHt9O1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goKG8pID0+IHtcbiAgICAgICAgY29uc3QgaSA9IFtdO1xuICAgICAgICByW29dLmZvckVhY2goKHQsIHMpID0+IHtcbiAgICAgICAgICBpW3NdID0gdC5pbmRleE9mKFwiJEdMT0JBTDpcIikgIT09IDAgPyBTaSArIHQgOiB0O1xuICAgICAgICB9KSwgaS5sZW5ndGggPiAwICYmIChmW29dID0gaS5sZW5ndGggPT09IDEgPyBpWzBdIDogaSk7XG4gICAgICB9KSwgZjtcbiAgICB9LFxuICAgIGFkZChyKSB7XG4gICAgICBsZXQgZiA9IHt9O1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5ldmVudFtyXSkpXG4gICAgICAgIHRoaXMuZXZlbnRbcl0ucHVzaChcIlwiKSwgZiA9IHtcbiAgICAgICAgICBuYW1lOiByLFxuICAgICAgICAgIGl0ZW06IHRoaXMuZXZlbnRbcl0sXG4gICAgICAgICAgaW5kZXg6IHRoaXMuZXZlbnRbcl0ubGVuZ3RoIC0gMVxuICAgICAgICB9O1xuICAgICAgZWxzZSBpZiAodGhpcy5ldmVudFtyXSkge1xuICAgICAgICBjb25zdCBvID0gW3RoaXMuZXZlbnRbcl0sIFwiXCJdO1xuICAgICAgICB0aGlzLmV2ZW50W3JdID0gbywgZiA9IHtcbiAgICAgICAgICBuYW1lOiByLFxuICAgICAgICAgIGl0ZW06IG8sXG4gICAgICAgICAgaW5kZXg6IDFcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG8gPSBbXCJcIl07XG4gICAgICAgIHRoaXMuZXZlbnRbcl0gPSBvLCBmID0ge1xuICAgICAgICAgIG5hbWU6IHIsXG4gICAgICAgICAgaXRlbTogbyxcbiAgICAgICAgICBpbmRleDogMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5hY3RpdmVEYXRhIHx8IHRoaXMuZWRpdChmKTtcbiAgICB9LFxuICAgIGVkaXQocikge1xuICAgICAgci5rZXkgPSBfZSgpLCByLml0ZW0gPyB0aGlzLnZhbCA9IHIuaXRlbVtyLmluZGV4XSA6IHRoaXMudmFsID0gdGhpcy5ldmVudFtyLm5hbWVdLCB0aGlzLmFjdGl2ZURhdGEgPSByLCB0aGlzLmV2ZW50U3RyID0gdGhpcy52YWwsIHRoaXMuZGVmQWN0aXZlID0gci5uYW1lICsgKHIuaW5kZXggfHwgMCk7XG4gICAgfSxcbiAgICBzYXZlKCkge1xuICAgICAgaWYgKCF0aGlzLiRyZWZzLmZuLnNhdmUoKSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY29uc3QgciA9IHRoaXMuZXZlbnRTdHI7XG4gICAgICB0aGlzLmFjdGl2ZURhdGEuaXRlbSA/IHRoaXMuYWN0aXZlRGF0YS5pdGVtW3RoaXMuYWN0aXZlRGF0YS5pbmRleF0gPSByIDogdGhpcy5ldmVudFt0aGlzLmFjdGl2ZURhdGEubmFtZV0gPSByLCB0aGlzLmRlc3Ryb3koKTtcbiAgICB9LFxuICAgIHJtKHIpIHtcbiAgICAgIHIuaW5kZXggIT09IHZvaWQgMCA/IHIuaXRlbS5zcGxpY2Uoci5pbmRleCwgMSkgOiB0aGlzLiRkZWxldGUodGhpcy5ldmVudCwgci5uYW1lKSwgdGhpcy5kZWZBY3RpdmUgPT09IHIubmFtZSArIChyLmluZGV4IHx8IDApICYmIHRoaXMuZGVzdHJveSgpO1xuICAgIH0sXG4gICAgZGVzdHJveSgpIHtcbiAgICAgIHRoaXMuYWN0aXZlRGF0YSA9IG51bGwsIHRoaXMudmFsID0gbnVsbCwgdGhpcy5kZWZBY3RpdmUgPSBcIm5vXCI7XG4gICAgfSxcbiAgICBjbG9zZSgpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH0sXG4gICAgc3VibWl0KCkge1xuICAgICAgaWYgKHRoaXMuYWN0aXZlRGF0YSlcbiAgICAgICAgcmV0dXJuIE1uKHRoaXMudChcImV2ZW50LnNhdmVNc2dcIikpO1xuICAgICAgdGhpcy4kZW1pdChcInVwZGF0ZTptb2RlbFZhbHVlXCIsIHRoaXMucGFyc2VGTih0aGlzLmV2ZW50KSksIHRoaXMudmlzaWJsZSA9ICExLCB0aGlzLmRlc3Ryb3koKSwgdGhpcy5jbG9zZUN1cygpO1xuICAgIH1cbiAgfSxcbiAgYmVmb3JlQ3JlYXRlKCkge1xuICAgIHdpbmRvdy4kaW5qZWN0ID0ge1xuICAgICAgJGY6IHt9LFxuICAgICAgcnVsZTogW10sXG4gICAgICBzZWxmOiB7fSxcbiAgICAgIG9wdGlvbjoge30sXG4gICAgICBpbmplY3Q6IHt9LFxuICAgICAgYXJnczogW11cbiAgICB9O1xuICB9XG59KSwgYmcgPSB7IGNsYXNzOiBcIl9mZC1ldmVudFwiIH0sIENnID0geyBjbGFzczogXCJlbC1kcm9wZG93bi1saW5rXCIgfSwgRWcgPSAvKiBAX19QVVJFX18gKi8gaGUoXCJpXCIsIHsgY2xhc3M6IFwiZWwtaWNvbi1hcnJvdy1kb3duIGVsLWljb24tLXJpZ2h0XCIgfSwgbnVsbCwgLTEpLCBTZyA9IHsgY2xhc3M6IFwiX2ZkLWV2ZW50LWl0ZW1cIiB9LCB4ZyA9IFtcIm9uQ2xpY2tcIl0sIHdnID0geyBjbGFzczogXCJfZmQtZXZlbnQtbWV0aG9kXCIgfSwgVGcgPSBbXCJvbkNsaWNrXCJdLCBEZyA9IFtcIm9uQ2xpY2tcIl0sIFJnID0geyBjbGFzczogXCJfZmQtZXZlbnQtbWV0aG9kXCIgfSwgTWcgPSBbXCJvbkNsaWNrXCJdLCBJZyA9IHtcbiAgdGFyZ2V0OiBcIl9ibGFua1wiLFxuICBocmVmOiBcImh0dHBzOi8vZm9ybS1jcmVhdGUuY29tL3YzL2luc3RhbmNlXCJcbn07XG5mdW5jdGlvbiBOZyhyLCBmLCBvLCBpLCB0LCBzKSB7XG4gIGNvbnN0IGQgPSBiZShcImVsLWJ1dHRvblwiKSwgYyA9IGJlKFwiZWwtYmFkZ2VcIiksIHAgPSBiZShcImVsLWRyb3Bkb3duLWl0ZW1cIiksIHYgPSBiZShcImVsLWRyb3Bkb3duLW1lbnVcIiksIGIgPSBiZShcImVsLWRyb3Bkb3duXCIpLCBTID0gYmUoXCJlbC1oZWFkZXJcIiksIEQgPSBiZShcImVsLW1lbnUtaXRlbVwiKSwgVCA9IGJlKFwiZWwtaW5wdXRcIiksIG0gPSBiZShcImVsLW1lbnVcIiksIHggPSBiZShcImVsLW1haW5cIiksIFIgPSBiZShcImVsLWNvbnRhaW5lclwiKSwgdyA9IGJlKFwiZWwtYXNpZGVcIiksIEEgPSBiZShcIkZuRWRpdG9yXCIpLCBFID0gYmUoXCJlbC1kaWFsb2dcIik7XG4gIHJldHVybiBmZSgpLCB4ZShcImRpdlwiLCBiZywgW1xuICAgIHVlKGMsIHtcbiAgICAgIHZhbHVlOiByLmV2ZW50TnVtLFxuICAgICAgdHlwZTogXCJ3YXJuaW5nXCIsXG4gICAgICBoaWRkZW46IHIuZXZlbnROdW0gPCAxXG4gICAgfSwge1xuICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICB1ZShkLCB7XG4gICAgICAgICAgc2l6ZTogXCJzbWFsbFwiLFxuICAgICAgICAgIG9uQ2xpY2s6IGZbMF0gfHwgKGZbMF0gPSAoQykgPT4gci52aXNpYmxlID0gITApXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAkZShJZShyLnQoXCJldmVudC50aXRsZVwiKSksIDEpXG4gICAgICAgICAgXSksXG4gICAgICAgICAgXzogMVxuICAgICAgICB9KVxuICAgICAgXSksXG4gICAgICBfOiAxXG4gICAgfSwgOCwgW1widmFsdWVcIiwgXCJoaWRkZW5cIl0pLFxuICAgIHVlKEUsIHtcbiAgICAgIGNsYXNzOiBcIl9mZC1ldmVudC1kaWFsb2dcIixcbiAgICAgIHRpdGxlOiByLnQoXCJldmVudC50aXRsZVwiKSxcbiAgICAgIG1vZGVsVmFsdWU6IHIudmlzaWJsZSxcbiAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiBmWzhdIHx8IChmWzhdID0gKEMpID0+IHIudmlzaWJsZSA9IEMpLFxuICAgICAgXCJkZXN0cm95LW9uLWNsb3NlXCI6IFwiXCIsXG4gICAgICBcImNsb3NlLW9uLWNsaWNrLW1vZGFsXCI6ICExLFxuICAgICAgXCJhcHBlbmQtdG8tYm9keVwiOiBcIlwiLFxuICAgICAgd2lkdGg6IFwiOTgwcHhcIlxuICAgIH0sIHtcbiAgICAgIGZvb3RlcjogcmUoKCkgPT4gW1xuICAgICAgICBoZShcImRpdlwiLCBudWxsLCBbXG4gICAgICAgICAgdWUoZCwge1xuICAgICAgICAgICAgc2l6ZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBvbkNsaWNrOiBmWzddIHx8IChmWzddID0gKEMpID0+IHIudmlzaWJsZSA9ICExKVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgJGUoSWUoci50KFwicHJvcHMuY2FuY2VsXCIpKSwgMSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgXzogMVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHVlKGQsIHtcbiAgICAgICAgICAgIHR5cGU6IFwicHJpbWFyeVwiLFxuICAgICAgICAgICAgc2l6ZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBvbkNsaWNrOiByLnN1Ym1pdCxcbiAgICAgICAgICAgIGNvbG9yOiBcIiMyZjczZmZcIlxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgJGUoSWUoci50KFwicHJvcHMub2tcIikpLCAxKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfOiAxXG4gICAgICAgICAgfSwgOCwgW1wib25DbGlja1wiXSlcbiAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICB1ZShSLCB7XG4gICAgICAgICAgY2xhc3M6IFwiX2ZkLWV2ZW50LWNvblwiLFxuICAgICAgICAgIHN0eWxlOiB7IGhlaWdodDogXCI2MDBweFwiIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgIHVlKHcsIHsgc3R5bGU6IHsgd2lkdGg6IFwiMzAwcHhcIiB9IH0sIHtcbiAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgIHVlKFIsIHsgY2xhc3M6IFwiX2ZkLWV2ZW50LWxcIiB9LCB7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgIHVlKFMsIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJfZmQtZXZlbnQtaGVhZFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCI0MHB4XCJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVlKGIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwb3BwZXItY2xhc3NcIjogXCJfZmQtZXZlbnQtZHJvcGRvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcjogXCJjbGlja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50OiBcImJvdHRvbS1zdGFydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duOiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWUodiwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmUoITApLCB4ZShodCwgbnVsbCwgaG4oci5ldmVudE5hbWUsIChDKSA9PiAoZmUoKSwgS2UocCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogQyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoTSkgPT4gci5hZGQoQylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlKFwiZGl2XCIsIFNnLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlKFwic3BhblwiLCBudWxsLCBJZShDKSwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzogMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDMyLCBbXCJvbkNsaWNrXCJdKSkpLCAxMjgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWUocCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZWQ6IHIuZXZlbnROYW1lLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogci5jdXNFdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGUoXCJkaXZcIiwgbnVsbCwgSWUoci50KFwicHJvcHMuY3VzdG9tXCIpKSwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDgsIFtcImRpdmlkZWRcIiwgXCJvbkNsaWNrXCJdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcInNwYW5cIiwgQ2csIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVlKGQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluazogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJwcmltYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZShJZShyLnQoXCJldmVudC5jcmVhdGVcIikpLCAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB1ZSh4LCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgdWUobSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcImRlZmF1bHQtYWN0aXZlXCI6IHIuZGVmQWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbFZhbHVlOiByLmFjdGl2ZURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiBmWzVdIHx8IChmWzVdID0gKEMpID0+IHIuYWN0aXZlRGF0YSA9IEMpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmUoITApLCB4ZShodCwgbnVsbCwgaG4oci5ldmVudCwgKEMsIE0pID0+IChmZSgpLCB4ZShodCwgbnVsbCwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShDKSA/IChmZSghMCksIHhlKGh0LCB7IGtleTogMCB9LCBobihDLCAoeSwgQikgPT4gKGZlKCksIEtlKEQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBNICsgQixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IE0gKyBCXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJfZmQtZXZlbnQtdGl0bGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IEhuKCgkKSA9PiByLmVkaXQoeyBuYW1lOiBNLCBpdGVtOiBDLCBpbmRleDogQiB9KSwgW1wic3RvcFwiXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcImRpdlwiLCB3ZywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcInNwYW5cIiwgbnVsbCwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlKFwiZnVuY3Rpb25cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGUoXCJzcGFuXCIsIG51bGwsIEllKE0pLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJmYy1pY29uIGljb24tZGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IEhuKCgkKSA9PiByLnJtKHsgbmFtZTogTSwgaXRlbTogQywgaW5kZXg6IEIgfSksIFtcInN0b3BcIl0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCA4LCBUZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLCA4LCB4ZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMzIsIFtcImluZGV4XCJdKSkpLCAxMjgpKSA6IChmZSgpLCBLZShELCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IE0gKyAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJfZmQtZXZlbnQtdGl0bGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IEhuKCh5KSA9PiByLmVkaXQoeyBuYW1lOiBNIH0pLCBbXCJzdG9wXCJdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlKFwiZGl2XCIsIFJnLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlKFwic3BhblwiLCBudWxsLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGUoXCJmdW5jdGlvblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcInNwYW5cIiwgbnVsbCwgSWUoTSksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcImZjLWljb24gaWNvbi1kZWxldGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogSG4oKHkpID0+IHIucm0oeyBuYW1lOiBNIH0pLCBbXCJzdG9wXCJdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCwgOCwgTWcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwgOCwgRGcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDMyLCBbXCJpbmRleFwiXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwgNjQpKSksIDI1NikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuY3VzID8gKGZlKCksIEtlKEQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IFwicGFkZGluZy1sZWZ0XCI6IFwiMTBweFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogXCJjdXN0b21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGUoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIl9mZC1ldmVudC10aXRsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IGZbNF0gfHwgKGZbNF0gPSBIbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgW1wic3RvcFwiXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZShULCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsVmFsdWU6IHIuY3VzVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogZlsxXSB8fCAoZlsxXSA9IChDKSA9PiByLmN1c1ZhbHVlID0gQyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uS2V5ZG93bjogeWgoci5hZGRDdXMsIFtcImVudGVyXCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiByLnQoXCJldmVudC5wbGFjZWhvbGRlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDgsIFtcIm1vZGVsVmFsdWVcIiwgXCJvbktleWRvd25cIiwgXCJwbGFjZWhvbGRlclwiXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGUoXCJkaXZcIiwgbnVsbCwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGUoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiZmMtaWNvbiBpY29uLWFkZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBmWzJdIHx8IChmWzJdID0gSG4oKC4uLkMpID0+IHIuYWRkQ3VzICYmIHIuYWRkQ3VzKC4uLkMpLCBbXCJzdG9wXCJdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGUoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiZmMtaWNvbiBpY29uLWRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBmWzNdIHx8IChmWzNdID0gSG4oKC4uLkMpID0+IHIuY2xvc2VDdXMgJiYgci5jbG9zZUN1cyguLi5DKSwgW1wic3RvcFwiXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkgOiBqZShcIlwiLCAhMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDgsIFtcImRlZmF1bHQtYWN0aXZlXCIsIFwibW9kZWxWYWx1ZVwiXSlcbiAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB1ZSh4LCBudWxsLCB7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICB1ZShSLCB7IGNsYXNzOiBcIl9mZC1ldmVudC1yXCIgfSwge1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICByLmFjdGl2ZURhdGEgPyAoZmUoKSwgS2UoUywge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogMCxcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJfZmQtZXZlbnQtaGVhZFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCI0MHB4XCJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlKFwiZGl2XCIsIG51bGwsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGUoXCJhXCIsIElnLCBJZShyLnQoXCJmb3JtLmRvY3VtZW50XCIpKSwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGUoXCJkaXZcIiwgbnVsbCwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB1ZShkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJzbWFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHIuY2xvc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlKEllKHIudChcInByb3BzLmNhbmNlbFwiKSksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCA4LCBbXCJvbkNsaWNrXCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdWUoZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21hbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInByaW1hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiByLnNhdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwiIzJmNzNmZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZShJZShyLnQoXCJwcm9wcy5zYXZlXCIpKSwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDgsIFtcIm9uQ2xpY2tcIl0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgfSkpIDogamUoXCJcIiwgITApLFxuICAgICAgICAgICAgICAgICAgICByLmFjdGl2ZURhdGEgPyAoZmUoKSwgS2UoeCwgeyBrZXk6IDEgfSwge1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVlKEEsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiBcImZuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsVmFsdWU6IHIuZXZlbnRTdHIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiBmWzZdIHx8IChmWzZdID0gKEMpID0+IHIuZXZlbnRTdHIgPSBDKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogci5hY3RpdmVEYXRhLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHIuZm5BcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyBoZWlnaHQ6IFwiNTE5cHhcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCA4LCBbXCJtb2RlbFZhbHVlXCIsIFwibmFtZVwiLCBcImFyZ3NcIl0pXG4gICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgICAgICAgICB9KSkgOiBqZShcIlwiLCAhMClcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF86IDFcbiAgICAgICAgfSlcbiAgICAgIF0pLFxuICAgICAgXzogMVxuICAgIH0sIDgsIFtcInRpdGxlXCIsIFwibW9kZWxWYWx1ZVwiXSlcbiAgXSk7XG59XG5jb25zdCBhYyA9IC8qIEBfX1BVUkVfXyAqLyBNdChBZywgW1tcInJlbmRlclwiLCBOZ11dKTtcbmZ1bmN0aW9uIE9nKHIsIGYpIHtcbiAgdmFyIG8gPSBudWxsO1xuICByZXR1cm4gZnVuY3Rpb24oLi4uaSkge1xuICAgIG8gIT09IG51bGwgJiYgY2xlYXJUaW1lb3V0KG8pLCBvID0gc2V0VGltZW91dCgoKSA9PiByLmNhbGwodGhpcywgLi4uaSksIGYpO1xuICB9O1xufVxuLyohXG4gIEhpZ2hsaWdodC5qcyB2MTEuOS4wIChnaXQ6IGI3ZWM0YmZhZmMpXG4gIChjKSAyMDA2LTIwMjQgdW5kZWZpbmVkIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAgTGljZW5zZTogQlNELTMtQ2xhdXNlXG4gKi9cbmZ1bmN0aW9uIGxjKHIpIHtcbiAgcmV0dXJuIHIgaW5zdGFuY2VvZiBNYXAgPyByLmNsZWFyID0gci5kZWxldGUgPSByLnNldCA9ICgpID0+IHtcbiAgICB0aHJvdyBFcnJvcihcIm1hcCBpcyByZWFkLW9ubHlcIik7XG4gIH0gOiByIGluc3RhbmNlb2YgU2V0ICYmIChyLmFkZCA9IHIuY2xlYXIgPSByLmRlbGV0ZSA9ICgpID0+IHtcbiAgICB0aHJvdyBFcnJvcihcInNldCBpcyByZWFkLW9ubHlcIik7XG4gIH0pLCBPYmplY3QuZnJlZXplKHIpLCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKS5mb3JFYWNoKChmKSA9PiB7XG4gICAgY29uc3QgbyA9IHJbZl0sIGkgPSB0eXBlb2YgbztcbiAgICBpICE9PSBcIm9iamVjdFwiICYmIGkgIT09IFwiZnVuY3Rpb25cIiB8fCBPYmplY3QuaXNGcm96ZW4obykgfHwgbGMobyk7XG4gIH0pLCByO1xufVxuY2xhc3MgQ2Qge1xuICBjb25zdHJ1Y3RvcihmKSB7XG4gICAgZi5kYXRhID09PSB2b2lkIDAgJiYgKGYuZGF0YSA9IHt9KSwgdGhpcy5kYXRhID0gZi5kYXRhLCB0aGlzLmlzTWF0Y2hJZ25vcmVkID0gITE7XG4gIH1cbiAgaWdub3JlTWF0Y2goKSB7XG4gICAgdGhpcy5pc01hdGNoSWdub3JlZCA9ICEwO1xuICB9XG59XG5mdW5jdGlvbiBzYyhyKSB7XG4gIHJldHVybiByLnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKS5yZXBsYWNlKC88L2csIFwiJmx0O1wiKS5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKS5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKS5yZXBsYWNlKC8nL2csIFwiJiN4Mjc7XCIpO1xufVxuZnVuY3Rpb24gUnIociwgLi4uZikge1xuICBjb25zdCBvID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGZvciAoY29uc3QgaSBpbiByKVxuICAgIG9baV0gPSByW2ldO1xuICByZXR1cm4gZi5mb3JFYWNoKChpKSA9PiB7XG4gICAgZm9yIChjb25zdCB0IGluIGkpXG4gICAgICBvW3RdID0gaVt0XTtcbiAgfSksIG87XG59XG5jb25zdCBFZCA9IChyKSA9PiAhIXIuc2NvcGU7XG5jbGFzcyBQZyB7XG4gIGNvbnN0cnVjdG9yKGYsIG8pIHtcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCIsIHRoaXMuY2xhc3NQcmVmaXggPSBvLmNsYXNzUHJlZml4LCBmLndhbGsodGhpcyk7XG4gIH1cbiAgYWRkVGV4dChmKSB7XG4gICAgdGhpcy5idWZmZXIgKz0gc2MoZik7XG4gIH1cbiAgb3Blbk5vZGUoZikge1xuICAgIGlmICghRWQoZikpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgbyA9ICgoaSwgeyBwcmVmaXg6IHQgfSkgPT4ge1xuICAgICAgaWYgKGkuc3RhcnRzV2l0aChcImxhbmd1YWdlOlwiKSlcbiAgICAgICAgcmV0dXJuIGkucmVwbGFjZShcImxhbmd1YWdlOlwiLCBcImxhbmd1YWdlLVwiKTtcbiAgICAgIGlmIChpLmluY2x1ZGVzKFwiLlwiKSkge1xuICAgICAgICBjb25zdCBzID0gaS5zcGxpdChcIi5cIik7XG4gICAgICAgIHJldHVybiBbYCR7dH0ke3Muc2hpZnQoKX1gLCAuLi5zLm1hcCgoZCwgYykgPT4gYCR7ZH0ke1wiX1wiLnJlcGVhdChjICsgMSl9YCldLmpvaW4oXCIgXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGAke3R9JHtpfWA7XG4gICAgfSkoZi5zY29wZSwgeyBwcmVmaXg6IHRoaXMuY2xhc3NQcmVmaXggfSk7XG4gICAgdGhpcy5zcGFuKG8pO1xuICB9XG4gIGNsb3NlTm9kZShmKSB7XG4gICAgRWQoZikgJiYgKHRoaXMuYnVmZmVyICs9IFwiPC9zcGFuPlwiKTtcbiAgfVxuICB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXI7XG4gIH1cbiAgc3BhbihmKSB7XG4gICAgdGhpcy5idWZmZXIgKz0gYDxzcGFuIGNsYXNzPVwiJHtmfVwiPmA7XG4gIH1cbn1cbmNvbnN0IFNkID0gKHIgPSB7fSkgPT4ge1xuICBjb25zdCBmID0geyBjaGlsZHJlbjogW10gfTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZiwgciksIGY7XG59O1xuY2xhc3MgJHMge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnJvb3ROb2RlID0gU2QoKSwgdGhpcy5zdGFjayA9IFt0aGlzLnJvb3ROb2RlXTtcbiAgfVxuICBnZXQgdG9wKCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gIH1cbiAgZ2V0IHJvb3QoKSB7XG4gICAgcmV0dXJuIHRoaXMucm9vdE5vZGU7XG4gIH1cbiAgYWRkKGYpIHtcbiAgICB0aGlzLnRvcC5jaGlsZHJlbi5wdXNoKGYpO1xuICB9XG4gIG9wZW5Ob2RlKGYpIHtcbiAgICBjb25zdCBvID0gU2QoeyBzY29wZTogZiB9KTtcbiAgICB0aGlzLmFkZChvKSwgdGhpcy5zdGFjay5wdXNoKG8pO1xuICB9XG4gIGNsb3NlTm9kZSgpIHtcbiAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPiAxKVxuICAgICAgcmV0dXJuIHRoaXMuc3RhY2sucG9wKCk7XG4gIH1cbiAgY2xvc2VBbGxOb2RlcygpIHtcbiAgICBmb3IgKDsgdGhpcy5jbG9zZU5vZGUoKTsgKVxuICAgICAgO1xuICB9XG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5yb290Tm9kZSwgbnVsbCwgNCk7XG4gIH1cbiAgd2FsayhmKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuX3dhbGsoZiwgdGhpcy5yb290Tm9kZSk7XG4gIH1cbiAgc3RhdGljIF93YWxrKGYsIG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG8gPT0gXCJzdHJpbmdcIiA/IGYuYWRkVGV4dChvKSA6IG8uY2hpbGRyZW4gJiYgKGYub3Blbk5vZGUobyksIG8uY2hpbGRyZW4uZm9yRWFjaCgoaSkgPT4gdGhpcy5fd2FsayhmLCBpKSksIGYuY2xvc2VOb2RlKG8pKSwgZjtcbiAgfVxuICBzdGF0aWMgX2NvbGxhcHNlKGYpIHtcbiAgICB0eXBlb2YgZiAhPSBcInN0cmluZ1wiICYmIGYuY2hpbGRyZW4gJiYgKGYuY2hpbGRyZW4uZXZlcnkoKG8pID0+IHR5cGVvZiBvID09IFwic3RyaW5nXCIpID8gZi5jaGlsZHJlbiA9IFtmLmNoaWxkcmVuLmpvaW4oXCJcIildIDogZi5jaGlsZHJlbi5mb3JFYWNoKChvKSA9PiB7XG4gICAgICAkcy5fY29sbGFwc2Uobyk7XG4gICAgfSkpO1xuICB9XG59XG5jbGFzcyBGZyBleHRlbmRzICRzIHtcbiAgY29uc3RydWN0b3IoZikge1xuICAgIHN1cGVyKCksIHRoaXMub3B0aW9ucyA9IGY7XG4gIH1cbiAgYWRkVGV4dChmKSB7XG4gICAgZiAhPT0gXCJcIiAmJiB0aGlzLmFkZChmKTtcbiAgfVxuICBzdGFydFNjb3BlKGYpIHtcbiAgICB0aGlzLm9wZW5Ob2RlKGYpO1xuICB9XG4gIGVuZFNjb3BlKCkge1xuICAgIHRoaXMuY2xvc2VOb2RlKCk7XG4gIH1cbiAgX19hZGRTdWJsYW5ndWFnZShmLCBvKSB7XG4gICAgY29uc3QgaSA9IGYucm9vdDtcbiAgICBvICYmIChpLnNjb3BlID0gXCJsYW5ndWFnZTpcIiArIG8pLCB0aGlzLmFkZChpKTtcbiAgfVxuICB0b0hUTUwoKSB7XG4gICAgcmV0dXJuIG5ldyBQZyh0aGlzLCB0aGlzLm9wdGlvbnMpLnZhbHVlKCk7XG4gIH1cbiAgZmluYWxpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VBbGxOb2RlcygpLCAhMDtcbiAgfVxufVxuZnVuY3Rpb24geG8ocikge1xuICByZXR1cm4gciA/IHR5cGVvZiByID09IFwic3RyaW5nXCIgPyByIDogci5zb3VyY2UgOiBudWxsO1xufVxuZnVuY3Rpb24gdWMocikge1xuICByZXR1cm4gS3IoXCIoPz1cIiwgciwgXCIpXCIpO1xufVxuZnVuY3Rpb24gTGcocikge1xuICByZXR1cm4gS3IoXCIoPzpcIiwgciwgXCIpKlwiKTtcbn1cbmZ1bmN0aW9uIEJnKHIpIHtcbiAgcmV0dXJuIEtyKFwiKD86XCIsIHIsIFwiKT9cIik7XG59XG5mdW5jdGlvbiBLciguLi5yKSB7XG4gIHJldHVybiByLm1hcCgoZikgPT4geG8oZikpLmpvaW4oXCJcIik7XG59XG5mdW5jdGlvbiBrcyguLi5yKSB7XG4gIHJldHVybiBcIihcIiArICgoKG8pID0+IHtcbiAgICBjb25zdCBpID0gb1tvLmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiB0eXBlb2YgaSA9PSBcIm9iamVjdFwiICYmIGkuY29uc3RydWN0b3IgPT09IE9iamVjdCA/IChvLnNwbGljZShvLmxlbmd0aCAtIDEsIDEpLCBpKSA6IHt9O1xuICB9KShyKS5jYXB0dXJlID8gXCJcIiA6IFwiPzpcIikgKyByLm1hcCgobykgPT4geG8obykpLmpvaW4oXCJ8XCIpICsgXCIpXCI7XG59XG5mdW5jdGlvbiBmYyhyKSB7XG4gIHJldHVybiBSZWdFeHAoci50b1N0cmluZygpICsgXCJ8XCIpLmV4ZWMoXCJcIikubGVuZ3RoIC0gMTtcbn1cbmNvbnN0IEhnID0gL1xcWyg/OlteXFxcXFxcXV18XFxcXC4pKlxcXXxcXChcXD8/fFxcXFwoWzEtOV1bMC05XSopfFxcXFwuLztcbmZ1bmN0aW9uIFBzKHIsIHsgam9pbldpdGg6IGYgfSkge1xuICBsZXQgbyA9IDA7XG4gIHJldHVybiByLm1hcCgoaSkgPT4ge1xuICAgIG8gKz0gMTtcbiAgICBjb25zdCB0ID0gbztcbiAgICBsZXQgcyA9IHhvKGkpLCBkID0gXCJcIjtcbiAgICBmb3IgKDsgcy5sZW5ndGggPiAwOyApIHtcbiAgICAgIGNvbnN0IGMgPSBIZy5leGVjKHMpO1xuICAgICAgaWYgKCFjKSB7XG4gICAgICAgIGQgKz0gcztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkICs9IHMuc3Vic3RyaW5nKDAsIGMuaW5kZXgpLCBzID0gcy5zdWJzdHJpbmcoYy5pbmRleCArIGNbMF0ubGVuZ3RoKSwgY1swXVswXSA9PT0gXCJcXFxcXCIgJiYgY1sxXSA/IGQgKz0gXCJcXFxcXCIgKyAoTnVtYmVyKGNbMV0pICsgdCkgOiAoZCArPSBjWzBdLCBjWzBdID09PSBcIihcIiAmJiBvKyspO1xuICAgIH1cbiAgICByZXR1cm4gZDtcbiAgfSkubWFwKChpKSA9PiBgKCR7aX0pYCkuam9pbihmKTtcbn1cbmNvbnN0IHhkID0gXCJbYS16QS1aXVxcXFx3KlwiLCBFcyA9IFwiW2EtekEtWl9dXFxcXHcqXCIsIHdkID0gXCJcXFxcYlxcXFxkKyhcXFxcLlxcXFxkKyk/XCIsIFRkID0gXCIoLT8pKFxcXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcXFxiXFxcXGQrKFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspKFtlRV1bLStdP1xcXFxkKyk/KVwiLCBEZCA9IFwiXFxcXGIoMGJbMDFdKylcIiwgYm8gPSB7XG4gIGJlZ2luOiBcIlxcXFxcXFxcW1xcXFxzXFxcXFNdXCIsXG4gIHJlbGV2YW5jZTogMFxufSwgJGcgPSB7XG4gIHNjb3BlOiBcInN0cmluZ1wiLFxuICBiZWdpbjogXCInXCIsXG4gIGVuZDogXCInXCIsXG4gIGlsbGVnYWw6IFwiXFxcXG5cIixcbiAgY29udGFpbnM6IFtib11cbn0sIGtnID0ge1xuICBzY29wZTogXCJzdHJpbmdcIixcbiAgYmVnaW46ICdcIicsXG4gIGVuZDogJ1wiJyxcbiAgaWxsZWdhbDogXCJcXFxcblwiLFxuICBjb250YWluczogW2JvXVxufSwgTGEgPSAociwgZiwgbyA9IHt9KSA9PiB7XG4gIGNvbnN0IGkgPSBScih7XG4gICAgc2NvcGU6IFwiY29tbWVudFwiLFxuICAgIGJlZ2luOiByLFxuICAgIGVuZDogZixcbiAgICBjb250YWluczogW11cbiAgfSwgbyk7XG4gIGkuY29udGFpbnMucHVzaCh7XG4gICAgc2NvcGU6IFwiZG9jdGFnXCIsXG4gICAgYmVnaW46IFwiWyBdKig/PShUT0RPfEZJWE1FfE5PVEV8QlVHfE9QVElNSVpFfEhBQ0t8WFhYKTopXCIsXG4gICAgZW5kOiAvKFRPRE98RklYTUV8Tk9URXxCVUd8T1BUSU1JWkV8SEFDS3xYWFgpOi8sXG4gICAgZXhjbHVkZUJlZ2luOiAhMCxcbiAgICByZWxldmFuY2U6IDBcbiAgfSk7XG4gIGNvbnN0IHQgPSBrcyhcIklcIiwgXCJhXCIsIFwiaXNcIiwgXCJzb1wiLCBcInVzXCIsIFwidG9cIiwgXCJhdFwiLCBcImlmXCIsIFwiaW5cIiwgXCJpdFwiLCBcIm9uXCIsIC9bQS1aYS16XStbJ10oZHx2ZXxyZXxsbHx0fHN8bikvLCAvW0EtWmEtel0rWy1dW2Etel0rLywgL1tBLVphLXpdW2Etel17Mix9Lyk7XG4gIHJldHVybiBpLmNvbnRhaW5zLnB1c2goeyBiZWdpbjogS3IoL1sgXSsvLCBcIihcIiwgdCwgL1suXT9bOl0/KFsuXVsgXXxbIF0pLywgXCIpezN9XCIpIH0pLCBpO1xufSwgamcgPSBMYShcIi8vXCIsIFwiJFwiKSwgVWcgPSBMYShcIi9cXFxcKlwiLCBcIlxcXFwqL1wiKSwgemcgPSBMYShcIiNcIiwgXCIkXCIpO1xudmFyIGhhID0gT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgQVBPU19TVFJJTkdfTU9ERTogJGcsXG4gIEJBQ0tTTEFTSF9FU0NBUEU6IGJvLFxuICBCSU5BUllfTlVNQkVSX01PREU6IHtcbiAgICBzY29wZTogXCJudW1iZXJcIixcbiAgICBiZWdpbjogRGQsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH0sXG4gIEJJTkFSWV9OVU1CRVJfUkU6IERkLFxuICBDT01NRU5UOiBMYSxcbiAgQ19CTE9DS19DT01NRU5UX01PREU6IFVnLFxuICBDX0xJTkVfQ09NTUVOVF9NT0RFOiBqZyxcbiAgQ19OVU1CRVJfTU9ERToge1xuICAgIHNjb3BlOiBcIm51bWJlclwiLFxuICAgIGJlZ2luOiBUZCxcbiAgICByZWxldmFuY2U6IDBcbiAgfSxcbiAgQ19OVU1CRVJfUkU6IFRkLFxuICBFTkRfU0FNRV9BU19CRUdJTjogKHIpID0+IE9iamVjdC5hc3NpZ24ociwge1xuICAgIFwib246YmVnaW5cIjogKGYsIG8pID0+IHtcbiAgICAgIG8uZGF0YS5fYmVnaW5NYXRjaCA9IGZbMV07XG4gICAgfSxcbiAgICBcIm9uOmVuZFwiOiAoZiwgbykgPT4ge1xuICAgICAgby5kYXRhLl9iZWdpbk1hdGNoICE9PSBmWzFdICYmIG8uaWdub3JlTWF0Y2goKTtcbiAgICB9XG4gIH0pLFxuICBIQVNIX0NPTU1FTlRfTU9ERTogemcsXG4gIElERU5UX1JFOiB4ZCxcbiAgTUFUQ0hfTk9USElOR19SRTogL1xcYlxcQi8sXG4gIE1FVEhPRF9HVUFSRDogeyBiZWdpbjogXCJcXFxcLlxcXFxzKlwiICsgRXMsIHJlbGV2YW5jZTogMCB9LFxuICBOVU1CRVJfTU9ERTogeyBzY29wZTogXCJudW1iZXJcIiwgYmVnaW46IHdkLCByZWxldmFuY2U6IDAgfSxcbiAgTlVNQkVSX1JFOiB3ZCxcbiAgUEhSQVNBTF9XT1JEU19NT0RFOiB7XG4gICAgYmVnaW46IC9cXGIoYXxhbnx0aGV8YXJlfEknbXxpc24ndHxkb24ndHxkb2Vzbid0fHdvbid0fGJ1dHxqdXN0fHNob3VsZHxwcmV0dHl8c2ltcGx5fGVub3VnaHxnb25uYXxnb2luZ3x3dGZ8c298c3VjaHx3aWxsfHlvdXx5b3VyfHRoZXl8bGlrZXxtb3JlKVxcYi9cbiAgfSxcbiAgUVVPVEVfU1RSSU5HX01PREU6IGtnLFxuICBSRUdFWFBfTU9ERToge1xuICAgIHNjb3BlOiBcInJlZ2V4cFwiLFxuICAgIGJlZ2luOiAvXFwvKD89W14vXFxuXSpcXC8pLyxcbiAgICBlbmQ6IC9cXC9bZ2ltdXldKi8sXG4gICAgY29udGFpbnM6IFtibywgeyBiZWdpbjogL1xcWy8sIGVuZDogL1xcXS8sIHJlbGV2YW5jZTogMCwgY29udGFpbnM6IFtib10gfV1cbiAgfSxcbiAgUkVfU1RBUlRFUlNfUkU6IFwiIXwhPXwhPT18JXwlPXwmfCYmfCY9fFxcXFwqfFxcXFwqPXxcXFxcK3xcXFxcKz18LHwtfC09fC89fC98Onw7fDw8fDw8PXw8PXw8fD09PXw9PXw9fD4+Pj18Pj49fD49fD4+Pnw+Pnw+fFxcXFw/fFxcXFxbfFxcXFx7fFxcXFwofFxcXFxefFxcXFxePXxcXFxcfHxcXFxcfD18XFxcXHxcXFxcfHx+XCIsXG4gIFNIRUJBTkc6IChyID0ge30pID0+IHtcbiAgICBjb25zdCBmID0gL14jIVsgXSpcXC8vO1xuICAgIHJldHVybiByLmJpbmFyeSAmJiAoci5iZWdpbiA9IEtyKGYsIC8uKlxcYi8sIHIuYmluYXJ5LCAvXFxiLiovKSksIFJyKHtcbiAgICAgIHNjb3BlOiBcIm1ldGFcIixcbiAgICAgIGJlZ2luOiBmLFxuICAgICAgZW5kOiAvJC8sXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBcIm9uOmJlZ2luXCI6IChvLCBpKSA9PiB7XG4gICAgICAgIG8uaW5kZXggIT09IDAgJiYgaS5pZ25vcmVNYXRjaCgpO1xuICAgICAgfVxuICAgIH0sIHIpO1xuICB9LFxuICBUSVRMRV9NT0RFOiB7IHNjb3BlOiBcInRpdGxlXCIsIGJlZ2luOiB4ZCwgcmVsZXZhbmNlOiAwIH0sXG4gIFVOREVSU0NPUkVfSURFTlRfUkU6IEVzLFxuICBVTkRFUlNDT1JFX1RJVExFX01PREU6IHsgc2NvcGU6IFwidGl0bGVcIiwgYmVnaW46IEVzLCByZWxldmFuY2U6IDAgfVxufSk7XG5mdW5jdGlvbiBWZyhyLCBmKSB7XG4gIHIuaW5wdXRbci5pbmRleCAtIDFdID09PSBcIi5cIiAmJiBmLmlnbm9yZU1hdGNoKCk7XG59XG5mdW5jdGlvbiBXZyhyLCBmKSB7XG4gIHIuY2xhc3NOYW1lICE9PSB2b2lkIDAgJiYgKHIuc2NvcGUgPSByLmNsYXNzTmFtZSwgZGVsZXRlIHIuY2xhc3NOYW1lKTtcbn1cbmZ1bmN0aW9uIEdnKHIsIGYpIHtcbiAgZiAmJiByLmJlZ2luS2V5d29yZHMgJiYgKHIuYmVnaW4gPSBcIlxcXFxiKFwiICsgci5iZWdpbktleXdvcmRzLnNwbGl0KFwiIFwiKS5qb2luKFwifFwiKSArIFwiKSg/IVxcXFwuKSg/PVxcXFxifFxcXFxzKVwiLCByLl9fYmVmb3JlQmVnaW4gPSBWZywgci5rZXl3b3JkcyA9IHIua2V5d29yZHMgfHwgci5iZWdpbktleXdvcmRzLCBkZWxldGUgci5iZWdpbktleXdvcmRzLCByLnJlbGV2YW5jZSA9PT0gdm9pZCAwICYmIChyLnJlbGV2YW5jZSA9IDApKTtcbn1cbmZ1bmN0aW9uIFFnKHIsIGYpIHtcbiAgQXJyYXkuaXNBcnJheShyLmlsbGVnYWwpICYmIChyLmlsbGVnYWwgPSBrcyguLi5yLmlsbGVnYWwpKTtcbn1cbmZ1bmN0aW9uIFlnKHIsIGYpIHtcbiAgaWYgKHIubWF0Y2gpIHtcbiAgICBpZiAoci5iZWdpbiB8fCByLmVuZClcbiAgICAgIHRocm93IEVycm9yKFwiYmVnaW4gJiBlbmQgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBtYXRjaFwiKTtcbiAgICByLmJlZ2luID0gci5tYXRjaCwgZGVsZXRlIHIubWF0Y2g7XG4gIH1cbn1cbmZ1bmN0aW9uIEtnKHIsIGYpIHtcbiAgci5yZWxldmFuY2UgPT09IHZvaWQgMCAmJiAoci5yZWxldmFuY2UgPSAxKTtcbn1cbmNvbnN0IFhnID0gKHIsIGYpID0+IHtcbiAgaWYgKCFyLmJlZm9yZU1hdGNoKVxuICAgIHJldHVybjtcbiAgaWYgKHIuc3RhcnRzKVxuICAgIHRocm93IEVycm9yKFwiYmVmb3JlTWF0Y2ggY2Fubm90IGJlIHVzZWQgd2l0aCBzdGFydHNcIik7XG4gIGNvbnN0IG8gPSBPYmplY3QuYXNzaWduKHt9LCByKTtcbiAgT2JqZWN0LmtleXMocikuZm9yRWFjaCgoaSkgPT4ge1xuICAgIGRlbGV0ZSByW2ldO1xuICB9KSwgci5rZXl3b3JkcyA9IG8ua2V5d29yZHMsIHIuYmVnaW4gPSBLcihvLmJlZm9yZU1hdGNoLCB1YyhvLmJlZ2luKSksIHIuc3RhcnRzID0ge1xuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW09iamVjdC5hc3NpZ24obywgeyBlbmRzUGFyZW50OiAhMCB9KV1cbiAgfSwgci5yZWxldmFuY2UgPSAwLCBkZWxldGUgby5iZWZvcmVNYXRjaDtcbn0sIEpnID0gW1wib2ZcIiwgXCJhbmRcIiwgXCJmb3JcIiwgXCJpblwiLCBcIm5vdFwiLCBcIm9yXCIsIFwiaWZcIiwgXCJ0aGVuXCIsIFwicGFyZW50XCIsIFwibGlzdFwiLCBcInZhbHVlXCJdLCBaZyA9IFwia2V5d29yZFwiO1xuZnVuY3Rpb24gZGMociwgZiwgbyA9IFpnKSB7XG4gIGNvbnN0IGkgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIHR5cGVvZiByID09IFwic3RyaW5nXCIgPyB0KG8sIHIuc3BsaXQoXCIgXCIpKSA6IEFycmF5LmlzQXJyYXkocikgPyB0KG8sIHIpIDogT2JqZWN0LmtleXMocikuZm9yRWFjaCgocykgPT4ge1xuICAgIE9iamVjdC5hc3NpZ24oaSwgZGMocltzXSwgZiwgcykpO1xuICB9KSwgaTtcbiAgZnVuY3Rpb24gdChzLCBkKSB7XG4gICAgZiAmJiAoZCA9IGQubWFwKChjKSA9PiBjLnRvTG93ZXJDYXNlKCkpKSwgZC5mb3JFYWNoKChjKSA9PiB7XG4gICAgICBjb25zdCBwID0gYy5zcGxpdChcInxcIik7XG4gICAgICBpW3BbMF1dID0gW3MsIHFnKHBbMF0sIHBbMV0pXTtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gcWcociwgZikge1xuICByZXR1cm4gZiA/IE51bWJlcihmKSA6ICgobykgPT4gSmcuaW5jbHVkZXMoby50b0xvd2VyQ2FzZSgpKSkocikgPyAwIDogMTtcbn1cbmNvbnN0IFJkID0ge30sIFFyID0gKHIpID0+IHtcbiAgY29uc29sZS5lcnJvcihyKTtcbn0sIE1kID0gKHIsIC4uLmYpID0+IHtcbiAgY29uc29sZS5sb2coXCJXQVJOOiBcIiArIHIsIC4uLmYpO1xufSwgQ2kgPSAociwgZikgPT4ge1xuICBSZFtgJHtyfS8ke2Z9YF0gfHwgKGNvbnNvbGUubG9nKGBEZXByZWNhdGVkIGFzIG9mICR7cn0uICR7Zn1gKSwgUmRbYCR7cn0vJHtmfWBdID0gITApO1xufSwgdmEgPSBFcnJvcigpO1xuZnVuY3Rpb24gSWQociwgZiwgeyBrZXk6IG8gfSkge1xuICBsZXQgaSA9IDA7XG4gIGNvbnN0IHQgPSByW29dLCBzID0ge30sIGQgPSB7fTtcbiAgZm9yIChsZXQgYyA9IDE7IGMgPD0gZi5sZW5ndGg7IGMrKylcbiAgICBkW2MgKyBpXSA9IHRbY10sIHNbYyArIGldID0gITAsIGkgKz0gZmMoZltjIC0gMV0pO1xuICByW29dID0gZCwgcltvXS5fZW1pdCA9IHMsIHJbb10uX211bHRpID0gITA7XG59XG5mdW5jdGlvbiBfZyhyKSB7XG4gICgoZikgPT4ge1xuICAgIGYuc2NvcGUgJiYgdHlwZW9mIGYuc2NvcGUgPT0gXCJvYmplY3RcIiAmJiBmLnNjb3BlICE9PSBudWxsICYmIChmLmJlZ2luU2NvcGUgPSBmLnNjb3BlLCBkZWxldGUgZi5zY29wZSk7XG4gIH0pKHIpLCB0eXBlb2Ygci5iZWdpblNjb3BlID09IFwic3RyaW5nXCIgJiYgKHIuYmVnaW5TY29wZSA9IHtcbiAgICBfd3JhcDogci5iZWdpblNjb3BlXG4gIH0pLCB0eXBlb2Ygci5lbmRTY29wZSA9PSBcInN0cmluZ1wiICYmIChyLmVuZFNjb3BlID0ge1xuICAgIF93cmFwOiByLmVuZFNjb3BlXG4gIH0pLCAoKGYpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmLmJlZ2luKSkge1xuICAgICAgaWYgKGYuc2tpcCB8fCBmLmV4Y2x1ZGVCZWdpbiB8fCBmLnJldHVybkJlZ2luKVxuICAgICAgICB0aHJvdyBRcihcInNraXAsIGV4Y2x1ZGVCZWdpbiwgcmV0dXJuQmVnaW4gbm90IGNvbXBhdGlibGUgd2l0aCBiZWdpblNjb3BlOiB7fVwiKSwgdmE7XG4gICAgICBpZiAodHlwZW9mIGYuYmVnaW5TY29wZSAhPSBcIm9iamVjdFwiIHx8IGYuYmVnaW5TY29wZSA9PT0gbnVsbClcbiAgICAgICAgdGhyb3cgUXIoXCJiZWdpblNjb3BlIG11c3QgYmUgb2JqZWN0XCIpLCB2YTtcbiAgICAgIElkKGYsIGYuYmVnaW4sIHsga2V5OiBcImJlZ2luU2NvcGVcIiB9KSwgZi5iZWdpbiA9IFBzKGYuYmVnaW4sIHsgam9pbldpdGg6IFwiXCIgfSk7XG4gICAgfVxuICB9KShyKSwgKChmKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZi5lbmQpKSB7XG4gICAgICBpZiAoZi5za2lwIHx8IGYuZXhjbHVkZUVuZCB8fCBmLnJldHVybkVuZClcbiAgICAgICAgdGhyb3cgUXIoXCJza2lwLCBleGNsdWRlRW5kLCByZXR1cm5FbmQgbm90IGNvbXBhdGlibGUgd2l0aCBlbmRTY29wZToge31cIiksIHZhO1xuICAgICAgaWYgKHR5cGVvZiBmLmVuZFNjb3BlICE9IFwib2JqZWN0XCIgfHwgZi5lbmRTY29wZSA9PT0gbnVsbClcbiAgICAgICAgdGhyb3cgUXIoXCJlbmRTY29wZSBtdXN0IGJlIG9iamVjdFwiKSwgdmE7XG4gICAgICBJZChmLCBmLmVuZCwgeyBrZXk6IFwiZW5kU2NvcGVcIiB9KSwgZi5lbmQgPSBQcyhmLmVuZCwgeyBqb2luV2l0aDogXCJcIiB9KTtcbiAgICB9XG4gIH0pKHIpO1xufVxuZnVuY3Rpb24gZXkocikge1xuICBmdW5jdGlvbiBmKHQsIHMpIHtcbiAgICByZXR1cm4gUmVnRXhwKHhvKHQpLCBcIm1cIiArIChyLmNhc2VfaW5zZW5zaXRpdmUgPyBcImlcIiA6IFwiXCIpICsgKHIudW5pY29kZVJlZ2V4ID8gXCJ1XCIgOiBcIlwiKSArIChzID8gXCJnXCIgOiBcIlwiKSk7XG4gIH1cbiAgY2xhc3MgbyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLm1hdGNoSW5kZXhlcyA9IHt9LCB0aGlzLnJlZ2V4ZXMgPSBbXSwgdGhpcy5tYXRjaEF0ID0gMSwgdGhpcy5wb3NpdGlvbiA9IDA7XG4gICAgfVxuICAgIGFkZFJ1bGUocywgZCkge1xuICAgICAgZC5wb3NpdGlvbiA9IHRoaXMucG9zaXRpb24rKywgdGhpcy5tYXRjaEluZGV4ZXNbdGhpcy5tYXRjaEF0XSA9IGQsIHRoaXMucmVnZXhlcy5wdXNoKFtkLCBzXSksIHRoaXMubWF0Y2hBdCArPSBmYyhzKSArIDE7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICB0aGlzLnJlZ2V4ZXMubGVuZ3RoID09PSAwICYmICh0aGlzLmV4ZWMgPSAoKSA9PiBudWxsKTtcbiAgICAgIGNvbnN0IHMgPSB0aGlzLnJlZ2V4ZXMubWFwKChkKSA9PiBkWzFdKTtcbiAgICAgIHRoaXMubWF0Y2hlclJlID0gZihQcyhzLCB7XG4gICAgICAgIGpvaW5XaXRoOiBcInxcIlxuICAgICAgfSksICEwKSwgdGhpcy5sYXN0SW5kZXggPSAwO1xuICAgIH1cbiAgICBleGVjKHMpIHtcbiAgICAgIHRoaXMubWF0Y2hlclJlLmxhc3RJbmRleCA9IHRoaXMubGFzdEluZGV4O1xuICAgICAgY29uc3QgZCA9IHRoaXMubWF0Y2hlclJlLmV4ZWMocyk7XG4gICAgICBpZiAoIWQpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgYyA9IGQuZmluZEluZGV4KCh2LCBiKSA9PiBiID4gMCAmJiB2ICE9PSB2b2lkIDApLCBwID0gdGhpcy5tYXRjaEluZGV4ZXNbY107XG4gICAgICByZXR1cm4gZC5zcGxpY2UoMCwgYyksIE9iamVjdC5hc3NpZ24oZCwgcCk7XG4gICAgfVxuICB9XG4gIGNsYXNzIGkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5ydWxlcyA9IFtdLCB0aGlzLm11bHRpUmVnZXhlcyA9IFtdLCB0aGlzLmNvdW50ID0gMCwgdGhpcy5sYXN0SW5kZXggPSAwLCB0aGlzLnJlZ2V4SW5kZXggPSAwO1xuICAgIH1cbiAgICBnZXRNYXRjaGVyKHMpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpUmVnZXhlc1tzXSlcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlSZWdleGVzW3NdO1xuICAgICAgY29uc3QgZCA9IG5ldyBvKCk7XG4gICAgICByZXR1cm4gdGhpcy5ydWxlcy5zbGljZShzKS5mb3JFYWNoKChbYywgcF0pID0+IGQuYWRkUnVsZShjLCBwKSksIGQuY29tcGlsZSgpLCB0aGlzLm11bHRpUmVnZXhlc1tzXSA9IGQsIGQ7XG4gICAgfVxuICAgIHJlc3VtaW5nU2NhbkF0U2FtZVBvc2l0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVnZXhJbmRleCAhPT0gMDtcbiAgICB9XG4gICAgY29uc2lkZXJBbGwoKSB7XG4gICAgICB0aGlzLnJlZ2V4SW5kZXggPSAwO1xuICAgIH1cbiAgICBhZGRSdWxlKHMsIGQpIHtcbiAgICAgIHRoaXMucnVsZXMucHVzaChbcywgZF0pLCBkLnR5cGUgPT09IFwiYmVnaW5cIiAmJiB0aGlzLmNvdW50Kys7XG4gICAgfVxuICAgIGV4ZWMocykge1xuICAgICAgY29uc3QgZCA9IHRoaXMuZ2V0TWF0Y2hlcih0aGlzLnJlZ2V4SW5kZXgpO1xuICAgICAgZC5sYXN0SW5kZXggPSB0aGlzLmxhc3RJbmRleDtcbiAgICAgIGxldCBjID0gZC5leGVjKHMpO1xuICAgICAgaWYgKHRoaXMucmVzdW1pbmdTY2FuQXRTYW1lUG9zaXRpb24oKSAmJiAhKGMgJiYgYy5pbmRleCA9PT0gdGhpcy5sYXN0SW5kZXgpKSB7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLmdldE1hdGNoZXIoMCk7XG4gICAgICAgIHAubGFzdEluZGV4ID0gdGhpcy5sYXN0SW5kZXggKyAxLCBjID0gcC5leGVjKHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGMgJiYgKHRoaXMucmVnZXhJbmRleCArPSBjLnBvc2l0aW9uICsgMSwgdGhpcy5yZWdleEluZGV4ID09PSB0aGlzLmNvdW50ICYmIHRoaXMuY29uc2lkZXJBbGwoKSksIGM7XG4gICAgfVxuICB9XG4gIGlmIChyLmNvbXBpbGVyRXh0ZW5zaW9ucyB8fCAoci5jb21waWxlckV4dGVuc2lvbnMgPSBbXSksIHIuY29udGFpbnMgJiYgci5jb250YWlucy5pbmNsdWRlcyhcInNlbGZcIikpXG4gICAgdGhyb3cgRXJyb3IoXCJFUlI6IGNvbnRhaW5zIGBzZWxmYCBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoZSB0b3AtbGV2ZWwgb2YgYSBsYW5ndWFnZS4gIFNlZSBkb2N1bWVudGF0aW9uLlwiKTtcbiAgcmV0dXJuIHIuY2xhc3NOYW1lQWxpYXNlcyA9IFJyKHIuY2xhc3NOYW1lQWxpYXNlcyB8fCB7fSksIGZ1bmN0aW9uIHQocywgZCkge1xuICAgIGNvbnN0IGMgPSBzO1xuICAgIGlmIChzLmlzQ29tcGlsZWQpXG4gICAgICByZXR1cm4gYztcbiAgICBbV2csIFlnLCBfZywgWGddLmZvckVhY2goKHYpID0+IHYocywgZCkpLCByLmNvbXBpbGVyRXh0ZW5zaW9ucy5mb3JFYWNoKCh2KSA9PiB2KHMsIGQpKSwgcy5fX2JlZm9yZUJlZ2luID0gbnVsbCwgW0dnLCBRZywgS2ddLmZvckVhY2goKHYpID0+IHYocywgZCkpLCBzLmlzQ29tcGlsZWQgPSAhMDtcbiAgICBsZXQgcCA9IG51bGw7XG4gICAgcmV0dXJuIHR5cGVvZiBzLmtleXdvcmRzID09IFwib2JqZWN0XCIgJiYgcy5rZXl3b3Jkcy4kcGF0dGVybiAmJiAocy5rZXl3b3JkcyA9IE9iamVjdC5hc3NpZ24oe30sIHMua2V5d29yZHMpLCBwID0gcy5rZXl3b3Jkcy4kcGF0dGVybiwgZGVsZXRlIHMua2V5d29yZHMuJHBhdHRlcm4pLCBwID0gcCB8fCAvXFx3Ky8sIHMua2V5d29yZHMgJiYgKHMua2V5d29yZHMgPSBkYyhzLmtleXdvcmRzLCByLmNhc2VfaW5zZW5zaXRpdmUpKSwgYy5rZXl3b3JkUGF0dGVyblJlID0gZihwLCAhMCksIGQgJiYgKHMuYmVnaW4gfHwgKHMuYmVnaW4gPSAvXFxCfFxcYi8pLCBjLmJlZ2luUmUgPSBmKGMuYmVnaW4pLCBzLmVuZCB8fCBzLmVuZHNXaXRoUGFyZW50IHx8IChzLmVuZCA9IC9cXEJ8XFxiLyksIHMuZW5kICYmIChjLmVuZFJlID0gZihjLmVuZCkpLCBjLnRlcm1pbmF0b3JFbmQgPSB4byhjLmVuZCkgfHwgXCJcIiwgcy5lbmRzV2l0aFBhcmVudCAmJiBkLnRlcm1pbmF0b3JFbmQgJiYgKGMudGVybWluYXRvckVuZCArPSAocy5lbmQgPyBcInxcIiA6IFwiXCIpICsgZC50ZXJtaW5hdG9yRW5kKSksIHMuaWxsZWdhbCAmJiAoYy5pbGxlZ2FsUmUgPSBmKHMuaWxsZWdhbCkpLCBzLmNvbnRhaW5zIHx8IChzLmNvbnRhaW5zID0gW10pLCBzLmNvbnRhaW5zID0gW10uY29uY2F0KC4uLnMuY29udGFpbnMubWFwKCh2KSA9PiAoKGIpID0+IChiLnZhcmlhbnRzICYmICFiLmNhY2hlZFZhcmlhbnRzICYmIChiLmNhY2hlZFZhcmlhbnRzID0gYi52YXJpYW50cy5tYXAoKFMpID0+IFJyKGIsIHtcbiAgICAgIHZhcmlhbnRzOiBudWxsXG4gICAgfSwgUykpKSwgYi5jYWNoZWRWYXJpYW50cyA/IGIuY2FjaGVkVmFyaWFudHMgOiBjYyhiKSA/IFJyKGIsIHtcbiAgICAgIHN0YXJ0czogYi5zdGFydHMgPyBScihiLnN0YXJ0cykgOiBudWxsXG4gICAgfSkgOiBPYmplY3QuaXNGcm96ZW4oYikgPyBScihiKSA6IGIpKSh2ID09PSBcInNlbGZcIiA/IHMgOiB2KSkpLCBzLmNvbnRhaW5zLmZvckVhY2goKHYpID0+IHtcbiAgICAgIHQodiwgYyk7XG4gICAgfSksIHMuc3RhcnRzICYmIHQocy5zdGFydHMsIGQpLCBjLm1hdGNoZXIgPSAoKHYpID0+IHtcbiAgICAgIGNvbnN0IGIgPSBuZXcgaSgpO1xuICAgICAgcmV0dXJuIHYuY29udGFpbnMuZm9yRWFjaCgoUykgPT4gYi5hZGRSdWxlKFMuYmVnaW4sIHtcbiAgICAgICAgcnVsZTogUyxcbiAgICAgICAgdHlwZTogXCJiZWdpblwiXG4gICAgICB9KSksIHYudGVybWluYXRvckVuZCAmJiBiLmFkZFJ1bGUodi50ZXJtaW5hdG9yRW5kLCB7XG4gICAgICAgIHR5cGU6IFwiZW5kXCJcbiAgICAgIH0pLCB2LmlsbGVnYWwgJiYgYi5hZGRSdWxlKHYuaWxsZWdhbCwgeyB0eXBlOiBcImlsbGVnYWxcIiB9KSwgYjtcbiAgICB9KShjKSwgYztcbiAgfShyKTtcbn1cbmZ1bmN0aW9uIGNjKHIpIHtcbiAgcmV0dXJuICEhciAmJiAoci5lbmRzV2l0aFBhcmVudCB8fCBjYyhyLnN0YXJ0cykpO1xufVxuY2xhc3MgdHkgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGYsIG8pIHtcbiAgICBzdXBlcihmKSwgdGhpcy5uYW1lID0gXCJIVE1MSW5qZWN0aW9uRXJyb3JcIiwgdGhpcy5odG1sID0gbztcbiAgfVxufVxuY29uc3QgU3MgPSBzYywgTmQgPSBSciwgT2QgPSBTeW1ib2woXCJub21hdGNoXCIpLCBwYyA9IChyKSA9PiB7XG4gIGNvbnN0IGYgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSwgbyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpLCBpID0gW107XG4gIGxldCB0ID0gITA7XG4gIGNvbnN0IHMgPSBcIkNvdWxkIG5vdCBmaW5kIHRoZSBsYW5ndWFnZSAne30nLCBkaWQgeW91IGZvcmdldCB0byBsb2FkL2luY2x1ZGUgYSBsYW5ndWFnZSBtb2R1bGU/XCIsIGQgPSB7XG4gICAgZGlzYWJsZUF1dG9kZXRlY3Q6ICEwLFxuICAgIG5hbWU6IFwiUGxhaW4gdGV4dFwiLFxuICAgIGNvbnRhaW5zOiBbXVxuICB9O1xuICBsZXQgYyA9IHtcbiAgICBpZ25vcmVVbmVzY2FwZWRIVE1MOiAhMSxcbiAgICB0aHJvd1VuZXNjYXBlZEhUTUw6ICExLFxuICAgIG5vSGlnaGxpZ2h0UmU6IC9eKG5vLT9oaWdobGlnaHQpJC9pLFxuICAgIGxhbmd1YWdlRGV0ZWN0UmU6IC9cXGJsYW5nKD86dWFnZSk/LShbXFx3LV0rKVxcYi9pLFxuICAgIGNsYXNzUHJlZml4OiBcImhsanMtXCIsXG4gICAgY3NzU2VsZWN0b3I6IFwicHJlIGNvZGVcIixcbiAgICBsYW5ndWFnZXM6IG51bGwsXG4gICAgX19lbWl0dGVyOiBGZ1xuICB9O1xuICBmdW5jdGlvbiBwKEUpIHtcbiAgICByZXR1cm4gYy5ub0hpZ2hsaWdodFJlLnRlc3QoRSk7XG4gIH1cbiAgZnVuY3Rpb24gdihFLCBDLCBNKSB7XG4gICAgbGV0IHkgPSBcIlwiLCBCID0gXCJcIjtcbiAgICB0eXBlb2YgQyA9PSBcIm9iamVjdFwiID8gKHkgPSBFLCBNID0gQy5pZ25vcmVJbGxlZ2FscywgQiA9IEMubGFuZ3VhZ2UpIDogKENpKFwiMTAuNy4wXCIsIFwiaGlnaGxpZ2h0KGxhbmcsIGNvZGUsIC4uLmFyZ3MpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuXCIpLCBDaShcIjEwLjcuMFwiLCBgUGxlYXNlIHVzZSBoaWdobGlnaHQoY29kZSwgb3B0aW9ucykgaW5zdGVhZC5cbmh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzIyNzdgKSwgQiA9IEUsIHkgPSBDKSwgTSA9PT0gdm9pZCAwICYmIChNID0gITApO1xuICAgIGNvbnN0ICQgPSB7IGNvZGU6IHksIGxhbmd1YWdlOiBCIH07XG4gICAgQShcImJlZm9yZTpoaWdobGlnaHRcIiwgJCk7XG4gICAgY29uc3QgRiA9ICQucmVzdWx0ID8gJC5yZXN1bHQgOiBiKCQubGFuZ3VhZ2UsICQuY29kZSwgTSk7XG4gICAgcmV0dXJuIEYuY29kZSA9ICQuY29kZSwgQShcImFmdGVyOmhpZ2hsaWdodFwiLCBGKSwgRjtcbiAgfVxuICBmdW5jdGlvbiBiKEUsIEMsIE0sIHkpIHtcbiAgICBjb25zdCBCID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZnVuY3Rpb24gJCgpIHtcbiAgICAgIGlmICghWi5rZXl3b3JkcylcbiAgICAgICAgcmV0dXJuIHZlLmFkZFRleHQoc2UpO1xuICAgICAgbGV0IHRlID0gMDtcbiAgICAgIFoua2V5d29yZFBhdHRlcm5SZS5sYXN0SW5kZXggPSAwO1xuICAgICAgbGV0IGdlID0gWi5rZXl3b3JkUGF0dGVyblJlLmV4ZWMoc2UpLCBBZSA9IFwiXCI7XG4gICAgICBmb3IgKDsgZ2U7ICkge1xuICAgICAgICBBZSArPSBzZS5zdWJzdHJpbmcodGUsIGdlLmluZGV4KTtcbiAgICAgICAgY29uc3QgWWUgPSBRLmNhc2VfaW5zZW5zaXRpdmUgPyBnZVswXS50b0xvd2VyQ2FzZSgpIDogZ2VbMF0sIG50ID0gKE1lID0gWWUsIFoua2V5d29yZHNbTWVdKTtcbiAgICAgICAgaWYgKG50KSB7XG4gICAgICAgICAgY29uc3QgW2V0LCBndF0gPSBudDtcbiAgICAgICAgICBpZiAodmUuYWRkVGV4dChBZSksIEFlID0gXCJcIiwgQltZZV0gPSAoQltZZV0gfHwgMCkgKyAxLCBCW1llXSA8PSA3ICYmIChtZSArPSBndCksIGV0LnN0YXJ0c1dpdGgoXCJfXCIpKVxuICAgICAgICAgICAgQWUgKz0gZ2VbMF07XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5dCA9IFEuY2xhc3NOYW1lQWxpYXNlc1tldF0gfHwgZXQ7XG4gICAgICAgICAgICBrKGdlWzBdLCB5dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBBZSArPSBnZVswXTtcbiAgICAgICAgdGUgPSBaLmtleXdvcmRQYXR0ZXJuUmUubGFzdEluZGV4LCBnZSA9IFoua2V5d29yZFBhdHRlcm5SZS5leGVjKHNlKTtcbiAgICAgIH1cbiAgICAgIHZhciBNZTtcbiAgICAgIEFlICs9IHNlLnN1YnN0cmluZyh0ZSksIHZlLmFkZFRleHQoQWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBGKCkge1xuICAgICAgWi5zdWJMYW5ndWFnZSAhPSBudWxsID8gKCgpID0+IHtcbiAgICAgICAgaWYgKHNlID09PSBcIlwiKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IHRlID0gbnVsbDtcbiAgICAgICAgaWYgKHR5cGVvZiBaLnN1Ykxhbmd1YWdlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBpZiAoIWZbWi5zdWJMYW5ndWFnZV0pXG4gICAgICAgICAgICByZXR1cm4gdmUuYWRkVGV4dChzZSk7XG4gICAgICAgICAgdGUgPSBiKFouc3ViTGFuZ3VhZ2UsIHNlLCAhMCwgZGVbWi5zdWJMYW5ndWFnZV0pLCBkZVtaLnN1Ykxhbmd1YWdlXSA9IHRlLl90b3A7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHRlID0gUyhzZSwgWi5zdWJMYW5ndWFnZS5sZW5ndGggPyBaLnN1Ykxhbmd1YWdlIDogbnVsbCk7XG4gICAgICAgIFoucmVsZXZhbmNlID4gMCAmJiAobWUgKz0gdGUucmVsZXZhbmNlKSwgdmUuX19hZGRTdWJsYW5ndWFnZSh0ZS5fZW1pdHRlciwgdGUubGFuZ3VhZ2UpO1xuICAgICAgfSkoKSA6ICQoKSwgc2UgPSBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBrKHRlLCBnZSkge1xuICAgICAgdGUgIT09IFwiXCIgJiYgKHZlLnN0YXJ0U2NvcGUoZ2UpLCB2ZS5hZGRUZXh0KHRlKSwgdmUuZW5kU2NvcGUoKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGgodGUsIGdlKSB7XG4gICAgICBsZXQgQWUgPSAxO1xuICAgICAgY29uc3QgTWUgPSBnZS5sZW5ndGggLSAxO1xuICAgICAgZm9yICg7IEFlIDw9IE1lOyApIHtcbiAgICAgICAgaWYgKCF0ZS5fZW1pdFtBZV0pIHtcbiAgICAgICAgICBBZSsrO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFllID0gUS5jbGFzc05hbWVBbGlhc2VzW3RlW0FlXV0gfHwgdGVbQWVdLCBudCA9IGdlW0FlXTtcbiAgICAgICAgWWUgPyBrKG50LCBZZSkgOiAoc2UgPSBudCwgJCgpLCBzZSA9IFwiXCIpLCBBZSsrO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBOKHRlLCBnZSkge1xuICAgICAgcmV0dXJuIHRlLnNjb3BlICYmIHR5cGVvZiB0ZS5zY29wZSA9PSBcInN0cmluZ1wiICYmIHZlLm9wZW5Ob2RlKFEuY2xhc3NOYW1lQWxpYXNlc1t0ZS5zY29wZV0gfHwgdGUuc2NvcGUpLCB0ZS5iZWdpblNjb3BlICYmICh0ZS5iZWdpblNjb3BlLl93cmFwID8gKGsoc2UsIFEuY2xhc3NOYW1lQWxpYXNlc1t0ZS5iZWdpblNjb3BlLl93cmFwXSB8fCB0ZS5iZWdpblNjb3BlLl93cmFwKSwgc2UgPSBcIlwiKSA6IHRlLmJlZ2luU2NvcGUuX211bHRpICYmIChoKHRlLmJlZ2luU2NvcGUsIGdlKSwgc2UgPSBcIlwiKSksIFogPSBPYmplY3QuY3JlYXRlKHRlLCB7IHBhcmVudDoge1xuICAgICAgICB2YWx1ZTogWlxuICAgICAgfSB9KSwgWjtcbiAgICB9XG4gICAgZnVuY3Rpb24gUCh0ZSwgZ2UsIEFlKSB7XG4gICAgICBsZXQgTWUgPSAoKFllLCBudCkgPT4ge1xuICAgICAgICBjb25zdCBldCA9IFllICYmIFllLmV4ZWMobnQpO1xuICAgICAgICByZXR1cm4gZXQgJiYgZXQuaW5kZXggPT09IDA7XG4gICAgICB9KSh0ZS5lbmRSZSwgQWUpO1xuICAgICAgaWYgKE1lKSB7XG4gICAgICAgIGlmICh0ZVtcIm9uOmVuZFwiXSkge1xuICAgICAgICAgIGNvbnN0IFllID0gbmV3IENkKHRlKTtcbiAgICAgICAgICB0ZVtcIm9uOmVuZFwiXShnZSwgWWUpLCBZZS5pc01hdGNoSWdub3JlZCAmJiAoTWUgPSAhMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1lKSB7XG4gICAgICAgICAgZm9yICg7IHRlLmVuZHNQYXJlbnQgJiYgdGUucGFyZW50OyApXG4gICAgICAgICAgICB0ZSA9IHRlLnBhcmVudDtcbiAgICAgICAgICByZXR1cm4gdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0ZS5lbmRzV2l0aFBhcmVudClcbiAgICAgICAgcmV0dXJuIFAodGUucGFyZW50LCBnZSwgQWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBqKHRlKSB7XG4gICAgICByZXR1cm4gWi5tYXRjaGVyLnJlZ2V4SW5kZXggPT09IDAgPyAoc2UgKz0gdGVbMF0sIDEpIDogKHBlID0gITAsIDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBJKHRlKSB7XG4gICAgICBjb25zdCBnZSA9IHRlWzBdLCBBZSA9IEMuc3Vic3RyaW5nKHRlLmluZGV4KSwgTWUgPSBQKFosIHRlLCBBZSk7XG4gICAgICBpZiAoIU1lKVxuICAgICAgICByZXR1cm4gT2Q7XG4gICAgICBjb25zdCBZZSA9IFo7XG4gICAgICBaLmVuZFNjb3BlICYmIFouZW5kU2NvcGUuX3dyYXAgPyAoRigpLCBrKGdlLCBaLmVuZFNjb3BlLl93cmFwKSkgOiBaLmVuZFNjb3BlICYmIFouZW5kU2NvcGUuX211bHRpID8gKEYoKSwgaChaLmVuZFNjb3BlLCB0ZSkpIDogWWUuc2tpcCA/IHNlICs9IGdlIDogKFllLnJldHVybkVuZCB8fCBZZS5leGNsdWRlRW5kIHx8IChzZSArPSBnZSksIEYoKSwgWWUuZXhjbHVkZUVuZCAmJiAoc2UgPSBnZSkpO1xuICAgICAgZG9cbiAgICAgICAgWi5zY29wZSAmJiB2ZS5jbG9zZU5vZGUoKSwgWi5za2lwIHx8IFouc3ViTGFuZ3VhZ2UgfHwgKG1lICs9IFoucmVsZXZhbmNlKSwgWiA9IFoucGFyZW50O1xuICAgICAgd2hpbGUgKFogIT09IE1lLnBhcmVudCk7XG4gICAgICByZXR1cm4gTWUuc3RhcnRzICYmIE4oTWUuc3RhcnRzLCB0ZSksIFllLnJldHVybkVuZCA/IDAgOiBnZS5sZW5ndGg7XG4gICAgfVxuICAgIGxldCBWID0ge307XG4gICAgZnVuY3Rpb24gVyh0ZSwgZ2UpIHtcbiAgICAgIGNvbnN0IEFlID0gZ2UgJiYgZ2VbMF07XG4gICAgICBpZiAoc2UgKz0gdGUsIEFlID09IG51bGwpXG4gICAgICAgIHJldHVybiBGKCksIDA7XG4gICAgICBpZiAoVi50eXBlID09PSBcImJlZ2luXCIgJiYgZ2UudHlwZSA9PT0gXCJlbmRcIiAmJiBWLmluZGV4ID09PSBnZS5pbmRleCAmJiBBZSA9PT0gXCJcIikge1xuICAgICAgICBpZiAoc2UgKz0gQy5zbGljZShnZS5pbmRleCwgZ2UuaW5kZXggKyAxKSwgIXQpIHtcbiAgICAgICAgICBjb25zdCBNZSA9IEVycm9yKGAwIHdpZHRoIG1hdGNoIHJlZ2V4ICgke0V9KWApO1xuICAgICAgICAgIHRocm93IE1lLmxhbmd1YWdlTmFtZSA9IEUsIE1lLmJhZFJ1bGUgPSBWLnJ1bGUsIE1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgICAgaWYgKFYgPSBnZSwgZ2UudHlwZSA9PT0gXCJiZWdpblwiKVxuICAgICAgICByZXR1cm4gKChNZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IFllID0gTWVbMF0sIG50ID0gTWUucnVsZSwgZXQgPSBuZXcgQ2QobnQpLCBndCA9IFtudC5fX2JlZm9yZUJlZ2luLCBudFtcIm9uOmJlZ2luXCJdXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHl0IG9mIGd0KVxuICAgICAgICAgICAgaWYgKHl0ICYmICh5dChNZSwgZXQpLCBldC5pc01hdGNoSWdub3JlZCkpXG4gICAgICAgICAgICAgIHJldHVybiBqKFllKTtcbiAgICAgICAgICByZXR1cm4gbnQuc2tpcCA/IHNlICs9IFllIDogKG50LmV4Y2x1ZGVCZWdpbiAmJiAoc2UgKz0gWWUpLCBGKCksIG50LnJldHVybkJlZ2luIHx8IG50LmV4Y2x1ZGVCZWdpbiB8fCAoc2UgPSBZZSkpLCBOKG50LCBNZSksIG50LnJldHVybkJlZ2luID8gMCA6IFllLmxlbmd0aDtcbiAgICAgICAgfSkoZ2UpO1xuICAgICAgaWYgKGdlLnR5cGUgPT09IFwiaWxsZWdhbFwiICYmICFNKSB7XG4gICAgICAgIGNvbnN0IE1lID0gRXJyb3IoJ0lsbGVnYWwgbGV4ZW1lIFwiJyArIEFlICsgJ1wiIGZvciBtb2RlIFwiJyArIChaLnNjb3BlIHx8IFwiPHVubmFtZWQ+XCIpICsgJ1wiJyk7XG4gICAgICAgIHRocm93IE1lLm1vZGUgPSBaLCBNZTtcbiAgICAgIH1cbiAgICAgIGlmIChnZS50eXBlID09PSBcImVuZFwiKSB7XG4gICAgICAgIGNvbnN0IE1lID0gSShnZSk7XG4gICAgICAgIGlmIChNZSAhPT0gT2QpXG4gICAgICAgICAgcmV0dXJuIE1lO1xuICAgICAgfVxuICAgICAgaWYgKGdlLnR5cGUgPT09IFwiaWxsZWdhbFwiICYmIEFlID09PSBcIlwiKVxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGlmIChpZSA+IDFlNSAmJiBpZSA+IDMgKiBnZS5pbmRleClcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJwb3RlbnRpYWwgaW5maW5pdGUgbG9vcCwgd2F5IG1vcmUgaXRlcmF0aW9ucyB0aGFuIG1hdGNoZXNcIik7XG4gICAgICByZXR1cm4gc2UgKz0gQWUsIEFlLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgUSA9IHgoRSk7XG4gICAgaWYgKCFRKVxuICAgICAgdGhyb3cgUXIocy5yZXBsYWNlKFwie31cIiwgRSkpLCBFcnJvcignVW5rbm93biBsYW5ndWFnZTogXCInICsgRSArICdcIicpO1xuICAgIGNvbnN0IFggPSBleShRKTtcbiAgICBsZXQgSiA9IFwiXCIsIFogPSB5IHx8IFg7XG4gICAgY29uc3QgZGUgPSB7fSwgdmUgPSBuZXcgYy5fX2VtaXR0ZXIoYyk7XG4gICAgKCgpID0+IHtcbiAgICAgIGNvbnN0IHRlID0gW107XG4gICAgICBmb3IgKGxldCBnZSA9IFo7IGdlICE9PSBROyBnZSA9IGdlLnBhcmVudClcbiAgICAgICAgZ2Uuc2NvcGUgJiYgdGUudW5zaGlmdChnZS5zY29wZSk7XG4gICAgICB0ZS5mb3JFYWNoKChnZSkgPT4gdmUub3Blbk5vZGUoZ2UpKTtcbiAgICB9KSgpO1xuICAgIGxldCBzZSA9IFwiXCIsIG1lID0gMCwgbGUgPSAwLCBpZSA9IDAsIHBlID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChRLl9fZW1pdFRva2VucylcbiAgICAgICAgUS5fX2VtaXRUb2tlbnMoQywgdmUpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGZvciAoWi5tYXRjaGVyLmNvbnNpZGVyQWxsKCk7IDsgKSB7XG4gICAgICAgICAgaWUrKywgcGUgPyBwZSA9ICExIDogWi5tYXRjaGVyLmNvbnNpZGVyQWxsKCksIFoubWF0Y2hlci5sYXN0SW5kZXggPSBsZTtcbiAgICAgICAgICBjb25zdCB0ZSA9IFoubWF0Y2hlci5leGVjKEMpO1xuICAgICAgICAgIGlmICghdGUpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjb25zdCBnZSA9IFcoQy5zdWJzdHJpbmcobGUsIHRlLmluZGV4KSwgdGUpO1xuICAgICAgICAgIGxlID0gdGUuaW5kZXggKyBnZTtcbiAgICAgICAgfVxuICAgICAgICBXKEMuc3Vic3RyaW5nKGxlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmUuZmluYWxpemUoKSwgSiA9IHZlLnRvSFRNTCgpLCB7XG4gICAgICAgIGxhbmd1YWdlOiBFLFxuICAgICAgICB2YWx1ZTogSixcbiAgICAgICAgcmVsZXZhbmNlOiBtZSxcbiAgICAgICAgaWxsZWdhbDogITEsXG4gICAgICAgIF9lbWl0dGVyOiB2ZSxcbiAgICAgICAgX3RvcDogWlxuICAgICAgfTtcbiAgICB9IGNhdGNoICh0ZSkge1xuICAgICAgaWYgKHRlLm1lc3NhZ2UgJiYgdGUubWVzc2FnZS5pbmNsdWRlcyhcIklsbGVnYWxcIikpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGFuZ3VhZ2U6IEUsXG4gICAgICAgICAgdmFsdWU6IFNzKEMpLFxuICAgICAgICAgIGlsbGVnYWw6ICEwLFxuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBfaWxsZWdhbEJ5OiB7XG4gICAgICAgICAgICBtZXNzYWdlOiB0ZS5tZXNzYWdlLFxuICAgICAgICAgICAgaW5kZXg6IGxlLFxuICAgICAgICAgICAgY29udGV4dDogQy5zbGljZShsZSAtIDEwMCwgbGUgKyAxMDApLFxuICAgICAgICAgICAgbW9kZTogdGUubW9kZSxcbiAgICAgICAgICAgIHJlc3VsdFNvRmFyOiBKXG4gICAgICAgICAgfSxcbiAgICAgICAgICBfZW1pdHRlcjogdmVcbiAgICAgICAgfTtcbiAgICAgIGlmICh0KVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhbmd1YWdlOiBFLFxuICAgICAgICAgIHZhbHVlOiBTcyhDKSxcbiAgICAgICAgICBpbGxlZ2FsOiAhMSxcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgZXJyb3JSYWlzZWQ6IHRlLFxuICAgICAgICAgIF9lbWl0dGVyOiB2ZSxcbiAgICAgICAgICBfdG9wOiBaXG4gICAgICAgIH07XG4gICAgICB0aHJvdyB0ZTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gUyhFLCBDKSB7XG4gICAgQyA9IEMgfHwgYy5sYW5ndWFnZXMgfHwgT2JqZWN0LmtleXMoZik7XG4gICAgY29uc3QgTSA9ICgoaCkgPT4ge1xuICAgICAgY29uc3QgTiA9IHsgdmFsdWU6IFNzKGgpLCBpbGxlZ2FsOiAhMSwgcmVsZXZhbmNlOiAwLCBfdG9wOiBkLCBfZW1pdHRlcjogbmV3IGMuX19lbWl0dGVyKGMpIH07XG4gICAgICByZXR1cm4gTi5fZW1pdHRlci5hZGRUZXh0KGgpLCBOO1xuICAgIH0pKEUpLCB5ID0gQy5maWx0ZXIoeCkuZmlsdGVyKHcpLm1hcCgoaCkgPT4gYihoLCBFLCAhMSkpO1xuICAgIHkudW5zaGlmdChNKTtcbiAgICBjb25zdCBCID0geS5zb3J0KChoLCBOKSA9PiB7XG4gICAgICBpZiAoaC5yZWxldmFuY2UgIT09IE4ucmVsZXZhbmNlKVxuICAgICAgICByZXR1cm4gTi5yZWxldmFuY2UgLSBoLnJlbGV2YW5jZTtcbiAgICAgIGlmIChoLmxhbmd1YWdlICYmIE4ubGFuZ3VhZ2UpIHtcbiAgICAgICAgaWYgKHgoaC5sYW5ndWFnZSkuc3VwZXJzZXRPZiA9PT0gTi5sYW5ndWFnZSlcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgaWYgKHgoTi5sYW5ndWFnZSkuc3VwZXJzZXRPZiA9PT0gaC5sYW5ndWFnZSlcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9KSwgWyQsIEZdID0gQiwgayA9ICQ7XG4gICAgcmV0dXJuIGsuc2Vjb25kQmVzdCA9IEYsIGs7XG4gIH1cbiAgZnVuY3Rpb24gRChFKSB7XG4gICAgbGV0IEMgPSBudWxsO1xuICAgIGNvbnN0IE0gPSAoKCQpID0+IHtcbiAgICAgIGxldCBGID0gJC5jbGFzc05hbWUgKyBcIiBcIjtcbiAgICAgIEYgKz0gJC5wYXJlbnROb2RlID8gJC5wYXJlbnROb2RlLmNsYXNzTmFtZSA6IFwiXCI7XG4gICAgICBjb25zdCBrID0gYy5sYW5ndWFnZURldGVjdFJlLmV4ZWMoRik7XG4gICAgICBpZiAoaykge1xuICAgICAgICBjb25zdCBoID0geChrWzFdKTtcbiAgICAgICAgcmV0dXJuIGggfHwgKE1kKHMucmVwbGFjZShcInt9XCIsIGtbMV0pKSwgTWQoXCJGYWxsaW5nIGJhY2sgdG8gbm8taGlnaGxpZ2h0IG1vZGUgZm9yIHRoaXMgYmxvY2suXCIsICQpKSwgaCA/IGtbMV0gOiBcIm5vLWhpZ2hsaWdodFwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEYuc3BsaXQoL1xccysvKS5maW5kKChoKSA9PiBwKGgpIHx8IHgoaCkpO1xuICAgIH0pKEUpO1xuICAgIGlmIChwKE0pKVxuICAgICAgcmV0dXJuO1xuICAgIGlmIChBKFwiYmVmb3JlOmhpZ2hsaWdodEVsZW1lbnRcIiwge1xuICAgICAgZWw6IEUsXG4gICAgICBsYW5ndWFnZTogTVxuICAgIH0pLCBFLmRhdGFzZXQuaGlnaGxpZ2h0ZWQpXG4gICAgICByZXR1cm4gY29uc29sZS5sb2coXCJFbGVtZW50IHByZXZpb3VzbHkgaGlnaGxpZ2h0ZWQuIFRvIGhpZ2hsaWdodCBhZ2FpbiwgZmlyc3QgdW5zZXQgYGRhdGFzZXQuaGlnaGxpZ2h0ZWRgLlwiLCBFKTtcbiAgICBpZiAoRS5jaGlsZHJlbi5sZW5ndGggPiAwICYmIChjLmlnbm9yZVVuZXNjYXBlZEhUTUwgfHwgKGNvbnNvbGUud2FybihcIk9uZSBvZiB5b3VyIGNvZGUgYmxvY2tzIGluY2x1ZGVzIHVuZXNjYXBlZCBIVE1MLiBUaGlzIGlzIGEgcG90ZW50aWFsbHkgc2VyaW91cyBzZWN1cml0eSByaXNrLlwiKSwgY29uc29sZS53YXJuKFwiaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy93aWtpL3NlY3VyaXR5XCIpLCBjb25zb2xlLndhcm4oXCJUaGUgZWxlbWVudCB3aXRoIHVuZXNjYXBlZCBIVE1MOlwiKSwgY29uc29sZS53YXJuKEUpKSwgYy50aHJvd1VuZXNjYXBlZEhUTUwpKVxuICAgICAgdGhyb3cgbmV3IHR5KFwiT25lIG9mIHlvdXIgY29kZSBibG9ja3MgaW5jbHVkZXMgdW5lc2NhcGVkIEhUTUwuXCIsIEUuaW5uZXJIVE1MKTtcbiAgICBDID0gRTtcbiAgICBjb25zdCB5ID0gQy50ZXh0Q29udGVudCwgQiA9IE0gPyB2KHksIHsgbGFuZ3VhZ2U6IE0sIGlnbm9yZUlsbGVnYWxzOiAhMCB9KSA6IFMoeSk7XG4gICAgRS5pbm5lckhUTUwgPSBCLnZhbHVlLCBFLmRhdGFzZXQuaGlnaGxpZ2h0ZWQgPSBcInllc1wiLCAoKCQsIEYsIGspID0+IHtcbiAgICAgIGNvbnN0IGggPSBGICYmIG9bRl0gfHwgaztcbiAgICAgICQuY2xhc3NMaXN0LmFkZChcImhsanNcIiksICQuY2xhc3NMaXN0LmFkZChcImxhbmd1YWdlLVwiICsgaCk7XG4gICAgfSkoRSwgTSwgQi5sYW5ndWFnZSksIEUucmVzdWx0ID0ge1xuICAgICAgbGFuZ3VhZ2U6IEIubGFuZ3VhZ2UsXG4gICAgICByZTogQi5yZWxldmFuY2UsXG4gICAgICByZWxldmFuY2U6IEIucmVsZXZhbmNlXG4gICAgfSwgQi5zZWNvbmRCZXN0ICYmIChFLnNlY29uZEJlc3QgPSB7XG4gICAgICBsYW5ndWFnZTogQi5zZWNvbmRCZXN0Lmxhbmd1YWdlLFxuICAgICAgcmVsZXZhbmNlOiBCLnNlY29uZEJlc3QucmVsZXZhbmNlXG4gICAgfSksIEEoXCJhZnRlcjpoaWdobGlnaHRFbGVtZW50XCIsIHsgZWw6IEUsIHJlc3VsdDogQiwgdGV4dDogeSB9KTtcbiAgfVxuICBsZXQgVCA9ICExO1xuICBmdW5jdGlvbiBtKCkge1xuICAgIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09IFwibG9hZGluZ1wiID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjLmNzc1NlbGVjdG9yKS5mb3JFYWNoKEQpIDogVCA9ICEwO1xuICB9XG4gIGZ1bmN0aW9uIHgoRSkge1xuICAgIHJldHVybiBFID0gKEUgfHwgXCJcIikudG9Mb3dlckNhc2UoKSwgZltFXSB8fCBmW29bRV1dO1xuICB9XG4gIGZ1bmN0aW9uIFIoRSwgeyBsYW5ndWFnZU5hbWU6IEMgfSkge1xuICAgIHR5cGVvZiBFID09IFwic3RyaW5nXCIgJiYgKEUgPSBbRV0pLCBFLmZvckVhY2goKE0pID0+IHtcbiAgICAgIG9bTS50b0xvd2VyQ2FzZSgpXSA9IEM7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gdyhFKSB7XG4gICAgY29uc3QgQyA9IHgoRSk7XG4gICAgcmV0dXJuIEMgJiYgIUMuZGlzYWJsZUF1dG9kZXRlY3Q7XG4gIH1cbiAgZnVuY3Rpb24gQShFLCBDKSB7XG4gICAgY29uc3QgTSA9IEU7XG4gICAgaS5mb3JFYWNoKCh5KSA9PiB7XG4gICAgICB5W01dICYmIHlbTV0oQyk7XG4gICAgfSk7XG4gIH1cbiAgdHlwZW9mIHdpbmRvdyA8IFwidVwiICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCAoKSA9PiB7XG4gICAgVCAmJiBtKCk7XG4gIH0sICExKSwgT2JqZWN0LmFzc2lnbihyLCB7XG4gICAgaGlnaGxpZ2h0OiB2LFxuICAgIGhpZ2hsaWdodEF1dG86IFMsXG4gICAgaGlnaGxpZ2h0QWxsOiBtLFxuICAgIGhpZ2hsaWdodEVsZW1lbnQ6IEQsXG4gICAgaGlnaGxpZ2h0QmxvY2s6IChFKSA9PiAoQ2koXCIxMC43LjBcIiwgXCJoaWdobGlnaHRCbG9jayB3aWxsIGJlIHJlbW92ZWQgZW50aXJlbHkgaW4gdjEyLjBcIiksIENpKFwiMTAuNy4wXCIsIFwiUGxlYXNlIHVzZSBoaWdobGlnaHRFbGVtZW50IG5vdy5cIiksIEQoRSkpLFxuICAgIGNvbmZpZ3VyZTogKEUpID0+IHtcbiAgICAgIGMgPSBOZChjLCBFKTtcbiAgICB9LFxuICAgIGluaXRIaWdobGlnaHRpbmc6ICgpID0+IHtcbiAgICAgIG0oKSwgQ2koXCIxMC42LjBcIiwgXCJpbml0SGlnaGxpZ2h0aW5nKCkgZGVwcmVjYXRlZC4gIFVzZSBoaWdobGlnaHRBbGwoKSBub3cuXCIpO1xuICAgIH0sXG4gICAgaW5pdEhpZ2hsaWdodGluZ09uTG9hZDogKCkgPT4ge1xuICAgICAgbSgpLCBDaShcIjEwLjYuMFwiLCBcImluaXRIaWdobGlnaHRpbmdPbkxvYWQoKSBkZXByZWNhdGVkLiAgVXNlIGhpZ2hsaWdodEFsbCgpIG5vdy5cIik7XG4gICAgfSxcbiAgICByZWdpc3Rlckxhbmd1YWdlOiAoRSwgQykgPT4ge1xuICAgICAgbGV0IE0gPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgTSA9IEMocik7XG4gICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgIGlmIChRcihcIkxhbmd1YWdlIGRlZmluaXRpb24gZm9yICd7fScgY291bGQgbm90IGJlIHJlZ2lzdGVyZWQuXCIucmVwbGFjZShcInt9XCIsIEUpKSwgIXQpXG4gICAgICAgICAgdGhyb3cgeTtcbiAgICAgICAgUXIoeSksIE0gPSBkO1xuICAgICAgfVxuICAgICAgTS5uYW1lIHx8IChNLm5hbWUgPSBFKSwgZltFXSA9IE0sIE0ucmF3RGVmaW5pdGlvbiA9IEMuYmluZChudWxsLCByKSwgTS5hbGlhc2VzICYmIFIoTS5hbGlhc2VzLCB7XG4gICAgICAgIGxhbmd1YWdlTmFtZTogRVxuICAgICAgfSk7XG4gICAgfSxcbiAgICB1bnJlZ2lzdGVyTGFuZ3VhZ2U6IChFKSA9PiB7XG4gICAgICBkZWxldGUgZltFXTtcbiAgICAgIGZvciAoY29uc3QgQyBvZiBPYmplY3Qua2V5cyhvKSlcbiAgICAgICAgb1tDXSA9PT0gRSAmJiBkZWxldGUgb1tDXTtcbiAgICB9LFxuICAgIGxpc3RMYW5ndWFnZXM6ICgpID0+IE9iamVjdC5rZXlzKGYpLFxuICAgIGdldExhbmd1YWdlOiB4LFxuICAgIHJlZ2lzdGVyQWxpYXNlczogUixcbiAgICBhdXRvRGV0ZWN0aW9uOiB3LFxuICAgIGluaGVyaXQ6IE5kLFxuICAgIGFkZFBsdWdpbjogKEUpID0+IHtcbiAgICAgICgoQykgPT4ge1xuICAgICAgICBDW1wiYmVmb3JlOmhpZ2hsaWdodEJsb2NrXCJdICYmICFDW1wiYmVmb3JlOmhpZ2hsaWdodEVsZW1lbnRcIl0gJiYgKENbXCJiZWZvcmU6aGlnaGxpZ2h0RWxlbWVudFwiXSA9IChNKSA9PiB7XG4gICAgICAgICAgQ1tcImJlZm9yZTpoaWdobGlnaHRCbG9ja1wiXShPYmplY3QuYXNzaWduKHsgYmxvY2s6IE0uZWwgfSwgTSkpO1xuICAgICAgICB9KSwgQ1tcImFmdGVyOmhpZ2hsaWdodEJsb2NrXCJdICYmICFDW1wiYWZ0ZXI6aGlnaGxpZ2h0RWxlbWVudFwiXSAmJiAoQ1tcImFmdGVyOmhpZ2hsaWdodEVsZW1lbnRcIl0gPSAoTSkgPT4ge1xuICAgICAgICAgIENbXCJhZnRlcjpoaWdobGlnaHRCbG9ja1wiXShPYmplY3QuYXNzaWduKHsgYmxvY2s6IE0uZWwgfSwgTSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pKEUpLCBpLnB1c2goRSk7XG4gICAgfSxcbiAgICByZW1vdmVQbHVnaW46IChFKSA9PiB7XG4gICAgICBjb25zdCBDID0gaS5pbmRleE9mKEUpO1xuICAgICAgQyAhPT0gLTEgJiYgaS5zcGxpY2UoQywgMSk7XG4gICAgfVxuICB9KSwgci5kZWJ1Z01vZGUgPSAoKSA9PiB7XG4gICAgdCA9ICExO1xuICB9LCByLnNhZmVNb2RlID0gKCkgPT4ge1xuICAgIHQgPSAhMDtcbiAgfSwgci52ZXJzaW9uU3RyaW5nID0gXCIxMS45LjBcIiwgci5yZWdleCA9IHtcbiAgICBjb25jYXQ6IEtyLFxuICAgIGxvb2thaGVhZDogdWMsXG4gICAgZWl0aGVyOiBrcyxcbiAgICBvcHRpb25hbDogQmcsXG4gICAgYW55TnVtYmVyT2ZUaW1lczogTGdcbiAgfTtcbiAgZm9yIChjb25zdCBFIGluIGhhKVxuICAgIHR5cGVvZiBoYVtFXSA9PSBcIm9iamVjdFwiICYmIGxjKGhhW0VdKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24ociwgaGEpLCByO1xufSwgQmEgPSBwYyh7fSk7XG5CYS5uZXdJbnN0YW5jZSA9ICgpID0+IHBjKHt9KTtcbi8qISBgeG1sYCBncmFtbWFyIGNvbXBpbGVkIGZvciBIaWdobGlnaHQuanMgMTEuOS4wICovXG52YXIgbnkgPSAoKCkgPT4gKHIpID0+IHtcbiAgY29uc3QgZiA9IHIucmVnZXgsIG8gPSBmLmNvbmNhdCgvW1xccHtMfV9dL3UsIGYub3B0aW9uYWwoL1tcXHB7TH0wLTlfLi1dKjovdSksIC9bXFxwe0x9MC05Xy4tXSovdSksIGkgPSB7XG4gICAgY2xhc3NOYW1lOiBcInN5bWJvbFwiLFxuICAgIGJlZ2luOiAvJlthLXpdKzt8JiNbMC05XSs7fCYjeFthLWYwLTldKzsvXG4gIH0sIHQgPSB7XG4gICAgYmVnaW46IC9cXHMvLFxuICAgIGNvbnRhaW5zOiBbeyBjbGFzc05hbWU6IFwia2V5d29yZFwiLCBiZWdpbjogLyM/W2Etel9dW2EtejEtOV8tXSsvLCBpbGxlZ2FsOiAvXFxuLyB9XVxuICB9LCBzID0gci5pbmhlcml0KHQsIHsgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvIH0pLCBkID0gci5pbmhlcml0KHIuQVBPU19TVFJJTkdfTU9ERSwge1xuICAgIGNsYXNzTmFtZTogXCJzdHJpbmdcIlxuICB9KSwgYyA9IHIuaW5oZXJpdChyLlFVT1RFX1NUUklOR19NT0RFLCB7IGNsYXNzTmFtZTogXCJzdHJpbmdcIiB9KSwgcCA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogITAsXG4gICAgaWxsZWdhbDogLzwvLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW3tcbiAgICAgIGNsYXNzTmFtZTogXCJhdHRyXCIsXG4gICAgICBiZWdpbjogL1tcXHB7TH0wLTkuXzotXSsvdSxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sIHsgYmVnaW46IC89XFxzKi8sIHJlbGV2YW5jZTogMCwgY29udGFpbnM6IFt7XG4gICAgICBjbGFzc05hbWU6IFwic3RyaW5nXCIsXG4gICAgICBlbmRzUGFyZW50OiAhMCxcbiAgICAgIHZhcmlhbnRzOiBbeyBiZWdpbjogL1wiLywgZW5kOiAvXCIvLCBjb250YWluczogW2ldIH0sIHtcbiAgICAgICAgYmVnaW46IC8nLyxcbiAgICAgICAgZW5kOiAvJy8sXG4gICAgICAgIGNvbnRhaW5zOiBbaV1cbiAgICAgIH0sIHsgYmVnaW46IC9bXlxcc1wiJz08PmBdKy8gfV1cbiAgICB9XSB9XVxuICB9O1xuICByZXR1cm4ge1xuICAgIG5hbWU6IFwiSFRNTCwgWE1MXCIsXG4gICAgYWxpYXNlczogW1wiaHRtbFwiLCBcInhodG1sXCIsIFwicnNzXCIsIFwiYXRvbVwiLCBcInhqYlwiLCBcInhzZFwiLCBcInhzbFwiLCBcInBsaXN0XCIsIFwid3NmXCIsIFwic3ZnXCJdLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6ICEwLFxuICAgIHVuaWNvZGVSZWdleDogITAsXG4gICAgY29udGFpbnM6IFt7XG4gICAgICBjbGFzc05hbWU6IFwibWV0YVwiLFxuICAgICAgYmVnaW46IC88IVthLXpdLyxcbiAgICAgIGVuZDogLz4vLFxuICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgIGNvbnRhaW5zOiBbdCwgYywgZCwgcywgeyBiZWdpbjogL1xcWy8sIGVuZDogL1xcXS8sIGNvbnRhaW5zOiBbe1xuICAgICAgICBjbGFzc05hbWU6IFwibWV0YVwiLFxuICAgICAgICBiZWdpbjogLzwhW2Etel0vLFxuICAgICAgICBlbmQ6IC8+LyxcbiAgICAgICAgY29udGFpbnM6IFt0LCBzLCBjLCBkXVxuICAgICAgfV0gfV1cbiAgICB9LCByLkNPTU1FTlQoLzwhLS0vLCAvLS0+LywgeyByZWxldmFuY2U6IDEwIH0pLCB7XG4gICAgICBiZWdpbjogLzwhXFxbQ0RBVEFcXFsvLFxuICAgICAgZW5kOiAvXFxdXFxdPi8sXG4gICAgICByZWxldmFuY2U6IDEwXG4gICAgfSwgaSwgeyBjbGFzc05hbWU6IFwibWV0YVwiLCBlbmQ6IC9cXD8+LywgdmFyaWFudHM6IFt7XG4gICAgICBiZWdpbjogLzxcXD94bWwvLFxuICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgIGNvbnRhaW5zOiBbY11cbiAgICB9LCB7IGJlZ2luOiAvPFxcP1thLXpdW2EtejAtOV0rLyB9XSB9LCB7XG4gICAgICBjbGFzc05hbWU6IFwidGFnXCIsXG4gICAgICBiZWdpbjogLzxzdHlsZSg/PVxcc3w+KS8sXG4gICAgICBlbmQ6IC8+LyxcbiAgICAgIGtleXdvcmRzOiB7IG5hbWU6IFwic3R5bGVcIiB9LFxuICAgICAgY29udGFpbnM6IFtwXSxcbiAgICAgIHN0YXJ0czoge1xuICAgICAgICBlbmQ6IC88XFwvc3R5bGU+LyxcbiAgICAgICAgcmV0dXJuRW5kOiAhMCxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6IFtcImNzc1wiLCBcInhtbFwiXVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGNsYXNzTmFtZTogXCJ0YWdcIixcbiAgICAgIGJlZ2luOiAvPHNjcmlwdCg/PVxcc3w+KS8sXG4gICAgICBlbmQ6IC8+LyxcbiAgICAgIGtleXdvcmRzOiB7IG5hbWU6IFwic2NyaXB0XCIgfSxcbiAgICAgIGNvbnRhaW5zOiBbcF0sXG4gICAgICBzdGFydHM6IHtcbiAgICAgICAgZW5kOiAvPFxcL3NjcmlwdD4vLFxuICAgICAgICByZXR1cm5FbmQ6ICEwLFxuICAgICAgICBzdWJMYW5ndWFnZTogW1wiamF2YXNjcmlwdFwiLCBcImhhbmRsZWJhcnNcIiwgXCJ4bWxcIl1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBjbGFzc05hbWU6IFwidGFnXCIsXG4gICAgICBiZWdpbjogLzw+fDxcXC8+L1xuICAgIH0sIHtcbiAgICAgIGNsYXNzTmFtZTogXCJ0YWdcIixcbiAgICAgIGJlZ2luOiBmLmNvbmNhdCgvPC8sIGYubG9va2FoZWFkKGYuY29uY2F0KG8sIGYuZWl0aGVyKC9cXC8+LywgLz4vLCAvXFxzLykpKSksXG4gICAgICBlbmQ6IC9cXC8/Pi8sXG4gICAgICBjb250YWluczogW3sgY2xhc3NOYW1lOiBcIm5hbWVcIiwgYmVnaW46IG8sIHJlbGV2YW5jZTogMCwgc3RhcnRzOiBwIH1dXG4gICAgfSwge1xuICAgICAgY2xhc3NOYW1lOiBcInRhZ1wiLFxuICAgICAgYmVnaW46IGYuY29uY2F0KC88XFwvLywgZi5sb29rYWhlYWQoZi5jb25jYXQobywgLz4vKSkpLFxuICAgICAgY29udGFpbnM6IFt7XG4gICAgICAgIGNsYXNzTmFtZTogXCJuYW1lXCIsXG4gICAgICAgIGJlZ2luOiBvLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sIHsgYmVnaW46IC8+LywgcmVsZXZhbmNlOiAwLCBlbmRzUGFyZW50OiAhMCB9XVxuICAgIH1dXG4gIH07XG59KSgpO1xuLyohIGBqYXZhc2NyaXB0YCBncmFtbWFyIGNvbXBpbGVkIGZvciBIaWdobGlnaHQuanMgMTEuOS4wICovXG52YXIgcnkgPSAoKCkgPT4ge1xuICBjb25zdCByID0gXCJbQS1aYS16JF9dWzAtOUEtWmEteiRfXSpcIiwgZiA9IFtcImFzXCIsIFwiaW5cIiwgXCJvZlwiLCBcImlmXCIsIFwiZm9yXCIsIFwid2hpbGVcIiwgXCJmaW5hbGx5XCIsIFwidmFyXCIsIFwibmV3XCIsIFwiZnVuY3Rpb25cIiwgXCJkb1wiLCBcInJldHVyblwiLCBcInZvaWRcIiwgXCJlbHNlXCIsIFwiYnJlYWtcIiwgXCJjYXRjaFwiLCBcImluc3RhbmNlb2ZcIiwgXCJ3aXRoXCIsIFwidGhyb3dcIiwgXCJjYXNlXCIsIFwiZGVmYXVsdFwiLCBcInRyeVwiLCBcInN3aXRjaFwiLCBcImNvbnRpbnVlXCIsIFwidHlwZW9mXCIsIFwiZGVsZXRlXCIsIFwibGV0XCIsIFwieWllbGRcIiwgXCJjb25zdFwiLCBcImNsYXNzXCIsIFwiZGVidWdnZXJcIiwgXCJhc3luY1wiLCBcImF3YWl0XCIsIFwic3RhdGljXCIsIFwiaW1wb3J0XCIsIFwiZnJvbVwiLCBcImV4cG9ydFwiLCBcImV4dGVuZHNcIl0sIG8gPSBbXCJ0cnVlXCIsIFwiZmFsc2VcIiwgXCJudWxsXCIsIFwidW5kZWZpbmVkXCIsIFwiTmFOXCIsIFwiSW5maW5pdHlcIl0sIGkgPSBbXCJPYmplY3RcIiwgXCJGdW5jdGlvblwiLCBcIkJvb2xlYW5cIiwgXCJTeW1ib2xcIiwgXCJNYXRoXCIsIFwiRGF0ZVwiLCBcIk51bWJlclwiLCBcIkJpZ0ludFwiLCBcIlN0cmluZ1wiLCBcIlJlZ0V4cFwiLCBcIkFycmF5XCIsIFwiRmxvYXQzMkFycmF5XCIsIFwiRmxvYXQ2NEFycmF5XCIsIFwiSW50OEFycmF5XCIsIFwiVWludDhBcnJheVwiLCBcIlVpbnQ4Q2xhbXBlZEFycmF5XCIsIFwiSW50MTZBcnJheVwiLCBcIkludDMyQXJyYXlcIiwgXCJVaW50MTZBcnJheVwiLCBcIlVpbnQzMkFycmF5XCIsIFwiQmlnSW50NjRBcnJheVwiLCBcIkJpZ1VpbnQ2NEFycmF5XCIsIFwiU2V0XCIsIFwiTWFwXCIsIFwiV2Vha1NldFwiLCBcIldlYWtNYXBcIiwgXCJBcnJheUJ1ZmZlclwiLCBcIlNoYXJlZEFycmF5QnVmZmVyXCIsIFwiQXRvbWljc1wiLCBcIkRhdGFWaWV3XCIsIFwiSlNPTlwiLCBcIlByb21pc2VcIiwgXCJHZW5lcmF0b3JcIiwgXCJHZW5lcmF0b3JGdW5jdGlvblwiLCBcIkFzeW5jRnVuY3Rpb25cIiwgXCJSZWZsZWN0XCIsIFwiUHJveHlcIiwgXCJJbnRsXCIsIFwiV2ViQXNzZW1ibHlcIl0sIHQgPSBbXCJFcnJvclwiLCBcIkV2YWxFcnJvclwiLCBcIkludGVybmFsRXJyb3JcIiwgXCJSYW5nZUVycm9yXCIsIFwiUmVmZXJlbmNlRXJyb3JcIiwgXCJTeW50YXhFcnJvclwiLCBcIlR5cGVFcnJvclwiLCBcIlVSSUVycm9yXCJdLCBzID0gW1wic2V0SW50ZXJ2YWxcIiwgXCJzZXRUaW1lb3V0XCIsIFwiY2xlYXJJbnRlcnZhbFwiLCBcImNsZWFyVGltZW91dFwiLCBcInJlcXVpcmVcIiwgXCJleHBvcnRzXCIsIFwiZXZhbFwiLCBcImlzRmluaXRlXCIsIFwiaXNOYU5cIiwgXCJwYXJzZUZsb2F0XCIsIFwicGFyc2VJbnRcIiwgXCJkZWNvZGVVUklcIiwgXCJkZWNvZGVVUklDb21wb25lbnRcIiwgXCJlbmNvZGVVUklcIiwgXCJlbmNvZGVVUklDb21wb25lbnRcIiwgXCJlc2NhcGVcIiwgXCJ1bmVzY2FwZVwiXSwgZCA9IFtcImFyZ3VtZW50c1wiLCBcInRoaXNcIiwgXCJzdXBlclwiLCBcImNvbnNvbGVcIiwgXCJ3aW5kb3dcIiwgXCJkb2N1bWVudFwiLCBcImxvY2FsU3RvcmFnZVwiLCBcInNlc3Npb25TdG9yYWdlXCIsIFwibW9kdWxlXCIsIFwiZ2xvYmFsXCJdLCBjID0gW10uY29uY2F0KHMsIGksIHQpO1xuICByZXR1cm4gKHApID0+IHtcbiAgICBjb25zdCB2ID0gcC5yZWdleCwgYiA9IHIsIFMgPSB7XG4gICAgICBiZWdpbjogLzxbQS1aYS16MC05XFxcXC5fOi1dKy8sXG4gICAgICBlbmQ6IC9cXC9bQS1aYS16MC05XFxcXC5fOi1dKz58XFwvPi8sXG4gICAgICBpc1RydWx5T3BlbmluZ1RhZzogKEosIFopID0+IHtcbiAgICAgICAgY29uc3QgZGUgPSBKWzBdLmxlbmd0aCArIEouaW5kZXgsIHZlID0gSi5pbnB1dFtkZV07XG4gICAgICAgIGlmICh2ZSA9PT0gXCI8XCIgfHwgdmUgPT09IFwiLFwiKVxuICAgICAgICAgIHJldHVybiB2b2lkIFouaWdub3JlTWF0Y2goKTtcbiAgICAgICAgbGV0IHNlO1xuICAgICAgICB2ZSA9PT0gXCI+XCIgJiYgKCgobGUsIHsgYWZ0ZXI6IGllIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBwZSA9IFwiPC9cIiArIGxlWzBdLnNsaWNlKDEpO1xuICAgICAgICAgIHJldHVybiBsZS5pbnB1dC5pbmRleE9mKHBlLCBpZSkgIT09IC0xO1xuICAgICAgICB9KShKLCB7IGFmdGVyOiBkZSB9KSB8fCBaLmlnbm9yZU1hdGNoKCkpO1xuICAgICAgICBjb25zdCBtZSA9IEouaW5wdXQuc3Vic3RyaW5nKGRlKTtcbiAgICAgICAgKChzZSA9IG1lLm1hdGNoKC9eXFxzKj0vKSkgfHwgKHNlID0gbWUubWF0Y2goL15cXHMrZXh0ZW5kc1xccysvKSkgJiYgc2UuaW5kZXggPT09IDApICYmIFouaWdub3JlTWF0Y2goKTtcbiAgICAgIH1cbiAgICB9LCBEID0ge1xuICAgICAgJHBhdHRlcm46IHIsXG4gICAgICBrZXl3b3JkOiBmLFxuICAgICAgbGl0ZXJhbDogbyxcbiAgICAgIGJ1aWx0X2luOiBjLFxuICAgICAgXCJ2YXJpYWJsZS5sYW5ndWFnZVwiOiBkXG4gICAgfSwgVCA9IFwiWzAtOV0oXz9bMC05XSkqXCIsIG0gPSBgXFxcXC4oJHtUfSlgLCB4ID0gXCIwfFsxLTldKF8/WzAtOV0pKnwwWzAtN10qWzg5XVswLTldKlwiLCBSID0ge1xuICAgICAgY2xhc3NOYW1lOiBcIm51bWJlclwiLFxuICAgICAgdmFyaWFudHM6IFt7XG4gICAgICAgIGJlZ2luOiBgKFxcXFxiKCR7eH0pKCgke219KXxcXFxcLik/fCgke219KSlbZUVdWystXT8oJHtUfSlcXFxcYmBcbiAgICAgIH0sIHtcbiAgICAgICAgYmVnaW46IGBcXFxcYigke3h9KVxcXFxiKCgke219KVxcXFxifFxcXFwuKT98KCR7bX0pXFxcXGJgXG4gICAgICB9LCB7XG4gICAgICAgIGJlZ2luOiBcIlxcXFxiKDB8WzEtOV0oXz9bMC05XSkqKW5cXFxcYlwiXG4gICAgICB9LCB7XG4gICAgICAgIGJlZ2luOiBcIlxcXFxiMFt4WF1bMC05YS1mQS1GXShfP1swLTlhLWZBLUZdKSpuP1xcXFxiXCJcbiAgICAgIH0sIHtcbiAgICAgICAgYmVnaW46IFwiXFxcXGIwW2JCXVswLTFdKF8/WzAtMV0pKm4/XFxcXGJcIlxuICAgICAgfSwgeyBiZWdpbjogXCJcXFxcYjBbb09dWzAtN10oXz9bMC03XSkqbj9cXFxcYlwiIH0sIHtcbiAgICAgICAgYmVnaW46IFwiXFxcXGIwWzAtN10rbj9cXFxcYlwiXG4gICAgICB9XSxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sIHcgPSB7XG4gICAgICBjbGFzc05hbWU6IFwic3Vic3RcIixcbiAgICAgIGJlZ2luOiBcIlxcXFwkXFxcXHtcIixcbiAgICAgIGVuZDogXCJcXFxcfVwiLFxuICAgICAga2V5d29yZHM6IEQsXG4gICAgICBjb250YWluczogW11cbiAgICB9LCBBID0geyBiZWdpbjogXCJodG1sYFwiLCBlbmQ6IFwiXCIsIHN0YXJ0czoge1xuICAgICAgZW5kOiBcImBcIixcbiAgICAgIHJldHVybkVuZDogITEsXG4gICAgICBjb250YWluczogW3AuQkFDS1NMQVNIX0VTQ0FQRSwgd10sXG4gICAgICBzdWJMYW5ndWFnZTogXCJ4bWxcIlxuICAgIH0gfSwgRSA9IHtcbiAgICAgIGJlZ2luOiBcImNzc2BcIixcbiAgICAgIGVuZDogXCJcIixcbiAgICAgIHN0YXJ0czoge1xuICAgICAgICBlbmQ6IFwiYFwiLFxuICAgICAgICByZXR1cm5FbmQ6ICExLFxuICAgICAgICBjb250YWluczogW3AuQkFDS1NMQVNIX0VTQ0FQRSwgd10sXG4gICAgICAgIHN1Ykxhbmd1YWdlOiBcImNzc1wiXG4gICAgICB9XG4gICAgfSwgQyA9IHtcbiAgICAgIGJlZ2luOiBcImdxbGBcIixcbiAgICAgIGVuZDogXCJcIixcbiAgICAgIHN0YXJ0czoge1xuICAgICAgICBlbmQ6IFwiYFwiLFxuICAgICAgICByZXR1cm5FbmQ6ICExLFxuICAgICAgICBjb250YWluczogW3AuQkFDS1NMQVNIX0VTQ0FQRSwgd10sXG4gICAgICAgIHN1Ykxhbmd1YWdlOiBcImdyYXBocWxcIlxuICAgICAgfVxuICAgIH0sIE0gPSB7XG4gICAgICBjbGFzc05hbWU6IFwic3RyaW5nXCIsXG4gICAgICBiZWdpbjogXCJgXCIsXG4gICAgICBlbmQ6IFwiYFwiLFxuICAgICAgY29udGFpbnM6IFtwLkJBQ0tTTEFTSF9FU0NBUEUsIHddXG4gICAgfSwgeSA9IHtcbiAgICAgIGNsYXNzTmFtZTogXCJjb21tZW50XCIsXG4gICAgICB2YXJpYW50czogW3AuQ09NTUVOVCgvXFwvXFwqXFwqKD8hXFwvKS8sIFwiXFxcXCovXCIsIHtcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICBiZWdpbjogXCIoPz1AW0EtWmEtel0rKVwiLFxuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJkb2N0YWdcIixcbiAgICAgICAgICAgIGJlZ2luOiBcIkBbQS1aYS16XStcIlxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJ0eXBlXCIsXG4gICAgICAgICAgICBiZWdpbjogXCJcXFxce1wiLFxuICAgICAgICAgICAgZW5kOiBcIlxcXFx9XCIsXG4gICAgICAgICAgICBleGNsdWRlRW5kOiAhMCxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogITAsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwidmFyaWFibGVcIixcbiAgICAgICAgICAgIGJlZ2luOiBiICsgXCIoPz1cXFxccyooLSl8JClcIixcbiAgICAgICAgICAgIGVuZHNQYXJlbnQ6ICEwLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSwgeyBiZWdpbjogLyg/PVteXFxuXSlcXHMvLCByZWxldmFuY2U6IDAgfV1cbiAgICAgICAgfV1cbiAgICAgIH0pLCBwLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLCBwLkNfTElORV9DT01NRU5UX01PREVdXG4gICAgfSwgQiA9IFtwLkFQT1NfU1RSSU5HX01PREUsIHAuUVVPVEVfU1RSSU5HX01PREUsIEEsIEUsIEMsIE0sIHsgbWF0Y2g6IC9cXCRcXGQrLyB9LCBSXTtcbiAgICB3LmNvbnRhaW5zID0gQi5jb25jYXQoe1xuICAgICAgYmVnaW46IC9cXHsvLFxuICAgICAgZW5kOiAvXFx9LyxcbiAgICAgIGtleXdvcmRzOiBELFxuICAgICAgY29udGFpbnM6IFtcInNlbGZcIl0uY29uY2F0KEIpXG4gICAgfSk7XG4gICAgY29uc3QgJCA9IFtdLmNvbmNhdCh5LCB3LmNvbnRhaW5zKSwgRiA9ICQuY29uY2F0KFt7XG4gICAgICBiZWdpbjogL1xcKC8sXG4gICAgICBlbmQ6IC9cXCkvLFxuICAgICAga2V5d29yZHM6IEQsXG4gICAgICBjb250YWluczogW1wic2VsZlwiXS5jb25jYXQoJClcbiAgICB9XSksIGsgPSB7XG4gICAgICBjbGFzc05hbWU6IFwicGFyYW1zXCIsXG4gICAgICBiZWdpbjogL1xcKC8sXG4gICAgICBlbmQ6IC9cXCkvLFxuICAgICAgZXhjbHVkZUJlZ2luOiAhMCxcbiAgICAgIGV4Y2x1ZGVFbmQ6ICEwLFxuICAgICAga2V5d29yZHM6IEQsXG4gICAgICBjb250YWluczogRlxuICAgIH0sIGggPSB7IHZhcmlhbnRzOiBbe1xuICAgICAgbWF0Y2g6IFsvY2xhc3MvLCAvXFxzKy8sIGIsIC9cXHMrLywgL2V4dGVuZHMvLCAvXFxzKy8sIHYuY29uY2F0KGIsIFwiKFwiLCB2LmNvbmNhdCgvXFwuLywgYiksIFwiKSpcIildLFxuICAgICAgc2NvcGU6IHsgMTogXCJrZXl3b3JkXCIsIDM6IFwidGl0bGUuY2xhc3NcIiwgNTogXCJrZXl3b3JkXCIsIDc6IFwidGl0bGUuY2xhc3MuaW5oZXJpdGVkXCIgfVxuICAgIH0sIHtcbiAgICAgIG1hdGNoOiBbL2NsYXNzLywgL1xccysvLCBiXSxcbiAgICAgIHNjb3BlOiB7IDE6IFwia2V5d29yZFwiLCAzOiBcInRpdGxlLmNsYXNzXCIgfVxuICAgIH1dIH0sIE4gPSB7XG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBtYXRjaDogdi5laXRoZXIoL1xcYkpTT04vLCAvXFxiW0EtWl1bYS16XSsoW0EtWl1bYS16XSp8XFxkKSovLCAvXFxiW0EtWl17Mix9KFtBLVpdW2Etel0rfFxcZCkrKFtBLVpdW2Etel0qKSovLCAvXFxiW0EtWl17Mix9W2Etel0rKFtBLVpdW2Etel0rfFxcZCkqKFtBLVpdW2Etel0qKSovKSxcbiAgICAgIGNsYXNzTmFtZTogXCJ0aXRsZS5jbGFzc1wiLFxuICAgICAga2V5d29yZHM6IHsgXzogWy4uLmksIC4uLnRdIH1cbiAgICB9LCBQID0ge1xuICAgICAgdmFyaWFudHM6IFt7XG4gICAgICAgIG1hdGNoOiBbL2Z1bmN0aW9uLywgL1xccysvLCBiLCAvKD89XFxzKlxcKCkvXVxuICAgICAgfSwgeyBtYXRjaDogWy9mdW5jdGlvbi8sIC9cXHMqKD89XFwoKS9dIH1dLFxuICAgICAgY2xhc3NOYW1lOiB7IDE6IFwia2V5d29yZFwiLCAzOiBcInRpdGxlLmZ1bmN0aW9uXCIgfSxcbiAgICAgIGxhYmVsOiBcImZ1bmMuZGVmXCIsXG4gICAgICBjb250YWluczogW2tdLFxuICAgICAgaWxsZWdhbDogLyUvXG4gICAgfSwgaiA9IHtcbiAgICAgIG1hdGNoOiB2LmNvbmNhdCgvXFxiLywgKEkgPSBbLi4ucywgXCJzdXBlclwiLCBcImltcG9ydFwiXSwgdi5jb25jYXQoXCIoPyFcIiwgSS5qb2luKFwifFwiKSwgXCIpXCIpKSwgYiwgdi5sb29rYWhlYWQoL1xcKC8pKSxcbiAgICAgIGNsYXNzTmFtZTogXCJ0aXRsZS5mdW5jdGlvblwiLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfTtcbiAgICB2YXIgSTtcbiAgICBjb25zdCBWID0ge1xuICAgICAgYmVnaW46IHYuY29uY2F0KC9cXC4vLCB2Lmxvb2thaGVhZCh2LmNvbmNhdChiLCAvKD8hWzAtOUEtWmEteiRfKF0pLykpKSxcbiAgICAgIGVuZDogYixcbiAgICAgIGV4Y2x1ZGVCZWdpbjogITAsXG4gICAgICBrZXl3b3JkczogXCJwcm90b3R5cGVcIixcbiAgICAgIGNsYXNzTmFtZTogXCJwcm9wZXJ0eVwiLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSwgVyA9IHtcbiAgICAgIG1hdGNoOiBbL2dldHxzZXQvLCAvXFxzKy8sIGIsIC8oPz1cXCgpL10sXG4gICAgICBjbGFzc05hbWU6IHsgMTogXCJrZXl3b3JkXCIsIDM6IFwidGl0bGUuZnVuY3Rpb25cIiB9LFxuICAgICAgY29udGFpbnM6IFt7IGJlZ2luOiAvXFwoXFwpLyB9LCBrXVxuICAgIH0sIFEgPSBcIihcXFxcKFteKCldKihcXFxcKFteKCldKihcXFxcKFteKCldKlxcXFwpW14oKV0qKSpcXFxcKVteKCldKikqXFxcXCl8XCIgKyBwLlVOREVSU0NPUkVfSURFTlRfUkUgKyBcIilcXFxccyo9PlwiLCBYID0ge1xuICAgICAgbWF0Y2g6IFsvY29uc3R8dmFyfGxldC8sIC9cXHMrLywgYiwgL1xccyovLCAvPVxccyovLCAvKGFzeW5jXFxzKik/Lywgdi5sb29rYWhlYWQoUSldLFxuICAgICAga2V5d29yZHM6IFwiYXN5bmNcIixcbiAgICAgIGNsYXNzTmFtZTogeyAxOiBcImtleXdvcmRcIiwgMzogXCJ0aXRsZS5mdW5jdGlvblwiIH0sXG4gICAgICBjb250YWluczogW2tdXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogXCJKYXZhU2NyaXB0XCIsXG4gICAgICBhbGlhc2VzOiBbXCJqc1wiLCBcImpzeFwiLCBcIm1qc1wiLCBcImNqc1wiXSxcbiAgICAgIGtleXdvcmRzOiBELFxuICAgICAgZXhwb3J0czoge1xuICAgICAgICBQQVJBTVNfQ09OVEFJTlM6IEYsXG4gICAgICAgIENMQVNTX1JFRkVSRU5DRTogTlxuICAgICAgfSxcbiAgICAgIGlsbGVnYWw6IC8jKD8hWyRfQS16XSkvLFxuICAgICAgY29udGFpbnM6IFtwLlNIRUJBTkcoeyBsYWJlbDogXCJzaGViYW5nXCIsIGJpbmFyeTogXCJub2RlXCIsIHJlbGV2YW5jZTogNSB9KSwge1xuICAgICAgICBsYWJlbDogXCJ1c2Vfc3RyaWN0XCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJtZXRhXCIsXG4gICAgICAgIHJlbGV2YW5jZTogMTAsXG4gICAgICAgIGJlZ2luOiAvXlxccypbJ1wiXXVzZSAoc3RyaWN0fGFzbSlbJ1wiXS9cbiAgICAgIH0sIHAuQVBPU19TVFJJTkdfTU9ERSwgcC5RVU9URV9TVFJJTkdfTU9ERSwgQSwgRSwgQywgTSwgeSwgeyBtYXRjaDogL1xcJFxcZCsvIH0sIFIsIE4sIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImF0dHJcIixcbiAgICAgICAgYmVnaW46IGIgKyB2Lmxvb2thaGVhZChcIjpcIiksXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSwgWCwge1xuICAgICAgICBiZWdpbjogXCIoXCIgKyBwLlJFX1NUQVJURVJTX1JFICsgXCJ8XFxcXGIoY2FzZXxyZXR1cm58dGhyb3cpXFxcXGIpXFxcXHMqXCIsXG4gICAgICAgIGtleXdvcmRzOiBcInJldHVybiB0aHJvdyBjYXNlXCIsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFt5LCBwLlJFR0VYUF9NT0RFLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgYmVnaW46IFEsXG4gICAgICAgICAgcmV0dXJuQmVnaW46ICEwLFxuICAgICAgICAgIGVuZDogXCJcXFxccyo9PlwiLFxuICAgICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcInBhcmFtc1wiLFxuICAgICAgICAgICAgdmFyaWFudHM6IFt7IGJlZ2luOiBwLlVOREVSU0NPUkVfSURFTlRfUkUsIHJlbGV2YW5jZTogMCB9LCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgYmVnaW46IC9cXChcXHMqXFwpLyxcbiAgICAgICAgICAgICAgc2tpcDogITBcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgICBleGNsdWRlQmVnaW46ICEwLFxuICAgICAgICAgICAgICBleGNsdWRlRW5kOiAhMCxcbiAgICAgICAgICAgICAga2V5d29yZHM6IEQsXG4gICAgICAgICAgICAgIGNvbnRhaW5zOiBGXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH1dXG4gICAgICAgIH0sIHsgYmVnaW46IC8sLywgcmVsZXZhbmNlOiAwIH0sIHtcbiAgICAgICAgICBtYXRjaDogL1xccysvLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9LCB7IHZhcmlhbnRzOiBbeyBiZWdpbjogXCI8PlwiLCBlbmQ6IFwiPC8+XCIgfSwge1xuICAgICAgICAgIG1hdGNoOiAvPFtBLVphLXowLTlcXFxcLl86LV0rXFxzKlxcLz4vXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBiZWdpbjogUy5iZWdpbixcbiAgICAgICAgICBcIm9uOmJlZ2luXCI6IFMuaXNUcnVseU9wZW5pbmdUYWcsXG4gICAgICAgICAgZW5kOiBTLmVuZFxuICAgICAgICB9XSwgc3ViTGFuZ3VhZ2U6IFwieG1sXCIsIGNvbnRhaW5zOiBbe1xuICAgICAgICAgIGJlZ2luOiBTLmJlZ2luLFxuICAgICAgICAgIGVuZDogUy5lbmQsXG4gICAgICAgICAgc2tpcDogITAsXG4gICAgICAgICAgY29udGFpbnM6IFtcInNlbGZcIl1cbiAgICAgICAgfV0gfV1cbiAgICAgIH0sIFAsIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogXCJ3aGlsZSBpZiBzd2l0Y2ggY2F0Y2ggZm9yXCJcbiAgICAgIH0sIHtcbiAgICAgICAgYmVnaW46IFwiXFxcXGIoPyFmdW5jdGlvbilcIiArIHAuVU5ERVJTQ09SRV9JREVOVF9SRSArIFwiXFxcXChbXigpXSooXFxcXChbXigpXSooXFxcXChbXigpXSpcXFxcKVteKCldKikqXFxcXClbXigpXSopKlxcXFwpXFxcXHMqXFxcXHtcIixcbiAgICAgICAgcmV0dXJuQmVnaW46ICEwLFxuICAgICAgICBsYWJlbDogXCJmdW5jLmRlZlwiLFxuICAgICAgICBjb250YWluczogW2ssIHAuaW5oZXJpdChwLlRJVExFX01PREUsIHtcbiAgICAgICAgICBiZWdpbjogYixcbiAgICAgICAgICBjbGFzc05hbWU6IFwidGl0bGUuZnVuY3Rpb25cIlxuICAgICAgICB9KV1cbiAgICAgIH0sIHsgbWF0Y2g6IC9cXC5cXC5cXC4vLCByZWxldmFuY2U6IDAgfSwgViwge1xuICAgICAgICBtYXRjaDogXCJcXFxcJFwiICsgYixcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LCB7XG4gICAgICAgIG1hdGNoOiBbL1xcYmNvbnN0cnVjdG9yKD89XFxzKlxcKCkvXSxcbiAgICAgICAgY2xhc3NOYW1lOiB7IDE6IFwidGl0bGUuZnVuY3Rpb25cIiB9LFxuICAgICAgICBjb250YWluczogW2tdXG4gICAgICB9LCBqLCB7XG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgbWF0Y2g6IC9cXGJbQS1aXVtBLVpfMC05XStcXGIvLFxuICAgICAgICBjbGFzc05hbWU6IFwidmFyaWFibGUuY29uc3RhbnRcIlxuICAgICAgfSwgaCwgVywgeyBtYXRjaDogL1xcJFsoLl0vIH1dXG4gICAgfTtcbiAgfTtcbn0pKCk7XG5CYS5yZWdpc3Rlckxhbmd1YWdlKFwiamF2YXNjcmlwdFwiLCByeSk7XG5CYS5yZWdpc3Rlckxhbmd1YWdlKFwieG1sXCIsIG55KTtcbmNvbnN0IGl5ID0gd3Qoe1xuICBuYW1lOiBcIkZjRGVzaWduZXJcIixcbiAgY29tcG9uZW50czoge1xuICAgIGZjRHJhZ2dhYmxlOiBIcyxcbiAgICBEcmFnRm9ybTogb3QuJGZvcm0oKSxcbiAgICBWaWV3Rm9ybTogT2EuJGZvcm0oKSxcbiAgICBFdmVudENvbmZpZzogYWNcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBtZW51OiBBcnJheSxcbiAgICBoZWlnaHQ6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgY29uZmlnOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe30pXG4gICAgfSxcbiAgICBtYXNrOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdm9pZCAwXG4gICAgfSxcbiAgICBsb2NhbGU6IE9iamVjdCxcbiAgICBoYW5kbGU6IEFycmF5XG4gIH0sXG4gIGVtaXRzOiBbXCJhY3RpdmVcIiwgXCJjcmVhdGVcIiwgXCJjb3B5XCIsIFwiZGVsZXRlXCIsIFwiZHJhZ1wiLCBcImlucHV0RGF0YVwiLCBcInNhdmVcIl0sXG4gIHNldHVwKHIpIHtcbiAgICBjb25zdCB7IG1lbnU6IGYsIGhlaWdodDogbywgbWFzazogaSwgbG9jYWxlOiB0LCBoYW5kbGU6IHMgfSA9IGpmKHIpLCBkID0gQWgoKSwgYyA9IG1hKHsgYWN0aXZlOiBudWxsIH0pO1xuICAgIFVmKFwiZmN4XCIsIGMpLCBVZihcImRlc2lnbmVyXCIsIGQpO1xuICAgIGNvbnN0IHAgPSBvbyhyLCBcImNvbmZpZ1wiLCB7fSksIHYgPSBvbyhwLnZhbHVlLCBcImJhc2VSdWxlXCIsIG51bGwpLCBiID0gb28ocC52YWx1ZSwgXCJjb21wb25lbnRSdWxlXCIsIHt9KSwgUyA9IG9vKHAudmFsdWUsIFwidmFsaWRhdGVSdWxlXCIsIG51bGwpLCBEID0gb28ocC52YWx1ZSwgXCJmb3JtUnVsZVwiLCBudWxsKSwgVCA9IFluKCgpID0+IHtcbiAgICAgIGNvbnN0IGggPSBvLnZhbHVlO1xuICAgICAgcmV0dXJuIGggPyBmdC5OdW1iZXIoaCkgPyBgJHtofXB4YCA6IGggOiBcIjEwMCVcIjtcbiAgICB9KSwgbSA9IFluKCgpID0+IHAudmFsdWUuZmllbGRSZWFkb25seSAhPT0gITEpLCB4ID0gWW4oKCkgPT4gcC52YWx1ZS5oaWRkZW5NZW51IHx8IFtdKSwgUiA9IFluKCgpID0+IHAudmFsdWUuaGlkZGVuSXRlbSB8fCBbXSksIHcgPSBZbigoKSA9PiBwLnZhbHVlLmhpZGRlbkRyYWdNZW51ID09PSAhMCksIEEgPSBZbigoKSA9PiBwLnZhbHVlLmhpZGRlbkRyYWdCdG4gPT09ICEwKTtcbiAgICBsZXQgRSA9IE9zO1xuICAgIHQudmFsdWUgJiYgKEUgPSB3cyh0KS50KTtcbiAgICBjb25zdCBDID0gKC4uLmgpID0+IEUoLi4uaCksIE0gPSAoaCwgTiwgLi4uUCkgPT4ge1xuICAgICAgaWYgKE4pIHtcbiAgICAgICAgaWYgKGZ0LkZ1bmN0aW9uKE4pKVxuICAgICAgICAgIHJldHVybiBOKC4uLlApO1xuICAgICAgICBpZiAoTi5ydWxlKSB7XG4gICAgICAgICAgbGV0IGogPSBOLnJ1bGUoLi4uUCk7XG4gICAgICAgICAgcmV0dXJuIE4ucHJlcGVuZCA/IGogPSBbLi4uaiwgLi4uaCguLi5QKV0gOiBOLmFwcGVuZCAmJiAoaiA9IFsuLi5oKC4uLlApLCAuLi5qXSksIGo7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBoKC4uLlApO1xuICAgIH0sIHkgPSBtYSh7XG4gICAgICBjYWNoZVByb3BzOiB7fSxcbiAgICAgIG9wZXJhdGlvbjoge1xuICAgICAgICBpZHg6IC0xLFxuICAgICAgICBsaXN0OiBbXVxuICAgICAgfSxcbiAgICAgIG1vdmVSdWxlOiBudWxsLFxuICAgICAgYWRkUnVsZTogbnVsbCxcbiAgICAgIGFkZGVkOiBudWxsLFxuICAgICAgYnVzOiBCaCgpLFxuICAgICAgZGV2aWNlOiBcInBjXCIsXG4gICAgICBhY3RpdmVUYWI6IFwiZm9ybVwiLFxuICAgICAgYWN0aXZlTWVudVRhYjogXCJtZW51XCIsXG4gICAgICBhY3RpdmVSdWxlOiBudWxsLFxuICAgICAgY2hpbGRyZW46IHBvKFtdKSxcbiAgICAgIHRyZWVJbmZvOiBbXSxcbiAgICAgIG1lbnVMaXN0OiBmLnZhbHVlIHx8IGFnKCksXG4gICAgICBkcmFnUnVsZUxpc3Q6IHt9LFxuICAgICAgZXZlbnRTaG93OiAhMSxcbiAgICAgIHVubG9hZFN0YXR1czogITEsXG4gICAgICBwcmV2aWV3U3RhdHVzOiBcImZvcm1cIixcbiAgICAgIHQ6IEMsXG4gICAgICBwcmV2aWV3OiB7XG4gICAgICAgIHN0YXRlOiAhMSxcbiAgICAgICAgcnVsZTogW10sXG4gICAgICAgIG9wdGlvbjoge30sXG4gICAgICAgIGFwaToge31cbiAgICAgIH0sXG4gICAgICBpbnB1dEZvcm06IHtcbiAgICAgICAgc3RhdGU6ICExLFxuICAgICAgICBydWxlOiBbXSxcbiAgICAgICAgb3B0aW9uOiB7fSxcbiAgICAgICAgYXBpOiB7fSxcbiAgICAgICAgZGF0YToge30sXG4gICAgICAgIGtleTogXCJcIlxuICAgICAgfSxcbiAgICAgIGRyYWdGb3JtOiBwbyh7XG4gICAgICAgIHJ1bGU6IFtdLFxuICAgICAgICBhcGk6IHt9XG4gICAgICB9KSxcbiAgICAgIGZvcm1PcHRpb25zOiB7fSxcbiAgICAgIG9sZE9wdGlvbnNLZXlzOiBbXSxcbiAgICAgIGZvcm06IHtcbiAgICAgICAgcnVsZTogTShaZiwgRC52YWx1ZSwgeyB0OiBDIH0pLFxuICAgICAgICBhcGk6IHt9LFxuICAgICAgICBvcHRpb246IHtcbiAgICAgICAgICBmb3JtOiB7XG4gICAgICAgICAgICBsYWJlbFBvc2l0aW9uOiBcInRvcFwiLFxuICAgICAgICAgICAgc2l6ZTogXCJzbWFsbFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdWJtaXRCdG46ICExXG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZm9ybToge30sXG4gICAgICAgICAgc3VibWl0QnRuOiAhMVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYmFzZUZvcm06IHtcbiAgICAgICAgaXNTaG93OiAhMSxcbiAgICAgICAgcnVsZTogTShsbywgdi52YWx1ZSwgeyB0OiBDIH0pLFxuICAgICAgICBhcGk6IHt9LFxuICAgICAgICB2YWx1ZToge30sXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBnbG9iYWw6IHtcbiAgICAgICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgICAgIG1vZGVsRW1pdDogXCJibHVyXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGZvcm06IHtcbiAgICAgICAgICAgIGxhYmVsUG9zaXRpb246IFwidG9wXCIsXG4gICAgICAgICAgICBzaXplOiBcInNtYWxsXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN1Ym1pdEJ0bjogITEsXG4gICAgICAgICAgbW91bnRlZDogKGgpID0+IHtcbiAgICAgICAgICAgIGguYWN0aXZlUnVsZSA9IHkuYWN0aXZlUnVsZSwgaC5zZXRWYWx1ZShoLm9wdGlvbnMuZm9ybURhdGEgfHwge30pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHZhbGlkYXRlRm9ybToge1xuICAgICAgICBpc1Nob3c6ICExLFxuICAgICAgICBydWxlOiBNKHFmLCBTLnZhbHVlLCB7IHQ6IEMgfSksXG4gICAgICAgIGFwaToge30sXG4gICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGdsb2JhbDoge1xuICAgICAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAgICAgbW9kZWxFbWl0OiBcImJsdXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZm9ybToge1xuICAgICAgICAgICAgbGFiZWxQb3NpdGlvbjogXCJ0b3BcIixcbiAgICAgICAgICAgIHNpemU6IFwic21hbGxcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3VibWl0QnRuOiAhMSxcbiAgICAgICAgICBtb3VudGVkOiAoaCkgPT4ge1xuICAgICAgICAgICAgaC5hY3RpdmVSdWxlID0geS5hY3RpdmVSdWxlLCBoLnNldFZhbHVlKGgub3B0aW9ucy5mb3JtRGF0YSB8fCB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJvcHNGb3JtOiB7XG4gICAgICAgIGlzU2hvdzogITEsXG4gICAgICAgIHJ1bGU6IFtdLFxuICAgICAgICBhcGk6IHt9LFxuICAgICAgICB2YWx1ZToge30sXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBnbG9iYWw6IHtcbiAgICAgICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgICAgIG1vZGVsRW1pdDogXCJibHVyXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbnB1dE51bWJlcjoge1xuICAgICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xzUG9zaXRpb246IFwicmlnaHRcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmb3JtOiB7XG4gICAgICAgICAgICBsYWJlbFBvc2l0aW9uOiBcInRvcFwiLFxuICAgICAgICAgICAgc2l6ZTogXCJzbWFsbFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdWJtaXRCdG46ICExLFxuICAgICAgICAgIG1vdW50ZWQ6IChoKSA9PiB7XG4gICAgICAgICAgICBoLmFjdGl2ZVJ1bGUgPSB5LmFjdGl2ZVJ1bGUsIGguc2V0VmFsdWUoaC5vcHRpb25zLmZvcm1EYXRhIHx8IHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjdXN0b21Gb3JtOiB7XG4gICAgICAgIGlzU2hvdzogITEsXG4gICAgICAgIGNvbmZpZzogbnVsbCxcbiAgICAgICAga2V5OiBcIlwiLFxuICAgICAgICBydWxlOiBbXSxcbiAgICAgICAgYXBpOiB7fSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGdsb2JhbDoge1xuICAgICAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAgICAgbW9kZWxFbWl0OiBcImJsdXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZm9ybToge1xuICAgICAgICAgICAgbGFiZWxQb3NpdGlvbjogXCJ0b3BcIixcbiAgICAgICAgICAgIHNpemU6IFwic21hbGxcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3VibWl0QnRuOiAhMVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2woKCkgPT4geS5wcmV2aWV3LnN0YXRlLCBmdW5jdGlvbihoKSB7XG4gICAgICBoIHx8IGFyKCgpID0+IHtcbiAgICAgICAgeS5wcmV2aWV3U3RhdHVzID0gXCJmb3JtXCIsIHkucHJldmlldy5ydWxlID0geS5wcmV2aWV3Lm9wdGlvbiA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBsZXQgQiA9IG51bGw7XG4gICAgY29uc3QgJCA9IChoLCBOKSA9PiB7XG4gICAgICBpZiAoaFsxMF0gIT09IFwiPlwiKSB7XG4gICAgICAgIGlmIChoID0gaC5yZXBsYWNlKFwiZm9ybUNyZWF0ZVwiLCBcIlwiKSwgIWgpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBoID0geHMoaCk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgaCA9IGgucmVwbGFjZShcImZvcm1DcmVhdGU+XCIsIFwiXCIpO1xuICAgICAgY29uc3QgUCA9IGguc3BsaXQoXCI+XCIpLCBqID0gUC5wb3AoKTtcbiAgICAgIGxldCBJID0geS5hY3RpdmVSdWxlO1xuICAgICAgUC5mb3JFYWNoKChWLCBXKSA9PiB7XG4gICAgICAgIFcgfHwgKFYgPSB4cyhWKSksIElbVl0gfHwgKElbVl0gPSB7fSksIEkgPSBJW1ZdO1xuICAgICAgfSksIE4oeyBzb3VyY2U6IEksIGZpZWxkOiBqIH0pO1xuICAgIH07XG4gICAgT2woKCkgPT4gdC52YWx1ZSwgKGgpID0+IHtcbiAgICAgIEUgPSBoID8gd3ModCkudCA6IE9zO1xuICAgICAgY29uc3QgTiA9IHkuZm9ybS5hcGkuZm9ybURhdGEgJiYgeS5mb3JtLmFwaS5mb3JtRGF0YSgpLCBQID0geS5iYXNlRm9ybS5hcGkuZm9ybURhdGEgJiYgeS5iYXNlRm9ybS5hcGkuZm9ybURhdGEoKSwgaiA9IHkudmFsaWRhdGVGb3JtLmFwaS5mb3JtRGF0YSAmJiB5LnZhbGlkYXRlRm9ybS5hcGkuZm9ybURhdGEoKTtcbiAgICAgIHkudmFsaWRhdGVGb3JtLnJ1bGUgPSBNKHFmLCBTLnZhbHVlLCB7IHQ6IEMgfSksIHkuYmFzZUZvcm0ucnVsZSA9IE0obG8sIHYudmFsdWUsIHsgdDogQyB9KSwgeS5mb3JtLnJ1bGUgPSBNKFpmLCBELnZhbHVlLCB7IHQ6IEMgfSksIHkuY2FjaGVQcm9wcyA9IHt9O1xuICAgICAgY29uc3QgSSA9IHkuYWN0aXZlUnVsZTtcbiAgICAgIGxldCBWID0gbnVsbDtcbiAgICAgIEkgJiYgKFYgPSB5LnByb3BzRm9ybS5hcGkuZm9ybURhdGEgJiYgeS5wcm9wc0Zvcm0uYXBpLmZvcm1EYXRhKCksIHkucHJvcHNGb3JtLnJ1bGUgPSB5LmNhY2hlUHJvcHNbSS5fZmNfaWRdID0gRi5nZXRQcm9wc1J1bGUoSSkpLCBhcigoKSA9PiB7XG4gICAgICAgIE4gJiYgeS5mb3JtLmFwaS5zZXRWYWx1ZShOKSwgUCAmJiB5LmJhc2VGb3JtLmFwaS5zZXRWYWx1ZShQKSwgaiAmJiB5LnZhbGlkYXRlRm9ybS5hcGkuc2V0VmFsdWUoaiksIFYgJiYgeS5wcm9wc0Zvcm0uYXBpLnNldFZhbHVlKFYpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgRiA9IHtcbiAgICAgIHVuV2F0Y2hBY3RpdmVSdWxlKCkge1xuICAgICAgICBCICYmIEIoKSwgQiA9IG51bGw7XG4gICAgICB9LFxuICAgICAgd2F0Y2hBY3RpdmVSdWxlKCkge1xuICAgICAgICBGLnVuV2F0Y2hBY3RpdmVSdWxlKCksIEIgPSBPbCgoKSA9PiB5LmFjdGl2ZVJ1bGUsIGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICBoICYmIEYudXBkYXRlUnVsZUZvcm1EYXRhKCk7XG4gICAgICAgIH0sIHsgZGVlcDogITAsIGZsdXNoOiBcInBvc3RcIiB9KTtcbiAgICAgIH0sXG4gICAgICBtYWtlQ2hpbGRyZW4oaCkge1xuICAgICAgICByZXR1cm4gbWEoeyBjaGlsZHJlbjogaCB9KS5jaGlsZHJlbjtcbiAgICAgIH0sXG4gICAgICBhZGRNZW51KGgpIHtcbiAgICAgICAgaWYgKCFoLm5hbWUgfHwgIWgubGlzdClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBOID0gITA7XG4gICAgICAgIHkubWVudUxpc3QuZm9yRWFjaCgoUCwgaikgPT4ge1xuICAgICAgICAgIFAubmFtZSA9PT0gaC5uYW1lICYmICh5Lm1lbnVMaXN0W2pdID0gaCwgTiA9ICExKTtcbiAgICAgICAgfSksIE4gJiYgeS5tZW51TGlzdC5wdXNoKGgpO1xuICAgICAgfSxcbiAgICAgIHJlbW92ZU1lbnUoaCkge1xuICAgICAgICBbLi4ueS5tZW51TGlzdF0uZm9yRWFjaCgoTiwgUCkgPT4ge1xuICAgICAgICAgIE4ubmFtZSA9PT0gaCAmJiB5Lm1lbnVMaXN0LnNwbGljZShQLCAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgc2V0TWVudUl0ZW0oaCwgTikge1xuICAgICAgICB5Lm1lbnVMaXN0LmZvckVhY2goKFApID0+IHtcbiAgICAgICAgICBQLm5hbWUgPT09IGggJiYgKFAubGlzdCA9IE4pO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBhcHBlbmRNZW51SXRlbShoLCBOKSB7XG4gICAgICAgIHkubWVudUxpc3QuZm9yRWFjaCgoUCkgPT4ge1xuICAgICAgICAgIFAubmFtZSA9PT0gaCAmJiBQLmxpc3QucHVzaCguLi5BcnJheS5pc0FycmF5KE4pID8gTiA6IFtOXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJlbW92ZU1lbnVJdGVtKGgpIHtcbiAgICAgICAgeS5tZW51TGlzdC5mb3JFYWNoKChOKSA9PiB7XG4gICAgICAgICAgbGV0IFA7XG4gICAgICAgICAgZnQuU3RyaW5nKGgpID8gWy4uLk4ubGlzdF0uZm9yRWFjaCgoaiwgSSkgPT4ge1xuICAgICAgICAgICAgai5uYW1lID09PSBoICYmIE4ubGlzdC5zcGxpY2UoSSwgMSk7XG4gICAgICAgICAgfSkgOiAoUCA9IE4ubGlzdC5pbmRleE9mKGgpKSA+IC0xICYmIE4ubGlzdC5zcGxpY2UoUCwgMSk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGFkZENvbXBvbmVudChoKSB7XG4gICAgICAgIEFycmF5LmlzQXJyYXkoaCkgPyBoLmZvckVhY2goKE4pID0+IHtcbiAgICAgICAgICB5LmRyYWdSdWxlTGlzdFtOLm5hbWVdID0gTiwgTi5tZW51ICYmIEYuYXBwZW5kTWVudUl0ZW0oTi5tZW51LCBOKTtcbiAgICAgICAgfSkgOiAoeS5kcmFnUnVsZUxpc3RbaC5uYW1lXSA9IGgsIGgubWVudSAmJiBGLmFwcGVuZE1lbnVJdGVtKGgubWVudSwgaCkpO1xuICAgICAgfSxcbiAgICAgIG9wZW5JbnB1dERhdGEoaCkge1xuICAgICAgICB5LmlucHV0Rm9ybS5zdGF0ZSA9IGggPT09IHZvaWQgMCA/ICF5LmlucHV0Rm9ybS5zdGF0ZSA6ICEhaCwgeS5pbnB1dEZvcm0uc3RhdGUgJiYgKHkuaW5wdXRGb3JtLnJ1bGUgPSBvdC5wYXJzZUpzb24oRi5nZXRKc29uKCkpLCB5LmlucHV0Rm9ybS5vcHRpb24gPSBvdC5wYXJzZUpzb24oRi5nZXRPcHRpb25zSnNvbigpKSwgeS5pbnB1dEZvcm0ub3B0aW9uLmZvcm1EYXRhID0gVnQoeS5pbnB1dEZvcm0uZGF0YSksIHkuaW5wdXRGb3JtLm9wdGlvbi5zdWJtaXRCdG4uc2hvdyA9ICExLCB5LmlucHV0Rm9ybS5vcHRpb24ucmVzZXRCdG4uc2hvdyA9ICExLCBGLmNsZWFyQWN0aXZlUnVsZSgpKTtcbiAgICAgIH0sXG4gICAgICBpbnB1dFNhdmUoKSB7XG4gICAgICAgIGNvbnN0IGggPSB5LmlucHV0Rm9ybS5hcGkuZm9ybURhdGEoKTtcbiAgICAgICAgT2JqZWN0LmtleXMoaCkuZm9yRWFjaCgoUCkgPT4ge1xuICAgICAgICAgIHhpKGhbUF0pICYmIGRlbGV0ZSBoW1BdO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgTiA9IEpTT04uc3RyaW5naWZ5KHkuaW5wdXRGb3JtLmRhdGEpICE9PSBKU09OLnN0cmluZ2lmeShoKTtcbiAgICAgICAgeS5pbnB1dEZvcm0uZGF0YSA9IGgsIHkuaW5wdXRGb3JtLnN0YXRlID0gITEsIGQuZW1pdChcImlucHV0RGF0YVwiLCBoKSwgTiAmJiBGLmFkZE9wZXJhdGlvblJlY29yZCgpO1xuICAgICAgfSxcbiAgICAgIGlucHV0Q2xlYXIoKSB7XG4gICAgICAgIEYuaW5wdXRSZXNldCh7fSk7XG4gICAgICB9LFxuICAgICAgaW5wdXRSZXNldChoKSB7XG4gICAgICAgIHkuaW5wdXRGb3JtLnJ1bGUgPSBvdC5wYXJzZUpzb24oRi5nZXRKc29uKCkpLCB5LmlucHV0Rm9ybS5vcHRpb24uZm9ybURhdGEgPSBoIHx8IFZ0KHkuaW5wdXRGb3JtLmRhdGEpLCB5LmlucHV0Rm9ybS5rZXkgPSBfZSgpO1xuICAgICAgfSxcbiAgICAgIHNldEZvcm1EYXRhKGgpIHtcbiAgICAgICAgeS5pbnB1dEZvcm0uZGF0YSA9IGggfHwge307XG4gICAgICB9LFxuICAgICAgZ2V0Rm9ybURhdGEoKSB7XG4gICAgICAgIHJldHVybiB5LmlucHV0Rm9ybS5kYXRhO1xuICAgICAgfSxcbiAgICAgIGdldFBhcmVudChoKSB7XG4gICAgICAgIGxldCBOID0gaC5fX2ZjX18ucGFyZW50LnJ1bGU7XG4gICAgICAgIGNvbnN0IFAgPSBOLl9tZW51O1xuICAgICAgICByZXR1cm4gUCAmJiBQLmluc2lkZSAmJiAoaCA9IE4sIE4gPSBOLl9fZmNfXy5wYXJlbnQucnVsZSksIHsgcm9vdDogTiwgcGFyZW50OiBoIH07XG4gICAgICB9LFxuICAgICAgdXBkYXRlTmFtZSgpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVSdWxlLm5hbWUgPSBcInJlZl9cIiArIF9lKCk7XG4gICAgICB9LFxuICAgICAgbWFrZURyYWcoaCwgTiwgUCwgaiwgSSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiRHJhZ0JveFwiLFxuICAgICAgICAgIHdyYXA6IHtcbiAgICAgICAgICAgIHNob3c6ICExXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb2w6IHtcbiAgICAgICAgICAgIHNob3c6ICExXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbmplY3Q6ICEwLFxuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBydWxlOiB7XG4gICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgdGFnOiBcImVsLWNvbFwiLFxuICAgICAgICAgICAgICAgIGdyb3VwOiBoID09PSAhMCA/IFwiZGVmYXVsdFwiIDogaCxcbiAgICAgICAgICAgICAgICBnaG9zdENsYXNzOiBcImdob3N0XCIsXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgICAgICAgICAgaGFuZGxlOiBcIi5fZmQtZHJhZy1idG5cIixcbiAgICAgICAgICAgICAgICBlbXB0eUluc2VydFRocmVzaG9sZDogMCxcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IFwidmVydGljYWxcIixcbiAgICAgICAgICAgICAgICBpdGVtS2V5OiBcInR5cGVcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGFnOiBOXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGlsZHJlbjogUCxcbiAgICAgICAgICBzbG90OiBJLFxuICAgICAgICAgIG9uOiBqXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgY2xlYXJEcmFnUnVsZSgpIHtcbiAgICAgICAgRi5zZXRSdWxlKFtdKSwgRi5hZGRPcGVyYXRpb25SZWNvcmQoKSwgeS51bmxvYWRTdGF0dXMgPSAhMTtcbiAgICAgIH0sXG4gICAgICBtYWtlRHJhZ1J1bGUoaCkge1xuICAgICAgICByZXR1cm4gRi5tYWtlQ2hpbGRyZW4oW0YubWFrZURyYWcoITAsIFwiZHJhZ2dhYmxlXCIsIGgsIHtcbiAgICAgICAgICBhZGQ6IChOLCBQKSA9PiBGLmRyYWdBZGQoaCwgUCksXG4gICAgICAgICAgZW5kOiAoTiwgUCkgPT4gRi5kcmFnRW5kKGgsIFApLFxuICAgICAgICAgIHN0YXJ0OiAoTiwgUCkgPT4gRi5kcmFnU3RhcnQoaCwgUCksXG4gICAgICAgICAgdW5jaG9vc2U6IChOLCBQKSA9PiBGLmRyYWdVbmNob29zZShoLCBQKVxuICAgICAgICB9KV0pO1xuICAgICAgfSxcbiAgICAgIGhhbmRsZVNhdmUoKSB7XG4gICAgICAgIGQuZW1pdChcInNhdmVcIiwge1xuICAgICAgICAgIHJ1bGU6IEYuZ2V0SnNvbigpLFxuICAgICAgICAgIG9wdGlvbnM6IEYuZ2V0T3B0aW9uc0pzb24oKVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvcGVuUHJldmlldygpIHtcbiAgICAgICAgeS5wcmV2aWV3LnN0YXRlID0gITA7XG4gICAgICAgIGNvbnN0IGggPSBGLmdldEpzb24oKSwgTiA9IEYuZ2V0T3B0aW9uc0pzb24oKTtcbiAgICAgICAgeS5wcmV2aWV3LnJ1bGUgPSBvdC5wYXJzZUpzb24oaCksIHkucHJldmlldy5vcHRpb24gPSBvdC5wYXJzZUpzb24oTiksIHkucHJldmlldy5odG1sID0gQmEuaGlnaGxpZ2h0KFxuICAgICAgICAgIEZoKGgsIE4pLFxuICAgICAgICAgIHsgbGFuZ3VhZ2U6IFwieG1sXCIgfVxuICAgICAgICApLnZhbHVlO1xuICAgICAgfSxcbiAgICAgIGdldFJ1bGUoKSB7XG4gICAgICAgIHJldHVybiBGLnBhcnNlUnVsZShWdCh5LmRyYWdGb3JtLnJ1bGVbMF0uY2hpbGRyZW4pKTtcbiAgICAgIH0sXG4gICAgICBnZXRKc29uKCkge1xuICAgICAgICByZXR1cm4gb3QudG9Kc29uKEYuZ2V0UnVsZSgpKTtcbiAgICAgIH0sXG4gICAgICBnZXRPcHRpb24oKSB7XG4gICAgICAgIGNvbnN0IGggPSBWdCh5LmZvcm1PcHRpb25zKTtcbiAgICAgICAgT2JqZWN0LmtleXMoaC5fZXZlbnQgfHwge30pLmZvckVhY2goKFApID0+IHtcbiAgICAgICAgICBoLl9ldmVudFtQXSAmJiAoaFtQXSA9IGguX2V2ZW50W1BdKTtcbiAgICAgICAgfSksIGRlbGV0ZSBoLl9ldmVudCwgaC5zdWJtaXRCdG4gPSBoLl9zdWJtaXRCdG4sIGgucmVzZXRCdG4gPSBoLl9yZXNldEJ0biwgaC5yZXNldEJ0bi5pbm5lclRleHQgPSBDKFwicHJvcHMucmVzZXRcIiksIGguc3VibWl0QnRuLmlubmVyVGV4dCA9IEMoXCJwcm9wcy5zdWJtaXRcIik7XG4gICAgICAgIGNvbnN0IE4gPSBWdCh5LmlucHV0Rm9ybS5kYXRhKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKE4pLmxlbmd0aCA+IDAgJiYgKGguZm9ybURhdGEgPSBOKSwgZGVsZXRlIGguX3N1Ym1pdEJ0biwgZGVsZXRlIGguX3Jlc2V0QnRuLCBoO1xuICAgICAgfSxcbiAgICAgIGdldE9wdGlvbnMoKSB7XG4gICAgICAgIEYuZ2V0T3B0aW9uKCk7XG4gICAgICB9LFxuICAgICAgZ2V0T3B0aW9uc0pzb24oKSB7XG4gICAgICAgIHJldHVybiBvdC50b0pzb24oW3RoaXMuZ2V0T3B0aW9uKCldKS5zbGljZSgxKS5zbGljZSgwLCAtMSk7XG4gICAgICB9LFxuICAgICAgc2V0UnVsZShoKSB7XG4gICAgICAgIGggfHwgKGggPSBbXSksIHkuY2hpbGRyZW4gPSBwbyhGLmxvYWRSdWxlKGZ0LlN0cmluZyhoKSA/IG90LnBhcnNlSnNvbihoKSA6IFZ0KGgpKSksIEYuY2xlYXJBY3RpdmVSdWxlKCksIHkuZHJhZ0Zvcm0ucnVsZSA9IEYubWFrZURyYWdSdWxlKEYubWFrZUNoaWxkcmVuKHkuY2hpbGRyZW4pKSwgRi51cGRhdGVUcmVlKCk7XG4gICAgICB9LFxuICAgICAgc2V0QmFzZVJ1bGVDb25maWcoaCwgTikge1xuICAgICAgICB2LnZhbHVlID0geyBydWxlOiBoLCBhcHBlbmQ6IE4gfSwgeS5iYXNlRm9ybS5ydWxlID0gTShsbywgdi52YWx1ZSwgeyB0OiBDIH0pO1xuICAgICAgfSxcbiAgICAgIHNldENvbXBvbmVudFJ1bGVDb25maWcoaCwgTiwgUCkge1xuICAgICAgICBiLnZhbHVlW2hdID0geyBydWxlOiBOLCBhcHBlbmQ6IFAgfSwgeS5jYWNoZVByb3BzID0ge307XG4gICAgICAgIGNvbnN0IGogPSB5LmFjdGl2ZVJ1bGU7XG4gICAgICAgIGlmIChqKSB7XG4gICAgICAgICAgY29uc3QgSSA9IHkucHJvcHNGb3JtLmFwaS5mb3JtRGF0YSAmJiB5LnByb3BzRm9ybS5hcGkuZm9ybURhdGEoKTtcbiAgICAgICAgICB5LnByb3BzRm9ybS5ydWxlID0geS5jYWNoZVByb3BzW2ouX2ZjX2lkXSA9IE0oai5fbWVudS5wcm9wcywgYi52YWx1ZSAmJiBiLnZhbHVlW2ouX21lbnUubmFtZV0sIGosIHtcbiAgICAgICAgICAgIHQ6IEMsXG4gICAgICAgICAgICBhcGk6IHkuZHJhZ0Zvcm0uYXBpXG4gICAgICAgICAgfSksIGFyKCgpID0+IHtcbiAgICAgICAgICAgIEkgJiYgeS5wcm9wc0Zvcm0uYXBpLnNldFZhbHVlKEkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2V0VmFsaWRhdGVSdWxlQ29uZmlnKGgsIE4pIHtcbiAgICAgICAgUy52YWx1ZSA9IHsgcnVsZTogaCwgYXBwZW5kOiBOIH0sIHkudmFsaWRhdGVGb3JtLnJ1bGUgPSBNKGxvLCBTLnZhbHVlLCB7IHQ6IEMgfSk7XG4gICAgICB9LFxuICAgICAgc2V0Rm9ybVJ1bGVDb25maWcoaCwgTikge1xuICAgICAgICBELnZhbHVlID0geyBydWxlOiBoLCBhcHBlbmQ6IE4gfSwgeS5mb3JtLnJ1bGUgPSBNKGxvLCBELnZhbHVlLCB7IHQ6IEMgfSk7XG4gICAgICB9LFxuICAgICAgY2xlYXJBY3RpdmVSdWxlKCkge1xuICAgICAgICB5LmFjdGl2ZVJ1bGUgPSBudWxsLCB5LmN1c3RvbUZvcm0uY29uZmlnID0gbnVsbCwgeS5hY3RpdmVUYWIgPSBcImZvcm1cIiwgYy5hY3RpdmUgPSBcIlwiO1xuICAgICAgfSxcbiAgICAgIHNldE9wdGlvbihoKSB7XG4gICAgICAgIGxldCBOID0gZnQuU3RyaW5nKGgpID8gSlNPTi5wYXJzZShoKSA6IFZ0KGggfHwge30pO1xuICAgICAgICBOLmZvcm0gPSB7XG4gICAgICAgICAgaW5saW5lOiAhMSxcbiAgICAgICAgICBoaWRlUmVxdWlyZWRBc3RlcmlzazogITEsXG4gICAgICAgICAgbGFiZWxQb3NpdGlvbjogXCJyaWdodFwiLFxuICAgICAgICAgIHNpemU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgIGxhYmVsV2lkdGg6IFwiMTI1cHhcIixcbiAgICAgICAgICAuLi5OLmZvcm0gfHwge31cbiAgICAgICAgfSwgTi5fZXZlbnQgPSB7XG4gICAgICAgICAgb25TdWJtaXQ6IE4ub25TdWJtaXQgfHwgXCJcIixcbiAgICAgICAgICBvbkNyZWF0ZWQ6IE4ub25DcmVhdGVkIHx8IFwiXCIsXG4gICAgICAgICAgb25Nb3VudGVkOiBOLm9uTW91bnRlZCB8fCBcIlwiLFxuICAgICAgICAgIG9uQ2hhbmdlOiBOLm9uQ2hhbmdlIHx8IFwiXCIsXG4gICAgICAgICAgYmVmb3JlRmV0Y2g6IE4uYmVmb3JlRmV0Y2ggfHwgXCJcIlxuICAgICAgICB9LCBOLl9yZXNldEJ0biA9IHR5cGVvZiBOLnJlc2V0QnRuID09IFwib2JqZWN0XCIgPyBOLnJlc2V0QnRuIDogeyBzaG93OiBOLnJlc2V0QnRuID09PSAhMCB9LCBOLl9zdWJtaXRCdG4gPSB0eXBlb2YgTi5zdWJtaXRCdG4gPT0gXCJvYmplY3RcIiA/IE4uc3VibWl0QnRuIDogeyBzaG93OiBOLnN1Ym1pdEJ0biAhPT0gITEgfSwgTi5zdWJtaXRCdG4gPSBOLnJlc2V0QnRuID0gITEsIHkuaW5wdXRGb3JtLmRhdGEgPSBOLmZvcm1EYXRhIHx8IHt9LCB5Lm9sZE9wdGlvbnNLZXlzID0gT2JqZWN0LmtleXMoeS5mb3JtLnZhbHVlKSwgZGVsZXRlIE4uZm9ybURhdGEsIHkuZm9ybU9wdGlvbnMgPSBOLCBGLnVwZGF0ZU9wdGlvbnNWYWx1ZSgpO1xuICAgICAgfSxcbiAgICAgIHNldE9wdGlvbnMoaCkge1xuICAgICAgICBGLnNldE9wdGlvbihoKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGVPcHRpb25zVmFsdWUoKSB7XG4gICAgICAgIGNvbnN0IGggPSB7fTtcbiAgICAgICAgeS5vbGRPcHRpb25zS2V5cy5mb3JFYWNoKChQKSA9PiB7XG4gICAgICAgICAgaFtQXSA9IHZvaWQgMDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IE4gPSB7IC4uLmgsIC4uLnkuZm9ybU9wdGlvbnMuZm9ybSB9O1xuICAgICAgICBPYmplY3Qua2V5cyh5LmZvcm1PcHRpb25zKS5mb3JFYWNoKChQKSA9PiB7XG4gICAgICAgICAgY29uc3QgaiA9IHkuZm9ybU9wdGlvbnNbUF07XG4gICAgICAgICAgTltcIj5cIiArIFBdID0gaiwgdHlwZW9mIGogPT0gXCJvYmplY3RcIiAmJiBPYmplY3Qua2V5cyhqKS5mb3JFYWNoKChJKSA9PiB7XG4gICAgICAgICAgICBOW1AgKyBcIj5cIiArIEldID0galtJXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksIHkuZm9ybS52YWx1ZSA9IE47XG4gICAgICB9LFxuICAgICAgbG9hZFJ1bGUoaCwgTiwgUCkge1xuICAgICAgICBjb25zdCBqID0gW107XG4gICAgICAgIHJldHVybiBoLmZvckVhY2goKEkpID0+IHtcbiAgICAgICAgICBpZiAoZnQuU3RyaW5nKEkpKVxuICAgICAgICAgICAgcmV0dXJuIGoucHVzaChJKTtcbiAgICAgICAgICBsZXQgViA9IHkuZHJhZ1J1bGVMaXN0W0kuX2ZjX2RyYWdfdGFnXSB8fCB5LmRyYWdSdWxlTGlzdFtJLnR5cGVdO1xuICAgICAgICAgIGlmIChWIHx8IChWID0gZG0oSSksIEkuX2ZjX2RyYWdfdGFnID0gXCJfXCIpLCBQICYmIChJLl9mY190ZW1wbGF0ZSA9IFApLCBWICYmIFYubG9hZFJ1bGUgJiYgVi5sb2FkUnVsZShJKSwgSS5jaGlsZHJlbiA9IEYubG9hZFJ1bGUoSS5jaGlsZHJlbiB8fCBbXSwgViwgUCksIEkuY29udHJvbCAmJiAoSS5fY29udHJvbCA9IEkuY29udHJvbCwgZGVsZXRlIEkuY29udHJvbCksIEkuY29tcHV0ZWQgJiYgKEkuX2NvbXB1dGVkID0gSS5jb21wdXRlZCwgZGVsZXRlIEkuY29tcHV0ZWQpLCBJLm9uICYmIChJLl9vbiA9IEkub24sIGRlbGV0ZSBJLm9uKSwgVikge1xuICAgICAgICAgICAgY29uc3QgVyA9IEkuc2xvdDtcbiAgICAgICAgICAgIGxldCBRO1xuICAgICAgICAgICAgTiAmJiBOLnNsb3QgJiYgVyAmJiBXICE9PSBcImRlZmF1bHRcIiAmJiAoUSA9IEYuZ2V0U2xvdENvbmZpZyhOLCBXLCBWKSksIGRlbGV0ZSBJLnNsb3QsIEkgPSBGLm1ha2VSdWxlKFEgfHwgViwgSSksIFcgJiYgKEkuc2xvdCA9IFcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBqLnB1c2goSSk7XG4gICAgICAgIH0pLCBqO1xuICAgICAgfSxcbiAgICAgIHBhcnNlUnVsZShoLCBOKSB7XG4gICAgICAgIHJldHVybiBbLi4uaF0ucmVkdWNlKChQLCBqKSA9PiB7XG4gICAgICAgICAgbGV0IEkgPSBOO1xuICAgICAgICAgIGlmIChmdC5TdHJpbmcoaikpXG4gICAgICAgICAgICByZXR1cm4gUC5wdXNoKGopLCBQO1xuICAgICAgICAgIGlmIChqLnR5cGUgPT09IFwiRHJhZ0JveFwiKVxuICAgICAgICAgICAgcmV0dXJuIFAucHVzaCguLi5GLnBhcnNlUnVsZShqLmNoaWxkcmVuLCBJIHx8IGouc2xvdCkpLCBQO1xuICAgICAgICAgIGlmIChqLnR5cGUgPT09IFwiRHJhZ1Rvb2xcIikge1xuICAgICAgICAgICAgaWYgKEkgPSBqLnNsb3QgfHwgTiwgaiA9IGouY2hpbGRyZW5bMF0sIGZ0LlN0cmluZyhqKSlcbiAgICAgICAgICAgICAgcmV0dXJuIFAucHVzaChqKSwgUDtcbiAgICAgICAgICAgIGlmIChqLnR5cGUgPT09IFwiRHJhZ0JveFwiKVxuICAgICAgICAgICAgICByZXR1cm4gUC5wdXNoKC4uLkYucGFyc2VSdWxlKGouY2hpbGRyZW4sIEkgfHwgai5zbG90KSksIFA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBqICYmIChqID0geyAuLi5qIH0sIEkgJiYgSSAhPT0gXCJkZWZhdWx0XCIgJiYgKGouc2xvdCA9IEkpLCBqLmNoaWxkcmVuICYmIGouY2hpbGRyZW4ubGVuZ3RoICYmIChqLmNoaWxkcmVuID0gRi5wYXJzZVJ1bGUoai5jaGlsZHJlbikpLCBkZWxldGUgai5rZXksIGRlbGV0ZSBqLmNvbXBvbmVudCwgai5fbWVudSAmJiAoai5fbWVudS5wYXJzZVJ1bGUgJiYgai5fbWVudS5wYXJzZVJ1bGUoaiksIGRlbGV0ZSBqLl9tZW51KSwgai5fZmNfZHJhZ190YWcgPT09IFwiX1wiICYmIGRlbGV0ZSBqLl9mY19kcmFnX3RhZywgai5fY29udHJvbCAmJiAoai5jb250cm9sID0gai5fY29udHJvbCwgZGVsZXRlIGouX2NvbnRyb2wpLCBqLl9jb21wdXRlZCAmJiAoai5jb21wdXRlZCA9IGouX2NvbXB1dGVkLCBkZWxldGUgai5fY29tcHV0ZWQpLCBqLnNsb3QgfHwgZGVsZXRlIGouc2xvdCwgai5fb24gJiYgKGoub24gPSBqLl9vbiwgZGVsZXRlIGouX29uKSwgai5wcm9wcyAmJiBPYmplY3Qua2V5cyhqLnByb3BzKS5mb3JFYWNoKChWKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBXID0gai5wcm9wc1tWXTtcbiAgICAgICAgICAgIHhpKFcpICYmIGRlbGV0ZSBqLnByb3BzW1ZdO1xuICAgICAgICAgIH0pLCBPYmplY3Qua2V5cyhqKS5maWx0ZXIoKFYpID0+IFYuaW5kZXhPZihcIl9fXCIpID09PSAwIHx8IEFycmF5LmlzQXJyYXkoaltWXSkgJiYgaltWXS5sZW5ndGggPT09IDAgfHwgZnQuT2JqZWN0KGpbVl0pICYmIE9iamVjdC5rZXlzKGpbVl0pLmxlbmd0aCA9PT0gMCkuZm9yRWFjaCgoVikgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIGpbVl07XG4gICAgICAgICAgfSksIFAucHVzaChqKSksIFA7XG4gICAgICAgIH0sIFtdKTtcbiAgICAgIH0sXG4gICAgICBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB5LmRyYWdGb3JtLmFwaS5hbGwoKS5tYXAoKGgpID0+IGguZmllbGQpLmZpbHRlcigoaCkgPT4gISFoKTtcbiAgICAgIH0sXG4gICAgICBiYXNlQ2hhbmdlKGgsIE4sIFAsIGopIHtcbiAgICAgICAgRi5oYW5kbGVDaGFuZ2UoXCJcIiwgaCwgTiwgUCwgaik7XG4gICAgICB9LFxuICAgICAgZm9ybU9wdENoYW5nZShoLCBOKSB7XG4gICAgICAgIHkuZm9ybS52YWx1ZVtoXSA9IE4sIGguaW5kZXhPZihcIj5cIikgPT09IC0xICYmIChoID0gXCJmb3JtPlwiICsgaCk7XG4gICAgICAgIGxldCBQID0geS5mb3JtT3B0aW9ucztcbiAgICAgICAgY29uc3QgaiA9IGguc3BsaXQoXCI+XCIpLCBJID0gai5wb3AoKTtcbiAgICAgICAgai5mb3JFYWNoKChWKSA9PiB7XG4gICAgICAgICAgViAmJiAoUFtWXSB8fCAoUFtWXSA9IHt9KSwgUCA9IFBbVl0pO1xuICAgICAgICB9KSwgUFtJXSA9IE47XG4gICAgICB9LFxuICAgICAgcHJvcFJlbW92ZUZpZWxkKGgsIE4sIFApIHtcbiAgICAgICAgdmFyIGosIEksIFY7XG4gICAgICAgIGlmICh5LmFjdGl2ZVJ1bGUgJiYgUFt5LmFjdGl2ZVJ1bGUuX2ZjX2lkXSA9PT0geS5hY3RpdmVSdWxlKSB7XG4gICAgICAgICAgRi51bldhdGNoQWN0aXZlUnVsZSgpO1xuICAgICAgICAgIGNvbnN0IFcgPSBoO1xuICAgICAgICAgIHkuZHJhZ0Zvcm0uYXBpLnN5bmMoeS5hY3RpdmVSdWxlKSwgaC5pbmRleE9mKFwiX19cIikgIT09IDAgJiYgKGggPT09IFwiZm9ybUNyZWF0ZUNoaWxkXCIgPyBkZWxldGUgeS5hY3RpdmVSdWxlLmNoaWxkcmVuWzBdIDogaC5pbmRleE9mKFwiZm9ybUNyZWF0ZVwiKSA9PT0gMCB8fCBoLmluZGV4T2YoXCI+XCIpID4gMCA/IChoLmluZGV4T2YoXCJmb3JtQ3JlYXRlXCIpIDwgMCAmJiAoaCA9IFwicHJvcHM+XCIgKyBoKSwgJChoLCAoeyBzb3VyY2U6IFEsIGZpZWxkOiBYIH0pID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSBRW1hdO1xuICAgICAgICAgIH0pKSA6IGRlbGV0ZSB5LmFjdGl2ZVJ1bGUucHJvcHNbaF0pLCBGLndhdGNoQWN0aXZlUnVsZSgpLCAoViA9IChJID0gKGogPSB5LmFjdGl2ZVJ1bGUuX21lbnUpID09IG51bGwgPyB2b2lkIDAgOiBqLndhdGNoKSA9PSBudWxsID8gdm9pZCAwIDogSVtXXSkgPT0gbnVsbCB8fCBWLmNhbGwoSSwge1xuICAgICAgICAgICAgZmllbGQ6IFcsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwLFxuICAgICAgICAgICAgYXBpOiBQLFxuICAgICAgICAgICAgcnVsZTogeS5hY3RpdmVSdWxlLFxuICAgICAgICAgICAgY3R4OiBkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwcm9wQ2hhbmdlKGgsIE4sIFAsIGopIHtcbiAgICAgICAgRi5oYW5kbGVDaGFuZ2UoXCJwcm9wc1wiLCBoLCBOLCBQLCBqKTtcbiAgICAgIH0sXG4gICAgICBoYW5kbGVDaGFuZ2UoaCwgTiwgUCwgaiwgSSkge1xuICAgICAgICB2YXIgViwgVywgUTtcbiAgICAgICAgaWYgKHkuYWN0aXZlUnVsZSAmJiBJW3kuYWN0aXZlUnVsZS5fZmNfaWRdID09PSB5LmFjdGl2ZVJ1bGUpIHtcbiAgICAgICAgICBGLnVuV2F0Y2hBY3RpdmVSdWxlKCk7XG4gICAgICAgICAgY29uc3QgWCA9IE47XG4gICAgICAgICAgTi5pbmRleE9mKFwiX19cIikgIT09IDAgJiYgKE4gPT09IFwiZm9ybUNyZWF0ZUNoaWxkXCIgPyB5LmFjdGl2ZVJ1bGUuY2hpbGRyZW5bMF0gPSBQIDogTi5pbmRleE9mKFwiZm9ybUNyZWF0ZVwiKSA9PT0gMCB8fCBOLmluZGV4T2YoXCI+XCIpID4gMCA/IChOLmluZGV4T2YoXCJmb3JtQ3JlYXRlXCIpIDwgMCAmJiAoTiA9IChoID8gaCArIFwiPlwiIDogXCJcIikgKyBOKSwgJChOLCAoeyBzb3VyY2U6IEosIGZpZWxkOiBaIH0pID0+IHtcbiAgICAgICAgICAgIHhpKFApID8gZGVsZXRlIEpbWl0gOiBKW1pdID0gUDtcbiAgICAgICAgICB9KSkgOiBoICYmIHhpKFApID8gZGVsZXRlIHkuYWN0aXZlUnVsZVtoXVtOXSA6IChoID8geS5hY3RpdmVSdWxlW2hdIDogeS5hY3RpdmVSdWxlKVtOXSA9IFApLCBGLndhdGNoQWN0aXZlUnVsZSgpLCAoUSA9IChXID0gKFYgPSB5LmFjdGl2ZVJ1bGUuX21lbnUpID09IG51bGwgPyB2b2lkIDAgOiBWLndhdGNoKSA9PSBudWxsID8gdm9pZCAwIDogV1tYXSkgPT0gbnVsbCB8fCBRLmNhbGwoVywge1xuICAgICAgICAgICAgZmllbGQ6IFgsXG4gICAgICAgICAgICB2YWx1ZTogUCxcbiAgICAgICAgICAgIGFwaTogSSxcbiAgICAgICAgICAgIHJ1bGU6IHkuYWN0aXZlUnVsZSxcbiAgICAgICAgICAgIGN0eDogZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdmFsaWRhdGVDaGFuZ2UoaCwgTiwgUCwgaikge1xuICAgICAgICAheS5hY3RpdmVSdWxlIHx8IHkudmFsaWRhdGVGb3JtLmFwaVt5LmFjdGl2ZVJ1bGUuX2ZjX2lkXSAhPT0geS5hY3RpdmVSdWxlIHx8IChGLmhhbmRsZUNoYW5nZShcIlwiLCBoLCBOLCBQLCBqKSwgeS5kcmFnRm9ybS5hcGkucmVmcmVzaFZhbGlkYXRlKCksIHkuZHJhZ0Zvcm0uYXBpLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICB5LmRyYWdGb3JtLmFwaS5jbGVhclZhbGlkYXRlU3RhdGUoeS5hY3RpdmVSdWxlLl9fZmNfXy5pZCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0sXG4gICAgICB0cmlnZ2VyQWN0aXZlKGgpIHtcbiAgICAgICAgbGV0IE47XG4gICAgICAgIGlmIChoLl9tZW51Lmluc2lkZSA/IE4gPSBoLmNoaWxkcmVuWzBdIDogTiA9IGguX19mY19fLnBhcmVudC5ydWxlLCBOICYmIE4udHlwZSA9PT0gXCJEcmFnVG9vbFwiKSB7XG4gICAgICAgICAgY29uc3QgUCA9IHkuZHJhZ0Zvcm0uYXBpLmVsKE4uX19mY19fLmlkKTtcbiAgICAgICAgICBQICYmIChjLmFjdGl2ZSA9IFAuaWQsIGQuZW1pdChcImFjdGl2ZVwiLCBoKSwgRi50b29sQWN0aXZlKGgpKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGN1c3RvbUZvcm1DaGFuZ2UoaCwgTikge1xuICAgICAgICB5LmN1c3RvbUZvcm0uY29uZmlnICYmIHkuY3VzdG9tRm9ybS5jb25maWcuY2hhbmdlKGgsIE4pO1xuICAgICAgfSxcbiAgICAgIGN1c3RvbUFjdGl2ZShoKSB7XG4gICAgICAgIHkuYmFzZUZvcm0uaXNTaG93ID0gITEsIHkucHJvcHNGb3JtLmlzU2hvdyA9ICExLCB5LmV2ZW50U2hvdyA9ICExLCB5LnZhbGlkYXRlRm9ybS5pc1Nob3cgPSAhMSwgeS5hY3RpdmVSdWxlID0gbnVsbCwgeS5jdXN0b21Gb3JtLmNvbmZpZyA9IGgsIHkuY3VzdG9tRm9ybS5pc1Nob3cgPSAhMCwgeS5jdXN0b21Gb3JtLnByb3BzU2hvdyA9IGgucHJvcHMgJiYgRi5nZXRDb25maWcoXCJzaG93UHJvcHNGb3JtXCIpICE9PSAhMSwgeS5jdXN0b21Gb3JtLmtleSA9IF9lKCksIHkuY3VzdG9tRm9ybS5ydWxlID0geS5jdXN0b21Gb3JtLnByb3BzU2hvdyA/IGgucHJvcHMoeyB0OiBDIH0pIDogW10sIHkuY3VzdG9tRm9ybS5vcHRpb25zLmZvcm1EYXRhID0gaC5mb3JtRGF0YSwgYXIoKCkgPT4ge1xuICAgICAgICAgIHkuYWN0aXZlVGFiID0gXCJwcm9wc1wiO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBnZXRQcm9wc1J1bGUoaCkge1xuICAgICAgICBsZXQgTiA9IE0oaC5fbWVudS5wcm9wcywgYi52YWx1ZSAmJiBiLnZhbHVlW2guX21lbnUubmFtZV0sIGgsIHtcbiAgICAgICAgICB0OiBDLFxuICAgICAgICAgIGFwaTogeS5kcmFnRm9ybS5hcGlcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChiLnZhbHVlICYmIGIudmFsdWUuZGVmYXVsdCkge1xuICAgICAgICAgIGNvbnN0IFAgPSBiLnZhbHVlLmRlZmF1bHQ7XG4gICAgICAgICAgTiA9IE0oKCkgPT4gTiwgZnQuRnVuY3Rpb24oUCkgPyB7XG4gICAgICAgICAgICBydWxlOiBQLFxuICAgICAgICAgICAgYXBwZW5kOiAhMFxuICAgICAgICAgIH0gOiBQLCBoLCB7XG4gICAgICAgICAgICB0OiBDLFxuICAgICAgICAgICAgYXBpOiB5LmRyYWdGb3JtLmFwaVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBOO1xuICAgICAgfSxcbiAgICAgIHRvb2xBY3RpdmUoaCkge1xuICAgICAgICBGLnVuV2F0Y2hBY3RpdmVSdWxlKCksIHkuY3VzdG9tRm9ybS5pc1Nob3cgPSAhMSwgeS5jdXN0b21Gb3JtLmNvbmZpZyA9IG51bGwsIHkuYWN0aXZlUnVsZSAmJiAoZGVsZXRlIHkucHJvcHNGb3JtLmFwaVt5LmFjdGl2ZVJ1bGUuX2ZjX2lkXSwgZGVsZXRlIHkuYmFzZUZvcm0uYXBpW3kuYWN0aXZlUnVsZS5fZmNfaWRdLCBkZWxldGUgeS52YWxpZGF0ZUZvcm0uYXBpW3kuYWN0aXZlUnVsZS5fZmNfaWRdLCBkZWxldGUgeS5kcmFnRm9ybS5hcGkuYWN0aXZlUnVsZSksIHkuYWN0aXZlUnVsZSA9IGgsIHkuZHJhZ0Zvcm0uYXBpLmFjdGl2ZVJ1bGUgPSBoLCBhcigoKSA9PiB7XG4gICAgICAgICAgeS5hY3RpdmVUYWIgPSBcInByb3BzXCIsIGFyKCgpID0+IHtcbiAgICAgICAgICAgIHkucHJvcHNGb3JtLmFwaVt5LmFjdGl2ZVJ1bGUuX2ZjX2lkXSA9IHkuYWN0aXZlUnVsZSwgeS5iYXNlRm9ybS5hcGlbeS5hY3RpdmVSdWxlLl9mY19pZF0gPSB5LmFjdGl2ZVJ1bGUsIHkudmFsaWRhdGVGb3JtLmFwaVt5LmFjdGl2ZVJ1bGUuX2ZjX2lkXSA9IHkuYWN0aXZlUnVsZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksIHkuY2FjaGVQcm9wc1toLl9mY19pZF0gfHwgKHkuY2FjaGVQcm9wc1toLl9mY19pZF0gPSBGLmdldFByb3BzUnVsZShoKSk7XG4gICAgICAgIGNvbnN0IE4gPSBoLl9tZW51LmhpZGRlbkJhc2VGaWVsZCB8fCBbXTtcbiAgICAgICAgeS5iYXNlRm9ybS5hcGkuaGlkZGVuKCExKSwgTi5sZW5ndGggJiYgeS5iYXNlRm9ybS5hcGkuaGlkZGVuKCEwLCBOKSwgdGhpcy5nZXRDb25maWcoXCJzaG93Q29udHJvbFwiLCAhMCkgfHwgeS5iYXNlRm9ybS5hcGkuaGlkZGVuKCEwLCBcIl9jb250cm9sXCIpO1xuICAgICAgICBjb25zdCBQID0gc28oaCwgXCJmaWVsZFwiKTtcbiAgICAgICAgeS5iYXNlRm9ybS5pc1Nob3cgPSBQICYmIGguaW5wdXQgIT09ICExICYmIEYuZ2V0Q29uZmlnKFwic2hvd0Jhc2VGb3JtXCIpICE9PSAhMSwgeS5wcm9wc0Zvcm0uaXNTaG93ID0geS5jYWNoZVByb3BzW2guX2ZjX2lkXS5sZW5ndGggPiAwICYmIEYuZ2V0Q29uZmlnKFwic2hvd1Byb3BzRm9ybVwiKSAhPT0gITEsIHkuZXZlbnRTaG93ID0gaC5fbWVudS5ldmVudCAmJiBoLl9tZW51LmV2ZW50Lmxlbmd0aCA+IDAgJiYgRi5nZXRDb25maWcoXCJzaG93RXZlbnRGb3JtXCIpICE9PSAhMSwgeS52YWxpZGF0ZUZvcm0uaXNTaG93ID0geS5iYXNlRm9ybS5pc1Nob3cgJiYgaC5fbWVudS52YWxpZGF0ZSAhPT0gITEgJiYgRi5nZXRDb25maWcoXCJzaG93VmFsaWRhdGVGb3JtXCIpICE9PSAhMSwgeS5wcm9wc0Zvcm0ucnVsZSA9IHkuY2FjaGVQcm9wc1toLl9mY19pZF0sIEYudXBkYXRlUnVsZUZvcm1EYXRhKCksIEYud2F0Y2hBY3RpdmVSdWxlKCk7XG4gICAgICB9LFxuICAgICAgZ2V0Q29uZmlnKGgsIE4pIHtcbiAgICAgICAgcmV0dXJuIHAudmFsdWUgJiYgc28ocC52YWx1ZSwgaCkgPyBwLnZhbHVlW2hdIDogTjtcbiAgICAgIH0sXG4gICAgICB1cGRhdGVSdWxlRm9ybURhdGEoKSB7XG4gICAgICAgIGNvbnN0IGggPSB5LmFjdGl2ZVJ1bGU7XG4gICAgICAgIGxldCBOID0ge1xuICAgICAgICAgIGZvcm1DcmVhdGVDaGlsZDogXCJcIiArIGguY2hpbGRyZW5bMF0sXG4gICAgICAgICAgXCJmb3JtQ3JlYXRlV3JhcD5sYWJlbFdpZHRoXCI6IFwiXCJcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgUCA9IHAudmFsdWUuYXBwZW5kQ29uZmlnRGF0YTtcbiAgICAgICAgZnQuRnVuY3Rpb24oUCkgPyBOID0geyAuLi5OLCAuLi5QKGgpIH0gOiBBcnJheS5pc0FycmF5KFApICYmIFAuZm9yRWFjaCgoSSkgPT4ge1xuICAgICAgICAgIE5bSV0gPSB2b2lkIDA7XG4gICAgICAgIH0pLCBPYmplY3Qua2V5cyhoKS5mb3JFYWNoKChJKSA9PiB7XG4gICAgICAgICAgW1wiZWZmZWN0XCIsIFwiY29uZmlnXCIsIFwicGF5bG9hZFwiLCBcImlkXCIsIFwidHlwZVwiLCBcIl9tZW51XCJdLmluZGV4T2YoSSkgPCAwICYmIChOW1wiZm9ybUNyZWF0ZVwiICsgU28oSSldID0gVnQoaFtJXSkpO1xuICAgICAgICB9KSwgT2JqZWN0LmtleXMoaC5wcm9wcykuZm9yRWFjaCgoSSkgPT4ge1xuICAgICAgICAgIGNvbnN0IFYgPSBoLnByb3BzW0ldO1xuICAgICAgICAgIE5bSV0gPSBWdChWKSwgZnQuT2JqZWN0KFYpICYmIE9iamVjdC5rZXlzKFYpLmZvckVhY2goKFcpID0+IHtcbiAgICAgICAgICAgIE5bSSArIFwiPlwiICsgV10gPSBWdChWW1ddKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksIFtcInByb3BzXCIsIFwiZWZmZWN0XCIsIFwiYXR0cnNcIiwgXCJzdHlsZVwiLCBcIndyYXBcIl0uZm9yRWFjaCgoSSkgPT4ge1xuICAgICAgICAgIGhbSV0gJiYgdHlwZW9mIGhbSV0gPT0gXCJvYmplY3RcIiAmJiBPYmplY3Qua2V5cyhoW0ldKS5mb3JFYWNoKChWKSA9PiB7XG4gICAgICAgICAgICBOW1wiZm9ybUNyZWF0ZVwiICsgU28oSSkgKyBcIj5cIiArIFZdID0gVnQoaFtJXVtWXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBqID0gaC5fbWVudS5hdHRycyB8fCB7fTtcbiAgICAgICAgT2JqZWN0LmtleXMoaikuZm9yRWFjaCgoSSkgPT4ge1xuICAgICAgICAgIE5bXCJfX1wiICsgSV0gPSBqW0ldKHsgcnVsZTogaCB9KTtcbiAgICAgICAgfSksIHkucHJvcHNGb3JtLnZhbHVlID0gTiwgeS5iYXNlRm9ybS5pc1Nob3cgJiYgKHkuYmFzZUZvcm0udmFsdWUgPSB7XG4gICAgICAgICAgZmllbGQ6IGguZmllbGQsXG4gICAgICAgICAgdGl0bGU6IGgudGl0bGUgfHwgXCJcIixcbiAgICAgICAgICBpbmZvOiBoLmluZm8sXG4gICAgICAgICAgX2NvbnRyb2w6IGguX2NvbnRyb2wsXG4gICAgICAgICAgLi4uTlxuICAgICAgICB9LCB5LnZhbGlkYXRlRm9ybS52YWx1ZSA9IHtcbiAgICAgICAgICB2YWxpZGF0ZTogaC52YWxpZGF0ZSA/IFsuLi5oLnZhbGlkYXRlXSA6IFtdLFxuICAgICAgICAgICRyZXF1aXJlZDogTi5mb3JtQ3JlYXRlJHJlcXVpcmVkXG4gICAgICAgIH0sIHkuZHJhZ0Zvcm0uYXBpLnJlZnJlc2hWYWxpZGF0ZSgpLCB5LmRyYWdGb3JtLmFwaS5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgeS5kcmFnRm9ybS5hcGkuY2xlYXJWYWxpZGF0ZVN0YXRlKGguX19mY19fLmlkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSxcbiAgICAgIGRyYWdTdGFydChoKSB7XG4gICAgICAgIHkubW92ZVJ1bGUgPSBoLCB5LmFkZGVkID0gITE7XG4gICAgICB9LFxuICAgICAgZHJhZ1VuY2hvb3NlKGgsIE4pIHtcbiAgICAgICAgeS5hZGRSdWxlID0ge1xuICAgICAgICAgIGNoaWxkcmVuOiBoLFxuICAgICAgICAgIG9sZEluZGV4OiBOLm9sZEluZGV4XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgY2xpY2tNZW51KGgpIHtcbiAgICAgICAgRi5kcmFnTWVudSh7IG1lbnU6IGgsIGNoaWxkcmVuOiB5LmNoaWxkcmVuLCBpbmRleDogeS5jaGlsZHJlbi5sZW5ndGggfSk7XG4gICAgICB9LFxuICAgICAgY2hlY2tPbmx5KGgpIHtcbiAgICAgICAgbGV0IE4gPSAhMTtcbiAgICAgICAgcmV0dXJuIHkuZHJhZ0Zvcm0uYXBpLmFsbCgpLmZvckVhY2goKFApID0+IHtcbiAgICAgICAgICBOID0gTiB8fCBQLl9mY190ZW1wbGF0ZSA9PT0gaC5uYW1lIHx8IFAuX21lbnUgJiYgUC5fbWVudS5uYW1lID09PSBoLm5hbWU7XG4gICAgICAgIH0pLCBOICYmIE1uKHkudChcInN0cnVjdC5vbmx5XCIsIHsgbGFiZWw6IEMoXCJjb20uXCIgKyBoLm5hbWUgKyBcIi5uYW1lXCIpIHx8IGgubGFiZWwgfSkpLCBOO1xuICAgICAgfSxcbiAgICAgIGRyYWdNZW51KHsgbWVudTogaCwgY2hpbGRyZW46IE4sIGluZGV4OiBQLCBzbG90OiBqIH0pIHtcbiAgICAgICAgaWYgKHkuaW5wdXRGb3JtLnN0YXRlIHx8IGgub25seSAmJiBGLmNoZWNrT25seShoKSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIEYuaGFuZGxlQWRkQmVmb3JlKCk7XG4gICAgICAgIGNvbnN0IEkgPSB5LmRyYWdSdWxlTGlzdFtoLm5hbWVdO1xuICAgICAgICBkLmVtaXQoXCJkcmFnXCIsIHtcbiAgICAgICAgICBpdGVtOiBoLFxuICAgICAgICAgIGRyYWdSdWxlOiBJXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBWID0gRi5tYWtlUnVsZSh5LmRyYWdSdWxlTGlzdFtJLm5hbWVdKTtcbiAgICAgICAgaiAmJiAoVi5zbG90ID0gaiksIE4uc3BsaWNlKFAsIDAsIFYpLCBGLmhhbmRsZUFkZEFmdGVyKHsgcnVsZTogViB9KTtcbiAgICAgIH0sXG4gICAgICByZXBsYWNlRmllbGQoaCkge1xuICAgICAgICBjb25zdCBOID0gW1wiYXJyYXlcIiwgXCJvYmplY3RcIl0uaW5kZXhPZihoLl9tZW51LnN1YkZvcm0pID4gLTE7XG4gICAgICAgIGxldCBQID0gRi5wYXJzZVJ1bGUoVnQoW2hdKSlbMF07XG4gICAgICAgIHJldHVybiBOICYmIChQLmZpZWxkID0gX2UoKSksIFAgPSBvdC50b0pzb24oUCksIE4gPyBQID0gRi5iYXRjaFJlcGxhY2VVbmkoUCkgOiBQID0gRi5iYXRjaFJlcGxhY2VGaWVsZChQKSwgRi5sb2FkUnVsZShbb3QucGFyc2VKc29uKFApXSlbMF07XG4gICAgICB9LFxuICAgICAgYmF0Y2hSZXBsYWNlRmllbGQoaCkge1xuICAgICAgICBjb25zdCBOID0gL1wiZmllbGRcIlxccyo6XFxzKlwiKFxcd1tcXHdcXGRdKylcIi9nO1xuICAgICAgICByZXR1cm4gaCA9IGgucmVwbGFjZShOLCAoUCwgaikgPT4gYFwiZmllbGRcIjpcIiR7X2UoKX1cImApLCBGLmJhdGNoUmVwbGFjZVVuaShoKTtcbiAgICAgIH0sXG4gICAgICBiYXRjaFJlcGxhY2VVbmkoaCkge1xuICAgICAgICBjb25zdCBOID0gL1wiX2ZjX2lkXCJcXHMqOlxccypcIihcXHdbXFx3XFxkXSspXCIvZztcbiAgICAgICAgcmV0dXJuIGggPSBoLnJlcGxhY2UoTiwgKCkgPT4gYFwiX2ZjX2lkXCI6XCJpZF8ke19lKCl9XCJgKSwgaDtcbiAgICAgIH0sXG4gICAgICBkcmFnQWRkKGgsIE4sIFApIHtcbiAgICAgICAgY29uc3QgaiA9IE4ubmV3SW5kZXgsIEkgPSBOLml0ZW0uX3VuZGVybHlpbmdfdm1fO1xuICAgICAgICBpZiAoSSAmJiBJLl9fZmNfXykge1xuICAgICAgICAgIGlmICh5LmFkZFJ1bGUpIHtcbiAgICAgICAgICAgIEYuaGFuZGxlU29ydEJlZm9yZSgpO1xuICAgICAgICAgICAgY29uc3QgViA9IHkuYWRkUnVsZS5jaGlsZHJlbi5zcGxpY2UoeS5hZGRSdWxlLmNoaWxkcmVuLmluZGV4T2YoSSksIDEpWzBdO1xuICAgICAgICAgICAgUCA/IFYuc2xvdCA9IFAgOiBkZWxldGUgVi5zbG90LCBoLnNwbGljZShqLCAwLCBWKSwgRi5oYW5kbGVTb3J0QWZ0ZXIoeyBydWxlOiBWIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgRi5kcmFnTWVudSh7IG1lbnU6IEksIGNoaWxkcmVuOiBoLCBpbmRleDogaiwgc2xvdDogUCB9KTtcbiAgICAgICAgeS5hZGRlZCA9ICEwO1xuICAgICAgfSxcbiAgICAgIGRyYWdFbmQoaCwgeyBuZXdJbmRleDogTiwgb2xkSW5kZXg6IFAgfSwgaikge1xuICAgICAgICBpZiAoIXkuYWRkZWQgJiYgISh5Lm1vdmVSdWxlID09PSBoICYmIE4gPT09IFApKSB7XG4gICAgICAgICAgRi5oYW5kbGVTb3J0QmVmb3JlKCk7XG4gICAgICAgICAgY29uc3QgSSA9IHkubW92ZVJ1bGUuc3BsaWNlKFAsIDEpO1xuICAgICAgICAgIGogJiYgKEkuc2xvdCA9IGopLCBoLnNwbGljZShOLCAwLCBJWzBdKSwgRi5oYW5kbGVTb3J0QWZ0ZXIoeyBydWxlOiBJWzBdIH0pO1xuICAgICAgICB9XG4gICAgICAgIHkubW92ZVJ1bGUgPSBudWxsLCB5LmFkZFJ1bGUgPSBudWxsLCB5LmFkZGVkID0gITE7XG4gICAgICB9LFxuICAgICAgZ2V0U2xvdENvbmZpZyhoLCBOLCBQKSB7XG4gICAgICAgIGxldCBqID0ge307XG4gICAgICAgIHJldHVybiAoaC5zbG90IHx8IFtdKS5mb3JFYWNoKChJKSA9PiB7XG4gICAgICAgICAgSS5uYW1lID09PSBOICYmIChqID0gSS5jb25maWcgfHwge30pO1xuICAgICAgICB9KSwgeyAuLi5QLCBkcmFnQnRuOiAhMSwgaGFuZGxlQnRuOiBQLmNoaWxkcmVuID8gW1wiYWRkQ2hpbGRcIl0gOiAhMSwgLi4uaiB9O1xuICAgICAgfSxcbiAgICAgIG1ha2VSdWxlKGgsIE4pIHtcbiAgICAgICAgY29uc3QgUCA9IE4gfHwgaC5ydWxlKHsgdDogQyB9KTtcbiAgICAgICAgUC5fbWVudSA9IFlyKGgpLCBQLl9mY19pZCB8fCAoUC5fZmNfaWQgPSBcImlkX1wiICsgX2UoKSksIFAubmFtZSB8fCAoUC5uYW1lID0gXCJyZWZfXCIgKyBfZSgpKSwgaC5jb21wb25lbnQgJiYgKFAuY29tcG9uZW50ID0gWXIoaC5jb21wb25lbnQpKSwgUC5fY29tcHV0ZWQgfHwgKFAuX2NvbXB1dGVkID0ge30pLCBQLmVmZmVjdCB8fCAoUC5lZmZlY3QgPSB7fSksIHNvKFAsIFwiZGlzcGxheVwiKSB8fCAoUC5kaXNwbGF5ID0gITApLCBzbyhQLCBcImhpZGRlblwiKSB8fCAoUC5oaWRkZW4gPSAhMSksIFAuX2ZjX2RyYWdfdGFnID0gaC5uYW1lO1xuICAgICAgICBsZXQgaiA9IGgub25seSA9PT0gITAsIEk7XG4gICAgICAgIGNvbnN0IFYgPSBQLmNoaWxkcmVuIHx8IFtdO1xuICAgICAgICBpZiAoaC5kcmFnICYmIChQLmNoaWxkcmVuID0gW0kgPSBGLm1ha2VEcmFnKGguZHJhZywgUC5fbWVudSA/IFAuX21lbnUubmFtZSA6IFAudHlwZSwgViwge1xuICAgICAgICAgIGVuZDogKFEsIFgpID0+IEYuZHJhZ0VuZChRLnNlbGYuY2hpbGRyZW4sIFgpLFxuICAgICAgICAgIGFkZDogKFEsIFgpID0+IEYuZHJhZ0FkZChRLnNlbGYuY2hpbGRyZW4sIFgpLFxuICAgICAgICAgIHN0YXJ0OiAoUSwgWCkgPT4gRi5kcmFnU3RhcnQoUS5zZWxmLmNoaWxkcmVuLCBYKSxcbiAgICAgICAgICB1bmNob29zZTogKFEsIFgpID0+IEYuZHJhZ1VuY2hvb3NlKFEuc2VsZi5jaGlsZHJlbiwgWClcbiAgICAgICAgfSldKSwgaC5jaGlsZHJlbiAmJiAhTiAmJiAhVi5sZW5ndGgpXG4gICAgICAgICAgZm9yIChsZXQgUSA9IDA7IFEgPCAoaC5jaGlsZHJlbkxlbiB8fCAxKTsgUSsrKSB7XG4gICAgICAgICAgICBjb25zdCBYID0gRi5tYWtlUnVsZSh5LmRyYWdSdWxlTGlzdFtoLmNoaWxkcmVuXSk7XG4gICAgICAgICAgICAoSSB8fCBQKS5jaGlsZHJlbi5wdXNoKFgpO1xuICAgICAgICAgIH1cbiAgICAgICAgY29uc3QgVyA9IGkudmFsdWUgIT09IHZvaWQgMCA/IGkudmFsdWUgIT09ICExIDogaC5tYXNrICE9PSAhMTtcbiAgICAgICAgcmV0dXJuIGgudG9vbCA9PT0gITEgPyBQIDogaC5pbnNpZGUgPyAoUC5jaGlsZHJlbiA9IEYubWFrZUNoaWxkcmVuKFt7XG4gICAgICAgICAgdHlwZTogXCJEcmFnVG9vbFwiLFxuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBkcmFnQnRuOiBoLmRyYWdCdG4gIT09ICExLFxuICAgICAgICAgICAgY2hpbGRyZW46IGguY2hpbGRyZW4sXG4gICAgICAgICAgICBtYXNrOiBXLFxuICAgICAgICAgICAgaGFuZGxlQnRuOiBoLmhhbmRsZUJ0bixcbiAgICAgICAgICAgIG9ubHk6IGpcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluamVjdDogITAsXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGRlbGV0ZTogKHsgc2VsZjogUSB9KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IFggPSBGLmdldFBhcmVudChRKS5wYXJlbnQ7XG4gICAgICAgICAgICAgIEYuaGFuZGxlUmVtb3ZlQmVmb3JlKHsgcGFyZW50OiBYLCBydWxlOiBYIH0pICE9PSAhMSAmJiAoWC5fX2ZjX18ucm0oKSwgZC5lbWl0KFwiZGVsZXRlXCIsIFgpLCB5LmFjdGl2ZVJ1bGUgPT09IFggJiYgRi5jbGVhckFjdGl2ZVJ1bGUoKSwgRi5oYW5kbGVSZW1vdmVBZnRlcih7IHJ1bGU6IFggfSkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNyZWF0ZTogKHsgc2VsZjogUSB9KSA9PiB7XG4gICAgICAgICAgICAgIEYuaGFuZGxlQWRkQmVmb3JlKCk7XG4gICAgICAgICAgICAgIGNvbnN0IFggPSBGLmdldFBhcmVudChRKTtcbiAgICAgICAgICAgICAgZC5lbWl0KFwiY3JlYXRlXCIsIFgucGFyZW50KTtcbiAgICAgICAgICAgICAgY29uc3QgSiA9IEYubWFrZVJ1bGUoWC5wYXJlbnQuX21lbnUpO1xuICAgICAgICAgICAgICBYLnBhcmVudC5zbG90ICYmIChKLnNsb3QgPSBYLnBhcmVudC5zbG90KSwgWC5yb290LmNoaWxkcmVuLnNwbGljZShYLnJvb3QuY2hpbGRyZW4uaW5kZXhPZihYLnBhcmVudCkgKyAxLCAwLCBKKSwgRi5oYW5kbGVBZGRBZnRlcih7IHJ1bGU6IFgucGFyZW50IH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFkZENoaWxkOiAoeyBzZWxmOiBRIH0pID0+IHtcbiAgICAgICAgICAgICAgRi5oYW5kbGVBZGRCZWZvcmUoKTtcbiAgICAgICAgICAgICAgY29uc3QgWCA9IEYuZ2V0UGFyZW50KFEpLCBKID0gWC5wYXJlbnQuX21lbnUsIFogPSB5LmRyYWdSdWxlTGlzdFtKLmNoaWxkcmVuXTtcbiAgICAgICAgICAgICAgaWYgKCFaKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgY29uc3QgZGUgPSBGLm1ha2VSdWxlKFopO1xuICAgICAgICAgICAgICAoSi5kcmFnID8gWC5wYXJlbnQuY2hpbGRyZW5bMF0gOiBYLnBhcmVudCkuY2hpbGRyZW5bMF0uY2hpbGRyZW4ucHVzaChkZSksIEYuaGFuZGxlQWRkQWZ0ZXIoeyBydWxlOiBkZSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3B5OiAoeyBzZWxmOiBRIH0pID0+IHtcbiAgICAgICAgICAgICAgRi5oYW5kbGVDb3B5QmVmb3JlKCk7XG4gICAgICAgICAgICAgIGNvbnN0IFggPSBGLmdldFBhcmVudChRKTtcbiAgICAgICAgICAgICAgZC5lbWl0KFwiY29weVwiLCBYLnBhcmVudCk7XG4gICAgICAgICAgICAgIGNvbnN0IEogPSBGLnJlcGxhY2VGaWVsZChYLnBhcmVudCk7XG4gICAgICAgICAgICAgIFgucm9vdC5jaGlsZHJlbi5zcGxpY2UoWC5yb290LmNoaWxkcmVuLmluZGV4T2YoWC5wYXJlbnQpICsgMSwgMCwgSiksIEYuaGFuZGxlQ29weUFmdGVyKHsgcnVsZTogWC5wYXJlbnQgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWN0aXZlOiAoeyBzZWxmOiBRIH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgWCA9IEYuZ2V0UGFyZW50KFEpO1xuICAgICAgICAgICAgICBkLmVtaXQoXCJhY3RpdmVcIiwgWC5wYXJlbnQpLCBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBGLnRvb2xBY3RpdmUoWC5wYXJlbnQpO1xuICAgICAgICAgICAgICB9LCAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGlsZHJlbjogUC5jaGlsZHJlblxuICAgICAgICB9XSksIFApIDoge1xuICAgICAgICAgIHR5cGU6IFwiRHJhZ1Rvb2xcIixcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgZHJhZ0J0bjogaC5kcmFnQnRuICE9PSAhMSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBoLmNoaWxkcmVuLFxuICAgICAgICAgICAgbWFzazogVyxcbiAgICAgICAgICAgIGhhbmRsZUJ0bjogaC5oYW5kbGVCdG4sXG4gICAgICAgICAgICBvbmx5OiBqXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbmplY3Q6ICEwLFxuICAgICAgICAgIGRpc3BsYXk6ICEhUC5kaXNwbGF5LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBkZWxldGU6ICh7IHNlbGY6IFEgfSkgPT4ge1xuICAgICAgICAgICAgICBGLmhhbmRsZVJlbW92ZUJlZm9yZSh7IHBhcmVudDogUSwgcnVsZTogUS5jaGlsZHJlblswXSB9KSAhPT0gITEgJiYgKGQuZW1pdChcImRlbGV0ZVwiLCBRLmNoaWxkcmVuWzBdKSwgUS5fX2ZjX18ucm0oKSwgeS5hY3RpdmVSdWxlID09PSBRLmNoaWxkcmVuWzBdICYmIEYuY2xlYXJBY3RpdmVSdWxlKCksIEYuaGFuZGxlUmVtb3ZlQWZ0ZXIoeyBydWxlOiBRLmNoaWxkcmVuWzBdIH0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjcmVhdGU6ICh7IHNlbGY6IFEgfSkgPT4ge1xuICAgICAgICAgICAgICBGLmhhbmRsZUFkZEJlZm9yZSgpLCBkLmVtaXQoXCJjcmVhdGVcIiwgUS5jaGlsZHJlblswXSk7XG4gICAgICAgICAgICAgIGNvbnN0IFggPSBGLmdldFBhcmVudChRKSwgSiA9IEYubWFrZVJ1bGUoUS5jaGlsZHJlblswXS5fbWVudSk7XG4gICAgICAgICAgICAgIFgucGFyZW50LnNsb3QgJiYgKEouc2xvdCA9IFgucGFyZW50LnNsb3QpLCBYLnJvb3QuY2hpbGRyZW4uc3BsaWNlKFgucm9vdC5jaGlsZHJlbi5pbmRleE9mKFgucGFyZW50KSArIDEsIDAsIEopLCBGLmhhbmRsZUFkZEFmdGVyKHsgcnVsZTogSiB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZGRDaGlsZDogKHsgc2VsZjogUSB9KSA9PiB7XG4gICAgICAgICAgICAgIEYuaGFuZGxlQWRkQmVmb3JlKCk7XG4gICAgICAgICAgICAgIGNvbnN0IFggPSBRLmNoaWxkcmVuWzBdLl9tZW51LCBKID0geS5kcmFnUnVsZUxpc3RbWC5jaGlsZHJlbl07XG4gICAgICAgICAgICAgIGlmICghSilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIGNvbnN0IFogPSBGLm1ha2VSdWxlKEopO1xuICAgICAgICAgICAgICAoWC5kcmFnID8gUS5jaGlsZHJlblswXSA6IFEpLmNoaWxkcmVuWzBdLmNoaWxkcmVuLnB1c2goWiksIEYuaGFuZGxlQWRkQWZ0ZXIoeyBydWxlOiBaIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvcHk6ICh7IHNlbGY6IFEgfSkgPT4ge1xuICAgICAgICAgICAgICBGLmhhbmRsZUNvcHlCZWZvcmUoKSwgZC5lbWl0KFwiY29weVwiLCBRLmNoaWxkcmVuWzBdKTtcbiAgICAgICAgICAgICAgY29uc3QgWCA9IEYuZ2V0UGFyZW50KFEpLCBKID0gRi5yZXBsYWNlRmllbGQoUS5jaGlsZHJlblswXSk7XG4gICAgICAgICAgICAgIFEuc2xvdCAmJiAoSi5zbG90ID0gUS5zbG90KSwgWC5yb290LmNoaWxkcmVuLnNwbGljZShYLnJvb3QuY2hpbGRyZW4uaW5kZXhPZihYLnBhcmVudCkgKyAxLCAwLCBKKSwgRi5oYW5kbGVDb3B5QWZ0ZXIoeyBydWxlOiBRLmNoaWxkcmVuWzBdIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjdGl2ZTogKHsgc2VsZjogUSB9KSA9PiB7XG4gICAgICAgICAgICAgIGQuZW1pdChcImFjdGl2ZVwiLCBRLmNoaWxkcmVuWzBdKSwgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgRi50b29sQWN0aXZlKFEuY2hpbGRyZW5bMF0pO1xuICAgICAgICAgICAgICB9LCAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGlsZHJlbjogRi5tYWtlQ2hpbGRyZW4oW1BdKVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHRvb2xIYW5kbGUoaCwgTikge1xuICAgICAgICBpZiAoIWguX2ZjX2RyYWdfdGFnIHx8IGguX21lbnUudG9vbCA9PT0gITEpIHtcbiAgICAgICAgICBoLl9fZmNfXy5ybSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgUDtcbiAgICAgICAgaC5fbWVudS5pbnNpZGUgPyBQID0gaC5jaGlsZHJlblswXS5fX2ZjX18uZXhwb3J0RWwgOiBQID0gaC5fX2ZjX18ucGFyZW50LmV4cG9ydEVsLCBQLiRlbWl0KE4pO1xuICAgICAgfSxcbiAgICAgIGhhbmRsZUFkZEJlZm9yZSgpIHtcbiAgICAgIH0sXG4gICAgICBoYW5kbGVSZW1vdmVCZWZvcmUoKSB7XG4gICAgICB9LFxuICAgICAgaGFuZGxlQ29weUJlZm9yZSgpIHtcbiAgICAgIH0sXG4gICAgICBoYW5kbGVTb3J0QmVmb3JlKCkge1xuICAgICAgfSxcbiAgICAgIGFkZE9wZXJhdGlvblJlY29yZCgpIHtcbiAgICAgICAgY29uc3QgaCA9IEYuZ2V0SnNvbigpLCBOID0gVnQoeS5pbnB1dEZvcm0uZGF0YSksIFAgPSB5Lm9wZXJhdGlvbi5saXN0LnNsaWNlKDAsIHkub3BlcmF0aW9uLmlkeCArIDEpO1xuICAgICAgICBQLnB1c2goeyBydWxlOiBoLCBmb3JtRGF0YTogTiB9KSwgeS5vcGVyYXRpb24ubGlzdCA9IFAsIHkub3BlcmF0aW9uLmlkeCA9IFAubGVuZ3RoIC0gMSwgeS51bmxvYWRTdGF0dXMgPSBQLmxlbmd0aCAhPT0gMTtcbiAgICAgIH0sXG4gICAgICBwcmV2T3BlcmF0aW9uUmVjb3JkKCkge1xuICAgICAgICBpZiAoIXkub3BlcmF0aW9uLmxpc3RbeS5vcGVyYXRpb24uaWR4IC0gMV0pXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBoID0geS5vcGVyYXRpb24ubGlzdFstLXkub3BlcmF0aW9uLmlkeF07XG4gICAgICAgIEYudXNlT3BlcmF0aW9uUmVjb3JkKGgpLCBGLmNsZWFyQWN0aXZlUnVsZSgpO1xuICAgICAgfSxcbiAgICAgIG5leHRPcGVyYXRpb25SZWNvcmQoKSB7XG4gICAgICAgIGlmICgheS5vcGVyYXRpb24ubGlzdFt5Lm9wZXJhdGlvbi5pZHggKyAxXSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGggPSB5Lm9wZXJhdGlvbi5saXN0WysreS5vcGVyYXRpb24uaWR4XTtcbiAgICAgICAgRi51c2VPcGVyYXRpb25SZWNvcmQoaCksIEYuY2xlYXJBY3RpdmVSdWxlKCk7XG4gICAgICB9LFxuICAgICAgdXNlT3BlcmF0aW9uUmVjb3JkKGgpIHtcbiAgICAgICAgeS5pbnB1dEZvcm0uZGF0YSA9IGguZm9ybURhdGEsIEYuc2V0UnVsZShoLnJ1bGUpO1xuICAgICAgfSxcbiAgICAgIGhhbmRsZUFkZEFmdGVyKCkge1xuICAgICAgICBGLmFkZE9wZXJhdGlvblJlY29yZCgpLCBGLnVwZGF0ZVRyZWUoKTtcbiAgICAgIH0sXG4gICAgICBoYW5kbGVSZW1vdmVBZnRlcigpIHtcbiAgICAgICAgRi5hZGRPcGVyYXRpb25SZWNvcmQoKSwgRi51cGRhdGVUcmVlKCk7XG4gICAgICB9LFxuICAgICAgaGFuZGxlQ29weUFmdGVyKCkge1xuICAgICAgICBGLmFkZE9wZXJhdGlvblJlY29yZCgpLCBGLnVwZGF0ZVRyZWUoKTtcbiAgICAgIH0sXG4gICAgICBoYW5kbGVTb3J0QWZ0ZXIoKSB7XG4gICAgICAgIEYuYWRkT3BlcmF0aW9uUmVjb3JkKCksIEYudXBkYXRlVHJlZSgpO1xuICAgICAgfSxcbiAgICAgIHRyZWVDaGFuZ2UoaCkge1xuICAgICAgICBGLnRyaWdnZXJBY3RpdmUoaC5ydWxlKTtcbiAgICAgIH0sXG4gICAgICBnZXRGb3JtRGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBYZihGLmdldERlc2NyaXB0aW9uKCkpO1xuICAgICAgfSxcbiAgICAgIGdldERlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gSmYoeS5kcmFnRm9ybS5ydWxlWzBdLmNoaWxkcmVuKTtcbiAgICAgIH0sXG4gICAgICBnZXRTdWJGb3JtRGVzY3JpcHRpb24oaCkge1xuICAgICAgICBsZXQgTiA9IGguX19mY19fICYmIGguX19mY19fLnBhcmVudDtcbiAgICAgICAgZm9yICg7IE47ICkge1xuICAgICAgICAgIGlmIChOLnJ1bGUuX21lbnUgJiYgW1wiYXJyYXlcIiwgXCJvYmplY3RcIl0uaW5kZXhPZihOLnJ1bGUuX21lbnUuc3ViRm9ybSkgPiAtMSlcbiAgICAgICAgICAgIHJldHVybiBYZihKZihOLnJ1bGUuY2hpbGRyZW4pKTtcbiAgICAgICAgICBOID0gTi5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgICAgZ2V0U3ViRm9ybUNoaWxkcmVuKGgpIHtcbiAgICAgICAgbGV0IE4gPSBoLl9fZmNfXyAmJiBoLl9fZmNfXy5wYXJlbnQ7XG4gICAgICAgIGZvciAoOyBOOyApIHtcbiAgICAgICAgICBpZiAoTi5ydWxlLl9tZW51ICYmIFtcImFycmF5XCIsIFwib2JqZWN0XCJdLmluZGV4T2YoTi5ydWxlLl9tZW51LnN1YkZvcm0pID4gLTEpXG4gICAgICAgICAgICByZXR1cm4gTi5ydWxlLmNoaWxkcmVuIHx8IFtdO1xuICAgICAgICAgIE4gPSBOLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG4gICAgICB1cGRhdGVUcmVlOiBPZyhmdW5jdGlvbigpIHtcbiAgICAgICAgYXIoKCkgPT4ge1xuICAgICAgICAgIHkudHJlZUluZm8gPSBUcyh5LmRyYWdGb3JtLnJ1bGVbMF0uY2hpbGRyZW4pO1xuICAgICAgICB9KTtcbiAgICAgIH0sIDMwMCksXG4gICAgICBmaW5kVHJlZShoKSB7XG4gICAgICAgIGxldCBOO1xuICAgICAgICBjb25zdCBQID0gKGopID0+IHtcbiAgICAgICAgICBqLmZvckVhY2goKEkpID0+IHtcbiAgICAgICAgICAgIEkucnVsZS5maWVsZCA9PT0gaCA/IE4gPSBJLmNoaWxkcmVuIDogSS5jaGlsZHJlbiAmJiBQKEkuY2hpbGRyZW4pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gUCh5LnRyZWVJbmZvKSwgTiB8fCBbXTtcbiAgICAgIH0sXG4gICAgICBoYW5kbGVEcmFnZW50ZXIoaCkge1xuICAgICAgICB5LmJ1cy4kZW1pdChcImRyYWdlbnRlclwiLCBoKTtcbiAgICAgIH0sXG4gICAgICBoYW5kbGVEcmFnbGVhdmUoaCkge1xuICAgICAgICB5LmJ1cy4kZW1pdChcImRyYWdsZWF2ZVwiLCBoKTtcbiAgICAgIH0sXG4gICAgICBoYW5kbGVEcm9wKGgpIHtcbiAgICAgICAgeS5idXMuJGVtaXQoXCJkcm9wXCIsIGgpO1xuICAgICAgfSxcbiAgICAgIGNoYW5nZUV2ZW50KGgpIHtcbiAgICAgICAgeS5hY3RpdmVSdWxlLl9vbiA9IGg7XG4gICAgICB9LFxuICAgICAgdHJpZ2dlckhhbmRsZShoKSB7XG4gICAgICAgIGguaGFuZGxlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB5LmRyYWdGb3JtLnJ1bGUgPSBGLm1ha2VEcmFnUnVsZShGLm1ha2VDaGlsZHJlbih5LmNoaWxkcmVuKSksIEYuc2V0T3B0aW9uKHt9KSwgRi5hZGRDb21wb25lbnQoZm0pO1xuICAgIGNvbnN0IGsgPSBZbigoKSA9PiBPYmplY3Qua2V5cyh5LmlucHV0Rm9ybS5kYXRhKS5sZW5ndGggPiAwKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uamYoeSksXG4gICAgICAuLi5GLFxuICAgICAgZHJhZ0hlaWdodDogVCxcbiAgICAgIHQ6IEMsXG4gICAgICBoYW5kbGU6IHMsXG4gICAgICBpbnB1dENoZWNrU3RhdHVzOiBrLFxuICAgICAgZmllbGRSZWFkb25seTogbSxcbiAgICAgIGhpZGRlbk1lbnU6IHgsXG4gICAgICBoaWRkZW5JdGVtOiBSLFxuICAgICAgaGlkZGVuRHJhZ01lbnU6IHcsXG4gICAgICBoaWRkZW5EcmFnQnRuOiBBXG4gICAgfTtcbiAgfSxcbiAgY3JlYXRlZCgpIHtcbiAgICBkb2N1bWVudC5ib2R5Lm9uZHJvcCA9IChyKSA9PiB7XG4gICAgICByLnByZXZlbnREZWZhdWx0KCksIHIuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSwgd2luZG93Lm9uYmVmb3JldW5sb2FkID0gKHIpID0+IHtcbiAgICAgIHRoaXMudW5sb2FkU3RhdHVzICYmIChyLnJldHVyblZhbHVlID0gdGhpcy50KFwiZGVzaWduZXIudW5sb2FkXCIpKTtcbiAgICB9O1xuICB9XG59KSwgb3kgPSBbXCJvbkNsaWNrXCJdLCBheSA9IFtcIm9uQ2xpY2tcIl0sIGx5ID0geyBjbGFzczogXCJfZmMtbC1pY29uXCIgfSwgc3kgPSB7IGNsYXNzOiBcIl9mYy1sLW5hbWVcIiB9LCB1eSA9IHsgY2xhc3M6IFwiX2ZjLXRyZWUtbGFiZWxcIiB9LCBmeSA9IC8qIEBfX1BVUkVfXyAqLyBoZShcImlcIiwgeyBjbGFzczogXCJmYy1pY29uIGljb24tbW9yZVwiIH0sIG51bGwsIC0xKSwgZHkgPSB7IGNsYXNzOiBcIl9mYy1tLXRvb2xzLWxcIiB9LCBjeSA9IC8qIEBfX1BVUkVfXyAqLyBoZShcInBhdGhcIiwge1xuICBkOiBcIk0xNS4wNCA3ODMuMzZoOTg2Ljg4djQ5LjI4SDE1LjA0ek0xNjMuMiAxOTEuMzZoNjkwLjg4YzI3LjIgMCA0OS4yOCAyMi4wOCA0OS4yOCA0OS4yOHY1NDIuNzJIMTEzLjkyVjI0MC42NGMwLTI3LjIgMjIuMDgtNDkuMjggNDkuMjgtNDkuMjh6XCIsXG4gIGZpbGw6IFwiIzdGN0Y3RlwiXG59LCBudWxsLCAtMSksIHB5ID0gLyogQF9fUFVSRV9fICovIGhlKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE2My4yIDI0MC42NGg2OTAuODh2NDkzLjQ0SDE2My4yelwiLFxuICBmaWxsOiBcIiNFNUU1RTVcIlxufSwgbnVsbCwgLTEpLCBoeSA9IFtcbiAgY3ksXG4gIHB5XG5dLCB2eSA9IHtcbiAga2V5OiAxLFxuICBjbGFzczogXCJpY29uXCIsXG4gIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG59LCBteSA9IC8qIEBfX1BVUkVfXyAqLyBoZShcInBhdGhcIiwge1xuICBkOiBcIk0xNS4wNCA3ODMuMzZoOTg2Ljg4djQ5LjI4SDE1LjA0ek0xNjMuMiAxOTEuMzZoNjkwLjg4YzI3LjIgMCA0OS4yOCAyMi4wOCA0OS4yOCA0OS4yOHY1NDIuNzJIMTEzLjkyVjI0MC42NGMwLTI3LjIgMjIuMDgtNDkuMjggNDkuMjgtNDkuMjh6XCIsXG4gIGZpbGw6IFwiIzJFNzNGRlwiXG59LCBudWxsLCAtMSksIGd5ID0gLyogQF9fUFVSRV9fICovIGhlKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE2My4yIDI0MC42NGg2OTAuODh2NDkzLjQ0SDE2My4yelwiLFxuICBmaWxsOiBcIiNFMEVBRkZcIlxufSwgbnVsbCwgLTEpLCB5eSA9IFtcbiAgbXksXG4gIGd5XG5dLCBBeSA9IC8qIEBfX1BVUkVfXyAqLyBoZShcInBhdGhcIiwge1xuICBkOiBcIk0yMTcuMjggMjkuNzZoNTg5LjQ0YzI5LjQ0IDAgNTMuNDQgMjQgNTMuNDQgNTMuNDR2ODU3LjI4YzAgMjkuNDQtMjQgNTMuNDQtNTMuNDQgNTMuNDRIMjE3LjI4Yy0yOS40NCAwLTUzLjQ0LTI0LTUzLjQ0LTUzLjQ0VjgzLjUyYzAtMjkuNzYgMjQtNTMuNzYgNTMuNDQtNTMuNzZ6XCIsXG4gIGZpbGw6IFwiIzdGN0Y3RlwiXG59LCBudWxsLCAtMSksIGJ5ID0gLyogQF9fUFVSRV9fICovIGhlKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTIxNy4yOCAxMzYuOTZoNTg5LjQ0djc1MC4wOEgyMTcuMjh6XCIsXG4gIGZpbGw6IFwiI0U1RTVFNVwiXG59LCBudWxsLCAtMSksIEN5ID0gW1xuICBBeSxcbiAgYnlcbl0sIEV5ID0ge1xuICBrZXk6IDMsXG4gIGNsYXNzOiBcImljb25cIixcbiAgdmlld0JveDogXCIwIDAgMTAyNCAxMDI0XCJcbn0sIFN5ID0gLyogQF9fUFVSRV9fICovIGhlKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTIxNy4yOCAyOS43Nmg1ODkuNDRjMjkuNDQgMCA1My40NCAyNCA1My40NCA1My40NHY4NTcuMjhjMCAyOS40NC0yNCA1My40NC01My40NCA1My40NEgyMTcuMjhjLTI5LjQ0IDAtNTMuNDQtMjQtNTMuNDQtNTMuNDRWODMuNTJjMC0yOS43NiAyNC01My43NiA1My40NC01My43NnpcIixcbiAgZmlsbDogXCIjMkU3M0ZGXCJcbn0sIG51bGwsIC0xKSwgeHkgPSAvKiBAX19QVVJFX18gKi8gaGUoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjE3LjI4IDEzNi45Nmg1ODkuNDR2NzUwLjA4SDIxNy4yOHpcIixcbiAgZmlsbDogXCIjRTBFQUZGXCJcbn0sIG51bGwsIC0xKSwgd3kgPSBbXG4gIFN5LFxuICB4eVxuXSwgVHkgPSAvKiBAX19QVVJFX18gKi8gaGUoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjcxLjY4IDMxLjA0aDQ4MC45NmMyOS40NCAwIDUzLjQ0IDI0IDUzLjQ0IDUzLjQ0djg1NC43MmMwIDI5LjQ0LTI0IDUzLjQ0LTUzLjQ0IDUzLjQ0SDI3MS42OGMtMjkuNDQgMC01My40NC0yNC01My40NC01My40NFY4NC40OGMwLTI5LjQ0IDIzLjY4LTUzLjQ0IDUzLjQ0LTUzLjQ0elwiLFxuICBmaWxsOiBcIiM3RjdGN0ZcIlxufSwgbnVsbCwgLTEpLCBEeSA9IC8qIEBfX1BVUkVfXyAqLyBoZShcInBhdGhcIiwge1xuICBkOiBcIk0yNzEuNjggMTM3LjkyaDQ4MC45NnY3NDcuODRIMjcxLjY4elwiLFxuICBmaWxsOiBcIiNFNUU1RTVcIlxufSwgbnVsbCwgLTEpLCBSeSA9IFtcbiAgVHksXG4gIER5XG5dLCBNeSA9IHtcbiAga2V5OiA1LFxuICBjbGFzczogXCJpY29uXCIsXG4gIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG59LCBJeSA9IC8qIEBfX1BVUkVfXyAqLyBoZShcInBhdGhcIiwge1xuICBkOiBcIk0yNzEuNjggMzEuMDRoNDgwLjk2YzI5LjQ0IDAgNTMuNDQgMjQgNTMuNDQgNTMuNDR2ODU0LjcyYzAgMjkuNDQtMjQgNTMuNDQtNTMuNDQgNTMuNDRIMjcxLjY4Yy0yOS40NCAwLTUzLjQ0LTI0LTUzLjQ0LTUzLjQ0Vjg0LjQ4YzAtMjkuNDQgMjMuNjgtNTMuNDQgNTMuNDQtNTMuNDR6XCIsXG4gIGZpbGw6IFwiIzJFNzNGRlwiXG59LCBudWxsLCAtMSksIE55ID0gLyogQF9fUFVSRV9fICovIGhlKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTI3MS42OCAxMzcuOTJoNDgwLjk2djc0Ny44NEgyNzEuNjh6XCIsXG4gIGZpbGw6IFwiI0UwRUFGRlwiXG59LCBudWxsLCAtMSksIE95ID0gW1xuICBJeSxcbiAgTnlcbl0sIFB5ID0gLyogQF9fUFVSRV9fICovIGhlKFwiZGl2XCIsIHsgY2xhc3M6IFwibGluZVwiIH0sIG51bGwsIC0xKSwgRnkgPSB7IGNsYXNzOiBcIl9mYy1tLXRvb2xzLXJcIiB9LCBMeSA9IC8qIEBfX1BVUkVfXyAqLyBoZShcImlcIiwgeyBjbGFzczogXCJmYy1pY29uIGljb24tc2F2ZS1vbmxpbmVcIiB9LCBudWxsLCAtMSksIEJ5ID0gLyogQF9fUFVSRV9fICovIGhlKFwiaVwiLCB7IGNsYXNzOiBcImZjLWljb24gaWNvbi1wcmV2aWV3XCIgfSwgbnVsbCwgLTEpLCBIeSA9IC8qIEBfX1BVUkVfXyAqLyBoZShcImlcIiwgeyBjbGFzczogXCJmYy1pY29uIGljb24tZGVsZXRlXCIgfSwgbnVsbCwgLTEpLCAkeSA9IC8qIEBfX1BVUkVfXyAqLyBoZShcImlcIiwgeyBjbGFzczogXCJmYy1pY29uIGljb24tbW9yZVwiIH0sIG51bGwsIC0xKSwga3kgPSAvKiBAX19QVVJFX18gKi8gaGUoXCJkaXZcIiwgeyBjbGFzczogXCJsaW5lXCIgfSwgbnVsbCwgLTEpLCBqeSA9IHsgY2xhc3M6IFwiX2ZkLWlucHV0LWJ0blwiIH0sIFV5ID0ge1xuICBrZXk6IDAsXG4gIGNsYXNzOiBcImZjLWljb24gaWNvbi1jaGVja1wiXG59LCB6eSA9IHtcbiAga2V5OiAwLFxuICBjbGFzczogXCJfZmMtbS1pbnB1dFwiXG59LCBWeSA9IHtcbiAga2V5OiAwLFxuICBjbGFzczogXCJfZmMtbS1pbnB1dC1oYW5kbGVcIlxufSwgV3kgPSB7IGNsYXNzOiBcIl9mYy1yLXRpdGxlXCIgfSwgR3kgPSB7IGNsYXNzOiBcIl9mYy1yLXRpdGxlXCIgfSwgUXkgPSB7XG4gIGtleTogMSxcbiAgY2xhc3M6IFwiX2ZkLXByZXZpZXctY29kZVwiXG59LCBZeSA9IFtcImlubmVySFRNTFwiXTtcbmZ1bmN0aW9uIEt5KHIsIGYsIG8sIGksIHQsIHMpIHtcbiAgY29uc3QgZCA9IGJlKFwiZWwtaGVhZGVyXCIpLCBjID0gYmUoXCJmY0RyYWdnYWJsZVwiKSwgcCA9IGJlKFwiZWwtbWFpblwiKSwgdiA9IGJlKFwiZWwtZHJvcGRvd24taXRlbVwiKSwgYiA9IGJlKFwiZWwtZHJvcGRvd24tbWVudVwiKSwgUyA9IGJlKFwiZWwtZHJvcGRvd25cIiksIEQgPSBiZShcImVsLXRyZWVcIiksIFQgPSBiZShcImVsLWNvbnRhaW5lclwiKSwgbSA9IGJlKFwiZWwtYXNpZGVcIiksIHggPSBiZShcImVsLWJ1dHRvblwiKSwgUiA9IGJlKFwiZWwtcG9wY29uZmlybVwiKSwgdyA9IGJlKFwiZWwtc3dpdGNoXCIpLCBBID0gYmUoXCJWaWV3Rm9ybVwiKSwgRSA9IGJlKFwiRHJhZ0Zvcm1cIiksIEMgPSBiZShcImVsLXRhZ1wiKSwgTSA9IGJlKFwiZWwtaW5wdXRcIiksIHkgPSBiZShcImVsLWRpdmlkZXJcIiksIEIgPSBiZShcIkV2ZW50Q29uZmlnXCIpLCAkID0gYmUoXCJlbC10YWItcGFuZVwiKSwgRiA9IGJlKFwiZWwtdGFic1wiKSwgayA9IGJlKFwiZWwtZGlhbG9nXCIpO1xuICByZXR1cm4gZmUoKSwgS2UoVCwge1xuICAgIGNsYXNzOiBcIl9mYy1kZXNpZ25lclwiLFxuICAgIHN0eWxlOiBDbyhyLmhlaWdodCA/IGBoZWlnaHQ6JHtyLmRyYWdIZWlnaHR9O2ZsZXg6MDtgIDogXCJcIiksXG4gICAgb25EcmFnZW50ZXI6IHIuaGFuZGxlRHJhZ2VudGVyLFxuICAgIG9uRHJhZ2xlYXZlOiByLmhhbmRsZURyYWdsZWF2ZSxcbiAgICBvbkRyb3A6IHIuaGFuZGxlRHJvcFxuICB9LCB7XG4gICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgdWUocCwgbnVsbCwge1xuICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgKGZlKCksIEtlKFQsIHtcbiAgICAgICAgICAgIHN0eWxlOiB7IGhlaWdodDogXCIxMDAlXCIgfSxcbiAgICAgICAgICAgIGtleTogci5sb2NhbGUgJiYgci5sb2NhbGUubmFtZVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgdWUobSwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBcIl9mYy1sXCIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IFwiMjY2cHhcIlxuICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgdWUoVCwgeyBzdHlsZTogeyBoZWlnaHQ6IFwiMTAwJVwiIH0gfSwge1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgdWUoZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjQwcHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIl9mYy1sLXRhYnNcIlxuICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGUoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBDbihbXCJfZmMtbC10YWJcIiwgeyBhY3RpdmU6IHIuYWN0aXZlTWVudVRhYiA9PT0gXCJtZW51XCIgfV0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IGZbMF0gfHwgKGZbMF0gPSAoaCkgPT4gci5hY3RpdmVNZW51VGFiID0gXCJtZW51XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIEllKHIudChcIm1lbnUuY29tcG9uZW50XCIpKSwgMyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogQ24oW1wiX2ZjLWwtdGFiXCIsIHsgYWN0aXZlOiByLmFjdGl2ZU1lbnVUYWIgPT09IFwidHJlZVwiIH1dKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBmWzFdIHx8IChmWzFdID0gKGgpID0+IHIuYWN0aXZlTWVudVRhYiA9IFwidHJlZVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBJZShyLnQoXCJtZW51LnRyZWVcIikpLCAzKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgZ2kodWUocCwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAoZmUoITApLCB4ZShodCwgbnVsbCwgaG4oci5tZW51TGlzdCwgKGgsIE4pID0+IChmZSgpLCB4ZShodCwgbnVsbCwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuaGlkZGVuTWVudS5pbmRleE9mKGgubmFtZSkgPT09IC0xID8gKGZlKCksIHhlKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIl9mYy1sLWdyb3VwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IE5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcImg0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiX2ZjLWwtdGl0bGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKFApID0+IGguaGlkZGVuID0gIWguaGlkZGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlKEllKHIudChcIm1lbnUuXCIgKyBoLm5hbWUpIHx8IGgudGl0bGUpICsgXCIgXCIsIDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBDbihbXCJmYy1pY29uIGljb24tYXJyb3dcIiwgeyBkb3duOiAhaC5oaWRkZW4gfV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLCA4LCBveSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaSh1ZShjLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiB7IG5hbWU6IFwiZGVmYXVsdFwiLCBwdWxsOiBcImNsb25lXCIsIHB1dDogITEgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogITEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1LZXk6IFwibmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJfZmMtbC1saXN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Q6IGgubGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiByZSgoeyBlbGVtZW50OiBQIH0pID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmhpZGRlbkl0ZW0uaW5kZXhPZihQLm5hbWUpID09PSAtMSA/IChmZSgpLCB4ZShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJfZmMtbC1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoaikgPT4gci5jbGlja01lbnUoUClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcImRpdlwiLCBseSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBDbihbXCJmYy1pY29uXCIsIFAuaWNvbiB8fCBcImljb24taW5wdXRcIl0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlKFwic3BhblwiLCBzeSwgSWUoci50KFwiY29tLlwiICsgUC5uYW1lICsgXCIubmFtZVwiKSB8fCBQLmxhYmVsKSwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLCA4LCBheSkpIDogamUoXCJcIiwgITApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDMyLCBbXCJsaXN0XCJdKSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeWksICFoLmhpZGRlbl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkpIDogamUoXCJcIiwgITApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0sIDY0KSkpLCAyNTYpKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgICAgICAgfSwgNTEyKSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgW3lpLCByLmFjdGl2ZU1lbnVUYWIgPT09IFwibWVudVwiXVxuICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgIHIuYWN0aXZlTWVudVRhYiA9PT0gXCJ0cmVlXCIgPyAoZmUoKSwgS2UocCwgeyBrZXk6IDAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB1ZShELCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiBcInRyZWVSZWZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiByLnRyZWVJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdC1leHBhbmQtYWxsXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJleHBhbmQtb24tY2xpY2stbm9kZVwiOiAhMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkN1cnJlbnRDaGFuZ2U6IHIudHJlZUNoYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKHsgbm9kZTogaCwgZGF0YTogTiB9KSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBDbihbXCJfZmMtdHJlZS1ub2RlXCIsIHsgYWN0aXZlOiByLmFjdGl2ZVJ1bGUgPT09IE4ucnVsZSB9XSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGUoXCJkaXZcIiwgdXksIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IENuKFtcImZjLWljb25cIiwgTi5ydWxlLl9tZW51ICYmIE4ucnVsZS5fbWVudS5pY29uIHx8IFwiaWNvbi1jZWxsXCJdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlKFwic3BhblwiLCBudWxsLCBJZSgoTi5ydWxlLnRpdGxlIHx8IFwiXCIpLnRyaW0oKSB8fCBOLnJ1bGUucHJvcHMgJiYgTi5ydWxlLnByb3BzLmxhYmVsIHx8IHIudChcImNvbS5cIiArIChOLnJ1bGUuX21lbnUgJiYgTi5ydWxlLl9tZW51Lm5hbWUpICsgXCIubmFtZVwiKSB8fCBOLnJ1bGUudHlwZSksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOLnNsb3QgPyBqZShcIlwiLCAhMCkgOiAoZmUoKSwgeGUoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJfZmMtdHJlZS1tb3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogZlsyXSB8fCAoZlsyXSA9IEhuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbXCJzdG9wXCJdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVlKFMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXI6IFwiY2xpY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcGRvd246IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWUoYiwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE4ucnVsZS5fZmNfZHJhZ190YWcgIT09IFwiX1wiID8gKGZlKCksIEtlKHYsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKFApID0+IHIudG9vbEhhbmRsZShOLnJ1bGUsIFwiY29weVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGUoSWUoci50KFwicHJvcHMuY29weVwiKSksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDMyLCBbXCJvbkNsaWNrXCJdKSkgOiBqZShcIlwiLCAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOLnJ1bGUuX21lbnUgJiYgTi5ydWxlLl9tZW51LmNoaWxkcmVuICYmIE4ucnVsZS5fZmNfZHJhZ190YWcgIT09IFwiX1wiID8gKGZlKCksIEtlKHYsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKFApID0+IHIudG9vbEhhbmRsZShOLnJ1bGUsIFwiYWRkQ2hpbGRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlKEllKHIudChcImZvcm0uYXBwZW5kQ2hpbGRcIikpLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzogMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAzMiwgW1wib25DbGlja1wiXSkpIDogamUoXCJcIiwgITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWUodiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoUCkgPT4gci50b29sSGFuZGxlKE4ucnVsZSwgXCJkZWxldGVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlKEllKHIudChcInByb3BzLmRlbGV0ZVwiKSksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDMyLCBbXCJvbkNsaWNrXCJdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAyNClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAyNClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLCAyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgOCwgW1wiZGF0YVwiLCBcIm9uQ3VycmVudENoYW5nZVwiXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgICAgICAgICAgIH0pKSA6IGplKFwiXCIsICEwKVxuICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB1ZShULCB7IGNsYXNzOiBcIl9mYy1tXCIgfSwge1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgIHVlKGQsIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiX2ZjLW0tdG9vbHNcIixcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjQ1XCJcbiAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgIGhlKFwiZGl2XCIsIGR5LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICByLmlucHV0Rm9ybS5zdGF0ZSA/IGplKFwiXCIsICEwKSA6IChmZSgpLCB4ZShodCwgeyBrZXk6IDAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICByLmdldENvbmZpZyhcInNob3dEZXZpY2VcIikgIT09ICExID8gKGZlKCksIHhlKGh0LCB7IGtleTogMCB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgci5kZXZpY2UgIT09IFwicGNcIiA/IChmZSgpLCB4ZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBmWzNdIHx8IChmWzNdID0gKGgpID0+IHIuZGV2aWNlID0gXCJwY1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcImljb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgaHkpKSA6IGplKFwiXCIsICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmRldmljZSA9PT0gXCJwY1wiID8gKGZlKCksIHhlKFwic3ZnXCIsIHZ5LCB5eSkpIDogamUoXCJcIiwgITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuZGV2aWNlICE9PSBcInBhZFwiID8gKGZlKCksIHhlKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IGZbNF0gfHwgKGZbNF0gPSAoaCkgPT4gci5kZXZpY2UgPSBcInBhZFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcImljb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgQ3kpKSA6IGplKFwiXCIsICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmRldmljZSA9PT0gXCJwYWRcIiA/IChmZSgpLCB4ZShcInN2Z1wiLCBFeSwgd3kpKSA6IGplKFwiXCIsICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmRldmljZSAhPT0gXCJtb2JpbGVcIiA/IChmZSgpLCB4ZShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBmWzVdIHx8IChmWzVdID0gKGgpID0+IHIuZGV2aWNlID0gXCJtb2JpbGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJpY29uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAxMDI0IDEwMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIFJ5KSkgOiBqZShcIlwiLCAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgci5kZXZpY2UgPT09IFwibW9iaWxlXCIgPyAoZmUoKSwgeGUoXCJzdmdcIiwgTXksIE95KSkgOiBqZShcIlwiLCAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSwgNjQpKSA6IGplKFwiXCIsICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGUoXCJkaXZcIiwgbnVsbCwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogQ24oW1wiZmMtaWNvbiBpY29uLXByZS1zdGVwXCIsIHsgZGlzYWJsZWQ6ICFyLm9wZXJhdGlvbi5saXN0W3Iub3BlcmF0aW9uLmlkeCAtIDFdIH1dKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IGZbNl0gfHwgKGZbNl0gPSAoLi4uaCkgPT4gci5wcmV2T3BlcmF0aW9uUmVjb3JkICYmIHIucHJldk9wZXJhdGlvblJlY29yZCguLi5oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IENuKFtcImZjLWljb24gaWNvbi1uZXh0LXN0ZXBcIiwgeyBkaXNhYmxlZDogIXIub3BlcmF0aW9uLmxpc3Rbci5vcGVyYXRpb24uaWR4ICsgMV0gfV0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogZls3XSB8fCAoZls3XSA9ICguLi5oKSA9PiByLm5leHRPcGVyYXRpb25SZWNvcmQgJiYgci5uZXh0T3BlcmF0aW9uUmVjb3JkKC4uLmgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdLCA2NCkpXG4gICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgaGUoXCJkaXZcIiwgRnksIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuaW5wdXRGb3JtLnN0YXRlID8gamUoXCJcIiwgITApIDogKGZlKCksIHhlKGh0LCB7IGtleTogMCB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNyKHIuJHNsb3RzLCBcImhhbmRsZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgci5nZXRDb25maWcoXCJzaG93U2F2ZUJ0blwiLCAhMSkgPyAoZmUoKSwgS2UoeCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogci5oYW5kbGVTYXZlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlKFwiIFwiICsgSWUoci50KFwicHJvcHMuc2F2ZVwiKSksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCA4LCBbXCJvbkNsaWNrXCJdKSkgOiBqZShcIlwiLCAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVlKHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInByaW1hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogci5vcGVuUHJldmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZShcIiBcIiArIEllKHIudChcInByb3BzLnByZXZpZXdcIikpLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgOCwgW1wib25DbGlja1wiXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVlKFIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogci50KFwiZGVzaWduZXIuY2xlYXJXYXJuXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjIwMHB4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb25maXJtLWJ1dHRvbi10ZXh0XCI6IHIudChcInByb3BzLmNsZWFyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2FuY2VsLWJ1dHRvbi10ZXh0XCI6IHIudChcInByb3BzLmNhbmNlbFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06IHIuY2xlYXJEcmFnUnVsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZSh4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZGFuZ2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlKEllKHIudChcInByb3BzLmNsZWFyXCIpKSwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCA4LCBbXCJ0aXRsZVwiLCBcImNvbmZpcm0tYnV0dG9uLXRleHRcIiwgXCJjYW5jZWwtYnV0dG9uLXRleHRcIiwgXCJvbkNvbmZpcm1cIl0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByLmhhbmRsZSAmJiByLmhhbmRsZS5sZW5ndGggPyAoZmUoKSwgS2UoUywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyOiBcImNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duOiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZShiLCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmUoITApLCB4ZShodCwgbnVsbCwgaG4oci5oYW5kbGUsIChoKSA9PiAoZmUoKSwgS2Uodiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogSG4oKE4pID0+IHIudHJpZ2dlckhhbmRsZShoKSwgW1wic3RvcFwiXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlKFwiZGl2XCIsIG51bGwsIEllKGgubGFiZWwpLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAzMiwgW1wib25DbGlja1wiXSkpKSwgMjU2KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWUoeCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJfZmQtbS1leHRlbmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW46IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkgOiBqZShcIlwiLCAhMClcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sIDY0KSksXG4gICAgICAgICAgICAgICAgICAgICAgICBreSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlKFwiZGl2XCIsIGp5LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHIuaW5wdXRDaGVja1N0YXR1cyA/IChmZSgpLCB4ZShcImlcIiwgVXkpKSA6IGplKFwiXCIsICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGUoXCJzcGFuXCIsIG51bGwsIEllKHIudChcInByb3BzLmlucHV0RGF0YVwiKSkgKyBcIlxcdUZGMUFcIiwgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVlKHcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtb2RlbC12YWx1ZVwiOiByLmlucHV0Rm9ybS5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlubGluZS1wcm9tcHRcIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogci5vcGVuSW5wdXREYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDgsIFtcIm1vZGVsLXZhbHVlXCIsIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgIF86IDNcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgdWUocCwgeyBjbGFzczogXCJfZmMtbS1jb25cIiB9LCB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAoZmUoKSwgeGUoXCJhXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogci5hY3RpdmVSdWxlID8gci5hY3RpdmVSdWxlLl9mY19pZCA6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyBcImJhY2tncm91bmQtaW1hZ2VcIjogXCJ1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFVQUFBQUFpQ0FZQUFBQXUyd0JQQUFBQkcybFVXSFJZVFV3NlkyOXRMbUZrYjJKbExuaHRjQUFBQUFBQVBEOTRjR0ZqYTJWMElHSmxaMmx1UFNMdnU3OGlJR2xrUFNKWE5VMHdUWEJEWldocFNIcHlaVk42VGxSamVtdGpPV1FpUHo0S1BIZzZlRzF3YldWMFlTQjRiV3h1Y3pwNFBTSmhaRzlpWlRwdWN6cHRaWFJoTHlJZ2VEcDRiWEIwYXowaVdFMVFJRU52Y21VZ05pNHdMakFpUGdvZ1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNEtJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWk4K0NpQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdvOFAzaHdZV05yWlhRZ1pXNWtQU0p5SWo4K2wxdnBDZ0FBQUFGelVrZENBSzdPSE9rQUFBQUVjMEpKVkFnSUNBaDhDR1NJQUFBUW9FbEVRVlI0bk8xZFczS2JTQmYrdXNHTTMzNWxCUU1qS1ZWNmltWUZJNi9BemdvaXIyQ2NGZGhlZ1pNVlJGNUJuQlZZczRJNFQxUUpNTXdLd3J3NUdMci9CNTNHUndoZExUdVpERjlWS2dqNmNycjc5T2x6QXdNTkdqUm8wS0JCZ3dZTkdqUm8wS0JCZ3dZTkdqVDRtU0hpT1A0TW9MK0R0ZzQ4enhzRFFCekgxd0FHcXlvb3BjN2I3ZmJaRHZwdTBLQkJnNDBoaTZKNHY0TjJicGp3RzJBTjRRY0FVc3FySGZUZG9FR0RCbHRCV3BZMWZtd2pTcWxQN0hxd1pyV3g1M2szaisyN1FZTUdEYmFGN1hsZUVzZnhDTUNRM1I4RFNOWnRSRXI1amwzL3lSNGwxQllBdUpqVkRCdnRyMEdEQnQ4Vk5nRGtlWDVwMi9iUTNDeUs0ckxUNll3MmJZek0zeGE3ZFZ6eEN4cWtBQzYzYUw5MWQzZlhXbGFtMStzbG03YmJZRG5DTUJ4cXJWMEE2SGE3Wit2VWllTzRsZWY1Q1FBSUlXNDZuYzUzUGZCODMzYzNLZjh6OFpIdisrN2UzbDdmc3F4ZjZWWjZkM2YzMTg4MHhtMWhBMEMzMngzSGNaeGdxcVhCc3F3M0FFWmJ0SGZLcmxNbS9GcVkxZjVHbnVlbFc3Ui82RGpPVXJxaUtJSVFZcXlVMmtxSU42akZHeW5sZ0s3UDFxbHdkM2ZYY2h6SDhNTUkzMW5qZHh6bkdzVGZheUFCNEQwWk1jOEVFbndmaEJBREFGQktsYzhjeDhIdDdlMjRLSXJ6YnJjNy9rNGtiZ1Z6bU8xQ2dFdDJ6UmwwRU1leHUwbERWU0dubEhyUHJrOHF4VC9oQ2FHMUhnZ2hQa1JSOU9FcCsyblE0RWRGRUFSbmp1UEVSdmpWUVdzOWtGSmVCMEZ3OW55VWJZL0paTktQb3VpajR6aXhiZHZ1THRxMDJmVjdBS1dnS29waWdBMjBRS1hVaVpRUDhsUktPV2JYM0M5WWFvYVB4RWdwTldORzI3YjlhNTduSHZYWEFqQU13L0N2UmhOc3dLR1VPdmplTkR3bGdpQVlTQ201TlRaU1NsM2F0bjBEVExWejI3YUhacDlJS1UvRE1FeCs5SDBpaERnQ2NMVExOa3NCU01HUU1VaUxzeXpySW83ajB3WDFBQUI1bmg4YjlWbEtlY2dlalN0cE1hWGZqbXVHajRGUzZ1OUZxbnNRQkdNcHBmRTVibXZPTi9oSjhXOHorVFpCSE1jdHBWUnArV2l0ajJzRVd3cmdiREtaWEZtVzlSa0FoQkNuK0EvdUU2NEJvaWlLUzh1eUJ2U3poZG1BUmhXcE9WRkl5UEZrYW01T3YrR1ZlTVQ0cWREdGRzZFJGS1VBV2tLSTJpVHZNQXlQaEJCL2FLMzdRb2dVUUtLVStsVGRIRUVRREd6Yi9oVUE2aHpIWVJnZVdaYjF2NklvL3FrNituM2ZkL2YzOS84QWdEelBad1EyK1djR1FvaERyWFZMQ0pGSUtXOEFYRmI5bytSZU9BU0ErL3Y3TDN0N2UwbWU1ME1oeEtFUUlzbXk3SnpUNWZ1KzZ6ak9uM2p3ZWFWS3FjdFZHejhNd3lITmlTdUVTTmFwc3dtb2ZYTlExdElVeDNISkw1N24xUWJLVnEzSlU0Q3RGNStmdi9NOEg5WDF6Mm4wUE8rUytPME5BR2l0UDNVNm5kR0NNb2VZN3J1WitTRmVPbVJwWmttV1plK3JmUmRGTVJCQ3VQUnp0RXlyZS9ueTVVMFVSU05NTTBEY0lBZ0dwait6RG9hditkb3BwZDVYZWJsQ1c3cUlsem1velZkYTZ6NEFMTm9EWnA2VVVxOVk5VUVjeCtYYzhYWTVQYXYyMW93QTdIUTZvemlPTDdCYzhNRk1RcnZkTm8xeDdhK004TkxHNVNycmVNdmd4elpJVVNQRVNUaVVEbkVoUlBsTVNubHllM3M3RmtLOE5uUUtJVnh6b3RxMmZRNFdCS0RUOXFOU0NpUkVad1NnNHppblNxa2gxUjJhKzVQSnBHOVoxc2NxRGVTa1BndkQ4QzFuWEFvb2pBREFzcXgzU3FrakthVnJudHUyZlFsS1d3cUM0S3hpL3BpeERXOXZiOGZmdm4wN3JtNmFSWE1pcFJ3R1FYQmViV3NiUkZGMEFlWmk0VFR4K2FaTk5LU3gxR3I1VXNxUFNxa1dnSFIvZi8vSmd4VmtVbjdBL1B6QWNaelRJQWplZHJ2ZG1ZTmRDSEZxQkVJUUJDK0VFQmZzV1FwZ1ZDbmprUlpXUWtvNWpLTG9YWlpsN3gzSHVWWkt1Znk1NHpqRE1BeVArY0hMRGhoVVhVUjFrRksremZQOEVnRHlQRTlZM1JGZGpxTW9Pc1JzbXR3WFVIcWI0VGNlWUtINkFIQXltVXhldjN6NWNpYmZkOWtlckt2SDU0blJ6ZnNzeHhrRXdZbVU4c0k4cSt5dE9YcG1CQ0RoQ3ZNNWdYTXdiM0dRa0pzcHo0VGNHekFCdEtPM1RsYUNCSk5MUDVQS2ZSNE52RkZLZlpKUy9nL1RNYlMwMWdNQUh3RWNBTUQ5L2YzWWNSd0FnQkRpRDk0UG5iYm1aNHVmb0FRai9GTlE0TWYzZmRleXJHczh6TXVWVXVxTGxQSlhLdDhTUW53SXd6QmRrRG95eElJRHFpSmtFcEJBRmtMMHRkWURyZldBR0s4VUdqVnpraWlsTG1sT3FyNmtiVEVFQUszMVdHdjlWM1crdGRZWEFJNkI2YWFWVWc0QlFFcjVCaFgrQzRKZ2dJZnhiNXROc0RaSStQRVVMck5lNVJpa2xCZEJFTFFXcFFpdE00ZFVKZ0V3RmtLNHhJY0FjT0k0emhEVE1WOEJTTXg2WXNvckY3N3YzN0JEemRSTDE5SGVhZjRXbGlNTGFsRDNqRFJXTTdZVXdKam01aFdtdk94YWxuWHQrLzd2L05EbHdzL3dCQUJZbHZVSGpjc2xCY0VqR2xLYUc2N1FwUFN2U3M4RnUzVzFpcDQ1QWJoRlR1Q01rTU0wbUdMQXRiOTBGMitkTEFQbG52VzVENFNmZ25tZW56RE42VjI3M1g3TDZwNVR2U090OVNBTXcyR24weG4xZXIwa0RNT3hFR0lnaEJqRWNkeGkydUdNUUxSdCt4V0ltU2hVMzZKeU42Yk9MNy84OGtGcjNTTGFEaXFteExsaERscklPZ0hZd2xSSUhac1RlMzkvUHlYQllJVGZUWlpscnpuVG1aTVJnR3ZHUm8vZTRFSDRqZHJ0OWpHZlR6TW5OWFJzQktYVU9SY1FOTitmcWU5aEVBU1gzVzUzVE82THhOejNmWC9Hdk9jQk5mNEcwaWFJb2tndmV5NmxIQnF6aWpRL0FQUCtOTi8zMzV2MWtsS2UrcjVmYXc0RGFDbWx6dk04SDlVOEF3QUlJY2EvL2ZaYkdaeGg2MlhxejJpWmxPRXdCT0R1N2UwTjhPQy80d0ppRjJnQlNMVFc1NVpsWFprODNJcXZNYzJ5YkViSWtaWHpHWUJKaHpxbWVtK1ljdkt1MCttVWU3QTZMcU5RdE52dDE4Q3NkYU9VZXMzM3pyYjA4RFFZQUtXRHVLeElPWUhMTUNQa1dQQ2plbkxzOUxTV1VwNUdVYVQ1UDZYVVZ6cXRYU3FXMkxaZDk1WktLcVdjTWUwOHowdXpMQ3NYUXdqQkk5ZWxFS1hvdUlFWis0aWVsWE94djc5L3lPcWNBOU5GTUNlN0VHSmNQYUY3dlY3Q2ZLUXVDYlVxMGl6TERycmQ3cmpYNnlXOVhpL3hQQy9sUVNpbDFOdnFScVROazFUSHByVXVhWlpTempCamRVNGVnYlNxSFhtZWx5cWxTbUhMNmRkYWwydERteHZBYktwVjNmenRHalQvcnVtdnFnajBlcjJFMDBwKzF6cTg2M2E3WjJhOTZvUmtudWN6ODJ6Yk51OHJxWnJZL0dBWFFuRGYySzRGSUpSU3g1MU9aK1I1WHNyb043NUtLS1htZkpGa1pwb0RmRWhyQndDZnNpenpsRklIV1piTldZUmE2L0pRSTRWaVhheER6NmhLVDUwSmpLSW96aTNMTXRKMEVNZXg2M2xlVWkxSHVZSUQ4N3VTKzNmRTAyTHd4TGwvTlJoUmNDQUZwc0lIek95c0U4WmMyd1BRTjlwZXhRdytCSEJGR3A0TElDMks0cjFsV1VPdUlUTEJVZ2FMOXZiMlhuRmZTVjMrbFZMS1pPdlBhSlFNVnd1MERDN0lEaGNJVDRNK285T1VTOWFZazIweHFydHAyL2FObVEvakNBZG0zUTZZamVLWDFvWVFZdXZFYW1OaUw4TGQzZDFmZERrdzk0UVFvN3F5bG1WZEdjMkRqNkhTMzBvL2F0VlA1bmxlR2tXUitUbTNMbHByZnEvT0piTFNqNzhta3JxRGh2dmtwSlN2Nm5oWkNOSFNlcXBzNTNuZXg0TjdMQVdRVENhVGZoekhmK1o1L29KY1FDRHozOVI1c1M2UlNxbHk3cGZRNDFicHFSV0FOYVpxcVRKV09oMVdjdi9xdEMyQXBjWHNFRmQxWDVQSjgveHYyN1p2cXB0WkNGRXloRkxxNzBXTmtyOEJ3RFQ0QUNDdENJRUJNTlh3S1BoeFE5RzBHd0I5TTdGc001VENsbklVQVpSSnFJTmxBK1NMdWc3dERDZVZ3MmNPOS9mM2JoekhDUk5BeWFLeWZFNjJnVkxxbjdyN3RNbFRUSDFacnJuZjYvVVNFNTBVUWd4ODMzZEoyK0krMVkxZnBXVDlybFhYYkVwZ3lsY0wycW9kUTdYTUZtU1dxQWc3QUVCUkZLbGxXWFhGYnpETnlLaWxaWXUra3dXUHVJQTlrbExPdVVtTXNBR21PYnJtbWdkQmxGTGd2TXJyYklpdDZLa1ZnSlFUZUlVSHJXSlFWNjVHeUtWQTdUdkJXNS9XaTZDVSt0SnV0N2ZhQk9UQTNoU1htTTZENi91K2E0UVQwMFJ1QVBSSit3SWUxUEZGTkY0cHBiNHM2MUFJY2JQcytTSW9wVlpxSEVWUnBDOWZ2dVJheGtKUUtzRTJwQUJZT2QrMW1nb1BoamlPOHlmNURBZjArTG15Q2RidFkrZG01eU9RZ0ZMU2FvSnljK0JCbnFxZmRnT01WaDNNNWpuNTR1YUNnTFp0eDBDcEpEdzI4TFkyUGJVQ0VDaHpBbzBBckRyT1Z3bTVtWGVDOFlqVGVsZkk4enhoWnBXN3BPaUEvays1cWNuTk12SkxIVkc3WDRDcDcwSUlNYVQ2UnVNcHpWOWdUcUFsV3pKYkxiVFdpZEZBdE5aWFZaTnFDUkpNZ3k2MTVoc3dOUjBlU1Y1dC9jb0hDbWJvclFSRGpzRDgwcnRLcGw4RnJmVVhJL2dYdUNPTWE4VWdlUTY2bG9INDhBaW9qNkpYWVZuV0tkT01scGF0SU9GOWRydmR0WlFjeTdMTVcxcTFTZG9VSk5tQWpCTGw0YU8xL3F2YjdZNFdGMzNBUWp1SlVqQVM4N3NtR0ZJcjVNaTV5Sm5pT1hQL0ZvS0VXVUkvaitxK0RzSlRMS3JhRjVsZ1kzcDJTdVhLVkFQbU51Z3poLzZNci9IKy9wNjNXUnRaamFMb3dnUjFWdmp4cXVCTzhibTI0emh1UlZIMGxkcit6QjRadWx0MS9mRkF3Q05RTzk4ODI0Qy9PbW5BQWd5dVV1cU1ybXQ5VWsrQisvdjdzcCthOTlrQmxCc2FRUDBZbmhza1VCTDZPVnoybmk5OTVXY0FiQjVVNGhGNG5udkljWHQ3ZTIxNG1RVkJCaFZhWjZDMUhxNUx3eTdvV2U0b21qMFJ5ZzhrMUFnNUh1RmRsaGJ6WFZHSjJGM3pEUitHNFZCSytkSDhOcEhiQ295UWNlbi84dFNqZ01LWWZ2YUJlZk9YaFBESXRCRkYwVWZHR0FpQzRBUXNsV1VUaHFUTm1nTFRDSGtRQkNlbWJUTFpTN09EMDVWbFdUbE9LZVVIUGllVHlhVFAwMEFlQThkeFBuSWhTUE5kUnVWUll5WHdNZFhSL3RSWXRsNXhITGRJdUF6cGVZSWZ3TklCQUsxMUdWR1dVcDdlM3Q1ZXgzSDhaaktaOUNlVFNUOE13Nk1vaWo0SUljcTBrVy9mdnMzNStKZWhraTB5aktMb2d2TmJFQVJuTE1CV3lnZnVVK1M4NXZ1K0cwWFJCMVpuRHJadGYyWGpPZ3lDWUdCNHFrTFAwVEo2aEJDbFVyWktBRmFGZ0pHc1ZTSEhJN3hjKzlqVmh3OTJnazZuTTJMK01WZEtlVTFhMFZkaUJyUEozdFlKSDY0UkFQTW52bVZaM0F5WU1YOVpuYmRnQzZXVSttbzBNNWIzbFdaWjlucVRzWkdHeXROS0xremJqdVBFZURpd1JqeWxvdGZySll2bWhQS21YRHpldDVVQzZEdU9FMGRSRkZmblcydjlkbEVFR2hYL01VOXJlZzdRZXBsMU5Pc1ZVOHFWc1lLU29paGUvd2lXRGpDMTNvZ1hqTkFaS0tWR2xtVjl0aXpyc3hEaUk1amdMb3JpWUp2WENiTXNPOEFETDU5d2Z1TnpVMG12S2c4SjRyWFBVUlI5Smg0ZFlva2I0ZTd1anN1WkV5bmxOZnZrMnRyMENDSEt2YlZVQUZMcXk1aDNTdjl6SVpjcytuc2d6K1dyMlFUZGJ2ZE1LZlVXczVxRkVlYUoxdnAxTmVmS2dKdkJoSm5VSHVNUEpOU20ybERPM3U4a2RHYTBHOEtvbXNTNUxqcWR6cFZTNmtBSXdXa3N4NmFtZjRScTdxUmZOaWRFNTZPQ1dGTEtNekJOQ3BYNVhwWm96OThlNGlmM2M0SFc2NkN5WGk0ck1zcXk3R0FEbit1em9OUHBqTElzK3gzVHRWczBaNCtpdmRmckpWbVdMZUszc24yK1pxU0VjRjdyMDc4VXdMdWlLQlllL0hSWWN3WGkwZlNzRE8yRllUaGtPWUZRU3AzektJMWlmOW1OM2lQbXZwSVhQOHFwV0FjeThWeXRkWnJuZVcyQzZsTWlqdVBXL2YyOXU3ZTM5MnBSK3M2Mk1GOEJCcVpwRk91YTA1UEpwUDhVOUFEVDhSWkZNZEJhcDFycmRKMk5WOG4rUDNndS8xOGR6SHA5VDU3WkZvYlhnYzM0WVYyWXQ3QW85eTlkeFR2Vjh0K0xucFVDa096b3IwdUt2UEE4TDZWeU1SNGs3dGp6dklNbDlSbzBXSWtvaXI2Q0FrN3RkbnZ0eE5nR0RkYkJLaCtnU2VJY0xYak1UWkkrbmpqM3I4Ri9DendxL3lPNlV4cjgrN0ZTQUFMVER5VFUzYTk4M2VXSHkvMXI4TytHWlZrbFR6MTM4S1BCZndOckNjRHFCeElJNWRkZGR2aEhqeG8wQUZDbTdvQ0NUZzAvTlhnU0xId1RwQXA2TldubTd3eXdqMWhXM3oxOTdnOGZOUGpKUU1HRnhvZmNvRUdEQmcwYU5HalFvRUdESGVMLzhER3hQd1VDay9vQUFBQUFTVVZPUks1Q1lJST0pICFpbXBvcnRhbnRcIiwgXCJiYWNrZ3JvdW5kLXJlcGVhdFwiOiBcIm5vLXJlcGVhdCAhaW1wb3J0YW50XCIsIFwiYmFja2dyb3VuZC1zaXplXCI6IFwiY292ZXIgIWltcG9ydGFudFwiLCBcImJhY2tncm91bmQtcG9zaXRpb25cIjogXCJjZW50ZXIgIWltcG9ydGFudFwiLCBwb3NpdGlvbjogXCJhYnNvbHV0ZSAhaW1wb3J0YW50XCIsIG92ZXJmbG93OiBcImhpZGRlbiAhaW1wb3J0YW50XCIsIGxlZnQ6IFwiNTAlICFpbXBvcnRhbnRcIiwgd2lkdGg6IFwiMTYwcHghaW1wb3J0YW50XCIsIHJpZ2h0OiBcIjAgIWltcG9ydGFudFwiLCB0b3A6IFwiYXV0byAhaW1wb3J0YW50XCIsIGJvdHRvbTogXCI5cHggIWltcG9ydGFudFwiLCBkaXNwbGF5OiBcImJsb2NrICFpbXBvcnRhbnRcIiwgaGVpZ2h0OiBcIjE3cHggIWltcG9ydGFudFwiLCBcInRleHQtYWxpZ25cIjogXCJjZW50ZXIgIWltcG9ydGFudFwiLCBvcGFjaXR5OiBcIjEgIWltcG9ydGFudFwiLCB2aXNpYmlsaXR5OiBcInZpc2libGUgIWltcG9ydGFudFwiLCBtYXJnaW46IFwiMCAwIDAgLTgwcHggIWltcG9ydGFudFwiLCBwYWRkaW5nOiBcIjAgIWltcG9ydGFudFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmOiBcImh0dHBzOi8vZm9ybS1jcmVhdGUuY29tL1wiXG4gICAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgICAgICAgIGhlKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBDbihbXCJfZmMtbS1kcmFnXCIsIHIuZGV2aWNlXSksXG4gICAgICAgICAgICAgICAgICAgICAgICByZWY6IFwiZHJhZ0NvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IENvKHsgXCItLWZjLWRyYWctZW1wdHlcIjogYCcke3IudChcImRlc2lnbmVyLmRyYWdFbXB0eVwiKX0nYCwgXCItLWZjLWNoaWxkLWVtcHR5XCI6IGAnJHtyLnQoXCJkZXNpZ25lci5jaGlsZEVtcHR5XCIpfSdgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgci5pbnB1dEZvcm0uc3RhdGUgPyAoZmUoKSwgeGUoXCJkaXZcIiwgenksIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGZlKCksIEtlKEEsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHIuaW5wdXRGb3JtLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlOiByLmlucHV0Rm9ybS5ydWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbjogci5pbnB1dEZvcm0ub3B0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaTogci5pbnB1dEZvcm0uYXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib25VcGRhdGU6YXBpXCI6IGZbOF0gfHwgKGZbOF0gPSAoaCkgPT4gci5pbnB1dEZvcm0uYXBpID0gaCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICExXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDgsIFtcInJ1bGVcIiwgXCJvcHRpb25cIiwgXCJhcGlcIl0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSkpIDogKGZlKCksIEtlKEUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlOiByLmRyYWdGb3JtLnJ1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbjogci5mb3JtT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpOiByLmRyYWdGb3JtLmFwaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvblVwZGF0ZTphcGlcIjogZls5XSB8fCAoZls5XSA9IChoKSA9PiByLmRyYWdGb3JtLmFwaSA9IGgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCA4LCBbXCJydWxlXCIsIFwib3B0aW9uXCIsIFwiYXBpXCJdKSlcbiAgICAgICAgICAgICAgICAgICAgICBdLCA2KSxcbiAgICAgICAgICAgICAgICAgICAgICByLmlucHV0Rm9ybS5zdGF0ZSA/IChmZSgpLCB4ZShcImRpdlwiLCBWeSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgdWUoeCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogZlsxMF0gfHwgKGZbMTBdID0gKGgpID0+IHIuaW5wdXRDbGVhcigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGUoSWUoci50KFwicHJvcHMuY2xlYXJcIikpLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB1ZSh4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBmWzExXSB8fCAoZlsxMV0gPSAoaCkgPT4gci5pbnB1dFJlc2V0KCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZShJZShyLnQoXCJwcm9wcy5yZXNldFwiKSksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVlKHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJwcmltYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBmWzEyXSB8fCAoZlsxMl0gPSAoaCkgPT4gci5pbnB1dFNhdmUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlKEllKHIudChcInByb3BzLnNhdmVcIikpLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICBdKSkgOiBqZShcIlwiLCAhMClcbiAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgXzogM1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgIXIuY29uZmlnIHx8IHIuY29uZmlnLnNob3dDb25maWcgIT09ICExID8gKGZlKCksIEtlKG0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICAgICAgY2xhc3M6IFwiX2ZjLXJcIixcbiAgICAgICAgICAgICAgICB3aWR0aDogXCIzMjBweFwiXG4gICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICB1ZShULCB7IHN0eWxlOiB7IGhlaWdodDogXCIxMDAlXCIgfSB9LCB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICB1ZShkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiNDBweFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiX2ZjLXItdGFic1wiXG4gICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAhIXIuYWN0aXZlUnVsZSB8fCByLmN1c3RvbUZvcm0uaXNTaG93IHx8IHIuY29uZmlnICYmIHIuY29uZmlnLnNob3dGb3JtQ29uZmlnID09PSAhMSA/IChmZSgpLCB4ZShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBDbihbXCJfZmMtci10YWJcIiwgeyBhY3RpdmU6IHIuYWN0aXZlVGFiID09PSBcInByb3BzXCIgfV0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IGZbMTNdIHx8IChmWzEzXSA9IChoKSA9PiByLmFjdGl2ZVRhYiA9IFwicHJvcHNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgSWUoci50KFwiZGVzaWduZXIuY29tcG9uZW50XCIpKSwgMykpIDogamUoXCJcIiwgITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAhci5jb25maWcgfHwgci5jb25maWcuc2hvd0Zvcm1Db25maWcgIT09ICExID8gKGZlKCksIHhlKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IENuKFtcIl9mYy1yLXRhYlwiLCB7IGFjdGl2ZTogci5hY3RpdmVUYWIgPT09IFwiZm9ybVwiICYmICghIXIuYWN0aXZlUnVsZSB8fCByLmN1c3RvbUZvcm0uaXNTaG93KSB9XSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogZlsxNF0gfHwgKGZbMTRdID0gKGgpID0+IHIuYWN0aXZlVGFiID0gXCJmb3JtXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIEllKHIudChcImRlc2lnbmVyLmZvcm1cIikpLCAzKSkgOiBqZShcIlwiLCAhMClcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICFyLmNvbmZpZyB8fCByLmNvbmZpZy5zaG93Rm9ybUNvbmZpZyAhPT0gITEgPyBnaSgoZmUoKSwgS2UocCwge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiX2ZjLXItdGFiLWZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdWUoRSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGU6IHIuZm9ybS5ydWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbjogci5mb3JtLm9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbFZhbHVlOiByLmZvcm0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IHIuZm9ybU9wdENoYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGk6IHIuZm9ybS5hcGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvblVwZGF0ZTphcGlcIjogZlsxNV0gfHwgKGZbMTVdID0gKGgpID0+IHIuZm9ybS5hcGkgPSBoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCA4LCBbXCJydWxlXCIsIFwib3B0aW9uXCIsIFwibW9kZWxWYWx1ZVwiLCBcIm9uQ2hhbmdlXCIsIFwiYXBpXCJdKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgICAgICAgfSwgNTEyKSksIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFt5aSwgci5hY3RpdmVUYWIgPT09IFwiZm9ybVwiXVxuICAgICAgICAgICAgICAgICAgICAgIF0pIDogamUoXCJcIiwgITApLFxuICAgICAgICAgICAgICAgICAgICAgIGdpKChmZSgpLCBLZShwLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJfZmMtci10YWItcHJvcHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogci5hY3RpdmVSdWxlID8gci5hY3RpdmVSdWxlLl9mY19pZCA6IHIuY3VzdG9tRm9ybS5jb25maWcgPyByLmN1c3RvbUZvcm0ua2V5IDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgci5hY3RpdmVSdWxlIHx8IHIuY3VzdG9tRm9ybS5jb25maWcgJiYgKHIuY3VzdG9tRm9ybS5jb25maWcubmFtZSB8fCByLmN1c3RvbUZvcm0uY29uZmlnLmxhYmVsKSA/IChmZSgpLCB4ZShodCwgeyBrZXk6IDAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlKFwicFwiLCBXeSwgSWUoci50KFwiZGVzaWduZXIudHlwZVwiKSksIDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVlKEMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0OiBcInBsYWluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpc2FibGUtdHJhbnNpdGlvbnNcIjogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5hY3RpdmVSdWxlID8gKGZlKCksIHhlKGh0LCB7IGtleTogMCB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGUoSWUoci50KFwiY29tLlwiICsgci5hY3RpdmVSdWxlLl9tZW51Lm5hbWUgKyBcIi5uYW1lXCIpIHx8IHIuYWN0aXZlUnVsZS5fbWVudS5sYWJlbCksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sIDY0KSkgOiAoZmUoKSwgeGUoaHQsIHsga2V5OiAxIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZShJZShyLnQoXCJjb20uXCIgKyByLmN1c3RvbUZvcm0uY29uZmlnLm5hbWUgKyBcIi5uYW1lXCIpIHx8IHIuY3VzdG9tRm9ybS5jb25maWcubGFiZWwgfHwgci5jdXN0b21Gb3JtLmNvbmZpZy5uYW1lKSwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwgNjQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgci5hY3RpdmVSdWxlICYmIHIuYWN0aXZlUnVsZS5uYW1lID8gKGZlKCksIHhlKGh0LCB7IGtleTogMCB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcInBcIiwgR3ksIEllKHIudChcImRlc2lnbmVyLm5hbWVcIikpLCAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVlKE0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJzbWFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJfZmMtci1uYW1lLWlucHV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibW9kZWwtdmFsdWVcIjogci5hY3RpdmVSdWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5OiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJmYy1pY29uIGljb24tYXV0b1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogZlsxNl0gfHwgKGZbMTZdID0gKC4uLmgpID0+IHIudXBkYXRlTmFtZSAmJiByLnVwZGF0ZU5hbWUoLi4uaCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDgsIFtcIm1vZGVsLXZhbHVlXCJdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sIDY0KSkgOiBqZShcIlwiLCAhMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSwgNjQpKSA6IGplKFwiXCIsICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgci5iYXNlRm9ybS5pc1Nob3cgPyAoZmUoKSwgS2UoeSwgeyBrZXk6IDEgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlKEllKHIudChcImRlc2lnbmVyLnJ1bGVcIikpLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpIDogamUoXCJcIiwgITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBnaSh1ZShFLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpOiByLmJhc2VGb3JtLmFwaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9uVXBkYXRlOmFwaVwiOiBmWzE3XSB8fCAoZlsxN10gPSAoaCkgPT4gci5iYXNlRm9ybS5hcGkgPSBoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlOiByLmJhc2VGb3JtLnJ1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uOiByLmJhc2VGb3JtLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxWYWx1ZTogci5iYXNlRm9ybS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogci5iYXNlQ2hhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDgsIFtcImFwaVwiLCBcInJ1bGVcIiwgXCJvcHRpb25cIiwgXCJtb2RlbFZhbHVlXCIsIFwib25DaGFuZ2VcIl0pLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3lpLCByLmJhc2VGb3JtLmlzU2hvd11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHIucHJvcHNGb3JtLmlzU2hvdyA/IChmZSgpLCBLZSh5LCB7IGtleTogMiB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGUoSWUoci50KFwiZGVzaWduZXIucHJvcHNcIikpLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpIDogamUoXCJcIiwgITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBnaSh1ZShFLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpOiByLnByb3BzRm9ybS5hcGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvblVwZGF0ZTphcGlcIjogZlsxOF0gfHwgKGZbMThdID0gKGgpID0+IHIucHJvcHNGb3JtLmFwaSA9IGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGU6IHIucHJvcHNGb3JtLnJ1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uOiByLnByb3BzRm9ybS5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsVmFsdWU6IHIucHJvcHNGb3JtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiByLnByb3BDaGFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25SZW1vdmVGaWVsZDogci5wcm9wUmVtb3ZlRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCwgOCwgW1wiYXBpXCIsIFwicnVsZVwiLCBcIm9wdGlvblwiLCBcIm1vZGVsVmFsdWVcIiwgXCJvbkNoYW5nZVwiLCBcIm9uUmVtb3ZlRmllbGRcIl0pLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3lpLCByLnByb3BzRm9ybS5pc1Nob3ddXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByLmN1c3RvbUZvcm0uaXNTaG93ICYmIHIuY3VzdG9tRm9ybS5wcm9wc1Nob3cgPyAoZmUoKSwgS2UoeSwgeyBrZXk6IDMgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlKEllKHIudChcImRlc2lnbmVyLnByb3BzXCIpKSwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSA6IGplKFwiXCIsICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgci5jdXN0b21Gb3JtLmlzU2hvdyAmJiByLmN1c3RvbUZvcm0ucHJvcHNTaG93ID8gKGZlKCksIEtlKEUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGk6IHIuY3VzdG9tRm9ybS5hcGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvblVwZGF0ZTphcGlcIjogZlsxOV0gfHwgKGZbMTldID0gKGgpID0+IHIuY3VzdG9tRm9ybS5hcGkgPSBoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlOiByLmN1c3RvbUZvcm0ucnVsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb246IHIuY3VzdG9tRm9ybS5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogci5jdXN0b21Gb3JtLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogci5jdXN0b21Gb3JtQ2hhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDgsIFtcImFwaVwiLCBcInJ1bGVcIiwgXCJvcHRpb25cIiwgXCJvbkNoYW5nZVwiXSkpIDogamUoXCJcIiwgITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByLmV2ZW50U2hvdyA/IChmZSgpLCBLZSh5LCB7IGtleTogNSB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGUoSWUoci50KFwiZGVzaWduZXIuZXZlbnRcIikpLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpIDogamUoXCJcIiwgITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByLmV2ZW50U2hvdyA/IChmZSgpLCBLZShCLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiA2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZXZlbnQtbmFtZVwiOiByLmFjdGl2ZVJ1bGUgJiYgci5hY3RpdmVSdWxlLl9tZW51LmV2ZW50IHx8IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29tcG9uZW50LW5hbWVcIjogci5hY3RpdmVSdWxlICYmIHIuYWN0aXZlUnVsZS5fbWVudS5uYW1lIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtb2RlbC12YWx1ZVwiOiByLmFjdGl2ZVJ1bGUgJiYgci5hY3RpdmVSdWxlLl9vbiB8fCB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogci5jaGFuZ2VFdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCA4LCBbXCJldmVudC1uYW1lXCIsIFwiY29tcG9uZW50LW5hbWVcIiwgXCJtb2RlbC12YWx1ZVwiLCBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIl0pKSA6IGplKFwiXCIsICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgci5hY3RpdmVSdWxlID8gKGZlKCksIHhlKGh0LCB7IGtleTogNyB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgci52YWxpZGF0ZUZvcm0uaXNTaG93ID8gKGZlKCksIEtlKHksIHsga2V5OiAwIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGUoSWUoci50KFwiZGVzaWduZXIudmFsaWRhdGVcIikpLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpIDogamUoXCJcIiwgITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIudmFsaWRhdGVGb3JtLmlzU2hvdyA/IChmZSgpLCBLZShFLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGk6IHIudmFsaWRhdGVGb3JtLmFwaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib25VcGRhdGU6YXBpXCI6IGZbMjBdIHx8IChmWzIwXSA9IChoKSA9PiByLnZhbGlkYXRlRm9ybS5hcGkgPSBoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGU6IHIudmFsaWRhdGVGb3JtLnJ1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb246IHIudmFsaWRhdGVGb3JtLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbFZhbHVlOiByLnZhbGlkYXRlRm9ybS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiByLnZhbGlkYXRlQ2hhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiByLmFjdGl2ZVJ1bGUuX2ZjX2lkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCwgOCwgW1wiYXBpXCIsIFwicnVsZVwiLCBcIm9wdGlvblwiLCBcIm1vZGVsVmFsdWVcIiwgXCJvbkNoYW5nZVwiXSkpIDogamUoXCJcIiwgITApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0sIDY0KSkgOiBqZShcIlwiLCAhMClcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgICAgICAgICAgIH0pKSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgW3lpLCByLmFjdGl2ZVRhYiA9PT0gXCJwcm9wc1wiXVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgfSkpIDogamUoXCJcIiwgITApLFxuICAgICAgICAgICAgICB1ZShrLCB7XG4gICAgICAgICAgICAgICAgbW9kZWxWYWx1ZTogci5wcmV2aWV3LnN0YXRlLFxuICAgICAgICAgICAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiBmWzIzXSB8fCAoZlsyM10gPSAoaCkgPT4gci5wcmV2aWV3LnN0YXRlID0gaCksXG4gICAgICAgICAgICAgICAgd2lkdGg6IFwiODAwcHhcIixcbiAgICAgICAgICAgICAgICBjbGFzczogXCJfZmQtcHJldmlldy1kaWFsb2dcIixcbiAgICAgICAgICAgICAgICBcImFwcGVuZC10by1ib2R5XCI6IFwiXCJcbiAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgIHVlKEYsIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiX2ZkLXByZXZpZXctdGFic1wiLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbFZhbHVlOiByLnByZXZpZXdTdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiBmWzIxXSB8fCAoZlsyMV0gPSAoaCkgPT4gci5wcmV2aWV3U3RhdHVzID0gaClcbiAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgIHVlKCQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiByLnQoXCJmb3JtLmZvcm1Nb2RlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJmb3JtXCJcbiAgICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCA4LCBbXCJsYWJlbFwiXSksXG4gICAgICAgICAgICAgICAgICAgICAgdWUoJCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHIudChcImZvcm0uY29tcG9uZW50TW9kZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCA4LCBbXCJsYWJlbFwiXSlcbiAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgIH0sIDgsIFtcIm1vZGVsVmFsdWVcIl0pLFxuICAgICAgICAgICAgICAgICAgci5wcmV2aWV3U3RhdHVzID09PSBcImZvcm1cIiA/IChmZSgpLCB4ZShodCwgeyBrZXk6IDAgfSwgW1xuICAgICAgICAgICAgICAgICAgICByLnByZXZpZXcuc3RhdGUgPyAoZmUoKSwgS2UoQSwge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogMCxcbiAgICAgICAgICAgICAgICAgICAgICBydWxlOiByLnByZXZpZXcucnVsZSxcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb246IHIucHJldmlldy5vcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgYXBpOiByLnByZXZpZXcuYXBpLFxuICAgICAgICAgICAgICAgICAgICAgIFwib25VcGRhdGU6YXBpXCI6IGZbMjJdIHx8IChmWzIyXSA9IChoKSA9PiByLnByZXZpZXcuYXBpID0gaClcbiAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCwgOCwgW1wicnVsZVwiLCBcIm9wdGlvblwiLCBcImFwaVwiXSkpIDogamUoXCJcIiwgITApXG4gICAgICAgICAgICAgICAgICBdLCA2NCkpIDogKGZlKCksIHhlKFwicHJlXCIsIFF5LCBbXG4gICAgICAgICAgICAgICAgICAgIGhlKFwiY29kZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiByLnByZXZpZXcuaHRtbFxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCA4LCBZeSlcbiAgICAgICAgICAgICAgICAgIF0pKVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgfSwgOCwgW1wibW9kZWxWYWx1ZVwiXSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgXzogM1xuICAgICAgICAgIH0pKVxuICAgICAgICBdKSxcbiAgICAgICAgXzogM1xuICAgICAgfSlcbiAgICBdKSxcbiAgICBfOiAzXG4gIH0sIDgsIFtcInN0eWxlXCIsIFwib25EcmFnZW50ZXJcIiwgXCJvbkRyYWdsZWF2ZVwiLCBcIm9uRHJvcFwiXSk7XG59XG5jb25zdCBPciA9IC8qIEBfX1BVUkVfXyAqLyBNdChpeSwgW1tcInJlbmRlclwiLCBLeV1dKTtcbmNvbnN0IFh5ID0gd3Qoe1xuICBuYW1lOiBcIkRyYWdUb29sXCIsXG4gIGVtaXRzOiBbXCJjcmVhdGVcIiwgXCJjb3B5XCIsIFwiYWRkQ2hpbGRcIiwgXCJkZWxldGVcIiwgXCJhY3RpdmVcIiwgXCJmYy5lbFwiXSxcbiAgcHJvcHM6IHtcbiAgICBkcmFnQnRuOiBCb29sZWFuLFxuICAgIGNoaWxkcmVuOiBTdHJpbmcsXG4gICAgbWFzazogQm9vbGVhbixcbiAgICBoYW5kbGVCdG46IFtCb29sZWFuLCBBcnJheV0sXG4gICAgZm9ybUNyZWF0ZUluamVjdDogT2JqZWN0LFxuICAgIHVuaXF1ZTogU3RyaW5nLFxuICAgIG9ubHk6IEJvb2xlYW5cbiAgfSxcbiAgaW5qZWN0OiB7XG4gICAgZmN4OiB7XG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBkZXNpZ25lcjoge1xuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgZHJhZ1Rvb2w6IHtcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9XG4gIH0sXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYWdUb29sOiB0aGlzXG4gICAgfTtcbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NyZWF0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRyYWdUb29sID8gISF0aGlzLmRyYWdUb29sLmNoaWxkcmVuIDogITE7XG4gICAgfSxcbiAgICBidG5zKCkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5oYW5kbGVCdG4pID8gdGhpcy5oYW5kbGVCdG4ubGVuZ3RoID8gdGhpcy5oYW5kbGVCdG4gOiAhMSA6IHRoaXMuaGFuZGxlQnRuICE9PSAhMTtcbiAgICB9LFxuICAgIGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMudW5pcXVlIHx8IHRoaXMuZm9ybUNyZWF0ZUluamVjdC5pZDtcbiAgICB9LFxuICAgIGhpZGRlbk1lbnUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXNpZ25lci5jdHguaGlkZGVuRHJhZ01lbnU7XG4gICAgfSxcbiAgICBoaWRkZW5CdG4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXNpZ25lci5jdHguaGlkZGVuRHJhZ0J0bjtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBhY3RpdmUoKSB7XG4gICAgICB0aGlzLmZjeC5hY3RpdmUgIT09IHRoaXMuaWQgJiYgKHRoaXMuZmN4LmFjdGl2ZSA9IHRoaXMuaWQsIHRoaXMuJGVtaXQoXCJhY3RpdmVcIikpO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRlbWl0KFwiZmMuZWxcIiwgdGhpcyk7XG4gIH1cbn0pLCBKeSA9IHtcbiAga2V5OiAwLFxuICBjbGFzczogXCJfZmQtZHJhZy1tYXNrXCJcbn0sIFp5ID0ge1xuICBrZXk6IDEsXG4gIGNsYXNzOiBcIl9mZC1kcmFnLWxcIlxufSwgcXkgPSB7XG4gIGtleTogMCxcbiAgY2xhc3M6IFwiX2ZkLWRyYWctYnRuXCIsXG4gIHN0eWxlOiB7IGN1cnNvcjogXCJtb3ZlXCIgfVxufSwgX3kgPSAvKiBAX19QVVJFX18gKi8gaGUoXCJpXCIsIHsgY2xhc3M6IFwiZmMtaWNvbiBpY29uLW1vdmVcIiB9LCBudWxsLCAtMSksIGUwID0gW1xuICBfeVxuXSwgdDAgPSB7XG4gIGtleTogMixcbiAgY2xhc3M6IFwiZHJhZy1yXCJcbn0sIG4wID0gLyogQF9fUFVSRV9fICovIGhlKFwiaVwiLCB7IGNsYXNzOiBcImZjLWljb24gaWNvbi1hZGRcIiB9LCBudWxsLCAtMSksIHIwID0gW1xuICBuMFxuXSwgaTAgPSAvKiBAX19QVVJFX18gKi8gaGUoXCJpXCIsIHsgY2xhc3M6IFwiZmMtaWNvbiBpY29uLWNvcHlcIiB9LCBudWxsLCAtMSksIG8wID0gW1xuICBpMFxuXSwgYTAgPSAvKiBAX19QVVJFX18gKi8gaGUoXCJpXCIsIHsgY2xhc3M6IFwiZmMtaWNvbiBpY29uLWFkZC1jaGlsZFwiIH0sIG51bGwsIC0xKSwgbDAgPSBbXG4gIGEwXG5dLCBzMCA9IC8qIEBfX1BVUkVfXyAqLyBoZShcImlcIiwgeyBjbGFzczogXCJmYy1pY29uIGljb24tZGVsZXRlXCIgfSwgbnVsbCwgLTEpLCB1MCA9IFtcbiAgczBcbl07XG5mdW5jdGlvbiBmMChyLCBmLCBvLCBpLCB0LCBzKSB7XG4gIHJldHVybiBmZSgpLCB4ZShcImRpdlwiLCB7XG4gICAgY2xhc3M6IENuKFtcIl9mZC1kcmFnLXRvb2xcIiwgeyBhY3RpdmU6IHIuZmN4LmFjdGl2ZSA9PT0gci5pZCB9XSksXG4gICAgb25DbGljazogZls0XSB8fCAoZls0XSA9IEhuKCguLi5kKSA9PiByLmFjdGl2ZSAmJiByLmFjdGl2ZSguLi5kKSwgW1wic3RvcFwiXSkpXG4gIH0sIFtcbiAgICByLm1hc2sgPyAoZmUoKSwgeGUoXCJkaXZcIiwgSnkpKSA6IGplKFwiXCIsICEwKSxcbiAgICByLmhpZGRlbkJ0biA/IGplKFwiXCIsICEwKSA6IChmZSgpLCB4ZShcImRpdlwiLCBaeSwgW1xuICAgICAgci5mY3guYWN0aXZlID09PSByLmlkICYmIHIuZHJhZ0J0biAhPT0gITEgPyAoZmUoKSwgeGUoXCJkaXZcIiwgcXksIGUwKSkgOiBqZShcIlwiLCAhMClcbiAgICBdKSksXG4gICAgci5idG5zICE9PSAhMSAmJiAhci5oaWRkZW5NZW51ID8gKGZlKCksIHhlKFwiZGl2XCIsIHQwLCBbXG4gICAgICBzcihyLiRzbG90cywgXCJoYW5kbGVcIiwge30sICgpID0+IFtcbiAgICAgICAgci5pc0NyZWF0ZSAmJiAoci5idG5zID09PSAhMCB8fCByLmJ0bnMuaW5kZXhPZihcImNyZWF0ZVwiKSA+IC0xKSA/IChmZSgpLCB4ZShcImRpdlwiLCB7XG4gICAgICAgICAga2V5OiAwLFxuICAgICAgICAgIGNsYXNzOiBcIl9mZC1kcmFnLWJ0blwiLFxuICAgICAgICAgIG9uQ2xpY2s6IGZbMF0gfHwgKGZbMF0gPSAoZCkgPT4gci4kZW1pdChcImNyZWF0ZVwiKSlcbiAgICAgICAgfSwgcjApKSA6IGplKFwiXCIsICEwKSxcbiAgICAgICAgIXIub25seSAmJiAoci5idG5zID09PSAhMCB8fCByLmJ0bnMuaW5kZXhPZihcImNvcHlcIikgPiAtMSkgPyAoZmUoKSwgeGUoXCJkaXZcIiwge1xuICAgICAgICAgIGtleTogMSxcbiAgICAgICAgICBjbGFzczogXCJfZmQtZHJhZy1idG5cIixcbiAgICAgICAgICBvbkNsaWNrOiBmWzFdIHx8IChmWzFdID0gKGQpID0+IHIuJGVtaXQoXCJjb3B5XCIpKVxuICAgICAgICB9LCBvMCkpIDogamUoXCJcIiwgITApLFxuICAgICAgICByLmNoaWxkcmVuICYmIChyLmJ0bnMgPT09ICEwIHx8IHIuYnRucy5pbmRleE9mKFwiYWRkQ2hpbGRcIikgPiAtMSkgPyAoZmUoKSwgeGUoXCJkaXZcIiwge1xuICAgICAgICAgIGtleTogMixcbiAgICAgICAgICBjbGFzczogXCJfZmQtZHJhZy1idG5cIixcbiAgICAgICAgICBvbkNsaWNrOiBmWzJdIHx8IChmWzJdID0gKGQpID0+IHIuJGVtaXQoXCJhZGRDaGlsZFwiKSlcbiAgICAgICAgfSwgbDApKSA6IGplKFwiXCIsICEwKSxcbiAgICAgICAgci5idG5zID09PSAhMCB8fCByLmJ0bnMuaW5kZXhPZihcImRlbGV0ZVwiKSA+IC0xID8gKGZlKCksIHhlKFwiZGl2XCIsIHtcbiAgICAgICAgICBrZXk6IDMsXG4gICAgICAgICAgY2xhc3M6IFwiX2ZkLWRyYWctYnRuIF9mZC1kcmFnLWRhbmdlclwiLFxuICAgICAgICAgIG9uQ2xpY2s6IGZbM10gfHwgKGZbM10gPSAoZCkgPT4gci4kZW1pdChcImRlbGV0ZVwiKSlcbiAgICAgICAgfSwgdTApKSA6IGplKFwiXCIsICEwKVxuICAgICAgXSlcbiAgICBdKSkgOiBqZShcIlwiLCAhMCksXG4gICAgc3Ioci4kc2xvdHMsIFwiZGVmYXVsdFwiKVxuICBdLCAyKTtcbn1cbmNvbnN0IGhjID0gLyogQF9fUFVSRV9fICovIE10KFh5LCBbW1wicmVuZGVyXCIsIGYwXV0pO1xuY29uc3QgZDAgPSB3dCh7XG4gIG5hbWU6IFwiU3RydWN0XCIsXG4gIGVtaXRzOiBbXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiBbT2JqZWN0LCBBcnJheSwgRnVuY3Rpb25dLFxuICAgIHRpdGxlOiBTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiB7XG4gICAgICByZXF1aXJlOiAhMVxuICAgIH0sXG4gICAgdmFsaWRhdGU6IEZ1bmN0aW9uXG4gIH0sXG4gIGluamVjdDogW1wiZGVzaWduZXJcIl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlc2lnbmVyLnNldHVwU3RhdGUudDtcbiAgICB9LFxuICAgIGNvbmZpZ3VyZWQoKSB7XG4gICAgICByZXR1cm4gIWZ0LmVtcHR5KHRoaXMubW9kZWxWYWx1ZSk7XG4gICAgfVxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlZGl0b3I6IG51bGwsXG4gICAgICB2aXNpYmxlOiAhMSxcbiAgICAgIG9sZFZhbDogbnVsbFxuICAgIH07XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSgpIHtcbiAgICAgIHRoaXMubG9hZCgpO1xuICAgIH0sXG4gICAgdmlzaWJsZShyKSB7XG4gICAgICByICYmIHRoaXMubG9hZCgpO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGxvYWQoKSB7XG4gICAgICBjb25zdCByID0gSXIoQmQodGhpcy5tb2RlbFZhbHVlID8gVnQodGhpcy5tb2RlbFZhbHVlKSA6IHRoaXMuZGVmYXVsdFZhbHVlKSk7XG4gICAgICB0aGlzLm9sZFZhbCA9IHIsIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBZcihEaSh0aGlzLiRyZWZzLmVkaXRvciwge1xuICAgICAgICAgIGxpbmVOdW1iZXJzOiAhMCxcbiAgICAgICAgICBtb2RlOiBcImphdmFzY3JpcHRcIixcbiAgICAgICAgICBsaW50OiAhMCxcbiAgICAgICAgICBsaW5lOiAhMCxcbiAgICAgICAgICB0YWJTaXplOiAyLFxuICAgICAgICAgIGxpbmVXcmFwcGluZzogITAsXG4gICAgICAgICAgdmFsdWU6IHIgfHwgXCJcIlxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uT2soKSB7XG4gICAgICBjb25zdCByID0gdGhpcy5lZGl0b3IuZ2V0VmFsdWUoKTtcbiAgICAgIGxldCBmO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZiA9IG5ldyBGdW5jdGlvbihcInJldHVybiBcIiArIHIpKCk7XG4gICAgICB9IGNhdGNoIChvKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKG8pLCBNbih0aGlzLnQoXCJzdHJ1Y3QuZXJyb3JNc2dcIikpLCAhMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlICYmIHRoaXMudmFsaWRhdGUoZikgPT09ICExID8gKE1uKHRoaXMudChcInN0cnVjdC5lcnJvck1zZ1wiKSksICExKSA6ICh0aGlzLnZpc2libGUgPSAhMSwgSXIoZikgIT09IHRoaXMub2xkVmFsICYmIHRoaXMuJGVtaXQoXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiLCBmKSwgITApO1xuICAgIH1cbiAgfVxufSksIGMwID0geyBjbGFzczogXCJfZmQtc3RydWN0XCIgfSwgcDAgPSB7XG4gIGtleTogMCxcbiAgcmVmOiBcImVkaXRvclwiXG59O1xuZnVuY3Rpb24gaDAociwgZiwgbywgaSwgdCwgcykge1xuICBjb25zdCBkID0gYmUoXCJlbC1idXR0b25cIiksIGMgPSBiZShcImVsLWJhZGdlXCIpLCBwID0gYmUoXCJlbC1kaWFsb2dcIik7XG4gIHJldHVybiBmZSgpLCB4ZShcImRpdlwiLCBjMCwgW1xuICAgIHVlKGMsIHtcbiAgICAgIHR5cGU6IFwid2FybmluZ1wiLFxuICAgICAgXCJpcy1kb3RcIjogXCJcIixcbiAgICAgIGhpZGRlbjogIXIuY29uZmlndXJlZFxuICAgIH0sIHtcbiAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgdWUoZCwge1xuICAgICAgICAgIG9uQ2xpY2s6IGZbMF0gfHwgKGZbMF0gPSAodikgPT4gci52aXNpYmxlID0gITApLFxuICAgICAgICAgIHNpemU6IFwic21hbGxcIlxuICAgICAgICB9LCB7XG4gICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgJGUoSWUoci50aXRsZSB8fCByLnQoXCJzdHJ1Y3QudGl0bGVcIikpLCAxKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF86IDFcbiAgICAgICAgfSlcbiAgICAgIF0pLFxuICAgICAgXzogMVxuICAgIH0sIDgsIFtcImhpZGRlblwiXSksXG4gICAgdWUocCwge1xuICAgICAgY2xhc3M6IFwiX2ZkLXN0cnVjdC1jb25cIixcbiAgICAgIHRpdGxlOiByLnRpdGxlIHx8IHIudChcInN0cnVjdC50aXRsZVwiKSxcbiAgICAgIG1vZGVsVmFsdWU6IHIudmlzaWJsZSxcbiAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiBmWzJdIHx8IChmWzJdID0gKHYpID0+IHIudmlzaWJsZSA9IHYpLFxuICAgICAgXCJkZXN0cm95LW9uLWNsb3NlXCI6IFwiXCIsXG4gICAgICBcImNsb3NlLW9uLWNsaWNrLW1vZGFsXCI6ICExLFxuICAgICAgXCJhcHBlbmQtdG8tYm9keVwiOiBcIlwiXG4gICAgfSwge1xuICAgICAgZm9vdGVyOiByZSgoKSA9PiBbXG4gICAgICAgIGhlKFwiZGl2XCIsIG51bGwsIFtcbiAgICAgICAgICB1ZShkLCB7XG4gICAgICAgICAgICBvbkNsaWNrOiBmWzFdIHx8IChmWzFdID0gKHYpID0+IHIudmlzaWJsZSA9ICExKSxcbiAgICAgICAgICAgIHNpemU6IFwiZGVmYXVsdFwiXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAkZShJZShyLnQoXCJwcm9wcy5jYW5jZWxcIikpLCAxKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfOiAxXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdWUoZCwge1xuICAgICAgICAgICAgdHlwZTogXCJwcmltYXJ5XCIsXG4gICAgICAgICAgICBvbkNsaWNrOiByLm9uT2ssXG4gICAgICAgICAgICBzaXplOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvbG9yOiBcIiMyZjczZmZcIlxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgJGUoSWUoci50KFwicHJvcHMub2tcIikpLCAxKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfOiAxXG4gICAgICAgICAgfSwgOCwgW1wib25DbGlja1wiXSlcbiAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICByLnZpc2libGUgPyAoZmUoKSwgeGUoXCJkaXZcIiwgcDAsIG51bGwsIDUxMikpIDogamUoXCJcIiwgITApXG4gICAgICBdKSxcbiAgICAgIF86IDFcbiAgICB9LCA4LCBbXCJ0aXRsZVwiLCBcIm1vZGVsVmFsdWVcIl0pXG4gIF0pO1xufVxuY29uc3QgdjAgPSAvKiBAX19QVVJFX18gKi8gTXQoZDAsIFtbXCJyZW5kZXJcIiwgaDBdXSk7XG5jb25zdCBtMCA9IHd0KHtcbiAgbmFtZTogXCJmY1Jvd1wiLFxuICBtb3VudGVkKCkge1xuICB9XG59KTtcbmZ1bmN0aW9uIGcwKHIsIGYsIG8sIGksIHQsIHMpIHtcbiAgY29uc3QgZCA9IGJlKFwiZWwtY29sXCIpO1xuICByZXR1cm4gZmUoKSwgS2UoZCwgeyBzcGFuOiAyNCB9LCB7XG4gICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgaGUoXCJkaXZcIiwgRW8oe1xuICAgICAgICBjbGFzczogW1wiX2ZkLXJvdyBlbC1yb3dcIiwgeyBcIl9mYy1jaGlsZC1lbXB0eVwiOiAhci4kc2xvdHMuZGVmYXVsdCB9XVxuICAgICAgfSwgci4kYXR0cnMpLCBbXG4gICAgICAgIHNyKHIuJHNsb3RzLCBcImRlZmF1bHRcIilcbiAgICAgIF0sIDE2KVxuICAgIF0pLFxuICAgIF86IDNcbiAgfSk7XG59XG5jb25zdCB5MCA9IC8qIEBfX1BVUkVfXyAqLyBNdChtMCwgW1tcInJlbmRlclwiLCBnMF1dKTtcbmNvbnN0IEEwID0gd3Qoe1xuICBuYW1lOiBcIkh0bWxFZGl0b3JcIixcbiAgZW1pdHM6IFtcInVwZGF0ZTptb2RlbFZhbHVlXCJdLFxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IFN0cmluZyxcbiAgICB0aXRsZTogU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZToge1xuICAgICAgcmVxdWlyZTogITFcbiAgICB9XG4gIH0sXG4gIGluamVjdDogW1wiZGVzaWduZXJcIl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlc2lnbmVyLnNldHVwU3RhdGUudDtcbiAgICB9XG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVkaXRvcjogbnVsbCxcbiAgICAgIHZpc2libGU6ICExLFxuICAgICAgb2xkVmFsOiBudWxsXG4gICAgfTtcbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKCkge1xuICAgICAgdGhpcy5sb2FkKCk7XG4gICAgfSxcbiAgICB2aXNpYmxlKHIpIHtcbiAgICAgIHIgJiYgdGhpcy5sb2FkKCk7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgdmFsaWRhdGVYTUwocikge1xuICAgICAgdmFyIHQ7XG4gICAgICBjb25zdCBpID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyLCBcImFwcGxpY2F0aW9uL3htbFwiKS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInBhcnNlcmVycm9yXCIpO1xuICAgICAgcmV0dXJuIGkubGVuZ3RoID4gMCAmJiAodCA9IGlbMF0uaW5uZXJUZXh0LnNwbGl0KGBcbmApWzBdKSAhPSBudWxsID8gdCA6IFwiXCI7XG4gICAgfSxcbiAgICBsb2FkKCkge1xuICAgICAgdGhpcy5vbGRWYWwgPSB0aGlzLm1vZGVsVmFsdWUsIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBZcihEaSh0aGlzLiRyZWZzLmVkaXRvciwge1xuICAgICAgICAgIGxpbmVOdW1iZXJzOiAhMCxcbiAgICAgICAgICBtb2RlOiBcInhtbFwiLFxuICAgICAgICAgIGxpbnQ6ICEwLFxuICAgICAgICAgIGxpbmU6ICEwLFxuICAgICAgICAgIHRhYlNpemU6IDIsXG4gICAgICAgICAgbGluZVdyYXBwaW5nOiAhMCxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5tb2RlbFZhbHVlIHx8IFwiXCJcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbk9rKCkge1xuICAgICAgY29uc3QgciA9IHRoaXMuZWRpdG9yLmdldFZhbHVlKCk7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVhNTChyKSA/IChNbih0aGlzLnQoXCJzdHJ1Y3QuZXJyb3JNc2dcIikpLCAhMSkgOiAodGhpcy52aXNpYmxlID0gITEsIHIgIT09IHRoaXMub2xkVmFsICYmIHRoaXMuJGVtaXQoXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiLCByKSwgITApO1xuICAgIH1cbiAgfVxufSksIGIwID0geyBjbGFzczogXCJfZmQtaHRtbC1lZGl0b3JcIiB9LCBDMCA9IHtcbiAga2V5OiAwLFxuICByZWY6IFwiZWRpdG9yXCJcbn07XG5mdW5jdGlvbiBFMChyLCBmLCBvLCBpLCB0LCBzKSB7XG4gIGNvbnN0IGQgPSBiZShcImVsLWJ1dHRvblwiKSwgYyA9IGJlKFwiZWwtZGlhbG9nXCIpO1xuICByZXR1cm4gZmUoKSwgeGUoXCJkaXZcIiwgYjAsIFtcbiAgICB1ZShkLCB7XG4gICAgICBvbkNsaWNrOiBmWzBdIHx8IChmWzBdID0gKHApID0+IHIudmlzaWJsZSA9ICEwKSxcbiAgICAgIHN0eWxlOiB7IHdpZHRoOiBcIjEwMCVcIiB9XG4gICAgfSwge1xuICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAkZShJZShyLnRpdGxlIHx8IHIudChcInN0cnVjdC50aXRsZVwiKSksIDEpXG4gICAgICBdKSxcbiAgICAgIF86IDFcbiAgICB9KSxcbiAgICB1ZShjLCB7XG4gICAgICBjbGFzczogXCJfZmQtaHRtbC1lZGl0b3ItY29uXCIsXG4gICAgICB0aXRsZTogci50aXRsZSB8fCByLnQoXCJzdHJ1Y3QudGl0bGVcIiksXG4gICAgICBtb2RlbFZhbHVlOiByLnZpc2libGUsXG4gICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogZlsyXSB8fCAoZlsyXSA9IChwKSA9PiByLnZpc2libGUgPSBwKSxcbiAgICAgIFwiY2xvc2Utb24tY2xpY2stbW9kYWxcIjogITEsXG4gICAgICBcImFwcGVuZC10by1ib2R5XCI6IFwiXCJcbiAgICB9LCB7XG4gICAgICBmb290ZXI6IHJlKCgpID0+IFtcbiAgICAgICAgaGUoXCJkaXZcIiwgbnVsbCwgW1xuICAgICAgICAgIHVlKGQsIHtcbiAgICAgICAgICAgIG9uQ2xpY2s6IGZbMV0gfHwgKGZbMV0gPSAocCkgPT4gci52aXNpYmxlID0gITEpLFxuICAgICAgICAgICAgc2l6ZTogXCJkZWZhdWx0XCJcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICRlKEllKHIudChcInByb3BzLmNhbmNlbFwiKSksIDEpXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF86IDFcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB1ZShkLCB7XG4gICAgICAgICAgICB0eXBlOiBcInByaW1hcnlcIixcbiAgICAgICAgICAgIG9uQ2xpY2s6IHIub25PayxcbiAgICAgICAgICAgIHNpemU6IFwiZGVmYXVsdFwiXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAkZShJZShyLnQoXCJwcm9wcy5va1wiKSksIDEpXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF86IDFcbiAgICAgICAgICB9LCA4LCBbXCJvbkNsaWNrXCJdKVxuICAgICAgICBdKVxuICAgICAgXSksXG4gICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgIHIudmlzaWJsZSA/IChmZSgpLCB4ZShcImRpdlwiLCBDMCwgbnVsbCwgNTEyKSkgOiBqZShcIlwiLCAhMClcbiAgICAgIF0pLFxuICAgICAgXzogMVxuICAgIH0sIDgsIFtcInRpdGxlXCIsIFwibW9kZWxWYWx1ZVwiXSlcbiAgXSk7XG59XG5jb25zdCBTMCA9IC8qIEBfX1BVUkVfXyAqLyBNdChBMCwgW1tcInJlbmRlclwiLCBFMF1dKTtcbmNvbnN0IHgwID0gd3Qoe1xuICBuYW1lOiBcIlN0cnVjdEVkaXRvclwiLFxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IFtPYmplY3QsIEFycmF5LCBGdW5jdGlvbl0sXG4gICAgZGVmYXVsdFZhbHVlOiB7XG4gICAgICByZXF1aXJlOiAhMVxuICAgIH1cbiAgfSxcbiAgaW5qZWN0OiBbXCJkZXNpZ25lclwiXSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgdmlzaWJsZTogITEsXG4gICAgICBlcnI6ICExLFxuICAgICAgb2xkVmFsOiBudWxsXG4gICAgfTtcbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICB0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVzaWduZXIuc2V0dXBTdGF0ZS50O1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICB0aGlzLmxvYWQoKTtcbiAgICB9KTtcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGxvYWQoKSB7XG4gICAgICBjb25zdCByID0gdGhpcy5tb2RlbFZhbHVlID8gSXIodGhpcy5tb2RlbFZhbHVlKSA6IFwiXCI7XG4gICAgICB0aGlzLm9sZFZhbCA9IHIsIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBZcihEaSh0aGlzLiRyZWZzLmVkaXRvciwge1xuICAgICAgICAgIGxpbmVOdW1iZXJzOiAhMCxcbiAgICAgICAgICBtb2RlOiBcImphdmFzY3JpcHRcIixcbiAgICAgICAgICBsaW50OiAhMCxcbiAgICAgICAgICBsaW5lOiAhMCxcbiAgICAgICAgICB0YWJTaXplOiAyLFxuICAgICAgICAgIGxpbmVXcmFwcGluZzogITAsXG4gICAgICAgICAgdmFsdWU6IHIgfHwgXCJcIlxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHNhdmUoKSB7XG4gICAgICBjb25zdCByID0gdGhpcy5lZGl0b3IuZ2V0VmFsdWUoKTtcbiAgICAgIGxldCBmO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZiA9IG5ldyBGdW5jdGlvbihcInJldHVybiBcIiArIHIpKCk7XG4gICAgICB9IGNhdGNoIChvKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKG8pLCBNbih0aGlzLnQoXCJzdHJ1Y3QuZXJyb3JNc2dcIikpLCAhMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlICYmIHRoaXMudmFsaWRhdGUoZikgPT09ICExID8gKHRoaXMuZXJyID0gITAsICExKSA6ICh0aGlzLnZpc2libGUgPSAhMSwgSXIoZikgIT09IHRoaXMub2xkVmFsICYmIHRoaXMuJGVtaXQoXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiLCBmKSwgITApO1xuICAgIH1cbiAgfVxufSksIHcwID0geyBjbGFzczogXCJfZmQtc3RydWN0LWVkaXRvclwiIH0sIFQwID0geyByZWY6IFwiZWRpdG9yXCIgfTtcbmZ1bmN0aW9uIEQwKHIsIGYsIG8sIGksIHQsIHMpIHtcbiAgcmV0dXJuIGZlKCksIHhlKFwiZGl2XCIsIHcwLCBbXG4gICAgaGUoXCJkaXZcIiwgVDAsIG51bGwsIDUxMilcbiAgXSk7XG59XG5jb25zdCBSMCA9IC8qIEBfX1BVUkVfXyAqLyBNdCh4MCwgW1tcInJlbmRlclwiLCBEMF1dKTtcbmNvbnN0IE0wID0gKHIpID0+IFtcbiAge1xuICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICBmaWVsZDogXCJhY3Rpb25cIixcbiAgICB0aXRsZTogcihcImZldGNoLmFjdGlvblwiKSxcbiAgICB2YWx1ZTogXCJcIixcbiAgICBwcm9wczogeyBzaXplOiBcImRlZmF1bHRcIiB9LFxuICAgIHZhbGlkYXRlOiBbeyByZXF1aXJlZDogITAsIG1lc3NhZ2U6IHIoXCJmZXRjaC5hY3Rpb25SZXF1aXJlZFwiKSwgdHJpZ2dlcjogXCJibHVyXCIgfV1cbiAgfSxcbiAge1xuICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICBmaWVsZDogXCJtZXRob2RcIixcbiAgICB0aXRsZTogcihcImZldGNoLm1ldGhvZFwiKSxcbiAgICB2YWx1ZTogXCJHRVRcIixcbiAgICBwcm9wczoge1xuICAgICAgc2l6ZTogXCJkZWZhdWx0XCJcbiAgICB9LFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgbGFiZWw6IFwiR0VUXCIsIHZhbHVlOiBcIkdFVFwiIH0sXG4gICAgICB7IGxhYmVsOiBcIlBPU1RcIiwgdmFsdWU6IFwiUE9TVFwiIH1cbiAgICBdLFxuICAgICRyZXF1aXJlZDogITBcbiAgfSxcbiAge1xuICAgIHR5cGU6IFwiVGFibGVPcHRpb25zXCIsXG4gICAgZmllbGQ6IFwiaGVhZGVyc1wiLFxuICAgIHRpdGxlOiByKFwiZmV0Y2guaGVhZGVyc1wiKSxcbiAgICB2YWx1ZToge30sXG4gICAgcHJvcHM6IHtcbiAgICAgIGNvbHVtbjogW3sgbGFiZWw6IHIoXCJwcm9wcy5rZXlcIiksIGtleTogXCJsYWJlbFwiIH0sIHsgbGFiZWw6IHIoXCJwcm9wcy52YWx1ZVwiKSwga2V5OiBcInZhbHVlXCIgfV0sXG4gICAgICB2YWx1ZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBzaXplOiBcImRlZmF1bHRcIlxuICAgIH1cbiAgfSxcbiAge1xuICAgIHR5cGU6IFwiVGFibGVPcHRpb25zXCIsXG4gICAgZmllbGQ6IFwiZGF0YVwiLFxuICAgIHRpdGxlOiByKFwiZmV0Y2guZGF0YVwiKSxcbiAgICB2YWx1ZToge30sXG4gICAgcHJvcHM6IHtcbiAgICAgIGNvbHVtbjogW3sgbGFiZWw6IHIoXCJwcm9wcy5rZXlcIiksIGtleTogXCJsYWJlbFwiIH0sIHsgbGFiZWw6IHIoXCJwcm9wcy52YWx1ZVwiKSwga2V5OiBcInZhbHVlXCIgfV0sXG4gICAgICB2YWx1ZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBzaXplOiBcImRlZmF1bHRcIlxuICAgIH1cbiAgfVxuXSwgSTAgPSB3dCh7XG4gIG5hbWU6IFwiRmV0Y2hDb25maWdcIixcbiAgZW1pdHM6IFtcInVwZGF0ZTptb2RlbFZhbHVlXCJdLFxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IFtPYmplY3QsIFN0cmluZ10sXG4gICAgdG86IFN0cmluZ1xuICB9LFxuICBjb21wb25lbnRzOiB7XG4gICAgRHJhZ0Zvcm06IG90LiRmb3JtKCksXG4gICAgRm5FZGl0b3I6IEZhLFxuICAgIFN0cnVjdEVkaXRvcjogUjBcbiAgfSxcbiAgaW5qZWN0OiBbXCJkZXNpZ25lclwiXSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmlzaWJsZTogITEsXG4gICAgICB2YWx1ZTogVnQodGhpcy5tb2RlbFZhbHVlIHx8IHt9KSxcbiAgICAgIGZvcm06IHtcbiAgICAgICAgYXBpOiB7fSxcbiAgICAgICAgZm9ybURhdGE6IHt9LFxuICAgICAgICBydWxlOiBbXSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGZvcm06IHtcbiAgICAgICAgICAgIGxhYmVsV2lkdGg6IFwiOTBweFwiLFxuICAgICAgICAgICAgc2l6ZTogXCJkZWZhdWx0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN1Ym1pdEJ0bjogITEsXG4gICAgICAgICAgcmVzZXRCdG46ICExXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXNpZ25lci5zZXR1cFN0YXRlLnQ7XG4gICAgfSxcbiAgICBjb25maWd1cmVkKCkge1xuICAgICAgcmV0dXJuICFmdC5lbXB0eSh0aGlzLm1vZGVsVmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICB2aXNpYmxlKHIpIHtcbiAgICAgIHIgJiYgKHRoaXMudmFsdWUgPSBWdCh0aGlzLm1vZGVsVmFsdWUgfHwge30pKTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBvcGVuKCkge1xuICAgICAgdGhpcy52aXNpYmxlID0gITA7XG4gICAgfSxcbiAgICBhY3RpdmUoKSB7XG4gICAgICBjb25zdCByID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMuZm9ybS5ydWxlID0gci50eXBlID09PSBcInN0YXRpY1wiID8gW10gOiBNMCh0aGlzLnQpLCB0aGlzLmZvcm0uZm9ybURhdGEgPSB7IC4uLnIgfSwgdGhpcy5mb3JtLmxhYmVsID0gci5sYWJlbCwgdGhpcy5mb3JtLnR5cGUgPSByLnR5cGUsIHRoaXMuZm9ybS5kYXRhID0gci5kYXRhLCB0aGlzLmZvcm0ucGFyc2UgPSByLnBhcnNlIHx8IFwiXCIsIHRoaXMuZm9ybS5vbkVycm9yID0gci5vbkVycm9yIHx8IFwiXCI7XG4gICAgfSxcbiAgICBzYXZlKCkge1xuICAgICAgdGhpcy5mb3JtLmFwaS52YWxpZGF0ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zdCByID0geyAuLi50aGlzLmZvcm0uZm9ybURhdGEgfTtcbiAgICAgICAgdGhpcy4kcmVmcy5wYXJzZSAmJiAhdGhpcy4kcmVmcy5wYXJzZS5zYXZlKCkgfHwgdGhpcy4kcmVmcy5lcnJvciAmJiAhdGhpcy4kcmVmcy5lcnJvci5zYXZlKCkgfHwgKHIucGFyc2UgPSB0aGlzLmZvcm0ucGFyc2UsIHIub25FcnJvciA9IHRoaXMuZm9ybS5vbkVycm9yLCByLmxhYmVsID0gdGhpcy5mb3JtLmxhYmVsLCByLnR5cGUgPSB0aGlzLmZvcm0udHlwZSwgci50byA9IHRoaXMudG8gfHwgXCJvcHRpb25zXCIsIHRoaXMuJGVtaXQoXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiLCByKSwgdGhpcy52aXNpYmxlID0gITEpO1xuICAgICAgfSkuY2F0Y2goKHIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihyKSwgTW4ocltPYmplY3Qua2V5cyhyKVswXV1bMF0ubWVzc2FnZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5hY3RpdmUoKTtcbiAgfVxufSksIE4wID0geyBjbGFzczogXCJfZmQtZ2ZjXCIgfTtcbmZ1bmN0aW9uIE8wKHIsIGYsIG8sIGksIHQsIHMpIHtcbiAgY29uc3QgZCA9IGJlKFwiZWwtYnV0dG9uXCIpLCBjID0gYmUoXCJlbC1iYWRnZVwiKSwgcCA9IGJlKFwiRHJhZ0Zvcm1cIiksIHYgPSBiZShcImVsLXRhYi1wYW5lXCIpLCBiID0gYmUoXCJGbkVkaXRvclwiKSwgUyA9IGJlKFwiZWwtdGFic1wiKSwgRCA9IGJlKFwiZWwtY29udGFpbmVyXCIpLCBUID0gYmUoXCJlbC1kaWFsb2dcIik7XG4gIHJldHVybiBmZSgpLCB4ZShcImRpdlwiLCBOMCwgW1xuICAgIHVlKGMsIHtcbiAgICAgIHR5cGU6IFwid2FybmluZ1wiLFxuICAgICAgXCJpcy1kb3RcIjogXCJcIixcbiAgICAgIGhpZGRlbjogIXIuY29uZmlndXJlZFxuICAgIH0sIHtcbiAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgdWUoZCwge1xuICAgICAgICAgIG9uQ2xpY2s6IGZbMF0gfHwgKGZbMF0gPSAobSkgPT4gci52aXNpYmxlID0gITApLFxuICAgICAgICAgIHNpemU6IFwic21hbGxcIlxuICAgICAgICB9LCB7XG4gICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgJGUoSWUoci50KFwic3RydWN0LnRpdGxlXCIpKSwgMSlcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfOiAxXG4gICAgICAgIH0pXG4gICAgICBdKSxcbiAgICAgIF86IDFcbiAgICB9LCA4LCBbXCJoaWRkZW5cIl0pLFxuICAgIHVlKFQsIHtcbiAgICAgIGNsYXNzOiBcIl9mZC1nZmMtZGlhbG9nXCIsXG4gICAgICB0aXRsZTogci50KFwiZmV0Y2gub3B0aW9uc1R5cGUuZmV0Y2hcIiksXG4gICAgICBtb2RlbFZhbHVlOiByLnZpc2libGUsXG4gICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogZls2XSB8fCAoZls2XSA9IChtKSA9PiByLnZpc2libGUgPSBtKSxcbiAgICAgIFwiZGVzdHJveS1vbi1jbG9zZVwiOiBcIlwiLFxuICAgICAgXCJjbG9zZS1vbi1jbGljay1tb2RhbFwiOiAhMSxcbiAgICAgIFwiYXBwZW5kLXRvLWJvZHlcIjogXCJcIixcbiAgICAgIHdpZHRoOiBcIjk4MHB4XCJcbiAgICB9LCB7XG4gICAgICBmb290ZXI6IHJlKCgpID0+IFtcbiAgICAgICAgaGUoXCJkaXZcIiwgbnVsbCwgW1xuICAgICAgICAgIHVlKGQsIHtcbiAgICAgICAgICAgIHNpemU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgb25DbGljazogZls1XSB8fCAoZls1XSA9IChtKSA9PiByLnZpc2libGUgPSAhMSlcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICRlKEllKHIudChcInByb3BzLmNhbmNlbFwiKSksIDEpXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF86IDFcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB1ZShkLCB7XG4gICAgICAgICAgICB0eXBlOiBcInByaW1hcnlcIixcbiAgICAgICAgICAgIHNpemU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgb25DbGljazogci5zYXZlLFxuICAgICAgICAgICAgY29sb3I6IFwiIzJmNzNmZlwiXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAkZShJZShyLnQoXCJwcm9wcy5va1wiKSksIDEpXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF86IDFcbiAgICAgICAgICB9LCA4LCBbXCJvbkNsaWNrXCJdKVxuICAgICAgICBdKVxuICAgICAgXSksXG4gICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgIHVlKEQsIHtcbiAgICAgICAgICBjbGFzczogXCJfZmQtZ2ZjLWNvblwiLFxuICAgICAgICAgIHN0eWxlOiB7IGhlaWdodDogXCI0NTBweFwiIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgIHVlKFMsIHtcbiAgICAgICAgICAgICAgXCJtb2RlbC12YWx1ZVwiOiBcImZpcnN0XCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBcIl9mYy10YWJzXCIsXG4gICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBcIjEwMCVcIiB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICB1ZSh2LCB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogci50KFwiZmV0Y2guY29uZmlnXCIpLFxuICAgICAgICAgICAgICAgICAgbmFtZTogXCJmaXJzdFwiXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICB1ZShwLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXBpOiByLmZvcm0uYXBpLFxuICAgICAgICAgICAgICAgICAgICAgIFwib25VcGRhdGU6YXBpXCI6IGZbMV0gfHwgKGZbMV0gPSAobSkgPT4gci5mb3JtLmFwaSA9IG0pLFxuICAgICAgICAgICAgICAgICAgICAgIG1vZGVsVmFsdWU6IHIuZm9ybS5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogZlsyXSB8fCAoZlsyXSA9IChtKSA9PiByLmZvcm0uZm9ybURhdGEgPSBtKSxcbiAgICAgICAgICAgICAgICAgICAgICBydWxlOiByLmZvcm0ucnVsZSxcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb246IHIuZm9ybS5vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDgsIFtcImFwaVwiLCBcIm1vZGVsVmFsdWVcIiwgXCJydWxlXCIsIFwib3B0aW9uXCJdKVxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgfSwgOCwgW1wibGFiZWxcIl0pLFxuICAgICAgICAgICAgICAgIHVlKHYsIHtcbiAgICAgICAgICAgICAgICAgIGxhenk6IFwiXCIsXG4gICAgICAgICAgICAgICAgICBsYWJlbDogci50KFwiZmV0Y2gucGFyc2VcIiksXG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNlY29uZFwiXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICB1ZShiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgaGVpZ2h0OiBcIjQxNXB4XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RlbFZhbHVlOiByLmZvcm0ucGFyc2UsXG4gICAgICAgICAgICAgICAgICAgICAgXCJvblVwZGF0ZTptb2RlbFZhbHVlXCI6IGZbM10gfHwgKGZbM10gPSAobSkgPT4gci5mb3JtLnBhcnNlID0gbSksXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFt7IG5hbWU6IFwicmVzXCIsIGluZm86IHIudChcImZldGNoLnJlc3BvbnNlXCIpIH1dLFxuICAgICAgICAgICAgICAgICAgICAgIHJlZjogXCJwYXJzZVwiXG4gICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDgsIFtcIm1vZGVsVmFsdWVcIiwgXCJhcmdzXCJdKVxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgfSwgOCwgW1wibGFiZWxcIl0pLFxuICAgICAgICAgICAgICAgIHVlKHYsIHtcbiAgICAgICAgICAgICAgICAgIGxhenk6IFwiXCIsXG4gICAgICAgICAgICAgICAgICBsYWJlbDogci50KFwiZmV0Y2gub25FcnJvclwiKSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwidGhpcmRcIlxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgdWUoYiwge1xuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IGhlaWdodDogXCI0MTVweFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgbW9kZWxWYWx1ZTogci5mb3JtLm9uRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgXCJvblVwZGF0ZTptb2RlbFZhbHVlXCI6IGZbNF0gfHwgKGZbNF0gPSAobSkgPT4gci5mb3JtLm9uRXJyb3IgPSBtKSxcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm9uRXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbXCJlXCJdLFxuICAgICAgICAgICAgICAgICAgICAgIHJlZjogXCJlcnJvclwiXG4gICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDgsIFtcIm1vZGVsVmFsdWVcIl0pXG4gICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICB9LCA4LCBbXCJsYWJlbFwiXSlcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSksXG4gICAgICAgICAgXzogMVxuICAgICAgICB9KVxuICAgICAgXSksXG4gICAgICBfOiAxXG4gICAgfSwgOCwgW1widGl0bGVcIiwgXCJtb2RlbFZhbHVlXCJdKVxuICBdKTtcbn1cbmNvbnN0IFAwID0gLyogQF9fUFVSRV9fICovIE10KEkwLCBbW1wicmVuZGVyXCIsIE8wXV0pO1xuY29uc3QgRjAgPSB3dCh7XG4gIG5hbWU6IFwiQ29sb3JJbnB1dFwiLFxuICBpbmplY3Q6IFtcImRlc2lnbmVyXCJdLFxuICBlbWl0czogW1widXBkYXRlOm1vZGVsVmFsdWVcIiwgXCJjaGFuZ2VcIl0sXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogU3RyaW5nXG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSgpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1vZGVsVmFsdWUgfHwgXCJcIjtcbiAgICB9LFxuICAgIHZhbHVlKHIpIHtcbiAgICAgIHRoaXMuJGVtaXQoXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiLCByKSwgdGhpcy4kZW1pdChcImNoYW5nZVwiLCByKTtcbiAgICB9XG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB0aGlzLm1vZGVsVmFsdWUgfHwgXCJcIlxuICAgIH07XG4gIH0sXG4gIG1ldGhvZHM6IHt9LFxuICBjcmVhdGVkKCkge1xuICB9XG59KSwgTDAgPSB7IGNsYXNzOiBcIl9mZC1jb2xvci1pbnB1dFwiIH07XG5mdW5jdGlvbiBCMChyLCBmLCBvLCBpLCB0LCBzKSB7XG4gIGNvbnN0IGQgPSBiZShcImVsLWNvbG9yLXBpY2tlclwiKSwgYyA9IGJlKFwiZWwtaW5wdXRcIik7XG4gIHJldHVybiBmZSgpLCB4ZShcImRpdlwiLCBMMCwgW1xuICAgIHVlKGMsIHtcbiAgICAgIGNsZWFyYWJsZTogXCJcIixcbiAgICAgIG1vZGVsVmFsdWU6IHIudmFsdWUsXG4gICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogZlsxXSB8fCAoZlsxXSA9IChwKSA9PiByLnZhbHVlID0gcClcbiAgICB9LCB7XG4gICAgICBhcHBlbmQ6IHJlKCgpID0+IFtcbiAgICAgICAgdWUoZCwge1xuICAgICAgICAgIFwic2hvdy1hbHBoYVwiOiBcIlwiLFxuICAgICAgICAgIFwiY29sb3ItZm9ybWF0XCI6IFwiaGV4XCIsXG4gICAgICAgICAgbW9kZWxWYWx1ZTogci52YWx1ZSxcbiAgICAgICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogZlswXSB8fCAoZlswXSA9IChwKSA9PiByLnZhbHVlID0gcClcbiAgICAgICAgfSwgbnVsbCwgOCwgW1wibW9kZWxWYWx1ZVwiXSlcbiAgICAgIF0pLFxuICAgICAgXzogMVxuICAgIH0sIDgsIFtcIm1vZGVsVmFsdWVcIl0pXG4gIF0pO1xufVxuY29uc3QgSDAgPSAvKiBAX19QVVJFX18gKi8gTXQoRjAsIFtbXCJyZW5kZXJcIiwgQjBdXSk7XG5jb25zdCAkMCA9IHd0KHtcbiAgbmFtZTogXCJTaXplSW5wdXRcIixcbiAgaW5qZWN0OiBbXCJkZXNpZ25lclwiXSxcbiAgZW1pdHM6IFtcInVwZGF0ZTptb2RlbFZhbHVlXCIsIFwiY2hhbmdlXCJdLFxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IFN0cmluZyxcbiAgICBzaXplOiBTdHJpbmcsXG4gICAgdW5pdDoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiAoKSA9PiBbXCJhdXRvXCIsIFwicHhcIiwgXCIlXCIsIFwidmhcIiwgXCJ2d1wiLCBcImVtXCIsIFwicmVtXCJdXG4gICAgfSxcbiAgICBkZWZhdWx0VW5pdDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogXCJweFwiXG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUoKSB7XG4gICAgICB0aGlzLnBhcnNlVmFsdWUoKTtcbiAgICB9XG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkeDogMSxcbiAgICAgIG51bTogMCxcbiAgICAgIG9sZFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUgfHwgXCJcIlxuICAgIH07XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBwYXJzZVZhbHVlKCkge1xuICAgICAgdGhpcy5tb2RlbFZhbHVlICE9PSBcImF1dG9cIiA/ICh0aGlzLmlkeCA9IE1hdGgubWF4KHRoaXMudW5pdC5pbmRleE9mKHRoaXMuZGVmYXVsdFVuaXQpLCAwKSwgdGhpcy51bml0LmZvckVhY2goKHIsIGYpID0+IHtcbiAgICAgICAgKHRoaXMubW9kZWxWYWx1ZSB8fCBcIlwiKS5pbmRleE9mKHIpID4gLTEgJiYgKHRoaXMuaWR4ID0gZik7XG4gICAgICB9KSwgdGhpcy5udW0gPSB4aSh0aGlzLm1vZGVsVmFsdWUpID8gbnVsbCA6IHBhcnNlRmxvYXQodGhpcy5tb2RlbFZhbHVlIHx8IDApKSA6ICh0aGlzLmlkeCA9IDAsIHRoaXMubnVtID0gMCk7XG4gICAgfSxcbiAgICBzdWJtaXQoKSB7XG4gICAgICB0aGlzLm9sZFZhbHVlID0geGkodGhpcy5udW0pID8gXCJcIiA6IFwiXCIgKyB0aGlzLm51bSArIHRoaXMudW5pdFt0aGlzLmlkeF0sIHRoaXMuJGVtaXQoXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiLCB0aGlzLm9sZFZhbHVlKSwgdGhpcy4kZW1pdChcImNoYW5nZVwiLCB0aGlzLm9sZFZhbHVlKTtcbiAgICB9LFxuICAgIGNoYW5nZVR5cGUocikge1xuICAgICAgaWYgKHIgIT09IHZvaWQgMCkge1xuICAgICAgICBpZiAodGhpcy5pZHggPT09IHIpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmlkeCA9IHI7XG4gICAgICB9IGVsc2VcbiAgICAgICAgdGhpcy5pZHgrKywgdGhpcy5pZHggPiA0ICYmICh0aGlzLmlkeCA9IDApO1xuICAgICAgdGhpcy51bml0W3RoaXMuaWR4XSA9PT0gXCJhdXRvXCIgPyAodGhpcy5vbGRWYWx1ZSA9IFwiYXV0b1wiLCB0aGlzLiRlbWl0KFwidXBkYXRlOm1vZGVsVmFsdWVcIiwgXCJhdXRvXCIpLCB0aGlzLiRlbWl0KFwiY2hhbmdlXCIsIFwiYXV0b1wiKSkgOiB0aGlzLnN1Ym1pdCgpO1xuICAgIH1cbiAgfSxcbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLnBhcnNlVmFsdWUoKTtcbiAgfVxufSksIGswID0geyBjbGFzczogXCJfZmQtc2l6ZS1pbnB1dFwiIH07XG5mdW5jdGlvbiBqMChyLCBmLCBvLCBpLCB0LCBzKSB7XG4gIGNvbnN0IGQgPSBiZShcImVsLWJ1dHRvblwiKSwgYyA9IGJlKFwiZWwtaW5wdXROdW1iZXJcIiksIHAgPSBiZShcImVsLWRyb3Bkb3duLWl0ZW1cIiksIHYgPSBiZShcImVsLWRyb3Bkb3duLW1lbnVcIiksIGIgPSBiZShcImVsLWRyb3Bkb3duXCIpO1xuICByZXR1cm4gZmUoKSwgeGUoXCJkaXZcIiwgazAsIFtcbiAgICByLnVuaXRbci5pZHhdID09PSBcImF1dG9cIiA/IChmZSgpLCBLZShkLCB7XG4gICAgICBrZXk6IDAsXG4gICAgICBzaXplOiByLnNpemUsXG4gICAgICBzdHlsZTogeyB3aWR0aDogXCIxNTBweFwiIH0sXG4gICAgICBvbkNsaWNrOiBmWzBdIHx8IChmWzBdID0gKFMpID0+IHIuY2hhbmdlVHlwZSgpKVxuICAgIH0sIHtcbiAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgJGUoSWUoci51bml0W3IuaWR4XSksIDEpXG4gICAgICBdKSxcbiAgICAgIF86IDFcbiAgICB9LCA4LCBbXCJzaXplXCJdKSkgOiAoZmUoKSwgeGUoaHQsIHsga2V5OiAxIH0sIFtcbiAgICAgIHVlKGMsIHtcbiAgICAgICAgc2l6ZTogci5zaXplLFxuICAgICAgICBtb2RlbFZhbHVlOiByLm51bSxcbiAgICAgICAgXCJvblVwZGF0ZTptb2RlbFZhbHVlXCI6IGZbMV0gfHwgKGZbMV0gPSAoUykgPT4gci5udW0gPSBTKSxcbiAgICAgICAgb25DaGFuZ2U6IHIuc3VibWl0LFxuICAgICAgICBcImNvbnRyb2xzLXBvc2l0aW9uXCI6IFwicmlnaHRcIlxuICAgICAgfSwgbnVsbCwgOCwgW1wic2l6ZVwiLCBcIm1vZGVsVmFsdWVcIiwgXCJvbkNoYW5nZVwiXSksXG4gICAgICB1ZShiLCB7XG4gICAgICAgIHRyaWdnZXI6IFwiY2xpY2tcIixcbiAgICAgICAgc2l6ZTogXCJzbWFsbFwiXG4gICAgICB9LCB7XG4gICAgICAgIGRyb3Bkb3duOiByZSgoKSA9PiBbXG4gICAgICAgICAgdWUodiwgbnVsbCwge1xuICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAoZmUoITApLCB4ZShodCwgbnVsbCwgaG4oci51bml0LCAoUywgRCkgPT4gKGZlKCksIEtlKHAsIHtcbiAgICAgICAgICAgICAgICBrZXk6IFMsXG4gICAgICAgICAgICAgICAgb25DbGljazogKFQpID0+IHIuY2hhbmdlVHlwZShEKVxuICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgaGUoXCJkaXZcIiwgbnVsbCwgSWUoUyksIDEpXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgXzogMlxuICAgICAgICAgICAgICB9LCAxMDMyLCBbXCJvbkNsaWNrXCJdKSkpLCAxMjgpKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfOiAxXG4gICAgICAgICAgfSlcbiAgICAgICAgXSksXG4gICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICB1ZShkLCB7IHNpemU6IHIuc2l6ZSB9LCB7XG4gICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICRlKEllKHIudW5pdFtyLmlkeF0pLCAxKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfOiAxXG4gICAgICAgICAgfSwgOCwgW1wic2l6ZVwiXSlcbiAgICAgICAgXSksXG4gICAgICAgIF86IDFcbiAgICAgIH0pXG4gICAgXSwgNjQpKVxuICBdKTtcbn1cbmNvbnN0IFUwID0gLyogQF9fUFVSRV9fICovIE10KCQwLCBbW1wicmVuZGVyXCIsIGowXV0pO1xuY29uc3QgejAgPSB3dCh7XG4gIG5hbWU6IFwiRmllbGRJbnB1dFwiLFxuICBpbmplY3Q6IFtcImRlc2lnbmVyXCJdLFxuICBlbWl0czogW1widXBkYXRlOm1vZGVsVmFsdWVcIl0sXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogU3RyaW5nXG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZmllbGRSZWFkb25seSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlc2lnbmVyLnNldHVwU3RhdGUuZmllbGRSZWFkb25seTtcbiAgICB9LFxuICAgIGFjdGl2ZVJ1bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXNpZ25lci5zZXR1cFN0YXRlLmFjdGl2ZVJ1bGU7XG4gICAgfSxcbiAgICB0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVzaWduZXIuc2V0dXBTdGF0ZS50O1xuICAgIH1cbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHRoaXMubW9kZWxWYWx1ZSB8fCBcIlwiLFxuICAgICAgb2xkVmFsdWU6IFwiXCJcbiAgICB9O1xuICB9LFxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUocikge1xuICAgICAgdGhpcy52YWx1ZSA9IHI7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgZ2V0U3ViQ2hpbGRyZW4oKSB7XG4gICAgICBsZXQgciA9IHRoaXMuZGVzaWduZXIuc2V0dXBTdGF0ZS5nZXRTdWJGb3JtQ2hpbGRyZW4odGhpcy5hY3RpdmVSdWxlKSB8fCBbXTtcbiAgICAgIHJldHVybiByID0gZnQudHJ1ZUFycmF5KHIpID8gciA6IHRoaXMuZGVzaWduZXIuc2V0dXBTdGF0ZS5jaGlsZHJlbiwgcjtcbiAgICB9LFxuICAgIGdldFN1YkZpZWxkQ2hpbGRyZW4oKSB7XG4gICAgICBjb25zdCByID0gdGhpcy5nZXRTdWJDaGlsZHJlbigpLCBmID0gW10sIG8gPSAoaSkgPT4gKGkgJiYgaS5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICAgIHQgJiYgdC5fZmNfZHJhZ190YWcgJiYgdC5maWVsZCA/IGYucHVzaCh7IC4uLnQsIGNoaWxkcmVuOiBbXSB9KSA6IHQgJiYgdC5jaGlsZHJlbiAmJiBvKHQuY2hpbGRyZW4pO1xuICAgICAgfSksIGYpO1xuICAgICAgcmV0dXJuIG8ocik7XG4gICAgfSxcbiAgICBjaGVja1ZhbHVlKCkge1xuICAgICAgY29uc3QgciA9IHRoaXMub2xkVmFsdWU7XG4gICAgICBsZXQgZiA9ICh0aGlzLnZhbHVlIHx8IFwiXCIpLnJlcGxhY2UoL1tcXHNcXOOAgF0vZywgXCJcIik7XG4gICAgICBpZiAoZilcbiAgICAgICAgaWYgKC9eW2EtekEtWl0vLnRlc3QoZikpIHtcbiAgICAgICAgICBpZiAociAhPT0gZikge1xuICAgICAgICAgICAgY29uc3QgbyA9IGYuaW5kZXhPZihcIi5cIikgPiAtMTtcbiAgICAgICAgICAgIGlmIChvICYmIChmID0gZi5yZXBsYWNlQWxsKFwiLlwiLCBcIl9cIikpLCB0aGlzLmdldFN1YkZpZWxkQ2hpbGRyZW4oKS5maWx0ZXIoKGkpID0+IGkuZmllbGQgPT09IGYpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgIHJldHVybiBNbih0aGlzLnQoXCJjb21wdXRlZC5maWVsZEV4aXN0XCIsIHsgbGFiZWw6IGYgfSkpLCByO1xuICAgICAgICAgICAgaWYgKG8pXG4gICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgcmV0dXJuIE1uKHRoaXMudChcImNvbXB1dGVkLmZpZWxkQ2hhclwiKSksIHI7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBNbih0aGlzLnQoXCJjb21wdXRlZC5maWVsZEVtcHR5XCIpKSwgcjtcbiAgICAgIHJldHVybiB0aGlzLm9sZFZhbHVlID0gXCJcIiwgZjtcbiAgICB9LFxuICAgIG9uRm9jdXMoKSB7XG4gICAgICB0aGlzLm9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB9LFxuICAgIG1ha2VGaWVsZCgpIHtcbiAgICAgIHRoaXMub2xkVmFsdWUgPSB0aGlzLnZhbHVlLCB0aGlzLnZhbHVlID0gX2UoKSwgdGhpcy5vbklucHV0KCk7XG4gICAgfSxcbiAgICBvbklucHV0KCkge1xuICAgICAgdGhpcy52YWx1ZSAhPT0gdGhpcy5tb2RlbFZhbHVlICYmICh0aGlzLnZhbHVlID0gdGhpcy5jaGVja1ZhbHVlKCksIHRoaXMudmFsdWUgIT09IHRoaXMubW9kZWxWYWx1ZSAmJiB0aGlzLiRlbWl0KFwidXBkYXRlOm1vZGVsVmFsdWVcIiwgdGhpcy52YWx1ZSkpO1xuICAgIH1cbiAgfVxufSksIFYwID0geyBjbGFzczogXCJfZmQtZmllbGQtaW5wdXRcIiB9O1xuZnVuY3Rpb24gVzAociwgZiwgbywgaSwgdCwgcykge1xuICBjb25zdCBkID0gYmUoXCJlbC1pbnB1dFwiKTtcbiAgcmV0dXJuIGZlKCksIHhlKFwiZGl2XCIsIFYwLCBbXG4gICAgdWUoZCwge1xuICAgICAgbW9kZWxWYWx1ZTogci52YWx1ZSxcbiAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiBmWzFdIHx8IChmWzFdID0gKGMpID0+IHIudmFsdWUgPSBjKSxcbiAgICAgIHJlYWRvbmx5OiByLmZpZWxkUmVhZG9ubHksXG4gICAgICBkaXNhYmxlZDogci5maWVsZFJlYWRvbmx5LFxuICAgICAgb25Gb2N1czogci5vbkZvY3VzLFxuICAgICAgb25CbHVyOiByLm9uSW5wdXRcbiAgICB9LCBiaCh7IF86IDIgfSwgW1xuICAgICAgci5maWVsZFJlYWRvbmx5ID8gdm9pZCAwIDoge1xuICAgICAgICBuYW1lOiBcImFwcGVuZFwiLFxuICAgICAgICBmbjogcmUoKCkgPT4gW1xuICAgICAgICAgIGhlKFwiaVwiLCB7XG4gICAgICAgICAgICBjbGFzczogXCJmYy1pY29uIGljb24tYXV0b1wiLFxuICAgICAgICAgICAgb25DbGljazogZlswXSB8fCAoZlswXSA9ICguLi5jKSA9PiByLm1ha2VGaWVsZCAmJiByLm1ha2VGaWVsZCguLi5jKSlcbiAgICAgICAgICB9KVxuICAgICAgICBdKSxcbiAgICAgICAga2V5OiBcIjBcIlxuICAgICAgfVxuICAgIF0pLCAxMDMyLCBbXCJtb2RlbFZhbHVlXCIsIFwicmVhZG9ubHlcIiwgXCJkaXNhYmxlZFwiLCBcIm9uRm9jdXNcIiwgXCJvbkJsdXJcIl0pXG4gIF0pO1xufVxuY29uc3QgRzAgPSAvKiBAX19QVVJFX18gKi8gTXQoejAsIFtbXCJyZW5kZXJcIiwgVzBdXSk7XG5jb25zdCBRMCA9IFwiW1tGT1JNLUNSRUFURS1QUkVGSVgtXCIsIFkwID0gXCItRk9STS1DUkVBVEUtU1VGRklYXV1cIiwgSzAgPSB3dCh7XG4gIG5hbWU6IFwiRm5Db25maWdcIixcbiAgZW1pdHM6IFtcInVwZGF0ZTptb2RlbFZhbHVlXCJdLFxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IFtPYmplY3QsIHZvaWQgMCwgbnVsbF0sXG4gICAgZXZlbnRDb25maWc6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogKCkgPT4gW11cbiAgICB9XG4gIH0sXG4gIGluamVjdDogW1wiZGVzaWduZXJcIl0sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBGbkVkaXRvcjogRmFcbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmlzaWJsZTogITEsXG4gICAgICBhY3RpdmVEYXRhOiBudWxsLFxuICAgICAgZGVmQWN0aXZlOiBcIm5vXCIsXG4gICAgICBldmVudDoge30sXG4gICAgICBjdXM6ICExLFxuICAgICAgZXZlbnRTdHI6IFwiXCJcbiAgICB9O1xuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXNpZ25lci5zZXR1cFN0YXRlLnQ7XG4gICAgfSxcbiAgICBldmVudE51bSgpIHtcbiAgICAgIGxldCByID0gMDtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm1vZGVsVmFsdWUgfHwge30pLmZvckVhY2goKGYpID0+IHtcbiAgICAgICAgdGhpcy5tb2RlbFZhbHVlW2ZdICYmIHIrKztcbiAgICAgIH0pLCByO1xuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICB2aXNpYmxlKHIpIHtcbiAgICAgIHRoaXMuZXZlbnQgPSByID8gdGhpcy5sb2FkRk4oUmEoe30sIHRoaXMubW9kZWxWYWx1ZSB8fCB7fSkpIDoge30sIHIgfHwgdGhpcy5kZXN0cm95KCk7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgZ2V0QXJncyhyKSB7XG4gICAgICByZXR1cm4gci5hcmdzLmpvaW4oXCIsIFwiKTtcbiAgICB9LFxuICAgIGxvYWRGTihyKSB7XG4gICAgICBjb25zdCBmID0ge307XG4gICAgICByZXR1cm4gdGhpcy5ldmVudENvbmZpZy5mb3JFYWNoKChvKSA9PiB7XG4gICAgICAgIGNvbnN0IGkgPSBvLm5hbWUsIHQgPSByW2ldIHx8IFwiXCI7XG4gICAgICAgIGZbaV0gPSB7XG4gICAgICAgICAgaXRlbTogbyxcbiAgICAgICAgICBmbjogdFxuICAgICAgICB9O1xuICAgICAgfSksIGY7XG4gICAgfSxcbiAgICBwYXJzZUZOKHIpIHtcbiAgICAgIGNvbnN0IGYgPSB7fTtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKChvKSA9PiB7XG4gICAgICAgIHJbb10uZm4gJiYgKGZbb10gPSByW29dLmZuKTtcbiAgICAgIH0pLCBmO1xuICAgIH0sXG4gICAgZWRpdChyKSB7XG4gICAgICByLmtleSA9IF9lKCksIHRoaXMuYWN0aXZlRGF0YSA9IHIsIHRoaXMuZXZlbnRTdHIgPSByLmZuIHx8IFEwICsgYGZ1bmN0aW9uICR7ci5pdGVtLm5hbWV9KCR7dGhpcy5nZXRBcmdzKHIuaXRlbSl9KXt9YCArIFkwLCB0aGlzLmRlZkFjdGl2ZSA9IHIuaXRlbS5uYW1lO1xuICAgIH0sXG4gICAgc2F2ZSgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZm4uc2F2ZSgpICYmICh0aGlzLmFjdGl2ZURhdGEuZm4gPSB0aGlzLmV2ZW50U3RyLCB0aGlzLmRlc3Ryb3koKSk7XG4gICAgfSxcbiAgICBkZXN0cm95KCkge1xuICAgICAgdGhpcy5hY3RpdmVEYXRhID0gbnVsbCwgdGhpcy5kZWZBY3RpdmUgPSBcIm5vXCI7XG4gICAgfSxcbiAgICBjbG9zZSgpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH0sXG4gICAgc3VibWl0KCkge1xuICAgICAgaWYgKHRoaXMuYWN0aXZlRGF0YSlcbiAgICAgICAgcmV0dXJuIE1uKHRoaXMudChcImV2ZW50LnNhdmVNc2dcIikpO1xuICAgICAgdGhpcy4kZW1pdChcInVwZGF0ZTptb2RlbFZhbHVlXCIsIHRoaXMucGFyc2VGTih0aGlzLmV2ZW50KSksIHRoaXMudmlzaWJsZSA9ICExLCB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cbn0pLCBYMCA9IHsgY2xhc3M6IFwiX2ZkLWZuLWxpc3RcIiB9LCBKMCA9IFtcIm9uQ2xpY2tcIl07XG5mdW5jdGlvbiBaMChyLCBmLCBvLCBpLCB0LCBzKSB7XG4gIGNvbnN0IGQgPSBiZShcImVsLWJ1dHRvblwiKSwgYyA9IGJlKFwiZWwtYmFkZ2VcIiksIHAgPSBiZShcImVsLXRleHRcIiksIHYgPSBiZShcImVsLWhlYWRlclwiKSwgYiA9IGJlKFwiZWwtbWVudS1pdGVtXCIpLCBTID0gYmUoXCJlbC1tZW51XCIpLCBEID0gYmUoXCJlbC1tYWluXCIpLCBUID0gYmUoXCJlbC1jb250YWluZXJcIiksIG0gPSBiZShcImVsLWFzaWRlXCIpLCB4ID0gYmUoXCJGbkVkaXRvclwiKSwgUiA9IGJlKFwiZWwtZGlhbG9nXCIpO1xuICByZXR1cm4gZmUoKSwgeGUoXCJkaXZcIiwgWDAsIFtcbiAgICB1ZShjLCB7XG4gICAgICB2YWx1ZTogci5ldmVudE51bSxcbiAgICAgIHR5cGU6IFwid2FybmluZ1wiLFxuICAgICAgaGlkZGVuOiByLmV2ZW50TnVtIDwgMVxuICAgIH0sIHtcbiAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgdWUoZCwge1xuICAgICAgICAgIG9uQ2xpY2s6IGZbMF0gfHwgKGZbMF0gPSAodykgPT4gci52aXNpYmxlID0gITApLFxuICAgICAgICAgIHNpemU6IFwic21hbGxcIlxuICAgICAgICB9LCB7XG4gICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgJGUoSWUoci50KFwiZXZlbnQudGl0bGVcIikpLCAxKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF86IDFcbiAgICAgICAgfSlcbiAgICAgIF0pLFxuICAgICAgXzogMVxuICAgIH0sIDgsIFtcInZhbHVlXCIsIFwiaGlkZGVuXCJdKSxcbiAgICB1ZShSLCB7XG4gICAgICBjbGFzczogXCJfZmQtZm4tbGlzdC1kaWFsb2dcIixcbiAgICAgIHRpdGxlOiByLnQoXCJldmVudC50aXRsZVwiKSxcbiAgICAgIG1vZGVsVmFsdWU6IHIudmlzaWJsZSxcbiAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiBmWzRdIHx8IChmWzRdID0gKHcpID0+IHIudmlzaWJsZSA9IHcpLFxuICAgICAgXCJkZXN0cm95LW9uLWNsb3NlXCI6IFwiXCIsXG4gICAgICBcImNsb3NlLW9uLWNsaWNrLW1vZGFsXCI6ICExLFxuICAgICAgXCJhcHBlbmQtdG8tYm9keVwiOiBcIlwiLFxuICAgICAgd2lkdGg6IFwiOTgwcHhcIlxuICAgIH0sIHtcbiAgICAgIGZvb3RlcjogcmUoKCkgPT4gW1xuICAgICAgICBoZShcImRpdlwiLCBudWxsLCBbXG4gICAgICAgICAgdWUoZCwge1xuICAgICAgICAgICAgc2l6ZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBvbkNsaWNrOiBmWzNdIHx8IChmWzNdID0gKHcpID0+IHIudmlzaWJsZSA9ICExKVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgJGUoSWUoci50KFwicHJvcHMuY2FuY2VsXCIpKSwgMSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgXzogMVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHVlKGQsIHtcbiAgICAgICAgICAgIHR5cGU6IFwicHJpbWFyeVwiLFxuICAgICAgICAgICAgc2l6ZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBvbkNsaWNrOiByLnN1Ym1pdCxcbiAgICAgICAgICAgIGNvbG9yOiBcIiMyZjczZmZcIlxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgJGUoSWUoci50KFwicHJvcHMub2tcIikpLCAxKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfOiAxXG4gICAgICAgICAgfSwgOCwgW1wib25DbGlja1wiXSlcbiAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICB1ZShULCB7XG4gICAgICAgICAgY2xhc3M6IFwiX2ZkLWZuLWxpc3QtY29uXCIsXG4gICAgICAgICAgc3R5bGU6IHsgaGVpZ2h0OiBcIjYwMHB4XCIgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgdWUobSwgeyBzdHlsZTogeyB3aWR0aDogXCIzMDBweFwiIH0gfSwge1xuICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgdWUoVCwgeyBjbGFzczogXCJfZmQtZm4tbGlzdC1sXCIgfSwge1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICB1ZSh2LCB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiX2ZkLWZuLWxpc3QtaGVhZFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCI0MHB4XCJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVlKHAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJwcmltYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZShJZShyLnQoXCJldmVudC5saXN0XCIpKSwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdWUoRCwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVlKFMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0LWFjdGl2ZVwiOiByLmRlZkFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxWYWx1ZTogci5hY3RpdmVEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogZlsxXSB8fCAoZlsxXSA9ICh3KSA9PiByLmFjdGl2ZURhdGEgPSB3KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZlKCEwKSwgeGUoaHQsIG51bGwsIGhuKHIuZXZlbnQsICh3LCBBKSA9PiAoZmUoKSwgS2UoYiwgeyBpbmRleDogQSB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJfZmQtZm4tbGlzdC1tZXRob2RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBIbigoRSkgPT4gci5lZGl0KHcpLCBbXCJzdG9wXCJdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGUoXCJzcGFuXCIsIG51bGwsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlKFwiZnVuY3Rpb25cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZShcInNwYW5cIiwgbnVsbCwgSWUoQSksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwgOCwgSjApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDMyLCBbXCJpbmRleFwiXSkpKSwgMjU2KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDgsIFtcImRlZmF1bHQtYWN0aXZlXCIsIFwibW9kZWxWYWx1ZVwiXSlcbiAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB1ZShELCBudWxsLCB7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICB1ZShULCB7IGNsYXNzOiBcIl9mZC1mbi1saXN0LXJcIiB9LCB7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgIHIuYWN0aXZlRGF0YSA/IChmZSgpLCBLZSh2LCB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5OiAwLFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcIl9mZC1mbi1saXN0LWhlYWRcIixcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiNDBweFwiXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB1ZShkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21hbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogci5jbG9zZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGUoSWUoci50KFwicHJvcHMuY2FuY2VsXCIpKSwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDgsIFtcIm9uQ2xpY2tcIl0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdWUoZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicHJpbWFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiByLnNhdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIiMyZjczZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGUoSWUoci50KFwicHJvcHMuc2F2ZVwiKSksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAxXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCA4LCBbXCJvbkNsaWNrXCJdKVxuICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgfSkpIDogamUoXCJcIiwgITApLFxuICAgICAgICAgICAgICAgICAgICByLmFjdGl2ZURhdGEgPyAoZmUoKSwgS2UoRCwgeyBrZXk6IDEgfSwge1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVlKHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiBcImZuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsVmFsdWU6IHIuZXZlbnRTdHIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiBmWzJdIHx8IChmWzJdID0gKHcpID0+IHIuZXZlbnRTdHIgPSB3KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogci5hY3RpdmVEYXRhLml0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogci5hY3RpdmVEYXRhLml0ZW0uYXJnc1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCwgOCwgW1wibW9kZWxWYWx1ZVwiLCBcIm5hbWVcIiwgXCJhcmdzXCJdKVxuICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICAgICAgfSkpIDogamUoXCJcIiwgITApXG4gICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgIF86IDFcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgXzogMVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfOiAxXG4gICAgICAgIH0pXG4gICAgICBdKSxcbiAgICAgIF86IDFcbiAgICB9LCA4LCBbXCJ0aXRsZVwiLCBcIm1vZGVsVmFsdWVcIl0pXG4gIF0pO1xufVxuY29uc3QgcTAgPSAvKiBAX19QVVJFX18gKi8gTXQoSzAsIFtbXCJyZW5kZXJcIiwgWjBdXSksIHZjID0gd3Qoe1xuICBuYW1lOiBcIkRyYWdCb3hcIixcbiAgcHJvcHM6IFtcInJ1bGVcIiwgXCJ0YWdcIiwgXCJmb3JtQ3JlYXRlSW5qZWN0XCIsIFwibGlzdFwiXSxcbiAgcmVuZGVyKHIpIHtcbiAgICBjb25zdCBmID0geyAuLi5yLiRwcm9wcy5ydWxlLnByb3BzLCAuLi5yLiRhdHRycyB9O1xuICAgIGxldCBvID0gXCJfZmQtXCIgKyByLiRwcm9wcy50YWcgKyBcIi1kcmFnIF9mZC1kcmFnLWJveFwiO1xuICAgIE9iamVjdC5rZXlzKHIuJHNsb3RzKS5sZW5ndGggfHwgKG8gKz0gXCIgZHJhZy1ob2xkZXJcIiksIGYuY2xhc3MgPSBvLCBmLm1vZGVsVmFsdWUgPSByLiRwcm9wcy5saXN0IHx8IFsuLi5yLiRwcm9wcy5mb3JtQ3JlYXRlSW5qZWN0LmNoaWxkcmVuXTtcbiAgICBjb25zdCBpID0ge307XG4gICAgcmV0dXJuIHIuJHNsb3RzLmRlZmF1bHQgJiYgci4kc2xvdHMuZGVmYXVsdCgpLmZvckVhY2goKHMpID0+IHtcbiAgICAgIHMua2V5ICYmIChpW3Mua2V5XSA9IHMpO1xuICAgIH0pLCBobyhIcywgZiwge1xuICAgICAgaXRlbTogKHsgZWxlbWVudDogdCwgaW5kZXg6IHMgfSkgPT4ge1xuICAgICAgICB2YXIgYztcbiAgICAgICAgY29uc3QgZCA9IChjID0gdCA9PSBudWxsID8gdm9pZCAwIDogdC5fX2ZjX18pID09IG51bGwgPyB2b2lkIDAgOiBjLmtleTtcbiAgICAgICAgaWYgKGQpIHtcbiAgICAgICAgICBsZXQgcCA9IGlbXCJfXCIgKyB0LnNsb3RdO1xuICAgICAgICAgIGlmIChwID8gcC5jaGlsZHJlbi5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgICB2LmtleSA9PT0gZCArIFwiZmNcIiAmJiAocCA9IHYpO1xuICAgICAgICAgIH0pIDogcCA9IGlbZCArIFwiZmNcIl0sIHApXG4gICAgICAgICAgICByZXR1cm4gaG8oXCJkaXZcIiwgeyBjbGFzczogXCJfZmMtXCIgKyByLiRwcm9wcy50YWcgKyBcIi1pdGVtIF9mZC1kcmFnLWl0ZW1cIiwga2V5OiBkIH0sIHApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBobyhcImRpdlwiLCB7IGNsYXNzOiBcIl9mYy1cIiArIHIuJHByb3BzLnRhZyArIFwiLWl0ZW0gX2ZkLWRyYWctaXRlbVwiLCBrZXk6IHMgfSwgbnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0pO1xuY29uc3QgXzAgPSB3dCh7XG4gIG5hbWU6IFwiRmNUYWJsZVZpZXdcIixcbiAgcHJvcHM6IHtcbiAgICBsYWJlbDogU3RyaW5nLFxuICAgIHdpZHRoOiBbTnVtYmVyLCBTdHJpbmddLFxuICAgIGZvcm1DcmVhdGVJbmplY3Q6IE9iamVjdCxcbiAgICBib3JkZXI6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiAhMFxuICAgIH0sXG4gICAgYm9yZGVyV2lkdGg6IFN0cmluZyxcbiAgICBib3JkZXJDb2xvcjogU3RyaW5nLFxuICAgIHJ1bGU6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7IHJvdzogMSwgY29sOiAxIH0pXG4gICAgfVxuICB9LFxuICBpbmplY3Q6IFtcImRlc2lnbmVyXCJdLFxuICBjb21wb25lbnRzOiB7XG4gICAgRHJhZ1Rvb2w6IGhjLFxuICAgIERyYWdCb3g6IHZjXG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgcnVsZToge1xuICAgICAgaGFuZGxlcigpIHtcbiAgICAgICAgdGhpcy5pbml0UnVsZSgpLCB0aGlzLnN0eWxlID0gdGhpcy5ydWxlLnN0eWxlO1xuICAgICAgfSxcbiAgICAgIGltbWVkaWF0ZTogITBcbiAgICB9XG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVuaXF1ZToge30sXG4gICAgICBzdHlsZToge30sXG4gICAgICBkcmFnUHJvcDoge1xuICAgICAgICBydWxlOiB7XG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIHRhZzogXCJlbC1jb2xcIixcbiAgICAgICAgICAgIGdyb3VwOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGdob3N0Q2xhc3M6IFwiZ2hvc3RcIixcbiAgICAgICAgICAgIGFuaW1hdGlvbjogMTUwLFxuICAgICAgICAgICAgaGFuZGxlOiBcIi5fZmQtZHJhZy1idG5cIixcbiAgICAgICAgICAgIGVtcHR5SW5zZXJ0VGhyZXNob2xkOiAwLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiBcInZlcnRpY2FsXCIsXG4gICAgICAgICAgICBpdGVtS2V5OiBcInR5cGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGFnOiBcInRhYmxlQ2VsbFwiXG4gICAgICB9LFxuICAgICAgbGF0dGljZToge30sXG4gICAgICB1bmk6IHt9XG4gICAgfTtcbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICB0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVzaWduZXIuc2V0dXBTdGF0ZS50O1xuICAgIH0sXG4gICAgdGFibGVDb2xvcigpIHtcbiAgICAgIGNvbnN0IHIgPSB7fTtcbiAgICAgIHJldHVybiB0aGlzLmJvcmRlciA9PT0gITEgPyByLmJvcmRlciA9IFwiMCBub25lXCIgOiAodGhpcy5ib3JkZXJDb2xvciAmJiAoci5ib3JkZXJDb2xvciA9IHRoaXMuYm9yZGVyQ29sb3IpLCB0aGlzLmJvcmRlcldpZHRoICYmIChyLmJvcmRlcldpZHRoID0gdGhpcy5ib3JkZXJXaWR0aCkpLCByO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGdldFVuaXF1ZShyKSB7XG4gICAgICByZXR1cm4gdGhpcy51bmlxdWVbcl0gfHwgKHRoaXMudW5pcXVlW3JdID0gX2UoKSksIHRoaXMudW5pcXVlW3JdO1xuICAgIH0sXG4gICAgZ2V0U2xvdENoaWxkcmVuKHIpIHtcbiAgICAgIGNvbnN0IGYgPSBbXTtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1DcmVhdGVJbmplY3QuY2hpbGRyZW4uZm9yRWFjaCgobykgPT4ge1xuICAgICAgICByLmluZGV4T2Yoby5zbG90KSA+IC0xICYmIGYucHVzaChvKTtcbiAgICAgIH0pLCBmO1xuICAgIH0sXG4gICAgZHJhZ0FkZChyLCBmKSB7XG4gICAgICBjb25zdCBvID0gdGhpcy5kZXNpZ25lci5zZXR1cFN0YXRlLCBpID0gdGhpcy5mb3JtQ3JlYXRlSW5qZWN0LmNoaWxkcmVuLCB0ID0gYCR7Zi5waWR9OiR7Zi5pZHh9YCwgcyA9IHIuaXRlbS5fdW5kZXJseWluZ192bV8sIGQgPSBvLmFkZFJ1bGUgJiYgby5hZGRSdWxlLmNoaWxkcmVuID09PSBvLm1vdmVSdWxlO1xuICAgICAgZCAmJiBvLm1vdmVSdWxlLnNwbGljZShvLm1vdmVSdWxlLmluZGV4T2YocyksIDEpO1xuICAgICAgbGV0IGMgPSAwO1xuICAgICAgY29uc3QgcCA9IFwiZHJhZ1wiICsgZi5waWQgKyBmLmlkeDtcbiAgICAgIGlmICh0aGlzLiRyZWZzW3BdWzBdLmxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGxldCB2ID0gdGhpcy4kcmVmc1twXVswXS5saXN0W3IubmV3SW5kZXggPyByLm5ld0luZGV4IC0gMSA6IDBdO1xuICAgICAgICBjID0gaS5pbmRleE9mKHYpICsgKHIubmV3SW5kZXggPyAxIDogMCk7XG4gICAgICB9IGVsc2UgaWYgKGkubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHYgPSBPYmplY3Qua2V5cyh0aGlzLiRyZWZzKTtcbiAgICAgICAgZm9yIChsZXQgYiA9IHYuaW5kZXhPZihwKSAtIDE7IGIgPj0gMDsgYi0tKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLiRyZWZzW3ZbYl1dIHx8ICF0aGlzLiRyZWZzW3ZbYl1dLmxlbmd0aClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IFMgPSB0aGlzLiRyZWZzW3ZbYl1dWzBdLmxpc3QgfHwgW107XG4gICAgICAgICAgaWYgKFMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjID0gaS5pbmRleE9mKFNbUy5sZW5ndGggLSAxXSkgKyAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByLm5ld0luZGV4ID0gYywgZCA/IChzLnNsb3QgPSB0LCBpLnNwbGljZShyLm5ld0luZGV4LCAwLCBzKSwgby5hZGRlZCA9ICEwLCBvLmhhbmRsZVNvcnRBZnRlcih7IHJ1bGU6IHMgfSkpIDogby5kcmFnQWRkKGksIHIsIGAke2YucGlkfToke2YuaWR4fWApO1xuICAgIH0sXG4gICAgZHJhZ0VuZChyLCBmKSB7XG4gICAgICBjb25zdCBvID0gdGhpcy5kZXNpZ25lci5zZXR1cFN0YXRlLCBpID0gdGhpcy5mb3JtQ3JlYXRlSW5qZWN0LmNoaWxkcmVuLCB0ID0gci5pdGVtLl91bmRlcmx5aW5nX3ZtXywgcyA9IGkuaW5kZXhPZih0KTtcbiAgICAgIHIubmV3SW5kZXggPSBzICsgKHIubmV3SW5kZXggLSByLm9sZEluZGV4KSwgci5vbGRJbmRleCA9IHMsIG8uZHJhZ0VuZCh0aGlzLmZvcm1DcmVhdGVJbmplY3QuY2hpbGRyZW4sIHIsIGAke2YucGlkfToke2YuaWR4fWApO1xuICAgIH0sXG4gICAgZHJhZ1N0YXJ0KCkge1xuICAgICAgdGhpcy5kZXNpZ25lci5zZXR1cFN0YXRlLmRyYWdTdGFydCh0aGlzLmZvcm1DcmVhdGVJbmplY3QuY2hpbGRyZW4pO1xuICAgIH0sXG4gICAgZHJhZ1VuY2hvb3NlKHIpIHtcbiAgICAgIHRoaXMuZGVzaWduZXIuc2V0dXBTdGF0ZS5kcmFnVW5jaG9vc2UodGhpcy5mb3JtQ3JlYXRlSW5qZWN0LmNoaWxkcmVuLCByKTtcbiAgICB9LFxuICAgIGluaXRSdWxlKCkge1xuICAgICAgY29uc3QgciA9IHRoaXMucnVsZTtcbiAgICAgIHIuc3R5bGUgfHwgKHIuc3R5bGUgPSB7fSksIHIuY2xhc3MgfHwgKHIuY2xhc3MgPSB7fSksIHIubGF5b3V0IHx8IChyLmxheW91dCA9IFtdKSwgci5yb3cgfHwgKHIucm93ID0gMSksIHIuY29sIHx8IChyLmNvbCA9IDEpO1xuICAgIH0sXG4gICAgYWN0aXZlKHIpIHtcbiAgICAgIGNvbnN0IGYgPSBgJHtyLnBpZH06JHtyLmlkeH1gLCBvID0gdGhpcy5ydWxlLnN0eWxlW2ZdIHx8IHt9O1xuICAgICAgdGhpcy5kZXNpZ25lci5zZXR1cFN0YXRlLmN1c3RvbUFjdGl2ZSh7XG4gICAgICAgIG5hbWU6IFwiZmNUYWJsZUdyaWRcIixcbiAgICAgICAgcHJvcHM6ICgpID0+IFt7XG4gICAgICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgICAgIGZpZWxkOiBcIndpZHRoXCIsXG4gICAgICAgICAgdGl0bGU6IHRoaXMudChcInByb3BzLndpZHRoXCIpXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICAgICAgZmllbGQ6IFwiaGVpZ2h0XCIsXG4gICAgICAgICAgdGl0bGU6IHRoaXMudChcInByb3BzLmhlaWdodFwiKVxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgICAgIGZpZWxkOiBcImNsYXNzXCIsXG4gICAgICAgICAgdGl0bGU6IHRoaXMudChcInByb3BzLmNsYXNzXCIpXG4gICAgICAgIH1dLFxuICAgICAgICBjaGFuZ2U6IChpLCB0KSA9PiB7XG4gICAgICAgICAgdGhpcy5ydWxlLnN0eWxlW2ZdIHx8ICh0aGlzLnJ1bGUuc3R5bGVbZl0gPSB7fSksIHRoaXMucnVsZS5zdHlsZVtmXVtpXSA9IHQ7XG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1EYXRhOiB7XG4gICAgICAgICAgaGVpZ2h0OiBvLmhlaWdodCB8fCBcIlwiLFxuICAgICAgICAgIHdpZHRoOiBvLndpZHRoIHx8IFwiXCIsXG4gICAgICAgICAgY2xhc3M6IG8uY2xhc3MgfHwgXCJcIlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNvbW1hbmQocikge1xuICAgICAgdGhpc1tyWzBdXSguLi5yWzFdKTtcbiAgICB9LFxuICAgIHJtU2xvdChyLCBmKSB7XG4gICAgICBjb25zdCBvID0gT2JqZWN0LmtleXMociksIGkgPSB0aGlzLmZvcm1DcmVhdGVJbmplY3QuY2hpbGRyZW47XG4gICAgICBsZXQgdCA9IDA7XG4gICAgICBbLi4uaV0uZm9yRWFjaCgocywgZCkgPT4ge1xuICAgICAgICBpZiAoIXMuc2xvdClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBjO1xuICAgICAgICBmLmluZGV4T2Yocy5zbG90KSA+IC0xID8gKGkuc3BsaWNlKGQgLSB0LCAxKSwgdCsrKSA6IChjID0gby5pbmRleE9mKHMuc2xvdCkpID4gLTEgJiYgKHMuc2xvdCA9IHJbb1tjXV0pO1xuICAgICAgfSksIGYuZm9yRWFjaCgocykgPT4ge1xuICAgICAgICBkZWxldGUgdGhpcy5zdHlsZVtzXTtcbiAgICAgIH0pLCB0aGlzLmxvYWRSdWxlKCk7XG4gICAgfSxcbiAgICBybVJvdyhyKSB7XG4gICAgICB0aGlzLnJ1bGUucm93LS07XG4gICAgICBjb25zdCBmID0ge30sIG8gPSBbXTtcbiAgICAgIGZvciAobGV0IHMgPSByLnBpZDsgcyA8IHRoaXMucnVsZS5yb3cgKyAxOyBzKyspXG4gICAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgdGhpcy5ydWxlLmNvbDsgZCsrKVxuICAgICAgICAgIHMgPT09IHIucGlkID8gby5wdXNoKGAke3IucGlkfToke2R9YCkgOiBmW2Ake3N9OiR7ZH1gXSA9IGAke3MgLSAxfToke2R9YDtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGNvbnN0IHQgPSB0aGlzLnJ1bGUubGF5b3V0O1xuICAgICAgWy4uLnRdLmZvckVhY2goKHMsIGQpID0+IHtcbiAgICAgICAgcy50b3AgPT09IHIucGlkICYmICh0LnNwbGljZShkIC0gaSwgMSksIGkrKyk7XG4gICAgICB9KSwgdC5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgIHMudG9wID4gci5waWQgJiYgcy50b3AtLTtcbiAgICAgIH0pLCB0aGlzLnJtU2xvdChmLCBvKTtcbiAgICB9LFxuICAgIHJtQ29sKHIpIHtcbiAgICAgIHRoaXMucnVsZS5jb2wtLTtcbiAgICAgIGNvbnN0IGYgPSB7fSwgbyA9IFtdO1xuICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCB0aGlzLnJ1bGUucm93OyBzKyspIHtcbiAgICAgICAgZm9yIChsZXQgZCA9IHIuaWR4ICsgMTsgZCA8IHRoaXMucnVsZS5jb2wgKyAxOyBkKyspXG4gICAgICAgICAgZltgJHtzfToke2R9YF0gPSBgJHtzfToke2QgLSAxfWA7XG4gICAgICAgIG8ucHVzaChgJHtzfToke3IuaWR4fWApO1xuICAgICAgfVxuICAgICAgbGV0IGkgPSAwO1xuICAgICAgY29uc3QgdCA9IHRoaXMucnVsZS5sYXlvdXQ7XG4gICAgICBbLi4udF0uZm9yRWFjaCgocywgZCkgPT4ge1xuICAgICAgICBzLmxlZnQgPT09IHIuaWR4ICYmICh0LnNwbGljZShkIC0gaSwgMSksIGkrKyk7XG4gICAgICB9KSwgdC5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgIHMubGVmdCA+IHIuaWR4ICYmIHMubGVmdC0tO1xuICAgICAgfSksIHRoaXMucm1TbG90KGYsIG8pO1xuICAgIH0sXG4gICAgc3BsaXRSb3cocikge1xuICAgICAgY29uc3QgZiA9IHIuZGF0YS5sYXlvdXQsIG8gPSBmLnJvdztcbiAgICAgIGlmIChmLnJvdyA9IDAsIG8gPiAxKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG87IGkrKylcbiAgICAgICAgICB0aGlzLnJ1bGUubGF5b3V0LnB1c2goe1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHRvcDogZi50b3AgKyBpXG4gICAgICAgICAgfSk7XG4gICAgICB0aGlzLmxvYWRSdWxlKCk7XG4gICAgfSxcbiAgICBzcGxpdENvbChyKSB7XG4gICAgICBjb25zdCBmID0gci5kYXRhLmxheW91dCwgbyA9IGYuY29sO1xuICAgICAgaWYgKGYuY29sID0gMCwgbyA+IDEpXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbzsgaSsrKVxuICAgICAgICAgIHRoaXMucnVsZS5sYXlvdXQucHVzaCh7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgbGVmdDogZi5sZWZ0ICsgaVxuICAgICAgICAgIH0pO1xuICAgICAgdGhpcy5sb2FkUnVsZSgpO1xuICAgIH0sXG4gICAgbWFrZU1hcChyKSB7XG4gICAgICBsZXQgZiA9IFtdO1xuICAgICAgZm9yIChsZXQgbyA9IHIudG9wOyBvIDwgKHIucm93IHx8IHIudG9wICsgMSk7IG8rKylcbiAgICAgICAgZm9yIChsZXQgaSA9IHIubGVmdDsgaSA8IChyLmNvbCB8fCByLmxlZnQgKyAxKTsgaSsrKVxuICAgICAgICAgIGYucHVzaChgJHtvfToke2l9YCk7XG4gICAgICByZXR1cm4gZjtcbiAgICB9LFxuICAgIG1lcmdlUmlnaHQocikge1xuICAgICAgbGV0IGY7XG4gICAgICBpZiAoci5kYXRhLmxheW91dCkge1xuICAgICAgICBjb25zdCBpID0gKHIuZGF0YS5sYXlvdXQuY29sIHx8IDEpICsgMTtcbiAgICAgICAgci5kYXRhLmxheW91dC5jb2wgPSBpICsgci5pZHggPiB0aGlzLnJ1bGUuY29sID8gdGhpcy5ydWxlLmNvbCAtIHIuaWR4IDogaSwgZiA9IHIuZGF0YS5sYXlvdXQ7XG4gICAgICB9IGVsc2VcbiAgICAgICAgZiA9IHtcbiAgICAgICAgICB0b3A6IHIucGlkLFxuICAgICAgICAgIGxlZnQ6IHIuaWR4LFxuICAgICAgICAgIGNvbDogMlxuICAgICAgICB9LCB0aGlzLnJ1bGUubGF5b3V0LnB1c2goZik7XG4gICAgICBjb25zdCBvID0gdGhpcy5tYWtlTWFwKGYpO1xuICAgICAgdGhpcy5mb3JtQ3JlYXRlSW5qZWN0LmNoaWxkcmVuLmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgIWkuc2xvdCB8fCBvLmluZGV4T2YoaS5zbG90KSA+IC0xICYmIChpLnNsb3QgPSBgJHtyLnBpZH06JHtyLmlkeH1gKTtcbiAgICAgIH0pLCB0aGlzLmxvYWRSdWxlKCk7XG4gICAgfSxcbiAgICBtZXJnZUJvdHRvbShyKSB7XG4gICAgICBsZXQgZjtcbiAgICAgIGlmIChyLmRhdGEubGF5b3V0KSB7XG4gICAgICAgIGNvbnN0IGkgPSAoci5kYXRhLmxheW91dC5yb3cgfHwgMSkgKyAxO1xuICAgICAgICByLmRhdGEubGF5b3V0LnJvdyA9IGkgKyBpLnBpZCA+IHRoaXMucnVsZS5jb2wgPyB0aGlzLnJ1bGUuY29sIC0gci5waWQgOiBpLCBmID0gci5kYXRhLmxheW91dDtcbiAgICAgIH0gZWxzZVxuICAgICAgICBmID0ge1xuICAgICAgICAgIHRvcDogci5waWQsXG4gICAgICAgICAgbGVmdDogci5pZHgsXG4gICAgICAgICAgcm93OiAyXG4gICAgICAgIH0sIHRoaXMucnVsZS5sYXlvdXQucHVzaChmKTtcbiAgICAgIGNvbnN0IG8gPSB0aGlzLm1ha2VNYXAoZik7XG4gICAgICB0aGlzLmZvcm1DcmVhdGVJbmplY3QuY2hpbGRyZW4uZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgICAhaS5zbG90IHx8IG8uaW5kZXhPZihpLnNsb3QpID4gLTEgJiYgKGkuc2xvdCA9IGAke3IucGlkfToke3IuaWR4fWApO1xuICAgICAgfSksIHRoaXMubG9hZFJ1bGUoKTtcbiAgICB9LFxuICAgIGFkZENvbChyLCBmKSB7XG4gICAgICBpZiAodGhpcy5ydWxlLmNvbCsrLCB0aGlzLnJ1bGUubGF5b3V0LmZvckVhY2goKG8pID0+IHtcbiAgICAgICAgby5sZWZ0ID4gKGYgPyByLmlkeCAtIDEgOiByLmlkeCkgJiYgby5sZWZ0Kys7XG4gICAgICB9KSwgZiB8fCByLmlkeCA8IHRoaXMucnVsZS5jb2wgLSAyKSB7XG4gICAgICAgIGNvbnN0IG8gPSB7fTtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0aGlzLnJ1bGUucm93OyB0KyspXG4gICAgICAgICAgZm9yIChsZXQgcyA9IGYgPyByLmlkeCAtIDEgOiByLmlkeCArIDE7IHMgPCB0aGlzLnJ1bGUuY29sIC0gMTsgcysrKVxuICAgICAgICAgICAgb1tgJHt0fToke3N9YF0gPSBgJHt0fToke3MgKyAxfWA7XG4gICAgICAgIGNvbnN0IGkgPSBPYmplY3Qua2V5cyhvKTtcbiAgICAgICAgdGhpcy5mb3JtQ3JlYXRlSW5qZWN0LmNoaWxkcmVuLmZvckVhY2goKHQpID0+IHtcbiAgICAgICAgICBsZXQgcztcbiAgICAgICAgICB0LnNsb3QgJiYgKHMgPSBpLmluZGV4T2YodC5zbG90KSkgPiAtMSAmJiAodC5zbG90ID0gb1tpW3NdXSk7XG4gICAgICAgIH0pLCBpLmZvckVhY2goKHQpID0+IHtcbiAgICAgICAgICB0aGlzLnN0eWxlW3RdICYmICh0aGlzLnN0eWxlW29bdF1dID0gdGhpcy5zdHlsZVt0XSwgZGVsZXRlIHRoaXMuc3R5bGVbdF0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZFJ1bGUoKTtcbiAgICB9LFxuICAgIGFkZFJvdyhyLCBmKSB7XG4gICAgICBpZiAodGhpcy5ydWxlLnJvdysrLCB0aGlzLnJ1bGUubGF5b3V0LmZvckVhY2goKG8pID0+IHtcbiAgICAgICAgby50b3AgPiAoZiA/IHIucGlkIC0gMSA6IHIucGlkKSAmJiBvLnRvcCsrO1xuICAgICAgfSksIGYgfHwgci5waWQgPCB0aGlzLnJ1bGUucm93IC0gMikge1xuICAgICAgICBjb25zdCBvID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSBmID8gci5waWQgLSAxIDogci5waWQgKyAxOyB0IDwgdGhpcy5ydWxlLnJvdzsgdCsrKVxuICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgdGhpcy5ydWxlLmNvbDsgcysrKVxuICAgICAgICAgICAgb1tgJHt0fToke3N9YF0gPSBgJHt0ICsgMX06JHtzfWA7XG4gICAgICAgIGNvbnN0IGkgPSBPYmplY3Qua2V5cyhvKTtcbiAgICAgICAgdGhpcy5mb3JtQ3JlYXRlSW5qZWN0LmNoaWxkcmVuLmZvckVhY2goKHQpID0+IHtcbiAgICAgICAgICBsZXQgcztcbiAgICAgICAgICB0LnNsb3QgJiYgKHMgPSBpLmluZGV4T2YodC5zbG90KSkgPiAtMSAmJiAodC5zbG90ID0gb1tpW3NdXSk7XG4gICAgICAgIH0pLCBpLnJldmVyc2UoKS5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICAgICAgdGhpcy5zdHlsZVt0XSAmJiAodGhpcy5zdHlsZVtvW3RdXSA9IHRoaXMuc3R5bGVbdF0sIGRlbGV0ZSB0aGlzLnN0eWxlW3RdKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvYWRSdWxlKCk7XG4gICAgfSxcbiAgICBsb2FkUnVsZSgpIHtcbiAgICAgIGNvbnN0IHIgPSBbXSwgZiA9IHRoaXMucnVsZSB8fCB7IHJvdzogMSwgY29sOiAxIH07XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGYucm93OyBpKyspIHtcbiAgICAgICAgY29uc3QgdCA9IFtdO1xuICAgICAgICByLnB1c2godCk7XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgZi5jb2w7IHMrKylcbiAgICAgICAgICB0LnB1c2goeyByb3dzcGFuOiAxLCBjb2xzcGFuOiAxLCBzbG90OiBbXSwgc2hvdzogITAsIGlkOiB0aGlzLmdldFVuaXF1ZShgJHtpfSR7c31gKSB9KTtcbiAgICAgIH1cbiAgICAgIFsuLi5mLmxheW91dCB8fCBbXV0uZm9yRWFjaCgoaSwgdCkgPT4ge1xuICAgICAgICBpZiAoKCFpLnJvdyB8fCBpLnJvdyA8PSAwKSAmJiAoIWkuY29sIHx8IGkuY29sIDw9IDApIHx8ICFyW2kudG9wXSB8fCAhcltpLnRvcF1baS5sZWZ0XSB8fCAhcltpLnRvcF1baS5sZWZ0XS5zaG93KSB7XG4gICAgICAgICAgZi5sYXlvdXQuc3BsaWNlKHQsIDEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzID0gcltpLnRvcF1baS5sZWZ0XTtcbiAgICAgICAgcy5sYXlvdXQgPSBpO1xuICAgICAgICBsZXQgZCA9IDEsIGMgPSAxO1xuICAgICAgICBpZiAoaS5jb2wgJiYgKGQgPSBpLmNvbCArIGkubGVmdCA+IGYuY29sID8gZi5jb2wgLSBpLmxlZnQgOiBpLmNvbCwgcy5jb2xzcGFuID0gZCksIGkucm93ICYmIChjID0gaS5yb3cgKyBpLnRvcCA+IGYucm93ID8gZi5yb3cgLSBpLnRvcCA6IGkucm93LCBzLnJvd3NwYW4gPSBjKSwgYyAmJiBkKVxuICAgICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgYzsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gcltpLnRvcCArIHBdO1xuICAgICAgICAgICAgaWYgKHYpXG4gICAgICAgICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgZDsgYisrKVxuICAgICAgICAgICAgICAgICFiICYmICFwIHx8ICh2W2kubGVmdCArIGJdICYmICh2W2kubGVmdCArIGJdLnNob3cgPSAhMSksIHMuc2xvdC5wdXNoKGAke2kudG9wICsgcH06JHtpLmxlZnQgKyBifWApKTtcbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG8gPSAoaSkgPT4gISEoIWkgfHwgaS5sYXlvdXQgfHwgIWkuc2hvdyk7XG4gICAgICByLmZvckVhY2goKGksIHQpID0+IHtcbiAgICAgICAgaS5mb3JFYWNoKChzLCBkKSA9PiB7XG4gICAgICAgICAgbGV0IGMgPSAhMSwgcCA9ICExO1xuICAgICAgICAgIGlmIChzLmxheW91dCkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHMubGF5b3V0LmNvbCB8fCAxLCBiID0gcy5sYXlvdXQucm93IHx8IDE7XG4gICAgICAgICAgICBmb3IgKGxldCBTID0gMDsgUyA8IHY7IFMrKylcbiAgICAgICAgICAgICAgaWYgKCFyW3QgKyBiXSB8fCBvKHJbdCArIGJdW2QgKyBTXSkpIHtcbiAgICAgICAgICAgICAgICBwID0gITA7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IFMgPSAwOyBTIDwgYjsgUysrKVxuICAgICAgICAgICAgICBpZiAoIXJbdCArIFNdIHx8IG8oclt0ICsgU11bZCArIHZdKSkge1xuICAgICAgICAgICAgICAgIGMgPSAhMDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgYyA9IG8oaVtkICsgMV0pLCBwID0gclt0ICsgMV0gPyBvKHJbdCArIDFdW2RdKSA6ICEwO1xuICAgICAgICAgIHMucmlnaHQgPSBjLCBzLmJvdHRvbSA9IHA7XG4gICAgICAgIH0pO1xuICAgICAgfSksIHRoaXMubGF0dGljZSA9IHIsIHRoaXMuZm9ybUNyZWF0ZUluamVjdC5ydWxlLnByb3BzLnJ1bGUgPSBmO1xuICAgIH1cbiAgfSxcbiAgYmVmb3JlTW91bnQoKSB7XG4gICAgdGhpcy5sb2FkUnVsZSgpO1xuICB9XG59KSwgZUEgPSB7IGNsYXNzOiBcIl9mZC10YWJsZS12aWV3XCIgfSwgdEEgPSB7IGNsYXNzOiBcIl9mZC10YWJsZS12aWV3LWNlbGxcIiB9LCBuQSA9IFtcIm9uQ2xpY2tcIl0sIHJBID0gLyogQF9fUFVSRV9fICovIGhlKFwiaVwiLCB7IGNsYXNzOiBcImZjLWljb24gaWNvbi1hZGQtdHJcIiB9LCBudWxsLCAtMSksIGlBID0gW1xuICByQVxuXSwgb0EgPSBbXCJvbkNsaWNrXCJdLCBhQSA9IC8qIEBfX1BVUkVfXyAqLyBoZShcImlcIiwge1xuICBjbGFzczogXCJmYy1pY29uIGljb24tYWRkLXRyXCIsXG4gIHN0eWxlOiB7IHRyYW5zZm9ybTogXCJyb3RhdGUoOTBkZWcpXCIgfVxufSwgbnVsbCwgLTEpLCBsQSA9IFtcbiAgYUFcbl0sIHNBID0geyBjbGFzczogXCJfZmQtZHJhZy1idG4gX2ZkLXRhYmxlLXZpZXctYnRuXCIgfSwgdUEgPSAvKiBAX19QVVJFX18gKi8gaGUoXCJpXCIsIHsgY2xhc3M6IFwiZmMtaWNvbiBpY29uLXNldHRpbmdcIiB9LCBudWxsLCAtMSk7XG5mdW5jdGlvbiBmQShyLCBmLCBvLCBpLCB0LCBzKSB7XG4gIGNvbnN0IGQgPSBiZShcIkRyYWdCb3hcIiksIGMgPSBiZShcImVsLWRyb3Bkb3duLWl0ZW1cIiksIHAgPSBiZShcImVsLWRyb3Bkb3duLW1lbnVcIiksIHYgPSBiZShcImVsLWRyb3Bkb3duXCIpLCBiID0gYmUoXCJEcmFnVG9vbFwiKTtcbiAgcmV0dXJuIGZlKCksIHhlKFwiZGl2XCIsIGVBLCBbXG4gICAgaGUoXCJ0YWJsZVwiLCB7XG4gICAgICBib3JkZXI6IFwiMVwiLFxuICAgICAgY2VsbHNwYWNpbmc6IFwiMFwiLFxuICAgICAgY2VsbHBhZGRpbmc6IFwiMFwiLFxuICAgICAgc3R5bGU6IENvKHIudGFibGVDb2xvcilcbiAgICB9LCBbXG4gICAgICAoZmUoITApLCB4ZShodCwgbnVsbCwgaG4oci5ydWxlLnJvdywgKFMsIEQpID0+IChmZSgpLCB4ZShcInRyXCIsIHsga2V5OiBEIH0sIFtcbiAgICAgICAgKGZlKCEwKSwgeGUoaHQsIG51bGwsIGhuKHIucnVsZS5jb2wsIChULCBtKSA9PiAoZmUoKSwgeGUoaHQsIG51bGwsIFtcbiAgICAgICAgICByLmxhdHRpY2VbRF1bbV0uc2hvdyA/IChmZSgpLCB4ZShcInRkXCIsIEVvKHtcbiAgICAgICAgICAgIGtleTogYCR7RH0ke219YCxcbiAgICAgICAgICAgIHJlZl9mb3I6ICEwXG4gICAgICAgICAgfSwgci5sYXR0aWNlW0RdW21dID8geyBjb2xzcGFuOiByLmxhdHRpY2VbRF1bbV0uY29sc3Bhbiwgcm93c3Bhbjogci5sYXR0aWNlW0RdW21dLnJvd3NwYW4gfSA6IHt9LCB7XG4gICAgICAgICAgICBzdHlsZTogW3IudGFibGVDb2xvciwgci5zdHlsZSAmJiByLnN0eWxlW2Ake0R9OiR7bX1gXSB8fCB7fV0sXG4gICAgICAgICAgICBjbGFzczogci5ydWxlLmNsYXNzICYmIHIucnVsZS5jbGFzc1tgJHtEfToke219YF0gfHwgXCJcIlxuICAgICAgICAgIH0pLCBbXG4gICAgICAgICAgICBoZShcImRpdlwiLCB0QSwgW1xuICAgICAgICAgICAgICB1ZShiLCB7XG4gICAgICAgICAgICAgICAgXCJkcmFnLWJ0blwiOiAhMSxcbiAgICAgICAgICAgICAgICBcImhhbmRsZS1idG5cIjogITAsXG4gICAgICAgICAgICAgICAgb25BY3RpdmU6ICh4KSA9PiByLmFjdGl2ZSh7IHBpZDogRCwgaWR4OiBtIH0pLFxuICAgICAgICAgICAgICAgIHVuaXF1ZTogci5sYXR0aWNlW0RdW21dLmlkXG4gICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBoYW5kbGU6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgIGhlKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiX2ZkLWRyYWctYnRuIF9mZC10YWJsZS12aWV3LWJ0blwiLFxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoeCkgPT4gci5hZGRSb3coeyBwaWQ6IEQsIGlkeDogbSwgZGF0YTogci5sYXR0aWNlW0RdW21dIH0sIDApXG4gICAgICAgICAgICAgICAgICB9LCBpQSwgOCwgbkEpLFxuICAgICAgICAgICAgICAgICAgaGUoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJfZmQtZHJhZy1idG4gX2ZkLXRhYmxlLXZpZXctYnRuXCIsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICh4KSA9PiByLmFkZENvbCh7IHBpZDogRCwgaWR4OiBtLCBkYXRhOiByLmxhdHRpY2VbRF1bbV0gfSwgMClcbiAgICAgICAgICAgICAgICAgIH0sIGxBLCA4LCBvQSksXG4gICAgICAgICAgICAgICAgICBoZShcImRpdlwiLCBzQSwgW1xuICAgICAgICAgICAgICAgICAgICB1ZSh2LCB7XG4gICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcjogXCJjbGlja1wiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uQ29tbWFuZDogci5jb21tYW5kXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICBkcm9wZG93bjogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgdWUocCwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWUoYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogW1wiYWRkQ29sXCIsIFt7IHBpZDogRCwgaWR4OiBtLCBkYXRhOiByLmxhdHRpY2VbRF1bbV0gfSwgMV1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZShJZShyLnQoXCJ0YWJsZU9wdGlvbnMuYWRkTGVmdFwiKSksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDMyLCBbXCJjb21tYW5kXCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZShjLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiBbXCJhZGRDb2xcIiwgW3sgcGlkOiBELCBpZHg6IG0sIGRhdGE6IHIubGF0dGljZVtEXVttXSB9LCAwXV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlKEllKHIudChcInRhYmxlT3B0aW9ucy5hZGRSaWdodFwiKSksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDMyLCBbXCJjb21tYW5kXCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZShjLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiBbXCJhZGRSb3dcIiwgW3sgcGlkOiBELCBpZHg6IG0sIGRhdGE6IHIubGF0dGljZVtEXVttXSB9LCAxXV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlKEllKHIudChcInRhYmxlT3B0aW9ucy5hZGRUb3BcIikpLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAzMiwgW1wiY29tbWFuZFwiXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWUoYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogW1wiYWRkUm93XCIsIFt7IHBpZDogRCwgaWR4OiBtLCBkYXRhOiByLmxhdHRpY2VbRF1bbV0gfSwgMF1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZShJZShyLnQoXCJ0YWJsZU9wdGlvbnMuYWRkQm90dG9tXCIpKSwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzogMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMzIsIFtcImNvbW1hbmRcIl0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVlKGMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZWQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogci5sYXR0aWNlW0RdW21dLnJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogW1wibWVyZ2VSaWdodFwiLCBbeyBwaWQ6IEQsIGlkeDogbSwgZGF0YTogci5sYXR0aWNlW0RdW21dIH1dXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGUoSWUoci50KFwidGFibGVPcHRpb25zLm1lcmdlUmlnaHRcIikpLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAzMiwgW1wiZGlzYWJsZWRcIiwgXCJjb21tYW5kXCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZShjLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogci5sYXR0aWNlW0RdW21dLmJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IFtcIm1lcmdlQm90dG9tXCIsIFt7IHBpZDogRCwgaWR4OiBtLCBkYXRhOiByLmxhdHRpY2VbRF1bbV0gfV1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZShJZShyLnQoXCJ0YWJsZU9wdGlvbnMubWVyZ2VCb3R0b21cIikpLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAzMiwgW1wiZGlzYWJsZWRcIiwgXCJjb21tYW5kXCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZShjLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVkOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICEoci5sYXR0aWNlW0RdW21dLmxheW91dCAmJiByLmxhdHRpY2VbRF1bbV0ubGF5b3V0LmNvbCA+IDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogW1wic3BsaXRDb2xcIiwgW3sgcGlkOiBELCBpZHg6IG0sIGRhdGE6IHIubGF0dGljZVtEXVttXSB9XV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlKEllKHIudChcInRhYmxlT3B0aW9ucy5zcGxpdENvbFwiKSksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDMyLCBbXCJkaXNhYmxlZFwiLCBcImNvbW1hbmRcIl0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVlKGMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhKHIubGF0dGljZVtEXVttXS5sYXlvdXQgJiYgci5sYXR0aWNlW0RdW21dLmxheW91dC5yb3cgPiAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IFtcInNwbGl0Um93XCIsIFt7IHBpZDogRCwgaWR4OiBtLCBkYXRhOiByLmxhdHRpY2VbRF1bbV0gfV1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZShJZShyLnQoXCJ0YWJsZU9wdGlvbnMuc3BsaXRSb3dcIikpLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAzMiwgW1wiZGlzYWJsZWRcIiwgXCJjb21tYW5kXCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZShjLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVkOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHIucnVsZS5jb2wgPCAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogW1wicm1Db2xcIiwgW3sgcGlkOiBELCBpZHg6IG0sIGRhdGE6IHIubGF0dGljZVtEXVttXSB9XV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlKEllKHIudChcInRhYmxlT3B0aW9ucy5ybUNvbFwiKSksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF86IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDMyLCBbXCJkaXNhYmxlZFwiLCBcImNvbW1hbmRcIl0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVlKGMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiByLnJ1bGUucm93IDwgMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IFtcInJtUm93XCIsIFt7IHBpZDogRCwgaWR4OiBtLCBkYXRhOiByLmxhdHRpY2VbRF1bbV0gfV1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZShJZShyLnQoXCJ0YWJsZU9wdGlvbnMucm1Sb3dcIikpLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfOiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAzMiwgW1wiZGlzYWJsZWRcIiwgXCJjb21tYW5kXCJdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXzogMlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAyNClcbiAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB1QVxuICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgIF86IDJcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAzMiwgW1wib25Db21tYW5kXCJdKVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgICAgICAgICB1ZShkLCBFbyh7IHJlZl9mb3I6ICEwIH0sIHIuZHJhZ1Byb3AsIHtcbiAgICAgICAgICAgICAgICAgICAgb25BZGQ6ICh4KSA9PiByLmRyYWdBZGQoeCwgeyBwaWQ6IEQsIGlkeDogbSB9KSxcbiAgICAgICAgICAgICAgICAgICAgcmVmX2ZvcjogITAsXG4gICAgICAgICAgICAgICAgICAgIHJlZjogXCJkcmFnXCIgKyBEICsgbSxcbiAgICAgICAgICAgICAgICAgICAgb25FbmQ6ICh4KSA9PiByLmRyYWdFbmQoeCwgeyBwaWQ6IEQsIGlkeDogbSB9KSxcbiAgICAgICAgICAgICAgICAgICAgb25TdGFydDogZlswXSB8fCAoZlswXSA9ICh4KSA9PiByLmRyYWdTdGFydCh4KSksXG4gICAgICAgICAgICAgICAgICAgIG9uVW5jaG9vc2U6IGZbMV0gfHwgKGZbMV0gPSAoeCkgPT4gci5kcmFnVW5jaG9vc2UoeCkpLFxuICAgICAgICAgICAgICAgICAgICBsaXN0OiByLmdldFNsb3RDaGlsZHJlbihbYCR7RH06JHttfWAsIC4uLnIubGF0dGljZVtEXVttXS5zbG90XSlcbiAgICAgICAgICAgICAgICAgIH0pLCB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICBzcihyLiRzbG90cywgYCR7RH06JHttfWApXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICBfOiAyXG4gICAgICAgICAgICAgICAgICB9LCAxMDQwLCBbXCJvbkFkZFwiLCBcIm9uRW5kXCIsIFwibGlzdFwiXSlcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICBfOiAyXG4gICAgICAgICAgICAgIH0sIDEwMzIsIFtcIm9uQWN0aXZlXCIsIFwidW5pcXVlXCJdKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdLCAxNikpIDogamUoXCJcIiwgITApXG4gICAgICAgIF0sIDY0KSkpLCAyNTYpKVxuICAgICAgXSkpKSwgMTI4KSlcbiAgICBdLCA0KVxuICBdKTtcbn1cbmNvbnN0IGRBID0gLyogQF9fUFVSRV9fICovIE10KF8wLCBbW1wicmVuZGVyXCIsIGZBXV0pO1xuY29uc3QgY0EgPSB7XG4gIG5hbWU6IFwiRmNUYWJsZVwiLFxuICBwcm9wczoge1xuICAgIGxhYmVsOiBTdHJpbmcsXG4gICAgd2lkdGg6IFtOdW1iZXIsIFN0cmluZ10sXG4gICAgYm9yZGVyOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogITBcbiAgICB9LFxuICAgIGJvcmRlcldpZHRoOiBTdHJpbmcsXG4gICAgYm9yZGVyQ29sb3I6IFN0cmluZyxcbiAgICBydWxlOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoeyByb3c6IDEsIGNvbDogMSB9KVxuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBydWxlOiB7XG4gICAgICBoYW5kbGVyKCkge1xuICAgICAgICB0aGlzLmluaXRSdWxlKCksIHRoaXMubG9hZFJ1bGUoKSwgdGhpcy50ZFN0eWxlID0gdGhpcy5ydWxlLnN0eWxlIHx8IHt9LCB0aGlzLnRkQ2xhc3MgPSB0aGlzLnJ1bGUuY2xhc3MgfHwge307XG4gICAgICB9LFxuICAgICAgaW1tZWRpYXRlOiAhMCxcbiAgICAgIGRlZXA6ICEwXG4gICAgfVxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0ZFN0eWxlOiB7fSxcbiAgICAgIHRkQ2xhc3M6IHt9LFxuICAgICAgbGF0dGljZToge31cbiAgICB9O1xuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHRhYmxlQ29sb3IoKSB7XG4gICAgICBjb25zdCByID0ge307XG4gICAgICByZXR1cm4gdGhpcy5ib3JkZXIgPT09ICExID8gci5ib3JkZXIgPSBcIjAgbm9uZVwiIDogKHRoaXMuYm9yZGVyQ29sb3IgJiYgKHIuYm9yZGVyQ29sb3IgPSB0aGlzLmJvcmRlckNvbG9yKSwgdGhpcy5ib3JkZXJXaWR0aCAmJiAoci5ib3JkZXJXaWR0aCA9IHRoaXMuYm9yZGVyV2lkdGgpKSwgcjtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBpbml0UnVsZSgpIHtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLnJ1bGU7XG4gICAgICByLnN0eWxlIHx8IChyLnN0eWxlID0ge30pLCByLmxheW91dCB8fCAoci5sYXlvdXQgPSBbXSksIHIucm93IHx8IChyLnJvdyA9IDEpLCByLmNvbCB8fCAoci5jb2wgPSAxKTtcbiAgICB9LFxuICAgIGxvYWRSdWxlKCkge1xuICAgICAgY29uc3QgciA9IFtdLCBmID0gdGhpcy5ydWxlIHx8IHsgcm93OiAxLCBjb2w6IDEgfTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZi5yb3c7IGkrKykge1xuICAgICAgICBjb25zdCB0ID0gW107XG4gICAgICAgIHIucHVzaCh0KTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBmLmNvbDsgcysrKVxuICAgICAgICAgIHQucHVzaCh7IHJvd3NwYW46IDEsIGNvbHNwYW46IDEsIHNsb3Q6IFtdLCBzaG93OiAhMCB9KTtcbiAgICAgIH1cbiAgICAgIFsuLi5mLmxheW91dCB8fCBbXV0uZm9yRWFjaCgoaSwgdCkgPT4ge1xuICAgICAgICBpZiAoKCFpLnJvdyB8fCBpLnJvdyA8PSAwKSAmJiAoIWkuY29sIHx8IGkuY29sIDw9IDApIHx8ICFyW2kudG9wXSB8fCAhcltpLnRvcF1baS5sZWZ0XSB8fCAhcltpLnRvcF1baS5sZWZ0XS5zaG93KSB7XG4gICAgICAgICAgZi5sYXlvdXQuc3BsaWNlKHQsIDEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzID0gcltpLnRvcF1baS5sZWZ0XTtcbiAgICAgICAgcy5sYXlvdXQgPSBpO1xuICAgICAgICBsZXQgZCA9IDEsIGMgPSAxO1xuICAgICAgICBpZiAoaS5jb2wgJiYgKGQgPSBpLmNvbCArIGkubGVmdCA+IGYuY29sID8gZi5jb2wgLSBpLmxlZnQgOiBpLmNvbCwgcy5jb2xzcGFuID0gZCksIGkucm93ICYmIChjID0gaS5yb3cgKyBpLnRvcCA+IGYucm93ID8gZi5yb3cgLSBpLnRvcCA6IGkucm93LCBzLnJvd3NwYW4gPSBjKSwgYyAmJiBkKVxuICAgICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgYzsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gcltpLnRvcCArIHBdO1xuICAgICAgICAgICAgaWYgKHYpXG4gICAgICAgICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgZDsgYisrKVxuICAgICAgICAgICAgICAgICFiICYmICFwIHx8ICh2W2kubGVmdCArIGJdICYmICh2W2kubGVmdCArIGJdLnNob3cgPSAhMSksIHMuc2xvdC5wdXNoKGAke2kudG9wICsgcH06JHtpLmxlZnQgKyBifWApKTtcbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG8gPSAoaSkgPT4gISEoIWkgfHwgaS5sYXlvdXQgfHwgIWkuc2hvdyk7XG4gICAgICByLmZvckVhY2goKGksIHQpID0+IHtcbiAgICAgICAgaS5mb3JFYWNoKChzLCBkKSA9PiB7XG4gICAgICAgICAgbGV0IGMgPSAhMSwgcCA9ICExO1xuICAgICAgICAgIGlmIChzLmxheW91dCkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHMubGF5b3V0LmNvbCB8fCAxLCBiID0gcy5sYXlvdXQucm93IHx8IDE7XG4gICAgICAgICAgICBmb3IgKGxldCBTID0gMDsgUyA8IHY7IFMrKylcbiAgICAgICAgICAgICAgaWYgKCFyW3QgKyBiXSB8fCBvKHJbdCArIGJdW2QgKyBTXSkpIHtcbiAgICAgICAgICAgICAgICBwID0gITA7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IFMgPSAwOyBTIDwgYjsgUysrKVxuICAgICAgICAgICAgICBpZiAoIXJbdCArIFNdIHx8IG8oclt0ICsgU11bZCArIHZdKSkge1xuICAgICAgICAgICAgICAgIGMgPSAhMDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgYyA9IG8oaVtkICsgMV0pLCBwID0gclt0ICsgMV0gPyBvKHJbdCArIDFdW2RdKSA6ICEwO1xuICAgICAgICAgIHMucmlnaHQgPSBjLCBzLmJvdHRvbSA9IHA7XG4gICAgICAgIH0pO1xuICAgICAgfSksIHRoaXMubGF0dGljZSA9IHI7XG4gICAgfVxuICB9XG59LCBwQSA9IHsgY2xhc3M6IFwiX2ZjLXRhYmxlXCIgfTtcbmZ1bmN0aW9uIGhBKHIsIGYsIG8sIGksIHQsIHMpIHtcbiAgY29uc3QgZCA9IGJlKFwiZWwtY29sXCIpO1xuICByZXR1cm4gZmUoKSwgS2UoZCwgeyBzcGFuOiAyNCB9LCB7XG4gICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgaGUoXCJkaXZcIiwgcEEsIFtcbiAgICAgICAgaGUoXCJ0YWJsZVwiLCB7XG4gICAgICAgICAgYm9yZGVyOiBcIjFcIixcbiAgICAgICAgICBjZWxsc3BhY2luZzogXCIwXCIsXG4gICAgICAgICAgY2VsbHBhZGRpbmc6IFwiMFwiLFxuICAgICAgICAgIHN0eWxlOiBDbyhzLnRhYmxlQ29sb3IpXG4gICAgICAgIH0sIFtcbiAgICAgICAgICAoZmUoITApLCB4ZShodCwgbnVsbCwgaG4oby5ydWxlLnJvdywgKGMsIHApID0+IChmZSgpLCB4ZShcInRyXCIsIHsga2V5OiBwIH0sIFtcbiAgICAgICAgICAgIChmZSghMCksIHhlKGh0LCBudWxsLCBobihvLnJ1bGUuY29sLCAodiwgYikgPT4gKGZlKCksIHhlKGh0LCB7XG4gICAgICAgICAgICAgIGtleTogYCR7cH0ke2J9YFxuICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICB0LmxhdHRpY2VbcF1bYl0uc2hvdyA/IChmZSgpLCB4ZShcInRkXCIsIEVvKHtcbiAgICAgICAgICAgICAgICBrZXk6IDAsXG4gICAgICAgICAgICAgICAgcmVmX2ZvcjogITBcbiAgICAgICAgICAgICAgfSwgdC5sYXR0aWNlW3BdW2JdID8geyBjb2xzcGFuOiB0LmxhdHRpY2VbcF1bYl0uY29sc3Bhbiwgcm93c3BhbjogdC5sYXR0aWNlW3BdW2JdLnJvd3NwYW4gfSA6IHt9LCB7XG4gICAgICAgICAgICAgICAgdmFsaWduOiBcInRvcFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzOiB0LnRkQ2xhc3MgJiYgdC50ZENsYXNzW2Ake3B9OiR7Yn1gXSB8fCBcIlwiLFxuICAgICAgICAgICAgICAgIHN0eWxlOiBbcy50YWJsZUNvbG9yLCB0LnRkU3R5bGUgJiYgdC50ZFN0eWxlW2Ake3B9OiR7Yn1gXSB8fCB7fV1cbiAgICAgICAgICAgICAgfSksIFtcbiAgICAgICAgICAgICAgICBzcihyLiRzbG90cywgYCR7cH06JHtifWApLFxuICAgICAgICAgICAgICAgIChmZSghMCksIHhlKGh0LCBudWxsLCBobih0LmxhdHRpY2VbcF1bYl0uc2xvdCwgKFMpID0+IHNyKHIuJHNsb3RzLCBgJHtTfWApKSwgMjU2KSlcbiAgICAgICAgICAgICAgXSwgMTYpKSA6IGplKFwiXCIsICEwKVxuICAgICAgICAgICAgXSwgNjQpKSksIDEyOCkpXG4gICAgICAgICAgXSkpKSwgMTI4KSlcbiAgICAgICAgXSwgNClcbiAgICAgIF0pXG4gICAgXSksXG4gICAgXzogM1xuICB9KTtcbn1cbmNvbnN0IHZBID0gLyogQF9fUFVSRV9fICovIE10KGNBLCBbW1wicmVuZGVyXCIsIGhBXV0pO1xuY29uc3QgbUEgPSB3dCh7XG4gIG5hbWU6IFwiVmFsaWRhdGVcIixcbiAgaW5qZWN0OiBbXCJkZXNpZ25lclwiXSxcbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiBBcnJheVxuICB9LFxuICBjb21wb25lbnRzOiB7XG4gICAgRHJhZ0Zvcm06IG90LiRmb3JtKClcbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHIpIHtcbiAgICAgIHRoaXMuZm9ybVZhbHVlID0gdGhpcy5wYXJzZVZhbHVlKHIpO1xuICAgIH1cbiAgfSxcbiAgZGF0YSgpIHtcbiAgICBjb25zdCByID0gdGhpcy5kZXNpZ25lci5zZXR1cFN0YXRlLnQsIGYgPSB0aGlzLmRlc2lnbmVyLnNldHVwU3RhdGUuYWN0aXZlUnVsZS5fbWVudS52YWxpZGF0ZSB8fCBbXSwgbyA9IHtcbiAgICAgIHN0cmluZzogcihcInZhbGlkYXRlLnR5cGVzLnN0cmluZ1wiKSxcbiAgICAgIGFycmF5OiByKFwidmFsaWRhdGUudHlwZXMuYXJyYXlcIiksXG4gICAgICBudW1iZXI6IHIoXCJ2YWxpZGF0ZS50eXBlcy5udW1iZXJcIiksXG4gICAgICBpbnRlZ2VyOiByKFwidmFsaWRhdGUudHlwZXMuaW50ZWdlclwiKSxcbiAgICAgIGZsb2F0OiByKFwidmFsaWRhdGUudHlwZXMuZmxvYXRcIiksXG4gICAgICBvYmplY3Q6IHIoXCJ2YWxpZGF0ZS50eXBlcy5vYmplY3RcIiksXG4gICAgICBkYXRlOiByKFwidmFsaWRhdGUudHlwZXMuZGF0ZVwiKSxcbiAgICAgIHVybDogcihcInZhbGlkYXRlLnR5cGVzLnVybFwiKSxcbiAgICAgIGVtYWlsOiByKFwidmFsaWRhdGUudHlwZXMuZW1haWxcIilcbiAgICB9LCB0ID0gKChzKSA9PiB7XG4gICAgICBjb25zdCBkID0gW107XG4gICAgICByZXR1cm4gcyAmJiBzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgZC5wdXNoKHtcbiAgICAgICAgICBsYWJlbDogb1tjXSxcbiAgICAgICAgICB2YWx1ZTogY1xuICAgICAgICB9KTtcbiAgICAgIH0pLCBkLnB1c2goe1xuICAgICAgICBsYWJlbDogcihcInByb3BzLmN1c3RvbVwiKSxcbiAgICAgICAgdmFsdWU6IFwidmFsaWRhdG9yXCJcbiAgICAgIH0pLCBkO1xuICAgIH0pKGYpO1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtVmFsdWU6IHt9LFxuICAgICAgdDogcixcbiAgICAgIG9wdGlvbjoge1xuICAgICAgICBmb3JtOiB7XG4gICAgICAgICAgbGFiZWxQb3NpdGlvbjogXCJ0b3BcIixcbiAgICAgICAgICBzaXplOiBcInNtYWxsXCIsXG4gICAgICAgICAgbGFiZWxXaWR0aDogXCI5MHB4XCJcbiAgICAgICAgfSxcbiAgICAgICAgc3VibWl0QnRuOiAhMSxcbiAgICAgICAgYXBwZW5kVmFsdWU6ICEwLFxuICAgICAgICBmb3JtRGF0YTogdGhpcy5wYXJzZVZhbHVlKHRoaXMubW9kZWxWYWx1ZSlcbiAgICAgIH0sXG4gICAgICBydWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcImdyb3VwXCIsXG4gICAgICAgICAgZmllbGQ6IFwidmFsaWRhdGVcIixcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgZXhwYW5kOiAxLFxuICAgICAgICAgICAgc29ydEJ0bjogITEsXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IHsgdHlwZTogdFswXS52YWx1ZSB9LFxuICAgICAgICAgICAgcnVsZTogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogdC5sZW5ndGggPT09IDEgPyBcImhpZGRlblwiIDogXCJzZWxlY3RcIixcbiAgICAgICAgICAgICAgICBmaWVsZDogXCJ0eXBlXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHIoXCJ2YWxpZGF0ZS50eXBlXCIpLFxuICAgICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogcihcInZhbGlkYXRlLnR5cGVQbGFjZWhvbGRlclwiKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29udHJvbDogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW1widXJsXCIsIFwiZGF0ZVwiLCBcImVtYWlsXCIsIFwib2JqZWN0XCIsIFwidmFsaWRhdG9yXCJdLFxuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb246IFwibm90SW5cIixcbiAgICAgICAgICAgICAgICAgICAgcnVsZTogW1wibW9kZVwiLCBcIm1pblwiLCBcIm1heFwiLCBcImxlblwiLCBcInBhdHRlcm5cIl1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcInZhbGlkYXRvclwiLFxuICAgICAgICAgICAgICAgICAgICBydWxlOiBbXCJ2YWxpZGF0b3JcIl1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHIoXCJ2YWxpZGF0ZS50cmlnZ2VyXCIpLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBcInRyaWdnZXJcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCJjaGFuZ2VcIixcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBYdChyLCBbXG4gICAgICAgICAgICAgICAgICB7IGxhYmVsOiBcImJsdXJcIiwgdmFsdWU6IFwiYmx1clwiIH0sXG4gICAgICAgICAgICAgICAgICB7IGxhYmVsOiBcImNoYW5nZVwiLCB2YWx1ZTogXCJjaGFuZ2VcIiB9LFxuICAgICAgICAgICAgICAgICAgeyBsYWJlbDogXCJzdWJtaXRcIiwgdmFsdWU6IFwic3VibWl0XCIgfVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIkZuRWRpdG9yXCIsXG4gICAgICAgICAgICAgICAgZmllbGQ6IFwidmFsaWRhdG9yXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwidmFsaWRhdG9yXCIsXG4gICAgICAgICAgICAgICAgICBhcmdzOiBbXCJydWxlXCIsIFwidmFsdWVcIiwgXCJjYWxsYmFja1wiXSxcbiAgICAgICAgICAgICAgICAgIGJ1dHRvbjogITBcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0eWxlOiBcImhlaWdodDozMDBweDtcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzZWxlY3RcIixcbiAgICAgICAgICAgICAgICB0aXRsZTogcihcInZhbGlkYXRlLm1vZGVcIiksXG4gICAgICAgICAgICAgICAgZmllbGQ6IFwibW9kZVwiLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IFwibWluXCIsIGxhYmVsOiByKFwidmFsaWRhdGUubW9kZXMubWluXCIpIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiBcIm1heFwiLCBsYWJlbDogcihcInZhbGlkYXRlLm1vZGVzLm1heFwiKSB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogXCJsZW5cIiwgbGFiZWw6IHIoXCJ2YWxpZGF0ZS5tb2Rlcy5sZW5cIikgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IFwicGF0dGVyblwiLCBsYWJlbDogcihcInZhbGlkYXRlLm1vZGVzLnBhdHRlcm5cIikgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwibWluXCIsXG4gICAgICAgICAgICAgICAgY29udHJvbDogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJwYXR0ZXJuXCIsXG4gICAgICAgICAgICAgICAgICAgIHJ1bGU6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogXCJwYXR0ZXJuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcihcInZhbGlkYXRlLm1vZGVzLnBhdHRlcm5cIilcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcIm1pblwiLFxuICAgICAgICAgICAgICAgICAgICBydWxlOiBbXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbnB1dE51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IFwibWluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcihcInZhbGlkYXRlLm1vZGVzLm1pblwiKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwibWF4XCIsXG4gICAgICAgICAgICAgICAgICAgIHJ1bGU6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImlucHV0TnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogXCJtYXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiByKFwidmFsaWRhdGUubW9kZXMubWF4XCIpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJsZW5cIixcbiAgICAgICAgICAgICAgICAgICAgcnVsZTogW1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW5wdXROdW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBcImxlblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHIoXCJ2YWxpZGF0ZS5tb2Rlcy5sZW5cIilcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHIoXCJ2YWxpZGF0ZS5tZXNzYWdlXCIpLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBcIm1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgc2xvdDogXCJhcHBlbmRcIixcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0OiAhMCxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiYXBwZW5kLW1zZ1wiLFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiAocykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IHRoaXMuZGVzaWduZXIuc2V0dXBTdGF0ZS5hY3RpdmVSdWxlLnRpdGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNpZ25lci5zZXR1cFN0YXRlLmFjdGl2ZVJ1bGUgJiYgcy5hcGkuc2V0VmFsdWUoXCJtZXNzYWdlXCIsIHIocy5hcGkuZm9ybS5tb2RlICE9PSBcInJlcXVpcmVkXCIgPyBcInZhbGlkYXRlLmF1dG9Nb2RlXCIgOiBcInZhbGlkYXRlLmF1dG9SZXF1aXJlZFwiLCB7IHRpdGxlOiBkIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbcihcInZhbGlkYXRlLmF1dG9cIildXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB2YWx1ZTogW11cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBvbklucHV0OiBmdW5jdGlvbihyLCBmKSB7XG4gICAgICBjb25zdCBvID0gVnQoZiksIGkgPSBbXTtcbiAgICAgIChvIHx8IFtdKS5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICAgIGlmICghdCB8fCAhT2JqZWN0LmtleXModCkubGVuZ3RoKVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgaWYgKHQudHlwZSA9PT0gXCJ2YWxpZGF0b3JcIiAmJiAhdC52YWxpZGF0b3IpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBzID0geyAuLi50IH07XG4gICAgICAgIHQudmFsaWRhdG9yIHx8IGRlbGV0ZSBzLnZhbGlkYXRvciwgaS5wdXNoKHMpO1xuICAgICAgfSksIHRoaXMuJGVtaXQoXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiLCBpKTtcbiAgICB9LFxuICAgIHBhcnNlVmFsdWUocikge1xuICAgICAgbGV0IGYgPSB7XG4gICAgICAgIHZhbGlkYXRlOiByID8gWy4uLnJdIDogW10sXG4gICAgICAgIHR5cGU6IHIubGVuZ3RoID8gclswXS50eXBlIHx8IFwic3RyaW5nXCIgOiB2b2lkIDBcbiAgICAgIH07XG4gICAgICByZXR1cm4gZi52YWxpZGF0ZS5mb3JFYWNoKChvKSA9PiB7XG4gICAgICAgIG8ubW9kZSB8fCBPYmplY3Qua2V5cyhvKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgICAgW1wibWVzc2FnZVwiLCBcInR5cGVcIiwgXCJ0cmlnZ2VyXCIsIFwibW9kZVwiXS5pbmRleE9mKGkpIDwgMCAmJiAoby5tb2RlID0gaSk7XG4gICAgICAgIH0pO1xuICAgICAgfSksIGY7XG4gICAgfVxuICB9XG59KTtcbmZ1bmN0aW9uIGdBKHIsIGYsIG8sIGksIHQsIHMpIHtcbiAgY29uc3QgZCA9IGJlKFwiRHJhZ0Zvcm1cIik7XG4gIHJldHVybiBmZSgpLCBLZShkLCB7XG4gICAgY2xhc3M6IFwiX2ZkLXZhbGlkYXRlXCIsXG4gICAgcnVsZTogci5ydWxlLFxuICAgIG9wdGlvbjogci5vcHRpb24sXG4gICAgbW9kZWxWYWx1ZTogci5mb3JtVmFsdWUsXG4gICAgb25DaGFuZ2U6IHIub25JbnB1dFxuICB9LCBudWxsLCA4LCBbXCJydWxlXCIsIFwib3B0aW9uXCIsIFwibW9kZWxWYWx1ZVwiLCBcIm9uQ2hhbmdlXCJdKTtcbn1cbmNvbnN0IHlBID0gLyogQF9fUFVSRV9fICovIE10KG1BLCBbW1wicmVuZGVyXCIsIGdBXV0pO1xuY29uc3QgQUEgPSB3dCh7XG4gIG5hbWU6IFwiUmVxdWlyZWRcIixcbiAgZW1pdHM6IFtcInVwZGF0ZTptb2RlbFZhbHVlXCJdLFxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHt9XG4gIH0sXG4gIGluamVjdDogW1wiZGVzaWduZXJcIl0sXG4gIHdhdGNoOiB7XG4gICAgcmVxdWlyZWQoKSB7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH0sXG4gICAgcmVxdWlyZWRNc2coKSB7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH0sXG4gICAgbW9kZWxWYWx1ZShyKSB7XG4gICAgICBjb25zdCBmID0gZnQuU3RyaW5nKHIpO1xuICAgICAgdGhpcy5yZXF1aXJlZCA9IHIgPT09IHZvaWQgMCA/ICExIDogZiA/ICEwIDogISFyLCB0aGlzLnJlcXVpcmVkTXNnID0gZiA/IHIgOiBcIlwiO1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICB0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVzaWduZXIuc2V0dXBTdGF0ZS50O1xuICAgIH1cbiAgfSxcbiAgZGF0YSgpIHtcbiAgICBjb25zdCByID0gZnQuU3RyaW5nKHRoaXMubW9kZWxWYWx1ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVpcmVkOiB0aGlzLm1vZGVsVmFsdWUgPT09IHZvaWQgMCA/ICExIDogciA/ICEwIDogISF0aGlzLm1vZGVsVmFsdWUsXG4gICAgICByZXF1aXJlZE1zZzogciA/IHRoaXMubW9kZWxWYWx1ZSA6IFwiXCJcbiAgICB9O1xuICB9LFxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlKCkge1xuICAgICAgbGV0IHI7XG4gICAgICB0aGlzLnJlcXVpcmVkID09PSAhMSA/IHIgPSAhMSA6IHIgPSB0aGlzLnJlcXVpcmVkTXNnIHx8ICEwLCB0aGlzLiRlbWl0KFwidXBkYXRlOm1vZGVsVmFsdWVcIiwgcik7XG4gICAgfVxuICB9XG59KSwgYkEgPSB7IGNsYXNzOiBcIl9mZC1yZXF1aXJlZFwiIH07XG5mdW5jdGlvbiBDQShyLCBmLCBvLCBpLCB0LCBzKSB7XG4gIGNvbnN0IGQgPSBiZShcImVsLXN3aXRjaFwiKSwgYyA9IGJlKFwiZWwtaW5wdXRcIik7XG4gIHJldHVybiBmZSgpLCB4ZShcImRpdlwiLCBiQSwgW1xuICAgIHVlKGQsIHtcbiAgICAgIG1vZGVsVmFsdWU6IHIucmVxdWlyZWQsXG4gICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogZlswXSB8fCAoZlswXSA9IChwKSA9PiByLnJlcXVpcmVkID0gcClcbiAgICB9LCBudWxsLCA4LCBbXCJtb2RlbFZhbHVlXCJdKSxcbiAgICByLnJlcXVpcmVkID8gKGZlKCksIEtlKGMsIHtcbiAgICAgIGtleTogMCxcbiAgICAgIG1vZGVsVmFsdWU6IHIucmVxdWlyZWRNc2csXG4gICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogZlsxXSB8fCAoZlsxXSA9IChwKSA9PiByLnJlcXVpcmVkTXNnID0gcCksXG4gICAgICBwbGFjZWhvbGRlcjogci50KFwidmFsaWRhdGUucmVxdWlyZWRQbGFjZWhvbGRlclwiKVxuICAgIH0sIG51bGwsIDgsIFtcIm1vZGVsVmFsdWVcIiwgXCJwbGFjZWhvbGRlclwiXSkpIDogamUoXCJcIiwgITApXG4gIF0pO1xufVxuY29uc3QgRUEgPSAvKiBAX19QVVJFX18gKi8gTXQoQUEsIFtbXCJyZW5kZXJcIiwgQ0FdXSk7XG5mdW5jdGlvbiBTQShyKSB7XG4gIHJldHVybiB0eXBlb2YgciAhPSBcIm9iamVjdFwiIHx8IHIgPT09IG51bGwgPyByIDogciBpbnN0YW5jZW9mIEFycmF5ID8gWy4uLnJdIDogeyAuLi5yIH07XG59XG5jb25zdCB4QSA9IHd0KHtcbiAgbmFtZTogXCJUYWJsZU9wdGlvbnNcIixcbiAgZW1pdHM6IFtcInVwZGF0ZTptb2RlbFZhbHVlXCIsIFwiY2hhbmdlXCJdLFxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IFtBcnJheSwgT2JqZWN0XSxcbiAgICBjb2x1bW46IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogKCkgPT4gW3sgbGFiZWw6IFwibGFiZWxcIiwga2V5OiBcImxhYmVsXCIgfSwgeyBsYWJlbDogXCJ2YWx1ZVwiLCBrZXk6IFwidmFsdWVcIiB9XVxuICAgIH0sXG4gICAgdmFsdWVUeXBlOiBTdHJpbmcsXG4gICAgbWF4OiBOdW1iZXIsXG4gICAgc2l6ZTogU3RyaW5nXG4gIH0sXG4gIGluamVjdDogW1wiZGVzaWduZXJcIl0sXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSgpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnRpZHlNb2RlbFZhbHVlKCk7XG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXNpZ25lci5zZXR1cFN0YXRlLnQ7XG4gICAgfVxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdGhpcy50aWR5TW9kZWxWYWx1ZSgpXG4gICAgfTtcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHRpZHlNb2RlbFZhbHVlKCkge1xuICAgICAgY29uc3QgciA9IHRoaXMubW9kZWxWYWx1ZTtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlVHlwZSA9PT0gXCJzdHJpbmdcIiA/IChyIHx8IFtdKS5tYXAoKGYpID0+ICh7IHZhbHVlOiBcIlwiICsgZiB9KSkgOiB0aGlzLnZhbHVlVHlwZSA9PT0gXCJvYmplY3RcIiA/IE9iamVjdC5rZXlzKHIgfHwge30pLm1hcCgoZikgPT4gKHsgbGFiZWw6IGYsIHZhbHVlOiByW2ZdIH0pKSA6IFsuLi5yIHx8IFtdXS5tYXAoKGYpID0+IFNBKGYpKTtcbiAgICB9LFxuICAgIHRpZHlWYWx1ZSgpIHtcbiAgICAgIGlmICh0aGlzLnZhbHVlVHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBjb25zdCByID0ge307XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLmZvckVhY2goKGYpID0+IHtcbiAgICAgICAgICBmLmxhYmVsICYmIGYudmFsdWUgJiYgKHJbZi5sYWJlbF0gPSBmLnZhbHVlKTtcbiAgICAgICAgfSksIHI7XG4gICAgICB9IGVsc2VcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUubWFwKChyKSA9PiB0aGlzLnZhbHVlVHlwZSA9PT0gXCJzdHJpbmdcIiA/IHIudmFsdWUgOiB7IC4uLnIgfSk7XG4gICAgfSxcbiAgICBvbklucHV0KHIpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbi5sZW5ndGggPT09IDEgJiYgIXJbdGhpcy5jb2x1bW5bMF0ua2V5XSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgdGhpcy5jb2x1bW4uZXZlcnkoKG8pID0+IG8ucmVxdWlyZWQgPT09ICExID8gITAgOiBbXCJvYmplY3RcIiwgXCJzdHJpbmdcIl0uaW5kZXhPZih0aGlzLnZhbHVlVHlwZSkgPiAtMSA/IHJbby5rZXldICE9PSB2b2lkIDAgJiYgcltvLmtleV0gIT09IFwiXCIgJiYgcltvLmtleV0gIT09IG51bGwgOiByW28ua2V5XSAhPT0gdm9pZCAwKSAmJiB0aGlzLmlucHV0KCk7XG4gICAgfSxcbiAgICBpbnB1dCgpIHtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLnRpZHlWYWx1ZSgpO1xuICAgICAgdGhpcy4kZW1pdChcInVwZGF0ZTptb2RlbFZhbHVlXCIsIHIpLCB0aGlzLiRlbWl0KFwiY2hhbmdlXCIsIHIpO1xuICAgIH0sXG4gICAgYWRkKCkge1xuICAgICAgdGhpcy52YWx1ZS5wdXNoKHRoaXMuY29sdW1uLnJlZHVjZSgociwgZikgPT4gKHJbZi5rZXldID0gXCJcIiwgciksIHt9KSk7XG4gICAgfSxcbiAgICBkZWwocikge1xuICAgICAgdGhpcy52YWx1ZS5zcGxpY2UociwgMSksIHRoaXMuaW5wdXQoKTtcbiAgICB9XG4gIH1cbn0pLCB3QSA9IChyKSA9PiAoQ2goXCJkYXRhLXYtNzU1NjE5ODBcIiksIHIgPSByKCksIEVoKCksIHIpLCBUQSA9IHsgY2xhc3M6IFwiX3RkLXRhYmxlLW9wdFwiIH0sIERBID0gW1wib25DbGlja1wiXSwgUkEgPSB7IGNsYXNzOiBcIl90ZC10YWJsZS1vcHQtaGFuZGxlXCIgfSwgTUEgPSAvKiBAX19QVVJFX18gKi8gd0EoKCkgPT4gLyogQF9fUFVSRV9fICovIGhlKFwiaVwiLCB7IGNsYXNzOiBcImZjLWljb24gaWNvbi1hZGRcIiB9LCBudWxsLCAtMSkpO1xuZnVuY3Rpb24gSUEociwgZiwgbywgaSwgdCwgcykge1xuICBjb25zdCBkID0gYmUoXCJlbC1pbnB1dFwiKSwgYyA9IGJlKFwiZWwtdGFibGUtY29sdW1uXCIpLCBwID0gYmUoXCJlbC10YWJsZVwiKSwgdiA9IGJlKFwiZWwtYnV0dG9uXCIpO1xuICByZXR1cm4gZmUoKSwgeGUoXCJkaXZcIiwgVEEsIFtcbiAgICB1ZShwLCB7XG4gICAgICBkYXRhOiByLnZhbHVlLFxuICAgICAgYm9yZGVyOiBcIlwiLFxuICAgICAgc2l6ZTogci5zaXplIHx8IFwic21hbGxcIixcbiAgICAgIHN0eWxlOiB7IHdpZHRoOiBcIjEwMCVcIiB9XG4gICAgfSwge1xuICAgICAgZGVmYXVsdDogcmUoKCkgPT4gW1xuICAgICAgICAoZmUoITApLCB4ZShodCwgbnVsbCwgaG4oci5jb2x1bW4sIChiLCBTKSA9PiAoZmUoKSwgS2UoYywge1xuICAgICAgICAgIGtleTogYi5sYWJlbCArIFMsXG4gICAgICAgICAgbGFiZWw6IGIubGFiZWxcbiAgICAgICAgfSwge1xuICAgICAgICAgIGRlZmF1bHQ6IHJlKChEKSA9PiBbXG4gICAgICAgICAgICB1ZShkLCB7XG4gICAgICAgICAgICAgIHNpemU6IHIuc2l6ZSB8fCBcInNtYWxsXCIsXG4gICAgICAgICAgICAgIG1vZGVsVmFsdWU6IEQucm93W2Iua2V5XSB8fCBcIlwiLFxuICAgICAgICAgICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogKFQpID0+IEQucm93W2Iua2V5XSA9IFQsXG4gICAgICAgICAgICAgIG9uQmx1cjogKFQpID0+IHIub25JbnB1dChELnJvdylcbiAgICAgICAgICAgIH0sIG51bGwsIDgsIFtcInNpemVcIiwgXCJtb2RlbFZhbHVlXCIsIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiLCBcIm9uQmx1clwiXSlcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfOiAyXG4gICAgICAgIH0sIDEwMzIsIFtcImxhYmVsXCJdKSkpLCAxMjgpKSxcbiAgICAgICAgdWUoYywge1xuICAgICAgICAgIHdpZHRoOiBcIjcwXCIsXG4gICAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgICAgZml4ZWQ6IFwicmlnaHRcIixcbiAgICAgICAgICBsYWJlbDogci50KFwidGFibGVPcHRpb25zLmhhbmRsZVwiKVxuICAgICAgICB9LCB7XG4gICAgICAgICAgZGVmYXVsdDogcmUoKGIpID0+IFtcbiAgICAgICAgICAgIGhlKFwiaVwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBcImZjLWljb24gaWNvbi1kZWxldGVcIixcbiAgICAgICAgICAgICAgb25DbGljazogKFMpID0+IHIuZGVsKGIuJGluZGV4KVxuICAgICAgICAgICAgfSwgbnVsbCwgOCwgREEpXG4gICAgICAgICAgXSksXG4gICAgICAgICAgXzogMVxuICAgICAgICB9LCA4LCBbXCJsYWJlbFwiXSlcbiAgICAgIF0pLFxuICAgICAgXzogMVxuICAgIH0sIDgsIFtcImRhdGFcIiwgXCJzaXplXCJdKSxcbiAgICBoZShcImRpdlwiLCBSQSwgW1xuICAgICAgIXIubWF4IHx8IHIubWF4ID4gci52YWx1ZS5sZW5ndGggPyAoZmUoKSwgS2Uodiwge1xuICAgICAgICBrZXk6IDAsXG4gICAgICAgIGxpbms6IFwiXCIsXG4gICAgICAgIHR5cGU6IFwicHJpbWFyeVwiLFxuICAgICAgICBvbkNsaWNrOiByLmFkZFxuICAgICAgfSwge1xuICAgICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgICAgTUEsXG4gICAgICAgICAgJGUoXCIgXCIgKyBJZShyLnQoXCJ0YWJsZU9wdGlvbnMuYWRkXCIpKSwgMSlcbiAgICAgICAgXSksXG4gICAgICAgIF86IDFcbiAgICAgIH0sIDgsIFtcIm9uQ2xpY2tcIl0pKSA6IGplKFwiXCIsICEwKVxuICAgIF0pXG4gIF0pO1xufVxuY29uc3QgTkEgPSAvKiBAX19QVVJFX18gKi8gTXQoeEEsIFtbXCJyZW5kZXJcIiwgSUFdLCBbXCJfX3Njb3BlSWRcIiwgXCJkYXRhLXYtNzU1NjE5ODBcIl1dKTtcbmNvbnN0IE9BID0gd3Qoe1xuICBuYW1lOiBcIlRyZWVPcHRpb25zXCIsXG4gIGVtaXRzOiBbXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiBBcnJheSxcbiAgICBjb2x1bW5zOiBPYmplY3RcbiAgfSxcbiAgaW5qZWN0OiBbXCJkZXNpZ25lclwiXSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IFsuLi5WdCh0aGlzLm1vZGVsVmFsdWUgfHwgW10pXVxuICAgIH07XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlc2lnbmVyLnNldHVwU3RhdGUudDtcbiAgICB9LFxuICAgIG92ZXJDb2x1bW5zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucyA/IHtcbiAgICAgICAgbGFiZWw6IHRoaXMuY29sdW1ucy5sYWJlbCB8fCBcImxhYmVsXCIsXG4gICAgICAgIHZhbHVlOiB0aGlzLmNvbHVtbnMudmFsdWUgfHwgXCJ2YWx1ZVwiXG4gICAgICB9IDoge1xuICAgICAgICBsYWJlbDogXCJsYWJlbFwiLFxuICAgICAgICB2YWx1ZTogXCJ2YWx1ZVwiXG4gICAgICB9O1xuICAgIH1cbiAgfSxcbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLnZhbHVlLmxlbmd0aCB8fCAodGhpcy52YWx1ZSA9IFt7fV0pO1xuICB9LFxuICBtZXRob2RzOiB7XG4gICAgdGlkeVZhbHVlKCkge1xuICAgICAgcmV0dXJuIFZ0KHRoaXMudmFsdWUpO1xuICAgIH0sXG4gICAgY2hhbmdlKCkge1xuICAgICAgdGhpcy4kZW1pdChcInVwZGF0ZTptb2RlbFZhbHVlXCIsIHRoaXMudGlkeVZhbHVlKCkpO1xuICAgIH0sXG4gICAgYWRkKHIpIHtcbiAgICAgIGNvbnN0IGYgPSByLnBhcmVudDtcbiAgICAgIChmLmRhdGEuY2hpbGRyZW4gfHwgZi5kYXRhKS5wdXNoKHt9KTtcbiAgICB9LFxuICAgIGFwcGVuZChyKSB7XG4gICAgICByLmNoaWxkcmVuIHx8IChyLmNoaWxkcmVuID0gW10pLCByLmNoaWxkcmVuLnB1c2goe30pO1xuICAgIH0sXG4gICAgcmVtb3ZlKHIsIGYpIHtcbiAgICAgIGNvbnN0IG8gPSByLnBhcmVudDtcbiAgICAgIG8uZGF0YS5jaGlsZHJlbiA/IChvLmRhdGEuY2hpbGRyZW4uc3BsaWNlKG8uZGF0YS5jaGlsZHJlbi5pbmRleE9mKGYpLCAxKSwgby5kYXRhLmNoaWxkcmVuLmxlbmd0aCB8fCBkZWxldGUgby5kYXRhLmNoaWxkcmVuKSA6IG8uZGF0YS5zcGxpY2Uoby5kYXRhLmluZGV4T2YoZiksIDEpLCB0aGlzLmNoYW5nZSgpO1xuICAgIH1cbiAgfVxufSksIFBBID0geyBjbGFzczogXCJfZmQtdHJlZS1vcHRcIiB9LCBGQSA9IHsgY2xhc3M6IFwiX2ZkLXRyZWUtb3B0LW5vZGVcIiB9LCBMQSA9IFtcIm9uQ2xpY2tcIl0sIEJBID0gLyogQF9fUFVSRV9fICovIGhlKFwiaVwiLCB7IGNsYXNzOiBcImZjLWljb24gaWNvbi1hZGRcIiB9LCBudWxsLCAtMSksIEhBID0gW1xuICBCQVxuXSwgJEEgPSBbXCJvbkNsaWNrXCJdLCBrQSA9IC8qIEBfX1BVUkVfXyAqLyBoZShcImlcIiwgeyBjbGFzczogXCJmYy1pY29uIGljb24tYWRkLWNoaWxkXCIgfSwgbnVsbCwgLTEpLCBqQSA9IFtcbiAga0Fcbl0sIFVBID0gW1wib25DbGlja1wiXSwgekEgPSAvKiBAX19QVVJFX18gKi8gaGUoXCJpXCIsIHsgY2xhc3M6IFwiZmMtaWNvbiBpY29uLWRlbGV0ZVwiIH0sIG51bGwsIC0xKSwgVkEgPSBbXG4gIHpBXG5dO1xuZnVuY3Rpb24gV0EociwgZiwgbywgaSwgdCwgcykge1xuICBjb25zdCBkID0gYmUoXCJlbC1pbnB1dFwiKSwgYyA9IGJlKFwiZWwtdHJlZVwiKTtcbiAgcmV0dXJuIGZlKCksIHhlKFwiZGl2XCIsIFBBLCBbXG4gICAgdWUoYywge1xuICAgICAgZGF0YTogci52YWx1ZSxcbiAgICAgIFwibm9kZS1rZXlcIjogXCJpbmRleFwiLFxuICAgICAgXCJleHBhbmQtb24tY2xpY2stbm9kZVwiOiAhMVxuICAgIH0sIHtcbiAgICAgIGRlZmF1bHQ6IHJlKCh7IG5vZGU6IHAsIGRhdGE6IHYgfSkgPT4gW1xuICAgICAgICBoZShcImRpdlwiLCBGQSwgW1xuICAgICAgICAgIHVlKGQsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcIl9mZC10cmVlLW9wdC1maXJzdFwiLFxuICAgICAgICAgICAgbW9kZWxWYWx1ZTogdltyLm92ZXJDb2x1bW5zLmxhYmVsXSxcbiAgICAgICAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiAoYikgPT4gdltyLm92ZXJDb2x1bW5zLmxhYmVsXSA9IGIsXG4gICAgICAgICAgICBvbkJsdXI6IHIuY2hhbmdlXG4gICAgICAgICAgfSwgbnVsbCwgOCwgW1wibW9kZWxWYWx1ZVwiLCBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIiwgXCJvbkJsdXJcIl0pLFxuICAgICAgICAgIHVlKGQsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcIl9mZC10cmVlLW9wdC1sYXN0XCIsXG4gICAgICAgICAgICBtb2RlbFZhbHVlOiB2W3Iub3ZlckNvbHVtbnMudmFsdWVdLFxuICAgICAgICAgICAgXCJvblVwZGF0ZTptb2RlbFZhbHVlXCI6IChiKSA9PiB2W3Iub3ZlckNvbHVtbnMudmFsdWVdID0gYixcbiAgICAgICAgICAgIG9uQmx1cjogci5jaGFuZ2VcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBhcHBlbmQ6IHJlKCgpID0+IFtcbiAgICAgICAgICAgICAgaGUoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBcIl9mZC10cmVlLW9wdC1idG5cIixcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoYikgPT4gci5hZGQocCwgdilcbiAgICAgICAgICAgICAgfSwgSEEsIDgsIExBKSxcbiAgICAgICAgICAgICAgaGUoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBcIl9mZC10cmVlLW9wdC1idG5cIixcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoYikgPT4gci5hcHBlbmQodilcbiAgICAgICAgICAgICAgfSwgakEsIDgsICRBKSxcbiAgICAgICAgICAgICAgaGUoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBcIl9mZC10cmVlLW9wdC1idG4gX2ZkLXRyZWUtb3B0LWRhbmdlclwiLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IChiKSA9PiByLnJlbW92ZShwLCB2KVxuICAgICAgICAgICAgICB9LCBWQSwgOCwgVUEpXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF86IDJcbiAgICAgICAgICB9LCAxMDMyLCBbXCJtb2RlbFZhbHVlXCIsIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiLCBcIm9uQmx1clwiXSlcbiAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgXzogMVxuICAgIH0sIDgsIFtcImRhdGFcIl0pXG4gIF0pO1xufVxuY29uc3QgR0EgPSAvKiBAX19QVVJFX18gKi8gTXQoT0EsIFtbXCJyZW5kZXJcIiwgV0FdXSk7XG5jb25zdCBRQSA9IHd0KHtcbiAgbmFtZTogXCJUYWJsZUZvcm1WaWV3XCIsXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59KSwgWUEgPSB7IGNsYXNzOiBcIl9mZC10YWJsZS1mb3JtXCIgfSwgS0EgPSB7XG4gIGtleTogMCxcbiAgY2xhc3M6IFwiX2ZkLXRmLXdyYXBcIlxufSwgWEEgPSB7XG4gIGtleTogMSxcbiAgY2xhc3M6IFwiX2ZjLWNoaWxkLWVtcHR5XCJcbn07XG5mdW5jdGlvbiBKQShyLCBmLCBvLCBpLCB0LCBzKSB7XG4gIHJldHVybiBmZSgpLCB4ZShcImRpdlwiLCBZQSwgW1xuICAgIHIuJHNsb3RzLmRlZmF1bHQgPyAoZmUoKSwgeGUoXCJkaXZcIiwgS0EsIFtcbiAgICAgIHNyKHIuJHNsb3RzLCBcImRlZmF1bHRcIilcbiAgICBdKSkgOiAoZmUoKSwgeGUoXCJkaXZcIiwgWEEpKVxuICBdKTtcbn1cbmNvbnN0IFpBID0gLyogQF9fUFVSRV9fICovIE10KFFBLCBbW1wicmVuZGVyXCIsIEpBXV0pO1xuY29uc3QgcUEgPSB7XG4gIG5hbWU6IFwiVGFibGVGb3JtXCIsXG4gIGVtaXRzOiBbXCJjaGFuZ2VcIiwgXCJhZGRcIiwgXCJkZWxldGVcIiwgXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBmb3JtQ3JlYXRlSW5qZWN0OiBPYmplY3QsXG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiAoKSA9PiBbXVxuICAgIH0sXG4gICAgY29sdW1uczoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogITAsXG4gICAgICBkZWZhdWx0OiAoKSA9PiBbXVxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gbWEoe1xuICAgICAgICBzdWJtaXRCdG46ICExLFxuICAgICAgICByZXNldEJ0bjogITFcbiAgICAgIH0pXG4gICAgfSxcbiAgICBtYXg6IE51bWJlcixcbiAgICBkaXNhYmxlZDogQm9vbGVhblxuICB9LFxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVGFibGUoKTtcbiAgICAgIH0sXG4gICAgICBkZWVwOiAhMFxuICAgIH1cbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcnVsZTogW10sXG4gICAgICB0cnM6IFtdLFxuICAgICAgZmFwaToge30sXG4gICAgICBGb3JtOiBZcih0aGlzLmZvcm1DcmVhdGVJbmplY3QuZm9ybS4kZm9ybSgpKSxcbiAgICAgIGNvcHlUcnM6IFwiXCIsXG4gICAgICBvbGRWYWx1ZTogXCJcIlxuICAgIH07XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBmb3JtQ2hhbmdlKHIsIGYsIG8sIGksIHQpIHtcbiAgICAgIHQgPT09ICExICYmIHRoaXMudXBkYXRlVmFsdWUoKTtcbiAgICB9LFxuICAgIHVwZGF0ZVZhbHVlKCkge1xuICAgICAgY29uc3QgciA9IHRoaXMudHJzLm1hcCgobywgaSkgPT4gKHtcbiAgICAgICAgLi4udGhpcy5tb2RlbFZhbHVlW2ldIHx8IHt9LFxuICAgICAgICAuLi50aGlzLmZhcGkuZ2V0Q2hpbGRyZW5Gb3JtRGF0YShvKVxuICAgICAgfSkpLmZpbHRlcigobykgPT4ge1xuICAgICAgICBpZiAobyA9PSBudWxsKVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgbGV0IGkgPSAhMTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG8pLmZvckVhY2goKHQpID0+IHtcbiAgICAgICAgICBpID0gaSB8fCBvW3RdICE9PSB2b2lkIDAgJiYgb1t0XSAhPT0gXCJcIiAmJiBvW3RdICE9PSBudWxsO1xuICAgICAgICB9KSwgaTtcbiAgICAgIH0pLCBmID0gSlNPTi5zdHJpbmdpZnkocik7XG4gICAgICBmICE9PSB0aGlzLm9sZFZhbHVlICYmICh0aGlzLm9sZFZhbHVlID0gZiwgdGhpcy4kZW1pdChcInVwZGF0ZTptb2RlbFZhbHVlXCIsIHIpLCB0aGlzLiRlbWl0KFwiY2hhbmdlXCIsIHIpKTtcbiAgICB9LFxuICAgIHNldFJhd0RhdGEociwgZikge1xuICAgICAgY29uc3QgbyA9IHRoaXMudHJzW3JdO1xuICAgICAgdGhpcy5mYXBpLnNldENoaWxkcmVuRm9ybURhdGEobywgZiwgITApO1xuICAgIH0sXG4gICAgdXBkYXRlVGFibGUoKSB7XG4gICAgICBjb25zdCByID0gSlNPTi5zdHJpbmdpZnkodGhpcy5tb2RlbFZhbHVlKTtcbiAgICAgIHRoaXMub2xkVmFsdWUgIT09IHIgJiYgKHRoaXMub2xkVmFsdWUgPSByLCB0aGlzLnRycyA9IHRoaXMudHJzLnNwbGljZSgwLCB0aGlzLm1vZGVsVmFsdWUubGVuZ3RoKSwgdGhpcy5tb2RlbFZhbHVlLmxlbmd0aCB8fCB0aGlzLmFkZFJhdygpLCB0aGlzLm1vZGVsVmFsdWUuZm9yRWFjaCgoZiwgbykgPT4ge1xuICAgICAgICB0aGlzLnRyc1tvXSB8fCB0aGlzLmFkZFJhdygpLCB0aGlzLnNldFJhd0RhdGEobywgZik7XG4gICAgICB9KSwgdGhpcy5ydWxlWzBdLmNoaWxkcmVuWzFdLmNoaWxkcmVuID0gdGhpcy50cnMpO1xuICAgIH0sXG4gICAgZGVsUmF3KHIpIHtcbiAgICAgIHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMudHJzLnNwbGljZShyLCAxKSwgdGhpcy51cGRhdGVWYWx1ZSgpLCB0aGlzLnRycy5sZW5ndGggPyB0aGlzLnRycy5mb3JFYWNoKChmKSA9PiB0aGlzLnVwZGF0ZVJhdyhmKSkgOiB0aGlzLmFkZFJhdygpLCB0aGlzLiRlbWl0KFwiZGVsZXRlXCIsIHIpKTtcbiAgICB9LFxuICAgIGFkZFJhdyhyKSB7XG4gICAgICBpZiAociAmJiB0aGlzLmRpc2FibGVkKVxuICAgICAgICByZXR1cm47XG4gICAgICBjb25zdCBmID0gRWEucGFyc2VKc29uKHRoaXMuY29weVRycylbMF07XG4gICAgICB0aGlzLnRycy5wdXNoKGYpLCB0aGlzLnVwZGF0ZVJhdyhmKSwgciAmJiB0aGlzLiRlbWl0KFwiYWRkXCIsIHRoaXMudHJzLmxlbmd0aCk7XG4gICAgfSxcbiAgICB1cGRhdGVSYXcocikge1xuICAgICAgY29uc3QgZiA9IHRoaXMudHJzLmluZGV4T2Yocik7XG4gICAgICByLmNoaWxkcmVuWzBdLnByb3BzLmlubmVyVGV4dCA9IGYgKyAxLCByLmNoaWxkcmVuW3IuY2hpbGRyZW4ubGVuZ3RoIC0gMV0uY2hpbGRyZW5bMF0ucHJvcHMub25DbGljayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5kZWxSYXcoZik7XG4gICAgICB9O1xuICAgIH0sXG4gICAgbG9hZFJ1bGUoKSB7XG4gICAgICBjb25zdCByID0gW3tcbiAgICAgICAgdHlwZTogXCJ0aFwiLFxuICAgICAgICBuYXRpdmU6ICEwLFxuICAgICAgICBjbGFzczogXCJfZmMtdGYtaGVhZC1pZHhcIixcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBpbm5lclRleHQ6IFwiI1wiXG4gICAgICAgIH1cbiAgICAgIH1dO1xuICAgICAgbGV0IGYgPSBbe1xuICAgICAgICB0eXBlOiBcInRkXCIsXG4gICAgICAgIGNsYXNzOiBcIl9mYy10Zi1pZHhcIixcbiAgICAgICAgbmF0aXZlOiAhMCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBpbm5lclRleHQ6IFwiMFwiXG4gICAgICAgIH1cbiAgICAgIH1dO1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKG8pID0+IHtcbiAgICAgICAgci5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBcInRoXCIsXG4gICAgICAgICAgbmF0aXZlOiAhMCxcbiAgICAgICAgICBzdHlsZTogby5zdHlsZSxcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgaW5uZXJUZXh0OiBvLmxhYmVsIHx8IFwiXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0pLCBmLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwidGRcIixcbiAgICAgICAgICBuYXRpdmU6ICEwLFxuICAgICAgICAgIGNoaWxkcmVuOiBbLi4uby5ydWxlIHx8IFtdXVxuICAgICAgICB9KTtcbiAgICAgIH0pLCByLnB1c2goe1xuICAgICAgICB0eXBlOiBcInRoXCIsXG4gICAgICAgIG5hdGl2ZTogITAsXG4gICAgICAgIGNsYXNzOiBcIl9mYy10Zi1lZGl0IGZjLWNsb2NrXCIsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgaW5uZXJUZXh0OiBcIlxcdTY0Q0RcXHU0RjVDXCJcbiAgICAgICAgfVxuICAgICAgfSksIGYucHVzaCh7XG4gICAgICAgIHR5cGU6IFwidGRcIixcbiAgICAgICAgbmF0aXZlOiAhMCxcbiAgICAgICAgY2xhc3M6IFwiX2ZjLXRmLWJ0biBmYy1jbG9ja1wiLFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiaVwiLFxuICAgICAgICAgICAgbmF0aXZlOiAhMCxcbiAgICAgICAgICAgIGNsYXNzOiBcImZjLWljb24gaWNvbi1kZWxldGVcIixcbiAgICAgICAgICAgIHByb3BzOiB7fVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSksIHRoaXMuY29weVRycyA9IEVhLnRvSnNvbihbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRyXCIsXG4gICAgICAgICAgbmF0aXZlOiAhMCxcbiAgICAgICAgICBzdWJSdWxlOiAhMCxcbiAgICAgICAgICBjaGlsZHJlbjogZlxuICAgICAgICB9XG4gICAgICBdKSwgdGhpcy5ydWxlID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0YWJsZVwiLFxuICAgICAgICAgIG5hdGl2ZTogITAsXG4gICAgICAgICAgY2xhc3M6IFwiX2ZjLXRmLXRhYmxlXCIsXG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGJvcmRlcjogXCIxXCIsXG4gICAgICAgICAgICBjZWxsc3BhY2luZzogXCIwXCIsXG4gICAgICAgICAgICBjZWxscGFkZGluZzogXCIwXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGhlYWRcIixcbiAgICAgICAgICAgICAgbmF0aXZlOiAhMCxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInRyXCIsXG4gICAgICAgICAgICAgICAgICBuYXRpdmU6ICEwLFxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGJvZHlcIixcbiAgICAgICAgICAgICAgbmF0aXZlOiAhMCxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMudHJzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdLCB0aGlzLmFkZFJhdygpO1xuICAgIH1cbiAgfSxcbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmxvYWRSdWxlKCk7XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVUYWJsZSgpO1xuICB9XG59LCBfQSA9IC8qIEBfX1BVUkVfXyAqLyBoZShcImlcIiwge1xuICBjbGFzczogXCJmYy1pY29uIGljb24tYWRkLWNpcmNsZVwiLFxuICBzdHlsZTogeyBcImZvbnQtd2VpZ2h0XCI6IFwiNzAwXCIgfVxufSwgbnVsbCwgLTEpO1xuZnVuY3Rpb24gZTEociwgZiwgbywgaSwgdCwgcykge1xuICBjb25zdCBkID0gYmUoXCJlbC1idXR0b25cIik7XG4gIHJldHVybiBmZSgpLCB4ZShcImRpdlwiLCB7XG4gICAgY2xhc3M6IENuKFtcIl9mYy10YWJsZS1mb3JtXCIsIHsgXCJfZmMtZGlzYWJsZWRcIjogby5kaXNhYmxlZCB9XSlcbiAgfSwgW1xuICAgIChmZSgpLCBLZShTaCh0LkZvcm0pLCB7XG4gICAgICBvcHRpb246IG8ub3B0aW9ucyxcbiAgICAgIHJ1bGU6IHQucnVsZSxcbiAgICAgIGV4dGVuZE9wdGlvbjogITAsXG4gICAgICBkaXNhYmxlZDogby5kaXNhYmxlZCxcbiAgICAgIG9uQ2hhbmdlOiBzLmZvcm1DaGFuZ2UsXG4gICAgICBhcGk6IHQuZmFwaSxcbiAgICAgIFwib25VcGRhdGU6YXBpXCI6IGZbMF0gfHwgKGZbMF0gPSAoYykgPT4gdC5mYXBpID0gYyksXG4gICAgICBvbkVtaXRFdmVudDogci4kZW1pdFxuICAgIH0sIG51bGwsIDQwLCBbXCJvcHRpb25cIiwgXCJydWxlXCIsIFwiZGlzYWJsZWRcIiwgXCJvbkNoYW5nZVwiLCBcImFwaVwiLCBcIm9uRW1pdEV2ZW50XCJdKSksXG4gICAgIW8ubWF4IHx8IG8ubWF4ID4gdGhpcy50cnMubGVuZ3RoID8gKGZlKCksIEtlKGQsIHtcbiAgICAgIGtleTogMCxcbiAgICAgIGxpbms6IFwiXCIsXG4gICAgICB0eXBlOiBcInByaW1hcnlcIixcbiAgICAgIGNsYXNzOiBcImZjLWNsb2NrXCIsXG4gICAgICBvbkNsaWNrOiBmWzFdIHx8IChmWzFdID0gKGMpID0+IHMuYWRkUmF3KCEwKSlcbiAgICB9LCB7XG4gICAgICBkZWZhdWx0OiByZSgoKSA9PiBbXG4gICAgICAgIF9BLFxuICAgICAgICAkZShcIiBcXHU2REZCXFx1NTJBMCBcIilcbiAgICAgIF0pLFxuICAgICAgXzogMVxuICAgIH0pKSA6IGplKFwiXCIsICEwKVxuICBdLCAyKTtcbn1cbmNvbnN0IHQxID0gLyogQF9fUFVSRV9fICovIE10KHFBLCBbW1wicmVuZGVyXCIsIGUxXV0pO1xuY29uc3QgbjEgPSB3dCh7XG4gIG5hbWU6IFwiVGFibGVGb3JtQ29sdW1uVmlld1wiLFxuICBwcm9wczoge1xuICAgIGxhYmVsOiBTdHJpbmcsXG4gICAgd2lkdGg6IFtOdW1iZXIsIFN0cmluZ10sXG4gICAgY29sb3I6IFN0cmluZ1xuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGNvbFN0eWxlKCkge1xuICAgICAgY29uc3QgciA9IHRoaXMud2lkdGgsIGYgPSB7IHdpZHRoOiBmdC5OdW1iZXIocikgPyBgJHtyfXB4YCA6ICFyIHx8IHIgPT09IFwiYXV0b1wiID8gXCIxODBweFwiIDogciB9O1xuICAgICAgcmV0dXJuIHRoaXMuY29sb3IgJiYgKGYuY29sb3IgPSB0aGlzLmNvbG9yKSwgZjtcbiAgICB9XG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59KSwgcjEgPSB7IGNsYXNzOiBcIl9mZC10Zi10aXRsZVwiIH0sIGkxID0geyBjbGFzczogXCJfZmQtdGYtY29uXCIgfTtcbmZ1bmN0aW9uIG8xKHIsIGYsIG8sIGksIHQsIHMpIHtcbiAgcmV0dXJuIGZlKCksIHhlKFwiZGl2XCIsIHtcbiAgICBjbGFzczogXCJfZmQtdGYtY29sXCIsXG4gICAgc3R5bGU6IENvKHIuY29sU3R5bGUpXG4gIH0sIFtcbiAgICBoZShcImRpdlwiLCByMSwgSWUoci5sYWJlbCB8fCBcIlwiKSwgMSksXG4gICAgaGUoXCJkaXZcIiwgaTEsIFtcbiAgICAgIHNyKHIuJHNsb3RzLCBcImRlZmF1bHRcIilcbiAgICBdKVxuICBdLCA0KTtcbn1cbmNvbnN0IGExID0gLyogQF9fUFVSRV9fICovIE10KG4xLCBbW1wicmVuZGVyXCIsIG8xXV0pO1xuLyohXG4gKiBAZm9ybS1jcmVhdGUvY29tcG9uZW50LXdhbmdlZGl0b3IgdjMuMS4xMlxuICogKGMpIDIwMTgtMjAyMiB4YWJveVxuICogR2l0aHViIGh0dHBzOi8vZ2l0aHViLmNvbS94YWJveS9mb3JtLWNyZWF0ZSB3aXRoIHdhbmdlZGl0b3JcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuZnVuY3Rpb24gUGQociwgZikge1xuICB2YXIgbyA9IE9iamVjdC5rZXlzKHIpO1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBpID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKTtcbiAgICBmICYmIChpID0gaS5maWx0ZXIoZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IociwgdCkuZW51bWVyYWJsZTtcbiAgICB9KSksIG8ucHVzaC5hcHBseShvLCBpKTtcbiAgfVxuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIGwxKHIpIHtcbiAgZm9yICh2YXIgZiA9IDE7IGYgPCBhcmd1bWVudHMubGVuZ3RoOyBmKyspIHtcbiAgICB2YXIgbyA9IGFyZ3VtZW50c1tmXSAhPSBudWxsID8gYXJndW1lbnRzW2ZdIDoge307XG4gICAgZiAlIDIgPyBQZChPYmplY3QobyksICEwKS5mb3JFYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgIHMxKHIsIGksIG9baV0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhyLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvKSkgOiBQZChPYmplY3QobykpLmZvckVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIGksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgaSkpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiByO1xufVxuZnVuY3Rpb24genQocikge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSBcInN5bWJvbFwiID8genQgPSBmdW5jdGlvbihmKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBmO1xuICB9IDogenQgPSBmdW5jdGlvbihmKSB7XG4gICAgcmV0dXJuIGYgJiYgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZi5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIGYgIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIGY7XG4gIH0sIHp0KHIpO1xufVxuZnVuY3Rpb24gczEociwgZiwgbykge1xuICByZXR1cm4gZiBpbiByID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIGYsIHtcbiAgICB2YWx1ZTogbyxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IHJbZl0gPSBvLCByO1xufVxuZnVuY3Rpb24gdTEocikge1xuICByZXR1cm4gciAmJiByLl9fZXNNb2R1bGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIFwiZGVmYXVsdFwiKSA/IHIuZGVmYXVsdCA6IHI7XG59XG52YXIgbWMgPSB7IGV4cG9ydHM6IHt9IH07XG4oZnVuY3Rpb24ociwgZikge1xuICAoZnVuY3Rpb24oaSwgdCkge1xuICAgIHIuZXhwb3J0cyA9IHQoKTtcbiAgfSkod2luZG93LCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24obykge1xuICAgICAgdmFyIGkgPSB7fTtcbiAgICAgIGZ1bmN0aW9uIHQocykge1xuICAgICAgICBpZiAoaVtzXSlcbiAgICAgICAgICByZXR1cm4gaVtzXS5leHBvcnRzO1xuICAgICAgICB2YXIgZCA9IGlbc10gPSB7IGk6IHMsIGw6ICExLCBleHBvcnRzOiB7fSB9O1xuICAgICAgICByZXR1cm4gb1tzXS5jYWxsKGQuZXhwb3J0cywgZCwgZC5leHBvcnRzLCB0KSwgZC5sID0gITAsIGQuZXhwb3J0cztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0Lm0gPSBvLCB0LmMgPSBpLCB0LmQgPSBmdW5jdGlvbihzLCBkLCBjKSB7XG4gICAgICAgIHQubyhzLCBkKSB8fCBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgZCwgeyBlbnVtZXJhYmxlOiAhMCwgZ2V0OiBjIH0pO1xuICAgICAgfSwgdC5yID0gZnVuY3Rpb24ocykge1xuICAgICAgICB0eXBlb2YgU3ltYm9sIDwgXCJ1XCIgJiYgU3ltYm9sLnRvU3RyaW5nVGFnICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6IFwiTW9kdWxlXCIgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB9LCB0LnQgPSBmdW5jdGlvbihzLCBkKSB7XG4gICAgICAgIGlmIChkICYgMSAmJiAocyA9IHQocykpLCBkICYgOCB8fCBkICYgNCAmJiB6dChzKSA9PT0gXCJvYmplY3RcIiAmJiBzICYmIHMuX19lc01vZHVsZSlcbiAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgdmFyIGMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgaWYgKHQucihjKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6ICEwLCB2YWx1ZTogcyB9KSwgZCAmIDIgJiYgdHlwZW9mIHMgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICBmb3IgKHZhciBwIGluIHMpXG4gICAgICAgICAgICB0LmQoYywgcCwgZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICByZXR1cm4gc1t2XTtcbiAgICAgICAgICAgIH0uYmluZChudWxsLCBwKSk7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSwgdC5uID0gZnVuY3Rpb24ocykge1xuICAgICAgICB2YXIgZCA9IHMgJiYgcy5fX2VzTW9kdWxlID8gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHMuZGVmYXVsdDtcbiAgICAgICAgfSA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdC5kKGQsIFwiYVwiLCBkKSwgZDtcbiAgICAgIH0sIHQubyA9IGZ1bmN0aW9uKHMsIGQpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBkKTtcbiAgICAgIH0sIHQucCA9IFwiXCIsIHQodC5zID0gMTQxKTtcbiAgICB9KFtmdW5jdGlvbihvLCBpKSB7XG4gICAgICBmdW5jdGlvbiB0KHMpIHtcbiAgICAgICAgcmV0dXJuIHMgJiYgcy5fX2VzTW9kdWxlID8gcyA6IHsgZGVmYXVsdDogcyB9O1xuICAgICAgfVxuICAgICAgby5leHBvcnRzID0gdDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICBvLmV4cG9ydHMgPSB0KDE0Mik7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdC5yKGkpLCB0LmQoaSwgXCJfX2V4dGVuZHNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkO1xuICAgICAgfSksIHQuZChpLCBcIl9fYXNzaWduXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYztcbiAgICAgIH0pLCB0LmQoaSwgXCJfX3Jlc3RcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBwO1xuICAgICAgfSksIHQuZChpLCBcIl9fZGVjb3JhdGVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSksIHQuZChpLCBcIl9fcGFyYW1cIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBiO1xuICAgICAgfSksIHQuZChpLCBcIl9fbWV0YWRhdGFcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTO1xuICAgICAgfSksIHQuZChpLCBcIl9fYXdhaXRlclwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEQ7XG4gICAgICB9KSwgdC5kKGksIFwiX19nZW5lcmF0b3JcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBUO1xuICAgICAgfSksIHQuZChpLCBcIl9fY3JlYXRlQmluZGluZ1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgICB9KSwgdC5kKGksIFwiX19leHBvcnRTdGFyXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH0pLCB0LmQoaSwgXCJfX3ZhbHVlc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFI7XG4gICAgICB9KSwgdC5kKGksIFwiX19yZWFkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdztcbiAgICAgIH0pLCB0LmQoaSwgXCJfX3NwcmVhZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEE7XG4gICAgICB9KSwgdC5kKGksIFwiX19zcHJlYWRBcnJheXNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBFO1xuICAgICAgfSksIHQuZChpLCBcIl9fc3ByZWFkQXJyYXlcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDO1xuICAgICAgfSksIHQuZChpLCBcIl9fYXdhaXRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNO1xuICAgICAgfSksIHQuZChpLCBcIl9fYXN5bmNHZW5lcmF0b3JcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB5O1xuICAgICAgfSksIHQuZChpLCBcIl9fYXN5bmNEZWxlZ2F0b3JcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBCO1xuICAgICAgfSksIHQuZChpLCBcIl9fYXN5bmNWYWx1ZXNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAkO1xuICAgICAgfSksIHQuZChpLCBcIl9fbWFrZVRlbXBsYXRlT2JqZWN0XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRjtcbiAgICAgIH0pLCB0LmQoaSwgXCJfX2ltcG9ydFN0YXJcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBoO1xuICAgICAgfSksIHQuZChpLCBcIl9faW1wb3J0RGVmYXVsdFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE47XG4gICAgICB9KSwgdC5kKGksIFwiX19jbGFzc1ByaXZhdGVGaWVsZEdldFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFA7XG4gICAgICB9KSwgdC5kKGksIFwiX19jbGFzc1ByaXZhdGVGaWVsZFNldFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGo7XG4gICAgICB9KTtcbiAgICAgIC8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG4gICAgICBcbiAgICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxuICAgICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuICAgICAgXG4gICAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG4gICAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbiAgICAgIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbiAgICAgIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuICAgICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcbiAgICAgIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcbiAgICAgIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4gICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuICAgICAgdmFyIHMgPSBmdW5jdGlvbihWLCBXKSB7XG4gICAgICAgIHJldHVybiBzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24oUSwgWCkge1xuICAgICAgICAgIFEuX19wcm90b19fID0gWDtcbiAgICAgICAgfSB8fCBmdW5jdGlvbihRLCBYKSB7XG4gICAgICAgICAgZm9yICh2YXIgSiBpbiBYKVxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFgsIEopICYmIChRW0pdID0gWFtKXSk7XG4gICAgICAgIH0sIHMoViwgVyk7XG4gICAgICB9O1xuICAgICAgZnVuY3Rpb24gZChJLCBWKSB7XG4gICAgICAgIGlmICh0eXBlb2YgViAhPSBcImZ1bmN0aW9uXCIgJiYgViAhPT0gbnVsbClcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhWKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIHMoSSwgVik7XG4gICAgICAgIGZ1bmN0aW9uIFcoKSB7XG4gICAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IEk7XG4gICAgICAgIH1cbiAgICAgICAgSS5wcm90b3R5cGUgPSBWID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShWKSA6IChXLnByb3RvdHlwZSA9IFYucHJvdG90eXBlLCBuZXcgVygpKTtcbiAgICAgIH1cbiAgICAgIHZhciBjID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbihXKSB7XG4gICAgICAgICAgZm9yICh2YXIgUSwgWCA9IDEsIEogPSBhcmd1bWVudHMubGVuZ3RoOyBYIDwgSjsgWCsrKSB7XG4gICAgICAgICAgICBRID0gYXJndW1lbnRzW1hdO1xuICAgICAgICAgICAgZm9yICh2YXIgWiBpbiBRKVxuICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUSwgWikgJiYgKFdbWl0gPSBRW1pdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFc7XG4gICAgICAgIH0sIGMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBmdW5jdGlvbiBwKEksIFYpIHtcbiAgICAgICAgdmFyIFcgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgUSBpbiBJKVxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChJLCBRKSAmJiBWLmluZGV4T2YoUSkgPCAwICYmIChXW1FdID0gSVtRXSk7XG4gICAgICAgIGlmIChJICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgIGZvciAodmFyIFggPSAwLCBRID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhJKTsgWCA8IFEubGVuZ3RoOyBYKyspXG4gICAgICAgICAgICBWLmluZGV4T2YoUVtYXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChJLCBRW1hdKSAmJiAoV1tRW1hdXSA9IElbUVtYXV0pO1xuICAgICAgICByZXR1cm4gVztcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHYoSSwgViwgVywgUSkge1xuICAgICAgICB2YXIgWCA9IGFyZ3VtZW50cy5sZW5ndGgsIEogPSBYIDwgMyA/IFYgOiBRID09PSBudWxsID8gUSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoViwgVykgOiBRLCBaO1xuICAgICAgICBpZiAoKHR5cGVvZiBSZWZsZWN0ID4gXCJ1XCIgPyBcInVuZGVmaW5lZFwiIDogenQoUmVmbGVjdCkpID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICBKID0gUmVmbGVjdC5kZWNvcmF0ZShJLCBWLCBXLCBRKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGZvciAodmFyIGRlID0gSS5sZW5ndGggLSAxOyBkZSA+PSAwOyBkZS0tKVxuICAgICAgICAgICAgKFogPSBJW2RlXSkgJiYgKEogPSAoWCA8IDMgPyBaKEopIDogWCA+IDMgPyBaKFYsIFcsIEopIDogWihWLCBXKSkgfHwgSik7XG4gICAgICAgIHJldHVybiBYID4gMyAmJiBKICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLCBXLCBKKSwgSjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGIoSSwgVikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oVywgUSkge1xuICAgICAgICAgIFYoVywgUSwgSSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBTKEksIFYpIHtcbiAgICAgICAgaWYgKCh0eXBlb2YgUmVmbGVjdCA+IFwidVwiID8gXCJ1bmRlZmluZWRcIiA6IHp0KFJlZmxlY3QpKSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoSSwgVik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBEKEksIFYsIFcsIFEpIHtcbiAgICAgICAgZnVuY3Rpb24gWChKKSB7XG4gICAgICAgICAgcmV0dXJuIEogaW5zdGFuY2VvZiBXID8gSiA6IG5ldyBXKGZ1bmN0aW9uKFopIHtcbiAgICAgICAgICAgIFooSik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyAoVyB8fCAoVyA9IFByb21pc2UpKShmdW5jdGlvbihKLCBaKSB7XG4gICAgICAgICAgZnVuY3Rpb24gZGUobWUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHNlKFEubmV4dChtZSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAobGUpIHtcbiAgICAgICAgICAgICAgWihsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHZlKG1lKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzZShRLnRocm93KG1lKSk7XG4gICAgICAgICAgICB9IGNhdGNoIChsZSkge1xuICAgICAgICAgICAgICBaKGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gc2UobWUpIHtcbiAgICAgICAgICAgIG1lLmRvbmUgPyBKKG1lLnZhbHVlKSA6IFgobWUudmFsdWUpLnRoZW4oZGUsIHZlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2UoKFEgPSBRLmFwcGx5KEksIFYgfHwgW10pKS5uZXh0KCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFQoSSwgVikge1xuICAgICAgICB2YXIgVyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChKWzBdICYgMSlcbiAgICAgICAgICAgIHRocm93IEpbMV07XG4gICAgICAgICAgcmV0dXJuIEpbMV07XG4gICAgICAgIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIFEsIFgsIEosIFo7XG4gICAgICAgIHJldHVybiBaID0geyBuZXh0OiBkZSgwKSwgdGhyb3c6IGRlKDEpLCByZXR1cm46IGRlKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChaW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSksIFo7XG4gICAgICAgIGZ1bmN0aW9uIGRlKHNlKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdmUoW3NlLCBtZV0pO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmUoc2UpIHtcbiAgICAgICAgICBpZiAoUSlcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICAgIGZvciAoOyBXOyApXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAoUSA9IDEsIFggJiYgKEogPSBzZVswXSAmIDIgPyBYLnJldHVybiA6IHNlWzBdID8gWC50aHJvdyB8fCAoKEogPSBYLnJldHVybikgJiYgSi5jYWxsKFgpLCAwKSA6IFgubmV4dCkgJiYgIShKID0gSi5jYWxsKFgsIHNlWzFdKSkuZG9uZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gSjtcbiAgICAgICAgICAgICAgc3dpdGNoIChYID0gMCwgSiAmJiAoc2UgPSBbc2VbMF0gJiAyLCBKLnZhbHVlXSksIHNlWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgIEogPSBzZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBXLmxhYmVsKyssIHsgdmFsdWU6IHNlWzFdLCBkb25lOiAhMSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgIFcubGFiZWwrKywgWCA9IHNlWzFdLCBzZSA9IFswXTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgIHNlID0gVy5vcHMucG9wKCksIFcudHJ5cy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoSiA9IFcudHJ5cywgIShKID0gSi5sZW5ndGggPiAwICYmIEpbSi5sZW5ndGggLSAxXSkgJiYgKHNlWzBdID09PSA2IHx8IHNlWzBdID09PSAyKSkge1xuICAgICAgICAgICAgICAgICAgICBXID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoc2VbMF0gPT09IDMgJiYgKCFKIHx8IHNlWzFdID4gSlswXSAmJiBzZVsxXSA8IEpbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgIFcubGFiZWwgPSBzZVsxXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoc2VbMF0gPT09IDYgJiYgVy5sYWJlbCA8IEpbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgVy5sYWJlbCA9IEpbMV0sIEogPSBzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoSiAmJiBXLmxhYmVsIDwgSlsyXSkge1xuICAgICAgICAgICAgICAgICAgICBXLmxhYmVsID0gSlsyXSwgVy5vcHMucHVzaChzZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgSlsyXSAmJiBXLm9wcy5wb3AoKSwgVy50cnlzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2UgPSBWLmNhbGwoSSwgVyk7XG4gICAgICAgICAgICB9IGNhdGNoIChtZSkge1xuICAgICAgICAgICAgICBzZSA9IFs2LCBtZV0sIFggPSAwO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgUSA9IEogPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGlmIChzZVswXSAmIDUpXG4gICAgICAgICAgICB0aHJvdyBzZVsxXTtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogc2VbMF0gPyBzZVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIG0gPSBPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24oSSwgViwgVywgUSkge1xuICAgICAgICBRID09PSB2b2lkIDAgJiYgKFEgPSBXKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KEksIFEsIHsgZW51bWVyYWJsZTogITAsIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIFZbV107XG4gICAgICAgIH0gfSk7XG4gICAgICB9IDogZnVuY3Rpb24oSSwgViwgVywgUSkge1xuICAgICAgICBRID09PSB2b2lkIDAgJiYgKFEgPSBXKSwgSVtRXSA9IFZbV107XG4gICAgICB9O1xuICAgICAgZnVuY3Rpb24geChJLCBWKSB7XG4gICAgICAgIGZvciAodmFyIFcgaW4gSSlcbiAgICAgICAgICBXICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFYsIFcpICYmIG0oViwgSSwgVyk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBSKEkpIHtcbiAgICAgICAgdmFyIFYgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIFcgPSBWICYmIElbVl0sIFEgPSAwO1xuICAgICAgICBpZiAoVylcbiAgICAgICAgICByZXR1cm4gVy5jYWxsKEkpO1xuICAgICAgICBpZiAoSSAmJiB0eXBlb2YgSS5sZW5ndGggPT0gXCJudW1iZXJcIilcbiAgICAgICAgICByZXR1cm4geyBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBJICYmIFEgPj0gSS5sZW5ndGggJiYgKEkgPSB2b2lkIDApLCB7IHZhbHVlOiBJICYmIElbUSsrXSwgZG9uZTogIUkgfTtcbiAgICAgICAgICB9IH07XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoViA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHcoSSwgVikge1xuICAgICAgICB2YXIgVyA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIElbU3ltYm9sLml0ZXJhdG9yXTtcbiAgICAgICAgaWYgKCFXKVxuICAgICAgICAgIHJldHVybiBJO1xuICAgICAgICB2YXIgUSA9IFcuY2FsbChJKSwgWCwgSiA9IFtdLCBaO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAoOyAoViA9PT0gdm9pZCAwIHx8IFYtLSA+IDApICYmICEoWCA9IFEubmV4dCgpKS5kb25lOyApXG4gICAgICAgICAgICBKLnB1c2goWC52YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGRlKSB7XG4gICAgICAgICAgWiA9IHsgZXJyb3I6IGRlIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFggJiYgIVguZG9uZSAmJiAoVyA9IFEucmV0dXJuKSAmJiBXLmNhbGwoUSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChaKVxuICAgICAgICAgICAgICB0aHJvdyBaLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEEoKSB7XG4gICAgICAgIGZvciAodmFyIEkgPSBbXSwgViA9IDA7IFYgPCBhcmd1bWVudHMubGVuZ3RoOyBWKyspXG4gICAgICAgICAgSSA9IEkuY29uY2F0KHcoYXJndW1lbnRzW1ZdKSk7XG4gICAgICAgIHJldHVybiBJO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gRSgpIHtcbiAgICAgICAgZm9yICh2YXIgSSA9IDAsIFYgPSAwLCBXID0gYXJndW1lbnRzLmxlbmd0aDsgViA8IFc7IFYrKylcbiAgICAgICAgICBJICs9IGFyZ3VtZW50c1tWXS5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIFEgPSBBcnJheShJKSwgWCA9IDAsIFYgPSAwOyBWIDwgVzsgVisrKVxuICAgICAgICAgIGZvciAodmFyIEogPSBhcmd1bWVudHNbVl0sIFogPSAwLCBkZSA9IEoubGVuZ3RoOyBaIDwgZGU7IForKywgWCsrKVxuICAgICAgICAgICAgUVtYXSA9IEpbWl07XG4gICAgICAgIHJldHVybiBRO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gQyhJLCBWKSB7XG4gICAgICAgIGZvciAodmFyIFcgPSAwLCBRID0gVi5sZW5ndGgsIFggPSBJLmxlbmd0aDsgVyA8IFE7IFcrKywgWCsrKVxuICAgICAgICAgIElbWF0gPSBWW1ddO1xuICAgICAgICByZXR1cm4gSTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE0oSSkge1xuICAgICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIE0gPyAodGhpcy52ID0gSSwgdGhpcykgOiBuZXcgTShJKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHkoSSwgViwgVykge1xuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICAgIHZhciBRID0gVy5hcHBseShJLCBWIHx8IFtdKSwgWCwgSiA9IFtdO1xuICAgICAgICByZXR1cm4gWCA9IHt9LCBaKFwibmV4dFwiKSwgWihcInRocm93XCIpLCBaKFwicmV0dXJuXCIpLCBYW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LCBYO1xuICAgICAgICBmdW5jdGlvbiBaKGllKSB7XG4gICAgICAgICAgUVtpZV0gJiYgKFhbaWVdID0gZnVuY3Rpb24ocGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0ZSwgZ2UpIHtcbiAgICAgICAgICAgICAgSi5wdXNoKFtpZSwgcGUsIHRlLCBnZV0pID4gMSB8fCBkZShpZSwgcGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZGUoaWUsIHBlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZlKFFbaWVdKHBlKSk7XG4gICAgICAgICAgfSBjYXRjaCAodGUpIHtcbiAgICAgICAgICAgIGxlKEpbMF1bM10sIHRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmUoaWUpIHtcbiAgICAgICAgICBpZS52YWx1ZSBpbnN0YW5jZW9mIE0gPyBQcm9taXNlLnJlc29sdmUoaWUudmFsdWUudikudGhlbihzZSwgbWUpIDogbGUoSlswXVsyXSwgaWUpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNlKGllKSB7XG4gICAgICAgICAgZGUoXCJuZXh0XCIsIGllKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtZShpZSkge1xuICAgICAgICAgIGRlKFwidGhyb3dcIiwgaWUpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxlKGllLCBwZSkge1xuICAgICAgICAgIGllKHBlKSwgSi5zaGlmdCgpLCBKLmxlbmd0aCAmJiBkZShKWzBdWzBdLCBKWzBdWzFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gQihJKSB7XG4gICAgICAgIHZhciBWLCBXO1xuICAgICAgICByZXR1cm4gViA9IHt9LCBRKFwibmV4dFwiKSwgUShcInRocm93XCIsIGZ1bmN0aW9uKFgpIHtcbiAgICAgICAgICB0aHJvdyBYO1xuICAgICAgICB9KSwgUShcInJldHVyblwiKSwgVltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sIFY7XG4gICAgICAgIGZ1bmN0aW9uIFEoWCwgSikge1xuICAgICAgICAgIFZbWF0gPSBJW1hdID8gZnVuY3Rpb24oWikge1xuICAgICAgICAgICAgcmV0dXJuIChXID0gIVcpID8geyB2YWx1ZTogTShJW1hdKFopKSwgZG9uZTogWCA9PT0gXCJyZXR1cm5cIiB9IDogSiA/IEooWikgOiBaO1xuICAgICAgICAgIH0gOiBKO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiAkKEkpIHtcbiAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcilcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICB2YXIgViA9IElbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBXO1xuICAgICAgICByZXR1cm4gViA/IFYuY2FsbChJKSA6IChJID0gdHlwZW9mIFIgPT0gXCJmdW5jdGlvblwiID8gUihJKSA6IElbU3ltYm9sLml0ZXJhdG9yXSgpLCBXID0ge30sIFEoXCJuZXh0XCIpLCBRKFwidGhyb3dcIiksIFEoXCJyZXR1cm5cIiksIFdbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sIFcpO1xuICAgICAgICBmdW5jdGlvbiBRKEopIHtcbiAgICAgICAgICBXW0pdID0gSVtKXSAmJiBmdW5jdGlvbihaKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZGUsIHZlKSB7XG4gICAgICAgICAgICAgIFogPSBJW0pdKFopLCBYKGRlLCB2ZSwgWi5kb25lLCBaLnZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gWChKLCBaLCBkZSwgdmUpIHtcbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUodmUpLnRoZW4oZnVuY3Rpb24oc2UpIHtcbiAgICAgICAgICAgIEooeyB2YWx1ZTogc2UsIGRvbmU6IGRlIH0pO1xuICAgICAgICAgIH0sIFopO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBGKEksIFYpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLCBcInJhd1wiLCB7IHZhbHVlOiBWIH0pIDogSS5yYXcgPSBWLCBJO1xuICAgICAgfVxuICAgICAgdmFyIGsgPSBPYmplY3QuY3JlYXRlID8gZnVuY3Rpb24oSSwgVikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSSwgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogITAsIHZhbHVlOiBWIH0pO1xuICAgICAgfSA6IGZ1bmN0aW9uKEksIFYpIHtcbiAgICAgICAgSS5kZWZhdWx0ID0gVjtcbiAgICAgIH07XG4gICAgICBmdW5jdGlvbiBoKEkpIHtcbiAgICAgICAgaWYgKEkgJiYgSS5fX2VzTW9kdWxlKVxuICAgICAgICAgIHJldHVybiBJO1xuICAgICAgICB2YXIgViA9IHt9O1xuICAgICAgICBpZiAoSSAhPSBudWxsKVxuICAgICAgICAgIGZvciAodmFyIFcgaW4gSSlcbiAgICAgICAgICAgIFcgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChJLCBXKSAmJiBtKFYsIEksIFcpO1xuICAgICAgICByZXR1cm4gayhWLCBJKSwgVjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE4oSSkge1xuICAgICAgICByZXR1cm4gSSAmJiBJLl9fZXNNb2R1bGUgPyBJIDogeyBkZWZhdWx0OiBJIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBQKEksIFYpIHtcbiAgICAgICAgaWYgKCFWLmhhcyhJKSlcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcbiAgICAgICAgcmV0dXJuIFYuZ2V0KEkpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gaihJLCBWLCBXKSB7XG4gICAgICAgIGlmICghVi5oYXMoSSkpXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XG4gICAgICAgIHJldHVybiBWLnNldChJLCBXKSwgVztcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDg5KSksIHAgPSBzKHQoNCkpLCB2ID0gcyh0KDI2KSksIGIgPSBzKHQoMTcpKSwgUyA9IHModCgxMjApKSwgRCA9IHModCgyNykpLCBUID0gcyh0KDkxKSksIG0gPSBzKHQoNzApKSwgeCA9IHModCg0NCkpLCBSID0gcyh0KDU3KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSksIGkuRG9tRWxlbWVudCA9IHZvaWQgMDtcbiAgICAgIHZhciB3ID0gdCgyKSwgQSA9IHQoNiksIEUgPSBbXTtcbiAgICAgIGZ1bmN0aW9uIEMoaykge1xuICAgICAgICB2YXIgaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGguaW5uZXJIVE1MID0gaztcbiAgICAgICAgdmFyIE4gPSBoLmNoaWxkcmVuO1xuICAgICAgICByZXR1cm4gQS50b0FycmF5KE4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gTShrKSB7XG4gICAgICAgIHJldHVybiBrID8gayBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uIHx8IGsgaW5zdGFuY2VvZiBOb2RlTGlzdCA6ICExO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24geShrKSB7XG4gICAgICAgIHZhciBoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChrKTtcbiAgICAgICAgcmV0dXJuIEEudG9BcnJheShoKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEIoaykge1xuICAgICAgICB2YXIgaCA9IFtdLCBOID0gW107XG4gICAgICAgIHJldHVybiAoMCwgYy5kZWZhdWx0KShrKSA/IGggPSBrIDogaCA9IGsuc3BsaXQoXCI7XCIpLCAoMCwgcC5kZWZhdWx0KShoKS5jYWxsKGgsIGZ1bmN0aW9uKFApIHtcbiAgICAgICAgICB2YXIgaiwgSSA9ICgwLCB2LmRlZmF1bHQpKGogPSBQLnNwbGl0KFwiOlwiKSkuY2FsbChqLCBmdW5jdGlvbihWKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIGIuZGVmYXVsdCkoVikuY2FsbChWKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBJLmxlbmd0aCA9PT0gMiAmJiBOLnB1c2goSVswXSArIFwiOlwiICsgSVsxXSk7XG4gICAgICAgIH0pLCBOO1xuICAgICAgfVxuICAgICAgdmFyICQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZnVuY3Rpb24gayhoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZWxlbXMgPSBbXSwgdGhpcy5sZW5ndGggPSB0aGlzLmVsZW1zLmxlbmd0aCwgdGhpcy5kYXRhU291cmNlID0gbmV3IFMuZGVmYXVsdCgpLCAhIWgpIHtcbiAgICAgICAgICAgIGlmIChoIGluc3RhbmNlb2YgaylcbiAgICAgICAgICAgICAgcmV0dXJuIGg7XG4gICAgICAgICAgICB2YXIgTiA9IFtdLCBQID0gaCBpbnN0YW5jZW9mIE5vZGUgPyBoLm5vZGVUeXBlIDogLTE7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RvciA9IGgsIFAgPT09IDEgfHwgUCA9PT0gOSlcbiAgICAgICAgICAgICAgTiA9IFtoXTtcbiAgICAgICAgICAgIGVsc2UgaWYgKE0oaCkpXG4gICAgICAgICAgICAgIE4gPSBBLnRvQXJyYXkoaCk7XG4gICAgICAgICAgICBlbHNlIGlmIChoIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICAgIE4gPSBoO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGggPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICB2YXIgaiwgSSA9ICgwLCBiLmRlZmF1bHQpKGogPSBoLnJlcGxhY2UoYC9cbi9tZ2AsIFwiXCIpKS5jYWxsKGopO1xuICAgICAgICAgICAgICAoMCwgRC5kZWZhdWx0KShJKS5jYWxsKEksIFwiPFwiKSA9PT0gMCA/IE4gPSBDKEkpIDogTiA9IHkoSSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgViA9IE4ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKCFWKVxuICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIGZvciAodmFyIFcgPSAwOyBXIDwgVjsgVysrKVxuICAgICAgICAgICAgICB0aGlzLmVsZW1zLnB1c2goTltXXSk7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCA9IFY7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoMCwgZC5kZWZhdWx0KShrLnByb3RvdHlwZSwgXCJpZFwiLCB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1zWzBdLmlkO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgICB9KSwgay5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICBmb3IgKHZhciBOID0gMDsgTiA8IHRoaXMubGVuZ3RoOyBOKyspIHtcbiAgICAgICAgICAgIHZhciBQID0gdGhpcy5lbGVtc1tOXSwgaiA9IGguY2FsbChQLCBQLCBOKTtcbiAgICAgICAgICAgIGlmIChqID09PSAhMSlcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LCBrLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICB2YXIgTjtcbiAgICAgICAgICBoID09PSB2b2lkIDAgJiYgKGggPSAhMSk7XG4gICAgICAgICAgdmFyIFAgPSBbXTtcbiAgICAgICAgICByZXR1cm4gKDAsIHAuZGVmYXVsdCkoTiA9IHRoaXMuZWxlbXMpLmNhbGwoTiwgZnVuY3Rpb24oaikge1xuICAgICAgICAgICAgUC5wdXNoKGouY2xvbmVOb2RlKCEhaCkpO1xuICAgICAgICAgIH0pLCBGKFApO1xuICAgICAgICB9LCBrLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgaCA9PT0gdm9pZCAwICYmIChoID0gMCk7XG4gICAgICAgICAgdmFyIE4gPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgICByZXR1cm4gaCA+PSBOICYmIChoID0gaCAlIE4pLCBGKHRoaXMuZWxlbXNbaF0pO1xuICAgICAgICB9LCBrLnByb3RvdHlwZS5maXJzdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldCgwKTtcbiAgICAgICAgfSwgay5wcm90b3R5cGUubGFzdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBoID0gdGhpcy5sZW5ndGg7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGggLSAxKTtcbiAgICAgICAgfSwgay5wcm90b3R5cGUub24gPSBmdW5jdGlvbihoLCBOLCBQKSB7XG4gICAgICAgICAgdmFyIGo7XG4gICAgICAgICAgcmV0dXJuIGggPyAodHlwZW9mIE4gPT0gXCJmdW5jdGlvblwiICYmIChQID0gTiwgTiA9IFwiXCIpLCAoMCwgcC5kZWZhdWx0KShqID0gdGhpcykuY2FsbChqLCBmdW5jdGlvbihJKSB7XG4gICAgICAgICAgICBpZiAoIU4pIHtcbiAgICAgICAgICAgICAgSS5hZGRFdmVudExpc3RlbmVyKGgsIFApO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgViA9IGZ1bmN0aW9uKFEpIHtcbiAgICAgICAgICAgICAgdmFyIFggPSBRLnRhcmdldDtcbiAgICAgICAgICAgICAgWC5tYXRjaGVzKE4pICYmIFAuY2FsbChYLCBRKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBJLmFkZEV2ZW50TGlzdGVuZXIoaCwgViksIEUucHVzaCh7IGVsZW06IEksIHNlbGVjdG9yOiBOLCBmbjogUCwgYWdlbnRGbjogViB9KTtcbiAgICAgICAgICB9KSkgOiB0aGlzO1xuICAgICAgICB9LCBrLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbihoLCBOLCBQKSB7XG4gICAgICAgICAgdmFyIGo7XG4gICAgICAgICAgcmV0dXJuIGggPyAodHlwZW9mIE4gPT0gXCJmdW5jdGlvblwiICYmIChQID0gTiwgTiA9IFwiXCIpLCAoMCwgcC5kZWZhdWx0KShqID0gdGhpcykuY2FsbChqLCBmdW5jdGlvbihJKSB7XG4gICAgICAgICAgICBpZiAoTikge1xuICAgICAgICAgICAgICBmb3IgKHZhciBWID0gLTEsIFcgPSAwOyBXIDwgRS5sZW5ndGg7IFcrKykge1xuICAgICAgICAgICAgICAgIHZhciBRID0gRVtXXTtcbiAgICAgICAgICAgICAgICBpZiAoUS5zZWxlY3RvciA9PT0gTiAmJiBRLmZuID09PSBQICYmIFEuZWxlbSA9PT0gSSkge1xuICAgICAgICAgICAgICAgICAgViA9IFc7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKFYgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdmFyIFggPSAoMCwgVC5kZWZhdWx0KShFKS5jYWxsKEUsIFYsIDEpWzBdLmFnZW50Rm47XG4gICAgICAgICAgICAgICAgSS5yZW1vdmVFdmVudExpc3RlbmVyKGgsIFgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgSS5yZW1vdmVFdmVudExpc3RlbmVyKGgsIFApO1xuICAgICAgICAgIH0pKSA6IHRoaXM7XG4gICAgICAgIH0sIGsucHJvdG90eXBlLmF0dHIgPSBmdW5jdGlvbihoLCBOKSB7XG4gICAgICAgICAgdmFyIFA7XG4gICAgICAgICAgcmV0dXJuIE4gPT0gbnVsbCA/IHRoaXMuZWxlbXNbMF0uZ2V0QXR0cmlidXRlKGgpIHx8IFwiXCIgOiAoMCwgcC5kZWZhdWx0KShQID0gdGhpcykuY2FsbChQLCBmdW5jdGlvbihqKSB7XG4gICAgICAgICAgICBqLnNldEF0dHJpYnV0ZShoLCBOKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgay5wcm90b3R5cGUucmVtb3ZlQXR0ciA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICB2YXIgTjtcbiAgICAgICAgICAoMCwgcC5kZWZhdWx0KShOID0gdGhpcykuY2FsbChOLCBmdW5jdGlvbihQKSB7XG4gICAgICAgICAgICBQLnJlbW92ZUF0dHJpYnV0ZShoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgay5wcm90b3R5cGUuYWRkQ2xhc3MgPSBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgdmFyIE47XG4gICAgICAgICAgcmV0dXJuIGggPyAoMCwgcC5kZWZhdWx0KShOID0gdGhpcykuY2FsbChOLCBmdW5jdGlvbihQKSB7XG4gICAgICAgICAgICBpZiAoUC5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgdmFyIGogPSBQLmNsYXNzTmFtZS5zcGxpdCgvXFxzLyk7XG4gICAgICAgICAgICAgIGogPSAoMCwgbS5kZWZhdWx0KShqKS5jYWxsKGosIGZ1bmN0aW9uKEkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISEoMCwgYi5kZWZhdWx0KShJKS5jYWxsKEkpO1xuICAgICAgICAgICAgICB9KSwgKDAsIEQuZGVmYXVsdCkoaikuY2FsbChqLCBoKSA8IDAgJiYgai5wdXNoKGgpLCBQLmNsYXNzTmFtZSA9IGouam9pbihcIiBcIik7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgUC5jbGFzc05hbWUgPSBoO1xuICAgICAgICAgIH0pIDogdGhpcztcbiAgICAgICAgfSwgay5wcm90b3R5cGUucmVtb3ZlQ2xhc3MgPSBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgdmFyIE47XG4gICAgICAgICAgcmV0dXJuIGggPyAoMCwgcC5kZWZhdWx0KShOID0gdGhpcykuY2FsbChOLCBmdW5jdGlvbihQKSB7XG4gICAgICAgICAgICBpZiAoISFQLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICB2YXIgaiA9IFAuY2xhc3NOYW1lLnNwbGl0KC9cXHMvKTtcbiAgICAgICAgICAgICAgaiA9ICgwLCBtLmRlZmF1bHQpKGopLmNhbGwoaiwgZnVuY3Rpb24oSSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBJID0gKDAsIGIuZGVmYXVsdCkoSSkuY2FsbChJKSwgISghSSB8fCBJID09PSBoKTtcbiAgICAgICAgICAgICAgfSksIFAuY2xhc3NOYW1lID0gai5qb2luKFwiIFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSA6IHRoaXM7XG4gICAgICAgIH0sIGsucHJvdG90eXBlLmhhc0NsYXNzID0gZnVuY3Rpb24oaCkge1xuICAgICAgICAgIGlmICghaClcbiAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICB2YXIgTiA9IHRoaXMuZWxlbXNbMF07XG4gICAgICAgICAgaWYgKCFOLmNsYXNzTmFtZSlcbiAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICB2YXIgUCA9IE4uY2xhc3NOYW1lLnNwbGl0KC9cXHMvKTtcbiAgICAgICAgICByZXR1cm4gKDAsIHguZGVmYXVsdCkoUCkuY2FsbChQLCBoKTtcbiAgICAgICAgfSwgay5wcm90b3R5cGUuY3NzID0gZnVuY3Rpb24oaCwgTikge1xuICAgICAgICAgIHZhciBQLCBqO1xuICAgICAgICAgIHJldHVybiBOID09IFwiXCIgPyBqID0gXCJcIiA6IGogPSBoICsgXCI6XCIgKyBOICsgXCI7XCIsICgwLCBwLmRlZmF1bHQpKFAgPSB0aGlzKS5jYWxsKFAsIGZ1bmN0aW9uKEkpIHtcbiAgICAgICAgICAgIHZhciBWLCBXID0gKDAsIGIuZGVmYXVsdCkoViA9IEkuZ2V0QXR0cmlidXRlKFwic3R5bGVcIikgfHwgXCJcIikuY2FsbChWKTtcbiAgICAgICAgICAgIGlmIChXKSB7XG4gICAgICAgICAgICAgIHZhciBRID0gQihXKTtcbiAgICAgICAgICAgICAgUSA9ICgwLCB2LmRlZmF1bHQpKFEpLmNhbGwoUSwgZnVuY3Rpb24oWCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgRC5kZWZhdWx0KShYKS5jYWxsKFgsIGgpID09PSAwID8gaiA6IFg7XG4gICAgICAgICAgICAgIH0pLCBqICE9IFwiXCIgJiYgKDAsIEQuZGVmYXVsdCkoUSkuY2FsbChRLCBqKSA8IDAgJiYgUS5wdXNoKGopLCBqID09IFwiXCIgJiYgKFEgPSBCKFEpKSwgSS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBRLmpvaW4oXCI7IFwiKSk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgSS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBqKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgay5wcm90b3R5cGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGggPSB0aGlzLmVsZW1zWzBdO1xuICAgICAgICAgIHJldHVybiBoLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB9LCBrLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3NzKFwiZGlzcGxheVwiLCBcImJsb2NrXCIpO1xuICAgICAgICB9LCBrLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XG4gICAgICAgIH0sIGsucHJvdG90eXBlLmNoaWxkcmVuID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGggPSB0aGlzLmVsZW1zWzBdO1xuICAgICAgICAgIHJldHVybiBoID8gRihoLmNoaWxkcmVuKSA6IG51bGw7XG4gICAgICAgIH0sIGsucHJvdG90eXBlLmNoaWxkTm9kZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgaCA9IHRoaXMuZWxlbXNbMF07XG4gICAgICAgICAgcmV0dXJuIGggPyBGKGguY2hpbGROb2RlcykgOiBudWxsO1xuICAgICAgICB9LCBrLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGRBbGwgPSBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgZm9yICh2YXIgTiA9IHRoaXMuZ2V0Tm9kZSgpLCBQID0gdGhpcy5lbGVtc1swXTsgUC5oYXNDaGlsZE5vZGVzKCk7IClcbiAgICAgICAgICAgIE4uZmlyc3RDaGlsZCAmJiBQLnJlbW92ZUNoaWxkKE4uZmlyc3RDaGlsZCk7XG4gICAgICAgICAgdGhpcy5hcHBlbmQoaCk7XG4gICAgICAgIH0sIGsucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICB2YXIgTjtcbiAgICAgICAgICByZXR1cm4gKDAsIHAuZGVmYXVsdCkoTiA9IHRoaXMpLmNhbGwoTiwgZnVuY3Rpb24oUCkge1xuICAgICAgICAgICAgKDAsIHAuZGVmYXVsdCkoaCkuY2FsbChoLCBmdW5jdGlvbihqKSB7XG4gICAgICAgICAgICAgIFAuYXBwZW5kQ2hpbGQoaik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgay5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGg7XG4gICAgICAgICAgcmV0dXJuICgwLCBwLmRlZmF1bHQpKGggPSB0aGlzKS5jYWxsKGgsIGZ1bmN0aW9uKE4pIHtcbiAgICAgICAgICAgIGlmIChOLnJlbW92ZSlcbiAgICAgICAgICAgICAgTi5yZW1vdmUoKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgUCA9IE4ucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgUCAmJiBQLnJlbW92ZUNoaWxkKE4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBrLnByb3RvdHlwZS5pc0NvbnRhaW4gPSBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgdmFyIE4gPSB0aGlzLmVsZW1zWzBdLCBQID0gaC5lbGVtc1swXTtcbiAgICAgICAgICByZXR1cm4gTi5jb250YWlucyhQKTtcbiAgICAgICAgfSwgay5wcm90b3R5cGUuZ2V0Tm9kZU5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgaCA9IHRoaXMuZWxlbXNbMF07XG4gICAgICAgICAgcmV0dXJuIGgubm9kZU5hbWU7XG4gICAgICAgIH0sIGsucHJvdG90eXBlLmdldE5vZGUgPSBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgaCA9PT0gdm9pZCAwICYmIChoID0gMCk7XG4gICAgICAgICAgdmFyIE47XG4gICAgICAgICAgcmV0dXJuIE4gPSB0aGlzLmVsZW1zW2hdLCBOO1xuICAgICAgICB9LCBrLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24oaCkge1xuICAgICAgICAgIHZhciBOID0gdGhpcy5lbGVtc1swXTtcbiAgICAgICAgICByZXR1cm4gRihOLnF1ZXJ5U2VsZWN0b3JBbGwoaCkpO1xuICAgICAgICB9LCBrLnByb3RvdHlwZS50ZXh0ID0gZnVuY3Rpb24oaCkge1xuICAgICAgICAgIGlmIChoKSB7XG4gICAgICAgICAgICB2YXIgUDtcbiAgICAgICAgICAgIHJldHVybiAoMCwgcC5kZWZhdWx0KShQID0gdGhpcykuY2FsbChQLCBmdW5jdGlvbihqKSB7XG4gICAgICAgICAgICAgIGouaW5uZXJIVE1MID0gaDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgTiA9IHRoaXMuZWxlbXNbMF07XG4gICAgICAgICAgICByZXR1cm4gTi5pbm5lckhUTUwucmVwbGFjZSgvPFtePl0rPi9nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGsucHJvdG90eXBlLmh0bWwgPSBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgdmFyIE4gPSB0aGlzLmVsZW1zWzBdO1xuICAgICAgICAgIHJldHVybiBoID8gKE4uaW5uZXJIVE1MID0gaCwgdGhpcykgOiBOLmlubmVySFRNTDtcbiAgICAgICAgfSwgay5wcm90b3R5cGUudmFsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGgsIE4gPSB0aGlzLmVsZW1zWzBdO1xuICAgICAgICAgIHJldHVybiAoMCwgYi5kZWZhdWx0KShoID0gTi52YWx1ZSkuY2FsbChoKTtcbiAgICAgICAgfSwgay5wcm90b3R5cGUuZm9jdXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgaDtcbiAgICAgICAgICByZXR1cm4gKDAsIHAuZGVmYXVsdCkoaCA9IHRoaXMpLmNhbGwoaCwgZnVuY3Rpb24oTikge1xuICAgICAgICAgICAgTi5mb2N1cygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBrLnByb3RvdHlwZS5wcmV2ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGggPSB0aGlzLmVsZW1zWzBdO1xuICAgICAgICAgIHJldHVybiBGKGgucHJldmlvdXNFbGVtZW50U2libGluZyk7XG4gICAgICAgIH0sIGsucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgaCA9IHRoaXMuZWxlbXNbMF07XG4gICAgICAgICAgcmV0dXJuIEYoaC5uZXh0RWxlbWVudFNpYmxpbmcpO1xuICAgICAgICB9LCBrLnByb3RvdHlwZS5nZXROZXh0U2libGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBoID0gdGhpcy5lbGVtc1swXTtcbiAgICAgICAgICByZXR1cm4gRihoLm5leHRTaWJsaW5nKTtcbiAgICAgICAgfSwgay5wcm90b3R5cGUucGFyZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGggPSB0aGlzLmVsZW1zWzBdO1xuICAgICAgICAgIHJldHVybiBGKGgucGFyZW50RWxlbWVudCk7XG4gICAgICAgIH0sIGsucHJvdG90eXBlLnBhcmVudFVudGlsID0gZnVuY3Rpb24oaCwgTikge1xuICAgICAgICAgIHZhciBQID0gTiB8fCB0aGlzLmVsZW1zWzBdO1xuICAgICAgICAgIGlmIChQLm5vZGVOYW1lID09PSBcIkJPRFlcIilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIHZhciBqID0gUC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgIHJldHVybiBqID09PSBudWxsID8gbnVsbCA6IGoubWF0Y2hlcyhoKSA/IEYoaikgOiB0aGlzLnBhcmVudFVudGlsKGgsIGopO1xuICAgICAgICB9LCBrLnByb3RvdHlwZS5wYXJlbnRVbnRpbEVkaXRvciA9IGZ1bmN0aW9uKGgsIE4sIFApIHtcbiAgICAgICAgICB2YXIgaiA9IFAgfHwgdGhpcy5lbGVtc1swXTtcbiAgICAgICAgICBpZiAoRihqKS5lcXVhbChOLiR0ZXh0Q29udGFpbmVyRWxlbSkgfHwgRihqKS5lcXVhbChOLiR0b29sYmFyRWxlbSkpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB2YXIgSSA9IGoucGFyZW50RWxlbWVudDtcbiAgICAgICAgICByZXR1cm4gSSA9PT0gbnVsbCA/IG51bGwgOiBJLm1hdGNoZXMoaCkgPyBGKEkpIDogdGhpcy5wYXJlbnRVbnRpbEVkaXRvcihoLCBOLCBJKTtcbiAgICAgICAgfSwgay5wcm90b3R5cGUuZXF1YWwgPSBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgcmV0dXJuIGggaW5zdGFuY2VvZiBrID8gdGhpcy5lbGVtc1swXSA9PT0gaC5lbGVtc1swXSA6IGggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IHRoaXMuZWxlbXNbMF0gPT09IGggOiAhMTtcbiAgICAgICAgfSwgay5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24oaCkge1xuICAgICAgICAgIHZhciBOLCBQID0gRihoKSwgaiA9IFAuZWxlbXNbMF07XG4gICAgICAgICAgcmV0dXJuIGogPyAoMCwgcC5kZWZhdWx0KShOID0gdGhpcykuY2FsbChOLCBmdW5jdGlvbihJKSB7XG4gICAgICAgICAgICB2YXIgViA9IGoucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIFYgPT0gbnVsbCB8fCBWLmluc2VydEJlZm9yZShJLCBqKTtcbiAgICAgICAgICB9KSA6IHRoaXM7XG4gICAgICAgIH0sIGsucHJvdG90eXBlLmluc2VydEFmdGVyID0gZnVuY3Rpb24oaCkge1xuICAgICAgICAgIHZhciBOLCBQID0gRihoKSwgaiA9IFAuZWxlbXNbMF0sIEkgPSBqICYmIGoubmV4dFNpYmxpbmc7XG4gICAgICAgICAgcmV0dXJuIGogPyAoMCwgcC5kZWZhdWx0KShOID0gdGhpcykuY2FsbChOLCBmdW5jdGlvbihWKSB7XG4gICAgICAgICAgICB2YXIgVyA9IGoucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIEkgPyBXLmluc2VydEJlZm9yZShWLCBJKSA6IFcuYXBwZW5kQ2hpbGQoVik7XG4gICAgICAgICAgfSkgOiB0aGlzO1xuICAgICAgICB9LCBrLnByb3RvdHlwZS5kYXRhID0gZnVuY3Rpb24oaCwgTikge1xuICAgICAgICAgIGlmIChOICE9IG51bGwpXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc2V0KGgsIE4pO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZ2V0KGgpO1xuICAgICAgICB9LCBrLnByb3RvdHlwZS5nZXROb2RlVG9wID0gZnVuY3Rpb24oaCkge1xuICAgICAgICAgIGlmICh0aGlzLmxlbmd0aCA8IDEpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICB2YXIgTiA9IHRoaXMucGFyZW50KCk7XG4gICAgICAgICAgcmV0dXJuIGguJHRleHRFbGVtLmVxdWFsKHRoaXMpIHx8IGguJHRleHRFbGVtLmVxdWFsKE4pID8gdGhpcyA6IChOLnByaW9yID0gdGhpcywgTi5nZXROb2RlVG9wKGgpKTtcbiAgICAgICAgfSwgay5wcm90b3R5cGUuZ2V0T2Zmc2V0RGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBoID0gdGhpcy5lbGVtc1swXTtcbiAgICAgICAgICByZXR1cm4geyB0b3A6IGgub2Zmc2V0VG9wLCBsZWZ0OiBoLm9mZnNldExlZnQsIHdpZHRoOiBoLm9mZnNldFdpZHRoLCBoZWlnaHQ6IGgub2Zmc2V0SGVpZ2h0LCBwYXJlbnQ6IGgub2Zmc2V0UGFyZW50IH07XG4gICAgICAgIH0sIGsucHJvdG90eXBlLnNjcm9sbFRvcCA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICB2YXIgTiA9IHRoaXMuZWxlbXNbMF07XG4gICAgICAgICAgTi5zY3JvbGxUbyh7IHRvcDogaCB9KTtcbiAgICAgICAgfSwgaztcbiAgICAgIH0oKTtcbiAgICAgIGkuRG9tRWxlbWVudCA9ICQ7XG4gICAgICBmdW5jdGlvbiBGKCkge1xuICAgICAgICBmb3IgKHZhciBrID0gW10sIGggPSAwOyBoIDwgYXJndW1lbnRzLmxlbmd0aDsgaCsrKVxuICAgICAgICAgIGtbaF0gPSBhcmd1bWVudHNbaF07XG4gICAgICAgIHJldHVybiBuZXcgKCgwLCBSLmRlZmF1bHQpKCQpLmFwcGx5KCQsIHcuX19zcHJlYWRBcnJheXMoW3ZvaWQgMF0sIGspKSkoKTtcbiAgICAgIH1cbiAgICAgIGkuZGVmYXVsdCA9IEY7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgby5leHBvcnRzID0gdCgxODApO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg4KSwgZCA9IHQoNzEpLmYsIGMgPSB0KDEwMCksIHAgPSB0KDkpLCB2ID0gdCgzOSksIGIgPSB0KDE5KSwgUyA9IHQoMTYpLCBEID0gZnVuY3Rpb24obSkge1xuICAgICAgICB2YXIgeCA9IGZ1bmN0aW9uKHcsIEEsIEUpIHtcbiAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIG0pIHtcbiAgICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBtKCk7XG4gICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IG0odyk7XG4gICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IG0odywgQSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IG0odywgQSwgRSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB4LnByb3RvdHlwZSA9IG0ucHJvdG90eXBlLCB4O1xuICAgICAgfTtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKFQsIG0pIHtcbiAgICAgICAgdmFyIHggPSBULnRhcmdldCwgUiA9IFQuZ2xvYmFsLCB3ID0gVC5zdGF0LCBBID0gVC5wcm90bywgRSA9IFIgPyBzIDogdyA/IHNbeF0gOiAoc1t4XSB8fCB7fSkucHJvdG90eXBlLCBDID0gUiA/IHAgOiBwW3hdIHx8IChwW3hdID0ge30pLCBNID0gQy5wcm90b3R5cGUsIHksIEIsICQsIEYsIGssIGgsIE4sIFAsIGo7XG4gICAgICAgIGZvciAoRiBpbiBtKVxuICAgICAgICAgIHkgPSBjKFIgPyBGIDogeCArICh3ID8gXCIuXCIgOiBcIiNcIikgKyBGLCBULmZvcmNlZCksIEIgPSAheSAmJiBFICYmIFMoRSwgRiksIGggPSBDW0ZdLCBCICYmIChULm5vVGFyZ2V0R2V0ID8gKGogPSBkKEUsIEYpLCBOID0gaiAmJiBqLnZhbHVlKSA6IE4gPSBFW0ZdKSwgayA9IEIgJiYgTiA/IE4gOiBtW0ZdLCAhKEIgJiYgenQoaCkgPT09IHp0KGspKSAmJiAoVC5iaW5kICYmIEIgPyBQID0gdihrLCBzKSA6IFQud3JhcCAmJiBCID8gUCA9IEQoaykgOiBBICYmIHR5cGVvZiBrID09IFwiZnVuY3Rpb25cIiA/IFAgPSB2KEZ1bmN0aW9uLmNhbGwsIGspIDogUCA9IGssIChULnNoYW0gfHwgayAmJiBrLnNoYW0gfHwgaCAmJiBoLnNoYW0pICYmIGIoUCwgXCJzaGFtXCIsICEwKSwgQ1tGXSA9IFAsIEEgJiYgKCQgPSB4ICsgXCJQcm90b3R5cGVcIiwgUyhwLCAkKSB8fCBiKHAsICQsIHt9KSwgcFskXVtGXSA9IGssIFQucmVhbCAmJiBNICYmICFNW0ZdICYmIGIoTSwgRiwgaykpKTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDkyKSksIGMgPSBzKHQoMSkpLCBwID0gcyh0KDI1NikpLCB2ID0gcyh0KDQ1KSksIGIgPSBzKHQoNDYpKSwgUyA9IHModCg4OSkpLCBEID0gcyh0KDI2KSk7XG4gICAgICAoMCwgYy5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSksIGkuaGV4VG9SZ2IgPSBpLmdldFJhbmRvbUNvZGUgPSBpLnRvQXJyYXkgPSBpLmRlZXBDbG9uZSA9IGkuaXNGdW5jdGlvbiA9IGkuZGVib3VuY2UgPSBpLnRocm90dGxlID0gaS5hcnJGb3JFYWNoID0gaS5mb3JFYWNoID0gaS5yZXBsYWNlU3BlY2lhbFN5bWJvbCA9IGkucmVwbGFjZUh0bWxTeW1ib2wgPSBpLmdldFJhbmRvbSA9IGkuVUEgPSB2b2lkIDA7XG4gICAgICB2YXIgVCA9IHQoMiksIG0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZnVuY3Rpb24gaCgpIHtcbiAgICAgICAgICB0aGlzLl91YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgICAgICAgdmFyIE4gPSB0aGlzLl91YS5tYXRjaCgvKEVkZ2U/KVxcLyhcXGQrKS8pO1xuICAgICAgICAgIHRoaXMuaXNPbGRFZGdlID0gISEoTiAmJiBOWzFdID09IFwiRWRnZVwiICYmICgwLCBwLmRlZmF1bHQpKE5bMl0pIDwgMTkpLCB0aGlzLmlzRmlyZWZveCA9ICEhKC9GaXJlZm94XFwvXFxkKy8udGVzdCh0aGlzLl91YSkgJiYgIS9TZWFtb25rZXlcXC9cXGQrLy50ZXN0KHRoaXMuX3VhKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGgucHJvdG90eXBlLmlzSUUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gXCJBY3RpdmVYT2JqZWN0XCIgaW4gd2luZG93O1xuICAgICAgICB9LCBoLnByb3RvdHlwZS5pc1dlYmtpdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAvd2Via2l0L2kudGVzdCh0aGlzLl91YSk7XG4gICAgICAgIH0sIGg7XG4gICAgICB9KCk7XG4gICAgICBpLlVBID0gbmV3IG0oKTtcbiAgICAgIGZ1bmN0aW9uIHgoaCkge1xuICAgICAgICB2YXIgTjtcbiAgICAgICAgcmV0dXJuIGggPT09IHZvaWQgMCAmJiAoaCA9IFwiXCIpLCBoICsgKDAsIHYuZGVmYXVsdCkoTiA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSkuY2FsbChOLCAyKTtcbiAgICAgIH1cbiAgICAgIGkuZ2V0UmFuZG9tID0geDtcbiAgICAgIGZ1bmN0aW9uIFIoaCkge1xuICAgICAgICByZXR1cm4gaC5yZXBsYWNlKC88L2dtLCBcIiZsdDtcIikucmVwbGFjZSgvPi9nbSwgXCImZ3Q7XCIpLnJlcGxhY2UoL1wiL2dtLCBcIiZxdW90O1wiKS5yZXBsYWNlKC8oXFxyXFxufFxccnxcXG4pL2csIFwiPGJyLz5cIik7XG4gICAgICB9XG4gICAgICBpLnJlcGxhY2VIdG1sU3ltYm9sID0gUjtcbiAgICAgIGZ1bmN0aW9uIHcoaCkge1xuICAgICAgICByZXR1cm4gaC5yZXBsYWNlKC8mbHQ7L2dtLCBcIjxcIikucmVwbGFjZSgvJmd0Oy9nbSwgXCI+XCIpLnJlcGxhY2UoLyZxdW90Oy9nbSwgJ1wiJyk7XG4gICAgICB9XG4gICAgICBpLnJlcGxhY2VTcGVjaWFsU3ltYm9sID0gdztcbiAgICAgIGZ1bmN0aW9uIEEoaCwgTikge1xuICAgICAgICBmb3IgKHZhciBQIGluIGgpXG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChoLCBQKSkge1xuICAgICAgICAgICAgdmFyIGogPSBOKFAsIGhbUF0pO1xuICAgICAgICAgICAgaWYgKGogPT09ICExKVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBpLmZvckVhY2ggPSBBO1xuICAgICAgZnVuY3Rpb24gRShoLCBOKSB7XG4gICAgICAgIHZhciBQLCBqLCBJLCBWID0gaC5sZW5ndGggfHwgMDtcbiAgICAgICAgZm9yIChQID0gMDsgUCA8IFYgJiYgKGogPSBoW1BdLCBJID0gTi5jYWxsKGgsIGosIFApLCBJICE9PSAhMSk7IFArKylcbiAgICAgICAgICA7XG4gICAgICB9XG4gICAgICBpLmFyckZvckVhY2ggPSBFO1xuICAgICAgZnVuY3Rpb24gQyhoLCBOKSB7XG4gICAgICAgIE4gPT09IHZvaWQgMCAmJiAoTiA9IDIwMCk7XG4gICAgICAgIHZhciBQID0gITE7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gdGhpcywgSSA9IFtdLCBWID0gMDsgViA8IGFyZ3VtZW50cy5sZW5ndGg7IFYrKylcbiAgICAgICAgICAgIElbVl0gPSBhcmd1bWVudHNbVl07XG4gICAgICAgICAgUCB8fCAoUCA9ICEwLCAoMCwgYi5kZWZhdWx0KShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIFAgPSAhMSwgaC5jYWxsLmFwcGx5KGgsIFQuX19zcHJlYWRBcnJheXMoW2pdLCBJKSk7XG4gICAgICAgICAgfSwgTikpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaS50aHJvdHRsZSA9IEM7XG4gICAgICBmdW5jdGlvbiBNKGgsIE4pIHtcbiAgICAgICAgTiA9PT0gdm9pZCAwICYmIChOID0gMjAwKTtcbiAgICAgICAgdmFyIFAgPSAwO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IHRoaXMsIEkgPSBbXSwgViA9IDA7IFYgPCBhcmd1bWVudHMubGVuZ3RoOyBWKyspXG4gICAgICAgICAgICBJW1ZdID0gYXJndW1lbnRzW1ZdO1xuICAgICAgICAgIFAgJiYgd2luZG93LmNsZWFyVGltZW91dChQKSwgUCA9ICgwLCBiLmRlZmF1bHQpKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgUCA9IDAsIGguY2FsbC5hcHBseShoLCBULl9fc3ByZWFkQXJyYXlzKFtqXSwgSSkpO1xuICAgICAgICAgIH0sIE4pO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaS5kZWJvdW5jZSA9IE07XG4gICAgICBmdW5jdGlvbiB5KGgpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBoID09IFwiZnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICAgIGkuaXNGdW5jdGlvbiA9IHk7XG4gICAgICBmdW5jdGlvbiBCKGgpIHtcbiAgICAgICAgaWYgKCgwLCBkLmRlZmF1bHQpKGgpICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBoID09IFwiZnVuY3Rpb25cIiB8fCBoID09PSBudWxsKVxuICAgICAgICAgIHJldHVybiBoO1xuICAgICAgICB2YXIgTjtcbiAgICAgICAgKDAsIFMuZGVmYXVsdCkoaCkgJiYgKE4gPSBbXSksICgwLCBTLmRlZmF1bHQpKGgpIHx8IChOID0ge30pO1xuICAgICAgICBmb3IgKHZhciBQIGluIGgpXG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGgsIFApICYmIChOW1BdID0gQihoW1BdKSk7XG4gICAgICAgIHJldHVybiBOO1xuICAgICAgfVxuICAgICAgaS5kZWVwQ2xvbmUgPSBCO1xuICAgICAgZnVuY3Rpb24gJChoKSB7XG4gICAgICAgIHJldHVybiAoMCwgdi5kZWZhdWx0KShBcnJheS5wcm90b3R5cGUpLmNhbGwoaCk7XG4gICAgICB9XG4gICAgICBpLnRvQXJyYXkgPSAkO1xuICAgICAgZnVuY3Rpb24gRigpIHtcbiAgICAgICAgdmFyIGg7XG4gICAgICAgIHJldHVybiAoMCwgdi5kZWZhdWx0KShoID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikpLmNhbGwoaCwgLTUpO1xuICAgICAgfVxuICAgICAgaS5nZXRSYW5kb21Db2RlID0gRjtcbiAgICAgIGZ1bmN0aW9uIGsoaCkge1xuICAgICAgICB2YXIgTiA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2kuZXhlYyhoKTtcbiAgICAgICAgaWYgKE4gPT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIFAgPSAoMCwgRC5kZWZhdWx0KShOKS5jYWxsKE4sIGZ1bmN0aW9uKFcpIHtcbiAgICAgICAgICByZXR1cm4gKDAsIHAuZGVmYXVsdCkoVywgMTYpO1xuICAgICAgICB9KSwgaiA9IFBbMV0sIEkgPSBQWzJdLCBWID0gUFszXTtcbiAgICAgICAgcmV0dXJuIFwicmdiKFwiICsgaiArIFwiLCBcIiArIEkgKyBcIiwgXCIgKyBWICsgXCIpXCI7XG4gICAgICB9XG4gICAgICBpLmhleFRvUmdiID0gaztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pLCBpLkVNUFRZX1BfUkVHRVggPSBpLkVNUFRZX1BfTEFTVF9SRUdFWCA9IGkuRU1QVFlfUCA9IGkudXJsUmVnZXggPSBpLkVNUFRZX0ZOID0gdm9pZCAwO1xuICAgICAgZnVuY3Rpb24gYygpIHtcbiAgICAgIH1cbiAgICAgIGkuRU1QVFlfRk4gPSBjLCBpLnVybFJlZ2V4ID0gL14oaHR0cHxmdHB8aHR0cHMpOlxcL1xcL1tcXHdcXC1fXSsoXFwuW1xcd1xcLV9dKykrKFtcXHdcXC0uLEA/Xj0lJmFtcDs6L34rI10qW1xcd1xcLUA/Xj0lJmFtcDsvfisjXSk/LywgaS5FTVBUWV9QID0gJzxwIGRhdGEtd2UtZW1wdHktcD1cIlwiPjxicj48L3A+JywgaS5FTVBUWV9QX0xBU1RfUkVHRVggPSAvPHAgZGF0YS13ZS1lbXB0eS1wPVwiXCI+PGJyXFwvPz48XFwvcD4kL2dpbSwgaS5FTVBUWV9QX1JFR0VYID0gLzxwIGRhdGEtd2UtZW1wdHktcD1cIlwiPi9naW07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgdmFyIGQgPSBmdW5jdGlvbihwKSB7XG4gICAgICAgICAgcmV0dXJuIHAgJiYgcC5NYXRoID09IE1hdGggJiYgcDtcbiAgICAgICAgfTtcbiAgICAgICAgby5leHBvcnRzID0gZCgodHlwZW9mIGdsb2JhbFRoaXMgPiBcInVcIiA/IFwidW5kZWZpbmVkXCIgOiB6dChnbG9iYWxUaGlzKSkgPT0gXCJvYmplY3RcIiAmJiBnbG9iYWxUaGlzKSB8fCBkKCh0eXBlb2Ygd2luZG93ID4gXCJ1XCIgPyBcInVuZGVmaW5lZFwiIDogenQod2luZG93KSkgPT0gXCJvYmplY3RcIiAmJiB3aW5kb3cpIHx8IGQoKHR5cGVvZiBzZWxmID4gXCJ1XCIgPyBcInVuZGVmaW5lZFwiIDogenQoc2VsZikpID09IFwib2JqZWN0XCIgJiYgc2VsZikgfHwgZCh6dChzKSA9PSBcIm9iamVjdFwiICYmIHMpIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbiAgICAgIH0pLmNhbGwodGhpcywgdCgxNDUpKTtcbiAgICB9LCBmdW5jdGlvbihvLCBpKSB7XG4gICAgICBvLmV4cG9ydHMgPSB7fTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoOCksIGQgPSB0KDc0KSwgYyA9IHQoMTYpLCBwID0gdCg2NCksIHYgPSB0KDc2KSwgYiA9IHQoMTA1KSwgUyA9IGQoXCJ3a3NcIiksIEQgPSBzLlN5bWJvbCwgVCA9IGIgPyBEIDogRCAmJiBELndpdGhvdXRTZXR0ZXIgfHwgcDtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgcmV0dXJuIGMoUywgbSkgfHwgKHYgJiYgYyhELCBtKSA/IFNbbV0gPSBEW21dIDogU1ttXSA9IFQoXCJTeW1ib2wuXCIgKyBtKSksIFNbbV07XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gISF0KCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoOSksIGQgPSB0KDE2KSwgYyA9IHQoOTMpLCBwID0gdCgxOCkuZjtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgdmFyIGIgPSBzLlN5bWJvbCB8fCAocy5TeW1ib2wgPSB7fSk7XG4gICAgICAgIGQoYiwgdikgfHwgcChiLCB2LCB7IHZhbHVlOiBjLmYodikgfSk7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgcmV0dXJuIHp0KHQpID09PSBcIm9iamVjdFwiID8gdCAhPT0gbnVsbCA6IHR5cGVvZiB0ID09IFwiZnVuY3Rpb25cIjtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDExKTtcbiAgICAgIG8uZXhwb3J0cyA9ICFzKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIDc7XG4gICAgICAgIH0gfSlbMV0gIT0gNztcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg5KTtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgcmV0dXJuIHNbZCArIFwiUHJvdG90eXBlXCJdO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpKSB7XG4gICAgICB2YXIgdCA9IHt9Lmhhc093blByb3BlcnR5O1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24ocywgZCkge1xuICAgICAgICByZXR1cm4gdC5jYWxsKHMsIGQpO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICBvLmV4cG9ydHMgPSB0KDE5Mik7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDE0KSwgZCA9IHQoOTkpLCBjID0gdCgyNSksIHAgPSB0KDYwKSwgdiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbiAgICAgIGkuZiA9IHMgPyB2IDogZnVuY3Rpb24oUywgRCwgVCkge1xuICAgICAgICBpZiAoYyhTKSwgRCA9IHAoRCwgITApLCBjKFQpLCBkKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdihTLCBELCBUKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB9XG4gICAgICAgIGlmIChcImdldFwiIGluIFQgfHwgXCJzZXRcIiBpbiBUKVxuICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICByZXR1cm4gXCJ2YWx1ZVwiIGluIFQgJiYgKFNbRF0gPSBULnZhbHVlKSwgUztcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDE0KSwgZCA9IHQoMTgpLCBjID0gdCg0OCk7XG4gICAgICBvLmV4cG9ydHMgPSBzID8gZnVuY3Rpb24ocCwgdiwgYikge1xuICAgICAgICByZXR1cm4gZC5mKHAsIHYsIGMoMSwgYikpO1xuICAgICAgfSA6IGZ1bmN0aW9uKHAsIHYsIGIpIHtcbiAgICAgICAgcmV0dXJuIHBbdl0gPSBiLCBwO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgRTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgRSA+IFwidVwiICYmIChFID0gQm9vbGVhbih3aW5kb3cgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWxsICYmICF3aW5kb3cuYXRvYikpLCBFO1xuICAgICAgICB9O1xuICAgICAgfSgpLCBkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBFID0ge307XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihNKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBFW01dID4gXCJ1XCIpIHtcbiAgICAgICAgICAgIHZhciB5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihNKTtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgeSBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudClcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB5ID0geS5jb250ZW50RG9jdW1lbnQuaGVhZDtcbiAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgeSA9IG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEVbTV0gPSB5O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gRVtNXTtcbiAgICAgICAgfTtcbiAgICAgIH0oKSwgYyA9IFtdO1xuICAgICAgZnVuY3Rpb24gcChBKSB7XG4gICAgICAgIGZvciAodmFyIEUgPSAtMSwgQyA9IDA7IEMgPCBjLmxlbmd0aDsgQysrKVxuICAgICAgICAgIGlmIChjW0NdLmlkZW50aWZpZXIgPT09IEEpIHtcbiAgICAgICAgICAgIEUgPSBDO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICByZXR1cm4gRTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHYoQSwgRSkge1xuICAgICAgICBmb3IgKHZhciBDID0ge30sIE0gPSBbXSwgeSA9IDA7IHkgPCBBLmxlbmd0aDsgeSsrKSB7XG4gICAgICAgICAgdmFyIEIgPSBBW3ldLCAkID0gRS5iYXNlID8gQlswXSArIEUuYmFzZSA6IEJbMF0sIEYgPSBDWyRdIHx8IDAsIGsgPSBcIlwiLmNvbmNhdCgkLCBcIiBcIikuY29uY2F0KEYpO1xuICAgICAgICAgIENbJF0gPSBGICsgMTtcbiAgICAgICAgICB2YXIgaCA9IHAoayksIE4gPSB7IGNzczogQlsxXSwgbWVkaWE6IEJbMl0sIHNvdXJjZU1hcDogQlszXSB9O1xuICAgICAgICAgIGggIT09IC0xID8gKGNbaF0ucmVmZXJlbmNlcysrLCBjW2hdLnVwZGF0ZXIoTikpIDogYy5wdXNoKHsgaWRlbnRpZmllcjogaywgdXBkYXRlcjogdyhOLCBFKSwgcmVmZXJlbmNlczogMSB9KSwgTS5wdXNoKGspO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gYihBKSB7XG4gICAgICAgIHZhciBFID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpLCBDID0gQS5hdHRyaWJ1dGVzIHx8IHt9O1xuICAgICAgICBpZiAodHlwZW9mIEMubm9uY2UgPiBcInVcIikge1xuICAgICAgICAgIHZhciBNID0gdC5uYztcbiAgICAgICAgICBNICYmIChDLm5vbmNlID0gTSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKEMpLmZvckVhY2goZnVuY3Rpb24oQikge1xuICAgICAgICAgIEUuc2V0QXR0cmlidXRlKEIsIENbQl0pO1xuICAgICAgICB9KSwgdHlwZW9mIEEuaW5zZXJ0ID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICBBLmluc2VydChFKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIHkgPSBkKEEuaW5zZXJ0IHx8IFwiaGVhZFwiKTtcbiAgICAgICAgICBpZiAoIXkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuICAgICAgICAgIHkuYXBwZW5kQ2hpbGQoRSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBTKEEpIHtcbiAgICAgICAgaWYgKEEucGFyZW50Tm9kZSA9PT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIEEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChBKTtcbiAgICAgIH1cbiAgICAgIHZhciBEID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBFID0gW107XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihNLCB5KSB7XG4gICAgICAgICAgcmV0dXJuIEVbTV0gPSB5LCBFLmZpbHRlcihCb29sZWFuKS5qb2luKGBcbmApO1xuICAgICAgICB9O1xuICAgICAgfSgpO1xuICAgICAgZnVuY3Rpb24gVChBLCBFLCBDLCBNKSB7XG4gICAgICAgIHZhciB5ID0gQyA/IFwiXCIgOiBNLm1lZGlhID8gXCJAbWVkaWEgXCIuY29uY2F0KE0ubWVkaWEsIFwiIHtcIikuY29uY2F0KE0uY3NzLCBcIn1cIikgOiBNLmNzcztcbiAgICAgICAgaWYgKEEuc3R5bGVTaGVldClcbiAgICAgICAgICBBLnN0eWxlU2hlZXQuY3NzVGV4dCA9IEQoRSwgeSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBCID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoeSksICQgPSBBLmNoaWxkTm9kZXM7XG4gICAgICAgICAgJFtFXSAmJiBBLnJlbW92ZUNoaWxkKCRbRV0pLCAkLmxlbmd0aCA/IEEuaW5zZXJ0QmVmb3JlKEIsICRbRV0pIDogQS5hcHBlbmRDaGlsZChCKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbShBLCBFLCBDKSB7XG4gICAgICAgIHZhciBNID0gQy5jc3MsIHkgPSBDLm1lZGlhLCBCID0gQy5zb3VyY2VNYXA7XG4gICAgICAgIGlmICh5ID8gQS5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCB5KSA6IEEucmVtb3ZlQXR0cmlidXRlKFwibWVkaWFcIiksIEIgJiYgdHlwZW9mIGJ0b2EgPCBcInVcIiAmJiAoTSArPSBgXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGAuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KEIpKSkpLCBcIiAqL1wiKSksIEEuc3R5bGVTaGVldClcbiAgICAgICAgICBBLnN0eWxlU2hlZXQuY3NzVGV4dCA9IE07XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGZvciAoOyBBLmZpcnN0Q2hpbGQ7IClcbiAgICAgICAgICAgIEEucmVtb3ZlQ2hpbGQoQS5maXJzdENoaWxkKTtcbiAgICAgICAgICBBLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKE0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIHggPSBudWxsLCBSID0gMDtcbiAgICAgIGZ1bmN0aW9uIHcoQSwgRSkge1xuICAgICAgICB2YXIgQywgTSwgeTtcbiAgICAgICAgaWYgKEUuc2luZ2xldG9uKSB7XG4gICAgICAgICAgdmFyIEIgPSBSKys7XG4gICAgICAgICAgQyA9IHggfHwgKHggPSBiKEUpKSwgTSA9IFQuYmluZChudWxsLCBDLCBCLCAhMSksIHkgPSBULmJpbmQobnVsbCwgQywgQiwgITApO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBDID0gYihFKSwgTSA9IG0uYmluZChudWxsLCBDLCBFKSwgeSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgUyhDKTtcbiAgICAgICAgICB9O1xuICAgICAgICByZXR1cm4gTShBKSwgZnVuY3Rpb24oRikge1xuICAgICAgICAgIGlmIChGKSB7XG4gICAgICAgICAgICBpZiAoRi5jc3MgPT09IEEuY3NzICYmIEYubWVkaWEgPT09IEEubWVkaWEgJiYgRi5zb3VyY2VNYXAgPT09IEEuc291cmNlTWFwKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBNKEEgPSBGKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHkoKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKEEsIEUpIHtcbiAgICAgICAgRSA9IEUgfHwge30sICFFLnNpbmdsZXRvbiAmJiB0eXBlb2YgRS5zaW5nbGV0b24gIT0gXCJib29sZWFuXCIgJiYgKEUuc2luZ2xldG9uID0gcygpKSwgQSA9IEEgfHwgW107XG4gICAgICAgIHZhciBDID0gdihBLCBFKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHkpIHtcbiAgICAgICAgICBpZiAoeSA9IHkgfHwgW10sIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh5KSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBCID0gMDsgQiA8IEMubGVuZ3RoOyBCKyspIHtcbiAgICAgICAgICAgICAgdmFyICQgPSBDW0JdLCBGID0gcCgkKTtcbiAgICAgICAgICAgICAgY1tGXS5yZWZlcmVuY2VzLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBrID0gdih5LCBFKSwgaCA9IDA7IGggPCBDLmxlbmd0aDsgaCsrKSB7XG4gICAgICAgICAgICAgIHZhciBOID0gQ1toXSwgUCA9IHAoTik7XG4gICAgICAgICAgICAgIGNbUF0ucmVmZXJlbmNlcyA9PT0gMCAmJiAoY1tQXS51cGRhdGVyKCksIGMuc3BsaWNlKFAsIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEMgPSBrO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24oYykge1xuICAgICAgICB2YXIgcCA9IFtdO1xuICAgICAgICByZXR1cm4gcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbihiKSB7XG4gICAgICAgICAgICB2YXIgUyA9IHMoYiwgYyk7XG4gICAgICAgICAgICByZXR1cm4gYlsyXSA/IFwiQG1lZGlhIFwiLmNvbmNhdChiWzJdLCBcIiB7XCIpLmNvbmNhdChTLCBcIn1cIikgOiBTO1xuICAgICAgICAgIH0pLmpvaW4oXCJcIik7XG4gICAgICAgIH0sIHAuaSA9IGZ1bmN0aW9uKHYsIGIsIFMpIHtcbiAgICAgICAgICB0eXBlb2YgdiA9PSBcInN0cmluZ1wiICYmICh2ID0gW1tudWxsLCB2LCBcIlwiXV0pO1xuICAgICAgICAgIHZhciBEID0ge307XG4gICAgICAgICAgaWYgKFMpXG4gICAgICAgICAgICBmb3IgKHZhciBUID0gMDsgVCA8IHRoaXMubGVuZ3RoOyBUKyspIHtcbiAgICAgICAgICAgICAgdmFyIG0gPSB0aGlzW1RdWzBdO1xuICAgICAgICAgICAgICBtICE9IG51bGwgJiYgKERbbV0gPSAhMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB2Lmxlbmd0aDsgeCsrKSB7XG4gICAgICAgICAgICB2YXIgUiA9IFtdLmNvbmNhdCh2W3hdKTtcbiAgICAgICAgICAgIFMgJiYgRFtSWzBdXSB8fCAoYiAmJiAoUlsyXSA/IFJbMl0gPSBcIlwiLmNvbmNhdChiLCBcIiBhbmQgXCIpLmNvbmNhdChSWzJdKSA6IFJbMl0gPSBiKSwgcC5wdXNoKFIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHA7XG4gICAgICB9O1xuICAgICAgZnVuY3Rpb24gcyhjLCBwKSB7XG4gICAgICAgIHZhciB2ID0gY1sxXSB8fCBcIlwiLCBiID0gY1szXTtcbiAgICAgICAgaWYgKCFiKVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBpZiAocCAmJiB0eXBlb2YgYnRvYSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICB2YXIgUyA9IGQoYiksIEQgPSBiLnNvdXJjZXMubWFwKGZ1bmN0aW9uKFQpIHtcbiAgICAgICAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGIuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoVCwgXCIgKi9cIik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIFt2XS5jb25jYXQoRCkuY29uY2F0KFtTXSkuam9pbihgXG5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3ZdLmpvaW4oYFxuYCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBkKGMpIHtcbiAgICAgICAgdmFyIHAgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjKSkpKSwgdiA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KHApO1xuICAgICAgICByZXR1cm4gXCIvKiMgXCIuY29uY2F0KHYsIFwiICovXCIpO1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxNCksIGQgPSB0KDExKSwgYyA9IHQoMTYpLCBwID0gT2JqZWN0LmRlZmluZVByb3BlcnR5LCB2ID0ge30sIGIgPSBmdW5jdGlvbihEKSB7XG4gICAgICAgIHRocm93IEQ7XG4gICAgICB9O1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24oUywgRCkge1xuICAgICAgICBpZiAoYyh2LCBTKSlcbiAgICAgICAgICByZXR1cm4gdltTXTtcbiAgICAgICAgRCB8fCAoRCA9IHt9KTtcbiAgICAgICAgdmFyIFQgPSBbXVtTXSwgbSA9IGMoRCwgXCJBQ0NFU1NPUlNcIikgPyBELkFDQ0VTU09SUyA6ICExLCB4ID0gYyhELCAwKSA/IERbMF0gOiBiLCBSID0gYyhELCAxKSA/IERbMV0gOiB2b2lkIDA7XG4gICAgICAgIHJldHVybiB2W1NdID0gISFUICYmICFkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChtICYmICFzKVxuICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgIHZhciB3ID0geyBsZW5ndGg6IC0xIH07XG4gICAgICAgICAgbSA/IHAodywgMSwgeyBlbnVtZXJhYmxlOiAhMCwgZ2V0OiBiIH0pIDogd1sxXSA9IDEsIFQuY2FsbCh3LCB4LCBSKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDk1KSksIHYgPSBmdW5jdGlvbihiKSB7XG4gICAgICAgIGMuX19leHRlbmRzKFMsIGIpO1xuICAgICAgICBmdW5jdGlvbiBTKEQsIFQpIHtcbiAgICAgICAgICByZXR1cm4gYi5jYWxsKHRoaXMsIEQsIFQpIHx8IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFM7XG4gICAgICB9KHAuZGVmYXVsdCk7XG4gICAgICBpLmRlZmF1bHQgPSB2O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoNCkpLCBwID0gcyh0KDQ2KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgdiA9IHQoMiksIGIgPSB2Ll9faW1wb3J0RGVmYXVsdCh0KDMpKSwgUyA9IHYuX19pbXBvcnREZWZhdWx0KHQoOTUpKSwgRCA9IHYuX19pbXBvcnREZWZhdWx0KHQoMTMzKSksIFQgPSBmdW5jdGlvbihtKSB7XG4gICAgICAgIHYuX19leHRlbmRzKHgsIG0pO1xuICAgICAgICBmdW5jdGlvbiB4KFIsIHcsIEEpIHtcbiAgICAgICAgICB2YXIgRSA9IG0uY2FsbCh0aGlzLCBSLCB3KSB8fCB0aGlzO1xuICAgICAgICAgIEEudGl0bGUgPSB3LmkxOG5leHQudChcIm1lbnVzLmRyb3BMaXN0TWVudS5cIiArIEEudGl0bGUpO1xuICAgICAgICAgIHZhciBDID0gdy5jb25maWcubGFuZyA9PT0gXCJ6aC1DTlwiID8gXCJcIiA6IFwidy1lLWRyb3AtbGlzdC10bFwiO1xuICAgICAgICAgIGlmIChDICE9PSBcIlwiICYmIEEudHlwZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgICAgICAgIHZhciBNO1xuICAgICAgICAgICAgKDAsIGMuZGVmYXVsdCkoTSA9IEEubGlzdCkuY2FsbChNLCBmdW5jdGlvbihCKSB7XG4gICAgICAgICAgICAgIHZhciAkID0gQi4kZWxlbSwgRiA9IGIuZGVmYXVsdCgkLmNoaWxkcmVuKCkpO1xuICAgICAgICAgICAgICBpZiAoRi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIGsgPSBGID09IG51bGwgPyB2b2lkIDAgOiBGLmdldE5vZGVOYW1lKCk7XG4gICAgICAgICAgICAgICAgayAmJiBrID09PSBcIklcIiAmJiAkLmFkZENsYXNzKEMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHkgPSBuZXcgRC5kZWZhdWx0KEUsIEEpO1xuICAgICAgICAgIHJldHVybiBFLmRyb3BMaXN0ID0geSwgUi5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIEI7XG4gICAgICAgICAgICB3LnNlbGVjdGlvbi5nZXRSYW5nZSgpICE9IG51bGwgJiYgKFIuY3NzKFwiei1pbmRleFwiLCB3LnpJbmRleC5nZXQoXCJtZW51XCIpKSwgKDAsIGMuZGVmYXVsdCkoQiA9IHcudHh0LmV2ZW50SG9va3MuZHJvcExpc3RNZW51SG92ZXJFdmVudHMpLmNhbGwoQiwgZnVuY3Rpb24oJCkge1xuICAgICAgICAgICAgICByZXR1cm4gJCgpO1xuICAgICAgICAgICAgfSksIHkuc2hvdygpKTtcbiAgICAgICAgICB9KS5vbihcIm1vdXNlbGVhdmVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBSLmNzcyhcInotaW5kZXhcIiwgXCJhdXRvXCIpLCB5LmhpZGVUaW1lb3V0SWQgPSAoMCwgcC5kZWZhdWx0KShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgeS5oaWRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSwgRTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geDtcbiAgICAgIH0oUy5kZWZhdWx0KTtcbiAgICAgIGkuZGVmYXVsdCA9IFQ7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDEzKTtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgaWYgKCFzKGQpKVxuICAgICAgICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoZCkgKyBcIiBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgICByZXR1cm4gZDtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgby5leHBvcnRzID0gdCgxODgpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIG8uZXhwb3J0cyA9IHQoMjAxKTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNzIpLCBkID0gdCg0OSk7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihjKSB7XG4gICAgICAgIHJldHVybiBzKGQoYykpO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNDkpO1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24oZCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0KHMoZCkpO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMzkpLCBkID0gdCg3MiksIGMgPSB0KDI5KSwgcCA9IHQoMzQpLCB2ID0gdCg4OCksIGIgPSBbXS5wdXNoLCBTID0gZnVuY3Rpb24oVCkge1xuICAgICAgICB2YXIgbSA9IFQgPT0gMSwgeCA9IFQgPT0gMiwgUiA9IFQgPT0gMywgdyA9IFQgPT0gNCwgQSA9IFQgPT0gNiwgRSA9IFQgPT0gNSB8fCBBO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oQywgTSwgeSwgQikge1xuICAgICAgICAgIGZvciAodmFyICQgPSBjKEMpLCBGID0gZCgkKSwgayA9IHMoTSwgeSwgMyksIGggPSBwKEYubGVuZ3RoKSwgTiA9IDAsIFAgPSBCIHx8IHYsIGogPSBtID8gUChDLCBoKSA6IHggPyBQKEMsIDApIDogdm9pZCAwLCBJLCBWOyBoID4gTjsgTisrKVxuICAgICAgICAgICAgaWYgKChFIHx8IE4gaW4gRikgJiYgKEkgPSBGW05dLCBWID0gayhJLCBOLCAkKSwgVCkpIHtcbiAgICAgICAgICAgICAgaWYgKG0pXG4gICAgICAgICAgICAgICAgaltOXSA9IFY7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKFYpXG4gICAgICAgICAgICAgICAgc3dpdGNoIChUKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEk7XG4gICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBOO1xuICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBiLmNhbGwoaiwgSSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIGlmICh3KVxuICAgICAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gQSA/IC0xIDogUiB8fCB3ID8gdyA6IGo7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgby5leHBvcnRzID0ge1xuICAgICAgICBmb3JFYWNoOiBTKDApLFxuICAgICAgICBtYXA6IFMoMSksXG4gICAgICAgIGZpbHRlcjogUygyKSxcbiAgICAgICAgc29tZTogUygzKSxcbiAgICAgICAgZXZlcnk6IFMoNCksXG4gICAgICAgIGZpbmQ6IFMoNSksXG4gICAgICAgIGZpbmRJbmRleDogUyg2KVxuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICBvLmV4cG9ydHMgPSB0KDI4Myk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCg0KSksIHAgPSBzKHQoMzEpKSwgdiA9IHModCgxMzEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBiID0gdCgyKSwgUyA9IGIuX19pbXBvcnREZWZhdWx0KHQoMykpLCBEID0gdCg3KSwgVCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmdW5jdGlvbiBtKHgsIFIpIHtcbiAgICAgICAgICB0aGlzLm1lbnUgPSB4LCB0aGlzLmNvbmYgPSBSLCB0aGlzLiRjb250YWluZXIgPSBTLmRlZmF1bHQoJzxkaXYgY2xhc3M9XCJ3LWUtcGFuZWwtY29udGFpbmVyXCI+PC9kaXY+Jyk7XG4gICAgICAgICAgdmFyIHcgPSB4LmVkaXRvcjtcbiAgICAgICAgICB3LnR4dC5ldmVudEhvb2tzLmNsaWNrRXZlbnRzLnB1c2gobS5oaWRlQ3VyQWxsUGFuZWxzKSwgdy50eHQuZXZlbnRIb29rcy50b29sYmFyQ2xpY2tFdmVudHMucHVzaChtLmhpZGVDdXJBbGxQYW5lbHMpLCB3LnR4dC5ldmVudEhvb2tzLmRyb3BMaXN0TWVudUhvdmVyRXZlbnRzLnB1c2gobS5oaWRlQ3VyQWxsUGFuZWxzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHggPSB0aGlzLCBSID0gdGhpcy5tZW51O1xuICAgICAgICAgIGlmICghbS5jcmVhdGVkTWVudXMuaGFzKFIpKSB7XG4gICAgICAgICAgICB2YXIgdyA9IHRoaXMuY29uZiwgQSA9IHRoaXMuJGNvbnRhaW5lciwgRSA9IHcud2lkdGggfHwgMzAwLCBDID0gUi5lZGl0b3IuJHRvb2xiYXJFbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBNID0gUi4kZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgeSA9IEMuaGVpZ2h0ICsgQy50b3AgLSBNLnRvcCwgQiA9IChDLndpZHRoIC0gRSkgLyAyICsgQy5sZWZ0IC0gTS5sZWZ0LCAkID0gMzAwO1xuICAgICAgICAgICAgTWF0aC5hYnMoQikgPiAkICYmIChNLmxlZnQgPCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLyAyID8gQiA9IC1NLndpZHRoIC8gMiA6IEIgPSAtRSArIE0ud2lkdGggLyAyKSwgQS5jc3MoXCJ3aWR0aFwiLCBFICsgXCJweFwiKS5jc3MoXCJtYXJnaW4tdG9wXCIsIHkgKyBcInB4XCIpLmNzcyhcIm1hcmdpbi1sZWZ0XCIsIEIgKyBcInB4XCIpLmNzcyhcInotaW5kZXhcIiwgUi5lZGl0b3IuekluZGV4LmdldChcInBhbmVsXCIpKTtcbiAgICAgICAgICAgIHZhciBGID0gUy5kZWZhdWx0KCc8aSBjbGFzcz1cInctZS1pY29uLWNsb3NlIHctZS1wYW5lbC1jbG9zZVwiPjwvaT4nKTtcbiAgICAgICAgICAgIEEuYXBwZW5kKEYpLCBGLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHgucmVtb3ZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBrID0gUy5kZWZhdWx0KCc8dWwgY2xhc3M9XCJ3LWUtcGFuZWwtdGFiLXRpdGxlXCI+PC91bD4nKSwgaCA9IFMuZGVmYXVsdCgnPGRpdiBjbGFzcz1cInctZS1wYW5lbC10YWItY29udGVudFwiPjwvZGl2PicpO1xuICAgICAgICAgICAgQS5hcHBlbmQoaykuYXBwZW5kKGgpO1xuICAgICAgICAgICAgdmFyIE4gPSB3LmhlaWdodDtcbiAgICAgICAgICAgIE4gJiYgaC5jc3MoXCJoZWlnaHRcIiwgTiArIFwicHhcIikuY3NzKFwib3ZlcmZsb3cteVwiLCBcImF1dG9cIik7XG4gICAgICAgICAgICB2YXIgUCA9IHcudGFicyB8fCBbXSwgaiA9IFtdLCBJID0gW107XG4gICAgICAgICAgICAoMCwgYy5kZWZhdWx0KShQKS5jYWxsKFAsIGZ1bmN0aW9uKFcsIFEpIHtcbiAgICAgICAgICAgICAgaWYgKCEhVykge1xuICAgICAgICAgICAgICAgIHZhciBYID0gVy50aXRsZSB8fCBcIlwiLCBKID0gVy50cGwgfHwgXCJcIiwgWiA9IFMuZGVmYXVsdCgnPGxpIGNsYXNzPVwidy1lLWl0ZW1cIj4nICsgWCArIFwiPC9saT5cIik7XG4gICAgICAgICAgICAgICAgay5hcHBlbmQoWik7XG4gICAgICAgICAgICAgICAgdmFyIGRlID0gUy5kZWZhdWx0KEopO1xuICAgICAgICAgICAgICAgIGguYXBwZW5kKGRlKSwgai5wdXNoKFopLCBJLnB1c2goZGUpLCBRID09PSAwID8gKFouZGF0YShcImFjdGl2ZVwiLCAhMCksIFouYWRkQ2xhc3MoXCJ3LWUtYWN0aXZlXCIpKSA6IGRlLmhpZGUoKSwgWi5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgWi5kYXRhKFwiYWN0aXZlXCIpIHx8ICgoMCwgYy5kZWZhdWx0KShqKS5jYWxsKGosIGZ1bmN0aW9uKHZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZlLmRhdGEoXCJhY3RpdmVcIiwgITEpLCB2ZS5yZW1vdmVDbGFzcyhcInctZS1hY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgICB9KSwgKDAsIGMuZGVmYXVsdCkoSSkuY2FsbChJLCBmdW5jdGlvbih2ZSkge1xuICAgICAgICAgICAgICAgICAgICB2ZS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICB9KSwgWi5kYXRhKFwiYWN0aXZlXCIsICEwKSwgWi5hZGRDbGFzcyhcInctZS1hY3RpdmVcIiksIGRlLnNob3coKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLCBBLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oVykge1xuICAgICAgICAgICAgICBXLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfSksIFIuJGVsZW0uYXBwZW5kKEEpLCAoMCwgYy5kZWZhdWx0KShQKS5jYWxsKFAsIGZ1bmN0aW9uKFcsIFEpIHtcbiAgICAgICAgICAgICAgaWYgKCEhVykge1xuICAgICAgICAgICAgICAgIHZhciBYID0gVy5ldmVudHMgfHwgW107XG4gICAgICAgICAgICAgICAgKDAsIGMuZGVmYXVsdCkoWCkuY2FsbChYLCBmdW5jdGlvbihKKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgWiwgZGUgPSBKLnNlbGVjdG9yLCB2ZSA9IEoudHlwZSwgc2UgPSBKLmZuIHx8IEQuRU1QVFlfRk4sIG1lID0gSVtRXSwgbGUgPSAoWiA9IEouYmluZEVudGVyKSAhPT0gbnVsbCAmJiBaICE9PSB2b2lkIDAgPyBaIDogITEsIGllID0gZnVuY3Rpb24odGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIuX19hd2FpdGVyKHgsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24oQWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoQWUubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZS5zdG9wUHJvcGFnYXRpb24oKSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlKHRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2UgPSBBZS5zZW50KCksIGdlICYmIHRoaXMucmVtb3ZlKCksIFsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgKDAsIHAuZGVmYXVsdCkobWUpLmNhbGwobWUsIGRlKS5vbih2ZSwgaWUpLCBsZSAmJiB2ZSA9PT0gXCJjbGlja1wiICYmIG1lLm9uKFwia2V5dXBcIiwgZnVuY3Rpb24ocGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcGUua2V5Q29kZSA9PSAxMyAmJiBpZShwZSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgViA9ICgwLCBwLmRlZmF1bHQpKEEpLmNhbGwoQSwgXCJpbnB1dFt0eXBlPXRleHRdLHRleHRhcmVhXCIpO1xuICAgICAgICAgICAgVi5sZW5ndGggJiYgVi5nZXQoMCkuZm9jdXMoKSwgbS5oaWRlQ3VyQWxsUGFuZWxzKCksIFIuc2V0UGFuZWwodGhpcyksIG0uY3JlYXRlZE1lbnVzLmFkZChSKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIG0ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciB4ID0gdGhpcy5tZW51LCBSID0gdGhpcy4kY29udGFpbmVyO1xuICAgICAgICAgIFIgJiYgUi5yZW1vdmUoKSwgbS5jcmVhdGVkTWVudXMuZGVsZXRlKHgpO1xuICAgICAgICB9LCBtLmhpZGVDdXJBbGxQYW5lbHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgeDtcbiAgICAgICAgICBtLmNyZWF0ZWRNZW51cy5zaXplICE9PSAwICYmICgwLCBjLmRlZmF1bHQpKHggPSBtLmNyZWF0ZWRNZW51cykuY2FsbCh4LCBmdW5jdGlvbihSKSB7XG4gICAgICAgICAgICB2YXIgdyA9IFIucGFuZWw7XG4gICAgICAgICAgICB3ICYmIHcucmVtb3ZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIG0uY3JlYXRlZE1lbnVzID0gbmV3IHYuZGVmYXVsdCgpLCBtO1xuICAgICAgfSgpO1xuICAgICAgaS5kZWZhdWx0ID0gVDtcbiAgICB9LCBmdW5jdGlvbihvLCBpKSB7XG4gICAgICB2YXIgdCA9IHt9LnRvU3RyaW5nO1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24ocykge1xuICAgICAgICByZXR1cm4gdC5jYWxsKHMpLnNsaWNlKDgsIC0xKTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDYyKSwgZCA9IE1hdGgubWluO1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24oYykge1xuICAgICAgICByZXR1cm4gYyA+IDAgPyBkKHMoYyksIDkwMDcxOTkyNTQ3NDA5OTEpIDogMDtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDkpLCBkID0gdCg4KSwgYyA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2ID09IFwiZnVuY3Rpb25cIiA/IHYgOiB2b2lkIDA7XG4gICAgICB9O1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24ocCwgdikge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBjKHNbcF0pIHx8IGMoZFtwXSkgOiBzW3BdICYmIHNbcF1bdl0gfHwgZFtwXSAmJiBkW3BdW3ZdO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoODEpLCBkID0gdCgxOCkuZiwgYyA9IHQoMTkpLCBwID0gdCgxNiksIHYgPSB0KDE3MCksIGIgPSB0KDEwKSwgUyA9IGIoXCJ0b1N0cmluZ1RhZ1wiKTtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKEQsIFQsIG0sIHgpIHtcbiAgICAgICAgaWYgKEQpIHtcbiAgICAgICAgICB2YXIgUiA9IG0gPyBEIDogRC5wcm90b3R5cGU7XG4gICAgICAgICAgcChSLCBTKSB8fCBkKFIsIFMsIHsgY29uZmlndXJhYmxlOiAhMCwgdmFsdWU6IFQgfSksIHggJiYgIXMgJiYgYyhSLCBcInRvU3RyaW5nXCIsIHYpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDk1KSksIHYgPSBmdW5jdGlvbihiKSB7XG4gICAgICAgIGMuX19leHRlbmRzKFMsIGIpO1xuICAgICAgICBmdW5jdGlvbiBTKEQsIFQpIHtcbiAgICAgICAgICByZXR1cm4gYi5jYWxsKHRoaXMsIEQsIFQpIHx8IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFMucHJvdG90eXBlLnNldFBhbmVsID0gZnVuY3Rpb24oRCkge1xuICAgICAgICAgIHRoaXMucGFuZWwgPSBEO1xuICAgICAgICB9LCBTO1xuICAgICAgfShwLmRlZmF1bHQpO1xuICAgICAgaS5kZWZhdWx0ID0gdjtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDQpKSwgcCA9IHModCg1NykpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIHYgPSB0KDIpLCBiID0gdi5fX2ltcG9ydERlZmF1bHQodCgzKSksIFMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZnVuY3Rpb24gRChULCBtLCB4KSB7XG4gICAgICAgICAgdGhpcy5lZGl0b3IgPSBULCB0aGlzLiR0YXJnZXRFbGVtID0gbSwgdGhpcy5jb25mID0geCwgdGhpcy5fc2hvdyA9ICExLCB0aGlzLl9pc0luc2VydFRleHRDb250YWluZXIgPSAhMTtcbiAgICAgICAgICB2YXIgUiA9IGIuZGVmYXVsdChcIjxkaXY+PC9kaXY+XCIpO1xuICAgICAgICAgIFIuYWRkQ2xhc3MoXCJ3LWUtdG9vbHRpcFwiKSwgdGhpcy4kY29udGFpbmVyID0gUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRC5wcm90b3R5cGUuZ2V0UG9zaXRpb25EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIFQgPSB0aGlzLiRjb250YWluZXIsIG0gPSAwLCB4ID0gMCwgUiA9IDIwLCB3ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCwgQSA9IHRoaXMuJHRhcmdldEVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIEUgPSB0aGlzLmVkaXRvci4kdGV4dEVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIEMgPSB0aGlzLiR0YXJnZXRFbGVtLmdldE9mZnNldERhdGEoKSwgTSA9IGIuZGVmYXVsdChDLnBhcmVudCksIHkgPSB0aGlzLmVkaXRvci4kdGV4dEVsZW0uZWxlbXNbMF0uc2Nyb2xsVG9wO1xuICAgICAgICAgIGlmICh0aGlzLl9pc0luc2VydFRleHRDb250YWluZXIgPSBNLmVxdWFsKHRoaXMuZWRpdG9yLiR0ZXh0Q29udGFpbmVyRWxlbSksIHRoaXMuX2lzSW5zZXJ0VGV4dENvbnRhaW5lcikge1xuICAgICAgICAgICAgdmFyIEIgPSBNLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCwgJCA9IEMudG9wLCBGID0gQy5sZWZ0LCBrID0gQy5oZWlnaHQsIGggPSAkIC0geTtcbiAgICAgICAgICAgIGggPiBSICsgNSA/IChtID0gaCAtIFIgLSAxNSwgVC5hZGRDbGFzcyhcInctZS10b29sdGlwLXVwXCIpKSA6IGggKyBrICsgUiA8IEIgPyAobSA9IGggKyBrICsgMTAsIFQuYWRkQ2xhc3MoXCJ3LWUtdG9vbHRpcC1kb3duXCIpKSA6IChtID0gKGggPiAwID8gaCA6IDApICsgUiArIDEwLCBULmFkZENsYXNzKFwidy1lLXRvb2x0aXAtZG93blwiKSksIEYgPCAwID8geCA9IDAgOiB4ID0gRjtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIEEudG9wIDwgUiB8fCBBLnRvcCAtIEUudG9wIDwgUiA/IChtID0gQS5ib3R0b20gKyB3ICsgNSwgVC5hZGRDbGFzcyhcInctZS10b29sdGlwLWRvd25cIikpIDogKG0gPSBBLnRvcCArIHcgLSBSIC0gMTUsIFQuYWRkQ2xhc3MoXCJ3LWUtdG9vbHRpcC11cFwiKSksIEEubGVmdCA8IDAgPyB4ID0gMCA6IHggPSBBLmxlZnQ7XG4gICAgICAgICAgcmV0dXJuIHsgdG9wOiBtLCBsZWZ0OiB4IH07XG4gICAgICAgIH0sIEQucHJvdG90eXBlLmFwcGVuZE1lbnVzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIFQgPSB0aGlzLCBtID0gdGhpcy5jb25mLCB4ID0gdGhpcy5lZGl0b3IsIFIgPSB0aGlzLiR0YXJnZXRFbGVtLCB3ID0gdGhpcy4kY29udGFpbmVyO1xuICAgICAgICAgICgwLCBjLmRlZmF1bHQpKG0pLmNhbGwobSwgZnVuY3Rpb24oQSwgRSkge1xuICAgICAgICAgICAgdmFyIEMgPSBBLiRlbGVtLCBNID0gYi5kZWZhdWx0KFwiPGRpdj48L2Rpdj5cIik7XG4gICAgICAgICAgICBNLmFkZENsYXNzKFwidy1lLXRvb2x0aXAtaXRlbS13cmFwcGVyIFwiKSwgTS5hcHBlbmQoQyksIHcuYXBwZW5kKE0pLCBDLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oeSkge1xuICAgICAgICAgICAgICB5LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIHZhciBCID0gQS5vbkNsaWNrKHgsIFIpO1xuICAgICAgICAgICAgICBCICYmIFQucmVtb3ZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgRC5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIFQsIG0sIHggPSB0aGlzLmVkaXRvciwgUiA9IHRoaXMuJGNvbnRhaW5lcjtcbiAgICAgICAgICB0aGlzLmFwcGVuZE1lbnVzKCk7XG4gICAgICAgICAgdmFyIHcgPSB0aGlzLmdldFBvc2l0aW9uRGF0YSgpLCBBID0gdy50b3AsIEUgPSB3LmxlZnQ7XG4gICAgICAgICAgUi5jc3MoXCJ0b3BcIiwgQSArIFwicHhcIiksIFIuY3NzKFwibGVmdFwiLCBFICsgXCJweFwiKSwgUi5jc3MoXCJ6LWluZGV4XCIsIHguekluZGV4LmdldChcInRvb2x0aXBcIikpLCB0aGlzLl9pc0luc2VydFRleHRDb250YWluZXIgPyB0aGlzLmVkaXRvci4kdGV4dENvbnRhaW5lckVsZW0uYXBwZW5kKFIpIDogYi5kZWZhdWx0KFwiYm9keVwiKS5hcHBlbmQoUiksIHRoaXMuX3Nob3cgPSAhMCwgeC5iZWZvcmVEZXN0cm95KCgwLCBwLmRlZmF1bHQpKFQgPSB0aGlzLnJlbW92ZSkuY2FsbChULCB0aGlzKSksIHgudHh0LmV2ZW50SG9va3Mub25CbHVyRXZlbnRzLnB1c2goKDAsIHAuZGVmYXVsdCkobSA9IHRoaXMucmVtb3ZlKS5jYWxsKG0sIHRoaXMpKTtcbiAgICAgICAgfSwgRC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGhpcy4kY29udGFpbmVyLnJlbW92ZSgpLCB0aGlzLl9zaG93ID0gITE7XG4gICAgICAgIH0sICgwLCBkLmRlZmF1bHQpKEQucHJvdG90eXBlLCBcImlzU2hvd1wiLCB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaG93O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgICB9KSwgRDtcbiAgICAgIH0oKTtcbiAgICAgIGkuZGVmYXVsdCA9IFM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDQwKTtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKGQsIGMsIHApIHtcbiAgICAgICAgaWYgKHMoZCksIGMgPT09IHZvaWQgMClcbiAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgc3dpdGNoIChwKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZC5jYWxsKGMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICByZXR1cm4gZC5jYWxsKGMsIHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odiwgYikge1xuICAgICAgICAgICAgICByZXR1cm4gZC5jYWxsKGMsIHYsIGIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odiwgYiwgUykge1xuICAgICAgICAgICAgICByZXR1cm4gZC5jYWxsKGMsIHYsIGIsIFMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGQuYXBwbHkoYywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSkge1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24odCkge1xuICAgICAgICBpZiAodHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcodCkgKyBcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxNjUpLCBkID0gdCg4KSwgYyA9IHQoMTMpLCBwID0gdCgxOSksIHYgPSB0KDE2KSwgYiA9IHQoNjMpLCBTID0gdCg1MSksIEQgPSBkLldlYWtNYXAsIFQsIG0sIHgsIFIgPSBmdW5jdGlvbigkKSB7XG4gICAgICAgIHJldHVybiB4KCQpID8gbSgkKSA6IFQoJCwge30pO1xuICAgICAgfSwgdyA9IGZ1bmN0aW9uKCQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKEYpIHtcbiAgICAgICAgICB2YXIgaztcbiAgICAgICAgICBpZiAoIWMoRikgfHwgKGsgPSBtKEYpKS50eXBlICE9PSAkKVxuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCBcIiArICQgKyBcIiByZXF1aXJlZFwiKTtcbiAgICAgICAgICByZXR1cm4gaztcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBpZiAocykge1xuICAgICAgICB2YXIgQSA9IG5ldyBEKCksIEUgPSBBLmdldCwgQyA9IEEuaGFzLCBNID0gQS5zZXQ7XG4gICAgICAgIFQgPSBmdW5jdGlvbigkLCBGKSB7XG4gICAgICAgICAgcmV0dXJuIE0uY2FsbChBLCAkLCBGKSwgRjtcbiAgICAgICAgfSwgbSA9IGZ1bmN0aW9uKCQpIHtcbiAgICAgICAgICByZXR1cm4gRS5jYWxsKEEsICQpIHx8IHt9O1xuICAgICAgICB9LCB4ID0gZnVuY3Rpb24oJCkge1xuICAgICAgICAgIHJldHVybiBDLmNhbGwoQSwgJCk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgeSA9IGIoXCJzdGF0ZVwiKTtcbiAgICAgICAgU1t5XSA9ICEwLCBUID0gZnVuY3Rpb24oJCwgRikge1xuICAgICAgICAgIHJldHVybiBwKCQsIHksIEYpLCBGO1xuICAgICAgICB9LCBtID0gZnVuY3Rpb24oJCkge1xuICAgICAgICAgIHJldHVybiB2KCQsIHkpID8gJFt5XSA6IHt9O1xuICAgICAgICB9LCB4ID0gZnVuY3Rpb24oJCkge1xuICAgICAgICAgIHJldHVybiB2KCQsIHkpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgby5leHBvcnRzID0geyBzZXQ6IFQsIGdldDogbSwgaGFzOiB4LCBlbmZvcmNlOiBSLCBnZXR0ZXJGb3I6IHcgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpKSB7XG4gICAgICBvLmV4cG9ydHMgPSAhMDtcbiAgICB9LCBmdW5jdGlvbihvLCBpKSB7XG4gICAgICBvLmV4cG9ydHMgPSB7fTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICBvLmV4cG9ydHMgPSB0KDIxMyk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgby5leHBvcnRzID0gdCgyNjEpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIG8uZXhwb3J0cyA9IHQoMjY1KTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDQpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KSwgaS5jcmVhdGVFbGVtZW50RnJhZ21lbnQgPSBpLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQgPSBpLmNyZWF0ZUVsZW1lbnQgPSBpLmluc2VydEJlZm9yZSA9IGkuZ2V0RW5kUG9pbnQgPSBpLmdldFN0YXJ0UG9pbnQgPSBpLnVwZGF0ZVJhbmdlID0gaS5maWx0ZXJTZWxlY3Rpb25Ob2RlcyA9IHZvaWQgMDtcbiAgICAgIHZhciBwID0gdCgyKSwgdiA9IHQoMTM3KSwgYiA9IHAuX19pbXBvcnREZWZhdWx0KHQoMykpO1xuICAgICAgZnVuY3Rpb24gUyhFKSB7XG4gICAgICAgIHZhciBDID0gW107XG4gICAgICAgIHJldHVybiAoMCwgYy5kZWZhdWx0KShFKS5jYWxsKEUsIGZ1bmN0aW9uKE0pIHtcbiAgICAgICAgICB2YXIgeSA9IE0uZ2V0Tm9kZU5hbWUoKTtcbiAgICAgICAgICBpZiAoeSAhPT0gdi5MaXN0VHlwZS5PcmRlcmVkTGlzdCAmJiB5ICE9PSB2Lkxpc3RUeXBlLlVub3JkZXJlZExpc3QpXG4gICAgICAgICAgICBDLnB1c2goTSk7XG4gICAgICAgICAgZWxzZSBpZiAoTS5wcmlvcilcbiAgICAgICAgICAgIEMucHVzaChNLnByaW9yKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBCID0gTS5jaGlsZHJlbigpO1xuICAgICAgICAgICAgQiA9PSBudWxsIHx8ICgwLCBjLmRlZmF1bHQpKEIpLmNhbGwoQiwgZnVuY3Rpb24oJCkge1xuICAgICAgICAgICAgICBDLnB1c2goYi5kZWZhdWx0KCQpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksIEM7XG4gICAgICB9XG4gICAgICBpLmZpbHRlclNlbGVjdGlvbk5vZGVzID0gUztcbiAgICAgIGZ1bmN0aW9uIEQoRSwgQywgTSkge1xuICAgICAgICB2YXIgeSA9IEUuc2VsZWN0aW9uLCBCID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgQy5sZW5ndGggPiAxID8gKEIuc2V0U3RhcnQoQy5lbGVtc1swXSwgMCksIEIuc2V0RW5kKEMuZWxlbXNbQy5sZW5ndGggLSAxXSwgQy5lbGVtc1tDLmxlbmd0aCAtIDFdLmNoaWxkTm9kZXMubGVuZ3RoKSkgOiBCLnNlbGVjdE5vZGVDb250ZW50cyhDLmVsZW1zWzBdKSwgTSAmJiBCLmNvbGxhcHNlKCExKSwgeS5zYXZlUmFuZ2UoQiksIHkucmVzdG9yZVNlbGVjdGlvbigpO1xuICAgICAgfVxuICAgICAgaS51cGRhdGVSYW5nZSA9IEQ7XG4gICAgICBmdW5jdGlvbiBUKEUpIHtcbiAgICAgICAgdmFyIEM7XG4gICAgICAgIHJldHVybiBFLnByaW9yID8gRS5wcmlvciA6IGIuZGVmYXVsdCgoQyA9IEUuY2hpbGRyZW4oKSkgPT09IG51bGwgfHwgQyA9PT0gdm9pZCAwID8gdm9pZCAwIDogQy5lbGVtc1swXSk7XG4gICAgICB9XG4gICAgICBpLmdldFN0YXJ0UG9pbnQgPSBUO1xuICAgICAgZnVuY3Rpb24gbShFKSB7XG4gICAgICAgIHZhciBDO1xuICAgICAgICByZXR1cm4gRS5wcmlvciA/IEUucHJpb3IgOiBiLmRlZmF1bHQoKEMgPSBFLmNoaWxkcmVuKCkpID09PSBudWxsIHx8IEMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IEMubGFzdCgpLmVsZW1zWzBdKTtcbiAgICAgIH1cbiAgICAgIGkuZ2V0RW5kUG9pbnQgPSBtO1xuICAgICAgZnVuY3Rpb24geChFLCBDLCBNKSB7XG4gICAgICAgIE0gPT09IHZvaWQgMCAmJiAoTSA9IG51bGwpLCBFLnBhcmVudCgpLmVsZW1zWzBdLmluc2VydEJlZm9yZShDLCBNKTtcbiAgICAgIH1cbiAgICAgIGkuaW5zZXJ0QmVmb3JlID0geDtcbiAgICAgIGZ1bmN0aW9uIFIoRSkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChFKTtcbiAgICAgIH1cbiAgICAgIGkuY3JlYXRlRWxlbWVudCA9IFI7XG4gICAgICBmdW5jdGlvbiB3KCkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgfVxuICAgICAgaS5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gdztcbiAgICAgIGZ1bmN0aW9uIEEoRSwgQywgTSkge1xuICAgICAgICByZXR1cm4gTSA9PT0gdm9pZCAwICYmIChNID0gXCJsaVwiKSwgKDAsIGMuZGVmYXVsdCkoRSkuY2FsbChFLCBmdW5jdGlvbih5KSB7XG4gICAgICAgICAgdmFyIEIgPSBSKE0pO1xuICAgICAgICAgIEIuaW5uZXJIVE1MID0geS5odG1sKCksIEMuYXBwZW5kQ2hpbGQoQiksIHkucmVtb3ZlKCk7XG4gICAgICAgIH0pLCBDO1xuICAgICAgfVxuICAgICAgaS5jcmVhdGVFbGVtZW50RnJhZ21lbnQgPSBBO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKHQsIHMpIHtcbiAgICAgICAgcmV0dXJuIHsgZW51bWVyYWJsZTogISh0ICYgMSksIGNvbmZpZ3VyYWJsZTogISh0ICYgMiksIHdyaXRhYmxlOiAhKHQgJiA0KSwgdmFsdWU6IHMgfTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSkge1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24odCkge1xuICAgICAgICBpZiAodCA9PSBudWxsKVxuICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgdCk7XG4gICAgICAgIHJldHVybiB0O1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTY0KS5jaGFyQXQsIGQgPSB0KDQxKSwgYyA9IHQoNzUpLCBwID0gXCJTdHJpbmcgSXRlcmF0b3JcIiwgdiA9IGQuc2V0LCBiID0gZC5nZXR0ZXJGb3IocCk7XG4gICAgICBjKFN0cmluZywgXCJTdHJpbmdcIiwgZnVuY3Rpb24oUykge1xuICAgICAgICB2KHRoaXMsIHsgdHlwZTogcCwgc3RyaW5nOiBTdHJpbmcoUyksIGluZGV4OiAwIH0pO1xuICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBEID0gYih0aGlzKSwgVCA9IEQuc3RyaW5nLCBtID0gRC5pbmRleCwgeDtcbiAgICAgICAgcmV0dXJuIG0gPj0gVC5sZW5ndGggPyB7IHZhbHVlOiB2b2lkIDAsIGRvbmU6ICEwIH0gOiAoeCA9IHMoVCwgbSksIEQuaW5kZXggKz0geC5sZW5ndGgsIHsgdmFsdWU6IHgsIGRvbmU6ICExIH0pO1xuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSkge1xuICAgICAgby5leHBvcnRzID0ge307XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDEwNiksIGQgPSB0KDgwKTtcbiAgICAgIG8uZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgcmV0dXJuIHMocCwgZCk7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxOSk7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihkLCBjLCBwLCB2KSB7XG4gICAgICAgIHYgJiYgdi5lbnVtZXJhYmxlID8gZFtjXSA9IHAgOiBzKGQsIGMsIHApO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB0KDE3Myk7XG4gICAgICB2YXIgcyA9IHQoMTc0KSwgZCA9IHQoOCksIGMgPSB0KDY1KSwgcCA9IHQoMTkpLCB2ID0gdCg0MyksIGIgPSB0KDEwKSwgUyA9IGIoXCJ0b1N0cmluZ1RhZ1wiKTtcbiAgICAgIGZvciAodmFyIEQgaW4gcykge1xuICAgICAgICB2YXIgVCA9IGRbRF0sIG0gPSBUICYmIFQucHJvdG90eXBlO1xuICAgICAgICBtICYmIGMobSkgIT09IFMgJiYgcChtLCBTLCBEKSwgdltEXSA9IHYuQXJyYXk7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDMzKTtcbiAgICAgIG8uZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24oYykge1xuICAgICAgICByZXR1cm4gcyhjKSA9PSBcIkFycmF5XCI7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxMSksIGQgPSB0KDEwKSwgYyA9IHQoODYpLCBwID0gZChcInNwZWNpZXNcIik7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbih2KSB7XG4gICAgICAgIHJldHVybiBjID49IDUxIHx8ICFzKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBiID0gW10sIFMgPSBiLmNvbnN0cnVjdG9yID0ge307XG4gICAgICAgICAgcmV0dXJuIFNbcF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgICAgICAgIH0sIGJbdl0oQm9vbGVhbikuZm9vICE9PSAxO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgby5leHBvcnRzID0gdCgyMjIpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSksIGkuTGlzdEhhbmRsZSA9IHZvaWQgMDtcbiAgICAgIHZhciBjID0gdCgyKSwgcCA9IGMuX19pbXBvcnREZWZhdWx0KHQoMzczKSksIHYgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZnVuY3Rpb24gYihTKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zID0gUywgdGhpcy5zZWxlY3Rpb25SYW5nZUVsZW0gPSBuZXcgcC5kZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGI7XG4gICAgICB9KCk7XG4gICAgICBpLkxpc3RIYW5kbGUgPSB2O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0ge30ucHJvcGVydHlJc0VudW1lcmFibGUsIGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLCBjID0gZCAmJiAhcy5jYWxsKHsgMTogMiB9LCAxKTtcbiAgICAgIGkuZiA9IGMgPyBmdW5jdGlvbih2KSB7XG4gICAgICAgIHZhciBiID0gZCh0aGlzLCB2KTtcbiAgICAgICAgcmV0dXJuICEhYiAmJiBiLmVudW1lcmFibGU7XG4gICAgICB9IDogcztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTMpO1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24oZCwgYykge1xuICAgICAgICBpZiAoIXMoZCkpXG4gICAgICAgICAgcmV0dXJuIGQ7XG4gICAgICAgIHZhciBwLCB2O1xuICAgICAgICBpZiAoYyAmJiB0eXBlb2YgKHAgPSBkLnRvU3RyaW5nKSA9PSBcImZ1bmN0aW9uXCIgJiYgIXModiA9IHAuY2FsbChkKSkgfHwgdHlwZW9mIChwID0gZC52YWx1ZU9mKSA9PSBcImZ1bmN0aW9uXCIgJiYgIXModiA9IHAuY2FsbChkKSkgfHwgIWMgJiYgdHlwZW9mIChwID0gZC50b1N0cmluZykgPT0gXCJmdW5jdGlvblwiICYmICFzKHYgPSBwLmNhbGwoZCkpKVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGkpIHtcbiAgICB9LCBmdW5jdGlvbihvLCBpKSB7XG4gICAgICB2YXIgdCA9IE1hdGguY2VpbCwgcyA9IE1hdGguZmxvb3I7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihkKSB7XG4gICAgICAgIHJldHVybiBpc05hTihkID0gK2QpID8gMCA6IChkID4gMCA/IHMgOiB0KShkKTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDc0KSwgZCA9IHQoNjQpLCBjID0gcyhcImtleXNcIik7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihwKSB7XG4gICAgICAgIHJldHVybiBjW3BdIHx8IChjW3BdID0gZChwKSk7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgIHZhciB0ID0gMCwgcyA9IE1hdGgucmFuZG9tKCk7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihkKSB7XG4gICAgICAgIHJldHVybiBcIlN5bWJvbChcIiArIFN0cmluZyhkID09PSB2b2lkIDAgPyBcIlwiIDogZCkgKyBcIilfXCIgKyAoKyt0ICsgcykudG9TdHJpbmcoMzYpO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoODEpLCBkID0gdCgzMyksIGMgPSB0KDEwKSwgcCA9IGMoXCJ0b1N0cmluZ1RhZ1wiKSwgdiA9IGQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHM7XG4gICAgICB9KCkpID09IFwiQXJndW1lbnRzXCIsIGIgPSBmdW5jdGlvbihELCBUKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIERbVF07XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgby5leHBvcnRzID0gcyA/IGQgOiBmdW5jdGlvbihTKSB7XG4gICAgICAgIHZhciBELCBULCBtO1xuICAgICAgICByZXR1cm4gUyA9PT0gdm9pZCAwID8gXCJVbmRlZmluZWRcIiA6IFMgPT09IG51bGwgPyBcIk51bGxcIiA6IHR5cGVvZiAoVCA9IGIoRCA9IE9iamVjdChTKSwgcCkpID09IFwic3RyaW5nXCIgPyBUIDogdiA/IGQoRCkgOiAobSA9IGQoRCkpID09IFwiT2JqZWN0XCIgJiYgdHlwZW9mIEQuY2FsbGVlID09IFwiZnVuY3Rpb25cIiA/IFwiQXJndW1lbnRzXCIgOiBtO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjUpLCBkID0gdCgxMTEpLCBjID0gdCgzNCksIHAgPSB0KDM5KSwgdiA9IHQoMTEyKSwgYiA9IHQoMTEzKSwgUyA9IGZ1bmN0aW9uKG0sIHgpIHtcbiAgICAgICAgdGhpcy5zdG9wcGVkID0gbSwgdGhpcy5yZXN1bHQgPSB4O1xuICAgICAgfSwgRCA9IG8uZXhwb3J0cyA9IGZ1bmN0aW9uKFQsIG0sIHgsIFIsIHcpIHtcbiAgICAgICAgdmFyIEEgPSBwKG0sIHgsIFIgPyAyIDogMSksIEUsIEMsIE0sIHksIEIsICQsIEY7XG4gICAgICAgIGlmICh3KVxuICAgICAgICAgIEUgPSBUO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoQyA9IHYoVCksIHR5cGVvZiBDICE9IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIlRhcmdldCBpcyBub3QgaXRlcmFibGVcIik7XG4gICAgICAgICAgaWYgKGQoQykpIHtcbiAgICAgICAgICAgIGZvciAoTSA9IDAsIHkgPSBjKFQubGVuZ3RoKTsgeSA+IE07IE0rKylcbiAgICAgICAgICAgICAgaWYgKEIgPSBSID8gQShzKEYgPSBUW01dKVswXSwgRlsxXSkgOiBBKFRbTV0pLCBCICYmIEIgaW5zdGFuY2VvZiBTKVxuICAgICAgICAgICAgICAgIHJldHVybiBCO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTKCExKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgRSA9IEMuY2FsbChUKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKCQgPSBFLm5leHQ7ICEoRiA9ICQuY2FsbChFKSkuZG9uZTsgKVxuICAgICAgICAgIGlmIChCID0gYihFLCBBLCBGLnZhbHVlLCBSKSwgenQoQikgPT0gXCJvYmplY3RcIiAmJiBCICYmIEIgaW5zdGFuY2VvZiBTKVxuICAgICAgICAgICAgcmV0dXJuIEI7XG4gICAgICAgIHJldHVybiBuZXcgUyghMSk7XG4gICAgICB9O1xuICAgICAgRC5zdG9wID0gZnVuY3Rpb24oVCkge1xuICAgICAgICByZXR1cm4gbmV3IFMoITAsIFQpO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTEpO1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24oZCwgYykge1xuICAgICAgICB2YXIgcCA9IFtdW2RdO1xuICAgICAgICByZXR1cm4gISFwICYmIHMoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcC5jYWxsKG51bGwsIGMgfHwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aHJvdyAxO1xuICAgICAgICAgIH0sIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSkge1xuICAgICAgby5leHBvcnRzID0gYFx0XG5cXHZcXGZcXHIgXFx4QTBcXHUxNjgwXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkZgO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg2MCksIGQgPSB0KDE4KSwgYyA9IHQoNDgpO1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24ocCwgdiwgYikge1xuICAgICAgICB2YXIgUyA9IHModik7XG4gICAgICAgIFMgaW4gcCA/IGQuZihwLCBTLCBjKDAsIGIpKSA6IHBbU10gPSBiO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICBvLmV4cG9ydHMgPSB0KDIwOSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDE0KSwgZCA9IHQoNTkpLCBjID0gdCg0OCksIHAgPSB0KDI4KSwgdiA9IHQoNjApLCBiID0gdCgxNiksIFMgPSB0KDk5KSwgRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICAgICBpLmYgPSBzID8gRCA6IGZ1bmN0aW9uKG0sIHgpIHtcbiAgICAgICAgaWYgKG0gPSBwKG0pLCB4ID0gdih4LCAhMCksIFMpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBEKG0sIHgpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIH1cbiAgICAgICAgaWYgKGIobSwgeCkpXG4gICAgICAgICAgcmV0dXJuIGMoIWQuZi5jYWxsKG0sIHgpLCBtW3hdKTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDExKSwgZCA9IHQoMzMpLCBjID0gXCJcIi5zcGxpdDtcbiAgICAgIG8uZXhwb3J0cyA9IHMoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAhT2JqZWN0KFwielwiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbiAgICAgIH0pID8gZnVuY3Rpb24ocCkge1xuICAgICAgICByZXR1cm4gZChwKSA9PSBcIlN0cmluZ1wiID8gYy5jYWxsKHAsIFwiXCIpIDogT2JqZWN0KHApO1xuICAgICAgfSA6IE9iamVjdDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoOCksIGQgPSB0KDEzKSwgYyA9IHMuZG9jdW1lbnQsIHAgPSBkKGMpICYmIGQoYy5jcmVhdGVFbGVtZW50KTtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgcmV0dXJuIHAgPyBjLmNyZWF0ZUVsZW1lbnQodikgOiB7fTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDQyKSwgZCA9IHQoMTAyKTtcbiAgICAgIChvLmV4cG9ydHMgPSBmdW5jdGlvbihjLCBwKSB7XG4gICAgICAgIHJldHVybiBkW2NdIHx8IChkW2NdID0gcCAhPT0gdm9pZCAwID8gcCA6IHt9KTtcbiAgICAgIH0pKFwidmVyc2lvbnNcIiwgW10pLnB1c2goeyB2ZXJzaW9uOiBcIjMuNi40XCIsIG1vZGU6IHMgPyBcInB1cmVcIiA6IFwiZ2xvYmFsXCIsIGNvcHlyaWdodDogXCJcXHhBOSAyMDIwIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpXCIgfSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDUpLCBkID0gdCgxNjcpLCBjID0gdCgxMDQpLCBwID0gdCgxNzEpLCB2ID0gdCgzNiksIGIgPSB0KDE5KSwgUyA9IHQoNTMpLCBEID0gdCgxMCksIFQgPSB0KDQyKSwgbSA9IHQoNDMpLCB4ID0gdCgxMDMpLCBSID0geC5JdGVyYXRvclByb3RvdHlwZSwgdyA9IHguQlVHR1lfU0FGQVJJX0lURVJBVE9SUywgQSA9IEQoXCJpdGVyYXRvclwiKSwgRSA9IFwia2V5c1wiLCBDID0gXCJ2YWx1ZXNcIiwgTSA9IFwiZW50cmllc1wiLCB5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfTtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKEIsICQsIEYsIGssIGgsIE4sIFApIHtcbiAgICAgICAgZChGLCAkLCBrKTtcbiAgICAgICAgdmFyIGogPSBmdW5jdGlvbihtZSkge1xuICAgICAgICAgIGlmIChtZSA9PT0gaCAmJiBYKVxuICAgICAgICAgICAgcmV0dXJuIFg7XG4gICAgICAgICAgaWYgKCF3ICYmIG1lIGluIFcpXG4gICAgICAgICAgICByZXR1cm4gV1ttZV07XG4gICAgICAgICAgc3dpdGNoIChtZSkge1xuICAgICAgICAgICAgY2FzZSBFOlxuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGKHRoaXMsIG1lKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNhc2UgQzpcbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRih0aGlzLCBtZSk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjYXNlIE06XG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEYodGhpcywgbWUpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEYodGhpcyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgSSA9ICQgKyBcIiBJdGVyYXRvclwiLCBWID0gITEsIFcgPSBCLnByb3RvdHlwZSwgUSA9IFdbQV0gfHwgV1tcIkBAaXRlcmF0b3JcIl0gfHwgaCAmJiBXW2hdLCBYID0gIXcgJiYgUSB8fCBqKGgpLCBKID0gJCA9PSBcIkFycmF5XCIgJiYgVy5lbnRyaWVzIHx8IFEsIFosIGRlLCB2ZTtcbiAgICAgICAgaWYgKEogJiYgKFogPSBjKEouY2FsbChuZXcgQigpKSksIFIgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgWi5uZXh0ICYmICghVCAmJiBjKFopICE9PSBSICYmIChwID8gcChaLCBSKSA6IHR5cGVvZiBaW0FdICE9IFwiZnVuY3Rpb25cIiAmJiBiKFosIEEsIHkpKSwgdihaLCBJLCAhMCwgITApLCBUICYmIChtW0ldID0geSkpKSwgaCA9PSBDICYmIFEgJiYgUS5uYW1lICE9PSBDICYmIChWID0gITAsIFggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gUS5jYWxsKHRoaXMpO1xuICAgICAgICB9KSwgKCFUIHx8IFApICYmIFdbQV0gIT09IFggJiYgYihXLCBBLCBYKSwgbVskXSA9IFgsIGgpXG4gICAgICAgICAgaWYgKGRlID0geyB2YWx1ZXM6IGooQyksIGtleXM6IE4gPyBYIDogaihFKSwgZW50cmllczogaihNKSB9LCBQKVxuICAgICAgICAgICAgZm9yICh2ZSBpbiBkZSlcbiAgICAgICAgICAgICAgKHcgfHwgViB8fCAhKHZlIGluIFcpKSAmJiBTKFcsIHZlLCBkZVt2ZV0pO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHMoeyB0YXJnZXQ6ICQsIHByb3RvOiAhMCwgZm9yY2VkOiB3IHx8IFYgfSwgZGUpO1xuICAgICAgICByZXR1cm4gZGU7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxMSk7XG4gICAgICBvLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIXMoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAhU3RyaW5nKFN5bWJvbCgpKTtcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyNSksIGQgPSB0KDE2OSksIGMgPSB0KDgwKSwgcCA9IHQoNTEpLCB2ID0gdCgxMDcpLCBiID0gdCg3MyksIFMgPSB0KDYzKSwgRCA9IFwiPlwiLCBUID0gXCI8XCIsIG0gPSBcInByb3RvdHlwZVwiLCB4ID0gXCJzY3JpcHRcIiwgUiA9IFMoXCJJRV9QUk9UT1wiKSwgdyA9IGZ1bmN0aW9uKCkge1xuICAgICAgfSwgQSA9IGZ1bmN0aW9uKCQpIHtcbiAgICAgICAgcmV0dXJuIFQgKyB4ICsgRCArICQgKyBUICsgXCIvXCIgKyB4ICsgRDtcbiAgICAgIH0sIEUgPSBmdW5jdGlvbigkKSB7XG4gICAgICAgICQud3JpdGUoQShcIlwiKSksICQuY2xvc2UoKTtcbiAgICAgICAgdmFyIEYgPSAkLnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gICAgICAgIHJldHVybiAkID0gbnVsbCwgRjtcbiAgICAgIH0sIEMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyICQgPSBiKFwiaWZyYW1lXCIpLCBGID0gXCJqYXZhXCIgKyB4ICsgXCI6XCIsIGs7XG4gICAgICAgIHJldHVybiAkLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIiwgdi5hcHBlbmRDaGlsZCgkKSwgJC5zcmMgPSBTdHJpbmcoRiksIGsgPSAkLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsIGsub3BlbigpLCBrLndyaXRlKEEoXCJkb2N1bWVudC5GPU9iamVjdFwiKSksIGsuY2xvc2UoKSwgay5GO1xuICAgICAgfSwgTSwgeSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIE0gPSBkb2N1bWVudC5kb21haW4gJiYgbmV3IEFjdGl2ZVhPYmplY3QoXCJodG1sZmlsZVwiKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgIH1cbiAgICAgICAgeSA9IE0gPyBFKE0pIDogQygpO1xuICAgICAgICBmb3IgKHZhciAkID0gYy5sZW5ndGg7ICQtLTsgKVxuICAgICAgICAgIGRlbGV0ZSB5W21dW2NbJF1dO1xuICAgICAgICByZXR1cm4geSgpO1xuICAgICAgfTtcbiAgICAgIHBbUl0gPSAhMCwgby5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbigkLCBGKSB7XG4gICAgICAgIHZhciBrO1xuICAgICAgICByZXR1cm4gJCAhPT0gbnVsbCA/ICh3W21dID0gcygkKSwgayA9IG5ldyB3KCksIHdbbV0gPSBudWxsLCBrW1JdID0gJCkgOiBrID0geSgpLCBGID09PSB2b2lkIDAgPyBrIDogZChrLCBGKTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDI4KSwgZCA9IHQoMzQpLCBjID0gdCg3OSksIHAgPSBmdW5jdGlvbihiKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihTLCBELCBUKSB7XG4gICAgICAgICAgdmFyIG0gPSBzKFMpLCB4ID0gZChtLmxlbmd0aCksIFIgPSBjKFQsIHgpLCB3O1xuICAgICAgICAgIGlmIChiICYmIEQgIT0gRCkge1xuICAgICAgICAgICAgZm9yICg7IHggPiBSOyApXG4gICAgICAgICAgICAgIGlmICh3ID0gbVtSKytdLCB3ICE9IHcpXG4gICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgZm9yICg7IHggPiBSOyBSKyspXG4gICAgICAgICAgICAgIGlmICgoYiB8fCBSIGluIG0pICYmIG1bUl0gPT09IEQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGIgfHwgUiB8fCAwO1xuICAgICAgICAgIHJldHVybiAhYiAmJiAtMTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBvLmV4cG9ydHMgPSB7XG4gICAgICAgIGluY2x1ZGVzOiBwKCEwKSxcbiAgICAgICAgaW5kZXhPZjogcCghMSlcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDYyKSwgZCA9IE1hdGgubWF4LCBjID0gTWF0aC5taW47XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihwLCB2KSB7XG4gICAgICAgIHZhciBiID0gcyhwKTtcbiAgICAgICAgcmV0dXJuIGIgPCAwID8gZChiICsgdiwgMCkgOiBjKGIsIHYpO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpKSB7XG4gICAgICBvLmV4cG9ydHMgPSBbXCJjb25zdHJ1Y3RvclwiLCBcImhhc093blByb3BlcnR5XCIsIFwiaXNQcm90b3R5cGVPZlwiLCBcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsIFwidG9Mb2NhbGVTdHJpbmdcIiwgXCJ0b1N0cmluZ1wiLCBcInZhbHVlT2ZcIl07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDEwKSwgZCA9IHMoXCJ0b1N0cmluZ1RhZ1wiKSwgYyA9IHt9O1xuICAgICAgY1tkXSA9IFwielwiLCBvLmV4cG9ydHMgPSBTdHJpbmcoYykgPT09IFwiW29iamVjdCB6XVwiO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpKSB7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbih0LCBzLCBkKSB7XG4gICAgICAgIGlmICghKHQgaW5zdGFuY2VvZiBzKSlcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJJbmNvcnJlY3QgXCIgKyAoZCA/IGQgKyBcIiBcIiA6IFwiXCIpICsgXCJpbnZvY2F0aW9uXCIpO1xuICAgICAgICByZXR1cm4gdDtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDM1KTtcbiAgICAgIG8uZXhwb3J0cyA9IHMoXCJuYXZpZ2F0b3JcIiwgXCJ1c2VyQWdlbnRcIikgfHwgXCJcIjtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNDApLCBkID0gZnVuY3Rpb24ocCkge1xuICAgICAgICB2YXIgdiwgYjtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IHAoZnVuY3Rpb24oUywgRCkge1xuICAgICAgICAgIGlmICh2ICE9PSB2b2lkIDAgfHwgYiAhPT0gdm9pZCAwKVxuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiQmFkIFByb21pc2UgY29uc3RydWN0b3JcIik7XG4gICAgICAgICAgdiA9IFMsIGIgPSBEO1xuICAgICAgICB9KSwgdGhpcy5yZXNvbHZlID0gcyh2KSwgdGhpcy5yZWplY3QgPSBzKGIpO1xuICAgICAgfTtcbiAgICAgIG8uZXhwb3J0cy5mID0gZnVuY3Rpb24oYykge1xuICAgICAgICByZXR1cm4gbmV3IGQoYyk7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg4KSwgZCA9IHQoODQpLCBjID0gcy5wcm9jZXNzLCBwID0gYyAmJiBjLnZlcnNpb25zLCB2ID0gcCAmJiBwLnY4LCBiLCBTO1xuICAgICAgdiA/IChiID0gdi5zcGxpdChcIi5cIiksIFMgPSBiWzBdICsgYlsxXSkgOiBkICYmIChiID0gZC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pLCAoIWIgfHwgYlsxXSA+PSA3NCkgJiYgKGIgPSBkLm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKSwgYiAmJiAoUyA9IGJbMV0pKSksIG8uZXhwb3J0cyA9IFMgJiYgK1M7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCg0KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgcCA9IHQoMiksIHYgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgYiA9IHQoNiksIFMgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDI2NykpLCBEID0gcC5fX2ltcG9ydERlZmF1bHQodCgyODApKSwgVCA9IHAuX19pbXBvcnREZWZhdWx0KHQoMjgxKSksIG0gPSBwLl9faW1wb3J0RGVmYXVsdCh0KDI4MikpLCB4ID0gcC5fX2ltcG9ydERlZmF1bHQodCgzMDEpKSwgUiA9IHAuX19pbXBvcnRTdGFyKHQoNDE2KSksIHcgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDQxNykpLCBBID0gcC5fX2ltcG9ydERlZmF1bHQodCg0MTgpKSwgRSA9IHAuX19pbXBvcnREZWZhdWx0KHQoNDE5KSksIEMgPSBwLl9faW1wb3J0U3Rhcih0KDQyMCkpLCBNID0gcC5fX2ltcG9ydERlZmF1bHQodCg0MjMpKSwgeSA9IHAuX19pbXBvcnREZWZhdWx0KHQoNDI0KSksIEIgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDQyNSkpLCAkID0gcC5fX2ltcG9ydERlZmF1bHQodCg0MjcpKSwgRiA9IHAuX19pbXBvcnREZWZhdWx0KHQoNDM3KSksIGsgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDQ0MCkpLCBoID0gcC5fX2ltcG9ydFN0YXIodCg0NDEpKSwgTiA9IHAuX19pbXBvcnREZWZhdWx0KHQoMjMpKSwgUCA9IHAuX19pbXBvcnREZWZhdWx0KHQoMTMzKSksIGogPSBwLl9faW1wb3J0RGVmYXVsdCh0KDI0KSksIEkgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMyKSksIFYgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDM3KSksIFcgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDM4KSksIFEgPSAxLCBYID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZ1bmN0aW9uIEooWiwgZGUpIHtcbiAgICAgICAgICB0aGlzLnBsdWdpbnNGdW5jdGlvbkxpc3QgPSB7fSwgdGhpcy5iZWZvcmVEZXN0cm95SG9va3MgPSBbXSwgdGhpcy5pZCA9IFwid2FuZ0VkaXRvci1cIiArIFErKywgdGhpcy50b29sYmFyU2VsZWN0b3IgPSBaLCB0aGlzLnRleHRTZWxlY3RvciA9IGRlLCBSLnNlbGVjdG9yVmFsaWRhdG9yKHRoaXMpLCB0aGlzLmNvbmZpZyA9IGIuZGVlcENsb25lKFMuZGVmYXVsdCksIHRoaXMuJHRvb2xiYXJFbGVtID0gdi5kZWZhdWx0KFwiPGRpdj48L2Rpdj5cIiksIHRoaXMuJHRleHRDb250YWluZXJFbGVtID0gdi5kZWZhdWx0KFwiPGRpdj48L2Rpdj5cIiksIHRoaXMuJHRleHRFbGVtID0gdi5kZWZhdWx0KFwiPGRpdj48L2Rpdj5cIiksIHRoaXMudG9vbGJhckVsZW1JZCA9IFwiXCIsIHRoaXMudGV4dEVsZW1JZCA9IFwiXCIsIHRoaXMuaXNGb2N1cyA9ICExLCB0aGlzLmlzQ29tcG9zaW5nID0gITEsIHRoaXMuaXNDb21wYXRpYmxlTW9kZSA9ICExLCB0aGlzLnNlbGVjdGlvbiA9IG5ldyBELmRlZmF1bHQodGhpcyksIHRoaXMuY21kID0gbmV3IFQuZGVmYXVsdCh0aGlzKSwgdGhpcy50eHQgPSBuZXcgbS5kZWZhdWx0KHRoaXMpLCB0aGlzLm1lbnVzID0gbmV3IHguZGVmYXVsdCh0aGlzKSwgdGhpcy56SW5kZXggPSBuZXcgeS5kZWZhdWx0KCksIHRoaXMuY2hhbmdlID0gbmV3IEIuZGVmYXVsdCh0aGlzKSwgdGhpcy5oaXN0b3J5ID0gbmV3ICQuZGVmYXVsdCh0aGlzKSwgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSA9IG5ldyBrLmRlZmF1bHQodGhpcyk7XG4gICAgICAgICAgdmFyIHZlID0gRi5kZWZhdWx0KHRoaXMpLCBzZSA9IHZlLmRpc2FibGUsIG1lID0gdmUuZW5hYmxlO1xuICAgICAgICAgIHRoaXMuZGlzYWJsZSA9IHNlLCB0aGlzLmVuYWJsZSA9IG1lLCB0aGlzLmlzRW5hYmxlID0gITA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEoucHJvdG90eXBlLmluaXRTZWxlY3Rpb24gPSBmdW5jdGlvbihaKSB7XG4gICAgICAgICAgdy5kZWZhdWx0KHRoaXMsIFopO1xuICAgICAgICB9LCBKLnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aGlzLnpJbmRleC5pbml0KHRoaXMpLCB0aGlzLmlzQ29tcGF0aWJsZU1vZGUgPSB0aGlzLmNvbmZpZy5jb21wYXRpYmxlTW9kZSgpLCB0aGlzLmlzQ29tcGF0aWJsZU1vZGUgfHwgKHRoaXMuY29uZmlnLm9uY2hhbmdlVGltZW91dCA9IDMwKSwgRS5kZWZhdWx0KHRoaXMpLCBSLmRlZmF1bHQodGhpcyksIHRoaXMudHh0LmluaXQoKSwgdGhpcy5tZW51cy5pbml0KCksIEMuZGVmYXVsdCh0aGlzKSwgdGhpcy5pbml0U2VsZWN0aW9uKCEwKSwgQS5kZWZhdWx0KHRoaXMpLCB0aGlzLmNoYW5nZS5vYnNlcnZlKCksIHRoaXMuaGlzdG9yeS5vYnNlcnZlKCksIGguZGVmYXVsdCh0aGlzKTtcbiAgICAgICAgfSwgSi5wcm90b3R5cGUuYmVmb3JlRGVzdHJveSA9IGZ1bmN0aW9uKFopIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5iZWZvcmVEZXN0cm95SG9va3MucHVzaChaKSwgdGhpcztcbiAgICAgICAgfSwgSi5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBaLCBkZSA9IHRoaXM7XG4gICAgICAgICAgKDAsIGMuZGVmYXVsdCkoWiA9IHRoaXMuYmVmb3JlRGVzdHJveUhvb2tzKS5jYWxsKFosIGZ1bmN0aW9uKHZlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmUuY2FsbChkZSk7XG4gICAgICAgICAgfSksIHRoaXMuJHRvb2xiYXJFbGVtLnJlbW92ZSgpLCB0aGlzLiR0ZXh0Q29udGFpbmVyRWxlbS5yZW1vdmUoKTtcbiAgICAgICAgfSwgSi5wcm90b3R5cGUuZnVsbFNjcmVlbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIEMuc2V0RnVsbFNjcmVlbih0aGlzKTtcbiAgICAgICAgfSwgSi5wcm90b3R5cGUudW5GdWxsU2NyZWVuID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgQy5zZXRVbkZ1bGxTY3JlZW4odGhpcyk7XG4gICAgICAgIH0sIEoucHJvdG90eXBlLnNjcm9sbFRvSGVhZCA9IGZ1bmN0aW9uKFopIHtcbiAgICAgICAgICBNLmRlZmF1bHQodGhpcywgWik7XG4gICAgICAgIH0sIEoucmVnaXN0ZXJNZW51ID0gZnVuY3Rpb24oWiwgZGUpIHtcbiAgICAgICAgICAhZGUgfHwgdHlwZW9mIGRlICE9IFwiZnVuY3Rpb25cIiB8fCAoSi5nbG9iYWxDdXN0b21NZW51Q29uc3RydWN0b3JMaXN0W1pdID0gZGUpO1xuICAgICAgICB9LCBKLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uKFosIGRlKSB7XG4gICAgICAgICAgaC5yZWdpc3RlclBsdWdpbihaLCBkZSwgdGhpcy5wbHVnaW5zRnVuY3Rpb25MaXN0KTtcbiAgICAgICAgfSwgSi5yZWdpc3RlclBsdWdpbiA9IGZ1bmN0aW9uKFosIGRlKSB7XG4gICAgICAgICAgaC5yZWdpc3RlclBsdWdpbihaLCBkZSwgSi5nbG9iYWxQbHVnaW5zRnVuY3Rpb25MaXN0KTtcbiAgICAgICAgfSwgSi4kID0gdi5kZWZhdWx0LCBKLkJ0bk1lbnUgPSBOLmRlZmF1bHQsIEouRHJvcExpc3QgPSBQLmRlZmF1bHQsIEouRHJvcExpc3RNZW51ID0gai5kZWZhdWx0LCBKLlBhbmVsID0gSS5kZWZhdWx0LCBKLlBhbmVsTWVudSA9IFYuZGVmYXVsdCwgSi5Ub29sdGlwID0gVy5kZWZhdWx0LCBKLmdsb2JhbEN1c3RvbU1lbnVDb25zdHJ1Y3Rvckxpc3QgPSB7fSwgSi5nbG9iYWxQbHVnaW5zRnVuY3Rpb25MaXN0ID0ge30sIEo7XG4gICAgICB9KCk7XG4gICAgICBpLmRlZmF1bHQgPSBYO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxMyksIGQgPSB0KDU1KSwgYyA9IHQoMTApLCBwID0gYyhcInNwZWNpZXNcIik7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbih2LCBiKSB7XG4gICAgICAgIHZhciBTO1xuICAgICAgICByZXR1cm4gZCh2KSAmJiAoUyA9IHYuY29uc3RydWN0b3IsIHR5cGVvZiBTID09IFwiZnVuY3Rpb25cIiAmJiAoUyA9PT0gQXJyYXkgfHwgZChTLnByb3RvdHlwZSkpID8gUyA9IHZvaWQgMCA6IHMoUykgJiYgKFMgPSBTW3BdLCBTID09PSBudWxsICYmIChTID0gdm9pZCAwKSkpLCBuZXcgKFMgPT09IHZvaWQgMCA/IEFycmF5IDogUykoYiA9PT0gMCA/IDAgOiBiKTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgby5leHBvcnRzID0gdCgxODUpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg0OSksIGQgPSB0KDY4KSwgYyA9IFwiW1wiICsgZCArIFwiXVwiLCBwID0gUmVnRXhwKFwiXlwiICsgYyArIGMgKyBcIipcIiksIHYgPSBSZWdFeHAoYyArIGMgKyBcIiokXCIpLCBiID0gZnVuY3Rpb24oRCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oVCkge1xuICAgICAgICAgIHZhciBtID0gU3RyaW5nKHMoVCkpO1xuICAgICAgICAgIHJldHVybiBEICYgMSAmJiAobSA9IG0ucmVwbGFjZShwLCBcIlwiKSksIEQgJiAyICYmIChtID0gbS5yZXBsYWNlKHYsIFwiXCIpKSwgbTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBvLmV4cG9ydHMgPSB7XG4gICAgICAgIHN0YXJ0OiBiKDEpLFxuICAgICAgICBlbmQ6IGIoMiksXG4gICAgICAgIHRyaW06IGIoMylcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgby5leHBvcnRzID0gdCgyMDUpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyMjcpLCBkID0gdCgyMzApO1xuICAgICAgZnVuY3Rpb24gYyhwKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZCA9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIHMgPT0gXCJzeW1ib2xcIiA/IG8uZXhwb3J0cyA9IGMgPSBmdW5jdGlvbihiKSB7XG4gICAgICAgICAgcmV0dXJuIHR5cGVvZiBiO1xuICAgICAgICB9IDogby5leHBvcnRzID0gYyA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgICByZXR1cm4gYiAmJiB0eXBlb2YgZCA9PSBcImZ1bmN0aW9uXCIgJiYgYi5jb25zdHJ1Y3RvciA9PT0gZCAmJiBiICE9PSBkLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgYjtcbiAgICAgICAgfSwgYyhwKTtcbiAgICAgIH1cbiAgICAgIG8uZXhwb3J0cyA9IGM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDEwKTtcbiAgICAgIGkuZiA9IHM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgby5leHBvcnRzID0gdCgzMDYpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoNCkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIHAgPSB0KDIpLCB2ID0gcC5fX2ltcG9ydERlZmF1bHQodCgzMikpLCBiID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZ1bmN0aW9uIFMoRCwgVCkge1xuICAgICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgICB0aGlzLiRlbGVtID0gRCwgdGhpcy5lZGl0b3IgPSBULCB0aGlzLl9hY3RpdmUgPSAhMSwgRC5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgICAgIHZhciBSO1xuICAgICAgICAgICAgdi5kZWZhdWx0LmhpZGVDdXJBbGxQYW5lbHMoKSwgKDAsIGMuZGVmYXVsdCkoUiA9IFQudHh0LmV2ZW50SG9va3MubWVudUNsaWNrRXZlbnRzKS5jYWxsKFIsIGZ1bmN0aW9uKHcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHcoKTtcbiAgICAgICAgICAgIH0pLCB4LnN0b3BQcm9wYWdhdGlvbigpLCBULnNlbGVjdGlvbi5nZXRSYW5nZSgpICE9IG51bGwgJiYgbS5jbGlja0hhbmRsZXIoeCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFMucHJvdG90eXBlLmNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uKEQpIHtcbiAgICAgICAgfSwgUy5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGhpcy5fYWN0aXZlID0gITAsIHRoaXMuJGVsZW0uYWRkQ2xhc3MoXCJ3LWUtYWN0aXZlXCIpO1xuICAgICAgICB9LCBTLnByb3RvdHlwZS51bkFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRoaXMuX2FjdGl2ZSA9ICExLCB0aGlzLiRlbGVtLnJlbW92ZUNsYXNzKFwidy1lLWFjdGl2ZVwiKTtcbiAgICAgICAgfSwgKDAsIGQuZGVmYXVsdCkoUy5wcm90b3R5cGUsIFwiaXNBY3RpdmVcIiwge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgICB9KSwgUztcbiAgICAgIH0oKTtcbiAgICAgIGkuZGVmYXVsdCA9IGI7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCg1NykpLCBwID0gcyh0KDQpKSwgdiA9IHModCgyNykpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGIgPSB0KDIpLCBTID0gdCg2KSwgRCA9IGIuX19pbXBvcnREZWZhdWx0KHQoMTM1KSksIFQgPSBiLl9faW1wb3J0RGVmYXVsdCh0KDEzNikpLCBtID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZ1bmN0aW9uIHgoUikge1xuICAgICAgICAgIHRoaXMuZWRpdG9yID0gUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geC5wcm90b3R5cGUuaW5zZXJ0SW1nID0gZnVuY3Rpb24oUiwgdywgQSkge1xuICAgICAgICAgIHZhciBFID0gdGhpcy5lZGl0b3IsIEMgPSBFLmNvbmZpZywgTSA9IFwidmFsaWRhdGUuXCIsIHkgPSBmdW5jdGlvbihoLCBOKSB7XG4gICAgICAgICAgICByZXR1cm4gTiA9PT0gdm9pZCAwICYmIChOID0gTSksIEUuaTE4bmV4dC50KE4gKyBoKTtcbiAgICAgICAgICB9LCBCID0gdyA/ICdhbHQ9XCInICsgdyArICdcIiAnIDogXCJcIiwgJCA9IEEgPyAnZGF0YS1ocmVmPVwiJyArIGVuY29kZVVSSUNvbXBvbmVudChBKSArICdcIiAnIDogXCJcIjtcbiAgICAgICAgICBFLmNtZC5kbyhcImluc2VydEhUTUxcIiwgJzxpbWcgc3JjPVwiJyArIFIgKyAnXCIgJyArIEIgKyAkICsgJ3N0eWxlPVwibWF4LXdpZHRoOjEwMCU7XCIgY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIi8+JyksIEMubGlua0ltZ0NhbGxiYWNrKFIsIHcsIEEpO1xuICAgICAgICAgIHZhciBGID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcbiAgICAgICAgICBGLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgRiA9IG51bGw7XG4gICAgICAgICAgfSwgRi5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBDLmN1c3RvbUFsZXJ0KHkoXCJcXHU2M0QyXFx1NTE2NVxcdTU2RkVcXHU3MjQ3XFx1OTUxOVxcdThCRUZcIiksIFwiZXJyb3JcIiwgXCJ3YW5nRWRpdG9yOiBcIiArIHkoXCJcXHU2M0QyXFx1NTE2NVxcdTU2RkVcXHU3MjQ3XFx1OTUxOVxcdThCRUZcIikgKyBcIlxcdUZGMENcIiArIHkoXCJcXHU1NkZFXFx1NzI0N1xcdTk0RkVcXHU2M0E1XCIpICsgJyBcIicgKyBSICsgJ1wiXFx1RkYwQycgKyB5KFwiXFx1NEUwQlxcdThGN0RcXHU5NEZFXFx1NjNBNVxcdTU5MzFcXHU4RDI1XCIpKSwgRiA9IG51bGw7XG4gICAgICAgICAgfSwgRi5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gRiA9IG51bGw7XG4gICAgICAgICAgfSwgRi5zcmMgPSBSO1xuICAgICAgICB9LCB4LnByb3RvdHlwZS51cGxvYWRJbWcgPSBmdW5jdGlvbihSKSB7XG4gICAgICAgICAgdmFyIHcgPSB0aGlzO1xuICAgICAgICAgIGlmICghIVIubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgQSA9IHRoaXMuZWRpdG9yLCBFID0gQS5jb25maWcsIEMgPSBcInZhbGlkYXRlLlwiLCBNID0gZnVuY3Rpb24oaWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIEEuaTE4bmV4dC50KEMgKyBpZSk7XG4gICAgICAgICAgICB9LCB5ID0gRS51cGxvYWRJbWdTZXJ2ZXIsIEIgPSBFLnVwbG9hZEltZ1Nob3dCYXNlNjQsICQgPSBFLnVwbG9hZEltZ01heFNpemUsIEYgPSAkIC8gMTAyNCAvIDEwMjQsIGsgPSBFLnVwbG9hZEltZ01heExlbmd0aCwgaCA9IEUudXBsb2FkRmlsZU5hbWUsIE4gPSBFLnVwbG9hZEltZ1BhcmFtcywgUCA9IEUudXBsb2FkSW1nUGFyYW1zV2l0aFVybCwgaiA9IEUudXBsb2FkSW1nSGVhZGVycywgSSA9IEUudXBsb2FkSW1nSG9va3MsIFYgPSBFLnVwbG9hZEltZ1RpbWVvdXQsIFcgPSBFLndpdGhDcmVkZW50aWFscywgUSA9IEUuY3VzdG9tVXBsb2FkSW1nO1xuICAgICAgICAgICAgaWYgKCEoIVEgJiYgIXkgJiYgIUIpKSB7XG4gICAgICAgICAgICAgIHZhciBYID0gW10sIEogPSBbXTtcbiAgICAgICAgICAgICAgaWYgKFMuYXJyRm9yRWFjaChSLCBmdW5jdGlvbihsZSkge1xuICAgICAgICAgICAgICAgIGlmICghIWxlKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgaWUgPSBsZS5uYW1lIHx8IGxlLnR5cGUucmVwbGFjZShcIi9cIiwgXCIuXCIpLCBwZSA9IGxlLnNpemU7XG4gICAgICAgICAgICAgICAgICBpZiAoISghaWUgfHwgIXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGUgPSBBLmNvbmZpZy51cGxvYWRJbWdBY2NlcHQuam9pbihcInxcIiksIGdlID0gXCIuKFwiICsgdGUgKyBcIikkXCIsIEFlID0gbmV3IFJlZ0V4cChnZSwgXCJpXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoQWUudGVzdChpZSkgPT09ICExKSB7XG4gICAgICAgICAgICAgICAgICAgICAgSi5wdXNoKFwiXFx1MzAxMFwiICsgaWUgKyBcIlxcdTMwMTFcIiArIE0oXCJcXHU0RTBEXFx1NjYyRlxcdTU2RkVcXHU3MjQ3XCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCQgPCBwZSkge1xuICAgICAgICAgICAgICAgICAgICAgIEoucHVzaChcIlxcdTMwMTBcIiArIGllICsgXCJcXHUzMDExXCIgKyBNKFwiXFx1NTkyN1xcdTRFOEVcIikgKyBcIiBcIiArIEYgKyBcIk1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFgucHVzaChsZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSwgSi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBFLmN1c3RvbUFsZXJ0KE0oXCJcXHU1NkZFXFx1NzI0N1xcdTlBOENcXHU4QkMxXFx1NjcyQVxcdTkwMUFcXHU4RkM3XCIpICsgYDogXG5gICsgSi5qb2luKGBcbmApLCBcIndhcm5pbmdcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChYLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIEUuY3VzdG9tQWxlcnQoTShcIlxcdTRGMjBcXHU1MTY1XFx1NzY4NFxcdTY1ODdcXHU0RUY2XFx1NEUwRFxcdTU0MDhcXHU2Q0Q1XCIpLCBcIndhcm5pbmdcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChYLmxlbmd0aCA+IGspIHtcbiAgICAgICAgICAgICAgICBFLmN1c3RvbUFsZXJ0KE0oXCJcXHU0RTAwXFx1NkIyMVxcdTY3MDBcXHU1OTFBXFx1NEUwQVxcdTRGMjBcIikgKyBrICsgTShcIlxcdTVGMjBcXHU1NkZFXFx1NzI0N1wiKSwgXCJ3YXJuaW5nXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoUSAmJiB0eXBlb2YgUSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgWjtcbiAgICAgICAgICAgICAgICBRKFgsICgwLCBjLmRlZmF1bHQpKFogPSB0aGlzLmluc2VydEltZykuY2FsbChaLCB0aGlzKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBkZSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgICBpZiAoKDAsIHAuZGVmYXVsdCkoWCkuY2FsbChYLCBmdW5jdGlvbihsZSwgaWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGUgPSBoIHx8IGxlLm5hbWU7XG4gICAgICAgICAgICAgICAgWC5sZW5ndGggPiAxICYmIChwZSA9IHBlICsgKGllICsgMSkpLCBkZS5hcHBlbmQocGUsIGxlKTtcbiAgICAgICAgICAgICAgfSksIHkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmUgPSB5LnNwbGl0KFwiI1wiKTtcbiAgICAgICAgICAgICAgICB5ID0gdmVbMF07XG4gICAgICAgICAgICAgICAgdmFyIHNlID0gdmVbMV0gfHwgXCJcIjtcbiAgICAgICAgICAgICAgICAoMCwgcC5kZWZhdWx0KShTKS5jYWxsKFMsIE4sIGZ1bmN0aW9uKGxlLCBpZSkge1xuICAgICAgICAgICAgICAgICAgUCAmJiAoKDAsIHYuZGVmYXVsdCkoeSkuY2FsbCh5LCBcIj9cIikgPiAwID8geSArPSBcIiZcIiA6IHkgKz0gXCI/XCIsIHkgPSB5ICsgbGUgKyBcIj1cIiArIGllKSwgZGUuYXBwZW5kKGxlLCBpZSk7XG4gICAgICAgICAgICAgICAgfSksIHNlICYmICh5ICs9IFwiI1wiICsgc2UpO1xuICAgICAgICAgICAgICAgIHZhciBtZSA9IEQuZGVmYXVsdCh5LCB7IHRpbWVvdXQ6IFYsIGZvcm1EYXRhOiBkZSwgaGVhZGVyczogaiwgd2l0aENyZWRlbnRpYWxzOiAhIVcsIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKGllKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoSS5iZWZvcmUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJLmJlZm9yZShpZSwgQSwgWCk7XG4gICAgICAgICAgICAgICAgfSwgb25UaW1lb3V0OiBmdW5jdGlvbihpZSkge1xuICAgICAgICAgICAgICAgICAgRS5jdXN0b21BbGVydChNKFwiXFx1NEUwQVxcdTRGMjBcXHU1NkZFXFx1NzI0N1xcdThEODVcXHU2NUY2XCIpLCBcImVycm9yXCIpLCBJLnRpbWVvdXQgJiYgSS50aW1lb3V0KGllLCBBKTtcbiAgICAgICAgICAgICAgICB9LCBvblByb2dyZXNzOiBmdW5jdGlvbihpZSwgcGUpIHtcbiAgICAgICAgICAgICAgICAgIHZhciB0ZSA9IG5ldyBULmRlZmF1bHQoQSk7XG4gICAgICAgICAgICAgICAgICBwZS5sZW5ndGhDb21wdXRhYmxlICYmIChpZSA9IHBlLmxvYWRlZCAvIHBlLnRvdGFsLCB0ZS5zaG93KGllKSk7XG4gICAgICAgICAgICAgICAgfSwgb25FcnJvcjogZnVuY3Rpb24oaWUpIHtcbiAgICAgICAgICAgICAgICAgIEUuY3VzdG9tQWxlcnQoTShcIlxcdTRFMEFcXHU0RjIwXFx1NTZGRVxcdTcyNDdcXHU5NTE5XFx1OEJFRlwiKSwgXCJlcnJvclwiLCBNKFwiXFx1NEUwQVxcdTRGMjBcXHU1NkZFXFx1NzI0N1xcdTk1MTlcXHU4QkVGXCIpICsgXCJcXHVGRjBDXCIgKyBNKFwiXFx1NjcwRFxcdTUyQTFcXHU1NjY4XFx1OEZENFxcdTU2REVcXHU3MkI2XFx1NjAwMVwiKSArIFwiOiBcIiArIGllLnN0YXR1cyksIEkuZXJyb3IgJiYgSS5lcnJvcihpZSwgQSk7XG4gICAgICAgICAgICAgICAgfSwgb25GYWlsOiBmdW5jdGlvbihpZSwgcGUpIHtcbiAgICAgICAgICAgICAgICAgIEUuY3VzdG9tQWxlcnQoTShcIlxcdTRFMEFcXHU0RjIwXFx1NTZGRVxcdTcyNDdcXHU1OTMxXFx1OEQyNVwiKSwgXCJlcnJvclwiLCBNKFwiXFx1NEUwQVxcdTRGMjBcXHU1NkZFXFx1NzI0N1xcdThGRDRcXHU1NkRFXFx1N0VEM1xcdTY3OUNcXHU5NTE5XFx1OEJFRlwiKSArIChcIlxcdUZGMENcIiArIE0oXCJcXHU4RkQ0XFx1NTZERVxcdTdFRDNcXHU2NzlDXCIpICsgXCI6IFwiKSArIHBlKSwgSS5mYWlsICYmIEkuZmFpbChpZSwgQSwgcGUpO1xuICAgICAgICAgICAgICAgIH0sIG9uU3VjY2VzczogZnVuY3Rpb24oaWUsIHBlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoSS5jdXN0b21JbnNlcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRlO1xuICAgICAgICAgICAgICAgICAgICBJLmN1c3RvbUluc2VydCgoMCwgYy5kZWZhdWx0KSh0ZSA9IHcuaW5zZXJ0SW1nKS5jYWxsKHRlLCB3KSwgcGUsIEEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAocGUuZXJybm8gIT0gXCIwXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgRS5jdXN0b21BbGVydChNKFwiXFx1NEUwQVxcdTRGMjBcXHU1NkZFXFx1NzI0N1xcdTU5MzFcXHU4RDI1XCIpLCBcImVycm9yXCIsIE0oXCJcXHU0RTBBXFx1NEYyMFxcdTU2RkVcXHU3MjQ3XFx1OEZENFxcdTU2REVcXHU3RUQzXFx1Njc5Q1xcdTk1MTlcXHU4QkVGXCIpICsgXCJcXHVGRjBDXCIgKyBNKFwiXFx1OEZENFxcdTU2REVcXHU3RUQzXFx1Njc5Q1wiKSArIFwiIGVycm5vPVwiICsgcGUuZXJybm8pLCBJLmZhaWwgJiYgSS5mYWlsKGllLCBBLCBwZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHZhciBnZSA9IHBlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAoMCwgcC5kZWZhdWx0KShnZSkuY2FsbChnZSwgZnVuY3Rpb24oQWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIEFlID09IFwic3RyaW5nXCIgPyB3Lmluc2VydEltZyhBZSkgOiB3Lmluc2VydEltZyhBZS51cmwsIEFlLmFsdCwgQWUuaHJlZik7XG4gICAgICAgICAgICAgICAgICB9KSwgSS5zdWNjZXNzICYmIEkuc3VjY2VzcyhpZSwgQSwgcGUpO1xuICAgICAgICAgICAgICAgIH0gfSk7XG4gICAgICAgICAgICAgICAgdHlwZW9mIG1lID09IFwic3RyaW5nXCIgJiYgRS5jdXN0b21BbGVydChtZSwgXCJlcnJvclwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQiAmJiBTLmFyckZvckVhY2goUiwgZnVuY3Rpb24obGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWUgPSB3LCBwZSA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgcGUucmVhZEFzRGF0YVVSTChsZSksIHBlLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5yZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5yZXN1bHQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgaWUuaW5zZXJ0SW1nKHRlLCB0ZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LCB4O1xuICAgICAgfSgpO1xuICAgICAgaS5kZWZhdWx0ID0gbTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDQxMCkpLCBwID0gcyh0KDQpKSwgdiA9IHModCg0NSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pLCBpLmRlYWxUZXh0Tm9kZSA9IGkuaXNBbGxUb2RvID0gaS5pc1RvZG8gPSBpLmdldEN1cnNvck5leHROb2RlID0gdm9pZCAwO1xuICAgICAgZnVuY3Rpb24gYih4KSB7XG4gICAgICAgIHJldHVybiB4Lmxlbmd0aCA/IHguYXR0cihcImNsYXNzXCIpID09PSBcInctZS10b2RvXCIgOiAhMTtcbiAgICAgIH1cbiAgICAgIGkuaXNUb2RvID0gYjtcbiAgICAgIGZ1bmN0aW9uIFMoeCkge1xuICAgICAgICB2YXIgUiA9IHguc2VsZWN0aW9uLmdldFNlbGVjdGlvblJhbmdlVG9wTm9kZXMoKTtcbiAgICAgICAgaWYgKFIubGVuZ3RoICE9PSAwKVxuICAgICAgICAgIHJldHVybiAoMCwgYy5kZWZhdWx0KShSKS5jYWxsKFIsIGZ1bmN0aW9uKHcpIHtcbiAgICAgICAgICAgIHJldHVybiBiKHcpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaS5pc0FsbFRvZG8gPSBTO1xuICAgICAgZnVuY3Rpb24gRCh4LCBSLCB3KSB7XG4gICAgICAgIHZhciBBO1xuICAgICAgICBpZiAoISF4Lmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgIHZhciBFID0geC5jbG9uZU5vZGUoKSwgQyA9ICExO1xuICAgICAgICAgIFIubm9kZVZhbHVlID09PSBcIlwiICYmIChDID0gITApO1xuICAgICAgICAgIHZhciBNID0gW107XG4gICAgICAgICAgcmV0dXJuICgwLCBwLmRlZmF1bHQpKEEgPSB4LmNoaWxkTm9kZXMpLmNhbGwoQSwgZnVuY3Rpb24oeSkge1xuICAgICAgICAgICAgaWYgKCFUKHksIFIpICYmIEMgJiYgKEUuYXBwZW5kQ2hpbGQoeS5jbG9uZU5vZGUoITApKSwgeS5ub2RlTmFtZSAhPT0gXCJCUlwiICYmIE0ucHVzaCh5KSksIFQoeSwgUikpIHtcbiAgICAgICAgICAgICAgaWYgKHkubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgQiA9IEQoeSwgUiwgdyk7XG4gICAgICAgICAgICAgICAgQiAmJiBCLnRleHRDb250ZW50ICE9PSBcIlwiICYmIChFID09IG51bGwgfHwgRS5hcHBlbmRDaGlsZChCKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHkubm9kZVR5cGUgPT09IDMgJiYgUi5pc0VxdWFsTm9kZSh5KSkge1xuICAgICAgICAgICAgICAgIHZhciAkID0gbSh5LCB3KTtcbiAgICAgICAgICAgICAgICBFLnRleHRDb250ZW50ID0gJDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBDID0gITA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksICgwLCBwLmRlZmF1bHQpKE0pLmNhbGwoTSwgZnVuY3Rpb24oeSkge1xuICAgICAgICAgICAgdmFyIEIgPSB5O1xuICAgICAgICAgICAgQi5yZW1vdmUoKTtcbiAgICAgICAgICB9KSwgRTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaS5nZXRDdXJzb3JOZXh0Tm9kZSA9IEQ7XG4gICAgICBmdW5jdGlvbiBUKHgsIFIpIHtcbiAgICAgICAgcmV0dXJuIHgubm9kZVR5cGUgPT09IDMgPyB4Lm5vZGVWYWx1ZSA9PT0gUi5ub2RlVmFsdWUgOiB4LmNvbnRhaW5zKFIpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbSh4LCBSLCB3KSB7XG4gICAgICAgIHcgPT09IHZvaWQgMCAmJiAodyA9ICEwKTtcbiAgICAgICAgdmFyIEEgPSB4Lm5vZGVWYWx1ZSwgRSA9IEEgPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCB2LmRlZmF1bHQpKEEpLmNhbGwoQSwgMCwgUik7XG4gICAgICAgIGlmIChBID0gQSA9PSBudWxsID8gdm9pZCAwIDogKDAsIHYuZGVmYXVsdCkoQSkuY2FsbChBLCBSKSwgIXcpIHtcbiAgICAgICAgICB2YXIgQyA9IEE7XG4gICAgICAgICAgQSA9IEUsIEUgPSBDO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4Lm5vZGVWYWx1ZSA9IEUsIEE7XG4gICAgICB9XG4gICAgICBpLmRlYWxUZXh0Tm9kZSA9IG07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBjID0gdCg0MzApLCBwID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZ1bmN0aW9uIHYoYikge1xuICAgICAgICAgIHRoaXMubWF4U2l6ZSA9IGIsIHRoaXMuaXNSZSA9ICExLCB0aGlzLmRhdGEgPSBuZXcgYy5DZWlsU3RhY2soYiksIHRoaXMucmV2b2tlRGF0YSA9IG5ldyBjLkNlaWxTdGFjayhiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKDAsIGQuZGVmYXVsdCkodi5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5kYXRhLnNpemUsIHRoaXMucmV2b2tlRGF0YS5zaXplXTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgICAgfSksIHYucHJvdG90eXBlLnJlc2V0TWF4U2l6ZSA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgICB0aGlzLmRhdGEucmVzZXRNYXgoYiksIHRoaXMucmV2b2tlRGF0YS5yZXNldE1heChiKTtcbiAgICAgICAgfSwgdi5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pc1JlICYmICh0aGlzLnJldm9rZURhdGEuY2xlYXIoKSwgdGhpcy5pc1JlID0gITEpLCB0aGlzLmRhdGEuaW5zdGFjayhiKSwgdGhpcztcbiAgICAgICAgfSwgdi5wcm90b3R5cGUucmV2b2tlID0gZnVuY3Rpb24oYikge1xuICAgICAgICAgICF0aGlzLmlzUmUgJiYgKHRoaXMuaXNSZSA9ICEwKTtcbiAgICAgICAgICB2YXIgUyA9IHRoaXMuZGF0YS5vdXRzdGFjaygpO1xuICAgICAgICAgIHJldHVybiBTID8gKHRoaXMucmV2b2tlRGF0YS5pbnN0YWNrKFMpLCBiKFMpLCAhMCkgOiAhMTtcbiAgICAgICAgfSwgdi5wcm90b3R5cGUucmVzdG9yZSA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgICAhdGhpcy5pc1JlICYmICh0aGlzLmlzUmUgPSAhMCk7XG4gICAgICAgICAgdmFyIFMgPSB0aGlzLnJldm9rZURhdGEub3V0c3RhY2soKTtcbiAgICAgICAgICByZXR1cm4gUyA/ICh0aGlzLmRhdGEuaW5zdGFjayhTKSwgYihTKSwgITApIDogITE7XG4gICAgICAgIH0sIHY7XG4gICAgICB9KCk7XG4gICAgICBpLmRlZmF1bHQgPSBwO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxNCksIGQgPSB0KDExKSwgYyA9IHQoNzMpO1xuICAgICAgby5leHBvcnRzID0gIXMgJiYgIWQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoYyhcImRpdlwiKSwgXCJhXCIsIHsgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gNztcbiAgICAgICAgfSB9KS5hICE9IDc7XG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTEpLCBkID0gLyN8XFwucHJvdG90eXBlXFwuLywgYyA9IGZ1bmN0aW9uKFQsIG0pIHtcbiAgICAgICAgdmFyIHggPSB2W3AoVCldO1xuICAgICAgICByZXR1cm4geCA9PSBTID8gITAgOiB4ID09IGIgPyAhMSA6IHR5cGVvZiBtID09IFwiZnVuY3Rpb25cIiA/IHMobSkgOiAhIW07XG4gICAgICB9LCBwID0gYy5ub3JtYWxpemUgPSBmdW5jdGlvbihEKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcoRCkucmVwbGFjZShkLCBcIi5cIikudG9Mb3dlckNhc2UoKTtcbiAgICAgIH0sIHYgPSBjLmRhdGEgPSB7fSwgYiA9IGMuTkFUSVZFID0gXCJOXCIsIFMgPSBjLlBPTFlGSUxMID0gXCJQXCI7XG4gICAgICBvLmV4cG9ydHMgPSBjO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxMDIpLCBkID0gRnVuY3Rpb24udG9TdHJpbmc7XG4gICAgICB0eXBlb2Ygcy5pbnNwZWN0U291cmNlICE9IFwiZnVuY3Rpb25cIiAmJiAocy5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24oYykge1xuICAgICAgICByZXR1cm4gZC5jYWxsKGMpO1xuICAgICAgfSksIG8uZXhwb3J0cyA9IHMuaW5zcGVjdFNvdXJjZTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoOCksIGQgPSB0KDE2NiksIGMgPSBcIl9fY29yZS1qc19zaGFyZWRfX1wiLCBwID0gc1tjXSB8fCBkKGMsIHt9KTtcbiAgICAgIG8uZXhwb3J0cyA9IHA7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDEwNCksIGQgPSB0KDE5KSwgYyA9IHQoMTYpLCBwID0gdCgxMCksIHYgPSB0KDQyKSwgYiA9IHAoXCJpdGVyYXRvclwiKSwgUyA9ICExLCBEID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgVCwgbSwgeDtcbiAgICAgIFtdLmtleXMgJiYgKHggPSBbXS5rZXlzKCksIFwibmV4dFwiIGluIHggPyAobSA9IHMocyh4KSksIG0gIT09IE9iamVjdC5wcm90b3R5cGUgJiYgKFQgPSBtKSkgOiBTID0gITApLCBUID09IG51bGwgJiYgKFQgPSB7fSksICF2ICYmICFjKFQsIGIpICYmIGQoVCwgYiwgRCksIG8uZXhwb3J0cyA9IHsgSXRlcmF0b3JQcm90b3R5cGU6IFQsIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IFMgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTYpLCBkID0gdCgyOSksIGMgPSB0KDYzKSwgcCA9IHQoMTY4KSwgdiA9IGMoXCJJRV9QUk9UT1wiKSwgYiA9IE9iamVjdC5wcm90b3R5cGU7XG4gICAgICBvLmV4cG9ydHMgPSBwID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24oUykge1xuICAgICAgICByZXR1cm4gUyA9IGQoUyksIHMoUywgdikgPyBTW3ZdIDogdHlwZW9mIFMuY29uc3RydWN0b3IgPT0gXCJmdW5jdGlvblwiICYmIFMgaW5zdGFuY2VvZiBTLmNvbnN0cnVjdG9yID8gUy5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgOiBTIGluc3RhbmNlb2YgT2JqZWN0ID8gYiA6IG51bGw7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg3Nik7XG4gICAgICBvLmV4cG9ydHMgPSBzICYmICFTeW1ib2wuc2hhbSAmJiB6dChTeW1ib2wuaXRlcmF0b3IpID09IFwic3ltYm9sXCI7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDE2KSwgZCA9IHQoMjgpLCBjID0gdCg3OCkuaW5kZXhPZiwgcCA9IHQoNTEpO1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24odiwgYikge1xuICAgICAgICB2YXIgUyA9IGQodiksIEQgPSAwLCBUID0gW10sIG07XG4gICAgICAgIGZvciAobSBpbiBTKVxuICAgICAgICAgICFzKHAsIG0pICYmIHMoUywgbSkgJiYgVC5wdXNoKG0pO1xuICAgICAgICBmb3IgKDsgYi5sZW5ndGggPiBEOyApXG4gICAgICAgICAgcyhTLCBtID0gYltEKytdKSAmJiAofmMoVCwgbSkgfHwgVC5wdXNoKG0pKTtcbiAgICAgICAgcmV0dXJuIFQ7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgzNSk7XG4gICAgICBvLmV4cG9ydHMgPSBzKFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVsZW1lbnRcIik7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDgpO1xuICAgICAgby5leHBvcnRzID0gcy5Qcm9taXNlO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg1Myk7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihkLCBjLCBwKSB7XG4gICAgICAgIGZvciAodmFyIHYgaW4gYylcbiAgICAgICAgICBwICYmIHAudW5zYWZlICYmIGRbdl0gPyBkW3ZdID0gY1t2XSA6IHMoZCwgdiwgY1t2XSwgcCk7XG4gICAgICAgIHJldHVybiBkO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMzUpLCBkID0gdCgxOCksIGMgPSB0KDEwKSwgcCA9IHQoMTQpLCB2ID0gYyhcInNwZWNpZXNcIik7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZhciBTID0gcyhiKSwgRCA9IGQuZjtcbiAgICAgICAgcCAmJiBTICYmICFTW3ZdICYmIEQoUywgdiwgeyBjb25maWd1cmFibGU6ICEwLCBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IH0pO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTApLCBkID0gdCg0MyksIGMgPSBzKFwiaXRlcmF0b3JcIiksIHAgPSBBcnJheS5wcm90b3R5cGU7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbih2KSB7XG4gICAgICAgIHJldHVybiB2ICE9PSB2b2lkIDAgJiYgKGQuQXJyYXkgPT09IHYgfHwgcFtjXSA9PT0gdik7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg2NSksIGQgPSB0KDQzKSwgYyA9IHQoMTApLCBwID0gYyhcIml0ZXJhdG9yXCIpO1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24odikge1xuICAgICAgICBpZiAodiAhPSBudWxsKVxuICAgICAgICAgIHJldHVybiB2W3BdIHx8IHZbXCJAQGl0ZXJhdG9yXCJdIHx8IGRbcyh2KV07XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyNSk7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihkLCBjLCBwLCB2KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHYgPyBjKHMocClbMF0sIHBbMV0pIDogYyhwKTtcbiAgICAgICAgfSBjYXRjaCAoUykge1xuICAgICAgICAgIHZhciBiID0gZC5yZXR1cm47XG4gICAgICAgICAgdGhyb3cgYiAhPT0gdm9pZCAwICYmIHMoYi5jYWxsKGQpKSwgUztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTApLCBkID0gcyhcIml0ZXJhdG9yXCIpLCBjID0gITE7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcCA9IDAsIHYgPSB7IG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6ICEhcCsrIH07XG4gICAgICAgIH0sIHJldHVybjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgYyA9ICEwO1xuICAgICAgICB9IH07XG4gICAgICAgIHZbZF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSwgQXJyYXkuZnJvbSh2LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aHJvdyAyO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgfVxuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24oYiwgUykge1xuICAgICAgICBpZiAoIVMgJiYgIWMpXG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB2YXIgRCA9ICExO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBUID0ge307XG4gICAgICAgICAgVFtkXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IEQgPSAhMCB9O1xuICAgICAgICAgICAgfSB9O1xuICAgICAgICAgIH0sIGIoVCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBEO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjUpLCBkID0gdCg0MCksIGMgPSB0KDEwKSwgcCA9IGMoXCJzcGVjaWVzXCIpO1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24odiwgYikge1xuICAgICAgICB2YXIgUyA9IHModikuY29uc3RydWN0b3IsIEQ7XG4gICAgICAgIHJldHVybiBTID09PSB2b2lkIDAgfHwgKEQgPSBzKFMpW3BdKSA9PSBudWxsID8gYiA6IGQoRCk7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg4KSwgZCA9IHQoMTEpLCBjID0gdCgzMyksIHAgPSB0KDM5KSwgdiA9IHQoMTA3KSwgYiA9IHQoNzMpLCBTID0gdCgxMTcpLCBEID0gcy5sb2NhdGlvbiwgVCA9IHMuc2V0SW1tZWRpYXRlLCBtID0gcy5jbGVhckltbWVkaWF0ZSwgeCA9IHMucHJvY2VzcywgUiA9IHMuTWVzc2FnZUNoYW5uZWwsIHcgPSBzLkRpc3BhdGNoLCBBID0gMCwgRSA9IHt9LCBDID0gXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiwgTSwgeSwgQiwgJCA9IGZ1bmN0aW9uKFApIHtcbiAgICAgICAgaWYgKEUuaGFzT3duUHJvcGVydHkoUCkpIHtcbiAgICAgICAgICB2YXIgaiA9IEVbUF07XG4gICAgICAgICAgZGVsZXRlIEVbUF0sIGooKTtcbiAgICAgICAgfVxuICAgICAgfSwgRiA9IGZ1bmN0aW9uKFApIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICQoUCk7XG4gICAgICAgIH07XG4gICAgICB9LCBrID0gZnVuY3Rpb24oUCkge1xuICAgICAgICAkKFAuZGF0YSk7XG4gICAgICB9LCBoID0gZnVuY3Rpb24oUCkge1xuICAgICAgICBzLnBvc3RNZXNzYWdlKFAgKyBcIlwiLCBELnByb3RvY29sICsgXCIvL1wiICsgRC5ob3N0KTtcbiAgICAgIH07XG4gICAgICAoIVQgfHwgIW0pICYmIChUID0gZnVuY3Rpb24oUCkge1xuICAgICAgICBmb3IgKHZhciBqID0gW10sIEkgPSAxOyBhcmd1bWVudHMubGVuZ3RoID4gSTsgKVxuICAgICAgICAgIGoucHVzaChhcmd1bWVudHNbSSsrXSk7XG4gICAgICAgIHJldHVybiBFWysrQV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAodHlwZW9mIFAgPT0gXCJmdW5jdGlvblwiID8gUCA6IEZ1bmN0aW9uKFApKS5hcHBseSh2b2lkIDAsIGopO1xuICAgICAgICB9LCBNKEEpLCBBO1xuICAgICAgfSwgbSA9IGZ1bmN0aW9uKFApIHtcbiAgICAgICAgZGVsZXRlIEVbUF07XG4gICAgICB9LCBjKHgpID09IFwicHJvY2Vzc1wiID8gTSA9IGZ1bmN0aW9uKFApIHtcbiAgICAgICAgeC5uZXh0VGljayhGKFApKTtcbiAgICAgIH0gOiB3ICYmIHcubm93ID8gTSA9IGZ1bmN0aW9uKFApIHtcbiAgICAgICAgdy5ub3coRihQKSk7XG4gICAgICB9IDogUiAmJiAhUyA/ICh5ID0gbmV3IFIoKSwgQiA9IHkucG9ydDIsIHkucG9ydDEub25tZXNzYWdlID0gaywgTSA9IHAoQi5wb3N0TWVzc2FnZSwgQiwgMSkpIDogcy5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSBcImZ1bmN0aW9uXCIgJiYgIXMuaW1wb3J0U2NyaXB0cyAmJiAhZChoKSAmJiBELnByb3RvY29sICE9PSBcImZpbGU6XCIgPyAoTSA9IGgsIHMuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaywgITEpKSA6IEMgaW4gYihcInNjcmlwdFwiKSA/IE0gPSBmdW5jdGlvbihQKSB7XG4gICAgICAgIHYuYXBwZW5kQ2hpbGQoYihcInNjcmlwdFwiKSlbQ10gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2LnJlbW92ZUNoaWxkKHRoaXMpLCAkKFApO1xuICAgICAgICB9O1xuICAgICAgfSA6IE0gPSBmdW5jdGlvbihQKSB7XG4gICAgICAgIHNldFRpbWVvdXQoRihQKSwgMCk7XG4gICAgICB9KSwgby5leHBvcnRzID0geyBzZXQ6IFQsIGNsZWFyOiBtIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDg0KTtcbiAgICAgIG8uZXhwb3J0cyA9IC8oaXBob25lfGlwb2R8aXBhZCkuKmFwcGxld2Via2l0L2kudGVzdChzKTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjUpLCBkID0gdCgxMyksIGMgPSB0KDg1KTtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKHAsIHYpIHtcbiAgICAgICAgaWYgKHMocCksIGQodikgJiYgdi5jb25zdHJ1Y3RvciA9PT0gcClcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgdmFyIGIgPSBjLmYocCksIFMgPSBiLnJlc29sdmU7XG4gICAgICAgIHJldHVybiBTKHYpLCBiLnByb21pc2U7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4geyBlcnJvcjogITEsIHZhbHVlOiB0KCkgfTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgIHJldHVybiB7IGVycm9yOiAhMCwgdmFsdWU6IHMgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICBvLmV4cG9ydHMgPSB0KDE5Nyk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDUpLCBkID0gdCg4KSwgYyA9IHQoMTIyKSwgcCA9IHQoMTEpLCB2ID0gdCgxOSksIGIgPSB0KDY2KSwgUyA9IHQoODMpLCBEID0gdCgxMyksIFQgPSB0KDM2KSwgbSA9IHQoMTgpLmYsIHggPSB0KDMwKS5mb3JFYWNoLCBSID0gdCgxNCksIHcgPSB0KDQxKSwgQSA9IHcuc2V0LCBFID0gdy5nZXR0ZXJGb3I7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihDLCBNLCB5KSB7XG4gICAgICAgIHZhciBCID0gQy5pbmRleE9mKFwiTWFwXCIpICE9PSAtMSwgJCA9IEMuaW5kZXhPZihcIldlYWtcIikgIT09IC0xLCBGID0gQiA/IFwic2V0XCIgOiBcImFkZFwiLCBrID0gZFtDXSwgaCA9IGsgJiYgay5wcm90b3R5cGUsIE4gPSB7fSwgUDtcbiAgICAgICAgaWYgKCFSIHx8IHR5cGVvZiBrICE9IFwiZnVuY3Rpb25cIiB8fCAhKCQgfHwgaC5mb3JFYWNoICYmICFwKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG5ldyBrKCkuZW50cmllcygpLm5leHQoKTtcbiAgICAgICAgfSkpKVxuICAgICAgICAgIFAgPSB5LmdldENvbnN0cnVjdG9yKE0sIEMsIEIsIEYpLCBjLlJFUVVJUkVEID0gITA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIFAgPSBNKGZ1bmN0aW9uKEksIFYpIHtcbiAgICAgICAgICAgIEEoUyhJLCBQLCBDKSwgeyB0eXBlOiBDLCBjb2xsZWN0aW9uOiBuZXcgaygpIH0pLCBWICE9IG51bGwgJiYgYihWLCBJW0ZdLCBJLCBCKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YXIgaiA9IEUoQyk7XG4gICAgICAgICAgeChbXCJhZGRcIiwgXCJjbGVhclwiLCBcImRlbGV0ZVwiLCBcImZvckVhY2hcIiwgXCJnZXRcIiwgXCJoYXNcIiwgXCJzZXRcIiwgXCJrZXlzXCIsIFwidmFsdWVzXCIsIFwiZW50cmllc1wiXSwgZnVuY3Rpb24oSSkge1xuICAgICAgICAgICAgdmFyIFYgPSBJID09IFwiYWRkXCIgfHwgSSA9PSBcInNldFwiO1xuICAgICAgICAgICAgSSBpbiBoICYmICEoJCAmJiBJID09IFwiY2xlYXJcIikgJiYgdihQLnByb3RvdHlwZSwgSSwgZnVuY3Rpb24oVywgUSkge1xuICAgICAgICAgICAgICB2YXIgWCA9IGoodGhpcykuY29sbGVjdGlvbjtcbiAgICAgICAgICAgICAgaWYgKCFWICYmICQgJiYgIUQoVykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIEkgPT0gXCJnZXRcIiA/IHZvaWQgMCA6ICExO1xuICAgICAgICAgICAgICB2YXIgSiA9IFhbSV0oVyA9PT0gMCA/IDAgOiBXLCBRKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFYgPyB0aGlzIDogSjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLCAkIHx8IG0oUC5wcm90b3R5cGUsIFwic2l6ZVwiLCB7IGNvbmZpZ3VyYWJsZTogITAsIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gaih0aGlzKS5jb2xsZWN0aW9uLnNpemU7XG4gICAgICAgICAgfSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVChQLCBDLCAhMSwgITApLCBOW0NdID0gUCwgcyh7IGdsb2JhbDogITAsIGZvcmNlZDogITAgfSwgTiksICQgfHwgeS5zZXRTdHJvbmcoUCwgQywgQiksIFA7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg1MSksIGQgPSB0KDEzKSwgYyA9IHQoMTYpLCBwID0gdCgxOCkuZiwgdiA9IHQoNjQpLCBiID0gdCgyMDApLCBTID0gdihcIm1ldGFcIiksIEQgPSAwLCBUID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICEwO1xuICAgICAgfSwgbSA9IGZ1bmN0aW9uKEMpIHtcbiAgICAgICAgcChDLCBTLCB7IHZhbHVlOiB7XG4gICAgICAgICAgb2JqZWN0SUQ6IFwiT1wiICsgKytELFxuICAgICAgICAgIHdlYWtEYXRhOiB7fVxuICAgICAgICB9IH0pO1xuICAgICAgfSwgeCA9IGZ1bmN0aW9uKEMsIE0pIHtcbiAgICAgICAgaWYgKCFkKEMpKVxuICAgICAgICAgIHJldHVybiB6dChDKSA9PSBcInN5bWJvbFwiID8gQyA6ICh0eXBlb2YgQyA9PSBcInN0cmluZ1wiID8gXCJTXCIgOiBcIlBcIikgKyBDO1xuICAgICAgICBpZiAoIWMoQywgUykpIHtcbiAgICAgICAgICBpZiAoIVQoQykpXG4gICAgICAgICAgICByZXR1cm4gXCJGXCI7XG4gICAgICAgICAgaWYgKCFNKVxuICAgICAgICAgICAgcmV0dXJuIFwiRVwiO1xuICAgICAgICAgIG0oQyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIENbU10ub2JqZWN0SUQ7XG4gICAgICB9LCBSID0gZnVuY3Rpb24oQywgTSkge1xuICAgICAgICBpZiAoIWMoQywgUykpIHtcbiAgICAgICAgICBpZiAoIVQoQykpXG4gICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgaWYgKCFNKVxuICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgIG0oQyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIENbU10ud2Vha0RhdGE7XG4gICAgICB9LCB3ID0gZnVuY3Rpb24oQykge1xuICAgICAgICByZXR1cm4gYiAmJiBBLlJFUVVJUkVEICYmIFQoQykgJiYgIWMoQywgUykgJiYgbShDKSwgQztcbiAgICAgIH0sIEEgPSBvLmV4cG9ydHMgPSB7IFJFUVVJUkVEOiAhMSwgZmFzdEtleTogeCwgZ2V0V2Vha0RhdGE6IFIsIG9uRnJlZXplOiB3IH07XG4gICAgICBzW1NdID0gITA7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDE4KS5mLCBkID0gdCg3NyksIGMgPSB0KDEwOSksIHAgPSB0KDM5KSwgdiA9IHQoODMpLCBiID0gdCg2NiksIFMgPSB0KDc1KSwgRCA9IHQoMTEwKSwgVCA9IHQoMTQpLCBtID0gdCgxMjIpLmZhc3RLZXksIHggPSB0KDQxKSwgUiA9IHguc2V0LCB3ID0geC5nZXR0ZXJGb3I7XG4gICAgICBvLmV4cG9ydHMgPSB7IGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbihFLCBDLCBNLCB5KSB7XG4gICAgICAgIHZhciBCID0gRShmdW5jdGlvbihoLCBOKSB7XG4gICAgICAgICAgdihoLCBCLCBDKSwgUihoLCB7IHR5cGU6IEMsIGluZGV4OiBkKG51bGwpLCBmaXJzdDogdm9pZCAwLCBsYXN0OiB2b2lkIDAsIHNpemU6IDAgfSksIFQgfHwgKGguc2l6ZSA9IDApLCBOICE9IG51bGwgJiYgYihOLCBoW3ldLCBoLCBNKTtcbiAgICAgICAgfSksICQgPSB3KEMpLCBGID0gZnVuY3Rpb24oTiwgUCwgaikge1xuICAgICAgICAgIHZhciBJID0gJChOKSwgViA9IGsoTiwgUCksIFcsIFE7XG4gICAgICAgICAgcmV0dXJuIFYgPyBWLnZhbHVlID0gaiA6IChJLmxhc3QgPSBWID0geyBpbmRleDogUSA9IG0oUCwgITApLCBrZXk6IFAsIHZhbHVlOiBqLCBwcmV2aW91czogVyA9IEkubGFzdCwgbmV4dDogdm9pZCAwLCByZW1vdmVkOiAhMSB9LCBJLmZpcnN0IHx8IChJLmZpcnN0ID0gViksIFcgJiYgKFcubmV4dCA9IFYpLCBUID8gSS5zaXplKysgOiBOLnNpemUrKywgUSAhPT0gXCJGXCIgJiYgKEkuaW5kZXhbUV0gPSBWKSksIE47XG4gICAgICAgIH0sIGsgPSBmdW5jdGlvbihOLCBQKSB7XG4gICAgICAgICAgdmFyIGogPSAkKE4pLCBJID0gbShQKSwgVjtcbiAgICAgICAgICBpZiAoSSAhPT0gXCJGXCIpXG4gICAgICAgICAgICByZXR1cm4gai5pbmRleFtJXTtcbiAgICAgICAgICBmb3IgKFYgPSBqLmZpcnN0OyBWOyBWID0gVi5uZXh0KVxuICAgICAgICAgICAgaWYgKFYua2V5ID09IFApXG4gICAgICAgICAgICAgIHJldHVybiBWO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYyhCLnByb3RvdHlwZSwge1xuICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZvciAodmFyIE4gPSB0aGlzLCBQID0gJChOKSwgaiA9IFAuaW5kZXgsIEkgPSBQLmZpcnN0OyBJOyApXG4gICAgICAgICAgICAgIEkucmVtb3ZlZCA9ICEwLCBJLnByZXZpb3VzICYmIChJLnByZXZpb3VzID0gSS5wcmV2aW91cy5uZXh0ID0gdm9pZCAwKSwgZGVsZXRlIGpbSS5pbmRleF0sIEkgPSBJLm5leHQ7XG4gICAgICAgICAgICBQLmZpcnN0ID0gUC5sYXN0ID0gdm9pZCAwLCBUID8gUC5zaXplID0gMCA6IE4uc2l6ZSA9IDA7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZWxldGU6IGZ1bmN0aW9uKE4pIHtcbiAgICAgICAgICAgIHZhciBQID0gdGhpcywgaiA9ICQoUCksIEkgPSBrKFAsIE4pO1xuICAgICAgICAgICAgaWYgKEkpIHtcbiAgICAgICAgICAgICAgdmFyIFYgPSBJLm5leHQsIFcgPSBJLnByZXZpb3VzO1xuICAgICAgICAgICAgICBkZWxldGUgai5pbmRleFtJLmluZGV4XSwgSS5yZW1vdmVkID0gITAsIFcgJiYgKFcubmV4dCA9IFYpLCBWICYmIChWLnByZXZpb3VzID0gVyksIGouZmlyc3QgPT0gSSAmJiAoai5maXJzdCA9IFYpLCBqLmxhc3QgPT0gSSAmJiAoai5sYXN0ID0gVyksIFQgPyBqLnNpemUtLSA6IFAuc2l6ZS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICEhSTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZvckVhY2g6IGZ1bmN0aW9uKE4pIHtcbiAgICAgICAgICAgIGZvciAodmFyIFAgPSAkKHRoaXMpLCBqID0gcChOLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHZvaWQgMCwgMyksIEk7IEkgPSBJID8gSS5uZXh0IDogUC5maXJzdDsgKVxuICAgICAgICAgICAgICBmb3IgKGooSS52YWx1ZSwgSS5rZXksIHRoaXMpOyBJICYmIEkucmVtb3ZlZDsgKVxuICAgICAgICAgICAgICAgIEkgPSBJLnByZXZpb3VzO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaGFzOiBmdW5jdGlvbihOKSB7XG4gICAgICAgICAgICByZXR1cm4gISFrKHRoaXMsIE4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksIGMoQi5wcm90b3R5cGUsIE0gPyB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbihOKSB7XG4gICAgICAgICAgICB2YXIgUCA9IGsodGhpcywgTik7XG4gICAgICAgICAgICByZXR1cm4gUCAmJiBQLnZhbHVlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0OiBmdW5jdGlvbihOLCBQKSB7XG4gICAgICAgICAgICByZXR1cm4gRih0aGlzLCBOID09PSAwID8gMCA6IE4sIFApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSA6IHtcbiAgICAgICAgICBhZGQ6IGZ1bmN0aW9uKE4pIHtcbiAgICAgICAgICAgIHJldHVybiBGKHRoaXMsIE4gPSBOID09PSAwID8gMCA6IE4sIE4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksIFQgJiYgcyhCLnByb3RvdHlwZSwgXCJzaXplXCIsIHsgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gJCh0aGlzKS5zaXplO1xuICAgICAgICB9IH0pLCBCO1xuICAgICAgfSwgc2V0U3Ryb25nOiBmdW5jdGlvbihFLCBDLCBNKSB7XG4gICAgICAgIHZhciB5ID0gQyArIFwiIEl0ZXJhdG9yXCIsIEIgPSB3KEMpLCAkID0gdyh5KTtcbiAgICAgICAgUyhFLCBDLCBmdW5jdGlvbihGLCBrKSB7XG4gICAgICAgICAgUih0aGlzLCB7IHR5cGU6IHksIHRhcmdldDogRiwgc3RhdGU6IEIoRiksIGtpbmQ6IGssIGxhc3Q6IHZvaWQgMCB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZm9yICh2YXIgRiA9ICQodGhpcyksIGsgPSBGLmtpbmQsIGggPSBGLmxhc3Q7IGggJiYgaC5yZW1vdmVkOyApXG4gICAgICAgICAgICBoID0gaC5wcmV2aW91cztcbiAgICAgICAgICByZXR1cm4gIUYudGFyZ2V0IHx8ICEoRi5sYXN0ID0gaCA9IGggPyBoLm5leHQgOiBGLnN0YXRlLmZpcnN0KSA/IChGLnRhcmdldCA9IHZvaWQgMCwgeyB2YWx1ZTogdm9pZCAwLCBkb25lOiAhMCB9KSA6IGsgPT0gXCJrZXlzXCIgPyB7IHZhbHVlOiBoLmtleSwgZG9uZTogITEgfSA6IGsgPT0gXCJ2YWx1ZXNcIiA/IHsgdmFsdWU6IGgudmFsdWUsIGRvbmU6ICExIH0gOiB7IHZhbHVlOiBbaC5rZXksIGgudmFsdWVdLCBkb25lOiAhMSB9O1xuICAgICAgICB9LCBNID8gXCJlbnRyaWVzXCIgOiBcInZhbHVlc1wiLCAhTSwgITApLCBEKEMpO1xuICAgICAgfSB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxMik7XG4gICAgICBzKFwiaXRlcmF0b3JcIik7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDEwNiksIGQgPSB0KDgwKSwgYyA9IGQuY29uY2F0KFwibGVuZ3RoXCIsIFwicHJvdG90eXBlXCIpO1xuICAgICAgaS5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24odikge1xuICAgICAgICByZXR1cm4gcyh2LCBjKTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSkge1xuICAgICAgaS5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICBvLmV4cG9ydHMgPSB0KDI2OCk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KSwgaS5kZWZhdWx0ID0geyB6SW5kZXg6IDFlNCB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSksIGkuZGVmYXVsdCA9IHsgZm9jdXM6ICEwLCBoZWlnaHQ6IDMwMCwgcGxhY2Vob2xkZXI6IFwiXFx1OEJGN1xcdThGOTNcXHU1MTY1XFx1NkI2M1xcdTY1ODdcIiwgekluZGV4RnVsbFNjcmVlbjogMTAwMDIsIHNob3dGdWxsU2NyZWVuOiAhMCB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoNCkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pLCBpLmdldFBhc3RlSW1ncyA9IGkuZ2V0UGFzdGVIdG1sID0gaS5nZXRQYXN0ZVRleHQgPSB2b2lkIDA7XG4gICAgICB2YXIgcCA9IHQoMiksIHYgPSB0KDYpLCBiID0gcC5fX2ltcG9ydERlZmF1bHQodCgyOTIpKTtcbiAgICAgIGZ1bmN0aW9uIFMobSkge1xuICAgICAgICB2YXIgeCA9IG0uY2xpcGJvYXJkRGF0YSwgUiA9IFwiXCI7XG4gICAgICAgIHJldHVybiB4ID09IG51bGwgPyBSID0gd2luZG93LmNsaXBib2FyZERhdGEgJiYgd2luZG93LmNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHRcIikgOiBSID0geC5nZXREYXRhKFwidGV4dC9wbGFpblwiKSwgdi5yZXBsYWNlSHRtbFN5bWJvbChSKTtcbiAgICAgIH1cbiAgICAgIGkuZ2V0UGFzdGVUZXh0ID0gUztcbiAgICAgIGZ1bmN0aW9uIEQobSwgeCwgUikge1xuICAgICAgICB4ID09PSB2b2lkIDAgJiYgKHggPSAhMCksIFIgPT09IHZvaWQgMCAmJiAoUiA9ICExKTtcbiAgICAgICAgdmFyIHcgPSBtLmNsaXBib2FyZERhdGEsIEEgPSBcIlwiO1xuICAgICAgICBpZiAodyAmJiAoQSA9IHcuZ2V0RGF0YShcInRleHQvaHRtbFwiKSksICFBKSB7XG4gICAgICAgICAgdmFyIEUgPSBTKG0pO1xuICAgICAgICAgIGlmICghRSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgIEEgPSBcIjxwPlwiICsgRSArIFwiPC9wPlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBBID0gQS5yZXBsYWNlKC88KFxcZCkvZ20sIGZ1bmN0aW9uKEMsIE0pIHtcbiAgICAgICAgICByZXR1cm4gXCImbHQ7XCIgKyBNO1xuICAgICAgICB9KSwgQSA9IEEucmVwbGFjZSgvPChcXC8/bWV0YS4qPyk+L2dpbSwgXCJcIiksIEEgPSBiLmRlZmF1bHQoQSwgeCwgUiksIEE7XG4gICAgICB9XG4gICAgICBpLmdldFBhc3RlSHRtbCA9IEQ7XG4gICAgICBmdW5jdGlvbiBUKG0pIHtcbiAgICAgICAgdmFyIHgsIFIgPSBbXSwgdyA9IFMobSk7XG4gICAgICAgIGlmICh3KVxuICAgICAgICAgIHJldHVybiBSO1xuICAgICAgICB2YXIgQSA9ICh4ID0gbS5jbGlwYm9hcmREYXRhKSA9PT0gbnVsbCB8fCB4ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB4Lml0ZW1zO1xuICAgICAgICByZXR1cm4gQSAmJiAoMCwgYy5kZWZhdWx0KSh2KS5jYWxsKHYsIEEsIGZ1bmN0aW9uKEUsIEMpIHtcbiAgICAgICAgICB2YXIgTSA9IEMudHlwZTtcbiAgICAgICAgICAvaW1hZ2UvaS50ZXN0KE0pICYmIFIucHVzaChDLmdldEFzRmlsZSgpKTtcbiAgICAgICAgfSksIFI7XG4gICAgICB9XG4gICAgICBpLmdldFBhc3RlSW1ncyA9IFQ7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgby5leHBvcnRzID0gdCgyOTQpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIG8uZXhwb3J0cyA9IHQoMzEwKTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDQpKSwgcCA9IHModCg0NikpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIHYgPSB0KDIpLCBiID0gdi5fX2ltcG9ydERlZmF1bHQodCgzKSksIFMgPSB0KDcpLCBEID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZ1bmN0aW9uIFQobSwgeCkge1xuICAgICAgICAgIHZhciBSID0gdGhpcztcbiAgICAgICAgICB0aGlzLmhpZGVUaW1lb3V0SWQgPSAwLCB0aGlzLm1lbnUgPSBtLCB0aGlzLmNvbmYgPSB4O1xuICAgICAgICAgIHZhciB3ID0gYi5kZWZhdWx0KCc8ZGl2IGNsYXNzPVwidy1lLWRyb3BsaXN0XCI+PC9kaXY+JyksIEEgPSBiLmRlZmF1bHQoXCI8cD5cIiArIHgudGl0bGUgKyBcIjwvcD5cIik7XG4gICAgICAgICAgQS5hZGRDbGFzcyhcInctZS1kcC10aXRsZVwiKSwgdy5hcHBlbmQoQSk7XG4gICAgICAgICAgdmFyIEUgPSB4Lmxpc3QgfHwgW10sIEMgPSB4LnR5cGUgfHwgXCJsaXN0XCIsIE0gPSB4LmNsaWNrSGFuZGxlciB8fCBTLkVNUFRZX0ZOLCB5ID0gYi5kZWZhdWx0KCc8dWwgY2xhc3M9XCInICsgKEMgPT09IFwibGlzdFwiID8gXCJ3LWUtbGlzdFwiIDogXCJ3LWUtYmxvY2tcIikgKyAnXCI+PC91bD4nKTtcbiAgICAgICAgICAoMCwgYy5kZWZhdWx0KShFKS5jYWxsKEUsIGZ1bmN0aW9uKEIpIHtcbiAgICAgICAgICAgIHZhciAkID0gQi4kZWxlbSwgRiA9IEIudmFsdWUsIGsgPSBiLmRlZmF1bHQoJzxsaSBjbGFzcz1cInctZS1pdGVtXCI+PC9saT4nKTtcbiAgICAgICAgICAgICQgJiYgKGsuYXBwZW5kKCQpLCB5LmFwcGVuZChrKSwgay5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICAgICAgTShGKSwgaC5zdG9wUHJvcGFnYXRpb24oKSwgUi5oaWRlVGltZW91dElkID0gKDAsIHAuZGVmYXVsdCkoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgUi5oaWRlKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0pLCB3LmFwcGVuZCh5KSwgdy5vbihcIm1vdXNlbGVhdmVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBSLmhpZGVUaW1lb3V0SWQgPSAoMCwgcC5kZWZhdWx0KShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgUi5oaWRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSwgdGhpcy4kY29udGFpbmVyID0gdywgdGhpcy5yZW5kZXJlZCA9ICExLCB0aGlzLl9zaG93ID0gITE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFQucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aGlzLmhpZGVUaW1lb3V0SWQgJiYgY2xlYXJUaW1lb3V0KHRoaXMuaGlkZVRpbWVvdXRJZCk7XG4gICAgICAgICAgdmFyIG0gPSB0aGlzLm1lbnUsIHggPSBtLiRlbGVtLCBSID0gdGhpcy4kY29udGFpbmVyO1xuICAgICAgICAgIGlmICghdGhpcy5fc2hvdykge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVuZGVyZWQpXG4gICAgICAgICAgICAgIFIuc2hvdygpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHZhciB3ID0geC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgfHwgMCwgQSA9IHRoaXMuY29uZi53aWR0aCB8fCAxMDA7XG4gICAgICAgICAgICAgIFIuY3NzKFwibWFyZ2luLXRvcFwiLCB3ICsgXCJweFwiKS5jc3MoXCJ3aWR0aFwiLCBBICsgXCJweFwiKSwgeC5hcHBlbmQoUiksIHRoaXMucmVuZGVyZWQgPSAhMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Nob3cgPSAhMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIFQucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgbSA9IHRoaXMuJGNvbnRhaW5lcjtcbiAgICAgICAgICAhdGhpcy5fc2hvdyB8fCAobS5oaWRlKCksIHRoaXMuX3Nob3cgPSAhMSk7XG4gICAgICAgIH0sICgwLCBkLmRlZmF1bHQpKFQucHJvdG90eXBlLCBcImlzU2hvd1wiLCB7IGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3c7XG4gICAgICAgIH0sIGVudW1lcmFibGU6ICExLCBjb25maWd1cmFibGU6ICEwIH0pLCBUO1xuICAgICAgfSgpO1xuICAgICAgaS5kZWZhdWx0ID0gRDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgZnVuY3Rpb24gYyhwKSB7XG4gICAgICAgIHZhciB2ID0gcC5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uQ29udGFpbmVyRWxlbSgpO1xuICAgICAgICByZXR1cm4gdiAhPSBudWxsICYmIHYubGVuZ3RoID8gdi5nZXROb2RlTmFtZSgpID09PSBcIkFcIiA6ICExO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gYztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoOTIpKSwgYyA9IHModCgxKSksIHAgPSBzKHQoNCkpO1xuICAgICAgKDAsIGMuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIHYgPSB0KDYpO1xuICAgICAgZnVuY3Rpb24gYihTLCBEKSB7XG4gICAgICAgIHZhciBUID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIGlmIChULm9wZW4oXCJQT1NUXCIsIFMpLCBULnRpbWVvdXQgPSBELnRpbWVvdXQgfHwgMTAgKiAxZTMsIFQub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIndhbmdFZGl0b3IgLSBcXHU4QkY3XFx1NkM0MlxcdThEODVcXHU2NUY2XCIpLCBELm9uVGltZW91dCAmJiBELm9uVGltZW91dChUKTtcbiAgICAgICAgfSwgVC51cGxvYWQgJiYgKFQudXBsb2FkLm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbih4KSB7XG4gICAgICAgICAgdmFyIFIgPSB4LmxvYWRlZCAvIHgudG90YWw7XG4gICAgICAgICAgRC5vblByb2dyZXNzICYmIEQub25Qcm9ncmVzcyhSLCB4KTtcbiAgICAgICAgfSksIEQuaGVhZGVycyAmJiAoMCwgcC5kZWZhdWx0KSh2KS5jYWxsKHYsIEQuaGVhZGVycywgZnVuY3Rpb24oeCwgUikge1xuICAgICAgICAgIFQuc2V0UmVxdWVzdEhlYWRlcih4LCBSKTtcbiAgICAgICAgfSksIFQud2l0aENyZWRlbnRpYWxzID0gISFELndpdGhDcmVkZW50aWFscywgRC5iZWZvcmVTZW5kKSB7XG4gICAgICAgICAgdmFyIG0gPSBELmJlZm9yZVNlbmQoVCk7XG4gICAgICAgICAgaWYgKG0gJiYgKDAsIGQuZGVmYXVsdCkobSkgPT09IFwib2JqZWN0XCIgJiYgbS5wcmV2ZW50KVxuICAgICAgICAgICAgcmV0dXJuIG0ubXNnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBULm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChULnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIHZhciB4ID0gVC5zdGF0dXM7XG4gICAgICAgICAgICBpZiAoISh4IDwgMjAwKSAmJiAhKHggPj0gMzAwICYmIHggPCA0MDApKSB7XG4gICAgICAgICAgICAgIGlmICh4ID49IDQwMCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJ3YW5nRWRpdG9yIC0gWEhSIFxcdTYyQTVcXHU5NTE5XFx1RkYwQ1xcdTcyQjZcXHU2MDAxXFx1NzgwMSBcIiArIHgpLCBELm9uRXJyb3IgJiYgRC5vbkVycm9yKFQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgUiA9IFQucmVzcG9uc2VUZXh0LCB3O1xuICAgICAgICAgICAgICBpZiAoKDAsIGQuZGVmYXVsdCkoUikgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHcgPSBKU09OLnBhcnNlKFIpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIndhbmdFZGl0b3IgLSBcXHU4RkQ0XFx1NTZERVxcdTdFRDNcXHU2NzlDXFx1NEUwRFxcdTY2MkYgSlNPTiBcXHU2ODNDXFx1NUYwRlwiLCBSKSwgRC5vbkZhaWwgJiYgRC5vbkZhaWwoVCwgUik7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdyA9IFI7XG4gICAgICAgICAgICAgIEQub25TdWNjZXNzKFQsIHcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgVC5zZW5kKEQuZm9ybURhdGEgfHwgbnVsbCksIFQ7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSBiO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoMzQyKSksIHAgPSBzKHQoNDYpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciB2ID0gdCgyKSwgYiA9IHYuX19pbXBvcnREZWZhdWx0KHQoMykpLCBTID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZ1bmN0aW9uIEQoVCkge1xuICAgICAgICAgIHRoaXMuZWRpdG9yID0gVCwgdGhpcy4kdGV4dENvbnRhaW5lciA9IFQuJHRleHRDb250YWluZXJFbGVtLCB0aGlzLiRiYXIgPSBiLmRlZmF1bHQoJzxkaXYgY2xhc3M9XCJ3LWUtcHJvZ3Jlc3NcIj48L2Rpdj4nKSwgdGhpcy5pc1Nob3cgPSAhMSwgdGhpcy50aW1lID0gMCwgdGhpcy50aW1lb3V0SWQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBELnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oVCkge1xuICAgICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgICBpZiAoIXRoaXMuaXNTaG93KSB7XG4gICAgICAgICAgICB0aGlzLmlzU2hvdyA9ICEwO1xuICAgICAgICAgICAgdmFyIHggPSB0aGlzLiRiYXIsIFIgPSB0aGlzLiR0ZXh0Q29udGFpbmVyO1xuICAgICAgICAgICAgUi5hcHBlbmQoeCksICgwLCBjLmRlZmF1bHQpKCkgLSB0aGlzLnRpbWUgPiAxMDAgJiYgVCA8PSAxICYmICh4LmNzcyhcIndpZHRoXCIsIFQgKiAxMDAgKyBcIiVcIiksIHRoaXMudGltZSA9ICgwLCBjLmRlZmF1bHQpKCkpO1xuICAgICAgICAgICAgdmFyIHcgPSB0aGlzLnRpbWVvdXRJZDtcbiAgICAgICAgICAgIHcgJiYgY2xlYXJUaW1lb3V0KHcpLCB0aGlzLnRpbWVvdXRJZCA9ICgwLCBwLmRlZmF1bHQpKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBtLmhpZGUoKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBELnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIFQgPSB0aGlzLiRiYXI7XG4gICAgICAgICAgVC5yZW1vdmUoKSwgdGhpcy5pc1Nob3cgPSAhMSwgdGhpcy50aW1lID0gMCwgdGhpcy50aW1lb3V0SWQgPSAwO1xuICAgICAgICB9LCBEO1xuICAgICAgfSgpO1xuICAgICAgaS5kZWZhdWx0ID0gUztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pLCBpLkxpc3RUeXBlID0gdm9pZCAwO1xuICAgICAgdmFyIGMgPSB0KDIpLCBwID0gYy5fX2ltcG9ydERlZmF1bHQodCgzKSksIHYgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDI0KSksIGIgPSB0KDQ3KSwgUyA9IGMuX19pbXBvcnRTdGFyKHQoMzcxKSksIEQ7XG4gICAgICAoZnVuY3Rpb24obSkge1xuICAgICAgICBtLk9yZGVyZWRMaXN0ID0gXCJPTFwiLCBtLlVub3JkZXJlZExpc3QgPSBcIlVMXCI7XG4gICAgICB9KShEID0gaS5MaXN0VHlwZSB8fCAoaS5MaXN0VHlwZSA9IHt9KSk7XG4gICAgICB2YXIgVCA9IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgYy5fX2V4dGVuZHMoeCwgbSk7XG4gICAgICAgIGZ1bmN0aW9uIHgoUikge1xuICAgICAgICAgIHZhciB3ID0gdGhpcywgQSA9IHAuZGVmYXVsdChgPGRpdiBjbGFzcz1cInctZS1tZW51XCIgZGF0YS10aXRsZT1cIlxcdTVFOEZcXHU1MjE3XCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ3LWUtaWNvbi1saXN0MlwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PmApLCBFID0geyB3aWR0aDogMTMwLCB0aXRsZTogXCJcXHU1RThGXFx1NTIxN1wiLCB0eXBlOiBcImxpc3RcIiwgbGlzdDogW3sgJGVsZW06IHAuZGVmYXVsdChgXG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInctZS1pY29uLWxpc3QyIHctZS1kcm9wLWxpc3QtaXRlbVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgICsgUi5pMThuZXh0LnQoXCJtZW51cy5kcm9wTGlzdE1lbnUubGlzdC5cXHU2NUUwXFx1NUU4RlxcdTUyMTdcXHU4ODY4XCIpICsgYFxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+YCksIHZhbHVlOiBELlVub3JkZXJlZExpc3QgfSwgeyAkZWxlbTogcC5kZWZhdWx0KGA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInctZS1pY29uLWxpc3QtbnVtYmVyZWQgdy1lLWRyb3AtbGlzdC1pdGVtXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgKyBSLmkxOG5leHQudChcIm1lbnVzLmRyb3BMaXN0TWVudS5saXN0LlxcdTY3MDlcXHU1RThGXFx1NTIxN1xcdTg4NjhcIikgKyBgXG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5gKSwgdmFsdWU6IEQuT3JkZXJlZExpc3QgfV0sIGNsaWNrSGFuZGxlcjogZnVuY3Rpb24oTSkge1xuICAgICAgICAgICAgdy5jb21tYW5kKE0pO1xuICAgICAgICAgIH0gfTtcbiAgICAgICAgICByZXR1cm4gdyA9IG0uY2FsbCh0aGlzLCBBLCBSLCBFKSB8fCB0aGlzLCB3O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4LnByb3RvdHlwZS5jb21tYW5kID0gZnVuY3Rpb24oUikge1xuICAgICAgICAgIHZhciB3ID0gdGhpcy5lZGl0b3IsIEEgPSB3LnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25Db250YWluZXJFbGVtKCk7XG4gICAgICAgICAgQSAhPT0gdm9pZCAwICYmICh0aGlzLmhhbmRsZVNlbGVjdGlvblJhbmdlTm9kZXMoUiksIHRoaXMudHJ5Q2hhbmdlQWN0aXZlKCkpO1xuICAgICAgICB9LCB4LnByb3RvdHlwZS52YWxpZGF0b3IgPSBmdW5jdGlvbihSLCB3LCBBKSB7XG4gICAgICAgICAgcmV0dXJuICEoIVIubGVuZ3RoIHx8ICF3Lmxlbmd0aCB8fCBBLmVxdWFsKFIpIHx8IEEuZXF1YWwodykpO1xuICAgICAgICB9LCB4LnByb3RvdHlwZS5oYW5kbGVTZWxlY3Rpb25SYW5nZU5vZGVzID0gZnVuY3Rpb24oUikge1xuICAgICAgICAgIHZhciB3ID0gdGhpcy5lZGl0b3IsIEEgPSB3LnNlbGVjdGlvbiwgRSA9IFIudG9Mb3dlckNhc2UoKSwgQyA9IEEuZ2V0U2VsZWN0aW9uQ29udGFpbmVyRWxlbSgpLCBNID0gQS5nZXRTZWxlY3Rpb25TdGFydEVsZW0oKS5nZXROb2RlVG9wKHcpLCB5ID0gQS5nZXRTZWxlY3Rpb25FbmRFbGVtKCkuZ2V0Tm9kZVRvcCh3KTtcbiAgICAgICAgICBpZiAoISF0aGlzLnZhbGlkYXRvcihNLCB5LCB3LiR0ZXh0RWxlbSkpIHtcbiAgICAgICAgICAgIHZhciBCID0gQS5nZXRSYW5nZSgpLCAkID0gQiA9PSBudWxsID8gdm9pZCAwIDogQi5jb2xsYXBzZWQ7XG4gICAgICAgICAgICB3LiR0ZXh0RWxlbS5lcXVhbChDKSB8fCAoQyA9IEMuZ2V0Tm9kZVRvcCh3KSk7XG4gICAgICAgICAgICB2YXIgRiA9IHsgZWRpdG9yOiB3LCBsaXN0VHlwZTogUiwgbGlzdFRhcmdldDogRSwgJHNlbGVjdGlvbkVsZW06IEMsICRzdGFydEVsZW06IE0sICRlbmRFbGVtOiB5IH0sIGs7XG4gICAgICAgICAgICB0aGlzLmlzT3JkZXJFbGVtKEMpID8gayA9IFMuQ2xhc3NUeXBlLldyYXAgOiB0aGlzLmlzT3JkZXJFbGVtKE0pICYmIHRoaXMuaXNPcmRlckVsZW0oeSkgPyBrID0gUy5DbGFzc1R5cGUuSm9pbiA6IHRoaXMuaXNPcmRlckVsZW0oTSkgPyBrID0gUy5DbGFzc1R5cGUuU3RhcnRKb2luIDogdGhpcy5pc09yZGVyRWxlbSh5KSA/IGsgPSBTLkNsYXNzVHlwZS5FbmRKb2luIDogayA9IFMuQ2xhc3NUeXBlLk90aGVyO1xuICAgICAgICAgICAgdmFyIGggPSBuZXcgUy5kZWZhdWx0KFMuY3JlYXRlTGlzdEhhbmRsZShrLCBGLCBCKSk7XG4gICAgICAgICAgICBiLnVwZGF0ZVJhbmdlKHcsIGguZ2V0U2VsZWN0aW9uUmFuZ2VFbGVtKCksICEhJCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB4LnByb3RvdHlwZS5pc09yZGVyRWxlbSA9IGZ1bmN0aW9uKFIpIHtcbiAgICAgICAgICB2YXIgdyA9IFIuZ2V0Tm9kZU5hbWUoKTtcbiAgICAgICAgICByZXR1cm4gdyA9PT0gRC5PcmRlcmVkTGlzdCB8fCB3ID09PSBELlVub3JkZXJlZExpc3Q7XG4gICAgICAgIH0sIHgucHJvdG90eXBlLnRyeUNoYW5nZUFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB9LCB4O1xuICAgICAgfSh2LmRlZmF1bHQpO1xuICAgICAgaS5kZWZhdWx0ID0gVDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICBvLmV4cG9ydHMgPSB0KDM5NSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIGZ1bmN0aW9uIGMocCkge1xuICAgICAgICB2YXIgdiA9IHAuc2VsZWN0aW9uLmdldFNlbGVjdGlvbkNvbnRhaW5lckVsZW0oKTtcbiAgICAgICAgcmV0dXJuIHYgIT0gbnVsbCAmJiB2Lmxlbmd0aCA/ICEhKHYuZ2V0Tm9kZU5hbWUoKSA9PSBcIkNPREVcIiB8fCB2LmdldE5vZGVOYW1lKCkgPT0gXCJQUkVcIiB8fCB2LnBhcmVudCgpLmdldE5vZGVOYW1lKCkgPT0gXCJDT0RFXCIgfHwgdi5wYXJlbnQoKS5nZXROb2RlTmFtZSgpID09IFwiUFJFXCIgfHwgL2hsanMvLnRlc3Qodi5wYXJlbnQoKS5hdHRyKFwiY2xhc3NcIikpKSA6ICExO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gYztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDMxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSksIGkudG9kbyA9IHZvaWQgMDtcbiAgICAgIHZhciBwID0gdCgyKSwgdiA9IHAuX19pbXBvcnREZWZhdWx0KHQoMykpLCBiID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZ1bmN0aW9uIEQoVCkge1xuICAgICAgICAgIHZhciBtO1xuICAgICAgICAgIHRoaXMudGVtcGxhdGUgPSAnPHVsIGNsYXNzPVwidy1lLXRvZG9cIj48bGk+PHNwYW4gY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCI+PC9zcGFuPjwvbGk+PC91bD4nLCB0aGlzLmNoZWNrZWQgPSAhMSwgdGhpcy4kdG9kbyA9IHYuZGVmYXVsdCh0aGlzLnRlbXBsYXRlKSwgdGhpcy4kY2hpbGQgPSAobSA9IFQgPT0gbnVsbCA/IHZvaWQgMCA6IFQuY2hpbGROb2RlcygpKSA9PT0gbnVsbCB8fCBtID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtLmNsb25lKCEwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBUID0gdGhpcy4kY2hpbGQsIG0gPSB0aGlzLmdldElucHV0Q29udGFpbmVyKCk7XG4gICAgICAgICAgVCAmJiBULmluc2VydEFmdGVyKG0pO1xuICAgICAgICB9LCBELnByb3RvdHlwZS5nZXRJbnB1dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBUID0gdGhpcy4kdG9kbywgbSA9ICgwLCBjLmRlZmF1bHQpKFQpLmNhbGwoVCwgXCJpbnB1dFwiKTtcbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfSwgRC5wcm90b3R5cGUuZ2V0SW5wdXRDb250YWluZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgVCA9IHRoaXMuZ2V0SW5wdXQoKS5wYXJlbnQoKTtcbiAgICAgICAgICByZXR1cm4gVDtcbiAgICAgICAgfSwgRC5wcm90b3R5cGUuZ2V0VG9kbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLiR0b2RvO1xuICAgICAgICB9LCBEO1xuICAgICAgfSgpO1xuICAgICAgaS50b2RvID0gYjtcbiAgICAgIGZ1bmN0aW9uIFMoRCkge1xuICAgICAgICB2YXIgVCA9IG5ldyBiKEQpO1xuICAgICAgICByZXR1cm4gVC5pbml0KCksIFQ7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSBTO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMik7XG4gICAgICB0KDE0NiksIHQoMTQ4KSwgdCgxNTIpLCB0KDE1NCksIHQoMTU2KSwgdCgxNTgpLCB0KDE2MCk7XG4gICAgICB2YXIgcCA9IGMuX19pbXBvcnREZWZhdWx0KHQoODcpKTtcbiAgICAgIGMuX19leHBvcnRTdGFyKHQoNDQyKSwgaSk7XG4gICAgICB0cnkge1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlxcdThCRjdcXHU1NzI4XFx1NkQ0RlxcdTg5QzhcXHU1NjY4XFx1NzNBRlxcdTU4ODNcXHU0RTBCXFx1OEZEMFxcdTg4NENcIik7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSBwLmRlZmF1bHQ7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDE0Myk7XG4gICAgICBvLmV4cG9ydHMgPSBzO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHQoMTQ0KTtcbiAgICAgIHZhciBzID0gdCg5KSwgZCA9IHMuT2JqZWN0LCBjID0gby5leHBvcnRzID0gZnVuY3Rpb24odiwgYiwgUykge1xuICAgICAgICByZXR1cm4gZC5kZWZpbmVQcm9wZXJ0eSh2LCBiLCBTKTtcbiAgICAgIH07XG4gICAgICBkLmRlZmluZVByb3BlcnR5LnNoYW0gJiYgKGMuc2hhbSA9ICEwKTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNSksIGQgPSB0KDE0KSwgYyA9IHQoMTgpO1xuICAgICAgcyh7IHRhcmdldDogXCJPYmplY3RcIiwgc3RhdDogITAsIGZvcmNlZDogIWQsIHNoYW06ICFkIH0sIHsgZGVmaW5lUHJvcGVydHk6IGMuZiB9KTtcbiAgICB9LCBmdW5jdGlvbihvLCBpKSB7XG4gICAgICB2YXIgdDtcbiAgICAgIHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9KCk7XG4gICAgICB0cnkge1xuICAgICAgICB0ID0gdCB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgICh0eXBlb2Ygd2luZG93ID4gXCJ1XCIgPyBcInVuZGVmaW5lZFwiIDogenQod2luZG93KSkgPT09IFwib2JqZWN0XCIgJiYgKHQgPSB3aW5kb3cpO1xuICAgICAgfVxuICAgICAgby5leHBvcnRzID0gdDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjApLCBkID0gdCgxNDcpO1xuICAgICAgZCA9IGQuX19lc01vZHVsZSA/IGQuZGVmYXVsdCA6IGQsIHR5cGVvZiBkID09IFwic3RyaW5nXCIgJiYgKGQgPSBbW28uaSwgZCwgXCJcIl1dKTtcbiAgICAgIHZhciBjID0ge307XG4gICAgICBjLmluc2VydCA9IFwiaGVhZFwiLCBjLnNpbmdsZXRvbiA9ICExLCBzKGQsIGMpLCBvLmV4cG9ydHMgPSBkLmxvY2FscyB8fCB7fTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjEpO1xuICAgICAgaSA9IHMoITEpLCBpLnB1c2goW28uaSwgYC53LWUtdG9vbGJhcixcbi53LWUtdGV4dC1jb250YWluZXIsXG4udy1lLW1lbnUtcGFuZWwge1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIC8qXFx1ODg2OFxcdTYwQzVcXHU4M0RDXFx1NTM1NVxcdTY4MzdcXHU1RjBGKi9cbiAgLypcXHU1MjA2XFx1NTI3MlxcdTdFQkZcXHU2ODM3XFx1NUYwRiovXG59XG4udy1lLXRvb2xiYXIgaDEsXG4udy1lLXRleHQtY29udGFpbmVyIGgxLFxuLnctZS1tZW51LXBhbmVsIGgxIHtcbiAgZm9udC1zaXplOiAzMnB4ICFpbXBvcnRhbnQ7XG59XG4udy1lLXRvb2xiYXIgaDIsXG4udy1lLXRleHQtY29udGFpbmVyIGgyLFxuLnctZS1tZW51LXBhbmVsIGgyIHtcbiAgZm9udC1zaXplOiAyNHB4ICFpbXBvcnRhbnQ7XG59XG4udy1lLXRvb2xiYXIgaDMsXG4udy1lLXRleHQtY29udGFpbmVyIGgzLFxuLnctZS1tZW51LXBhbmVsIGgzIHtcbiAgZm9udC1zaXplOiAxOC43MnB4ICFpbXBvcnRhbnQ7XG59XG4udy1lLXRvb2xiYXIgaDQsXG4udy1lLXRleHQtY29udGFpbmVyIGg0LFxuLnctZS1tZW51LXBhbmVsIGg0IHtcbiAgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7XG59XG4udy1lLXRvb2xiYXIgaDUsXG4udy1lLXRleHQtY29udGFpbmVyIGg1LFxuLnctZS1tZW51LXBhbmVsIGg1IHtcbiAgZm9udC1zaXplOiAxMy4yOHB4ICFpbXBvcnRhbnQ7XG59XG4udy1lLXRvb2xiYXIgcCxcbi53LWUtdGV4dC1jb250YWluZXIgcCxcbi53LWUtbWVudS1wYW5lbCBwIHtcbiAgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7XG59XG4udy1lLXRvb2xiYXIgLmVsZUltZyxcbi53LWUtdGV4dC1jb250YWluZXIgLmVsZUltZyxcbi53LWUtbWVudS1wYW5lbCAuZWxlSW1nIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgcGFkZGluZzogMCAzcHg7XG59XG4udy1lLXRvb2xiYXIgKixcbi53LWUtdGV4dC1jb250YWluZXIgKixcbi53LWUtbWVudS1wYW5lbCAqIHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuLnctZS10b29sYmFyIGhyLFxuLnctZS10ZXh0LWNvbnRhaW5lciBocixcbi53LWUtbWVudS1wYW5lbCBociB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogMHB4O1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci10b3A6IDNweCBzb2xpZCAjY2NjO1xuICBtYXJnaW46IDIwcHggMDtcbn1cbi53LWUtY2xlYXItZml4OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgZGlzcGxheTogdGFibGU7XG4gIGNsZWFyOiBib3RoO1xufVxuLnctZS1kcm9wLWxpc3QtaXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAxcHg7XG4gIHBhZGRpbmctcmlnaHQ6IDdweDtcbiAgY29sb3I6ICMzMzMgIWltcG9ydGFudDtcbn1cbi53LWUtZHJvcC1saXN0LXRsIHtcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuYCwgXCJcIl0pLCBvLmV4cG9ydHMgPSBpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyMCksIGQgPSB0KDE0OSk7XG4gICAgICBkID0gZC5fX2VzTW9kdWxlID8gZC5kZWZhdWx0IDogZCwgdHlwZW9mIGQgPT0gXCJzdHJpbmdcIiAmJiAoZCA9IFtbby5pLCBkLCBcIlwiXV0pO1xuICAgICAgdmFyIGMgPSB7fTtcbiAgICAgIGMuaW5zZXJ0ID0gXCJoZWFkXCIsIGMuc2luZ2xldG9uID0gITEsIHMoZCwgYyksIG8uZXhwb3J0cyA9IGQubG9jYWxzIHx8IHt9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyMSksIGQgPSB0KDE1MCksIGMgPSB0KDE1MSk7XG4gICAgICBpID0gcyghMSk7XG4gICAgICB2YXIgcCA9IGQoYyk7XG4gICAgICBpLnB1c2goW28uaSwgYEBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ3ctZS1pY29uJztcbiAgc3JjOiB1cmwoYCArIHAgKyBgKSBmb3JtYXQoJ3RydWV0eXBlJyk7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cbltjbGFzc149XCJ3LWUtaWNvbi1cIl0sXG5bY2xhc3MqPVwiIHctZS1pY29uLVwiXSB7XG4gIC8qIHVzZSAhaW1wb3J0YW50IHRvIHByZXZlbnQgaXNzdWVzIHdpdGggYnJvd3NlciBleHRlbnNpb25zIHRoYXQgY2hhbmdlIGZvbnRzICovXG4gIGZvbnQtZmFtaWx5OiAndy1lLWljb24nICFpbXBvcnRhbnQ7XG4gIHNwZWFrOiBub25lO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIC8qIEJldHRlciBGb250IFJlbmRlcmluZyA9PT09PT09PT09PSAqL1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cbi53LWUtaWNvbi1jbG9zZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxmMDBkXCI7XG59XG4udy1lLWljb24tdXBsb2FkMjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxlOWM2XCI7XG59XG4udy1lLWljb24tdHJhc2gtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxmMDE0XCI7XG59XG4udy1lLWljb24taGVhZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxcXGYxZGNcIjtcbn1cbi53LWUtaWNvbi1wZW5jaWwyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxcXGU5MDZcIjtcbn1cbi53LWUtaWNvbi1wYWludC1icnVzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxmMWZjXCI7XG59XG4udy1lLWljb24taW1hZ2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXFxcZTkwZFwiO1xufVxuLnctZS1pY29uLXBsYXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXFxcZTkxMlwiO1xufVxuLnctZS1pY29uLWxvY2F0aW9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxcXGU5NDdcIjtcbn1cbi53LWUtaWNvbi11bmRvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxcXGU5NjVcIjtcbn1cbi53LWUtaWNvbi1yZWRvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxcXGU5NjZcIjtcbn1cbi53LWUtaWNvbi1xdW90ZXMtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxlOTc3XCI7XG59XG4udy1lLWljb24tbGlzdC1udW1iZXJlZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxlOWI5XCI7XG59XG4udy1lLWljb24tbGlzdDI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXFxcZTliYlwiO1xufVxuLnctZS1pY29uLWxpbms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXFxcZTljYlwiO1xufVxuLnctZS1pY29uLWhhcHB5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxcXGU5ZGZcIjtcbn1cbi53LWUtaWNvbi1ib2xkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxcXGVhNjJcIjtcbn1cbi53LWUtaWNvbi11bmRlcmxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXFxcZWE2M1wiO1xufVxuLnctZS1pY29uLWl0YWxpYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxlYTY0XCI7XG59XG4udy1lLWljb24tc3RyaWtldGhyb3VnaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxlYTY1XCI7XG59XG4udy1lLWljb24tdGFibGUyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxcXGVhNzFcIjtcbn1cbi53LWUtaWNvbi1wYXJhZ3JhcGgtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxlYTc3XCI7XG59XG4udy1lLWljb24tcGFyYWdyYXBoLWNlbnRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxlYTc4XCI7XG59XG4udy1lLWljb24tcGFyYWdyYXBoLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxcXGVhNzlcIjtcbn1cbi53LWUtaWNvbi1wYXJhZ3JhcGgtanVzdGlmeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxlYTdhXCI7XG59XG4udy1lLWljb24tdGVybWluYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXFxcZjEyMFwiO1xufVxuLnctZS1pY29uLXBhZ2UtYnJlYWs6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXFxcZWE2OFwiO1xufVxuLnctZS1pY29uLWNhbmNlbC1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXFxcZWEwZFwiO1xufVxuLnctZS1pY29uLWZvbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXFxcZWE1Y1wiO1xufVxuLnctZS1pY29uLXRleHQtaGVpZ2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXFxcZWE1ZlwiO1xufVxuLnctZS1pY29uLXBhaW50LWZvcm1hdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxlOTBjXCI7XG59XG4udy1lLWljb24taW5kZW50LWluY3JlYXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxcXGVhN2JcIjtcbn1cbi53LWUtaWNvbi1pbmRlbnQtZGVjcmVhc2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXFxcZWE3Y1wiO1xufVxuLnctZS1pY29uLXJvdy1oZWlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXFxcZTliZVwiO1xufVxuLnctZS1pY29uLWZ1bGxzY3JlZW5fZXhpdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxlOTAwXCI7XG59XG4udy1lLWljb24tZnVsbHNjcmVlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxlOTAxXCI7XG59XG4udy1lLWljb24tc3BsaXQtbGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxlYTBiXCI7XG59XG4udy1lLWljb24tY2hlY2tib3gtY2hlY2tlZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcXFxlYTUyXCI7XG59XG5gLCBcIlwiXSksIG8uZXhwb3J0cyA9IGk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24ocywgZCkge1xuICAgICAgICByZXR1cm4gZCB8fCAoZCA9IHt9KSwgcyA9IHMgJiYgcy5fX2VzTW9kdWxlID8gcy5kZWZhdWx0IDogcywgdHlwZW9mIHMgIT0gXCJzdHJpbmdcIiA/IHMgOiAoL15bJ1wiXS4qWydcIl0kLy50ZXN0KHMpICYmIChzID0gcy5zbGljZSgxLCAtMSkpLCBkLmhhc2ggJiYgKHMgKz0gZC5oYXNoKSwgL1tcIicoKSBcXHRcXG5dLy50ZXN0KHMpIHx8IGQubmVlZFF1b3RlcyA/ICdcIicuY29uY2F0KHMucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpLCAnXCInKSA6IHMpO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB0LnIoaSksIGkuZGVmYXVsdCA9IFwiZGF0YTpmb250L3dvZmY7YmFzZTY0LGQwOUdSZ0FCQUFBQUFCc2tBQXNBQUFBQUd0Z0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUFV5OHlBQUFCQ0FBQUFHQUFBQUJnRHhJUEZXTnRZWEFBQUFGb0FBQUJIQUFBQVJ6Mm1mQWdaMkZ6Y0FBQUFvUUFBQUFJQUFBQUNBQUFBQkJuYkhsbUFBQUNqQUFBRlh3QUFCVjhJSDcrbUdobFlXUUFBQmdJQUFBQU5nQUFBRFliNmd1bWFHaGxZUUFBR0VBQUFBQWtBQUFBSkFrakJXbG9iWFI0QUFBWVpBQUFBS1FBQUFDa21ZY0VibXh2WTJFQUFCa0lBQUFBVkFBQUFGUmVBbUtZYldGNGNBQUFHVndBQUFBZ0FBQUFJQUEwQUxadVlXMWxBQUFaZkFBQUFZWUFBQUdHbVVvSiszQnZjM1FBQUJzRUFBQUFJQUFBQUNBQUF3QUFBQU1EN3dHUUFBVUFBQUtaQXN3QUFBQ1BBcGtDekFBQUFlc0FNd0VKQUFBQUFBQUFBQUFBQUFBQUFBQUFBUkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBOGZ3RHdQL0FBRUFEd0FCQUFBQUFBUUFBQUFBQUFBQUFBQUFBSUFBQUFBQUFBd0FBQUFNQUFBQWNBQUVBQXdBQUFCd0FBd0FCQUFBQUhBQUVBUUFBQUFBOEFDQUFCQUFjQUFFQUlPa0I2UWJwRGVrUzZVZnBadWwzNmJucHUrbSs2Y2JweStuZjZndnFEZXBTNmx6cVgrcGw2bkhxZlBBTjhCVHhJUEhjOGZ6Ly9mLy9BQUFBQUFBZzZRRHBCdWtNNlJMcFIrbGw2WGZwdWVtNzZiN3B4dW5MNmQvcUMrb042bExxWE9wZjZtTHFjZXAzOEEzd0ZQRWc4ZHp4L1AvOS8vOEFBZi9qRndRWEFCYjdGdmNXd3hhbUZwWVdWUlpVRmxJV1N4WkhGalFXQ1JZSUZjUVZ1eFc1RmJjVnJCV25FQmNRRVE4R0Rrc09MQUFEQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQi8vOEFEd0FCQUFBQUFBQUFBQUFBQWdBQU56a0JBQUFBQUFFQUFBQUFBQUFBQUFBQ0FBQTNPUUVBQUFBQUFRQUFBQUFBQUFBQUFBSUFBRGM1QVFBQUFBQUVBRUVBQVFPL0EzOEFCUUFMQUJFQUZ3QUFBVE1WSVJFekF4RWhGU01WQVRVekVTRTFFVFVoRVNNMUF2L0Evc0orZmdFK3dQNENmdjdDQVQ1K0FyOStBVDc4Z2dFK2ZzQUN2c0Qrd243K0FuNyt3c0FBQUFBQUJBQkJBQUVEdndOL0FBVUFDd0FSQUJjQUFBRWhFU00xSXhNMU14RWhOUUVSSVJVakZSRVZNeFVoRVFLQkFUNSt3TUIrL3NMOXdBRSt3TUQrd2dOLy9zTEEvWDdBL3NKK0FjSUJQbjdBL3Y3QWZnRStBQUFBQUFJQUFQL0FCQUFEd0FBRUFCTUFBQUUzQVNjQkF5NEJKeE0zQVNNQkF5VUJOUUVIQVlDQUFjQkEva0NmRnpzeVk0QUJnTUQrZ01BQ2dBR0Evb0JPQVVCQUFjQkEva0QrblRJN0Z3RVJUZ0dBL29EOWdNQUJnTUQrZ0lBQUFnQUEvOEFFQUFPQUFDa0FMUUFBQVJFak5UUW1JeUVpQmgwQkZCWXpJVEkyUFFFekVTRVZJeUlHRlJFVUZqc0JNalkxRVRRbUt3RTFBU0UxSVFRQXdDWWEvVUFhSmlZYUFzQWFKb0Q5d0NBTkV4TU5nQTBURXcwZ0FVRDlRQUxBQVlBQmdFQWFKaVlhd0JvbUpocEEvd0NBRXczK3dBMFRFdzBCUUEwVFFBR0FRQUFBQkFBQUFBQUVBQU9BQUJBQUlRQXRBRFFBQUFFNEFURVJPQUV4SVRnQk1SRTRBVEVoTlNFaUJoVVJGQll6SVRJMk5SRTBKaU1IRkFZaklpWTFORFl6TWhZVElUVVRBVE0zQThEOGdBT0EvSUFhSmlZYUE0QWFKaVlhZ0Rnb0tEZzRLQ2c0UVAwQTRBRUFRT0FEUVAwQUF3QkFKaHI5QUJvbUpob0RBQm9tNENnNE9DZ29PRGo5dUlBQmdQN0F3QUFBQWdBQUFFQUVBQU5BQURnQVBBQUFBU1luTGdFbkppTWlCdzRCQndZSEJnY09BUWNHRlJRWEhnRVhGaGNXRng0QkZ4WXpNamMrQVRjMk56WTNQZ0UzTmpVMEp5NEJKeVluQVJFTkFRUFZOamc1ZGp3OVB6ODlQSFk1T0RZTEJ3Z0xBd01EQXdzSUJ3czJPRGwyUEQwL1B6MDhkams0TmdzSENBc0RBd01EQ3dnSEMvMnJBVUQrd0FNZ0NBWUdDQUlDQWdJSUJnWUlLU29xV1MwdUx5OHVMVmtxS2lrSUJnWUlBZ0lDQWdnR0JnZ3BLaXBaTFM0dkx5NHRXU29xS2YzZ0FZREF3QUFBQUFBQ0FNRC93QU5BQThBQUd3QW5BQUFCSWdjT0FRY0dGUlFYSGdFWEZqRXdOejRCTnpZMU5DY3VBU2NtQXlJbU5UUTJNeklXRlJRR0FnQkNPenBYR1JreU1uZ3lNakl5ZURJeUdSbFhPanRDVUhCd1VGQndjQVBBR1JsWE9qdENlSDE5ekVGQlFVSE1mWDE0UWpzNlZ4a1ovZ0J3VUZCd2NGQlFjQUFBQVFBQUFBQUVBQU9BQUNzQUFBRWlCdzRCQndZSEp4RWhKejRCTXpJWEhnRVhGaFVVQnc0QkJ3WUhGelkzUGdFM05qVTBKeTRCSnlZakFnQTFNakpjS1NramxnR0FrRFdMVUZCRlJta2VIZ2tKSWhnWUhsVW9JQ0F0REF3b0tJdGVYV29EZ0FvTEp4c2NJNWIrZ0pBMFBCNGVhVVpGVUNzb0tVa2dJUnBnSXlzcllqWTJPV3BkWG9zb0tBQUJBQUFBQUFRQUE0QUFLZ0FBRXhRWEhnRVhGaGMzSmljdUFTY21OVFEzUGdFM05qTXlGaGNISVJFSEppY3VBU2NtSXlJSERnRUhCZ0FNREMwZ0lDaFZIaGdZSWdrSkhoNXBSa1ZRVUlzMWtBR0FsaU1wS1Z3eU1qVnFYVjZMS0NnQmdEazJObUlyS3lOZ0dpRWdTU2tvSzFCRlJta2VIancwa0FHQWxpTWNHeWNMQ2lnb2kxNWRBQUFBQUFJQUFBQkFCQUVEQUFBbUFFMEFBQk15Rng0QkZ4WVZGQWNPQVFjR0l5SW5MZ0VuSmpVbk5EYytBVGMyTXhVaUJnY09BUWMrQVNFeUZ4NEJGeFlWRkFjT0FRY0dJeUluTGdFbkpqVW5ORGMrQVRjMk14VWlCZ2NPQVFjK0FlRXVLU2s5RVJJU0VUMHBLUzR1S1NrOUVSSUJJeU42VWxGZFFIVXRDUkFIQ0JJQ1NTNHBLVDBSRWhJUlBTa3BMaTRwS1QwUkVnRWpJM3BTVVYxQWRTMEpFQWNJRWdJQUVoRTlLU2t1TGlrcFBSRVNFaEU5S1NrdUlGMVJVbm9qSTRBd0xnZ1RDZ0lCRWhFOUtTa3VMaWtwUFJFU0VoRTlLU2t1SUYxUlVub2pJNEF3TGdnVENnSUJBQUFHQUVEL3dBUUFBOEFBQXdBSEFBc0FFUUFkQUNrQUFDVWhGU0VSSVJVaEVTRVZJU2NSSXpVak5STVZNeFVqTlRjMUl6VXpGUlVSSXpVek5TTTFNelVqTlFHQUFvRDlnQUtBL1lBQ2dQMkF3RUJBUUlEQWdJREF3SUNBZ0lDQWdBSUFnQUlBZ01EL0FNQkEvZkl5UUpJOE1rQ1M3djdBUUVCQVFFQUFCZ0FBLzhBRUFBUEFBQU1BQndBTEFCY0FJd0F2QUFBQklSVWhFU0VWSVJFaEZTRUJORFl6TWhZVkZBWWpJaVlSTkRZek1oWVZGQVlqSWlZUk5EWXpNaFlWRkFZaklpWUJnQUtBL1lBQ2dQMkFBb0Q5Z1A2QVN6VTFTMHMxTlV0TE5UVkxTelUxUzBzMU5VdExOVFZMQTRDQS93Q0Evd0NBQTBBMVMwczFOVXRML3JVMVMwczFOVXRML3JVMVMwczFOVXRMQUFVQUFBQkFCV0FEQUFBREFBY0FDd0FPQUJFQUFCTWhGU0VWSVJVaEZTRVZJUUVYTnpVbkJ3QURnUHlBQTREOGdBT0EvSUFENE1EQXdNQURBTUJBd0VEQUFVREF3RURBd0FBQUFBQURBQUFBQUFRQUE2QUFBd0FOQUJRQUFEY2hGU0VsRlNFMUV5RVZJVFVoSlFrQkl4RWpFUUFFQVB3QUJBRDhBSUFCQUFFQUFRRDlZQUVnQVNEZ2dFQkF3RUJBQVFDQWdNQUJJUDdnL3dBQkFBQUFBQUFDQUI3L3pBUGlBN1FBTXdCa0FBQUJJaVluSmljbU5EYzJQd0UrQVRNeUZoY1dGeFlVQndZUEFRWWlKeVkwUHdFMk5DY3VBU01pQmc4QkJoUVhGaFFIRGdFakF5SW1KeVluSmpRM05qOEJOaklYRmhRUEFRWVVGeDRCTXpJMlB3RTJOQ2NtTkRjMk1oY1dGeFlVQndZUEFRNEJJd0c0Q2hNSUl4SVNFaElqd0NOWk1URlpJeU1TRWhJU0kxZ1BMQThQRDFncEtSUXpIQnd6Rk1BcEtROFBDQk1LdURGWkl5TVNFaElTSTFnUExBOFBEMWdwS1JRekhCd3pGTUFwS1E4UER5c1FJeElTRWhJandDTlpNUUZFQ0Fja0xTMWVMUzBrd0NJbEpTSWtMUzFlTFMwa1Z4QVFEeXNQV0NsMEtSUVZGUlRBS1hRcER5c1FCd2oraUNVaUpDMHRYaTB0SkZjUUVBOHJEMWdwZENrVUZSVVV3Q2wwS1E4ckVBOFBKQzB0WGkwdEpNQWlKUUFBQUFBRkFBRC93QVFBQThBQUd3QTNBRk1BWHdCckFBQUZNamMrQVRjMk5UUW5MZ0VuSmlNaUJ3NEJCd1lWRkJjZUFSY1dFeklYSGdFWEZoVVVCdzRCQndZaklpY3VBU2NtTlRRM1BnRTNOaE15Tno0Qk56WTNCZ2NPQVFjR0l5SW5MZ0VuSmljV0Z4NEJGeFluTkRZek1oWVZGQVlqSWlZbE5EWXpNaFlWRkFZaklpWUNBR3BkWG9zb0tDZ29pMTVkYW1wZFhvc29LQ2dvaTE1ZGFsWk1USEVnSVNFZ2NVeE1WbFpNVEhFZ0lTRWdjVXhNVmlzcktsRW1KaU1GSEJ0V09EYy9QemM0VmhzY0JTTW1KbEVxSzlVbEd4c2xKUnNiSlFHQUpSc2JKU1ViR3lWQUtDaUxYbDFxYWwxZWl5Z29LQ2lMWGwxcWFsMWVpeWdvQTZBaElIRk1URlpXVEV4eElDRWhJSEZNVEZaV1RFeHhJQ0grQ1FZR0ZSQVFGRU02T2xZWUdSa1lWam82UXhRUUVCVUdCdmNvT0Rnb0tEZzRLQ2c0T0Nnb09EZ0FBQUVBQUFGQUJBQUNRQUFQQUFBVEZSUVdNeUV5TmowQk5DWWpJU0lHQUJNTkE4QU5FeE1OL0VBTkV3SWd3QTBURXczQURSTVRBQUFBQXdBQS84QUVBQVBBQUJzQU53QkRBQUFCSWdjT0FRY0dGUlFYSGdFWEZqTXlOejRCTnpZMU5DY3VBU2NtQXlJbkxnRW5KalUwTno0Qk56WXpNaGNlQVJjV0ZSUUhEZ0VIQmhNSEp3Y1hCeGMzRnpjbk53SUFhbDFlaXlnb0tDaUxYbDFxYWwxZWl5Z29LQ2lMWGwxcVZreE1jU0FoSVNCeFRFeFdWa3hNY1NBaElTQnhURXhLb0tCZ29LQmdvS0Jnb0tBRHdDZ29pMTVkYW1wZFhvc29LQ2dvaTE1ZGFtcGRYb3NvS1B4Z0lTQnhURXhXVmt4TWNTQWhJU0J4VEV4V1ZreE1jU0FoQXFDZ29HQ2dvR0Nnb0dDZ29BQUNBQUQvd0FRQUE4QUFEd0FWQUFBQklTSUdGUkVVRmpNaE1qWTFFVFFtQVNjM0Z3RVhBNEQ5QURWTFN6VURBRFZMUy80TDdWcVRBVE5hQThCTE5mMEFOVXRMTlFNQU5Vdjg1ZTVha2dFeVdnQUFBQUFCQUdYL3dBT2JBOEFBS1FBQUFTSW1JeUlIRGdFSEJoVVVGak11QVRVME5qY3dCd1lDQndZSEZTRVRNemNqTng0Qk16STJOdzRCQXlCRWFFWnhVMVJ0R2h0SlNBWU5aVW9RRUVzOFBGa0JQV3pHTE5jMExWVW1MbEFZSFQwRHNCQWVIV0UrUDBGTk93c21ONWx2QTMxKy9zV1BrQ01aQWdDQTlna1BOMnNKQndBQUFBQUNBQUFBQUFRQUE0QUFDUUFYQUFBbE13Y25NeEVqTnhjakpSRW5JeEV6RlNFMU14RWpCeEVEZ0lDZ29JQ0FvS0NBL3dCQXdJRCtnSURBUU1EQXdBSUF3TURBL3dDQS9VQkFRQUxBZ0FFQUFBTUF3QUFBQTBBRGdBQVdBQjhBS0FBQUFUNEJOVFFuTGdFbkppTWhFU0V5Tno0Qk56WTFOQ1lCTXpJV0ZSUUdLd0VUSXhFek1oWVZGQVlDeEJ3Z0ZCUkdMaTgxL3NBQmdEVXZMa1lVRkVUK2hHVXFQRHdwWnArZm55dytQZ0hiSWxRdk5TOHVSaFFVL0lBVUZFWXVMelZHZEFGR1N6VTFTLzZBQVFCTE5UVkxBQUFBQUFJQXdBQUFBMEFEZ0FBZkFDTUFBQUV6RVJRSERnRUhCaU1pSnk0Qkp5WTFFVE1SRkJZWEhnRXpNalkzUGdFMUFTRVZJUUxBZ0JrWlZ6bzdRa0k3T2xjWkdZQWJHQnhKS0NoSkhCZ2IvZ0FDZ1AyQUE0RCtZRHcwTlU0V0Z4Y1dUalUwUEFHZy9tQWVPQmNZR3hzWUZ6Z2UvcUNBQUFBQUFBRUFnQUFBQTRBRGdBQUxBQUFCRlNNQk14VWhOVE1CSXpVRGdJRCt3SUQrUUlBQlFJQURnRUQ5QUVCQUF3QkFBQUVBQUFBQUJBQURnQUE5QUFBQkZTTWVBUlVVQmdjT0FTTWlKaWN1QVRVekZCWXpNalkxTkNZaklUVWhMZ0VuTGdFMU5EWTNQZ0V6TWhZWEhnRVZJelFtSXlJR0ZSUVdNeklXRndRQTZ4VVdOVEFzY1Q0K2NTd3dOWUJ5VGs1eWNrNytBQUVzQWdRQk1EVTFNQ3h4UGo1eExEQTFnSEpPVG5KeVRqdHVLd0hBUUIxQklqVmlKQ0VrSkNFa1lqVTBURXcwTkV4QUFRTUJKR0kxTldJa0lTUWtJU1JpTlRSTVREUTBUQ0VmQUFBQUNnQUFBQUFFQUFPQUFBTUFCd0FMQUE4QUV3QVhBQnNBSHdBakFDY0FBQk1SSVJFQk5TRVZIUUVoTlFFVklUVWpGU0UxRVNFVklTVWhGU0VSTlNFVkFTRVZJU0UxSVJVQUJBRDlnQUVBL3dBQkFQOEFRUDhBQVFEL0FBS0FBUUQvQUFFQS9JQUJBUDhBQW9BQkFBT0EvSUFEZ1AzQXdNQkF3TUFDQU1EQXdNRC9BTURBd0FFQXdNRCt3TURBd0FBQUJRQUFBQUFFQUFPQUFBTUFCd0FMQUE4QUV3QUFFeUVWSVJVaEZTRVJJUlVoRVNFVklSRWhGU0VBQkFEOEFBS0EvWUFDZ1AyQUJBRDhBQVFBL0FBRGdJQkFnUDhBZ0FGQWdQOEFnQUFBQUFBRkFBQUFBQVFBQTRBQUF3QUhBQXNBRHdBVEFBQVRJUlVoRnlFVklSRWhGU0VESVJVaEVTRVZJUUFFQVB3QXdBS0EvWUFDZ1AyQXdBUUEvQUFFQVB3QUE0Q0FRSUQvQUlBQlFJRC9BSUFBQUFVQUFBQUFCQUFEZ0FBREFBY0FDd0FQQUJNQUFCTWhGU0VGSVJVaEVTRVZJUUVoRlNFUklSVWhBQVFBL0FBQmdBS0EvWUFDZ1AyQS9vQUVBUHdBQkFEOEFBT0FnRUNBL3dDQUFVQ0Evd0NBQUFBQUFBVUFBQUFBQkFBRGdBQURBQWNBQ3dBUEFCTUFBQk1oRlNFVklSVWhGU0VWSVJVaEZTRVZJUlVoQUFRQS9BQUVBUHdBQkFEOEFBUUEvQUFFQVB3QUE0Q0FRSUJBZ0VDQVFJQUFBQUFHQUFBQUFBUUFBNEFBQXdBSEFBc0FEd0FUQUJZQUFCTWhGU0VGSVJVaEZTRVZJUlVoRlNFRklSVWhHUUVGQUFRQS9BQUJnQUtBL1lBQ2dQMkFBb0Q5Z1A2QUJBRDhBQUVBQTRDQVFJQkFnRUNBUUlBQkFBR0F3QUFBQUFZQUFBQUFCQUFEZ0FBREFBY0FDd0FQQUJNQUZnQUFFeUVWSVFVaEZTRVZJUlVoRlNFVklRVWhGU0VCRVNVQUJBRDhBQUdBQW9EOWdBS0EvWUFDZ1AyQS9vQUVBUHdBQVFEL0FBT0FnRUNBUUlCQWdFQ0FBb0QrZ01BQUFRQS9BRDhDNWdMbUFDd0FBQ1VVRHdFR0l5SXZBUWNHSXlJdkFTWTFORDhCSnlZMU5EOEJOak15SHdFM05qTXlId0VXRlJRUEFSY1dGUUxtRUU0UUZ4Y1FxS2dRRnhZUVRoQVFxS2dRRUU0UUZoY1FxS2dRRnhjUVRoQVFxS2dRd3hZUVRoQVFxS2dRRUU0UUZoY1FxS2dRRnhjUVRoQVFxS2dRRUU0UUZ4Y1FxS2dRRndBQUFBWUFBQUFBQXlVRGJnQVVBQ2dBUEFCTkFGVUFnZ0FBQVJFVUJ3WXJBU0luSmpVUk5EYzJPd0V5RnhZVk14RVVCd1lyQVNJbkpqVVJORGMyT3dFeUZ4WVhFUlFIQmlzQklpY21OUkUwTnpZN0FUSVhGaE1SSVJFVUZ4WVhGak1oTWpjMk56WTFBU0VuSmljakJnY0ZGUlFIQmlzQkVSUUhCaU1oSWljbU5SRWpJaWNtUFFFME56WTdBVGMyTnpZN0FUSVhGaDhCTXpJWEZoVUJKUVlGQ0NRSUJRWUdCUWdrQ0FVR2tnVUZDQ1VJQlFVRkJRZ2xDQVVGa2dVRkNDVUlCUVVGQlFnbENBVUZTZjRBQkFRRkJBSUIyd0lFQkFRRS9vQUJBQnNFQnJVR0JBSDNCZ1VJTnhvYkp2NGxKaHNiTndnRkJRVUZDTEVvQ0JjV0Y3Y1hGaFlKS0xBSUJRWUNFdjYzQ0FVRkJRVUlBVWtJQlFZR0JRait0d2dGQlFVRkNBRkpDQVVHQmdVSS9yY0lCUVVGQlFnQlNRZ0ZCZ1lGL2xzQ0hmM2pEUXNLQlFVRkJRb0xEUUptUXdVQ0FnVlZKQWdHQmYzak1DSWpJU0l2QWlBRkJnZ2tDQVVGWUJVUER3OFBGV0FGQlFnQUFnQUhBRWtEdHdLdkFCb0FMZ0FBQ1FFR0l5SXZBU1kxTkQ4Qkp5WTFORDhCTmpNeUZ3RVdGUlFIQVJVVUJ3WWpJU0luSmowQk5EYzJNeUV5RnhZQlR2NzJCZ2NJQlIwR0J1SGhCZ1lkQlFnSEJnRUtCZ1lDYVFVRkNQM2JDQVVGQlFVSUFpVUlCUVVCaGY3MkJnWWNCZ2dIQnVEaEJnY0hCaDBGQmY3MUJRZ0hCdjc3SlFnRkJRVUZDQ1VJQlFVRkJRQUFBQUVBSXdBQUE5MERiZ0N6QUFBbElpY21JeUlIQmlNaUp5WTFORGMyTnpZM05qYzJQUUUwSnlZaklTSUhCaDBCRkJjV0Z4WXpGaGNXRlJRSEJpTWlKeVlqSWdjR0l5SW5KalUwTnpZM05qYzJOelk5QVJFME5UUTFOQ2MwSnlZbkppY21KeVluSmlNaUp5WTFORGMyTXpJWEZqTXlOell6TWhjV0ZSUUhCaU1HQndZSEJoMEJGQmNXTXlFeU56WTlBVFFuSmljbUp5WTFORGMyTXpJWEZqTXlOell6TWhjV0ZSUUhCZ2NpQndZSEJoVVJGQmNXRnhZWE1oY1dGUlFIQmlNRHdSa3pNaG9aTWpNWkRRZ0hDUW9OREJFUUNoSUJCeFgrZmhZSEFSVUpFaE1PRGd3TEJ3Y09HelUxR2hneE1SZ05Cd2NKQ1FzTUVBOEpFZ0VDQVFJREJBUUZDQklSRFEwS0N3Y0hEaG8xTlJvWU1ERVlEZ2NIQ1FvTURSQVFDQlFCQnc4QmtBNEhBUlFLRnhjUERnY0hEaGt6TWhrWk1URVpEZ2NIQ2dvTkRSQVJDQlFVQ1JFUkRnMEtDd2NIRGdBQ0FnSUNEQXNQRVFrSkFRRURBd1VNUk9BTUJRTURCUXpVVVEwR0FRSUJDQWdTRHd3TkFnSUNBZ3dNRGhFSUNRRUNBd01GRFVVaEFkQUNEUTBJQ0E0T0Nnb0xDd2NIQXdZQkFRZ0lFZzhNRFFJQ0FnSU5EQThSQ0FnQkFnRUdERkMyREFjQkFRY010bEFNQmdFQkJnY1dEd3dOQWdJQ0FnME1EeEVJQ0FFQkFnWU5ULzNtUkF3R0FnSUJDUWdSRHd3TkFBQUNBQUQvdHdQL0E3Y0FFd0E1QUFBQk1oY1dGUlFIQWdjR0l5SW5KalUwTndFMk13RVdGeFlmQVJZSEJpTWlKeVluSmljbU5SWVhGaGNXRnhZek1qYzJOelkzTmpjMk56WTNBNXNvSGg0YXZrdzNSVWcwTkRVQmJTRXAvZmdYSmljdkFRSk1USHRITmpZaElSQVJCQk1VRUJBU0VRa1hDQThTRXhVVkhSMGVIaWtEdHhzYUtDUXovcGxHTkRVMFNVa3dBVXNmL2JFckh4OE5LSHBOVEJvYkxpODZPa1FERHc0TEN3b0tGaVViR2hFUkNnc0VCQUlBQVFBQUFBQUFBSVd3YW9GZkR6ejFBQXNFQUFBQUFBRGJ0ZU9aQUFBQUFOdTE0NWtBQVArM0JXQUR3QUFBQUFnQUFnQUFBQUFBQUFBQkFBQUR3UC9BQUFBRmdBQUEvLzhGWUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBS1FRQUFBQUFBQUFBQUFBQUFBSUFBQUFFQUFCQkJBQUFRUVFBQUFBRUFBQUFCQUFBQUFRQUFBQUVBQURBQkFBQUFBUUFBQUFFQUFBQUJBQUFRQVFBQUFBRmdBQUFCQUFBQUFRQUFCNEVBQUFBQkFBQUFBUUFBQUFFQUFBQUJBQUFaUVFBQUFBRUFBREFCQUFBd0FRQUFJQUVBQUFBQkFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBRUFBQUFCQUFBQUFNbEFEOERKUUFBQTc0QUJ3UUFBQ01EL3dBQUFBQUFBQUFLQUJRQUhnQktBSFlBcEFEbUFTNEJrZ0hRQWhZQ1hBTFFBdzREV0FOK0E2Z0VQZ1RlQlBvRlpBV09CZEFGK0FZNkJuWUdqZ2JtQnk0SFZnZCtCNmdIemdmOENDb0liZ2ttQ1hBS1lncStBQUVBQUFBcEFMUUFDZ0FBQUFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU9BSzRBQVFBQUFBQUFBUUFIQUFBQUFRQUFBQUFBQWdBSEFHQUFBUUFBQUFBQUF3QUhBRFlBQVFBQUFBQUFCQUFIQUhVQUFRQUFBQUFBQlFBTEFCVUFBUUFBQUFBQUJnQUhBRXNBQVFBQUFBQUFDZ0FhQUlvQUF3QUJCQWtBQVFBT0FBY0FBd0FCQkFrQUFnQU9BR2NBQXdBQkJBa0FBd0FPQUQwQUF3QUJCQWtBQkFBT0FId0FBd0FCQkFrQUJRQVdBQ0FBQXdBQkJBa0FCZ0FPQUZJQUF3QUJCQWtBQ2dBMEFLUnBZMjl0YjI5dUFHa0FZd0J2QUcwQWJ3QnZBRzVXWlhKemFXOXVJREV1TUFCV0FHVUFjZ0J6QUdrQWJ3QnVBQ0FBTVFBdUFEQnBZMjl0YjI5dUFHa0FZd0J2QUcwQWJ3QnZBRzVwWTI5dGIyOXVBR2tBWXdCdkFHMEFid0J2QUc1U1pXZDFiR0Z5QUZJQVpRQm5BSFVBYkFCaEFISnBZMjl0YjI5dUFHa0FZd0J2QUcwQWJ3QnZBRzVHYjI1MElHZGxibVZ5WVhSbFpDQmllU0JKWTI5TmIyOXVMZ0JHQUc4QWJnQjBBQ0FBWndCbEFHNEFaUUJ5QUdFQWRBQmxBR1FBSUFCaUFIa0FJQUJKQUdNQWJ3Qk5BRzhBYndCdUFDNEFBQUFEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyMCksIGQgPSB0KDE1Myk7XG4gICAgICBkID0gZC5fX2VzTW9kdWxlID8gZC5kZWZhdWx0IDogZCwgdHlwZW9mIGQgPT0gXCJzdHJpbmdcIiAmJiAoZCA9IFtbby5pLCBkLCBcIlwiXV0pO1xuICAgICAgdmFyIGMgPSB7fTtcbiAgICAgIGMuaW5zZXJ0ID0gXCJoZWFkXCIsIGMuc2luZ2xldG9uID0gITEsIHMoZCwgYyksIG8uZXhwb3J0cyA9IGQubG9jYWxzIHx8IHt9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyMSk7XG4gICAgICBpID0gcyghMSksIGkucHVzaChbby5pLCBgLnctZS10b29sYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZzogMCA2cHg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvKiBcXHU1MzU1XFx1NEUyQVxcdTgzRENcXHU1MzU1ICovXG59XG4udy1lLXRvb2xiYXIgLnctZS1tZW51IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4udy1lLXRvb2xiYXIgLnctZS1tZW51IGkge1xuICBjb2xvcjogIzk5OTtcbn1cbi53LWUtdG9vbGJhciAudy1lLW1lbnU6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjZGNkY2O1xufVxuLnctZS10b29sYmFyIC53LWUtbWVudTpob3ZlciBpIHtcbiAgY29sb3I6ICMzMzM7XG59XG4udy1lLXRvb2xiYXIgLnctZS1hY3RpdmUgaSB7XG4gIGNvbG9yOiAjMWU4OGU1O1xufVxuLnctZS10b29sYmFyIC53LWUtYWN0aXZlOmhvdmVyIGkge1xuICBjb2xvcjogIzFlODhlNTtcbn1cbi53LWUtbWVudS10b29sdGlwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBjb2xvcjogI2YxZjFmMTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgYm94LXNoYWRvdzogMCAycHggOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBwYWRkaW5nOiA0cHggNXB4IDZweDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4udy1lLW1lbnUtdG9vbHRpcC11cDo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTAwJTtcbiAgbGVmdDogNTAlO1xuICBtYXJnaW4tbGVmdDogLTVweDtcbiAgYm9yZGVyOiA1cHggc29saWQgcmdiYSgwLCAwLCAwLCAwKTtcbiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjczKTtcbn1cbi53LWUtbWVudS10b29sdGlwLWRvd246OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDEwMCU7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gIGJvcmRlcjogNXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMCk7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43Myk7XG59XG4udy1lLW1lbnUtdG9vbHRpcC1pdGVtLXdyYXBwZXIge1xuICBmb250LXNpemU6IDE0cHg7XG4gIG1hcmdpbjogMCA1cHg7XG59XG5gLCBcIlwiXSksIG8uZXhwb3J0cyA9IGk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDIwKSwgZCA9IHQoMTU1KTtcbiAgICAgIGQgPSBkLl9fZXNNb2R1bGUgPyBkLmRlZmF1bHQgOiBkLCB0eXBlb2YgZCA9PSBcInN0cmluZ1wiICYmIChkID0gW1tvLmksIGQsIFwiXCJdXSk7XG4gICAgICB2YXIgYyA9IHt9O1xuICAgICAgYy5pbnNlcnQgPSBcImhlYWRcIiwgYy5zaW5nbGV0b24gPSAhMSwgcyhkLCBjKSwgby5leHBvcnRzID0gZC5sb2NhbHMgfHwge307XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDIxKTtcbiAgICAgIGkgPSBzKCExKSwgaS5wdXNoKFtvLmksIGAudy1lLXRleHQtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4udy1lLXRleHQtY29udGFpbmVyIC53LWUtcHJvZ3Jlc3Mge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxZTg4ZTU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgaGVpZ2h0OiAxcHg7XG59XG4udy1lLXRleHQtY29udGFpbmVyIC5wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjRDRENEQ0O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGZvbnQtc2l6ZTogMTFwdDtcbiAgbGluZS1oZWlnaHQ6IDIycHg7XG4gIGxlZnQ6IDEwcHg7XG4gIHRvcDogMTBweDtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgei1pbmRleDogLTE7XG59XG4udy1lLXRleHQge1xuICBwYWRkaW5nOiAwIDEwcHg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG4udy1lLXRleHQgcCxcbi53LWUtdGV4dCBoMSxcbi53LWUtdGV4dCBoMixcbi53LWUtdGV4dCBoMyxcbi53LWUtdGV4dCBoNCxcbi53LWUtdGV4dCBoNSxcbi53LWUtdGV4dCB0YWJsZSxcbi53LWUtdGV4dCBwcmUge1xuICBtYXJnaW46IDEwcHggMDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbn1cbi53LWUtdGV4dCB1bCxcbi53LWUtdGV4dCBvbCB7XG4gIG1hcmdpbjogMTBweCAwIDEwcHggMjBweDtcbn1cbi53LWUtdGV4dCBibG9ja3F1b3RlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJvcmRlci1sZWZ0OiA4cHggc29saWQgI2QwZTVmMjtcbiAgcGFkZGluZzogNXB4IDEwcHg7XG4gIG1hcmdpbjogMTBweCAwO1xuICBsaW5lLWhlaWdodDogMS40O1xuICBmb250LXNpemU6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMWYxZjE7XG59XG4udy1lLXRleHQgY29kZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjFmMTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBwYWRkaW5nOiAzcHggNXB4O1xuICBtYXJnaW46IDAgM3B4O1xufVxuLnctZS10ZXh0IHByZSBjb2RlIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4udy1lLXRleHQgdGFibGUge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjO1xufVxuLnctZS10ZXh0IHRhYmxlIHRkLFxuLnctZS10ZXh0IHRhYmxlIHRoIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNjY2M7XG4gIHBhZGRpbmc6IDNweCA1cHg7XG4gIG1pbi1oZWlnaHQ6IDMwcHg7XG4gIGhlaWdodDogMzBweDtcbn1cbi53LWUtdGV4dCB0YWJsZSB0aCB7XG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjY2NjO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMWYxZjE7XG59XG4udy1lLXRleHQ6Zm9jdXMge1xuICBvdXRsaW5lOiBub25lO1xufVxuLnctZS10ZXh0IGltZyB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi53LWUtdGV4dCBpbWc6aG92ZXIge1xuICBib3gtc2hhZG93OiAwIDAgNXB4ICMzMzM7XG59XG4udy1lLXRleHQgLnctZS10b2RvIHtcbiAgbWFyZ2luOiAwIDAgMCAyMHB4O1xufVxuLnctZS10ZXh0IC53LWUtdG9kbyBsaSB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMWVtO1xufVxuLnctZS10ZXh0IC53LWUtdG9kbyBsaSBzcGFuOm50aC1jaGlsZCgxKSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGVmdDogLTE4cHg7XG59XG4udy1lLXRleHQgLnctZS10b2RvIGxpIHNwYW46bnRoLWNoaWxkKDEpIGlucHV0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW4tcmlnaHQ6IDNweDtcbn1cbi53LWUtdGV4dCAudy1lLXRvZG8gbGkgc3BhbjpudGgtY2hpbGQoMSkgaW5wdXRbdHlwZT1jaGVja2JveF0ge1xuICB0b3A6IDUwJTtcbiAgbWFyZ2luLXRvcDogLTZweDtcbn1cbi53LWUtdG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgY29sb3I6ICNmMWYxZjE7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gIGJveC1zaGFkb3c6IDAgMnB4IDhweCAwIHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgcGFkZGluZzogNHB4IDVweCA2cHg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLnctZS10b29sdGlwLXVwOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxMDAlO1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAtNXB4O1xuICBib3JkZXI6IDVweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDApO1xuICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNzMpO1xufVxuLnctZS10b29sdGlwLWRvd246OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDEwMCU7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gIGJvcmRlcjogNXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMCk7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43Myk7XG59XG4udy1lLXRvb2x0aXAtaXRlbS13cmFwcGVyIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXNpemU6IDE0cHg7XG4gIG1hcmdpbjogMCA1cHg7XG59XG4udy1lLXRvb2x0aXAtaXRlbS13cmFwcGVyOmhvdmVyIHtcbiAgY29sb3I6ICNjY2M7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuYCwgXCJcIl0pLCBvLmV4cG9ydHMgPSBpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyMCksIGQgPSB0KDE1Nyk7XG4gICAgICBkID0gZC5fX2VzTW9kdWxlID8gZC5kZWZhdWx0IDogZCwgdHlwZW9mIGQgPT0gXCJzdHJpbmdcIiAmJiAoZCA9IFtbby5pLCBkLCBcIlwiXV0pO1xuICAgICAgdmFyIGMgPSB7fTtcbiAgICAgIGMuaW5zZXJ0ID0gXCJoZWFkXCIsIGMuc2luZ2xldG9uID0gITEsIHMoZCwgYyksIG8uZXhwb3J0cyA9IGQubG9jYWxzIHx8IHt9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyMSk7XG4gICAgICBpID0gcyghMSksIGkucHVzaChbby5pLCBgLnctZS1tZW51IC53LWUtcGFuZWwtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDUwJTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXRvcDogMDtcbiAgYm94LXNoYWRvdzogMXB4IDFweCAycHggI2NjYztcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIC8qIFxcdTRFM0EgZW1vdGlvbiBwYW5lbCBcXHU1QjlBXFx1NTIzNlxcdTc2ODRcXHU2ODM3XFx1NUYwRiAqL1xuICAvKiBcXHU0RTBBXFx1NEYyMFxcdTU2RkVcXHU3MjQ3XFx1MzAwMVxcdTRFMEFcXHU0RjIwXFx1ODlDNlxcdTk4OTFcXHU3Njg0IHBhbmVsIFxcdTVCOUFcXHU1MjM2XFx1NjgzN1xcdTVGMEYgKi9cbn1cbi53LWUtbWVudSAudy1lLXBhbmVsLWNvbnRhaW5lciAudy1lLXBhbmVsLWNsb3NlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICBwYWRkaW5nOiA1cHg7XG4gIG1hcmdpbjogMnB4IDVweCAwIDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgY29sb3I6ICM5OTk7XG59XG4udy1lLW1lbnUgLnctZS1wYW5lbC1jb250YWluZXIgLnctZS1wYW5lbC1jbG9zZTpob3ZlciB7XG4gIGNvbG9yOiAjMzMzO1xufVxuLnctZS1tZW51IC53LWUtcGFuZWwtY29udGFpbmVyIC53LWUtcGFuZWwtdGFiLXRpdGxlIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBtYXJnaW46IDJweCAxMHB4IDAgMTBweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMWYxZjE7XG59XG4udy1lLW1lbnUgLnctZS1wYW5lbC1jb250YWluZXIgLnctZS1wYW5lbC10YWItdGl0bGUgLnctZS1pdGVtIHtcbiAgcGFkZGluZzogM3B4IDVweDtcbiAgY29sb3I6ICM5OTk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgbWFyZ2luOiAwIDNweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDFweDtcbn1cbi53LWUtbWVudSAudy1lLXBhbmVsLWNvbnRhaW5lciAudy1lLXBhbmVsLXRhYi10aXRsZSAudy1lLWFjdGl2ZSB7XG4gIGNvbG9yOiAjMzMzO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMztcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLnctZS1tZW51IC53LWUtcGFuZWwtY29udGFpbmVyIC53LWUtcGFuZWwtdGFiLWNvbnRlbnQge1xuICBwYWRkaW5nOiAxMHB4IDE1cHggMTBweCAxNXB4O1xuICBmb250LXNpemU6IDE2cHg7XG4gIC8qIFxcdThGOTNcXHU1MTY1XFx1Njg0NlxcdTc2ODRcXHU2ODM3XFx1NUYwRiAqL1xuICAvKiBcXHU2MzA5XFx1OTRBRVxcdTc2ODRcXHU2ODM3XFx1NUYwRiAqL1xufVxuLnctZS1tZW51IC53LWUtcGFuZWwtY29udGFpbmVyIC53LWUtcGFuZWwtdGFiLWNvbnRlbnQgaW5wdXQ6Zm9jdXMsXG4udy1lLW1lbnUgLnctZS1wYW5lbC1jb250YWluZXIgLnctZS1wYW5lbC10YWItY29udGVudCB0ZXh0YXJlYTpmb2N1cyxcbi53LWUtbWVudSAudy1lLXBhbmVsLWNvbnRhaW5lciAudy1lLXBhbmVsLXRhYi1jb250ZW50IGJ1dHRvbjpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG59XG4udy1lLW1lbnUgLnctZS1wYW5lbC1jb250YWluZXIgLnctZS1wYW5lbC10YWItY29udGVudCB0ZXh0YXJlYSB7XG4gIHdpZHRoOiAxMDAlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBwYWRkaW5nOiA1cHg7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG59XG4udy1lLW1lbnUgLnctZS1wYW5lbC1jb250YWluZXIgLnctZS1wYW5lbC10YWItY29udGVudCB0ZXh0YXJlYTpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogIzFlODhlNTtcbn1cbi53LWUtbWVudSAudy1lLXBhbmVsLWNvbnRhaW5lciAudy1lLXBhbmVsLXRhYi1jb250ZW50IGlucHV0W3R5cGU9dGV4dF0ge1xuICBib3JkZXI6IG5vbmU7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGhlaWdodDogMjBweDtcbiAgY29sb3I6ICMzMzM7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4udy1lLW1lbnUgLnctZS1wYW5lbC1jb250YWluZXIgLnctZS1wYW5lbC10YWItY29udGVudCBpbnB1dFt0eXBlPXRleHRdLnNtYWxsIHtcbiAgd2lkdGg6IDMwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi53LWUtbWVudSAudy1lLXBhbmVsLWNvbnRhaW5lciAudy1lLXBhbmVsLXRhYi1jb250ZW50IGlucHV0W3R5cGU9dGV4dF0uYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMTBweCAwO1xufVxuLnctZS1tZW51IC53LWUtcGFuZWwtY29udGFpbmVyIC53LWUtcGFuZWwtdGFiLWNvbnRlbnQgaW5wdXRbdHlwZT10ZXh0XTpmb2N1cyB7XG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjMWU4OGU1O1xufVxuLnctZS1tZW51IC53LWUtcGFuZWwtY29udGFpbmVyIC53LWUtcGFuZWwtdGFiLWNvbnRlbnQgLnctZS1idXR0b24tY29udGFpbmVyIGJ1dHRvbiB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICMxZTg4ZTU7XG4gIGJvcmRlcjogbm9uZTtcbiAgcGFkZGluZzogNXB4IDEwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuLnctZS1tZW51IC53LWUtcGFuZWwtY29udGFpbmVyIC53LWUtcGFuZWwtdGFiLWNvbnRlbnQgLnctZS1idXR0b24tY29udGFpbmVyIGJ1dHRvbi5sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1hcmdpbi1yaWdodDogMTBweDtcbn1cbi53LWUtbWVudSAudy1lLXBhbmVsLWNvbnRhaW5lciAudy1lLXBhbmVsLXRhYi1jb250ZW50IC53LWUtYnV0dG9uLWNvbnRhaW5lciBidXR0b24ucmlnaHQge1xuICBmbG9hdDogcmlnaHQ7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuLnctZS1tZW51IC53LWUtcGFuZWwtY29udGFpbmVyIC53LWUtcGFuZWwtdGFiLWNvbnRlbnQgLnctZS1idXR0b24tY29udGFpbmVyIGJ1dHRvbi5ncmF5IHtcbiAgY29sb3I6ICM5OTk7XG59XG4udy1lLW1lbnUgLnctZS1wYW5lbC1jb250YWluZXIgLnctZS1wYW5lbC10YWItY29udGVudCAudy1lLWJ1dHRvbi1jb250YWluZXIgYnV0dG9uLnJlZCB7XG4gIGNvbG9yOiAjYzI0ZjRhO1xufVxuLnctZS1tZW51IC53LWUtcGFuZWwtY29udGFpbmVyIC53LWUtcGFuZWwtdGFiLWNvbnRlbnQgLnctZS1idXR0b24tY29udGFpbmVyIGJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMWYxZjE7XG59XG4udy1lLW1lbnUgLnctZS1wYW5lbC1jb250YWluZXIgLnctZS1wYW5lbC10YWItY29udGVudCAudy1lLWJ1dHRvbi1jb250YWluZXI6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgY2xlYXI6IGJvdGg7XG59XG4udy1lLW1lbnUgLnctZS1wYW5lbC1jb250YWluZXIgLnctZS1lbW90aWNvbi1jb250YWluZXIgLnctZS1pdGVtIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXNpemU6IDE4cHg7XG4gIHBhZGRpbmc6IDAgM3B4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4udy1lLW1lbnUgLnctZS1wYW5lbC1jb250YWluZXIgLnctZS11cC1pbWctY29udGFpbmVyLFxuLnctZS1tZW51IC53LWUtcGFuZWwtY29udGFpbmVyIC53LWUtdXAtdmlkZW8tY29udGFpbmVyIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLnctZS1tZW51IC53LWUtcGFuZWwtY29udGFpbmVyIC53LWUtdXAtaW1nLWNvbnRhaW5lciAudy1lLXVwLWJ0bixcbi53LWUtbWVudSAudy1lLXBhbmVsLWNvbnRhaW5lciAudy1lLXVwLXZpZGVvLWNvbnRhaW5lciAudy1lLXVwLWJ0biB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgY29sb3I6ICM5OTk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC1zaXplOiA2MHB4O1xuICBsaW5lLWhlaWdodDogMTtcbn1cbi53LWUtbWVudSAudy1lLXBhbmVsLWNvbnRhaW5lciAudy1lLXVwLWltZy1jb250YWluZXIgLnctZS11cC1idG46aG92ZXIsXG4udy1lLW1lbnUgLnctZS1wYW5lbC1jb250YWluZXIgLnctZS11cC12aWRlby1jb250YWluZXIgLnctZS11cC1idG46aG92ZXIge1xuICBjb2xvcjogIzMzMztcbn1cbmAsIFwiXCJdKSwgby5leHBvcnRzID0gaTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjApLCBkID0gdCgxNTkpO1xuICAgICAgZCA9IGQuX19lc01vZHVsZSA/IGQuZGVmYXVsdCA6IGQsIHR5cGVvZiBkID09IFwic3RyaW5nXCIgJiYgKGQgPSBbW28uaSwgZCwgXCJcIl1dKTtcbiAgICAgIHZhciBjID0ge307XG4gICAgICBjLmluc2VydCA9IFwiaGVhZFwiLCBjLnNpbmdsZXRvbiA9ICExLCBzKGQsIGMpLCBvLmV4cG9ydHMgPSBkLmxvY2FscyB8fCB7fTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjEpO1xuICAgICAgaSA9IHMoITEpLCBpLnB1c2goW28uaSwgYC53LWUtdG9vbGJhciAudy1lLWRyb3BsaXN0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNmMWYxZjE7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogI2NjYztcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2NjYztcbn1cbi53LWUtdG9vbGJhciAudy1lLWRyb3BsaXN0IC53LWUtZHAtdGl0bGUge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjOTk5O1xuICBsaW5lLWhlaWdodDogMjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMWYxZjE7XG4gIGZvbnQtc2l6ZTogMTNweDtcbn1cbi53LWUtdG9vbGJhciAudy1lLWRyb3BsaXN0IHVsLnctZS1saXN0IHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbGluZS1oZWlnaHQ6IDE7XG59XG4udy1lLXRvb2xiYXIgLnctZS1kcm9wbGlzdCB1bC53LWUtbGlzdCBsaS53LWUtaXRlbSB7XG4gIGNvbG9yOiAjMzMzO1xuICBwYWRkaW5nOiA1cHggMDtcbn1cbi53LWUtdG9vbGJhciAudy1lLWRyb3BsaXN0IHVsLnctZS1saXN0IGxpLnctZS1pdGVtOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjFmMTtcbn1cbi53LWUtdG9vbGJhciAudy1lLWRyb3BsaXN0IHVsLnctZS1ibG9jayB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHBhZGRpbmc6IDVweDtcbn1cbi53LWUtdG9vbGJhciAudy1lLWRyb3BsaXN0IHVsLnctZS1ibG9jayBsaS53LWUtaXRlbSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogM3B4IDVweDtcbn1cbi53LWUtdG9vbGJhciAudy1lLWRyb3BsaXN0IHVsLnctZS1ibG9jayBsaS53LWUtaXRlbTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMWYxZjE7XG59XG5gLCBcIlwiXSksIG8uZXhwb3J0cyA9IGk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDE2MSkpO1xuICAgICAgRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyB8fCAoRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgdmFyIHAgPSB0aGlzLm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjKSwgdiA9IHAubGVuZ3RoO1xuICAgICAgICBmb3IgKHY7IHYgPj0gMCAmJiBwLml0ZW0odikgIT09IHRoaXM7IHYtLSlcbiAgICAgICAgICA7XG4gICAgICAgIHJldHVybiB2ID4gLTE7XG4gICAgICB9KSwgZC5kZWZhdWx0IHx8ICh3aW5kb3cuUHJvbWlzZSA9IGQuZGVmYXVsdCk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgby5leHBvcnRzID0gdCgxNjIpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxNjMpO1xuICAgICAgby5leHBvcnRzID0gcztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB0KDYxKSwgdCg1MCksIHQoNTQpLCB0KDE3NSksIHQoMTc4KSwgdCgxNzkpO1xuICAgICAgdmFyIHMgPSB0KDkpO1xuICAgICAgby5leHBvcnRzID0gcy5Qcm9taXNlO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg2MiksIGQgPSB0KDQ5KSwgYyA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGIsIFMpIHtcbiAgICAgICAgICB2YXIgRCA9IFN0cmluZyhkKGIpKSwgVCA9IHMoUyksIG0gPSBELmxlbmd0aCwgeCwgUjtcbiAgICAgICAgICByZXR1cm4gVCA8IDAgfHwgVCA+PSBtID8gdiA/IFwiXCIgOiB2b2lkIDAgOiAoeCA9IEQuY2hhckNvZGVBdChUKSwgeCA8IDU1Mjk2IHx8IHggPiA1NjMxOSB8fCBUICsgMSA9PT0gbSB8fCAoUiA9IEQuY2hhckNvZGVBdChUICsgMSkpIDwgNTYzMjAgfHwgUiA+IDU3MzQzID8gdiA/IEQuY2hhckF0KFQpIDogeCA6IHYgPyBELnNsaWNlKFQsIFQgKyAyKSA6ICh4IC0gNTUyOTYgPDwgMTApICsgKFIgLSA1NjMyMCkgKyA2NTUzNik7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgby5leHBvcnRzID0ge1xuICAgICAgICBjb2RlQXQ6IGMoITEpLFxuICAgICAgICBjaGFyQXQ6IGMoITApXG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg4KSwgZCA9IHQoMTAxKSwgYyA9IHMuV2Vha01hcDtcbiAgICAgIG8uZXhwb3J0cyA9IHR5cGVvZiBjID09IFwiZnVuY3Rpb25cIiAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoZChjKSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDgpLCBkID0gdCgxOSk7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihjLCBwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZChzLCBjLCBwKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgc1tjXSA9IHA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHA7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxMDMpLkl0ZXJhdG9yUHJvdG90eXBlLCBkID0gdCg3NyksIGMgPSB0KDQ4KSwgcCA9IHQoMzYpLCB2ID0gdCg0MyksIGIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9O1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24oUywgRCwgVCkge1xuICAgICAgICB2YXIgbSA9IEQgKyBcIiBJdGVyYXRvclwiO1xuICAgICAgICByZXR1cm4gUy5wcm90b3R5cGUgPSBkKHMsIHsgbmV4dDogYygxLCBUKSB9KSwgcChTLCBtLCAhMSwgITApLCB2W21dID0gYiwgUztcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDExKTtcbiAgICAgIG8uZXhwb3J0cyA9ICFzKGZ1bmN0aW9uKCkge1xuICAgICAgICBmdW5jdGlvbiBkKCkge1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGwsIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgZCgpKSAhPT0gZC5wcm90b3R5cGU7XG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTQpLCBkID0gdCgxOCksIGMgPSB0KDI1KSwgcCA9IHQoNTIpO1xuICAgICAgby5leHBvcnRzID0gcyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24oYiwgUykge1xuICAgICAgICBjKGIpO1xuICAgICAgICBmb3IgKHZhciBEID0gcChTKSwgVCA9IEQubGVuZ3RoLCBtID0gMCwgeDsgVCA+IG07IClcbiAgICAgICAgICBkLmYoYiwgeCA9IERbbSsrXSwgU1t4XSk7XG4gICAgICAgIHJldHVybiBiO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoODEpLCBkID0gdCg2NSk7XG4gICAgICBvLmV4cG9ydHMgPSBzID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFwiW29iamVjdCBcIiArIGQodGhpcykgKyBcIl1cIjtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDI1KSwgZCA9IHQoMTcyKTtcbiAgICAgIG8uZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoXCJfX3Byb3RvX19cIiBpbiB7fSA/IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYyA9ICExLCBwID0ge30sIHY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwgXCJfX3Byb3RvX19cIikuc2V0LCB2LmNhbGwocCwgW10pLCBjID0gcCBpbnN0YW5jZW9mIEFycmF5O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oUywgRCkge1xuICAgICAgICAgIHJldHVybiBzKFMpLCBkKEQpLCBjID8gdi5jYWxsKFMsIEQpIDogUy5fX3Byb3RvX18gPSBELCBTO1xuICAgICAgICB9O1xuICAgICAgfSgpIDogdm9pZCAwKTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTMpO1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24oZCkge1xuICAgICAgICBpZiAoIXMoZCkgJiYgZCAhPT0gbnVsbClcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyBTdHJpbmcoZCkgKyBcIiBhcyBhIHByb3RvdHlwZVwiKTtcbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyOCksIGQgPSB0KDgyKSwgYyA9IHQoNDMpLCBwID0gdCg0MSksIHYgPSB0KDc1KSwgYiA9IFwiQXJyYXkgSXRlcmF0b3JcIiwgUyA9IHAuc2V0LCBEID0gcC5nZXR0ZXJGb3IoYik7XG4gICAgICBvLmV4cG9ydHMgPSB2KEFycmF5LCBcIkFycmF5XCIsIGZ1bmN0aW9uKFQsIG0pIHtcbiAgICAgICAgUyh0aGlzLCB7XG4gICAgICAgICAgdHlwZTogYixcbiAgICAgICAgICB0YXJnZXQ6IHMoVCksXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAga2luZDogbVxuICAgICAgICB9KTtcbiAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgVCA9IEQodGhpcyksIG0gPSBULnRhcmdldCwgeCA9IFQua2luZCwgUiA9IFQuaW5kZXgrKztcbiAgICAgICAgcmV0dXJuICFtIHx8IFIgPj0gbS5sZW5ndGggPyAoVC50YXJnZXQgPSB2b2lkIDAsIHsgdmFsdWU6IHZvaWQgMCwgZG9uZTogITAgfSkgOiB4ID09IFwia2V5c1wiID8geyB2YWx1ZTogUiwgZG9uZTogITEgfSA6IHggPT0gXCJ2YWx1ZXNcIiA/IHsgdmFsdWU6IG1bUl0sIGRvbmU6ICExIH0gOiB7IHZhbHVlOiBbUiwgbVtSXV0sIGRvbmU6ICExIH07XG4gICAgICB9LCBcInZhbHVlc1wiKSwgYy5Bcmd1bWVudHMgPSBjLkFycmF5LCBkKFwia2V5c1wiKSwgZChcInZhbHVlc1wiKSwgZChcImVudHJpZXNcIik7XG4gICAgfSwgZnVuY3Rpb24obywgaSkge1xuICAgICAgby5leHBvcnRzID0geyBDU1NSdWxlTGlzdDogMCwgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCwgQ1NTVmFsdWVMaXN0OiAwLCBDbGllbnRSZWN0TGlzdDogMCwgRE9NUmVjdExpc3Q6IDAsIERPTVN0cmluZ0xpc3Q6IDAsIERPTVRva2VuTGlzdDogMSwgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsIEZpbGVMaXN0OiAwLCBIVE1MQWxsQ29sbGVjdGlvbjogMCwgSFRNTENvbGxlY3Rpb246IDAsIEhUTUxGb3JtRWxlbWVudDogMCwgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsIE1lZGlhTGlzdDogMCwgTWltZVR5cGVBcnJheTogMCwgTmFtZWROb2RlTWFwOiAwLCBOb2RlTGlzdDogMSwgUGFpbnRSZXF1ZXN0TGlzdDogMCwgUGx1Z2luOiAwLCBQbHVnaW5BcnJheTogMCwgU1ZHTGVuZ3RoTGlzdDogMCwgU1ZHTnVtYmVyTGlzdDogMCwgU1ZHUGF0aFNlZ0xpc3Q6IDAsIFNWR1BvaW50TGlzdDogMCwgU1ZHU3RyaW5nTGlzdDogMCwgU1ZHVHJhbnNmb3JtTGlzdDogMCwgU291cmNlQnVmZmVyTGlzdDogMCwgU3R5bGVTaGVldExpc3Q6IDAsIFRleHRUcmFja0N1ZUxpc3Q6IDAsIFRleHRUcmFja0xpc3Q6IDAsIFRvdWNoTGlzdDogMCB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg1KSwgZCA9IHQoNDIpLCBjID0gdCg4KSwgcCA9IHQoMzUpLCB2ID0gdCgxMDgpLCBiID0gdCg1MyksIFMgPSB0KDEwOSksIEQgPSB0KDM2KSwgVCA9IHQoMTEwKSwgbSA9IHQoMTMpLCB4ID0gdCg0MCksIFIgPSB0KDgzKSwgdyA9IHQoMzMpLCBBID0gdCgxMDEpLCBFID0gdCg2NiksIEMgPSB0KDExNCksIE0gPSB0KDExNSksIHkgPSB0KDExNikuc2V0LCBCID0gdCgxNzYpLCAkID0gdCgxMTgpLCBGID0gdCgxNzcpLCBrID0gdCg4NSksIGggPSB0KDExOSksIE4gPSB0KDQxKSwgUCA9IHQoMTAwKSwgaiA9IHQoMTApLCBJID0gdCg4NiksIFYgPSBqKFwic3BlY2llc1wiKSwgVyA9IFwiUHJvbWlzZVwiLCBRID0gTi5nZXQsIFggPSBOLnNldCwgSiA9IE4uZ2V0dGVyRm9yKFcpLCBaID0gdiwgZGUgPSBjLlR5cGVFcnJvciwgdmUgPSBjLmRvY3VtZW50LCBzZSA9IGMucHJvY2VzcywgbWUgPSBwKFwiZmV0Y2hcIiksIGxlID0gay5mLCBpZSA9IGxlLCBwZSA9IHcoc2UpID09IFwicHJvY2Vzc1wiLCB0ZSA9ICEhKHZlICYmIHZlLmNyZWF0ZUV2ZW50ICYmIGMuZGlzcGF0Y2hFdmVudCksIGdlID0gXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgQWUgPSBcInJlamVjdGlvbmhhbmRsZWRcIiwgTWUgPSAwLCBZZSA9IDEsIG50ID0gMiwgZXQgPSAxLCBndCA9IDIsIHl0LCBCZSwgcHQsIHNuLCBCdCA9IFAoVywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBxZSA9IEEoWikgIT09IFN0cmluZyhaKTtcbiAgICAgICAgaWYgKCFxZSAmJiAoSSA9PT0gNjYgfHwgIXBlICYmIHR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQgIT0gXCJmdW5jdGlvblwiKSB8fCBkICYmICFaLnByb3RvdHlwZS5maW5hbGx5KVxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgaWYgKEkgPj0gNTEgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFopKVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgdmFyIERlID0gWi5yZXNvbHZlKDEpLCB3ZSA9IGZ1bmN0aW9uKG5lKSB7XG4gICAgICAgICAgbmUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIFVlID0gRGUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgICAgcmV0dXJuIFVlW1ZdID0gd2UsICEoRGUudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgfSkgaW5zdGFuY2VvZiB3ZSk7XG4gICAgICB9KSwgZHIgPSBCdCB8fCAhQyhmdW5jdGlvbihxZSkge1xuICAgICAgICBaLmFsbChxZSkuY2F0Y2goZnVuY3Rpb24oKSB7XG4gICAgICAgIH0pO1xuICAgICAgfSksICRuID0gZnVuY3Rpb24oRGUpIHtcbiAgICAgICAgdmFyIHdlO1xuICAgICAgICByZXR1cm4gbShEZSkgJiYgdHlwZW9mICh3ZSA9IERlLnRoZW4pID09IFwiZnVuY3Rpb25cIiA/IHdlIDogITE7XG4gICAgICB9LCB2biA9IGZ1bmN0aW9uKERlLCB3ZSwgVWUpIHtcbiAgICAgICAgaWYgKCF3ZS5ub3RpZmllZCkge1xuICAgICAgICAgIHdlLm5vdGlmaWVkID0gITA7XG4gICAgICAgICAgdmFyIFJlID0gd2UucmVhY3Rpb25zO1xuICAgICAgICAgIEIoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBuZSA9IHdlLnZhbHVlLCBMZSA9IHdlLnN0YXRlID09IFllLCBPZSA9IDA7IFJlLmxlbmd0aCA+IE9lOyApIHtcbiAgICAgICAgICAgICAgdmFyIFBlID0gUmVbT2UrK10sIFFlID0gTGUgPyBQZS5vayA6IFBlLmZhaWwsIF90ID0gUGUucmVzb2x2ZSwgYnQgPSBQZS5yZWplY3QsIG10ID0gUGUuZG9tYWluLCBsdCwgd24sIGNyO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIFFlID8gKExlIHx8ICh3ZS5yZWplY3Rpb24gPT09IGd0ICYmIHhuKERlLCB3ZSksIHdlLnJlamVjdGlvbiA9IGV0KSwgUWUgPT09ICEwID8gbHQgPSBuZSA6IChtdCAmJiBtdC5lbnRlcigpLCBsdCA9IFFlKG5lKSwgbXQgJiYgKG10LmV4aXQoKSwgY3IgPSAhMCkpLCBsdCA9PT0gUGUucHJvbWlzZSA/IGJ0KGRlKFwiUHJvbWlzZS1jaGFpbiBjeWNsZVwiKSkgOiAod24gPSAkbihsdCkpID8gd24uY2FsbChsdCwgX3QsIGJ0KSA6IF90KGx0KSkgOiBidChuZSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKEluKSB7XG4gICAgICAgICAgICAgICAgbXQgJiYgIWNyICYmIG10LmV4aXQoKSwgYnQoSW4pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3ZS5yZWFjdGlvbnMgPSBbXSwgd2Uubm90aWZpZWQgPSAhMSwgVWUgJiYgIXdlLnJlamVjdGlvbiAmJiBrbihEZSwgd2UpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCBtbiA9IGZ1bmN0aW9uKERlLCB3ZSwgVWUpIHtcbiAgICAgICAgdmFyIFJlLCBuZTtcbiAgICAgICAgdGUgPyAoUmUgPSB2ZS5jcmVhdGVFdmVudChcIkV2ZW50XCIpLCBSZS5wcm9taXNlID0gd2UsIFJlLnJlYXNvbiA9IFVlLCBSZS5pbml0RXZlbnQoRGUsICExLCAhMCksIGMuZGlzcGF0Y2hFdmVudChSZSkpIDogUmUgPSB7IHByb21pc2U6IHdlLCByZWFzb246IFVlIH0sIChuZSA9IGNbXCJvblwiICsgRGVdKSA/IG5lKFJlKSA6IERlID09PSBnZSAmJiBGKFwiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uXCIsIFVlKTtcbiAgICAgIH0sIGtuID0gZnVuY3Rpb24oRGUsIHdlKSB7XG4gICAgICAgIHkuY2FsbChjLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgVWUgPSB3ZS52YWx1ZSwgUmUgPSBnbih3ZSksIG5lO1xuICAgICAgICAgIGlmIChSZSAmJiAobmUgPSBoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcGUgPyBzZS5lbWl0KFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsIFVlLCBEZSkgOiBtbihnZSwgRGUsIFVlKTtcbiAgICAgICAgICB9KSwgd2UucmVqZWN0aW9uID0gcGUgfHwgZ24od2UpID8gZ3QgOiBldCwgbmUuZXJyb3IpKVxuICAgICAgICAgICAgdGhyb3cgbmUudmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfSwgZ24gPSBmdW5jdGlvbihEZSkge1xuICAgICAgICByZXR1cm4gRGUucmVqZWN0aW9uICE9PSBldCAmJiAhRGUucGFyZW50O1xuICAgICAgfSwgeG4gPSBmdW5jdGlvbihEZSwgd2UpIHtcbiAgICAgICAgeS5jYWxsKGMsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHBlID8gc2UuZW1pdChcInJlamVjdGlvbkhhbmRsZWRcIiwgRGUpIDogbW4oQWUsIERlLCB3ZS52YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgT3QgPSBmdW5jdGlvbihEZSwgd2UsIFVlLCBSZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24obmUpIHtcbiAgICAgICAgICBEZSh3ZSwgVWUsIG5lLCBSZSk7XG4gICAgICAgIH07XG4gICAgICB9LCBhdCA9IGZ1bmN0aW9uKERlLCB3ZSwgVWUsIFJlKSB7XG4gICAgICAgIHdlLmRvbmUgfHwgKHdlLmRvbmUgPSAhMCwgUmUgJiYgKHdlID0gUmUpLCB3ZS52YWx1ZSA9IFVlLCB3ZS5zdGF0ZSA9IG50LCB2bihEZSwgd2UsICEwKSk7XG4gICAgICB9LCB1biA9IGZ1bmN0aW9uIHFlKERlLCB3ZSwgVWUsIFJlKSB7XG4gICAgICAgIGlmICghd2UuZG9uZSkge1xuICAgICAgICAgIHdlLmRvbmUgPSAhMCwgUmUgJiYgKHdlID0gUmUpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoRGUgPT09IFVlKVxuICAgICAgICAgICAgICB0aHJvdyBkZShcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgICAgICAgICAgdmFyIG5lID0gJG4oVWUpO1xuICAgICAgICAgICAgbmUgPyBCKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIgTGUgPSB7IGRvbmU6ICExIH07XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbmUuY2FsbChVZSwgT3QocWUsIERlLCBMZSwgd2UpLCBPdChhdCwgRGUsIExlLCB3ZSkpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChPZSkge1xuICAgICAgICAgICAgICAgIGF0KERlLCBMZSwgT2UsIHdlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkgOiAod2UudmFsdWUgPSBVZSwgd2Uuc3RhdGUgPSBZZSwgdm4oRGUsIHdlLCAhMSkpO1xuICAgICAgICAgIH0gY2F0Y2ggKExlKSB7XG4gICAgICAgICAgICBhdChEZSwgeyBkb25lOiAhMSB9LCBMZSwgd2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIEJ0ICYmIChaID0gZnVuY3Rpb24oRGUpIHtcbiAgICAgICAgUih0aGlzLCBaLCBXKSwgeChEZSksIHl0LmNhbGwodGhpcyk7XG4gICAgICAgIHZhciB3ZSA9IFEodGhpcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRGUoT3QodW4sIHRoaXMsIHdlKSwgT3QoYXQsIHRoaXMsIHdlKSk7XG4gICAgICAgIH0gY2F0Y2ggKFVlKSB7XG4gICAgICAgICAgYXQodGhpcywgd2UsIFVlKTtcbiAgICAgICAgfVxuICAgICAgfSwgeXQgPSBmdW5jdGlvbihEZSkge1xuICAgICAgICBYKHRoaXMsIHsgdHlwZTogVywgZG9uZTogITEsIG5vdGlmaWVkOiAhMSwgcGFyZW50OiAhMSwgcmVhY3Rpb25zOiBbXSwgcmVqZWN0aW9uOiAhMSwgc3RhdGU6IE1lLCB2YWx1ZTogdm9pZCAwIH0pO1xuICAgICAgfSwgeXQucHJvdG90eXBlID0gUyhaLnByb3RvdHlwZSwge1xuICAgICAgICB0aGVuOiBmdW5jdGlvbihEZSwgd2UpIHtcbiAgICAgICAgICB2YXIgVWUgPSBKKHRoaXMpLCBSZSA9IGxlKE0odGhpcywgWikpO1xuICAgICAgICAgIHJldHVybiBSZS5vayA9IHR5cGVvZiBEZSA9PSBcImZ1bmN0aW9uXCIgPyBEZSA6ICEwLCBSZS5mYWlsID0gdHlwZW9mIHdlID09IFwiZnVuY3Rpb25cIiAmJiB3ZSwgUmUuZG9tYWluID0gcGUgPyBzZS5kb21haW4gOiB2b2lkIDAsIFVlLnBhcmVudCA9ICEwLCBVZS5yZWFjdGlvbnMucHVzaChSZSksIFVlLnN0YXRlICE9IE1lICYmIHZuKHRoaXMsIFVlLCAhMSksIFJlLnByb21pc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGNhdGNoOiBmdW5jdGlvbihEZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRoZW4odm9pZCAwLCBEZSk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBCZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgRGUgPSBuZXcgeXQoKSwgd2UgPSBRKERlKTtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gRGUsIHRoaXMucmVzb2x2ZSA9IE90KHVuLCBEZSwgd2UpLCB0aGlzLnJlamVjdCA9IE90KGF0LCBEZSwgd2UpO1xuICAgICAgfSwgay5mID0gbGUgPSBmdW5jdGlvbihEZSkge1xuICAgICAgICByZXR1cm4gRGUgPT09IFogfHwgRGUgPT09IHB0ID8gbmV3IEJlKERlKSA6IGllKERlKTtcbiAgICAgIH0sICFkICYmIHR5cGVvZiB2ID09IFwiZnVuY3Rpb25cIiAmJiAoc24gPSB2LnByb3RvdHlwZS50aGVuLCBiKHYucHJvdG90eXBlLCBcInRoZW5cIiwgZnVuY3Rpb24oRGUsIHdlKSB7XG4gICAgICAgIHZhciBVZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBuZXcgWihmdW5jdGlvbihSZSwgbmUpIHtcbiAgICAgICAgICBzbi5jYWxsKFVlLCBSZSwgbmUpO1xuICAgICAgICB9KS50aGVuKERlLCB3ZSk7XG4gICAgICB9LCB7IHVuc2FmZTogITAgfSksIHR5cGVvZiBtZSA9PSBcImZ1bmN0aW9uXCIgJiYgcyh7IGdsb2JhbDogITAsIGVudW1lcmFibGU6ICEwLCBmb3JjZWQ6ICEwIH0sIHtcbiAgICAgICAgZmV0Y2g6IGZ1bmN0aW9uKERlKSB7XG4gICAgICAgICAgcmV0dXJuICQoWiwgbWUuYXBwbHkoYywgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cbiAgICAgIH0pKSksIHMoeyBnbG9iYWw6ICEwLCB3cmFwOiAhMCwgZm9yY2VkOiBCdCB9LCB7IFByb21pc2U6IFogfSksIEQoWiwgVywgITEsICEwKSwgVChXKSwgcHQgPSBwKFcpLCBzKHsgdGFyZ2V0OiBXLCBzdGF0OiAhMCwgZm9yY2VkOiBCdCB9LCB7XG4gICAgICAgIHJlamVjdDogZnVuY3Rpb24oRGUpIHtcbiAgICAgICAgICB2YXIgd2UgPSBsZSh0aGlzKTtcbiAgICAgICAgICByZXR1cm4gd2UucmVqZWN0LmNhbGwodm9pZCAwLCBEZSksIHdlLnByb21pc2U7XG4gICAgICAgIH1cbiAgICAgIH0pLCBzKHsgdGFyZ2V0OiBXLCBzdGF0OiAhMCwgZm9yY2VkOiBkIHx8IEJ0IH0sIHtcbiAgICAgICAgcmVzb2x2ZTogZnVuY3Rpb24oRGUpIHtcbiAgICAgICAgICByZXR1cm4gJChkICYmIHRoaXMgPT09IHB0ID8gWiA6IHRoaXMsIERlKTtcbiAgICAgICAgfVxuICAgICAgfSksIHMoeyB0YXJnZXQ6IFcsIHN0YXQ6ICEwLCBmb3JjZWQ6IGRyIH0sIHtcbiAgICAgICAgYWxsOiBmdW5jdGlvbihEZSkge1xuICAgICAgICAgIHZhciB3ZSA9IHRoaXMsIFVlID0gbGUod2UpLCBSZSA9IFVlLnJlc29sdmUsIG5lID0gVWUucmVqZWN0LCBMZSA9IGgoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgT2UgPSB4KHdlLnJlc29sdmUpLCBQZSA9IFtdLCBRZSA9IDAsIF90ID0gMTtcbiAgICAgICAgICAgIEUoRGUsIGZ1bmN0aW9uKGJ0KSB7XG4gICAgICAgICAgICAgIHZhciBtdCA9IFFlKyssIGx0ID0gITE7XG4gICAgICAgICAgICAgIFBlLnB1c2godm9pZCAwKSwgX3QrKywgT2UuY2FsbCh3ZSwgYnQpLnRoZW4oZnVuY3Rpb24od24pIHtcbiAgICAgICAgICAgICAgICBsdCB8fCAobHQgPSAhMCwgUGVbbXRdID0gd24sIC0tX3QgfHwgUmUoUGUpKTtcbiAgICAgICAgICAgICAgfSwgbmUpO1xuICAgICAgICAgICAgfSksIC0tX3QgfHwgUmUoUGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBMZS5lcnJvciAmJiBuZShMZS52YWx1ZSksIFVlLnByb21pc2U7XG4gICAgICAgIH0sXG4gICAgICAgIHJhY2U6IGZ1bmN0aW9uKERlKSB7XG4gICAgICAgICAgdmFyIHdlID0gdGhpcywgVWUgPSBsZSh3ZSksIFJlID0gVWUucmVqZWN0LCBuZSA9IGgoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgTGUgPSB4KHdlLnJlc29sdmUpO1xuICAgICAgICAgICAgRShEZSwgZnVuY3Rpb24oT2UpIHtcbiAgICAgICAgICAgICAgTGUuY2FsbCh3ZSwgT2UpLnRoZW4oVWUucmVzb2x2ZSwgUmUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG5lLmVycm9yICYmIFJlKG5lLnZhbHVlKSwgVWUucHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDgpLCBkID0gdCg3MSkuZiwgYyA9IHQoMzMpLCBwID0gdCgxMTYpLnNldCwgdiA9IHQoMTE3KSwgYiA9IHMuTXV0YXRpb25PYnNlcnZlciB8fCBzLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsIFMgPSBzLnByb2Nlc3MsIEQgPSBzLlByb21pc2UsIFQgPSBjKFMpID09IFwicHJvY2Vzc1wiLCBtID0gZChzLCBcInF1ZXVlTWljcm90YXNrXCIpLCB4ID0gbSAmJiBtLnZhbHVlLCBSLCB3LCBBLCBFLCBDLCBNLCB5LCBCO1xuICAgICAgeCB8fCAoUiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgRiwgaztcbiAgICAgICAgZm9yIChUICYmIChGID0gUy5kb21haW4pICYmIEYuZXhpdCgpOyB3OyApIHtcbiAgICAgICAgICBrID0gdy5mbiwgdyA9IHcubmV4dDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaygpO1xuICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgIHRocm93IHcgPyBFKCkgOiBBID0gdm9pZCAwLCBoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBBID0gdm9pZCAwLCBGICYmIEYuZW50ZXIoKTtcbiAgICAgIH0sIFQgPyBFID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFMubmV4dFRpY2soUik7XG4gICAgICB9IDogYiAmJiAhdiA/IChDID0gITAsIE0gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSwgbmV3IGIoUikub2JzZXJ2ZShNLCB7IGNoYXJhY3RlckRhdGE6ICEwIH0pLCBFID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIE0uZGF0YSA9IEMgPSAhQztcbiAgICAgIH0pIDogRCAmJiBELnJlc29sdmUgPyAoeSA9IEQucmVzb2x2ZSh2b2lkIDApLCBCID0geS50aGVuLCBFID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIEIuY2FsbCh5LCBSKTtcbiAgICAgIH0pIDogRSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBwLmNhbGwocywgUik7XG4gICAgICB9KSwgby5leHBvcnRzID0geCB8fCBmdW5jdGlvbigkKSB7XG4gICAgICAgIHZhciBGID0geyBmbjogJCwgbmV4dDogdm9pZCAwIH07XG4gICAgICAgIEEgJiYgKEEubmV4dCA9IEYpLCB3IHx8ICh3ID0gRiwgRSgpKSwgQSA9IEY7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg4KTtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKGQsIGMpIHtcbiAgICAgICAgdmFyIHAgPSBzLmNvbnNvbGU7XG4gICAgICAgIHAgJiYgcC5lcnJvciAmJiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IHAuZXJyb3IoZCkgOiBwLmVycm9yKGQsIGMpKTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDUpLCBkID0gdCg0MCksIGMgPSB0KDg1KSwgcCA9IHQoMTE5KSwgdiA9IHQoNjYpO1xuICAgICAgcyh7IHRhcmdldDogXCJQcm9taXNlXCIsIHN0YXQ6ICEwIH0sIHsgYWxsU2V0dGxlZDogZnVuY3Rpb24oUykge1xuICAgICAgICB2YXIgRCA9IHRoaXMsIFQgPSBjLmYoRCksIG0gPSBULnJlc29sdmUsIHggPSBULnJlamVjdCwgUiA9IHAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHcgPSBkKEQucmVzb2x2ZSksIEEgPSBbXSwgRSA9IDAsIEMgPSAxO1xuICAgICAgICAgIHYoUywgZnVuY3Rpb24oTSkge1xuICAgICAgICAgICAgdmFyIHkgPSBFKyssIEIgPSAhMTtcbiAgICAgICAgICAgIEEucHVzaCh2b2lkIDApLCBDKyssIHcuY2FsbChELCBNKS50aGVuKGZ1bmN0aW9uKCQpIHtcbiAgICAgICAgICAgICAgQiB8fCAoQiA9ICEwLCBBW3ldID0geyBzdGF0dXM6IFwiZnVsZmlsbGVkXCIsIHZhbHVlOiAkIH0sIC0tQyB8fCBtKEEpKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCQpIHtcbiAgICAgICAgICAgICAgQiB8fCAoQiA9ICEwLCBBW3ldID0geyBzdGF0dXM6IFwicmVqZWN0ZWRcIiwgcmVhc29uOiAkIH0sIC0tQyB8fCBtKEEpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLCAtLUMgfHwgbShBKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBSLmVycm9yICYmIHgoUi52YWx1ZSksIFQucHJvbWlzZTtcbiAgICAgIH0gfSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDUpLCBkID0gdCg0MiksIGMgPSB0KDEwOCksIHAgPSB0KDExKSwgdiA9IHQoMzUpLCBiID0gdCgxMTUpLCBTID0gdCgxMTgpLCBEID0gdCg1MyksIFQgPSAhIWMgJiYgcChmdW5jdGlvbigpIHtcbiAgICAgICAgYy5wcm90b3R5cGUuZmluYWxseS5jYWxsKHsgdGhlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIH0gfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBzKHsgdGFyZ2V0OiBcIlByb21pc2VcIiwgcHJvdG86ICEwLCByZWFsOiAhMCwgZm9yY2VkOiBUIH0sIHsgZmluYWxseTogZnVuY3Rpb24oeCkge1xuICAgICAgICB2YXIgUiA9IGIodGhpcywgdihcIlByb21pc2VcIikpLCB3ID0gdHlwZW9mIHggPT0gXCJmdW5jdGlvblwiO1xuICAgICAgICByZXR1cm4gdGhpcy50aGVuKHcgPyBmdW5jdGlvbihBKSB7XG4gICAgICAgICAgcmV0dXJuIFMoUiwgeCgpKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIEE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gOiB4LCB3ID8gZnVuY3Rpb24oQSkge1xuICAgICAgICAgIHJldHVybiBTKFIsIHgoKSkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRocm93IEE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gOiB4KTtcbiAgICAgIH0gfSksICFkICYmIHR5cGVvZiBjID09IFwiZnVuY3Rpb25cIiAmJiAhYy5wcm90b3R5cGUuZmluYWxseSAmJiBEKGMucHJvdG90eXBlLCBcImZpbmFsbHlcIiwgdihcIlByb21pc2VcIikucHJvdG90eXBlLmZpbmFsbHkpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHQoNTQpO1xuICAgICAgdmFyIHMgPSB0KDE4MSksIGQgPSB0KDY1KSwgYyA9IEFycmF5LnByb3RvdHlwZSwgcCA9IHsgRE9NVG9rZW5MaXN0OiAhMCwgTm9kZUxpc3Q6ICEwIH07XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbih2KSB7XG4gICAgICAgIHZhciBiID0gdi5mb3JFYWNoO1xuICAgICAgICByZXR1cm4gdiA9PT0gYyB8fCB2IGluc3RhbmNlb2YgQXJyYXkgJiYgYiA9PT0gYy5mb3JFYWNoIHx8IHAuaGFzT3duUHJvcGVydHkoZCh2KSkgPyBzIDogYjtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDE4Mik7XG4gICAgICBvLmV4cG9ydHMgPSBzO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHQoMTgzKTtcbiAgICAgIHZhciBzID0gdCgxNSk7XG4gICAgICBvLmV4cG9ydHMgPSBzKFwiQXJyYXlcIikuZm9yRWFjaDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNSksIGQgPSB0KDE4NCk7XG4gICAgICBzKHsgdGFyZ2V0OiBcIkFycmF5XCIsIHByb3RvOiAhMCwgZm9yY2VkOiBbXS5mb3JFYWNoICE9IGQgfSwgeyBmb3JFYWNoOiBkIH0pO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgzMCkuZm9yRWFjaCwgZCA9IHQoNjcpLCBjID0gdCgyMiksIHAgPSBkKFwiZm9yRWFjaFwiKSwgdiA9IGMoXCJmb3JFYWNoXCIpO1xuICAgICAgby5leHBvcnRzID0gIXAgfHwgIXYgPyBmdW5jdGlvbihTKSB7XG4gICAgICAgIHJldHVybiBzKHRoaXMsIFMsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdm9pZCAwKTtcbiAgICAgIH0gOiBbXS5mb3JFYWNoO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxODYpO1xuICAgICAgby5leHBvcnRzID0gcztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB0KDE4Nyk7XG4gICAgICB2YXIgcyA9IHQoOSk7XG4gICAgICBvLmV4cG9ydHMgPSBzLkFycmF5LmlzQXJyYXk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDUpLCBkID0gdCg1NSk7XG4gICAgICBzKHsgdGFyZ2V0OiBcIkFycmF5XCIsIHN0YXQ6ICEwIH0sIHsgaXNBcnJheTogZCB9KTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTg5KTtcbiAgICAgIG8uZXhwb3J0cyA9IHM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDE5MCksIGQgPSBBcnJheS5wcm90b3R5cGU7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihjKSB7XG4gICAgICAgIHZhciBwID0gYy5tYXA7XG4gICAgICAgIHJldHVybiBjID09PSBkIHx8IGMgaW5zdGFuY2VvZiBBcnJheSAmJiBwID09PSBkLm1hcCA/IHMgOiBwO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB0KDE5MSk7XG4gICAgICB2YXIgcyA9IHQoMTUpO1xuICAgICAgby5leHBvcnRzID0gcyhcIkFycmF5XCIpLm1hcDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNSksIGQgPSB0KDMwKS5tYXAsIGMgPSB0KDU2KSwgcCA9IHQoMjIpLCB2ID0gYyhcIm1hcFwiKSwgYiA9IHAoXCJtYXBcIik7XG4gICAgICBzKHsgdGFyZ2V0OiBcIkFycmF5XCIsIHByb3RvOiAhMCwgZm9yY2VkOiAhdiB8fCAhYiB9LCB7IG1hcDogZnVuY3Rpb24oRCkge1xuICAgICAgICByZXR1cm4gZCh0aGlzLCBELCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHZvaWQgMCk7XG4gICAgICB9IH0pO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxOTMpO1xuICAgICAgby5leHBvcnRzID0gcztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTk0KSwgZCA9IFN0cmluZy5wcm90b3R5cGU7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihjKSB7XG4gICAgICAgIHZhciBwID0gYy50cmltO1xuICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT0gXCJzdHJpbmdcIiB8fCBjID09PSBkIHx8IGMgaW5zdGFuY2VvZiBTdHJpbmcgJiYgcCA9PT0gZC50cmltID8gcyA6IHA7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHQoMTk1KTtcbiAgICAgIHZhciBzID0gdCgxNSk7XG4gICAgICBvLmV4cG9ydHMgPSBzKFwiU3RyaW5nXCIpLnRyaW07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDUpLCBkID0gdCg5MCkudHJpbSwgYyA9IHQoMTk2KTtcbiAgICAgIHMoeyB0YXJnZXQ6IFwiU3RyaW5nXCIsIHByb3RvOiAhMCwgZm9yY2VkOiBjKFwidHJpbVwiKSB9LCB7IHRyaW06IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZCh0aGlzKTtcbiAgICAgIH0gfSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDExKSwgZCA9IHQoNjgpLCBjID0gXCJcXHUyMDBCXFx4ODVcXHUxODBFXCI7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihwKSB7XG4gICAgICAgIHJldHVybiBzKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAhIWRbcF0oKSB8fCBjW3BdKCkgIT0gYyB8fCBkW3BdLm5hbWUgIT09IHA7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTk4KTtcbiAgICAgIG8uZXhwb3J0cyA9IHM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdCgxOTkpLCB0KDYxKSwgdCg1MCksIHQoNTQpO1xuICAgICAgdmFyIHMgPSB0KDkpO1xuICAgICAgby5leHBvcnRzID0gcy5NYXA7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDEyMSksIGQgPSB0KDEyMyk7XG4gICAgICBvLmV4cG9ydHMgPSBzKFwiTWFwXCIsIGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBjKHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB2b2lkIDApO1xuICAgICAgICB9O1xuICAgICAgfSwgZCk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDExKTtcbiAgICAgIG8uZXhwb3J0cyA9ICFzKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyMDIpO1xuICAgICAgby5leHBvcnRzID0gcztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjAzKSwgZCA9IEFycmF5LnByb3RvdHlwZTtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgdmFyIHAgPSBjLmluZGV4T2Y7XG4gICAgICAgIHJldHVybiBjID09PSBkIHx8IGMgaW5zdGFuY2VvZiBBcnJheSAmJiBwID09PSBkLmluZGV4T2YgPyBzIDogcDtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdCgyMDQpO1xuICAgICAgdmFyIHMgPSB0KDE1KTtcbiAgICAgIG8uZXhwb3J0cyA9IHMoXCJBcnJheVwiKS5pbmRleE9mO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg1KSwgZCA9IHQoNzgpLmluZGV4T2YsIGMgPSB0KDY3KSwgcCA9IHQoMjIpLCB2ID0gW10uaW5kZXhPZiwgYiA9ICEhdiAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMCwgUyA9IGMoXCJpbmRleE9mXCIpLCBEID0gcChcImluZGV4T2ZcIiwgeyBBQ0NFU1NPUlM6ICEwLCAxOiAwIH0pO1xuICAgICAgcyh7IHRhcmdldDogXCJBcnJheVwiLCBwcm90bzogITAsIGZvcmNlZDogYiB8fCAhUyB8fCAhRCB9LCB7IGluZGV4T2Y6IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgcmV0dXJuIGIgPyB2LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMCA6IGQodGhpcywgbSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB2b2lkIDApO1xuICAgICAgfSB9KTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjA2KTtcbiAgICAgIG8uZXhwb3J0cyA9IHM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDIwNyksIGQgPSBBcnJheS5wcm90b3R5cGU7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihjKSB7XG4gICAgICAgIHZhciBwID0gYy5zcGxpY2U7XG4gICAgICAgIHJldHVybiBjID09PSBkIHx8IGMgaW5zdGFuY2VvZiBBcnJheSAmJiBwID09PSBkLnNwbGljZSA/IHMgOiBwO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB0KDIwOCk7XG4gICAgICB2YXIgcyA9IHQoMTUpO1xuICAgICAgby5leHBvcnRzID0gcyhcIkFycmF5XCIpLnNwbGljZTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNSksIGQgPSB0KDc5KSwgYyA9IHQoNjIpLCBwID0gdCgzNCksIHYgPSB0KDI5KSwgYiA9IHQoODgpLCBTID0gdCg2OSksIEQgPSB0KDU2KSwgVCA9IHQoMjIpLCBtID0gRChcInNwbGljZVwiKSwgeCA9IFQoXCJzcGxpY2VcIiwgeyBBQ0NFU1NPUlM6ICEwLCAwOiAwLCAxOiAyIH0pLCBSID0gTWF0aC5tYXgsIHcgPSBNYXRoLm1pbiwgQSA9IDkwMDcxOTkyNTQ3NDA5OTEsIEUgPSBcIk1heGltdW0gYWxsb3dlZCBsZW5ndGggZXhjZWVkZWRcIjtcbiAgICAgIHMoeyB0YXJnZXQ6IFwiQXJyYXlcIiwgcHJvdG86ICEwLCBmb3JjZWQ6ICFtIHx8ICF4IH0sIHsgc3BsaWNlOiBmdW5jdGlvbihNLCB5KSB7XG4gICAgICAgIHZhciBCID0gdih0aGlzKSwgJCA9IHAoQi5sZW5ndGgpLCBGID0gZChNLCAkKSwgayA9IGFyZ3VtZW50cy5sZW5ndGgsIGgsIE4sIFAsIGosIEksIFY7XG4gICAgICAgIGlmIChrID09PSAwID8gaCA9IE4gPSAwIDogayA9PT0gMSA/IChoID0gMCwgTiA9ICQgLSBGKSA6IChoID0gayAtIDIsIE4gPSB3KFIoYyh5KSwgMCksICQgLSBGKSksICQgKyBoIC0gTiA+IEEpXG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKEUpO1xuICAgICAgICBmb3IgKFAgPSBiKEIsIE4pLCBqID0gMDsgaiA8IE47IGorKylcbiAgICAgICAgICBJID0gRiArIGosIEkgaW4gQiAmJiBTKFAsIGosIEJbSV0pO1xuICAgICAgICBpZiAoUC5sZW5ndGggPSBOLCBoIDwgTikge1xuICAgICAgICAgIGZvciAoaiA9IEY7IGogPCAkIC0gTjsgaisrKVxuICAgICAgICAgICAgSSA9IGogKyBOLCBWID0gaiArIGgsIEkgaW4gQiA/IEJbVl0gPSBCW0ldIDogZGVsZXRlIEJbVl07XG4gICAgICAgICAgZm9yIChqID0gJDsgaiA+ICQgLSBOICsgaDsgai0tKVxuICAgICAgICAgICAgZGVsZXRlIEJbaiAtIDFdO1xuICAgICAgICB9IGVsc2UgaWYgKGggPiBOKVxuICAgICAgICAgIGZvciAoaiA9ICQgLSBOOyBqID4gRjsgai0tKVxuICAgICAgICAgICAgSSA9IGogKyBOIC0gMSwgViA9IGogKyBoIC0gMSwgSSBpbiBCID8gQltWXSA9IEJbSV0gOiBkZWxldGUgQltWXTtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGg7IGorKylcbiAgICAgICAgICBCW2ogKyBGXSA9IGFyZ3VtZW50c1tqICsgMl07XG4gICAgICAgIHJldHVybiBCLmxlbmd0aCA9ICQgLSBOICsgaCwgUDtcbiAgICAgIH0gfSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDIxMCk7XG4gICAgICBvLmV4cG9ydHMgPSBzO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyMTEpLCBkID0gQXJyYXkucHJvdG90eXBlO1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24oYykge1xuICAgICAgICB2YXIgcCA9IGMuZmlsdGVyO1xuICAgICAgICByZXR1cm4gYyA9PT0gZCB8fCBjIGluc3RhbmNlb2YgQXJyYXkgJiYgcCA9PT0gZC5maWx0ZXIgPyBzIDogcDtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdCgyMTIpO1xuICAgICAgdmFyIHMgPSB0KDE1KTtcbiAgICAgIG8uZXhwb3J0cyA9IHMoXCJBcnJheVwiKS5maWx0ZXI7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDUpLCBkID0gdCgzMCkuZmlsdGVyLCBjID0gdCg1NiksIHAgPSB0KDIyKSwgdiA9IGMoXCJmaWx0ZXJcIiksIGIgPSBwKFwiZmlsdGVyXCIpO1xuICAgICAgcyh7IHRhcmdldDogXCJBcnJheVwiLCBwcm90bzogITAsIGZvcmNlZDogIXYgfHwgIWIgfSwgeyBmaWx0ZXI6IGZ1bmN0aW9uKEQpIHtcbiAgICAgICAgcmV0dXJuIGQodGhpcywgRCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB2b2lkIDApO1xuICAgICAgfSB9KTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjE0KTtcbiAgICAgIG8uZXhwb3J0cyA9IHM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDIxNSksIGQgPSB0KDIxNyksIGMgPSBBcnJheS5wcm90b3R5cGUsIHAgPSBTdHJpbmcucHJvdG90eXBlO1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24odikge1xuICAgICAgICB2YXIgYiA9IHYuaW5jbHVkZXM7XG4gICAgICAgIHJldHVybiB2ID09PSBjIHx8IHYgaW5zdGFuY2VvZiBBcnJheSAmJiBiID09PSBjLmluY2x1ZGVzID8gcyA6IHR5cGVvZiB2ID09IFwic3RyaW5nXCIgfHwgdiA9PT0gcCB8fCB2IGluc3RhbmNlb2YgU3RyaW5nICYmIGIgPT09IHAuaW5jbHVkZXMgPyBkIDogYjtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdCgyMTYpO1xuICAgICAgdmFyIHMgPSB0KDE1KTtcbiAgICAgIG8uZXhwb3J0cyA9IHMoXCJBcnJheVwiKS5pbmNsdWRlcztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNSksIGQgPSB0KDc4KS5pbmNsdWRlcywgYyA9IHQoODIpLCBwID0gdCgyMiksIHYgPSBwKFwiaW5kZXhPZlwiLCB7IEFDQ0VTU09SUzogITAsIDE6IDAgfSk7XG4gICAgICBzKHsgdGFyZ2V0OiBcIkFycmF5XCIsIHByb3RvOiAhMCwgZm9yY2VkOiAhdiB9LCB7IGluY2x1ZGVzOiBmdW5jdGlvbihTKSB7XG4gICAgICAgIHJldHVybiBkKHRoaXMsIFMsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdm9pZCAwKTtcbiAgICAgIH0gfSksIGMoXCJpbmNsdWRlc1wiKTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB0KDIxOCk7XG4gICAgICB2YXIgcyA9IHQoMTUpO1xuICAgICAgby5leHBvcnRzID0gcyhcIlN0cmluZ1wiKS5pbmNsdWRlcztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNSksIGQgPSB0KDIxOSksIGMgPSB0KDQ5KSwgcCA9IHQoMjIxKTtcbiAgICAgIHMoeyB0YXJnZXQ6IFwiU3RyaW5nXCIsIHByb3RvOiAhMCwgZm9yY2VkOiAhcChcImluY2x1ZGVzXCIpIH0sIHsgaW5jbHVkZXM6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuICEhflN0cmluZyhjKHRoaXMpKS5pbmRleE9mKGQoYiksIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdm9pZCAwKTtcbiAgICAgIH0gfSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDIyMCk7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihkKSB7XG4gICAgICAgIGlmIChzKGQpKVxuICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxMyksIGQgPSB0KDMzKSwgYyA9IHQoMTApLCBwID0gYyhcIm1hdGNoXCIpO1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24odikge1xuICAgICAgICB2YXIgYjtcbiAgICAgICAgcmV0dXJuIHModikgJiYgKChiID0gdltwXSkgIT09IHZvaWQgMCA/ICEhYiA6IGQodikgPT0gXCJSZWdFeHBcIik7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxMCksIGQgPSBzKFwibWF0Y2hcIik7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihjKSB7XG4gICAgICAgIHZhciBwID0gLy4vO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIFwiLy4vXCJbY10ocCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gcFtkXSA9ICExLCBcIi8uL1wiW2NdKHApO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyMjMpO1xuICAgICAgby5leHBvcnRzID0gcztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjI0KSwgZCA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbiAgICAgIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgdmFyIHAgPSBjLmJpbmQ7XG4gICAgICAgIHJldHVybiBjID09PSBkIHx8IGMgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBwID09PSBkLmJpbmQgPyBzIDogcDtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdCgyMjUpO1xuICAgICAgdmFyIHMgPSB0KDE1KTtcbiAgICAgIG8uZXhwb3J0cyA9IHMoXCJGdW5jdGlvblwiKS5iaW5kO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg1KSwgZCA9IHQoMjI2KTtcbiAgICAgIHMoeyB0YXJnZXQ6IFwiRnVuY3Rpb25cIiwgcHJvdG86ICEwIH0sIHsgYmluZDogZCB9KTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNDApLCBkID0gdCgxMyksIGMgPSBbXS5zbGljZSwgcCA9IHt9LCB2ID0gZnVuY3Rpb24oUywgRCwgVCkge1xuICAgICAgICBpZiAoIShEIGluIHApKSB7XG4gICAgICAgICAgZm9yICh2YXIgbSA9IFtdLCB4ID0gMDsgeCA8IEQ7IHgrKylcbiAgICAgICAgICAgIG1beF0gPSBcImFbXCIgKyB4ICsgXCJdXCI7XG4gICAgICAgICAgcFtEXSA9IEZ1bmN0aW9uKFwiQyxhXCIsIFwicmV0dXJuIG5ldyBDKFwiICsgbS5qb2luKFwiLFwiKSArIFwiKVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcFtEXShTLCBUKTtcbiAgICAgIH07XG4gICAgICBvLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uKFMpIHtcbiAgICAgICAgdmFyIEQgPSBzKHRoaXMpLCBUID0gYy5jYWxsKGFyZ3VtZW50cywgMSksIG0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgUiA9IFQuY29uY2F0KGMuY2FsbChhcmd1bWVudHMpKTtcbiAgICAgICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG0gPyB2KEQsIFIubGVuZ3RoLCBSKSA6IEQuYXBwbHkoUywgUik7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBkKEQucHJvdG90eXBlKSAmJiAobS5wcm90b3R5cGUgPSBELnByb3RvdHlwZSksIG07XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIG8uZXhwb3J0cyA9IHQoMjI4KTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjI5KTtcbiAgICAgIG8uZXhwb3J0cyA9IHM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdCgxMjQpLCB0KDUwKSwgdCg1NCk7XG4gICAgICB2YXIgcyA9IHQoOTMpO1xuICAgICAgby5leHBvcnRzID0gcy5mKFwiaXRlcmF0b3JcIik7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgby5leHBvcnRzID0gdCgyMzEpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyMzIpO1xuICAgICAgdCgyNTEpLCB0KDI1MiksIHQoMjUzKSwgdCgyNTQpLCB0KDI1NSksIG8uZXhwb3J0cyA9IHM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdCgyMzMpLCB0KDYxKSwgdCgyMzQpLCB0KDIzNiksIHQoMjM3KSwgdCgyMzgpLCB0KDIzOSksIHQoMTI0KSwgdCgyNDApLCB0KDI0MSksIHQoMjQyKSwgdCgyNDMpLCB0KDI0NCksIHQoMjQ1KSwgdCgyNDYpLCB0KDI0NyksIHQoMjQ4KSwgdCgyNDkpLCB0KDI1MCk7XG4gICAgICB2YXIgcyA9IHQoOSk7XG4gICAgICBvLmV4cG9ydHMgPSBzLlN5bWJvbDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNSksIGQgPSB0KDExKSwgYyA9IHQoNTUpLCBwID0gdCgxMyksIHYgPSB0KDI5KSwgYiA9IHQoMzQpLCBTID0gdCg2OSksIEQgPSB0KDg4KSwgVCA9IHQoNTYpLCBtID0gdCgxMCksIHggPSB0KDg2KSwgUiA9IG0oXCJpc0NvbmNhdFNwcmVhZGFibGVcIiksIHcgPSA5MDA3MTk5MjU0NzQwOTkxLCBBID0gXCJNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWRcIiwgRSA9IHggPj0gNTEgfHwgIWQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBCID0gW107XG4gICAgICAgIHJldHVybiBCW1JdID0gITEsIEIuY29uY2F0KClbMF0gIT09IEI7XG4gICAgICB9KSwgQyA9IFQoXCJjb25jYXRcIiksIE0gPSBmdW5jdGlvbigkKSB7XG4gICAgICAgIGlmICghcCgkKSlcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIHZhciBGID0gJFtSXTtcbiAgICAgICAgcmV0dXJuIEYgIT09IHZvaWQgMCA/ICEhRiA6IGMoJCk7XG4gICAgICB9LCB5ID0gIUUgfHwgIUM7XG4gICAgICBzKHsgdGFyZ2V0OiBcIkFycmF5XCIsIHByb3RvOiAhMCwgZm9yY2VkOiB5IH0sIHsgY29uY2F0OiBmdW5jdGlvbigkKSB7XG4gICAgICAgIHZhciBGID0gdih0aGlzKSwgayA9IEQoRiwgMCksIGggPSAwLCBOLCBQLCBqLCBJLCBWO1xuICAgICAgICBmb3IgKE4gPSAtMSwgaiA9IGFyZ3VtZW50cy5sZW5ndGg7IE4gPCBqOyBOKyspXG4gICAgICAgICAgaWYgKFYgPSBOID09PSAtMSA/IEYgOiBhcmd1bWVudHNbTl0sIE0oVikpIHtcbiAgICAgICAgICAgIGlmIChJID0gYihWLmxlbmd0aCksIGggKyBJID4gdylcbiAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKEEpO1xuICAgICAgICAgICAgZm9yIChQID0gMDsgUCA8IEk7IFArKywgaCsrKVxuICAgICAgICAgICAgICBQIGluIFYgJiYgUyhrLCBoLCBWW1BdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGggPj0gdylcbiAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKEEpO1xuICAgICAgICAgICAgUyhrLCBoKyssIFYpO1xuICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGsubGVuZ3RoID0gaCwgaztcbiAgICAgIH0gfSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDUpLCBkID0gdCg4KSwgYyA9IHQoMzUpLCBwID0gdCg0MiksIHYgPSB0KDE0KSwgYiA9IHQoNzYpLCBTID0gdCgxMDUpLCBEID0gdCgxMSksIFQgPSB0KDE2KSwgbSA9IHQoNTUpLCB4ID0gdCgxMyksIFIgPSB0KDI1KSwgdyA9IHQoMjkpLCBBID0gdCgyOCksIEUgPSB0KDYwKSwgQyA9IHQoNDgpLCBNID0gdCg3NyksIHkgPSB0KDUyKSwgQiA9IHQoMTI1KSwgJCA9IHQoMjM1KSwgRiA9IHQoMTI2KSwgayA9IHQoNzEpLCBoID0gdCgxOCksIE4gPSB0KDU5KSwgUCA9IHQoMTkpLCBqID0gdCg1MyksIEkgPSB0KDc0KSwgViA9IHQoNjMpLCBXID0gdCg1MSksIFEgPSB0KDY0KSwgWCA9IHQoMTApLCBKID0gdCg5MyksIFogPSB0KDEyKSwgZGUgPSB0KDM2KSwgdmUgPSB0KDQxKSwgc2UgPSB0KDMwKS5mb3JFYWNoLCBtZSA9IFYoXCJoaWRkZW5cIiksIGxlID0gXCJTeW1ib2xcIiwgaWUgPSBcInByb3RvdHlwZVwiLCBwZSA9IFgoXCJ0b1ByaW1pdGl2ZVwiKSwgdGUgPSB2ZS5zZXQsIGdlID0gdmUuZ2V0dGVyRm9yKGxlKSwgQWUgPSBPYmplY3RbaWVdLCBNZSA9IGQuU3ltYm9sLCBZZSA9IGMoXCJKU09OXCIsIFwic3RyaW5naWZ5XCIpLCBudCA9IGsuZiwgZXQgPSBoLmYsIGd0ID0gJC5mLCB5dCA9IE4uZiwgQmUgPSBJKFwic3ltYm9sc1wiKSwgcHQgPSBJKFwib3Atc3ltYm9sc1wiKSwgc24gPSBJKFwic3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeVwiKSwgQnQgPSBJKFwic3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeVwiKSwgZHIgPSBJKFwid2tzXCIpLCAkbiA9IGQuUU9iamVjdCwgdm4gPSAhJG4gfHwgISRuW2llXSB8fCAhJG5baWVdLmZpbmRDaGlsZCwgbW4gPSB2ICYmIEQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNKGV0KHt9LCBcImFcIiwgeyBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBldCh0aGlzLCBcImFcIiwgeyB2YWx1ZTogNyB9KS5hO1xuICAgICAgICB9IH0pKS5hICE9IDc7XG4gICAgICB9KSA/IGZ1bmN0aW9uKFJlLCBuZSwgTGUpIHtcbiAgICAgICAgdmFyIE9lID0gbnQoQWUsIG5lKTtcbiAgICAgICAgT2UgJiYgZGVsZXRlIEFlW25lXSwgZXQoUmUsIG5lLCBMZSksIE9lICYmIFJlICE9PSBBZSAmJiBldChBZSwgbmUsIE9lKTtcbiAgICAgIH0gOiBldCwga24gPSBmdW5jdGlvbihuZSwgTGUpIHtcbiAgICAgICAgdmFyIE9lID0gQmVbbmVdID0gTShNZVtpZV0pO1xuICAgICAgICByZXR1cm4gdGUoT2UsIHsgdHlwZTogbGUsIHRhZzogbmUsIGRlc2NyaXB0aW9uOiBMZSB9KSwgdiB8fCAoT2UuZGVzY3JpcHRpb24gPSBMZSksIE9lO1xuICAgICAgfSwgZ24gPSBTID8gZnVuY3Rpb24oUmUpIHtcbiAgICAgICAgcmV0dXJuIHp0KFJlKSA9PSBcInN5bWJvbFwiO1xuICAgICAgfSA6IGZ1bmN0aW9uKFJlKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QoUmUpIGluc3RhbmNlb2YgTWU7XG4gICAgICB9LCB4biA9IGZ1bmN0aW9uKG5lLCBMZSwgT2UpIHtcbiAgICAgICAgbmUgPT09IEFlICYmIHhuKHB0LCBMZSwgT2UpLCBSKG5lKTtcbiAgICAgICAgdmFyIFBlID0gRShMZSwgITApO1xuICAgICAgICByZXR1cm4gUihPZSksIFQoQmUsIFBlKSA/IChPZS5lbnVtZXJhYmxlID8gKFQobmUsIG1lKSAmJiBuZVttZV1bUGVdICYmIChuZVttZV1bUGVdID0gITEpLCBPZSA9IE0oT2UsIHsgZW51bWVyYWJsZTogQygwLCAhMSkgfSkpIDogKFQobmUsIG1lKSB8fCBldChuZSwgbWUsIEMoMSwge30pKSwgbmVbbWVdW1BlXSA9ICEwKSwgbW4obmUsIFBlLCBPZSkpIDogZXQobmUsIFBlLCBPZSk7XG4gICAgICB9LCBPdCA9IGZ1bmN0aW9uKG5lLCBMZSkge1xuICAgICAgICBSKG5lKTtcbiAgICAgICAgdmFyIE9lID0gQShMZSksIFBlID0geShPZSkuY29uY2F0KHdlKE9lKSk7XG4gICAgICAgIHJldHVybiBzZShQZSwgZnVuY3Rpb24oUWUpIHtcbiAgICAgICAgICAoIXYgfHwgdW4uY2FsbChPZSwgUWUpKSAmJiB4bihuZSwgUWUsIE9lW1FlXSk7XG4gICAgICAgIH0pLCBuZTtcbiAgICAgIH0sIGF0ID0gZnVuY3Rpb24obmUsIExlKSB7XG4gICAgICAgIHJldHVybiBMZSA9PT0gdm9pZCAwID8gTShuZSkgOiBPdChNKG5lKSwgTGUpO1xuICAgICAgfSwgdW4gPSBmdW5jdGlvbihuZSkge1xuICAgICAgICB2YXIgTGUgPSBFKG5lLCAhMCksIE9lID0geXQuY2FsbCh0aGlzLCBMZSk7XG4gICAgICAgIHJldHVybiB0aGlzID09PSBBZSAmJiBUKEJlLCBMZSkgJiYgIVQocHQsIExlKSA/ICExIDogT2UgfHwgIVQodGhpcywgTGUpIHx8ICFUKEJlLCBMZSkgfHwgVCh0aGlzLCBtZSkgJiYgdGhpc1ttZV1bTGVdID8gT2UgOiAhMDtcbiAgICAgIH0sIHFlID0gZnVuY3Rpb24obmUsIExlKSB7XG4gICAgICAgIHZhciBPZSA9IEEobmUpLCBQZSA9IEUoTGUsICEwKTtcbiAgICAgICAgaWYgKCEoT2UgPT09IEFlICYmIFQoQmUsIFBlKSAmJiAhVChwdCwgUGUpKSkge1xuICAgICAgICAgIHZhciBRZSA9IG50KE9lLCBQZSk7XG4gICAgICAgICAgcmV0dXJuIFFlICYmIFQoQmUsIFBlKSAmJiAhKFQoT2UsIG1lKSAmJiBPZVttZV1bUGVdKSAmJiAoUWUuZW51bWVyYWJsZSA9ICEwKSwgUWU7XG4gICAgICAgIH1cbiAgICAgIH0sIERlID0gZnVuY3Rpb24obmUpIHtcbiAgICAgICAgdmFyIExlID0gZ3QoQShuZSkpLCBPZSA9IFtdO1xuICAgICAgICByZXR1cm4gc2UoTGUsIGZ1bmN0aW9uKFBlKSB7XG4gICAgICAgICAgIVQoQmUsIFBlKSAmJiAhVChXLCBQZSkgJiYgT2UucHVzaChQZSk7XG4gICAgICAgIH0pLCBPZTtcbiAgICAgIH0sIHdlID0gZnVuY3Rpb24obmUpIHtcbiAgICAgICAgdmFyIExlID0gbmUgPT09IEFlLCBPZSA9IGd0KExlID8gcHQgOiBBKG5lKSksIFBlID0gW107XG4gICAgICAgIHJldHVybiBzZShPZSwgZnVuY3Rpb24oUWUpIHtcbiAgICAgICAgICBUKEJlLCBRZSkgJiYgKCFMZSB8fCBUKEFlLCBRZSkpICYmIFBlLnB1c2goQmVbUWVdKTtcbiAgICAgICAgfSksIFBlO1xuICAgICAgfTtcbiAgICAgIGlmIChiIHx8IChNZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIE1lKVxuICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvclwiKTtcbiAgICAgICAgdmFyIG5lID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB2b2lkIDAgPyB2b2lkIDAgOiBTdHJpbmcoYXJndW1lbnRzWzBdKSwgTGUgPSBRKG5lKSwgT2UgPSBmdW5jdGlvbiBQZShRZSkge1xuICAgICAgICAgIHRoaXMgPT09IEFlICYmIFBlLmNhbGwocHQsIFFlKSwgVCh0aGlzLCBtZSkgJiYgVCh0aGlzW21lXSwgTGUpICYmICh0aGlzW21lXVtMZV0gPSAhMSksIG1uKHRoaXMsIExlLCBDKDEsIFFlKSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB2ICYmIHZuICYmIG1uKEFlLCBMZSwgeyBjb25maWd1cmFibGU6ICEwLCBzZXQ6IE9lIH0pLCBrbihMZSwgbmUpO1xuICAgICAgfSwgaihNZVtpZV0sIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZSh0aGlzKS50YWc7XG4gICAgICB9KSwgaihNZSwgXCJ3aXRob3V0U2V0dGVyXCIsIGZ1bmN0aW9uKFJlKSB7XG4gICAgICAgIHJldHVybiBrbihRKFJlKSwgUmUpO1xuICAgICAgfSksIE4uZiA9IHVuLCBoLmYgPSB4biwgay5mID0gcWUsIEIuZiA9ICQuZiA9IERlLCBGLmYgPSB3ZSwgSi5mID0gZnVuY3Rpb24oUmUpIHtcbiAgICAgICAgcmV0dXJuIGtuKFgoUmUpLCBSZSk7XG4gICAgICB9LCB2ICYmIChldChNZVtpZV0sIFwiZGVzY3JpcHRpb25cIiwgeyBjb25maWd1cmFibGU6ICEwLCBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2UodGhpcykuZGVzY3JpcHRpb247XG4gICAgICB9IH0pLCBwIHx8IGooQWUsIFwicHJvcGVydHlJc0VudW1lcmFibGVcIiwgdW4sIHsgdW5zYWZlOiAhMCB9KSkpLCBzKHsgZ2xvYmFsOiAhMCwgd3JhcDogITAsIGZvcmNlZDogIWIsIHNoYW06ICFiIH0sIHsgU3ltYm9sOiBNZSB9KSwgc2UoeShkciksIGZ1bmN0aW9uKFJlKSB7XG4gICAgICAgIFooUmUpO1xuICAgICAgfSksIHMoeyB0YXJnZXQ6IGxlLCBzdGF0OiAhMCwgZm9yY2VkOiAhYiB9LCB7XG4gICAgICAgIGZvcjogZnVuY3Rpb24obmUpIHtcbiAgICAgICAgICB2YXIgTGUgPSBTdHJpbmcobmUpO1xuICAgICAgICAgIGlmIChUKHNuLCBMZSkpXG4gICAgICAgICAgICByZXR1cm4gc25bTGVdO1xuICAgICAgICAgIHZhciBPZSA9IE1lKExlKTtcbiAgICAgICAgICByZXR1cm4gc25bTGVdID0gT2UsIEJ0W09lXSA9IExlLCBPZTtcbiAgICAgICAgfSxcbiAgICAgICAga2V5Rm9yOiBmdW5jdGlvbihuZSkge1xuICAgICAgICAgIGlmICghZ24obmUpKVxuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKG5lICsgXCIgaXMgbm90IGEgc3ltYm9sXCIpO1xuICAgICAgICAgIGlmIChUKEJ0LCBuZSkpXG4gICAgICAgICAgICByZXR1cm4gQnRbbmVdO1xuICAgICAgICB9LFxuICAgICAgICB1c2VTZXR0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZuID0gITA7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZVNpbXBsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdm4gPSAhMTtcbiAgICAgICAgfVxuICAgICAgfSksIHMoeyB0YXJnZXQ6IFwiT2JqZWN0XCIsIHN0YXQ6ICEwLCBmb3JjZWQ6ICFiLCBzaGFtOiAhdiB9LCB7XG4gICAgICAgIGNyZWF0ZTogYXQsXG4gICAgICAgIGRlZmluZVByb3BlcnR5OiB4bixcbiAgICAgICAgZGVmaW5lUHJvcGVydGllczogT3QsXG4gICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogcWVcbiAgICAgIH0pLCBzKHsgdGFyZ2V0OiBcIk9iamVjdFwiLCBzdGF0OiAhMCwgZm9yY2VkOiAhYiB9LCB7XG4gICAgICAgIGdldE93blByb3BlcnR5TmFtZXM6IERlLFxuICAgICAgICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IHdlXG4gICAgICB9KSwgcyh7IHRhcmdldDogXCJPYmplY3RcIiwgc3RhdDogITAsIGZvcmNlZDogRChmdW5jdGlvbigpIHtcbiAgICAgICAgRi5mKDEpO1xuICAgICAgfSkgfSwgeyBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uKG5lKSB7XG4gICAgICAgIHJldHVybiBGLmYodyhuZSkpO1xuICAgICAgfSB9KSwgWWUpIHtcbiAgICAgICAgdmFyIFVlID0gIWIgfHwgRChmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgUmUgPSBNZSgpO1xuICAgICAgICAgIHJldHVybiBZZShbUmVdKSAhPSBcIltudWxsXVwiIHx8IFllKHsgYTogUmUgfSkgIT0gXCJ7fVwiIHx8IFllKE9iamVjdChSZSkpICE9IFwie31cIjtcbiAgICAgICAgfSk7XG4gICAgICAgIHMoeyB0YXJnZXQ6IFwiSlNPTlwiLCBzdGF0OiAhMCwgZm9yY2VkOiBVZSB9LCB7XG4gICAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbihuZSwgTGUsIE9lKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBQZSA9IFtuZV0sIFFlID0gMSwgX3Q7IGFyZ3VtZW50cy5sZW5ndGggPiBRZTsgKVxuICAgICAgICAgICAgICBQZS5wdXNoKGFyZ3VtZW50c1tRZSsrXSk7XG4gICAgICAgICAgICBpZiAoX3QgPSBMZSwgISgheChMZSkgJiYgbmUgPT09IHZvaWQgMCB8fCBnbihuZSkpKVxuICAgICAgICAgICAgICByZXR1cm4gbShMZSkgfHwgKExlID0gZnVuY3Rpb24obXQsIGx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfdCA9PSBcImZ1bmN0aW9uXCIgJiYgKGx0ID0gX3QuY2FsbCh0aGlzLCBtdCwgbHQpKSwgIWduKGx0KSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiBsdDtcbiAgICAgICAgICAgICAgfSksIFBlWzFdID0gTGUsIFllLmFwcGx5KG51bGwsIFBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgTWVbaWVdW3BlXSB8fCBQKE1lW2llXSwgcGUsIE1lW2llXS52YWx1ZU9mKSwgZGUoTWUsIGxlKSwgV1ttZV0gPSAhMDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjgpLCBkID0gdCgxMjUpLmYsIGMgPSB7fS50b1N0cmluZywgcCA9ICh0eXBlb2Ygd2luZG93ID4gXCJ1XCIgPyBcInVuZGVmaW5lZFwiIDogenQod2luZG93KSkgPT0gXCJvYmplY3RcIiAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW10sIHYgPSBmdW5jdGlvbihTKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGQoUyk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBwLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBvLmV4cG9ydHMuZiA9IGZ1bmN0aW9uKFMpIHtcbiAgICAgICAgcmV0dXJuIHAgJiYgYy5jYWxsKFMpID09IFwiW29iamVjdCBXaW5kb3ddXCIgPyB2KFMpIDogZChzKFMpKTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDEyKTtcbiAgICAgIHMoXCJhc3luY0l0ZXJhdG9yXCIpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGkpIHtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTIpO1xuICAgICAgcyhcImhhc0luc3RhbmNlXCIpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxMik7XG4gICAgICBzKFwiaXNDb25jYXRTcHJlYWRhYmxlXCIpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxMik7XG4gICAgICBzKFwibWF0Y2hcIik7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDEyKTtcbiAgICAgIHMoXCJtYXRjaEFsbFwiKTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTIpO1xuICAgICAgcyhcInJlcGxhY2VcIik7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDEyKTtcbiAgICAgIHMoXCJzZWFyY2hcIik7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDEyKTtcbiAgICAgIHMoXCJzcGVjaWVzXCIpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxMik7XG4gICAgICBzKFwic3BsaXRcIik7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDEyKTtcbiAgICAgIHMoXCJ0b1ByaW1pdGl2ZVwiKTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTIpO1xuICAgICAgcyhcInRvU3RyaW5nVGFnXCIpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxMik7XG4gICAgICBzKFwidW5zY29wYWJsZXNcIik7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDM2KTtcbiAgICAgIHMoTWF0aCwgXCJNYXRoXCIsICEwKTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoOCksIGQgPSB0KDM2KTtcbiAgICAgIGQocy5KU09OLCBcIkpTT05cIiwgITApO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxMik7XG4gICAgICBzKFwiYXN5bmNEaXNwb3NlXCIpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxMik7XG4gICAgICBzKFwiZGlzcG9zZVwiKTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMTIpO1xuICAgICAgcyhcIm9ic2VydmFibGVcIik7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDEyKTtcbiAgICAgIHMoXCJwYXR0ZXJuTWF0Y2hcIik7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDEyKTtcbiAgICAgIHMoXCJyZXBsYWNlQWxsXCIpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIG8uZXhwb3J0cyA9IHQoMjU3KTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjU4KTtcbiAgICAgIG8uZXhwb3J0cyA9IHM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdCgyNTkpO1xuICAgICAgdmFyIHMgPSB0KDkpO1xuICAgICAgby5leHBvcnRzID0gcy5wYXJzZUludDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNSksIGQgPSB0KDI2MCk7XG4gICAgICBzKHsgZ2xvYmFsOiAhMCwgZm9yY2VkOiBwYXJzZUludCAhPSBkIH0sIHsgcGFyc2VJbnQ6IGQgfSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDgpLCBkID0gdCg5MCkudHJpbSwgYyA9IHQoNjgpLCBwID0gcy5wYXJzZUludCwgdiA9IC9eWystXT8wW1h4XS8sIGIgPSBwKGMgKyBcIjA4XCIpICE9PSA4IHx8IHAoYyArIFwiMHgxNlwiKSAhPT0gMjI7XG4gICAgICBvLmV4cG9ydHMgPSBiID8gZnVuY3Rpb24oRCwgVCkge1xuICAgICAgICB2YXIgbSA9IGQoU3RyaW5nKEQpKTtcbiAgICAgICAgcmV0dXJuIHAobSwgVCA+Pj4gMCB8fCAodi50ZXN0KG0pID8gMTYgOiAxMCkpO1xuICAgICAgfSA6IHA7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDI2Mik7XG4gICAgICBvLmV4cG9ydHMgPSBzO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyNjMpLCBkID0gQXJyYXkucHJvdG90eXBlO1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24oYykge1xuICAgICAgICB2YXIgcCA9IGMuc2xpY2U7XG4gICAgICAgIHJldHVybiBjID09PSBkIHx8IGMgaW5zdGFuY2VvZiBBcnJheSAmJiBwID09PSBkLnNsaWNlID8gcyA6IHA7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHQoMjY0KTtcbiAgICAgIHZhciBzID0gdCgxNSk7XG4gICAgICBvLmV4cG9ydHMgPSBzKFwiQXJyYXlcIikuc2xpY2U7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDUpLCBkID0gdCgxMyksIGMgPSB0KDU1KSwgcCA9IHQoNzkpLCB2ID0gdCgzNCksIGIgPSB0KDI4KSwgUyA9IHQoNjkpLCBEID0gdCgxMCksIFQgPSB0KDU2KSwgbSA9IHQoMjIpLCB4ID0gVChcInNsaWNlXCIpLCBSID0gbShcInNsaWNlXCIsIHsgQUNDRVNTT1JTOiAhMCwgMDogMCwgMTogMiB9KSwgdyA9IEQoXCJzcGVjaWVzXCIpLCBBID0gW10uc2xpY2UsIEUgPSBNYXRoLm1heDtcbiAgICAgIHMoeyB0YXJnZXQ6IFwiQXJyYXlcIiwgcHJvdG86ICEwLCBmb3JjZWQ6ICF4IHx8ICFSIH0sIHsgc2xpY2U6IGZ1bmN0aW9uKE0sIHkpIHtcbiAgICAgICAgdmFyIEIgPSBiKHRoaXMpLCAkID0gdihCLmxlbmd0aCksIEYgPSBwKE0sICQpLCBrID0gcCh5ID09PSB2b2lkIDAgPyAkIDogeSwgJCksIGgsIE4sIFA7XG4gICAgICAgIGlmIChjKEIpICYmIChoID0gQi5jb25zdHJ1Y3RvciwgdHlwZW9mIGggPT0gXCJmdW5jdGlvblwiICYmIChoID09PSBBcnJheSB8fCBjKGgucHJvdG90eXBlKSkgPyBoID0gdm9pZCAwIDogZChoKSAmJiAoaCA9IGhbd10sIGggPT09IG51bGwgJiYgKGggPSB2b2lkIDApKSwgaCA9PT0gQXJyYXkgfHwgaCA9PT0gdm9pZCAwKSlcbiAgICAgICAgICByZXR1cm4gQS5jYWxsKEIsIEYsIGspO1xuICAgICAgICBmb3IgKE4gPSBuZXcgKGggPT09IHZvaWQgMCA/IEFycmF5IDogaCkoRShrIC0gRiwgMCkpLCBQID0gMDsgRiA8IGs7IEYrKywgUCsrKVxuICAgICAgICAgIEYgaW4gQiAmJiBTKE4sIFAsIEJbRl0pO1xuICAgICAgICByZXR1cm4gTi5sZW5ndGggPSBQLCBOO1xuICAgICAgfSB9KTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB0KDI2Nik7XG4gICAgICB2YXIgcyA9IHQoOSk7XG4gICAgICBvLmV4cG9ydHMgPSBzLnNldFRpbWVvdXQ7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDUpLCBkID0gdCg4KSwgYyA9IHQoODQpLCBwID0gW10uc2xpY2UsIHYgPSAvTVNJRSAuXFwuLy50ZXN0KGMpLCBiID0gZnVuY3Rpb24oRCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oVCwgbSkge1xuICAgICAgICAgIHZhciB4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIsIFIgPSB4ID8gcC5jYWxsKGFyZ3VtZW50cywgMikgOiB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIEQoeCA/IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgKHR5cGVvZiBUID09IFwiZnVuY3Rpb25cIiA/IFQgOiBGdW5jdGlvbihUKSkuYXBwbHkodGhpcywgUik7XG4gICAgICAgICAgfSA6IFQsIG0pO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHMoeyBnbG9iYWw6ICEwLCBiaW5kOiAhMCwgZm9yY2VkOiB2IH0sIHtcbiAgICAgICAgc2V0VGltZW91dDogYihkLnNldFRpbWVvdXQpLFxuICAgICAgICBzZXRJbnRlcnZhbDogYihkLnNldEludGVydmFsKVxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCgxMjcpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBwID0gdCgyKSwgdiA9IHAuX19pbXBvcnREZWZhdWx0KHQoMjcyKSksIGIgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDI3MykpLCBTID0gcC5fX2ltcG9ydERlZmF1bHQodCgxMjgpKSwgRCA9IHAuX19pbXBvcnREZWZhdWx0KHQoMjc0KSksIFQgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDI3NSkpLCBtID0gcC5fX2ltcG9ydERlZmF1bHQodCgyNzYpKSwgeCA9IHAuX19pbXBvcnREZWZhdWx0KHQoMTI5KSksIFIgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDI3NykpLCB3ID0gcC5fX2ltcG9ydERlZmF1bHQodCgyNzgpKSwgQSA9IHAuX19pbXBvcnREZWZhdWx0KHQoMjc5KSksIEUgPSAoMCwgYy5kZWZhdWx0KShcbiAgICAgICAge30sXG4gICAgICAgIHYuZGVmYXVsdCxcbiAgICAgICAgYi5kZWZhdWx0LFxuICAgICAgICBTLmRlZmF1bHQsXG4gICAgICAgIFQuZGVmYXVsdCxcbiAgICAgICAgRC5kZWZhdWx0LFxuICAgICAgICBtLmRlZmF1bHQsXG4gICAgICAgIHguZGVmYXVsdCxcbiAgICAgICAgUi5kZWZhdWx0LFxuICAgICAgICB3LmRlZmF1bHQsXG4gICAgICAgIEEuZGVmYXVsdCxcbiAgICAgICAgeyBsaW5rQ2hlY2s6IGZ1bmN0aW9uKE0sIHkpIHtcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIH0gfVxuICAgICAgKTtcbiAgICAgIGkuZGVmYXVsdCA9IEU7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDI2OSk7XG4gICAgICBvLmV4cG9ydHMgPSBzO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHQoMjcwKTtcbiAgICAgIHZhciBzID0gdCg5KTtcbiAgICAgIG8uZXhwb3J0cyA9IHMuT2JqZWN0LmFzc2lnbjtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNSksIGQgPSB0KDI3MSk7XG4gICAgICBzKHsgdGFyZ2V0OiBcIk9iamVjdFwiLCBzdGF0OiAhMCwgZm9yY2VkOiBPYmplY3QuYXNzaWduICE9PSBkIH0sIHsgYXNzaWduOiBkIH0pO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxNCksIGQgPSB0KDExKSwgYyA9IHQoNTIpLCBwID0gdCgxMjYpLCB2ID0gdCg1OSksIGIgPSB0KDI5KSwgUyA9IHQoNzIpLCBEID0gT2JqZWN0LmFzc2lnbiwgVCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbiAgICAgIG8uZXhwb3J0cyA9ICFEIHx8IGQoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChzICYmIEQoeyBiOiAxIH0sIEQoVCh7fSwgXCJhXCIsIHsgZW51bWVyYWJsZTogITAsIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgVCh0aGlzLCBcImJcIiwgeyB2YWx1ZTogMywgZW51bWVyYWJsZTogITEgfSk7XG4gICAgICAgIH0gfSksIHsgYjogMiB9KSkuYiAhPT0gMSlcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIHZhciBtID0ge30sIHggPSB7fSwgUiA9IFN5bWJvbCgpLCB3ID0gXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiO1xuICAgICAgICByZXR1cm4gbVtSXSA9IDcsIHcuc3BsaXQoXCJcIikuZm9yRWFjaChmdW5jdGlvbihBKSB7XG4gICAgICAgICAgeFtBXSA9IEE7XG4gICAgICAgIH0pLCBEKHt9LCBtKVtSXSAhPSA3IHx8IGMoRCh7fSwgeCkpLmpvaW4oXCJcIikgIT0gdztcbiAgICAgIH0pID8gZnVuY3Rpb24oeCwgUikge1xuICAgICAgICBmb3IgKHZhciB3ID0gYih4KSwgQSA9IGFyZ3VtZW50cy5sZW5ndGgsIEUgPSAxLCBDID0gcC5mLCBNID0gdi5mOyBBID4gRTsgKVxuICAgICAgICAgIGZvciAodmFyIHkgPSBTKGFyZ3VtZW50c1tFKytdKSwgQiA9IEMgPyBjKHkpLmNvbmNhdChDKHkpKSA6IGMoeSksICQgPSBCLmxlbmd0aCwgRiA9IDAsIGs7ICQgPiBGOyApXG4gICAgICAgICAgICBrID0gQltGKytdLCAoIXMgfHwgTS5jYWxsKHksIGspKSAmJiAod1trXSA9IHlba10pO1xuICAgICAgICByZXR1cm4gdztcbiAgICAgIH0gOiBEO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSksIGkuZGVmYXVsdCA9IHtcbiAgICAgICAgbWVudXM6IFtcbiAgICAgICAgICBcImhlYWRcIixcbiAgICAgICAgICBcImJvbGRcIixcbiAgICAgICAgICBcImZvbnRTaXplXCIsXG4gICAgICAgICAgXCJmb250TmFtZVwiLFxuICAgICAgICAgIFwiaXRhbGljXCIsXG4gICAgICAgICAgXCJ1bmRlcmxpbmVcIixcbiAgICAgICAgICBcInN0cmlrZVRocm91Z2hcIixcbiAgICAgICAgICBcImluZGVudFwiLFxuICAgICAgICAgIFwibGluZUhlaWdodFwiLFxuICAgICAgICAgIFwiZm9yZUNvbG9yXCIsXG4gICAgICAgICAgXCJiYWNrQ29sb3JcIixcbiAgICAgICAgICBcImxpbmtcIixcbiAgICAgICAgICBcImxpc3RcIixcbiAgICAgICAgICBcInRvZG9cIixcbiAgICAgICAgICBcImp1c3RpZnlcIixcbiAgICAgICAgICBcInF1b3RlXCIsXG4gICAgICAgICAgXCJlbW90aWNvblwiLFxuICAgICAgICAgIFwiaW1hZ2VcIixcbiAgICAgICAgICBcInZpZGVvXCIsXG4gICAgICAgICAgXCJ0YWJsZVwiLFxuICAgICAgICAgIFwiY29kZVwiLFxuICAgICAgICAgIFwic3BsaXRMaW5lXCIsXG4gICAgICAgICAgXCJ1bmRvXCIsXG4gICAgICAgICAgXCJyZWRvXCJcbiAgICAgICAgXSxcbiAgICAgICAgZm9udE5hbWVzOiBbXCJcXHU5RUQxXFx1NEY1M1wiLCBcIlxcdTRFRkZcXHU1QjhCXCIsIFwiXFx1Njk3N1xcdTRGNTNcIiwgXCJcXHU2ODA3XFx1Njk3N1xcdTRGNTNcIiwgXCJcXHU1MzRFXFx1NjU4N1xcdTRFRkZcXHU1QjhCXCIsIFwiXFx1NTM0RVxcdTY1ODdcXHU2OTc3XFx1NEY1M1wiLCBcIlxcdTVCOEJcXHU0RjUzXCIsIFwiXFx1NUZBRVxcdThGNkZcXHU5NkM1XFx1OUVEMVwiLCBcIkFyaWFsXCIsIFwiVGFob21hXCIsIFwiVmVyZGFuYVwiLCBcIlRpbWVzIE5ldyBSb21hblwiLCBcIkNvdXJpZXIgTmV3XCJdLFxuICAgICAgICBmb250U2l6ZXM6IHsgXCJ4LXNtYWxsXCI6IHsgbmFtZTogXCIxMHB4XCIsIHZhbHVlOiBcIjFcIiB9LCBzbWFsbDogeyBuYW1lOiBcIjEzcHhcIiwgdmFsdWU6IFwiMlwiIH0sIG5vcm1hbDogeyBuYW1lOiBcIjE2cHhcIiwgdmFsdWU6IFwiM1wiIH0sIGxhcmdlOiB7IG5hbWU6IFwiMThweFwiLCB2YWx1ZTogXCI0XCIgfSwgXCJ4LWxhcmdlXCI6IHsgbmFtZTogXCIyNHB4XCIsIHZhbHVlOiBcIjVcIiB9LCBcInh4LWxhcmdlXCI6IHsgbmFtZTogXCIzMnB4XCIsIHZhbHVlOiBcIjZcIiB9LCBcInh4eC1sYXJnZVwiOiB7IG5hbWU6IFwiNDhweFwiLCB2YWx1ZTogXCI3XCIgfSB9LFxuICAgICAgICBjb2xvcnM6IFtcIiMwMDAwMDBcIiwgXCIjZmZmZmZmXCIsIFwiI2VlZWNlMFwiLCBcIiMxYzQ4N2ZcIiwgXCIjNGQ4MGJmXCIsIFwiI2MyNGY0YVwiLCBcIiM4YmFhNGFcIiwgXCIjN2I1YmExXCIsIFwiIzQ2YWNjOFwiLCBcIiNmOTk2M2JcIl0sXG4gICAgICAgIGxhbmd1YWdlVHlwZTogW1wiQmFzaFwiLCBcIkNcIiwgXCJDI1wiLCBcIkMrK1wiLCBcIkNTU1wiLCBcIkphdmFcIiwgXCJKYXZhU2NyaXB0XCIsIFwiSlNPTlwiLCBcIlR5cGVTY3JpcHRcIiwgXCJQbGFpbiB0ZXh0XCIsIFwiSHRtbFwiLCBcIlhNTFwiLCBcIlNRTFwiLCBcIkdvXCIsIFwiS290bGluXCIsIFwiTHVhXCIsIFwiTWFya2Rvd25cIiwgXCJQSFBcIiwgXCJQeXRob25cIiwgXCJTaGVsbCBTZXNzaW9uXCIsIFwiUnVieVwiXSxcbiAgICAgICAgbGFuZ3VhZ2VUYWI6IFwiXFx1MzAwMFxcdTMwMDBcXHUzMDAwXFx1MzAwMFwiLFxuICAgICAgICBlbW90aW9uczogW3tcbiAgICAgICAgICB0aXRsZTogXCJcXHU4ODY4XFx1NjBDNVwiLFxuICAgICAgICAgIHR5cGU6IFwiZW1vamlcIixcbiAgICAgICAgICBjb250ZW50OiBcIlxcdXsxRjYwMH0gXFx1ezFGNjAzfSBcXHV7MUY2MDR9IFxcdXsxRjYwMX0gXFx1ezFGNjA2fSBcXHV7MUY2MDV9IFxcdXsxRjYwMn0gXFx1ezFGOTIzfSBcXHV7MUY2MEF9IFxcdXsxRjYwN30gXFx1ezFGNjQyfSBcXHV7MUY2NDN9IFxcdXsxRjYwOX0gXFx1ezFGNjBDfSBcXHV7MUY2MER9IFxcdXsxRjYxOH0gXFx1ezFGNjE3fSBcXHV7MUY2MTl9IFxcdXsxRjYxQX0gXFx1ezFGNjBCfSBcXHV7MUY2MUJ9IFxcdXsxRjYxRH0gXFx1ezFGNjFDfSBcXHV7MUY5MTN9IFxcdXsxRjYwRX0gXFx1ezFGNjBGfSBcXHV7MUY2MTJ9IFxcdXsxRjYxRX0gXFx1ezFGNjE0fSBcXHV7MUY2MUZ9IFxcdXsxRjYxNX0gXFx1ezFGNjQxfSBcXHV7MUY2MjN9IFxcdXsxRjYxNn0gXFx1ezFGNjJCfSBcXHV7MUY2Mjl9IFxcdXsxRjYyMn0gXFx1ezFGNjJEfSBcXHV7MUY2MjR9IFxcdXsxRjYyMH0gXFx1ezFGNjIxfSBcXHV7MUY2MzN9IFxcdXsxRjYzMX0gXFx1ezFGNjI4fSBcXHV7MUY5MTd9IFxcdXsxRjkxNH0gXFx1ezFGNjM2fSBcXHV7MUY2MTF9IFxcdXsxRjYyQ30gXFx1ezFGNjQ0fSBcXHV7MUY2MkZ9IFxcdXsxRjYzNH0gXFx1ezFGNjM3fSBcXHV7MUY5MTF9IFxcdXsxRjYwOH0gXFx1ezFGOTIxfSBcXHV7MUY0QTl9IFxcdXsxRjQ3Qn0gXFx1ezFGNDgwfSBcXHV7MUY0NDB9IFxcdXsxRjQ2M31cIi5zcGxpdCgvXFxzLylcbiAgICAgICAgfSwge1xuICAgICAgICAgIHRpdGxlOiBcIlxcdTYyNEJcXHU1MkJGXCIsXG4gICAgICAgICAgdHlwZTogXCJlbW9qaVwiLFxuICAgICAgICAgIGNvbnRlbnQ6IFwiXFx1ezFGNDUwfSBcXHV7MUY2NEN9IFxcdXsxRjQ0Rn0gXFx1ezFGOTFEfSBcXHV7MUY0NER9IFxcdXsxRjQ0RX0gXFx1ezFGNDRBfSBcXHUyNzBBIFxcdXsxRjkxQn0gXFx1ezFGOTFDfSBcXHV7MUY5MUV9IFxcdTI3MENcXHVGRTBGIFxcdXsxRjkxOH0gXFx1ezFGNDRDfSBcXHV7MUY0NDh9IFxcdXsxRjQ0OX0gXFx1ezFGNDQ2fSBcXHV7MUY0NDd9IFxcdTI2MURcXHVGRTBGIFxcdTI3MEIgXFx1ezFGOTFBfSBcXHV7MUY1OTB9IFxcdXsxRjU5Nn0gXFx1ezFGNDRCfSBcXHV7MUY5MTl9IFxcdXsxRjRBQX0gXFx1ezFGNTk1fSBcXHUyNzBEXFx1RkUwRiBcXHV7MUY2NEZ9XCIuc3BsaXQoL1xccy8pXG4gICAgICAgIH1dLFxuICAgICAgICBsaW5lSGVpZ2h0czogW1wiMVwiLCBcIjEuMTVcIiwgXCIxLjZcIiwgXCIyXCIsIFwiMi41XCIsIFwiM1wiXSxcbiAgICAgICAgdW5kb0xpbWl0OiAyMCxcbiAgICAgICAgaW5kZW50YXRpb246IFwiMmVtXCIsXG4gICAgICAgIHNob3dNZW51VG9vbHRpcHM6ICEwLFxuICAgICAgICBtZW51VG9vbHRpcFBvc2l0aW9uOiBcInVwXCJcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBjID0gdCg3KTtcbiAgICAgIGZ1bmN0aW9uIHAodiwgYiwgUykge1xuICAgICAgICB3aW5kb3cuYWxlcnQodiksIFMgJiYgY29uc29sZS5lcnJvcihcIndhbmdFZGl0b3I6IFwiICsgUyk7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSB7IG9uY2hhbmdlVGltZW91dDogMjAwLCBvbmNoYW5nZTogbnVsbCwgb25mb2N1czogYy5FTVBUWV9GTiwgb25ibHVyOiBjLkVNUFRZX0ZOLCBvbkNhdGFsb2dDaGFuZ2U6IG51bGwsIGN1c3RvbUFsZXJ0OiBwIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KSwgaS5kZWZhdWx0ID0ge1xuICAgICAgICBwYXN0ZUZpbHRlclN0eWxlOiAhMCxcbiAgICAgICAgcGFzdGVJZ25vcmVJbWc6ICExLFxuICAgICAgICBwYXN0ZVRleHRIYW5kbGU6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pLCBpLmRlZmF1bHQgPSB7IHN0eWxlV2l0aENTUzogITEgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSB0KDcpO1xuICAgICAgaS5kZWZhdWx0ID0ge1xuICAgICAgICBsaW5rSW1nQ2hlY2s6IGZ1bmN0aW9uKHYsIGIsIFMpIHtcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIH0sXG4gICAgICAgIHNob3dMaW5rSW1nOiAhMCxcbiAgICAgICAgc2hvd0xpbmtJbWdBbHQ6ICEwLFxuICAgICAgICBzaG93TGlua0ltZ0hyZWY6ICEwLFxuICAgICAgICBsaW5rSW1nQ2FsbGJhY2s6IGMuRU1QVFlfRk4sXG4gICAgICAgIHVwbG9hZEltZ0FjY2VwdDogW1wianBnXCIsIFwianBlZ1wiLCBcInBuZ1wiLCBcImdpZlwiLCBcImJtcFwiXSxcbiAgICAgICAgdXBsb2FkSW1nU2VydmVyOiBcIlwiLFxuICAgICAgICB1cGxvYWRJbWdTaG93QmFzZTY0OiAhMSxcbiAgICAgICAgdXBsb2FkSW1nTWF4U2l6ZTogNSAqIDEwMjQgKiAxMDI0LFxuICAgICAgICB1cGxvYWRJbWdNYXhMZW5ndGg6IDEwMCxcbiAgICAgICAgdXBsb2FkRmlsZU5hbWU6IFwiXCIsXG4gICAgICAgIHVwbG9hZEltZ1BhcmFtczoge30sXG4gICAgICAgIHVwbG9hZEltZ1BhcmFtc1dpdGhVcmw6ICExLFxuICAgICAgICB1cGxvYWRJbWdIZWFkZXJzOiB7fSxcbiAgICAgICAgdXBsb2FkSW1nSG9va3M6IHt9LFxuICAgICAgICB1cGxvYWRJbWdUaW1lb3V0OiAxMCAqIDFlMyxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiAhMSxcbiAgICAgICAgY3VzdG9tVXBsb2FkSW1nOiBudWxsLFxuICAgICAgICB1cGxvYWRJbWdGcm9tTWVkaWE6IG51bGxcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KSwgaS5kZWZhdWx0ID0geyBsYW5nOiBcInpoLUNOXCIsIGxhbmd1YWdlczogeyBcInpoLUNOXCI6IHsgd2FuZ0VkaXRvcjogeyBcXHU5MUNEXFx1N0Y2RTogXCJcXHU5MUNEXFx1N0Y2RVwiLCBcXHU2M0QyXFx1NTE2NTogXCJcXHU2M0QyXFx1NTE2NVwiLCBcXHU5RUQ4XFx1OEJBNDogXCJcXHU5RUQ4XFx1OEJBNFwiLCBcXHU1MjFCXFx1NUVGQTogXCJcXHU1MjFCXFx1NUVGQVwiLCBcXHU0RkVFXFx1NjUzOTogXCJcXHU0RkVFXFx1NjUzOVwiLCBcXHU1OTgyOiBcIlxcdTU5ODJcIiwgXFx1OEJGN1xcdThGOTNcXHU1MTY1XFx1NkI2M1xcdTY1ODc6IFwiXFx1OEJGN1xcdThGOTNcXHU1MTY1XFx1NkI2M1xcdTY1ODdcIiwgbWVudXM6IHsgdGl0bGU6IHsgXFx1NjgwN1xcdTk4OTg6IFwiXFx1NjgwN1xcdTk4OThcIiwgXFx1NTJBMFxcdTdDOTc6IFwiXFx1NTJBMFxcdTdDOTdcIiwgXFx1NUI1N1xcdTUzRjc6IFwiXFx1NUI1N1xcdTUzRjdcIiwgXFx1NUI1N1xcdTRGNTM6IFwiXFx1NUI1N1xcdTRGNTNcIiwgXFx1NjU5Q1xcdTRGNTM6IFwiXFx1NjU5Q1xcdTRGNTNcIiwgXFx1NEUwQlxcdTUyMTJcXHU3RUJGOiBcIlxcdTRFMEJcXHU1MjEyXFx1N0VCRlwiLCBcXHU1MjIwXFx1OTY2NFxcdTdFQkY6IFwiXFx1NTIyMFxcdTk2NjRcXHU3RUJGXCIsIFxcdTdGMjlcXHU4RkRCOiBcIlxcdTdGMjlcXHU4RkRCXCIsIFxcdTg4NENcXHU5QUQ4OiBcIlxcdTg4NENcXHU5QUQ4XCIsIFxcdTY1ODdcXHU1QjU3XFx1OTg5Q1xcdTgyNzI6IFwiXFx1NjU4N1xcdTVCNTdcXHU5ODlDXFx1ODI3MlwiLCBcXHU4MENDXFx1NjY2RlxcdTgyNzI6IFwiXFx1ODBDQ1xcdTY2NkZcXHU4MjcyXCIsIFxcdTk0RkVcXHU2M0E1OiBcIlxcdTk0RkVcXHU2M0E1XCIsIFxcdTVFOEZcXHU1MjE3OiBcIlxcdTVFOEZcXHU1MjE3XCIsIFxcdTVCRjlcXHU5RjUwOiBcIlxcdTVCRjlcXHU5RjUwXCIsIFxcdTVGMTVcXHU3NTI4OiBcIlxcdTVGMTVcXHU3NTI4XCIsIFxcdTg4NjhcXHU2MEM1OiBcIlxcdTg4NjhcXHU2MEM1XCIsIFxcdTU2RkVcXHU3MjQ3OiBcIlxcdTU2RkVcXHU3MjQ3XCIsIFxcdTg5QzZcXHU5ODkxOiBcIlxcdTg5QzZcXHU5ODkxXCIsIFxcdTg4NjhcXHU2ODNDOiBcIlxcdTg4NjhcXHU2ODNDXCIsIFxcdTRFRTNcXHU3ODAxOiBcIlxcdTRFRTNcXHU3ODAxXCIsIFxcdTUyMDZcXHU1MjcyXFx1N0VCRjogXCJcXHU1MjA2XFx1NTI3MlxcdTdFQkZcIiwgXFx1NjA2MlxcdTU5MEQ6IFwiXFx1NjA2MlxcdTU5MERcIiwgXFx1NjRBNFxcdTk1MDA6IFwiXFx1NjRBNFxcdTk1MDBcIiwgXFx1NTE2OFxcdTVDNEY6IFwiXFx1NTE2OFxcdTVDNEZcIiwgXFx1NTNENlxcdTZEODhcXHU1MTY4XFx1NUM0RjogXCJcXHU1M0Q2XFx1NkQ4OFxcdTUxNjhcXHU1QzRGXCIsIFxcdTVGODVcXHU1MjlFXFx1NEU4QlxcdTk4Nzk6IFwiXFx1NUY4NVxcdTUyOUVcXHU0RThCXFx1OTg3OVwiIH0sIGRyb3BMaXN0TWVudTogeyBcXHU4QkJFXFx1N0Y2RVxcdTY4MDdcXHU5ODk4OiBcIlxcdThCQkVcXHU3RjZFXFx1NjgwN1xcdTk4OThcIiwgXFx1ODBDQ1xcdTY2NkZcXHU5ODlDXFx1ODI3MjogXCJcXHU4MENDXFx1NjY2RlxcdTk4OUNcXHU4MjcyXCIsIFxcdTY1ODdcXHU1QjU3XFx1OTg5Q1xcdTgyNzI6IFwiXFx1NjU4N1xcdTVCNTdcXHU5ODlDXFx1ODI3MlwiLCBcXHU4QkJFXFx1N0Y2RVxcdTVCNTdcXHU1M0Y3OiBcIlxcdThCQkVcXHU3RjZFXFx1NUI1N1xcdTUzRjdcIiwgXFx1OEJCRVxcdTdGNkVcXHU1QjU3XFx1NEY1MzogXCJcXHU4QkJFXFx1N0Y2RVxcdTVCNTdcXHU0RjUzXCIsIFxcdThCQkVcXHU3RjZFXFx1N0YyOVxcdThGREI6IFwiXFx1OEJCRVxcdTdGNkVcXHU3RjI5XFx1OEZEQlwiLCBcXHU1QkY5XFx1OUY1MFxcdTY1QjlcXHU1RjBGOiBcIlxcdTVCRjlcXHU5RjUwXFx1NjVCOVxcdTVGMEZcIiwgXFx1OEJCRVxcdTdGNkVcXHU4ODRDXFx1OUFEODogXCJcXHU4QkJFXFx1N0Y2RVxcdTg4NENcXHU5QUQ4XCIsIFxcdTVFOEZcXHU1MjE3OiBcIlxcdTVFOEZcXHU1MjE3XCIsIGhlYWQ6IHsgXFx1NkI2M1xcdTY1ODc6IFwiXFx1NkI2M1xcdTY1ODdcIiB9LCBpbmRlbnQ6IHsgXFx1NTg5RVxcdTUyQTBcXHU3RjI5XFx1OEZEQjogXCJcXHU1ODlFXFx1NTJBMFxcdTdGMjlcXHU4RkRCXCIsIFxcdTUxQ0ZcXHU1QzExXFx1N0YyOVxcdThGREI6IFwiXFx1NTFDRlxcdTVDMTFcXHU3RjI5XFx1OEZEQlwiIH0sIGp1c3RpZnk6IHsgXFx1OTc2MFxcdTVERTY6IFwiXFx1OTc2MFxcdTVERTZcIiwgXFx1NUM0NVxcdTRFMkQ6IFwiXFx1NUM0NVxcdTRFMkRcIiwgXFx1OTc2MFxcdTUzRjM6IFwiXFx1OTc2MFxcdTUzRjNcIiwgXFx1NEUyNFxcdTdBRUY6IFwiXFx1NEUyNFxcdTdBRUZcIiB9LCBsaXN0OiB7IFxcdTY1RTBcXHU1RThGXFx1NTIxN1xcdTg4Njg6IFwiXFx1NjVFMFxcdTVFOEZcXHU1MjE3XFx1ODg2OFwiLCBcXHU2NzA5XFx1NUU4RlxcdTUyMTdcXHU4ODY4OiBcIlxcdTY3MDlcXHU1RThGXFx1NTIxN1xcdTg4NjhcIiB9IH0sIHBhbmVsTWVudXM6IHsgZW1vdGljb246IHsgXFx1OUVEOFxcdThCQTQ6IFwiXFx1OUVEOFxcdThCQTRcIiwgXFx1NjVCMFxcdTZENkE6IFwiXFx1NjVCMFxcdTZENkFcIiwgZW1vamk6IFwiZW1vamlcIiwgXFx1NjI0QlxcdTUyQkY6IFwiXFx1NjI0QlxcdTUyQkZcIiB9LCBpbWFnZTogeyBcXHU0RTBBXFx1NEYyMFxcdTU2RkVcXHU3MjQ3OiBcIlxcdTRFMEFcXHU0RjIwXFx1NTZGRVxcdTcyNDdcIiwgXFx1N0Y1MVxcdTdFRENcXHU1NkZFXFx1NzI0NzogXCJcXHU3RjUxXFx1N0VEQ1xcdTU2RkVcXHU3MjQ3XCIsIFxcdTU2RkVcXHU3MjQ3XFx1NTczMFxcdTU3NDA6IFwiXFx1NTZGRVxcdTcyNDdcXHU1NzMwXFx1NTc0MFwiLCBcXHU1NkZFXFx1NzI0N1xcdTY1ODdcXHU1QjU3XFx1OEJGNFxcdTY2MEU6IFwiXFx1NTZGRVxcdTcyNDdcXHU2NTg3XFx1NUI1N1xcdThCRjRcXHU2NjBFXCIsIFxcdThERjNcXHU4RjZDXFx1OTRGRVxcdTYzQTU6IFwiXFx1OERGM1xcdThGNkNcXHU5NEZFXFx1NjNBNVwiIH0sIGxpbms6IHsgXFx1OTRGRVxcdTYzQTU6IFwiXFx1OTRGRVxcdTYzQTVcIiwgXFx1OTRGRVxcdTYzQTVcXHU2NTg3XFx1NUI1NzogXCJcXHU5NEZFXFx1NjNBNVxcdTY1ODdcXHU1QjU3XCIsIFxcdTUzRDZcXHU2RDg4XFx1OTRGRVxcdTYzQTU6IFwiXFx1NTNENlxcdTZEODhcXHU5NEZFXFx1NjNBNVwiLCBcXHU2N0U1XFx1NzcwQlxcdTk0RkVcXHU2M0E1OiBcIlxcdTY3RTVcXHU3NzBCXFx1OTRGRVxcdTYzQTVcIiB9LCB2aWRlbzogeyBcXHU2M0QyXFx1NTE2NVxcdTg5QzZcXHU5ODkxOiBcIlxcdTYzRDJcXHU1MTY1XFx1ODlDNlxcdTk4OTFcIiwgXFx1NEUwQVxcdTRGMjBcXHU4OUM2XFx1OTg5MTogXCJcXHU0RTBBXFx1NEYyMFxcdTg5QzZcXHU5ODkxXCIgfSwgdGFibGU6IHsgXFx1ODg0QzogXCJcXHU4ODRDXCIsIFxcdTUyMTc6IFwiXFx1NTIxN1wiLCBcXHU3Njg0OiBcIlxcdTc2ODRcIiwgXFx1ODg2OFxcdTY4M0M6IFwiXFx1ODg2OFxcdTY4M0NcIiwgXFx1NkRGQlxcdTUyQTBcXHU4ODRDOiBcIlxcdTZERkJcXHU1MkEwXFx1ODg0Q1wiLCBcXHU1MjIwXFx1OTY2NFxcdTg4NEM6IFwiXFx1NTIyMFxcdTk2NjRcXHU4ODRDXCIsIFxcdTZERkJcXHU1MkEwXFx1NTIxNzogXCJcXHU2REZCXFx1NTJBMFxcdTUyMTdcIiwgXFx1NTIyMFxcdTk2NjRcXHU1MjE3OiBcIlxcdTUyMjBcXHU5NjY0XFx1NTIxN1wiLCBcXHU4QkJFXFx1N0Y2RVxcdTg4NjhcXHU1OTM0OiBcIlxcdThCQkVcXHU3RjZFXFx1ODg2OFxcdTU5MzRcIiwgXFx1NTNENlxcdTZEODhcXHU4ODY4XFx1NTkzNDogXCJcXHU1M0Q2XFx1NkQ4OFxcdTg4NjhcXHU1OTM0XCIsIFxcdTYzRDJcXHU1MTY1XFx1ODg2OFxcdTY4M0M6IFwiXFx1NjNEMlxcdTUxNjVcXHU4ODY4XFx1NjgzQ1wiLCBcXHU1MjIwXFx1OTY2NFxcdTg4NjhcXHU2ODNDOiBcIlxcdTUyMjBcXHU5NjY0XFx1ODg2OFxcdTY4M0NcIiB9LCBjb2RlOiB7IFxcdTUyMjBcXHU5NjY0XFx1NEVFM1xcdTc4MDE6IFwiXFx1NTIyMFxcdTk2NjRcXHU0RUUzXFx1NzgwMVwiLCBcXHU0RkVFXFx1NjUzOVxcdTRFRTNcXHU3ODAxOiBcIlxcdTRGRUVcXHU2NTM5XFx1NEVFM1xcdTc4MDFcIiwgXFx1NjNEMlxcdTUxNjVcXHU0RUUzXFx1NzgwMTogXCJcXHU2M0QyXFx1NTE2NVxcdTRFRTNcXHU3ODAxXCIgfSB9IH0sIHZhbGlkYXRlOiB7IFxcdTVGMjBcXHU1NkZFXFx1NzI0NzogXCJcXHU1RjIwXFx1NTZGRVxcdTcyNDdcIiwgXFx1NTkyN1xcdTRFOEU6IFwiXFx1NTkyN1xcdTRFOEVcIiwgXFx1NTZGRVxcdTcyNDdcXHU5NEZFXFx1NjNBNTogXCJcXHU1NkZFXFx1NzI0N1xcdTk0RkVcXHU2M0E1XCIsIFxcdTRFMERcXHU2NjJGXFx1NTZGRVxcdTcyNDc6IFwiXFx1NEUwRFxcdTY2MkZcXHU1NkZFXFx1NzI0N1wiLCBcXHU4RkQ0XFx1NTZERVxcdTdFRDNcXHU2NzlDOiBcIlxcdThGRDRcXHU1NkRFXFx1N0VEM1xcdTY3OUNcIiwgXFx1NEUwQVxcdTRGMjBcXHU1NkZFXFx1NzI0N1xcdThEODVcXHU2NUY2OiBcIlxcdTRFMEFcXHU0RjIwXFx1NTZGRVxcdTcyNDdcXHU4RDg1XFx1NjVGNlwiLCBcXHU0RTBBXFx1NEYyMFxcdTU2RkVcXHU3MjQ3XFx1OTUxOVxcdThCRUY6IFwiXFx1NEUwQVxcdTRGMjBcXHU1NkZFXFx1NzI0N1xcdTk1MTlcXHU4QkVGXCIsIFxcdTRFMEFcXHU0RjIwXFx1NTZGRVxcdTcyNDdcXHU1OTMxXFx1OEQyNTogXCJcXHU0RTBBXFx1NEYyMFxcdTU2RkVcXHU3MjQ3XFx1NTkzMVxcdThEMjVcIiwgXFx1NjNEMlxcdTUxNjVcXHU1NkZFXFx1NzI0N1xcdTk1MTlcXHU4QkVGOiBcIlxcdTYzRDJcXHU1MTY1XFx1NTZGRVxcdTcyNDdcXHU5NTE5XFx1OEJFRlwiLCBcXHU0RTAwXFx1NkIyMVxcdTY3MDBcXHU1OTFBXFx1NEUwQVxcdTRGMjA6IFwiXFx1NEUwMFxcdTZCMjFcXHU2NzAwXFx1NTkxQVxcdTRFMEFcXHU0RjIwXCIsIFxcdTRFMEJcXHU4RjdEXFx1OTRGRVxcdTYzQTVcXHU1OTMxXFx1OEQyNTogXCJcXHU0RTBCXFx1OEY3RFxcdTk0RkVcXHU2M0E1XFx1NTkzMVxcdThEMjVcIiwgXFx1NTZGRVxcdTcyNDdcXHU5QThDXFx1OEJDMVxcdTY3MkFcXHU5MDFBXFx1OEZDNzogXCJcXHU1NkZFXFx1NzI0N1xcdTlBOENcXHU4QkMxXFx1NjcyQVxcdTkwMUFcXHU4RkM3XCIsIFxcdTY3MERcXHU1MkExXFx1NTY2OFxcdThGRDRcXHU1NkRFXFx1NzJCNlxcdTYwMDE6IFwiXFx1NjcwRFxcdTUyQTFcXHU1NjY4XFx1OEZENFxcdTU2REVcXHU3MkI2XFx1NjAwMVwiLCBcXHU0RTBBXFx1NEYyMFxcdTU2RkVcXHU3MjQ3XFx1OEZENFxcdTU2REVcXHU3RUQzXFx1Njc5Q1xcdTk1MTlcXHU4QkVGOiBcIlxcdTRFMEFcXHU0RjIwXFx1NTZGRVxcdTcyNDdcXHU4RkQ0XFx1NTZERVxcdTdFRDNcXHU2NzlDXFx1OTUxOVxcdThCRUZcIiwgXFx1OEJGN1xcdTY2RkZcXHU2MzYyXFx1NEUzQVxcdTY1MkZcXHU2MzAxXFx1NzY4NFxcdTU2RkVcXHU3MjQ3XFx1N0M3QlxcdTU3OEI6IFwiXFx1OEJGN1xcdTY2RkZcXHU2MzYyXFx1NEUzQVxcdTY1MkZcXHU2MzAxXFx1NzY4NFxcdTU2RkVcXHU3MjQ3XFx1N0M3QlxcdTU3OEJcIiwgXFx1NjBBOFxcdTYzRDJcXHU1MTY1XFx1NzY4NFxcdTdGNTFcXHU3RURDXFx1NTZGRVxcdTcyNDdcXHU2NUUwXFx1NkNENVxcdThCQzZcXHU1MjJCOiBcIlxcdTYwQThcXHU2M0QyXFx1NTE2NVxcdTc2ODRcXHU3RjUxXFx1N0VEQ1xcdTU2RkVcXHU3MjQ3XFx1NjVFMFxcdTZDRDVcXHU4QkM2XFx1NTIyQlwiLCBcXHU2MEE4XFx1NTIxQVxcdTYyNERcXHU2M0QyXFx1NTE2NVxcdTc2ODRcXHU1NkZFXFx1NzI0N1xcdTk0RkVcXHU2M0E1XFx1NjcyQVxcdTkwMUFcXHU4RkM3XFx1N0YxNlxcdThGOTFcXHU1NjY4XFx1NjgyMVxcdTlBOEM6IFwiXFx1NjBBOFxcdTUyMUFcXHU2MjREXFx1NjNEMlxcdTUxNjVcXHU3Njg0XFx1NTZGRVxcdTcyNDdcXHU5NEZFXFx1NjNBNVxcdTY3MkFcXHU5MDFBXFx1OEZDN1xcdTdGMTZcXHU4RjkxXFx1NTY2OFxcdTY4MjFcXHU5QThDXCIsIFxcdTYzRDJcXHU1MTY1XFx1ODlDNlxcdTk4OTFcXHU5NTE5XFx1OEJFRjogXCJcXHU2M0QyXFx1NTE2NVxcdTg5QzZcXHU5ODkxXFx1OTUxOVxcdThCRUZcIiwgXFx1ODlDNlxcdTk4OTFcXHU5NEZFXFx1NjNBNTogXCJcXHU4OUM2XFx1OTg5MVxcdTk0RkVcXHU2M0E1XCIsIFxcdTRFMERcXHU2NjJGXFx1ODlDNlxcdTk4OTE6IFwiXFx1NEUwRFxcdTY2MkZcXHU4OUM2XFx1OTg5MVwiLCBcXHU4OUM2XFx1OTg5MVxcdTlBOENcXHU4QkMxXFx1NjcyQVxcdTkwMUFcXHU4RkM3OiBcIlxcdTg5QzZcXHU5ODkxXFx1OUE4Q1xcdThCQzFcXHU2NzJBXFx1OTAxQVxcdThGQzdcIiwgXFx1NEUyQVxcdTg5QzZcXHU5ODkxOiBcIlxcdTRFMkFcXHU4OUM2XFx1OTg5MVwiLCBcXHU0RTBBXFx1NEYyMFxcdTg5QzZcXHU5ODkxXFx1OEQ4NVxcdTY1RjY6IFwiXFx1NEUwQVxcdTRGMjBcXHU4OUM2XFx1OTg5MVxcdThEODVcXHU2NUY2XCIsIFxcdTRFMEFcXHU0RjIwXFx1ODlDNlxcdTk4OTFcXHU5NTE5XFx1OEJFRjogXCJcXHU0RTBBXFx1NEYyMFxcdTg5QzZcXHU5ODkxXFx1OTUxOVxcdThCRUZcIiwgXFx1NEUwQVxcdTRGMjBcXHU4OUM2XFx1OTg5MVxcdTU5MzFcXHU4RDI1OiBcIlxcdTRFMEFcXHU0RjIwXFx1ODlDNlxcdTk4OTFcXHU1OTMxXFx1OEQyNVwiLCBcXHU0RTBBXFx1NEYyMFxcdTg5QzZcXHU5ODkxXFx1OEZENFxcdTU2REVcXHU3RUQzXFx1Njc5Q1xcdTk1MTlcXHU4QkVGOiBcIlxcdTRFMEFcXHU0RjIwXFx1ODlDNlxcdTk4OTFcXHU4RkQ0XFx1NTZERVxcdTdFRDNcXHU2NzlDXFx1OTUxOVxcdThCRUZcIiB9IH0gfSwgZW46IHsgd2FuZ0VkaXRvcjogeyBcXHU5MUNEXFx1N0Y2RTogXCJyZXNldFwiLCBcXHU2M0QyXFx1NTE2NTogXCJpbnNlcnRcIiwgXFx1OUVEOFxcdThCQTQ6IFwiZGVmYXVsdFwiLCBcXHU1MjFCXFx1NUVGQTogXCJjcmVhdGVcIiwgXFx1NEZFRVxcdTY1Mzk6IFwiZWRpdFwiLCBcXHU1OTgyOiBcImxpa2VcIiwgXFx1OEJGN1xcdThGOTNcXHU1MTY1XFx1NkI2M1xcdTY1ODc6IFwicGxlYXNlIGVudGVyIHRoZSB0ZXh0XCIsIG1lbnVzOiB7IHRpdGxlOiB7IFxcdTY4MDdcXHU5ODk4OiBcImhlYWRcIiwgXFx1NTJBMFxcdTdDOTc6IFwiYm9sZFwiLCBcXHU1QjU3XFx1NTNGNzogXCJmb250IHNpemVcIiwgXFx1NUI1N1xcdTRGNTM6IFwiZm9udCBmYW1pbHlcIiwgXFx1NjU5Q1xcdTRGNTM6IFwiaXRhbGljXCIsIFxcdTRFMEJcXHU1MjEyXFx1N0VCRjogXCJ1bmRlcmxpbmVcIiwgXFx1NTIyMFxcdTk2NjRcXHU3RUJGOiBcInN0cmlrZXRocm91Z2hcIiwgXFx1N0YyOVxcdThGREI6IFwiaW5kZW50XCIsIFxcdTg4NENcXHU5QUQ4OiBcImxpbmUgaGVpaGd0XCIsIFxcdTY1ODdcXHU1QjU3XFx1OTg5Q1xcdTgyNzI6IFwiZm9udCBjb2xvclwiLCBcXHU4MENDXFx1NjY2RlxcdTgyNzI6IFwiYmFja2dyb3VuZFwiLCBcXHU5NEZFXFx1NjNBNTogXCJsaW5rXCIsIFxcdTVFOEZcXHU1MjE3OiBcIm51bWJlcmVkIGxpc3RcIiwgXFx1NUJGOVxcdTlGNTA6IFwiYWxpZ25cIiwgXFx1NUYxNVxcdTc1Mjg6IFwicXVvdGVcIiwgXFx1ODg2OFxcdTYwQzU6IFwiZW1vdGljb25zXCIsIFxcdTU2RkVcXHU3MjQ3OiBcImltYWdlXCIsIFxcdTg5QzZcXHU5ODkxOiBcIm1lZGlhXCIsIFxcdTg4NjhcXHU2ODNDOiBcInRhYmxlXCIsIFxcdTRFRTNcXHU3ODAxOiBcImNvZGVcIiwgXFx1NTIwNlxcdTUyNzJcXHU3RUJGOiBcInNwbGl0IGxpbmVcIiwgXFx1NjA2MlxcdTU5MEQ6IFwidW5kb1wiLCBcXHU2NEE0XFx1OTUwMDogXCJyZWRvXCIsIFxcdTUxNjhcXHU1QzRGOiBcImZ1bGxzY3JlZW5cIiwgXFx1NTNENlxcdTZEODhcXHU1MTY4XFx1NUM0RjogXCJjYW5jZWwgZnVsbHNjcmVlblwiLCBcXHU1Rjg1XFx1NTI5RVxcdTRFOEJcXHU5ODc5OiBcInRvZG9cIiB9LCBkcm9wTGlzdE1lbnU6IHsgXFx1OEJCRVxcdTdGNkVcXHU2ODA3XFx1OTg5ODogXCJ0aXRsZVwiLCBcXHU4MENDXFx1NjY2RlxcdTk4OUNcXHU4MjcyOiBcImJhY2tncm91bmRcIiwgXFx1NjU4N1xcdTVCNTdcXHU5ODlDXFx1ODI3MjogXCJmb250IGNvbG9yXCIsIFxcdThCQkVcXHU3RjZFXFx1NUI1N1xcdTUzRjc6IFwiZm9udCBzaXplXCIsIFxcdThCQkVcXHU3RjZFXFx1NUI1N1xcdTRGNTM6IFwiZm9udCBmYW1pbHlcIiwgXFx1OEJCRVxcdTdGNkVcXHU3RjI5XFx1OEZEQjogXCJpbmRlbnRcIiwgXFx1NUJGOVxcdTlGNTBcXHU2NUI5XFx1NUYwRjogXCJhbGlnblwiLCBcXHU4QkJFXFx1N0Y2RVxcdTg4NENcXHU5QUQ4OiBcImxpbmUgaGVpaGd0XCIsIFxcdTVFOEZcXHU1MjE3OiBcImxpc3RcIiwgaGVhZDogeyBcXHU2QjYzXFx1NjU4NzogXCJ0ZXh0XCIgfSwgaW5kZW50OiB7IFxcdTU4OUVcXHU1MkEwXFx1N0YyOVxcdThGREI6IFwiaW5kZW50XCIsIFxcdTUxQ0ZcXHU1QzExXFx1N0YyOVxcdThGREI6IFwib3V0ZGVudFwiIH0sIGp1c3RpZnk6IHsgXFx1OTc2MFxcdTVERTY6IFwibGVmdFwiLCBcXHU1QzQ1XFx1NEUyRDogXCJjZW50ZXJcIiwgXFx1OTc2MFxcdTUzRjM6IFwicmlnaHRcIiwgXFx1NEUyNFxcdTdBRUY6IFwianVzdGlmeVwiIH0sIGxpc3Q6IHsgXFx1NjVFMFxcdTVFOEZcXHU1MjE3XFx1ODg2ODogXCJ1bm9yZGVyZWRcIiwgXFx1NjcwOVxcdTVFOEZcXHU1MjE3XFx1ODg2ODogXCJvcmRlcmVkXCIgfSB9LCBwYW5lbE1lbnVzOiB7IGVtb3RpY29uOiB7IFxcdTg4NjhcXHU2MEM1OiBcImVtb2ppXCIsIFxcdTYyNEJcXHU1MkJGOiBcImdlc3R1cmVcIiB9LCBpbWFnZTogeyBcXHU0RTBBXFx1NEYyMFxcdTU2RkVcXHU3MjQ3OiBcInVwbG9hZCBpbWFnZVwiLCBcXHU3RjUxXFx1N0VEQ1xcdTU2RkVcXHU3MjQ3OiBcIm5ldHdvcmsgaW1hZ2VcIiwgXFx1NTZGRVxcdTcyNDdcXHU1NzMwXFx1NTc0MDogXCJpbWFnZSBsaW5rXCIsIFxcdTU2RkVcXHU3MjQ3XFx1NjU4N1xcdTVCNTdcXHU4QkY0XFx1NjYwRTogXCJpbWFnZSBhbHRcIiwgXFx1OERGM1xcdThGNkNcXHU5NEZFXFx1NjNBNTogXCJoeXBlcmxpbmtcIiB9LCBsaW5rOiB7IFxcdTk0RkVcXHU2M0E1OiBcImxpbmtcIiwgXFx1OTRGRVxcdTYzQTVcXHU2NTg3XFx1NUI1NzogXCJsaW5rIHRleHRcIiwgXFx1NTNENlxcdTZEODhcXHU5NEZFXFx1NjNBNTogXCJ1bmxpbmtcIiwgXFx1NjdFNVxcdTc3MEJcXHU5NEZFXFx1NjNBNTogXCJ2aWV3IGxpbmtzXCIgfSwgdmlkZW86IHsgXFx1NjNEMlxcdTUxNjVcXHU4OUM2XFx1OTg5MTogXCJpbnNlcnQgdmlkZW9cIiwgXFx1NEUwQVxcdTRGMjBcXHU4OUM2XFx1OTg5MTogXCJ1cGxvYWQgbG9jYWwgdmlkZW9cIiB9LCB0YWJsZTogeyBcXHU4ODRDOiBcInJvd3NcIiwgXFx1NTIxNzogXCJjb2x1bW5zXCIsIFxcdTc2ODQ6IFwiIFwiLCBcXHU4ODY4XFx1NjgzQzogXCJ0YWJsZVwiLCBcXHU2REZCXFx1NTJBMFxcdTg4NEM6IFwiaW5zZXJ0IHJvd1wiLCBcXHU1MjIwXFx1OTY2NFxcdTg4NEM6IFwiZGVsZXRlIHJvd1wiLCBcXHU2REZCXFx1NTJBMFxcdTUyMTc6IFwiaW5zZXJ0IGNvbHVtblwiLCBcXHU1MjIwXFx1OTY2NFxcdTUyMTc6IFwiZGVsZXRlIGNvbHVtblwiLCBcXHU4QkJFXFx1N0Y2RVxcdTg4NjhcXHU1OTM0OiBcInNldCBoZWFkZXJcIiwgXFx1NTNENlxcdTZEODhcXHU4ODY4XFx1NTkzNDogXCJjYW5jZWwgaGVhZGVyXCIsIFxcdTYzRDJcXHU1MTY1XFx1ODg2OFxcdTY4M0M6IFwiaW5zZXJ0IHRhYmxlXCIsIFxcdTUyMjBcXHU5NjY0XFx1ODg2OFxcdTY4M0M6IFwiZGVsZXRlIHRhYmxlXCIgfSwgY29kZTogeyBcXHU1MjIwXFx1OTY2NFxcdTRFRTNcXHU3ODAxOiBcImRlbGV0ZSBjb2RlXCIsIFxcdTRGRUVcXHU2NTM5XFx1NEVFM1xcdTc4MDE6IFwiZWRpdCBjb2RlXCIsIFxcdTYzRDJcXHU1MTY1XFx1NEVFM1xcdTc4MDE6IFwiaW5zZXJ0IGNvZGVcIiB9IH0gfSwgdmFsaWRhdGU6IHsgXFx1NUYyMFxcdTU2RkVcXHU3MjQ3OiBcImltYWdlc1wiLCBcXHU1OTI3XFx1NEU4RTogXCJncmVhdGVyIHRoYW5cIiwgXFx1NTZGRVxcdTcyNDdcXHU5NEZFXFx1NjNBNTogXCJpbWFnZSBsaW5rXCIsIFxcdTRFMERcXHU2NjJGXFx1NTZGRVxcdTcyNDc6IFwiaXMgbm90IGltYWdlXCIsIFxcdThGRDRcXHU1NkRFXFx1N0VEM1xcdTY3OUM6IFwicmV0dXJuIHJlc3VsdHNcIiwgXFx1NEUwQVxcdTRGMjBcXHU1NkZFXFx1NzI0N1xcdThEODVcXHU2NUY2OiBcInVwbG9hZCBpbWFnZSB0aW1lb3V0XCIsIFxcdTRFMEFcXHU0RjIwXFx1NTZGRVxcdTcyNDdcXHU5NTE5XFx1OEJFRjogXCJ1cGxvYWQgaW1hZ2UgZXJyb3JcIiwgXFx1NEUwQVxcdTRGMjBcXHU1NkZFXFx1NzI0N1xcdTU5MzFcXHU4RDI1OiBcInVwbG9hZCBpbWFnZSBmYWlsZWRcIiwgXFx1NjNEMlxcdTUxNjVcXHU1NkZFXFx1NzI0N1xcdTk1MTlcXHU4QkVGOiBcImluc2VydCBpbWFnZSBlcnJvclwiLCBcXHU0RTAwXFx1NkIyMVxcdTY3MDBcXHU1OTFBXFx1NEUwQVxcdTRGMjA6IFwib25jZSBtb3N0IGF0IHVwbG9hZFwiLCBcXHU0RTBCXFx1OEY3RFxcdTk0RkVcXHU2M0E1XFx1NTkzMVxcdThEMjU6IFwiZG93bmxvYWQgbGluayBmYWlsZWRcIiwgXFx1NTZGRVxcdTcyNDdcXHU5QThDXFx1OEJDMVxcdTY3MkFcXHU5MDFBXFx1OEZDNzogXCJpbWFnZSB2YWxpZGF0ZSBmYWlsZWRcIiwgXFx1NjcwRFxcdTUyQTFcXHU1NjY4XFx1OEZENFxcdTU2REVcXHU3MkI2XFx1NjAwMTogXCJzZXJ2ZXIgcmV0dXJuIHN0YXR1c1wiLCBcXHU0RTBBXFx1NEYyMFxcdTU2RkVcXHU3MjQ3XFx1OEZENFxcdTU2REVcXHU3RUQzXFx1Njc5Q1xcdTk1MTlcXHU4QkVGOiBcInVwbG9hZCBpbWFnZSByZXR1cm4gcmVzdWx0cyBlcnJvclwiLCBcXHU4QkY3XFx1NjZGRlxcdTYzNjJcXHU0RTNBXFx1NjUyRlxcdTYzMDFcXHU3Njg0XFx1NTZGRVxcdTcyNDdcXHU3QzdCXFx1NTc4QjogXCJwbGVhc2UgcmVwbGFjZSB3aXRoIGEgc3VwcG9ydGVkIGltYWdlIHR5cGVcIiwgXFx1NjBBOFxcdTYzRDJcXHU1MTY1XFx1NzY4NFxcdTdGNTFcXHU3RURDXFx1NTZGRVxcdTcyNDdcXHU2NUUwXFx1NkNENVxcdThCQzZcXHU1MjJCOiBcInRoZSBuZXR3b3JrIHBpY3R1cmUgeW91IGluc2VydGVkIGlzIG5vdCByZWNvZ25pemVkXCIsIFxcdTYwQThcXHU1MjFBXFx1NjI0RFxcdTYzRDJcXHU1MTY1XFx1NzY4NFxcdTU2RkVcXHU3MjQ3XFx1OTRGRVxcdTYzQTVcXHU2NzJBXFx1OTAxQVxcdThGQzdcXHU3RjE2XFx1OEY5MVxcdTU2NjhcXHU2ODIxXFx1OUE4QzogXCJ0aGUgaW1hZ2UgbGluayB5b3UganVzdCBpbnNlcnRlZCBkaWQgbm90IHBhc3MgdGhlIGVkaXRvciB2ZXJpZmljYXRpb25cIiwgXFx1NjNEMlxcdTUxNjVcXHU4OUM2XFx1OTg5MVxcdTk1MTlcXHU4QkVGOiBcImluc2VydCB2aWRlbyBlcnJvclwiLCBcXHU4OUM2XFx1OTg5MVxcdTk0RkVcXHU2M0E1OiBcInZpZGVvIGxpbmtcIiwgXFx1NEUwRFxcdTY2MkZcXHU4OUM2XFx1OTg5MTogXCJpcyBub3QgdmlkZW9cIiwgXFx1ODlDNlxcdTk4OTFcXHU5QThDXFx1OEJDMVxcdTY3MkFcXHU5MDFBXFx1OEZDNzogXCJ2aWRlbyB2YWxpZGF0ZSBmYWlsZWRcIiwgXFx1NEUyQVxcdTg5QzZcXHU5ODkxOiBcInZpZGVvc1wiLCBcXHU0RTBBXFx1NEYyMFxcdTg5QzZcXHU5ODkxXFx1OEQ4NVxcdTY1RjY6IFwidXBsb2FkIHZpZGVvIHRpbWVvdXRcIiwgXFx1NEUwQVxcdTRGMjBcXHU4OUM2XFx1OTg5MVxcdTk1MTlcXHU4QkVGOiBcInVwbG9hZCB2aWRlbyBlcnJvclwiLCBcXHU0RTBBXFx1NEYyMFxcdTg5QzZcXHU5ODkxXFx1NTkzMVxcdThEMjU6IFwidXBsb2FkIHZpZGVvIGZhaWxlZFwiLCBcXHU0RTBBXFx1NEYyMFxcdTg5QzZcXHU5ODkxXFx1OEZENFxcdTU2REVcXHU3RUQzXFx1Njc5Q1xcdTk1MTlcXHU4QkVGOiBcInVwbG9hZCB2aWRlbyByZXR1cm4gcmVzdWx0cyBlcnJvclwiIH0gfSB9IH0gfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSB0KDYpO1xuICAgICAgZnVuY3Rpb24gcCgpIHtcbiAgICAgICAgcmV0dXJuICEhKGMuVUEuaXNJRSgpIHx8IGMuVUEuaXNPbGRFZGdlKTtcbiAgICAgIH1cbiAgICAgIGkuZGVmYXVsdCA9IHsgY29tcGF0aWJsZU1vZGU6IHAsIGhpc3RvcnlNYXhTaXplOiAzMCB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoNyk7XG4gICAgICBpLmRlZmF1bHQgPSB7XG4gICAgICAgIG9ubGluZVZpZGVvQ2hlY2s6IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIH0sXG4gICAgICAgIG9ubGluZVZpZGVvQ2FsbGJhY2s6IGMuRU1QVFlfRk4sXG4gICAgICAgIHNob3dMaW5rVmlkZW86ICEwLFxuICAgICAgICB1cGxvYWRWaWRlb0FjY2VwdDogW1wibXA0XCJdLFxuICAgICAgICB1cGxvYWRWaWRlb1NlcnZlcjogXCJcIixcbiAgICAgICAgdXBsb2FkVmlkZW9NYXhTaXplOiAxICogMTAyNCAqIDEwMjQgKiAxMDI0LFxuICAgICAgICB1cGxvYWRWaWRlb05hbWU6IFwiXCIsXG4gICAgICAgIHVwbG9hZFZpZGVvUGFyYW1zOiB7fSxcbiAgICAgICAgdXBsb2FkVmlkZW9QYXJhbXNXaXRoVXJsOiAhMSxcbiAgICAgICAgdXBsb2FkVmlkZW9IZWFkZXJzOiB7fSxcbiAgICAgICAgdXBsb2FkVmlkZW9Ib29rczoge30sXG4gICAgICAgIHVwbG9hZFZpZGVvVGltZW91dDogMWUzICogNjAgKiA2MCAqIDIsXG4gICAgICAgIHdpdGhWaWRlb0NyZWRlbnRpYWxzOiAhMSxcbiAgICAgICAgY3VzdG9tVXBsb2FkVmlkZW86IG51bGwsXG4gICAgICAgIGN1c3RvbUluc2VydFZpZGVvOiBudWxsXG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoMTcpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBwID0gdCgyKSwgdiA9IHAuX19pbXBvcnREZWZhdWx0KHQoMykpLCBiID0gdCg2KSwgUyA9IHQoNyksIEQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZnVuY3Rpb24gVChtKSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudFJhbmdlID0gbnVsbCwgdGhpcy5lZGl0b3IgPSBtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBULnByb3RvdHlwZS5nZXRSYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50UmFuZ2U7XG4gICAgICAgIH0sIFQucHJvdG90eXBlLnNhdmVSYW5nZSA9IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgICBpZiAobSkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFJhbmdlID0gbTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHggPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgaWYgKHgucmFuZ2VDb3VudCAhPT0gMCkge1xuICAgICAgICAgICAgdmFyIFIgPSB4LmdldFJhbmdlQXQoMCksIHcgPSB0aGlzLmdldFNlbGVjdGlvbkNvbnRhaW5lckVsZW0oUik7XG4gICAgICAgICAgICBpZiAoISEodyAhPSBudWxsICYmIHcubGVuZ3RoKSAmJiAhKHcuYXR0cihcImNvbnRlbnRlZGl0YWJsZVwiKSA9PT0gXCJmYWxzZVwiIHx8IHcucGFyZW50VW50aWwoXCJbY29udGVudGVkaXRhYmxlPWZhbHNlXVwiKSkpIHtcbiAgICAgICAgICAgICAgdmFyIEEgPSB0aGlzLmVkaXRvciwgRSA9IEEuJHRleHRFbGVtO1xuICAgICAgICAgICAgICBpZiAoRS5pc0NvbnRhaW4odykpIHtcbiAgICAgICAgICAgICAgICBpZiAoRS5lbGVtc1swXSA9PT0gdy5lbGVtc1swXSkge1xuICAgICAgICAgICAgICAgICAgdmFyIEM7XG4gICAgICAgICAgICAgICAgICBpZiAoKDAsIGMuZGVmYXVsdCkoQyA9IEUuaHRtbCgpKS5jYWxsKEMpID09PSBTLkVNUFRZX1ApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE0gPSBFLmNoaWxkcmVuKCksIHkgPSBNID09IG51bGwgPyB2b2lkIDAgOiBNLmxhc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgQS5zZWxlY3Rpb24uY3JlYXRlUmFuZ2VCeUVsZW0oeSwgITAsICEwKSwgQS5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50UmFuZ2UgPSBSO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LCBULnByb3RvdHlwZS5jb2xsYXBzZVJhbmdlID0gZnVuY3Rpb24obSkge1xuICAgICAgICAgIG0gPT09IHZvaWQgMCAmJiAobSA9ICExKTtcbiAgICAgICAgICB2YXIgeCA9IHRoaXMuX2N1cnJlbnRSYW5nZTtcbiAgICAgICAgICB4ICYmIHguY29sbGFwc2UobSk7XG4gICAgICAgIH0sIFQucHJvdG90eXBlLmdldFNlbGVjdGlvblRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgbSA9IHRoaXMuX2N1cnJlbnRSYW5nZTtcbiAgICAgICAgICByZXR1cm4gbSA/IG0udG9TdHJpbmcoKSA6IFwiXCI7XG4gICAgICAgIH0sIFQucHJvdG90eXBlLmdldFNlbGVjdGlvbkNvbnRhaW5lckVsZW0gPSBmdW5jdGlvbihtKSB7XG4gICAgICAgICAgdmFyIHg7XG4gICAgICAgICAgeCA9IG0gfHwgdGhpcy5fY3VycmVudFJhbmdlO1xuICAgICAgICAgIHZhciBSO1xuICAgICAgICAgIGlmICh4KVxuICAgICAgICAgICAgcmV0dXJuIFIgPSB4LmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLCB2LmRlZmF1bHQoUi5ub2RlVHlwZSA9PT0gMSA/IFIgOiBSLnBhcmVudE5vZGUpO1xuICAgICAgICB9LCBULnByb3RvdHlwZS5nZXRTZWxlY3Rpb25TdGFydEVsZW0gPSBmdW5jdGlvbihtKSB7XG4gICAgICAgICAgdmFyIHg7XG4gICAgICAgICAgeCA9IG0gfHwgdGhpcy5fY3VycmVudFJhbmdlO1xuICAgICAgICAgIHZhciBSO1xuICAgICAgICAgIGlmICh4KVxuICAgICAgICAgICAgcmV0dXJuIFIgPSB4LnN0YXJ0Q29udGFpbmVyLCB2LmRlZmF1bHQoUi5ub2RlVHlwZSA9PT0gMSA/IFIgOiBSLnBhcmVudE5vZGUpO1xuICAgICAgICB9LCBULnByb3RvdHlwZS5nZXRTZWxlY3Rpb25FbmRFbGVtID0gZnVuY3Rpb24obSkge1xuICAgICAgICAgIHZhciB4O1xuICAgICAgICAgIHggPSBtIHx8IHRoaXMuX2N1cnJlbnRSYW5nZTtcbiAgICAgICAgICB2YXIgUjtcbiAgICAgICAgICBpZiAoeClcbiAgICAgICAgICAgIHJldHVybiBSID0geC5lbmRDb250YWluZXIsIHYuZGVmYXVsdChSLm5vZGVUeXBlID09PSAxID8gUiA6IFIucGFyZW50Tm9kZSk7XG4gICAgICAgIH0sIFQucHJvdG90eXBlLmlzU2VsZWN0aW9uRW1wdHkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgbSA9IHRoaXMuX2N1cnJlbnRSYW5nZTtcbiAgICAgICAgICByZXR1cm4gISEobSAmJiBtLnN0YXJ0Q29udGFpbmVyICYmIG0uc3RhcnRDb250YWluZXIgPT09IG0uZW5kQ29udGFpbmVyICYmIG0uc3RhcnRPZmZzZXQgPT09IG0uZW5kT2Zmc2V0KTtcbiAgICAgICAgfSwgVC5wcm90b3R5cGUucmVzdG9yZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBtID0gd2luZG93LmdldFNlbGVjdGlvbigpLCB4ID0gdGhpcy5fY3VycmVudFJhbmdlO1xuICAgICAgICAgIG0gJiYgeCAmJiAobS5yZW1vdmVBbGxSYW5nZXMoKSwgbS5hZGRSYW5nZSh4KSk7XG4gICAgICAgIH0sIFQucHJvdG90eXBlLmNyZWF0ZUVtcHR5UmFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgbSA9IHRoaXMuZWRpdG9yLCB4ID0gdGhpcy5nZXRSYW5nZSgpLCBSO1xuICAgICAgICAgIGlmICghIXggJiYgISF0aGlzLmlzU2VsZWN0aW9uRW1wdHkoKSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGIuVUEuaXNXZWJraXQoKSA/IChtLmNtZC5kbyhcImluc2VydEhUTUxcIiwgXCImIzgyMDM7XCIpLCB4LnNldEVuZCh4LmVuZENvbnRhaW5lciwgeC5lbmRPZmZzZXQgKyAxKSwgdGhpcy5zYXZlUmFuZ2UoeCkpIDogKFIgPSB2LmRlZmF1bHQoXCI8c3Ryb25nPiYjODIwMzs8L3N0cm9uZz5cIiksIG0uY21kLmRvKFwiaW5zZXJ0RWxlbVwiLCBSKSwgdGhpcy5jcmVhdGVSYW5nZUJ5RWxlbShSLCAhMCkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFQucHJvdG90eXBlLmNyZWF0ZVJhbmdlQnlFbGVtcyA9IGZ1bmN0aW9uKG0sIHgpIHtcbiAgICAgICAgICB2YXIgUiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24gPyB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkgOiBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICBSID09IG51bGwgfHwgUi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICB2YXIgdyA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgdy5zZXRTdGFydChtLCAwKSwgdy5zZXRFbmQoeCwgeC5jaGlsZE5vZGVzLmxlbmd0aCB8fCAxKSwgdGhpcy5zYXZlUmFuZ2UodyksIHRoaXMucmVzdG9yZVNlbGVjdGlvbigpO1xuICAgICAgICB9LCBULnByb3RvdHlwZS5jcmVhdGVSYW5nZUJ5RWxlbSA9IGZ1bmN0aW9uKG0sIHgsIFIpIHtcbiAgICAgICAgICBpZiAoISFtLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIHcgPSBtLmVsZW1zWzBdLCBBID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgICAgIFIgPyBBLnNlbGVjdE5vZGVDb250ZW50cyh3KSA6IEEuc2VsZWN0Tm9kZSh3KSwgeCAhPSBudWxsICYmIChBLmNvbGxhcHNlKHgpLCB4IHx8ICh0aGlzLnNhdmVSYW5nZShBKSwgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLm1vdmVDdXJzb3IodykpKSwgdGhpcy5zYXZlUmFuZ2UoQSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBULnByb3RvdHlwZS5nZXRTZWxlY3Rpb25SYW5nZVRvcE5vZGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIG0sIHgsIFIsIHcgPSAobSA9IHRoaXMuZ2V0U2VsZWN0aW9uU3RhcnRFbGVtKCkpID09PSBudWxsIHx8IG0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG0uZ2V0Tm9kZVRvcCh0aGlzLmVkaXRvciksIEEgPSAoeCA9IHRoaXMuZ2V0U2VsZWN0aW9uRW5kRWxlbSgpKSA9PT0gbnVsbCB8fCB4ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB4LmdldE5vZGVUb3AodGhpcy5lZGl0b3IpO1xuICAgICAgICAgIHJldHVybiBSID0gdGhpcy5yZWNvcmRTZWxlY3Rpb25Ob2Rlcyh2LmRlZmF1bHQodyksIHYuZGVmYXVsdChBKSksIFI7XG4gICAgICAgIH0sIFQucHJvdG90eXBlLm1vdmVDdXJzb3IgPSBmdW5jdGlvbihtLCB4KSB7XG4gICAgICAgICAgdmFyIFIsIHcgPSB0aGlzLmdldFJhbmdlKCksIEEgPSBtLm5vZGVUeXBlID09PSAzID8gKFIgPSBtLm5vZGVWYWx1ZSkgPT09IG51bGwgfHwgUiA9PT0gdm9pZCAwID8gdm9pZCAwIDogUi5sZW5ndGggOiBtLmNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgICAgIChiLlVBLmlzRmlyZWZveCB8fCBiLlVBLmlzSUUoKSkgJiYgQSAhPT0gMCAmJiAobS5ub2RlVHlwZSA9PT0gMyB8fCBtLmNoaWxkTm9kZXNbQSAtIDFdLm5vZGVOYW1lID09PSBcIkJSXCIpICYmIChBID0gQSAtIDEpO1xuICAgICAgICAgIHZhciBFID0geCAhPSBudWxsID8geCA6IEE7XG4gICAgICAgICAgIXcgfHwgbSAmJiAody5zZXRTdGFydChtLCBFKSwgdy5zZXRFbmQobSwgRSksIHRoaXMucmVzdG9yZVNlbGVjdGlvbigpKTtcbiAgICAgICAgfSwgVC5wcm90b3R5cGUuZ2V0Q3Vyc29yUG9zID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIG0gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuIG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uYW5jaG9yT2Zmc2V0O1xuICAgICAgICB9LCBULnByb3RvdHlwZS5jbGVhcldpbmRvd1NlbGVjdGlvblJhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIG0gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgbSAmJiBtLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICB9LCBULnByb3RvdHlwZS5yZWNvcmRTZWxlY3Rpb25Ob2RlcyA9IGZ1bmN0aW9uKG0sIHgpIHtcbiAgICAgICAgICB2YXIgUiA9IFtdLCB3ID0gITA7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIEEgPSBtLCBFID0gdGhpcy5lZGl0b3IuJHRleHRFbGVtOyB3OyApIHtcbiAgICAgICAgICAgICAgdmFyIEMgPSBBID09IG51bGwgPyB2b2lkIDAgOiBBLmdldE5vZGVUb3AodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICBDLmdldE5vZGVOYW1lKCkgPT09IFwiQk9EWVwiICYmICh3ID0gITEpLCBDLmxlbmd0aCA+IDAgJiYgKFIucHVzaCh2LmRlZmF1bHQoQSkpLCAoeCA9PSBudWxsID8gdm9pZCAwIDogeC5lcXVhbChDKSkgfHwgRS5lcXVhbChDKSA/IHcgPSAhMSA6IEEgPSBDLmdldE5leHRTaWJsaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgdyA9ICExO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gUjtcbiAgICAgICAgfSwgVC5wcm90b3R5cGUuc2V0UmFuZ2VUb0VsZW0gPSBmdW5jdGlvbihtKSB7XG4gICAgICAgICAgdmFyIHggPSB0aGlzLmdldFJhbmdlKCk7XG4gICAgICAgICAgeCA9PSBudWxsIHx8IHguc2V0U3RhcnQobSwgMCksIHggPT0gbnVsbCB8fCB4LnNldEVuZChtLCAwKTtcbiAgICAgICAgfSwgVDtcbiAgICAgIH0oKTtcbiAgICAgIGkuZGVmYXVsdCA9IEQ7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBjID0gdCgyKSwgcCA9IGMuX19pbXBvcnREZWZhdWx0KHQoMykpLCB2ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZ1bmN0aW9uIGIoUykge1xuICAgICAgICAgIHRoaXMuZWRpdG9yID0gUztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYi5wcm90b3R5cGUuZG8gPSBmdW5jdGlvbihTLCBEKSB7XG4gICAgICAgICAgdmFyIFQgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgICBULmNvbmZpZy5zdHlsZVdpdGhDU1MgJiYgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJzdHlsZVdpdGhDU1NcIiwgITEsIFwidHJ1ZVwiKTtcbiAgICAgICAgICB2YXIgbSA9IFQuc2VsZWN0aW9uO1xuICAgICAgICAgIGlmICghIW0uZ2V0UmFuZ2UoKSkge1xuICAgICAgICAgICAgc3dpdGNoIChtLnJlc3RvcmVTZWxlY3Rpb24oKSwgUykge1xuICAgICAgICAgICAgICBjYXNlIFwiaW5zZXJ0SFRNTFwiOlxuICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0SFRNTChEKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcImluc2VydEVsZW1cIjpcbiAgICAgICAgICAgICAgICB0aGlzLmluc2VydEVsZW0oRCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5leGVjQ29tbWFuZChTLCBEKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFQubWVudXMuY2hhbmdlQWN0aXZlKCksIG0uc2F2ZVJhbmdlKCksIG0ucmVzdG9yZVNlbGVjdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgYi5wcm90b3R5cGUuaW5zZXJ0SFRNTCA9IGZ1bmN0aW9uKFMpIHtcbiAgICAgICAgICB2YXIgRCA9IHRoaXMuZWRpdG9yLCBUID0gRC5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTtcbiAgICAgICAgICBpZiAoVCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoXCJpbnNlcnRIVE1MXCIpKVxuICAgICAgICAgICAgICB0aGlzLmV4ZWNDb21tYW5kKFwiaW5zZXJ0SFRNTFwiLCBTKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKFQuaW5zZXJ0Tm9kZSkge1xuICAgICAgICAgICAgICBpZiAoVC5kZWxldGVDb250ZW50cygpLCBwLmRlZmF1bHQoUykuZWxlbXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBULmluc2VydE5vZGUocC5kZWZhdWx0KFMpLmVsZW1zWzBdKTtcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICAgICAgICAgICAgICBtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFMpKSwgVC5pbnNlcnROb2RlKG0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEQuc2VsZWN0aW9uLmNvbGxhcHNlUmFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sIGIucHJvdG90eXBlLmluc2VydEVsZW0gPSBmdW5jdGlvbihTKSB7XG4gICAgICAgICAgdmFyIEQgPSB0aGlzLmVkaXRvciwgVCA9IEQuc2VsZWN0aW9uLmdldFJhbmdlKCk7XG4gICAgICAgICAgVCAhPSBudWxsICYmIFQuaW5zZXJ0Tm9kZSAmJiAoVC5kZWxldGVDb250ZW50cygpLCBULmluc2VydE5vZGUoUy5lbGVtc1swXSkpO1xuICAgICAgICB9LCBiLnByb3RvdHlwZS5leGVjQ29tbWFuZCA9IGZ1bmN0aW9uKFMsIEQpIHtcbiAgICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChTLCAhMSwgRCk7XG4gICAgICAgIH0sIGIucHJvdG90eXBlLnF1ZXJ5Q29tbWFuZFZhbHVlID0gZnVuY3Rpb24oUykge1xuICAgICAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeUNvbW1hbmRWYWx1ZShTKTtcbiAgICAgICAgfSwgYi5wcm90b3R5cGUucXVlcnlDb21tYW5kU3RhdGUgPSBmdW5jdGlvbihTKSB7XG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN0YXRlKFMpO1xuICAgICAgICB9LCBiLnByb3RvdHlwZS5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQgPSBmdW5jdGlvbihTKSB7XG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChTKTtcbiAgICAgICAgfSwgYjtcbiAgICAgIH0oKTtcbiAgICAgIGkuZGVmYXVsdCA9IHY7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCgzMSkpLCBwID0gcyh0KDQpKSwgdiA9IHModCgxNykpLCBiID0gcyh0KDI3KSksIFMgPSBzKHQoNDYpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBEID0gdCgyKSwgVCA9IEQuX19pbXBvcnREZWZhdWx0KHQoMykpLCBtID0gRC5fX2ltcG9ydERlZmF1bHQodCgyODcpKSwgeCA9IHQoNiksIFIgPSBELl9faW1wb3J0RGVmYXVsdCh0KDI5OSkpLCB3ID0gRC5fX2ltcG9ydERlZmF1bHQodCgzMDApKSwgQSA9IHQoNyksIEUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZnVuY3Rpb24gQyhNKSB7XG4gICAgICAgICAgdGhpcy5lZGl0b3IgPSBNLCB0aGlzLmV2ZW50SG9va3MgPSB7IG9uQmx1ckV2ZW50czogW10sIGNoYW5nZUV2ZW50czogW10sIGRyb3BFdmVudHM6IFtdLCBjbGlja0V2ZW50czogW10sIGtleWRvd25FdmVudHM6IFtdLCBrZXl1cEV2ZW50czogW10sIHRhYlVwRXZlbnRzOiBbXSwgdGFiRG93bkV2ZW50czogW10sIGVudGVyVXBFdmVudHM6IFtdLCBlbnRlckRvd25FdmVudHM6IFtdLCBkZWxldGVVcEV2ZW50czogW10sIGRlbGV0ZURvd25FdmVudHM6IFtdLCBwYXN0ZUV2ZW50czogW10sIGxpbmtDbGlja0V2ZW50czogW10sIGNvZGVDbGlja0V2ZW50czogW10sIHRleHRTY3JvbGxFdmVudHM6IFtdLCB0b29sYmFyQ2xpY2tFdmVudHM6IFtdLCBpbWdDbGlja0V2ZW50czogW10sIGltZ0RyYWdCYXJNb3VzZURvd25FdmVudHM6IFtdLCB0YWJsZUNsaWNrRXZlbnRzOiBbXSwgbWVudUNsaWNrRXZlbnRzOiBbXSwgZHJvcExpc3RNZW51SG92ZXJFdmVudHM6IFtdLCBzcGxpdExpbmVFdmVudHM6IFtdLCB2aWRlb0NsaWNrRXZlbnRzOiBbXSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBDLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGhpcy5fc2F2ZVJhbmdlKCksIHRoaXMuX2JpbmRFdmVudEhvb2tzKCksIG0uZGVmYXVsdCh0aGlzKTtcbiAgICAgICAgfSwgQy5wcm90b3R5cGUudG9nZ2xlUGxhY2Vob2xkZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgTSwgeSA9IHRoaXMuaHRtbCgpLCBCID0gKDAsIGMuZGVmYXVsdCkoTSA9IHRoaXMuZWRpdG9yLiR0ZXh0Q29udGFpbmVyRWxlbSkuY2FsbChNLCBcIi5wbGFjZWhvbGRlclwiKTtcbiAgICAgICAgICBCLmhpZGUoKSwgIXRoaXMuZWRpdG9yLmlzQ29tcG9zaW5nICYmICgheSB8fCB5ID09PSBcIiBcIikgJiYgQi5zaG93KCk7XG4gICAgICAgIH0sIEMucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGhpcy5odG1sKEEuRU1QVFlfUCk7XG4gICAgICAgIH0sIEMucHJvdG90eXBlLmh0bWwgPSBmdW5jdGlvbihNKSB7XG4gICAgICAgICAgdmFyIHkgPSB0aGlzLmVkaXRvciwgQiA9IHkuJHRleHRFbGVtO1xuICAgICAgICAgIGlmIChNID09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciAkID0gQi5odG1sKCk7XG4gICAgICAgICAgICAkID0gJC5yZXBsYWNlKC9cXHUyMDBiL2dtLCBcIlwiKSwgJCA9ICQucmVwbGFjZSgvPHA+PFxcL3A+L2dpbSwgXCJcIiksICQgPSAkLnJlcGxhY2UoQS5FTVBUWV9QX0xBU1RfUkVHRVgsIFwiXCIpLCAkID0gJC5yZXBsYWNlKEEuRU1QVFlfUF9SRUdFWCwgXCI8cD5cIik7XG4gICAgICAgICAgICB2YXIgRiA9ICQubWF0Y2goLzwoaW1nfGJyfGhyfGlucHV0KVtePl0qPi9naSk7XG4gICAgICAgICAgICByZXR1cm4gRiAhPT0gbnVsbCAmJiAoMCwgcC5kZWZhdWx0KShGKS5jYWxsKEYsIGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgICAgay5tYXRjaCgvXFwvPi8pIHx8ICgkID0gJC5yZXBsYWNlKGssIGsuc3Vic3RyaW5nKDAsIGsubGVuZ3RoIC0gMSkgKyBcIi8+XCIpKTtcbiAgICAgICAgICAgIH0pLCAkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBNID0gKDAsIHYuZGVmYXVsdCkoTSkuY2FsbChNKSwgTSA9PT0gXCJcIiAmJiAoTSA9IEEuRU1QVFlfUCksICgwLCBiLmRlZmF1bHQpKE0pLmNhbGwoTSwgXCI8XCIpICE9PSAwICYmIChNID0gXCI8cD5cIiArIE0gKyBcIjwvcD5cIiksIEIuaHRtbChNKSwgeS5pbml0U2VsZWN0aW9uKCk7XG4gICAgICAgIH0sIEMucHJvdG90eXBlLnNldEpTT04gPSBmdW5jdGlvbihNKSB7XG4gICAgICAgICAgdmFyIHkgPSB3LmRlZmF1bHQoTSkuY2hpbGRyZW4oKSwgQiA9IHRoaXMuZWRpdG9yLCAkID0gQi4kdGV4dEVsZW07XG4gICAgICAgICAgIXkgfHwgJC5yZXBsYWNlQ2hpbGRBbGwoeSk7XG4gICAgICAgIH0sIEMucHJvdG90eXBlLmdldEpTT04gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgTSA9IHRoaXMuZWRpdG9yLCB5ID0gTS4kdGV4dEVsZW07XG4gICAgICAgICAgcmV0dXJuIFIuZGVmYXVsdCh5KTtcbiAgICAgICAgfSwgQy5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uKE0pIHtcbiAgICAgICAgICB2YXIgeSA9IHRoaXMuZWRpdG9yLCBCID0geS4kdGV4dEVsZW07XG4gICAgICAgICAgaWYgKE0gPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyICQgPSBCLnRleHQoKTtcbiAgICAgICAgICAgIHJldHVybiAkID0gJC5yZXBsYWNlKC9cXHUyMDBiL2dtLCBcIlwiKSwgJDtcbiAgICAgICAgICB9XG4gICAgICAgICAgQi50ZXh0KFwiPHA+XCIgKyBNICsgXCI8L3A+XCIpLCB5LmluaXRTZWxlY3Rpb24oKTtcbiAgICAgICAgfSwgQy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oTSkge1xuICAgICAgICAgIHZhciB5ID0gdGhpcy5lZGl0b3I7XG4gICAgICAgICAgKDAsIGIuZGVmYXVsdCkoTSkuY2FsbChNLCBcIjxcIikgIT09IDAgJiYgKE0gPSBcIjxwPlwiICsgTSArIFwiPC9wPlwiKSwgdGhpcy5odG1sKHRoaXMuaHRtbCgpICsgTSksIHkuaW5pdFNlbGVjdGlvbigpO1xuICAgICAgICB9LCBDLnByb3RvdHlwZS5fc2F2ZVJhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIE0gPSB0aGlzLmVkaXRvciwgeSA9IE0uJHRleHRFbGVtLCBCID0gVC5kZWZhdWx0KGRvY3VtZW50KTtcbiAgICAgICAgICBmdW5jdGlvbiAkKCkge1xuICAgICAgICAgICAgTS5zZWxlY3Rpb24uc2F2ZVJhbmdlKCksIE0ubWVudXMuY2hhbmdlQWN0aXZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHkub24oXCJrZXl1cFwiLCAkKTtcbiAgICAgICAgICBmdW5jdGlvbiBGKCkge1xuICAgICAgICAgICAgJCgpLCB5Lm9mZihcImNsaWNrXCIsIEYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB5Lm9uKFwiY2xpY2tcIiwgRik7XG4gICAgICAgICAgZnVuY3Rpb24gaygpIHtcbiAgICAgICAgICAgICQoKSwgQi5vZmYoXCJtb3VzZXVwXCIsIGspO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBoKCkge1xuICAgICAgICAgICAgQi5vbihcIm1vdXNldXBcIiwgayksIHkub2ZmKFwibW91c2VsZWF2ZVwiLCBoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgeS5vbihcIm1vdXNlZG93blwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHkub24oXCJtb3VzZWxlYXZlXCIsIGgpO1xuICAgICAgICAgIH0pLCB5Lm9uKFwibW91c2V1cFwiLCBmdW5jdGlvbihOKSB7XG4gICAgICAgICAgICB5Lm9mZihcIm1vdXNlbGVhdmVcIiwgaCksICgwLCBTLmRlZmF1bHQpKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIgUCA9IE0uc2VsZWN0aW9uLCBqID0gUC5nZXRSYW5nZSgpO1xuICAgICAgICAgICAgICBqICE9PSBudWxsICYmICQoKTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBDLnByb3RvdHlwZS5fYmluZEV2ZW50SG9va3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgTSA9IHRoaXMuZWRpdG9yLCB5ID0gTS4kdGV4dEVsZW0sIEIgPSB0aGlzLmV2ZW50SG9va3M7XG4gICAgICAgICAgeS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKEYpIHtcbiAgICAgICAgICAgIHZhciBrID0gQi5jbGlja0V2ZW50cztcbiAgICAgICAgICAgICgwLCBwLmRlZmF1bHQpKGspLmNhbGwoaywgZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgICByZXR1cm4gaChGKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLCB5Lm9uKFwia2V5dXBcIiwgZnVuY3Rpb24oRikge1xuICAgICAgICAgICAgaWYgKEYua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgdmFyIGsgPSBCLmVudGVyVXBFdmVudHM7XG4gICAgICAgICAgICAgICgwLCBwLmRlZmF1bHQpKGspLmNhbGwoaywgZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBoKEYpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSwgeS5vbihcImtleXVwXCIsIGZ1bmN0aW9uKEYpIHtcbiAgICAgICAgICAgIHZhciBrID0gQi5rZXl1cEV2ZW50cztcbiAgICAgICAgICAgICgwLCBwLmRlZmF1bHQpKGspLmNhbGwoaywgZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgICByZXR1cm4gaChGKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLCB5Lm9uKFwia2V5ZG93blwiLCBmdW5jdGlvbihGKSB7XG4gICAgICAgICAgICB2YXIgayA9IEIua2V5ZG93bkV2ZW50cztcbiAgICAgICAgICAgICgwLCBwLmRlZmF1bHQpKGspLmNhbGwoaywgZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgICByZXR1cm4gaChGKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLCB5Lm9uKFwia2V5dXBcIiwgZnVuY3Rpb24oRikge1xuICAgICAgICAgICAgaWYgKCEoRi5rZXlDb2RlICE9PSA4ICYmIEYua2V5Q29kZSAhPT0gNDYpKSB7XG4gICAgICAgICAgICAgIHZhciBrID0gQi5kZWxldGVVcEV2ZW50cztcbiAgICAgICAgICAgICAgKDAsIHAuZGVmYXVsdCkoaykuY2FsbChrLCBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGgoRik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLCB5Lm9uKFwia2V5ZG93blwiLCBmdW5jdGlvbihGKSB7XG4gICAgICAgICAgICBpZiAoIShGLmtleUNvZGUgIT09IDggJiYgRi5rZXlDb2RlICE9PSA0NikpIHtcbiAgICAgICAgICAgICAgdmFyIGsgPSBCLmRlbGV0ZURvd25FdmVudHM7XG4gICAgICAgICAgICAgICgwLCBwLmRlZmF1bHQpKGspLmNhbGwoaywgZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBoKEYpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSwgeS5vbihcInBhc3RlXCIsIGZ1bmN0aW9uKEYpIHtcbiAgICAgICAgICAgIGlmICgheC5VQS5pc0lFKCkpIHtcbiAgICAgICAgICAgICAgRi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICB2YXIgayA9IEIucGFzdGVFdmVudHM7XG4gICAgICAgICAgICAgICgwLCBwLmRlZmF1bHQpKGspLmNhbGwoaywgZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBoKEYpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSwgeS5vbihcImtleWRvd25cIiwgZnVuY3Rpb24oRikge1xuICAgICAgICAgICAgKE0uaXNGb2N1cyB8fCBNLmlzQ29tcGF0aWJsZU1vZGUpICYmIChGLmN0cmxLZXkgfHwgRi5tZXRhS2V5KSAmJiBGLmtleUNvZGUgPT09IDkwICYmIChGLnByZXZlbnREZWZhdWx0KCksIEYuc2hpZnRLZXkgPyBNLmhpc3RvcnkucmVzdG9yZSgpIDogTS5oaXN0b3J5LnJldm9rZSgpKTtcbiAgICAgICAgICB9KSwgeS5vbihcImtleXVwXCIsIGZ1bmN0aW9uKEYpIHtcbiAgICAgICAgICAgIGlmIChGLmtleUNvZGUgPT09IDkpIHtcbiAgICAgICAgICAgICAgRi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICB2YXIgayA9IEIudGFiVXBFdmVudHM7XG4gICAgICAgICAgICAgICgwLCBwLmRlZmF1bHQpKGspLmNhbGwoaywgZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBoKEYpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSwgeS5vbihcImtleWRvd25cIiwgZnVuY3Rpb24oRikge1xuICAgICAgICAgICAgaWYgKEYua2V5Q29kZSA9PT0gOSkge1xuICAgICAgICAgICAgICBGLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIHZhciBrID0gQi50YWJEb3duRXZlbnRzO1xuICAgICAgICAgICAgICAoMCwgcC5kZWZhdWx0KShrKS5jYWxsKGssIGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaChGKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksIHkub24oXG4gICAgICAgICAgICBcInNjcm9sbFwiLFxuICAgICAgICAgICAgeC50aHJvdHRsZShmdW5jdGlvbihGKSB7XG4gICAgICAgICAgICAgIHZhciBrID0gQi50ZXh0U2Nyb2xsRXZlbnRzO1xuICAgICAgICAgICAgICAoMCwgcC5kZWZhdWx0KShrKS5jYWxsKGssIGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaChGKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAxMDApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBmdW5jdGlvbiAkKEYpIHtcbiAgICAgICAgICAgIEYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgVC5kZWZhdWx0KGRvY3VtZW50KS5vbihcImRyYWdsZWF2ZVwiLCAkKS5vbihcImRyb3BcIiwgJCkub24oXCJkcmFnZW50ZXJcIiwgJCkub24oXCJkcmFnb3ZlclwiLCAkKSwgTS5iZWZvcmVEZXN0cm95KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgVC5kZWZhdWx0KGRvY3VtZW50KS5vZmYoXCJkcmFnbGVhdmVcIiwgJCkub2ZmKFwiZHJvcFwiLCAkKS5vZmYoXCJkcmFnZW50ZXJcIiwgJCkub2ZmKFwiZHJhZ292ZXJcIiwgJCk7XG4gICAgICAgICAgfSksIHkub24oXCJkcm9wXCIsIGZ1bmN0aW9uKEYpIHtcbiAgICAgICAgICAgIEYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHZhciBrID0gQi5kcm9wRXZlbnRzO1xuICAgICAgICAgICAgKDAsIHAuZGVmYXVsdCkoaykuY2FsbChrLCBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoKEYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksIHkub24oXCJjbGlja1wiLCBmdW5jdGlvbihGKSB7XG4gICAgICAgICAgICB2YXIgayA9IG51bGwsIGggPSBGLnRhcmdldCwgTiA9IFQuZGVmYXVsdChoKTtcbiAgICAgICAgICAgIGlmIChOLmdldE5vZGVOYW1lKCkgPT09IFwiQVwiKVxuICAgICAgICAgICAgICBrID0gTjtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgUCA9IE4ucGFyZW50VW50aWwoXCJhXCIpO1xuICAgICAgICAgICAgICBQICE9IG51bGwgJiYgKGsgPSBQKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghIWspIHtcbiAgICAgICAgICAgICAgdmFyIGogPSBCLmxpbmtDbGlja0V2ZW50cztcbiAgICAgICAgICAgICAgKDAsIHAuZGVmYXVsdCkoaikuY2FsbChqLCBmdW5jdGlvbihJKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEkoayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLCB5Lm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oRikge1xuICAgICAgICAgICAgdmFyIGsgPSBudWxsLCBoID0gRi50YXJnZXQsIE4gPSBULmRlZmF1bHQoaCk7XG4gICAgICAgICAgICBpZiAoTi5nZXROb2RlTmFtZSgpID09PSBcIklNR1wiICYmICFOLmVsZW1zWzBdLmdldEF0dHJpYnV0ZShcImRhdGEtZW1vamlcIikgJiYgKEYuc3RvcFByb3BhZ2F0aW9uKCksIGsgPSBOKSwgISFrKSB7XG4gICAgICAgICAgICAgIHZhciBQID0gQi5pbWdDbGlja0V2ZW50cztcbiAgICAgICAgICAgICAgKDAsIHAuZGVmYXVsdCkoUCkuY2FsbChQLCBmdW5jdGlvbihqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGooayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLCB5Lm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oRikge1xuICAgICAgICAgICAgdmFyIGsgPSBudWxsLCBoID0gRi50YXJnZXQsIE4gPSBULmRlZmF1bHQoaCk7XG4gICAgICAgICAgICBpZiAoTi5nZXROb2RlTmFtZSgpID09PSBcIlBSRVwiKVxuICAgICAgICAgICAgICBrID0gTjtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgUCA9IE4ucGFyZW50VW50aWwoXCJwcmVcIik7XG4gICAgICAgICAgICAgIFAgIT09IG51bGwgJiYgKGsgPSBQKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghIWspIHtcbiAgICAgICAgICAgICAgdmFyIGogPSBCLmNvZGVDbGlja0V2ZW50cztcbiAgICAgICAgICAgICAgKDAsIHAuZGVmYXVsdCkoaikuY2FsbChqLCBmdW5jdGlvbihJKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEkoayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLCB5Lm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oRikge1xuICAgICAgICAgICAgdmFyIGsgPSBudWxsLCBoID0gRi50YXJnZXQsIE4gPSBULmRlZmF1bHQoaCk7XG4gICAgICAgICAgICBpZiAoTi5nZXROb2RlTmFtZSgpID09PSBcIkhSXCIgJiYgKGsgPSBOKSwgISFrKSB7XG4gICAgICAgICAgICAgIE0uc2VsZWN0aW9uLmNyZWF0ZVJhbmdlQnlFbGVtKGspLCBNLnNlbGVjdGlvbi5yZXN0b3JlU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgIHZhciBQID0gQi5zcGxpdExpbmVFdmVudHM7XG4gICAgICAgICAgICAgICgwLCBwLmRlZmF1bHQpKFApLmNhbGwoUCwgZnVuY3Rpb24oaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBqKGspO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSwgTS4kdG9vbGJhckVsZW0ub24oXCJjbGlja1wiLCBmdW5jdGlvbihGKSB7XG4gICAgICAgICAgICB2YXIgayA9IEIudG9vbGJhckNsaWNrRXZlbnRzO1xuICAgICAgICAgICAgKDAsIHAuZGVmYXVsdCkoaykuY2FsbChrLCBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoKEYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksIE0uJHRleHRDb250YWluZXJFbGVtLm9uKFwibW91c2Vkb3duXCIsIGZ1bmN0aW9uKEYpIHtcbiAgICAgICAgICAgIHZhciBrID0gRi50YXJnZXQsIGggPSBULmRlZmF1bHQoayk7XG4gICAgICAgICAgICBpZiAoaC5oYXNDbGFzcyhcInctZS1pbWctZHJhZy1yYlwiKSkge1xuICAgICAgICAgICAgICB2YXIgTiA9IEIuaW1nRHJhZ0Jhck1vdXNlRG93bkV2ZW50cztcbiAgICAgICAgICAgICAgKDAsIHAuZGVmYXVsdCkoTikuY2FsbChOLCBmdW5jdGlvbihQKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFAoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksIHkub24oXCJjbGlja1wiLCBmdW5jdGlvbihGKSB7XG4gICAgICAgICAgICB2YXIgayA9IG51bGwsIGggPSBGLnRhcmdldDtcbiAgICAgICAgICAgIGlmIChrID0gVC5kZWZhdWx0KGgpLnBhcmVudFVudGlsRWRpdG9yKFwiVEFCTEVcIiwgTSwgaCksICEhaykge1xuICAgICAgICAgICAgICB2YXIgTiA9IEIudGFibGVDbGlja0V2ZW50cztcbiAgICAgICAgICAgICAgKDAsIHAuZGVmYXVsdCkoTikuY2FsbChOLCBmdW5jdGlvbihQKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFAoaywgRik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLCB5Lm9uKFwia2V5ZG93blwiLCBmdW5jdGlvbihGKSB7XG4gICAgICAgICAgICBpZiAoRi5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgICAgICB2YXIgayA9IEIuZW50ZXJEb3duRXZlbnRzO1xuICAgICAgICAgICAgICAoMCwgcC5kZWZhdWx0KShrKS5jYWxsKGssIGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaChGKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksIHkub24oXCJjbGlja1wiLCBmdW5jdGlvbihGKSB7XG4gICAgICAgICAgICB2YXIgayA9IG51bGwsIGggPSBGLnRhcmdldCwgTiA9IFQuZGVmYXVsdChoKTtcbiAgICAgICAgICAgIGlmIChOLmdldE5vZGVOYW1lKCkgPT09IFwiVklERU9cIiAmJiAoRi5zdG9wUHJvcGFnYXRpb24oKSwgayA9IE4pLCAhIWspIHtcbiAgICAgICAgICAgICAgdmFyIFAgPSBCLnZpZGVvQ2xpY2tFdmVudHM7XG4gICAgICAgICAgICAgICgwLCBwLmRlZmF1bHQpKFApLmNhbGwoUCwgZnVuY3Rpb24oaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBqKGspO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgQztcbiAgICAgIH0oKTtcbiAgICAgIGkuZGVmYXVsdCA9IEU7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDI4NCk7XG4gICAgICBvLmV4cG9ydHMgPSBzO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyODUpLCBkID0gQXJyYXkucHJvdG90eXBlO1xuICAgICAgby5leHBvcnRzID0gZnVuY3Rpb24oYykge1xuICAgICAgICB2YXIgcCA9IGMuZmluZDtcbiAgICAgICAgcmV0dXJuIGMgPT09IGQgfHwgYyBpbnN0YW5jZW9mIEFycmF5ICYmIHAgPT09IGQuZmluZCA/IHMgOiBwO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB0KDI4Nik7XG4gICAgICB2YXIgcyA9IHQoMTUpO1xuICAgICAgby5leHBvcnRzID0gcyhcIkFycmF5XCIpLmZpbmQ7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDUpLCBkID0gdCgzMCkuZmluZCwgYyA9IHQoODIpLCBwID0gdCgyMiksIHYgPSBcImZpbmRcIiwgYiA9ICEwLCBTID0gcCh2KTtcbiAgICAgIHYgaW4gW10gJiYgQXJyYXkoMSlbdl0oZnVuY3Rpb24oKSB7XG4gICAgICAgIGIgPSAhMTtcbiAgICAgIH0pLCBzKHsgdGFyZ2V0OiBcIkFycmF5XCIsIHByb3RvOiAhMCwgZm9yY2VkOiBiIHx8ICFTIH0sIHsgZmluZDogZnVuY3Rpb24oVCkge1xuICAgICAgICByZXR1cm4gZCh0aGlzLCBULCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHZvaWQgMCk7XG4gICAgICB9IH0pLCBjKHYpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDI4OCkpLCB2ID0gYy5fX2ltcG9ydFN0YXIodCgyODkpKSwgYiA9IGMuX19pbXBvcnREZWZhdWx0KHQoMjkwKSksIFMgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDI5MSkpLCBEID0gYy5fX2ltcG9ydERlZmF1bHQodCgyOTgpKTtcbiAgICAgIGZ1bmN0aW9uIFQobSkge1xuICAgICAgICB2YXIgeCA9IG0uZWRpdG9yLCBSID0gbS5ldmVudEhvb2tzO1xuICAgICAgICBwLmRlZmF1bHQoeCwgUi5lbnRlclVwRXZlbnRzLCBSLmVudGVyRG93bkV2ZW50cyksIHYuZGVmYXVsdCh4LCBSLmRlbGV0ZVVwRXZlbnRzLCBSLmRlbGV0ZURvd25FdmVudHMpLCB2LmN1dFRvS2VlcFAoeCwgUi5rZXl1cEV2ZW50cyksIGIuZGVmYXVsdCh4LCBSLnRhYkRvd25FdmVudHMpLCBTLmRlZmF1bHQoeCwgUi5wYXN0ZUV2ZW50cyksIEQuZGVmYXVsdCh4LCBSLmltZ0NsaWNrRXZlbnRzKTtcbiAgICAgIH1cbiAgICAgIGkuZGVmYXVsdCA9IFQ7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCgyNykpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIHAgPSB0KDIpLCB2ID0gdCg3KSwgYiA9IHAuX19pbXBvcnREZWZhdWx0KHQoMykpO1xuICAgICAgZnVuY3Rpb24gUyhELCBULCBtKSB7XG4gICAgICAgIGZ1bmN0aW9uIHgoQSkge1xuICAgICAgICAgIHZhciBFLCBDID0gYi5kZWZhdWx0KHYuRU1QVFlfUCk7XG4gICAgICAgICAgaWYgKEMuaW5zZXJ0QmVmb3JlKEEpLCAoMCwgYy5kZWZhdWx0KShFID0gQS5odG1sKCkpLmNhbGwoRSwgXCI8aW1nXCIpID49IDApIHtcbiAgICAgICAgICAgIEMucmVtb3ZlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIEQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlQnlFbGVtKEMsICEwLCAhMCksIEQuc2VsZWN0aW9uLnJlc3RvcmVTZWxlY3Rpb24oKSwgQS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBSKCkge1xuICAgICAgICAgIHZhciBBID0gRC4kdGV4dEVsZW0sIEUgPSBELnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25Db250YWluZXJFbGVtKCksIEMgPSBFLnBhcmVudCgpO1xuICAgICAgICAgIGlmIChDLmh0bWwoKSA9PT0gXCI8Y29kZT48YnI+PC9jb2RlPlwiKSB7XG4gICAgICAgICAgICB4KEMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoRS5nZXROb2RlTmFtZSgpID09PSBcIkZPTlRcIiAmJiBFLnRleHQoKSA9PT0gXCJcIiAmJiBFLmF0dHIoXCJmYWNlXCIpID09PSBcIm1vbm9zcGFjZVwiKSB7XG4gICAgICAgICAgICB4KEMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoISFDLmVxdWFsKEEpKSB7XG4gICAgICAgICAgICB2YXIgTSA9IEUuZ2V0Tm9kZU5hbWUoKTtcbiAgICAgICAgICAgIE0gPT09IFwiUFwiICYmIEUuYXR0cihcImRhdGEtd2UtZW1wdHktcFwiKSA9PT0gbnVsbCB8fCBFLnRleHQoKSB8fCB4KEUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBULnB1c2goUik7XG4gICAgICAgIGZ1bmN0aW9uIHcoQSkge1xuICAgICAgICAgIHZhciBFO1xuICAgICAgICAgIEQuc2VsZWN0aW9uLnNhdmVSYW5nZSgoRSA9IGdldFNlbGVjdGlvbigpKSA9PT0gbnVsbCB8fCBFID09PSB2b2lkIDAgPyB2b2lkIDAgOiBFLmdldFJhbmdlQXQoMCkpO1xuICAgICAgICAgIHZhciBDID0gRC5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uQ29udGFpbmVyRWxlbSgpO1xuICAgICAgICAgIEMuaWQgPT09IEQudGV4dEVsZW1JZCAmJiAoQS5wcmV2ZW50RGVmYXVsdCgpLCBELmNtZC5kbyhcImluc2VydEhUTUxcIiwgXCI8cD48YnI+PC9wPlwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgbS5wdXNoKHcpO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gUztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDE3KSksIHAgPSBzKHQoNDQpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KSwgaS5jdXRUb0tlZXBQID0gdm9pZCAwO1xuICAgICAgdmFyIHYgPSB0KDIpLCBiID0gdCg3KSwgUyA9IHYuX19pbXBvcnREZWZhdWx0KHQoMykpO1xuICAgICAgZnVuY3Rpb24gRChtLCB4LCBSKSB7XG4gICAgICAgIGZ1bmN0aW9uIHcoKSB7XG4gICAgICAgICAgdmFyIEUgPSBtLiR0ZXh0RWxlbSwgQyA9IG0uJHRleHRFbGVtLmh0bWwoKSwgTSA9IG0uJHRleHRFbGVtLnRleHQoKSwgeSA9ICgwLCBjLmRlZmF1bHQpKEMpLmNhbGwoQyksIEIgPSBbXCI8cD48YnI+PC9wPlwiLCBcIjxicj5cIiwgJzxwIGRhdGEtd2UtZW1wdHktcD1cIlwiPjwvcD4nLCBiLkVNUFRZX1BdO1xuICAgICAgICAgIC9eXFxzKiQvLnRlc3QoTSkgJiYgKCF5IHx8ICgwLCBwLmRlZmF1bHQpKEIpLmNhbGwoQiwgeSkpICYmIChFLmh0bWwoYi5FTVBUWV9QKSwgbS5zZWxlY3Rpb24uY3JlYXRlUmFuZ2VCeUVsZW0oRSwgITEsICEwKSwgbS5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpLCBtLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yKEUuZ2V0Tm9kZSgpLCAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgeC5wdXNoKHcpO1xuICAgICAgICBmdW5jdGlvbiBBKEUpIHtcbiAgICAgICAgICB2YXIgQywgTSA9IG0uJHRleHRFbGVtLCB5ID0gKDAsIGMuZGVmYXVsdCkoQyA9IE0uaHRtbCgpLnRvTG93ZXJDYXNlKCkpLmNhbGwoQyk7XG4gICAgICAgICAgaWYgKHkgPT09IGIuRU1QVFlfUCkge1xuICAgICAgICAgICAgRS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBSLnB1c2goQSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBUKG0sIHgpIHtcbiAgICAgICAgZnVuY3Rpb24gUih3KSB7XG4gICAgICAgICAgdmFyIEE7XG4gICAgICAgICAgaWYgKHcua2V5Q29kZSA9PT0gODgpIHtcbiAgICAgICAgICAgIHZhciBFID0gbS4kdGV4dEVsZW0sIEMgPSAoMCwgYy5kZWZhdWx0KShBID0gRS5odG1sKCkudG9Mb3dlckNhc2UoKSkuY2FsbChBKTtcbiAgICAgICAgICAgIGlmICghQyB8fCBDID09PSBcIjxicj5cIikge1xuICAgICAgICAgICAgICB2YXIgTSA9IFMuZGVmYXVsdChiLkVNUFRZX1ApO1xuICAgICAgICAgICAgICBFLmh0bWwoXCIgXCIpLCBFLmFwcGVuZChNKSwgbS5zZWxlY3Rpb24uY3JlYXRlUmFuZ2VCeUVsZW0oTSwgITEsICEwKSwgbS5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpLCBtLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yKE0uZ2V0Tm9kZSgpLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeC5wdXNoKFIpO1xuICAgICAgfVxuICAgICAgaS5jdXRUb0tlZXBQID0gVCwgaS5kZWZhdWx0ID0gRDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgZnVuY3Rpb24gYyhwLCB2KSB7XG4gICAgICAgIGZ1bmN0aW9uIGIoKSB7XG4gICAgICAgICAgaWYgKCEhcC5jbWQucXVlcnlDb21tYW5kU3VwcG9ydGVkKFwiaW5zZXJ0SFRNTFwiKSkge1xuICAgICAgICAgICAgdmFyIFMgPSBwLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25Db250YWluZXJFbGVtKCk7XG4gICAgICAgICAgICBpZiAoISFTKSB7XG4gICAgICAgICAgICAgIHZhciBEID0gUy5wYXJlbnQoKSwgVCA9IFMuZ2V0Tm9kZU5hbWUoKSwgbSA9IEQuZ2V0Tm9kZU5hbWUoKTtcbiAgICAgICAgICAgICAgVCA9PSBcIkNPREVcIiB8fCBtID09PSBcIkNPREVcIiB8fCBtID09PSBcIlBSRVwiIHx8IC9obGpzLy50ZXN0KG0pID8gcC5jbWQuZG8oXCJpbnNlcnRIVE1MXCIsIHAuY29uZmlnLmxhbmd1YWdlVGFiKSA6IHAuY21kLmRvKFwiaW5zZXJ0SFRNTFwiLCBcIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdi5wdXNoKGIpO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gYztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDE3KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgcCA9IHQoMTMwKSwgdiA9IHQoNiksIGIgPSB0KDcpO1xuICAgICAgZnVuY3Rpb24gUyhSKSB7XG4gICAgICAgIHZhciB3LCBBID0gKDAsIGMuZGVmYXVsdCkodyA9IFIucmVwbGFjZSgvPGRpdj4vZ2ltLCBcIjxwPlwiKS5yZXBsYWNlKC88XFwvZGl2Pi9naW0sIFwiPC9wPlwiKSkuY2FsbCh3KSwgRSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHJldHVybiBFLmlubmVySFRNTCA9IEEsIEUuaW5uZXJIVE1MLnJlcGxhY2UoLzxwPjxcXC9wPi9naW0sIFwiXCIpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gRChSKSB7XG4gICAgICAgIHZhciB3ID0gUi5yZXBsYWNlKC88YnI+fDxiclxcLz4vZ20sIGBcbmApLnJlcGxhY2UoLzxbXj5dKz4vZ20sIFwiXCIpO1xuICAgICAgICByZXR1cm4gdztcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFQoUikge1xuICAgICAgICB2YXIgdztcbiAgICAgICAgaWYgKFIgPT09IFwiXCIpXG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB2YXIgQSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHJldHVybiBBLmlubmVySFRNTCA9IFIsICgodyA9IEEuZmlyc3RDaGlsZCkgPT09IG51bGwgfHwgdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogdy5ub2RlTmFtZSkgPT09IFwiUFwiO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbShSKSB7XG4gICAgICAgIGlmICghKFIgIT0gbnVsbCAmJiBSLmxlbmd0aCkpXG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB2YXIgdyA9IFIuZWxlbXNbMF07XG4gICAgICAgIHJldHVybiB3Lm5vZGVOYW1lID09PSBcIlBcIiAmJiB3LmlubmVySFRNTCA9PT0gXCI8YnI+XCI7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB4KFIsIHcpIHtcbiAgICAgICAgZnVuY3Rpb24gQShFKSB7XG4gICAgICAgICAgdmFyIEMgPSBSLmNvbmZpZywgTSA9IEMucGFzdGVGaWx0ZXJTdHlsZSwgeSA9IEMucGFzdGVJZ25vcmVJbWcsIEIgPSBDLnBhc3RlVGV4dEhhbmRsZSwgJCA9IHAuZ2V0UGFzdGVIdG1sKEUsIE0sIHkpLCBGID0gcC5nZXRQYXN0ZVRleHQoRSk7XG4gICAgICAgICAgRiA9IEYucmVwbGFjZSgvXFxuL2dtLCBcIjxicj5cIik7XG4gICAgICAgICAgdmFyIGsgPSBSLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25Db250YWluZXJFbGVtKCk7XG4gICAgICAgICAgaWYgKCEhaykge1xuICAgICAgICAgICAgdmFyIGggPSBrID09IG51bGwgPyB2b2lkIDAgOiBrLmdldE5vZGVOYW1lKCksIE4gPSBrID09IG51bGwgPyB2b2lkIDAgOiBrLmdldE5vZGVUb3AoUiksIFAgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKE4uZWxlbXNbMF0gJiYgKFAgPSBOID09IG51bGwgPyB2b2lkIDAgOiBOLmdldE5vZGVOYW1lKCkpLCBoID09PSBcIkNPREVcIiB8fCBQID09PSBcIlBSRVwiKSB7XG4gICAgICAgICAgICAgIEIgJiYgdi5pc0Z1bmN0aW9uKEIpICYmIChGID0gXCJcIiArIChCKEYpIHx8IFwiXCIpKSwgUi5jbWQuZG8oXCJpbnNlcnRIVE1MXCIsIEQoRikpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYi51cmxSZWdleC50ZXN0KEYpICYmIE0pIHtcbiAgICAgICAgICAgICAgQiAmJiB2LmlzRnVuY3Rpb24oQikgJiYgKEYgPSBcIlwiICsgKEIoRikgfHwgXCJcIikpO1xuICAgICAgICAgICAgICB2YXIgaiA9IGIudXJsUmVnZXguZXhlYyhGKVswXSwgSSA9IEYucmVwbGFjZShiLnVybFJlZ2V4LCBcIlwiKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFIuY21kLmRvKFwiaW5zZXJ0SFRNTFwiLCAnPGEgaHJlZj1cIicgKyBqICsgJ1wiIHRhcmdldD1cIl9ibGFua1wiPicgKyBqICsgXCI8L2E+XCIgKyBJKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghISQpXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgQiAmJiB2LmlzRnVuY3Rpb24oQikgJiYgKCQgPSBcIlwiICsgKEIoJCkgfHwgXCJcIikpO1xuICAgICAgICAgICAgICAgIHZhciBWID0gL1tcXC5cXCNcXEBdP1xcdytbIF0rXFx7W159XSpcXH0vLnRlc3QoJCk7XG4gICAgICAgICAgICAgICAgaWYgKFYgJiYgTSlcbiAgICAgICAgICAgICAgICAgIFIuY21kLmRvKFwiaW5zZXJ0SFRNTFwiLCBcIlwiICsgUyhGKSk7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXIgVyA9IFMoJCk7XG4gICAgICAgICAgICAgICAgICBpZiAoVChXKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgUSA9IFIuJHRleHRFbGVtO1xuICAgICAgICAgICAgICAgICAgICBpZiAoUi5jbWQuZG8oXCJpbnNlcnRIVE1MXCIsIFcpLCBRLmVxdWFsKGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgUi5zZWxlY3Rpb24uY3JlYXRlRW1wdHlSYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtKE4pICYmIE4ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgWCA9IC9ePGltZyBbXj5dKnNyYz1bJ1wiXShbXidcIl0rKVtePl0qPiQvZztcbiAgICAgICAgICAgICAgICAgICAgWC50ZXN0KFcpIHx8IFIuY21kLmRvKFwiaW5zZXJ0SFRNTFwiLCBXKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIEIgJiYgdi5pc0Z1bmN0aW9uKEIpICYmIChGID0gXCJcIiArIChCKEYpIHx8IFwiXCIpKSwgUi5jbWQuZG8oXCJpbnNlcnRIVE1MXCIsIFwiXCIgKyBTKEYpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3LnB1c2goQSk7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSB4O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoMTcpKSwgcCA9IHModCg0KSksIHYgPSBzKHQoNDQpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBiID0gdCgyKSwgUyA9IHQoMjkzKSwgRCA9IGIuX19pbXBvcnREZWZhdWx0KHQoMjk3KSk7XG4gICAgICBmdW5jdGlvbiBUKEEpIHtcbiAgICAgICAgdmFyIEUgPSAvPHNwYW4+Lio/PFxcL3NwYW4+L2dpLCBDID0gLzxzcGFuPiguKj8pPFxcL3NwYW4+LztcbiAgICAgICAgcmV0dXJuIEEucmVwbGFjZShFLCBmdW5jdGlvbihNKSB7XG4gICAgICAgICAgdmFyIHkgPSBNLm1hdGNoKEMpO1xuICAgICAgICAgIHJldHVybiB5ID09IG51bGwgPyBcIlwiIDogeVsxXTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBtKEEsIEUpIHtcbiAgICAgICAgdmFyIEM7XG4gICAgICAgIHJldHVybiBBID0gKDAsIGMuZGVmYXVsdCkoQyA9IEEudG9Mb3dlckNhc2UoKSkuY2FsbChDKSwgISEoUy5JR05PUkVfVEFHUy5oYXMoQSkgfHwgRSAmJiBBID09PSBcImltZ1wiKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHgoQSwgRSkge1xuICAgICAgICB2YXIgQyA9IFwiXCI7XG4gICAgICAgIEMgPSBcIjxcIiArIEE7XG4gICAgICAgIHZhciBNID0gW107XG4gICAgICAgICgwLCBwLmRlZmF1bHQpKEUpLmNhbGwoRSwgZnVuY3Rpb24oQikge1xuICAgICAgICAgIE0ucHVzaChCLm5hbWUgKyAnPVwiJyArIEIudmFsdWUgKyAnXCInKTtcbiAgICAgICAgfSksIE0ubGVuZ3RoID4gMCAmJiAoQyA9IEMgKyBcIiBcIiArIE0uam9pbihcIiBcIikpO1xuICAgICAgICB2YXIgeSA9IFMuRU1QVFlfVEFHUy5oYXMoQSk7XG4gICAgICAgIHJldHVybiBDID0gQyArICh5ID8gXCIvXCIgOiBcIlwiKSArIFwiPlwiLCBDO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gUihBKSB7XG4gICAgICAgIHJldHVybiBcIjwvXCIgKyBBICsgXCI+XCI7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB3KEEsIEUsIEMpIHtcbiAgICAgICAgRSA9PT0gdm9pZCAwICYmIChFID0gITApLCBDID09PSB2b2lkIDAgJiYgKEMgPSAhMSk7XG4gICAgICAgIHZhciBNID0gW10sIHkgPSBcIlwiO1xuICAgICAgICBmdW5jdGlvbiBCKGgpIHtcbiAgICAgICAgICBoID0gKDAsIGMuZGVmYXVsdCkoaCkuY2FsbChoKSwgaCAmJiAoUy5FTVBUWV9UQUdTLmhhcyhoKSB8fCAoeSA9IGgpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiAkKCkge1xuICAgICAgICAgIHkgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBGID0gbmV3IEQuZGVmYXVsdCgpO1xuICAgICAgICBGLnBhcnNlKEEsIHsgc3RhcnRFbGVtZW50OiBmdW5jdGlvbihOLCBQKSB7XG4gICAgICAgICAgaWYgKEIoTiksICFtKE4sIEMpKSB7XG4gICAgICAgICAgICB2YXIgaiA9IFMuTkVDRVNTQVJZX0FUVFJTLmdldChOKSB8fCBbXSwgSSA9IFtdO1xuICAgICAgICAgICAgKDAsIHAuZGVmYXVsdCkoUCkuY2FsbChQLCBmdW5jdGlvbihXKSB7XG4gICAgICAgICAgICAgIHZhciBRID0gVy5uYW1lO1xuICAgICAgICAgICAgICBpZiAoUSA9PT0gXCJzdHlsZVwiKSB7XG4gICAgICAgICAgICAgICAgRSB8fCBJLnB1c2goVyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICgwLCB2LmRlZmF1bHQpKGopLmNhbGwoaiwgUSkgIT09ICExICYmIEkucHVzaChXKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIFYgPSB4KE4sIEkpO1xuICAgICAgICAgICAgTS5wdXNoKFYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgY2hhcmFjdGVyczogZnVuY3Rpb24oTikge1xuICAgICAgICAgICFOIHx8IG0oeSwgQykgfHwgTS5wdXNoKE4pO1xuICAgICAgICB9LCBlbmRFbGVtZW50OiBmdW5jdGlvbihOKSB7XG4gICAgICAgICAgaWYgKCFtKE4sIEMpKSB7XG4gICAgICAgICAgICB2YXIgUCA9IFIoTik7XG4gICAgICAgICAgICBNLnB1c2goUCksICQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGNvbW1lbnQ6IGZ1bmN0aW9uKE4pIHtcbiAgICAgICAgICBCKE4pO1xuICAgICAgICB9IH0pO1xuICAgICAgICB2YXIgayA9IE0uam9pbihcIlwiKTtcbiAgICAgICAgcmV0dXJuIGsgPSBUKGspLCBrO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gdztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDEzMSkpLCBwID0gcyh0KDEyMCkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pLCBpLlRPUF9MRVZFTF9UQUdTID0gaS5FTVBUWV9UQUdTID0gaS5ORUNFU1NBUllfQVRUUlMgPSBpLklHTk9SRV9UQUdTID0gdm9pZCAwLCBpLklHTk9SRV9UQUdTID0gbmV3IGMuZGVmYXVsdChbXCJkb2N0eXBlXCIsIFwiIWRvY3R5cGVcIiwgXCJodG1sXCIsIFwiaGVhZFwiLCBcIm1ldGFcIiwgXCJib2R5XCIsIFwic2NyaXB0XCIsIFwic3R5bGVcIiwgXCJsaW5rXCIsIFwiZnJhbWVcIiwgXCJpZnJhbWVcIiwgXCJ0aXRsZVwiLCBcInN2Z1wiLCBcImNlbnRlclwiLCBcIm86cFwiXSksIGkuTkVDRVNTQVJZX0FUVFJTID0gbmV3IHAuZGVmYXVsdChbW1wiaW1nXCIsIFtcInNyY1wiLCBcImFsdFwiXV0sIFtcImFcIiwgW1wiaHJlZlwiLCBcInRhcmdldFwiXV0sIFtcInRkXCIsIFtcImNvbHNwYW5cIiwgXCJyb3dzcGFuXCJdXSwgW1widGhcIiwgW1wiY29sc3BhblwiLCBcInJvd3NwYW5cIl1dXSksIGkuRU1QVFlfVEFHUyA9IG5ldyBjLmRlZmF1bHQoW1wiYXJlYVwiLCBcImJhc2VcIiwgXCJiYXNlZm9udFwiLCBcImJyXCIsIFwiY29sXCIsIFwiaHJcIiwgXCJpbWdcIiwgXCJpbnB1dFwiLCBcImlzaW5kZXhcIiwgXCJlbWJlZFwiXSksIGkuVE9QX0xFVkVMX1RBR1MgPSBuZXcgYy5kZWZhdWx0KFtcImgxXCIsIFwiaDJcIiwgXCJoM1wiLCBcImg0XCIsIFwiaDVcIiwgXCJwXCIsIFwidWxcIiwgXCJvbFwiLCBcInRhYmxlXCIsIFwiYmxvY2txdW90ZVwiLCBcInByZVwiLCBcImhyXCIsIFwiZm9ybVwiXSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDI5NSk7XG4gICAgICBvLmV4cG9ydHMgPSBzO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHQoMjk2KSwgdCg2MSksIHQoNTApLCB0KDU0KTtcbiAgICAgIHZhciBzID0gdCg5KTtcbiAgICAgIG8uZXhwb3J0cyA9IHMuU2V0O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxMjEpLCBkID0gdCgxMjMpO1xuICAgICAgby5leHBvcnRzID0gcyhcIlNldFwiLCBmdW5jdGlvbihjKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gYyh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdm9pZCAwKTtcbiAgICAgICAgfTtcbiAgICAgIH0sIGQpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgIGZ1bmN0aW9uIHQoKSB7XG4gICAgICB9XG4gICAgICB0LnByb3RvdHlwZSA9IHtcbiAgICAgICAgaGFuZGxlcjogbnVsbCxcbiAgICAgICAgc3RhcnRUYWdSZTogL148KFtePlxcc1xcL10rKSgoXFxzK1tePT5cXHNdKyhcXHMqPVxccyooKFxcXCJbXlwiXSpcXFwiKXwoXFwnW14nXSpcXCcpfFtePlxcc10rKSk/KSopXFxzKlxcLz9cXHMqPi9tLFxuICAgICAgICBlbmRUYWdSZTogL148XFwvKFtePlxcc10rKVtePl0qPi9tLFxuICAgICAgICBhdHRyUmU6IC8oW149XFxzXSspKFxccyo9XFxzKigoXFxcIihbXlwiXSopXFxcIil8KFxcJyhbXiddKilcXCcpfFtePlxcc10rKSk/L2dtLFxuICAgICAgICBwYXJzZTogZnVuY3Rpb24oZCwgYykge1xuICAgICAgICAgIGMgJiYgKHRoaXMuY29udGVudEhhbmRsZXIgPSBjKTtcbiAgICAgICAgICBmb3IgKHZhciBwLCB2LCBiLCBTID0gITEsIEQgPSB0aGlzOyBkLmxlbmd0aCA+IDA7IClcbiAgICAgICAgICAgIGQuc3Vic3RyaW5nKDAsIDQpID09IFwiPCEtLVwiID8gKGIgPSBkLmluZGV4T2YoXCItLT5cIiksIGIgIT0gLTEgPyAodGhpcy5jb250ZW50SGFuZGxlci5jb21tZW50KGQuc3Vic3RyaW5nKDQsIGIpKSwgZCA9IGQuc3Vic3RyaW5nKGIgKyAzKSwgUyA9ICExKSA6IFMgPSAhMCkgOiBkLnN1YnN0cmluZygwLCAyKSA9PSBcIjwvXCIgPyB0aGlzLmVuZFRhZ1JlLnRlc3QoZCkgPyAocCA9IFJlZ0V4cC5sYXN0TWF0Y2gsIHYgPSBSZWdFeHAucmlnaHRDb250ZXh0LCBwLnJlcGxhY2UodGhpcy5lbmRUYWdSZSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiBELnBhcnNlRW5kVGFnLmFwcGx5KEQsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9KSwgZCA9IHYsIFMgPSAhMSkgOiBTID0gITAgOiBkLmNoYXJBdCgwKSA9PSBcIjxcIiAmJiAodGhpcy5zdGFydFRhZ1JlLnRlc3QoZCkgPyAocCA9IFJlZ0V4cC5sYXN0TWF0Y2gsIHYgPSBSZWdFeHAucmlnaHRDb250ZXh0LCBwLnJlcGxhY2UodGhpcy5zdGFydFRhZ1JlLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIEQucGFyc2VTdGFydFRhZy5hcHBseShELCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfSksIGQgPSB2LCBTID0gITEpIDogUyA9ICEwKSwgUyAmJiAoYiA9IGQuaW5kZXhPZihcIjxcIiksIGIgPT0gLTEgPyAodGhpcy5jb250ZW50SGFuZGxlci5jaGFyYWN0ZXJzKGQpLCBkID0gXCJcIikgOiAodGhpcy5jb250ZW50SGFuZGxlci5jaGFyYWN0ZXJzKGQuc3Vic3RyaW5nKDAsIGIpKSwgZCA9IGQuc3Vic3RyaW5nKGIpKSksIFMgPSAhMDtcbiAgICAgICAgfSxcbiAgICAgICAgcGFyc2VTdGFydFRhZzogZnVuY3Rpb24oZCwgYywgcCkge1xuICAgICAgICAgIHZhciB2ID0gdGhpcy5wYXJzZUF0dHJpYnV0ZXMoYywgcCk7XG4gICAgICAgICAgdGhpcy5jb250ZW50SGFuZGxlci5zdGFydEVsZW1lbnQoYywgdik7XG4gICAgICAgIH0sXG4gICAgICAgIHBhcnNlRW5kVGFnOiBmdW5jdGlvbihkLCBjKSB7XG4gICAgICAgICAgdGhpcy5jb250ZW50SGFuZGxlci5lbmRFbGVtZW50KGMpO1xuICAgICAgICB9LFxuICAgICAgICBwYXJzZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uKGQsIGMpIHtcbiAgICAgICAgICB2YXIgcCA9IHRoaXMsIHYgPSBbXTtcbiAgICAgICAgICByZXR1cm4gYy5yZXBsYWNlKHRoaXMuYXR0clJlLCBmdW5jdGlvbihiLCBTLCBELCBULCBtLCB4LCBSLCB3KSB7XG4gICAgICAgICAgICB2LnB1c2gocC5wYXJzZUF0dHJpYnV0ZShkLCBiLCBTLCBELCBULCBtLCB4LCBSLCB3KSk7XG4gICAgICAgICAgfSksIHY7XG4gICAgICAgIH0sXG4gICAgICAgIHBhcnNlQXR0cmlidXRlOiBmdW5jdGlvbihkLCBjLCBwKSB7XG4gICAgICAgICAgdmFyIHYgPSBcIlwiO1xuICAgICAgICAgIGFyZ3VtZW50c1s3XSA/IHYgPSBhcmd1bWVudHNbOF0gOiBhcmd1bWVudHNbNV0gPyB2ID0gYXJndW1lbnRzWzZdIDogYXJndW1lbnRzWzNdICYmICh2ID0gYXJndW1lbnRzWzRdKTtcbiAgICAgICAgICB2YXIgYiA9ICF2ICYmICFhcmd1bWVudHNbM107XG4gICAgICAgICAgcmV0dXJuIHsgbmFtZTogcCwgdmFsdWU6IGIgPyBudWxsIDogdiB9O1xuICAgICAgICB9XG4gICAgICB9LCBvLmV4cG9ydHMgPSB0O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICBmdW5jdGlvbiBjKHAsIHYpIHtcbiAgICAgICAgZnVuY3Rpb24gYihTKSB7XG4gICAgICAgICAgcC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2VCeUVsZW0oUyksIHAuc2VsZWN0aW9uLnJlc3RvcmVTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB2LnB1c2goYik7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSBjO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoNCkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIHAgPSB0KDIpLCB2ID0gdCg2KSwgYiA9IHAuX19pbXBvcnREZWZhdWx0KHQoMykpO1xuICAgICAgZnVuY3Rpb24gUyhEKSB7XG4gICAgICAgIHZhciBUID0gW10sIG0gPSBELmNoaWxkTm9kZXMoKSB8fCBbXTtcbiAgICAgICAgcmV0dXJuICgwLCBjLmRlZmF1bHQpKG0pLmNhbGwobSwgZnVuY3Rpb24oeCkge1xuICAgICAgICAgIHZhciBSLCB3ID0geC5ub2RlVHlwZTtcbiAgICAgICAgICBpZiAodyA9PT0gMyAmJiAoUiA9IHgudGV4dENvbnRlbnQgfHwgXCJcIiwgUiA9IHYucmVwbGFjZUh0bWxTeW1ib2woUikpLCB3ID09PSAxKSB7XG4gICAgICAgICAgICBSID0ge30sIFIgPSBSLCBSLnRhZyA9IHgubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGZvciAodmFyIEEgPSBbXSwgRSA9IHguYXR0cmlidXRlcywgQyA9IEUubGVuZ3RoIHx8IDAsIE0gPSAwOyBNIDwgQzsgTSsrKSB7XG4gICAgICAgICAgICAgIHZhciB5ID0gRVtNXTtcbiAgICAgICAgICAgICAgQS5wdXNoKHsgbmFtZTogeS5uYW1lLCB2YWx1ZTogeS52YWx1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFIuYXR0cnMgPSBBLCBSLmNoaWxkcmVuID0gUyhiLmRlZmF1bHQoeCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBSICYmIFQucHVzaChSKTtcbiAgICAgICAgfSksIFQ7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSBTO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCg5MikpLCBjID0gcyh0KDEpKSwgcCA9IHModCg0KSk7XG4gICAgICAoMCwgYy5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgdiA9IHQoMiksIGIgPSB2Ll9faW1wb3J0RGVmYXVsdCh0KDMpKTtcbiAgICAgIGZ1bmN0aW9uIFMoRCwgVCkge1xuICAgICAgICBUID09PSB2b2lkIDAgJiYgKFQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcbiAgICAgICAgdmFyIG0gPSBUO1xuICAgICAgICByZXR1cm4gKDAsIHAuZGVmYXVsdCkoRCkuY2FsbChELCBmdW5jdGlvbih4KSB7XG4gICAgICAgICAgdmFyIFI7XG4gICAgICAgICAgaWYgKHR5cGVvZiB4ID09IFwic3RyaW5nXCIgJiYgKFIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh4KSksICgwLCBkLmRlZmF1bHQpKHgpID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICB2YXIgdztcbiAgICAgICAgICAgIFIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHgudGFnKSwgKDAsIHAuZGVmYXVsdCkodyA9IHguYXR0cnMpLmNhbGwodywgZnVuY3Rpb24oQSkge1xuICAgICAgICAgICAgICBiLmRlZmF1bHQoUikuYXR0cihBLm5hbWUsIEEudmFsdWUpO1xuICAgICAgICAgICAgfSksIHguY2hpbGRyZW4gJiYgeC5jaGlsZHJlbi5sZW5ndGggPiAwICYmIFMoeC5jaGlsZHJlbiwgUi5nZXRSb290Tm9kZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgUiAmJiBtLmFwcGVuZENoaWxkKFIpO1xuICAgICAgICB9KSwgYi5kZWZhdWx0KG0pO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gUztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDg5KSksIHAgPSBzKHQoNzApKSwgdiA9IHModCg0NCkpLCBiID0gcyh0KDMwMikpLCBTID0gcyh0KDQpKSwgRCA9IHModCg5NCkpLCBUID0gcyh0KDEzMikpLCBtID0gcyh0KDQ2KSksIHggPSBzKHQoNTcpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBSID0gdCgyKSwgdyA9IFIuX19pbXBvcnREZWZhdWx0KHQoODcpKSwgQSA9IFIuX19pbXBvcnREZWZhdWx0KHQoMzE0KSksIEUgPSBSLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgQyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmdW5jdGlvbiBNKHkpIHtcbiAgICAgICAgICB0aGlzLmVkaXRvciA9IHksIHRoaXMubWVudUxpc3QgPSBbXSwgdGhpcy5jb25zdHJ1Y3Rvckxpc3QgPSBBLmRlZmF1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE0ucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uKHksIEIpIHtcbiAgICAgICAgICAhQiB8fCB0eXBlb2YgQiAhPSBcImZ1bmN0aW9uXCIgfHwgKHRoaXMuY29uc3RydWN0b3JMaXN0W3ldID0gQik7XG4gICAgICAgIH0sIE0ucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgeSwgQiwgJCA9IHRoaXMsIEYgPSB0aGlzLmVkaXRvci5jb25maWcsIGsgPSBGLmV4Y2x1ZGVNZW51cztcbiAgICAgICAgICAoMCwgYy5kZWZhdWx0KShrKSA9PT0gITEgJiYgKGsgPSBbXSksIEYubWVudXMgPSAoMCwgcC5kZWZhdWx0KSh5ID0gRi5tZW51cykuY2FsbCh5LCBmdW5jdGlvbihRKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIHYuZGVmYXVsdCkoaykuY2FsbChrLCBRKSA9PT0gITE7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIGggPSAoMCwgYi5kZWZhdWx0KSh3LmRlZmF1bHQuZ2xvYmFsQ3VzdG9tTWVudUNvbnN0cnVjdG9yTGlzdCk7XG4gICAgICAgICAgaCA9ICgwLCBwLmRlZmF1bHQpKGgpLmNhbGwoaCwgZnVuY3Rpb24oUSkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCB2LmRlZmF1bHQpKGspLmNhbGwoaywgUSk7XG4gICAgICAgICAgfSksICgwLCBTLmRlZmF1bHQpKGgpLmNhbGwoaCwgZnVuY3Rpb24oUSkge1xuICAgICAgICAgICAgZGVsZXRlIHcuZGVmYXVsdC5nbG9iYWxDdXN0b21NZW51Q29uc3RydWN0b3JMaXN0W1FdO1xuICAgICAgICAgIH0pLCAoMCwgUy5kZWZhdWx0KShCID0gRi5tZW51cykuY2FsbChCLCBmdW5jdGlvbihRKSB7XG4gICAgICAgICAgICB2YXIgWCA9ICQuY29uc3RydWN0b3JMaXN0W1FdO1xuICAgICAgICAgICAgJC5faW5pdE1lbnVMaXN0KFEsIFgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZvciAodmFyIE4gPSAwLCBQID0gKDAsIEQuZGVmYXVsdCkody5kZWZhdWx0Lmdsb2JhbEN1c3RvbU1lbnVDb25zdHJ1Y3Rvckxpc3QpOyBOIDwgUC5sZW5ndGg7IE4rKykge1xuICAgICAgICAgICAgdmFyIGogPSBQW05dLCBJID0galswXSwgViA9IGpbMV0sIFcgPSBWO1xuICAgICAgICAgICAgdGhpcy5faW5pdE1lbnVMaXN0KEksIFcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9hZGRUb1Rvb2xiYXIoKSwgRi5zaG93TWVudVRvb2x0aXBzICYmIHRoaXMuX2JpbmRNZW51VG9vbHRpcHMoKTtcbiAgICAgICAgfSwgTS5wcm90b3R5cGUuX2luaXRNZW51TGlzdCA9IGZ1bmN0aW9uKHksIEIpIHtcbiAgICAgICAgICB2YXIgJDtcbiAgICAgICAgICBpZiAoIShCID09IG51bGwgfHwgdHlwZW9mIEIgIT0gXCJmdW5jdGlvblwiKSlcbiAgICAgICAgICAgIGlmICgoMCwgVC5kZWZhdWx0KSgkID0gdGhpcy5tZW51TGlzdCkuY2FsbCgkLCBmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICAgIHJldHVybiBrLmtleSA9PT0geTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJcXHU4M0RDXFx1NTM1NVxcdTU0MERcXHU3OUYwXFx1OTFDRFxcdTU5MEQ6XCIgKyB5KTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgRiA9IG5ldyBCKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgRi5rZXkgPSB5LCB0aGlzLm1lbnVMaXN0LnB1c2goRik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIE0ucHJvdG90eXBlLl9iaW5kTWVudVRvb2x0aXBzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHkgPSB0aGlzLmVkaXRvciwgQiA9IHkuJHRvb2xiYXJFbGVtLCAkID0geS5jb25maWcsIEYgPSAkLm1lbnVUb29sdGlwUG9zaXRpb24sIGsgPSBFLmRlZmF1bHQoJzxkaXYgY2xhc3M9XCJ3LWUtbWVudS10b29sdGlwIHctZS1tZW51LXRvb2x0aXAtJyArIEYgKyBgXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1lLW1lbnUtdG9vbHRpcC1pdGVtLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPGRpdj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICAgIGsuY3NzKFwidmlzaWJpbGl0eVwiLCBcImhpZGRlblwiKSwgQi5hcHBlbmQoayksIGsuY3NzKFwiei1pbmRleFwiLCB5LnpJbmRleC5nZXQoXCJ0b29sdGlwXCIpKTtcbiAgICAgICAgICB2YXIgaCA9IDA7XG4gICAgICAgICAgZnVuY3Rpb24gTigpIHtcbiAgICAgICAgICAgIGggJiYgY2xlYXJUaW1lb3V0KGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBQKCkge1xuICAgICAgICAgICAgTigpLCBrLmNzcyhcInZpc2liaWxpdHlcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIEIub24oXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24oaikge1xuICAgICAgICAgICAgdmFyIEkgPSBqLnRhcmdldCwgViA9IEUuZGVmYXVsdChJKSwgVywgUTtcbiAgICAgICAgICAgIGlmIChWLmlzQ29udGFpbihCKSkge1xuICAgICAgICAgICAgICBQKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChWLnBhcmVudFVudGlsKFwiLnctZS1kcm9wbGlzdFwiKSAhPSBudWxsKVxuICAgICAgICAgICAgICBQKCk7XG4gICAgICAgICAgICBlbHNlIGlmIChWLmF0dHIoXCJkYXRhLXRpdGxlXCIpKVxuICAgICAgICAgICAgICBXID0gVi5hdHRyKFwiZGF0YS10aXRsZVwiKSwgUSA9IFY7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIFggPSBWLnBhcmVudFVudGlsKFwiLnctZS1tZW51XCIpO1xuICAgICAgICAgICAgICBYICE9IG51bGwgJiYgKFcgPSBYLmF0dHIoXCJkYXRhLXRpdGxlXCIpLCBRID0gWCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoVyAmJiBRKSB7XG4gICAgICAgICAgICAgIE4oKTtcbiAgICAgICAgICAgICAgdmFyIEogPSBRLmdldE9mZnNldERhdGEoKTtcbiAgICAgICAgICAgICAgay50ZXh0KHkuaTE4bmV4dC50KFwibWVudXMudGl0bGUuXCIgKyBXKSk7XG4gICAgICAgICAgICAgIHZhciBaID0gay5nZXRPZmZzZXREYXRhKCksIGRlID0gSi5sZWZ0ICsgSi53aWR0aCAvIDIgLSBaLndpZHRoIC8gMjtcbiAgICAgICAgICAgICAgay5jc3MoXCJsZWZ0XCIsIGRlICsgXCJweFwiKSwgRiA9PT0gXCJ1cFwiID8gay5jc3MoXCJ0b3BcIiwgSi50b3AgLSBaLmhlaWdodCAtIDggKyBcInB4XCIpIDogRiA9PT0gXCJkb3duXCIgJiYgay5jc3MoXCJ0b3BcIiwgSi50b3AgKyBKLmhlaWdodCArIDggKyBcInB4XCIpLCBoID0gKDAsIG0uZGVmYXVsdCkoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgay5jc3MoXCJ2aXNpYmlsaXR5XCIsIFwidmlzaWJsZVwiKTtcbiAgICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICBQKCk7XG4gICAgICAgICAgfSkub24oXCJtb3VzZWxlYXZlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgUCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBNLnByb3RvdHlwZS5fYWRkVG9Ub29sYmFyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHksIEIgPSB0aGlzLmVkaXRvciwgJCA9IEIuJHRvb2xiYXJFbGVtO1xuICAgICAgICAgICgwLCBTLmRlZmF1bHQpKHkgPSB0aGlzLm1lbnVMaXN0KS5jYWxsKHksIGZ1bmN0aW9uKEYpIHtcbiAgICAgICAgICAgIHZhciBrID0gRi4kZWxlbTtcbiAgICAgICAgICAgIGsgJiYgJC5hcHBlbmQoayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIE0ucHJvdG90eXBlLm1lbnVGaW5kID0gZnVuY3Rpb24oeSkge1xuICAgICAgICAgIGZvciAodmFyIEIgPSB0aGlzLm1lbnVMaXN0LCAkID0gMCwgRiA9IEIubGVuZ3RoOyAkIDwgRjsgJCsrKVxuICAgICAgICAgICAgaWYgKEJbJF0ua2V5ID09PSB5KVxuICAgICAgICAgICAgICByZXR1cm4gQlskXTtcbiAgICAgICAgICByZXR1cm4gQlswXTtcbiAgICAgICAgfSwgTS5wcm90b3R5cGUuY2hhbmdlQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHk7XG4gICAgICAgICAgKDAsIFMuZGVmYXVsdCkoeSA9IHRoaXMubWVudUxpc3QpLmNhbGwoeSwgZnVuY3Rpb24oQikge1xuICAgICAgICAgICAgdmFyICQ7XG4gICAgICAgICAgICAoMCwgbS5kZWZhdWx0KSgoMCwgeC5kZWZhdWx0KSgkID0gQi50cnlDaGFuZ2VBY3RpdmUpLmNhbGwoJCwgQiksIDEwMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIE07XG4gICAgICB9KCk7XG4gICAgICBpLmRlZmF1bHQgPSBDO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIG8uZXhwb3J0cyA9IHQoMzAzKTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMzA0KTtcbiAgICAgIG8uZXhwb3J0cyA9IHM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdCgzMDUpO1xuICAgICAgdmFyIHMgPSB0KDkpO1xuICAgICAgby5leHBvcnRzID0gcy5PYmplY3Qua2V5cztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNSksIGQgPSB0KDI5KSwgYyA9IHQoNTIpLCBwID0gdCgxMSksIHYgPSBwKGZ1bmN0aW9uKCkge1xuICAgICAgICBjKDEpO1xuICAgICAgfSk7XG4gICAgICBzKHsgdGFyZ2V0OiBcIk9iamVjdFwiLCBzdGF0OiAhMCwgZm9yY2VkOiB2IH0sIHsga2V5czogZnVuY3Rpb24oUykge1xuICAgICAgICByZXR1cm4gYyhkKFMpKTtcbiAgICAgIH0gfSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDMwNyk7XG4gICAgICBvLmV4cG9ydHMgPSBzO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHQoMzA4KTtcbiAgICAgIHZhciBzID0gdCg5KTtcbiAgICAgIG8uZXhwb3J0cyA9IHMuT2JqZWN0LmVudHJpZXM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDUpLCBkID0gdCgzMDkpLmVudHJpZXM7XG4gICAgICBzKHsgdGFyZ2V0OiBcIk9iamVjdFwiLCBzdGF0OiAhMCB9LCB7IGVudHJpZXM6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgcmV0dXJuIGQocCk7XG4gICAgICB9IH0pO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgxNCksIGQgPSB0KDUyKSwgYyA9IHQoMjgpLCBwID0gdCg1OSkuZiwgdiA9IGZ1bmN0aW9uKFMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKEQpIHtcbiAgICAgICAgICBmb3IgKHZhciBUID0gYyhEKSwgbSA9IGQoVCksIHggPSBtLmxlbmd0aCwgUiA9IDAsIHcgPSBbXSwgQTsgeCA+IFI7IClcbiAgICAgICAgICAgIEEgPSBtW1IrK10sICghcyB8fCBwLmNhbGwoVCwgQSkpICYmIHcucHVzaChTID8gW0EsIFRbQV1dIDogVFtBXSk7XG4gICAgICAgICAgcmV0dXJuIHc7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgby5leHBvcnRzID0ge1xuICAgICAgICBlbnRyaWVzOiB2KCEwKSxcbiAgICAgICAgdmFsdWVzOiB2KCExKVxuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMzExKTtcbiAgICAgIG8uZXhwb3J0cyA9IHM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDMxMiksIGQgPSBBcnJheS5wcm90b3R5cGU7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihjKSB7XG4gICAgICAgIHZhciBwID0gYy5zb21lO1xuICAgICAgICByZXR1cm4gYyA9PT0gZCB8fCBjIGluc3RhbmNlb2YgQXJyYXkgJiYgcCA9PT0gZC5zb21lID8gcyA6IHA7XG4gICAgICB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHQoMzEzKTtcbiAgICAgIHZhciBzID0gdCgxNSk7XG4gICAgICBvLmV4cG9ydHMgPSBzKFwiQXJyYXlcIikuc29tZTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNSksIGQgPSB0KDMwKS5zb21lLCBjID0gdCg2NyksIHAgPSB0KDIyKSwgdiA9IGMoXCJzb21lXCIpLCBiID0gcChcInNvbWVcIik7XG4gICAgICBzKHsgdGFyZ2V0OiBcIkFycmF5XCIsIHByb3RvOiAhMCwgZm9yY2VkOiAhdiB8fCAhYiB9LCB7IHNvbWU6IGZ1bmN0aW9uKEQpIHtcbiAgICAgICAgcmV0dXJuIGQodGhpcywgRCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB2b2lkIDApO1xuICAgICAgfSB9KTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSB0KDIpLCBwID0gYy5fX2ltcG9ydERlZmF1bHQodCgzMTUpKSwgdiA9IGMuX19pbXBvcnREZWZhdWx0KHQoMzE2KSksIGIgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMyMSkpLCBTID0gYy5fX2ltcG9ydERlZmF1bHQodCgzMjYpKSwgRCA9IGMuX19pbXBvcnREZWZhdWx0KHQoMzI3KSksIFQgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMyOCkpLCBtID0gYy5fX2ltcG9ydERlZmF1bHQodCgzMjkpKSwgeCA9IGMuX19pbXBvcnREZWZhdWx0KHQoMzMxKSksIFIgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMzMykpLCB3ID0gYy5fX2ltcG9ydERlZmF1bHQodCgzMzQpKSwgQSA9IGMuX19pbXBvcnREZWZhdWx0KHQoMzM3KSksIEUgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMzOCkpLCBDID0gYy5fX2ltcG9ydERlZmF1bHQodCgzMzkpKSwgTSA9IGMuX19pbXBvcnREZWZhdWx0KHQoMzUwKSksIHkgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM2NSkpLCBCID0gYy5fX2ltcG9ydERlZmF1bHQodCgzNjkpKSwgJCA9IGMuX19pbXBvcnREZWZhdWx0KHQoMTM3KSksIEYgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM3OCkpLCBrID0gYy5fX2ltcG9ydERlZmF1bHQodCgzODApKSwgaCA9IGMuX19pbXBvcnREZWZhdWx0KHQoMzgxKSksIE4gPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM4MikpLCBQID0gYy5fX2ltcG9ydERlZmF1bHQodCg0MDEpKSwgaiA9IGMuX19pbXBvcnREZWZhdWx0KHQoNDA2KSksIEkgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDQwOSkpO1xuICAgICAgaS5kZWZhdWx0ID0geyBib2xkOiBwLmRlZmF1bHQsIGhlYWQ6IHYuZGVmYXVsdCwgaXRhbGljOiBTLmRlZmF1bHQsIGxpbms6IGIuZGVmYXVsdCwgdW5kZXJsaW5lOiBELmRlZmF1bHQsIHN0cmlrZVRocm91Z2g6IFQuZGVmYXVsdCwgZm9udE5hbWU6IG0uZGVmYXVsdCwgZm9udFNpemU6IHguZGVmYXVsdCwganVzdGlmeTogUi5kZWZhdWx0LCBxdW90ZTogdy5kZWZhdWx0LCBiYWNrQ29sb3I6IEEuZGVmYXVsdCwgZm9yZUNvbG9yOiBFLmRlZmF1bHQsIHZpZGVvOiBDLmRlZmF1bHQsIGltYWdlOiBNLmRlZmF1bHQsIGluZGVudDogeS5kZWZhdWx0LCBlbW90aWNvbjogQi5kZWZhdWx0LCBsaXN0OiAkLmRlZmF1bHQsIGxpbmVIZWlnaHQ6IEYuZGVmYXVsdCwgdW5kbzogay5kZWZhdWx0LCByZWRvOiBoLmRlZmF1bHQsIHRhYmxlOiBOLmRlZmF1bHQsIGNvZGU6IFAuZGVmYXVsdCwgc3BsaXRMaW5lOiBqLmRlZmF1bHQsIHRvZG86IEkuZGVmYXVsdCB9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDIzKSksIHYgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgYiA9IGZ1bmN0aW9uKFMpIHtcbiAgICAgICAgYy5fX2V4dGVuZHMoRCwgUyk7XG4gICAgICAgIGZ1bmN0aW9uIEQoVCkge1xuICAgICAgICAgIHZhciBtID0gdGhpcywgeCA9IHYuZGVmYXVsdChgPGRpdiBjbGFzcz1cInctZS1tZW51XCIgZGF0YS10aXRsZT1cIlxcdTUyQTBcXHU3Qzk3XCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ3LWUtaWNvbi1ib2xkXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgICAgICAgcmV0dXJuIG0gPSBTLmNhbGwodGhpcywgeCwgVCkgfHwgdGhpcywgbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRC5wcm90b3R5cGUuY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIFQgPSB0aGlzLmVkaXRvciwgbSA9IFQuc2VsZWN0aW9uLmlzU2VsZWN0aW9uRW1wdHkoKTtcbiAgICAgICAgICBtICYmIFQuc2VsZWN0aW9uLmNyZWF0ZUVtcHR5UmFuZ2UoKSwgVC5jbWQuZG8oXCJib2xkXCIpLCBtICYmIChULnNlbGVjdGlvbi5jb2xsYXBzZVJhbmdlKCksIFQuc2VsZWN0aW9uLnJlc3RvcmVTZWxlY3Rpb24oKSk7XG4gICAgICAgIH0sIEQucHJvdG90eXBlLnRyeUNoYW5nZUFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBUID0gdGhpcy5lZGl0b3I7XG4gICAgICAgICAgVC5jbWQucXVlcnlDb21tYW5kU3RhdGUoXCJib2xkXCIpID8gdGhpcy5hY3RpdmUoKSA6IHRoaXMudW5BY3RpdmUoKTtcbiAgICAgICAgfSwgRDtcbiAgICAgIH0ocC5kZWZhdWx0KTtcbiAgICAgIGkuZGVmYXVsdCA9IGI7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCgyNykpLCBwID0gcyh0KDMxKSksIHYgPSBzKHQoNCkpLCBiID0gcyh0KDMxNykpLCBTID0gcyh0KDQ0KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgRCA9IHQoMiksIFQgPSBELl9faW1wb3J0RGVmYXVsdCh0KDI0KSksIG0gPSBELl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgeCA9IHQoNiksIFIgPSB0KDcpLCB3ID0gZnVuY3Rpb24oQSkge1xuICAgICAgICBELl9fZXh0ZW5kcyhFLCBBKTtcbiAgICAgICAgZnVuY3Rpb24gRShDKSB7XG4gICAgICAgICAgdmFyIE0gPSB0aGlzLCB5ID0gbS5kZWZhdWx0KCc8ZGl2IGNsYXNzPVwidy1lLW1lbnVcIiBkYXRhLXRpdGxlPVwiXFx1NjgwN1xcdTk4OThcIj48aSBjbGFzcz1cInctZS1pY29uLWhlYWRlclwiPjwvaT48L2Rpdj4nKSwgQiA9IHsgd2lkdGg6IDEwMCwgdGl0bGU6IFwiXFx1OEJCRVxcdTdGNkVcXHU2ODA3XFx1OTg5OFwiLCB0eXBlOiBcImxpc3RcIiwgbGlzdDogW3sgJGVsZW06IG0uZGVmYXVsdChcIjxoMT5IMTwvaDE+XCIpLCB2YWx1ZTogXCI8aDE+XCIgfSwgeyAkZWxlbTogbS5kZWZhdWx0KFwiPGgyPkgyPC9oMj5cIiksIHZhbHVlOiBcIjxoMj5cIiB9LCB7ICRlbGVtOiBtLmRlZmF1bHQoXCI8aDM+SDM8L2gzPlwiKSwgdmFsdWU6IFwiPGgzPlwiIH0sIHsgJGVsZW06IG0uZGVmYXVsdChcIjxoND5INDwvaDQ+XCIpLCB2YWx1ZTogXCI8aDQ+XCIgfSwgeyAkZWxlbTogbS5kZWZhdWx0KFwiPGg1Pkg1PC9oNT5cIiksIHZhbHVlOiBcIjxoNT5cIiB9LCB7ICRlbGVtOiBtLmRlZmF1bHQoXCI8cD5cIiArIEMuaTE4bmV4dC50KFwibWVudXMuZHJvcExpc3RNZW51LmhlYWQuXFx1NkI2M1xcdTY1ODdcIikgKyBcIjwvcD5cIiksIHZhbHVlOiBcIjxwPlwiIH1dLCBjbGlja0hhbmRsZXI6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIE0uY29tbWFuZChrKTtcbiAgICAgICAgICB9IH07XG4gICAgICAgICAgTSA9IEEuY2FsbCh0aGlzLCB5LCBDLCBCKSB8fCB0aGlzO1xuICAgICAgICAgIHZhciAkID0gQy5jb25maWcub25DYXRhbG9nQ2hhbmdlO1xuICAgICAgICAgIHJldHVybiAkICYmIChNLm9sZENhdGFsb2dzID0gW10sIE0uYWRkTGlzdGVuZXJDYXRhbG9nKCksIE0uZ2V0Q2F0YWxvZ3MoKSksIE07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEUucHJvdG90eXBlLmNvbW1hbmQgPSBmdW5jdGlvbihDKSB7XG4gICAgICAgICAgdmFyIE0gPSB0aGlzLmVkaXRvciwgeSA9IE0uc2VsZWN0aW9uLmdldFNlbGVjdGlvbkNvbnRhaW5lckVsZW0oKTtcbiAgICAgICAgICBpZiAoeSAmJiBNLiR0ZXh0RWxlbS5lcXVhbCh5KSlcbiAgICAgICAgICAgIHRoaXMuc2V0TXVsdGlsaW5lSGVhZChDKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBCO1xuICAgICAgICAgICAgaWYgKCgwLCBjLmRlZmF1bHQpKEIgPSBbXCJPTFwiLCBcIlVMXCIsIFwiTElcIiwgXCJUQUJMRVwiLCBcIlRIXCIsIFwiVFJcIiwgXCJDT0RFXCIsIFwiSFJcIl0pLmNhbGwoQiwgbS5kZWZhdWx0KHkpLmdldE5vZGVOYW1lKCkpID4gLTEpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIE0uY21kLmRvKFwiZm9ybWF0QmxvY2tcIiwgQyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIEMgIT09IFwiPHA+XCIgJiYgdGhpcy5hZGRVaWRGb3JTZWxlY3Rpb25FbGVtKCk7XG4gICAgICAgIH0sIEUucHJvdG90eXBlLmFkZFVpZEZvclNlbGVjdGlvbkVsZW0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgQyA9IHRoaXMuZWRpdG9yLCBNID0gQy5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uQ29udGFpbmVyRWxlbSgpLCB5ID0geC5nZXRSYW5kb21Db2RlKCk7XG4gICAgICAgICAgbS5kZWZhdWx0KE0pLmF0dHIoXCJpZFwiLCB5KTtcbiAgICAgICAgfSwgRS5wcm90b3R5cGUuYWRkTGlzdGVuZXJDYXRhbG9nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIEMgPSB0aGlzLCBNID0gdGhpcy5lZGl0b3I7XG4gICAgICAgICAgTS50eHQuZXZlbnRIb29rcy5jaGFuZ2VFdmVudHMucHVzaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIEMuZ2V0Q2F0YWxvZ3MoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgRS5wcm90b3R5cGUuZ2V0Q2F0YWxvZ3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgQyA9IHRoaXMuZWRpdG9yLCBNID0gdGhpcy5lZGl0b3IuJHRleHRFbGVtLCB5ID0gQy5jb25maWcub25DYXRhbG9nQ2hhbmdlLCBCID0gKDAsIHAuZGVmYXVsdCkoTSkuY2FsbChNLCBcImgxLGgyLGgzLGg0LGg1XCIpLCAkID0gW107XG4gICAgICAgICAgKDAsIHYuZGVmYXVsdCkoQikuY2FsbChCLCBmdW5jdGlvbihGLCBrKSB7XG4gICAgICAgICAgICB2YXIgaCA9IG0uZGVmYXVsdChGKSwgTiA9IGguYXR0cihcImlkXCIpLCBQID0gaC5nZXROb2RlTmFtZSgpLCBqID0gaC50ZXh0KCk7XG4gICAgICAgICAgICBOIHx8IChOID0geC5nZXRSYW5kb21Db2RlKCksIGguYXR0cihcImlkXCIsIE4pKSwgaiAmJiAkLnB1c2goeyB0YWc6IFAsIGlkOiBOLCB0ZXh0OiBqIH0pO1xuICAgICAgICAgIH0pLCAoMCwgYi5kZWZhdWx0KSh0aGlzLm9sZENhdGFsb2dzKSAhPT0gKDAsIGIuZGVmYXVsdCkoJCkgJiYgKHRoaXMub2xkQ2F0YWxvZ3MgPSAkLCB5ICYmIHkoJCkpO1xuICAgICAgICB9LCBFLnByb3RvdHlwZS5zZXRNdWx0aWxpbmVIZWFkID0gZnVuY3Rpb24oQykge1xuICAgICAgICAgIHZhciBNID0gdGhpcywgeSwgQiwgJCA9IHRoaXMuZWRpdG9yLCBGID0gJC5zZWxlY3Rpb24sIGsgPSAoeSA9IEYuZ2V0U2VsZWN0aW9uQ29udGFpbmVyRWxlbSgpKSA9PT0gbnVsbCB8fCB5ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB5LmVsZW1zWzBdLCBoID0gW1wiSU1HXCIsIFwiVklERU9cIiwgXCJUQUJMRVwiLCBcIlRIXCIsIFwiVFJcIiwgXCJVTFwiLCBcIk9MXCIsIFwiUFJFXCIsIFwiSFJcIiwgXCJCTE9DS1FVT1RFXCJdLCBOID0gbS5kZWZhdWx0KEYuZ2V0U2VsZWN0aW9uU3RhcnRFbGVtKCkpLCBQID0gbS5kZWZhdWx0KEYuZ2V0U2VsZWN0aW9uRW5kRWxlbSgpKTtcbiAgICAgICAgICBQLmVsZW1zWzBdLm91dGVySFRNTCA9PT0gbS5kZWZhdWx0KFIuRU1QVFlfUCkuZWxlbXNbMF0ub3V0ZXJIVE1MICYmICFQLmVsZW1zWzBdLm5leHRTaWJsaW5nICYmIChQID0gUC5wcmV2KCkpO1xuICAgICAgICAgIHZhciBqID0gW107XG4gICAgICAgICAgai5wdXNoKE4uZ2V0Tm9kZVRvcCgkKSk7XG4gICAgICAgICAgdmFyIEkgPSBbXSwgViA9IChCID0gRi5nZXRSYW5nZSgpKSA9PT0gbnVsbCB8fCBCID09PSB2b2lkIDAgPyB2b2lkIDAgOiBCLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLmNoaWxkTm9kZXM7XG4gICAgICAgICAgViA9PSBudWxsIHx8ICgwLCB2LmRlZmF1bHQpKFYpLmNhbGwoViwgZnVuY3Rpb24oWCwgSikge1xuICAgICAgICAgICAgWCA9PT0galswXS5nZXROb2RlKCkgJiYgSS5wdXNoKEopLCBYID09PSBQLmdldE5vZGVUb3AoJCkuZ2V0Tm9kZSgpICYmIEkucHVzaChKKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBmb3IgKHZhciBXID0gMDsgaltXXS5nZXROb2RlKCkgIT09IFAuZ2V0Tm9kZVRvcCgkKS5nZXROb2RlKCk7ICkge1xuICAgICAgICAgICAgaWYgKCFqW1ddLmVsZW1zWzBdKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgUSA9IG0uZGVmYXVsdChqW1ddLm5leHQoKS5nZXROb2RlKCkpO1xuICAgICAgICAgICAgai5wdXNoKFEpLCBXKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGogPT0gbnVsbCB8fCAoMCwgdi5kZWZhdWx0KShqKS5jYWxsKGosIGZ1bmN0aW9uKFgsIEopIHtcbiAgICAgICAgICAgIGlmICghTS5oYXNUYWcoWCwgaCkpIHtcbiAgICAgICAgICAgICAgdmFyIFogPSBtLmRlZmF1bHQoQyksIGRlID0gWC5wYXJlbnQoKS5nZXROb2RlKCk7XG4gICAgICAgICAgICAgIFouaHRtbChcIlwiICsgWC5odG1sKCkpLCBkZS5pbnNlcnRCZWZvcmUoWi5nZXROb2RlKCksIFguZ2V0Tm9kZSgpKSwgWC5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSwgRi5jcmVhdGVSYW5nZUJ5RWxlbXMoay5jaGlsZHJlbltJWzBdXSwgay5jaGlsZHJlbltJWzFdXSk7XG4gICAgICAgIH0sIEUucHJvdG90eXBlLmhhc1RhZyA9IGZ1bmN0aW9uKEMsIE0pIHtcbiAgICAgICAgICB2YXIgeSA9IHRoaXMsIEI7XG4gICAgICAgICAgaWYgKCFDKVxuICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgIGlmICgoMCwgUy5kZWZhdWx0KShNKS5jYWxsKE0sIEMgPT0gbnVsbCA/IHZvaWQgMCA6IEMuZ2V0Tm9kZU5hbWUoKSkpXG4gICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgdmFyICQgPSAhMTtcbiAgICAgICAgICByZXR1cm4gKEIgPSBDLmNoaWxkcmVuKCkpID09PSBudWxsIHx8IEIgPT09IHZvaWQgMCB8fCAoMCwgdi5kZWZhdWx0KShCKS5jYWxsKEIsIGZ1bmN0aW9uKEYpIHtcbiAgICAgICAgICAgICQgPSB5Lmhhc1RhZyhtLmRlZmF1bHQoRiksIE0pO1xuICAgICAgICAgIH0pLCAkO1xuICAgICAgICB9LCBFLnByb3RvdHlwZS50cnlDaGFuZ2VBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgQyA9IHRoaXMuZWRpdG9yLCBNID0gL15oL2ksIHkgPSBDLmNtZC5xdWVyeUNvbW1hbmRWYWx1ZShcImZvcm1hdEJsb2NrXCIpO1xuICAgICAgICAgIE0udGVzdCh5KSA/IHRoaXMuYWN0aXZlKCkgOiB0aGlzLnVuQWN0aXZlKCk7XG4gICAgICAgIH0sIEU7XG4gICAgICB9KFQuZGVmYXVsdCk7XG4gICAgICBpLmRlZmF1bHQgPSB3O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIG8uZXhwb3J0cyA9IHQoMzE4KTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMzE5KTtcbiAgICAgIG8uZXhwb3J0cyA9IHM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdCgzMjApO1xuICAgICAgdmFyIHMgPSB0KDkpO1xuICAgICAgcy5KU09OIHx8IChzLkpTT04gPSB7IHN0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnkgfSksIG8uZXhwb3J0cyA9IGZ1bmN0aW9uKGMsIHAsIHYpIHtcbiAgICAgICAgcmV0dXJuIHMuSlNPTi5zdHJpbmdpZnkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDUpLCBkID0gdCgzNSksIGMgPSB0KDExKSwgcCA9IGQoXCJKU09OXCIsIFwic3RyaW5naWZ5XCIpLCB2ID0gL1tcXHVEODAwLVxcdURGRkZdL2csIGIgPSAvXltcXHVEODAwLVxcdURCRkZdJC8sIFMgPSAvXltcXHVEQzAwLVxcdURGRkZdJC8sIEQgPSBmdW5jdGlvbih4LCBSLCB3KSB7XG4gICAgICAgIHZhciBBID0gdy5jaGFyQXQoUiAtIDEpLCBFID0gdy5jaGFyQXQoUiArIDEpO1xuICAgICAgICByZXR1cm4gYi50ZXN0KHgpICYmICFTLnRlc3QoRSkgfHwgUy50ZXN0KHgpICYmICFiLnRlc3QoQSkgPyBcIlxcXFx1XCIgKyB4LmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpIDogeDtcbiAgICAgIH0sIFQgPSBjKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcChcIlxcdURGMDZcXHVEODM0XCIpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIicgfHwgcChcIlxcdURFQURcIikgIT09ICdcIlxcXFx1ZGVhZFwiJztcbiAgICAgIH0pO1xuICAgICAgcCAmJiBzKHsgdGFyZ2V0OiBcIkpTT05cIiwgc3RhdDogITAsIGZvcmNlZDogVCB9LCB7XG4gICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24oeCwgUiwgdykge1xuICAgICAgICAgIHZhciBBID0gcC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgQSA9PSBcInN0cmluZ1wiID8gQS5yZXBsYWNlKHYsIEQpIDogQTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCgxNykpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIHAgPSB0KDIpLCB2ID0gcC5fX2ltcG9ydERlZmF1bHQodCgzNykpLCBiID0gcC5fX2ltcG9ydERlZmF1bHQodCgzKSksIFMgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMyMikpLCBEID0gcC5fX2ltcG9ydERlZmF1bHQodCgxMzQpKSwgVCA9IHAuX19pbXBvcnREZWZhdWx0KHQoMzIpKSwgbSA9IHAuX19pbXBvcnREZWZhdWx0KHQoMzI0KSksIHggPSB0KDcpLCBSID0gZnVuY3Rpb24odykge1xuICAgICAgICBwLl9fZXh0ZW5kcyhBLCB3KTtcbiAgICAgICAgZnVuY3Rpb24gQShFKSB7XG4gICAgICAgICAgdmFyIEMgPSB0aGlzLCBNID0gYi5kZWZhdWx0KCc8ZGl2IGNsYXNzPVwidy1lLW1lbnVcIiBkYXRhLXRpdGxlPVwiXFx1OTRGRVxcdTYzQTVcIj48aSBjbGFzcz1cInctZS1pY29uLWxpbmtcIj48L2k+PC9kaXY+Jyk7XG4gICAgICAgICAgcmV0dXJuIEMgPSB3LmNhbGwodGhpcywgTSwgRSkgfHwgdGhpcywgbS5kZWZhdWx0KEUpLCBDO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBBLnByb3RvdHlwZS5jbGlja0hhbmRsZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgRSA9IHRoaXMuZWRpdG9yLCBDLCBNID0gRS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uQ29udGFpbmVyRWxlbSgpLCB5ID0gRS4kdGV4dEVsZW0sIEIgPSB5Lmh0bWwoKSwgJCA9ICgwLCBjLmRlZmF1bHQpKEIpLmNhbGwoQik7XG4gICAgICAgICAgaWYgKCQgPT09IHguRU1QVFlfUCkge1xuICAgICAgICAgICAgdmFyIEYgPSB5LmNoaWxkcmVuKCk7XG4gICAgICAgICAgICBFLnNlbGVjdGlvbi5jcmVhdGVSYW5nZUJ5RWxlbShGLCAhMCwgITApLCBNID0gRS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uQ29udGFpbmVyRWxlbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIShNICYmIEUuJHRleHRFbGVtLmVxdWFsKE0pKSlcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgIGlmIChDID0gRS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uQ29udGFpbmVyRWxlbSgpLCAhQylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlUGFuZWwoQy50ZXh0KCksIEMuYXR0cihcImhyZWZcIikpO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIEUuc2VsZWN0aW9uLmlzU2VsZWN0aW9uRW1wdHkoKSA/IHRoaXMuY3JlYXRlUGFuZWwoXCJcIiwgXCJcIikgOiB0aGlzLmNyZWF0ZVBhbmVsKEUuc2VsZWN0aW9uLmdldFNlbGVjdGlvblRleHQoKSwgXCJcIik7XG4gICAgICAgIH0sIEEucHJvdG90eXBlLmNyZWF0ZVBhbmVsID0gZnVuY3Rpb24oRSwgQykge1xuICAgICAgICAgIHZhciBNID0gUy5kZWZhdWx0KHRoaXMuZWRpdG9yLCBFLCBDKSwgeSA9IG5ldyBULmRlZmF1bHQodGhpcywgTSk7XG4gICAgICAgICAgeS5jcmVhdGUoKTtcbiAgICAgICAgfSwgQS5wcm90b3R5cGUudHJ5Q2hhbmdlQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIEUgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgICBELmRlZmF1bHQoRSkgPyB0aGlzLmFjdGl2ZSgpIDogdGhpcy51bkFjdGl2ZSgpO1xuICAgICAgICB9LCBBO1xuICAgICAgfSh2LmRlZmF1bHQpO1xuICAgICAgaS5kZWZhdWx0ID0gUjtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDE3KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgcCA9IHQoMiksIHYgPSB0KDYpLCBiID0gcC5fX2ltcG9ydERlZmF1bHQodCgzKSksIFMgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDEzNCkpLCBEID0gdCgzMjMpO1xuICAgICAgZnVuY3Rpb24gVChtLCB4LCBSKSB7XG4gICAgICAgIHZhciB3ID0gdi5nZXRSYW5kb20oXCJpbnB1dC1saW5rXCIpLCBBID0gdi5nZXRSYW5kb20oXCJpbnB1dC10ZXh0XCIpLCBFID0gdi5nZXRSYW5kb20oXCJidG4tb2tcIiksIEMgPSB2LmdldFJhbmRvbShcImJ0bi1kZWxcIiksIE0gPSBTLmRlZmF1bHQobSkgPyBcImlubGluZS1ibG9ja1wiIDogXCJub25lXCIsIHk7XG4gICAgICAgIGZ1bmN0aW9uIEIoKSB7XG4gICAgICAgICAgaWYgKCEhUy5kZWZhdWx0KG0pKSB7XG4gICAgICAgICAgICB2YXIgTiA9IG0uc2VsZWN0aW9uLmdldFNlbGVjdGlvbkNvbnRhaW5lckVsZW0oKTtcbiAgICAgICAgICAgICFOIHx8IChtLnNlbGVjdGlvbi5jcmVhdGVSYW5nZUJ5RWxlbShOKSwgbS5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpLCB5ID0gTik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uICQoTiwgUCkge1xuICAgICAgICAgIHZhciBqID0gbmV3IFJlZ0V4cCgvKDxcXC8qdWw+KXwoPFxcLypsaT4pfCg8XFwvKm9sPikvZyk7XG4gICAgICAgICAgTiA9IE4ucmVwbGFjZShqLCBcIlwiKSwgUy5kZWZhdWx0KG0pICYmIEIoKSwgbS5jbWQuZG8oXCJpbnNlcnRIVE1MXCIsICc8YSBocmVmPVwiJyArIFAgKyAnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JyArIE4gKyBcIjwvYT5cIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gRigpIHtcbiAgICAgICAgICBpZiAoISFTLmRlZmF1bHQobSkpIHtcbiAgICAgICAgICAgIEIoKTtcbiAgICAgICAgICAgIHZhciBOID0geS50ZXh0KCk7XG4gICAgICAgICAgICBtLmNtZC5kbyhcImluc2VydEhUTUxcIiwgXCI8c3Bhbj5cIiArIE4gKyBcIjwvc3Bhbj5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGsoTiwgUCkge1xuICAgICAgICAgIHZhciBqID0gbS5jb25maWcubGlua0NoZWNrKE4sIFApO1xuICAgICAgICAgIGlmIChqICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGlmIChqID09PSAhMClcbiAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgbS5jb25maWcuY3VzdG9tQWxlcnQoaiwgXCJ3YXJuaW5nXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGggPSB7XG4gICAgICAgICAgd2lkdGg6IDMwMCxcbiAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgdGFiczogW3tcbiAgICAgICAgICAgIHRpdGxlOiBtLmkxOG5leHQudChcIm1lbnVzLnBhbmVsTWVudXMubGluay5cXHU5NEZFXFx1NjNBNVwiKSxcbiAgICAgICAgICAgIHRwbDogYDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImAgKyBBICsgYFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiYCArIHggKyBgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImAgKyBtLmkxOG5leHQudChcIm1lbnVzLnBhbmVsTWVudXMubGluay5cXHU5NEZFXFx1NjNBNVxcdTY1ODdcXHU1QjU3XCIpICsgYFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImAgKyB3ICsgYFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiYCArIFIgKyBgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImAgKyBtLmkxOG5leHQudChcIlxcdTU5ODJcIikgKyBgIGh0dHBzOi8vLi4uXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWUtYnV0dG9uLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYCArIEUgKyBgXCIgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgICsgbS5pMThuZXh0LnQoXCJcXHU2M0QyXFx1NTE2NVwiKSArIGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImAgKyBDICsgJ1wiIGNsYXNzPVwiZ3JheSByaWdodFwiIHN0eWxlPVwiZGlzcGxheTonICsgTSArIGBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCArIG0uaTE4bmV4dC50KFwibWVudXMucGFuZWxNZW51cy5saW5rLlxcdTUzRDZcXHU2RDg4XFx1OTRGRVxcdTYzQTVcIikgKyBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCxcbiAgICAgICAgICAgIGV2ZW50czogW1xuICAgICAgICAgICAgICB7IHNlbGVjdG9yOiBcIiNcIiArIEUsIHR5cGU6IFwiY2xpY2tcIiwgZm46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBQLCBqLCBJLCBWO1xuICAgICAgICAgICAgICAgIG0uc2VsZWN0aW9uLnJlc3RvcmVTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB2YXIgVyA9IG0uc2VsZWN0aW9uLmdldFNlbGVjdGlvblJhbmdlVG9wTm9kZXMoKVswXS5nZXROb2RlKCksIFEgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCksIFggPSBiLmRlZmF1bHQoXCIjXCIgKyB3KSwgSiA9IGIuZGVmYXVsdChcIiNcIiArIEEpLCBaID0gKDAsIGMuZGVmYXVsdCkoUCA9IFgudmFsKCkpLmNhbGwoUCksIGRlID0gKDAsIGMuZGVmYXVsdCkoaiA9IEoudmFsKCkpLmNhbGwoaiksIHZlID0gXCJcIjtcbiAgICAgICAgICAgICAgICBRICYmICEoUSAhPSBudWxsICYmIFEuaXNDb2xsYXBzZWQpICYmICh2ZSA9IChJID0gRC5pbnNlcnRIdG1sKFEsIFcpKSA9PT0gbnVsbCB8fCBJID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoMCwgYy5kZWZhdWx0KShJKS5jYWxsKEkpKTtcbiAgICAgICAgICAgICAgICB2YXIgc2UgPSB2ZSA9PSBudWxsID8gdm9pZCAwIDogdmUucmVwbGFjZSgvPC4qPz4vZywgXCJcIiksIG1lID0gKFYgPSBzZSA9PSBudWxsID8gdm9pZCAwIDogc2UubGVuZ3RoKSAhPT0gbnVsbCAmJiBWICE9PSB2b2lkIDAgPyBWIDogMDtcbiAgICAgICAgICAgICAgICBpZiAobWUgPD0gZGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbGUgPSBkZS5zdWJzdHJpbmcoMCwgbWUpLCBpZSA9IGRlLnN1YnN0cmluZyhtZSk7XG4gICAgICAgICAgICAgICAgICBzZSA9PT0gbGUgJiYgKGRlID0gdmUgKyBpZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghIVogJiYgKGRlIHx8IChkZSA9IFopLCAhIWsoZGUsIFopKSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiAkKGRlLCBaKSwgITA7XG4gICAgICAgICAgICAgIH0sIGJpbmRFbnRlcjogITAgfSxcbiAgICAgICAgICAgICAgeyBzZWxlY3RvcjogXCIjXCIgKyBDLCB0eXBlOiBcImNsaWNrXCIsIGZuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRigpLCAhMDtcbiAgICAgICAgICAgICAgfSB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGg7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSBUO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoNCkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pLCBpLmluc2VydEh0bWwgPSBpLmNyZWF0ZVBhcnRIdG1sID0gaS5tYWtlSHRtbFN0cmluZyA9IGkuZ2V0VG9wTm9kZSA9IHZvaWQgMDtcbiAgICAgIGZ1bmN0aW9uIHAobSwgeCkge1xuICAgICAgICB2YXIgUiA9IG0sIHcgPSBtO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgaWYgKFIudGV4dENvbnRlbnQgPT09IHgpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB3ID0gUiwgUi5wYXJlbnROb2RlICYmIChSID0gUiA9PSBudWxsID8gdm9pZCAwIDogUi5wYXJlbnROb2RlKTtcbiAgICAgICAgfSB3aGlsZSAoKFIgPT0gbnVsbCA/IHZvaWQgMCA6IFIubm9kZU5hbWUpICE9PSBcIlBcIik7XG4gICAgICAgIHJldHVybiB3O1xuICAgICAgfVxuICAgICAgaS5nZXRUb3BOb2RlID0gcDtcbiAgICAgIGZ1bmN0aW9uIHYobSwgeCkge1xuICAgICAgICB2YXIgUiA9IG0ubm9kZU5hbWUsIHcgPSBcIlwiO1xuICAgICAgICBpZiAobS5ub2RlVHlwZSA9PT0gMyB8fCAvXihofEgpWzEtNl0kLy50ZXN0KFIpKVxuICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICBpZiAobS5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICAgIHZhciBBID0gbS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKSwgRSA9IG0uZ2V0QXR0cmlidXRlKFwiZmFjZVwiKSwgQyA9IG0uZ2V0QXR0cmlidXRlKFwiY29sb3JcIik7XG4gICAgICAgICAgQSAmJiAodyA9IHcgKyAoJyBzdHlsZT1cIicgKyBBICsgJ1wiJykpLCBFICYmICh3ID0gdyArICgnIGZhY2U9XCInICsgRSArICdcIicpKSwgQyAmJiAodyA9IHcgKyAoJyBjb2xvcj1cIicgKyBDICsgJ1wiJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBSID0gUi50b0xvd2VyQ2FzZSgpLCBcIjxcIiArIFIgKyB3ICsgXCI+XCIgKyB4ICsgXCI8L1wiICsgUiArIFwiPlwiO1xuICAgICAgfVxuICAgICAgaS5tYWtlSHRtbFN0cmluZyA9IHY7XG4gICAgICBmdW5jdGlvbiBiKG0sIHgsIFIsIHcpIHtcbiAgICAgICAgdmFyIEEsIEUgPSAoQSA9IHgudGV4dENvbnRlbnQpID09PSBudWxsIHx8IEEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IEEuc3Vic3RyaW5nKFIsIHcpLCBDID0geCwgTSA9IFwiXCI7XG4gICAgICAgIGRvXG4gICAgICAgICAgTSA9IHYoQywgRSAhPSBudWxsID8gRSA6IFwiXCIpLCBFID0gTSwgQyA9IEMgPT0gbnVsbCA/IHZvaWQgMCA6IEMucGFyZW50RWxlbWVudDtcbiAgICAgICAgd2hpbGUgKEMgJiYgQy50ZXh0Q29udGVudCAhPT0gbSk7XG4gICAgICAgIHJldHVybiBNO1xuICAgICAgfVxuICAgICAgaS5jcmVhdGVQYXJ0SHRtbCA9IGI7XG4gICAgICBmdW5jdGlvbiBTKG0sIHgpIHtcbiAgICAgICAgdmFyIFIsIHcsIEEsIEUsIEMsIE0gPSBtLmFuY2hvck5vZGUsIHkgPSBtLmZvY3VzTm9kZSwgQiA9IG0uYW5jaG9yT2Zmc2V0LCAkID0gbS5mb2N1c09mZnNldCwgRiA9IChSID0geC50ZXh0Q29udGVudCkgIT09IG51bGwgJiYgUiAhPT0gdm9pZCAwID8gUiA6IFwiXCIsIGsgPSBEKHgpLCBoID0gXCJcIiwgTiA9IFwiXCIsIFAgPSBcIlwiLCBqID0gXCJcIiwgSSA9IE0sIFYgPSB5LCBXID0gTTtcbiAgICAgICAgaWYgKE0gIT0gbnVsbCAmJiBNLmlzRXF1YWxOb2RlKHkgIT0gbnVsbCA/IHkgOiBudWxsKSkge1xuICAgICAgICAgIHZhciBRID0gYihGLCBNLCBCLCAkKTtcbiAgICAgICAgICByZXR1cm4gUSA9IFQoaywgUSksIFE7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChNICYmIChOID0gYihGLCBNLCBCICE9IG51bGwgPyBCIDogMCkpLCB5ICYmIChqID0gYihGLCB5LCAwLCAkKSksIE0gJiYgKEkgPSBwKE0sIEYpKSwgeSAmJiAoViA9IHAoeSwgRikpLCBXID0gKHcgPSBJID09IG51bGwgPyB2b2lkIDAgOiBJLm5leHRTaWJsaW5nKSAhPT0gbnVsbCAmJiB3ICE9PSB2b2lkIDAgPyB3IDogTTsgIShXICE9IG51bGwgJiYgVy5pc0VxdWFsTm9kZShWICE9IG51bGwgPyBWIDogbnVsbCkpOyApIHtcbiAgICAgICAgICB2YXIgWCA9IFcgPT0gbnVsbCA/IHZvaWQgMCA6IFcubm9kZU5hbWU7XG4gICAgICAgICAgaWYgKFggPT09IFwiI3RleHRcIilcbiAgICAgICAgICAgIFAgPSBQICsgKFcgPT0gbnVsbCA/IHZvaWQgMCA6IFcudGV4dENvbnRlbnQpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIEogPSAoRSA9IChBID0gVyA9PSBudWxsID8gdm9pZCAwIDogVy5maXJzdENoaWxkKSA9PT0gbnVsbCB8fCBBID09PSB2b2lkIDAgPyB2b2lkIDAgOiBBLnBhcmVudEVsZW1lbnQpID09PSBudWxsIHx8IEUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IEUuaW5uZXJIVE1MO1xuICAgICAgICAgICAgVyAmJiAoUCA9IFAgKyB2KFcsIEogIT0gbnVsbCA/IEogOiBcIlwiKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBaID0gKEMgPSBXID09IG51bGwgPyB2b2lkIDAgOiBXLm5leHRTaWJsaW5nKSAhPT0gbnVsbCAmJiBDICE9PSB2b2lkIDAgPyBDIDogVztcbiAgICAgICAgICBpZiAoWiA9PT0gVylcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIFcgPSBaO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoID0gXCJcIiArIE4gKyBQICsgaiwgaCA9IFQoaywgaCksIGg7XG4gICAgICB9XG4gICAgICBpLmluc2VydEh0bWwgPSBTO1xuICAgICAgZnVuY3Rpb24gRChtKSB7XG4gICAgICAgIGZvciAodmFyIHgsIFIgPSAoeCA9IG0udGV4dENvbnRlbnQpICE9PSBudWxsICYmIHggIT09IHZvaWQgMCA/IHggOiBcIlwiLCB3ID0gW107IChtID09IG51bGwgPyB2b2lkIDAgOiBtLnRleHRDb250ZW50KSA9PT0gUjsgKVxuICAgICAgICAgIG0ubm9kZU5hbWUgIT09IFwiUFwiICYmIG0ubm9kZU5hbWUgIT09IFwiVEFCTEVcIiAmJiB3LnB1c2gobSksIG0gPSBtLmNoaWxkTm9kZXNbMF07XG4gICAgICAgIHJldHVybiB3O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gVChtLCB4KSB7XG4gICAgICAgIHJldHVybiAoMCwgYy5kZWZhdWx0KShtKS5jYWxsKG0sIGZ1bmN0aW9uKFIpIHtcbiAgICAgICAgICB4ID0gdihSLCB4KTtcbiAgICAgICAgfSksIHg7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBjID0gdCgyKSwgcCA9IGMuX19pbXBvcnREZWZhdWx0KHQoMzI1KSk7XG4gICAgICBmdW5jdGlvbiB2KGIpIHtcbiAgICAgICAgcC5kZWZhdWx0KGIpO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gdjtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSB0KDIpLCBwID0gYy5fX2ltcG9ydERlZmF1bHQodCgzKSksIHYgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM4KSk7XG4gICAgICBmdW5jdGlvbiBiKEQpIHtcbiAgICAgICAgdmFyIFQ7XG4gICAgICAgIGZ1bmN0aW9uIG0oUikge1xuICAgICAgICAgIHZhciB3ID0gW3sgJGVsZW06IHAuZGVmYXVsdChcIjxzcGFuPlwiICsgRC5pMThuZXh0LnQoXCJtZW51cy5wYW5lbE1lbnVzLmxpbmsuXFx1NjdFNVxcdTc3MEJcXHU5NEZFXFx1NjNBNVwiKSArIFwiPC9zcGFuPlwiKSwgb25DbGljazogZnVuY3Rpb24oRSwgQykge1xuICAgICAgICAgICAgdmFyIE0gPSBDLmF0dHIoXCJocmVmXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5vcGVuKE0sIFwiX3RhcmdldFwiKSwgITA7XG4gICAgICAgICAgfSB9LCB7ICRlbGVtOiBwLmRlZmF1bHQoXCI8c3Bhbj5cIiArIEQuaTE4bmV4dC50KFwibWVudXMucGFuZWxNZW51cy5saW5rLlxcdTUzRDZcXHU2RDg4XFx1OTRGRVxcdTYzQTVcIikgKyBcIjwvc3Bhbj5cIiksIG9uQ2xpY2s6IGZ1bmN0aW9uKEUsIEMpIHtcbiAgICAgICAgICAgIHZhciBNLCB5O1xuICAgICAgICAgICAgRS5zZWxlY3Rpb24uY3JlYXRlUmFuZ2VCeUVsZW0oQyksIEUuc2VsZWN0aW9uLnJlc3RvcmVTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHZhciBCID0gQy5jaGlsZE5vZGVzKCk7XG4gICAgICAgICAgICBpZiAoKEIgPT0gbnVsbCA/IHZvaWQgMCA6IEIuZ2V0Tm9kZU5hbWUoKSkgPT09IFwiSU1HXCIpIHtcbiAgICAgICAgICAgICAgdmFyICQgPSAoeSA9IChNID0gRS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uQ29udGFpbmVyRWxlbSgpKSA9PT0gbnVsbCB8fCBNID09PSB2b2lkIDAgPyB2b2lkIDAgOiBNLmNoaWxkcmVuKCkpID09PSBudWxsIHx8IHkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHkuZWxlbXNbMF0uY2hpbGRyZW5bMF07XG4gICAgICAgICAgICAgIEUuY21kLmRvKFwiaW5zZXJ0SFRNTFwiLCBgPGltZyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPWAgKyAoJCA9PSBudWxsID8gdm9pZCAwIDogJC5nZXRBdHRyaWJ1dGUoXCJzcmNcIikpICsgYCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9YCArICgkID09IG51bGwgPyB2b2lkIDAgOiAkLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpKSArIFwiPlwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBGID0gQy50ZXh0KCk7XG4gICAgICAgICAgICAgIEUuY21kLmRvKFwiaW5zZXJ0SFRNTFwiLCBcIjxzcGFuPlwiICsgRiArIFwiPC9zcGFuPlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICB9IH1dO1xuICAgICAgICAgIFQgPSBuZXcgdi5kZWZhdWx0KEQsIFIsIHcpLCBULmNyZWF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHgoKSB7XG4gICAgICAgICAgVCAmJiAoVC5yZW1vdmUoKSwgVCA9IG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHNob3dMaW5rVG9vbHRpcDogbSwgaGlkZUxpbmtUb29sdGlwOiB4IH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBTKEQpIHtcbiAgICAgICAgdmFyIFQgPSBiKEQpLCBtID0gVC5zaG93TGlua1Rvb2x0aXAsIHggPSBULmhpZGVMaW5rVG9vbHRpcDtcbiAgICAgICAgRC50eHQuZXZlbnRIb29rcy5saW5rQ2xpY2tFdmVudHMucHVzaChtKSwgRC50eHQuZXZlbnRIb29rcy5jbGlja0V2ZW50cy5wdXNoKHgpLCBELnR4dC5ldmVudEhvb2tzLmtleXVwRXZlbnRzLnB1c2goeCksIEQudHh0LmV2ZW50SG9va3MudG9vbGJhckNsaWNrRXZlbnRzLnB1c2goeCksIEQudHh0LmV2ZW50SG9va3MubWVudUNsaWNrRXZlbnRzLnB1c2goeCksIEQudHh0LmV2ZW50SG9va3MudGV4dFNjcm9sbEV2ZW50cy5wdXNoKHgpO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gUztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSB0KDIpLCBwID0gYy5fX2ltcG9ydERlZmF1bHQodCgyMykpLCB2ID0gYy5fX2ltcG9ydERlZmF1bHQodCgzKSksIGIgPSBmdW5jdGlvbihTKSB7XG4gICAgICAgIGMuX19leHRlbmRzKEQsIFMpO1xuICAgICAgICBmdW5jdGlvbiBEKFQpIHtcbiAgICAgICAgICB2YXIgbSA9IHRoaXMsIHggPSB2LmRlZmF1bHQoYDxkaXYgY2xhc3M9XCJ3LWUtbWVudVwiIGRhdGEtdGl0bGU9XCJcXHU2NTlDXFx1NEY1M1wiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidy1lLWljb24taXRhbGljXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgICAgICAgcmV0dXJuIG0gPSBTLmNhbGwodGhpcywgeCwgVCkgfHwgdGhpcywgbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRC5wcm90b3R5cGUuY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIFQgPSB0aGlzLmVkaXRvciwgbSA9IFQuc2VsZWN0aW9uLmlzU2VsZWN0aW9uRW1wdHkoKTtcbiAgICAgICAgICBtICYmIFQuc2VsZWN0aW9uLmNyZWF0ZUVtcHR5UmFuZ2UoKSwgVC5jbWQuZG8oXCJpdGFsaWNcIiksIG0gJiYgKFQuc2VsZWN0aW9uLmNvbGxhcHNlUmFuZ2UoKSwgVC5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpKTtcbiAgICAgICAgfSwgRC5wcm90b3R5cGUudHJ5Q2hhbmdlQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIFQgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgICBULmNtZC5xdWVyeUNvbW1hbmRTdGF0ZShcIml0YWxpY1wiKSA/IHRoaXMuYWN0aXZlKCkgOiB0aGlzLnVuQWN0aXZlKCk7XG4gICAgICAgIH0sIEQ7XG4gICAgICB9KHAuZGVmYXVsdCk7XG4gICAgICBpLmRlZmF1bHQgPSBiO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDIzKSksIHYgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgYiA9IGZ1bmN0aW9uKFMpIHtcbiAgICAgICAgYy5fX2V4dGVuZHMoRCwgUyk7XG4gICAgICAgIGZ1bmN0aW9uIEQoVCkge1xuICAgICAgICAgIHZhciBtID0gdGhpcywgeCA9IHYuZGVmYXVsdChgPGRpdiBjbGFzcz1cInctZS1tZW51XCIgZGF0YS10aXRsZT1cIlxcdTRFMEJcXHU1MjEyXFx1N0VCRlwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidy1lLWljb24tdW5kZXJsaW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgICAgICAgcmV0dXJuIG0gPSBTLmNhbGwodGhpcywgeCwgVCkgfHwgdGhpcywgbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRC5wcm90b3R5cGUuY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIFQgPSB0aGlzLmVkaXRvciwgbSA9IFQuc2VsZWN0aW9uLmlzU2VsZWN0aW9uRW1wdHkoKTtcbiAgICAgICAgICBtICYmIFQuc2VsZWN0aW9uLmNyZWF0ZUVtcHR5UmFuZ2UoKSwgVC5jbWQuZG8oXCJ1bmRlcmxpbmVcIiksIG0gJiYgKFQuc2VsZWN0aW9uLmNvbGxhcHNlUmFuZ2UoKSwgVC5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpKTtcbiAgICAgICAgfSwgRC5wcm90b3R5cGUudHJ5Q2hhbmdlQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIFQgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgICBULmNtZC5xdWVyeUNvbW1hbmRTdGF0ZShcInVuZGVybGluZVwiKSA/IHRoaXMuYWN0aXZlKCkgOiB0aGlzLnVuQWN0aXZlKCk7XG4gICAgICAgIH0sIEQ7XG4gICAgICB9KHAuZGVmYXVsdCk7XG4gICAgICBpLmRlZmF1bHQgPSBiO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDIzKSksIHYgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgYiA9IGZ1bmN0aW9uKFMpIHtcbiAgICAgICAgYy5fX2V4dGVuZHMoRCwgUyk7XG4gICAgICAgIGZ1bmN0aW9uIEQoVCkge1xuICAgICAgICAgIHZhciBtID0gdGhpcywgeCA9IHYuZGVmYXVsdChgPGRpdiBjbGFzcz1cInctZS1tZW51XCIgZGF0YS10aXRsZT1cIlxcdTUyMjBcXHU5NjY0XFx1N0VCRlwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidy1lLWljb24tc3RyaWtldGhyb3VnaFwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICAgIHJldHVybiBtID0gUy5jYWxsKHRoaXMsIHgsIFQpIHx8IHRoaXMsIG07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEQucHJvdG90eXBlLmNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBUID0gdGhpcy5lZGl0b3IsIG0gPSBULnNlbGVjdGlvbi5pc1NlbGVjdGlvbkVtcHR5KCk7XG4gICAgICAgICAgbSAmJiBULnNlbGVjdGlvbi5jcmVhdGVFbXB0eVJhbmdlKCksIFQuY21kLmRvKFwic3RyaWtlVGhyb3VnaFwiKSwgbSAmJiAoVC5zZWxlY3Rpb24uY29sbGFwc2VSYW5nZSgpLCBULnNlbGVjdGlvbi5yZXN0b3JlU2VsZWN0aW9uKCkpO1xuICAgICAgICB9LCBELnByb3RvdHlwZS50cnlDaGFuZ2VBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgVCA9IHRoaXMuZWRpdG9yO1xuICAgICAgICAgIFQuY21kLnF1ZXJ5Q29tbWFuZFN0YXRlKFwic3RyaWtlVGhyb3VnaFwiKSA/IHRoaXMuYWN0aXZlKCkgOiB0aGlzLnVuQWN0aXZlKCk7XG4gICAgICAgIH0sIEQ7XG4gICAgICB9KHAuZGVmYXVsdCk7XG4gICAgICBpLmRlZmF1bHQgPSBiO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDI0KSksIHYgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgYiA9IGMuX19pbXBvcnREZWZhdWx0KHQoMzMwKSksIFMgPSBmdW5jdGlvbihEKSB7XG4gICAgICAgIGMuX19leHRlbmRzKFQsIEQpO1xuICAgICAgICBmdW5jdGlvbiBUKG0pIHtcbiAgICAgICAgICB2YXIgeCA9IHRoaXMsIFIgPSB2LmRlZmF1bHQoYDxkaXYgY2xhc3M9XCJ3LWUtbWVudVwiIGRhdGEtdGl0bGU9XCJcXHU1QjU3XFx1NEY1M1wiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidy1lLWljb24tZm9udFwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PmApLCB3ID0gbmV3IGIuZGVmYXVsdChtLmNvbmZpZy5mb250TmFtZXMpLCBBID0geyB3aWR0aDogMTAwLCB0aXRsZTogXCJcXHU4QkJFXFx1N0Y2RVxcdTVCNTdcXHU0RjUzXCIsIHR5cGU6IFwibGlzdFwiLCBsaXN0OiB3LmdldEl0ZW1MaXN0KCksIGNsaWNrSGFuZGxlcjogZnVuY3Rpb24oQykge1xuICAgICAgICAgICAgeC5jb21tYW5kKEMpO1xuICAgICAgICAgIH0gfTtcbiAgICAgICAgICByZXR1cm4geCA9IEQuY2FsbCh0aGlzLCBSLCBtLCBBKSB8fCB0aGlzLCB4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBULnByb3RvdHlwZS5jb21tYW5kID0gZnVuY3Rpb24obSkge1xuICAgICAgICAgIHZhciB4LCBSID0gdGhpcy5lZGl0b3IsIHcgPSBSLnNlbGVjdGlvbi5pc1NlbGVjdGlvbkVtcHR5KCksIEEgPSAoeCA9IFIuc2VsZWN0aW9uLmdldFNlbGVjdGlvbkNvbnRhaW5lckVsZW0oKSkgPT09IG51bGwgfHwgeCA9PT0gdm9pZCAwID8gdm9pZCAwIDogeC5lbGVtc1swXTtcbiAgICAgICAgICBpZiAoQSAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgRSA9IChBID09IG51bGwgPyB2b2lkIDAgOiBBLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9PSBcInBcIiwgQyA9IChBID09IG51bGwgPyB2b2lkIDAgOiBBLmdldEF0dHJpYnV0ZShcImZhY2VcIikpID09PSBtO1xuICAgICAgICAgICAgaWYgKHcpIHtcbiAgICAgICAgICAgICAgaWYgKEUgJiYgIUMpIHtcbiAgICAgICAgICAgICAgICB2YXIgTSA9IFIuc2VsZWN0aW9uLmdldFNlbGVjdGlvblJhbmdlVG9wTm9kZXMoKTtcbiAgICAgICAgICAgICAgICBSLnNlbGVjdGlvbi5jcmVhdGVSYW5nZUJ5RWxlbShNWzBdKSwgUi5zZWxlY3Rpb24ubW92ZUN1cnNvcihNWzBdLmVsZW1zWzBdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBSLnNlbGVjdGlvbi5zZXRSYW5nZVRvRWxlbShBKSwgUi5zZWxlY3Rpb24uY3JlYXRlRW1wdHlSYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgUi5jbWQuZG8oXCJmb250TmFtZVwiLCBtKSwgdyAmJiAoUi5zZWxlY3Rpb24uY29sbGFwc2VSYW5nZSgpLCBSLnNlbGVjdGlvbi5yZXN0b3JlU2VsZWN0aW9uKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgVC5wcm90b3R5cGUudHJ5Q2hhbmdlQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIH0sIFQ7XG4gICAgICB9KHAuZGVmYXVsdCk7XG4gICAgICBpLmRlZmF1bHQgPSBTO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoNCkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIHAgPSB0KDIpLCB2ID0gcC5fX2ltcG9ydERlZmF1bHQodCgzKSksIGIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZnVuY3Rpb24gUyhEKSB7XG4gICAgICAgICAgdmFyIFQgPSB0aGlzO1xuICAgICAgICAgIHRoaXMuaXRlbUxpc3QgPSBbXSwgKDAsIGMuZGVmYXVsdCkoRCkuY2FsbChELCBmdW5jdGlvbihtKSB7XG4gICAgICAgICAgICB2YXIgeCA9IHR5cGVvZiBtID09IFwic3RyaW5nXCIgPyBtIDogbS52YWx1ZSwgUiA9IHR5cGVvZiBtID09IFwic3RyaW5nXCIgPyBtIDogbS5uYW1lO1xuICAgICAgICAgICAgVC5pdGVtTGlzdC5wdXNoKHsgJGVsZW06IHYuZGVmYXVsdChgPHAgc3R5bGU9XCJmb250LWZhbWlseTonYCArIHggKyBgJ1wiPmAgKyBSICsgXCI8L3A+XCIpLCB2YWx1ZTogUiB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUy5wcm90b3R5cGUuZ2V0SXRlbUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtTGlzdDtcbiAgICAgICAgfSwgUztcbiAgICAgIH0oKTtcbiAgICAgIGkuZGVmYXVsdCA9IGI7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBjID0gdCgyKSwgcCA9IGMuX19pbXBvcnREZWZhdWx0KHQoMjQpKSwgdiA9IGMuX19pbXBvcnREZWZhdWx0KHQoMykpLCBiID0gYy5fX2ltcG9ydERlZmF1bHQodCgzMzIpKSwgUyA9IGZ1bmN0aW9uKEQpIHtcbiAgICAgICAgYy5fX2V4dGVuZHMoVCwgRCk7XG4gICAgICAgIGZ1bmN0aW9uIFQobSkge1xuICAgICAgICAgIHZhciB4ID0gdGhpcywgUiA9IHYuZGVmYXVsdChgPGRpdiBjbGFzcz1cInctZS1tZW51XCIgZGF0YS10aXRsZT1cIlxcdTVCNTdcXHU1M0Y3XCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ3LWUtaWNvbi10ZXh0LWhlaWdoXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+YCksIHcgPSBuZXcgYi5kZWZhdWx0KG0uY29uZmlnLmZvbnRTaXplcyksIEEgPSB7IHdpZHRoOiAxNjAsIHRpdGxlOiBcIlxcdThCQkVcXHU3RjZFXFx1NUI1N1xcdTUzRjdcIiwgdHlwZTogXCJsaXN0XCIsIGxpc3Q6IHcuZ2V0SXRlbUxpc3QoKSwgY2xpY2tIYW5kbGVyOiBmdW5jdGlvbihDKSB7XG4gICAgICAgICAgICB4LmNvbW1hbmQoQyk7XG4gICAgICAgICAgfSB9O1xuICAgICAgICAgIHJldHVybiB4ID0gRC5jYWxsKHRoaXMsIFIsIG0sIEEpIHx8IHRoaXMsIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFQucHJvdG90eXBlLmNvbW1hbmQgPSBmdW5jdGlvbihtKSB7XG4gICAgICAgICAgdmFyIHgsIFIgPSB0aGlzLmVkaXRvciwgdyA9IFIuc2VsZWN0aW9uLmlzU2VsZWN0aW9uRW1wdHkoKSwgQSA9ICh4ID0gUi5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uQ29udGFpbmVyRWxlbSgpKSA9PT0gbnVsbCB8fCB4ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB4LmVsZW1zWzBdO1xuICAgICAgICAgIEEgIT0gbnVsbCAmJiAoUi5jbWQuZG8oXCJmb250U2l6ZVwiLCBtKSwgdyAmJiAoUi5zZWxlY3Rpb24uY29sbGFwc2VSYW5nZSgpLCBSLnNlbGVjdGlvbi5yZXN0b3JlU2VsZWN0aW9uKCkpKTtcbiAgICAgICAgfSwgVC5wcm90b3R5cGUudHJ5Q2hhbmdlQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIH0sIFQ7XG4gICAgICB9KHAuZGVmYXVsdCk7XG4gICAgICBpLmRlZmF1bHQgPSBTO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgdiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmdW5jdGlvbiBiKFMpIHtcbiAgICAgICAgICB0aGlzLml0ZW1MaXN0ID0gW107XG4gICAgICAgICAgZm9yICh2YXIgRCBpbiBTKSB7XG4gICAgICAgICAgICB2YXIgVCA9IFNbRF07XG4gICAgICAgICAgICB0aGlzLml0ZW1MaXN0LnB1c2goeyAkZWxlbTogcC5kZWZhdWx0KCc8cCBzdHlsZT1cImZvbnQtc2l6ZTonICsgRCArICdcIj4nICsgVC5uYW1lICsgXCI8L3A+XCIpLCB2YWx1ZTogVC52YWx1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGIucHJvdG90eXBlLmdldEl0ZW1MaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbUxpc3Q7XG4gICAgICAgIH0sIGI7XG4gICAgICB9KCk7XG4gICAgICBpLmRlZmF1bHQgPSB2O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoNCkpLCBwID0gcyh0KDI3KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgdiA9IHQoMiksIGIgPSB2Ll9faW1wb3J0RGVmYXVsdCh0KDI0KSksIFMgPSB2Ll9faW1wb3J0RGVmYXVsdCh0KDMpKSwgRCA9IFtcIkxJXCJdLCBUID0gW1wiVUxcIiwgXCJCTE9DS1FVT1RFXCJdLCBtID0gZnVuY3Rpb24oeCkge1xuICAgICAgICB2Ll9fZXh0ZW5kcyhSLCB4KTtcbiAgICAgICAgZnVuY3Rpb24gUih3KSB7XG4gICAgICAgICAgdmFyIEEgPSB0aGlzLCBFID0gUy5kZWZhdWx0KCc8ZGl2IGNsYXNzPVwidy1lLW1lbnVcIiBkYXRhLXRpdGxlPVwiXFx1NUJGOVxcdTlGNTBcIj48aSBjbGFzcz1cInctZS1pY29uLXBhcmFncmFwaC1sZWZ0XCI+PC9pPjwvZGl2PicpLCBDID0geyB3aWR0aDogMTAwLCB0aXRsZTogXCJcXHU1QkY5XFx1OUY1MFxcdTY1QjlcXHU1RjBGXCIsIHR5cGU6IFwibGlzdFwiLCBsaXN0OiBbeyAkZWxlbTogUy5kZWZhdWx0KGA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInctZS1pY29uLXBhcmFncmFwaC1sZWZ0IHctZS1kcm9wLWxpc3QtaXRlbVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgICsgdy5pMThuZXh0LnQoXCJtZW51cy5kcm9wTGlzdE1lbnUuanVzdGlmeS5cXHU5NzYwXFx1NURFNlwiKSArIGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5gKSwgdmFsdWU6IFwibGVmdFwiIH0sIHsgJGVsZW06IFMuZGVmYXVsdChgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ3LWUtaWNvbi1wYXJhZ3JhcGgtY2VudGVyIHctZS1kcm9wLWxpc3QtaXRlbVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgICsgdy5pMThuZXh0LnQoXCJtZW51cy5kcm9wTGlzdE1lbnUuanVzdGlmeS5cXHU1QzQ1XFx1NEUyRFwiKSArIGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5gKSwgdmFsdWU6IFwiY2VudGVyXCIgfSwgeyAkZWxlbTogUy5kZWZhdWx0KGA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInctZS1pY29uLXBhcmFncmFwaC1yaWdodCB3LWUtZHJvcC1saXN0LWl0ZW1cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCArIHcuaTE4bmV4dC50KFwibWVudXMuZHJvcExpc3RNZW51Lmp1c3RpZnkuXFx1OTc2MFxcdTUzRjNcIikgKyBgXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+YCksIHZhbHVlOiBcInJpZ2h0XCIgfSwgeyAkZWxlbTogUy5kZWZhdWx0KGA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInctZS1pY29uLXBhcmFncmFwaC1qdXN0aWZ5IHctZS1kcm9wLWxpc3QtaXRlbVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgICsgdy5pMThuZXh0LnQoXCJtZW51cy5kcm9wTGlzdE1lbnUuanVzdGlmeS5cXHU0RTI0XFx1N0FFRlwiKSArIGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5gKSwgdmFsdWU6IFwianVzdGlmeVwiIH1dLCBjbGlja0hhbmRsZXI6IGZ1bmN0aW9uKHkpIHtcbiAgICAgICAgICAgIEEuY29tbWFuZCh5KTtcbiAgICAgICAgICB9IH07XG4gICAgICAgICAgcmV0dXJuIEEgPSB4LmNhbGwodGhpcywgRSwgdywgQykgfHwgdGhpcywgQTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUi5wcm90b3R5cGUuY29tbWFuZCA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgICAgICB2YXIgQSA9IHRoaXMuZWRpdG9yLCBFID0gQS5zZWxlY3Rpb24sIEMgPSBFLmdldFNlbGVjdGlvbkNvbnRhaW5lckVsZW0oKTtcbiAgICAgICAgICBFLnNhdmVSYW5nZSgpO1xuICAgICAgICAgIHZhciBNID0gQS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uUmFuZ2VUb3BOb2RlcygpO1xuICAgICAgICAgIGlmIChDICE9IG51bGwgJiYgQy5sZW5ndGgpXG4gICAgICAgICAgICBpZiAodGhpcy5pc1NwZWNpYWxOb2RlKEMsIE1bMF0pIHx8IHRoaXMuaXNTcGVjaWFsVG9wTm9kZShNWzBdKSkge1xuICAgICAgICAgICAgICB2YXIgeSA9IHRoaXMuZ2V0U3BlY2lhbE5vZGVVbnRpbFRvcChDLCBNWzBdKTtcbiAgICAgICAgICAgICAgaWYgKHkgPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIFMuZGVmYXVsdCh5KS5jc3MoXCJ0ZXh0LWFsaWduXCIsIHcpO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICgwLCBjLmRlZmF1bHQpKE0pLmNhbGwoTSwgZnVuY3Rpb24oQikge1xuICAgICAgICAgICAgICAgIEIuY3NzKFwidGV4dC1hbGlnblwiLCB3KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgRS5yZXN0b3JlU2VsZWN0aW9uKCk7XG4gICAgICAgIH0sIFIucHJvdG90eXBlLmdldFNwZWNpYWxOb2RlVW50aWxUb3AgPSBmdW5jdGlvbih3LCBBKSB7XG4gICAgICAgICAgZm9yICh2YXIgRSA9IHcuZWxlbXNbMF0sIEMgPSBBLmVsZW1zWzBdOyBFICE9IG51bGw7ICkge1xuICAgICAgICAgICAgaWYgKCgwLCBwLmRlZmF1bHQpKEQpLmNhbGwoRCwgRSA9PSBudWxsID8gdm9pZCAwIDogRS5ub2RlTmFtZSkgIT09IC0xIHx8IEUucGFyZW50Tm9kZSA9PT0gQylcbiAgICAgICAgICAgICAgcmV0dXJuIEU7XG4gICAgICAgICAgICBFID0gRS5wYXJlbnROb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gRTtcbiAgICAgICAgfSwgUi5wcm90b3R5cGUuaXNTcGVjaWFsTm9kZSA9IGZ1bmN0aW9uKHcsIEEpIHtcbiAgICAgICAgICB2YXIgRSA9IHRoaXMuZ2V0U3BlY2lhbE5vZGVVbnRpbFRvcCh3LCBBKTtcbiAgICAgICAgICByZXR1cm4gRSA9PSBudWxsID8gITEgOiAoMCwgcC5kZWZhdWx0KShEKS5jYWxsKEQsIEUubm9kZU5hbWUpICE9PSAtMTtcbiAgICAgICAgfSwgUi5wcm90b3R5cGUuaXNTcGVjaWFsVG9wTm9kZSA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgICAgICB2YXIgQTtcbiAgICAgICAgICByZXR1cm4gdyA9PSBudWxsID8gITEgOiAoMCwgcC5kZWZhdWx0KShUKS5jYWxsKFQsIChBID0gdy5lbGVtc1swXSkgPT09IG51bGwgfHwgQSA9PT0gdm9pZCAwID8gdm9pZCAwIDogQS5ub2RlTmFtZSkgIT09IC0xO1xuICAgICAgICB9LCBSLnByb3RvdHlwZS50cnlDaGFuZ2VBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgfSwgUjtcbiAgICAgIH0oYi5kZWZhdWx0KTtcbiAgICAgIGkuZGVmYXVsdCA9IG07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCg0KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgcCA9IHQoMiksIHYgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgYiA9IHAuX19pbXBvcnREZWZhdWx0KHQoMjMpKSwgUyA9IHAuX19pbXBvcnREZWZhdWx0KHQoMzM1KSksIEQgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMzNikpLCBUID0gdCg3KSwgbSA9IGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgcC5fX2V4dGVuZHMoUiwgeCk7XG4gICAgICAgIGZ1bmN0aW9uIFIodykge1xuICAgICAgICAgIHZhciBBID0gdGhpcywgRSA9IHYuZGVmYXVsdChgPGRpdiBjbGFzcz1cInctZS1tZW51XCIgZGF0YS10aXRsZT1cIlxcdTVGMTVcXHU3NTI4XCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ3LWUtaWNvbi1xdW90ZXMtbGVmdFwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICAgIHJldHVybiBBID0geC5jYWxsKHRoaXMsIEUsIHcpIHx8IHRoaXMsIFMuZGVmYXVsdCh3KSwgQTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUi5wcm90b3R5cGUuY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHcsIEEsIEUgPSB0aGlzLmVkaXRvciwgQyA9IEUuc2VsZWN0aW9uLmlzU2VsZWN0aW9uRW1wdHkoKSwgTSA9IEUuc2VsZWN0aW9uLmdldFNlbGVjdGlvblJhbmdlVG9wTm9kZXMoKSwgeSA9IE1bTS5sZW5ndGggLSAxXSwgQiA9IHRoaXMuZ2V0VG9wTm9kZU5hbWUoKTtcbiAgICAgICAgICBpZiAoQiA9PT0gXCJCTE9DS1FVT1RFXCIpIHtcbiAgICAgICAgICAgIHZhciAkID0gdi5kZWZhdWx0KHkuY2hpbGROb2RlcygpKSwgRiA9ICQubGVuZ3RoLCBrID0geTtcbiAgICAgICAgICAgICgwLCBjLmRlZmF1bHQpKCQpLmNhbGwoJCwgZnVuY3Rpb24oaikge1xuICAgICAgICAgICAgICB2YXIgSSA9IHYuZGVmYXVsdChqKTtcbiAgICAgICAgICAgICAgSS5pbnNlcnRBZnRlcihrKSwgayA9IEk7XG4gICAgICAgICAgICB9KSwgeS5yZW1vdmUoKSwgRS5zZWxlY3Rpb24ubW92ZUN1cnNvcigkLmVsZW1zW0YgLSAxXSksIHRoaXMudHJ5Q2hhbmdlQWN0aXZlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBoID0gRC5kZWZhdWx0KE0pO1xuICAgICAgICAgICAgaWYgKEUuJHRleHRFbGVtLmVxdWFsKHkpKSB7XG4gICAgICAgICAgICAgIHZhciBOID0gKHcgPSBFLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25Db250YWluZXJFbGVtKCkpID09PSBudWxsIHx8IHcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHcuZWxlbXNbMF07XG4gICAgICAgICAgICAgIEUuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlQnlFbGVtcyhOLmNoaWxkcmVuWzBdLCBOLmNoaWxkcmVuWzBdKSwgTSA9IEUuc2VsZWN0aW9uLmdldFNlbGVjdGlvblJhbmdlVG9wTm9kZXMoKSwgaCA9IEQuZGVmYXVsdChNKSwgeS5hcHBlbmQoaCk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgaC5pbnNlcnRBZnRlcih5KTtcbiAgICAgICAgICAgIHRoaXMuZGVsU2VsZWN0Tm9kZShNKTtcbiAgICAgICAgICAgIHZhciBQID0gKEEgPSBoLmNoaWxkTm9kZXMoKSkgPT09IG51bGwgfHwgQSA9PT0gdm9pZCAwID8gdm9pZCAwIDogQS5sYXN0KCkuZ2V0Tm9kZSgpO1xuICAgICAgICAgICAgaWYgKFAgPT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgUC50ZXh0Q29udGVudCA/IEUuc2VsZWN0aW9uLm1vdmVDdXJzb3IoUCkgOiBFLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yKFAsIDApLCB0aGlzLnRyeUNoYW5nZUFjdGl2ZSgpLCB2LmRlZmF1bHQoVC5FTVBUWV9QKS5pbnNlcnRBZnRlcihoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgQyAmJiAoRS5zZWxlY3Rpb24uY29sbGFwc2VSYW5nZSgpLCBFLnNlbGVjdGlvbi5yZXN0b3JlU2VsZWN0aW9uKCkpO1xuICAgICAgICB9LCBSLnByb3RvdHlwZS50cnlDaGFuZ2VBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgdywgQSA9IHRoaXMuZWRpdG9yLCBFID0gKHcgPSBBLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25SYW5nZVRvcE5vZGVzKClbMF0pID09PSBudWxsIHx8IHcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHcuZ2V0Tm9kZU5hbWUoKTtcbiAgICAgICAgICBFID09PSBcIkJMT0NLUVVPVEVcIiA/IHRoaXMuYWN0aXZlKCkgOiB0aGlzLnVuQWN0aXZlKCk7XG4gICAgICAgIH0sIFIucHJvdG90eXBlLmdldFRvcE5vZGVOYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHcgPSB0aGlzLmVkaXRvciwgQSA9IHcuc2VsZWN0aW9uLmdldFNlbGVjdGlvblJhbmdlVG9wTm9kZXMoKVswXSwgRSA9IEEgPT0gbnVsbCA/IHZvaWQgMCA6IEEuZ2V0Tm9kZU5hbWUoKTtcbiAgICAgICAgICByZXR1cm4gRTtcbiAgICAgICAgfSwgUi5wcm90b3R5cGUuZGVsU2VsZWN0Tm9kZSA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgICAgICAoMCwgYy5kZWZhdWx0KSh3KS5jYWxsKHcsIGZ1bmN0aW9uKEEpIHtcbiAgICAgICAgICAgIEEucmVtb3ZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIFI7XG4gICAgICB9KGIuZGVmYXVsdCk7XG4gICAgICBpLmRlZmF1bHQgPSBtO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSB0KDcpLCB2ID0gYy5fX2ltcG9ydERlZmF1bHQodCgzKSk7XG4gICAgICBmdW5jdGlvbiBiKFMpIHtcbiAgICAgICAgZnVuY3Rpb24gRChUKSB7XG4gICAgICAgICAgdmFyIG0sIHggPSBTLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25Db250YWluZXJFbGVtKCksIFIgPSBTLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25SYW5nZVRvcE5vZGVzKClbMF07XG4gICAgICAgICAgaWYgKChSID09IG51bGwgPyB2b2lkIDAgOiBSLmdldE5vZGVOYW1lKCkpID09PSBcIkJMT0NLUVVPVEVcIikge1xuICAgICAgICAgICAgaWYgKHguZ2V0Tm9kZU5hbWUoKSA9PT0gXCJCTE9DS1FVT1RFXCIpIHtcbiAgICAgICAgICAgICAgdmFyIHcgPSAobSA9IHguY2hpbGROb2RlcygpKSA9PT0gbnVsbCB8fCBtID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtLmdldE5vZGUoKTtcbiAgICAgICAgICAgICAgUy5zZWxlY3Rpb24ubW92ZUN1cnNvcih3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh4LnRleHQoKSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICBULnByZXZlbnREZWZhdWx0KCksIHgucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIHZhciBBID0gdi5kZWZhdWx0KHAuRU1QVFlfUCk7XG4gICAgICAgICAgICAgIEEuaW5zZXJ0QWZ0ZXIoUiksIFMuc2VsZWN0aW9uLm1vdmVDdXJzb3IoQS5nZXROb2RlKCksIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgUi50ZXh0KCkgPT09IFwiXCIgJiYgUi5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgUy50eHQuZXZlbnRIb29rcy5lbnRlckRvd25FdmVudHMucHVzaChEKTtcbiAgICAgIH1cbiAgICAgIGkuZGVmYXVsdCA9IGI7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCg0KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgcCA9IHQoMiksIHYgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMpKTtcbiAgICAgIGZ1bmN0aW9uIGIoUykge1xuICAgICAgICB2YXIgRCA9IHYuZGVmYXVsdChcIjxibG9ja3F1b3RlPjwvYmxvY2txdW90ZT5cIik7XG4gICAgICAgIHJldHVybiAoMCwgYy5kZWZhdWx0KShTKS5jYWxsKFMsIGZ1bmN0aW9uKFQpIHtcbiAgICAgICAgICBELmFwcGVuZChULmNsb25lKCEwKSk7XG4gICAgICAgIH0pLCBEO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gYjtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDI2KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgcCA9IHQoMiksIHYgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDI0KSksIGIgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgUyA9IHQoNiksIEQgPSBmdW5jdGlvbihUKSB7XG4gICAgICAgIHAuX19leHRlbmRzKG0sIFQpO1xuICAgICAgICBmdW5jdGlvbiBtKHgpIHtcbiAgICAgICAgICB2YXIgUiwgdyA9IHRoaXMsIEEgPSBiLmRlZmF1bHQoYDxkaXYgY2xhc3M9XCJ3LWUtbWVudVwiIGRhdGEtdGl0bGU9XCJcXHU4MENDXFx1NjY2RlxcdTgyNzJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInctZS1pY29uLXBhaW50LWJydXNoXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+YCksIEUgPSB7XG4gICAgICAgICAgICB3aWR0aDogMTIwLFxuICAgICAgICAgICAgdGl0bGU6IFwiXFx1ODBDQ1xcdTY2NkZcXHU5ODlDXFx1ODI3MlwiLFxuICAgICAgICAgICAgdHlwZTogXCJpbmxpbmUtYmxvY2tcIixcbiAgICAgICAgICAgIGxpc3Q6ICgwLCBjLmRlZmF1bHQpKFIgPSB4LmNvbmZpZy5jb2xvcnMpLmNhbGwoUiwgZnVuY3Rpb24oQykge1xuICAgICAgICAgICAgICByZXR1cm4geyAkZWxlbTogYi5kZWZhdWx0KCc8aSBzdHlsZT1cImNvbG9yOicgKyBDICsgJztcIiBjbGFzcz1cInctZS1pY29uLXBhaW50LWJydXNoXCI+PC9pPicpLCB2YWx1ZTogQyB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjbGlja0hhbmRsZXI6IGZ1bmN0aW9uKE0pIHtcbiAgICAgICAgICAgICAgdy5jb21tYW5kKE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHcgPSBULmNhbGwodGhpcywgQSwgeCwgRSkgfHwgdGhpcywgdztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5wcm90b3R5cGUuY29tbWFuZCA9IGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgICB2YXIgUiwgdyA9IHRoaXMuZWRpdG9yLCBBID0gdy5zZWxlY3Rpb24uaXNTZWxlY3Rpb25FbXB0eSgpLCBFID0gKFIgPSB3LnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25Db250YWluZXJFbGVtKCkpID09PSBudWxsIHx8IFIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IFIuZWxlbXNbMF07XG4gICAgICAgICAgaWYgKEUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIEMgPSAoRSA9PSBudWxsID8gdm9pZCAwIDogRS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSAhPT0gXCJwXCIsIE0gPSBFID09IG51bGwgPyB2b2lkIDAgOiBFLnN0eWxlLmJhY2tncm91bmRDb2xvciwgeSA9IFMuaGV4VG9SZ2IoeCkgPT09IE07XG4gICAgICAgICAgICBpZiAoQSkge1xuICAgICAgICAgICAgICBpZiAoQyAmJiAheSkge1xuICAgICAgICAgICAgICAgIHZhciBCID0gdy5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uUmFuZ2VUb3BOb2RlcygpO1xuICAgICAgICAgICAgICAgIHcuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlQnlFbGVtKEJbMF0pLCB3LnNlbGVjdGlvbi5tb3ZlQ3Vyc29yKEJbMF0uZWxlbXNbMF0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHcuc2VsZWN0aW9uLmNyZWF0ZUVtcHR5UmFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHcuY21kLmRvKFwiYmFja0NvbG9yXCIsIHgpLCBBICYmICh3LnNlbGVjdGlvbi5jb2xsYXBzZVJhbmdlKCksIHcuc2VsZWN0aW9uLnJlc3RvcmVTZWxlY3Rpb24oKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBtLnByb3RvdHlwZS50cnlDaGFuZ2VBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgfSwgbTtcbiAgICAgIH0odi5kZWZhdWx0KTtcbiAgICAgIGkuZGVmYXVsdCA9IEQ7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCgyNikpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIHAgPSB0KDIpLCB2ID0gcC5fX2ltcG9ydERlZmF1bHQodCgyNCkpLCBiID0gcC5fX2ltcG9ydERlZmF1bHQodCgzKSksIFMgPSBmdW5jdGlvbihEKSB7XG4gICAgICAgIHAuX19leHRlbmRzKFQsIEQpO1xuICAgICAgICBmdW5jdGlvbiBUKG0pIHtcbiAgICAgICAgICB2YXIgeCwgUiA9IHRoaXMsIHcgPSBiLmRlZmF1bHQoYDxkaXYgY2xhc3M9XCJ3LWUtbWVudVwiIGRhdGEtdGl0bGU9XCJcXHU2NTg3XFx1NUI1N1xcdTk4OUNcXHU4MjcyXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ3LWUtaWNvbi1wZW5jaWwyXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+YCksIEEgPSB7XG4gICAgICAgICAgICB3aWR0aDogMTIwLFxuICAgICAgICAgICAgdGl0bGU6IFwiXFx1NjU4N1xcdTVCNTdcXHU5ODlDXFx1ODI3MlwiLFxuICAgICAgICAgICAgdHlwZTogXCJpbmxpbmUtYmxvY2tcIixcbiAgICAgICAgICAgIGxpc3Q6ICgwLCBjLmRlZmF1bHQpKHggPSBtLmNvbmZpZy5jb2xvcnMpLmNhbGwoeCwgZnVuY3Rpb24oRSkge1xuICAgICAgICAgICAgICByZXR1cm4geyAkZWxlbTogYi5kZWZhdWx0KCc8aSBzdHlsZT1cImNvbG9yOicgKyBFICsgJztcIiBjbGFzcz1cInctZS1pY29uLXBlbmNpbDJcIj48L2k+JyksIHZhbHVlOiBFIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNsaWNrSGFuZGxlcjogZnVuY3Rpb24oQykge1xuICAgICAgICAgICAgICBSLmNvbW1hbmQoQyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gUiA9IEQuY2FsbCh0aGlzLCB3LCBtLCBBKSB8fCB0aGlzLCBSO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBULnByb3RvdHlwZS5jb21tYW5kID0gZnVuY3Rpb24obSkge1xuICAgICAgICAgIHZhciB4LCBSID0gdGhpcy5lZGl0b3IsIHcgPSBSLnNlbGVjdGlvbi5pc1NlbGVjdGlvbkVtcHR5KCksIEEgPSAoeCA9IFIuc2VsZWN0aW9uLmdldFNlbGVjdGlvbkNvbnRhaW5lckVsZW0oKSkgPT09IG51bGwgfHwgeCA9PT0gdm9pZCAwID8gdm9pZCAwIDogeC5lbGVtc1swXTtcbiAgICAgICAgICBpZiAoQSAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgRSA9IFIuc2VsZWN0aW9uLmdldFNlbGVjdGlvblRleHQoKTtcbiAgICAgICAgICAgIGlmIChBLm5vZGVOYW1lID09PSBcIkFcIiAmJiBBLnRleHRDb250ZW50ID09PSBFKSB7XG4gICAgICAgICAgICAgIHZhciBDID0gYi5kZWZhdWx0KFwiPHNwYW4+JiM4MjAzOzwvc3Bhbj5cIikuZ2V0Tm9kZSgpO1xuICAgICAgICAgICAgICBBLmFwcGVuZENoaWxkKEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgUi5jbWQuZG8oXCJmb3JlQ29sb3JcIiwgbSksIHcgJiYgKFIuc2VsZWN0aW9uLmNvbGxhcHNlUmFuZ2UoKSwgUi5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIFQucHJvdG90eXBlLnRyeUNoYW5nZUFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB9LCBUO1xuICAgICAgfSh2LmRlZmF1bHQpO1xuICAgICAgaS5kZWZhdWx0ID0gUztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSB0KDIpLCBwID0gYy5fX2ltcG9ydERlZmF1bHQodCgzKSksIHYgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMyKSksIGIgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM3KSksIFMgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM0MCkpLCBEID0gYy5fX2ltcG9ydERlZmF1bHQodCgzNDYpKSwgVCA9IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgYy5fX2V4dGVuZHMoeCwgbSk7XG4gICAgICAgIGZ1bmN0aW9uIHgoUikge1xuICAgICAgICAgIHZhciB3ID0gdGhpcywgQSA9IHAuZGVmYXVsdChgPGRpdiBjbGFzcz1cInctZS1tZW51XCIgZGF0YS10aXRsZT1cIlxcdTg5QzZcXHU5ODkxXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ3LWUtaWNvbi1wbGF5XCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgICAgICAgcmV0dXJuIHcgPSBtLmNhbGwodGhpcywgQSwgUikgfHwgdGhpcywgRC5kZWZhdWx0KFIpLCB3O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4LnByb3RvdHlwZS5jbGlja0hhbmRsZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVBhbmVsKFwiXCIpO1xuICAgICAgICB9LCB4LnByb3RvdHlwZS5jcmVhdGVQYW5lbCA9IGZ1bmN0aW9uKFIpIHtcbiAgICAgICAgICB2YXIgdyA9IFMuZGVmYXVsdCh0aGlzLmVkaXRvciwgUiksIEEgPSBuZXcgdi5kZWZhdWx0KHRoaXMsIHcpO1xuICAgICAgICAgIEEuY3JlYXRlKCk7XG4gICAgICAgIH0sIHgucHJvdG90eXBlLnRyeUNoYW5nZUFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB9LCB4O1xuICAgICAgfShiLmRlZmF1bHQpO1xuICAgICAgaS5kZWZhdWx0ID0gVDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDE3KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgcCA9IHQoMiksIHYgPSB0KDYpLCBiID0gcC5fX2ltcG9ydERlZmF1bHQodCgzKSksIFMgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDM0MSkpLCBEID0gdCg3KTtcbiAgICAgIGZ1bmN0aW9uIFQobSwgeCkge1xuICAgICAgICB2YXIgUiA9IG0uY29uZmlnLCB3ID0gbmV3IFMuZGVmYXVsdChtKSwgQSA9IHYuZ2V0UmFuZG9tKFwiaW5wdXQtaWZyYW1lXCIpLCBFID0gdi5nZXRSYW5kb20oXCJidG4tb2tcIiksIEMgPSB2LmdldFJhbmRvbShcImlucHV0LXVwbG9hZFwiKSwgTSA9IHYuZ2V0UmFuZG9tKFwiYnRuLWxvY2FsLW9rXCIpO1xuICAgICAgICBmdW5jdGlvbiB5KGspIHtcbiAgICAgICAgICBtLmNtZC5kbyhcImluc2VydEhUTUxcIiwgayArIEQuRU1QVFlfUCksIG0uY29uZmlnLm9ubGluZVZpZGVvQ2FsbGJhY2soayk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gQihrKSB7XG4gICAgICAgICAgdmFyIGggPSBtLmNvbmZpZy5vbmxpbmVWaWRlb0NoZWNrKGspO1xuICAgICAgICAgIHJldHVybiBoID09PSAhMCA/ICEwIDogKHR5cGVvZiBoID09IFwic3RyaW5nXCIgJiYgbS5jb25maWcuY3VzdG9tQWxlcnQoaCwgXCJlcnJvclwiKSwgITEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkID0gW3tcbiAgICAgICAgICB0aXRsZTogbS5pMThuZXh0LnQoXCJtZW51cy5wYW5lbE1lbnVzLnZpZGVvLlxcdTRFMEFcXHU0RjIwXFx1ODlDNlxcdTk4OTFcIiksXG4gICAgICAgICAgdHBsOiBgPGRpdiBjbGFzcz1cInctZS11cC12aWRlby1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImAgKyBNICsgYFwiIGNsYXNzPVwidy1lLXVwLWJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ3LWUtaWNvbi11cGxvYWQyXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImAgKyBDICsgYFwiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwidmlkZW8vKlwiLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgIDwvZGl2PmAsXG4gICAgICAgICAgZXZlbnRzOiBbXG4gICAgICAgICAgICB7IHNlbGVjdG9yOiBcIiNcIiArIE0sIHR5cGU6IFwiY2xpY2tcIiwgZm46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIgaCA9IGIuZGVmYXVsdChcIiNcIiArIEMpLCBOID0gaC5lbGVtc1swXTtcbiAgICAgICAgICAgICAgaWYgKE4pXG4gICAgICAgICAgICAgICAgTi5jbGljaygpO1xuICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgfSB9LFxuICAgICAgICAgICAgeyBzZWxlY3RvcjogXCIjXCIgKyBDLCB0eXBlOiBcImNoYW5nZVwiLCBmbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciBoID0gYi5kZWZhdWx0KFwiI1wiICsgQyksIE4gPSBoLmVsZW1zWzBdO1xuICAgICAgICAgICAgICBpZiAoIU4pXG4gICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgICB2YXIgUCA9IE4uZmlsZXM7XG4gICAgICAgICAgICAgIHJldHVybiBQLmxlbmd0aCAmJiB3LnVwbG9hZFZpZGVvKFApLCAhMDtcbiAgICAgICAgICAgIH0gfVxuICAgICAgICAgIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgIHRpdGxlOiBtLmkxOG5leHQudChcIm1lbnVzLnBhbmVsTWVudXMudmlkZW8uXFx1NjNEMlxcdTUxNjVcXHU4OUM2XFx1OTg5MVwiKSxcbiAgICAgICAgICB0cGw6IGA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImAgKyBBICsgYFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmxvY2tcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiYCArIG0uaTE4bmV4dC50KFwiXFx1NTk4MlwiKSArIGBcXHVGRjFBPGlmcmFtZSBzcmM9Li4uID48L2lmcmFtZT5cIi8+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWUtYnV0dG9uLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJgICsgRSArIGBcIiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCArIG0uaTE4bmV4dC50KFwiXFx1NjNEMlxcdTUxNjVcIikgKyBgXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+YCxcbiAgICAgICAgICBldmVudHM6IFtcbiAgICAgICAgICAgIHsgc2VsZWN0b3I6IFwiI1wiICsgRSwgdHlwZTogXCJjbGlja1wiLCBmbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciBoLCBOID0gYi5kZWZhdWx0KFwiI1wiICsgQSksIFAgPSAoMCwgYy5kZWZhdWx0KShoID0gTi52YWwoKSkuY2FsbChoKTtcbiAgICAgICAgICAgICAgaWYgKCEhUCAmJiAhIUIoUCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHkoUCksICEwO1xuICAgICAgICAgICAgfSwgYmluZEVudGVyOiAhMCB9XG4gICAgICAgICAgXVxuICAgICAgICB9XSwgRiA9IHtcbiAgICAgICAgICB3aWR0aDogMzAwLFxuICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICB0YWJzOiBbXVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gd2luZG93LkZpbGVSZWFkZXIgJiYgKFIudXBsb2FkVmlkZW9TZXJ2ZXIgfHwgUi5jdXN0b21VcGxvYWRWaWRlbykgJiYgRi50YWJzLnB1c2goJFswXSksIFIuc2hvd0xpbmtWaWRlbyAmJiBGLnRhYnMucHVzaCgkWzFdKSwgRjtcbiAgICAgIH1cbiAgICAgIGkuZGVmYXVsdCA9IFQ7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCgxMzIpKSwgcCA9IHModCg1NykpLCB2ID0gcyh0KDQpKSwgYiA9IHModCgyNykpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIFMgPSB0KDIpLCBEID0gdCg2KSwgVCA9IFMuX19pbXBvcnREZWZhdWx0KHQoMTM1KSksIG0gPSBTLl9faW1wb3J0RGVmYXVsdCh0KDEzNikpLCB4ID0gdCg3KSwgUiA9IHQoNiksIHcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZnVuY3Rpb24gQShFKSB7XG4gICAgICAgICAgdGhpcy5lZGl0b3IgPSBFO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBBLnByb3RvdHlwZS51cGxvYWRWaWRlbyA9IGZ1bmN0aW9uKEUpIHtcbiAgICAgICAgICB2YXIgQyA9IHRoaXM7XG4gICAgICAgICAgaWYgKCEhRS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBNID0gdGhpcy5lZGl0b3IsIHkgPSBNLmNvbmZpZywgQiA9IFwidmFsaWRhdGUuXCIsICQgPSBmdW5jdGlvbih0ZSkge1xuICAgICAgICAgICAgICByZXR1cm4gTS5pMThuZXh0LnQoQiArIHRlKTtcbiAgICAgICAgICAgIH0sIEYgPSB5LnVwbG9hZFZpZGVvU2VydmVyLCBrID0geS51cGxvYWRWaWRlb01heFNpemUsIGggPSBrIC8gMTAyNCwgTiA9IHkudXBsb2FkVmlkZW9OYW1lLCBQID0geS51cGxvYWRWaWRlb1BhcmFtcywgaiA9IHkudXBsb2FkVmlkZW9QYXJhbXNXaXRoVXJsLCBJID0geS51cGxvYWRWaWRlb0hlYWRlcnMsIFYgPSB5LnVwbG9hZFZpZGVvSG9va3MsIFcgPSB5LnVwbG9hZFZpZGVvVGltZW91dCwgUSA9IHkud2l0aFZpZGVvQ3JlZGVudGlhbHMsIFggPSB5LmN1c3RvbVVwbG9hZFZpZGVvLCBKID0geS51cGxvYWRWaWRlb0FjY2VwdCwgWiA9IFtdLCBkZSA9IFtdO1xuICAgICAgICAgICAgaWYgKEQuYXJyRm9yRWFjaChFLCBmdW5jdGlvbihwZSkge1xuICAgICAgICAgICAgICB2YXIgdGUgPSBwZS5uYW1lLCBnZSA9IHBlLnNpemUgLyAxMDI0IC8gMTAyNDtcbiAgICAgICAgICAgICAgaWYgKCEoIXRlIHx8ICFnZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShKIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICBkZS5wdXNoKFwiXFx1MzAxMFwiICsgSiArIFwiXFx1MzAxMVwiICsgJChcInVwbG9hZFZpZGVvQWNjZXB0IFxcdTRFMERcXHU2NjJGQXJyYXlcIikpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoISgwLCBjLmRlZmF1bHQpKEopLmNhbGwoSiwgZnVuY3Rpb24oQWUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBBZSA9PT0gdGUuc3BsaXQoXCIuXCIpW3RlLnNwbGl0KFwiLlwiKS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgICAgZGUucHVzaChcIlxcdTMwMTBcIiArIHRlICsgXCJcXHUzMDExXCIgKyAkKFwiXFx1NEUwRFxcdTY2MkZcXHU4OUM2XFx1OTg5MVwiKSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChoIDwgZ2UpIHtcbiAgICAgICAgICAgICAgICAgIGRlLnB1c2goXCJcXHUzMDEwXCIgKyB0ZSArIFwiXFx1MzAxMVwiICsgJChcIlxcdTU5MjdcXHU0RThFXCIpICsgXCIgXCIgKyBoICsgXCJNXCIpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBaLnB1c2gocGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSwgZGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHkuY3VzdG9tQWxlcnQoJChcIlxcdTg5QzZcXHU5ODkxXFx1OUE4Q1xcdThCQzFcXHU2NzJBXFx1OTAxQVxcdThGQzdcIikgKyBgOiBcbmAgKyBkZS5qb2luKGBcbmApLCBcIndhcm5pbmdcIik7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChaLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICB5LmN1c3RvbUFsZXJ0KCQoXCJcXHU0RjIwXFx1NTE2NVxcdTc2ODRcXHU2NTg3XFx1NEVGNlxcdTRFMERcXHU1NDA4XFx1NkNENVwiKSwgXCJ3YXJuaW5nXCIpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoWCAmJiB0eXBlb2YgWCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgdmFyIHZlO1xuICAgICAgICAgICAgICBYKFosICgwLCBwLmRlZmF1bHQpKHZlID0gdGhpcy5pbnNlcnRWaWRlbykuY2FsbCh2ZSwgdGhpcykpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgc2UgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgIGlmICgoMCwgdi5kZWZhdWx0KShaKS5jYWxsKFosIGZ1bmN0aW9uKHBlLCB0ZSkge1xuICAgICAgICAgICAgICB2YXIgZ2UgPSBOIHx8IHBlLm5hbWU7XG4gICAgICAgICAgICAgIFoubGVuZ3RoID4gMSAmJiAoZ2UgPSBnZSArICh0ZSArIDEpKSwgc2UuYXBwZW5kKGdlLCBwZSk7XG4gICAgICAgICAgICB9KSwgRikge1xuICAgICAgICAgICAgICB2YXIgbWUgPSBGLnNwbGl0KFwiI1wiKTtcbiAgICAgICAgICAgICAgRiA9IG1lWzBdO1xuICAgICAgICAgICAgICB2YXIgbGUgPSBtZVsxXSB8fCBcIlwiO1xuICAgICAgICAgICAgICAoMCwgdi5kZWZhdWx0KShEKS5jYWxsKEQsIFAsIGZ1bmN0aW9uKHBlLCB0ZSkge1xuICAgICAgICAgICAgICAgIGogJiYgKCgwLCBiLmRlZmF1bHQpKEYpLmNhbGwoRiwgXCI/XCIpID4gMCA/IEYgKz0gXCImXCIgOiBGICs9IFwiP1wiLCBGID0gRiArIHBlICsgXCI9XCIgKyB0ZSksIHNlLmFwcGVuZChwZSwgdGUpO1xuICAgICAgICAgICAgICB9KSwgbGUgJiYgKEYgKz0gXCIjXCIgKyBsZSk7XG4gICAgICAgICAgICAgIHZhciBpZSA9IFQuZGVmYXVsdChGLCB7IHRpbWVvdXQ6IFcsIGZvcm1EYXRhOiBzZSwgaGVhZGVyczogSSwgd2l0aENyZWRlbnRpYWxzOiAhIVEsIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKHRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKFYuYmVmb3JlKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFYuYmVmb3JlKHRlLCBNLCBaKTtcbiAgICAgICAgICAgICAgfSwgb25UaW1lb3V0OiBmdW5jdGlvbih0ZSkge1xuICAgICAgICAgICAgICAgIHkuY3VzdG9tQWxlcnQoJChcIlxcdTRFMEFcXHU0RjIwXFx1ODlDNlxcdTk4OTFcXHU4RDg1XFx1NjVGNlwiKSwgXCJlcnJvclwiKSwgVi50aW1lb3V0ICYmIFYudGltZW91dCh0ZSwgTSk7XG4gICAgICAgICAgICAgIH0sIG9uUHJvZ3Jlc3M6IGZ1bmN0aW9uKHRlLCBnZSkge1xuICAgICAgICAgICAgICAgIHZhciBBZSA9IG5ldyBtLmRlZmF1bHQoTSk7XG4gICAgICAgICAgICAgICAgZ2UubGVuZ3RoQ29tcHV0YWJsZSAmJiAodGUgPSBnZS5sb2FkZWQgLyBnZS50b3RhbCwgQWUuc2hvdyh0ZSkpO1xuICAgICAgICAgICAgICB9LCBvbkVycm9yOiBmdW5jdGlvbih0ZSkge1xuICAgICAgICAgICAgICAgIHkuY3VzdG9tQWxlcnQoJChcIlxcdTRFMEFcXHU0RjIwXFx1ODlDNlxcdTk4OTFcXHU5NTE5XFx1OEJFRlwiKSwgXCJlcnJvclwiLCAkKFwiXFx1NEUwQVxcdTRGMjBcXHU4OUM2XFx1OTg5MVxcdTk1MTlcXHU4QkVGXCIpICsgXCJcXHVGRjBDXCIgKyAkKFwiXFx1NjcwRFxcdTUyQTFcXHU1NjY4XFx1OEZENFxcdTU2REVcXHU3MkI2XFx1NjAwMVwiKSArIFwiOiBcIiArIHRlLnN0YXR1cyksIFYuZXJyb3IgJiYgVi5lcnJvcih0ZSwgTSk7XG4gICAgICAgICAgICAgIH0sIG9uRmFpbDogZnVuY3Rpb24odGUsIGdlKSB7XG4gICAgICAgICAgICAgICAgeS5jdXN0b21BbGVydCgkKFwiXFx1NEUwQVxcdTRGMjBcXHU4OUM2XFx1OTg5MVxcdTU5MzFcXHU4RDI1XCIpLCBcImVycm9yXCIsICQoXCJcXHU0RTBBXFx1NEYyMFxcdTg5QzZcXHU5ODkxXFx1OEZENFxcdTU2REVcXHU3RUQzXFx1Njc5Q1xcdTk1MTlcXHU4QkVGXCIpICsgKFwiXFx1RkYwQ1wiICsgJChcIlxcdThGRDRcXHU1NkRFXFx1N0VEM1xcdTY3OUNcIikgKyBcIjogXCIpICsgZ2UpLCBWLmZhaWwgJiYgVi5mYWlsKHRlLCBNLCBnZSk7XG4gICAgICAgICAgICAgIH0sIG9uU3VjY2VzczogZnVuY3Rpb24odGUsIGdlKSB7XG4gICAgICAgICAgICAgICAgaWYgKFYuY3VzdG9tSW5zZXJ0KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgQWU7XG4gICAgICAgICAgICAgICAgICBWLmN1c3RvbUluc2VydCgoMCwgcC5kZWZhdWx0KShBZSA9IEMuaW5zZXJ0VmlkZW8pLmNhbGwoQWUsIEMpLCBnZSwgTSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChnZS5lcnJubyAhPSBcIjBcIikge1xuICAgICAgICAgICAgICAgICAgeS5jdXN0b21BbGVydCgkKFwiXFx1NEUwQVxcdTRGMjBcXHU4OUM2XFx1OTg5MVxcdTU5MzFcXHU4RDI1XCIpLCBcImVycm9yXCIsICQoXCJcXHU0RTBBXFx1NEYyMFxcdTg5QzZcXHU5ODkxXFx1OEZENFxcdTU2REVcXHU3RUQzXFx1Njc5Q1xcdTk1MTlcXHU4QkVGXCIpICsgXCJcXHVGRjBDXCIgKyAkKFwiXFx1OEZENFxcdTU2REVcXHU3RUQzXFx1Njc5Q1wiKSArIFwiIGVycm5vPVwiICsgZ2UuZXJybm8pLCBWLmZhaWwgJiYgVi5mYWlsKHRlLCBNLCBnZSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBNZSA9IGdlLmRhdGE7XG4gICAgICAgICAgICAgICAgQy5pbnNlcnRWaWRlbyhNZS51cmwpLCBWLnN1Y2Nlc3MgJiYgVi5zdWNjZXNzKHRlLCBNLCBnZSk7XG4gICAgICAgICAgICAgIH0gfSk7XG4gICAgICAgICAgICAgIHR5cGVvZiBpZSA9PSBcInN0cmluZ1wiICYmIHkuY3VzdG9tQWxlcnQoaWUsIFwiZXJyb3JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LCBBLnByb3RvdHlwZS5pbnNlcnRWaWRlbyA9IGZ1bmN0aW9uKEUpIHtcbiAgICAgICAgICB2YXIgQyA9IHRoaXMuZWRpdG9yLCBNID0gQy5jb25maWcsIHkgPSBcInZhbGlkYXRlLlwiLCBCID0gZnVuY3Rpb24oaywgaCkge1xuICAgICAgICAgICAgcmV0dXJuIGggPT09IHZvaWQgMCAmJiAoaCA9IHkpLCBDLmkxOG5leHQudChoICsgayk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoIU0uY3VzdG9tSW5zZXJ0VmlkZW8pXG4gICAgICAgICAgICBSLlVBLmlzRmlyZWZveCA/IEMuY21kLmRvKFwiaW5zZXJ0SFRNTFwiLCAnPHAgZGF0YS13ZS12aWRlby1wPVwidHJ1ZVwiPjx2aWRlbyBzcmM9XCInICsgRSArICdcIiBjb250cm9scz1cImNvbnRyb2xzXCIgc3R5bGU9XCJtYXgtd2lkdGg6MTAwJVwiPjwvdmlkZW8+PC9wPjxwPiYjODIwMzwvcD4nKSA6IEMuY21kLmRvKFwiaW5zZXJ0SFRNTFwiLCAnPHZpZGVvIHNyYz1cIicgKyBFICsgJ1wiIGNvbnRyb2xzPVwiY29udHJvbHNcIiBzdHlsZT1cIm1heC13aWR0aDoxMDAlXCI+PC92aWRlbz4nICsgeC5FTVBUWV9QKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIE0uY3VzdG9tSW5zZXJ0VmlkZW8oRSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciAkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInZpZGVvXCIpO1xuICAgICAgICAgICQub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkID0gbnVsbDtcbiAgICAgICAgICB9LCAkLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIE0uY3VzdG9tQWxlcnQoQihcIlxcdTYzRDJcXHU1MTY1XFx1ODlDNlxcdTk4OTFcXHU5NTE5XFx1OEJFRlwiKSwgXCJlcnJvclwiLCBcIndhbmdFZGl0b3I6IFwiICsgQihcIlxcdTYzRDJcXHU1MTY1XFx1ODlDNlxcdTk4OTFcXHU5NTE5XFx1OEJFRlwiKSArIFwiXFx1RkYwQ1wiICsgQihcIlxcdTg5QzZcXHU5ODkxXFx1OTRGRVxcdTYzQTVcIikgKyAnIFwiJyArIEUgKyAnXCJcXHVGRjBDJyArIEIoXCJcXHU0RTBCXFx1OEY3RFxcdTk0RkVcXHU2M0E1XFx1NTkzMVxcdThEMjVcIikpLCAkID0gbnVsbDtcbiAgICAgICAgICB9LCAkLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAkID0gbnVsbDtcbiAgICAgICAgICB9LCAkLnNyYyA9IEU7XG4gICAgICAgIH0sIEE7XG4gICAgICB9KCk7XG4gICAgICBpLmRlZmF1bHQgPSB3O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIG8uZXhwb3J0cyA9IHQoMzQzKTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMzQ0KTtcbiAgICAgIG8uZXhwb3J0cyA9IHM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdCgzNDUpO1xuICAgICAgdmFyIHMgPSB0KDkpO1xuICAgICAgby5leHBvcnRzID0gcy5EYXRlLm5vdztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNSk7XG4gICAgICBzKHsgdGFyZ2V0OiBcIkRhdGVcIiwgc3RhdDogITAgfSwgeyBub3c6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICB9IH0pO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM0NykpLCB2ID0gYy5fX2ltcG9ydERlZmF1bHQodCgzNDkpKTtcbiAgICAgIGZ1bmN0aW9uIGIoUykge1xuICAgICAgICBwLmRlZmF1bHQoUyksIHYuZGVmYXVsdChTKTtcbiAgICAgIH1cbiAgICAgIGkuZGVmYXVsdCA9IGI7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KSwgaS5jcmVhdGVTaG93SGlkZUZuID0gdm9pZCAwO1xuICAgICAgdmFyIGMgPSB0KDIpLCBwID0gYy5fX2ltcG9ydERlZmF1bHQodCgzKSksIHYgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM4KSksIGIgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM0OCkpO1xuICAgICAgZnVuY3Rpb24gUyhUKSB7XG4gICAgICAgIHZhciBtLCB4ID0gZnVuY3Rpb24oRSwgQykge1xuICAgICAgICAgIHJldHVybiBDID09PSB2b2lkIDAgJiYgKEMgPSBcIlwiKSwgVC5pMThuZXh0LnQoQyArIEUpO1xuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiBSKEEpIHtcbiAgICAgICAgICB2YXIgRSA9IFt7ICRlbGVtOiBwLmRlZmF1bHQoXCI8c3BhbiBjbGFzcz0ndy1lLWljb24tdHJhc2gtbyc+PC9zcGFuPlwiKSwgb25DbGljazogZnVuY3Rpb24oTSwgeSkge1xuICAgICAgICAgICAgcmV0dXJuIHkucmVtb3ZlKCksICEwO1xuICAgICAgICAgIH0gfSwgeyAkZWxlbTogcC5kZWZhdWx0KFwiPHNwYW4+MTAwJTwvc3Bhbj5cIiksIG9uQ2xpY2s6IGZ1bmN0aW9uKE0sIHkpIHtcbiAgICAgICAgICAgIHJldHVybiB5LmF0dHIoXCJ3aWR0aFwiLCBcIjEwMCVcIiksIHkucmVtb3ZlQXR0cihcImhlaWdodFwiKSwgITA7XG4gICAgICAgICAgfSB9LCB7ICRlbGVtOiBwLmRlZmF1bHQoXCI8c3Bhbj41MCU8L3NwYW4+XCIpLCBvbkNsaWNrOiBmdW5jdGlvbihNLCB5KSB7XG4gICAgICAgICAgICByZXR1cm4geS5hdHRyKFwid2lkdGhcIiwgXCI1MCVcIiksIHkucmVtb3ZlQXR0cihcImhlaWdodFwiKSwgITA7XG4gICAgICAgICAgfSB9LCB7ICRlbGVtOiBwLmRlZmF1bHQoXCI8c3Bhbj4zMCU8L3NwYW4+XCIpLCBvbkNsaWNrOiBmdW5jdGlvbihNLCB5KSB7XG4gICAgICAgICAgICByZXR1cm4geS5hdHRyKFwid2lkdGhcIiwgXCIzMCVcIiksIHkucmVtb3ZlQXR0cihcImhlaWdodFwiKSwgITA7XG4gICAgICAgICAgfSB9LCB7ICRlbGVtOiBwLmRlZmF1bHQoXCI8c3Bhbj5cIiArIHgoXCJcXHU5MUNEXFx1N0Y2RVwiKSArIFwiPC9zcGFuPlwiKSwgb25DbGljazogZnVuY3Rpb24oTSwgeSkge1xuICAgICAgICAgICAgcmV0dXJuIHkucmVtb3ZlQXR0cihcIndpZHRoXCIpLCB5LnJlbW92ZUF0dHIoXCJoZWlnaHRcIiksICEwO1xuICAgICAgICAgIH0gfSwgeyAkZWxlbTogcC5kZWZhdWx0KFwiPHNwYW4+XCIgKyB4KFwibWVudXMuanVzdGlmeS5cXHU5NzYwXFx1NURFNlwiKSArIFwiPC9zcGFuPlwiKSwgb25DbGljazogZnVuY3Rpb24oTSwgeSkge1xuICAgICAgICAgICAgcmV0dXJuIGIuZGVmYXVsdCh5LCBcImxlZnRcIiksICEwO1xuICAgICAgICAgIH0gfSwgeyAkZWxlbTogcC5kZWZhdWx0KFwiPHNwYW4+XCIgKyB4KFwibWVudXMuanVzdGlmeS5cXHU1QzQ1XFx1NEUyRFwiKSArIFwiPC9zcGFuPlwiKSwgb25DbGljazogZnVuY3Rpb24oTSwgeSkge1xuICAgICAgICAgICAgcmV0dXJuIGIuZGVmYXVsdCh5LCBcImNlbnRlclwiKSwgITA7XG4gICAgICAgICAgfSB9LCB7ICRlbGVtOiBwLmRlZmF1bHQoXCI8c3Bhbj5cIiArIHgoXCJtZW51cy5qdXN0aWZ5LlxcdTk3NjBcXHU1M0YzXCIpICsgXCI8L3NwYW4+XCIpLCBvbkNsaWNrOiBmdW5jdGlvbihNLCB5KSB7XG4gICAgICAgICAgICByZXR1cm4gYi5kZWZhdWx0KHksIFwicmlnaHRcIiksICEwO1xuICAgICAgICAgIH0gfV07XG4gICAgICAgICAgbSA9IG5ldyB2LmRlZmF1bHQoVCwgQSwgRSksIG0uY3JlYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdygpIHtcbiAgICAgICAgICBtICYmIChtLnJlbW92ZSgpLCBtID0gbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc2hvd1ZpZGVvVG9vbHRpcDogUiwgaGlkZVZpZGVvVG9vbHRpcDogdyB9O1xuICAgICAgfVxuICAgICAgaS5jcmVhdGVTaG93SGlkZUZuID0gUztcbiAgICAgIGZ1bmN0aW9uIEQoVCkge1xuICAgICAgICB2YXIgbSA9IFMoVCksIHggPSBtLnNob3dWaWRlb1Rvb2x0aXAsIFIgPSBtLmhpZGVWaWRlb1Rvb2x0aXA7XG4gICAgICAgIFQudHh0LmV2ZW50SG9va3MudmlkZW9DbGlja0V2ZW50cy5wdXNoKHgpLCBULnR4dC5ldmVudEhvb2tzLmNsaWNrRXZlbnRzLnB1c2goUiksIFQudHh0LmV2ZW50SG9va3Mua2V5dXBFdmVudHMucHVzaChSKSwgVC50eHQuZXZlbnRIb29rcy50b29sYmFyQ2xpY2tFdmVudHMucHVzaChSKSwgVC50eHQuZXZlbnRIb29rcy5tZW51Q2xpY2tFdmVudHMucHVzaChSKSwgVC50eHQuZXZlbnRIb29rcy50ZXh0U2Nyb2xsRXZlbnRzLnB1c2goUiksIFQudHh0LmV2ZW50SG9va3MuY2hhbmdlRXZlbnRzLnB1c2goUik7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSBEO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoNDQpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBwID0gdCgyKSwgdiA9IHAuX19pbXBvcnREZWZhdWx0KHQoMykpO1xuICAgICAgZnVuY3Rpb24gYihELCBUKSB7XG4gICAgICAgIHZhciBtID0gW1wiUFwiXSwgeCA9IFMoRCwgbSk7XG4gICAgICAgIHggJiYgdi5kZWZhdWx0KHgpLmNzcyhcInRleHQtYWxpZ25cIiwgVCk7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSBiO1xuICAgICAgZnVuY3Rpb24gUyhELCBUKSB7XG4gICAgICAgIGZvciAodmFyIG0sIHggPSBELmVsZW1zWzBdOyB4ICE9IG51bGw7ICkge1xuICAgICAgICAgIGlmICgoMCwgYy5kZWZhdWx0KShUKS5jYWxsKFQsIHggPT0gbnVsbCA/IHZvaWQgMCA6IHgubm9kZU5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgaWYgKCgobSA9IHggPT0gbnVsbCA/IHZvaWQgMCA6IHgucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbS5ub2RlTmFtZSkgPT09IFwiQk9EWVwiKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgeCA9IHgucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSB0KDYpO1xuICAgICAgZnVuY3Rpb24gcCh2KSB7XG4gICAgICAgIGlmICghIWMuVUEuaXNGaXJlZm94KSB7XG4gICAgICAgICAgdmFyIGIgPSB2LnR4dCwgUyA9IHYuc2VsZWN0aW9uLCBEID0gYi5ldmVudEhvb2tzLmtleWRvd25FdmVudHM7XG4gICAgICAgICAgRC5wdXNoKGZ1bmN0aW9uKFQpIHtcbiAgICAgICAgICAgIHZhciBtID0gUy5nZXRTZWxlY3Rpb25Db250YWluZXJFbGVtKCk7XG4gICAgICAgICAgICBpZiAobSkge1xuICAgICAgICAgICAgICB2YXIgeCA9IG0uZ2V0Tm9kZVRvcCh2KSwgUiA9IHgubGVuZ3RoICYmIHgucHJldigpLmxlbmd0aCA/IHgucHJldigpIDogbnVsbDtcbiAgICAgICAgICAgICAgUiAmJiBSLmF0dHIoXCJkYXRhLXdlLXZpZGVvLXBcIikgJiYgUy5nZXRDdXJzb3JQb3MoKSA9PT0gMCAmJiBULmtleUNvZGUgPT09IDggJiYgUi5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gcDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDI2KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgcCA9IHQoMiksIHYgPSB0KDcpLCBiID0gcC5fX2ltcG9ydERlZmF1bHQodCgzKSksIFMgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMyKSksIEQgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDM3KSksIFQgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDM1MSkpLCBtID0gcC5fX2ltcG9ydERlZmF1bHQodCgzNjQpKSwgeCA9IGZ1bmN0aW9uKFIpIHtcbiAgICAgICAgcC5fX2V4dGVuZHModywgUik7XG4gICAgICAgIGZ1bmN0aW9uIHcoQSkge1xuICAgICAgICAgIHZhciBFID0gdGhpcywgQyA9IGIuZGVmYXVsdCgnPGRpdiBjbGFzcz1cInctZS1tZW51XCIgZGF0YS10aXRsZT1cIlxcdTU2RkVcXHU3MjQ3XCI+PGkgY2xhc3M9XCJ3LWUtaWNvbi1pbWFnZVwiPjwvaT48L2Rpdj4nKSwgTSA9IG0uZGVmYXVsdChBKTtcbiAgICAgICAgICBpZiAoTS5vbmx5VXBsb2FkQ29uZikge1xuICAgICAgICAgICAgdmFyIHk7XG4gICAgICAgICAgICBDID0gTS5vbmx5VXBsb2FkQ29uZi4kZWxlbSwgKDAsIGMuZGVmYXVsdCkoeSA9IE0ub25seVVwbG9hZENvbmYuZXZlbnRzKS5jYWxsKHksIGZ1bmN0aW9uKEIpIHtcbiAgICAgICAgICAgICAgdmFyICQgPSBCLnR5cGUsIEYgPSBCLmZuIHx8IHYuRU1QVFlfRk47XG4gICAgICAgICAgICAgIEMub24oJCwgZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgICAgIGsuc3RvcFByb3BhZ2F0aW9uKCksIEYoayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBFID0gUi5jYWxsKHRoaXMsIEMsIEEpIHx8IHRoaXMsIEUuaW1nUGFuZWxDb25maWcgPSBNLCBULmRlZmF1bHQoQSksIEU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHcucHJvdG90eXBlLmNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRoaXMuaW1nUGFuZWxDb25maWcub25seVVwbG9hZENvbmYgfHwgdGhpcy5jcmVhdGVQYW5lbCgpO1xuICAgICAgICB9LCB3LnByb3RvdHlwZS5jcmVhdGVQYW5lbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBBID0gdGhpcy5pbWdQYW5lbENvbmZpZywgRSA9IG5ldyBTLmRlZmF1bHQodGhpcywgQSk7XG4gICAgICAgICAgdGhpcy5zZXRQYW5lbChFKSwgRS5jcmVhdGUoKTtcbiAgICAgICAgfSwgdy5wcm90b3R5cGUudHJ5Q2hhbmdlQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIH0sIHc7XG4gICAgICB9KEQuZGVmYXVsdCk7XG4gICAgICBpLmRlZmF1bHQgPSB4O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM1MikpLCB2ID0gYy5fX2ltcG9ydERlZmF1bHQodCgzNTMpKSwgYiA9IGMuX19pbXBvcnREZWZhdWx0KHQoMzU0KSksIFMgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM2MikpLCBEID0gYy5fX2ltcG9ydERlZmF1bHQodCgzNjMpKTtcbiAgICAgIGZ1bmN0aW9uIFQobSkge1xuICAgICAgICBwLmRlZmF1bHQobSksIHYuZGVmYXVsdChtKSwgYi5kZWZhdWx0KG0pLCBTLmRlZmF1bHQobSksIEQuZGVmYXVsdChtKTtcbiAgICAgIH1cbiAgICAgIGkuZGVmYXVsdCA9IFQ7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBjID0gdCgyKSwgcCA9IHQoMTMwKSwgdiA9IGMuX19pbXBvcnREZWZhdWx0KHQoOTYpKTtcbiAgICAgIGZ1bmN0aW9uIGIobSwgeCkge1xuICAgICAgICB2YXIgUiA9IG0uY29uZmlnLCB3ID0gUi5wYXN0ZUZpbHRlclN0eWxlLCBBID0gUi5wYXN0ZUlnbm9yZUltZywgRSA9IHAuZ2V0UGFzdGVIdG1sKHgsIHcsIEEpO1xuICAgICAgICBpZiAoRSlcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIHZhciBDID0gcC5nZXRQYXN0ZVRleHQoeCk7XG4gICAgICAgIHJldHVybiAhIUM7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBTKG0sIHgpIHtcbiAgICAgICAgZm9yICh2YXIgUiwgdyA9ICgoUiA9IHguY2xpcGJvYXJkRGF0YSkgPT09IG51bGwgfHwgUiA9PT0gdm9pZCAwID8gdm9pZCAwIDogUi50eXBlcykgfHwgW10sIEEgPSAwOyBBIDwgdy5sZW5ndGg7IEErKykge1xuICAgICAgICAgIHZhciBFID0gd1tBXTtcbiAgICAgICAgICBpZiAoRSA9PT0gXCJGaWxlc1wiKVxuICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEQobSwgeCkge1xuICAgICAgICBpZiAoISghUyh4LCBtKSAmJiBiKHgsIG0pKSkge1xuICAgICAgICAgIHZhciBSID0gcC5nZXRQYXN0ZUltZ3MobSk7XG4gICAgICAgICAgaWYgKCEhUi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciB3ID0gbmV3IHYuZGVmYXVsdCh4KTtcbiAgICAgICAgICAgIHcudXBsb2FkSW1nKFIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gVChtKSB7XG4gICAgICAgIG0udHh0LmV2ZW50SG9va3MucGFzdGVFdmVudHMudW5zaGlmdChmdW5jdGlvbih4KSB7XG4gICAgICAgICAgRCh4LCBtKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSBUO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDk2KSk7XG4gICAgICBmdW5jdGlvbiB2KGIpIHtcbiAgICAgICAgZnVuY3Rpb24gUyhEKSB7XG4gICAgICAgICAgdmFyIFQgPSBELmRhdGFUcmFuc2ZlciAmJiBELmRhdGFUcmFuc2Zlci5maWxlcztcbiAgICAgICAgICBpZiAoISghVCB8fCAhVC5sZW5ndGgpKSB7XG4gICAgICAgICAgICB2YXIgbSA9IG5ldyBwLmRlZmF1bHQoYik7XG4gICAgICAgICAgICBtLnVwbG9hZEltZyhUKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYi50eHQuZXZlbnRIb29rcy5kcm9wRXZlbnRzLnB1c2goUyk7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSB2O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoMzEpKSwgcCA9IHModCgzNTUpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KSwgaS5jcmVhdGVTaG93SGlkZUZuID0gdm9pZCAwO1xuICAgICAgdmFyIHYgPSB0KDIpLCBiID0gdi5fX2ltcG9ydERlZmF1bHQodCgzKSk7XG4gICAgICB0KDM2MCk7XG4gICAgICB2YXIgUyA9IHQoNik7XG4gICAgICBmdW5jdGlvbiBEKHcsIEEsIEUsIEMsIE0pIHtcbiAgICAgICAgdy5hdHRyKFwic3R5bGVcIiwgXCJ3aWR0aDpcIiArIEEgKyBcInB4OyBoZWlnaHQ6XCIgKyBFICsgXCJweDsgbGVmdDpcIiArIEMgKyBcInB4OyB0b3A6XCIgKyBNICsgXCJweDtcIik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBUKHcsIEEpIHtcbiAgICAgICAgdmFyIEUgPSBiLmRlZmF1bHQoYDxkaXYgY2xhc3M9XCJ3LWUtaW1nLWRyYWctbWFza1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZS1pbWctZHJhZy1zaG93LXNpemVcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWUtaW1nLWRyYWctcmJcIj48L2Rpdj5cbiAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICByZXR1cm4gRS5oaWRlKCksIEEuYXBwZW5kKEUpLCBFO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbSh3LCBBLCBFKSB7XG4gICAgICAgIHZhciBDID0gdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgTSA9IEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIHkgPSBNLndpZHRoLnRvRml4ZWQoMiksIEIgPSBNLmhlaWdodC50b0ZpeGVkKDIpO1xuICAgICAgICAoMCwgYy5kZWZhdWx0KShBKS5jYWxsKEEsIFwiLnctZS1pbWctZHJhZy1zaG93LXNpemVcIikudGV4dCh5ICsgXCJweCAqIFwiICsgQiArIFwicHhcIiksIEQoQSwgKDAsIHAuZGVmYXVsdCkoeSksICgwLCBwLmRlZmF1bHQpKEIpLCBNLmxlZnQgLSBDLmxlZnQsIE0udG9wIC0gQy50b3ApLCBBLnNob3coKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHgodykge1xuICAgICAgICB2YXIgQSA9IHcuJHRleHRDb250YWluZXJFbGVtLCBFLCBDID0gVCh3LCBBKTtcbiAgICAgICAgZnVuY3Rpb24gTSgkLCBGKSB7XG4gICAgICAgICAgJC5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGsuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfSksICQub24oXCJtb3VzZWRvd25cIiwgXCIudy1lLWltZy1kcmFnLXJiXCIsIGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChrLnByZXZlbnREZWZhdWx0KCksICFFKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgaCA9IGsuY2xpZW50WCwgTiA9IGsuY2xpZW50WSwgUCA9IEYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGogPSBFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBJID0gai53aWR0aCwgViA9IGouaGVpZ2h0LCBXID0gai5sZWZ0IC0gUC5sZWZ0LCBRID0gai50b3AgLSBQLnRvcCwgWCA9IEkgLyBWLCBKID0gSSwgWiA9IFYsIGRlID0gYi5kZWZhdWx0KGRvY3VtZW50KTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHZlKCkge1xuICAgICAgICAgICAgICBkZS5vZmYoXCJtb3VzZW1vdmVcIiwgc2UpLCBkZS5vZmYoXCJtb3VzZXVwXCIsIG1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNlKGxlKSB7XG4gICAgICAgICAgICAgIGxlLnN0b3BQcm9wYWdhdGlvbigpLCBsZS5wcmV2ZW50RGVmYXVsdCgpLCBKID0gSSArIChsZS5jbGllbnRYIC0gaCksIFogPSBWICsgKGxlLmNsaWVudFkgLSBOKSwgSiAvIFogIT0gWCAmJiAoWiA9IEogLyBYKSwgSiA9ICgwLCBwLmRlZmF1bHQpKEoudG9GaXhlZCgyKSksIFogPSAoMCwgcC5kZWZhdWx0KShaLnRvRml4ZWQoMikpLCAoMCwgYy5kZWZhdWx0KSgkKS5jYWxsKCQsIFwiLnctZS1pbWctZHJhZy1zaG93LXNpemVcIikudGV4dChKLnRvRml4ZWQoMikucmVwbGFjZShcIi4wMFwiLCBcIlwiKSArIFwicHggKiBcIiArIFoudG9GaXhlZCgyKS5yZXBsYWNlKFwiLjAwXCIsIFwiXCIpICsgXCJweFwiKSwgRCgkLCBKLCBaLCBXLCBRKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlLm9uKFwibW91c2Vtb3ZlXCIsIHNlKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIG1lKCkge1xuICAgICAgICAgICAgICBFLmF0dHIoXCJ3aWR0aFwiLCBKICsgXCJcIiksIEUuYXR0cihcImhlaWdodFwiLCBaICsgXCJcIik7XG4gICAgICAgICAgICAgIHZhciBsZSA9IEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgIEQoJCwgSiwgWiwgbGUubGVmdCAtIFAubGVmdCwgbGUudG9wIC0gUC50b3ApLCB2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGUub24oXCJtb3VzZXVwXCIsIG1lKSwgZGUub24oXCJtb3VzZWxlYXZlXCIsIHZlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB5KCQpIHtcbiAgICAgICAgICBpZiAoUy5VQS5pc0lFKCkpXG4gICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgJCAmJiAoRSA9ICQsIG0oQSwgQywgRSkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIEIoKSB7XG4gICAgICAgICAgKDAsIGMuZGVmYXVsdCkoQSkuY2FsbChBLCBcIi53LWUtaW1nLWRyYWctbWFza1wiKS5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE0oQywgQSksIGIuZGVmYXVsdChkb2N1bWVudCkub24oXCJjbGlja1wiLCBCKSwgdy5iZWZvcmVEZXN0cm95KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGIuZGVmYXVsdChkb2N1bWVudCkub2ZmKFwiY2xpY2tcIiwgQik7XG4gICAgICAgIH0pLCB7IHNob3dEcmFnOiB5LCBoaWRlRHJhZzogQiB9O1xuICAgICAgfVxuICAgICAgaS5jcmVhdGVTaG93SGlkZUZuID0geDtcbiAgICAgIGZ1bmN0aW9uIFIodykge1xuICAgICAgICB2YXIgQSA9IHgodyksIEUgPSBBLnNob3dEcmFnLCBDID0gQS5oaWRlRHJhZztcbiAgICAgICAgdy50eHQuZXZlbnRIb29rcy5pbWdDbGlja0V2ZW50cy5wdXNoKEUpLCB3LnR4dC5ldmVudEhvb2tzLnRleHRTY3JvbGxFdmVudHMucHVzaChDKSwgdy50eHQuZXZlbnRIb29rcy5rZXl1cEV2ZW50cy5wdXNoKEMpLCB3LnR4dC5ldmVudEhvb2tzLnRvb2xiYXJDbGlja0V2ZW50cy5wdXNoKEMpLCB3LnR4dC5ldmVudEhvb2tzLm1lbnVDbGlja0V2ZW50cy5wdXNoKEMpLCB3LnR4dC5ldmVudEhvb2tzLmNoYW5nZUV2ZW50cy5wdXNoKEMpO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gUjtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICBvLmV4cG9ydHMgPSB0KDM1Nik7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDM1Nyk7XG4gICAgICBvLmV4cG9ydHMgPSBzO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHQoMzU4KTtcbiAgICAgIHZhciBzID0gdCg5KTtcbiAgICAgIG8uZXhwb3J0cyA9IHMucGFyc2VGbG9hdDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNSksIGQgPSB0KDM1OSk7XG4gICAgICBzKHsgZ2xvYmFsOiAhMCwgZm9yY2VkOiBwYXJzZUZsb2F0ICE9IGQgfSwgeyBwYXJzZUZsb2F0OiBkIH0pO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCg4KSwgZCA9IHQoOTApLnRyaW0sIGMgPSB0KDY4KSwgcCA9IHMucGFyc2VGbG9hdCwgdiA9IDEgLyBwKGMgKyBcIi0wXCIpICE9PSAtMSAvIDA7XG4gICAgICBvLmV4cG9ydHMgPSB2ID8gZnVuY3Rpb24oUykge1xuICAgICAgICB2YXIgRCA9IGQoU3RyaW5nKFMpKSwgVCA9IHAoRCk7XG4gICAgICAgIHJldHVybiBUID09PSAwICYmIEQuY2hhckF0KDApID09IFwiLVwiID8gLTAgOiBUO1xuICAgICAgfSA6IHA7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDIwKSwgZCA9IHQoMzYxKTtcbiAgICAgIGQgPSBkLl9fZXNNb2R1bGUgPyBkLmRlZmF1bHQgOiBkLCB0eXBlb2YgZCA9PSBcInN0cmluZ1wiICYmIChkID0gW1tvLmksIGQsIFwiXCJdXSk7XG4gICAgICB2YXIgYyA9IHt9O1xuICAgICAgYy5pbnNlcnQgPSBcImhlYWRcIiwgYy5zaW5nbGV0b24gPSAhMSwgcyhkLCBjKSwgby5leHBvcnRzID0gZC5sb2NhbHMgfHwge307XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDIxKTtcbiAgICAgIGkgPSBzKCExKSwgaS5wdXNoKFtvLmksIGAudy1lLXRleHQtY29udGFpbmVyIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi53LWUtaW1nLWRyYWctbWFzayB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTtcbiAgYm9yZGVyOiAxcHggZGFzaGVkICNjY2M7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4udy1lLWltZy1kcmFnLW1hc2sgLnctZS1pbWctZHJhZy1yYiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IC01cHg7XG4gIGJvdHRvbTogLTVweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kOiAjY2NjO1xuICBjdXJzb3I6IHNlLXJlc2l6ZTtcbn1cbi53LWUtaW1nLWRyYWctbWFzayAudy1lLWltZy1kcmFnLXNob3ctc2l6ZSB7XG4gIG1pbi13aWR0aDogMTEwcHg7XG4gIGhlaWdodDogMjJweDtcbiAgbGluZS1oZWlnaHQ6IDIycHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICM5OTk7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTk5O1xuICBjb2xvcjogI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBwYWRkaW5nOiAwIDVweDtcbn1cbmAsIFwiXCJdKSwgby5leHBvcnRzID0gaTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pLCBpLmNyZWF0ZVNob3dIaWRlRm4gPSB2b2lkIDA7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgdiA9IGMuX19pbXBvcnREZWZhdWx0KHQoMzgpKTtcbiAgICAgIGZ1bmN0aW9uIGIoRCkge1xuICAgICAgICB2YXIgVCwgbSA9IGZ1bmN0aW9uKEEsIEUpIHtcbiAgICAgICAgICByZXR1cm4gRSA9PT0gdm9pZCAwICYmIChFID0gXCJcIiksIEQuaTE4bmV4dC50KEUgKyBBKTtcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24geCh3KSB7XG4gICAgICAgICAgdmFyIEEgPSBbeyAkZWxlbTogcC5kZWZhdWx0KFwiPHNwYW4gY2xhc3M9J3ctZS1pY29uLXRyYXNoLW8nPjwvc3Bhbj5cIiksIG9uQ2xpY2s6IGZ1bmN0aW9uKEMsIE0pIHtcbiAgICAgICAgICAgIHJldHVybiBDLnNlbGVjdGlvbi5jcmVhdGVSYW5nZUJ5RWxlbShNKSwgQy5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpLCBDLmNtZC5kbyhcImRlbGV0ZVwiKSwgITA7XG4gICAgICAgICAgfSB9LCB7ICRlbGVtOiBwLmRlZmF1bHQoXCI8c3Bhbj4zMCU8L3NwYW4+XCIpLCBvbkNsaWNrOiBmdW5jdGlvbihDLCBNKSB7XG4gICAgICAgICAgICByZXR1cm4gTS5hdHRyKFwid2lkdGhcIiwgXCIzMCVcIiksIE0ucmVtb3ZlQXR0cihcImhlaWdodFwiKSwgITA7XG4gICAgICAgICAgfSB9LCB7ICRlbGVtOiBwLmRlZmF1bHQoXCI8c3Bhbj41MCU8L3NwYW4+XCIpLCBvbkNsaWNrOiBmdW5jdGlvbihDLCBNKSB7XG4gICAgICAgICAgICByZXR1cm4gTS5hdHRyKFwid2lkdGhcIiwgXCI1MCVcIiksIE0ucmVtb3ZlQXR0cihcImhlaWdodFwiKSwgITA7XG4gICAgICAgICAgfSB9LCB7ICRlbGVtOiBwLmRlZmF1bHQoXCI8c3Bhbj4xMDAlPC9zcGFuPlwiKSwgb25DbGljazogZnVuY3Rpb24oQywgTSkge1xuICAgICAgICAgICAgcmV0dXJuIE0uYXR0cihcIndpZHRoXCIsIFwiMTAwJVwiKSwgTS5yZW1vdmVBdHRyKFwiaGVpZ2h0XCIpLCAhMDtcbiAgICAgICAgICB9IH1dO1xuICAgICAgICAgIEEucHVzaCh7ICRlbGVtOiBwLmRlZmF1bHQoXCI8c3Bhbj5cIiArIG0oXCJcXHU5MUNEXFx1N0Y2RVwiKSArIFwiPC9zcGFuPlwiKSwgb25DbGljazogZnVuY3Rpb24oQywgTSkge1xuICAgICAgICAgICAgcmV0dXJuIE0ucmVtb3ZlQXR0cihcIndpZHRoXCIpLCBNLnJlbW92ZUF0dHIoXCJoZWlnaHRcIiksICEwO1xuICAgICAgICAgIH0gfSksIHcuYXR0cihcImRhdGEtaHJlZlwiKSAmJiBBLnB1c2goeyAkZWxlbTogcC5kZWZhdWx0KFwiPHNwYW4+XCIgKyBtKFwiXFx1NjdFNVxcdTc3MEJcXHU5NEZFXFx1NjNBNVwiKSArIFwiPC9zcGFuPlwiKSwgb25DbGljazogZnVuY3Rpb24oQywgTSkge1xuICAgICAgICAgICAgdmFyIHkgPSBNLmF0dHIoXCJkYXRhLWhyZWZcIik7XG4gICAgICAgICAgICByZXR1cm4geSAmJiAoeSA9IGRlY29kZVVSSUNvbXBvbmVudCh5KSwgd2luZG93Lm9wZW4oeSwgXCJfdGFyZ2V0XCIpKSwgITA7XG4gICAgICAgICAgfSB9KSwgVCA9IG5ldyB2LmRlZmF1bHQoRCwgdywgQSksIFQuY3JlYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gUigpIHtcbiAgICAgICAgICBUICYmIChULnJlbW92ZSgpLCBUID0gbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc2hvd0ltZ1Rvb2x0aXA6IHgsIGhpZGVJbWdUb29sdGlwOiBSIH07XG4gICAgICB9XG4gICAgICBpLmNyZWF0ZVNob3dIaWRlRm4gPSBiO1xuICAgICAgZnVuY3Rpb24gUyhEKSB7XG4gICAgICAgIHZhciBUID0gYihEKSwgbSA9IFQuc2hvd0ltZ1Rvb2x0aXAsIHggPSBULmhpZGVJbWdUb29sdGlwO1xuICAgICAgICBELnR4dC5ldmVudEhvb2tzLmltZ0NsaWNrRXZlbnRzLnB1c2gobSksIEQudHh0LmV2ZW50SG9va3MuY2xpY2tFdmVudHMucHVzaCh4KSwgRC50eHQuZXZlbnRIb29rcy5rZXl1cEV2ZW50cy5wdXNoKHgpLCBELnR4dC5ldmVudEhvb2tzLnRvb2xiYXJDbGlja0V2ZW50cy5wdXNoKHgpLCBELnR4dC5ldmVudEhvb2tzLm1lbnVDbGlja0V2ZW50cy5wdXNoKHgpLCBELnR4dC5ldmVudEhvb2tzLnRleHRTY3JvbGxFdmVudHMucHVzaCh4KSwgRC50eHQuZXZlbnRIb29rcy5pbWdEcmFnQmFyTW91c2VEb3duRXZlbnRzLnB1c2goeCksIEQudHh0LmV2ZW50SG9va3MuY2hhbmdlRXZlbnRzLnB1c2goeCk7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSBTO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICBmdW5jdGlvbiBjKHApIHtcbiAgICAgICAgdmFyIHYgPSBwLnR4dCwgYiA9IHAuc2VsZWN0aW9uLCBTID0gdi5ldmVudEhvb2tzLmtleWRvd25FdmVudHM7XG4gICAgICAgIFMucHVzaChmdW5jdGlvbihEKSB7XG4gICAgICAgICAgdmFyIFQgPSBiLmdldFNlbGVjdGlvbkNvbnRhaW5lckVsZW0oKSwgbSA9IGIuZ2V0UmFuZ2UoKTtcbiAgICAgICAgICBpZiAoISghbSB8fCAhVCB8fCBELmtleUNvZGUgIT09IDggfHwgIWIuaXNTZWxlY3Rpb25FbXB0eSgpKSkge1xuICAgICAgICAgICAgdmFyIHggPSBtLnN0YXJ0Q29udGFpbmVyLCBSID0gbS5zdGFydE9mZnNldCwgdyA9IG51bGw7XG4gICAgICAgICAgICBpZiAoUiA9PT0gMClcbiAgICAgICAgICAgICAgZm9yICg7IHggIT09IFQuZWxlbXNbMF0gJiYgVC5lbGVtc1swXS5jb250YWlucyh4KSAmJiB4LnBhcmVudE5vZGUgJiYgIXc7ICkge1xuICAgICAgICAgICAgICAgIGlmICh4LnByZXZpb3VzU2libGluZykge1xuICAgICAgICAgICAgICAgICAgdyA9IHgucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHggPSB4LnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgeC5ub2RlVHlwZSAhPT0gMyAmJiAodyA9IHguY2hpbGROb2Rlc1tSIC0gMV0pO1xuICAgICAgICAgICAgaWYgKCEhdykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBBID0gdzsgQS5jaGlsZE5vZGVzLmxlbmd0aDsgKVxuICAgICAgICAgICAgICAgIEEgPSBBLmNoaWxkTm9kZXNbQS5jaGlsZE5vZGVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICBBIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgQS50YWdOYW1lID09PSBcIklNR1wiICYmIChBLnJlbW92ZSgpLCBELnByZXZlbnREZWZhdWx0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSBjO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoMjYpKSwgcCA9IHModCgxNykpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIHYgPSB0KDIpLCBiID0gdi5fX2ltcG9ydERlZmF1bHQodCgzKSksIFMgPSB0KDYpLCBEID0gdi5fX2ltcG9ydERlZmF1bHQodCg5NikpO1xuICAgICAgZnVuY3Rpb24gVChtKSB7XG4gICAgICAgIHZhciB4LCBSID0gbS5jb25maWcsIHcgPSBuZXcgRC5kZWZhdWx0KG0pLCBBID0gUy5nZXRSYW5kb20oXCJ1cC10cmlnZ2VyLWlkXCIpLCBFID0gUy5nZXRSYW5kb20oXCJ1cC1maWxlLWlkXCIpLCBDID0gUy5nZXRSYW5kb20oXCJpbnB1dC1saW5rLXVybFwiKSwgTSA9IFMuZ2V0UmFuZG9tKFwiaW5wdXQtbGluay11cmwtYWx0XCIpLCB5ID0gUy5nZXRSYW5kb20oXCJpbnB1dC1saW5rLXVybC1ocmVmXCIpLCBCID0gUy5nZXRSYW5kb20oXCJidG4tbGlua1wiKSwgJCA9IFwibWVudXMucGFuZWxNZW51cy5pbWFnZS5cIiwgRiA9IGZ1bmN0aW9uKFgsIEopIHtcbiAgICAgICAgICByZXR1cm4gSiA9PT0gdm9pZCAwICYmIChKID0gJCksIG0uaTE4bmV4dC50KEogKyBYKTtcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gayhRLCBYLCBKKSB7XG4gICAgICAgICAgdmFyIFogPSBSLmxpbmtJbWdDaGVjayhRKTtcbiAgICAgICAgICByZXR1cm4gWiA9PT0gITAgPyAhMCA6ICh0eXBlb2YgWiA9PSBcInN0cmluZ1wiICYmIFIuY3VzdG9tQWxlcnQoWiwgXCJlcnJvclwiKSwgITEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBoID0gUi51cGxvYWRJbWdNYXhMZW5ndGggPT09IDEgPyBcIlwiIDogJ211bHRpcGxlPVwibXVsdGlwbGVcIicsIE4gPSAoMCwgYy5kZWZhdWx0KSh4ID0gUi51cGxvYWRJbWdBY2NlcHQpLmNhbGwoeCwgZnVuY3Rpb24oUSkge1xuICAgICAgICAgIHJldHVybiBcImltYWdlL1wiICsgUTtcbiAgICAgICAgfSkuam9pbihcIixcIiksIFAgPSBmdW5jdGlvbihYLCBKLCBaKSB7XG4gICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPVwiJyArIFggKyAnXCIgZGF0YS10aXRsZT1cIicgKyBaICsgYFwiPlxuICAgICAgICAgICAgPGRpdiBpZD1cImAgKyBBICsgYFwiIGNsYXNzPVwidy1lLXVwLWJ0blwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYCArIEogKyBgXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpub25lO1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImAgKyBFICsgJ1wiIHR5cGU9XCJmaWxlXCIgJyArIGggKyAnIGFjY2VwdD1cIicgKyBOICsgYFwiLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9LCBqID0gW1xuICAgICAgICAgIHsgc2VsZWN0b3I6IFwiI1wiICsgQSwgdHlwZTogXCJjbGlja1wiLCBmbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgWCA9IFIudXBsb2FkSW1nRnJvbU1lZGlhO1xuICAgICAgICAgICAgaWYgKFggJiYgdHlwZW9mIFggPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICByZXR1cm4gWCgpLCAhMDtcbiAgICAgICAgICAgIHZhciBKID0gYi5kZWZhdWx0KFwiI1wiICsgRSksIFogPSBKLmVsZW1zWzBdO1xuICAgICAgICAgICAgaWYgKFopXG4gICAgICAgICAgICAgIFouY2xpY2soKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgIH0gfSxcbiAgICAgICAgICB7IHNlbGVjdG9yOiBcIiNcIiArIEUsIHR5cGU6IFwiY2hhbmdlXCIsIGZuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBYID0gYi5kZWZhdWx0KFwiI1wiICsgRSksIEogPSBYLmVsZW1zWzBdO1xuICAgICAgICAgICAgaWYgKCFKKVxuICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICB2YXIgWiA9IEouZmlsZXM7XG4gICAgICAgICAgICByZXR1cm4gWiAhPSBudWxsICYmIFoubGVuZ3RoICYmIHcudXBsb2FkSW1nKFopLCBKICYmIChKLnZhbHVlID0gXCJcIiksICEwO1xuICAgICAgICAgIH0gfVxuICAgICAgICBdLCBJID0gW2A8aW5wdXRcbiAgICAgICAgICAgIGlkPVwiYCArIEMgKyBgXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmxvY2tcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJgICsgRihcIlxcdTU2RkVcXHU3MjQ3XFx1NTczMFxcdTU3NDBcIikgKyAnXCIvPiddO1xuICAgICAgICBSLnNob3dMaW5rSW1nQWx0ICYmIEkucHVzaChgXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJgICsgTSArIGBcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJibG9ja1wiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImAgKyBGKFwiXFx1NTZGRVxcdTcyNDdcXHU2NTg3XFx1NUI1N1xcdThCRjRcXHU2NjBFXCIpICsgJ1wiLz4nKSwgUi5zaG93TGlua0ltZ0hyZWYgJiYgSS5wdXNoKGBcbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cImAgKyB5ICsgYFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImJsb2NrXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiYCArIEYoXCJcXHU4REYzXFx1OEY2Q1xcdTk0RkVcXHU2M0E1XCIpICsgJ1wiLz4nKTtcbiAgICAgICAgdmFyIFYgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6IEYoXCJcXHU0RTBBXFx1NEYyMFxcdTU2RkVcXHU3MjQ3XCIpLFxuICAgICAgICAgICAgdHBsOiBQKFwidy1lLXVwLWltZy1jb250YWluZXJcIiwgXCJ3LWUtaWNvbi11cGxvYWQyXCIsIFwiXCIpLFxuICAgICAgICAgICAgZXZlbnRzOiBqXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IHRpdGxlOiBGKFwiXFx1N0Y1MVxcdTdFRENcXHU1NkZFXFx1NzI0N1wiKSwgdHBsOiBgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgYCArIEkuam9pbihcIlwiKSArIGBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZS1idXR0b24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImAgKyBCICsgJ1wiIGNsYXNzPVwicmlnaHRcIj4nICsgRihcIlxcdTYzRDJcXHU1MTY1XCIsIFwiXCIpICsgYDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gLCBldmVudHM6IFt7IHNlbGVjdG9yOiBcIiNcIiArIEIsIHR5cGU6IFwiY2xpY2tcIiwgZm46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIFgsIEogPSBiLmRlZmF1bHQoXCIjXCIgKyBDKSwgWiA9ICgwLCBwLmRlZmF1bHQpKFggPSBKLnZhbCgpKS5jYWxsKFgpO1xuICAgICAgICAgICAgaWYgKCEhWikge1xuICAgICAgICAgICAgICB2YXIgZGU7XG4gICAgICAgICAgICAgIGlmIChSLnNob3dMaW5rSW1nQWx0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHZlO1xuICAgICAgICAgICAgICAgIGRlID0gKDAsIHAuZGVmYXVsdCkodmUgPSBiLmRlZmF1bHQoXCIjXCIgKyBNKS52YWwoKSkuY2FsbCh2ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIHNlO1xuICAgICAgICAgICAgICBpZiAoUi5zaG93TGlua0ltZ0hyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWU7XG4gICAgICAgICAgICAgICAgc2UgPSAoMCwgcC5kZWZhdWx0KShtZSA9IGIuZGVmYXVsdChcIiNcIiArIHkpLnZhbCgpKS5jYWxsKG1lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoISFrKFopKVxuICAgICAgICAgICAgICAgIHJldHVybiB3Lmluc2VydEltZyhaLCBkZSwgc2UpLCAhMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBiaW5kRW50ZXI6ICEwIH1dIH1cbiAgICAgICAgXSwgVyA9IHsgd2lkdGg6IDMwMCwgaGVpZ2h0OiAwLCB0YWJzOiBbXSwgb25seVVwbG9hZENvbmY6IHsgJGVsZW06IGIuZGVmYXVsdChQKFwidy1lLW1lbnVcIiwgXCJ3LWUtaWNvbi1pbWFnZVwiLCBcIlxcdTU2RkVcXHU3MjQ3XCIpKSwgZXZlbnRzOiBqIH0gfTtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5GaWxlUmVhZGVyICYmIChSLnVwbG9hZEltZ1Nob3dCYXNlNjQgfHwgUi51cGxvYWRJbWdTZXJ2ZXIgfHwgUi5jdXN0b21VcGxvYWRJbWcgfHwgUi51cGxvYWRJbWdGcm9tTWVkaWEpICYmIFcudGFicy5wdXNoKFZbMF0pLCBSLnNob3dMaW5rSW1nICYmIChXLnRhYnMucHVzaChWWzFdKSwgVy5vbmx5VXBsb2FkQ29uZiA9IHZvaWQgMCksIFc7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSBUO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoNCkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIHAgPSB0KDIpLCB2ID0gcC5fX2ltcG9ydERlZmF1bHQodCgzKSksIGIgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDI0KSksIFMgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDM2NikpLCBEID0gZnVuY3Rpb24oVCkge1xuICAgICAgICBwLl9fZXh0ZW5kcyhtLCBUKTtcbiAgICAgICAgZnVuY3Rpb24gbSh4KSB7XG4gICAgICAgICAgdmFyIFIgPSB0aGlzLCB3ID0gdi5kZWZhdWx0KGA8ZGl2IGNsYXNzPVwidy1lLW1lbnVcIiBkYXRhLXRpdGxlPVwiXFx1N0YyOVxcdThGREJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInctZS1pY29uLWluZGVudC1pbmNyZWFzZVwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PmApLCBBID0geyB3aWR0aDogMTMwLCB0aXRsZTogXCJcXHU4QkJFXFx1N0Y2RVxcdTdGMjlcXHU4RkRCXCIsIHR5cGU6IFwibGlzdFwiLCBsaXN0OiBbeyAkZWxlbTogdi5kZWZhdWx0KGA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInctZS1pY29uLWluZGVudC1pbmNyZWFzZSB3LWUtZHJvcC1saXN0LWl0ZW1cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCArIHguaTE4bmV4dC50KFwibWVudXMuZHJvcExpc3RNZW51LmluZGVudC5cXHU1ODlFXFx1NTJBMFxcdTdGMjlcXHU4RkRCXCIpICsgYFxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+YCksIHZhbHVlOiBcImluY3JlYXNlXCIgfSwgeyAkZWxlbTogdi5kZWZhdWx0KGA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInctZS1pY29uLWluZGVudC1kZWNyZWFzZSB3LWUtZHJvcC1saXN0LWl0ZW1cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCArIHguaTE4bmV4dC50KFwibWVudXMuZHJvcExpc3RNZW51LmluZGVudC5cXHU1MUNGXFx1NUMxMVxcdTdGMjlcXHU4RkRCXCIpICsgYFxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+YCksIHZhbHVlOiBcImRlY3JlYXNlXCIgfV0sIGNsaWNrSGFuZGxlcjogZnVuY3Rpb24oQykge1xuICAgICAgICAgICAgUi5jb21tYW5kKEMpO1xuICAgICAgICAgIH0gfTtcbiAgICAgICAgICByZXR1cm4gUiA9IFQuY2FsbCh0aGlzLCB3LCB4LCBBKSB8fCB0aGlzLCBSO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLnByb3RvdHlwZS5jb21tYW5kID0gZnVuY3Rpb24oeCkge1xuICAgICAgICAgIHZhciBSID0gdGhpcy5lZGl0b3IsIHcgPSBSLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25Db250YWluZXJFbGVtKCk7XG4gICAgICAgICAgaWYgKHcgJiYgUi4kdGV4dEVsZW0uZXF1YWwodykpIHtcbiAgICAgICAgICAgIHZhciBBID0gUi5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uUmFuZ2VUb3BOb2RlcygpO1xuICAgICAgICAgICAgQS5sZW5ndGggPiAwICYmICgwLCBjLmRlZmF1bHQpKEEpLmNhbGwoQSwgZnVuY3Rpb24oRSkge1xuICAgICAgICAgICAgICBTLmRlZmF1bHQodi5kZWZhdWx0KEUpLCB4LCBSKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgdyAmJiB3Lmxlbmd0aCA+IDAgJiYgKDAsIGMuZGVmYXVsdCkodykuY2FsbCh3LCBmdW5jdGlvbihFKSB7XG4gICAgICAgICAgICAgIFMuZGVmYXVsdCh2LmRlZmF1bHQoRSksIHgsIFIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgUi5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpLCB0aGlzLnRyeUNoYW5nZUFjdGl2ZSgpO1xuICAgICAgICB9LCBtLnByb3RvdHlwZS50cnlDaGFuZ2VBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgeCA9IHRoaXMuZWRpdG9yLCBSID0geC5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uU3RhcnRFbGVtKCksIHcgPSB2LmRlZmF1bHQoUikuZ2V0Tm9kZVRvcCh4KTtcbiAgICAgICAgICB3Lmxlbmd0aCA8PSAwIHx8ICh3LmVsZW1zWzBdLnN0eWxlLnBhZGRpbmdMZWZ0ICE9IFwiXCIgPyB0aGlzLmFjdGl2ZSgpIDogdGhpcy51bkFjdGl2ZSgpKTtcbiAgICAgICAgfSwgbTtcbiAgICAgIH0oYi5kZWZhdWx0KTtcbiAgICAgIGkuZGVmYXVsdCA9IEQ7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCg0NSkpLCBwID0gcyh0KDE3KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgdiA9IHQoMiksIGIgPSB2Ll9faW1wb3J0RGVmYXVsdCh0KDM2NykpLCBTID0gdi5fX2ltcG9ydERlZmF1bHQodCgzNjgpKSwgRCA9IC9eKFxcZCspKFxcdyspJC8sIFQgPSAvXihcXGQrKSUkLztcbiAgICAgIGZ1bmN0aW9uIG0oUikge1xuICAgICAgICB2YXIgdyA9IFIuY29uZmlnLmluZGVudGF0aW9uO1xuICAgICAgICBpZiAodHlwZW9mIHcgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGlmIChELnRlc3QodykpIHtcbiAgICAgICAgICAgIHZhciBBLCBFID0gKDAsIGMuZGVmYXVsdCkoQSA9ICgwLCBwLmRlZmF1bHQpKHcpLmNhbGwodykubWF0Y2goRCkpLmNhbGwoQSwgMSwgMyksIEMgPSBFWzBdLCBNID0gRVsxXTtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBOdW1iZXIoQyksIHVuaXQ6IE0gfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFQudGVzdCh3KSlcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBOdW1iZXIoKDAsIHAuZGVmYXVsdCkodykuY2FsbCh3KS5tYXRjaChUKVsxXSksIHVuaXQ6IFwiJVwiIH07XG4gICAgICAgIH0gZWxzZSBpZiAody52YWx1ZSAhPT0gdm9pZCAwICYmIHcudW5pdClcbiAgICAgICAgICByZXR1cm4gdztcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IDIsIHVuaXQ6IFwiZW1cIiB9O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24geChSLCB3LCBBKSB7XG4gICAgICAgIHZhciBFID0gUi5nZXROb2RlVG9wKEEpLCBDID0gL14oUHxIWzAtOV0qKSQvO1xuICAgICAgICBDLnRlc3QoRS5nZXROb2RlTmFtZSgpKSAmJiAodyA9PT0gXCJpbmNyZWFzZVwiID8gYi5kZWZhdWx0KEUsIG0oQSkpIDogdyA9PT0gXCJkZWNyZWFzZVwiICYmIFMuZGVmYXVsdChFLCBtKEEpKSk7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSB4O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoNDUpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIGZ1bmN0aW9uIHAodiwgYikge1xuICAgICAgICB2YXIgUyA9IHYuZWxlbXNbMF07XG4gICAgICAgIGlmIChTLnN0eWxlLnBhZGRpbmdMZWZ0ID09PSBcIlwiKVxuICAgICAgICAgIHYuY3NzKFwicGFkZGluZy1sZWZ0XCIsIGIudmFsdWUgKyBiLnVuaXQpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgRCA9IFMuc3R5bGUucGFkZGluZ0xlZnQsIFQgPSAoMCwgYy5kZWZhdWx0KShEKS5jYWxsKEQsIDAsIEQubGVuZ3RoIC0gYi51bml0Lmxlbmd0aCksIG0gPSBOdW1iZXIoVCkgKyBiLnZhbHVlO1xuICAgICAgICAgIHYuY3NzKFwicGFkZGluZy1sZWZ0XCIsIFwiXCIgKyBtICsgYi51bml0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gcDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDQ1KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICBmdW5jdGlvbiBwKHYsIGIpIHtcbiAgICAgICAgdmFyIFMgPSB2LmVsZW1zWzBdO1xuICAgICAgICBpZiAoUy5zdHlsZS5wYWRkaW5nTGVmdCAhPT0gXCJcIikge1xuICAgICAgICAgIHZhciBEID0gUy5zdHlsZS5wYWRkaW5nTGVmdCwgVCA9ICgwLCBjLmRlZmF1bHQpKEQpLmNhbGwoRCwgMCwgRC5sZW5ndGggLSBiLnVuaXQubGVuZ3RoKSwgbSA9IE51bWJlcihUKSAtIGIudmFsdWU7XG4gICAgICAgICAgbSA+IDAgPyB2LmNzcyhcInBhZGRpbmctbGVmdFwiLCBcIlwiICsgbSArIGIudW5pdCkgOiB2LmNzcyhcInBhZGRpbmctbGVmdFwiLCBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gcDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSB0KDIpLCBwID0gYy5fX2ltcG9ydERlZmF1bHQodCgzKSksIHYgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM3KSksIGIgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMyKSksIFMgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM3MCkpLCBEID0gZnVuY3Rpb24oVCkge1xuICAgICAgICBjLl9fZXh0ZW5kcyhtLCBUKTtcbiAgICAgICAgZnVuY3Rpb24gbSh4KSB7XG4gICAgICAgICAgdmFyIFIgPSB0aGlzLCB3ID0gcC5kZWZhdWx0KGA8ZGl2IGNsYXNzPVwidy1lLW1lbnVcIiBkYXRhLXRpdGxlPVwiXFx1ODg2OFxcdTYwQzVcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInctZS1pY29uLWhhcHB5XCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgICAgICAgcmV0dXJuIFIgPSBULmNhbGwodGhpcywgdywgeCkgfHwgdGhpcywgUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5wcm90b3R5cGUuY3JlYXRlUGFuZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgeCA9IFMuZGVmYXVsdCh0aGlzLmVkaXRvciksIFIgPSBuZXcgYi5kZWZhdWx0KHRoaXMsIHgpO1xuICAgICAgICAgIFIuY3JlYXRlKCk7XG4gICAgICAgIH0sIG0ucHJvdG90eXBlLmNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRoaXMuY3JlYXRlUGFuZWwoKTtcbiAgICAgICAgfSwgbS5wcm90b3R5cGUudHJ5Q2hhbmdlQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIH0sIG07XG4gICAgICB9KHYuZGVmYXVsdCk7XG4gICAgICBpLmRlZmF1bHQgPSBEO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoMjYpKSwgcCA9IHModCg3MCkpLCB2ID0gcyh0KDE3KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYiA9IHQoMiksIFMgPSBiLl9faW1wb3J0RGVmYXVsdCh0KDMpKTtcbiAgICAgIGZ1bmN0aW9uIEQoVCkge1xuICAgICAgICB2YXIgbSA9IFQuY29uZmlnLmVtb3Rpb25zO1xuICAgICAgICBmdW5jdGlvbiB4KEEpIHtcbiAgICAgICAgICB2YXIgRSA9IFtdO1xuICAgICAgICAgIGlmIChBLnR5cGUgPT0gXCJpbWFnZVwiKSB7XG4gICAgICAgICAgICB2YXIgQztcbiAgICAgICAgICAgIEUgPSAoMCwgYy5kZWZhdWx0KShDID0gQS5jb250ZW50KS5jYWxsKEMsIGZ1bmN0aW9uKHkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB5ID09IFwic3RyaW5nXCIgPyBcIlwiIDogJzxzcGFuICB0aXRsZT1cIicgKyB5LmFsdCArIGBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImVsZUltZ1wiIGRhdGEtZW1vamk9XCJgICsgeS5hbHQgKyAnXCIgc3R5bGUgc3JjPVwiJyArIHkuc3JjICsgJ1wiIGFsdD1cIlsnICsgeS5hbHQgKyBgXVwiPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5gO1xuICAgICAgICAgICAgfSksIEUgPSAoMCwgcC5kZWZhdWx0KShFKS5jYWxsKEUsIGZ1bmN0aW9uKHkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHkgIT09IFwiXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIE07XG4gICAgICAgICAgICBFID0gKDAsIGMuZGVmYXVsdCkoTSA9IEEuY29udGVudCkuY2FsbChNLCBmdW5jdGlvbih5KSB7XG4gICAgICAgICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJlbGVJbWdcIiB0aXRsZT1cIicgKyB5ICsgJ1wiPicgKyB5ICsgXCI8L3NwYW4+XCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIEUuam9pbihcIlwiKS5yZXBsYWNlKC8mbmJzcDsvZywgXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIFIgPSAoMCwgYy5kZWZhdWx0KShtKS5jYWxsKG0sIGZ1bmN0aW9uKEEpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGl0bGU6IFQuaTE4bmV4dC50KFwibWVudXMucGFuZWxNZW51cy5lbW90aWNvbi5cIiArIEEudGl0bGUpLFxuICAgICAgICAgICAgdHBsOiBcIjxkaXY+XCIgKyB4KEEpICsgXCI8L2Rpdj5cIixcbiAgICAgICAgICAgIGV2ZW50czogW3sgc2VsZWN0b3I6IFwiLmVsZUltZ1wiLCB0eXBlOiBcImNsaWNrXCIsIGZuOiBmdW5jdGlvbihDKSB7XG4gICAgICAgICAgICAgIHZhciBNID0gUy5kZWZhdWx0KEMudGFyZ2V0KSwgeSA9IE0uZ2V0Tm9kZU5hbWUoKSwgQjtcbiAgICAgICAgICAgICAgaWYgKHkgPT09IFwiSU1HXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgJDtcbiAgICAgICAgICAgICAgICBCID0gKDAsIHYuZGVmYXVsdCkoJCA9IE0ucGFyZW50KCkuaHRtbCgpKS5jYWxsKCQpO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBCID0gXCI8c3Bhbj5cIiArIE0uaHRtbCgpICsgXCI8L3NwYW4+XCI7XG4gICAgICAgICAgICAgIHJldHVybiBULmNtZC5kbyhcImluc2VydEhUTUxcIiwgQiksICEwO1xuICAgICAgICAgICAgfSB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH0pLCB3ID0geyB3aWR0aDogMzAwLCBoZWlnaHQ6IDIzMCwgdGFiczogUiB9O1xuICAgICAgICByZXR1cm4gdztcbiAgICAgIH1cbiAgICAgIGkuZGVmYXVsdCA9IEQ7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KSwgaS5jcmVhdGVMaXN0SGFuZGxlID0gaS5DbGFzc1R5cGUgPSB2b2lkIDA7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgdiA9IGMuX19pbXBvcnREZWZhdWx0KHQoMzcyKSksIGIgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM3NCkpLCBTID0gYy5fX2ltcG9ydERlZmF1bHQodCgzNzUpKSwgRCA9IGMuX19pbXBvcnREZWZhdWx0KHQoMzc2KSksIFQgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM3NykpLCBtO1xuICAgICAgKGZ1bmN0aW9uKEEpIHtcbiAgICAgICAgQS5XcmFwID0gXCJXcmFwTGlzdEhhbmRsZVwiLCBBLkpvaW4gPSBcIkpvaW5MaXN0SGFuZGxlXCIsIEEuU3RhcnRKb2luID0gXCJTdGFydEpvaW5MaXN0SGFuZGxlXCIsIEEuRW5kSm9pbiA9IFwiRW5kSm9pbkxpc3RIYW5kbGVcIiwgQS5PdGhlciA9IFwiT3RoZXJMaXN0SGFuZGxlXCI7XG4gICAgICB9KShtID0gaS5DbGFzc1R5cGUgfHwgKGkuQ2xhc3NUeXBlID0ge30pKTtcbiAgICAgIHZhciB4ID0geyBXcmFwTGlzdEhhbmRsZTogdi5kZWZhdWx0LCBKb2luTGlzdEhhbmRsZTogYi5kZWZhdWx0LCBTdGFydEpvaW5MaXN0SGFuZGxlOiBTLmRlZmF1bHQsIEVuZEpvaW5MaXN0SGFuZGxlOiBELmRlZmF1bHQsIE90aGVyTGlzdEhhbmRsZTogVC5kZWZhdWx0IH07XG4gICAgICBmdW5jdGlvbiBSKEEsIEUsIEMpIHtcbiAgICAgICAgaWYgKEEgPT09IG0uT3RoZXIgJiYgQyA9PT0gdm9pZCAwKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm90aGVyIFxcdTdDN0JcXHU5NzAwXFx1ODk4MVxcdTRGMjBcXHU1MTY1IHJhbmdlXCIpO1xuICAgICAgICByZXR1cm4gQSAhPT0gbS5PdGhlciA/IG5ldyB4W0FdKEUpIDogbmV3IHhbQV0oRSwgQyk7XG4gICAgICB9XG4gICAgICBpLmNyZWF0ZUxpc3RIYW5kbGUgPSBSO1xuICAgICAgdmFyIHcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZnVuY3Rpb24gQShFKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGUgPSBFLCB0aGlzLmhhbmRsZS5leGVjKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEEucHJvdG90eXBlLmdldFNlbGVjdGlvblJhbmdlRWxlbSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBwLmRlZmF1bHQodGhpcy5oYW5kbGUuc2VsZWN0aW9uUmFuZ2VFbGVtLmdldCgpKTtcbiAgICAgICAgfSwgQTtcbiAgICAgIH0oKTtcbiAgICAgIGkuZGVmYXVsdCA9IHc7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCg0KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgcCA9IHQoMiksIHYgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgYiA9IHQoNTgpLCBTID0gdCg0NyksIEQgPSBmdW5jdGlvbihUKSB7XG4gICAgICAgIHAuX19leHRlbmRzKG0sIFQpO1xuICAgICAgICBmdW5jdGlvbiBtKHgpIHtcbiAgICAgICAgICByZXR1cm4gVC5jYWxsKHRoaXMsIHgpIHx8IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0ucHJvdG90eXBlLmV4ZWMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgeCA9IHRoaXMub3B0aW9ucywgUiA9IHgubGlzdFR5cGUsIHcgPSB4Lmxpc3RUYXJnZXQsIEEgPSB4LiRzZWxlY3Rpb25FbGVtLCBFID0geC4kc3RhcnRFbGVtLCBDID0geC4kZW5kRWxlbSwgTSwgeSA9IFtdLCBCID0gQSA9PSBudWxsID8gdm9pZCAwIDogQS5nZXROb2RlTmFtZSgpLCAkID0gRS5wcmlvciwgRiA9IEMucHJpb3I7XG4gICAgICAgICAgaWYgKCFFLnByaW9yICYmICFDLnByaW9yIHx8ICEoJCAhPSBudWxsICYmICQucHJldigpLmxlbmd0aCkgJiYgIShGICE9IG51bGwgJiYgRi5uZXh0KCkubGVuZ3RoKSkge1xuICAgICAgICAgICAgdmFyIGs7XG4gICAgICAgICAgICAoMCwgYy5kZWZhdWx0KShrID0gQSA9PSBudWxsID8gdm9pZCAwIDogQS5jaGlsZHJlbigpKS5jYWxsKGssIGZ1bmN0aW9uKFcpIHtcbiAgICAgICAgICAgICAgeS5wdXNoKHYuZGVmYXVsdChXKSk7XG4gICAgICAgICAgICB9KSwgQiA9PT0gUiA/IE0gPSBTLmNyZWF0ZUVsZW1lbnRGcmFnbWVudChcbiAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgUy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG4gICAgICAgICAgICAgIFwicFwiXG4gICAgICAgICAgICApIDogKE0gPSBTLmNyZWF0ZUVsZW1lbnQodyksICgwLCBjLmRlZmF1bHQpKHkpLmNhbGwoeSwgZnVuY3Rpb24oVykge1xuICAgICAgICAgICAgICBNLmFwcGVuZENoaWxkKFcuZWxlbXNbMF0pO1xuICAgICAgICAgICAgfSkpLCB0aGlzLnNlbGVjdGlvblJhbmdlRWxlbS5zZXQoTSksIFMuaW5zZXJ0QmVmb3JlKEEsIE0sIEEuZWxlbXNbMF0pLCBBLnJlbW92ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKHZhciBoID0gJDsgaC5sZW5ndGg7IClcbiAgICAgICAgICAgICAgeS5wdXNoKGgpLCBGICE9IG51bGwgJiYgRi5lcXVhbChoKSA/IGggPSB2LmRlZmF1bHQodm9pZCAwKSA6IGggPSBoLm5leHQoKTtcbiAgICAgICAgICAgIHZhciBOID0gJC5wcmV2KCksIFAgPSBGLm5leHQoKTtcbiAgICAgICAgICAgIGlmIChCID09PSBSID8gTSA9IFMuY3JlYXRlRWxlbWVudEZyYWdtZW50KFxuICAgICAgICAgICAgICB5LFxuICAgICAgICAgICAgICBTLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcbiAgICAgICAgICAgICAgXCJwXCJcbiAgICAgICAgICAgICkgOiAoTSA9IFMuY3JlYXRlRWxlbWVudCh3KSwgKDAsIGMuZGVmYXVsdCkoeSkuY2FsbCh5LCBmdW5jdGlvbihXKSB7XG4gICAgICAgICAgICAgIE0uYXBwZW5kKFcuZWxlbXNbMF0pO1xuICAgICAgICAgICAgfSkpLCBOLmxlbmd0aCAmJiBQLmxlbmd0aCkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gW107IFAubGVuZ3RoOyApXG4gICAgICAgICAgICAgICAgai5wdXNoKFApLCBQID0gUC5uZXh0KCk7XG4gICAgICAgICAgICAgIHZhciBJID0gUy5jcmVhdGVFbGVtZW50KEIpO1xuICAgICAgICAgICAgICAoMCwgYy5kZWZhdWx0KShqKS5jYWxsKGosIGZ1bmN0aW9uKFcpIHtcbiAgICAgICAgICAgICAgICBJLmFwcGVuZChXLmVsZW1zWzBdKTtcbiAgICAgICAgICAgICAgfSksIHYuZGVmYXVsdChJKS5pbnNlcnRBZnRlcihBKSwgdGhpcy5zZWxlY3Rpb25SYW5nZUVsZW0uc2V0KE0pO1xuICAgICAgICAgICAgICB2YXIgViA9IEEubmV4dCgpO1xuICAgICAgICAgICAgICBWLmxlbmd0aCA/IFMuaW5zZXJ0QmVmb3JlKEEsIE0sIFYuZWxlbXNbMF0pIDogQS5wYXJlbnQoKS5lbGVtc1swXS5hcHBlbmQoTSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFOLmxlbmd0aClcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZUVsZW0uc2V0KE0pLCBTLmluc2VydEJlZm9yZShBLCBNLCBBLmVsZW1zWzBdKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlRWxlbS5zZXQoTSk7XG4gICAgICAgICAgICAgIHZhciBWID0gQS5uZXh0KCk7XG4gICAgICAgICAgICAgIFYubGVuZ3RoID8gUy5pbnNlcnRCZWZvcmUoQSwgTSwgVi5lbGVtc1swXSkgOiBBLnBhcmVudCgpLmVsZW1zWzBdLmFwcGVuZChNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sIG07XG4gICAgICB9KGIuTGlzdEhhbmRsZSk7XG4gICAgICBpLmRlZmF1bHQgPSBEO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoNCkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIHAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZnVuY3Rpb24gdigpIHtcbiAgICAgICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdi5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oYikge1xuICAgICAgICAgIGlmIChiIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICAgICAgdmFyIFMsIEQgPSBbXTtcbiAgICAgICAgICAgICgwLCBjLmRlZmF1bHQpKFMgPSBiLmNoaWxkTm9kZXMpLmNhbGwoUywgZnVuY3Rpb24oVCkge1xuICAgICAgICAgICAgICBELnB1c2goVCk7XG4gICAgICAgICAgICB9KSwgYiA9IEQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2VsZW1lbnQgPSBiO1xuICAgICAgICB9LCB2LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudDtcbiAgICAgICAgfSwgdi5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgICAgfSwgdjtcbiAgICAgIH0oKTtcbiAgICAgIGkuZGVmYXVsdCA9IHA7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCg0KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgcCA9IHQoMiksIHYgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgYiA9IHQoNTgpLCBTID0gdCg0NyksIEQgPSBmdW5jdGlvbihUKSB7XG4gICAgICAgIHAuX19leHRlbmRzKG0sIFQpO1xuICAgICAgICBmdW5jdGlvbiBtKHgpIHtcbiAgICAgICAgICByZXR1cm4gVC5jYWxsKHRoaXMsIHgpIHx8IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0ucHJvdG90eXBlLmV4ZWMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgeCwgUiwgdywgQSwgRSwgQywgTSwgeSA9IHRoaXMub3B0aW9ucywgQiA9IHkuZWRpdG9yLCAkID0geS5saXN0VHlwZSwgRiA9IHkubGlzdFRhcmdldCwgayA9IHkuJHN0YXJ0RWxlbSwgaCA9IHkuJGVuZEVsZW0sIE4sIFAgPSBCLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25SYW5nZVRvcE5vZGVzKCksIGogPSBrID09IG51bGwgPyB2b2lkIDAgOiBrLmdldE5vZGVOYW1lKCksIEkgPSBoID09IG51bGwgPyB2b2lkIDAgOiBoLmdldE5vZGVOYW1lKCk7XG4gICAgICAgICAgaWYgKGogPT09IEkpXG4gICAgICAgICAgICBpZiAoUC5sZW5ndGggPiAyKVxuICAgICAgICAgICAgICBpZiAoUC5zaGlmdCgpLCBQLnBvcCgpLCBOID0gUy5jcmVhdGVFbGVtZW50RnJhZ21lbnQoXG4gICAgICAgICAgICAgICAgUy5maWx0ZXJTZWxlY3Rpb25Ob2RlcyhQKSxcbiAgICAgICAgICAgICAgICBTLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKVxuICAgICAgICAgICAgICApLCBqID09PSAkKVxuICAgICAgICAgICAgICAgICh4ID0gaC5jaGlsZHJlbigpKSA9PT0gbnVsbCB8fCB4ID09PSB2b2lkIDAgfHwgKDAsIGMuZGVmYXVsdCkoeCkuY2FsbCh4LCBmdW5jdGlvbihsZSkge1xuICAgICAgICAgICAgICAgICAgTi5hcHBlbmQobGUpO1xuICAgICAgICAgICAgICAgIH0pLCBoLnJlbW92ZSgpLCB0aGlzLnNlbGVjdGlvblJhbmdlRWxlbS5zZXQoTiksIGsuZWxlbXNbMF0uYXBwZW5kKE4pO1xuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBWID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBXID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBRID0gUy5nZXRTdGFydFBvaW50KGspOyBRLmxlbmd0aDsgKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgWCA9IFEuZWxlbXNbMF07XG4gICAgICAgICAgICAgICAgICBRID0gUS5uZXh0KCksIFYuYXBwZW5kKFgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBKID0gUy5nZXRFbmRQb2ludChoKSwgWiA9IFtdOyBKLmxlbmd0aDsgKVxuICAgICAgICAgICAgICAgICAgWi51bnNoaWZ0KEouZWxlbXNbMF0pLCBKID0gSi5wcmV2KCk7XG4gICAgICAgICAgICAgICAgKDAsIGMuZGVmYXVsdCkoWikuY2FsbChaLCBmdW5jdGlvbihsZSkge1xuICAgICAgICAgICAgICAgICAgVy5hcHBlbmQobGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHZhciBkZSA9IFMuY3JlYXRlRWxlbWVudChGKTtcbiAgICAgICAgICAgICAgICBkZS5hcHBlbmQoViksIGRlLmFwcGVuZChOKSwgZGUuYXBwZW5kKFcpLCBOID0gZGUsIHRoaXMuc2VsZWN0aW9uUmFuZ2VFbGVtLnNldChOKSwgdi5kZWZhdWx0KGRlKS5pbnNlcnRBZnRlcihrKSwgISghKChSID0gay5jaGlsZHJlbigpKSA9PT0gbnVsbCB8fCBSID09PSB2b2lkIDApICYmIFIubGVuZ3RoKSAmJiBrLnJlbW92ZSgpLCAhKCEoKHcgPSBoLmNoaWxkcmVuKCkpID09PSBudWxsIHx8IHcgPT09IHZvaWQgMCkgJiYgdy5sZW5ndGgpICYmIGgucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBQLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgIGZvciAodmFyIFEgPSBTLmdldFN0YXJ0UG9pbnQoayk7IFEubGVuZ3RoOyApXG4gICAgICAgICAgICAgICAgUC5wdXNoKFEpLCBRID0gUS5uZXh0KCk7XG4gICAgICAgICAgICAgIGZvciAodmFyIEogPSBTLmdldEVuZFBvaW50KGgpLCBaID0gW107IEoubGVuZ3RoOyApXG4gICAgICAgICAgICAgICAgWi51bnNoaWZ0KEopLCBKID0gSi5wcmV2KCk7XG4gICAgICAgICAgICAgIFAucHVzaC5hcHBseShQLCBaKSwgaiA9PT0gJCA/IChOID0gUy5jcmVhdGVFbGVtZW50RnJhZ21lbnQoUCwgUy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIFwicFwiKSwgdGhpcy5zZWxlY3Rpb25SYW5nZUVsZW0uc2V0KE4pLCBTLmluc2VydEJlZm9yZShrLCBOLCBoLmVsZW1zWzBdKSkgOiAoTiA9IFMuY3JlYXRlRWxlbWVudChGKSwgKDAsIGMuZGVmYXVsdCkoUCkuY2FsbChQLCBmdW5jdGlvbih0ZSkge1xuICAgICAgICAgICAgICAgIE4uYXBwZW5kKHRlLmVsZW1zWzBdKTtcbiAgICAgICAgICAgICAgfSksIHRoaXMuc2VsZWN0aW9uUmFuZ2VFbGVtLnNldChOKSwgdi5kZWZhdWx0KE4pLmluc2VydEFmdGVyKGspKSwgISghKChBID0gay5jaGlsZHJlbigpKSA9PT0gbnVsbCB8fCBBID09PSB2b2lkIDApICYmIEEubGVuZ3RoKSAmJiBoLnJlbW92ZSgpLCAhKCEoKEUgPSBoLmNoaWxkcmVuKCkpID09PSBudWxsIHx8IEUgPT09IHZvaWQgMCkgJiYgRS5sZW5ndGgpICYmIGgucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKHZhciB2ZSA9IFtdLCBKID0gUy5nZXRFbmRQb2ludChoKTsgSi5sZW5ndGg7IClcbiAgICAgICAgICAgICAgdmUudW5zaGlmdChKKSwgSiA9IEoucHJldigpO1xuICAgICAgICAgICAgZm9yICh2YXIgc2UgPSBbXSwgUSA9IFMuZ2V0U3RhcnRQb2ludChrKTsgUS5sZW5ndGg7IClcbiAgICAgICAgICAgICAgc2UucHVzaChRKSwgUSA9IFEubmV4dCgpO1xuICAgICAgICAgICAgaWYgKE4gPSBTLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgUC5zaGlmdCgpLCBQLnBvcCgpLCAoMCwgYy5kZWZhdWx0KShzZSkuY2FsbChzZSwgZnVuY3Rpb24ocGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIE4uYXBwZW5kKHBlLmVsZW1zWzBdKTtcbiAgICAgICAgICAgIH0pLCBOID0gUy5jcmVhdGVFbGVtZW50RnJhZ21lbnQoXG4gICAgICAgICAgICAgIFMuZmlsdGVyU2VsZWN0aW9uTm9kZXMoUCksXG4gICAgICAgICAgICAgIE5cbiAgICAgICAgICAgICksICgwLCBjLmRlZmF1bHQpKHZlKS5jYWxsKHZlLCBmdW5jdGlvbihwZSkge1xuICAgICAgICAgICAgICByZXR1cm4gTi5hcHBlbmQocGUuZWxlbXNbMF0pO1xuICAgICAgICAgICAgfSksIHRoaXMuc2VsZWN0aW9uUmFuZ2VFbGVtLnNldChOKSwgaiA9PT0gJClcbiAgICAgICAgICAgICAgay5lbGVtc1swXS5hcHBlbmQoTiksICEoISgoQyA9IGguY2hpbGRyZW4oKSkgPT09IG51bGwgfHwgQyA9PT0gdm9pZCAwKSAmJiBDLmxlbmd0aCkgJiYgaC5yZW1vdmUoKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKCEoKE0gPSBoLmNoaWxkcmVuKCkpID09PSBudWxsIHx8IE0gPT09IHZvaWQgMCkgJiYgTS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdmFyIG1lID0gaC5jaGlsZHJlbigpO1xuICAgICAgICAgICAgICBTLmluc2VydEJlZm9yZShtZSwgTiwgbWUuZWxlbXNbMF0pO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIGguZWxlbXNbMF0uYXBwZW5kKE4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgbTtcbiAgICAgIH0oYi5MaXN0SGFuZGxlKTtcbiAgICAgIGkuZGVmYXVsdCA9IEQ7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCg0KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgcCA9IHQoMiksIHYgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgYiA9IHQoNTgpLCBTID0gdCg0NyksIEQgPSBmdW5jdGlvbihUKSB7XG4gICAgICAgIHAuX19leHRlbmRzKG0sIFQpO1xuICAgICAgICBmdW5jdGlvbiBtKHgpIHtcbiAgICAgICAgICByZXR1cm4gVC5jYWxsKHRoaXMsIHgpIHx8IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0ucHJvdG90eXBlLmV4ZWMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgeCwgUiA9IHRoaXMub3B0aW9ucywgdyA9IFIuZWRpdG9yLCBBID0gUi5saXN0VHlwZSwgRSA9IFIubGlzdFRhcmdldCwgQyA9IFIuJHN0YXJ0RWxlbSwgTSwgeSA9IHcuc2VsZWN0aW9uLmdldFNlbGVjdGlvblJhbmdlVG9wTm9kZXMoKSwgQiA9IEMgPT0gbnVsbCA/IHZvaWQgMCA6IEMuZ2V0Tm9kZU5hbWUoKTtcbiAgICAgICAgICB5LnNoaWZ0KCk7XG4gICAgICAgICAgZm9yICh2YXIgJCA9IFtdLCBGID0gUy5nZXRTdGFydFBvaW50KEMpOyBGLmxlbmd0aDsgKVxuICAgICAgICAgICAgJC5wdXNoKEYpLCBGID0gRi5uZXh0KCk7XG4gICAgICAgICAgQiA9PT0gQSA/IChNID0gUy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksICgwLCBjLmRlZmF1bHQpKCQpLmNhbGwoJCwgZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgcmV0dXJuIE0uYXBwZW5kKGsuZWxlbXNbMF0pO1xuICAgICAgICAgIH0pLCBNID0gUy5jcmVhdGVFbGVtZW50RnJhZ21lbnQoXG4gICAgICAgICAgICBTLmZpbHRlclNlbGVjdGlvbk5vZGVzKHkpLFxuICAgICAgICAgICAgTVxuICAgICAgICAgICksIHRoaXMuc2VsZWN0aW9uUmFuZ2VFbGVtLnNldChNKSwgQy5lbGVtc1swXS5hcHBlbmQoTSkpIDogKE0gPSBTLmNyZWF0ZUVsZW1lbnQoRSksICgwLCBjLmRlZmF1bHQpKCQpLmNhbGwoJCwgZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgcmV0dXJuIE0uYXBwZW5kKGsuZWxlbXNbMF0pO1xuICAgICAgICAgIH0pLCBNID0gUy5jcmVhdGVFbGVtZW50RnJhZ21lbnQoXG4gICAgICAgICAgICBTLmZpbHRlclNlbGVjdGlvbk5vZGVzKHkpLFxuICAgICAgICAgICAgTVxuICAgICAgICAgICksIHRoaXMuc2VsZWN0aW9uUmFuZ2VFbGVtLnNldChNKSwgdi5kZWZhdWx0KE0pLmluc2VydEFmdGVyKEMpLCAhKCEoKHggPSBDLmNoaWxkcmVuKCkpID09PSBudWxsIHx8IHggPT09IHZvaWQgMCkgJiYgeC5sZW5ndGgpICYmIEMucmVtb3ZlKCkpO1xuICAgICAgICB9LCBtO1xuICAgICAgfShiLkxpc3RIYW5kbGUpO1xuICAgICAgaS5kZWZhdWx0ID0gRDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDQpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBwID0gdCgyKSwgdiA9IHAuX19pbXBvcnREZWZhdWx0KHQoMykpLCBiID0gdCg1OCksIFMgPSB0KDQ3KSwgRCA9IGZ1bmN0aW9uKFQpIHtcbiAgICAgICAgcC5fX2V4dGVuZHMobSwgVCk7XG4gICAgICAgIGZ1bmN0aW9uIG0oeCkge1xuICAgICAgICAgIHJldHVybiBULmNhbGwodGhpcywgeCkgfHwgdGhpcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciB4LCBSLCB3ID0gdGhpcy5vcHRpb25zLCBBID0gdy5lZGl0b3IsIEUgPSB3Lmxpc3RUeXBlLCBDID0gdy5saXN0VGFyZ2V0LCBNID0gdy4kZW5kRWxlbSwgeSwgQiA9IEEuc2VsZWN0aW9uLmdldFNlbGVjdGlvblJhbmdlVG9wTm9kZXMoKSwgJCA9IE0gPT0gbnVsbCA/IHZvaWQgMCA6IE0uZ2V0Tm9kZU5hbWUoKTtcbiAgICAgICAgICBCLnBvcCgpO1xuICAgICAgICAgIGZvciAodmFyIEYgPSBbXSwgayA9IFMuZ2V0RW5kUG9pbnQoTSk7IGsubGVuZ3RoOyApXG4gICAgICAgICAgICBGLnVuc2hpZnQoayksIGsgPSBrLnByZXYoKTtcbiAgICAgICAgICBpZiAoJCA9PT0gRSlcbiAgICAgICAgICAgIGlmICh5ID0gUy5jcmVhdGVFbGVtZW50RnJhZ21lbnQoXG4gICAgICAgICAgICAgIFMuZmlsdGVyU2VsZWN0aW9uTm9kZXMoQiksXG4gICAgICAgICAgICAgIFMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpXG4gICAgICAgICAgICApLCAoMCwgYy5kZWZhdWx0KShGKS5jYWxsKEYsIGZ1bmN0aW9uKFApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHkuYXBwZW5kKFAuZWxlbXNbMF0pO1xuICAgICAgICAgICAgfSksIHRoaXMuc2VsZWN0aW9uUmFuZ2VFbGVtLnNldCh5KSwgISgoeCA9IE0uY2hpbGRyZW4oKSkgPT09IG51bGwgfHwgeCA9PT0gdm9pZCAwKSAmJiB4Lmxlbmd0aCkge1xuICAgICAgICAgICAgICB2YXIgaCA9IE0uY2hpbGRyZW4oKTtcbiAgICAgICAgICAgICAgUy5pbnNlcnRCZWZvcmUoaCwgeSwgaC5lbGVtc1swXSk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgTS5lbGVtc1swXS5hcHBlbmQoeSk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgTiA9IFMuZmlsdGVyU2VsZWN0aW9uTm9kZXMoQik7XG4gICAgICAgICAgICBOLnB1c2guYXBwbHkoTiwgRiksIHkgPSBTLmNyZWF0ZUVsZW1lbnRGcmFnbWVudChcbiAgICAgICAgICAgICAgTixcbiAgICAgICAgICAgICAgUy5jcmVhdGVFbGVtZW50KEMpXG4gICAgICAgICAgICApLCB0aGlzLnNlbGVjdGlvblJhbmdlRWxlbS5zZXQoeSksIHYuZGVmYXVsdCh5KS5pbnNlcnRCZWZvcmUoTSksICEoISgoUiA9IE0uY2hpbGRyZW4oKSkgPT09IG51bGwgfHwgUiA9PT0gdm9pZCAwKSAmJiBSLmxlbmd0aCkgJiYgTS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIG07XG4gICAgICB9KGIuTGlzdEhhbmRsZSk7XG4gICAgICBpLmRlZmF1bHQgPSBEO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSB0KDU4KSwgdiA9IHQoNDcpLCBiID0gZnVuY3Rpb24oUykge1xuICAgICAgICBjLl9fZXh0ZW5kcyhELCBTKTtcbiAgICAgICAgZnVuY3Rpb24gRChULCBtKSB7XG4gICAgICAgICAgdmFyIHggPSBTLmNhbGwodGhpcywgVCkgfHwgdGhpcztcbiAgICAgICAgICByZXR1cm4geC5yYW5nZSA9IG0sIHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEQucHJvdG90eXBlLmV4ZWMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgVCA9IHRoaXMub3B0aW9ucywgbSA9IFQuZWRpdG9yLCB4ID0gVC5saXN0VGFyZ2V0LCBSID0gbS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uUmFuZ2VUb3BOb2RlcygpLCB3ID0gdi5jcmVhdGVFbGVtZW50RnJhZ21lbnQoXG4gICAgICAgICAgICB2LmZpbHRlclNlbGVjdGlvbk5vZGVzKFIpLFxuICAgICAgICAgICAgdi5jcmVhdGVFbGVtZW50KHgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlRWxlbS5zZXQodyksIHRoaXMucmFuZ2UuaW5zZXJ0Tm9kZSh3KTtcbiAgICAgICAgfSwgRDtcbiAgICAgIH0ocC5MaXN0SGFuZGxlKTtcbiAgICAgIGkuZGVmYXVsdCA9IGI7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCg0KSksIHAgPSBzKHQoMjcpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciB2ID0gdCgyKSwgYiA9IHYuX19pbXBvcnREZWZhdWx0KHQoMjQpKSwgUyA9IHYuX19pbXBvcnREZWZhdWx0KHQoMykpLCBEID0gdi5fX2ltcG9ydERlZmF1bHQodCgzNzkpKSwgVCA9IHQoNiksIG0gPSBmdW5jdGlvbih4KSB7XG4gICAgICAgIHYuX19leHRlbmRzKFIsIHgpO1xuICAgICAgICBmdW5jdGlvbiBSKHcpIHtcbiAgICAgICAgICB2YXIgQSA9IHRoaXMsIEUgPSBTLmRlZmF1bHQoYDxkaXYgY2xhc3M9XCJ3LWUtbWVudVwiIGRhdGEtdGl0bGU9XCJcXHU4ODRDXFx1OUFEOFwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInctZS1pY29uLXJvdy1oZWlnaHRcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+YCksIEMgPSBuZXcgRC5kZWZhdWx0KHcsIHcuY29uZmlnLmxpbmVIZWlnaHRzKSwgTSA9IHsgd2lkdGg6IDEwMCwgdGl0bGU6IFwiXFx1OEJCRVxcdTdGNkVcXHU4ODRDXFx1OUFEOFwiLCB0eXBlOiBcImxpc3RcIiwgbGlzdDogQy5nZXRJdGVtTGlzdCgpLCBjbGlja0hhbmRsZXI6IGZ1bmN0aW9uKEIpIHtcbiAgICAgICAgICAgIHcuc2VsZWN0aW9uLnNhdmVSYW5nZSgpLCBBLmNvbW1hbmQoQik7XG4gICAgICAgICAgfSB9O1xuICAgICAgICAgIHJldHVybiBBID0geC5jYWxsKHRoaXMsIEUsIHcsIE0pIHx8IHRoaXMsIEE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFIucHJvdG90eXBlLmNvbW1hbmQgPSBmdW5jdGlvbih3KSB7XG4gICAgICAgICAgdmFyIEEgPSB0aGlzLCBFLCBDID0gd2luZG93LmdldFNlbGVjdGlvbiA/IHdpbmRvdy5nZXRTZWxlY3Rpb24oKSA6IGRvY3VtZW50LmdldFNlbGVjdGlvbigpLCBNID0gW1wiUFwiXSwgeSA9IHRoaXMuZWRpdG9yLCBCID0gXCJcIjtcbiAgICAgICAgICB5LnNlbGVjdGlvbi5yZXN0b3JlU2VsZWN0aW9uKCk7XG4gICAgICAgICAgdmFyICQgPSBTLmRlZmF1bHQoeS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uQ29udGFpbmVyRWxlbSgpKTtcbiAgICAgICAgICBpZiAoISEoJCAhPSBudWxsICYmICQubGVuZ3RoKSkge1xuICAgICAgICAgICAgdmFyIEYgPSBTLmRlZmF1bHQoeS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uQ29udGFpbmVyRWxlbSgpKSwgayA9IFMuZGVmYXVsdCh5LnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25TdGFydEVsZW0oKSkuZWxlbXNbMF0sIGggPSBcIlwiLCBOID0gW10sIFAgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKCQgJiYgeS4kdGV4dEVsZW0uZXF1YWwoJCkpIHtcbiAgICAgICAgICAgICAgdmFyIGogPSBULlVBLmlzSUUoKSwgSSA9IFtdLCBWID0gW10sIFcgPSBbXSwgUSA9IFMuZGVmYXVsdCh5LnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25TdGFydEVsZW0oKSksIFggPSBTLmRlZmF1bHQoeS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uRW5kRWxlbSgpKSwgSiA9IChFID0geS5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSkgPT09IG51bGwgfHwgRSA9PT0gdm9pZCAwID8gdm9pZCAwIDogRS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5jaGlsZE5vZGVzO1xuICAgICAgICAgICAgICBWLnB1c2godGhpcy5nZXREb20oUS5lbGVtc1swXSkpLCBKID09IG51bGwgfHwgKDAsIGMuZGVmYXVsdCkoSikuY2FsbChKLCBmdW5jdGlvbihtZSwgbGUpIHtcbiAgICAgICAgICAgICAgICBtZSA9PT0gQS5nZXREb20oUS5lbGVtc1swXSkgJiYgSS5wdXNoKGxlKSwgbWUgPT09IEEuZ2V0RG9tKFguZWxlbXNbMF0pICYmIEkucHVzaChsZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB2YXIgWiA9IDAsIGRlID0gdm9pZCAwO1xuICAgICAgICAgICAgICBmb3IgKFcucHVzaCh0aGlzLmdldERvbShRLmVsZW1zWzBdKSk7IFZbWl0gIT09IHRoaXMuZ2V0RG9tKFguZWxlbXNbMF0pOyApXG4gICAgICAgICAgICAgICAgZGUgPSBTLmRlZmF1bHQoVltaXS5uZXh0RWxlbWVudFNpYmxpbmcpLmVsZW1zWzBdLCAoMCwgcC5kZWZhdWx0KShNKS5jYWxsKE0sIFMuZGVmYXVsdChkZSkuZ2V0Tm9kZU5hbWUoKSkgIT09IC0xICYmIFcucHVzaChkZSksIFYucHVzaChkZSksIForKztcbiAgICAgICAgICAgICAgaWYgKFMuZGVmYXVsdChWWzBdKS5nZXROb2RlTmFtZSgpICE9PSBcIlBcIikge1xuICAgICAgICAgICAgICAgIFogPSAwO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHZlID0gMDsgdmUgPCBWLmxlbmd0aDsgdmUrKylcbiAgICAgICAgICAgICAgICAgIGlmIChTLmRlZmF1bHQoVlt2ZV0pLmdldE5vZGVOYW1lKCkgPT09IFwiUFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIFogPSB2ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFogPT09IDApXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgc2UgPSAwOyBzZSAhPT0gWjsgKVxuICAgICAgICAgICAgICAgICAgVi5zaGlmdCgpLCBzZSsrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoVlswXSwgVltWLmxlbmd0aCAtIDFdKSwgKDAsIGMuZGVmYXVsdCkoVikuY2FsbChWLCBmdW5jdGlvbihtZSkge1xuICAgICAgICAgICAgICAgIGggPSBtZS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKSwgTiA9IGggPyBoLnNwbGl0KFwiO1wiKSA6IFtdLCBQID0gQS5zdHlsZVByb2Nlc3NpbmcoTiksIFMuZGVmYXVsdChtZSkuZ2V0Tm9kZU5hbWUoKSA9PT0gXCJQXCIgJiYgdyAmJiAoUCArPSB3ID8gXCJsaW5lLWhlaWdodDpcIiArIHcgKyBcIjtcIiA6IFwiXCIpLCBqID8gUy5kZWZhdWx0KG1lKS5jc3MoXCJsaW5lLWhlaWdodFwiLCB3KSA6IEIgKz0gXCI8XCIgKyBTLmRlZmF1bHQobWUpLmdldE5vZGVOYW1lKCkudG9Mb3dlckNhc2UoKSArICcgc3R5bGU9XCInICsgUCArICdcIj4nICsgbWUuaW5uZXJIVE1MICsgXCI8L1wiICsgUy5kZWZhdWx0KG1lKS5nZXROb2RlTmFtZSgpLnRvTG93ZXJDYXNlKCkgKyBcIj5cIjtcbiAgICAgICAgICAgICAgfSksIEIgJiYgdGhpcy5hY3Rpb24oQiwgeSksIGsgPSBGLmVsZW1zWzBdLCB0aGlzLnNldFJhbmdlKGsuY2hpbGRyZW5bSVswXV0sIGsuY2hpbGRyZW5bSVsxXV0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoayA9IHRoaXMuZ2V0RG9tKGspLCAoMCwgcC5kZWZhdWx0KShNKS5jYWxsKE0sIFMuZGVmYXVsdChrKS5nZXROb2RlTmFtZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgaWYgKGggPSBrLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpLCBOID0gaCA/IGguc3BsaXQoXCI7XCIpIDogW10sIEMgPT0gbnVsbCB8fCBDLnNlbGVjdEFsbENoaWxkcmVuKGspLCB5LnNlbGVjdGlvbi5zYXZlUmFuZ2UoKSwgIXcpIHtcbiAgICAgICAgICAgICAgICBoICYmIChQID0gdGhpcy5zdHlsZVByb2Nlc3NpbmcoTiksIFAgPT09IFwiXCIgPyBCID0gXCI8XCIgKyBTLmRlZmF1bHQoaykuZ2V0Tm9kZU5hbWUoKS50b0xvd2VyQ2FzZSgpICsgXCI+XCIgKyBrLmlubmVySFRNTCArIFwiPC9cIiArIFMuZGVmYXVsdChrKS5nZXROb2RlTmFtZSgpLnRvTG93ZXJDYXNlKCkgKyBcIj5cIiA6IEIgPSBcIjxcIiArIFMuZGVmYXVsdChrKS5nZXROb2RlTmFtZSgpLnRvTG93ZXJDYXNlKCkgKyAnIHN0eWxlPVwiJyArIFAgKyAnXCI+JyArIGsuaW5uZXJIVE1MICsgXCI8L1wiICsgUy5kZWZhdWx0KGspLmdldE5vZGVOYW1lKCkudG9Mb3dlckNhc2UoKSArIFwiPlwiLCB0aGlzLmFjdGlvbihCLCB5KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGggPyBQID0gdGhpcy5zdHlsZVByb2Nlc3NpbmcoTikgKyAoXCJsaW5lLWhlaWdodDpcIiArIHcgKyBcIjtcIikgOiBQID0gXCJsaW5lLWhlaWdodDpcIiArIHcgKyBcIjtcIiwgQiA9IFwiPFwiICsgUy5kZWZhdWx0KGspLmdldE5vZGVOYW1lKCkudG9Mb3dlckNhc2UoKSArICcgc3R5bGU9XCInICsgUCArICdcIj4nICsgay5pbm5lckhUTUwgKyBcIjwvXCIgKyBTLmRlZmF1bHQoaykuZ2V0Tm9kZU5hbWUoKS50b0xvd2VyQ2FzZSgpICsgXCI+XCIsIFMuZGVmYXVsdChrKS5nZXROb2RlTmFtZSgpID09PSBcIkJMT0NLUVVPVEVcIiB8fCBULlVBLmlzSUUoKSA/IFMuZGVmYXVsdChrKS5jc3MoXCJsaW5lLWhlaWdodFwiLCB3KSA6IHRoaXMuYWN0aW9uKEIsIHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgUi5wcm90b3R5cGUuZ2V0RG9tID0gZnVuY3Rpb24odykge1xuICAgICAgICAgIHZhciBBID0gUy5kZWZhdWx0KHcpLmVsZW1zWzBdO1xuICAgICAgICAgIGlmICghQS5wYXJlbnROb2RlKVxuICAgICAgICAgICAgcmV0dXJuIEE7XG4gICAgICAgICAgZnVuY3Rpb24gRShDLCBNKSB7XG4gICAgICAgICAgICB2YXIgeSA9IFMuZGVmYXVsdChDLnBhcmVudE5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuIE0uJHRleHRFbGVtLmVxdWFsKHkpID8gQyA6IEUoeS5lbGVtc1swXSwgTSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBBID0gRShBLCB0aGlzLmVkaXRvciksIEE7XG4gICAgICAgIH0sIFIucHJvdG90eXBlLmFjdGlvbiA9IGZ1bmN0aW9uKHcsIEEpIHtcbiAgICAgICAgICBBLmNtZC5kbyhcImluc2VydEhUTUxcIiwgdyk7XG4gICAgICAgIH0sIFIucHJvdG90eXBlLnN0eWxlUHJvY2Vzc2luZyA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgICAgICB2YXIgQSA9IFwiXCI7XG4gICAgICAgICAgcmV0dXJuICgwLCBjLmRlZmF1bHQpKHcpLmNhbGwodywgZnVuY3Rpb24oRSkge1xuICAgICAgICAgICAgRSAhPT0gXCJcIiAmJiAoMCwgcC5kZWZhdWx0KShFKS5jYWxsKEUsIFwibGluZS1oZWlnaHRcIikgPT09IC0xICYmIChBID0gQSArIEUgKyBcIjtcIik7XG4gICAgICAgICAgfSksIEE7XG4gICAgICAgIH0sIFIucHJvdG90eXBlLnNldFJhbmdlID0gZnVuY3Rpb24odywgQSkge1xuICAgICAgICAgIHZhciBFID0gdGhpcy5lZGl0b3IsIEMgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uID8gd2luZG93LmdldFNlbGVjdGlvbigpIDogZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgQyA9PSBudWxsIHx8IEMucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgdmFyIE0gPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLCB5ID0gdywgQiA9IEE7XG4gICAgICAgICAgTS5zZXRTdGFydCh5LCAwKSwgTS5zZXRFbmQoQiwgMSksIEMgPT0gbnVsbCB8fCBDLmFkZFJhbmdlKE0pLCBFLnNlbGVjdGlvbi5zYXZlUmFuZ2UoKSwgQyA9PSBudWxsIHx8IEMucmVtb3ZlQWxsUmFuZ2VzKCksIEUuc2VsZWN0aW9uLnJlc3RvcmVTZWxlY3Rpb24oKTtcbiAgICAgICAgfSwgUi5wcm90b3R5cGUudHJ5Q2hhbmdlQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHcgPSB0aGlzLmVkaXRvciwgQSA9IHcuc2VsZWN0aW9uLmdldFNlbGVjdGlvbkNvbnRhaW5lckVsZW0oKTtcbiAgICAgICAgICBpZiAoIShBICYmIHcuJHRleHRFbGVtLmVxdWFsKEEpKSkge1xuICAgICAgICAgICAgdmFyIEUgPSBTLmRlZmF1bHQody5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uU3RhcnRFbGVtKCkpO1xuICAgICAgICAgICAgaWYgKEUubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgIEUgPSB0aGlzLmdldERvbShFLmVsZW1zWzBdKTtcbiAgICAgICAgICAgICAgdmFyIEMgPSBFLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpID8gRS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKSA6IFwiXCI7XG4gICAgICAgICAgICAgIEMgJiYgKDAsIHAuZGVmYXVsdCkoQykuY2FsbChDLCBcImxpbmUtaGVpZ2h0XCIpICE9PSAtMSA/IHRoaXMuYWN0aXZlKCkgOiB0aGlzLnVuQWN0aXZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LCBSO1xuICAgICAgfShiLmRlZmF1bHQpO1xuICAgICAgaS5kZWZhdWx0ID0gbTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDQpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBwID0gdCgyKSwgdiA9IHAuX19pbXBvcnREZWZhdWx0KHQoMykpLCBiID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZ1bmN0aW9uIFMoRCwgVCkge1xuICAgICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgICB0aGlzLml0ZW1MaXN0ID0gW3sgJGVsZW06IHYuZGVmYXVsdChcIjxzcGFuPlwiICsgRC5pMThuZXh0LnQoXCJcXHU5RUQ4XFx1OEJBNFwiKSArIFwiPC9zcGFuPlwiKSwgdmFsdWU6IFwiXCIgfV0sICgwLCBjLmRlZmF1bHQpKFQpLmNhbGwoVCwgZnVuY3Rpb24oeCkge1xuICAgICAgICAgICAgbS5pdGVtTGlzdC5wdXNoKHsgJGVsZW06IHYuZGVmYXVsdChcIjxzcGFuPlwiICsgeCArIFwiPC9zcGFuPlwiKSwgdmFsdWU6IHggfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFMucHJvdG90eXBlLmdldEl0ZW1MaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbUxpc3Q7XG4gICAgICAgIH0sIFM7XG4gICAgICB9KCk7XG4gICAgICBpLmRlZmF1bHQgPSBiO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgdiA9IGMuX19pbXBvcnREZWZhdWx0KHQoMjMpKSwgYiA9IGZ1bmN0aW9uKFMpIHtcbiAgICAgICAgYy5fX2V4dGVuZHMoRCwgUyk7XG4gICAgICAgIGZ1bmN0aW9uIEQoVCkge1xuICAgICAgICAgIHZhciBtID0gdGhpcywgeCA9IHAuZGVmYXVsdChgPGRpdiBjbGFzcz1cInctZS1tZW51XCIgZGF0YS10aXRsZT1cIlxcdTY0QTRcXHU5NTAwXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ3LWUtaWNvbi11bmRvXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgICAgICAgcmV0dXJuIG0gPSBTLmNhbGwodGhpcywgeCwgVCkgfHwgdGhpcywgbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRC5wcm90b3R5cGUuY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIFQgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgICBULmhpc3RvcnkucmV2b2tlKCk7XG4gICAgICAgICAgdmFyIG0gPSBULiR0ZXh0RWxlbS5jaGlsZHJlbigpO1xuICAgICAgICAgIGlmICghIShtICE9IG51bGwgJiYgbS5sZW5ndGgpKSB7XG4gICAgICAgICAgICB2YXIgeCA9IG0ubGFzdCgpO1xuICAgICAgICAgICAgVC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2VCeUVsZW0oeCwgITEsICEwKSwgVC5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgRC5wcm90b3R5cGUudHJ5Q2hhbmdlQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGhpcy5lZGl0b3IuaXNDb21wYXRpYmxlTW9kZSB8fCAodGhpcy5lZGl0b3IuaGlzdG9yeS5zaXplWzBdID8gdGhpcy5hY3RpdmUoKSA6IHRoaXMudW5BY3RpdmUoKSk7XG4gICAgICAgIH0sIEQ7XG4gICAgICB9KHYuZGVmYXVsdCk7XG4gICAgICBpLmRlZmF1bHQgPSBiO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgdiA9IGMuX19pbXBvcnREZWZhdWx0KHQoMjMpKSwgYiA9IGZ1bmN0aW9uKFMpIHtcbiAgICAgICAgYy5fX2V4dGVuZHMoRCwgUyk7XG4gICAgICAgIGZ1bmN0aW9uIEQoVCkge1xuICAgICAgICAgIHZhciBtID0gdGhpcywgeCA9IHAuZGVmYXVsdChgPGRpdiBjbGFzcz1cInctZS1tZW51XCIgZGF0YS10aXRsZT1cIlxcdTYwNjJcXHU1OTBEXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ3LWUtaWNvbi1yZWRvXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgICAgICAgcmV0dXJuIG0gPSBTLmNhbGwodGhpcywgeCwgVCkgfHwgdGhpcywgbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRC5wcm90b3R5cGUuY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIFQgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgICBULmhpc3RvcnkucmVzdG9yZSgpO1xuICAgICAgICAgIHZhciBtID0gVC4kdGV4dEVsZW0uY2hpbGRyZW4oKTtcbiAgICAgICAgICBpZiAoISEobSAhPSBudWxsICYmIG0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgdmFyIHggPSBtLmxhc3QoKTtcbiAgICAgICAgICAgIFQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlQnlFbGVtKHgsICExLCAhMCksIFQuc2VsZWN0aW9uLnJlc3RvcmVTZWxlY3Rpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIEQucHJvdG90eXBlLnRyeUNoYW5nZUFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRoaXMuZWRpdG9yLmlzQ29tcGF0aWJsZU1vZGUgfHwgKHRoaXMuZWRpdG9yLmhpc3Rvcnkuc2l6ZVsxXSA/IHRoaXMuYWN0aXZlKCkgOiB0aGlzLnVuQWN0aXZlKCkpO1xuICAgICAgICB9LCBEO1xuICAgICAgfSh2LmRlZmF1bHQpO1xuICAgICAgaS5kZWZhdWx0ID0gYjtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSB0KDIpLCBwID0gYy5fX2ltcG9ydERlZmF1bHQodCgzNykpLCB2ID0gYy5fX2ltcG9ydERlZmF1bHQodCgzKSksIGIgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM4MykpLCBTID0gYy5fX2ltcG9ydERlZmF1bHQodCgzMikpLCBEID0gYy5fX2ltcG9ydERlZmF1bHQodCgzOTIpKSwgVCA9IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgYy5fX2V4dGVuZHMoeCwgbSk7XG4gICAgICAgIGZ1bmN0aW9uIHgoUikge1xuICAgICAgICAgIHZhciB3ID0gdGhpcywgQSA9IHYuZGVmYXVsdCgnPGRpdiBjbGFzcz1cInctZS1tZW51XCIgZGF0YS10aXRsZT1cIlxcdTg4NjhcXHU2ODNDXCI+PGkgY2xhc3M9XCJ3LWUtaWNvbi10YWJsZTJcIj48L2k+PC9kaXY+Jyk7XG4gICAgICAgICAgcmV0dXJuIHcgPSBtLmNhbGwodGhpcywgQSwgUikgfHwgdGhpcywgRC5kZWZhdWx0KFIpLCB3O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4LnByb3RvdHlwZS5jbGlja0hhbmRsZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVBhbmVsKCk7XG4gICAgICAgIH0sIHgucHJvdG90eXBlLmNyZWF0ZVBhbmVsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIFIgPSBiLmRlZmF1bHQodGhpcy5lZGl0b3IpLCB3ID0gbmV3IFMuZGVmYXVsdCh0aGlzLCBSKTtcbiAgICAgICAgICB3LmNyZWF0ZSgpO1xuICAgICAgICB9LCB4LnByb3RvdHlwZS50cnlDaGFuZ2VBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgfSwgeDtcbiAgICAgIH0ocC5kZWZhdWx0KTtcbiAgICAgIGkuZGVmYXVsdCA9IFQ7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCgzODQpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBwID0gdCgyKSwgdiA9IHQoNiksIGIgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMpKTtcbiAgICAgIHQoMzg5KTtcbiAgICAgIHZhciBTID0gcC5fX2ltcG9ydERlZmF1bHQodCgzOTEpKTtcbiAgICAgIGZ1bmN0aW9uIEQobSkge1xuICAgICAgICByZXR1cm4gbSA+IDAgJiYgKDAsIGMuZGVmYXVsdCkobSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBUKG0pIHtcbiAgICAgICAgdmFyIHggPSBuZXcgUy5kZWZhdWx0KG0pLCBSID0gdi5nZXRSYW5kb20oXCJ3LWNvbC1pZFwiKSwgdyA9IHYuZ2V0UmFuZG9tKFwidy1yb3ctaWRcIiksIEEgPSB2LmdldFJhbmRvbShcImJ0bi1saW5rXCIpLCBFID0gXCJtZW51cy5wYW5lbE1lbnVzLnRhYmxlLlwiLCBDID0gZnVuY3Rpb24oJCkge1xuICAgICAgICAgIHJldHVybiBtLmkxOG5leHQudCgkKTtcbiAgICAgICAgfSwgTSA9IFt7IHRpdGxlOiBDKEUgKyBcIlxcdTYzRDJcXHU1MTY1XFx1ODg2OFxcdTY4M0NcIiksIHRwbDogYDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWUtdGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPmAgKyBDKFwiXFx1NTIxQlxcdTVFRkFcIikgKyBgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiYCArIHcgKyBgXCIgIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJ3LWUtdGFibGUtaW5wdXRcIiB2YWx1ZT1cIjVcIi8+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPmAgKyBDKEUgKyBcIlxcdTg4NENcIikgKyBgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiYCArIFIgKyBgXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cInctZS10YWJsZS1pbnB1dFwiIHZhbHVlPVwiNVwiLz48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+YCArIChDKEUgKyBcIlxcdTUyMTdcIikgKyBDKEUgKyBcIlxcdTc2ODRcIikgKyBDKEUgKyBcIlxcdTg4NjhcXHU2ODNDXCIpKSArIGA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1lLWJ1dHRvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYCArIEEgKyAnXCIgY2xhc3M9XCJyaWdodFwiPicgKyBDKFwiXFx1NjNEMlxcdTUxNjVcIikgKyBgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmAsIGV2ZW50czogW3sgc2VsZWN0b3I6IFwiI1wiICsgQSwgdHlwZTogXCJjbGlja1wiLCBmbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyICQgPSBOdW1iZXIoYi5kZWZhdWx0KFwiI1wiICsgUikudmFsKCkpLCBGID0gTnVtYmVyKGIuZGVmYXVsdChcIiNcIiArIHcpLnZhbCgpKTtcbiAgICAgICAgICByZXR1cm4gRChGKSAmJiBEKCQpID8gKHguY3JlYXRlQWN0aW9uKEYsICQpLCAhMCkgOiAobS5jb25maWcuY3VzdG9tQWxlcnQoXCJcXHU4ODY4XFx1NjgzQ1xcdTg4NENcXHU1MjE3XFx1OEJGN1xcdThGOTNcXHU1MTY1XFx1NkI2M1xcdTY1NzRcXHU2NTcwXCIsIFwid2FybmluZ1wiKSwgITEpO1xuICAgICAgICB9LCBiaW5kRW50ZXI6ICEwIH1dIH1dLCB5ID0geyB3aWR0aDogMzMwLCBoZWlnaHQ6IDAsIHRhYnM6IFtdIH07XG4gICAgICAgIHJldHVybiB5LnRhYnMucHVzaChNWzBdKSwgeTtcbiAgICAgIH1cbiAgICAgIGkuZGVmYXVsdCA9IFQ7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgby5leHBvcnRzID0gdCgzODUpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgzODYpO1xuICAgICAgby5leHBvcnRzID0gcztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB0KDM4Nyk7XG4gICAgICB2YXIgcyA9IHQoOSk7XG4gICAgICBvLmV4cG9ydHMgPSBzLk51bWJlci5pc0ludGVnZXI7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDUpLCBkID0gdCgzODgpO1xuICAgICAgcyh7IHRhcmdldDogXCJOdW1iZXJcIiwgc3RhdDogITAgfSwgeyBpc0ludGVnZXI6IGQgfSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDEzKSwgZCA9IE1hdGguZmxvb3I7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihwKSB7XG4gICAgICAgIHJldHVybiAhcyhwKSAmJiBpc0Zpbml0ZShwKSAmJiBkKHApID09PSBwO1xuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjApLCBkID0gdCgzOTApO1xuICAgICAgZCA9IGQuX19lc01vZHVsZSA/IGQuZGVmYXVsdCA6IGQsIHR5cGVvZiBkID09IFwic3RyaW5nXCIgJiYgKGQgPSBbW28uaSwgZCwgXCJcIl1dKTtcbiAgICAgIHZhciBjID0ge307XG4gICAgICBjLmluc2VydCA9IFwiaGVhZFwiLCBjLnNpbmdsZXRvbiA9ICExLCBzKGQsIGMpLCBvLmV4cG9ydHMgPSBkLmxvY2FscyB8fCB7fTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjEpO1xuICAgICAgaSA9IHMoITEpLCBpLnB1c2goW28uaSwgYC53LWUtdGFibGUge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLnctZS10YWJsZSAudy1lLXRhYmxlLWlucHV0IHtcbiAgd2lkdGg6IDQwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlciFpbXBvcnRhbnQ7XG4gIG1hcmdpbjogMCA1cHg7XG59XG5gLCBcIlwiXSksIG8uZXhwb3J0cyA9IGk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBjID0gdCgyKSwgcCA9IHQoNyksIHYgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmdW5jdGlvbiBTKEQpIHtcbiAgICAgICAgICB0aGlzLmVkaXRvciA9IEQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFMucHJvdG90eXBlLmNyZWF0ZUFjdGlvbiA9IGZ1bmN0aW9uKEQsIFQpIHtcbiAgICAgICAgICB2YXIgbSA9IHRoaXMuZWRpdG9yLCB4ID0gdi5kZWZhdWx0KG0uc2VsZWN0aW9uLmdldFNlbGVjdGlvbkNvbnRhaW5lckVsZW0oKSksIFIgPSB2LmRlZmF1bHQoeC5lbGVtc1swXSkucGFyZW50VW50aWxFZGl0b3IoXCJVTFwiLCBtKSwgdyA9IHYuZGVmYXVsdCh4LmVsZW1zWzBdKS5wYXJlbnRVbnRpbEVkaXRvcihcIk9MXCIsIG0pO1xuICAgICAgICAgIGlmICghKFIgfHwgdykpIHtcbiAgICAgICAgICAgIHZhciBBID0gdGhpcy5jcmVhdGVUYWJsZUh0bWwoRCwgVCk7XG4gICAgICAgICAgICBtLmNtZC5kbyhcImluc2VydEhUTUxcIiwgQSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBTLnByb3RvdHlwZS5jcmVhdGVUYWJsZUh0bWwgPSBmdW5jdGlvbihELCBUKSB7XG4gICAgICAgICAgZm9yICh2YXIgbSA9IFwiXCIsIHggPSBcIlwiLCBSID0gMDsgUiA8IEQ7IFIrKykge1xuICAgICAgICAgICAgeCA9IFwiXCI7XG4gICAgICAgICAgICBmb3IgKHZhciB3ID0gMDsgdyA8IFQ7IHcrKylcbiAgICAgICAgICAgICAgUiA9PT0gMCA/IHggPSB4ICsgXCI8dGg+PC90aD5cIiA6IHggPSB4ICsgXCI8dGQ+PC90ZD5cIjtcbiAgICAgICAgICAgIG0gPSBtICsgXCI8dHI+XCIgKyB4ICsgXCI8L3RyPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgQSA9ICc8dGFibGUgYm9yZGVyPVwiMFwiIHdpZHRoPVwiMTAwJVwiIGNlbGxwYWRkaW5nPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiPjx0Ym9keT4nICsgbSArIChcIjwvdGJvZHk+PC90YWJsZT5cIiArIHAuRU1QVFlfUCk7XG4gICAgICAgICAgcmV0dXJuIEE7XG4gICAgICAgIH0sIFM7XG4gICAgICB9KCk7XG4gICAgICBpLmRlZmF1bHQgPSBiO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM5MykpLCB2ID0gdCg0MDApO1xuICAgICAgZnVuY3Rpb24gYihTKSB7XG4gICAgICAgIHAuZGVmYXVsdChTKSwgdi5iaW5kRXZlbnRLZXlib2FyZEV2ZW50KFMpLCB2LmJpbmRDbGlja0V2ZW50KFMpO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gYjtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSB0KDIpLCBwID0gYy5fX2ltcG9ydERlZmF1bHQodCgzKSksIHYgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM4KSksIGIgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDM5NCkpLCBTID0gYy5fX2ltcG9ydERlZmF1bHQodCgzOTkpKSwgRCA9IHQoNyk7XG4gICAgICBmdW5jdGlvbiBUKHcpIHtcbiAgICAgICAgdmFyIEE7XG4gICAgICAgIGZ1bmN0aW9uIEUoTSkge1xuICAgICAgICAgIHZhciB5ID0gbmV3IFMuZGVmYXVsdCh3KSwgQiA9IFwibWVudXMucGFuZWxNZW51cy50YWJsZS5cIiwgJCA9IGZ1bmN0aW9uKGgsIE4pIHtcbiAgICAgICAgICAgIHJldHVybiBOID09PSB2b2lkIDAgJiYgKE4gPSBCKSwgdy5pMThuZXh0LnQoTiArIGgpO1xuICAgICAgICAgIH0sIEYgPSBbe1xuICAgICAgICAgICAgJGVsZW06IHAuZGVmYXVsdChcIjxzcGFuPlwiICsgJChcIlxcdTUyMjBcXHU5NjY0XFx1ODg2OFxcdTY4M0NcIikgKyBcIjwvc3Bhbj5cIiksXG4gICAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbihoLCBOKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoLnNlbGVjdGlvbi5jcmVhdGVSYW5nZUJ5RWxlbShOKSwgaC5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpLCBoLmNtZC5kbyhcImluc2VydEhUTUxcIiwgRC5FTVBUWV9QKSwgITA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgeyAkZWxlbTogcC5kZWZhdWx0KFwiPHNwYW4+XCIgKyAkKFwiXFx1NkRGQlxcdTUyQTBcXHU4ODRDXCIpICsgXCI8L3NwYW4+XCIpLCBvbkNsaWNrOiBmdW5jdGlvbihoLCBOKSB7XG4gICAgICAgICAgICB2YXIgUCA9IG0oaCk7XG4gICAgICAgICAgICBpZiAoUClcbiAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgdmFyIGogPSBwLmRlZmF1bHQoaC5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uU3RhcnRFbGVtKCkpLCBJID0geS5nZXRSb3dOb2RlKGouZWxlbXNbMF0pO1xuICAgICAgICAgICAgaWYgKCFJKVxuICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICB2YXIgViA9IE51bWJlcih5LmdldEN1cnJlbnRSb3dJbmRleChOLmVsZW1zWzBdLCBJKSksIFcgPSB5LmdldFRhYmxlSHRtbChOLmVsZW1zWzBdKSwgUSA9IHkuZ2V0VGFibGVIdG1sKGIuZGVmYXVsdC5Qcm9jZXNzaW5nUm93KHAuZGVmYXVsdChXKSwgVikuZWxlbXNbMF0pO1xuICAgICAgICAgICAgcmV0dXJuIFEgPSBSKE4sIFEpLCBoLnNlbGVjdGlvbi5jcmVhdGVSYW5nZUJ5RWxlbShOKSwgaC5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpLCBoLmNtZC5kbyhcImluc2VydEhUTUxcIiwgUSksICEwO1xuICAgICAgICAgIH0gfSwgeyAkZWxlbTogcC5kZWZhdWx0KFwiPHNwYW4+XCIgKyAkKFwiXFx1NTIyMFxcdTk2NjRcXHU4ODRDXCIpICsgXCI8L3NwYW4+XCIpLCBvbkNsaWNrOiBmdW5jdGlvbihoLCBOKSB7XG4gICAgICAgICAgICB2YXIgUCA9IG0oaCk7XG4gICAgICAgICAgICBpZiAoUClcbiAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgdmFyIGogPSBwLmRlZmF1bHQoaC5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uU3RhcnRFbGVtKCkpLCBJID0geS5nZXRSb3dOb2RlKGouZWxlbXNbMF0pO1xuICAgICAgICAgICAgaWYgKCFJKVxuICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICB2YXIgViA9IE51bWJlcih5LmdldEN1cnJlbnRSb3dJbmRleChOLmVsZW1zWzBdLCBJKSksIFcgPSB5LmdldFRhYmxlSHRtbChOLmVsZW1zWzBdKSwgUSA9IGIuZGVmYXVsdC5EZWxldGVSb3cocC5kZWZhdWx0KFcpLCBWKS5lbGVtc1swXS5jaGlsZHJlblswXS5jaGlsZHJlbi5sZW5ndGgsIFggPSBcIlwiO1xuICAgICAgICAgICAgcmV0dXJuIGguc2VsZWN0aW9uLmNyZWF0ZVJhbmdlQnlFbGVtKE4pLCBoLnNlbGVjdGlvbi5yZXN0b3JlU2VsZWN0aW9uKCksIFEgPT09IDAgPyBYID0gRC5FTVBUWV9QIDogWCA9IHkuZ2V0VGFibGVIdG1sKGIuZGVmYXVsdC5EZWxldGVSb3cocC5kZWZhdWx0KFcpLCBWKS5lbGVtc1swXSksIFggPSBSKE4sIFgpLCBoLmNtZC5kbyhcImluc2VydEhUTUxcIiwgWCksICEwO1xuICAgICAgICAgIH0gfSwgeyAkZWxlbTogcC5kZWZhdWx0KFwiPHNwYW4+XCIgKyAkKFwiXFx1NkRGQlxcdTUyQTBcXHU1MjE3XCIpICsgXCI8L3NwYW4+XCIpLCBvbkNsaWNrOiBmdW5jdGlvbihoLCBOKSB7XG4gICAgICAgICAgICB2YXIgUCA9IG0oaCk7XG4gICAgICAgICAgICBpZiAoUClcbiAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgdmFyIGogPSBwLmRlZmF1bHQoaC5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uU3RhcnRFbGVtKCkpLCBJID0geS5nZXRDdXJyZW50Q29sSW5kZXgoai5lbGVtc1swXSksIFYgPSB5LmdldFRhYmxlSHRtbChOLmVsZW1zWzBdKSwgVyA9IHkuZ2V0VGFibGVIdG1sKGIuZGVmYXVsdC5Qcm9jZXNzaW5nQ29sKHAuZGVmYXVsdChWKSwgSSkuZWxlbXNbMF0pO1xuICAgICAgICAgICAgcmV0dXJuIFcgPSBSKE4sIFcpLCBoLnNlbGVjdGlvbi5jcmVhdGVSYW5nZUJ5RWxlbShOKSwgaC5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpLCBoLmNtZC5kbyhcImluc2VydEhUTUxcIiwgVyksICEwO1xuICAgICAgICAgIH0gfSwgeyAkZWxlbTogcC5kZWZhdWx0KFwiPHNwYW4+XCIgKyAkKFwiXFx1NTIyMFxcdTk2NjRcXHU1MjE3XCIpICsgXCI8L3NwYW4+XCIpLCBvbkNsaWNrOiBmdW5jdGlvbihoLCBOKSB7XG4gICAgICAgICAgICB2YXIgUCA9IG0oaCk7XG4gICAgICAgICAgICBpZiAoUClcbiAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgdmFyIGogPSBwLmRlZmF1bHQoaC5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uU3RhcnRFbGVtKCkpLCBJID0geS5nZXRDdXJyZW50Q29sSW5kZXgoai5lbGVtc1swXSksIFYgPSB5LmdldFRhYmxlSHRtbChOLmVsZW1zWzBdKSwgVyA9IGIuZGVmYXVsdC5EZWxldGVDb2wocC5kZWZhdWx0KFYpLCBJKSwgUSA9IFcuZWxlbXNbMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW4ubGVuZ3RoLCBYID0gXCJcIjtcbiAgICAgICAgICAgIHJldHVybiBoLnNlbGVjdGlvbi5jcmVhdGVSYW5nZUJ5RWxlbShOKSwgaC5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpLCBRID09PSAwID8gWCA9IEQuRU1QVFlfUCA6IFggPSB5LmdldFRhYmxlSHRtbChXLmVsZW1zWzBdKSwgWCA9IFIoTiwgWCksIGguY21kLmRvKFwiaW5zZXJ0SFRNTFwiLCBYKSwgITA7XG4gICAgICAgICAgfSB9LCB7ICRlbGVtOiBwLmRlZmF1bHQoXCI8c3Bhbj5cIiArICQoXCJcXHU4QkJFXFx1N0Y2RVxcdTg4NjhcXHU1OTM0XCIpICsgXCI8L3NwYW4+XCIpLCBvbkNsaWNrOiBmdW5jdGlvbihoLCBOKSB7XG4gICAgICAgICAgICB2YXIgUCA9IG0oaCk7XG4gICAgICAgICAgICBpZiAoUClcbiAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgdmFyIGogPSBwLmRlZmF1bHQoaC5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uU3RhcnRFbGVtKCkpLCBJID0geS5nZXRSb3dOb2RlKGouZWxlbXNbMF0pO1xuICAgICAgICAgICAgaWYgKCFJKVxuICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICB2YXIgViA9IE51bWJlcih5LmdldEN1cnJlbnRSb3dJbmRleChOLmVsZW1zWzBdLCBJKSk7XG4gICAgICAgICAgICBWICE9PSAwICYmIChWID0gMCk7XG4gICAgICAgICAgICB2YXIgVyA9IHkuZ2V0VGFibGVIdG1sKE4uZWxlbXNbMF0pLCBRID0geS5nZXRUYWJsZUh0bWwoYi5kZWZhdWx0LnNldFRoZUhlYWRlcihwLmRlZmF1bHQoVyksIFYsIFwidGhcIikuZWxlbXNbMF0pO1xuICAgICAgICAgICAgcmV0dXJuIFEgPSBSKE4sIFEpLCBoLnNlbGVjdGlvbi5jcmVhdGVSYW5nZUJ5RWxlbShOKSwgaC5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpLCBoLmNtZC5kbyhcImluc2VydEhUTUxcIiwgUSksICEwO1xuICAgICAgICAgIH0gfSwgeyAkZWxlbTogcC5kZWZhdWx0KFwiPHNwYW4+XCIgKyAkKFwiXFx1NTNENlxcdTZEODhcXHU4ODY4XFx1NTkzNFwiKSArIFwiPC9zcGFuPlwiKSwgb25DbGljazogZnVuY3Rpb24oaCwgTikge1xuICAgICAgICAgICAgdmFyIFAgPSBwLmRlZmF1bHQoaC5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uU3RhcnRFbGVtKCkpLCBqID0geS5nZXRSb3dOb2RlKFAuZWxlbXNbMF0pO1xuICAgICAgICAgICAgaWYgKCFqKVxuICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICB2YXIgSSA9IE51bWJlcih5LmdldEN1cnJlbnRSb3dJbmRleChOLmVsZW1zWzBdLCBqKSk7XG4gICAgICAgICAgICBJICE9PSAwICYmIChJID0gMCk7XG4gICAgICAgICAgICB2YXIgViA9IHkuZ2V0VGFibGVIdG1sKE4uZWxlbXNbMF0pLCBXID0geS5nZXRUYWJsZUh0bWwoYi5kZWZhdWx0LnNldFRoZUhlYWRlcihwLmRlZmF1bHQoViksIEksIFwidGRcIikuZWxlbXNbMF0pO1xuICAgICAgICAgICAgcmV0dXJuIFcgPSBSKE4sIFcpLCBoLnNlbGVjdGlvbi5jcmVhdGVSYW5nZUJ5RWxlbShOKSwgaC5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpLCBoLmNtZC5kbyhcImluc2VydEhUTUxcIiwgVyksICEwO1xuICAgICAgICAgIH0gfV07XG4gICAgICAgICAgQSA9IG5ldyB2LmRlZmF1bHQodywgTSwgRiksIEEuY3JlYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gQygpIHtcbiAgICAgICAgICBBICYmIChBLnJlbW92ZSgpLCBBID0gbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc2hvd1RhYmxlVG9vbHRpcDogRSwgaGlkZVRhYmxlVG9vbHRpcDogQyB9O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbSh3KSB7XG4gICAgICAgIHZhciBBID0gdy5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uU3RhcnRFbGVtKCksIEUgPSB3LnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25FbmRFbGVtKCk7XG4gICAgICAgIHJldHVybiAoQSA9PSBudWxsID8gdm9pZCAwIDogQS5lbGVtc1swXSkgIT09IChFID09IG51bGwgPyB2b2lkIDAgOiBFLmVsZW1zWzBdKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHgodykge1xuICAgICAgICB2YXIgQSA9IFQodyksIEUgPSBBLnNob3dUYWJsZVRvb2x0aXAsIEMgPSBBLmhpZGVUYWJsZVRvb2x0aXA7XG4gICAgICAgIHcudHh0LmV2ZW50SG9va3MudGFibGVDbGlja0V2ZW50cy5wdXNoKEUpLCB3LnR4dC5ldmVudEhvb2tzLmNsaWNrRXZlbnRzLnB1c2goQyksIHcudHh0LmV2ZW50SG9va3Mua2V5dXBFdmVudHMucHVzaChDKSwgdy50eHQuZXZlbnRIb29rcy50b29sYmFyQ2xpY2tFdmVudHMucHVzaChDKSwgdy50eHQuZXZlbnRIb29rcy5tZW51Q2xpY2tFdmVudHMucHVzaChDKSwgdy50eHQuZXZlbnRIb29rcy50ZXh0U2Nyb2xsRXZlbnRzLnB1c2goQyk7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSB4O1xuICAgICAgZnVuY3Rpb24gUih3LCBBKSB7XG4gICAgICAgIHZhciBFID0gdy5lbGVtc1swXS5uZXh0U2libGluZztcbiAgICAgICAgcmV0dXJuICghRSB8fCBFLmlubmVySFRNTCA9PT0gXCI8YnI+XCIpICYmIChBICs9IFwiXCIgKyBELkVNUFRZX1ApLCBBO1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoNDUpKSwgcCA9IHModCg5MSkpLCB2ID0gcyh0KDQpKSwgYiA9IHModCgxMzgpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBTID0gdCgyKSwgRCA9IFMuX19pbXBvcnREZWZhdWx0KHQoMykpO1xuICAgICAgZnVuY3Rpb24gVChDLCBNKSB7XG4gICAgICAgIGZvciAodmFyIHkgPSBFKEMpLCBCID0gKDAsIGMuZGVmYXVsdCkoQXJyYXkucHJvdG90eXBlKS5hcHBseSh5LmNoaWxkcmVuKSwgJCA9IEJbMF0uY2hpbGRyZW4ubGVuZ3RoLCBGID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRyXCIpLCBrID0gMDsgayA8ICQ7IGsrKykge1xuICAgICAgICAgIHZhciBoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRkXCIpO1xuICAgICAgICAgIEYuYXBwZW5kQ2hpbGQoaCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgwLCBwLmRlZmF1bHQpKEIpLmNhbGwoQiwgTSArIDEsIDAsIEYpLCBBKHksIEIpLCBELmRlZmF1bHQoeS5wYXJlbnROb2RlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG0oQywgTSkge1xuICAgICAgICBmb3IgKHZhciB5ID0gRShDKSwgQiA9ICgwLCBjLmRlZmF1bHQpKEFycmF5LnByb3RvdHlwZSkuYXBwbHkoeS5jaGlsZHJlbiksICQgPSBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgdmFyIE4sIFAgPSBbXTtcbiAgICAgICAgICBmb3IgKCgwLCB2LmRlZmF1bHQpKE4gPSAoMCwgYi5kZWZhdWx0KShCW2hdLmNoaWxkcmVuKSkuY2FsbChOLCBmdW5jdGlvbihWKSB7XG4gICAgICAgICAgICBQLnB1c2goVik7XG4gICAgICAgICAgfSk7IEJbaF0uY2hpbGRyZW4ubGVuZ3RoICE9PSAwOyApXG4gICAgICAgICAgICBCW2hdLnJlbW92ZUNoaWxkKEJbaF0uY2hpbGRyZW5bMF0pO1xuICAgICAgICAgIHZhciBqID0gRC5kZWZhdWx0KFBbMF0pLmdldE5vZGVOYW1lKCkgIT09IFwiVEhcIiA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZFwiKSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0aFwiKTtcbiAgICAgICAgICAoMCwgcC5kZWZhdWx0KShQKS5jYWxsKFAsIE0gKyAxLCAwLCBqKTtcbiAgICAgICAgICBmb3IgKHZhciBJID0gMDsgSSA8IFAubGVuZ3RoOyBJKyspXG4gICAgICAgICAgICBCW2hdLmFwcGVuZENoaWxkKFBbSV0pO1xuICAgICAgICB9LCBGID0gMDsgRiA8IEIubGVuZ3RoOyBGKyspXG4gICAgICAgICAgJChGKTtcbiAgICAgICAgcmV0dXJuIEEoeSwgQiksIEQuZGVmYXVsdCh5LnBhcmVudE5vZGUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24geChDLCBNKSB7XG4gICAgICAgIHZhciB5ID0gRShDKSwgQiA9ICgwLCBjLmRlZmF1bHQpKEFycmF5LnByb3RvdHlwZSkuYXBwbHkoeS5jaGlsZHJlbik7XG4gICAgICAgIHJldHVybiAoMCwgcC5kZWZhdWx0KShCKS5jYWxsKEIsIE0sIDEpLCBBKHksIEIpLCBELmRlZmF1bHQoeS5wYXJlbnROb2RlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFIoQywgTSkge1xuICAgICAgICBmb3IgKHZhciB5ID0gRShDKSwgQiA9ICgwLCBjLmRlZmF1bHQpKEFycmF5LnByb3RvdHlwZSkuYXBwbHkoeS5jaGlsZHJlbiksICQgPSBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgdmFyIE4sIFAgPSBbXTtcbiAgICAgICAgICBmb3IgKCgwLCB2LmRlZmF1bHQpKE4gPSAoMCwgYi5kZWZhdWx0KShCW2hdLmNoaWxkcmVuKSkuY2FsbChOLCBmdW5jdGlvbihJKSB7XG4gICAgICAgICAgICBQLnB1c2goSSk7XG4gICAgICAgICAgfSk7IEJbaF0uY2hpbGRyZW4ubGVuZ3RoICE9PSAwOyApXG4gICAgICAgICAgICBCW2hdLnJlbW92ZUNoaWxkKEJbaF0uY2hpbGRyZW5bMF0pO1xuICAgICAgICAgICgwLCBwLmRlZmF1bHQpKFApLmNhbGwoUCwgTSwgMSk7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBQLmxlbmd0aDsgaisrKVxuICAgICAgICAgICAgQltoXS5hcHBlbmRDaGlsZChQW2pdKTtcbiAgICAgICAgfSwgRiA9IDA7IEYgPCBCLmxlbmd0aDsgRisrKVxuICAgICAgICAgICQoRik7XG4gICAgICAgIHJldHVybiBBKHksIEIpLCBELmRlZmF1bHQoeS5wYXJlbnROb2RlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHcoQywgTSwgeSkge1xuICAgICAgICBmb3IgKHZhciBCID0gRShDKSwgJCA9ICgwLCBjLmRlZmF1bHQpKEFycmF5LnByb3RvdHlwZSkuYXBwbHkoQi5jaGlsZHJlbiksIEYgPSAkW01dLmNoaWxkcmVuLCBrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRyXCIpLCBoID0gZnVuY3Rpb24oaikge1xuICAgICAgICAgIHZhciBJLCBWID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh5KSwgVyA9IEZbal07XG4gICAgICAgICAgKDAsIHYuZGVmYXVsdCkoSSA9ICgwLCBiLmRlZmF1bHQpKFcuY2hpbGROb2RlcykpLmNhbGwoSSwgZnVuY3Rpb24oUSkge1xuICAgICAgICAgICAgVi5hcHBlbmRDaGlsZChRKTtcbiAgICAgICAgICB9KSwgay5hcHBlbmRDaGlsZChWKTtcbiAgICAgICAgfSwgTiA9IDA7IE4gPCBGLmxlbmd0aDsgTisrKVxuICAgICAgICAgIGgoTik7XG4gICAgICAgIHJldHVybiAoMCwgcC5kZWZhdWx0KSgkKS5jYWxsKCQsIE0sIDEsIGspLCBBKEIsICQpLCBELmRlZmF1bHQoQi5wYXJlbnROb2RlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEEoQywgTSkge1xuICAgICAgICBmb3IgKDsgQy5jaGlsZHJlbi5sZW5ndGggIT09IDA7IClcbiAgICAgICAgICBDLnJlbW92ZUNoaWxkKEMuY2hpbGRyZW5bMF0pO1xuICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IE0ubGVuZ3RoOyB5KyspXG4gICAgICAgICAgQy5hcHBlbmRDaGlsZChNW3ldKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEUoQykge1xuICAgICAgICB2YXIgTSA9IEMuZWxlbXNbMF0uY2hpbGRyZW5bMF07XG4gICAgICAgIHJldHVybiBNLm5vZGVOYW1lID09PSBcIkNPTEdST1VQXCIgJiYgKE0gPSBDLmVsZW1zWzBdLmNoaWxkcmVuW0MuZWxlbXNbMF0uY2hpbGRyZW4ubGVuZ3RoIC0gMV0pLCBNO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0geyBQcm9jZXNzaW5nUm93OiBULCBQcm9jZXNzaW5nQ29sOiBtLCBEZWxldGVSb3c6IHgsIERlbGV0ZUNvbDogUiwgc2V0VGhlSGVhZGVyOiB3IH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDM5Nik7XG4gICAgICBvLmV4cG9ydHMgPSBzO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHQoNTApLCB0KDM5Nyk7XG4gICAgICB2YXIgcyA9IHQoOSk7XG4gICAgICBvLmV4cG9ydHMgPSBzLkFycmF5LmZyb207XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDUpLCBkID0gdCgzOTgpLCBjID0gdCgxMTQpLCBwID0gIWMoZnVuY3Rpb24odikge1xuICAgICAgICBBcnJheS5mcm9tKHYpO1xuICAgICAgfSk7XG4gICAgICBzKHsgdGFyZ2V0OiBcIkFycmF5XCIsIHN0YXQ6ICEwLCBmb3JjZWQ6IHAgfSwgeyBmcm9tOiBkIH0pO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgzOSksIGQgPSB0KDI5KSwgYyA9IHQoMTEzKSwgcCA9IHQoMTExKSwgdiA9IHQoMzQpLCBiID0gdCg2OSksIFMgPSB0KDExMik7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihUKSB7XG4gICAgICAgIHZhciBtID0gZChUKSwgeCA9IHR5cGVvZiB0aGlzID09IFwiZnVuY3Rpb25cIiA/IHRoaXMgOiBBcnJheSwgUiA9IGFyZ3VtZW50cy5sZW5ndGgsIHcgPSBSID4gMSA/IGFyZ3VtZW50c1sxXSA6IHZvaWQgMCwgQSA9IHcgIT09IHZvaWQgMCwgRSA9IFMobSksIEMgPSAwLCBNLCB5LCBCLCAkLCBGLCBrO1xuICAgICAgICBpZiAoQSAmJiAodyA9IHModywgUiA+IDIgPyBhcmd1bWVudHNbMl0gOiB2b2lkIDAsIDIpKSwgRSAhPSBudWxsICYmICEoeCA9PSBBcnJheSAmJiBwKEUpKSlcbiAgICAgICAgICBmb3IgKCQgPSBFLmNhbGwobSksIEYgPSAkLm5leHQsIHkgPSBuZXcgeCgpOyAhKEIgPSBGLmNhbGwoJCkpLmRvbmU7IEMrKylcbiAgICAgICAgICAgIGsgPSBBID8gYygkLCB3LCBbQi52YWx1ZSwgQ10sICEwKSA6IEIudmFsdWUsIGIoeSwgQywgayk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBmb3IgKE0gPSB2KG0ubGVuZ3RoKSwgeSA9IG5ldyB4KE0pOyBNID4gQzsgQysrKVxuICAgICAgICAgICAgayA9IEEgPyB3KG1bQ10sIEMpIDogbVtDXSwgYih5LCBDLCBrKTtcbiAgICAgICAgcmV0dXJuIHkubGVuZ3RoID0gQywgeTtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCg0KSksIHAgPSBzKHQoMTM4KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgdiA9IHQoMiksIGIgPSB2Ll9faW1wb3J0RGVmYXVsdCh0KDMpKSwgUyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmdW5jdGlvbiBEKFQpIHtcbiAgICAgICAgICB0aGlzLmVkaXRvciA9IFQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEQucHJvdG90eXBlLmdldFJvd05vZGUgPSBmdW5jdGlvbihUKSB7XG4gICAgICAgICAgdmFyIG0sIHggPSBiLmRlZmF1bHQoVCkuZWxlbXNbMF07XG4gICAgICAgICAgcmV0dXJuIHgucGFyZW50Tm9kZSAmJiAoeCA9IChtID0gYi5kZWZhdWx0KHgpLnBhcmVudFVudGlsKFwiVFJcIiwgeCkpID09PSBudWxsIHx8IG0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG0uZWxlbXNbMF0pLCB4O1xuICAgICAgICB9LCBELnByb3RvdHlwZS5nZXRDdXJyZW50Um93SW5kZXggPSBmdW5jdGlvbihULCBtKSB7XG4gICAgICAgICAgdmFyIHgsIFIgPSAwLCB3ID0gVC5jaGlsZHJlblswXTtcbiAgICAgICAgICByZXR1cm4gdy5ub2RlTmFtZSA9PT0gXCJDT0xHUk9VUFwiICYmICh3ID0gVC5jaGlsZHJlbltULmNoaWxkcmVuLmxlbmd0aCAtIDFdKSwgKDAsIGMuZGVmYXVsdCkoeCA9ICgwLCBwLmRlZmF1bHQpKHcuY2hpbGRyZW4pKS5jYWxsKHgsIGZ1bmN0aW9uKEEsIEUpIHtcbiAgICAgICAgICAgIEEgPT09IG0gJiYgKFIgPSBFKTtcbiAgICAgICAgICB9KSwgUjtcbiAgICAgICAgfSwgRC5wcm90b3R5cGUuZ2V0Q3VycmVudENvbEluZGV4ID0gZnVuY3Rpb24oVCkge1xuICAgICAgICAgIHZhciBtLCB4LCBSID0gMCwgdyA9IGIuZGVmYXVsdChUKS5nZXROb2RlTmFtZSgpID09PSBcIlREXCIgfHwgYi5kZWZhdWx0KFQpLmdldE5vZGVOYW1lKCkgPT09IFwiVEhcIiA/IFQgOiAoeCA9IGIuZGVmYXVsdChUKS5wYXJlbnRVbnRpbChcIlREXCIsIFQpKSA9PT0gbnVsbCB8fCB4ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB4LmVsZW1zWzBdLCBBID0gYi5kZWZhdWx0KHcpLnBhcmVudCgpO1xuICAgICAgICAgIHJldHVybiAoMCwgYy5kZWZhdWx0KShtID0gKDAsIHAuZGVmYXVsdCkoQS5lbGVtc1swXS5jaGlsZHJlbikpLmNhbGwobSwgZnVuY3Rpb24oRSwgQykge1xuICAgICAgICAgICAgRSA9PT0gdyAmJiAoUiA9IEMpO1xuICAgICAgICAgIH0pLCBSO1xuICAgICAgICB9LCBELnByb3RvdHlwZS5nZXRUYWJsZUh0bWwgPSBmdW5jdGlvbihUKSB7XG4gICAgICAgICAgdmFyIG0gPSAnPHRhYmxlIGJvcmRlcj1cIjBcIiB3aWR0aD1cIjEwMCVcIiBjZWxscGFkZGluZz1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIj4nICsgYi5kZWZhdWx0KFQpLmh0bWwoKSArIFwiPC90YWJsZT5cIjtcbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfSwgRDtcbiAgICAgIH0oKTtcbiAgICAgIGkuZGVmYXVsdCA9IFM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KSwgaS5iaW5kRXZlbnRLZXlib2FyZEV2ZW50ID0gaS5iaW5kQ2xpY2tFdmVudCA9IHZvaWQgMDtcbiAgICAgIHZhciBjID0gdCgyKSwgcCA9IGMuX19pbXBvcnREZWZhdWx0KHQoMykpO1xuICAgICAgZnVuY3Rpb24gdihEKSB7XG4gICAgICAgIGlmICghRC5sZW5ndGgpXG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB2YXIgVCA9IEQuZWxlbXNbMF07XG4gICAgICAgIHJldHVybiBULm5vZGVOYW1lID09PSBcIlBcIiAmJiBULmlubmVySFRNTCA9PT0gXCI8YnI+XCI7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBiKEQpIHtcbiAgICAgICAgZnVuY3Rpb24gVChtLCB4KSB7XG4gICAgICAgICAgaWYgKHguZGV0YWlsID49IDMpIHtcbiAgICAgICAgICAgIHZhciBSID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgaWYgKFIpIHtcbiAgICAgICAgICAgICAgdmFyIHcgPSBSLmZvY3VzTm9kZSwgQSA9IFIuYW5jaG9yTm9kZSwgRSA9IHAuZGVmYXVsdChBID09IG51bGwgPyB2b2lkIDAgOiBBLnBhcmVudEVsZW1lbnQpO1xuICAgICAgICAgICAgICBpZiAoIW0uaXNDb250YWluKHAuZGVmYXVsdCh3KSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgQyA9IEUuZWxlbXNbMF0udGFnTmFtZSA9PT0gXCJURFwiID8gRSA6IEUucGFyZW50VW50aWxFZGl0b3IoXCJ0ZFwiLCBEKTtcbiAgICAgICAgICAgICAgICBpZiAoQykge1xuICAgICAgICAgICAgICAgICAgdmFyIE0gPSBELnNlbGVjdGlvbi5nZXRSYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgTSA9PSBudWxsIHx8IE0uc2V0RW5kKEMuZWxlbXNbMF0sIEMuZWxlbXNbMF0uY2hpbGROb2Rlcy5sZW5ndGgpLCBELnNlbGVjdGlvbi5yZXN0b3JlU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEQudHh0LmV2ZW50SG9va3MudGFibGVDbGlja0V2ZW50cy5wdXNoKFQpO1xuICAgICAgfVxuICAgICAgaS5iaW5kQ2xpY2tFdmVudCA9IGI7XG4gICAgICBmdW5jdGlvbiBTKEQpIHtcbiAgICAgICAgdmFyIFQgPSBELnR4dCwgbSA9IEQuc2VsZWN0aW9uLCB4ID0gVC5ldmVudEhvb2tzLmtleWRvd25FdmVudHM7XG4gICAgICAgIHgucHVzaChmdW5jdGlvbihSKSB7XG4gICAgICAgICAgRC5zZWxlY3Rpb24uc2F2ZVJhbmdlKCk7XG4gICAgICAgICAgdmFyIHcgPSBtLmdldFNlbGVjdGlvbkNvbnRhaW5lckVsZW0oKTtcbiAgICAgICAgICBpZiAodykge1xuICAgICAgICAgICAgdmFyIEEgPSB3LmdldE5vZGVUb3AoRCksIEUgPSBBLmxlbmd0aCAmJiBBLnByZXYoKS5sZW5ndGggPyBBLnByZXYoKSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoRSAmJiBFLmdldE5vZGVOYW1lKCkgPT09IFwiVEFCTEVcIiAmJiBtLmlzU2VsZWN0aW9uRW1wdHkoKSAmJiBtLmdldEN1cnNvclBvcygpID09PSAwICYmIFIua2V5Q29kZSA9PT0gOCkge1xuICAgICAgICAgICAgICB2YXIgQyA9IEEubmV4dCgpLCBNID0gISFDLmxlbmd0aDtcbiAgICAgICAgICAgICAgTSAmJiB2KEEpICYmIChBLnJlbW92ZSgpLCBELnNlbGVjdGlvbi5zZXRSYW5nZVRvRWxlbShDLmVsZW1zWzBdKSksIFIucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaS5iaW5kRXZlbnRLZXlib2FyZEV2ZW50ID0gUztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDI2KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSksIGkuZm9ybWF0Q29kZUh0bWwgPSB2b2lkIDA7XG4gICAgICB2YXIgcCA9IHQoMiksIHYgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDM3KSksIGIgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgUyA9IHQoNiksIEQgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDQwMikpLCBUID0gcC5fX2ltcG9ydERlZmF1bHQodCgxMzkpKSwgbSA9IHAuX19pbXBvcnREZWZhdWx0KHQoMzIpKSwgeCA9IHAuX19pbXBvcnREZWZhdWx0KHQoNDAzKSk7XG4gICAgICBmdW5jdGlvbiBSKEEsIEUpIHtcbiAgICAgICAgaWYgKCFFKVxuICAgICAgICAgIHJldHVybiBFO1xuICAgICAgICByZXR1cm4gRSA9IE0oRSksIEUgPSBDKEUpLCBFID0gUy5yZXBsYWNlU3BlY2lhbFN5bWJvbChFKSwgRTtcbiAgICAgICAgZnVuY3Rpb24gQyh5KSB7XG4gICAgICAgICAgdmFyIEIgPSB5Lm1hdGNoKC88cHJlW1xcc3xcXFNdKz9cXC9wcmU+L2cpO1xuICAgICAgICAgIHJldHVybiBCID09PSBudWxsIHx8ICgwLCBjLmRlZmF1bHQpKEIpLmNhbGwoQiwgZnVuY3Rpb24oJCkge1xuICAgICAgICAgICAgeSA9IHkucmVwbGFjZSgkLCAkLnJlcGxhY2UoLzxcXC9jb2RlPjxjb2RlPi9nLCBgXG5gKS5yZXBsYWNlKC88YnI+L2csIFwiXCIpKTtcbiAgICAgICAgICB9KSwgeTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBNKHkpIHtcbiAgICAgICAgICB2YXIgQiwgJCA9IHkubWF0Y2goLzxzcGFuXFxzY2xhc3M9XCJobGpzW1xcc3xcXFNdKz9cXC9zcGFuPi9nbSk7XG4gICAgICAgICAgaWYgKCEkIHx8ICEkLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiB5O1xuICAgICAgICAgIGZvciAodmFyIEYgPSAoMCwgYy5kZWZhdWx0KShCID0gUy5kZWVwQ2xvbmUoJCkpLmNhbGwoQiwgZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgcmV0dXJuIGggPSBoLnJlcGxhY2UoLzxzcGFuXFxzY2xhc3M9XCJobGpzW14+XSs+LywgXCJcIiksIGgucmVwbGFjZSgvPFxcL3NwYW4+LywgXCJcIik7XG4gICAgICAgICAgfSksIGsgPSAwOyBrIDwgJC5sZW5ndGg7IGsrKylcbiAgICAgICAgICAgIHkgPSB5LnJlcGxhY2UoJFtrXSwgRltrXSk7XG4gICAgICAgICAgcmV0dXJuIE0oeSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkuZm9ybWF0Q29kZUh0bWwgPSBSO1xuICAgICAgdmFyIHcgPSBmdW5jdGlvbihBKSB7XG4gICAgICAgIHAuX19leHRlbmRzKEUsIEEpO1xuICAgICAgICBmdW5jdGlvbiBFKEMpIHtcbiAgICAgICAgICB2YXIgTSA9IHRoaXMsIHkgPSBiLmRlZmF1bHQoJzxkaXYgY2xhc3M9XCJ3LWUtbWVudVwiIGRhdGEtdGl0bGU9XCJcXHU0RUUzXFx1NzgwMVwiPjxpIGNsYXNzPVwidy1lLWljb24tdGVybWluYWxcIj48L2k+PC9kaXY+Jyk7XG4gICAgICAgICAgcmV0dXJuIE0gPSBBLmNhbGwodGhpcywgeSwgQykgfHwgdGhpcywgeC5kZWZhdWx0KEMpLCBNO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFLnByb3RvdHlwZS5pbnNlcnRMaW5lQ29kZSA9IGZ1bmN0aW9uKEMpIHtcbiAgICAgICAgICB2YXIgTSA9IHRoaXMuZWRpdG9yLCB5ID0gYi5kZWZhdWx0KFwiPGNvZGU+XCIgKyBDICsgXCI8L2NvZGU+XCIpO1xuICAgICAgICAgIE0uY21kLmRvKFwiaW5zZXJ0RWxlbVwiLCB5KSwgTS5zZWxlY3Rpb24uY3JlYXRlUmFuZ2VCeUVsZW0oeSwgITEpLCBNLnNlbGVjdGlvbi5yZXN0b3JlU2VsZWN0aW9uKCk7XG4gICAgICAgIH0sIEUucHJvdG90eXBlLmNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBDID0gdGhpcy5lZGl0b3IsIE0gPSBDLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25UZXh0KCk7XG4gICAgICAgICAgdGhpcy5pc0FjdGl2ZSB8fCAoQy5zZWxlY3Rpb24uaXNTZWxlY3Rpb25FbXB0eSgpID8gdGhpcy5jcmVhdGVQYW5lbChcIlwiLCBcIlwiKSA6IHRoaXMuaW5zZXJ0TGluZUNvZGUoTSkpO1xuICAgICAgICB9LCBFLnByb3RvdHlwZS5jcmVhdGVQYW5lbCA9IGZ1bmN0aW9uKEMsIE0pIHtcbiAgICAgICAgICB2YXIgeSA9IEQuZGVmYXVsdCh0aGlzLmVkaXRvciwgQywgTSksIEIgPSBuZXcgbS5kZWZhdWx0KHRoaXMsIHkpO1xuICAgICAgICAgIEIuY3JlYXRlKCk7XG4gICAgICAgIH0sIEUucHJvdG90eXBlLnRyeUNoYW5nZUFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBDID0gdGhpcy5lZGl0b3I7XG4gICAgICAgICAgVC5kZWZhdWx0KEMpID8gdGhpcy5hY3RpdmUoKSA6IHRoaXMudW5BY3RpdmUoKTtcbiAgICAgICAgfSwgRTtcbiAgICAgIH0odi5kZWZhdWx0KTtcbiAgICAgIGkuZGVmYXVsdCA9IHc7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCgyNikpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIHAgPSB0KDIpLCB2ID0gdCg2KSwgYiA9IHAuX19pbXBvcnREZWZhdWx0KHQoMykpLCBTID0gcC5fX2ltcG9ydERlZmF1bHQodCgxMzkpKSwgRCA9IHQoNyk7XG4gICAgICBmdW5jdGlvbiBUKG0sIHgsIFIpIHtcbiAgICAgICAgdmFyIHcsIEEgPSB2LmdldFJhbmRvbShcImlucHV0LWlmcmFtZVwiKSwgRSA9IHYuZ2V0UmFuZG9tKFwic2VsZWN0XCIpLCBDID0gdi5nZXRSYW5kb20oXCJidG4tb2tcIik7XG4gICAgICAgIGZ1bmN0aW9uIE0oRikge1xuICAgICAgICAgIHZhciBrLCBoID0gUy5kZWZhdWx0KG0pO1xuICAgICAgICAgIGggJiYgeSgpO1xuICAgICAgICAgIHZhciBOID0gKGsgPSBtLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25TdGFydEVsZW0oKSkgPT09IG51bGwgfHwgayA9PT0gdm9pZCAwID8gdm9pZCAwIDogay5lbGVtc1swXS5pbm5lckhUTUw7XG4gICAgICAgICAgTiAmJiBtLmNtZC5kbyhcImluc2VydEhUTUxcIiwgRC5FTVBUWV9QKSwgbS5jbWQuZG8oXCJpbnNlcnRIVE1MXCIsIEYpO1xuICAgICAgICAgIHZhciBQID0gbS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uU3RhcnRFbGVtKCksIGogPSBQID09IG51bGwgPyB2b2lkIDAgOiBQLmdldE5vZGVUb3AobSk7XG4gICAgICAgICAgKGogPT0gbnVsbCA/IHZvaWQgMCA6IGouZ2V0TmV4dFNpYmxpbmcoKS5lbGVtcy5sZW5ndGgpID09PSAwICYmIGIuZGVmYXVsdChELkVNUFRZX1ApLmluc2VydEFmdGVyKGopO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHkoKSB7XG4gICAgICAgICAgaWYgKCEhUy5kZWZhdWx0KG0pKSB7XG4gICAgICAgICAgICB2YXIgRiA9IG0uc2VsZWN0aW9uLmdldFNlbGVjdGlvblN0YXJ0RWxlbSgpLCBrID0gRiA9PSBudWxsID8gdm9pZCAwIDogRi5nZXROb2RlVG9wKG0pO1xuICAgICAgICAgICAgIWsgfHwgKG0uc2VsZWN0aW9uLmNyZWF0ZVJhbmdlQnlFbGVtKGspLCBtLnNlbGVjdGlvbi5yZXN0b3JlU2VsZWN0aW9uKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgQiA9IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICByZXR1cm4gbS5pMThuZXh0LnQoayk7XG4gICAgICAgIH0sICQgPSB7XG4gICAgICAgICAgd2lkdGg6IDUwMCxcbiAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgdGFiczogW3tcbiAgICAgICAgICAgIHRpdGxlOiBCKFwibWVudXMucGFuZWxNZW51cy5jb2RlLlxcdTYzRDJcXHU1MTY1XFx1NEVFM1xcdTc4MDFcIiksXG4gICAgICAgICAgICB0cGw6IGA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiXCIgaWQ9XCJgICsgRSArIGBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgICsgKDAsIGMuZGVmYXVsdCkodyA9IG0uY29uZmlnLmxhbmd1YWdlVHlwZSkuY2FsbCh3LCBmdW5jdGlvbihGKSB7XG4gICAgICAgICAgICAgIHJldHVybiBcIjxvcHRpb24gXCIgKyAoUiA9PSBGID8gXCJzZWxlY3RlZFwiIDogXCJcIikgKyAnIHZhbHVlID1cIicgKyBGICsgJ1wiPicgKyBGICsgXCI8L29wdGlvbj5cIjtcbiAgICAgICAgICAgIH0pICsgYFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJgICsgQSArICdcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwid2FuZy1jb2RlLXRleHRhcmVhXCIgcGxhY2Vob2xkZXI9XCJcIiBzdHlsZT1cImhlaWdodDogMTYwcHhcIj4nICsgeC5yZXBsYWNlKC8mcXVvdDsvZywgJ1wiJykgKyBgPC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWUtYnV0dG9uLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYCArIEMgKyAnXCIgY2xhc3M9XCJyaWdodFwiPicgKyAoUy5kZWZhdWx0KG0pID8gQihcIlxcdTRGRUVcXHU2NTM5XCIpIDogQihcIlxcdTYzRDJcXHU1MTY1XCIpKSArIGA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gLFxuICAgICAgICAgICAgZXZlbnRzOiBbXG4gICAgICAgICAgICAgIHsgc2VsZWN0b3I6IFwiI1wiICsgQywgdHlwZTogXCJjbGlja1wiLCBmbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGssIGgsIE4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChBKSwgUCA9IGIuZGVmYXVsdChcIiNcIiArIEUpLCBqID0gUC52YWwoKSwgSSA9IE4udmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKG0uaGlnaGxpZ2h0ID8gayA9IG0uaGlnaGxpZ2h0LmhpZ2hsaWdodEF1dG8oSSkudmFsdWUgOiBrID0gXCI8eG1wPlwiICsgSSArIFwiPC94bXA+XCIsICEhSSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiBTLmRlZmF1bHQobSkgPyAhMSA6IChoID0gJzxwcmU+PGNvZGUgY2xhc3M9XCInICsgaiArICdcIj4nICsgayArIFwiPC9jb2RlPjwvcHJlPlwiLCBNKGgpLCAhMCk7XG4gICAgICAgICAgICAgIH0gfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiAkO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gVDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSB0KDIpLCBwID0gYy5fX2ltcG9ydERlZmF1bHQodCg0MDQpKSwgdiA9IGMuX19pbXBvcnREZWZhdWx0KHQoNDA1KSk7XG4gICAgICBmdW5jdGlvbiBiKFMpIHtcbiAgICAgICAgcC5kZWZhdWx0KFMpLCB2LmRlZmF1bHQoUyk7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSBiO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSksIGkuY3JlYXRlU2hvd0hpZGVGbiA9IHZvaWQgMDtcbiAgICAgIHZhciBjID0gdCgyKSwgcCA9IGMuX19pbXBvcnREZWZhdWx0KHQoMykpLCB2ID0gYy5fX2ltcG9ydERlZmF1bHQodCgzOCkpO1xuICAgICAgZnVuY3Rpb24gYihEKSB7XG4gICAgICAgIHZhciBUO1xuICAgICAgICBmdW5jdGlvbiBtKFIpIHtcbiAgICAgICAgICB2YXIgdyA9IFwibWVudXMucGFuZWxNZW51cy5jb2RlLlwiLCBBID0gZnVuY3Rpb24oTSwgeSkge1xuICAgICAgICAgICAgcmV0dXJuIHkgPT09IHZvaWQgMCAmJiAoeSA9IHcpLCBELmkxOG5leHQudCh5ICsgTSk7XG4gICAgICAgICAgfSwgRSA9IFt7ICRlbGVtOiBwLmRlZmF1bHQoXCI8c3Bhbj5cIiArIEEoXCJcXHU1MjIwXFx1OTY2NFxcdTRFRTNcXHU3ODAxXCIpICsgXCI8L3NwYW4+XCIpLCBvbkNsaWNrOiBmdW5jdGlvbihNLCB5KSB7XG4gICAgICAgICAgICByZXR1cm4geS5yZW1vdmUoKSwgITA7XG4gICAgICAgICAgfSB9XTtcbiAgICAgICAgICBUID0gbmV3IHYuZGVmYXVsdChELCBSLCBFKSwgVC5jcmVhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB4KCkge1xuICAgICAgICAgIFQgJiYgKFQucmVtb3ZlKCksIFQgPSBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzaG93Q29kZVRvb2x0aXA6IG0sIGhpZGVDb2RlVG9vbHRpcDogeCB9O1xuICAgICAgfVxuICAgICAgaS5jcmVhdGVTaG93SGlkZUZuID0gYjtcbiAgICAgIGZ1bmN0aW9uIFMoRCkge1xuICAgICAgICB2YXIgVCA9IGIoRCksIG0gPSBULnNob3dDb2RlVG9vbHRpcCwgeCA9IFQuaGlkZUNvZGVUb29sdGlwO1xuICAgICAgICBELnR4dC5ldmVudEhvb2tzLmNvZGVDbGlja0V2ZW50cy5wdXNoKG0pLCBELnR4dC5ldmVudEhvb2tzLmNsaWNrRXZlbnRzLnB1c2goeCksIEQudHh0LmV2ZW50SG9va3MudG9vbGJhckNsaWNrRXZlbnRzLnB1c2goeCksIEQudHh0LmV2ZW50SG9va3MubWVudUNsaWNrRXZlbnRzLnB1c2goeCksIEQudHh0LmV2ZW50SG9va3MudGV4dFNjcm9sbEV2ZW50cy5wdXNoKHgpO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gUztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSB0KDIpLCBwID0gdCg3KSwgdiA9IGMuX19pbXBvcnREZWZhdWx0KHQoMykpO1xuICAgICAgZnVuY3Rpb24gYihTKSB7XG4gICAgICAgIHZhciBEID0gUy4kdGV4dEVsZW0sIFQgPSBTLnNlbGVjdGlvbiwgbSA9IFMudHh0LCB4ID0gbS5ldmVudEhvb2tzLmtleWRvd25FdmVudHM7XG4gICAgICAgIHgucHVzaChmdW5jdGlvbihSKSB7XG4gICAgICAgICAgdmFyIHc7XG4gICAgICAgICAgaWYgKFIua2V5Q29kZSA9PT0gNDApIHtcbiAgICAgICAgICAgIHZhciBBID0gVC5nZXRTZWxlY3Rpb25Db250YWluZXJFbGVtKCksIEUgPSAodyA9IEQuY2hpbGRyZW4oKSkgPT09IG51bGwgfHwgdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogdy5sYXN0KCk7XG4gICAgICAgICAgICBpZiAoKEEgPT0gbnVsbCA/IHZvaWQgMCA6IEEuZWxlbXNbMF0udGFnTmFtZSkgPT09IFwiWE1QXCIgJiYgKEUgPT0gbnVsbCA/IHZvaWQgMCA6IEUuZWxlbXNbMF0udGFnTmFtZSkgPT09IFwiUFJFXCIpIHtcbiAgICAgICAgICAgICAgdmFyIEMgPSB2LmRlZmF1bHQocC5FTVBUWV9QKTtcbiAgICAgICAgICAgICAgRC5hcHBlbmQoQyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSwgeC5wdXNoKGZ1bmN0aW9uKFIpIHtcbiAgICAgICAgICBTLnNlbGVjdGlvbi5zYXZlUmFuZ2UoKTtcbiAgICAgICAgICB2YXIgdyA9IFQuZ2V0U2VsZWN0aW9uQ29udGFpbmVyRWxlbSgpO1xuICAgICAgICAgIGlmICh3KSB7XG4gICAgICAgICAgICB2YXIgQSA9IHcuZ2V0Tm9kZVRvcChTKSwgRSA9IEEgPT0gbnVsbCA/IHZvaWQgMCA6IEEucHJldigpLCBDID0gQSA9PSBudWxsID8gdm9pZCAwIDogQS5nZXROZXh0U2libGluZygpO1xuICAgICAgICAgICAgaWYgKEUubGVuZ3RoICYmIChFID09IG51bGwgPyB2b2lkIDAgOiBFLmdldE5vZGVOYW1lKCkpID09PSBcIlBSRVwiICYmIEMubGVuZ3RoID09PSAwICYmIFQuZ2V0Q3Vyc29yUG9zKCkgPT09IDAgJiYgUi5rZXlDb2RlID09PSA4KSB7XG4gICAgICAgICAgICAgIHZhciBNID0gdi5kZWZhdWx0KHAuRU1QVFlfUCk7XG4gICAgICAgICAgICAgIEQuYXBwZW5kKE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSBiO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDIzKSksIHYgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgYiA9IGMuX19pbXBvcnREZWZhdWx0KHQoNDA3KSksIFMgPSB0KDYpLCBEID0gdCg3KSwgVCA9IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgYy5fX2V4dGVuZHMoeCwgbSk7XG4gICAgICAgIGZ1bmN0aW9uIHgoUikge1xuICAgICAgICAgIHZhciB3ID0gdGhpcywgQSA9IHYuZGVmYXVsdCgnPGRpdiBjbGFzcz1cInctZS1tZW51XCIgZGF0YS10aXRsZT1cIlxcdTUyMDZcXHU1MjcyXFx1N0VCRlwiPjxpIGNsYXNzPVwidy1lLWljb24tc3BsaXQtbGluZVwiPjwvaT48L2Rpdj4nKTtcbiAgICAgICAgICByZXR1cm4gdyA9IG0uY2FsbCh0aGlzLCBBLCBSKSB8fCB0aGlzLCBiLmRlZmF1bHQoUiksIHc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHgucHJvdG90eXBlLmNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBSID0gdGhpcy5lZGl0b3IsIHcgPSBSLnNlbGVjdGlvbi5nZXRSYW5nZSgpLCBBID0gUi5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uQ29udGFpbmVyRWxlbSgpO1xuICAgICAgICAgIGlmICghIShBICE9IG51bGwgJiYgQS5sZW5ndGgpKSB7XG4gICAgICAgICAgICB2YXIgRSA9IHYuZGVmYXVsdChBLmVsZW1zWzBdKSwgQyA9IEUucGFyZW50VW50aWwoXCJUQUJMRVwiLCBBLmVsZW1zWzBdKSwgTSA9IEUuY2hpbGRyZW4oKTtcbiAgICAgICAgICAgIEUuZ2V0Tm9kZU5hbWUoKSAhPT0gXCJDT0RFXCIgJiYgKEMgJiYgdi5kZWZhdWx0KEMuZWxlbXNbMF0pLmdldE5vZGVOYW1lKCkgPT09IFwiVEFCTEVcIiB8fCBNICYmIE0ubGVuZ3RoICE9PSAwICYmIHYuZGVmYXVsdChNLmVsZW1zWzBdKS5nZXROb2RlTmFtZSgpID09PSBcIklNR1wiICYmICEodyAhPSBudWxsICYmIHcuY29sbGFwc2VkKSB8fCB0aGlzLmNyZWF0ZVNwbGl0TGluZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHgucHJvdG90eXBlLmNyZWF0ZVNwbGl0TGluZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBSID0gXCI8aHIvPlwiICsgRC5FTVBUWV9QO1xuICAgICAgICAgIFMuVUEuaXNGaXJlZm94ICYmIChSID0gXCI8aHIvPjxwPjwvcD5cIiksIHRoaXMuZWRpdG9yLmNtZC5kbyhcImluc2VydEhUTUxcIiwgUik7XG4gICAgICAgIH0sIHgucHJvdG90eXBlLnRyeUNoYW5nZUFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB9LCB4O1xuICAgICAgfShwLmRlZmF1bHQpO1xuICAgICAgaS5kZWZhdWx0ID0gVDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSB0KDIpLCBwID0gYy5fX2ltcG9ydERlZmF1bHQodCg0MDgpKTtcbiAgICAgIGZ1bmN0aW9uIHYoYikge1xuICAgICAgICBwLmRlZmF1bHQoYik7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSB2O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgdiA9IGMuX19pbXBvcnREZWZhdWx0KHQoMzgpKTtcbiAgICAgIGZ1bmN0aW9uIGIoRCkge1xuICAgICAgICB2YXIgVDtcbiAgICAgICAgZnVuY3Rpb24gbShSKSB7XG4gICAgICAgICAgdmFyIHcgPSBbeyAkZWxlbTogcC5kZWZhdWx0KFwiPHNwYW4+XCIgKyBELmkxOG5leHQudChcIm1lbnVzLnBhbmVsTWVudXMuXFx1NTIyMFxcdTk2NjRcIikgKyBcIjwvc3Bhbj5cIiksIG9uQ2xpY2s6IGZ1bmN0aW9uKEUsIEMpIHtcbiAgICAgICAgICAgIHJldHVybiBFLnNlbGVjdGlvbi5jcmVhdGVSYW5nZUJ5RWxlbShDKSwgRS5zZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvbigpLCBFLmNtZC5kbyhcImRlbGV0ZVwiKSwgITA7XG4gICAgICAgICAgfSB9XTtcbiAgICAgICAgICBUID0gbmV3IHYuZGVmYXVsdChELCBSLCB3KSwgVC5jcmVhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB4KCkge1xuICAgICAgICAgIFQgJiYgKFQucmVtb3ZlKCksIFQgPSBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzaG93U3BsaXRMaW5lVG9vbHRpcDogbSwgaGlkZVNwbGl0TGluZVRvb2x0aXA6IHggfTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFMoRCkge1xuICAgICAgICB2YXIgVCA9IGIoRCksIG0gPSBULnNob3dTcGxpdExpbmVUb29sdGlwLCB4ID0gVC5oaWRlU3BsaXRMaW5lVG9vbHRpcDtcbiAgICAgICAgRC50eHQuZXZlbnRIb29rcy5zcGxpdExpbmVFdmVudHMucHVzaChtKSwgRC50eHQuZXZlbnRIb29rcy5jbGlja0V2ZW50cy5wdXNoKHgpLCBELnR4dC5ldmVudEhvb2tzLmtleXVwRXZlbnRzLnB1c2goeCksIEQudHh0LmV2ZW50SG9va3MudG9vbGJhckNsaWNrRXZlbnRzLnB1c2goeCksIEQudHh0LmV2ZW50SG9va3MubWVudUNsaWNrRXZlbnRzLnB1c2goeCksIEQudHh0LmV2ZW50SG9va3MudGV4dFNjcm9sbEV2ZW50cy5wdXNoKHgpO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gUztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDQpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBwID0gdCgyKSwgdiA9IHAuX19pbXBvcnREZWZhdWx0KHQoMykpLCBiID0gcC5fX2ltcG9ydERlZmF1bHQodCgyMykpLCBTID0gdCg5NyksIEQgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDQxNSkpLCBUID0gcC5fX2ltcG9ydERlZmF1bHQodCgxNDApKSwgbSA9IGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgcC5fX2V4dGVuZHMoUiwgeCk7XG4gICAgICAgIGZ1bmN0aW9uIFIodykge1xuICAgICAgICAgIHZhciBBID0gdGhpcywgRSA9IHYuZGVmYXVsdChgPGRpdiBjbGFzcz1cInctZS1tZW51XCIgZGF0YS10aXRsZT1cIlxcdTVGODVcXHU1MjlFXFx1NEU4QlxcdTk4NzlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ3LWUtaWNvbi1jaGVja2JveC1jaGVja2VkXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICAgIHJldHVybiBBID0geC5jYWxsKHRoaXMsIEUsIHcpIHx8IHRoaXMsIEQuZGVmYXVsdCh3KSwgQTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUi5wcm90b3R5cGUuY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHcgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgICBTLmlzQWxsVG9kbyh3KSA/ICh0aGlzLmNhbmNlbFRvZG8oKSwgdGhpcy50cnlDaGFuZ2VBY3RpdmUoKSkgOiB0aGlzLnNldFRvZG8oKTtcbiAgICAgICAgfSwgUi5wcm90b3R5cGUudHJ5Q2hhbmdlQWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgUy5pc0FsbFRvZG8odGhpcy5lZGl0b3IpID8gdGhpcy5hY3RpdmUoKSA6IHRoaXMudW5BY3RpdmUoKTtcbiAgICAgICAgfSwgUi5wcm90b3R5cGUuc2V0VG9kbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciB3ID0gdGhpcy5lZGl0b3IsIEEgPSB3LnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25SYW5nZVRvcE5vZGVzKCk7XG4gICAgICAgICAgKDAsIGMuZGVmYXVsdCkoQSkuY2FsbChBLCBmdW5jdGlvbihFKSB7XG4gICAgICAgICAgICB2YXIgQywgTSA9IEUgPT0gbnVsbCA/IHZvaWQgMCA6IEUuZ2V0Tm9kZU5hbWUoKTtcbiAgICAgICAgICAgIGlmIChNID09PSBcIlBcIikge1xuICAgICAgICAgICAgICB2YXIgeSA9IFQuZGVmYXVsdChFKSwgQiA9IHkuZ2V0VG9kbygpLCAkID0gKEMgPSBCLmNoaWxkcmVuKCkpID09PSBudWxsIHx8IEMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IEMuZ2V0Tm9kZSgpO1xuICAgICAgICAgICAgICBCLmluc2VydEFmdGVyKEUpLCB3LnNlbGVjdGlvbi5tb3ZlQ3Vyc29yKCQpLCBFLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLCB0aGlzLnRyeUNoYW5nZUFjdGl2ZSgpO1xuICAgICAgICB9LCBSLnByb3RvdHlwZS5jYW5jZWxUb2RvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHcgPSB0aGlzLmVkaXRvciwgQSA9IHcuc2VsZWN0aW9uLmdldFNlbGVjdGlvblJhbmdlVG9wTm9kZXMoKTtcbiAgICAgICAgICAoMCwgYy5kZWZhdWx0KShBKS5jYWxsKEEsIGZ1bmN0aW9uKEUpIHtcbiAgICAgICAgICAgIHZhciBDLCBNLCB5LCBCID0gKE0gPSAoQyA9IEUuY2hpbGROb2RlcygpKSA9PT0gbnVsbCB8fCBDID09PSB2b2lkIDAgPyB2b2lkIDAgOiBDLmNoaWxkTm9kZXMoKSkgPT09IG51bGwgfHwgTSA9PT0gdm9pZCAwID8gdm9pZCAwIDogTS5jbG9uZSghMCksICQgPSB2LmRlZmF1bHQoXCI8cD48L3A+XCIpO1xuICAgICAgICAgICAgJC5hcHBlbmQoQiksICQuaW5zZXJ0QWZ0ZXIoRSksICh5ID0gJC5jaGlsZE5vZGVzKCkpID09PSBudWxsIHx8IHkgPT09IHZvaWQgMCB8fCB5LmdldCgwKS5yZW1vdmUoKSwgdy5zZWxlY3Rpb24ubW92ZUN1cnNvcigkLmdldE5vZGUoKSksIEUucmVtb3ZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIFI7XG4gICAgICB9KGIuZGVmYXVsdCk7XG4gICAgICBpLmRlZmF1bHQgPSBtO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIG8uZXhwb3J0cyA9IHQoNDExKTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNDEyKTtcbiAgICAgIG8uZXhwb3J0cyA9IHM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDQxMyksIGQgPSBBcnJheS5wcm90b3R5cGU7XG4gICAgICBvLmV4cG9ydHMgPSBmdW5jdGlvbihjKSB7XG4gICAgICAgIHZhciBwID0gYy5ldmVyeTtcbiAgICAgICAgcmV0dXJuIGMgPT09IGQgfHwgYyBpbnN0YW5jZW9mIEFycmF5ICYmIHAgPT09IGQuZXZlcnkgPyBzIDogcDtcbiAgICAgIH07XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdCg0MTQpO1xuICAgICAgdmFyIHMgPSB0KDE1KTtcbiAgICAgIG8uZXhwb3J0cyA9IHMoXCJBcnJheVwiKS5ldmVyeTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoNSksIGQgPSB0KDMwKS5ldmVyeSwgYyA9IHQoNjcpLCBwID0gdCgyMiksIHYgPSBjKFwiZXZlcnlcIiksIGIgPSBwKFwiZXZlcnlcIik7XG4gICAgICBzKHsgdGFyZ2V0OiBcIkFycmF5XCIsIHByb3RvOiAhMCwgZm9yY2VkOiAhdiB8fCAhYiB9LCB7IGV2ZXJ5OiBmdW5jdGlvbihEKSB7XG4gICAgICAgIHJldHVybiBkKHRoaXMsIEQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdm9pZCAwKTtcbiAgICAgIH0gfSk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCg0KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgcCA9IHQoMiksIHYgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgYiA9IHQoOTcpLCBTID0gcC5fX2ltcG9ydERlZmF1bHQodCgxNDApKSwgRCA9IHQoOTcpLCBUID0gdCg3KTtcbiAgICAgIGZ1bmN0aW9uIG0oeCkge1xuICAgICAgICBmdW5jdGlvbiBSKEMpIHtcbiAgICAgICAgICB2YXIgTSwgeTtcbiAgICAgICAgICBpZiAoYi5pc0FsbFRvZG8oeCkpIHtcbiAgICAgICAgICAgIEMucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHZhciBCID0geC5zZWxlY3Rpb24sICQgPSBCLmdldFNlbGVjdGlvblJhbmdlVG9wTm9kZXMoKVswXSwgRiA9IChNID0gJC5jaGlsZE5vZGVzKCkpID09PSBudWxsIHx8IE0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IE0uZ2V0KDApLCBrID0gKHkgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkpID09PSBudWxsIHx8IHkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHkuYW5jaG9yTm9kZSwgaCA9IEIuZ2V0UmFuZ2UoKTtcbiAgICAgICAgICAgIGlmICghKGggIT0gbnVsbCAmJiBoLmNvbGxhcHNlZCkpIHtcbiAgICAgICAgICAgICAgdmFyIE4gPSBoID09IG51bGwgPyB2b2lkIDAgOiBoLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLmNoaWxkTm9kZXMsIFAgPSBoID09IG51bGwgPyB2b2lkIDAgOiBoLnN0YXJ0Q29udGFpbmVyLCBqID0gaCA9PSBudWxsID8gdm9pZCAwIDogaC5lbmRDb250YWluZXIsIEkgPSBoID09IG51bGwgPyB2b2lkIDAgOiBoLnN0YXJ0T2Zmc2V0LCBWID0gaCA9PSBudWxsID8gdm9pZCAwIDogaC5lbmRPZmZzZXQsIFcgPSAwLCBRID0gMCwgWCA9IFtdO1xuICAgICAgICAgICAgICBOID09IG51bGwgfHwgKDAsIGMuZGVmYXVsdCkoTikuY2FsbChOLCBmdW5jdGlvbih0ZSwgZ2UpIHtcbiAgICAgICAgICAgICAgICB0ZS5jb250YWlucyhQKSAmJiAoVyA9IGdlKSwgdGUuY29udGFpbnMoaikgJiYgKFEgPSBnZSk7XG4gICAgICAgICAgICAgIH0pLCBRIC0gVyA+IDEgJiYgKE4gPT0gbnVsbCB8fCAoMCwgYy5kZWZhdWx0KShOKS5jYWxsKE4sIGZ1bmN0aW9uKHRlLCBnZSkge1xuICAgICAgICAgICAgICAgIGdlIDw9IFcgfHwgZ2UgPj0gUSB8fCBYLnB1c2godGUpO1xuICAgICAgICAgICAgICB9KSwgKDAsIGMuZGVmYXVsdCkoWCkuY2FsbChYLCBmdW5jdGlvbih0ZSkge1xuICAgICAgICAgICAgICAgIHRlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICB9KSksIEQuZGVhbFRleHROb2RlKFAsIEkpLCBELmRlYWxUZXh0Tm9kZShqLCBWLCAhMSksIHguc2VsZWN0aW9uLm1vdmVDdXJzb3IoaiwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoJC50ZXh0KCkgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgdmFyIEogPSB2LmRlZmF1bHQoVC5FTVBUWV9QKTtcbiAgICAgICAgICAgICAgSi5pbnNlcnRBZnRlcigkKSwgQi5tb3ZlQ3Vyc29yKEouZ2V0Tm9kZSgpKSwgJC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIFogPSBCLmdldEN1cnNvclBvcygpLCBkZSA9IGIuZ2V0Q3Vyc29yTmV4dE5vZGUoRiA9PSBudWxsID8gdm9pZCAwIDogRi5nZXROb2RlKCksIGssIFopLCB2ZSA9IFMuZGVmYXVsdCh2LmRlZmF1bHQoZGUpKSwgc2UgPSB2ZS5nZXRJbnB1dENvbnRhaW5lcigpLCBtZSA9IHNlLnBhcmVudCgpLmdldE5vZGUoKSwgbGUgPSB2ZS5nZXRUb2RvKCksIGllID0gc2UuZ2V0Tm9kZSgpLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgaWYgKChGID09IG51bGwgPyB2b2lkIDAgOiBGLnRleHQoKSkgPT09IFwiXCIgJiYgKEYgPT0gbnVsbCB8fCBGLmFwcGVuZCh2LmRlZmF1bHQoXCI8YnI+XCIpKSksIGxlLmluc2VydEFmdGVyKCQpLCAhaWUgfHwgKGllID09IG51bGwgPyB2b2lkIDAgOiBpZS50ZXh0Q29udGVudCkgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgaWYgKChpZSA9PSBudWxsID8gdm9pZCAwIDogaWUubm9kZU5hbWUpICE9PSBcIkJSXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGUgPSB2LmRlZmF1bHQoXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgIHBlLmluc2VydEFmdGVyKHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBCLm1vdmVDdXJzb3IobWUsIDEpO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIEIubW92ZUN1cnNvcihtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHcoQykge1xuICAgICAgICAgIHZhciBNLCB5O1xuICAgICAgICAgIGlmIChiLmlzQWxsVG9kbyh4KSkge1xuICAgICAgICAgICAgdmFyIEIgPSB4LnNlbGVjdGlvbiwgJCA9IEIuZ2V0U2VsZWN0aW9uUmFuZ2VUb3BOb2RlcygpWzBdLCBGID0gKE0gPSAkLmNoaWxkTm9kZXMoKSkgPT09IG51bGwgfHwgTSA9PT0gdm9pZCAwID8gdm9pZCAwIDogTS5nZXROb2RlKCksIGsgPSB2LmRlZmF1bHQoXCI8cD48L3A+XCIpLCBoID0gay5nZXROb2RlKCksIE4gPSAoeSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKSkgPT09IG51bGwgfHwgeSA9PT0gdm9pZCAwID8gdm9pZCAwIDogeS5hbmNob3JOb2RlLCBQID0gQi5nZXRDdXJzb3JQb3MoKSwgaiA9IE4ucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgaWYgKCQudGV4dCgpID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgIEMucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgdmFyIEkgPSB2LmRlZmF1bHQoVC5FTVBUWV9QKTtcbiAgICAgICAgICAgICAgSS5pbnNlcnRBZnRlcigkKSwgJC5yZW1vdmUoKSwgQi5tb3ZlQ3Vyc29yKEkuZ2V0Tm9kZSgpLCAwKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChqID09IG51bGwgPyB2b2lkIDAgOiBqLm5vZGVOYW1lKSA9PT0gXCJTUEFOXCIgJiYgai5jaGlsZE5vZGVzWzBdLm5vZGVOYW1lID09PSBcIklOUFVUXCIgJiYgUCA9PT0gMCkge1xuICAgICAgICAgICAgICB2YXIgVjtcbiAgICAgICAgICAgICAgQy5wcmV2ZW50RGVmYXVsdCgpLCBGID09IG51bGwgfHwgKDAsIGMuZGVmYXVsdCkoViA9IEYuY2hpbGROb2RlcykuY2FsbChWLCBmdW5jdGlvbihXLCBRKSB7XG4gICAgICAgICAgICAgICAgUSAhPT0gMCAmJiBoLmFwcGVuZENoaWxkKFcuY2xvbmVOb2RlKCEwKSk7XG4gICAgICAgICAgICAgIH0pLCBrLmluc2VydEFmdGVyKCQpLCAkLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBBKCkge1xuICAgICAgICAgIHZhciBDID0geC5zZWxlY3Rpb24sIE0gPSBDLmdldFNlbGVjdGlvblJhbmdlVG9wTm9kZXMoKVswXTtcbiAgICAgICAgICBNICYmIEQuaXNUb2RvKE0pICYmIE0udGV4dCgpID09PSBcIlwiICYmICh2LmRlZmF1bHQoVC5FTVBUWV9QKS5pbnNlcnRBZnRlcihNKSwgTS5yZW1vdmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gRShDKSB7XG4gICAgICAgICAgQyAmJiBDLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgQy50YXJnZXQudHlwZSA9PT0gXCJjaGVja2JveFwiICYmIChDLnRhcmdldC5jaGVja2VkID8gQy50YXJnZXQuc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCBcInRydWVcIikgOiBDLnRhcmdldC5yZW1vdmVBdHRyaWJ1dGUoXCJjaGVja2VkXCIpKTtcbiAgICAgICAgfVxuICAgICAgICB4LnR4dC5ldmVudEhvb2tzLmVudGVyRG93bkV2ZW50cy5wdXNoKFIpLCB4LnR4dC5ldmVudEhvb2tzLmRlbGV0ZVVwRXZlbnRzLnB1c2goQSksIHgudHh0LmV2ZW50SG9va3MuZGVsZXRlRG93bkV2ZW50cy5wdXNoKHcpLCB4LnR4dC5ldmVudEhvb2tzLmNsaWNrRXZlbnRzLnB1c2goRSk7XG4gICAgICB9XG4gICAgICBpLmRlZmF1bHQgPSBtO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSksIGkuc2VsZWN0b3JWYWxpZGF0b3IgPSB2b2lkIDA7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgdiA9IHQoNiksIGIgPSB0KDcpLCBTID0gYy5fX2ltcG9ydERlZmF1bHQodCgxMjkpKSwgRCA9IHsgYm9yZGVyOiBcIjFweCBzb2xpZCAjYzlkOGRiXCIsIHRvb2xiYXJCZ0NvbG9yOiBcIiNGRkZcIiwgdG9vbGJhckJvdHRvbUJvcmRlcjogXCIxcHggc29saWQgI0VFRVwiIH07XG4gICAgICBmdW5jdGlvbiBUKHgpIHtcbiAgICAgICAgdmFyIFIgPSB4LnRvb2xiYXJTZWxlY3RvciwgdyA9IHAuZGVmYXVsdChSKSwgQSA9IHgudGV4dFNlbGVjdG9yLCBFID0geC5jb25maWcsIEMgPSBFLmhlaWdodCwgTSA9IHguaTE4bmV4dCwgeSA9IHAuZGVmYXVsdChcIjxkaXY+PC9kaXY+XCIpLCBCID0gcC5kZWZhdWx0KFwiPGRpdj48L2Rpdj5cIiksICQsIEYsIGsgPSBudWxsO1xuICAgICAgICBBID09IG51bGwgPyAoRiA9IHcuY2hpbGRyZW4oKSwgdy5hcHBlbmQoeSkuYXBwZW5kKEIpLCB5LmNzcyhcImJhY2tncm91bmQtY29sb3JcIiwgRC50b29sYmFyQmdDb2xvcikuY3NzKFwiYm9yZGVyXCIsIEQuYm9yZGVyKS5jc3MoXCJib3JkZXItYm90dG9tXCIsIEQudG9vbGJhckJvdHRvbUJvcmRlciksIEIuY3NzKFwiYm9yZGVyXCIsIEQuYm9yZGVyKS5jc3MoXCJib3JkZXItdG9wXCIsIFwibm9uZVwiKS5jc3MoXCJoZWlnaHRcIiwgQyArIFwicHhcIikpIDogKHcuYXBwZW5kKHkpLCBrID0gcC5kZWZhdWx0KEEpLmNoaWxkcmVuKCksIHAuZGVmYXVsdChBKS5hcHBlbmQoQiksIEYgPSBCLmNoaWxkcmVuKCkpLCAkID0gcC5kZWZhdWx0KFwiPGRpdj48L2Rpdj5cIiksICQuYXR0cihcImNvbnRlbnRlZGl0YWJsZVwiLCBcInRydWVcIikuY3NzKFwid2lkdGhcIiwgXCIxMDAlXCIpLmNzcyhcImhlaWdodFwiLCBcIjEwMCVcIik7XG4gICAgICAgIHZhciBoLCBOID0geC5jb25maWcucGxhY2Vob2xkZXI7XG4gICAgICAgIE4gIT09IFMuZGVmYXVsdC5wbGFjZWhvbGRlciA/IGggPSBwLmRlZmF1bHQoXCI8ZGl2PlwiICsgTiArIFwiPC9kaXY+XCIpIDogaCA9IHAuZGVmYXVsdChcIjxkaXY+XCIgKyBNLnQoTikgKyBcIjwvZGl2PlwiKSwgaC5hZGRDbGFzcyhcInBsYWNlaG9sZGVyXCIpLCBGICYmIEYubGVuZ3RoID8gKCQuYXBwZW5kKEYpLCBoLmhpZGUoKSkgOiAkLmFwcGVuZChwLmRlZmF1bHQoYi5FTVBUWV9QKSksIGsgJiYgay5sZW5ndGggJiYgKCQuYXBwZW5kKGspLCBoLmhpZGUoKSksIEIuYXBwZW5kKCQpLCBCLmFwcGVuZChoKSwgeS5hZGRDbGFzcyhcInctZS10b29sYmFyXCIpLmNzcyhcInotaW5kZXhcIiwgeC56SW5kZXguZ2V0KFwidG9vbGJhclwiKSksIEIuYWRkQ2xhc3MoXCJ3LWUtdGV4dC1jb250YWluZXJcIiksIEIuY3NzKFwiei1pbmRleFwiLCB4LnpJbmRleC5nZXQoKSksICQuYWRkQ2xhc3MoXCJ3LWUtdGV4dFwiKTtcbiAgICAgICAgdmFyIFAgPSB2LmdldFJhbmRvbShcInRvb2xiYXItZWxlbVwiKTtcbiAgICAgICAgeS5hdHRyKFwiaWRcIiwgUCk7XG4gICAgICAgIHZhciBqID0gdi5nZXRSYW5kb20oXCJ0ZXh0LWVsZW1cIik7XG4gICAgICAgICQuYXR0cihcImlkXCIsIGopO1xuICAgICAgICB2YXIgSSA9IEIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LCBWID0gJC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgIEkgIT09IFYgJiYgJC5jc3MoXCJtaW4taGVpZ2h0XCIsIEkgKyBcInB4XCIpLCB4LiR0b29sYmFyRWxlbSA9IHksIHguJHRleHRDb250YWluZXJFbGVtID0gQiwgeC4kdGV4dEVsZW0gPSAkLCB4LnRvb2xiYXJFbGVtSWQgPSBQLCB4LnRleHRFbGVtSWQgPSBqO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gVDtcbiAgICAgIGZ1bmN0aW9uIG0oeCkge1xuICAgICAgICB2YXIgUiA9IFwiZGF0YS13ZS1pZFwiLCB3ID0gL153YW5nRWRpdG9yLVxcZCskLywgQSA9IHgudGV4dFNlbGVjdG9yLCBFID0geC50b29sYmFyU2VsZWN0b3IsIEMgPSB7IGJhcjogcC5kZWZhdWx0KFwiPGRpdj48L2Rpdj5cIiksIHRleHQ6IHAuZGVmYXVsdChcIjxkaXY+PC9kaXY+XCIpIH07XG4gICAgICAgIGlmIChFID09IG51bGwpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiXFx1OTUxOVxcdThCRUZcXHVGRjFBXFx1NTIxRFxcdTU5Q0JcXHU1MzE2XFx1N0YxNlxcdThGOTFcXHU1NjY4XFx1NjVGNlxcdTUwMTlcXHU2NzJBXFx1NEYyMFxcdTUxNjVcXHU0RUZCXFx1NEY1NVxcdTUzQzJcXHU2NTcwXFx1RkYwQ1xcdThCRjdcXHU2N0U1XFx1OTYwNVxcdTY1ODdcXHU2ODYzXCIpO1xuICAgICAgICBpZiAoQy5iYXIgPSBwLmRlZmF1bHQoRSksICFDLmJhci5lbGVtcy5sZW5ndGgpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiXFx1NjVFMFxcdTY1NDhcXHU3Njg0XFx1ODI4MlxcdTcwQjlcXHU5MDA5XFx1NjJFOVxcdTU2NjhcXHVGRjFBXCIgKyBFKTtcbiAgICAgICAgaWYgKHcudGVzdChDLmJhci5hdHRyKFIpKSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJcXHU1MjFEXFx1NTlDQlxcdTUzMTZcXHU4MjgyXFx1NzBCOVxcdTVERjJcXHU1QjU4XFx1NTcyOFxcdTdGMTZcXHU4RjkxXFx1NTY2OFxcdTVCOUVcXHU0RjhCXFx1RkYwQ1xcdTY1RTBcXHU2Q0Q1XFx1OTFDRFxcdTU5MERcXHU1MjFCXFx1NUVGQVxcdTdGMTZcXHU4RjkxXFx1NTY2OFwiKTtcbiAgICAgICAgaWYgKEEpIHtcbiAgICAgICAgICBpZiAoQy50ZXh0ID0gcC5kZWZhdWx0KEEpLCAhQy50ZXh0LmVsZW1zLmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlxcdTY1RTBcXHU2NTQ4XFx1NzY4NFxcdTgyODJcXHU3MEI5XFx1OTAwOVxcdTYyRTlcXHU1NjY4XFx1RkYxQVwiICsgQSk7XG4gICAgICAgICAgaWYgKHcudGVzdChDLnRleHQuYXR0cihSKSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJcXHU1MjFEXFx1NTlDQlxcdTUzMTZcXHU4MjgyXFx1NzBCOVxcdTVERjJcXHU1QjU4XFx1NTcyOFxcdTdGMTZcXHU4RjkxXFx1NTY2OFxcdTVCOUVcXHU0RjhCXFx1RkYwQ1xcdTY1RTBcXHU2Q0Q1XFx1OTFDRFxcdTU5MERcXHU1MjFCXFx1NUVGQVxcdTdGMTZcXHU4RjkxXFx1NTY2OFwiKTtcbiAgICAgICAgfVxuICAgICAgICBDLmJhci5hdHRyKFIsIHguaWQpLCBDLnRleHQuYXR0cihSLCB4LmlkKSwgeC5iZWZvcmVEZXN0cm95KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIEMuYmFyLnJlbW92ZUF0dHIoUiksIEMudGV4dC5yZW1vdmVBdHRyKFIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGkuc2VsZWN0b3JWYWxpZGF0b3IgPSBtO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgdiA9IHQoNyk7XG4gICAgICBmdW5jdGlvbiBiKFMsIEQpIHtcbiAgICAgICAgdmFyIFQgPSBTLiR0ZXh0RWxlbSwgbSA9IFQuY2hpbGRyZW4oKTtcbiAgICAgICAgaWYgKCFtIHx8ICFtLmxlbmd0aCkge1xuICAgICAgICAgIFQuYXBwZW5kKHAuZGVmYXVsdCh2LkVNUFRZX1ApKSwgYihTKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHggPSBtLmxhc3QoKTtcbiAgICAgICAgaWYgKEQpIHtcbiAgICAgICAgICB2YXIgUiA9IHguaHRtbCgpLnRvTG93ZXJDYXNlKCksIHcgPSB4LmdldE5vZGVOYW1lKCk7XG4gICAgICAgICAgaWYgKFIgIT09IFwiPGJyPlwiICYmIFIgIT09IFwiPGJyLz5cIiB8fCB3ICE9PSBcIlBcIikge1xuICAgICAgICAgICAgVC5hcHBlbmQocC5kZWZhdWx0KHYuRU1QVFlfUCkpLCBiKFMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBTLnNlbGVjdGlvbi5jcmVhdGVSYW5nZUJ5RWxlbSh4LCAhMSwgITApLCBTLmNvbmZpZy5mb2N1cyA/IFMuc2VsZWN0aW9uLnJlc3RvcmVTZWxlY3Rpb24oKSA6IFMuc2VsZWN0aW9uLmNsZWFyV2luZG93U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgIH1cbiAgICAgIGkuZGVmYXVsdCA9IGI7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCg0KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgcCA9IHQoMiksIHYgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMpKTtcbiAgICAgIGZ1bmN0aW9uIGIoUikge1xuICAgICAgICBTKFIpLCBEKFIpLCBUKFIpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gUyhSKSB7XG4gICAgICAgIFIudHh0LmV2ZW50SG9va3MuY2hhbmdlRXZlbnRzLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHcgPSBSLmNvbmZpZy5vbmNoYW5nZTtcbiAgICAgICAgICBpZiAodykge1xuICAgICAgICAgICAgdmFyIEEgPSBSLnR4dC5odG1sKCkgfHwgXCJcIjtcbiAgICAgICAgICAgIFIuaXNGb2N1cyA9ICEwLCB3KEEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBSLnR4dC50b2dnbGVQbGFjZWhvbGRlcigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEQoUikge1xuICAgICAgICBSLmlzRm9jdXMgPSAhMTtcbiAgICAgICAgZnVuY3Rpb24gdyhBKSB7XG4gICAgICAgICAgdmFyIEUgPSBBLnRhcmdldCwgQyA9IHYuZGVmYXVsdChFKSwgTSA9IFIuJHRleHRFbGVtLCB5ID0gUi4kdG9vbGJhckVsZW0sIEIgPSBNLmlzQ29udGFpbihDKSwgJCA9IHkuaXNDb250YWluKEMpLCBGID0geS5lbGVtc1swXSA9PSBBLnRhcmdldDtcbiAgICAgICAgICBpZiAoQilcbiAgICAgICAgICAgIFIuaXNGb2N1cyB8fCB4KFIpLCBSLmlzRm9jdXMgPSAhMDtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICgkICYmICFGIHx8ICFSLmlzRm9jdXMpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIG0oUiksIFIuaXNGb2N1cyA9ICExO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBSLiR0ZXh0RWxlbS5lbGVtc1swXSAmJiBSLmNvbmZpZy5mb2N1cyAmJiAoeChSKSwgUi5pc0ZvY3VzID0gITApLCB2LmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgdyksIFIuYmVmb3JlRGVzdHJveShmdW5jdGlvbigpIHtcbiAgICAgICAgICB2LmRlZmF1bHQoZG9jdW1lbnQpLm9mZihcImNsaWNrXCIsIHcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFQoUikge1xuICAgICAgICBSLiR0ZXh0RWxlbS5vbihcImNvbXBvc2l0aW9uc3RhcnRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgUi5pc0NvbXBvc2luZyA9ICEwLCBSLnR4dC50b2dnbGVQbGFjZWhvbGRlcigpO1xuICAgICAgICB9KS5vbihcImNvbXBvc2l0aW9uZW5kXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIFIuaXNDb21wb3NpbmcgPSAhMSwgUi50eHQudG9nZ2xlUGxhY2Vob2xkZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBtKFIpIHtcbiAgICAgICAgdmFyIHcsIEEgPSBSLmNvbmZpZywgRSA9IEEub25ibHVyLCBDID0gUi50eHQuaHRtbCgpIHx8IFwiXCI7XG4gICAgICAgICgwLCBjLmRlZmF1bHQpKHcgPSBSLnR4dC5ldmVudEhvb2tzLm9uQmx1ckV2ZW50cykuY2FsbCh3LCBmdW5jdGlvbihNKSB7XG4gICAgICAgICAgcmV0dXJuIE0oKTtcbiAgICAgICAgfSksIEUoQyk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB4KFIpIHtcbiAgICAgICAgdmFyIHcgPSBSLmNvbmZpZywgQSA9IHcub25mb2N1cywgRSA9IFIudHh0Lmh0bWwoKSB8fCBcIlwiO1xuICAgICAgICBBKEUpO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gYjtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgZnVuY3Rpb24gYyhwKSB7XG4gICAgICAgIHZhciB2ID0gcC5jb25maWcsIGIgPSB2LmxhbmcsIFMgPSB2Lmxhbmd1YWdlcztcbiAgICAgICAgaWYgKHAuaTE4bmV4dCAhPSBudWxsKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHAuaTE4bmV4dC5pbml0KHsgbnM6IFwid2FuZ0VkaXRvclwiLCBsbmc6IGIsIGRlZmF1bHROUzogXCJ3YW5nRWRpdG9yXCIsIHJlc291cmNlczogUyB9KTtcbiAgICAgICAgICB9IGNhdGNoIChEKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpMThuZXh0OlwiICsgRCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwLmkxOG5leHQgPSB7IHQ6IGZ1bmN0aW9uKFQpIHtcbiAgICAgICAgICB2YXIgbSA9IFQuc3BsaXQoXCIuXCIpO1xuICAgICAgICAgIHJldHVybiBtW20ubGVuZ3RoIC0gMV07XG4gICAgICAgIH0gfTtcbiAgICAgIH1cbiAgICAgIGkuZGVmYXVsdCA9IGM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCgzMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pLCBpLnNldFVuRnVsbFNjcmVlbiA9IGkuc2V0RnVsbFNjcmVlbiA9IHZvaWQgMDtcbiAgICAgIHZhciBwID0gdCgyKSwgdiA9IHAuX19pbXBvcnREZWZhdWx0KHQoMykpO1xuICAgICAgdCg0MjEpO1xuICAgICAgdmFyIGIgPSBcInctZS1pY29uLWZ1bGxzY3JlZW5cIiwgUyA9IFwidy1lLWljb24tZnVsbHNjcmVlbl9leGl0XCIsIEQgPSBcInctZS1mdWxsLXNjcmVlbi1lZGl0b3JcIjtcbiAgICAgIGkuc2V0RnVsbFNjcmVlbiA9IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgdmFyIHggPSB2LmRlZmF1bHQobS50b29sYmFyU2VsZWN0b3IpLCBSID0gbS4kdGV4dENvbnRhaW5lckVsZW0sIHcgPSBtLiR0b29sYmFyRWxlbSwgQSA9ICgwLCBjLmRlZmF1bHQpKHcpLmNhbGwodywgXCJpLlwiICsgYiksIEUgPSBtLmNvbmZpZztcbiAgICAgICAgQS5yZW1vdmVDbGFzcyhiKSwgQS5hZGRDbGFzcyhTKSwgeC5hZGRDbGFzcyhEKSwgeC5jc3MoXCJ6LWluZGV4XCIsIEUuekluZGV4RnVsbFNjcmVlbik7XG4gICAgICAgIHZhciBDID0gdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgUi5jc3MoXCJoZWlnaHRcIiwgXCJjYWxjKDEwMCUgLSBcIiArIEMuaGVpZ2h0ICsgXCJweClcIik7XG4gICAgICB9LCBpLnNldFVuRnVsbFNjcmVlbiA9IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgdmFyIHggPSB2LmRlZmF1bHQobS50b29sYmFyU2VsZWN0b3IpLCBSID0gbS4kdGV4dENvbnRhaW5lckVsZW0sIHcgPSBtLiR0b29sYmFyRWxlbSwgQSA9ICgwLCBjLmRlZmF1bHQpKHcpLmNhbGwodywgXCJpLlwiICsgUyksIEUgPSBtLmNvbmZpZztcbiAgICAgICAgQS5yZW1vdmVDbGFzcyhTKSwgQS5hZGRDbGFzcyhiKSwgeC5yZW1vdmVDbGFzcyhEKSwgeC5jc3MoXCJ6LWluZGV4XCIsIFwiYXV0b1wiKSwgUi5jc3MoXCJoZWlnaHRcIiwgRS5oZWlnaHQgKyBcInB4XCIpO1xuICAgICAgfTtcbiAgICAgIHZhciBUID0gZnVuY3Rpb24oeCkge1xuICAgICAgICBpZiAoIXgudGV4dFNlbGVjdG9yICYmICEheC5jb25maWcuc2hvd0Z1bGxTY3JlZW4pIHtcbiAgICAgICAgICB2YXIgUiA9IHguJHRvb2xiYXJFbGVtLCB3ID0gdi5kZWZhdWx0KGA8ZGl2IGNsYXNzPVwidy1lLW1lbnVcIiBkYXRhLXRpdGxlPVwiXFx1NTE2OFxcdTVDNEZcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiYCArIGIgKyBgXCI+PC9pPlxuICAgICAgICA8L2Rpdj5gKTtcbiAgICAgICAgICB3Lm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oQSkge1xuICAgICAgICAgICAgdmFyIEUsIEMgPSAoMCwgYy5kZWZhdWx0KShFID0gdi5kZWZhdWx0KEEuY3VycmVudFRhcmdldCkpLmNhbGwoRSwgXCJpXCIpO1xuICAgICAgICAgICAgQy5oYXNDbGFzcyhiKSA/ICh3LmF0dHIoXCJkYXRhLXRpdGxlXCIsIFwiXFx1NTNENlxcdTZEODhcXHU1MTY4XFx1NUM0RlwiKSwgaS5zZXRGdWxsU2NyZWVuKHgpKSA6ICh3LmF0dHIoXCJkYXRhLXRpdGxlXCIsIFwiXFx1NTE2OFxcdTVDNEZcIiksIGkuc2V0VW5GdWxsU2NyZWVuKHgpKTtcbiAgICAgICAgICB9KSwgUi5hcHBlbmQodyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpLmRlZmF1bHQgPSBUO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyMCksIGQgPSB0KDQyMik7XG4gICAgICBkID0gZC5fX2VzTW9kdWxlID8gZC5kZWZhdWx0IDogZCwgdHlwZW9mIGQgPT0gXCJzdHJpbmdcIiAmJiAoZCA9IFtbby5pLCBkLCBcIlwiXV0pO1xuICAgICAgdmFyIGMgPSB7fTtcbiAgICAgIGMuaW5zZXJ0ID0gXCJoZWFkXCIsIGMuc2luZ2xldG9uID0gITEsIHMoZCwgYyksIG8uZXhwb3J0cyA9IGQubG9jYWxzIHx8IHt9O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgyMSk7XG4gICAgICBpID0gcyghMSksIGkucHVzaChbby5pLCBgLnctZS1mdWxsLXNjcmVlbi1lZGl0b3Ige1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHdpZHRoOiAxMDAlIWltcG9ydGFudDtcbiAgaGVpZ2h0OiAxMDAlIWltcG9ydGFudDtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xufVxuYCwgXCJcIl0pLCBvLmV4cG9ydHMgPSBpO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoMzEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBwID0gZnVuY3Rpb24oYiwgUykge1xuICAgICAgICB2YXIgRCwgVCA9IGIuaXNFbmFibGUgPyBiLiR0ZXh0RWxlbSA6ICgwLCBjLmRlZmF1bHQpKEQgPSBiLiR0ZXh0Q29udGFpbmVyRWxlbSkuY2FsbChELCBcIi53LWUtY29udGVudC1tYW50bGVcIiksIG0gPSAoMCwgYy5kZWZhdWx0KShUKS5jYWxsKFQsIFwiW2lkPSdcIiArIFMgKyBcIiddXCIpLCB4ID0gbS5nZXRPZmZzZXREYXRhKCkudG9wO1xuICAgICAgICBULnNjcm9sbFRvcCh4KTtcbiAgICAgIH07XG4gICAgICBpLmRlZmF1bHQgPSBwO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDEyOCkpLCB2ID0geyBtZW51OiAyLCBwYW5lbDogMiwgdG9vbGJhcjogMSwgdG9vbHRpcDogMSwgdGV4dENvbnRhaW5lcjogMSB9LCBiID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZ1bmN0aW9uIFMoKSB7XG4gICAgICAgICAgdGhpcy50aWVyID0gdiwgdGhpcy5iYXNlWkluZGV4ID0gcC5kZWZhdWx0LnpJbmRleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oRCkge1xuICAgICAgICAgIHJldHVybiBEICYmIHRoaXMudGllcltEXSA/IHRoaXMuYmFzZVpJbmRleCArIHRoaXMudGllcltEXSA6IHRoaXMuYmFzZVpJbmRleDtcbiAgICAgICAgfSwgUy5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKEQpIHtcbiAgICAgICAgICB0aGlzLmJhc2VaSW5kZXggPT0gcC5kZWZhdWx0LnpJbmRleCAmJiAodGhpcy5iYXNlWkluZGV4ID0gRC5jb25maWcuekluZGV4KTtcbiAgICAgICAgfSwgUztcbiAgICAgIH0oKTtcbiAgICAgIGkuZGVmYXVsdCA9IGI7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCg3MCkpLCBwID0gcyh0KDQpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciB2ID0gdCgyKSwgYiA9IHYuX19pbXBvcnREZWZhdWx0KHQoNDI2KSksIFMgPSB0KDYpLCBEID0gdCg3KTtcbiAgICAgIGZ1bmN0aW9uIFQoeCwgUikge1xuICAgICAgICByZXR1cm4gKDAsIGMuZGVmYXVsdCkoeCkuY2FsbCh4LCBmdW5jdGlvbih3KSB7XG4gICAgICAgICAgdmFyIEEgPSB3LnR5cGUsIEUgPSB3LnRhcmdldCwgQyA9IHcuYXR0cmlidXRlTmFtZTtcbiAgICAgICAgICByZXR1cm4gQSAhPSBcImF0dHJpYnV0ZXNcIiB8fCBBID09IFwiYXR0cmlidXRlc1wiICYmIChDID09IFwiY29udGVudGVkaXRhYmxlXCIgfHwgRSAhPSBSKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB2YXIgbSA9IGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgdi5fX2V4dGVuZHMoUiwgeCk7XG4gICAgICAgIGZ1bmN0aW9uIFIodykge1xuICAgICAgICAgIHZhciBBID0geC5jYWxsKHRoaXMsIGZ1bmN0aW9uKEUsIEMpIHtcbiAgICAgICAgICAgIHZhciBNO1xuICAgICAgICAgICAgaWYgKEUgPSBUKEUsIEMudGFyZ2V0KSwgKE0gPSBBLmRhdGEpLnB1c2guYXBwbHkoTSwgRSksIHcuaXNDb21wYXRpYmxlTW9kZSlcbiAgICAgICAgICAgICAgQS5hc3luY1NhdmUoKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKCF3LmlzQ29tcG9zaW5nKVxuICAgICAgICAgICAgICByZXR1cm4gQS5hc3luY1NhdmUoKTtcbiAgICAgICAgICB9KSB8fCB0aGlzO1xuICAgICAgICAgIHJldHVybiBBLmVkaXRvciA9IHcsIEEuZGF0YSA9IFtdLCBBLmFzeW5jU2F2ZSA9IEQuRU1QVFlfRk4sIEE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFIucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aGlzLmRhdGEubGVuZ3RoICYmICh0aGlzLmVkaXRvci5oaXN0b3J5LnNhdmUodGhpcy5kYXRhKSwgdGhpcy5kYXRhLmxlbmd0aCA9IDAsIHRoaXMuZW1pdCgpKTtcbiAgICAgICAgfSwgUi5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciB3O1xuICAgICAgICAgICgwLCBwLmRlZmF1bHQpKHcgPSB0aGlzLmVkaXRvci50eHQuZXZlbnRIb29rcy5jaGFuZ2VFdmVudHMpLmNhbGwodywgZnVuY3Rpb24oQSkge1xuICAgICAgICAgICAgcmV0dXJuIEEoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgUi5wcm90b3R5cGUub2JzZXJ2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciB3ID0gdGhpcztcbiAgICAgICAgICB4LnByb3RvdHlwZS5vYnNlcnZlLmNhbGwodGhpcywgdGhpcy5lZGl0b3IuJHRleHRFbGVtLmVsZW1zWzBdKTtcbiAgICAgICAgICB2YXIgQSA9IHRoaXMuZWRpdG9yLmNvbmZpZy5vbmNoYW5nZVRpbWVvdXQ7XG4gICAgICAgICAgdGhpcy5hc3luY1NhdmUgPSBTLmRlYm91bmNlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdy5zYXZlKCk7XG4gICAgICAgICAgfSwgQSksIHRoaXMuZWRpdG9yLmlzQ29tcGF0aWJsZU1vZGUgfHwgdGhpcy5lZGl0b3IuJHRleHRFbGVtLm9uKFwiY29tcG9zaXRpb25lbmRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB3LmFzeW5jU2F2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBSO1xuICAgICAgfShiLmRlZmF1bHQpO1xuICAgICAgaS5kZWZhdWx0ID0gbTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZnVuY3Rpb24gcCh2LCBiKSB7XG4gICAgICAgICAgdmFyIFMgPSB0aGlzO1xuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHsgc3VidHJlZTogITAsIGNoaWxkTGlzdDogITAsIGF0dHJpYnV0ZXM6ICEwLCBhdHRyaWJ1dGVPbGRWYWx1ZTogITAsIGNoYXJhY3RlckRhdGE6ICEwLCBjaGFyYWN0ZXJEYXRhT2xkVmFsdWU6ICEwIH0sIHRoaXMuY2FsbGJhY2sgPSBmdW5jdGlvbihEKSB7XG4gICAgICAgICAgICB2KEQsIFMpO1xuICAgICAgICAgIH0sIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLmNhbGxiYWNrKSwgYiAmJiAodGhpcy5vcHRpb25zID0gYik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgwLCBkLmRlZmF1bHQpKHAucHJvdG90eXBlLCBcInRhcmdldFwiLCB7IGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgICAgICAgfSwgZW51bWVyYWJsZTogITEsIGNvbmZpZ3VyYWJsZTogITAgfSksIHAucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgdGhpcy5ub2RlIGluc3RhbmNlb2YgTm9kZSB8fCAodGhpcy5ub2RlID0gdiwgdGhpcy5jb25uZWN0KCkpO1xuICAgICAgICB9LCBwLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKHRoaXMubm9kZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcy5ub2RlLCB0aGlzLm9wdGlvbnMpLCB0aGlzO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlxcdThGRDhcXHU2NzJBXFx1NTIxRFxcdTU5Q0JcXHU1MzE2XFx1N0VEMVxcdTVCOUFcXHVGRjBDXFx1OEJGN1xcdTYwQThcXHU1MTQ4XFx1N0VEMVxcdTVCOUFcXHU2NzA5XFx1NjU0OFxcdTc2ODQgTm9kZSBcXHU4MjgyXFx1NzBCOVwiKTtcbiAgICAgICAgfSwgcC5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciB2ID0gdGhpcy5vYnNlcnZlci50YWtlUmVjb3JkcygpO1xuICAgICAgICAgIHYubGVuZ3RoICYmIHRoaXMuY2FsbGJhY2sodiksIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICB9LCBwO1xuICAgICAgfSgpO1xuICAgICAgaS5kZWZhdWx0ID0gYztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSB0KDIpLCBwID0gYy5fX2ltcG9ydERlZmF1bHQodCg0MjgpKSwgdiA9IGMuX19pbXBvcnREZWZhdWx0KHQoNDM1KSksIGIgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDQzNikpLCBTID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZ1bmN0aW9uIEQoVCkge1xuICAgICAgICAgIHRoaXMuZWRpdG9yID0gVCwgdGhpcy5jb250ZW50ID0gbmV3IHAuZGVmYXVsdChUKSwgdGhpcy5zY3JvbGwgPSBuZXcgdi5kZWZhdWx0KFQpLCB0aGlzLnJhbmdlID0gbmV3IGIuZGVmYXVsdChUKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKDAsIGQuZGVmYXVsdCkoRC5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjcm9sbC5zaXplO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgICB9KSwgRC5wcm90b3R5cGUub2JzZXJ2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRoaXMuY29udGVudC5vYnNlcnZlKCksIHRoaXMuc2Nyb2xsLm9ic2VydmUoKSwgIXRoaXMuZWRpdG9yLmlzQ29tcGF0aWJsZU1vZGUgJiYgdGhpcy5yYW5nZS5vYnNlcnZlKCk7XG4gICAgICAgIH0sIEQucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbihUKSB7XG4gICAgICAgICAgVC5sZW5ndGggJiYgKHRoaXMuY29udGVudC5zYXZlKFQpLCB0aGlzLnNjcm9sbC5zYXZlKCksICF0aGlzLmVkaXRvci5pc0NvbXBhdGlibGVNb2RlICYmIHRoaXMucmFuZ2Uuc2F2ZSgpKTtcbiAgICAgICAgfSwgRC5wcm90b3R5cGUucmV2b2tlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGhpcy5lZGl0b3IuY2hhbmdlLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICB2YXIgVCA9IHRoaXMuY29udGVudC5yZXZva2UoKTtcbiAgICAgICAgICBUICYmICh0aGlzLnNjcm9sbC5yZXZva2UoKSwgdGhpcy5lZGl0b3IuaXNDb21wYXRpYmxlTW9kZSB8fCAodGhpcy5yYW5nZS5yZXZva2UoKSwgdGhpcy5lZGl0b3IuJHRleHRFbGVtLmZvY3VzKCkpKSwgdGhpcy5lZGl0b3IuY2hhbmdlLmNvbm5lY3QoKSwgVCAmJiB0aGlzLmVkaXRvci5jaGFuZ2UuZW1pdCgpO1xuICAgICAgICB9LCBELnByb3RvdHlwZS5yZXN0b3JlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGhpcy5lZGl0b3IuY2hhbmdlLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICB2YXIgVCA9IHRoaXMuY29udGVudC5yZXN0b3JlKCk7XG4gICAgICAgICAgVCAmJiAodGhpcy5zY3JvbGwucmVzdG9yZSgpLCB0aGlzLmVkaXRvci5pc0NvbXBhdGlibGVNb2RlIHx8ICh0aGlzLnJhbmdlLnJlc3RvcmUoKSwgdGhpcy5lZGl0b3IuJHRleHRFbGVtLmZvY3VzKCkpKSwgdGhpcy5lZGl0b3IuY2hhbmdlLmNvbm5lY3QoKSwgVCAmJiB0aGlzLmVkaXRvci5jaGFuZ2UuZW1pdCgpO1xuICAgICAgICB9LCBEO1xuICAgICAgfSgpO1xuICAgICAgaS5kZWZhdWx0ID0gUztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgICAgdmFyIGMgPSB0KDIpLCBwID0gYy5fX2ltcG9ydERlZmF1bHQodCg0MjkpKSwgdiA9IGMuX19pbXBvcnREZWZhdWx0KHQoNDMzKSksIGIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZnVuY3Rpb24gUyhEKSB7XG4gICAgICAgICAgdGhpcy5lZGl0b3IgPSBEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTLnByb3RvdHlwZS5vYnNlcnZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGhpcy5lZGl0b3IuaXNDb21wYXRpYmxlTW9kZSA/IHRoaXMuY2FjaGUgPSBuZXcgdi5kZWZhdWx0KHRoaXMuZWRpdG9yKSA6IHRoaXMuY2FjaGUgPSBuZXcgcC5kZWZhdWx0KHRoaXMuZWRpdG9yKSwgdGhpcy5jYWNoZS5vYnNlcnZlKCk7XG4gICAgICAgIH0sIFMucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbihEKSB7XG4gICAgICAgICAgdGhpcy5lZGl0b3IuaXNDb21wYXRpYmxlTW9kZSA/IHRoaXMuY2FjaGUuc2F2ZSgpIDogdGhpcy5jYWNoZS5jb21waWxlKEQpO1xuICAgICAgICB9LCBTLnByb3RvdHlwZS5yZXZva2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgRDtcbiAgICAgICAgICByZXR1cm4gKEQgPSB0aGlzLmNhY2hlKSA9PT0gbnVsbCB8fCBEID09PSB2b2lkIDAgPyB2b2lkIDAgOiBELnJldm9rZSgpO1xuICAgICAgICB9LCBTLnByb3RvdHlwZS5yZXN0b3JlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIEQ7XG4gICAgICAgICAgcmV0dXJuIChEID0gdGhpcy5jYWNoZSkgPT09IG51bGwgfHwgRCA9PT0gdm9pZCAwID8gdm9pZCAwIDogRC5yZXN0b3JlKCk7XG4gICAgICAgIH0sIFM7XG4gICAgICB9KCk7XG4gICAgICBpLmRlZmF1bHQgPSBiO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDk4KSksIHYgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDQzMSkpLCBiID0gdCg0MzIpLCBTID0gZnVuY3Rpb24oRCkge1xuICAgICAgICBjLl9fZXh0ZW5kcyhULCBEKTtcbiAgICAgICAgZnVuY3Rpb24gVChtKSB7XG4gICAgICAgICAgdmFyIHggPSBELmNhbGwodGhpcywgbS5jb25maWcuaGlzdG9yeU1heFNpemUpIHx8IHRoaXM7XG4gICAgICAgICAgcmV0dXJuIHguZWRpdG9yID0gbSwgeDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVC5wcm90b3R5cGUub2JzZXJ2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRoaXMucmVzZXRNYXhTaXplKHRoaXMuZWRpdG9yLmNvbmZpZy5oaXN0b3J5TWF4U2l6ZSk7XG4gICAgICAgIH0sIFQucHJvdG90eXBlLmNvbXBpbGUgPSBmdW5jdGlvbihtKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2F2ZSh2LmRlZmF1bHQobSkpLCB0aGlzO1xuICAgICAgICB9LCBULnByb3RvdHlwZS5yZXZva2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gRC5wcm90b3R5cGUucmV2b2tlLmNhbGwodGhpcywgZnVuY3Rpb24obSkge1xuICAgICAgICAgICAgYi5yZXZva2UobSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIFQucHJvdG90eXBlLnJlc3RvcmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gRC5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsIGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgICAgIGIucmVzdG9yZShtKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgVDtcbiAgICAgIH0ocC5kZWZhdWx0KTtcbiAgICAgIGkuZGVmYXVsdCA9IFM7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KSwgaS5DZWlsU3RhY2sgPSB2b2lkIDA7XG4gICAgICB2YXIgYyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmdW5jdGlvbiBwKHYpIHtcbiAgICAgICAgICB2ID09PSB2b2lkIDAgJiYgKHYgPSAwKSwgdGhpcy5kYXRhID0gW10sIHRoaXMubWF4ID0gMCwgdGhpcy5yZXNldCA9ICExLCB2ID0gTWF0aC5hYnModiksIHYgJiYgKHRoaXMubWF4ID0gdik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHAucHJvdG90eXBlLnJlc2V0TWF4ID0gZnVuY3Rpb24odikge1xuICAgICAgICAgIHYgPSBNYXRoLmFicyh2KSwgIXRoaXMucmVzZXQgJiYgIWlzTmFOKHYpICYmICh0aGlzLm1heCA9IHYsIHRoaXMucmVzZXQgPSAhMCk7XG4gICAgICAgIH0sICgwLCBkLmRlZmF1bHQpKHAucHJvdG90eXBlLCBcInNpemVcIiwge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgICAgfSksIHAucHJvdG90eXBlLmluc3RhY2sgPSBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS51bnNoaWZ0KHYpLCB0aGlzLm1heCAmJiB0aGlzLnNpemUgPiB0aGlzLm1heCAmJiAodGhpcy5kYXRhLmxlbmd0aCA9IHRoaXMubWF4KSwgdGhpcztcbiAgICAgICAgfSwgcC5wcm90b3R5cGUub3V0c3RhY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnNoaWZ0KCk7XG4gICAgICAgIH0sIHAucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPSAwLCB0aGlzO1xuICAgICAgICB9LCBwO1xuICAgICAgfSgpO1xuICAgICAgaS5DZWlsU3RhY2sgPSBjO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoNCkpLCBwID0gcyh0KDI3KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSksIGkuY29tcGxpZVBvc2l0aW9uID0gaS5jb21wbGllTm9kZXMgPSBpLmNvbXBpbGVWYWx1ZSA9IGkuY29tcGlsZVR5cGUgPSB2b2lkIDA7XG4gICAgICB2YXIgdiA9IHQoNik7XG4gICAgICBmdW5jdGlvbiBiKHcpIHtcbiAgICAgICAgc3dpdGNoICh3KSB7XG4gICAgICAgICAgY2FzZSBcImNoaWxkTGlzdFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwibm9kZVwiO1xuICAgICAgICAgIGNhc2UgXCJhdHRyaWJ1dGVzXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJhdHRyXCI7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBcInRleHRcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaS5jb21waWxlVHlwZSA9IGI7XG4gICAgICBmdW5jdGlvbiBTKHcpIHtcbiAgICAgICAgc3dpdGNoICh3LnR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwiYXR0cmlidXRlc1wiOlxuICAgICAgICAgICAgcmV0dXJuIHcudGFyZ2V0LmdldEF0dHJpYnV0ZSh3LmF0dHJpYnV0ZU5hbWUpIHx8IFwiXCI7XG4gICAgICAgICAgY2FzZSBcImNoYXJhY3RlckRhdGFcIjpcbiAgICAgICAgICAgIHJldHVybiB3LnRhcmdldC50ZXh0Q29udGVudDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkuY29tcGlsZVZhbHVlID0gUztcbiAgICAgIGZ1bmN0aW9uIEQodykge1xuICAgICAgICB2YXIgQSA9IHt9O1xuICAgICAgICByZXR1cm4gdy5hZGRlZE5vZGVzLmxlbmd0aCAmJiAoQS5hZGQgPSB2LnRvQXJyYXkody5hZGRlZE5vZGVzKSksIHcucmVtb3ZlZE5vZGVzLmxlbmd0aCAmJiAoQS5yZW1vdmUgPSB2LnRvQXJyYXkody5yZW1vdmVkTm9kZXMpKSwgQTtcbiAgICAgIH1cbiAgICAgIGkuY29tcGxpZU5vZGVzID0gRDtcbiAgICAgIGZ1bmN0aW9uIFQodykge1xuICAgICAgICB2YXIgQTtcbiAgICAgICAgcmV0dXJuIHcucHJldmlvdXNTaWJsaW5nID8gQSA9IHsgdHlwZTogXCJiZWZvcmVcIiwgdGFyZ2V0OiB3LnByZXZpb3VzU2libGluZyB9IDogdy5uZXh0U2libGluZyA/IEEgPSB7IHR5cGU6IFwiYWZ0ZXJcIiwgdGFyZ2V0OiB3Lm5leHRTaWJsaW5nIH0gOiBBID0geyB0eXBlOiBcInBhcmVudFwiLCB0YXJnZXQ6IHcudGFyZ2V0IH0sIEE7XG4gICAgICB9XG4gICAgICBpLmNvbXBsaWVQb3NpdGlvbiA9IFQ7XG4gICAgICB2YXIgbSA9IFtcIlVMXCIsIFwiT0xcIiwgXCJIMVwiLCBcIkgyXCIsIFwiSDNcIiwgXCJINFwiLCBcIkg1XCIsIFwiSDZcIl07XG4gICAgICBmdW5jdGlvbiB4KHcpIHtcbiAgICAgICAgdmFyIEEgPSBbXSwgRSA9ICExLCBDID0gW107XG4gICAgICAgIHJldHVybiAoMCwgYy5kZWZhdWx0KSh3KS5jYWxsKHcsIGZ1bmN0aW9uKE0sIHkpIHtcbiAgICAgICAgICB2YXIgQiA9IHsgdHlwZTogYihNLnR5cGUpLCB0YXJnZXQ6IE0udGFyZ2V0LCBhdHRyOiBNLmF0dHJpYnV0ZU5hbWUgfHwgXCJcIiwgdmFsdWU6IFMoTSkgfHwgXCJcIiwgb2xkVmFsdWU6IE0ub2xkVmFsdWUgfHwgXCJcIiwgbm9kZXM6IEQoTSksIHBvc2l0aW9uOiBUKE0pIH07XG4gICAgICAgICAgaWYgKEEucHVzaChCKSwgISF2LlVBLmlzRmlyZWZveCkge1xuICAgICAgICAgICAgaWYgKEUgJiYgTS5hZGRlZE5vZGVzLmxlbmd0aCAmJiBNLmFkZGVkTm9kZXNbMF0ubm9kZVR5cGUgPT0gMSkge1xuICAgICAgICAgICAgICB2YXIgJCA9IE0uYWRkZWROb2Rlc1swXSwgRiA9IHsgdHlwZTogXCJub2RlXCIsIHRhcmdldDogJCwgYXR0cjogXCJcIiwgdmFsdWU6IFwiXCIsIG9sZFZhbHVlOiBcIlwiLCBub2RlczogeyBhZGQ6IFtFXSB9LCBwb3NpdGlvbjogeyB0eXBlOiBcInBhcmVudFwiLCB0YXJnZXQ6ICQgfSB9O1xuICAgICAgICAgICAgICAoMCwgcC5kZWZhdWx0KShtKS5jYWxsKG0sICQubm9kZU5hbWUpICE9IC0xID8gKEYubm9kZXMuYWRkID0gdi50b0FycmF5KCQuY2hpbGROb2RlcyksIEEucHVzaChGKSkgOiBFLm5vZGVUeXBlID09IDMgPyAoUigkLCBDKSAmJiAoRi5ub2Rlcy5hZGQgPSB2LnRvQXJyYXkoJC5jaGlsZE5vZGVzKSksIEEucHVzaChGKSkgOiAoMCwgcC5kZWZhdWx0KShtKS5jYWxsKG0sIE0udGFyZ2V0Lm5vZGVOYW1lKSA9PSAtMSAmJiBSKCQsIEMpICYmIChGLm5vZGVzLmFkZCA9IHYudG9BcnJheSgkLmNoaWxkTm9kZXMpLCBBLnB1c2goRikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQi50eXBlID09IFwibm9kZVwiICYmIE0ucmVtb3ZlZE5vZGVzLmxlbmd0aCA9PSAxID8gKEUgPSBNLnJlbW92ZWROb2Rlc1swXSwgQy5wdXNoKEUpKSA6IChFID0gITEsIEMubGVuZ3RoID0gMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSwgQTtcbiAgICAgIH1cbiAgICAgIGkuZGVmYXVsdCA9IHg7XG4gICAgICBmdW5jdGlvbiBSKHcsIEEpIHtcbiAgICAgICAgZm9yICh2YXIgRSA9IDAsIEMgPSBBLmxlbmd0aCAtIDE7IEMgPiAwICYmIHcuY29udGFpbnMoQVtDXSk7IEMtLSlcbiAgICAgICAgICBFKys7XG4gICAgICAgIHJldHVybiBFO1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSksIGMgPSBzKHQoNCkpLCBwID0gcyh0KDk0KSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSksIGkucmVzdG9yZSA9IGkucmV2b2tlID0gdm9pZCAwO1xuICAgICAgZnVuY3Rpb24gdihDLCBNKSB7XG4gICAgICAgIHZhciB5ID0gQy5wb3NpdGlvbi50YXJnZXQ7XG4gICAgICAgIHN3aXRjaCAoQy5wb3NpdGlvbi50eXBlKSB7XG4gICAgICAgICAgY2FzZSBcImJlZm9yZVwiOlxuICAgICAgICAgICAgeS5uZXh0U2libGluZyA/ICh5ID0geS5uZXh0U2libGluZywgKDAsIGMuZGVmYXVsdCkoTSkuY2FsbChNLCBmdW5jdGlvbihCKSB7XG4gICAgICAgICAgICAgIEMudGFyZ2V0Lmluc2VydEJlZm9yZShCLCB5KTtcbiAgICAgICAgICAgIH0pKSA6ICgwLCBjLmRlZmF1bHQpKE0pLmNhbGwoTSwgZnVuY3Rpb24oQikge1xuICAgICAgICAgICAgICBDLnRhcmdldC5hcHBlbmRDaGlsZChCKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcImFmdGVyXCI6XG4gICAgICAgICAgICAoMCwgYy5kZWZhdWx0KShNKS5jYWxsKE0sIGZ1bmN0aW9uKEIpIHtcbiAgICAgICAgICAgICAgQy50YXJnZXQuaW5zZXJ0QmVmb3JlKEIsIHkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgKDAsIGMuZGVmYXVsdCkoTSkuY2FsbChNLCBmdW5jdGlvbihCKSB7XG4gICAgICAgICAgICAgIHkuYXBwZW5kQ2hpbGQoQik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBiKEMpIHtcbiAgICAgICAgZm9yICh2YXIgTSA9IDAsIHkgPSAoMCwgcC5kZWZhdWx0KShDLm5vZGVzKTsgTSA8IHkubGVuZ3RoOyBNKyspIHtcbiAgICAgICAgICB2YXIgQiA9IHlbTV0sICQgPSBCWzBdLCBGID0gQlsxXTtcbiAgICAgICAgICBzd2l0Y2ggKCQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhZGRcIjpcbiAgICAgICAgICAgICAgKDAsIGMuZGVmYXVsdCkoRikuY2FsbChGLCBmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICAgICAgQy50YXJnZXQucmVtb3ZlQ2hpbGQoayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgdihDLCBGKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBTKEMpIHtcbiAgICAgICAgdmFyIE0gPSBDLnRhcmdldDtcbiAgICAgICAgQy5vbGRWYWx1ZSA9PSBudWxsID8gTS5yZW1vdmVBdHRyaWJ1dGUoQy5hdHRyKSA6IE0uc2V0QXR0cmlidXRlKEMuYXR0ciwgQy5vbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBEKEMpIHtcbiAgICAgICAgQy50YXJnZXQudGV4dENvbnRlbnQgPSBDLm9sZFZhbHVlO1xuICAgICAgfVxuICAgICAgdmFyIFQgPSB7IG5vZGU6IGIsIHRleHQ6IEQsIGF0dHI6IFMgfTtcbiAgICAgIGZ1bmN0aW9uIG0oQykge1xuICAgICAgICBmb3IgKHZhciBNID0gQy5sZW5ndGggLSAxOyBNID4gLTE7IE0tLSkge1xuICAgICAgICAgIHZhciB5ID0gQ1tNXTtcbiAgICAgICAgICBUW3kudHlwZV0oeSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkucmV2b2tlID0gbTtcbiAgICAgIGZ1bmN0aW9uIHgoQykge1xuICAgICAgICBmb3IgKHZhciBNID0gMCwgeSA9ICgwLCBwLmRlZmF1bHQpKEMubm9kZXMpOyBNIDwgeS5sZW5ndGg7IE0rKykge1xuICAgICAgICAgIHZhciBCID0geVtNXSwgJCA9IEJbMF0sIEYgPSBCWzFdO1xuICAgICAgICAgIHN3aXRjaCAoJCkge1xuICAgICAgICAgICAgY2FzZSBcImFkZFwiOiB7XG4gICAgICAgICAgICAgIHYoQywgRik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAoMCwgYy5kZWZhdWx0KShGKS5jYWxsKEYsIGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgICAgICBrLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFIoQykge1xuICAgICAgICBDLnRhcmdldC50ZXh0Q29udGVudCA9IEMudmFsdWU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB3KEMpIHtcbiAgICAgICAgQy50YXJnZXQuc2V0QXR0cmlidXRlKEMuYXR0ciwgQy52YWx1ZSk7XG4gICAgICB9XG4gICAgICB2YXIgQSA9IHsgbm9kZTogeCwgdGV4dDogUiwgYXR0cjogdyB9O1xuICAgICAgZnVuY3Rpb24gRShDKSB7XG4gICAgICAgIGZvciAodmFyIE0gPSAwLCB5ID0gQzsgTSA8IHkubGVuZ3RoOyBNKyspIHtcbiAgICAgICAgICB2YXIgQiA9IHlbTV07XG4gICAgICAgICAgQVtCLnR5cGVdKEIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpLnJlc3RvcmUgPSBFO1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoNDM0KSwgcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmdW5jdGlvbiB2KGIpIHtcbiAgICAgICAgICB0aGlzLmVkaXRvciA9IGIsIHRoaXMuZGF0YSA9IG5ldyBjLlRhaWxDaGFpbigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2LnByb3RvdHlwZS5vYnNlcnZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGhpcy5kYXRhLnJlc2V0TWF4KHRoaXMuZWRpdG9yLmNvbmZpZy5oaXN0b3J5TWF4U2l6ZSksIHRoaXMuZGF0YS5pbnNlcnRMYXN0KHRoaXMuZWRpdG9yLiR0ZXh0RWxlbS5odG1sKCkpO1xuICAgICAgICB9LCB2LnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5pbnNlcnRMYXN0KHRoaXMuZWRpdG9yLiR0ZXh0RWxlbS5odG1sKCkpLCB0aGlzO1xuICAgICAgICB9LCB2LnByb3RvdHlwZS5yZXZva2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgYiA9IHRoaXMuZGF0YS5wcmV2KCk7XG4gICAgICAgICAgcmV0dXJuIGIgPyAodGhpcy5lZGl0b3IuJHRleHRFbGVtLmh0bWwoYiksICEwKSA6ICExO1xuICAgICAgICB9LCB2LnByb3RvdHlwZS5yZXN0b3JlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGIgPSB0aGlzLmRhdGEubmV4dCgpO1xuICAgICAgICAgIHJldHVybiBiID8gKHRoaXMuZWRpdG9yLiR0ZXh0RWxlbS5odG1sKGIpLCAhMCkgOiAhMTtcbiAgICAgICAgfSwgdjtcbiAgICAgIH0oKTtcbiAgICAgIGkuZGVmYXVsdCA9IHA7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKSwgYyA9IHModCg5MSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pLCBpLlRhaWxDaGFpbiA9IHZvaWQgMDtcbiAgICAgIHZhciBwID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZ1bmN0aW9uIHYoKSB7XG4gICAgICAgICAgdGhpcy5kYXRhID0gW10sIHRoaXMubWF4ID0gMCwgdGhpcy5wb2ludCA9IDAsIHRoaXMuaXNSZSA9ICExO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2LnByb3RvdHlwZS5yZXNldE1heCA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgICBiID0gTWF0aC5hYnMoYiksIGIgJiYgKHRoaXMubWF4ID0gYik7XG4gICAgICAgIH0sICgwLCBkLmRlZmF1bHQpKHYucHJvdG90eXBlLCBcInNpemVcIiwge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgICAgfSksIHYucHJvdG90eXBlLmluc2VydExhc3QgPSBmdW5jdGlvbihiKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZSkge1xuICAgICAgICAgICAgdmFyIFM7XG4gICAgICAgICAgICAoMCwgYy5kZWZhdWx0KShTID0gdGhpcy5kYXRhKS5jYWxsKFMsIHRoaXMucG9pbnQgKyAxKSwgdGhpcy5pc1JlID0gITE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAodGhpcy5kYXRhLnB1c2goYik7IHRoaXMubWF4ICYmIHRoaXMuc2l6ZSA+IHRoaXMubWF4OyApXG4gICAgICAgICAgICB0aGlzLmRhdGEuc2hpZnQoKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wb2ludCA9IHRoaXMuc2l6ZSAtIDEsIHRoaXM7XG4gICAgICAgIH0sIHYucHJvdG90eXBlLmN1cnJlbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhW3RoaXMucG9pbnRdO1xuICAgICAgICB9LCB2LnByb3RvdHlwZS5wcmV2ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzUmUgJiYgKHRoaXMuaXNSZSA9ICEwKSwgdGhpcy5wb2ludC0tLCB0aGlzLnBvaW50IDwgMCkge1xuICAgICAgICAgICAgdGhpcy5wb2ludCA9IDA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQoKTtcbiAgICAgICAgfSwgdi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICghdGhpcy5pc1JlICYmICh0aGlzLmlzUmUgPSAhMCksIHRoaXMucG9pbnQrKywgdGhpcy5wb2ludCA+PSB0aGlzLnNpemUpIHtcbiAgICAgICAgICAgIHRoaXMucG9pbnQgPSB0aGlzLnNpemUgLSAxO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50KCk7XG4gICAgICAgIH0sIHY7XG4gICAgICB9KCk7XG4gICAgICBpLlRhaWxDaGFpbiA9IHA7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBjID0gdCgyKSwgcCA9IGMuX19pbXBvcnREZWZhdWx0KHQoOTgpKSwgdiA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgYy5fX2V4dGVuZHMoUywgYik7XG4gICAgICAgIGZ1bmN0aW9uIFMoRCkge1xuICAgICAgICAgIHZhciBUID0gYi5jYWxsKHRoaXMsIEQuY29uZmlnLmhpc3RvcnlNYXhTaXplKSB8fCB0aGlzO1xuICAgICAgICAgIHJldHVybiBULmVkaXRvciA9IEQsIFQubGFzdCA9IDAsIFQudGFyZ2V0ID0gRC4kdGV4dEVsZW0uZWxlbXNbMF0sIFQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFMucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgRCA9IHRoaXM7XG4gICAgICAgICAgdGhpcy50YXJnZXQgPSB0aGlzLmVkaXRvci4kdGV4dEVsZW0uZWxlbXNbMF0sIHRoaXMuZWRpdG9yLiR0ZXh0RWxlbS5vbihcInNjcm9sbFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIEQubGFzdCA9IEQudGFyZ2V0LnNjcm9sbFRvcDtcbiAgICAgICAgICB9KSwgdGhpcy5yZXNldE1heFNpemUodGhpcy5lZGl0b3IuY29uZmlnLmhpc3RvcnlNYXhTaXplKTtcbiAgICAgICAgfSwgUy5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBiLnByb3RvdHlwZS5zYXZlLmNhbGwodGhpcywgW3RoaXMubGFzdCwgdGhpcy50YXJnZXQuc2Nyb2xsVG9wXSksIHRoaXM7XG4gICAgICAgIH0sIFMucHJvdG90eXBlLnJldm9rZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBEID0gdGhpcztcbiAgICAgICAgICByZXR1cm4gYi5wcm90b3R5cGUucmV2b2tlLmNhbGwodGhpcywgZnVuY3Rpb24oVCkge1xuICAgICAgICAgICAgRC50YXJnZXQuc2Nyb2xsVG9wID0gVFswXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgUy5wcm90b3R5cGUucmVzdG9yZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBEID0gdGhpcztcbiAgICAgICAgICByZXR1cm4gYi5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsIGZ1bmN0aW9uKFQpIHtcbiAgICAgICAgICAgIEQudGFyZ2V0LnNjcm9sbFRvcCA9IFRbMV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIFM7XG4gICAgICB9KHAuZGVmYXVsdCk7XG4gICAgICBpLmRlZmF1bHQgPSB2O1xuICAgIH0sIGZ1bmN0aW9uKG8sIGksIHQpIHtcbiAgICAgIHZhciBzID0gdCgwKSwgZCA9IHModCgxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgYyA9IHQoMiksIHAgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDk4KSksIHYgPSBjLl9faW1wb3J0RGVmYXVsdCh0KDMpKSwgYiA9IHQoNik7XG4gICAgICBmdW5jdGlvbiBTKFQpIHtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IFtULnN0YXJ0Q29udGFpbmVyLCBULnN0YXJ0T2Zmc2V0XSwgZW5kOiBbVC5lbmRDb250YWluZXIsIFQuZW5kT2Zmc2V0XSwgcm9vdDogVC5jb21tb25BbmNlc3RvckNvbnRhaW5lciwgY29sbGFwc2VkOiBULmNvbGxhcHNlZCB9O1xuICAgICAgfVxuICAgICAgdmFyIEQgPSBmdW5jdGlvbihUKSB7XG4gICAgICAgIGMuX19leHRlbmRzKG0sIFQpO1xuICAgICAgICBmdW5jdGlvbiBtKHgpIHtcbiAgICAgICAgICB2YXIgUiA9IFQuY2FsbCh0aGlzLCB4LmNvbmZpZy5oaXN0b3J5TWF4U2l6ZSkgfHwgdGhpcztcbiAgICAgICAgICByZXR1cm4gUi5lZGl0b3IgPSB4LCBSLmxhc3RSYW5nZSA9IFMoZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSksIFIucm9vdCA9IHguJHRleHRFbGVtLmVsZW1zWzBdLCBSLnVwZGF0ZUxhc3RSYW5nZSA9IGIuZGVib3VuY2UoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBSLmxhc3RSYW5nZSA9IFMoUi5yYW5nZUhhbmRsZSk7XG4gICAgICAgICAgfSwgeC5jb25maWcub25jaGFuZ2VUaW1lb3V0KSwgUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKDAsIGQuZGVmYXVsdCkobS5wcm90b3R5cGUsIFwicmFuZ2VIYW5kbGVcIiwge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgUiA9IGRvY3VtZW50LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuIFIgJiYgUi5yYW5nZUNvdW50ID8gUi5nZXRSYW5nZUF0KDApIDogZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgICAgfSksIG0ucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgeCA9IHRoaXM7XG4gICAgICAgICAgdGhpcy5yb290ID0gdGhpcy5lZGl0b3IuJHRleHRFbGVtLmVsZW1zWzBdLCB0aGlzLnJlc2V0TWF4U2l6ZSh0aGlzLmVkaXRvci5jb25maWcuaGlzdG9yeU1heFNpemUpO1xuICAgICAgICAgIGZ1bmN0aW9uIFIoKSB7XG4gICAgICAgICAgICB2YXIgQSA9IHgucmFuZ2VIYW5kbGU7XG4gICAgICAgICAgICAoeC5yb290ID09PSBBLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIHx8IHgucm9vdC5jb250YWlucyhBLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSkgJiYgKHguZWRpdG9yLmlzQ29tcG9zaW5nIHx8IHgudXBkYXRlTGFzdFJhbmdlKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB3KEEpIHtcbiAgICAgICAgICAgIChBLmtleSA9PSBcIkJhY2tzcGFjZVwiIHx8IEEua2V5ID09IFwiRGVsZXRlXCIpICYmIHgudXBkYXRlTGFzdFJhbmdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHYuZGVmYXVsdChkb2N1bWVudCkub24oXCJzZWxlY3Rpb25jaGFuZ2VcIiwgUiksIHRoaXMuZWRpdG9yLmJlZm9yZURlc3Ryb3koZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2LmRlZmF1bHQoZG9jdW1lbnQpLm9mZihcInNlbGVjdGlvbmNoYW5nZVwiLCBSKTtcbiAgICAgICAgICB9KSwgeC5lZGl0b3IuJHRleHRFbGVtLm9uKFwia2V5ZG93blwiLCB3KTtcbiAgICAgICAgfSwgbS5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciB4ID0gUyh0aGlzLnJhbmdlSGFuZGxlKTtcbiAgICAgICAgICByZXR1cm4gVC5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMsIFt0aGlzLmxhc3RSYW5nZSwgeF0pLCB0aGlzLmxhc3RSYW5nZSA9IHgsIHRoaXM7XG4gICAgICAgIH0sIG0ucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHgpIHtcbiAgICAgICAgICAgICAgdmFyIFIgPSB0aGlzLnJhbmdlSGFuZGxlO1xuICAgICAgICAgICAgICByZXR1cm4gUi5zZXRTdGFydC5hcHBseShSLCB4LnN0YXJ0KSwgUi5zZXRFbmQuYXBwbHkoUiwgeC5lbmQpLCB0aGlzLmVkaXRvci5tZW51cy5jaGFuZ2VBY3RpdmUoKSwgITA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgfSwgbS5wcm90b3R5cGUucmV2b2tlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHggPSB0aGlzO1xuICAgICAgICAgIHJldHVybiBULnByb3RvdHlwZS5yZXZva2UuY2FsbCh0aGlzLCBmdW5jdGlvbihSKSB7XG4gICAgICAgICAgICB4LnNldChSWzBdKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgbS5wcm90b3R5cGUucmVzdG9yZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciB4ID0gdGhpcztcbiAgICAgICAgICByZXR1cm4gVC5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsIGZ1bmN0aW9uKFIpIHtcbiAgICAgICAgICAgIHguc2V0KFJbMV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBtO1xuICAgICAgfShwLmRlZmF1bHQpO1xuICAgICAgaS5kZWZhdWx0ID0gRDtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDMxKSk7XG4gICAgICAoMCwgZC5kZWZhdWx0KShpLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogITAgfSk7XG4gICAgICB2YXIgcCA9IHQoMiksIHYgPSBwLl9faW1wb3J0RGVmYXVsdCh0KDMpKTtcbiAgICAgIHQoNDM4KTtcbiAgICAgIGZ1bmN0aW9uIGIoUykge1xuICAgICAgICB2YXIgRCA9ICExLCBULCBtO1xuICAgICAgICBTLnR4dC5ldmVudEhvb2tzLmNoYW5nZUV2ZW50cy5wdXNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIEQgJiYgKDAsIGMuZGVmYXVsdCkoVCkuY2FsbChULCBcIi53LWUtY29udGVudC1wcmV2aWV3XCIpLmh0bWwoUy4kdGV4dEVsZW0uaHRtbCgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIHgoKSB7XG4gICAgICAgICAgaWYgKCFEKSB7XG4gICAgICAgICAgICBTLiR0ZXh0RWxlbS5oaWRlKCk7XG4gICAgICAgICAgICB2YXIgdyA9IFMuekluZGV4LmdldChcInRleHRDb250YWluZXJcIiksIEEgPSBTLnR4dC5odG1sKCk7XG4gICAgICAgICAgICBUID0gdi5kZWZhdWx0KCc8ZGl2IGNsYXNzPVwidy1lLWNvbnRlbnQtbWFudGxlXCIgc3R5bGU9XCJ6LWluZGV4OicgKyB3ICsgYFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWUtY29udGVudC1wcmV2aWV3IHctZS10ZXh0XCI+YCArIEEgKyBgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gKSwgUy4kdGV4dENvbnRhaW5lckVsZW0uYXBwZW5kKFQpO1xuICAgICAgICAgICAgdmFyIEUgPSBTLnpJbmRleC5nZXQoXCJtZW51XCIpO1xuICAgICAgICAgICAgbSA9IHYuZGVmYXVsdCgnPGRpdiBjbGFzcz1cInctZS1tZW51ZS1tYW50bGVcIiBzdHlsZT1cInotaW5kZXg6JyArIEUgKyAnXCI+PC9kaXY+JyksIFMuJHRvb2xiYXJFbGVtLmFwcGVuZChtKSwgRCA9ICEwLCBTLmlzRW5hYmxlID0gITE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIFIoKSB7XG4gICAgICAgICAgIUQgfHwgKFQucmVtb3ZlKCksIG0ucmVtb3ZlKCksIFMuJHRleHRFbGVtLnNob3coKSwgRCA9ICExLCBTLmlzRW5hYmxlID0gITApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRpc2FibGU6IHgsIGVuYWJsZTogUiB9O1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gYjtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjApLCBkID0gdCg0MzkpO1xuICAgICAgZCA9IGQuX19lc01vZHVsZSA/IGQuZGVmYXVsdCA6IGQsIHR5cGVvZiBkID09IFwic3RyaW5nXCIgJiYgKGQgPSBbW28uaSwgZCwgXCJcIl1dKTtcbiAgICAgIHZhciBjID0ge307XG4gICAgICBjLmluc2VydCA9IFwiaGVhZFwiLCBjLnNpbmdsZXRvbiA9ICExLCBzKGQsIGMpLCBvLmV4cG9ydHMgPSBkLmxvY2FscyB8fCB7fTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMjEpO1xuICAgICAgaSA9IHMoITEpLCBpLnB1c2goW28uaSwgYC53LWUtY29udGVudC1tYW50bGUge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuLnctZS1jb250ZW50LW1hbnRsZSAudy1lLWNvbnRlbnQtcHJldmlldyB7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiAxMDAlO1xuICBwYWRkaW5nOiAwIDEwcHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG4udy1lLWNvbnRlbnQtbWFudGxlIC53LWUtY29udGVudC1wcmV2aWV3IGltZyB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cbi53LWUtY29udGVudC1tYW50bGUgLnctZS1jb250ZW50LXByZXZpZXcgaW1nOmhvdmVyIHtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi53LWUtbWVudWUtbWFudGxlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG59XG5gLCBcIlwiXSksIG8uZXhwb3J0cyA9IGk7XG4gICAgfSwgZnVuY3Rpb24obywgaSwgdCkge1xuICAgICAgdmFyIHMgPSB0KDApLCBkID0gcyh0KDEpKTtcbiAgICAgICgwLCBkLmRlZmF1bHQpKGksIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KTtcbiAgICAgIHZhciBjID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZ1bmN0aW9uIHAodikge1xuICAgICAgICAgIHZhciBiID0gdGhpcztcbiAgICAgICAgICB0aGlzLmVkaXRvciA9IHY7XG4gICAgICAgICAgdmFyIFMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBUID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIFQgPT09IHYuJHRleHRFbGVtLmVsZW1zWzBdICYmIGIuZW1pdCgpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgUyksIHRoaXMuZWRpdG9yLmJlZm9yZURlc3Ryb3koZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLCBTKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcC5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciB2LCBiID0gdGhpcy5lZGl0b3IuY29uZmlnLm9uU2VsZWN0aW9uQ2hhbmdlO1xuICAgICAgICAgIGlmIChiKSB7XG4gICAgICAgICAgICB2YXIgUyA9IHRoaXMuZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgICAgICAgIFMuc2F2ZVJhbmdlKCksIFMuaXNTZWxlY3Rpb25FbXB0eSgpIHx8IGIoe1xuICAgICAgICAgICAgICB0ZXh0OiBTLmdldFNlbGVjdGlvblRleHQoKSxcbiAgICAgICAgICAgICAgaHRtbDogKHYgPSBTLmdldFNlbGVjdGlvbkNvbnRhaW5lckVsZW0oKSkgPT09IG51bGwgfHwgdiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdi5lbGVtc1swXS5pbm5lckhUTUwsXG4gICAgICAgICAgICAgIHNlbGVjdGlvbjogU1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBwO1xuICAgICAgfSgpO1xuICAgICAgaS5kZWZhdWx0ID0gYztcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpLCBjID0gcyh0KDEyNykpLCBwID0gcyh0KDk0KSksIHYgPSBzKHQoNCkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pLCBpLnJlZ2lzdGVyUGx1Z2luID0gdm9pZCAwO1xuICAgICAgdmFyIGIgPSB0KDIpLCBTID0gYi5fX2ltcG9ydERlZmF1bHQodCg4NykpLCBEID0gdCg2KTtcbiAgICAgIGZ1bmN0aW9uIFQoeCwgUiwgdykge1xuICAgICAgICBpZiAoIXgpXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm5hbWUgaXMgbm90IGRlZmluZVwiKTtcbiAgICAgICAgaWYgKCFSKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb25zIGlzIG5vdCBkZWZpbmVcIik7XG4gICAgICAgIGlmICghUi5pbnRlbnRpb24pXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbnMuaW50ZW50aW9uIGlzIG5vdCBkZWZpbmVcIik7XG4gICAgICAgIGlmIChSLmludGVudGlvbiAmJiB0eXBlb2YgUi5pbnRlbnRpb24gIT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb25zLmludGVudGlvbiBpcyBub3QgZnVuY3Rpb25cIik7XG4gICAgICAgIHdbeF0gJiYgY29uc29sZS53YXJuKFwicGx1Z2luIFwiICsgeCArIFwiIFxcdTVERjJcXHU1QjU4XFx1NTcyOFxcdUZGMENcXHU1REYyXFx1ODk4NlxcdTc2RDZcXHUzMDAyXCIpLCB3W3hdID0gUjtcbiAgICAgIH1cbiAgICAgIGkucmVnaXN0ZXJQbHVnaW4gPSBUO1xuICAgICAgZnVuY3Rpb24gbSh4KSB7XG4gICAgICAgIHZhciBSID0gKDAsIGMuZGVmYXVsdCkoe30sIEQuZGVlcENsb25lKFMuZGVmYXVsdC5nbG9iYWxQbHVnaW5zRnVuY3Rpb25MaXN0KSwgRC5kZWVwQ2xvbmUoeC5wbHVnaW5zRnVuY3Rpb25MaXN0KSksIHcgPSAoMCwgcC5kZWZhdWx0KShSKTtcbiAgICAgICAgKDAsIHYuZGVmYXVsdCkodykuY2FsbCh3LCBmdW5jdGlvbihBKSB7XG4gICAgICAgICAgdmFyIEUgPSBBWzBdLCBDID0gQVsxXTtcbiAgICAgICAgICBjb25zb2xlLmluZm8oXCJwbHVnaW4gXCIgKyBFICsgXCIgaW5pdGlhbGl6aW5nXCIpO1xuICAgICAgICAgIHZhciBNID0gQy5pbnRlbnRpb24sIHkgPSBDLmNvbmZpZztcbiAgICAgICAgICBNKHgsIHkpLCBjb25zb2xlLmluZm8oXCJwbHVnaW4gXCIgKyBFICsgXCIgaW5pdGlhbGl6YXRpb24gY29tcGxldGVcIik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaS5kZWZhdWx0ID0gbTtcbiAgICB9LCBmdW5jdGlvbihvLCBpLCB0KSB7XG4gICAgICB2YXIgcyA9IHQoMCksIGQgPSBzKHQoMSkpO1xuICAgICAgKDAsIGQuZGVmYXVsdCkoaSwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgIH1dKS5kZWZhdWx0O1xuICB9KTtcbn0pKG1jKTtcbnZhciBmMSA9IC8qIEBfX1BVUkVfXyAqLyB1MShtYy5leHBvcnRzKSwgZDEgPSBcImZjRWRpdG9yXCIsIGMxID0gMSwgcDEgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHIpIHtcbiAgZm9yICh2YXIgZiwgbyA9IDE7IG8gPCBhcmd1bWVudHMubGVuZ3RoOyBvKyspXG4gICAgZm9yICh2YXIgaSBpbiBmID0gYXJndW1lbnRzW29dLCBmKVxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsIGkpICYmIChyW2ldID0gZltpXSk7XG4gIHJldHVybiByO1xufSwgaDEgPSB3dCh7XG4gIG5hbWU6IGQxLFxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IFN0cmluZyxcbiAgICBpbml0OiBGdW5jdGlvbixcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBjb25maWc6IE9iamVjdFxuICB9LFxuICBpbmhlcml0QXR0cnM6ICExLFxuICBlbWl0czogW1widXBkYXRlOm1vZGVsVmFsdWVcIl0sXG4gIGRhdGE6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlZGl0b3I6IHt9LFxuICAgICAgdW5pOiBjMSsrXG4gICAgfTtcbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmVuYWJsZSgpO1xuICAgIH0sXG4gICAgbW9kZWxWYWx1ZTogZnVuY3Rpb24oZikge1xuICAgICAgZiAhPT0gdGhpcy5lZGl0b3IudHh0Lmh0bWwoKSAmJiB0aGlzLmVkaXRvci50eHQuaHRtbChmKTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBlbmFibGU6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kaXNhYmxlZCA/IHRoaXMuZWRpdG9yLmRpc2FibGUoKSA6IHRoaXMuZWRpdG9yLmVuYWJsZSgpO1xuICAgIH0sXG4gICAgcmVzdWx0OiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuJGVtaXQoXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiLCB0aGlzLmVkaXRvci50eHQuaHRtbCgpKTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBmID0gdGhpcztcbiAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIGYuZWRpdG9yID0gbmV3IGYxKFwiI2VkaXRvclwiLmNvbmNhdChmLnVuaSkpLCBmLmVkaXRvci5jb25maWcuekluZGV4ID0gMiwgZi5jb25maWcgJiYgcDEoZi5lZGl0b3IuY29uZmlnLCBmLmNvbmZpZyksIGYuaW5pdCAmJiBmLmluaXQoZi5lZGl0b3IpLCBmLmVkaXRvci5jcmVhdGUoKSwgZi5lbmFibGUoKSwgZi5lZGl0b3IudHh0Lmh0bWwoZi5tb2RlbFZhbHVlKTtcbiAgICB9KTtcbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZiA9IGwxKHt9LCB0aGlzLiRhdHRycyk7XG4gICAgcmV0dXJuIGRlbGV0ZSBmLmlkLCB1ZShcImRpdlwiLCBFbyhmLCB7XG4gICAgICBvbklucHV0OiB0aGlzLnJlc3VsdCxcbiAgICAgIGlkOiBcImVkaXRvclwiLmNvbmNhdCh0aGlzLnVuaSksXG4gICAgICBzdHlsZTogXCJsaW5lLWhlaWdodDogbm9ybWFsO1wiXG4gICAgfSksIG51bGwpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmVkaXRvciAmJiB0aGlzLmVkaXRvci5kZXN0cm95KCksIHRoaXMuZWRpdG9yID0gbnVsbDtcbiAgfVxufSk7XG5jb25zdCBIYSA9IChyLCBmLCBvKSA9PiB7XG4gIG90LmNvbXBvbmVudChyLCBvIHx8IGYpLCBPYS5jb21wb25lbnQociwgZik7XG59O1xub3QuY29tcG9uZW50KFwiZHJhZ2dhYmxlXCIsIEhzKTtcbm90LmNvbXBvbmVudChcIkRyYWdUb29sXCIsIGhjKTtcbm90LmNvbXBvbmVudChcIkRyYWdCb3hcIiwgdmMpO1xub3QuY29tcG9uZW50KFwiVmFsaWRhdGVcIiwgeUEpO1xub3QuY29tcG9uZW50KFwiU3RydWN0XCIsIHYwKTtcbm90LmNvbXBvbmVudChcIkh0bWxFZGl0b3JcIiwgUzApO1xub3QuY29tcG9uZW50KFwiRmV0Y2hDb25maWdcIiwgUDApO1xub3QuY29tcG9uZW50KFwiRm5FZGl0b3JcIiwgRmEpO1xub3QuY29tcG9uZW50KFwiUmVxdWlyZWRcIiwgRUEpO1xub3QuY29tcG9uZW50KFwiVGFibGVPcHRpb25zXCIsIE5BKTtcbm90LmNvbXBvbmVudChcIlRyZWVPcHRpb25zXCIsIEdBKTtcbm90LmNvbXBvbmVudChcIlRhYmxlRm9ybUNvbHVtblwiLCBhMSk7XG5vdC5jb21wb25lbnQoXCJFdmVudENvbmZpZ1wiLCBhYyk7XG5vdC5jb21wb25lbnQoXCJDb2xvcklucHV0XCIsIEgwKTtcbm90LmNvbXBvbmVudChcIlNpemVJbnB1dFwiLCBVMCk7XG5vdC5jb21wb25lbnQoXCJGaWVsZElucHV0XCIsIEcwKTtcbm90LmNvbXBvbmVudChcIkZuQ29uZmlnXCIsIHEwKTtcbm90LmNvbXBvbmVudChcIkZjUm93XCIsIHkwKTtcbkhhKFwiRmNFZGl0b3JcIiwgaDEpO1xuSGEoXCJUYWJsZUZvcm1cIiwgdDEsIFpBKTtcbkhhKFwiRmNUYWJsZVwiLCB2QSwgZEEpO1xuY29uc3QgdjEgPSBmdW5jdGlvbihyKSB7XG4gIHIuY29tcG9uZW50KFwiRmNEZXNpZ25lclwiLCBPcik7XG59O1xuT3IuaW5zdGFsbCA9IHYxO1xuT3IubWFrZU9wdGlvbnNSdWxlID0gTWE7XG5Pci5mb3JtQ3JlYXRlID0gT2E7XG5Pci5kZXNpZ25lckZvcm0gPSBvdDtcbk9yLmNvbXBvbmVudCA9IEhhO1xuT3IudXNlTG9jYWxlID0gb2M7XG5Pci50ID0gT3M7XG5MaChcIjMuMS4yN1wiLCBPYS52ZXJzaW9uKSA9PT0gMSAmJiBjb25zb2xlLndhcm4oXCJQbGVhc2UgdXNlIEZvcm1DcmVhdGUgdmVyc2lvbiAzLjEuMjcgb3IgZ3JlYXRlciwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS94YWJveS9mb3JtLWNyZWF0ZS5cIik7XG5leHBvcnQge1xuICBPciBhcyBkZWZhdWx0LFxuICBvdCBhcyBkZXNpZ25lckZvcm0sXG4gIE9hIGFzIGZvcm1DcmVhdGUsXG4gIHYxIGFzIGluc3RhbGxcbn07XG4iLCIvLyBEZXBlbmRzIG9uIGpzYm4uanMgYW5kIHJuZy5qc1xuLy8gVmVyc2lvbiAxLjE6IHN1cHBvcnQgdXRmLTggZW5jb2RpbmcgaW4gcGtjczFwYWQyXG4vLyBjb252ZXJ0IGEgKGhleCkgc3RyaW5nIHRvIGEgYmlnbnVtIG9iamVjdFxuaW1wb3J0IHsgQmlnSW50ZWdlciwgbmJpLCBwYXJzZUJpZ0ludCB9IGZyb20gXCIuL2pzYm5cIjtcbmltcG9ydCB7IFNlY3VyZVJhbmRvbSB9IGZyb20gXCIuL3JuZ1wiO1xuLy8gZnVuY3Rpb24gbGluZWJyayhzLG4pIHtcbi8vICAgdmFyIHJldCA9IFwiXCI7XG4vLyAgIHZhciBpID0gMDtcbi8vICAgd2hpbGUoaSArIG4gPCBzLmxlbmd0aCkge1xuLy8gICAgIHJldCArPSBzLnN1YnN0cmluZyhpLGkrbikgKyBcIlxcblwiO1xuLy8gICAgIGkgKz0gbjtcbi8vICAgfVxuLy8gICByZXR1cm4gcmV0ICsgcy5zdWJzdHJpbmcoaSxzLmxlbmd0aCk7XG4vLyB9XG4vLyBmdW5jdGlvbiBieXRlMkhleChiKSB7XG4vLyAgIGlmKGIgPCAweDEwKVxuLy8gICAgIHJldHVybiBcIjBcIiArIGIudG9TdHJpbmcoMTYpO1xuLy8gICBlbHNlXG4vLyAgICAgcmV0dXJuIGIudG9TdHJpbmcoMTYpO1xuLy8gfVxuZnVuY3Rpb24gcGtjczFwYWQxKHMsIG4pIHtcbiAgICBpZiAobiA8IHMubGVuZ3RoICsgMjIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIk1lc3NhZ2UgdG9vIGxvbmcgZm9yIFJTQVwiKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBsZW4gPSBuIC0gcy5sZW5ndGggLSA2O1xuICAgIHZhciBmaWxsZXIgPSBcIlwiO1xuICAgIGZvciAodmFyIGYgPSAwOyBmIDwgbGVuOyBmICs9IDIpIHtcbiAgICAgICAgZmlsbGVyICs9IFwiZmZcIjtcbiAgICB9XG4gICAgdmFyIG0gPSBcIjAwMDFcIiArIGZpbGxlciArIFwiMDBcIiArIHM7XG4gICAgcmV0dXJuIHBhcnNlQmlnSW50KG0sIDE2KTtcbn1cbi8vIFBLQ1MjMSAodHlwZSAyLCByYW5kb20pIHBhZCBpbnB1dCBzdHJpbmcgcyB0byBuIGJ5dGVzLCBhbmQgcmV0dXJuIGEgYmlnaW50XG5mdW5jdGlvbiBwa2NzMXBhZDIocywgbikge1xuICAgIGlmIChuIDwgcy5sZW5ndGggKyAxMSkgeyAvLyBUT0RPOiBmaXggZm9yIHV0Zi04XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJNZXNzYWdlIHRvbyBsb25nIGZvciBSU0FcIik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgYmEgPSBbXTtcbiAgICB2YXIgaSA9IHMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoaSA+PSAwICYmIG4gPiAwKSB7XG4gICAgICAgIHZhciBjID0gcy5jaGFyQ29kZUF0KGktLSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7IC8vIGVuY29kZSB1c2luZyB1dGYtOFxuICAgICAgICAgICAgYmFbLS1uXSA9IGM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGMgPiAxMjcpICYmIChjIDwgMjA0OCkpIHtcbiAgICAgICAgICAgIGJhWy0tbl0gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgICAgIGJhWy0tbl0gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJhWy0tbl0gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgICAgIGJhWy0tbl0gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgICBiYVstLW5dID0gKGMgPj4gMTIpIHwgMjI0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGJhWy0tbl0gPSAwO1xuICAgIHZhciBybmcgPSBuZXcgU2VjdXJlUmFuZG9tKCk7XG4gICAgdmFyIHggPSBbXTtcbiAgICB3aGlsZSAobiA+IDIpIHsgLy8gcmFuZG9tIG5vbi16ZXJvIHBhZFxuICAgICAgICB4WzBdID0gMDtcbiAgICAgICAgd2hpbGUgKHhbMF0gPT0gMCkge1xuICAgICAgICAgICAgcm5nLm5leHRCeXRlcyh4KTtcbiAgICAgICAgfVxuICAgICAgICBiYVstLW5dID0geFswXTtcbiAgICB9XG4gICAgYmFbLS1uXSA9IDI7XG4gICAgYmFbLS1uXSA9IDA7XG4gICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGJhKTtcbn1cbi8vIFwiZW1wdHlcIiBSU0Ega2V5IGNvbnN0cnVjdG9yXG52YXIgUlNBS2V5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFJTQUtleSgpIHtcbiAgICAgICAgdGhpcy5uID0gbnVsbDtcbiAgICAgICAgdGhpcy5lID0gMDtcbiAgICAgICAgdGhpcy5kID0gbnVsbDtcbiAgICAgICAgdGhpcy5wID0gbnVsbDtcbiAgICAgICAgdGhpcy5xID0gbnVsbDtcbiAgICAgICAgdGhpcy5kbXAxID0gbnVsbDtcbiAgICAgICAgdGhpcy5kbXExID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb2VmZiA9IG51bGw7XG4gICAgfVxuICAgIC8vI3JlZ2lvbiBQUk9URUNURURcbiAgICAvLyBwcm90ZWN0ZWRcbiAgICAvLyBSU0FLZXkucHJvdG90eXBlLmRvUHVibGljID0gUlNBRG9QdWJsaWM7XG4gICAgLy8gUGVyZm9ybSByYXcgcHVibGljIG9wZXJhdGlvbiBvbiBcInhcIjogcmV0dXJuIHheZSAobW9kIG4pXG4gICAgUlNBS2V5LnByb3RvdHlwZS5kb1B1YmxpYyA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4Lm1vZFBvd0ludCh0aGlzLmUsIHRoaXMubik7XG4gICAgfTtcbiAgICAvLyBSU0FLZXkucHJvdG90eXBlLmRvUHJpdmF0ZSA9IFJTQURvUHJpdmF0ZTtcbiAgICAvLyBQZXJmb3JtIHJhdyBwcml2YXRlIG9wZXJhdGlvbiBvbiBcInhcIjogcmV0dXJuIHheZCAobW9kIG4pXG4gICAgUlNBS2V5LnByb3RvdHlwZS5kb1ByaXZhdGUgPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICBpZiAodGhpcy5wID09IG51bGwgfHwgdGhpcy5xID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB4Lm1vZFBvdyh0aGlzLmQsIHRoaXMubik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETzogcmUtY2FsY3VsYXRlIGFueSBtaXNzaW5nIENSVCBwYXJhbXNcbiAgICAgICAgdmFyIHhwID0geC5tb2QodGhpcy5wKS5tb2RQb3codGhpcy5kbXAxLCB0aGlzLnApO1xuICAgICAgICB2YXIgeHEgPSB4Lm1vZCh0aGlzLnEpLm1vZFBvdyh0aGlzLmRtcTEsIHRoaXMucSk7XG4gICAgICAgIHdoaWxlICh4cC5jb21wYXJlVG8oeHEpIDwgMCkge1xuICAgICAgICAgICAgeHAgPSB4cC5hZGQodGhpcy5wKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geHAuc3VidHJhY3QoeHEpLm11bHRpcGx5KHRoaXMuY29lZmYpLm1vZCh0aGlzLnApLm11bHRpcGx5KHRoaXMucSkuYWRkKHhxKTtcbiAgICB9O1xuICAgIC8vI2VuZHJlZ2lvbiBQUk9URUNURURcbiAgICAvLyNyZWdpb24gUFVCTElDXG4gICAgLy8gUlNBS2V5LnByb3RvdHlwZS5zZXRQdWJsaWMgPSBSU0FTZXRQdWJsaWM7XG4gICAgLy8gU2V0IHRoZSBwdWJsaWMga2V5IGZpZWxkcyBOIGFuZCBlIGZyb20gaGV4IHN0cmluZ3NcbiAgICBSU0FLZXkucHJvdG90eXBlLnNldFB1YmxpYyA9IGZ1bmN0aW9uIChOLCBFKSB7XG4gICAgICAgIGlmIChOICE9IG51bGwgJiYgRSAhPSBudWxsICYmIE4ubGVuZ3RoID4gMCAmJiBFLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubiA9IHBhcnNlQmlnSW50KE4sIDE2KTtcbiAgICAgICAgICAgIHRoaXMuZSA9IHBhcnNlSW50KEUsIDE2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIFJTQSBwdWJsaWMga2V5XCIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvLyBSU0FLZXkucHJvdG90eXBlLmVuY3J5cHQgPSBSU0FFbmNyeXB0O1xuICAgIC8vIFJldHVybiB0aGUgUEtDUyMxIFJTQSBlbmNyeXB0aW9uIG9mIFwidGV4dFwiIGFzIGFuIGV2ZW4tbGVuZ3RoIGhleCBzdHJpbmdcbiAgICBSU0FLZXkucHJvdG90eXBlLmVuY3J5cHQgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICB2YXIgbWF4TGVuZ3RoID0gKHRoaXMubi5iaXRMZW5ndGgoKSArIDcpID4+IDM7XG4gICAgICAgIHZhciBtID0gcGtjczFwYWQyKHRleHQsIG1heExlbmd0aCk7XG4gICAgICAgIGlmIChtID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjID0gdGhpcy5kb1B1YmxpYyhtKTtcbiAgICAgICAgaWYgKGMgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGggPSBjLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGgubGVuZ3RoO1xuICAgICAgICAvLyBmaXggemVybyBiZWZvcmUgcmVzdWx0XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4TGVuZ3RoICogMiAtIGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBoID0gXCIwXCIgKyBoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoO1xuICAgIH07XG4gICAgLy8gUlNBS2V5LnByb3RvdHlwZS5zZXRQcml2YXRlID0gUlNBU2V0UHJpdmF0ZTtcbiAgICAvLyBTZXQgdGhlIHByaXZhdGUga2V5IGZpZWxkcyBOLCBlLCBhbmQgZCBmcm9tIGhleCBzdHJpbmdzXG4gICAgUlNBS2V5LnByb3RvdHlwZS5zZXRQcml2YXRlID0gZnVuY3Rpb24gKE4sIEUsIEQpIHtcbiAgICAgICAgaWYgKE4gIT0gbnVsbCAmJiBFICE9IG51bGwgJiYgTi5sZW5ndGggPiAwICYmIEUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5uID0gcGFyc2VCaWdJbnQoTiwgMTYpO1xuICAgICAgICAgICAgdGhpcy5lID0gcGFyc2VJbnQoRSwgMTYpO1xuICAgICAgICAgICAgdGhpcy5kID0gcGFyc2VCaWdJbnQoRCwgMTYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgUlNBIHByaXZhdGUga2V5XCIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvLyBSU0FLZXkucHJvdG90eXBlLnNldFByaXZhdGVFeCA9IFJTQVNldFByaXZhdGVFeDtcbiAgICAvLyBTZXQgdGhlIHByaXZhdGUga2V5IGZpZWxkcyBOLCBlLCBkIGFuZCBDUlQgcGFyYW1zIGZyb20gaGV4IHN0cmluZ3NcbiAgICBSU0FLZXkucHJvdG90eXBlLnNldFByaXZhdGVFeCA9IGZ1bmN0aW9uIChOLCBFLCBELCBQLCBRLCBEUCwgRFEsIEMpIHtcbiAgICAgICAgaWYgKE4gIT0gbnVsbCAmJiBFICE9IG51bGwgJiYgTi5sZW5ndGggPiAwICYmIEUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5uID0gcGFyc2VCaWdJbnQoTiwgMTYpO1xuICAgICAgICAgICAgdGhpcy5lID0gcGFyc2VJbnQoRSwgMTYpO1xuICAgICAgICAgICAgdGhpcy5kID0gcGFyc2VCaWdJbnQoRCwgMTYpO1xuICAgICAgICAgICAgdGhpcy5wID0gcGFyc2VCaWdJbnQoUCwgMTYpO1xuICAgICAgICAgICAgdGhpcy5xID0gcGFyc2VCaWdJbnQoUSwgMTYpO1xuICAgICAgICAgICAgdGhpcy5kbXAxID0gcGFyc2VCaWdJbnQoRFAsIDE2KTtcbiAgICAgICAgICAgIHRoaXMuZG1xMSA9IHBhcnNlQmlnSW50KERRLCAxNik7XG4gICAgICAgICAgICB0aGlzLmNvZWZmID0gcGFyc2VCaWdJbnQoQywgMTYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgUlNBIHByaXZhdGUga2V5XCIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvLyBSU0FLZXkucHJvdG90eXBlLmdlbmVyYXRlID0gUlNBR2VuZXJhdGU7XG4gICAgLy8gR2VuZXJhdGUgYSBuZXcgcmFuZG9tIHByaXZhdGUga2V5IEIgYml0cyBsb25nLCB1c2luZyBwdWJsaWMgZXhwdCBFXG4gICAgUlNBS2V5LnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uIChCLCBFKSB7XG4gICAgICAgIHZhciBybmcgPSBuZXcgU2VjdXJlUmFuZG9tKCk7XG4gICAgICAgIHZhciBxcyA9IEIgPj4gMTtcbiAgICAgICAgdGhpcy5lID0gcGFyc2VJbnQoRSwgMTYpO1xuICAgICAgICB2YXIgZWUgPSBuZXcgQmlnSW50ZWdlcihFLCAxNik7XG4gICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnAgPSBuZXcgQmlnSW50ZWdlcihCIC0gcXMsIDEsIHJuZyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucC5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSkuZ2NkKGVlKS5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpID09IDAgJiYgdGhpcy5wLmlzUHJvYmFibGVQcmltZSgxMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgICAgIHRoaXMucSA9IG5ldyBCaWdJbnRlZ2VyKHFzLCAxLCBybmcpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnEuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpLmdjZChlZSkuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSA9PSAwICYmIHRoaXMucS5pc1Byb2JhYmxlUHJpbWUoMTApKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnAuY29tcGFyZVRvKHRoaXMucSkgPD0gMCkge1xuICAgICAgICAgICAgICAgIHZhciB0ID0gdGhpcy5wO1xuICAgICAgICAgICAgICAgIHRoaXMucCA9IHRoaXMucTtcbiAgICAgICAgICAgICAgICB0aGlzLnEgPSB0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHAxID0gdGhpcy5wLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKTtcbiAgICAgICAgICAgIHZhciBxMSA9IHRoaXMucS5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSk7XG4gICAgICAgICAgICB2YXIgcGhpID0gcDEubXVsdGlwbHkocTEpO1xuICAgICAgICAgICAgaWYgKHBoaS5nY2QoZWUpLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubiA9IHRoaXMucC5tdWx0aXBseSh0aGlzLnEpO1xuICAgICAgICAgICAgICAgIHRoaXMuZCA9IGVlLm1vZEludmVyc2UocGhpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRtcDEgPSB0aGlzLmQubW9kKHAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRtcTEgPSB0aGlzLmQubW9kKHExKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWZmID0gdGhpcy5xLm1vZEludmVyc2UodGhpcy5wKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgLy8gUlNBS2V5LnByb3RvdHlwZS5kZWNyeXB0ID0gUlNBRGVjcnlwdDtcbiAgICAvLyBSZXR1cm4gdGhlIFBLQ1MjMSBSU0EgZGVjcnlwdGlvbiBvZiBcImN0ZXh0XCIuXG4gICAgLy8gXCJjdGV4dFwiIGlzIGFuIGV2ZW4tbGVuZ3RoIGhleCBzdHJpbmcgYW5kIHRoZSBvdXRwdXQgaXMgYSBwbGFpbiBzdHJpbmcuXG4gICAgUlNBS2V5LnByb3RvdHlwZS5kZWNyeXB0ID0gZnVuY3Rpb24gKGN0ZXh0KSB7XG4gICAgICAgIHZhciBjID0gcGFyc2VCaWdJbnQoY3RleHQsIDE2KTtcbiAgICAgICAgdmFyIG0gPSB0aGlzLmRvUHJpdmF0ZShjKTtcbiAgICAgICAgaWYgKG0gPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBrY3MxdW5wYWQyKG0sICh0aGlzLm4uYml0TGVuZ3RoKCkgKyA3KSA+PiAzKTtcbiAgICB9O1xuICAgIC8vIEdlbmVyYXRlIGEgbmV3IHJhbmRvbSBwcml2YXRlIGtleSBCIGJpdHMgbG9uZywgdXNpbmcgcHVibGljIGV4cHQgRVxuICAgIFJTQUtleS5wcm90b3R5cGUuZ2VuZXJhdGVBc3luYyA9IGZ1bmN0aW9uIChCLCBFLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcm5nID0gbmV3IFNlY3VyZVJhbmRvbSgpO1xuICAgICAgICB2YXIgcXMgPSBCID4+IDE7XG4gICAgICAgIHRoaXMuZSA9IHBhcnNlSW50KEUsIDE2KTtcbiAgICAgICAgdmFyIGVlID0gbmV3IEJpZ0ludGVnZXIoRSwgMTYpO1xuICAgICAgICB2YXIgcnNhID0gdGhpcztcbiAgICAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGhhdmUgbm9uLWRlc2NyaXB0IG5hbWVzIGJlY2F1c2UgdGhleSB3ZXJlIG9yaWdpbmFsbHkgZm9yKDs7KSBsb29wcy5cbiAgICAgICAgLy8gSSBkb24ndCBrbm93IGFib3V0IGNyeXB0b2dyYXBoeSB0byBnaXZlIHRoZW0gYmV0dGVyIG5hbWVzIHRoYW4gbG9vcDEtNC5cbiAgICAgICAgdmFyIGxvb3AxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGxvb3A0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChyc2EucC5jb21wYXJlVG8ocnNhLnEpIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSByc2EucDtcbiAgICAgICAgICAgICAgICAgICAgcnNhLnAgPSByc2EucTtcbiAgICAgICAgICAgICAgICAgICAgcnNhLnEgPSB0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgcDEgPSByc2EucC5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSk7XG4gICAgICAgICAgICAgICAgdmFyIHExID0gcnNhLnEuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpO1xuICAgICAgICAgICAgICAgIHZhciBwaGkgPSBwMS5tdWx0aXBseShxMSk7XG4gICAgICAgICAgICAgICAgaWYgKHBoaS5nY2QoZWUpLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByc2EubiA9IHJzYS5wLm11bHRpcGx5KHJzYS5xKTtcbiAgICAgICAgICAgICAgICAgICAgcnNhLmQgPSBlZS5tb2RJbnZlcnNlKHBoaSk7XG4gICAgICAgICAgICAgICAgICAgIHJzYS5kbXAxID0gcnNhLmQubW9kKHAxKTtcbiAgICAgICAgICAgICAgICAgICAgcnNhLmRtcTEgPSByc2EuZC5tb2QocTEpO1xuICAgICAgICAgICAgICAgICAgICByc2EuY29lZmYgPSByc2EucS5tb2RJbnZlcnNlKHJzYS5wKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGNhbGxiYWNrKCk7IH0sIDApOyAvLyBlc2NhcGVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQobG9vcDEsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgbG9vcDMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcnNhLnEgPSBuYmkoKTtcbiAgICAgICAgICAgICAgICByc2EucS5mcm9tTnVtYmVyQXN5bmMocXMsIDEsIHJuZywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByc2EucS5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSkuZ2NkYShlZSwgZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPT0gMCAmJiByc2EucS5pc1Byb2JhYmxlUHJpbWUoMTApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChsb29wNCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGxvb3AzLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIGxvb3AyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJzYS5wID0gbmJpKCk7XG4gICAgICAgICAgICAgICAgcnNhLnAuZnJvbU51bWJlckFzeW5jKEIgLSBxcywgMSwgcm5nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJzYS5wLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKS5nY2RhKGVlLCBmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSA9PSAwICYmIHJzYS5wLmlzUHJvYmFibGVQcmltZSgxMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGxvb3AzLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQobG9vcDIsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGxvb3AyLCAwKTtcbiAgICAgICAgfTtcbiAgICAgICAgc2V0VGltZW91dChsb29wMSwgMCk7XG4gICAgfTtcbiAgICBSU0FLZXkucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiAodGV4dCwgZGlnZXN0TWV0aG9kLCBkaWdlc3ROYW1lKSB7XG4gICAgICAgIHZhciBoZWFkZXIgPSBnZXREaWdlc3RIZWFkZXIoZGlnZXN0TmFtZSk7XG4gICAgICAgIHZhciBkaWdlc3QgPSBoZWFkZXIgKyBkaWdlc3RNZXRob2QodGV4dCkudG9TdHJpbmcoKTtcbiAgICAgICAgdmFyIG0gPSBwa2NzMXBhZDEoZGlnZXN0LCB0aGlzLm4uYml0TGVuZ3RoKCkgLyA0KTtcbiAgICAgICAgaWYgKG0gPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGMgPSB0aGlzLmRvUHJpdmF0ZShtKTtcbiAgICAgICAgaWYgKGMgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGggPSBjLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaWYgKChoLmxlbmd0aCAmIDEpID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwiMFwiICsgaDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUlNBS2V5LnByb3RvdHlwZS52ZXJpZnkgPSBmdW5jdGlvbiAodGV4dCwgc2lnbmF0dXJlLCBkaWdlc3RNZXRob2QpIHtcbiAgICAgICAgdmFyIGMgPSBwYXJzZUJpZ0ludChzaWduYXR1cmUsIDE2KTtcbiAgICAgICAgdmFyIG0gPSB0aGlzLmRvUHVibGljKGMpO1xuICAgICAgICBpZiAobSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdW5wYWRkZWQgPSBtLnRvU3RyaW5nKDE2KS5yZXBsYWNlKC9eMWYrMDAvLCBcIlwiKTtcbiAgICAgICAgdmFyIGRpZ2VzdCA9IHJlbW92ZURpZ2VzdEhlYWRlcih1bnBhZGRlZCk7XG4gICAgICAgIHJldHVybiBkaWdlc3QgPT0gZGlnZXN0TWV0aG9kKHRleHQpLnRvU3RyaW5nKCk7XG4gICAgfTtcbiAgICByZXR1cm4gUlNBS2V5O1xufSgpKTtcbmV4cG9ydCB7IFJTQUtleSB9O1xuLy8gVW5kbyBQS0NTIzEgKHR5cGUgMiwgcmFuZG9tKSBwYWRkaW5nIGFuZCwgaWYgdmFsaWQsIHJldHVybiB0aGUgcGxhaW50ZXh0XG5mdW5jdGlvbiBwa2NzMXVucGFkMihkLCBuKSB7XG4gICAgdmFyIGIgPSBkLnRvQnl0ZUFycmF5KCk7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgYi5sZW5ndGggJiYgYltpXSA9PSAwKSB7XG4gICAgICAgICsraTtcbiAgICB9XG4gICAgaWYgKGIubGVuZ3RoIC0gaSAhPSBuIC0gMSB8fCBiW2ldICE9IDIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgICsraTtcbiAgICB3aGlsZSAoYltpXSAhPSAwKSB7XG4gICAgICAgIGlmICgrK2kgPj0gYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciByZXQgPSBcIlwiO1xuICAgIHdoaWxlICgrK2kgPCBiLmxlbmd0aCkge1xuICAgICAgICB2YXIgYyA9IGJbaV0gJiAyNTU7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7IC8vIHV0Zi04IGRlY29kZVxuICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGMgPiAxOTEpICYmIChjIDwgMjI0KSkge1xuICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChjICYgMzEpIDw8IDYpIHwgKGJbaSArIDFdICYgNjMpKTtcbiAgICAgICAgICAgICsraTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAmIDE1KSA8PCAxMikgfCAoKGJbaSArIDFdICYgNjMpIDw8IDYpIHwgKGJbaSArIDJdICYgNjMpKTtcbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0NDcjcGFnZS00M1xudmFyIERJR0VTVF9IRUFERVJTID0ge1xuICAgIG1kMjogXCIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjAyMDUwMDA0MTBcIixcbiAgICBtZDU6IFwiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwXCIsXG4gICAgc2hhMTogXCIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTRcIixcbiAgICBzaGEyMjQ6IFwiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWNcIixcbiAgICBzaGEyNTY6IFwiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjBcIixcbiAgICBzaGEzODQ6IFwiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzBcIixcbiAgICBzaGE1MTI6IFwiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDBcIixcbiAgICByaXBlbWQxNjA6IFwiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0XCJcbn07XG5mdW5jdGlvbiBnZXREaWdlc3RIZWFkZXIobmFtZSkge1xuICAgIHJldHVybiBESUdFU1RfSEVBREVSU1tuYW1lXSB8fCBcIlwiO1xufVxuZnVuY3Rpb24gcmVtb3ZlRGlnZXN0SGVhZGVyKHN0cikge1xuICAgIGZvciAodmFyIG5hbWVfMSBpbiBESUdFU1RfSEVBREVSUykge1xuICAgICAgICBpZiAoRElHRVNUX0hFQURFUlMuaGFzT3duUHJvcGVydHkobmFtZV8xKSkge1xuICAgICAgICAgICAgdmFyIGhlYWRlciA9IERJR0VTVF9IRUFERVJTW25hbWVfMV07XG4gICAgICAgICAgICB2YXIgbGVuID0gaGVhZGVyLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChzdHIuc3Vic3RyKDAsIGxlbikgPT0gaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIobGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuLy8gUmV0dXJuIHRoZSBQS0NTIzEgUlNBIGVuY3J5cHRpb24gb2YgXCJ0ZXh0XCIgYXMgYSBCYXNlNjQtZW5jb2RlZCBzdHJpbmdcbi8vIGZ1bmN0aW9uIFJTQUVuY3J5cHRCNjQodGV4dCkge1xuLy8gIHZhciBoID0gdGhpcy5lbmNyeXB0KHRleHQpO1xuLy8gIGlmKGgpIHJldHVybiBoZXgyYjY0KGgpOyBlbHNlIHJldHVybiBudWxsO1xuLy8gfVxuLy8gcHVibGljXG4vLyBSU0FLZXkucHJvdG90eXBlLmVuY3J5cHRfYjY0ID0gUlNBRW5jcnlwdEI2NDtcbiIsIi8qIGFzbjEtMS4wLjEzLmpzIChjKSAyMDEzLTIwMTcgS2VuamkgVXJ1c2hpbWEgfCBranVyLmdpdGh1Yi5jb20vanNyc2FzaWduL2xpY2Vuc2VcbiAqL1xuLypcbiAqIGFzbjEuanMgLSBBU04uMSBERVIgZW5jb2RlciBjbGFzc2VzXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTcgS2VuamkgVXJ1c2hpbWEgKGtlbmppLnVydXNoaW1hQGdtYWlsLmNvbSlcbiAqXG4gKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UuXG4gKiBodHRwczovL2tqdXIuZ2l0aHViLmlvL2pzcnNhc2lnbi9saWNlbnNlXG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBhbmQgbGljZW5zZSBub3RpY2Ugc2hhbGwgYmVcbiAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICovXG5pbXBvcnQgeyBCaWdJbnRlZ2VyIH0gZnJvbSBcIi4uL2pzYm4vanNiblwiO1xuaW1wb3J0IHsgWUFIT08gfSBmcm9tIFwiLi95YWhvb1wiO1xuLyoqXG4gKiBAZmlsZU92ZXJ2aWV3XG4gKiBAbmFtZSBhc24xLTEuMC5qc1xuICogQGF1dGhvciBLZW5qaSBVcnVzaGltYSBrZW5qaS51cnVzaGltYUBnbWFpbC5jb21cbiAqIEB2ZXJzaW9uIGFzbjEgMS4wLjEzICgyMDE3LUp1bi0wMilcbiAqIEBzaW5jZSBqc3JzYXNpZ24gMi4xXG4gKiBAbGljZW5zZSA8YSBocmVmPVwiaHR0cHM6Ly9ranVyLmdpdGh1Yi5pby9qc3JzYXNpZ24vbGljZW5zZS9cIj5NSVQgTGljZW5zZTwvYT5cbiAqL1xuLyoqXG4gKiBranVyJ3MgY2xhc3MgbGlicmFyeSBuYW1lIHNwYWNlXG4gKiA8cD5cbiAqIFRoaXMgbmFtZSBzcGFjZSBwcm92aWRlcyBmb2xsb3dpbmcgbmFtZSBzcGFjZXM6XG4gKiA8dWw+XG4gKiA8bGk+e0BsaW5rIEtKVVIuYXNuMX0gLSBBU04uMSBwcmltaXRpdmUgaGV4YWRlY2ltYWwgZW5jb2RlcjwvbGk+XG4gKiA8bGk+e0BsaW5rIEtKVVIuYXNuMS54NTA5fSAtIEFTTi4xIHN0cnVjdHVyZSBmb3IgWC41MDkgY2VydGlmaWNhdGUgYW5kIENSTDwvbGk+XG4gKiA8bGk+e0BsaW5rIEtKVVIuY3J5cHRvfSAtIEphdmEgQ3J5cHRvZ3JhcGhpYyBFeHRlbnNpb24oSkNFKSBzdHlsZSBNZXNzYWdlRGlnZXN0L1NpZ25hdHVyZVxuICogY2xhc3MgYW5kIHV0aWxpdGllczwvbGk+XG4gKiA8L3VsPlxuICogPC9wPlxuICogTk9URTogUGxlYXNlIGlnbm9yZSBtZXRob2Qgc3VtbWFyeSBhbmQgZG9jdW1lbnQgb2YgdGhpcyBuYW1lc3BhY2UuIFRoaXMgY2F1c2VkIGJ5IGEgYnVnIG9mIGpzZG9jMi5cbiAqIEBuYW1lIEtKVVJcbiAqIEBuYW1lc3BhY2Uga2p1cidzIGNsYXNzIGxpYnJhcnkgbmFtZSBzcGFjZVxuICovXG5leHBvcnQgdmFyIEtKVVIgPSB7fTtcbi8qKlxuICoga2p1cidzIEFTTi4xIGNsYXNzIGxpYnJhcnkgbmFtZSBzcGFjZVxuICogPHA+XG4gKiBUaGlzIGlzIElUVS1UIFguNjkwIEFTTi4xIERFUiBlbmNvZGVyIGNsYXNzIGxpYnJhcnkgYW5kXG4gKiBjbGFzcyBzdHJ1Y3R1cmUgYW5kIG1ldGhvZHMgaXMgdmVyeSBzaW1pbGFyIHRvXG4gKiBvcmcuYm91bmN5Y2FzdGxlLmFzbjEgcGFja2FnZSBvZlxuICogd2VsbCBrbm93biBCb3VuY3lDYXNsdGUgQ3J5cHRvZ3JhcGh5IExpYnJhcnkuXG4gKiA8aDQ+UFJPVklESU5HIEFTTi4xIFBSSU1JVElWRVM8L2g0PlxuICogSGVyZSBhcmUgQVNOLjEgREVSIHByaW1pdGl2ZSBjbGFzc2VzLlxuICogPHVsPlxuICogPGxpPjB4MDEge0BsaW5rIEtKVVIuYXNuMS5ERVJCb29sZWFufTwvbGk+XG4gKiA8bGk+MHgwMiB7QGxpbmsgS0pVUi5hc24xLkRFUkludGVnZXJ9PC9saT5cbiAqIDxsaT4weDAzIHtAbGluayBLSlVSLmFzbjEuREVSQml0U3RyaW5nfTwvbGk+XG4gKiA8bGk+MHgwNCB7QGxpbmsgS0pVUi5hc24xLkRFUk9jdGV0U3RyaW5nfTwvbGk+XG4gKiA8bGk+MHgwNSB7QGxpbmsgS0pVUi5hc24xLkRFUk51bGx9PC9saT5cbiAqIDxsaT4weDA2IHtAbGluayBLSlVSLmFzbjEuREVST2JqZWN0SWRlbnRpZmllcn08L2xpPlxuICogPGxpPjB4MGEge0BsaW5rIEtKVVIuYXNuMS5ERVJFbnVtZXJhdGVkfTwvbGk+XG4gKiA8bGk+MHgwYyB7QGxpbmsgS0pVUi5hc24xLkRFUlVURjhTdHJpbmd9PC9saT5cbiAqIDxsaT4weDEyIHtAbGluayBLSlVSLmFzbjEuREVSTnVtZXJpY1N0cmluZ308L2xpPlxuICogPGxpPjB4MTMge0BsaW5rIEtKVVIuYXNuMS5ERVJQcmludGFibGVTdHJpbmd9PC9saT5cbiAqIDxsaT4weDE0IHtAbGluayBLSlVSLmFzbjEuREVSVGVsZXRleFN0cmluZ308L2xpPlxuICogPGxpPjB4MTYge0BsaW5rIEtKVVIuYXNuMS5ERVJJQTVTdHJpbmd9PC9saT5cbiAqIDxsaT4weDE3IHtAbGluayBLSlVSLmFzbjEuREVSVVRDVGltZX08L2xpPlxuICogPGxpPjB4MTgge0BsaW5rIEtKVVIuYXNuMS5ERVJHZW5lcmFsaXplZFRpbWV9PC9saT5cbiAqIDxsaT4weDMwIHtAbGluayBLSlVSLmFzbjEuREVSU2VxdWVuY2V9PC9saT5cbiAqIDxsaT4weDMxIHtAbGluayBLSlVSLmFzbjEuREVSU2V0fTwvbGk+XG4gKiA8L3VsPlxuICogPGg0Pk9USEVSIEFTTi4xIENMQVNTRVM8L2g0PlxuICogPHVsPlxuICogPGxpPntAbGluayBLSlVSLmFzbjEuQVNOMU9iamVjdH08L2xpPlxuICogPGxpPntAbGluayBLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmd9PC9saT5cbiAqIDxsaT57QGxpbmsgS0pVUi5hc24xLkRFUkFic3RyYWN0VGltZX08L2xpPlxuICogPGxpPntAbGluayBLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkfTwvbGk+XG4gKiA8bGk+e0BsaW5rIEtKVVIuYXNuMS5ERVJUYWdnZWRPYmplY3R9PC9saT5cbiAqIDwvdWw+XG4gKiA8aDQ+U1VCIE5BTUUgU1BBQ0VTPC9oND5cbiAqIDx1bD5cbiAqIDxsaT57QGxpbmsgS0pVUi5hc24xLmNhZGVzfSAtIENBZEVTIGxvbmcgdGVybSBzaWduYXR1cmUgZm9ybWF0PC9saT5cbiAqIDxsaT57QGxpbmsgS0pVUi5hc24xLmNtc30gLSBDcnlwdG9ncmFwaGljIE1lc3NhZ2UgU3ludGF4PC9saT5cbiAqIDxsaT57QGxpbmsgS0pVUi5hc24xLmNzcn0gLSBDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3QgKENTUi9QS0NTIzEwKTwvbGk+XG4gKiA8bGk+e0BsaW5rIEtKVVIuYXNuMS50c3B9IC0gUkZDIDMxNjEgVGltZXN0YW1waW5nIFByb3RvY29sIEZvcm1hdDwvbGk+XG4gKiA8bGk+e0BsaW5rIEtKVVIuYXNuMS54NTA5fSAtIFJGQyA1MjgwIFguNTA5IGNlcnRpZmljYXRlIGFuZCBDUkw8L2xpPlxuICogPC91bD5cbiAqIDwvcD5cbiAqIE5PVEU6IFBsZWFzZSBpZ25vcmUgbWV0aG9kIHN1bW1hcnkgYW5kIGRvY3VtZW50IG9mIHRoaXMgbmFtZXNwYWNlLlxuICogVGhpcyBjYXVzZWQgYnkgYSBidWcgb2YganNkb2MyLlxuICogQG5hbWUgS0pVUi5hc24xXG4gKiBAbmFtZXNwYWNlXG4gKi9cbmlmICh0eXBlb2YgS0pVUi5hc24xID09IFwidW5kZWZpbmVkXCIgfHwgIUtKVVIuYXNuMSlcbiAgICBLSlVSLmFzbjEgPSB7fTtcbi8qKlxuICogQVNOMSB1dGlsaXRpZXMgY2xhc3NcbiAqIEBuYW1lIEtKVVIuYXNuMS5BU04xVXRpbFxuICogQGNsYXNzIEFTTjEgdXRpbGl0aWVzIGNsYXNzXG4gKiBAc2luY2UgYXNuMSAxLjAuMlxuICovXG5LSlVSLmFzbjEuQVNOMVV0aWwgPSBuZXcgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuaW50ZWdlclRvQnl0ZUhleCA9IGZ1bmN0aW9uIChpKSB7XG4gICAgICAgIHZhciBoID0gaS50b1N0cmluZygxNik7XG4gICAgICAgIGlmICgoaC5sZW5ndGggJSAyKSA9PSAxKVxuICAgICAgICAgICAgaCA9ICcwJyArIGg7XG4gICAgICAgIHJldHVybiBoO1xuICAgIH07XG4gICAgdGhpcy5iaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleCA9IGZ1bmN0aW9uIChiaWdJbnRlZ2VyVmFsdWUpIHtcbiAgICAgICAgdmFyIGggPSBiaWdJbnRlZ2VyVmFsdWUudG9TdHJpbmcoMTYpO1xuICAgICAgICBpZiAoaC5zdWJzdHIoMCwgMSkgIT0gJy0nKSB7XG4gICAgICAgICAgICBpZiAoaC5sZW5ndGggJSAyID09IDEpIHtcbiAgICAgICAgICAgICAgICBoID0gJzAnICsgaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghaC5tYXRjaCgvXlswLTddLykpIHtcbiAgICAgICAgICAgICAgICAgICAgaCA9ICcwMCcgKyBoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBoUG9zID0gaC5zdWJzdHIoMSk7XG4gICAgICAgICAgICB2YXIgeG9yTGVuID0gaFBvcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoeG9yTGVuICUgMiA9PSAxKSB7XG4gICAgICAgICAgICAgICAgeG9yTGVuICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWgubWF0Y2goL15bMC03XS8pKSB7XG4gICAgICAgICAgICAgICAgICAgIHhvckxlbiArPSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBoTWFzayA9ICcnO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4b3JMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGhNYXNrICs9ICdmJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBiaU1hc2sgPSBuZXcgQmlnSW50ZWdlcihoTWFzaywgMTYpO1xuICAgICAgICAgICAgdmFyIGJpTmVnID0gYmlNYXNrLnhvcihiaWdJbnRlZ2VyVmFsdWUpLmFkZChCaWdJbnRlZ2VyLk9ORSk7XG4gICAgICAgICAgICBoID0gYmlOZWcudG9TdHJpbmcoMTYpLnJlcGxhY2UoL14tLywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogZ2V0IFBFTSBzdHJpbmcgZnJvbSBoZXhhZGVjaW1hbCBkYXRhIGFuZCBoZWFkZXIgc3RyaW5nXG4gICAgICogQG5hbWUgZ2V0UEVNU3RyaW5nRnJvbUhleFxuICAgICAqIEBtZW1iZXJPZiBLSlVSLmFzbjEuQVNOMVV0aWxcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGF0YUhleCBoZXhhZGVjaW1hbCBzdHJpbmcgb2YgUEVNIGJvZHlcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGVtSGVhZGVyIFBFTSBoZWFkZXIgc3RyaW5nIChleC4gJ1JTQSBQUklWQVRFIEtFWScpXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBQRU0gZm9ybWF0dGVkIHN0cmluZyBvZiBpbnB1dCBkYXRhXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogVGhpcyBtZXRob2QgY29udmVydHMgYSBoZXhhZGVjaW1hbCBzdHJpbmcgdG8gYSBQRU0gc3RyaW5nIHdpdGhcbiAgICAgKiBhIHNwZWNpZmllZCBoZWFkZXIuIEl0cyBsaW5lIGJyZWFrIHdpbGwgYmUgQ1JMRihcIlxcclxcblwiKS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBwZW0gID0gS0pVUi5hc24xLkFTTjFVdGlsLmdldFBFTVN0cmluZ0Zyb21IZXgoJzYxNjE2MScsICdSU0EgUFJJVkFURSBLRVknKTtcbiAgICAgKiAvLyB2YWx1ZSBvZiBwZW0gd2lsbCBiZTpcbiAgICAgKiAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cbiAgICAgKiBZV0ZoXG4gICAgICogLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLVxuICAgICAqL1xuICAgIHRoaXMuZ2V0UEVNU3RyaW5nRnJvbUhleCA9IGZ1bmN0aW9uIChkYXRhSGV4LCBwZW1IZWFkZXIpIHtcbiAgICAgICAgcmV0dXJuIGhleHRvcGVtKGRhdGFIZXgsIHBlbUhlYWRlcik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBnZW5lcmF0ZSBBU04xT2JqZWN0IHNwZWNpZmVkIGJ5IEpTT04gcGFyYW1ldGVyc1xuICAgICAqIEBuYW1lIG5ld09iamVjdFxuICAgICAqIEBtZW1iZXJPZiBLSlVSLmFzbjEuQVNOMVV0aWxcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJhbSBKU09OIHBhcmFtZXRlciB0byBnZW5lcmF0ZSBBU04xT2JqZWN0XG4gICAgICogQHJldHVybiB7S0pVUi5hc24xLkFTTjFPYmplY3R9IGdlbmVyYXRlZCBvYmplY3RcbiAgICAgKiBAc2luY2UgYXNuMSAxLjAuM1xuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIGdlbmVyYXRlIGFueSBBU04xT2JqZWN0IHNwZWNpZmllZCBieSBKU09OIHBhcmFtXG4gICAgICogaW5jbHVkaW5nIEFTTi4xIHByaW1pdGl2ZSBvciBzdHJ1Y3R1cmVkLlxuICAgICAqIEdlbmVyYWxseSAncGFyYW0nIGNhbiBiZSBkZXNjcmliZWQgYXMgZm9sbG93czpcbiAgICAgKiA8YmxvY2txdW90ZT5cbiAgICAgKiB7VFlQRS1PRi1BU05PQko6IEFTTjFPQkotUEFSQU1FVEVSfVxuICAgICAqIDwvYmxvY2txdW90ZT5cbiAgICAgKiAnVFlQRS1PRi1BU04xT0JKJyBjYW4gYmUgb25lIG9mIGZvbGxvd2luZyBzeW1ib2xzOlxuICAgICAqIDx1bD5cbiAgICAgKiA8bGk+J2Jvb2wnIC0gREVSQm9vbGVhbjwvbGk+XG4gICAgICogPGxpPidpbnQnIC0gREVSSW50ZWdlcjwvbGk+XG4gICAgICogPGxpPidiaXRzdHInIC0gREVSQml0U3RyaW5nPC9saT5cbiAgICAgKiA8bGk+J29jdHN0cicgLSBERVJPY3RldFN0cmluZzwvbGk+XG4gICAgICogPGxpPidudWxsJyAtIERFUk51bGw8L2xpPlxuICAgICAqIDxsaT4nb2lkJyAtIERFUk9iamVjdElkZW50aWZpZXI8L2xpPlxuICAgICAqIDxsaT4nZW51bScgLSBERVJFbnVtZXJhdGVkPC9saT5cbiAgICAgKiA8bGk+J3V0ZjhzdHInIC0gREVSVVRGOFN0cmluZzwvbGk+XG4gICAgICogPGxpPidudW1zdHInIC0gREVSTnVtZXJpY1N0cmluZzwvbGk+XG4gICAgICogPGxpPidwcm5zdHInIC0gREVSUHJpbnRhYmxlU3RyaW5nPC9saT5cbiAgICAgKiA8bGk+J3RlbHN0cicgLSBERVJUZWxldGV4U3RyaW5nPC9saT5cbiAgICAgKiA8bGk+J2lhNXN0cicgLSBERVJJQTVTdHJpbmc8L2xpPlxuICAgICAqIDxsaT4ndXRjdGltZScgLSBERVJVVENUaW1lPC9saT5cbiAgICAgKiA8bGk+J2dlbnRpbWUnIC0gREVSR2VuZXJhbGl6ZWRUaW1lPC9saT5cbiAgICAgKiA8bGk+J3NlcScgLSBERVJTZXF1ZW5jZTwvbGk+XG4gICAgICogPGxpPidzZXQnIC0gREVSU2V0PC9saT5cbiAgICAgKiA8bGk+J3RhZycgLSBERVJUYWdnZWRPYmplY3Q8L2xpPlxuICAgICAqIDwvdWw+XG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBuZXdPYmplY3Qoeydwcm5zdHInOiAnYWFhJ30pO1xuICAgICAqIG5ld09iamVjdCh7J3NlcSc6IFt7J2ludCc6IDN9LCB7J3BybnN0cic6ICdhYWEnfV19KVxuICAgICAqIC8vIEFTTi4xIFRhZ2dlZCBPYmplY3RcbiAgICAgKiBuZXdPYmplY3Qoeyd0YWcnOiB7J3RhZyc6ICdhMScsXG4gICAgICogICAgICAgICAgICAgICAgICAgICdleHBsaWNpdCc6IHRydWUsXG4gICAgICogICAgICAgICAgICAgICAgICAgICdvYmonOiB7J3NlcSc6IFt7J2ludCc6IDN9LCB7J3BybnN0cic6ICdhYWEnfV19fX0pO1xuICAgICAqIC8vIG1vcmUgc2ltcGxlIHJlcHJlc2VudGF0aW9uIG9mIEFTTi4xIFRhZ2dlZCBPYmplY3RcbiAgICAgKiBuZXdPYmplY3Qoeyd0YWcnOiBbJ2ExJyxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgeydzZXEnOiBbXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgeydpbnQnOiAzfSxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICB7J3BybnN0cic6ICdhYWEnfV19XG4gICAgICogICAgICAgICAgICAgICAgICAgXX0pO1xuICAgICAqL1xuICAgIHRoaXMubmV3T2JqZWN0ID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICAgIHZhciBfS0pVUiA9IEtKVVIsIF9LSlVSX2FzbjEgPSBfS0pVUi5hc24xLCBfREVSQm9vbGVhbiA9IF9LSlVSX2FzbjEuREVSQm9vbGVhbiwgX0RFUkludGVnZXIgPSBfS0pVUl9hc24xLkRFUkludGVnZXIsIF9ERVJCaXRTdHJpbmcgPSBfS0pVUl9hc24xLkRFUkJpdFN0cmluZywgX0RFUk9jdGV0U3RyaW5nID0gX0tKVVJfYXNuMS5ERVJPY3RldFN0cmluZywgX0RFUk51bGwgPSBfS0pVUl9hc24xLkRFUk51bGwsIF9ERVJPYmplY3RJZGVudGlmaWVyID0gX0tKVVJfYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyLCBfREVSRW51bWVyYXRlZCA9IF9LSlVSX2FzbjEuREVSRW51bWVyYXRlZCwgX0RFUlVURjhTdHJpbmcgPSBfS0pVUl9hc24xLkRFUlVURjhTdHJpbmcsIF9ERVJOdW1lcmljU3RyaW5nID0gX0tKVVJfYXNuMS5ERVJOdW1lcmljU3RyaW5nLCBfREVSUHJpbnRhYmxlU3RyaW5nID0gX0tKVVJfYXNuMS5ERVJQcmludGFibGVTdHJpbmcsIF9ERVJUZWxldGV4U3RyaW5nID0gX0tKVVJfYXNuMS5ERVJUZWxldGV4U3RyaW5nLCBfREVSSUE1U3RyaW5nID0gX0tKVVJfYXNuMS5ERVJJQTVTdHJpbmcsIF9ERVJVVENUaW1lID0gX0tKVVJfYXNuMS5ERVJVVENUaW1lLCBfREVSR2VuZXJhbGl6ZWRUaW1lID0gX0tKVVJfYXNuMS5ERVJHZW5lcmFsaXplZFRpbWUsIF9ERVJTZXF1ZW5jZSA9IF9LSlVSX2FzbjEuREVSU2VxdWVuY2UsIF9ERVJTZXQgPSBfS0pVUl9hc24xLkRFUlNldCwgX0RFUlRhZ2dlZE9iamVjdCA9IF9LSlVSX2FzbjEuREVSVGFnZ2VkT2JqZWN0LCBfbmV3T2JqZWN0ID0gX0tKVVJfYXNuMS5BU04xVXRpbC5uZXdPYmplY3Q7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMocGFyYW0pO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggIT0gMSlcbiAgICAgICAgICAgIHRocm93IFwia2V5IG9mIHBhcmFtIHNoYWxsIGJlIG9ubHkgb25lLlwiO1xuICAgICAgICB2YXIga2V5ID0ga2V5c1swXTtcbiAgICAgICAgaWYgKFwiOmJvb2w6aW50OmJpdHN0cjpvY3RzdHI6bnVsbDpvaWQ6ZW51bTp1dGY4c3RyOm51bXN0cjpwcm5zdHI6dGVsc3RyOmlhNXN0cjp1dGN0aW1lOmdlbnRpbWU6c2VxOnNldDp0YWc6XCIuaW5kZXhPZihcIjpcIiArIGtleSArIFwiOlwiKSA9PSAtMSlcbiAgICAgICAgICAgIHRocm93IFwidW5kZWZpbmVkIGtleTogXCIgKyBrZXk7XG4gICAgICAgIGlmIChrZXkgPT0gXCJib29sXCIpXG4gICAgICAgICAgICByZXR1cm4gbmV3IF9ERVJCb29sZWFuKHBhcmFtW2tleV0pO1xuICAgICAgICBpZiAoa2V5ID09IFwiaW50XCIpXG4gICAgICAgICAgICByZXR1cm4gbmV3IF9ERVJJbnRlZ2VyKHBhcmFtW2tleV0pO1xuICAgICAgICBpZiAoa2V5ID09IFwiYml0c3RyXCIpXG4gICAgICAgICAgICByZXR1cm4gbmV3IF9ERVJCaXRTdHJpbmcocGFyYW1ba2V5XSk7XG4gICAgICAgIGlmIChrZXkgPT0gXCJvY3RzdHJcIilcbiAgICAgICAgICAgIHJldHVybiBuZXcgX0RFUk9jdGV0U3RyaW5nKHBhcmFtW2tleV0pO1xuICAgICAgICBpZiAoa2V5ID09IFwibnVsbFwiKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBfREVSTnVsbChwYXJhbVtrZXldKTtcbiAgICAgICAgaWYgKGtleSA9PSBcIm9pZFwiKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBfREVST2JqZWN0SWRlbnRpZmllcihwYXJhbVtrZXldKTtcbiAgICAgICAgaWYgKGtleSA9PSBcImVudW1cIilcbiAgICAgICAgICAgIHJldHVybiBuZXcgX0RFUkVudW1lcmF0ZWQocGFyYW1ba2V5XSk7XG4gICAgICAgIGlmIChrZXkgPT0gXCJ1dGY4c3RyXCIpXG4gICAgICAgICAgICByZXR1cm4gbmV3IF9ERVJVVEY4U3RyaW5nKHBhcmFtW2tleV0pO1xuICAgICAgICBpZiAoa2V5ID09IFwibnVtc3RyXCIpXG4gICAgICAgICAgICByZXR1cm4gbmV3IF9ERVJOdW1lcmljU3RyaW5nKHBhcmFtW2tleV0pO1xuICAgICAgICBpZiAoa2V5ID09IFwicHJuc3RyXCIpXG4gICAgICAgICAgICByZXR1cm4gbmV3IF9ERVJQcmludGFibGVTdHJpbmcocGFyYW1ba2V5XSk7XG4gICAgICAgIGlmIChrZXkgPT0gXCJ0ZWxzdHJcIilcbiAgICAgICAgICAgIHJldHVybiBuZXcgX0RFUlRlbGV0ZXhTdHJpbmcocGFyYW1ba2V5XSk7XG4gICAgICAgIGlmIChrZXkgPT0gXCJpYTVzdHJcIilcbiAgICAgICAgICAgIHJldHVybiBuZXcgX0RFUklBNVN0cmluZyhwYXJhbVtrZXldKTtcbiAgICAgICAgaWYgKGtleSA9PSBcInV0Y3RpbWVcIilcbiAgICAgICAgICAgIHJldHVybiBuZXcgX0RFUlVUQ1RpbWUocGFyYW1ba2V5XSk7XG4gICAgICAgIGlmIChrZXkgPT0gXCJnZW50aW1lXCIpXG4gICAgICAgICAgICByZXR1cm4gbmV3IF9ERVJHZW5lcmFsaXplZFRpbWUocGFyYW1ba2V5XSk7XG4gICAgICAgIGlmIChrZXkgPT0gXCJzZXFcIikge1xuICAgICAgICAgICAgdmFyIHBhcmFtTGlzdCA9IHBhcmFtW2tleV07XG4gICAgICAgICAgICB2YXIgYSA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgYXNuMU9iaiA9IF9uZXdPYmplY3QocGFyYW1MaXN0W2ldKTtcbiAgICAgICAgICAgICAgICBhLnB1c2goYXNuMU9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IF9ERVJTZXF1ZW5jZSh7ICdhcnJheSc6IGEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PSBcInNldFwiKSB7XG4gICAgICAgICAgICB2YXIgcGFyYW1MaXN0ID0gcGFyYW1ba2V5XTtcbiAgICAgICAgICAgIHZhciBhID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBhc24xT2JqID0gX25ld09iamVjdChwYXJhbUxpc3RbaV0pO1xuICAgICAgICAgICAgICAgIGEucHVzaChhc24xT2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgX0RFUlNldCh7ICdhcnJheSc6IGEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PSBcInRhZ1wiKSB7XG4gICAgICAgICAgICB2YXIgdGFnUGFyYW0gPSBwYXJhbVtrZXldO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0YWdQYXJhbSkgPT09ICdbb2JqZWN0IEFycmF5XScgJiZcbiAgICAgICAgICAgICAgICB0YWdQYXJhbS5sZW5ndGggPT0gMykge1xuICAgICAgICAgICAgICAgIHZhciBvYmogPSBfbmV3T2JqZWN0KHRhZ1BhcmFtWzJdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9ERVJUYWdnZWRPYmplY3QoeyB0YWc6IHRhZ1BhcmFtWzBdLFxuICAgICAgICAgICAgICAgICAgICBleHBsaWNpdDogdGFnUGFyYW1bMV0sXG4gICAgICAgICAgICAgICAgICAgIG9iajogb2JqIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIG5ld1BhcmFtID0ge307XG4gICAgICAgICAgICAgICAgaWYgKHRhZ1BhcmFtLmV4cGxpY2l0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIG5ld1BhcmFtLmV4cGxpY2l0ID0gdGFnUGFyYW0uZXhwbGljaXQ7XG4gICAgICAgICAgICAgICAgaWYgKHRhZ1BhcmFtLnRhZyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBuZXdQYXJhbS50YWcgPSB0YWdQYXJhbS50YWc7XG4gICAgICAgICAgICAgICAgaWYgKHRhZ1BhcmFtLm9iaiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBcIm9iaiBzaGFsbCBiZSBzcGVjaWZpZWQgZm9yICd0YWcnLlwiO1xuICAgICAgICAgICAgICAgIG5ld1BhcmFtLm9iaiA9IF9uZXdPYmplY3QodGFnUGFyYW0ub2JqKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9ERVJUYWdnZWRPYmplY3QobmV3UGFyYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBnZXQgZW5jb2RlZCBoZXhhZGVjaW1hbCBzdHJpbmcgb2YgQVNOMU9iamVjdCBzcGVjaWZlZCBieSBKU09OIHBhcmFtZXRlcnNcbiAgICAgKiBAbmFtZSBqc29uVG9BU04xSEVYXG4gICAgICogQG1lbWJlck9mIEtKVVIuYXNuMS5BU04xVXRpbFxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhcmFtIEpTT04gcGFyYW1ldGVyIHRvIGdlbmVyYXRlIEFTTjFPYmplY3RcbiAgICAgKiBAcmV0dXJuIGhleGFkZWNpbWFsIHN0cmluZyBvZiBBU04xT2JqZWN0XG4gICAgICogQHNpbmNlIGFzbjEgMS4wLjRcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBBcyBmb3IgQVNOLjEgb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIEpTT04gb2JqZWN0LFxuICAgICAqIHBsZWFzZSBzZWUge0BsaW5rIG5ld09iamVjdH0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBqc29uVG9BU04xSEVYKHsncHJuc3RyJzogJ2FhYSd9KTtcbiAgICAgKi9cbiAgICB0aGlzLmpzb25Ub0FTTjFIRVggPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgICAgdmFyIGFzbjFPYmogPSB0aGlzLm5ld09iamVjdChwYXJhbSk7XG4gICAgICAgIHJldHVybiBhc24xT2JqLmdldEVuY29kZWRIZXgoKTtcbiAgICB9O1xufTtcbi8qKlxuICogZ2V0IGRvdCBub3RlZCBvaWQgbnVtYmVyIHN0cmluZyBmcm9tIGhleGFkZWNpbWFsIHZhbHVlIG9mIE9JRFxuICogQG5hbWUgb2lkSGV4VG9JbnRcbiAqIEBtZW1iZXJPZiBLSlVSLmFzbjEuQVNOMVV0aWxcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IGhleCBoZXhhZGVjaW1hbCB2YWx1ZSBvZiBvYmplY3QgaWRlbnRpZmllclxuICogQHJldHVybiB7U3RyaW5nfSBkb3Qgbm90ZWQgc3RyaW5nIG9mIG9iamVjdCBpZGVudGlmaWVyXG4gKiBAc2luY2UganNyc2FzaWduIDQuOC4zIGFzbjEgMS4wLjdcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBzdGF0aWMgbWV0aG9kIGNvbnZlcnRzIGZyb20gaGV4YWRlY2ltYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mXG4gKiBBU04uMSB2YWx1ZSBvZiBvYmplY3QgaWRlbnRpZmllciB0byBvaWQgbnVtYmVyIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKiBLSlVSLmFzbjEuQVNOMVV0aWwub2lkSGV4VG9JbnQoJzU1MDQwNicpICZyYXJyOyBcIjIuNS40LjZcIlxuICovXG5LSlVSLmFzbjEuQVNOMVV0aWwub2lkSGV4VG9JbnQgPSBmdW5jdGlvbiAoaGV4KSB7XG4gICAgdmFyIHMgPSBcIlwiO1xuICAgIHZhciBpMDEgPSBwYXJzZUludChoZXguc3Vic3RyKDAsIDIpLCAxNik7XG4gICAgdmFyIGkwID0gTWF0aC5mbG9vcihpMDEgLyA0MCk7XG4gICAgdmFyIGkxID0gaTAxICUgNDA7XG4gICAgdmFyIHMgPSBpMCArIFwiLlwiICsgaTE7XG4gICAgdmFyIGJpbmJ1ZiA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCBoZXgubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpLCAyKSwgMTYpO1xuICAgICAgICB2YXIgYmluID0gKFwiMDAwMDAwMDBcIiArIHZhbHVlLnRvU3RyaW5nKDIpKS5zbGljZSgtOCk7XG4gICAgICAgIGJpbmJ1ZiA9IGJpbmJ1ZiArIGJpbi5zdWJzdHIoMSwgNyk7XG4gICAgICAgIGlmIChiaW4uc3Vic3RyKDAsIDEpID09IFwiMFwiKSB7XG4gICAgICAgICAgICB2YXIgYmkgPSBuZXcgQmlnSW50ZWdlcihiaW5idWYsIDIpO1xuICAgICAgICAgICAgcyA9IHMgKyBcIi5cIiArIGJpLnRvU3RyaW5nKDEwKTtcbiAgICAgICAgICAgIGJpbmJ1ZiA9IFwiXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgO1xuICAgIHJldHVybiBzO1xufTtcbi8qKlxuICogZ2V0IGhleGFkZWNpbWFsIHZhbHVlIG9mIG9iamVjdCBpZGVudGlmaWVyIGZyb20gZG90IG5vdGVkIG9pZCB2YWx1ZVxuICogQG5hbWUgb2lkSW50VG9IZXhcbiAqIEBtZW1iZXJPZiBLSlVSLmFzbjEuQVNOMVV0aWxcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IG9pZFN0cmluZyBkb3Qgbm90ZWQgc3RyaW5nIG9mIG9iamVjdCBpZGVudGlmaWVyXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGhleGFkZWNpbWFsIHZhbHVlIG9mIG9iamVjdCBpZGVudGlmaWVyXG4gKiBAc2luY2UganNyc2FzaWduIDQuOC4zIGFzbjEgMS4wLjdcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBzdGF0aWMgbWV0aG9kIGNvbnZlcnRzIGZyb20gb2JqZWN0IGlkZW50aWZpZXIgdmFsdWUgc3RyaW5nLlxuICogdG8gaGV4YWRlY2ltYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGl0LlxuICogQGV4YW1wbGVcbiAqIEtKVVIuYXNuMS5BU04xVXRpbC5vaWRJbnRUb0hleChcIjIuNS40LjZcIikgJnJhcnI7IFwiNTUwNDA2XCJcbiAqL1xuS0pVUi5hc24xLkFTTjFVdGlsLm9pZEludFRvSGV4ID0gZnVuY3Rpb24gKG9pZFN0cmluZykge1xuICAgIHZhciBpdG94ID0gZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgdmFyIGggPSBpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaWYgKGgubGVuZ3RoID09IDEpXG4gICAgICAgICAgICBoID0gJzAnICsgaDtcbiAgICAgICAgcmV0dXJuIGg7XG4gICAgfTtcbiAgICB2YXIgcm9pZHRveCA9IGZ1bmN0aW9uIChyb2lkKSB7XG4gICAgICAgIHZhciBoID0gJyc7XG4gICAgICAgIHZhciBiaSA9IG5ldyBCaWdJbnRlZ2VyKHJvaWQsIDEwKTtcbiAgICAgICAgdmFyIGIgPSBiaS50b1N0cmluZygyKTtcbiAgICAgICAgdmFyIHBhZExlbiA9IDcgLSBiLmxlbmd0aCAlIDc7XG4gICAgICAgIGlmIChwYWRMZW4gPT0gNylcbiAgICAgICAgICAgIHBhZExlbiA9IDA7XG4gICAgICAgIHZhciBiUGFkID0gJyc7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFkTGVuOyBpKyspXG4gICAgICAgICAgICBiUGFkICs9ICcwJztcbiAgICAgICAgYiA9IGJQYWQgKyBiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoIC0gMTsgaSArPSA3KSB7XG4gICAgICAgICAgICB2YXIgYjggPSBiLnN1YnN0cihpLCA3KTtcbiAgICAgICAgICAgIGlmIChpICE9IGIubGVuZ3RoIC0gNylcbiAgICAgICAgICAgICAgICBiOCA9ICcxJyArIGI4O1xuICAgICAgICAgICAgaCArPSBpdG94KHBhcnNlSW50KGI4LCAyKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGg7XG4gICAgfTtcbiAgICBpZiAoIW9pZFN0cmluZy5tYXRjaCgvXlswLTkuXSskLykpIHtcbiAgICAgICAgdGhyb3cgXCJtYWxmb3JtZWQgb2lkIHN0cmluZzogXCIgKyBvaWRTdHJpbmc7XG4gICAgfVxuICAgIHZhciBoID0gJyc7XG4gICAgdmFyIGEgPSBvaWRTdHJpbmcuc3BsaXQoJy4nKTtcbiAgICB2YXIgaTAgPSBwYXJzZUludChhWzBdKSAqIDQwICsgcGFyc2VJbnQoYVsxXSk7XG4gICAgaCArPSBpdG94KGkwKTtcbiAgICBhLnNwbGljZSgwLCAyKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaCArPSByb2lkdG94KGFbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gaDtcbn07XG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gIEFic3RyYWN0IEFTTi4xIENsYXNzZXNcbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLyoqXG4gKiBiYXNlIGNsYXNzIGZvciBBU04uMSBERVIgZW5jb2RlciBvYmplY3RcbiAqIEBuYW1lIEtKVVIuYXNuMS5BU04xT2JqZWN0XG4gKiBAY2xhc3MgYmFzZSBjbGFzcyBmb3IgQVNOLjEgREVSIGVuY29kZXIgb2JqZWN0XG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGlzTW9kaWZpZWQgZmxhZyB3aGV0aGVyIGludGVybmFsIGRhdGEgd2FzIGNoYW5nZWRcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBoVExWIGhleGFkZWNpbWFsIHN0cmluZyBvZiBBU04uMSBUTFZcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBoVCBoZXhhZGVjaW1hbCBzdHJpbmcgb2YgQVNOLjEgVExWIHRhZyhUKVxuICogQHByb3BlcnR5IHtTdHJpbmd9IGhMIGhleGFkZWNpbWFsIHN0cmluZyBvZiBBU04uMSBUTFYgbGVuZ3RoKEwpXG4gKiBAcHJvcGVydHkge1N0cmluZ30gaFYgaGV4YWRlY2ltYWwgc3RyaW5nIG9mIEFTTi4xIFRMViB2YWx1ZShWKVxuICogQGRlc2NyaXB0aW9uXG4gKi9cbktKVVIuYXNuMS5BU04xT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpc01vZGlmaWVkID0gdHJ1ZTtcbiAgICB2YXIgaFRMViA9IG51bGw7XG4gICAgdmFyIGhUID0gJzAwJztcbiAgICB2YXIgaEwgPSAnMDAnO1xuICAgIHZhciBoViA9ICcnO1xuICAgIC8qKlxuICAgICAqIGdldCBoZXhhZGVjaW1hbCBBU04uMSBUTFYgbGVuZ3RoKEwpIGJ5dGVzIGZyb20gVExWIHZhbHVlKFYpXG4gICAgICogQG5hbWUgZ2V0TGVuZ3RoSGV4RnJvbVZhbHVlXG4gICAgICogQG1lbWJlck9mIEtKVVIuYXNuMS5BU04xT2JqZWN0I1xuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gaGV4YWRlY2ltYWwgc3RyaW5nIG9mIEFTTi4xIFRMViBsZW5ndGgoTClcbiAgICAgKi9cbiAgICB0aGlzLmdldExlbmd0aEhleEZyb21WYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhWID09IFwidW5kZWZpbmVkXCIgfHwgdGhpcy5oViA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBcInRoaXMuaFYgaXMgbnVsbCBvciB1bmRlZmluZWQuXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaFYubGVuZ3RoICUgMiA9PSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBcInZhbHVlIGhleCBtdXN0IGJlIGV2ZW4gbGVuZ3RoOiBuPVwiICsgaFYubGVuZ3RoICsgXCIsdj1cIiArIHRoaXMuaFY7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG4gPSB0aGlzLmhWLmxlbmd0aCAvIDI7XG4gICAgICAgIHZhciBoTiA9IG4udG9TdHJpbmcoMTYpO1xuICAgICAgICBpZiAoaE4ubGVuZ3RoICUgMiA9PSAxKSB7XG4gICAgICAgICAgICBoTiA9IFwiMFwiICsgaE47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG4gPCAxMjgpIHtcbiAgICAgICAgICAgIHJldHVybiBoTjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBoTmxlbiA9IGhOLmxlbmd0aCAvIDI7XG4gICAgICAgICAgICBpZiAoaE5sZW4gPiAxNSkge1xuICAgICAgICAgICAgICAgIHRocm93IFwiQVNOLjEgbGVuZ3RoIHRvbyBsb25nIHRvIHJlcHJlc2VudCBieSA4eDogbiA9IFwiICsgbi50b1N0cmluZygxNik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaGVhZCA9IDEyOCArIGhObGVuO1xuICAgICAgICAgICAgcmV0dXJuIGhlYWQudG9TdHJpbmcoMTYpICsgaE47XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIGdldCBoZXhhZGVjaW1hbCBzdHJpbmcgb2YgQVNOLjEgVExWIGJ5dGVzXG4gICAgICogQG5hbWUgZ2V0RW5jb2RlZEhleFxuICAgICAqIEBtZW1iZXJPZiBLSlVSLmFzbjEuQVNOMU9iamVjdCNcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IGhleGFkZWNpbWFsIHN0cmluZyBvZiBBU04uMSBUTFZcbiAgICAgKi9cbiAgICB0aGlzLmdldEVuY29kZWRIZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmhUTFYgPT0gbnVsbCB8fCB0aGlzLmlzTW9kaWZpZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaFYgPSB0aGlzLmdldEZyZXNoVmFsdWVIZXgoKTtcbiAgICAgICAgICAgIHRoaXMuaEwgPSB0aGlzLmdldExlbmd0aEhleEZyb21WYWx1ZSgpO1xuICAgICAgICAgICAgdGhpcy5oVExWID0gdGhpcy5oVCArIHRoaXMuaEwgKyB0aGlzLmhWO1xuICAgICAgICAgICAgdGhpcy5pc01vZGlmaWVkID0gZmFsc2U7XG4gICAgICAgICAgICAvL2FsZXJ0KFwiZmlyc3QgdGltZTogXCIgKyB0aGlzLmhUTFYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmhUTFY7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBnZXQgaGV4YWRlY2ltYWwgc3RyaW5nIG9mIEFTTi4xIFRMViB2YWx1ZShWKSBieXRlc1xuICAgICAqIEBuYW1lIGdldFZhbHVlSGV4XG4gICAgICogQG1lbWJlck9mIEtKVVIuYXNuMS5BU04xT2JqZWN0I1xuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gaGV4YWRlY2ltYWwgc3RyaW5nIG9mIEFTTi4xIFRMViB2YWx1ZShWKSBieXRlc1xuICAgICAqL1xuICAgIHRoaXMuZ2V0VmFsdWVIZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZ2V0RW5jb2RlZEhleCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5oVjtcbiAgICB9O1xuICAgIHRoaXMuZ2V0RnJlc2hWYWx1ZUhleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH07XG59O1xuLy8gPT0gQkVHSU4gREVSQWJzdHJhY3RTdHJpbmcgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vKipcbiAqIGJhc2UgY2xhc3MgZm9yIEFTTi4xIERFUiBzdHJpbmcgY2xhc3Nlc1xuICogQG5hbWUgS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nXG4gKiBAY2xhc3MgYmFzZSBjbGFzcyBmb3IgQVNOLjEgREVSIHN0cmluZyBjbGFzc2VzXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXMgYXNzb2NpYXRpdmUgYXJyYXkgb2YgcGFyYW1ldGVycyAoZXguIHsnc3RyJzogJ2FhYSd9KVxuICogQHByb3BlcnR5IHtTdHJpbmd9IHMgaW50ZXJuYWwgc3RyaW5nIG9mIHZhbHVlXG4gKiBAZXh0ZW5kcyBLSlVSLmFzbjEuQVNOMU9iamVjdFxuICogQGRlc2NyaXB0aW9uXG4gKiA8YnIvPlxuICogQXMgZm9yIGFyZ3VtZW50ICdwYXJhbXMnIGZvciBjb25zdHJ1Y3RvciwgeW91IGNhbiBzcGVjaWZ5IG9uZSBvZlxuICogZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKiA8dWw+XG4gKiA8bGk+c3RyIC0gc3BlY2lmeSBpbml0aWFsIEFTTi4xIHZhbHVlKFYpIGJ5IGEgc3RyaW5nPC9saT5cbiAqIDxsaT5oZXggLSBzcGVjaWZ5IGluaXRpYWwgQVNOLjEgdmFsdWUoVikgYnkgYSBoZXhhZGVjaW1hbCBzdHJpbmc8L2xpPlxuICogPC91bD5cbiAqIE5PVEU6ICdwYXJhbXMnIGNhbiBiZSBvbWl0dGVkLlxuICovXG5LSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcbiAgICB2YXIgcyA9IG51bGw7XG4gICAgdmFyIGhWID0gbnVsbDtcbiAgICAvKipcbiAgICAgKiBnZXQgc3RyaW5nIHZhbHVlIG9mIHRoaXMgc3RyaW5nIG9iamVjdFxuICAgICAqIEBuYW1lIGdldFN0cmluZ1xuICAgICAqIEBtZW1iZXJPZiBLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcjXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBzdHJpbmcgdmFsdWUgb2YgdGhpcyBzdHJpbmcgb2JqZWN0XG4gICAgICovXG4gICAgdGhpcy5nZXRTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBzZXQgdmFsdWUgYnkgYSBzdHJpbmdcbiAgICAgKiBAbmFtZSBzZXRTdHJpbmdcbiAgICAgKiBAbWVtYmVyT2YgS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nI1xuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuZXdTIHZhbHVlIGJ5IGEgc3RyaW5nIHRvIHNldFxuICAgICAqL1xuICAgIHRoaXMuc2V0U3RyaW5nID0gZnVuY3Rpb24gKG5ld1MpIHtcbiAgICAgICAgdGhpcy5oVExWID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc01vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zID0gbmV3UztcbiAgICAgICAgdGhpcy5oViA9IHN0b2hleCh0aGlzLnMpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogc2V0IHZhbHVlIGJ5IGEgaGV4YWRlY2ltYWwgc3RyaW5nXG4gICAgICogQG5hbWUgc2V0U3RyaW5nSGV4XG4gICAgICogQG1lbWJlck9mIEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyNcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmV3SGV4U3RyaW5nIHZhbHVlIGJ5IGEgaGV4YWRlY2ltYWwgc3RyaW5nIHRvIHNldFxuICAgICAqL1xuICAgIHRoaXMuc2V0U3RyaW5nSGV4ID0gZnVuY3Rpb24gKG5ld0hleFN0cmluZykge1xuICAgICAgICB0aGlzLmhUTFYgPSBudWxsO1xuICAgICAgICB0aGlzLmlzTW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnMgPSBudWxsO1xuICAgICAgICB0aGlzLmhWID0gbmV3SGV4U3RyaW5nO1xuICAgIH07XG4gICAgdGhpcy5nZXRGcmVzaFZhbHVlSGV4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oVjtcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgcGFyYW1zICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5zZXRTdHJpbmcocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGFyYW1zWydzdHInXSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0cmluZyhwYXJhbXNbJ3N0ciddKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGFyYW1zWydoZXgnXSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0cmluZ0hleChwYXJhbXNbJ2hleCddKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5ZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcsIEtKVVIuYXNuMS5BU04xT2JqZWN0KTtcbi8vID09IEVORCAgIERFUkFic3RyYWN0U3RyaW5nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gPT0gQkVHSU4gREVSQWJzdHJhY3RUaW1lID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vKipcbiAqIGJhc2UgY2xhc3MgZm9yIEFTTi4xIERFUiBHZW5lcmFsaXplZC9VVENUaW1lIGNsYXNzXG4gKiBAbmFtZSBLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lXG4gKiBAY2xhc3MgYmFzZSBjbGFzcyBmb3IgQVNOLjEgREVSIEdlbmVyYWxpemVkL1VUQ1RpbWUgY2xhc3NcbiAqIEBwYXJhbSB7QXJyYXl9IHBhcmFtcyBhc3NvY2lhdGl2ZSBhcnJheSBvZiBwYXJhbWV0ZXJzIChleC4geydzdHInOiAnMTMwNDMwMjM1OTU5Wid9KVxuICogQGV4dGVuZHMgS0pVUi5hc24xLkFTTjFPYmplY3RcbiAqIEBkZXNjcmlwdGlvblxuICogQHNlZSBLSlVSLmFzbjEuQVNOMU9iamVjdCAtIHN1cGVyY2xhc3NcbiAqL1xuS0pVUi5hc24xLkRFUkFic3RyYWN0VGltZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICBLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcbiAgICB2YXIgcyA9IG51bGw7XG4gICAgdmFyIGRhdGUgPSBudWxsO1xuICAgIC8vIC0tLSBQUklWQVRFIE1FVEhPRFMgLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB0aGlzLmxvY2FsRGF0ZVRvVVRDID0gZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgdXRjID0gZC5nZXRUaW1lKCkgKyAoZC5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApO1xuICAgICAgICB2YXIgdXRjRGF0ZSA9IG5ldyBEYXRlKHV0Yyk7XG4gICAgICAgIHJldHVybiB1dGNEYXRlO1xuICAgIH07XG4gICAgLypcbiAgICAgKiBmb3JtYXQgZGF0ZSBzdHJpbmcgYnkgRGF0YSBvYmplY3RcbiAgICAgKiBAbmFtZSBmb3JtYXREYXRlXG4gICAgICogQG1lbWJlck9mIEtKVVIuYXNuMS5BYnN0cmFjdFRpbWU7XG4gICAgICogQHBhcmFtIHtEYXRlfSBkYXRlT2JqZWN0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgJ3V0Yycgb3IgJ2dlbidcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHdpdGhNaWxsaXMgZmxhZyBmb3Igd2l0aCBtaWxsaXNlY3Rpb25zIG9yIG5vdFxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqICd3aXRoTWlsbGlzJyBmbGFnIGlzIHN1cHBvcnRlZCBmcm9tIGFzbjEgMS4wLjYuXG4gICAgICovXG4gICAgdGhpcy5mb3JtYXREYXRlID0gZnVuY3Rpb24gKGRhdGVPYmplY3QsIHR5cGUsIHdpdGhNaWxsaXMpIHtcbiAgICAgICAgdmFyIHBhZCA9IHRoaXMuemVyb1BhZGRpbmc7XG4gICAgICAgIHZhciBkID0gdGhpcy5sb2NhbERhdGVUb1VUQyhkYXRlT2JqZWN0KTtcbiAgICAgICAgdmFyIHllYXIgPSBTdHJpbmcoZC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ3V0YycpXG4gICAgICAgICAgICB5ZWFyID0geWVhci5zdWJzdHIoMiwgMik7XG4gICAgICAgIHZhciBtb250aCA9IHBhZChTdHJpbmcoZC5nZXRNb250aCgpICsgMSksIDIpO1xuICAgICAgICB2YXIgZGF5ID0gcGFkKFN0cmluZyhkLmdldERhdGUoKSksIDIpO1xuICAgICAgICB2YXIgaG91ciA9IHBhZChTdHJpbmcoZC5nZXRIb3VycygpKSwgMik7XG4gICAgICAgIHZhciBtaW4gPSBwYWQoU3RyaW5nKGQuZ2V0TWludXRlcygpKSwgMik7XG4gICAgICAgIHZhciBzZWMgPSBwYWQoU3RyaW5nKGQuZ2V0U2Vjb25kcygpKSwgMik7XG4gICAgICAgIHZhciBzID0geWVhciArIG1vbnRoICsgZGF5ICsgaG91ciArIG1pbiArIHNlYztcbiAgICAgICAgaWYgKHdpdGhNaWxsaXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHZhciBtaWxsaXMgPSBkLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgaWYgKG1pbGxpcyAhPSAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNNaWxsaXMgPSBwYWQoU3RyaW5nKG1pbGxpcyksIDMpO1xuICAgICAgICAgICAgICAgIHNNaWxsaXMgPSBzTWlsbGlzLnJlcGxhY2UoL1swXSskLywgXCJcIik7XG4gICAgICAgICAgICAgICAgcyA9IHMgKyBcIi5cIiArIHNNaWxsaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHMgKyBcIlpcIjtcbiAgICB9O1xuICAgIHRoaXMuemVyb1BhZGRpbmcgPSBmdW5jdGlvbiAocywgbGVuKSB7XG4gICAgICAgIGlmIChzLmxlbmd0aCA+PSBsZW4pXG4gICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgcmV0dXJuIG5ldyBBcnJheShsZW4gLSBzLmxlbmd0aCArIDEpLmpvaW4oJzAnKSArIHM7XG4gICAgfTtcbiAgICAvLyAtLS0gUFVCTElDIE1FVEhPRFMgLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvKipcbiAgICAgKiBnZXQgc3RyaW5nIHZhbHVlIG9mIHRoaXMgc3RyaW5nIG9iamVjdFxuICAgICAqIEBuYW1lIGdldFN0cmluZ1xuICAgICAqIEBtZW1iZXJPZiBLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lI1xuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gc3RyaW5nIHZhbHVlIG9mIHRoaXMgdGltZSBvYmplY3RcbiAgICAgKi9cbiAgICB0aGlzLmdldFN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIHNldCB2YWx1ZSBieSBhIHN0cmluZ1xuICAgICAqIEBuYW1lIHNldFN0cmluZ1xuICAgICAqIEBtZW1iZXJPZiBLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lI1xuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuZXdTIHZhbHVlIGJ5IGEgc3RyaW5nIHRvIHNldCBzdWNoIGxpa2UgXCIxMzA0MzAyMzU5NTlaXCJcbiAgICAgKi9cbiAgICB0aGlzLnNldFN0cmluZyA9IGZ1bmN0aW9uIChuZXdTKSB7XG4gICAgICAgIHRoaXMuaFRMViA9IG51bGw7XG4gICAgICAgIHRoaXMuaXNNb2RpZmllZCA9IHRydWU7XG4gICAgICAgIHRoaXMucyA9IG5ld1M7XG4gICAgICAgIHRoaXMuaFYgPSBzdG9oZXgobmV3Uyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBzZXQgdmFsdWUgYnkgYSBEYXRlIG9iamVjdFxuICAgICAqIEBuYW1lIHNldEJ5RGF0ZVZhbHVlXG4gICAgICogQG1lbWJlck9mIEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUjXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtJbnRlZ2VyfSB5ZWFyIHllYXIgb2YgZGF0ZSAoZXguIDIwMTMpXG4gICAgICogQHBhcmFtIHtJbnRlZ2VyfSBtb250aCBtb250aCBvZiBkYXRlIGJldHdlZW4gMSBhbmQgMTIgKGV4LiAxMilcbiAgICAgKiBAcGFyYW0ge0ludGVnZXJ9IGRheSBkYXkgb2YgbW9udGhcbiAgICAgKiBAcGFyYW0ge0ludGVnZXJ9IGhvdXIgaG91cnMgb2YgZGF0ZVxuICAgICAqIEBwYXJhbSB7SW50ZWdlcn0gbWluIG1pbnV0ZXMgb2YgZGF0ZVxuICAgICAqIEBwYXJhbSB7SW50ZWdlcn0gc2VjIHNlY29uZHMgb2YgZGF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2V0QnlEYXRlVmFsdWUgPSBmdW5jdGlvbiAoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWluLCBzZWMpIHtcbiAgICAgICAgdmFyIGRhdGVPYmplY3QgPSBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCAtIDEsIGRheSwgaG91ciwgbWluLCBzZWMsIDApKTtcbiAgICAgICAgdGhpcy5zZXRCeURhdGUoZGF0ZU9iamVjdCk7XG4gICAgfTtcbiAgICB0aGlzLmdldEZyZXNoVmFsdWVIZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhWO1xuICAgIH07XG59O1xuWUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkFic3RyYWN0VGltZSwgS0pVUi5hc24xLkFTTjFPYmplY3QpO1xuLy8gPT0gRU5EICAgREVSQWJzdHJhY3RUaW1lID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyA9PSBCRUdJTiBERVJBYnN0cmFjdFN0cnVjdHVyZWQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8qKlxuICogYmFzZSBjbGFzcyBmb3IgQVNOLjEgREVSIHN0cnVjdHVyZWQgY2xhc3NcbiAqIEBuYW1lIEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWRcbiAqIEBjbGFzcyBiYXNlIGNsYXNzIGZvciBBU04uMSBERVIgc3RydWN0dXJlZCBjbGFzc1xuICogQHByb3BlcnR5IHtBcnJheX0gYXNuMUFycmF5IGludGVybmFsIGFycmF5IG9mIEFTTjFPYmplY3RcbiAqIEBleHRlbmRzIEtKVVIuYXNuMS5BU04xT2JqZWN0XG4gKiBAZGVzY3JpcHRpb25cbiAqIEBzZWUgS0pVUi5hc24xLkFTTjFPYmplY3QgLSBzdXBlcmNsYXNzXG4gKi9cbktKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcbiAgICB2YXIgYXNuMUFycmF5ID0gbnVsbDtcbiAgICAvKipcbiAgICAgKiBzZXQgdmFsdWUgYnkgYXJyYXkgb2YgQVNOMU9iamVjdFxuICAgICAqIEBuYW1lIHNldEJ5QVNOMU9iamVjdEFycmF5XG4gICAgICogQG1lbWJlck9mIEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWQjXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHthcnJheX0gYXNuMU9iamVjdEFycmF5IGFycmF5IG9mIEFTTjFPYmplY3QgdG8gc2V0XG4gICAgICovXG4gICAgdGhpcy5zZXRCeUFTTjFPYmplY3RBcnJheSA9IGZ1bmN0aW9uIChhc24xT2JqZWN0QXJyYXkpIHtcbiAgICAgICAgdGhpcy5oVExWID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc01vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hc24xQXJyYXkgPSBhc24xT2JqZWN0QXJyYXk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBhcHBlbmQgYW4gQVNOMU9iamVjdCB0byBpbnRlcm5hbCBhcnJheVxuICAgICAqIEBuYW1lIGFwcGVuZEFTTjFPYmplY3RcbiAgICAgKiBAbWVtYmVyT2YgS0pVUi5hc24xLkRFUkFic3RyYWN0U3RydWN0dXJlZCNcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FTTjFPYmplY3R9IGFzbjFPYmplY3QgdG8gYWRkXG4gICAgICovXG4gICAgdGhpcy5hcHBlbmRBU04xT2JqZWN0ID0gZnVuY3Rpb24gKGFzbjFPYmplY3QpIHtcbiAgICAgICAgdGhpcy5oVExWID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc01vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hc24xQXJyYXkucHVzaChhc24xT2JqZWN0KTtcbiAgICB9O1xuICAgIHRoaXMuYXNuMUFycmF5ID0gbmV3IEFycmF5KCk7XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIHBhcmFtc1snYXJyYXknXSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aGlzLmFzbjFBcnJheSA9IHBhcmFtc1snYXJyYXknXTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5ZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkLCBLSlVSLmFzbjEuQVNOMU9iamVjdCk7XG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gIEFTTi4xIE9iamVjdCBDbGFzc2VzXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8qKlxuICogY2xhc3MgZm9yIEFTTi4xIERFUiBCb29sZWFuXG4gKiBAbmFtZSBLSlVSLmFzbjEuREVSQm9vbGVhblxuICogQGNsYXNzIGNsYXNzIGZvciBBU04uMSBERVIgQm9vbGVhblxuICogQGV4dGVuZHMgS0pVUi5hc24xLkFTTjFPYmplY3RcbiAqIEBkZXNjcmlwdGlvblxuICogQHNlZSBLSlVSLmFzbjEuQVNOMU9iamVjdCAtIHN1cGVyY2xhc3NcbiAqL1xuS0pVUi5hc24xLkRFUkJvb2xlYW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgS0pVUi5hc24xLkRFUkJvb2xlYW4uc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO1xuICAgIHRoaXMuaFQgPSBcIjAxXCI7XG4gICAgdGhpcy5oVExWID0gXCIwMTAxZmZcIjtcbn07XG5ZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSQm9vbGVhbiwgS0pVUi5hc24xLkFTTjFPYmplY3QpO1xuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8qKlxuICogY2xhc3MgZm9yIEFTTi4xIERFUiBJbnRlZ2VyXG4gKiBAbmFtZSBLSlVSLmFzbjEuREVSSW50ZWdlclxuICogQGNsYXNzIGNsYXNzIGZvciBBU04uMSBERVIgSW50ZWdlclxuICogQGV4dGVuZHMgS0pVUi5hc24xLkFTTjFPYmplY3RcbiAqIEBkZXNjcmlwdGlvblxuICogPGJyLz5cbiAqIEFzIGZvciBhcmd1bWVudCAncGFyYW1zJyBmb3IgY29uc3RydWN0b3IsIHlvdSBjYW4gc3BlY2lmeSBvbmUgb2ZcbiAqIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogPHVsPlxuICogPGxpPmludCAtIHNwZWNpZnkgaW5pdGlhbCBBU04uMSB2YWx1ZShWKSBieSBpbnRlZ2VyIHZhbHVlPC9saT5cbiAqIDxsaT5iaWdpbnQgLSBzcGVjaWZ5IGluaXRpYWwgQVNOLjEgdmFsdWUoVikgYnkgQmlnSW50ZWdlciBvYmplY3Q8L2xpPlxuICogPGxpPmhleCAtIHNwZWNpZnkgaW5pdGlhbCBBU04uMSB2YWx1ZShWKSBieSBhIGhleGFkZWNpbWFsIHN0cmluZzwvbGk+XG4gKiA8L3VsPlxuICogTk9URTogJ3BhcmFtcycgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbktKVVIuYXNuMS5ERVJJbnRlZ2VyID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIEtKVVIuYXNuMS5ERVJJbnRlZ2VyLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcbiAgICB0aGlzLmhUID0gXCIwMlwiO1xuICAgIC8qKlxuICAgICAqIHNldCB2YWx1ZSBieSBUb20gV3UncyBCaWdJbnRlZ2VyIG9iamVjdFxuICAgICAqIEBuYW1lIHNldEJ5QmlnSW50ZWdlclxuICAgICAqIEBtZW1iZXJPZiBLSlVSLmFzbjEuREVSSW50ZWdlciNcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0JpZ0ludGVnZXJ9IGJpZ0ludGVnZXJWYWx1ZSB0byBzZXRcbiAgICAgKi9cbiAgICB0aGlzLnNldEJ5QmlnSW50ZWdlciA9IGZ1bmN0aW9uIChiaWdJbnRlZ2VyVmFsdWUpIHtcbiAgICAgICAgdGhpcy5oVExWID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc01vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oViA9IEtKVVIuYXNuMS5BU04xVXRpbC5iaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleChiaWdJbnRlZ2VyVmFsdWUpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogc2V0IHZhbHVlIGJ5IGludGVnZXIgdmFsdWVcbiAgICAgKiBAbmFtZSBzZXRCeUludGVnZXJcbiAgICAgKiBAbWVtYmVyT2YgS0pVUi5hc24xLkRFUkludGVnZXJcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0ludGVnZXJ9IGludGVnZXIgdmFsdWUgdG8gc2V0XG4gICAgICovXG4gICAgdGhpcy5zZXRCeUludGVnZXIgPSBmdW5jdGlvbiAoaW50VmFsdWUpIHtcbiAgICAgICAgdmFyIGJpID0gbmV3IEJpZ0ludGVnZXIoU3RyaW5nKGludFZhbHVlKSwgMTApO1xuICAgICAgICB0aGlzLnNldEJ5QmlnSW50ZWdlcihiaSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBzZXQgdmFsdWUgYnkgaW50ZWdlciB2YWx1ZVxuICAgICAqIEBuYW1lIHNldFZhbHVlSGV4XG4gICAgICogQG1lbWJlck9mIEtKVVIuYXNuMS5ERVJJbnRlZ2VyI1xuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBoZXhhZGVjaW1hbCBzdHJpbmcgb2YgaW50ZWdlciB2YWx1ZVxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIDxici8+XG4gICAgICogTk9URTogVmFsdWUgc2hhbGwgYmUgcmVwcmVzZW50ZWQgYnkgbWluaW11bSBvY3RldCBsZW5ndGggb2ZcbiAgICAgKiB0d28ncyBjb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbmV3IEtKVVIuYXNuMS5ERVJJbnRlZ2VyKDEyMyk7XG4gICAgICogbmV3IEtKVVIuYXNuMS5ERVJJbnRlZ2VyKHsnaW50JzogMTIzfSk7XG4gICAgICogbmV3IEtKVVIuYXNuMS5ERVJJbnRlZ2VyKHsnaGV4JzogJzFmYWQnfSk7XG4gICAgICovXG4gICAgdGhpcy5zZXRWYWx1ZUhleCA9IGZ1bmN0aW9uIChuZXdIZXhTdHJpbmcpIHtcbiAgICAgICAgdGhpcy5oViA9IG5ld0hleFN0cmluZztcbiAgICB9O1xuICAgIHRoaXMuZ2V0RnJlc2hWYWx1ZUhleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaFY7XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHBhcmFtcyAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1zWydiaWdpbnQnXSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aGlzLnNldEJ5QmlnSW50ZWdlcihwYXJhbXNbJ2JpZ2ludCddKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGFyYW1zWydpbnQnXSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aGlzLnNldEJ5SW50ZWdlcihwYXJhbXNbJ2ludCddKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGFyYW1zID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QnlJbnRlZ2VyKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhcmFtc1snaGV4J10gIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUhleChwYXJhbXNbJ2hleCddKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5ZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSSW50ZWdlciwgS0pVUi5hc24xLkFTTjFPYmplY3QpO1xuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8qKlxuICogY2xhc3MgZm9yIEFTTi4xIERFUiBlbmNvZGVkIEJpdFN0cmluZyBwcmltaXRpdmVcbiAqIEBuYW1lIEtKVVIuYXNuMS5ERVJCaXRTdHJpbmdcbiAqIEBjbGFzcyBjbGFzcyBmb3IgQVNOLjEgREVSIGVuY29kZWQgQml0U3RyaW5nIHByaW1pdGl2ZVxuICogQGV4dGVuZHMgS0pVUi5hc24xLkFTTjFPYmplY3RcbiAqIEBkZXNjcmlwdGlvblxuICogPGJyLz5cbiAqIEFzIGZvciBhcmd1bWVudCAncGFyYW1zJyBmb3IgY29uc3RydWN0b3IsIHlvdSBjYW4gc3BlY2lmeSBvbmUgb2ZcbiAqIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogPHVsPlxuICogPGxpPmJpbiAtIHNwZWNpZnkgYmluYXJ5IHN0cmluZyAoZXguICcxMDExMScpPC9saT5cbiAqIDxsaT5hcnJheSAtIHNwZWNpZnkgYXJyYXkgb2YgYm9vbGVhbiAoZXguIFt0cnVlLGZhbHNlLHRydWUsdHJ1ZV0pPC9saT5cbiAqIDxsaT5oZXggLSBzcGVjaWZ5IGhleGFkZWNpbWFsIHN0cmluZyBvZiBBU04uMSB2YWx1ZShWKSBpbmNsdWRpbmcgdW51c2VkIGJpdHM8L2xpPlxuICogPGxpPm9iaiAtIHNwZWNpZnkge0BsaW5rIEtKVVIuYXNuMS5BU04xVXRpbC5uZXdPYmplY3R9XG4gKiBhcmd1bWVudCBmb3IgXCJCaXRTdHJpbmcgZW5jYXBzdWxhdGVzXCIgc3RydWN0dXJlLjwvbGk+XG4gKiA8L3VsPlxuICogTk9URTE6ICdwYXJhbXMnIGNhbiBiZSBvbWl0dGVkLjxici8+XG4gKiBOT1RFMjogJ29iaicgcGFyYW1ldGVyIGhhdmUgYmVlbiBzdXBwb3J0ZWQgc2luY2VcbiAqIGFzbjEgMS4wLjExLCBqc3JzYXNpZ24gNi4xLjEgKDIwMTYtU2VwLTI1KS48YnIvPlxuICogQGV4YW1wbGVcbiAqIC8vIGRlZmF1bHQgY29uc3RydWN0b3JcbiAqIG8gPSBuZXcgS0pVUi5hc24xLkRFUkJpdFN0cmluZygpO1xuICogLy8gaW5pdGlhbGl6ZSB3aXRoIGJpbmFyeSBzdHJpbmdcbiAqIG8gPSBuZXcgS0pVUi5hc24xLkRFUkJpdFN0cmluZyh7YmluOiBcIjEwMTFcIn0pO1xuICogLy8gaW5pdGlhbGl6ZSB3aXRoIGJvb2xlYW4gYXJyYXlcbiAqIG8gPSBuZXcgS0pVUi5hc24xLkRFUkJpdFN0cmluZyh7YXJyYXk6IFt0cnVlLGZhbHNlLHRydWUsdHJ1ZV19KTtcbiAqIC8vIGluaXRpYWxpemUgd2l0aCBoZXhhZGVjaW1hbCBzdHJpbmcgKDA0IGlzIHVudXNlZCBiaXRzKVxuICogbyA9IG5ldyBLSlVSLmFzbjEuREVST2N0ZXRTdHJpbmcoe2hleDogXCIwNGJhYzBcIn0pO1xuICogLy8gaW5pdGlhbGl6ZSB3aXRoIEFTTjFVdGlsLm5ld09iamVjdCBhcmd1bWVudCBmb3IgZW5jYXBzdWxhdGVkXG4gKiBvID0gbmV3IEtKVVIuYXNuMS5ERVJCaXRTdHJpbmcoe29iajoge3NlcTogW3tpbnQ6IDN9LCB7cHJuc3RyOiAnYWFhJ31dfX0pO1xuICogLy8gYWJvdmUgZ2VuZXJhdGVzIGEgQVNOLjEgZGF0YSBsaWtlIHRoaXM6XG4gKiAvLyBCSVQgU1RSSU5HLCBlbmNhcHN1bGF0ZXMge1xuICogLy8gICBTRVFVRU5DRSB7XG4gKiAvLyAgICAgSU5URUdFUiAzXG4gKiAvLyAgICAgUHJpbnRhYmxlU3RyaW5nICdhYWEnXG4gKiAvLyAgICAgfVxuICogLy8gICB9XG4gKi9cbktKVVIuYXNuMS5ERVJCaXRTdHJpbmcgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgaWYgKHBhcmFtcyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBwYXJhbXMub2JqICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHZhciBvID0gS0pVUi5hc24xLkFTTjFVdGlsLm5ld09iamVjdChwYXJhbXMub2JqKTtcbiAgICAgICAgcGFyYW1zLmhleCA9IFwiMDBcIiArIG8uZ2V0RW5jb2RlZEhleCgpO1xuICAgIH1cbiAgICBLSlVSLmFzbjEuREVSQml0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcbiAgICB0aGlzLmhUID0gXCIwM1wiO1xuICAgIC8qKlxuICAgICAqIHNldCBBU04uMSB2YWx1ZShWKSBieSBhIGhleGFkZWNpbWFsIHN0cmluZyBpbmNsdWRpbmcgdW51c2VkIGJpdHNcbiAgICAgKiBAbmFtZSBzZXRIZXhWYWx1ZUluY2x1ZGluZ1VudXNlZEJpdHNcbiAgICAgKiBAbWVtYmVyT2YgS0pVUi5hc24xLkRFUkJpdFN0cmluZyNcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmV3SGV4U3RyaW5nSW5jbHVkaW5nVW51c2VkQml0c1xuICAgICAqL1xuICAgIHRoaXMuc2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzID0gZnVuY3Rpb24gKG5ld0hleFN0cmluZ0luY2x1ZGluZ1VudXNlZEJpdHMpIHtcbiAgICAgICAgdGhpcy5oVExWID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc01vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oViA9IG5ld0hleFN0cmluZ0luY2x1ZGluZ1VudXNlZEJpdHM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBzZXQgQVNOLjEgdmFsdWUoVikgYnkgdW51c2VkIGJpdCBhbmQgaGV4YWRlY2ltYWwgc3RyaW5nIG9mIHZhbHVlXG4gICAgICogQG5hbWUgc2V0VW51c2VkQml0c0FuZEhleFZhbHVlXG4gICAgICogQG1lbWJlck9mIEtKVVIuYXNuMS5ERVJCaXRTdHJpbmcjXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtJbnRlZ2VyfSB1bnVzZWRCaXRzXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhWYWx1ZVxuICAgICAqL1xuICAgIHRoaXMuc2V0VW51c2VkQml0c0FuZEhleFZhbHVlID0gZnVuY3Rpb24gKHVudXNlZEJpdHMsIGhWYWx1ZSkge1xuICAgICAgICBpZiAodW51c2VkQml0cyA8IDAgfHwgNyA8IHVudXNlZEJpdHMpIHtcbiAgICAgICAgICAgIHRocm93IFwidW51c2VkIGJpdHMgc2hhbGwgYmUgZnJvbSAwIHRvIDc6IHUgPSBcIiArIHVudXNlZEJpdHM7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhVbnVzZWRCaXRzID0gXCIwXCIgKyB1bnVzZWRCaXRzO1xuICAgICAgICB0aGlzLmhUTFYgPSBudWxsO1xuICAgICAgICB0aGlzLmlzTW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmhWID0gaFVudXNlZEJpdHMgKyBoVmFsdWU7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBzZXQgQVNOLjEgREVSIEJpdFN0cmluZyBieSBiaW5hcnkgc3RyaW5nPGJyLz5cbiAgICAgKiBAbmFtZSBzZXRCeUJpbmFyeVN0cmluZ1xuICAgICAqIEBtZW1iZXJPZiBLSlVSLmFzbjEuREVSQml0U3RyaW5nI1xuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiaW5hcnlTdHJpbmcgYmluYXJ5IHZhbHVlIHN0cmluZyAoaS5lLiAnMTAxMTEnKVxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIEl0cyB1bnVzZWQgYml0cyB3aWxsIGJlIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSBieSBsZW5ndGggb2ZcbiAgICAgKiAnYmluYXJ5VmFsdWUnLiA8YnIvPlxuICAgICAqIE5PVEU6IFRyYWlsaW5nIHplcm9zICcwJyB3aWxsIGJlIGlnbm9yZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBvID0gbmV3IEtKVVIuYXNuMS5ERVJCaXRTdHJpbmcoKTtcbiAgICAgKiBvLnNldEJ5Qm9vbGVhbkFycmF5KFwiMDEwMTFcIik7XG4gICAgICovXG4gICAgdGhpcy5zZXRCeUJpbmFyeVN0cmluZyA9IGZ1bmN0aW9uIChiaW5hcnlTdHJpbmcpIHtcbiAgICAgICAgYmluYXJ5U3RyaW5nID0gYmluYXJ5U3RyaW5nLnJlcGxhY2UoLzArJC8sICcnKTtcbiAgICAgICAgdmFyIHVudXNlZEJpdHMgPSA4IC0gYmluYXJ5U3RyaW5nLmxlbmd0aCAlIDg7XG4gICAgICAgIGlmICh1bnVzZWRCaXRzID09IDgpXG4gICAgICAgICAgICB1bnVzZWRCaXRzID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gdW51c2VkQml0czsgaSsrKSB7XG4gICAgICAgICAgICBiaW5hcnlTdHJpbmcgKz0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBoID0gJyc7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmluYXJ5U3RyaW5nLmxlbmd0aCAtIDE7IGkgKz0gOCkge1xuICAgICAgICAgICAgdmFyIGIgPSBiaW5hcnlTdHJpbmcuc3Vic3RyKGksIDgpO1xuICAgICAgICAgICAgdmFyIHggPSBwYXJzZUludChiLCAyKS50b1N0cmluZygxNik7XG4gICAgICAgICAgICBpZiAoeC5sZW5ndGggPT0gMSlcbiAgICAgICAgICAgICAgICB4ID0gJzAnICsgeDtcbiAgICAgICAgICAgIGggKz0geDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhUTFYgPSBudWxsO1xuICAgICAgICB0aGlzLmlzTW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmhWID0gJzAnICsgdW51c2VkQml0cyArIGg7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBzZXQgQVNOLjEgVExWIHZhbHVlKFYpIGJ5IGFuIGFycmF5IG9mIGJvb2xlYW48YnIvPlxuICAgICAqIEBuYW1lIHNldEJ5Qm9vbGVhbkFycmF5XG4gICAgICogQG1lbWJlck9mIEtKVVIuYXNuMS5ERVJCaXRTdHJpbmcjXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHthcnJheX0gYm9vbGVhbkFycmF5IGFycmF5IG9mIGJvb2xlYW4gKGV4LiBbdHJ1ZSwgZmFsc2UsIHRydWVdKVxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIE5PVEU6IFRyYWlsaW5nIGZhbHNlcyB3aWxsIGJlIGlnbm9yZWQgaW4gdGhlIEFTTi4xIERFUiBPYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBvID0gbmV3IEtKVVIuYXNuMS5ERVJCaXRTdHJpbmcoKTtcbiAgICAgKiBvLnNldEJ5Qm9vbGVhbkFycmF5KFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWVdKTtcbiAgICAgKi9cbiAgICB0aGlzLnNldEJ5Qm9vbGVhbkFycmF5ID0gZnVuY3Rpb24gKGJvb2xlYW5BcnJheSkge1xuICAgICAgICB2YXIgcyA9ICcnO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvb2xlYW5BcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGJvb2xlYW5BcnJheVtpXSA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcyArPSAnMSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzICs9ICcwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEJ5QmluYXJ5U3RyaW5nKHMpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGUgYW4gYXJyYXkgb2YgZmFsc2VzIHdpdGggc3BlY2lmaWVkIGxlbmd0aDxici8+XG4gICAgICogQG5hbWUgbmV3RmFsc2VBcnJheVxuICAgICAqIEBtZW1iZXJPZiBLSlVSLmFzbjEuREVSQml0U3RyaW5nXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtJbnRlZ2VyfSBuTGVuZ3RoIGxlbmd0aCBvZiBhcnJheSB0byBnZW5lcmF0ZVxuICAgICAqIEByZXR1cm4ge2FycmF5fSBhcnJheSBvZiBib29sZWFuIGZhbHNlc1xuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCBtYXkgYmUgdXNlZnVsIHRvIGluaXRpYWxpemUgYm9vbGVhbiBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG8gPSBuZXcgS0pVUi5hc24xLkRFUkJpdFN0cmluZygpO1xuICAgICAqIG8ubmV3RmFsc2VBcnJheSgzKSAmcmFycjsgW2ZhbHNlLCBmYWxzZSwgZmFsc2VdXG4gICAgICovXG4gICAgdGhpcy5uZXdGYWxzZUFycmF5ID0gZnVuY3Rpb24gKG5MZW5ndGgpIHtcbiAgICAgICAgdmFyIGEgPSBuZXcgQXJyYXkobkxlbmd0aCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbkxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhW2ldID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfTtcbiAgICB0aGlzLmdldEZyZXNoVmFsdWVIZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhWO1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PSBcInN0cmluZ1wiICYmIHBhcmFtcy50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eWzAtOWEtZl0rJC8pKSB7XG4gICAgICAgICAgICB0aGlzLnNldEhleFZhbHVlSW5jbHVkaW5nVW51c2VkQml0cyhwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBwYXJhbXNbJ2hleCddICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzKHBhcmFtc1snaGV4J10pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBwYXJhbXNbJ2JpbiddICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QnlCaW5hcnlTdHJpbmcocGFyYW1zWydiaW4nXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhcmFtc1snYXJyYXknXSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aGlzLnNldEJ5Qm9vbGVhbkFycmF5KHBhcmFtc1snYXJyYXknXSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuWUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkJpdFN0cmluZywgS0pVUi5hc24xLkFTTjFPYmplY3QpO1xuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8qKlxuICogY2xhc3MgZm9yIEFTTi4xIERFUiBPY3RldFN0cmluZzxici8+XG4gKiBAbmFtZSBLSlVSLmFzbjEuREVST2N0ZXRTdHJpbmdcbiAqIEBjbGFzcyBjbGFzcyBmb3IgQVNOLjEgREVSIE9jdGV0U3RyaW5nXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXMgYXNzb2NpYXRpdmUgYXJyYXkgb2YgcGFyYW1ldGVycyAoZXguIHsnc3RyJzogJ2FhYSd9KVxuICogQGV4dGVuZHMgS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgQVNOLjEgT2N0ZXRTdHJpbmcgc2ltcGxlIHR5cGUuPGJyLz5cbiAqIFN1cHBvcnRlZCBcInBhcmFtc1wiIGF0dHJpYnV0ZXMgYXJlOlxuICogPHVsPlxuICogPGxpPnN0ciAtIHRvIHNldCBhIHN0cmluZyBhcyBhIHZhbHVlPC9saT5cbiAqIDxsaT5oZXggLSB0byBzZXQgYSBoZXhhZGVjaW1hbCBzdHJpbmcgYXMgYSB2YWx1ZTwvbGk+XG4gKiA8bGk+b2JqIC0gdG8gc2V0IGEgZW5jYXBzdWxhdGVkIEFTTi4xIHZhbHVlIGJ5IEpTT04gb2JqZWN0XG4gKiB3aGljaCBpcyBkZWZpbmVkIGluIHtAbGluayBLSlVSLmFzbjEuQVNOMVV0aWwubmV3T2JqZWN0fTwvbGk+XG4gKiA8L3VsPlxuICogTk9URTogQSBwYXJhbWV0ZXIgJ29iaicgaGF2ZSBiZWVuIHN1cHBvcnRlZFxuICogZm9yIFwiT0NURVQgU1RSSU5HLCBlbmNhcHN1bGF0ZXNcIiBzdHJ1Y3R1cmUuXG4gKiBzaW5jZSBhc24xIDEuMC4xMSwganNyc2FzaWduIDYuMS4xICgyMDE2LVNlcC0yNSkuXG4gKiBAc2VlIEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyAtIHN1cGVyY2xhc3NcbiAqIEBleGFtcGxlXG4gKiAvLyBkZWZhdWx0IGNvbnN0cnVjdG9yXG4gKiBvID0gbmV3IEtKVVIuYXNuMS5ERVJPY3RldFN0cmluZygpO1xuICogLy8gaW5pdGlhbGl6ZSB3aXRoIHN0cmluZ1xuICogbyA9IG5ldyBLSlVSLmFzbjEuREVST2N0ZXRTdHJpbmcoe3N0cjogXCJhYWFcIn0pO1xuICogLy8gaW5pdGlhbGl6ZSB3aXRoIGhleGFkZWNpbWFsIHN0cmluZ1xuICogbyA9IG5ldyBLSlVSLmFzbjEuREVST2N0ZXRTdHJpbmcoe2hleDogXCI2MTYxNjFcIn0pO1xuICogLy8gaW5pdGlhbGl6ZSB3aXRoIEFTTjFVdGlsLm5ld09iamVjdCBhcmd1bWVudFxuICogbyA9IG5ldyBLSlVSLmFzbjEuREVST2N0ZXRTdHJpbmcoe29iajoge3NlcTogW3tpbnQ6IDN9LCB7cHJuc3RyOiAnYWFhJ31dfX0pO1xuICogLy8gYWJvdmUgZ2VuZXJhdGVzIGEgQVNOLjEgZGF0YSBsaWtlIHRoaXM6XG4gKiAvLyBPQ1RFVCBTVFJJTkcsIGVuY2Fwc3VsYXRlcyB7XG4gKiAvLyAgIFNFUVVFTkNFIHtcbiAqIC8vICAgICBJTlRFR0VSIDNcbiAqIC8vICAgICBQcmludGFibGVTdHJpbmcgJ2FhYSdcbiAqIC8vICAgICB9XG4gKiAvLyAgIH1cbiAqL1xuS0pVUi5hc24xLkRFUk9jdGV0U3RyaW5nID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcGFyYW1zLm9iaiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICB2YXIgbyA9IEtKVVIuYXNuMS5BU04xVXRpbC5uZXdPYmplY3QocGFyYW1zLm9iaik7XG4gICAgICAgIHBhcmFtcy5oZXggPSBvLmdldEVuY29kZWRIZXgoKTtcbiAgICB9XG4gICAgS0pVUi5hc24xLkRFUk9jdGV0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJhbXMpO1xuICAgIHRoaXMuaFQgPSBcIjA0XCI7XG59O1xuWUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUk9jdGV0U3RyaW5nLCBLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO1xuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8qKlxuICogY2xhc3MgZm9yIEFTTi4xIERFUiBOdWxsXG4gKiBAbmFtZSBLSlVSLmFzbjEuREVSTnVsbFxuICogQGNsYXNzIGNsYXNzIGZvciBBU04uMSBERVIgTnVsbFxuICogQGV4dGVuZHMgS0pVUi5hc24xLkFTTjFPYmplY3RcbiAqIEBkZXNjcmlwdGlvblxuICogQHNlZSBLSlVSLmFzbjEuQVNOMU9iamVjdCAtIHN1cGVyY2xhc3NcbiAqL1xuS0pVUi5hc24xLkRFUk51bGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgS0pVUi5hc24xLkRFUk51bGwuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO1xuICAgIHRoaXMuaFQgPSBcIjA1XCI7XG4gICAgdGhpcy5oVExWID0gXCIwNTAwXCI7XG59O1xuWUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUk51bGwsIEtKVVIuYXNuMS5BU04xT2JqZWN0KTtcbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vKipcbiAqIGNsYXNzIGZvciBBU04uMSBERVIgT2JqZWN0SWRlbnRpZmllclxuICogQG5hbWUgS0pVUi5hc24xLkRFUk9iamVjdElkZW50aWZpZXJcbiAqIEBjbGFzcyBjbGFzcyBmb3IgQVNOLjEgREVSIE9iamVjdElkZW50aWZpZXJcbiAqIEBwYXJhbSB7QXJyYXl9IHBhcmFtcyBhc3NvY2lhdGl2ZSBhcnJheSBvZiBwYXJhbWV0ZXJzIChleC4geydvaWQnOiAnMi41LjQuNSd9KVxuICogQGV4dGVuZHMgS0pVUi5hc24xLkFTTjFPYmplY3RcbiAqIEBkZXNjcmlwdGlvblxuICogPGJyLz5cbiAqIEFzIGZvciBhcmd1bWVudCAncGFyYW1zJyBmb3IgY29uc3RydWN0b3IsIHlvdSBjYW4gc3BlY2lmeSBvbmUgb2ZcbiAqIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogPHVsPlxuICogPGxpPm9pZCAtIHNwZWNpZnkgaW5pdGlhbCBBU04uMSB2YWx1ZShWKSBieSBhIG9pZCBzdHJpbmcgKGV4LiAyLjUuNC4xMyk8L2xpPlxuICogPGxpPmhleCAtIHNwZWNpZnkgaW5pdGlhbCBBU04uMSB2YWx1ZShWKSBieSBhIGhleGFkZWNpbWFsIHN0cmluZzwvbGk+XG4gKiA8L3VsPlxuICogTk9URTogJ3BhcmFtcycgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbktKVVIuYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIHZhciBpdG94ID0gZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgdmFyIGggPSBpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaWYgKGgubGVuZ3RoID09IDEpXG4gICAgICAgICAgICBoID0gJzAnICsgaDtcbiAgICAgICAgcmV0dXJuIGg7XG4gICAgfTtcbiAgICB2YXIgcm9pZHRveCA9IGZ1bmN0aW9uIChyb2lkKSB7XG4gICAgICAgIHZhciBoID0gJyc7XG4gICAgICAgIHZhciBiaSA9IG5ldyBCaWdJbnRlZ2VyKHJvaWQsIDEwKTtcbiAgICAgICAgdmFyIGIgPSBiaS50b1N0cmluZygyKTtcbiAgICAgICAgdmFyIHBhZExlbiA9IDcgLSBiLmxlbmd0aCAlIDc7XG4gICAgICAgIGlmIChwYWRMZW4gPT0gNylcbiAgICAgICAgICAgIHBhZExlbiA9IDA7XG4gICAgICAgIHZhciBiUGFkID0gJyc7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFkTGVuOyBpKyspXG4gICAgICAgICAgICBiUGFkICs9ICcwJztcbiAgICAgICAgYiA9IGJQYWQgKyBiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoIC0gMTsgaSArPSA3KSB7XG4gICAgICAgICAgICB2YXIgYjggPSBiLnN1YnN0cihpLCA3KTtcbiAgICAgICAgICAgIGlmIChpICE9IGIubGVuZ3RoIC0gNylcbiAgICAgICAgICAgICAgICBiOCA9ICcxJyArIGI4O1xuICAgICAgICAgICAgaCArPSBpdG94KHBhcnNlSW50KGI4LCAyKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGg7XG4gICAgfTtcbiAgICBLSlVSLmFzbjEuREVST2JqZWN0SWRlbnRpZmllci5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7XG4gICAgdGhpcy5oVCA9IFwiMDZcIjtcbiAgICAvKipcbiAgICAgKiBzZXQgdmFsdWUgYnkgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAgICAgKiBAbmFtZSBzZXRWYWx1ZUhleFxuICAgICAqIEBtZW1iZXJPZiBLSlVSLmFzbjEuREVST2JqZWN0SWRlbnRpZmllciNcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmV3SGV4U3RyaW5nIGhleGFkZWNpbWFsIHZhbHVlIG9mIE9JRCBieXRlc1xuICAgICAqL1xuICAgIHRoaXMuc2V0VmFsdWVIZXggPSBmdW5jdGlvbiAobmV3SGV4U3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaFRMViA9IG51bGw7XG4gICAgICAgIHRoaXMuaXNNb2RpZmllZCA9IHRydWU7XG4gICAgICAgIHRoaXMucyA9IG51bGw7XG4gICAgICAgIHRoaXMuaFYgPSBuZXdIZXhTdHJpbmc7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBzZXQgdmFsdWUgYnkgYSBPSUQgc3RyaW5nPGJyLz5cbiAgICAgKiBAbmFtZSBzZXRWYWx1ZU9pZFN0cmluZ1xuICAgICAqIEBtZW1iZXJPZiBLSlVSLmFzbjEuREVST2JqZWN0SWRlbnRpZmllciNcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gb2lkU3RyaW5nIE9JRCBzdHJpbmcgKGV4LiAyLjUuNC4xMylcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG8gPSBuZXcgS0pVUi5hc24xLkRFUk9iamVjdElkZW50aWZpZXIoKTtcbiAgICAgKiBvLnNldFZhbHVlT2lkU3RyaW5nKFwiMi41LjQuMTNcIik7XG4gICAgICovXG4gICAgdGhpcy5zZXRWYWx1ZU9pZFN0cmluZyA9IGZ1bmN0aW9uIChvaWRTdHJpbmcpIHtcbiAgICAgICAgaWYgKCFvaWRTdHJpbmcubWF0Y2goL15bMC05Ll0rJC8pKSB7XG4gICAgICAgICAgICB0aHJvdyBcIm1hbGZvcm1lZCBvaWQgc3RyaW5nOiBcIiArIG9pZFN0cmluZztcbiAgICAgICAgfVxuICAgICAgICB2YXIgaCA9ICcnO1xuICAgICAgICB2YXIgYSA9IG9pZFN0cmluZy5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgaTAgPSBwYXJzZUludChhWzBdKSAqIDQwICsgcGFyc2VJbnQoYVsxXSk7XG4gICAgICAgIGggKz0gaXRveChpMCk7XG4gICAgICAgIGEuc3BsaWNlKDAsIDIpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGggKz0gcm9pZHRveChhW2ldKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhUTFYgPSBudWxsO1xuICAgICAgICB0aGlzLmlzTW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnMgPSBudWxsO1xuICAgICAgICB0aGlzLmhWID0gaDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIHNldCB2YWx1ZSBieSBhIE9JRCBuYW1lXG4gICAgICogQG5hbWUgc2V0VmFsdWVOYW1lXG4gICAgICogQG1lbWJlck9mIEtKVVIuYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyI1xuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvaWROYW1lIE9JRCBuYW1lIChleC4gJ3NlcnZlckF1dGgnKVxuICAgICAqIEBzaW5jZSAxLjAuMVxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIE9JRCBuYW1lIHNoYWxsIGJlIGRlZmluZWQgaW4gJ0tKVVIuYXNuMS54NTA5Lk9JRC5uYW1lMm9pZExpc3QnLlxuICAgICAqIE90aGVyd2lzZSByYWlzZSBlcnJvci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG8gPSBuZXcgS0pVUi5hc24xLkRFUk9iamVjdElkZW50aWZpZXIoKTtcbiAgICAgKiBvLnNldFZhbHVlTmFtZShcInNlcnZlckF1dGhcIik7XG4gICAgICovXG4gICAgdGhpcy5zZXRWYWx1ZU5hbWUgPSBmdW5jdGlvbiAob2lkTmFtZSkge1xuICAgICAgICB2YXIgb2lkID0gS0pVUi5hc24xLng1MDkuT0lELm5hbWUyb2lkKG9pZE5hbWUpO1xuICAgICAgICBpZiAob2lkICE9PSAnJykge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZU9pZFN0cmluZyhvaWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgXCJERVJPYmplY3RJZGVudGlmaWVyIG9pZE5hbWUgdW5kZWZpbmVkOiBcIiArIG9pZE5hbWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0RnJlc2hWYWx1ZUhleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaFY7XG4gICAgfTtcbiAgICBpZiAocGFyYW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGlmIChwYXJhbXMubWF0Y2goL15bMC0yXS5bMC05Ll0rJC8pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZU9pZFN0cmluZyhwYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZU5hbWUocGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJhbXMub2lkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVPaWRTdHJpbmcocGFyYW1zLm9pZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGFyYW1zLmhleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlSGV4KHBhcmFtcy5oZXgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhcmFtcy5uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVOYW1lKHBhcmFtcy5uYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5ZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVST2JqZWN0SWRlbnRpZmllciwgS0pVUi5hc24xLkFTTjFPYmplY3QpO1xuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8qKlxuICogY2xhc3MgZm9yIEFTTi4xIERFUiBFbnVtZXJhdGVkXG4gKiBAbmFtZSBLSlVSLmFzbjEuREVSRW51bWVyYXRlZFxuICogQGNsYXNzIGNsYXNzIGZvciBBU04uMSBERVIgRW51bWVyYXRlZFxuICogQGV4dGVuZHMgS0pVUi5hc24xLkFTTjFPYmplY3RcbiAqIEBkZXNjcmlwdGlvblxuICogPGJyLz5cbiAqIEFzIGZvciBhcmd1bWVudCAncGFyYW1zJyBmb3IgY29uc3RydWN0b3IsIHlvdSBjYW4gc3BlY2lmeSBvbmUgb2ZcbiAqIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogPHVsPlxuICogPGxpPmludCAtIHNwZWNpZnkgaW5pdGlhbCBBU04uMSB2YWx1ZShWKSBieSBpbnRlZ2VyIHZhbHVlPC9saT5cbiAqIDxsaT5oZXggLSBzcGVjaWZ5IGluaXRpYWwgQVNOLjEgdmFsdWUoVikgYnkgYSBoZXhhZGVjaW1hbCBzdHJpbmc8L2xpPlxuICogPC91bD5cbiAqIE5PVEU6ICdwYXJhbXMnIGNhbiBiZSBvbWl0dGVkLlxuICogQGV4YW1wbGVcbiAqIG5ldyBLSlVSLmFzbjEuREVSRW51bWVyYXRlZCgxMjMpO1xuICogbmV3IEtKVVIuYXNuMS5ERVJFbnVtZXJhdGVkKHtpbnQ6IDEyM30pO1xuICogbmV3IEtKVVIuYXNuMS5ERVJFbnVtZXJhdGVkKHtoZXg6ICcxZmFkJ30pO1xuICovXG5LSlVSLmFzbjEuREVSRW51bWVyYXRlZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICBLSlVSLmFzbjEuREVSRW51bWVyYXRlZC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7XG4gICAgdGhpcy5oVCA9IFwiMGFcIjtcbiAgICAvKipcbiAgICAgKiBzZXQgdmFsdWUgYnkgVG9tIFd1J3MgQmlnSW50ZWdlciBvYmplY3RcbiAgICAgKiBAbmFtZSBzZXRCeUJpZ0ludGVnZXJcbiAgICAgKiBAbWVtYmVyT2YgS0pVUi5hc24xLkRFUkVudW1lcmF0ZWQjXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtCaWdJbnRlZ2VyfSBiaWdJbnRlZ2VyVmFsdWUgdG8gc2V0XG4gICAgICovXG4gICAgdGhpcy5zZXRCeUJpZ0ludGVnZXIgPSBmdW5jdGlvbiAoYmlnSW50ZWdlclZhbHVlKSB7XG4gICAgICAgIHRoaXMuaFRMViA9IG51bGw7XG4gICAgICAgIHRoaXMuaXNNb2RpZmllZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaFYgPSBLSlVSLmFzbjEuQVNOMVV0aWwuYmlnSW50VG9NaW5Ud29zQ29tcGxlbWVudHNIZXgoYmlnSW50ZWdlclZhbHVlKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIHNldCB2YWx1ZSBieSBpbnRlZ2VyIHZhbHVlXG4gICAgICogQG5hbWUgc2V0QnlJbnRlZ2VyXG4gICAgICogQG1lbWJlck9mIEtKVVIuYXNuMS5ERVJFbnVtZXJhdGVkI1xuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7SW50ZWdlcn0gaW50ZWdlciB2YWx1ZSB0byBzZXRcbiAgICAgKi9cbiAgICB0aGlzLnNldEJ5SW50ZWdlciA9IGZ1bmN0aW9uIChpbnRWYWx1ZSkge1xuICAgICAgICB2YXIgYmkgPSBuZXcgQmlnSW50ZWdlcihTdHJpbmcoaW50VmFsdWUpLCAxMCk7XG4gICAgICAgIHRoaXMuc2V0QnlCaWdJbnRlZ2VyKGJpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIHNldCB2YWx1ZSBieSBpbnRlZ2VyIHZhbHVlXG4gICAgICogQG5hbWUgc2V0VmFsdWVIZXhcbiAgICAgKiBAbWVtYmVyT2YgS0pVUi5hc24xLkRFUkVudW1lcmF0ZWQjXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhleGFkZWNpbWFsIHN0cmluZyBvZiBpbnRlZ2VyIHZhbHVlXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogPGJyLz5cbiAgICAgKiBOT1RFOiBWYWx1ZSBzaGFsbCBiZSByZXByZXNlbnRlZCBieSBtaW5pbXVtIG9jdGV0IGxlbmd0aCBvZlxuICAgICAqIHR3bydzIGNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24uXG4gICAgICovXG4gICAgdGhpcy5zZXRWYWx1ZUhleCA9IGZ1bmN0aW9uIChuZXdIZXhTdHJpbmcpIHtcbiAgICAgICAgdGhpcy5oViA9IG5ld0hleFN0cmluZztcbiAgICB9O1xuICAgIHRoaXMuZ2V0RnJlc2hWYWx1ZUhleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaFY7XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHBhcmFtcyAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1zWydpbnQnXSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aGlzLnNldEJ5SW50ZWdlcihwYXJhbXNbJ2ludCddKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGFyYW1zID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QnlJbnRlZ2VyKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhcmFtc1snaGV4J10gIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUhleChwYXJhbXNbJ2hleCddKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5ZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSRW51bWVyYXRlZCwgS0pVUi5hc24xLkFTTjFPYmplY3QpO1xuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8qKlxuICogY2xhc3MgZm9yIEFTTi4xIERFUiBVVEY4U3RyaW5nXG4gKiBAbmFtZSBLSlVSLmFzbjEuREVSVVRGOFN0cmluZ1xuICogQGNsYXNzIGNsYXNzIGZvciBBU04uMSBERVIgVVRGOFN0cmluZ1xuICogQHBhcmFtIHtBcnJheX0gcGFyYW1zIGFzc29jaWF0aXZlIGFycmF5IG9mIHBhcmFtZXRlcnMgKGV4LiB7J3N0cic6ICdhYWEnfSlcbiAqIEBleHRlbmRzIEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZ1xuICogQGRlc2NyaXB0aW9uXG4gKiBAc2VlIEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyAtIHN1cGVyY2xhc3NcbiAqL1xuS0pVUi5hc24xLkRFUlVURjhTdHJpbmcgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgS0pVUi5hc24xLkRFUlVURjhTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmFtcyk7XG4gICAgdGhpcy5oVCA9IFwiMGNcIjtcbn07XG5ZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSVVRGOFN0cmluZywgS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nKTtcbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vKipcbiAqIGNsYXNzIGZvciBBU04uMSBERVIgTnVtZXJpY1N0cmluZ1xuICogQG5hbWUgS0pVUi5hc24xLkRFUk51bWVyaWNTdHJpbmdcbiAqIEBjbGFzcyBjbGFzcyBmb3IgQVNOLjEgREVSIE51bWVyaWNTdHJpbmdcbiAqIEBwYXJhbSB7QXJyYXl9IHBhcmFtcyBhc3NvY2lhdGl2ZSBhcnJheSBvZiBwYXJhbWV0ZXJzIChleC4geydzdHInOiAnYWFhJ30pXG4gKiBAZXh0ZW5kcyBLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmdcbiAqIEBkZXNjcmlwdGlvblxuICogQHNlZSBLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcgLSBzdXBlcmNsYXNzXG4gKi9cbktKVVIuYXNuMS5ERVJOdW1lcmljU3RyaW5nID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIEtKVVIuYXNuMS5ERVJOdW1lcmljU3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJhbXMpO1xuICAgIHRoaXMuaFQgPSBcIjEyXCI7XG59O1xuWUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUk51bWVyaWNTdHJpbmcsIEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7XG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLyoqXG4gKiBjbGFzcyBmb3IgQVNOLjEgREVSIFByaW50YWJsZVN0cmluZ1xuICogQG5hbWUgS0pVUi5hc24xLkRFUlByaW50YWJsZVN0cmluZ1xuICogQGNsYXNzIGNsYXNzIGZvciBBU04uMSBERVIgUHJpbnRhYmxlU3RyaW5nXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXMgYXNzb2NpYXRpdmUgYXJyYXkgb2YgcGFyYW1ldGVycyAoZXguIHsnc3RyJzogJ2FhYSd9KVxuICogQGV4dGVuZHMgS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nXG4gKiBAZGVzY3JpcHRpb25cbiAqIEBzZWUgS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nIC0gc3VwZXJjbGFzc1xuICovXG5LSlVSLmFzbjEuREVSUHJpbnRhYmxlU3RyaW5nID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIEtKVVIuYXNuMS5ERVJQcmludGFibGVTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmFtcyk7XG4gICAgdGhpcy5oVCA9IFwiMTNcIjtcbn07XG5ZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSUHJpbnRhYmxlU3RyaW5nLCBLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO1xuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8qKlxuICogY2xhc3MgZm9yIEFTTi4xIERFUiBUZWxldGV4U3RyaW5nXG4gKiBAbmFtZSBLSlVSLmFzbjEuREVSVGVsZXRleFN0cmluZ1xuICogQGNsYXNzIGNsYXNzIGZvciBBU04uMSBERVIgVGVsZXRleFN0cmluZ1xuICogQHBhcmFtIHtBcnJheX0gcGFyYW1zIGFzc29jaWF0aXZlIGFycmF5IG9mIHBhcmFtZXRlcnMgKGV4LiB7J3N0cic6ICdhYWEnfSlcbiAqIEBleHRlbmRzIEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZ1xuICogQGRlc2NyaXB0aW9uXG4gKiBAc2VlIEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyAtIHN1cGVyY2xhc3NcbiAqL1xuS0pVUi5hc24xLkRFUlRlbGV0ZXhTdHJpbmcgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgS0pVUi5hc24xLkRFUlRlbGV0ZXhTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmFtcyk7XG4gICAgdGhpcy5oVCA9IFwiMTRcIjtcbn07XG5ZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSVGVsZXRleFN0cmluZywgS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nKTtcbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vKipcbiAqIGNsYXNzIGZvciBBU04uMSBERVIgSUE1U3RyaW5nXG4gKiBAbmFtZSBLSlVSLmFzbjEuREVSSUE1U3RyaW5nXG4gKiBAY2xhc3MgY2xhc3MgZm9yIEFTTi4xIERFUiBJQTVTdHJpbmdcbiAqIEBwYXJhbSB7QXJyYXl9IHBhcmFtcyBhc3NvY2lhdGl2ZSBhcnJheSBvZiBwYXJhbWV0ZXJzIChleC4geydzdHInOiAnYWFhJ30pXG4gKiBAZXh0ZW5kcyBLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmdcbiAqIEBkZXNjcmlwdGlvblxuICogQHNlZSBLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcgLSBzdXBlcmNsYXNzXG4gKi9cbktKVVIuYXNuMS5ERVJJQTVTdHJpbmcgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgS0pVUi5hc24xLkRFUklBNVN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyYW1zKTtcbiAgICB0aGlzLmhUID0gXCIxNlwiO1xufTtcbllBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJJQTVTdHJpbmcsIEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7XG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLyoqXG4gKiBjbGFzcyBmb3IgQVNOLjEgREVSIFVUQ1RpbWVcbiAqIEBuYW1lIEtKVVIuYXNuMS5ERVJVVENUaW1lXG4gKiBAY2xhc3MgY2xhc3MgZm9yIEFTTi4xIERFUiBVVENUaW1lXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXMgYXNzb2NpYXRpdmUgYXJyYXkgb2YgcGFyYW1ldGVycyAoZXguIHsnc3RyJzogJzEzMDQzMDIzNTk1OVonfSlcbiAqIEBleHRlbmRzIEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWVcbiAqIEBkZXNjcmlwdGlvblxuICogPGJyLz5cbiAqIEFzIGZvciBhcmd1bWVudCAncGFyYW1zJyBmb3IgY29uc3RydWN0b3IsIHlvdSBjYW4gc3BlY2lmeSBvbmUgb2ZcbiAqIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogPHVsPlxuICogPGxpPnN0ciAtIHNwZWNpZnkgaW5pdGlhbCBBU04uMSB2YWx1ZShWKSBieSBhIHN0cmluZyAoZXguJzEzMDQzMDIzNTk1OVonKTwvbGk+XG4gKiA8bGk+aGV4IC0gc3BlY2lmeSBpbml0aWFsIEFTTi4xIHZhbHVlKFYpIGJ5IGEgaGV4YWRlY2ltYWwgc3RyaW5nPC9saT5cbiAqIDxsaT5kYXRlIC0gc3BlY2lmeSBEYXRlIG9iamVjdC48L2xpPlxuICogPC91bD5cbiAqIE5PVEU6ICdwYXJhbXMnIGNhbiBiZSBvbWl0dGVkLlxuICogPGg0PkVYQU1QTEVTPC9oND5cbiAqIEBleGFtcGxlXG4gKiBkMSA9IG5ldyBLSlVSLmFzbjEuREVSVVRDVGltZSgpO1xuICogZDEuc2V0U3RyaW5nKCcxMzA0MzAxMjU5NTlaJyk7XG4gKlxuICogZDIgPSBuZXcgS0pVUi5hc24xLkRFUlVUQ1RpbWUoeydzdHInOiAnMTMwNDMwMTI1OTU5Wid9KTtcbiAqIGQzID0gbmV3IEtKVVIuYXNuMS5ERVJVVENUaW1lKHsnZGF0ZSc6IG5ldyBEYXRlKERhdGUuVVRDKDIwMTUsIDAsIDMxLCAwLCAwLCAwLCAwKSl9KTtcbiAqIGQ0ID0gbmV3IEtKVVIuYXNuMS5ERVJVVENUaW1lKCcxMzA0MzAxMjU5NTlaJyk7XG4gKi9cbktKVVIuYXNuMS5ERVJVVENUaW1lID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIEtKVVIuYXNuMS5ERVJVVENUaW1lLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJhbXMpO1xuICAgIHRoaXMuaFQgPSBcIjE3XCI7XG4gICAgLyoqXG4gICAgICogc2V0IHZhbHVlIGJ5IGEgRGF0ZSBvYmplY3Q8YnIvPlxuICAgICAqIEBuYW1lIHNldEJ5RGF0ZVxuICAgICAqIEBtZW1iZXJPZiBLSlVSLmFzbjEuREVSVVRDVGltZSNcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGVPYmplY3QgRGF0ZSBvYmplY3QgdG8gc2V0IEFTTi4xIHZhbHVlKFYpXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBvID0gbmV3IEtKVVIuYXNuMS5ERVJVVENUaW1lKCk7XG4gICAgICogby5zZXRCeURhdGUobmV3IERhdGUoXCIyMDE2LzEyLzMxXCIpKTtcbiAgICAgKi9cbiAgICB0aGlzLnNldEJ5RGF0ZSA9IGZ1bmN0aW9uIChkYXRlT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuaFRMViA9IG51bGw7XG4gICAgICAgIHRoaXMuaXNNb2RpZmllZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0ZSA9IGRhdGVPYmplY3Q7XG4gICAgICAgIHRoaXMucyA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsICd1dGMnKTtcbiAgICAgICAgdGhpcy5oViA9IHN0b2hleCh0aGlzLnMpO1xuICAgIH07XG4gICAgdGhpcy5nZXRGcmVzaFZhbHVlSGV4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGF0ZSA9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB0aGlzLnMgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgdGhpcy5kYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucyA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsICd1dGMnKTtcbiAgICAgICAgICAgIHRoaXMuaFYgPSBzdG9oZXgodGhpcy5zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5oVjtcbiAgICB9O1xuICAgIGlmIChwYXJhbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocGFyYW1zLnN0ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0cmluZyhwYXJhbXMuc3RyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGFyYW1zID09IFwic3RyaW5nXCIgJiYgcGFyYW1zLm1hdGNoKC9eWzAtOV17MTJ9WiQvKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdHJpbmcocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJhbXMuaGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RyaW5nSGV4KHBhcmFtcy5oZXgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhcmFtcy5kYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QnlEYXRlKHBhcmFtcy5kYXRlKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5ZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSVVRDVGltZSwgS0pVUi5hc24xLkRFUkFic3RyYWN0VGltZSk7XG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLyoqXG4gKiBjbGFzcyBmb3IgQVNOLjEgREVSIEdlbmVyYWxpemVkVGltZVxuICogQG5hbWUgS0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZVxuICogQGNsYXNzIGNsYXNzIGZvciBBU04uMSBERVIgR2VuZXJhbGl6ZWRUaW1lXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXMgYXNzb2NpYXRpdmUgYXJyYXkgb2YgcGFyYW1ldGVycyAoZXguIHsnc3RyJzogJzIwMTMwNDMwMjM1OTU5Wid9KVxuICogQHByb3BlcnR5IHtCb29sZWFufSB3aXRoTWlsbGlzIGZsYWcgdG8gc2hvdyBtaWxsaXNlY29uZHMgb3Igbm90XG4gKiBAZXh0ZW5kcyBLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lXG4gKiBAZGVzY3JpcHRpb25cbiAqIDxici8+XG4gKiBBcyBmb3IgYXJndW1lbnQgJ3BhcmFtcycgZm9yIGNvbnN0cnVjdG9yLCB5b3UgY2FuIHNwZWNpZnkgb25lIG9mXG4gKiBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqIDx1bD5cbiAqIDxsaT5zdHIgLSBzcGVjaWZ5IGluaXRpYWwgQVNOLjEgdmFsdWUoVikgYnkgYSBzdHJpbmcgKGV4LicyMDEzMDQzMDIzNTk1OVonKTwvbGk+XG4gKiA8bGk+aGV4IC0gc3BlY2lmeSBpbml0aWFsIEFTTi4xIHZhbHVlKFYpIGJ5IGEgaGV4YWRlY2ltYWwgc3RyaW5nPC9saT5cbiAqIDxsaT5kYXRlIC0gc3BlY2lmeSBEYXRlIG9iamVjdC48L2xpPlxuICogPGxpPm1pbGxpcyAtIHNwZWNpZnkgZmxhZyB0byBzaG93IG1pbGxpc2Vjb25kcyAoZnJvbSAxLjAuNik8L2xpPlxuICogPC91bD5cbiAqIE5PVEUxOiAncGFyYW1zJyBjYW4gYmUgb21pdHRlZC5cbiAqIE5PVEUyOiAnd2l0aE1pbGxpcycgcHJvcGVydHkgaXMgc3VwcG9ydGVkIGZyb20gYXNuMSAxLjAuNi5cbiAqL1xuS0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICBLSlVSLmFzbjEuREVSR2VuZXJhbGl6ZWRUaW1lLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJhbXMpO1xuICAgIHRoaXMuaFQgPSBcIjE4XCI7XG4gICAgdGhpcy53aXRoTWlsbGlzID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogc2V0IHZhbHVlIGJ5IGEgRGF0ZSBvYmplY3RcbiAgICAgKiBAbmFtZSBzZXRCeURhdGVcbiAgICAgKiBAbWVtYmVyT2YgS0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZSNcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGVPYmplY3QgRGF0ZSBvYmplY3QgdG8gc2V0IEFTTi4xIHZhbHVlKFYpXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBXaGVuIHlvdSBzcGVjaWZ5IFVUQyB0aW1lLCB1c2UgJ0RhdGUuVVRDJyBtZXRob2QgbGlrZSB0aGlzOjxici8+XG4gICAgICogbzEgPSBuZXcgREVSVVRDVGltZSgpO1xuICAgICAqIG8xLnNldEJ5RGF0ZShkYXRlKTtcbiAgICAgKlxuICAgICAqIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygyMDE1LCAwLCAzMSwgMjMsIDU5LCA1OSwgMCkpOyAjMjAxNUpBTjMxIDIzOjU5OjU5XG4gICAgICovXG4gICAgdGhpcy5zZXRCeURhdGUgPSBmdW5jdGlvbiAoZGF0ZU9iamVjdCkge1xuICAgICAgICB0aGlzLmhUTFYgPSBudWxsO1xuICAgICAgICB0aGlzLmlzTW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGUgPSBkYXRlT2JqZWN0O1xuICAgICAgICB0aGlzLnMgPSB0aGlzLmZvcm1hdERhdGUodGhpcy5kYXRlLCAnZ2VuJywgdGhpcy53aXRoTWlsbGlzKTtcbiAgICAgICAgdGhpcy5oViA9IHN0b2hleCh0aGlzLnMpO1xuICAgIH07XG4gICAgdGhpcy5nZXRGcmVzaFZhbHVlSGV4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRlID09PSB1bmRlZmluZWQgJiYgdGhpcy5zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICB0aGlzLnMgPSB0aGlzLmZvcm1hdERhdGUodGhpcy5kYXRlLCAnZ2VuJywgdGhpcy53aXRoTWlsbGlzKTtcbiAgICAgICAgICAgIHRoaXMuaFYgPSBzdG9oZXgodGhpcy5zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5oVjtcbiAgICB9O1xuICAgIGlmIChwYXJhbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocGFyYW1zLnN0ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0cmluZyhwYXJhbXMuc3RyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGFyYW1zID09IFwic3RyaW5nXCIgJiYgcGFyYW1zLm1hdGNoKC9eWzAtOV17MTR9WiQvKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdHJpbmcocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJhbXMuaGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RyaW5nSGV4KHBhcmFtcy5oZXgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhcmFtcy5kYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QnlEYXRlKHBhcmFtcy5kYXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLm1pbGxpcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy53aXRoTWlsbGlzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5ZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSR2VuZXJhbGl6ZWRUaW1lLCBLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lKTtcbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vKipcbiAqIGNsYXNzIGZvciBBU04uMSBERVIgU2VxdWVuY2VcbiAqIEBuYW1lIEtKVVIuYXNuMS5ERVJTZXF1ZW5jZVxuICogQGNsYXNzIGNsYXNzIGZvciBBU04uMSBERVIgU2VxdWVuY2VcbiAqIEBleHRlbmRzIEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWRcbiAqIEBkZXNjcmlwdGlvblxuICogPGJyLz5cbiAqIEFzIGZvciBhcmd1bWVudCAncGFyYW1zJyBmb3IgY29uc3RydWN0b3IsIHlvdSBjYW4gc3BlY2lmeSBvbmUgb2ZcbiAqIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogPHVsPlxuICogPGxpPmFycmF5IC0gc3BlY2lmeSBhcnJheSBvZiBBU04xT2JqZWN0IHRvIHNldCBlbGVtZW50cyBvZiBjb250ZW50PC9saT5cbiAqIDwvdWw+XG4gKiBOT1RFOiAncGFyYW1zJyBjYW4gYmUgb21pdHRlZC5cbiAqL1xuS0pVUi5hc24xLkRFUlNlcXVlbmNlID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIEtKVVIuYXNuMS5ERVJTZXF1ZW5jZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyYW1zKTtcbiAgICB0aGlzLmhUID0gXCIzMFwiO1xuICAgIHRoaXMuZ2V0RnJlc2hWYWx1ZUhleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGggPSAnJztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFzbjFBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGFzbjFPYmogPSB0aGlzLmFzbjFBcnJheVtpXTtcbiAgICAgICAgICAgIGggKz0gYXNuMU9iai5nZXRFbmNvZGVkSGV4KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oViA9IGg7XG4gICAgICAgIHJldHVybiB0aGlzLmhWO1xuICAgIH07XG59O1xuWUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUlNlcXVlbmNlLCBLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkKTtcbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vKipcbiAqIGNsYXNzIGZvciBBU04uMSBERVIgU2V0XG4gKiBAbmFtZSBLSlVSLmFzbjEuREVSU2V0XG4gKiBAY2xhc3MgY2xhc3MgZm9yIEFTTi4xIERFUiBTZXRcbiAqIEBleHRlbmRzIEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWRcbiAqIEBkZXNjcmlwdGlvblxuICogPGJyLz5cbiAqIEFzIGZvciBhcmd1bWVudCAncGFyYW1zJyBmb3IgY29uc3RydWN0b3IsIHlvdSBjYW4gc3BlY2lmeSBvbmUgb2ZcbiAqIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogPHVsPlxuICogPGxpPmFycmF5IC0gc3BlY2lmeSBhcnJheSBvZiBBU04xT2JqZWN0IHRvIHNldCBlbGVtZW50cyBvZiBjb250ZW50PC9saT5cbiAqIDxsaT5zb3J0ZmxhZyAtIGZsYWcgZm9yIHNvcnQgKGRlZmF1bHQ6IHRydWUpLiBBU04uMSBCRVIgaXMgbm90IHNvcnRlZCBpbiAnU0VUIE9GJy48L2xpPlxuICogPC91bD5cbiAqIE5PVEUxOiAncGFyYW1zJyBjYW4gYmUgb21pdHRlZC48YnIvPlxuICogTk9URTI6IHNvcnRmbGFnIGlzIHN1cHBvcnRlZCBzaW5jZSAxLjAuNS5cbiAqL1xuS0pVUi5hc24xLkRFUlNldCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICBLSlVSLmFzbjEuREVSU2V0LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJhbXMpO1xuICAgIHRoaXMuaFQgPSBcIjMxXCI7XG4gICAgdGhpcy5zb3J0RmxhZyA9IHRydWU7IC8vIGl0ZW0gc2hhbGwgYmUgc29ydGVkIG9ubHkgaW4gQVNOLjEgREVSXG4gICAgdGhpcy5nZXRGcmVzaFZhbHVlSGV4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYSA9IG5ldyBBcnJheSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXNuMUFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgYXNuMU9iaiA9IHRoaXMuYXNuMUFycmF5W2ldO1xuICAgICAgICAgICAgYS5wdXNoKGFzbjFPYmouZ2V0RW5jb2RlZEhleCgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zb3J0RmxhZyA9PSB0cnVlKVxuICAgICAgICAgICAgYS5zb3J0KCk7XG4gICAgICAgIHRoaXMuaFYgPSBhLmpvaW4oJycpO1xuICAgICAgICByZXR1cm4gdGhpcy5oVjtcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgcGFyYW1zICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMuc29ydGZsYWcgIT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgcGFyYW1zLnNvcnRmbGFnID09IGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5zb3J0RmxhZyA9IGZhbHNlO1xuICAgIH1cbn07XG5ZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSU2V0LCBLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkKTtcbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vKipcbiAqIGNsYXNzIGZvciBBU04uMSBERVIgVGFnZ2VkT2JqZWN0XG4gKiBAbmFtZSBLSlVSLmFzbjEuREVSVGFnZ2VkT2JqZWN0XG4gKiBAY2xhc3MgY2xhc3MgZm9yIEFTTi4xIERFUiBUYWdnZWRPYmplY3RcbiAqIEBleHRlbmRzIEtKVVIuYXNuMS5BU04xT2JqZWN0XG4gKiBAZGVzY3JpcHRpb25cbiAqIDxici8+XG4gKiBQYXJhbWV0ZXIgJ3RhZ05vTmV4JyBpcyBBU04uMSB0YWcoVCkgdmFsdWUgZm9yIHRoaXMgb2JqZWN0LlxuICogRm9yIGV4YW1wbGUsIGlmIHlvdSBmaW5kICdbMV0nIHRhZyBpbiBhIEFTTi4xIGR1bXAsXG4gKiAndGFnTm9IZXgnIHdpbGwgYmUgJ2ExJy5cbiAqIDxici8+XG4gKiBBcyBmb3Igb3B0aW9uYWwgYXJndW1lbnQgJ3BhcmFtcycgZm9yIGNvbnN0cnVjdG9yLCB5b3UgY2FuIHNwZWNpZnkgKkFOWSogb2ZcbiAqIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogPHVsPlxuICogPGxpPmV4cGxpY2l0IC0gc3BlY2lmeSB0cnVlIGlmIHRoaXMgaXMgZXhwbGljaXQgdGFnIG90aGVyd2lzZSBmYWxzZVxuICogICAgIChkZWZhdWx0IGlzICd0cnVlJykuPC9saT5cbiAqIDxsaT50YWcgLSBzcGVjaWZ5IHRhZyAoZGVmYXVsdCBpcyAnYTAnIHdoaWNoIG1lYW5zIFswXSk8L2xpPlxuICogPGxpPm9iaiAtIHNwZWNpZnkgQVNOMU9iamVjdCB3aGljaCBpcyB0YWdnZWQ8L2xpPlxuICogPC91bD5cbiAqIEBleGFtcGxlXG4gKiBkMSA9IG5ldyBLSlVSLmFzbjEuREVSVVRGOFN0cmluZyh7J3N0cic6J2EnfSk7XG4gKiBkMiA9IG5ldyBLSlVSLmFzbjEuREVSVGFnZ2VkT2JqZWN0KHsnb2JqJzogZDF9KTtcbiAqIGhleCA9IGQyLmdldEVuY29kZWRIZXgoKTtcbiAqL1xuS0pVUi5hc24xLkRFUlRhZ2dlZE9iamVjdCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICBLSlVSLmFzbjEuREVSVGFnZ2VkT2JqZWN0LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTtcbiAgICB0aGlzLmhUID0gXCJhMFwiO1xuICAgIHRoaXMuaFYgPSAnJztcbiAgICB0aGlzLmlzRXhwbGljaXQgPSB0cnVlO1xuICAgIHRoaXMuYXNuMU9iamVjdCA9IG51bGw7XG4gICAgLyoqXG4gICAgICogc2V0IHZhbHVlIGJ5IGFuIEFTTjFPYmplY3RcbiAgICAgKiBAbmFtZSBzZXRTdHJpbmdcbiAgICAgKiBAbWVtYmVyT2YgS0pVUi5hc24xLkRFUlRhZ2dlZE9iamVjdCNcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzRXhwbGljaXRGbGFnIGZsYWcgZm9yIGV4cGxpY2l0L2ltcGxpY2l0IHRhZ1xuICAgICAqIEBwYXJhbSB7SW50ZWdlcn0gdGFnTm9IZXggaGV4YWRlY2ltYWwgc3RyaW5nIG9mIEFTTi4xIHRhZ1xuICAgICAqIEBwYXJhbSB7QVNOMU9iamVjdH0gYXNuMU9iamVjdCBBU04uMSB0byBlbmNhcHN1bGF0ZVxuICAgICAqL1xuICAgIHRoaXMuc2V0QVNOMU9iamVjdCA9IGZ1bmN0aW9uIChpc0V4cGxpY2l0RmxhZywgdGFnTm9IZXgsIGFzbjFPYmplY3QpIHtcbiAgICAgICAgdGhpcy5oVCA9IHRhZ05vSGV4O1xuICAgICAgICB0aGlzLmlzRXhwbGljaXQgPSBpc0V4cGxpY2l0RmxhZztcbiAgICAgICAgdGhpcy5hc24xT2JqZWN0ID0gYXNuMU9iamVjdDtcbiAgICAgICAgaWYgKHRoaXMuaXNFeHBsaWNpdCkge1xuICAgICAgICAgICAgdGhpcy5oViA9IHRoaXMuYXNuMU9iamVjdC5nZXRFbmNvZGVkSGV4KCk7XG4gICAgICAgICAgICB0aGlzLmhUTFYgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5pc01vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaFYgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5oVExWID0gYXNuMU9iamVjdC5nZXRFbmNvZGVkSGV4KCk7XG4gICAgICAgICAgICB0aGlzLmhUTFYgPSB0aGlzLmhUTFYucmVwbGFjZSgvXi4uLywgdGFnTm9IZXgpO1xuICAgICAgICAgICAgdGhpcy5pc01vZGlmaWVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0RnJlc2hWYWx1ZUhleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaFY7XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHBhcmFtcyAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1zWyd0YWcnXSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aGlzLmhUID0gcGFyYW1zWyd0YWcnXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtc1snZXhwbGljaXQnXSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aGlzLmlzRXhwbGljaXQgPSBwYXJhbXNbJ2V4cGxpY2l0J107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXNbJ29iaiddICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRoaXMuYXNuMU9iamVjdCA9IHBhcmFtc1snb2JqJ107XG4gICAgICAgICAgICB0aGlzLnNldEFTTjFPYmplY3QodGhpcy5pc0V4cGxpY2l0LCB0aGlzLmhULCB0aGlzLmFzbjFPYmplY3QpO1xuICAgICAgICB9XG4gICAgfVxufTtcbllBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJUYWdnZWRPYmplY3QsIEtKVVIuYXNuMS5BU04xT2JqZWN0KTtcbiIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqIEBwcmVzZXJ2ZVxuXHQgKiBDb3VudGVyIGJsb2NrIG1vZGUgY29tcGF0aWJsZSB3aXRoICBEciBCcmlhbiBHbGFkbWFuIGZpbGVlbmMuY1xuXHQgKiBkZXJpdmVkIGZyb20gQ3J5cHRvSlMubW9kZS5DVFJcblx0ICogSmFuIEhydWJ5IGpocnVieS53ZWJAZ21haWwuY29tXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLkNUUkdsYWRtYW4gPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIENUUkdsYWRtYW4gPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdFx0ZnVuY3Rpb24gaW5jV29yZCh3b3JkKVxuXHRcdHtcblx0XHRcdGlmICgoKHdvcmQgPj4gMjQpICYgMHhmZikgPT09IDB4ZmYpIHsgLy9vdmVyZmxvd1xuXHRcdFx0dmFyIGIxID0gKHdvcmQgPj4gMTYpJjB4ZmY7XG5cdFx0XHR2YXIgYjIgPSAod29yZCA+PiA4KSYweGZmO1xuXHRcdFx0dmFyIGIzID0gd29yZCAmIDB4ZmY7XG5cblx0XHRcdGlmIChiMSA9PT0gMHhmZikgLy8gb3ZlcmZsb3cgYjFcblx0XHRcdHtcblx0XHRcdGIxID0gMDtcblx0XHRcdGlmIChiMiA9PT0gMHhmZilcblx0XHRcdHtcblx0XHRcdFx0YjIgPSAwO1xuXHRcdFx0XHRpZiAoYjMgPT09IDB4ZmYpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRiMyA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0KytiMztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHQrK2IyO1xuXHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0KytiMTtcblx0XHRcdH1cblxuXHRcdFx0d29yZCA9IDA7XG5cdFx0XHR3b3JkICs9IChiMSA8PCAxNik7XG5cdFx0XHR3b3JkICs9IChiMiA8PCA4KTtcblx0XHRcdHdvcmQgKz0gYjM7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHR3b3JkICs9ICgweDAxIDw8IDI0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB3b3JkO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGluY0NvdW50ZXIoY291bnRlcilcblx0XHR7XG5cdFx0XHRpZiAoKGNvdW50ZXJbMF0gPSBpbmNXb3JkKGNvdW50ZXJbMF0pKSA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0Ly8gZW5jcl9kYXRhIGluIGZpbGVlbmMuYyBmcm9tICBEciBCcmlhbiBHbGFkbWFuJ3MgY291bnRzIG9ubHkgd2l0aCBEV09SRCBqIDwgOFxuXHRcdFx0XHRjb3VudGVyWzFdID0gaW5jV29yZChjb3VudGVyWzFdKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjb3VudGVyO1xuXHRcdH1cblxuXHQgICAgdmFyIEVuY3J5cHRvciA9IENUUkdsYWRtYW4uRW5jcnlwdG9yID0gQ1RSR2xhZG1hbi5leHRlbmQoe1xuXHQgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjaXBoZXIgPSB0aGlzLl9jaXBoZXJcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IHRoaXMuX2l2O1xuXHQgICAgICAgICAgICB2YXIgY291bnRlciA9IHRoaXMuX2NvdW50ZXI7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgY291bnRlciA9IHRoaXMuX2NvdW50ZXIgPSBpdi5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIElWIGZvciBzdWJzZXF1ZW50IGJsb2Nrc1xuXHQgICAgICAgICAgICAgICAgdGhpcy5faXYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICAgIH1cblxuXHRcdFx0XHRpbmNDb3VudGVyKGNvdW50ZXIpO1xuXG5cdFx0XHRcdHZhciBrZXlzdHJlYW0gPSBjb3VudGVyLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKGtleXN0cmVhbSwgMCk7XG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBrZXlzdHJlYW1baV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgQ1RSR2xhZG1hbi5EZWNyeXB0b3IgPSBFbmNyeXB0b3I7XG5cblx0ICAgIHJldHVybiBDVFJHbGFkbWFuO1xuXHR9KCkpO1xuXG5cblxuXG5cdHJldHVybiBDcnlwdG9KUy5tb2RlLkNUUkdsYWRtYW47XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKiBAcHJlc2VydmVcblx0KGMpIDIwMTIgYnkgQ8OpZHJpYyBNZXNuaWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblx0UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG5cdCAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblx0ICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5cdFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblx0Ki9cblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBDb25zdGFudHMgdGFibGVcblx0ICAgIHZhciBfemwgPSBXb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICAwLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywgIDgsICA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuXHQgICAgICAgIDcsICA0LCAxMywgIDEsIDEwLCAgNiwgMTUsICAzLCAxMiwgIDAsICA5LCAgNSwgIDIsIDE0LCAxMSwgIDgsXG5cdCAgICAgICAgMywgMTAsIDE0LCAgNCwgIDksIDE1LCAgOCwgIDEsICAyLCAgNywgIDAsICA2LCAxMywgMTEsICA1LCAxMixcblx0ICAgICAgICAxLCAgOSwgMTEsIDEwLCAgMCwgIDgsIDEyLCAgNCwgMTMsICAzLCAgNywgMTUsIDE0LCAgNSwgIDYsICAyLFxuXHQgICAgICAgIDQsICAwLCAgNSwgIDksICA3LCAxMiwgIDIsIDEwLCAxNCwgIDEsICAzLCAgOCwgMTEsICA2LCAxNSwgMTNdKTtcblx0ICAgIHZhciBfenIgPSBXb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICA1LCAxNCwgIDcsICAwLCAgOSwgIDIsIDExLCAgNCwgMTMsICA2LCAxNSwgIDgsICAxLCAxMCwgIDMsIDEyLFxuXHQgICAgICAgIDYsIDExLCAgMywgIDcsICAwLCAxMywgIDUsIDEwLCAxNCwgMTUsICA4LCAxMiwgIDQsICA5LCAgMSwgIDIsXG5cdCAgICAgICAgMTUsICA1LCAgMSwgIDMsICA3LCAxNCwgIDYsICA5LCAxMSwgIDgsIDEyLCAgMiwgMTAsICAwLCAgNCwgMTMsXG5cdCAgICAgICAgOCwgIDYsICA0LCAgMSwgIDMsIDExLCAxNSwgIDAsICA1LCAxMiwgIDIsIDEzLCAgOSwgIDcsIDEwLCAxNCxcblx0ICAgICAgICAxMiwgMTUsIDEwLCAgNCwgIDEsICA1LCAgOCwgIDcsICA2LCAgMiwgMTMsIDE0LCAgMCwgIDMsICA5LCAxMV0pO1xuXHQgICAgdmFyIF9zbCA9IFdvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgICAxMSwgMTQsIDE1LCAxMiwgIDUsICA4LCAgNywgIDksIDExLCAxMywgMTQsIDE1LCAgNiwgIDcsICA5LCAgOCxcblx0ICAgICAgICA3LCA2LCAgIDgsIDEzLCAxMSwgIDksICA3LCAxNSwgIDcsIDEyLCAxNSwgIDksIDExLCAgNywgMTMsIDEyLFxuXHQgICAgICAgIDExLCAxMywgIDYsICA3LCAxNCwgIDksIDEzLCAxNSwgMTQsICA4LCAxMywgIDYsICA1LCAxMiwgIDcsICA1LFxuXHQgICAgICAgICAgMTEsIDEyLCAxNCwgMTUsIDE0LCAxNSwgIDksICA4LCAgOSwgMTQsICA1LCAgNiwgIDgsICA2LCAgNSwgMTIsXG5cdCAgICAgICAgOSwgMTUsICA1LCAxMSwgIDYsICA4LCAxMywgMTIsICA1LCAxMiwgMTMsIDE0LCAxMSwgIDgsICA1LCAgNiBdKTtcblx0ICAgIHZhciBfc3IgPSBXb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICA4LCAgOSwgIDksIDExLCAxMywgMTUsIDE1LCAgNSwgIDcsICA3LCAgOCwgMTEsIDE0LCAxNCwgMTIsICA2LFxuXHQgICAgICAgIDksIDEzLCAxNSwgIDcsIDEyLCAgOCwgIDksIDExLCAgNywgIDcsIDEyLCAgNywgIDYsIDE1LCAxMywgMTEsXG5cdCAgICAgICAgOSwgIDcsIDE1LCAxMSwgIDgsICA2LCAgNiwgMTQsIDEyLCAxMywgIDUsIDE0LCAxMywgMTMsICA3LCAgNSxcblx0ICAgICAgICAxNSwgIDUsICA4LCAxMSwgMTQsIDE0LCAgNiwgMTQsICA2LCAgOSwgMTIsICA5LCAxMiwgIDUsIDE1LCAgOCxcblx0ICAgICAgICA4LCAgNSwgMTIsICA5LCAxMiwgIDUsIDE0LCAgNiwgIDgsIDEzLCAgNiwgIDUsIDE1LCAxMywgMTEsIDExIF0pO1xuXG5cdCAgICB2YXIgX2hsID0gIFdvcmRBcnJheS5jcmVhdGUoWyAweDAwMDAwMDAwLCAweDVBODI3OTk5LCAweDZFRDlFQkExLCAweDhGMUJCQ0RDLCAweEE5NTNGRDRFXSk7XG5cdCAgICB2YXIgX2hyID0gIFdvcmRBcnJheS5jcmVhdGUoWyAweDUwQTI4QkU2LCAweDVDNEREMTI0LCAweDZENzAzRUYzLCAweDdBNkQ3NkU5LCAweDAwMDAwMDAwXSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogUklQRU1EMTYwIGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgUklQRU1EMTYwID0gQ19hbGdvLlJJUEVNRDE2MCA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggID0gV29yZEFycmF5LmNyZWF0ZShbMHg2NzQ1MjMwMSwgMHhFRkNEQUI4OSwgMHg5OEJBRENGRSwgMHgxMDMyNTQ3NiwgMHhDM0QyRTFGMF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblxuXHQgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIG9mZnNldF9pID0gb2Zmc2V0ICsgaTtcblx0ICAgICAgICAgICAgICAgIHZhciBNX29mZnNldF9pID0gTVtvZmZzZXRfaV07XG5cblx0ICAgICAgICAgICAgICAgIC8vIFN3YXBcblx0ICAgICAgICAgICAgICAgIE1bb2Zmc2V0X2ldID0gKFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE1fb2Zmc2V0X2kgPDwgOCkgIHwgKE1fb2Zmc2V0X2kgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTV9vZmZzZXRfaSA8PCAyNCkgfCAoTV9vZmZzZXRfaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBIICA9IHRoaXMuX2hhc2gud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBobCA9IF9obC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGhyID0gX2hyLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgemwgPSBfemwud29yZHM7XG5cdCAgICAgICAgICAgIHZhciB6ciA9IF96ci53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNsID0gX3NsLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc3IgPSBfc3Iud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgdmFyIGFsLCBibCwgY2wsIGRsLCBlbDtcblx0ICAgICAgICAgICAgdmFyIGFyLCBiciwgY3IsIGRyLCBlcjtcblxuXHQgICAgICAgICAgICBhciA9IGFsID0gSFswXTtcblx0ICAgICAgICAgICAgYnIgPSBibCA9IEhbMV07XG5cdCAgICAgICAgICAgIGNyID0gY2wgPSBIWzJdO1xuXHQgICAgICAgICAgICBkciA9IGRsID0gSFszXTtcblx0ICAgICAgICAgICAgZXIgPSBlbCA9IEhbNF07XG5cdCAgICAgICAgICAgIC8vIENvbXB1dGF0aW9uXG5cdCAgICAgICAgICAgIHZhciB0O1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDgwOyBpICs9IDEpIHtcblx0ICAgICAgICAgICAgICAgIHQgPSAoYWwgKyAgTVtvZmZzZXQremxbaV1dKXwwO1xuXHQgICAgICAgICAgICAgICAgaWYgKGk8MTYpe1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYxKGJsLGNsLGRsKSArIGhsWzBdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDMyKSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjIoYmwsY2wsZGwpICsgaGxbMV07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8NDgpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMyhibCxjbCxkbCkgKyBobFsyXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTw2NCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGY0KGJsLGNsLGRsKSArIGhsWzNdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHsvLyBpZiAoaTw4MCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGY1KGJsLGNsLGRsKSArIGhsWzRdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdCA9IHR8MDtcblx0ICAgICAgICAgICAgICAgIHQgPSAgcm90bCh0LHNsW2ldKTtcblx0ICAgICAgICAgICAgICAgIHQgPSAodCtlbCl8MDtcblx0ICAgICAgICAgICAgICAgIGFsID0gZWw7XG5cdCAgICAgICAgICAgICAgICBlbCA9IGRsO1xuXHQgICAgICAgICAgICAgICAgZGwgPSByb3RsKGNsLCAxMCk7XG5cdCAgICAgICAgICAgICAgICBjbCA9IGJsO1xuXHQgICAgICAgICAgICAgICAgYmwgPSB0O1xuXG5cdCAgICAgICAgICAgICAgICB0ID0gKGFyICsgTVtvZmZzZXQrenJbaV1dKXwwO1xuXHQgICAgICAgICAgICAgICAgaWYgKGk8MTYpe1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGY1KGJyLGNyLGRyKSArIGhyWzBdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDMyKSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjQoYnIsY3IsZHIpICsgaHJbMV07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8NDgpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMyhicixjcixkcikgKyBoclsyXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTw2NCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYyKGJyLGNyLGRyKSArIGhyWzNdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHsvLyBpZiAoaTw4MCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYxKGJyLGNyLGRyKSArIGhyWzRdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdCA9IHR8MDtcblx0ICAgICAgICAgICAgICAgIHQgPSAgcm90bCh0LHNyW2ldKSA7XG5cdCAgICAgICAgICAgICAgICB0ID0gKHQrZXIpfDA7XG5cdCAgICAgICAgICAgICAgICBhciA9IGVyO1xuXHQgICAgICAgICAgICAgICAgZXIgPSBkcjtcblx0ICAgICAgICAgICAgICAgIGRyID0gcm90bChjciwgMTApO1xuXHQgICAgICAgICAgICAgICAgY3IgPSBicjtcblx0ICAgICAgICAgICAgICAgIGJyID0gdDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICB0ICAgID0gKEhbMV0gKyBjbCArIGRyKXwwO1xuXHQgICAgICAgICAgICBIWzFdID0gKEhbMl0gKyBkbCArIGVyKXwwO1xuXHQgICAgICAgICAgICBIWzJdID0gKEhbM10gKyBlbCArIGFyKXwwO1xuXHQgICAgICAgICAgICBIWzNdID0gKEhbNF0gKyBhbCArIGJyKXwwO1xuXHQgICAgICAgICAgICBIWzRdID0gKEhbMF0gKyBibCArIGNyKXwwO1xuXHQgICAgICAgICAgICBIWzBdID0gIHQ7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSAoXG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsIDw8IDgpICB8IChuQml0c1RvdGFsID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgKCgobkJpdHNUb3RhbCA8PCAyNCkgfCAobkJpdHNUb3RhbCA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICk7XG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSAoZGF0YVdvcmRzLmxlbmd0aCArIDEpICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5faGFzaDtcblx0ICAgICAgICAgICAgdmFyIEggPSBoYXNoLndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgdmFyIEhfaSA9IEhbaV07XG5cblx0ICAgICAgICAgICAgICAgIC8vIFN3YXBcblx0ICAgICAgICAgICAgICAgIEhbaV0gPSAoKChIX2kgPDwgOCkgIHwgKEhfaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAgICAoKChIX2kgPDwgMjQpIHwgKEhfaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIGZpbmFsIGNvbXB1dGVkIGhhc2hcblx0ICAgICAgICAgICAgcmV0dXJuIGhhc2g7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5faGFzaCA9IHRoaXMuX2hhc2guY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblxuXHQgICAgZnVuY3Rpb24gZjEoeCwgeSwgeikge1xuXHQgICAgICAgIHJldHVybiAoKHgpIF4gKHkpIF4gKHopKTtcblxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBmMih4LCB5LCB6KSB7XG5cdCAgICAgICAgcmV0dXJuICgoKHgpJih5KSkgfCAoKH54KSYoeikpKTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZjMoeCwgeSwgeikge1xuXHQgICAgICAgIHJldHVybiAoKCh4KSB8ICh+KHkpKSkgXiAoeikpO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBmNCh4LCB5LCB6KSB7XG5cdCAgICAgICAgcmV0dXJuICgoKHgpICYgKHopKSB8ICgoeSkmKH4oeikpKSk7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGY1KHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCh4KSBeICgoeSkgfCh+KHopKSkpO1xuXG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIHJvdGwoeCxuKSB7XG5cdCAgICAgICAgcmV0dXJuICh4PDxuKSB8ICh4Pj4+KDMyLW4pKTtcblx0ICAgIH1cblxuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuUklQRU1EMTYwKCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5SSVBFTUQxNjAod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5SSVBFTUQxNjAgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihSSVBFTUQxNjApO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1JJUEVNRDE2MChtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNSSVBFTUQxNjAgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoUklQRU1EMTYwKTtcblx0fShNYXRoKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUklQRU1EMTYwO1xuXG59KSk7IiwidmFyIGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsXCJkZWZhdWx0XCIpP2UuZGVmYXVsdDplfWZ1bmN0aW9uIG4oZSl7dmFyIHQ9e2V4cG9ydHM6e319O3JldHVybiBlKHQsdC5leHBvcnRzKSx0LmV4cG9ydHN9dmFyIHIsbyxpPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLk1hdGg9PU1hdGgmJmV9LGE9aShcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyl8fGkoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8aShcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZil8fGkoXCJvYmplY3RcIj09dHlwZW9mIGUmJmUpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksdT1GdW5jdGlvbi5wcm90b3R5cGUscz11LmFwcGx5LGw9dS5iaW5kLGM9dS5jYWxsLGY9XCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuYXBwbHl8fChsP2MuYmluZChzKTpmdW5jdGlvbigpe3JldHVybiBjLmFwcGx5KHMsYXJndW1lbnRzKX0pLGQ9RnVuY3Rpb24ucHJvdG90eXBlLHA9ZC5iaW5kLGg9ZC5jYWxsLGc9cCYmcC5iaW5kKGgpLHY9cD9mdW5jdGlvbihlKXtyZXR1cm4gZSYmZyhoLGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmZnVuY3Rpb24oKXtyZXR1cm4gaC5hcHBseShlLGFyZ3VtZW50cyl9fSx5PWZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9LG09ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiEhZSgpfWNhdGNoKGUpe3JldHVybiEwfX0sYj0hbSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpLHc9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsRT13LmJpbmQ/dy5iaW5kKHcpOmZ1bmN0aW9uKCl7cmV0dXJuIHcuYXBwbHkodyxhcmd1bWVudHMpfSxEPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLFM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix4PVMmJiFELmNhbGwoezE6Mn0sMSk/ZnVuY3Rpb24oZSl7dmFyIHQ9Uyh0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTpELEM9e2Y6eH0sQT1mdW5jdGlvbihlLHQpe3JldHVybntlbnVtZXJhYmxlOiEoMSZlKSxjb25maWd1cmFibGU6ISgyJmUpLHdyaXRhYmxlOiEoNCZlKSx2YWx1ZTp0fX0sTz12KHt9LnRvU3RyaW5nKSxrPXYoXCJcIi5zbGljZSksQj1mdW5jdGlvbihlKXtyZXR1cm4gayhPKGUpLDgsLTEpfSxGPWEuT2JqZWN0LFQ9dihcIlwiLnNwbGl0KSxfPW0oKGZ1bmN0aW9uKCl7cmV0dXJuIUYoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKGUpe3JldHVyblwiU3RyaW5nXCI9PUIoZSk/VChlLFwiXCIpOkYoZSl9OkYsUD1hLlR5cGVFcnJvcixqPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgUChcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiK2UpO3JldHVybiBlfSxOPWZ1bmN0aW9uKGUpe3JldHVybiBfKGooZSkpfSxJPWZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlP251bGwhPT1lOnkoZSl9LEw9e30sUj1mdW5jdGlvbihlKXtyZXR1cm4geShlKT9lOnZvaWQgMH0sTT1mdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/UihMW2VdKXx8UihhW2VdKTpMW2VdJiZMW2VdW3RdfHxhW2VdJiZhW2VdW3RdfSx6PXYoe30uaXNQcm90b3R5cGVPZiksJD1NKFwibmF2aWdhdG9yXCIsXCJ1c2VyQWdlbnRcIil8fFwiXCIsSD1hLnByb2Nlc3MsVj1hLkRlbm8sVT1IJiZILnZlcnNpb25zfHxWJiZWLnZlcnNpb24sVz1VJiZVLnY4O1cmJihvPShyPVcuc3BsaXQoXCIuXCIpKVswXT4wJiZyWzBdPDQ/MTorKHJbMF0rclsxXSkpLCFvJiYkJiYoIShyPSQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKSl8fHJbMV0+PTc0KSYmKHI9JC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLykpJiYobz0rclsxXSk7dmFyIEcscT1vLEs9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhbSgoZnVuY3Rpb24oKXt2YXIgZT1TeW1ib2woKTtyZXR1cm4hU3RyaW5nKGUpfHwhKE9iamVjdChlKWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZxJiZxPDQxfSkpLFk9SyYmIVN5bWJvbC5zaGFtJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yLFg9YS5PYmplY3QsWj1ZP2Z1bmN0aW9uKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfTpmdW5jdGlvbihlKXt2YXIgdD1NKFwiU3ltYm9sXCIpO3JldHVybiB5KHQpJiZ6KHQucHJvdG90eXBlLFgoZSkpfSxKPWEuU3RyaW5nLFE9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBKKGUpfWNhdGNoKGUpe3JldHVyblwiT2JqZWN0XCJ9fSxlZT1hLlR5cGVFcnJvcix0ZT1mdW5jdGlvbihlKXtpZih5KGUpKXJldHVybiBlO3Rocm93IGVlKFEoZSkrXCIgaXMgbm90IGEgZnVuY3Rpb25cIil9LG5lPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVt0XTtyZXR1cm4gbnVsbD09bj92b2lkIDA6dGUobil9LHJlPWEuVHlwZUVycm9yLG9lPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxpZT1hW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdfHxmdW5jdGlvbihlLHQpe3RyeXtvZShhLGUse3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9Y2F0Y2gobil7YVtlXT10fXJldHVybiB0fShcIl9fY29yZS1qc19zaGFyZWRfX1wiLHt9KSxhZT1uKChmdW5jdGlvbihlKXsoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGllW2VdfHwoaWVbZV09dm9pZCAwIT09dD90Ont9KX0pKFwidmVyc2lvbnNcIixbXSkucHVzaCh7dmVyc2lvbjpcIjMuMTkuM1wiLG1vZGU6XCJwdXJlXCIsY29weXJpZ2h0OlwiwqkgMjAyMSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KVwifSl9KSksdWU9YS5PYmplY3Qsc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHVlKGooZSkpfSxsZT12KHt9Lmhhc093blByb3BlcnR5KSxjZT1PYmplY3QuaGFzT3dufHxmdW5jdGlvbihlLHQpe3JldHVybiBsZShzZShlKSx0KX0sZmU9MCxkZT1NYXRoLnJhbmRvbSgpLHBlPXYoMS4udG9TdHJpbmcpLGhlPWZ1bmN0aW9uKGUpe3JldHVyblwiU3ltYm9sKFwiKyh2b2lkIDA9PT1lP1wiXCI6ZSkrXCIpX1wiK3BlKCsrZmUrZGUsMzYpfSxnZT1hZShcIndrc1wiKSx2ZT1hLlN5bWJvbCx5ZT12ZSYmdmUuZm9yLG1lPVk/dmU6dmUmJnZlLndpdGhvdXRTZXR0ZXJ8fGhlLGJlPWZ1bmN0aW9uKGUpe2lmKCFjZShnZSxlKXx8IUsmJlwic3RyaW5nXCIhPXR5cGVvZiBnZVtlXSl7dmFyIHQ9XCJTeW1ib2wuXCIrZTtLJiZjZSh2ZSxlKT9nZVtlXT12ZVtlXTpnZVtlXT1ZJiZ5ZT95ZSh0KTptZSh0KX1yZXR1cm4gZ2VbZV19LHdlPWEuVHlwZUVycm9yLEVlPWJlKFwidG9QcmltaXRpdmVcIiksRGU9ZnVuY3Rpb24oZSx0KXtpZighSShlKXx8WihlKSlyZXR1cm4gZTt2YXIgbixyPW5lKGUsRWUpO2lmKHIpe2lmKHZvaWQgMD09PXQmJih0PVwiZGVmYXVsdFwiKSxuPUUocixlLHQpLCFJKG4pfHxaKG4pKXJldHVybiBuO3Rocm93IHdlKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfXJldHVybiB2b2lkIDA9PT10JiYodD1cIm51bWJlclwiKSxmdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYoXCJzdHJpbmdcIj09PXQmJnkobj1lLnRvU3RyaW5nKSYmIUkocj1FKG4sZSkpKXJldHVybiByO2lmKHkobj1lLnZhbHVlT2YpJiYhSShyPUUobixlKSkpcmV0dXJuIHI7aWYoXCJzdHJpbmdcIiE9PXQmJnkobj1lLnRvU3RyaW5nKSYmIUkocj1FKG4sZSkpKXJldHVybiByO3Rocm93IHJlKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfShlLHQpfSxTZT1mdW5jdGlvbihlKXt2YXIgdD1EZShlLFwic3RyaW5nXCIpO3JldHVybiBaKHQpP3Q6dCtcIlwifSx4ZT1hLmRvY3VtZW50LENlPUkoeGUpJiZJKHhlLmNyZWF0ZUVsZW1lbnQpLEFlPWZ1bmN0aW9uKGUpe3JldHVybiBDZT94ZS5jcmVhdGVFbGVtZW50KGUpOnt9fSxPZT0hYiYmIW0oKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBZShcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKSxrZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEJlPWI/a2U6ZnVuY3Rpb24oZSx0KXtpZihlPU4oZSksdD1TZSh0KSxPZSl0cnl7cmV0dXJuIGtlKGUsdCl9Y2F0Y2goZSl7fWlmKGNlKGUsdCkpcmV0dXJuIEEoIUUoQy5mLGUsdCksZVt0XSl9LEZlPXtmOkJlfSxUZT0vI3xcXC5wcm90b3R5cGVcXC4vLF9lPWZ1bmN0aW9uKGUsdCl7dmFyIG49amVbUGUoZSldO3JldHVybiBuPT1JZXx8biE9TmUmJih5KHQpP20odCk6ISF0KX0sUGU9X2Uubm9ybWFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZShUZSxcIi5cIikudG9Mb3dlckNhc2UoKX0samU9X2UuZGF0YT17fSxOZT1fZS5OQVRJVkU9XCJOXCIsSWU9X2UuUE9MWUZJTEw9XCJQXCIsTGU9X2UsUmU9dih2LmJpbmQpLE1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRlKGUpLHZvaWQgMD09PXQ/ZTpSZT9SZShlLHQpOmZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX0semU9YS5TdHJpbmcsJGU9YS5UeXBlRXJyb3IsSGU9ZnVuY3Rpb24oZSl7aWYoSShlKSlyZXR1cm4gZTt0aHJvdyAkZSh6ZShlKStcIiBpcyBub3QgYW4gb2JqZWN0XCIpfSxWZT1hLlR5cGVFcnJvcixVZT1PYmplY3QuZGVmaW5lUHJvcGVydHksV2U9Yj9VZTpmdW5jdGlvbihlLHQsbil7aWYoSGUoZSksdD1TZSh0KSxIZShuKSxPZSl0cnl7cmV0dXJuIFVlKGUsdCxuKX1jYXRjaChlKXt9aWYoXCJnZXRcImluIG58fFwic2V0XCJpbiBuKXRocm93IFZlKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWRcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gbiYmKGVbdF09bi52YWx1ZSksZX0sR2U9e2Y6V2V9LHFlPWI/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBHZS5mKGUsdCxBKDEsbikpfTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbdF09bixlfSxLZT1GZS5mLFllPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKG4scixvKXtpZih0aGlzIGluc3RhbmNlb2YgdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IGU7Y2FzZSAxOnJldHVybiBuZXcgZShuKTtjYXNlIDI6cmV0dXJuIG5ldyBlKG4scil9cmV0dXJuIG5ldyBlKG4scixvKX1yZXR1cm4gZihlLHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIHQucHJvdG90eXBlPWUucHJvdG90eXBlLHR9LFhlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGksdSxzLGwsYyxmPWUudGFyZ2V0LGQ9ZS5nbG9iYWwscD1lLnN0YXQsaD1lLnByb3RvLGc9ZD9hOnA/YVtmXTooYVtmXXx8e30pLnByb3RvdHlwZSxtPWQ/TDpMW2ZdfHxxZShMLGYse30pW2ZdLGI9bS5wcm90b3R5cGU7Zm9yKG8gaW4gdCluPSFMZShkP286ZisocD9cIi5cIjpcIiNcIikrbyxlLmZvcmNlZCkmJmcmJmNlKGcsbyksdT1tW29dLG4mJihzPWUubm9UYXJnZXRHZXQ/KGM9S2UoZyxvKSkmJmMudmFsdWU6Z1tvXSksaT1uJiZzP3M6dFtvXSxuJiZ0eXBlb2YgdT09dHlwZW9mIGl8fChsPWUuYmluZCYmbj9NZShpLGEpOmUud3JhcCYmbj9ZZShpKTpoJiZ5KGkpP3YoaSk6aSwoZS5zaGFtfHxpJiZpLnNoYW18fHUmJnUuc2hhbSkmJnFlKGwsXCJzaGFtXCIsITApLHFlKG0sbyxsKSxoJiYoY2UoTCxyPWYrXCJQcm90b3R5cGVcIil8fHFlKEwscix7fSkscWUoTFtyXSxvLGkpLGUucmVhbCYmYiYmIWJbb10mJnFlKGIsbyxpKSkpfSxaZT1hZShcImtleXNcIiksSmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFplW2VdfHwoWmVbZV09aGUoZSkpfSxRZT0hbSgoZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgZSkhPT1lLnByb3RvdHlwZX0pKSxldD1KZShcIklFX1BST1RPXCIpLHR0PWEuT2JqZWN0LG50PXR0LnByb3RvdHlwZSxydD1RZT90dC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXt2YXIgdD1zZShlKTtpZihjZSh0LGV0KSlyZXR1cm4gdFtldF07dmFyIG49dC5jb25zdHJ1Y3RvcjtyZXR1cm4geShuKSYmdCBpbnN0YW5jZW9mIG4/bi5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIHR0P250Om51bGx9LG90PWEuU3RyaW5nLGl0PWEuVHlwZUVycm9yLGF0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8KFwiX19wcm90b19fXCJpbnt9P2Z1bmN0aW9uKCl7dmFyIGUsdD0hMSxuPXt9O3RyeXsoZT12KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSxcIl9fcHJvdG9fX1wiKS5zZXQpKShuLFtdKSx0PW4gaW5zdGFuY2VvZiBBcnJheX1jYXRjaChlKXt9cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIEhlKG4pLGZ1bmN0aW9uKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlfHx5KGUpKXJldHVybiBlO3Rocm93IGl0KFwiQ2FuJ3Qgc2V0IFwiK290KGUpK1wiIGFzIGEgcHJvdG90eXBlXCIpfShyKSx0P2UobixyKTpuLl9fcHJvdG9fXz1yLG59fSgpOnZvaWQgMCksdXQ9TWF0aC5jZWlsLHN0PU1hdGguZmxvb3IsbHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9K2U7cmV0dXJuIHQhPXR8fDA9PT10PzA6KHQ+MD9zdDp1dCkodCl9LGN0PU1hdGgubWF4LGZ0PU1hdGgubWluLGR0PWZ1bmN0aW9uKGUsdCl7dmFyIG49bHQoZSk7cmV0dXJuIG48MD9jdChuK3QsMCk6ZnQobix0KX0scHQ9TWF0aC5taW4saHQ9ZnVuY3Rpb24oZSl7cmV0dXJuKHQ9ZS5sZW5ndGgpPjA/cHQobHQodCksOTAwNzE5OTI1NDc0MDk5MSk6MDt2YXIgdH0sZ3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXt2YXIgbyxpPU4odCksYT1odChpKSx1PWR0KHIsYSk7aWYoZSYmbiE9bil7Zm9yKDthPnU7KWlmKChvPWlbdSsrXSkhPW8pcmV0dXJuITB9ZWxzZSBmb3IoO2E+dTt1KyspaWYoKGV8fHUgaW4gaSkmJmlbdV09PT1uKXJldHVybiBlfHx1fHwwO3JldHVybiFlJiYtMX19LHZ0PXtpbmNsdWRlczpndCghMCksaW5kZXhPZjpndCghMSl9LHl0PXt9LG10PXZ0LmluZGV4T2YsYnQ9dihbXS5wdXNoKSx3dD1mdW5jdGlvbihlLHQpe3ZhciBuLHI9TihlKSxvPTAsaT1bXTtmb3IobiBpbiByKSFjZSh5dCxuKSYmY2UocixuKSYmYnQoaSxuKTtmb3IoO3QubGVuZ3RoPm87KWNlKHIsbj10W28rK10pJiYofm10KGksbil8fGJ0KGksbikpO3JldHVybiBpfSxFdD1bXCJjb25zdHJ1Y3RvclwiLFwiaGFzT3duUHJvcGVydHlcIixcImlzUHJvdG90eXBlT2ZcIixcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsXCJ0b0xvY2FsZVN0cmluZ1wiLFwidG9TdHJpbmdcIixcInZhbHVlT2ZcIl0sRHQ9RXQuY29uY2F0KFwibGVuZ3RoXCIsXCJwcm90b3R5cGVcIiksU3Q9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3JldHVybiB3dChlLER0KX0seHQ9e2Y6U3R9LEN0PXtmOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LEF0PXYoW10uY29uY2F0KSxPdD1NKFwiUmVmbGVjdFwiLFwib3duS2V5c1wiKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9eHQuZihIZShlKSksbj1DdC5mO3JldHVybiBuP0F0KHQsbihlKSk6dH0sa3Q9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3JldHVybiB3dChlLEV0KX0sQnQ9Yj9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe0hlKGUpO2Zvcih2YXIgbixyPU4odCksbz1rdCh0KSxpPW8ubGVuZ3RoLGE9MDtpPmE7KUdlLmYoZSxuPW9bYSsrXSxyW25dKTtyZXR1cm4gZX0sRnQ9TShcImRvY3VtZW50XCIsXCJkb2N1bWVudEVsZW1lbnRcIiksVHQ9SmUoXCJJRV9QUk9UT1wiKSxfdD1mdW5jdGlvbigpe30sUHQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCI8c2NyaXB0PlwiK2UrXCI8XFwvc2NyaXB0PlwifSxqdD1mdW5jdGlvbihlKXtlLndyaXRlKFB0KFwiXCIpKSxlLmNsb3NlKCk7dmFyIHQ9ZS5wYXJlbnRXaW5kb3cuT2JqZWN0O3JldHVybiBlPW51bGwsdH0sTnQ9ZnVuY3Rpb24oKXt0cnl7Rz1uZXcgQWN0aXZlWE9iamVjdChcImh0bWxmaWxlXCIpfWNhdGNoKGUpe312YXIgZSx0O050PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5kb21haW4mJkc/anQoRyk6KCh0PUFlKFwiaWZyYW1lXCIpKS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLEZ0LmFwcGVuZENoaWxkKHQpLHQuc3JjPVN0cmluZyhcImphdmFzY3JpcHQ6XCIpLChlPXQuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLGUud3JpdGUoUHQoXCJkb2N1bWVudC5GPU9iamVjdFwiKSksZS5jbG9zZSgpLGUuRik6anQoRyk7Zm9yKHZhciBuPUV0Lmxlbmd0aDtuLS07KWRlbGV0ZSBOdC5wcm90b3R5cGVbRXRbbl1dO3JldHVybiBOdCgpfTt5dFtUdF09ITA7dmFyIEl0PU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT1lPyhfdC5wcm90b3R5cGU9SGUoZSksbj1uZXcgX3QsX3QucHJvdG90eXBlPW51bGwsbltUdF09ZSk6bj1OdCgpLHZvaWQgMD09PXQ/bjpCdChuLHQpfSxMdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9U2UodCk7ciBpbiBlP0dlLmYoZSxyLEEoMCxuKSk6ZVtyXT1ufSxSdD1hLkFycmF5LE10PU1hdGgubWF4LHp0PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9aHQoZSksbz1kdCh0LHIpLGk9ZHQodm9pZCAwPT09bj9yOm4sciksYT1SdChNdChpLW8sMCkpLHU9MDtvPGk7bysrLHUrKylMdChhLHUsZVtvXSk7cmV0dXJuIGEubGVuZ3RoPXUsYX0sJHQ9dihcIlwiLnJlcGxhY2UpLEh0PXYoXCJcIi5zcGxpdCksVnQ9dihbXS5qb2luKSxVdD1TdHJpbmcoRXJyb3IoXCJ6eGNhc2RcIikuc3RhY2spLFd0PS9cXG5cXHMqYXQgW146XSo6W15cXG5dKi8sR3Q9V3QudGVzdChVdCkscXQ9L0BbXlxcbl0qXFxuLy50ZXN0KFV0KSYmIS96eGNhc2QvLnRlc3QoVXQpLEt0PWZ1bmN0aW9uKGUsdCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIGU7aWYoR3QpZm9yKDt0LS07KWU9JHQoZSxXdCxcIlwiKTtlbHNlIGlmKHF0KXJldHVybiBWdCh6dChIdChlLFwiXFxuXCIpLHQpLFwiXFxuXCIpO3JldHVybiBlfSxZdD1mdW5jdGlvbihlLHQpe0kodCkmJlwiY2F1c2VcImluIHQmJnFlKGUsXCJjYXVzZVwiLHQuY2F1c2UpfSxYdD17fSxadD1iZShcIml0ZXJhdG9yXCIpLEp0PUFycmF5LnByb3RvdHlwZSxRdD17fTtRdFtiZShcInRvU3RyaW5nVGFnXCIpXT1cInpcIjt2YXIgZW49XCJbb2JqZWN0IHpdXCI9PT1TdHJpbmcoUXQpLHRuPWJlKFwidG9TdHJpbmdUYWdcIiksbm49YS5PYmplY3Qscm49XCJBcmd1bWVudHNcIj09QihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpLG9uPWVuP0I6ZnVuY3Rpb24oZSl7dmFyIHQsbixyO3JldHVybiB2b2lkIDA9PT1lP1wiVW5kZWZpbmVkXCI6bnVsbD09PWU/XCJOdWxsXCI6XCJzdHJpbmdcIj09dHlwZW9mKG49ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGVbdF19Y2F0Y2goZSl7fX0odD1ubihlKSx0bikpP246cm4/Qih0KTpcIk9iamVjdFwiPT0ocj1CKHQpKSYmeSh0LmNhbGxlZSk/XCJBcmd1bWVudHNcIjpyfSxhbj1iZShcIml0ZXJhdG9yXCIpLHVuPWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpcmV0dXJuIG5lKGUsYW4pfHxuZShlLFwiQEBpdGVyYXRvclwiKXx8WHRbb24oZSldfSxzbj1hLlR5cGVFcnJvcixsbj1mdW5jdGlvbihlLHQsbil7dmFyIHIsbztIZShlKTt0cnl7aWYoIShyPW5lKGUsXCJyZXR1cm5cIikpKXtpZihcInRocm93XCI9PT10KXRocm93IG47cmV0dXJuIG59cj1FKHIsZSl9Y2F0Y2goZSl7bz0hMCxyPWV9aWYoXCJ0aHJvd1wiPT09dCl0aHJvdyBuO2lmKG8pdGhyb3cgcjtyZXR1cm4gSGUociksbn0sY249YS5UeXBlRXJyb3IsZm49ZnVuY3Rpb24oZSx0KXt0aGlzLnN0b3BwZWQ9ZSx0aGlzLnJlc3VsdD10fSxkbj1mbi5wcm90b3R5cGUscG49ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saSxhLHUscyxsLGM9biYmbi50aGF0LGY9ISghbnx8IW4uQVNfRU5UUklFUyksZD0hKCFufHwhbi5JU19JVEVSQVRPUikscD0hKCFufHwhbi5JTlRFUlJVUFRFRCksaD1NZSh0LGMpLGc9ZnVuY3Rpb24oZSl7cmV0dXJuIHImJmxuKHIsXCJub3JtYWxcIixlKSxuZXcgZm4oITAsZSl9LHY9ZnVuY3Rpb24oZSl7cmV0dXJuIGY/KEhlKGUpLHA/aChlWzBdLGVbMV0sZyk6aChlWzBdLGVbMV0pKTpwP2goZSxnKTpoKGUpfTtpZihkKXI9ZTtlbHNle2lmKCEobz11bihlKSkpdGhyb3cgY24oUShlKStcIiBpcyBub3QgaXRlcmFibGVcIik7aWYoZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihYdC5BcnJheT09PWV8fEp0W1p0XT09PWUpfShvKSl7Zm9yKGk9MCxhPWh0KGUpO2E+aTtpKyspaWYoKHU9dihlW2ldKSkmJnooZG4sdSkpcmV0dXJuIHU7cmV0dXJuIG5ldyBmbighMSl9cj1mdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mj91bihlKTp0O2lmKHRlKG4pKXJldHVybiBIZShFKG4sZSkpO3Rocm93IHNuKFEoZSkrXCIgaXMgbm90IGl0ZXJhYmxlXCIpfShlLG8pfWZvcihzPXIubmV4dDshKGw9RShzLHIpKS5kb25lOyl7dHJ5e3U9dihsLnZhbHVlKX1jYXRjaChlKXtsbihyLFwidGhyb3dcIixlKX1pZihcIm9iamVjdFwiPT10eXBlb2YgdSYmdSYmeihkbix1KSlyZXR1cm4gdX1yZXR1cm4gbmV3IGZuKCExKX0saG49YS5TdHJpbmcsZ249ZnVuY3Rpb24oZSl7aWYoXCJTeW1ib2xcIj09PW9uKGUpKXRocm93IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nXCIpO3JldHVybiBobihlKX0sdm49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09ZT9hcmd1bWVudHMubGVuZ3RoPDI/XCJcIjp0OmduKGUpfSx5bj0hbSgoZnVuY3Rpb24oKXt2YXIgZT1FcnJvcihcImFcIik7cmV0dXJuIShcInN0YWNrXCJpbiBlKXx8KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwic3RhY2tcIixBKDEsNykpLDchPT1lLnN0YWNrKX0pKSxtbj1iZShcInRvU3RyaW5nVGFnXCIpLGJuPWEuRXJyb3Isd249W10ucHVzaCxFbj1mdW5jdGlvbihlLHQpe3ZhciBuLHI9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsbz16KERuLHRoaXMpO2F0P249YXQobmV3IGJuKHZvaWQgMCksbz9ydCh0aGlzKTpEbik6KG49bz90aGlzOkl0KERuKSxxZShuLG1uLFwiRXJyb3JcIikpLHFlKG4sXCJtZXNzYWdlXCIsdm4odCxcIlwiKSkseW4mJnFlKG4sXCJzdGFja1wiLEt0KG4uc3RhY2ssMSkpLFl0KG4scik7dmFyIGk9W107cmV0dXJuIHBuKGUsd24se3RoYXQ6aX0pLHFlKG4sXCJlcnJvcnNcIixpKSxufTthdD9hdChFbixibik6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49T3QodCkscj1HZS5mLG89RmUuZixpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07Y2UoZSxhKXx8cihlLGEsbyh0LGEpKX19KEVuLGJuKTt2YXIgRG49RW4ucHJvdG90eXBlPUl0KGJuLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6QSgxLEVuKSxtZXNzYWdlOkEoMSxcIlwiKSxuYW1lOkEoMSxcIkFnZ3JlZ2F0ZUVycm9yXCIpfSk7WGUoe2dsb2JhbDohMH0se0FnZ3JlZ2F0ZUVycm9yOkVufSk7dmFyIFNuPXYoRnVuY3Rpb24udG9TdHJpbmcpO3koaWUuaW5zcGVjdFNvdXJjZSl8fChpZS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBTbihlKX0pO3ZhciB4bixDbixBbixPbj1pZS5pbnNwZWN0U291cmNlLGtuPWEuV2Vha01hcCxCbj15KGtuKSYmL25hdGl2ZSBjb2RlLy50ZXN0KE9uKGtuKSksRm49YS5UeXBlRXJyb3IsVG49YS5XZWFrTWFwO2lmKEJufHxpZS5zdGF0ZSl7dmFyIF9uPWllLnN0YXRlfHwoaWUuc3RhdGU9bmV3IFRuKSxQbj12KF9uLmdldCksam49dihfbi5oYXMpLE5uPXYoX24uc2V0KTt4bj1mdW5jdGlvbihlLHQpe2lmKGpuKF9uLGUpKXRocm93IG5ldyBGbihcIk9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkXCIpO3JldHVybiB0LmZhY2FkZT1lLE5uKF9uLGUsdCksdH0sQ249ZnVuY3Rpb24oZSl7cmV0dXJuIFBuKF9uLGUpfHx7fX0sQW49ZnVuY3Rpb24oZSl7cmV0dXJuIGpuKF9uLGUpfX1lbHNle3ZhciBJbj1KZShcInN0YXRlXCIpO3l0W0luXT0hMCx4bj1mdW5jdGlvbihlLHQpe2lmKGNlKGUsSW4pKXRocm93IG5ldyBGbihcIk9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkXCIpO3JldHVybiB0LmZhY2FkZT1lLHFlKGUsSW4sdCksdH0sQ249ZnVuY3Rpb24oZSl7cmV0dXJuIGNlKGUsSW4pP2VbSW5dOnt9fSxBbj1mdW5jdGlvbihlKXtyZXR1cm4gY2UoZSxJbil9fXZhciBMbixSbixNbix6bj17c2V0OnhuLGdldDpDbixoYXM6QW4sZW5mb3JjZTpmdW5jdGlvbihlKXtyZXR1cm4gQW4oZSk/Q24oZSk6eG4oZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG47aWYoIUkodCl8fChuPUNuKHQpKS50eXBlIT09ZSl0aHJvdyBGbihcIkluY29tcGF0aWJsZSByZWNlaXZlciwgXCIrZStcIiByZXF1aXJlZFwiKTtyZXR1cm4gbn19fSwkbj1GdW5jdGlvbi5wcm90b3R5cGUsSG49YiYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixWbj1jZSgkbixcIm5hbWVcIiksVW49e0VYSVNUUzpWbixQUk9QRVI6Vm4mJlwic29tZXRoaW5nXCI9PT1mdW5jdGlvbigpe30ubmFtZSxDT05GSUdVUkFCTEU6Vm4mJighYnx8YiYmSG4oJG4sXCJuYW1lXCIpLmNvbmZpZ3VyYWJsZSl9LFduPWZ1bmN0aW9uKGUsdCxuLHIpe3ImJnIuZW51bWVyYWJsZT9lW3RdPW46cWUoZSx0LG4pfSxHbj1iZShcIml0ZXJhdG9yXCIpLHFuPSExO1tdLmtleXMmJihcIm5leHRcImluKE1uPVtdLmtleXMoKSk/KFJuPXJ0KHJ0KE1uKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKExuPVJuKTpxbj0hMCk7dmFyIEtuPW51bGw9PUxufHxtKChmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBMbltHbl0uY2FsbChlKSE9PWV9KSk7TG49S24/e306SXQoTG4pLHkoTG5bR25dKXx8V24oTG4sR24sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIFluPXtJdGVyYXRvclByb3RvdHlwZTpMbixCVUdHWV9TQUZBUklfSVRFUkFUT1JTOnFufSxYbj1lbj97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBcIitvbih0aGlzKStcIl1cIn0sWm49R2UuZixKbj1iZShcInRvU3RyaW5nVGFnXCIpLFFuPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUpe3ZhciBvPW4/ZTplLnByb3RvdHlwZTtjZShvLEpuKXx8Wm4obyxKbix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnR9KSxyJiYhZW4mJnFlKG8sXCJ0b1N0cmluZ1wiLFhuKX19LGVyPVluLkl0ZXJhdG9yUHJvdG90eXBlLHRyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LG5yPVVuLlBST1BFUixycj1Zbi5CVUdHWV9TQUZBUklfSVRFUkFUT1JTLG9yPWJlKFwiaXRlcmF0b3JcIiksaXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sYXI9ZnVuY3Rpb24oZSx0LG4scixvLGksYSl7IWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXQrXCIgSXRlcmF0b3JcIjtlLnByb3RvdHlwZT1JdChlcix7bmV4dDpBKCshcixuKX0pLFFuKGUsbywhMSwhMCksWHRbb109dHJ9KG4sdCxyKTt2YXIgdSxzLGwsYz1mdW5jdGlvbihlKXtpZihlPT09byYmZylyZXR1cm4gZztpZighcnImJmUgaW4gcClyZXR1cm4gcFtlXTtzd2l0Y2goZSl7Y2FzZVwia2V5c1wiOmNhc2VcInZhbHVlc1wiOmNhc2VcImVudHJpZXNcIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMpfX0sZj10K1wiIEl0ZXJhdG9yXCIsZD0hMSxwPWUucHJvdG90eXBlLGg9cFtvcl18fHBbXCJAQGl0ZXJhdG9yXCJdfHxvJiZwW29dLGc9IXJyJiZofHxjKG8pLHY9XCJBcnJheVwiPT10JiZwLmVudHJpZXN8fGg7aWYodiYmKHU9cnQodi5jYWxsKG5ldyBlKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmdS5uZXh0JiYoUW4odSxmLCEwLCEwKSxYdFtmXT1pciksbnImJlwidmFsdWVzXCI9PW8mJmgmJlwidmFsdWVzXCIhPT1oLm5hbWUmJihkPSEwLGc9ZnVuY3Rpb24oKXtyZXR1cm4gRShoLHRoaXMpfSksbylpZihzPXt2YWx1ZXM6YyhcInZhbHVlc1wiKSxrZXlzOmk/ZzpjKFwia2V5c1wiKSxlbnRyaWVzOmMoXCJlbnRyaWVzXCIpfSxhKWZvcihsIGluIHMpKHJyfHxkfHwhKGwgaW4gcCkpJiZXbihwLGwsc1tsXSk7ZWxzZSBYZSh7dGFyZ2V0OnQscHJvdG86ITAsZm9yY2VkOnJyfHxkfSxzKTtyZXR1cm4gYSYmcFtvcl0hPT1nJiZXbihwLG9yLGcse25hbWU6b30pLFh0W3RdPWcsc30sdXI9em4uc2V0LHNyPXpuLmdldHRlckZvcihcIkFycmF5IEl0ZXJhdG9yXCIpO2FyKEFycmF5LFwiQXJyYXlcIiwoZnVuY3Rpb24oZSx0KXt1cih0aGlzLHt0eXBlOlwiQXJyYXkgSXRlcmF0b3JcIix0YXJnZXQ6TihlKSxpbmRleDowLGtpbmQ6dH0pfSksKGZ1bmN0aW9uKCl7dmFyIGU9c3IodGhpcyksdD1lLnRhcmdldCxuPWUua2luZCxyPWUuaW5kZXgrKztyZXR1cm4hdHx8cj49dC5sZW5ndGg/KGUudGFyZ2V0PXZvaWQgMCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTpcImtleXNcIj09bj97dmFsdWU6cixkb25lOiExfTpcInZhbHVlc1wiPT1uP3t2YWx1ZTp0W3JdLGRvbmU6ITF9Ont2YWx1ZTpbcix0W3JdXSxkb25lOiExfX0pLFwidmFsdWVzXCIpLFh0LkFyZ3VtZW50cz1YdC5BcnJheTt2YXIgbHI9dihcIlwiLmNoYXJBdCksY3I9dihcIlwiLmNoYXJDb2RlQXQpLGZyPXYoXCJcIi5zbGljZSksZHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHIsbyxpPWduKGoodCkpLGE9bHQobiksdT1pLmxlbmd0aDtyZXR1cm4gYTwwfHxhPj11P2U/XCJcIjp2b2lkIDA6KHI9Y3IoaSxhKSk8NTUyOTZ8fHI+NTYzMTl8fGErMT09PXV8fChvPWNyKGksYSsxKSk8NTYzMjB8fG8+NTczNDM/ZT9scihpLGEpOnI6ZT9mcihpLGEsYSsyKTpvLTU2MzIwKyhyLTU1Mjk2PDwxMCkrNjU1MzZ9fSxwcj17Y29kZUF0OmRyKCExKSxjaGFyQXQ6ZHIoITApfS5jaGFyQXQsaHI9em4uc2V0LGdyPXpuLmdldHRlckZvcihcIlN0cmluZyBJdGVyYXRvclwiKTthcihTdHJpbmcsXCJTdHJpbmdcIiwoZnVuY3Rpb24oZSl7aHIodGhpcyx7dHlwZTpcIlN0cmluZyBJdGVyYXRvclwiLHN0cmluZzpnbihlKSxpbmRleDowfSl9KSwoZnVuY3Rpb24oKXt2YXIgZSx0PWdyKHRoaXMpLG49dC5zdHJpbmcscj10LmluZGV4O3JldHVybiByPj1uLmxlbmd0aD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9OihlPXByKG4sciksdC5pbmRleCs9ZS5sZW5ndGgse3ZhbHVlOmUsZG9uZTohMX0pfSkpO3ZhciB2cj1MLkFnZ3JlZ2F0ZUVycm9yLHlyPWJlKFwidG9TdHJpbmdUYWdcIik7Zm9yKHZhciBtciBpbntDU1NSdWxlTGlzdDowLENTU1N0eWxlRGVjbGFyYXRpb246MCxDU1NWYWx1ZUxpc3Q6MCxDbGllbnRSZWN0TGlzdDowLERPTVJlY3RMaXN0OjAsRE9NU3RyaW5nTGlzdDowLERPTVRva2VuTGlzdDoxLERhdGFUcmFuc2Zlckl0ZW1MaXN0OjAsRmlsZUxpc3Q6MCxIVE1MQWxsQ29sbGVjdGlvbjowLEhUTUxDb2xsZWN0aW9uOjAsSFRNTEZvcm1FbGVtZW50OjAsSFRNTFNlbGVjdEVsZW1lbnQ6MCxNZWRpYUxpc3Q6MCxNaW1lVHlwZUFycmF5OjAsTmFtZWROb2RlTWFwOjAsTm9kZUxpc3Q6MSxQYWludFJlcXVlc3RMaXN0OjAsUGx1Z2luOjAsUGx1Z2luQXJyYXk6MCxTVkdMZW5ndGhMaXN0OjAsU1ZHTnVtYmVyTGlzdDowLFNWR1BhdGhTZWdMaXN0OjAsU1ZHUG9pbnRMaXN0OjAsU1ZHU3RyaW5nTGlzdDowLFNWR1RyYW5zZm9ybUxpc3Q6MCxTb3VyY2VCdWZmZXJMaXN0OjAsU3R5bGVTaGVldExpc3Q6MCxUZXh0VHJhY2tDdWVMaXN0OjAsVGV4dFRyYWNrTGlzdDowLFRvdWNoTGlzdDowfSl7dmFyIGJyPWFbbXJdLHdyPWJyJiZici5wcm90b3R5cGU7d3ImJm9uKHdyKSE9PXlyJiZxZSh3cix5cixtciksWHRbbXJdPVh0LkFycmF5fXZhciBFcixEcixTcj12cix4cj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5NYXRoPT1NYXRoJiZlfSxDcj14cihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyl8fHhyKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyl8fHhyKFwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmKXx8eHIoXCJvYmplY3RcIj09dHlwZW9mIGUmJmUpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksQXI9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiEhZSgpfWNhdGNoKGUpe3JldHVybiEwfX0sT3I9IUFyKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KSksa3I9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsQnI9a3IuYmluZD9rci5iaW5kKGtyKTpmdW5jdGlvbigpe3JldHVybiBrci5hcHBseShrcixhcmd1bWVudHMpfSxGcj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxUcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLF9yPVRyJiYhRnIuY2FsbCh7MToyfSwxKT9mdW5jdGlvbihlKXt2YXIgdD1Ucih0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTpGcixQcj17Zjpfcn0sanI9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19LE5yPUZ1bmN0aW9uLnByb3RvdHlwZSxJcj1Oci5iaW5kLExyPU5yLmNhbGwsUnI9SXImJklyLmJpbmQoTHIpLE1yPUlyP2Z1bmN0aW9uKGUpe3JldHVybiBlJiZScihMcixlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmZ1bmN0aW9uKCl7cmV0dXJuIExyLmFwcGx5KGUsYXJndW1lbnRzKX19LHpyPU1yKHt9LnRvU3RyaW5nKSwkcj1NcihcIlwiLnNsaWNlKSxIcj1mdW5jdGlvbihlKXtyZXR1cm4gJHIoenIoZSksOCwtMSl9LFZyPUNyLk9iamVjdCxVcj1NcihcIlwiLnNwbGl0KSxXcj1BcigoZnVuY3Rpb24oKXtyZXR1cm4hVnIoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKGUpe3JldHVyblwiU3RyaW5nXCI9PUhyKGUpP1VyKGUsXCJcIik6VnIoZSl9OlZyLEdyPUNyLlR5cGVFcnJvcixxcj1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IEdyKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIrZSk7cmV0dXJuIGV9LEtyPWZ1bmN0aW9uKGUpe3JldHVybiBXcihxcihlKSl9LFlyPWZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9LFhyPWZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlP251bGwhPT1lOllyKGUpfSxacj1mdW5jdGlvbihlKXtyZXR1cm4gWXIoZSk/ZTp2b2lkIDB9LEpyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9acihDcltlXSk6Q3JbZV0mJkNyW2VdW3RdfSxRcj1Ncih7fS5pc1Byb3RvdHlwZU9mKSxlbz1KcihcIm5hdmlnYXRvclwiLFwidXNlckFnZW50XCIpfHxcIlwiLHRvPUNyLnByb2Nlc3Msbm89Q3IuRGVubyxybz10byYmdG8udmVyc2lvbnN8fG5vJiZuby52ZXJzaW9uLG9vPXJvJiZyby52ODtvbyYmKERyPShFcj1vby5zcGxpdChcIi5cIikpWzBdPjAmJkVyWzBdPDQ/MTorKEVyWzBdK0VyWzFdKSksIURyJiZlbyYmKCEoRXI9ZW8ubWF0Y2goL0VkZ2VcXC8oXFxkKykvKSl8fEVyWzFdPj03NCkmJihFcj1lby5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLykpJiYoRHI9K0VyWzFdKTt2YXIgaW89RHIsYW89ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhQXIoKGZ1bmN0aW9uKCl7dmFyIGU9U3ltYm9sKCk7cmV0dXJuIVN0cmluZyhlKXx8IShPYmplY3QoZSlpbnN0YW5jZW9mIFN5bWJvbCl8fCFTeW1ib2wuc2hhbSYmaW8mJmlvPDQxfSkpLHVvPWFvJiYhU3ltYm9sLnNoYW0mJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3Isc289Q3IuT2JqZWN0LGxvPXVvP2Z1bmN0aW9uKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfTpmdW5jdGlvbihlKXt2YXIgdD1KcihcIlN5bWJvbFwiKTtyZXR1cm4gWXIodCkmJlFyKHQucHJvdG90eXBlLHNvKGUpKX0sY289Q3IuU3RyaW5nLGZvPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gY28oZSl9Y2F0Y2goZSl7cmV0dXJuXCJPYmplY3RcIn19LHBvPUNyLlR5cGVFcnJvcixobz1mdW5jdGlvbihlKXtpZihZcihlKSlyZXR1cm4gZTt0aHJvdyBwbyhmbyhlKStcIiBpcyBub3QgYSBmdW5jdGlvblwiKX0sZ289ZnVuY3Rpb24oZSx0KXt2YXIgbj1lW3RdO3JldHVybiBudWxsPT1uP3ZvaWQgMDpobyhuKX0sdm89Q3IuVHlwZUVycm9yLHlvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxtbz1mdW5jdGlvbihlLHQpe3RyeXt5byhDcixlLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoKG4pe0NyW2VdPXR9cmV0dXJuIHR9LGJvPUNyW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdfHxtbyhcIl9fY29yZS1qc19zaGFyZWRfX1wiLHt9KSx3bz1uKChmdW5jdGlvbihlKXsoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGJvW2VdfHwoYm9bZV09dm9pZCAwIT09dD90Ont9KX0pKFwidmVyc2lvbnNcIixbXSkucHVzaCh7dmVyc2lvbjpcIjMuMTkuM1wiLG1vZGU6XCJnbG9iYWxcIixjb3B5cmlnaHQ6XCLCqSAyMDIxIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpXCJ9KX0pKSxFbz1Dci5PYmplY3QsRG89ZnVuY3Rpb24oZSl7cmV0dXJuIEVvKHFyKGUpKX0sU289TXIoe30uaGFzT3duUHJvcGVydHkpLHhvPU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFNvKERvKGUpLHQpfSxDbz0wLEFvPU1hdGgucmFuZG9tKCksT289TXIoMS4udG9TdHJpbmcpLGtvPWZ1bmN0aW9uKGUpe3JldHVyblwiU3ltYm9sKFwiKyh2b2lkIDA9PT1lP1wiXCI6ZSkrXCIpX1wiK09vKCsrQ28rQW8sMzYpfSxCbz13byhcIndrc1wiKSxGbz1Dci5TeW1ib2wsVG89Rm8mJkZvLmZvcixfbz11bz9GbzpGbyYmRm8ud2l0aG91dFNldHRlcnx8a28sUG89ZnVuY3Rpb24oZSl7aWYoIXhvKEJvLGUpfHwhYW8mJlwic3RyaW5nXCIhPXR5cGVvZiBCb1tlXSl7dmFyIHQ9XCJTeW1ib2wuXCIrZTthbyYmeG8oRm8sZSk/Qm9bZV09Rm9bZV06Qm9bZV09dW8mJlRvP1RvKHQpOl9vKHQpfXJldHVybiBCb1tlXX0sam89Q3IuVHlwZUVycm9yLE5vPVBvKFwidG9QcmltaXRpdmVcIiksSW89ZnVuY3Rpb24oZSx0KXtpZighWHIoZSl8fGxvKGUpKXJldHVybiBlO3ZhciBuLHI9Z28oZSxObyk7aWYocil7aWYodm9pZCAwPT09dCYmKHQ9XCJkZWZhdWx0XCIpLG49QnIocixlLHQpLCFYcihuKXx8bG8obikpcmV0dXJuIG47dGhyb3cgam8oXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9cmV0dXJuIHZvaWQgMD09PXQmJih0PVwibnVtYmVyXCIpLGZ1bmN0aW9uKGUsdCl7dmFyIG4scjtpZihcInN0cmluZ1wiPT09dCYmWXIobj1lLnRvU3RyaW5nKSYmIVhyKHI9QnIobixlKSkpcmV0dXJuIHI7aWYoWXIobj1lLnZhbHVlT2YpJiYhWHIocj1CcihuLGUpKSlyZXR1cm4gcjtpZihcInN0cmluZ1wiIT09dCYmWXIobj1lLnRvU3RyaW5nKSYmIVhyKHI9QnIobixlKSkpcmV0dXJuIHI7dGhyb3cgdm8oXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9KGUsdCl9LExvPWZ1bmN0aW9uKGUpe3ZhciB0PUlvKGUsXCJzdHJpbmdcIik7cmV0dXJuIGxvKHQpP3Q6dCtcIlwifSxSbz1Dci5kb2N1bWVudCxNbz1YcihSbykmJlhyKFJvLmNyZWF0ZUVsZW1lbnQpLHpvPWZ1bmN0aW9uKGUpe3JldHVybiBNbz9Sby5jcmVhdGVFbGVtZW50KGUpOnt9fSwkbz0hT3ImJiFBcigoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHpvKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpLEhvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsVm89T3I/SG86ZnVuY3Rpb24oZSx0KXtpZihlPUtyKGUpLHQ9TG8odCksJG8pdHJ5e3JldHVybiBIbyhlLHQpfWNhdGNoKGUpe31pZih4byhlLHQpKXJldHVybiBqcighQnIoUHIuZixlLHQpLGVbdF0pfSxVbz17ZjpWb30sV289Q3IuU3RyaW5nLEdvPUNyLlR5cGVFcnJvcixxbz1mdW5jdGlvbihlKXtpZihYcihlKSlyZXR1cm4gZTt0aHJvdyBHbyhXbyhlKStcIiBpcyBub3QgYW4gb2JqZWN0XCIpfSxLbz1Dci5UeXBlRXJyb3IsWW89T2JqZWN0LmRlZmluZVByb3BlcnR5LFhvPU9yP1lvOmZ1bmN0aW9uKGUsdCxuKXtpZihxbyhlKSx0PUxvKHQpLHFvKG4pLCRvKXRyeXtyZXR1cm4gWW8oZSx0LG4pfWNhdGNoKGUpe31pZihcImdldFwiaW4gbnx8XCJzZXRcImluIG4pdGhyb3cgS28oXCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZFwiKTtyZXR1cm5cInZhbHVlXCJpbiBuJiYoZVt0XT1uLnZhbHVlKSxlfSxabz17ZjpYb30sSm89T3I/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBaby5mKGUsdCxqcigxLG4pKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4sZX0sUW89TXIoRnVuY3Rpb24udG9TdHJpbmcpO1lyKGJvLmluc3BlY3RTb3VyY2UpfHwoYm8uaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gUW8oZSl9KTt2YXIgZWksdGksbmkscmk9Ym8uaW5zcGVjdFNvdXJjZSxvaT1Dci5XZWFrTWFwLGlpPVlyKG9pKSYmL25hdGl2ZSBjb2RlLy50ZXN0KHJpKG9pKSksYWk9d28oXCJrZXlzXCIpLHVpPWZ1bmN0aW9uKGUpe3JldHVybiBhaVtlXXx8KGFpW2VdPWtvKGUpKX0sc2k9e30sbGk9Q3IuVHlwZUVycm9yLGNpPUNyLldlYWtNYXA7aWYoaWl8fGJvLnN0YXRlKXt2YXIgZmk9Ym8uc3RhdGV8fChiby5zdGF0ZT1uZXcgY2kpLGRpPU1yKGZpLmdldCkscGk9TXIoZmkuaGFzKSxoaT1NcihmaS5zZXQpO2VpPWZ1bmN0aW9uKGUsdCl7aWYocGkoZmksZSkpdGhyb3cgbmV3IGxpKFwiT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWRcIik7cmV0dXJuIHQuZmFjYWRlPWUsaGkoZmksZSx0KSx0fSx0aT1mdW5jdGlvbihlKXtyZXR1cm4gZGkoZmksZSl8fHt9fSxuaT1mdW5jdGlvbihlKXtyZXR1cm4gcGkoZmksZSl9fWVsc2V7dmFyIGdpPXVpKFwic3RhdGVcIik7c2lbZ2ldPSEwLGVpPWZ1bmN0aW9uKGUsdCl7aWYoeG8oZSxnaSkpdGhyb3cgbmV3IGxpKFwiT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWRcIik7cmV0dXJuIHQuZmFjYWRlPWUsSm8oZSxnaSx0KSx0fSx0aT1mdW5jdGlvbihlKXtyZXR1cm4geG8oZSxnaSk/ZVtnaV06e319LG5pPWZ1bmN0aW9uKGUpe3JldHVybiB4byhlLGdpKX19dmFyIHZpPXtzZXQ6ZWksZ2V0OnRpLGhhczpuaSxlbmZvcmNlOmZ1bmN0aW9uKGUpe3JldHVybiBuaShlKT90aShlKTplaShlLHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbjtpZighWHIodCl8fChuPXRpKHQpKS50eXBlIT09ZSl0aHJvdyBsaShcIkluY29tcGF0aWJsZSByZWNlaXZlciwgXCIrZStcIiByZXF1aXJlZFwiKTtyZXR1cm4gbn19fSx5aT1GdW5jdGlvbi5wcm90b3R5cGUsbWk9T3ImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsYmk9eG8oeWksXCJuYW1lXCIpLHdpPXtFWElTVFM6YmksUFJPUEVSOmJpJiZcInNvbWV0aGluZ1wiPT09ZnVuY3Rpb24oKXt9Lm5hbWUsQ09ORklHVVJBQkxFOmJpJiYoIU9yfHxPciYmbWkoeWksXCJuYW1lXCIpLmNvbmZpZ3VyYWJsZSl9LEVpPW4oKGZ1bmN0aW9uKGUpe3ZhciB0PXdpLkNPTkZJR1VSQUJMRSxuPXZpLmdldCxyPXZpLmVuZm9yY2Usbz1TdHJpbmcoU3RyaW5nKS5zcGxpdChcIlN0cmluZ1wiKTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUsbixpLGEpe3ZhciB1LHM9ISFhJiYhIWEudW5zYWZlLGw9ISFhJiYhIWEuZW51bWVyYWJsZSxjPSEhYSYmISFhLm5vVGFyZ2V0R2V0LGY9YSYmdm9pZCAwIT09YS5uYW1lP2EubmFtZTpuO1lyKGkpJiYoXCJTeW1ib2woXCI9PT1TdHJpbmcoZikuc2xpY2UoMCw3KSYmKGY9XCJbXCIrU3RyaW5nKGYpLnJlcGxhY2UoL15TeW1ib2xcXCgoW14pXSopXFwpLyxcIiQxXCIpK1wiXVwiKSwoIXhvKGksXCJuYW1lXCIpfHx0JiZpLm5hbWUhPT1mKSYmSm8oaSxcIm5hbWVcIixmKSwodT1yKGkpKS5zb3VyY2V8fCh1LnNvdXJjZT1vLmpvaW4oXCJzdHJpbmdcIj09dHlwZW9mIGY/ZjpcIlwiKSkpLGUhPT1Dcj8ocz8hYyYmZVtuXSYmKGw9ITApOmRlbGV0ZSBlW25dLGw/ZVtuXT1pOkpvKGUsbixpKSk6bD9lW25dPWk6bW8obixpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxcInRvU3RyaW5nXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFlyKHRoaXMpJiZuKHRoaXMpLnNvdXJjZXx8cmkodGhpcyl9KSl9KSksRGk9TWF0aC5jZWlsLFNpPU1hdGguZmxvb3IseGk9ZnVuY3Rpb24oZSl7dmFyIHQ9K2U7cmV0dXJuIHQhPXR8fDA9PT10PzA6KHQ+MD9TaTpEaSkodCl9LENpPU1hdGgubWF4LEFpPU1hdGgubWluLE9pPWZ1bmN0aW9uKGUsdCl7dmFyIG49eGkoZSk7cmV0dXJuIG48MD9DaShuK3QsMCk6QWkobix0KX0sa2k9TWF0aC5taW4sQmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD9raSh4aShlKSw5MDA3MTk5MjU0NzQwOTkxKTowfSxGaT1mdW5jdGlvbihlKXtyZXR1cm4gQmkoZS5sZW5ndGgpfSxUaT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe3ZhciBvLGk9S3IodCksYT1GaShpKSx1PU9pKHIsYSk7aWYoZSYmbiE9bil7Zm9yKDthPnU7KWlmKChvPWlbdSsrXSkhPW8pcmV0dXJuITB9ZWxzZSBmb3IoO2E+dTt1KyspaWYoKGV8fHUgaW4gaSkmJmlbdV09PT1uKXJldHVybiBlfHx1fHwwO3JldHVybiFlJiYtMX19LF9pPXtpbmNsdWRlczpUaSghMCksaW5kZXhPZjpUaSghMSl9LmluZGV4T2YsUGk9TXIoW10ucHVzaCksamk9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPUtyKGUpLG89MCxpPVtdO2ZvcihuIGluIHIpIXhvKHNpLG4pJiZ4byhyLG4pJiZQaShpLG4pO2Zvcig7dC5sZW5ndGg+bzspeG8ocixuPXRbbysrXSkmJih+X2koaSxuKXx8UGkoaSxuKSk7cmV0dXJuIGl9LE5pPVtcImNvbnN0cnVjdG9yXCIsXCJoYXNPd25Qcm9wZXJ0eVwiLFwiaXNQcm90b3R5cGVPZlwiLFwicHJvcGVydHlJc0VudW1lcmFibGVcIixcInRvTG9jYWxlU3RyaW5nXCIsXCJ0b1N0cmluZ1wiLFwidmFsdWVPZlwiXSxJaT1OaS5jb25jYXQoXCJsZW5ndGhcIixcInByb3RvdHlwZVwiKSxMaT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24oZSl7cmV0dXJuIGppKGUsSWkpfSxSaT17ZjpMaX0sTWk9e2Y6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30semk9TXIoW10uY29uY2F0KSwkaT1KcihcIlJlZmxlY3RcIixcIm93bktleXNcIil8fGZ1bmN0aW9uKGUpe3ZhciB0PVJpLmYocW8oZSkpLG49TWkuZjtyZXR1cm4gbj96aSh0LG4oZSkpOnR9LEhpPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPSRpKHQpLHI9Wm8uZixvPVVvLmYsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO3hvKGUsYSl8fHIoZSxhLG8odCxhKSl9fSxWaT0vI3xcXC5wcm90b3R5cGVcXC4vLFVpPWZ1bmN0aW9uKGUsdCl7dmFyIG49R2lbV2koZSldO3JldHVybiBuPT1LaXx8biE9cWkmJihZcih0KT9Bcih0KTohIXQpfSxXaT1VaS5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKFZpLFwiLlwiKS50b0xvd2VyQ2FzZSgpfSxHaT1VaS5kYXRhPXt9LHFpPVVpLk5BVElWRT1cIk5cIixLaT1VaS5QT0xZRklMTD1cIlBcIixZaT1VaSxYaT1Vby5mLFppPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGksYSx1PWUudGFyZ2V0LHM9ZS5nbG9iYWwsbD1lLnN0YXQ7aWYobj1zP0NyOmw/Q3JbdV18fG1vKHUse30pOihDclt1XXx8e30pLnByb3RvdHlwZSlmb3IociBpbiB0KXtpZihpPXRbcl0sbz1lLm5vVGFyZ2V0R2V0PyhhPVhpKG4scikpJiZhLnZhbHVlOm5bcl0sIVlpKHM/cjp1KyhsP1wiLlwiOlwiI1wiKStyLGUuZm9yY2VkKSYmdm9pZCAwIT09byl7aWYodHlwZW9mIGk9PXR5cGVvZiBvKWNvbnRpbnVlO0hpKGksbyl9KGUuc2hhbXx8byYmby5zaGFtKSYmSm8oaSxcInNoYW1cIiwhMCksRWkobixyLGksZSl9fSxKaT17fTtKaVtQbyhcInRvU3RyaW5nVGFnXCIpXT1cInpcIjt2YXIgUWksZWE9XCJbb2JqZWN0IHpdXCI9PT1TdHJpbmcoSmkpLHRhPVBvKFwidG9TdHJpbmdUYWdcIiksbmE9Q3IuT2JqZWN0LHJhPVwiQXJndW1lbnRzXCI9PUhyKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSksb2E9ZWE/SHI6ZnVuY3Rpb24oZSl7dmFyIHQsbixyO3JldHVybiB2b2lkIDA9PT1lP1wiVW5kZWZpbmVkXCI6bnVsbD09PWU/XCJOdWxsXCI6XCJzdHJpbmdcIj09dHlwZW9mKG49ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGVbdF19Y2F0Y2goZSl7fX0odD1uYShlKSx0YSkpP246cmE/SHIodCk6XCJPYmplY3RcIj09KHI9SHIodCkpJiZZcih0LmNhbGxlZSk/XCJBcmd1bWVudHNcIjpyfSxpYT1Dci5TdHJpbmcsYWE9ZnVuY3Rpb24oZSl7aWYoXCJTeW1ib2xcIj09PW9hKGUpKXRocm93IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nXCIpO3JldHVybiBpYShlKX0sdWE9ZnVuY3Rpb24oKXt2YXIgZT1xbyh0aGlzKSx0PVwiXCI7cmV0dXJuIGUuZ2xvYmFsJiYodCs9XCJnXCIpLGUuaWdub3JlQ2FzZSYmKHQrPVwiaVwiKSxlLm11bHRpbGluZSYmKHQrPVwibVwiKSxlLmRvdEFsbCYmKHQrPVwic1wiKSxlLnVuaWNvZGUmJih0Kz1cInVcIiksZS5zdGlja3kmJih0Kz1cInlcIiksdH0sc2E9Q3IuUmVnRXhwLGxhPUFyKChmdW5jdGlvbigpe3ZhciBlPXNhKFwiYVwiLFwieVwiKTtyZXR1cm4gZS5sYXN0SW5kZXg9MixudWxsIT1lLmV4ZWMoXCJhYmNkXCIpfSkpLGNhPWxhfHxBcigoZnVuY3Rpb24oKXtyZXR1cm4hc2EoXCJhXCIsXCJ5XCIpLnN0aWNreX0pKSxmYT1sYXx8QXIoKGZ1bmN0aW9uKCl7dmFyIGU9c2EoXCJeclwiLFwiZ3lcIik7cmV0dXJuIGUubGFzdEluZGV4PTIsbnVsbCE9ZS5leGVjKFwic3RyXCIpfSkpLGRhPXtCUk9LRU5fQ0FSRVQ6ZmEsTUlTU0VEX1NUSUNLWTpjYSxVTlNVUFBPUlRFRF9ZOmxhfSxwYT1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIGppKGUsTmkpfSxoYT1Pcj9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe3FvKGUpO2Zvcih2YXIgbixyPUtyKHQpLG89cGEodCksaT1vLmxlbmd0aCxhPTA7aT5hOylaby5mKGUsbj1vW2ErK10scltuXSk7cmV0dXJuIGV9LGdhPUpyKFwiZG9jdW1lbnRcIixcImRvY3VtZW50RWxlbWVudFwiKSx2YT11aShcIklFX1BST1RPXCIpLHlhPWZ1bmN0aW9uKCl7fSxtYT1mdW5jdGlvbihlKXtyZXR1cm5cIjxzY3JpcHQ+XCIrZStcIjxcXC9zY3JpcHQ+XCJ9LGJhPWZ1bmN0aW9uKGUpe2Uud3JpdGUobWEoXCJcIikpLGUuY2xvc2UoKTt2YXIgdD1lLnBhcmVudFdpbmRvdy5PYmplY3Q7cmV0dXJuIGU9bnVsbCx0fSx3YT1mdW5jdGlvbigpe3RyeXtRaT1uZXcgQWN0aXZlWE9iamVjdChcImh0bWxmaWxlXCIpfWNhdGNoKGUpe312YXIgZSx0O3dhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5kb21haW4mJlFpP2JhKFFpKTooKHQ9em8oXCJpZnJhbWVcIikpLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsZ2EuYXBwZW5kQ2hpbGQodCksdC5zcmM9U3RyaW5nKFwiamF2YXNjcmlwdDpcIiksKGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksZS53cml0ZShtYShcImRvY3VtZW50LkY9T2JqZWN0XCIpKSxlLmNsb3NlKCksZS5GKTpiYShRaSk7Zm9yKHZhciBuPU5pLmxlbmd0aDtuLS07KWRlbGV0ZSB3YS5wcm90b3R5cGVbTmlbbl1dO3JldHVybiB3YSgpfTtzaVt2YV09ITA7dmFyIEVhLERhLFNhPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT1lPyh5YS5wcm90b3R5cGU9cW8oZSksbj1uZXcgeWEseWEucHJvdG90eXBlPW51bGwsblt2YV09ZSk6bj13YSgpLHZvaWQgMD09PXQ/bjpoYShuLHQpfSx4YT1Dci5SZWdFeHAsQ2E9QXIoKGZ1bmN0aW9uKCl7dmFyIGU9eGEoXCIuXCIsXCJzXCIpO3JldHVybiEoZS5kb3RBbGwmJmUuZXhlYyhcIlxcblwiKSYmXCJzXCI9PT1lLmZsYWdzKX0pKSxBYT1Dci5SZWdFeHAsT2E9QXIoKGZ1bmN0aW9uKCl7dmFyIGU9QWEoXCIoPzxhPmIpXCIsXCJnXCIpO3JldHVyblwiYlwiIT09ZS5leGVjKFwiYlwiKS5ncm91cHMuYXx8XCJiY1wiIT09XCJiXCIucmVwbGFjZShlLFwiJDxhPmNcIil9KSksa2E9dmkuZ2V0LEJhPXdvKFwibmF0aXZlLXN0cmluZy1yZXBsYWNlXCIsU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxGYT1SZWdFeHAucHJvdG90eXBlLmV4ZWMsVGE9RmEsX2E9TXIoXCJcIi5jaGFyQXQpLFBhPU1yKFwiXCIuaW5kZXhPZiksamE9TXIoXCJcIi5yZXBsYWNlKSxOYT1NcihcIlwiLnNsaWNlKSxJYT0oRGE9L2IqL2csQnIoRmEsRWE9L2EvLFwiYVwiKSxCcihGYSxEYSxcImFcIiksMCE9PUVhLmxhc3RJbmRleHx8MCE9PURhLmxhc3RJbmRleCksTGE9ZGEuQlJPS0VOX0NBUkVULFJhPXZvaWQgMCE9PS8oKT8/Ly5leGVjKFwiXCIpWzFdOyhJYXx8UmF8fExhfHxDYXx8T2EpJiYoVGE9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8saSxhLHUscz10aGlzLGw9a2EocyksYz1hYShlKSxmPWwucmF3O2lmKGYpcmV0dXJuIGYubGFzdEluZGV4PXMubGFzdEluZGV4LHQ9QnIoVGEsZixjKSxzLmxhc3RJbmRleD1mLmxhc3RJbmRleCx0O3ZhciBkPWwuZ3JvdXBzLHA9TGEmJnMuc3RpY2t5LGg9QnIodWEscyksZz1zLnNvdXJjZSx2PTAseT1jO2lmKHAmJihoPWphKGgsXCJ5XCIsXCJcIiksLTE9PT1QYShoLFwiZ1wiKSYmKGgrPVwiZ1wiKSx5PU5hKGMscy5sYXN0SW5kZXgpLHMubGFzdEluZGV4PjAmJighcy5tdWx0aWxpbmV8fHMubXVsdGlsaW5lJiZcIlxcblwiIT09X2EoYyxzLmxhc3RJbmRleC0xKSkmJihnPVwiKD86IFwiK2crXCIpXCIseT1cIiBcIit5LHYrKyksbj1uZXcgUmVnRXhwKFwiXig/OlwiK2crXCIpXCIsaCkpLFJhJiYobj1uZXcgUmVnRXhwKFwiXlwiK2crXCIkKD8hXFxcXHMpXCIsaCkpLElhJiYocj1zLmxhc3RJbmRleCksbz1CcihGYSxwP246cyx5KSxwP28/KG8uaW5wdXQ9TmEoby5pbnB1dCx2KSxvWzBdPU5hKG9bMF0sdiksby5pbmRleD1zLmxhc3RJbmRleCxzLmxhc3RJbmRleCs9b1swXS5sZW5ndGgpOnMubGFzdEluZGV4PTA6SWEmJm8mJihzLmxhc3RJbmRleD1zLmdsb2JhbD9vLmluZGV4K29bMF0ubGVuZ3RoOnIpLFJhJiZvJiZvLmxlbmd0aD4xJiZCcihCYSxvWzBdLG4sKGZ1bmN0aW9uKCl7Zm9yKGk9MTtpPGFyZ3VtZW50cy5sZW5ndGgtMjtpKyspdm9pZCAwPT09YXJndW1lbnRzW2ldJiYob1tpXT12b2lkIDApfSkpLG8mJmQpZm9yKG8uZ3JvdXBzPWE9U2EobnVsbCksaT0wO2k8ZC5sZW5ndGg7aSsrKWFbKHU9ZFtpXSlbMF1dPW9bdVsxXV07cmV0dXJuIG99KTt2YXIgTWE9VGE7Wmkoe3RhcmdldDpcIlJlZ0V4cFwiLHByb3RvOiEwLGZvcmNlZDovLi8uZXhlYyE9PU1hfSx7ZXhlYzpNYX0pO3ZhciB6YT1QbyhcInNwZWNpZXNcIiksJGE9UmVnRXhwLnByb3RvdHlwZSxIYT1NcihcIlwiLmNoYXJBdCksVmE9TXIoXCJcIi5jaGFyQ29kZUF0KSxVYT1NcihcIlwiLnNsaWNlKSxXYT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcixvLGk9YWEocXIodCkpLGE9eGkobiksdT1pLmxlbmd0aDtyZXR1cm4gYTwwfHxhPj11P2U/XCJcIjp2b2lkIDA6KHI9VmEoaSxhKSk8NTUyOTZ8fHI+NTYzMTl8fGErMT09PXV8fChvPVZhKGksYSsxKSk8NTYzMjB8fG8+NTczNDM/ZT9IYShpLGEpOnI6ZT9VYShpLGEsYSsyKTpvLTU2MzIwKyhyLTU1Mjk2PDwxMCkrNjU1MzZ9fSxHYT17Y29kZUF0OldhKCExKSxjaGFyQXQ6V2EoITApfSxxYT1HYS5jaGFyQXQsS2E9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0KyhuP3FhKGUsdCkubGVuZ3RoOjEpfSxZYT1Dci5UeXBlRXJyb3IsWGE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4ZWM7aWYoWXIobikpe3ZhciByPUJyKG4sZSx0KTtyZXR1cm4gbnVsbCE9PXImJnFvKHIpLHJ9aWYoXCJSZWdFeHBcIj09PUhyKGUpKXJldHVybiBCcihNYSxlLHQpO3Rocm93IFlhKFwiUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlclwiKX07IWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPVBvKGUpLGk9IUFyKChmdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0W29dPWZ1bmN0aW9uKCl7cmV0dXJuIDd9LDchPVwiXCJbZV0odCl9KSksYT1pJiYhQXIoKGZ1bmN0aW9uKCl7dmFyIHQ9ITEsbj0vYS87cmV0dXJuXCJzcGxpdFwiPT09ZSYmKChuPXt9KS5jb25zdHJ1Y3Rvcj17fSxuLmNvbnN0cnVjdG9yW3phXT1mdW5jdGlvbigpe3JldHVybiBufSxuLmZsYWdzPVwiXCIsbltvXT0vLi9bb10pLG4uZXhlYz1mdW5jdGlvbigpe3JldHVybiB0PSEwLG51bGx9LG5bb10oXCJcIiksIXR9KSk7aWYoIWl8fCFhfHxuKXt2YXIgdT1NcigvLi9bb10pLHM9dChvLFwiXCJbZV0sKGZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGE9TXIoZSkscz10LmV4ZWM7cmV0dXJuIHM9PT1NYXx8cz09PSRhLmV4ZWM/aSYmIW8/e2RvbmU6ITAsdmFsdWU6dSh0LG4scil9Ontkb25lOiEwLHZhbHVlOmEobix0LHIpfTp7ZG9uZTohMX19KSk7RWkoU3RyaW5nLnByb3RvdHlwZSxlLHNbMF0pLEVpKCRhLG8sc1sxXSl9ciYmSm8oJGFbb10sXCJzaGFtXCIsITApfShcIm1hdGNoXCIsKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bZnVuY3Rpb24odCl7dmFyIG49cXIodGhpcykscj1udWxsPT10P3ZvaWQgMDpnbyh0LGUpO3JldHVybiByP0JyKHIsdCxuKTpuZXcgUmVnRXhwKHQpW2VdKGFhKG4pKX0sZnVuY3Rpb24oZSl7dmFyIHI9cW8odGhpcyksbz1hYShlKSxpPW4odCxyLG8pO2lmKGkuZG9uZSlyZXR1cm4gaS52YWx1ZTtpZighci5nbG9iYWwpcmV0dXJuIFhhKHIsbyk7dmFyIGE9ci51bmljb2RlO3IubGFzdEluZGV4PTA7Zm9yKHZhciB1LHM9W10sbD0wO251bGwhPT0odT1YYShyLG8pKTspe3ZhciBjPWFhKHVbMF0pO3NbbF09YyxcIlwiPT09YyYmKHIubGFzdEluZGV4PUthKG8sQmkoci5sYXN0SW5kZXgpLGEpKSxsKyt9cmV0dXJuIDA9PT1sP251bGw6c31dfSkpLFppKHtnbG9iYWw6ITB9LHtnbG9iYWxUaGlzOkNyfSk7dmFyIFphPSFBcigoZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgZSkhPT1lLnByb3RvdHlwZX0pKSxKYT11aShcIklFX1BST1RPXCIpLFFhPUNyLk9iamVjdCxldT1RYS5wcm90b3R5cGUsdHU9WmE/UWEuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9RG8oZSk7aWYoeG8odCxKYSkpcmV0dXJuIHRbSmFdO3ZhciBuPXQuY29uc3RydWN0b3I7cmV0dXJuIFlyKG4pJiZ0IGluc3RhbmNlb2Ygbj9uLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgUWE/ZXU6bnVsbH0sbnU9Q3IuU3RyaW5nLHJ1PUNyLlR5cGVFcnJvcixvdT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fChcIl9fcHJvdG9fX1wiaW57fT9mdW5jdGlvbigpe3ZhciBlLHQ9ITEsbj17fTt0cnl7KGU9TXIoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLFwiX19wcm90b19fXCIpLnNldCkpKG4sW10pLHQ9biBpbnN0YW5jZW9mIEFycmF5fWNhdGNoKGUpe31yZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gcW8obiksZnVuY3Rpb24oZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV8fFlyKGUpKXJldHVybiBlO3Rocm93IHJ1KFwiQ2FuJ3Qgc2V0IFwiK251KGUpK1wiIGFzIGEgcHJvdG90eXBlXCIpfShyKSx0P2UobixyKTpuLl9fcHJvdG9fXz1yLG59fSgpOnZvaWQgMCksaXU9Q3IuQXJyYXksYXU9TWF0aC5tYXgsdXU9TXIoXCJcIi5yZXBsYWNlKSxzdT1NcihcIlwiLnNwbGl0KSxsdT1NcihbXS5qb2luKSxjdT1TdHJpbmcoRXJyb3IoXCJ6eGNhc2RcIikuc3RhY2spLGZ1PS9cXG5cXHMqYXQgW146XSo6W15cXG5dKi8sZHU9ZnUudGVzdChjdSkscHU9L0BbXlxcbl0qXFxuLy50ZXN0KGN1KSYmIS96eGNhc2QvLnRlc3QoY3UpLGh1PWZ1bmN0aW9uKGUsdCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIGU7aWYoZHUpZm9yKDt0LS07KWU9dXUoZSxmdSxcIlwiKTtlbHNlIGlmKHB1KXJldHVybiBsdShmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLG8saSxhLHU9RmkoZSkscz1PaSh0LHUpLGw9T2kodm9pZCAwPT09bj91Om4sdSksYz1pdShhdShsLXMsMCkpLGY9MDtzPGw7cysrLGYrKylyPWMsbz1mLGk9ZVtzXSxhPXZvaWQgMCwoYT1MbyhvKSlpbiByP1pvLmYocixhLGpyKDAsaSkpOnJbYV09aTtyZXR1cm4gYy5sZW5ndGg9ZixjfShzdShlLFwiXFxuXCIpLHQpLFwiXFxuXCIpO3JldHVybiBlfSxndT1mdW5jdGlvbihlLHQpe1hyKHQpJiZcImNhdXNlXCJpbiB0JiZKbyhlLFwiY2F1c2VcIix0LmNhdXNlKX0sdnU9TXIoTXIuYmluZCkseXU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaG8oZSksdm9pZCAwPT09dD9lOnZ1P3Z1KGUsdCk6ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fSxtdT17fSxidT1QbyhcIml0ZXJhdG9yXCIpLHd1PUFycmF5LnByb3RvdHlwZSxFdT1QbyhcIml0ZXJhdG9yXCIpLER1PWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpcmV0dXJuIGdvKGUsRXUpfHxnbyhlLFwiQEBpdGVyYXRvclwiKXx8bXVbb2EoZSldfSxTdT1Dci5UeXBlRXJyb3IseHU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG87cW8oZSk7dHJ5e2lmKCEocj1nbyhlLFwicmV0dXJuXCIpKSl7aWYoXCJ0aHJvd1wiPT09dCl0aHJvdyBuO3JldHVybiBufXI9QnIocixlKX1jYXRjaChlKXtvPSEwLHI9ZX1pZihcInRocm93XCI9PT10KXRocm93IG47aWYobyl0aHJvdyByO3JldHVybiBxbyhyKSxufSxDdT1Dci5UeXBlRXJyb3IsQXU9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0b3BwZWQ9ZSx0aGlzLnJlc3VsdD10fSxPdT1BdS5wcm90b3R5cGUsa3U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saSxhLHUscyxsLGM9biYmbi50aGF0LGY9ISghbnx8IW4uQVNfRU5UUklFUyksZD0hKCFufHwhbi5JU19JVEVSQVRPUikscD0hKCFufHwhbi5JTlRFUlJVUFRFRCksaD15dSh0LGMpLGc9ZnVuY3Rpb24oZSl7cmV0dXJuIHImJnh1KHIsXCJub3JtYWxcIixlKSxuZXcgQXUoITAsZSl9LHY9ZnVuY3Rpb24oZSl7cmV0dXJuIGY/KHFvKGUpLHA/aChlWzBdLGVbMV0sZyk6aChlWzBdLGVbMV0pKTpwP2goZSxnKTpoKGUpfTtpZihkKXI9ZTtlbHNle2lmKCEobz1EdShlKSkpdGhyb3cgQ3UoZm8oZSkrXCIgaXMgbm90IGl0ZXJhYmxlXCIpO2lmKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lJiYobXUuQXJyYXk9PT1lfHx3dVtidV09PT1lKX0obykpe2ZvcihpPTAsYT1GaShlKTthPmk7aSsrKWlmKCh1PXYoZVtpXSkpJiZRcihPdSx1KSlyZXR1cm4gdTtyZXR1cm4gbmV3IEF1KCExKX1yPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwyP0R1KGUpOnQ7aWYoaG8obikpcmV0dXJuIHFvKEJyKG4sZSkpO3Rocm93IFN1KGZvKGUpK1wiIGlzIG5vdCBpdGVyYWJsZVwiKX0oZSxvKX1mb3Iocz1yLm5leHQ7IShsPUJyKHMscikpLmRvbmU7KXt0cnl7dT12KGwudmFsdWUpfWNhdGNoKGUpe3h1KHIsXCJ0aHJvd1wiLGUpfWlmKFwib2JqZWN0XCI9PXR5cGVvZiB1JiZ1JiZRcihPdSx1KSlyZXR1cm4gdX1yZXR1cm4gbmV3IEF1KCExKX0sQnU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09ZT9hcmd1bWVudHMubGVuZ3RoPDI/XCJcIjp0OmFhKGUpfSxGdT0hQXIoKGZ1bmN0aW9uKCl7dmFyIGU9RXJyb3IoXCJhXCIpO3JldHVybiEoXCJzdGFja1wiaW4gZSl8fChPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInN0YWNrXCIsanIoMSw3KSksNyE9PWUuc3RhY2spfSkpLFR1PVBvKFwidG9TdHJpbmdUYWdcIiksX3U9Q3IuRXJyb3IsUHU9W10ucHVzaCxqdT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsbz1RcihOdSx0aGlzKTtvdT9uPW91KG5ldyBfdSh2b2lkIDApLG8/dHUodGhpcyk6TnUpOihuPW8/dGhpczpTYShOdSksSm8obixUdSxcIkVycm9yXCIpKSxKbyhuLFwibWVzc2FnZVwiLEJ1KHQsXCJcIikpLEZ1JiZKbyhuLFwic3RhY2tcIixodShuLnN0YWNrLDEpKSxndShuLHIpO3ZhciBpPVtdO3JldHVybiBrdShlLFB1LHt0aGF0Oml9KSxKbyhuLFwiZXJyb3JzXCIsaSksbn07b3U/b3UoanUsX3UpOkhpKGp1LF91KTt2YXIgTnU9anUucHJvdG90eXBlPVNhKF91LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6anIoMSxqdSksbWVzc2FnZTpqcigxLFwiXCIpLG5hbWU6anIoMSxcIkFnZ3JlZ2F0ZUVycm9yXCIpfSk7Wmkoe2dsb2JhbDohMH0se0FnZ3JlZ2F0ZUVycm9yOmp1fSk7dmFyIEl1PVBvKFwidW5zY29wYWJsZXNcIiksTHU9QXJyYXkucHJvdG90eXBlO251bGw9PUx1W0l1XSYmWm8uZihMdSxJdSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOlNhKG51bGwpfSk7dmFyIFJ1LE11LHp1LCR1PWZ1bmN0aW9uKGUpe0x1W0l1XVtlXT0hMH0sSHU9UG8oXCJpdGVyYXRvclwiKSxWdT0hMTtbXS5rZXlzJiYoXCJuZXh0XCJpbih6dT1bXS5rZXlzKCkpPyhNdT10dSh0dSh6dSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJihSdT1NdSk6VnU9ITApO3ZhciBVdT1udWxsPT1SdXx8QXIoKGZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIFJ1W0h1XS5jYWxsKGUpIT09ZX0pKTtVdSYmKFJ1PXt9KSxZcihSdVtIdV0pfHxFaShSdSxIdSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgV3U9e0l0ZXJhdG9yUHJvdG90eXBlOlJ1LEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6VnV9LEd1PVpvLmYscXU9UG8oXCJ0b1N0cmluZ1RhZ1wiKSxLdT1mdW5jdGlvbihlLHQsbil7ZSYmIXhvKGU9bj9lOmUucHJvdG90eXBlLHF1KSYmR3UoZSxxdSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnR9KX0sWXU9V3UuSXRlcmF0b3JQcm90b3R5cGUsWHU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sWnU9d2kuUFJPUEVSLEp1PXdpLkNPTkZJR1VSQUJMRSxRdT1XdS5JdGVyYXRvclByb3RvdHlwZSxlcz1XdS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTLHRzPVBvKFwiaXRlcmF0b3JcIiksbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30scnM9ZnVuY3Rpb24oZSx0LG4scixvLGksYSl7IWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXQrXCIgSXRlcmF0b3JcIjtlLnByb3RvdHlwZT1TYShZdSx7bmV4dDpqcigrIXIsbil9KSxLdShlLG8sITEpLG11W29dPVh1fShuLHQscik7dmFyIHUscyxsLGM9ZnVuY3Rpb24oZSl7aWYoZT09PW8mJmcpcmV0dXJuIGc7aWYoIWVzJiZlIGluIHApcmV0dXJuIHBbZV07c3dpdGNoKGUpe2Nhc2VcImtleXNcIjpjYXNlXCJ2YWx1ZXNcIjpjYXNlXCJlbnRyaWVzXCI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzKX19LGY9dCtcIiBJdGVyYXRvclwiLGQ9ITEscD1lLnByb3RvdHlwZSxoPXBbdHNdfHxwW1wiQEBpdGVyYXRvclwiXXx8byYmcFtvXSxnPSFlcyYmaHx8YyhvKSx2PVwiQXJyYXlcIj09dCYmcC5lbnRyaWVzfHxoO2lmKHYmJih1PXR1KHYuY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJnUubmV4dCYmKHR1KHUpIT09UXUmJihvdT9vdSh1LFF1KTpZcih1W3RzXSl8fEVpKHUsdHMsbnMpKSxLdSh1LGYsITApKSxadSYmXCJ2YWx1ZXNcIj09byYmaCYmXCJ2YWx1ZXNcIiE9PWgubmFtZSYmKEp1P0pvKHAsXCJuYW1lXCIsXCJ2YWx1ZXNcIik6KGQ9ITAsZz1mdW5jdGlvbigpe3JldHVybiBCcihoLHRoaXMpfSkpLG8paWYocz17dmFsdWVzOmMoXCJ2YWx1ZXNcIiksa2V5czppP2c6YyhcImtleXNcIiksZW50cmllczpjKFwiZW50cmllc1wiKX0sYSlmb3IobCBpbiBzKShlc3x8ZHx8IShsIGluIHApKSYmRWkocCxsLHNbbF0pO2Vsc2UgWmkoe3RhcmdldDp0LHByb3RvOiEwLGZvcmNlZDplc3x8ZH0scyk7cmV0dXJuIHBbdHNdIT09ZyYmRWkocCx0cyxnLHtuYW1lOm99KSxtdVt0XT1nLHN9LG9zPXZpLnNldCxpcz12aS5nZXR0ZXJGb3IoXCJBcnJheSBJdGVyYXRvclwiKSxhcz1ycyhBcnJheSxcIkFycmF5XCIsKGZ1bmN0aW9uKGUsdCl7b3ModGhpcyx7dHlwZTpcIkFycmF5IEl0ZXJhdG9yXCIsdGFyZ2V0OktyKGUpLGluZGV4OjAsa2luZDp0fSl9KSwoZnVuY3Rpb24oKXt2YXIgZT1pcyh0aGlzKSx0PWUudGFyZ2V0LG49ZS5raW5kLHI9ZS5pbmRleCsrO3JldHVybiF0fHxyPj10Lmxlbmd0aD8oZS50YXJnZXQ9dm9pZCAwLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pOlwia2V5c1wiPT1uP3t2YWx1ZTpyLGRvbmU6ITF9OlwidmFsdWVzXCI9PW4/e3ZhbHVlOnRbcl0sZG9uZTohMX06e3ZhbHVlOltyLHRbcl1dLGRvbmU6ITF9fSksXCJ2YWx1ZXNcIik7bXUuQXJndW1lbnRzPW11LkFycmF5LCR1KFwia2V5c1wiKSwkdShcInZhbHVlc1wiKSwkdShcImVudHJpZXNcIik7dmFyIHVzPUdhLmNoYXJBdCxzcz12aS5zZXQsbHM9dmkuZ2V0dGVyRm9yKFwiU3RyaW5nIEl0ZXJhdG9yXCIpO3JzKFN0cmluZyxcIlN0cmluZ1wiLChmdW5jdGlvbihlKXtzcyh0aGlzLHt0eXBlOlwiU3RyaW5nIEl0ZXJhdG9yXCIsc3RyaW5nOmFhKGUpLGluZGV4OjB9KX0pLChmdW5jdGlvbigpe3ZhciBlLHQ9bHModGhpcyksbj10LnN0cmluZyxyPXQuaW5kZXg7cmV0dXJuIHI+PW4ubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KGU9dXMobixyKSx0LmluZGV4Kz1lLmxlbmd0aCx7dmFsdWU6ZSxkb25lOiExfSl9KSk7dmFyIGNzLGZzPXtDU1NSdWxlTGlzdDowLENTU1N0eWxlRGVjbGFyYXRpb246MCxDU1NWYWx1ZUxpc3Q6MCxDbGllbnRSZWN0TGlzdDowLERPTVJlY3RMaXN0OjAsRE9NU3RyaW5nTGlzdDowLERPTVRva2VuTGlzdDoxLERhdGFUcmFuc2Zlckl0ZW1MaXN0OjAsRmlsZUxpc3Q6MCxIVE1MQWxsQ29sbGVjdGlvbjowLEhUTUxDb2xsZWN0aW9uOjAsSFRNTEZvcm1FbGVtZW50OjAsSFRNTFNlbGVjdEVsZW1lbnQ6MCxNZWRpYUxpc3Q6MCxNaW1lVHlwZUFycmF5OjAsTmFtZWROb2RlTWFwOjAsTm9kZUxpc3Q6MSxQYWludFJlcXVlc3RMaXN0OjAsUGx1Z2luOjAsUGx1Z2luQXJyYXk6MCxTVkdMZW5ndGhMaXN0OjAsU1ZHTnVtYmVyTGlzdDowLFNWR1BhdGhTZWdMaXN0OjAsU1ZHUG9pbnRMaXN0OjAsU1ZHU3RyaW5nTGlzdDowLFNWR1RyYW5zZm9ybUxpc3Q6MCxTb3VyY2VCdWZmZXJMaXN0OjAsU3R5bGVTaGVldExpc3Q6MCxUZXh0VHJhY2tDdWVMaXN0OjAsVGV4dFRyYWNrTGlzdDowLFRvdWNoTGlzdDowfSxkcz16byhcInNwYW5cIikuY2xhc3NMaXN0LHBzPWRzJiZkcy5jb25zdHJ1Y3RvciYmZHMuY29uc3RydWN0b3IucHJvdG90eXBlLGhzPXBzPT09T2JqZWN0LnByb3RvdHlwZT92b2lkIDA6cHMsZ3M9UG8oXCJpdGVyYXRvclwiKSx2cz1QbyhcInRvU3RyaW5nVGFnXCIpLHlzPWFzLnZhbHVlcyxtcz1mdW5jdGlvbihlLHQpe2lmKGUpe2lmKGVbZ3NdIT09eXMpdHJ5e0pvKGUsZ3MseXMpfWNhdGNoKHQpe2VbZ3NdPXlzfWlmKGVbdnNdfHxKbyhlLHZzLHQpLGZzW3RdKWZvcih2YXIgbiBpbiBhcylpZihlW25dIT09YXNbbl0pdHJ5e0pvKGUsbixhc1tuXSl9Y2F0Y2godCl7ZVtuXT1hc1tuXX19fTtmb3IodmFyIGJzIGluIGZzKW1zKENyW2JzXSYmQ3JbYnNdLnByb3RvdHlwZSxicyk7aWYobXMoaHMsXCJET01Ub2tlbkxpc3RcIiksXCJ1bmRlZmluZWRcIj09dHlwZW9mIGdsb2JhbCl7aWYoXCJBY3RpdmVYT2JqZWN0XCJpbiB3aW5kb3cpe1wiXFxuIFNvcnJ5LCB3YW5nRWRpdG9yIFY1KyB2ZXJzaW9ucyBkbyBub3Qgc3VwcG9ydCBJRSBicm93c2VyLlwiLGNvbnNvbGUuZXJyb3IoXCLmirHmrYnvvIx3YW5nRWRpdG9yIFY1KyDniYjmnKzlvIDlp4vvvIzkuI3lnKjmlK/mjIEgSUUg5rWP6KeI5ZmoXFxuIFNvcnJ5LCB3YW5nRWRpdG9yIFY1KyB2ZXJzaW9ucyBkbyBub3Qgc3VwcG9ydCBJRSBicm93c2VyLlwiKX13cygpLEVzKCl9ZWxzZSBnbG9iYWwmJihudWxsPT09KGNzPWdsb2JhbC5uYXZpZ2F0b3IpfHx2b2lkIDA9PT1jcz92b2lkIDA6Y3MudXNlckFnZW50Lm1hdGNoKFwiUVFCcm93c2VyXCIpKSYmKHdzKCksRXMoKSk7ZnVuY3Rpb24gd3MoKXtcInVuZGVmaW5lZFwiPT10eXBlb2YgZ2xvYmFsVGhpcyYmKHdpbmRvdy5nbG9iYWxUaGlzPXdpbmRvdyl9ZnVuY3Rpb24gRXMoKXt2b2lkIDA9PT1TciYmKHdpbmRvdy5BZ2dyZWdhdGVFcnJvcj1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBFcnJvcih0KTtyZXR1cm4gbi5lcnJvcnM9ZSxufSl9dmFyIERzLFNzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVyblwiQXJyYXlcIj09QihlKX0seHM9ZnVuY3Rpb24oKXt9LENzPVtdLEFzPU0oXCJSZWZsZWN0XCIsXCJjb25zdHJ1Y3RcIiksT3M9L15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLyxrcz12KE9zLmV4ZWMpLEJzPSFPcy5leGVjKHhzKSxGcz1mdW5jdGlvbihlKXtpZigheShlKSlyZXR1cm4hMTt0cnl7cmV0dXJuIEFzKHhzLENzLGUpLCEwfWNhdGNoKGUpe3JldHVybiExfX0sVHM9IUFzfHxtKChmdW5jdGlvbigpe3ZhciBlO3JldHVybiBGcyhGcy5jYWxsKXx8IUZzKE9iamVjdCl8fCFGcygoZnVuY3Rpb24oKXtlPSEwfSkpfHxlfSkpP2Z1bmN0aW9uKGUpe2lmKCF5KGUpKXJldHVybiExO3N3aXRjaChvbihlKSl7Y2FzZVwiQXN5bmNGdW5jdGlvblwiOmNhc2VcIkdlbmVyYXRvckZ1bmN0aW9uXCI6Y2FzZVwiQXN5bmNHZW5lcmF0b3JGdW5jdGlvblwiOnJldHVybiExfXJldHVybiBCc3x8ISFrcyhPcyxPbihlKSl9OkZzLF9zPWJlKFwic3BlY2llc1wiKSxQcz1hLkFycmF5LGpzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyhmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gU3MoZSkmJih0PWUuY29uc3RydWN0b3IsKFRzKHQpJiYodD09PVBzfHxTcyh0LnByb3RvdHlwZSkpfHxJKHQpJiZudWxsPT09KHQ9dFtfc10pKSYmKHQ9dm9pZCAwKSksdm9pZCAwPT09dD9Qczp0fShlKSkoMD09PXQ/MDp0KX0sTnM9YmUoXCJzcGVjaWVzXCIpLElzPWJlKFwiaXNDb25jYXRTcHJlYWRhYmxlXCIpLExzPWEuVHlwZUVycm9yLFJzPXE+PTUxfHwhbSgoZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gZVtJc109ITEsZS5jb25jYXQoKVswXSE9PWV9KSksTXM9KERzPVwiY29uY2F0XCIscT49NTF8fCFtKChmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybihlLmNvbnN0cnVjdG9yPXt9KVtOc109ZnVuY3Rpb24oKXtyZXR1cm57Zm9vOjF9fSwxIT09ZVtEc10oQm9vbGVhbikuZm9vfSkpKSx6cz1mdW5jdGlvbihlKXtpZighSShlKSlyZXR1cm4hMTt2YXIgdD1lW0lzXTtyZXR1cm4gdm9pZCAwIT09dD8hIXQ6U3MoZSl9O1hlKHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwLGZvcmNlZDohUnN8fCFNc30se2NvbmNhdDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxpLGE9c2UodGhpcyksdT1qcyhhLDApLHM9MDtmb3IodD0tMSxyPWFyZ3VtZW50cy5sZW5ndGg7dDxyO3QrKylpZih6cyhpPS0xPT09dD9hOmFyZ3VtZW50c1t0XSkpe2lmKHMrKG89aHQoaSkpPjkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgTHMoXCJNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWRcIik7Zm9yKG49MDtuPG87bisrLHMrKyluIGluIGkmJkx0KHUscyxpW25dKX1lbHNle2lmKHM+PTkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgTHMoXCJNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWRcIik7THQodSxzKyssaSl9cmV0dXJuIHUubGVuZ3RoPXMsdX19KTt2YXIgJHM9eHQuZixIcz1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W10sVnM9e2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIEhzJiZcIldpbmRvd1wiPT1CKGUpP2Z1bmN0aW9uKGUpe3RyeXtyZXR1cm4gJHMoZSl9Y2F0Y2goZSl7cmV0dXJuIHp0KEhzKX19KGUpOiRzKE4oZSkpfX0sVXM9dihbXS5zbGljZSksV3M9e2Y6YmV9LEdzPUdlLmYscXM9ZnVuY3Rpb24oZSl7dmFyIHQ9TC5TeW1ib2x8fChMLlN5bWJvbD17fSk7Y2UodCxlKXx8R3ModCxlLHt2YWx1ZTpXcy5mKGUpfSl9LEtzPXYoW10ucHVzaCksWXM9ZnVuY3Rpb24oZSl7dmFyIHQ9MT09ZSxuPTI9PWUscj0zPT1lLG89ND09ZSxpPTY9PWUsYT03PT1lLHU9NT09ZXx8aTtyZXR1cm4gZnVuY3Rpb24ocyxsLGMsZil7Zm9yKHZhciBkLHAsaD1zZShzKSxnPV8oaCksdj1NZShsLGMpLHk9aHQoZyksbT0wLGI9Znx8anMsdz10P2Iocyx5KTpufHxhP2IocywwKTp2b2lkIDA7eT5tO20rKylpZigodXx8bSBpbiBnKSYmKHA9dihkPWdbbV0sbSxoKSxlKSlpZih0KXdbbV09cDtlbHNlIGlmKHApc3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIGQ7Y2FzZSA2OnJldHVybiBtO2Nhc2UgMjpLcyh3LGQpfWVsc2Ugc3dpdGNoKGUpe2Nhc2UgNDpyZXR1cm4hMTtjYXNlIDc6S3ModyxkKX1yZXR1cm4gaT8tMTpyfHxvP286d319LFhzPXtmb3JFYWNoOllzKDApLG1hcDpZcygxKSxmaWx0ZXI6WXMoMiksc29tZTpZcygzKSxldmVyeTpZcyg0KSxmaW5kOllzKDUpLGZpbmRJbmRleDpZcyg2KSxmaWx0ZXJSZWplY3Q6WXMoNyl9LmZvckVhY2gsWnM9SmUoXCJoaWRkZW5cIiksSnM9YmUoXCJ0b1ByaW1pdGl2ZVwiKSxRcz16bi5zZXQsZWw9em4uZ2V0dGVyRm9yKFwiU3ltYm9sXCIpLHRsPU9iamVjdC5wcm90b3R5cGUsbmw9YS5TeW1ib2wscmw9bmwmJm5sLnByb3RvdHlwZSxvbD1hLlR5cGVFcnJvcixpbD1hLlFPYmplY3QsYWw9TShcIkpTT05cIixcInN0cmluZ2lmeVwiKSx1bD1GZS5mLHNsPUdlLmYsbGw9VnMuZixjbD1DLmYsZmw9dihbXS5wdXNoKSxkbD1hZShcInN5bWJvbHNcIikscGw9YWUoXCJvcC1zeW1ib2xzXCIpLGhsPWFlKFwic3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeVwiKSxnbD1hZShcInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnlcIiksdmw9YWUoXCJ3a3NcIikseWw9IWlsfHwhaWwucHJvdG90eXBlfHwhaWwucHJvdG90eXBlLmZpbmRDaGlsZCxtbD1iJiZtKChmdW5jdGlvbigpe3JldHVybiA3IT1JdChzbCh7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHNsKHRoaXMsXCJhXCIse3ZhbHVlOjd9KS5hfX0pKS5hfSkpP2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj11bCh0bCx0KTtyJiZkZWxldGUgdGxbdF0sc2woZSx0LG4pLHImJmUhPT10bCYmc2wodGwsdCxyKX06c2wsYmw9ZnVuY3Rpb24oZSx0KXt2YXIgbj1kbFtlXT1JdChybCk7cmV0dXJuIFFzKG4se3R5cGU6XCJTeW1ib2xcIix0YWc6ZSxkZXNjcmlwdGlvbjp0fSksYnx8KG4uZGVzY3JpcHRpb249dCksbn0sd2w9ZnVuY3Rpb24oZSx0LG4pe2U9PT10bCYmd2wocGwsdCxuKSxIZShlKTt2YXIgcj1TZSh0KTtyZXR1cm4gSGUobiksY2UoZGwscik/KG4uZW51bWVyYWJsZT8oY2UoZSxacykmJmVbWnNdW3JdJiYoZVtac11bcl09ITEpLG49SXQobix7ZW51bWVyYWJsZTpBKDAsITEpfSkpOihjZShlLFpzKXx8c2woZSxacyxBKDEse30pKSxlW1pzXVtyXT0hMCksbWwoZSxyLG4pKTpzbChlLHIsbil9LEVsPWZ1bmN0aW9uKGUsdCl7SGUoZSk7dmFyIG49Tih0KSxyPWt0KG4pLmNvbmNhdChDbChuKSk7cmV0dXJuIFhzKHIsKGZ1bmN0aW9uKHQpe2ImJiFFKERsLG4sdCl8fHdsKGUsdCxuW3RdKX0pKSxlfSxEbD1mdW5jdGlvbihlKXt2YXIgdD1TZShlKSxuPUUoY2wsdGhpcyx0KTtyZXR1cm4hKHRoaXM9PT10bCYmY2UoZGwsdCkmJiFjZShwbCx0KSkmJighKG58fCFjZSh0aGlzLHQpfHwhY2UoZGwsdCl8fGNlKHRoaXMsWnMpJiZ0aGlzW1pzXVt0XSl8fG4pfSxTbD1mdW5jdGlvbihlLHQpe3ZhciBuPU4oZSkscj1TZSh0KTtpZihuIT09dGx8fCFjZShkbCxyKXx8Y2UocGwscikpe3ZhciBvPXVsKG4scik7cmV0dXJuIW98fCFjZShkbCxyKXx8Y2UobixacykmJm5bWnNdW3JdfHwoby5lbnVtZXJhYmxlPSEwKSxvfX0seGw9ZnVuY3Rpb24oZSl7dmFyIHQ9bGwoTihlKSksbj1bXTtyZXR1cm4gWHModCwoZnVuY3Rpb24oZSl7Y2UoZGwsZSl8fGNlKHl0LGUpfHxmbChuLGUpfSkpLG59LENsPWZ1bmN0aW9uKGUpe3ZhciB0PWU9PT10bCxuPWxsKHQ/cGw6TihlKSkscj1bXTtyZXR1cm4gWHMobiwoZnVuY3Rpb24oZSl7IWNlKGRsLGUpfHx0JiYhY2UodGwsZSl8fGZsKHIsZGxbZV0pfSkpLHJ9O2lmKEt8fChybD0obmw9ZnVuY3Rpb24oKXtpZih6KHJsLHRoaXMpKXRocm93IG9sKFwiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yXCIpO3ZhciBlPWFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9nbihhcmd1bWVudHNbMF0pOnZvaWQgMCx0PWhlKGUpLG49ZnVuY3Rpb24oZSl7dGhpcz09PXRsJiZFKG4scGwsZSksY2UodGhpcyxacykmJmNlKHRoaXNbWnNdLHQpJiYodGhpc1tac11bdF09ITEpLG1sKHRoaXMsdCxBKDEsZSkpfTtyZXR1cm4gYiYmeWwmJm1sKHRsLHQse2NvbmZpZ3VyYWJsZTohMCxzZXQ6bn0pLGJsKHQsZSl9KS5wcm90b3R5cGUsV24ocmwsXCJ0b1N0cmluZ1wiLChmdW5jdGlvbigpe3JldHVybiBlbCh0aGlzKS50YWd9KSksV24obmwsXCJ3aXRob3V0U2V0dGVyXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBibChoZShlKSxlKX0pKSxDLmY9RGwsR2UuZj13bCxGZS5mPVNsLHh0LmY9VnMuZj14bCxDdC5mPUNsLFdzLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIGJsKGJlKGUpLGUpfSxiJiZzbChybCxcImRlc2NyaXB0aW9uXCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZWwodGhpcykuZGVzY3JpcHRpb259fSkpLFhlKHtnbG9iYWw6ITAsd3JhcDohMCxmb3JjZWQ6IUssc2hhbTohS30se1N5bWJvbDpubH0pLFhzKGt0KHZsKSwoZnVuY3Rpb24oZSl7cXMoZSl9KSksWGUoe3RhcmdldDpcIlN5bWJvbFwiLHN0YXQ6ITAsZm9yY2VkOiFLfSx7Zm9yOmZ1bmN0aW9uKGUpe3ZhciB0PWduKGUpO2lmKGNlKGhsLHQpKXJldHVybiBobFt0XTt2YXIgbj1ubCh0KTtyZXR1cm4gaGxbdF09bixnbFtuXT10LG59LGtleUZvcjpmdW5jdGlvbihlKXtpZighWihlKSl0aHJvdyBvbChlK1wiIGlzIG5vdCBhIHN5bWJvbFwiKTtpZihjZShnbCxlKSlyZXR1cm4gZ2xbZV19LHVzZVNldHRlcjpmdW5jdGlvbigpe3lsPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXt5bD0hMX19KSxYZSh7dGFyZ2V0OlwiT2JqZWN0XCIsc3RhdDohMCxmb3JjZWQ6IUssc2hhbTohYn0se2NyZWF0ZTpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10P0l0KGUpOkVsKEl0KGUpLHQpfSxkZWZpbmVQcm9wZXJ0eTp3bCxkZWZpbmVQcm9wZXJ0aWVzOkVsLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpTbH0pLFhlKHt0YXJnZXQ6XCJPYmplY3RcIixzdGF0OiEwLGZvcmNlZDohS30se2dldE93blByb3BlcnR5TmFtZXM6eGwsZ2V0T3duUHJvcGVydHlTeW1ib2xzOkNsfSksWGUoe3RhcmdldDpcIk9iamVjdFwiLHN0YXQ6ITAsZm9yY2VkOm0oKGZ1bmN0aW9uKCl7Q3QuZigxKX0pKX0se2dldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbihlKXtyZXR1cm4gQ3QuZihzZShlKSl9fSksYWwpe3ZhciBBbD0hS3x8bSgoZnVuY3Rpb24oKXt2YXIgZT1ubCgpO3JldHVyblwiW251bGxdXCIhPWFsKFtlXSl8fFwie31cIiE9YWwoe2E6ZX0pfHxcInt9XCIhPWFsKE9iamVjdChlKSl9KSk7WGUoe3RhcmdldDpcIkpTT05cIixzdGF0OiEwLGZvcmNlZDpBbH0se3N0cmluZ2lmeTpmdW5jdGlvbihlLHQsbil7dmFyIHI9VXMoYXJndW1lbnRzKSxvPXQ7aWYoKEkodCl8fHZvaWQgMCE9PWUpJiYhWihlKSlyZXR1cm4gU3ModCl8fCh0PWZ1bmN0aW9uKGUsdCl7aWYoeShvKSYmKHQ9RShvLHRoaXMsZSx0KSksIVoodCkpcmV0dXJuIHR9KSxyWzFdPXQsZihhbCxudWxsLHIpfX0pfWlmKCFybFtKc10pe3ZhciBPbD1ybC52YWx1ZU9mO1duKHJsLEpzLChmdW5jdGlvbihlKXtyZXR1cm4gRShPbCx0aGlzKX0pKX1RbihubCxcIlN5bWJvbFwiKSx5dFtac109ITAscXMoXCJhc3luY0l0ZXJhdG9yXCIpLHFzKFwiaGFzSW5zdGFuY2VcIikscXMoXCJpc0NvbmNhdFNwcmVhZGFibGVcIikscXMoXCJpdGVyYXRvclwiKSxxcyhcIm1hdGNoXCIpLHFzKFwibWF0Y2hBbGxcIikscXMoXCJyZXBsYWNlXCIpLHFzKFwic2VhcmNoXCIpLHFzKFwic3BlY2llc1wiKSxxcyhcInNwbGl0XCIpLHFzKFwidG9QcmltaXRpdmVcIikscXMoXCJ0b1N0cmluZ1RhZ1wiKSxxcyhcInVuc2NvcGFibGVzXCIpLFFuKGEuSlNPTixcIkpTT05cIiwhMCk7dmFyIGtsPUwuU3ltYm9sO3FzKFwiYXN5bmNEaXNwb3NlXCIpLHFzKFwiZGlzcG9zZVwiKSxxcyhcIm1hdGNoZXJcIikscXMoXCJtZXRhZGF0YVwiKSxxcyhcIm9ic2VydmFibGVcIikscXMoXCJwYXR0ZXJuTWF0Y2hcIikscXMoXCJyZXBsYWNlQWxsXCIpO3ZhciBCbD1rbCxGbD1Xcy5mKFwiaXRlcmF0b3JcIiksVGw9bigoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBCbCYmXCJzeW1ib2xcIj09dHlwZW9mIEZsPyhlLmV4cG9ydHM9dD1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMCk6KGUuZXhwb3J0cz10PWZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBCbCYmZS5jb25zdHJ1Y3Rvcj09PUJsJiZlIT09QmwucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMCksdChuKX1lLmV4cG9ydHM9dCxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHMsZS5leHBvcnRzLl9fZXNNb2R1bGU9ITB9KSksX2w9dChUbCksUGw9VW8uZixqbD1BcigoZnVuY3Rpb24oKXtQbCgxKX0pKTtpZihaaSh7dGFyZ2V0OlwiT2JqZWN0XCIsc3RhdDohMCxmb3JjZWQ6IU9yfHxqbCxzaGFtOiFPcn0se2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbihlLHQpe3JldHVybiBQbChLcihlKSx0KX19KSxcIm9iamVjdFwiPT09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBnbG9iYWw/XCJ1bmRlZmluZWRcIjpfbChnbG9iYWwpKSl7dmFyIE5sPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLFwid2luZG93XCIpO2dsb2JhbC53aW5kb3cmJiFObC5zZXR8fChnbG9iYWwud2luZG93PWdsb2JhbCxnbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKCl7fSxnbG9iYWwubmF2aWdhdG9yPXt1c2VyQWdlbnQ6XCJcIn0sZ2xvYmFsLmxvY2F0aW9uPXtob3N0bmFtZTpcIjAuMC4wLjBcIixwb3J0OjAscHJvdG9jb2w6XCJodHRwOlwifSxnbG9iYWwuYnRvYT1mdW5jdGlvbigpe30sZ2xvYmFsLmNyeXB0bz17Z2V0UmFuZG9tVmFsdWVzOmZ1bmN0aW9uKGUpe3JldHVybiBub2RlQ3J5cHRvLnJhbmRvbUZpbGxTeW5jKGUpfX0pLG51bGwhPWdsb2JhbC5kb2N1bWVudCYmbnVsbD09Z2xvYmFsLmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lJiYoZ2xvYmFsLmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuW119KX1cbi8qIVxuICogaXMtcGxhaW4tb2JqZWN0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1wbGFpbi1vYmplY3Q+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEpvbiBTY2hsaW5rZXJ0LlxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovZnVuY3Rpb24gSWwoZSl7cmV0dXJuXCJbb2JqZWN0IE9iamVjdF1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX1mdW5jdGlvbiBMbChlKXt2YXIgdCxuO3JldHVybiExIT09SWwoZSkmJih2b2lkIDA9PT0odD1lLmNvbnN0cnVjdG9yKXx8ITEhPT1JbChuPXQucHJvdG90eXBlKSYmITEhPT1uLmhhc093blByb3BlcnR5KFwiaXNQcm90b3R5cGVPZlwiKSl9ZnVuY3Rpb24gUmwoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07dGhyb3cgRXJyb3IoXCJbSW1tZXJdIG1pbmlmaWVkIGVycm9yIG5yOiBcIitlKyhuLmxlbmd0aD9cIiBcIituLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuXCInXCIrZStcIidcIn0pKS5qb2luKFwiLFwiKTpcIlwiKStcIi4gRmluZCB0aGUgZnVsbCBlcnJvciBhdDogaHR0cHM6Ly9iaXQubHkvM2NYRUtXZlwiKX1mdW5jdGlvbiBNbChlKXtyZXR1cm4hIWUmJiEhZVt4Y119ZnVuY3Rpb24gemwoZSl7cmV0dXJuISFlJiYoZnVuY3Rpb24oZSl7aWYoIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtpZihudWxsPT09dClyZXR1cm4hMDt2YXIgbj1PYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LFwiY29uc3RydWN0b3JcIikmJnQuY29uc3RydWN0b3I7cmV0dXJuIG49PT1PYmplY3R8fFwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJkZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwobik9PT1DY30oZSl8fEFycmF5LmlzQXJyYXkoZSl8fCEhZVtTY118fCEhZS5jb25zdHJ1Y3RvcltTY118fFdsKGUpfHxHbChlKSl9ZnVuY3Rpb24gJGwoZSx0LG4pe3ZvaWQgMD09PW4mJihuPSExKSwwPT09SGwoZSk/KG4/T2JqZWN0LmtleXM6QWMpKGUpLmZvckVhY2goKGZ1bmN0aW9uKHIpe24mJlwic3ltYm9sXCI9PXR5cGVvZiByfHx0KHIsZVtyXSxlKX0pKTplLmZvckVhY2goKGZ1bmN0aW9uKG4scil7cmV0dXJuIHQocixuLGUpfSkpfWZ1bmN0aW9uIEhsKGUpe3ZhciB0PWVbeGNdO3JldHVybiB0P3QuaT4zP3QuaS00OnQuaTpBcnJheS5pc0FycmF5KGUpPzE6V2woZSk/MjpHbChlKT8zOjB9ZnVuY3Rpb24gVmwoZSx0KXtyZXR1cm4gMj09PUhsKGUpP2UuaGFzKHQpOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfWZ1bmN0aW9uIFVsKGUsdCxuKXt2YXIgcj1IbChlKTsyPT09cj9lLnNldCh0LG4pOjM9PT1yPyhlLmRlbGV0ZSh0KSxlLmFkZChuKSk6ZVt0XT1ufWZ1bmN0aW9uIFdsKGUpe3JldHVybiBiYyYmZSBpbnN0YW5jZW9mIE1hcH1mdW5jdGlvbiBHbChlKXtyZXR1cm4gd2MmJmUgaW5zdGFuY2VvZiBTZXR9ZnVuY3Rpb24gcWwoZSl7cmV0dXJuIGUub3x8ZS50fWZ1bmN0aW9uIEtsKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUpO3ZhciB0PU9jKGUpO2RlbGV0ZSB0W3hjXTtmb3IodmFyIG49QWModCkscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbz1uW3JdLGk9dFtvXTshMT09PWkud3JpdGFibGUmJihpLndyaXRhYmxlPSEwLGkuY29uZmlndXJhYmxlPSEwKSwoaS5nZXR8fGkuc2V0KSYmKHRbb109e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOmkuZW51bWVyYWJsZSx2YWx1ZTplW29dfSl9cmV0dXJuIE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpLHQpfWZ1bmN0aW9uIFlsKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSExKSxabChlKXx8TWwoZSl8fCF6bChlKXx8KEhsKGUpPjEmJihlLnNldD1lLmFkZD1lLmNsZWFyPWUuZGVsZXRlPVhsKSxPYmplY3QuZnJlZXplKGUpLHQmJiRsKGUsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFlsKHQsITApfSksITApKSxlfWZ1bmN0aW9uIFhsKCl7UmwoMil9ZnVuY3Rpb24gWmwoZSl7cmV0dXJuIG51bGw9PWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlfHxPYmplY3QuaXNGcm96ZW4oZSl9ZnVuY3Rpb24gSmwoZSl7dmFyIHQ9a2NbZV07cmV0dXJuIHR8fFJsKDE4LGUpLHR9ZnVuY3Rpb24gUWwoKXtyZXR1cm4geWN9ZnVuY3Rpb24gZWMoZSx0KXt0JiYoSmwoXCJQYXRjaGVzXCIpLGUudT1bXSxlLnM9W10sZS52PXQpfWZ1bmN0aW9uIHRjKGUpe25jKGUpLGUucC5mb3JFYWNoKG9jKSxlLnA9bnVsbH1mdW5jdGlvbiBuYyhlKXtlPT09eWMmJih5Yz1lLmwpfWZ1bmN0aW9uIHJjKGUpe3JldHVybiB5Yz17cDpbXSxsOnljLGg6ZSxtOiEwLF86MH19ZnVuY3Rpb24gb2MoZSl7dmFyIHQ9ZVt4Y107MD09PXQuaXx8MT09PXQuaT90LmooKTp0Lk89ITB9ZnVuY3Rpb24gaWMoZSx0KXt0Ll89dC5wLmxlbmd0aDt2YXIgbj10LnBbMF0scj12b2lkIDAhPT1lJiZlIT09bjtyZXR1cm4gdC5oLmd8fEpsKFwiRVM1XCIpLlModCxlLHIpLHI/KG5beGNdLlAmJih0Yyh0KSxSbCg0KSksemwoZSkmJihlPWFjKHQsZSksdC5sfHxzYyh0LGUpKSx0LnUmJkpsKFwiUGF0Y2hlc1wiKS5NKG5beGNdLGUsdC51LHQucykpOmU9YWModCxuLFtdKSx0Yyh0KSx0LnUmJnQudih0LnUsdC5zKSxlIT09RGM/ZTp2b2lkIDB9ZnVuY3Rpb24gYWMoZSx0LG4pe2lmKFpsKHQpKXJldHVybiB0O3ZhciByPXRbeGNdO2lmKCFyKXJldHVybiAkbCh0LChmdW5jdGlvbihvLGkpe3JldHVybiB1YyhlLHIsdCxvLGksbil9KSwhMCksdDtpZihyLkEhPT1lKXJldHVybiB0O2lmKCFyLlApcmV0dXJuIHNjKGUsci50LCEwKSxyLnQ7aWYoIXIuSSl7ci5JPSEwLHIuQS5fLS07dmFyIG89ND09PXIuaXx8NT09PXIuaT9yLm89S2woci5rKTpyLm87JGwoMz09PXIuaT9uZXcgU2V0KG8pOm8sKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIHVjKGUscixvLHQsaSxuKX0pKSxzYyhlLG8sITEpLG4mJmUudSYmSmwoXCJQYXRjaGVzXCIpLlIocixuLGUudSxlLnMpfXJldHVybiByLm99ZnVuY3Rpb24gdWMoZSx0LG4scixvLGkpe2lmKE1sKG8pKXt2YXIgYT1hYyhlLG8saSYmdCYmMyE9PXQuaSYmIVZsKHQuRCxyKT9pLmNvbmNhdChyKTp2b2lkIDApO2lmKFVsKG4scixhKSwhTWwoYSkpcmV0dXJuO2UubT0hMX1pZih6bChvKSYmIVpsKG8pKXtpZighZS5oLkYmJmUuXzwxKXJldHVybjthYyhlLG8pLHQmJnQuQS5sfHxzYyhlLG8pfX1mdW5jdGlvbiBzYyhlLHQsbil7dm9pZCAwPT09biYmKG49ITEpLGUuaC5GJiZlLm0mJllsKHQsbil9ZnVuY3Rpb24gbGMoZSx0KXt2YXIgbj1lW3hjXTtyZXR1cm4obj9xbChuKTplKVt0XX1mdW5jdGlvbiBjYyhlLHQpe2lmKHQgaW4gZSlmb3IodmFyIG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO247KXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7aWYocilyZXR1cm4gcjtuPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKX19ZnVuY3Rpb24gZmMoZSl7ZS5QfHwoZS5QPSEwLGUubCYmZmMoZS5sKSl9ZnVuY3Rpb24gZGMoZSl7ZS5vfHwoZS5vPUtsKGUudCkpfWZ1bmN0aW9uIHBjKGUsdCxuKXt2YXIgcj1XbCh0KT9KbChcIk1hcFNldFwiKS5OKHQsbik6R2wodCk/SmwoXCJNYXBTZXRcIikuVCh0LG4pOmUuZz9mdW5jdGlvbihlLHQpe3ZhciBuPUFycmF5LmlzQXJyYXkoZSkscj17aTpuPzE6MCxBOnQ/dC5BOlFsKCksUDohMSxJOiExLEQ6e30sbDp0LHQ6ZSxrOm51bGwsbzpudWxsLGo6bnVsbCxDOiExfSxvPXIsaT1CYztuJiYobz1bcl0saT1GYyk7dmFyIGE9UHJveHkucmV2b2NhYmxlKG8saSksdT1hLnJldm9rZSxzPWEucHJveHk7cmV0dXJuIHIuaz1zLHIuaj11LHN9KHQsbik6SmwoXCJFUzVcIikuSih0LG4pO3JldHVybihuP24uQTpRbCgpKS5wLnB1c2gocikscn1mdW5jdGlvbiBoYyhlKXtyZXR1cm4gTWwoZSl8fFJsKDIyLGUpLGZ1bmN0aW9uIGUodCl7aWYoIXpsKHQpKXJldHVybiB0O3ZhciBuLHI9dFt4Y10sbz1IbCh0KTtpZihyKXtpZighci5QJiYoci5pPDR8fCFKbChcIkVTNVwiKS5LKHIpKSlyZXR1cm4gci50O3IuST0hMCxuPWdjKHQsbyksci5JPSExfWVsc2Ugbj1nYyh0LG8pO3JldHVybiAkbChuLChmdW5jdGlvbih0LG8pe3ImJmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDI9PT1IbChlKT9lLmdldCh0KTplW3RdfShyLnQsdCk9PT1vfHxVbChuLHQsZShvKSl9KSksMz09PW8/bmV3IFNldChuKTpufShlKX1mdW5jdGlvbiBnYyhlLHQpe3N3aXRjaCh0KXtjYXNlIDI6cmV0dXJuIG5ldyBNYXAoZSk7Y2FzZSAzOnJldHVybiBBcnJheS5mcm9tKGUpfXJldHVybiBLbChlKX12YXIgdmMseWMsbWM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbChcInhcIiksYmM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1hcCx3Yz1cInVuZGVmaW5lZFwiIT10eXBlb2YgU2V0LEVjPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm94eSYmdm9pZCAwIT09UHJveHkucmV2b2NhYmxlJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgUmVmbGVjdCxEYz1tYz9TeW1ib2wuZm9yKFwiaW1tZXItbm90aGluZ1wiKTooKHZjPXt9KVtcImltbWVyLW5vdGhpbmdcIl09ITAsdmMpLFNjPW1jP1N5bWJvbC5mb3IoXCJpbW1lci1kcmFmdGFibGVcIik6XCJfXyRpbW1lcl9kcmFmdGFibGVcIix4Yz1tYz9TeW1ib2wuZm9yKFwiaW1tZXItc3RhdGVcIik6XCJfXyRpbW1lcl9zdGF0ZVwiLENjPVwiXCIrT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3RvcixBYz1cInVuZGVmaW5lZFwiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5vd25LZXlzP1JlZmxlY3Qub3duS2V5czp2b2lkIDAhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKSl9Ok9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzLE9jPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfHxmdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gQWMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7dFtuXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbil9KSksdH0sa2M9e30sQmM9e2dldDpmdW5jdGlvbihlLHQpe2lmKHQ9PT14YylyZXR1cm4gZTt2YXIgbj1xbChlKTtpZighVmwobix0KSlyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3ZhciByLG89Y2ModCxuKTtyZXR1cm4gbz9cInZhbHVlXCJpbiBvP28udmFsdWU6bnVsbD09PShyPW8uZ2V0KXx8dm9pZCAwPT09cj92b2lkIDA6ci5jYWxsKGUuayk6dm9pZCAwfShlLG4sdCk7dmFyIHI9blt0XTtyZXR1cm4gZS5JfHwhemwocik/cjpyPT09bGMoZS50LHQpPyhkYyhlKSxlLm9bdF09cGMoZS5BLmgscixlKSk6cn0saGFzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQgaW4gcWwoZSl9LG93bktleXM6ZnVuY3Rpb24oZSl7cmV0dXJuIFJlZmxlY3Qub3duS2V5cyhxbChlKSl9LHNldDpmdW5jdGlvbihlLHQsbil7dmFyIHI9Y2MocWwoZSksdCk7aWYobnVsbD09cj92b2lkIDA6ci5zZXQpcmV0dXJuIHIuc2V0LmNhbGwoZS5rLG4pLCEwO2lmKCFlLlApe3ZhciBvPWxjKHFsKGUpLHQpLGk9bnVsbD09bz92b2lkIDA6b1t4Y107aWYoaSYmaS50PT09bilyZXR1cm4gZS5vW3RdPW4sZS5EW3RdPSExLCEwO2lmKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10PzAhPT1lfHwxL2U9PTEvdDplIT1lJiZ0IT10fShuLG8pJiYodm9pZCAwIT09bnx8VmwoZS50LHQpKSlyZXR1cm4hMDtkYyhlKSxmYyhlKX1yZXR1cm4gZS5vW3RdPT09biYmXCJudW1iZXJcIiE9dHlwZW9mIG4mJih2b2lkIDAhPT1ufHx0IGluIGUubyl8fChlLm9bdF09bixlLkRbdF09ITAsITApfSxkZWxldGVQcm9wZXJ0eTpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDAhPT1sYyhlLnQsdCl8fHQgaW4gZS50PyhlLkRbdF09ITEsZGMoZSksZmMoZSkpOmRlbGV0ZSBlLkRbdF0sZS5vJiZkZWxldGUgZS5vW3RdLCEwfSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZnVuY3Rpb24oZSx0KXt2YXIgbj1xbChlKSxyPVJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIHI/e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZToxIT09ZS5pfHxcImxlbmd0aFwiIT09dCxlbnVtZXJhYmxlOnIuZW51bWVyYWJsZSx2YWx1ZTpuW3RdfTpyfSxkZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbigpe1JsKDExKX0sZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihlLnQpfSxzZXRQcm90b3R5cGVPZjpmdW5jdGlvbigpe1JsKDEyKX19LEZjPXt9OyRsKEJjLChmdW5jdGlvbihlLHQpe0ZjW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c1swXT1hcmd1bWVudHNbMF1bMF0sdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSkpLEZjLmRlbGV0ZVByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEJjLmRlbGV0ZVByb3BlcnR5LmNhbGwodGhpcyxlWzBdLHQpfSxGYy5zZXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBCYy5zZXQuY2FsbCh0aGlzLGVbMF0sdCxuLGVbMF0pfTt2YXIgVGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PXRoaXM7dGhpcy5nPUVjLHRoaXMuRj0hMCx0aGlzLnByb2R1Y2U9ZnVuY3Rpb24oZSxuLHIpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIG4pe3ZhciBvPW47bj1lO3ZhciBpPXQ7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dm9pZCAwPT09ZSYmKGU9byk7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1BcnJheShyPjE/ci0xOjApLHU9MTt1PHI7dSsrKWFbdS0xXT1hcmd1bWVudHNbdV07cmV0dXJuIGkucHJvZHVjZShlLChmdW5jdGlvbihlKXt2YXIgcjtyZXR1cm4ocj1uKS5jYWxsLmFwcGx5KHIsW3QsZV0uY29uY2F0KGEpKX0pKX19dmFyIGE7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgbiYmUmwoNiksdm9pZCAwIT09ciYmXCJmdW5jdGlvblwiIT10eXBlb2YgciYmUmwoNyksemwoZSkpe3ZhciB1PXJjKHQpLHM9cGModCxlLHZvaWQgMCksbD0hMDt0cnl7YT1uKHMpLGw9ITF9ZmluYWxseXtsP3RjKHUpOm5jKHUpfXJldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm9taXNlJiZhIGluc3RhbmNlb2YgUHJvbWlzZT9hLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlYyh1LHIpLGljKGUsdSl9KSwoZnVuY3Rpb24oZSl7dGhyb3cgdGModSksZX0pKTooZWModSxyKSxpYyhhLHUpKX1pZighZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUpe2lmKChhPW4oZSkpPT09RGMpcmV0dXJuO3JldHVybiB2b2lkIDA9PT1hJiYoYT1lKSx0LkYmJllsKGEsITApLGF9UmwoMjEsZSl9LHRoaXMucHJvZHVjZVdpdGhQYXRjaGVzPWZ1bmN0aW9uKGUsbil7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9mdW5jdGlvbihuKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5KHI+MT9yLTE6MCksaT0xO2k8cjtpKyspb1tpLTFdPWFyZ3VtZW50c1tpXTtyZXR1cm4gdC5wcm9kdWNlV2l0aFBhdGNoZXMobiwoZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkodm9pZCAwLFt0XS5jb25jYXQobykpfSkpfTpbdC5wcm9kdWNlKGUsbiwoZnVuY3Rpb24oZSx0KXtyPWUsbz10fSkpLHIsb107dmFyIHIsb30sXCJib29sZWFuXCI9PXR5cGVvZihudWxsPT1lP3ZvaWQgMDplLnVzZVByb3hpZXMpJiZ0aGlzLnNldFVzZVByb3hpZXMoZS51c2VQcm94aWVzKSxcImJvb2xlYW5cIj09dHlwZW9mKG51bGw9PWU/dm9pZCAwOmUuYXV0b0ZyZWV6ZSkmJnRoaXMuc2V0QXV0b0ZyZWV6ZShlLmF1dG9GcmVlemUpfXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmNyZWF0ZURyYWZ0PWZ1bmN0aW9uKGUpe3psKGUpfHxSbCg4KSxNbChlKSYmKGU9aGMoZSkpO3ZhciB0PXJjKHRoaXMpLG49cGModGhpcyxlLHZvaWQgMCk7cmV0dXJuIG5beGNdLkM9ITAsbmModCksbn0sdC5maW5pc2hEcmFmdD1mdW5jdGlvbihlLHQpe3ZhciBuPShlJiZlW3hjXSkuQTtyZXR1cm4gZWMobix0KSxpYyh2b2lkIDAsbil9LHQuc2V0QXV0b0ZyZWV6ZT1mdW5jdGlvbihlKXt0aGlzLkY9ZX0sdC5zZXRVc2VQcm94aWVzPWZ1bmN0aW9uKGUpe2UmJiFFYyYmUmwoMjApLHRoaXMuZz1lfSx0LmFwcGx5UGF0Y2hlcz1mdW5jdGlvbihlLHQpe3ZhciBuO2ZvcihuPXQubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciByPXRbbl07aWYoMD09PXIucGF0aC5sZW5ndGgmJlwicmVwbGFjZVwiPT09ci5vcCl7ZT1yLnZhbHVlO2JyZWFrfX1uPi0xJiYodD10LnNsaWNlKG4rMSkpO3ZhciBvPUpsKFwiUGF0Y2hlc1wiKS4kO3JldHVybiBNbChlKT9vKGUsdCk6dGhpcy5wcm9kdWNlKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBvKGUsdCl9KSl9LGV9KCksX2M9bmV3IFRjLFBjPV9jLnByb2R1Y2U7X2MucHJvZHVjZVdpdGhQYXRjaGVzLmJpbmQoX2MpLF9jLnNldEF1dG9GcmVlemUuYmluZChfYyksX2Muc2V0VXNlUHJveGllcy5iaW5kKF9jKSxfYy5hcHBseVBhdGNoZXMuYmluZChfYyk7dmFyIGpjPV9jLmNyZWF0ZURyYWZ0LmJpbmQoX2MpLE5jPV9jLmZpbmlzaERyYWZ0LmJpbmQoX2MpO2Z1bmN0aW9uIEljKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX12YXIgTGM9bmV3IFdlYWtNYXAsUmM9bmV3IFdlYWtNYXAsTWM9bmV3IFdlYWtNYXAsemM9bmV3IFdlYWtNYXAsJGM9bmV3IFdlYWtNYXAsSGM9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gVmMoZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIFVjKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP1ZjKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7SWMoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlZjKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfXZhciBXYz0oKT0+e3ZhciBlPXtjaGlsZHJlbjpbXSxvcGVyYXRpb25zOltdLHNlbGVjdGlvbjpudWxsLG1hcmtzOm51bGwsaXNJbmxpbmU6KCk9PiExLGlzVm9pZDooKT0+ITEsb25DaGFuZ2U6KCk9Pnt9LGFwcGx5OnQ9Pntmb3IodmFyIG4gb2YgQmYucGF0aFJlZnMoZSkpemYudHJhbnNmb3JtKG4sdCk7Zm9yKHZhciByIG9mIEJmLnBvaW50UmVmcyhlKSlVZi50cmFuc2Zvcm0ocix0KTtmb3IodmFyIG8gb2YgQmYucmFuZ2VSZWZzKGUpKUtmLnRyYW5zZm9ybShvLHQpO3ZhciBpPW5ldyBTZXQsYT1bXSx1PWU9PntpZihlKXt2YXIgdD1lLmpvaW4oXCIsXCIpO2kuaGFzKHQpfHwoaS5hZGQodCksYS5wdXNoKGUpKX19LHM9TGMuZ2V0KGUpfHxbXSxsPUdjKHQpO2Zvcih2YXIgYyBvZiBzKXt1KE1mLnRyYW5zZm9ybShjLHQpKX1mb3IodmFyIGYgb2YgbCl1KGYpO0xjLnNldChlLGEpLG1kLnRyYW5zZm9ybShlLHQpLGUub3BlcmF0aW9ucy5wdXNoKHQpLEJmLm5vcm1hbGl6ZShlKSxcInNldF9zZWxlY3Rpb25cIj09PXQudHlwZSYmKGUubWFya3M9bnVsbCksUmMuZ2V0KGUpfHwoUmMuc2V0KGUsITApLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT57UmMuc2V0KGUsITEpLGUub25DaGFuZ2UoKSxlLm9wZXJhdGlvbnM9W119KSkpfSxhZGRNYXJrOih0LG4pPT57dmFye3NlbGVjdGlvbjpyfT1lO2lmKHIpaWYocWYuaXNFeHBhbmRlZChyKSltZC5zZXROb2RlcyhlLHtbdF06bn0se21hdGNoOmVkLmlzVGV4dCxzcGxpdDohMH0pO2Vsc2V7dmFyIG89VWMoVWMoe30sQmYubWFya3MoZSl8fHt9KSx7fSx7W3RdOm59KTtlLm1hcmtzPW8sUmMuZ2V0KGUpfHxlLm9uQ2hhbmdlKCl9fSxkZWxldGVCYWNrd2FyZDp0PT57dmFye3NlbGVjdGlvbjpufT1lO24mJnFmLmlzQ29sbGFwc2VkKG4pJiZtZC5kZWxldGUoZSx7dW5pdDp0LHJldmVyc2U6ITB9KX0sZGVsZXRlRm9yd2FyZDp0PT57dmFye3NlbGVjdGlvbjpufT1lO24mJnFmLmlzQ29sbGFwc2VkKG4pJiZtZC5kZWxldGUoZSx7dW5pdDp0fSl9LGRlbGV0ZUZyYWdtZW50OnQ9Pnt2YXJ7c2VsZWN0aW9uOm59PWU7biYmcWYuaXNFeHBhbmRlZChuKSYmbWQuZGVsZXRlKGUse3JldmVyc2U6XCJiYWNrd2FyZFwiPT09dH0pfSxnZXRGcmFnbWVudDooKT0+e3ZhcntzZWxlY3Rpb246dH09ZTtyZXR1cm4gdD9OZi5mcmFnbWVudChlLHQpOltdfSxpbnNlcnRCcmVhazooKT0+e21kLnNwbGl0Tm9kZXMoZSx7YWx3YXlzOiEwfSl9LGluc2VydEZyYWdtZW50OnQ9PnttZC5pbnNlcnRGcmFnbWVudChlLHQpfSxpbnNlcnROb2RlOnQ9PnttZC5pbnNlcnROb2RlcyhlLHQpfSxpbnNlcnRUZXh0OnQ9Pnt2YXJ7c2VsZWN0aW9uOm4sbWFya3M6cn09ZTtpZihuKXtpZihyKXt2YXIgbz1VYyh7dGV4dDp0fSxyKTttZC5pbnNlcnROb2RlcyhlLG8pfWVsc2UgbWQuaW5zZXJ0VGV4dChlLHQpO2UubWFya3M9bnVsbH19LG5vcm1hbGl6ZU5vZGU6dD0+e3ZhcltuLHJdPXQ7aWYoIWVkLmlzVGV4dChuKSlpZihTZi5pc0VsZW1lbnQobikmJjA9PT1uLmNoaWxkcmVuLmxlbmd0aCl7bWQuaW5zZXJ0Tm9kZXMoZSx7dGV4dDpcIlwifSx7YXQ6ci5jb25jYXQoMCksdm9pZHM6ITB9KX1lbHNlIGZvcih2YXIgbz0hQmYuaXNFZGl0b3IobikmJihTZi5pc0VsZW1lbnQobikmJihlLmlzSW5saW5lKG4pfHwwPT09bi5jaGlsZHJlbi5sZW5ndGh8fGVkLmlzVGV4dChuLmNoaWxkcmVuWzBdKXx8ZS5pc0lubGluZShuLmNoaWxkcmVuWzBdKSkpLGk9MCxhPTA7YTxuLmNoaWxkcmVuLmxlbmd0aDthKyssaSsrKXt2YXIgdT1OZi5nZXQoZSxyKTtpZighZWQuaXNUZXh0KHUpKXt2YXIgcz1uLmNoaWxkcmVuW2FdLGw9dS5jaGlsZHJlbltpLTFdLGM9YT09PW4uY2hpbGRyZW4ubGVuZ3RoLTE7aWYoKGVkLmlzVGV4dChzKXx8U2YuaXNFbGVtZW50KHMpJiZlLmlzSW5saW5lKHMpKSE9PW8pbWQucmVtb3ZlTm9kZXMoZSx7YXQ6ci5jb25jYXQoaSksdm9pZHM6ITB9KSxpLS07ZWxzZSBpZihTZi5pc0VsZW1lbnQocykpe2lmKGUuaXNJbmxpbmUocykpaWYobnVsbCE9bCYmZWQuaXNUZXh0KGwpKXtpZihjKXttZC5pbnNlcnROb2RlcyhlLHt0ZXh0OlwiXCJ9LHthdDpyLmNvbmNhdChpKzEpLHZvaWRzOiEwfSksaSsrfX1lbHNle21kLmluc2VydE5vZGVzKGUse3RleHQ6XCJcIn0se2F0OnIuY29uY2F0KGkpLHZvaWRzOiEwfSksaSsrfX1lbHNlIG51bGwhPWwmJmVkLmlzVGV4dChsKSYmKGVkLmVxdWFscyhzLGwse2xvb3NlOiEwfSk/KG1kLm1lcmdlTm9kZXMoZSx7YXQ6ci5jb25jYXQoaSksdm9pZHM6ITB9KSxpLS0pOlwiXCI9PT1sLnRleHQ/KG1kLnJlbW92ZU5vZGVzKGUse2F0OnIuY29uY2F0KGktMSksdm9pZHM6ITB9KSxpLS0pOlwiXCI9PT1zLnRleHQmJihtZC5yZW1vdmVOb2RlcyhlLHthdDpyLmNvbmNhdChpKSx2b2lkczohMH0pLGktLSkpfX19LHJlbW92ZU1hcms6dD0+e3ZhcntzZWxlY3Rpb246bn09ZTtpZihuKWlmKHFmLmlzRXhwYW5kZWQobikpbWQudW5zZXROb2RlcyhlLHQse21hdGNoOmVkLmlzVGV4dCxzcGxpdDohMH0pO2Vsc2V7dmFyIHI9VWMoe30sQmYubWFya3MoZSl8fHt9KTtkZWxldGUgclt0XSxlLm1hcmtzPXIsUmMuZ2V0KGUpfHxlLm9uQ2hhbmdlKCl9fX07cmV0dXJuIGV9LEdjPWU9Pntzd2l0Y2goZS50eXBlKXtjYXNlXCJpbnNlcnRfdGV4dFwiOmNhc2VcInJlbW92ZV90ZXh0XCI6Y2FzZVwic2V0X25vZGVcIjp2YXJ7cGF0aDp0fT1lO3JldHVybiBNZi5sZXZlbHModCk7Y2FzZVwiaW5zZXJ0X25vZGVcIjp2YXJ7bm9kZTpuLHBhdGg6cn09ZSxvPU1mLmxldmVscyhyKSxpPWVkLmlzVGV4dChuKT9bXTpBcnJheS5mcm9tKE5mLm5vZGVzKG4pLChlPT57dmFyWyx0XT1lO3JldHVybiByLmNvbmNhdCh0KX0pKTtyZXR1cm5bLi4ubywuLi5pXTtjYXNlXCJtZXJnZV9ub2RlXCI6dmFye3BhdGg6YX09ZTtyZXR1cm5bLi4uTWYuYW5jZXN0b3JzKGEpLE1mLnByZXZpb3VzKGEpXTtjYXNlXCJtb3ZlX25vZGVcIjp2YXJ7cGF0aDp1LG5ld1BhdGg6c309ZTtpZihNZi5lcXVhbHModSxzKSlyZXR1cm5bXTt2YXIgbD1bXSxjPVtdO2Zvcih2YXIgZiBvZiBNZi5hbmNlc3RvcnModSkpe3ZhciBkPU1mLnRyYW5zZm9ybShmLGUpO2wucHVzaChkKX1mb3IodmFyIHAgb2YgTWYuYW5jZXN0b3JzKHMpKXt2YXIgaD1NZi50cmFuc2Zvcm0ocCxlKTtjLnB1c2goaCl9dmFyIGc9Y1tjLmxlbmd0aC0xXSx2PXNbcy5sZW5ndGgtMV0seT1nLmNvbmNhdCh2KTtyZXR1cm5bLi4ubCwuLi5jLHldO2Nhc2VcInJlbW92ZV9ub2RlXCI6dmFye3BhdGg6bX09ZTtyZXR1cm5bLi4uTWYuYW5jZXN0b3JzKG0pXTtjYXNlXCJzcGxpdF9ub2RlXCI6dmFye3BhdGg6Yn09ZTtyZXR1cm5bLi4uTWYubGV2ZWxzKGIpLE1mLm5leHQoYildO2RlZmF1bHQ6cmV0dXJuW119fTtmdW5jdGlvbiBxYyhlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgbixyLG89e30saT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW49aVtyXSx0LmluZGV4T2Yobik+PTB8fChvW25dPWVbbl0pO3JldHVybiBvfShlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxuKSYmKG9bbl09ZVtuXSl9cmV0dXJuIG99dmFyIEtjLFljPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sbj0hdCxyPXQ/dGYoZSk6ZSxvPUtjLk5vbmUsaT1LYy5Ob25lLGE9MCx1PW51bGw7Zm9yKHZhciBzIG9mIHIpe3ZhciBsPXMuY29kZVBvaW50QXQoMCk7aWYoIWwpYnJlYWs7dmFyIGM9aGYocyxsKTtpZihbbyxpXT1uP1tpLGNdOltjLG9dLGdmKG8sS2MuWldKKSYmZ2YoaSxLYy5FeHRQaWN0KSYmIWJmKG4/ZS5zdWJzdHJpbmcoMCxhKTplLnN1YnN0cmluZygwLGUubGVuZ3RoLWEpKSlicmVhaztpZihnZihvLEtjLlJJKSYmZ2YoaSxLYy5SSSkmJiEodT1udWxsIT09dT8hdTohIW58fEVmKGUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtYSkpKSlicmVhaztpZihvIT09S2MuTm9uZSYmaSE9PUtjLk5vbmUmJnlmKG8saSkpYnJlYWs7YSs9cy5sZW5ndGh9cmV0dXJuIGF8fDF9LFhjPS9cXHMvLFpjPS9bXFx1MDAyMS1cXHUwMDIzXFx1MDAyNS1cXHUwMDJBXFx1MDAyQy1cXHUwMDJGXFx1MDAzQVxcdTAwM0JcXHUwMDNGXFx1MDA0MFxcdTAwNUItXFx1MDA1RFxcdTAwNUZcXHUwMDdCXFx1MDA3RFxcdTAwQTFcXHUwMEE3XFx1MDBBQlxcdTAwQjZcXHUwMEI3XFx1MDBCQlxcdTAwQkZcXHUwMzdFXFx1MDM4N1xcdTA1NUEtXFx1MDU1RlxcdTA1ODlcXHUwNThBXFx1MDVCRVxcdTA1QzBcXHUwNUMzXFx1MDVDNlxcdTA1RjNcXHUwNUY0XFx1MDYwOVxcdTA2MEFcXHUwNjBDXFx1MDYwRFxcdTA2MUJcXHUwNjFFXFx1MDYxRlxcdTA2NkEtXFx1MDY2RFxcdTA2RDRcXHUwNzAwLVxcdTA3MERcXHUwN0Y3LVxcdTA3RjlcXHUwODMwLVxcdTA4M0VcXHUwODVFXFx1MDk2NFxcdTA5NjVcXHUwOTcwXFx1MEFGMFxcdTBERjRcXHUwRTRGXFx1MEU1QVxcdTBFNUJcXHUwRjA0LVxcdTBGMTJcXHUwRjE0XFx1MEYzQS1cXHUwRjNEXFx1MEY4NVxcdTBGRDAtXFx1MEZENFxcdTBGRDlcXHUwRkRBXFx1MTA0QS1cXHUxMDRGXFx1MTBGQlxcdTEzNjAtXFx1MTM2OFxcdTE0MDBcXHUxNjZEXFx1MTY2RVxcdTE2OUJcXHUxNjlDXFx1MTZFQi1cXHUxNkVEXFx1MTczNVxcdTE3MzZcXHUxN0Q0LVxcdTE3RDZcXHUxN0Q4LVxcdTE3REFcXHUxODAwLVxcdTE4MEFcXHUxOTQ0XFx1MTk0NVxcdTFBMUVcXHUxQTFGXFx1MUFBMC1cXHUxQUE2XFx1MUFBOC1cXHUxQUFEXFx1MUI1QS1cXHUxQjYwXFx1MUJGQy1cXHUxQkZGXFx1MUMzQi1cXHUxQzNGXFx1MUM3RVxcdTFDN0ZcXHUxQ0MwLVxcdTFDQzdcXHUxQ0QzXFx1MjAxMC1cXHUyMDI3XFx1MjAzMC1cXHUyMDQzXFx1MjA0NS1cXHUyMDUxXFx1MjA1My1cXHUyMDVFXFx1MjA3RFxcdTIwN0VcXHUyMDhEXFx1MjA4RVxcdTIzMjlcXHUyMzJBXFx1Mjc2OC1cXHUyNzc1XFx1MjdDNVxcdTI3QzZcXHUyN0U2LVxcdTI3RUZcXHUyOTgzLVxcdTI5OThcXHUyOUQ4LVxcdTI5REJcXHUyOUZDXFx1MjlGRFxcdTJDRjktXFx1MkNGQ1xcdTJDRkVcXHUyQ0ZGXFx1MkQ3MFxcdTJFMDAtXFx1MkUyRVxcdTJFMzAtXFx1MkUzQlxcdTMwMDEtXFx1MzAwM1xcdTMwMDgtXFx1MzAxMVxcdTMwMTQtXFx1MzAxRlxcdTMwMzBcXHUzMDNEXFx1MzBBMFxcdTMwRkJcXHVBNEZFXFx1QTRGRlxcdUE2MEQtXFx1QTYwRlxcdUE2NzNcXHVBNjdFXFx1QTZGMi1cXHVBNkY3XFx1QTg3NC1cXHVBODc3XFx1QThDRVxcdUE4Q0ZcXHVBOEY4LVxcdUE4RkFcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV0vLEpjPS9bJ1xcdTIwMThcXHUyMDE5XS8sUWM9KGUsdCxuKT0+e2lmKG4pe3ZhciByPWUubGVuZ3RoLXQ7cmV0dXJuW2Uuc2xpY2UocixlLmxlbmd0aCksZS5zbGljZSgwLHIpXX1yZXR1cm5bZS5zbGljZSgwLHQpLGUuc2xpY2UodCldfSxlZj1mdW5jdGlvbiBlKHQsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZihYYy50ZXN0KHQpKXJldHVybiExO2lmKEpjLnRlc3QodCkpe3ZhciBvPVljKG4sciksW2ksYV09UWMobixvLHIpO2lmKGUoaSxhLHIpKXJldHVybiEwfXJldHVybiFaYy50ZXN0KHQpfSx0Zj1mdW5jdGlvbiooZSl7Zm9yKHZhciB0PWUubGVuZ3RoLTEsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lLmNoYXJBdCh0LW4pO2lmKHJmKHIuY2hhckNvZGVBdCgwKSkpe3ZhciBvPWUuY2hhckF0KHQtbi0xKTtpZihuZihvLmNoYXJDb2RlQXQoMCkpKXt5aWVsZCBvK3IsbisrO2NvbnRpbnVlfX15aWVsZCByfX0sbmY9ZT0+ZT49NTUyOTYmJmU8PTU2MzE5LHJmPWU9PmU+PTU2MzIwJiZlPD01NzM0MzshZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09XCJOb25lXCIsZVtlLkV4dGVuZD0xXT1cIkV4dGVuZFwiLGVbZS5aV0o9Ml09XCJaV0pcIixlW2UuUkk9NF09XCJSSVwiLGVbZS5QcmVwZW5kPThdPVwiUHJlcGVuZFwiLGVbZS5TcGFjaW5nTWFyaz0xNl09XCJTcGFjaW5nTWFya1wiLGVbZS5MPTMyXT1cIkxcIixlW2UuVj02NF09XCJWXCIsZVtlLlQ9MTI4XT1cIlRcIixlW2UuTFY9MjU2XT1cIkxWXCIsZVtlLkxWVD01MTJdPVwiTFZUXCIsZVtlLkV4dFBpY3Q9MTAyNF09XCJFeHRQaWN0XCIsZVtlLkFueT0yMDQ4XT1cIkFueVwifShLY3x8KEtjPXt9KSk7dmFyIG9mPS9eKD86W1xcdTAzMDAtXFx1MDM2RlxcdTA0ODMtXFx1MDQ4OVxcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA2MTAtXFx1MDYxQVxcdTA2NEItXFx1MDY1RlxcdTA2NzBcXHUwNkQ2LVxcdTA2RENcXHUwNkRGLVxcdTA2RTRcXHUwNkU3XFx1MDZFOFxcdTA2RUEtXFx1MDZFRFxcdTA3MTFcXHUwNzMwLVxcdTA3NEFcXHUwN0E2LVxcdTA3QjBcXHUwN0VCLVxcdTA3RjNcXHUwN0ZEXFx1MDgxNi1cXHUwODE5XFx1MDgxQi1cXHUwODIzXFx1MDgyNS1cXHUwODI3XFx1MDgyOS1cXHUwODJEXFx1MDg1OS1cXHUwODVCXFx1MDhEMy1cXHUwOEUxXFx1MDhFMy1cXHUwOTAyXFx1MDkzQVxcdTA5M0NcXHUwOTQxLVxcdTA5NDhcXHUwOTREXFx1MDk1MS1cXHUwOTU3XFx1MDk2MlxcdTA5NjNcXHUwOTgxXFx1MDlCQ1xcdTA5QkVcXHUwOUMxLVxcdTA5QzRcXHUwOUNEXFx1MDlEN1xcdTA5RTJcXHUwOUUzXFx1MDlGRVxcdTBBMDFcXHUwQTAyXFx1MEEzQ1xcdTBBNDFcXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTUxXFx1MEE3MFxcdTBBNzFcXHUwQTc1XFx1MEE4MVxcdTBBODJcXHUwQUJDXFx1MEFDMS1cXHUwQUM1XFx1MEFDN1xcdTBBQzhcXHUwQUNEXFx1MEFFMlxcdTBBRTNcXHUwQUZBLVxcdTBBRkZcXHUwQjAxXFx1MEIzQ1xcdTBCM0VcXHUwQjNGXFx1MEI0MS1cXHUwQjQ0XFx1MEI0RFxcdTBCNTUtXFx1MEI1N1xcdTBCNjJcXHUwQjYzXFx1MEI4MlxcdTBCQkVcXHUwQkMwXFx1MEJDRFxcdTBCRDdcXHUwQzAwXFx1MEMwNFxcdTBDM0UtXFx1MEM0MFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM2MlxcdTBDNjNcXHUwQzgxXFx1MENCQ1xcdTBDQkZcXHUwQ0MyXFx1MENDNlxcdTBDQ0NcXHUwQ0NEXFx1MENENVxcdTBDRDZcXHUwQ0UyXFx1MENFM1xcdTBEMDBcXHUwRDAxXFx1MEQzQlxcdTBEM0NcXHUwRDNFXFx1MEQ0MS1cXHUwRDQ0XFx1MEQ0RFxcdTBENTdcXHUwRDYyXFx1MEQ2M1xcdTBEODFcXHUwRENBXFx1MERDRlxcdTBERDItXFx1MERENFxcdTBERDZcXHUwRERGXFx1MEUzMVxcdTBFMzQtXFx1MEUzQVxcdTBFNDctXFx1MEU0RVxcdTBFQjFcXHUwRUI0LVxcdTBFQkNcXHUwRUM4LVxcdTBFQ0RcXHUwRjE4XFx1MEYxOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGNzEtXFx1MEY3RVxcdTBGODAtXFx1MEY4NFxcdTBGODZcXHUwRjg3XFx1MEY4RC1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMkQtXFx1MTAzMFxcdTEwMzItXFx1MTAzN1xcdTEwMzlcXHUxMDNBXFx1MTAzRFxcdTEwM0VcXHUxMDU4XFx1MTA1OVxcdTEwNUUtXFx1MTA2MFxcdTEwNzEtXFx1MTA3NFxcdTEwODJcXHUxMDg1XFx1MTA4NlxcdTEwOERcXHUxMDlEXFx1MTM1RC1cXHUxMzVGXFx1MTcxMi1cXHUxNzE0XFx1MTczMi1cXHUxNzM0XFx1MTc1MlxcdTE3NTNcXHUxNzcyXFx1MTc3M1xcdTE3QjRcXHUxN0I1XFx1MTdCNy1cXHUxN0JEXFx1MTdDNlxcdTE3QzktXFx1MTdEM1xcdTE3RERcXHUxODBCLVxcdTE4MERcXHUxODg1XFx1MTg4NlxcdTE4QTlcXHUxOTIwLVxcdTE5MjJcXHUxOTI3XFx1MTkyOFxcdTE5MzJcXHUxOTM5LVxcdTE5M0JcXHUxQTE3XFx1MUExOFxcdTFBMUJcXHUxQTU2XFx1MUE1OC1cXHUxQTVFXFx1MUE2MFxcdTFBNjJcXHUxQTY1LVxcdTFBNkNcXHUxQTczLVxcdTFBN0NcXHUxQTdGXFx1MUFCMC1cXHUxQUMwXFx1MUIwMC1cXHUxQjAzXFx1MUIzNC1cXHUxQjNBXFx1MUIzQ1xcdTFCNDJcXHUxQjZCLVxcdTFCNzNcXHUxQjgwXFx1MUI4MVxcdTFCQTItXFx1MUJBNVxcdTFCQThcXHUxQkE5XFx1MUJBQi1cXHUxQkFEXFx1MUJFNlxcdTFCRThcXHUxQkU5XFx1MUJFRFxcdTFCRUYtXFx1MUJGMVxcdTFDMkMtXFx1MUMzM1xcdTFDMzZcXHUxQzM3XFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0UwXFx1MUNFMi1cXHUxQ0U4XFx1MUNFRFxcdTFDRjRcXHUxQ0Y4XFx1MUNGOVxcdTFEQzAtXFx1MURGOVxcdTFERkItXFx1MURGRlxcdTIwMENcXHUyMEQwLVxcdTIwRjBcXHUyQ0VGLVxcdTJDRjFcXHUyRDdGXFx1MkRFMC1cXHUyREZGXFx1MzAyQS1cXHUzMDJGXFx1MzA5OVxcdTMwOUFcXHVBNjZGLVxcdUE2NzJcXHVBNjc0LVxcdUE2N0RcXHVBNjlFXFx1QTY5RlxcdUE2RjBcXHVBNkYxXFx1QTgwMlxcdUE4MDZcXHVBODBCXFx1QTgyNVxcdUE4MjZcXHVBODJDXFx1QThDNFxcdUE4QzVcXHVBOEUwLVxcdUE4RjFcXHVBOEZGXFx1QTkyNi1cXHVBOTJEXFx1QTk0Ny1cXHVBOTUxXFx1QTk4MC1cXHVBOTgyXFx1QTlCM1xcdUE5QjYtXFx1QTlCOVxcdUE5QkNcXHVBOUJEXFx1QTlFNVxcdUFBMjktXFx1QUEyRVxcdUFBMzFcXHVBQTMyXFx1QUEzNVxcdUFBMzZcXHVBQTQzXFx1QUE0Q1xcdUFBN0NcXHVBQUIwXFx1QUFCMi1cXHVBQUI0XFx1QUFCN1xcdUFBQjhcXHVBQUJFXFx1QUFCRlxcdUFBQzFcXHVBQUVDXFx1QUFFRFxcdUFBRjZcXHVBQkU1XFx1QUJFOFxcdUFCRURcXHVGQjFFXFx1RkUwMC1cXHVGRTBGXFx1RkUyMC1cXHVGRTJGXFx1RkY5RVxcdUZGOUZdfFxcdUQ4MDBbXFx1RERGRFxcdURFRTBcXHVERjc2LVxcdURGN0FdfFxcdUQ4MDJbXFx1REUwMS1cXHVERTAzXFx1REUwNVxcdURFMDZcXHVERTBDLVxcdURFMEZcXHVERTM4LVxcdURFM0FcXHVERTNGXFx1REVFNVxcdURFRTZdfFxcdUQ4MDNbXFx1REQyNC1cXHVERDI3XFx1REVBQlxcdURFQUNcXHVERjQ2LVxcdURGNTBdfFxcdUQ4MDRbXFx1REMwMVxcdURDMzgtXFx1REM0NlxcdURDN0YtXFx1REM4MVxcdURDQjMtXFx1RENCNlxcdURDQjlcXHVEQ0JBXFx1REQwMC1cXHVERDAyXFx1REQyNy1cXHVERDJCXFx1REQyRC1cXHVERDM0XFx1REQ3M1xcdUREODBcXHVERDgxXFx1RERCNi1cXHVEREJFXFx1RERDOS1cXHVERENDXFx1RERDRlxcdURFMkYtXFx1REUzMVxcdURFMzRcXHVERTM2XFx1REUzN1xcdURFM0VcXHVERURGXFx1REVFMy1cXHVERUVBXFx1REYwMFxcdURGMDFcXHVERjNCXFx1REYzQ1xcdURGM0VcXHVERjQwXFx1REY1N1xcdURGNjYtXFx1REY2Q1xcdURGNzAtXFx1REY3NF18XFx1RDgwNVtcXHVEQzM4LVxcdURDM0ZcXHVEQzQyLVxcdURDNDRcXHVEQzQ2XFx1REM1RVxcdURDQjBcXHVEQ0IzLVxcdURDQjhcXHVEQ0JBXFx1RENCRFxcdURDQkZcXHVEQ0MwXFx1RENDMlxcdURDQzNcXHVEREFGXFx1RERCMi1cXHVEREI1XFx1RERCQ1xcdUREQkRcXHVEREJGXFx1RERDMFxcdURERENcXHVEREREXFx1REUzMy1cXHVERTNBXFx1REUzRFxcdURFM0ZcXHVERTQwXFx1REVBQlxcdURFQURcXHVERUIwLVxcdURFQjVcXHVERUI3XFx1REYxRC1cXHVERjFGXFx1REYyMi1cXHVERjI1XFx1REYyNy1cXHVERjJCXXxcXHVEODA2W1xcdURDMkYtXFx1REMzN1xcdURDMzlcXHVEQzNBXFx1REQzMFxcdUREM0JcXHVERDNDXFx1REQzRVxcdURENDNcXHVEREQ0LVxcdURERDdcXHVERERBXFx1REREQlxcdURERTBcXHVERTAxLVxcdURFMEFcXHVERTMzLVxcdURFMzhcXHVERTNCLVxcdURFM0VcXHVERTQ3XFx1REU1MS1cXHVERTU2XFx1REU1OS1cXHVERTVCXFx1REU4QS1cXHVERTk2XFx1REU5OFxcdURFOTldfFxcdUQ4MDdbXFx1REMzMC1cXHVEQzM2XFx1REMzOC1cXHVEQzNEXFx1REMzRlxcdURDOTItXFx1RENBN1xcdURDQUEtXFx1RENCMFxcdURDQjJcXHVEQ0IzXFx1RENCNVxcdURDQjZcXHVERDMxLVxcdUREMzZcXHVERDNBXFx1REQzQ1xcdUREM0RcXHVERDNGLVxcdURENDVcXHVERDQ3XFx1REQ5MFxcdUREOTFcXHVERDk1XFx1REQ5N1xcdURFRjNcXHVERUY0XXxcXHVEODFBW1xcdURFRjAtXFx1REVGNFxcdURGMzAtXFx1REYzNl18XFx1RDgxQltcXHVERjRGXFx1REY4Ri1cXHVERjkyXFx1REZFNF18XFx1RDgyRltcXHVEQzlEXFx1REM5RV18XFx1RDgzNFtcXHVERDY1XFx1REQ2Ny1cXHVERDY5XFx1REQ2RS1cXHVERDcyXFx1REQ3Qi1cXHVERDgyXFx1REQ4NS1cXHVERDhCXFx1RERBQS1cXHVEREFEXFx1REU0Mi1cXHVERTQ0XXxcXHVEODM2W1xcdURFMDAtXFx1REUzNlxcdURFM0ItXFx1REU2Q1xcdURFNzVcXHVERTg0XFx1REU5Qi1cXHVERTlGXFx1REVBMS1cXHVERUFGXXxcXHVEODM4W1xcdURDMDAtXFx1REMwNlxcdURDMDgtXFx1REMxOFxcdURDMUItXFx1REMyMVxcdURDMjNcXHVEQzI0XFx1REMyNi1cXHVEQzJBXFx1REQzMC1cXHVERDM2XFx1REVFQy1cXHVERUVGXXxcXHVEODNBW1xcdURDRDAtXFx1RENENlxcdURENDQtXFx1REQ0QV18XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdURCNDBbXFx1REMyMC1cXHVEQzdGXFx1REQwMC1cXHVEREVGXSkkLyxhZj0vXig/OltcXHUwNjAwLVxcdTA2MDVcXHUwNkREXFx1MDcwRlxcdTA4OTBcXHUwODkxXFx1MDhFMlxcdTBENEVdfFxcdUQ4MDRbXFx1RENCRFxcdURDQ0RcXHVEREMyXFx1RERDM118XFx1RDgwNltcXHVERDNGXFx1REQ0MVxcdURFM0FcXHVERTg0LVxcdURFODldfFxcdUQ4MDdcXHVERDQ2KSQvLHVmPS9eKD86W1xcdTA5MDNcXHUwOTNCXFx1MDkzRS1cXHUwOTQwXFx1MDk0OS1cXHUwOTRDXFx1MDk0RVxcdTA5NEZcXHUwOTgyXFx1MDk4M1xcdTA5QkZcXHUwOUMwXFx1MDlDN1xcdTA5QzhcXHUwOUNCXFx1MDlDQ1xcdTBBMDNcXHUwQTNFLVxcdTBBNDBcXHUwQTgzXFx1MEFCRS1cXHUwQUMwXFx1MEFDOVxcdTBBQ0JcXHUwQUNDXFx1MEIwMlxcdTBCMDNcXHUwQjQwXFx1MEI0N1xcdTBCNDhcXHUwQjRCXFx1MEI0Q1xcdTBCQkZcXHUwQkMxXFx1MEJDMlxcdTBCQzYtXFx1MEJDOFxcdTBCQ0EtXFx1MEJDQ1xcdTBDMDEtXFx1MEMwM1xcdTBDNDEtXFx1MEM0NFxcdTBDODJcXHUwQzgzXFx1MENCRVxcdTBDQzBcXHUwQ0MxXFx1MENDM1xcdTBDQzRcXHUwQ0M3XFx1MENDOFxcdTBDQ0FcXHUwQ0NCXFx1MEQwMlxcdTBEMDNcXHUwRDNGXFx1MEQ0MFxcdTBENDYtXFx1MEQ0OFxcdTBENEEtXFx1MEQ0Q1xcdTBEODJcXHUwRDgzXFx1MEREMFxcdTBERDFcXHUwREQ4LVxcdTBEREVcXHUwREYyXFx1MERGM1xcdTBFMzNcXHUwRUIzXFx1MEYzRVxcdTBGM0ZcXHUwRjdGXFx1MTAzMVxcdTEwM0JcXHUxMDNDXFx1MTA1NlxcdTEwNTdcXHUxMDg0XFx1MTcxNVxcdTE3MzRcXHUxN0I2XFx1MTdCRS1cXHUxN0M1XFx1MTdDN1xcdTE3QzhcXHUxOTIzLVxcdTE5MjZcXHUxOTI5LVxcdTE5MkJcXHUxOTMwXFx1MTkzMVxcdTE5MzMtXFx1MTkzOFxcdTFBMTlcXHUxQTFBXFx1MUE1NVxcdTFBNTdcXHUxQTZELVxcdTFBNzJcXHUxQjA0XFx1MUIzQlxcdTFCM0QtXFx1MUI0MVxcdTFCNDNcXHUxQjQ0XFx1MUI4MlxcdTFCQTFcXHUxQkE2XFx1MUJBN1xcdTFCQUFcXHUxQkU3XFx1MUJFQS1cXHUxQkVDXFx1MUJFRVxcdTFCRjJcXHUxQkYzXFx1MUMyNC1cXHUxQzJCXFx1MUMzNFxcdTFDMzVcXHUxQ0UxXFx1MUNGN1xcdUE4MjNcXHVBODI0XFx1QTgyN1xcdUE4ODBcXHVBODgxXFx1QThCNC1cXHVBOEMzXFx1QTk1MlxcdUE5NTNcXHVBOTgzXFx1QTlCNFxcdUE5QjVcXHVBOUJBXFx1QTlCQlxcdUE5QkUtXFx1QTlDMFxcdUFBMkZcXHVBQTMwXFx1QUEzM1xcdUFBMzRcXHVBQTREXFx1QUFFQlxcdUFBRUVcXHVBQUVGXFx1QUFGNVxcdUFCRTNcXHVBQkU0XFx1QUJFNlxcdUFCRTdcXHVBQkU5XFx1QUJFQVxcdUFCRUNdfFxcdUQ4MDRbXFx1REMwMFxcdURDMDJcXHVEQzgyXFx1RENCMC1cXHVEQ0IyXFx1RENCN1xcdURDQjhcXHVERDJDXFx1REQ0NVxcdURENDZcXHVERDgyXFx1RERCMy1cXHVEREI1XFx1RERCRlxcdUREQzBcXHVERENFXFx1REUyQy1cXHVERTJFXFx1REUzMlxcdURFMzNcXHVERTM1XFx1REVFMC1cXHVERUUyXFx1REYwMlxcdURGMDNcXHVERjNGXFx1REY0MS1cXHVERjQ0XFx1REY0N1xcdURGNDhcXHVERjRCLVxcdURGNERcXHVERjYyXFx1REY2M118XFx1RDgwNVtcXHVEQzM1LVxcdURDMzdcXHVEQzQwXFx1REM0MVxcdURDNDVcXHVEQ0IxXFx1RENCMlxcdURDQjlcXHVEQ0JCXFx1RENCQ1xcdURDQkVcXHVEQ0MxXFx1RERCMFxcdUREQjFcXHVEREI4LVxcdUREQkJcXHVEREJFXFx1REUzMC1cXHVERTMyXFx1REUzQlxcdURFM0NcXHVERTNFXFx1REVBQ1xcdURFQUVcXHVERUFGXFx1REVCNlxcdURGMjZdfFxcdUQ4MDZbXFx1REMyQy1cXHVEQzJFXFx1REMzOFxcdUREMzEtXFx1REQzNVxcdUREMzdcXHVERDM4XFx1REQzRFxcdURENDBcXHVERDQyXFx1REREMS1cXHVEREQzXFx1REREQy1cXHVERERGXFx1RERFNFxcdURFMzlcXHVERTU3XFx1REU1OFxcdURFOTddfFxcdUQ4MDdbXFx1REMyRlxcdURDM0VcXHVEQ0E5XFx1RENCMVxcdURDQjRcXHVERDhBLVxcdUREOEVcXHVERDkzXFx1REQ5NFxcdUREOTZcXHVERUY1XFx1REVGNl18XFx1RDgxQltcXHVERjUxLVxcdURGODdcXHVERkYwXFx1REZGMV18XFx1RDgzNFtcXHVERDY2XFx1REQ2RF0pJC8sc2Y9L15bXFx1MTEwMC1cXHUxMTVGXFx1QTk2MC1cXHVBOTdDXSQvLGxmPS9eW1xcdTExNjAtXFx1MTFBN1xcdUQ3QjAtXFx1RDdDNl0kLyxjZj0vXltcXHUxMUE4LVxcdTExRkZcXHVEN0NCLVxcdUQ3RkJdJC8sZmY9L15bXFx1QUMwMFxcdUFDMUNcXHVBQzM4XFx1QUM1NFxcdUFDNzBcXHVBQzhDXFx1QUNBOFxcdUFDQzRcXHVBQ0UwXFx1QUNGQ1xcdUFEMThcXHVBRDM0XFx1QUQ1MFxcdUFENkNcXHVBRDg4XFx1QURBNFxcdUFEQzBcXHVBRERDXFx1QURGOFxcdUFFMTRcXHVBRTMwXFx1QUU0Q1xcdUFFNjhcXHVBRTg0XFx1QUVBMFxcdUFFQkNcXHVBRUQ4XFx1QUVGNFxcdUFGMTBcXHVBRjJDXFx1QUY0OFxcdUFGNjRcXHVBRjgwXFx1QUY5Q1xcdUFGQjhcXHVBRkQ0XFx1QUZGMFxcdUIwMENcXHVCMDI4XFx1QjA0NFxcdUIwNjBcXHVCMDdDXFx1QjA5OFxcdUIwQjRcXHVCMEQwXFx1QjBFQ1xcdUIxMDhcXHVCMTI0XFx1QjE0MFxcdUIxNUNcXHVCMTc4XFx1QjE5NFxcdUIxQjBcXHVCMUNDXFx1QjFFOFxcdUIyMDRcXHVCMjIwXFx1QjIzQ1xcdUIyNThcXHVCMjc0XFx1QjI5MFxcdUIyQUNcXHVCMkM4XFx1QjJFNFxcdUIzMDBcXHVCMzFDXFx1QjMzOFxcdUIzNTRcXHVCMzcwXFx1QjM4Q1xcdUIzQThcXHVCM0M0XFx1QjNFMFxcdUIzRkNcXHVCNDE4XFx1QjQzNFxcdUI0NTBcXHVCNDZDXFx1QjQ4OFxcdUI0QTRcXHVCNEMwXFx1QjREQ1xcdUI0RjhcXHVCNTE0XFx1QjUzMFxcdUI1NENcXHVCNTY4XFx1QjU4NFxcdUI1QTBcXHVCNUJDXFx1QjVEOFxcdUI1RjRcXHVCNjEwXFx1QjYyQ1xcdUI2NDhcXHVCNjY0XFx1QjY4MFxcdUI2OUNcXHVCNkI4XFx1QjZENFxcdUI2RjBcXHVCNzBDXFx1QjcyOFxcdUI3NDRcXHVCNzYwXFx1Qjc3Q1xcdUI3OThcXHVCN0I0XFx1QjdEMFxcdUI3RUNcXHVCODA4XFx1QjgyNFxcdUI4NDBcXHVCODVDXFx1Qjg3OFxcdUI4OTRcXHVCOEIwXFx1QjhDQ1xcdUI4RThcXHVCOTA0XFx1QjkyMFxcdUI5M0NcXHVCOTU4XFx1Qjk3NFxcdUI5OTBcXHVCOUFDXFx1QjlDOFxcdUI5RTRcXHVCQTAwXFx1QkExQ1xcdUJBMzhcXHVCQTU0XFx1QkE3MFxcdUJBOENcXHVCQUE4XFx1QkFDNFxcdUJBRTBcXHVCQUZDXFx1QkIxOFxcdUJCMzRcXHVCQjUwXFx1QkI2Q1xcdUJCODhcXHVCQkE0XFx1QkJDMFxcdUJCRENcXHVCQkY4XFx1QkMxNFxcdUJDMzBcXHVCQzRDXFx1QkM2OFxcdUJDODRcXHVCQ0EwXFx1QkNCQ1xcdUJDRDhcXHVCQ0Y0XFx1QkQxMFxcdUJEMkNcXHVCRDQ4XFx1QkQ2NFxcdUJEODBcXHVCRDlDXFx1QkRCOFxcdUJERDRcXHVCREYwXFx1QkUwQ1xcdUJFMjhcXHVCRTQ0XFx1QkU2MFxcdUJFN0NcXHVCRTk4XFx1QkVCNFxcdUJFRDBcXHVCRUVDXFx1QkYwOFxcdUJGMjRcXHVCRjQwXFx1QkY1Q1xcdUJGNzhcXHVCRjk0XFx1QkZCMFxcdUJGQ0NcXHVCRkU4XFx1QzAwNFxcdUMwMjBcXHVDMDNDXFx1QzA1OFxcdUMwNzRcXHVDMDkwXFx1QzBBQ1xcdUMwQzhcXHVDMEU0XFx1QzEwMFxcdUMxMUNcXHVDMTM4XFx1QzE1NFxcdUMxNzBcXHVDMThDXFx1QzFBOFxcdUMxQzRcXHVDMUUwXFx1QzFGQ1xcdUMyMThcXHVDMjM0XFx1QzI1MFxcdUMyNkNcXHVDMjg4XFx1QzJBNFxcdUMyQzBcXHVDMkRDXFx1QzJGOFxcdUMzMTRcXHVDMzMwXFx1QzM0Q1xcdUMzNjhcXHVDMzg0XFx1QzNBMFxcdUMzQkNcXHVDM0Q4XFx1QzNGNFxcdUM0MTBcXHVDNDJDXFx1QzQ0OFxcdUM0NjRcXHVDNDgwXFx1QzQ5Q1xcdUM0QjhcXHVDNEQ0XFx1QzRGMFxcdUM1MENcXHVDNTI4XFx1QzU0NFxcdUM1NjBcXHVDNTdDXFx1QzU5OFxcdUM1QjRcXHVDNUQwXFx1QzVFQ1xcdUM2MDhcXHVDNjI0XFx1QzY0MFxcdUM2NUNcXHVDNjc4XFx1QzY5NFxcdUM2QjBcXHVDNkNDXFx1QzZFOFxcdUM3MDRcXHVDNzIwXFx1QzczQ1xcdUM3NThcXHVDNzc0XFx1Qzc5MFxcdUM3QUNcXHVDN0M4XFx1QzdFNFxcdUM4MDBcXHVDODFDXFx1QzgzOFxcdUM4NTRcXHVDODcwXFx1Qzg4Q1xcdUM4QThcXHVDOEM0XFx1QzhFMFxcdUM4RkNcXHVDOTE4XFx1QzkzNFxcdUM5NTBcXHVDOTZDXFx1Qzk4OFxcdUM5QTRcXHVDOUMwXFx1QzlEQ1xcdUM5RjhcXHVDQTE0XFx1Q0EzMFxcdUNBNENcXHVDQTY4XFx1Q0E4NFxcdUNBQTBcXHVDQUJDXFx1Q0FEOFxcdUNBRjRcXHVDQjEwXFx1Q0IyQ1xcdUNCNDhcXHVDQjY0XFx1Q0I4MFxcdUNCOUNcXHVDQkI4XFx1Q0JENFxcdUNCRjBcXHVDQzBDXFx1Q0MyOFxcdUNDNDRcXHVDQzYwXFx1Q0M3Q1xcdUNDOThcXHVDQ0I0XFx1Q0NEMFxcdUNDRUNcXHVDRDA4XFx1Q0QyNFxcdUNENDBcXHVDRDVDXFx1Q0Q3OFxcdUNEOTRcXHVDREIwXFx1Q0RDQ1xcdUNERThcXHVDRTA0XFx1Q0UyMFxcdUNFM0NcXHVDRTU4XFx1Q0U3NFxcdUNFOTBcXHVDRUFDXFx1Q0VDOFxcdUNFRTRcXHVDRjAwXFx1Q0YxQ1xcdUNGMzhcXHVDRjU0XFx1Q0Y3MFxcdUNGOENcXHVDRkE4XFx1Q0ZDNFxcdUNGRTBcXHVDRkZDXFx1RDAxOFxcdUQwMzRcXHVEMDUwXFx1RDA2Q1xcdUQwODhcXHVEMEE0XFx1RDBDMFxcdUQwRENcXHVEMEY4XFx1RDExNFxcdUQxMzBcXHVEMTRDXFx1RDE2OFxcdUQxODRcXHVEMUEwXFx1RDFCQ1xcdUQxRDhcXHVEMUY0XFx1RDIxMFxcdUQyMkNcXHVEMjQ4XFx1RDI2NFxcdUQyODBcXHVEMjlDXFx1RDJCOFxcdUQyRDRcXHVEMkYwXFx1RDMwQ1xcdUQzMjhcXHVEMzQ0XFx1RDM2MFxcdUQzN0NcXHVEMzk4XFx1RDNCNFxcdUQzRDBcXHVEM0VDXFx1RDQwOFxcdUQ0MjRcXHVENDQwXFx1RDQ1Q1xcdUQ0NzhcXHVENDk0XFx1RDRCMFxcdUQ0Q0NcXHVENEU4XFx1RDUwNFxcdUQ1MjBcXHVENTNDXFx1RDU1OFxcdUQ1NzRcXHVENTkwXFx1RDVBQ1xcdUQ1QzhcXHVENUU0XFx1RDYwMFxcdUQ2MUNcXHVENjM4XFx1RDY1NFxcdUQ2NzBcXHVENjhDXFx1RDZBOFxcdUQ2QzRcXHVENkUwXFx1RDZGQ1xcdUQ3MThcXHVENzM0XFx1RDc1MFxcdUQ3NkNcXHVENzg4XSQvLGRmPS9eW1xcdUFDMDEtXFx1QUMxQlxcdUFDMUQtXFx1QUMzN1xcdUFDMzktXFx1QUM1M1xcdUFDNTUtXFx1QUM2RlxcdUFDNzEtXFx1QUM4QlxcdUFDOEQtXFx1QUNBN1xcdUFDQTktXFx1QUNDM1xcdUFDQzUtXFx1QUNERlxcdUFDRTEtXFx1QUNGQlxcdUFDRkQtXFx1QUQxN1xcdUFEMTktXFx1QUQzM1xcdUFEMzUtXFx1QUQ0RlxcdUFENTEtXFx1QUQ2QlxcdUFENkQtXFx1QUQ4N1xcdUFEODktXFx1QURBM1xcdUFEQTUtXFx1QURCRlxcdUFEQzEtXFx1QUREQlxcdUFEREQtXFx1QURGN1xcdUFERjktXFx1QUUxM1xcdUFFMTUtXFx1QUUyRlxcdUFFMzEtXFx1QUU0QlxcdUFFNEQtXFx1QUU2N1xcdUFFNjktXFx1QUU4M1xcdUFFODUtXFx1QUU5RlxcdUFFQTEtXFx1QUVCQlxcdUFFQkQtXFx1QUVEN1xcdUFFRDktXFx1QUVGM1xcdUFFRjUtXFx1QUYwRlxcdUFGMTEtXFx1QUYyQlxcdUFGMkQtXFx1QUY0N1xcdUFGNDktXFx1QUY2M1xcdUFGNjUtXFx1QUY3RlxcdUFGODEtXFx1QUY5QlxcdUFGOUQtXFx1QUZCN1xcdUFGQjktXFx1QUZEM1xcdUFGRDUtXFx1QUZFRlxcdUFGRjEtXFx1QjAwQlxcdUIwMEQtXFx1QjAyN1xcdUIwMjktXFx1QjA0M1xcdUIwNDUtXFx1QjA1RlxcdUIwNjEtXFx1QjA3QlxcdUIwN0QtXFx1QjA5N1xcdUIwOTktXFx1QjBCM1xcdUIwQjUtXFx1QjBDRlxcdUIwRDEtXFx1QjBFQlxcdUIwRUQtXFx1QjEwN1xcdUIxMDktXFx1QjEyM1xcdUIxMjUtXFx1QjEzRlxcdUIxNDEtXFx1QjE1QlxcdUIxNUQtXFx1QjE3N1xcdUIxNzktXFx1QjE5M1xcdUIxOTUtXFx1QjFBRlxcdUIxQjEtXFx1QjFDQlxcdUIxQ0QtXFx1QjFFN1xcdUIxRTktXFx1QjIwM1xcdUIyMDUtXFx1QjIxRlxcdUIyMjEtXFx1QjIzQlxcdUIyM0QtXFx1QjI1N1xcdUIyNTktXFx1QjI3M1xcdUIyNzUtXFx1QjI4RlxcdUIyOTEtXFx1QjJBQlxcdUIyQUQtXFx1QjJDN1xcdUIyQzktXFx1QjJFM1xcdUIyRTUtXFx1QjJGRlxcdUIzMDEtXFx1QjMxQlxcdUIzMUQtXFx1QjMzN1xcdUIzMzktXFx1QjM1M1xcdUIzNTUtXFx1QjM2RlxcdUIzNzEtXFx1QjM4QlxcdUIzOEQtXFx1QjNBN1xcdUIzQTktXFx1QjNDM1xcdUIzQzUtXFx1QjNERlxcdUIzRTEtXFx1QjNGQlxcdUIzRkQtXFx1QjQxN1xcdUI0MTktXFx1QjQzM1xcdUI0MzUtXFx1QjQ0RlxcdUI0NTEtXFx1QjQ2QlxcdUI0NkQtXFx1QjQ4N1xcdUI0ODktXFx1QjRBM1xcdUI0QTUtXFx1QjRCRlxcdUI0QzEtXFx1QjREQlxcdUI0REQtXFx1QjRGN1xcdUI0RjktXFx1QjUxM1xcdUI1MTUtXFx1QjUyRlxcdUI1MzEtXFx1QjU0QlxcdUI1NEQtXFx1QjU2N1xcdUI1NjktXFx1QjU4M1xcdUI1ODUtXFx1QjU5RlxcdUI1QTEtXFx1QjVCQlxcdUI1QkQtXFx1QjVEN1xcdUI1RDktXFx1QjVGM1xcdUI1RjUtXFx1QjYwRlxcdUI2MTEtXFx1QjYyQlxcdUI2MkQtXFx1QjY0N1xcdUI2NDktXFx1QjY2M1xcdUI2NjUtXFx1QjY3RlxcdUI2ODEtXFx1QjY5QlxcdUI2OUQtXFx1QjZCN1xcdUI2QjktXFx1QjZEM1xcdUI2RDUtXFx1QjZFRlxcdUI2RjEtXFx1QjcwQlxcdUI3MEQtXFx1QjcyN1xcdUI3MjktXFx1Qjc0M1xcdUI3NDUtXFx1Qjc1RlxcdUI3NjEtXFx1Qjc3QlxcdUI3N0QtXFx1Qjc5N1xcdUI3OTktXFx1QjdCM1xcdUI3QjUtXFx1QjdDRlxcdUI3RDEtXFx1QjdFQlxcdUI3RUQtXFx1QjgwN1xcdUI4MDktXFx1QjgyM1xcdUI4MjUtXFx1QjgzRlxcdUI4NDEtXFx1Qjg1QlxcdUI4NUQtXFx1Qjg3N1xcdUI4NzktXFx1Qjg5M1xcdUI4OTUtXFx1QjhBRlxcdUI4QjEtXFx1QjhDQlxcdUI4Q0QtXFx1QjhFN1xcdUI4RTktXFx1QjkwM1xcdUI5MDUtXFx1QjkxRlxcdUI5MjEtXFx1QjkzQlxcdUI5M0QtXFx1Qjk1N1xcdUI5NTktXFx1Qjk3M1xcdUI5NzUtXFx1Qjk4RlxcdUI5OTEtXFx1QjlBQlxcdUI5QUQtXFx1QjlDN1xcdUI5QzktXFx1QjlFM1xcdUI5RTUtXFx1QjlGRlxcdUJBMDEtXFx1QkExQlxcdUJBMUQtXFx1QkEzN1xcdUJBMzktXFx1QkE1M1xcdUJBNTUtXFx1QkE2RlxcdUJBNzEtXFx1QkE4QlxcdUJBOEQtXFx1QkFBN1xcdUJBQTktXFx1QkFDM1xcdUJBQzUtXFx1QkFERlxcdUJBRTEtXFx1QkFGQlxcdUJBRkQtXFx1QkIxN1xcdUJCMTktXFx1QkIzM1xcdUJCMzUtXFx1QkI0RlxcdUJCNTEtXFx1QkI2QlxcdUJCNkQtXFx1QkI4N1xcdUJCODktXFx1QkJBM1xcdUJCQTUtXFx1QkJCRlxcdUJCQzEtXFx1QkJEQlxcdUJCREQtXFx1QkJGN1xcdUJCRjktXFx1QkMxM1xcdUJDMTUtXFx1QkMyRlxcdUJDMzEtXFx1QkM0QlxcdUJDNEQtXFx1QkM2N1xcdUJDNjktXFx1QkM4M1xcdUJDODUtXFx1QkM5RlxcdUJDQTEtXFx1QkNCQlxcdUJDQkQtXFx1QkNEN1xcdUJDRDktXFx1QkNGM1xcdUJDRjUtXFx1QkQwRlxcdUJEMTEtXFx1QkQyQlxcdUJEMkQtXFx1QkQ0N1xcdUJENDktXFx1QkQ2M1xcdUJENjUtXFx1QkQ3RlxcdUJEODEtXFx1QkQ5QlxcdUJEOUQtXFx1QkRCN1xcdUJEQjktXFx1QkREM1xcdUJERDUtXFx1QkRFRlxcdUJERjEtXFx1QkUwQlxcdUJFMEQtXFx1QkUyN1xcdUJFMjktXFx1QkU0M1xcdUJFNDUtXFx1QkU1RlxcdUJFNjEtXFx1QkU3QlxcdUJFN0QtXFx1QkU5N1xcdUJFOTktXFx1QkVCM1xcdUJFQjUtXFx1QkVDRlxcdUJFRDEtXFx1QkVFQlxcdUJFRUQtXFx1QkYwN1xcdUJGMDktXFx1QkYyM1xcdUJGMjUtXFx1QkYzRlxcdUJGNDEtXFx1QkY1QlxcdUJGNUQtXFx1QkY3N1xcdUJGNzktXFx1QkY5M1xcdUJGOTUtXFx1QkZBRlxcdUJGQjEtXFx1QkZDQlxcdUJGQ0QtXFx1QkZFN1xcdUJGRTktXFx1QzAwM1xcdUMwMDUtXFx1QzAxRlxcdUMwMjEtXFx1QzAzQlxcdUMwM0QtXFx1QzA1N1xcdUMwNTktXFx1QzA3M1xcdUMwNzUtXFx1QzA4RlxcdUMwOTEtXFx1QzBBQlxcdUMwQUQtXFx1QzBDN1xcdUMwQzktXFx1QzBFM1xcdUMwRTUtXFx1QzBGRlxcdUMxMDEtXFx1QzExQlxcdUMxMUQtXFx1QzEzN1xcdUMxMzktXFx1QzE1M1xcdUMxNTUtXFx1QzE2RlxcdUMxNzEtXFx1QzE4QlxcdUMxOEQtXFx1QzFBN1xcdUMxQTktXFx1QzFDM1xcdUMxQzUtXFx1QzFERlxcdUMxRTEtXFx1QzFGQlxcdUMxRkQtXFx1QzIxN1xcdUMyMTktXFx1QzIzM1xcdUMyMzUtXFx1QzI0RlxcdUMyNTEtXFx1QzI2QlxcdUMyNkQtXFx1QzI4N1xcdUMyODktXFx1QzJBM1xcdUMyQTUtXFx1QzJCRlxcdUMyQzEtXFx1QzJEQlxcdUMyREQtXFx1QzJGN1xcdUMyRjktXFx1QzMxM1xcdUMzMTUtXFx1QzMyRlxcdUMzMzEtXFx1QzM0QlxcdUMzNEQtXFx1QzM2N1xcdUMzNjktXFx1QzM4M1xcdUMzODUtXFx1QzM5RlxcdUMzQTEtXFx1QzNCQlxcdUMzQkQtXFx1QzNEN1xcdUMzRDktXFx1QzNGM1xcdUMzRjUtXFx1QzQwRlxcdUM0MTEtXFx1QzQyQlxcdUM0MkQtXFx1QzQ0N1xcdUM0NDktXFx1QzQ2M1xcdUM0NjUtXFx1QzQ3RlxcdUM0ODEtXFx1QzQ5QlxcdUM0OUQtXFx1QzRCN1xcdUM0QjktXFx1QzREM1xcdUM0RDUtXFx1QzRFRlxcdUM0RjEtXFx1QzUwQlxcdUM1MEQtXFx1QzUyN1xcdUM1MjktXFx1QzU0M1xcdUM1NDUtXFx1QzU1RlxcdUM1NjEtXFx1QzU3QlxcdUM1N0QtXFx1QzU5N1xcdUM1OTktXFx1QzVCM1xcdUM1QjUtXFx1QzVDRlxcdUM1RDEtXFx1QzVFQlxcdUM1RUQtXFx1QzYwN1xcdUM2MDktXFx1QzYyM1xcdUM2MjUtXFx1QzYzRlxcdUM2NDEtXFx1QzY1QlxcdUM2NUQtXFx1QzY3N1xcdUM2NzktXFx1QzY5M1xcdUM2OTUtXFx1QzZBRlxcdUM2QjEtXFx1QzZDQlxcdUM2Q0QtXFx1QzZFN1xcdUM2RTktXFx1QzcwM1xcdUM3MDUtXFx1QzcxRlxcdUM3MjEtXFx1QzczQlxcdUM3M0QtXFx1Qzc1N1xcdUM3NTktXFx1Qzc3M1xcdUM3NzUtXFx1Qzc4RlxcdUM3OTEtXFx1QzdBQlxcdUM3QUQtXFx1QzdDN1xcdUM3QzktXFx1QzdFM1xcdUM3RTUtXFx1QzdGRlxcdUM4MDEtXFx1QzgxQlxcdUM4MUQtXFx1QzgzN1xcdUM4MzktXFx1Qzg1M1xcdUM4NTUtXFx1Qzg2RlxcdUM4NzEtXFx1Qzg4QlxcdUM4OEQtXFx1QzhBN1xcdUM4QTktXFx1QzhDM1xcdUM4QzUtXFx1QzhERlxcdUM4RTEtXFx1QzhGQlxcdUM4RkQtXFx1QzkxN1xcdUM5MTktXFx1QzkzM1xcdUM5MzUtXFx1Qzk0RlxcdUM5NTEtXFx1Qzk2QlxcdUM5NkQtXFx1Qzk4N1xcdUM5ODktXFx1QzlBM1xcdUM5QTUtXFx1QzlCRlxcdUM5QzEtXFx1QzlEQlxcdUM5REQtXFx1QzlGN1xcdUM5RjktXFx1Q0ExM1xcdUNBMTUtXFx1Q0EyRlxcdUNBMzEtXFx1Q0E0QlxcdUNBNEQtXFx1Q0E2N1xcdUNBNjktXFx1Q0E4M1xcdUNBODUtXFx1Q0E5RlxcdUNBQTEtXFx1Q0FCQlxcdUNBQkQtXFx1Q0FEN1xcdUNBRDktXFx1Q0FGM1xcdUNBRjUtXFx1Q0IwRlxcdUNCMTEtXFx1Q0IyQlxcdUNCMkQtXFx1Q0I0N1xcdUNCNDktXFx1Q0I2M1xcdUNCNjUtXFx1Q0I3RlxcdUNCODEtXFx1Q0I5QlxcdUNCOUQtXFx1Q0JCN1xcdUNCQjktXFx1Q0JEM1xcdUNCRDUtXFx1Q0JFRlxcdUNCRjEtXFx1Q0MwQlxcdUNDMEQtXFx1Q0MyN1xcdUNDMjktXFx1Q0M0M1xcdUNDNDUtXFx1Q0M1RlxcdUNDNjEtXFx1Q0M3QlxcdUNDN0QtXFx1Q0M5N1xcdUNDOTktXFx1Q0NCM1xcdUNDQjUtXFx1Q0NDRlxcdUNDRDEtXFx1Q0NFQlxcdUNDRUQtXFx1Q0QwN1xcdUNEMDktXFx1Q0QyM1xcdUNEMjUtXFx1Q0QzRlxcdUNENDEtXFx1Q0Q1QlxcdUNENUQtXFx1Q0Q3N1xcdUNENzktXFx1Q0Q5M1xcdUNEOTUtXFx1Q0RBRlxcdUNEQjEtXFx1Q0RDQlxcdUNEQ0QtXFx1Q0RFN1xcdUNERTktXFx1Q0UwM1xcdUNFMDUtXFx1Q0UxRlxcdUNFMjEtXFx1Q0UzQlxcdUNFM0QtXFx1Q0U1N1xcdUNFNTktXFx1Q0U3M1xcdUNFNzUtXFx1Q0U4RlxcdUNFOTEtXFx1Q0VBQlxcdUNFQUQtXFx1Q0VDN1xcdUNFQzktXFx1Q0VFM1xcdUNFRTUtXFx1Q0VGRlxcdUNGMDEtXFx1Q0YxQlxcdUNGMUQtXFx1Q0YzN1xcdUNGMzktXFx1Q0Y1M1xcdUNGNTUtXFx1Q0Y2RlxcdUNGNzEtXFx1Q0Y4QlxcdUNGOEQtXFx1Q0ZBN1xcdUNGQTktXFx1Q0ZDM1xcdUNGQzUtXFx1Q0ZERlxcdUNGRTEtXFx1Q0ZGQlxcdUNGRkQtXFx1RDAxN1xcdUQwMTktXFx1RDAzM1xcdUQwMzUtXFx1RDA0RlxcdUQwNTEtXFx1RDA2QlxcdUQwNkQtXFx1RDA4N1xcdUQwODktXFx1RDBBM1xcdUQwQTUtXFx1RDBCRlxcdUQwQzEtXFx1RDBEQlxcdUQwREQtXFx1RDBGN1xcdUQwRjktXFx1RDExM1xcdUQxMTUtXFx1RDEyRlxcdUQxMzEtXFx1RDE0QlxcdUQxNEQtXFx1RDE2N1xcdUQxNjktXFx1RDE4M1xcdUQxODUtXFx1RDE5RlxcdUQxQTEtXFx1RDFCQlxcdUQxQkQtXFx1RDFEN1xcdUQxRDktXFx1RDFGM1xcdUQxRjUtXFx1RDIwRlxcdUQyMTEtXFx1RDIyQlxcdUQyMkQtXFx1RDI0N1xcdUQyNDktXFx1RDI2M1xcdUQyNjUtXFx1RDI3RlxcdUQyODEtXFx1RDI5QlxcdUQyOUQtXFx1RDJCN1xcdUQyQjktXFx1RDJEM1xcdUQyRDUtXFx1RDJFRlxcdUQyRjEtXFx1RDMwQlxcdUQzMEQtXFx1RDMyN1xcdUQzMjktXFx1RDM0M1xcdUQzNDUtXFx1RDM1RlxcdUQzNjEtXFx1RDM3QlxcdUQzN0QtXFx1RDM5N1xcdUQzOTktXFx1RDNCM1xcdUQzQjUtXFx1RDNDRlxcdUQzRDEtXFx1RDNFQlxcdUQzRUQtXFx1RDQwN1xcdUQ0MDktXFx1RDQyM1xcdUQ0MjUtXFx1RDQzRlxcdUQ0NDEtXFx1RDQ1QlxcdUQ0NUQtXFx1RDQ3N1xcdUQ0NzktXFx1RDQ5M1xcdUQ0OTUtXFx1RDRBRlxcdUQ0QjEtXFx1RDRDQlxcdUQ0Q0QtXFx1RDRFN1xcdUQ0RTktXFx1RDUwM1xcdUQ1MDUtXFx1RDUxRlxcdUQ1MjEtXFx1RDUzQlxcdUQ1M0QtXFx1RDU1N1xcdUQ1NTktXFx1RDU3M1xcdUQ1NzUtXFx1RDU4RlxcdUQ1OTEtXFx1RDVBQlxcdUQ1QUQtXFx1RDVDN1xcdUQ1QzktXFx1RDVFM1xcdUQ1RTUtXFx1RDVGRlxcdUQ2MDEtXFx1RDYxQlxcdUQ2MUQtXFx1RDYzN1xcdUQ2MzktXFx1RDY1M1xcdUQ2NTUtXFx1RDY2RlxcdUQ2NzEtXFx1RDY4QlxcdUQ2OEQtXFx1RDZBN1xcdUQ2QTktXFx1RDZDM1xcdUQ2QzUtXFx1RDZERlxcdUQ2RTEtXFx1RDZGQlxcdUQ2RkQtXFx1RDcxN1xcdUQ3MTktXFx1RDczM1xcdUQ3MzUtXFx1RDc0RlxcdUQ3NTEtXFx1RDc2QlxcdUQ3NkQtXFx1RDc4N1xcdUQ3ODktXFx1RDdBM10kLyxwZj0vXig/OltcXHhBOVxceEFFXFx1MjAzQ1xcdTIwNDlcXHUyMTIyXFx1MjEzOVxcdTIxOTQtXFx1MjE5OVxcdTIxQTlcXHUyMUFBXFx1MjMxQVxcdTIzMUJcXHUyMzI4XFx1MjM4OFxcdTIzQ0ZcXHUyM0U5LVxcdTIzRjNcXHUyM0Y4LVxcdTIzRkFcXHUyNEMyXFx1MjVBQVxcdTI1QUJcXHUyNUI2XFx1MjVDMFxcdTI1RkItXFx1MjVGRVxcdTI2MDAtXFx1MjYwNVxcdTI2MDctXFx1MjYxMlxcdTI2MTQtXFx1MjY4NVxcdTI2OTAtXFx1MjcwNVxcdTI3MDgtXFx1MjcxMlxcdTI3MTRcXHUyNzE2XFx1MjcxRFxcdTI3MjFcXHUyNzI4XFx1MjczM1xcdTI3MzRcXHUyNzQ0XFx1Mjc0N1xcdTI3NENcXHUyNzRFXFx1Mjc1My1cXHUyNzU1XFx1Mjc1N1xcdTI3NjMtXFx1Mjc2N1xcdTI3OTUtXFx1Mjc5N1xcdTI3QTFcXHUyN0IwXFx1MjdCRlxcdTI5MzRcXHUyOTM1XFx1MkIwNS1cXHUyQjA3XFx1MkIxQlxcdTJCMUNcXHUyQjUwXFx1MkI1NVxcdTMwMzBcXHUzMDNEXFx1MzI5N1xcdTMyOTldfFxcdUQ4M0NbXFx1REMwMC1cXHVEQ0ZGXFx1REQwRC1cXHVERDBGXFx1REQyRlxcdURENkMtXFx1REQ3MVxcdUREN0VcXHVERDdGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdUREQUQtXFx1RERFNVxcdURFMDEtXFx1REUwRlxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTNBXFx1REUzQy1cXHVERTNGXFx1REU0OS1cXHVERkZBXXxcXHVEODNEW1xcdURDMDAtXFx1REQzRFxcdURENDYtXFx1REU0RlxcdURFODAtXFx1REVGRlxcdURGNzQtXFx1REY3RlxcdURGRDUtXFx1REZGRl18XFx1RDgzRVtcXHVEQzBDLVxcdURDMEZcXHVEQzQ4LVxcdURDNEZcXHVEQzVBLVxcdURDNUZcXHVEQzg4LVxcdURDOEZcXHVEQ0FFLVxcdURDRkZcXHVERDBDLVxcdUREM0FcXHVERDNDLVxcdURENDVcXHVERDQ3LVxcdURFRkZdfFxcdUQ4M0ZbXFx1REMwMC1cXHVERkZEXSkkLyxoZj0oZSx0KT0+e3ZhciBuPUtjLkFueTtyZXR1cm4tMSE9PWUuc2VhcmNoKG9mKSYmKG58PUtjLkV4dGVuZCksODIwNT09PXQmJihufD1LYy5aV0opLHQ+PTEyNzQ2MiYmdDw9MTI3NDg3JiYobnw9S2MuUkkpLC0xIT09ZS5zZWFyY2goYWYpJiYobnw9S2MuUHJlcGVuZCksLTEhPT1lLnNlYXJjaCh1ZikmJihufD1LYy5TcGFjaW5nTWFyayksLTEhPT1lLnNlYXJjaChzZikmJihufD1LYy5MKSwtMSE9PWUuc2VhcmNoKGxmKSYmKG58PUtjLlYpLC0xIT09ZS5zZWFyY2goY2YpJiYobnw9S2MuVCksLTEhPT1lLnNlYXJjaChmZikmJihufD1LYy5MViksLTEhPT1lLnNlYXJjaChkZikmJihufD1LYy5MVlQpLC0xIT09ZS5zZWFyY2gocGYpJiYobnw9S2MuRXh0UGljdCksbn07ZnVuY3Rpb24gZ2YoZSx0KXtyZXR1cm4gMCE9KGUmdCl9dmFyIHZmPVtbS2MuTCxLYy5MfEtjLlZ8S2MuTFZ8S2MuTFZUXSxbS2MuTFZ8S2MuVixLYy5WfEtjLlRdLFtLYy5MVlR8S2MuVCxLYy5UXSxbS2MuQW55LEtjLkV4dGVuZHxLYy5aV0pdLFtLYy5BbnksS2MuU3BhY2luZ01hcmtdLFtLYy5QcmVwZW5kLEtjLkFueV0sW0tjLlpXSixLYy5FeHRQaWN0XSxbS2MuUkksS2MuUkldXTtmdW5jdGlvbiB5ZihlLHQpe3JldHVybi0xPT09dmYuZmluZEluZGV4KChuPT5nZihlLG5bMF0pJiZnZih0LG5bMV0pKSl9dmFyIG1mPS8oPzpbXFx4QTlcXHhBRVxcdTIwM0NcXHUyMDQ5XFx1MjEyMlxcdTIxMzlcXHUyMTk0LVxcdTIxOTlcXHUyMUE5XFx1MjFBQVxcdTIzMUFcXHUyMzFCXFx1MjMyOFxcdTIzODhcXHUyM0NGXFx1MjNFOS1cXHUyM0YzXFx1MjNGOC1cXHUyM0ZBXFx1MjRDMlxcdTI1QUFcXHUyNUFCXFx1MjVCNlxcdTI1QzBcXHUyNUZCLVxcdTI1RkVcXHUyNjAwLVxcdTI2MDVcXHUyNjA3LVxcdTI2MTJcXHUyNjE0LVxcdTI2ODVcXHUyNjkwLVxcdTI3MDVcXHUyNzA4LVxcdTI3MTJcXHUyNzE0XFx1MjcxNlxcdTI3MURcXHUyNzIxXFx1MjcyOFxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3NTdcXHUyNzYzLVxcdTI3NjdcXHUyNzk1LVxcdTI3OTdcXHUyN0ExXFx1MjdCMFxcdTI3QkZcXHUyOTM0XFx1MjkzNVxcdTJCMDUtXFx1MkIwN1xcdTJCMUJcXHUyQjFDXFx1MkI1MFxcdTJCNTVcXHUzMDMwXFx1MzAzRFxcdTMyOTdcXHUzMjk5XXxcXHVEODNDW1xcdURDMDAtXFx1RENGRlxcdUREMEQtXFx1REQwRlxcdUREMkZcXHVERDZDLVxcdURENzFcXHVERDdFXFx1REQ3RlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVEREFELVxcdURERTVcXHVERTAxLVxcdURFMEZcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzQVxcdURFM0MtXFx1REUzRlxcdURFNDktXFx1REZGQV18XFx1RDgzRFtcXHVEQzAwLVxcdUREM0RcXHVERDQ2LVxcdURFNEZcXHVERTgwLVxcdURFRkZcXHVERjc0LVxcdURGN0ZcXHVERkQ1LVxcdURGRkZdfFxcdUQ4M0VbXFx1REMwQy1cXHVEQzBGXFx1REM0OC1cXHVEQzRGXFx1REM1QS1cXHVEQzVGXFx1REM4OC1cXHVEQzhGXFx1RENBRS1cXHVEQ0ZGXFx1REQwQy1cXHVERDNBXFx1REQzQy1cXHVERDQ1XFx1REQ0Ny1cXHVERUZGXXxcXHVEODNGW1xcdURDMDAtXFx1REZGRF0pKD86W1xcdTAzMDAtXFx1MDM2RlxcdTA0ODMtXFx1MDQ4OVxcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA2MTAtXFx1MDYxQVxcdTA2NEItXFx1MDY1RlxcdTA2NzBcXHUwNkQ2LVxcdTA2RENcXHUwNkRGLVxcdTA2RTRcXHUwNkU3XFx1MDZFOFxcdTA2RUEtXFx1MDZFRFxcdTA3MTFcXHUwNzMwLVxcdTA3NEFcXHUwN0E2LVxcdTA3QjBcXHUwN0VCLVxcdTA3RjNcXHUwN0ZEXFx1MDgxNi1cXHUwODE5XFx1MDgxQi1cXHUwODIzXFx1MDgyNS1cXHUwODI3XFx1MDgyOS1cXHUwODJEXFx1MDg1OS1cXHUwODVCXFx1MDhEMy1cXHUwOEUxXFx1MDhFMy1cXHUwOTAyXFx1MDkzQVxcdTA5M0NcXHUwOTQxLVxcdTA5NDhcXHUwOTREXFx1MDk1MS1cXHUwOTU3XFx1MDk2MlxcdTA5NjNcXHUwOTgxXFx1MDlCQ1xcdTA5QkVcXHUwOUMxLVxcdTA5QzRcXHUwOUNEXFx1MDlEN1xcdTA5RTJcXHUwOUUzXFx1MDlGRVxcdTBBMDFcXHUwQTAyXFx1MEEzQ1xcdTBBNDFcXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTUxXFx1MEE3MFxcdTBBNzFcXHUwQTc1XFx1MEE4MVxcdTBBODJcXHUwQUJDXFx1MEFDMS1cXHUwQUM1XFx1MEFDN1xcdTBBQzhcXHUwQUNEXFx1MEFFMlxcdTBBRTNcXHUwQUZBLVxcdTBBRkZcXHUwQjAxXFx1MEIzQ1xcdTBCM0VcXHUwQjNGXFx1MEI0MS1cXHUwQjQ0XFx1MEI0RFxcdTBCNTUtXFx1MEI1N1xcdTBCNjJcXHUwQjYzXFx1MEI4MlxcdTBCQkVcXHUwQkMwXFx1MEJDRFxcdTBCRDdcXHUwQzAwXFx1MEMwNFxcdTBDM0UtXFx1MEM0MFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM2MlxcdTBDNjNcXHUwQzgxXFx1MENCQ1xcdTBDQkZcXHUwQ0MyXFx1MENDNlxcdTBDQ0NcXHUwQ0NEXFx1MENENVxcdTBDRDZcXHUwQ0UyXFx1MENFM1xcdTBEMDBcXHUwRDAxXFx1MEQzQlxcdTBEM0NcXHUwRDNFXFx1MEQ0MS1cXHUwRDQ0XFx1MEQ0RFxcdTBENTdcXHUwRDYyXFx1MEQ2M1xcdTBEODFcXHUwRENBXFx1MERDRlxcdTBERDItXFx1MERENFxcdTBERDZcXHUwRERGXFx1MEUzMVxcdTBFMzQtXFx1MEUzQVxcdTBFNDctXFx1MEU0RVxcdTBFQjFcXHUwRUI0LVxcdTBFQkNcXHUwRUM4LVxcdTBFQ0RcXHUwRjE4XFx1MEYxOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGNzEtXFx1MEY3RVxcdTBGODAtXFx1MEY4NFxcdTBGODZcXHUwRjg3XFx1MEY4RC1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMkQtXFx1MTAzMFxcdTEwMzItXFx1MTAzN1xcdTEwMzlcXHUxMDNBXFx1MTAzRFxcdTEwM0VcXHUxMDU4XFx1MTA1OVxcdTEwNUUtXFx1MTA2MFxcdTEwNzEtXFx1MTA3NFxcdTEwODJcXHUxMDg1XFx1MTA4NlxcdTEwOERcXHUxMDlEXFx1MTM1RC1cXHUxMzVGXFx1MTcxMi1cXHUxNzE0XFx1MTczMi1cXHUxNzM0XFx1MTc1MlxcdTE3NTNcXHUxNzcyXFx1MTc3M1xcdTE3QjRcXHUxN0I1XFx1MTdCNy1cXHUxN0JEXFx1MTdDNlxcdTE3QzktXFx1MTdEM1xcdTE3RERcXHUxODBCLVxcdTE4MERcXHUxODg1XFx1MTg4NlxcdTE4QTlcXHUxOTIwLVxcdTE5MjJcXHUxOTI3XFx1MTkyOFxcdTE5MzJcXHUxOTM5LVxcdTE5M0JcXHUxQTE3XFx1MUExOFxcdTFBMUJcXHUxQTU2XFx1MUE1OC1cXHUxQTVFXFx1MUE2MFxcdTFBNjJcXHUxQTY1LVxcdTFBNkNcXHUxQTczLVxcdTFBN0NcXHUxQTdGXFx1MUFCMC1cXHUxQUMwXFx1MUIwMC1cXHUxQjAzXFx1MUIzNC1cXHUxQjNBXFx1MUIzQ1xcdTFCNDJcXHUxQjZCLVxcdTFCNzNcXHUxQjgwXFx1MUI4MVxcdTFCQTItXFx1MUJBNVxcdTFCQThcXHUxQkE5XFx1MUJBQi1cXHUxQkFEXFx1MUJFNlxcdTFCRThcXHUxQkU5XFx1MUJFRFxcdTFCRUYtXFx1MUJGMVxcdTFDMkMtXFx1MUMzM1xcdTFDMzZcXHUxQzM3XFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0UwXFx1MUNFMi1cXHUxQ0U4XFx1MUNFRFxcdTFDRjRcXHUxQ0Y4XFx1MUNGOVxcdTFEQzAtXFx1MURGOVxcdTFERkItXFx1MURGRlxcdTIwMENcXHUyMEQwLVxcdTIwRjBcXHUyQ0VGLVxcdTJDRjFcXHUyRDdGXFx1MkRFMC1cXHUyREZGXFx1MzAyQS1cXHUzMDJGXFx1MzA5OVxcdTMwOUFcXHVBNjZGLVxcdUE2NzJcXHVBNjc0LVxcdUE2N0RcXHVBNjlFXFx1QTY5RlxcdUE2RjBcXHVBNkYxXFx1QTgwMlxcdUE4MDZcXHVBODBCXFx1QTgyNVxcdUE4MjZcXHVBODJDXFx1QThDNFxcdUE4QzVcXHVBOEUwLVxcdUE4RjFcXHVBOEZGXFx1QTkyNi1cXHVBOTJEXFx1QTk0Ny1cXHVBOTUxXFx1QTk4MC1cXHVBOTgyXFx1QTlCM1xcdUE5QjYtXFx1QTlCOVxcdUE5QkNcXHVBOUJEXFx1QTlFNVxcdUFBMjktXFx1QUEyRVxcdUFBMzFcXHVBQTMyXFx1QUEzNVxcdUFBMzZcXHVBQTQzXFx1QUE0Q1xcdUFBN0NcXHVBQUIwXFx1QUFCMi1cXHVBQUI0XFx1QUFCN1xcdUFBQjhcXHVBQUJFXFx1QUFCRlxcdUFBQzFcXHVBQUVDXFx1QUFFRFxcdUFBRjZcXHVBQkU1XFx1QUJFOFxcdUFCRURcXHVGQjFFXFx1RkUwMC1cXHVGRTBGXFx1RkUyMC1cXHVGRTJGXFx1RkY5RVxcdUZGOUZdfFxcdUQ4MDBbXFx1RERGRFxcdURFRTBcXHVERjc2LVxcdURGN0FdfFxcdUQ4MDJbXFx1REUwMS1cXHVERTAzXFx1REUwNVxcdURFMDZcXHVERTBDLVxcdURFMEZcXHVERTM4LVxcdURFM0FcXHVERTNGXFx1REVFNVxcdURFRTZdfFxcdUQ4MDNbXFx1REQyNC1cXHVERDI3XFx1REVBQlxcdURFQUNcXHVERjQ2LVxcdURGNTBdfFxcdUQ4MDRbXFx1REMwMVxcdURDMzgtXFx1REM0NlxcdURDN0YtXFx1REM4MVxcdURDQjMtXFx1RENCNlxcdURDQjlcXHVEQ0JBXFx1REQwMC1cXHVERDAyXFx1REQyNy1cXHVERDJCXFx1REQyRC1cXHVERDM0XFx1REQ3M1xcdUREODBcXHVERDgxXFx1RERCNi1cXHVEREJFXFx1RERDOS1cXHVERENDXFx1RERDRlxcdURFMkYtXFx1REUzMVxcdURFMzRcXHVERTM2XFx1REUzN1xcdURFM0VcXHVERURGXFx1REVFMy1cXHVERUVBXFx1REYwMFxcdURGMDFcXHVERjNCXFx1REYzQ1xcdURGM0VcXHVERjQwXFx1REY1N1xcdURGNjYtXFx1REY2Q1xcdURGNzAtXFx1REY3NF18XFx1RDgwNVtcXHVEQzM4LVxcdURDM0ZcXHVEQzQyLVxcdURDNDRcXHVEQzQ2XFx1REM1RVxcdURDQjBcXHVEQ0IzLVxcdURDQjhcXHVEQ0JBXFx1RENCRFxcdURDQkZcXHVEQ0MwXFx1RENDMlxcdURDQzNcXHVEREFGXFx1RERCMi1cXHVEREI1XFx1RERCQ1xcdUREQkRcXHVEREJGXFx1RERDMFxcdURERENcXHVEREREXFx1REUzMy1cXHVERTNBXFx1REUzRFxcdURFM0ZcXHVERTQwXFx1REVBQlxcdURFQURcXHVERUIwLVxcdURFQjVcXHVERUI3XFx1REYxRC1cXHVERjFGXFx1REYyMi1cXHVERjI1XFx1REYyNy1cXHVERjJCXXxcXHVEODA2W1xcdURDMkYtXFx1REMzN1xcdURDMzlcXHVEQzNBXFx1REQzMFxcdUREM0JcXHVERDNDXFx1REQzRVxcdURENDNcXHVEREQ0LVxcdURERDdcXHVERERBXFx1REREQlxcdURERTBcXHVERTAxLVxcdURFMEFcXHVERTMzLVxcdURFMzhcXHVERTNCLVxcdURFM0VcXHVERTQ3XFx1REU1MS1cXHVERTU2XFx1REU1OS1cXHVERTVCXFx1REU4QS1cXHVERTk2XFx1REU5OFxcdURFOTldfFxcdUQ4MDdbXFx1REMzMC1cXHVEQzM2XFx1REMzOC1cXHVEQzNEXFx1REMzRlxcdURDOTItXFx1RENBN1xcdURDQUEtXFx1RENCMFxcdURDQjJcXHVEQ0IzXFx1RENCNVxcdURDQjZcXHVERDMxLVxcdUREMzZcXHVERDNBXFx1REQzQ1xcdUREM0RcXHVERDNGLVxcdURENDVcXHVERDQ3XFx1REQ5MFxcdUREOTFcXHVERDk1XFx1REQ5N1xcdURFRjNcXHVERUY0XXxcXHVEODFBW1xcdURFRjAtXFx1REVGNFxcdURGMzAtXFx1REYzNl18XFx1RDgxQltcXHVERjRGXFx1REY4Ri1cXHVERjkyXFx1REZFNF18XFx1RDgyRltcXHVEQzlEXFx1REM5RV18XFx1RDgzNFtcXHVERDY1XFx1REQ2Ny1cXHVERDY5XFx1REQ2RS1cXHVERDcyXFx1REQ3Qi1cXHVERDgyXFx1REQ4NS1cXHVERDhCXFx1RERBQS1cXHVEREFEXFx1REU0Mi1cXHVERTQ0XXxcXHVEODM2W1xcdURFMDAtXFx1REUzNlxcdURFM0ItXFx1REU2Q1xcdURFNzVcXHVERTg0XFx1REU5Qi1cXHVERTlGXFx1REVBMS1cXHVERUFGXXxcXHVEODM4W1xcdURDMDAtXFx1REMwNlxcdURDMDgtXFx1REMxOFxcdURDMUItXFx1REMyMVxcdURDMjNcXHVEQzI0XFx1REMyNi1cXHVEQzJBXFx1REQzMC1cXHVERDM2XFx1REVFQy1cXHVERUVGXXxcXHVEODNBW1xcdURDRDAtXFx1RENENlxcdURENDQtXFx1REQ0QV18XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdURCNDBbXFx1REMyMC1cXHVEQzdGXFx1REQwMC1cXHVEREVGXSkqXFx1MjAwRCQvLGJmPWU9Pi0xIT09ZS5zZWFyY2gobWYpLHdmPS8oPzpcXHVEODNDW1xcdURERTYtXFx1RERGRl0pKyQvZyxFZj1lPT57dmFyIHQ9ZS5tYXRjaCh3Zik7cmV0dXJuIG51bGwhPT10JiZ0WzBdLmxlbmd0aC8yJTI9PTF9LERmPWU9PkxsKGUpJiZOZi5pc05vZGVMaXN0KGUuY2hpbGRyZW4pJiYhQmYuaXNFZGl0b3IoZSksU2Y9e2lzQW5jZXN0b3I6ZT0+TGwoZSkmJk5mLmlzTm9kZUxpc3QoZS5jaGlsZHJlbiksaXNFbGVtZW50OkRmLGlzRWxlbWVudExpc3Q6ZT0+QXJyYXkuaXNBcnJheShlKSYmZS5ldmVyeSgoZT0+U2YuaXNFbGVtZW50KGUpKSksaXNFbGVtZW50UHJvcHM6ZT0+dm9pZCAwIT09ZS5jaGlsZHJlbixpc0VsZW1lbnRUeXBlOmZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOlwidHlwZVwiO3JldHVybiBEZihlKSYmZVtuXT09PXR9LG1hdGNoZXMoZSx0KXtmb3IodmFyIG4gaW4gdClpZihcImNoaWxkcmVuXCIhPT1uJiZlW25dIT09dFtuXSlyZXR1cm4hMTtyZXR1cm4hMH19LHhmPVtcInRleHRcIl0sQ2Y9W1widGV4dFwiXTtmdW5jdGlvbiBBZihlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gT2YoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/QWYoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtJYyhlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6QWYoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9dmFyIGtmPW5ldyBXZWFrTWFwLEJmPXthYm92ZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30se3ZvaWRzOm49ITEsbW9kZTpyPVwibG93ZXN0XCIsYXQ6bz1lLnNlbGVjdGlvbixtYXRjaDppfT10O2lmKG8pe3ZhciBhPUJmLnBhdGgoZSxvKSx1PVwibG93ZXN0XCI9PT1yO2Zvcih2YXJbcyxsXW9mIEJmLmxldmVscyhlLHthdDphLHZvaWRzOm4sbWF0Y2g6aSxyZXZlcnNlOnV9KSlpZighZWQuaXNUZXh0KHMpJiYhTWYuZXF1YWxzKGEsbCkpcmV0dXJuW3MsbF19fSxhZGRNYXJrKGUsdCxuKXtlLmFkZE1hcmsodCxuKX0sYWZ0ZXIoZSx0KXt2YXIgbixyPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSxvPXthbmNob3I6QmYucG9pbnQoZSx0LHtlZGdlOlwiZW5kXCJ9KSxmb2N1czpCZi5lbmQoZSxbXSl9LHtkaXN0YW5jZTppPTF9PXIsYT0wO2Zvcih2YXIgdSBvZiBCZi5wb3NpdGlvbnMoZSxPZihPZih7fSxyKSx7fSx7YXQ6b30pKSl7aWYoYT5pKWJyZWFrOzAhPT1hJiYobj11KSxhKyt9cmV0dXJuIG59LGJlZm9yZShlLHQpe3ZhciBuLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LG89e2FuY2hvcjpCZi5zdGFydChlLFtdKSxmb2N1czpCZi5wb2ludChlLHQse2VkZ2U6XCJzdGFydFwifSl9LHtkaXN0YW5jZTppPTF9PXIsYT0wO2Zvcih2YXIgdSBvZiBCZi5wb3NpdGlvbnMoZSxPZihPZih7fSxyKSx7fSx7YXQ6byxyZXZlcnNlOiEwfSkpKXtpZihhPmkpYnJlYWs7MCE9PWEmJihuPXUpLGErK31yZXR1cm4gbn0sZGVsZXRlQmFja3dhcmQoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHt1bml0Om49XCJjaGFyYWN0ZXJcIn09dDtlLmRlbGV0ZUJhY2t3YXJkKG4pfSxkZWxldGVGb3J3YXJkKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSx7dW5pdDpuPVwiY2hhcmFjdGVyXCJ9PXQ7ZS5kZWxldGVGb3J3YXJkKG4pfSxkZWxldGVGcmFnbWVudChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30se2RpcmVjdGlvbjpuPVwiZm9yd2FyZFwifT10O2UuZGVsZXRlRnJhZ21lbnQobil9LGVkZ2VzOihlLHQpPT5bQmYuc3RhcnQoZSx0KSxCZi5lbmQoZSx0KV0sZW5kOihlLHQpPT5CZi5wb2ludChlLHQse2VkZ2U6XCJlbmRcIn0pLGZpcnN0KGUsdCl7dmFyIG49QmYucGF0aChlLHQse2VkZ2U6XCJzdGFydFwifSk7cmV0dXJuIEJmLm5vZGUoZSxuKX0sZnJhZ21lbnQoZSx0KXt2YXIgbj1CZi5yYW5nZShlLHQpO3JldHVybiBOZi5mcmFnbWVudChlLG4pfSxoYXNCbG9ja3M6KGUsdCk9PnQuY2hpbGRyZW4uc29tZSgodD0+QmYuaXNCbG9jayhlLHQpKSksaGFzSW5saW5lczooZSx0KT0+dC5jaGlsZHJlbi5zb21lKCh0PT5lZC5pc1RleHQodCl8fEJmLmlzSW5saW5lKGUsdCkpKSxoYXNUZXh0czooZSx0KT0+dC5jaGlsZHJlbi5ldmVyeSgoZT0+ZWQuaXNUZXh0KGUpKSksaW5zZXJ0QnJlYWsoZSl7ZS5pbnNlcnRCcmVhaygpfSxpbnNlcnRGcmFnbWVudChlLHQpe2UuaW5zZXJ0RnJhZ21lbnQodCl9LGluc2VydE5vZGUoZSx0KXtlLmluc2VydE5vZGUodCl9LGluc2VydFRleHQoZSx0KXtlLmluc2VydFRleHQodCl9LGlzQmxvY2s6KGUsdCk9PlNmLmlzRWxlbWVudCh0KSYmIWUuaXNJbmxpbmUodCksaXNFZGl0b3IoZSl7aWYoIUxsKGUpKXJldHVybiExO3ZhciB0PWtmLmdldChlKTtpZih2b2lkIDAhPT10KXJldHVybiB0O3ZhciBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIGUuYWRkTWFyayYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5hcHBseSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5kZWxldGVCYWNrd2FyZCYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5kZWxldGVGb3J3YXJkJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmRlbGV0ZUZyYWdtZW50JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmluc2VydEJyZWFrJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmluc2VydEZyYWdtZW50JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmluc2VydE5vZGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuaW5zZXJ0VGV4dCYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5pc0lubGluZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5pc1ZvaWQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUubm9ybWFsaXplTm9kZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5vbkNoYW5nZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5yZW1vdmVNYXJrJiYobnVsbD09PWUubWFya3N8fExsKGUubWFya3MpKSYmKG51bGw9PT1lLnNlbGVjdGlvbnx8cWYuaXNSYW5nZShlLnNlbGVjdGlvbikpJiZOZi5pc05vZGVMaXN0KGUuY2hpbGRyZW4pJiZSZi5pc09wZXJhdGlvbkxpc3QoZS5vcGVyYXRpb25zKTtyZXR1cm4ga2Yuc2V0KGUsbiksbn0saXNFbmQoZSx0LG4pe3ZhciByPUJmLmVuZChlLG4pO3JldHVybiBWZi5lcXVhbHModCxyKX0saXNFZGdlOihlLHQsbik9PkJmLmlzU3RhcnQoZSx0LG4pfHxCZi5pc0VuZChlLHQsbiksaXNFbXB0eShlLHQpe3ZhcntjaGlsZHJlbjpufT10LFtyXT1uO3JldHVybiAwPT09bi5sZW5ndGh8fDE9PT1uLmxlbmd0aCYmZWQuaXNUZXh0KHIpJiZcIlwiPT09ci50ZXh0JiYhZS5pc1ZvaWQodCl9LGlzSW5saW5lOihlLHQpPT5TZi5pc0VsZW1lbnQodCkmJmUuaXNJbmxpbmUodCksaXNOb3JtYWxpemluZyhlKXt2YXIgdD1NYy5nZXQoZSk7cmV0dXJuIHZvaWQgMD09PXR8fHR9LGlzU3RhcnQoZSx0LG4pe2lmKDAhPT10Lm9mZnNldClyZXR1cm4hMTt2YXIgcj1CZi5zdGFydChlLG4pO3JldHVybiBWZi5lcXVhbHModCxyKX0saXNWb2lkOihlLHQpPT5TZi5pc0VsZW1lbnQodCkmJmUuaXNWb2lkKHQpLGxhc3QoZSx0KXt2YXIgbj1CZi5wYXRoKGUsdCx7ZWRnZTpcImVuZFwifSk7cmV0dXJuIEJmLm5vZGUoZSxuKX0sbGVhZihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSxyPUJmLnBhdGgoZSx0LG4pO3JldHVybltOZi5sZWFmKGUscikscl19LCpsZXZlbHMoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHthdDpuPWUuc2VsZWN0aW9uLHJldmVyc2U6cj0hMSx2b2lkczpvPSExfT10LHttYXRjaDppfT10O2lmKG51bGw9PWkmJihpPSgpPT4hMCksbil7dmFyIGE9W10sdT1CZi5wYXRoKGUsbik7Zm9yKHZhcltzLGxdb2YgTmYubGV2ZWxzKGUsdSkpaWYoaShzLGwpJiYoYS5wdXNoKFtzLGxdKSwhbyYmQmYuaXNWb2lkKGUscykpKWJyZWFrO3ImJmEucmV2ZXJzZSgpLHlpZWxkKmF9fSxtYXJrcyhlKXt2YXJ7bWFya3M6dCxzZWxlY3Rpb246bn09ZTtpZighbilyZXR1cm4gbnVsbDtpZih0KXJldHVybiB0O2lmKHFmLmlzRXhwYW5kZWQobikpe3ZhcltyXT1CZi5ub2RlcyhlLHttYXRjaDplZC5pc1RleHR9KTtpZihyKXt2YXJbb109cjtyZXR1cm4gcWMobyx4Zil9cmV0dXJue319dmFye2FuY2hvcjppfT1uLHtwYXRoOmF9PWksW3VdPUJmLmxlYWYoZSxhKTtpZigwPT09aS5vZmZzZXQpe3ZhciBzPUJmLnByZXZpb3VzKGUse2F0OmEsbWF0Y2g6ZWQuaXNUZXh0fSksbD1CZi5hYm92ZShlLHttYXRjaDp0PT5CZi5pc0Jsb2NrKGUsdCl9KTtpZihzJiZsKXt2YXJbYyxmXT1zLFssZF09bDtNZi5pc0FuY2VzdG9yKGQsZikmJih1PWMpfX1yZXR1cm4gcWModSxDZil9LG5leHQoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHttb2RlOm49XCJsb3dlc3RcIix2b2lkczpyPSExfT10LHttYXRjaDpvLGF0Omk9ZS5zZWxlY3Rpb259PXQ7aWYoaSl7dmFyIGE9QmYuYWZ0ZXIoZSxpLHt2b2lkczpyfSk7aWYoYSl7dmFyWyx1XT1CZi5sYXN0KGUsW10pLHM9W2EucGF0aCx1XTtpZihNZi5pc1BhdGgoaSkmJjA9PT1pLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHRoZSBuZXh0IG5vZGUgZnJvbSB0aGUgcm9vdCBub2RlIVwiKTtpZihudWxsPT1vKWlmKE1mLmlzUGF0aChpKSl7dmFyW2xdPUJmLnBhcmVudChlLGkpO289ZT0+bC5jaGlsZHJlbi5pbmNsdWRlcyhlKX1lbHNlIG89KCk9PiEwO3ZhcltjXT1CZi5ub2RlcyhlLHthdDpzLG1hdGNoOm8sbW9kZTpuLHZvaWRzOnJ9KTtyZXR1cm4gY319fSxub2RlKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LHI9QmYucGF0aChlLHQsbik7cmV0dXJuW05mLmdldChlLHIpLHJdfSwqbm9kZXMoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHthdDpuPWUuc2VsZWN0aW9uLG1vZGU6cj1cImFsbFwiLHVuaXZlcnNhbDpvPSExLHJldmVyc2U6aT0hMSx2b2lkczphPSExfT10LHttYXRjaDp1fT10O2lmKHV8fCh1PSgpPT4hMCksbil7dmFyIHMsbDtpZihUZi5pc1NwYW4obikpcz1uWzBdLGw9blsxXTtlbHNle3ZhciBjPUJmLnBhdGgoZSxuLHtlZGdlOlwic3RhcnRcIn0pLGY9QmYucGF0aChlLG4se2VkZ2U6XCJlbmRcIn0pO3M9aT9mOmMsbD1pP2M6Zn12YXIgZCxwPU5mLm5vZGVzKGUse3JldmVyc2U6aSxmcm9tOnMsdG86bCxwYXNzOnQ9Pnt2YXJbbl09dDtyZXR1cm4hYSYmQmYuaXNWb2lkKGUsbil9fSksaD1bXTtmb3IodmFyW2csdl1vZiBwKXt2YXIgeT1kJiYwPT09TWYuY29tcGFyZSh2LGRbMV0pO2lmKFwiaGlnaGVzdFwiIT09cnx8IXkpaWYodShnLHYpKWlmKFwibG93ZXN0XCI9PT1yJiZ5KWQ9W2csdl07ZWxzZXt2YXIgbT1cImxvd2VzdFwiPT09cj9kOltnLHZdO20mJihvP2gucHVzaChtKTp5aWVsZCBtKSxkPVtnLHZdfWVsc2UgaWYobyYmIXkmJmVkLmlzVGV4dChnKSlyZXR1cm59XCJsb3dlc3RcIj09PXImJmQmJihvP2gucHVzaChkKTp5aWVsZCBkKSxvJiYoeWllbGQqaCl9fSxub3JtYWxpemUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHtmb3JjZTpuPSExfT10LHI9ZT0+TGMuZ2V0KGUpfHxbXTtpZihCZi5pc05vcm1hbGl6aW5nKGUpKXtpZihuKXt2YXIgbz1BcnJheS5mcm9tKE5mLm5vZGVzKGUpLChlPT57dmFyWyx0XT1lO3JldHVybiB0fSkpO0xjLnNldChlLG8pfTAhPT1yKGUpLmxlbmd0aCYmQmYud2l0aG91dE5vcm1hbGl6aW5nKGUsKCgpPT57Zm9yKHZhciB0IG9mIHIoZSkpaWYoTmYuaGFzKGUsdCkpe3ZhciBuPUJmLm5vZGUoZSx0KSxbbyxpXT1uO1NmLmlzRWxlbWVudChvKSYmMD09PW8uY2hpbGRyZW4ubGVuZ3RoJiZlLm5vcm1hbGl6ZU5vZGUobil9Zm9yKHZhciBhPTQyKnIoZSkubGVuZ3RoLHU9MDswIT09cihlKS5sZW5ndGg7KXtpZih1PmEpdGhyb3cgbmV3IEVycm9yKFwiXFxuICAgICAgICAgICAgQ291bGQgbm90IGNvbXBsZXRlbHkgbm9ybWFsaXplIHRoZSBlZGl0b3IgYWZ0ZXIgXCIuY29uY2F0KGEsXCIgaXRlcmF0aW9ucyEgVGhpcyBpcyB1c3VhbGx5IGR1ZSB0byBpbmNvcnJlY3Qgbm9ybWFsaXphdGlvbiBsb2dpYyB0aGF0IGxlYXZlcyBhIG5vZGUgaW4gYW4gaW52YWxpZCBzdGF0ZS5cXG4gICAgICAgICAgXCIpKTt2YXIgcz1yKGUpLnBvcCgpO2lmKE5mLmhhcyhlLHMpKXt2YXIgbD1CZi5ub2RlKGUscyk7ZS5ub3JtYWxpemVOb2RlKGwpfXUrK319KSl9fSxwYXJlbnQoZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30scj1CZi5wYXRoKGUsdCxuKSxvPU1mLnBhcmVudChyKTtyZXR1cm4gQmYubm9kZShlLG8pfSxwYXRoKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LHtkZXB0aDpyLGVkZ2U6b309bjtpZihNZi5pc1BhdGgodCkpaWYoXCJzdGFydFwiPT09byl7dmFyWyxpXT1OZi5maXJzdChlLHQpO3Q9aX1lbHNlIGlmKFwiZW5kXCI9PT1vKXt2YXJbLGFdPU5mLmxhc3QoZSx0KTt0PWF9cmV0dXJuIHFmLmlzUmFuZ2UodCkmJih0PVwic3RhcnRcIj09PW8/cWYuc3RhcnQodCk6XCJlbmRcIj09PW8/cWYuZW5kKHQpOk1mLmNvbW1vbih0LmFuY2hvci5wYXRoLHQuZm9jdXMucGF0aCkpLFZmLmlzUG9pbnQodCkmJih0PXQucGF0aCksbnVsbCE9ciYmKHQ9dC5zbGljZSgwLHIpKSx0fSxoYXNQYXRoOihlLHQpPT5OZi5oYXMoZSx0KSxwYXRoUmVmKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LHthZmZpbml0eTpyPVwiZm9yd2FyZFwifT1uLG89e2N1cnJlbnQ6dCxhZmZpbml0eTpyLHVucmVmKCl7dmFye2N1cnJlbnQ6dH09bztyZXR1cm4gQmYucGF0aFJlZnMoZSkuZGVsZXRlKG8pLG8uY3VycmVudD1udWxsLHR9fTtyZXR1cm4gQmYucGF0aFJlZnMoZSkuYWRkKG8pLG99LHBhdGhSZWZzKGUpe3ZhciB0PXpjLmdldChlKTtyZXR1cm4gdHx8KHQ9bmV3IFNldCx6Yy5zZXQoZSx0KSksdH0scG9pbnQoZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30se2VkZ2U6cj1cInN0YXJ0XCJ9PW47aWYoTWYuaXNQYXRoKHQpKXt2YXIgbztpZihcImVuZFwiPT09cil7dmFyWyxpXT1OZi5sYXN0KGUsdCk7bz1pfWVsc2V7dmFyWyxhXT1OZi5maXJzdChlLHQpO289YX12YXIgdT1OZi5nZXQoZSxvKTtpZighZWQuaXNUZXh0KHUpKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgdGhlIFwiLmNvbmNhdChyLFwiIHBvaW50IGluIHRoZSBub2RlIGF0IHBhdGggW1wiKS5jb25jYXQodCxcIl0gYmVjYXVzZSBpdCBoYXMgbm8gXCIpLmNvbmNhdChyLFwiIHRleHQgbm9kZS5cIikpO3JldHVybntwYXRoOm8sb2Zmc2V0OlwiZW5kXCI9PT1yP3UudGV4dC5sZW5ndGg6MH19aWYocWYuaXNSYW5nZSh0KSl7dmFyW3MsbF09cWYuZWRnZXModCk7cmV0dXJuXCJzdGFydFwiPT09cj9zOmx9cmV0dXJuIHR9LHBvaW50UmVmKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LHthZmZpbml0eTpyPVwiZm9yd2FyZFwifT1uLG89e2N1cnJlbnQ6dCxhZmZpbml0eTpyLHVucmVmKCl7dmFye2N1cnJlbnQ6dH09bztyZXR1cm4gQmYucG9pbnRSZWZzKGUpLmRlbGV0ZShvKSxvLmN1cnJlbnQ9bnVsbCx0fX07cmV0dXJuIEJmLnBvaW50UmVmcyhlKS5hZGQobyksb30scG9pbnRSZWZzKGUpe3ZhciB0PSRjLmdldChlKTtyZXR1cm4gdHx8KHQ9bmV3IFNldCwkYy5zZXQoZSx0KSksdH0sKnBvc2l0aW9ucyhlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30se2F0Om49ZS5zZWxlY3Rpb24sdW5pdDpyPVwib2Zmc2V0XCIscmV2ZXJzZTpvPSExLHZvaWRzOmk9ITF9PXQ7aWYobil7dmFyIGE9QmYucmFuZ2UoZSxuKSxbdSxzXT1xZi5lZGdlcyhhKSxsPW8/czp1LGM9ITEsZj1cIlwiLGQ9MCxwPTAsaD0wO2Zvcih2YXJbZyx2XW9mIEJmLm5vZGVzKGUse2F0Om4scmV2ZXJzZTpvLHZvaWRzOml9KSl7aWYoU2YuaXNFbGVtZW50KGcpKXtpZighaSYmZS5pc1ZvaWQoZykpe3lpZWxkIEJmLnN0YXJ0KGUsdik7Y29udGludWV9aWYoZS5pc0lubGluZShnKSljb250aW51ZTtpZihCZi5oYXNJbmxpbmVzKGUsZykpe3ZhciB5PU1mLmlzQW5jZXN0b3IodixzLnBhdGgpP3M6QmYuZW5kKGUsdiksbT1NZi5pc0FuY2VzdG9yKHYsdS5wYXRoKT91OkJmLnN0YXJ0KGUsdik7Zj1CZi5zdHJpbmcoZSx7YW5jaG9yOm0sZm9jdXM6eX0se3ZvaWRzOml9KSxjPSEwfX1pZihlZC5pc1RleHQoZykpe3ZhciBiPU1mLmVxdWFscyh2LGwucGF0aCk7Zm9yKGI/KHA9bz9sLm9mZnNldDpnLnRleHQubGVuZ3RoLWwub2Zmc2V0LGg9bC5vZmZzZXQpOihwPWcudGV4dC5sZW5ndGgsaD1vP3A6MCksKGJ8fGN8fFwib2Zmc2V0XCI9PT1yKSYmKHlpZWxke3BhdGg6dixvZmZzZXQ6aH0sYz0hMSk7Oyl7aWYoMD09PWQpe2lmKFwiXCI9PT1mKWJyZWFrO2Q9dyhmLHIsbyksZj1RYyhmLGQsbylbMV19aWYoaD1vP2gtZDpoK2QsKHAtPWQpPDApe2Q9LXA7YnJlYWt9ZD0wLHlpZWxke3BhdGg6dixvZmZzZXQ6aH19fX19ZnVuY3Rpb24gdyhlLHQsbil7cmV0dXJuXCJjaGFyYWN0ZXJcIj09PXQ/WWMoZSxuKTpcIndvcmRcIj09PXQ/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sbj0wLHI9ITE7ZS5sZW5ndGg+MDspe3ZhciBvPVljKGUsdCksW2ksYV09UWMoZSxvLHQpO2lmKGVmKGksYSx0KSlyPSEwLG4rPW87ZWxzZXtpZihyKWJyZWFrO24rPW99ZT1hfXJldHVybiBufShlLG4pOlwibGluZVwiPT09dHx8XCJibG9ja1wiPT09dD9lLmxlbmd0aDoxfX0scHJldmlvdXMoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHttb2RlOm49XCJsb3dlc3RcIix2b2lkczpyPSExfT10LHttYXRjaDpvLGF0Omk9ZS5zZWxlY3Rpb259PXQ7aWYoaSl7dmFyIGE9QmYuYmVmb3JlKGUsaSx7dm9pZHM6cn0pO2lmKGEpe3ZhclssdV09QmYuZmlyc3QoZSxbXSkscz1bYS5wYXRoLHVdO2lmKE1mLmlzUGF0aChpKSYmMD09PWkubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgdGhlIHByZXZpb3VzIG5vZGUgZnJvbSB0aGUgcm9vdCBub2RlIVwiKTtpZihudWxsPT1vKWlmKE1mLmlzUGF0aChpKSl7dmFyW2xdPUJmLnBhcmVudChlLGkpO289ZT0+bC5jaGlsZHJlbi5pbmNsdWRlcyhlKX1lbHNlIG89KCk9PiEwO3ZhcltjXT1CZi5ub2RlcyhlLHtyZXZlcnNlOiEwLGF0OnMsbWF0Y2g6byxtb2RlOm4sdm9pZHM6cn0pO3JldHVybiBjfX19LHJhbmdlOihlLHQsbik9PnFmLmlzUmFuZ2UodCkmJiFuP3Q6e2FuY2hvcjpCZi5zdGFydChlLHQpLGZvY3VzOkJmLmVuZChlLG58fHQpfSxyYW5nZVJlZihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSx7YWZmaW5pdHk6cj1cImZvcndhcmRcIn09bixvPXtjdXJyZW50OnQsYWZmaW5pdHk6cix1bnJlZigpe3ZhcntjdXJyZW50OnR9PW87cmV0dXJuIEJmLnJhbmdlUmVmcyhlKS5kZWxldGUobyksby5jdXJyZW50PW51bGwsdH19O3JldHVybiBCZi5yYW5nZVJlZnMoZSkuYWRkKG8pLG99LHJhbmdlUmVmcyhlKXt2YXIgdD1IYy5nZXQoZSk7cmV0dXJuIHR8fCh0PW5ldyBTZXQsSGMuc2V0KGUsdCkpLHR9LHJlbW92ZU1hcmsoZSx0KXtlLnJlbW92ZU1hcmsodCl9LHNldE5vcm1hbGl6aW5nKGUsdCl7TWMuc2V0KGUsdCl9LHN0YXJ0OihlLHQpPT5CZi5wb2ludChlLHQse2VkZ2U6XCJzdGFydFwifSksc3RyaW5nKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LHt2b2lkczpyPSExfT1uLG89QmYucmFuZ2UoZSx0KSxbaSxhXT1xZi5lZGdlcyhvKSx1PVwiXCI7Zm9yKHZhcltzLGxdb2YgQmYubm9kZXMoZSx7YXQ6byxtYXRjaDplZC5pc1RleHQsdm9pZHM6cn0pKXt2YXIgYz1zLnRleHQ7TWYuZXF1YWxzKGwsYS5wYXRoKSYmKGM9Yy5zbGljZSgwLGEub2Zmc2V0KSksTWYuZXF1YWxzKGwsaS5wYXRoKSYmKGM9Yy5zbGljZShpLm9mZnNldCkpLHUrPWN9cmV0dXJuIHV9LHVuaGFuZ1JhbmdlKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LHt2b2lkczpyPSExfT1uLFtvLGldPXFmLmVkZ2VzKHQpO2lmKDAhPT1vLm9mZnNldHx8MCE9PWkub2Zmc2V0fHxxZi5pc0NvbGxhcHNlZCh0KSlyZXR1cm4gdDt2YXIgYT1CZi5hYm92ZShlLHthdDppLG1hdGNoOnQ9PkJmLmlzQmxvY2soZSx0KX0pLHU9YT9hWzFdOltdLHM9e2FuY2hvcjpCZi5zdGFydChlLFtdKSxmb2N1czppfSxsPSEwO2Zvcih2YXJbYyxmXW9mIEJmLm5vZGVzKGUse2F0OnMsbWF0Y2g6ZWQuaXNUZXh0LHJldmVyc2U6ITAsdm9pZHM6cn0pKWlmKGwpbD0hMTtlbHNlIGlmKFwiXCIhPT1jLnRleHR8fE1mLmlzQmVmb3JlKGYsdSkpe2k9e3BhdGg6ZixvZmZzZXQ6Yy50ZXh0Lmxlbmd0aH07YnJlYWt9cmV0dXJue2FuY2hvcjpvLGZvY3VzOml9fSx2b2lkKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtyZXR1cm4gQmYuYWJvdmUoZSxPZihPZih7fSx0KSx7fSx7bWF0Y2g6dD0+QmYuaXNWb2lkKGUsdCl9KSl9LHdpdGhvdXROb3JtYWxpemluZyhlLHQpe3ZhciBuPUJmLmlzTm9ybWFsaXppbmcoZSk7QmYuc2V0Tm9ybWFsaXppbmcoZSwhMSk7dHJ5e3QoKX1maW5hbGx5e0JmLnNldE5vcm1hbGl6aW5nKGUsbil9QmYubm9ybWFsaXplKGUpfX0sRmY9e2lzTG9jYXRpb246ZT0+TWYuaXNQYXRoKGUpfHxWZi5pc1BvaW50KGUpfHxxZi5pc1JhbmdlKGUpfSxUZj17aXNTcGFuOmU9PkFycmF5LmlzQXJyYXkoZSkmJjI9PT1lLmxlbmd0aCYmZS5ldmVyeShNZi5pc1BhdGgpfSxfZj1bXCJjaGlsZHJlblwiXSxQZj1bXCJ0ZXh0XCJdLGpmPW5ldyBXZWFrTWFwLE5mPXthbmNlc3RvcihlLHQpe3ZhciBuPU5mLmdldChlLHQpO2lmKGVkLmlzVGV4dChuKSl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHRoZSBhbmNlc3RvciBub2RlIGF0IHBhdGggW1wiLmNvbmNhdCh0LFwiXSBiZWNhdXNlIGl0IHJlZmVycyB0byBhIHRleHQgbm9kZSBpbnN0ZWFkOiBcIikuY29uY2F0KG4pKTtyZXR1cm4gbn0sKmFuY2VzdG9ycyhlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtmb3IodmFyIHIgb2YgTWYuYW5jZXN0b3JzKHQsbikpe3ZhciBvPVtOZi5hbmNlc3RvcihlLHIpLHJdO3lpZWxkIG99fSxjaGlsZChlLHQpe2lmKGVkLmlzVGV4dChlKSl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHRoZSBjaGlsZCBvZiBhIHRleHQgbm9kZTogXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGUpKSk7dmFyIG49ZS5jaGlsZHJlblt0XTtpZihudWxsPT1uKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgY2hpbGQgYXQgaW5kZXggYFwiLmNvbmNhdCh0LFwiYCBpbiBub2RlOiBcIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KGUpKSk7cmV0dXJuIG59LCpjaGlsZHJlbihlLHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30se3JldmVyc2U6cj0hMX09bixvPU5mLmFuY2VzdG9yKGUsdCkse2NoaWxkcmVuOml9PW8sYT1yP2kubGVuZ3RoLTE6MDtyP2E+PTA6YTxpLmxlbmd0aDspe3ZhciB1PU5mLmNoaWxkKG8sYSkscz10LmNvbmNhdChhKTt5aWVsZFt1LHNdLGE9cj9hLTE6YSsxfX0sY29tbW9uKGUsdCxuKXt2YXIgcj1NZi5jb21tb24odCxuKTtyZXR1cm5bTmYuZ2V0KGUscikscl19LGRlc2NlbmRhbnQoZSx0KXt2YXIgbj1OZi5nZXQoZSx0KTtpZihCZi5pc0VkaXRvcihuKSl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHRoZSBkZXNjZW5kYW50IG5vZGUgYXQgcGF0aCBbXCIuY29uY2F0KHQsXCJdIGJlY2F1c2UgaXQgcmVmZXJzIHRvIHRoZSByb290IGVkaXRvciBub2RlIGluc3RlYWQ6IFwiKS5jb25jYXQobikpO3JldHVybiBufSwqZGVzY2VuZGFudHMoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2Zvcih2YXJbbixyXW9mIE5mLm5vZGVzKGUsdCkpMCE9PXIubGVuZ3RoJiYoeWllbGRbbixyXSl9LCplbGVtZW50cyhlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Zm9yKHZhcltuLHJdb2YgTmYubm9kZXMoZSx0KSlTZi5pc0VsZW1lbnQobikmJih5aWVsZFtuLHJdKX0sZXh0cmFjdFByb3BzOmU9PlNmLmlzQW5jZXN0b3IoZSk/cWMoZSxfZik6cWMoZSxQZiksZmlyc3QoZSx0KXtmb3IodmFyIG49dC5zbGljZSgpLHI9TmYuZ2V0KGUsbik7ciYmIWVkLmlzVGV4dChyKSYmMCE9PXIuY2hpbGRyZW4ubGVuZ3RoOylyPXIuY2hpbGRyZW5bMF0sbi5wdXNoKDApO3JldHVybltyLG5dfSxmcmFnbWVudChlLHQpe2lmKGVkLmlzVGV4dChlKSl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IGEgZnJhZ21lbnQgc3RhcnRpbmcgZnJvbSBhIHJvb3QgdGV4dCBub2RlOiBcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoZSkpKTt2YXIgbj1QYyh7Y2hpbGRyZW46ZS5jaGlsZHJlbn0sKGU9Pnt2YXJbbixyXT1xZi5lZGdlcyh0KSxvPU5mLm5vZGVzKGUse3JldmVyc2U6ITAscGFzczplPT57dmFyWyxuXT1lO3JldHVybiFxZi5pbmNsdWRlcyh0LG4pfX0pO2Zvcih2YXJbLGldb2Ygbyl7aWYoIXFmLmluY2x1ZGVzKHQsaSkpe3ZhciBhPU5mLnBhcmVudChlLGkpLHU9aVtpLmxlbmd0aC0xXTthLmNoaWxkcmVuLnNwbGljZSh1LDEpfWlmKE1mLmVxdWFscyhpLHIucGF0aCkpe3ZhciBzPU5mLmxlYWYoZSxpKTtzLnRleHQ9cy50ZXh0LnNsaWNlKDAsci5vZmZzZXQpfWlmKE1mLmVxdWFscyhpLG4ucGF0aCkpe3ZhciBsPU5mLmxlYWYoZSxpKTtsLnRleHQ9bC50ZXh0LnNsaWNlKG4ub2Zmc2V0KX19QmYuaXNFZGl0b3IoZSkmJihlLnNlbGVjdGlvbj1udWxsKX0pKTtyZXR1cm4gbi5jaGlsZHJlbn0sZ2V0KGUsdCl7Zm9yKHZhciBuPWUscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdO2lmKGVkLmlzVGV4dChuKXx8IW4uY2hpbGRyZW5bb10pdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgYSBkZXNjZW5kYW50IGF0IHBhdGggW1wiLmNvbmNhdCh0LFwiXSBpbiBub2RlOiBcIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KGUpKSk7bj1uLmNoaWxkcmVuW29dfXJldHVybiBufSxoYXMoZSx0KXtmb3IodmFyIG49ZSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl07aWYoZWQuaXNUZXh0KG4pfHwhbi5jaGlsZHJlbltvXSlyZXR1cm4hMTtuPW4uY2hpbGRyZW5bb119cmV0dXJuITB9LGlzTm9kZTplPT5lZC5pc1RleHQoZSl8fFNmLmlzRWxlbWVudChlKXx8QmYuaXNFZGl0b3IoZSksaXNOb2RlTGlzdChlKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMTt2YXIgdD1qZi5nZXQoZSk7aWYodm9pZCAwIT09dClyZXR1cm4gdDt2YXIgbj1lLmV2ZXJ5KChlPT5OZi5pc05vZGUoZSkpKTtyZXR1cm4gamYuc2V0KGUsbiksbn0sbGFzdChlLHQpe2Zvcih2YXIgbj10LnNsaWNlKCkscj1OZi5nZXQoZSxuKTtyJiYhZWQuaXNUZXh0KHIpJiYwIT09ci5jaGlsZHJlbi5sZW5ndGg7KXt2YXIgbz1yLmNoaWxkcmVuLmxlbmd0aC0xO3I9ci5jaGlsZHJlbltvXSxuLnB1c2gobyl9cmV0dXJuW3Isbl19LGxlYWYoZSx0KXt2YXIgbj1OZi5nZXQoZSx0KTtpZighZWQuaXNUZXh0KG4pKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgdGhlIGxlYWYgbm9kZSBhdCBwYXRoIFtcIi5jb25jYXQodCxcIl0gYmVjYXVzZSBpdCByZWZlcnMgdG8gYSBub24tbGVhZiBub2RlOiBcIikuY29uY2F0KG4pKTtyZXR1cm4gbn0sKmxldmVscyhlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtmb3IodmFyIHIgb2YgTWYubGV2ZWxzKHQsbikpe3ZhciBvPU5mLmdldChlLHIpO3lpZWxkW28scl19fSxtYXRjaGVzOihlLHQpPT5TZi5pc0VsZW1lbnQoZSkmJlNmLmlzRWxlbWVudFByb3BzKHQpJiZTZi5tYXRjaGVzKGUsdCl8fGVkLmlzVGV4dChlKSYmZWQuaXNUZXh0UHJvcHModCkmJmVkLm1hdGNoZXMoZSx0KSwqbm9kZXMoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSx7cGFzczpuLHJldmVyc2U6cj0hMX09dCx7ZnJvbTpvPVtdLHRvOml9PXQsYT1uZXcgU2V0LHU9W10scz1lOyFpfHwhKHI/TWYuaXNCZWZvcmUodSxpKTpNZi5pc0FmdGVyKHUsaSkpOylpZihhLmhhcyhzKXx8KHlpZWxkW3MsdV0pLGEuaGFzKHMpfHxlZC5pc1RleHQocyl8fDA9PT1zLmNoaWxkcmVuLmxlbmd0aHx8bnVsbCE9biYmITEhPT1uKFtzLHVdKSl7aWYoMD09PXUubGVuZ3RoKWJyZWFrO2lmKCFyKXt2YXIgbD1NZi5uZXh0KHUpO2lmKE5mLmhhcyhlLGwpKXt1PWwscz1OZi5nZXQoZSx1KTtjb250aW51ZX19aWYociYmMCE9PXVbdS5sZW5ndGgtMV0pdT1NZi5wcmV2aW91cyh1KSxzPU5mLmdldChlLHUpO2Vsc2UgdT1NZi5wYXJlbnQodSkscz1OZi5nZXQoZSx1KSxhLmFkZChzKX1lbHNle2EuYWRkKHMpO3ZhciBjPXI/cy5jaGlsZHJlbi5sZW5ndGgtMTowO01mLmlzQW5jZXN0b3IodSxvKSYmKGM9b1t1Lmxlbmd0aF0pLHU9dS5jb25jYXQoYykscz1OZi5nZXQoZSx1KX19LHBhcmVudChlLHQpe3ZhciBuPU1mLnBhcmVudCh0KSxyPU5mLmdldChlLG4pO2lmKGVkLmlzVGV4dChyKSl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHRoZSBwYXJlbnQgb2YgcGF0aCBbXCIuY29uY2F0KHQsXCJdIGJlY2F1c2UgaXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHJvb3QuXCIpKTtyZXR1cm4gcn0sc3RyaW5nOmU9PmVkLmlzVGV4dChlKT9lLnRleHQ6ZS5jaGlsZHJlbi5tYXAoTmYuc3RyaW5nKS5qb2luKFwiXCIpLCp0ZXh0cyhlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Zm9yKHZhcltuLHJdb2YgTmYubm9kZXMoZSx0KSllZC5pc1RleHQobikmJih5aWVsZFtuLHJdKX19O2Z1bmN0aW9uIElmKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBMZihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9JZihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0ljKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpJZihPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX12YXIgUmY9e2lzTm9kZU9wZXJhdGlvbjplPT5SZi5pc09wZXJhdGlvbihlKSYmZS50eXBlLmVuZHNXaXRoKFwiX25vZGVcIiksaXNPcGVyYXRpb24oZSl7aWYoIUxsKGUpKXJldHVybiExO3N3aXRjaChlLnR5cGUpe2Nhc2VcImluc2VydF9ub2RlXCI6Y2FzZVwicmVtb3ZlX25vZGVcIjpyZXR1cm4gTWYuaXNQYXRoKGUucGF0aCkmJk5mLmlzTm9kZShlLm5vZGUpO2Nhc2VcImluc2VydF90ZXh0XCI6Y2FzZVwicmVtb3ZlX3RleHRcIjpyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZS5vZmZzZXQmJlwic3RyaW5nXCI9PXR5cGVvZiBlLnRleHQmJk1mLmlzUGF0aChlLnBhdGgpO2Nhc2VcIm1lcmdlX25vZGVcIjpyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZS5wb3NpdGlvbiYmTWYuaXNQYXRoKGUucGF0aCkmJkxsKGUucHJvcGVydGllcyk7Y2FzZVwibW92ZV9ub2RlXCI6cmV0dXJuIE1mLmlzUGF0aChlLnBhdGgpJiZNZi5pc1BhdGgoZS5uZXdQYXRoKTtjYXNlXCJzZXRfbm9kZVwiOnJldHVybiBNZi5pc1BhdGgoZS5wYXRoKSYmTGwoZS5wcm9wZXJ0aWVzKSYmTGwoZS5uZXdQcm9wZXJ0aWVzKTtjYXNlXCJzZXRfc2VsZWN0aW9uXCI6cmV0dXJuIG51bGw9PT1lLnByb3BlcnRpZXMmJnFmLmlzUmFuZ2UoZS5uZXdQcm9wZXJ0aWVzKXx8bnVsbD09PWUubmV3UHJvcGVydGllcyYmcWYuaXNSYW5nZShlLnByb3BlcnRpZXMpfHxMbChlLnByb3BlcnRpZXMpJiZMbChlLm5ld1Byb3BlcnRpZXMpO2Nhc2VcInNwbGl0X25vZGVcIjpyZXR1cm4gTWYuaXNQYXRoKGUucGF0aCkmJlwibnVtYmVyXCI9PXR5cGVvZiBlLnBvc2l0aW9uJiZMbChlLnByb3BlcnRpZXMpO2RlZmF1bHQ6cmV0dXJuITF9fSxpc09wZXJhdGlvbkxpc3Q6ZT0+QXJyYXkuaXNBcnJheShlKSYmZS5ldmVyeSgoZT0+UmYuaXNPcGVyYXRpb24oZSkpKSxpc1NlbGVjdGlvbk9wZXJhdGlvbjplPT5SZi5pc09wZXJhdGlvbihlKSYmZS50eXBlLmVuZHNXaXRoKFwiX3NlbGVjdGlvblwiKSxpc1RleHRPcGVyYXRpb246ZT0+UmYuaXNPcGVyYXRpb24oZSkmJmUudHlwZS5lbmRzV2l0aChcIl90ZXh0XCIpLGludmVyc2UoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZVwiaW5zZXJ0X25vZGVcIjpyZXR1cm4gTGYoTGYoe30sZSkse30se3R5cGU6XCJyZW1vdmVfbm9kZVwifSk7Y2FzZVwiaW5zZXJ0X3RleHRcIjpyZXR1cm4gTGYoTGYoe30sZSkse30se3R5cGU6XCJyZW1vdmVfdGV4dFwifSk7Y2FzZVwibWVyZ2Vfbm9kZVwiOnJldHVybiBMZihMZih7fSxlKSx7fSx7dHlwZTpcInNwbGl0X25vZGVcIixwYXRoOk1mLnByZXZpb3VzKGUucGF0aCl9KTtjYXNlXCJtb3ZlX25vZGVcIjp2YXJ7bmV3UGF0aDp0LHBhdGg6bn09ZTtpZihNZi5lcXVhbHModCxuKSlyZXR1cm4gZTtpZihNZi5pc1NpYmxpbmcobix0KSlyZXR1cm4gTGYoTGYoe30sZSkse30se3BhdGg6dCxuZXdQYXRoOm59KTt2YXIgcj1NZi50cmFuc2Zvcm0obixlKSxvPU1mLnRyYW5zZm9ybShNZi5uZXh0KG4pLGUpO3JldHVybiBMZihMZih7fSxlKSx7fSx7cGF0aDpyLG5ld1BhdGg6b30pO2Nhc2VcInJlbW92ZV9ub2RlXCI6cmV0dXJuIExmKExmKHt9LGUpLHt9LHt0eXBlOlwiaW5zZXJ0X25vZGVcIn0pO2Nhc2VcInJlbW92ZV90ZXh0XCI6cmV0dXJuIExmKExmKHt9LGUpLHt9LHt0eXBlOlwiaW5zZXJ0X3RleHRcIn0pO2Nhc2VcInNldF9ub2RlXCI6dmFye3Byb3BlcnRpZXM6aSxuZXdQcm9wZXJ0aWVzOmF9PWU7cmV0dXJuIExmKExmKHt9LGUpLHt9LHtwcm9wZXJ0aWVzOmEsbmV3UHJvcGVydGllczppfSk7Y2FzZVwic2V0X3NlbGVjdGlvblwiOnZhcntwcm9wZXJ0aWVzOnUsbmV3UHJvcGVydGllczpzfT1lO3JldHVybiBMZihMZih7fSxlKSx7fSxudWxsPT11P3twcm9wZXJ0aWVzOnMsbmV3UHJvcGVydGllczpudWxsfTpudWxsPT1zP3twcm9wZXJ0aWVzOm51bGwsbmV3UHJvcGVydGllczp1fTp7cHJvcGVydGllczpzLG5ld1Byb3BlcnRpZXM6dX0pO2Nhc2VcInNwbGl0X25vZGVcIjpyZXR1cm4gTGYoTGYoe30sZSkse30se3R5cGU6XCJtZXJnZV9ub2RlXCIscGF0aDpNZi5uZXh0KGUucGF0aCl9KX19fSxNZj17YW5jZXN0b3JzKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSx7cmV2ZXJzZTpuPSExfT10LHI9TWYubGV2ZWxzKGUsdCk7cmV0dXJuIHI9bj9yLnNsaWNlKDEpOnIuc2xpY2UoMCwtMSl9LGNvbW1vbihlLHQpe2Zvcih2YXIgbj1bXSxyPTA7cjxlLmxlbmd0aCYmcjx0Lmxlbmd0aDtyKyspe3ZhciBvPWVbcl07aWYobyE9PXRbcl0pYnJlYWs7bi5wdXNoKG8pfXJldHVybiBufSxjb21wYXJlKGUsdCl7Zm9yKHZhciBuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKSxyPTA7cjxuO3IrKyl7aWYoZVtyXTx0W3JdKXJldHVybi0xO2lmKGVbcl0+dFtyXSlyZXR1cm4gMX1yZXR1cm4gMH0sZW5kc0FmdGVyKGUsdCl7dmFyIG49ZS5sZW5ndGgtMSxyPWUuc2xpY2UoMCxuKSxvPXQuc2xpY2UoMCxuKSxpPWVbbl0sYT10W25dO3JldHVybiBNZi5lcXVhbHMocixvKSYmaT5hfSxlbmRzQXQoZSx0KXt2YXIgbj1lLmxlbmd0aCxyPWUuc2xpY2UoMCxuKSxvPXQuc2xpY2UoMCxuKTtyZXR1cm4gTWYuZXF1YWxzKHIsbyl9LGVuZHNCZWZvcmUoZSx0KXt2YXIgbj1lLmxlbmd0aC0xLHI9ZS5zbGljZSgwLG4pLG89dC5zbGljZSgwLG4pLGk9ZVtuXSxhPXRbbl07cmV0dXJuIE1mLmVxdWFscyhyLG8pJiZpPGF9LGVxdWFsczooZSx0KT0+ZS5sZW5ndGg9PT10Lmxlbmd0aCYmZS5ldmVyeSgoKGUsbik9PmU9PT10W25dKSksaGFzUHJldmlvdXM6ZT0+ZVtlLmxlbmd0aC0xXT4wLGlzQWZ0ZXI6KGUsdCk9PjE9PT1NZi5jb21wYXJlKGUsdCksaXNBbmNlc3RvcjooZSx0KT0+ZS5sZW5ndGg8dC5sZW5ndGgmJjA9PT1NZi5jb21wYXJlKGUsdCksaXNCZWZvcmU6KGUsdCk9Pi0xPT09TWYuY29tcGFyZShlLHQpLGlzQ2hpbGQ6KGUsdCk9PmUubGVuZ3RoPT09dC5sZW5ndGgrMSYmMD09PU1mLmNvbXBhcmUoZSx0KSxpc0NvbW1vbjooZSx0KT0+ZS5sZW5ndGg8PXQubGVuZ3RoJiYwPT09TWYuY29tcGFyZShlLHQpLGlzRGVzY2VuZGFudDooZSx0KT0+ZS5sZW5ndGg+dC5sZW5ndGgmJjA9PT1NZi5jb21wYXJlKGUsdCksaXNQYXJlbnQ6KGUsdCk9PmUubGVuZ3RoKzE9PT10Lmxlbmd0aCYmMD09PU1mLmNvbXBhcmUoZSx0KSxpc1BhdGg6ZT0+QXJyYXkuaXNBcnJheShlKSYmKDA9PT1lLmxlbmd0aHx8XCJudW1iZXJcIj09dHlwZW9mIGVbMF0pLGlzU2libGluZyhlLHQpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7dmFyIG49ZS5zbGljZSgwLC0xKSxyPXQuc2xpY2UoMCwtMSk7cmV0dXJuIGVbZS5sZW5ndGgtMV0hPT10W3QubGVuZ3RoLTFdJiZNZi5lcXVhbHMobixyKX0sbGV2ZWxzKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30se3JldmVyc2U6bj0hMX09dCxyPVtdLG89MDtvPD1lLmxlbmd0aDtvKyspci5wdXNoKGUuc2xpY2UoMCxvKSk7cmV0dXJuIG4mJnIucmV2ZXJzZSgpLHJ9LG5leHQoZSl7aWYoMD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgdGhlIG5leHQgcGF0aCBvZiBhIHJvb3QgcGF0aCBbXCIuY29uY2F0KGUsXCJdLCBiZWNhdXNlIGl0IGhhcyBubyBuZXh0IGluZGV4LlwiKSk7dmFyIHQ9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gZS5zbGljZSgwLC0xKS5jb25jYXQodCsxKX0scGFyZW50KGUpe2lmKDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHRoZSBwYXJlbnQgcGF0aCBvZiB0aGUgcm9vdCBwYXRoIFtcIi5jb25jYXQoZSxcIl0uXCIpKTtyZXR1cm4gZS5zbGljZSgwLC0xKX0scHJldmlvdXMoZSl7aWYoMD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgdGhlIHByZXZpb3VzIHBhdGggb2YgYSByb290IHBhdGggW1wiLmNvbmNhdChlLFwiXSwgYmVjYXVzZSBpdCBoYXMgbm8gcHJldmlvdXMgaW5kZXguXCIpKTt2YXIgdD1lW2UubGVuZ3RoLTFdO2lmKHQ8PTApdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGdldCB0aGUgcHJldmlvdXMgcGF0aCBvZiBhIGZpcnN0IGNoaWxkIHBhdGggW1wiLmNvbmNhdChlLFwiXSBiZWNhdXNlIGl0IHdvdWxkIHJlc3VsdCBpbiBhIG5lZ2F0aXZlIGluZGV4LlwiKSk7cmV0dXJuIGUuc2xpY2UoMCwtMSkuY29uY2F0KHQtMSl9LHJlbGF0aXZlKGUsdCl7aWYoIU1mLmlzQW5jZXN0b3IodCxlKSYmIU1mLmVxdWFscyhlLHQpKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgdGhlIHJlbGF0aXZlIHBhdGggb2YgW1wiLmNvbmNhdChlLFwiXSBpbnNpZGUgYW5jZXN0b3IgW1wiKS5jb25jYXQodCxcIl0sIGJlY2F1c2UgaXQgaXMgbm90IGFib3ZlIG9yIGVxdWFsIHRvIHRoZSBwYXRoLlwiKSk7cmV0dXJuIGUuc2xpY2UodC5sZW5ndGgpfSx0cmFuc2Zvcm0oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307cmV0dXJuIFBjKGUsKHI9Pnt2YXJ7YWZmaW5pdHk6bz1cImZvcndhcmRcIn09bjtpZihlJiYwIT09KG51bGw9PWU/dm9pZCAwOmUubGVuZ3RoKSl7aWYobnVsbD09PXIpcmV0dXJuIG51bGw7c3dpdGNoKHQudHlwZSl7Y2FzZVwiaW5zZXJ0X25vZGVcIjp2YXJ7cGF0aDppfT10OyhNZi5lcXVhbHMoaSxyKXx8TWYuZW5kc0JlZm9yZShpLHIpfHxNZi5pc0FuY2VzdG9yKGkscikpJiYocltpLmxlbmd0aC0xXSs9MSk7YnJlYWs7Y2FzZVwicmVtb3ZlX25vZGVcIjp2YXJ7cGF0aDphfT10O2lmKE1mLmVxdWFscyhhLHIpfHxNZi5pc0FuY2VzdG9yKGEscikpcmV0dXJuIG51bGw7TWYuZW5kc0JlZm9yZShhLHIpJiYoclthLmxlbmd0aC0xXS09MSk7YnJlYWs7Y2FzZVwibWVyZ2Vfbm9kZVwiOnZhcntwYXRoOnUscG9zaXRpb246c309dDtNZi5lcXVhbHModSxyKXx8TWYuZW5kc0JlZm9yZSh1LHIpP3JbdS5sZW5ndGgtMV0tPTE6TWYuaXNBbmNlc3Rvcih1LHIpJiYoclt1Lmxlbmd0aC0xXS09MSxyW3UubGVuZ3RoXSs9cyk7YnJlYWs7Y2FzZVwic3BsaXRfbm9kZVwiOnZhcntwYXRoOmwscG9zaXRpb246Y309dDtpZihNZi5lcXVhbHMobCxyKSl7aWYoXCJmb3J3YXJkXCI9PT1vKXJbci5sZW5ndGgtMV0rPTE7ZWxzZSBpZihcImJhY2t3YXJkXCIhPT1vKXJldHVybiBudWxsfWVsc2UgTWYuZW5kc0JlZm9yZShsLHIpP3JbbC5sZW5ndGgtMV0rPTE6TWYuaXNBbmNlc3RvcihsLHIpJiZlW2wubGVuZ3RoXT49YyYmKHJbbC5sZW5ndGgtMV0rPTEscltsLmxlbmd0aF0tPWMpO2JyZWFrO2Nhc2VcIm1vdmVfbm9kZVwiOnZhcntwYXRoOmYsbmV3UGF0aDpkfT10O2lmKE1mLmVxdWFscyhmLGQpKXJldHVybjtpZihNZi5pc0FuY2VzdG9yKGYscil8fE1mLmVxdWFscyhmLHIpKXt2YXIgcD1kLnNsaWNlKCk7cmV0dXJuIE1mLmVuZHNCZWZvcmUoZixkKSYmZi5sZW5ndGg8ZC5sZW5ndGgmJihwW2YubGVuZ3RoLTFdLT0xKSxwLmNvbmNhdChyLnNsaWNlKGYubGVuZ3RoKSl9TWYuaXNTaWJsaW5nKGYsZCkmJihNZi5pc0FuY2VzdG9yKGQscil8fE1mLmVxdWFscyhkLHIpKT9NZi5lbmRzQmVmb3JlKGYscik/cltmLmxlbmd0aC0xXS09MTpyW2YubGVuZ3RoLTFdKz0xOk1mLmVuZHNCZWZvcmUoZCxyKXx8TWYuZXF1YWxzKGQscil8fE1mLmlzQW5jZXN0b3IoZCxyKT8oTWYuZW5kc0JlZm9yZShmLHIpJiYocltmLmxlbmd0aC0xXS09MSkscltkLmxlbmd0aC0xXSs9MSk6TWYuZW5kc0JlZm9yZShmLHIpJiYoTWYuZXF1YWxzKGQscikmJihyW2QubGVuZ3RoLTFdKz0xKSxyW2YubGVuZ3RoLTFdLT0xKX19fSkpfX0semY9e3RyYW5zZm9ybShlLHQpe3ZhcntjdXJyZW50Om4sYWZmaW5pdHk6cn09ZTtpZihudWxsIT1uKXt2YXIgbz1NZi50cmFuc2Zvcm0obix0LHthZmZpbml0eTpyfSk7ZS5jdXJyZW50PW8sbnVsbD09byYmZS51bnJlZigpfX19O2Z1bmN0aW9uICRmKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBIZihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj8kZihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0ljKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTokZihPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX12YXIgVmY9e2NvbXBhcmUoZSx0KXt2YXIgbj1NZi5jb21wYXJlKGUucGF0aCx0LnBhdGgpO3JldHVybiAwPT09bj9lLm9mZnNldDx0Lm9mZnNldD8tMTplLm9mZnNldD50Lm9mZnNldD8xOjA6bn0saXNBZnRlcjooZSx0KT0+MT09PVZmLmNvbXBhcmUoZSx0KSxpc0JlZm9yZTooZSx0KT0+LTE9PT1WZi5jb21wYXJlKGUsdCksZXF1YWxzOihlLHQpPT5lLm9mZnNldD09PXQub2Zmc2V0JiZNZi5lcXVhbHMoZS5wYXRoLHQucGF0aCksaXNQb2ludDplPT5MbChlKSYmXCJudW1iZXJcIj09dHlwZW9mIGUub2Zmc2V0JiZNZi5pc1BhdGgoZS5wYXRoKSx0cmFuc2Zvcm0oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307cmV0dXJuIFBjKGUsKGU9PntpZihudWxsPT09ZSlyZXR1cm4gbnVsbDt2YXJ7YWZmaW5pdHk6cj1cImZvcndhcmRcIn09bix7cGF0aDpvLG9mZnNldDppfT1lO3N3aXRjaCh0LnR5cGUpe2Nhc2VcImluc2VydF9ub2RlXCI6Y2FzZVwibW92ZV9ub2RlXCI6ZS5wYXRoPU1mLnRyYW5zZm9ybShvLHQsbik7YnJlYWs7Y2FzZVwiaW5zZXJ0X3RleHRcIjpNZi5lcXVhbHModC5wYXRoLG8pJiZ0Lm9mZnNldDw9aSYmKGUub2Zmc2V0Kz10LnRleHQubGVuZ3RoKTticmVhaztjYXNlXCJtZXJnZV9ub2RlXCI6TWYuZXF1YWxzKHQucGF0aCxvKSYmKGUub2Zmc2V0Kz10LnBvc2l0aW9uKSxlLnBhdGg9TWYudHJhbnNmb3JtKG8sdCxuKTticmVhaztjYXNlXCJyZW1vdmVfdGV4dFwiOk1mLmVxdWFscyh0LnBhdGgsbykmJnQub2Zmc2V0PD1pJiYoZS5vZmZzZXQtPU1hdGgubWluKGktdC5vZmZzZXQsdC50ZXh0Lmxlbmd0aCkpO2JyZWFrO2Nhc2VcInJlbW92ZV9ub2RlXCI6aWYoTWYuZXF1YWxzKHQucGF0aCxvKXx8TWYuaXNBbmNlc3Rvcih0LnBhdGgsbykpcmV0dXJuIG51bGw7ZS5wYXRoPU1mLnRyYW5zZm9ybShvLHQsbik7YnJlYWs7Y2FzZVwic3BsaXRfbm9kZVwiOmlmKE1mLmVxdWFscyh0LnBhdGgsbykpe2lmKHQucG9zaXRpb249PT1pJiZudWxsPT1yKXJldHVybiBudWxsOyh0LnBvc2l0aW9uPGl8fHQucG9zaXRpb249PT1pJiZcImZvcndhcmRcIj09PXIpJiYoZS5vZmZzZXQtPXQucG9zaXRpb24sZS5wYXRoPU1mLnRyYW5zZm9ybShvLHQsSGYoSGYoe30sbikse30se2FmZmluaXR5OlwiZm9yd2FyZFwifSkpKX1lbHNlIGUucGF0aD1NZi50cmFuc2Zvcm0obyx0LG4pfX0pKX19LFVmPXt0cmFuc2Zvcm0oZSx0KXt2YXJ7Y3VycmVudDpuLGFmZmluaXR5OnJ9PWU7aWYobnVsbCE9bil7dmFyIG89VmYudHJhbnNmb3JtKG4sdCx7YWZmaW5pdHk6cn0pO2UuY3VycmVudD1vLG51bGw9PW8mJmUudW5yZWYoKX19fSxXZj1bXCJhbmNob3JcIixcImZvY3VzXCJdO2Z1bmN0aW9uIEdmKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn12YXIgcWY9e2VkZ2VzKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSx7cmV2ZXJzZTpuPSExfT10LHthbmNob3I6cixmb2N1czpvfT1lO3JldHVybiBxZi5pc0JhY2t3YXJkKGUpPT09bj9bcixvXTpbbyxyXX0sZW5kKGUpe3ZhclssdF09cWYuZWRnZXMoZSk7cmV0dXJuIHR9LGVxdWFsczooZSx0KT0+VmYuZXF1YWxzKGUuYW5jaG9yLHQuYW5jaG9yKSYmVmYuZXF1YWxzKGUuZm9jdXMsdC5mb2N1cyksaW5jbHVkZXMoZSx0KXtpZihxZi5pc1JhbmdlKHQpKXtpZihxZi5pbmNsdWRlcyhlLHQuYW5jaG9yKXx8cWYuaW5jbHVkZXMoZSx0LmZvY3VzKSlyZXR1cm4hMDt2YXJbbixyXT1xZi5lZGdlcyhlKSxbbyxpXT1xZi5lZGdlcyh0KTtyZXR1cm4gVmYuaXNCZWZvcmUobixvKSYmVmYuaXNBZnRlcihyLGkpfXZhclthLHVdPXFmLmVkZ2VzKGUpLHM9ITEsbD0hMTtyZXR1cm4gVmYuaXNQb2ludCh0KT8ocz1WZi5jb21wYXJlKHQsYSk+PTAsbD1WZi5jb21wYXJlKHQsdSk8PTApOihzPU1mLmNvbXBhcmUodCxhLnBhdGgpPj0wLGw9TWYuY29tcGFyZSh0LHUucGF0aCk8PTApLHMmJmx9LGludGVyc2VjdGlvbihlLHQpe3ZhciBuPXFjKGUsV2YpLFtyLG9dPXFmLmVkZ2VzKGUpLFtpLGFdPXFmLmVkZ2VzKHQpLHU9VmYuaXNCZWZvcmUocixpKT9pOnIscz1WZi5pc0JlZm9yZShvLGEpP286YTtyZXR1cm4gVmYuaXNCZWZvcmUocyx1KT9udWxsOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP0dmKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7SWMoZSx0LG5bdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOkdmKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfSh7YW5jaG9yOnUsZm9jdXM6c30sbil9LGlzQmFja3dhcmQoZSl7dmFye2FuY2hvcjp0LGZvY3VzOm59PWU7cmV0dXJuIFZmLmlzQWZ0ZXIodCxuKX0saXNDb2xsYXBzZWQoZSl7dmFye2FuY2hvcjp0LGZvY3VzOm59PWU7cmV0dXJuIFZmLmVxdWFscyh0LG4pfSxpc0V4cGFuZGVkOmU9PiFxZi5pc0NvbGxhcHNlZChlKSxpc0ZvcndhcmQ6ZT0+IXFmLmlzQmFja3dhcmQoZSksaXNSYW5nZTplPT5MbChlKSYmVmYuaXNQb2ludChlLmFuY2hvcikmJlZmLmlzUG9pbnQoZS5mb2N1cyksKnBvaW50cyhlKXt5aWVsZFtlLmFuY2hvcixcImFuY2hvclwiXSx5aWVsZFtlLmZvY3VzLFwiZm9jdXNcIl19LHN0YXJ0KGUpe3Zhclt0XT1xZi5lZGdlcyhlKTtyZXR1cm4gdH0sdHJhbnNmb3JtKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O3JldHVybiBQYyhlLChlPT57aWYobnVsbD09PWUpcmV0dXJuIG51bGw7dmFyIHIsbyx7YWZmaW5pdHk6aT1cImlud2FyZFwifT1uO2lmKFwiaW53YXJkXCI9PT1pKXt2YXIgYT1xZi5pc0NvbGxhcHNlZChlKTtxZi5pc0ZvcndhcmQoZSk/KHI9XCJmb3J3YXJkXCIsbz1hP3I6XCJiYWNrd2FyZFwiKToocj1cImJhY2t3YXJkXCIsbz1hP3I6XCJmb3J3YXJkXCIpfWVsc2VcIm91dHdhcmRcIj09PWk/cWYuaXNGb3J3YXJkKGUpPyhyPVwiYmFja3dhcmRcIixvPVwiZm9yd2FyZFwiKToocj1cImZvcndhcmRcIixvPVwiYmFja3dhcmRcIik6KHI9aSxvPWkpO3ZhciB1PVZmLnRyYW5zZm9ybShlLmFuY2hvcix0LHthZmZpbml0eTpyfSkscz1WZi50cmFuc2Zvcm0oZS5mb2N1cyx0LHthZmZpbml0eTpvfSk7aWYoIXV8fCFzKXJldHVybiBudWxsO2UuYW5jaG9yPXUsZS5mb2N1cz1zfSkpfX0sS2Y9e3RyYW5zZm9ybShlLHQpe3ZhcntjdXJyZW50Om4sYWZmaW5pdHk6cn09ZTtpZihudWxsIT1uKXt2YXIgbz1xZi50cmFuc2Zvcm0obix0LHthZmZpbml0eTpyfSk7ZS5jdXJyZW50PW8sbnVsbD09byYmZS51bnJlZigpfX19LFlmPShlLHQpPT57Zm9yKHZhciBuIGluIGUpe3ZhciByPWVbbl0sbz10W25dO2lmKExsKHIpJiZMbChvKSl7aWYoIVlmKHIsbykpcmV0dXJuITF9ZWxzZSBpZihBcnJheS5pc0FycmF5KHIpJiZBcnJheS5pc0FycmF5KG8pKXtpZihyLmxlbmd0aCE9PW8ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0hPT1vW2ldKXJldHVybiExfWVsc2UgaWYociE9PW8pcmV0dXJuITF9Zm9yKHZhciBhIGluIHQpaWYodm9pZCAwPT09ZVthXSYmdm9pZCAwIT09dFthXSlyZXR1cm4hMTtyZXR1cm4hMH0sWGY9W1widGV4dFwiXSxaZj1bXCJhbmNob3JcIixcImZvY3VzXCJdO2Z1bmN0aW9uIEpmKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBRZihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9KZihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0ljKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpKZihPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX12YXIgZWQ9e2VxdWFscyhlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSx7bG9vc2U6cj0hMX09bjtmdW5jdGlvbiBvKGUpe3JldHVybiBxYyhlLFhmKX1yZXR1cm4gWWYocj9vKGUpOmUscj9vKHQpOnQpfSxpc1RleHQ6ZT0+TGwoZSkmJlwic3RyaW5nXCI9PXR5cGVvZiBlLnRleHQsaXNUZXh0TGlzdDplPT5BcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KChlPT5lZC5pc1RleHQoZSkpKSxpc1RleHRQcm9wczplPT52b2lkIDAhPT1lLnRleHQsbWF0Y2hlcyhlLHQpe2Zvcih2YXIgbiBpbiB0KWlmKFwidGV4dFwiIT09biYmKCFlLmhhc093blByb3BlcnR5KG4pfHxlW25dIT09dFtuXSkpcmV0dXJuITE7cmV0dXJuITB9LGRlY29yYXRpb25zKGUsdCl7dmFyIG49W1FmKHt9LGUpXTtmb3IodmFyIHIgb2YgdCl7dmFyIG89cWMocixaZiksW2ksYV09cWYuZWRnZXMociksdT1bXSxzPTA7Zm9yKHZhciBsIG9mIG4pe3ZhcntsZW5ndGg6Y309bC50ZXh0LGY9cztpZihzKz1jLGkub2Zmc2V0PD1mJiZhLm9mZnNldD49cylPYmplY3QuYXNzaWduKGwsbyksdS5wdXNoKGwpO2Vsc2UgaWYoaS5vZmZzZXQhPT1hLm9mZnNldCYmKGkub2Zmc2V0PT09c3x8YS5vZmZzZXQ9PT1mKXx8aS5vZmZzZXQ+c3x8YS5vZmZzZXQ8Znx8YS5vZmZzZXQ9PT1mJiYwIT09Zil1LnB1c2gobCk7ZWxzZXt2YXIgZD1sLHA9dm9pZCAwLGg9dm9pZCAwO2lmKGEub2Zmc2V0PHMpe3ZhciBnPWEub2Zmc2V0LWY7aD1RZihRZih7fSxkKSx7fSx7dGV4dDpkLnRleHQuc2xpY2UoZyl9KSxkPVFmKFFmKHt9LGQpLHt9LHt0ZXh0OmQudGV4dC5zbGljZSgwLGcpfSl9aWYoaS5vZmZzZXQ+Zil7dmFyIHY9aS5vZmZzZXQtZjtwPVFmKFFmKHt9LGQpLHt9LHt0ZXh0OmQudGV4dC5zbGljZSgwLHYpfSksZD1RZihRZih7fSxkKSx7fSx7dGV4dDpkLnRleHQuc2xpY2Uodil9KX1PYmplY3QuYXNzaWduKGQsbykscCYmdS5wdXNoKHApLHUucHVzaChkKSxoJiZ1LnB1c2goaCl9fW49dX1yZXR1cm4gbn19O2Z1bmN0aW9uIHRkKGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBuZChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj90ZChPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe0ljKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTp0ZChPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pKX1yZXR1cm4gZX12YXIgcmQ9e3RyYW5zZm9ybShlLHQpe2UuY2hpbGRyZW49amMoZS5jaGlsZHJlbik7dmFyIG49ZS5zZWxlY3Rpb24mJmpjKGUuc2VsZWN0aW9uKTt0cnl7bj0oKGUsdCxuKT0+e3N3aXRjaChuLnR5cGUpe2Nhc2VcImluc2VydF9ub2RlXCI6dmFye3BhdGg6cixub2RlOm99PW4saT1OZi5wYXJlbnQoZSxyKSxhPXJbci5sZW5ndGgtMV07aWYoYT5pLmNoaWxkcmVuLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhcHBseSBhbiBcImluc2VydF9ub2RlXCIgb3BlcmF0aW9uIGF0IHBhdGggWycuY29uY2F0KHIsXCJdIGJlY2F1c2UgdGhlIGRlc3RpbmF0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiB0aGUgbm9kZS5cIikpO2lmKGkuY2hpbGRyZW4uc3BsaWNlKGEsMCxvKSx0KWZvcih2YXJbdSxzXW9mIHFmLnBvaW50cyh0KSl0W3NdPVZmLnRyYW5zZm9ybSh1LG4pO2JyZWFrO2Nhc2VcImluc2VydF90ZXh0XCI6dmFye3BhdGg6bCxvZmZzZXQ6Yyx0ZXh0OmZ9PW47aWYoMD09PWYubGVuZ3RoKWJyZWFrO3ZhciBkPU5mLmxlYWYoZSxsKSxwPWQudGV4dC5zbGljZSgwLGMpLGg9ZC50ZXh0LnNsaWNlKGMpO2lmKGQudGV4dD1wK2YraCx0KWZvcih2YXJbZyx2XW9mIHFmLnBvaW50cyh0KSl0W3ZdPVZmLnRyYW5zZm9ybShnLG4pO2JyZWFrO2Nhc2VcIm1lcmdlX25vZGVcIjp2YXJ7cGF0aDp5fT1uLG09TmYuZ2V0KGUseSksYj1NZi5wcmV2aW91cyh5KSx3PU5mLmdldChlLGIpLEU9TmYucGFyZW50KGUseSksRD15W3kubGVuZ3RoLTFdO2lmKGVkLmlzVGV4dChtKSYmZWQuaXNUZXh0KHcpKXcudGV4dCs9bS50ZXh0O2Vsc2V7aWYoZWQuaXNUZXh0KG0pfHxlZC5pc1RleHQodykpdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXBwbHkgYSBcIm1lcmdlX25vZGVcIiBvcGVyYXRpb24gYXQgcGF0aCBbJy5jb25jYXQoeSxcIl0gdG8gbm9kZXMgb2YgZGlmZmVyZW50IGludGVyZmFjZXM6IFwiKS5jb25jYXQobSxcIiBcIikuY29uY2F0KHcpKTt3LmNoaWxkcmVuLnB1c2goLi4ubS5jaGlsZHJlbil9aWYoRS5jaGlsZHJlbi5zcGxpY2UoRCwxKSx0KWZvcih2YXJbUyx4XW9mIHFmLnBvaW50cyh0KSl0W3hdPVZmLnRyYW5zZm9ybShTLG4pO2JyZWFrO2Nhc2VcIm1vdmVfbm9kZVwiOnZhcntwYXRoOkMsbmV3UGF0aDpBfT1uO2lmKE1mLmlzQW5jZXN0b3IoQyxBKSl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgbW92ZSBhIHBhdGggW1wiLmNvbmNhdChDLFwiXSB0byBuZXcgcGF0aCBbXCIpLmNvbmNhdChBLFwiXSBiZWNhdXNlIHRoZSBkZXN0aW5hdGlvbiBpcyBpbnNpZGUgaXRzZWxmLlwiKSk7dmFyIE89TmYuZ2V0KGUsQyksaz1OZi5wYXJlbnQoZSxDKSxCPUNbQy5sZW5ndGgtMV07ay5jaGlsZHJlbi5zcGxpY2UoQiwxKTt2YXIgRj1NZi50cmFuc2Zvcm0oQyxuKSxUPU5mLmdldChlLE1mLnBhcmVudChGKSksXz1GW0YubGVuZ3RoLTFdO2lmKFQuY2hpbGRyZW4uc3BsaWNlKF8sMCxPKSx0KWZvcih2YXJbUCxqXW9mIHFmLnBvaW50cyh0KSl0W2pdPVZmLnRyYW5zZm9ybShQLG4pO2JyZWFrO2Nhc2VcInJlbW92ZV9ub2RlXCI6dmFye3BhdGg6Tn09bixJPU5bTi5sZW5ndGgtMV07aWYoTmYucGFyZW50KGUsTikuY2hpbGRyZW4uc3BsaWNlKEksMSksdClmb3IodmFyW0wsUl1vZiBxZi5wb2ludHModCkpe3ZhciBNPVZmLnRyYW5zZm9ybShMLG4pO2lmKG51bGwhPXQmJm51bGwhPU0pdFtSXT1NO2Vsc2V7dmFyIHo9dm9pZCAwLCQ9dm9pZCAwO2Zvcih2YXJbSCxWXW9mIE5mLnRleHRzKGUpKXtpZigtMSE9PU1mLmNvbXBhcmUoVixOKSl7JD1bSCxWXTticmVha316PVtILFZdfXZhciBVPSExO3omJiQmJihVPU1mLmVxdWFscygkWzFdLE4pPyFNZi5oYXNQcmV2aW91cygkWzFdKTpNZi5jb21tb24oelsxXSxOKS5sZW5ndGg8TWYuY29tbW9uKCRbMV0sTikubGVuZ3RoKSx6JiYhVT8oTC5wYXRoPXpbMV0sTC5vZmZzZXQ9elswXS50ZXh0Lmxlbmd0aCk6JD8oTC5wYXRoPSRbMV0sTC5vZmZzZXQ9MCk6dD1udWxsfX1icmVhaztjYXNlXCJyZW1vdmVfdGV4dFwiOnZhcntwYXRoOlcsb2Zmc2V0OkcsdGV4dDpxfT1uO2lmKDA9PT1xLmxlbmd0aClicmVhazt2YXIgSz1OZi5sZWFmKGUsVyksWT1LLnRleHQuc2xpY2UoMCxHKSxYPUsudGV4dC5zbGljZShHK3EubGVuZ3RoKTtpZihLLnRleHQ9WStYLHQpZm9yKHZhcltaLEpdb2YgcWYucG9pbnRzKHQpKXRbSl09VmYudHJhbnNmb3JtKFosbik7YnJlYWs7Y2FzZVwic2V0X25vZGVcIjp2YXJ7cGF0aDpRLHByb3BlcnRpZXM6ZWUsbmV3UHJvcGVydGllczp0ZX09bjtpZigwPT09US5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNldCBwcm9wZXJ0aWVzIG9uIHRoZSByb290IG5vZGUhXCIpO3ZhciBuZT1OZi5nZXQoZSxRKTtmb3IodmFyIHJlIGluIHRlKXtpZihcImNoaWxkcmVuXCI9PT1yZXx8XCJ0ZXh0XCI9PT1yZSl0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgdGhlIFwiJy5jb25jYXQocmUsJ1wiIHByb3BlcnR5IG9mIG5vZGVzIScpKTt2YXIgb2U9dGVbcmVdO251bGw9PW9lP2RlbGV0ZSBuZVtyZV06bmVbcmVdPW9lfWZvcih2YXIgaWUgaW4gZWUpdGUuaGFzT3duUHJvcGVydHkoaWUpfHxkZWxldGUgbmVbaWVdO2JyZWFrO2Nhc2VcInNldF9zZWxlY3Rpb25cIjp2YXJ7bmV3UHJvcGVydGllczphZX09bjtpZihudWxsPT1hZSl0PWFlO2Vsc2V7aWYobnVsbD09dCl7aWYoIXFmLmlzUmFuZ2UoYWUpKXRocm93IG5ldyBFcnJvcignQ2Fubm90IGFwcGx5IGFuIGluY29tcGxldGUgXCJzZXRfc2VsZWN0aW9uXCIgb3BlcmF0aW9uIHByb3BlcnRpZXMgJy5jb25jYXQoSlNPTi5zdHJpbmdpZnkoYWUpLFwiIHdoZW4gdGhlcmUgaXMgbm8gY3VycmVudCBzZWxlY3Rpb24uXCIpKTt0PW5kKHt9LGFlKX1mb3IodmFyIHVlIGluIGFlKXt2YXIgc2U9YWVbdWVdO2lmKG51bGw9PXNlKXtpZihcImFuY2hvclwiPT09dWV8fFwiZm9jdXNcIj09PXVlKXRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlbW92ZSB0aGUgXCInLmNvbmNhdCh1ZSwnXCIgc2VsZWN0aW9uIHByb3BlcnR5JykpO2RlbGV0ZSB0W3VlXX1lbHNlIHRbdWVdPXNlfX1icmVhaztjYXNlXCJzcGxpdF9ub2RlXCI6dmFye3BhdGg6bGUscG9zaXRpb246Y2UscHJvcGVydGllczpmZX09bjtpZigwPT09bGUubGVuZ3RoKXRocm93IG5ldyBFcnJvcignQ2Fubm90IGFwcGx5IGEgXCJzcGxpdF9ub2RlXCIgb3BlcmF0aW9uIGF0IHBhdGggWycuY29uY2F0KGxlLFwiXSBiZWNhdXNlIHRoZSByb290IG5vZGUgY2Fubm90IGJlIHNwbGl0LlwiKSk7dmFyIGRlLHBlPU5mLmdldChlLGxlKSxoZT1OZi5wYXJlbnQoZSxsZSksZ2U9bGVbbGUubGVuZ3RoLTFdO2lmKGVkLmlzVGV4dChwZSkpe3ZhciB2ZT1wZS50ZXh0LnNsaWNlKDAsY2UpLHllPXBlLnRleHQuc2xpY2UoY2UpO3BlLnRleHQ9dmUsZGU9bmQobmQoe30sZmUpLHt9LHt0ZXh0OnllfSl9ZWxzZXt2YXIgbWU9cGUuY2hpbGRyZW4uc2xpY2UoMCxjZSksYmU9cGUuY2hpbGRyZW4uc2xpY2UoY2UpO3BlLmNoaWxkcmVuPW1lLGRlPW5kKG5kKHt9LGZlKSx7fSx7Y2hpbGRyZW46YmV9KX1pZihoZS5jaGlsZHJlbi5zcGxpY2UoZ2UrMSwwLGRlKSx0KWZvcih2YXJbd2UsRWVdb2YgcWYucG9pbnRzKHQpKXRbRWVdPVZmLnRyYW5zZm9ybSh3ZSxuKX1yZXR1cm4gdH0pKGUsbix0KX1maW5hbGx5e2UuY2hpbGRyZW49TmMoZS5jaGlsZHJlbiksZS5zZWxlY3Rpb249bj9NbChuKT9OYyhuKTpuOm51bGx9fX0sb2Q9W1widGV4dFwiXSxpZD1bXCJjaGlsZHJlblwiXTtmdW5jdGlvbiBhZChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gdWQoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/YWQoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtJYyhlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6YWQoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9dmFyIHNkPXtpbnNlcnROb2RlcyhlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtCZi53aXRob3V0Tm9ybWFsaXppbmcoZSwoKCk9Pnt2YXJ7aGFuZ2luZzpyPSExLHZvaWRzOm89ITEsbW9kZTppPVwibG93ZXN0XCJ9PW4se2F0OmEsbWF0Y2g6dSxzZWxlY3Q6c309bjtpZihOZi5pc05vZGUodCkmJih0PVt0XSksMCE9PXQubGVuZ3RoKXt2YXJbbF09dDtpZihhfHwoYT1lLnNlbGVjdGlvbj9lLnNlbGVjdGlvbjplLmNoaWxkcmVuLmxlbmd0aD4wP0JmLmVuZChlLFtdKTpbMF0scz0hMCksbnVsbD09cyYmKHM9ITEpLHFmLmlzUmFuZ2UoYSkpaWYocnx8KGE9QmYudW5oYW5nUmFuZ2UoZSxhKSkscWYuaXNDb2xsYXBzZWQoYSkpYT1hLmFuY2hvcjtlbHNle3ZhclssY109cWYuZWRnZXMoYSksZj1CZi5wb2ludFJlZihlLGMpO21kLmRlbGV0ZShlLHthdDphfSksYT1mLnVucmVmKCl9aWYoVmYuaXNQb2ludChhKSl7bnVsbD09dSYmKHU9ZWQuaXNUZXh0KGwpP2U9PmVkLmlzVGV4dChlKTplLmlzSW5saW5lKGwpP3Q9PmVkLmlzVGV4dCh0KXx8QmYuaXNJbmxpbmUoZSx0KTp0PT5CZi5pc0Jsb2NrKGUsdCkpO3ZhcltkXT1CZi5ub2RlcyhlLHthdDphLnBhdGgsbWF0Y2g6dSxtb2RlOmksdm9pZHM6b30pO2lmKCFkKXJldHVybjt2YXJbLHBdPWQsaD1CZi5wYXRoUmVmKGUscCksZz1CZi5pc0VuZChlLGEscCk7bWQuc3BsaXROb2RlcyhlLHthdDphLG1hdGNoOnUsbW9kZTppLHZvaWRzOm99KTt2YXIgdj1oLnVucmVmKCk7YT1nP01mLm5leHQodik6dn12YXIgeT1NZi5wYXJlbnQoYSksbT1hW2EubGVuZ3RoLTFdO2lmKG98fCFCZi52b2lkKGUse2F0Onl9KSl7Zm9yKHZhciBiIG9mIHQpe3ZhciB3PXkuY29uY2F0KG0pO20rKyxlLmFwcGx5KHt0eXBlOlwiaW5zZXJ0X25vZGVcIixwYXRoOncsbm9kZTpifSksYT1NZi5uZXh0KGEpfWlmKGE9TWYucHJldmlvdXMoYSkscyl7dmFyIEU9QmYuZW5kKGUsYSk7RSYmbWQuc2VsZWN0KGUsRSl9fX19KSl9LGxpZnROb2RlcyhlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307QmYud2l0aG91dE5vcm1hbGl6aW5nKGUsKCgpPT57dmFye2F0Om49ZS5zZWxlY3Rpb24sbW9kZTpyPVwibG93ZXN0XCIsdm9pZHM6bz0hMX09dCx7bWF0Y2g6aX09dDtpZihudWxsPT1pJiYoaT1NZi5pc1BhdGgobik/ZmQoZSxuKTp0PT5CZi5pc0Jsb2NrKGUsdCkpLG4pe3ZhciBhPUJmLm5vZGVzKGUse2F0Om4sbWF0Y2g6aSxtb2RlOnIsdm9pZHM6b30pLHU9QXJyYXkuZnJvbShhLCh0PT57dmFyWyxuXT10O3JldHVybiBCZi5wYXRoUmVmKGUsbil9KSk7Zm9yKHZhciBzIG9mIHUpe3ZhciBsPXMudW5yZWYoKTtpZihsLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBsaWZ0IG5vZGUgYXQgYSBwYXRoIFtcIi5jb25jYXQobCxcIl0gYmVjYXVzZSBpdCBoYXMgYSBkZXB0aCBvZiBsZXNzIHRoYW4gYDJgLlwiKSk7dmFyIGM9QmYubm9kZShlLE1mLnBhcmVudChsKSksW2YsZF09YyxwPWxbbC5sZW5ndGgtMV0se2xlbmd0aDpofT1mLmNoaWxkcmVuO2lmKDE9PT1oKXt2YXIgZz1NZi5uZXh0KGQpO21kLm1vdmVOb2RlcyhlLHthdDpsLHRvOmcsdm9pZHM6b30pLG1kLnJlbW92ZU5vZGVzKGUse2F0OmQsdm9pZHM6b30pfWVsc2UgaWYoMD09PXApbWQubW92ZU5vZGVzKGUse2F0OmwsdG86ZCx2b2lkczpvfSk7ZWxzZSBpZihwPT09aC0xKXt2YXIgdj1NZi5uZXh0KGQpO21kLm1vdmVOb2RlcyhlLHthdDpsLHRvOnYsdm9pZHM6b30pfWVsc2V7dmFyIHk9TWYubmV4dChsKSxtPU1mLm5leHQoZCk7bWQuc3BsaXROb2RlcyhlLHthdDp5LHZvaWRzOm99KSxtZC5tb3ZlTm9kZXMoZSx7YXQ6bCx0bzptLHZvaWRzOm99KX19fX0pKX0sbWVyZ2VOb2RlcyhlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307QmYud2l0aG91dE5vcm1hbGl6aW5nKGUsKCgpPT57dmFye21hdGNoOm4sYXQ6cj1lLnNlbGVjdGlvbn09dCx7aGFuZ2luZzpvPSExLHZvaWRzOmk9ITEsbW9kZTphPVwibG93ZXN0XCJ9PXQ7aWYocil7aWYobnVsbD09bilpZihNZi5pc1BhdGgocikpe3Zhclt1XT1CZi5wYXJlbnQoZSxyKTtuPWU9PnUuY2hpbGRyZW4uaW5jbHVkZXMoZSl9ZWxzZSBuPXQ9PkJmLmlzQmxvY2soZSx0KTtpZighbyYmcWYuaXNSYW5nZShyKSYmKHI9QmYudW5oYW5nUmFuZ2UoZSxyKSkscWYuaXNSYW5nZShyKSlpZihxZi5pc0NvbGxhcHNlZChyKSlyPXIuYW5jaG9yO2Vsc2V7dmFyWyxzXT1xZi5lZGdlcyhyKSxsPUJmLnBvaW50UmVmKGUscyk7bWQuZGVsZXRlKGUse2F0OnJ9KSxyPWwudW5yZWYoKSxudWxsPT10LmF0JiZtZC5zZWxlY3QoZSxyKX12YXJbY109QmYubm9kZXMoZSx7YXQ6cixtYXRjaDpuLHZvaWRzOmksbW9kZTphfSksZj1CZi5wcmV2aW91cyhlLHthdDpyLG1hdGNoOm4sdm9pZHM6aSxtb2RlOmF9KTtpZihjJiZmKXt2YXJbZCxwXT1jLFtoLGddPWY7aWYoMCE9PXAubGVuZ3RoJiYwIT09Zy5sZW5ndGgpe3ZhciB2LHksbT1NZi5uZXh0KGcpLGI9TWYuY29tbW9uKHAsZyksdz1NZi5pc1NpYmxpbmcocCxnKSxFPUFycmF5LmZyb20oQmYubGV2ZWxzKGUse2F0OnB9KSwoZT0+e3Zhclt0XT1lO3JldHVybiB0fSkpLnNsaWNlKGIubGVuZ3RoKS5zbGljZSgwLC0xKSxEPUJmLmFib3ZlKGUse2F0OnAsbW9kZTpcImhpZ2hlc3RcIixtYXRjaDp0PT5FLmluY2x1ZGVzKHQpJiZsZChlLHQpfSksUz1EJiZCZi5wYXRoUmVmKGUsRFsxXSk7aWYoZWQuaXNUZXh0KGQpJiZlZC5pc1RleHQoaCkpe3ZhciB4PXFjKGQsb2QpO3k9aC50ZXh0Lmxlbmd0aCx2PXh9ZWxzZXtpZighU2YuaXNFbGVtZW50KGQpfHwhU2YuaXNFbGVtZW50KGgpKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBtZXJnZSB0aGUgbm9kZSBhdCBwYXRoIFtcIi5jb25jYXQocCxcIl0gd2l0aCB0aGUgcHJldmlvdXMgc2libGluZyBiZWNhdXNlIGl0IGlzIG5vdCB0aGUgc2FtZSBraW5kOiBcIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KGQpLFwiIFwiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkoaCkpKTt4PXFjKGQsaWQpO3k9aC5jaGlsZHJlbi5sZW5ndGgsdj14fXd8fG1kLm1vdmVOb2RlcyhlLHthdDpwLHRvOm0sdm9pZHM6aX0pLFMmJm1kLnJlbW92ZU5vZGVzKGUse2F0OlMuY3VycmVudCx2b2lkczppfSksU2YuaXNFbGVtZW50KGgpJiZCZi5pc0VtcHR5KGUsaCl8fGVkLmlzVGV4dChoKSYmXCJcIj09PWgudGV4dCYmMCE9PWdbZy5sZW5ndGgtMV0/bWQucmVtb3ZlTm9kZXMoZSx7YXQ6Zyx2b2lkczppfSk6ZS5hcHBseSh7dHlwZTpcIm1lcmdlX25vZGVcIixwYXRoOm0scG9zaXRpb246eSxwcm9wZXJ0aWVzOnZ9KSxTJiZTLnVucmVmKCl9fX19KSl9LG1vdmVOb2RlcyhlLHQpe0JmLndpdGhvdXROb3JtYWxpemluZyhlLCgoKT0+e3Zhcnt0bzpuLGF0OnI9ZS5zZWxlY3Rpb24sbW9kZTpvPVwibG93ZXN0XCIsdm9pZHM6aT0hMX09dCx7bWF0Y2g6YX09dDtpZihyKXtudWxsPT1hJiYoYT1NZi5pc1BhdGgocik/ZmQoZSxyKTp0PT5CZi5pc0Jsb2NrKGUsdCkpO3ZhciB1PUJmLnBhdGhSZWYoZSxuKSxzPUJmLm5vZGVzKGUse2F0OnIsbWF0Y2g6YSxtb2RlOm8sdm9pZHM6aX0pLGw9QXJyYXkuZnJvbShzLCh0PT57dmFyWyxuXT10O3JldHVybiBCZi5wYXRoUmVmKGUsbil9KSk7Zm9yKHZhciBjIG9mIGwpe3ZhciBmPWMudW5yZWYoKSxkPXUuY3VycmVudDswIT09Zi5sZW5ndGgmJmUuYXBwbHkoe3R5cGU6XCJtb3ZlX25vZGVcIixwYXRoOmYsbmV3UGF0aDpkfSksdS5jdXJyZW50JiZNZi5pc1NpYmxpbmcoZCxmKSYmTWYuaXNBZnRlcihkLGYpJiYodS5jdXJyZW50PU1mLm5leHQodS5jdXJyZW50KSl9dS51bnJlZigpfX0pKX0scmVtb3ZlTm9kZXMoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O0JmLndpdGhvdXROb3JtYWxpemluZyhlLCgoKT0+e3ZhcntoYW5naW5nOm49ITEsdm9pZHM6cj0hMSxtb2RlOm89XCJsb3dlc3RcIn09dCx7YXQ6aT1lLnNlbGVjdGlvbixtYXRjaDphfT10O2lmKGkpe251bGw9PWEmJihhPU1mLmlzUGF0aChpKT9mZChlLGkpOnQ9PkJmLmlzQmxvY2soZSx0KSksIW4mJnFmLmlzUmFuZ2UoaSkmJihpPUJmLnVuaGFuZ1JhbmdlKGUsaSkpO3ZhciB1PUJmLm5vZGVzKGUse2F0OmksbWF0Y2g6YSxtb2RlOm8sdm9pZHM6cn0pLHM9QXJyYXkuZnJvbSh1LCh0PT57dmFyWyxuXT10O3JldHVybiBCZi5wYXRoUmVmKGUsbil9KSk7Zm9yKHZhciBsIG9mIHMpe3ZhciBjPWwudW5yZWYoKTtpZihjKXt2YXJbZl09QmYubm9kZShlLGMpO2UuYXBwbHkoe3R5cGU6XCJyZW1vdmVfbm9kZVwiLHBhdGg6Yyxub2RlOmZ9KX19fX0pKX0sc2V0Tm9kZXMoZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307QmYud2l0aG91dE5vcm1hbGl6aW5nKGUsKCgpPT57dmFye21hdGNoOnIsYXQ6bz1lLnNlbGVjdGlvbn09bix7aGFuZ2luZzppPSExLG1vZGU6YT1cImxvd2VzdFwiLHNwbGl0OnU9ITEsdm9pZHM6cz0hMX09bjtpZihvKXtpZihudWxsPT1yJiYocj1NZi5pc1BhdGgobyk/ZmQoZSxvKTp0PT5CZi5pc0Jsb2NrKGUsdCkpLCFpJiZxZi5pc1JhbmdlKG8pJiYobz1CZi51bmhhbmdSYW5nZShlLG8pKSx1JiZxZi5pc1JhbmdlKG8pKXtpZihxZi5pc0NvbGxhcHNlZChvKSYmQmYubGVhZihlLG8uYW5jaG9yKVswXS50ZXh0Lmxlbmd0aD4wKXJldHVybjt2YXIgbD1CZi5yYW5nZVJlZihlLG8se2FmZmluaXR5OlwiaW53YXJkXCJ9KSxbYyxmXT1xZi5lZGdlcyhvKSxkPVwibG93ZXN0XCI9PT1hP1wibG93ZXN0XCI6XCJoaWdoZXN0XCIscD1CZi5pc0VuZChlLGYsZi5wYXRoKTttZC5zcGxpdE5vZGVzKGUse2F0OmYsbWF0Y2g6cixtb2RlOmQsdm9pZHM6cyxhbHdheXM6IXB9KTt2YXIgaD1CZi5pc1N0YXJ0KGUsYyxjLnBhdGgpO21kLnNwbGl0Tm9kZXMoZSx7YXQ6YyxtYXRjaDpyLG1vZGU6ZCx2b2lkczpzLGFsd2F5czohaH0pLG89bC51bnJlZigpLG51bGw9PW4uYXQmJm1kLnNlbGVjdChlLG8pfWZvcih2YXJbZyx2XW9mIEJmLm5vZGVzKGUse2F0Om8sbWF0Y2g6cixtb2RlOmEsdm9pZHM6c30pKXt2YXIgeT17fSxtPXt9O2lmKDAhPT12Lmxlbmd0aCl7dmFyIGI9ITE7Zm9yKHZhciB3IGluIHQpXCJjaGlsZHJlblwiIT09dyYmXCJ0ZXh0XCIhPT13JiZ0W3ddIT09Z1t3XSYmKGI9ITAsZy5oYXNPd25Qcm9wZXJ0eSh3KSYmKHlbd109Z1t3XSksbnVsbCE9dFt3XSYmKG1bd109dFt3XSkpO2ImJmUuYXBwbHkoe3R5cGU6XCJzZXRfbm9kZVwiLHBhdGg6dixwcm9wZXJ0aWVzOnksbmV3UHJvcGVydGllczptfSl9fX19KSl9LHNwbGl0Tm9kZXMoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O0JmLndpdGhvdXROb3JtYWxpemluZyhlLCgoKT0+e3Zhcnttb2RlOm49XCJsb3dlc3RcIix2b2lkczpyPSExfT10LHttYXRjaDpvLGF0Omk9ZS5zZWxlY3Rpb24saGVpZ2h0OmE9MCxhbHdheXM6dT0hMX09dDtpZihudWxsPT1vJiYobz10PT5CZi5pc0Jsb2NrKGUsdCkpLHFmLmlzUmFuZ2UoaSkmJihpPWNkKGUsaSkpLE1mLmlzUGF0aChpKSl7dmFyIHM9aSxsPUJmLnBvaW50KGUscyksW2NdPUJmLnBhcmVudChlLHMpO289ZT0+ZT09PWMsYT1sLnBhdGgubGVuZ3RoLXMubGVuZ3RoKzEsaT1sLHU9ITB9aWYoaSl7dmFyIGY9QmYucG9pbnRSZWYoZSxpLHthZmZpbml0eTpcImJhY2t3YXJkXCJ9KSxbZF09QmYubm9kZXMoZSx7YXQ6aSxtYXRjaDpvLG1vZGU6bix2b2lkczpyfSk7aWYoZCl7dmFyIHA9QmYudm9pZChlLHthdDppLG1vZGU6XCJoaWdoZXN0XCJ9KTtpZighciYmcCl7dmFyW2gsZ109cDtpZihTZi5pc0VsZW1lbnQoaCkmJmUuaXNJbmxpbmUoaCkpe3ZhciB2PUJmLmFmdGVyKGUsZyk7aWYoIXYpe3ZhciB5PU1mLm5leHQoZyk7bWQuaW5zZXJ0Tm9kZXMoZSx7dGV4dDpcIlwifSx7YXQ6eSx2b2lkczpyfSksdj1CZi5wb2ludChlLHkpfWk9dix1PSEwfWE9aS5wYXRoLmxlbmd0aC1nLmxlbmd0aCsxLHU9ITB9dmFyIG09QmYucG9pbnRSZWYoZSxpKSxiPWkucGF0aC5sZW5ndGgtYSxbLHddPWQsRT1pLnBhdGguc2xpY2UoMCxiKSxEPTA9PT1hP2kub2Zmc2V0OmkucGF0aFtiXSswO2Zvcih2YXJbUyx4XW9mIEJmLmxldmVscyhlLHthdDpFLHJldmVyc2U6ITAsdm9pZHM6cn0pKXt2YXIgQz0hMTtpZih4Lmxlbmd0aDx3Lmxlbmd0aHx8MD09PXgubGVuZ3RofHwhciYmQmYuaXNWb2lkKGUsUykpYnJlYWs7dmFyIEE9Zi5jdXJyZW50LE89QmYuaXNFbmQoZSxBLHgpO2lmKHV8fCFmfHwhQmYuaXNFZGdlKGUsQSx4KSl7Qz0hMDt2YXIgaz1OZi5leHRyYWN0UHJvcHMoUyk7ZS5hcHBseSh7dHlwZTpcInNwbGl0X25vZGVcIixwYXRoOngscG9zaXRpb246RCxwcm9wZXJ0aWVzOmt9KX1EPXhbeC5sZW5ndGgtMV0rKEN8fE8/MTowKX1pZihudWxsPT10LmF0KXt2YXIgQj1tLmN1cnJlbnR8fEJmLmVuZChlLFtdKTttZC5zZWxlY3QoZSxCKX1mLnVucmVmKCksbS51bnJlZigpfX19KSl9LHVuc2V0Tm9kZXMoZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgcj17fTtmb3IodmFyIG8gb2YgdClyW29dPW51bGw7bWQuc2V0Tm9kZXMoZSxyLG4pfSx1bndyYXBOb2RlcyhlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307QmYud2l0aG91dE5vcm1hbGl6aW5nKGUsKCgpPT57dmFye21vZGU6bj1cImxvd2VzdFwiLHNwbGl0OnI9ITEsdm9pZHM6bz0hMX09dCx7YXQ6aT1lLnNlbGVjdGlvbixtYXRjaDphfT10O2lmKGkpe251bGw9PWEmJihhPU1mLmlzUGF0aChpKT9mZChlLGkpOnQ9PkJmLmlzQmxvY2soZSx0KSksTWYuaXNQYXRoKGkpJiYoaT1CZi5yYW5nZShlLGkpKTt2YXIgdT1xZi5pc1JhbmdlKGkpP0JmLnJhbmdlUmVmKGUsaSk6bnVsbCxzPUJmLm5vZGVzKGUse2F0OmksbWF0Y2g6YSxtb2RlOm4sdm9pZHM6b30pLGw9QXJyYXkuZnJvbShzLCh0PT57dmFyWyxuXT10O3JldHVybiBCZi5wYXRoUmVmKGUsbil9KSkucmV2ZXJzZSgpLGM9ZnVuY3Rpb24odCl7dmFyIG49dC51bnJlZigpLFtpXT1CZi5ub2RlKGUsbiksYT1CZi5yYW5nZShlLG4pO3ImJnUmJihhPXFmLmludGVyc2VjdGlvbih1LmN1cnJlbnQsYSkpLG1kLmxpZnROb2RlcyhlLHthdDphLG1hdGNoOmU9PlNmLmlzQW5jZXN0b3IoaSkmJmkuY2hpbGRyZW4uaW5jbHVkZXMoZSksdm9pZHM6b30pfTtmb3IodmFyIGYgb2YgbCljKGYpO3UmJnUudW5yZWYoKX19KSl9LHdyYXBOb2RlcyhlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtCZi53aXRob3V0Tm9ybWFsaXppbmcoZSwoKCk9Pnt2YXJ7bW9kZTpyPVwibG93ZXN0XCIsc3BsaXQ6bz0hMSx2b2lkczppPSExfT1uLHttYXRjaDphLGF0OnU9ZS5zZWxlY3Rpb259PW47aWYodSl7aWYobnVsbD09YSYmKGE9TWYuaXNQYXRoKHUpP2ZkKGUsdSk6ZS5pc0lubGluZSh0KT90PT5CZi5pc0lubGluZShlLHQpfHxlZC5pc1RleHQodCk6dD0+QmYuaXNCbG9jayhlLHQpKSxvJiZxZi5pc1JhbmdlKHUpKXt2YXJbcyxsXT1xZi5lZGdlcyh1KSxjPUJmLnJhbmdlUmVmKGUsdSx7YWZmaW5pdHk6XCJpbndhcmRcIn0pO21kLnNwbGl0Tm9kZXMoZSx7YXQ6bCxtYXRjaDphLHZvaWRzOml9KSxtZC5zcGxpdE5vZGVzKGUse2F0OnMsbWF0Y2g6YSx2b2lkczppfSksdT1jLnVucmVmKCksbnVsbD09bi5hdCYmbWQuc2VsZWN0KGUsdSl9dmFyIGY9QXJyYXkuZnJvbShCZi5ub2RlcyhlLHthdDp1LG1hdGNoOmUuaXNJbmxpbmUodCk/dD0+QmYuaXNCbG9jayhlLHQpOmU9PkJmLmlzRWRpdG9yKGUpLG1vZGU6XCJsb3dlc3RcIix2b2lkczppfSkpO2Zvcih2YXJbLGRdb2YgZil7dmFyIHA9cWYuaXNSYW5nZSh1KT9xZi5pbnRlcnNlY3Rpb24odSxCZi5yYW5nZShlLGQpKTp1O2lmKHApe3ZhciBoPUFycmF5LmZyb20oQmYubm9kZXMoZSx7YXQ6cCxtYXRjaDphLG1vZGU6cix2b2lkczppfSkpO2lmKGgubGVuZ3RoPjApe3ZhciBnPWZ1bmN0aW9uKCl7dmFyW25dPWgscj1oW2gubGVuZ3RoLTFdLFssb109bixbLGFdPXI7aWYoMD09PW8ubGVuZ3RoJiYwPT09YS5sZW5ndGgpcmV0dXJuXCJjb250aW51ZVwiO3ZhciB1PU1mLmVxdWFscyhvLGEpP01mLnBhcmVudChvKTpNZi5jb21tb24obyxhKSxzPUJmLnJhbmdlKGUsbyxhKSxsPUJmLm5vZGUoZSx1KSxbY109bCxmPXUubGVuZ3RoKzEsZD1NZi5uZXh0KGEuc2xpY2UoMCxmKSkscD11ZCh1ZCh7fSx0KSx7fSx7Y2hpbGRyZW46W119KTttZC5pbnNlcnROb2RlcyhlLHAse2F0OmQsdm9pZHM6aX0pLG1kLm1vdmVOb2RlcyhlLHthdDpzLG1hdGNoOmU9PlNmLmlzQW5jZXN0b3IoYykmJmMuY2hpbGRyZW4uaW5jbHVkZXMoZSksdG86ZC5jb25jYXQoMCksdm9pZHM6aX0pfSgpO2lmKFwiY29udGludWVcIj09PWcpY29udGludWV9fX19fSkpfX0sbGQ9KGUsdCk9PntpZihTZi5pc0VsZW1lbnQodCkpe3ZhciBuPXQ7cmV0dXJuISFCZi5pc1ZvaWQoZSx0KXx8MT09PW4uY2hpbGRyZW4ubGVuZ3RoJiZsZChlLG4uY2hpbGRyZW5bMF0pfXJldHVybiFCZi5pc0VkaXRvcih0KX0sY2Q9KGUsdCk9PntpZihxZi5pc0NvbGxhcHNlZCh0KSlyZXR1cm4gdC5hbmNob3I7dmFyWyxuXT1xZi5lZGdlcyh0KSxyPUJmLnBvaW50UmVmKGUsbik7cmV0dXJuIG1kLmRlbGV0ZShlLHthdDp0fSksci51bnJlZigpfSxmZD0oZSx0KT0+e3ZhcltuXT1CZi5ub2RlKGUsdCk7cmV0dXJuIGU9PmU9PT1ufTtmdW5jdGlvbiBkZChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gcGQoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/ZGQoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtJYyhlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6ZGQoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9dmFyIGhkPXtjb2xsYXBzZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30se2VkZ2U6bj1cImFuY2hvclwifT10LHtzZWxlY3Rpb246cn09ZTtpZihyKWlmKFwiYW5jaG9yXCI9PT1uKW1kLnNlbGVjdChlLHIuYW5jaG9yKTtlbHNlIGlmKFwiZm9jdXNcIj09PW4pbWQuc2VsZWN0KGUsci5mb2N1cyk7ZWxzZSBpZihcInN0YXJ0XCI9PT1uKXt2YXJbb109cWYuZWRnZXMocik7bWQuc2VsZWN0KGUsbyl9ZWxzZSBpZihcImVuZFwiPT09bil7dmFyWyxpXT1xZi5lZGdlcyhyKTttZC5zZWxlY3QoZSxpKX19LGRlc2VsZWN0KGUpe3ZhcntzZWxlY3Rpb246dH09ZTt0JiZlLmFwcGx5KHt0eXBlOlwic2V0X3NlbGVjdGlvblwiLHByb3BlcnRpZXM6dCxuZXdQcm9wZXJ0aWVzOm51bGx9KX0sbW92ZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30se3NlbGVjdGlvbjpufT1lLHtkaXN0YW5jZTpyPTEsdW5pdDpvPVwiY2hhcmFjdGVyXCIscmV2ZXJzZTppPSExfT10LHtlZGdlOmE9bnVsbH09dDtpZihuKXtcInN0YXJ0XCI9PT1hJiYoYT1xZi5pc0JhY2t3YXJkKG4pP1wiZm9jdXNcIjpcImFuY2hvclwiKSxcImVuZFwiPT09YSYmKGE9cWYuaXNCYWNrd2FyZChuKT9cImFuY2hvclwiOlwiZm9jdXNcIik7dmFye2FuY2hvcjp1LGZvY3VzOnN9PW4sbD17ZGlzdGFuY2U6cix1bml0Om99LGM9e307aWYobnVsbD09YXx8XCJhbmNob3JcIj09PWEpe3ZhciBmPWk/QmYuYmVmb3JlKGUsdSxsKTpCZi5hZnRlcihlLHUsbCk7ZiYmKGMuYW5jaG9yPWYpfWlmKG51bGw9PWF8fFwiZm9jdXNcIj09PWEpe3ZhciBkPWk/QmYuYmVmb3JlKGUscyxsKTpCZi5hZnRlcihlLHMsbCk7ZCYmKGMuZm9jdXM9ZCl9bWQuc2V0U2VsZWN0aW9uKGUsYyl9fSxzZWxlY3QoZSx0KXt2YXJ7c2VsZWN0aW9uOm59PWU7aWYodD1CZi5yYW5nZShlLHQpLG4pbWQuc2V0U2VsZWN0aW9uKGUsdCk7ZWxzZXtpZighcWYuaXNSYW5nZSh0KSl0aHJvdyBuZXcgRXJyb3IoXCJXaGVuIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBhbmQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGlzIGBudWxsYCB5b3UgbXVzdCBwcm92aWRlIGF0IGxlYXN0IGFuIGBhbmNob3JgIGFuZCBgZm9jdXNgLCBidXQgeW91IHBhc3NlZDogXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KHQpKSk7ZS5hcHBseSh7dHlwZTpcInNldF9zZWxlY3Rpb25cIixwcm9wZXJ0aWVzOm4sbmV3UHJvcGVydGllczp0fSl9fSxzZXRQb2ludChlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSx7c2VsZWN0aW9uOnJ9PWUse2VkZ2U6bz1cImJvdGhcIn09bjtpZihyKXtcInN0YXJ0XCI9PT1vJiYobz1xZi5pc0JhY2t3YXJkKHIpP1wiZm9jdXNcIjpcImFuY2hvclwiKSxcImVuZFwiPT09byYmKG89cWYuaXNCYWNrd2FyZChyKT9cImFuY2hvclwiOlwiZm9jdXNcIik7dmFye2FuY2hvcjppLGZvY3VzOmF9PXIsdT1cImFuY2hvclwiPT09bz9pOmE7bWQuc2V0U2VsZWN0aW9uKGUse1tcImFuY2hvclwiPT09bz9cImFuY2hvclwiOlwiZm9jdXNcIl06cGQocGQoe30sdSksdCl9KX19LHNldFNlbGVjdGlvbihlLHQpe3ZhcntzZWxlY3Rpb246bn09ZSxyPXt9LG89e307aWYobil7Zm9yKHZhciBpIGluIHQpKFwiYW5jaG9yXCI9PT1pJiZudWxsIT10LmFuY2hvciYmIVZmLmVxdWFscyh0LmFuY2hvcixuLmFuY2hvcil8fFwiZm9jdXNcIj09PWkmJm51bGwhPXQuZm9jdXMmJiFWZi5lcXVhbHModC5mb2N1cyxuLmZvY3VzKXx8XCJhbmNob3JcIiE9PWkmJlwiZm9jdXNcIiE9PWkmJnRbaV0hPT1uW2ldKSYmKHJbaV09bltpXSxvW2ldPXRbaV0pO09iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZlLmFwcGx5KHt0eXBlOlwic2V0X3NlbGVjdGlvblwiLHByb3BlcnRpZXM6cixuZXdQcm9wZXJ0aWVzOm99KX19fSxnZD17ZGVsZXRlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtCZi53aXRob3V0Tm9ybWFsaXppbmcoZSwoKCk9Pnt2YXJ7cmV2ZXJzZTpuPSExLHVuaXQ6cj1cImNoYXJhY3RlclwiLGRpc3RhbmNlOm89MSx2b2lkczppPSExfT10LHthdDphPWUuc2VsZWN0aW9uLGhhbmdpbmc6dT0hMX09dDtpZihhKXtpZihxZi5pc1JhbmdlKGEpJiZxZi5pc0NvbGxhcHNlZChhKSYmKGE9YS5hbmNob3IpLFZmLmlzUG9pbnQoYSkpe3ZhciBzPUJmLnZvaWQoZSx7YXQ6YSxtb2RlOlwiaGlnaGVzdFwifSk7aWYoIWkmJnMpe3ZhclssbF09czthPWx9ZWxzZXt2YXIgYz17dW5pdDpyLGRpc3RhbmNlOm99O2E9e2FuY2hvcjphLGZvY3VzOm4/QmYuYmVmb3JlKGUsYSxjKXx8QmYuc3RhcnQoZSxbXSk6QmYuYWZ0ZXIoZSxhLGMpfHxCZi5lbmQoZSxbXSl9LHU9ITB9fWlmKE1mLmlzUGF0aChhKSltZC5yZW1vdmVOb2RlcyhlLHthdDphLHZvaWRzOml9KTtlbHNlIGlmKCFxZi5pc0NvbGxhcHNlZChhKSl7aWYoIXUpe3ZhclssZl09cWYuZWRnZXMoYSksZD1CZi5lbmQoZSxbXSk7VmYuZXF1YWxzKGYsZCl8fChhPUJmLnVuaGFuZ1JhbmdlKGUsYSx7dm9pZHM6aX0pKX12YXJbcCxoXT1xZi5lZGdlcyhhKSxnPUJmLmFib3ZlKGUse21hdGNoOnQ9PkJmLmlzQmxvY2soZSx0KSxhdDpwLHZvaWRzOml9KSx2PUJmLmFib3ZlKGUse21hdGNoOnQ9PkJmLmlzQmxvY2soZSx0KSxhdDpoLHZvaWRzOml9KSx5PWcmJnYmJiFNZi5lcXVhbHMoZ1sxXSx2WzFdKSxtPU1mLmVxdWFscyhwLnBhdGgsaC5wYXRoKSxiPWk/bnVsbDpCZi52b2lkKGUse2F0OnAsbW9kZTpcImhpZ2hlc3RcIn0pLHc9aT9udWxsOkJmLnZvaWQoZSx7YXQ6aCxtb2RlOlwiaGlnaGVzdFwifSk7aWYoYil7dmFyIEU9QmYuYmVmb3JlKGUscCk7RSYmZyYmTWYuaXNBbmNlc3RvcihnWzFdLEUucGF0aCkmJihwPUUpfWlmKHcpe3ZhciBEPUJmLmFmdGVyKGUsaCk7RCYmdiYmTWYuaXNBbmNlc3Rvcih2WzFdLEQucGF0aCkmJihoPUQpfXZhciBTLHg9W107Zm9yKHZhciBDIG9mIEJmLm5vZGVzKGUse2F0OmEsdm9pZHM6aX0pKXt2YXJbQSxPXT1DO1MmJjA9PT1NZi5jb21wYXJlKE8sUyl8fCghaSYmQmYuaXNWb2lkKGUsQSl8fCFNZi5pc0NvbW1vbihPLHAucGF0aCkmJiFNZi5pc0NvbW1vbihPLGgucGF0aCkpJiYoeC5wdXNoKEMpLFM9Tyl9dmFyIGs9QXJyYXkuZnJvbSh4LCh0PT57dmFyWyxuXT10O3JldHVybiBCZi5wYXRoUmVmKGUsbil9KSksQj1CZi5wb2ludFJlZihlLHApLEY9QmYucG9pbnRSZWYoZSxoKTtpZighbSYmIWIpe3ZhciBUPUIuY3VycmVudCxbX109QmYubGVhZihlLFQpLHtwYXRoOlB9PVQse29mZnNldDpqfT1wLE49Xy50ZXh0LnNsaWNlKGopO04ubGVuZ3RoPjAmJmUuYXBwbHkoe3R5cGU6XCJyZW1vdmVfdGV4dFwiLHBhdGg6UCxvZmZzZXQ6aix0ZXh0Ok59KX1mb3IodmFyIEkgb2Ygayl7dmFyIEw9SS51bnJlZigpO21kLnJlbW92ZU5vZGVzKGUse2F0Okwsdm9pZHM6aX0pfWlmKCF3KXt2YXIgUj1GLmN1cnJlbnQsW01dPUJmLmxlYWYoZSxSKSx7cGF0aDp6fT1SLCQ9bT9wLm9mZnNldDowLEg9TS50ZXh0LnNsaWNlKCQsaC5vZmZzZXQpO0gubGVuZ3RoPjAmJmUuYXBwbHkoe3R5cGU6XCJyZW1vdmVfdGV4dFwiLHBhdGg6eixvZmZzZXQ6JCx0ZXh0Okh9KX0hbSYmeSYmRi5jdXJyZW50JiZCLmN1cnJlbnQmJm1kLm1lcmdlTm9kZXMoZSx7YXQ6Ri5jdXJyZW50LGhhbmdpbmc6ITAsdm9pZHM6aX0pO3ZhciBWPW4/Qi51bnJlZigpfHxGLnVucmVmKCk6Ri51bnJlZigpfHxCLnVucmVmKCk7bnVsbD09dC5hdCYmViYmbWQuc2VsZWN0KGUsVil9fX0pKX0saW5zZXJ0RnJhZ21lbnQoZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307QmYud2l0aG91dE5vcm1hbGl6aW5nKGUsKCgpPT57dmFye2hhbmdpbmc6cj0hMSx2b2lkczpvPSExfT1uLHthdDppPWUuc2VsZWN0aW9ufT1uO2lmKHQubGVuZ3RoJiZpKXtpZihxZi5pc1JhbmdlKGkpKWlmKHJ8fChpPUJmLnVuaGFuZ1JhbmdlKGUsaSkpLHFmLmlzQ29sbGFwc2VkKGkpKWk9aS5hbmNob3I7ZWxzZXt2YXJbLGFdPXFmLmVkZ2VzKGkpO2lmKCFvJiZCZi52b2lkKGUse2F0OmF9KSlyZXR1cm47dmFyIHU9QmYucG9pbnRSZWYoZSxhKTttZC5kZWxldGUoZSx7YXQ6aX0pLGk9dS51bnJlZigpfWVsc2UgTWYuaXNQYXRoKGkpJiYoaT1CZi5zdGFydChlLGkpKTtpZihvfHwhQmYudm9pZChlLHthdDppfSkpe3ZhciBzPUJmLmFib3ZlKGUse2F0OmksbWF0Y2g6dD0+QmYuaXNJbmxpbmUoZSx0KSxtb2RlOlwiaGlnaGVzdFwiLHZvaWRzOm99KTtpZihzKXt2YXJbLGxdPXM7aWYoQmYuaXNFbmQoZSxpLGwpKWk9QmYuYWZ0ZXIoZSxsKTtlbHNlIGlmKEJmLmlzU3RhcnQoZSxpLGwpKXtpPUJmLmJlZm9yZShlLGwpfX12YXIgYz1CZi5hYm92ZShlLHttYXRjaDp0PT5CZi5pc0Jsb2NrKGUsdCksYXQ6aSx2b2lkczpvfSksWyxmXT1jLGQ9QmYuaXNTdGFydChlLGksZikscD1CZi5pc0VuZChlLGksZiksaD1kJiZwLGc9IWR8fGQmJnAsdj0hcCxbLHldPU5mLmZpcnN0KHtjaGlsZHJlbjp0fSxbXSksWyxtXT1OZi5sYXN0KHtjaGlsZHJlbjp0fSxbXSksYj1bXSx3PXQ9Pnt2YXJbbixyXT10O3JldHVybiEoMD09PXIubGVuZ3RoKSYmKCEhaHx8IShnJiZNZi5pc0FuY2VzdG9yKHIseSkmJlNmLmlzRWxlbWVudChuKSYmIWUuaXNWb2lkKG4pJiYhZS5pc0lubGluZShuKSkmJiEodiYmTWYuaXNBbmNlc3RvcihyLG0pJiZTZi5pc0VsZW1lbnQobikmJiFlLmlzVm9pZChuKSYmIWUuaXNJbmxpbmUobikpKX07Zm9yKHZhciBFIG9mIE5mLm5vZGVzKHtjaGlsZHJlbjp0fSx7cGFzczp3fSkpdyhFKSYmYi5wdXNoKEUpO3ZhciBEPVtdLFM9W10seD1bXSxDPSEwLEE9ITE7Zm9yKHZhcltPXW9mIGIpU2YuaXNFbGVtZW50KE8pJiYhZS5pc0lubGluZShPKT8oQz0hMSxBPSEwLFMucHVzaChPKSk6Qz9ELnB1c2goTyk6eC5wdXNoKE8pO3ZhcltrXT1CZi5ub2RlcyhlLHthdDppLG1hdGNoOnQ9PmVkLmlzVGV4dCh0KXx8QmYuaXNJbmxpbmUoZSx0KSxtb2RlOlwiaGlnaGVzdFwiLHZvaWRzOm99KSxbLEJdPWssRj1CZi5pc1N0YXJ0KGUsaSxCKSxUPUJmLmlzRW5kKGUsaSxCKSxfPUJmLnBhdGhSZWYoZSxwP01mLm5leHQoZik6ZiksUD1CZi5wYXRoUmVmKGUsVD9NZi5uZXh0KEIpOkIpLGo9QmYucGF0aFJlZihlLGYpO21kLnNwbGl0Tm9kZXMoZSx7YXQ6aSxtYXRjaDp0PT5BP0JmLmlzQmxvY2soZSx0KTplZC5pc1RleHQodCl8fEJmLmlzSW5saW5lKGUsdCksbW9kZTpBP1wibG93ZXN0XCI6XCJoaWdoZXN0XCIsdm9pZHM6b30pO3ZhciBOPUJmLnBhdGhSZWYoZSwhRnx8RiYmVD9NZi5uZXh0KEIpOkIpO2lmKG1kLmluc2VydE5vZGVzKGUsRCx7YXQ6Ti5jdXJyZW50LG1hdGNoOnQ9PmVkLmlzVGV4dCh0KXx8QmYuaXNJbmxpbmUoZSx0KSxtb2RlOlwiaGlnaGVzdFwiLHZvaWRzOm99KSxoJiZTLmxlbmd0aCYmbWQuZGVsZXRlKGUse2F0OmoudW5yZWYoKSx2b2lkczpvfSksbWQuaW5zZXJ0Tm9kZXMoZSxTLHthdDpfLmN1cnJlbnQsbWF0Y2g6dD0+QmYuaXNCbG9jayhlLHQpLG1vZGU6XCJsb3dlc3RcIix2b2lkczpvfSksbWQuaW5zZXJ0Tm9kZXMoZSx4LHthdDpQLmN1cnJlbnQsbWF0Y2g6dD0+ZWQuaXNUZXh0KHQpfHxCZi5pc0lubGluZShlLHQpLG1vZGU6XCJoaWdoZXN0XCIsdm9pZHM6b30pLCFuLmF0KXt2YXIgSTtJPXgubGVuZ3RoPjA/TWYucHJldmlvdXMoUC5jdXJyZW50KTpTLmxlbmd0aD4wP01mLnByZXZpb3VzKF8uY3VycmVudCk6TWYucHJldmlvdXMoTi5jdXJyZW50KTt2YXIgTD1CZi5lbmQoZSxJKTttZC5zZWxlY3QoZSxMKX1OLnVucmVmKCksXy51bnJlZigpLFAudW5yZWYoKX19fSkpfSxpbnNlcnRUZXh0KGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O0JmLndpdGhvdXROb3JtYWxpemluZyhlLCgoKT0+e3Zhcnt2b2lkczpyPSExfT1uLHthdDpvPWUuc2VsZWN0aW9ufT1uO2lmKG8pe2lmKE1mLmlzUGF0aChvKSYmKG89QmYucmFuZ2UoZSxvKSkscWYuaXNSYW5nZShvKSlpZihxZi5pc0NvbGxhcHNlZChvKSlvPW8uYW5jaG9yO2Vsc2V7dmFyIGk9cWYuZW5kKG8pO2lmKCFyJiZCZi52b2lkKGUse2F0Oml9KSlyZXR1cm47dmFyIGE9QmYucG9pbnRSZWYoZSxpKTttZC5kZWxldGUoZSx7YXQ6byx2b2lkczpyfSksbz1hLnVucmVmKCksbWQuc2V0U2VsZWN0aW9uKGUse2FuY2hvcjpvLGZvY3VzOm99KX1pZihyfHwhQmYudm9pZChlLHthdDpvfSkpe3ZhcntwYXRoOnUsb2Zmc2V0OnN9PW87dC5sZW5ndGg+MCYmZS5hcHBseSh7dHlwZTpcImluc2VydF90ZXh0XCIscGF0aDp1LG9mZnNldDpzLHRleHQ6dH0pfX19KSl9fTtmdW5jdGlvbiB2ZChlLHQpe3ZhciBuPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24geWQoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/dmQoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtJYyhlLHQsblt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6dmQoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSl9cmV0dXJuIGV9dmFyIG1kPXlkKHlkKHlkKHlkKHt9LHJkKSxzZCksaGQpLGdkKSxiZD1cIltvYmplY3QgTWFwXVwiLHdkPVwiW29iamVjdCBTZXRdXCIsRWQ9L15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLyxEZD0vXig/OjB8WzEtOV1cXGQqKSQvLFNkPVwiW1xcXFx1ZDgwMC1cXFxcdWRmZmZdXCIseGQ9XCJbXFxcXHUwMzAwLVxcXFx1MDM2ZlxcXFx1ZmUyMC1cXFxcdWZlMjNcXFxcdTIwZDAtXFxcXHUyMGYwXVwiLENkPVwiXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdXCIsQWQ9XCJbXlxcXFx1ZDgwMC1cXFxcdWRmZmZdXCIsT2Q9XCIoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9XCIsa2Q9XCJbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl1cIixCZD1cIig/OlwiK3hkK1wifFwiK0NkK1wiKVwiK1wiP1wiLEZkPVwiW1xcXFx1ZmUwZVxcXFx1ZmUwZl0/XCIrQmQrKFwiKD86XFxcXHUyMDBkKD86XCIrW0FkLE9kLGtkXS5qb2luKFwifFwiKStcIilbXFxcXHVmZTBlXFxcXHVmZTBmXT9cIitCZCtcIikqXCIpLFRkPVwiKD86XCIrW0FkK3hkK1wiP1wiLHhkLE9kLGtkLFNkXS5qb2luKFwifFwiKStcIilcIixfZD1SZWdFeHAoQ2QrXCIoPz1cIitDZCtcIil8XCIrVGQrRmQsXCJnXCIpLFBkPVJlZ0V4cChcIltcXFxcdTIwMGRcXFxcdWQ4MDAtXFxcXHVkZmZmXFxcXHUwMzAwLVxcXFx1MDM2ZlxcXFx1ZmUyMC1cXFxcdWZlMjNcXFxcdTIwZDAtXFxcXHUyMGYwXFxcXHVmZTBlXFxcXHVmZTBmXVwiKSxqZD1cIm9iamVjdFwiPT10eXBlb2YgZSYmZSYmZS5PYmplY3Q9PT1PYmplY3QmJmUsTmQ9XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLElkPWpkfHxOZHx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO2Z1bmN0aW9uIExkKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPS0xLHI9ZT9lLmxlbmd0aDowLG89QXJyYXkocik7KytuPHI7KW9bbl09dChlW25dLG4sZSk7cmV0dXJuIG99KHQsKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpfWZ1bmN0aW9uIFJkKGUpe3ZhciB0PS0xLG49QXJyYXkoZS5zaXplKTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe25bKyt0XT1bcixlXX0pKSxufWZ1bmN0aW9uIE1kKGUpe3ZhciB0PS0xLG49QXJyYXkoZS5zaXplKTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtuWysrdF09ZX0pKSxufWZ1bmN0aW9uIHpkKGUpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUGQudGVzdChlKX0oZSk/ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2goX2QpfHxbXX0oZSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoXCJcIil9KGUpfXZhciAkZCxIZCxWZD1GdW5jdGlvbi5wcm90b3R5cGUsVWQ9T2JqZWN0LnByb3RvdHlwZSxXZD1JZFtcIl9fY29yZS1qc19zaGFyZWRfX1wiXSxHZD1mdW5jdGlvbigpe3ZhciBlPS9bXi5dKyQvLmV4ZWMoV2QmJldkLmtleXMmJldkLmtleXMuSUVfUFJPVE98fFwiXCIpO3JldHVybiBlP1wiU3ltYm9sKHNyYylfMS5cIitlOlwiXCJ9KCkscWQ9VmQudG9TdHJpbmcsS2Q9VWQuaGFzT3duUHJvcGVydHksWWQ9VWQudG9TdHJpbmcsWGQ9UmVnRXhwKFwiXlwiK3FkLmNhbGwoS2QpLnJlcGxhY2UoL1tcXFxcXiQuKis/KClbXFxde318XS9nLFwiXFxcXCQmXCIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csXCIkMS4qP1wiKStcIiRcIiksWmQ9SWQuU3ltYm9sLEpkPVpkP1pkLml0ZXJhdG9yOnZvaWQgMCxRZD1VZC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxlcD0oJGQ9T2JqZWN0LmtleXMsSGQ9T2JqZWN0LGZ1bmN0aW9uKGUpe3JldHVybiAkZChIZChlKSl9KSx0cD1ocChJZCxcIkRhdGFWaWV3XCIpLG5wPWhwKElkLFwiTWFwXCIpLHJwPWhwKElkLFwiUHJvbWlzZVwiKSxvcD1ocChJZCxcIlNldFwiKSxpcD1ocChJZCxcIldlYWtNYXBcIiksYXA9eXAodHApLHVwPXlwKG5wKSxzcD15cChycCksbHA9eXAob3ApLGNwPXlwKGlwKTtmdW5jdGlvbiBmcChlLHQpe3ZhciBuPW1wKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIERwKGUpJiZicChlKX0oZSkmJktkLmNhbGwoZSxcImNhbGxlZVwiKSYmKCFRZC5jYWxsKGUsXCJjYWxsZWVcIil8fFwiW29iamVjdCBBcmd1bWVudHNdXCI9PVlkLmNhbGwoZSkpfShlKT9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0tMSxyPUFycmF5KGUpOysrbjxlOylyW25dPXQobik7cmV0dXJuIHJ9KGUubGVuZ3RoLFN0cmluZyk6W10scj1uLmxlbmd0aCxvPSEhcjtmb3IodmFyIGkgaW4gZSkhdCYmIUtkLmNhbGwoZSxpKXx8byYmKFwibGVuZ3RoXCI9PWl8fHZwKGkscikpfHxuLnB1c2goaSk7cmV0dXJuIG59ZnVuY3Rpb24gZHAoZSl7aWYoIUVwKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4hIUdkJiZHZCBpbiBlfShlKSlyZXR1cm4hMTt2YXIgdD13cChlKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9ITE7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZS50b1N0cmluZyl0cnl7dD0hIShlK1wiXCIpfWNhdGNoKGUpe31yZXR1cm4gdH0oZSk/WGQ6RWQ7cmV0dXJuIHQudGVzdCh5cChlKSl9ZnVuY3Rpb24gcHAoZSl7aWYobj0odD1lKSYmdC5jb25zdHJ1Y3RvcixyPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJm4ucHJvdG90eXBlfHxVZCx0IT09cilyZXR1cm4gZXAoZSk7dmFyIHQsbixyLG89W107Zm9yKHZhciBpIGluIE9iamVjdChlKSlLZC5jYWxsKGUsaSkmJlwiY29uc3RydWN0b3JcIiE9aSYmby5wdXNoKGkpO3JldHVybiBvfWZ1bmN0aW9uIGhwKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZVt0XX0oZSx0KTtyZXR1cm4gZHAobik/bjp2b2lkIDB9dmFyIGdwPWZ1bmN0aW9uKGUpe3JldHVybiBZZC5jYWxsKGUpfTtmdW5jdGlvbiB2cChlLHQpe3JldHVybiEhKHQ9bnVsbD09dD85MDA3MTk5MjU0NzQwOTkxOnQpJiYoXCJudW1iZXJcIj09dHlwZW9mIGV8fERkLnRlc3QoZSkpJiZlPi0xJiZlJTE9PTAmJmU8dH1mdW5jdGlvbiB5cChlKXtpZihudWxsIT1lKXt0cnl7cmV0dXJuIHFkLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZStcIlwifWNhdGNoKGUpe319cmV0dXJuXCJcIn0odHAmJlwiW29iamVjdCBEYXRhVmlld11cIiE9Z3AobmV3IHRwKG5ldyBBcnJheUJ1ZmZlcigxKSkpfHxucCYmZ3AobmV3IG5wKSE9YmR8fHJwJiZcIltvYmplY3QgUHJvbWlzZV1cIiE9Z3AocnAucmVzb2x2ZSgpKXx8b3AmJmdwKG5ldyBvcCkhPXdkfHxpcCYmXCJbb2JqZWN0IFdlYWtNYXBdXCIhPWdwKG5ldyBpcCkpJiYoZ3A9ZnVuY3Rpb24oZSl7dmFyIHQ9WWQuY2FsbChlKSxuPVwiW29iamVjdCBPYmplY3RdXCI9PXQ/ZS5jb25zdHJ1Y3Rvcjp2b2lkIDAscj1uP3lwKG4pOnZvaWQgMDtpZihyKXN3aXRjaChyKXtjYXNlIGFwOnJldHVyblwiW29iamVjdCBEYXRhVmlld11cIjtjYXNlIHVwOnJldHVybiBiZDtjYXNlIHNwOnJldHVyblwiW29iamVjdCBQcm9taXNlXVwiO2Nhc2UgbHA6cmV0dXJuIHdkO2Nhc2UgY3A6cmV0dXJuXCJbb2JqZWN0IFdlYWtNYXBdXCJ9cmV0dXJuIHR9KTt2YXIgbXA9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBicChlKXtyZXR1cm4gbnVsbCE9ZSYmZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+LTEmJmUlMT09MCYmZTw9OTAwNzE5OTI1NDc0MDk5MX0oZS5sZW5ndGgpJiYhd3AoZSl9ZnVuY3Rpb24gd3AoZSl7dmFyIHQ9RXAoZSk/WWQuY2FsbChlKTpcIlwiO3JldHVyblwiW29iamVjdCBGdW5jdGlvbl1cIj09dHx8XCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXVwiPT10fWZ1bmN0aW9uIEVwKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9ZnVuY3Rpb24gRHAoZSl7cmV0dXJuISFlJiZcIm9iamVjdFwiPT10eXBlb2YgZX1mdW5jdGlvbiBTcChlKXtyZXR1cm4gZT9MZChlLGZ1bmN0aW9uKGUpe3JldHVybiBicChlKT9mcChlKTpwcChlKX0oZSkpOltdfXZhciB4cD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm5bXTtpZihicChlKSlyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fCFtcChlKSYmRHAoZSkmJlwiW29iamVjdCBTdHJpbmddXCI9PVlkLmNhbGwoZSl9KGUpP3pkKGUpOmZ1bmN0aW9uKGUsdCl7dmFyIG49LTEscj1lLmxlbmd0aDtmb3IodHx8KHQ9QXJyYXkocikpOysrbjxyOyl0W25dPWVbbl07cmV0dXJuIHR9KGUpO2lmKEpkJiZlW0pkXSlyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49W107ISh0PWUubmV4dCgpKS5kb25lOyluLnB1c2godC52YWx1ZSk7cmV0dXJuIG59KGVbSmRdKCkpO3ZhciB0PWdwKGUpO3JldHVybih0PT1iZD9SZDp0PT13ZD9NZDpTcCkoZSl9O2Z1bmN0aW9uIENwKGUpe3JldHVybiBudWxsIT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiY29uc3RydWN0b3JcImluIGUmJmUuY29uc3RydWN0b3I9PT1PYmplY3R9ZnVuY3Rpb24gQXAoZSx0KXt2b2lkIDA9PT1lJiYoZT17fSksdm9pZCAwPT09dCYmKHQ9e30pLE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZvaWQgMD09PWVbbl0/ZVtuXT10W25dOkNwKHRbbl0pJiZDcChlW25dKSYmT2JqZWN0LmtleXModFtuXSkubGVuZ3RoPjAmJkFwKGVbbl0sdFtuXSl9KSl9dmFyIE9wPXtib2R5Ont9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oKXt9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oKXt9LGFjdGl2ZUVsZW1lbnQ6e2JsdXI6ZnVuY3Rpb24oKXt9LG5vZGVOYW1lOlwiXCJ9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbigpe3JldHVybltdfSxnZXRFbGVtZW50QnlJZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxjcmVhdGVFdmVudDpmdW5jdGlvbigpe3JldHVybntpbml0RXZlbnQ6ZnVuY3Rpb24oKXt9fX0sY3JlYXRlRWxlbWVudDpmdW5jdGlvbigpe3JldHVybntjaGlsZHJlbjpbXSxjaGlsZE5vZGVzOltdLHN0eWxlOnt9LHNldEF0dHJpYnV0ZTpmdW5jdGlvbigpe30sZ2V0RWxlbWVudHNCeVRhZ05hbWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxjcmVhdGVFbGVtZW50TlM6ZnVuY3Rpb24oKXtyZXR1cm57fX0saW1wb3J0Tm9kZTpmdW5jdGlvbigpe3JldHVybiBudWxsfSxsb2NhdGlvbjp7aGFzaDpcIlwiLGhvc3Q6XCJcIixob3N0bmFtZTpcIlwiLGhyZWY6XCJcIixvcmlnaW46XCJcIixwYXRobmFtZTpcIlwiLHByb3RvY29sOlwiXCIsc2VhcmNoOlwiXCJ9fTtmdW5jdGlvbiBrcCgpe3ZhciBlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudDp7fTtyZXR1cm4gQXAoZSxPcCksZX12YXIgQnA9e2RvY3VtZW50Ok9wLG5hdmlnYXRvcjp7dXNlckFnZW50OlwiXCJ9LGxvY2F0aW9uOntoYXNoOlwiXCIsaG9zdDpcIlwiLGhvc3RuYW1lOlwiXCIsaHJlZjpcIlwiLG9yaWdpbjpcIlwiLHBhdGhuYW1lOlwiXCIscHJvdG9jb2w6XCJcIixzZWFyY2g6XCJcIn0saGlzdG9yeTp7cmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxwdXNoU3RhdGU6ZnVuY3Rpb24oKXt9LGdvOmZ1bmN0aW9uKCl7fSxiYWNrOmZ1bmN0aW9uKCl7fX0sQ3VzdG9tRXZlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbigpe30scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbigpe30sZ2V0Q29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe3JldHVybntnZXRQcm9wZXJ0eVZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuXCJcIn19fSxJbWFnZTpmdW5jdGlvbigpe30sRGF0ZTpmdW5jdGlvbigpe30sc2NyZWVuOnt9LHNldFRpbWVvdXQ6ZnVuY3Rpb24oKXt9LGNsZWFyVGltZW91dDpmdW5jdGlvbigpe30sbWF0Y2hNZWRpYTpmdW5jdGlvbigpe3JldHVybnt9fSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWU6ZnVuY3Rpb24oZSl7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIHNldFRpbWVvdXQ/KGUoKSxudWxsKTpzZXRUaW1lb3V0KGUsMCl9LGNhbmNlbEFuaW1hdGlvbkZyYW1lOmZ1bmN0aW9uKGUpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBzZXRUaW1lb3V0JiZjbGVhclRpbWVvdXQoZSl9fTtmdW5jdGlvbiBGcCgpe3ZhciBlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9O3JldHVybiBBcChlLEJwKSxlfWZ1bmN0aW9uIFRwKGUpe3JldHVybiBUcD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxUcChlKX1mdW5jdGlvbiBfcChlLHQpe3JldHVybiBfcD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sX3AoZSx0KX1mdW5jdGlvbiBQcCgpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSxbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBqcChlLHQsbil7cmV0dXJuIGpwPVBwKCk/UmVmbGVjdC5jb25zdHJ1Y3Q6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtudWxsXTtyLnB1c2guYXBwbHkocix0KTt2YXIgbz1uZXcoRnVuY3Rpb24uYmluZC5hcHBseShlLHIpKTtyZXR1cm4gbiYmX3AobyxuLnByb3RvdHlwZSksb30sanAuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIE5wKGUpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIE1hcD9uZXcgTWFwOnZvaWQgMDtyZXR1cm4gTnA9ZnVuY3Rpb24oZSl7aWYobnVsbD09PWV8fCFmdW5jdGlvbihlKXtyZXR1cm4tMSE9PUZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZSkuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIil9KGUpKXJldHVybiBlO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO2lmKHZvaWQgMCE9PXQpe2lmKHQuaGFzKGUpKXJldHVybiB0LmdldChlKTt0LnNldChlLG4pfWZ1bmN0aW9uIG4oKXtyZXR1cm4ganAoZSxhcmd1bWVudHMsVHAodGhpcykuY29uc3RydWN0b3IpfXJldHVybiBuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxfcChuLGUpfSxOcChlKX12YXIgSXA9ZnVuY3Rpb24oZSl7dmFyIHQsbjtmdW5jdGlvbiByKHQpe3ZhciBuLHIsbztyZXR1cm4gbj1lLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KHQpKXx8dGhpcyxyPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfShuKSxvPXIuX19wcm90b19fLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19wcm90b19fXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBvfSxzZXQ6ZnVuY3Rpb24oZSl7by5fX3Byb3RvX189ZX19KSxufXJldHVybiBuPWUsKHQ9cikucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5fX3Byb3RvX189bixyfShOcChBcnJheSkpO2Z1bmN0aW9uIExwKGUpe3ZvaWQgMD09PWUmJihlPVtdKTt2YXIgdD1bXTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtBcnJheS5pc0FycmF5KGUpP3QucHVzaC5hcHBseSh0LExwKGUpKTp0LnB1c2goZSl9KSksdH1mdW5jdGlvbiBScChlLHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoZSx0KX1mdW5jdGlvbiBNcChlLHQpe3ZhciBuPUZwKCkscj1rcCgpLG89W107aWYoIXQmJmUgaW5zdGFuY2VvZiBJcClyZXR1cm4gZTtpZighZSlyZXR1cm4gbmV3IElwKG8pO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXt2YXIgaT1lLnRyaW0oKTtpZihpLmluZGV4T2YoXCI8XCIpPj0wJiZpLmluZGV4T2YoXCI+XCIpPj0wKXt2YXIgYT1cImRpdlwiOzA9PT1pLmluZGV4T2YoXCI8bGlcIikmJihhPVwidWxcIiksMD09PWkuaW5kZXhPZihcIjx0clwiKSYmKGE9XCJ0Ym9keVwiKSwwIT09aS5pbmRleE9mKFwiPHRkXCIpJiYwIT09aS5pbmRleE9mKFwiPHRoXCIpfHwoYT1cInRyXCIpLDA9PT1pLmluZGV4T2YoXCI8dGJvZHlcIikmJihhPVwidGFibGVcIiksMD09PWkuaW5kZXhPZihcIjxvcHRpb25cIikmJihhPVwic2VsZWN0XCIpO3ZhciB1PXIuY3JlYXRlRWxlbWVudChhKTt1LmlubmVySFRNTD1pO2Zvcih2YXIgcz0wO3M8dS5jaGlsZE5vZGVzLmxlbmd0aDtzKz0xKW8ucHVzaCh1LmNoaWxkTm9kZXNbc10pfWVsc2Ugbz1mdW5jdGlvbihlLHQpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybltlXTtmb3IodmFyIG49W10scj10LnF1ZXJ5U2VsZWN0b3JBbGwoZSksbz0wO288ci5sZW5ndGg7bys9MSluLnB1c2gocltvXSk7cmV0dXJuIG59KGUudHJpbSgpLHR8fHIpfWVsc2UgaWYoZS5ub2RlVHlwZXx8ZT09PW58fGU9PT1yKW8ucHVzaChlKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe2lmKGUgaW5zdGFuY2VvZiBJcClyZXR1cm4gZTtvPWV9cmV0dXJuIG5ldyBJcChmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bis9MSktMT09PXQuaW5kZXhPZihlW25dKSYmdC5wdXNoKGVbbl0pO3JldHVybiB0fShvKSl9ZnVuY3Rpb24genAoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTt2YXIgcj1McCh0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoXCIgXCIpfSkpKTtyZXR1cm4gdGhpcy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdDsodD1lLmNsYXNzTGlzdCkuYWRkLmFwcGx5KHQscil9KSksdGhpc31mdW5jdGlvbiAkcCgpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3ZhciByPUxwKHQubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChcIiBcIil9KSkpO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0Oyh0PWUuY2xhc3NMaXN0KS5yZW1vdmUuYXBwbHkodCxyKX0pKSx0aGlzfWZ1bmN0aW9uIEhwKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07dmFyIHI9THAodC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KFwiIFwiKX0pKSk7cmV0dXJuIFJwKHRoaXMsKGZ1bmN0aW9uKGUpe3JldHVybiByLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIGUuY2xhc3NMaXN0LmNvbnRhaW5zKHQpfSkpLmxlbmd0aD4wfSkpLmxlbmd0aD4wfWZ1bmN0aW9uIFZwKGUsdCl7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgmJlwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiB0aGlzWzBdP3RoaXNbMF0uZ2V0QXR0cmlidXRlKGUpOnZvaWQgMDtmb3IodmFyIG49MDtuPHRoaXMubGVuZ3RoO24rPTEpaWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpdGhpc1tuXS5zZXRBdHRyaWJ1dGUoZSx0KTtlbHNlIGZvcih2YXIgciBpbiBlKXRoaXNbbl1bcl09ZVtyXSx0aGlzW25dLnNldEF0dHJpYnV0ZShyLGVbcl0pO3JldHVybiB0aGlzfWZ1bmN0aW9uIFVwKGUpe2Zvcih2YXIgdD0wO3Q8dGhpcy5sZW5ndGg7dCs9MSl0aGlzW3RdLnJlbW92ZUF0dHJpYnV0ZShlKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBXcCgpe3ZhciBlPXRoaXNbMF07aWYoZSl7dmFyIHQsbj17fTtpZihlLmRhdGFzZXQpZm9yKHZhciByIGluIGUuZGF0YXNldCluW3JdPWUuZGF0YXNldFtyXTtlbHNlIGZvcih2YXIgbz0wO288ZS5hdHRyaWJ1dGVzLmxlbmd0aDtvKz0xKXt2YXIgaT1lLmF0dHJpYnV0ZXNbb107aS5uYW1lLmluZGV4T2YoXCJkYXRhLVwiKT49MCYmKG5bKHQ9aS5uYW1lLnNwbGl0KFwiZGF0YS1cIilbMV0sdC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLy0oLikvZywoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfSkpKV09aS52YWx1ZSl9Zm9yKHZhciBhIGluIG4pXCJmYWxzZVwiPT09blthXT9uW2FdPSExOlwidHJ1ZVwiPT09blthXT9uW2FdPSEwOnBhcnNlRmxvYXQoblthXSk9PT0xKm5bYV0mJihuW2FdKj0xKTtyZXR1cm4gbn19ZnVuY3Rpb24gR3AoZSl7aWYodm9pZCAwPT09ZSl7dmFyIHQ9dGhpc1swXTtpZighdClyZXR1cm47aWYodC5tdWx0aXBsZSYmXCJzZWxlY3RcIj09PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7Zm9yKHZhciBuPVtdLHI9MDtyPHQuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aDtyKz0xKW4ucHVzaCh0LnNlbGVjdGVkT3B0aW9uc1tyXS52YWx1ZSk7cmV0dXJuIG59cmV0dXJuIHQudmFsdWV9Zm9yKHZhciBvPTA7bzx0aGlzLmxlbmd0aDtvKz0xKXt2YXIgaT10aGlzW29dO2lmKEFycmF5LmlzQXJyYXkoZSkmJmkubXVsdGlwbGUmJlwic2VsZWN0XCI9PT1pLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpZm9yKHZhciBhPTA7YTxpLm9wdGlvbnMubGVuZ3RoO2ErPTEpaS5vcHRpb25zW2FdLnNlbGVjdGVkPWUuaW5kZXhPZihpLm9wdGlvbnNbYV0udmFsdWUpPj0wO2Vsc2UgaS52YWx1ZT1lfXJldHVybiB0aGlzfWZ1bmN0aW9uIHFwKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07dmFyIHI9dFswXSxvPXRbMV0saT10WzJdLGE9dFszXTtmdW5jdGlvbiB1KGUpe3ZhciB0PWUudGFyZ2V0O2lmKHQpe3ZhciBuPWUudGFyZ2V0LmRvbTdFdmVudERhdGF8fFtdO2lmKG4uaW5kZXhPZihlKTwwJiZuLnVuc2hpZnQoZSksTXAodCkuaXMobykpaS5hcHBseSh0LG4pO2Vsc2UgZm9yKHZhciByPU1wKHQpLnBhcmVudHMoKSxhPTA7YTxyLmxlbmd0aDthKz0xKU1wKHJbYV0pLmlzKG8pJiZpLmFwcGx5KHJbYV0sbil9fWZ1bmN0aW9uIHMoZSl7dmFyIHQ9ZSYmZS50YXJnZXQmJmUudGFyZ2V0LmRvbTdFdmVudERhdGF8fFtdO3QuaW5kZXhPZihlKTwwJiZ0LnVuc2hpZnQoZSksaS5hcHBseSh0aGlzLHQpfVwiZnVuY3Rpb25cIj09dHlwZW9mIHRbMV0mJihyPXRbMF0saT10WzFdLGE9dFsyXSxvPXZvaWQgMCksYXx8KGE9ITEpO2Zvcih2YXIgbCxjPXIuc3BsaXQoXCIgXCIpLGY9MDtmPHRoaXMubGVuZ3RoO2YrPTEpe3ZhciBkPXRoaXNbZl07aWYobylmb3IobD0wO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHA9Y1tsXTtkLmRvbTdMaXZlTGlzdGVuZXJzfHwoZC5kb203TGl2ZUxpc3RlbmVycz17fSksZC5kb203TGl2ZUxpc3RlbmVyc1twXXx8KGQuZG9tN0xpdmVMaXN0ZW5lcnNbcF09W10pLGQuZG9tN0xpdmVMaXN0ZW5lcnNbcF0ucHVzaCh7bGlzdGVuZXI6aSxwcm94eUxpc3RlbmVyOnV9KSxkLmFkZEV2ZW50TGlzdGVuZXIocCx1LGEpfWVsc2UgZm9yKGw9MDtsPGMubGVuZ3RoO2wrPTEpe3ZhciBoPWNbbF07ZC5kb203TGlzdGVuZXJzfHwoZC5kb203TGlzdGVuZXJzPXt9KSxkLmRvbTdMaXN0ZW5lcnNbaF18fChkLmRvbTdMaXN0ZW5lcnNbaF09W10pLGQuZG9tN0xpc3RlbmVyc1toXS5wdXNoKHtsaXN0ZW5lcjppLHByb3h5TGlzdGVuZXI6c30pLGQuYWRkRXZlbnRMaXN0ZW5lcihoLHMsYSl9fXJldHVybiB0aGlzfWZ1bmN0aW9uIEtwKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07dmFyIHI9dFswXSxvPXRbMV0saT10WzJdLGE9dFszXTtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0WzFdJiYocj10WzBdLGk9dFsxXSxhPXRbMl0sbz12b2lkIDApLGF8fChhPSExKTtmb3IodmFyIHU9ci5zcGxpdChcIiBcIikscz0wO3M8dS5sZW5ndGg7cys9MSlmb3IodmFyIGw9dVtzXSxjPTA7Yzx0aGlzLmxlbmd0aDtjKz0xKXt2YXIgZj10aGlzW2NdLGQ9dm9pZCAwO2lmKCFvJiZmLmRvbTdMaXN0ZW5lcnM/ZD1mLmRvbTdMaXN0ZW5lcnNbbF06byYmZi5kb203TGl2ZUxpc3RlbmVycyYmKGQ9Zi5kb203TGl2ZUxpc3RlbmVyc1tsXSksZCYmZC5sZW5ndGgpZm9yKHZhciBwPWQubGVuZ3RoLTE7cD49MDtwLT0xKXt2YXIgaD1kW3BdO2kmJmgubGlzdGVuZXI9PT1pfHxpJiZoLmxpc3RlbmVyJiZoLmxpc3RlbmVyLmRvbTdwcm94eSYmaC5saXN0ZW5lci5kb203cHJveHk9PT1pPyhmLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxoLnByb3h5TGlzdGVuZXIsYSksZC5zcGxpY2UocCwxKSk6aXx8KGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGgucHJveHlMaXN0ZW5lcixhKSxkLnNwbGljZShwLDEpKX19cmV0dXJuIHRoaXN9ZnVuY3Rpb24gWXAoKXt2YXIgZT1GcCgpO3JldHVybiB0aGlzWzBdPT09ZT9lLmlubmVyV2lkdGg6dGhpcy5sZW5ndGg+MD9wYXJzZUZsb2F0KHRoaXMuY3NzKFwid2lkdGhcIikpOm51bGx9ZnVuY3Rpb24gWHAoKXt2YXIgZT1GcCgpO3JldHVybiB0aGlzWzBdPT09ZT9lLmlubmVySGVpZ2h0OnRoaXMubGVuZ3RoPjA/cGFyc2VGbG9hdCh0aGlzLmNzcyhcImhlaWdodFwiKSk6bnVsbH1mdW5jdGlvbiBacCgpe2lmKHRoaXMubGVuZ3RoPjApe3ZhciBlPUZwKCksdD1rcCgpLG49dGhpc1swXSxyPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz10LmJvZHksaT1uLmNsaWVudFRvcHx8by5jbGllbnRUb3B8fDAsYT1uLmNsaWVudExlZnR8fG8uY2xpZW50TGVmdHx8MCx1PW49PT1lP2Uuc2Nyb2xsWTpuLnNjcm9sbFRvcCxzPW49PT1lP2Uuc2Nyb2xsWDpuLnNjcm9sbExlZnQ7cmV0dXJue3RvcDpyLnRvcCt1LWksbGVmdDpyLmxlZnQrcy1hfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBKcCgpe2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSs9MSl0aGlzW2VdLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gUXAoKXtmb3IodmFyIGU9RnAoKSx0PTA7dDx0aGlzLmxlbmd0aDt0Kz0xKXt2YXIgbj10aGlzW3RdO1wibm9uZVwiPT09bi5zdHlsZS5kaXNwbGF5JiYobi5zdHlsZS5kaXNwbGF5PVwiXCIpLFwibm9uZVwiPT09ZS5nZXRDb21wdXRlZFN0eWxlKG4sbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlcIikmJihuLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiKX1yZXR1cm4gdGhpc31mdW5jdGlvbiBlaChlLHQpe3ZhciBuLHI9RnAoKTtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpe2ZvcihuPTA7bjx0aGlzLmxlbmd0aDtuKz0xKWZvcih2YXIgbyBpbiBlKXRoaXNbbl0uc3R5bGVbb109ZVtvXTtyZXR1cm4gdGhpc31pZih0aGlzWzBdKXJldHVybiByLmdldENvbXB1dGVkU3R5bGUodGhpc1swXSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWlmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiZcInN0cmluZ1wiPT10eXBlb2YgZSl7Zm9yKG49MDtuPHRoaXMubGVuZ3RoO24rPTEpdGhpc1tuXS5zdHlsZVtlXT10O3JldHVybiB0aGlzfXJldHVybiB0aGlzfWZ1bmN0aW9uIHRoKGUpe3JldHVybiBlPyh0aGlzLmZvckVhY2goKGZ1bmN0aW9uKHQsbil7ZS5hcHBseSh0LFt0LG5dKX0pKSx0aGlzKTp0aGlzfWZ1bmN0aW9uIG5oKGUpe3JldHVybiBNcChScCh0aGlzLGUpKX1mdW5jdGlvbiByaChlKXtpZih2b2lkIDA9PT1lKXJldHVybiB0aGlzWzBdP3RoaXNbMF0uaW5uZXJIVE1MOm51bGw7Zm9yKHZhciB0PTA7dDx0aGlzLmxlbmd0aDt0Kz0xKXRoaXNbdF0uaW5uZXJIVE1MPWU7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gb2goZSl7aWYodm9pZCAwPT09ZSlyZXR1cm4gdGhpc1swXT90aGlzWzBdLnRleHRDb250ZW50LnRyaW0oKTpudWxsO2Zvcih2YXIgdD0wO3Q8dGhpcy5sZW5ndGg7dCs9MSl0aGlzW3RdLnRleHRDb250ZW50PWU7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gaWgoZSl7dmFyIHQsbixyPUZwKCksbz1rcCgpLGk9dGhpc1swXTtpZighaXx8dm9pZCAwPT09ZSlyZXR1cm4hMTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoaS5tYXRjaGVzKXJldHVybiBpLm1hdGNoZXMoZSk7aWYoaS53ZWJraXRNYXRjaGVzU2VsZWN0b3IpcmV0dXJuIGkud2Via2l0TWF0Y2hlc1NlbGVjdG9yKGUpO2lmKGkubXNNYXRjaGVzU2VsZWN0b3IpcmV0dXJuIGkubXNNYXRjaGVzU2VsZWN0b3IoZSk7Zm9yKHQ9TXAoZSksbj0wO248dC5sZW5ndGg7bis9MSlpZih0W25dPT09aSlyZXR1cm4hMDtyZXR1cm4hMX1pZihlPT09bylyZXR1cm4gaT09PW87aWYoZT09PXIpcmV0dXJuIGk9PT1yO2lmKGUubm9kZVR5cGV8fGUgaW5zdGFuY2VvZiBJcCl7Zm9yKHQ9ZS5ub2RlVHlwZT9bZV06ZSxuPTA7bjx0Lmxlbmd0aDtuKz0xKWlmKHRbbl09PT1pKXJldHVybiEwO3JldHVybiExfXJldHVybiExfWZ1bmN0aW9uIGFoKCl7Zm9yKHZhciBlLHQ9a3AoKSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rPTEpe2U9bjwwfHxhcmd1bWVudHMubGVuZ3RoPD1uP3ZvaWQgMDphcmd1bWVudHNbbl07Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKz0xKWlmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXt2YXIgbz10LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7Zm9yKG8uaW5uZXJIVE1MPWU7by5maXJzdENoaWxkOyl0aGlzW3JdLmFwcGVuZENoaWxkKG8uZmlyc3RDaGlsZCl9ZWxzZSBpZihlIGluc3RhbmNlb2YgSXApZm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKz0xKXRoaXNbcl0uYXBwZW5kQ2hpbGQoZVtpXSk7ZWxzZSB0aGlzW3JdLmFwcGVuZENoaWxkKGUpfXJldHVybiB0aGlzfWZ1bmN0aW9uIHVoKGUpe3ZhciB0LG4scj1rcCgpO2Zvcih0PTA7dDx0aGlzLmxlbmd0aDt0Kz0xKWlmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXt2YXIgbz1yLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7Zm9yKG8uaW5uZXJIVE1MPWUsbj1vLmNoaWxkTm9kZXMubGVuZ3RoLTE7bj49MDtuLT0xKXRoaXNbdF0uaW5zZXJ0QmVmb3JlKG8uY2hpbGROb2Rlc1tuXSx0aGlzW3RdLmNoaWxkTm9kZXNbMF0pfWVsc2UgaWYoZSBpbnN0YW5jZW9mIElwKWZvcihuPTA7bjxlLmxlbmd0aDtuKz0xKXRoaXNbdF0uaW5zZXJ0QmVmb3JlKGVbbl0sdGhpc1t0XS5jaGlsZE5vZGVzWzBdKTtlbHNlIHRoaXNbdF0uaW5zZXJ0QmVmb3JlKGUsdGhpc1t0XS5jaGlsZE5vZGVzWzBdKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBzaChlKXtmb3IodmFyIHQ9W10sbj0wO248dGhpcy5sZW5ndGg7bis9MSludWxsIT09dGhpc1tuXS5wYXJlbnROb2RlJiYoZT9NcCh0aGlzW25dLnBhcmVudE5vZGUpLmlzKGUpJiZ0LnB1c2godGhpc1tuXS5wYXJlbnROb2RlKTp0LnB1c2godGhpc1tuXS5wYXJlbnROb2RlKSk7cmV0dXJuIE1wKHQpfWZ1bmN0aW9uIGxoKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjx0aGlzLmxlbmd0aDtuKz0xKWZvcih2YXIgcj10aGlzW25dLnBhcmVudE5vZGU7cjspZT9NcChyKS5pcyhlKSYmdC5wdXNoKHIpOnQucHVzaChyKSxyPXIucGFyZW50Tm9kZTtyZXR1cm4gTXAodCl9ZnVuY3Rpb24gY2goZSl7Zm9yKHZhciB0PVtdLG49MDtuPHRoaXMubGVuZ3RoO24rPTEpZm9yKHZhciByPXRoaXNbbl0ucXVlcnlTZWxlY3RvckFsbChlKSxvPTA7bzxyLmxlbmd0aDtvKz0xKXQucHVzaChyW29dKTtyZXR1cm4gTXAodCl9ZnVuY3Rpb24gZmgoZSl7Zm9yKHZhciB0PVtdLG49MDtuPHRoaXMubGVuZ3RoO24rPTEpZm9yKHZhciByPXRoaXNbbl0uY2hpbGRyZW4sbz0wO288ci5sZW5ndGg7bys9MSllJiYhTXAocltvXSkuaXMoZSl8fHQucHVzaChyW29dKTtyZXR1cm4gTXAodCl9ZnVuY3Rpb24gZGgoKXtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrPTEpdGhpc1tlXS5wYXJlbnROb2RlJiZ0aGlzW2VdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpc1tlXSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gcGgoKXtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrPTEpe3ZhciB0PXRoaXNbZV07aWYoMT09PXQubm9kZVR5cGUpe2Zvcih2YXIgbj0wO248dC5jaGlsZE5vZGVzLmxlbmd0aDtuKz0xKXQuY2hpbGROb2Rlc1tuXS5wYXJlbnROb2RlJiZ0LmNoaWxkTm9kZXNbbl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0LmNoaWxkTm9kZXNbbl0pO3QudGV4dENvbnRlbnQ9XCJcIn19cmV0dXJuIHRoaXN9TXAuZm49SXAucHJvdG90eXBlO3ZhciBoaD1cInJlc2l6ZSBzY3JvbGxcIi5zcGxpdChcIiBcIik7ZnVuY3Rpb24gZ2goZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07aWYodm9pZCAwPT09blswXSl7Zm9yKHZhciBvPTA7bzx0aGlzLmxlbmd0aDtvKz0xKWhoLmluZGV4T2YoZSk8MCYmKGUgaW4gdGhpc1tvXT90aGlzW29dW2VdKCk6TXAodGhpc1tvXSkudHJpZ2dlcihlKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMub24uYXBwbHkodGhpcyxbZV0uY29uY2F0KG4pKX19dmFyIHZoPWdoKFwiY2xpY2tcIikseWg9Z2goXCJmb2N1c1wiKSxtaD1cIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dXCIsYmg9L14oPzowfFsxLTldXFxkKikkLztmdW5jdGlvbiB3aChlLHQpe2Zvcih2YXIgbj0tMSxyPWU/ZS5sZW5ndGg6MDsrK248ciYmITEhPT10KGVbbl0sbixlKTspO3JldHVybiBlfXZhciBFaD1PYmplY3QucHJvdG90eXBlLERoPUVoLmhhc093blByb3BlcnR5LFNoPUVoLnRvU3RyaW5nLHhoPUVoLnByb3BlcnR5SXNFbnVtZXJhYmxlLENoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlKHQobikpfX0oT2JqZWN0LmtleXMsT2JqZWN0KTtmdW5jdGlvbiBBaChlLHQpe3ZhciBuPVBoKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiEhZSYmXCJvYmplY3RcIj09dHlwZW9mIGV9KGUpJiZqaChlKX0oZSkmJkRoLmNhbGwoZSxcImNhbGxlZVwiKSYmKCF4aC5jYWxsKGUsXCJjYWxsZWVcIil8fFwiW29iamVjdCBBcmd1bWVudHNdXCI9PVNoLmNhbGwoZSkpfShlKT9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0tMSxyPUFycmF5KGUpOysrbjxlOylyW25dPXQobik7cmV0dXJuIHJ9KGUubGVuZ3RoLFN0cmluZyk6W10scj1uLmxlbmd0aCxvPSEhcjtmb3IodmFyIGkgaW4gZSkhdCYmIURoLmNhbGwoZSxpKXx8byYmKFwibGVuZ3RoXCI9PWl8fF9oKGkscikpfHxuLnB1c2goaSk7cmV0dXJuIG59dmFyIE9oLGtoLEJoPShPaD1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZGaChlLHQsTmgpfSxmdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJuIGU7aWYoIWpoKGUpKXJldHVybiBPaChlLHQpO2Zvcih2YXIgbj1lLmxlbmd0aCxyPWtoP246LTEsbz1PYmplY3QoZSk7KGtoP3ItLTorK3I8bikmJiExIT09dChvW3JdLHIsbyk7KTtyZXR1cm4gZX0pLEZoPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7Zm9yKHZhciBvPS0xLGk9T2JqZWN0KHQpLGE9cih0KSx1PWEubGVuZ3RoO3UtLTspe3ZhciBzPWFbZT91Oisrb107aWYoITE9PT1uKGlbc10scyxpKSlicmVha31yZXR1cm4gdH19KCk7ZnVuY3Rpb24gVGgoZSl7aWYobj0odD1lKSYmdC5jb25zdHJ1Y3RvcixyPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJm4ucHJvdG90eXBlfHxFaCx0IT09cilyZXR1cm4gQ2goZSk7dmFyIHQsbixyLG89W107Zm9yKHZhciBpIGluIE9iamVjdChlKSlEaC5jYWxsKGUsaSkmJlwiY29uc3RydWN0b3JcIiE9aSYmby5wdXNoKGkpO3JldHVybiBvfWZ1bmN0aW9uIF9oKGUsdCl7cmV0dXJuISEodD1udWxsPT10PzkwMDcxOTkyNTQ3NDA5OTE6dCkmJihcIm51bWJlclwiPT10eXBlb2YgZXx8YmgudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fXZhciBQaD1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIGpoKGUpe3JldHVybiBudWxsIT1lJiZmdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmZT4tMSYmZSUxPT0wJiZlPD05MDA3MTk5MjU0NzQwOTkxfShlLmxlbmd0aCkmJiFmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4hIWUmJihcIm9iamVjdFwiPT10fHxcImZ1bmN0aW9uXCI9PXQpfShlKT9TaC5jYWxsKGUpOlwiXCI7cmV0dXJuXCJbb2JqZWN0IEZ1bmN0aW9uXVwiPT10fHx0PT1taH0oZSl9ZnVuY3Rpb24gTmgoZSl7cmV0dXJuIGpoKGUpP0FoKGUpOlRoKGUpfWZ1bmN0aW9uIEloKGUpe3JldHVybiBlfXZhciBMaD1mdW5jdGlvbihlLHQpe3JldHVybihQaChlKT93aDpCaCkoZSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6SWgpfTtsZXQgUmg9KGU9MjEpPT57bGV0IHQ9XCJcIixuPWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoZSkpO2Zvcig7ZS0tOyl7bGV0IHI9NjMmbltlXTt0Kz1yPDM2P3IudG9TdHJpbmcoMzYpOnI8NjI/KHItMjYpLnRvU3RyaW5nKDM2KS50b1VwcGVyQ2FzZSgpOnI8NjM/XCJfXCI6XCItXCJ9cmV0dXJuIHR9O3ZhciBNaD0vXlxccyt8XFxzKyQvZyx6aD0vXlstK10weFswLTlhLWZdKyQvaSwkaD0vXjBiWzAxXSskL2ksSGg9L14wb1swLTddKyQvaSxWaD1wYXJzZUludCxVaD1cIm9iamVjdFwiPT10eXBlb2YgZSYmZSYmZS5PYmplY3Q9PT1PYmplY3QmJmUsV2g9XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLEdoPVVofHxXaHx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpLHFoPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsS2g9TWF0aC5tYXgsWWg9TWF0aC5taW4sWGg9ZnVuY3Rpb24oKXtyZXR1cm4gR2guRGF0ZS5ub3coKX07ZnVuY3Rpb24gWmgoZSx0LG4pe3ZhciByLG8saSxhLHUscyxsPTAsYz0hMSxmPSExLGQ9ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiKTtmdW5jdGlvbiBwKHQpe3ZhciBuPXIsaT1vO3JldHVybiByPW89dm9pZCAwLGw9dCxhPWUuYXBwbHkoaSxuKX1mdW5jdGlvbiBoKGUpe3JldHVybiBsPWUsdT1zZXRUaW1lb3V0KHYsdCksYz9wKGUpOmF9ZnVuY3Rpb24gZyhlKXt2YXIgbj1lLXM7cmV0dXJuIHZvaWQgMD09PXN8fG4+PXR8fG48MHx8ZiYmZS1sPj1pfWZ1bmN0aW9uIHYoKXt2YXIgZT1YaCgpO2lmKGcoZSkpcmV0dXJuIHkoZSk7dT1zZXRUaW1lb3V0KHYsZnVuY3Rpb24oZSl7dmFyIG49dC0oZS1zKTtyZXR1cm4gZj9ZaChuLGktKGUtbCkpOm59KGUpKX1mdW5jdGlvbiB5KGUpe3JldHVybiB1PXZvaWQgMCxkJiZyP3AoZSk6KHI9bz12b2lkIDAsYSl9ZnVuY3Rpb24gbSgpe3ZhciBlPVhoKCksbj1nKGUpO2lmKHI9YXJndW1lbnRzLG89dGhpcyxzPWUsbil7aWYodm9pZCAwPT09dSlyZXR1cm4gaChzKTtpZihmKXJldHVybiB1PXNldFRpbWVvdXQodix0KSxwKHMpfXJldHVybiB2b2lkIDA9PT11JiYodT1zZXRUaW1lb3V0KHYsdCkpLGF9cmV0dXJuIHQ9UWgodCl8fDAsSmgobikmJihjPSEhbi5sZWFkaW5nLGk9KGY9XCJtYXhXYWl0XCJpbiBuKT9LaChRaChuLm1heFdhaXQpfHwwLHQpOmksZD1cInRyYWlsaW5nXCJpbiBuPyEhbi50cmFpbGluZzpkKSxtLmNhbmNlbD1mdW5jdGlvbigpe3ZvaWQgMCE9PXUmJmNsZWFyVGltZW91dCh1KSxsPTAscj1zPW89dT12b2lkIDB9LG0uZmx1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dT9hOnkoWGgoKSl9LG19ZnVuY3Rpb24gSmgoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuISFlJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX1mdW5jdGlvbiBRaChlKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihmdW5jdGlvbihlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZXx8ZnVuY3Rpb24oZSl7cmV0dXJuISFlJiZcIm9iamVjdFwiPT10eXBlb2YgZX0oZSkmJlwiW29iamVjdCBTeW1ib2xdXCI9PXFoLmNhbGwoZSl9KGUpKXJldHVybiBOYU47aWYoSmgoZSkpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGUudmFsdWVPZj9lLnZhbHVlT2YoKTplO2U9SmgodCk/dCtcIlwiOnR9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIDA9PT1lP2U6K2U7ZT1lLnJlcGxhY2UoTWgsXCJcIik7dmFyIG49JGgudGVzdChlKTtyZXR1cm4gbnx8SGgudGVzdChlKT9WaChlLnNsaWNlKDIpLG4/Mjo4KTp6aC50ZXN0KGUpP05hTjorZX12YXIgZWc9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSEwLG89ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiKTtyZXR1cm4gSmgobikmJihyPVwibGVhZGluZ1wiaW4gbj8hIW4ubGVhZGluZzpyLG89XCJ0cmFpbGluZ1wiaW4gbj8hIW4udHJhaWxpbmc6byksWmgoZSx0LHtsZWFkaW5nOnIsbWF4V2FpdDp0LHRyYWlsaW5nOm99KX07Y29uc3QgdGc9e2NyZWF0ZUVsZW1lbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlLHQpfSxjcmVhdGVFbGVtZW50TlM6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSx0LG4pfSxjcmVhdGVUZXh0Tm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSl9LGNyZWF0ZUNvbW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoZSl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHQsbil7ZS5pbnNlcnRCZWZvcmUodCxuKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24oZSx0KXtlLnJlbW92ZUNoaWxkKHQpfSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlLHQpe2UuYXBwZW5kQ2hpbGQodCl9LHBhcmVudE5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZX0sbmV4dFNpYmxpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubmV4dFNpYmxpbmd9LHRhZ05hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnTmFtZX0sc2V0VGV4dENvbnRlbnQ6ZnVuY3Rpb24oZSx0KXtlLnRleHRDb250ZW50PXR9LGdldFRleHRDb250ZW50OmZ1bmN0aW9uKGUpe3JldHVybiBlLnRleHRDb250ZW50fSxpc0VsZW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSxpc1RleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIDM9PT1lLm5vZGVUeXBlfSxpc0NvbW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIDg9PT1lLm5vZGVUeXBlfX07ZnVuY3Rpb24gbmcoZSx0LG4scixvKXtyZXR1cm57c2VsOmUsZGF0YTp0LGNoaWxkcmVuOm4sdGV4dDpyLGVsbTpvLGtleTp2b2lkIDA9PT10P3ZvaWQgMDp0LmtleX19Y29uc3Qgcmc9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBvZyhlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZXx8XCJudW1iZXJcIj09dHlwZW9mIGV8fGUgaW5zdGFuY2VvZiBTdHJpbmd8fGUgaW5zdGFuY2VvZiBOdW1iZXJ9ZnVuY3Rpb24gaWcoZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gYWcoZSl7cmV0dXJuIHZvaWQgMCE9PWV9Y29uc3QgdWc9bmcoXCJcIix7fSxbXSx2b2lkIDAsdm9pZCAwKTtmdW5jdGlvbiBzZyhlLHQpe3ZhciBuLHI7Y29uc3Qgbz1lLmtleT09PXQua2V5LGk9KG51bGw9PT0obj1lLmRhdGEpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmlzKT09PShudWxsPT09KHI9dC5kYXRhKXx8dm9pZCAwPT09cj92b2lkIDA6ci5pcyk7cmV0dXJuIGUuc2VsPT09dC5zZWwmJm8mJml9ZnVuY3Rpb24gbGcoZSx0LG4pe3ZhciByO2NvbnN0IG89e307Zm9yKGxldCBpPXQ7aTw9bjsrK2kpe2NvbnN0IHQ9bnVsbD09PShyPWVbaV0pfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmtleTt2b2lkIDAhPT10JiYob1t0XT1pKX1yZXR1cm4gb31jb25zdCBjZz1bXCJjcmVhdGVcIixcInVwZGF0ZVwiLFwicmVtb3ZlXCIsXCJkZXN0cm95XCIsXCJwcmVcIixcInBvc3RcIl07ZnVuY3Rpb24gZmcoZSx0KXtjb25zdCBuPXtjcmVhdGU6W10sdXBkYXRlOltdLHJlbW92ZTpbXSxkZXN0cm95OltdLHByZTpbXSxwb3N0OltdfSxyPXZvaWQgMCE9PXQ/dDp0Zztmb3IoY29uc3QgdCBvZiBjZylmb3IoY29uc3QgciBvZiBlKXtjb25zdCBlPXJbdF07dm9pZCAwIT09ZSYmblt0XS5wdXNoKGUpfWZ1bmN0aW9uIG8oZSl7Y29uc3QgdD1lLmlkP1wiI1wiK2UuaWQ6XCJcIixuPWUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIiksbz1uP1wiLlwiK24uc3BsaXQoXCIgXCIpLmpvaW4oXCIuXCIpOlwiXCI7cmV0dXJuIG5nKHIudGFnTmFtZShlKS50b0xvd2VyQ2FzZSgpK3Qrbyx7fSxbXSx2b2lkIDAsZSl9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBmdW5jdGlvbigpe2lmKDA9PS0tdCl7Y29uc3QgdD1yLnBhcmVudE5vZGUoZSk7ci5yZW1vdmVDaGlsZCh0LGUpfX19ZnVuY3Rpb24gYShlLHQpe3ZhciBvLGk7bGV0IHUscz1lLmRhdGE7aWYodm9pZCAwIT09cyl7Y29uc3QgdD1udWxsPT09KG89cy5ob29rKXx8dm9pZCAwPT09bz92b2lkIDA6by5pbml0O2FnKHQpJiYodChlKSxzPWUuZGF0YSl9Y29uc3QgbD1lLmNoaWxkcmVuLGM9ZS5zZWw7aWYoXCIhXCI9PT1jKWlnKGUudGV4dCkmJihlLnRleHQ9XCJcIiksZS5lbG09ci5jcmVhdGVDb21tZW50KGUudGV4dCk7ZWxzZSBpZih2b2lkIDAhPT1jKXtjb25zdCBvPWMuaW5kZXhPZihcIiNcIiksZj1jLmluZGV4T2YoXCIuXCIsbyksZD1vPjA/bzpjLmxlbmd0aCxwPWY+MD9mOmMubGVuZ3RoLGg9LTEhPT1vfHwtMSE9PWY/Yy5zbGljZSgwLE1hdGgubWluKGQscCkpOmMsZz1lLmVsbT1hZyhzKSYmYWcodT1zLm5zKT9yLmNyZWF0ZUVsZW1lbnROUyh1LGgscyk6ci5jcmVhdGVFbGVtZW50KGgscyk7Zm9yKGQ8cCYmZy5zZXRBdHRyaWJ1dGUoXCJpZFwiLGMuc2xpY2UoZCsxLHApKSxmPjAmJmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixjLnNsaWNlKHArMSkucmVwbGFjZSgvXFwuL2csXCIgXCIpKSx1PTA7dTxuLmNyZWF0ZS5sZW5ndGg7Kyt1KW4uY3JlYXRlW3VdKHVnLGUpO2lmKHJnKGwpKWZvcih1PTA7dTxsLmxlbmd0aDsrK3Upe2NvbnN0IGU9bFt1XTtudWxsIT1lJiZyLmFwcGVuZENoaWxkKGcsYShlLHQpKX1lbHNlIG9nKGUudGV4dCkmJnIuYXBwZW5kQ2hpbGQoZyxyLmNyZWF0ZVRleHROb2RlKGUudGV4dCkpO2NvbnN0IHY9ZS5kYXRhLmhvb2s7YWcodikmJihudWxsPT09KGk9di5jcmVhdGUpfHx2b2lkIDA9PT1pfHxpLmNhbGwodix1ZyxlKSx2Lmluc2VydCYmdC5wdXNoKGUpKX1lbHNlIGUuZWxtPXIuY3JlYXRlVGV4dE5vZGUoZS50ZXh0KTtyZXR1cm4gZS5lbG19ZnVuY3Rpb24gdShlLHQsbixvLGksdSl7Zm9yKDtvPD1pOysrbyl7Y29uc3QgaT1uW29dO251bGwhPWkmJnIuaW5zZXJ0QmVmb3JlKGUsYShpLHUpLHQpfX1mdW5jdGlvbiBzKGUpe3ZhciB0LHI7Y29uc3Qgbz1lLmRhdGE7aWYodm9pZCAwIT09byl7bnVsbD09PShyPW51bGw9PT0odD1udWxsPT1vP3ZvaWQgMDpvLmhvb2spfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmRlc3Ryb3kpfHx2b2lkIDA9PT1yfHxyLmNhbGwodCxlKTtmb3IobGV0IHQ9MDt0PG4uZGVzdHJveS5sZW5ndGg7Kyt0KW4uZGVzdHJveVt0XShlKTtpZih2b2lkIDAhPT1lLmNoaWxkcmVuKWZvcihsZXQgdD0wO3Q8ZS5jaGlsZHJlbi5sZW5ndGg7Kyt0KXtjb25zdCBuPWUuY2hpbGRyZW5bdF07bnVsbCE9biYmXCJzdHJpbmdcIiE9dHlwZW9mIG4mJnMobil9fX1mdW5jdGlvbiBsKGUsdCxvLGEpe2Zvcih2YXIgdSxsO288PWE7KytvKXtsZXQgYSxjO2NvbnN0IGY9dFtvXTtpZihudWxsIT1mKWlmKGFnKGYuc2VsKSl7cyhmKSxhPW4ucmVtb3ZlLmxlbmd0aCsxLGM9aShmLmVsbSxhKTtmb3IobGV0IGU9MDtlPG4ucmVtb3ZlLmxlbmd0aDsrK2Upbi5yZW1vdmVbZV0oZixjKTtjb25zdCBlPW51bGw9PT0obD1udWxsPT09KHU9bnVsbD09Zj92b2lkIDA6Zi5kYXRhKXx8dm9pZCAwPT09dT92b2lkIDA6dS5ob29rKXx8dm9pZCAwPT09bD92b2lkIDA6bC5yZW1vdmU7YWcoZSk/ZShmLGMpOmMoKX1lbHNlIHIucmVtb3ZlQ2hpbGQoZSxmLmVsbSl9fWZ1bmN0aW9uIGMoZSx0LG8pe3ZhciBpLHMsZixkLHA7Y29uc3QgaD1udWxsPT09KGk9dC5kYXRhKXx8dm9pZCAwPT09aT92b2lkIDA6aS5ob29rO251bGw9PT0ocz1udWxsPT1oP3ZvaWQgMDpoLnByZXBhdGNoKXx8dm9pZCAwPT09c3x8cy5jYWxsKGgsZSx0KTtjb25zdCBnPXQuZWxtPWUuZWxtLHY9ZS5jaGlsZHJlbix5PXQuY2hpbGRyZW47aWYoZSE9PXQpe2lmKHZvaWQgMCE9PXQuZGF0YSl7Zm9yKGxldCByPTA7cjxuLnVwZGF0ZS5sZW5ndGg7KytyKW4udXBkYXRlW3JdKGUsdCk7bnVsbD09PShkPW51bGw9PT0oZj10LmRhdGEuaG9vayl8fHZvaWQgMD09PWY/dm9pZCAwOmYudXBkYXRlKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGYsZSx0KX1pZyh0LnRleHQpP2FnKHYpJiZhZyh5KT92IT09eSYmZnVuY3Rpb24oZSx0LG4sbyl7bGV0IGkscyxmLGQscD0wLGg9MCxnPXQubGVuZ3RoLTEsdj10WzBdLHk9dFtnXSxtPW4ubGVuZ3RoLTEsYj1uWzBdLHc9blttXTtmb3IoO3A8PWcmJmg8PW07KW51bGw9PXY/dj10WysrcF06bnVsbD09eT95PXRbLS1nXTpudWxsPT1iP2I9blsrK2hdOm51bGw9PXc/dz1uWy0tbV06c2codixiKT8oYyh2LGIsbyksdj10WysrcF0sYj1uWysraF0pOnNnKHksdyk/KGMoeSx3LG8pLHk9dFstLWddLHc9blstLW1dKTpzZyh2LHcpPyhjKHYsdyxvKSxyLmluc2VydEJlZm9yZShlLHYuZWxtLHIubmV4dFNpYmxpbmcoeS5lbG0pKSx2PXRbKytwXSx3PW5bLS1tXSk6c2coeSxiKT8oYyh5LGIsbyksci5pbnNlcnRCZWZvcmUoZSx5LmVsbSx2LmVsbSkseT10Wy0tZ10sYj1uWysraF0pOih2b2lkIDA9PT1pJiYoaT1sZyh0LHAsZykpLHM9aVtiLmtleV0saWcocyk/ci5pbnNlcnRCZWZvcmUoZSxhKGIsbyksdi5lbG0pOihmPXRbc10sZi5zZWwhPT1iLnNlbD9yLmluc2VydEJlZm9yZShlLGEoYixvKSx2LmVsbSk6KGMoZixiLG8pLHRbc109dm9pZCAwLHIuaW5zZXJ0QmVmb3JlKGUsZi5lbG0sdi5lbG0pKSksYj1uWysraF0pOyhwPD1nfHxoPD1tKSYmKHA+Zz8oZD1udWxsPT1uW20rMV0/bnVsbDpuW20rMV0uZWxtLHUoZSxkLG4saCxtLG8pKTpsKGUsdCxwLGcpKX0oZyx2LHksbyk6YWcoeSk/KGFnKGUudGV4dCkmJnIuc2V0VGV4dENvbnRlbnQoZyxcIlwiKSx1KGcsbnVsbCx5LDAseS5sZW5ndGgtMSxvKSk6YWcodik/bChnLHYsMCx2Lmxlbmd0aC0xKTphZyhlLnRleHQpJiZyLnNldFRleHRDb250ZW50KGcsXCJcIik6ZS50ZXh0IT09dC50ZXh0JiYoYWcodikmJmwoZyx2LDAsdi5sZW5ndGgtMSksci5zZXRUZXh0Q29udGVudChnLHQudGV4dCkpLG51bGw9PT0ocD1udWxsPT1oP3ZvaWQgMDpoLnBvc3RwYXRjaCl8fHZvaWQgMD09PXB8fHAuY2FsbChoLGUsdCl9fXJldHVybiBmdW5jdGlvbihlLHQpe2xldCBpLHUscztjb25zdCBmPVtdO2ZvcihpPTA7aTxuLnByZS5sZW5ndGg7KytpKW4ucHJlW2ldKCk7Zm9yKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lLnNlbH0oZSl8fChlPW8oZSkpLHNnKGUsdCk/YyhlLHQsZik6KHU9ZS5lbG0scz1yLnBhcmVudE5vZGUodSksYSh0LGYpLG51bGwhPT1zJiYoci5pbnNlcnRCZWZvcmUocyx0LmVsbSxyLm5leHRTaWJsaW5nKHUpKSxsKHMsW2VdLDAsMCkpKSxpPTA7aTxmLmxlbmd0aDsrK2kpZltpXS5kYXRhLmhvb2suaW5zZXJ0KGZbaV0pO2ZvcihpPTA7aTxuLnBvc3QubGVuZ3RoOysraSluLnBvc3RbaV0oKTtyZXR1cm4gdH19ZnVuY3Rpb24gZGcoZSx0LG4pe2lmKGUubnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiZm9yZWlnbk9iamVjdFwiIT09biYmdm9pZCAwIT09dClmb3IobGV0IGU9MDtlPHQubGVuZ3RoOysrZSl7Y29uc3Qgbj10W2VdLmRhdGE7dm9pZCAwIT09biYmZGcobix0W2VdLmNoaWxkcmVuLHRbZV0uc2VsKX19ZnVuY3Rpb24gcGcoZSx0LG4pe2xldCByLG8saSxhPXt9O2lmKHZvaWQgMCE9PW4/KG51bGwhPT10JiYoYT10KSxyZyhuKT9yPW46b2cobik/bz1uLnRvU3RyaW5nKCk6biYmbi5zZWwmJihyPVtuXSkpOm51bGwhPXQmJihyZyh0KT9yPXQ6b2codCk/bz10LnRvU3RyaW5nKCk6dCYmdC5zZWw/cj1bdF06YT10KSx2b2lkIDAhPT1yKWZvcihpPTA7aTxyLmxlbmd0aDsrK2kpb2cocltpXSkmJihyW2ldPW5nKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHJbaV0sdm9pZCAwKSk7cmV0dXJuXCJzXCIhPT1lWzBdfHxcInZcIiE9PWVbMV18fFwiZ1wiIT09ZVsyXXx8MyE9PWUubGVuZ3RoJiZcIi5cIiE9PWVbM10mJlwiI1wiIT09ZVszXXx8ZGcoYSxyLGUpLG5nKGUsYSxyLG8sdm9pZCAwKX1mdW5jdGlvbiBoZyhlLHQpe2xldCBuO2NvbnN0IHI9dC5lbG07bGV0IG89ZS5kYXRhLmF0dHJzLGk9dC5kYXRhLmF0dHJzO2lmKChvfHxpKSYmbyE9PWkpe2ZvcihuIGluIG89b3x8e30saT1pfHx7fSxpKXtjb25zdCBlPWlbbl07b1tuXSE9PWUmJighMD09PWU/ci5zZXRBdHRyaWJ1dGUobixcIlwiKTohMT09PWU/ci5yZW1vdmVBdHRyaWJ1dGUobik6MTIwIT09bi5jaGFyQ29kZUF0KDApP3Iuc2V0QXR0cmlidXRlKG4sZSk6NTg9PT1uLmNoYXJDb2RlQXQoMyk/ci5zZXRBdHRyaWJ1dGVOUyhcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLG4sZSk6NTg9PT1uLmNoYXJDb2RlQXQoNSk/ci5zZXRBdHRyaWJ1dGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixuLGUpOnIuc2V0QXR0cmlidXRlKG4sZSkpfWZvcihuIGluIG8pbiBpbiBpfHxyLnJlbW92ZUF0dHJpYnV0ZShuKX19Y29uc3QgZ2c9e2NyZWF0ZTpoZyx1cGRhdGU6aGd9O2Z1bmN0aW9uIHZnKGUsdCl7bGV0IG4scjtjb25zdCBvPXQuZWxtO2xldCBpPWUuZGF0YS5jbGFzcyxhPXQuZGF0YS5jbGFzcztpZigoaXx8YSkmJmkhPT1hKXtmb3IociBpbiBpPWl8fHt9LGE9YXx8e30saSlpW3JdJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEscikmJm8uY2xhc3NMaXN0LnJlbW92ZShyKTtmb3IociBpbiBhKW49YVtyXSxuIT09aVtyXSYmby5jbGFzc0xpc3Rbbj9cImFkZFwiOlwicmVtb3ZlXCJdKHIpfX1jb25zdCB5Zz17Y3JlYXRlOnZnLHVwZGF0ZTp2Z30sbWc9L1tBLVpdL2c7ZnVuY3Rpb24gYmcoZSx0KXtjb25zdCBuPXQuZWxtO2xldCByLG89ZS5kYXRhLmRhdGFzZXQsaT10LmRhdGEuZGF0YXNldDtpZighbyYmIWkpcmV0dXJuO2lmKG89PT1pKXJldHVybjtvPW98fHt9LGk9aXx8e307Y29uc3QgYT1uLmRhdGFzZXQ7Zm9yKHIgaW4gbylpW3JdfHwoYT9yIGluIGEmJmRlbGV0ZSBhW3JdOm4ucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1cIityLnJlcGxhY2UobWcsXCItJCZcIikudG9Mb3dlckNhc2UoKSkpO2ZvcihyIGluIGkpb1tyXSE9PWlbcl0mJihhP2Fbcl09aVtyXTpuLnNldEF0dHJpYnV0ZShcImRhdGEtXCIrci5yZXBsYWNlKG1nLFwiLSQmXCIpLnRvTG93ZXJDYXNlKCksaVtyXSkpfWNvbnN0IHdnPXtjcmVhdGU6YmcsdXBkYXRlOmJnfTtmdW5jdGlvbiBFZyhlLHQsbil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSllLmNhbGwodCxuLHQpO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpZm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspRWcoZVtyXSx0LG4pfWZ1bmN0aW9uIERnKGUsdCl7Y29uc3Qgbj1lLnR5cGUscj10LmRhdGEub247ciYmcltuXSYmRWcocltuXSx0LGUpfWZ1bmN0aW9uIFNnKGUsdCl7Y29uc3Qgbj1lLmRhdGEub24scj1lLmxpc3RlbmVyLG89ZS5lbG0saT10JiZ0LmRhdGEub24sYT10JiZ0LmVsbTtsZXQgdTtpZihuIT09aSl7aWYobiYmcilpZihpKWZvcih1IGluIG4paVt1XXx8by5yZW1vdmVFdmVudExpc3RlbmVyKHUsciwhMSk7ZWxzZSBmb3IodSBpbiBuKW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcih1LHIsITEpO2lmKGkpe2NvbnN0IHI9dC5saXN0ZW5lcj1lLmxpc3RlbmVyfHxmdW5jdGlvbiBlKHQpe0RnKHQsZS52bm9kZSl9O2lmKHIudm5vZGU9dCxuKWZvcih1IGluIGkpblt1XXx8YS5hZGRFdmVudExpc3RlbmVyKHUsciwhMSk7ZWxzZSBmb3IodSBpbiBpKWEuYWRkRXZlbnRMaXN0ZW5lcih1LHIsITEpfX19Y29uc3QgeGc9e2NyZWF0ZTpTZyx1cGRhdGU6U2csZGVzdHJveTpTZ307ZnVuY3Rpb24gQ2coZSx0KXtsZXQgbixyLG87Y29uc3QgaT10LmVsbTtsZXQgYT1lLmRhdGEucHJvcHMsdT10LmRhdGEucHJvcHM7aWYoKGF8fHUpJiZhIT09dSlmb3IobiBpbiBhPWF8fHt9LHU9dXx8e30sdSlyPXVbbl0sbz1hW25dLG89PT1yfHxcInZhbHVlXCI9PT1uJiZpW25dPT09cnx8KGlbbl09cil9Y29uc3QgQWc9e2NyZWF0ZTpDZyx1cGRhdGU6Q2d9LE9nPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpfHxzZXRUaW1lb3V0O2xldCBrZz0hMTtmdW5jdGlvbiBCZyhlLHQsbil7IWZ1bmN0aW9uKGUpe09nKChmdW5jdGlvbigpe09nKGUpfSkpfSgoZnVuY3Rpb24oKXtlW3RdPW59KSl9ZnVuY3Rpb24gRmcoZSx0KXtsZXQgbixyO2NvbnN0IG89dC5lbG07bGV0IGk9ZS5kYXRhLnN0eWxlLGE9dC5kYXRhLnN0eWxlO2lmKCFpJiYhYSlyZXR1cm47aWYoaT09PWEpcmV0dXJuO2k9aXx8e30sYT1hfHx7fTtjb25zdCB1PVwiZGVsYXllZFwiaW4gaTtmb3IociBpbiBpKWFbcl18fChcIi1cIj09PXJbMF0mJlwiLVwiPT09clsxXT9vLnN0eWxlLnJlbW92ZVByb3BlcnR5KHIpOm8uc3R5bGVbcl09XCJcIik7Zm9yKHIgaW4gYSlpZihuPWFbcl0sXCJkZWxheWVkXCI9PT1yJiZhLmRlbGF5ZWQpZm9yKGNvbnN0IGUgaW4gYS5kZWxheWVkKW49YS5kZWxheWVkW2VdLHUmJm49PT1pLmRlbGF5ZWRbZV18fEJnKG8uc3R5bGUsZSxuKTtlbHNlXCJyZW1vdmVcIiE9PXImJm4hPT1pW3JdJiYoXCItXCI9PT1yWzBdJiZcIi1cIj09PXJbMV0/by5zdHlsZS5zZXRQcm9wZXJ0eShyLG4pOm8uc3R5bGVbcl09bil9Y29uc3QgVGc9e3ByZTpmdW5jdGlvbigpe2tnPSExfSxjcmVhdGU6RmcsdXBkYXRlOkZnLGRlc3Ryb3k6ZnVuY3Rpb24oZSl7bGV0IHQsbjtjb25zdCByPWUuZWxtLG89ZS5kYXRhLnN0eWxlO2lmKG8mJih0PW8uZGVzdHJveSkpZm9yKG4gaW4gdClyLnN0eWxlW25dPXRbbl19LHJlbW92ZTpmdW5jdGlvbihlLHQpe2NvbnN0IG49ZS5kYXRhLnN0eWxlO2lmKCFufHwhbi5yZW1vdmUpcmV0dXJuIHZvaWQgdCgpO2xldCByO2tnfHwoZS5lbG0ub2Zmc2V0TGVmdCxrZz0hMCk7Y29uc3Qgbz1lLmVsbTtsZXQgaT0wO2NvbnN0IGE9bi5yZW1vdmU7bGV0IHU9MDtjb25zdCBzPVtdO2ZvcihyIGluIGEpcy5wdXNoKHIpLG8uc3R5bGVbcl09YVtyXTtjb25zdCBsPWdldENvbXB1dGVkU3R5bGUobylbXCJ0cmFuc2l0aW9uLXByb3BlcnR5XCJdLnNwbGl0KFwiLCBcIik7Zm9yKDtpPGwubGVuZ3RoOysraSktMSE9PXMuaW5kZXhPZihsW2ldKSYmdSsrO28uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwoZnVuY3Rpb24oZSl7ZS50YXJnZXQ9PT1vJiYtLXUsMD09PXUmJnQoKX0pKX19O2Z1bmN0aW9uIF9nKGUsdCl7Zm9yKGNvbnN0IG4gb2YgZSludWxsIT1uJiYhMSE9PW4mJlwiXCIhPT1uJiYoQXJyYXkuaXNBcnJheShuKT9fZyhuLHQpOlwic3RyaW5nXCI9PXR5cGVvZiBufHxcIm51bWJlclwiPT10eXBlb2Ygbnx8XCJib29sZWFuXCI9PXR5cGVvZiBuP3QucHVzaChuZyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxTdHJpbmcobiksdm9pZCAwKSk6dC5wdXNoKG4pKTtyZXR1cm4gdH1mdW5jdGlvbiBQZyhlLHQsLi4ubil7Y29uc3Qgcj1fZyhuLFtdKTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UodCxyKToxPT09ci5sZW5ndGgmJiFyWzBdLnNlbCYmclswXS50ZXh0P3BnKGUsdCxyWzBdLnRleHQpOnBnKGUsdCxyKX1QZ3x8KFBnPXt9KTt2YXIgamc9L1teXFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYwXFx4N2ItXFx4N2ZdKy9nLE5nPS9bXFx4YzAtXFx4ZDZcXHhkOC1cXHhmNlxceGY4LVxceGZmXFx1MDEwMC1cXHUwMTdmXS9nLElnPVwiXFxcXHhhY1xcXFx4YjFcXFxceGQ3XFxcXHhmN1xcXFx4MDAtXFxcXHgyZlxcXFx4M2EtXFxcXHg0MFxcXFx4NWItXFxcXHg2MFxcXFx4N2ItXFxcXHhiZlxcXFx1MjAwMC1cXFxcdTIwNmYgXFxcXHRcXFxceDBiXFxcXGZcXFxceGEwXFxcXHVmZWZmXFxcXG5cXFxcclxcXFx1MjAyOFxcXFx1MjAyOVxcXFx1MTY4MFxcXFx1MTgwZVxcXFx1MjAwMFxcXFx1MjAwMVxcXFx1MjAwMlxcXFx1MjAwM1xcXFx1MjAwNFxcXFx1MjAwNVxcXFx1MjAwNlxcXFx1MjAwN1xcXFx1MjAwOFxcXFx1MjAwOVxcXFx1MjAwYVxcXFx1MjAyZlxcXFx1MjA1ZlxcXFx1MzAwMFwiLExnPVwiW1xcXFx1ZDgwMC1cXFxcdWRmZmZdXCIsUmc9XCJbXCIrSWcrXCJdXCIsTWc9XCJbXFxcXHUwMzAwLVxcXFx1MDM2ZlxcXFx1ZmUyMC1cXFxcdWZlMjNcXFxcdTIwZDAtXFxcXHUyMGYwXVwiLHpnPVwiXFxcXGQrXCIsJGc9XCJbXFxcXHUyNzAwLVxcXFx1MjdiZl1cIixIZz1cIlthLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmZdXCIsVmc9XCJbXlxcXFx1ZDgwMC1cXFxcdWRmZmZcIitJZyt6ZytcIlxcXFx1MjcwMC1cXFxcdTI3YmZhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmZBLVpcXFxceGMwLVxcXFx4ZDZcXFxceGQ4LVxcXFx4ZGVdXCIsVWc9XCJcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl1cIixXZz1cIlteXFxcXHVkODAwLVxcXFx1ZGZmZl1cIixHZz1cIig/OlxcXFx1ZDgzY1tcXFxcdWRkZTYtXFxcXHVkZGZmXSl7Mn1cIixxZz1cIltcXFxcdWQ4MDAtXFxcXHVkYmZmXVtcXFxcdWRjMDAtXFxcXHVkZmZmXVwiLEtnPVwiW0EtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZV1cIixZZz1cIig/OlwiK0hnK1wifFwiK1ZnK1wiKVwiLFhnPVwiKD86XCIrS2crXCJ8XCIrVmcrXCIpXCIsWmc9XCIoPzpcIitNZytcInxcIitVZytcIilcIitcIj9cIixKZz1cIltcXFxcdWZlMGVcXFxcdWZlMGZdP1wiK1pnKyhcIig/OlxcXFx1MjAwZCg/OlwiK1tXZyxHZyxxZ10uam9pbihcInxcIikrXCIpW1xcXFx1ZmUwZVxcXFx1ZmUwZl0/XCIrWmcrXCIpKlwiKSxRZz1cIig/OlwiK1skZyxHZyxxZ10uam9pbihcInxcIikrXCIpXCIrSmcsZXY9XCIoPzpcIitbV2crTWcrXCI/XCIsTWcsR2cscWcsTGddLmpvaW4oXCJ8XCIpK1wiKVwiLHR2PVJlZ0V4cChcIlsn4oCZXVwiLFwiZ1wiKSxudj1SZWdFeHAoTWcsXCJnXCIpLHJ2PVJlZ0V4cChVZytcIig/PVwiK1VnK1wiKXxcIitlditKZyxcImdcIiksb3Y9UmVnRXhwKFtLZytcIj9cIitIZytcIisoPzpbJ+KAmV0oPzpkfGxsfG18cmV8c3x0fHZlKSk/KD89XCIrW1JnLEtnLFwiJFwiXS5qb2luKFwifFwiKStcIilcIixYZytcIisoPzpbJ+KAmV0oPzpEfExMfE18UkV8U3xUfFZFKSk/KD89XCIrW1JnLEtnK1lnLFwiJFwiXS5qb2luKFwifFwiKStcIilcIixLZytcIj9cIitZZytcIisoPzpbJ+KAmV0oPzpkfGxsfG18cmV8c3x0fHZlKSk/XCIsS2crXCIrKD86WyfigJldKD86RHxMTHxNfFJFfFN8VHxWRSkpP1wiLHpnLFFnXS5qb2luKFwifFwiKSxcImdcIiksaXY9UmVnRXhwKFwiW1xcXFx1MjAwZFxcXFx1ZDgwMC1cXFxcdWRmZmZcXFxcdTAzMDAtXFxcXHUwMzZmXFxcXHVmZTIwLVxcXFx1ZmUyM1xcXFx1MjBkMC1cXFxcdTIwZjBcXFxcdWZlMGVcXFxcdWZlMGZdXCIpLGF2PS9bYS16XVtBLVpdfFtBLVpdezIsfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyx1dj1cIm9iamVjdFwiPT10eXBlb2YgZSYmZSYmZS5PYmplY3Q9PT1PYmplY3QmJmUsc3Y9XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGx2PXV2fHxzdnx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO3ZhciBjdixmdj0oY3Y9e1wiw4BcIjpcIkFcIixcIsOBXCI6XCJBXCIsXCLDglwiOlwiQVwiLFwiw4NcIjpcIkFcIixcIsOEXCI6XCJBXCIsXCLDhVwiOlwiQVwiLFwiw6BcIjpcImFcIixcIsOhXCI6XCJhXCIsXCLDolwiOlwiYVwiLFwiw6NcIjpcImFcIixcIsOkXCI6XCJhXCIsXCLDpVwiOlwiYVwiLFwiw4dcIjpcIkNcIixcIsOnXCI6XCJjXCIsXCLDkFwiOlwiRFwiLFwiw7BcIjpcImRcIixcIsOIXCI6XCJFXCIsXCLDiVwiOlwiRVwiLFwiw4pcIjpcIkVcIixcIsOLXCI6XCJFXCIsXCLDqFwiOlwiZVwiLFwiw6lcIjpcImVcIixcIsOqXCI6XCJlXCIsXCLDq1wiOlwiZVwiLFwiw4xcIjpcIklcIixcIsONXCI6XCJJXCIsXCLDjlwiOlwiSVwiLFwiw49cIjpcIklcIixcIsOsXCI6XCJpXCIsXCLDrVwiOlwiaVwiLFwiw65cIjpcImlcIixcIsOvXCI6XCJpXCIsXCLDkVwiOlwiTlwiLFwiw7FcIjpcIm5cIixcIsOSXCI6XCJPXCIsXCLDk1wiOlwiT1wiLFwiw5RcIjpcIk9cIixcIsOVXCI6XCJPXCIsXCLDllwiOlwiT1wiLFwiw5hcIjpcIk9cIixcIsOyXCI6XCJvXCIsXCLDs1wiOlwib1wiLFwiw7RcIjpcIm9cIixcIsO1XCI6XCJvXCIsXCLDtlwiOlwib1wiLFwiw7hcIjpcIm9cIixcIsOZXCI6XCJVXCIsXCLDmlwiOlwiVVwiLFwiw5tcIjpcIlVcIixcIsOcXCI6XCJVXCIsXCLDuVwiOlwidVwiLFwiw7pcIjpcInVcIixcIsO7XCI6XCJ1XCIsXCLDvFwiOlwidVwiLFwiw51cIjpcIllcIixcIsO9XCI6XCJ5XCIsXCLDv1wiOlwieVwiLFwiw4ZcIjpcIkFlXCIsXCLDplwiOlwiYWVcIixcIsOeXCI6XCJUaFwiLFwiw75cIjpcInRoXCIsXCLDn1wiOlwic3NcIixcIsSAXCI6XCJBXCIsXCLEglwiOlwiQVwiLFwixIRcIjpcIkFcIixcIsSBXCI6XCJhXCIsXCLEg1wiOlwiYVwiLFwixIVcIjpcImFcIixcIsSGXCI6XCJDXCIsXCLEiFwiOlwiQ1wiLFwixIpcIjpcIkNcIixcIsSMXCI6XCJDXCIsXCLEh1wiOlwiY1wiLFwixIlcIjpcImNcIixcIsSLXCI6XCJjXCIsXCLEjVwiOlwiY1wiLFwixI5cIjpcIkRcIixcIsSQXCI6XCJEXCIsXCLEj1wiOlwiZFwiLFwixJFcIjpcImRcIixcIsSSXCI6XCJFXCIsXCLElFwiOlwiRVwiLFwixJZcIjpcIkVcIixcIsSYXCI6XCJFXCIsXCLEmlwiOlwiRVwiLFwixJNcIjpcImVcIixcIsSVXCI6XCJlXCIsXCLEl1wiOlwiZVwiLFwixJlcIjpcImVcIixcIsSbXCI6XCJlXCIsXCLEnFwiOlwiR1wiLFwixJ5cIjpcIkdcIixcIsSgXCI6XCJHXCIsXCLEolwiOlwiR1wiLFwixJ1cIjpcImdcIixcIsSfXCI6XCJnXCIsXCLEoVwiOlwiZ1wiLFwixKNcIjpcImdcIixcIsSkXCI6XCJIXCIsXCLEplwiOlwiSFwiLFwixKVcIjpcImhcIixcIsSnXCI6XCJoXCIsXCLEqFwiOlwiSVwiLFwixKpcIjpcIklcIixcIsSsXCI6XCJJXCIsXCLErlwiOlwiSVwiLFwixLBcIjpcIklcIixcIsSpXCI6XCJpXCIsXCLEq1wiOlwiaVwiLFwixK1cIjpcImlcIixcIsSvXCI6XCJpXCIsXCLEsVwiOlwiaVwiLFwixLRcIjpcIkpcIixcIsS1XCI6XCJqXCIsXCLEtlwiOlwiS1wiLFwixLdcIjpcImtcIixcIsS4XCI6XCJrXCIsXCLEuVwiOlwiTFwiLFwixLtcIjpcIkxcIixcIsS9XCI6XCJMXCIsXCLEv1wiOlwiTFwiLFwixYFcIjpcIkxcIixcIsS6XCI6XCJsXCIsXCLEvFwiOlwibFwiLFwixL5cIjpcImxcIixcIsWAXCI6XCJsXCIsXCLFglwiOlwibFwiLFwixYNcIjpcIk5cIixcIsWFXCI6XCJOXCIsXCLFh1wiOlwiTlwiLFwixYpcIjpcIk5cIixcIsWEXCI6XCJuXCIsXCLFhlwiOlwiblwiLFwixYhcIjpcIm5cIixcIsWLXCI6XCJuXCIsXCLFjFwiOlwiT1wiLFwixY5cIjpcIk9cIixcIsWQXCI6XCJPXCIsXCLFjVwiOlwib1wiLFwixY9cIjpcIm9cIixcIsWRXCI6XCJvXCIsXCLFlFwiOlwiUlwiLFwixZZcIjpcIlJcIixcIsWYXCI6XCJSXCIsXCLFlVwiOlwiclwiLFwixZdcIjpcInJcIixcIsWZXCI6XCJyXCIsXCLFmlwiOlwiU1wiLFwixZxcIjpcIlNcIixcIsWeXCI6XCJTXCIsXCLFoFwiOlwiU1wiLFwixZtcIjpcInNcIixcIsWdXCI6XCJzXCIsXCLFn1wiOlwic1wiLFwixaFcIjpcInNcIixcIsWiXCI6XCJUXCIsXCLFpFwiOlwiVFwiLFwixaZcIjpcIlRcIixcIsWjXCI6XCJ0XCIsXCLFpVwiOlwidFwiLFwixadcIjpcInRcIixcIsWoXCI6XCJVXCIsXCLFqlwiOlwiVVwiLFwixaxcIjpcIlVcIixcIsWuXCI6XCJVXCIsXCLFsFwiOlwiVVwiLFwixbJcIjpcIlVcIixcIsWpXCI6XCJ1XCIsXCLFq1wiOlwidVwiLFwixa1cIjpcInVcIixcIsWvXCI6XCJ1XCIsXCLFsVwiOlwidVwiLFwixbNcIjpcInVcIixcIsW0XCI6XCJXXCIsXCLFtVwiOlwid1wiLFwixbZcIjpcIllcIixcIsW3XCI6XCJ5XCIsXCLFuFwiOlwiWVwiLFwixblcIjpcIlpcIixcIsW7XCI6XCJaXCIsXCLFvVwiOlwiWlwiLFwixbpcIjpcInpcIixcIsW8XCI6XCJ6XCIsXCLFvlwiOlwielwiLFwixLJcIjpcIklKXCIsXCLEs1wiOlwiaWpcIixcIsWSXCI6XCJPZVwiLFwixZNcIjpcIm9lXCIsXCLFiVwiOlwiJ25cIixcIsW/XCI6XCJzc1wifSxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09Y3Y/dm9pZCAwOmN2W2VdfSk7ZnVuY3Rpb24gZHYoZSl7cmV0dXJuIGl2LnRlc3QoZSl9ZnVuY3Rpb24gcHYoZSl7cmV0dXJuIGR2KGUpP2Z1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKHJ2KXx8W119KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KFwiXCIpfShlKX12YXIgaHY9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxndj1sdi5TeW1ib2wsdnY9Z3Y/Z3YucHJvdG90eXBlOnZvaWQgMCx5dj12dj92di50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gbXYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoZnVuY3Rpb24oZSl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIGV8fGZ1bmN0aW9uKGUpe3JldHVybiEhZSYmXCJvYmplY3RcIj09dHlwZW9mIGV9KGUpJiZcIltvYmplY3QgU3ltYm9sXVwiPT1odi5jYWxsKGUpfShlKSlyZXR1cm4geXY/eXYuY2FsbChlKTpcIlwiO3ZhciB0PWUrXCJcIjtyZXR1cm5cIjBcIj09dCYmMS9lPT0tSW5maW5pdHk/XCItMFwiOnR9ZnVuY3Rpb24gYnYoZSx0LG4pe3ZhciByPWUubGVuZ3RoO3JldHVybiBuPXZvaWQgMD09PW4/cjpuLCF0JiZuPj1yP2U6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPS0xLG89ZS5sZW5ndGg7dDwwJiYodD0tdD5vPzA6byt0KSwobj1uPm8/bzpuKTwwJiYobis9byksbz10Pm4/MDpuLXQ+Pj4wLHQ+Pj49MDtmb3IodmFyIGk9QXJyYXkobyk7KytyPG87KWlbcl09ZVtyK3RdO3JldHVybiBpfShlLHQsbil9ZnVuY3Rpb24gd3YoZSl7cmV0dXJuIG51bGw9PWU/XCJcIjptdihlKX12YXIgRXYsRHY9KEV2PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD10LnRvTG93ZXJDYXNlKCksZSsobj94dih3dih0KS50b0xvd2VyQ2FzZSgpKTp0KX0sZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPS0xLGk9ZT9lLmxlbmd0aDowO2ZvcihyJiZpJiYobj1lWysrb10pOysrbzxpOyluPXQobixlW29dLG8sZSk7cmV0dXJuIG59KGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT13dihlKSx2b2lkIDA9PT0odD1uP3ZvaWQgMDp0KT9mdW5jdGlvbihlKXtyZXR1cm4gYXYudGVzdChlKX0oZSk/ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2gob3YpfHxbXX0oZSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2goamcpfHxbXX0oZSk6ZS5tYXRjaCh0KXx8W119KGZ1bmN0aW9uKGUpe3JldHVybihlPXd2KGUpKSYmZS5yZXBsYWNlKE5nLGZ2KS5yZXBsYWNlKG52LFwiXCIpfShlKS5yZXBsYWNlKHR2LFwiXCIpKSxFdixcIlwiKX0pO3ZhciBTdix4dj0oU3Y9XCJ0b1VwcGVyQ2FzZVwiLGZ1bmN0aW9uKGUpe3ZhciB0PWR2KGU9d3YoZSkpP3B2KGUpOnZvaWQgMCxuPXQ/dFswXTplLmNoYXJBdCgwKSxyPXQ/YnYodCwxKS5qb2luKFwiXCIpOmUuc2xpY2UoMSk7cmV0dXJuIG5bU3ZdKCkrcn0pO2Zvcih2YXIgQ3Y9RHYsQXY9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmL01hY3xpUG9kfGlQaG9uZXxpUGFkLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0pLE92PXthbHQ6XCJhbHRLZXlcIixjb250cm9sOlwiY3RybEtleVwiLG1ldGE6XCJtZXRhS2V5XCIsc2hpZnQ6XCJzaGlmdEtleVwifSxrdj17YWRkOlwiK1wiLGJyZWFrOlwicGF1c2VcIixjbWQ6XCJtZXRhXCIsY29tbWFuZDpcIm1ldGFcIixjdGw6XCJjb250cm9sXCIsY3RybDpcImNvbnRyb2xcIixkZWw6XCJkZWxldGVcIixkb3duOlwiYXJyb3dkb3duXCIsZXNjOlwiZXNjYXBlXCIsaW5zOlwiaW5zZXJ0XCIsbGVmdDpcImFycm93bGVmdFwiLG1vZDpBdj9cIm1ldGFcIjpcImNvbnRyb2xcIixvcHQ6XCJhbHRcIixvcHRpb246XCJhbHRcIixyZXR1cm46XCJlbnRlclwiLHJpZ2h0OlwiYXJyb3dyaWdodFwiLHNwYWNlOlwiIFwiLHNwYWNlYmFyOlwiIFwiLHVwOlwiYXJyb3d1cFwiLHdpbjpcIm1ldGFcIix3aW5kb3dzOlwibWV0YVwifSxCdj17YmFja3NwYWNlOjgsdGFiOjksZW50ZXI6MTMsc2hpZnQ6MTYsY29udHJvbDoxNyxhbHQ6MTgscGF1c2U6MTksY2Fwc2xvY2s6MjAsZXNjYXBlOjI3LFwiIFwiOjMyLHBhZ2V1cDozMyxwYWdlZG93bjozNCxlbmQ6MzUsaG9tZTozNixhcnJvd2xlZnQ6MzcsYXJyb3d1cDozOCxhcnJvd3JpZ2h0OjM5LGFycm93ZG93bjo0MCxpbnNlcnQ6NDUsZGVsZXRlOjQ2LG1ldGE6OTEsbnVtbG9jazoxNDQsc2Nyb2xsbG9jazoxNDUsXCI7XCI6MTg2LFwiPVwiOjE4NyxcIixcIjoxODgsXCItXCI6MTg5LFwiLlwiOjE5MCxcIi9cIjoxOTEsXCJgXCI6MTkyLFwiW1wiOjIxOSxcIlxcXFxcIjoyMjAsXCJdXCI6MjIxLFwiJ1wiOjIyMn0sRnY9MTtGdjwyMDtGdisrKUJ2W1wiZlwiK0Z2XT0xMTErRnY7ZnVuY3Rpb24gVHYoZSx0LG4pe3QmJiEoXCJieUtleVwiaW4gdCkmJihuPXQsdD1udWxsKSxBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pO3ZhciByPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj10JiZ0LmJ5S2V5LHI9e30sbz0oZT1lLnJlcGxhY2UoXCIrK1wiLFwiK2FkZFwiKSkuc3BsaXQoXCIrXCIpLGk9by5sZW5ndGg7Zm9yKHZhciBhIGluIE92KXJbT3ZbYV1dPSExO3ZhciB1PSEwLHM9ITEsbD12b2lkIDA7dHJ5e2Zvcih2YXIgYyxmPW9bU3ltYm9sLml0ZXJhdG9yXSgpOyEodT0oYz1mLm5leHQoKSkuZG9uZSk7dT0hMCl7dmFyIGQ9Yy52YWx1ZSxwPWQuZW5kc1dpdGgoXCI/XCIpJiZkLmxlbmd0aD4xO3AmJihkPWQuc2xpY2UoMCwtMSkpO3ZhciBoPVB2KGQpLGc9T3ZbaF07aWYoZC5sZW5ndGg+MSYmIWcmJiFrdltkXSYmIUJ2W2hdKXRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gbW9kaWZpZXI6IFwiJytkKydcIicpOzEhPT1pJiZnfHwobj9yLmtleT1oOnIud2hpY2g9X3YoZCkpLGcmJihyW2ddPSFwfHxudWxsKX19Y2F0Y2goZSl7cz0hMCxsPWV9ZmluYWxseXt0cnl7IXUmJmYucmV0dXJuJiZmLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBsfX1yZXR1cm4gcn0oZSx0KX0pKSxvPWZ1bmN0aW9uKGUpe3JldHVybiByLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKXt2YXIgcj1lW25dLG89dm9pZCAwO2lmKG51bGwhPXImJigobnVsbCE9KG89XCJrZXlcIj09PW4mJm51bGwhPXQua2V5P3Qua2V5LnRvTG93ZXJDYXNlKCk6XCJ3aGljaFwiPT09bj85MT09PXImJjkzPT09dC53aGljaD85MTp0LndoaWNoOnRbbl0pfHwhMSE9PXIpJiZvIT09cikpcmV0dXJuITF9cmV0dXJuITB9KHQsZSl9KSl9O3JldHVybiBudWxsPT1uP286byhuKX1mdW5jdGlvbiBfdihlKXtyZXR1cm4gZT1QdihlKSxCdltlXXx8ZS50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCl9ZnVuY3Rpb24gUHYoZSl7cmV0dXJuIGU9ZS50b0xvd2VyQ2FzZSgpLGU9a3ZbZV18fGV9dmFyIGp2PVR2LE52PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFR2KGUse2J5S2V5OiEwfSx0KX0sSXY9L15cXHMrfFxccyskL2csTHY9L15bLStdMHhbMC05YS1mXSskL2ksUnY9L14wYlswMV0rJC9pLE12PS9eMG9bMC03XSskL2ksenY9cGFyc2VJbnQsJHY9XCJvYmplY3RcIj09dHlwZW9mIGUmJmUmJmUuT2JqZWN0PT09T2JqZWN0JiZlLEh2PVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixWdj0kdnx8SHZ8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxVdj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFd2PU1hdGgubWF4LEd2PU1hdGgubWluLHF2PWZ1bmN0aW9uKCl7cmV0dXJuIFZ2LkRhdGUubm93KCl9O2Z1bmN0aW9uIEt2KGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9ZnVuY3Rpb24gWXYoZSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoZnVuY3Rpb24oZSl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIGV8fGZ1bmN0aW9uKGUpe3JldHVybiEhZSYmXCJvYmplY3RcIj09dHlwZW9mIGV9KGUpJiZcIltvYmplY3QgU3ltYm9sXVwiPT1Vdi5jYWxsKGUpfShlKSlyZXR1cm4gTmFOO2lmKEt2KGUpKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnZhbHVlT2Y/ZS52YWx1ZU9mKCk6ZTtlPUt2KHQpP3QrXCJcIjp0fWlmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiAwPT09ZT9lOitlO2U9ZS5yZXBsYWNlKEl2LFwiXCIpO3ZhciBuPVJ2LnRlc3QoZSk7cmV0dXJuIG58fE12LnRlc3QoZSk/enYoZS5zbGljZSgyKSxuPzI6OCk6THYudGVzdChlKT9OYU46K2V9dmFyIFh2LFp2PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLGksYSx1LHMsbD0wLGM9ITEsZj0hMSxkPSEwO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgZnVuY3Rpb25cIik7ZnVuY3Rpb24gcCh0KXt2YXIgbj1yLGk9bztyZXR1cm4gcj1vPXZvaWQgMCxsPXQsYT1lLmFwcGx5KGksbil9ZnVuY3Rpb24gaChlKXtyZXR1cm4gbD1lLHU9c2V0VGltZW91dCh2LHQpLGM/cChlKTphfWZ1bmN0aW9uIGcoZSl7dmFyIG49ZS1zO3JldHVybiB2b2lkIDA9PT1zfHxuPj10fHxuPDB8fGYmJmUtbD49aX1mdW5jdGlvbiB2KCl7dmFyIGU9cXYoKTtpZihnKGUpKXJldHVybiB5KGUpO3U9c2V0VGltZW91dCh2LGZ1bmN0aW9uKGUpe3ZhciBuPXQtKGUtcyk7cmV0dXJuIGY/R3YobixpLShlLWwpKTpufShlKSl9ZnVuY3Rpb24geShlKXtyZXR1cm4gdT12b2lkIDAsZCYmcj9wKGUpOihyPW89dm9pZCAwLGEpfWZ1bmN0aW9uIG0oKXt2YXIgZT1xdigpLG49ZyhlKTtpZihyPWFyZ3VtZW50cyxvPXRoaXMscz1lLG4pe2lmKHZvaWQgMD09PXUpcmV0dXJuIGgocyk7aWYoZilyZXR1cm4gdT1zZXRUaW1lb3V0KHYsdCkscChzKX1yZXR1cm4gdm9pZCAwPT09dSYmKHU9c2V0VGltZW91dCh2LHQpKSxhfXJldHVybiB0PVl2KHQpfHwwLEt2KG4pJiYoYz0hIW4ubGVhZGluZyxpPShmPVwibWF4V2FpdFwiaW4gbik/V3YoWXYobi5tYXhXYWl0KXx8MCx0KTppLGQ9XCJ0cmFpbGluZ1wiaW4gbj8hIW4udHJhaWxpbmc6ZCksbS5jYW5jZWw9ZnVuY3Rpb24oKXt2b2lkIDAhPT11JiZjbGVhclRpbWVvdXQodSksbD0wLHI9cz1vPXU9dm9pZCAwfSxtLmZsdXNoPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXU/YTp5KHF2KCkpfSxtfSxKdj1uKChmdW5jdGlvbih0LG4pe3ZhciByPVwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfX1wiLG89OTAwNzE5OTI1NDc0MDk5MSxpPVwiW29iamVjdCBBcmd1bWVudHNdXCIsYT1cIltvYmplY3QgQm9vbGVhbl1cIix1PVwiW29iamVjdCBEYXRlXVwiLHM9XCJbb2JqZWN0IEZ1bmN0aW9uXVwiLGw9XCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXVwiLGM9XCJbb2JqZWN0IE1hcF1cIixmPVwiW29iamVjdCBOdW1iZXJdXCIsZD1cIltvYmplY3QgT2JqZWN0XVwiLHA9XCJbb2JqZWN0IFByb21pc2VdXCIsaD1cIltvYmplY3QgUmVnRXhwXVwiLGc9XCJbb2JqZWN0IFNldF1cIix2PVwiW29iamVjdCBTdHJpbmddXCIseT1cIltvYmplY3QgU3ltYm9sXVwiLG09XCJbb2JqZWN0IFdlYWtNYXBdXCIsYj1cIltvYmplY3QgQXJyYXlCdWZmZXJdXCIsdz1cIltvYmplY3QgRGF0YVZpZXddXCIsRT1cIltvYmplY3QgRmxvYXQzMkFycmF5XVwiLEQ9XCJbb2JqZWN0IEZsb2F0NjRBcnJheV1cIixTPVwiW29iamVjdCBJbnQ4QXJyYXldXCIseD1cIltvYmplY3QgSW50MTZBcnJheV1cIixDPVwiW29iamVjdCBJbnQzMkFycmF5XVwiLEE9XCJbb2JqZWN0IFVpbnQ4QXJyYXldXCIsTz1cIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldXCIsaz1cIltvYmplY3QgVWludDE2QXJyYXldXCIsQj1cIltvYmplY3QgVWludDMyQXJyYXldXCIsRj0vXFx3KiQvLFQ9L15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLyxfPS9eKD86MHxbMS05XVxcZCopJC8sUD17fTtQW2ldPVBbXCJbb2JqZWN0IEFycmF5XVwiXT1QW2JdPVBbd109UFthXT1QW3VdPVBbRV09UFtEXT1QW1NdPVBbeF09UFtDXT1QW2NdPVBbZl09UFtkXT1QW2hdPVBbZ109UFt2XT1QW3ldPVBbQV09UFtPXT1QW2tdPVBbQl09ITAsUFtcIltvYmplY3QgRXJyb3JdXCJdPVBbc109UFttXT0hMTt2YXIgaj1cIm9iamVjdFwiPT10eXBlb2YgZSYmZSYmZS5PYmplY3Q9PT1PYmplY3QmJmUsTj1cIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsST1qfHxOfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksTD1uJiYhbi5ub2RlVHlwZSYmbixSPUwmJnQmJiF0Lm5vZGVUeXBlJiZ0LE09UiYmUi5leHBvcnRzPT09TDtmdW5jdGlvbiB6KGUsdCl7cmV0dXJuIGUuc2V0KHRbMF0sdFsxXSksZX1mdW5jdGlvbiAkKGUsdCl7cmV0dXJuIGUuYWRkKHQpLGV9ZnVuY3Rpb24gSChlLHQsbixyKXt2YXIgbz0tMSxpPWU/ZS5sZW5ndGg6MDtmb3IociYmaSYmKG49ZVsrK29dKTsrK288aTspbj10KG4sZVtvXSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFYoZSl7dmFyIHQ9ITE7aWYobnVsbCE9ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZS50b1N0cmluZyl0cnl7dD0hIShlK1wiXCIpfWNhdGNoKGUpe31yZXR1cm4gdH1mdW5jdGlvbiBVKGUpe3ZhciB0PS0xLG49QXJyYXkoZS5zaXplKTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe25bKyt0XT1bcixlXX0pKSxufWZ1bmN0aW9uIFcoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUodChuKSl9fWZ1bmN0aW9uIEcoZSl7dmFyIHQ9LTEsbj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bKyt0XT1lfSkpLG59dmFyIHE9QXJyYXkucHJvdG90eXBlLEs9RnVuY3Rpb24ucHJvdG90eXBlLFk9T2JqZWN0LnByb3RvdHlwZSxYPUlbXCJfX2NvcmUtanNfc2hhcmVkX19cIl0sWj1mdW5jdGlvbigpe3ZhciBlPS9bXi5dKyQvLmV4ZWMoWCYmWC5rZXlzJiZYLmtleXMuSUVfUFJPVE98fFwiXCIpO3JldHVybiBlP1wiU3ltYm9sKHNyYylfMS5cIitlOlwiXCJ9KCksSj1LLnRvU3RyaW5nLFE9WS5oYXNPd25Qcm9wZXJ0eSxlZT1ZLnRvU3RyaW5nLHRlPVJlZ0V4cChcIl5cIitKLmNhbGwoUSkucmVwbGFjZSgvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csXCJcXFxcJCZcIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZyxcIiQxLio/XCIpK1wiJFwiKSxuZT1NP0kuQnVmZmVyOnZvaWQgMCxyZT1JLlN5bWJvbCxvZT1JLlVpbnQ4QXJyYXksaWU9VyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KSxhZT1PYmplY3QuY3JlYXRlLHVlPVkucHJvcGVydHlJc0VudW1lcmFibGUsc2U9cS5zcGxpY2UsbGU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxjZT1uZT9uZS5pc0J1ZmZlcjp2b2lkIDAsZmU9VyhPYmplY3Qua2V5cyxPYmplY3QpLGRlPUxlKEksXCJEYXRhVmlld1wiKSxwZT1MZShJLFwiTWFwXCIpLGhlPUxlKEksXCJQcm9taXNlXCIpLGdlPUxlKEksXCJTZXRcIiksdmU9TGUoSSxcIldlYWtNYXBcIikseWU9TGUoT2JqZWN0LFwiY3JlYXRlXCIpLG1lPUhlKGRlKSxiZT1IZShwZSksd2U9SGUoaGUpLEVlPUhlKGdlKSxEZT1IZSh2ZSksU2U9cmU/cmUucHJvdG90eXBlOnZvaWQgMCx4ZT1TZT9TZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBDZShlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBBZShlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBPZShlKXt2YXIgdD0tMSxuPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBrZShlKXt0aGlzLl9fZGF0YV9fPW5ldyBBZShlKX1mdW5jdGlvbiBCZShlLHQpe3ZhciBuPVVlKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiEhZSYmXCJvYmplY3RcIj09dHlwZW9mIGV9KGUpJiZXZShlKX0oZSkmJlEuY2FsbChlLFwiY2FsbGVlXCIpJiYoIXVlLmNhbGwoZSxcImNhbGxlZVwiKXx8ZWUuY2FsbChlKT09aSl9KGUpP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPS0xLHI9QXJyYXkoZSk7KytuPGU7KXJbbl09dChuKTtyZXR1cm4gcn0oZS5sZW5ndGgsU3RyaW5nKTpbXSxyPW4ubGVuZ3RoLG89ISFyO2Zvcih2YXIgYSBpbiBlKSF0JiYhUS5jYWxsKGUsYSl8fG8mJihcImxlbmd0aFwiPT1hfHx6ZShhLHIpKXx8bi5wdXNoKGEpO3JldHVybiBufWZ1bmN0aW9uIEZlKGUsdCxuKXt2YXIgcj1lW3RdO1EuY2FsbChlLHQpJiZWZShyLG4pJiYodm9pZCAwIT09bnx8dCBpbiBlKXx8KGVbdF09bil9ZnVuY3Rpb24gVGUoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7bi0tOylpZihWZShlW25dWzBdLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIF9lKGUsdCxuLHIsbyxwLG0pe3ZhciBUO2lmKHImJihUPXA/cihlLG8scCxtKTpyKGUpKSx2b2lkIDAhPT1UKXJldHVybiBUO2lmKCFLZShlKSlyZXR1cm4gZTt2YXIgXz1VZShlKTtpZihfKXtpZihUPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLG49ZS5jb25zdHJ1Y3Rvcih0KTt0JiZcInN0cmluZ1wiPT10eXBlb2YgZVswXSYmUS5jYWxsKGUsXCJpbmRleFwiKSYmKG4uaW5kZXg9ZS5pbmRleCxuLmlucHV0PWUuaW5wdXQpO3JldHVybiBufShlKSwhdClyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj0tMSxyPWUubGVuZ3RoO3R8fCh0PUFycmF5KHIpKTtmb3IoOysrbjxyOyl0W25dPWVbbl07cmV0dXJuIHR9KGUsVCl9ZWxzZXt2YXIgaj1NZShlKSxOPWo9PXN8fGo9PWw7aWYoR2UoZSkpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4gZS5zbGljZSgpO3ZhciBuPW5ldyBlLmNvbnN0cnVjdG9yKGUubGVuZ3RoKTtyZXR1cm4gZS5jb3B5KG4pLG59KGUsdCk7aWYoaj09ZHx8aj09aXx8TiYmIXApe2lmKFYoZSkpcmV0dXJuIHA/ZTp7fTtpZihUPWZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuY29uc3RydWN0b3J8fCRlKGUpP3t9Oih0PWllKGUpLEtlKHQpP2FlKHQpOnt9KTt2YXIgdH0oTj97fTplKSwhdClyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gTmUoZSxSZShlKSx0KX0oZSxmdW5jdGlvbihlLHQpe3JldHVybiBlJiZOZSh0LFllKHQpLGUpfShULGUpKX1lbHNle2lmKCFQW2pdKXJldHVybiBwP2U6e307VD1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz1lLmNvbnN0cnVjdG9yO3N3aXRjaCh0KXtjYXNlIGI6cmV0dXJuIGplKGUpO2Nhc2UgYTpjYXNlIHU6cmV0dXJuIG5ldyBvKCtlKTtjYXNlIHc6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49dD9qZShlLmJ1ZmZlcik6ZS5idWZmZXI7cmV0dXJuIG5ldyBlLmNvbnN0cnVjdG9yKG4sZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9KGUscik7Y2FzZSBFOmNhc2UgRDpjYXNlIFM6Y2FzZSB4OmNhc2UgQzpjYXNlIEE6Y2FzZSBPOmNhc2UgazpjYXNlIEI6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49dD9qZShlLmJ1ZmZlcik6ZS5idWZmZXI7cmV0dXJuIG5ldyBlLmNvbnN0cnVjdG9yKG4sZS5ieXRlT2Zmc2V0LGUubGVuZ3RoKX0oZSxyKTtjYXNlIGM6cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSCh0P24oVShlKSwhMCk6VShlKSx6LG5ldyBlLmNvbnN0cnVjdG9yKX0oZSxyLG4pO2Nhc2UgZjpjYXNlIHY6cmV0dXJuIG5ldyBvKGUpO2Nhc2UgaDpyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UsRi5leGVjKGUpKTtyZXR1cm4gdC5sYXN0SW5kZXg9ZS5sYXN0SW5kZXgsdH0oZSk7Y2FzZSBnOnJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIEgodD9uKEcoZSksITApOkcoZSksJCxuZXcgZS5jb25zdHJ1Y3Rvcil9KGUscixuKTtjYXNlIHk6cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB4ZT9PYmplY3QoeGUuY2FsbChlKSk6e319KGUpfX0oZSxqLF9lLHQpfX1tfHwobT1uZXcga2UpO3ZhciBJPW0uZ2V0KGUpO2lmKEkpcmV0dXJuIEk7aWYobS5zZXQoZSxUKSwhXyl2YXIgTD1uP2Z1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlLHQsbil7dmFyIHI9dChlKTtyZXR1cm4gVWUoZSk/cjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0tMSxyPXQubGVuZ3RoLG89ZS5sZW5ndGg7KytuPHI7KWVbbytuXT10W25dO3JldHVybiBlfShyLG4oZSkpfShlLFllLFJlKX0oZSk6WWUoZSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPS0xLHI9ZT9lLmxlbmd0aDowOysrbjxyJiYhMSE9PXQoZVtuXSxuLGUpOyk7fShMfHxlLChmdW5jdGlvbihvLGkpe0wmJihvPWVbaT1vXSksRmUoVCxpLF9lKG8sdCxuLHIsaSxlLG0pKX0pKSxUfWZ1bmN0aW9uIFBlKGUpe3JldHVybiEoIUtlKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4hIVomJlogaW4gZX0oZSkpJiYocWUoZSl8fFYoZSk/dGU6VCkudGVzdChIZShlKSl9ZnVuY3Rpb24gamUoZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IG9lKHQpLnNldChuZXcgb2UoZSkpLHR9ZnVuY3Rpb24gTmUoZSx0LG4scil7bnx8KG49e30pO2Zvcih2YXIgbz0tMSxpPXQubGVuZ3RoOysrbzxpOyl7dmFyIGE9dFtvXSx1PXI/cihuW2FdLGVbYV0sYSxuLGUpOnZvaWQgMDtGZShuLGEsdm9pZCAwPT09dT9lW2FdOnUpfXJldHVybiBufWZ1bmN0aW9uIEllKGUsdCl7dmFyIG4scixvPWUuX19kYXRhX187cmV0dXJuKFwic3RyaW5nXCI9PShyPXR5cGVvZihuPXQpKXx8XCJudW1iZXJcIj09cnx8XCJzeW1ib2xcIj09cnx8XCJib29sZWFuXCI9PXI/XCJfX3Byb3RvX19cIiE9PW46bnVsbD09PW4pP29bXCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJzdHJpbmdcIjpcImhhc2hcIl06by5tYXB9ZnVuY3Rpb24gTGUoZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfShlLHQpO3JldHVybiBQZShuKT9uOnZvaWQgMH1DZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPXllP3llKG51bGwpOnt9fSxDZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV19LENlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztpZih5ZSl7dmFyIG49dFtlXTtyZXR1cm4gbj09PXI/dm9pZCAwOm59cmV0dXJuIFEuY2FsbCh0LGUpP3RbZV06dm9pZCAwfSxDZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIHllP3ZvaWQgMCE9PXRbZV06US5jYWxsKHQsZSl9LENlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fX2RhdGFfX1tlXT15ZSYmdm9pZCAwPT09dD9yOnQsdGhpc30sQWUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXX0sQWUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49VGUodCxlKTtyZXR1cm4hKG48MCkmJihuPT10Lmxlbmd0aC0xP3QucG9wKCk6c2UuY2FsbCh0LG4sMSksITApfSxBZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj1UZSh0LGUpO3JldHVybiBuPDA/dm9pZCAwOnRbbl1bMV19LEFlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFRlKHRoaXMuX19kYXRhX18sZSk+LTF9LEFlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fLHI9VGUobixlKTtyZXR1cm4gcjwwP24ucHVzaChbZSx0XSk6bltyXVsxXT10LHRoaXN9LE9lLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189e2hhc2g6bmV3IENlLG1hcDpuZXcocGV8fEFlKSxzdHJpbmc6bmV3IENlfX0sT2UucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gSWUodGhpcyxlKS5kZWxldGUoZSl9LE9lLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEllKHRoaXMsZSkuZ2V0KGUpfSxPZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBJZSh0aGlzLGUpLmhhcyhlKX0sT2UucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBJZSh0aGlzLGUpLnNldChlLHQpLHRoaXN9LGtlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IEFlfSxrZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmRlbGV0ZShlKX0sa2UucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoZSl9LGtlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfSxrZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXztpZihuIGluc3RhbmNlb2YgQWUpe3ZhciByPW4uX19kYXRhX187aWYoIXBlfHxyLmxlbmd0aDwxOTkpcmV0dXJuIHIucHVzaChbZSx0XSksdGhpcztuPXRoaXMuX19kYXRhX189bmV3IE9lKHIpfXJldHVybiBuLnNldChlLHQpLHRoaXN9O3ZhciBSZT1sZT9XKGxlLE9iamVjdCk6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sTWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGVlLmNhbGwoZSl9O2Z1bmN0aW9uIHplKGUsdCl7cmV0dXJuISEodD1udWxsPT10P286dCkmJihcIm51bWJlclwiPT10eXBlb2YgZXx8Xy50ZXN0KGUpKSYmZT4tMSYmZSUxPT0wJiZlPHR9ZnVuY3Rpb24gJGUoZSl7dmFyIHQ9ZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4gZT09PShcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0LnByb3RvdHlwZXx8WSl9ZnVuY3Rpb24gSGUoZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiBKLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZStcIlwifWNhdGNoKGUpe319cmV0dXJuXCJcIn1mdW5jdGlvbiBWZShlLHQpe3JldHVybiBlPT09dHx8ZSE9ZSYmdCE9dH0oZGUmJk1lKG5ldyBkZShuZXcgQXJyYXlCdWZmZXIoMSkpKSE9d3x8cGUmJk1lKG5ldyBwZSkhPWN8fGhlJiZNZShoZS5yZXNvbHZlKCkpIT1wfHxnZSYmTWUobmV3IGdlKSE9Z3x8dmUmJk1lKG5ldyB2ZSkhPW0pJiYoTWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZWUuY2FsbChlKSxuPXQ9PWQ/ZS5jb25zdHJ1Y3Rvcjp2b2lkIDAscj1uP0hlKG4pOnZvaWQgMDtpZihyKXN3aXRjaChyKXtjYXNlIG1lOnJldHVybiB3O2Nhc2UgYmU6cmV0dXJuIGM7Y2FzZSB3ZTpyZXR1cm4gcDtjYXNlIEVlOnJldHVybiBnO2Nhc2UgRGU6cmV0dXJuIG19cmV0dXJuIHR9KTt2YXIgVWU9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBXZShlKXtyZXR1cm4gbnVsbCE9ZSYmZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+LTEmJmUlMT09MCYmZTw9b30oZS5sZW5ndGgpJiYhcWUoZSl9dmFyIEdlPWNlfHxmdW5jdGlvbigpe3JldHVybiExfTtmdW5jdGlvbiBxZShlKXt2YXIgdD1LZShlKT9lZS5jYWxsKGUpOlwiXCI7cmV0dXJuIHQ9PXN8fHQ9PWx9ZnVuY3Rpb24gS2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuISFlJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX1mdW5jdGlvbiBZZShlKXtyZXR1cm4gV2UoZSk/QmUoZSk6ZnVuY3Rpb24oZSl7aWYoISRlKGUpKXJldHVybiBmZShlKTt2YXIgdD1bXTtmb3IodmFyIG4gaW4gT2JqZWN0KGUpKVEuY2FsbChlLG4pJiZcImNvbnN0cnVjdG9yXCIhPW4mJnQucHVzaChuKTtyZXR1cm4gdH0oZSl9dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBfZShlLCEwLCEwKX19KSk7ZnVuY3Rpb24gUXYoZSx0KXtpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byB1c2UgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7cmV0dXJuIGV9dmFyIGV5PTA7ZnVuY3Rpb24gdHkoZSl7cmV0dXJuXCJfX3ByaXZhdGVfXCIrZXkrKytcIl9cIitlfWZ1bmN0aW9uIG55KGUsdCxuKXtjb25zdCByPVtdO3JldHVybiBlLmZvckVhY2goKGU9Plwic3RyaW5nXCIhPXR5cGVvZiBlP3IucHVzaChlKTp0W1N5bWJvbC5zcGxpdF0oZSkuZm9yRWFjaCgoKGUsdCxvKT0+e1wiXCIhPT1lJiZyLnB1c2goZSksdDxvLmxlbmd0aC0xJiZyLnB1c2gobil9KSkpKSxyfVxuLyoqXG4gKiBUYWtlcyBhIHN0cmluZyB3aXRoIHBsYWNlaG9sZGVyIHZhcmlhYmxlcyBsaWtlIGAle3NtYXJ0X2NvdW50fSBmaWxlIHNlbGVjdGVkYFxuICogYW5kIHJlcGxhY2VzIGl0IHdpdGggdmFsdWVzIGZyb20gb3B0aW9ucyBge3NtYXJ0X2NvdW50OiA1fWBcbiAqXG4gKiBAbGljZW5zZSBodHRwczovL2dpdGh1Yi5jb20vYWlyYm5iL3BvbHlnbG90LmpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FpcmJuYi9wb2x5Z2xvdC5qcy9ibG9iL21hc3Rlci9saWIvcG9seWdsb3QuanMjTDI5OVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwaHJhc2UgdGhhdCBuZWVkcyBpbnRlcnBvbGF0aW9uLCB3aXRoIHBsYWNlaG9sZGVyc1xuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgd2l0aCB2YWx1ZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVwbGFjZSBwbGFjZWhvbGRlcnNcbiAqIEByZXR1cm5zIHthbnlbXX0gaW50ZXJwb2xhdGVkXG4gKi9mdW5jdGlvbiByeShlLHQpe2NvbnN0IG49L1xcJC9nO2xldCByPVtlXTtpZihudWxsPT10KXJldHVybiByO2Zvcihjb25zdCBlIG9mIE9iamVjdC5rZXlzKHQpKWlmKFwiX1wiIT09ZSl7bGV0IG89dFtlXTtcInN0cmluZ1wiPT10eXBlb2YgbyYmKG89bltTeW1ib2wucmVwbGFjZV0obyxcIiQkJCRcIikpLHI9bnkocixuZXcgUmVnRXhwKGAlXFxcXHske2V9XFxcXH1gLFwiZ1wiKSxvKX1yZXR1cm4gcn12YXIgb3k9KFh2PXR5KFwiYXBwbHlcIiksY2xhc3N7Y29uc3RydWN0b3IoZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsWHYse3ZhbHVlOml5fSksdGhpcy5sb2NhbGU9e3N0cmluZ3M6e30scGx1cmFsaXplOmU9PjE9PT1lPzA6MX0sQXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2goUXYodGhpcyxYdilbWHZdLHRoaXMpOlF2KHRoaXMsWHYpW1h2XShlKX10cmFuc2xhdGUoZSx0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVBcnJheShlLHQpLmpvaW4oXCJcIil9dHJhbnNsYXRlQXJyYXkoZSx0KXtpZighZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9KHRoaXMubG9jYWxlLnN0cmluZ3MsZSkpdGhyb3cgbmV3IEVycm9yKGBtaXNzaW5nIHN0cmluZzogJHtlfWApO2NvbnN0IG49dGhpcy5sb2NhbGUuc3RyaW5nc1tlXTtpZihcIm9iamVjdFwiPT10eXBlb2Ygbil7aWYodCYmdm9pZCAwIT09dC5zbWFydF9jb3VudCl7cmV0dXJuIHJ5KG5bdGhpcy5sb2NhbGUucGx1cmFsaXplKHQuc21hcnRfY291bnQpXSx0KX10aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0ZWQgdG8gdXNlIGEgc3RyaW5nIHdpdGggcGx1cmFsIGZvcm1zLCBidXQgbm8gdmFsdWUgd2FzIGdpdmVuIGZvciAle3NtYXJ0X2NvdW50fVwiKX1yZXR1cm4gcnkobix0KX19KTtmdW5jdGlvbiBpeShlKXtpZihudWxsPT1lfHwhZS5zdHJpbmdzKXJldHVybjtjb25zdCB0PXRoaXMubG9jYWxlO3RoaXMubG9jYWxlPXsuLi50LHN0cmluZ3M6ey4uLnQuc3RyaW5ncywuLi5lLnN0cmluZ3N9fSx0aGlzLmxvY2FsZS5wbHVyYWxpemU9ZS5wbHVyYWxpemV8fHQucGx1cmFsaXplfXZhciBheT1mdW5jdGlvbigpe3ZhciBlPXt9LHQ9ZS5fZm5zPXt9O3JldHVybiBlLmVtaXQ9ZnVuY3Rpb24oZSxuLHIsbyxpLGEsdSl7dmFyIHM9ZnVuY3Rpb24oZSl7dmFyIG49dFtlXT90W2VdOltdLHI9ZS5pbmRleE9mKFwiOlwiKSxvPS0xPT09cj9bZV06W2Uuc3Vic3RyaW5nKDAsciksZS5zdWJzdHJpbmcocisxKV0saT1PYmplY3Qua2V5cyh0KSxhPTAsdT1pLmxlbmd0aDtmb3IoO2E8dTthKyspe3ZhciBzPWlbYV07aWYoXCIqXCI9PT1zJiYobj1uLmNvbmNhdCh0W3NdKSksMj09PW8ubGVuZ3RoJiZvWzBdPT09cyl7bj1uLmNvbmNhdCh0W3NdKTticmVha319cmV0dXJuIG59KGUpO3MubGVuZ3RoJiZmdW5jdGlvbihlLHQsbil7dmFyIHI9MCxvPXQubGVuZ3RoO2Zvcig7cjxvJiZ0W3JdO3IrKyl0W3JdLmV2ZW50PWUsdFtyXS5hcHBseSh0W3JdLG4pfShlLHMsW24scixvLGksYSx1XSl9LGUub249ZnVuY3Rpb24oZSxuKXt0W2VdfHwodFtlXT1bXSksdFtlXS5wdXNoKG4pfSxlLm9uY2U9ZnVuY3Rpb24odCxuKXt0aGlzLm9uKHQsKGZ1bmN0aW9uIHIoKXtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLm9mZih0LHIpfSkpfSxlLm9mZj1mdW5jdGlvbihlLHQpe3ZhciBuPVtdO2lmKGUmJnQpZm9yKHZhciByPXRoaXMuX2Zuc1tlXSxvPTAsaT1yP3IubGVuZ3RoOjA7bzxpO28rKylyW29dIT09dCYmbi5wdXNoKHJbb10pO24ubGVuZ3RoP3RoaXMuX2Zuc1tlXT1uOmRlbGV0ZSB0aGlzLl9mbnNbZV19LGV9O3ZhciB1eT17dXJsQWxwaGFiZXQ6XCJ1c2VhbmRvbS0yNlQxOTgzNDBQWDc1cHhKQUNLVkVSWU1JTkRCVVNIV09MRl9HUVpiZmdoamtscXZ3eXpyaWN0XCJ9O2xldHt1cmxBbHBoYWJldDpzeX09dXksbHk9ZT0+Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShlKSksY3k9KGUsdCxuKT0+e2xldCByPSgyPDxNYXRoLmxvZyhlLmxlbmd0aC0xKS9NYXRoLkxOMiktMSxvPS1+KDEuNipyKnQvZS5sZW5ndGgpO3JldHVybigpPT57bGV0IGk9XCJcIjtmb3IoOzspe2xldCBhPW4obyksdT1vO2Zvcig7dS0tOylpZihpKz1lW2FbdV0mcl18fFwiXCIsaS5sZW5ndGg9PT10KXJldHVybiBpfX19O3ZhciBmeT17bmFub2lkOihlPTIxKT0+e2xldCB0PVwiXCIsbj1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KGUpKTtmb3IoO2UtLTspe2xldCByPTYzJm5bZV07dCs9cjwzNj9yLnRvU3RyaW5nKDM2KTpyPDYyPyhyLTI2KS50b1N0cmluZygzNikudG9VcHBlckNhc2UoKTpyPDYzP1wiX1wiOlwiLVwifXJldHVybiB0fSxjdXN0b21BbHBoYWJldDooZSx0KT0+Y3koZSx0LGx5KSxjdXN0b21SYW5kb206Y3ksdXJsQWxwaGFiZXQ6c3kscmFuZG9tOmx5fSxkeT1mdW5jdGlvbihlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZXx8aXNOYU4oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgbnVtYmVyLCBnb3QgXCIrdHlwZW9mIGUpO3ZhciB0PWU8MCxuPVtcIkJcIixcIktCXCIsXCJNQlwiLFwiR0JcIixcIlRCXCIsXCJQQlwiLFwiRUJcIixcIlpCXCIsXCJZQlwiXTtpZih0JiYoZT0tZSksZTwxKXJldHVybih0P1wiLVwiOlwiXCIpK2UrXCIgQlwiO3ZhciByPU1hdGgubWluKE1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5sb2coMTAyNCkpLG4ubGVuZ3RoLTEpO2U9TnVtYmVyKGUvTWF0aC5wb3coMTAyNCxyKSk7dmFyIG89bltyXTtyZXR1cm4gZT49MTB8fGUlMT09MD8odD9cIi1cIjpcIlwiKStlLnRvRml4ZWQoMCkrXCIgXCIrbzoodD9cIi1cIjpcIlwiKStlLnRvRml4ZWQoMSkrXCIgXCIrb307ZnVuY3Rpb24gcHkoZSx0KXt0aGlzLnRleHQ9ZT1lfHxcIlwiLHRoaXMuaGFzV2lsZD1+ZS5pbmRleE9mKFwiKlwiKSx0aGlzLnNlcGFyYXRvcj10LHRoaXMucGFydHM9ZS5zcGxpdCh0KX1weS5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPSEwLG89dGhpcy5wYXJ0cyxpPW8ubGVuZ3RoO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxlIGluc3RhbmNlb2YgU3RyaW5nKWlmKHRoaXMuaGFzV2lsZHx8dGhpcy50ZXh0PT1lKXtmb3Iobj0oZXx8XCJcIikuc3BsaXQodGhpcy5zZXBhcmF0b3IpLHQ9MDtyJiZ0PGk7dCsrKVwiKlwiIT09b1t0XSYmKHI9dDxuLmxlbmd0aCYmb1t0XT09PW5bdF0pO3I9ciYmbn1lbHNlIHI9ITE7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnNwbGljZSlmb3Iocj1bXSx0PWUubGVuZ3RoO3QtLTspdGhpcy5tYXRjaChlW3RdKSYmKHJbci5sZW5ndGhdPWVbdF0pO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpZm9yKHZhciBhIGluIHI9e30sZSl0aGlzLm1hdGNoKGEpJiYoclthXT1lW2FdKTtyZXR1cm4gcn07dmFyIGh5PS9bXFwvXFwrXFwuXS8sZ3k9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uZXcgcHkoZSxufHwvW1xcL1xcLl0vKTtyZXR1cm4gdm9pZCAwIT09dD9yLm1hdGNoKHQpOnJ9KHQsZSxoeSk7cmV0dXJuIG4mJm4ubGVuZ3RoPj0yfXJldHVybiB0P24odC5zcGxpdChcIjtcIilbMF0pOm59O3ZhciB2eT0wO2Z1bmN0aW9uIHl5KGUpe3JldHVyblwiX19wcml2YXRlX1wiK3Z5KysrXCJfXCIrZX12YXIgbXk9eXkoXCJwdWJsaXNoXCIpO2NsYXNzIGJ5e2NvbnN0cnVjdG9yKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsbXkse3ZhbHVlOnd5fSksdGhpcy5zdGF0ZT17fSx0aGlzLmNhbGxiYWNrcz1bXX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLnN0YXRlfXNldFN0YXRlKGUpe2NvbnN0IHQ9ey4uLnRoaXMuc3RhdGV9LG49ey4uLnRoaXMuc3RhdGUsLi4uZX07dGhpcy5zdGF0ZT1uLGZ1bmN0aW9uKGUsdCl7aWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gdXNlIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO3JldHVybiBlfSh0aGlzLG15KVtteV0odCxuLGUpfXN1YnNjcmliZShlKXtyZXR1cm4gdGhpcy5jYWxsYmFja3MucHVzaChlKSwoKT0+e3RoaXMuY2FsbGJhY2tzLnNwbGljZSh0aGlzLmNhbGxiYWNrcy5pbmRleE9mKGUpLDEpfX19ZnVuY3Rpb24gd3koKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTt0aGlzLmNhbGxiYWNrcy5mb3JFYWNoKChlPT57ZSguLi50KX0pKX1ieS5WRVJTSU9OPVwiMi4wLjNcIjt2YXIgRXk9ZnVuY3Rpb24oZSl7Y29uc3QgdD1lLmxhc3RJbmRleE9mKFwiLlwiKTtyZXR1cm4tMT09PXR8fHQ9PT1lLmxlbmd0aC0xP3tuYW1lOmUsZXh0ZW5zaW9uOnZvaWQgMH06e25hbWU6ZS5zbGljZSgwLHQpLGV4dGVuc2lvbjplLnNsaWNlKHQrMSl9fSxEeT17bWQ6XCJ0ZXh0L21hcmtkb3duXCIsbWFya2Rvd246XCJ0ZXh0L21hcmtkb3duXCIsbXA0OlwidmlkZW8vbXA0XCIsbXAzOlwiYXVkaW8vbXAzXCIsc3ZnOlwiaW1hZ2Uvc3ZnK3htbFwiLGpwZzpcImltYWdlL2pwZWdcIixwbmc6XCJpbWFnZS9wbmdcIixnaWY6XCJpbWFnZS9naWZcIixoZWljOlwiaW1hZ2UvaGVpY1wiLGhlaWY6XCJpbWFnZS9oZWlmXCIseWFtbDpcInRleHQveWFtbFwiLHltbDpcInRleHQveWFtbFwiLGNzdjpcInRleHQvY3N2XCIsdHN2OlwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlc1wiLHRhYjpcInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXNcIixhdmk6XCJ2aWRlby94LW1zdmlkZW9cIixta3M6XCJ2aWRlby94LW1hdHJvc2thXCIsbWt2OlwidmlkZW8veC1tYXRyb3NrYVwiLG1vdjpcInZpZGVvL3F1aWNrdGltZVwiLGRvYzpcImFwcGxpY2F0aW9uL21zd29yZFwiLGRvY206XCJhcHBsaWNhdGlvbi92bmQubXMtd29yZC5kb2N1bWVudC5tYWNyb2VuYWJsZWQuMTJcIixkb2N4OlwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnRcIixkb3Q6XCJhcHBsaWNhdGlvbi9tc3dvcmRcIixkb3RtOlwiYXBwbGljYXRpb24vdm5kLm1zLXdvcmQudGVtcGxhdGUubWFjcm9lbmFibGVkLjEyXCIsZG90eDpcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLnRlbXBsYXRlXCIseGxhOlwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsXCIseGxhbTpcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb2VuYWJsZWQuMTJcIix4bGM6XCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIix4bGY6XCJhcHBsaWNhdGlvbi94LXhsaWZmK3htbFwiLHhsbTpcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbFwiLHhsczpcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbFwiLHhsc2I6XCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvZW5hYmxlZC4xMlwiLHhsc206XCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQubWFjcm9lbmFibGVkLjEyXCIseGxzeDpcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0XCIseGx0OlwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsXCIseGx0bTpcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50ZW1wbGF0ZS5tYWNyb2VuYWJsZWQuMTJcIix4bHR4OlwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGVcIix4bHc6XCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIix0eHQ6XCJ0ZXh0L3BsYWluXCIsdGV4dDpcInRleHQvcGxhaW5cIixjb25mOlwidGV4dC9wbGFpblwiLGxvZzpcInRleHQvcGxhaW5cIixwZGY6XCJhcHBsaWNhdGlvbi9wZGZcIix6aXA6XCJhcHBsaWNhdGlvbi96aXBcIixcIjd6XCI6XCJhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWRcIixyYXI6XCJhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkXCIsdGFyOlwiYXBwbGljYXRpb24veC10YXJcIixnejpcImFwcGxpY2F0aW9uL2d6aXBcIixkbWc6XCJhcHBsaWNhdGlvbi94LWFwcGxlLWRpc2tpbWFnZVwifTtmdW5jdGlvbiBTeShlKXtsZXQgdD1cIlwiO3JldHVybiBlLnJlcGxhY2UoL1teQS1aMC05XS9naSwoZT0+KHQrPWAtJHtmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDMyKX0oZSl9YCxcIi9cIikpKSt0fXZhciB4eT1mdW5jdGlvbihlKXtpZihudWxsPT1lJiYoZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yP25hdmlnYXRvci51c2VyQWdlbnQ6bnVsbCksIWUpcmV0dXJuITA7Y29uc3QgdD0vRWRnZVxcLyhcXGQrXFwuXFxkKykvLmV4ZWMoZSk7aWYoIXQpcmV0dXJuITA7Y29uc3Qgbj10WzFdO2xldFtyLG9dPW4uc3BsaXQoXCIuXCIpO3JldHVybiByPXBhcnNlSW50KHIsMTApLG89cGFyc2VJbnQobywxMCkscjwxNXx8MTU9PT1yJiZvPDE1MDYzfHwocj4xOHx8MTg9PT1yJiZvPj0xODIxOCl9O2Z1bmN0aW9uIEN5KGUpe3JldHVybiBlPDEwP2AwJHtlfWA6ZS50b1N0cmluZygpfXZhciBBeT1mdW5jdGlvbigpe2NvbnN0IGU9bmV3IERhdGU7cmV0dXJuYCR7Q3koZS5nZXRIb3VycygpKX06JHtDeShlLmdldE1pbnV0ZXMoKSl9OiR7Q3koZS5nZXRTZWNvbmRzKCkpfWB9O3ZhciBPeT17anVzdEVycm9yc0xvZ2dlcjp7ZGVidWc6KCk9Pnt9LHdhcm46KCk9Pnt9LGVycm9yOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGNvbnNvbGUuZXJyb3IoYFtVcHB5XSBbJHtBeSgpfV1gLC4uLnQpfX0sZGVidWdMb2dnZXI6e2RlYnVnOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGNvbnNvbGUuZGVidWcoYFtVcHB5XSBbJHtBeSgpfV1gLC4uLnQpfSx3YXJuOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGNvbnNvbGUud2FybihgW1VwcHldIFske0F5KCl9XWAsLi4udCl9LGVycm9yOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGNvbnNvbGUuZXJyb3IoYFtVcHB5XSBbJHtBeSgpfV1gLC4uLnQpfX19LGt5PXtzdHJpbmdzOnthZGRCdWxrRmlsZXNGYWlsZWQ6ezA6XCJGYWlsZWQgdG8gYWRkICV7c21hcnRfY291bnR9IGZpbGUgZHVlIHRvIGFuIGludGVybmFsIGVycm9yXCIsMTpcIkZhaWxlZCB0byBhZGQgJXtzbWFydF9jb3VudH0gZmlsZXMgZHVlIHRvIGludGVybmFsIGVycm9yc1wifSx5b3VDYW5Pbmx5VXBsb2FkWDp7MDpcIllvdSBjYW4gb25seSB1cGxvYWQgJXtzbWFydF9jb3VudH0gZmlsZVwiLDE6XCJZb3UgY2FuIG9ubHkgdXBsb2FkICV7c21hcnRfY291bnR9IGZpbGVzXCJ9LHlvdUhhdmVUb0F0TGVhc3RTZWxlY3RYOnswOlwiWW91IGhhdmUgdG8gc2VsZWN0IGF0IGxlYXN0ICV7c21hcnRfY291bnR9IGZpbGVcIiwxOlwiWW91IGhhdmUgdG8gc2VsZWN0IGF0IGxlYXN0ICV7c21hcnRfY291bnR9IGZpbGVzXCJ9LGV4Y2VlZHNTaXplOlwiJXtmaWxlfSBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIG9mICV7c2l6ZX1cIixtaXNzaW5nUmVxdWlyZWRNZXRhRmllbGQ6XCJNaXNzaW5nIHJlcXVpcmVkIG1ldGEgZmllbGRzXCIsbWlzc2luZ1JlcXVpcmVkTWV0YUZpZWxkT25GaWxlOlwiTWlzc2luZyByZXF1aXJlZCBtZXRhIGZpZWxkcyBpbiAle2ZpbGVOYW1lfVwiLGluZmVyaW9yU2l6ZTpcIlRoaXMgZmlsZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGFsbG93ZWQgc2l6ZSBvZiAle3NpemV9XCIseW91Q2FuT25seVVwbG9hZEZpbGVUeXBlczpcIllvdSBjYW4gb25seSB1cGxvYWQ6ICV7dHlwZXN9XCIsbm9Nb3JlRmlsZXNBbGxvd2VkOlwiQ2Fubm90IGFkZCBtb3JlIGZpbGVzXCIsbm9EdXBsaWNhdGVzOlwiQ2Fubm90IGFkZCB0aGUgZHVwbGljYXRlIGZpbGUgJyV7ZmlsZU5hbWV9JywgaXQgYWxyZWFkeSBleGlzdHNcIixjb21wYW5pb25FcnJvcjpcIkNvbm5lY3Rpb24gd2l0aCBDb21wYW5pb24gZmFpbGVkXCIsYXV0aEFib3J0ZWQ6XCJBdXRoZW50aWNhdGlvbiBhYm9ydGVkXCIsY29tcGFuaW9uVW5hdXRob3JpemVIaW50OlwiVG8gdW5hdXRob3JpemUgdG8geW91ciAle3Byb3ZpZGVyfSBhY2NvdW50LCBwbGVhc2UgZ28gdG8gJXt1cmx9XCIsZmFpbGVkVG9VcGxvYWQ6XCJGYWlsZWQgdG8gdXBsb2FkICV7ZmlsZX1cIixub0ludGVybmV0Q29ubmVjdGlvbjpcIk5vIEludGVybmV0IGNvbm5lY3Rpb25cIixjb25uZWN0ZWRUb0ludGVybmV0OlwiQ29ubmVjdGVkIHRvIHRoZSBJbnRlcm5ldFwiLG5vRmlsZXNGb3VuZDpcIllvdSBoYXZlIG5vIGZpbGVzIG9yIGZvbGRlcnMgaGVyZVwiLHNlbGVjdFg6ezA6XCJTZWxlY3QgJXtzbWFydF9jb3VudH1cIiwxOlwiU2VsZWN0ICV7c21hcnRfY291bnR9XCJ9LGFsbEZpbGVzRnJvbUZvbGRlck5hbWVkOlwiQWxsIGZpbGVzIGZyb20gZm9sZGVyICV7bmFtZX1cIixvcGVuRm9sZGVyTmFtZWQ6XCJPcGVuIGZvbGRlciAle25hbWV9XCIsY2FuY2VsOlwiQ2FuY2VsXCIsbG9nT3V0OlwiTG9nIG91dFwiLGZpbHRlcjpcIkZpbHRlclwiLHJlc2V0RmlsdGVyOlwiUmVzZXQgZmlsdGVyXCIsbG9hZGluZzpcIkxvYWRpbmcuLi5cIixhdXRoZW50aWNhdGVXaXRoVGl0bGU6XCJQbGVhc2UgYXV0aGVudGljYXRlIHdpdGggJXtwbHVnaW5OYW1lfSB0byBzZWxlY3QgZmlsZXNcIixhdXRoZW50aWNhdGVXaXRoOlwiQ29ubmVjdCB0byAle3BsdWdpbk5hbWV9XCIsc2lnbkluV2l0aEdvb2dsZTpcIlNpZ24gaW4gd2l0aCBHb29nbGVcIixzZWFyY2hJbWFnZXM6XCJTZWFyY2ggZm9yIGltYWdlc1wiLGVudGVyVGV4dFRvU2VhcmNoOlwiRW50ZXIgdGV4dCB0byBzZWFyY2ggZm9yIGltYWdlc1wiLGJhY2tUb1NlYXJjaDpcIkJhY2sgdG8gU2VhcmNoXCIsZW1wdHlGb2xkZXJBZGRlZDpcIk5vIGZpbGVzIHdlcmUgYWRkZWQgZnJvbSBlbXB0eSBmb2xkZXJcIixmb2xkZXJBbHJlYWR5QWRkZWQ6J1RoZSBmb2xkZXIgXCIle2ZvbGRlcn1cIiB3YXMgYWxyZWFkeSBhZGRlZCcsZm9sZGVyQWRkZWQ6ezA6XCJBZGRlZCAle3NtYXJ0X2NvdW50fSBmaWxlIGZyb20gJXtmb2xkZXJ9XCIsMTpcIkFkZGVkICV7c21hcnRfY291bnR9IGZpbGVzIGZyb20gJXtmb2xkZXJ9XCJ9fX0sQnk9Znk7bGV0IEZ5LFR5O2Z1bmN0aW9uIF95KGUsdCl7aWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gdXNlIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO3JldHVybiBlfXZhciBQeT0wO2Z1bmN0aW9uIGp5KGUpe3JldHVyblwiX19wcml2YXRlX1wiK1B5KysrXCJfXCIrZX1jb25zdHtuYW5vaWQ6Tnl9PUJ5LHtqdXN0RXJyb3JzTG9nZ2VyOkl5LGRlYnVnTG9nZ2VyOkx5fT1PeTtjbGFzcyBSeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlzUmVzdHJpY3Rpb249ITB9fVwidW5kZWZpbmVkXCI9PXR5cGVvZiBBZ2dyZWdhdGVFcnJvciYmKGdsb2JhbFRoaXMuQWdncmVnYXRlRXJyb3I9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKHQpLHRoaXMuZXJyb3JzPWV9fSk7Y2xhc3MgTXkgZXh0ZW5kcyBBZ2dyZWdhdGVFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pc1Jlc3RyaWN0aW9uPSEwfX12YXIgenk9ankoXCJwbHVnaW5zXCIpLCR5PWp5KFwic3RvcmVVbnN1YnNjcmliZVwiKSxIeT1qeShcImVtaXR0ZXJcIiksVnk9ankoXCJwcmVQcm9jZXNzb3JzXCIpLFV5PWp5KFwidXBsb2FkZXJzXCIpLFd5PWp5KFwicG9zdFByb2Nlc3NvcnNcIiksR3k9ankoXCJjaGVja1Jlc3RyaWN0aW9uc1wiKSxxeT1qeShcImNoZWNrTWluTnVtYmVyT2ZGaWxlc1wiKSxLeT1qeShcImNoZWNrUmVxdWlyZWRNZXRhRmllbGRzT25GaWxlXCIpLFl5PWp5KFwiY2hlY2tSZXF1aXJlZE1ldGFGaWVsZHNcIiksWHk9ankoXCJzaG93T3JMb2dFcnJvckFuZFRocm93XCIpLFp5PWp5KFwiYXNzZXJ0TmV3VXBsb2FkQWxsb3dlZFwiKSxKeT1qeShcImNoZWNrQW5kQ3JlYXRlRmlsZVN0YXRlT2JqZWN0XCIpLFF5PWp5KFwic3RhcnRJZkF1dG9Qcm9jZWVkXCIpLGVtPWp5KFwiYWRkTGlzdGVuZXJzXCIpLHRtPWp5KFwidXBkYXRlT25saW5lU3RhdHVzXCIpLG5tPWp5KFwiY3JlYXRlVXBsb2FkXCIpLHJtPWp5KFwiZ2V0VXBsb2FkXCIpLG9tPWp5KFwicmVtb3ZlVXBsb2FkXCIpLGltPWp5KFwicnVuVXBsb2FkXCIpO0Z5PVN5bWJvbC5mb3IoXCJ1cHB5IHRlc3Q6IGdldFBsdWdpbnNcIiksVHk9U3ltYm9sLmZvcihcInVwcHkgdGVzdDogY3JlYXRlVXBsb2FkXCIpO2NsYXNzIGFte2NvbnN0cnVjdG9yKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGltLHt2YWx1ZTpibX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLG9tLHt2YWx1ZTptbX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHJtLHt2YWx1ZTp5bX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLG5tLHt2YWx1ZTp2bX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGVtLHt2YWx1ZTpnbX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFF5LHt2YWx1ZTpobX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLEp5LHt2YWx1ZTpwbX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFp5LHt2YWx1ZTpkbX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFh5LHt2YWx1ZTpmbX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFl5LHt2YWx1ZTpjbX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLEt5LHt2YWx1ZTpsbX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHF5LHt2YWx1ZTpzbX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLEd5LHt2YWx1ZTp1bX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHp5LHt3cml0YWJsZTohMCx2YWx1ZTpPYmplY3QuY3JlYXRlKG51bGwpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJHkse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLEh5LHt3cml0YWJsZTohMCx2YWx1ZTpheSgpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsVnkse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBTZXR9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxVeSx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IFNldH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFd5LHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgU2V0fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdG0se3dyaXRhYmxlOiEwLHZhbHVlOnRoaXMudXBkYXRlT25saW5lU3RhdHVzLmJpbmQodGhpcyl9KSx0aGlzLmRlZmF1bHRMb2NhbGU9a3k7Y29uc3QgdD17aWQ6XCJ1cHB5XCIsYXV0b1Byb2NlZWQ6ITEsYWxsb3dNdWx0aXBsZVVwbG9hZHM6ITAsYWxsb3dNdWx0aXBsZVVwbG9hZEJhdGNoZXM6ITAsZGVidWc6ITEscmVzdHJpY3Rpb25zOnttYXhGaWxlU2l6ZTpudWxsLG1pbkZpbGVTaXplOm51bGwsbWF4VG90YWxGaWxlU2l6ZTpudWxsLG1heE51bWJlck9mRmlsZXM6bnVsbCxtaW5OdW1iZXJPZkZpbGVzOm51bGwsYWxsb3dlZEZpbGVUeXBlczpudWxsLHJlcXVpcmVkTWV0YUZpZWxkczpbXX0sbWV0YTp7fSxvbkJlZm9yZUZpbGVBZGRlZDplPT5lLG9uQmVmb3JlVXBsb2FkOmU9PmUsc3RvcmU6bmV3IGJ5LGxvZ2dlcjpJeSxpbmZvVGltZW91dDo1ZTN9O2lmKHRoaXMub3B0cz17Li4udCwuLi5lLHJlc3RyaWN0aW9uczp7Li4udC5yZXN0cmljdGlvbnMsLi4uZSYmZS5yZXN0cmljdGlvbnN9fSxlJiZlLmxvZ2dlciYmZS5kZWJ1Zz90aGlzLmxvZyhcIllvdSBhcmUgdXNpbmcgYSBjdXN0b20gYGxvZ2dlcmAsIGJ1dCBhbHNvIHNldCBgZGVidWc6IHRydWVgLCB3aGljaCB1c2VzIGJ1aWx0LWluIGxvZ2dlciB0byBvdXRwdXQgbG9ncyB0byBjb25zb2xlLiBJZ25vcmluZyBgZGVidWc6IHRydWVgIGFuZCB1c2luZyB5b3VyIGN1c3RvbSBgbG9nZ2VyYC5cIixcIndhcm5pbmdcIik6ZSYmZS5kZWJ1ZyYmKHRoaXMub3B0cy5sb2dnZXI9THkpLHRoaXMubG9nKGBVc2luZyBDb3JlIHYke3RoaXMuY29uc3RydWN0b3IuVkVSU0lPTn1gKSx0aGlzLm9wdHMucmVzdHJpY3Rpb25zLmFsbG93ZWRGaWxlVHlwZXMmJm51bGwhPT10aGlzLm9wdHMucmVzdHJpY3Rpb25zLmFsbG93ZWRGaWxlVHlwZXMmJiFBcnJheS5pc0FycmF5KHRoaXMub3B0cy5yZXN0cmljdGlvbnMuYWxsb3dlZEZpbGVUeXBlcykpdGhyb3cgbmV3IFR5cGVFcnJvcihcImByZXN0cmljdGlvbnMuYWxsb3dlZEZpbGVUeXBlc2AgbXVzdCBiZSBhbiBhcnJheVwiKTt0aGlzLmkxOG5Jbml0KCksdGhpcy5jYWxjdWxhdGVQcm9ncmVzcz1lZyh0aGlzLmNhbGN1bGF0ZVByb2dyZXNzLmJpbmQodGhpcyksNTAwLHtsZWFkaW5nOiEwLHRyYWlsaW5nOiEwfSksdGhpcy5zdG9yZT10aGlzLm9wdHMuc3RvcmUsdGhpcy5zZXRTdGF0ZSh7cGx1Z2luczp7fSxmaWxlczp7fSxjdXJyZW50VXBsb2Fkczp7fSxhbGxvd05ld1VwbG9hZDohMCxjYXBhYmlsaXRpZXM6e3VwbG9hZFByb2dyZXNzOnh5KCksaW5kaXZpZHVhbENhbmNlbGxhdGlvbjohMCxyZXN1bWFibGVVcGxvYWRzOiExfSx0b3RhbFByb2dyZXNzOjAsbWV0YTp7Li4udGhpcy5vcHRzLm1ldGF9LGluZm86W10scmVjb3ZlcmVkU3RhdGU6bnVsbH0pLF95KHRoaXMsJHkpWyR5XT10aGlzLnN0b3JlLnN1YnNjcmliZSgoKGUsdCxuKT0+e3RoaXMuZW1pdChcInN0YXRlLXVwZGF0ZVwiLGUsdCxuKSx0aGlzLnVwZGF0ZUFsbCh0KX0pKSx0aGlzLm9wdHMuZGVidWcmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3dbdGhpcy5vcHRzLmlkXT10aGlzKSxfeSh0aGlzLGVtKVtlbV0oKX1lbWl0KGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtfeSh0aGlzLEh5KVtIeV0uZW1pdChlLC4uLm4pfW9uKGUsdCl7cmV0dXJuIF95KHRoaXMsSHkpW0h5XS5vbihlLHQpLHRoaXN9b25jZShlLHQpe3JldHVybiBfeSh0aGlzLEh5KVtIeV0ub25jZShlLHQpLHRoaXN9b2ZmKGUsdCl7cmV0dXJuIF95KHRoaXMsSHkpW0h5XS5vZmYoZSx0KSx0aGlzfXVwZGF0ZUFsbChlKXt0aGlzLml0ZXJhdGVQbHVnaW5zKCh0PT57dC51cGRhdGUoZSl9KSl9c2V0U3RhdGUoZSl7dGhpcy5zdG9yZS5zZXRTdGF0ZShlKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLnN0b3JlLmdldFN0YXRlKCl9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuZ2V0U3RhdGUoKX1zZXRGaWxlU3RhdGUoZSx0KXtpZighdGhpcy5nZXRTdGF0ZSgpLmZpbGVzW2VdKXRocm93IG5ldyBFcnJvcihgQ2Fu4oCZdCBzZXQgc3RhdGUgZm9yICR7ZX0gKHRoZSBmaWxlIGNvdWxkIGhhdmUgYmVlbiByZW1vdmVkKWApO3RoaXMuc2V0U3RhdGUoe2ZpbGVzOnsuLi50aGlzLmdldFN0YXRlKCkuZmlsZXMsW2VdOnsuLi50aGlzLmdldFN0YXRlKCkuZmlsZXNbZV0sLi4udH19fSl9aTE4bkluaXQoKXtjb25zdCBlPW5ldyBveShbdGhpcy5kZWZhdWx0TG9jYWxlLHRoaXMub3B0cy5sb2NhbGVdKTt0aGlzLmkxOG49ZS50cmFuc2xhdGUuYmluZChlKSx0aGlzLmkxOG5BcnJheT1lLnRyYW5zbGF0ZUFycmF5LmJpbmQoZSksdGhpcy5sb2NhbGU9ZS5sb2NhbGV9c2V0T3B0aW9ucyhlKXt0aGlzLm9wdHM9ey4uLnRoaXMub3B0cywuLi5lLHJlc3RyaWN0aW9uczp7Li4udGhpcy5vcHRzLnJlc3RyaWN0aW9ucywuLi5lJiZlLnJlc3RyaWN0aW9uc319LGUubWV0YSYmdGhpcy5zZXRNZXRhKGUubWV0YSksdGhpcy5pMThuSW5pdCgpLGUubG9jYWxlJiZ0aGlzLml0ZXJhdGVQbHVnaW5zKChlPT57ZS5zZXRPcHRpb25zKCl9KSksdGhpcy5zZXRTdGF0ZSgpfXJlc2V0UHJvZ3Jlc3MoKXtjb25zdCBlPXtwZXJjZW50YWdlOjAsYnl0ZXNVcGxvYWRlZDowLHVwbG9hZENvbXBsZXRlOiExLHVwbG9hZFN0YXJ0ZWQ6bnVsbH0sdD17Li4udGhpcy5nZXRTdGF0ZSgpLmZpbGVzfSxuPXt9O09iamVjdC5rZXlzKHQpLmZvckVhY2goKHI9Pntjb25zdCBvPXsuLi50W3JdfTtvLnByb2dyZXNzPXsuLi5vLnByb2dyZXNzLC4uLmV9LG5bcl09b30pKSx0aGlzLnNldFN0YXRlKHtmaWxlczpuLHRvdGFsUHJvZ3Jlc3M6MH0pLHRoaXMuZW1pdChcInJlc2V0LXByb2dyZXNzXCIpfWFkZFByZVByb2Nlc3NvcihlKXtfeSh0aGlzLFZ5KVtWeV0uYWRkKGUpfXJlbW92ZVByZVByb2Nlc3NvcihlKXtyZXR1cm4gX3kodGhpcyxWeSlbVnldLmRlbGV0ZShlKX1hZGRQb3N0UHJvY2Vzc29yKGUpe195KHRoaXMsV3kpW1d5XS5hZGQoZSl9cmVtb3ZlUG9zdFByb2Nlc3NvcihlKXtyZXR1cm4gX3kodGhpcyxXeSlbV3ldLmRlbGV0ZShlKX1hZGRVcGxvYWRlcihlKXtfeSh0aGlzLFV5KVtVeV0uYWRkKGUpfXJlbW92ZVVwbG9hZGVyKGUpe3JldHVybiBfeSh0aGlzLFV5KVtVeV0uZGVsZXRlKGUpfXNldE1ldGEoZSl7Y29uc3QgdD17Li4udGhpcy5nZXRTdGF0ZSgpLm1ldGEsLi4uZX0sbj17Li4udGhpcy5nZXRTdGF0ZSgpLmZpbGVzfTtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKCh0PT57blt0XT17Li4ublt0XSxtZXRhOnsuLi5uW3RdLm1ldGEsLi4uZX19fSkpLHRoaXMubG9nKFwiQWRkaW5nIG1ldGFkYXRhOlwiKSx0aGlzLmxvZyhlKSx0aGlzLnNldFN0YXRlKHttZXRhOnQsZmlsZXM6bn0pfXNldEZpbGVNZXRhKGUsdCl7Y29uc3Qgbj17Li4udGhpcy5nZXRTdGF0ZSgpLmZpbGVzfTtpZighbltlXSlyZXR1cm4gdm9pZCB0aGlzLmxvZyhcIldhcyB0cnlpbmcgdG8gc2V0IG1ldGFkYXRhIGZvciBhIGZpbGUgdGhhdCBoYXMgYmVlbiByZW1vdmVkOiBcIixlKTtjb25zdCByPXsuLi5uW2VdLm1ldGEsLi4udH07bltlXT17Li4ubltlXSxtZXRhOnJ9LHRoaXMuc2V0U3RhdGUoe2ZpbGVzOm59KX1nZXRGaWxlKGUpe3JldHVybiB0aGlzLmdldFN0YXRlKCkuZmlsZXNbZV19Z2V0RmlsZXMoKXtjb25zdHtmaWxlczplfT10aGlzLmdldFN0YXRlKCk7cmV0dXJuIE9iamVjdC52YWx1ZXMoZSl9Z2V0T2JqZWN0T2ZGaWxlc1BlclN0YXRlKCl7Y29uc3R7ZmlsZXM6ZSx0b3RhbFByb2dyZXNzOnQsZXJyb3I6bn09dGhpcy5nZXRTdGF0ZSgpLHI9T2JqZWN0LnZhbHVlcyhlKSxvPXIuZmlsdGVyKChlPT57bGV0e3Byb2dyZXNzOnR9PWU7cmV0dXJuIXQudXBsb2FkQ29tcGxldGUmJnQudXBsb2FkU3RhcnRlZH0pKSxpPXIuZmlsdGVyKChlPT4hZS5wcm9ncmVzcy51cGxvYWRTdGFydGVkKSksYT1yLmZpbHRlcigoZT0+ZS5wcm9ncmVzcy51cGxvYWRTdGFydGVkfHxlLnByb2dyZXNzLnByZXByb2Nlc3N8fGUucHJvZ3Jlc3MucG9zdHByb2Nlc3MpKSx1PXIuZmlsdGVyKChlPT5lLnByb2dyZXNzLnVwbG9hZFN0YXJ0ZWQpKSxzPXIuZmlsdGVyKChlPT5lLmlzUGF1c2VkKSksbD1yLmZpbHRlcigoZT0+ZS5wcm9ncmVzcy51cGxvYWRDb21wbGV0ZSkpLGM9ci5maWx0ZXIoKGU9PmUuZXJyb3IpKSxmPW8uZmlsdGVyKChlPT4hZS5pc1BhdXNlZCkpLGQ9ci5maWx0ZXIoKGU9PmUucHJvZ3Jlc3MucHJlcHJvY2Vzc3x8ZS5wcm9ncmVzcy5wb3N0cHJvY2VzcykpO3JldHVybntuZXdGaWxlczppLHN0YXJ0ZWRGaWxlczphLHVwbG9hZFN0YXJ0ZWRGaWxlczp1LHBhdXNlZEZpbGVzOnMsY29tcGxldGVGaWxlczpsLGVycm9yZWRGaWxlczpjLGluUHJvZ3Jlc3NGaWxlczpvLGluUHJvZ3Jlc3NOb3RQYXVzZWRGaWxlczpmLHByb2Nlc3NpbmdGaWxlczpkLGlzVXBsb2FkU3RhcnRlZDp1Lmxlbmd0aD4wLGlzQWxsQ29tcGxldGU6MTAwPT09dCYmbC5sZW5ndGg9PT1yLmxlbmd0aCYmMD09PWQubGVuZ3RoLGlzQWxsRXJyb3JlZDohIW4mJmMubGVuZ3RoPT09ci5sZW5ndGgsaXNBbGxQYXVzZWQ6MCE9PW8ubGVuZ3RoJiZzLmxlbmd0aD09PW8ubGVuZ3RoLGlzVXBsb2FkSW5Qcm9ncmVzczpvLmxlbmd0aD4wLGlzU29tZUdob3N0OnIuc29tZSgoZT0+ZS5pc0dob3N0KSl9fXZhbGlkYXRlUmVzdHJpY3Rpb25zKGUsdCl7dHJ5e3JldHVybiBfeSh0aGlzLEd5KVtHeV0oZSx0KSx7cmVzdWx0OiEwfX1jYXRjaChlKXtyZXR1cm57cmVzdWx0OiExLHJlYXNvbjplLm1lc3NhZ2V9fX1jaGVja0lmRmlsZUFscmVhZHlFeGlzdHMoZSl7Y29uc3R7ZmlsZXM6dH09dGhpcy5nZXRTdGF0ZSgpO3JldHVybiEoIXRbZV18fHRbZV0uaXNHaG9zdCl9YWRkRmlsZShlKXtfeSh0aGlzLFp5KVtaeV0oZSk7Y29uc3R7ZmlsZXM6dH09dGhpcy5nZXRTdGF0ZSgpO2xldCBuPV95KHRoaXMsSnkpW0p5XSh0LGUpO3JldHVybiB0W24uaWRdJiZ0W24uaWRdLmlzR2hvc3QmJihuPXsuLi50W24uaWRdLGRhdGE6ZS5kYXRhLGlzR2hvc3Q6ITF9LHRoaXMubG9nKGBSZXBsYWNlZCB0aGUgYmxvYiBpbiB0aGUgcmVzdG9yZWQgZ2hvc3QgZmlsZTogJHtuLm5hbWV9LCAke24uaWR9YCkpLHRoaXMuc2V0U3RhdGUoe2ZpbGVzOnsuLi50LFtuLmlkXTpufX0pLHRoaXMuZW1pdChcImZpbGUtYWRkZWRcIixuKSx0aGlzLmVtaXQoXCJmaWxlcy1hZGRlZFwiLFtuXSksdGhpcy5sb2coYEFkZGVkIGZpbGU6ICR7bi5uYW1lfSwgJHtuLmlkfSwgbWltZSB0eXBlOiAke24udHlwZX1gKSxfeSh0aGlzLFF5KVtReV0oKSxuLmlkfWFkZEZpbGVzKGUpe195KHRoaXMsWnkpW1p5XSgpO2NvbnN0IHQ9ey4uLnRoaXMuZ2V0U3RhdGUoKS5maWxlc30sbj1bXSxyPVtdO2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXRyeXtsZXQgcj1feSh0aGlzLEp5KVtKeV0odCxlW29dKTt0W3IuaWRdJiZ0W3IuaWRdLmlzR2hvc3QmJihyPXsuLi50W3IuaWRdLGRhdGE6ZVtvXS5kYXRhLGlzR2hvc3Q6ITF9LHRoaXMubG9nKGBSZXBsYWNlZCBibG9iIGluIGEgZ2hvc3QgZmlsZTogJHtyLm5hbWV9LCAke3IuaWR9YCkpLHRbci5pZF09cixuLnB1c2gocil9Y2F0Y2goZSl7ZS5pc1Jlc3RyaWN0aW9ufHxyLnB1c2goZSl9aWYodGhpcy5zZXRTdGF0ZSh7ZmlsZXM6dH0pLG4uZm9yRWFjaCgoZT0+e3RoaXMuZW1pdChcImZpbGUtYWRkZWRcIixlKX0pKSx0aGlzLmVtaXQoXCJmaWxlcy1hZGRlZFwiLG4pLG4ubGVuZ3RoPjU/dGhpcy5sb2coYEFkZGVkIGJhdGNoIG9mICR7bi5sZW5ndGh9IGZpbGVzYCk6T2JqZWN0LmtleXMobikuZm9yRWFjaCgoZT0+e3RoaXMubG9nKGBBZGRlZCBmaWxlOiAke25bZV0ubmFtZX1cXG4gaWQ6ICR7bltlXS5pZH1cXG4gdHlwZTogJHtuW2VdLnR5cGV9YCl9KSksbi5sZW5ndGg+MCYmX3kodGhpcyxReSlbUXldKCksci5sZW5ndGg+MCl7bGV0IGU9XCJNdWx0aXBsZSBlcnJvcnMgb2NjdXJyZWQgd2hpbGUgYWRkaW5nIGZpbGVzOlxcblwiO2lmKHIuZm9yRWFjaCgodD0+e2UrPWBcXG4gKiAke3QubWVzc2FnZX1gfSkpLHRoaXMuaW5mbyh7bWVzc2FnZTp0aGlzLmkxOG4oXCJhZGRCdWxrRmlsZXNGYWlsZWRcIix7c21hcnRfY291bnQ6ci5sZW5ndGh9KSxkZXRhaWxzOmV9LFwiZXJyb3JcIix0aGlzLm9wdHMuaW5mb1RpbWVvdXQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIEFnZ3JlZ2F0ZUVycm9yKXRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihyLGUpO3tjb25zdCB0PW5ldyBFcnJvcihlKTt0aHJvdyB0LmVycm9ycz1yLHR9fX1yZW1vdmVGaWxlcyhlLHQpe2NvbnN0e2ZpbGVzOm4sY3VycmVudFVwbG9hZHM6cn09dGhpcy5nZXRTdGF0ZSgpLG89ey4uLm59LGk9ey4uLnJ9LGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiB1KGUpe3JldHVybiB2b2lkIDA9PT1hW2VdfWUuZm9yRWFjaCgoZT0+e25bZV0mJihhW2VdPW5bZV0sZGVsZXRlIG9bZV0pfSkpLE9iamVjdC5rZXlzKGkpLmZvckVhY2goKGU9Pntjb25zdCB0PXJbZV0uZmlsZUlEcy5maWx0ZXIodSk7MCE9PXQubGVuZ3RoP2lbZV09ey4uLnJbZV0sZmlsZUlEczp0fTpkZWxldGUgaVtlXX0pKTtjb25zdCBzPXtjdXJyZW50VXBsb2FkczppLGZpbGVzOm99OzA9PT1PYmplY3Qua2V5cyhvKS5sZW5ndGgmJihzLmFsbG93TmV3VXBsb2FkPSEwLHMuZXJyb3I9bnVsbCxzLnJlY292ZXJlZFN0YXRlPW51bGwpLHRoaXMuc2V0U3RhdGUocyksdGhpcy5jYWxjdWxhdGVUb3RhbFByb2dyZXNzKCk7Y29uc3QgbD1PYmplY3Qua2V5cyhhKTtsLmZvckVhY2goKGU9Pnt0aGlzLmVtaXQoXCJmaWxlLXJlbW92ZWRcIixhW2VdLHQpfSkpLGwubGVuZ3RoPjU/dGhpcy5sb2coYFJlbW92ZWQgJHtsLmxlbmd0aH0gZmlsZXNgKTp0aGlzLmxvZyhgUmVtb3ZlZCBmaWxlczogJHtsLmpvaW4oXCIsIFwiKX1gKX1yZW1vdmVGaWxlKGUsdCl7dm9pZCAwPT09dCYmKHQ9bnVsbCksdGhpcy5yZW1vdmVGaWxlcyhbZV0sdCl9cGF1c2VSZXN1bWUoZSl7aWYoIXRoaXMuZ2V0U3RhdGUoKS5jYXBhYmlsaXRpZXMucmVzdW1hYmxlVXBsb2Fkc3x8dGhpcy5nZXRGaWxlKGUpLnVwbG9hZENvbXBsZXRlKXJldHVybjtjb25zdCB0PSEodGhpcy5nZXRGaWxlKGUpLmlzUGF1c2VkfHwhMSk7cmV0dXJuIHRoaXMuc2V0RmlsZVN0YXRlKGUse2lzUGF1c2VkOnR9KSx0aGlzLmVtaXQoXCJ1cGxvYWQtcGF1c2VcIixlLHQpLHR9cGF1c2VBbGwoKXtjb25zdCBlPXsuLi50aGlzLmdldFN0YXRlKCkuZmlsZXN9O09iamVjdC5rZXlzKGUpLmZpbHRlcigodD0+IWVbdF0ucHJvZ3Jlc3MudXBsb2FkQ29tcGxldGUmJmVbdF0ucHJvZ3Jlc3MudXBsb2FkU3RhcnRlZCkpLmZvckVhY2goKHQ9Pntjb25zdCBuPXsuLi5lW3RdLGlzUGF1c2VkOiEwfTtlW3RdPW59KSksdGhpcy5zZXRTdGF0ZSh7ZmlsZXM6ZX0pLHRoaXMuZW1pdChcInBhdXNlLWFsbFwiKX1yZXN1bWVBbGwoKXtjb25zdCBlPXsuLi50aGlzLmdldFN0YXRlKCkuZmlsZXN9O09iamVjdC5rZXlzKGUpLmZpbHRlcigodD0+IWVbdF0ucHJvZ3Jlc3MudXBsb2FkQ29tcGxldGUmJmVbdF0ucHJvZ3Jlc3MudXBsb2FkU3RhcnRlZCkpLmZvckVhY2goKHQ9Pntjb25zdCBuPXsuLi5lW3RdLGlzUGF1c2VkOiExLGVycm9yOm51bGx9O2VbdF09bn0pKSx0aGlzLnNldFN0YXRlKHtmaWxlczplfSksdGhpcy5lbWl0KFwicmVzdW1lLWFsbFwiKX1yZXRyeUFsbCgpe2NvbnN0IGU9ey4uLnRoaXMuZ2V0U3RhdGUoKS5maWxlc30sdD1PYmplY3Qua2V5cyhlKS5maWx0ZXIoKHQ9PmVbdF0uZXJyb3IpKTtpZih0LmZvckVhY2goKHQ9Pntjb25zdCBuPXsuLi5lW3RdLGlzUGF1c2VkOiExLGVycm9yOm51bGx9O2VbdF09bn0pKSx0aGlzLnNldFN0YXRlKHtmaWxlczplLGVycm9yOm51bGx9KSx0aGlzLmVtaXQoXCJyZXRyeS1hbGxcIix0KSwwPT09dC5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7c3VjY2Vzc2Z1bDpbXSxmYWlsZWQ6W119KTtjb25zdCBuPV95KHRoaXMsbm0pW25tXSh0LHtmb3JjZUFsbG93TmV3VXBsb2FkOiEwfSk7cmV0dXJuIF95KHRoaXMsaW0pW2ltXShuKX1jYW5jZWxBbGwoKXt0aGlzLmVtaXQoXCJjYW5jZWwtYWxsXCIpO2NvbnN0e2ZpbGVzOmV9PXRoaXMuZ2V0U3RhdGUoKSx0PU9iamVjdC5rZXlzKGUpO3QubGVuZ3RoJiZ0aGlzLnJlbW92ZUZpbGVzKHQsXCJjYW5jZWwtYWxsXCIpLHRoaXMuc2V0U3RhdGUoe3RvdGFsUHJvZ3Jlc3M6MCxlcnJvcjpudWxsLHJlY292ZXJlZFN0YXRlOm51bGx9KX1yZXRyeVVwbG9hZChlKXt0aGlzLnNldEZpbGVTdGF0ZShlLHtlcnJvcjpudWxsLGlzUGF1c2VkOiExfSksdGhpcy5lbWl0KFwidXBsb2FkLXJldHJ5XCIsZSk7Y29uc3QgdD1feSh0aGlzLG5tKVtubV0oW2VdLHtmb3JjZUFsbG93TmV3VXBsb2FkOiEwfSk7cmV0dXJuIF95KHRoaXMsaW0pW2ltXSh0KX1yZXNldCgpe3RoaXMuY2FuY2VsQWxsKCl9bG9nb3V0KCl7dGhpcy5pdGVyYXRlUGx1Z2lucygoZT0+e2UucHJvdmlkZXImJmUucHJvdmlkZXIubG9nb3V0JiZlLnByb3ZpZGVyLmxvZ291dCgpfSkpfWNhbGN1bGF0ZVByb2dyZXNzKGUsdCl7aWYoIXRoaXMuZ2V0RmlsZShlLmlkKSlyZXR1cm4gdm9pZCB0aGlzLmxvZyhgTm90IHNldHRpbmcgcHJvZ3Jlc3MgZm9yIGEgZmlsZSB0aGF0IGhhcyBiZWVuIHJlbW92ZWQ6ICR7ZS5pZH1gKTtjb25zdCBuPU51bWJlci5pc0Zpbml0ZSh0LmJ5dGVzVG90YWwpJiZ0LmJ5dGVzVG90YWw+MDt0aGlzLnNldEZpbGVTdGF0ZShlLmlkLHtwcm9ncmVzczp7Li4udGhpcy5nZXRGaWxlKGUuaWQpLnByb2dyZXNzLGJ5dGVzVXBsb2FkZWQ6dC5ieXRlc1VwbG9hZGVkLGJ5dGVzVG90YWw6dC5ieXRlc1RvdGFsLHBlcmNlbnRhZ2U6bj9NYXRoLnJvdW5kKHQuYnl0ZXNVcGxvYWRlZC90LmJ5dGVzVG90YWwqMTAwKTowfX0pLHRoaXMuY2FsY3VsYXRlVG90YWxQcm9ncmVzcygpfWNhbGN1bGF0ZVRvdGFsUHJvZ3Jlc3MoKXtjb25zdCBlPXRoaXMuZ2V0RmlsZXMoKS5maWx0ZXIoKGU9PmUucHJvZ3Jlc3MudXBsb2FkU3RhcnRlZHx8ZS5wcm9ncmVzcy5wcmVwcm9jZXNzfHxlLnByb2dyZXNzLnBvc3Rwcm9jZXNzKSk7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0aGlzLmVtaXQoXCJwcm9ncmVzc1wiLDApLHZvaWQgdGhpcy5zZXRTdGF0ZSh7dG90YWxQcm9ncmVzczowfSk7Y29uc3QgdD1lLmZpbHRlcigoZT0+bnVsbCE9ZS5wcm9ncmVzcy5ieXRlc1RvdGFsKSksbj1lLmZpbHRlcigoZT0+bnVsbD09ZS5wcm9ncmVzcy5ieXRlc1RvdGFsKSk7aWYoMD09PXQubGVuZ3RoKXtjb25zdCB0PTEwMCplLmxlbmd0aCxyPW4ucmVkdWNlKCgoZSx0KT0+ZSt0LnByb2dyZXNzLnBlcmNlbnRhZ2UpLDApLG89TWF0aC5yb3VuZChyL3QqMTAwKTtyZXR1cm4gdm9pZCB0aGlzLnNldFN0YXRlKHt0b3RhbFByb2dyZXNzOm99KX1sZXQgcj10LnJlZHVjZSgoKGUsdCk9PmUrdC5wcm9ncmVzcy5ieXRlc1RvdGFsKSwwKTtjb25zdCBvPXIvdC5sZW5ndGg7cis9bypuLmxlbmd0aDtsZXQgaT0wO3QuZm9yRWFjaCgoZT0+e2krPWUucHJvZ3Jlc3MuYnl0ZXNVcGxvYWRlZH0pKSxuLmZvckVhY2goKGU9PntpKz1vKihlLnByb2dyZXNzLnBlcmNlbnRhZ2V8fDApLzEwMH0pKTtsZXQgYT0wPT09cj8wOk1hdGgucm91bmQoaS9yKjEwMCk7YT4xMDAmJihhPTEwMCksdGhpcy5zZXRTdGF0ZSh7dG90YWxQcm9ncmVzczphfSksdGhpcy5lbWl0KFwicHJvZ3Jlc3NcIixhKX11cGRhdGVPbmxpbmVTdGF0dXMoKXt2b2lkIDA9PT13aW5kb3cubmF2aWdhdG9yLm9uTGluZXx8d2luZG93Lm5hdmlnYXRvci5vbkxpbmU/KHRoaXMuZW1pdChcImlzLW9ubGluZVwiKSx0aGlzLndhc09mZmxpbmUmJih0aGlzLmVtaXQoXCJiYWNrLW9ubGluZVwiKSx0aGlzLmluZm8odGhpcy5pMThuKFwiY29ubmVjdGVkVG9JbnRlcm5ldFwiKSxcInN1Y2Nlc3NcIiwzZTMpLHRoaXMud2FzT2ZmbGluZT0hMSkpOih0aGlzLmVtaXQoXCJpcy1vZmZsaW5lXCIpLHRoaXMuaW5mbyh0aGlzLmkxOG4oXCJub0ludGVybmV0Q29ubmVjdGlvblwiKSxcImVycm9yXCIsMCksdGhpcy53YXNPZmZsaW5lPSEwKX1nZXRJRCgpe3JldHVybiB0aGlzLm9wdHMuaWR9dXNlKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl7dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBwbHVnaW4gY2xhc3MsIGJ1dCBnb3QgJHtudWxsPT09ZT9cIm51bGxcIjp0eXBlb2YgZX0uIFBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgcGx1Z2luIHdhcyBpbXBvcnRlZCBhbmQgc3BlbGxlZCBjb3JyZWN0bHkuYCl9Y29uc3Qgbj1uZXcgZSh0aGlzLHQpLHI9bi5pZDtpZighcil0aHJvdyBuZXcgRXJyb3IoXCJZb3VyIHBsdWdpbiBtdXN0IGhhdmUgYW4gaWRcIik7aWYoIW4udHlwZSl0aHJvdyBuZXcgRXJyb3IoXCJZb3VyIHBsdWdpbiBtdXN0IGhhdmUgYSB0eXBlXCIpO2NvbnN0IG89dGhpcy5nZXRQbHVnaW4ocik7aWYobyl7Y29uc3QgZT1gQWxyZWFkeSBmb3VuZCBhIHBsdWdpbiBuYW1lZCAnJHtvLmlkfScuIFRyaWVkIHRvIHVzZTogJyR7cn0nLlxcblVwcHkgcGx1Z2lucyBtdXN0IGhhdmUgdW5pcXVlIFxcYGlkXFxgIG9wdGlvbnMuIFNlZSBodHRwczovL3VwcHkuaW8vZG9jcy9wbHVnaW5zLyNpZC5gO3Rocm93IG5ldyBFcnJvcihlKX1yZXR1cm4gZS5WRVJTSU9OJiZ0aGlzLmxvZyhgVXNpbmcgJHtyfSB2JHtlLlZFUlNJT059YCksbi50eXBlIGluIF95KHRoaXMsenkpW3p5XT9feSh0aGlzLHp5KVt6eV1bbi50eXBlXS5wdXNoKG4pOl95KHRoaXMsenkpW3p5XVtuLnR5cGVdPVtuXSxuLmluc3RhbGwoKSx0aGlzfWdldFBsdWdpbihlKXtmb3IoY29uc3QgdCBvZiBPYmplY3QudmFsdWVzKF95KHRoaXMsenkpW3p5XSkpe2NvbnN0IG49dC5maW5kKCh0PT50LmlkPT09ZSkpO2lmKG51bGwhPW4pcmV0dXJuIG59fVtGeV0oZSl7cmV0dXJuIF95KHRoaXMsenkpW3p5XVtlXX1pdGVyYXRlUGx1Z2lucyhlKXtPYmplY3QudmFsdWVzKF95KHRoaXMsenkpW3p5XSkuZmxhdCgxKS5mb3JFYWNoKGUpfXJlbW92ZVBsdWdpbihlKXt0aGlzLmxvZyhgUmVtb3ZpbmcgcGx1Z2luICR7ZS5pZH1gKSx0aGlzLmVtaXQoXCJwbHVnaW4tcmVtb3ZlXCIsZSksZS51bmluc3RhbGwmJmUudW5pbnN0YWxsKCk7Y29uc3QgdD1feSh0aGlzLHp5KVt6eV1bZS50eXBlXSxuPXQuZmluZEluZGV4KCh0PT50LmlkPT09ZS5pZCkpOy0xIT09biYmdC5zcGxpY2UobiwxKTtjb25zdCByPXtwbHVnaW5zOnsuLi50aGlzLmdldFN0YXRlKCkucGx1Z2lucyxbZS5pZF06dm9pZCAwfX07dGhpcy5zZXRTdGF0ZShyKX1jbG9zZSgpe3RoaXMubG9nKGBDbG9zaW5nIFVwcHkgaW5zdGFuY2UgJHt0aGlzLm9wdHMuaWR9OiByZW1vdmluZyBhbGwgZmlsZXMgYW5kIHVuaW5zdGFsbGluZyBwbHVnaW5zYCksdGhpcy5yZXNldCgpLF95KHRoaXMsJHkpWyR5XSgpLHRoaXMuaXRlcmF0ZVBsdWdpbnMoKGU9Pnt0aGlzLnJlbW92ZVBsdWdpbihlKX0pKSxcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsX3kodGhpcyx0bSlbdG1dKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIixfeSh0aGlzLHRtKVt0bV0pKX1oaWRlSW5mbygpe2NvbnN0e2luZm86ZX09dGhpcy5nZXRTdGF0ZSgpO3RoaXMuc2V0U3RhdGUoe2luZm86ZS5zbGljZSgxKX0pLHRoaXMuZW1pdChcImluZm8taGlkZGVuXCIpfWluZm8oZSx0LG4pe3ZvaWQgMD09PXQmJih0PVwiaW5mb1wiKSx2b2lkIDA9PT1uJiYobj0zZTMpO2NvbnN0IHI9XCJvYmplY3RcIj09dHlwZW9mIGU7dGhpcy5zZXRTdGF0ZSh7aW5mbzpbLi4udGhpcy5nZXRTdGF0ZSgpLmluZm8se3R5cGU6dCxtZXNzYWdlOnI/ZS5tZXNzYWdlOmUsZGV0YWlsczpyP2UuZGV0YWlsczpudWxsfV19KSxzZXRUaW1lb3V0KCgoKT0+dGhpcy5oaWRlSW5mbygpKSxuKSx0aGlzLmVtaXQoXCJpbmZvLXZpc2libGVcIil9bG9nKGUsdCl7Y29uc3R7bG9nZ2VyOm59PXRoaXMub3B0cztzd2l0Y2godCl7Y2FzZVwiZXJyb3JcIjpuLmVycm9yKGUpO2JyZWFrO2Nhc2VcIndhcm5pbmdcIjpuLndhcm4oZSk7YnJlYWs7ZGVmYXVsdDpuLmRlYnVnKGUpfX1yZXN0b3JlKGUpe3JldHVybiB0aGlzLmxvZyhgQ29yZTogYXR0ZW1wdGluZyB0byByZXN0b3JlIHVwbG9hZCBcIiR7ZX1cImApLHRoaXMuZ2V0U3RhdGUoKS5jdXJyZW50VXBsb2Fkc1tlXT9feSh0aGlzLGltKVtpbV0oZSk6KF95KHRoaXMsb20pW29tXShlKSxQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJOb25leGlzdGVudCB1cGxvYWRcIikpKX1bVHldKCl7cmV0dXJuIF95KHRoaXMsbm0pW25tXSguLi5hcmd1bWVudHMpfWFkZFJlc3VsdERhdGEoZSx0KXtpZighX3kodGhpcyxybSlbcm1dKGUpKXJldHVybiB2b2lkIHRoaXMubG9nKGBOb3Qgc2V0dGluZyByZXN1bHQgZm9yIGFuIHVwbG9hZCB0aGF0IGhhcyBiZWVuIHJlbW92ZWQ6ICR7ZX1gKTtjb25zdHtjdXJyZW50VXBsb2FkczpufT10aGlzLmdldFN0YXRlKCkscj17Li4ubltlXSxyZXN1bHQ6ey4uLm5bZV0ucmVzdWx0LC4uLnR9fTt0aGlzLnNldFN0YXRlKHtjdXJyZW50VXBsb2Fkczp7Li4ubixbZV06cn19KX11cGxvYWQoKXt2YXIgZTtudWxsIT0oZT1feSh0aGlzLHp5KVt6eV0udXBsb2FkZXIpJiZlLmxlbmd0aHx8dGhpcy5sb2coXCJObyB1cGxvYWRlciB0eXBlIHBsdWdpbnMgYXJlIHVzZWRcIixcIndhcm5pbmdcIik7bGV0e2ZpbGVzOnR9PXRoaXMuZ2V0U3RhdGUoKTtjb25zdCBuPXRoaXMub3B0cy5vbkJlZm9yZVVwbG9hZCh0KTtyZXR1cm4hMT09PW4/UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm90IHN0YXJ0aW5nIHRoZSB1cGxvYWQgYmVjYXVzZSBvbkJlZm9yZVVwbG9hZCByZXR1cm5lZCBmYWxzZVwiKSk6KG4mJlwib2JqZWN0XCI9PXR5cGVvZiBuJiYodD1uLHRoaXMuc2V0U3RhdGUoe2ZpbGVzOnR9KSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9PntfeSh0aGlzLHF5KVtxeV0odCksX3kodGhpcyxZeSlbWXldKHQpfSkpLmNhdGNoKChlPT57X3kodGhpcyxYeSlbWHldKGUpfSkpLnRoZW4oKCgpPT57Y29uc3R7Y3VycmVudFVwbG9hZHM6ZX09dGhpcy5nZXRTdGF0ZSgpLG49T2JqZWN0LnZhbHVlcyhlKS5mbGF0TWFwKChlPT5lLmZpbGVJRHMpKSxyPVtdO09iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9Pntjb25zdCB0PXRoaXMuZ2V0RmlsZShlKTt0LnByb2dyZXNzLnVwbG9hZFN0YXJ0ZWR8fC0xIT09bi5pbmRleE9mKGUpfHxyLnB1c2godC5pZCl9KSk7Y29uc3Qgbz1feSh0aGlzLG5tKVtubV0ocik7cmV0dXJuIF95KHRoaXMsaW0pW2ltXShvKX0pKS5jYXRjaCgoZT0+e195KHRoaXMsWHkpW1h5XShlLHtzaG93SW5mb3JtZXI6ITF9KX0pKSl9fWZ1bmN0aW9uIHVtKGUsdCl7dm9pZCAwPT09dCYmKHQ9dGhpcy5nZXRGaWxlcygpKTtjb25zdHttYXhGaWxlU2l6ZTpuLG1pbkZpbGVTaXplOnIsbWF4VG90YWxGaWxlU2l6ZTpvLG1heE51bWJlck9mRmlsZXM6aSxhbGxvd2VkRmlsZVR5cGVzOmF9PXRoaXMub3B0cy5yZXN0cmljdGlvbnM7aWYoaSYmdC5sZW5ndGgrMT5pKXRocm93IG5ldyBSeShgJHt0aGlzLmkxOG4oXCJ5b3VDYW5Pbmx5VXBsb2FkWFwiLHtzbWFydF9jb3VudDppfSl9YCk7aWYoYSl7aWYoIWEuc29tZSgodD0+dC5pbmRleE9mKFwiL1wiKT4tMT8hIWUudHlwZSYmZ3koZS50eXBlLnJlcGxhY2UoLzsuKj8kLyxcIlwiKSx0KTohKFwiLlwiIT09dFswXXx8IWUuZXh0ZW5zaW9uKSYmZS5leHRlbnNpb24udG9Mb3dlckNhc2UoKT09PXQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCkpKSl7Y29uc3QgZT1hLmpvaW4oXCIsIFwiKTt0aHJvdyBuZXcgUnkodGhpcy5pMThuKFwieW91Q2FuT25seVVwbG9hZEZpbGVUeXBlc1wiLHt0eXBlczplfSkpfX1pZihvJiZudWxsIT1lLnNpemUpe2xldCBuPTA7aWYobis9ZS5zaXplLHQuZm9yRWFjaCgoZT0+e24rPWUuc2l6ZX0pKSxuPm8pdGhyb3cgbmV3IFJ5KHRoaXMuaTE4bihcImV4Y2VlZHNTaXplXCIse3NpemU6ZHkobyksZmlsZTplLm5hbWV9KSl9aWYobiYmbnVsbCE9ZS5zaXplJiZlLnNpemU+bil0aHJvdyBuZXcgUnkodGhpcy5pMThuKFwiZXhjZWVkc1NpemVcIix7c2l6ZTpkeShuKSxmaWxlOmUubmFtZX0pKTtpZihyJiZudWxsIT1lLnNpemUmJmUuc2l6ZTxyKXRocm93IG5ldyBSeSh0aGlzLmkxOG4oXCJpbmZlcmlvclNpemVcIix7c2l6ZTpkeShyKX0pKX1mdW5jdGlvbiBzbShlKXtjb25zdHttaW5OdW1iZXJPZkZpbGVzOnR9PXRoaXMub3B0cy5yZXN0cmljdGlvbnM7aWYoT2JqZWN0LmtleXMoZSkubGVuZ3RoPHQpdGhyb3cgbmV3IFJ5KGAke3RoaXMuaTE4bihcInlvdUhhdmVUb0F0TGVhc3RTZWxlY3RYXCIse3NtYXJ0X2NvdW50OnR9KX1gKX1mdW5jdGlvbiBsbShlKXtjb25zdHtyZXF1aXJlZE1ldGFGaWVsZHM6dH09dGhpcy5vcHRzLnJlc3RyaWN0aW9ucyx7aGFzT3duUHJvcGVydHk6bn09T2JqZWN0LnByb3RvdHlwZSxyPVtdLG89W107Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspaWYoIW4uY2FsbChlLm1ldGEsdFtpXSl8fFwiXCI9PT1lLm1ldGFbdFtpXV0pe2NvbnN0IG49bmV3IFJ5KGAke3RoaXMuaTE4bihcIm1pc3NpbmdSZXF1aXJlZE1ldGFGaWVsZE9uRmlsZVwiLHtmaWxlTmFtZTplLm5hbWV9KX1gKTtyLnB1c2gobiksby5wdXNoKHRbaV0pLF95KHRoaXMsWHkpW1h5XShuLHtmaWxlOmUsc2hvd0luZm9ybWVyOiExLHRocm93RXJyOiExfSl9cmV0dXJuIHRoaXMuc2V0RmlsZVN0YXRlKGUuaWQse21pc3NpbmdSZXF1aXJlZE1ldGFGaWVsZHM6b30pLHJ9ZnVuY3Rpb24gY20oZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKS5mbGF0TWFwKChlPT57Y29uc3QgdD10aGlzLmdldEZpbGUoZSk7cmV0dXJuIF95KHRoaXMsS3kpW0t5XSh0KX0pKTtpZih0Lmxlbmd0aCl0aHJvdyBuZXcgTXkodCxgJHt0aGlzLmkxOG4oXCJtaXNzaW5nUmVxdWlyZWRNZXRhRmllbGRcIil9YCl9ZnVuY3Rpb24gZm0oZSx0KXtsZXR7c2hvd0luZm9ybWVyOm49ITAsZmlsZTpyPW51bGwsdGhyb3dFcnI6bz0hMH09dm9pZCAwPT09dD97fTp0O2NvbnN0IGk9XCJvYmplY3RcIj09dHlwZW9mIGU/ZS5tZXNzYWdlOmUsYT1cIm9iamVjdFwiPT10eXBlb2YgZSYmZS5kZXRhaWxzP2UuZGV0YWlsczpcIlwiO2xldCB1PWk7aWYoYSYmKHUrPWAgJHthfWApLGUuaXNSZXN0cmljdGlvbj8odGhpcy5sb2codSksdGhpcy5lbWl0KFwicmVzdHJpY3Rpb24tZmFpbGVkXCIscixlKSk6dGhpcy5sb2codSxcImVycm9yXCIpLG4mJnRoaXMuaW5mbyh7bWVzc2FnZTppLGRldGFpbHM6YX0sXCJlcnJvclwiLHRoaXMub3B0cy5pbmZvVGltZW91dCksbyl0aHJvd1wib2JqZWN0XCI9PXR5cGVvZiBlP2U6bmV3IEVycm9yKGUpfWZ1bmN0aW9uIGRtKGUpe2NvbnN0e2FsbG93TmV3VXBsb2FkOnR9PXRoaXMuZ2V0U3RhdGUoKTshMT09PXQmJl95KHRoaXMsWHkpW1h5XShuZXcgUnkodGhpcy5pMThuKFwibm9Nb3JlRmlsZXNBbGxvd2VkXCIpKSx7ZmlsZTplfSl9ZnVuY3Rpb24gcG0oZSx0KXtjb25zdCBuPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUudHlwZSlyZXR1cm4gZS50eXBlO2NvbnN0IG49ZS5uYW1lP251bGw9PSh0PUV5KGUubmFtZSkuZXh0ZW5zaW9uKT92b2lkIDA6dC50b0xvd2VyQ2FzZSgpOm51bGw7cmV0dXJuIG4mJm4gaW4gRHk/RHlbbl06XCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIn0odCkscj1mdW5jdGlvbihlLHQpe3JldHVybiB0Lm5hbWU/dC5uYW1lOlwiaW1hZ2VcIj09PWUuc3BsaXQoXCIvXCIpWzBdP2Ake2Uuc3BsaXQoXCIvXCIpWzBdfS4ke2Uuc3BsaXQoXCIvXCIpWzFdfWA6XCJub25hbWVcIn0obix0KSxvPUV5KHIpLmV4dGVuc2lvbixpPUJvb2xlYW4odC5pc1JlbW90ZSksYT1mdW5jdGlvbihlKXtsZXQgdD1cInVwcHlcIjtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZS5uYW1lJiYodCs9YC0ke1N5KGUubmFtZS50b0xvd2VyQ2FzZSgpKX1gKSx2b2lkIDAhPT1lLnR5cGUmJih0Kz1gLSR7ZS50eXBlfWApLGUubWV0YSYmXCJzdHJpbmdcIj09dHlwZW9mIGUubWV0YS5yZWxhdGl2ZVBhdGgmJih0Kz1gLSR7U3koZS5tZXRhLnJlbGF0aXZlUGF0aC50b0xvd2VyQ2FzZSgpKX1gKSx2b2lkIDAhPT1lLmRhdGEuc2l6ZSYmKHQrPWAtJHtlLmRhdGEuc2l6ZX1gKSx2b2lkIDAhPT1lLmRhdGEubGFzdE1vZGlmaWVkJiYodCs9YC0ke2UuZGF0YS5sYXN0TW9kaWZpZWR9YCksdH0oey4uLnQsdHlwZTpufSk7aWYodGhpcy5jaGVja0lmRmlsZUFscmVhZHlFeGlzdHMoYSkpe2NvbnN0IGU9bmV3IFJ5KHRoaXMuaTE4bihcIm5vRHVwbGljYXRlc1wiLHtmaWxlTmFtZTpyfSkpO195KHRoaXMsWHkpW1h5XShlLHtmaWxlOnR9KX1jb25zdCB1PXQubWV0YXx8e307dS5uYW1lPXIsdS50eXBlPW47Y29uc3Qgcz1OdW1iZXIuaXNGaW5pdGUodC5kYXRhLnNpemUpP3QuZGF0YS5zaXplOm51bGw7bGV0IGw9e3NvdXJjZTp0LnNvdXJjZXx8XCJcIixpZDphLG5hbWU6cixleHRlbnNpb246b3x8XCJcIixtZXRhOnsuLi50aGlzLmdldFN0YXRlKCkubWV0YSwuLi51fSx0eXBlOm4sZGF0YTp0LmRhdGEscHJvZ3Jlc3M6e3BlcmNlbnRhZ2U6MCxieXRlc1VwbG9hZGVkOjAsYnl0ZXNUb3RhbDpzLHVwbG9hZENvbXBsZXRlOiExLHVwbG9hZFN0YXJ0ZWQ6bnVsbH0sc2l6ZTpzLGlzUmVtb3RlOmkscmVtb3RlOnQucmVtb3RlfHxcIlwiLHByZXZpZXc6dC5wcmV2aWV3fTtjb25zdCBjPXRoaXMub3B0cy5vbkJlZm9yZUZpbGVBZGRlZChsLGUpOyExPT09Yz9feSh0aGlzLFh5KVtYeV0obmV3IFJ5KFwiQ2Fubm90IGFkZCB0aGUgZmlsZSBiZWNhdXNlIG9uQmVmb3JlRmlsZUFkZGVkIHJldHVybmVkIGZhbHNlLlwiKSx7c2hvd0luZm9ybWVyOiExLGZpbGVEZXNjcmlwdG9yOnR9KTpcIm9iamVjdFwiPT10eXBlb2YgYyYmbnVsbCE9PWMmJihsPWMpO3RyeXtjb25zdCB0PU9iamVjdC5rZXlzKGUpLm1hcCgodD0+ZVt0XSkpO195KHRoaXMsR3kpW0d5XShsLHQpfWNhdGNoKGUpe195KHRoaXMsWHkpW1h5XShlLHtmaWxlOmx9KX1yZXR1cm4gbH1mdW5jdGlvbiBobSgpe3RoaXMub3B0cy5hdXRvUHJvY2VlZCYmIXRoaXMuc2NoZWR1bGVkQXV0b1Byb2NlZWQmJih0aGlzLnNjaGVkdWxlZEF1dG9Qcm9jZWVkPXNldFRpbWVvdXQoKCgpPT57dGhpcy5zY2hlZHVsZWRBdXRvUHJvY2VlZD1udWxsLHRoaXMudXBsb2FkKCkuY2F0Y2goKGU9PntlLmlzUmVzdHJpY3Rpb258fHRoaXMubG9nKGUuc3RhY2t8fGUubWVzc2FnZXx8ZSl9KSl9KSw0KSl9ZnVuY3Rpb24gZ20oKXtjb25zdCBlPShlLHQsbik9PntsZXQgcj1lLm1lc3NhZ2V8fFwiVW5rbm93biBlcnJvclwiO2UuZGV0YWlscyYmKHIrPWAgJHtlLmRldGFpbHN9YCksdGhpcy5zZXRTdGF0ZSh7ZXJyb3I6cn0pLG51bGwhPXQmJnQuaWQgaW4gdGhpcy5nZXRTdGF0ZSgpLmZpbGVzJiZ0aGlzLnNldEZpbGVTdGF0ZSh0LmlkLHtlcnJvcjpyLHJlc3BvbnNlOm59KX07dGhpcy5vbihcImVycm9yXCIsZSksdGhpcy5vbihcInVwbG9hZC1lcnJvclwiLCgodCxuLHIpPT57aWYoZShuLHQsciksXCJvYmplY3RcIj09dHlwZW9mIG4mJm4ubWVzc2FnZSl7Y29uc3QgZT1uZXcgRXJyb3Iobi5tZXNzYWdlKTtlLmRldGFpbHM9bi5tZXNzYWdlLG4uZGV0YWlscyYmKGUuZGV0YWlscys9YCAke24uZGV0YWlsc31gKSxlLm1lc3NhZ2U9dGhpcy5pMThuKFwiZmFpbGVkVG9VcGxvYWRcIix7ZmlsZTp0Lm5hbWV9KSxfeSh0aGlzLFh5KVtYeV0oZSx7dGhyb3dFcnI6ITF9KX1lbHNlIF95KHRoaXMsWHkpW1h5XShuLHt0aHJvd0VycjohMX0pfSkpLHRoaXMub24oXCJ1cGxvYWRcIiwoKCk9Pnt0aGlzLnNldFN0YXRlKHtlcnJvcjpudWxsfSl9KSksdGhpcy5vbihcInVwbG9hZC1zdGFydGVkXCIsKGU9Pnt0aGlzLmdldEZpbGUoZS5pZCk/dGhpcy5zZXRGaWxlU3RhdGUoZS5pZCx7cHJvZ3Jlc3M6e3VwbG9hZFN0YXJ0ZWQ6RGF0ZS5ub3coKSx1cGxvYWRDb21wbGV0ZTohMSxwZXJjZW50YWdlOjAsYnl0ZXNVcGxvYWRlZDowLGJ5dGVzVG90YWw6ZS5zaXplfX0pOnRoaXMubG9nKGBOb3Qgc2V0dGluZyBwcm9ncmVzcyBmb3IgYSBmaWxlIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZDogJHtlLmlkfWApfSkpLHRoaXMub24oXCJ1cGxvYWQtcHJvZ3Jlc3NcIix0aGlzLmNhbGN1bGF0ZVByb2dyZXNzKSx0aGlzLm9uKFwidXBsb2FkLXN1Y2Nlc3NcIiwoKGUsdCk9PntpZighdGhpcy5nZXRGaWxlKGUuaWQpKXJldHVybiB2b2lkIHRoaXMubG9nKGBOb3Qgc2V0dGluZyBwcm9ncmVzcyBmb3IgYSBmaWxlIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZDogJHtlLmlkfWApO2NvbnN0IG49dGhpcy5nZXRGaWxlKGUuaWQpLnByb2dyZXNzO3RoaXMuc2V0RmlsZVN0YXRlKGUuaWQse3Byb2dyZXNzOnsuLi5uLHBvc3Rwcm9jZXNzOl95KHRoaXMsV3kpW1d5XS5zaXplPjA/e21vZGU6XCJpbmRldGVybWluYXRlXCJ9Om51bGwsdXBsb2FkQ29tcGxldGU6ITAscGVyY2VudGFnZToxMDAsYnl0ZXNVcGxvYWRlZDpuLmJ5dGVzVG90YWx9LHJlc3BvbnNlOnQsdXBsb2FkVVJMOnQudXBsb2FkVVJMLGlzUGF1c2VkOiExfSksbnVsbD09ZS5zaXplJiZ0aGlzLnNldEZpbGVTdGF0ZShlLmlkLHtzaXplOnQuYnl0ZXNVcGxvYWRlZHx8bi5ieXRlc1RvdGFsfSksdGhpcy5jYWxjdWxhdGVUb3RhbFByb2dyZXNzKCl9KSksdGhpcy5vbihcInByZXByb2Nlc3MtcHJvZ3Jlc3NcIiwoKGUsdCk9Pnt0aGlzLmdldEZpbGUoZS5pZCk/dGhpcy5zZXRGaWxlU3RhdGUoZS5pZCx7cHJvZ3Jlc3M6ey4uLnRoaXMuZ2V0RmlsZShlLmlkKS5wcm9ncmVzcyxwcmVwcm9jZXNzOnR9fSk6dGhpcy5sb2coYE5vdCBzZXR0aW5nIHByb2dyZXNzIGZvciBhIGZpbGUgdGhhdCBoYXMgYmVlbiByZW1vdmVkOiAke2UuaWR9YCl9KSksdGhpcy5vbihcInByZXByb2Nlc3MtY29tcGxldGVcIiwoZT0+e2lmKCF0aGlzLmdldEZpbGUoZS5pZCkpcmV0dXJuIHZvaWQgdGhpcy5sb2coYE5vdCBzZXR0aW5nIHByb2dyZXNzIGZvciBhIGZpbGUgdGhhdCBoYXMgYmVlbiByZW1vdmVkOiAke2UuaWR9YCk7Y29uc3QgdD17Li4udGhpcy5nZXRTdGF0ZSgpLmZpbGVzfTt0W2UuaWRdPXsuLi50W2UuaWRdLHByb2dyZXNzOnsuLi50W2UuaWRdLnByb2dyZXNzfX0sZGVsZXRlIHRbZS5pZF0ucHJvZ3Jlc3MucHJlcHJvY2Vzcyx0aGlzLnNldFN0YXRlKHtmaWxlczp0fSl9KSksdGhpcy5vbihcInBvc3Rwcm9jZXNzLXByb2dyZXNzXCIsKChlLHQpPT57dGhpcy5nZXRGaWxlKGUuaWQpP3RoaXMuc2V0RmlsZVN0YXRlKGUuaWQse3Byb2dyZXNzOnsuLi50aGlzLmdldFN0YXRlKCkuZmlsZXNbZS5pZF0ucHJvZ3Jlc3MscG9zdHByb2Nlc3M6dH19KTp0aGlzLmxvZyhgTm90IHNldHRpbmcgcHJvZ3Jlc3MgZm9yIGEgZmlsZSB0aGF0IGhhcyBiZWVuIHJlbW92ZWQ6ICR7ZS5pZH1gKX0pKSx0aGlzLm9uKFwicG9zdHByb2Nlc3MtY29tcGxldGVcIiwoZT0+e2lmKCF0aGlzLmdldEZpbGUoZS5pZCkpcmV0dXJuIHZvaWQgdGhpcy5sb2coYE5vdCBzZXR0aW5nIHByb2dyZXNzIGZvciBhIGZpbGUgdGhhdCBoYXMgYmVlbiByZW1vdmVkOiAke2UuaWR9YCk7Y29uc3QgdD17Li4udGhpcy5nZXRTdGF0ZSgpLmZpbGVzfTt0W2UuaWRdPXsuLi50W2UuaWRdLHByb2dyZXNzOnsuLi50W2UuaWRdLnByb2dyZXNzfX0sZGVsZXRlIHRbZS5pZF0ucHJvZ3Jlc3MucG9zdHByb2Nlc3MsdGhpcy5zZXRTdGF0ZSh7ZmlsZXM6dH0pfSkpLHRoaXMub24oXCJyZXN0b3JlZFwiLCgoKT0+e3RoaXMuY2FsY3VsYXRlVG90YWxQcm9ncmVzcygpfSkpLHRoaXMub24oXCJkYXNoYm9hcmQ6ZmlsZS1lZGl0LWNvbXBsZXRlXCIsKGU9PntlJiZfeSh0aGlzLEt5KVtLeV0oZSl9KSksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmFkZEV2ZW50TGlzdGVuZXImJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLF95KHRoaXMsdG0pW3RtXSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsX3kodGhpcyx0bSlbdG1dKSxzZXRUaW1lb3V0KF95KHRoaXMsdG0pW3RtXSwzZTMpKX1mdW5jdGlvbiB2bShlLHQpe3ZvaWQgMD09PXQmJih0PXt9KTtjb25zdHtmb3JjZUFsbG93TmV3VXBsb2FkOm49ITF9PXQse2FsbG93TmV3VXBsb2FkOnIsY3VycmVudFVwbG9hZHM6b309dGhpcy5nZXRTdGF0ZSgpO2lmKCFyJiYhbil0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGEgbmV3IHVwbG9hZDogYWxyZWFkeSB1cGxvYWRpbmcuXCIpO2NvbnN0IGk9TnkoKTtyZXR1cm4gdGhpcy5lbWl0KFwidXBsb2FkXCIse2lkOmksZmlsZUlEczplfSksdGhpcy5zZXRTdGF0ZSh7YWxsb3dOZXdVcGxvYWQ6ITEhPT10aGlzLm9wdHMuYWxsb3dNdWx0aXBsZVVwbG9hZEJhdGNoZXMmJiExIT09dGhpcy5vcHRzLmFsbG93TXVsdGlwbGVVcGxvYWRzLGN1cnJlbnRVcGxvYWRzOnsuLi5vLFtpXTp7ZmlsZUlEczplLHN0ZXA6MCxyZXN1bHQ6e319fX0pLGl9ZnVuY3Rpb24geW0oZSl7Y29uc3R7Y3VycmVudFVwbG9hZHM6dH09dGhpcy5nZXRTdGF0ZSgpO3JldHVybiB0W2VdfWZ1bmN0aW9uIG1tKGUpe2NvbnN0IHQ9ey4uLnRoaXMuZ2V0U3RhdGUoKS5jdXJyZW50VXBsb2Fkc307ZGVsZXRlIHRbZV0sdGhpcy5zZXRTdGF0ZSh7Y3VycmVudFVwbG9hZHM6dH0pfWFzeW5jIGZ1bmN0aW9uIGJtKGUpe2xldHtjdXJyZW50VXBsb2Fkczp0fT10aGlzLmdldFN0YXRlKCksbj10W2VdO2NvbnN0IHI9bi5zdGVwfHwwLG89Wy4uLl95KHRoaXMsVnkpW1Z5XSwuLi5feSh0aGlzLFV5KVtVeV0sLi4uX3kodGhpcyxXeSlbV3ldXTt0cnl7Zm9yKGxldCBpPXI7aTxvLmxlbmd0aCYmbjtpKyspe2NvbnN0IHI9b1tpXSxhPXsuLi5uLHN0ZXA6aX07dGhpcy5zZXRTdGF0ZSh7Y3VycmVudFVwbG9hZHM6ey4uLnQsW2VdOmF9fSksYXdhaXQgcihhLmZpbGVJRHMsZSksdD10aGlzLmdldFN0YXRlKCkuY3VycmVudFVwbG9hZHMsbj10W2VdfX1jYXRjaCh0KXt0aHJvdyB0aGlzLmVtaXQoXCJlcnJvclwiLHQpLF95KHRoaXMsb20pW29tXShlKSx0fWlmKG4pe24uZmlsZUlEcy5mb3JFYWNoKChlPT57Y29uc3QgdD10aGlzLmdldEZpbGUoZSk7dCYmdC5wcm9ncmVzcy5wb3N0cHJvY2VzcyYmdGhpcy5lbWl0KFwicG9zdHByb2Nlc3MtY29tcGxldGVcIix0KX0pKTtjb25zdCByPW4uZmlsZUlEcy5tYXAoKGU9PnRoaXMuZ2V0RmlsZShlKSkpLG89ci5maWx0ZXIoKGU9PiFlLmVycm9yKSksaT1yLmZpbHRlcigoZT0+ZS5lcnJvcikpO2F3YWl0IHRoaXMuYWRkUmVzdWx0RGF0YShlLHtzdWNjZXNzZnVsOm8sZmFpbGVkOmksdXBsb2FkSUQ6ZX0pLHQ9dGhpcy5nZXRTdGF0ZSgpLmN1cnJlbnRVcGxvYWRzLG49dFtlXX1sZXQgaTtyZXR1cm4gbiYmKGk9bi5yZXN1bHQsdGhpcy5lbWl0KFwiY29tcGxldGVcIixpKSxfeSh0aGlzLG9tKVtvbV0oZSkpLG51bGw9PWkmJnRoaXMubG9nKGBOb3Qgc2V0dGluZyByZXN1bHQgZm9yIGFuIHVwbG9hZCB0aGF0IGhhcyBiZWVuIHJlbW92ZWQ6ICR7ZX1gKSxpfWFtLlZFUlNJT049XCIyLjEuM1wiO3ZhciB3bT1hbSxFbT1uKChmdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxpLGEsdSxzLGwsYz17fSxmPVtdLGQ9L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaTtmdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciBuIGluIHQpZVtuXT10W25dO3JldHVybiBlfWZ1bmN0aW9uIGgoZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQoZSl9ZnVuY3Rpb24gZyhlLHQscil7dmFyIG8saSxhLHU9e307Zm9yKGEgaW4gdClcImtleVwiPT1hP289dFthXTpcInJlZlwiPT1hP2k9dFthXTp1W2FdPXRbYV07aWYoYXJndW1lbnRzLmxlbmd0aD4yJiYodS5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/bi5jYWxsKGFyZ3VtZW50cywyKTpyKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZudWxsIT1lLmRlZmF1bHRQcm9wcylmb3IoYSBpbiBlLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT11W2FdJiYodVthXT1lLmRlZmF1bHRQcm9wc1thXSk7cmV0dXJuIHYoZSx1LG8saSxudWxsKX1mdW5jdGlvbiB2KGUsdCxuLGksYSl7dmFyIHU9e3R5cGU6ZSxwcm9wczp0LGtleTpuLHJlZjppLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19kOnZvaWQgMCxfX2M6bnVsbCxfX2g6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Om51bGw9PWE/KytvOmF9O3JldHVybiBudWxsPT1hJiZudWxsIT1yLnZub2RlJiZyLnZub2RlKHUpLHV9ZnVuY3Rpb24geShlKXtyZXR1cm4gZS5jaGlsZHJlbn1mdW5jdGlvbiBtKGUsdCl7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10fWZ1bmN0aW9uIGIoZSx0KXtpZihudWxsPT10KXJldHVybiBlLl9fP2IoZS5fXyxlLl9fLl9fay5pbmRleE9mKGUpKzEpOm51bGw7Zm9yKHZhciBuO3Q8ZS5fX2subGVuZ3RoO3QrKylpZihudWxsIT0obj1lLl9fa1t0XSkmJm51bGwhPW4uX19lKXJldHVybiBuLl9fZTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnR5cGU/YihlKTpudWxsfWZ1bmN0aW9uIHcoZSl7dmFyIHQsbjtpZihudWxsIT0oZT1lLl9fKSYmbnVsbCE9ZS5fX2Mpe2ZvcihlLl9fZT1lLl9fYy5iYXNlPW51bGwsdD0wO3Q8ZS5fX2subGVuZ3RoO3QrKylpZihudWxsIT0obj1lLl9fa1t0XSkmJm51bGwhPW4uX19lKXtlLl9fZT1lLl9fYy5iYXNlPW4uX19lO2JyZWFrfXJldHVybiB3KGUpfX1mdW5jdGlvbiBFKGUpeyghZS5fX2QmJihlLl9fZD0hMCkmJmEucHVzaChlKSYmIUQuX19yKyt8fHMhPT1yLmRlYm91bmNlUmVuZGVyaW5nKSYmKChzPXIuZGVib3VuY2VSZW5kZXJpbmcpfHx1KShEKX1mdW5jdGlvbiBEKCl7Zm9yKHZhciBlO0QuX19yPWEubGVuZ3RoOyllPWEuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3YuX19iLXQuX192Ll9fYn0pKSxhPVtdLGUuc29tZSgoZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8saSxhO2UuX19kJiYoaT0obz0odD1lKS5fX3YpLl9fZSwoYT10Ll9fUCkmJihuPVtdLChyPXAoe30sbykpLl9fdj1vLl9fdisxLEYoYSxvLHIsdC5fX24sdm9pZCAwIT09YS5vd25lclNWR0VsZW1lbnQsbnVsbCE9by5fX2g/W2ldOm51bGwsbixudWxsPT1pP2Iobyk6aSxvLl9faCksVChuLG8pLG8uX19lIT1pJiZ3KG8pKSl9KSl9ZnVuY3Rpb24gUyhlLHQsbixyLG8saSxhLHUscyxsKXt2YXIgZCxwLGgsZyxtLHcsRSxEPXImJnIuX19rfHxmLFM9RC5sZW5ndGg7Zm9yKG4uX19rPVtdLGQ9MDtkPHQubGVuZ3RoO2QrKylpZihudWxsIT0oZz1uLl9fa1tkXT1udWxsPT0oZz10W2RdKXx8XCJib29sZWFuXCI9PXR5cGVvZiBnP251bGw6XCJzdHJpbmdcIj09dHlwZW9mIGd8fFwibnVtYmVyXCI9PXR5cGVvZiBnfHxcImJpZ2ludFwiPT10eXBlb2YgZz92KG51bGwsZyxudWxsLG51bGwsZyk6QXJyYXkuaXNBcnJheShnKT92KHkse2NoaWxkcmVuOmd9LG51bGwsbnVsbCxudWxsKTpnLl9fYj4wP3YoZy50eXBlLGcucHJvcHMsZy5rZXksbnVsbCxnLl9fdik6Zykpe2lmKGcuX189bixnLl9fYj1uLl9fYisxLG51bGw9PT0oaD1EW2RdKXx8aCYmZy5rZXk9PWgua2V5JiZnLnR5cGU9PT1oLnR5cGUpRFtkXT12b2lkIDA7ZWxzZSBmb3IocD0wO3A8UztwKyspe2lmKChoPURbcF0pJiZnLmtleT09aC5rZXkmJmcudHlwZT09PWgudHlwZSl7RFtwXT12b2lkIDA7YnJlYWt9aD1udWxsfUYoZSxnLGg9aHx8YyxvLGksYSx1LHMsbCksbT1nLl9fZSwocD1nLnJlZikmJmgucmVmIT1wJiYoRXx8KEU9W10pLGgucmVmJiZFLnB1c2goaC5yZWYsbnVsbCxnKSxFLnB1c2gocCxnLl9fY3x8bSxnKSksbnVsbCE9bT8obnVsbD09dyYmKHc9bSksXCJmdW5jdGlvblwiPT10eXBlb2YgZy50eXBlJiZnLl9faz09PWguX19rP2cuX19kPXM9eChnLHMsZSk6cz1DKGUsZyxoLEQsbSxzKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGUmJihuLl9fZD1zKSk6cyYmaC5fX2U9PXMmJnMucGFyZW50Tm9kZSE9ZSYmKHM9YihoKSl9Zm9yKG4uX19lPXcsZD1TO2QtLTspbnVsbCE9RFtkXSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZSYmbnVsbCE9RFtkXS5fX2UmJkRbZF0uX19lPT1uLl9fZCYmKG4uX19kPWIocixkKzEpKSxqKERbZF0sRFtkXSkpO2lmKEUpZm9yKGQ9MDtkPEUubGVuZ3RoO2QrKylQKEVbZF0sRVsrK2RdLEVbKytkXSl9ZnVuY3Rpb24geChlLHQsbil7Zm9yKHZhciByLG89ZS5fX2ssaT0wO28mJmk8by5sZW5ndGg7aSsrKShyPW9baV0pJiYoci5fXz1lLHQ9XCJmdW5jdGlvblwiPT10eXBlb2Ygci50eXBlP3gocix0LG4pOkMobixyLHIsbyxyLl9fZSx0KSk7cmV0dXJuIHR9ZnVuY3Rpb24gQyhlLHQsbixyLG8saSl7dmFyIGEsdSxzO2lmKHZvaWQgMCE9PXQuX19kKWE9dC5fX2QsdC5fX2Q9dm9pZCAwO2Vsc2UgaWYobnVsbD09bnx8byE9aXx8bnVsbD09by5wYXJlbnROb2RlKWU6aWYobnVsbD09aXx8aS5wYXJlbnROb2RlIT09ZSllLmFwcGVuZENoaWxkKG8pLGE9bnVsbDtlbHNle2Zvcih1PWkscz0wOyh1PXUubmV4dFNpYmxpbmcpJiZzPHIubGVuZ3RoO3MrPTIpaWYodT09bylicmVhayBlO2UuaW5zZXJ0QmVmb3JlKG8saSksYT1pfXJldHVybiB2b2lkIDAhPT1hP2E6by5uZXh0U2libGluZ31mdW5jdGlvbiBBKGUsdCxuKXtcIi1cIj09PXRbMF0/ZS5zZXRQcm9wZXJ0eSh0LG4pOmVbdF09bnVsbD09bj9cIlwiOlwibnVtYmVyXCIhPXR5cGVvZiBufHxkLnRlc3QodCk/bjpuK1wicHhcIn1mdW5jdGlvbiBPKGUsdCxuLHIsbyl7dmFyIGk7ZTppZihcInN0eWxlXCI9PT10KWlmKFwic3RyaW5nXCI9PXR5cGVvZiBuKWUuc3R5bGUuY3NzVGV4dD1uO2Vsc2V7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHImJihlLnN0eWxlLmNzc1RleHQ9cj1cIlwiKSxyKWZvcih0IGluIHIpbiYmdCBpbiBufHxBKGUuc3R5bGUsdCxcIlwiKTtpZihuKWZvcih0IGluIG4pciYmblt0XT09PXJbdF18fEEoZS5zdHlsZSx0LG5bdF0pfWVsc2UgaWYoXCJvXCI9PT10WzBdJiZcIm5cIj09PXRbMV0paT10IT09KHQ9dC5yZXBsYWNlKC9DYXB0dXJlJC8sXCJcIikpLHQ9dC50b0xvd2VyQ2FzZSgpaW4gZT90LnRvTG93ZXJDYXNlKCkuc2xpY2UoMik6dC5zbGljZSgyKSxlLmx8fChlLmw9e30pLGUubFt0K2ldPW4sbj9yfHxlLmFkZEV2ZW50TGlzdGVuZXIodCxpP0I6ayxpKTplLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxpP0I6ayxpKTtlbHNlIGlmKFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIiE9PXQpe2lmKG8pdD10LnJlcGxhY2UoL3hsaW5rW0g6aF0vLFwiaFwiKS5yZXBsYWNlKC9zTmFtZSQvLFwic1wiKTtlbHNlIGlmKFwiaHJlZlwiIT09dCYmXCJsaXN0XCIhPT10JiZcImZvcm1cIiE9PXQmJlwidGFiSW5kZXhcIiE9PXQmJlwiZG93bmxvYWRcIiE9PXQmJnQgaW4gZSl0cnl7ZVt0XT1udWxsPT1uP1wiXCI6bjticmVhayBlfWNhdGNoKGUpe31cImZ1bmN0aW9uXCI9PXR5cGVvZiBufHwobnVsbCE9biYmKCExIT09bnx8XCJhXCI9PT10WzBdJiZcInJcIj09PXRbMV0pP2Uuc2V0QXR0cmlidXRlKHQsbik6ZS5yZW1vdmVBdHRyaWJ1dGUodCkpfX1mdW5jdGlvbiBrKGUpe3RoaXMubFtlLnR5cGUrITFdKHIuZXZlbnQ/ci5ldmVudChlKTplKX1mdW5jdGlvbiBCKGUpe3RoaXMubFtlLnR5cGUrITBdKHIuZXZlbnQ/ci5ldmVudChlKTplKX1mdW5jdGlvbiBGKGUsdCxuLG8saSxhLHUscyxsKXt2YXIgYyxmLGQsaCxnLHYsYix3LEUsRCx4LEM9dC50eXBlO2lmKHZvaWQgMCE9PXQuY29uc3RydWN0b3IpcmV0dXJuIG51bGw7bnVsbCE9bi5fX2gmJihsPW4uX19oLHM9dC5fX2U9bi5fX2UsdC5fX2g9bnVsbCxhPVtzXSksKGM9ci5fX2IpJiZjKHQpO3RyeXtlOmlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIEMpe2lmKHc9dC5wcm9wcyxFPShjPUMuY29udGV4dFR5cGUpJiZvW2MuX19jXSxEPWM/RT9FLnByb3BzLnZhbHVlOmMuX186byxuLl9fYz9iPShmPXQuX19jPW4uX19jKS5fXz1mLl9fRTooXCJwcm90b3R5cGVcImluIEMmJkMucHJvdG90eXBlLnJlbmRlcj90Ll9fYz1mPW5ldyBDKHcsRCk6KHQuX19jPWY9bmV3IG0odyxEKSxmLmNvbnN0cnVjdG9yPUMsZi5yZW5kZXI9TiksRSYmRS5zdWIoZiksZi5wcm9wcz13LGYuc3RhdGV8fChmLnN0YXRlPXt9KSxmLmNvbnRleHQ9RCxmLl9fbj1vLGQ9Zi5fX2Q9ITAsZi5fX2g9W10pLG51bGw9PWYuX19zJiYoZi5fX3M9Zi5zdGF0ZSksbnVsbCE9Qy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMmJihmLl9fcz09Zi5zdGF0ZSYmKGYuX19zPXAoe30sZi5fX3MpKSxwKGYuX19zLEMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHcsZi5fX3MpKSksaD1mLnByb3BzLGc9Zi5zdGF0ZSxkKW51bGw9PUMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiZudWxsIT1mLmNvbXBvbmVudFdpbGxNb3VudCYmZi5jb21wb25lbnRXaWxsTW91bnQoKSxudWxsIT1mLmNvbXBvbmVudERpZE1vdW50JiZmLl9faC5wdXNoKGYuY29tcG9uZW50RGlkTW91bnQpO2Vsc2V7aWYobnVsbD09Qy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMmJnchPT1oJiZudWxsIT1mLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJmYuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3LEQpLCFmLl9fZSYmbnVsbCE9Zi5zaG91bGRDb21wb25lbnRVcGRhdGUmJiExPT09Zi5zaG91bGRDb21wb25lbnRVcGRhdGUodyxmLl9fcyxEKXx8dC5fX3Y9PT1uLl9fdil7Zi5wcm9wcz13LGYuc3RhdGU9Zi5fX3MsdC5fX3YhPT1uLl9fdiYmKGYuX19kPSExKSxmLl9fdj10LHQuX19lPW4uX19lLHQuX19rPW4uX19rLHQuX19rLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UmJihlLl9fPXQpfSkpLGYuX19oLmxlbmd0aCYmdS5wdXNoKGYpO2JyZWFrIGV9bnVsbCE9Zi5jb21wb25lbnRXaWxsVXBkYXRlJiZmLmNvbXBvbmVudFdpbGxVcGRhdGUodyxmLl9fcyxEKSxudWxsIT1mLmNvbXBvbmVudERpZFVwZGF0ZSYmZi5fX2gucHVzaCgoZnVuY3Rpb24oKXtmLmNvbXBvbmVudERpZFVwZGF0ZShoLGcsdil9KSl9Zi5jb250ZXh0PUQsZi5wcm9wcz13LGYuc3RhdGU9Zi5fX3MsKGM9ci5fX3IpJiZjKHQpLGYuX19kPSExLGYuX192PXQsZi5fX1A9ZSxjPWYucmVuZGVyKGYucHJvcHMsZi5zdGF0ZSxmLmNvbnRleHQpLGYuc3RhdGU9Zi5fX3MsbnVsbCE9Zi5nZXRDaGlsZENvbnRleHQmJihvPXAocCh7fSxvKSxmLmdldENoaWxkQ29udGV4dCgpKSksZHx8bnVsbD09Zi5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8KHY9Zi5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShoLGcpKSx4PW51bGwhPWMmJmMudHlwZT09PXkmJm51bGw9PWMua2V5P2MucHJvcHMuY2hpbGRyZW46YyxTKGUsQXJyYXkuaXNBcnJheSh4KT94Olt4XSx0LG4sbyxpLGEsdSxzLGwpLGYuYmFzZT10Ll9fZSx0Ll9faD1udWxsLGYuX19oLmxlbmd0aCYmdS5wdXNoKGYpLGImJihmLl9fRT1mLl9fPW51bGwpLGYuX19lPSExfWVsc2UgbnVsbD09YSYmdC5fX3Y9PT1uLl9fdj8odC5fX2s9bi5fX2ssdC5fX2U9bi5fX2UpOnQuX19lPV8obi5fX2UsdCxuLG8saSxhLHUsbCk7KGM9ci5kaWZmZWQpJiZjKHQpfWNhdGNoKGUpe3QuX192PW51bGwsKGx8fG51bGwhPWEpJiYodC5fX2U9cyx0Ll9faD0hIWwsYVthLmluZGV4T2YocyldPW51bGwpLHIuX19lKGUsdCxuKX19ZnVuY3Rpb24gVChlLHQpe3IuX19jJiZyLl9fYyh0LGUpLGUuc29tZSgoZnVuY3Rpb24odCl7dHJ5e2U9dC5fX2gsdC5fX2g9W10sZS5zb21lKChmdW5jdGlvbihlKXtlLmNhbGwodCl9KSl9Y2F0Y2goZSl7ci5fX2UoZSx0Ll9fdil9fSkpfWZ1bmN0aW9uIF8oZSx0LHIsbyxpLGEsdSxzKXt2YXIgbCxmLGQscD1yLnByb3BzLGc9dC5wcm9wcyx2PXQudHlwZSx5PTA7aWYoXCJzdmdcIj09PXYmJihpPSEwKSxudWxsIT1hKWZvcig7eTxhLmxlbmd0aDt5KyspaWYoKGw9YVt5XSkmJlwic2V0QXR0cmlidXRlXCJpbiBsPT0hIXYmJih2P2wubG9jYWxOYW1lPT09djozPT09bC5ub2RlVHlwZSkpe2U9bCxhW3ldPW51bGw7YnJlYWt9aWYobnVsbD09ZSl7aWYobnVsbD09PXYpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGcpO2U9aT9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHYpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodixnLmlzJiZnKSxhPW51bGwscz0hMX1pZihudWxsPT09dilwPT09Z3x8cyYmZS5kYXRhPT09Z3x8KGUuZGF0YT1nKTtlbHNle2lmKGE9YSYmbi5jYWxsKGUuY2hpbGROb2RlcyksZj0ocD1yLnByb3BzfHxjKS5kYW5nZXJvdXNseVNldElubmVySFRNTCxkPWcuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwsIXMpe2lmKG51bGwhPWEpZm9yKHA9e30seT0wO3k8ZS5hdHRyaWJ1dGVzLmxlbmd0aDt5KyspcFtlLmF0dHJpYnV0ZXNbeV0ubmFtZV09ZS5hdHRyaWJ1dGVzW3ldLnZhbHVlOyhkfHxmKSYmKGQmJihmJiZkLl9faHRtbD09Zi5fX2h0bWx8fGQuX19odG1sPT09ZS5pbm5lckhUTUwpfHwoZS5pbm5lckhUTUw9ZCYmZC5fX2h0bWx8fFwiXCIpKX1pZihmdW5jdGlvbihlLHQsbixyLG8pe3ZhciBpO2ZvcihpIGluIG4pXCJjaGlsZHJlblwiPT09aXx8XCJrZXlcIj09PWl8fGkgaW4gdHx8TyhlLGksbnVsbCxuW2ldLHIpO2ZvcihpIGluIHQpbyYmXCJmdW5jdGlvblwiIT10eXBlb2YgdFtpXXx8XCJjaGlsZHJlblwiPT09aXx8XCJrZXlcIj09PWl8fFwidmFsdWVcIj09PWl8fFwiY2hlY2tlZFwiPT09aXx8bltpXT09PXRbaV18fE8oZSxpLHRbaV0sbltpXSxyKX0oZSxnLHAsaSxzKSxkKXQuX19rPVtdO2Vsc2UgaWYoeT10LnByb3BzLmNoaWxkcmVuLFMoZSxBcnJheS5pc0FycmF5KHkpP3k6W3ldLHQscixvLGkmJlwiZm9yZWlnbk9iamVjdFwiIT09dixhLHUsYT9hWzBdOnIuX19rJiZiKHIsMCkscyksbnVsbCE9YSlmb3IoeT1hLmxlbmd0aDt5LS07KW51bGwhPWFbeV0mJmgoYVt5XSk7c3x8KFwidmFsdWVcImluIGcmJnZvaWQgMCE9PSh5PWcudmFsdWUpJiYoeSE9PXAudmFsdWV8fHkhPT1lLnZhbHVlfHxcInByb2dyZXNzXCI9PT12JiYheSkmJk8oZSxcInZhbHVlXCIseSxwLnZhbHVlLCExKSxcImNoZWNrZWRcImluIGcmJnZvaWQgMCE9PSh5PWcuY2hlY2tlZCkmJnkhPT1lLmNoZWNrZWQmJk8oZSxcImNoZWNrZWRcIix5LHAuY2hlY2tlZCwhMSkpfXJldHVybiBlfWZ1bmN0aW9uIFAoZSx0LG4pe3RyeXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UodCk6ZS5jdXJyZW50PXR9Y2F0Y2goZSl7ci5fX2UoZSxuKX19ZnVuY3Rpb24gaihlLHQsbil7dmFyIG8saTtpZihyLnVubW91bnQmJnIudW5tb3VudChlKSwobz1lLnJlZikmJihvLmN1cnJlbnQmJm8uY3VycmVudCE9PWUuX19lfHxQKG8sbnVsbCx0KSksbnVsbCE9KG89ZS5fX2MpKXtpZihvLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXtvLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goZSl7ci5fX2UoZSx0KX1vLmJhc2U9by5fX1A9bnVsbH1pZihvPWUuX19rKWZvcihpPTA7aTxvLmxlbmd0aDtpKyspb1tpXSYmaihvW2ldLHQsXCJmdW5jdGlvblwiIT10eXBlb2YgZS50eXBlKTtufHxudWxsPT1lLl9fZXx8aChlLl9fZSksZS5fX2U9ZS5fX2Q9dm9pZCAwfWZ1bmN0aW9uIE4oZSx0LG4pe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yKGUsbil9ZnVuY3Rpb24gSShlLHQsbyl7dmFyIGksYSx1O3IuX18mJnIuX18oZSx0KSxhPShpPVwiZnVuY3Rpb25cIj09dHlwZW9mIG8pP251bGw6byYmby5fX2t8fHQuX19rLHU9W10sRih0LGU9KCFpJiZvfHx0KS5fX2s9Zyh5LG51bGwsW2VdKSxhfHxjLGMsdm9pZCAwIT09dC5vd25lclNWR0VsZW1lbnQsIWkmJm8/W29dOmE/bnVsbDp0LmZpcnN0Q2hpbGQ/bi5jYWxsKHQuY2hpbGROb2Rlcyk6bnVsbCx1LCFpJiZvP286YT9hLl9fZTp0LmZpcnN0Q2hpbGQsaSksVCh1LGUpfW49Zi5zbGljZSxyPXtfX2U6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixvO3Q9dC5fXzspaWYoKG49dC5fX2MpJiYhbi5fXyl0cnl7aWYoKHI9bi5jb25zdHJ1Y3RvcikmJm51bGwhPXIuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yJiYobi5zZXRTdGF0ZShyLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlKSksbz1uLl9fZCksbnVsbCE9bi5jb21wb25lbnREaWRDYXRjaCYmKG4uY29tcG9uZW50RGlkQ2F0Y2goZSksbz1uLl9fZCksbylyZXR1cm4gbi5fX0U9bn1jYXRjaCh0KXtlPXR9dGhyb3cgZX19LG89MCxpPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZ2b2lkIDA9PT1lLmNvbnN0cnVjdG9yfSxtLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuO249bnVsbCE9dGhpcy5fX3MmJnRoaXMuX19zIT09dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1wKHt9LHRoaXMuc3RhdGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlPWUocCh7fSxuKSx0aGlzLnByb3BzKSksZSYmcChuLGUpLG51bGwhPWUmJnRoaXMuX192JiYodCYmdGhpcy5fX2gucHVzaCh0KSxFKHRoaXMpKX0sbS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCxlJiZ0aGlzLl9faC5wdXNoKGUpLEUodGhpcykpfSxtLnByb3RvdHlwZS5yZW5kZXI9eSxhPVtdLHU9XCJmdW5jdGlvblwiPT10eXBlb2YgUHJvbWlzZT9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsRC5fX3I9MCxsPTAsdC5Db21wb25lbnQ9bSx0LkZyYWdtZW50PXksdC5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBvLGksYSx1PXAoe30sZS5wcm9wcyk7Zm9yKGEgaW4gdClcImtleVwiPT1hP289dFthXTpcInJlZlwiPT1hP2k9dFthXTp1W2FdPXRbYV07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MiYmKHUuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP24uY2FsbChhcmd1bWVudHMsMik6ciksdihlLnR5cGUsdSxvfHxlLmtleSxpfHxlLnJlZixudWxsKX0sdC5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGUsdCl7dmFyIG49e19fYzp0PVwiX19jQ1wiK2wrKyxfXzplLENvbnN1bWVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY2hpbGRyZW4odCl9LFByb3ZpZGVyOmZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0fHwobj1bXSwocj17fSlbdF09dGhpcyx0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiByfSx0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnByb3BzLnZhbHVlIT09ZS52YWx1ZSYmbi5zb21lKEUpfSx0aGlzLnN1Yj1mdW5jdGlvbihlKXtuLnB1c2goZSk7dmFyIHQ9ZS5jb21wb25lbnRXaWxsVW5tb3VudDtlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7bi5zcGxpY2Uobi5pbmRleE9mKGUpLDEpLHQmJnQuY2FsbChlKX19KSxlLmNoaWxkcmVufX07cmV0dXJuIG4uUHJvdmlkZXIuX189bi5Db25zdW1lci5jb250ZXh0VHlwZT1ufSx0LmNyZWF0ZUVsZW1lbnQ9Zyx0LmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fSx0Lmg9Zyx0Lmh5ZHJhdGU9ZnVuY3Rpb24gZSh0LG4pe0kodCxuLGUpfSx0LmlzVmFsaWRFbGVtZW50PWksdC5vcHRpb25zPXIsdC5yZW5kZXI9SSx0LnRvQ2hpbGRBcnJheT1mdW5jdGlvbiBlKHQsbil7cmV0dXJuIG49bnx8W10sbnVsbD09dHx8XCJib29sZWFuXCI9PXR5cGVvZiB0fHwoQXJyYXkuaXNBcnJheSh0KT90LnNvbWUoKGZ1bmN0aW9uKHQpe2UodCxuKX0pKTpuLnB1c2godCkpLG59fSkpLERtPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PWRvY3VtZW50KSxcInN0cmluZ1wiPT10eXBlb2YgZT90LnF1ZXJ5U2VsZWN0b3IoZSk6KG51bGw9PShuPWUpP3ZvaWQgMDpuLm5vZGVUeXBlKT09PU5vZGUuRUxFTUVOVF9OT0RFP2U6bnVsbDt2YXIgbn0sU209Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt2b2lkIDA9PT10JiYodD17fSksdGhpcy51cHB5PWUsdGhpcy5vcHRzPXR9Z2V0UGx1Z2luU3RhdGUoKXtjb25zdHtwbHVnaW5zOmV9PXRoaXMudXBweS5nZXRTdGF0ZSgpO3JldHVybiBlW3RoaXMuaWRdfHx7fX1zZXRQbHVnaW5TdGF0ZShlKXtjb25zdHtwbHVnaW5zOnR9PXRoaXMudXBweS5nZXRTdGF0ZSgpO3RoaXMudXBweS5zZXRTdGF0ZSh7cGx1Z2luczp7Li4udCxbdGhpcy5pZF06ey4uLnRbdGhpcy5pZF0sLi4uZX19fSl9c2V0T3B0aW9ucyhlKXt0aGlzLm9wdHM9ey4uLnRoaXMub3B0cywuLi5lfSx0aGlzLnNldFBsdWdpblN0YXRlKCksdGhpcy5pMThuSW5pdCgpfWkxOG5Jbml0KCl7Y29uc3QgZT1uZXcgb3koW3RoaXMuZGVmYXVsdExvY2FsZSx0aGlzLnVwcHkubG9jYWxlLHRoaXMub3B0cy5sb2NhbGVdKTt0aGlzLmkxOG49ZS50cmFuc2xhdGUuYmluZChlKSx0aGlzLmkxOG5BcnJheT1lLnRyYW5zbGF0ZUFycmF5LmJpbmQoZSksdGhpcy5zZXRQbHVnaW5TdGF0ZSgpfWFkZFRhcmdldCgpe3Rocm93IG5ldyBFcnJvcihcIkV4dGVuZCB0aGUgYWRkVGFyZ2V0IG1ldGhvZCB0byBhZGQgeW91ciBwbHVnaW4gdG8gYW5vdGhlciBwbHVnaW4ncyB0YXJnZXRcIil9aW5zdGFsbCgpe311bmluc3RhbGwoKXt9cmVuZGVyKCl7dGhyb3cgbmV3IEVycm9yKFwiRXh0ZW5kIHRoZSByZW5kZXIgbWV0aG9kIHRvIGFkZCB5b3VyIHBsdWdpbiB0byBhIERPTSBlbGVtZW50XCIpfXVwZGF0ZSgpe31hZnRlclVwZGF0ZSgpe319O2Z1bmN0aW9uIHhtKGUsdCl7aWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gdXNlIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO3JldHVybiBlfXZhciBDbT0wO2Z1bmN0aW9uIEFtKGUpe3JldHVyblwiX19wcml2YXRlX1wiK0NtKysrXCJfXCIrZX1jb25zdHtyZW5kZXI6T219PUVtO3ZhciBrbT1BbShcInVwZGF0ZVVJXCIpO2NsYXNzIEJtIGV4dGVuZHMgU217Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGttLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KX1tb3VudChlLHQpe2NvbnN0IG49dC5pZCxyPURtKGUpO2lmKHIpe3RoaXMuaXNUYXJnZXRET01FbD0hMDtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4geG0odGhpcyxrbSlba21dPWZ1bmN0aW9uKGUpe2xldCB0PW51bGwsbj1udWxsO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLG89bmV3IEFycmF5KHIpLGk9MDtpPHI7aSsrKW9baV09YXJndW1lbnRzW2ldO3JldHVybiBuPW8sdHx8KHQ9UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKCk9Pih0PW51bGwsZSguLi5uKSkpKSksdH19KChlPT57dGhpcy51cHB5LmdldFBsdWdpbih0aGlzLmlkKSYmKE9tKHRoaXMucmVuZGVyKGUpLHQpLHRoaXMuYWZ0ZXJVcGRhdGUoKSl9KSksdGhpcy51cHB5LmxvZyhgSW5zdGFsbGluZyAke259IHRvIGEgRE9NIGVsZW1lbnQgJyR7ZX0nYCksdGhpcy5vcHRzLnJlcGxhY2VUYXJnZXRDb250ZW50JiYoci5pbm5lckhUTUw9XCJcIiksT20odGhpcy5yZW5kZXIodGhpcy51cHB5LmdldFN0YXRlKCkpLHQpLHRoaXMuZWw9dC5maXJzdEVsZW1lbnRDaGlsZCxyLmFwcGVuZENoaWxkKHQpLHRoaXMub25Nb3VudCgpLHRoaXMuZWx9bGV0IG87aWYoXCJvYmplY3RcIj09dHlwZW9mIGUmJmUgaW5zdGFuY2VvZiBCbSlvPWU7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKXtjb25zdCB0PWU7dGhpcy51cHB5Lml0ZXJhdGVQbHVnaW5zKChlPT57aWYoZSBpbnN0YW5jZW9mIHQpcmV0dXJuIG89ZSwhMX0pKX1pZihvKXJldHVybiB0aGlzLnVwcHkubG9nKGBJbnN0YWxsaW5nICR7bn0gdG8gJHtvLmlkfWApLHRoaXMucGFyZW50PW8sdGhpcy5lbD1vLmFkZFRhcmdldCh0KSx0aGlzLm9uTW91bnQoKSx0aGlzLmVsO3RoaXMudXBweS5sb2coYE5vdCBpbnN0YWxsaW5nICR7bn1gKTtsZXQgaT1gSW52YWxpZCB0YXJnZXQgb3B0aW9uIGdpdmVuIHRvICR7bn0uYDt0aHJvdyBpKz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP1wiIFRoZSBnaXZlbiB0YXJnZXQgaXMgbm90IGEgUGx1Z2luIGNsYXNzLiBQbGVhc2UgY2hlY2sgdGhhdCB5b3UncmUgbm90IHNwZWNpZnlpbmcgYSBSZWFjdCBDb21wb25lbnQgaW5zdGVhZCBvZiBhIHBsdWdpbi4gSWYgeW91IGFyZSB1c2luZyBAdXBweS8qIHBhY2thZ2VzIGRpcmVjdGx5LCBtYWtlIHN1cmUgeW91IGhhdmUgb25seSAxIHZlcnNpb24gb2YgQHVwcHkvY29yZSBpbnN0YWxsZWQ6IHJ1biBgbnBtIGxzIEB1cHB5L2NvcmVgIG9uIHRoZSBjb21tYW5kIGxpbmUgYW5kIHZlcmlmeSB0aGF0IGFsbCB0aGUgdmVyc2lvbnMgbWF0Y2ggYW5kIGFyZSBkZWR1cGVkIGNvcnJlY3RseS5cIjpcIklmIHlvdSBtZWFudCB0byB0YXJnZXQgYW4gSFRNTCBlbGVtZW50LCBwbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhlIGVsZW1lbnQgZXhpc3RzLiBDaGVjayB0aGF0IHRoZSA8c2NyaXB0PiB0YWcgaW5pdGlhbGl6aW5nIFVwcHkgaXMgcmlnaHQgYmVmb3JlIHRoZSBjbG9zaW5nIDwvYm9keT4gdGFnIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UuIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RyYW5zbG9hZGl0L3VwcHkvaXNzdWVzLzEwNDIpXFxuXFxuSWYgeW91IG1lYW50IHRvIHRhcmdldCBhIHBsdWdpbiwgcGxlYXNlIGNvbmZpcm0gdGhhdCB5b3VyIGBpbXBvcnRgIHN0YXRlbWVudHMgb3IgYHJlcXVpcmVgIGNhbGxzIGFyZSBjb3JyZWN0LlwiLG5ldyBFcnJvcihpKX11cGRhdGUoZSl7dmFyIHQsbjtudWxsIT10aGlzLmVsJiYobnVsbD09KHQ9KG49eG0odGhpcyxrbSkpW2ttXSl8fHQuY2FsbChuLGUpKX11bm1vdW50KCl7dmFyIGU7dGhpcy5pc1RhcmdldERPTUVsJiYobnVsbD09KGU9dGhpcy5lbCl8fGUucmVtb3ZlKCkpO3RoaXMub25Vbm1vdW50KCl9b25Nb3VudCgpe31vblVubW91bnQoKXt9fXZhciBGbT1CbTtjb25zdHtkZWJ1Z0xvZ2dlcjpUbX09T3k7dmFyIF9tPXdtLFBtPXdtLGptPUZtLE5tPVNtLEltPVRtO19tLlVwcHk9UG0sX20uVUlQbHVnaW49am0sX20uQmFzZVBsdWdpbj1ObSxfbS5kZWJ1Z0xvZ2dlcj1JbTtjbGFzcyBMbSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCl7dm9pZCAwPT09dCYmKHQ9bnVsbCksc3VwZXIoXCJUaGlzIGxvb2tzIGxpa2UgYSBuZXR3b3JrIGVycm9yLCB0aGUgZW5kcG9pbnQgbWlnaHQgYmUgYmxvY2tlZCBieSBhbiBpbnRlcm5ldCBwcm92aWRlciBvciBhIGZpcmV3YWxsLlwiKSx0aGlzLmNhdXNlPWUsdGhpcy5pc05ldHdvcmtFcnJvcj0hMCx0aGlzLnJlcXVlc3Q9dH19dmFyIFJtPUxtLE1tPWZ1bmN0aW9uKCl7cmV0dXJuIGZldGNoKC4uLmFyZ3VtZW50cykuY2F0Y2goKGU9Pnt0aHJvd1wiQWJvcnRFcnJvclwiPT09ZS5uYW1lP2U6bmV3IFJtKGUpfSkpfTtjbGFzcyB6bSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoXCJBdXRob3JpemF0aW9uIHJlcXVpcmVkXCIpLHRoaXMubmFtZT1cIkF1dGhFcnJvclwiLHRoaXMuaXNBdXRoRXJyb3I9ITB9fXZhciAkbSxIbSxWbSxVbSxXbSxHbT16bTtmdW5jdGlvbiBxbShlLHQpe2lmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHVzZSBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtyZXR1cm4gZX12YXIgS209MDtmdW5jdGlvbiBZbShlKXtyZXR1cm5cIl9fcHJpdmF0ZV9cIitLbSsrK1wiX1wiK2V9YXN5bmMgZnVuY3Rpb24gWG0oZSl7aWYoNDAxPT09ZS5zdGF0dXMpdGhyb3cgbmV3IEdtO2NvbnN0IHQ9ZS5qc29uKCk7aWYoZS5zdGF0dXM8MjAwfHxlLnN0YXR1cz4zMDApe2xldCBuPWBGYWlsZWQgcmVxdWVzdCB3aXRoIHN0YXR1czogJHtlLnN0YXR1c30uICR7ZS5zdGF0dXNUZXh0fWA7dHJ5e2NvbnN0IGU9YXdhaXQgdDtuPWUubWVzc2FnZT9gJHtufSBtZXNzYWdlOiAke2UubWVzc2FnZX1gOm4sbj1lLnJlcXVlc3RJZD9gJHtufSByZXF1ZXN0LUlkOiAke2UucmVxdWVzdElkfWA6bn1maW5hbGx5e3Rocm93IG5ldyBFcnJvcihuKX19cmV0dXJuIHR9dmFyIFptPShIbT1ZbShcImdldFBvc3RSZXNwb25zZUZ1bmNcIiksVm09WW0oXCJnZXRVcmxcIiksVW09WW0oXCJlcnJvckhhbmRsZXJcIiksV209JG09Y2xhc3MgZXtjb25zdHJ1Y3RvcihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFVtLHt2YWx1ZTpRbX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFZtLHt2YWx1ZTpKbX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLEhtLHt3cml0YWJsZTohMCx2YWx1ZTplPT50PT5lP3Q6dGhpcy5vblJlY2VpdmVSZXNwb25zZSh0KX0pLHRoaXMudXBweT1lLHRoaXMub3B0cz10LHRoaXMub25SZWNlaXZlUmVzcG9uc2U9dGhpcy5vblJlY2VpdmVSZXNwb25zZS5iaW5kKHRoaXMpLHRoaXMuYWxsb3dlZEhlYWRlcnM9W1wiYWNjZXB0XCIsXCJjb250ZW50LXR5cGVcIixcInVwcHktYXV0aC10b2tlblwiXSx0aGlzLnByZWZsaWdodERvbmU9ITF9Z2V0IGhvc3RuYW1lKCl7Y29uc3R7Y29tcGFuaW9uOmV9PXRoaXMudXBweS5nZXRTdGF0ZSgpLHQ9dGhpcy5vcHRzLmNvbXBhbmlvblVybDtyZXR1cm4oZSYmZVt0XT9lW3RdOnQpLnJlcGxhY2UoL1xcLyQvLFwiXCIpfWhlYWRlcnMoKXtjb25zdCB0PXRoaXMub3B0cy5jb21wYW5pb25IZWFkZXJzfHx7fTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsuLi5lLmRlZmF1bHRIZWFkZXJzLC4uLnR9KX1vblJlY2VpdmVSZXNwb25zZShlKXtjb25zdCB0PXRoaXMudXBweS5nZXRTdGF0ZSgpLmNvbXBhbmlvbnx8e30sbj10aGlzLm9wdHMuY29tcGFuaW9uVXJsLHtoZWFkZXJzOnJ9PWU7cmV0dXJuIHIuaGFzKFwiaS1hbVwiKSYmci5nZXQoXCJpLWFtXCIpIT09dFtuXSYmdGhpcy51cHB5LnNldFN0YXRlKHtjb21wYW5pb246ey4uLnQsW25dOnIuZ2V0KFwiaS1hbVwiKX19KSxlfXByZWZsaWdodChlKXtyZXR1cm4gdGhpcy5wcmVmbGlnaHREb25lP1Byb21pc2UucmVzb2x2ZSh0aGlzLmFsbG93ZWRIZWFkZXJzLnNsaWNlKCkpOmZldGNoKHFtKHRoaXMsVm0pW1ZtXShlKSx7bWV0aG9kOlwiT1BUSU9OU1wifSkudGhlbigoZT0+KGUuaGVhZGVycy5oYXMoXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzXCIpJiYodGhpcy5hbGxvd2VkSGVhZGVycz1lLmhlYWRlcnMuZ2V0KFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiKS5zcGxpdChcIixcIikubWFwKChlPT5lLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSkpLHRoaXMucHJlZmxpZ2h0RG9uZT0hMCx0aGlzLmFsbG93ZWRIZWFkZXJzLnNsaWNlKCkpKSkuY2F0Y2goKGU9Pih0aGlzLnVwcHkubG9nKGBbQ29tcGFuaW9uQ2xpZW50XSB1bmFibGUgdG8gbWFrZSBwcmVmbGlnaHQgcmVxdWVzdCAke2V9YCxcIndhcm5pbmdcIiksdGhpcy5wcmVmbGlnaHREb25lPSEwLHRoaXMuYWxsb3dlZEhlYWRlcnMuc2xpY2UoKSkpKX1wcmVmbGlnaHRBbmRIZWFkZXJzKGUpe3JldHVybiBQcm9taXNlLmFsbChbdGhpcy5wcmVmbGlnaHQoZSksdGhpcy5oZWFkZXJzKCldKS50aGVuKChlPT57bGV0W3Qsbl09ZTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaCgoZT0+e3QuaW5jbHVkZXMoZS50b0xvd2VyQ2FzZSgpKXx8KHRoaXMudXBweS5sb2coYFtDb21wYW5pb25DbGllbnRdIGV4Y2x1ZGluZyBkaXNhbGxvd2VkIGhlYWRlciAke2V9YCksZGVsZXRlIG5bZV0pfSkpLG59KSl9Z2V0KGUsdCl7cmV0dXJuIHRoaXMucHJlZmxpZ2h0QW5kSGVhZGVycyhlKS50aGVuKCh0PT5NbShxbSh0aGlzLFZtKVtWbV0oZSkse21ldGhvZDpcImdldFwiLGhlYWRlcnM6dCxjcmVkZW50aWFsczp0aGlzLm9wdHMuY29tcGFuaW9uQ29va2llc1J1bGV8fFwic2FtZS1vcmlnaW5cIn0pKSkudGhlbihxbSh0aGlzLEhtKVtIbV0odCkpLnRoZW4oWG0pLmNhdGNoKHFtKHRoaXMsVW0pW1VtXShcImdldFwiLGUpKX1wb3N0KGUsdCxuKXtjb25zdCByPVwicG9zdFwiO3JldHVybiB0aGlzLnByZWZsaWdodEFuZEhlYWRlcnMoZSkudGhlbigobj0+TW0ocW0odGhpcyxWbSlbVm1dKGUpLHttZXRob2Q6cixoZWFkZXJzOm4sY3JlZGVudGlhbHM6dGhpcy5vcHRzLmNvbXBhbmlvbkNvb2tpZXNSdWxlfHxcInNhbWUtb3JpZ2luXCIsYm9keTpKU09OLnN0cmluZ2lmeSh0KX0pKSkudGhlbihxbSh0aGlzLEhtKVtIbV0obikpLnRoZW4oWG0pLmNhdGNoKHFtKHRoaXMsVW0pW1VtXShyLGUpKX1kZWxldGUoZSx0LG4pe2NvbnN0IHI9XCJkZWxldGVcIjtyZXR1cm4gdGhpcy5wcmVmbGlnaHRBbmRIZWFkZXJzKGUpLnRoZW4oKG49Pk1tKGAke3RoaXMuaG9zdG5hbWV9LyR7ZX1gLHttZXRob2Q6cixoZWFkZXJzOm4sY3JlZGVudGlhbHM6dGhpcy5vcHRzLmNvbXBhbmlvbkNvb2tpZXNSdWxlfHxcInNhbWUtb3JpZ2luXCIsYm9keTp0P0pTT04uc3RyaW5naWZ5KHQpOm51bGx9KSkpLnRoZW4ocW0odGhpcyxIbSlbSG1dKG4pKS50aGVuKFhtKS5jYXRjaChxbSh0aGlzLFVtKVtVbV0ocixlKSl9fSwkbS5WRVJTSU9OPVwiMi4wLjRcIiwkbS5kZWZhdWx0SGVhZGVycz17QWNjZXB0OlwiYXBwbGljYXRpb24vanNvblwiLFwiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi9qc29uXCIsXCJVcHB5LVZlcnNpb25zXCI6YEB1cHB5L2NvbXBhbmlvbi1jbGllbnQ9JHskbS5WRVJTSU9OfWB9LFdtKTtmdW5jdGlvbiBKbShlKXtyZXR1cm4vXihodHRwcz86fClcXC9cXC8vLnRlc3QoZSk/ZTpgJHt0aGlzLmhvc3RuYW1lfS8ke2V9YH1mdW5jdGlvbiBRbShlLHQpe3JldHVybiBuPT57dmFyIHI7aWYobnVsbD09KHI9bil8fCFyLmlzQXV0aEVycm9yKXtjb25zdCByPW5ldyBFcnJvcihgQ291bGQgbm90ICR7ZX0gJHtxbSh0aGlzLFZtKVtWbV0odCl9YCk7ci5jYXVzZT1uLG49cn1yZXR1cm4gUHJvbWlzZS5yZWplY3Qobil9fXZhciBlYj17c2V0SXRlbTooZSx0KT0+bmV3IFByb21pc2UoKG49Pntsb2NhbFN0b3JhZ2Uuc2V0SXRlbShlLHQpLG4oKX0pKSxnZXRJdGVtOmU9PlByb21pc2UucmVzb2x2ZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShlKSkscmVtb3ZlSXRlbTplPT5uZXcgUHJvbWlzZSgodD0+e2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGUpLHQoKX0pKX07dmFyIHRiLG5iLHJiLG9iLGliO2xldCBhYix1YjtmdW5jdGlvbiBzYihlLHQpe2lmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHVzZSBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtyZXR1cm4gZX12YXIgbGI9MDtmdW5jdGlvbiBjYihlKXtyZXR1cm5cIl9fcHJpdmF0ZV9cIitsYisrK1wiX1wiK2V9dmFyIGZiPSh0Yj1jYihcInF1ZXVlZFwiKSxuYj1jYihcImVtaXR0ZXJcIikscmI9Y2IoXCJpc09wZW5cIiksb2I9Y2IoXCJzb2NrZXRcIiksaWI9Y2IoXCJoYW5kbGVNZXNzYWdlXCIpLGFiPVN5bWJvbC5mb3IoXCJ1cHB5IHRlc3Q6IGdldFNvY2tldFwiKSx1Yj1TeW1ib2wuZm9yKFwidXBweSB0ZXN0OiBnZXRRdWV1ZWRcIiksY2xhc3N7Y29uc3RydWN0b3IoZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdGIse3dyaXRhYmxlOiEwLHZhbHVlOltdfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsbmIse3dyaXRhYmxlOiEwLHZhbHVlOmF5KCl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxyYix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxvYix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsaWIse3dyaXRhYmxlOiEwLHZhbHVlOmU9Pnt0cnl7Y29uc3QgdD1KU09OLnBhcnNlKGUuZGF0YSk7dGhpcy5lbWl0KHQuYWN0aW9uLHQucGF5bG9hZCl9Y2F0Y2goZSl7Y29uc29sZS5sb2coZSl9fX0pLHRoaXMub3B0cz1lLGUmJiExPT09ZS5hdXRvT3Blbnx8dGhpcy5vcGVuKCl9Z2V0IGlzT3Blbigpe3JldHVybiBzYih0aGlzLHJiKVtyYl19W2FiXSgpe3JldHVybiBzYih0aGlzLG9iKVtvYl19W3ViXSgpe3JldHVybiBzYih0aGlzLHRiKVt0Yl19b3Blbigpe3NiKHRoaXMsb2IpW29iXT1uZXcgV2ViU29ja2V0KHRoaXMub3B0cy50YXJnZXQpLHNiKHRoaXMsb2IpW29iXS5vbm9wZW49KCk9Pntmb3Ioc2IodGhpcyxyYilbcmJdPSEwO3NiKHRoaXMsdGIpW3RiXS5sZW5ndGg+MCYmc2IodGhpcyxyYilbcmJdOyl7Y29uc3QgZT1zYih0aGlzLHRiKVt0Yl0uc2hpZnQoKTt0aGlzLnNlbmQoZS5hY3Rpb24sZS5wYXlsb2FkKX19LHNiKHRoaXMsb2IpW29iXS5vbmNsb3NlPSgpPT57c2IodGhpcyxyYilbcmJdPSExfSxzYih0aGlzLG9iKVtvYl0ub25tZXNzYWdlPXNiKHRoaXMsaWIpW2liXX1jbG9zZSgpe3ZhciBlO251bGw9PShlPXNiKHRoaXMsb2IpW29iXSl8fGUuY2xvc2UoKX1zZW5kKGUsdCl7c2IodGhpcyxyYilbcmJdP3NiKHRoaXMsb2IpW29iXS5zZW5kKEpTT04uc3RyaW5naWZ5KHthY3Rpb246ZSxwYXlsb2FkOnR9KSk6c2IodGhpcyx0YilbdGJdLnB1c2goe2FjdGlvbjplLHBheWxvYWQ6dH0pfW9uKGUsdCl7c2IodGhpcyxuYilbbmJdLm9uKGUsdCl9ZW1pdChlLHQpe3NiKHRoaXMsbmIpW25iXS5lbWl0KGUsdCl9b25jZShlLHQpe3NiKHRoaXMsbmIpW25iXS5vbmNlKGUsdCl9fSksZGI9e1JlcXVlc3RDbGllbnQ6Wm0sUHJvdmlkZXI6Y2xhc3MgZXh0ZW5kcyBabXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdGhpcy5wcm92aWRlcj10LnByb3ZpZGVyLHRoaXMuaWQ9dGhpcy5wcm92aWRlcix0aGlzLm5hbWU9dGhpcy5vcHRzLm5hbWV8fChlPT5lLnNwbGl0KFwiLVwiKS5tYXAoKGU9PmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSkpLmpvaW4oXCIgXCIpKSh0aGlzLmlkKSx0aGlzLnBsdWdpbklkPXRoaXMub3B0cy5wbHVnaW5JZCx0aGlzLnRva2VuS2V5PWBjb21wYW5pb24tJHt0aGlzLnBsdWdpbklkfS1hdXRoLXRva2VuYCx0aGlzLmNvbXBhbmlvbktleXNQYXJhbXM9dGhpcy5vcHRzLmNvbXBhbmlvbktleXNQYXJhbXMsdGhpcy5wcmVBdXRoVG9rZW49bnVsbH1oZWFkZXJzKCl7cmV0dXJuIFByb21pc2UuYWxsKFtzdXBlci5oZWFkZXJzKCksdGhpcy5nZXRBdXRoVG9rZW4oKV0pLnRoZW4oKGU9PntsZXRbdCxuXT1lO2NvbnN0IHI9e307cmV0dXJuIG4mJihyW1widXBweS1hdXRoLXRva2VuXCJdPW4pLHRoaXMuY29tcGFuaW9uS2V5c1BhcmFtcyYmKHJbXCJ1cHB5LWNyZWRlbnRpYWxzLXBhcmFtc1wiXT1idG9hKEpTT04uc3RyaW5naWZ5KHtwYXJhbXM6dGhpcy5jb21wYW5pb25LZXlzUGFyYW1zfSkpKSx7Li4udCwuLi5yfX0pKX1vblJlY2VpdmVSZXNwb25zZShlKXtlPXN1cGVyLm9uUmVjZWl2ZVJlc3BvbnNlKGUpO2NvbnN0IHQ9dGhpcy51cHB5LmdldFBsdWdpbih0aGlzLnBsdWdpbklkKSxuPXQuZ2V0UGx1Z2luU3RhdGUoKS5hdXRoZW50aWNhdGVkPzQwMSE9PWUuc3RhdHVzOmUuc3RhdHVzPDQwMDtyZXR1cm4gdC5zZXRQbHVnaW5TdGF0ZSh7YXV0aGVudGljYXRlZDpufSksZX1zZXRBdXRoVG9rZW4oZSl7cmV0dXJuIHRoaXMudXBweS5nZXRQbHVnaW4odGhpcy5wbHVnaW5JZCkuc3RvcmFnZS5zZXRJdGVtKHRoaXMudG9rZW5LZXksZSl9Z2V0QXV0aFRva2VuKCl7cmV0dXJuIHRoaXMudXBweS5nZXRQbHVnaW4odGhpcy5wbHVnaW5JZCkuc3RvcmFnZS5nZXRJdGVtKHRoaXMudG9rZW5LZXkpfWF1dGhVcmwoZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnByZUF1dGhUb2tlbiYmKGUudXBweVByZUF1dGhUb2tlbj10aGlzLnByZUF1dGhUb2tlbiksYCR7dGhpcy5ob3N0bmFtZX0vJHt0aGlzLmlkfS9jb25uZWN0PyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhlKX1gfWZpbGVVcmwoZSl7cmV0dXJuYCR7dGhpcy5ob3N0bmFtZX0vJHt0aGlzLmlkfS9nZXQvJHtlfWB9ZmV0Y2hQcmVBdXRoVG9rZW4oKXtyZXR1cm4gdGhpcy5jb21wYW5pb25LZXlzUGFyYW1zP3RoaXMucG9zdChgJHt0aGlzLmlkfS9wcmVhdXRoL2Ase3BhcmFtczp0aGlzLmNvbXBhbmlvbktleXNQYXJhbXN9KS50aGVuKChlPT57dGhpcy5wcmVBdXRoVG9rZW49ZS50b2tlbn0pKS5jYXRjaCgoZT0+e3RoaXMudXBweS5sb2coYFtDb21wYW5pb25DbGllbnRdIHVuYWJsZSB0byBmZXRjaCBwcmVBdXRoVG9rZW4gJHtlfWAsXCJ3YXJuaW5nXCIpfSkpOlByb21pc2UucmVzb2x2ZSgpfWxpc3QoZSl7cmV0dXJuIHRoaXMuZ2V0KGAke3RoaXMuaWR9L2xpc3QvJHtlfHxcIlwifWApfWxvZ291dCgpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLmlkfS9sb2dvdXRgKS50aGVuKChlPT5Qcm9taXNlLmFsbChbZSx0aGlzLnVwcHkuZ2V0UGx1Z2luKHRoaXMucGx1Z2luSWQpLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnRva2VuS2V5KV0pKSkudGhlbigoZT0+e2xldFt0XT1lO3JldHVybiB0fSkpfXN0YXRpYyBpbml0UGx1Z2luKGUsdCxuKXtpZihlLnR5cGU9XCJhY3F1aXJlclwiLGUuZmlsZXM9W10sbiYmKGUub3B0cz17Li4ubiwuLi50fSksdC5zZXJ2ZXJVcmx8fHQuc2VydmVyUGF0dGVybil0aHJvdyBuZXcgRXJyb3IoXCJgc2VydmVyVXJsYCBhbmQgYHNlcnZlclBhdHRlcm5gIGhhdmUgYmVlbiByZW5hbWVkIHRvIGBjb21wYW5pb25VcmxgIGFuZCBgY29tcGFuaW9uQWxsb3dlZEhvc3RzYCByZXNwZWN0aXZlbHkgaW4gdGhlIDAuMzAuNSByZWxlYXNlLiBQbGVhc2UgY29uc3VsdCB0aGUgZG9jcyAoZm9yIGV4YW1wbGUsIGh0dHBzOi8vdXBweS5pby9kb2NzL2luc3RhZ3JhbS8gZm9yIHRoZSBJbnN0YWdyYW0gcGx1Z2luKSBhbmQgdXNlIHRoZSB1cGRhdGVkIG9wdGlvbnMuYFwiKTtpZih0LmNvbXBhbmlvbkFsbG93ZWRIb3N0cyl7Y29uc3Qgbj10LmNvbXBhbmlvbkFsbG93ZWRIb3N0cztpZighKFwic3RyaW5nXCI9PXR5cGVvZiBufHxBcnJheS5pc0FycmF5KG4pfHxuIGluc3RhbmNlb2YgUmVnRXhwKSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke2UuaWR9OiB0aGUgb3B0aW9uIFwiY29tcGFuaW9uQWxsb3dlZEhvc3RzXCIgbXVzdCBiZSBvbmUgb2Ygc3RyaW5nLCBBcnJheSwgUmVnRXhwYCk7ZS5vcHRzLmNvbXBhbmlvbkFsbG93ZWRIb3N0cz1ufWVsc2UvXig/IWh0dHBzPzpcXC9cXC8pLiokL2kudGVzdCh0LmNvbXBhbmlvblVybCk/ZS5vcHRzLmNvbXBhbmlvbkFsbG93ZWRIb3N0cz1gaHR0cHM6Ly8ke3QuY29tcGFuaW9uVXJsLnJlcGxhY2UoL15cXC9cXC8vLFwiXCIpfWA6ZS5vcHRzLmNvbXBhbmlvbkFsbG93ZWRIb3N0cz1uZXcgVVJMKHQuY29tcGFuaW9uVXJsKS5vcmlnaW47ZS5zdG9yYWdlPWUub3B0cy5zdG9yYWdlfHxlYn19LFNlYXJjaFByb3ZpZGVyOmNsYXNzIGV4dGVuZHMgWm17Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpLHRoaXMucHJvdmlkZXI9dC5wcm92aWRlcix0aGlzLmlkPXRoaXMucHJvdmlkZXIsdGhpcy5uYW1lPXRoaXMub3B0cy5uYW1lfHwoZT0+ZS5zcGxpdChcIi1cIikubWFwKChlPT5lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSkpKS5qb2luKFwiIFwiKSkodGhpcy5pZCksdGhpcy5wbHVnaW5JZD10aGlzLm9wdHMucGx1Z2luSWR9ZmlsZVVybChlKXtyZXR1cm5gJHt0aGlzLmhvc3RuYW1lfS9zZWFyY2gvJHt0aGlzLmlkfS9nZXQvJHtlfWB9c2VhcmNoKGUsdCl7cmV0dXJuIHQ9dD9gJiR7dH1gOlwiXCIsdGhpcy5nZXQoYHNlYXJjaC8ke3RoaXMuaWR9L2xpc3Q/cT0ke2VuY29kZVVSSUNvbXBvbmVudChlKX0ke3R9YCl9fSxTb2NrZXQ6ZmJ9O3ZhciBwYixoYixnYj1lZygoZnVuY3Rpb24oZSx0LG4pe2NvbnN0e3Byb2dyZXNzOnIsYnl0ZXNVcGxvYWRlZDpvLGJ5dGVzVG90YWw6aX09dDtyJiYoZS51cHB5LmxvZyhgVXBsb2FkIHByb2dyZXNzOiAke3J9YCksZS51cHB5LmVtaXQoXCJ1cGxvYWQtcHJvZ3Jlc3NcIixuLHt1cGxvYWRlcjplLGJ5dGVzVXBsb2FkZWQ6byxieXRlc1RvdGFsOml9KSl9KSwzMDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KTtmdW5jdGlvbiB2YihlLHQpe2lmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHVzZSBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtyZXR1cm4gZX12YXIgeWI9MDtmdW5jdGlvbiBtYihlKXtyZXR1cm5cIl9fcHJpdmF0ZV9cIit5YisrK1wiX1wiK2V9dmFyIGJiPShwYj1tYihcImVtaXR0ZXJcIiksaGI9bWIoXCJldmVudHNcIiksY2xhc3N7Y29uc3RydWN0b3IoZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMscGIse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGhiLHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLHZiKHRoaXMscGIpW3BiXT1lfW9uKGUsdCl7cmV0dXJuIHZiKHRoaXMsaGIpW2hiXS5wdXNoKFtlLHRdKSx2Yih0aGlzLHBiKVtwYl0ub24oZSx0KX1yZW1vdmUoKXtmb3IoY29uc3RbZSx0XW9mIHZiKHRoaXMsaGIpW2hiXS5zcGxpY2UoMCkpdmIodGhpcyxwYilbcGJdLm9mZihlLHQpfX0pO2Z1bmN0aW9uIHdiKGUsdCl7aWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gdXNlIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO3JldHVybiBlfXZhciBFYj0wO2Z1bmN0aW9uIERiKGUpe3JldHVyblwiX19wcml2YXRlX1wiK0ViKysrXCJfXCIrZX12YXIgU2I9RGIoXCJhbGl2ZVRpbWVyXCIpLHhiPURiKFwiaXNEb25lXCIpLENiPURiKFwib25UaW1lZE91dFwiKSxBYj1EYihcInRpbWVvdXRcIik7dmFyIE9iPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsU2Ise3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHhiLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLENiLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxBYix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksd2IodGhpcyxBYilbQWJdPWUsd2IodGhpcyxDYilbQ2JdPXR9cHJvZ3Jlc3MoKXt3Yih0aGlzLHhiKVt4Yl18fHdiKHRoaXMsQWIpW0FiXT4wJiYoY2xlYXJUaW1lb3V0KHdiKHRoaXMsU2IpW1NiXSksd2IodGhpcyxTYilbU2JdPXNldFRpbWVvdXQod2IodGhpcyxDYilbQ2JdLHdiKHRoaXMsQWIpW0FiXSkpfWRvbmUoKXt3Yih0aGlzLHhiKVt4Yl18fChjbGVhclRpbWVvdXQod2IodGhpcyxTYilbU2JdKSx3Yih0aGlzLFNiKVtTYl09bnVsbCx3Yih0aGlzLHhiKVt4Yl09ITApfX07ZnVuY3Rpb24ga2IoZSx0KXtpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byB1c2UgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7cmV0dXJuIGV9dmFyIEJiPTA7ZnVuY3Rpb24gRmIoZSl7cmV0dXJuXCJfX3ByaXZhdGVfXCIrQmIrKytcIl9cIitlfWZ1bmN0aW9uIFRiKCl7cmV0dXJuIG5ldyBFcnJvcihcIkNhbmNlbGxlZFwiKX12YXIgX2I9RmIoXCJhY3RpdmVSZXF1ZXN0c1wiKSxQYj1GYihcInF1ZXVlZEhhbmRsZXJzXCIpLGpiPUZiKFwiY2FsbFwiKSxOYj1GYihcInF1ZXVlTmV4dFwiKSxJYj1GYihcIm5leHRcIiksTGI9RmIoXCJxdWV1ZVwiKSxSYj1GYihcImRlcXVldWVcIik7ZnVuY3Rpb24gTWIoZSl7a2IodGhpcyxfYilbX2JdKz0xO2xldCB0LG49ITE7dHJ5e3Q9ZSgpfWNhdGNoKGUpe3Rocm93IGtiKHRoaXMsX2IpW19iXS09MSxlfXJldHVybnthYm9ydDooKT0+e258fChuPSEwLGtiKHRoaXMsX2IpW19iXS09MSx0KCksa2IodGhpcyxOYilbTmJdKCkpfSxkb25lOigpPT57bnx8KG49ITAsa2IodGhpcyxfYilbX2JdLT0xLGtiKHRoaXMsTmIpW05iXSgpKX19fWZ1bmN0aW9uIHpiKCl7cXVldWVNaWNyb3Rhc2soKCgpPT5rYih0aGlzLEliKVtJYl0oKSkpfWZ1bmN0aW9uICRiKCl7aWYoa2IodGhpcyxfYilbX2JdPj10aGlzLmxpbWl0KXJldHVybjtpZigwPT09a2IodGhpcyxQYilbUGJdLmxlbmd0aClyZXR1cm47Y29uc3QgZT1rYih0aGlzLFBiKVtQYl0uc2hpZnQoKSx0PWtiKHRoaXMsamIpW2piXShlLmZuKTtlLmFib3J0PXQuYWJvcnQsZS5kb25lPXQuZG9uZX1mdW5jdGlvbiBIYihlLHQpe3ZvaWQgMD09PXQmJih0PXt9KTtjb25zdCBuPXtmbjplLHByaW9yaXR5OnQucHJpb3JpdHl8fDAsYWJvcnQ6KCk9PntrYih0aGlzLFJiKVtSYl0obil9LGRvbmU6KCk9Pnt0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgbWFyayBhIHF1ZXVlZCByZXF1ZXN0IGFzIGRvbmU6IHRoaXMgaW5kaWNhdGVzIGEgYnVnXCIpfX0scj1rYih0aGlzLFBiKVtQYl0uZmluZEluZGV4KChlPT5uLnByaW9yaXR5PmUucHJpb3JpdHkpKTtyZXR1cm4tMT09PXI/a2IodGhpcyxQYilbUGJdLnB1c2gobik6a2IodGhpcyxQYilbUGJdLnNwbGljZShyLDAsbiksbn1mdW5jdGlvbiBWYihlKXtjb25zdCB0PWtiKHRoaXMsUGIpW1BiXS5pbmRleE9mKGUpOy0xIT09dCYma2IodGhpcyxQYilbUGJdLnNwbGljZSh0LDEpfXZhciBVYj17UmF0ZUxpbWl0ZWRRdWV1ZTpjbGFzc3tjb25zdHJ1Y3RvcihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxSYix7dmFsdWU6VmJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxMYix7dmFsdWU6SGJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxJYix7dmFsdWU6JGJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxOYix7dmFsdWU6emJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxqYix7dmFsdWU6TWJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxfYix7d3JpdGFibGU6ITAsdmFsdWU6MH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFBiLHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLHRoaXMubGltaXQ9XCJudW1iZXJcIiE9dHlwZW9mIGV8fDA9PT1lPzEvMDplfXJ1bihlLHQpe3JldHVybiBrYih0aGlzLF9iKVtfYl08dGhpcy5saW1pdD9rYih0aGlzLGpiKVtqYl0oZSk6a2IodGhpcyxMYilbTGJdKGUsdCl9d3JhcFByb21pc2VGdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsbz1uZXcgQXJyYXkociksaT0wO2k8cjtpKyspb1tpXT1hcmd1bWVudHNbaV07bGV0IGE7Y29uc3QgdT1uZXcgUHJvbWlzZSgoKHIsaSk9PnthPW4ucnVuKCgoKT0+e2xldCB0LG47dHJ5e249UHJvbWlzZS5yZXNvbHZlKGUoLi4ubykpfWNhdGNoKGUpe249UHJvbWlzZS5yZWplY3QoZSl9cmV0dXJuIG4udGhlbigoZT0+e3Q/aSh0KTooYS5kb25lKCkscihlKSl9KSwoZT0+e3Q/aSh0KTooYS5kb25lKCksaShlKSl9KSksKCk9Pnt0PVRiKCl9fSksdCl9KSk7cmV0dXJuIHUuYWJvcnQ9KCk9PnthLmFib3J0KCl9LHV9fX0saW50ZXJuYWxSYXRlTGltaXRlZFF1ZXVlOlN5bWJvbChcIl9fcXVldWVcIil9O3ZhciBXYixHYixxYj1mdW5jdGlvbihlKXtyZXR1cm4hIWUmJigwIT09ZS5yZWFkeVN0YXRlJiY0IT09ZS5yZWFkeVN0YXRlfHwwPT09ZS5zdGF0dXMpfSxLYj17c3RyaW5nczp7dGltZWRPdXQ6XCJVcGxvYWQgc3RhbGxlZCBmb3IgJXtzZWNvbmRzfSBzZWNvbmRzLCBhYm9ydGluZy5cIn19O2NvbnN0e25hbm9pZDpZYn09Qnkse1Byb3ZpZGVyOlhiLFJlcXVlc3RDbGllbnQ6WmIsU29ja2V0OkpifT1kYix7UmF0ZUxpbWl0ZWRRdWV1ZTpRYixpbnRlcm5hbFJhdGVMaW1pdGVkUXVldWU6ZXd9PVViO2Z1bmN0aW9uIHR3KGUsdCl7bGV0IG49dDtyZXR1cm4gbnx8KG49bmV3IEVycm9yKFwiVXBsb2FkIGVycm9yXCIpKSxcInN0cmluZ1wiPT10eXBlb2YgbiYmKG49bmV3IEVycm9yKG4pKSxuIGluc3RhbmNlb2YgRXJyb3J8fChuPU9iamVjdC5hc3NpZ24obmV3IEVycm9yKFwiVXBsb2FkIGVycm9yXCIpLHtkYXRhOm59KSkscWIoZSk/KG49bmV3IFJtKG4sZSksbik6KG4ucmVxdWVzdD1lLG4pfWZ1bmN0aW9uIG53KGUpe3JldHVybiBlLmRhdGEuc2xpY2UoMCxlLmRhdGEuc2l6ZSxlLm1ldGEudHlwZSl9dmFyIHJ3PShHYj1XYj1jbGFzcyBleHRlbmRzIFNte2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLnR5cGU9XCJ1cGxvYWRlclwiLHRoaXMuaWQ9dGhpcy5vcHRzLmlkfHxcIlhIUlVwbG9hZFwiLHRoaXMudGl0bGU9XCJYSFJVcGxvYWRcIix0aGlzLmRlZmF1bHRMb2NhbGU9S2I7Y29uc3Qgbj17Zm9ybURhdGE6ITAsZmllbGROYW1lOnQuYnVuZGxlP1wiZmlsZXNbXVwiOlwiZmlsZVwiLG1ldGhvZDpcInBvc3RcIixtZXRhRmllbGRzOm51bGwscmVzcG9uc2VVcmxGaWVsZE5hbWU6XCJ1cmxcIixidW5kbGU6ITEsaGVhZGVyczp7fSx0aW1lb3V0OjNlNCxsaW1pdDo1LHdpdGhDcmVkZW50aWFsczohMSxyZXNwb25zZVR5cGU6XCJcIixnZXRSZXNwb25zZURhdGEodCl7bGV0IG49e307dHJ5e249SlNPTi5wYXJzZSh0KX1jYXRjaCh0KXtlLmxvZyh0KX1yZXR1cm4gbn0sZ2V0UmVzcG9uc2VFcnJvcihlLHQpe2xldCBuPW5ldyBFcnJvcihcIlVwbG9hZCBlcnJvclwiKTtyZXR1cm4gcWIodCkmJihuPW5ldyBSbShuLHQpKSxufSx2YWxpZGF0ZVN0YXR1czplPT5lPj0yMDAmJmU8MzAwfTtpZih0aGlzLm9wdHM9ey4uLm4sLi4udH0sdGhpcy5pMThuSW5pdCgpLHRoaXMuaGFuZGxlVXBsb2FkPXRoaXMuaGFuZGxlVXBsb2FkLmJpbmQodGhpcyksZXcgaW4gdGhpcy5vcHRzP3RoaXMucmVxdWVzdHM9dGhpcy5vcHRzW2V3XTp0aGlzLnJlcXVlc3RzPW5ldyBRYih0aGlzLm9wdHMubGltaXQpLHRoaXMub3B0cy5idW5kbGUmJiF0aGlzLm9wdHMuZm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKFwiYG9wdHMuZm9ybURhdGFgIG11c3QgYmUgdHJ1ZSB3aGVuIGBvcHRzLmJ1bmRsZWAgaXMgZW5hYmxlZC5cIik7dGhpcy51cGxvYWRlckV2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpfWdldE9wdGlvbnMoZSl7Y29uc3QgdD10aGlzLnVwcHkuZ2V0U3RhdGUoKS54aHJVcGxvYWQse2hlYWRlcnM6bn09dGhpcy5vcHRzLHI9ey4uLnRoaXMub3B0cywuLi50fHx7fSwuLi5lLnhoclVwbG9hZHx8e30saGVhZGVyczp7fX07cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbj9yLmhlYWRlcnM9bihlKTpPYmplY3QuYXNzaWduKHIuaGVhZGVycyx0aGlzLm9wdHMuaGVhZGVycyksdCYmT2JqZWN0LmFzc2lnbihyLmhlYWRlcnMsdC5oZWFkZXJzKSxlLnhoclVwbG9hZCYmT2JqZWN0LmFzc2lnbihyLmhlYWRlcnMsZS54aHJVcGxvYWQuaGVhZGVycykscn1hZGRNZXRhZGF0YShlLHQsbil7KEFycmF5LmlzQXJyYXkobi5tZXRhRmllbGRzKT9uLm1ldGFGaWVsZHM6T2JqZWN0LmtleXModCkpLmZvckVhY2goKG49PntlLmFwcGVuZChuLHRbbl0pfSkpfWNyZWF0ZUZvcm1EYXRhVXBsb2FkKGUsdCl7Y29uc3Qgbj1uZXcgRm9ybURhdGE7dGhpcy5hZGRNZXRhZGF0YShuLGUubWV0YSx0KTtjb25zdCByPW53KGUpO3JldHVybiBlLm5hbWU/bi5hcHBlbmQodC5maWVsZE5hbWUscixlLm1ldGEubmFtZSk6bi5hcHBlbmQodC5maWVsZE5hbWUsciksbn1jcmVhdGVCdW5kbGVkVXBsb2FkKGUsdCl7Y29uc3Qgbj1uZXcgRm9ybURhdGEse21ldGE6cn09dGhpcy51cHB5LmdldFN0YXRlKCk7cmV0dXJuIHRoaXMuYWRkTWV0YWRhdGEobixyLHQpLGUuZm9yRWFjaCgoZT0+e2NvbnN0IHQ9dGhpcy5nZXRPcHRpb25zKGUpLHI9bncoZSk7ZS5uYW1lP24uYXBwZW5kKHQuZmllbGROYW1lLHIsZS5uYW1lKTpuLmFwcGVuZCh0LmZpZWxkTmFtZSxyKX0pKSxufXVwbG9hZChlLHQsbil7Y29uc3Qgcj10aGlzLmdldE9wdGlvbnMoZSk7cmV0dXJuIHRoaXMudXBweS5sb2coYHVwbG9hZGluZyAke3R9IG9mICR7bn1gKSxuZXcgUHJvbWlzZSgoKHQsbik9Pnt0aGlzLnVwcHkuZW1pdChcInVwbG9hZC1zdGFydGVkXCIsZSk7Y29uc3Qgbz1yLmZvcm1EYXRhP3RoaXMuY3JlYXRlRm9ybURhdGFVcGxvYWQoZSxyKTplLmRhdGEsaT1uZXcgWE1MSHR0cFJlcXVlc3Q7dGhpcy51cGxvYWRlckV2ZW50c1tlLmlkXT1uZXcgYmIodGhpcy51cHB5KTtjb25zdCBhPW5ldyBPYihyLnRpbWVvdXQsKCgpPT57aS5hYm9ydCgpLHMuZG9uZSgpO2NvbnN0IHQ9bmV3IEVycm9yKHRoaXMuaTE4bihcInRpbWVkT3V0XCIse3NlY29uZHM6TWF0aC5jZWlsKHIudGltZW91dC8xZTMpfSkpO3RoaXMudXBweS5lbWl0KFwidXBsb2FkLWVycm9yXCIsZSx0KSxuKHQpfSkpLHU9WWIoKTtpLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKFwibG9hZHN0YXJ0XCIsKCgpPT57dGhpcy51cHB5LmxvZyhgW1hIUlVwbG9hZF0gJHt1fSBzdGFydGVkYCl9KSksaS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcihcInByb2dyZXNzXCIsKHQ9Pnt0aGlzLnVwcHkubG9nKGBbWEhSVXBsb2FkXSAke3V9IHByb2dyZXNzOiAke3QubG9hZGVkfSAvICR7dC50b3RhbH1gKSxhLnByb2dyZXNzKCksdC5sZW5ndGhDb21wdXRhYmxlJiZ0aGlzLnVwcHkuZW1pdChcInVwbG9hZC1wcm9ncmVzc1wiLGUse3VwbG9hZGVyOnRoaXMsYnl0ZXNVcGxvYWRlZDp0LmxvYWRlZCxieXRlc1RvdGFsOnQudG90YWx9KX0pKSxpLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsKG89PntpZih0aGlzLnVwcHkubG9nKGBbWEhSVXBsb2FkXSAke3V9IGZpbmlzaGVkYCksYS5kb25lKCkscy5kb25lKCksdGhpcy51cGxvYWRlckV2ZW50c1tlLmlkXSYmKHRoaXMudXBsb2FkZXJFdmVudHNbZS5pZF0ucmVtb3ZlKCksdGhpcy51cGxvYWRlckV2ZW50c1tlLmlkXT1udWxsKSxyLnZhbGlkYXRlU3RhdHVzKG8udGFyZ2V0LnN0YXR1cyxpLnJlc3BvbnNlVGV4dCxpKSl7Y29uc3Qgbj1yLmdldFJlc3BvbnNlRGF0YShpLnJlc3BvbnNlVGV4dCxpKSxhPW5bci5yZXNwb25zZVVybEZpZWxkTmFtZV0sdT17c3RhdHVzOm8udGFyZ2V0LnN0YXR1cyxib2R5Om4sdXBsb2FkVVJMOmF9O3JldHVybiB0aGlzLnVwcHkuZW1pdChcInVwbG9hZC1zdWNjZXNzXCIsZSx1KSxhJiZ0aGlzLnVwcHkubG9nKGBEb3dubG9hZCAke2UubmFtZX0gZnJvbSAke2F9YCksdChlKX1jb25zdCBsPXIuZ2V0UmVzcG9uc2VEYXRhKGkucmVzcG9uc2VUZXh0LGkpLGM9dHcoaSxyLmdldFJlc3BvbnNlRXJyb3IoaS5yZXNwb25zZVRleHQsaSkpLGY9e3N0YXR1czpvLnRhcmdldC5zdGF0dXMsYm9keTpsfTtyZXR1cm4gdGhpcy51cHB5LmVtaXQoXCJ1cGxvYWQtZXJyb3JcIixlLGMsZiksbihjKX0pKSxpLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCgoKT0+e3RoaXMudXBweS5sb2coYFtYSFJVcGxvYWRdICR7dX0gZXJyb3JlZGApLGEuZG9uZSgpLHMuZG9uZSgpLHRoaXMudXBsb2FkZXJFdmVudHNbZS5pZF0mJih0aGlzLnVwbG9hZGVyRXZlbnRzW2UuaWRdLnJlbW92ZSgpLHRoaXMudXBsb2FkZXJFdmVudHNbZS5pZF09bnVsbCk7Y29uc3QgdD10dyhpLHIuZ2V0UmVzcG9uc2VFcnJvcihpLnJlc3BvbnNlVGV4dCxpKSk7cmV0dXJuIHRoaXMudXBweS5lbWl0KFwidXBsb2FkLWVycm9yXCIsZSx0KSxuKHQpfSkpLGkub3BlbihyLm1ldGhvZC50b1VwcGVyQ2FzZSgpLHIuZW5kcG9pbnQsITApLGkud2l0aENyZWRlbnRpYWxzPXIud2l0aENyZWRlbnRpYWxzLFwiXCIhPT1yLnJlc3BvbnNlVHlwZSYmKGkucmVzcG9uc2VUeXBlPXIucmVzcG9uc2VUeXBlKTtjb25zdCBzPXRoaXMucmVxdWVzdHMucnVuKCgoKT0+e3RoaXMudXBweS5lbWl0KFwidXBsb2FkLXN0YXJ0ZWRcIixlKTtjb25zdCB0PXRoaXMuZ2V0T3B0aW9ucyhlKTtyZXR1cm4gT2JqZWN0LmtleXModC5oZWFkZXJzKS5mb3JFYWNoKChlPT57aS5zZXRSZXF1ZXN0SGVhZGVyKGUsdC5oZWFkZXJzW2VdKX0pKSxpLnNlbmQobyksKCk9PnthLmRvbmUoKSxpLmFib3J0KCl9fSkpO3RoaXMub25GaWxlUmVtb3ZlKGUuaWQsKCgpPT57cy5hYm9ydCgpLG4obmV3IEVycm9yKFwiRmlsZSByZW1vdmVkXCIpKX0pKSx0aGlzLm9uQ2FuY2VsQWxsKGUuaWQsKCgpPT57cy5hYm9ydCgpLG4obmV3IEVycm9yKFwiVXBsb2FkIGNhbmNlbGxlZFwiKSl9KSl9KSl9dXBsb2FkUmVtb3RlKGUpe2NvbnN0IHQ9dGhpcy5nZXRPcHRpb25zKGUpO3JldHVybiBuZXcgUHJvbWlzZSgoKG4scik9Pnt0aGlzLnVwcHkuZW1pdChcInVwbG9hZC1zdGFydGVkXCIsZSk7Y29uc3Qgbz17fTsoQXJyYXkuaXNBcnJheSh0Lm1ldGFGaWVsZHMpP3QubWV0YUZpZWxkczpPYmplY3Qua2V5cyhlLm1ldGEpKS5mb3JFYWNoKCh0PT57b1t0XT1lLm1ldGFbdF19KSk7bmV3KGUucmVtb3RlLnByb3ZpZGVyT3B0aW9ucy5wcm92aWRlcj9YYjpaYikodGhpcy51cHB5LGUucmVtb3RlLnByb3ZpZGVyT3B0aW9ucykucG9zdChlLnJlbW90ZS51cmwsey4uLmUucmVtb3RlLmJvZHksZW5kcG9pbnQ6dC5lbmRwb2ludCxzaXplOmUuZGF0YS5zaXplLGZpZWxkbmFtZTp0LmZpZWxkTmFtZSxtZXRhZGF0YTpvLGh0dHBNZXRob2Q6dC5tZXRob2QsdXNlRm9ybURhdGE6dC5mb3JtRGF0YSxoZWFkZXJzOnQuaGVhZGVyc30pLnRoZW4oKG89Pntjb25zdHt0b2tlbjppfT1vLGE9ZnVuY3Rpb24oZSl7Y29uc3QgdD0vXig/Omh0dHBzPzpcXC9cXC98XFwvXFwvKT8oPzpbXkBcXG5dK0ApPyg/Ond3d1xcLik/KFteXFxuXSspL2kuZXhlYyhlKVsxXTtyZXR1cm5gJHsvXmh0dHA6XFwvXFwvL2kudGVzdChlKT9cIndzXCI6XCJ3c3NcIn06Ly8ke3R9YH0oZS5yZW1vdGUuY29tcGFuaW9uVXJsKSx1PW5ldyBKYih7dGFyZ2V0OmAke2F9L2FwaS8ke2l9YCxhdXRvT3BlbjohMX0pO3RoaXMudXBsb2FkZXJFdmVudHNbZS5pZF09bmV3IGJiKHRoaXMudXBweSksdGhpcy5vbkZpbGVSZW1vdmUoZS5pZCwoKCk9Pnt1LnNlbmQoXCJjYW5jZWxcIix7fSkscy5hYm9ydCgpLG4oYHVwbG9hZCAke2UuaWR9IHdhcyByZW1vdmVkYCl9KSksdGhpcy5vbkNhbmNlbEFsbChlLmlkLCgoKT0+e3Uuc2VuZChcImNhbmNlbFwiLHt9KSxzLmFib3J0KCksbihgdXBsb2FkICR7ZS5pZH0gd2FzIGNhbmNlbGVkYCl9KSksdGhpcy5vblJldHJ5KGUuaWQsKCgpPT57dS5zZW5kKFwicGF1c2VcIix7fSksdS5zZW5kKFwicmVzdW1lXCIse30pfSkpLHRoaXMub25SZXRyeUFsbChlLmlkLCgoKT0+e3Uuc2VuZChcInBhdXNlXCIse30pLHUuc2VuZChcInJlc3VtZVwiLHt9KX0pKSx1Lm9uKFwicHJvZ3Jlc3NcIiwodD0+Z2IodGhpcyx0LGUpKSksdS5vbihcInN1Y2Nlc3NcIiwocj0+e2NvbnN0IG89dC5nZXRSZXNwb25zZURhdGEoci5yZXNwb25zZS5yZXNwb25zZVRleHQsci5yZXNwb25zZSksaT1vW3QucmVzcG9uc2VVcmxGaWVsZE5hbWVdLGE9e3N0YXR1czpyLnJlc3BvbnNlLnN0YXR1cyxib2R5Om8sdXBsb2FkVVJMOml9O3JldHVybiB0aGlzLnVwcHkuZW1pdChcInVwbG9hZC1zdWNjZXNzXCIsZSxhKSxzLmRvbmUoKSx0aGlzLnVwbG9hZGVyRXZlbnRzW2UuaWRdJiYodGhpcy51cGxvYWRlckV2ZW50c1tlLmlkXS5yZW1vdmUoKSx0aGlzLnVwbG9hZGVyRXZlbnRzW2UuaWRdPW51bGwpLG4oKX0pKSx1Lm9uKFwiZXJyb3JcIiwobj0+e2NvbnN0IG89bi5yZXNwb25zZSxpPW8/dC5nZXRSZXNwb25zZUVycm9yKG8ucmVzcG9uc2VUZXh0LG8pOk9iamVjdC5hc3NpZ24obmV3IEVycm9yKG4uZXJyb3IubWVzc2FnZSkse2NhdXNlOm4uZXJyb3J9KTt0aGlzLnVwcHkuZW1pdChcInVwbG9hZC1lcnJvclwiLGUsaSkscy5kb25lKCksdGhpcy51cGxvYWRlckV2ZW50c1tlLmlkXSYmKHRoaXMudXBsb2FkZXJFdmVudHNbZS5pZF0ucmVtb3ZlKCksdGhpcy51cGxvYWRlckV2ZW50c1tlLmlkXT1udWxsKSxyKGkpfSkpO2NvbnN0IHM9dGhpcy5yZXF1ZXN0cy5ydW4oKCgpPT4odS5vcGVuKCksZS5pc1BhdXNlZCYmdS5zZW5kKFwicGF1c2VcIix7fSksKCk9PnUuY2xvc2UoKSkpKX0pKS5jYXRjaCgodD0+e3RoaXMudXBweS5lbWl0KFwidXBsb2FkLWVycm9yXCIsZSx0KSxyKHQpfSkpfSkpfXVwbG9hZEJ1bmRsZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKCh0LG4pPT57Y29uc3R7ZW5kcG9pbnQ6cn09dGhpcy5vcHRzLHttZXRob2Q6b309dGhpcy5vcHRzLGk9dGhpcy51cHB5LmdldFN0YXRlKCkueGhyVXBsb2FkLGE9dGhpcy5jcmVhdGVCdW5kbGVkVXBsb2FkKGUsey4uLnRoaXMub3B0cywuLi5pfHx7fX0pLHU9bmV3IFhNTEh0dHBSZXF1ZXN0LHM9bmV3IE9iKHRoaXMub3B0cy50aW1lb3V0LCgoKT0+e3UuYWJvcnQoKTtjb25zdCBlPW5ldyBFcnJvcih0aGlzLmkxOG4oXCJ0aW1lZE91dFwiLHtzZWNvbmRzOk1hdGguY2VpbCh0aGlzLm9wdHMudGltZW91dC8xZTMpfSkpO2woZSksbihlKX0pKSxsPXQ9PntlLmZvckVhY2goKGU9Pnt0aGlzLnVwcHkuZW1pdChcInVwbG9hZC1lcnJvclwiLGUsdCl9KSl9O3UudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2Fkc3RhcnRcIiwoKCk9Pnt0aGlzLnVwcHkubG9nKFwiW1hIUlVwbG9hZF0gc3RhcnRlZCB1cGxvYWRpbmcgYnVuZGxlXCIpLHMucHJvZ3Jlc3MoKX0pKSx1LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKFwicHJvZ3Jlc3NcIiwodD0+e3MucHJvZ3Jlc3MoKSx0Lmxlbmd0aENvbXB1dGFibGUmJmUuZm9yRWFjaCgoZT0+e3RoaXMudXBweS5lbWl0KFwidXBsb2FkLXByb2dyZXNzXCIsZSx7dXBsb2FkZXI6dGhpcyxieXRlc1VwbG9hZGVkOnQubG9hZGVkL3QudG90YWwqZS5zaXplLGJ5dGVzVG90YWw6ZS5zaXplfSl9KSl9KSksdS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLChyPT57aWYocy5kb25lKCksdGhpcy5vcHRzLnZhbGlkYXRlU3RhdHVzKHIudGFyZ2V0LnN0YXR1cyx1LnJlc3BvbnNlVGV4dCx1KSl7Y29uc3Qgbj10aGlzLm9wdHMuZ2V0UmVzcG9uc2VEYXRhKHUucmVzcG9uc2VUZXh0LHUpLG89e3N0YXR1czpyLnRhcmdldC5zdGF0dXMsYm9keTpufTtyZXR1cm4gZS5mb3JFYWNoKChlPT57dGhpcy51cHB5LmVtaXQoXCJ1cGxvYWQtc3VjY2Vzc1wiLGUsbyl9KSksdCgpfWNvbnN0IG89dGhpcy5vcHRzLmdldFJlc3BvbnNlRXJyb3IodS5yZXNwb25zZVRleHQsdSl8fG5ldyBFcnJvcihcIlVwbG9hZCBlcnJvclwiKTtyZXR1cm4gby5yZXF1ZXN0PXUsbChvKSxuKG8pfSkpLHUuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsKCgpPT57cy5kb25lKCk7Y29uc3QgZT10aGlzLm9wdHMuZ2V0UmVzcG9uc2VFcnJvcih1LnJlc3BvbnNlVGV4dCx1KXx8bmV3IEVycm9yKFwiVXBsb2FkIGVycm9yXCIpO3JldHVybiBsKGUpLG4oZSl9KSksdGhpcy51cHB5Lm9uKFwiY2FuY2VsLWFsbFwiLCgoKT0+e3MuZG9uZSgpLHUuYWJvcnQoKX0pKSx1Lm9wZW4oby50b1VwcGVyQ2FzZSgpLHIsITApLHUud2l0aENyZWRlbnRpYWxzPXRoaXMub3B0cy53aXRoQ3JlZGVudGlhbHMsXCJcIiE9PXRoaXMub3B0cy5yZXNwb25zZVR5cGUmJih1LnJlc3BvbnNlVHlwZT10aGlzLm9wdHMucmVzcG9uc2VUeXBlKSxPYmplY3Qua2V5cyh0aGlzLm9wdHMuaGVhZGVycykuZm9yRWFjaCgoZT0+e3Uuc2V0UmVxdWVzdEhlYWRlcihlLHRoaXMub3B0cy5oZWFkZXJzW2VdKX0pKSx1LnNlbmQoYSksZS5mb3JFYWNoKChlPT57dGhpcy51cHB5LmVtaXQoXCJ1cGxvYWQtc3RhcnRlZFwiLGUpfSkpfSkpfXVwbG9hZEZpbGVzKGUpe2NvbnN0IHQ9ZS5tYXAoKCh0LG4pPT57Y29uc3Qgcj1wYXJzZUludChuLDEwKSsxLG89ZS5sZW5ndGg7cmV0dXJuIHQuZXJyb3I/UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKHQuZXJyb3IpKTp0LmlzUmVtb3RlP3RoaXMudXBsb2FkUmVtb3RlKHQscixvKTp0aGlzLnVwbG9hZCh0LHIsbyl9KSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2NvbnN0IHQ9W10sbj1bXTtmdW5jdGlvbiByKGUpe3QucHVzaChlKX1mdW5jdGlvbiBvKGUpe24ucHVzaChlKX1yZXR1cm4gUHJvbWlzZS5hbGwoZS5tYXAoKGU9PmUudGhlbihyLG8pKSkpLnRoZW4oKCgpPT4oe3N1Y2Nlc3NmdWw6dCxmYWlsZWQ6bn0pKSl9KHQpfW9uRmlsZVJlbW92ZShlLHQpe3RoaXMudXBsb2FkZXJFdmVudHNbZV0ub24oXCJmaWxlLXJlbW92ZWRcIiwobj0+e2U9PT1uLmlkJiZ0KG4uaWQpfSkpfW9uUmV0cnkoZSx0KXt0aGlzLnVwbG9hZGVyRXZlbnRzW2VdLm9uKFwidXBsb2FkLXJldHJ5XCIsKG49PntlPT09biYmdCgpfSkpfW9uUmV0cnlBbGwoZSx0KXt0aGlzLnVwbG9hZGVyRXZlbnRzW2VdLm9uKFwicmV0cnktYWxsXCIsKCgpPT57dGhpcy51cHB5LmdldEZpbGUoZSkmJnQoKX0pKX1vbkNhbmNlbEFsbChlLHQpe3RoaXMudXBsb2FkZXJFdmVudHNbZV0ub24oXCJjYW5jZWwtYWxsXCIsKCgpPT57dGhpcy51cHB5LmdldEZpbGUoZSkmJnQoKX0pKX1oYW5kbGVVcGxvYWQoZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0aGlzLnVwcHkubG9nKFwiW1hIUlVwbG9hZF0gTm8gZmlsZXMgdG8gdXBsb2FkIVwiKSxQcm9taXNlLnJlc29sdmUoKTswIT09dGhpcy5vcHRzLmxpbWl0fHx0aGlzLm9wdHNbZXddfHx0aGlzLnVwcHkubG9nKFwiW1hIUlVwbG9hZF0gV2hlbiB1cGxvYWRpbmcgbXVsdGlwbGUgZmlsZXMgYXQgb25jZSwgY29uc2lkZXIgc2V0dGluZyB0aGUgYGxpbWl0YCBvcHRpb24gKHRvIGAxMGAgZm9yIGV4YW1wbGUpLCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgdXBsb2Fkcywgd2hpY2ggaGVscHMgcHJldmVudCBtZW1vcnkgYW5kIG5ldHdvcmsgaXNzdWVzOiBodHRwczovL3VwcHkuaW8vZG9jcy94aHItdXBsb2FkLyNsaW1pdC0wXCIsXCJ3YXJuaW5nXCIpLHRoaXMudXBweS5sb2coXCJbWEhSVXBsb2FkXSBVcGxvYWRpbmcuLi5cIik7Y29uc3QgdD1lLm1hcCgoZT0+dGhpcy51cHB5LmdldEZpbGUoZSkpKTtpZih0aGlzLm9wdHMuYnVuZGxlKXtpZih0LnNvbWUoKGU9PmUuaXNSZW1vdGUpKSl0aHJvdyBuZXcgRXJyb3IoXCJDYW7igJl0IHVwbG9hZCByZW1vdGUgZmlsZXMgd2hlbiB0aGUgYGJ1bmRsZTogdHJ1ZWAgb3B0aW9uIGlzIHNldFwiKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLm9wdHMuaGVhZGVycyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYGhlYWRlcnNgIG1heSBub3QgYmUgYSBmdW5jdGlvbiB3aGVuIHRoZSBgYnVuZGxlOiB0cnVlYCBvcHRpb24gaXMgc2V0XCIpO3JldHVybiB0aGlzLnVwbG9hZEJ1bmRsZSh0KX1yZXR1cm4gdGhpcy51cGxvYWRGaWxlcyh0KS50aGVuKCgoKT0+bnVsbCkpfWluc3RhbGwoKXtpZih0aGlzLm9wdHMuYnVuZGxlKXtjb25zdHtjYXBhYmlsaXRpZXM6ZX09dGhpcy51cHB5LmdldFN0YXRlKCk7dGhpcy51cHB5LnNldFN0YXRlKHtjYXBhYmlsaXRpZXM6ey4uLmUsaW5kaXZpZHVhbENhbmNlbGxhdGlvbjohMX19KX10aGlzLnVwcHkuYWRkVXBsb2FkZXIodGhpcy5oYW5kbGVVcGxvYWQpfXVuaW5zdGFsbCgpe2lmKHRoaXMub3B0cy5idW5kbGUpe2NvbnN0e2NhcGFiaWxpdGllczplfT10aGlzLnVwcHkuZ2V0U3RhdGUoKTt0aGlzLnVwcHkuc2V0U3RhdGUoe2NhcGFiaWxpdGllczp7Li4uZSxpbmRpdmlkdWFsQ2FuY2VsbGF0aW9uOiEwfX0pfXRoaXMudXBweS5yZW1vdmVVcGxvYWRlcih0aGlzLmhhbmRsZVVwbG9hZCl9fSxXYi5WRVJTSU9OPVwiMi4wLjZcIixHYiksb3c9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIGl3KGUpe3ZhciB0PXtleHBvcnRzOnt9fTtyZXR1cm4gZSh0LHQuZXhwb3J0cyksdC5leHBvcnRzfXZhciBhdyx1dyxzdz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5NYXRoPT1NYXRoJiZlfSxsdz1zdyhcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyl8fHN3KFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyl8fHN3KFwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmKXx8c3coXCJvYmplY3RcIj09dHlwZW9mIG93JiZvdyl8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCl8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxjdz1PYmplY3QuZGVmaW5lUHJvcGVydHksZnc9ZnVuY3Rpb24oZSx0KXt0cnl7Y3cobHcsZSx7dmFsdWU6dCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChuKXtsd1tlXT10fXJldHVybiB0fSxkdz1sd1tcIl9fY29yZS1qc19zaGFyZWRfX1wiXXx8ZncoXCJfX2NvcmUtanNfc2hhcmVkX19cIix7fSkscHc9aXcoKGZ1bmN0aW9uKGUpeyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZHdbZV18fChkd1tlXT12b2lkIDAhPT10P3Q6e30pfSkoXCJ2ZXJzaW9uc1wiLFtdKS5wdXNoKHt2ZXJzaW9uOlwiMy4xOS4zXCIsbW9kZTpcImdsb2JhbFwiLGNvcHlyaWdodDpcIsKpIDIwMjEgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSlcIn0pfSkpLGh3PUZ1bmN0aW9uLnByb3RvdHlwZSxndz1ody5iaW5kLHZ3PWh3LmNhbGwseXc9Z3cmJmd3LmJpbmQodncpLG13PWd3P2Z1bmN0aW9uKGUpe3JldHVybiBlJiZ5dyh2dyxlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmZ1bmN0aW9uKCl7cmV0dXJuIHZ3LmFwcGx5KGUsYXJndW1lbnRzKX19LGJ3PWx3LlR5cGVFcnJvcix3dz1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IGJ3KFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIrZSk7cmV0dXJuIGV9LEV3PWx3Lk9iamVjdCxEdz1mdW5jdGlvbihlKXtyZXR1cm4gRXcod3coZSkpfSxTdz1tdyh7fS5oYXNPd25Qcm9wZXJ0eSkseHc9T2JqZWN0Lmhhc093bnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gU3coRHcoZSksdCl9LEN3PTAsQXc9TWF0aC5yYW5kb20oKSxPdz1tdygxLi50b1N0cmluZyksa3c9ZnVuY3Rpb24oZSl7cmV0dXJuXCJTeW1ib2woXCIrKHZvaWQgMD09PWU/XCJcIjplKStcIilfXCIrT3coKytDdytBdywzNil9LEJ3PWZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9LEZ3PWZ1bmN0aW9uKGUpe3JldHVybiBCdyhlKT9lOnZvaWQgMH0sVHc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP0Z3KGx3W2VdKTpsd1tlXSYmbHdbZV1bdF19LF93PVR3KFwibmF2aWdhdG9yXCIsXCJ1c2VyQWdlbnRcIil8fFwiXCIsUHc9bHcucHJvY2Vzcyxqdz1sdy5EZW5vLE53PVB3JiZQdy52ZXJzaW9uc3x8ancmJmp3LnZlcnNpb24sSXc9TncmJk53LnY4O0l3JiYodXc9KGF3PUl3LnNwbGl0KFwiLlwiKSlbMF0+MCYmYXdbMF08ND8xOisoYXdbMF0rYXdbMV0pKSwhdXcmJl93JiYoIShhdz1fdy5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pKXx8YXdbMV0+PTc0KSYmKGF3PV93Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKSkmJih1dz0rYXdbMV0pO3ZhciBMdz11dyxSdz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fSxNdz0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFSdygoZnVuY3Rpb24oKXt2YXIgZT1TeW1ib2woKTtyZXR1cm4hU3RyaW5nKGUpfHwhKE9iamVjdChlKWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZMdyYmTHc8NDF9KSksenc9TXcmJiFTeW1ib2wuc2hhbSYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvciwkdz1wdyhcIndrc1wiKSxIdz1sdy5TeW1ib2wsVnc9SHcmJkh3LmZvcixVdz16dz9IdzpIdyYmSHcud2l0aG91dFNldHRlcnx8a3csV3c9ZnVuY3Rpb24oZSl7aWYoIXh3KCR3LGUpfHwhTXcmJlwic3RyaW5nXCIhPXR5cGVvZiAkd1tlXSl7dmFyIHQ9XCJTeW1ib2wuXCIrZTtNdyYmeHcoSHcsZSk/JHdbZV09SHdbZV06JHdbZV09encmJlZ3P1Z3KHQpOlV3KHQpfXJldHVybiAkd1tlXX0sR3c9e307R3dbV3coXCJ0b1N0cmluZ1RhZ1wiKV09XCJ6XCI7dmFyIHF3PVwiW29iamVjdCB6XVwiPT09U3RyaW5nKEd3KSxLdz0hUncoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwxLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KVsxXX0pKSxZdz1mdW5jdGlvbihlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZT9udWxsIT09ZTpCdyhlKX0sWHc9bHcuZG9jdW1lbnQsWnc9WXcoWHcpJiZZdyhYdy5jcmVhdGVFbGVtZW50KSxKdz1mdW5jdGlvbihlKXtyZXR1cm4gWnc/WHcuY3JlYXRlRWxlbWVudChlKTp7fX0sUXc9IUt3JiYhUncoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShKdyhcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKSxlRT1sdy5TdHJpbmcsdEU9bHcuVHlwZUVycm9yLG5FPWZ1bmN0aW9uKGUpe2lmKFl3KGUpKXJldHVybiBlO3Rocm93IHRFKGVFKGUpK1wiIGlzIG5vdCBhbiBvYmplY3RcIil9LHJFPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLG9FPXJFLmJpbmQ/ckUuYmluZChyRSk6ZnVuY3Rpb24oKXtyZXR1cm4gckUuYXBwbHkockUsYXJndW1lbnRzKX0saUU9bXcoe30uaXNQcm90b3R5cGVPZiksYUU9bHcuT2JqZWN0LHVFPXp3P2Z1bmN0aW9uKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfTpmdW5jdGlvbihlKXt2YXIgdD1UdyhcIlN5bWJvbFwiKTtyZXR1cm4gQncodCkmJmlFKHQucHJvdG90eXBlLGFFKGUpKX0sc0U9bHcuU3RyaW5nLGxFPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gc0UoZSl9Y2F0Y2goZSl7cmV0dXJuXCJPYmplY3RcIn19LGNFPWx3LlR5cGVFcnJvcixmRT1mdW5jdGlvbihlKXtpZihCdyhlKSlyZXR1cm4gZTt0aHJvdyBjRShsRShlKStcIiBpcyBub3QgYSBmdW5jdGlvblwiKX0sZEU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lW3RdO3JldHVybiBudWxsPT1uP3ZvaWQgMDpmRShuKX0scEU9bHcuVHlwZUVycm9yLGhFPWx3LlR5cGVFcnJvcixnRT1XdyhcInRvUHJpbWl0aXZlXCIpLHZFPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoIVl3KGUpfHx1RShlKSlyZXR1cm4gZTt2YXIgbixyPWRFKGUsZ0UpO2lmKHIpe2lmKHZvaWQgMD09PXQmJih0PVwiZGVmYXVsdFwiKSxuPW9FKHIsZSx0KSwhWXcobil8fHVFKG4pKXJldHVybiBuO3Rocm93IGhFKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfXJldHVybiB2b2lkIDA9PT10JiYodD1cIm51bWJlclwiKSxmdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYoXCJzdHJpbmdcIj09PXQmJkJ3KG49ZS50b1N0cmluZykmJiFZdyhyPW9FKG4sZSkpKXJldHVybiByO2lmKEJ3KG49ZS52YWx1ZU9mKSYmIVl3KHI9b0UobixlKSkpcmV0dXJuIHI7aWYoXCJzdHJpbmdcIiE9PXQmJkJ3KG49ZS50b1N0cmluZykmJiFZdyhyPW9FKG4sZSkpKXJldHVybiByO3Rocm93IHBFKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfShlLHQpfShlLFwic3RyaW5nXCIpO3JldHVybiB1RSh0KT90OnQrXCJcIn0seUU9bHcuVHlwZUVycm9yLG1FPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxiRT17ZjpLdz9tRTpmdW5jdGlvbihlLHQsbil7aWYobkUoZSksdD12RSh0KSxuRShuKSxRdyl0cnl7cmV0dXJuIG1FKGUsdCxuKX1jYXRjaChlKXt9aWYoXCJnZXRcImluIG58fFwic2V0XCJpbiBuKXRocm93IHlFKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWRcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gbiYmKGVbdF09bi52YWx1ZSksZX19LHdFPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fSxFRT1Ldz9mdW5jdGlvbihlLHQsbil7cmV0dXJuIGJFLmYoZSx0LHdFKDEsbikpfTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbdF09bixlfSxERT1tdyhGdW5jdGlvbi50b1N0cmluZyk7QncoZHcuaW5zcGVjdFNvdXJjZSl8fChkdy5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBERShlKX0pO3ZhciBTRSx4RSxDRSxBRT1kdy5pbnNwZWN0U291cmNlLE9FPWx3LldlYWtNYXAsa0U9QncoT0UpJiYvbmF0aXZlIGNvZGUvLnRlc3QoQUUoT0UpKSxCRT1wdyhcImtleXNcIiksRkU9ZnVuY3Rpb24oZSl7cmV0dXJuIEJFW2VdfHwoQkVbZV09a3coZSkpfSxURT17fSxfRT1sdy5UeXBlRXJyb3IsUEU9bHcuV2Vha01hcDtpZihrRXx8ZHcuc3RhdGUpe3ZhciBqRT1kdy5zdGF0ZXx8KGR3LnN0YXRlPW5ldyBQRSksTkU9bXcoakUuZ2V0KSxJRT1tdyhqRS5oYXMpLExFPW13KGpFLnNldCk7U0U9ZnVuY3Rpb24oZSx0KXtpZihJRShqRSxlKSl0aHJvdyBuZXcgX0UoXCJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZFwiKTtyZXR1cm4gdC5mYWNhZGU9ZSxMRShqRSxlLHQpLHR9LHhFPWZ1bmN0aW9uKGUpe3JldHVybiBORShqRSxlKXx8e319LENFPWZ1bmN0aW9uKGUpe3JldHVybiBJRShqRSxlKX19ZWxzZXt2YXIgUkU9RkUoXCJzdGF0ZVwiKTtURVtSRV09ITAsU0U9ZnVuY3Rpb24oZSx0KXtpZih4dyhlLFJFKSl0aHJvdyBuZXcgX0UoXCJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZFwiKTtyZXR1cm4gdC5mYWNhZGU9ZSxFRShlLFJFLHQpLHR9LHhFPWZ1bmN0aW9uKGUpe3JldHVybiB4dyhlLFJFKT9lW1JFXTp7fX0sQ0U9ZnVuY3Rpb24oZSl7cmV0dXJuIHh3KGUsUkUpfX12YXIgTUU9e3NldDpTRSxnZXQ6eEUsaGFzOkNFLGVuZm9yY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIENFKGUpP3hFKGUpOlNFKGUse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuO2lmKCFZdyh0KXx8KG49eEUodCkpLnR5cGUhPT1lKXRocm93IF9FKFwiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCBcIitlK1wiIHJlcXVpcmVkXCIpO3JldHVybiBufX19LHpFPUZ1bmN0aW9uLnByb3RvdHlwZSwkRT1LdyYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixIRT14dyh6RSxcIm5hbWVcIiksVkU9e0VYSVNUUzpIRSxQUk9QRVI6SEUmJlwic29tZXRoaW5nXCI9PT1mdW5jdGlvbigpe30ubmFtZSxDT05GSUdVUkFCTEU6SEUmJighS3d8fEt3JiYkRSh6RSxcIm5hbWVcIikuY29uZmlndXJhYmxlKX0sVUU9aXcoKGZ1bmN0aW9uKGUpe3ZhciB0PVZFLkNPTkZJR1VSQUJMRSxuPU1FLmdldCxyPU1FLmVuZm9yY2Usbz1TdHJpbmcoU3RyaW5nKS5zcGxpdChcIlN0cmluZ1wiKTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUsbixpLGEpe3ZhciB1LHM9ISFhJiYhIWEudW5zYWZlLGw9ISFhJiYhIWEuZW51bWVyYWJsZSxjPSEhYSYmISFhLm5vVGFyZ2V0R2V0LGY9YSYmdm9pZCAwIT09YS5uYW1lP2EubmFtZTpuO0J3KGkpJiYoXCJTeW1ib2woXCI9PT1TdHJpbmcoZikuc2xpY2UoMCw3KSYmKGY9XCJbXCIrU3RyaW5nKGYpLnJlcGxhY2UoL15TeW1ib2xcXCgoW14pXSopXFwpLyxcIiQxXCIpK1wiXVwiKSwoIXh3KGksXCJuYW1lXCIpfHx0JiZpLm5hbWUhPT1mKSYmRUUoaSxcIm5hbWVcIixmKSwodT1yKGkpKS5zb3VyY2V8fCh1LnNvdXJjZT1vLmpvaW4oXCJzdHJpbmdcIj09dHlwZW9mIGY/ZjpcIlwiKSkpLGUhPT1sdz8ocz8hYyYmZVtuXSYmKGw9ITApOmRlbGV0ZSBlW25dLGw/ZVtuXT1pOkVFKGUsbixpKSk6bD9lW25dPWk6ZncobixpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxcInRvU3RyaW5nXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEJ3KHRoaXMpJiZuKHRoaXMpLnNvdXJjZXx8QUUodGhpcyl9KSl9KSksV0U9bXcoe30udG9TdHJpbmcpLEdFPW13KFwiXCIuc2xpY2UpLHFFPWZ1bmN0aW9uKGUpe3JldHVybiBHRShXRShlKSw4LC0xKX0sS0U9V3coXCJ0b1N0cmluZ1RhZ1wiKSxZRT1sdy5PYmplY3QsWEU9XCJBcmd1bWVudHNcIj09cUUoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKSxaRT1xdz9xRTpmdW5jdGlvbihlKXt2YXIgdCxuLHI7cmV0dXJuIHZvaWQgMD09PWU/XCJVbmRlZmluZWRcIjpudWxsPT09ZT9cIk51bGxcIjpcInN0cmluZ1wiPT10eXBlb2Yobj1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZVt0XX1jYXRjaChlKXt9fSh0PVlFKGUpLEtFKSk/bjpYRT9xRSh0KTpcIk9iamVjdFwiPT0ocj1xRSh0KSkmJkJ3KHQuY2FsbGVlKT9cIkFyZ3VtZW50c1wiOnJ9LEpFPXF3P3t9LnRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuXCJbb2JqZWN0IFwiK1pFKHRoaXMpK1wiXVwifTtxd3x8VUUoT2JqZWN0LnByb3RvdHlwZSxcInRvU3RyaW5nXCIsSkUse3Vuc2FmZTohMH0pO3ZhciBRRT17Q1NTUnVsZUxpc3Q6MCxDU1NTdHlsZURlY2xhcmF0aW9uOjAsQ1NTVmFsdWVMaXN0OjAsQ2xpZW50UmVjdExpc3Q6MCxET01SZWN0TGlzdDowLERPTVN0cmluZ0xpc3Q6MCxET01Ub2tlbkxpc3Q6MSxEYXRhVHJhbnNmZXJJdGVtTGlzdDowLEZpbGVMaXN0OjAsSFRNTEFsbENvbGxlY3Rpb246MCxIVE1MQ29sbGVjdGlvbjowLEhUTUxGb3JtRWxlbWVudDowLEhUTUxTZWxlY3RFbGVtZW50OjAsTWVkaWFMaXN0OjAsTWltZVR5cGVBcnJheTowLE5hbWVkTm9kZU1hcDowLE5vZGVMaXN0OjEsUGFpbnRSZXF1ZXN0TGlzdDowLFBsdWdpbjowLFBsdWdpbkFycmF5OjAsU1ZHTGVuZ3RoTGlzdDowLFNWR051bWJlckxpc3Q6MCxTVkdQYXRoU2VnTGlzdDowLFNWR1BvaW50TGlzdDowLFNWR1N0cmluZ0xpc3Q6MCxTVkdUcmFuc2Zvcm1MaXN0OjAsU291cmNlQnVmZmVyTGlzdDowLFN0eWxlU2hlZXRMaXN0OjAsVGV4dFRyYWNrQ3VlTGlzdDowLFRleHRUcmFja0xpc3Q6MCxUb3VjaExpc3Q6MH0sZUQ9SncoXCJzcGFuXCIpLmNsYXNzTGlzdCx0RD1lRCYmZUQuY29uc3RydWN0b3ImJmVELmNvbnN0cnVjdG9yLnByb3RvdHlwZSxuRD10RD09PU9iamVjdC5wcm90b3R5cGU/dm9pZCAwOnRELHJEPW13KG13LmJpbmQpLG9EPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZFKGUpLHZvaWQgMD09PXQ/ZTpyRD9yRChlLHQpOmZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX0saUQ9bHcuT2JqZWN0LGFEPW13KFwiXCIuc3BsaXQpLHVEPVJ3KChmdW5jdGlvbigpe3JldHVybiFpRChcInpcIikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KSk/ZnVuY3Rpb24oZSl7cmV0dXJuXCJTdHJpbmdcIj09cUUoZSk/YUQoZSxcIlwiKTppRChlKX06aUQsc0Q9TWF0aC5jZWlsLGxEPU1hdGguZmxvb3IsY0Q9ZnVuY3Rpb24oZSl7dmFyIHQ9K2U7cmV0dXJuIHQhPXR8fDA9PT10PzA6KHQ+MD9sRDpzRCkodCl9LGZEPU1hdGgubWluLGREPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/ZkQoY0QoZSksOTAwNzE5OTI1NDc0MDk5MSk6MH0scEQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGREKGUubGVuZ3RoKX0saEQ9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuXCJBcnJheVwiPT1xRShlKX0sZ0Q9ZnVuY3Rpb24oKXt9LHZEPVtdLHlEPVR3KFwiUmVmbGVjdFwiLFwiY29uc3RydWN0XCIpLG1EPS9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi8sYkQ9bXcobUQuZXhlYyksd0Q9IW1ELmV4ZWMoZ0QpLEVEPWZ1bmN0aW9uKGUpe2lmKCFCdyhlKSlyZXR1cm4hMTt0cnl7cmV0dXJuIHlEKGdELHZELGUpLCEwfWNhdGNoKGUpe3JldHVybiExfX0sREQ9IXlEfHxSdygoZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gRUQoRUQuY2FsbCl8fCFFRChPYmplY3QpfHwhRUQoKGZ1bmN0aW9uKCl7ZT0hMH0pKXx8ZX0pKT9mdW5jdGlvbihlKXtpZighQncoZSkpcmV0dXJuITE7c3dpdGNoKFpFKGUpKXtjYXNlXCJBc3luY0Z1bmN0aW9uXCI6Y2FzZVwiR2VuZXJhdG9yRnVuY3Rpb25cIjpjYXNlXCJBc3luY0dlbmVyYXRvckZ1bmN0aW9uXCI6cmV0dXJuITF9cmV0dXJuIHdEfHwhIWJEKG1ELEFFKGUpKX06RUQsU0Q9V3coXCJzcGVjaWVzXCIpLHhEPWx3LkFycmF5LENEPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyhmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gaEQoZSkmJih0PWUuY29uc3RydWN0b3IsKEREKHQpJiYodD09PXhEfHxoRCh0LnByb3RvdHlwZSkpfHxZdyh0KSYmbnVsbD09PSh0PXRbU0RdKSkmJih0PXZvaWQgMCkpLHZvaWQgMD09PXQ/eEQ6dH0oZSkpKDA9PT10PzA6dCl9LEFEPW13KFtdLnB1c2gpLE9EPWZ1bmN0aW9uKGUpe3ZhciB0PTE9PWUsbj0yPT1lLHI9Mz09ZSxvPTQ9PWUsaT02PT1lLGE9Nz09ZSx1PTU9PWV8fGk7cmV0dXJuIGZ1bmN0aW9uKHMsbCxjLGYpe2Zvcih2YXIgZCxwLGg9RHcocyksZz11RChoKSx2PW9EKGwsYykseT1wRChnKSxtPTAsYj1mfHxDRCx3PXQ/YihzLHkpOm58fGE/YihzLDApOnZvaWQgMDt5Pm07bSsrKWlmKCh1fHxtIGluIGcpJiYocD12KGQ9Z1ttXSxtLGgpLGUpKWlmKHQpd1ttXT1wO2Vsc2UgaWYocClzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZDtjYXNlIDY6cmV0dXJuIG07Y2FzZSAyOkFEKHcsZCl9ZWxzZSBzd2l0Y2goZSl7Y2FzZSA0OnJldHVybiExO2Nhc2UgNzpBRCh3LGQpfXJldHVybiBpPy0xOnJ8fG8/bzp3fX0sa0Q9e2ZvckVhY2g6T0QoMCksbWFwOk9EKDEpLGZpbHRlcjpPRCgyKSxzb21lOk9EKDMpLGV2ZXJ5Ok9EKDQpLGZpbmQ6T0QoNSksZmluZEluZGV4Ok9EKDYpLGZpbHRlclJlamVjdDpPRCg3KX0sQkQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXVtlXTtyZXR1cm4hIW4mJlJ3KChmdW5jdGlvbigpe24uY2FsbChudWxsLHR8fGZ1bmN0aW9uKCl7dGhyb3cgMX0sMSl9KSl9LEZEPWtELmZvckVhY2gsVEQ9QkQoXCJmb3JFYWNoXCIpP1tdLmZvckVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIEZEKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LF9EPWZ1bmN0aW9uKGUpe2lmKGUmJmUuZm9yRWFjaCE9PVREKXRyeXtFRShlLFwiZm9yRWFjaFwiLFREKX1jYXRjaCh0KXtlLmZvckVhY2g9VER9fTtmb3IodmFyIFBEIGluIFFFKVFFW1BEXSYmX0QobHdbUERdJiZsd1tQRF0ucHJvdG90eXBlKTtfRChuRCk7dmFyIGpEPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLE5EPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsSUQ9TkQmJiFqRC5jYWxsKHsxOjJ9LDEpP2Z1bmN0aW9uKGUpe3ZhciB0PU5EKHRoaXMsZSk7cmV0dXJuISF0JiZ0LmVudW1lcmFibGV9OmpELExEPXtmOklEfSxSRD1mdW5jdGlvbihlKXtyZXR1cm4gdUQod3coZSkpfSxNRD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHpEPXtmOkt3P01EOmZ1bmN0aW9uKGUsdCl7aWYoZT1SRChlKSx0PXZFKHQpLFF3KXRyeXtyZXR1cm4gTUQoZSx0KX1jYXRjaChlKXt9aWYoeHcoZSx0KSlyZXR1cm4gd0UoIW9FKExELmYsZSx0KSxlW3RdKX19LCREPU1hdGgubWF4LEhEPU1hdGgubWluLFZEPWZ1bmN0aW9uKGUsdCl7dmFyIG49Y0QoZSk7cmV0dXJuIG48MD8kRChuK3QsMCk6SEQobix0KX0sVUQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXt2YXIgbyxpPVJEKHQpLGE9cEQoaSksdT1WRChyLGEpO2lmKGUmJm4hPW4pe2Zvcig7YT51OylpZigobz1pW3UrK10pIT1vKXJldHVybiEwfWVsc2UgZm9yKDthPnU7dSsrKWlmKChlfHx1IGluIGkpJiZpW3VdPT09bilyZXR1cm4gZXx8dXx8MDtyZXR1cm4hZSYmLTF9fSxXRD17aW5jbHVkZXM6VUQoITApLGluZGV4T2Y6VUQoITEpfSxHRD1XRC5pbmRleE9mLHFEPW13KFtdLnB1c2gpLEtEPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1SRChlKSxvPTAsaT1bXTtmb3IobiBpbiByKSF4dyhURSxuKSYmeHcocixuKSYmcUQoaSxuKTtmb3IoO3QubGVuZ3RoPm87KXh3KHIsbj10W28rK10pJiYofkdEKGksbil8fHFEKGksbikpO3JldHVybiBpfSxZRD1bXCJjb25zdHJ1Y3RvclwiLFwiaGFzT3duUHJvcGVydHlcIixcImlzUHJvdG90eXBlT2ZcIixcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsXCJ0b0xvY2FsZVN0cmluZ1wiLFwidG9TdHJpbmdcIixcInZhbHVlT2ZcIl0sWEQ9WUQuY29uY2F0KFwibGVuZ3RoXCIsXCJwcm90b3R5cGVcIiksWkQ9e2Y6T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3JldHVybiBLRChlLFhEKX19LEpEPXtmOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LFFEPW13KFtdLmNvbmNhdCksZVM9VHcoXCJSZWZsZWN0XCIsXCJvd25LZXlzXCIpfHxmdW5jdGlvbihlKXt2YXIgdD1aRC5mKG5FKGUpKSxuPUpELmY7cmV0dXJuIG4/UUQodCxuKGUpKTp0fSx0Uz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lUyh0KSxyPWJFLmYsbz16RC5mLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXTt4dyhlLGEpfHxyKGUsYSxvKHQsYSkpfX0sblM9LyN8XFwucHJvdG90eXBlXFwuLyxyUz1mdW5jdGlvbihlLHQpe3ZhciBuPWlTW29TKGUpXTtyZXR1cm4gbj09dVN8fG4hPWFTJiYoQncodCk/UncodCk6ISF0KX0sb1M9clMubm9ybWFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZShuUyxcIi5cIikudG9Mb3dlckNhc2UoKX0saVM9clMuZGF0YT17fSxhUz1yUy5OQVRJVkU9XCJOXCIsdVM9clMuUE9MWUZJTEw9XCJQXCIsc1M9clMsbFM9ekQuZixjUz1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxpLGEsdT1lLnRhcmdldCxzPWUuZ2xvYmFsLGw9ZS5zdGF0O2lmKG49cz9sdzpsP2x3W3VdfHxmdyh1LHt9KToobHdbdV18fHt9KS5wcm90b3R5cGUpZm9yKHIgaW4gdCl7aWYoaT10W3JdLG89ZS5ub1RhcmdldEdldD8oYT1sUyhuLHIpKSYmYS52YWx1ZTpuW3JdLCFzUyhzP3I6dSsobD9cIi5cIjpcIiNcIikrcixlLmZvcmNlZCkmJnZvaWQgMCE9PW8pe2lmKHR5cGVvZiBpPT10eXBlb2Ygbyljb250aW51ZTt0UyhpLG8pfShlLnNoYW18fG8mJm8uc2hhbSkmJkVFKGksXCJzaGFtXCIsITApLFVFKG4scixpLGUpfX0sZlM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3JldHVybiBLRChlLFlEKX0sZFM9UncoKGZ1bmN0aW9uKCl7ZlMoMSl9KSk7XG4vKiFcbiAqIGlzLXBsYWluLW9iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtcGxhaW4tb2JqZWN0PlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBKb24gU2NobGlua2VydC5cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL2Z1bmN0aW9uIHBTKGUpe3JldHVyblwiW29iamVjdCBPYmplY3RdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9Y1Moe3RhcmdldDpcIk9iamVjdFwiLHN0YXQ6ITAsZm9yY2VkOmRTfSx7a2V5czpmdW5jdGlvbihlKXtyZXR1cm4gZlMoRHcoZSkpfX0pO3ZhciBoUz17aXNIaXN0b3J5KGUpe3JldHVybiExIT09cFModD1lKSYmKHZvaWQgMD09PShuPXQuY29uc3RydWN0b3IpfHwhMSE9PXBTKHI9bi5wcm90b3R5cGUpJiYhMSE9PXIuaGFzT3duUHJvcGVydHkoXCJpc1Byb3RvdHlwZU9mXCIpKSYmQXJyYXkuaXNBcnJheShlLnJlZG9zKSYmQXJyYXkuaXNBcnJheShlLnVuZG9zKSYmKDA9PT1lLnJlZG9zLmxlbmd0aHx8UmYuaXNPcGVyYXRpb25MaXN0KGUucmVkb3NbMF0pKSYmKDA9PT1lLnVuZG9zLmxlbmd0aHx8UmYuaXNPcGVyYXRpb25MaXN0KGUudW5kb3NbMF0pKTt2YXIgdCxuLHJ9fSxnUz1uZXcgV2Vha01hcCx2Uz1uZXcgV2Vha01hcCx5Uz17aXNIaXN0b3J5RWRpdG9yOmU9PmhTLmlzSGlzdG9yeShlLmhpc3RvcnkpJiZCZi5pc0VkaXRvcihlKSxpc01lcmdpbmc6ZT0+dlMuZ2V0KGUpLGlzU2F2aW5nOmU9PmdTLmdldChlKSxyZWRvKGUpe2UucmVkbygpfSx1bmRvKGUpe2UudW5kbygpfSx3aXRob3V0TWVyZ2luZyhlLHQpe3ZhciBuPXlTLmlzTWVyZ2luZyhlKTt2Uy5zZXQoZSwhMSksdCgpLHZTLnNldChlLG4pfSx3aXRob3V0U2F2aW5nKGUsdCl7dmFyIG49eVMuaXNTYXZpbmcoZSk7Z1Muc2V0KGUsITEpLHQoKSxnUy5zZXQoZSxuKX19LG1TPWx3LlN0cmluZyxiUz1mdW5jdGlvbihlKXtpZihcIlN5bWJvbFwiPT09WkUoZSkpdGhyb3cgVHlwZUVycm9yKFwiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmdcIik7cmV0dXJuIG1TKGUpfSx3Uz1mdW5jdGlvbigpe3ZhciBlPW5FKHRoaXMpLHQ9XCJcIjtyZXR1cm4gZS5nbG9iYWwmJih0Kz1cImdcIiksZS5pZ25vcmVDYXNlJiYodCs9XCJpXCIpLGUubXVsdGlsaW5lJiYodCs9XCJtXCIpLGUuZG90QWxsJiYodCs9XCJzXCIpLGUudW5pY29kZSYmKHQrPVwidVwiKSxlLnN0aWNreSYmKHQrPVwieVwiKSx0fSxFUz1WRS5QUk9QRVIsRFM9UmVnRXhwLnByb3RvdHlwZSxTUz1EUy50b1N0cmluZyx4Uz1tdyh3UyksQ1M9UncoKGZ1bmN0aW9uKCl7cmV0dXJuXCIvYS9iXCIhPVNTLmNhbGwoe3NvdXJjZTpcImFcIixmbGFnczpcImJcIn0pfSkpLEFTPUVTJiZcInRvU3RyaW5nXCIhPVNTLm5hbWU7KENTfHxBUykmJlVFKFJlZ0V4cC5wcm90b3R5cGUsXCJ0b1N0cmluZ1wiLChmdW5jdGlvbigpe3ZhciBlPW5FKHRoaXMpLHQ9YlMoZS5zb3VyY2UpLG49ZS5mbGFncztyZXR1cm5cIi9cIit0K1wiL1wiK2JTKHZvaWQgMD09PW4mJmlFKERTLGUpJiYhKFwiZmxhZ3NcImluIERTKT94UyhlKTpuKX0pLHt1bnNhZmU6ITB9KTt2YXIgT1Msa1M9S3c/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oZSx0KXtuRShlKTtmb3IodmFyIG4scj1SRCh0KSxvPWZTKHQpLGk9by5sZW5ndGgsYT0wO2k+YTspYkUuZihlLG49b1thKytdLHJbbl0pO3JldHVybiBlfSxCUz1UdyhcImRvY3VtZW50XCIsXCJkb2N1bWVudEVsZW1lbnRcIiksRlM9RkUoXCJJRV9QUk9UT1wiKSxUUz1mdW5jdGlvbigpe30sX1M9ZnVuY3Rpb24oZSl7cmV0dXJuXCI8c2NyaXB0PlwiK2UrXCI8XFwvc2NyaXB0PlwifSxQUz1mdW5jdGlvbihlKXtlLndyaXRlKF9TKFwiXCIpKSxlLmNsb3NlKCk7dmFyIHQ9ZS5wYXJlbnRXaW5kb3cuT2JqZWN0O3JldHVybiBlPW51bGwsdH0salM9ZnVuY3Rpb24oKXt0cnl7T1M9bmV3IEFjdGl2ZVhPYmplY3QoXCJodG1sZmlsZVwiKX1jYXRjaChlKXt9dmFyIGUsdDtqUz1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQuZG9tYWluJiZPUz9QUyhPUyk6KCh0PUp3KFwiaWZyYW1lXCIpKS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLEJTLmFwcGVuZENoaWxkKHQpLHQuc3JjPVN0cmluZyhcImphdmFzY3JpcHQ6XCIpLChlPXQuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLGUud3JpdGUoX1MoXCJkb2N1bWVudC5GPU9iamVjdFwiKSksZS5jbG9zZSgpLGUuRik6UFMoT1MpO2Zvcih2YXIgbj1ZRC5sZW5ndGg7bi0tOylkZWxldGUgalMucHJvdG90eXBlW1lEW25dXTtyZXR1cm4galMoKX07VEVbRlNdPSEwO3ZhciBOUz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09ZT8oVFMucHJvdG90eXBlPW5FKGUpLG49bmV3IFRTLFRTLnByb3RvdHlwZT1udWxsLG5bRlNdPWUpOm49alMoKSx2b2lkIDA9PT10P246a1Mobix0KX0sSVM9V3coXCJ1bnNjb3BhYmxlc1wiKSxMUz1BcnJheS5wcm90b3R5cGU7bnVsbD09TFNbSVNdJiZiRS5mKExTLElTLHtjb25maWd1cmFibGU6ITAsdmFsdWU6TlMobnVsbCl9KTt2YXIgUlM9ZnVuY3Rpb24oZSl7TFNbSVNdW2VdPSEwfSxNUz1XRC5pbmNsdWRlcztjUyh7dGFyZ2V0OlwiQXJyYXlcIixwcm90bzohMH0se2luY2x1ZGVzOmZ1bmN0aW9uKGUpe3JldHVybiBNUyh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLFJTKFwiaW5jbHVkZXNcIik7dmFyIHpTPVd3KFwibWF0Y2hcIiksJFM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIFl3KGUpJiYodm9pZCAwIT09KHQ9ZVt6U10pPyEhdDpcIlJlZ0V4cFwiPT1xRShlKSl9LEhTPWx3LlR5cGVFcnJvcixWUz1mdW5jdGlvbihlKXtpZigkUyhlKSl0aHJvdyBIUyhcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtyZXR1cm4gZX0sVVM9V3coXCJtYXRjaFwiKSxXUz1mdW5jdGlvbihlKXt2YXIgdD0vLi87dHJ5e1wiLy4vXCJbZV0odCl9Y2F0Y2gobil7dHJ5e3JldHVybiB0W1VTXT0hMSxcIi8uL1wiW2VdKHQpfWNhdGNoKGUpe319cmV0dXJuITF9LEdTPW13KFwiXCIuaW5kZXhPZik7Y1Moe3RhcmdldDpcIlN0cmluZ1wiLHByb3RvOiEwLGZvcmNlZDohV1MoXCJpbmNsdWRlc1wiKX0se2luY2x1ZGVzOmZ1bmN0aW9uKGUpe3JldHVybiEhfkdTKGJTKHd3KHRoaXMpKSxiUyhWUyhlKSksYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pO3ZhciBxUz0vXCIvZyxLUz1tdyhcIlwiLnJlcGxhY2UpO2NTKHt0YXJnZXQ6XCJTdHJpbmdcIixwcm90bzohMCxmb3JjZWQ6KFwiYW5jaG9yXCIsUncoKGZ1bmN0aW9uKCl7dmFyIGU9XCJcIi5hbmNob3IoJ1wiJyk7cmV0dXJuIGUhPT1lLnRvTG93ZXJDYXNlKCl8fGUuc3BsaXQoJ1wiJykubGVuZ3RoPjN9KSkpfSx7YW5jaG9yOmZ1bmN0aW9uKGUpe3JldHVyblwiYVwiLFwibmFtZVwiLHQ9ZSxuPWJTKHd3KHRoaXMpKSxyPVwiPGFcIiwocis9JyBuYW1lPVwiJytLUyhiUyh0KSxxUyxcIiZxdW90O1wiKSsnXCInKStcIj5cIituK1wiPC9hPlwiO3ZhciB0LG4scn19KTt2YXIgWVM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG87bkUoZSk7dHJ5e2lmKCEocj1kRShlLFwicmV0dXJuXCIpKSl7aWYoXCJ0aHJvd1wiPT09dCl0aHJvdyBuO3JldHVybiBufXI9b0UocixlKX1jYXRjaChlKXtvPSEwLHI9ZX1pZihcInRocm93XCI9PT10KXRocm93IG47aWYobyl0aHJvdyByO3JldHVybiBuRShyKSxufSxYUz1mdW5jdGlvbihlLHQsbixyKXt0cnl7cmV0dXJuIHI/dChuRShuKVswXSxuWzFdKTp0KG4pfWNhdGNoKHQpe1lTKGUsXCJ0aHJvd1wiLHQpfX0sWlM9e30sSlM9V3coXCJpdGVyYXRvclwiKSxRUz1BcnJheS5wcm90b3R5cGUsZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihaUy5BcnJheT09PWV8fFFTW0pTXT09PWUpfSx0eD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dkUodCk7ciBpbiBlP2JFLmYoZSxyLHdFKDAsbikpOmVbcl09bn0sbng9V3coXCJpdGVyYXRvclwiKSxyeD1mdW5jdGlvbihlKXtpZihudWxsIT1lKXJldHVybiBkRShlLG54KXx8ZEUoZSxcIkBAaXRlcmF0b3JcIil8fFpTW1pFKGUpXX0sb3g9bHcuVHlwZUVycm9yLGl4PWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwyP3J4KGUpOnQ7aWYoZkUobikpcmV0dXJuIG5FKG9FKG4sZSkpO3Rocm93IG94KGxFKGUpK1wiIGlzIG5vdCBpdGVyYWJsZVwiKX0sYXg9bHcuQXJyYXksdXg9V3coXCJpdGVyYXRvclwiKSxzeD0hMTt0cnl7dmFyIGx4PTAsY3g9e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohIWx4Kyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtzeD0hMH19O2N4W3V4XT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKGN4LChmdW5jdGlvbigpe3Rocm93IDJ9KSl9Y2F0Y2goak8pe312YXIgZng9ZnVuY3Rpb24oZSx0KXtpZighdCYmIXN4KXJldHVybiExO3ZhciBuPSExO3RyeXt2YXIgcj17fTtyW3V4XT1mdW5jdGlvbigpe3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6bj0hMH19fX0sZShyKX1jYXRjaChlKXt9cmV0dXJuIG59LGR4PSFmeCgoZnVuY3Rpb24oZSl7QXJyYXkuZnJvbShlKX0pKTtjUyh7dGFyZ2V0OlwiQXJyYXlcIixzdGF0OiEwLGZvcmNlZDpkeH0se2Zyb206ZnVuY3Rpb24oZSl7dmFyIHQ9RHcoZSksbj1ERCh0aGlzKSxyPWFyZ3VtZW50cy5sZW5ndGgsbz1yPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxpPXZvaWQgMCE9PW87aSYmKG89b0QobyxyPjI/YXJndW1lbnRzWzJdOnZvaWQgMCkpO3ZhciBhLHUscyxsLGMsZixkPXJ4KHQpLHA9MDtpZighZHx8dGhpcz09YXgmJmV4KGQpKWZvcihhPXBEKHQpLHU9bj9uZXcgdGhpcyhhKTpheChhKTthPnA7cCsrKWY9aT9vKHRbcF0scCk6dFtwXSx0eCh1LHAsZik7ZWxzZSBmb3IoYz0obD1peCh0LGQpKS5uZXh0LHU9bj9uZXcgdGhpczpbXTshKHM9b0UoYyxsKSkuZG9uZTtwKyspZj1pP1hTKGwsbyxbcy52YWx1ZSxwXSwhMCk6cy52YWx1ZSx0eCh1LHAsZik7cmV0dXJuIHUubGVuZ3RoPXAsdX19KTt2YXIgcHgsaHgsZ3gsdng9bXcoXCJcIi5jaGFyQXQpLHl4PW13KFwiXCIuY2hhckNvZGVBdCksbXg9bXcoXCJcIi5zbGljZSksYng9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHIsbyxpPWJTKHd3KHQpKSxhPWNEKG4pLHU9aS5sZW5ndGg7cmV0dXJuIGE8MHx8YT49dT9lP1wiXCI6dm9pZCAwOihyPXl4KGksYSkpPDU1Mjk2fHxyPjU2MzE5fHxhKzE9PT11fHwobz15eChpLGErMSkpPDU2MzIwfHxvPjU3MzQzP2U/dngoaSxhKTpyOmU/bXgoaSxhLGErMik6by01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fX0sd3g9e2NvZGVBdDpieCghMSksY2hhckF0OmJ4KCEwKX0sRXg9IVJ3KChmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBlKSE9PWUucHJvdG90eXBlfSkpLER4PUZFKFwiSUVfUFJPVE9cIiksU3g9bHcuT2JqZWN0LHh4PVN4LnByb3RvdHlwZSxDeD1FeD9TeC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXt2YXIgdD1EdyhlKTtpZih4dyh0LER4KSlyZXR1cm4gdFtEeF07dmFyIG49dC5jb25zdHJ1Y3RvcjtyZXR1cm4gQncobikmJnQgaW5zdGFuY2VvZiBuP24ucHJvdG90eXBlOnQgaW5zdGFuY2VvZiBTeD94eDpudWxsfSxBeD1XdyhcIml0ZXJhdG9yXCIpLE94PSExO1tdLmtleXMmJihcIm5leHRcImluKGd4PVtdLmtleXMoKSk/KGh4PUN4KEN4KGd4KSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKHB4PWh4KTpPeD0hMCk7dmFyIGt4PW51bGw9PXB4fHxSdygoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gcHhbQXhdLmNhbGwoZSkhPT1lfSkpO2t4JiYocHg9e30pLEJ3KHB4W0F4XSl8fFVFKHB4LEF4LChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBCeD17SXRlcmF0b3JQcm90b3R5cGU6cHgsQlVHR1lfU0FGQVJJX0lURVJBVE9SUzpPeH0sRng9YkUuZixUeD1XdyhcInRvU3RyaW5nVGFnXCIpLF94PWZ1bmN0aW9uKGUsdCxuKXtlJiYheHcoZT1uP2U6ZS5wcm90b3R5cGUsVHgpJiZGeChlLFR4LHtjb25maWd1cmFibGU6ITAsdmFsdWU6dH0pfSxQeD1CeC5JdGVyYXRvclByb3RvdHlwZSxqeD1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxOeD1sdy5TdHJpbmcsSXg9bHcuVHlwZUVycm9yLEx4PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8KFwiX19wcm90b19fXCJpbnt9P2Z1bmN0aW9uKCl7dmFyIGUsdD0hMSxuPXt9O3RyeXsoZT1tdyhPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsXCJfX3Byb3RvX19cIikuc2V0KSkobixbXSksdD1uIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2goZSl7fXJldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiBuRShuKSxmdW5jdGlvbihlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXx8QncoZSkpcmV0dXJuIGU7dGhyb3cgSXgoXCJDYW4ndCBzZXQgXCIrTngoZSkrXCIgYXMgYSBwcm90b3R5cGVcIil9KHIpLHQ/ZShuLHIpOm4uX19wcm90b19fPXIsbn19KCk6dm9pZCAwKSxSeD1WRS5QUk9QRVIsTXg9VkUuQ09ORklHVVJBQkxFLHp4PUJ4Lkl0ZXJhdG9yUHJvdG90eXBlLCR4PUJ4LkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMsSHg9V3coXCJpdGVyYXRvclwiKSxWeD1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxVeD1mdW5jdGlvbihlLHQsbixyLG8saSxhKXshZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dCtcIiBJdGVyYXRvclwiO2UucHJvdG90eXBlPU5TKFB4LHtuZXh0OndFKDEsbil9KSxfeChlLG8sITEpLFpTW29dPWp4fShuLHQscik7dmFyIHUscyxsLGM9ZnVuY3Rpb24oZSl7aWYoZT09PW8mJmcpcmV0dXJuIGc7aWYoISR4JiZlIGluIHApcmV0dXJuIHBbZV07c3dpdGNoKGUpe2Nhc2VcImtleXNcIjpjYXNlXCJ2YWx1ZXNcIjpjYXNlXCJlbnRyaWVzXCI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzKX19LGY9dCtcIiBJdGVyYXRvclwiLGQ9ITEscD1lLnByb3RvdHlwZSxoPXBbSHhdfHxwW1wiQEBpdGVyYXRvclwiXXx8byYmcFtvXSxnPSEkeCYmaHx8YyhvKSx2PVwiQXJyYXlcIj09dCYmcC5lbnRyaWVzfHxoO2lmKHYmJih1PUN4KHYuY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJnUubmV4dCYmKEN4KHUpIT09engmJihMeD9MeCh1LHp4KTpCdyh1W0h4XSl8fFVFKHUsSHgsVngpKSxfeCh1LGYsITApKSxSeCYmXCJ2YWx1ZXNcIj09byYmaCYmXCJ2YWx1ZXNcIiE9PWgubmFtZSYmKE14P0VFKHAsXCJuYW1lXCIsXCJ2YWx1ZXNcIik6KGQ9ITAsZz1mdW5jdGlvbigpe3JldHVybiBvRShoLHRoaXMpfSkpLG8paWYocz17dmFsdWVzOmMoXCJ2YWx1ZXNcIiksa2V5czppP2c6YyhcImtleXNcIiksZW50cmllczpjKFwiZW50cmllc1wiKX0sYSlmb3IobCBpbiBzKSgkeHx8ZHx8IShsIGluIHApKSYmVUUocCxsLHNbbF0pO2Vsc2UgY1Moe3RhcmdldDp0LHByb3RvOiEwLGZvcmNlZDokeHx8ZH0scyk7cmV0dXJuIHBbSHhdIT09ZyYmVUUocCxIeCxnLHtuYW1lOm99KSxaU1t0XT1nLHN9LFd4PXd4LmNoYXJBdCxHeD1NRS5zZXQscXg9TUUuZ2V0dGVyRm9yKFwiU3RyaW5nIEl0ZXJhdG9yXCIpO1V4KFN0cmluZyxcIlN0cmluZ1wiLChmdW5jdGlvbihlKXtHeCh0aGlzLHt0eXBlOlwiU3RyaW5nIEl0ZXJhdG9yXCIsc3RyaW5nOmJTKGUpLGluZGV4OjB9KX0pLChmdW5jdGlvbigpe3ZhciBlLHQ9cXgodGhpcyksbj10LnN0cmluZyxyPXQuaW5kZXg7cmV0dXJuIHI+PW4ubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KGU9V3gobixyKSx0LmluZGV4Kz1lLmxlbmd0aCx7dmFsdWU6ZSxkb25lOiExfSl9KSk7dmFyIEt4LFl4PXpELmYsWHg9bXcoXCJcIi5lbmRzV2l0aCksWng9bXcoXCJcIi5zbGljZSksSng9TWF0aC5taW4sUXg9V1MoXCJlbmRzV2l0aFwiKSxlQz0hKFF4fHwoS3g9WXgoU3RyaW5nLnByb3RvdHlwZSxcImVuZHNXaXRoXCIpLCFLeHx8S3gud3JpdGFibGUpKTtjUyh7dGFyZ2V0OlwiU3RyaW5nXCIscHJvdG86ITAsZm9yY2VkOiFlQyYmIVF4fSx7ZW5kc1dpdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9YlMod3codGhpcykpO1ZTKGUpO3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHI9dC5sZW5ndGgsbz12b2lkIDA9PT1uP3I6SngoZEQobiksciksaT1iUyhlKTtyZXR1cm4gWHg/WHgodCxpLG8pOlp4KHQsby1pLmxlbmd0aCxvKT09PWl9fSk7dmFyIHRDPW13KFtdLmpvaW4pLG5DPXVEIT1PYmplY3QsckM9QkQoXCJqb2luXCIsXCIsXCIpO2NTKHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwLGZvcmNlZDpuQ3x8IXJDfSx7am9pbjpmdW5jdGlvbihlKXtyZXR1cm4gdEMoUkQodGhpcyksdm9pZCAwPT09ZT9cIixcIjplKX19KTt2YXIgb0M9V3coXCJzcGVjaWVzXCIpLGlDPWZ1bmN0aW9uKGUpe3JldHVybiBMdz49NTF8fCFSdygoZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4odC5jb25zdHJ1Y3Rvcj17fSlbb0NdPWZ1bmN0aW9uKCl7cmV0dXJue2ZvbzoxfX0sMSE9PXRbZV0oQm9vbGVhbikuZm9vfSkpfSxhQz1rRC5tYXAsdUM9aUMoXCJtYXBcIik7Y1Moe3RhcmdldDpcIkFycmF5XCIscHJvdG86ITAsZm9yY2VkOiF1Q30se21hcDpmdW5jdGlvbihlKXtyZXR1cm4gYUModGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KTt2YXIgc0M9bHcuUmVnRXhwLGxDPVJ3KChmdW5jdGlvbigpe3ZhciBlPXNDKFwiYVwiLFwieVwiKTtyZXR1cm4gZS5sYXN0SW5kZXg9MixudWxsIT1lLmV4ZWMoXCJhYmNkXCIpfSkpLGNDPWxDfHxSdygoZnVuY3Rpb24oKXtyZXR1cm4hc0MoXCJhXCIsXCJ5XCIpLnN0aWNreX0pKSxmQz17QlJPS0VOX0NBUkVUOmxDfHxSdygoZnVuY3Rpb24oKXt2YXIgZT1zQyhcIl5yXCIsXCJneVwiKTtyZXR1cm4gZS5sYXN0SW5kZXg9MixudWxsIT1lLmV4ZWMoXCJzdHJcIil9KSksTUlTU0VEX1NUSUNLWTpjQyxVTlNVUFBPUlRFRF9ZOmxDfSxkQz1sdy5SZWdFeHAscEM9UncoKGZ1bmN0aW9uKCl7dmFyIGU9ZEMoXCIuXCIsXCJzXCIpO3JldHVybiEoZS5kb3RBbGwmJmUuZXhlYyhcIlxcblwiKSYmXCJzXCI9PT1lLmZsYWdzKX0pKSxoQz1sdy5SZWdFeHAsZ0M9UncoKGZ1bmN0aW9uKCl7dmFyIGU9aEMoXCIoPzxhPmIpXCIsXCJnXCIpO3JldHVyblwiYlwiIT09ZS5leGVjKFwiYlwiKS5ncm91cHMuYXx8XCJiY1wiIT09XCJiXCIucmVwbGFjZShlLFwiJDxhPmNcIil9KSksdkM9TUUuZ2V0LHlDPXB3KFwibmF0aXZlLXN0cmluZy1yZXBsYWNlXCIsU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxtQz1SZWdFeHAucHJvdG90eXBlLmV4ZWMsYkM9bUMsd0M9bXcoXCJcIi5jaGFyQXQpLEVDPW13KFwiXCIuaW5kZXhPZiksREM9bXcoXCJcIi5yZXBsYWNlKSxTQz1tdyhcIlwiLnNsaWNlKSx4Qz1mdW5jdGlvbigpe3ZhciBlPS9hLyx0PS9iKi9nO3JldHVybiBvRShtQyxlLFwiYVwiKSxvRShtQyx0LFwiYVwiKSwwIT09ZS5sYXN0SW5kZXh8fDAhPT10Lmxhc3RJbmRleH0oKSxDQz1mQy5CUk9LRU5fQ0FSRVQsQUM9dm9pZCAwIT09LygpPz8vLmV4ZWMoXCJcIilbMV07KHhDfHxBQ3x8Q0N8fHBDfHxnQykmJihiQz1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxpLGEsdSxzPXRoaXMsbD12QyhzKSxjPWJTKGUpLGY9bC5yYXc7aWYoZilyZXR1cm4gZi5sYXN0SW5kZXg9cy5sYXN0SW5kZXgsdD1vRShiQyxmLGMpLHMubGFzdEluZGV4PWYubGFzdEluZGV4LHQ7dmFyIGQ9bC5ncm91cHMscD1DQyYmcy5zdGlja3ksaD1vRSh3UyxzKSxnPXMuc291cmNlLHY9MCx5PWM7aWYocCYmKGg9REMoaCxcInlcIixcIlwiKSwtMT09PUVDKGgsXCJnXCIpJiYoaCs9XCJnXCIpLHk9U0MoYyxzLmxhc3RJbmRleCkscy5sYXN0SW5kZXg+MCYmKCFzLm11bHRpbGluZXx8cy5tdWx0aWxpbmUmJlwiXFxuXCIhPT13QyhjLHMubGFzdEluZGV4LTEpKSYmKGc9XCIoPzogXCIrZytcIilcIix5PVwiIFwiK3ksdisrKSxuPW5ldyBSZWdFeHAoXCJeKD86XCIrZytcIilcIixoKSksQUMmJihuPW5ldyBSZWdFeHAoXCJeXCIrZytcIiQoPyFcXFxccylcIixoKSkseEMmJihyPXMubGFzdEluZGV4KSxvPW9FKG1DLHA/bjpzLHkpLHA/bz8oby5pbnB1dD1TQyhvLmlucHV0LHYpLG9bMF09U0Mob1swXSx2KSxvLmluZGV4PXMubGFzdEluZGV4LHMubGFzdEluZGV4Kz1vWzBdLmxlbmd0aCk6cy5sYXN0SW5kZXg9MDp4QyYmbyYmKHMubGFzdEluZGV4PXMuZ2xvYmFsP28uaW5kZXgrb1swXS5sZW5ndGg6ciksQUMmJm8mJm8ubGVuZ3RoPjEmJm9FKHlDLG9bMF0sbiwoZnVuY3Rpb24oKXtmb3IoaT0xO2k8YXJndW1lbnRzLmxlbmd0aC0yO2krKyl2b2lkIDA9PT1hcmd1bWVudHNbaV0mJihvW2ldPXZvaWQgMCl9KSksbyYmZClmb3Ioby5ncm91cHM9YT1OUyhudWxsKSxpPTA7aTxkLmxlbmd0aDtpKyspYVsodT1kW2ldKVswXV09b1t1WzFdXTtyZXR1cm4gb30pO3ZhciBPQz1iQztjUyh7dGFyZ2V0OlwiUmVnRXhwXCIscHJvdG86ITAsZm9yY2VkOi8uLy5leGVjIT09T0N9LHtleGVjOk9DfSk7dmFyIGtDPUZ1bmN0aW9uLnByb3RvdHlwZSxCQz1rQy5hcHBseSxGQz1rQy5iaW5kLFRDPWtDLmNhbGwsX0M9XCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuYXBwbHl8fChGQz9UQy5iaW5kKEJDKTpmdW5jdGlvbigpe3JldHVybiBUQy5hcHBseShCQyxhcmd1bWVudHMpfSksUEM9V3coXCJzcGVjaWVzXCIpLGpDPVJlZ0V4cC5wcm90b3R5cGUsTkM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89V3coZSksaT0hUncoKGZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHRbb109ZnVuY3Rpb24oKXtyZXR1cm4gN30sNyE9XCJcIltlXSh0KX0pKSxhPWkmJiFSdygoZnVuY3Rpb24oKXt2YXIgdD0hMSxuPS9hLztyZXR1cm5cInNwbGl0XCI9PT1lJiYoKG49e30pLmNvbnN0cnVjdG9yPXt9LG4uY29uc3RydWN0b3JbUENdPWZ1bmN0aW9uKCl7cmV0dXJuIG59LG4uZmxhZ3M9XCJcIixuW29dPS8uL1tvXSksbi5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIHQ9ITAsbnVsbH0sbltvXShcIlwiKSwhdH0pKTtpZighaXx8IWF8fG4pe3ZhciB1PW13KC8uL1tvXSkscz10KG8sXCJcIltlXSwoZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgYT1tdyhlKSxzPXQuZXhlYztyZXR1cm4gcz09PU9DfHxzPT09akMuZXhlYz9pJiYhbz97ZG9uZTohMCx2YWx1ZTp1KHQsbixyKX06e2RvbmU6ITAsdmFsdWU6YShuLHQscil9Ontkb25lOiExfX0pKTtVRShTdHJpbmcucHJvdG90eXBlLGUsc1swXSksVUUoakMsbyxzWzFdKX1yJiZFRShqQ1tvXSxcInNoYW1cIiwhMCl9LElDPXd4LmNoYXJBdCxMQz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQrKG4/SUMoZSx0KS5sZW5ndGg6MSl9LFJDPU1hdGguZmxvb3IsTUM9bXcoXCJcIi5jaGFyQXQpLHpDPW13KFwiXCIucmVwbGFjZSksJEM9bXcoXCJcIi5zbGljZSksSEM9L1xcJChbJCYnYF18XFxkezEsMn18PFtePl0qPikvZyxWQz0vXFwkKFskJidgXXxcXGR7MSwyfSkvZyxVQz1mdW5jdGlvbihlLHQsbixyLG8saSl7dmFyIGE9bitlLmxlbmd0aCx1PXIubGVuZ3RoLHM9VkM7cmV0dXJuIHZvaWQgMCE9PW8mJihvPUR3KG8pLHM9SEMpLHpDKGkscywoZnVuY3Rpb24oaSxzKXt2YXIgbDtzd2l0Y2goTUMocywwKSl7Y2FzZVwiJFwiOnJldHVyblwiJFwiO2Nhc2VcIiZcIjpyZXR1cm4gZTtjYXNlXCJgXCI6cmV0dXJuICRDKHQsMCxuKTtjYXNlXCInXCI6cmV0dXJuICRDKHQsYSk7Y2FzZVwiPFwiOmw9b1skQyhzLDEsLTEpXTticmVhaztkZWZhdWx0OnZhciBjPStzO2lmKDA9PT1jKXJldHVybiBpO2lmKGM+dSl7dmFyIGY9UkMoYy8xMCk7cmV0dXJuIDA9PT1mP2k6Zjw9dT92b2lkIDA9PT1yW2YtMV0/TUMocywxKTpyW2YtMV0rTUMocywxKTppfWw9cltjLTFdfXJldHVybiB2b2lkIDA9PT1sP1wiXCI6bH0pKX0sV0M9bHcuVHlwZUVycm9yLEdDPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5leGVjO2lmKEJ3KG4pKXt2YXIgcj1vRShuLGUsdCk7cmV0dXJuIG51bGwhPT1yJiZuRShyKSxyfWlmKFwiUmVnRXhwXCI9PT1xRShlKSlyZXR1cm4gb0UoT0MsZSx0KTt0aHJvdyBXQyhcIlJlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXJcIil9LHFDPVd3KFwicmVwbGFjZVwiKSxLQz1NYXRoLm1heCxZQz1NYXRoLm1pbixYQz1tdyhbXS5jb25jYXQpLFpDPW13KFtdLnB1c2gpLEpDPW13KFwiXCIuaW5kZXhPZiksUUM9bXcoXCJcIi5zbGljZSksZUE9XCIkMFwiPT09XCJhXCIucmVwbGFjZSgvLi8sXCIkMFwiKSx0QT0hIS8uL1txQ10mJlwiXCI9PT0vLi9bcUNdKFwiYVwiLFwiJDBcIik7TkMoXCJyZXBsYWNlXCIsKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10QT9cIiRcIjpcIiQwXCI7cmV0dXJuW2Z1bmN0aW9uKGUsbil7dmFyIHI9d3codGhpcyksbz1udWxsPT1lP3ZvaWQgMDpkRShlLHFDKTtyZXR1cm4gbz9vRShvLGUscixuKTpvRSh0LGJTKHIpLGUsbil9LGZ1bmN0aW9uKGUsbyl7dmFyIGk9bkUodGhpcyksYT1iUyhlKTtpZihcInN0cmluZ1wiPT10eXBlb2YgbyYmLTE9PT1KQyhvLHIpJiYtMT09PUpDKG8sXCIkPFwiKSl7dmFyIHU9bih0LGksYSxvKTtpZih1LmRvbmUpcmV0dXJuIHUudmFsdWV9dmFyIHM9Qncobyk7c3x8KG89YlMobykpO3ZhciBsPWkuZ2xvYmFsO2lmKGwpe3ZhciBjPWkudW5pY29kZTtpLmxhc3RJbmRleD0wfWZvcih2YXIgZj1bXTs7KXt2YXIgZD1HQyhpLGEpO2lmKG51bGw9PT1kKWJyZWFrO2lmKFpDKGYsZCksIWwpYnJlYWs7XCJcIj09PWJTKGRbMF0pJiYoaS5sYXN0SW5kZXg9TEMoYSxkRChpLmxhc3RJbmRleCksYykpfWZvcih2YXIgcCxoPVwiXCIsZz0wLHY9MDt2PGYubGVuZ3RoO3YrKyl7Zm9yKHZhciB5PWJTKChkPWZbdl0pWzBdKSxtPUtDKFlDKGNEKGQuaW5kZXgpLGEubGVuZ3RoKSwwKSxiPVtdLHc9MTt3PGQubGVuZ3RoO3crKylaQyhiLHZvaWQgMD09PShwPWRbd10pP3A6U3RyaW5nKHApKTt2YXIgRT1kLmdyb3VwcztpZihzKXt2YXIgRD1YQyhbeV0sYixtLGEpO3ZvaWQgMCE9PUUmJlpDKEQsRSk7dmFyIFM9YlMoX0Mobyx2b2lkIDAsRCkpfWVsc2UgUz1VQyh5LGEsbSxiLEUsbyk7bT49ZyYmKGgrPVFDKGEsZyxtKStTLGc9bSt5Lmxlbmd0aCl9cmV0dXJuIGgrUUMoYSxnKX1dfSksISFSdygoZnVuY3Rpb24oKXt2YXIgZT0vLi87cmV0dXJuIGUuZXhlYz1mdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBlLmdyb3Vwcz17YTpcIjdcIn0sZX0sXCI3XCIhPT1cIlwiLnJlcGxhY2UoZSxcIiQ8YT5cIil9KSl8fCFlQXx8dEEpO1xuLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG52YXIgbkE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbkE9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfSxuQShlLHQpfTtmdW5jdGlvbiByQShlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiK1N0cmluZyh0KStcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9bkEoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9dmFyIG9BPWZ1bmN0aW9uKCl7cmV0dXJuIG9BPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW25dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0sb0EuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBpQShlKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixuPXQmJmVbdF0scj0wO2lmKG4pcmV0dXJuIG4uY2FsbChlKTtpZihlJiZcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSYmcj49ZS5sZW5ndGgmJihlPXZvaWQgMCkse3ZhbHVlOmUmJmVbcisrXSxkb25lOiFlfX19O3Rocm93IG5ldyBUeXBlRXJyb3IodD9cIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCI6XCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpfWZ1bmN0aW9uIGFBKGUsdCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIGU7dmFyIHIsbyxpPW4uY2FsbChlKSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT10fHx0LS0gPjApJiYhKHI9aS5uZXh0KCkpLmRvbmU7KWEucHVzaChyLnZhbHVlKX1jYXRjaChlKXtvPXtlcnJvcjplfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYobj1pLnJldHVybikmJm4uY2FsbChpKX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIGF9ZnVuY3Rpb24gdUEoZSx0KXtmb3IodmFyIG49MCxyPXQubGVuZ3RoLG89ZS5sZW5ndGg7bjxyO24rKyxvKyspZVtvXT10W25dO3JldHVybiBlfXZhciBzQT0wLGxBPWZ1bmN0aW9uKCl7dGhpcy5pZD1cIlwiK3NBKyt9LGNBPU1FLnNldCxmQT1NRS5nZXR0ZXJGb3IoXCJBcnJheSBJdGVyYXRvclwiKSxkQT1VeChBcnJheSxcIkFycmF5XCIsKGZ1bmN0aW9uKGUsdCl7Y0EodGhpcyx7dHlwZTpcIkFycmF5IEl0ZXJhdG9yXCIsdGFyZ2V0OlJEKGUpLGluZGV4OjAsa2luZDp0fSl9KSwoZnVuY3Rpb24oKXt2YXIgZT1mQSh0aGlzKSx0PWUudGFyZ2V0LG49ZS5raW5kLHI9ZS5pbmRleCsrO3JldHVybiF0fHxyPj10Lmxlbmd0aD8oZS50YXJnZXQ9dm9pZCAwLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pOlwia2V5c1wiPT1uP3t2YWx1ZTpyLGRvbmU6ITF9OlwidmFsdWVzXCI9PW4/e3ZhbHVlOnRbcl0sZG9uZTohMX06e3ZhbHVlOltyLHRbcl1dLGRvbmU6ITF9fSksXCJ2YWx1ZXNcIik7WlMuQXJndW1lbnRzPVpTLkFycmF5LFJTKFwia2V5c1wiKSxSUyhcInZhbHVlc1wiKSxSUyhcImVudHJpZXNcIik7dmFyIHBBPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIgaW4gdClVRShlLHIsdFtyXSxuKTtyZXR1cm4gZX0saEE9bHcuQXJyYXksZ0E9TWF0aC5tYXgsdkE9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1wRChlKSxvPVZEKHQsciksaT1WRCh2b2lkIDA9PT1uP3I6bixyKSxhPWhBKGdBKGktbywwKSksdT0wO288aTtvKyssdSsrKXR4KGEsdSxlW29dKTtyZXR1cm4gYS5sZW5ndGg9dSxhfSx5QT1aRC5mLG1BPVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXSxiQT17ZjpmdW5jdGlvbihlKXtyZXR1cm4gbUEmJlwiV2luZG93XCI9PXFFKGUpP2Z1bmN0aW9uKGUpe3RyeXtyZXR1cm4geUEoZSl9Y2F0Y2goZSl7cmV0dXJuIHZBKG1BKX19KGUpOnlBKFJEKGUpKX19LHdBPVJ3KChmdW5jdGlvbigpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIEFycmF5QnVmZmVyKXt2YXIgZT1uZXcgQXJyYXlCdWZmZXIoOCk7T2JqZWN0LmlzRXh0ZW5zaWJsZShlKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJhXCIse3ZhbHVlOjh9KX19KSksRUE9T2JqZWN0LmlzRXh0ZW5zaWJsZSxEQT1SdygoZnVuY3Rpb24oKXtFQSgxKX0pKXx8d0E/ZnVuY3Rpb24oZSl7cmV0dXJuISFZdyhlKSYmKCF3QXx8XCJBcnJheUJ1ZmZlclwiIT1xRShlKSkmJighRUF8fEVBKGUpKX06RUEsU0E9IVJ3KChmdW5jdGlvbigpe3JldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSkpLHhBPWl3KChmdW5jdGlvbihlKXt2YXIgdD1iRS5mLG49ITEscj1rdyhcIm1ldGFcIiksbz0wLGk9ZnVuY3Rpb24oZSl7dChlLHIse3ZhbHVlOntvYmplY3RJRDpcIk9cIitvKyssd2Vha0RhdGE6e319fSl9LGE9ZS5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXthLmVuYWJsZT1mdW5jdGlvbigpe30sbj0hMDt2YXIgZT1aRC5mLHQ9bXcoW10uc3BsaWNlKSxvPXt9O29bcl09MSxlKG8pLmxlbmd0aCYmKFpELmY9ZnVuY3Rpb24obil7Zm9yKHZhciBvPWUobiksaT0wLGE9by5sZW5ndGg7aTxhO2krKylpZihvW2ldPT09cil7dChvLGksMSk7YnJlYWt9cmV0dXJuIG99LGNTKHt0YXJnZXQ6XCJPYmplY3RcIixzdGF0OiEwLGZvcmNlZDohMH0se2dldE93blByb3BlcnR5TmFtZXM6YkEuZn0pKX0sZmFzdEtleTpmdW5jdGlvbihlLHQpe2lmKCFZdyhlKSlyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZT9lOihcInN0cmluZ1wiPT10eXBlb2YgZT9cIlNcIjpcIlBcIikrZTtpZigheHcoZSxyKSl7aWYoIURBKGUpKXJldHVyblwiRlwiO2lmKCF0KXJldHVyblwiRVwiO2koZSl9cmV0dXJuIGVbcl0ub2JqZWN0SUR9LGdldFdlYWtEYXRhOmZ1bmN0aW9uKGUsdCl7aWYoIXh3KGUscikpe2lmKCFEQShlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTtpKGUpfXJldHVybiBlW3JdLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbihlKXtyZXR1cm4gU0EmJm4mJkRBKGUpJiYheHcoZSxyKSYmaShlKSxlfX07VEVbcl09ITB9KSksQ0E9bHcuVHlwZUVycm9yLEFBPWZ1bmN0aW9uKGUsdCl7dGhpcy5zdG9wcGVkPWUsdGhpcy5yZXN1bHQ9dH0sT0E9QUEucHJvdG90eXBlLGtBPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLGksYSx1LHMsbCxjPW4mJm4udGhhdCxmPSEoIW58fCFuLkFTX0VOVFJJRVMpLGQ9ISghbnx8IW4uSVNfSVRFUkFUT1IpLHA9ISghbnx8IW4uSU5URVJSVVBURUQpLGg9b0QodCxjKSxnPWZ1bmN0aW9uKGUpe3JldHVybiByJiZZUyhyLFwibm9ybWFsXCIsZSksbmV3IEFBKCEwLGUpfSx2PWZ1bmN0aW9uKGUpe3JldHVybiBmPyhuRShlKSxwP2goZVswXSxlWzFdLGcpOmgoZVswXSxlWzFdKSk6cD9oKGUsZyk6aChlKX07aWYoZClyPWU7ZWxzZXtpZighKG89cngoZSkpKXRocm93IENBKGxFKGUpK1wiIGlzIG5vdCBpdGVyYWJsZVwiKTtpZihleChvKSl7Zm9yKGk9MCxhPXBEKGUpO2E+aTtpKyspaWYoKHU9dihlW2ldKSkmJmlFKE9BLHUpKXJldHVybiB1O3JldHVybiBuZXcgQUEoITEpfXI9aXgoZSxvKX1mb3Iocz1yLm5leHQ7IShsPW9FKHMscikpLmRvbmU7KXt0cnl7dT12KGwudmFsdWUpfWNhdGNoKGUpe1lTKHIsXCJ0aHJvd1wiLGUpfWlmKFwib2JqZWN0XCI9PXR5cGVvZiB1JiZ1JiZpRShPQSx1KSlyZXR1cm4gdX1yZXR1cm4gbmV3IEFBKCExKX0sQkE9bHcuVHlwZUVycm9yLEZBPWZ1bmN0aW9uKGUsdCl7aWYoaUUodCxlKSlyZXR1cm4gZTt0aHJvdyBCQShcIkluY29ycmVjdCBpbnZvY2F0aW9uXCIpfSxUQT1mdW5jdGlvbihlLHQsbil7dmFyIHIsbztyZXR1cm4gTHgmJkJ3KHI9dC5jb25zdHJ1Y3RvcikmJnIhPT1uJiZZdyhvPXIucHJvdG90eXBlKSYmbyE9PW4ucHJvdG90eXBlJiZMeChlLG8pLGV9LF9BPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0tMSE9PWUuaW5kZXhPZihcIk1hcFwiKSxvPS0xIT09ZS5pbmRleE9mKFwiV2Vha1wiKSxpPXI/XCJzZXRcIjpcImFkZFwiLGE9bHdbZV0sdT1hJiZhLnByb3RvdHlwZSxzPWEsbD17fSxjPWZ1bmN0aW9uKGUpe3ZhciB0PW13KHVbZV0pO1VFKHUsZSxcImFkZFwiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMsMD09PWU/MDplKSx0aGlzfTpcImRlbGV0ZVwiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiEobyYmIVl3KGUpKSYmdCh0aGlzLDA9PT1lPzA6ZSl9OlwiZ2V0XCI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIG8mJiFZdyhlKT92b2lkIDA6dCh0aGlzLDA9PT1lPzA6ZSl9OlwiaGFzXCI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIShvJiYhWXcoZSkpJiZ0KHRoaXMsMD09PWU/MDplKX06ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdCh0aGlzLDA9PT1lPzA6ZSxuKSx0aGlzfSl9O2lmKHNTKGUsIUJ3KGEpfHwhKG98fHUuZm9yRWFjaCYmIVJ3KChmdW5jdGlvbigpeyhuZXcgYSkuZW50cmllcygpLm5leHQoKX0pKSkpKXM9bi5nZXRDb25zdHJ1Y3Rvcih0LGUscixpKSx4QS5lbmFibGUoKTtlbHNlIGlmKHNTKGUsITApKXt2YXIgZj1uZXcgcyxkPWZbaV0obz97fTotMCwxKSE9ZixwPVJ3KChmdW5jdGlvbigpe2YuaGFzKDEpfSkpLGg9ZngoKGZ1bmN0aW9uKGUpe25ldyBhKGUpfSkpLGc9IW8mJlJ3KChmdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgYSx0PTU7dC0tOyllW2ldKHQsdCk7cmV0dXJuIWUuaGFzKC0wKX0pKTtofHwoKHM9dCgoZnVuY3Rpb24oZSx0KXtGQShlLHUpO3ZhciBuPVRBKG5ldyBhLGUscyk7cmV0dXJuIG51bGwhPXQmJmtBKHQsbltpXSx7dGhhdDpuLEFTX0VOVFJJRVM6cn0pLG59KSkpLnByb3RvdHlwZT11LHUuY29uc3RydWN0b3I9cyksKHB8fGcpJiYoYyhcImRlbGV0ZVwiKSxjKFwiaGFzXCIpLHImJmMoXCJnZXRcIikpLChnfHxkKSYmYyhpKSxvJiZ1LmNsZWFyJiZkZWxldGUgdS5jbGVhcn1yZXR1cm4gbFtlXT1zLGNTKHtnbG9iYWw6ITAsZm9yY2VkOnMhPWF9LGwpLF94KHMsZSksb3x8bi5zZXRTdHJvbmcocyxlLHIpLHN9LFBBPXhBLmdldFdlYWtEYXRhLGpBPU1FLnNldCxOQT1NRS5nZXR0ZXJGb3IsSUE9a0QuZmluZCxMQT1rRC5maW5kSW5kZXgsUkE9bXcoW10uc3BsaWNlKSxNQT0wLHpBPWZ1bmN0aW9uKGUpe3JldHVybiBlLmZyb3plbnx8KGUuZnJvemVuPW5ldyAkQSl9LCRBPWZ1bmN0aW9uKCl7dGhpcy5lbnRyaWVzPVtdfSxIQT1mdW5jdGlvbihlLHQpe3JldHVybiBJQShlLmVudHJpZXMsKGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09dH0pKX07JEEucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9SEEodGhpcyxlKTtpZih0KXJldHVybiB0WzFdfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFIQSh0aGlzLGUpfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1IQSh0aGlzLGUpO24/blsxXT10OnRoaXMuZW50cmllcy5wdXNoKFtlLHRdKX0sZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PUxBKHRoaXMuZW50cmllcywoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1lfSkpO3JldHVybn50JiZSQSh0aGlzLmVudHJpZXMsdCwxKSwhIX50fX07dmFyIFZBLFVBPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz1lKChmdW5jdGlvbihlLG8pe0ZBKGUsaSksakEoZSx7dHlwZTp0LGlkOk1BKyssZnJvemVuOnZvaWQgMH0pLG51bGwhPW8mJmtBKG8sZVtyXSx7dGhhdDplLEFTX0VOVFJJRVM6bn0pfSkpLGk9by5wcm90b3R5cGUsYT1OQSh0KSx1PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1hKGUpLG89UEEobkUodCksITApO3JldHVybiEwPT09bz96QShyKS5zZXQodCxuKTpvW3IuaWRdPW4sZX07cmV0dXJuIHBBKGkse2RlbGV0ZTpmdW5jdGlvbihlKXt2YXIgdD1hKHRoaXMpO2lmKCFZdyhlKSlyZXR1cm4hMTt2YXIgbj1QQShlKTtyZXR1cm4hMD09PW4/ekEodCkuZGVsZXRlKGUpOm4mJnh3KG4sdC5pZCkmJmRlbGV0ZSBuW3QuaWRdfSxoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9YSh0aGlzKTtpZighWXcoZSkpcmV0dXJuITE7dmFyIG49UEEoZSk7cmV0dXJuITA9PT1uP3pBKHQpLmhhcyhlKTpuJiZ4dyhuLHQuaWQpfX0pLHBBKGksbj97Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWEodGhpcyk7aWYoWXcoZSkpe3ZhciBuPVBBKGUpO3JldHVybiEwPT09bj96QSh0KS5nZXQoZSk6bj9uW3QuaWRdOnZvaWQgMH19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiB1KHRoaXMsZSx0KX19OnthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHUodGhpcyxlLCEwKX19KSxvfX0sV0E9TUUuZW5mb3JjZSxHQT0hbHcuQWN0aXZlWE9iamVjdCYmXCJBY3RpdmVYT2JqZWN0XCJpbiBsdyxxQT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSxLQT1fQShcIldlYWtNYXBcIixxQSxVQSk7aWYoa0UmJkdBKXtWQT1VQS5nZXRDb25zdHJ1Y3RvcihxQSxcIldlYWtNYXBcIiwhMCkseEEuZW5hYmxlKCk7dmFyIFlBPUtBLnByb3RvdHlwZSxYQT1tdyhZQS5kZWxldGUpLFpBPW13KFlBLmhhcyksSkE9bXcoWUEuZ2V0KSxRQT1tdyhZQS5zZXQpO3BBKFlBLHtkZWxldGU6ZnVuY3Rpb24oZSl7aWYoWXcoZSkmJiFEQShlKSl7dmFyIHQ9V0EodGhpcyk7cmV0dXJuIHQuZnJvemVufHwodC5mcm96ZW49bmV3IFZBKSxYQSh0aGlzLGUpfHx0LmZyb3plbi5kZWxldGUoZSl9cmV0dXJuIFhBKHRoaXMsZSl9LGhhczpmdW5jdGlvbihlKXtpZihZdyhlKSYmIURBKGUpKXt2YXIgdD1XQSh0aGlzKTtyZXR1cm4gdC5mcm96ZW58fCh0LmZyb3plbj1uZXcgVkEpLFpBKHRoaXMsZSl8fHQuZnJvemVuLmhhcyhlKX1yZXR1cm4gWkEodGhpcyxlKX0sZ2V0OmZ1bmN0aW9uKGUpe2lmKFl3KGUpJiYhREEoZSkpe3ZhciB0PVdBKHRoaXMpO3JldHVybiB0LmZyb3plbnx8KHQuZnJvemVuPW5ldyBWQSksWkEodGhpcyxlKT9KQSh0aGlzLGUpOnQuZnJvemVuLmdldChlKX1yZXR1cm4gSkEodGhpcyxlKX0sc2V0OmZ1bmN0aW9uKGUsdCl7aWYoWXcoZSkmJiFEQShlKSl7dmFyIG49V0EodGhpcyk7bi5mcm96ZW58fChuLmZyb3plbj1uZXcgVkEpLFpBKHRoaXMsZSk/UUEodGhpcyxlLHQpOm4uZnJvemVuLnNldChlLHQpfWVsc2UgUUEodGhpcyxlLHQpO3JldHVybiB0aGlzfX0pfXZhciBlTz1XdyhcIml0ZXJhdG9yXCIpLHRPPVd3KFwidG9TdHJpbmdUYWdcIiksbk89ZEEudmFsdWVzLHJPPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoZVtlT10hPT1uTyl0cnl7RUUoZSxlTyxuTyl9Y2F0Y2godCl7ZVtlT109bk99aWYoZVt0T118fEVFKGUsdE8sdCksUUVbdF0pZm9yKHZhciBuIGluIGRBKWlmKGVbbl0hPT1kQVtuXSl0cnl7RUUoZSxuLGRBW25dKX1jYXRjaCh0KXtlW25dPWRBW25dfX19O2Zvcih2YXIgb08gaW4gUUUpck8obHdbb09dJiZsd1tvT10ucHJvdG90eXBlLG9PKTtyTyhuRCxcIkRPTVRva2VuTGlzdFwiKTt2YXIgaU89bmV3IFdlYWtNYXAsYU89bmV3IFdlYWtNYXAsdU89bmV3IFdlYWtNYXAsc089bmV3IFdlYWtNYXAsbE89bmV3IFdlYWtNYXAsY089bmV3IFdlYWtNYXAsZk89bmV3IFdlYWtNYXAsZE89bmV3IFdlYWtNYXAscE89bmV3IFdlYWtNYXAsaE89bmV3IFdlYWtNYXAsZ089bmV3IFdlYWtNYXAsdk89bmV3IFdlYWtNYXAseU89bmV3IFdlYWtNYXAsbU89bmV3IFdlYWtNYXAsYk89bmV3IFdlYWtNYXAsd089bmV3IFdlYWtNYXAsRU89bmV3IFdlYWtNYXAsRE89bmV3IFdlYWtNYXAsU089bmV3IFdlYWtNYXAseE89bmV3IFdlYWtNYXAsQ089bmV3IFdlYWtNYXAsQU89bmV3IFdlYWtNYXAsT089bmV3IFdlYWtNYXAsa089bmV3IFdlYWtNYXAsQk89bmV3IFdlYWtNYXAsRk89a0QuZmluZCxUTz0hMDtcImZpbmRcImluW10mJkFycmF5KDEpLmZpbmQoKGZ1bmN0aW9uKCl7VE89ITF9KSksY1Moe3RhcmdldDpcIkFycmF5XCIscHJvdG86ITAsZm9yY2VkOlRPfSx7ZmluZDpmdW5jdGlvbihlKXtyZXR1cm4gRk8odGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxSUyhcImZpbmRcIiksY1Moe2dsb2JhbDohMH0se2dsb2JhbFRoaXM6bHd9KTtjb25zdCBfTz1bXCJhcmVhXCIsXCJiYXNlXCIsXCJiYXNlZm9udFwiLFwiYmdzb3VuZFwiLFwiYnJcIixcImNvbFwiLFwiY29tbWFuZFwiLFwiZW1iZWRcIixcImZyYW1lXCIsXCJoclwiLFwiaW1hZ2VcIixcImltZ1wiLFwiaW5wdXRcIixcImlzaW5kZXhcIixcImtleWdlblwiLFwibGlua1wiLFwibWVudWl0ZW1cIixcIm1ldGFcIixcIm5leHRpZFwiLFwicGFyYW1cIixcInNvdXJjZVwiLFwidHJhY2tcIixcIndiclwiXTtlaCYmKE1wLmZuLmNzcz1laCksYWgmJihNcC5mbi5hcHBlbmQ9YWgpLHpwJiYoTXAuZm4uYWRkQ2xhc3M9enApLCRwJiYoTXAuZm4ucmVtb3ZlQ2xhc3M9JHApLEhwJiYoTXAuZm4uaGFzQ2xhc3M9SHApLHFwJiYoTXAuZm4ub249cXApLHloJiYoTXAuZm4uZm9jdXM9eWgpLFZwJiYoTXAuZm4uYXR0cj1WcCksVXAmJihNcC5mbi5yZW1vdmVBdHRyPVVwKSxKcCYmKE1wLmZuLmhpZGU9SnApLFFwJiYoTXAuZm4uc2hvdz1RcCksWnAmJihNcC5mbi5vZmZzZXQ9WnApLFlwJiYoTXAuZm4ud2lkdGg9WXApLFhwJiYoTXAuZm4uaGVpZ2h0PVhwKSxzaCYmKE1wLmZuLnBhcmVudD1zaCksbGgmJihNcC5mbi5wYXJlbnRzPWxoKSxpaCYmKE1wLmZuLmlzPWloKSxXcCYmKE1wLmZuLmRhdGFzZXQ9V3ApLEdwJiYoTXAuZm4udmFsPUdwKSxvaCYmKE1wLmZuLnRleHQ9b2gpLHJoJiYoTXAuZm4uaHRtbD1yaCksZmgmJihNcC5mbi5jaGlsZHJlbj1maCksZGgmJihNcC5mbi5yZW1vdmU9ZGgpLGNoJiYoTXAuZm4uZmluZD1jaCksdGgmJihNcC5mbi5lYWNoPXRoKSxwaCYmKE1wLmZuLmVtcHR5PXBoKTt2YXIgUE8sak8sTk89ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxudWxsfSxJTz1mdW5jdGlvbihlKXtyZXR1cm4gTE8oZSkmJjE9PT1lLm5vZGVUeXBlfSxMTz1mdW5jdGlvbihlKXt2YXIgdD1OTyhlKTtyZXR1cm4hIXQmJmUgaW5zdGFuY2VvZiB0Lk5vZGV9LFJPPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuYW5jaG9yTm9kZSYmTk8oZS5hbmNob3JOb2RlKTtyZXR1cm4hIXQmJmUgaW5zdGFuY2VvZiB0LlNlbGVjdGlvbn0sTU89ZnVuY3Rpb24oZSl7cmV0dXJuIExPKGUpJiYzPT09ZS5ub2RlVHlwZX0sek89ZnVuY3Rpb24oZSl7dmFyIHQsbixyO3JldHVybiBudWxsIT09KHQ9d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpKSYmdm9pZCAwIT09dD90OihudWxsPT09KHI9bnVsbD09PShuPXdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8dm9pZCAwPT09bj92b2lkIDA6bi5zaGFkb3dSb290KXx8dm9pZCAwPT09cj92b2lkIDA6ci5nZXRFbGVtZW50QnlJZChlKSl8fG51bGx9LCRPPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIsbz1lLmNoaWxkTm9kZXMsaT1vW3RdLGE9dCx1PSExLHM9ITE7KExPKHI9aSkmJjg9PT1yLm5vZGVUeXBlfHxJTyhpKSYmMD09PWkuY2hpbGROb2Rlcy5sZW5ndGh8fElPKGkpJiZcImZhbHNlXCI9PT1pLmdldEF0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSkmJighdXx8IXMpOylhPj1vLmxlbmd0aD8odT0hMCxhPXQtMSxuPVwiYmFja3dhcmRcIik6YTwwPyhzPSEwLGE9dCsxLG49XCJmb3J3YXJkXCIpOihpPW9bYV0sdD1hLGErPVwiZm9yd2FyZFwiPT09bj8xOi0xKTtyZXR1cm5baSx0XX0sSE89ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBhQSgkTyhlLHQsbiksMSlbMF19LFZPPWZ1bmN0aW9uIGUodCl7dmFyIG4scixvPVwiXCI7aWYoTU8odCkmJnQubm9kZVZhbHVlKXJldHVybiB0Lm5vZGVWYWx1ZTtpZihJTyh0KSl7dHJ5e2Zvcih2YXIgaT1pQShBcnJheS5mcm9tKHQuY2hpbGROb2RlcykpLGE9aS5uZXh0KCk7IWEuZG9uZTthPWkubmV4dCgpKW8rPWUoYS52YWx1ZSl9Y2F0Y2goZSl7bj17ZXJyb3I6ZX19ZmluYWxseXt0cnl7YSYmIWEuZG9uZSYmKHI9aS5yZXR1cm4pJiZyLmNhbGwoaSl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXZhciB1PWdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlcIik7XCJibG9ja1wiIT09dSYmXCJsaXN0XCIhPT11JiZcInRhYmxlLXJvd1wiIT09dSYmXCJCUlwiIT09dC50YWdOYW1lfHwobys9XCJcXG5cIil9cmV0dXJuIG99O2Z1bmN0aW9uIFVPKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJlwidHJ1ZVwiPT09ZS5kYXRhc2V0LnNsYXRlVm9pZCkpZm9yKHZhciBuPWUuY2hpbGROb2RlcyxyPW4ubGVuZ3RoO3ItLTspe3ZhciBvPW5bcl0saT1vLm5vZGVUeXBlOzM9PWk/dChvLGUpOjEhPWkmJjkhPWkmJjExIT1pfHxVTyhvLHQpfX1mdW5jdGlvbiBXTyhlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuXCJcIjt2YXIgdD1lWzBdO3JldHVybiB0Lm5vZGVUeXBlIT09UE8uRUxFTUVOVF9OT0RFP1wiXCI6dC50YWdOYW1lLnRvTG93ZXJDYXNlKCl9KGpPPVBPfHwoUE89e30pKVtqTy5FTEVNRU5UX05PREU9MV09XCJFTEVNRU5UX05PREVcIixqT1tqTy5URVhUX05PREU9M109XCJURVhUX05PREVcIixqT1tqTy5DREFUQV9TRUNUSU9OX05PREU9NF09XCJDREFUQV9TRUNUSU9OX05PREVcIixqT1tqTy5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU9N109XCJQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREVcIixqT1tqTy5DT01NRU5UX05PREU9OF09XCJDT01NRU5UX05PREVcIixqT1tqTy5ET0NVTUVOVF9OT0RFPTldPVwiRE9DVU1FTlRfTk9ERVwiLGpPW2pPLkRPQ1VNRU5UX1RZUEVfTk9ERT0xMF09XCJET0NVTUVOVF9UWVBFX05PREVcIixqT1tqTy5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFPTExXT1cIkRPQ1VNRU5UX0ZSQUdNRU5UX05PREVcIix2b2lkIDAhPT1nbG9iYWxUaGlzLm5hdmlnYXRvciYmdm9pZCAwIT09Z2xvYmFsVGhpcy53aW5kb3cmJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZnbG9iYWxUaGlzLndpbmRvdy5NU1N0cmVhbTt2YXIgR089XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL01hYyBPUyBYLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHFPPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9eKD8hLipTZWFtb25rZXkpKD89LipGaXJlZm94KS4qL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiYvXig/IS4qU2VhbW9ua2V5KSg/PS4qRmlyZWZveFxcLyg/OlswLTddWzAtOV18WzAtOF1bMC02XSkoPzpcXC4pKS4qL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTt2YXIgS089XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL1ZlcnNpb25cXC9bXFxkXFwuXSsuKlNhZmFyaS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxZTz1cInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiYvRWRnZT9cXC8oPzpbMC02XVswLTldfFswLTddWzAtOF0pKD86XFwuKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksWE89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL0Nocm9tZT9cXC8oPzpbMC03XVswLTVdfFswLTZdWzAtOV0pKD86XFwuKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksWk89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL0Nocm9tZS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmLy4qUVFCcm93c2VyLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO3ZhciBKTz0hWE8mJiFZTyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMuSW5wdXRFdmVudCYmXCJmdW5jdGlvblwiPT10eXBlb2YgZ2xvYmFsVGhpcy5JbnB1dEV2ZW50LnByb3RvdHlwZS5nZXRUYXJnZXRSYW5nZXMsUU89e2dldFdpbmRvdzpmdW5jdGlvbihlKXt2YXIgdD1DTy5nZXQoZSk7aWYoIXQpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgYSBob3N0IHdpbmRvdyBlbGVtZW50IGZvciB0aGlzIGVkaXRvclwiKTtyZXR1cm4gdH0sZmluZEtleTpmdW5jdGlvbihlLHQpe3ZhciBuPXhPLmdldCh0KTtyZXR1cm4gbnx8KG49bmV3IGxBLHhPLnNldCh0LG4pKSxufSxzZXROZXdLZXk6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGxBO3hPLnNldChlLHQpfSxmaW5kUGF0aDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxyPXQ7Oyl7dmFyIG89Yk8uZ2V0KHIpO2lmKG51bGw9PW8pe2lmKEJmLmlzRWRpdG9yKHIpKXJldHVybiBuO2JyZWFrfXZhciBpPW1PLmdldChyKTtpZihudWxsPT1pKWJyZWFrO24udW5zaGlmdChpKSxyPW99dGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgdGhlIHBhdGggZm9yIFNsYXRlIG5vZGU6IFwiK0pTT04uc3RyaW5naWZ5KHQpKX0sZmluZERvY3VtZW50T3JTaGFkb3dSb290OmZ1bmN0aW9uKGUpe2lmKGUuaXNEZXN0cm95ZWQpcmV0dXJuIHdpbmRvdy5kb2N1bWVudDt2YXIgdD1RTy50b0RPTU5vZGUoZSxlKSxuPXQuZ2V0Um9vdE5vZGUoKTtyZXR1cm4obiBpbnN0YW5jZW9mIERvY3VtZW50fHxuIGluc3RhbmNlb2YgU2hhZG93Um9vdCkmJm51bGwhPW4uZ2V0U2VsZWN0aW9uP246dC5vd25lckRvY3VtZW50fSxnZXRQYXJlbnROb2RlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGJPLmdldCh0KXx8bnVsbH0sZ2V0UGFyZW50c05vZGVzOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLHI9dDtyIT09ZSYmbnVsbCE9cjspe3ZhciBvPVFPLmdldFBhcmVudE5vZGUoZSxyKTtpZihudWxsPT1vKWJyZWFrO24ucHVzaChvKSxyPW99cmV0dXJuIG59LGdldFRvcE5vZGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1bUU8uZmluZFBhdGgoZSx0KVswXV07cmV0dXJuIE5mLmdldChlLG4pfSx0b0RPTU5vZGU6ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZihCZi5pc0VkaXRvcih0KSluPXdPLmdldChlKTtlbHNle3ZhciByPVFPLmZpbmRLZXkoZSx0KTtuPURPLmdldChyKX1pZighbil0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVzb2x2ZSBhIERPTSBub2RlIGZyb20gU2xhdGUgbm9kZTogXCIrSlNPTi5zdHJpbmdpZnkodCkpO3JldHVybiBufSxoYXNET01Ob2RlOmZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT1uJiYobj17fSk7dmFyIHIsbz1uLmVkaXRhYmxlLGk9dm9pZCAwIT09byYmbyxhPVFPLnRvRE9NTm9kZShlLGUpO3RyeXtyPUlPKHQpP3Q6dC5wYXJlbnRFbGVtZW50fWNhdGNoKGUpe2lmKCFlLm1lc3NhZ2UuaW5jbHVkZXMoJ1Blcm1pc3Npb24gZGVuaWVkIHRvIGFjY2VzcyBwcm9wZXJ0eSBcIm5vZGVUeXBlXCInKSl0aHJvdyBlfXJldHVybiEhciYmci5jbG9zZXN0KFwiW2RhdGEtc2xhdGUtZWRpdG9yXVwiKT09PWEmJighaXx8ci5pc0NvbnRlbnRFZGl0YWJsZXx8ISFyLmdldEF0dHJpYnV0ZShcImRhdGEtc2xhdGUtemVyby13aWR0aFwiKSl9LHRvRE9NUmFuZ2U6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmFuY2hvcixyPXQuZm9jdXMsbz1xZi5pc0JhY2t3YXJkKHQpLGk9UU8udG9ET01Qb2ludChlLG4pLGE9cWYuaXNDb2xsYXBzZWQodCk/aTpRTy50b0RPTVBvaW50KGUsciksdT1RTy5nZXRXaW5kb3coZSkuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxzPWFBKG8/YTppLDIpLGw9c1swXSxjPXNbMV0sZj1hQShvP2k6YSwyKSxkPWZbMF0scD1mWzFdLGg9ISEoSU8obCk/bDpsLnBhcmVudEVsZW1lbnQpLmdldEF0dHJpYnV0ZShcImRhdGEtc2xhdGUtemVyby13aWR0aFwiKSxnPSEhKElPKGQpP2Q6ZC5wYXJlbnRFbGVtZW50KS5nZXRBdHRyaWJ1dGUoXCJkYXRhLXNsYXRlLXplcm8td2lkdGhcIik7cmV0dXJuIHUuc2V0U3RhcnQobCxoPzE6YyksdS5zZXRFbmQoZCxnPzE6cCksdX0sdG9ET01Qb2ludDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxpPWFBKEJmLm5vZGUoZSx0LnBhdGgpLDEpWzBdLGE9UU8udG9ET01Ob2RlKGUsaSk7QmYudm9pZChlLHthdDp0fSkmJih0PXtwYXRoOnQucGF0aCxvZmZzZXQ6MH0pO3ZhciB1PUFycmF5LmZyb20oYS5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtc2xhdGUtc3RyaW5nXSwgW2RhdGEtc2xhdGUtemVyby13aWR0aF1cIikpLHM9MDt0cnl7Zm9yKHZhciBsPWlBKHUpLGM9bC5uZXh0KCk7IWMuZG9uZTtjPWwubmV4dCgpKXt2YXIgZj1jLnZhbHVlLGQ9Zi5jaGlsZE5vZGVzWzBdO2lmKG51bGwhPWQmJm51bGwhPWQudGV4dENvbnRlbnQpe3ZhciBwPWQudGV4dENvbnRlbnQubGVuZ3RoLGg9Zi5nZXRBdHRyaWJ1dGUoXCJkYXRhLXNsYXRlLWxlbmd0aFwiKSxnPXMrKG51bGw9PWg/cDpwYXJzZUludChoLDEwKSk7aWYodC5vZmZzZXQ8PWcpe289W2QsTWF0aC5taW4ocCxNYXRoLm1heCgwLHQub2Zmc2V0LXMpKV07YnJlYWt9cz1nfX19Y2F0Y2goZSl7bj17ZXJyb3I6ZX19ZmluYWxseXt0cnl7YyYmIWMuZG9uZSYmKHI9bC5yZXR1cm4pJiZyLmNhbGwobCl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fWlmKCFvKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCByZXNvbHZlIGEgRE9NIHBvaW50IGZyb20gU2xhdGUgcG9pbnQ6IFwiK0pTT04uc3RyaW5naWZ5KHQpKTtyZXR1cm4gb30sdG9TbGF0ZU5vZGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1JTyh0KT90OnQucGFyZW50RWxlbWVudDtuJiYhbi5oYXNBdHRyaWJ1dGUoXCJkYXRhLXNsYXRlLW5vZGVcIikmJihuPW4uY2xvc2VzdChcIltkYXRhLXNsYXRlLW5vZGVdXCIpKTt2YXIgcj1uP0VPLmdldChuKTpudWxsO2lmKCFyKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCByZXNvbHZlIGEgU2xhdGUgbm9kZSBmcm9tIERPTSBub2RlOiBcIituKTtyZXR1cm4gcn0sZmluZEV2ZW50UmFuZ2U6ZnVuY3Rpb24oZSx0KXtcIm5hdGl2ZUV2ZW50XCJpbiB0JiYodD10Lm5hdGl2ZUV2ZW50KTt2YXIgbj10LmNsaWVudFgscj10LmNsaWVudFksbz10LnRhcmdldDtpZihudWxsPT1ufHxudWxsPT1yKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCByZXNvbHZlIGEgU2xhdGUgcmFuZ2UgZnJvbSBhIERPTSBldmVudDogXCIrdCk7dmFyIGksYT1RTy50b1NsYXRlTm9kZShlLHQudGFyZ2V0KSx1PVFPLmZpbmRQYXRoKGUsYSk7aWYoQmYuaXNWb2lkKGUsYSkpe3ZhciBzPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbD1lLmlzSW5saW5lKGEpP24tcy5sZWZ0PHMubGVmdCtzLndpZHRoLW46ci1zLnRvcDxzLnRvcCtzLmhlaWdodC1yLGM9QmYucG9pbnQoZSx1LHtlZGdlOmw/XCJzdGFydFwiOlwiZW5kXCJ9KSxmPWw/QmYuYmVmb3JlKGUsYyk6QmYuYWZ0ZXIoZSxjKTtpZihmKXJldHVybiBCZi5yYW5nZShlLGYpfXZhciBkPXRoaXMuZ2V0V2luZG93KGUpLmRvY3VtZW50O2lmKGQuY2FyZXRSYW5nZUZyb21Qb2ludClpPWQuY2FyZXRSYW5nZUZyb21Qb2ludChuLHIpO2Vsc2V7dmFyIHA9ZC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KG4scik7cCYmKChpPWQuY3JlYXRlUmFuZ2UoKSkuc2V0U3RhcnQocC5vZmZzZXROb2RlLHAub2Zmc2V0KSxpLnNldEVuZChwLm9mZnNldE5vZGUscC5vZmZzZXQpKX1pZighaSl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVzb2x2ZSBhIFNsYXRlIHJhbmdlIGZyb20gYSBET00gZXZlbnQ6IFwiK3QpO3JldHVybiBRTy50b1NsYXRlUmFuZ2UoZSxpLHtleGFjdE1hdGNoOiExLHN1cHByZXNzVGhyb3c6ITF9KX0sdG9TbGF0ZVJhbmdlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLGksYSx1LHM9bi5leGFjdE1hdGNoLGw9bi5zdXBwcmVzc1Rocm93O2lmKChSTyh0KT90LmFuY2hvck5vZGU6dC5zdGFydENvbnRhaW5lcikmJihSTyh0KT8ocj10LmFuY2hvck5vZGUsbz10LmFuY2hvck9mZnNldCxpPXQuZm9jdXNOb2RlLGE9dC5mb2N1c09mZnNldCx1PVpPJiZ3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCYmd2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdD90LmFuY2hvck5vZGU9PT10LmZvY3VzTm9kZSYmdC5hbmNob3JPZmZzZXQ9PT10LmZvY3VzT2Zmc2V0OnQuaXNDb2xsYXBzZWQpOihyPXQuc3RhcnRDb250YWluZXIsbz10LnN0YXJ0T2Zmc2V0LGk9dC5lbmRDb250YWluZXIsYT10LmVuZE9mZnNldCx1PXQuY29sbGFwc2VkKSksbnVsbD09cnx8bnVsbD09aXx8bnVsbD09b3x8bnVsbD09YSl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVzb2x2ZSBhIFNsYXRlIHJhbmdlIGZyb20gRE9NIHJhbmdlOiBcIit0KTt2YXIgYz1RTy50b1NsYXRlUG9pbnQoZSxbcixvXSx7ZXhhY3RNYXRjaDpzLHN1cHByZXNzVGhyb3c6bH0pO2lmKCFjKXJldHVybiBudWxsO3ZhciBmPXU/YzpRTy50b1NsYXRlUG9pbnQoZSxbaSxhXSx7ZXhhY3RNYXRjaDpzLHN1cHByZXNzVGhyb3c6bH0pO2lmKCFmKXJldHVybiBudWxsO3ZhciBkPXthbmNob3I6Yyxmb2N1czpmfTtyZXR1cm4gcWYuaXNFeHBhbmRlZChkKSYmcWYuaXNGb3J3YXJkKGQpJiZJTyhpKSYmQmYudm9pZChlLHthdDpkLmZvY3VzLG1vZGU6XCJoaWdoZXN0XCJ9KSYmKGQ9QmYudW5oYW5nUmFuZ2UoZSxkLHt2b2lkczohMH0pKSxkfSx0b1NsYXRlUG9pbnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG89bi5leGFjdE1hdGNoLGk9bi5zdXBwcmVzc1Rocm93LGE9YUEobz90OmZ1bmN0aW9uKGUpe3ZhciB0LG49YUEoZSwyKSxyPW5bMF0sbz1uWzFdO2lmKElPKHIpJiZyLmNoaWxkTm9kZXMubGVuZ3RoKXt2YXIgaT1vPT09ci5jaGlsZE5vZGVzLmxlbmd0aCxhPWk/by0xOm87Zm9yKHI9KHQ9YUEoJE8ocixhLGk/XCJiYWNrd2FyZFwiOlwiZm9yd2FyZFwiKSwyKSlbMF0saT0oYT10WzFdKTxvO0lPKHIpJiZyLmNoaWxkTm9kZXMubGVuZ3RoOyl7dmFyIHU9aT9yLmNoaWxkTm9kZXMubGVuZ3RoLTE6MDtyPUhPKHIsdSxpP1wiYmFja3dhcmRcIjpcImZvcndhcmRcIil9bz1pJiZudWxsIT1yLnRleHRDb250ZW50P3IudGV4dENvbnRlbnQubGVuZ3RoOjB9cmV0dXJuW3Isb119KHQpLDIpLHU9YVswXSxzPWFbMV0sbD11LnBhcmVudE5vZGUsYz1udWxsLGY9MDtpZihsKXt2YXIgZD1sLmNsb3Nlc3QoJ1tkYXRhLXNsYXRlLXZvaWQ9XCJ0cnVlXCJdJykscD1sLmNsb3Nlc3QoXCJbZGF0YS1zbGF0ZS1sZWFmXVwiKSxoPW51bGw7aWYocCl7Yz1wLmNsb3Nlc3QoJ1tkYXRhLXNsYXRlLW5vZGU9XCJ0ZXh0XCJdJyk7dmFyIGc9UU8uZ2V0V2luZG93KGUpLmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Zy5zZXRTdGFydChjLDApLGcuc2V0RW5kKHUscyk7dmFyIHY9Zy5jbG9uZUNvbnRlbnRzKCk7dUEodUEoW10sYUEoeHAodi5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtc2xhdGUtemVyby13aWR0aF1cIikpKSksYUEoeHAodi5xdWVyeVNlbGVjdG9yQWxsKFwiW2NvbnRlbnRlZGl0YWJsZT1mYWxzZV1cIikpKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfSkpLGY9di50ZXh0Q29udGVudC5sZW5ndGgsaD1jfWVsc2UgZCYmKChwPWQucXVlcnlTZWxlY3RvcihcIltkYXRhLXNsYXRlLWxlYWZdXCIpKT8oYz1wLmNsb3Nlc3QoJ1tkYXRhLXNsYXRlLW5vZGU9XCJ0ZXh0XCJdJyksZj0oaD1wKS50ZXh0Q29udGVudC5sZW5ndGgsaC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtc2xhdGUtemVyby13aWR0aF1cIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Zi09ZS50ZXh0Q29udGVudC5sZW5ndGh9KSkpOmY9MSk7aCYmZj09PWgudGV4dENvbnRlbnQubGVuZ3RoJiYobC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXNsYXRlLXplcm8td2lkdGhcIil8fHFPJiYobnVsbD09PShyPWgudGV4dENvbnRlbnQpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmVuZHNXaXRoKFwiXFxuXCIpKSkmJmYtLX1pZighYyl7aWYoaSlyZXR1cm4gbnVsbDt0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVzb2x2ZSBhIFNsYXRlIHBvaW50IGZyb20gRE9NIHBvaW50OiBcIit0KX12YXIgeT1RTy50b1NsYXRlTm9kZShlLGMpO3JldHVybntwYXRoOlFPLmZpbmRQYXRoKGUseSksb2Zmc2V0OmZ9fSxoYXNSYW5nZTpmdW5jdGlvbihlLHQpe3ZhciBuPXQuYW5jaG9yLHI9dC5mb2N1cztyZXR1cm4gQmYuaGFzUGF0aChlLG4ucGF0aCkmJkJmLmhhc1BhdGgoZSxyLnBhdGgpfSxnZXROb2RlVHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gU2YuaXNFbGVtZW50KGUpP2UudHlwZTpcIlwifSxjaGVja05vZGVUeXBlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZ2V0Tm9kZVR5cGUoZSk9PT10fSxnZXROb2Rlc1N0cjpmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBOZi5zdHJpbmcoZSl9KSkuam9pbihcIlwiKX0sZ2V0U2VsZWN0ZWRFbGVtczpmdW5jdGlvbihlKXt2YXIgdCxuLHI9W10sbz1CZi5ub2RlcyhlLHt1bml2ZXJzYWw6ITB9KTt0cnl7Zm9yKHZhciBpPWlBKG8pLGE9aS5uZXh0KCk7IWEuZG9uZTthPWkubmV4dCgpKXt2YXIgdT1hQShhLnZhbHVlLDEpWzBdO1NmLmlzRWxlbWVudCh1KSYmci5wdXNoKHUpfX1jYXRjaChlKXt0PXtlcnJvcjplfX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYobj1pLnJldHVybikmJm4uY2FsbChpKX1maW5hbGx5e2lmKHQpdGhyb3cgdC5lcnJvcn19cmV0dXJuIHJ9LGdldFNlbGVjdGVkTm9kZUJ5VHlwZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1hQShCZi5ub2RlcyhlLHttYXRjaDpmdW5jdGlvbihlKXtyZXR1cm4gbi5jaGVja05vZGVUeXBlKGUsdCl9LHVuaXZlcnNhbDohMH0pLDEpLG89clswXTtyZXR1cm4gbnVsbD09bz9udWxsOm9bMF19LGdldFNlbGVjdGVkVGV4dE5vZGU6ZnVuY3Rpb24oZSl7dmFyIHQ9YUEoQmYubm9kZXMoZSx7bWF0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIGVkLmlzVGV4dChlKX0sdW5pdmVyc2FsOiEwfSksMSksbj10WzBdO3JldHVybiBudWxsPT1uP251bGw6blswXX0saXNOb2RlU2VsZWN0ZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1hQShCZi5ub2RlcyhlLHttYXRjaDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXR9LHVuaXZlcnNhbDohMH0pLDEpLHI9blswXTtyZXR1cm4gbnVsbCE9ciYmYUEociwxKVswXT09PXR9LGlzU2VsZWN0aW9uQXRMaW5lRW5kOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5zZWxlY3Rpb247cmV0dXJuISFuJiYoQmYuaXNFbmQoZSxuLmFuY2hvcix0KXx8QmYuaXNFbmQoZSxuLmZvY3VzLHQpKX0sZ2V0VGV4dGFyZWE6ZnVuY3Rpb24oZSl7dmFyIHQ9aU8uZ2V0KGUpO2lmKG51bGw9PXQpdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgdGV4dGFyZWEgaW5zdGFuY2UgYnkgZWRpdG9yXCIpO3JldHVybiB0fSxnZXRUb29sYmFyOmZ1bmN0aW9uKGUpe3JldHVybiBzTy5nZXQoZSl8fG51bGx9LGdldEhvdmVyYmFyOmZ1bmN0aW9uKGUpe3JldHVybiBjTy5nZXQoZSl8fG51bGx9LG5vcm1hbGl6ZUNvbnRlbnQ6ZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbih0LG4pe2Uubm9ybWFsaXplTm9kZShbdCxbbl1dKX0pKX0sZ2V0TGVmdExlbmd0aE9mTWF4TGVuZ3RoOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0Q29uZmlnKCksbj10Lm1heExlbmd0aCxyPXQub25NYXhMZW5ndGg7aWYoXCJudW1iZXJcIiE9dHlwZW9mIG58fG48PTApcmV0dXJuIDEvMDt2YXIgbz1uLWUuZ2V0VGV4dCgpLnJlcGxhY2UoL1xccnxcXG58KFxcclxcbikvZyxcIlwiKS5sZW5ndGg7cmV0dXJuIG88PTAmJnImJnIoZSksb30sY2xlYW5FeHBvc2VkVGV4Tm9kZUluU2VsZWN0aW9uQmxvY2s6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8saT1RTy5nZXRUZXh0YXJlYShlKS4kdGV4dEFyZWEsYT1udWxsPT1pP3ZvaWQgMDppWzBdLmNoaWxkTm9kZXM7aWYoYSl0cnl7Zm9yKHZhciB1PWlBKEFycmF5LmZyb20oYSkpLHM9dS5uZXh0KCk7IXMuZG9uZTtzPXUubmV4dCgpKXt2YXIgbD1zLnZhbHVlO2lmKDMhPT1sLm5vZGVUeXBlKWJyZWFrO2wucmVtb3ZlKCl9fWNhdGNoKGUpe3Q9e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihuPXUucmV0dXJuKSYmbi5jYWxsKHUpfWZpbmFsbHl7aWYodCl0aHJvdyB0LmVycm9yfX12YXIgYz1CZi5ub2RlcyhlLHttYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4hKCFTZi5pc0VsZW1lbnQodCl8fGUuaXNJbmxpbmUodCkpfSx1bml2ZXJzYWw6ITB9KTt0cnl7Zm9yKHZhciBmPWlBKGMpLGQ9Zi5uZXh0KCk7IWQuZG9uZTtkPWYubmV4dCgpKXt2YXIgcD1kLnZhbHVlO2lmKG51bGwhPXApe3ZhciBoPXBbMF07VU8oUU8udG9ET01Ob2RlKGUsaCksKGZ1bmN0aW9uKGUsdCl7dmFyIG49TXAodCk7bi5hdHRyKFwiZGF0YS1zbGF0ZS1zdHJpbmdcIil8fG4uYXR0cihcImRhdGEtc2xhdGUtemVyby13aWR0aFwiKXx8bi5hdHRyKFwiZGF0YS13LWUtcmVzZXJ2ZVwiKXx8dC5yZW1vdmVDaGlsZChlKX0pKX19fWNhdGNoKGUpe3I9e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e2QmJiFkLmRvbmUmJihvPWYucmV0dXJuKSYmby5jYWxsKGYpfWZpbmFsbHl7aWYocil0aHJvdyByLmVycm9yfX19LGlzTGFzdE5vZGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmNoaWxkcmVufHxbXTtyZXR1cm4gbltuLmxlbmd0aC0xXT09PXR9LGdlbkVtcHR5UGFyYWdyYXBoOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJwYXJhZ3JhcGhcIixjaGlsZHJlbjpbe3RleHQ6XCJcIn1dfX0saXNTZWxlY3RlZFZvaWROb2RlOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1CZi5ub2RlcyhlLHttYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gZS5pc1ZvaWQodCl9fSksbz0wO3RyeXtmb3IodmFyIGk9aUEociksYT1pLm5leHQoKTshYS5kb25lO2E9aS5uZXh0KCkpYS52YWx1ZSxvKyt9Y2F0Y2goZSl7dD17ZXJyb3I6ZX19ZmluYWxseXt0cnl7YSYmIWEuZG9uZSYmKG49aS5yZXR1cm4pJiZuLmNhbGwoaSl9ZmluYWxseXtpZih0KXRocm93IHQuZXJyb3J9fXJldHVybiBvPjB9LGlzU2VsZWN0ZWRFbXB0eVBhcmFncmFwaDpmdW5jdGlvbihlKXt2YXIgdD1lLnNlbGVjdGlvbjtpZihudWxsPT10KXJldHVybiExO2lmKHFmLmlzRXhwYW5kZWQodCkpcmV0dXJuITE7dmFyIG49UU8uZ2V0U2VsZWN0ZWROb2RlQnlUeXBlKGUsXCJwYXJhZ3JhcGhcIik7aWYobnVsbD09PW4pcmV0dXJuITE7dmFyIHI9bi5jaGlsZHJlbjtyZXR1cm4gMT09PXIubGVuZ3RoJiYoXCJcIj09PXJbMF0udGV4dHx8dm9pZCAwKX0saXNFbXB0eVBhdGg6ZnVuY3Rpb24oZSx0KXt2YXIgbj1CZi5ub2RlKGUsdCk7aWYobnVsbD09bilyZXR1cm4hMTt2YXIgcj1hQShuLDEpWzBdLmNoaWxkcmVuO3JldHVybiAxPT09ci5sZW5ndGgmJlwiXCI9PT1yWzBdLnRleHR9fSxlaz0xLHRrPXt9LG5rPXt9O3ZhciByaz1rRC5maWx0ZXIsb2s9aUMoXCJmaWx0ZXJcIik7Y1Moe3RhcmdldDpcIkFycmF5XCIscHJvdG86ITAsZm9yY2VkOiFva30se2ZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gcmsodGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KTt2YXIgaWs9XCJcXHRcXG5cXHZcXGZcXHIgwqDhmoDigIDigIHigILigIPigITigIXigIbigIfigIjigInigIrigK/igZ/jgIBcXHUyMDI4XFx1MjAyOVxcdWZlZmZcIixhaz1tdyhcIlwiLnJlcGxhY2UpLHVrPVwiW1wiK2lrK1wiXVwiLHNrPVJlZ0V4cChcIl5cIit1ayt1aytcIipcIiksbGs9UmVnRXhwKHVrK3VrK1wiKiRcIiksY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPWJTKHd3KHQpKTtyZXR1cm4gMSZlJiYobj1hayhuLHNrLFwiXCIpKSwyJmUmJihuPWFrKG4sbGssXCJcIikpLG59fSxmaz17c3RhcnQ6Y2soMSksZW5kOmNrKDIpLHRyaW06Y2soMyl9LGRrPVZFLlBST1BFUixwaz1may50cmltO2NTKHt0YXJnZXQ6XCJTdHJpbmdcIixwcm90bzohMCxmb3JjZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFJ3KChmdW5jdGlvbigpe3JldHVybiEhaWtbZV0oKXx8XCLigIvCheGgjlwiIT09XCLigIvCheGgjlwiW2VdKCl8fGRrJiZpa1tlXS5uYW1lIT09ZX0pKX0oXCJ0cmltXCIpfSx7dHJpbTpmdW5jdGlvbigpe3JldHVybiBwayh0aGlzKX19KTt2YXIgaGs9W107dmFyIGdrPXt9O2Z1bmN0aW9uIHZrKGUsdCxuKXt2YXIgcj1uLmlzSW5saW5lKGUpP1wic3BhblwiOlwiZGl2XCI7cmV0dXJuXCI8XCIrcitcIj5cIit0K1wiPC9cIityK1wiPlwifXZhciB5ayxtayxiayx3ayxFaz1sdy5Qcm9taXNlLERrPVd3KFwic3BlY2llc1wiKSxTaz1mdW5jdGlvbihlKXt2YXIgdD1UdyhlKSxuPWJFLmY7S3cmJnQmJiF0W0RrXSYmbih0LERrLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9LHhrPWx3LlR5cGVFcnJvcixDaz1XdyhcInNwZWNpZXNcIiksQWs9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPW5FKGUpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1yfHxudWxsPT0obj1uRShyKVtDa10pP3Q6ZnVuY3Rpb24oZSl7aWYoREQoZSkpcmV0dXJuIGU7dGhyb3cgeGsobEUoZSkrXCIgaXMgbm90IGEgY29uc3RydWN0b3JcIil9KG4pfSxPaz1tdyhbXS5zbGljZSksa2s9Lyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QoX3cpLEJrPVwicHJvY2Vzc1wiPT1xRShsdy5wcm9jZXNzKSxGaz1sdy5zZXRJbW1lZGlhdGUsVGs9bHcuY2xlYXJJbW1lZGlhdGUsX2s9bHcucHJvY2VzcyxQaz1sdy5EaXNwYXRjaCxqaz1sdy5GdW5jdGlvbixOaz1sdy5NZXNzYWdlQ2hhbm5lbCxJaz1sdy5TdHJpbmcsTGs9MCxSaz17fTt0cnl7eWs9bHcubG9jYXRpb259Y2F0Y2goak8pe312YXIgTWs9ZnVuY3Rpb24oZSl7aWYoeHcoUmssZSkpe3ZhciB0PVJrW2VdO2RlbGV0ZSBSa1tlXSx0KCl9fSx6az1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtNayhlKX19LCRrPWZ1bmN0aW9uKGUpe01rKGUuZGF0YSl9LEhrPWZ1bmN0aW9uKGUpe2x3LnBvc3RNZXNzYWdlKElrKGUpLHlrLnByb3RvY29sK1wiLy9cIit5ay5ob3N0KX07RmsmJlRrfHwoRms9ZnVuY3Rpb24oZSl7dmFyIHQ9T2soYXJndW1lbnRzLDEpO3JldHVybiBSa1srK0xrXT1mdW5jdGlvbigpe19DKEJ3KGUpP2U6amsoZSksdm9pZCAwLHQpfSxtayhMayksTGt9LFRrPWZ1bmN0aW9uKGUpe2RlbGV0ZSBSa1tlXX0sQms/bWs9ZnVuY3Rpb24oZSl7X2submV4dFRpY2soemsoZSkpfTpQayYmUGsubm93P21rPWZ1bmN0aW9uKGUpe1BrLm5vdyh6ayhlKSl9Ok5rJiYha2s/KHdrPShiaz1uZXcgTmspLnBvcnQyLGJrLnBvcnQxLm9ubWVzc2FnZT0kayxtaz1vRCh3ay5wb3N0TWVzc2FnZSx3aykpOmx3LmFkZEV2ZW50TGlzdGVuZXImJkJ3KGx3LnBvc3RNZXNzYWdlKSYmIWx3LmltcG9ydFNjcmlwdHMmJnlrJiZcImZpbGU6XCIhPT15ay5wcm90b2NvbCYmIVJ3KEhrKT8obWs9SGssbHcuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwkaywhMSkpOm1rPVwib25yZWFkeXN0YXRlY2hhbmdlXCJpbiBKdyhcInNjcmlwdFwiKT9mdW5jdGlvbihlKXtCUy5hcHBlbmRDaGlsZChKdyhcInNjcmlwdFwiKSkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7QlMucmVtb3ZlQ2hpbGQodGhpcyksTWsoZSl9fTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KHprKGUpLDApfSk7dmFyIFZrLFVrLFdrLEdrLHFrLEtrLFlrLFhrLFprPXtzZXQ6RmssY2xlYXI6VGt9LEprPS9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdChfdykmJnZvaWQgMCE9PWx3LlBlYmJsZSxRaz0vd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KF93KSxlQj16RC5mLHRCPVprLnNldCxuQj1sdy5NdXRhdGlvbk9ic2VydmVyfHxsdy5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLHJCPWx3LmRvY3VtZW50LG9CPWx3LnByb2Nlc3MsaUI9bHcuUHJvbWlzZSxhQj1lQihsdyxcInF1ZXVlTWljcm90YXNrXCIpLHVCPWFCJiZhQi52YWx1ZTt1Qnx8KFZrPWZ1bmN0aW9uKCl7dmFyIGUsdDtmb3IoQmsmJihlPW9CLmRvbWFpbikmJmUuZXhpdCgpO1VrOyl7dD1Vay5mbixVaz1Vay5uZXh0O3RyeXt0KCl9Y2F0Y2goZSl7dGhyb3cgVWs/R2soKTpXaz12b2lkIDAsZX19V2s9dm9pZCAwLGUmJmUuZW50ZXIoKX0sa2t8fEJrfHxRa3x8IW5CfHwhckI/IUprJiZpQiYmaUIucmVzb2x2ZT8oKFlrPWlCLnJlc29sdmUodm9pZCAwKSkuY29uc3RydWN0b3I9aUIsWGs9b0QoWWsudGhlbixZayksR2s9ZnVuY3Rpb24oKXtYayhWayl9KTpCaz9Haz1mdW5jdGlvbigpe29CLm5leHRUaWNrKFZrKX06KHRCPW9EKHRCLGx3KSxHaz1mdW5jdGlvbigpe3RCKFZrKX0pOihxaz0hMCxLaz1yQi5jcmVhdGVUZXh0Tm9kZShcIlwiKSxuZXcgbkIoVmspLm9ic2VydmUoS2sse2NoYXJhY3RlckRhdGE6ITB9KSxHaz1mdW5jdGlvbigpe0trLmRhdGE9cWs9IXFrfSkpO3ZhciBzQixsQixjQixmQixkQj11Qnx8ZnVuY3Rpb24oZSl7dmFyIHQ9e2ZuOmUsbmV4dDp2b2lkIDB9O1drJiYoV2submV4dD10KSxVa3x8KFVrPXQsR2soKSksV2s9dH0scEI9ZnVuY3Rpb24oZSl7dmFyIHQsbjt0aGlzLnByb21pc2U9bmV3IGUoKGZ1bmN0aW9uKGUscil7aWYodm9pZCAwIT09dHx8dm9pZCAwIT09bil0aHJvdyBUeXBlRXJyb3IoXCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvclwiKTt0PWUsbj1yfSkpLHRoaXMucmVzb2x2ZT1mRSh0KSx0aGlzLnJlamVjdD1mRShuKX0saEI9e2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBwQihlKX19LGdCPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm57ZXJyb3I6ITEsdmFsdWU6ZSgpfX1jYXRjaChlKXtyZXR1cm57ZXJyb3I6ITAsdmFsdWU6ZX19fSx2Qj1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93LHlCPVprLnNldCxtQj1XdyhcInNwZWNpZXNcIiksYkI9XCJQcm9taXNlXCIsd0I9TUUuZ2V0dGVyRm9yKGJCKSxFQj1NRS5zZXQsREI9TUUuZ2V0dGVyRm9yKGJCKSxTQj1FayYmRWsucHJvdG90eXBlLHhCPUVrLENCPVNCLEFCPWx3LlR5cGVFcnJvcixPQj1sdy5kb2N1bWVudCxrQj1sdy5wcm9jZXNzLEJCPWhCLmYsRkI9QkIsVEI9ISEoT0ImJk9CLmNyZWF0ZUV2ZW50JiZsdy5kaXNwYXRjaEV2ZW50KSxfQj1Cdyhsdy5Qcm9taXNlUmVqZWN0aW9uRXZlbnQpLFBCPSExLGpCPXNTKGJCLChmdW5jdGlvbigpe3ZhciBlPUFFKHhCKSx0PWUhPT1TdHJpbmcoeEIpO2lmKCF0JiY2Nj09PUx3KXJldHVybiEwO2lmKEx3Pj01MSYmL25hdGl2ZSBjb2RlLy50ZXN0KGUpKXJldHVybiExO3ZhciBuPW5ldyB4QigoZnVuY3Rpb24oZSl7ZSgxKX0pKSxyPWZ1bmN0aW9uKGUpe2UoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKCl7fSkpfTtyZXR1cm4obi5jb25zdHJ1Y3Rvcj17fSlbbUJdPXIsIShQQj1uLnRoZW4oKGZ1bmN0aW9uKCl7fSkpaW5zdGFuY2VvZiByKXx8IXQmJnZCJiYhX0J9KSksTkI9akJ8fCFmeCgoZnVuY3Rpb24oZSl7eEIuYWxsKGUpLmNhdGNoKChmdW5jdGlvbigpe30pKX0pKSxJQj1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4hKCFZdyhlKXx8IUJ3KHQ9ZS50aGVuKSkmJnR9LExCPWZ1bmN0aW9uKGUsdCl7aWYoIWUubm90aWZpZWQpe2Uubm90aWZpZWQ9ITA7dmFyIG49ZS5yZWFjdGlvbnM7ZEIoKGZ1bmN0aW9uKCl7Zm9yKHZhciByPWUudmFsdWUsbz0xPT1lLnN0YXRlLGk9MDtuLmxlbmd0aD5pOyl7dmFyIGEsdSxzLGw9bltpKytdLGM9bz9sLm9rOmwuZmFpbCxmPWwucmVzb2x2ZSxkPWwucmVqZWN0LHA9bC5kb21haW47dHJ5e2M/KG98fCgyPT09ZS5yZWplY3Rpb24mJiRCKGUpLGUucmVqZWN0aW9uPTEpLCEwPT09Yz9hPXI6KHAmJnAuZW50ZXIoKSxhPWMocikscCYmKHAuZXhpdCgpLHM9ITApKSxhPT09bC5wcm9taXNlP2QoQUIoXCJQcm9taXNlLWNoYWluIGN5Y2xlXCIpKToodT1JQihhKSk/b0UodSxhLGYsZCk6ZihhKSk6ZChyKX1jYXRjaChlKXtwJiYhcyYmcC5leGl0KCksZChlKX19ZS5yZWFjdGlvbnM9W10sZS5ub3RpZmllZD0hMSx0JiYhZS5yZWplY3Rpb24mJk1CKGUpfSkpfX0sUkI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG87VEI/KChyPU9CLmNyZWF0ZUV2ZW50KFwiRXZlbnRcIikpLnByb21pc2U9dCxyLnJlYXNvbj1uLHIuaW5pdEV2ZW50KGUsITEsITApLGx3LmRpc3BhdGNoRXZlbnQocikpOnI9e3Byb21pc2U6dCxyZWFzb246bn0sIV9CJiYobz1sd1tcIm9uXCIrZV0pP28ocik6XCJ1bmhhbmRsZWRyZWplY3Rpb25cIj09PWUmJmZ1bmN0aW9uKGUsdCl7dmFyIG49bHcuY29uc29sZTtuJiZuLmVycm9yJiYoMT09YXJndW1lbnRzLmxlbmd0aD9uLmVycm9yKGUpOm4uZXJyb3IoZSx0KSl9KFwiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uXCIsbil9LE1CPWZ1bmN0aW9uKGUpe29FKHlCLGx3LChmdW5jdGlvbigpe3ZhciB0LG49ZS5mYWNhZGUscj1lLnZhbHVlO2lmKHpCKGUpJiYodD1nQigoZnVuY3Rpb24oKXtCaz9rQi5lbWl0KFwidW5oYW5kbGVkUmVqZWN0aW9uXCIscixuKTpSQihcInVuaGFuZGxlZHJlamVjdGlvblwiLG4scil9KSksZS5yZWplY3Rpb249Qmt8fHpCKGUpPzI6MSx0LmVycm9yKSl0aHJvdyB0LnZhbHVlfSkpfSx6Qj1mdW5jdGlvbihlKXtyZXR1cm4gMSE9PWUucmVqZWN0aW9uJiYhZS5wYXJlbnR9LCRCPWZ1bmN0aW9uKGUpe29FKHlCLGx3LChmdW5jdGlvbigpe3ZhciB0PWUuZmFjYWRlO0JrP2tCLmVtaXQoXCJyZWplY3Rpb25IYW5kbGVkXCIsdCk6UkIoXCJyZWplY3Rpb25oYW5kbGVkXCIsdCxlLnZhbHVlKX0pKX0sSEI9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXtlKHQscixuKX19LFZCPWZ1bmN0aW9uKGUsdCxuKXtlLmRvbmV8fChlLmRvbmU9ITAsbiYmKGU9biksZS52YWx1ZT10LGUuc3RhdGU9MixMQihlLCEwKSl9LFVCPWZ1bmN0aW9uKGUsdCxuKXtpZighZS5kb25lKXtlLmRvbmU9ITAsbiYmKGU9bik7dHJ5e2lmKGUuZmFjYWRlPT09dCl0aHJvdyBBQihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO3ZhciByPUlCKHQpO3I/ZEIoKGZ1bmN0aW9uKCl7dmFyIG49e2RvbmU6ITF9O3RyeXtvRShyLHQsSEIoVUIsbixlKSxIQihWQixuLGUpKX1jYXRjaCh0KXtWQihuLHQsZSl9fSkpOihlLnZhbHVlPXQsZS5zdGF0ZT0xLExCKGUsITEpKX1jYXRjaCh0KXtWQih7ZG9uZTohMX0sdCxlKX19fTtpZihqQiYmKENCPSh4Qj1mdW5jdGlvbihlKXtGQSh0aGlzLENCKSxmRShlKSxvRShzQix0aGlzKTt2YXIgdD13Qih0aGlzKTt0cnl7ZShIQihVQix0KSxIQihWQix0KSl9Y2F0Y2goZSl7VkIodCxlKX19KS5wcm90b3R5cGUsKHNCPWZ1bmN0aW9uKGUpe0VCKHRoaXMse3R5cGU6YkIsZG9uZTohMSxub3RpZmllZDohMSxwYXJlbnQ6ITEscmVhY3Rpb25zOltdLHJlamVjdGlvbjohMSxzdGF0ZTowLHZhbHVlOnZvaWQgMH0pfSkucHJvdG90eXBlPXBBKENCLHt0aGVuOmZ1bmN0aW9uKGUsdCl7dmFyIG49REIodGhpcykscj1uLnJlYWN0aW9ucyxvPUJCKEFrKHRoaXMseEIpKTtyZXR1cm4gby5vaz0hQncoZSl8fGUsby5mYWlsPUJ3KHQpJiZ0LG8uZG9tYWluPUJrP2tCLmRvbWFpbjp2b2lkIDAsbi5wYXJlbnQ9ITAscltyLmxlbmd0aF09bywwIT1uLnN0YXRlJiZMQihuLCExKSxvLnByb21pc2V9LGNhdGNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLGUpfX0pLGxCPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHNCLHQ9d0IoZSk7dGhpcy5wcm9taXNlPWUsdGhpcy5yZXNvbHZlPUhCKFVCLHQpLHRoaXMucmVqZWN0PUhCKFZCLHQpfSxoQi5mPUJCPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09eEJ8fGU9PT1jQj9uZXcgbEIoZSk6RkIoZSl9LEJ3KEVrKSYmU0IhPT1PYmplY3QucHJvdG90eXBlKSl7ZkI9U0IudGhlbixQQnx8KFVFKFNCLFwidGhlblwiLChmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyB4QigoZnVuY3Rpb24oZSx0KXtvRShmQixuLGUsdCl9KSkudGhlbihlLHQpfSkse3Vuc2FmZTohMH0pLFVFKFNCLFwiY2F0Y2hcIixDQi5jYXRjaCx7dW5zYWZlOiEwfSkpO3RyeXtkZWxldGUgU0IuY29uc3RydWN0b3J9Y2F0Y2goak8pe31MeCYmTHgoU0IsQ0IpfWNTKHtnbG9iYWw6ITAsd3JhcDohMCxmb3JjZWQ6akJ9LHtQcm9taXNlOnhCfSksX3goeEIsYkIsITEpLFNrKGJCKSxjQj1UdyhiQiksY1Moe3RhcmdldDpiQixzdGF0OiEwLGZvcmNlZDpqQn0se3JlamVjdDpmdW5jdGlvbihlKXt2YXIgdD1CQih0aGlzKTtyZXR1cm4gb0UodC5yZWplY3Qsdm9pZCAwLGUpLHQucHJvbWlzZX19KSxjUyh7dGFyZ2V0OmJCLHN0YXQ6ITAsZm9yY2VkOmpCfSx7cmVzb2x2ZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZihuRShlKSxZdyh0KSYmdC5jb25zdHJ1Y3Rvcj09PWUpcmV0dXJuIHQ7dmFyIG49aEIuZihlKTtyZXR1cm4oMCxuLnJlc29sdmUpKHQpLG4ucHJvbWlzZX0odGhpcyxlKX19KSxjUyh7dGFyZ2V0OmJCLHN0YXQ6ITAsZm9yY2VkOk5CfSx7YWxsOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1CQih0KSxyPW4ucmVzb2x2ZSxvPW4ucmVqZWN0LGk9Z0IoKGZ1bmN0aW9uKCl7dmFyIG49ZkUodC5yZXNvbHZlKSxpPVtdLGE9MCx1PTE7a0EoZSwoZnVuY3Rpb24oZSl7dmFyIHM9YSsrLGw9ITE7dSsrLG9FKG4sdCxlKS50aGVuKChmdW5jdGlvbihlKXtsfHwobD0hMCxpW3NdPWUsLS11fHxyKGkpKX0pLG8pfSkpLC0tdXx8cihpKX0pKTtyZXR1cm4gaS5lcnJvciYmbyhpLnZhbHVlKSxuLnByb21pc2V9LHJhY2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPUJCKHQpLHI9bi5yZWplY3Qsbz1nQigoZnVuY3Rpb24oKXt2YXIgbz1mRSh0LnJlc29sdmUpO2tBKGUsKGZ1bmN0aW9uKGUpe29FKG8sdCxlKS50aGVuKG4ucmVzb2x2ZSxyKX0pKX0pKTtyZXR1cm4gby5lcnJvciYmcihvLnZhbHVlKSxuLnByb21pc2V9fSk7dmFyIFdCPWZDLlVOU1VQUE9SVEVEX1ksR0I9TWF0aC5taW4scUI9W10ucHVzaCxLQj1tdygvLi8uZXhlYyksWUI9bXcocUIpLFhCPW13KFwiXCIuc2xpY2UpO2Z1bmN0aW9uIFpCKGUpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oZSl9ZnVuY3Rpb24gSkIoZSx0KXtyZXR1cm4gU2YuaXNFbGVtZW50KGUpP2Z1bmN0aW9uKGUsdCl7dmFyIG49ZS50eXBlLHI9dm9pZCAwPT09bj9cIlwiOm4sbz1lLmNoaWxkcmVuLGk9dm9pZCAwPT09bz9bXTpvLGE9QmYuaXNWb2lkKHQsZSksdT1cIlwiO2F8fCh1PWkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gSkIoZSx0KX0pKS5qb2luKFwiXCIpKTt2YXIgcz1mdW5jdGlvbihlKXtyZXR1cm4gZ2tbZV18fHZrfShyKSxsPXMoZSx1LHQpLGM9XCJcIjtpZihjPVwic3RyaW5nXCI9PXR5cGVvZiBsP2w6bC5odG1sfHxcIlwiLGF8fGhrLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBjPXQoZSxjKX0pKSxcInN0cmluZ1wiPT10eXBlb2YgbClyZXR1cm4gYzt2YXIgZj1sLnByZWZpeCxkPXZvaWQgMD09PWY/XCJcIjpmLHA9bC5zdWZmaXgsaD12b2lkIDA9PT1wP1wiXCI6cDtyZXR1cm4gZCYmKGM9ZCtjKSxoJiYoYys9aCksY30oZSx0KTpmdW5jdGlvbihlLHQpe3ZhciBuPWUudGV4dDtpZihudWxsPT1uKXRocm93IG5ldyBFcnJvcihcIkN1cnJlbnQgbm9kZSBpcyBub3Qgc2xhdGUgVGV4dCBcIitKU09OLnN0cmluZ2lmeShlKSk7dmFyIHI9bjtyPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLyB7Mn0vZyxcIiAmbmJzcDtcIikucmVwbGFjZSgvPC9nLFwiJmx0O1wiKS5yZXBsYWNlKC8+L2csXCImZ3Q7XCIpLnJlcGxhY2UoL8KuL2csXCImcmVnO1wiKS5yZXBsYWNlKC/CqS9nLFwiJmNvcHk7XCIpLnJlcGxhY2UoL+KEoi9nLFwiJnRyYWRlO1wiKX0ocik7dmFyIG89UU8uZ2V0UGFyZW50c05vZGVzKHQsZSkuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuXCJwcmVcIj09PVFPLmdldE5vZGVUeXBlKGUpfSkpO2lmKG98fChyPXIucmVwbGFjZSgvXFxyXFxufFxccnxcXG4vZyxcIjxicj5cIikpLG8mJihyPXIucmVwbGFjZSgvJm5ic3A7L2csXCIgXCIpKSxcIlwiPT09cil7dmFyIGk9UU8uZ2V0UGFyZW50Tm9kZShudWxsLGUpO2lmKCFpfHwwIT09aS5jaGlsZHJlbi5sZW5ndGgpcmV0dXJuIHI7cj1cIjxicj5cIn1yZXR1cm4gaGsuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHI9dChlLHIpfSkpLHJ9KGUsdCl9ZnVuY3Rpb24gUUIoZSl7cmV0dXJuXCJ3LWUtZWxlbWVudC1cIitlfU5DKFwic3BsaXRcIiwoZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiByPVwiY1wiPT1cImFiYmNcIi5zcGxpdCgvKGIpKi8pWzFdfHw0IT1cInRlc3RcIi5zcGxpdCgvKD86KS8sLTEpLmxlbmd0aHx8MiE9XCJhYlwiLnNwbGl0KC8oPzphYikqLykubGVuZ3RofHw0IT1cIi5cIi5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGh8fFwiLlwiLnNwbGl0KC8oKSgpLykubGVuZ3RoPjF8fFwiXCIuc3BsaXQoLy4/LykubGVuZ3RoP2Z1bmN0aW9uKGUsbil7dmFyIHI9YlMod3codGhpcykpLG89dm9pZCAwPT09bj80Mjk0OTY3Mjk1Om4+Pj4wO2lmKDA9PT1vKXJldHVybltdO2lmKHZvaWQgMD09PWUpcmV0dXJuW3JdO2lmKCEkUyhlKSlyZXR1cm4gb0UodCxyLGUsbyk7Zm9yKHZhciBpLGEsdSxzPVtdLGw9KGUuaWdub3JlQ2FzZT9cImlcIjpcIlwiKSsoZS5tdWx0aWxpbmU/XCJtXCI6XCJcIikrKGUudW5pY29kZT9cInVcIjpcIlwiKSsoZS5zdGlja3k/XCJ5XCI6XCJcIiksYz0wLGY9bmV3IFJlZ0V4cChlLnNvdXJjZSxsK1wiZ1wiKTsoaT1vRShPQyxmLHIpKSYmISgoYT1mLmxhc3RJbmRleCk+YyYmKFlCKHMsWEIocixjLGkuaW5kZXgpKSxpLmxlbmd0aD4xJiZpLmluZGV4PHIubGVuZ3RoJiZfQyhxQixzLHZBKGksMSkpLHU9aVswXS5sZW5ndGgsYz1hLHMubGVuZ3RoPj1vKSk7KWYubGFzdEluZGV4PT09aS5pbmRleCYmZi5sYXN0SW5kZXgrKztyZXR1cm4gYz09PXIubGVuZ3RoPyF1JiZLQihmLFwiXCIpfHxZQihzLFwiXCIpOllCKHMsWEIocixjKSkscy5sZW5ndGg+bz92QShzLDAsbyk6c306XCIwXCIuc3BsaXQodm9pZCAwLDApLmxlbmd0aD9mdW5jdGlvbihlLG4pe3JldHVybiB2b2lkIDA9PT1lJiYwPT09bj9bXTpvRSh0LHRoaXMsZSxuKX06dCxbZnVuY3Rpb24odCxuKXt2YXIgbz13dyh0aGlzKSxpPW51bGw9PXQ/dm9pZCAwOmRFKHQsZSk7cmV0dXJuIGk/b0UoaSx0LG8sbik6b0UocixiUyhvKSx0LG4pfSxmdW5jdGlvbihlLG8pe3ZhciBpPW5FKHRoaXMpLGE9YlMoZSksdT1uKHIsaSxhLG8sciE9PXQpO2lmKHUuZG9uZSlyZXR1cm4gdS52YWx1ZTt2YXIgcz1BayhpLFJlZ0V4cCksbD1pLnVuaWNvZGUsYz0oaS5pZ25vcmVDYXNlP1wiaVwiOlwiXCIpKyhpLm11bHRpbGluZT9cIm1cIjpcIlwiKSsoaS51bmljb2RlP1widVwiOlwiXCIpKyhXQj9cImdcIjpcInlcIiksZj1uZXcgcyhXQj9cIl4oPzpcIitpLnNvdXJjZStcIilcIjppLGMpLGQ9dm9pZCAwPT09bz80Mjk0OTY3Mjk1Om8+Pj4wO2lmKDA9PT1kKXJldHVybltdO2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gbnVsbD09PUdDKGYsYSk/W2FdOltdO2Zvcih2YXIgcD0wLGg9MCxnPVtdO2g8YS5sZW5ndGg7KXtmLmxhc3RJbmRleD1XQj8wOmg7dmFyIHYseT1HQyhmLFdCP1hCKGEsaCk6YSk7aWYobnVsbD09PXl8fCh2PUdCKGREKGYubGFzdEluZGV4KyhXQj9oOjApKSxhLmxlbmd0aCkpPT09cCloPUxDKGEsaCxsKTtlbHNle2lmKFlCKGcsWEIoYSxwLGgpKSxnLmxlbmd0aD09PWQpcmV0dXJuIGc7Zm9yKHZhciBtPTE7bTw9eS5sZW5ndGgtMTttKyspaWYoWUIoZyx5W21dKSxnLmxlbmd0aD09PWQpcmV0dXJuIGc7aD1wPXZ9fXJldHVybiBZQihnLFhCKGEscCkpLGd9XX0pLCEhUncoKGZ1bmN0aW9uKCl7dmFyIGU9Lyg/OikvLHQ9ZS5leGVjO2UuZXhlYz1mdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIG49XCJhYlwiLnNwbGl0KGUpO3JldHVybiAyIT09bi5sZW5ndGh8fFwiYVwiIT09blswXXx8XCJiXCIhPT1uWzFdfSkpLFdCKTt2YXIgZUY9ZnVuY3Rpb24oZSx0KXt2YXIgbj0odC50b3ArdC5ib3R0b20pLzI7cmV0dXJuIGUudG9wPD1uJiZlLmJvdHRvbT49bn0sdEY9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVFPLnRvRE9NUmFuZ2UoZSx0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPVFPLnRvRE9NUmFuZ2UoZSxuKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZUYocixvKSYmZUYobyxyKX0sbkY9W1wic3BhblwiLFwiYlwiLFwic3Ryb25nXCIsXCJpXCIsXCJlbVwiLFwic1wiLFwic3RyaWtlXCIsXCJ1XCIsXCJmb250XCIsXCJzdWJcIixcInN1cFwiXSxyRj1bXTt2YXIgb0Y9W107dmFyIGlGPXt9O3ZhciBhRj1iRS5mLHVGPVpELmYsc0Y9TUUuZW5mb3JjZSxsRj1XdyhcIm1hdGNoXCIpLGNGPWx3LlJlZ0V4cCxmRj1jRi5wcm90b3R5cGUsZEY9bHcuU3ludGF4RXJyb3IscEY9bXcod1MpLGhGPW13KGZGLmV4ZWMpLGdGPW13KFwiXCIuY2hhckF0KSx2Rj1tdyhcIlwiLnJlcGxhY2UpLHlGPW13KFwiXCIuaW5kZXhPZiksbUY9bXcoXCJcIi5zbGljZSksYkY9L15cXD88W15cXHNcXGQhIyUmKis8PT5AXl1bXlxccyEjJSYqKzw9PkBeXSo+Lyx3Rj0vYS9nLEVGPS9hL2csREY9bmV3IGNGKHdGKSE9PXdGLFNGPWZDLk1JU1NFRF9TVElDS1kseEY9ZkMuVU5TVVBQT1JURURfWSxDRj1LdyYmKCFERnx8U0Z8fHBDfHxnQ3x8UncoKGZ1bmN0aW9uKCl7cmV0dXJuIEVGW2xGXT0hMSxjRih3RikhPXdGfHxjRihFRik9PUVGfHxcIi9hL2lcIiE9Y0Yod0YsXCJpXCIpfSkpKTtpZihzUyhcIlJlZ0V4cFwiLENGKSl7Zm9yKHZhciBBRj1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxpLGEsdSxzPWlFKGZGLHRoaXMpLGw9JFMoZSksYz12b2lkIDA9PT10LGY9W10sZD1lO2lmKCFzJiZsJiZjJiZlLmNvbnN0cnVjdG9yPT09QUYpcmV0dXJuIGU7aWYoKGx8fGlFKGZGLGUpKSYmKGU9ZS5zb3VyY2UsYyYmKHQ9XCJmbGFnc1wiaW4gZD9kLmZsYWdzOnBGKGQpKSksZT12b2lkIDA9PT1lP1wiXCI6YlMoZSksdD12b2lkIDA9PT10P1wiXCI6YlModCksZD1lLHBDJiZcImRvdEFsbFwiaW4gd0YmJihyPSEhdCYmeUYodCxcInNcIik+LTEpJiYodD12Rih0LC9zL2csXCJcIikpLG49dCxTRiYmXCJzdGlja3lcImluIHdGJiYobz0hIXQmJnlGKHQsXCJ5XCIpPi0xKSYmeEYmJih0PXZGKHQsL3kvZyxcIlwiKSksZ0MmJihpPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPWUubGVuZ3RoLHI9MCxvPVwiXCIsaT1bXSxhPXt9LHU9ITEscz0hMSxsPTAsYz1cIlwiO3I8PW47cisrKXtpZihcIlxcXFxcIj09PSh0PWdGKGUscikpKXQrPWdGKGUsKytyKTtlbHNlIGlmKFwiXVwiPT09dCl1PSExO2Vsc2UgaWYoIXUpc3dpdGNoKCEwKXtjYXNlXCJbXCI9PT10OnU9ITA7YnJlYWs7Y2FzZVwiKFwiPT09dDpoRihiRixtRihlLHIrMSkpJiYocis9MixzPSEwKSxvKz10LGwrKztjb250aW51ZTtjYXNlXCI+XCI9PT10JiZzOmlmKFwiXCI9PT1jfHx4dyhhLGMpKXRocm93IG5ldyBkRihcIkludmFsaWQgY2FwdHVyZSBncm91cCBuYW1lXCIpO2FbY109ITAsaVtpLmxlbmd0aF09W2MsbF0scz0hMSxjPVwiXCI7Y29udGludWV9cz9jKz10Om8rPXR9cmV0dXJuW28saV19KGUpLGU9aVswXSxmPWlbMV0pLGE9VEEoY0YoZSx0KSxzP3RoaXM6ZkYsQUYpLChyfHxvfHxmLmxlbmd0aCkmJih1PXNGKGEpLHImJih1LmRvdEFsbD0hMCx1LnJhdz1BRihmdW5jdGlvbihlKXtmb3IodmFyIHQsbj1lLmxlbmd0aCxyPTAsbz1cIlwiLGk9ITE7cjw9bjtyKyspXCJcXFxcXCIhPT0odD1nRihlLHIpKT9pfHxcIi5cIiE9PXQ/KFwiW1wiPT09dD9pPSEwOlwiXVwiPT09dCYmKGk9ITEpLG8rPXQpOm8rPVwiW1xcXFxzXFxcXFNdXCI6bys9dCtnRihlLCsrcik7cmV0dXJuIG99KGUpLG4pKSxvJiYodS5zdGlja3k9ITApLGYubGVuZ3RoJiYodS5ncm91cHM9ZikpLGUhPT1kKXRyeXtFRShhLFwic291cmNlXCIsXCJcIj09PWQ/XCIoPzopXCI6ZCl9Y2F0Y2goZSl7fXJldHVybiBhfSxPRj1mdW5jdGlvbihlKXtlIGluIEFGfHxhRihBRixlLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNGW2VdfSxzZXQ6ZnVuY3Rpb24odCl7Y0ZbZV09dH19KX0sa0Y9dUYoY0YpLEJGPTA7a0YubGVuZ3RoPkJGOylPRihrRltCRisrXSk7ZkYuY29uc3RydWN0b3I9QUYsQUYucHJvdG90eXBlPWZGLFVFKGx3LFwiUmVnRXhwXCIsQUYpfVNrKFwiUmVnRXhwXCIpO3ZhciBGRj1uZXcgUmVnRXhwKFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKSxcImdcIik7ZnVuY3Rpb24gVEYoZSl7cmV0dXJuIGUucmVwbGFjZShGRixcIiBcIil9ZnVuY3Rpb24gX0YoZSx0KXt2YXIgbj1lLmxlbmd0aDtpZihuKXt2YXIgcj1lW24tMV07aWYoZWQuaXNUZXh0KHIpKXt2YXIgbz1PYmplY3Qua2V5cyhyKTtpZigxPT09by5sZW5ndGgmJlwidGV4dFwiPT09b1swXSlyZXR1cm4gci50ZXh0PXIudGV4dCt0LCEwfX1yZXR1cm4hMX1mdW5jdGlvbiBQRihlLHQsbil7cmV0dXJue3R5cGU6XCJwYXJhZ3JhcGhcIixjaGlsZHJlbjpbe3RleHQ6TXAoZSkudGV4dCgpLnJlcGxhY2UoL1xccysvZ20sXCIgXCIpfV19fWZ1bmN0aW9uIGpGKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtpZihudWxsIT1lLmF0dHIoXCJkYXRhLXctZS1pcy12b2lkXCIpKXJldHVybiBuO3ZhciByPWVbMF0uY2hpbGROb2RlcztyZXR1cm4gMT09PXIubGVuZ3RoJiZcIkJSXCI9PT1yWzBdLm5vZGVOYW1lPyhuLnB1c2goe3RleHQ6XCJcIn0pLG4pOihyLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUubm9kZVR5cGUhPT1QTy5FTEVNRU5UX05PREUpaWYoZS5ub2RlVHlwZSE9PVBPLlRFWFRfTk9ERSk7ZWxzZXt2YXIgcj1lLnRleHRDb250ZW50fHxcIlwiO2lmKFwiXCI9PT1yLnRyaW0oKSYmci5pbmRleE9mKFwiXFxuXCIpPj0wKXJldHVybjtyJiYocj1URihyKSxfRihuLHIpfHxuLnB1c2goe3RleHQ6cn0pKX1lbHNle2lmKFwiQlJcIj09PWUubm9kZU5hbWUpcmV0dXJuIHZvaWQoX0YobixcIlxcblwiKXx8bi5wdXNoKHt0ZXh0OlwiXFxuXCJ9KSk7dmFyIG89SUYoTXAoZSksdCk7QXJyYXkuaXNBcnJheShvKT9vLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBuLnB1c2goZSl9KSk6bi5wdXNoKG8pfX0pKSxuKX0oZSx0KSxyPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBpRilpZihlWzBdLm1hdGNoZXModCkpcmV0dXJuIGlGW3RdO3JldHVybiBQRn0oZSksbz1yKGVbMF0sbix0KTtyZXR1cm4gQXJyYXkuaXNBcnJheShvKXx8KG89W29dKSxvLmZvckVhY2goKGZ1bmN0aW9uKHIpe0JmLmlzVm9pZCh0LHIpfHwoMD09PW4ubGVuZ3RoJiYoci5jaGlsZHJlbj1be3RleHQ6ZS50ZXh0KCkucmVwbGFjZSgvXFxzKy9nbSxcIiBcIil9XSksb0YuZm9yRWFjaCgoZnVuY3Rpb24obil7cj1uKGVbMF0scix0KX0pKSl9KSksb31mdW5jdGlvbiBORihlLHQpezA9PT1lLnBhcmVudHMoXCJwcmVcIikubGVuZ3RoJiYoZVswXS5pbm5lckhUTUw9ZVswXS5pbm5lckhUTUwucmVwbGFjZSgvXFxzKy9nbSxcIiBcIikucmVwbGFjZSgvPGJyPi9nLFwiXFxuXCIpKTt2YXIgbj1lWzBdLnRleHRDb250ZW50fHxcIlwiO249ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvJm5ic3A7L2csXCIgXCIpLnJlcGxhY2UoLyZsdDsvZyxcIjxcIikucmVwbGFjZSgvJmd0Oy9nLFwiPlwiKS5yZXBsYWNlKC8mcmVnOy9nLFwiwq5cIikucmVwbGFjZSgvJmNvcHk7L2csXCLCqVwiKS5yZXBsYWNlKC8mdHJhZGU7L2csXCLihKJcIikucmVwbGFjZSgvJnF1b3Q7L2csJ1wiJyl9KG4pO3ZhciByPXt0ZXh0Om49VEYobil9O3JldHVybiBvRi5mb3JFYWNoKChmdW5jdGlvbihuKXtyPW4oZVswXSxyLHQpfSkpLHJ9ZnVuY3Rpb24gSUYoZSx0KXtyRi5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10LnNlbGVjdG9yLHI9dC5wcmVQYXJzZUh0bWw7ZVswXS5tYXRjaGVzKG4pJiYoZT1NcChyKGVbMF0pKSl9KSk7dmFyIG49V08oZSk7cmV0dXJuXCJzcGFuXCI9PT1uP2UuYXR0cihcImRhdGEtdy1lLXR5cGVcIik/akYoZSx0KTpORihlLHQpOlwiY29kZVwiPT09bj9cInByZVwiPT09V08oZS5wYXJlbnQoKSk/akYoZSx0KTpORihlLHQpOm5GLmluY2x1ZGVzKG4pP05GKGUsdCk6akYoZSx0KX1mdW5jdGlvbiBMRihlLHQsbil7dmFyIHI9TXAobik7cmV0dXJuISFyLmF0dHIodCl8fChyLmF0dHIodCxcInRydWVcIiksZS5vbihcImRlc3Ryb3llZFwiLChmdW5jdGlvbigpe3IucmVtb3ZlQXR0cih0KX0pKSwhMSl9ZnVuY3Rpb24gUkYoZSx0KXt2b2lkIDA9PT10JiYodD1cIlwiKTt2YXIgbj1bXTtcIlwiPT09dCYmKHQ9XCI8cD48YnI+PC9wPlwiKSwwIT09dC5pbmRleE9mKFwiPFwiKSYmKHQ9dC5zcGxpdCgvXFxuLykubWFwKChmdW5jdGlvbihlKXtyZXR1cm5cIjxwPlwiK2UrXCI8L3A+XCJ9KSkuam9pbihcIlwiKSk7dmFyIHI9TXAoXCI8ZGl2PlwiK3QrXCI8L2Rpdj5cIik7cmV0dXJuIEFycmF5LmZyb20oci5jaGlsZHJlbigpKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgcj1JRihNcCh0KSxlKTtBcnJheS5pc0FycmF5KHIpP3IuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIG4ucHVzaChlKX0pKTpuLnB1c2gocil9KSksbn12YXIgTUY9YkUuZix6Rj14QS5mYXN0S2V5LCRGPU1FLnNldCxIRj1NRS5nZXR0ZXJGb3IsVkY9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWUoKGZ1bmN0aW9uKGUsbyl7RkEoZSxpKSwkRihlLHt0eXBlOnQsaW5kZXg6TlMobnVsbCksZmlyc3Q6dm9pZCAwLGxhc3Q6dm9pZCAwLHNpemU6MH0pLEt3fHwoZS5zaXplPTApLG51bGwhPW8mJmtBKG8sZVtyXSx7dGhhdDplLEFTX0VOVFJJRVM6bn0pfSkpLGk9by5wcm90b3R5cGUsYT1IRih0KSx1PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLGk9YShlKSx1PXMoZSx0KTtyZXR1cm4gdT91LnZhbHVlPW46KGkubGFzdD11PXtpbmRleDpvPXpGKHQsITApLGtleTp0LHZhbHVlOm4scHJldmlvdXM6cj1pLmxhc3QsbmV4dDp2b2lkIDAscmVtb3ZlZDohMX0saS5maXJzdHx8KGkuZmlyc3Q9dSksciYmKHIubmV4dD11KSxLdz9pLnNpemUrKzplLnNpemUrKyxcIkZcIiE9PW8mJihpLmluZGV4W29dPXUpKSxlfSxzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKGUpLG89ekYodCk7aWYoXCJGXCIhPT1vKXJldHVybiByLmluZGV4W29dO2ZvcihuPXIuZmlyc3Q7bjtuPW4ubmV4dClpZihuLmtleT09dClyZXR1cm4gbn07cmV0dXJuIHBBKGkse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWEodGhpcyksdD1lLmluZGV4LG49ZS5maXJzdDtuOyluLnJlbW92ZWQ9ITAsbi5wcmV2aW91cyYmKG4ucHJldmlvdXM9bi5wcmV2aW91cy5uZXh0PXZvaWQgMCksZGVsZXRlIHRbbi5pbmRleF0sbj1uLm5leHQ7ZS5maXJzdD1lLmxhc3Q9dm9pZCAwLEt3P2Uuc2l6ZT0wOnRoaXMuc2l6ZT0wfSxkZWxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWEodCkscj1zKHQsZSk7aWYocil7dmFyIG89ci5uZXh0LGk9ci5wcmV2aW91cztkZWxldGUgbi5pbmRleFtyLmluZGV4XSxyLnJlbW92ZWQ9ITAsaSYmKGkubmV4dD1vKSxvJiYoby5wcmV2aW91cz1pKSxuLmZpcnN0PT1yJiYobi5maXJzdD1vKSxuLmxhc3Q9PXImJihuLmxhc3Q9aSksS3c/bi5zaXplLS06dC5zaXplLS19cmV0dXJuISFyfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPWEodGhpcykscj1vRChlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKTt0PXQ/dC5uZXh0Om4uZmlyc3Q7KWZvcihyKHQudmFsdWUsdC5rZXksdGhpcyk7dCYmdC5yZW1vdmVkOyl0PXQucHJldmlvdXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4hIXModGhpcyxlKX19KSxwQShpLG4/e2dldDpmdW5jdGlvbihlKXt2YXIgdD1zKHRoaXMsZSk7cmV0dXJuIHQmJnQudmFsdWV9LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiB1KHRoaXMsMD09PWU/MDplLHQpfX06e2FkZDpmdW5jdGlvbihlKXtyZXR1cm4gdSh0aGlzLGU9MD09PWU/MDplLGUpfX0pLEt3JiZNRihpLFwic2l6ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzKS5zaXplfX0pLG99LHNldFN0cm9uZzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dCtcIiBJdGVyYXRvclwiLG89SEYodCksaT1IRihyKTtVeChlLHQsKGZ1bmN0aW9uKGUsdCl7JEYodGhpcyx7dHlwZTpyLHRhcmdldDplLHN0YXRlOm8oZSksa2luZDp0LGxhc3Q6dm9pZCAwfSl9KSwoZnVuY3Rpb24oKXtmb3IodmFyIGU9aSh0aGlzKSx0PWUua2luZCxuPWUubGFzdDtuJiZuLnJlbW92ZWQ7KW49bi5wcmV2aW91cztyZXR1cm4gZS50YXJnZXQmJihlLmxhc3Q9bj1uP24ubmV4dDplLnN0YXRlLmZpcnN0KT9cImtleXNcIj09dD97dmFsdWU6bi5rZXksZG9uZTohMX06XCJ2YWx1ZXNcIj09dD97dmFsdWU6bi52YWx1ZSxkb25lOiExfTp7dmFsdWU6W24ua2V5LG4udmFsdWVdLGRvbmU6ITF9OihlLnRhcmdldD12b2lkIDAse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9KSxuP1wiZW50cmllc1wiOlwidmFsdWVzXCIsIW4sITApLFNrKHQpfX07X0EoXCJTZXRcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0pLFZGKTt2YXIgVUY9bmV3IFNldChbXCJkb2N0eXBlXCIsXCIhZG9jdHlwZVwiLFwibWV0YVwiLFwic2NyaXB0XCIsXCJzdHlsZVwiLFwibGlua1wiLFwiZnJhbWVcIixcImlmcmFtZVwiLFwidGl0bGVcIixcInN2Z1wiXSk7ZnVuY3Rpb24gV0YoZSx0KXtlLmlzSW5saW5lKHQpPyhlLmluc2VydE5vZGUodCksXCJsaW5rXCI9PT10LnR5cGUmJmUuaW5zZXJ0RnJhZ21lbnQoW3t0ZXh0OlwiXCJ9XSkpOm1kLmluc2VydE5vZGVzKGUsdCx7bW9kZTpcImhpZ2hlc3RcIn0pfXZhciBHRj1mdW5jdGlvbihlKXt2YXIgdD1lLG49dC5pbnNlcnRUZXh0O3JldHVybiB0Lmluc2VydEZyYWdtZW50LHQuc2V0RnJhZ21lbnREYXRhPWZ1bmN0aW9uKGUpe3ZhciBuPXQuc2VsZWN0aW9uO2lmKG4pe3ZhciByPWFBKHFmLmVkZ2VzKG4pLDIpLG89clswXSxpPXJbMV0sYT1CZi52b2lkKHQse2F0Om8ucGF0aH0pLHU9QmYudm9pZCh0LHthdDppLnBhdGh9KTtpZighcWYuaXNDb2xsYXBzZWQobil8fGEpe3ZhciBzPVFPLnRvRE9NUmFuZ2UodCxuKSxsPXMuY2xvbmVDb250ZW50cygpLGM9bC5jaGlsZE5vZGVzWzBdO2lmKGwuY2hpbGROb2Rlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnRleHRDb250ZW50JiZcIlwiIT09ZS50ZXh0Q29udGVudC50cmltKCkmJihjPWUpfSkpLHUpe3ZhciBmPWFBKHUsMSlbMF0sZD1zLmNsb25lUmFuZ2UoKSxwPVFPLnRvRE9NTm9kZSh0LGYpO2Quc2V0RW5kQWZ0ZXIocCksbD1kLmNsb25lQ29udGVudHMoKX1pZihhJiYoYz1sLnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1zbGF0ZS1zcGFjZXJdXCIpKSxBcnJheS5mcm9tKGwucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLXNsYXRlLXplcm8td2lkdGhdXCIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1cIm5cIj09PWUuZ2V0QXR0cmlidXRlKFwiZGF0YS1zbGF0ZS16ZXJvLXdpZHRoXCIpO2UudGV4dENvbnRlbnQ9dD9cIlxcblwiOlwiXCJ9KSksTU8oYykpe3ZhciBoPWMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtoLnN0eWxlLndoaXRlU3BhY2U9XCJwcmVcIixoLmFwcGVuZENoaWxkKGMpLGwuYXBwZW5kQ2hpbGQoaCksYz1ofXZhciBnPXQuZ2V0RnJhZ21lbnQoKSx2PUpTT04uc3RyaW5naWZ5KGcpLHk9d2luZG93LmJ0b2EoZW5jb2RlVVJJQ29tcG9uZW50KHYpKTtjLnNldEF0dHJpYnV0ZShcImRhdGEtc2xhdGUtZnJhZ21lbnRcIix5KSxlLnNldERhdGEoXCJhcHBsaWNhdGlvbi94LXNsYXRlLWZyYWdtZW50XCIseSk7dmFyIG09bC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIG0uYXBwZW5kQ2hpbGQobCksbS5zZXRBdHRyaWJ1dGUoXCJoaWRkZW5cIixcInRydWVcIiksbC5vd25lckRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobSksZS5zZXREYXRhKFwidGV4dC9odG1sXCIsbS5pbm5lckhUTUwpLGUuc2V0RGF0YShcInRleHQvcGxhaW5cIixWTyhtKSksbC5vd25lckRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobSksZX19fSx0Lmluc2VydERhdGE9ZnVuY3Rpb24oZSl7dmFyIHIsbyxpPWUuZ2V0RGF0YShcImFwcGxpY2F0aW9uL3gtc2xhdGUtZnJhZ21lbnRcIik7aWYoaSl7dmFyIGE9ZGVjb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5hdG9iKGkpKSx1PUpTT04ucGFyc2UoYSk7dC5pbnNlcnRGcmFnbWVudCh1KX1lbHNle3ZhciBzPWUuZ2V0RGF0YShcInRleHQvcGxhaW5cIiksbD1lLmdldERhdGEoXCJ0ZXh0L2h0bWxcIik7aWYobCl0LmRhbmdlcm91c2x5SW5zZXJ0SHRtbChsKTtlbHNlIGlmKHMpe3ZhciBjPXMuc3BsaXQoL1xcclxcbnxcXHJ8XFxuLyksZj0hMTt0cnl7Zm9yKHZhciBkPWlBKGMpLHA9ZC5uZXh0KCk7IXAuZG9uZTtwPWQubmV4dCgpKXt2YXIgaD1wLnZhbHVlO2YmJm1kLnNwbGl0Tm9kZXModCx7YWx3YXlzOiEwfSksbihoKSxmPSEwfX1jYXRjaChlKXtyPXtlcnJvcjplfX1maW5hbGx5e3RyeXtwJiYhcC5kb25lJiYobz1kLnJldHVybikmJm8uY2FsbChkKX1maW5hbGx5e2lmKHIpdGhyb3cgci5lcnJvcn19fX19LHR9LHFGPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lfSxLRj17b2JqZWN0OiEwLGZ1bmN0aW9uOiEwLHVuZGVmaW5lZDohMH0sWUY9L15cXHMqY2xhc3NbXFxzey99XS8sWEY9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLFpGPWZ1bmN0aW9uKGUpe3JldHVybiEhZnVuY3Rpb24oZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSlyZXR1cm4hMTtpZighaGFzT3duUHJvcGVydHkuY2FsbChlLFwibGVuZ3RoXCIpKXJldHVybiExO3RyeXtpZihcIm51bWJlclwiIT10eXBlb2YgZS5sZW5ndGgpcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZS5jYWxsKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUuYXBwbHkpcmV0dXJuITF9Y2F0Y2goZSl7cmV0dXJuITF9cmV0dXJuIWZ1bmN0aW9uKGUpe2lmKCFmdW5jdGlvbihlKXtyZXR1cm4hIXFGKGUpJiZoYXNPd25Qcm9wZXJ0eS5jYWxsKEtGLHR5cGVvZiBlKX0oZSkpcmV0dXJuITE7dHJ5e3JldHVybiEhZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU9PT1lfWNhdGNoKGUpe3JldHVybiExfX0oZSl9KGUpJiYhWUYudGVzdChYRi5jYWxsKGUpKX0sSkY9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWV9LFFGPU9iamVjdC5rZXlzLGVUPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3Qua2V5cyhcInByaW1pdGl2ZVwiKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KCk/T2JqZWN0LmtleXM6ZnVuY3Rpb24oZSl7cmV0dXJuIFFGKEpGKGUpP09iamVjdChlKTplKX0sdFQ9ZnVuY3Rpb24oZSl7aWYoIUpGKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBlfSxuVD1NYXRoLm1heCxyVD1mdW5jdGlvbigpe3ZhciBlLHQ9T2JqZWN0LmFzc2lnbjtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYodChlPXtmb286XCJyYXpcIn0se2JhcjpcImR3YVwifSx7dHJ6eTpcInRyenlcIn0pLGUuZm9vK2UuYmFyK2UudHJ6eT09PVwicmF6ZHdhdHJ6eVwiKX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGk9blQoYXJndW1lbnRzLmxlbmd0aCwyKTtmb3IoZT1PYmplY3QodFQoZSkpLG89ZnVuY3Rpb24ocil7dHJ5e2Vbcl09dFtyXX1jYXRjaChlKXtufHwobj1lKX19LHI9MTtyPGk7KytyKWVUKHQ9YXJndW1lbnRzW3JdKS5mb3JFYWNoKG8pO2lmKHZvaWQgMCE9PW4pdGhyb3cgbjtyZXR1cm4gZX0sb1Q9QXJyYXkucHJvdG90eXBlLmZvckVhY2gsaVQ9T2JqZWN0LmNyZWF0ZSxhVD1mdW5jdGlvbihlLHQpe3ZhciBuO2ZvcihuIGluIGUpdFtuXT1lW25dfSx1VD1mdW5jdGlvbihlKXt2YXIgdD1pVChudWxsKTtyZXR1cm4gb1QuY2FsbChhcmd1bWVudHMsKGZ1bmN0aW9uKGUpe0pGKGUpJiZhVChPYmplY3QoZSksdCl9KSksdH0sc1Q9XCJyYXpkd2F0cnp5XCIsbFQ9U3RyaW5nLnByb3RvdHlwZS5pbmRleE9mLGNUPVwiZnVuY3Rpb25cIj09dHlwZW9mIHNULmNvbnRhaW5zJiYhMD09PXNULmNvbnRhaW5zKFwiZHdhXCIpJiYhMT09PXNULmNvbnRhaW5zKFwiZm9vXCIpP1N0cmluZy5wcm90b3R5cGUuY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIGxULmNhbGwodGhpcyxlLGFyZ3VtZW50c1sxXSk+LTF9LGZUPWl3KChmdW5jdGlvbihlKXt2YXIgdD1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8saSxhO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDJ8fFwic3RyaW5nXCIhPXR5cGVvZiBlPyhpPXQsdD1lLGU9bnVsbCk6aT1hcmd1bWVudHNbMl0scUYoZSk/KG49Y1QuY2FsbChlLFwiY1wiKSxyPWNULmNhbGwoZSxcImVcIiksbz1jVC5jYWxsKGUsXCJ3XCIpKToobj1vPSEwLHI9ITEpLGE9e3ZhbHVlOnQsY29uZmlndXJhYmxlOm4sZW51bWVyYWJsZTpyLHdyaXRhYmxlOm99LGk/clQodVQoaSksYSk6YX07dC5ncz1mdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpLGE7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGU/KGk9bixuPXQsdD1lLGU9bnVsbCk6aT1hcmd1bWVudHNbM10scUYodCk/WkYodCk/cUYobik/WkYobil8fChpPW4sbj12b2lkIDApOm49dm9pZCAwOihpPXQsdD1uPXZvaWQgMCk6dD12b2lkIDAscUYoZSk/KHI9Y1QuY2FsbChlLFwiY1wiKSxvPWNULmNhbGwoZSxcImVcIikpOihyPSEwLG89ITEpLGE9e2dldDp0LHNldDpuLGNvbmZpZ3VyYWJsZTpyLGVudW1lcmFibGU6b30saT9yVCh1VChpKSxhKTphfX0pKSxkVD1mdW5jdGlvbihlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoZStcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtyZXR1cm4gZX0scFQ9aXcoKGZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGksYSx1LHMsbD1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHksYz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxmPU9iamVjdC5jcmVhdGUsZD1PYmplY3QuZGVmaW5lUHJvcGVydHkscD1PYmplY3QuZGVmaW5lUHJvcGVydGllcyxoPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZz17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITB9O249ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gZFQodCksaC5jYWxsKHRoaXMsXCJfX2VlX19cIik/bj10aGlzLl9fZWVfXzoobj1nLnZhbHVlPWYobnVsbCksZCh0aGlzLFwiX19lZV9fXCIsZyksZy52YWx1ZT1udWxsKSxuW2VdP1wib2JqZWN0XCI9PXR5cGVvZiBuW2VdP25bZV0ucHVzaCh0KTpuW2VdPVtuW2VdLHRdOm5bZV09dCx0aGlzfSxyPWZ1bmN0aW9uKGUsdCl7dmFyIHIsaTtyZXR1cm4gZFQodCksaT10aGlzLG4uY2FsbCh0aGlzLGUscj1mdW5jdGlvbigpe28uY2FsbChpLGUsciksbC5jYWxsKHQsdGhpcyxhcmd1bWVudHMpfSksci5fX2VlT25jZUxpc3RlbmVyX189dCx0aGlzfSxvPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGk7aWYoZFQodCksIWguY2FsbCh0aGlzLFwiX19lZV9fXCIpKXJldHVybiB0aGlzO2lmKCEobj10aGlzLl9fZWVfXylbZV0pcmV0dXJuIHRoaXM7aWYoXCJvYmplY3RcIj09dHlwZW9mKHI9bltlXSkpZm9yKGk9MDtvPXJbaV07KytpKW8hPT10JiZvLl9fZWVPbmNlTGlzdGVuZXJfXyE9PXR8fCgyPT09ci5sZW5ndGg/bltlXT1yW2k/MDoxXTpyLnNwbGljZShpLDEpKTtlbHNlIHIhPT10JiZyLl9fZWVPbmNlTGlzdGVuZXJfXyE9PXR8fGRlbGV0ZSBuW2VdO3JldHVybiB0aGlzfSxpPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGk7aWYoaC5jYWxsKHRoaXMsXCJfX2VlX19cIikmJihvPXRoaXMuX19lZV9fW2VdKSlpZihcIm9iamVjdFwiPT10eXBlb2Ygbyl7Zm9yKG49YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShuLTEpLHQ9MTt0PG47Kyt0KWlbdC0xXT1hcmd1bWVudHNbdF07Zm9yKG89by5zbGljZSgpLHQ9MDtyPW9bdF07Kyt0KWwuY2FsbChyLHRoaXMsaSl9ZWxzZSBzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOmMuY2FsbChvLHRoaXMpO2JyZWFrO2Nhc2UgMjpjLmNhbGwobyx0aGlzLGFyZ3VtZW50c1sxXSk7YnJlYWs7Y2FzZSAzOmMuY2FsbChvLHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSk7YnJlYWs7ZGVmYXVsdDpmb3Iobj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KG4tMSksdD0xO3Q8bjsrK3QpaVt0LTFdPWFyZ3VtZW50c1t0XTtsLmNhbGwobyx0aGlzLGkpfX0sYT17b246bixvbmNlOnIsb2ZmOm8sZW1pdDppfSx1PXtvbjpmVChuKSxvbmNlOmZUKHIpLG9mZjpmVChvKSxlbWl0OmZUKGkpfSxzPXAoe30sdSksZS5leHBvcnRzPXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/ZihzKTpwKE9iamVjdChlKSx1KX0sdC5tZXRob2RzPWF9KSk7ZnVuY3Rpb24gaFQoZSl7dmFyIHQ9a08uZ2V0KGUpO3JldHVybiBudWxsPT10JiYodD1wVCgpLGtPLnNldChlLHQpKSx0fXZhciBnVD1uZXcgV2Vha01hcDtmdW5jdGlvbiB2VChlLHQpe3ZhciBuPWdULmdldChlKTtudWxsPT1uJiYobj1uZXcgU2V0LGdULnNldChlLG4pKSxuLmFkZCh0KX1mdW5jdGlvbiB5VChlKXtyZXR1cm4gZ1QuZ2V0KGUpfHxuZXcgU2V0fWZ1bmN0aW9uIG1UKGUpe2dULnNldChlLG5ldyBTZXQpfWZ1bmN0aW9uIGJUKGUpe3ZhciB0PVFPLmdldFRleHRhcmVhKGUpLiR0ZXh0QXJlYUNvbnRhaW5lcixuPXQud2lkdGgoKSxyPXQuaGVpZ2h0KCksbz10Lm9mZnNldCgpO3JldHVybnt0b3A6by50b3AsbGVmdDpvLmxlZnQsd2lkdGg6bixoZWlnaHQ6cn19ZnVuY3Rpb24gd1QoZSl7dmFyIHQ9e3RvcDpcIjBcIixsZWZ0OlwiMFwifSxuPWUuc2VsZWN0aW9uO2lmKG51bGw9PW4pcmV0dXJuIHQ7dmFyIHI9YlQoZSk7aWYobnVsbD09cilyZXR1cm4gdDt2YXIgbz1yLnRvcCxpPXIubGVmdCxhPXIud2lkdGgsdT1yLmhlaWdodCxzPVFPLnRvRE9NUmFuZ2UoZSxuKS5nZXRDbGllbnRSZWN0cygpWzBdO2lmKG51bGw9PXMpcmV0dXJuIHQ7cy53aWR0aDt2YXIgbD1zLmhlaWdodCxjPXt9LGY9cy50b3AtbyxkPXMubGVmdC1pO2lmKGQ+YS8yKXt2YXIgcD1hLWQ7Yy5yaWdodD1wKzUrXCJweFwifWVsc2UgYy5sZWZ0PWQrNStcInB4XCI7aWYoZj51LzIpe3ZhciBoPXUtZjtjLmJvdHRvbT1oKzUrXCJweFwifWVsc2V7dmFyIGc9ZitsO2c8MCYmKGc9MCksYy50b3A9Zys1K1wicHhcIn1yZXR1cm4gY31mdW5jdGlvbiBFVChlLHQsbil7dm9pZCAwPT09biYmKG49XCJtb2RhbFwiKTt2YXIgcj17dG9wOlwiMFwiLGxlZnQ6XCIwXCJ9O2lmKG51bGw9PWUuc2VsZWN0aW9uKXJldHVybiByO3ZhciBvPVNmLmlzRWxlbWVudCh0KSYmZS5pc1ZvaWQodCksaT1TZi5pc0VsZW1lbnQodCkmJmUuaXNJbmxpbmUodCksYT1TTy5nZXQodCk7aWYobnVsbD09YSlyZXR1cm4gcjt2YXIgdT1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9dS50b3AsbD11LmxlZnQsYz11LmhlaWdodCxmPXUud2lkdGg7aWYobyl7dmFyIGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9W107dC5wdXNoKGUpO2Zvcih2YXIgbj0wO3QubGVuZ3RoPjA7KXt2YXIgcj10LnBvcCgpO2lmKG51bGw9PXIpYnJlYWs7aWYoKytuPjFlNClicmVhazt2YXIgbz1yLm5vZGVOYW1lO2lmKDE9PT1yLm5vZGVUeXBlKXt2YXIgaT1vLnRvTG93ZXJDYXNlKCk7aWYoX08uaW5jbHVkZXMoaSl8fFwiaWZyYW1lXCI9PT1pfHxcInZpZGVvXCI9PT1pKXJldHVybiByO3ZhciBhPXIuY2hpbGRyZW58fFtdLHU9YS5sZW5ndGg7aWYodSlmb3IodmFyIHM9dS0xO3M+PTA7cy0tKXQucHVzaChhW3NdKX19cmV0dXJuIG51bGx9KGEpO2lmKG51bGwhPWQpe3ZhciBwPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cz1wLnRvcCxjPXAuaGVpZ2h0fX12YXIgaD1iVChlKTtpZihudWxsPT1oKXJldHVybiByO3ZhciBnLHY9aC50b3AseT1oLmxlZnQsbT1oLndpZHRoLGI9aC5oZWlnaHQsdz17fSxFPXMtdixEPWwteTtpZihcImJhclwiPT09bilyZXR1cm4gdy5sZWZ0PUQrXCJweFwiLEU+NDA/dy5ib3R0b209Yi1FKzUrXCJweFwiOncudG9wPUUrYys1K1wicHhcIix3O2lmKFwibW9kYWxcIj09PW4pcmV0dXJuIG8/aT9EPihtLWYpLzI/dy5yaWdodD1tLUQrNStcInB4XCI6dy5sZWZ0PUQrZis1K1wicHhcIjp3LmxlZnQ9XCIyMHB4XCI6dy5sZWZ0PUQrXCJweFwiLG8/KChnPUUpPDAmJihnPTApLHcudG9wPWcrXCJweFwiKTpFPihiLWMpLzI/dy5ib3R0b209Yi1FKzUrXCJweFwiOigoZz1FK2MpPDAmJihnPTApLHcudG9wPWcrNStcInB4XCIpLHc7dGhyb3cgbmV3IEVycm9yKFwidHlwZSAnXCIrbitcIicgaXMgaW52YWxpZFwiKX1mdW5jdGlvbiBEVChlLHQpe1pCKChmdW5jdGlvbigpe3ZhciBuPWJUKGUpO2lmKG51bGwhPW4pe3ZhciByLG89bi50b3AsaT1uLmxlZnQsYT1uLndpZHRoLHU9bi5oZWlnaHQscz10Lm9mZnNldCgpLGw9cy50b3AsYz1zLmxlZnQsZj10LndpZHRoKCksZD10LmhlaWdodCgpLHA9bC1vLGg9Yy1pLGc9dC5hdHRyKFwic3R5bGVcIik7aWYoZy5pbmRleE9mKFwidG9wXCIpPj0wJiYocj1wK2QtdSk+MCl7dmFyIHY9dC5jc3MoXCJ0b3BcIikseT1wYXJzZUludCh2LnRvU3RyaW5nKCkpLXI7eTwwJiYoeT0wKSx0LmNzcyhcInRvcFwiLHkrXCJweFwiKX1pZihnLmluZGV4T2YoXCJib3R0b21cIik+PTAmJmw8MCl7dmFyIG09dC5jc3MoXCJib3R0b21cIiksYj1wYXJzZUludChtLnRvU3RyaW5nKCkpLU1hdGguYWJzKGwpO3QuY3NzKFwiYm90dG9tXCIsYitcInB4XCIpfWlmKGcuaW5kZXhPZihcImxlZnRcIik+PTAmJihyPWgrZi1hKT4wKXt2YXIgdz10LmNzcyhcImxlZnRcIiksRT1wYXJzZUludCh3LnRvU3RyaW5nKCkpLXI7RTwwJiYoRT0wKSx0LmNzcyhcImxlZnRcIixFK1wicHhcIil9aWYoZy5pbmRleE9mKFwicmlnaHRcIik+PTAmJmM8MCl7dmFyIEQ9dC5jc3MoXCJyaWdodFwiKSxTPXBhcnNlSW50KEQudG9TdHJpbmcoKSktTWF0aC5hYnMoYyk7dC5jc3MoXCJyaWdodFwiLFMrXCJweFwiKX19fSkpfXZhciBTVD1pQyhcInNsaWNlXCIpLHhUPVd3KFwic3BlY2llc1wiKSxDVD1sdy5BcnJheSxBVD1NYXRoLm1heDtjUyh7dGFyZ2V0OlwiQXJyYXlcIixwcm90bzohMCxmb3JjZWQ6IVNUfSx7c2xpY2U6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8saT1SRCh0aGlzKSxhPXBEKGkpLHU9VkQoZSxhKSxzPVZEKHZvaWQgMD09PXQ/YTp0LGEpO2lmKGhEKGkpJiYobj1pLmNvbnN0cnVjdG9yLChERChuKSYmKG49PT1DVHx8aEQobi5wcm90b3R5cGUpKXx8WXcobikmJm51bGw9PT0obj1uW3hUXSkpJiYobj12b2lkIDApLG49PT1DVHx8dm9pZCAwPT09bikpcmV0dXJuIE9rKGksdSxzKTtmb3Iocj1uZXcodm9pZCAwPT09bj9DVDpuKShBVChzLXUsMCkpLG89MDt1PHM7dSsrLG8rKyl1IGluIGkmJnR4KHIsbyxpW3VdKTtyZXR1cm4gci5sZW5ndGg9byxyfX0pO3ZhciBPVD16RC5mLGtUPW13KFwiXCIuc3RhcnRzV2l0aCksQlQ9bXcoXCJcIi5zbGljZSksRlQ9TWF0aC5taW4sVFQ9V1MoXCJzdGFydHNXaXRoXCIpLF9UPSFUVCYmISFmdW5jdGlvbigpe3ZhciBlPU9UKFN0cmluZy5wcm90b3R5cGUsXCJzdGFydHNXaXRoXCIpO3JldHVybiBlJiYhZS53cml0YWJsZX0oKTtjUyh7dGFyZ2V0OlwiU3RyaW5nXCIscHJvdG86ITAsZm9yY2VkOiFfVCYmIVRUfSx7c3RhcnRzV2l0aDpmdW5jdGlvbihlKXt2YXIgdD1iUyh3dyh0aGlzKSk7VlMoZSk7dmFyIG49ZEQoRlQoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdC5sZW5ndGgpKSxyPWJTKGUpO3JldHVybiBrVD9rVCh0LHIsbik6QlQodCxuLG4rci5sZW5ndGgpPT09cn19KTt2YXIgUFQ9T2JqZWN0LmFzc2lnbixqVD1PYmplY3QuZGVmaW5lUHJvcGVydHksTlQ9bXcoW10uY29uY2F0KSxJVD0hUFR8fFJ3KChmdW5jdGlvbigpe2lmKEt3JiYxIT09UFQoe2I6MX0sUFQoalQoe30sXCJhXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7alQodGhpcyxcImJcIix7dmFsdWU6MyxlbnVtZXJhYmxlOiExfSl9fSkse2I6Mn0pKS5iKXJldHVybiEwO3ZhciBlPXt9LHQ9e30sbj1TeW1ib2woKSxyPVwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIjtyZXR1cm4gZVtuXT03LHIuc3BsaXQoXCJcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dFtlXT1lfSkpLDchPVBUKHt9LGUpW25dfHxmUyhQVCh7fSx0KSkuam9pbihcIlwiKSE9cn0pKT9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1EdyhlKSxyPWFyZ3VtZW50cy5sZW5ndGgsbz0xLGk9SkQuZixhPUxELmY7cj5vOylmb3IodmFyIHUscz11RChhcmd1bWVudHNbbysrXSksbD1pP05UKGZTKHMpLGkocykpOmZTKHMpLGM9bC5sZW5ndGgsZj0wO2M+ZjspdT1sW2YrK10sS3cmJiFvRShhLHMsdSl8fChuW3VdPXNbdV0pO3JldHVybiBufTpQVDtjUyh7dGFyZ2V0OlwiT2JqZWN0XCIsc3RhdDohMCxmb3JjZWQ6T2JqZWN0LmFzc2lnbiE9PUlUfSx7YXNzaWduOklUfSk7dmFyIExUPVtcInByb3BzXCIsXCJhdHRyc1wiLFwic3R5bGVcIixcImRhdGFzZXRcIixcIm9uXCIsXCJob29rXCJdO2Z1bmN0aW9uIFJUKGUpe3ZhciB0PWUuZGF0YSxuPXZvaWQgMD09PXQ/e306dCxyPWUuY2hpbGRyZW4sbz12b2lkIDA9PT1yP1tdOnI7T2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHIsbyxpPW5bdF07aWYoXCJrZXlcIiE9PXQpe2lmKCFMVC5pbmNsdWRlcyh0KSl7aWYodC5zdGFydHNXaXRoKFwiZGF0YS1cIikpe3ZhciBhPXQuc2xpY2UoNSk7cmV0dXJuIGE9Q3YoYSksZnVuY3Rpb24oZSx0KXtudWxsPT1lLmRhdGEmJihlLmRhdGE9e30pO3ZhciBuPWUuZGF0YTtudWxsPT1uLmRhdGFzZXQmJihuLmRhdGFzZXQ9e30pLE9iamVjdC5hc3NpZ24obi5kYXRhc2V0LHQpfShlLCgocj17fSlbYV09aSxyKSksdm9pZCBkZWxldGUgblt0XX0hZnVuY3Rpb24oZSx0KXtudWxsPT1lLmRhdGEmJihlLmRhdGE9e30pO3ZhciBuPWUuZGF0YTtudWxsPT1uLnByb3BzJiYobi5wcm9wcz17fSksT2JqZWN0LmFzc2lnbihuLnByb3BzLHQpfShlLChvPXt9LG9bdF09aSxvKSksZGVsZXRlIG5bdF19fWVsc2UgZS5rZXk9aX0pKSxvLmxlbmd0aD4wJiZvLmZvckVhY2goKGZ1bmN0aW9uKGUpe1wic3RyaW5nXCIhPXR5cGVvZiBlJiZSVChlKX0pKX12YXIgTVQ9W107dmFyIHpUPXt9O2Z1bmN0aW9uICRUKGUsdCxuKXtyZXR1cm4gUGcobi5pc0lubGluZShlKT9cInNwYW5cIjpcImRpdlwiLG51bGwsdCl9ZnVuY3Rpb24gSFQoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITEpLFBnKFwic3BhblwiLHtcImRhdGEtc2xhdGUtc3RyaW5nXCI6ITB9LHQ/ZStcIlxcblwiOmUpfWZ1bmN0aW9uIFZUKGUsdCl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PXQmJih0PSExKSxQZyhcInNwYW5cIix7XCJkYXRhLXNsYXRlLXplcm8td2lkdGhcIjp0P1wiblwiOlwielwiLFwiZGF0YS1zbGF0ZS1sZW5ndGhcIjplfSxcIlxcdWZlZmZcIix0P1BnKFwiYnJcIixudWxsKTpudWxsKX1mdW5jdGlvbiBVVChlLHQsbixyKXtyZXR1cm4gbU8uc2V0KGUsdCksYk8uc2V0KGUsbiksU2YuaXNFbGVtZW50KGUpP2Z1bmN0aW9uKGUsdCl7dmFyIG4scj1RTy5maW5kS2V5KHQsZSksbz10LmlzSW5saW5lKGUpLGk9QmYuaXNWb2lkKHQsZSksYT1RQihyLmlkKSx1PXtpZDphLGtleTpyLmlkLFwiZGF0YS1zbGF0ZS1ub2RlXCI6XCJlbGVtZW50XCIsXCJkYXRhLXNsYXRlLWlubGluZVwiOm99LHM9ZS50eXBlLGw9ZS5jaGlsZHJlbixjPXZvaWQgMD09PWw/W106bCxmPWZ1bmN0aW9uKGUpe3JldHVybiB6VFtlXXx8JFR9KHMpO249aT9udWxsOmMubWFwKChmdW5jdGlvbihuLHIpe3JldHVybiBVVChuLHIsZSx0KX0pKTt2YXIgZD1mKGUsbix0KTtpZihpKXt1W1wiZGF0YS1zbGF0ZS12b2lkXCJdPSEwO3ZhciBwPW8/XCJzcGFuXCI6XCJkaXZcIixoPWFBKE5mLnRleHRzKGUpLDEpLGc9YUEoaFswXSwxKVswXSx2PVBnKHAse1wiZGF0YS1zbGF0ZS1zcGFjZXJcIjohMCxzdHlsZTp7aGVpZ2h0OlwiMFwiLGNvbG9yOlwidHJhbnNwYXJlbnRcIixvdXRsaW5lOlwibm9uZVwiLHBvc2l0aW9uOlwiYWJzb2x1dGVcIn19LFVUKGcsMCxlLHQpKTtkPVBnKHAse3N0eWxlOntwb3NpdGlvbjpcInJlbGF0aXZlXCJ9fSxkLHYpLG1PLnNldChnLDApLGJPLnNldChnLGUpfXJldHVybiBudWxsPT1kLmRhdGEmJihkLmRhdGE9e30pLE9iamVjdC5hc3NpZ24oZC5kYXRhLHUpLGl8fG98fChkPWZ1bmN0aW9uKGUsdCl7dmFyIG49dDtyZXR1cm4gTVQuZm9yRWFjaCgoZnVuY3Rpb24ocil7bj1yKGUsdCl9KSksbn0oZSxkKSksWkIoKGZ1bmN0aW9uKCl7dmFyIHQ9ek8oYSk7bnVsbCE9dCYmKERPLnNldChyLHQpLFNPLnNldChlLHQpLEVPLnNldCh0LGUpKX0pKSxkfShlLHIpOmZ1bmN0aW9uKGUsdCxuKXtpZihudWxsPT1lLnRleHQpdGhyb3cgbmV3IEVycm9yKFwiQ3VycmVudCBub2RlIGlzIG5vdCBzbGF0ZSBUZXh0IFwiK0pTT04uc3RyaW5naWZ5KGUpKTt2YXIgcj1RTy5maW5kS2V5KG4sZSksbz1uLmdldENvbmZpZygpLmRlY29yYXRlO2lmKG51bGw9PW8pdGhyb3cgbmV3IEVycm9yKFwiQ2FuIG5vdCBnZXQgY29uZmlnLmRlY29yYXRlXCIpO3ZhciBpPVFPLmZpbmRQYXRoKG4sZSksYT1vKFtlLGldKSx1PWVkLmRlY29yYXRpb25zKGUsYSkscz11Lm1hcCgoZnVuY3Rpb24ocixvKXt2YXIgaT1mdW5jdGlvbihlLHQsbixyLG8pe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgaT1lLnRleHQsYT1RTy5maW5kUGF0aChvLG4pLHU9TWYucGFyZW50KGEpO2lmKEJmLmlzRWRpdG9yKHIpKXRocm93IG5ldyBFcnJvcihcIlRleHQgbm9kZSBcIitKU09OLnN0cmluZ2lmeShuKStcIiBwYXJlbnQgaXMgRWRpdG9yXCIpO3JldHVybiBvLmlzVm9pZChyKT9WVChOZi5zdHJpbmcocikubGVuZ3RoKTpcIlwiIT09aXx8ci5jaGlsZHJlbltyLmNoaWxkcmVuLmxlbmd0aC0xXSE9PW58fG8uaXNJbmxpbmUocil8fFwiXCIhPT1CZi5zdHJpbmcobyx1KT9cIlwiPT09aT9WVCgpOnQmJlwiXFxuXCI9PT1pLnNsaWNlKC0xKT9IVChpLCEwKTpIVChpKTpWVCgwLCEwKX0ocixvPT09dS5sZW5ndGgtMSxlLHQsbik7cmV0dXJuIGk9ZnVuY3Rpb24oZSx0KXt2YXIgbj10O3JldHVybiBNVC5mb3JFYWNoKChmdW5jdGlvbih0KXtuPXQoZSxuKX0pKSxufShyLGkpLFBnKFwic3BhblwiLHtcImRhdGEtc2xhdGUtbGVhZlwiOiEwfSxpKX0pKSxsPWZ1bmN0aW9uKGUpe3JldHVyblwidy1lLXRleHQtXCIrZX0oci5pZCksYz1QZyhcInNwYW5cIix7XCJkYXRhLXNsYXRlLW5vZGVcIjpcInRleHRcIixpZDpsLGtleTpyLmlkfSxzKTtyZXR1cm4gWkIoKGZ1bmN0aW9uKCl7dmFyIHQ9ek8obCk7bnVsbCE9dCYmKERPLnNldChyLHQpLFNPLnNldChlLHQpLEVPLnNldCh0LGUpKX0pKSxjfShlLG4scil9ZnVuY3Rpb24gV1QoZSx0KXt2YXIgbixyPWUuJHNjcm9sbCxvPWZ1bmN0aW9uKGUpe3JldHVyblwidy1lLXRleHRhcmVhLVwiK2V9KGUuaWQpLGk9dC5nZXRDb25maWcoKSxhPWkucmVhZE9ubHksdT1pLmF1dG9Gb2N1cyxzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSExKSxwZyhcImRpdiNcIitlLHtwcm9wczp7Y29udGVudEVkaXRhYmxlOiF0fX0pfShvLGEpLGw9dC5jaGlsZHJlbnx8W107cy5jaGlsZHJlbj1sLm1hcCgoZnVuY3Rpb24oZSxuKXt2YXIgcj1VVChlLG4sdCx0KTtyZXR1cm4gUlQocikscn0pKTt2YXIgYz1nTy5nZXQoZSk7aWYobnVsbD09YyYmKGM9ITApLGMpe3ZhciBmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1wKCc8ZGl2XFxuICAgICAgICBpZD1cIicrZSsnXCJcXG4gICAgICAgIGRhdGEtc2xhdGUtZWRpdG9yXFxuICAgICAgICBkYXRhLXNsYXRlLW5vZGU9XCJ2YWx1ZVwiXFxuICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcXG4gICAgICAgIHJvbGU9XCJ0ZXh0YXJlYVwiXFxuICAgICAgICBzcGVsbENoZWNrPVwidHJ1ZVwiXFxuICAgICAgICBhdXRvQ29ycmVjdD1cInRydWVcIlxcbiAgICAgICAgYXV0b0NhcGl0YWxpemU9XCJ0cnVlXCJcXG4gICAgPjwvZGl2PicpfShvKTtyLmFwcGVuZChmKSxlLiR0ZXh0QXJlYT1mLG49ZlswXSwocD1mZyhbeWcsQWcsVGcsd2cseGcsZ2ddKSkobixzKSxnTy5zZXQoZSwhMSksdk8uc2V0KGUscCl9ZWxzZXt2YXIgZD15Ty5nZXQoZSkscD12Ty5nZXQoZSk7aWYobnVsbD09ZHx8bnVsbD09cClyZXR1cm47bj1kLmVsbSxwKGQscyl9aWYobnVsbCE9bnx8bnVsbCE9KG49ek8obykpKXtpZigoYz91OnQuaXNGb2N1c2VkKCkpJiZuLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksYyl7dmFyIGg9Tk8obik7aCYmQ08uc2V0KHQsaCl9d08uc2V0KHQsbiksU08uc2V0KHQsbiksRU8uc2V0KG4sdCkseU8uc2V0KGUscyl9fWZ1bmN0aW9uIEdUKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT1lJiYxPT09ZS5ub2RlVHlwZX1mdW5jdGlvbiBxVChlLHQpe3JldHVybighdHx8XCJoaWRkZW5cIiE9PWUpJiZcInZpc2libGVcIiE9PWUmJlwiY2xpcFwiIT09ZX1mdW5jdGlvbiBLVChlLHQpe2lmKGUuY2xpZW50SGVpZ2h0PGUuc2Nyb2xsSGVpZ2h0fHxlLmNsaWVudFdpZHRoPGUuc2Nyb2xsV2lkdGgpe3ZhciBuPWdldENvbXB1dGVkU3R5bGUoZSxudWxsKTtyZXR1cm4gcVQobi5vdmVyZmxvd1ksdCl8fHFUKG4ub3ZlcmZsb3dYLHQpfHxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXtpZighZS5vd25lckRvY3VtZW50fHwhZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KXJldHVybiBudWxsO3RyeXtyZXR1cm4gZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmZyYW1lRWxlbWVudH1jYXRjaChlKXtyZXR1cm4gbnVsbH19KGUpO3JldHVybiEhdCYmKHQuY2xpZW50SGVpZ2h0PGUuc2Nyb2xsSGVpZ2h0fHx0LmNsaWVudFdpZHRoPGUuc2Nyb2xsV2lkdGgpfShlKX1yZXR1cm4hMX1mdW5jdGlvbiBZVChlLHQsbixyLG8saSxhLHUpe3JldHVybiBpPGUmJmE+dHx8aT5lJiZhPHQ/MDppPD1lJiZ1PD1ufHxhPj10JiZ1Pj1uP2ktZS1yOmE+dCYmdTxufHxpPGUmJnU+bj9hLXQrbzowfWZ1bmN0aW9uIFhUKGUsdCl7dmFyIG49d2luZG93LHI9dC5zY3JvbGxNb2RlLG89dC5ibG9jayxpPXQuaW5saW5lLGE9dC5ib3VuZGFyeSx1PXQuc2tpcE92ZXJmbG93SGlkZGVuRWxlbWVudHMscz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBhP2E6ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1hfTtpZighR1QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgdGFyZ2V0XCIpO2Zvcih2YXIgbD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1bXSxmPWU7R1QoZikmJnMoZik7KXtpZigoZj1mLnBhcmVudEVsZW1lbnQpPT09bCl7Yy5wdXNoKGYpO2JyZWFrfW51bGwhPWYmJmY9PT1kb2N1bWVudC5ib2R5JiZLVChmKSYmIUtUKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl8fG51bGwhPWYmJktUKGYsdSkmJmMucHVzaChmKX1mb3IodmFyIGQ9bi52aXN1YWxWaWV3cG9ydD9uLnZpc3VhbFZpZXdwb3J0LndpZHRoOmlubmVyV2lkdGgscD1uLnZpc3VhbFZpZXdwb3J0P24udmlzdWFsVmlld3BvcnQuaGVpZ2h0OmlubmVySGVpZ2h0LGg9d2luZG93LnNjcm9sbFh8fHBhZ2VYT2Zmc2V0LGc9d2luZG93LnNjcm9sbFl8fHBhZ2VZT2Zmc2V0LHY9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx5PXYuaGVpZ2h0LG09di53aWR0aCxiPXYudG9wLHc9di5yaWdodCxFPXYuYm90dG9tLEQ9di5sZWZ0LFM9XCJzdGFydFwiPT09b3x8XCJuZWFyZXN0XCI9PT1vP2I6XCJlbmRcIj09PW8/RTpiK3kvMix4PVwiY2VudGVyXCI9PT1pP0QrbS8yOlwiZW5kXCI9PT1pP3c6RCxDPVtdLEE9MDtBPGMubGVuZ3RoO0ErKyl7dmFyIE89Y1tBXSxrPU8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksQj1rLmhlaWdodCxGPWsud2lkdGgsVD1rLnRvcCxfPWsucmlnaHQsUD1rLmJvdHRvbSxqPWsubGVmdDtpZihcImlmLW5lZWRlZFwiPT09ciYmYj49MCYmRD49MCYmRTw9cCYmdzw9ZCYmYj49VCYmRTw9UCYmRD49aiYmdzw9XylyZXR1cm4gQzt2YXIgTj1nZXRDb21wdXRlZFN0eWxlKE8pLEk9cGFyc2VJbnQoTi5ib3JkZXJMZWZ0V2lkdGgsMTApLEw9cGFyc2VJbnQoTi5ib3JkZXJUb3BXaWR0aCwxMCksUj1wYXJzZUludChOLmJvcmRlclJpZ2h0V2lkdGgsMTApLE09cGFyc2VJbnQoTi5ib3JkZXJCb3R0b21XaWR0aCwxMCksej0wLCQ9MCxIPVwib2Zmc2V0V2lkdGhcImluIE8/Ty5vZmZzZXRXaWR0aC1PLmNsaWVudFdpZHRoLUktUjowLFY9XCJvZmZzZXRIZWlnaHRcImluIE8/Ty5vZmZzZXRIZWlnaHQtTy5jbGllbnRIZWlnaHQtTC1NOjA7aWYobD09PU8pej1cInN0YXJ0XCI9PT1vP1M6XCJlbmRcIj09PW8/Uy1wOlwibmVhcmVzdFwiPT09bz9ZVChnLGcrcCxwLEwsTSxnK1MsZytTK3kseSk6Uy1wLzIsJD1cInN0YXJ0XCI9PT1pP3g6XCJjZW50ZXJcIj09PWk/eC1kLzI6XCJlbmRcIj09PWk/eC1kOllUKGgsaCtkLGQsSSxSLGgreCxoK3grbSxtKSx6PU1hdGgubWF4KDAseitnKSwkPU1hdGgubWF4KDAsJCtoKTtlbHNle3o9XCJzdGFydFwiPT09bz9TLVQtTDpcImVuZFwiPT09bz9TLVArTStWOlwibmVhcmVzdFwiPT09bz9ZVChULFAsQixMLE0rVixTLFMreSx5KTpTLShUK0IvMikrVi8yLCQ9XCJzdGFydFwiPT09aT94LWotSTpcImNlbnRlclwiPT09aT94LShqK0YvMikrSC8yOlwiZW5kXCI9PT1pP3gtXytSK0g6WVQoaixfLEYsSSxSK0gseCx4K20sbSk7dmFyIFU9Ty5zY3JvbGxMZWZ0LFc9Ty5zY3JvbGxUb3A7Uys9Vy0oej1NYXRoLm1heCgwLE1hdGgubWluKFcreixPLnNjcm9sbEhlaWdodC1CK1YpKSkseCs9VS0oJD1NYXRoLm1heCgwLE1hdGgubWluKFUrJCxPLnNjcm9sbFdpZHRoLUYrSCkpKX1DLnB1c2goe2VsOk8sdG9wOnosbGVmdDokfSl9cmV0dXJuIEN9ZnVuY3Rpb24gWlQoZSl7cmV0dXJuIGU9PT1PYmplY3QoZSkmJjAhPT1PYmplY3Qua2V5cyhlKS5sZW5ndGh9ZnVuY3Rpb24gSlQoZSx0KXtyZXR1cm4gTE8odCkmJlFPLmhhc0RPTU5vZGUoZSx0LHtlZGl0YWJsZTohMH0pfWZ1bmN0aW9uIFFUKGUsdCl7aWYoZS5nZXRDb25maWcoKS5yZWFkT25seSlyZXR1cm4hMTt2YXIgbj1lXyhlLHQpJiZRTy50b1NsYXRlTm9kZShlLHQpO3JldHVybiBCZi5pc1ZvaWQoZSxuKX1mdW5jdGlvbiBlXyhlLHQpe3JldHVybiBMTyh0KSYmUU8uaGFzRE9NTm9kZShlLHQpfWZ1bmN0aW9uIHRfKGUsdCxuKXt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIHI9dC5zZWxlY3Rpb24sbz10LmdldENvbmZpZygpLGk9UU8uZmluZERvY3VtZW50T3JTaGFkb3dSb290KHQpLmdldFNlbGVjdGlvbigpO2lmKGkmJighZS5pc0NvbXBvc2luZ3x8bikmJnQuaXNGb2N1c2VkKCkpe3ZhciBhPVwiTm9uZVwiIT09aS50eXBlO2lmKHJ8fGEpe3ZhciB1PXdPLmdldCh0KSxzPSExO2lmKHUuY29udGFpbnMoaS5hbmNob3JOb2RlKSYmdS5jb250YWlucyhpLmZvY3VzTm9kZSkmJihzPSEwKSxhJiZzJiZyKXt2YXIgbD1RTy50b1NsYXRlUmFuZ2UodCxpLHtleGFjdE1hdGNoOiEwLHN1cHByZXNzVGhyb3c6ITB9KTtpZihsJiZxZi5lcXVhbHMobCxyKSl7dmFyIGM9ITA7aWYocWYuaXNDb2xsYXBzZWQocikpe3ZhciBmPWkuYW5jaG9yTm9kZSxkPWkuYW5jaG9yT2Zmc2V0O2lmKGY9PT11KXt2YXIgcD11LmNoaWxkTm9kZXMsaD12b2lkIDA7KGg9cFtkXSkmJmgubWF0Y2hlcyhcInRhYmxlXCIpJiYoYz0hMSksKGg9cFtkLTFdKSYmaC5tYXRjaGVzKFwidGFibGVcIikmJihjPSExKX19aWYoYylyZXR1cm59fWlmKCFyfHxRTy5oYXNSYW5nZSh0LHIpKXtlLmlzVXBkYXRpbmdTZWxlY3Rpb249ITA7dmFyIGc9ciYmUU8udG9ET01SYW5nZSh0LHIpO2lmKGcpe3FmLmlzQmFja3dhcmQocik/aS5zZXRCYXNlQW5kRXh0ZW50KGcuZW5kQ29udGFpbmVyLGcuZW5kT2Zmc2V0LGcuc3RhcnRDb250YWluZXIsZy5zdGFydE9mZnNldCk6aS5zZXRCYXNlQW5kRXh0ZW50KGcuc3RhcnRDb250YWluZXIsZy5zdGFydE9mZnNldCxnLmVuZENvbnRhaW5lcixnLmVuZE9mZnNldCk7dmFyIHY9Zy5zdGFydENvbnRhaW5lci5wYXJlbnRFbGVtZW50O2lmKCF2LmNsb3Nlc3QoXCJbZGF0YS1zbGF0ZS1zcGFjZXJdXCIpKXt2LmdldEJvdW5kaW5nQ2xpZW50UmVjdD1nLmdldEJvdW5kaW5nQ2xpZW50UmVjdC5iaW5kKGcpO3ZhciB5PWRvY3VtZW50LmJvZHk7KGZ1bmN0aW9uKGUsdCl7dmFyIG49IWUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMoZSk7aWYoWlQodCkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuYmVoYXZpb3IpcmV0dXJuIHQuYmVoYXZpb3Iobj9bXTpYVChlLHQpKTtpZighbil7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuITE9PT1lP3tibG9jazpcImVuZFwiLGlubGluZTpcIm5lYXJlc3RcIn06WlQoZSk/ZTp7YmxvY2s6XCJzdGFydFwiLGlubGluZTpcIm5lYXJlc3RcIn19KHQpOyhmdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PVwiYXV0b1wiKTt2YXIgbj1cInNjcm9sbEJlaGF2aW9yXCJpbiBkb2N1bWVudC5ib2R5LnN0eWxlO2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZS5lbCxvPWUudG9wLGk9ZS5sZWZ0O3Iuc2Nyb2xsJiZuP3Iuc2Nyb2xsKHt0b3A6byxsZWZ0OmksYmVoYXZpb3I6dH0pOihyLnNjcm9sbFRvcD1vLHIuc2Nyb2xsTGVmdD1pKX0pKX0pKFhUKGUsciksci5iZWhhdmlvcil9fSkodix7c2Nyb2xsTW9kZTpcImlmLW5lZWRlZFwiLGJvdW5kYXJ5Om8uc2Nyb2xsP3UucGFyZW50RWxlbWVudDp5LGJsb2NrOlwiZW5kXCIsYmVoYXZpb3I6XCJzbW9vdGhcIn0pLGRlbGV0ZSB2LmdldEJvdW5kaW5nQ2xpZW50UmVjdH19ZWxzZSBpLnJlbW92ZUFsbFJhbmdlcygpO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZyYmcU8mJnUuZm9jdXMoKSxlLmlzVXBkYXRpbmdTZWxlY3Rpb249ITF9KSl9ZWxzZSB0LnNlbGVjdGlvbj1RTy50b1NsYXRlUmFuZ2UodCxpLHtleGFjdE1hdGNoOiExLHN1cHByZXNzVGhyb3c6ITF9KX19fXZhciBuXz1uZXcgV2Vha01hcCxyXz1uZXcgV2Vha01hcCxvXz17Ym9sZDpcIm1vZCtiXCIsY29tcG9zZTpbXCJkb3duXCIsXCJsZWZ0XCIsXCJyaWdodFwiLFwidXBcIixcImJhY2tzcGFjZVwiLFwiZW50ZXJcIl0sbW92ZUJhY2t3YXJkOlwibGVmdFwiLG1vdmVGb3J3YXJkOlwicmlnaHRcIixtb3ZlV29yZEJhY2t3YXJkOlwiY3RybCtsZWZ0XCIsbW92ZVdvcmRGb3J3YXJkOlwiY3RybCtyaWdodFwiLGRlbGV0ZUJhY2t3YXJkOlwic2hpZnQ/K2JhY2tzcGFjZVwiLGRlbGV0ZUZvcndhcmQ6XCJzaGlmdD8rZGVsZXRlXCIsZXh0ZW5kQmFja3dhcmQ6XCJzaGlmdCtsZWZ0XCIsZXh0ZW5kRm9yd2FyZDpcInNoaWZ0K3JpZ2h0XCIsaXRhbGljOlwibW9kK2lcIixzcGxpdEJsb2NrOlwic2hpZnQ/K2VudGVyXCIsdW5kbzpcIm1vZCt6XCIsdGFiOlwidGFiXCIsc2VsZWN0QWxsOlwibW9kK2FcIn0saV89e21vdmVMaW5lQmFja3dhcmQ6XCJvcHQrdXBcIixtb3ZlTGluZUZvcndhcmQ6XCJvcHQrZG93blwiLG1vdmVXb3JkQmFja3dhcmQ6XCJvcHQrbGVmdFwiLG1vdmVXb3JkRm9yd2FyZDpcIm9wdCtyaWdodFwiLGRlbGV0ZUJhY2t3YXJkOltcImN0cmwrYmFja3NwYWNlXCIsXCJjdHJsK2hcIl0sZGVsZXRlRm9yd2FyZDpbXCJjdHJsK2RlbGV0ZVwiLFwiY3RybCtkXCJdLGRlbGV0ZUxpbmVCYWNrd2FyZDpcImNtZCtzaGlmdD8rYmFja3NwYWNlXCIsZGVsZXRlTGluZUZvcndhcmQ6W1wiY21kK3NoaWZ0PytkZWxldGVcIixcImN0cmwra1wiXSxkZWxldGVXb3JkQmFja3dhcmQ6XCJvcHQrc2hpZnQ/K2JhY2tzcGFjZVwiLGRlbGV0ZVdvcmRGb3J3YXJkOlwib3B0K3NoaWZ0PytkZWxldGVcIixleHRlbmRMaW5lQmFja3dhcmQ6XCJvcHQrc2hpZnQrdXBcIixleHRlbmRMaW5lRm9yd2FyZDpcIm9wdCtzaGlmdCtkb3duXCIscmVkbzpcImNtZCtzaGlmdCt6XCIsdHJhbnNwb3NlQ2hhcmFjdGVyOlwiY3RybCt0XCJ9LGFfPXtkZWxldGVXb3JkQmFja3dhcmQ6XCJjdHJsK3NoaWZ0PytiYWNrc3BhY2VcIixkZWxldGVXb3JkRm9yd2FyZDpcImN0cmwrc2hpZnQ/K2RlbGV0ZVwiLHJlZG86W1wiY3RybCt5XCIsXCJjdHJsK3NoaWZ0K3pcIl19LHVfPWZ1bmN0aW9uKGUpe3ZhciB0PW9fW2VdLG49aV9bZV0scj1hX1tlXSxvPXQmJk52KHQpLGk9biYmTnYobiksYT1yJiZOdihyKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuISghb3x8IW8oZSkpfHwhIShHTyYmaSYmaShlKSl8fCEoR098fCFhfHwhYShlKSl9fSxzXz17aXNCb2xkOnVfKFwiYm9sZFwiKSxpc0NvbXBvc2U6dV8oXCJjb21wb3NlXCIpLGlzTW92ZUJhY2t3YXJkOnVfKFwibW92ZUJhY2t3YXJkXCIpLGlzTW92ZUZvcndhcmQ6dV8oXCJtb3ZlRm9yd2FyZFwiKSxpc0RlbGV0ZUJhY2t3YXJkOnVfKFwiZGVsZXRlQmFja3dhcmRcIiksaXNEZWxldGVGb3J3YXJkOnVfKFwiZGVsZXRlRm9yd2FyZFwiKSxpc0RlbGV0ZUxpbmVCYWNrd2FyZDp1XyhcImRlbGV0ZUxpbmVCYWNrd2FyZFwiKSxpc0RlbGV0ZUxpbmVGb3J3YXJkOnVfKFwiZGVsZXRlTGluZUZvcndhcmRcIiksaXNEZWxldGVXb3JkQmFja3dhcmQ6dV8oXCJkZWxldGVXb3JkQmFja3dhcmRcIiksaXNEZWxldGVXb3JkRm9yd2FyZDp1XyhcImRlbGV0ZVdvcmRGb3J3YXJkXCIpLGlzRXh0ZW5kQmFja3dhcmQ6dV8oXCJleHRlbmRCYWNrd2FyZFwiKSxpc0V4dGVuZEZvcndhcmQ6dV8oXCJleHRlbmRGb3J3YXJkXCIpLGlzRXh0ZW5kTGluZUJhY2t3YXJkOnVfKFwiZXh0ZW5kTGluZUJhY2t3YXJkXCIpLGlzRXh0ZW5kTGluZUZvcndhcmQ6dV8oXCJleHRlbmRMaW5lRm9yd2FyZFwiKSxpc0l0YWxpYzp1XyhcIml0YWxpY1wiKSxpc01vdmVMaW5lQmFja3dhcmQ6dV8oXCJtb3ZlTGluZUJhY2t3YXJkXCIpLGlzTW92ZUxpbmVGb3J3YXJkOnVfKFwibW92ZUxpbmVGb3J3YXJkXCIpLGlzTW92ZVdvcmRCYWNrd2FyZDp1XyhcIm1vdmVXb3JkQmFja3dhcmRcIiksaXNNb3ZlV29yZEZvcndhcmQ6dV8oXCJtb3ZlV29yZEZvcndhcmRcIiksaXNSZWRvOnVfKFwicmVkb1wiKSxpc1NwbGl0QmxvY2s6dV8oXCJzcGxpdEJsb2NrXCIpLGlzVHJhbnNwb3NlQ2hhcmFjdGVyOnVfKFwidHJhbnNwb3NlQ2hhcmFjdGVyXCIpLGlzVW5kbzp1XyhcInVuZG9cIiksaXNUYWI6dV8oXCJ0YWJcIiksaXNTZWxlY3RBbGw6dV8oXCJzZWxlY3RBbGxcIil9O2Z1bmN0aW9uIGxfKGUpe2UucHJldmVudERlZmF1bHQoKX12YXIgY189e2JlZm9yZWlucHV0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLG89bi5nZXRDb25maWcoKS5yZWFkT25seTtpZihKTyYmIW8mJkpUKG4sci50YXJnZXQpKXt2YXIgaT1uLnNlbGVjdGlvbixhPXIuaW5wdXRUeXBlLHU9ci5kYXRhVHJhbnNmZXJ8fHIuZGF0YXx8dm9pZCAwO2lmKFwiaW5zZXJ0Q29tcG9zaXRpb25UZXh0XCIhPT1hJiZcImRlbGV0ZUNvbXBvc2l0aW9uVGV4dFwiIT09YSl7aWYoci5wcmV2ZW50RGVmYXVsdCgpLCFhLnN0YXJ0c1dpdGgoXCJkZWxldGVcIil8fGEuc3RhcnRzV2l0aChcImRlbGV0ZUJ5XCIpKXt2YXIgcz1hQShyLmdldFRhcmdldFJhbmdlcygpLDEpWzBdO2lmKHMpe3ZhciBsPVFPLnRvU2xhdGVSYW5nZShuLHMse2V4YWN0TWF0Y2g6ITEsc3VwcHJlc3NUaHJvdzohMX0pO2kmJnFmLmVxdWFscyhpLGwpfHxtZC5zZWxlY3QobixsKX19aWYoaSYmcWYuaXNFeHBhbmRlZChpKSYmYS5zdGFydHNXaXRoKFwiZGVsZXRlXCIpKXt2YXIgYz1hLmVuZHNXaXRoKFwiQmFja3dhcmRcIik/XCJiYWNrd2FyZFwiOlwiZm9yd2FyZFwiO0JmLmRlbGV0ZUZyYWdtZW50KG4se2RpcmVjdGlvbjpjfSl9ZWxzZSBzd2l0Y2goYSl7Y2FzZVwiZGVsZXRlQnlDb21wb3NpdGlvblwiOmNhc2VcImRlbGV0ZUJ5Q3V0XCI6Y2FzZVwiZGVsZXRlQnlEcmFnXCI6QmYuZGVsZXRlRnJhZ21lbnQobik7YnJlYWs7Y2FzZVwiZGVsZXRlQ29udGVudFwiOmNhc2VcImRlbGV0ZUNvbnRlbnRGb3J3YXJkXCI6QmYuZGVsZXRlRm9yd2FyZChuKTticmVhaztjYXNlXCJkZWxldGVDb250ZW50QmFja3dhcmRcIjpCZi5kZWxldGVCYWNrd2FyZChuKTticmVhaztjYXNlXCJkZWxldGVFbnRpcmVTb2Z0TGluZVwiOkJmLmRlbGV0ZUJhY2t3YXJkKG4se3VuaXQ6XCJsaW5lXCJ9KSxCZi5kZWxldGVGb3J3YXJkKG4se3VuaXQ6XCJsaW5lXCJ9KTticmVhaztjYXNlXCJkZWxldGVIYXJkTGluZUJhY2t3YXJkXCI6QmYuZGVsZXRlQmFja3dhcmQobix7dW5pdDpcImJsb2NrXCJ9KTticmVhaztjYXNlXCJkZWxldGVTb2Z0TGluZUJhY2t3YXJkXCI6QmYuZGVsZXRlQmFja3dhcmQobix7dW5pdDpcImxpbmVcIn0pO2JyZWFrO2Nhc2VcImRlbGV0ZUhhcmRMaW5lRm9yd2FyZFwiOkJmLmRlbGV0ZUZvcndhcmQobix7dW5pdDpcImJsb2NrXCJ9KTticmVhaztjYXNlXCJkZWxldGVTb2Z0TGluZUZvcndhcmRcIjpCZi5kZWxldGVGb3J3YXJkKG4se3VuaXQ6XCJsaW5lXCJ9KTticmVhaztjYXNlXCJkZWxldGVXb3JkQmFja3dhcmRcIjpCZi5kZWxldGVCYWNrd2FyZChuLHt1bml0Olwid29yZFwifSk7YnJlYWs7Y2FzZVwiZGVsZXRlV29yZEZvcndhcmRcIjpCZi5kZWxldGVGb3J3YXJkKG4se3VuaXQ6XCJ3b3JkXCJ9KTticmVhaztjYXNlXCJpbnNlcnRMaW5lQnJlYWtcIjpjYXNlXCJpbnNlcnRQYXJhZ3JhcGhcIjpCZi5pbnNlcnRCcmVhayhuKTticmVhaztjYXNlXCJpbnNlcnRGcm9tRHJvcFwiOmNhc2VcImluc2VydEZyb21QYXN0ZVwiOmNhc2VcImluc2VydEZyb21ZYW5rXCI6Y2FzZVwiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0XCI6Y2FzZVwiaW5zZXJ0VGV4dFwiOmlmKFwiaW5zZXJ0RnJvbVBhc3RlXCI9PT1hJiYhQk8uZ2V0KG4pKWJyZWFrO3UgaW5zdGFuY2VvZiBEYXRhVHJhbnNmZXI/bi5pbnNlcnREYXRhKHUpOlwic3RyaW5nXCI9PXR5cGVvZiB1JiZCZi5pbnNlcnRUZXh0KG4sdSl9fX19LGJsdXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUsbz10LmlzVXBkYXRpbmdTZWxlY3Rpb24saT10LmxhdGVzdEVsZW1lbnQ7aWYoIW4uZ2V0Q29uZmlnKCkucmVhZE9ubHkmJiFvJiZKVChuLHIudGFyZ2V0KSl7dmFyIGE9UU8uZmluZERvY3VtZW50T3JTaGFkb3dSb290KG4pO2lmKGkhPT1hLmFjdGl2ZUVsZW1lbnQpe3ZhciB1PXIucmVsYXRlZFRhcmdldDtpZighKHU9PT1RTy50b0RPTU5vZGUobixuKXx8SU8odSkmJnUuaGFzQXR0cmlidXRlKFwiZGF0YS1zbGF0ZS1zcGFjZXJcIikpKXtpZihudWxsIT11JiZMTyh1KSYmUU8uaGFzRE9NTm9kZShuLHUpKXt2YXIgcz1RTy50b1NsYXRlTm9kZShuLHUpO2lmKFNmLmlzRWxlbWVudChzKSYmIW4uaXNWb2lkKHMpKXJldHVybn1pZihLTyl7dmFyIGw9YS5nZXRTZWxlY3Rpb24oKTtudWxsPT1sfHxsLnJlbW92ZUFsbFJhbmdlcygpfUFPLmRlbGV0ZShuKX19fX0sZm9jdXM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVFPLnRvRE9NTm9kZShuLG4pLG89UU8uZmluZERvY3VtZW50T3JTaGFkb3dSb290KG4pO3QubGF0ZXN0RWxlbWVudD1vLmFjdGl2ZUVsZW1lbnQscU8mJmUudGFyZ2V0IT09cj9yLmZvY3VzKCk6QU8uc2V0KG4sITApfSxjbGljazpmdW5jdGlvbihlLHQsbil7aWYoIW4uZ2V0Q29uZmlnKCkucmVhZE9ubHkmJmVfKG4sZS50YXJnZXQpJiZMTyhlLnRhcmdldCkpe3ZhciByPVFPLnRvU2xhdGVOb2RlKG4sZS50YXJnZXQpLG89UU8uZmluZFBhdGgobixyKTtpZihCZi5oYXNQYXRoKG4sbykmJk5mLmdldChuLG8pPT09cil7dmFyIGk9QmYuc3RhcnQobixvKSxhPUJmLmVuZChuLG8pLHU9QmYudm9pZChuLHthdDppfSkscz1CZi52b2lkKG4se2F0OmF9KTtpZih1JiZzJiZNZi5lcXVhbHModVsxXSxzWzFdKSl7dmFyIGw9QmYucmFuZ2UobixpKTttZC5zZWxlY3QobixsKX19fX0sY29tcG9zaXRpb25zdGFydDpmdW5jdGlvbihlLHQsbil7aWYoSlQobixlLnRhcmdldCkpe3ZhciByPW4uc2VsZWN0aW9uO2lmKHImJnFmLmlzRXhwYW5kZWQocikmJihCZi5kZWxldGVGcmFnbWVudChuKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKChmdW5jdGlvbigpe3RfKHQsbiwhMCl9KSkpLHImJnFmLmlzQ29sbGFwc2VkKHIpKXt2YXIgbz1RTy50b0RPTVJhbmdlKG4scikuc3RhcnRDb250YWluZXIsaT1vLnRleHRDb250ZW50fHxcIlwiO25fLnNldChuLGkpLHJfLnNldChuLG8pfXQuaXNDb21wb3Npbmc9ITAsZnVuY3Rpb24oZSx0KXt2YXIgbjt0LmdldENvbmZpZygpLnBsYWNlaG9sZGVyJiZ0LmlzRW1wdHkoKSYmZS5zaG93UGxhY2Vob2xkZXImJihudWxsPT09KG49ZS4kcGxhY2Vob2xkZXIpfHx2b2lkIDA9PT1ufHxuLmhpZGUoKSxlLnNob3dQbGFjZWhvbGRlcj0hMSl9KHQsbil9fSxjb21wb3NpdGlvbmVuZDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZTtpZihKVChuLHIudGFyZ2V0KSl7dC5pc0NvbXBvc2luZz0hMTt2YXIgbz1uLnNlbGVjdGlvbjtpZihudWxsIT1vKXsoWk98fHFPKSYmUU8uY2xlYW5FeHBvc2VkVGV4Tm9kZUluU2VsZWN0aW9uQmxvY2sobik7Zm9yKHZhciBpPXFmLmlzQmFja3dhcmQobyk/by5mb2N1czpvLmFuY2hvcixhPWFBKEJmLm5vZGUobixbaS5wYXRoWzBdXSksMSlbMF0sdT0wO3U8aS5wYXRoLmxlbmd0aDt1Kyspe3ZhciBzPWFBKEJmLm5vZGUobixpLnBhdGguc2xpY2UoMCx1KzEpKSwxKVswXTtpZihTZi5pc0VsZW1lbnQocykmJigoS098fHFPKSYmXCJsaW5rXCI9PT1zLnR5cGV8fFwiY29kZVwiPT09cy50eXBlKSl7UU8uc2V0TmV3S2V5KGEpO2JyZWFrfX12YXIgbD1yLmRhdGE7aWYobCl7aWYobi5nZXRDb25maWcoKS5tYXhMZW5ndGgpe3ZhciBjPVFPLmdldExlZnRMZW5ndGhPZk1heExlbmd0aChuKTtjPGwubGVuZ3RoPyhRTy50b0RPTVJhbmdlKG4sbykuc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQ9bl8uZ2V0KG4pfHxcIlwiLGM+MCYmQmYuaW5zZXJ0VGV4dChuLGwuc2xpY2UoMCxjKSksdC5jaGFuZ2VWaWV3U3RhdGUoKSk6QmYuaW5zZXJ0VGV4dChuLGwpfWVsc2UgQmYuaW5zZXJ0VGV4dChuLGwpO0tPfHxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0aW9uO2lmKG51bGwhPWUpe3ZhciB0PXJfLmdldChuKTtudWxsIT10JiZRTy50b0RPTVJhbmdlKG4sZSkuc3RhcnRDb250YWluZXIhPT10JiYodC50ZXh0Q29udGVudD1uXy5nZXQobil8fFwiXCIpfX0pKX19fX0sY29tcG9zaXRpb251cGRhdGU6ZnVuY3Rpb24oZSx0LG4pe0pUKG4sZS50YXJnZXQpJiYodC5pc0NvbXBvc2luZz0hMCl9LGtleWRvd246ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUsbz1uLnNlbGVjdGlvbjtpZighbi5nZXRDb25maWcoKS5yZWFkT25seSYmIXQuaXNDb21wb3NpbmcmJkpUKG4sci50YXJnZXQpKXtpZihmdW5jdGlvbihlLHQpe3ZhciBuPXNPLmdldChlKSxyPW4mJm4uZ2V0TWVudXMoKSxvPWNPLmdldChlKSxpPW8mJm8uZ2V0TWVudXMoKSxhPW9BKG9BKHt9LHIpLGkpO2Zvcih2YXIgdSBpbiBhKXt2YXIgcz1hW3VdLGw9cy5ob3RrZXk7aWYobCYmanYobCx0KSYmIXMuaXNEaXNhYmxlZChlKSl7dmFyIGM9cy5nZXRWYWx1ZShlKTtzLmV4ZWMoZSxjKX19fShuLHIpLHNfLmlzVGFiKHIpKXJldHVybiBsXyhyKSx2b2lkIG4uaGFuZGxlVGFiKCk7aWYoc18uaXNSZWRvKHIpKXJldHVybiBsXyhyKSx2b2lkKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4ucmVkbyYmbi5yZWRvKCkpO2lmKHNfLmlzVW5kbyhyKSlyZXR1cm4gbF8ociksdm9pZChcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnVuZG8mJm4udW5kbygpKTtpZihzXy5pc01vdmVMaW5lQmFja3dhcmQocikpcmV0dXJuIGxfKHIpLHZvaWQgbWQubW92ZShuLHt1bml0OlwibGluZVwiLHJldmVyc2U6ITB9KTtpZihzXy5pc01vdmVMaW5lRm9yd2FyZChyKSlyZXR1cm4gbF8ociksdm9pZCBtZC5tb3ZlKG4se3VuaXQ6XCJsaW5lXCJ9KTtpZihzXy5pc0V4dGVuZExpbmVCYWNrd2FyZChyKSlyZXR1cm4gbF8ociksdm9pZCBtZC5tb3ZlKG4se3VuaXQ6XCJsaW5lXCIsZWRnZTpcImZvY3VzXCIscmV2ZXJzZTohMH0pO2lmKHNfLmlzRXh0ZW5kTGluZUZvcndhcmQocikpcmV0dXJuIGxfKHIpLHZvaWQgbWQubW92ZShuLHt1bml0OlwibGluZVwiLGVkZ2U6XCJmb2N1c1wifSk7aWYoc18uaXNNb3ZlQmFja3dhcmQocikpcmV0dXJuIGxfKHIpLHZvaWQobyYmcWYuaXNDb2xsYXBzZWQobyk/bWQubW92ZShuLHtyZXZlcnNlOiEwfSk6bWQuY29sbGFwc2Uobix7ZWRnZTpcInN0YXJ0XCJ9KSk7aWYoc18uaXNNb3ZlRm9yd2FyZChyKSlyZXR1cm4gbF8ociksdm9pZChvJiZxZi5pc0NvbGxhcHNlZChvKT9tZC5tb3ZlKG4pOm1kLmNvbGxhcHNlKG4se2VkZ2U6XCJlbmRcIn0pKTtpZihzXy5pc01vdmVXb3JkQmFja3dhcmQocikpcmV0dXJuIGxfKHIpLG8mJnFmLmlzRXhwYW5kZWQobykmJm1kLmNvbGxhcHNlKG4se2VkZ2U6XCJmb2N1c1wifSksdm9pZCBtZC5tb3ZlKG4se3VuaXQ6XCJ3b3JkXCIscmV2ZXJzZTohMH0pO2lmKHNfLmlzTW92ZVdvcmRGb3J3YXJkKHIpKXJldHVybiBsXyhyKSxvJiZxZi5pc0V4cGFuZGVkKG8pJiZtZC5jb2xsYXBzZShuLHtlZGdlOlwiZm9jdXNcIn0pLHZvaWQgbWQubW92ZShuLHt1bml0Olwid29yZFwifSk7aWYoc18uaXNTZWxlY3RBbGwocikpcmV0dXJuIGxfKHIpLHZvaWQgbi5zZWxlY3RBbGwoKTtpZihKTyl7aWYoKFpPfHxLTykmJm8mJihzXy5pc0RlbGV0ZUJhY2t3YXJkKHIpfHxzXy5pc0RlbGV0ZUZvcndhcmQocikpJiZxZi5pc0NvbGxhcHNlZChvKSl7dmFyIGk9TmYucGFyZW50KG4sby5hbmNob3IucGF0aCk7aWYoU2YuaXNFbGVtZW50KGkpJiZCZi5pc1ZvaWQobixpKSYmQmYuaXNJbmxpbmUobixpKSlyZXR1cm4gci5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgbWQuZGVsZXRlKG4se3VuaXQ6XCJibG9ja1wifSl9fWVsc2V7aWYoc18uaXNCb2xkKHIpfHxzXy5pc0l0YWxpYyhyKXx8c18uaXNUcmFuc3Bvc2VDaGFyYWN0ZXIocikpcmV0dXJuIHZvaWQgbF8ocik7aWYoc18uaXNTcGxpdEJsb2NrKHIpKXJldHVybiBsXyhyKSx2b2lkIEJmLmluc2VydEJyZWFrKG4pO2lmKHNfLmlzRGVsZXRlQmFja3dhcmQocikpcmV0dXJuIGxfKHIpLHZvaWQobyYmcWYuaXNFeHBhbmRlZChvKT9CZi5kZWxldGVGcmFnbWVudChuLHtkaXJlY3Rpb246XCJiYWNrd2FyZFwifSk6QmYuZGVsZXRlQmFja3dhcmQobikpO2lmKHNfLmlzRGVsZXRlRm9yd2FyZChyKSlyZXR1cm4gbF8ociksdm9pZChvJiZxZi5pc0V4cGFuZGVkKG8pP0JmLmRlbGV0ZUZyYWdtZW50KG4se2RpcmVjdGlvbjpcImZvcndhcmRcIn0pOkJmLmRlbGV0ZUZvcndhcmQobikpO2lmKHNfLmlzRGVsZXRlTGluZUJhY2t3YXJkKHIpKXJldHVybiBsXyhyKSx2b2lkKG8mJnFmLmlzRXhwYW5kZWQobyk/QmYuZGVsZXRlRnJhZ21lbnQobix7ZGlyZWN0aW9uOlwiYmFja3dhcmRcIn0pOkJmLmRlbGV0ZUJhY2t3YXJkKG4se3VuaXQ6XCJsaW5lXCJ9KSk7aWYoc18uaXNEZWxldGVMaW5lRm9yd2FyZChyKSlyZXR1cm4gbF8ociksdm9pZChvJiZxZi5pc0V4cGFuZGVkKG8pP0JmLmRlbGV0ZUZyYWdtZW50KG4se2RpcmVjdGlvbjpcImZvcndhcmRcIn0pOkJmLmRlbGV0ZUZvcndhcmQobix7dW5pdDpcImxpbmVcIn0pKTtpZihzXy5pc0RlbGV0ZVdvcmRCYWNrd2FyZChyKSlyZXR1cm4gbF8ociksdm9pZChvJiZxZi5pc0V4cGFuZGVkKG8pP0JmLmRlbGV0ZUZyYWdtZW50KG4se2RpcmVjdGlvbjpcImJhY2t3YXJkXCJ9KTpCZi5kZWxldGVCYWNrd2FyZChuLHt1bml0Olwid29yZFwifSkpO2lmKHNfLmlzRGVsZXRlV29yZEZvcndhcmQocikpcmV0dXJuIGxfKHIpLHZvaWQobyYmcWYuaXNFeHBhbmRlZChvKT9CZi5kZWxldGVGcmFnbWVudChuLHtkaXJlY3Rpb246XCJmb3J3YXJkXCJ9KTpCZi5kZWxldGVGb3J3YXJkKG4se3VuaXQ6XCJ3b3JkXCJ9KSl9fX0sa2V5cHJlc3M6ZnVuY3Rpb24oZSx0LG4pe2lmKCFKTyYmIW4uZ2V0Q29uZmlnKCkucmVhZE9ubHkmJkpUKG4sZS50YXJnZXQpKXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIHI9ZS5rZXk7QmYuaW5zZXJ0VGV4dChuLHIpfX0sY29weTpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZTtpZihKVChuLHIudGFyZ2V0KSl7ci5wcmV2ZW50RGVmYXVsdCgpO3ZhciBvPXIuY2xpcGJvYXJkRGF0YTtudWxsIT1vJiZuLnNldEZyYWdtZW50RGF0YShvKX19LGN1dDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSxvPW4uc2VsZWN0aW9uO2lmKCFuLmdldENvbmZpZygpLnJlYWRPbmx5JiZKVChuLHIudGFyZ2V0KSl7ci5wcmV2ZW50RGVmYXVsdCgpO3ZhciBpPXIuY2xpcGJvYXJkRGF0YTtpZihudWxsIT1pJiYobi5zZXRGcmFnbWVudERhdGEoaSksbykpaWYocWYuaXNFeHBhbmRlZChvKSlCZi5kZWxldGVGcmFnbWVudChuKTtlbHNle3ZhciBhPU5mLnBhcmVudChuLG8uYW5jaG9yLnBhdGgpO0JmLmlzVm9pZChuLGEpJiZtZC5kZWxldGUobil9fX0scGFzdGU6ZnVuY3Rpb24oZSx0LG4pe0JPLnNldChuLCEwKTt2YXIgcj1lO2lmKCFuLmdldENvbmZpZygpLnJlYWRPbmx5JiZKVChuLHIudGFyZ2V0KSl7dmFyIG89bi5nZXRDb25maWcoKS5jdXN0b21QYXN0ZTtpZihvJiYhMT09PW8obixyKSlyZXR1cm4gdm9pZCBCTy5zZXQobiwhMSk7aWYoIUpPfHxmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGlwYm9hcmREYXRhJiZcIlwiIT09ZS5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpJiYxPT09ZS5jbGlwYm9hcmREYXRhLnR5cGVzLmxlbmd0aH0ocikpe3IucHJldmVudERlZmF1bHQoKTt2YXIgaT1yLmNsaXBib2FyZERhdGE7bnVsbCE9aSYmbi5pbnNlcnREYXRhKGkpfX19LGRyYWdvdmVyOmZ1bmN0aW9uKGUsdCxuKXtpZihlXyhuLGUudGFyZ2V0KSl7dmFyIHI9UU8udG9TbGF0ZU5vZGUobixlLnRhcmdldCk7QmYuaXNWb2lkKG4scikmJmUucHJldmVudERlZmF1bHQoKX19LGRyYWdzdGFydDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZTtpZihlXyhuLHIudGFyZ2V0KSYmIW4uZ2V0Q29uZmlnKCkucmVhZE9ubHkpe3ZhciBvPVFPLnRvU2xhdGVOb2RlKG4sci50YXJnZXQpLGk9UU8uZmluZFBhdGgobixvKTtpZihCZi5pc1ZvaWQobixvKXx8QmYudm9pZChuLHthdDppLHZvaWRzOiEwfSkpe3ZhciBhPUJmLnJhbmdlKG4saSk7bWQuc2VsZWN0KG4sYSl9dmFyIHU9ci5kYXRhVHJhbnNmZXI7bnVsbCE9dSYmKHQuaXNEcmFnZ2luZ0ludGVybmFsbHk9ITAsbi5zZXRGcmFnbWVudERhdGEodSkpfX0sZHJhZ2VuZDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZTtuLmdldENvbmZpZygpLnJlYWRPbmx5fHx0LmlzRHJhZ2dpbmdJbnRlcm5hbGx5JiZlXyhuLHIudGFyZ2V0KSYmKHQuaXNEcmFnZ2luZ0ludGVybmFsbHk9ITEpfSxkcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLG89ci5kYXRhVHJhbnNmZXI7aWYoIW4uZ2V0Q29uZmlnKCkucmVhZE9ubHkmJmVfKG4sci50YXJnZXQpJiZudWxsIT1vJiYhKEpPJiZLTyYmby5maWxlcy5sZW5ndGg+MCkpe3IucHJldmVudERlZmF1bHQoKTt2YXIgaT1uLnNlbGVjdGlvbixhPVFPLmZpbmRFdmVudFJhbmdlKG4scik7bWQuc2VsZWN0KG4sYSksdC5pc0RyYWdnaW5nSW50ZXJuYWxseSYmKGkmJm1kLmRlbGV0ZShuLHthdDppfSksdC5pc0RyYWdnaW5nSW50ZXJuYWxseT0hMSksbi5pbnNlcnREYXRhKG8pLG4uaXNGb2N1c2VkKCl8fG4uZm9jdXMoKX19fSxmXz0xLGRfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD10aGlzO3RoaXMuaWQ9Zl8rKyx0aGlzLiR0ZXh0QXJlYT1udWxsLHRoaXMuJHByb2dyZXNzQmFyPU1wKCc8ZGl2IGNsYXNzPVwidy1lLXByb2dyZXNzLWJhclwiPjwvZGl2PicpLHRoaXMuJG1heExlbmd0aEluZm89TXAoJzxkaXYgY2xhc3M9XCJ3LWUtbWF4LWxlbmd0aC1pbmZvXCI+PC9kaXY+JyksdGhpcy5pc0NvbXBvc2luZz0hMSx0aGlzLmlzVXBkYXRpbmdTZWxlY3Rpb249ITEsdGhpcy5pc0RyYWdnaW5nSW50ZXJuYWxseT0hMSx0aGlzLmxhdGVzdEVsZW1lbnQ9bnVsbCx0aGlzLnNob3dQbGFjZWhvbGRlcj0hMSx0aGlzLiRwbGFjZWhvbGRlcj1udWxsLHRoaXMubGF0ZXN0RWRpdG9yU2VsZWN0aW9uPW51bGwsdGhpcy5vbkRPTVNlbGVjdGlvbkNoYW5nZT1lZygoZnVuY3Rpb24oKXt2YXIgZT10LmVkaXRvckluc3RhbmNlOyFmdW5jdGlvbihlLHQpe3ZhciBuPWUuaXNDb21wb3Npbmcscj1lLmlzVXBkYXRpbmdTZWxlY3Rpb24sbz1lLmlzRHJhZ2dpbmdJbnRlcm5hbGx5O2lmKCEodC5nZXRDb25maWcoKS5yZWFkT25seXx8bnx8cnx8bykpe3ZhciBpPVFPLmZpbmREb2N1bWVudE9yU2hhZG93Um9vdCh0KSxhPWkuYWN0aXZlRWxlbWVudCx1PVFPLnRvRE9NTm9kZSh0LHQpLHM9aS5nZXRTZWxlY3Rpb24oKTtpZihhPT09dT8oZS5sYXRlc3RFbGVtZW50PWEsQU8uc2V0KHQsITApKTpBTy5kZWxldGUodCksIXMpcmV0dXJuIG1kLmRlc2VsZWN0KHQpO3ZhciBsPXMuYW5jaG9yTm9kZSxjPXMuZm9jdXNOb2RlLGY9SlQodCxsKXx8UVQodCxsKSxkPUpUKHQsYyl8fFFUKHQsYyk7aWYoZiYmZCl7dmFyIHA9UU8udG9TbGF0ZVJhbmdlKHQscyx7ZXhhY3RNYXRjaDohMSxzdXBwcmVzc1Rocm93OiExfSk7bWQuc2VsZWN0KHQscCl9ZWxzZSBtZC5kZXNlbGVjdCh0KX19KHQsZSl9KSwxMDApO3ZhciBuPU1wKGUpO2lmKDA9PT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCB0ZXh0YXJlYSBET00gYnkgc2VsZWN0b3IgJ1wiK2UrXCInXCIpO3RoaXMuJGJveD1uO3ZhciByPU1wKCc8ZGl2IGNsYXNzPVwidy1lLXRleHQtY29udGFpbmVyXCI+PC9kaXY+Jyk7ci5hcHBlbmQodGhpcy4kcHJvZ3Jlc3NCYXIpLHIuYXBwZW5kKHRoaXMuJG1heExlbmd0aEluZm8pLG4uYXBwZW5kKHIpO3ZhciBvPU1wKCc8ZGl2IGNsYXNzPVwidy1lLXNjcm9sbFwiPjwvZGl2PicpO3IuYXBwZW5kKG8pLHRoaXMuJHNjcm9sbD1vLHRoaXMuJHRleHRBcmVhQ29udGFpbmVyPXIsWkIoKGZ1bmN0aW9uKCl7dmFyIGU9dC5lZGl0b3JJbnN0YW5jZSxuPVFPLmdldFdpbmRvdyhlKTtuLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIix0Lm9uRE9NU2VsZWN0aW9uQ2hhbmdlKSxlLm9uKFwiZGVzdHJveWVkXCIsKGZ1bmN0aW9uKCl7bi5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uY2hhbmdlXCIsdC5vbkRPTVNlbGVjdGlvbkNoYW5nZSl9KSksci5vbihcImNsaWNrXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGUuaGlkZVBhbmVsT3JNb2RhbCgpfSkpLGUub24oXCJjaGFuZ2VcIix0LmNoYW5nZVZpZXdTdGF0ZS5iaW5kKHQpKTt2YXIgbz1lLmdldENvbmZpZygpLm9uQ2hhbmdlO28mJmUub24oXCJjaGFuZ2VcIiwoZnVuY3Rpb24oKXtyZXR1cm4gbyhlKX0pKSx0Lm9uRm9jdXNBbmRPbkJsdXIoKSxlLm9uKFwiY2hhbmdlXCIsdC5jaGFuZ2VNYXhMZW5ndGhJbmZvLmJpbmQodCkpLHQuYmluZEV2ZW50KCl9KSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcImVkaXRvckluc3RhbmNlXCIse2dldDpmdW5jdGlvbigpe3ZhciBlPWFPLmdldCh0aGlzKTtpZihudWxsPT1lKXRocm93IG5ldyBFcnJvcihcIkNhbiBub3QgZ2V0IGVkaXRvciBpbnN0YW5jZVwiKTtyZXR1cm4gZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5iaW5kRXZlbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy4kdGV4dEFyZWEsbj10aGlzLiRzY3JvbGwscj10aGlzLmVkaXRvckluc3RhbmNlO251bGwhPXQmJihMaChjXywoZnVuY3Rpb24obixvKXt0Lm9uKG8sKGZ1bmN0aW9uKHQpe24odCxlLHIpfSkpfSkpLHIuZ2V0Q29uZmlnKCkuc2Nyb2xsJiYobi5jc3MoXCJvdmVyZmxvdy15XCIsXCJhdXRvXCIpLG4ub24oXCJzY3JvbGxcIixlZygoZnVuY3Rpb24oKXtyLmVtaXQoXCJzY3JvbGxcIil9KSwxMDApKSkpfSxlLnByb3RvdHlwZS5vbkZvY3VzQW5kT25CbHVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZWRpdG9ySW5zdGFuY2Usbj10LmdldENvbmZpZygpLHI9bi5vbkJsdXIsbz1uLm9uRm9jdXM7dGhpcy5sYXRlc3RFZGl0b3JTZWxlY3Rpb249dC5zZWxlY3Rpb24sdC5vbihcImNoYW5nZVwiLChmdW5jdGlvbigpe251bGw9PWUubGF0ZXN0RWRpdG9yU2VsZWN0aW9uJiZudWxsIT10LnNlbGVjdGlvbj9zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBvJiZvKHQpfSkpOm51bGwhPWUubGF0ZXN0RWRpdG9yU2VsZWN0aW9uJiZudWxsPT10LnNlbGVjdGlvbiYmc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gciYmcih0KX0pKSxlLmxhdGVzdEVkaXRvclNlbGVjdGlvbj10LnNlbGVjdGlvbn0pKX0sZS5wcm90b3R5cGUuY2hhbmdlTWF4TGVuZ3RoSW5mbz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRpdG9ySW5zdGFuY2UsdD1lLmdldENvbmZpZygpLm1heExlbmd0aDtpZih0KXt2YXIgbj10LVFPLmdldExlZnRMZW5ndGhPZk1heExlbmd0aChlKTt0aGlzLiRtYXhMZW5ndGhJbmZvWzBdLmlubmVySFRNTD1uK1wiL1wiK3R9fSxlLnByb3RvdHlwZS5jaGFuZ2VQcm9ncmVzcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLiRwcm9ncmVzc0Jhcjt0LmNzcyhcIndpZHRoXCIsZStcIiVcIiksZT49MTAwJiZzZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuaGlkZSgpLHQuY3NzKFwid2lkdGhcIixcIjBcIiksdC5zaG93KCl9KSwxZTMpfSxlLnByb3RvdHlwZS5jaGFuZ2VWaWV3U3RhdGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5lZGl0b3JJbnN0YW5jZTtXVCh0aGlzLHQpLGZ1bmN0aW9uKGUsdCl7dmFyIG4scj10LmdldENvbmZpZygpLnBsYWNlaG9sZGVyO2lmKHIpe3ZhciBvPXQuaXNFbXB0eSgpO2lmKG8mJiFlLnNob3dQbGFjZWhvbGRlciYmIWUuaXNDb21wb3Npbmcpe2lmKG51bGw9PWUuJHBsYWNlaG9sZGVyKXt2YXIgaT1NcCgnPGRpdiBjbGFzcz1cInctZS10ZXh0LXBsYWNlaG9sZGVyXCI+JytyK1wiPC9kaXY+XCIpO2UuJHRleHRBcmVhQ29udGFpbmVyLmFwcGVuZChpKSxlLiRwbGFjZWhvbGRlcj1pfXJldHVybiBlLiRwbGFjZWhvbGRlci5zaG93KCksdm9pZChlLnNob3dQbGFjZWhvbGRlcj0hMCl9IW8mJmUuc2hvd1BsYWNlaG9sZGVyJiYobnVsbD09PShuPWUuJHBsYWNlaG9sZGVyKXx8dm9pZCAwPT09bnx8bi5oaWRlKCksZS5zaG93UGxhY2Vob2xkZXI9ITEpfX0odGhpcyx0KSxaQigoZnVuY3Rpb24oKXt0XyhlLHQpfSkpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy4kdGV4dEFyZWFDb250YWluZXIucmVtb3ZlKCl9LGV9KCk7ZnVuY3Rpb24gcF8oZSl7ZS5yZW1vdmVBdHRyKFwid2lkdGhcIiksZS5yZW1vdmVBdHRyKFwiaGVpZ2h0XCIpLGUucmVtb3ZlQXR0cihcImZpbGxcIiksZS5yZW1vdmVBdHRyKFwiY2xhc3NcIiksZS5yZW1vdmVBdHRyKFwidFwiKSxlLnJlbW92ZUF0dHIoXCJwLWlkXCIpO3ZhciB0PWUuY2hpbGRyZW4oKTt0Lmxlbmd0aCYmcF8odCl9ZnVuY3Rpb24gaF8oKXtyZXR1cm4gTXAoJzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTQ5OC43IDY1NS44bC0xOTcuNi0yNjhjLTguMS0xMC45LTAuMy0yNi40IDEzLjMtMjYuNGgzOTUuMmMxMy42IDAgMjEuNCAxNS40IDEzLjMgMjYuNGwtMTk3LjYgMjY4Yy02LjYgOS0yMCA5LTI2LjYgMHpcIj48L3BhdGg+PC9zdmc+Jyl9ZnVuY3Rpb24gZ18oKXtyZXR1cm4gTXAoJzxkaXYgY2xhc3M9XCJ3LWUtYmFyLWRpdmlkZXJcIj48L2Rpdj4nKX1mdW5jdGlvbiB2XyhlLHQsbixyLG8pe2lmKHZvaWQgMD09PW8mJihvPSExKSx0KXtpZihyKXt2YXIgaT1HTz9cImNtZFwiOlwiY3RybFwiO3I9ci5yZXBsYWNlKFwibW9kXCIsaSl9aWYobylyJiYoZS5hdHRyKFwiZGF0YS10b29sdGlwXCIsciksZS5hZGRDbGFzcyhcInctZS1tZW51LXRvb2x0aXAtdjVcIiksZS5hZGRDbGFzcyhcInRvb2x0aXAtcmlnaHRcIikpO2Vsc2V7dmFyIGE9cj9uK1wiXFxuXCIrcjpuO2UuYXR0cihcImRhdGEtdG9vbHRpcFwiLGEpLGUuYWRkQ2xhc3MoXCJ3LWUtbWVudS10b29sdGlwLXY1XCIpfX19TkMoXCJtYXRjaFwiLChmdW5jdGlvbihlLHQsbil7cmV0dXJuW2Z1bmN0aW9uKHQpe3ZhciBuPXd3KHRoaXMpLHI9bnVsbD09dD92b2lkIDA6ZEUodCxlKTtyZXR1cm4gcj9vRShyLHQsbik6bmV3IFJlZ0V4cCh0KVtlXShiUyhuKSl9LGZ1bmN0aW9uKGUpe3ZhciByPW5FKHRoaXMpLG89YlMoZSksaT1uKHQscixvKTtpZihpLmRvbmUpcmV0dXJuIGkudmFsdWU7aWYoIXIuZ2xvYmFsKXJldHVybiBHQyhyLG8pO3ZhciBhPXIudW5pY29kZTtyLmxhc3RJbmRleD0wO2Zvcih2YXIgdSxzPVtdLGw9MDtudWxsIT09KHU9R0MocixvKSk7KXt2YXIgYz1iUyh1WzBdKTtzW2xdPWMsXCJcIj09PWMmJihyLmxhc3RJbmRleD1MQyhvLGREKHIubGFzdEluZGV4KSxhKSksbCsrfXJldHVybiAwPT09bD9udWxsOnN9XX0pKTt2YXIgeV89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPSExKSx0aGlzLiRlbGVtPU1wKCc8ZGl2IGNsYXNzPVwidy1lLWJhci1pdGVtXCI+PC9kaXY+JyksdGhpcy4kYnV0dG9uPU1wKCc8YnV0dG9uIHR5cGU9XCJidXR0b25cIj48L2J1dHRvbj4nKSx0aGlzLmRpc2FibGVkPSExLHRoaXMubWVudT10O3ZhciBvPXQudGFnLGk9dC53aWR0aDtpZihcImJ1dHRvblwiIT09byl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhZyAnXCIrbytcIicsIGV4cGVjdGVkICdidXR0b24nXCIpO3ZhciBhPXQudGl0bGUsdT10LmhvdGtleSxzPXZvaWQgMD09PXU/XCJcIjp1LGw9dC5pY29uU3ZnLGM9dm9pZCAwPT09bD9cIlwiOmwsZj10aGlzLiRidXR0b247aWYoYyl7dmFyIGQ9TXAoYyk7cF8oZCksZi5hcHBlbmQoZCl9ZWxzZSBmLnRleHQoYSk7dl8oZixjLGEscyxuKSxuJiZjJiZmLmFwcGVuZChNcCgnPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPicrYStcIjwvc3Bhbj5cIikpLGkmJmYuY3NzKFwid2lkdGhcIixpK1wicHhcIiksZi5hdHRyKFwiZGF0YS1tZW51LWtleVwiLGUpLHRoaXMuJGVsZW0uYXBwZW5kKGYpLFpCKChmdW5jdGlvbigpe3JldHVybiByLmluaXQoKX0pKX1yZXR1cm4gZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5zZXRBY3RpdmUoKSx0aGlzLnNldERpc2FibGVkKCksdGhpcy4kYnV0dG9uLm9uKFwiY2xpY2tcIiwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLFRfKGUpLmhpZGVQYW5lbE9yTW9kYWwoKSxlLmRpc2FibGVkfHwoZS5leGVjKCksZS5vbkJ1dHRvbkNsaWNrKCkpfSkpfSxlLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKCl7dmFyIGU9VF8odGhpcyksdD10aGlzLm1lbnUsbj10LmdldFZhbHVlKGUpO3QuZXhlYyhlLG4pfSxlLnByb3RvdHlwZS5zZXRBY3RpdmU9ZnVuY3Rpb24oKXt2YXIgZT1UXyh0aGlzKSx0PXRoaXMuJGJ1dHRvbixuPVwiYWN0aXZlXCI7dGhpcy5tZW51LmlzQWN0aXZlKGUpP3QuYWRkQ2xhc3Mobik6dC5yZW1vdmVDbGFzcyhuKX0sZS5wcm90b3R5cGUuc2V0RGlzYWJsZWQ9ZnVuY3Rpb24oKXt2YXIgZT1UXyh0aGlzKSx0PXRoaXMuJGJ1dHRvbixuPXRoaXMubWVudS5pc0Rpc2FibGVkKGUpOyhudWxsPT1lLnNlbGVjdGlvbnx8ZS5pc0Rpc2FibGVkKCkpJiYobj0hMCksdGhpcy5tZW51LmFsd2F5c0VuYWJsZSYmKG49ITEpO3ZhciByPVwiZGlzYWJsZWRcIjtuP3QuYWRkQ2xhc3Mocik6dC5yZW1vdmVDbGFzcyhyKSx0aGlzLmRpc2FibGVkPW59LGUucHJvdG90eXBlLmNoYW5nZU1lbnVTdGF0ZT1mdW5jdGlvbigpe3RoaXMuc2V0QWN0aXZlKCksdGhpcy5zZXREaXNhYmxlZCgpfSxlfSgpLG1fPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj0hMSksZS5jYWxsKHRoaXMsdCxuLHIpfHx0aGlzfXJldHVybiByQSh0LGUpLHQucHJvdG90eXBlLm9uQnV0dG9uQ2xpY2s9ZnVuY3Rpb24oKXt9LHR9KHlfKSxiXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pc1Nob3c9ITEsdGhpcy5zaG93VGltZT0wLHRoaXMucmVjb3JkKGUpfXJldHVybiBlLnByb3RvdHlwZS5yZWNvcmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZE8uZ2V0KGUpO251bGw9PXQmJih0PW5ldyBTZXQsZE8uc2V0KGUsdCkpLHQuYWRkKHRoaXMpLHBPLnNldCh0aGlzLGUpfSxlLnByb3RvdHlwZS5yZW5kZXJDb250ZW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJGVsZW07dC5lbXB0eSgpLHQuYXBwZW5kKGUpO3ZhciBuPXRoaXMuZ2VuU2VsZkVsZW0oKTtuJiZ0LmFwcGVuZChuKX0sZS5wcm90b3R5cGUuYXBwZW5kVG89ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kZWxlbTtlLmFwcGVuZCh0KX0sZS5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe2lmKCF0aGlzLmlzU2hvdyl7dGhpcy5zaG93VGltZT1EYXRlLm5vdygpLHRoaXMuJGVsZW0uc2hvdygpLHRoaXMuaXNTaG93PSEwO3ZhciBlPXBPLmdldCh0aGlzKTtlJiZlLmVtaXQoXCJtb2RhbE9yUGFuZWxTaG93XCIsdGhpcyl9fSxlLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1Nob3cmJiEoRGF0ZS5ub3coKS10aGlzLnNob3dUaW1lPDIwMCkpe3RoaXMuJGVsZW0uaGlkZSgpLHRoaXMuaXNTaG93PSExO3ZhciBlPXBPLmdldCh0aGlzKTtlJiZlLmVtaXQoXCJtb2RhbE9yUGFuZWxIaWRlXCIpfX0sZX0oKSx3Xz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3ZhciBuPWUuY2FsbCh0aGlzLHQpfHx0aGlzO3JldHVybiBuLnR5cGU9XCJkcm9wUGFuZWxcIixuLiRlbGVtPU1wKCc8ZGl2IGNsYXNzPVwidy1lLWRyb3AtcGFuZWxcIj48L2Rpdj4nKSxufXJldHVybiByQSh0LGUpLHQucHJvdG90eXBlLmdlblNlbGZFbGVtPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHR9KGJfKSxFXz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixyKXt2b2lkIDA9PT1yJiYocj0hMSk7dmFyIG89ZS5jYWxsKHRoaXMsdCxuLHIpfHx0aGlzO2lmKG8uZHJvcFBhbmVsPW51bGwsby5tZW51PW4sbi5zaG93RHJvcFBhbmVsKXt2YXIgaT1oXygpO28uJGJ1dHRvbi5hcHBlbmQoaSl9cmV0dXJuIG99cmV0dXJuIHJBKHQsZSksdC5wcm90b3R5cGUub25CdXR0b25DbGljaz1mdW5jdGlvbigpe3RoaXMubWVudS5zaG93RHJvcFBhbmVsJiZ0aGlzLmhhbmRsZURyb3BQYW5lbCgpfSx0LnByb3RvdHlwZS5oYW5kbGVEcm9wUGFuZWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1lbnU7aWYobnVsbCE9ZS5nZXRQYW5lbENvbnRlbnRFbGVtKXt2YXIgdD1UXyh0aGlzKTtpZihudWxsPT10aGlzLmRyb3BQYW5lbCl7dmFyIG49bmV3IHdfKHQpLHI9ZS5nZXRQYW5lbENvbnRlbnRFbGVtKHQpO24ucmVuZGVyQ29udGVudChyKSxuLmFwcGVuZFRvKHRoaXMuJGVsZW0pLG4uc2hvdygpLHRoaXMuZHJvcFBhbmVsPW59ZWxzZXt2YXIgbz10aGlzLmRyb3BQYW5lbDtvLmlzU2hvdz9vLmhpZGUoKToocj1lLmdldFBhbmVsQ29udGVudEVsZW0odCksby5yZW5kZXJDb250ZW50KHIpLG8uc2hvdygpKX12YXIgaT10aGlzLmRyb3BQYW5lbDtpZihpLmlzU2hvdyl7dmFyIGE9dGhpcy4kZWxlbSx1PWEub2Zmc2V0KCkubGVmdCxzPWEucGFyZW50cyhcIi53LWUtYmFyXCIpO3Utcy5vZmZzZXQoKS5sZWZ0Pj1zLndpZHRoKCkvMj9pLiRlbGVtLmNzcyh7bGVmdDpcIm5vbmVcIixyaWdodDpcIjBcIn0pOmkuJGVsZW0uY3NzKHtsZWZ0OlwiMFwiLHJpZ2h0Olwibm9uZVwifSl9fX0sdH0oeV8pLERfPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2b2lkIDA9PT1uJiYobj0wKTt2YXIgcj1lLmNhbGwodGhpcyx0KXx8dGhpcztyLnR5cGU9XCJtb2RhbFwiLHIuJGVsZW09TXAoJzxkaXYgY2xhc3M9XCJ3LWUtbW9kYWxcIj48L2Rpdj4nKSxyLndpZHRoPTAsbiYmKHIud2lkdGg9bik7dmFyIG89ci4kZWxlbTtyZXR1cm4gby5vbihcImNsaWNrXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpfSkpLG8ub24oXCJrZXl1cFwiLChmdW5jdGlvbihlKXtcIkVzY2FwZVwiPT09ZS5jb2RlJiYoci5oaWRlKCksdC5yZXN0b3JlU2VsZWN0aW9uKCkpfSkpLHJ9cmV0dXJuIHJBKHQsZSksdC5wcm90b3R5cGUuZ2VuU2VsZkVsZW09ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9TXAoJzxzcGFuIGNsYXNzPVwiYnRuLWNsb3NlXCI+PHN2ZyB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiPjxwYXRoIGQ9XCJNMTAyNCA4OTYuMTAyNGwtMTI4IDEyOEw1MTIgNjQwIDEyOCAxMDI0IDAgODk2IDM4NCA1MTIgMCAxMjggMTI4IDAgNTEyIDM4NCA4OTYuMTAyNCAwbDEyOCAxMjhMNjQwIDUxMnpcIj48L3BhdGg+PC9zdmc+PC9zcGFuPicpLG49cE8uZ2V0KHRoaXMpO3JldHVybiB0Lm9uKFwiY2xpY2tcIiwoZnVuY3Rpb24oKXtlLmhpZGUoKSxudWxsPT1ufHxuLnJlc3RvcmVTZWxlY3Rpb24oKX0pKSx0fSx0LnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLndpZHRoLG49dGhpcy4kZWxlbTtuLmF0dHIoXCJzdHlsZVwiLFwiXCIpLHQmJm4uY3NzKFwid2lkdGhcIix0K1wicHhcIiksbi5jc3MoZSl9LHR9KGJfKTtmdW5jdGlvbiBTXyhlLHQsbil7dmFyIHI9TXAoJzxsYWJlbCBjbGFzcz1cImJhYmVsLWNvbnRhaW5lclwiPjwvbGFiZWw+Jyk7ci5hcHBlbmQoXCI8c3Bhbj5cIitlK1wiPC9zcGFuPlwiKTt2YXIgbz1NcCgnPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCInK3QrJ1wiIHBsYWNlaG9sZGVyPVwiJysobnx8XCJcIikrJ1wiPicpO3JldHVybiByLmFwcGVuZChvKSxbclswXSxvWzBdXX1mdW5jdGlvbiB4XyhlLHQsbil7dmFyIHI9TXAoJzxsYWJlbCBjbGFzcz1cImJhYmVsLWNvbnRhaW5lclwiPjwvbGFiZWw+Jyk7ci5hcHBlbmQoXCI8c3Bhbj5cIitlK1wiPC9zcGFuPlwiKTt2YXIgbz1NcCgnPHRleHRhcmVhIHR5cGU9XCJ0ZXh0XCIgaWQ9XCInK3QrJ1wiIHBsYWNlaG9sZGVyPVwiJysobnx8XCJcIikrJ1wiPjwvdGV4dGFyZWE+Jyk7cmV0dXJuIHIuYXBwZW5kKG8pLFtyWzBdLG9bMF1dfWZ1bmN0aW9uIENfKGUsdCl7dmFyIG49TXAoJzxkaXYgY2xhc3M9XCJidXR0b24tY29udGFpbmVyXCI+PC9kaXY+Jykscj1NcCgnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCInK2UrJ1wiPicrdCtcIjwvYnV0dG9uPlwiKTtyZXR1cm4gbi5hcHBlbmQociksW25bMF0sclswXV19dmFyIEFfPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZvaWQgMD09PXImJihyPSExKTt2YXIgbz1lLmNhbGwodGhpcyx0LG4scil8fHRoaXM7cmV0dXJuIG8uJGJvZHk9TXAoXCJib2R5XCIpLG8ubW9kYWw9bnVsbCxvLm1lbnU9bixvfXJldHVybiByQSh0LGUpLHQucHJvdG90eXBlLm9uQnV0dG9uQ2xpY2s9ZnVuY3Rpb24oKXt0aGlzLm1lbnUuc2hvd01vZGFsJiZ0aGlzLmhhbmRsZU1vZGFsKCl9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9VF8odGhpcyksdD10aGlzLm1lbnUuZ2V0TW9kYWxQb3NpdGlvbk5vZGUoZSk7cmV0dXJuIFNmLmlzRWxlbWVudCh0KT9FVChlLHQsXCJtb2RhbFwiKTp3VChlKX0sdC5wcm90b3R5cGUuaGFuZGxlTW9kYWw9ZnVuY3Rpb24oKXt2YXIgZT1UXyh0aGlzKSx0PXRoaXMubWVudTtpZihudWxsPT10aGlzLm1vZGFsKXt2YXIgbj1uZXcgRF8oZSx0Lm1vZGFsV2lkdGgpO3RoaXMucmVuZGVyQW5kU2hvd01vZGFsKG4sITApLHRoaXMubW9kYWw9bn1lbHNlKG49dGhpcy5tb2RhbCkuaXNTaG93P24uaGlkZSgpOnRoaXMucmVuZGVyQW5kU2hvd01vZGFsKG4sITEpfSx0LnByb3RvdHlwZS5yZW5kZXJBbmRTaG93TW9kYWw9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIG49VF8odGhpcykscj10aGlzLm1lbnU7aWYobnVsbCE9ci5nZXRNb2RhbENvbnRlbnRFbGVtKXt2YXIgbz1RTy5nZXRUZXh0YXJlYShuKSxpPVFPLmdldFRvb2xiYXIobiksYT0oKG51bGw9PWk/dm9pZCAwOmkuZ2V0Q29uZmlnKCkpfHx7fSkubW9kYWxBcHBlbmRUb0JvZHksdT1yLmdldE1vZGFsQ29udGVudEVsZW0obik7aWYoZS5yZW5kZXJDb250ZW50KHUpLGEpZS5zZXRTdHlsZSh7bGVmdDpcIjBcIixyaWdodDpcIjBcIn0pO2Vsc2V7dmFyIHM9dGhpcy5nZXRQb3NpdGlvbigpO2Uuc2V0U3R5bGUocyl9dCYmKGE/ZS5hcHBlbmRUbyh0aGlzLiRib2R5KTplLmFwcGVuZFRvKG8uJHRleHRBcmVhQ29udGFpbmVyKSksZS5zaG93KCksYXx8RFQobixlLiRlbGVtKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe24uYmx1cigpfSkpfX0sdH0oeV8pLE9fPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0KXx8dGhpcztyZXR1cm4gci50eXBlPVwic2VsZWN0TGlzdFwiLHIuJGVsZW09TXAoJzxkaXYgY2xhc3M9XCJ3LWUtc2VsZWN0LWxpc3RcIj48L2Rpdj4nKSxuJiZyLiRlbGVtLmNzcyhcIndpZHRoXCIsbitcInB4XCIpLHIuJGVsZW0ub24oXCJjbGlja1wiLChmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpfSkpLHJ9cmV0dXJuIHJBKHQsZSksdC5wcm90b3R5cGUucmVuZGVyTGlzdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLiRlbGVtO3QuZW1wdHkoKTt2YXIgbj1NcChcIjx1bD48L3VsPlwiKTtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWUscj1lLnRleHQsbz1lLnNlbGVjdGVkLGk9ZS5zdHlsZUZvclJlbmRlck1lbnVMaXN0LGE9TXAoJzxsaSBkYXRhLXZhbHVlPVwiJyt0KydcIj48L2xpPicpO2lmKGkmJmEuY3NzKGkpLG8pe3ZhciB1PU1wKCc8c3ZnIHZpZXdCb3g9XCIwIDAgMTQ0NiAxMDI0XCI+PHBhdGggZD1cIk01NzQuMTE2Mjk5IDc4Ni43MzYzOTIgMTIzOC44MTEyNDkgNDguNTE3ODYyQzEyNzIuMzkwMjIyIDExLjIyNDYzNSAxMzI5LjQxNDc5OSA3LjgyNzcxOCAxMzY2Ljc1NjY0IDQxLjQ1MDQ2MiAxNDAzLjg0MDAxNSA3NC44NDA0ODQgMTQwNi43MzEwNDMgMTMyLjA4NDc0MSAxMzczLjEwMTg5IDE2OS40MzM2OTlMNjU1LjExODg4OCA5NjYuODM0NjA3QzY1My4wNzI0MjEgOTY5LjcxNjg3NSA2NTAuODM1ODA3IDk3Mi41MTQzMzcgNjQ4LjQwNzkzOCA5NzUuMjEwNzU5IDYxNS4wMTc5NTcgMTAxMi4yOTQwOSA1NTguMjkyMTU1IDEwMTUuNjUyMDE5IDUyMS4xOTU2NjQgOTgyLjI1MDE4OEw3Mi43NzgyMTggNTc4LjQ5MzMwNkMzNS45MTA4MjYgNTQ1LjI5Nzc1OCAzMi44NTkwNDEgNDg4LjU4NDAxOSA2Ni40ODE4MjUgNDUxLjI0MjEzNCA5OS44NzE4MDcgNDE0LjE1ODgwMyAxNTYuNTk3NTYzIDQxMC44MDA4MzQgMTkzLjY5NDA1NSA0NDQuMjAyNjY1TDU3NC4xMTYyOTkgNzg2LjczNjM5MlpcIj48L3BhdGg+PC9zdmc+Jyk7YS5hcHBlbmQodSksYS5hZGRDbGFzcyhcInNlbGVjdGVkXCIpfWEuYXBwZW5kKE1wKCc8c3BhbiBkYXRhLXZhbHVlPVwiJyt0KydcIj4nK3IrXCI8L3NwYW4+XCIpKSxhLmF0dHIoXCJ0aXRsZVwiLHIpLG4uYXBwZW5kKGEpfSkpLHQuYXBwZW5kKG4pfSx0LnByb3RvdHlwZS5nZW5TZWxmRWxlbT1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0fShiXyksa189ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPSExKSx0aGlzLiRlbGVtPU1wKCc8ZGl2IGNsYXNzPVwidy1lLWJhci1pdGVtXCI+PC9kaXY+JyksdGhpcy4kYnV0dG9uPU1wKCc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlbGVjdC1idXR0b25cIj48L2J1dHRvbj4nKSx0aGlzLmRpc2FibGVkPSExLHRoaXMuc2VsZWN0TGlzdD1udWxsO3ZhciBvPXQudGFnLGk9dC50aXRsZSxhPXQud2lkdGgsdT10Lmljb25Tdmcscz12b2lkIDA9PT11P1wiXCI6dSxsPXQuaG90a2V5LGM9dm9pZCAwPT09bD9cIlwiOmw7aWYoXCJzZWxlY3RcIiE9PW8pdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0YWcgJ1wiK28rXCInLCBleHBlY3RlZCAnc2VsZWN0J1wiKTt2YXIgZj10aGlzLiRidXR0b247YSYmZi5jc3MoXCJ3aWR0aFwiLGErXCJweFwiKSxmLmF0dHIoXCJkYXRhLW1lbnUta2V5XCIsZSksdl8oZixzLGksYyxuKSx0aGlzLiRlbGVtLmFwcGVuZChmKSx0aGlzLm1lbnU9dCxaQigoZnVuY3Rpb24oKXtyZXR1cm4gci5pbml0KCl9KSl9cmV0dXJuIGUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuc2V0U2VsZWN0ZWRWYWx1ZSgpLHRoaXMuJGJ1dHRvbi5vbihcImNsaWNrXCIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSxUXyhlKS5oaWRlUGFuZWxPck1vZGFsKCksZS50cmlnZ2VyKCl9KSl9LGUucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9VF8odGhpcyk7aWYoIXQuaXNEaXNhYmxlZCgpJiYhdGhpcy5kaXNhYmxlZCl7dmFyIG49dGhpcy5tZW51O2lmKG51bGw9PXRoaXMuc2VsZWN0TGlzdCl7dGhpcy5zZWxlY3RMaXN0PW5ldyBPXyh0LG4uc2VsZWN0UGFuZWxXaWR0aCk7dmFyIHI9dGhpcy5zZWxlY3RMaXN0LG89bi5nZXRPcHRpb25zKHQpO3IucmVuZGVyTGlzdChvKSxyLmFwcGVuZFRvKHRoaXMuJGVsZW0pLHIuc2hvdygpLHIuJGVsZW0ub24oXCJjbGlja1wiLFwibGlcIiwoZnVuY3Rpb24odCl7dmFyIG49dC50YXJnZXQ7aWYobnVsbCE9bil7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciByPU1wKG4pLmF0dHIoXCJkYXRhLXZhbHVlXCIpO2Uub25DaGFuZ2Uocil9fSkpfWVsc2Uocj10aGlzLnNlbGVjdExpc3QpLmlzU2hvdz9yLmhpZGUoKToobz1uLmdldE9wdGlvbnModCksci5yZW5kZXJMaXN0KG8pLHIuc2hvdygpKX19LGUucHJvdG90eXBlLm9uQ2hhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0PVRfKHRoaXMpLG49dGhpcy5tZW51O24uZXhlYyYmbi5leGVjKHQsZSl9LGUucHJvdG90eXBlLnNldFNlbGVjdGVkVmFsdWU9ZnVuY3Rpb24oKXt2YXIgZT1UXyh0aGlzKSx0PXRoaXMubWVudSxuPXQuZ2V0VmFsdWUoZSkscj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPVwiXCIsbz0wO288bjtvKyspe3ZhciBpPWVbb107aWYoaS52YWx1ZT09PXQpe3I9aS50ZXh0O2JyZWFrfX1yZXR1cm4gcn0odC5nZXRPcHRpb25zKGUpLG4udG9TdHJpbmcoKSksbz10aGlzLiRidXR0b24saT1oXygpO28uZW1wdHkoKSxvLnRleHQociksby5hcHBlbmQoaSl9LGUucHJvdG90eXBlLnNldERpc2FibGVkPWZ1bmN0aW9uKCl7dmFyIGU9VF8odGhpcyksdD10aGlzLm1lbnUuaXNEaXNhYmxlZChlKSxuPXRoaXMuJGJ1dHRvbjsobnVsbD09ZS5zZWxlY3Rpb258fGUuaXNEaXNhYmxlZCgpKSYmKHQ9ITApO3ZhciByPVwiZGlzYWJsZWRcIjt0P24uYWRkQ2xhc3Mocik6bi5yZW1vdmVDbGFzcyhyKSx0aGlzLmRpc2FibGVkPXR9LGUucHJvdG90eXBlLmNoYW5nZU1lbnVTdGF0ZT1mdW5jdGlvbigpe3RoaXMuc2V0U2VsZWN0ZWRWYWx1ZSgpLHRoaXMuc2V0RGlzYWJsZWQoKX0sZX0oKSxCXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy4kZWxlbT1NcCgnPGRpdiBjbGFzcz1cInctZS1iYXItaXRlbSB3LWUtYmFyLWl0ZW0tZ3JvdXBcIj48L2Rpdj4nKSx0aGlzLiRjb250YWluZXI9TXAoJzxkaXYgY2xhc3M9XCJ3LWUtYmFyLWl0ZW0tbWVudXMtY29udGFpbmVyXCI+PC9kaXY+JyksdGhpcy4kYnV0dG9uPU1wKCc8YnV0dG9uIHR5cGU9XCJidXR0b25cIj48L2J1dHRvbj4nKTt2YXIgdD1lLmtleSxuPWUuaWNvblN2ZyxyPWUudGl0bGUsbz10aGlzLiRlbGVtLGk9dGhpcy4kYnV0dG9uO2lmKG4pe3ZhciBhPU1wKG4pO3BfKGEpLGkuYXBwZW5kKGEpfWVsc2UgaS50ZXh0KHIpO2kuYXR0cihcImRhdGEtbWVudS1rZXlcIix0KTt2YXIgdT1oXygpO2kuYXBwZW5kKHUpLG8uYXBwZW5kKGkpO3ZhciBzPXRoaXMuJGNvbnRhaW5lcjtvLmFwcGVuZChzKTt2YXIgbD10aGlzLmNyZWF0ZU9ic2VydmVyKCk7dGhpcy5vYnNlcnZlKGwpfXJldHVybiBlLnByb3RvdHlwZS5hcHBlbmRCYXJJdGVtPWZ1bmN0aW9uKGUpe3ZhciB0PWUuJGVsZW07dGhpcy4kY29udGFpbmVyLmFwcGVuZCh0KX0sZS5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLiRjb250YWluZXI7ZS5vYnNlcnZlKHRbMF0se2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwLGF0dHJpYnV0ZXM6ITB9KX0sZS5wcm90b3R5cGUuY3JlYXRlT2JzZXJ2ZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy4kY29udGFpbmVyLG49dGhpcy4kYnV0dG9uLHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKGZ1bmN0aW9uKCl7dmFyIG89dC5maW5kKFwiYnV0dG9uXCIpLGk9by5sZW5ndGg7aWYoMCE9PWkpe3ZhciBhPTA7by5lYWNoKChmdW5jdGlvbihlKXtNcChlKS5oYXNDbGFzcyhcImRpc2FibGVkXCIpJiZhKyt9KSksci5kaXNjb25uZWN0KCksYT09PWk/bi5hZGRDbGFzcyhcImRpc2FibGVkXCIpOm4ucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlZFwiKSxlLm9ic2VydmUocil9fSkpO3JldHVybiByfSxlfSgpLEZfPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFRfKGUpe3ZhciB0PWZPLmdldChlKTtpZihudWxsPT10KXRocm93IG5ldyBFcnJvcihcIkNhbiBub3QgZ2V0IGVkaXRvciBpbnN0YW5jZVwiKTtyZXR1cm4gdH1mdW5jdGlvbiBfXyhlLHQsbil7dm9pZCAwPT09biYmKG49ITEpO3ZhciByPUZfLmdldCh0KTtpZihyKXJldHVybiByO3ZhciBvPXQudGFnO2lmKFwiYnV0dG9uXCI9PT1vKXt2YXIgaT10LnNob3dEcm9wUGFuZWwsYT10LnNob3dNb2RhbDtyPWk/bmV3IEVfKGUsdCxuKTphP25ldyBBXyhlLHQsbik6bmV3IG1fKGUsdCxuKX1pZihcInNlbGVjdFwiPT09byYmKHI9bmV3IGtfKGUsdCxuKSksbnVsbD09cil0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhZyBpbiBtZW51IFwiK0pTT04uc3RyaW5naWZ5KHQpKTtyZXR1cm4gRl8uc2V0KHQscikscn1mdW5jdGlvbiBQXyhlLHQpe3ZhciBuPWUuc2VsZWN0aW9uO3JldHVybiBudWxsIT1uJiYhcWYuaXNDb2xsYXBzZWQobikmJiFRTy5nZXRTZWxlY3RlZEVsZW1zKGUpLnNvbWUoKGZ1bmN0aW9uKHQpe2lmKGUuaXNWb2lkKHQpKXJldHVybiEwO3ZhciBuPXQudHlwZTtyZXR1cm4hIVtcInByZVwiLFwiY29kZVwiLFwidGFibGVcIl0uaW5jbHVkZXMobil8fHZvaWQgMH0pKSYmISFlZC5pc1RleHQodCl9dmFyIGpfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXRoaXM7dGhpcy4kZWxlbT1NcCgnPGRpdiBjbGFzcz1cInctZS1iYXIgdy1lLWJhci1oaWRkZW4gdy1lLWhvdmVyLWJhclwiPjwvZGl2PicpLHRoaXMubWVudXM9e30sdGhpcy5ob3ZlcmJhckl0ZW1zPVtdLHRoaXMucHJldlNlbGVjdGVkTm9kZT1udWxsLHRoaXMuaXNTaG93PSExLHRoaXMuY2hhbmdlSG92ZXJiYXJTdGF0ZT1adigoZnVuY3Rpb24oKXt2YXIgdD1lLmlzU2hvdyxuPWUuZ2V0U2VsZWN0ZWROb2RlQW5kTWVudUtleXMoKXx8e30scj1uLm5vZGUsbz12b2lkIDA9PT1yP251bGw6cixpPW4ubWVudUtleXMsYT12b2lkIDA9PT1pP1tdOmk7bnVsbCE9byYmZS5jaGFuZ2VJdGVtc1N0YXRlKCksbyYmU2YuaXNFbGVtZW50KG8pJiZ0JiZlLmlzU2FtZVBhdGgobyxlLnByZXZTZWxlY3RlZE5vZGUpfHwoZS5oaWRlQW5kQ2xlYW4oKSxudWxsIT1vJiYoZS5yZWdpc3Rlckl0ZW1zKGEpLGUuc2V0UG9zaXRpb24obyksZS5zaG93KCkpLGUucHJldlNlbGVjdGVkTm9kZT1vKX0pLDIwMCksWkIoKGZ1bmN0aW9uKCl7dmFyIHQ9ZS5nZXRFZGl0b3JJbnN0YW5jZSgpLG49ZS4kZWxlbTtuLm9uKFwibW91c2Vkb3duXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnByZXZlbnREZWZhdWx0KCl9KSx7cGFzc2l2ZTohMX0pLFFPLmdldFRleHRhcmVhKHQpLiR0ZXh0QXJlYUNvbnRhaW5lci5hcHBlbmQobiksdC5vbihcImNoYW5nZVwiLGUuY2hhbmdlSG92ZXJiYXJTdGF0ZSk7dmFyIHI9ZS5oaWRlQW5kQ2xlYW4uYmluZChlKTt0Lm9uKFwic2Nyb2xsXCIsciksdC5vbihcImZ1bGxTY3JlZW5cIixyKSx0Lm9uKFwidW5GdWxsU2NyZWVuXCIscil9KSl9cmV0dXJuIGUucHJvdG90eXBlLmdldE1lbnVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVudXN9LGUucHJvdG90eXBlLmhpZGVBbmRDbGVhbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJGVsZW07ZS5yZW1vdmVDbGFzcyhcInctZS1iYXItc2hvd1wiKS5hZGRDbGFzcyhcInctZS1iYXItaGlkZGVuXCIpLHRoaXMuaG92ZXJiYXJJdGVtcz1bXSxlLmVtcHR5KCksdGhpcy5pc1Nob3c9ITF9LGUucHJvdG90eXBlLmNoZWNrUG9zaXRpb25Cb3R0b209ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRlbGVtLHQ9ITEsbj13aW5kb3cuaW5uZXJIZWlnaHQ7biYmbj49MzYwJiZuLWVbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tPDM2MCYmKHQ9ITApLHQ/ZS5hZGRDbGFzcyhcInctZS1iYXItYm90dG9tXCIpOmUucmVtb3ZlQ2xhc3MoXCJ3LWUtYmFyLWJvdHRvbVwiKX0sZS5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe3RoaXMuJGVsZW0ucmVtb3ZlQ2xhc3MoXCJ3LWUtYmFyLWhpZGRlblwiKS5hZGRDbGFzcyhcInctZS1iYXItc2hvd1wiKSx0aGlzLmlzU2hvdz0hMCx0aGlzLmNoZWNrUG9zaXRpb25Cb3R0b20oKX0sZS5wcm90b3R5cGUuY2hhbmdlSXRlbXNTdGF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7WkIoKGZ1bmN0aW9uKCl7ZS5ob3ZlcmJhckl0ZW1zLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2hhbmdlTWVudVN0YXRlKCl9KSl9KSl9LGUucHJvdG90eXBlLnJlZ2lzdGVySXRlbXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMuJGVsZW07ZS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihcInxcIiE9PWUpdC5yZWdpc3RlclNpbmdsZUl0ZW0oZSk7ZWxzZXt2YXIgcj1nXygpO24uYXBwZW5kKHIpfX0pKX0sZS5wcm90b3R5cGUucmVnaXN0ZXJTaW5nbGVJdGVtPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0RWRpdG9ySW5zdGFuY2UoKSxuPXRoaXMubWVudXMscj1uW2VdO2lmKG51bGw9PXIpe3ZhciBvPW5rW2VdO2lmKG51bGw9PW8pdGhyb3cgbmV3IEVycm9yKFwiTm90IGZvdW5kIG1lbnUgaXRlbSBmYWN0b3J5IGJ5IGtleSAnXCIrZStcIidcIik7aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygbyl0aHJvdyBuZXcgRXJyb3IoXCJNZW51IGl0ZW0gZmFjdG9yeSAoa2V5PSdcIitlK1wiJykgaXMgbm90IGEgZnVuY3Rpb25cIik7cj1vKCksbltlXT1yfXZhciBpPV9fKGUscik7dGhpcy5ob3ZlcmJhckl0ZW1zLnB1c2goaSksZk8uc2V0KGksdCksdGhpcy4kZWxlbS5hcHBlbmQoaS4kZWxlbSl9LGUucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0RWRpdG9ySW5zdGFuY2UoKSxuPXRoaXMuJGVsZW07aWYobi5hdHRyKFwic3R5bGVcIixcIlwiKSxTZi5pc0VsZW1lbnQoZSkpe3ZhciByPUVUKHQsZSxcImJhclwiKTtyZXR1cm4gbi5jc3Mociksdm9pZCBEVCh0LG4pfWlmKGVkLmlzVGV4dChlKSlyZXR1cm4gcj13VCh0KSxuLmNzcyhyKSx2b2lkIERUKHQsbik7dGhyb3cgbmV3IEVycm9yKFwiaG92ZXJiYXIuc2V0UG9zaXRpb24gZXJyb3IsIGN1cnJlbnQgc2VsZWN0ZWQgbm9kZSBpcyBub3QgZWxlbSBub3IgdGV4dFwiKX0sZS5wcm90b3R5cGUuZ2V0U2VsZWN0ZWROb2RlQW5kTWVudUtleXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEVkaXRvckluc3RhbmNlKCk7aWYobnVsbD09ZS5zZWxlY3Rpb24pcmV0dXJuIG51bGw7dmFyIHQ9dGhpcy5nZXRIb3ZlcmJhcktleXNDb25mKCksbj1udWxsLHI9W10sbz1mdW5jdGlvbihvKXt2YXIgaT10W29dLGE9aS5tYXRjaCx1PWkubWVudUtleXMscz12b2lkIDA9PT11P1tdOnUsbD1hfHxmdW5jdGlvbihlLHQpe3JldHVybiBRTy5jaGVja05vZGVUeXBlKHQsbyl9LGM9YUEoQmYubm9kZXMoZSx7bWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIGwoZSx0KX0sdW5pdmVyc2FsOiEwfSksMSksZj1jWzBdO2lmKG51bGwhPWYpcmV0dXJuIG49ZlswXSxyPXMsXCJicmVha1wifTtmb3IodmFyIGkgaW4gdClpZihcImJyZWFrXCI9PT1vKGkpKWJyZWFrO3JldHVybiBudWxsPT1ufHwwPT09ci5sZW5ndGg/bnVsbDp7bm9kZTpuLG1lbnVLZXlzOnJ9fSxlLnByb3RvdHlwZS5nZXRFZGl0b3JJbnN0YW5jZT1mdW5jdGlvbigpe3ZhciBlPWxPLmdldCh0aGlzKTtpZihudWxsPT1lKXRocm93IG5ldyBFcnJvcihcIkNhbiBub3QgZ2V0IGVkaXRvciBpbnN0YW5jZVwiKTtyZXR1cm4gZX0sZS5wcm90b3R5cGUuZ2V0SG92ZXJiYXJLZXlzQ29uZj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0RWRpdG9ySW5zdGFuY2UoKS5nZXRDb25maWcoKS5ob3ZlcmJhcktleXMsdD12b2lkIDA9PT1lP3t9OmUsbj10LnRleHQ7cmV0dXJuIG4mJm51bGw9PW4ubWF0Y2gmJihuLm1hdGNoPVBfKSx0fSxlLnByb3RvdHlwZS5pc1NhbWVQYXRoPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZXx8bnVsbD09dClyZXR1cm4hMTt2YXIgbj1RTy5maW5kUGF0aChudWxsLGUpLHI9UU8uZmluZFBhdGgobnVsbCx0KTtyZXR1cm4gTWYuZXF1YWxzKG4scil9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNoYW5nZUhvdmVyYmFyU3RhdGUuY2FuY2VsKCksdGhpcy4kZWxlbS5yZW1vdmUoKSx0aGlzLm1lbnVzPXt9LHRoaXMuaG92ZXJiYXJJdGVtcz1bXSx0aGlzLnByZXZTZWxlY3RlZE5vZGU9bnVsbH0sZX0oKTtmdW5jdGlvbiBOXyhlLHQsbixyKXtpZihtTy5zZXQoZSx0KSxiTy5zZXQoZSxuKSxTZi5pc0VsZW1lbnQoZSkpe3ZhciBvPWUuY2hpbGRyZW47aWYoKHZvaWQgMD09PW8/W106bykuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gTl8odCxuLGUscil9KSksQmYuaXNWb2lkKHIsZSkpe3ZhciBpPWFBKE5mLnRleHRzKGUpLDEpLGE9YUEoaVswXSwxKVswXTttTy5zZXQoYSwwKSxiTy5zZXQoYSxlKX19fWZ1bmN0aW9uIElfKGUpe3ZhciB0PWUuc2VsZWN0b3Isbj12b2lkIDA9PT10P1wiXCI6dCxyPWUuY29uZmlnLG89dm9pZCAwPT09cj97fTpyLGk9ZS5jb250ZW50LGE9ZS5odG1sLHU9ZS5wbHVnaW5zLHM9dm9pZCAwPT09dT9bXTp1LGw9KGU9Pnt2YXIgdD1lLHthcHBseTpufT10O3JldHVybiB0Lmhpc3Rvcnk9e3VuZG9zOltdLHJlZG9zOltdfSx0LnJlZG89KCk9Pnt2YXJ7aGlzdG9yeTplfT10LHtyZWRvczpufT1lO2lmKG4ubGVuZ3RoPjApe3ZhciByPW5bbi5sZW5ndGgtMV07eVMud2l0aG91dFNhdmluZyh0LCgoKT0+e0JmLndpdGhvdXROb3JtYWxpemluZyh0LCgoKT0+e2Zvcih2YXIgZSBvZiByKXQuYXBwbHkoZSl9KSl9KSksZS5yZWRvcy5wb3AoKSxlLnVuZG9zLnB1c2gocil9fSx0LnVuZG89KCk9Pnt2YXJ7aGlzdG9yeTplfT10LHt1bmRvczpufT1lO2lmKG4ubGVuZ3RoPjApe3ZhciByPW5bbi5sZW5ndGgtMV07eVMud2l0aG91dFNhdmluZyh0LCgoKT0+e0JmLndpdGhvdXROb3JtYWxpemluZyh0LCgoKT0+e3ZhciBlPXIubWFwKFJmLmludmVyc2UpLnJldmVyc2UoKTtmb3IodmFyIG4gb2YgZSl0LmFwcGx5KG4pfSkpfSkpLGUucmVkb3MucHVzaChyKSxlLnVuZG9zLnBvcCgpfX0sdC5hcHBseT1lPT57dmFye29wZXJhdGlvbnM6cixoaXN0b3J5Om99PXQse3VuZG9zOml9PW8sYT1pW2kubGVuZ3RoLTFdLHU9YSYmYVthLmxlbmd0aC0xXSxzPSgoZSx0KT0+ISghdHx8XCJzZXRfc2VsZWN0aW9uXCIhPT1lLnR5cGV8fFwic2V0X3NlbGVjdGlvblwiIT09dC50eXBlKSkoZSx1KSxsPXlTLmlzU2F2aW5nKHQpLGM9eVMuaXNNZXJnaW5nKHQpO2lmKG51bGw9PWwmJihsPSgoZSx0KT0+XCJzZXRfc2VsZWN0aW9uXCIhPT1lLnR5cGV8fG51bGwhPWUucHJvcGVydGllcyYmbnVsbCE9ZS5uZXdQcm9wZXJ0aWVzKShlKSksbCl7aWYobnVsbD09YyYmKGM9bnVsbCE9YSYmKDAhPT1yLmxlbmd0aHx8KChlLHQpPT5cInNldF9zZWxlY3Rpb25cIj09PWUudHlwZXx8ISghdHx8XCJpbnNlcnRfdGV4dFwiIT09ZS50eXBlfHxcImluc2VydF90ZXh0XCIhPT10LnR5cGV8fGUub2Zmc2V0IT09dC5vZmZzZXQrdC50ZXh0Lmxlbmd0aHx8IU1mLmVxdWFscyhlLnBhdGgsdC5wYXRoKSl8fCEoIXR8fFwicmVtb3ZlX3RleHRcIiE9PWUudHlwZXx8XCJyZW1vdmVfdGV4dFwiIT09dC50eXBlfHxlLm9mZnNldCtlLnRleHQubGVuZ3RoIT09dC5vZmZzZXR8fCFNZi5lcXVhbHMoZS5wYXRoLHQucGF0aCkpKShlLHUpfHxzKSksYSYmYylzJiZhLnBvcCgpLGEucHVzaChlKTtlbHNle3ZhciBmPVtlXTtpLnB1c2goZil9Zm9yKDtpLmxlbmd0aD4xMDA7KWkuc2hpZnQoKTsoZT0+XCJzZXRfc2VsZWN0aW9uXCIhPT1lLnR5cGUpKGUpJiYoby5yZWRvcz1bXSl9bihlKX0sdH0pKGZ1bmN0aW9uKGUpe3ZhciB0PWUsbj10Lmluc2VydFRleHQscj10Lmluc2VydE5vZGUsbz10Lmluc2VydEZyYWdtZW50LGk9dC5kYW5nZXJvdXNseUluc2VydEh0bWw7cmV0dXJuIHQuaW5zZXJ0VGV4dD1mdW5jdGlvbihlKXtpZih0LmdldENvbmZpZygpLm1heExlbmd0aCl7dmFyIHI9UU8uZ2V0TGVmdExlbmd0aE9mTWF4TGVuZ3RoKHQpO3I8PTB8fChyPGUubGVuZ3RoP24oZS5zbGljZSgwLHIpKTpuKGUpKX1lbHNlIG4oZSl9LHQuaW5zZXJ0Tm9kZT1mdW5jdGlvbihlKXtpZih0LmdldENvbmZpZygpLm1heExlbmd0aCl7dmFyIG49UU8uZ2V0TGVmdExlbmd0aE9mTWF4TGVuZ3RoKHQpO248PTB8fG48TmYuc3RyaW5nKGUpLmxlbmd0aHx8cihlKX1lbHNlIHIoZSl9LHQuaW5zZXJ0RnJhZ21lbnQ9ZnVuY3Rpb24oZSl7aWYodC5nZXRDb25maWcoKS5tYXhMZW5ndGgpaWYoMSE9PWUubGVuZ3RoKWUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5pbnNlcnROb2RlKGUpfSkpO2Vsc2V7dmFyIG49ZVswXTtpZihRTy5nZXRMZWZ0TGVuZ3RoT2ZNYXhMZW5ndGgodCk8TmYuc3RyaW5nKG4pLmxlbmd0aClyZXR1cm47byhlKX1lbHNlIG8oZSl9LHQuZGFuZ2Vyb3VzbHlJbnNlcnRIdG1sPWZ1bmN0aW9uKGUsbil7aWYodm9pZCAwPT09ZSYmKGU9XCJcIiksdm9pZCAwPT09biYmKG49ITEpLGUpaWYodC5nZXRDb25maWcoKS5tYXhMZW5ndGgpe3ZhciByPVFPLmdldExlZnRMZW5ndGhPZk1heExlbmd0aCh0KTtpZighKHI8PTApKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO28uaW5uZXJIVE1MPWU7dmFyIGE9QXJyYXkuZnJvbShvLmNoaWxkTm9kZXMpLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm5vZGVUeXBlLHI9dC5ub2RlTmFtZTtyZXR1cm4gdD9uPT09UE8uVEVYVF9OT0RFP2UrKHQudGV4dENvbnRlbnR8fFwiXCIpOm49PT1QTy5FTEVNRU5UX05PREU/VUYuaGFzKHIudG9Mb3dlckNhc2UoKSk/ZTplKyh0LnRleHRDb250ZW50fHxcIlwiKTplOmV9KSxcIlwiKTtyPGEubGVuZ3RofHxpKGUsbil9fWVsc2UgaShlLG4pfSx0fShmdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0Lm9uPWZ1bmN0aW9uKGUsbil7dmFyIHI9aFQodCk7aWYoci5vbihlLG4pLFwiZGVzdHJveWVkXCI9PT1lJiZ2VCh0LG4pLFwiZGVzdHJveWVkXCIhPT1lKXt2YXIgbz1mdW5jdGlvbigpe3JldHVybiByLm9mZihlLG4pfTtyLm9uKFwiZGVzdHJveWVkXCIsbyksdlQodCxvKX19LHQub25jZT1mdW5jdGlvbihlLG4pe2hUKHQpLm9uY2UoZSxuKX0sdC5vZmY9ZnVuY3Rpb24oZSxuKXtoVCh0KS5vZmYoZSxuKX0sdC5lbWl0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1bXSxyPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3ZhciBvPWhUKHQpO28uZW1pdC5hcHBseShvLHVBKFtlXSxhQShuKSkpLFwiZGVzdHJveWVkXCI9PT1lJiYoeVQodCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIG8ub2ZmKFwiZGVzdHJveWVkXCIsZSl9KSksbVQodCkpfSx0fShmdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0LnNlbGVjdD1mdW5jdGlvbihlKXttZC5zZWxlY3QodCxlKX0sdC5kZXNlbGVjdD1mdW5jdGlvbigpe3ZhciBuPXQuc2VsZWN0aW9uLHI9UU8uZmluZERvY3VtZW50T3JTaGFkb3dSb290KHQpLmdldFNlbGVjdGlvbigpO3ImJnIucmFuZ2VDb3VudD4wJiZyLnJlbW92ZUFsbFJhbmdlcygpLG4mJm1kLmRlc2VsZWN0KGUpfSx0Lm1vdmU9ZnVuY3Rpb24odCxuKXt2b2lkIDA9PT1uJiYobj0hMSksdCYmKHQ8MHx8bWQubW92ZShlLHtkaXN0YW5jZTp0LHVuaXQ6XCJjaGFyYWN0ZXJcIixyZXZlcnNlOm59KSl9LHQubW92ZVJldmVyc2U9ZnVuY3Rpb24oZSl7dC5tb3ZlKGUsITApfSx0LnJlc3RvcmVTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgZT1PTy5nZXQodCk7bnVsbCE9ZSYmKHQuZm9jdXMoKSxtZC5zZWxlY3QodCxlKSl9LHQuZ2V0U2VsZWN0aW9uUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gd1QodCl9LHQuZ2V0Tm9kZVBvc2l0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBFVCh0LGUpfSx0LmlzU2VsZWN0ZWRBbGw9ZnVuY3Rpb24oKXt2YXIgZT10LnNlbGVjdGlvbjtpZihudWxsPT1lKXJldHVybiExO3ZhciBuPWFBKHFmLmVkZ2VzKGUpLDIpLHI9blswXSxvPW5bMV0saT1hQShCZi5lZGdlcyh0LFtdKSwyKSxhPWlbMF0sdT1pWzFdO3JldHVybiEoIVZmLmVxdWFscyhyLGEpfHwhVmYuZXF1YWxzKG8sdSkpfSx0LnNlbGVjdEFsbD1mdW5jdGlvbigpe3ZhciBlPUJmLnN0YXJ0KHQsW10pLG49QmYuZW5kKHQsW10pO21kLnNlbGVjdCh0LHthbmNob3I6ZSxmb2N1czpufSl9LHR9KGZ1bmN0aW9uKGUpe3ZhciB0PWUsbj10Lm9uQ2hhbmdlLHI9dC5pbnNlcnRUZXh0LG89dC5hcHBseSxpPXQuZGVsZXRlQmFja3dhcmQ7cmV0dXJuIHQuaW5zZXJ0VGV4dD1mdW5jdGlvbihlKXt0LmdldENvbmZpZygpLnJlYWRPbmx5fHxyKGUpfSx0LmFwcGx5PWZ1bmN0aW9uKGUpe3ZhciBuLHIsaSxhLHUscyxsLGMsZj1bXTtzd2l0Y2goZS50eXBlKXtjYXNlXCJpbnNlcnRfdGV4dFwiOmNhc2VcInJlbW92ZV90ZXh0XCI6Y2FzZVwic2V0X25vZGVcIjp0cnl7Zm9yKHZhciBkPWlBKEJmLmxldmVscyh0LHthdDplLnBhdGh9KSkscD1kLm5leHQoKTshcC5kb25lO3A9ZC5uZXh0KCkpe3ZhciBoPWFBKHAudmFsdWUsMiksZz1oWzBdLHY9aFsxXSx5PVFPLmZpbmRLZXkodCxnKTtmLnB1c2goW3YseV0pfX1jYXRjaChlKXtuPXtlcnJvcjplfX1maW5hbGx5e3RyeXtwJiYhcC5kb25lJiYocj1kLnJldHVybikmJnIuY2FsbChkKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19YnJlYWs7Y2FzZVwiaW5zZXJ0X25vZGVcIjpjYXNlXCJyZW1vdmVfbm9kZVwiOmNhc2VcIm1lcmdlX25vZGVcIjpjYXNlXCJzcGxpdF9ub2RlXCI6dHJ5e2Zvcih2YXIgbT1pQShCZi5sZXZlbHModCx7YXQ6TWYucGFyZW50KGUucGF0aCl9KSksYj1tLm5leHQoKTshYi5kb25lO2I9bS5uZXh0KCkpe3ZhciB3PWFBKGIudmFsdWUsMik7Zz13WzBdLHY9d1sxXSx5PVFPLmZpbmRLZXkodCxnKSxmLnB1c2goW3YseV0pfX1jYXRjaChlKXtpPXtlcnJvcjplfX1maW5hbGx5e3RyeXtiJiYhYi5kb25lJiYoYT1tLnJldHVybikmJmEuY2FsbChtKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19YnJlYWs7Y2FzZVwibW92ZV9ub2RlXCI6dHJ5e2Zvcih2YXIgRT1pQShCZi5sZXZlbHModCx7YXQ6TWYuY29tbW9uKE1mLnBhcmVudChlLnBhdGgpLE1mLnBhcmVudChlLm5ld1BhdGgpKX0pKSxEPUUubmV4dCgpOyFELmRvbmU7RD1FLm5leHQoKSl7dmFyIFM9YUEoRC52YWx1ZSwyKTtnPVNbMF0sdj1TWzFdLHk9UU8uZmluZEtleSh0LGcpLGYucHVzaChbdix5XSl9fWNhdGNoKGUpe3U9e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e0QmJiFELmRvbmUmJihzPUUucmV0dXJuKSYmcy5jYWxsKEUpfWZpbmFsbHl7aWYodSl0aHJvdyB1LmVycm9yfX19byhlKTt0cnl7Zm9yKHZhciB4PWlBKGYpLEM9eC5uZXh0KCk7IUMuZG9uZTtDPXgubmV4dCgpKXt2YXIgQT1hQShDLnZhbHVlLDIpO3Y9QVswXSx5PUFbMV0sZz1hQShCZi5ub2RlKHQsdiksMSlbMF0seE8uc2V0KGcseSl9fWNhdGNoKGUpe2w9e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e0MmJiFDLmRvbmUmJihjPXgucmV0dXJuKSYmYy5jYWxsKHgpfWZpbmFsbHl7aWYobCl0aHJvdyBsLmVycm9yfX19LHQuZGVsZXRlQmFja3dhcmQ9ZnVuY3Rpb24obil7aWYoXCJsaW5lXCIhPT1uKXJldHVybiBpKG4pO2lmKGUuc2VsZWN0aW9uJiZxZi5pc0NvbGxhcHNlZChlLnNlbGVjdGlvbikpe3ZhciByPUJmLmFib3ZlKGUse21hdGNoOmZ1bmN0aW9uKHQpe3JldHVybiBCZi5pc0Jsb2NrKGUsdCl9LGF0OmUuc2VsZWN0aW9ufSk7aWYocil7dmFyIG89YUEociwyKVsxXSxhPUJmLnJhbmdlKGUsbyxlLnNlbGVjdGlvbi5hbmNob3IpLHU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1CZi5yYW5nZShlLHFmLmVuZCh0KSkscj1BcnJheS5mcm9tKEJmLnBvc2l0aW9ucyhlLHthdDp0fSkpLG89MCxpPXIubGVuZ3RoLGE9TWF0aC5mbG9vcihpLzIpO2lmKHRGKGUsQmYucmFuZ2UoZSxyW29dKSxuKSlyZXR1cm4gQmYucmFuZ2UoZSxyW29dLG4pO2lmKHIubGVuZ3RoPDIpcmV0dXJuIEJmLnJhbmdlKGUscltyLmxlbmd0aC0xXSxuKTtmb3IoO2EhPT1yLmxlbmd0aCYmYSE9PW87KXRGKGUsQmYucmFuZ2UoZSxyW2FdKSxuKT9pPWE6bz1hLGE9TWF0aC5mbG9vcigobytpKS8yKTtyZXR1cm4gQmYucmFuZ2UoZSxyW2ldLG4pfSh0LGEpO3FmLmlzQ29sbGFwc2VkKHUpfHxtZC5kZWxldGUoZSx7YXQ6dX0pfX19LHQub25DaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgZT10LnNlbGVjdGlvbjtudWxsIT1lJiZPTy5zZXQodCxlKSx0LmVtaXQoXCJjaGFuZ2VcIiksbigpfSx0LmhhbmRsZVRhYj1mdW5jdGlvbigpe3QuaW5zZXJ0VGV4dChcIiAgICBcIil9LHQuZ2V0SHRtbD1mdW5jdGlvbigpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuKHZvaWQgMD09PWU/W106ZSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gSkIoZSx0KX0pKS5qb2luKFwiXCIpfSx0LmdldFRleHQ9ZnVuY3Rpb24oKXt2YXIgZT10LmNoaWxkcmVuO3JldHVybih2b2lkIDA9PT1lP1tdOmUpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIE5mLnN0cmluZyhlKX0pKS5qb2luKFwiXFxuXCIpfSx0LmdldFNlbGVjdGlvblRleHQ9ZnVuY3Rpb24oKXt2YXIgbj10LnNlbGVjdGlvbjtyZXR1cm4gbnVsbD09bj9cIlwiOkJmLnN0cmluZyhlLG4pfSx0LmdldEVsZW1zQnlUeXBlPWZ1bmN0aW9uKGUsbil7dmFyIHIsbzt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIGk9W10sYT1CZi5ub2Rlcyh0LHthdDpbXSx1bml2ZXJzYWw6ITB9KTt0cnl7Zm9yKHZhciB1PWlBKGEpLHM9dS5uZXh0KCk7IXMuZG9uZTtzPXUubmV4dCgpKXt2YXIgbD1hQShzLnZhbHVlLDEpWzBdO2lmKFNmLmlzRWxlbWVudChsKSYmKG4/bC50eXBlLmluZGV4T2YoZSk+PTA6bC50eXBlPT09ZSkpe3ZhciBjPVFCKFFPLmZpbmRLZXkodCxsKS5pZCk7aS5wdXNoKG9BKG9BKHt9LGwpLHtpZDpjfSkpfX19Y2F0Y2goZSl7cj17ZXJyb3I6ZX19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKG89dS5yZXR1cm4pJiZvLmNhbGwodSl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fXJldHVybiBpfSx0LmdldEVsZW1zQnlUeXBlUHJlZml4PWZ1bmN0aW9uKGUpe3JldHVybiB0LmdldEVsZW1zQnlUeXBlKGUsITApfSx0LmlzRW1wdHk9ZnVuY3Rpb24oKXt2YXIgZT10LmNoaWxkcmVuLG49dm9pZCAwPT09ZT9bXTplO2lmKG4ubGVuZ3RoPjEpcmV0dXJuITE7dmFyIHI9blswXTtpZihudWxsPT1yKXJldHVybiEwO2lmKFNmLmlzRWxlbWVudChyKSYmXCJwYXJhZ3JhcGhcIj09PXIudHlwZSl7dmFyIG89ci5jaGlsZHJlbixpPXZvaWQgMD09PW8/W106bztpZihpLmxlbmd0aD4xKXJldHVybiExO3ZhciBhPWlbMF07aWYobnVsbD09YSlyZXR1cm4hMDtpZihlZC5pc1RleHQoYSkmJlwiXCI9PT1hLnRleHQpcmV0dXJuITB9cmV0dXJuITF9LHQuY2xlYXI9ZnVuY3Rpb24oKXttZC5kZWxldGUodCx7YXQ6e2FuY2hvcjpCZi5zdGFydCh0LFtdKSxmb2N1czpCZi5lbmQodCxbXSl9fSksMD09PXQuY2hpbGRyZW4ubGVuZ3RoJiZtZC5pbnNlcnROb2Rlcyh0LFt7dHlwZTpcInBhcmFncmFwaFwiLGNoaWxkcmVuOlt7dGV4dDpcIlwifV19XSl9LHQuZ2V0UGFyZW50Tm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gUU8uZ2V0UGFyZW50Tm9kZSh0LGUpfSx0LmRhbmdlcm91c2x5SW5zZXJ0SHRtbD1mdW5jdGlvbihlLG4pe2lmKHZvaWQgMD09PWUmJihlPVwiXCIpLHZvaWQgMD09PW4mJihuPSExKSxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3IuaW5uZXJIVE1MPWU7dmFyIG89QXJyYXkuZnJvbShyLmNoaWxkTm9kZXMpO2lmKG89by5maWx0ZXIoKGZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZVR5cGUsbj1lLm5vZGVOYW1lO3JldHVybiB0PT09UE8uVEVYVF9OT0RFfHx0PT09UE8uRUxFTUVOVF9OT0RFJiYhVUYuaGFzKG4udG9Mb3dlckNhc2UoKSl9KSksMCE9PW8ubGVuZ3RoKXt2YXIgaT10LnNlbGVjdGlvbjtpZihudWxsIT1pKXt2YXIgYT1udWxsO1FPLmlzU2VsZWN0ZWRFbXB0eVBhcmFncmFwaCh0KSYmIW4mJihhPVtpLmZvY3VzLnBhdGhbMF1dKSxyLnNldEF0dHJpYnV0ZShcImhpZGRlblwiLFwidHJ1ZVwiKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpO3ZhciB1PTA7by5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1lLm5vZGVUeXBlLHI9ZS5ub2RlTmFtZSxvPWUudGV4dENvbnRlbnQsaT12b2lkIDA9PT1vP1wiXCI6bztpZihuIT09UE8uVEVYVF9OT0RFKWlmKFwiQlJcIiE9PXIpe3ZhciBhPWUscz0hMTtpZihuRi5pbmNsdWRlcyhyLnRvTG93ZXJDYXNlKCkpKXM9ITA7ZWxzZSBmb3IodmFyIGwgaW4gaUYpaWYoYS5tYXRjaGVzKGwpKXtzPSEwO2JyZWFrfWlmKHMpe3ZhciBjPUlGKE1wKGEpLHQpO3JldHVybiBBcnJheS5pc0FycmF5KGMpPyhjLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBXRih0LGUpfSkpLHUrKyk6KFdGKHQsYyksdSsrKSx2b2lkKFFPLmlzU2VsZWN0ZWRWb2lkTm9kZSh0KSYmdC5tb3ZlKDEpKX12YXIgZj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5kaXNwbGF5O1FPLmlzU2VsZWN0ZWRFbXB0eVBhcmFncmFwaCh0KXx8Zi5pbmRleE9mKFwiaW5saW5lXCIpPDAmJnQuaW5zZXJ0QnJlYWsoKSx0LmRhbmdlcm91c2x5SW5zZXJ0SHRtbChhLmlubmVySFRNTCwhMCl9ZWxzZSB0Lmluc2VydFRleHQoXCJcXG5cIik7ZWxzZXtpZighaXx8IWkudHJpbSgpKXJldHVybjt0Lmluc2VydE5vZGUoe3RleHQ6aX0pfX0pKSx1JiZhJiZRTy5pc0VtcHR5UGF0aCh0LGEpJiZtZC5yZW1vdmVOb2Rlcyh0LHthdDphfSksci5yZW1vdmUoKX19fX0sdC5zZXRIdG1sPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPVwiXCIpO3ZhciBuPXQuaXNEaXNhYmxlZCgpLHI9dC5pc0ZvY3VzZWQoKSxvPUpTT04uc3RyaW5naWZ5KHQuc2VsZWN0aW9uKTt0LmVuYWJsZSgpLHQuZm9jdXMoKSx0LmNsZWFyKCk7dmFyIGk9UkYodCxlKTtpZihtZC5pbnNlcnRGcmFnbWVudCh0LGkpLHJ8fCh0LmRlc2VsZWN0KCksdC5ibHVyKCkpLG4mJih0LmRlc2VsZWN0KCksdC5kaXNhYmxlKCkpLHQuaXNGb2N1c2VkKCkpdHJ5e3Quc2VsZWN0KEpTT04ucGFyc2UobykpfWNhdGNoKGUpe3Quc2VsZWN0KEJmLnN0YXJ0KHQsW10pKX19LHR9KGZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQuZ2V0QWxsTWVudUtleXM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gbmspZS5wdXNoKHQpO3JldHVybiBlfSx0LmdldENvbmZpZz1mdW5jdGlvbigpe3ZhciBlPWhPLmdldCh0KTtpZihudWxsPT1lKXRocm93IG5ldyBFcnJvcihcIkNhbiBub3QgZ2V0IGVkaXRvciBjb25maWdcIik7cmV0dXJuIGV9LHQuZ2V0TWVudUNvbmZpZz1mdW5jdGlvbihlKXt2YXIgbj10LmdldENvbmZpZygpLk1FTlVfQ09ORjtyZXR1cm4odm9pZCAwPT09bj97fTpuKVtlXXx8e319LHQuYWxlcnQ9ZnVuY3Rpb24oZSxuKXt2b2lkIDA9PT1uJiYobj1cImluZm9cIik7dmFyIHI9dC5nZXRDb25maWcoKS5jdXN0b21BbGVydDtyJiZyKGUsbil9LHR9KGZ1bmN0aW9uKGUpe3ZhciB0PUdGKFdjKCkpO3JldHVybiB0LmlkPVwid2FuZ0VkaXRvci1cIitlaysrLHQuaXNEZXN0cm95ZWQ9ITEsdC5pc0Z1bGxTY3JlZW49ITEsdC5mb2N1cz1mdW5jdGlvbihlKXtpZihRTy50b0RPTU5vZGUodCx0KS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLEFPLnNldCh0LCEwKSxlKXt2YXIgbj1CZi5lbmQodCxbXSk7bWQuc2VsZWN0KHQsbil9ZWxzZXt2YXIgcj1PTy5nZXQodCk7cj9tZC5zZWxlY3QodCxyKTptZC5zZWxlY3QodCxCZi5zdGFydCh0LFtdKSl9fSx0LmlzRm9jdXNlZD1mdW5jdGlvbigpe3JldHVybiEhQU8uZ2V0KHQpfSx0LmJsdXI9ZnVuY3Rpb24oKXtRTy50b0RPTU5vZGUodCx0KS5ibHVyKCksbWQuZGVzZWxlY3QodCksQU8uc2V0KHQsITEpfSx0LnVwZGF0ZVZpZXc9ZnVuY3Rpb24oKXtRTy5nZXRUZXh0YXJlYSh0KS5jaGFuZ2VWaWV3U3RhdGUoKTt2YXIgZT1RTy5nZXRUb29sYmFyKHQpO2UmJmUuY2hhbmdlVG9vbGJhclN0YXRlKCk7dmFyIG49UU8uZ2V0SG92ZXJiYXIodCk7biYmbi5jaGFuZ2VIb3ZlcmJhclN0YXRlKCl9LHQuZGVzdHJveT1mdW5jdGlvbigpe2lmKCF0LmlzRGVzdHJveWVkKXt2YXIgZT1RTy5nZXRUZXh0YXJlYSh0KTtlLmRlc3Ryb3koKSxpTy5kZWxldGUodCksYU8uZGVsZXRlKGUpO3ZhciBuPVFPLmdldFRvb2xiYXIodCk7biYmKG4uZGVzdHJveSgpLHNPLmRlbGV0ZSh0KSx1Ty5kZWxldGUobikpO3ZhciByPVFPLmdldEhvdmVyYmFyKHQpO3ImJihyLmRlc3Ryb3koKSxjTy5kZWxldGUodCksbE8uZGVsZXRlKHIpKSx0LmlzRGVzdHJveWVkPSEwLHQuZW1pdChcImRlc3Ryb3llZFwiKX19LHQuc2Nyb2xsVG9FbGVtPWZ1bmN0aW9uKGUpe2lmKCF0LmdldENvbmZpZygpLnNjcm9sbCl7dmFyIG49XCLnvJbovpHlmajnpoHnlKjkuoYgc2Nyb2xsIO+8jOe8lui+keWZqOWGheWuueaXoOazlea7muWKqO+8jOivt+iHquihjOWunueOsOivpeWKn+iDvVwiO3JldHVybiBuKz1cIlxcbllvdSBoYXMgZGlzYWJsZWQgZWRpdG9yIHNjcm9sbCwgcGxlYXNlIGRvIHRoaXMgeW91cnNlbGZcIix2b2lkIGNvbnNvbGUud2FybihuKX12YXIgcj1NcChcIiNcIitlKTtpZigwIT09ci5sZW5ndGgpe3ZhciBvPXJbMF07aWYoIVFPLmhhc0RPTU5vZGUodCxvKSlyZXR1cm4gbj1cIkVsZW1lbnQgKGZvdW5kIGJ5IGlkIGlzICdcIitlK1wiJykgaXMgbm90IGluIGVkaXRvciBET01cIixuKz1cIlxcbiDpgJrov4cgaWQgJ1wiK2UrXCInIOaJvuWIsOeahCBlbGVtZW50IOS4jeWcqCBlZGl0b3IgRE9NIOS5i+WGhVwiLHZvaWQgY29uc29sZS5lcnJvcihuLG8pO3ZhciBpPVFPLmdldFRleHRhcmVhKHQpLGE9aS4kdGV4dEFyZWFDb250YWluZXIsdT1pLiRzY3JvbGwscz1yLm9mZnNldCgpLnRvcCxsPWEub2Zmc2V0KCkudG9wO3VbMF0uc2Nyb2xsQnkoe3RvcDpzLWwsYmVoYXZpb3I6XCJzbW9vdGhcIn0pfX0sdC5zaG93UHJvZ3Jlc3NCYXI9ZnVuY3Rpb24oZSl7ZTwxfHxRTy5nZXRUZXh0YXJlYSh0KS5jaGFuZ2VQcm9ncmVzcyhlKX0sdC5oaWRlUGFuZWxPck1vZGFsPWZ1bmN0aW9uKCl7dmFyIGU9ZE8uZ2V0KHQpO251bGwhPWUmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaGlkZSgpfSkpfSx0LmVuYWJsZT1mdW5jdGlvbigpe3QuZ2V0Q29uZmlnKCkucmVhZE9ubHk9ITEsdC51cGRhdGVWaWV3KCl9LHQuZGlzYWJsZT1mdW5jdGlvbigpe3QuZ2V0Q29uZmlnKCkucmVhZE9ubHk9ITAsdC51cGRhdGVWaWV3KCl9LHQuaXNEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiB0LmdldENvbmZpZygpLnJlYWRPbmx5fSx0LnRvRE9NTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gUU8udG9ET01Ob2RlKHQsZSl9LHQuZnVsbFNjcmVlbj1mdW5jdGlvbigpe2lmKCF0LmlzRnVsbFNjcmVlbil7dmFyIGU9bnVsbCxuPVFPLmdldFRvb2xiYXIodCk7biYmKGU9bi4kYm94KTt2YXIgcj1RTy5nZXRUZXh0YXJlYSh0KS4kYm94LnBhcmVudCgpO2lmKGUmJmUucGFyZW50KClbMF0hPT1yWzBdKXRocm93IG5ldyBFcnJvcihcIkNhbiBub3Qgc2V0IGZ1bGwgc2NyZWVuLCBjYXVzZSB0b29sYmFyIERPTSBwYXJlbnQgaXMgbm90IGVxdWFsIHRvIHRleHRhcmVhIERPTSBwYXJlbnRcXG7kuI3og73orr7nva7lhajlsY/vvIzlm6DkuLogdG9vbGJhciBET00g54i26IqC54K55ZKMIHRleHRhcmVhIERPTSDniLboioLngrnkuI3kuIDoh7RcIik7ci5hZGRDbGFzcyhcInctZS1mdWxsLXNjcmVlbi1jb250YWluZXJcIik7dmFyIG89ci5jc3MoXCJ6LWluZGV4XCIpO3IuYXR0cihcImRhdGEtei1pbmRleFwiLG8udG9TdHJpbmcoKSksdC5pc0Z1bGxTY3JlZW49ITAsdC5lbWl0KFwiZnVsbFNjcmVlblwiKX19LHQudW5GdWxsU2NyZWVuPWZ1bmN0aW9uKCl7aWYodC5pc0Z1bGxTY3JlZW4pe3ZhciBlPVFPLmdldFRleHRhcmVhKHQpLiRib3gucGFyZW50KCk7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLnJlbW92ZUNsYXNzKFwidy1lLWZ1bGwtc2NyZWVuLWNvbnRhaW5lclwiKSx0LmlzRnVsbFNjcmVlbj0hMSx0LmVtaXQoXCJ1bkZ1bGxTY3JlZW5cIil9KSwyMDApfX0sdC5nZXRFZGl0YWJsZUNvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiBRTy5nZXRUZXh0YXJlYSh0KS4kdGV4dEFyZWFDb250YWluZXJbMF19LHR9KCkpKSkpKSk7aWYobiYmZnVuY3Rpb24oZSx0KXtyZXR1cm4gTEYoZSxcImRhdGEtdy1lLXRleHRhcmVhXCIsdCl9KGwsbikpdGhyb3cgbmV3IEVycm9yKFwiUmVwZWF0ZWQgY3JlYXRlIGVkaXRvciBieSBzZWxlY3RvciAnXCIrbitcIidcIik7dmFyIGM9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciB0PUp2KHRrKSxuPXt9LHI9ZS5NRU5VX0NPTkYsbz12b2lkIDA9PT1yP3t9OnI7cmV0dXJuIExoKHQsKGZ1bmN0aW9uKGUsdCl7blt0XT1vQShvQSh7fSxlKSxvW3RdfHx7fSl9KSksZGVsZXRlIGUuTUVOVV9DT05GLG9BKHtzY3JvbGw6ITAscmVhZE9ubHk6ITEsYXV0b0ZvY3VzOiEwLGRlY29yYXRlOmZ1bmN0aW9uKCl7cmV0dXJuW119LG1heExlbmd0aDowLE1FTlVfQ09ORjpuLGhvdmVyYmFyS2V5czp7fSxjdXN0b21BbGVydDpmdW5jdGlvbihlLHQpe3dpbmRvdy5hbGVydCh0K1wiOlxcblwiK2UpfX0sZSl9KG8pO2hPLnNldChsLGMpO3ZhciBmPWMuaG92ZXJiYXJLZXlzLGQ9dm9pZCAwPT09Zj97fTpmO2lmKHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bD1lKGwpfSkpLG51bGwhPWEmJihsLmNoaWxkcmVuPVJGKGwsYSkpLGkmJmkubGVuZ3RoJiYobC5jaGlsZHJlbj1pKSwwPT09bC5jaGlsZHJlbi5sZW5ndGgmJihsLmNoaWxkcmVuPVt7dHlwZTpcInBhcmFncmFwaFwiLGNoaWxkcmVuOlt7dGV4dDpcIlwifV19XSksUU8ubm9ybWFsaXplQ29udGVudChsKSxuKXt2YXIgcD1uZXcgZF8obik7aU8uc2V0KGwscCksYU8uc2V0KHAsbCkscC5jaGFuZ2VWaWV3U3RhdGUoKSxaQigoZnVuY3Rpb24oKXt2YXIgZT1wLiRzY3JvbGw7bnVsbCE9ZSYmZS5oZWlnaHQoKTwzMDAmJmNvbnNvbGUud2FybihcIue8lui+keWMuuWfn+mrmOW6piA8IDMwMHB4IOi/meWPr+iDveS8muWvvOiHtCBtb2RhbCBob3ZlcmJhciDlrprkvY3lvILluLhcXG5UZXh0YXJlYSBoZWlnaHQgPCAzMDBweCAuIFRoaXMgbWF5IGJlIGNhdXNlIG1vZGFsIGFuZCBob3ZlcmJhciBwb3NpdGlvbiBlcnJvclwiLGUpfSkpO3ZhciBoPXZvaWQgMDtPYmplY3Qua2V5cyhkKS5sZW5ndGg+MCYmKGg9bmV3IGpfLGxPLnNldChoLGwpLGNPLnNldChsLGgpKSxsLm9uKFwiY2hhbmdlXCIsKGZ1bmN0aW9uKCl7bC5oaWRlUGFuZWxPck1vZGFsKCl9KSksbC5vbihcInNjcm9sbFwiLChmdW5jdGlvbigpe2wuaGlkZVBhbmVsT3JNb2RhbCgpfSkpfWVsc2UgbC5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3JldHVybiBOXyhlLHQsbCxsKX0pKTt2YXIgZz1jLm9uQ3JlYXRlZCx2PWMub25EZXN0cm95ZWQ7cmV0dXJuIGcmJmwub24oXCJjcmVhdGVkXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGcobCl9KSksdiYmbC5vbihcImRlc3Ryb3llZFwiLChmdW5jdGlvbigpe3JldHVybiB2KGwpfSkpLFpCKChmdW5jdGlvbigpe3JldHVybiBsLmVtaXQoXCJjcmVhdGVkXCIpfSkpLGx9dmFyIExfPWlDKFwic3BsaWNlXCIpLFJfPWx3LlR5cGVFcnJvcixNXz1NYXRoLm1heCx6Xz1NYXRoLm1pbjtjUyh7dGFyZ2V0OlwiQXJyYXlcIixwcm90bzohMCxmb3JjZWQ6IUxffSx7c3BsaWNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGksYSx1LHM9RHcodGhpcyksbD1wRChzKSxjPVZEKGUsbCksZj1hcmd1bWVudHMubGVuZ3RoO2lmKDA9PT1mP249cj0wOjE9PT1mPyhuPTAscj1sLWMpOihuPWYtMixyPXpfKE1fKGNEKHQpLDApLGwtYykpLGwrbi1yPjkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgUl8oXCJNYXhpbXVtIGFsbG93ZWQgbGVuZ3RoIGV4Y2VlZGVkXCIpO2ZvcihvPUNEKHMsciksaT0wO2k8cjtpKyspKGE9YytpKWluIHMmJnR4KG8saSxzW2FdKTtpZihvLmxlbmd0aD1yLG48cil7Zm9yKGk9YztpPGwtcjtpKyspdT1pK24sKGE9aStyKWluIHM/c1t1XT1zW2FdOmRlbGV0ZSBzW3VdO2ZvcihpPWw7aT5sLXIrbjtpLS0pZGVsZXRlIHNbaS0xXX1lbHNlIGlmKG4+cilmb3IoaT1sLXI7aT5jO2ktLSl1PWkrbi0xLChhPWkrci0xKWluIHM/c1t1XT1zW2FdOmRlbGV0ZSBzW3VdO2ZvcihpPTA7aTxuO2krKylzW2krY109YXJndW1lbnRzW2krMl07cmV0dXJuIHMubGVuZ3RoPWwtcituLG99fSk7dmFyICRfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXM7dGhpcy4kdG9vbGJhcj1NcCgnPGRpdiBjbGFzcz1cInctZS1iYXIgdy1lLWJhci1zaG93IHctZS10b29sYmFyXCI+PC9kaXY+JyksdGhpcy5tZW51cz17fSx0aGlzLnRvb2xiYXJJdGVtcz1bXSx0aGlzLmNvbmZpZz17fSx0aGlzLmNoYW5nZVRvb2xiYXJTdGF0ZT1adigoZnVuY3Rpb24oKXtuLnRvb2xiYXJJdGVtcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNoYW5nZU1lbnVTdGF0ZSgpfSkpfSksMjAwKSx0aGlzLmNvbmZpZz10O3ZhciByPU1wKGUpO2lmKDA9PT1yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCB0b29sYmFyIERPTSBieSBzZWxlY3RvciAnXCIrZStcIidcIik7dGhpcy4kYm94PXI7dmFyIG89dGhpcy4kdG9vbGJhcjtvLm9uKFwibW91c2Vkb3duXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBlLnByZXZlbnREZWZhdWx0KCl9KSx7cGFzc2l2ZTohMX0pLHIuYXBwZW5kKG8pLFpCKChmdW5jdGlvbigpe24ucmVnaXN0ZXJJdGVtcygpLG4uY2hhbmdlVG9vbGJhclN0YXRlKCksbi5nZXRFZGl0b3JJbnN0YW5jZSgpLm9uKFwiY2hhbmdlXCIsbi5jaGFuZ2VUb29sYmFyU3RhdGUpfSkpfXJldHVybiBlLnByb3RvdHlwZS5nZXRNZW51cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnVzfSxlLnByb3RvdHlwZS5nZXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25maWd9LGUucHJvdG90eXBlLnJlZ2lzdGVySXRlbXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9XCJcIixuPXRoaXMuJHRvb2xiYXIscj10aGlzLmNvbmZpZyxvPXIudG9vbGJhcktleXMsaT12b2lkIDA9PT1vP1tdOm8sYT1yLmluc2VydEtleXMsdT12b2lkIDA9PT1hP3tpbmRleDowLGtleXM6W119OmEscz1yLmV4Y2x1ZGVLZXlzLGw9dm9pZCAwPT09cz9bXTpzLGM9SnYoaSk7dS5rZXlzLmxlbmd0aD4wJiYoXCJzdHJpbmdcIj09dHlwZW9mIHUua2V5cyYmKHUua2V5cz1bdS5rZXlzXSksdS5rZXlzLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7Yy5zcGxpY2UodS5pbmRleCt0LDAsZSl9KSkpO3ZhciBmPWMuZmlsdGVyKChmdW5jdGlvbihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYobC5pbmNsdWRlcyhlKSlyZXR1cm4hMX1lbHNlIGlmKGwuaW5jbHVkZXMoZS5rZXkpKXJldHVybiExO3JldHVybiEwfSkpLGQ9Zi5sZW5ndGg7Zi5mb3JFYWNoKChmdW5jdGlvbihyLG8pe2lmKFwifFwiPT09cil7aWYoMD09PW8pcmV0dXJuO2lmKG8rMT09PWQpcmV0dXJuO2lmKFwifFwiPT09dClyZXR1cm47dmFyIGk9Z18oKTtyZXR1cm4gbi5hcHBlbmQoaSksdm9pZCh0PXIpfWlmKFwic3RyaW5nXCI9PXR5cGVvZiByKXJldHVybiBlLnJlZ2lzdGVyU2luZ2xlSXRlbShyLGUpLHZvaWQodD1yKTtlLnJlZ2lzdGVyR3JvdXAociksdD1cImdyb3VwXCJ9KSl9LGUucHJvdG90eXBlLnJlZ2lzdGVyR3JvdXA9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMuJHRvb2xiYXIscj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEJfKGUpfShlKSxvPWUubWVudUtleXMsaT12b2lkIDA9PT1vP1tdOm8sYT10aGlzLmNvbmZpZy5leGNsdWRlS2V5cyx1PXZvaWQgMD09PWE/W106YTtpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3UuaW5jbHVkZXMoZSl8fHQucmVnaXN0ZXJTaW5nbGVJdGVtKGUscil9KSksbi5hcHBlbmQoci4kZWxlbSl9LGUucHJvdG90eXBlLnJlZ2lzdGVyU2luZ2xlSXRlbT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0RWRpdG9ySW5zdGFuY2UoKSxyPXQgaW5zdGFuY2VvZiBCXyxvPXRoaXMubWVudXMsaT1vW2VdO2lmKG51bGw9PWkpe3ZhciBhPW5rW2VdO2lmKG51bGw9PWEpdGhyb3cgbmV3IEVycm9yKFwiTm90IGZvdW5kIG1lbnUgaXRlbSBmYWN0b3J5IGJ5IGtleSAnXCIrZStcIidcIik7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoXCJNZW51IGl0ZW0gZmFjdG9yeSAoa2V5PSdcIitlK1wiJykgaXMgbm90IGEgZnVuY3Rpb25cIik7aT1hKCksb1tlXT1pfWVsc2UgY29uc29sZS53YXJuKFwiRHVwbGljYXRlZCB0b29sYmFyIG1lbnUga2V5ICdcIitlK1wiJ1xcbumHjeWkjeazqOWGjOS6huiPnOWNleagjyBtZW51ICdcIitlK1wiJ1wiKTt2YXIgdT1fXyhlLGkscik7dGhpcy50b29sYmFySXRlbXMucHVzaCh1KSxmTy5zZXQodSxuKSxyP3QuYXBwZW5kQmFySXRlbSh1KTp0LiR0b29sYmFyLmFwcGVuZCh1LiRlbGVtKX0sZS5wcm90b3R5cGUuZ2V0RWRpdG9ySW5zdGFuY2U9ZnVuY3Rpb24oKXt2YXIgZT11Ty5nZXQodGhpcyk7aWYobnVsbD09ZSl0aHJvdyBuZXcgRXJyb3IoXCJDYW4gbm90IGdldCBlZGl0b3IgaW5zdGFuY2VcIik7cmV0dXJuIGV9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLiR0b29sYmFyLnJlbW92ZSgpLHRoaXMubWVudXM9e30sdGhpcy50b29sYmFySXRlbXM9W119LGV9KCk7dmFyIEhfPVZFLkVYSVNUUyxWXz1iRS5mLFVfPUZ1bmN0aW9uLnByb3RvdHlwZSxXXz1tdyhVXy50b1N0cmluZyksR189L2Z1bmN0aW9uXFxiKD86XFxzfFxcL1xcKltcXFNcXHNdKj9cXCpcXC98XFwvXFwvW15cXG5cXHJdKltcXG5cXHJdKykqKFteXFxzKC9dKikvLHFfPW13KEdfLmV4ZWMpO2Z1bmN0aW9uIEtfKGUpe3ZhciB0PWUuc2VydmVyLG49dm9pZCAwPT09dD9cIlwiOnQscj1lLmZpZWxkTmFtZSxvPXZvaWQgMD09PXI/XCJcIjpyLGk9ZS5tYXhGaWxlU2l6ZSxhPXZvaWQgMD09PWk/MTA0ODU3NjA6aSx1PWUubWF4TnVtYmVyT2ZGaWxlcyxzPXZvaWQgMD09PXU/MTAwOnUsbD1lLm1ldGEsYz12b2lkIDA9PT1sP3t9OmwsZj1lLm1ldGFXaXRoVXJsLGQ9dm9pZCAwIT09ZiYmZixwPWUuaGVhZGVycyxoPXZvaWQgMD09PXA/e306cCxnPWUud2l0aENyZWRlbnRpYWxzLHY9dm9pZCAwIT09ZyYmZyx5PWUudGltZW91dCxtPXZvaWQgMD09PXk/MWU0OnksYj1lLm9uQmVmb3JlVXBsb2FkLHc9dm9pZCAwPT09Yj9mdW5jdGlvbihlKXtyZXR1cm4gZX06YixFPWUub25TdWNjZXNzLEQ9dm9pZCAwPT09RT9mdW5jdGlvbihlLHQpe306RSxTPWUub25FcnJvcix4PXZvaWQgMD09PVM/ZnVuY3Rpb24oZSx0LG4pe2NvbnNvbGUuZXJyb3IoZS5uYW1lK1wiIHVwbG9hZCBlcnJvclwiLHQsbil9OlMsQz1lLm9uUHJvZ3Jlc3MsQT12b2lkIDA9PT1DP2Z1bmN0aW9uKGUpe306QztpZighbil0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHVwbG9hZCBzZXJ2ZXIgYWRkcmVzc1xcbuayoeaciemFjee9ruS4iuS8oOWcsOWdgFwiKTtpZighbyl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IGZpZWxkTmFtZVxcbuayoeaciemFjee9riBmaWVsZE5hbWVcIik7dmFyIE89bjtkJiYoTz1mdW5jdGlvbihlLHQpe3ZhciBuPWFBKGUuc3BsaXQoXCIjXCIpLDIpLHI9blswXSxvPW5bMV0saT1bXTtMaCh0LChmdW5jdGlvbihlLHQpe2kucHVzaCh0K1wiPVwiK2UpfSkpO3ZhciBhPWkuam9pbihcIiZcIik7cmV0dXJuIHI9ci5pbmRleE9mKFwiP1wiKT4wP3IrXCImXCIrYTpyK1wiP1wiK2Esbz9yK1wiI1wiK286cn0oTyxjKSk7dmFyIGs9bmV3IF9tKHtvbkJlZm9yZVVwbG9hZDp3LHJlc3RyaWN0aW9uczp7bWF4RmlsZVNpemU6YSxtYXhOdW1iZXJPZkZpbGVzOnN9LG1ldGE6Y30pLnVzZShydyx7ZW5kcG9pbnQ6TyxoZWFkZXJzOmgsZm9ybURhdGE6ITAsZmllbGROYW1lOm8sYnVuZGxlOiEwLHdpdGhDcmVkZW50aWFsczp2LHRpbWVvdXQ6bX0pO3JldHVybiBrLm9uKFwidXBsb2FkLXN1Y2Nlc3NcIiwoZnVuY3Rpb24oZSx0KXt2YXIgbj10LmJvZHkscj12b2lkIDA9PT1uP3t9Om47dHJ5e0QoZSxyKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKFwid2FuZ0VkaXRvciB1cGxvYWQgZmlsZSAtIG9uU3VjY2VzcyBlcnJvclwiLGUpfWsucmVtb3ZlRmlsZShlLmlkKX0pKSxrLm9uKFwicHJvZ3Jlc3NcIiwoZnVuY3Rpb24oZSl7ZTwxfHxBKGUpfSkpLGsub24oXCJ1cGxvYWQtZXJyb3JcIiwoZnVuY3Rpb24oZSx0LG4pe3RyeXt4KGUsdCxuKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKFwid2FuZ0VkaXRvciB1cGxvYWQgZmlsZSAtIG9uRXJyb3IgZXJyb3JcIixlKX1rLnJlbW92ZUZpbGUoZS5pZCl9KSksay5vbihcInJlc3RyaWN0aW9uLWZhaWxlZFwiLChmdW5jdGlvbihlLHQpe3RyeXt4KGUsdCl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihcIndhbmdFZGl0b3IgdXBsb2FkIGZpbGUgLSBvbkVycm9yIGVycm9yXCIsZSl9ay5yZW1vdmVGaWxlKGUuaWQpfSkpLGt9ZnVuY3Rpb24gWV8oZSl7cmV0dXJuIFlfPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LFlfKGUpfWZ1bmN0aW9uIFhfKGUsdCxuKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBaXyhlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/T2JqZWN0KGFyZ3VtZW50c1t0XSk6e30scj1PYmplY3Qua2V5cyhuKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiZyLnB1c2guYXBwbHkocixPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goKGZ1bmN0aW9uKHQpe1hfKGUsdCxuW3RdKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiBKXyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gUV8oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fWZ1bmN0aW9uIGVQKGUsdCxuKXtyZXR1cm4gdCYmUV8oZS5wcm90b3R5cGUsdCksbiYmUV8oZSxuKSxlfWZ1bmN0aW9uIHRQKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiBlfWZ1bmN0aW9uIG5QKGUsdCl7aWYodCYmKFwib2JqZWN0XCI9PT1ZXyh0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgdCkpcmV0dXJuIHQ7aWYodm9pZCAwIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7cmV0dXJuIHRQKGUpfWZ1bmN0aW9uIHJQKGUpe3JldHVybiByUD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSxyUChlKX1mdW5jdGlvbiBvUChlLHQpe3JldHVybiBvUD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sb1AoZSx0KX1mdW5jdGlvbiBpUChlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmb1AoZSx0KX1LdyYmIUhfJiZWXyhVXyxcIm5hbWVcIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3RyeXtyZXR1cm4gcV8oR18sV18odGhpcykpWzFdfWNhdGNoKGUpe3JldHVyblwiXCJ9fX0pO3ZhciBhUD17dHlwZTpcImxvZ2dlclwiLGxvZzpmdW5jdGlvbihlKXt0aGlzLm91dHB1dChcImxvZ1wiLGUpfSx3YXJuOmZ1bmN0aW9uKGUpe3RoaXMub3V0cHV0KFwid2FyblwiLGUpfSxlcnJvcjpmdW5jdGlvbihlKXt0aGlzLm91dHB1dChcImVycm9yXCIsZSl9LG91dHB1dDpmdW5jdGlvbihlLHQpe2NvbnNvbGUmJmNvbnNvbGVbZV0mJmNvbnNvbGVbZV0uYXBwbHkoY29uc29sZSx0KX19LHVQPW5ldyhmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O0pfKHRoaXMsZSksdGhpcy5pbml0KHQsbil9cmV0dXJuIGVQKGUsW3trZXk6XCJpbml0XCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3RoaXMucHJlZml4PXQucHJlZml4fHxcImkxOG5leHQ6XCIsdGhpcy5sb2dnZXI9ZXx8YVAsdGhpcy5vcHRpb25zPXQsdGhpcy5kZWJ1Zz10LmRlYnVnfX0se2tleTpcInNldERlYnVnXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5kZWJ1Zz1lfX0se2tleTpcImxvZ1wiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LFwibG9nXCIsXCJcIiwhMCl9fSx7a2V5Olwid2FyblwiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LFwid2FyblwiLFwiXCIsITApfX0se2tleTpcImVycm9yXCIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gdGhpcy5mb3J3YXJkKHQsXCJlcnJvclwiLFwiXCIpfX0se2tleTpcImRlcHJlY2F0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIHRoaXMuZm9yd2FyZCh0LFwid2FyblwiLFwiV0FSTklORyBERVBSRUNBVEVEOiBcIiwhMCl9fSx7a2V5OlwiZm9yd2FyZFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiByJiYhdGhpcy5kZWJ1Zz9udWxsOihcInN0cmluZ1wiPT10eXBlb2YgZVswXSYmKGVbMF09XCJcIi5jb25jYXQobikuY29uY2F0KHRoaXMucHJlZml4LFwiIFwiKS5jb25jYXQoZVswXSkpLHRoaXMubG9nZ2VyW3RdKGUpKX19LHtrZXk6XCJjcmVhdGVcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUodGhpcy5sb2dnZXIsWl8oe30se3ByZWZpeDpcIlwiLmNvbmNhdCh0aGlzLnByZWZpeCxcIjpcIikuY29uY2F0KHQsXCI6XCIpfSx0aGlzLm9wdGlvbnMpKX19XSksZX0oKSksc1A9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Sl8odGhpcyxlKSx0aGlzLm9ic2VydmVycz17fX1yZXR1cm4gZVAoZSxbe2tleTpcIm9uXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybiBlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtuLm9ic2VydmVyc1tlXT1uLm9ic2VydmVyc1tlXXx8W10sbi5vYnNlcnZlcnNbZV0ucHVzaCh0KX0pKSx0aGlzfX0se2tleTpcIm9mZlwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5vYnNlcnZlcnNbZV0mJih0P3RoaXMub2JzZXJ2ZXJzW2VdPXRoaXMub2JzZXJ2ZXJzW2VdLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT10fSkpOmRlbGV0ZSB0aGlzLm9ic2VydmVyc1tlXSl9fSx7a2V5OlwiZW1pdFwiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtpZih0aGlzLm9ic2VydmVyc1tlXSl7dmFyIG89W10uY29uY2F0KHRoaXMub2JzZXJ2ZXJzW2VdKTtvLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuYXBwbHkodm9pZCAwLG4pfSkpfWlmKHRoaXMub2JzZXJ2ZXJzW1wiKlwiXSl7dmFyIGk9W10uY29uY2F0KHRoaXMub2JzZXJ2ZXJzW1wiKlwiXSk7aS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmFwcGx5KHQsW2VdLmNvbmNhdChuKSl9KSl9fX1dKSxlfSgpO2Z1bmN0aW9uIGxQKCl7dmFyIGUsdCxuPW5ldyBQcm9taXNlKChmdW5jdGlvbihuLHIpe2U9bix0PXJ9KSk7cmV0dXJuIG4ucmVzb2x2ZT1lLG4ucmVqZWN0PXQsbn1mdW5jdGlvbiBjUChlKXtyZXR1cm4gbnVsbD09ZT9cIlwiOlwiXCIrZX1mdW5jdGlvbiBmUChlLHQsbil7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXt0W2VdJiYobltlXT10W2VdKX0pKX1mdW5jdGlvbiBkUChlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5pbmRleE9mKFwiIyMjXCIpPi0xP2UucmVwbGFjZSgvIyMjL2csXCIuXCIpOmV9ZnVuY3Rpb24gbygpe3JldHVybiFlfHxcInN0cmluZ1wiPT10eXBlb2YgZX1mb3IodmFyIGk9XCJzdHJpbmdcIiE9dHlwZW9mIHQ/W10uY29uY2F0KHQpOnQuc3BsaXQoXCIuXCIpO2kubGVuZ3RoPjE7KXtpZihvKCkpcmV0dXJue307dmFyIGE9cihpLnNoaWZ0KCkpOyFlW2FdJiZuJiYoZVthXT1uZXcgbiksZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxhKT9lW2FdOnt9fXJldHVybiBvKCk/e306e29iajplLGs6cihpLnNoaWZ0KCkpfX1mdW5jdGlvbiBwUChlLHQsbil7dmFyIHI9ZFAoZSx0LE9iamVjdCk7ci5vYmpbci5rXT1ufWZ1bmN0aW9uIGhQKGUsdCl7dmFyIG49ZFAoZSx0KSxyPW4ub2JqLG89bi5rO2lmKHIpcmV0dXJuIHJbb119ZnVuY3Rpb24gZ1AoZSx0LG4pe3ZhciByPWhQKGUsbik7cmV0dXJuIHZvaWQgMCE9PXI/cjpoUCh0LG4pfWZ1bmN0aW9uIHZQKGUsdCxuKXtmb3IodmFyIHIgaW4gdClcIl9fcHJvdG9fX1wiIT09ciYmXCJjb25zdHJ1Y3RvclwiIT09ciYmKHIgaW4gZT9cInN0cmluZ1wiPT10eXBlb2YgZVtyXXx8ZVtyXWluc3RhbmNlb2YgU3RyaW5nfHxcInN0cmluZ1wiPT10eXBlb2YgdFtyXXx8dFtyXWluc3RhbmNlb2YgU3RyaW5nP24mJihlW3JdPXRbcl0pOnZQKGVbcl0sdFtyXSxuKTplW3JdPXRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIHlQKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLFwiXFxcXCQmXCIpfXZhciBtUD17XCImXCI6XCImYW1wO1wiLFwiPFwiOlwiJmx0O1wiLFwiPlwiOlwiJmd0O1wiLCdcIic6XCImcXVvdDtcIixcIidcIjpcIiYjMzk7XCIsXCIvXCI6XCImI3gyRjtcIn07ZnVuY3Rpb24gYlAoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/ZS5yZXBsYWNlKC9bJjw+XCInXFwvXS9nLChmdW5jdGlvbihlKXtyZXR1cm4gbVBbZV19KSk6ZX12YXIgd1A9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lm5hdmlnYXRvciYmd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQmJndpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJNU0lFXCIpPi0xO2Z1bmN0aW9uIEVQKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOlwiLlwiO2lmKGUpe2lmKGVbdF0pcmV0dXJuIGVbdF07Zm9yKHZhciByPXQuc3BsaXQobiksbz1lLGk9MDtpPHIubGVuZ3RoOysraSl7aWYoIW8pcmV0dXJuO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBvW3JbaV1dJiZpKzE8ci5sZW5ndGgpcmV0dXJuO2lmKHZvaWQgMD09PW9bcltpXV0pe2Zvcih2YXIgYT0yLHU9ci5zbGljZShpLGkrYSkuam9pbihuKSxzPW9bdV07dm9pZCAwPT09cyYmci5sZW5ndGg+aSthOylhKysscz1vW3U9ci5zbGljZShpLGkrYSkuam9pbihuKV07aWYodm9pZCAwPT09cylyZXR1cm47aWYoXCJzdHJpbmdcIj09dHlwZW9mIHMpcmV0dXJuIHM7aWYodSYmXCJzdHJpbmdcIj09dHlwZW9mIHNbdV0pcmV0dXJuIHNbdV07dmFyIGw9ci5zbGljZShpK2EpLmpvaW4obik7cmV0dXJuIGw/RVAocyxsLG4pOnZvaWQgMH1vPW9bcltpXV19cmV0dXJuIG99fXZhciBEUD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciBuLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntuczpbXCJ0cmFuc2xhdGlvblwiXSxkZWZhdWx0TlM6XCJ0cmFuc2xhdGlvblwifTtyZXR1cm4gSl8odGhpcyx0KSxuPW5QKHRoaXMsclAodCkuY2FsbCh0aGlzKSksd1AmJnNQLmNhbGwodFAobikpLG4uZGF0YT1lfHx7fSxuLm9wdGlvbnM9cix2b2lkIDA9PT1uLm9wdGlvbnMua2V5U2VwYXJhdG9yJiYobi5vcHRpb25zLmtleVNlcGFyYXRvcj1cIi5cIiksdm9pZCAwPT09bi5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmUmJihuLm9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZT0hMCksbn1yZXR1cm4gaVAodCxzUCksZVAodCxbe2tleTpcImFkZE5hbWVzcGFjZXNcIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm9wdGlvbnMubnMuaW5kZXhPZihlKTwwJiZ0aGlzLm9wdGlvbnMubnMucHVzaChlKX19LHtrZXk6XCJyZW1vdmVOYW1lc3BhY2VzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRpb25zLm5zLmluZGV4T2YoZSk7dD4tMSYmdGhpcy5vcHRpb25zLm5zLnNwbGljZSh0LDEpfX0se2tleTpcImdldFJlc291cmNlXCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fSxvPXZvaWQgMCE9PXIua2V5U2VwYXJhdG9yP3Iua2V5U2VwYXJhdG9yOnRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IsaT12b2lkIDAhPT1yLmlnbm9yZUpTT05TdHJ1Y3R1cmU/ci5pZ25vcmVKU09OU3RydWN0dXJlOnRoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlLGE9W2UsdF07biYmXCJzdHJpbmdcIiE9dHlwZW9mIG4mJihhPWEuY29uY2F0KG4pKSxuJiZcInN0cmluZ1wiPT10eXBlb2YgbiYmKGE9YS5jb25jYXQobz9uLnNwbGl0KG8pOm4pKSxlLmluZGV4T2YoXCIuXCIpPi0xJiYoYT1lLnNwbGl0KFwiLlwiKSk7dmFyIHU9aFAodGhpcy5kYXRhLGEpO3JldHVybiB1fHwhaXx8XCJzdHJpbmdcIiE9dHlwZW9mIG4/dTpFUCh0aGlzLmRhdGEmJnRoaXMuZGF0YVtlXSYmdGhpcy5kYXRhW2VdW3RdLG4sbyl9fSx7a2V5OlwiYWRkUmVzb3VyY2VcIix2YWx1ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06e3NpbGVudDohMX0saT10aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yO3ZvaWQgMD09PWkmJihpPVwiLlwiKTt2YXIgYT1bZSx0XTtuJiYoYT1hLmNvbmNhdChpP24uc3BsaXQoaSk6bikpLGUuaW5kZXhPZihcIi5cIik+LTEmJihyPXQsdD0oYT1lLnNwbGl0KFwiLlwiKSlbMV0pLHRoaXMuYWRkTmFtZXNwYWNlcyh0KSxwUCh0aGlzLmRhdGEsYSxyKSxvLnNpbGVudHx8dGhpcy5lbWl0KFwiYWRkZWRcIixlLHQsbixyKX19LHtrZXk6XCJhZGRSZXNvdXJjZXNcIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOntzaWxlbnQ6ITF9O2Zvcih2YXIgbyBpbiBuKVwic3RyaW5nXCIhPXR5cGVvZiBuW29dJiZcIltvYmplY3QgQXJyYXldXCIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KG5bb10pfHx0aGlzLmFkZFJlc291cmNlKGUsdCxvLG5bb10se3NpbGVudDohMH0pO3Iuc2lsZW50fHx0aGlzLmVtaXQoXCJhZGRlZFwiLGUsdCxuKX19LHtrZXk6XCJhZGRSZXNvdXJjZUJ1bmRsZVwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0/YXJndW1lbnRzWzVdOntzaWxlbnQ6ITF9LGE9W2UsdF07ZS5pbmRleE9mKFwiLlwiKT4tMSYmKHI9bixuPXQsdD0oYT1lLnNwbGl0KFwiLlwiKSlbMV0pLHRoaXMuYWRkTmFtZXNwYWNlcyh0KTt2YXIgdT1oUCh0aGlzLmRhdGEsYSl8fHt9O3I/dlAodSxuLG8pOnU9Wl8oe30sdSxuKSxwUCh0aGlzLmRhdGEsYSx1KSxpLnNpbGVudHx8dGhpcy5lbWl0KFwiYWRkZWRcIixlLHQsbil9fSx7a2V5OlwicmVtb3ZlUmVzb3VyY2VCdW5kbGVcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuaGFzUmVzb3VyY2VCdW5kbGUoZSx0KSYmZGVsZXRlIHRoaXMuZGF0YVtlXVt0XSx0aGlzLnJlbW92ZU5hbWVzcGFjZXModCksdGhpcy5lbWl0KFwicmVtb3ZlZFwiLGUsdCl9fSx7a2V5OlwiaGFzUmVzb3VyY2VCdW5kbGVcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDAhPT10aGlzLmdldFJlc291cmNlKGUsdCl9fSx7a2V5OlwiZ2V0UmVzb3VyY2VCdW5kbGVcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0fHwodD10aGlzLm9wdGlvbnMuZGVmYXVsdE5TKSxcInYxXCI9PT10aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQST9aXyh7fSx7fSx0aGlzLmdldFJlc291cmNlKGUsdCkpOnRoaXMuZ2V0UmVzb3VyY2UoZSx0KX19LHtrZXk6XCJnZXREYXRhQnlMYW5ndWFnZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRhdGFbZV19fSx7a2V5OlwidG9KU09OXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX1dKSx0fSgpLFNQPXtwcm9jZXNzb3JzOnt9LGFkZFBvc3RQcm9jZXNzb3I6ZnVuY3Rpb24oZSl7dGhpcy5wcm9jZXNzb3JzW2UubmFtZV09ZX0saGFuZGxlOmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9dGhpcztyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtpLnByb2Nlc3NvcnNbZV0mJih0PWkucHJvY2Vzc29yc1tlXS5wcm9jZXNzKHQsbixyLG8pKX0pKSx0fX0seFA9e30sQ1A9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgbixyPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtyZXR1cm4gSl8odGhpcyx0KSxuPW5QKHRoaXMsclAodCkuY2FsbCh0aGlzKSksd1AmJnNQLmNhbGwodFAobikpLGZQKFtcInJlc291cmNlU3RvcmVcIixcImxhbmd1YWdlVXRpbHNcIixcInBsdXJhbFJlc29sdmVyXCIsXCJpbnRlcnBvbGF0b3JcIixcImJhY2tlbmRDb25uZWN0b3JcIixcImkxOG5Gb3JtYXRcIixcInV0aWxzXCJdLGUsdFAobikpLG4ub3B0aW9ucz1yLHZvaWQgMD09PW4ub3B0aW9ucy5rZXlTZXBhcmF0b3ImJihuLm9wdGlvbnMua2V5U2VwYXJhdG9yPVwiLlwiKSxuLmxvZ2dlcj11UC5jcmVhdGUoXCJ0cmFuc2xhdG9yXCIpLG59cmV0dXJuIGlQKHQsc1ApLGVQKHQsW3trZXk6XCJjaGFuZ2VMYW5ndWFnZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe2UmJih0aGlzLmxhbmd1YWdlPWUpfX0se2tleTpcImV4aXN0c1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7aW50ZXJwb2xhdGlvbjp7fX07aWYobnVsbD09ZSlyZXR1cm4hMTt2YXIgbj10aGlzLnJlc29sdmUoZSx0KTtyZXR1cm4gbiYmdm9pZCAwIT09bi5yZXN9fSx7a2V5OlwiZXh0cmFjdEZyb21LZXlcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXZvaWQgMCE9PXQubnNTZXBhcmF0b3I/dC5uc1NlcGFyYXRvcjp0aGlzLm9wdGlvbnMubnNTZXBhcmF0b3I7dm9pZCAwPT09biYmKG49XCI6XCIpO3ZhciByPXZvaWQgMCE9PXQua2V5U2VwYXJhdG9yP3Qua2V5U2VwYXJhdG9yOnRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3Isbz10Lm5zfHx0aGlzLm9wdGlvbnMuZGVmYXVsdE5TO2lmKG4mJmUuaW5kZXhPZihuKT4tMSl7dmFyIGk9ZS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtpZihpJiZpLmxlbmd0aD4wKXJldHVybntrZXk6ZSxuYW1lc3BhY2VzOm99O3ZhciBhPWUuc3BsaXQobik7KG4hPT1yfHxuPT09ciYmdGhpcy5vcHRpb25zLm5zLmluZGV4T2YoYVswXSk+LTEpJiYobz1hLnNoaWZ0KCkpLGU9YS5qb2luKHIpfXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBvJiYobz1bb10pLHtrZXk6ZSxuYW1lc3BhY2VzOm99fX0se2tleTpcInRyYW5zbGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKGUsbixyKXt2YXIgbz10aGlzO2lmKFwib2JqZWN0XCIhPT1ZXyhuKSYmdGhpcy5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyJiYobj10aGlzLm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXIoYXJndW1lbnRzKSksbnx8KG49e30pLG51bGw9PWUpcmV0dXJuXCJcIjtBcnJheS5pc0FycmF5KGUpfHwoZT1bU3RyaW5nKGUpXSk7dmFyIGk9dm9pZCAwIT09bi5rZXlTZXBhcmF0b3I/bi5rZXlTZXBhcmF0b3I6dGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcixhPXRoaXMuZXh0cmFjdEZyb21LZXkoZVtlLmxlbmd0aC0xXSxuKSx1PWEua2V5LHM9YS5uYW1lc3BhY2VzLGw9c1tzLmxlbmd0aC0xXSxjPW4ubG5nfHx0aGlzLmxhbmd1YWdlLGY9bi5hcHBlbmROYW1lc3BhY2VUb0NJTW9kZXx8dGhpcy5vcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlO2lmKGMmJlwiY2ltb2RlXCI9PT1jLnRvTG93ZXJDYXNlKCkpe2lmKGYpe3ZhciBkPW4ubnNTZXBhcmF0b3J8fHRoaXMub3B0aW9ucy5uc1NlcGFyYXRvcjtyZXR1cm4gbCtkK3V9cmV0dXJuIHV9dmFyIHA9dGhpcy5yZXNvbHZlKGUsbiksaD1wJiZwLnJlcyxnPXAmJnAudXNlZEtleXx8dSx2PXAmJnAuZXhhY3RVc2VkS2V5fHx1LHk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShoKSxtPVtcIltvYmplY3QgTnVtYmVyXVwiLFwiW29iamVjdCBGdW5jdGlvbl1cIixcIltvYmplY3QgUmVnRXhwXVwiXSxiPXZvaWQgMCE9PW4uam9pbkFycmF5cz9uLmpvaW5BcnJheXM6dGhpcy5vcHRpb25zLmpvaW5BcnJheXMsdz0hdGhpcy5pMThuRm9ybWF0fHx0aGlzLmkxOG5Gb3JtYXQuaGFuZGxlQXNPYmplY3QsRT1cInN0cmluZ1wiIT10eXBlb2YgaCYmXCJib29sZWFuXCIhPXR5cGVvZiBoJiZcIm51bWJlclwiIT10eXBlb2YgaDtpZih3JiZoJiZFJiZtLmluZGV4T2YoeSk8MCYmKFwic3RyaW5nXCIhPXR5cGVvZiBifHxcIltvYmplY3QgQXJyYXldXCIhPT15KSl7aWYoIW4ucmV0dXJuT2JqZWN0cyYmIXRoaXMub3B0aW9ucy5yZXR1cm5PYmplY3RzKXJldHVybiB0aGlzLm9wdGlvbnMucmV0dXJuZWRPYmplY3RIYW5kbGVyfHx0aGlzLmxvZ2dlci53YXJuKFwiYWNjZXNzaW5nIGFuIG9iamVjdCAtIGJ1dCByZXR1cm5PYmplY3RzIG9wdGlvbnMgaXMgbm90IGVuYWJsZWQhXCIpLHRoaXMub3B0aW9ucy5yZXR1cm5lZE9iamVjdEhhbmRsZXI/dGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcihnLGgsWl8oe30sbix7bnM6c30pKTpcImtleSAnXCIuY29uY2F0KHUsXCIgKFwiKS5jb25jYXQodGhpcy5sYW5ndWFnZSxcIiknIHJldHVybmVkIGFuIG9iamVjdCBpbnN0ZWFkIG9mIHN0cmluZy5cIik7aWYoaSl7dmFyIEQ9XCJbb2JqZWN0IEFycmF5XVwiPT09eSxTPUQ/W106e30seD1EP3Y6Zztmb3IodmFyIEMgaW4gaClpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaCxDKSl7dmFyIEE9XCJcIi5jb25jYXQoeCkuY29uY2F0KGkpLmNvbmNhdChDKTtTW0NdPXRoaXMudHJhbnNsYXRlKEEsWl8oe30sbix7am9pbkFycmF5czohMSxuczpzfSkpLFNbQ109PT1BJiYoU1tDXT1oW0NdKX1oPVN9fWVsc2UgaWYodyYmXCJzdHJpbmdcIj09dHlwZW9mIGImJlwiW29iamVjdCBBcnJheV1cIj09PXkpKGg9aC5qb2luKGIpKSYmKGg9dGhpcy5leHRlbmRUcmFuc2xhdGlvbihoLGUsbixyKSk7ZWxzZXt2YXIgTz0hMSxrPSExLEI9dm9pZCAwIT09bi5jb3VudCYmXCJzdHJpbmdcIiE9dHlwZW9mIG4uY291bnQsRj10Lmhhc0RlZmF1bHRWYWx1ZShuKSxUPUI/dGhpcy5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgoYyxuLmNvdW50KTpcIlwiLF89bltcImRlZmF1bHRWYWx1ZVwiLmNvbmNhdChUKV18fG4uZGVmYXVsdFZhbHVlOyF0aGlzLmlzVmFsaWRMb29rdXAoaCkmJkYmJihPPSEwLGg9XyksdGhpcy5pc1ZhbGlkTG9va3VwKGgpfHwoaz0hMCxoPXUpO3ZhciBQPW4ubWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5fHx0aGlzLm9wdGlvbnMubWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5LGo9UCYmaz92b2lkIDA6aCxOPUYmJl8hPT1oJiZ0aGlzLm9wdGlvbnMudXBkYXRlTWlzc2luZztpZihrfHxPfHxOKXtpZih0aGlzLmxvZ2dlci5sb2coTj9cInVwZGF0ZUtleVwiOlwibWlzc2luZ0tleVwiLGMsbCx1LE4/XzpoKSxpKXt2YXIgST10aGlzLnJlc29sdmUodSxaXyh7fSxuLHtrZXlTZXBhcmF0b3I6ITF9KSk7SSYmSS5yZXMmJnRoaXMubG9nZ2VyLndhcm4oXCJTZWVtcyB0aGUgbG9hZGVkIHRyYW5zbGF0aW9ucyB3ZXJlIGluIGZsYXQgSlNPTiBmb3JtYXQgaW5zdGVhZCBvZiBuZXN0ZWQuIEVpdGhlciBzZXQga2V5U2VwYXJhdG9yOiBmYWxzZSBvbiBpbml0IG9yIG1ha2Ugc3VyZSB5b3VyIHRyYW5zbGF0aW9ucyBhcmUgcHVibGlzaGVkIGluIG5lc3RlZCBmb3JtYXQuXCIpfXZhciBMPVtdLFI9dGhpcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nLG4ubG5nfHx0aGlzLmxhbmd1YWdlKTtpZihcImZhbGxiYWNrXCI9PT10aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdUbyYmUiYmUlswXSlmb3IodmFyIE09MDtNPFIubGVuZ3RoO00rKylMLnB1c2goUltNXSk7ZWxzZVwiYWxsXCI9PT10aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdUbz9MPXRoaXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkobi5sbmd8fHRoaXMubGFuZ3VhZ2UpOkwucHVzaChuLmxuZ3x8dGhpcy5sYW5ndWFnZSk7dmFyIHo9ZnVuY3Rpb24oZSx0LHIpe28ub3B0aW9ucy5taXNzaW5nS2V5SGFuZGxlcj9vLm9wdGlvbnMubWlzc2luZ0tleUhhbmRsZXIoZSxsLHQsTj9yOmosTixuKTpvLmJhY2tlbmRDb25uZWN0b3ImJm8uYmFja2VuZENvbm5lY3Rvci5zYXZlTWlzc2luZyYmby5iYWNrZW5kQ29ubmVjdG9yLnNhdmVNaXNzaW5nKGUsbCx0LE4/cjpqLE4sbiksby5lbWl0KFwibWlzc2luZ0tleVwiLGUsbCx0LGgpfTt0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmcmJih0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdQbHVyYWxzJiZCP0wuZm9yRWFjaCgoZnVuY3Rpb24oZSl7by5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXhlcyhlKS5mb3JFYWNoKChmdW5jdGlvbih0KXt6KFtlXSx1K3QsbltcImRlZmF1bHRWYWx1ZVwiLmNvbmNhdCh0KV18fF8pfSkpfSkpOnooTCx1LF8pKX1oPXRoaXMuZXh0ZW5kVHJhbnNsYXRpb24oaCxlLG4scCxyKSxrJiZoPT09dSYmdGhpcy5vcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleSYmKGg9XCJcIi5jb25jYXQobCxcIjpcIikuY29uY2F0KHUpKSwoa3x8TykmJnRoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyJiYoaD10aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlcihoKSl9cmV0dXJuIGh9fSx7a2V5OlwiZXh0ZW5kVHJhbnNsYXRpb25cIix2YWx1ZTpmdW5jdGlvbihlLHQsbixyLG8pe3ZhciBpPXRoaXM7aWYodGhpcy5pMThuRm9ybWF0JiZ0aGlzLmkxOG5Gb3JtYXQucGFyc2UpZT10aGlzLmkxOG5Gb3JtYXQucGFyc2UoZSxuLHIudXNlZExuZyxyLnVzZWROUyxyLnVzZWRLZXkse3Jlc29sdmVkOnJ9KTtlbHNlIGlmKCFuLnNraXBJbnRlcnBvbGF0aW9uKXtuLmludGVycG9sYXRpb24mJnRoaXMuaW50ZXJwb2xhdG9yLmluaXQoWl8oe30sbix7aW50ZXJwb2xhdGlvbjpaXyh7fSx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbixuLmludGVycG9sYXRpb24pfSkpO3ZhciBhLHU9bi5pbnRlcnBvbGF0aW9uJiZuLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzfHx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXM7aWYodSl7dmFyIHM9ZS5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTthPXMmJnMubGVuZ3RofXZhciBsPW4ucmVwbGFjZSYmXCJzdHJpbmdcIiE9dHlwZW9mIG4ucmVwbGFjZT9uLnJlcGxhY2U6bjtpZih0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzJiYobD1aXyh7fSx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzLGwpKSxlPXRoaXMuaW50ZXJwb2xhdG9yLmludGVycG9sYXRlKGUsbCxuLmxuZ3x8dGhpcy5sYW5ndWFnZSxuKSx1KXt2YXIgYz1lLm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO2E8KGMmJmMubGVuZ3RoKSYmKG4ubmVzdD0hMSl9ITEhPT1uLm5lc3QmJihlPXRoaXMuaW50ZXJwb2xhdG9yLm5lc3QoZSwoZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxhPTA7YTxlO2ErKylyW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbyYmb1swXT09PXJbMF0mJiFuLmNvbnRleHQ/KGkubG9nZ2VyLndhcm4oXCJJdCBzZWVtcyB5b3UgYXJlIG5lc3RpbmcgcmVjdXJzaXZlbHkga2V5OiBcIi5jb25jYXQoclswXSxcIiBpbiBrZXk6IFwiKS5jb25jYXQodFswXSkpLG51bGwpOmkudHJhbnNsYXRlLmFwcGx5KGksci5jb25jYXQoW3RdKSl9KSxuKSksbi5pbnRlcnBvbGF0aW9uJiZ0aGlzLmludGVycG9sYXRvci5yZXNldCgpfXZhciBmPW4ucG9zdFByb2Nlc3N8fHRoaXMub3B0aW9ucy5wb3N0UHJvY2VzcyxkPVwic3RyaW5nXCI9PXR5cGVvZiBmP1tmXTpmO3JldHVybiBudWxsIT1lJiZkJiZkLmxlbmd0aCYmITEhPT1uLmFwcGx5UG9zdFByb2Nlc3NvciYmKGU9U1AuaGFuZGxlKGQsZSx0LHRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLnBvc3RQcm9jZXNzUGFzc1Jlc29sdmVkP1pfKHtpMThuUmVzb2x2ZWQ6cn0sbik6bix0aGlzKSksZX19LHtrZXk6XCJyZXNvbHZlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8saSxhPXRoaXMsdT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtlXSksZS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZighYS5pc1ZhbGlkTG9va3VwKHQpKXt2YXIgcz1hLmV4dHJhY3RGcm9tS2V5KGUsdSksbD1zLmtleTtuPWw7dmFyIGM9cy5uYW1lc3BhY2VzO2Eub3B0aW9ucy5mYWxsYmFja05TJiYoYz1jLmNvbmNhdChhLm9wdGlvbnMuZmFsbGJhY2tOUykpO3ZhciBmPXZvaWQgMCE9PXUuY291bnQmJlwic3RyaW5nXCIhPXR5cGVvZiB1LmNvdW50LGQ9dm9pZCAwIT09dS5jb250ZXh0JiYoXCJzdHJpbmdcIj09dHlwZW9mIHUuY29udGV4dHx8XCJudW1iZXJcIj09dHlwZW9mIHUuY29udGV4dCkmJlwiXCIhPT11LmNvbnRleHQscD11LmxuZ3M/dS5sbmdzOmEubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkodS5sbmd8fGEubGFuZ3VhZ2UsdS5mYWxsYmFja0xuZyk7Yy5mb3JFYWNoKChmdW5jdGlvbihlKXthLmlzVmFsaWRMb29rdXAodCl8fChpPWUsIXhQW1wiXCIuY29uY2F0KHBbMF0sXCItXCIpLmNvbmNhdChlKV0mJmEudXRpbHMmJmEudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlJiYhYS51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UoaSkmJih4UFtcIlwiLmNvbmNhdChwWzBdLFwiLVwiKS5jb25jYXQoZSldPSEwLGEubG9nZ2VyLndhcm4oJ2tleSBcIicuY29uY2F0KG4sJ1wiIGZvciBsYW5ndWFnZXMgXCInKS5jb25jYXQocC5qb2luKFwiLCBcIiksJ1wiIHdvblxcJ3QgZ2V0IHJlc29sdmVkIGFzIG5hbWVzcGFjZSBcIicpLmNvbmNhdChpLCdcIiB3YXMgbm90IHlldCBsb2FkZWQnKSxcIlRoaXMgbWVhbnMgc29tZXRoaW5nIElTIFdST05HIGluIHlvdXIgc2V0dXAuIFlvdSBhY2Nlc3MgdGhlIHQgZnVuY3Rpb24gYmVmb3JlIGkxOG5leHQuaW5pdCAvIGkxOG5leHQubG9hZE5hbWVzcGFjZSAvIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2Ugd2FzIGRvbmUuIFdhaXQgZm9yIHRoZSBjYWxsYmFjayBvciBQcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIGFjY2Vzc2luZyBpdCEhIVwiKSkscC5mb3JFYWNoKChmdW5jdGlvbihuKXtpZighYS5pc1ZhbGlkTG9va3VwKHQpKXtvPW47dmFyIGkscyxjPWwscD1bY107Zm9yKGEuaTE4bkZvcm1hdCYmYS5pMThuRm9ybWF0LmFkZExvb2t1cEtleXM/YS5pMThuRm9ybWF0LmFkZExvb2t1cEtleXMocCxsLG4sZSx1KTooZiYmKGk9YS5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgobix1LmNvdW50KSksZiYmZCYmcC5wdXNoKGMraSksZCYmcC5wdXNoKGMrPVwiXCIuY29uY2F0KGEub3B0aW9ucy5jb250ZXh0U2VwYXJhdG9yKS5jb25jYXQodS5jb250ZXh0KSksZiYmcC5wdXNoKGMrPWkpKTtzPXAucG9wKCk7KWEuaXNWYWxpZExvb2t1cCh0KXx8KHI9cyx0PWEuZ2V0UmVzb3VyY2UobixlLHMsdSkpfX0pKSl9KSl9fSkpLHtyZXM6dCx1c2VkS2V5Om4sZXhhY3RVc2VkS2V5OnIsdXNlZExuZzpvLHVzZWROUzppfX19LHtrZXk6XCJpc1ZhbGlkTG9va3VwXCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuISh2b2lkIDA9PT1lfHwhdGhpcy5vcHRpb25zLnJldHVybk51bGwmJm51bGw9PT1lfHwhdGhpcy5vcHRpb25zLnJldHVybkVtcHR5U3RyaW5nJiZcIlwiPT09ZSl9fSx7a2V5OlwiZ2V0UmVzb3VyY2VcIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3JldHVybiB0aGlzLmkxOG5Gb3JtYXQmJnRoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZT90aGlzLmkxOG5Gb3JtYXQuZ2V0UmVzb3VyY2UoZSx0LG4scik6dGhpcy5yZXNvdXJjZVN0b3JlLmdldFJlc291cmNlKGUsdCxuLHIpfX1dLFt7a2V5OlwiaGFzRGVmYXVsdFZhbHVlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJkZWZhdWx0VmFsdWVcIjtmb3IodmFyIG4gaW4gZSlpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdD09PW4uc3Vic3RyaW5nKDAsdC5sZW5ndGgpJiZ2b2lkIDAhPT1lW25dKXJldHVybiEwO3JldHVybiExfX1dKSx0fSgpO2Z1bmN0aW9uIEFQKGUpe3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9dmFyIE9QPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtKXyh0aGlzLGUpLHRoaXMub3B0aW9ucz10LHRoaXMud2hpdGVsaXN0PXRoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzfHwhMSx0aGlzLnN1cHBvcnRlZExuZ3M9dGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3N8fCExLHRoaXMubG9nZ2VyPXVQLmNyZWF0ZShcImxhbmd1YWdlVXRpbHNcIil9cmV0dXJuIGVQKGUsW3trZXk6XCJnZXRTY3JpcHRQYXJ0RnJvbUNvZGVcIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZXx8ZS5pbmRleE9mKFwiLVwiKTwwKXJldHVybiBudWxsO3ZhciB0PWUuc3BsaXQoXCItXCIpO3JldHVybiAyPT09dC5sZW5ndGg/bnVsbDoodC5wb3AoKSxcInhcIj09PXRbdC5sZW5ndGgtMV0udG9Mb3dlckNhc2UoKT9udWxsOnRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHQuam9pbihcIi1cIikpKX19LHtrZXk6XCJnZXRMYW5ndWFnZVBhcnRGcm9tQ29kZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlfHxlLmluZGV4T2YoXCItXCIpPDApcmV0dXJuIGU7dmFyIHQ9ZS5zcGxpdChcIi1cIik7cmV0dXJuIHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHRbMF0pfX0se2tleTpcImZvcm1hdExhbmd1YWdlQ29kZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiZlLmluZGV4T2YoXCItXCIpPi0xKXt2YXIgdD1bXCJoYW5zXCIsXCJoYW50XCIsXCJsYXRuXCIsXCJjeXJsXCIsXCJjYW5zXCIsXCJtb25nXCIsXCJhcmFiXCJdLG49ZS5zcGxpdChcIi1cIik7cmV0dXJuIHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmc/bj1uLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKX0pKToyPT09bi5sZW5ndGg/KG5bMF09blswXS50b0xvd2VyQ2FzZSgpLG5bMV09blsxXS50b1VwcGVyQ2FzZSgpLHQuaW5kZXhPZihuWzFdLnRvTG93ZXJDYXNlKCkpPi0xJiYoblsxXT1BUChuWzFdLnRvTG93ZXJDYXNlKCkpKSk6Mz09PW4ubGVuZ3RoJiYoblswXT1uWzBdLnRvTG93ZXJDYXNlKCksMj09PW5bMV0ubGVuZ3RoJiYoblsxXT1uWzFdLnRvVXBwZXJDYXNlKCkpLFwic2duXCIhPT1uWzBdJiYyPT09blsyXS5sZW5ndGgmJihuWzJdPW5bMl0udG9VcHBlckNhc2UoKSksdC5pbmRleE9mKG5bMV0udG9Mb3dlckNhc2UoKSk+LTEmJihuWzFdPUFQKG5bMV0udG9Mb3dlckNhc2UoKSkpLHQuaW5kZXhPZihuWzJdLnRvTG93ZXJDYXNlKCkpPi0xJiYoblsyXT1BUChuWzJdLnRvTG93ZXJDYXNlKCkpKSksbi5qb2luKFwiLVwiKX1yZXR1cm4gdGhpcy5vcHRpb25zLmNsZWFuQ29kZXx8dGhpcy5vcHRpb25zLmxvd2VyQ2FzZUxuZz9lLnRvTG93ZXJDYXNlKCk6ZX19LHtrZXk6XCJpc1doaXRlbGlzdGVkXCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubG9nZ2VyLmRlcHJlY2F0ZShcImxhbmd1YWdlVXRpbHMuaXNXaGl0ZWxpc3RlZFwiLCdmdW5jdGlvbiBcImlzV2hpdGVsaXN0ZWRcIiB3aWxsIGJlIHJlbmFtZWQgdG8gXCJpc1N1cHBvcnRlZENvZGVcIiBpbiB0aGUgbmV4dCBtYWpvciAtIHBsZWFzZSBtYWtlIHN1cmUgdG8gcmVuYW1lIGl0XFwncyB1c2FnZSBhc2FwLicpLHRoaXMuaXNTdXBwb3J0ZWRDb2RlKGUpfX0se2tleTpcImlzU3VwcG9ydGVkQ29kZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybihcImxhbmd1YWdlT25seVwiPT09dGhpcy5vcHRpb25zLmxvYWR8fHRoaXMub3B0aW9ucy5ub25FeHBsaWNpdFN1cHBvcnRlZExuZ3MpJiYoZT10aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpKSwhdGhpcy5zdXBwb3J0ZWRMbmdzfHwhdGhpcy5zdXBwb3J0ZWRMbmdzLmxlbmd0aHx8dGhpcy5zdXBwb3J0ZWRMbmdzLmluZGV4T2YoZSk+LTF9fSx7a2V5OlwiZ2V0QmVzdE1hdGNoRnJvbUNvZGVzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzO3JldHVybiBlPyhlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKCF0KXt2YXIgcj1uLmZvcm1hdExhbmd1YWdlQ29kZShlKTtuLm9wdGlvbnMuc3VwcG9ydGVkTG5ncyYmIW4uaXNTdXBwb3J0ZWRDb2RlKHIpfHwodD1yKX19KSksIXQmJnRoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzJiZlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKCF0KXt2YXIgcj1uLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpO2lmKG4uaXNTdXBwb3J0ZWRDb2RlKHIpKXJldHVybiB0PXI7dD1uLm9wdGlvbnMuc3VwcG9ydGVkTG5ncy5maW5kKChmdW5jdGlvbihlKXtpZigwPT09ZS5pbmRleE9mKHIpKXJldHVybiBlfSkpfX0pKSx0fHwodD10aGlzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nKVswXSksdCk6bnVsbH19LHtrZXk6XCJnZXRGYWxsYmFja0NvZGVzXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm5bXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoZT1lKHQpKSxcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W2VdKSxcIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGUpKXJldHVybiBlO2lmKCF0KXJldHVybiBlLmRlZmF1bHR8fFtdO3ZhciBuPWVbdF07cmV0dXJuIG58fChuPWVbdGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUodCldKSxufHwobj1lW3RoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHQpXSksbnx8KG49ZVt0aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKHQpXSksbnx8KG49ZS5kZWZhdWx0KSxufHxbXX19LHtrZXk6XCJ0b1Jlc29sdmVIaWVyYXJjaHlcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj10aGlzLmdldEZhbGxiYWNrQ29kZXModHx8dGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nfHxbXSxlKSxvPVtdLGk9ZnVuY3Rpb24oZSl7ZSYmKG4uaXNTdXBwb3J0ZWRDb2RlKGUpP28ucHVzaChlKTpuLmxvZ2dlci53YXJuKFwicmVqZWN0aW5nIGxhbmd1YWdlIGNvZGUgbm90IGZvdW5kIGluIHN1cHBvcnRlZExuZ3M6IFwiLmNvbmNhdChlKSkpfTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmZS5pbmRleE9mKFwiLVwiKT4tMT8oXCJsYW5ndWFnZU9ubHlcIiE9PXRoaXMub3B0aW9ucy5sb2FkJiZpKHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGUpKSxcImxhbmd1YWdlT25seVwiIT09dGhpcy5vcHRpb25zLmxvYWQmJlwiY3VycmVudE9ubHlcIiE9PXRoaXMub3B0aW9ucy5sb2FkJiZpKHRoaXMuZ2V0U2NyaXB0UGFydEZyb21Db2RlKGUpKSxcImN1cnJlbnRPbmx5XCIhPT10aGlzLm9wdGlvbnMubG9hZCYmaSh0aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGUpKSk6XCJzdHJpbmdcIj09dHlwZW9mIGUmJmkodGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpLHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7by5pbmRleE9mKGUpPDAmJmkobi5mb3JtYXRMYW5ndWFnZUNvZGUoZSkpfSkpLG99fV0pLGV9KCksa1A9W3tsbmdzOltcImFjaFwiLFwiYWtcIixcImFtXCIsXCJhcm5cIixcImJyXCIsXCJmaWxcIixcImd1blwiLFwibG5cIixcIm1mZVwiLFwibWdcIixcIm1pXCIsXCJvY1wiLFwicHRcIixcInB0LUJSXCIsXCJ0Z1wiLFwidGxcIixcInRpXCIsXCJ0clwiLFwidXpcIixcIndhXCJdLG5yOlsxLDJdLGZjOjF9LHtsbmdzOltcImFmXCIsXCJhblwiLFwiYXN0XCIsXCJhelwiLFwiYmdcIixcImJuXCIsXCJjYVwiLFwiZGFcIixcImRlXCIsXCJkZXZcIixcImVsXCIsXCJlblwiLFwiZW9cIixcImVzXCIsXCJldFwiLFwiZXVcIixcImZpXCIsXCJmb1wiLFwiZnVyXCIsXCJmeVwiLFwiZ2xcIixcImd1XCIsXCJoYVwiLFwiaGlcIixcImh1XCIsXCJoeVwiLFwiaWFcIixcIml0XCIsXCJra1wiLFwia25cIixcImt1XCIsXCJsYlwiLFwibWFpXCIsXCJtbFwiLFwibW5cIixcIm1yXCIsXCJuYWhcIixcIm5hcFwiLFwibmJcIixcIm5lXCIsXCJubFwiLFwibm5cIixcIm5vXCIsXCJuc29cIixcInBhXCIsXCJwYXBcIixcInBtc1wiLFwicHNcIixcInB0LVBUXCIsXCJybVwiLFwic2NvXCIsXCJzZVwiLFwic2lcIixcInNvXCIsXCJzb25cIixcInNxXCIsXCJzdlwiLFwic3dcIixcInRhXCIsXCJ0ZVwiLFwidGtcIixcInVyXCIsXCJ5b1wiXSxucjpbMSwyXSxmYzoyfSx7bG5nczpbXCJheVwiLFwiYm9cIixcImNnZ1wiLFwiZmFcIixcImh0XCIsXCJpZFwiLFwiamFcIixcImpib1wiLFwia2FcIixcImttXCIsXCJrb1wiLFwia3lcIixcImxvXCIsXCJtc1wiLFwic2FoXCIsXCJzdVwiLFwidGhcIixcInR0XCIsXCJ1Z1wiLFwidmlcIixcIndvXCIsXCJ6aFwiXSxucjpbMV0sZmM6M30se2xuZ3M6W1wiYmVcIixcImJzXCIsXCJjbnJcIixcImR6XCIsXCJoclwiLFwicnVcIixcInNyXCIsXCJ1a1wiXSxucjpbMSwyLDVdLGZjOjR9LHtsbmdzOltcImFyXCJdLG5yOlswLDEsMiwzLDExLDEwMF0sZmM6NX0se2xuZ3M6W1wiY3NcIixcInNrXCJdLG5yOlsxLDIsNV0sZmM6Nn0se2xuZ3M6W1wiY3NiXCIsXCJwbFwiXSxucjpbMSwyLDVdLGZjOjd9LHtsbmdzOltcImN5XCJdLG5yOlsxLDIsMyw4XSxmYzo4fSx7bG5nczpbXCJmclwiXSxucjpbMSwyXSxmYzo5fSx7bG5nczpbXCJnYVwiXSxucjpbMSwyLDMsNywxMV0sZmM6MTB9LHtsbmdzOltcImdkXCJdLG5yOlsxLDIsMywyMF0sZmM6MTF9LHtsbmdzOltcImlzXCJdLG5yOlsxLDJdLGZjOjEyfSx7bG5nczpbXCJqdlwiXSxucjpbMCwxXSxmYzoxM30se2xuZ3M6W1wia3dcIl0sbnI6WzEsMiwzLDRdLGZjOjE0fSx7bG5nczpbXCJsdFwiXSxucjpbMSwyLDEwXSxmYzoxNX0se2xuZ3M6W1wibHZcIl0sbnI6WzEsMiwwXSxmYzoxNn0se2xuZ3M6W1wibWtcIl0sbnI6WzEsMl0sZmM6MTd9LHtsbmdzOltcIm1ua1wiXSxucjpbMCwxLDJdLGZjOjE4fSx7bG5nczpbXCJtdFwiXSxucjpbMSwyLDExLDIwXSxmYzoxOX0se2xuZ3M6W1wib3JcIl0sbnI6WzIsMV0sZmM6Mn0se2xuZ3M6W1wicm9cIl0sbnI6WzEsMiwyMF0sZmM6MjB9LHtsbmdzOltcInNsXCJdLG5yOls1LDEsMiwzXSxmYzoyMX0se2xuZ3M6W1wiaGVcIixcIml3XCJdLG5yOlsxLDIsMjAsMjFdLGZjOjIyfV0sQlA9ezE6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlPjEpfSwyOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMSE9ZSl9LDM6ZnVuY3Rpb24oZSl7cmV0dXJuIDB9LDQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlJTEwPT0xJiZlJTEwMCE9MTE/MDplJTEwPj0yJiZlJTEwPD00JiYoZSUxMDA8MTB8fGUlMTAwPj0yMCk/MToyKX0sNTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDA9PWU/MDoxPT1lPzE6Mj09ZT8yOmUlMTAwPj0zJiZlJTEwMDw9MTA/MzplJTEwMD49MTE/NDo1KX0sNjpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDplPj0yJiZlPD00PzE6Mil9LDc6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6ZSUxMD49MiYmZSUxMDw9NCYmKGUlMTAwPDEwfHxlJTEwMD49MjApPzE6Mil9LDg6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOjghPWUmJjExIT1lPzI6Myl9LDk6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlPj0yKX0sMTA6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOmU8Nz8yOmU8MTE/Mzo0KX0sMTE6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lfHwxMT09ZT8wOjI9PWV8fDEyPT1lPzE6ZT4yJiZlPDIwPzI6Myl9LDEyOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMCE9MXx8ZSUxMDA9PTExKX0sMTM6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigwIT09ZSl9LDE0OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoMT09ZT8wOjI9PWU/MTozPT1lPzI6Myl9LDE1OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMD09MSYmZSUxMDAhPTExPzA6ZSUxMD49MiYmKGUlMTAwPDEwfHxlJTEwMD49MjApPzE6Mil9LDE2OmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSUxMD09MSYmZSUxMDAhPTExPzA6MCE9PWU/MToyKX0sMTc6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lfHxlJTEwPT0xJiZlJTEwMCE9MTE/MDoxKX0sMTg6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigwPT1lPzA6MT09ZT8xOjIpfSwxOTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDowPT1lfHxlJTEwMD4xJiZlJTEwMDwxMT8xOmUlMTAwPjEwJiZlJTEwMDwyMD8yOjMpfSwyMDpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKDE9PWU/MDowPT1lfHxlJTEwMD4wJiZlJTEwMDwyMD8xOjIpfSwyMTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUlMTAwPT0xPzE6ZSUxMDA9PTI/MjplJTEwMD09M3x8ZSUxMDA9PTQ/MzowKX0sMjI6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcigxPT1lPzA6Mj09ZT8xOihlPDB8fGU+MTApJiZlJTEwPT0wPzI6Myl9fTtmdW5jdGlvbiBGUCgpe3ZhciBlPXt9O3JldHVybiBrUC5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmxuZ3MuZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT17bnVtYmVyczp0Lm5yLHBsdXJhbHM6QlBbdC5mY119fSkpfSkpLGV9dmFyIFRQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Sl8odGhpcyxlKSx0aGlzLmxhbmd1YWdlVXRpbHM9dCx0aGlzLm9wdGlvbnM9bix0aGlzLmxvZ2dlcj11UC5jcmVhdGUoXCJwbHVyYWxSZXNvbHZlclwiKSx0aGlzLnJ1bGVzPUZQKCl9cmV0dXJuIGVQKGUsW3trZXk6XCJhZGRSdWxlXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLnJ1bGVzW2VdPXR9fSx7a2V5OlwiZ2V0UnVsZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJ1bGVzW2VdfHx0aGlzLnJ1bGVzW3RoaXMubGFuZ3VhZ2VVdGlscy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShlKV19fSx7a2V5OlwibmVlZHNQbHVyYWxcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFJ1bGUoZSk7cmV0dXJuIHQmJnQubnVtYmVycy5sZW5ndGg+MX19LHtrZXk6XCJnZXRQbHVyYWxGb3Jtc09mS2V5XCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5nZXRTdWZmaXhlcyhlKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0K2V9KSl9fSx7a2V5OlwiZ2V0U3VmZml4ZXNcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5nZXRSdWxlKGUpO3JldHVybiBuP24ubnVtYmVycy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiB0LmdldFN1ZmZpeChlLG4pfSkpOltdfX0se2tleTpcImdldFN1ZmZpeFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXRoaXMuZ2V0UnVsZShlKTtpZihyKXt2YXIgbz1yLm5vQWJzP3IucGx1cmFscyh0KTpyLnBsdXJhbHMoTWF0aC5hYnModCkpLGk9ci5udW1iZXJzW29dO3RoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCYmMj09PXIubnVtYmVycy5sZW5ndGgmJjE9PT1yLm51bWJlcnNbMF0mJigyPT09aT9pPVwicGx1cmFsXCI6MT09PWkmJihpPVwiXCIpKTt2YXIgYT1mdW5jdGlvbigpe3JldHVybiBuLm9wdGlvbnMucHJlcGVuZCYmaS50b1N0cmluZygpP24ub3B0aW9ucy5wcmVwZW5kK2kudG9TdHJpbmcoKTppLnRvU3RyaW5nKCl9O3JldHVyblwidjFcIj09PXRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTj8xPT09aT9cIlwiOlwibnVtYmVyXCI9PXR5cGVvZiBpP1wiX3BsdXJhbF9cIi5jb25jYXQoaS50b1N0cmluZygpKTphKCk6XCJ2MlwiPT09dGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OfHx0aGlzLm9wdGlvbnMuc2ltcGxpZnlQbHVyYWxTdWZmaXgmJjI9PT1yLm51bWJlcnMubGVuZ3RoJiYxPT09ci5udW1iZXJzWzBdP2EoKTp0aGlzLm9wdGlvbnMucHJlcGVuZCYmby50b1N0cmluZygpP3RoaXMub3B0aW9ucy5wcmVwZW5kK28udG9TdHJpbmcoKTpvLnRvU3RyaW5nKCl9cmV0dXJuIHRoaXMubG9nZ2VyLndhcm4oXCJubyBwbHVyYWwgcnVsZSBmb3VuZCBmb3I6IFwiLmNvbmNhdChlKSksXCJcIn19XSksZX0oKSxfUD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Sl8odGhpcyxlKSx0aGlzLmxvZ2dlcj11UC5jcmVhdGUoXCJpbnRlcnBvbGF0b3JcIiksdGhpcy5vcHRpb25zPXQsdGhpcy5mb3JtYXQ9dC5pbnRlcnBvbGF0aW9uJiZ0LmludGVycG9sYXRpb24uZm9ybWF0fHxmdW5jdGlvbihlKXtyZXR1cm4gZX0sdGhpcy5pbml0KHQpfXJldHVybiBlUChlLFt7a2V5OlwiaW5pdFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2UuaW50ZXJwb2xhdGlvbnx8KGUuaW50ZXJwb2xhdGlvbj17ZXNjYXBlVmFsdWU6ITB9KTt2YXIgdD1lLmludGVycG9sYXRpb247dGhpcy5lc2NhcGU9dm9pZCAwIT09dC5lc2NhcGU/dC5lc2NhcGU6YlAsdGhpcy5lc2NhcGVWYWx1ZT12b2lkIDA9PT10LmVzY2FwZVZhbHVlfHx0LmVzY2FwZVZhbHVlLHRoaXMudXNlUmF3VmFsdWVUb0VzY2FwZT12b2lkIDAhPT10LnVzZVJhd1ZhbHVlVG9Fc2NhcGUmJnQudXNlUmF3VmFsdWVUb0VzY2FwZSx0aGlzLnByZWZpeD10LnByZWZpeD95UCh0LnByZWZpeCk6dC5wcmVmaXhFc2NhcGVkfHxcInt7XCIsdGhpcy5zdWZmaXg9dC5zdWZmaXg/eVAodC5zdWZmaXgpOnQuc3VmZml4RXNjYXBlZHx8XCJ9fVwiLHRoaXMuZm9ybWF0U2VwYXJhdG9yPXQuZm9ybWF0U2VwYXJhdG9yP3QuZm9ybWF0U2VwYXJhdG9yOnQuZm9ybWF0U2VwYXJhdG9yfHxcIixcIix0aGlzLnVuZXNjYXBlUHJlZml4PXQudW5lc2NhcGVTdWZmaXg/XCJcIjp0LnVuZXNjYXBlUHJlZml4fHxcIi1cIix0aGlzLnVuZXNjYXBlU3VmZml4PXRoaXMudW5lc2NhcGVQcmVmaXg/XCJcIjp0LnVuZXNjYXBlU3VmZml4fHxcIlwiLHRoaXMubmVzdGluZ1ByZWZpeD10Lm5lc3RpbmdQcmVmaXg/eVAodC5uZXN0aW5nUHJlZml4KTp0Lm5lc3RpbmdQcmVmaXhFc2NhcGVkfHx5UChcIiR0KFwiKSx0aGlzLm5lc3RpbmdTdWZmaXg9dC5uZXN0aW5nU3VmZml4P3lQKHQubmVzdGluZ1N1ZmZpeCk6dC5uZXN0aW5nU3VmZml4RXNjYXBlZHx8eVAoXCIpXCIpLHRoaXMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I9dC5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcj90Lm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yOnQubmVzdGluZ09wdGlvbnNTZXBhcmF0b3J8fFwiLFwiLHRoaXMubWF4UmVwbGFjZXM9dC5tYXhSZXBsYWNlcz90Lm1heFJlcGxhY2VzOjFlMyx0aGlzLmFsd2F5c0Zvcm1hdD12b2lkIDAhPT10LmFsd2F5c0Zvcm1hdCYmdC5hbHdheXNGb3JtYXQsdGhpcy5yZXNldFJlZ0V4cCgpfX0se2tleTpcInJlc2V0XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMmJnRoaXMuaW5pdCh0aGlzLm9wdGlvbnMpfX0se2tleTpcInJlc2V0UmVnRXhwXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1cIlwiLmNvbmNhdCh0aGlzLnByZWZpeCxcIiguKz8pXCIpLmNvbmNhdCh0aGlzLnN1ZmZpeCk7dGhpcy5yZWdleHA9bmV3IFJlZ0V4cChlLFwiZ1wiKTt2YXIgdD1cIlwiLmNvbmNhdCh0aGlzLnByZWZpeCkuY29uY2F0KHRoaXMudW5lc2NhcGVQcmVmaXgsXCIoLis/KVwiKS5jb25jYXQodGhpcy51bmVzY2FwZVN1ZmZpeCkuY29uY2F0KHRoaXMuc3VmZml4KTt0aGlzLnJlZ2V4cFVuZXNjYXBlPW5ldyBSZWdFeHAodCxcImdcIik7dmFyIG49XCJcIi5jb25jYXQodGhpcy5uZXN0aW5nUHJlZml4LFwiKC4rPylcIikuY29uY2F0KHRoaXMubmVzdGluZ1N1ZmZpeCk7dGhpcy5uZXN0aW5nUmVnZXhwPW5ldyBSZWdFeHAobixcImdcIil9fSx7a2V5OlwiaW50ZXJwb2xhdGVcIix2YWx1ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgbyxpLGEsdT10aGlzLHM9dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiYmdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlc3x8e307ZnVuY3Rpb24gbChlKXtyZXR1cm4gZS5yZXBsYWNlKC9cXCQvZyxcIiQkJCRcIil9dmFyIGM9ZnVuY3Rpb24oZSl7aWYoZS5pbmRleE9mKHUuZm9ybWF0U2VwYXJhdG9yKTwwKXt2YXIgbz1nUCh0LHMsZSk7cmV0dXJuIHUuYWx3YXlzRm9ybWF0P3UuZm9ybWF0KG8sdm9pZCAwLG4sWl8oe30scix0LHtpbnRlcnBvbGF0aW9ua2V5OmV9KSk6b312YXIgaT1lLnNwbGl0KHUuZm9ybWF0U2VwYXJhdG9yKSxhPWkuc2hpZnQoKS50cmltKCksbD1pLmpvaW4odS5mb3JtYXRTZXBhcmF0b3IpLnRyaW0oKTtyZXR1cm4gdS5mb3JtYXQoZ1AodCxzLGEpLGwsbixaXyh7fSxyLHQse2ludGVycG9sYXRpb25rZXk6YX0pKX07dGhpcy5yZXNldFJlZ0V4cCgpO3ZhciBmPXImJnIubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyfHx0aGlzLm9wdGlvbnMubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyLGQ9ciYmci5pbnRlcnBvbGF0aW9uJiZyLmludGVycG9sYXRpb24uc2tpcE9uVmFyaWFibGVzfHx0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXMscD1be3JlZ2V4OnRoaXMucmVnZXhwVW5lc2NhcGUsc2FmZVZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBsKGUpfX0se3JlZ2V4OnRoaXMucmVnZXhwLHNhZmVWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdS5lc2NhcGVWYWx1ZT9sKHUuZXNjYXBlKGUpKTpsKGUpfX1dO3JldHVybiBwLmZvckVhY2goKGZ1bmN0aW9uKHQpe2ZvcihhPTA7bz10LnJlZ2V4LmV4ZWMoZSk7KXtpZih2b2lkIDA9PT0oaT1jKG9bMV0udHJpbSgpKSkpaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZil7dmFyIG49ZihlLG8scik7aT1cInN0cmluZ1wiPT10eXBlb2Ygbj9uOlwiXCJ9ZWxzZXtpZihkKXtpPW9bMF07Y29udGludWV9dS5sb2dnZXIud2FybihcIm1pc3NlZCB0byBwYXNzIGluIHZhcmlhYmxlIFwiLmNvbmNhdChvWzFdLFwiIGZvciBpbnRlcnBvbGF0aW5nIFwiKS5jb25jYXQoZSkpLGk9XCJcIn1lbHNlXCJzdHJpbmdcIj09dHlwZW9mIGl8fHUudXNlUmF3VmFsdWVUb0VzY2FwZXx8KGk9Y1AoaSkpO3ZhciBzPXQuc2FmZVZhbHVlKGkpO2lmKGU9ZS5yZXBsYWNlKG9bMF0scyksZD8odC5yZWdleC5sYXN0SW5kZXgrPXMubGVuZ3RoLHQucmVnZXgubGFzdEluZGV4LT1vWzBdLmxlbmd0aCk6dC5yZWdleC5sYXN0SW5kZXg9MCwrK2E+PXUubWF4UmVwbGFjZXMpYnJlYWt9fSkpLGV9fSx7a2V5OlwibmVzdFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPXRoaXMsaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30sYT1aXyh7fSxpKTtmdW5jdGlvbiB1KGUsdCl7dmFyIG49dGhpcy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjtpZihlLmluZGV4T2Yobik8MClyZXR1cm4gZTt2YXIgcj1lLnNwbGl0KG5ldyBSZWdFeHAoXCJcIi5jb25jYXQobixcIlsgXSp7XCIpKSksbz1cIntcIi5jb25jYXQoclsxXSk7ZT1yWzBdLG89KG89dGhpcy5pbnRlcnBvbGF0ZShvLGEpKS5yZXBsYWNlKC8nL2csJ1wiJyk7dHJ5e2E9SlNPTi5wYXJzZShvKSx0JiYoYT1aXyh7fSx0LGEpKX1jYXRjaCh0KXtyZXR1cm4gdGhpcy5sb2dnZXIud2FybihcImZhaWxlZCBwYXJzaW5nIG9wdGlvbnMgc3RyaW5nIGluIG5lc3RpbmcgZm9yIGtleSBcIi5jb25jYXQoZSksdCksXCJcIi5jb25jYXQoZSkuY29uY2F0KG4pLmNvbmNhdChvKX1yZXR1cm4gZGVsZXRlIGEuZGVmYXVsdFZhbHVlLGV9Zm9yKGEuYXBwbHlQb3N0UHJvY2Vzc29yPSExLGRlbGV0ZSBhLmRlZmF1bHRWYWx1ZTtuPXRoaXMubmVzdGluZ1JlZ2V4cC5leGVjKGUpOyl7dmFyIHM9W10sbD0hMTtpZigtMSE9PW5bMF0uaW5kZXhPZih0aGlzLmZvcm1hdFNlcGFyYXRvcikmJiEvey4qfS8udGVzdChuWzFdKSl7dmFyIGM9blsxXS5zcGxpdCh0aGlzLmZvcm1hdFNlcGFyYXRvcikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCl9KSk7blsxXT1jLnNoaWZ0KCkscz1jLGw9ITB9aWYoKHI9dCh1LmNhbGwodGhpcyxuWzFdLnRyaW0oKSxhKSxhKSkmJm5bMF09PT1lJiZcInN0cmluZ1wiIT10eXBlb2YgcilyZXR1cm4gcjtcInN0cmluZ1wiIT10eXBlb2YgciYmKHI9Y1AocikpLHJ8fCh0aGlzLmxvZ2dlci53YXJuKFwibWlzc2VkIHRvIHJlc29sdmUgXCIuY29uY2F0KG5bMV0sXCIgZm9yIG5lc3RpbmcgXCIpLmNvbmNhdChlKSkscj1cIlwiKSxsJiYocj1zLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gby5mb3JtYXQoZSx0LGkubG5nLFpfKHt9LGkse2ludGVycG9sYXRpb25rZXk6blsxXS50cmltKCl9KSl9KSxyLnRyaW0oKSkpLGU9ZS5yZXBsYWNlKG5bMF0sciksdGhpcy5yZWdleHAubGFzdEluZGV4PTB9cmV0dXJuIGV9fV0pLGV9KCksUFA9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4scil7dmFyIG8saT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e307cmV0dXJuIEpfKHRoaXMsdCksbz1uUCh0aGlzLHJQKHQpLmNhbGwodGhpcykpLHdQJiZzUC5jYWxsKHRQKG8pKSxvLmJhY2tlbmQ9ZSxvLnN0b3JlPW4sby5zZXJ2aWNlcz1yLG8ubGFuZ3VhZ2VVdGlscz1yLmxhbmd1YWdlVXRpbHMsby5vcHRpb25zPWksby5sb2dnZXI9dVAuY3JlYXRlKFwiYmFja2VuZENvbm5lY3RvclwiKSxvLnN0YXRlPXt9LG8ucXVldWU9W10sby5iYWNrZW5kJiZvLmJhY2tlbmQuaW5pdCYmby5iYWNrZW5kLmluaXQocixpLmJhY2tlbmQsaSksb31yZXR1cm4gaVAodCxzUCksZVAodCxbe2tleTpcInF1ZXVlTG9hZFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXRoaXMsaT1bXSxhPVtdLHU9W10scz1bXTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj0hMDt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciB1PVwiXCIuY29uY2F0KGUsXCJ8XCIpLmNvbmNhdCh0KTshbi5yZWxvYWQmJm8uc3RvcmUuaGFzUmVzb3VyY2VCdW5kbGUoZSx0KT9vLnN0YXRlW3VdPTI6by5zdGF0ZVt1XTwwfHwoMT09PW8uc3RhdGVbdV0/YS5pbmRleE9mKHUpPDAmJmEucHVzaCh1KTooby5zdGF0ZVt1XT0xLHI9ITEsYS5pbmRleE9mKHUpPDAmJmEucHVzaCh1KSxpLmluZGV4T2YodSk8MCYmaS5wdXNoKHUpLHMuaW5kZXhPZih0KTwwJiZzLnB1c2godCkpKX0pKSxyfHx1LnB1c2goZSl9KSksKGkubGVuZ3RofHxhLmxlbmd0aCkmJnRoaXMucXVldWUucHVzaCh7cGVuZGluZzphLGxvYWRlZDp7fSxlcnJvcnM6W10sY2FsbGJhY2s6cn0pLHt0b0xvYWQ6aSxwZW5kaW5nOmEsdG9Mb2FkTGFuZ3VhZ2VzOnUsdG9Mb2FkTmFtZXNwYWNlczpzfX19LHtrZXk6XCJsb2FkZWRcIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5zcGxpdChcInxcIiksbz1yWzBdLGk9clsxXTt0JiZ0aGlzLmVtaXQoXCJmYWlsZWRMb2FkaW5nXCIsbyxpLHQpLG4mJnRoaXMuc3RvcmUuYWRkUmVzb3VyY2VCdW5kbGUobyxpLG4pLHRoaXMuc3RhdGVbZV09dD8tMToyO3ZhciBhPXt9O3RoaXMucXVldWUuZm9yRWFjaCgoZnVuY3Rpb24obil7IWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWRQKGUsdCxPYmplY3QpLGk9by5vYmosYT1vLms7aVthXT1pW2FdfHxbXSxpW2FdLnB1c2gobil9KG4ubG9hZGVkLFtvXSxpKSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmluZGV4T2YodCk7LTEhPT1uOyllLnNwbGljZShuLDEpLG49ZS5pbmRleE9mKHQpfShuLnBlbmRpbmcsZSksdCYmbi5lcnJvcnMucHVzaCh0KSwwIT09bi5wZW5kaW5nLmxlbmd0aHx8bi5kb25lfHwoT2JqZWN0LmtleXMobi5sb2FkZWQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2FbZV18fChhW2VdPVtdKSxuLmxvYWRlZFtlXS5sZW5ndGgmJm4ubG9hZGVkW2VdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2FbZV0uaW5kZXhPZih0KTwwJiZhW2VdLnB1c2godCl9KSl9KSksbi5kb25lPSEwLG4uZXJyb3JzLmxlbmd0aD9uLmNhbGxiYWNrKG4uZXJyb3JzKTpuLmNhbGxiYWNrKCkpfSkpLHRoaXMuZW1pdChcImxvYWRlZFwiLGEpLHRoaXMucXVldWU9dGhpcy5xdWV1ZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmRvbmV9KSl9fSx7a2V5OlwicmVhZFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLG89YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjAsaT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06MzUwLGE9YXJndW1lbnRzLmxlbmd0aD41P2FyZ3VtZW50c1s1XTp2b2lkIDA7cmV0dXJuIGUubGVuZ3RoP3RoaXMuYmFja2VuZFtuXShlLHQsKGZ1bmN0aW9uKHUscyl7dSYmcyYmbzw1P3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ci5yZWFkLmNhbGwocixlLHQsbixvKzEsMippLGEpfSksaSk6YSh1LHMpfSkpOmEobnVsbCx7fSl9fSx7a2V5OlwicHJlcGFyZUxvYWRpbmdcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30sbz1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtpZighdGhpcy5iYWNrZW5kKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKFwiTm8gYmFja2VuZCB3YXMgYWRkZWQgdmlhIGkxOG5leHQudXNlLiBXaWxsIG5vdCBsb2FkIHJlc291cmNlcy5cIiksbyYmbygpO1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT10aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGUpKSxcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9W3RdKTt2YXIgaT10aGlzLnF1ZXVlTG9hZChlLHQscixvKTtpZighaS50b0xvYWQubGVuZ3RoKXJldHVybiBpLnBlbmRpbmcubGVuZ3RofHxvKCksbnVsbDtpLnRvTG9hZC5mb3JFYWNoKChmdW5jdGlvbihlKXtuLmxvYWRPbmUoZSl9KSl9fSx7a2V5OlwibG9hZFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt0aGlzLnByZXBhcmVMb2FkaW5nKGUsdCx7fSxuKX19LHtrZXk6XCJyZWxvYWRcIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dGhpcy5wcmVwYXJlTG9hZGluZyhlLHQse3JlbG9hZDohMH0sbil9fSx7a2V5OlwibG9hZE9uZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06XCJcIixyPWUuc3BsaXQoXCJ8XCIpLG89clswXSxpPXJbMV07dGhpcy5yZWFkKG8saSxcInJlYWRcIix2b2lkIDAsdm9pZCAwLChmdW5jdGlvbihyLGEpe3ImJnQubG9nZ2VyLndhcm4oXCJcIi5jb25jYXQobixcImxvYWRpbmcgbmFtZXNwYWNlIFwiKS5jb25jYXQoaSxcIiBmb3IgbGFuZ3VhZ2UgXCIpLmNvbmNhdChvLFwiIGZhaWxlZFwiKSxyKSwhciYmYSYmdC5sb2dnZXIubG9nKFwiXCIuY29uY2F0KG4sXCJsb2FkZWQgbmFtZXNwYWNlIFwiKS5jb25jYXQoaSxcIiBmb3IgbGFuZ3VhZ2UgXCIpLmNvbmNhdChvKSxhKSx0LmxvYWRlZChlLHIsYSl9KSl9fSx7a2V5Olwic2F2ZU1pc3NpbmdcIix2YWx1ZTpmdW5jdGlvbihlLHQsbixyLG8pe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdP2FyZ3VtZW50c1s1XTp7fTt0aGlzLnNlcnZpY2VzLnV0aWxzJiZ0aGlzLnNlcnZpY2VzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSYmIXRoaXMuc2VydmljZXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlKHQpP3RoaXMubG9nZ2VyLndhcm4oJ2RpZCBub3Qgc2F2ZSBrZXkgXCInLmNvbmNhdChuLCdcIiBhcyB0aGUgbmFtZXNwYWNlIFwiJykuY29uY2F0KHQsJ1wiIHdhcyBub3QgeWV0IGxvYWRlZCcpLFwiVGhpcyBtZWFucyBzb21ldGhpbmcgSVMgV1JPTkcgaW4geW91ciBzZXR1cC4gWW91IGFjY2VzcyB0aGUgdCBmdW5jdGlvbiBiZWZvcmUgaTE4bmV4dC5pbml0IC8gaTE4bmV4dC5sb2FkTmFtZXNwYWNlIC8gaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSB3YXMgZG9uZS4gV2FpdCBmb3IgdGhlIGNhbGxiYWNrIG9yIFByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgYWNjZXNzaW5nIGl0ISEhXCIpOm51bGwhPW4mJlwiXCIhPT1uJiYodGhpcy5iYWNrZW5kJiZ0aGlzLmJhY2tlbmQuY3JlYXRlJiZ0aGlzLmJhY2tlbmQuY3JlYXRlKGUsdCxuLHIsbnVsbCxaXyh7fSxpLHtpc1VwZGF0ZTpvfSkpLGUmJmVbMF0mJnRoaXMuc3RvcmUuYWRkUmVzb3VyY2UoZVswXSx0LG4scikpfX1dKSx0fSgpO2Z1bmN0aW9uIGpQKCl7cmV0dXJue2RlYnVnOiExLGluaXRJbW1lZGlhdGU6ITAsbnM6W1widHJhbnNsYXRpb25cIl0sZGVmYXVsdE5TOltcInRyYW5zbGF0aW9uXCJdLGZhbGxiYWNrTG5nOltcImRldlwiXSxmYWxsYmFja05TOiExLHdoaXRlbGlzdDohMSxub25FeHBsaWNpdFdoaXRlbGlzdDohMSxzdXBwb3J0ZWRMbmdzOiExLG5vbkV4cGxpY2l0U3VwcG9ydGVkTG5nczohMSxsb2FkOlwiYWxsXCIscHJlbG9hZDohMSxzaW1wbGlmeVBsdXJhbFN1ZmZpeDohMCxrZXlTZXBhcmF0b3I6XCIuXCIsbnNTZXBhcmF0b3I6XCI6XCIscGx1cmFsU2VwYXJhdG9yOlwiX1wiLGNvbnRleHRTZXBhcmF0b3I6XCJfXCIscGFydGlhbEJ1bmRsZWRMYW5ndWFnZXM6ITEsc2F2ZU1pc3Npbmc6ITEsdXBkYXRlTWlzc2luZzohMSxzYXZlTWlzc2luZ1RvOlwiZmFsbGJhY2tcIixzYXZlTWlzc2luZ1BsdXJhbHM6ITAsbWlzc2luZ0tleUhhbmRsZXI6ITEsbWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyOiExLHBvc3RQcm9jZXNzOiExLHBvc3RQcm9jZXNzUGFzc1Jlc29sdmVkOiExLHJldHVybk51bGw6ITAscmV0dXJuRW1wdHlTdHJpbmc6ITAscmV0dXJuT2JqZWN0czohMSxqb2luQXJyYXlzOiExLHJldHVybmVkT2JqZWN0SGFuZGxlcjohMSxwYXJzZU1pc3NpbmdLZXlIYW5kbGVyOiExLGFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleTohMSxhcHBlbmROYW1lc3BhY2VUb0NJTW9kZTohMSxvdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD17fTtpZihcIm9iamVjdFwiPT09WV8oZVsxXSkmJih0PWVbMV0pLFwic3RyaW5nXCI9PXR5cGVvZiBlWzFdJiYodC5kZWZhdWx0VmFsdWU9ZVsxXSksXCJzdHJpbmdcIj09dHlwZW9mIGVbMl0mJih0LnREZXNjcmlwdGlvbj1lWzJdKSxcIm9iamVjdFwiPT09WV8oZVsyXSl8fFwib2JqZWN0XCI9PT1ZXyhlWzNdKSl7dmFyIG49ZVszXXx8ZVsyXTtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0W2VdPW5bZV19KSl9cmV0dXJuIHR9LGludGVycG9sYXRpb246e2VzY2FwZVZhbHVlOiEwLGZvcm1hdDpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZX0scHJlZml4Olwie3tcIixzdWZmaXg6XCJ9fVwiLGZvcm1hdFNlcGFyYXRvcjpcIixcIix1bmVzY2FwZVByZWZpeDpcIi1cIixuZXN0aW5nUHJlZml4OlwiJHQoXCIsbmVzdGluZ1N1ZmZpeDpcIilcIixuZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjpcIixcIixtYXhSZXBsYWNlczoxZTMsc2tpcE9uVmFyaWFibGVzOiExfX19ZnVuY3Rpb24gTlAoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUubnMmJihlLm5zPVtlLm5zXSksXCJzdHJpbmdcIj09dHlwZW9mIGUuZmFsbGJhY2tMbmcmJihlLmZhbGxiYWNrTG5nPVtlLmZhbGxiYWNrTG5nXSksXCJzdHJpbmdcIj09dHlwZW9mIGUuZmFsbGJhY2tOUyYmKGUuZmFsbGJhY2tOUz1bZS5mYWxsYmFja05TXSksZS53aGl0ZWxpc3QmJihlLndoaXRlbGlzdCYmZS53aGl0ZWxpc3QuaW5kZXhPZihcImNpbW9kZVwiKTwwJiYoZS53aGl0ZWxpc3Q9ZS53aGl0ZWxpc3QuY29uY2F0KFtcImNpbW9kZVwiXSkpLGUuc3VwcG9ydGVkTG5ncz1lLndoaXRlbGlzdCksZS5ub25FeHBsaWNpdFdoaXRlbGlzdCYmKGUubm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzPWUubm9uRXhwbGljaXRXaGl0ZWxpc3QpLGUuc3VwcG9ydGVkTG5ncyYmZS5zdXBwb3J0ZWRMbmdzLmluZGV4T2YoXCJjaW1vZGVcIik8MCYmKGUuc3VwcG9ydGVkTG5ncz1lLnN1cHBvcnRlZExuZ3MuY29uY2F0KFtcImNpbW9kZVwiXSkpLGV9ZnVuY3Rpb24gSVAoKXt9dmFyIExQPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxuPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxyPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO2lmKEpfKHRoaXMsdCksZT1uUCh0aGlzLHJQKHQpLmNhbGwodGhpcykpLHdQJiZzUC5jYWxsKHRQKGUpKSxlLm9wdGlvbnM9TlAobiksZS5zZXJ2aWNlcz17fSxlLmxvZ2dlcj11UCxlLm1vZHVsZXM9e2V4dGVybmFsOltdfSxyJiYhZS5pc0luaXRpYWxpemVkJiYhbi5pc0Nsb25lKXtpZighZS5vcHRpb25zLmluaXRJbW1lZGlhdGUpcmV0dXJuIGUuaW5pdChuLHIpLG5QKGUsdFAoZSkpO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5pbml0KG4scil9KSwwKX1yZXR1cm4gZX1yZXR1cm4gaVAodCxzUCksZVAodCxbe2tleTpcImluaXRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtmdW5jdGlvbiByKGUpe3JldHVybiBlP1wiZnVuY3Rpb25cIj09dHlwZW9mIGU/bmV3IGU6ZTpudWxsfWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJihuPXQsdD17fSksdC53aGl0ZWxpc3QmJiF0LnN1cHBvcnRlZExuZ3MmJnRoaXMubG9nZ2VyLmRlcHJlY2F0ZShcIndoaXRlbGlzdFwiLCdvcHRpb24gXCJ3aGl0ZWxpc3RcIiB3aWxsIGJlIHJlbmFtZWQgdG8gXCJzdXBwb3J0ZWRMbmdzXCIgaW4gdGhlIG5leHQgbWFqb3IgLSBwbGVhc2UgbWFrZSBzdXJlIHRvIHJlbmFtZSB0aGlzIG9wdGlvbiBhc2FwLicpLHQubm9uRXhwbGljaXRXaGl0ZWxpc3QmJiF0Lm5vbkV4cGxpY2l0U3VwcG9ydGVkTG5ncyYmdGhpcy5sb2dnZXIuZGVwcmVjYXRlKFwid2hpdGVsaXN0XCIsJ29wdGlvbnMgXCJub25FeHBsaWNpdFdoaXRlbGlzdFwiIHdpbGwgYmUgcmVuYW1lZCB0byBcIm5vbkV4cGxpY2l0U3VwcG9ydGVkTG5nc1wiIGluIHRoZSBuZXh0IG1ham9yIC0gcGxlYXNlIG1ha2Ugc3VyZSB0byByZW5hbWUgdGhpcyBvcHRpb24gYXNhcC4nKSx0aGlzLm9wdGlvbnM9Wl8oe30salAoKSx0aGlzLm9wdGlvbnMsTlAodCkpLHRoaXMuZm9ybWF0PXRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCxufHwobj1JUCksIXRoaXMub3B0aW9ucy5pc0Nsb25lKXt0aGlzLm1vZHVsZXMubG9nZ2VyP3VQLmluaXQocih0aGlzLm1vZHVsZXMubG9nZ2VyKSx0aGlzLm9wdGlvbnMpOnVQLmluaXQobnVsbCx0aGlzLm9wdGlvbnMpO3ZhciBvPW5ldyBPUCh0aGlzLm9wdGlvbnMpO3RoaXMuc3RvcmU9bmV3IERQKHRoaXMub3B0aW9ucy5yZXNvdXJjZXMsdGhpcy5vcHRpb25zKTt2YXIgaT10aGlzLnNlcnZpY2VzO2kubG9nZ2VyPXVQLGkucmVzb3VyY2VTdG9yZT10aGlzLnN0b3JlLGkubGFuZ3VhZ2VVdGlscz1vLGkucGx1cmFsUmVzb2x2ZXI9bmV3IFRQKG8se3ByZXBlbmQ6dGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcixjb21wYXRpYmlsaXR5SlNPTjp0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04sc2ltcGxpZnlQbHVyYWxTdWZmaXg6dGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4fSksaS5pbnRlcnBvbGF0b3I9bmV3IF9QKHRoaXMub3B0aW9ucyksaS51dGlscz17aGFzTG9hZGVkTmFtZXNwYWNlOnRoaXMuaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQodGhpcyl9LGkuYmFja2VuZENvbm5lY3Rvcj1uZXcgUFAocih0aGlzLm1vZHVsZXMuYmFja2VuZCksaS5yZXNvdXJjZVN0b3JlLGksdGhpcy5vcHRpb25zKSxpLmJhY2tlbmRDb25uZWN0b3Iub24oXCIqXCIsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksbz0xO288bjtvKyspcltvLTFdPWFyZ3VtZW50c1tvXTtlLmVtaXQuYXBwbHkoZSxbdF0uY29uY2F0KHIpKX0pKSx0aGlzLm1vZHVsZXMubGFuZ3VhZ2VEZXRlY3RvciYmKGkubGFuZ3VhZ2VEZXRlY3Rvcj1yKHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yKSxpLmxhbmd1YWdlRGV0ZWN0b3IuaW5pdChpLHRoaXMub3B0aW9ucy5kZXRlY3Rpb24sdGhpcy5vcHRpb25zKSksdGhpcy5tb2R1bGVzLmkxOG5Gb3JtYXQmJihpLmkxOG5Gb3JtYXQ9cih0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCksaS5pMThuRm9ybWF0LmluaXQmJmkuaTE4bkZvcm1hdC5pbml0KHRoaXMpKSx0aGlzLnRyYW5zbGF0b3I9bmV3IENQKHRoaXMuc2VydmljZXMsdGhpcy5vcHRpb25zKSx0aGlzLnRyYW5zbGF0b3Iub24oXCIqXCIsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksbz0xO288bjtvKyspcltvLTFdPWFyZ3VtZW50c1tvXTtlLmVtaXQuYXBwbHkoZSxbdF0uY29uY2F0KHIpKX0pKSx0aGlzLm1vZHVsZXMuZXh0ZXJuYWwuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5pbml0JiZ0LmluaXQoZSl9KSl9aWYodGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nJiYhdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yJiYhdGhpcy5vcHRpb25zLmxuZyl7dmFyIGE9dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nKTthLmxlbmd0aD4wJiZcImRldlwiIT09YVswXSYmKHRoaXMub3B0aW9ucy5sbmc9YVswXSl9dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yfHx0aGlzLm9wdGlvbnMubG5nfHx0aGlzLmxvZ2dlci53YXJuKFwiaW5pdDogbm8gbGFuZ3VhZ2VEZXRlY3RvciBpcyB1c2VkIGFuZCBubyBsbmcgaXMgZGVmaW5lZFwiKTt2YXIgdT1bXCJnZXRSZXNvdXJjZVwiLFwiaGFzUmVzb3VyY2VCdW5kbGVcIixcImdldFJlc291cmNlQnVuZGxlXCIsXCJnZXREYXRhQnlMYW5ndWFnZVwiXTt1LmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF09ZnVuY3Rpb24oKXt2YXIgbjtyZXR1cm4obj1lLnN0b3JlKVt0XS5hcHBseShuLGFyZ3VtZW50cyl9fSkpO3ZhciBzPVtcImFkZFJlc291cmNlXCIsXCJhZGRSZXNvdXJjZXNcIixcImFkZFJlc291cmNlQnVuZGxlXCIsXCJyZW1vdmVSZXNvdXJjZUJ1bmRsZVwiXTtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF09ZnVuY3Rpb24oKXt2YXIgbjtyZXR1cm4obj1lLnN0b3JlKVt0XS5hcHBseShuLGFyZ3VtZW50cyksZX19KSk7dmFyIGw9bFAoKSxjPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxyKXtlLmlzSW5pdGlhbGl6ZWQmJiFlLmluaXRpYWxpemVkU3RvcmVPbmNlJiZlLmxvZ2dlci53YXJuKFwiaW5pdDogaTE4bmV4dCBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiBZb3Ugc2hvdWxkIGNhbGwgaW5pdCBqdXN0IG9uY2UhXCIpLGUuaXNJbml0aWFsaXplZD0hMCxlLm9wdGlvbnMuaXNDbG9uZXx8ZS5sb2dnZXIubG9nKFwiaW5pdGlhbGl6ZWRcIixlLm9wdGlvbnMpLGUuZW1pdChcImluaXRpYWxpemVkXCIsZS5vcHRpb25zKSxsLnJlc29sdmUociksbih0LHIpfTtpZihlLmxhbmd1YWdlcyYmXCJ2MVwiIT09ZS5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkmJiFlLmlzSW5pdGlhbGl6ZWQpcmV0dXJuIHQobnVsbCxlLnQuYmluZChlKSk7ZS5jaGFuZ2VMYW5ndWFnZShlLm9wdGlvbnMubG5nLHQpfTtyZXR1cm4gdGhpcy5vcHRpb25zLnJlc291cmNlc3x8IXRoaXMub3B0aW9ucy5pbml0SW1tZWRpYXRlP2MoKTpzZXRUaW1lb3V0KGMsMCksbH19LHtrZXk6XCJsb2FkUmVzb3VyY2VzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpJUCxyPW4sbz1cInN0cmluZ1wiPT10eXBlb2YgZT9lOnRoaXMubGFuZ3VhZ2U7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKHI9ZSksIXRoaXMub3B0aW9ucy5yZXNvdXJjZXN8fHRoaXMub3B0aW9ucy5wYXJ0aWFsQnVuZGxlZExhbmd1YWdlcyl7aWYobyYmXCJjaW1vZGVcIj09PW8udG9Mb3dlckNhc2UoKSlyZXR1cm4gcigpO3ZhciBpPVtdLGE9ZnVuY3Rpb24oZSl7ZSYmdC5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShlKS5mb3JFYWNoKChmdW5jdGlvbihlKXtpLmluZGV4T2YoZSk8MCYmaS5wdXNoKGUpfSkpfTtpZihvKWEobyk7ZWxzZXt2YXIgdT10aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpO3UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSl9KSl9dGhpcy5vcHRpb25zLnByZWxvYWQmJnRoaXMub3B0aW9ucy5wcmVsb2FkLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBhKGUpfSkpLHRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5sb2FkKGksdGhpcy5vcHRpb25zLm5zLHIpfWVsc2UgcihudWxsKX19LHtrZXk6XCJyZWxvYWRSZXNvdXJjZXNcIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bFAoKTtyZXR1cm4gZXx8KGU9dGhpcy5sYW5ndWFnZXMpLHR8fCh0PXRoaXMub3B0aW9ucy5ucyksbnx8KG49SVApLHRoaXMuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5yZWxvYWQoZSx0LChmdW5jdGlvbihlKXtyLnJlc29sdmUoKSxuKGUpfSkpLHJ9fSx7a2V5OlwidXNlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiWW91IGFyZSBwYXNzaW5nIGFuIHVuZGVmaW5lZCBtb2R1bGUhIFBsZWFzZSBjaGVjayB0aGUgb2JqZWN0IHlvdSBhcmUgcGFzc2luZyB0byBpMThuZXh0LnVzZSgpXCIpO2lmKCFlLnR5cGUpdGhyb3cgbmV3IEVycm9yKFwiWW91IGFyZSBwYXNzaW5nIGEgd3JvbmcgbW9kdWxlISBQbGVhc2UgY2hlY2sgdGhlIG9iamVjdCB5b3UgYXJlIHBhc3NpbmcgdG8gaTE4bmV4dC51c2UoKVwiKTtyZXR1cm5cImJhY2tlbmRcIj09PWUudHlwZSYmKHRoaXMubW9kdWxlcy5iYWNrZW5kPWUpLChcImxvZ2dlclwiPT09ZS50eXBlfHxlLmxvZyYmZS53YXJuJiZlLmVycm9yKSYmKHRoaXMubW9kdWxlcy5sb2dnZXI9ZSksXCJsYW5ndWFnZURldGVjdG9yXCI9PT1lLnR5cGUmJih0aGlzLm1vZHVsZXMubGFuZ3VhZ2VEZXRlY3Rvcj1lKSxcImkxOG5Gb3JtYXRcIj09PWUudHlwZSYmKHRoaXMubW9kdWxlcy5pMThuRm9ybWF0PWUpLFwicG9zdFByb2Nlc3NvclwiPT09ZS50eXBlJiZTUC5hZGRQb3N0UHJvY2Vzc29yKGUpLFwiM3JkUGFydHlcIj09PWUudHlwZSYmdGhpcy5tb2R1bGVzLmV4dGVybmFsLnB1c2goZSksdGhpc319LHtrZXk6XCJjaGFuZ2VMYW5ndWFnZVwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpczt0aGlzLmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvPWU7dmFyIHI9bFAoKTt0aGlzLmVtaXQoXCJsYW5ndWFnZUNoYW5naW5nXCIsZSk7dmFyIG89ZnVuY3Rpb24obyl7ZXx8b3x8IW4uc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvcnx8KG89W10pO3ZhciBpPVwic3RyaW5nXCI9PXR5cGVvZiBvP286bi5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEJlc3RNYXRjaEZyb21Db2RlcyhvKTtpJiYobi5sYW5ndWFnZXx8KG4ubGFuZ3VhZ2U9aSxuLmxhbmd1YWdlcz1uLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGkpKSxuLnRyYW5zbGF0b3IubGFuZ3VhZ2V8fG4udHJhbnNsYXRvci5jaGFuZ2VMYW5ndWFnZShpKSxuLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3ImJm4uc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5jYWNoZVVzZXJMYW5ndWFnZShpKSksbi5sb2FkUmVzb3VyY2VzKGksKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLG8pe28/KG4ubGFuZ3VhZ2U9byxuLmxhbmd1YWdlcz1uLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KG8pLG4udHJhbnNsYXRvci5jaGFuZ2VMYW5ndWFnZShvKSxuLmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvPXZvaWQgMCxuLmVtaXQoXCJsYW5ndWFnZUNoYW5nZWRcIixvKSxuLmxvZ2dlci5sb2coXCJsYW5ndWFnZUNoYW5nZWRcIixvKSk6bi5pc0xhbmd1YWdlQ2hhbmdpbmdUbz12b2lkIDAsci5yZXNvbHZlKChmdW5jdGlvbigpe3JldHVybiBuLnQuYXBwbHkobixhcmd1bWVudHMpfSkpLHQmJnQoZSwoZnVuY3Rpb24oKXtyZXR1cm4gbi50LmFwcGx5KG4sYXJndW1lbnRzKX0pKX0oZSxpKX0pKX07cmV0dXJuIGV8fCF0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3J8fHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5hc3luYz8hZSYmdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yJiZ0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuYXN5bmM/dGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdChvKTpvKGUpOm8odGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdCgpKSxyfX0se2tleTpcImdldEZpeGVkVFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLG89ZnVuY3Rpb24gZSh0LG8pe3ZhciBpO2lmKFwib2JqZWN0XCIhPT1ZXyhvKSl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsdT1uZXcgQXJyYXkoYT4yP2EtMjowKSxzPTI7czxhO3MrKyl1W3MtMl09YXJndW1lbnRzW3NdO2k9ci5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyKFt0LG9dLmNvbmNhdCh1KSl9ZWxzZSBpPVpfKHt9LG8pO2kubG5nPWkubG5nfHxlLmxuZyxpLmxuZ3M9aS5sbmdzfHxlLmxuZ3MsaS5ucz1pLm5zfHxlLm5zO3ZhciBsPXIub3B0aW9ucy5rZXlTZXBhcmF0b3J8fFwiLlwiLGM9bj9cIlwiLmNvbmNhdChuKS5jb25jYXQobCkuY29uY2F0KHQpOnQ7cmV0dXJuIHIudChjLGkpfTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT9vLmxuZz1lOm8ubG5ncz1lLG8ubnM9dCxvLmtleVByZWZpeD1uLG99fSx7a2V5OlwidFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMudHJhbnNsYXRvciYmKGU9dGhpcy50cmFuc2xhdG9yKS50cmFuc2xhdGUuYXBwbHkoZSxhcmd1bWVudHMpfX0se2tleTpcImV4aXN0c1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMudHJhbnNsYXRvciYmKGU9dGhpcy50cmFuc2xhdG9yKS5leGlzdHMuYXBwbHkoZSxhcmd1bWVudHMpfX0se2tleTpcInNldERlZmF1bHROYW1lc3BhY2VcIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm9wdGlvbnMuZGVmYXVsdE5TPWV9fSx7a2V5OlwiaGFzTG9hZGVkTmFtZXNwYWNlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighdGhpcy5pc0luaXRpYWxpemVkKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKFwiaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuZXh0IHdhcyBub3QgaW5pdGlhbGl6ZWRcIix0aGlzLmxhbmd1YWdlcyksITE7aWYoIXRoaXMubGFuZ3VhZ2VzfHwhdGhpcy5sYW5ndWFnZXMubGVuZ3RoKXJldHVybiB0aGlzLmxvZ2dlci53YXJuKFwiaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuLmxhbmd1YWdlcyB3ZXJlIHVuZGVmaW5lZCBvciBlbXB0eVwiLHRoaXMubGFuZ3VhZ2VzKSwhMTt2YXIgcj10aGlzLmxhbmd1YWdlc1swXSxvPSEhdGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcsaT10aGlzLmxhbmd1YWdlc1t0aGlzLmxhbmd1YWdlcy5sZW5ndGgtMV07aWYoXCJjaW1vZGVcIj09PXIudG9Mb3dlckNhc2UoKSlyZXR1cm4hMDt2YXIgYT1mdW5jdGlvbihlLG4pe3ZhciByPXQuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5zdGF0ZVtcIlwiLmNvbmNhdChlLFwifFwiKS5jb25jYXQobildO3JldHVybi0xPT09cnx8Mj09PXJ9O2lmKG4ucHJlY2hlY2spe3ZhciB1PW4ucHJlY2hlY2sodGhpcyxhKTtpZih2b2lkIDAhPT11KXJldHVybiB1fXJldHVybiEhdGhpcy5oYXNSZXNvdXJjZUJ1bmRsZShyLGUpfHwhdGhpcy5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLmJhY2tlbmR8fCEoIWEocixlKXx8byYmIWEoaSxlKSl9fSx7a2V5OlwibG9hZE5hbWVzcGFjZXNcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1sUCgpO3JldHVybiB0aGlzLm9wdGlvbnMubnM/KFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1bZV0pLGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bi5vcHRpb25zLm5zLmluZGV4T2YoZSk8MCYmbi5vcHRpb25zLm5zLnB1c2goZSl9KSksdGhpcy5sb2FkUmVzb3VyY2VzKChmdW5jdGlvbihlKXtyLnJlc29sdmUoKSx0JiZ0KGUpfSkpLHIpOih0JiZ0KCksUHJvbWlzZS5yZXNvbHZlKCkpfX0se2tleTpcImxvYWRMYW5ndWFnZXNcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWxQKCk7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtlXSk7dmFyIHI9dGhpcy5vcHRpb25zLnByZWxvYWR8fFtdLG89ZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiByLmluZGV4T2YoZSk8MH0pKTtyZXR1cm4gby5sZW5ndGg/KHRoaXMub3B0aW9ucy5wcmVsb2FkPXIuY29uY2F0KG8pLHRoaXMubG9hZFJlc291cmNlcygoZnVuY3Rpb24oZSl7bi5yZXNvbHZlKCksdCYmdChlKX0pKSxuKToodCYmdCgpLFByb21pc2UucmVzb2x2ZSgpKX19LHtrZXk6XCJkaXJcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZXx8KGU9dGhpcy5sYW5ndWFnZXMmJnRoaXMubGFuZ3VhZ2VzLmxlbmd0aD4wP3RoaXMubGFuZ3VhZ2VzWzBdOnRoaXMubGFuZ3VhZ2UpLGU/W1wiYXJcIixcInNodVwiLFwic3FyXCIsXCJzc2hcIixcInhhYVwiLFwieWhkXCIsXCJ5dWRcIixcImFhb1wiLFwiYWJoXCIsXCJhYnZcIixcImFjbVwiLFwiYWNxXCIsXCJhY3dcIixcImFjeFwiLFwiYWN5XCIsXCJhZGZcIixcImFkc1wiLFwiYWViXCIsXCJhZWNcIixcImFmYlwiLFwiYWpwXCIsXCJhcGNcIixcImFwZFwiLFwiYXJiXCIsXCJhcnFcIixcImFyc1wiLFwiYXJ5XCIsXCJhcnpcIixcImF1elwiLFwiYXZsXCIsXCJheWhcIixcImF5bFwiLFwiYXluXCIsXCJheXBcIixcImJielwiLFwicGdhXCIsXCJoZVwiLFwiaXdcIixcInBzXCIsXCJwYnRcIixcInBidVwiLFwicHN0XCIsXCJwcnBcIixcInByZFwiLFwidWdcIixcInVyXCIsXCJ5ZGRcIixcInlkc1wiLFwieWloXCIsXCJqaVwiLFwieWlcIixcImhib1wiLFwibWVuXCIsXCJ4bW5cIixcImZhXCIsXCJqcHJcIixcInBlb1wiLFwicGVzXCIsXCJwcnNcIixcImR2XCIsXCJzYW1cIl0uaW5kZXhPZih0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoZSkpPj0wP1wicnRsXCI6XCJsdHJcIjpcInJ0bFwifX0se2tleTpcImNyZWF0ZUluc3RhbmNlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtyZXR1cm4gbmV3IHQoZSxuKX19LHtrZXk6XCJjbG9uZUluc3RhbmNlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOklQLG89Wl8oe30sdGhpcy5vcHRpb25zLG4se2lzQ2xvbmU6ITB9KSxpPW5ldyB0KG8pLGE9W1wic3RvcmVcIixcInNlcnZpY2VzXCIsXCJsYW5ndWFnZVwiXTtyZXR1cm4gYS5mb3JFYWNoKChmdW5jdGlvbih0KXtpW3RdPWVbdF19KSksaS5zZXJ2aWNlcz1aXyh7fSx0aGlzLnNlcnZpY2VzKSxpLnNlcnZpY2VzLnV0aWxzPXtoYXNMb2FkZWROYW1lc3BhY2U6aS5oYXNMb2FkZWROYW1lc3BhY2UuYmluZChpKX0saS50cmFuc2xhdG9yPW5ldyBDUChpLnNlcnZpY2VzLGkub3B0aW9ucyksaS50cmFuc2xhdG9yLm9uKFwiKlwiLChmdW5jdGlvbihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07aS5lbWl0LmFwcGx5KGksW2VdLmNvbmNhdChuKSl9KSksaS5pbml0KG8sciksaS50cmFuc2xhdG9yLm9wdGlvbnM9aS5vcHRpb25zLGkudHJhbnNsYXRvci5iYWNrZW5kQ29ubmVjdG9yLnNlcnZpY2VzLnV0aWxzPXtoYXNMb2FkZWROYW1lc3BhY2U6aS5oYXNMb2FkZWROYW1lc3BhY2UuYmluZChpKX0saX19LHtrZXk6XCJ0b0pTT05cIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntvcHRpb25zOnRoaXMub3B0aW9ucyxzdG9yZTp0aGlzLnN0b3JlLGxhbmd1YWdlOnRoaXMubGFuZ3VhZ2UsbGFuZ3VhZ2VzOnRoaXMubGFuZ3VhZ2VzfX19XSksdH0oKSxSUD1uZXcgTFA7ZnVuY3Rpb24gTVAoZSx0KXtSUC5hZGRSZXNvdXJjZUJ1bmRsZShlLFwidHJhbnNsYXRpb25cIix0LCEwLCEwKX1mdW5jdGlvbiB6UChlKXtSUC5jaGFuZ2VMYW5ndWFnZShlKX1mdW5jdGlvbiAkUChlKXtyZXR1cm4gUlAuZ2V0UmVzb3VyY2VCdW5kbGUoZSxcInRyYW5zbGF0aW9uXCIpfVJQLmluaXQoe2xuZzpcInpoLUNOXCIscmVzb3VyY2VzOnt9fSk7dmFyIEhQPVJQLnQuYmluZChSUCk7TVAoXCJlblwiLHtlZGl0b3I6e21vcmU6XCJNb3JlXCIsanVzdGlmeTpcIkp1c3RpZnlcIixpbmRlbnQ6XCJJbmRlbnRcIixpbWFnZTpcIkltYWdlXCIsdmlkZW86XCJWaWRlb1wifX0pLE1QKFwiemgtQ05cIix7ZWRpdG9yOnttb3JlOlwi5pu05aSaXCIsanVzdGlmeTpcIuWvuem9kFwiLGluZGVudDpcIue8qei/m1wiLGltYWdlOlwi5Zu+54mHXCIsdmlkZW86XCLop4bpopFcIn19KTt2YXIgVlA9ZWE/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5cIltvYmplY3QgXCIrb2EodGhpcykrXCJdXCJ9O2VhfHxFaShPYmplY3QucHJvdG90eXBlLFwidG9TdHJpbmdcIixWUCx7dW5zYWZlOiEwfSk7dmFyIFVQPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVyblwiQXJyYXlcIj09SHIoZSl9LFdQPWZ1bmN0aW9uKCl7fSxHUD1bXSxxUD1KcihcIlJlZmxlY3RcIixcImNvbnN0cnVjdFwiKSxLUD0vXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvLFlQPU1yKEtQLmV4ZWMpLFhQPSFLUC5leGVjKFdQKSxaUD1mdW5jdGlvbihlKXtpZighWXIoZSkpcmV0dXJuITE7dHJ5e3JldHVybiBxUChXUCxHUCxlKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19LEpQPSFxUHx8QXIoKGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIFpQKFpQLmNhbGwpfHwhWlAoT2JqZWN0KXx8IVpQKChmdW5jdGlvbigpe2U9ITB9KSl8fGV9KSk/ZnVuY3Rpb24oZSl7aWYoIVlyKGUpKXJldHVybiExO3N3aXRjaChvYShlKSl7Y2FzZVwiQXN5bmNGdW5jdGlvblwiOmNhc2VcIkdlbmVyYXRvckZ1bmN0aW9uXCI6Y2FzZVwiQXN5bmNHZW5lcmF0b3JGdW5jdGlvblwiOnJldHVybiExfXJldHVybiBYUHx8ISFZUChLUCxyaShlKSl9OlpQLFFQPVBvKFwic3BlY2llc1wiKSxlaj1Dci5BcnJheSx0aj1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIFVQKGUpJiYodD1lLmNvbnN0cnVjdG9yLChKUCh0KSYmKHQ9PT1lanx8VVAodC5wcm90b3R5cGUpKXx8WHIodCkmJm51bGw9PT0odD10W1FQXSkpJiYodD12b2lkIDApKSx2b2lkIDA9PT10P2VqOnR9KGUpKSgwPT09dD8wOnQpfSxuaj1NcihbXS5wdXNoKSxyaj1mdW5jdGlvbihlKXt2YXIgdD0xPT1lLG49Mj09ZSxyPTM9PWUsbz00PT1lLGk9Nj09ZSxhPTc9PWUsdT01PT1lfHxpO3JldHVybiBmdW5jdGlvbihzLGwsYyxmKXtmb3IodmFyIGQscCxoPURvKHMpLGc9V3IoaCksdj15dShsLGMpLHk9RmkoZyksbT0wLGI9Znx8dGosdz10P2Iocyx5KTpufHxhP2IocywwKTp2b2lkIDA7eT5tO20rKylpZigodXx8bSBpbiBnKSYmKHA9dihkPWdbbV0sbSxoKSxlKSlpZih0KXdbbV09cDtlbHNlIGlmKHApc3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIGQ7Y2FzZSA2OnJldHVybiBtO2Nhc2UgMjpuaih3LGQpfWVsc2Ugc3dpdGNoKGUpe2Nhc2UgNDpyZXR1cm4hMTtjYXNlIDc6bmoodyxkKX1yZXR1cm4gaT8tMTpyfHxvP286d319LG9qPXtmb3JFYWNoOnJqKDApLG1hcDpyaigxKSxmaWx0ZXI6cmooMiksc29tZTpyaigzKSxldmVyeTpyaig0KSxmaW5kOnJqKDUpLGZpbmRJbmRleDpyaig2KSxmaWx0ZXJSZWplY3Q6cmooNyl9LmZvckVhY2gsaWo9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXVtlXTtyZXR1cm4hIW4mJkFyKChmdW5jdGlvbigpe24uY2FsbChudWxsLHR8fGZ1bmN0aW9uKCl7dGhyb3cgMX0sMSl9KSl9KFwiZm9yRWFjaFwiKSxhaj1paj9bXS5mb3JFYWNoOmZ1bmN0aW9uKGUpe3JldHVybiBvaih0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSx1aj1mdW5jdGlvbihlKXtpZihlJiZlLmZvckVhY2ghPT1hail0cnl7Sm8oZSxcImZvckVhY2hcIixhail9Y2F0Y2godCl7ZS5mb3JFYWNoPWFqfX07Zm9yKHZhciBzaiBpbiBmcylmc1tzal0mJnVqKENyW3NqXSYmQ3Jbc2pdLnByb3RvdHlwZSk7dWooaHMpLE1QKFwiZW5cIix7Y29tbW9uOntvazpcIk9LXCIsZGVsZXRlOlwiRGVsZXRlXCIsZW50ZXI6XCJFbnRlclwifSxibG9ja1F1b3RlOnt0aXRsZTpcIlF1b3RlXCJ9LGNvZGVCbG9jazp7dGl0bGU6XCJDb2RlIGJsb2NrXCJ9LGNvbG9yOntjb2xvcjpcIkZvbnQgY29sb3JcIixiZ0NvbG9yOlwiQmFjayBjb2xvclwiLGRlZmF1bHQ6XCJEZWZhdWx0IGNvbG9yXCIsY2xlYXI6XCJDbGVhciBiYWNrIGNvbG9yXCJ9LGRpdmlkZXI6e3RpdGxlOlwiRGl2aWRlclwifSxlbW90aW9uOnt0aXRsZTpcIkVtb3Rpb25cIn0sZm9udFNpemU6e3RpdGxlOlwiRm9udCBzaXplXCIsZGVmYXVsdDpcIkRlZmF1bHRcIn0sZm9udEZhbWlseTp7dGl0bGU6XCJGb250IGZhbWlseVwiLGRlZmF1bHQ6XCJEZWZhdWx0XCJ9LGZ1bGxTY3JlZW46e3RpdGxlOlwiRnVsbCBzY3JlZW5cIn0saGVhZGVyOnt0aXRsZTpcIkhlYWRlclwiLHRleHQ6XCJUZXh0XCJ9LGltYWdlOntuZXRJbWFnZTpcIk5ldCBpbWFnZVwiLGRlbGV0ZTpcIkRlbGV0ZSBpbWFnZVwiLGVkaXQ6XCJFZGl0IGltYWdlXCIsdmlld0xpbms6XCJWaWV3IGxpbmtcIixzcmM6XCJJbWFnZSBzcmNcIixkZXNjOlwiRGVzY3JpcHRpb25cIixsaW5rOlwiSW1hZ2UgbGlua1wifSxpbmRlbnQ6e2RlY3JlYXNlOlwiRGVjcmVhc2VcIixpbmNyZWFzZTpcIkluY3JlYXNlXCJ9LGp1c3RpZnk6e2xlZnQ6XCJMZWZ0XCIscmlnaHQ6XCJSaWdodFwiLGNlbnRlcjpcIkNlbnRlclwiLGp1c3RpZnk6XCJKdXN0aWZ5XCJ9LGxpbmVIZWlnaHQ6e3RpdGxlOlwiTGluZSBoZWlnaHRcIixkZWZhdWx0OlwiRGVmYXVsdFwifSxsaW5rOntpbnNlcnQ6XCJJbnNlcnQgbGlua1wiLHRleHQ6XCJMaW5rIHRleHRcIix1cmw6XCJMaW5rIHNvdXJjZVwiLHVuTGluazpcIlVubGlua1wiLGVkaXQ6XCJFZGl0IGxpbmtcIix2aWV3OlwiVmlldyBsaW5rXCJ9LHRleHRTdHlsZTp7Ym9sZDpcIkJvbGRcIixjbGVhcjpcIkNsZWFyIHN0eWxlc1wiLGNvZGU6XCJJbmxpbmUgY29kZVwiLGl0YWxpYzpcIkl0YWxpY1wiLHN1YjpcIlN1YlwiLHN1cDpcIlN1cFwiLHRocm91Z2g6XCJUaHJvdWdoXCIsdW5kZXJsaW5lOlwiVW5kZXJsaW5lXCJ9LHVuZG86e3VuZG86XCJ1bmRvXCIscmVkbzpcIlJlZG9cIn0sdG9kbzp7dG9kbzpcIlRvZG9cIn19KSxNUChcInpoLUNOXCIse2NvbW1vbjp7b2s6XCLnoa7lrppcIixkZWxldGU6XCLliKDpmaRcIixlbnRlcjpcIuWbnui9plwifSxibG9ja1F1b3RlOnt0aXRsZTpcIuW8leeUqFwifSxjb2RlQmxvY2s6e3RpdGxlOlwi5Luj56CB5Z2XXCJ9LGNvbG9yOntjb2xvcjpcIuaWh+Wtl+minOiJslwiLGJnQ29sb3I6XCLog4zmma/oibJcIixkZWZhdWx0Olwi6buY6K6k6aKc6ImyXCIsY2xlYXI6XCLmuIXpmaTog4zmma/oibJcIn0sZGl2aWRlcjp7dGl0bGU6XCLliIblibLnur9cIn0sZW1vdGlvbjp7dGl0bGU6XCLooajmg4VcIn0sZm9udFNpemU6e3RpdGxlOlwi5a2X5Y+3XCIsZGVmYXVsdDpcIum7mOiupOWtl+WPt1wifSxmb250RmFtaWx5Ont0aXRsZTpcIuWtl+S9k1wiLGRlZmF1bHQ6XCLpu5jorqTlrZfkvZNcIn0sZnVsbFNjcmVlbjp7dGl0bGU6XCLlhajlsY9cIn0saGVhZGVyOnt0aXRsZTpcIuagh+mimFwiLHRleHQ6XCLmraPmlodcIn0saW1hZ2U6e25ldEltYWdlOlwi572R57uc5Zu+54mHXCIsZGVsZXRlOlwi5Yig6Zmk5Zu+54mHXCIsZWRpdDpcIue8lui+keWbvueJh1wiLHZpZXdMaW5rOlwi5p+l55yL6ZO+5o6lXCIsc3JjOlwi5Zu+54mH5Zyw5Z2AXCIsZGVzYzpcIuWbvueJh+aPj+i/sFwiLGxpbms6XCLlm77niYfpk77mjqVcIn0saW5kZW50OntkZWNyZWFzZTpcIuWHj+Wwkee8qei/m1wiLGluY3JlYXNlOlwi5aKe5Yqg57yp6L+bXCJ9LGp1c3RpZnk6e2xlZnQ6XCLlt6blr7npvZBcIixyaWdodDpcIuWPs+Wvuem9kFwiLGNlbnRlcjpcIuWxheS4reWvuem9kFwiLGp1c3RpZnk6XCLkuKTnq6/lr7npvZBcIn0sbGluZUhlaWdodDp7dGl0bGU6XCLooYzpq5hcIixkZWZhdWx0Olwi6buY6K6k6KGM6auYXCJ9LGxpbms6e2luc2VydDpcIuaPkuWFpemTvuaOpVwiLHRleHQ6XCLpk77mjqXmlofmnKxcIix1cmw6XCLpk77mjqXlnLDlnYBcIix1bkxpbms6XCLlj5bmtojpk77mjqVcIixlZGl0Olwi5L+u5pS56ZO+5o6lXCIsdmlldzpcIuafpeeci+mTvuaOpVwifSx0ZXh0U3R5bGU6e2JvbGQ6XCLnspfkvZNcIixjbGVhcjpcIua4hemZpOagvOW8j1wiLGNvZGU6XCLooYzlhoXku6PnoIFcIixpdGFsaWM6XCLmlpzkvZNcIixzdWI6XCLkuIvmoIdcIixzdXA6XCLkuIrmoIdcIix0aHJvdWdoOlwi5Yig6Zmk57q/XCIsdW5kZXJsaW5lOlwi5LiL5YiS57q/XCJ9LHVuZG86e3VuZG86XCLmkqTplIBcIixyZWRvOlwi6YeN5YGaXCJ9LHRvZG86e3RvZG86XCLlvoXlip5cIn19KTt2YXIgbGo9e3R5cGU6XCJwYXJhZ3JhcGhcIixyZW5kZXJFbGVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUGcoXCJwXCIsbnVsbCx0KX19LGNqPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBmaihlKXt2YXIgdD17ZXhwb3J0czp7fX07cmV0dXJuIGUodCx0LmV4cG9ydHMpLHQuZXhwb3J0c312YXIgZGoscGosaGo9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuTWF0aD09TWF0aCYmZX0sZ2o9aGooXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxoaihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxoaihcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZil8fGhqKFwib2JqZWN0XCI9PXR5cGVvZiBjaiYmY2opfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksdmo9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiEhZSgpfWNhdGNoKGUpe3JldHVybiEwfX0seWo9IXZqKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KSksbWo9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsYmo9bWouYmluZD9tai5iaW5kKG1qKTpmdW5jdGlvbigpe3JldHVybiBtai5hcHBseShtaixhcmd1bWVudHMpfSx3aj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxFaj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLERqPUVqJiYhd2ouY2FsbCh7MToyfSwxKT9mdW5jdGlvbihlKXt2YXIgdD1Faih0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTp3aixTaj17ZjpEan0seGo9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19LENqPUZ1bmN0aW9uLnByb3RvdHlwZSxBaj1Dai5iaW5kLE9qPUNqLmNhbGwsa2o9QWomJkFqLmJpbmQoT2opLEJqPUFqP2Z1bmN0aW9uKGUpe3JldHVybiBlJiZraihPaixlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmZ1bmN0aW9uKCl7cmV0dXJuIE9qLmFwcGx5KGUsYXJndW1lbnRzKX19LEZqPUJqKHt9LnRvU3RyaW5nKSxUaj1CaihcIlwiLnNsaWNlKSxfaj1mdW5jdGlvbihlKXtyZXR1cm4gVGooRmooZSksOCwtMSl9LFBqPWdqLk9iamVjdCxqaj1CaihcIlwiLnNwbGl0KSxOaj12aigoZnVuY3Rpb24oKXtyZXR1cm4hUGooXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKGUpe3JldHVyblwiU3RyaW5nXCI9PV9qKGUpP2pqKGUsXCJcIik6UGooZSl9OlBqLElqPWdqLlR5cGVFcnJvcixMaj1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IElqKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIrZSk7cmV0dXJuIGV9LFJqPWZ1bmN0aW9uKGUpe3JldHVybiBOaihMaihlKSl9LE1qPWZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9LHpqPWZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlP251bGwhPT1lOk1qKGUpfSwkaj1mdW5jdGlvbihlKXtyZXR1cm4gTWooZSk/ZTp2b2lkIDB9LEhqPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj8kaihnaltlXSk6Z2pbZV0mJmdqW2VdW3RdfSxWaj1Caih7fS5pc1Byb3RvdHlwZU9mKSxVaj1IaihcIm5hdmlnYXRvclwiLFwidXNlckFnZW50XCIpfHxcIlwiLFdqPWdqLnByb2Nlc3MsR2o9Z2ouRGVubyxxaj1XaiYmV2oudmVyc2lvbnN8fEdqJiZHai52ZXJzaW9uLEtqPXFqJiZxai52ODtLaiYmKHBqPShkaj1Lai5zcGxpdChcIi5cIikpWzBdPjAmJmRqWzBdPDQ/MTorKGRqWzBdK2RqWzFdKSksIXBqJiZVaiYmKCEoZGo9VWoubWF0Y2goL0VkZ2VcXC8oXFxkKykvKSl8fGRqWzFdPj03NCkmJihkaj1Vai5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLykpJiYocGo9K2RqWzFdKTt2YXIgWWo9cGosWGo9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhdmooKGZ1bmN0aW9uKCl7dmFyIGU9U3ltYm9sKCk7cmV0dXJuIVN0cmluZyhlKXx8IShPYmplY3QoZSlpbnN0YW5jZW9mIFN5bWJvbCl8fCFTeW1ib2wuc2hhbSYmWWomJllqPDQxfSkpLFpqPVhqJiYhU3ltYm9sLnNoYW0mJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IsSmo9Z2ouT2JqZWN0LFFqPVpqP2Z1bmN0aW9uKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfTpmdW5jdGlvbihlKXt2YXIgdD1IaihcIlN5bWJvbFwiKTtyZXR1cm4gTWoodCkmJlZqKHQucHJvdG90eXBlLEpqKGUpKX0sZU49Z2ouU3RyaW5nLHROPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gZU4oZSl9Y2F0Y2goZSl7cmV0dXJuXCJPYmplY3RcIn19LG5OPWdqLlR5cGVFcnJvcixyTj1mdW5jdGlvbihlKXtpZihNaihlKSlyZXR1cm4gZTt0aHJvdyBuTih0TihlKStcIiBpcyBub3QgYSBmdW5jdGlvblwiKX0sb049ZnVuY3Rpb24oZSx0KXt2YXIgbj1lW3RdO3JldHVybiBudWxsPT1uP3ZvaWQgMDpyTihuKX0saU49Z2ouVHlwZUVycm9yLGFOPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx1Tj1mdW5jdGlvbihlLHQpe3RyeXthTihnaixlLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoKG4pe2dqW2VdPXR9cmV0dXJuIHR9LHNOPWdqW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdfHx1TihcIl9fY29yZS1qc19zaGFyZWRfX1wiLHt9KSxsTj1maigoZnVuY3Rpb24oZSl7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBzTltlXXx8KHNOW2VdPXZvaWQgMCE9PXQ/dDp7fSl9KShcInZlcnNpb25zXCIsW10pLnB1c2goe3ZlcnNpb246XCIzLjE5LjNcIixtb2RlOlwiZ2xvYmFsXCIsY29weXJpZ2h0OlwiwqkgMjAyMSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KVwifSl9KSksY049Z2ouT2JqZWN0LGZOPWZ1bmN0aW9uKGUpe3JldHVybiBjTihMaihlKSl9LGROPUJqKHt9Lmhhc093blByb3BlcnR5KSxwTj1PYmplY3QuaGFzT3dufHxmdW5jdGlvbihlLHQpe3JldHVybiBkTihmTihlKSx0KX0saE49MCxnTj1NYXRoLnJhbmRvbSgpLHZOPUJqKDEuLnRvU3RyaW5nKSx5Tj1mdW5jdGlvbihlKXtyZXR1cm5cIlN5bWJvbChcIisodm9pZCAwPT09ZT9cIlwiOmUpK1wiKV9cIit2TigrK2hOK2dOLDM2KX0sbU49bE4oXCJ3a3NcIiksYk49Z2ouU3ltYm9sLHdOPWJOJiZiTi5mb3IsRU49Wmo/Yk46Yk4mJmJOLndpdGhvdXRTZXR0ZXJ8fHlOLEROPWZ1bmN0aW9uKGUpe2lmKCFwTihtTixlKXx8IVhqJiZcInN0cmluZ1wiIT10eXBlb2YgbU5bZV0pe3ZhciB0PVwiU3ltYm9sLlwiK2U7WGomJnBOKGJOLGUpP21OW2VdPWJOW2VdOm1OW2VdPVpqJiZ3Tj93Tih0KTpFTih0KX1yZXR1cm4gbU5bZV19LFNOPWdqLlR5cGVFcnJvcix4Tj1ETihcInRvUHJpbWl0aXZlXCIpLENOPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoIXpqKGUpfHxRaihlKSlyZXR1cm4gZTt2YXIgbixyPW9OKGUseE4pO2lmKHIpe2lmKHZvaWQgMD09PXQmJih0PVwiZGVmYXVsdFwiKSxuPWJqKHIsZSx0KSwhemoobil8fFFqKG4pKXJldHVybiBuO3Rocm93IFNOKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfXJldHVybiB2b2lkIDA9PT10JiYodD1cIm51bWJlclwiKSxmdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYoXCJzdHJpbmdcIj09PXQmJk1qKG49ZS50b1N0cmluZykmJiF6aihyPWJqKG4sZSkpKXJldHVybiByO2lmKE1qKG49ZS52YWx1ZU9mKSYmIXpqKHI9YmoobixlKSkpcmV0dXJuIHI7aWYoXCJzdHJpbmdcIiE9PXQmJk1qKG49ZS50b1N0cmluZykmJiF6aihyPWJqKG4sZSkpKXJldHVybiByO3Rocm93IGlOKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfShlLHQpfShlLFwic3RyaW5nXCIpO3JldHVybiBRaih0KT90OnQrXCJcIn0sQU49Z2ouZG9jdW1lbnQsT049emooQU4pJiZ6aihBTi5jcmVhdGVFbGVtZW50KSxrTj1mdW5jdGlvbihlKXtyZXR1cm4gT04/QU4uY3JlYXRlRWxlbWVudChlKTp7fX0sQk49IXlqJiYhdmooKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShrTihcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKSxGTj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFROPXtmOnlqP0ZOOmZ1bmN0aW9uKGUsdCl7aWYoZT1SaihlKSx0PUNOKHQpLEJOKXRyeXtyZXR1cm4gRk4oZSx0KX1jYXRjaChlKXt9aWYocE4oZSx0KSlyZXR1cm4geGooIWJqKFNqLmYsZSx0KSxlW3RdKX19LF9OPWdqLlN0cmluZyxQTj1nai5UeXBlRXJyb3Isak49ZnVuY3Rpb24oZSl7aWYoemooZSkpcmV0dXJuIGU7dGhyb3cgUE4oX04oZSkrXCIgaXMgbm90IGFuIG9iamVjdFwiKX0sTk49Z2ouVHlwZUVycm9yLElOPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxMTj17Zjp5aj9JTjpmdW5jdGlvbihlLHQsbil7aWYoak4oZSksdD1DTih0KSxqTihuKSxCTil0cnl7cmV0dXJuIElOKGUsdCxuKX1jYXRjaChlKXt9aWYoXCJnZXRcImluIG58fFwic2V0XCJpbiBuKXRocm93IE5OKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWRcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gbiYmKGVbdF09bi52YWx1ZSksZX19LFJOPXlqP2Z1bmN0aW9uKGUsdCxuKXtyZXR1cm4gTE4uZihlLHQseGooMSxuKSl9OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZVt0XT1uLGV9LE1OPUJqKEZ1bmN0aW9uLnRvU3RyaW5nKTtNaihzTi5pbnNwZWN0U291cmNlKXx8KHNOLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIE1OKGUpfSk7dmFyIHpOLCROLEhOLFZOPXNOLmluc3BlY3RTb3VyY2UsVU49Z2ouV2Vha01hcCxXTj1NaihVTikmJi9uYXRpdmUgY29kZS8udGVzdChWTihVTikpLEdOPWxOKFwia2V5c1wiKSxxTj1mdW5jdGlvbihlKXtyZXR1cm4gR05bZV18fChHTltlXT15TihlKSl9LEtOPXt9LFlOPWdqLlR5cGVFcnJvcixYTj1nai5XZWFrTWFwO2lmKFdOfHxzTi5zdGF0ZSl7dmFyIFpOPXNOLnN0YXRlfHwoc04uc3RhdGU9bmV3IFhOKSxKTj1CaihaTi5nZXQpLFFOPUJqKFpOLmhhcyksZUk9QmooWk4uc2V0KTt6Tj1mdW5jdGlvbihlLHQpe2lmKFFOKFpOLGUpKXRocm93IG5ldyBZTihcIk9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkXCIpO3JldHVybiB0LmZhY2FkZT1lLGVJKFpOLGUsdCksdH0sJE49ZnVuY3Rpb24oZSl7cmV0dXJuIEpOKFpOLGUpfHx7fX0sSE49ZnVuY3Rpb24oZSl7cmV0dXJuIFFOKFpOLGUpfX1lbHNle3ZhciB0ST1xTihcInN0YXRlXCIpO0tOW3RJXT0hMCx6Tj1mdW5jdGlvbihlLHQpe2lmKHBOKGUsdEkpKXRocm93IG5ldyBZTihcIk9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkXCIpO3JldHVybiB0LmZhY2FkZT1lLFJOKGUsdEksdCksdH0sJE49ZnVuY3Rpb24oZSl7cmV0dXJuIHBOKGUsdEkpP2VbdEldOnt9fSxITj1mdW5jdGlvbihlKXtyZXR1cm4gcE4oZSx0SSl9fXZhciBuST17c2V0OnpOLGdldDokTixoYXM6SE4sZW5mb3JjZTpmdW5jdGlvbihlKXtyZXR1cm4gSE4oZSk/JE4oZSk6ek4oZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG47aWYoIXpqKHQpfHwobj0kTih0KSkudHlwZSE9PWUpdGhyb3cgWU4oXCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsIFwiK2UrXCIgcmVxdWlyZWRcIik7cmV0dXJuIG59fX0sckk9RnVuY3Rpb24ucHJvdG90eXBlLG9JPXlqJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGlJPXBOKHJJLFwibmFtZVwiKSxhST17RVhJU1RTOmlJLFBST1BFUjppSSYmXCJzb21ldGhpbmdcIj09PWZ1bmN0aW9uKCl7fS5uYW1lLENPTkZJR1VSQUJMRTppSSYmKCF5anx8eWomJm9JKHJJLFwibmFtZVwiKS5jb25maWd1cmFibGUpfSx1ST1maigoZnVuY3Rpb24oZSl7dmFyIHQ9YUkuQ09ORklHVVJBQkxFLG49bkkuZ2V0LHI9bkkuZW5mb3JjZSxvPVN0cmluZyhTdHJpbmcpLnNwbGl0KFwiU3RyaW5nXCIpOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSxuLGksYSl7dmFyIHUscz0hIWEmJiEhYS51bnNhZmUsbD0hIWEmJiEhYS5lbnVtZXJhYmxlLGM9ISFhJiYhIWEubm9UYXJnZXRHZXQsZj1hJiZ2b2lkIDAhPT1hLm5hbWU/YS5uYW1lOm47TWooaSkmJihcIlN5bWJvbChcIj09PVN0cmluZyhmKS5zbGljZSgwLDcpJiYoZj1cIltcIitTdHJpbmcoZikucmVwbGFjZSgvXlN5bWJvbFxcKChbXildKilcXCkvLFwiJDFcIikrXCJdXCIpLCghcE4oaSxcIm5hbWVcIil8fHQmJmkubmFtZSE9PWYpJiZSTihpLFwibmFtZVwiLGYpLCh1PXIoaSkpLnNvdXJjZXx8KHUuc291cmNlPW8uam9pbihcInN0cmluZ1wiPT10eXBlb2YgZj9mOlwiXCIpKSksZSE9PWdqPyhzPyFjJiZlW25dJiYobD0hMCk6ZGVsZXRlIGVbbl0sbD9lW25dPWk6Uk4oZSxuLGkpKTpsP2Vbbl09aTp1TihuLGkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLFwidG9TdHJpbmdcIiwoZnVuY3Rpb24oKXtyZXR1cm4gTWoodGhpcykmJm4odGhpcykuc291cmNlfHxWTih0aGlzKX0pKX0pKSxzST1NYXRoLmNlaWwsbEk9TWF0aC5mbG9vcixjST1mdW5jdGlvbihlKXt2YXIgdD0rZTtyZXR1cm4gdCE9dHx8MD09PXQ/MDoodD4wP2xJOnNJKSh0KX0sZkk9TWF0aC5tYXgsZEk9TWF0aC5taW4scEk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1jSShlKTtyZXR1cm4gbjwwP2ZJKG4rdCwwKTpkSShuLHQpfSxoST1NYXRoLm1pbixnST1mdW5jdGlvbihlKXtyZXR1cm4gZT4wP2hJKGNJKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9LHZJPWZ1bmN0aW9uKGUpe3JldHVybiBnSShlLmxlbmd0aCl9LHlJPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7dmFyIG8saT1Saih0KSxhPXZJKGkpLHU9cEkocixhKTtpZihlJiZuIT1uKXtmb3IoO2E+dTspaWYoKG89aVt1KytdKSE9bylyZXR1cm4hMH1lbHNlIGZvcig7YT51O3UrKylpZigoZXx8dSBpbiBpKSYmaVt1XT09PW4pcmV0dXJuIGV8fHV8fDA7cmV0dXJuIWUmJi0xfX0sbUk9e2luY2x1ZGVzOnlJKCEwKSxpbmRleE9mOnlJKCExKX0sYkk9bUkuaW5kZXhPZix3ST1CaihbXS5wdXNoKSxFST1mdW5jdGlvbihlLHQpe3ZhciBuLHI9UmooZSksbz0wLGk9W107Zm9yKG4gaW4gcikhcE4oS04sbikmJnBOKHIsbikmJndJKGksbik7Zm9yKDt0Lmxlbmd0aD5vOylwTihyLG49dFtvKytdKSYmKH5iSShpLG4pfHx3SShpLG4pKTtyZXR1cm4gaX0sREk9W1wiY29uc3RydWN0b3JcIixcImhhc093blByb3BlcnR5XCIsXCJpc1Byb3RvdHlwZU9mXCIsXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLFwidG9Mb2NhbGVTdHJpbmdcIixcInRvU3RyaW5nXCIsXCJ2YWx1ZU9mXCJdLFNJPURJLmNvbmNhdChcImxlbmd0aFwiLFwicHJvdG90eXBlXCIpLHhJPXtmOk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihlKXtyZXR1cm4gRUkoZSxTSSl9fSxDST17ZjpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSxBST1CaihbXS5jb25jYXQpLE9JPUhqKFwiUmVmbGVjdFwiLFwib3duS2V5c1wiKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9eEkuZihqTihlKSksbj1DSS5mO3JldHVybiBuP0FJKHQsbihlKSk6dH0sa0k9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49T0kodCkscj1MTi5mLG89VE4uZixpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07cE4oZSxhKXx8cihlLGEsbyh0LGEpKX19LEJJPS8jfFxcLnByb3RvdHlwZVxcLi8sRkk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1fSVtUSShlKV07cmV0dXJuIG49PWpJfHxuIT1QSSYmKE1qKHQpP3ZqKHQpOiEhdCl9LFRJPUZJLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoQkksXCIuXCIpLnRvTG93ZXJDYXNlKCl9LF9JPUZJLmRhdGE9e30sUEk9RkkuTkFUSVZFPVwiTlwiLGpJPUZJLlBPTFlGSUxMPVwiUFwiLE5JPUZJLElJPVROLmYsTEk9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8saSxhLHU9ZS50YXJnZXQscz1lLmdsb2JhbCxsPWUuc3RhdDtpZihuPXM/Z2o6bD9nalt1XXx8dU4odSx7fSk6KGdqW3VdfHx7fSkucHJvdG90eXBlKWZvcihyIGluIHQpe2lmKGk9dFtyXSxvPWUubm9UYXJnZXRHZXQ/KGE9SUkobixyKSkmJmEudmFsdWU6bltyXSwhTkkocz9yOnUrKGw/XCIuXCI6XCIjXCIpK3IsZS5mb3JjZWQpJiZ2b2lkIDAhPT1vKXtpZih0eXBlb2YgaT09dHlwZW9mIG8pY29udGludWU7a0koaSxvKX0oZS5zaGFtfHxvJiZvLnNoYW0pJiZSTihpLFwic2hhbVwiLCEwKSx1SShuLHIsaSxlKX19LFJJPUJqKEJqLmJpbmQpLE1JPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVyblwiQXJyYXlcIj09X2ooZSl9LHpJPXt9O3pJW0ROKFwidG9TdHJpbmdUYWdcIildPVwielwiO3ZhciAkST1cIltvYmplY3Qgel1cIj09PVN0cmluZyh6SSksSEk9RE4oXCJ0b1N0cmluZ1RhZ1wiKSxWST1nai5PYmplY3QsVUk9XCJBcmd1bWVudHNcIj09X2ooZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKSxXST0kST9fajpmdW5jdGlvbihlKXt2YXIgdCxuLHI7cmV0dXJuIHZvaWQgMD09PWU/XCJVbmRlZmluZWRcIjpudWxsPT09ZT9cIk51bGxcIjpcInN0cmluZ1wiPT10eXBlb2Yobj1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZVt0XX1jYXRjaChlKXt9fSh0PVZJKGUpLEhJKSk/bjpVST9faih0KTpcIk9iamVjdFwiPT0ocj1faih0KSkmJk1qKHQuY2FsbGVlKT9cIkFyZ3VtZW50c1wiOnJ9LEdJPWZ1bmN0aW9uKCl7fSxxST1bXSxLST1IaihcIlJlZmxlY3RcIixcImNvbnN0cnVjdFwiKSxZST0vXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvLFhJPUJqKFlJLmV4ZWMpLFpJPSFZSS5leGVjKEdJKSxKST1mdW5jdGlvbihlKXtpZighTWooZSkpcmV0dXJuITE7dHJ5e3JldHVybiBLSShHSSxxSSxlKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19LFFJPSFLSXx8dmooKGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIEpJKEpJLmNhbGwpfHwhSkkoT2JqZWN0KXx8IUpJKChmdW5jdGlvbigpe2U9ITB9KSl8fGV9KSk/ZnVuY3Rpb24oZSl7aWYoIU1qKGUpKXJldHVybiExO3N3aXRjaChXSShlKSl7Y2FzZVwiQXN5bmNGdW5jdGlvblwiOmNhc2VcIkdlbmVyYXRvckZ1bmN0aW9uXCI6Y2FzZVwiQXN5bmNHZW5lcmF0b3JGdW5jdGlvblwiOnJldHVybiExfXJldHVybiBaSXx8ISFYSShZSSxWTihlKSl9OkpJLGVMPUROKFwic3BlY2llc1wiKSx0TD1nai5BcnJheSxuTD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIE1JKGUpJiYodD1lLmNvbnN0cnVjdG9yLChRSSh0KSYmKHQ9PT10THx8TUkodC5wcm90b3R5cGUpKXx8emoodCkmJm51bGw9PT0odD10W2VMXSkpJiYodD12b2lkIDApKSx2b2lkIDA9PT10P3RMOnR9KGUpKSgwPT09dD8wOnQpfSxyTD1CaihbXS5wdXNoKSxvTD1mdW5jdGlvbihlKXt2YXIgdD0xPT1lLG49Mj09ZSxyPTM9PWUsbz00PT1lLGk9Nj09ZSxhPTc9PWUsdT01PT1lfHxpO3JldHVybiBmdW5jdGlvbihzLGwsYyxmKXtmb3IodmFyIGQscCxoPWZOKHMpLGc9TmooaCksdj1mdW5jdGlvbihlLHQpe3JldHVybiByTihlKSx2b2lkIDA9PT10P2U6Ukk/UkkoZSx0KTpmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19KGwsYykseT12SShnKSxtPTAsYj1mfHxuTCx3PXQ/YihzLHkpOm58fGE/YihzLDApOnZvaWQgMDt5Pm07bSsrKWlmKCh1fHxtIGluIGcpJiYocD12KGQ9Z1ttXSxtLGgpLGUpKWlmKHQpd1ttXT1wO2Vsc2UgaWYocClzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZDtjYXNlIDY6cmV0dXJuIG07Y2FzZSAyOnJMKHcsZCl9ZWxzZSBzd2l0Y2goZSl7Y2FzZSA0OnJldHVybiExO2Nhc2UgNzpyTCh3LGQpfXJldHVybiBpPy0xOnJ8fG8/bzp3fX0saUw9e2ZvckVhY2g6b0woMCksbWFwOm9MKDEpLGZpbHRlcjpvTCgyKSxzb21lOm9MKDMpLGV2ZXJ5Om9MKDQpLGZpbmQ6b0woNSksZmluZEluZGV4Om9MKDYpLGZpbHRlclJlamVjdDpvTCg3KX0sYUw9RE4oXCJzcGVjaWVzXCIpLHVMPWZ1bmN0aW9uKGUpe3JldHVybiBZaj49NTF8fCF2aigoZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4odC5jb25zdHJ1Y3Rvcj17fSlbYUxdPWZ1bmN0aW9uKCl7cmV0dXJue2ZvbzoxfX0sMSE9PXRbZV0oQm9vbGVhbikuZm9vfSkpfSxzTD1pTC5maWx0ZXI7TEkoe3RhcmdldDpcIkFycmF5XCIscHJvdG86ITAsZm9yY2VkOiF1TChcImZpbHRlclwiKX0se2ZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gc0wodGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KTt2YXIgbEw9JEk/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5cIltvYmplY3QgXCIrV0kodGhpcykrXCJdXCJ9OyRJfHx1SShPYmplY3QucHJvdG90eXBlLFwidG9TdHJpbmdcIixsTCx7dW5zYWZlOiEwfSk7dmFyIGNMLGZMPWdqLlN0cmluZyxkTD1mdW5jdGlvbihlKXtpZihcIlN5bWJvbFwiPT09V0koZSkpdGhyb3cgVHlwZUVycm9yKFwiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmdcIik7cmV0dXJuIGZMKGUpfSxwTD1mdW5jdGlvbigpe3ZhciBlPWpOKHRoaXMpLHQ9XCJcIjtyZXR1cm4gZS5nbG9iYWwmJih0Kz1cImdcIiksZS5pZ25vcmVDYXNlJiYodCs9XCJpXCIpLGUubXVsdGlsaW5lJiYodCs9XCJtXCIpLGUuZG90QWxsJiYodCs9XCJzXCIpLGUudW5pY29kZSYmKHQrPVwidVwiKSxlLnN0aWNreSYmKHQrPVwieVwiKSx0fSxoTD1nai5SZWdFeHAsZ0w9dmooKGZ1bmN0aW9uKCl7dmFyIGU9aEwoXCJhXCIsXCJ5XCIpO3JldHVybiBlLmxhc3RJbmRleD0yLG51bGwhPWUuZXhlYyhcImFiY2RcIil9KSksdkw9Z0x8fHZqKChmdW5jdGlvbigpe3JldHVybiFoTChcImFcIixcInlcIikuc3RpY2t5fSkpLHlMPXtCUk9LRU5fQ0FSRVQ6Z0x8fHZqKChmdW5jdGlvbigpe3ZhciBlPWhMKFwiXnJcIixcImd5XCIpO3JldHVybiBlLmxhc3RJbmRleD0yLG51bGwhPWUuZXhlYyhcInN0clwiKX0pKSxNSVNTRURfU1RJQ0tZOnZMLFVOU1VQUE9SVEVEX1k6Z0x9LG1MPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXtyZXR1cm4gRUkoZSxESSl9LGJMPXlqP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUsdCl7ak4oZSk7Zm9yKHZhciBuLHI9UmoodCksbz1tTCh0KSxpPW8ubGVuZ3RoLGE9MDtpPmE7KUxOLmYoZSxuPW9bYSsrXSxyW25dKTtyZXR1cm4gZX0sd0w9SGooXCJkb2N1bWVudFwiLFwiZG9jdW1lbnRFbGVtZW50XCIpLEVMPXFOKFwiSUVfUFJPVE9cIiksREw9ZnVuY3Rpb24oKXt9LFNMPWZ1bmN0aW9uKGUpe3JldHVyblwiPHNjcmlwdD5cIitlK1wiPFxcL3NjcmlwdD5cIn0seEw9ZnVuY3Rpb24oZSl7ZS53cml0ZShTTChcIlwiKSksZS5jbG9zZSgpO3ZhciB0PWUucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gZT1udWxsLHR9LENMPWZ1bmN0aW9uKCl7dHJ5e2NMPW5ldyBBY3RpdmVYT2JqZWN0KFwiaHRtbGZpbGVcIil9Y2F0Y2goZSl7fXZhciBlLHQ7Q0w9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmY0w/eEwoY0wpOigodD1rTihcImlmcmFtZVwiKSkuc3R5bGUuZGlzcGxheT1cIm5vbmVcIix3TC5hcHBlbmRDaGlsZCh0KSx0LnNyYz1TdHJpbmcoXCJqYXZhc2NyaXB0OlwiKSwoZT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxlLndyaXRlKFNMKFwiZG9jdW1lbnQuRj1PYmplY3RcIikpLGUuY2xvc2UoKSxlLkYpOnhMKGNMKTtmb3IodmFyIG49REkubGVuZ3RoO24tLTspZGVsZXRlIENMLnByb3RvdHlwZVtESVtuXV07cmV0dXJuIENMKCl9O0tOW0VMXT0hMDt2YXIgQUwsT0wsa0w9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PWU/KERMLnByb3RvdHlwZT1qTihlKSxuPW5ldyBETCxETC5wcm90b3R5cGU9bnVsbCxuW0VMXT1lKTpuPUNMKCksdm9pZCAwPT09dD9uOmJMKG4sdCl9LEJMPWdqLlJlZ0V4cCxGTD12aigoZnVuY3Rpb24oKXt2YXIgZT1CTChcIi5cIixcInNcIik7cmV0dXJuIShlLmRvdEFsbCYmZS5leGVjKFwiXFxuXCIpJiZcInNcIj09PWUuZmxhZ3MpfSkpLFRMPWdqLlJlZ0V4cCxfTD12aigoZnVuY3Rpb24oKXt2YXIgZT1UTChcIig/PGE+YilcIixcImdcIik7cmV0dXJuXCJiXCIhPT1lLmV4ZWMoXCJiXCIpLmdyb3Vwcy5hfHxcImJjXCIhPT1cImJcIi5yZXBsYWNlKGUsXCIkPGE+Y1wiKX0pKSxQTD1uSS5nZXQsakw9bE4oXCJuYXRpdmUtc3RyaW5nLXJlcGxhY2VcIixTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLE5MPVJlZ0V4cC5wcm90b3R5cGUuZXhlYyxJTD1OTCxMTD1CaihcIlwiLmNoYXJBdCksUkw9QmooXCJcIi5pbmRleE9mKSxNTD1CaihcIlwiLnJlcGxhY2UpLHpMPUJqKFwiXCIuc2xpY2UpLCRMPShPTD0vYiovZyxiaihOTCxBTD0vYS8sXCJhXCIpLGJqKE5MLE9MLFwiYVwiKSwwIT09QUwubGFzdEluZGV4fHwwIT09T0wubGFzdEluZGV4KSxITD15TC5CUk9LRU5fQ0FSRVQsVkw9dm9pZCAwIT09LygpPz8vLmV4ZWMoXCJcIilbMV07KCRMfHxWTHx8SEx8fEZMfHxfTCkmJihJTD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxpLGEsdSxzPXRoaXMsbD1QTChzKSxjPWRMKGUpLGY9bC5yYXc7aWYoZilyZXR1cm4gZi5sYXN0SW5kZXg9cy5sYXN0SW5kZXgsdD1iaihJTCxmLGMpLHMubGFzdEluZGV4PWYubGFzdEluZGV4LHQ7dmFyIGQ9bC5ncm91cHMscD1ITCYmcy5zdGlja3ksaD1iaihwTCxzKSxnPXMuc291cmNlLHY9MCx5PWM7aWYocCYmKGg9TUwoaCxcInlcIixcIlwiKSwtMT09PVJMKGgsXCJnXCIpJiYoaCs9XCJnXCIpLHk9ekwoYyxzLmxhc3RJbmRleCkscy5sYXN0SW5kZXg+MCYmKCFzLm11bHRpbGluZXx8cy5tdWx0aWxpbmUmJlwiXFxuXCIhPT1MTChjLHMubGFzdEluZGV4LTEpKSYmKGc9XCIoPzogXCIrZytcIilcIix5PVwiIFwiK3ksdisrKSxuPW5ldyBSZWdFeHAoXCJeKD86XCIrZytcIilcIixoKSksVkwmJihuPW5ldyBSZWdFeHAoXCJeXCIrZytcIiQoPyFcXFxccylcIixoKSksJEwmJihyPXMubGFzdEluZGV4KSxvPWJqKE5MLHA/bjpzLHkpLHA/bz8oby5pbnB1dD16TChvLmlucHV0LHYpLG9bMF09ekwob1swXSx2KSxvLmluZGV4PXMubGFzdEluZGV4LHMubGFzdEluZGV4Kz1vWzBdLmxlbmd0aCk6cy5sYXN0SW5kZXg9MDokTCYmbyYmKHMubGFzdEluZGV4PXMuZ2xvYmFsP28uaW5kZXgrb1swXS5sZW5ndGg6ciksVkwmJm8mJm8ubGVuZ3RoPjEmJmJqKGpMLG9bMF0sbiwoZnVuY3Rpb24oKXtmb3IoaT0xO2k8YXJndW1lbnRzLmxlbmd0aC0yO2krKyl2b2lkIDA9PT1hcmd1bWVudHNbaV0mJihvW2ldPXZvaWQgMCl9KSksbyYmZClmb3Ioby5ncm91cHM9YT1rTChudWxsKSxpPTA7aTxkLmxlbmd0aDtpKyspYVsodT1kW2ldKVswXV09b1t1WzFdXTtyZXR1cm4gb30pO3ZhciBVTD1JTDtMSSh7dGFyZ2V0OlwiUmVnRXhwXCIscHJvdG86ITAsZm9yY2VkOi8uLy5leGVjIT09VUx9LHtleGVjOlVMfSk7dmFyIFdMPUZ1bmN0aW9uLnByb3RvdHlwZSxHTD1XTC5hcHBseSxxTD1XTC5iaW5kLEtMPVdMLmNhbGwsWUw9XCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuYXBwbHl8fChxTD9LTC5iaW5kKEdMKTpmdW5jdGlvbigpe3JldHVybiBLTC5hcHBseShHTCxhcmd1bWVudHMpfSksWEw9RE4oXCJzcGVjaWVzXCIpLFpMPVJlZ0V4cC5wcm90b3R5cGUsSkw9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89RE4oZSksaT0hdmooKGZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHRbb109ZnVuY3Rpb24oKXtyZXR1cm4gN30sNyE9XCJcIltlXSh0KX0pKSxhPWkmJiF2aigoZnVuY3Rpb24oKXt2YXIgdD0hMSxuPS9hLztyZXR1cm5cInNwbGl0XCI9PT1lJiYoKG49e30pLmNvbnN0cnVjdG9yPXt9LG4uY29uc3RydWN0b3JbWExdPWZ1bmN0aW9uKCl7cmV0dXJuIG59LG4uZmxhZ3M9XCJcIixuW29dPS8uL1tvXSksbi5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIHQ9ITAsbnVsbH0sbltvXShcIlwiKSwhdH0pKTtpZighaXx8IWF8fG4pe3ZhciB1PUJqKC8uL1tvXSkscz10KG8sXCJcIltlXSwoZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgYT1CaihlKSxzPXQuZXhlYztyZXR1cm4gcz09PVVMfHxzPT09WkwuZXhlYz9pJiYhbz97ZG9uZTohMCx2YWx1ZTp1KHQsbixyKX06e2RvbmU6ITAsdmFsdWU6YShuLHQscil9Ontkb25lOiExfX0pKTt1SShTdHJpbmcucHJvdG90eXBlLGUsc1swXSksdUkoWkwsbyxzWzFdKX1yJiZSTihaTFtvXSxcInNoYW1cIiwhMCl9LFFMPUJqKFwiXCIuY2hhckF0KSxlUj1CaihcIlwiLmNoYXJDb2RlQXQpLHRSPUJqKFwiXCIuc2xpY2UpLG5SPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciByLG8saT1kTChMaih0KSksYT1jSShuKSx1PWkubGVuZ3RoO3JldHVybiBhPDB8fGE+PXU/ZT9cIlwiOnZvaWQgMDoocj1lUihpLGEpKTw1NTI5Nnx8cj41NjMxOXx8YSsxPT09dXx8KG89ZVIoaSxhKzEpKTw1NjMyMHx8bz41NzM0Mz9lP1FMKGksYSk6cjplP3RSKGksYSxhKzIpOm8tNTYzMjArKHItNTUyOTY8PDEwKSs2NTUzNn19LHJSPShuUighMSksblIoITApKSxvUj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQrKG4/clIoZSx0KS5sZW5ndGg6MSl9LGlSPU1hdGguZmxvb3IsYVI9QmooXCJcIi5jaGFyQXQpLHVSPUJqKFwiXCIucmVwbGFjZSksc1I9QmooXCJcIi5zbGljZSksbFI9L1xcJChbJCYnYF18XFxkezEsMn18PFtePl0qPikvZyxjUj0vXFwkKFskJidgXXxcXGR7MSwyfSkvZyxmUj1mdW5jdGlvbihlLHQsbixyLG8saSl7dmFyIGE9bitlLmxlbmd0aCx1PXIubGVuZ3RoLHM9Y1I7cmV0dXJuIHZvaWQgMCE9PW8mJihvPWZOKG8pLHM9bFIpLHVSKGkscywoZnVuY3Rpb24oaSxzKXt2YXIgbDtzd2l0Y2goYVIocywwKSl7Y2FzZVwiJFwiOnJldHVyblwiJFwiO2Nhc2VcIiZcIjpyZXR1cm4gZTtjYXNlXCJgXCI6cmV0dXJuIHNSKHQsMCxuKTtjYXNlXCInXCI6cmV0dXJuIHNSKHQsYSk7Y2FzZVwiPFwiOmw9b1tzUihzLDEsLTEpXTticmVhaztkZWZhdWx0OnZhciBjPStzO2lmKDA9PT1jKXJldHVybiBpO2lmKGM+dSl7dmFyIGY9aVIoYy8xMCk7cmV0dXJuIDA9PT1mP2k6Zjw9dT92b2lkIDA9PT1yW2YtMV0/YVIocywxKTpyW2YtMV0rYVIocywxKTppfWw9cltjLTFdfXJldHVybiB2b2lkIDA9PT1sP1wiXCI6bH0pKX0sZFI9Z2ouVHlwZUVycm9yLHBSPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5leGVjO2lmKE1qKG4pKXt2YXIgcj1iaihuLGUsdCk7cmV0dXJuIG51bGwhPT1yJiZqTihyKSxyfWlmKFwiUmVnRXhwXCI9PT1faihlKSlyZXR1cm4gYmooVUwsZSx0KTt0aHJvdyBkUihcIlJlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXJcIil9LGhSPUROKFwicmVwbGFjZVwiKSxnUj1NYXRoLm1heCx2Uj1NYXRoLm1pbix5Uj1CaihbXS5jb25jYXQpLG1SPUJqKFtdLnB1c2gpLGJSPUJqKFwiXCIuaW5kZXhPZiksd1I9QmooXCJcIi5zbGljZSksRVI9XCIkMFwiPT09XCJhXCIucmVwbGFjZSgvLi8sXCIkMFwiKSxEUj0hIS8uL1toUl0mJlwiXCI9PT0vLi9baFJdKFwiYVwiLFwiJDBcIik7SkwoXCJyZXBsYWNlXCIsKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1EUj9cIiRcIjpcIiQwXCI7cmV0dXJuW2Z1bmN0aW9uKGUsbil7dmFyIHI9TGoodGhpcyksbz1udWxsPT1lP3ZvaWQgMDpvTihlLGhSKTtyZXR1cm4gbz9iaihvLGUscixuKTpiaih0LGRMKHIpLGUsbil9LGZ1bmN0aW9uKGUsbyl7dmFyIGk9ak4odGhpcyksYT1kTChlKTtpZihcInN0cmluZ1wiPT10eXBlb2YgbyYmLTE9PT1iUihvLHIpJiYtMT09PWJSKG8sXCIkPFwiKSl7dmFyIHU9bih0LGksYSxvKTtpZih1LmRvbmUpcmV0dXJuIHUudmFsdWV9dmFyIHM9TWoobyk7c3x8KG89ZEwobykpO3ZhciBsPWkuZ2xvYmFsO2lmKGwpe3ZhciBjPWkudW5pY29kZTtpLmxhc3RJbmRleD0wfWZvcih2YXIgZj1bXTs7KXt2YXIgZD1wUihpLGEpO2lmKG51bGw9PT1kKWJyZWFrO2lmKG1SKGYsZCksIWwpYnJlYWs7XCJcIj09PWRMKGRbMF0pJiYoaS5sYXN0SW5kZXg9b1IoYSxnSShpLmxhc3RJbmRleCksYykpfWZvcih2YXIgcCxoPVwiXCIsZz0wLHY9MDt2PGYubGVuZ3RoO3YrKyl7Zm9yKHZhciB5PWRMKChkPWZbdl0pWzBdKSxtPWdSKHZSKGNJKGQuaW5kZXgpLGEubGVuZ3RoKSwwKSxiPVtdLHc9MTt3PGQubGVuZ3RoO3crKyltUihiLHZvaWQgMD09PShwPWRbd10pP3A6U3RyaW5nKHApKTt2YXIgRT1kLmdyb3VwcztpZihzKXt2YXIgRD15UihbeV0sYixtLGEpO3ZvaWQgMCE9PUUmJm1SKEQsRSk7dmFyIFM9ZEwoWUwobyx2b2lkIDAsRCkpfWVsc2UgUz1mUih5LGEsbSxiLEUsbyk7bT49ZyYmKGgrPXdSKGEsZyxtKStTLGc9bSt5Lmxlbmd0aCl9cmV0dXJuIGgrd1IoYSxnKX1dfSksISF2aigoZnVuY3Rpb24oKXt2YXIgZT0vLi87cmV0dXJuIGUuZXhlYz1mdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBlLmdyb3Vwcz17YTpcIjdcIn0sZX0sXCI3XCIhPT1cIlwiLnJlcGxhY2UoZSxcIiQ8YT5cIil9KSl8fCFFUnx8RFIpO3ZhciBTUj1ETihcInVuc2NvcGFibGVzXCIpLHhSPUFycmF5LnByb3RvdHlwZTtudWxsPT14UltTUl0mJkxOLmYoeFIsU1Ise2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTprTChudWxsKX0pO3ZhciBDUj1mdW5jdGlvbihlKXt4UltTUl1bZV09ITB9LEFSPWlMLmZpbmQsT1I9ITA7XCJmaW5kXCJpbltdJiZBcnJheSgxKS5maW5kKChmdW5jdGlvbigpe09SPSExfSkpLExJKHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwLGZvcmNlZDpPUn0se2ZpbmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIEFSKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksQ1IoXCJmaW5kXCIpO3ZhciBrUj1ETihcIm1hdGNoXCIpLEJSPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB6aihlKSYmKHZvaWQgMCE9PSh0PWVba1JdKT8hIXQ6XCJSZWdFeHBcIj09X2ooZSkpfSxGUj1nai5UeXBlRXJyb3IsVFI9RE4oXCJzcGVjaWVzXCIpLF9SPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1DTih0KTtyIGluIGU/TE4uZihlLHIseGooMCxuKSk6ZVtyXT1ufSxQUj1nai5BcnJheSxqUj1NYXRoLm1heCxOUj1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPXZJKGUpLG89cEkodCxyKSxpPXBJKHZvaWQgMD09PW4/cjpuLHIpLGE9UFIoalIoaS1vLDApKSx1PTA7bzxpO28rKyx1KyspX1IoYSx1LGVbb10pO3JldHVybiBhLmxlbmd0aD11LGF9LElSPXlMLlVOU1VQUE9SVEVEX1ksTFI9TWF0aC5taW4sUlI9W10ucHVzaCxNUj1CaigvLi8uZXhlYykselI9QmooUlIpLCRSPUJqKFwiXCIuc2xpY2UpO0pMKFwic3BsaXRcIiwoZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiByPVwiY1wiPT1cImFiYmNcIi5zcGxpdCgvKGIpKi8pWzFdfHw0IT1cInRlc3RcIi5zcGxpdCgvKD86KS8sLTEpLmxlbmd0aHx8MiE9XCJhYlwiLnNwbGl0KC8oPzphYikqLykubGVuZ3RofHw0IT1cIi5cIi5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGh8fFwiLlwiLnNwbGl0KC8oKSgpLykubGVuZ3RoPjF8fFwiXCIuc3BsaXQoLy4/LykubGVuZ3RoP2Z1bmN0aW9uKGUsbil7dmFyIHI9ZEwoTGoodGhpcykpLG89dm9pZCAwPT09bj80Mjk0OTY3Mjk1Om4+Pj4wO2lmKDA9PT1vKXJldHVybltdO2lmKHZvaWQgMD09PWUpcmV0dXJuW3JdO2lmKCFCUihlKSlyZXR1cm4gYmoodCxyLGUsbyk7Zm9yKHZhciBpLGEsdSxzPVtdLGw9KGUuaWdub3JlQ2FzZT9cImlcIjpcIlwiKSsoZS5tdWx0aWxpbmU/XCJtXCI6XCJcIikrKGUudW5pY29kZT9cInVcIjpcIlwiKSsoZS5zdGlja3k/XCJ5XCI6XCJcIiksYz0wLGY9bmV3IFJlZ0V4cChlLnNvdXJjZSxsK1wiZ1wiKTsoaT1iaihVTCxmLHIpKSYmISgoYT1mLmxhc3RJbmRleCk+YyYmKHpSKHMsJFIocixjLGkuaW5kZXgpKSxpLmxlbmd0aD4xJiZpLmluZGV4PHIubGVuZ3RoJiZZTChSUixzLE5SKGksMSkpLHU9aVswXS5sZW5ndGgsYz1hLHMubGVuZ3RoPj1vKSk7KWYubGFzdEluZGV4PT09aS5pbmRleCYmZi5sYXN0SW5kZXgrKztyZXR1cm4gYz09PXIubGVuZ3RoPyF1JiZNUihmLFwiXCIpfHx6UihzLFwiXCIpOnpSKHMsJFIocixjKSkscy5sZW5ndGg+bz9OUihzLDAsbyk6c306XCIwXCIuc3BsaXQodm9pZCAwLDApLmxlbmd0aD9mdW5jdGlvbihlLG4pe3JldHVybiB2b2lkIDA9PT1lJiYwPT09bj9bXTpiaih0LHRoaXMsZSxuKX06dCxbZnVuY3Rpb24odCxuKXt2YXIgbz1Maih0aGlzKSxpPW51bGw9PXQ/dm9pZCAwOm9OKHQsZSk7cmV0dXJuIGk/YmooaSx0LG8sbik6YmoocixkTChvKSx0LG4pfSxmdW5jdGlvbihlLG8pe3ZhciBpPWpOKHRoaXMpLGE9ZEwoZSksdT1uKHIsaSxhLG8sciE9PXQpO2lmKHUuZG9uZSlyZXR1cm4gdS52YWx1ZTt2YXIgcz1mdW5jdGlvbihlLHQpe3ZhciBuLHI9ak4oZSkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PXJ8fG51bGw9PShuPWpOKHIpW1RSXSk/dDpmdW5jdGlvbihlKXtpZihRSShlKSlyZXR1cm4gZTt0aHJvdyBGUih0TihlKStcIiBpcyBub3QgYSBjb25zdHJ1Y3RvclwiKX0obil9KGksUmVnRXhwKSxsPWkudW5pY29kZSxjPShpLmlnbm9yZUNhc2U/XCJpXCI6XCJcIikrKGkubXVsdGlsaW5lP1wibVwiOlwiXCIpKyhpLnVuaWNvZGU/XCJ1XCI6XCJcIikrKElSP1wiZ1wiOlwieVwiKSxmPW5ldyBzKElSP1wiXig/OlwiK2kuc291cmNlK1wiKVwiOmksYyksZD12b2lkIDA9PT1vPzQyOTQ5NjcyOTU6bz4+PjA7aWYoMD09PWQpcmV0dXJuW107aWYoMD09PWEubGVuZ3RoKXJldHVybiBudWxsPT09cFIoZixhKT9bYV06W107Zm9yKHZhciBwPTAsaD0wLGc9W107aDxhLmxlbmd0aDspe2YubGFzdEluZGV4PUlSPzA6aDt2YXIgdix5PXBSKGYsSVI/JFIoYSxoKTphKTtpZihudWxsPT09eXx8KHY9TFIoZ0koZi5sYXN0SW5kZXgrKElSP2g6MCkpLGEubGVuZ3RoKSk9PT1wKWg9b1IoYSxoLGwpO2Vsc2V7aWYoelIoZywkUihhLHAsaCkpLGcubGVuZ3RoPT09ZClyZXR1cm4gZztmb3IodmFyIG09MTttPD15Lmxlbmd0aC0xO20rKylpZih6UihnLHlbbV0pLGcubGVuZ3RoPT09ZClyZXR1cm4gZztoPXA9dn19cmV0dXJuIHpSKGcsJFIoYSxwKSksZ31dfSksISF2aigoZnVuY3Rpb24oKXt2YXIgZT0vKD86KS8sdD1lLmV4ZWM7ZS5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgbj1cImFiXCIuc3BsaXQoZSk7cmV0dXJuIDIhPT1uLmxlbmd0aHx8XCJhXCIhPT1uWzBdfHxcImJcIiE9PW5bMV19KSksSVIpO3ZhciBIUj1cIlxcdFxcblxcdlxcZlxcciDCoOGagOKAgOKAgeKAguKAg+KAhOKAheKAhuKAh+KAiOKAieKAiuKAr+KBn+OAgFxcdTIwMjhcXHUyMDI5XFx1ZmVmZlwiLFZSPUJqKFwiXCIucmVwbGFjZSksVVI9XCJbXCIrSFIrXCJdXCIsV1I9UmVnRXhwKFwiXlwiK1VSK1VSK1wiKlwiKSxHUj1SZWdFeHAoVVIrVVIrXCIqJFwiKSxxUj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49ZEwoTGoodCkpO3JldHVybiAxJmUmJihuPVZSKG4sV1IsXCJcIikpLDImZSYmKG49VlIobixHUixcIlwiKSksbn19LEtSPXtzdGFydDpxUigxKSxlbmQ6cVIoMiksdHJpbTpxUigzKX0sWVI9YUkuUFJPUEVSLFhSPUtSLnRyaW07ZnVuY3Rpb24gWlIoZSl7cmV0dXJuIDA9PT1NcChcIjxkaXY+XCIrZStcIjwvZGl2PlwiKS5jaGlsZHJlbigpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuXCJCUlwiIT09ZS50YWdOYW1lfSkpLmxlbmd0aH1mdW5jdGlvbiBKUihlKXtyZXR1cm4gMD09PWUubGVuZ3RoP1wiXCI6ZVswXS5vdXRlckhUTUx9ZnVuY3Rpb24gUVIoZSl7cmV0dXJuIGUubGVuZ3RoP2VbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpOlwiXCJ9ZnVuY3Rpb24gZU0oZSx0KXtmb3IodmFyIG49XCJcIixyPShlLmF0dHIoXCJzdHlsZVwiKXx8XCJcIikuc3BsaXQoXCI7XCIpLG89ci5sZW5ndGgsaT0wO2k8bztpKyspe3ZhciBhPXJbaV07aWYoYSl7dmFyIHU9YS5zcGxpdChcIjpcIik7dVswXS50cmltKCk9PT10JiYobj11WzFdLnRyaW0oKSl9fXJldHVybiBufUxJKHt0YXJnZXQ6XCJTdHJpbmdcIixwcm90bzohMCxmb3JjZWQ6KFwidHJpbVwiLHZqKChmdW5jdGlvbigpe3JldHVybiEhSFIudHJpbSgpfHxcIuKAi8KF4aCOXCIhPT1cIuKAi8KF4aCOXCIudHJpbSgpfHxZUiYmXCJ0cmltXCIhPT1IUi50cmltLm5hbWV9KSkpfSx7dHJpbTpmdW5jdGlvbigpe3JldHVybiBYUih0aGlzKX19KSxMSSh7Z2xvYmFsOiEwfSx7Z2xvYmFsVGhpczpnan0pLGVoJiYoTXAuZm4uY3NzPWVoKSxhaCYmKE1wLmZuLmFwcGVuZD1haCksdWgmJihNcC5mbi5wcmVwZW5kPXVoKSx6cCYmKE1wLmZuLmFkZENsYXNzPXpwKSwkcCYmKE1wLmZuLnJlbW92ZUNsYXNzPSRwKSxIcCYmKE1wLmZuLmhhc0NsYXNzPUhwKSxxcCYmKE1wLmZuLm9uPXFwKSxLcCYmKE1wLmZuLm9mZj1LcCkseWgmJihNcC5mbi5mb2N1cz15aCksVnAmJihNcC5mbi5hdHRyPVZwKSxVcCYmKE1wLmZuLnJlbW92ZUF0dHI9VXApLEpwJiYoTXAuZm4uaGlkZT1KcCksUXAmJihNcC5mbi5zaG93PVFwKSxsaCYmKE1wLmZuLnBhcmVudHM9bGgpLFdwJiYoTXAuZm4uZGF0YXNldD1XcCksR3AmJihNcC5mbi52YWw9R3ApLG9oJiYoTXAuZm4udGV4dD1vaCkscmgmJihNcC5mbi5odG1sPXJoKSxmaCYmKE1wLmZuLmNoaWxkcmVuPWZoKSxkaCYmKE1wLmZuLnJlbW92ZT1kaCksY2gmJihNcC5mbi5maW5kPWNoKSxZcCYmKE1wLmZuLndpZHRoPVlwKSxYcCYmKE1wLmZuLmhlaWdodD1YcCksbmgmJihNcC5mbi5maWx0ZXI9bmgpLHBoJiYoTXAuZm4uZW1wdHk9cGgpO3ZhciB0TT17c2VsZWN0b3I6XCJwOm5vdChbZGF0YS13LWUtdHlwZV0pXCIscGFyc2VFbGVtSHRtbDpmdW5jdGlvbihlLHQsbil7dmFyIHI9TXAoZSk7cmV0dXJuIDA9PT0odD10LmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuISFlZC5pc1RleHQoZSl8fCEhbi5pc0lubGluZShlKX0pKSkubGVuZ3RoJiYodD1be3RleHQ6ci50ZXh0KCkucmVwbGFjZSgvXFxzKy9nbSxcIiBcIil9XSkse3R5cGU6XCJwYXJhZ3JhcGhcIixjaGlsZHJlbjp0fX19LG5NPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5NPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0sbk0oZSx0KVxuLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovfTtmdW5jdGlvbiByTShlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiK1N0cmluZyh0KStcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9bk0oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9dmFyIG9NPWZ1bmN0aW9uKCl7cmV0dXJuIG9NPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW25dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0sb00uYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBpTShlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24obyxpKXtmdW5jdGlvbiBhKGUpe3RyeXtzKHIubmV4dChlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gdShlKXt0cnl7cyhyLnRocm93KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBzKGUpe3ZhciB0O2UuZG9uZT9vKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihhLHUpfXMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiBhTShlLHQpe3ZhciBuLHIsbyxpLGE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb1swXSl0aHJvdyBvWzFdO3JldHVybiBvWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGk9e25leHQ6dSgwKSx0aHJvdzp1KDEpLHJldHVybjp1KDIpfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGk7ZnVuY3Rpb24gdShpKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGZ1bmN0aW9uKGkpe2lmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDthOyl0cnl7aWYobj0xLHImJihvPTImaVswXT9yLnJldHVybjppWzBdP3IudGhyb3d8fCgobz1yLnJldHVybikmJm8uY2FsbChyKSwwKTpyLm5leHQpJiYhKG89by5jYWxsKHIsaVsxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKHI9MCxvJiYoaT1bMiZpWzBdLG8udmFsdWVdKSxpWzBdKXtjYXNlIDA6Y2FzZSAxOm89aTticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6aVsxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9aVsxXSxpPVswXTtjb250aW51ZTtjYXNlIDc6aT1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChvPShvPWEudHJ5cykubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pfHw2IT09aVswXSYmMiE9PWlbMF0pKXthPTA7Y29udGludWV9aWYoMz09PWlbMF0mJighb3x8aVsxXT5vWzBdJiZpWzFdPG9bM10pKXthLmxhYmVsPWlbMV07YnJlYWt9aWYoNj09PWlbMF0mJmEubGFiZWw8b1sxXSl7YS5sYWJlbD1vWzFdLG89aTticmVha31pZihvJiZhLmxhYmVsPG9bMl0pe2EubGFiZWw9b1syXSxhLm9wcy5wdXNoKGkpO2JyZWFrfW9bMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1pPXQuY2FsbChlLGEpfWNhdGNoKGUpe2k9WzYsZV0scj0wfWZpbmFsbHl7bj1vPTB9aWYoNSZpWzBdKXRocm93IGlbMV07cmV0dXJue3ZhbHVlOmlbMF0/aVsxXTp2b2lkIDAsZG9uZTohMH19KFtpLHVdKX19fWZ1bmN0aW9uIHVNKGUpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLG49dCYmZVt0XSxyPTA7aWYobilyZXR1cm4gbi5jYWxsKGUpO2lmKGUmJlwibnVtYmVyXCI9PXR5cGVvZiBlLmxlbmd0aClyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiBlJiZyPj1lLmxlbmd0aCYmKGU9dm9pZCAwKSx7dmFsdWU6ZSYmZVtyKytdLGRvbmU6IWV9fX07dGhyb3cgbmV3IFR5cGVFcnJvcih0P1wiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIjpcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIil9ZnVuY3Rpb24gc00oZSx0KXt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXTtpZighbilyZXR1cm4gZTt2YXIgcixvLGk9bi5jYWxsKGUpLGE9W107dHJ5e2Zvcig7KHZvaWQgMD09PXR8fHQtLSA+MCkmJiEocj1pLm5leHQoKSkuZG9uZTspYS5wdXNoKHIudmFsdWUpfWNhdGNoKGUpe289e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihuPWkucmV0dXJuKSYmbi5jYWxsKGkpfWZpbmFsbHl7aWYobyl0aHJvdyBvLmVycm9yfX1yZXR1cm4gYX1mdW5jdGlvbiBsTShlKXt2YXIgdD1zTShCZi5ub2RlcyhlLHttYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gZS5jaGlsZHJlblswXT09PXR9LG1vZGU6XCJoaWdoZXN0XCJ9KSwxKVswXTtpZihudWxsPT10KXJldHVybiExO3ZhciBuPXRbMF07aWYoIVNmLmlzRWxlbWVudChuKSlyZXR1cm4hMTtpZihcInBhcmFncmFwaFwiPT09bi50eXBlKXJldHVybiExO2lmKFwiXCIhPT1OZi5zdHJpbmcobikpcmV0dXJuITE7dmFyIHI9bi5jaGlsZHJlbixvPXZvaWQgMD09PXI/W106cjtyZXR1cm4hIWVkLmlzVGV4dChvWzBdKSYmKG1kLnNldE5vZGVzKGUse3R5cGU6XCJwYXJhZ3JhcGhcIn0pLCEwKX12YXIgY009e3JlbmRlckVsZW1zOltsal0sZWxlbXNUb0h0bWw6W3t0eXBlOlwicGFyYWdyYXBoXCIsZWxlbVRvSHRtbDpmdW5jdGlvbihlLHQpe3JldHVyblwiXCI9PT10P1wiPHA+PGJyPjwvcD5cIjpcIjxwPlwiK3QrXCI8L3A+XCJ9fV0scGFyc2VFbGVtc0h0bWw6W3RNXSxlZGl0b3JQbHVnaW46ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kZWxldGVCYWNrd2FyZCxuPWUuZGVsZXRlRm9yd2FyZDtlLmluc2VydFRleHQsZS5pbnNlcnRCcmVhazt2YXIgcj1lO3JldHVybiByLmRlbGV0ZUJhY2t3YXJkPWZ1bmN0aW9uKGUpe2xNKHIpfHx0KGUpfSxyLmRlbGV0ZUZvcndhcmQ9ZnVuY3Rpb24oZSl7bE0ocil8fG4oZSl9LHJ9fSxmTT0vXCIvZyxkTT1CaihcIlwiLnJlcGxhY2UpLHBNPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWRMKExqKGUpKSxpPVwiPFwiK3Q7cmV0dXJuXCJcIiE9PW4mJihpKz1cIiBcIituKyc9XCInK2RNKGRMKHIpLGZNLFwiJnF1b3Q7XCIpKydcIicpLGkrXCI+XCIrbytcIjwvXCIrdCtcIj5cIn0saE09ZnVuY3Rpb24oZSl7cmV0dXJuIHZqKChmdW5jdGlvbigpe3ZhciB0PVwiXCJbZV0oJ1wiJyk7cmV0dXJuIHQhPT10LnRvTG93ZXJDYXNlKCl8fHQuc3BsaXQoJ1wiJykubGVuZ3RoPjN9KSl9O2Z1bmN0aW9uIGdNKGUsdCl7dmFyIG49dCxyPWUsbz1yLmJvbGQsaT1yLml0YWxpYyxhPXIudW5kZXJsaW5lO3JldHVybiBvJiYobj1cIjxzdHJvbmc+XCIrbitcIjwvc3Ryb25nPlwiKSxyLmNvZGUmJihuPVwiPGNvZGU+XCIrbitcIjwvY29kZT5cIiksaSYmKG49XCI8ZW0+XCIrbitcIjwvZW0+XCIpLGEmJihuPVwiPHU+XCIrbitcIjwvdT5cIiksci50aHJvdWdoJiYobj1cIjxzPlwiK24rXCI8L3M+XCIpLHIuc3ViJiYobj1cIjxzdWI+XCIrbitcIjwvc3ViPlwiKSxyLnN1cCYmKG49XCI8c3VwPlwiK24rXCI8L3N1cD5cIiksbn1mdW5jdGlvbiB2TShlLHQpe3JldHVybiAwIT09ZS5sZW5ndGgmJighIWVbMF0ubWF0Y2hlcyh0KXx8ZS5maW5kKHQpLmxlbmd0aD4wKX1MSSh7dGFyZ2V0OlwiU3RyaW5nXCIscHJvdG86ITAsZm9yY2VkOmhNKFwiYm9sZFwiKX0se2JvbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gcE0odGhpcyxcImJcIixcIlwiLFwiXCIpfX0pLExJKHt0YXJnZXQ6XCJTdHJpbmdcIixwcm90bzohMCxmb3JjZWQ6aE0oXCJpdGFsaWNzXCIpfSx7aXRhbGljczpmdW5jdGlvbigpe3JldHVybiBwTSh0aGlzLFwiaVwiLFwiXCIsXCJcIil9fSksTEkoe3RhcmdldDpcIlN0cmluZ1wiLHByb3RvOiEwLGZvcmNlZDpoTShcInN1YlwiKX0se3N1YjpmdW5jdGlvbigpe3JldHVybiBwTSh0aGlzLFwic3ViXCIsXCJcIixcIlwiKX19KSxMSSh7dGFyZ2V0OlwiU3RyaW5nXCIscHJvdG86ITAsZm9yY2VkOmhNKFwic3VwXCIpfSx7c3VwOmZ1bmN0aW9uKCl7cmV0dXJuIHBNKHRoaXMsXCJzdXBcIixcIlwiLFwiXCIpfX0pO3ZhciB5TT17Q1NTUnVsZUxpc3Q6MCxDU1NTdHlsZURlY2xhcmF0aW9uOjAsQ1NTVmFsdWVMaXN0OjAsQ2xpZW50UmVjdExpc3Q6MCxET01SZWN0TGlzdDowLERPTVN0cmluZ0xpc3Q6MCxET01Ub2tlbkxpc3Q6MSxEYXRhVHJhbnNmZXJJdGVtTGlzdDowLEZpbGVMaXN0OjAsSFRNTEFsbENvbGxlY3Rpb246MCxIVE1MQ29sbGVjdGlvbjowLEhUTUxGb3JtRWxlbWVudDowLEhUTUxTZWxlY3RFbGVtZW50OjAsTWVkaWFMaXN0OjAsTWltZVR5cGVBcnJheTowLE5hbWVkTm9kZU1hcDowLE5vZGVMaXN0OjEsUGFpbnRSZXF1ZXN0TGlzdDowLFBsdWdpbjowLFBsdWdpbkFycmF5OjAsU1ZHTGVuZ3RoTGlzdDowLFNWR051bWJlckxpc3Q6MCxTVkdQYXRoU2VnTGlzdDowLFNWR1BvaW50TGlzdDowLFNWR1N0cmluZ0xpc3Q6MCxTVkdUcmFuc2Zvcm1MaXN0OjAsU291cmNlQnVmZmVyTGlzdDowLFN0eWxlU2hlZXRMaXN0OjAsVGV4dFRyYWNrQ3VlTGlzdDowLFRleHRUcmFja0xpc3Q6MCxUb3VjaExpc3Q6MH0sbU09a04oXCJzcGFuXCIpLmNsYXNzTGlzdCxiTT1tTSYmbU0uY29uc3RydWN0b3ImJm1NLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx3TT1iTT09PU9iamVjdC5wcm90b3R5cGU/dm9pZCAwOmJNLEVNPWZ1bmN0aW9uKGUsdCl7dmFyIG49W11bZV07cmV0dXJuISFuJiZ2aigoZnVuY3Rpb24oKXtuLmNhbGwobnVsbCx0fHxmdW5jdGlvbigpe3Rocm93IDF9LDEpfSkpfSxETT1pTC5mb3JFYWNoLFNNPUVNKFwiZm9yRWFjaFwiKT9bXS5mb3JFYWNoOmZ1bmN0aW9uKGUpe3JldHVybiBETSh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSx4TT1mdW5jdGlvbihlKXtpZihlJiZlLmZvckVhY2ghPT1TTSl0cnl7Uk4oZSxcImZvckVhY2hcIixTTSl9Y2F0Y2godCl7ZS5mb3JFYWNoPVNNfX07Zm9yKHZhciBDTSBpbiB5TSl5TVtDTV0mJnhNKGdqW0NNXSYmZ2pbQ01dLnByb3RvdHlwZSk7ZnVuY3Rpb24gQU0oZSx0KXtyZXR1cm4gbnVsbD09ZS5zZWxlY3Rpb258fCEhc00oQmYubm9kZXMoZSx7bWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuXCJwcmVcIj09PVFPLmdldE5vZGVUeXBlKHQpfHwhIUJmLmlzVm9pZChlLHQpfSx1bml2ZXJzYWw6ITB9KSwxKVswXX1mdW5jdGlvbiBPTShlLHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe1widGV4dFwiIT09dCYmQmYucmVtb3ZlTWFyayhlLHQpfSkpfXhNKHdNKSxMSSh7dGFyZ2V0OlwiT2JqZWN0XCIsc3RhdDohMCxmb3JjZWQ6dmooKGZ1bmN0aW9uKCl7bUwoMSl9KSl9LHtrZXlzOmZ1bmN0aW9uKGUpe3JldHVybiBtTChmTihlKSl9fSk7dmFyIGtNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWFya3NOZWVkVG9SZW1vdmU9W10sdGhpcy50YWc9XCJidXR0b25cIn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tYXJrLG49QmYubWFya3MoZSk7cmV0dXJuIG4/blt0XTohIXNNKEJmLm5vZGVzKGUse21hdGNoOmZ1bmN0aW9uKGUpe3JldHVybiEwPT09ZVt0XX19KSwxKVswXX0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuISF0aGlzLmdldFZhbHVlKGUpfSxlLnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKGUpe3JldHVybiBBTShlLHRoaXMubWFyayl9LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLm1hcmsscj10aGlzLm1hcmtzTmVlZFRvUmVtb3ZlO3Q/ZS5yZW1vdmVNYXJrKG4pOihlLmFkZE1hcmsobiwhMCksciYmci5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gZS5yZW1vdmVNYXJrKHQpfSkpKX0sZX0oKSxCTT0nPHN2ZyB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiPjxwYXRoIGQ9XCJNNzA3Ljg3MiA0ODQuNjRBMjU0Ljg4IDI1NC44OCAwIDAgMCA3NjggMzIwYzAtMTQxLjE1Mi0xMTQuODQ4LTI1Ni0yNTYtMjU2SDE5MnY4OTZoMzg0YzE0MS4xNTIgMCAyNTYtMTE0Ljg0OCAyNTYtMjU2YTI1Ni4wOTYgMjU2LjA5NiAwIDAgMC0xMjQuMTI4LTIxOS4zNnpNMzg0IDE5MmgxMDEuNTA0YzU1Ljk2OCAwIDEwMS41MDQgNTcuNDA4IDEwMS41MDQgMTI4cy00NS41MzYgMTI4LTEwMS41MDQgMTI4SDM4NFYxOTJ6IG0xNTkuMDA4IDY0MEgzODR2LTI1NmgxNTkuMDA4YzU4LjQ2NCAwIDEwNi4wMTYgNTcuNDA4IDEwNi4wMTYgMTI4cy00Ny41NTIgMTI4LTEwNi4wMTYgMTI4elwiPjwvcGF0aD48L3N2Zz4nLEZNPSc8c3ZnIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCI+PHBhdGggZD1cIk03MDQgNjRsMTI4IDAgMCA0MTZjMCAxNTkuMDcyLTE0My4yNjQgMjg4LTMyMCAyODhzLTMyMC0xMjguOTI4LTMyMC0yODhsMC00MTYgMTI4IDAgMCA0MTZjMCA0MC4xNiAxOC4yNCA3OC42ODggNTEuMzYgMTA4LjUxMiAzNi44OTYgMzMuMjE2IDg2Ljg0OCA1MS40ODggMTQwLjY0IDUxLjQ4OHMxMDMuNzQ0LTE4LjMwNCAxNDAuNjQtNTEuNDg4YzMzLjEyLTI5Ljc5MiA1MS4zNi02OC4zNTIgNTEuMzYtMTA4LjUxMmwwLTQxNnpNMTkyIDgzMmw2NDAgMCAwIDEyOC02NDAgMHpcIj48L3BhdGg+PC9zdmc+JyxUTT0nPHN2ZyB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiPjxwYXRoIGQ9XCJNODk2IDY0djY0aC0xMjhMNDQ4IDg5NmgxMjh2NjRIMTI4di02NGgxMjhMNTc2IDEyOGgtMTI4VjY0elwiPjwvcGF0aD48L3N2Zz4nLF9NPSc8c3ZnIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCI+PHBhdGggZD1cIk0xMDI0IDUxMnY2NGgtMjM0LjQ5NmMyNy41MiAzOC40OTYgNDIuNDk2IDgyLjY4OCA0Mi40OTYgMTI4IDAgNzAuODgtMzYuNjcyIDEzOS4wNC0xMDAuNTc2IDE4Ni45NzZDNjcyLjA2NCA5MzUuNDg4IDU5NC4xNDQgOTYwIDUxMiA5NjBzLTE2MC4wNjQtMjQuNTEyLTIxOS40MjQtNjkuMDI0QzIyOC42NCA4NDMuMDQgMTkyIDc3NC44OCAxOTIgNzA0aDEyOGMwIDY5LjM3NiA4Ny45MzYgMTI4IDE5MiAxMjhzMTkyLTU4LjYyNCAxOTItMTI4LTg3LjkzNi0xMjgtMTkyLTEyOEgwdi02NGgyOTkuNTJhMzg1Ljk4NCAzODUuOTg0IDAgMCAxLTYuOTQ0LTUuMDI0QzIyOC42NCA0NTkuMDQgMTkyIDM5MC44OCAxOTIgMzIwczM2LjY3Mi0xMzkuMDQgMTAwLjU3Ni0xODYuOTc2QzM1MS45MzYgODguNTEyIDQyOS44NTYgNjQgNTEyIDY0czE2MC4wNjQgMjQuNTEyIDIxOS40MjQgNjkuMDI0Qzc5NS4zMjggMTgwLjk2IDgzMiAyNDkuMTIgODMyIDMyMGgtMTI4YzAtNjkuMzc2LTg3LjkzNi0xMjgtMTkyLTEyOHMtMTkyIDU4LjYyNC0xOTIgMTI4IDg3LjkzNiAxMjggMTkyIDEyOGM3OC45NzYgMCAxNTQuMDQ4IDIyLjY4OCAyMTIuNDggNjRIMTAyNHpcIj48L3BhdGg+PC9zdmc+JyxQTT0nPHN2ZyB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiPjxwYXRoIGQ9XCJNNTc2IDczNmw5NiA5NiAzMjAtMzIwTDY3MiAxOTJsLTk2IDk2IDIyNCAyMjR6TTQ0OCAyODhsLTk2LTk2TDMyIDUxMmwzMjAgMzIwIDk2LTk2LTIyNC0yMjR6XCI+PC9wYXRoPjwvc3ZnPicsak09Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTg2NCAwYTE2MCAxNjAgMCAwIDEgMTI4IDI1NmwtNjQgNjQtMjI0LTIyNCA2NC02NGMyNi43NTItMjAuMDk2IDU5Ljk2OC0zMiA5Ni0zMnpNNjQgNzM2bC02NCAyODggMjg4LTY0IDU5Mi01OTItMjI0LTIyNEw2NCA3MzZ6IG02NTEuNTg0LTM3Mi40MTZsLTQ0OCA0NDgtNTUuMTY4LTU1LjE2OCA0NDgtNDQ4IDU1LjE2OCA1NS4xNjh6XCI+PC9wYXRoPjwvc3ZnPicsTk09Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTkyNC40MDI0NjQgMTAyMy4wNjgyMTFIMC42Nzk2NjVWOTkuMzQ1NDEyaDQ2MS44NjEzOTl2OTguOTA5MjA4SDk5LjU5Njg2N3Y3MjUuODk2Mzg5aDcyNS44OTYzODlWNTYxLjIwNjgxMWg5OC45MDkyMDh6XCIgcC1pZD1cIjEwOTA5XCI+PC9wYXRoPjxwYXRoIGQ9XCJNOTMwLjgwNTEwNCAyMi45NzczMzZsNjkuOTY1NDM2IDY5Ljk2NTQzNi00NTMuNDkyNDA1IDQ1My40OTI0MDQtNjkuOTY1NDM1LTY5LjkwMTQ4OXpcIiBwLWlkPVwiMTA5MTBcIj48L3BhdGg+PHBhdGggZD1cIk0xMDIyLjQ2NDM4MSAzMDQuMDMwMDgxaC05OC45MTcyMDFWOTkuMzQ1NDEySDcwOS4yMzA1NzNWMC40MjgyMTFoMzEzLjIzMzgwOHpcIj48L3BhdGg+PC9zdmc+JyxJTT0nPHN2ZyB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiPjxwYXRoIGQ9XCJNNjQgODY0aDg5NnY5Nkg2NHpNMzYwLjU4IDU3NmgzMDIuODVsODEuNTMgMjI0aDEwMi4xNkw1NzkuMjQgNjRINDQ0Ljc3TDE3Ni44OSA4MDBoMTAyLjE2bDgxLjUzLTIyNHpNNTEyIDE1OS45Nkw2MjguNDkgNDgwSDM5NS41Mkw1MTIgMTU5Ljk2elwiPjwvcGF0aD48L3N2Zz4nLExNPSc8c3ZnIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCI+PHBhdGggZD1cIk01MTAuMDMwNzY5IDMxNS4wNzY5MjNsODQuNjc2OTIzIDE5Ni45MjMwNzdoLTE3Ny4yMzA3NjlsNzYuOC0xOTYuOTIzMDc3aDE1Ljc1Mzg0NnpNOTQ1LjIzMDc2OSAxNTcuNTM4NDYydjcwOC45MjMwNzZjMCA0My4zMjMwNzctMzUuNDQ2MTU0IDc4Ljc2OTIzMS03OC43NjkyMzEgNzguNzY5MjMxSDE1Ny41Mzg0NjJjLTQzLjMyMzA3NyAwLTc4Ljc2OTIzMS0zNS40NDYxNTQtNzguNzY5MjMxLTc4Ljc2OTIzMVYxNTcuNTM4NDYyYzAtNDMuMzIzMDc3IDM1LjQ0NjE1NC03OC43NjkyMzEgNzguNzY5MjMxLTc4Ljc2OTIzMWg3MDguOTIzMDc2YzQzLjMyMzA3NyAwIDc4Ljc2OTIzMSAzNS40NDYxNTQgNzguNzY5MjMxIDc4Ljc2OTIzMXogbS0xMDguMzA3NjkyIDY0My45Mzg0NjFMNjAwLjYxNTM4NSAyMTYuNjE1Mzg1Yy01LjkwNzY5Mi0xMS44MTUzODUtMTUuNzUzODQ2LTE5LjY5MjMwOC0yOS41Mzg0NjItMTkuNjkyMzA4aC0xMzkuODE1Mzg1Yy0xMS44MTUzODUgMC0yMy42MzA3NjkgNy44NzY5MjMtMjcuNTY5MjMgMTkuNjkyMzA4bC0yMTYuNjE1Mzg1IDU4NC44NjE1MzhjLTMuOTM4NDYyIDExLjgxNTM4NSAzLjkzODQ2MiAyNS42IDE3LjcyMzA3NyAyNS42aDgwLjczODQ2MmMxMS44MTUzODUgMCAyMy42MzA3NjktOS44NDYxNTQgMjcuNTY5MjMtMjEuNjYxNTM4bDYzLjAxNTM4NS0xNzUuMjYxNTM5aDI2My44NzY5MjNsNjguOTIzMDc3IDE3NS4yNjE1MzljMy45Mzg0NjIgMTEuODE1Mzg1IDE1Ljc1Mzg0NiAyMS42NjE1MzggMjcuNTY5MjMxIDIxLjY2MTUzOGg4MC43Mzg0NjFjMTMuNzg0NjE1IDAgMjMuNjMwNzY5LTEzLjc4NDYxNSAxOS42OTIzMDgtMjUuNnpcIj48L3BhdGg+PC9zdmc+JyxSTT0nPHN2ZyB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiPjxwYXRoIGQ9XCJNNjQgNTEyaDM4NHYxMjhoLTEyOFYxMDI0aC0xMjhWNjQwaC0xMjh6IG04OTYtMjU2SDcwOC4yNDk2djc2OGgtMTM2LjQ5OTJWMjU2SDMyMFYxMjhoNjQwelwiPjwvcGF0aD48L3N2Zz4nLE1NPSc8c3ZnIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCI+PHBhdGggZD1cIk05NTYuNzg4MzY0IDE1Mi4xMTA1NDVoLTI0LjExMDU0NmwyMy45MjQzNjQgOS4wMjk4MTkgMC4xODYxODIgMTIxLjAxODE4MWgtNjUuMDcwNTQ2bC04Ni41NzQ1NDUtMTMwLjA0OEg1NjYuNTUxMjczdjY1MC4xNDY5MWwxMzAuMDQ4IDY0Ljk3NzQ1NHY2NS4xNjM2MzZoLTM5MC4wNTA5MDl2LTY1LjE2MzYzNmwxMjkuOTU0OTA5LTY0Ljk3NzQ1NFYxNTIuMTEwNTQ1SDE5OC4yODM2MzZMMTExLjQyOTgxOCAyODIuMDY1NDU1SDQ2LjU0NTQ1NVY2OS4yNTk2MzZDNDYuNTQ1NDU1IDMzLjc5MiA4Mi42NjQ3MjcgMjIuMDYyNTQ1IDk4Ljk1NTYzNiAyMi4wNjI1NDVoODEyLjY4MzYzN2MyMy43MzgxODIgMCA0NS4wNTYgMTUuMTczODE4IDQ1LjA1NiA0MS4wNTMwOTFWMTY5LjQyNTQ1NXYtMTcuMjIxODE5elwiPjwvcGF0aD48L3N2Zz4nLHpNPSc8c3ZnIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCI+PHBhdGggZD1cIk0wIDY0aDEwMjR2MTI4SDB6IG0zODQgMTkyaDY0MHYxMjhIMzg0eiBtMCAxOTJoNjQwdjEyOEgzODR6IG0wIDE5Mmg2NDB2MTI4SDM4NHpNMCA4MzJoMTAyNHYxMjhIMHogbTI1Ni01MTJ2Mzg0bC0yNTYtMTkyelwiPjwvcGF0aD48L3N2Zz4nLCRNPSc8c3ZnIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCI+PHBhdGggZD1cIk0wIDY0aDEwMjR2MTI4SDB6IG0zODQgMTkyaDY0MHYxMjhIMzg0eiBtMCAxOTJoNjQwdjEyOEgzODR6IG0wIDE5Mmg2NDB2MTI4SDM4NHpNMCA4MzJoMTAyNHYxMjhIMHogbTAtMTI4VjMyMGwyNTYgMTkyelwiPjwvcGF0aD48L3N2Zz4nLEhNPSc8c3ZnIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCI+PHBhdGggZD1cIk03NjggNzkzLjZ2MTAyLjRINTEuMnYtMTAyLjRoNzE2Ljh6IG0yMDQuOC0yMzAuNHYxMDIuNEg1MS4ydi0xMDIuNGg5MjEuNnogbS0yMDQuOC0yMzAuNHYxMDIuNEg1MS4ydi0xMDIuNGg3MTYuOHpNOTcyLjggMTAyLjR2MTAyLjRINTEuMlYxMDIuNGg5MjEuNnpcIj48L3BhdGg+PC9zdmc+JyxWTT0nPHN2ZyB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiPjxwYXRoIGQ9XCJNOTcyLjggNzkzLjZ2MTAyLjRIMjU2di0xMDIuNGg3MTYuOHogbTAtMjMwLjR2MTAyLjRINTEuMnYtMTAyLjRoOTIxLjZ6IG0wLTIzMC40djEwMi40SDI1NnYtMTAyLjRoNzE2Ljh6TTk3Mi44IDEwMi40djEwMi40SDUxLjJWMTAyLjRoOTIxLjZ6XCI+PC9wYXRoPjwvc3ZnPicsVU09Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTg3MC40IDc5My42djEwMi40SDE1My42di0xMDIuNGg3MTYuOHogbTEwMi40LTIzMC40djEwMi40SDUxLjJ2LTEwMi40aDkyMS42eiBtLTEwMi40LTIzMC40djEwMi40SDE1My42di0xMDIuNGg3MTYuOHpNOTcyLjggMTAyLjR2MTAyLjRINTEuMlYxMDIuNGg5MjEuNnpcIj48L3BhdGg+PC9zdmc+JyxXTT0nPHN2ZyB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiPjxwYXRoIGQ9XCJNMCA2NGgxMDI0djEyOEgweiBtMCAxOTJoMTAyNHYxMjhIMHogbTAgMTkyaDEwMjR2MTI4SDB6IG0wIDE5MmgxMDI0djEyOEgweiBtMCAxOTJoMTAyNHYxMjhIMHpcIj48L3BhdGg+PC9zdmc+JyxHTT0nPHN2ZyB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiPjxwYXRoIGQ9XCJNNzY4IDIwNi4wMTZ2NTAuMDE2aDEyOHY2NGgtMTkyVjE3NC4wMTZsMTI4LTYwVjY0aC0xMjhWMGgxOTJ2MTQ2LjAxNnpNNjc2IDI1NmgtMTM2TDM1MiA0NDQgMTY0IDI1NkgyOGwyNTYgMjU2LTI1NiAyNTZoMTM2TDM1MiA1ODAgNTQwIDc2OGgxMzZsLTI1Ni0yNTZ6XCI+PC9wYXRoPjwvc3ZnPicscU09Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTc2OCA5MTAuMDE2djUwLjAxNmgxMjh2NjRoLTE5MnYtMTQ2LjAxNmwxMjgtNjBWNzY4aC0xMjh2LTY0aDE5MnYxNDYuMDE2ek02NzYgMjU2aC0xMzZMMzUyIDQ0NCAxNjQgMjU2SDI4bDI1NiAyNTYtMjU2IDI1NmgxMzZMMzUyIDU4MCA1NDAgNzY4aDEzNmwtMjU2LTI1NnpcIj48L3BhdGg+PC9zdmc+JyxLTT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0Lm1hcms9XCJib2xkXCIsdC50aXRsZT1IUChcInRleHRTdHlsZS5ib2xkXCIpLHQuaWNvblN2Zz1CTSx0LmhvdGtleT1cIm1vZCtiXCIsdH1yZXR1cm4gck0odCxlKSx0fShrTSksWU09ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5tYXJrPVwiY29kZVwiLHQudGl0bGU9SFAoXCJ0ZXh0U3R5bGUuY29kZVwiKSx0Lmljb25Tdmc9UE0sdC5ob3RrZXk9XCJtb2QrZVwiLHR9cmV0dXJuIHJNKHQsZSksdH0oa00pLFhNPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQubWFyaz1cIml0YWxpY1wiLHQudGl0bGU9SFAoXCJ0ZXh0U3R5bGUuaXRhbGljXCIpLHQuaWNvblN2Zz1UTSx0LmhvdGtleT1cIm1vZCtpXCIsdH1yZXR1cm4gck0odCxlKSx0fShrTSksWk09ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5tYXJrPVwidGhyb3VnaFwiLHQudGl0bGU9SFAoXCJ0ZXh0U3R5bGUudGhyb3VnaFwiKSx0Lmljb25Tdmc9X00sdC5ob3RrZXk9XCJtb2Qrc2hpZnQreFwiLHR9cmV0dXJuIHJNKHQsZSksdH0oa00pLEpNPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQubWFyaz1cInVuZGVybGluZVwiLHQudGl0bGU9SFAoXCJ0ZXh0U3R5bGUudW5kZXJsaW5lXCIpLHQuaWNvblN2Zz1GTSx0LmhvdGtleT1cIm1vZCt1XCIsdH1yZXR1cm4gck0odCxlKSx0fShrTSksUU09ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5tYXJrPVwic3ViXCIsdC5tYXJrc05lZWRUb1JlbW92ZT1bXCJzdXBcIl0sdC50aXRsZT1IUChcInRleHRTdHlsZS5zdWJcIiksdC5pY29uU3ZnPXFNLHQuaG90a2V5PVwiXCIsdH1yZXR1cm4gck0odCxlKSx0fShrTSksZXo9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5tYXJrPVwic3VwXCIsdC5tYXJrc05lZWRUb1JlbW92ZT1bXCJzdWJcIl0sdC50aXRsZT1IUChcInRleHRTdHlsZS5zdXBcIiksdC5pY29uU3ZnPUdNLHQuaG90a2V5PVwiXCIsdH1yZXR1cm4gck0odCxlKSx0fShrTSksdHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50aXRsZT1IUChcInRleHRTdHlsZS5jbGVhclwiKSx0aGlzLmljb25Tdmc9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTk2OS4zODI0MDggMjg4LjczODYxNWwtMzE5LjQwMTEyMy0yNzAuODUyMTUyYTY3LjA3NDIzNiA2Ny4wNzQyMzYgMCAwIDAtOTYuNDU5MTM5IDUuNzQ5MjJsLTUwNS45MzEzNzkgNTc0LjkyMjAyMWE2OC4zNTE4NCA2OC4zNTE4NCAwIDAgMC0xNy44ODY0NjMgNDcuOTEwMTY5IDc0LjEwMTA2MSA3NC4xMDEwNjEgMCAwIDAgMjQuMjc0NDg2IDQ3LjkxMDE2OGwxNTYuNTA2NTUgMTMyLjIzMjA2NWgzNzMuMDYwNTEyTDk3NS4xMzE2MjggMzgzLjI4MTM0N2E2Ny4wNzQyMzYgNjcuMDc0MjM2IDAgMCAwLTUuNzQ5MjItOTYuNDU5MTM5eiBtLTQ0MC4xMzQ3NDcgNDMzLjc0NjcyNUgyNjQuMTQ0NzI5bC05MC4wNzExMTctNzguNTcyNjc2Yy01Ljc0OTIyLTUuNzQ5MjItMTIuMTM3MjQzLTEyLjEzNzI0My0xMi4xMzcyNDMtMTcuODg2NDYzYTM2LjQxMTcyOCAzNi40MTE3MjggMCAwIDEgNS43NDkyMjEtMjQuMjc0NDg1bDIxMC44MDQ3NDEtMjQwLjgyODQ0NyAyNjUuMTAyOTMyIDIyOC42OTEyMDR6IG0tNDM5LjQ5NTk0NSAxODAuNzgxMDM2aDg0My4yMTg5NjRhNjAuMDQ3NDExIDYwLjA0NzQxMSAwIDEgMSAwIDEyMC43MzM2MjRIODkuNzUxNzE2YTYwLjA0NzQxMSA2MC4wNDc0MTEgMCAxIDEgMC0xMjAuNzMzNjI0eiBtMCAwXCI+PC9wYXRoPjwvc3ZnPicsdGhpcy50YWc9XCJidXR0b25cIn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEFNKGUpfSxlLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPUJmLm5vZGVzKGUse21hdGNoOmZ1bmN0aW9uKGUpe3JldHVybiBlZC5pc1RleHQoZSl9LHVuaXZlcnNhbDohMH0pO3RyeXtmb3IodmFyIGk9dU0obyksYT1pLm5leHQoKTshYS5kb25lO2E9aS5uZXh0KCkpT00oZSxhLnZhbHVlWzBdKX1jYXRjaChlKXtuPXtlcnJvcjplfX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYocj1pLnJldHVybikmJnIuY2FsbChpKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19fSxlfSgpLG56PXtyZW5kZXJTdHlsZTpmdW5jdGlvbihlLHQpe3ZhciBuPWUscj1uLmJvbGQsbz1uLml0YWxpYyxpPW4udW5kZXJsaW5lLGE9bi5jb2RlLHU9bi50aHJvdWdoLHM9bi5zdWIsbD1uLnN1cCxjPXQ7cmV0dXJuIHImJihjPVBnKFwic3Ryb25nXCIsbnVsbCxjKSksYSYmKGM9UGcoXCJjb2RlXCIsbnVsbCxjKSksbyYmKGM9UGcoXCJlbVwiLG51bGwsYykpLGkmJihjPVBnKFwidVwiLG51bGwsYykpLHUmJihjPVBnKFwic1wiLG51bGwsYykpLHMmJihjPVBnKFwic3ViXCIsbnVsbCxjKSksbCYmKGM9UGcoXCJzdXBcIixudWxsLGMpKSxjfSxtZW51czpbe2tleTpcImJvbGRcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLTX19LHtrZXk6XCJ1bmRlcmxpbmVcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKTX19LHtrZXk6XCJpdGFsaWNcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYTX19LHtrZXk6XCJ0aHJvdWdoXCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgWk19fSx7a2V5OlwiY29kZVwiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFlNfX0se2tleTpcInN1YlwiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFFNfX0se2tleTpcInN1cFwiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGV6fX0se2tleTpcImNsZWFyU3R5bGVcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0en19XSxzdHlsZVRvSHRtbDpmdW5jdGlvbihlLHQpe2lmKCFlZC5pc1RleHQoZSkpcmV0dXJuIHQ7aWYoWlIodCkpcmV0dXJuIGdNKGUsdCk7dmFyIG49TXAodCk7aWYoXCJiclwiPT09UVIobikpcmV0dXJuIGdNKGUsXCI8YnI+XCIpO3ZhciByPW4uaHRtbCgpO3JldHVybiByPWdNKGUsciksbi5odG1sKHIpLEpSKG4pfSxwYXJzZVN0eWxlSHRtbDpmdW5jdGlvbihlLHQsbil7dmFyIHI9TXAoZSk7aWYoIWVkLmlzVGV4dCh0KSlyZXR1cm4gdDt2YXIgbz10O3JldHVybiB2TShyLFwiYixzdHJvbmdcIikmJihvLmJvbGQ9ITApLHZNKHIsXCJpLGVtXCIpJiYoby5pdGFsaWM9ITApLHZNKHIsXCJ1XCIpJiYoby51bmRlcmxpbmU9ITApLHZNKHIsXCJzLHN0cmlrZVwiKSYmKG8udGhyb3VnaD0hMCksdk0ocixcInN1YlwiKSYmKG8uc3ViPSEwKSx2TShyLFwic3VwXCIpJiYoby5zdXA9ITApLHZNKHIsXCJjb2RlXCIpJiYoby5jb2RlPSEwKSxvfX07ZnVuY3Rpb24gcnooZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gUGcoXCJoXCIrZSxudWxsLG4pfX12YXIgb3o9e3R5cGU6XCJoZWFkZXIxXCIscmVuZGVyRWxlbTpyeigxKX0saXo9e3R5cGU6XCJoZWFkZXIyXCIscmVuZGVyRWxlbTpyeigyKX0sYXo9e3R5cGU6XCJoZWFkZXIzXCIscmVuZGVyRWxlbTpyeigzKX0sdXo9e3R5cGU6XCJoZWFkZXI0XCIscmVuZGVyRWxlbTpyeig0KX0sc3o9e3R5cGU6XCJoZWFkZXI1XCIscmVuZGVyRWxlbTpyeig1KX0sbHo9YUkuUFJPUEVSLGN6PVJlZ0V4cC5wcm90b3R5cGUsZno9Y3oudG9TdHJpbmcsZHo9QmoocEwpLHB6PXZqKChmdW5jdGlvbigpe3JldHVyblwiL2EvYlwiIT1mei5jYWxsKHtzb3VyY2U6XCJhXCIsZmxhZ3M6XCJiXCJ9KX0pKSxoej1seiYmXCJ0b1N0cmluZ1wiIT1mei5uYW1lOyhwenx8aHopJiZ1SShSZWdFeHAucHJvdG90eXBlLFwidG9TdHJpbmdcIiwoZnVuY3Rpb24oKXt2YXIgZT1qTih0aGlzKSx0PWRMKGUuc291cmNlKSxuPWUuZmxhZ3M7cmV0dXJuXCIvXCIrdCtcIi9cIitkTCh2b2lkIDA9PT1uJiZWaihjeixlKSYmIShcImZsYWdzXCJpbiBjeik/ZHooZSk6bil9KSx7dW5zYWZlOiEwfSk7dmFyIGd6LHZ6PWdqLlR5cGVFcnJvcix5ej1mdW5jdGlvbihlKXtpZihCUihlKSl0aHJvdyB2eihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtyZXR1cm4gZX0sbXo9RE4oXCJtYXRjaFwiKSxiej1mdW5jdGlvbihlKXt2YXIgdD0vLi87dHJ5e1wiLy4vXCJbZV0odCl9Y2F0Y2gobil7dHJ5e3JldHVybiB0W216XT0hMSxcIi8uL1wiW2VdKHQpfWNhdGNoKGUpe319cmV0dXJuITF9LHd6PVROLmYsRXo9QmooXCJcIi5zdGFydHNXaXRoKSxEej1CaihcIlwiLnNsaWNlKSxTej1NYXRoLm1pbix4ej1ieihcInN0YXJ0c1dpdGhcIik7ZnVuY3Rpb24gQ3ooZSl7dmFyIHQ9c00oQmYubm9kZXMoZSx7bWF0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFFPLmdldE5vZGVUeXBlKGUpLnN0YXJ0c1dpdGgoXCJoZWFkZXJcIil9LHVuaXZlcnNhbDohMH0pLDEpLG49dFswXTtpZihudWxsPT1uKXJldHVyblwicGFyYWdyYXBoXCI7dmFyIHI9c00obiwxKVswXTtyZXR1cm4gUU8uZ2V0Tm9kZVR5cGUocil9ZnVuY3Rpb24gQXooZSl7cmV0dXJuIG51bGw9PWUuc2VsZWN0aW9ufHwhc00oQmYubm9kZXMoZSx7bWF0Y2g6ZnVuY3Rpb24oZSl7dmFyIHQ9UU8uZ2V0Tm9kZVR5cGUoZSk7cmV0dXJuXCJwYXJhZ3JhcGhcIj09PXR8fCEhdC5zdGFydHNXaXRoKFwiaGVhZGVyXCIpfSx1bml2ZXJzYWw6ITAsbW9kZTpcImhpZ2hlc3RcIn0pLDEpWzBdfWZ1bmN0aW9uIE96KGUsdCl7dCYmbWQuc2V0Tm9kZXMoZSx7dHlwZTp0fSl9TEkoe3RhcmdldDpcIlN0cmluZ1wiLHByb3RvOiEwLGZvcmNlZDohKCF4eiYmKGd6PXd6KFN0cmluZy5wcm90b3R5cGUsXCJzdGFydHNXaXRoXCIpLGd6JiYhZ3oud3JpdGFibGUpfHx4eil9LHtzdGFydHNXaXRoOmZ1bmN0aW9uKGUpe3ZhciB0PWRMKExqKHRoaXMpKTt5eihlKTt2YXIgbj1nSShTeihhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx0Lmxlbmd0aCkpLHI9ZEwoZSk7cmV0dXJuIEV6P0V6KHQscixuKTpEeih0LG4sbityLmxlbmd0aCk9PT1yfX0pO3ZhciBrej1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnRpdGxlPUhQKFwiaGVhZGVyLnRpdGxlXCIpLHRoaXMuaWNvblN2Zz0nPHN2ZyB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiPjxwYXRoIGQ9XCJNOTYwIDk2MGMtNTEuMiAwLTEwMi40LTMuMi0xNTMuNi0zLjItNTEuMiAwLTk5LjIgMy4yLTE1MC40IDMuMi0xOS4yIDAtMjguOC0yMi40LTI4LjgtMzguNCAwLTUxLjIgNTcuNi0yOC44IDg2LjQtNDggMTkuMi0xMi44IDE5LjItNjAuOCAxOS4yLTgwdi0yMjQtMTkuMmMtOS42LTMuMi0xOS4yLTMuMi0yOC44LTMuMkgzMjBjLTkuNiAwLTE5LjIgMC0yOC44IDMuMlY3ODAuOGMwIDIyLjQgMCA4MCAyMi40IDkyLjggMjguOCAxOS4yIDk2LTYuNCA5NiA0NC44IDAgMTYtOS42IDQxLjYtMjguOCA0MS42LTU0LjQgMC0xMDUuNi0zLjItMTYwLTMuMi00OCAwLTk2IDMuMi0xNDcuMiAzLjItMTkuMiAwLTI4LjgtMjIuNC0yOC44LTM4LjQgMC01MS4yIDUxLjItMjguOCA4MC00OCAxOS4yLTEyLjggMTkuMi02MC44IDE5LjItODMuMlYyOTQuNGMwLTI4LjggMy4yLTExNS4yLTIyLjQtMTMxLjItMjUuNi0xNi04Ni40IDkuNi04Ni40LTQxLjYgMC0xNiA2LjQtNDEuNiAyOC44LTQxLjYgNTEuMiAwIDEwNS42IDMuMiAxNTYuOCAzLjIgNDggMCA5Ni0zLjIgMTQ0LTMuMiAxOS4yIDAgMjguOCAyMi40IDI4LjggNDEuNiAwIDQ4LTU3LjYgMjUuNi04My4yIDQxLjYtMTkuMiAxMi44LTE5LjIgNzMuNi0xOS4yIDkyLjh2MjAxLjZjNi40IDMuMiAxNiAzLjIgMjIuNCAzLjJoNDAwYzYuNCAwIDEyLjggMCAyMi40LTMuMlYyNTZjMC0yMi40IDAtODAtMTkuMi05Mi44LTI4LjgtMTYtODYuNCA2LjQtODYuNC00MS42IDAtMTYgOS42LTQxLjYgMjguOC00MS42IDUxLjIgMCA5OS4yIDMuMiAxNTAuNCAzLjIgNDggMCA5OS4yLTMuMiAxNDcuMi0zLjIgMTkuMiAwIDI4LjggMjIuNCAyOC44IDQxLjYgMCA1MS4yLTU3LjYgMjUuNi04Ni40IDQxLjYtMTkuMiAxMi44LTE5LjIgNzAuNC0xOS4yIDkyLjh2NTM3LjZjMCAxOS4yIDAgNjcuMiAxOS4yIDgwIDI4LjggMTkuMiA4OS42LTYuNCA4OS42IDQ0LjggMCAxOS4yLTYuNCA0MS42LTI4LjggNDEuNnpcIj48L3BhdGg+PC9zdmc+Jyx0aGlzLnRhZz1cInNlbGVjdFwiLHRoaXMud2lkdGg9NjB9cmV0dXJuIGUucHJvdG90eXBlLmdldE9wdGlvbnM9ZnVuY3Rpb24oZSl7dmFyIHQ9W3t2YWx1ZTpcImhlYWRlcjFcIix0ZXh0OlwiSDFcIixzdHlsZUZvclJlbmRlck1lbnVMaXN0OntcImZvbnQtc2l6ZVwiOlwiMzJweFwiLFwiZm9udC13ZWlnaHRcIjpcImJvbGRcIn19LHt2YWx1ZTpcImhlYWRlcjJcIix0ZXh0OlwiSDJcIixzdHlsZUZvclJlbmRlck1lbnVMaXN0OntcImZvbnQtc2l6ZVwiOlwiMjRweFwiLFwiZm9udC13ZWlnaHRcIjpcImJvbGRcIn19LHt2YWx1ZTpcImhlYWRlcjNcIix0ZXh0OlwiSDNcIixzdHlsZUZvclJlbmRlck1lbnVMaXN0OntcImZvbnQtc2l6ZVwiOlwiMThweFwiLFwiZm9udC13ZWlnaHRcIjpcImJvbGRcIn19LHt2YWx1ZTpcImhlYWRlcjRcIix0ZXh0OlwiSDRcIixzdHlsZUZvclJlbmRlck1lbnVMaXN0OntcImZvbnQtc2l6ZVwiOlwiMTZweFwiLFwiZm9udC13ZWlnaHRcIjpcImJvbGRcIn19LHt2YWx1ZTpcImhlYWRlcjVcIix0ZXh0OlwiSDVcIixzdHlsZUZvclJlbmRlck1lbnVMaXN0OntcImZvbnQtc2l6ZVwiOlwiMTNweFwiLFwiZm9udC13ZWlnaHRcIjpcImJvbGRcIn19LHt2YWx1ZTpcInBhcmFncmFwaFwiLHRleHQ6SFAoXCJoZWFkZXIudGV4dFwiKX1dLG49dGhpcy5nZXRWYWx1ZShlKS50b1N0cmluZygpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2UudmFsdWU9PT1uP2Uuc2VsZWN0ZWQ9ITA6ZGVsZXRlIGUuc2VsZWN0ZWR9KSksdH0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBDeihlKX0sZS5wcm90b3R5cGUuaXNEaXNhYmxlZD1mdW5jdGlvbihlKXtyZXR1cm4gQXooZSl9LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXtPeihlLHQudG9TdHJpbmcoKSl9LGV9KCksQno9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50YWc9XCJidXR0b25cIn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEN6KGUpfSxlLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZShlKT09PXRoaXMudHlwZX0sZS5wcm90b3R5cGUuaXNEaXNhYmxlZD1mdW5jdGlvbihlKXtyZXR1cm4gQXooZSl9LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnR5cGU7T3ooZSx0PT09bj9cInBhcmFncmFwaFwiOm4pfSxlfSgpLEZ6PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQudGl0bGU9XCJIMVwiLHQudHlwZT1cImhlYWRlcjFcIix0fXJldHVybiByTSh0LGUpLHR9KEJ6KSxUej1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LnRpdGxlPVwiSDJcIix0LnR5cGU9XCJoZWFkZXIyXCIsdH1yZXR1cm4gck0odCxlKSx0fShCeiksX3o9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC50aXRsZT1cIkgzXCIsdC50eXBlPVwiaGVhZGVyM1wiLHR9cmV0dXJuIHJNKHQsZSksdH0oQnopLFB6PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQudGl0bGU9XCJINFwiLHQudHlwZT1cImhlYWRlcjRcIix0fXJldHVybiByTSh0LGUpLHR9KEJ6KSxqej1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LnRpdGxlPVwiSDVcIix0LnR5cGU9XCJoZWFkZXI1XCIsdH1yZXR1cm4gck0odCxlKSx0fShCeiksTno9e2tleTpcImhlYWRlclNlbGVjdFwiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGt6fX0sSXo9e2tleTpcImhlYWRlcjFcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGen19LEx6PXtrZXk6XCJoZWFkZXIyXCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgVHp9fSxSej17a2V5OlwiaGVhZGVyM1wiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF96fX0sTXo9e2tleTpcImhlYWRlcjRcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQen19LHp6PXtrZXk6XCJoZWFkZXI1XCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcganp9fTtmdW5jdGlvbiAkeihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm5cIjxoXCIrZStcIj5cIituK1wiPC9oXCIrZStcIj5cIn19ZnVuY3Rpb24gSHooZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXt2YXIgbz1NcCh0KTtyZXR1cm4gMD09PShuPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hIWVkLmlzVGV4dChlKXx8ISFyLmlzSW5saW5lKGUpfSkpKS5sZW5ndGgmJihuPVt7dGV4dDpvLnRleHQoKS5yZXBsYWNlKC9cXHMrL2dtLFwiIFwiKX1dKSx7dHlwZTpcImhlYWRlclwiK2UsY2hpbGRyZW46bn19fXZhciBWej17cmVuZGVyRWxlbXM6W296LGl6LGF6LHV6LHN6XSxlbGVtc1RvSHRtbDpbe3R5cGU6XCJoZWFkZXIxXCIsZWxlbVRvSHRtbDokeigxKX0se3R5cGU6XCJoZWFkZXIyXCIsZWxlbVRvSHRtbDokeigyKX0se3R5cGU6XCJoZWFkZXIzXCIsZWxlbVRvSHRtbDokeigzKX0se3R5cGU6XCJoZWFkZXI0XCIsZWxlbVRvSHRtbDokeig0KX0se3R5cGU6XCJoZWFkZXI1XCIsZWxlbVRvSHRtbDokeig1KX1dLHBhcnNlRWxlbXNIdG1sOlt7c2VsZWN0b3I6XCJoMTpub3QoW2RhdGEtdy1lLXR5cGVdKVwiLHBhcnNlRWxlbUh0bWw6SHooMSl9LHtzZWxlY3RvcjpcImgyOm5vdChbZGF0YS13LWUtdHlwZV0pXCIscGFyc2VFbGVtSHRtbDpIeigyKX0se3NlbGVjdG9yOlwiaDM6bm90KFtkYXRhLXctZS10eXBlXSlcIixwYXJzZUVsZW1IdG1sOkh6KDMpfSx7c2VsZWN0b3I6XCJoNDpub3QoW2RhdGEtdy1lLXR5cGVdKVwiLHBhcnNlRWxlbUh0bWw6SHooNCl9LHtzZWxlY3RvcjpcImg1Om5vdChbZGF0YS13LWUtdHlwZV0pXCIscGFyc2VFbGVtSHRtbDpIeig1KX1dLG1lbnVzOltOeixJeixMeixSeixNeix6el0sZWRpdG9yUGx1Z2luOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5zZXJ0QnJlYWs7ZS5pbnNlcnROb2RlO3ZhciBuPWU7cmV0dXJuIG4uaW5zZXJ0QnJlYWs9ZnVuY3Rpb24oKXt2YXIgcj1zTShCZi5ub2RlcyhuLHttYXRjaDpmdW5jdGlvbihlKXtyZXR1cm4gUU8uZ2V0Tm9kZVR5cGUoZSkuc3RhcnRzV2l0aChcImhlYWRlclwiKX0sdW5pdmVyc2FsOiEwfSksMSlbMF07ciYmUU8uaXNTZWxlY3Rpb25BdExpbmVFbmQoZSxyWzFdKT9tZC5pbnNlcnROb2RlcyhuLHt0eXBlOlwicGFyYWdyYXBoXCIsY2hpbGRyZW46W3t0ZXh0OlwiXCJ9XX0se21vZGU6XCJoaWdoZXN0XCJ9KTp0KCl9LG59fSxVej1PYmplY3QuYXNzaWduLFd6PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxHej1CaihbXS5jb25jYXQpLHF6PSFVenx8dmooKGZ1bmN0aW9uKCl7aWYoeWomJjEhPT1Veih7YjoxfSxVeihXeih7fSxcImFcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtXeih0aGlzLFwiYlwiLHt2YWx1ZTozLGVudW1lcmFibGU6ITF9KX19KSx7YjoyfSkpLmIpcmV0dXJuITA7dmFyIGU9e30sdD17fSxuPVN5bWJvbCgpLHI9XCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiO3JldHVybiBlW25dPTcsci5zcGxpdChcIlwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0W2VdPWV9KSksNyE9VXooe30sZSlbbl18fG1MKFV6KHt9LHQpKS5qb2luKFwiXCIpIT1yfSkpP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWZOKGUpLHI9YXJndW1lbnRzLmxlbmd0aCxvPTEsaT1DSS5mLGE9U2ouZjtyPm87KWZvcih2YXIgdSxzPU5qKGFyZ3VtZW50c1tvKytdKSxsPWk/R3oobUwocyksaShzKSk6bUwocyksYz1sLmxlbmd0aCxmPTA7Yz5mOyl1PWxbZisrXSx5aiYmIWJqKGEscyx1KXx8KG5bdV09c1t1XSk7cmV0dXJuIG59OlV6O2Z1bmN0aW9uIEt6KGUsdCl7bnVsbD09ZS5kYXRhJiYoZS5kYXRhPXt9KTt2YXIgbj1lLmRhdGE7bnVsbD09bi5zdHlsZSYmKG4uc3R5bGU9e30pLE9iamVjdC5hc3NpZ24obi5zdHlsZSx0KX1MSSh7dGFyZ2V0OlwiT2JqZWN0XCIsc3RhdDohMCxmb3JjZWQ6T2JqZWN0LmFzc2lnbiE9PXF6fSx7YXNzaWduOnF6fSk7dmFyIFl6PXtzZWxlY3RvcjpcImZvbnRcIixwcmVQYXJzZUh0bWw6ZnVuY3Rpb24oZSl7dmFyIHQ9TXAoZSk7aWYoXCJmb250XCIhPT1RUih0KSlyZXR1cm4gZTt2YXIgbj10LmF0dHIoXCJjb2xvclwiKXx8XCJcIjtyZXR1cm4gbiYmKHQucmVtb3ZlQXR0cihcImNvbG9yXCIpLHQuY3NzKFwiY29sb3JcIixuKSksdFswXX19LFh6PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMudGFnPVwiYnV0dG9uXCIsdGhpcy5zaG93RHJvcFBhbmVsPSEwLHRoaXMuJGNvbnRlbnQ9bnVsbH1yZXR1cm4gZS5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihlLHQpe30sZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tYXJrLG49QmYubWFya3MoZSk7cmV0dXJuIG4mJm5bdF0/blt0XTpcIlwifSxlLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4hIXRoaXMuZ2V0VmFsdWUoZSl9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuc2VsZWN0aW9ufHwhIXNNKEJmLm5vZGVzKGUse21hdGNoOmZ1bmN0aW9uKHQpe3JldHVyblwicHJlXCI9PT1RTy5nZXROb2RlVHlwZSh0KXx8ISFCZi5pc1ZvaWQoZSx0KX0sdW5pdmVyc2FsOiEwfSksMSlbMF19LGUucHJvdG90eXBlLmdldFBhbmVsQ29udGVudEVsZW09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tYXJrO2lmKG51bGw9PXRoaXMuJGNvbnRlbnQpe3ZhciBuPU1wKCc8dWwgY2xhc3M9XCJ3LWUtcGFuZWwtY29udGVudC1jb2xvclwiPjwvdWw+Jyk7bi5vbihcImNsaWNrXCIsXCJsaVwiLChmdW5jdGlvbihuKXt2YXIgcj1uLnRhcmdldDtpZihudWxsIT1yJiYobi5wcmV2ZW50RGVmYXVsdCgpLG51bGwhPWUuc2VsZWN0aW9uKSl7dmFyIG89TXAocikuYXR0cihcImRhdGEtdmFsdWVcIik7XCIwXCI9PT1vP0JmLnJlbW92ZU1hcmsoZSx0KTpCZi5hZGRNYXJrKGUsdCxvKX19KSksdGhpcy4kY29udGVudD1ufXZhciByPXRoaXMuJGNvbnRlbnQ7aWYobnVsbD09cilyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInVsXCIpO3IuZW1wdHkoKTt2YXIgbz10aGlzLmdldFZhbHVlKGUpLGk9ZS5nZXRNZW51Q29uZmlnKHQpLmNvbG9yczsodm9pZCAwPT09aT9bXTppKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1NcCgnPGRpdiBjbGFzcz1cImNvbG9yLWJsb2NrXCIgZGF0YS12YWx1ZT1cIicrZSsnXCI+PC9kaXY+Jyk7dC5jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yXCIsZSk7dmFyIG49TXAoJzxsaSBkYXRhLXZhbHVlPVwiJytlKydcIj48L2xpPicpO289PT1lJiZuLmFkZENsYXNzKFwiYWN0aXZlXCIpLG4uYXBwZW5kKHQpLHIuYXBwZW5kKG4pfSkpO3ZhciBhPVwiXCI7XCJjb2xvclwiPT09dCYmKGE9SFAoXCJjb2xvci5kZWZhdWx0XCIpKSxcImJnQ29sb3JcIj09PXQmJihhPUhQKFwiY29sb3IuY2xlYXJcIikpO3ZhciB1PU1wKCdcXG4gICAgICA8bGkgZGF0YS12YWx1ZT1cIjBcIiBjbGFzcz1cImNsZWFyXCI+XFxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCI+PHBhdGggZD1cIk0yMzYuOCAxMjhMODk2IDc4Ny4yVjEyOEgyMzYuOHogbTYxNC40IDcwNEwxOTIgMTcyLjhWODMyaDY1OS4yek0xOTIgNjRoNzA0YzM4LjQgMCA2NCAyNS42IDY0IDY0djcwNGMwIDM4LjQtMjUuNiA2NC02NCA2NEgxOTJjLTM4LjQgMC02NC0yNS42LTY0LTY0VjEyOGMwLTM4LjQgMjUuNi02NCA2NC02NHpcIj48L3BhdGg+PC9zdmc+XFxuICAgICAgICAnK2ErXCJcXG4gICAgICA8L2xpPlxcbiAgICBcIik7cmV0dXJuIHIucHJlcGVuZCh1KSxyWzBdfSxlfSgpLFp6PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQudGl0bGU9SFAoXCJjb2xvci5jb2xvclwiKSx0Lmljb25Tdmc9SU0sdC5tYXJrPVwiY29sb3JcIix0fXJldHVybiByTSh0LGUpLHR9KFh6KSxKej1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LnRpdGxlPUhQKFwiY29sb3IuYmdDb2xvclwiKSx0Lmljb25Tdmc9TE0sdC5tYXJrPVwiYmdDb2xvclwiLHR9cmV0dXJuIHJNKHQsZSksdH0oWHopLFF6PVtcInJnYigwLCAwLCAwKVwiLFwicmdiKDM4LCAzOCwgMzgpXCIsXCJyZ2IoODksIDg5LCA4OSlcIixcInJnYigxNDAsIDE0MCwgMTQwKVwiLFwicmdiKDE5MSwgMTkxLCAxOTEpXCIsXCJyZ2IoMjE3LCAyMTcsIDIxNylcIixcInJnYigyMzMsIDIzMywgMjMzKVwiLFwicmdiKDI0NSwgMjQ1LCAyNDUpXCIsXCJyZ2IoMjUwLCAyNTAsIDI1MClcIixcInJnYigyNTUsIDI1NSwgMjU1KVwiLFwicmdiKDIyNSwgNjAsIDU3KVwiLFwicmdiKDIzMSwgOTUsIDUxKVwiLFwicmdiKDIzNSwgMTQ0LCA1OClcIixcInJnYigyNDUsIDIxOSwgNzcpXCIsXCJyZ2IoMTE0LCAxOTIsIDY0KVwiLFwicmdiKDg5LCAxOTEsIDE5MilcIixcInJnYig2NiwgMTQ0LCAyNDcpXCIsXCJyZ2IoNTQsIDg4LCAyMjYpXCIsXCJyZ2IoMTA2LCA1NywgMjAxKVwiLFwicmdiKDIxNiwgNjgsIDE0NylcIixcInJnYigyNTEsIDIzMywgMjMwKVwiLFwicmdiKDI1MiwgMjM3LCAyMjUpXCIsXCJyZ2IoMjUyLCAyMzksIDIxMilcIixcInJnYigyNTIsIDI1MSwgMjA3KVwiLFwicmdiKDIzMSwgMjQ2LCAyMTMpXCIsXCJyZ2IoMjE4LCAyNDQsIDI0MClcIixcInJnYigyMTcsIDIzNywgMjUwKVwiLFwicmdiKDIyNCwgMjMyLCAyNTApXCIsXCJyZ2IoMjM3LCAyMjUsIDI0OClcIixcInJnYigyNDYsIDIyNiwgMjM0KVwiLFwicmdiKDI1NSwgMTYzLCAxNTgpXCIsXCJyZ2IoMjU1LCAxODcsIDE1MClcIixcInJnYigyNTUsIDIxMywgMTQ1KVwiLFwicmdiKDI1NSwgMjUxLCAxNDMpXCIsXCJyZ2IoMTgzLCAyMzUsIDE0MylcIixcInJnYigxMzUsIDIzMiwgMjIyKVwiLFwicmdiKDE0NSwgMjEzLCAyNTUpXCIsXCJyZ2IoMTczLCAxOTgsIDI1NSlcIixcInJnYigyMTEsIDE3MywgMjQ3KVwiLFwicmdiKDI1NSwgMTczLCAyMTApXCIsXCJyZ2IoMjU1LCA3NywgNzkpXCIsXCJyZ2IoMjU1LCAxMjIsIDY5KVwiLFwicmdiKDI1NSwgMTY5LCA2NClcIixcInJnYigyNTUsIDIzNiwgNjEpXCIsXCJyZ2IoMTE1LCAyMDksIDYxKVwiLFwicmdiKDU0LCAyMDcsIDIwMSlcIixcInJnYig2NCwgMTY5LCAyNTUpXCIsXCJyZ2IoODksIDEyNiwgMjQ3KVwiLFwicmdiKDE0NiwgODQsIDIyMilcIixcInJnYigyNDcsIDg5LCAxNzEpXCIsXCJyZ2IoMjA3LCAxOSwgMzQpXCIsXCJyZ2IoMjEyLCA1NiwgMTMpXCIsXCJyZ2IoMjEyLCAxMDcsIDgpXCIsXCJyZ2IoMjEyLCAxNzcsIDYpXCIsXCJyZ2IoNTYsIDE1OCwgMTMpXCIsXCJyZ2IoOCwgMTUxLCAxNTYpXCIsXCJyZ2IoOSwgMTA5LCAyMTcpXCIsXCJyZ2IoMjksIDU3LCAxOTYpXCIsXCJyZ2IoODMsIDI5LCAxNzEpXCIsXCJyZ2IoMTk2LCAyOSwgMTI3KVwiLFwicmdiKDEzMCwgMCwgMjApXCIsXCJyZ2IoMTM1LCAyMCwgMClcIixcInJnYigxMzUsIDU2LCAwKVwiLFwicmdiKDk3LCA3MSwgMClcIixcInJnYigxOSwgODIsIDApXCIsXCJyZ2IoMCwgNzEsIDc5KVwiLFwicmdiKDAsIDU4LCAxNDApXCIsXCJyZ2IoNiwgMTcsIDEyMClcIixcInJnYigzNCwgNywgOTQpXCIsXCJyZ2IoMTIwLCA2LCA4MClcIl0sZSQ9e3JlbmRlclN0eWxlOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZSxyPW4uY29sb3Isbz1uLmJnQ29sb3IsaT10O3JldHVybiByJiZLeihpLHtjb2xvcjpyfSksbyYmS3ooaSx7YmFja2dyb3VuZENvbG9yOm99KSxpfSxzdHlsZVRvSHRtbDpmdW5jdGlvbihlLHQpe2lmKCFlZC5pc1RleHQoZSkpcmV0dXJuIHQ7dmFyIG4scj1lLG89ci5jb2xvcixpPXIuYmdDb2xvcjtyZXR1cm4gb3x8aT8oKFpSKHQpfHxcInNwYW5cIiE9PVFSKG49TXAodCkpKSYmKG49TXAoXCI8c3Bhbj5cIit0K1wiPC9zcGFuPlwiKSksbyYmbi5jc3MoXCJjb2xvclwiLG8pLGkmJm4uY3NzKFwiYmFja2dyb3VuZC1jb2xvclwiLGkpLEpSKG4pKTp0fSxwcmVQYXJzZUh0bWw6W1l6XSxwYXJzZVN0eWxlSHRtbDpmdW5jdGlvbihlLHQsbil7dmFyIHI9TXAoZSk7aWYoIWVkLmlzVGV4dCh0KSlyZXR1cm4gdDt2YXIgbz10LGk9ZU0ocixcImNvbG9yXCIpO2kmJihvLmNvbG9yPWkpO3ZhciBhPWVNKHIsXCJiYWNrZ3JvdW5kLWNvbG9yXCIpO3JldHVybiBhfHwoYT1lTShyLFwiYmFja2dyb3VuZFwiKSksYSYmKG8uYmdDb2xvcj1hKSxvfSxtZW51czpbe2tleTpcImNvbG9yXCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgWnp9LGNvbmZpZzp7Y29sb3JzOlF6fX0se2tleTpcImJnQ29sb3JcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKen0sY29uZmlnOntjb2xvcnM6UXp9fV19LHQkPS9eKD86XFx3KzopP1xcL1xcLyhcXFMrKSQvLG4kPS9ebG9jYWxob3N0W1xcOj9cXGRdKig/OlteXFw6P1xcZF1cXFMqKT8kLyxyJD0vXlteXFxzXFwuXStcXC5cXFN7Mix9JC8sbyQ9bUkuaW5jbHVkZXM7ZnVuY3Rpb24gaSQoZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPVwiclwiKSxlK1wiLVwiK1JoKCl9ZnVuY3Rpb24gYSQoZSl7cmV0dXJuIGUucmVwbGFjZSgvPC9nLFwiJmx0O1wiKS5yZXBsYWNlKC8+L2csXCImZ3Q7XCIpfWZ1bmN0aW9uIHUkKGUsdCxuLHIpe3JldHVybiBpTSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIG8saTtyZXR1cm4gYU0odGhpcywoZnVuY3Rpb24oYSl7c3dpdGNoKGEubGFiZWwpe2Nhc2UgMDpyZXR1cm4obz10LmdldE1lbnVDb25maWcoZSkuY2hlY2tMaW5rKT9bNCxvKG4scildOlszLDJdO2Nhc2UgMTppZihcInN0cmluZ1wiPT10eXBlb2YoaT1hLnNlbnQoKSkpcmV0dXJuIHQuYWxlcnQoaSxcImVycm9yXCIpLFsyLCExXTtpZihudWxsPT1pKXJldHVyblsyLCExXTthLmxhYmVsPTI7Y2FzZSAyOnJldHVyblsyLCEwXX19KSl9KSl9ZnVuY3Rpb24gcyQoZSx0LG4pe3JldHVybiBpTSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIHI7cmV0dXJuIGFNKHRoaXMsKGZ1bmN0aW9uKG8pe3N3aXRjaChvLmxhYmVsKXtjYXNlIDA6cmV0dXJuKHI9dC5nZXRNZW51Q29uZmlnKGUpLnBhcnNlTGlua1VybCk/WzQscihuKV06WzMsMl07Y2FzZSAxOnJldHVyblsyLG8uc2VudCgpXTtjYXNlIDI6cmV0dXJuWzIsbl19fSkpfSkpfWZ1bmN0aW9uIGwkKGUpe3JldHVybiBudWxsPT1lLnNlbGVjdGlvbnx8ISFRTy5nZXRTZWxlY3RlZEVsZW1zKGUpLnNvbWUoKGZ1bmN0aW9uKHQpe3ZhciBuPXQudHlwZTtyZXR1cm4hIWUuaXNWb2lkKHQpfHwhIVtcInByZVwiLFwiY29kZVwiLFwibGlua1wiXS5pbmNsdWRlcyhuKXx8dm9pZCAwfSkpfWZ1bmN0aW9uIGMkKGUsdCl7cmV0dXJue3R5cGU6XCJsaW5rXCIsdXJsOmEkKGUpLGNoaWxkcmVuOnQ/W3t0ZXh0OnR9XTpbXX19ZnVuY3Rpb24gZiQoZSx0LG4pe3JldHVybiBpTSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIHIsbyxpO3JldHVybiBhTSh0aGlzLChmdW5jdGlvbihhKXtzd2l0Y2goYS5sYWJlbCl7Y2FzZSAwOnJldHVybiBuPyh0fHwodD1uKSxlLnJlc3RvcmVTZWxlY3Rpb24oKSxsJChlKT9bMl06WzQsdSQoXCJpbnNlcnRMaW5rXCIsZSx0LG4pXSk6WzJdO2Nhc2UgMTpyZXR1cm4gYS5zZW50KCk/WzQscyQoXCJpbnNlcnRMaW5rXCIsZSxuKV06WzJdO2Nhc2UgMjpyZXR1cm4gcj1hLnNlbnQoKSxudWxsPT0obz1lLnNlbGVjdGlvbil8fChxZi5pc0NvbGxhcHNlZChvKT8oZS5pbnNlcnRUZXh0KFwiIFwiKSxpPWMkKHIsdCksbWQuaW5zZXJ0Tm9kZXMoZSxpKSxlLmluc2VydEZyYWdtZW50KFt7dGV4dDpcIiBcIn1dKSk6QmYuc3RyaW5nKGUsbykhPT10PyhlLmRlbGV0ZUZyYWdtZW50KCksaT1jJChyLHQpLG1kLmluc2VydE5vZGVzKGUsaSkpOihpPWMkKHIpLG1kLndyYXBOb2RlcyhlLGkse3NwbGl0OiEwfSksbWQuY29sbGFwc2UoZSx7ZWRnZTpcImVuZFwifSkpKSxbMl19fSkpfSkpfUxJKHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwfSx7aW5jbHVkZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIG8kKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksQ1IoXCJpbmNsdWRlc1wiKTt2YXIgZCQ9e3R5cGU6XCJsaW5rXCIscmVuZGVyRWxlbTpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSxvPXIudXJsLGk9ci50YXJnZXQ7cmV0dXJuIFBnKFwiYVwiLHtocmVmOm8sdGFyZ2V0OnZvaWQgMD09PWk/XCJfYmxhbmtcIjppfSx0KX19LHAkPXtzZWxlY3RvcjpcImE6bm90KFtkYXRhLXctZS10eXBlXSlcIixwYXJzZUVsZW1IdG1sOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1NcChlKTtyZXR1cm4gMD09PSh0PXQuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hIWVkLmlzVGV4dChlKXx8ISFuLmlzSW5saW5lKGUpfSkpKS5sZW5ndGgmJih0PVt7dGV4dDpyLnRleHQoKS5yZXBsYWNlKC9cXHMrL2dtLFwiIFwiKX1dKSx7dHlwZTpcImxpbmtcIix1cmw6ci5hdHRyKFwiaHJlZlwiKXx8XCJcIix0YXJnZXQ6ci5hdHRyKFwidGFyZ2V0XCIpfHxcIlwiLGNoaWxkcmVuOnR9fX07ZnVuY3Rpb24gaCQoKXtyZXR1cm4gaSQoXCJ3LWUtaW5zZXJ0LWxpbmtcIil9dmFyIGckPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMudGl0bGU9SFAoXCJsaW5rLmluc2VydFwiKSx0aGlzLmljb25Tdmc9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTQ0MC4yMjQgNjM1Ljc3NmE1MS44NCA1MS44NCAwIDAgMS0zNi43NjgtMTUuMjMyYy05NS4xMzYtOTUuMTM2LTk1LjEzNi0yNDkuOTIgMC0zNDUuMDU2bDE5Mi0xOTJDNjQxLjUzNiAzNy40MDggNzAyLjgxNiAxMi4wMzIgNzY4IDEyLjAzMnMxMjYuNDMyIDI1LjM3NiAxNzIuNTQ0IDcxLjQ1NmM5NS4xMzYgOTUuMTM2IDk1LjEzNiAyNDkuOTIgMCAzNDUuMDU2bC04Ny43NzYgODcuNzc2YTUxLjk2OCA1MS45NjggMCAxIDEtNzMuNTM2LTczLjUzNmw4Ny43NzYtODcuNzc2YTE0MC4xNiAxNDAuMTYgMCAwIDAgMC0xOTcuOTg0Yy0yNi40MzItMjYuNDMyLTYxLjYtNDAuOTkyLTk5LjAwOC00MC45OTJzLTcyLjU0NCAxNC41Ni05OS4wMDggNDAuOTkybC0xOTIgMTkyYTE0MC4xNiAxNDAuMTYgMCAwIDAgMCAxOTcuOTg0IDUxLjk2OCA1MS45NjggMCAwIDEtMzYuNzY4IDg4Ljc2OHpcIj48L3BhdGg+PHBhdGggZD1cIk0yNTYgMTAxMmEyNDIuNCAyNDIuNCAwIDAgMS0xNzIuNTQ0LTcxLjQ1NmMtOTUuMTM2LTk1LjEzNi05NS4xMzYtMjQ5LjkyIDAtMzQ1LjA1Nmw4Ny43NzYtODcuNzc2YTUxLjk2OCA1MS45NjggMCAxIDEgNzMuNTM2IDczLjUzNmwtODcuNzc2IDg3Ljc3NmExNDAuMTYgMTQwLjE2IDAgMCAwIDAgMTk3Ljk4NGMyNi40MzIgMjYuNDMyIDYxLjYgNDAuOTkyIDk5LjAwOCA0MC45OTJzNzIuNTQ0LTE0LjU2IDk5LjAwOC00MC45OTJsMTkyLTE5MmExNDAuMTYgMTQwLjE2IDAgMCAwIDAtMTk3Ljk4NCA1MS45NjggNTEuOTY4IDAgMSAxIDczLjUzNi03My41MzZjOTUuMTM2IDk1LjEzNiA5NS4xMzYgMjQ5LjkyIDAgMzQ1LjA1NmwtMTkyIDE5MkEyNDIuNCAyNDIuNCAwIDAgMSAyNTYgMTAxMnpcIj48L3BhdGg+PC9zdmc+Jyx0aGlzLnRhZz1cImJ1dHRvblwiLHRoaXMuc2hvd01vZGFsPSEwLHRoaXMubW9kYWxXaWR0aD0zMDAsdGhpcy4kY29udGVudD1udWxsLHRoaXMudGV4dElucHV0SWQ9aCQoKSx0aGlzLnVybElucHV0SWQ9aCQoKSx0aGlzLmJ1dHRvbklkPWgkKCl9cmV0dXJuIGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVyblwiXCJ9LGUucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiExfSxlLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGUsdCl7fSxlLnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKGUpe3JldHVybiBsJChlKX0sZS5wcm90b3R5cGUuZ2V0TW9kYWxQb3NpdGlvbk5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLmdldE1vZGFsQ29udGVudEVsZW09ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWxlY3Rpb24sbj10aGlzLHI9bi50ZXh0SW5wdXRJZCxvPW4udXJsSW5wdXRJZCxpPW4uYnV0dG9uSWQsYT1zTShTXyhIUChcImxpbmsudGV4dFwiKSxyKSwyKSx1PWFbMF0scz1NcChhWzFdKSxsPXNNKFNfKEhQKFwibGluay51cmxcIiksbyksMiksYz1sWzBdLGY9TXAobFsxXSksZD1zTShDXyhpLEhQKFwiY29tbW9uLm9rXCIpKSwxKVswXTtpZihudWxsPT10aGlzLiRjb250ZW50KXt2YXIgcD1NcChcIjxkaXY+PC9kaXY+XCIpO3Aub24oXCJjbGlja1wiLFwiI1wiK2ksKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKTt2YXIgbj1wLmZpbmQoXCIjXCIrcikudmFsKCksaT1wLmZpbmQoXCIjXCIrbykudmFsKCk7ZiQoZSxuLGkpLGUuaGlkZVBhbmVsT3JNb2RhbCgpfSkpLHRoaXMuJGNvbnRlbnQ9cH12YXIgaD10aGlzLiRjb250ZW50O2lmKGguZW1wdHkoKSxoLmFwcGVuZCh1KSxoLmFwcGVuZChjKSxoLmFwcGVuZChkKSxudWxsPT10fHxxZi5pc0NvbGxhcHNlZCh0KSlzLnZhbChcIlwiKTtlbHNle3ZhciBnPUJmLnN0cmluZyhlLHQpO3MudmFsKGcpfXJldHVybiBmLnZhbChcIlwiKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3MuZm9jdXMoKX0pKSxoWzBdfSxlfSgpO2Z1bmN0aW9uIHYkKCl7cmV0dXJuIGkkKFwidy1lLXVwZGF0ZS1saW5rXCIpfXZhciB5JD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnRpdGxlPUhQKFwibGluay5lZGl0XCIpLHRoaXMuaWNvblN2Zz1qTSx0aGlzLnRhZz1cImJ1dHRvblwiLHRoaXMuc2hvd01vZGFsPSEwLHRoaXMubW9kYWxXaWR0aD0zMDAsdGhpcy4kY29udGVudD1udWxsLHRoaXMudXJsSW5wdXRJZD12JCgpLHRoaXMuYnV0dG9uSWQ9diQoKX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRMaW5rRWxlbT1mdW5jdGlvbihlKXt2YXIgdD1RTy5nZXRTZWxlY3RlZE5vZGVCeVR5cGUoZSxcImxpbmtcIik7cmV0dXJuIG51bGw9PXQ/bnVsbDp0fSxlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFNlbGVjdGVkTGlua0VsZW0oZSk7cmV0dXJuIHQmJnQudXJsfHxcIlwifSxlLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihlLHQpe30sZS5wcm90b3R5cGUuaXNEaXNhYmxlZD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5zZWxlY3Rpb258fG51bGw9PXRoaXMuZ2V0U2VsZWN0ZWRMaW5rRWxlbShlKX0sZS5wcm90b3R5cGUuZ2V0TW9kYWxQb3NpdGlvbk5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShlLFwibGlua1wiKX0sZS5wcm90b3R5cGUuZ2V0TW9kYWxDb250ZW50RWxlbT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnVybElucHV0SWQsbj10aGlzLmJ1dHRvbklkLHI9c00oU18oSFAoXCJsaW5rLnVybFwiKSx0KSwyKSxvPXJbMF0saT1NcChyWzFdKSxhPXNNKENfKG4sSFAoXCJjb21tb24ub2tcIikpLDEpWzBdO2lmKG51bGw9PXRoaXMuJGNvbnRlbnQpe3ZhciB1PU1wKFwiPGRpdj48L2Rpdj5cIik7dS5vbihcImNsaWNrXCIsXCJidXR0b25cIiwoZnVuY3Rpb24obil7bi5wcmV2ZW50RGVmYXVsdCgpLGUucmVzdG9yZVNlbGVjdGlvbigpO3ZhciByPVFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShlLFwibGlua1wiKSxvPXI/TmYuc3RyaW5nKHIpOlwiXCIsaT11LmZpbmQoXCIjXCIrdCkudmFsKCk7IWZ1bmN0aW9uKGUsdCxuKXtpTSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIHIsbztyZXR1cm4gYU0odGhpcywoZnVuY3Rpb24oaSl7c3dpdGNoKGkubGFiZWwpe2Nhc2UgMDpyZXR1cm4gbj9bNCx1JChcImVkaXRMaW5rXCIsZSx0LG4pXTpbMl07Y2FzZSAxOnJldHVybiBpLnNlbnQoKT9bNCxzJChcImVkaXRMaW5rXCIsZSxuKV06WzJdO2Nhc2UgMjpyZXR1cm4gcj1pLnNlbnQoKSxvPXt1cmw6YSQocil9LG1kLnNldE5vZGVzKGUsbyx7bWF0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFFPLmNoZWNrTm9kZVR5cGUoZSxcImxpbmtcIil9fSksWzJdfX0pKX0pKX0oZSxvLGkpLGUuaGlkZVBhbmVsT3JNb2RhbCgpfSkpLHRoaXMuJGNvbnRlbnQ9dX12YXIgcz10aGlzLiRjb250ZW50O3MuZW1wdHkoKSxzLmFwcGVuZChvKSxzLmFwcGVuZChhKTt2YXIgbD10aGlzLmdldFZhbHVlKGUpO3JldHVybiBpLnZhbChsKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2kuZm9jdXMoKX0pKSxzWzBdfSxlfSgpLG0kPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMudGl0bGU9SFAoXCJsaW5rLnVuTGlua1wiKSx0aGlzLmljb25Tdmc9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTYwOC4xNjMyOCA4MTEuODE1MDM2YzkuMzcxOTU0IDkuMzcxOTU0IDkuMzcxOTU0IDI0LjU2Nzg4IDAgMzMuOTQxODM0bC04OS4zNDc1NjMgODkuMzQ3NTY0Yy0xMTguNTI1NDIxIDExOC41MjM0MjEtMzExLjM4NDQ4IDExOC41MzE0MjEtNDI5LjkxOTkwMSAwLTExOC41Mjc0MjEtMTE4LjUyOTQyMS0xMTguNTI3NDIxLTMxMS4zOTA0OCAwLTQyOS45MTc5MDFsODkuMzQ5NTY0LTg5LjM0OTU2M2M5LjM3MTk1NC05LjM3MTk1NCAyNC41Njc4OC05LjM3MTk1NCAzMy45NDE4MzQgMGw3OS4xOTU2MTMgNzkuMTk1NjEzYzkuMzcxOTU0IDkuMzcxOTU0IDkuMzcxOTU0IDI0LjU2Nzg4IDAgMzMuOTQxODM0bC04OS4zNDk1NjMgODkuMzQ3NTY0Yy01Ni4xNDM3MjYgNTYuMTQ1NzI2LTU2LjE0MzcyNiAxNDcuNDk5MjggMCAyMDMuNjQ1MDA1IDU2LjE0MzcyNiA1Ni4xNDM3MjYgMTQ3LjQ5OTI4IDU2LjE0NTcyNiAyMDMuNjQ3MDA1IDBsODkuMzQ3NTY0LTg5LjM0NzU2M2M5LjM3MTk1NC05LjM3MTk1NCAyNC41Njc4OC05LjM3MTk1NCAzMy45NDE4MzQgMGw3OS4xOTM2MTMgNzkuMTk1NjEzeiBtLTExMy4xMzU0NDctNTIwLjQyOTQ1OWM5LjM3MTk1NCA5LjM3MTk1NCAyNC41Njc4OCA5LjM3MTk1NCAzMy45NDE4MzQgMGw4OS4zNDc1NjQtODkuMzQ3NTY0YzU2LjE0MzcyNi01Ni4xNDk3MjYgMTQ3LjQ5OTI4LTU2LjE0NTcyNiAyMDMuNjQ3MDA2IDAgNTYuMTQzNzI2IDU2LjE0NTcyNiA1Ni4xNDM3MjYgMTQ3LjQ5OTI4IDAgMjAzLjY0NTAwNmwtODkuMzQ5NTY0IDg5LjM0NzU2NGMtOS4zNzE5NTQgOS4zNzE5NTQtOS4zNzE5NTQgMjQuNTY3ODggMCAzMy45NDE4MzRsNzkuMTk1NjEzIDc5LjE5NTYxM2M5LjM3MTk1NCA5LjM3MTk1NCAyNC41Njc4OCA5LjM3MTk1NCAzMy45NDE4MzQgMGw4OS4zNDk1NjQtODkuMzQ5NTYzYzExOC41Mjk0MjEtMTE4LjUyOTQyMSAxMTguNTI5NDIxLTMxMS4zODg0OCAwLTQyOS45MTc5MDEtMTE4LjUzMTQyMS0xMTguNTI3NDIxLTMxMS4zODg0OC0xMTguNTI3NDIxLTQyOS45MTk5MDEgMGwtODkuMzQ3NTYzIDg5LjM0NzU2NGMtOS4zNzE5NTQgOS4zNzE5NTQtOS4zNzE5NTQgMjQuNTY3ODggMCAzMy45NDE4MzRsNzkuMTkzNjEzIDc5LjE5NTYxM3ogbTQ2OS42NTM3MDcgNzE4LjU1NjQ5Mmw0NS4yNTM3NzktNDUuMjUzNzc5YzE4Ljc0NTkwOC0xOC43NDU5MDggMTguNzQ1OTA4LTQ5LjEzNzc2IDAtNjcuODgxNjY5TDEyNy4xOTU2MjkgMTQuMDYyOTMxYy0xOC43NDU5MDgtMTguNzQ1OTA4LTQ5LjEzNzc2LTE4Ljc0NTkwOC02Ny44ODE2NjkgMEwxNC4wNTgxODEgNTkuMzE4NzFjLTE4Ljc0NTkwOCAxOC43NDU5MDgtMTguNzQ1OTA4IDQ5LjEzNzc2IDAgNjcuODgxNjY5bDg4Mi43NDE2OSA4ODIuNzQxNjljMTguNzQ1OTA4IDE4Ljc0MzkwOCA0OS4xMzc3NiAxOC43NDM5MDggNjcuODgxNjY5IDB6XCI+PC9wYXRoPjwvc3ZnPicsdGhpcy50YWc9XCJidXR0b25cIn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuc2VsZWN0aW9ufHxudWxsPT1RTy5nZXRTZWxlY3RlZE5vZGVCeVR5cGUoZSxcImxpbmtcIil9LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXt0aGlzLmlzRGlzYWJsZWQoZSl8fG1kLnVud3JhcE5vZGVzKGUse21hdGNoOmZ1bmN0aW9uKGUpe3JldHVybiBRTy5jaGVja05vZGVUeXBlKGUsXCJsaW5rXCIpfX0pfSxlfSgpLGIkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMudGl0bGU9SFAoXCJsaW5rLnZpZXdcIiksdGhpcy5pY29uU3ZnPU5NLHRoaXMudGFnPVwiYnV0dG9uXCJ9cmV0dXJuIGUucHJvdG90eXBlLmdldFNlbGVjdGVkTGlua0VsZW09ZnVuY3Rpb24oZSl7dmFyIHQ9UU8uZ2V0U2VsZWN0ZWROb2RlQnlUeXBlKGUsXCJsaW5rXCIpO3JldHVybiBudWxsPT10P251bGw6dH0sZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRTZWxlY3RlZExpbmtFbGVtKGUpO3JldHVybiB0JiZ0LnVybHx8XCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuc2VsZWN0aW9ufHxudWxsPT10aGlzLmdldFNlbGVjdGVkTGlua0VsZW0oZSl9LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5pc0Rpc2FibGVkKGUpKXtpZighdHx8XCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKFwiVmlldyBsaW5rIGZhaWxlZCwgbGluayB1cmwgaXMgJ1wiK3QrXCInXCIpO3dpbmRvdy5vcGVuKHQsXCJfYmxhbmtcIil9fSxlfSgpLHckPXtjaGVja0xpbms6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hMH0scGFyc2VMaW5rVXJsOmZ1bmN0aW9uKGUpe3JldHVybiBlfX0sRSQ9e3JlbmRlckVsZW1zOltkJF0sZWxlbXNUb0h0bWw6W3t0eXBlOlwibGlua1wiLGVsZW1Ub0h0bWw6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLHI9bi51cmwsbz1uLnRhcmdldDtyZXR1cm4nPGEgaHJlZj1cIicrcisnXCIgdGFyZ2V0PVwiJysodm9pZCAwPT09bz9cIl9ibGFua1wiOm8pKydcIj4nK3QrXCI8L2E+XCJ9fV0scGFyc2VFbGVtc0h0bWw6W3AkXSxtZW51czpbe2tleTpcImluc2VydExpbmtcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnJH0sY29uZmlnOnckfSx7a2V5OlwiZWRpdExpbmtcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB5JH0sY29uZmlnOnckfSx7a2V5OlwidW5MaW5rXCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgbSR9fSx7a2V5Olwidmlld0xpbmtcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiJH19XSxlZGl0b3JQbHVnaW46ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pc0lubGluZSxuPWUuaW5zZXJ0RGF0YSxyPWUubm9ybWFsaXplTm9kZTtlLmluc2VydE5vZGUsZS5pbnNlcnRUZXh0O3ZhciBvPWU7cmV0dXJuIG8uaXNJbmxpbmU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJsaW5rXCI9PT1lLnR5cGV8fHQoZSl9LG8uaW5zZXJ0RGF0YT1mdW5jdGlvbihlKXt2YXIgdD1lLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpO2lmKGZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiExO3ZhciB0PWUubWF0Y2godCQpO2lmKCF0KXJldHVybiExO3ZhciBuPXRbMV07cmV0dXJuISghbnx8IW4kLnRlc3QobikmJiFyJC50ZXN0KG4pKX0odCkpe2lmKCFsJChvKSl7dmFyIHI9by5zZWxlY3Rpb247aWYobnVsbCE9cil7dmFyIGk9QmYuc3RyaW5nKG8scik7ZiQobyxpLHQpfX19ZWxzZSBuKGUpfSxvLm5vcm1hbGl6ZU5vZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9c00oZSwyKSxuPXRbMF0saT10WzFdO3JldHVyblwibGlua1wiIT09UU8uZ2V0Tm9kZVR5cGUobik/cihbbixpXSk6XCJcIj09PU5mLnN0cmluZyhuKT9tZC5yZW1vdmVOb2RlcyhvLHthdDppfSk6cihbbixpXSl9LG99fSxEJD1CaigxLi52YWx1ZU9mKSxTJD1nai5SYW5nZUVycm9yLHgkPWdqLlJhbmdlRXJyb3IsQyQ9Z2ouU3RyaW5nLEEkPU1hdGguZmxvb3IsTyQ9QmooKGZ1bmN0aW9uKGUpe3ZhciB0PWRMKExqKHRoaXMpKSxuPVwiXCIscj1jSShlKTtpZihyPDB8fHI9PTEvMCl0aHJvdyBTJChcIldyb25nIG51bWJlciBvZiByZXBldGl0aW9uc1wiKTtmb3IoO3I+MDsocj4+Pj0xKSYmKHQrPXQpKTEmciYmKG4rPXQpO3JldHVybiBufSkpLGskPUJqKFwiXCIuc2xpY2UpLEIkPUJqKDEuLnRvRml4ZWQpLEYkPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMD09PXQ/bjp0JTI9PTE/RiQoZSx0LTEsbiplKTpGJChlKmUsdC8yLG4pfSxUJD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPS0xLG89bjsrK3I8Njspbys9dCplW3JdLGVbcl09byUxZTcsbz1BJChvLzFlNyl9LF8kPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTYscj0wOy0tbj49MDspcis9ZVtuXSxlW25dPUEkKHIvdCkscj1yJXQqMWU3fSxQJD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9NixuPVwiXCI7LS10Pj0wOylpZihcIlwiIT09bnx8MD09PXR8fDAhPT1lW3RdKXt2YXIgcj1DJChlW3RdKTtuPVwiXCI9PT1uP3I6bitPJChcIjBcIiw3LXIubGVuZ3RoKStyfXJldHVybiBufTtmdW5jdGlvbiBqJChlLHQpe3JldHVyblwidy1lLWltYWdlLWNvbnRhaW5lci1cIitRTy5maW5kS2V5KGUsdCkuaWR9TEkoe3RhcmdldDpcIk51bWJlclwiLHByb3RvOiEwLGZvcmNlZDp2aigoZnVuY3Rpb24oKXtyZXR1cm5cIjAuMDAwXCIhPT1CJCg4ZS01LDMpfHxcIjFcIiE9PUIkKC45LDApfHxcIjEuMjVcIiE9PUIkKDEuMjU1LDIpfHxcIjEwMDAwMDAwMDAwMDAwMDAxMjhcIiE9PUIkKDB4ZGUwYjZiM2E3NjQwMDgwLDApfSkpfHwhdmooKGZ1bmN0aW9uKCl7QiQoe30pfSkpfSx7dG9GaXhlZDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxpPUQkKHRoaXMpLGE9Y0koZSksdT1bMCwwLDAsMCwwLDBdLHM9XCJcIixsPVwiMFwiO2lmKGE8MHx8YT4yMCl0aHJvdyB4JChcIkluY29ycmVjdCBmcmFjdGlvbiBkaWdpdHNcIik7aWYoaSE9aSlyZXR1cm5cIk5hTlwiO2lmKGk8PS0xZTIxfHxpPj0xZTIxKXJldHVybiBDJChpKTtpZihpPDAmJihzPVwiLVwiLGk9LWkpLGk+MWUtMjEpaWYobj0odD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPWU7bj49NDA5NjspdCs9MTIsbi89NDA5Njtmb3IoO24+PTI7KXQrPTEsbi89MjtyZXR1cm4gdH0oaSpGJCgyLDY5LDEpKS02OSk8MD9pKkYkKDIsLXQsMSk6aS9GJCgyLHQsMSksbio9NDUwMzU5OTYyNzM3MDQ5NiwodD01Mi10KT4wKXtmb3IoVCQodSwwLG4pLHI9YTtyPj03OylUJCh1LDFlNywwKSxyLT03O2ZvcihUJCh1LEYkKDEwLHIsMSksMCkscj10LTE7cj49MjM7KV8kKHUsMTw8MjMpLHItPTIzO18kKHUsMTw8ciksVCQodSwxLDEpLF8kKHUsMiksbD1QJCh1KX1lbHNlIFQkKHUsMCxuKSxUJCh1LDE8PC10LDApLGw9UCQodSkrTyQoXCIwXCIsYSk7cmV0dXJuIGE+MD9zKygobz1sLmxlbmd0aCk8PWE/XCIwLlwiK08kKFwiMFwiLGEtbykrbDprJChsLDAsby1hKStcIi5cIitrJChsLG8tYSkpOnMrbH19KTt2YXIgTiQ9e3R5cGU6XCJpbWFnZVwiLHJlbmRlckVsZW06ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUsbz1yLnNyYyxpPXIuYWx0LGE9dm9pZCAwPT09aT9cIlwiOmksdT1yLmhyZWYscz12b2lkIDA9PT11P1wiXCI6dSxsPXIuc3R5bGUsYz12b2lkIDA9PT1sP3t9OmwsZj1jLndpZHRoLGQ9dm9pZCAwPT09Zj9cIlwiOmYscD1jLmhlaWdodCxoPXZvaWQgMD09PXA/XCJcIjpwLGc9UU8uaXNOb2RlU2VsZWN0ZWQobixlKSx2PXt9O2QmJih2LndpZHRoPVwiMTAwJVwiKSxoJiYodi5oZWlnaHQ9XCIxMDAlXCIpO3ZhciB5PVBnKFwiaW1nXCIse3N0eWxlOnYsc3JjOm8sYWx0OmEsXCJkYXRhLWhyZWZcIjpzfSksbT1uLmlzRGlzYWJsZWQoKTtyZXR1cm4gZyYmIW0/ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89TXAoXCJib2R5XCIpLGk9aiQoZSx0KSxhPXIud2lkdGgsdT1yLmhlaWdodCxzPTAsbD0wLGM9MCxmPSExLGQ9bnVsbDtmdW5jdGlvbiBwKHQpe2Q9ZnVuY3Rpb24oKXt2YXIgZT1NcChcIiNcIitpKTtpZigwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgaW1hZ2UgY29udGFpbmVyIGVsZW1cIik7cmV0dXJuIGV9KCkscz10O3ZhciBuPWQuZmluZChcImltZ1wiKTtpZigwPT09bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgaW1hZ2UgZWxlbVwiKTtsPW4ud2lkdGgoKSxjPW4uaGVpZ2h0KCksby5vbihcIm1vdXNlbW92ZVwiLGgpLG8ub24oXCJtb3VzZXVwXCIsZyk7dmFyIHI9UU8uZ2V0SG92ZXJiYXIoZSk7ciYmci5oaWRlQW5kQ2xlYW4oKX12YXIgaD1lZygoZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciB0PWUuY2xpZW50WCxuPWwrKGY/cy10OnQtcykscj1jKihuL2wpO251bGwhPWQmJihuPD0xNXx8cjw9MTV8fChkLmNzcyhcIndpZHRoXCIsbitcInB4XCIpLGQuY3NzKFwiaGVpZ2h0XCIscitcInB4XCIpKSl9KSwxMDApO2Z1bmN0aW9uIGcobil7aWYoby5vZmYoXCJtb3VzZW1vdmVcIixoKSxudWxsIT1kKXt2YXIgcj1kLndpZHRoKCkudG9GaXhlZCgyKSxpPWQuaGVpZ2h0KCkudG9GaXhlZCgyKSxhPXtzdHlsZTpvTShvTSh7fSx0LnN0eWxlKSx7d2lkdGg6citcInB4XCIsaGVpZ2h0OmkrXCJweFwifSl9O21kLnNldE5vZGVzKGUsYSx7YXQ6UU8uZmluZFBhdGgoZSx0KX0pLG8ub2ZmKFwibW91c2V1cFwiLGcpfX12YXIgdj17fTtyZXR1cm4gYSYmKHYud2lkdGg9YSksdSYmKHYuaGVpZ2h0PXUpLFBnKFwiZGl2XCIse2lkOmksc3R5bGU6dixjbGFzc05hbWU6XCJ3LWUtaW1hZ2UtY29udGFpbmVyIHctZS1zZWxlY3RlZC1pbWFnZS1jb250YWluZXJcIixvbjp7bW91c2Vkb3duOmZ1bmN0aW9uKGUpe3ZhciB0PU1wKGUudGFyZ2V0KTt0Lmhhc0NsYXNzKFwidy1lLWltYWdlLWRyYWdnZXJcIikmJihlLnByZXZlbnREZWZhdWx0KCksKHQuaGFzQ2xhc3MoXCJsZWZ0LXRvcFwiKXx8dC5oYXNDbGFzcyhcImxlZnQtYm90dG9tXCIpKSYmKGY9ITApLHAoZS5jbGllbnRYKSl9fX0sbixQZyhcImRpdlwiLHtjbGFzc05hbWU6XCJ3LWUtaW1hZ2UtZHJhZ2dlciBsZWZ0LXRvcFwifSksUGcoXCJkaXZcIix7Y2xhc3NOYW1lOlwidy1lLWltYWdlLWRyYWdnZXIgcmlnaHQtdG9wXCJ9KSxQZyhcImRpdlwiLHtjbGFzc05hbWU6XCJ3LWUtaW1hZ2UtZHJhZ2dlciBsZWZ0LWJvdHRvbVwifSksUGcoXCJkaXZcIix7Y2xhc3NOYW1lOlwidy1lLWltYWdlLWRyYWdnZXIgcmlnaHQtYm90dG9tXCJ9KSl9KG4sZSx5LHt3aWR0aDpkLGhlaWdodDpofSk6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89ci53aWR0aCxpPXIuaGVpZ2h0LGE9e307cmV0dXJuIG8mJihhLndpZHRoPW8pLGkmJihhLmhlaWdodD1pKSxQZyhcImRpdlwiLHtpZDpqJChlLHQpLHN0eWxlOmEsY2xhc3NOYW1lOlwidy1lLWltYWdlLWNvbnRhaW5lclwifSxuKX0obixlLHkse3dpZHRoOmQsaGVpZ2h0Omh9KX19LEkkPXtzZWxlY3RvcjpcImltZzpub3QoW2RhdGEtdy1lLXR5cGVdKVwiLHBhcnNlRWxlbUh0bWw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU1wKGUpLG89ci5hdHRyKFwiZGF0YS1ocmVmXCIpfHxcIlwiO3JldHVybiBvPWRlY29kZVVSSUNvbXBvbmVudChvKSx7dHlwZTpcImltYWdlXCIsc3JjOnIuYXR0cihcInNyY1wiKXx8XCJcIixhbHQ6ci5hdHRyKFwiYWx0XCIpfHxcIlwiLGhyZWY6byxzdHlsZTp7d2lkdGg6ZU0ocixcIndpZHRoXCIpLGhlaWdodDplTShyLFwiaGVpZ2h0XCIpfSxjaGlsZHJlbjpbe3RleHQ6XCJcIn1dfX19O2Z1bmN0aW9uIEwkKGUsdCxuLHIsbyl7cmV0dXJuIHZvaWQgMD09PXImJihyPVwiXCIpLHZvaWQgMD09PW8mJihvPVwiXCIpLGlNKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgaSxhO3JldHVybiBhTSh0aGlzLChmdW5jdGlvbih1KXtzd2l0Y2godS5sYWJlbCl7Y2FzZSAwOnJldHVybihpPXQuZ2V0TWVudUNvbmZpZyhlKS5jaGVja0ltYWdlKT9bNCxpKG4scixvKV06WzMsMl07Y2FzZSAxOmlmKFwic3RyaW5nXCI9PXR5cGVvZihhPXUuc2VudCgpKSlyZXR1cm4gdC5hbGVydChhLFwiZXJyb3JcIiksWzIsITFdO2lmKG51bGw9PWEpcmV0dXJuWzIsITFdO3UubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzIsITBdfX0pKX0pKX1mdW5jdGlvbiBSJChlLHQsbil7cmV0dXJuIGlNKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgcjtyZXR1cm4gYU0odGhpcywoZnVuY3Rpb24obyl7c3dpdGNoKG8ubGFiZWwpe2Nhc2UgMDpyZXR1cm4ocj10LmdldE1lbnVDb25maWcoZSkucGFyc2VJbWFnZVNyYyk/WzQscihuKV06WzMsMl07Y2FzZSAxOnJldHVyblsyLG8uc2VudCgpXTtjYXNlIDI6cmV0dXJuWzIsbl19fSkpfSkpfWZ1bmN0aW9uIE0kKGUsdCxuLHIpe3JldHVybiB2b2lkIDA9PT1uJiYobj1cIlwiKSx2b2lkIDA9PT1yJiYocj1cIlwiKSxpTSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIG8saSxhO3JldHVybiBhTSh0aGlzLChmdW5jdGlvbih1KXtzd2l0Y2godS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LEwkKFwiaW5zZXJ0SW1hZ2VcIixlLHQsbixyKV07Y2FzZSAxOnJldHVybiB1LnNlbnQoKT9bNCxSJChcImluc2VydEltYWdlXCIsZSx0KV06WzJdO2Nhc2UgMjpyZXR1cm4gbz11LnNlbnQoKSxpPXt0eXBlOlwiaW1hZ2VcIixzcmM6YSQobyksaHJlZjpyLGFsdDpuLHN0eWxlOnt9LGNoaWxkcmVuOlt7dGV4dDpcIlwifV19LG51bGw9PT1lLnNlbGVjdGlvbiYmZS5yZXN0b3JlU2VsZWN0aW9uKCksUU8uZ2V0U2VsZWN0ZWROb2RlQnlUeXBlKGUsXCJpbWFnZVwiKSYmZS5tb3ZlKDEpLHokKGUpfHwobWQuaW5zZXJ0Tm9kZXMoZSxpKSwoYT1lLmdldE1lbnVDb25maWcoXCJpbnNlcnRJbWFnZVwiKS5vbkluc2VydGVkSW1hZ2UpJiZhKGkpKSxbMl19fSkpfSkpfWZ1bmN0aW9uIHokKGUpe3ZhciB0PWUuc2VsZWN0aW9uO3JldHVybiBudWxsPT10fHwhcWYuaXNDb2xsYXBzZWQodCl8fCEhc00oQmYubm9kZXMoZSx7bWF0Y2g6ZnVuY3Rpb24odCl7dmFyIG49UU8uZ2V0Tm9kZVR5cGUodCk7cmV0dXJuXCJjb2RlXCI9PT1ufHxcInByZVwiPT09bnx8XCJsaW5rXCI9PT1ufHxcImxpc3QtaXRlbVwiPT09bnx8ISFuLnN0YXJ0c1dpdGgoXCJoZWFkZXJcIil8fFwiYmxvY2txdW90ZVwiPT09bnx8ISFCZi5pc1ZvaWQoZSx0KX0sdW5pdmVyc2FsOiEwfSksMSlbMF19ZnVuY3Rpb24gJCQoKXtyZXR1cm4gaSQoXCJ3LWUtaW5zZXJ0LWltYWdlXCIpfXZhciBIJD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnRpdGxlPUhQKFwiaW1hZ2UubmV0SW1hZ2VcIiksdGhpcy5pY29uU3ZnPSc8c3ZnIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCI+PHBhdGggZD1cIk05NTkuODc3IDEyOGwwLjEyMyAwLjEyM3Y3NjcuNzc1bC0wLjEyMyAwLjEyMkg2NC4xMDJsLTAuMTIyLTAuMTIyVjEyOC4xMjNsMC4xMjItMC4xMjNoODk1Ljc3NXpNOTYwIDY0SDY0QzI4Ljc5NSA2NCAwIDkyLjc5NSAwIDEyOHY3NjhjMCAzNS4yMDUgMjguNzk1IDY0IDY0IDY0aDg5NmMzNS4yMDUgMCA2NC0yOC43OTUgNjQtNjRWMTI4YzAtMzUuMjA1LTI4Ljc5NS02NC02NC02NHpNODMyIDI4OC4wMWMwIDUzLjAyMy00Mi45ODggOTYuMDEtOTYuMDEgOTYuMDFzLTk2LjAxLTQyLjk4Ny05Ni4wMS05Ni4wMVM2ODIuOTY3IDE5MiA3MzUuOTkgMTkyIDgzMiAyMzQuOTg4IDgzMiAyODguMDF6TTg5NiA4MzJIMTI4VjcwNGwyMjQuMDEtMzg0IDI1NiAzMjBoNjRsMjI0LjAxLTE5MnpcIj48L3BhdGg+PC9zdmc+Jyx0aGlzLnRhZz1cImJ1dHRvblwiLHRoaXMuc2hvd01vZGFsPSEwLHRoaXMubW9kYWxXaWR0aD0zMDAsdGhpcy4kY29udGVudD1udWxsLHRoaXMuc3JjSW5wdXRJZD0kJCgpLHRoaXMuYWx0SW5wdXRJZD0kJCgpLHRoaXMuaHJlZklucHV0SWQ9JCQoKSx0aGlzLmJ1dHRvbklkPSQkKCl9cmV0dXJuIGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVyblwiXCJ9LGUucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiExfSxlLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGUsdCl7fSxlLnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKGUpe3JldHVybiB6JChlKX0sZS5wcm90b3R5cGUuZ2V0TW9kYWxQb3NpdGlvbk5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLmdldE1vZGFsQ29udGVudEVsZW09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMscj1uLnNyY0lucHV0SWQsbz1uLmFsdElucHV0SWQsaT1uLmhyZWZJbnB1dElkLGE9bi5idXR0b25JZCx1PXNNKFNfKEhQKFwiaW1hZ2Uuc3JjXCIpLHIpLDIpLHM9dVswXSxsPU1wKHVbMV0pLGM9c00oU18oSFAoXCJpbWFnZS5kZXNjXCIpLG8pLDIpLGY9Y1swXSxkPU1wKGNbMV0pLHA9c00oU18oSFAoXCJpbWFnZS5saW5rXCIpLGkpLDIpLGg9cFswXSxnPU1wKHBbMV0pLHY9c00oQ18oYSxIUChcImNvbW1vbi5va1wiKSksMSlbMF07aWYobnVsbD09dGhpcy4kY29udGVudCl7dmFyIHk9TXAoXCI8ZGl2PjwvZGl2PlwiKTt5Lm9uKFwiY2xpY2tcIixcIiNcIithLChmdW5jdGlvbihuKXtuLnByZXZlbnREZWZhdWx0KCk7dmFyIGE9eS5maW5kKFwiI1wiK3IpLnZhbCgpLnRyaW0oKSx1PXkuZmluZChcIiNcIitvKS52YWwoKS50cmltKCkscz15LmZpbmQoXCIjXCIraSkudmFsKCkudHJpbSgpO3QuaW5zZXJ0SW1hZ2UoZSxhLHUscyksZS5oaWRlUGFuZWxPck1vZGFsKCl9KSksdGhpcy4kY29udGVudD15fXZhciBtPXRoaXMuJGNvbnRlbnQ7cmV0dXJuIG0uZW1wdHkoKSxtLmFwcGVuZChzKSxtLmFwcGVuZChmKSxtLmFwcGVuZChoKSxtLmFwcGVuZCh2KSxsLnZhbChcIlwiKSxkLnZhbChcIlwiKSxnLnZhbChcIlwiKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2wuZm9jdXMoKX0pKSxtWzBdfSxlLnByb3RvdHlwZS5pbnNlcnRJbWFnZT1mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1uJiYobj1cIlwiKSx2b2lkIDA9PT1yJiYocj1cIlwiKSx0JiYoZS5yZXN0b3JlU2VsZWN0aW9uKCksdGhpcy5pc0Rpc2FibGVkKGUpfHxNJChlLHQsbixyKSl9LGV9KCksViQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50aXRsZT1IUChcImltYWdlLmRlbGV0ZVwiKSx0aGlzLmljb25Tdmc9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTgyNi44MDMyIDM1Ni41MzEyYy0xOS4zMjggMC0zNi4zNzc2IDE1LjY5MjgtMzYuMzc3NiAzNS4wNDY0djUyNC4yNjI0YzAgMTkuMzI4LTE2IDM0LjU2LTM1LjMyOCAzNC41NkgyNjQuOTM0NGMtMTkuMzI4IDAtMzUuNTA3Mi0xNS4zMDg4LTM1LjUwNzItMzQuNTZWMzkwLjA0MTZjMC0xOS4zMjgtMTQuMTU2OC0zNS4wNDY0LTMzLjUxMDQtMzUuMDQ2NHMtMzMuNTEwNCAxNS42OTI4LTMzLjUxMDQgMzUuMDQ2NFY5MTUuNzEyYzAgNTcuOTMyOCA0NC42MjA4IDEwOC4yODggMTAyLjUyOCAxMDguMjg4SDc1NS4yYzU3LjkzMjggMCAxMDguMDgzMi01MC40NTc2IDEwOC4wODMyLTEwOC4yODhWMzkxLjQ3NTJjLTAuMTAyNC0xOS4yNTEyLTE3LjEyNjQtMzQuOTQ0LTM2LjQ4LTM0Ljk0NHpcIiBwLWlkPVwiOTU3N1wiPjwvcGF0aD48cGF0aCBkPVwiTTQzNy4xNzEyIDc3NS43NTY4VjM5MC42MDQ4YzAtMTkuMzI4LTE0LjE1NjgtMzUuMDQ2NC0zMy41MTA0LTM1LjA0NjRzLTMzLjUxMDQgMTUuNjE2LTMzLjUxMDQgMzUuMDQ2NHYzODUuMTUyYzAgMTkuMzI4IDE0LjE1NjggMzUuMDQ2NCAzMy41MTA0IDM1LjA0NjRzMzMuNTEwNC0xNS43MTg0IDMzLjUxMDQtMzUuMDQ2NHpNNjQ5LjcwMjQgNzc1Ljc1NjhWMzkwLjYwNDhjMC0xOS4zMjgtMTcuMDQ5Ni0zNS4wNDY0LTM2LjM3NzYtMzUuMDQ2NHMtMzYuMzc3NiAxNS42MTYtMzYuMzc3NiAzNS4wNDY0djM4NS4xNTJjMCAxOS4zMjggMTcuMDQ5NiAzNS4wNDY0IDM2LjM3NzYgMzUuMDQ2NHMzNi4zNzc2LTE1LjcxODQgMzYuMzc3Ni0zNS4wNDY0ek05NjUuMDQzMiAyMTcuMDM2OGgtMTc0LjYxNzZWMTQ1LjUxMDRjMC01Ny45MzI4LTQ3LjIwNjQtMTAxLjc2LTEwNC42NTI4LTEwMS43NmgtMzUwLjk3NmMtNTcuODMwNCAwLTEwNS4zOTUyIDQzLjg1MjgtMTA1LjM5NTIgMTAxLjc2djcxLjUyNjRINTQuNzg0Yy0xOS40MzA0IDAtMzUuMDQ2NCAxNC4xNTY4LTM1LjA0NjQgMzMuNTEwNCAwIDE5LjMyOCAxNS42MTYgMzMuNTEwNCAzNS4wNDY0IDMzLjUxMDRoOTEwLjM2MTZjMTkuMzI4IDAgMzUuMDQ2NC0xNC4xNTY4IDM1LjA0NjQtMzMuNTEwNCAwLTE5LjM1MzYtMTUuNjkyOC0zMy41MTA0LTM1LjE0ODgtMzMuNTEwNHogbS0yNDcuMzcyOCAwSDI5Ny4zOTUyVjE0NS41MTA0YzAtMTkuMzI4IDE4LjIwMTYtMzQuNzY0OCAzNy40MjcyLTM0Ljc2NDhoMzUwLjk3NmMxOS4xNDg4IDAgMzEuODcyIDE1LjEyOTYgMzEuODcyIDM0Ljc2NDh2NzEuNTI2NHpcIj48L3BhdGg+PC9zdmc+Jyx0aGlzLnRhZz1cImJ1dHRvblwifXJldHVybiBlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm5cIlwifSxlLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaXNEaXNhYmxlZD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5zZWxlY3Rpb258fG51bGw9PVFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShlLFwiaW1hZ2VcIil9LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXt0aGlzLmlzRGlzYWJsZWQoZSl8fG1kLnJlbW92ZU5vZGVzKGUse21hdGNoOmZ1bmN0aW9uKGUpe3JldHVybiBRTy5jaGVja05vZGVUeXBlKGUsXCJpbWFnZVwiKX19KX0sZX0oKTtmdW5jdGlvbiBVJCgpe3JldHVybiBpJChcInctZS1lZGl0LWltYWdlXCIpfXZhciBXJD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnRpdGxlPUhQKFwiaW1hZ2UuZWRpdFwiKSx0aGlzLmljb25Tdmc9ak0sdGhpcy50YWc9XCJidXR0b25cIix0aGlzLnNob3dNb2RhbD0hMCx0aGlzLm1vZGFsV2lkdGg9MzAwLHRoaXMuJGNvbnRlbnQ9bnVsbCx0aGlzLnNyY0lucHV0SWQ9VSQoKSx0aGlzLmFsdElucHV0SWQ9VSQoKSx0aGlzLmhyZWZJbnB1dElkPVUkKCksdGhpcy5idXR0b25JZD1VJCgpfXJldHVybiBlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm5cIlwifSxlLnByb3RvdHlwZS5nZXRJbWFnZU5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShlLFwiaW1hZ2VcIil9LGUucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiExfSxlLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGUsdCl7fSxlLnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2VsZWN0aW9uO3JldHVybiBudWxsPT10fHwhcWYuaXNDb2xsYXBzZWQodCl8fG51bGw9PVFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShlLFwiaW1hZ2VcIil9LGUucHJvdG90eXBlLmdldE1vZGFsUG9zaXRpb25Ob2RlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldEltYWdlTm9kZShlKX0sZS5wcm90b3R5cGUuZ2V0TW9kYWxDb250ZW50RWxlbT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcyxyPW4uc3JjSW5wdXRJZCxvPW4uYWx0SW5wdXRJZCxpPW4uaHJlZklucHV0SWQsYT1uLmJ1dHRvbklkLHU9dGhpcy5nZXRJbWFnZU5vZGUoZSk7aWYobnVsbD09dSl0aHJvdyBuZXcgRXJyb3IoXCJOb3QgZm91bmQgc2VsZWN0ZWQgaW1hZ2Ugbm9kZVwiKTt2YXIgcz1zTShTXyhIUChcImltYWdlLnNyY1wiKSxyKSwyKSxsPXNbMF0sYz1NcChzWzFdKSxmPXNNKFNfKEhQKFwiaW1hZ2UuZGVzY1wiKSxvKSwyKSxkPWZbMF0scD1NcChmWzFdKSxoPXNNKFNfKEhQKFwiaW1hZ2UubGlua1wiKSxpKSwyKSxnPWhbMF0sdj1NcChoWzFdKSx5PXNNKENfKGEsSFAoXCJjb21tb24ub2tcIikpLDEpWzBdO2lmKG51bGw9PXRoaXMuJGNvbnRlbnQpe3ZhciBtPU1wKFwiPGRpdj48L2Rpdj5cIik7bS5vbihcImNsaWNrXCIsXCIjXCIrYSwoZnVuY3Rpb24obil7bi5wcmV2ZW50RGVmYXVsdCgpO3ZhciBhPW0uZmluZChcIiNcIityKS52YWwoKSx1PW0uZmluZChcIiNcIitvKS52YWwoKSxzPW0uZmluZChcIiNcIitpKS52YWwoKTt0LnVwZGF0ZUltYWdlKGUsYSx1LHMpLGUuaGlkZVBhbmVsT3JNb2RhbCgpfSkpLHRoaXMuJGNvbnRlbnQ9bX12YXIgYj10aGlzLiRjb250ZW50O2IuZW1wdHkoKSxiLmFwcGVuZChsKSxiLmFwcGVuZChkKSxiLmFwcGVuZChnKSxiLmFwcGVuZCh5KTt2YXIgdz11LEU9dy5zcmMsRD13LmFsdCxTPXZvaWQgMD09PUQ/XCJcIjpELHg9dy5ocmVmLEM9dm9pZCAwPT09eD9cIlwiOng7cmV0dXJuIGMudmFsKEUpLHAudmFsKFMpLHYudmFsKEMpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7Yy5mb2N1cygpfSkpLGJbMF19LGUucHJvdG90eXBlLnVwZGF0ZUltYWdlPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dm9pZCAwPT09biYmKG49XCJcIiksdm9pZCAwPT09ciYmKHI9XCJcIiksdm9pZCAwPT09byYmKG89e30pLHQmJihlLnJlc3RvcmVTZWxlY3Rpb24oKSx0aGlzLmlzRGlzYWJsZWQoZSl8fGZ1bmN0aW9uKGUsdCxuLHIsbyl7dm9pZCAwPT09biYmKG49XCJcIiksdm9pZCAwPT09ciYmKHI9XCJcIiksdm9pZCAwPT09byYmKG89e30pLGlNKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgaSxhLHUscyxsLGM7cmV0dXJuIGFNKHRoaXMsKGZ1bmN0aW9uKGYpe3N3aXRjaChmLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsTCQoXCJlZGl0SW1hZ2VcIixlLHQsbixyKV07Y2FzZSAxOnJldHVybiBmLnNlbnQoKT9bNCxSJChcImVkaXRJbWFnZVwiLGUsdCldOlsyXTtjYXNlIDI6cmV0dXJuIGk9Zi5zZW50KCksbnVsbD09KGE9UU8uZ2V0U2VsZWN0ZWROb2RlQnlUeXBlKGUsXCJpbWFnZVwiKSl8fCh1PWEuc3R5bGUscz17c3JjOmksYWx0Om4saHJlZjpyLHN0eWxlOm9NKG9NKHt9LHZvaWQgMD09PXU/e306dSksbyl9LG1kLnNldE5vZGVzKGUscyx7bWF0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFFPLmNoZWNrTm9kZVR5cGUoZSxcImltYWdlXCIpfX0pLGw9UU8uZ2V0U2VsZWN0ZWROb2RlQnlUeXBlKGUsXCJpbWFnZVwiKSwoYz1lLmdldE1lbnVDb25maWcoXCJlZGl0SW1hZ2VcIikub25VcGRhdGVkSW1hZ2UpJiZjKGwpKSxbMl19fSkpfSkpfShlLHQsbixyLG8pKX0sZX0oKSxHJD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnRpdGxlPUhQKFwiaW1hZ2Uudmlld0xpbmtcIiksdGhpcy5pY29uU3ZnPU5NLHRoaXMudGFnPVwiYnV0dG9uXCJ9cmV0dXJuIGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKGUpe3ZhciB0PVFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShlLFwiaW1hZ2VcIik7cmV0dXJuIHQmJnQuaHJlZnx8XCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuc2VsZWN0aW9ufHwhdGhpcy5nZXRWYWx1ZShlKX0sZS5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihlLHQpe2lmKCF0aGlzLmlzRGlzYWJsZWQoZSkpe2lmKCF0fHxcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoXCJWaWV3IGltYWdlIGxpbmsgZmFpbGVkLCBpbWFnZS5ocmVmIGlzICdcIit0K1wiJ1wiKTt3aW5kb3cub3Blbih0LFwiX2JsYW5rXCIpfX0sZX0oKSxxJD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnRhZz1cImJ1dHRvblwifXJldHVybiBlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm5cIlwifSxlLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZ2V0U2VsZWN0ZWROb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBRTy5nZXRTZWxlY3RlZE5vZGVCeVR5cGUoZSxcImltYWdlXCIpfSxlLnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLnNlbGVjdGlvbnx8bnVsbD09dGhpcy5nZXRTZWxlY3RlZE5vZGUoZSl9LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5pc0Rpc2FibGVkKGUpKXt2YXIgbj10aGlzLmdldFNlbGVjdGVkTm9kZShlKTtpZihudWxsIT1uKXt2YXIgcj1RTy5nZXRIb3ZlcmJhcihlKTtyJiZyLmhpZGVBbmRDbGVhbigpO3ZhciBvPW4uc3R5bGUsaT17c3R5bGU6b00ob00oe30sdm9pZCAwPT09bz97fTpvKSx7d2lkdGg6dGhpcy52YWx1ZSxoZWlnaHQ6XCJcIn0pfTttZC5zZXROb2RlcyhlLGkse21hdGNoOmZ1bmN0aW9uKGUpe3JldHVybiBRTy5jaGVja05vZGVUeXBlKGUsXCJpbWFnZVwiKX19KX19fSxlfSgpLEskPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQudGl0bGU9XCIzMCVcIix0LnZhbHVlPVwiMzAlXCIsdH1yZXR1cm4gck0odCxlKSx0fShxJCksWSQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC50aXRsZT1cIjUwJVwiLHQudmFsdWU9XCI1MCVcIix0fXJldHVybiByTSh0LGUpLHR9KHEkKSxYJD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LnRpdGxlPVwiMTAwJVwiLHQudmFsdWU9XCIxMDAlXCIsdH1yZXR1cm4gck0odCxlKSx0fShxJCksWiQ9e29uSW5zZXJ0ZWRJbWFnZTpmdW5jdGlvbihlKXt9LG9uVXBkYXRlZEltYWdlOmZ1bmN0aW9uKGUpe30sY2hlY2tJbWFnZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuITB9LHBhcnNlSW1hZ2VTcmM6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxKJD17cmVuZGVyRWxlbXM6W04kXSxlbGVtc1RvSHRtbDpbe3R5cGU6XCJpbWFnZVwiLGVsZW1Ub0h0bWw6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLHI9bi5zcmMsbz1uLmFsdCxpPXZvaWQgMD09PW8/XCJcIjpvLGE9bi5ocmVmLHU9dm9pZCAwPT09YT9cIlwiOmEscz1uLnN0eWxlLGw9dm9pZCAwPT09cz97fTpzLGM9bC53aWR0aCxmPXZvaWQgMD09PWM/XCJcIjpjLGQ9bC5oZWlnaHQscD12b2lkIDA9PT1kP1wiXCI6ZCxoPVwiXCI7cmV0dXJuIGYmJihoKz1cIndpZHRoOiBcIitmK1wiO1wiKSxwJiYoaCs9XCJoZWlnaHQ6IFwiK3ArXCI7XCIpLCc8aW1nIHNyYz1cIicrcisnXCIgYWx0PVwiJytpKydcIiBkYXRhLWhyZWY9XCInK3UrJ1wiIHN0eWxlPVwiJytoKydcIi8+J319XSxwYXJzZUVsZW1zSHRtbDpbSSRdLG1lbnVzOlt7a2V5OlwiaW5zZXJ0SW1hZ2VcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIJH0sY29uZmlnOlokfSx7a2V5OlwiZGVsZXRlSW1hZ2VcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWJH19LHtrZXk6XCJlZGl0SW1hZ2VcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXJH0sY29uZmlnOlokfSx7a2V5Olwidmlld0ltYWdlTGlua1wiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEckfX0se2tleTpcImltYWdlV2lkdGgzMFwiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEskfX0se2tleTpcImltYWdlV2lkdGg1MFwiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFkkfX0se2tleTpcImltYWdlV2lkdGgxMDBcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYJH19XSxlZGl0b3JQbHVnaW46ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pc0lubGluZSxuPWUuaXNWb2lkO2UuaW5zZXJ0Tm9kZTt2YXIgcj1lO3JldHVybiByLmlzSW5saW5lPWZ1bmN0aW9uKGUpe3JldHVyblwiaW1hZ2VcIj09PWUudHlwZXx8dChlKX0sci5pc1ZvaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJpbWFnZVwiPT09ZS50eXBlfHxuKGUpfSxyfX0sUSQ9e3R5cGU6XCJ0b2RvXCIscmVuZGVyRWxlbTpmdW5jdGlvbihlLHQsbil7dmFyIHI9ITE7bi5pc0Rpc2FibGVkKCkmJihyPSEwKTt2YXIgbz1QZyhcImRpdlwiLHtzdHlsZTp7bWFyZ2luOlwiNXB4IDBcIn19LFBnKFwic3BhblwiLHtjb250ZW50RWRpdGFibGU6ITEsc3R5bGU6e21hcmdpblJpZ2h0OlwiMC41ZW1cIn19LFBnKFwiaW5wdXRcIix7dHlwZTpcImNoZWNrYm94XCIsY2hlY2tlZDplLmNoZWNrZWQsZGlzYWJsZWQ6cixvbjp7Y2hhbmdlOmZ1bmN0aW9uKHQpe3ZhciByPVFPLmZpbmRQYXRoKG4sZSksbz17Y2hlY2tlZDp0LnRhcmdldC5jaGVja2VkfTttZC5zZXROb2RlcyhuLG8se2F0OnJ9KX19fSkpLFBnKFwic3BhblwiLG51bGwsdCkpO3JldHVybiBvfX0sZUg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50aXRsZT1IUChcInRvZG8udG9kb1wiKSx0aGlzLmljb25Tdmc9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTI3OC43NTU1NTYgNDAzLjkxMTExMWwtNzkuNjQ0NDQ1IDc5LjY0NDQ0NUw0NTUuMTExMTExIDczOS41NTU1NTZsNTY4Ljg4ODg4OS01NjguODg4ODg5LTc5LjY0NDQ0NC03OS42NDQ0NDVMNDU1LjExMTExMSA1ODAuMjY2NjY3bC0xNzYuMzU1NTU1LTE3Ni4zNTU1NTZ6TTkxMC4yMjIyMjIgOTEwLjIyMjIyMkgxMTMuNzc3Nzc4VjExMy43Nzc3NzhoNTY4Ljg4ODg4OVYwSDExMy43Nzc3NzhDNTEuMiAwIDAgNTEuMiAwIDExMy43Nzc3Nzh2Nzk2LjQ0NDQ0NGMwIDYyLjU3Nzc3OCA1MS4yIDExMy43Nzc3NzggMTEzLjc3Nzc3OCAxMTMuNzc3Nzc4aDc5Ni40NDQ0NDRjNjIuNTc3Nzc4IDAgMTEzLjc3Nzc3OC01MS4yIDExMy43Nzc3NzgtMTEzLjc3Nzc3OFY0NTUuMTExMTExaC0xMTMuNzc3Nzc4djQ1NS4xMTExMTF6XCI+PC9wYXRoPjwvc3ZnPicsdGhpcy50YWc9XCJidXR0b25cIn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuISFRTy5nZXRTZWxlY3RlZE5vZGVCeVR5cGUoZSxcInRvZG9cIil9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuc2VsZWN0aW9ufHwhIVFPLmdldFNlbGVjdGVkRWxlbXMoZSkuc29tZSgoZnVuY3Rpb24odCl7aWYoQmYuaXNWb2lkKGUsdCkmJkJmLmlzQmxvY2soZSx0KSlyZXR1cm4hMDt2YXIgbj10LnR5cGU7cmV0dXJuISFbXCJwcmVcIixcInRhYmxlXCIsXCJsaXN0LWl0ZW1cIl0uaW5jbHVkZXMobil8fHZvaWQgMH0pKX0sZS5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuaXNBY3RpdmUoZSk7bWQuc2V0Tm9kZXMoZSx7dHlwZTpuP1wicGFyYWdyYXBoXCI6XCJ0b2RvXCJ9KX0sZX0oKSx0SD17c2VsZWN0b3I6J2RpdltkYXRhLXctZS10eXBlPVwidG9kb1wiXScscGFyc2VFbGVtSHRtbDpmdW5jdGlvbihlLHQsbil7dmFyIHI9TXAoZSk7MD09PSh0PXQuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hIWVkLmlzVGV4dChlKXx8ISFuLmlzSW5saW5lKGUpfSkpKS5sZW5ndGgmJih0PVt7dGV4dDpyLnRleHQoKS5yZXBsYWNlKC9cXHMrL2dtLFwiIFwiKX1dKTt2YXIgbz0hMTtyZXR1cm4gbnVsbCE9ci5maW5kKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKS5hdHRyKFwiY2hlY2tlZFwiKSYmKG89ITApLHt0eXBlOlwidG9kb1wiLGNoZWNrZWQ6byxjaGlsZHJlbjp0fX19LG5IPXtyZW5kZXJFbGVtczpbUSRdLGVsZW1zVG9IdG1sOlt7dHlwZTpcInRvZG9cIixlbGVtVG9IdG1sOmZ1bmN0aW9uKGUsdCl7cmV0dXJuJzxkaXYgZGF0YS13LWUtdHlwZT1cInRvZG9cIj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGlzYWJsZWQgJysoZS5jaGVja2VkP1wiY2hlY2tlZFwiOlwiXCIpK1wiPlwiK3QrXCI8L2Rpdj5cIn19XSxwcmVQYXJzZUh0bWw6W3tzZWxlY3RvcjpcInVsLnctZS10b2RvXCIscHJlUGFyc2VIdG1sOmZ1bmN0aW9uKGUpe3ZhciB0PU1wKGUpLmZpbmQoXCJsaVwiKSxuPU1wKCc8ZGl2IGRhdGEtdy1lLXR5cGU9XCJ0b2RvXCI+PC9kaXY+Jykscj10LmZpbmQoXCJpbnB1dFt0eXBlXVwiKTtyZXR1cm4gbi5hcHBlbmQociksdC5jaGlsZHJlbigpWzBdLnJlbW92ZSgpLG5bMF0uaW5uZXJIVE1MPW5bMF0uaW5uZXJIVE1MK3RbMF0uaW5uZXJIVE1MLG5bMF19fV0scGFyc2VFbGVtc0h0bWw6W3RIXSxtZW51czpbe2tleTpcInRvZG9cIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlSH19XSxlZGl0b3JQbHVnaW46ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kZWxldGVCYWNrd2FyZCxuPWU7cmV0dXJuIG4uZGVsZXRlQmFja3dhcmQ9ZnVuY3Rpb24obil7dmFyIHI9ZS5zZWxlY3Rpb247aWYociYmcWYuaXNDb2xsYXBzZWQocikpe3ZhciBvPVFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShlLFwidG9kb1wiKTtpZihvJiYwPT09TmYuc3RyaW5nKG8pLmxlbmd0aClyZXR1cm4gdm9pZCBtZC5zZXROb2RlcyhlLHt0eXBlOlwicGFyYWdyYXBoXCJ9LHttb2RlOlwiaGlnaGVzdFwifSl9dChuKX0sbn19LHJIPXt0eXBlOlwiYmxvY2txdW90ZVwiLHJlbmRlckVsZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBQZyhcImJsb2NrcXVvdGVcIixudWxsLHQpfX0sb0g9e3NlbGVjdG9yOlwiYmxvY2txdW90ZTpub3QoW2RhdGEtdy1lLXR5cGVdKVwiLHBhcnNlRWxlbUh0bWw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU1wKGUpO3JldHVybiAwPT09KHQ9dC5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiEhZWQuaXNUZXh0KGUpfHwhIW4uaXNJbmxpbmUoZSl9KSkpLmxlbmd0aCYmKHQ9W3t0ZXh0OnIudGV4dCgpLnJlcGxhY2UoL1xccysvZ20sXCIgXCIpfV0pLHt0eXBlOlwiYmxvY2txdW90ZVwiLGNoaWxkcmVuOnR9fX0saUg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50aXRsZT1IUChcImJsb2NrUXVvdGUudGl0bGVcIiksdGhpcy5pY29uU3ZnPSc8c3ZnIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCI+PHBhdGggZD1cIk04OTQuNiA5MDcuMUg2MDUuNGMtMzIuNiAwLTU5LTI2LjQtNTktNTlWNjA4LjJsLTQtMTQuOWMwLTMxNS45IDEyNS41LTQ4NS4xIDM3Ni41LTUwNy41djU5LjhDNzUyLjcgMTgwLjQgNzExLjMgMzE1LjggNzExLjMgNDQyLjR2NDEuMmwzMS41IDEyLjNoMTUxLjhjMzIuNiAwIDU5IDI2LjQgNTkgNTl2MjkzLjJjMCAzMi41LTI2LjQgNTktNTkgNTl6IG0tNDcyIDBIMTMzLjRjLTMyLjYgMC01OS0yNi40LTU5LTU5VjYwOC4ybC00LTE0LjljMC0zMTUuOSAxMjUuNS00ODUuMSAzNzYuNS01MDcuNXY1OS44QzI4MC43IDE4MC40IDIzOS4zIDMxNS44IDIzOS4zIDQ0Mi40djQxLjJsMzEuNSAxMi4zaDE1MS44YzMyLjYgMCA1OSAyNi40IDU5IDU5djI5My4yYzAgMzIuNS0yNi40IDU5LTU5IDU5elwiPjwvcGF0aD48L3N2Zz4nLHRoaXMudGFnPVwiYnV0dG9uXCJ9cmV0dXJuIGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVyblwiXCJ9LGUucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiEhUU8uZ2V0U2VsZWN0ZWROb2RlQnlUeXBlKGUsXCJibG9ja3F1b3RlXCIpfSxlLnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLnNlbGVjdGlvbnx8IXNNKEJmLm5vZGVzKGUse21hdGNoOmZ1bmN0aW9uKGUpe3ZhciB0PVFPLmdldE5vZGVUeXBlKGUpO3JldHVyblwicGFyYWdyYXBoXCI9PT10fHxcImJsb2NrcXVvdGVcIj09PXR9LHVuaXZlcnNhbDohMCxtb2RlOlwiaGlnaGVzdFwifSksMSlbMF19LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5pc0Rpc2FibGVkKGUpKXt2YXIgbj10aGlzLmlzQWN0aXZlKGUpP1wicGFyYWdyYXBoXCI6XCJibG9ja3F1b3RlXCI7bWQuc2V0Tm9kZXMoZSx7dHlwZTpufSx7bW9kZTpcImhpZ2hlc3RcIn0pfX0sZX0oKSxhSD17a2V5OlwiYmxvY2txdW90ZVwiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGlIfX0sdUg9QmooW10uc2xpY2UpLHNIPXVMKFwic2xpY2VcIiksbEg9RE4oXCJzcGVjaWVzXCIpLGNIPWdqLkFycmF5LGZIPU1hdGgubWF4O0xJKHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwLGZvcmNlZDohc0h9LHtzbGljZTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxpPVJqKHRoaXMpLGE9dkkoaSksdT1wSShlLGEpLHM9cEkodm9pZCAwPT09dD9hOnQsYSk7aWYoTUkoaSkmJihuPWkuY29uc3RydWN0b3IsKFFJKG4pJiYobj09PWNIfHxNSShuLnByb3RvdHlwZSkpfHx6aihuKSYmbnVsbD09PShuPW5bbEhdKSkmJihuPXZvaWQgMCksbj09PWNIfHx2b2lkIDA9PT1uKSlyZXR1cm4gdUgoaSx1LHMpO2ZvcihyPW5ldyh2b2lkIDA9PT1uP2NIOm4pKGZIKHMtdSwwKSksbz0wO3U8czt1KyssbysrKXUgaW4gaSYmX1IocixvLGlbdV0pO3JldHVybiByLmxlbmd0aD1vLHJ9fSk7dmFyIGRIPXtyZW5kZXJFbGVtczpbckhdLGVsZW1zVG9IdG1sOlt7dHlwZTpcImJsb2NrcXVvdGVcIixlbGVtVG9IdG1sOmZ1bmN0aW9uKGUsdCl7cmV0dXJuXCI8YmxvY2txdW90ZT5cIit0K1wiPC9ibG9ja3F1b3RlPlwifX1dLHBhcnNlRWxlbXNIdG1sOltvSF0sbWVudXM6W2FIXSxlZGl0b3JQbHVnaW46ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbnNlcnRCcmVhayxuPWUuaW5zZXJ0VGV4dCxyPWU7cmV0dXJuIHIuaW5zZXJ0QnJlYWs9ZnVuY3Rpb24oKXt2YXIgbz1yLnNlbGVjdGlvbjtpZihudWxsPT1vKXJldHVybiB0KCk7dmFyIGk9c00oQmYubm9kZXMoZSx7bWF0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFFPLmNoZWNrTm9kZVR5cGUoZSxcImJsb2NrcXVvdGVcIil9LHVuaXZlcnNhbDohMH0pLDEpWzBdO2lmKCFpKXJldHVybiB0KCk7dmFyIGE9aVswXSx1PVFPLmZpbmRQYXRoKGUsYSkscz1CZi5lbmQoZSx1KTtpZihWZi5lcXVhbHMocyxvLmZvY3VzKSl7dmFyIGw9TmYuc3RyaW5nKGEpO2lmKGwmJlwiXFxuXCI9PT1sLnNsaWNlKC0xKSlyZXR1cm4gZS5kZWxldGVCYWNrd2FyZChcImNoYXJhY3RlclwiKSx2b2lkIG1kLmluc2VydE5vZGVzKHIse3R5cGU6XCJwYXJhZ3JhcGhcIixjaGlsZHJlbjpbe3RleHQ6XCJcIn1dfSx7bW9kZTpcImhpZ2hlc3RcIn0pfW4oXCJcXG5cIil9LHJ9fSxwSD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnRpdGxlPUhQKFwiZW1vdGlvbi50aXRsZVwiKSx0aGlzLmljb25Tdmc9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTUxMiAxMDI0QzIzMC40IDEwMjQgMCA3OTMuNiAwIDUxMlMyMzAuNCAwIDUxMiAwczUxMiAyMzAuNCA1MTIgNTEyLTIzMC40IDUxMi01MTIgNTEyeiBtMC0xMDIuNGMyMjYuNzQyODU3IDAgNDA5LjYtMTgyLjg1NzE0MyA0MDkuNi00MDkuNlM3MzguNzQyODU3IDEwMi40IDUxMiAxMDIuNCAxMDIuNCAyODUuMjU3MTQzIDEwMi40IDUxMnMxODIuODU3MTQzIDQwOS42IDQwOS42IDQwOS42eiBtLTIwNC44LTM1OC40aDQwOS42YzAgMTEzLjM3MTQyOS05MS40Mjg1NzEgMjA0LjgtMjA0LjggMjA0LjhzLTIwNC44LTkxLjQyODU3MS0yMDQuOC0yMDQuOHogbTAtMTAyLjRjLTQzLjg4NTcxNCAwLTc2LjgtMzIuOTE0Mjg2LTc2LjgtNzYuOHMzMi45MTQyODYtNzYuOCA3Ni44LTc2LjggNzYuOCAzMi45MTQyODYgNzYuOCA3Ni44LTMyLjkxNDI4NiA3Ni44LTc2LjggNzYuOHogbTQwOS42IDBjLTQzLjg4NTcxNCAwLTc2LjgtMzIuOTE0Mjg2LTc2LjgtNzYuOHMzMi45MTQyODYtNzYuOCA3Ni44LTc2LjhjNDMuODg1NzE0IDAgNzYuOCAzMi45MTQyODYgNzYuOCA3Ni44cy0zMi45MTQyODYgNzYuOC03Ni44IDc2Ljh6XCI+PC9wYXRoPjwvc3ZnPicsdGhpcy50YWc9XCJidXR0b25cIix0aGlzLnNob3dEcm9wUGFuZWw9ITAsdGhpcy4kY29udGVudD1udWxsfXJldHVybiBlLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGUsdCl7fSxlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm5cIlwifSxlLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaXNEaXNhYmxlZD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5zZWxlY3Rpb258fCEhc00oQmYubm9kZXMoZSx7bWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuXCJwcmVcIj09PVFPLmdldE5vZGVUeXBlKHQpfHwhIUJmLmlzVm9pZChlLHQpfSx1bml2ZXJzYWw6ITB9KSwxKVswXX0sZS5wcm90b3R5cGUuZ2V0UGFuZWxDb250ZW50RWxlbT1mdW5jdGlvbihlKXtpZihudWxsPT10aGlzLiRjb250ZW50KXt2YXIgdD1NcCgnPHVsIGNsYXNzPVwidy1lLXBhbmVsLWNvbnRlbnQtZW1vdGlvblwiPjwvdWw+Jyk7dC5vbihcImNsaWNrXCIsXCJsaVwiLChmdW5jdGlvbih0KXt2YXIgbj10LnRhcmdldDtpZihudWxsIT1uKXt0LnByZXZlbnREZWZhdWx0KCk7dmFyIHI9TXAobikudGV4dCgpO2UuaW5zZXJ0VGV4dChyKX19KSksdGhpcy4kY29udGVudD10fXZhciBuPXRoaXMuJGNvbnRlbnQ7aWYobnVsbD09bilyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInVsXCIpO24uZW1wdHkoKTt2YXIgcj1lLmdldE1lbnVDb25maWcoXCJlbW90aW9uXCIpLmVtb3Rpb25zO3JldHVybih2b2lkIDA9PT1yP1tdOnIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PU1wKFwiPGxpPlwiK2UrXCI8L2xpPlwiKTtuLmFwcGVuZCh0KX0pKSxuWzBdfSxlfSgpLGhIPXttZW51czpbe2tleTpcImVtb3Rpb25cIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwSH0sY29uZmlnOntlbW90aW9uczpcIvCfmIAg8J+YgyDwn5iEIPCfmIEg8J+YhiDwn5iFIPCfmIIg8J+koyDwn5iKIPCfmIcg8J+ZgiDwn5mDIPCfmIkg8J+YjCDwn5iNIPCfmJgg8J+YlyDwn5iZIPCfmJog8J+YiyDwn5ibIPCfmJ0g8J+YnCDwn6STIPCfmI4g8J+YjyDwn5iSIPCfmJ4g8J+YlCDwn5ifIPCfmJUg8J+ZgSDwn5ijIPCfmJYg8J+YqyDwn5ipIPCfmKIg8J+YrSDwn5ikIPCfmKAg8J+YoSDwn5izIPCfmLEg8J+YqCDwn6SXIPCfpJQg8J+YtiDwn5iRIPCfmKwg8J+ZhCDwn5ivIPCfmLQg8J+YtyDwn6SRIPCfmIgg8J+koSDwn5KpIPCfkbsg8J+SgCDwn5GAIPCfkaMg8J+RkCDwn5mMIPCfkY8g8J+knSDwn5GNIPCfkY4g8J+RiiDinIog8J+kmyDwn6ScIPCfpJ4g4pyM77iPIPCfpJgg8J+RjCDwn5GIIPCfkYkg8J+RhiDwn5GHIOKYne+4jyDinIsg8J+kmiDwn5aQIPCflpYg8J+RiyDwn6SZIPCfkqog8J+WlSDinI3vuI8g8J+Zj1wiLnNwbGl0KFwiIFwiKX19XX0sZ0g9ezE6XCIxMnB4XCIsMjpcIjE0cHhcIiwzOlwiMTZweFwiLDQ6XCIxOXB4XCIsNTpcIjI0cHhcIiw2OlwiMzJweFwiLDc6XCI0OHB4XCJ9LHZIPXtzZWxlY3RvcjpcImZvbnRcIixwcmVQYXJzZUh0bWw6ZnVuY3Rpb24oZSl7dmFyIHQ9TXAoZSk7aWYoXCJmb250XCIhPT1RUih0KSlyZXR1cm4gZTt2YXIgbj10LmF0dHIoXCJzaXplXCIpfHxcIlwiO24mJih0LnJlbW92ZUF0dHIoXCJzaXplXCIpLHQuY3NzKFwiZm9udC1zaXplXCIsZ0hbbl0pKTt2YXIgcj10LmF0dHIoXCJmYWNlXCIpfHxcIlwiO3JldHVybiByJiYodC5yZW1vdmVBdHRyKFwiZmFjZVwiKSx0LmNzcyhcImZvbnQtZmFtaWx5XCIscikpLHRbMF19fSx5SD1CaihcIlwiLmluZGV4T2YpO0xJKHt0YXJnZXQ6XCJTdHJpbmdcIixwcm90bzohMCxmb3JjZWQ6IWJ6KFwiaW5jbHVkZXNcIil9LHtpbmNsdWRlczpmdW5jdGlvbihlKXtyZXR1cm4hIX55SChkTChMaih0aGlzKSksZEwoeXooZSkpLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KTt2YXIgbUgsYkgsd0g9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuTWF0aD09TWF0aCYmZX0sRUg9d0goXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHx3SChcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHx3SChcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZil8fHdIKFwib2JqZWN0XCI9PXR5cGVvZiBjaiYmY2opfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksREg9RnVuY3Rpb24ucHJvdG90eXBlLFNIPURILmFwcGx5LHhIPURILmJpbmQsQ0g9REguY2FsbCxBSD1cIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5hcHBseXx8KHhIP0NILmJpbmQoU0gpOmZ1bmN0aW9uKCl7cmV0dXJuIENILmFwcGx5KFNILGFyZ3VtZW50cyl9KSxPSD1GdW5jdGlvbi5wcm90b3R5cGUsa0g9T0guYmluZCxCSD1PSC5jYWxsLEZIPWtIJiZrSC5iaW5kKEJIKSxUSD1rSD9mdW5jdGlvbihlKXtyZXR1cm4gZSYmRkgoQkgsZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZmdW5jdGlvbigpe3JldHVybiBCSC5hcHBseShlLGFyZ3VtZW50cyl9fSxfSD1mdW5jdGlvbihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfSxQSD1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fSxqSD0hUEgoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwxLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KVsxXX0pKSxOSD1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxJSD1OSC5iaW5kP05ILmJpbmQoTkgpOmZ1bmN0aW9uKCl7cmV0dXJuIE5ILmFwcGx5KE5ILGFyZ3VtZW50cyl9LExIPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLFJIPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsTUg9UkgmJiFMSC5jYWxsKHsxOjJ9LDEpP2Z1bmN0aW9uKGUpe3ZhciB0PVJIKHRoaXMsZSk7cmV0dXJuISF0JiZ0LmVudW1lcmFibGV9OkxILHpIPXtmOk1IfSwkSD1mdW5jdGlvbihlLHQpe3JldHVybntlbnVtZXJhYmxlOiEoMSZlKSxjb25maWd1cmFibGU6ISgyJmUpLHdyaXRhYmxlOiEoNCZlKSx2YWx1ZTp0fX0sSEg9VEgoe30udG9TdHJpbmcpLFZIPVRIKFwiXCIuc2xpY2UpLFVIPWZ1bmN0aW9uKGUpe3JldHVybiBWSChISChlKSw4LC0xKX0sV0g9RUguT2JqZWN0LEdIPVRIKFwiXCIuc3BsaXQpLHFIPVBIKChmdW5jdGlvbigpe3JldHVybiFXSChcInpcIikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KSk/ZnVuY3Rpb24oZSl7cmV0dXJuXCJTdHJpbmdcIj09VUgoZSk/R0goZSxcIlwiKTpXSChlKX06V0gsS0g9RUguVHlwZUVycm9yLFlIPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgS0goXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIitlKTtyZXR1cm4gZX0sWEg9ZnVuY3Rpb24oZSl7cmV0dXJuIHFIKFlIKGUpKX0sWkg9ZnVuY3Rpb24oZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGU/bnVsbCE9PWU6X0goZSl9LEpIPXt9LFFIPWZ1bmN0aW9uKGUpe3JldHVybiBfSChlKT9lOnZvaWQgMH0sZVY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP1FIKEpIW2VdKXx8UUgoRUhbZV0pOkpIW2VdJiZKSFtlXVt0XXx8RUhbZV0mJkVIW2VdW3RdfSx0Vj1USCh7fS5pc1Byb3RvdHlwZU9mKSxuVj1lVihcIm5hdmlnYXRvclwiLFwidXNlckFnZW50XCIpfHxcIlwiLHJWPUVILnByb2Nlc3Msb1Y9RUguRGVubyxpVj1yViYmclYudmVyc2lvbnN8fG9WJiZvVi52ZXJzaW9uLGFWPWlWJiZpVi52ODthViYmKGJIPShtSD1hVi5zcGxpdChcIi5cIikpWzBdPjAmJm1IWzBdPDQ/MTorKG1IWzBdK21IWzFdKSksIWJIJiZuViYmKCEobUg9blYubWF0Y2goL0VkZ2VcXC8oXFxkKykvKSl8fG1IWzFdPj03NCkmJihtSD1uVi5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLykpJiYoYkg9K21IWzFdKTt2YXIgdVY9Ykgsc1Y9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhUEgoKGZ1bmN0aW9uKCl7dmFyIGU9U3ltYm9sKCk7cmV0dXJuIVN0cmluZyhlKXx8IShPYmplY3QoZSlpbnN0YW5jZW9mIFN5bWJvbCl8fCFTeW1ib2wuc2hhbSYmdVYmJnVWPDQxfSkpLGxWPXNWJiYhU3ltYm9sLnNoYW0mJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IsY1Y9RUguT2JqZWN0LGZWPWxWP2Z1bmN0aW9uKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfTpmdW5jdGlvbihlKXt2YXIgdD1lVihcIlN5bWJvbFwiKTtyZXR1cm4gX0godCkmJnRWKHQucHJvdG90eXBlLGNWKGUpKX0sZFY9RUguU3RyaW5nLHBWPUVILlR5cGVFcnJvcixoVj1mdW5jdGlvbihlKXtpZihfSChlKSlyZXR1cm4gZTt0aHJvdyBwVihmdW5jdGlvbihlKXt0cnl7cmV0dXJuIGRWKGUpfWNhdGNoKGUpe3JldHVyblwiT2JqZWN0XCJ9fShlKStcIiBpcyBub3QgYSBmdW5jdGlvblwiKX0sZ1Y9RUguVHlwZUVycm9yLHZWPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx5Vj1FSFtcIl9fY29yZS1qc19zaGFyZWRfX1wiXXx8ZnVuY3Rpb24oZSx0KXt0cnl7dlYoRUgsZSx7dmFsdWU6dCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChuKXtFSFtlXT10fXJldHVybiB0fShcIl9fY29yZS1qc19zaGFyZWRfX1wiLHt9KSxtVj1maigoZnVuY3Rpb24oZSl7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiB5VltlXXx8KHlWW2VdPXZvaWQgMCE9PXQ/dDp7fSl9KShcInZlcnNpb25zXCIsW10pLnB1c2goe3ZlcnNpb246XCIzLjE5LjNcIixtb2RlOlwicHVyZVwiLGNvcHlyaWdodDpcIsKpIDIwMjEgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSlcIn0pfSkpLGJWPUVILk9iamVjdCx3Vj1mdW5jdGlvbihlKXtyZXR1cm4gYlYoWUgoZSkpfSxFVj1USCh7fS5oYXNPd25Qcm9wZXJ0eSksRFY9T2JqZWN0Lmhhc093bnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRVYod1YoZSksdCl9LFNWPTAseFY9TWF0aC5yYW5kb20oKSxDVj1USCgxLi50b1N0cmluZyksQVY9ZnVuY3Rpb24oZSl7cmV0dXJuXCJTeW1ib2woXCIrKHZvaWQgMD09PWU/XCJcIjplKStcIilfXCIrQ1YoKytTVit4ViwzNil9LE9WPW1WKFwid2tzXCIpLGtWPUVILlN5bWJvbCxCVj1rViYma1YuZm9yLEZWPWxWP2tWOmtWJiZrVi53aXRob3V0U2V0dGVyfHxBVixUVj1mdW5jdGlvbihlKXtpZighRFYoT1YsZSl8fCFzViYmXCJzdHJpbmdcIiE9dHlwZW9mIE9WW2VdKXt2YXIgdD1cIlN5bWJvbC5cIitlO3NWJiZEVihrVixlKT9PVltlXT1rVltlXTpPVltlXT1sViYmQlY/QlYodCk6RlYodCl9cmV0dXJuIE9WW2VdfSxfVj1FSC5UeXBlRXJyb3IsUFY9VFYoXCJ0b1ByaW1pdGl2ZVwiKSxqVj1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlLHQpe2lmKCFaSChlKXx8ZlYoZSkpcmV0dXJuIGU7dmFyIG4scixvPW51bGw9PShuPWVbUFZdKT92b2lkIDA6aFYobik7aWYobyl7aWYodm9pZCAwPT09dCYmKHQ9XCJkZWZhdWx0XCIpLHI9SUgobyxlLHQpLCFaSChyKXx8ZlYocikpcmV0dXJuIHI7dGhyb3cgX1YoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9cmV0dXJuIHZvaWQgMD09PXQmJih0PVwibnVtYmVyXCIpLGZ1bmN0aW9uKGUsdCl7dmFyIG4scjtpZihcInN0cmluZ1wiPT09dCYmX0gobj1lLnRvU3RyaW5nKSYmIVpIKHI9SUgobixlKSkpcmV0dXJuIHI7aWYoX0gobj1lLnZhbHVlT2YpJiYhWkgocj1JSChuLGUpKSlyZXR1cm4gcjtpZihcInN0cmluZ1wiIT09dCYmX0gobj1lLnRvU3RyaW5nKSYmIVpIKHI9SUgobixlKSkpcmV0dXJuIHI7dGhyb3cgZ1YoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9KGUsdCl9KGUsXCJzdHJpbmdcIik7cmV0dXJuIGZWKHQpP3Q6dCtcIlwifSxOVj1FSC5kb2N1bWVudCxJVj1aSChOVikmJlpIKE5WLmNyZWF0ZUVsZW1lbnQpLExWPWZ1bmN0aW9uKGUpe3JldHVybiBJVj9OVi5jcmVhdGVFbGVtZW50KGUpOnt9fSxSVj0hakgmJiFQSCgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KExWKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpLE1WPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IselY9e2Y6akg/TVY6ZnVuY3Rpb24oZSx0KXtpZihlPVhIKGUpLHQ9alYodCksUlYpdHJ5e3JldHVybiBNVihlLHQpfWNhdGNoKGUpe31pZihEVihlLHQpKXJldHVybiAkSCghSUgoekguZixlLHQpLGVbdF0pfX0sJFY9LyN8XFwucHJvdG90eXBlXFwuLyxIVj1mdW5jdGlvbihlLHQpe3ZhciBuPVVWW1ZWKGUpXTtyZXR1cm4gbj09R1Z8fG4hPVdWJiYoX0godCk/UEgodCk6ISF0KX0sVlY9SFYubm9ybWFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZSgkVixcIi5cIikudG9Mb3dlckNhc2UoKX0sVVY9SFYuZGF0YT17fSxXVj1IVi5OQVRJVkU9XCJOXCIsR1Y9SFYuUE9MWUZJTEw9XCJQXCIscVY9SFYsS1Y9VEgoVEguYmluZCksWVY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaFYoZSksdm9pZCAwPT09dD9lOktWP0tWKGUsdCk6ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fSxYVj1FSC5TdHJpbmcsWlY9RUguVHlwZUVycm9yLEpWPWZ1bmN0aW9uKGUpe2lmKFpIKGUpKXJldHVybiBlO3Rocm93IFpWKFhWKGUpK1wiIGlzIG5vdCBhbiBvYmplY3RcIil9LFFWPUVILlR5cGVFcnJvcixlVT1PYmplY3QuZGVmaW5lUHJvcGVydHksdFU9e2Y6akg/ZVU6ZnVuY3Rpb24oZSx0LG4pe2lmKEpWKGUpLHQ9alYodCksSlYobiksUlYpdHJ5e3JldHVybiBlVShlLHQsbil9Y2F0Y2goZSl7fWlmKFwiZ2V0XCJpbiBufHxcInNldFwiaW4gbil0aHJvdyBRVihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkXCIpO3JldHVyblwidmFsdWVcImluIG4mJihlW3RdPW4udmFsdWUpLGV9fSxuVT1qSD9mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRVLmYoZSx0LCRIKDEsbikpfTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbdF09bixlfSxyVT16Vi5mLG9VPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKG4scixvKXtpZih0aGlzIGluc3RhbmNlb2YgdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IGU7Y2FzZSAxOnJldHVybiBuZXcgZShuKTtjYXNlIDI6cmV0dXJuIG5ldyBlKG4scil9cmV0dXJuIG5ldyBlKG4scixvKX1yZXR1cm4gQUgoZSx0aGlzLGFyZ3VtZW50cyl9O3JldHVybiB0LnByb3RvdHlwZT1lLnByb3RvdHlwZSx0fSxpVT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxpLGEsdSxzLGwsYz1lLnRhcmdldCxmPWUuZ2xvYmFsLGQ9ZS5zdGF0LHA9ZS5wcm90byxoPWY/RUg6ZD9FSFtjXTooRUhbY118fHt9KS5wcm90b3R5cGUsZz1mP0pIOkpIW2NdfHxuVShKSCxjLHt9KVtjXSx2PWcucHJvdG90eXBlO2ZvcihvIGluIHQpbj0hcVYoZj9vOmMrKGQ/XCIuXCI6XCIjXCIpK28sZS5mb3JjZWQpJiZoJiZEVihoLG8pLGE9Z1tvXSxuJiYodT1lLm5vVGFyZ2V0R2V0PyhsPXJVKGgsbykpJiZsLnZhbHVlOmhbb10pLGk9biYmdT91OnRbb10sbiYmdHlwZW9mIGE9PXR5cGVvZiBpfHwocz1lLmJpbmQmJm4/WVYoaSxFSCk6ZS53cmFwJiZuP29VKGkpOnAmJl9IKGkpP1RIKGkpOmksKGUuc2hhbXx8aSYmaS5zaGFtfHxhJiZhLnNoYW0pJiZuVShzLFwic2hhbVwiLCEwKSxuVShnLG8scykscCYmKERWKEpILHI9YytcIlByb3RvdHlwZVwiKXx8blUoSkgscix7fSksblUoSkhbcl0sbyxpKSxlLnJlYWwmJnYmJiF2W29dJiZuVSh2LG8saSkpKX0sYVU9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuXCJBcnJheVwiPT1VSChlKX0sdVU9TWF0aC5jZWlsLHNVPU1hdGguZmxvb3IsbFU9ZnVuY3Rpb24oZSl7dmFyIHQ9K2U7cmV0dXJuIHQhPXR8fDA9PT10PzA6KHQ+MD9zVTp1VSkodCl9LGNVPU1hdGgubWluLGZVPWZ1bmN0aW9uKGUpe3JldHVybih0PWUubGVuZ3RoKT4wP2NVKGxVKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjA7dmFyIHR9LGRVPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1qVih0KTtyIGluIGU/dFUuZihlLHIsJEgoMCxuKSk6ZVtyXT1ufSxwVT17fTtwVVtUVihcInRvU3RyaW5nVGFnXCIpXT1cInpcIjt2YXIgaFU9XCJbb2JqZWN0IHpdXCI9PT1TdHJpbmcocFUpLGdVPVRWKFwidG9TdHJpbmdUYWdcIiksdlU9RUguT2JqZWN0LHlVPVwiQXJndW1lbnRzXCI9PVVIKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSksbVU9aFU/VUg6ZnVuY3Rpb24oZSl7dmFyIHQsbixyO3JldHVybiB2b2lkIDA9PT1lP1wiVW5kZWZpbmVkXCI6bnVsbD09PWU/XCJOdWxsXCI6XCJzdHJpbmdcIj09dHlwZW9mKG49ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGVbdF19Y2F0Y2goZSl7fX0odD12VShlKSxnVSkpP246eVU/VUgodCk6XCJPYmplY3RcIj09KHI9VUgodCkpJiZfSCh0LmNhbGxlZSk/XCJBcmd1bWVudHNcIjpyfSxiVT1USChGdW5jdGlvbi50b1N0cmluZyk7X0goeVYuaW5zcGVjdFNvdXJjZSl8fCh5Vi5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBiVShlKX0pO3ZhciB3VT15Vi5pbnNwZWN0U291cmNlLEVVPWZ1bmN0aW9uKCl7fSxEVT1bXSxTVT1lVihcIlJlZmxlY3RcIixcImNvbnN0cnVjdFwiKSx4VT0vXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvLENVPVRIKHhVLmV4ZWMpLEFVPSF4VS5leGVjKEVVKSxPVT1mdW5jdGlvbihlKXtpZighX0goZSkpcmV0dXJuITE7dHJ5e3JldHVybiBTVShFVSxEVSxlKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19LGtVPSFTVXx8UEgoKGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIE9VKE9VLmNhbGwpfHwhT1UoT2JqZWN0KXx8IU9VKChmdW5jdGlvbigpe2U9ITB9KSl8fGV9KSk/ZnVuY3Rpb24oZSl7aWYoIV9IKGUpKXJldHVybiExO3N3aXRjaChtVShlKSl7Y2FzZVwiQXN5bmNGdW5jdGlvblwiOmNhc2VcIkdlbmVyYXRvckZ1bmN0aW9uXCI6Y2FzZVwiQXN5bmNHZW5lcmF0b3JGdW5jdGlvblwiOnJldHVybiExfXJldHVybiBBVXx8ISFDVSh4VSx3VShlKSl9Ok9VLEJVPVRWKFwic3BlY2llc1wiKSxGVT1FSC5BcnJheSxUVT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGFVKGUpJiYodD1lLmNvbnN0cnVjdG9yLChrVSh0KSYmKHQ9PT1GVXx8YVUodC5wcm90b3R5cGUpKXx8WkgodCkmJm51bGw9PT0odD10W0JVXSkpJiYodD12b2lkIDApKSx2b2lkIDA9PT10P0ZVOnR9KGUpKSgwPT09dD8wOnQpfSxfVT1UVihcInNwZWNpZXNcIiksUFU9VFYoXCJpc0NvbmNhdFNwcmVhZGFibGVcIiksalU9RUguVHlwZUVycm9yLE5VPXVWPj01MXx8IVBIKChmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBlW1BVXT0hMSxlLmNvbmNhdCgpWzBdIT09ZX0pKSxJVT11Vj49NTF8fCFQSCgoZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4oZS5jb25zdHJ1Y3Rvcj17fSlbX1VdPWZ1bmN0aW9uKCl7cmV0dXJue2ZvbzoxfX0sMSE9PWUuY29uY2F0KEJvb2xlYW4pLmZvb30pKSxMVT1mdW5jdGlvbihlKXtpZighWkgoZSkpcmV0dXJuITE7dmFyIHQ9ZVtQVV07cmV0dXJuIHZvaWQgMCE9PXQ/ISF0OmFVKGUpfTtpVSh7dGFyZ2V0OlwiQXJyYXlcIixwcm90bzohMCxmb3JjZWQ6IU5VfHwhSVV9LHtjb25jYXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8saSxhPXdWKHRoaXMpLHU9VFUoYSwwKSxzPTA7Zm9yKHQ9LTEscj1hcmd1bWVudHMubGVuZ3RoO3Q8cjt0KyspaWYoTFUoaT0tMT09PXQ/YTphcmd1bWVudHNbdF0pKXtpZihzKyhvPWZVKGkpKT45MDA3MTk5MjU0NzQwOTkxKXRocm93IGpVKFwiTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkXCIpO2ZvcihuPTA7bjxvO24rKyxzKyspbiBpbiBpJiZkVSh1LHMsaVtuXSl9ZWxzZXtpZihzPj05MDA3MTk5MjU0NzQwOTkxKXRocm93IGpVKFwiTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkXCIpO2RVKHUscysrLGkpfXJldHVybiB1Lmxlbmd0aD1zLHV9fSk7dmFyIFJVLE1VPUVILlN0cmluZyx6VT1mdW5jdGlvbihlKXtpZihcIlN5bWJvbFwiPT09bVUoZSkpdGhyb3cgVHlwZUVycm9yKFwiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmdcIik7cmV0dXJuIE1VKGUpfSwkVT1NYXRoLm1heCxIVT1NYXRoLm1pbixWVT1mdW5jdGlvbihlLHQpe3ZhciBuPWxVKGUpO3JldHVybiBuPDA/JFUobit0LDApOkhVKG4sdCl9LFVVPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7dmFyIG8saT1YSCh0KSxhPWZVKGkpLHU9VlUocixhKTtpZihlJiZuIT1uKXtmb3IoO2E+dTspaWYoKG89aVt1KytdKSE9bylyZXR1cm4hMH1lbHNlIGZvcig7YT51O3UrKylpZigoZXx8dSBpbiBpKSYmaVt1XT09PW4pcmV0dXJuIGV8fHV8fDA7cmV0dXJuIWUmJi0xfX0sV1U9e2luY2x1ZGVzOlVVKCEwKSxpbmRleE9mOlVVKCExKX0sR1U9e30scVU9V1UuaW5kZXhPZixLVT1USChbXS5wdXNoKSxZVT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9WEgoZSksbz0wLGk9W107Zm9yKG4gaW4gcikhRFYoR1UsbikmJkRWKHIsbikmJktVKGksbik7Zm9yKDt0Lmxlbmd0aD5vOylEVihyLG49dFtvKytdKSYmKH5xVShpLG4pfHxLVShpLG4pKTtyZXR1cm4gaX0sWFU9W1wiY29uc3RydWN0b3JcIixcImhhc093blByb3BlcnR5XCIsXCJpc1Byb3RvdHlwZU9mXCIsXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLFwidG9Mb2NhbGVTdHJpbmdcIixcInRvU3RyaW5nXCIsXCJ2YWx1ZU9mXCJdLFpVPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXtyZXR1cm4gWVUoZSxYVSl9LEpVPWpIP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUsdCl7SlYoZSk7Zm9yKHZhciBuLHI9WEgodCksbz1aVSh0KSxpPW8ubGVuZ3RoLGE9MDtpPmE7KXRVLmYoZSxuPW9bYSsrXSxyW25dKTtyZXR1cm4gZX0sUVU9ZVYoXCJkb2N1bWVudFwiLFwiZG9jdW1lbnRFbGVtZW50XCIpLGVXPW1WKFwia2V5c1wiKSx0Vz1mdW5jdGlvbihlKXtyZXR1cm4gZVdbZV18fChlV1tlXT1BVihlKSl9LG5XPXRXKFwiSUVfUFJPVE9cIiksclc9ZnVuY3Rpb24oKXt9LG9XPWZ1bmN0aW9uKGUpe3JldHVyblwiPHNjcmlwdD5cIitlK1wiPFxcL3NjcmlwdD5cIn0saVc9ZnVuY3Rpb24oZSl7ZS53cml0ZShvVyhcIlwiKSksZS5jbG9zZSgpO3ZhciB0PWUucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gZT1udWxsLHR9LGFXPWZ1bmN0aW9uKCl7dHJ5e1JVPW5ldyBBY3RpdmVYT2JqZWN0KFwiaHRtbGZpbGVcIil9Y2F0Y2goZSl7fXZhciBlLHQ7YVc9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmUlU/aVcoUlUpOigodD1MVihcImlmcmFtZVwiKSkuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixRVS5hcHBlbmRDaGlsZCh0KSx0LnNyYz1TdHJpbmcoXCJqYXZhc2NyaXB0OlwiKSwoZT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxlLndyaXRlKG9XKFwiZG9jdW1lbnQuRj1PYmplY3RcIikpLGUuY2xvc2UoKSxlLkYpOmlXKFJVKTtmb3IodmFyIG49WFUubGVuZ3RoO24tLTspZGVsZXRlIGFXLnByb3RvdHlwZVtYVVtuXV07cmV0dXJuIGFXKCl9O0dVW25XXT0hMDt2YXIgdVcsc1csbFcsY1c9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PWU/KHJXLnByb3RvdHlwZT1KVihlKSxuPW5ldyByVyxyVy5wcm90b3R5cGU9bnVsbCxuW25XXT1lKTpuPWFXKCksdm9pZCAwPT09dD9uOkpVKG4sdCl9LGZXPVhVLmNvbmNhdChcImxlbmd0aFwiLFwicHJvdG90eXBlXCIpLGRXPXtmOk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihlKXtyZXR1cm4gWVUoZSxmVyl9fSxwVz1FSC5BcnJheSxoVz1NYXRoLm1heCxnVz1kVy5mLHZXPVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXSx5Vz17ZjpmdW5jdGlvbihlKXtyZXR1cm4gdlcmJlwiV2luZG93XCI9PVVIKGUpP2Z1bmN0aW9uKGUpe3RyeXtyZXR1cm4gZ1coZSl9Y2F0Y2goZSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9ZlUoZSksbz1WVSh2b2lkIDAsciksaT1WVShyLHIpLGE9cFcoaFcoaS1vLDApKSx1PTA7bzxpO28rKyx1KyspZFUoYSx1LGVbb10pO3JldHVybiBhLmxlbmd0aD11LGF9KHZXKX19KGUpOmdXKFhIKGUpKX19LG1XPXtmOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LGJXPVRIKFtdLnNsaWNlKSx3Vz1mdW5jdGlvbihlLHQsbixyKXtyJiZyLmVudW1lcmFibGU/ZVt0XT1uOm5VKGUsdCxuKX0sRVc9e2Y6VFZ9LERXPXRVLmYsU1c9ZnVuY3Rpb24oZSl7dmFyIHQ9SkguU3ltYm9sfHwoSkguU3ltYm9sPXt9KTtEVih0LGUpfHxEVyh0LGUse3ZhbHVlOkVXLmYoZSl9KX0seFc9aFU/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5cIltvYmplY3QgXCIrbVUodGhpcykrXCJdXCJ9LENXPXRVLmYsQVc9VFYoXCJ0b1N0cmluZ1RhZ1wiKSxPVz1mdW5jdGlvbihlLHQsbixyKXtpZihlKXt2YXIgbz1uP2U6ZS5wcm90b3R5cGU7RFYobyxBVyl8fENXKG8sQVcse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp0fSksciYmIWhVJiZuVShvLFwidG9TdHJpbmdcIix4Vyl9fSxrVz1FSC5XZWFrTWFwLEJXPV9IKGtXKSYmL25hdGl2ZSBjb2RlLy50ZXN0KHdVKGtXKSksRlc9RUguVHlwZUVycm9yLFRXPUVILldlYWtNYXA7aWYoQld8fHlWLnN0YXRlKXt2YXIgX1c9eVYuc3RhdGV8fCh5Vi5zdGF0ZT1uZXcgVFcpLFBXPVRIKF9XLmdldCksalc9VEgoX1cuaGFzKSxOVz1USChfVy5zZXQpO3VXPWZ1bmN0aW9uKGUsdCl7aWYoalcoX1csZSkpdGhyb3cgbmV3IEZXKFwiT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWRcIik7cmV0dXJuIHQuZmFjYWRlPWUsTlcoX1csZSx0KSx0fSxzVz1mdW5jdGlvbihlKXtyZXR1cm4gUFcoX1csZSl8fHt9fSxsVz1mdW5jdGlvbihlKXtyZXR1cm4galcoX1csZSl9fWVsc2V7dmFyIElXPXRXKFwic3RhdGVcIik7R1VbSVddPSEwLHVXPWZ1bmN0aW9uKGUsdCl7aWYoRFYoZSxJVykpdGhyb3cgbmV3IEZXKFwiT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWRcIik7cmV0dXJuIHQuZmFjYWRlPWUsblUoZSxJVyx0KSx0fSxzVz1mdW5jdGlvbihlKXtyZXR1cm4gRFYoZSxJVyk/ZVtJV106e319LGxXPWZ1bmN0aW9uKGUpe3JldHVybiBEVihlLElXKX19dmFyIExXPXtzZXQ6dVcsZ2V0OnNXLGhhczpsVyxlbmZvcmNlOmZ1bmN0aW9uKGUpe3JldHVybiBsVyhlKT9zVyhlKTp1VyhlLHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbjtpZighWkgodCl8fChuPXNXKHQpKS50eXBlIT09ZSl0aHJvdyBGVyhcIkluY29tcGF0aWJsZSByZWNlaXZlciwgXCIrZStcIiByZXF1aXJlZFwiKTtyZXR1cm4gbn19fSxSVz1USChbXS5wdXNoKSxNVz1mdW5jdGlvbihlKXt2YXIgdD0xPT1lLG49Mj09ZSxyPTM9PWUsbz00PT1lLGk9Nj09ZSxhPTc9PWUsdT01PT1lfHxpO3JldHVybiBmdW5jdGlvbihzLGwsYyxmKXtmb3IodmFyIGQscCxoPXdWKHMpLGc9cUgoaCksdj1ZVihsLGMpLHk9ZlUoZyksbT0wLGI9Znx8VFUsdz10P2Iocyx5KTpufHxhP2IocywwKTp2b2lkIDA7eT5tO20rKylpZigodXx8bSBpbiBnKSYmKHA9dihkPWdbbV0sbSxoKSxlKSlpZih0KXdbbV09cDtlbHNlIGlmKHApc3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIGQ7Y2FzZSA2OnJldHVybiBtO2Nhc2UgMjpSVyh3LGQpfWVsc2Ugc3dpdGNoKGUpe2Nhc2UgNDpyZXR1cm4hMTtjYXNlIDc6UlcodyxkKX1yZXR1cm4gaT8tMTpyfHxvP286d319LHpXPVtNVygwKSxNVygxKSxNVygyKSxNVygzKSxNVyg0KSxNVyg1KSxNVyg2KSxNVyg3KV1bMF0sJFc9dFcoXCJoaWRkZW5cIiksSFc9VFYoXCJ0b1ByaW1pdGl2ZVwiKSxWVz1MVy5zZXQsVVc9TFcuZ2V0dGVyRm9yKFwiU3ltYm9sXCIpLFdXPU9iamVjdC5wcm90b3R5cGUsR1c9RUguU3ltYm9sLHFXPUdXJiZHVy5wcm90b3R5cGUsS1c9RUguVHlwZUVycm9yLFlXPUVILlFPYmplY3QsWFc9ZVYoXCJKU09OXCIsXCJzdHJpbmdpZnlcIiksWlc9elYuZixKVz10VS5mLFFXPXlXLmYsZUc9ekguZix0Rz1USChbXS5wdXNoKSxuRz1tVihcInN5bWJvbHNcIiksckc9bVYoXCJvcC1zeW1ib2xzXCIpLG9HPW1WKFwic3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeVwiKSxpRz1tVihcInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnlcIiksYUc9bVYoXCJ3a3NcIiksdUc9IVlXfHwhWVcucHJvdG90eXBlfHwhWVcucHJvdG90eXBlLmZpbmRDaGlsZCxzRz1qSCYmUEgoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPWNXKEpXKHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSlcodGhpcyxcImFcIix7dmFsdWU6N30pLmF9fSkpLmF9KSk/ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVpXKFdXLHQpO3ImJmRlbGV0ZSBXV1t0XSxKVyhlLHQsbiksciYmZSE9PVdXJiZKVyhXVyx0LHIpfTpKVyxsRz1mdW5jdGlvbihlLHQpe3ZhciBuPW5HW2VdPWNXKHFXKTtyZXR1cm4gVlcobix7dHlwZTpcIlN5bWJvbFwiLHRhZzplLGRlc2NyaXB0aW9uOnR9KSxqSHx8KG4uZGVzY3JpcHRpb249dCksbn0sY0c9ZnVuY3Rpb24oZSx0LG4pe2U9PT1XVyYmY0cockcsdCxuKSxKVihlKTt2YXIgcj1qVih0KTtyZXR1cm4gSlYobiksRFYobkcscik/KG4uZW51bWVyYWJsZT8oRFYoZSwkVykmJmVbJFddW3JdJiYoZVskV11bcl09ITEpLG49Y1cobix7ZW51bWVyYWJsZTokSCgwLCExKX0pKTooRFYoZSwkVyl8fEpXKGUsJFcsJEgoMSx7fSkpLGVbJFddW3JdPSEwKSxzRyhlLHIsbikpOkpXKGUscixuKX0sZkc9ZnVuY3Rpb24oZSx0KXtKVihlKTt2YXIgbj1YSCh0KSxyPVpVKG4pLmNvbmNhdChnRyhuKSk7cmV0dXJuIHpXKHIsKGZ1bmN0aW9uKHQpe2pIJiYhSUgoZEcsbix0KXx8Y0coZSx0LG5bdF0pfSkpLGV9LGRHPWZ1bmN0aW9uKGUpe3ZhciB0PWpWKGUpLG49SUgoZUcsdGhpcyx0KTtyZXR1cm4hKHRoaXM9PT1XVyYmRFYobkcsdCkmJiFEVihyRyx0KSkmJighKG58fCFEVih0aGlzLHQpfHwhRFYobkcsdCl8fERWKHRoaXMsJFcpJiZ0aGlzWyRXXVt0XSl8fG4pfSxwRz1mdW5jdGlvbihlLHQpe3ZhciBuPVhIKGUpLHI9alYodCk7aWYobiE9PVdXfHwhRFYobkcscil8fERWKHJHLHIpKXt2YXIgbz1aVyhuLHIpO3JldHVybiFvfHwhRFYobkcscil8fERWKG4sJFcpJiZuWyRXXVtyXXx8KG8uZW51bWVyYWJsZT0hMCksb319LGhHPWZ1bmN0aW9uKGUpe3ZhciB0PVFXKFhIKGUpKSxuPVtdO3JldHVybiB6Vyh0LChmdW5jdGlvbihlKXtEVihuRyxlKXx8RFYoR1UsZSl8fHRHKG4sZSl9KSksbn0sZ0c9ZnVuY3Rpb24oZSl7dmFyIHQ9ZT09PVdXLG49UVcodD9yRzpYSChlKSkscj1bXTtyZXR1cm4gelcobiwoZnVuY3Rpb24oZSl7IURWKG5HLGUpfHx0JiYhRFYoV1csZSl8fHRHKHIsbkdbZV0pfSkpLHJ9O2lmKHNWfHwocVc9KEdXPWZ1bmN0aW9uKCl7aWYodFYocVcsdGhpcykpdGhyb3cgS1coXCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3JcIik7dmFyIGU9YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP3pVKGFyZ3VtZW50c1swXSk6dm9pZCAwLHQ9QVYoZSksbj1mdW5jdGlvbihlKXt0aGlzPT09V1cmJklIKG4sckcsZSksRFYodGhpcywkVykmJkRWKHRoaXNbJFddLHQpJiYodGhpc1skV11bdF09ITEpLHNHKHRoaXMsdCwkSCgxLGUpKX07cmV0dXJuIGpIJiZ1RyYmc0coV1csdCx7Y29uZmlndXJhYmxlOiEwLHNldDpufSksbEcodCxlKX0pLnByb3RvdHlwZSx3VyhxVyxcInRvU3RyaW5nXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFVXKHRoaXMpLnRhZ30pKSx3VyhHVyxcIndpdGhvdXRTZXR0ZXJcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGxHKEFWKGUpLGUpfSkpLHpILmY9ZEcsdFUuZj1jRyx6Vi5mPXBHLGRXLmY9eVcuZj1oRyxtVy5mPWdHLEVXLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIGxHKFRWKGUpLGUpfSxqSCYmSlcocVcsXCJkZXNjcmlwdGlvblwiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFVXKHRoaXMpLmRlc2NyaXB0aW9ufX0pKSxpVSh7Z2xvYmFsOiEwLHdyYXA6ITAsZm9yY2VkOiFzVixzaGFtOiFzVn0se1N5bWJvbDpHV30pLHpXKFpVKGFHKSwoZnVuY3Rpb24oZSl7U1coZSl9KSksaVUoe3RhcmdldDpcIlN5bWJvbFwiLHN0YXQ6ITAsZm9yY2VkOiFzVn0se2ZvcjpmdW5jdGlvbihlKXt2YXIgdD16VShlKTtpZihEVihvRyx0KSlyZXR1cm4gb0dbdF07dmFyIG49R1codCk7cmV0dXJuIG9HW3RdPW4saUdbbl09dCxufSxrZXlGb3I6ZnVuY3Rpb24oZSl7aWYoIWZWKGUpKXRocm93IEtXKGUrXCIgaXMgbm90IGEgc3ltYm9sXCIpO2lmKERWKGlHLGUpKXJldHVybiBpR1tlXX0sdXNlU2V0dGVyOmZ1bmN0aW9uKCl7dUc9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe3VHPSExfX0pLGlVKHt0YXJnZXQ6XCJPYmplY3RcIixzdGF0OiEwLGZvcmNlZDohc1Ysc2hhbTohakh9LHtjcmVhdGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD9jVyhlKTpmRyhjVyhlKSx0KX0sZGVmaW5lUHJvcGVydHk6Y0csZGVmaW5lUHJvcGVydGllczpmRyxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6cEd9KSxpVSh7dGFyZ2V0OlwiT2JqZWN0XCIsc3RhdDohMCxmb3JjZWQ6IXNWfSx7Z2V0T3duUHJvcGVydHlOYW1lczpoRyxnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6Z0d9KSxpVSh7dGFyZ2V0OlwiT2JqZWN0XCIsc3RhdDohMCxmb3JjZWQ6UEgoKGZ1bmN0aW9uKCl7bVcuZigxKX0pKX0se2dldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbihlKXtyZXR1cm4gbVcuZih3VihlKSl9fSksWFcpe3ZhciB2Rz0hc1Z8fFBIKChmdW5jdGlvbigpe3ZhciBlPUdXKCk7cmV0dXJuXCJbbnVsbF1cIiE9WFcoW2VdKXx8XCJ7fVwiIT1YVyh7YTplfSl8fFwie31cIiE9WFcoT2JqZWN0KGUpKX0pKTtpVSh7dGFyZ2V0OlwiSlNPTlwiLHN0YXQ6ITAsZm9yY2VkOnZHfSx7c3RyaW5naWZ5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1iVyhhcmd1bWVudHMpLG89dDtpZigoWkgodCl8fHZvaWQgMCE9PWUpJiYhZlYoZSkpcmV0dXJuIGFVKHQpfHwodD1mdW5jdGlvbihlLHQpe2lmKF9IKG8pJiYodD1JSChvLHRoaXMsZSx0KSksIWZWKHQpKXJldHVybiB0fSksclsxXT10LEFIKFhXLG51bGwscil9fSl9aWYoIXFXW0hXXSl7dmFyIHlHPXFXLnZhbHVlT2Y7d1cocVcsSFcsKGZ1bmN0aW9uKGUpe3JldHVybiBJSCh5Ryx0aGlzKX0pKX1PVyhHVyxcIlN5bWJvbFwiKSxHVVskV109ITAsU1coXCJhc3luY0l0ZXJhdG9yXCIpLFNXKFwiaGFzSW5zdGFuY2VcIiksU1coXCJpc0NvbmNhdFNwcmVhZGFibGVcIiksU1coXCJpdGVyYXRvclwiKSxTVyhcIm1hdGNoXCIpLFNXKFwibWF0Y2hBbGxcIiksU1coXCJyZXBsYWNlXCIpLFNXKFwic2VhcmNoXCIpLFNXKFwic3BlY2llc1wiKSxTVyhcInNwbGl0XCIpLFNXKFwidG9QcmltaXRpdmVcIiksU1coXCJ0b1N0cmluZ1RhZ1wiKSxTVyhcInVuc2NvcGFibGVzXCIpLE9XKEVILkpTT04sXCJKU09OXCIsITApO3ZhciBtRyxiRyx3RyxFRz1KSC5TeW1ib2wsREc9e30sU0c9RnVuY3Rpb24ucHJvdG90eXBlLHhHPWpIJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLENHPURWKFNHLFwibmFtZVwiKSxBRz17RVhJU1RTOkNHLFBST1BFUjpDRyYmXCJzb21ldGhpbmdcIj09PWZ1bmN0aW9uKCl7fS5uYW1lLENPTkZJR1VSQUJMRTpDRyYmKCFqSHx8akgmJnhHKFNHLFwibmFtZVwiKS5jb25maWd1cmFibGUpfSxPRz0hUEgoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IGUpIT09ZS5wcm90b3R5cGV9KSksa0c9dFcoXCJJRV9QUk9UT1wiKSxCRz1FSC5PYmplY3QsRkc9QkcucHJvdG90eXBlLFRHPU9HP0JHLmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3ZhciB0PXdWKGUpO2lmKERWKHQsa0cpKXJldHVybiB0W2tHXTt2YXIgbj10LmNvbnN0cnVjdG9yO3JldHVybiBfSChuKSYmdCBpbnN0YW5jZW9mIG4/bi5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIEJHP0ZHOm51bGx9LF9HPVRWKFwiaXRlcmF0b3JcIiksUEc9ITE7W10ua2V5cyYmKFwibmV4dFwiaW4od0c9W10ua2V5cygpKT8oYkc9VEcoVEcod0cpKSkhPT1PYmplY3QucHJvdG90eXBlJiYobUc9YkcpOlBHPSEwKTt2YXIgakc9bnVsbD09bUd8fFBIKChmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBtR1tfR10uY2FsbChlKSE9PWV9KSk7bUc9akc/e306Y1cobUcpLF9IKG1HW19HXSl8fHdXKG1HLF9HLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBORz17SXRlcmF0b3JQcm90b3R5cGU6bUcsQlVHR1lfU0FGQVJJX0lURVJBVE9SUzpQR30sSUc9TkcuSXRlcmF0b3JQcm90b3R5cGUsTEc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307RUguU3RyaW5nLEVILlR5cGVFcnJvcixPYmplY3Quc2V0UHJvdG90eXBlT2Z8fFwiX19wcm90b19fXCJpbnt9JiZmdW5jdGlvbigpe3ZhciBlPXt9O3RyeXtUSChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsXCJfX3Byb3RvX19cIikuc2V0KShlLFtdKSxlIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2goZSl7fX0oKTt2YXIgUkc9QUcuUFJPUEVSLE1HPU5HLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMsekc9VFYoXCJpdGVyYXRvclwiKSwkRz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxIRz1mdW5jdGlvbihlLHQsbixyLG8saSxhKXshZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dCtcIiBJdGVyYXRvclwiO2UucHJvdG90eXBlPWNXKElHLHtuZXh0OiRIKDEsbil9KSxPVyhlLG8sITEsITApLERHW29dPUxHfShuLHQscik7dmFyIHUscyxsLGM9ZnVuY3Rpb24oZSl7aWYoZT09PW8mJmcpcmV0dXJuIGc7aWYoIU1HJiZlIGluIHApcmV0dXJuIHBbZV07c3dpdGNoKGUpe2Nhc2VcImtleXNcIjpjYXNlXCJ2YWx1ZXNcIjpjYXNlXCJlbnRyaWVzXCI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzKX19LGY9dCtcIiBJdGVyYXRvclwiLGQ9ITEscD1lLnByb3RvdHlwZSxoPXBbekddfHxwW1wiQEBpdGVyYXRvclwiXXx8byYmcFtvXSxnPSFNRyYmaHx8YyhvKSx2PVwiQXJyYXlcIj09dCYmcC5lbnRyaWVzfHxoO2lmKHYmJih1PVRHKHYuY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJnUubmV4dCYmKE9XKHUsZiwhMCwhMCksREdbZl09JEcpLFJHJiZcInZhbHVlc1wiPT1vJiZoJiZcInZhbHVlc1wiIT09aC5uYW1lJiYoZD0hMCxnPWZ1bmN0aW9uKCl7cmV0dXJuIElIKGgsdGhpcyl9KSxvKWlmKHM9e3ZhbHVlczpjKFwidmFsdWVzXCIpLGtleXM6aT9nOmMoXCJrZXlzXCIpLGVudHJpZXM6YyhcImVudHJpZXNcIil9LGEpZm9yKGwgaW4gcykoTUd8fGR8fCEobCBpbiBwKSkmJndXKHAsbCxzW2xdKTtlbHNlIGlVKHt0YXJnZXQ6dCxwcm90bzohMCxmb3JjZWQ6TUd8fGR9LHMpO3JldHVybiBhJiZwW3pHXSE9PWcmJndXKHAsekcsZyx7bmFtZTpvfSksREdbdF09ZyxzfSxWRz1MVy5zZXQsVUc9TFcuZ2V0dGVyRm9yKFwiQXJyYXkgSXRlcmF0b3JcIik7SEcoQXJyYXksXCJBcnJheVwiLChmdW5jdGlvbihlLHQpe1ZHKHRoaXMse3R5cGU6XCJBcnJheSBJdGVyYXRvclwiLHRhcmdldDpYSChlKSxpbmRleDowLGtpbmQ6dH0pfSksKGZ1bmN0aW9uKCl7dmFyIGU9VUcodGhpcyksdD1lLnRhcmdldCxuPWUua2luZCxyPWUuaW5kZXgrKztyZXR1cm4hdHx8cj49dC5sZW5ndGg/KGUudGFyZ2V0PXZvaWQgMCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTpcImtleXNcIj09bj97dmFsdWU6cixkb25lOiExfTpcInZhbHVlc1wiPT1uP3t2YWx1ZTp0W3JdLGRvbmU6ITF9Ont2YWx1ZTpbcix0W3JdXSxkb25lOiExfX0pLFwidmFsdWVzXCIpLERHLkFyZ3VtZW50cz1ERy5BcnJheTt2YXIgV0c9VFYoXCJ0b1N0cmluZ1RhZ1wiKTtmb3IodmFyIEdHIGlue0NTU1J1bGVMaXN0OjAsQ1NTU3R5bGVEZWNsYXJhdGlvbjowLENTU1ZhbHVlTGlzdDowLENsaWVudFJlY3RMaXN0OjAsRE9NUmVjdExpc3Q6MCxET01TdHJpbmdMaXN0OjAsRE9NVG9rZW5MaXN0OjEsRGF0YVRyYW5zZmVySXRlbUxpc3Q6MCxGaWxlTGlzdDowLEhUTUxBbGxDb2xsZWN0aW9uOjAsSFRNTENvbGxlY3Rpb246MCxIVE1MRm9ybUVsZW1lbnQ6MCxIVE1MU2VsZWN0RWxlbWVudDowLE1lZGlhTGlzdDowLE1pbWVUeXBlQXJyYXk6MCxOYW1lZE5vZGVNYXA6MCxOb2RlTGlzdDoxLFBhaW50UmVxdWVzdExpc3Q6MCxQbHVnaW46MCxQbHVnaW5BcnJheTowLFNWR0xlbmd0aExpc3Q6MCxTVkdOdW1iZXJMaXN0OjAsU1ZHUGF0aFNlZ0xpc3Q6MCxTVkdQb2ludExpc3Q6MCxTVkdTdHJpbmdMaXN0OjAsU1ZHVHJhbnNmb3JtTGlzdDowLFNvdXJjZUJ1ZmZlckxpc3Q6MCxTdHlsZVNoZWV0TGlzdDowLFRleHRUcmFja0N1ZUxpc3Q6MCxUZXh0VHJhY2tMaXN0OjAsVG91Y2hMaXN0OjB9KXt2YXIgcUc9RUhbR0ddLEtHPXFHJiZxRy5wcm90b3R5cGU7S0cmJm1VKEtHKSE9PVdHJiZuVShLRyxXRyxHRyksREdbR0ddPURHLkFycmF5fXZhciBZRz1FRztTVyhcImFzeW5jRGlzcG9zZVwiKSxTVyhcImRpc3Bvc2VcIiksU1coXCJtYXRjaGVyXCIpLFNXKFwibWV0YWRhdGFcIiksU1coXCJvYnNlcnZhYmxlXCIpLFNXKFwicGF0dGVybk1hdGNoXCIpLFNXKFwicmVwbGFjZUFsbFwiKTt2YXIgWEc9WUcsWkc9VEgoXCJcIi5jaGFyQXQpLEpHPVRIKFwiXCIuY2hhckNvZGVBdCksUUc9VEgoXCJcIi5zbGljZSksZXE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHIsbyxpPXpVKFlIKHQpKSxhPWxVKG4pLHU9aS5sZW5ndGg7cmV0dXJuIGE8MHx8YT49dT9lP1wiXCI6dm9pZCAwOihyPUpHKGksYSkpPDU1Mjk2fHxyPjU2MzE5fHxhKzE9PT11fHwobz1KRyhpLGErMSkpPDU2MzIwfHxvPjU3MzQzP2U/WkcoaSxhKTpyOmU/UUcoaSxhLGErMik6by01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fX0sdHE9KGVxKCExKSxlcSghMCkpLG5xPUxXLnNldCxycT1MVy5nZXR0ZXJGb3IoXCJTdHJpbmcgSXRlcmF0b3JcIik7SEcoU3RyaW5nLFwiU3RyaW5nXCIsKGZ1bmN0aW9uKGUpe25xKHRoaXMse3R5cGU6XCJTdHJpbmcgSXRlcmF0b3JcIixzdHJpbmc6elUoZSksaW5kZXg6MH0pfSksKGZ1bmN0aW9uKCl7dmFyIGUsdD1ycSh0aGlzKSxuPXQuc3RyaW5nLHI9dC5pbmRleDtyZXR1cm4gcj49bi5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfTooZT10cShuLHIpLHQuaW5kZXgrPWUubGVuZ3RoLHt2YWx1ZTplLGRvbmU6ITF9KX0pKTt2YXIgb3E9RVcuZihcIml0ZXJhdG9yXCIpLGlxPWZqKChmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIFhHJiZcInN5bWJvbFwiPT10eXBlb2Ygb3E/KGUuZXhwb3J0cz10PWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX0sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwKTooZS5leHBvcnRzPXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFhHJiZlLmNvbnN0cnVjdG9yPT09WEcmJmUhPT1YRy5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sZS5leHBvcnRzLmRlZmF1bHQ9ZS5leHBvcnRzLGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwKSx0KG4pfWUuZXhwb3J0cz10LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0cyxlLmV4cG9ydHMuX19lc01vZHVsZT0hMH0pKSxhcT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxcImRlZmF1bHRcIik/ZS5kZWZhdWx0OmV9KGlxKSx1cT1hSS5FWElTVFMsc3E9TE4uZixscT1GdW5jdGlvbi5wcm90b3R5cGUsY3E9QmoobHEudG9TdHJpbmcpLGZxPS9mdW5jdGlvblxcYig/Olxcc3xcXC9cXCpbXFxTXFxzXSo/XFwqXFwvfFxcL1xcL1teXFxuXFxyXSpbXFxuXFxyXSspKihbXlxccygvXSopLyxkcT1CaihmcS5leGVjKTt5aiYmIXVxJiZzcShscSxcIm5hbWVcIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3RyeXtyZXR1cm4gZHEoZnEsY3EodGhpcykpWzFdfWNhdGNoKGUpe3JldHVyblwiXCJ9fX0pO3ZhciBwcT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnRhZz1cInNlbGVjdFwiLHRoaXMud2lkdGg9ODB9cmV0dXJuIGUucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiExfSxlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm1hcmssbj1CZi5tYXJrcyhlKTtyZXR1cm4gbiYmblt0XT9uW3RdOlwiXCJ9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuc2VsZWN0aW9ufHwodGhpcy5tYXJrLCEhc00oQmYubm9kZXMoZSx7bWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuXCJwcmVcIj09PVFPLmdldE5vZGVUeXBlKHQpfHwhIUJmLmlzVm9pZChlLHQpfSx1bml2ZXJzYWw6ITB9KSwxKVswXSl9LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLm1hcms7dD9lLmFkZE1hcmsobix0KTplLnJlbW92ZU1hcmsobil9LGV9KCksaHE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC50aXRsZT1IUChcImZvbnRTaXplLnRpdGxlXCIpLHQuaWNvblN2Zz1STSx0Lm1hcms9XCJmb250U2l6ZVwiLHR9cmV0dXJuIHJNKHQsZSksdC5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbihlKXt2YXIgdD1bXSxuPWUuZ2V0TWVudUNvbmZpZyh0aGlzLm1hcmspLmZvbnRTaXplTGlzdCxyPXZvaWQgMD09PW4/W106bjt0LnB1c2goe3RleHQ6SFAoXCJmb250U2l6ZS5kZWZhdWx0XCIpLHZhbHVlOlwiXCJ9KSxyLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXQucHVzaCh7dGV4dDplLHZhbHVlOmV9KTtlbHNlIGlmKFwib2JqZWN0XCI9PT1hcShlKSl7dmFyIG49ZS5uYW1lLHI9ZS52YWx1ZTt0LnB1c2goe3RleHQ6bix2YWx1ZTpyfSl9fSkpO3ZhciBvPXRoaXMuZ2V0VmFsdWUoZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS52YWx1ZT09PW8/ZS5zZWxlY3RlZD0hMDpkZWxldGUgZS5zZWxlY3RlZH0pKSx0fSx0fShwcSksZ3E9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC50aXRsZT1IUChcImZvbnRGYW1pbHkudGl0bGVcIiksdC5pY29uU3ZnPU1NLHQubWFyaz1cImZvbnRGYW1pbHlcIix0LnNlbGVjdFBhbmVsV2lkdGg9MTUwLHR9cmV0dXJuIHJNKHQsZSksdC5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbihlKXt2YXIgdD1bXSxuPWUuZ2V0TWVudUNvbmZpZyh0aGlzLm1hcmspLmZvbnRGYW1pbHlMaXN0LHI9dm9pZCAwPT09bj9bXTpuO3QucHVzaCh7dGV4dDpIUChcImZvbnRGYW1pbHkuZGVmYXVsdFwiKSx2YWx1ZTpcIlwifSksci5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl0LnB1c2goe3RleHQ6ZSx2YWx1ZTplLHN0eWxlRm9yUmVuZGVyTWVudUxpc3Q6e1wiZm9udC1mYW1pbHlcIjplfX0pO2Vsc2UgaWYoXCJvYmplY3RcIj09PWFxKGUpKXt2YXIgbj1lLm5hbWUscj1lLnZhbHVlO3QucHVzaCh7dGV4dDpuLHZhbHVlOnIsc3R5bGVGb3JSZW5kZXJNZW51TGlzdDp7XCJmb250LWZhbWlseVwiOnJ9fSl9fSkpO3ZhciBvPXRoaXMuZ2V0VmFsdWUoZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS52YWx1ZT09PW8/ZS5zZWxlY3RlZD0hMDpkZWxldGUgZS5zZWxlY3RlZH0pKSx0fSx0fShwcSksdnE9e3JlbmRlclN0eWxlOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZSxyPW4uZm9udFNpemUsbz1uLmZvbnRGYW1pbHksaT10O3JldHVybiByJiZLeihpLHtmb250U2l6ZTpyfSksbyYmS3ooaSx7Zm9udEZhbWlseTpvfSksaX0sc3R5bGVUb0h0bWw6ZnVuY3Rpb24oZSx0KXtpZighZWQuaXNUZXh0KGUpKXJldHVybiB0O3ZhciBuLHI9ZSxvPXIuZm9udFNpemUsaT1yLmZvbnRGYW1pbHk7cmV0dXJuIG98fGk/KChaUih0KXx8XCJzcGFuXCIhPT1RUihuPU1wKHQpKSkmJihuPU1wKFwiPHNwYW4+XCIrdCtcIjwvc3Bhbj5cIikpLG8mJm4uY3NzKFwiZm9udC1zaXplXCIsbyksaSYmbi5jc3MoXCJmb250LWZhbWlseVwiLGkpLEpSKG4pKTp0fSxwcmVQYXJzZUh0bWw6W3ZIXSxwYXJzZVN0eWxlSHRtbDpmdW5jdGlvbihlLHQsbil7dmFyIHI9TXAoZSk7aWYoIWVkLmlzVGV4dCh0KSlyZXR1cm4gdDt2YXIgbz10LGk9bi5nZXRNZW51Q29uZmlnKFwiZm9udFNpemVcIikuZm9udFNpemVMaXN0LGE9dm9pZCAwPT09aT9bXTppLHU9ZU0ocixcImZvbnQtc2l6ZVwiKSxzPWEuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWUmJmUudmFsdWU9PT11fSkpfHxhLmluY2x1ZGVzKHUpO3UmJnMmJihvLmZvbnRTaXplPXUpO3ZhciBsPW4uZ2V0TWVudUNvbmZpZyhcImZvbnRGYW1pbHlcIikuZm9udEZhbWlseUxpc3QsYz12b2lkIDA9PT1sP1tdOmwsZj1lTShyLFwiZm9udC1mYW1pbHlcIikucmVwbGFjZSgvXCIvZyxcIlwiKSxkPWMuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWUmJmUudmFsdWU9PT1mfSkpfHxjLmluY2x1ZGVzKGYpO3JldHVybiBmJiZkJiYoby5mb250RmFtaWx5PWYpLG99LG1lbnVzOlt7a2V5OlwiZm9udFNpemVcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBocX0sY29uZmlnOntmb250U2l6ZUxpc3Q6W1wiMTJweFwiLHtuYW1lOlwiMTNweFwiLHZhbHVlOlwiMTNweFwifSxcIjE0cHhcIixcIjE1cHhcIixcIjE2cHhcIixcIjE5cHhcIix7bmFtZTpcIjIycHhcIix2YWx1ZTpcIjIycHhcIn0sXCIyNHB4XCIsXCIyOXB4XCIsXCIzMnB4XCIsXCI0MHB4XCIsXCI0OHB4XCJdfX0se2tleTpcImZvbnRGYW1pbHlcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBncX0sY29uZmlnOntmb250RmFtaWx5TGlzdDpbXCLpu5HkvZNcIix7bmFtZTpcIuS7v+Wui1wiLHZhbHVlOlwi5Lu/5a6LXCJ9LFwi5qW35L2TXCIsXCLmoIfmpbfkvZNcIixcIuWNjuaWh+S7v+Wui1wiLFwi5Y2O5paH5qW35L2TXCIse25hbWU6XCLlrovkvZNcIix2YWx1ZTpcIuWui+S9k1wifSxcIuW+rui9r+mbhem7kVwiLFwiQXJpYWxcIixcIlRhaG9tYVwiLFwiVmVyZGFuYVwiLFwiVGltZXMgTmV3IFJvbWFuXCIsXCJDb3VyaWVyIE5ld1wiXX19XX0seXE9e3NlbGVjdG9yOlwicCxoMSxoMixoMyxoNCxoNVwiLHByZVBhcnNlSHRtbDpmdW5jdGlvbihlKXt2YXIgdD1NcChlKSxuPWVNKHQsXCJwYWRkaW5nLWxlZnRcIik7cmV0dXJuL1xcZGVtLy50ZXN0KG4pJiZ0LmNzcyhcInRleHQtaW5kZW50XCIsXCIyZW1cIiksL1xcZHB4Ly50ZXN0KG4pJiZwYXJzZUludChuLDEwKSUzMj09MCYmdC5jc3MoXCJ0ZXh0LWluZGVudFwiLFwiMmVtXCIpLHRbMF19fSxtcT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnRhZz1cImJ1dHRvblwifXJldHVybiBlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD1zTShCZi5ub2RlcyhlLHttYXRjaDpmdW5jdGlvbihlKXtyZXR1cm4hIWUuaW5kZW50fSx1bml2ZXJzYWw6ITB9KSwxKSxuPXRbMF07cmV0dXJuIG51bGw9PW4/XCJcIjpzTShuLDEpWzBdLmluZGVudHx8XCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmdldE1hdGNoTm9kZT1mdW5jdGlvbihlKXt2YXIgdD1zTShCZi5ub2RlcyhlLHttYXRjaDpmdW5jdGlvbihlKXt2YXIgdD1RTy5nZXROb2RlVHlwZShlKTtyZXR1cm5cInBhcmFncmFwaFwiPT09dHx8ISF0LnN0YXJ0c1dpdGgoXCJoZWFkZXJcIil9LHVuaXZlcnNhbDohMCxtb2RlOlwiaGlnaGVzdFwifSksMSlbMF07cmV0dXJuIG51bGw9PXQ/bnVsbDp0WzBdfSxlfSgpLGJxPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQudGl0bGU9SFAoXCJpbmRlbnQuZGVjcmVhc2VcIiksdC5pY29uU3ZnPXpNLHR9cmV0dXJuIHJNKHQsZSksdC5wcm90b3R5cGUuaXNEaXNhYmxlZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldE1hdGNoTm9kZShlKTtyZXR1cm4gbnVsbD09dHx8IXQuaW5kZW50fSx0LnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGUsdCl7bWQuc2V0Tm9kZXMoZSx7aW5kZW50Om51bGx9LHttYXRjaDpmdW5jdGlvbihlKXtyZXR1cm4gU2YuaXNFbGVtZW50KGUpfX0pfSx0fShtcSksd3E9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC50aXRsZT1IUChcImluZGVudC5pbmNyZWFzZVwiKSx0Lmljb25Tdmc9JE0sdH1yZXR1cm4gck0odCxlKSx0LnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0TWF0Y2hOb2RlKGUpO3JldHVybiBudWxsPT10fHwhIXQuaW5kZW50fSx0LnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGUsdCl7bWQuc2V0Tm9kZXMoZSx7aW5kZW50OlwiMmVtXCJ9LHttYXRjaDpmdW5jdGlvbihlKXtyZXR1cm4gU2YuaXNFbGVtZW50KGUpfSxtb2RlOlwiaGlnaGVzdFwifSl9LHR9KG1xKSxFcT17cmVuZGVyU3R5bGU6ZnVuY3Rpb24oZSx0KXtpZighU2YuaXNFbGVtZW50KGUpKXJldHVybiB0O3ZhciBuPWUuaW5kZW50LHI9dDtyZXR1cm4gbiYmS3oocix7dGV4dEluZGVudDpufSkscn0sc3R5bGVUb0h0bWw6ZnVuY3Rpb24oZSx0KXtpZighU2YuaXNFbGVtZW50KGUpKXJldHVybiB0O3ZhciBuPWUuaW5kZW50O2lmKCFuKXJldHVybiB0O3ZhciByPU1wKHQpO3JldHVybiByLmNzcyhcInRleHQtaW5kZW50XCIsbiksSlIocil9LHByZVBhcnNlSHRtbDpbeXFdLHBhcnNlU3R5bGVIdG1sOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1NcChlKTtpZighU2YuaXNFbGVtZW50KHQpKXJldHVybiB0O3ZhciBvPXQsaT1lTShyLFwidGV4dC1pbmRlbnRcIiksYT1wYXJzZUludChpLDEwKTtyZXR1cm4gaSYmYT4wJiYoby5pbmRlbnQ9aSksb30sbWVudXM6W3trZXk6XCJpbmRlbnRcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3cX19LHtrZXk6XCJkZWxJbmRlbnRcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBicX19XX0sRHE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50YWc9XCJidXR0b25cIn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmdldE1hdGNoTm9kZT1mdW5jdGlvbihlKXt2YXIgdD1zTShCZi5ub2RlcyhlLHttYXRjaDpmdW5jdGlvbihlKXt2YXIgdD1RTy5nZXROb2RlVHlwZShlKTtyZXR1cm5cInBhcmFncmFwaFwiPT09dHx8XCJibG9ja3F1b3RlXCI9PT10fHwhIXQuc3RhcnRzV2l0aChcImhlYWRlclwiKX0sdW5pdmVyc2FsOiEwLG1vZGU6XCJoaWdoZXN0XCJ9KSwxKVswXTtyZXR1cm4gbnVsbD09dD9udWxsOnRbMF19LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuc2VsZWN0aW9ufHwhIVFPLmdldFNlbGVjdGVkRWxlbXMoZSkuc29tZSgoZnVuY3Rpb24odCl7aWYoQmYuaXNWb2lkKGUsdCkmJkJmLmlzQmxvY2soZSx0KSlyZXR1cm4hMDt2YXIgbj10LnR5cGU7cmV0dXJuISFbXCJwcmVcIixcImNvZGVcIl0uaW5jbHVkZXMobil8fHZvaWQgMH0pKX0sZX0oKSxTcT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LnRpdGxlPUhQKFwianVzdGlmeS5sZWZ0XCIpLHQuaWNvblN2Zz1ITSx0fXJldHVybiByTSh0LGUpLHQucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXttZC5zZXROb2RlcyhlLHt0ZXh0QWxpZ246XCJsZWZ0XCJ9LHttYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gU2YuaXNFbGVtZW50KHQpJiYhZS5pc0lubGluZSh0KX19KX0sdH0oRHEpLHhxPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQudGl0bGU9SFAoXCJqdXN0aWZ5LnJpZ2h0XCIpLHQuaWNvblN2Zz1WTSx0fXJldHVybiByTSh0LGUpLHQucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXttZC5zZXROb2RlcyhlLHt0ZXh0QWxpZ246XCJyaWdodFwifSx7bWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIFNmLmlzRWxlbWVudCh0KSYmIWUuaXNJbmxpbmUodCl9fSl9LHR9KERxKSxDcT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LnRpdGxlPUhQKFwianVzdGlmeS5jZW50ZXJcIiksdC5pY29uU3ZnPVVNLHR9cmV0dXJuIHJNKHQsZSksdC5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihlLHQpe21kLnNldE5vZGVzKGUse3RleHRBbGlnbjpcImNlbnRlclwifSx7bWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIFNmLmlzRWxlbWVudCh0KSYmIWUuaXNJbmxpbmUodCl9fSl9LHR9KERxKSxBcT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LnRpdGxlPUhQKFwianVzdGlmeS5qdXN0aWZ5XCIpLHQuaWNvblN2Zz1XTSx0fXJldHVybiByTSh0LGUpLHQucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXttZC5zZXROb2RlcyhlLHt0ZXh0QWxpZ246XCJqdXN0aWZ5XCJ9LHttYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gU2YuaXNFbGVtZW50KHQpJiYhZS5pc0lubGluZSh0KX19KX0sdH0oRHEpLE9xPXtyZW5kZXJTdHlsZTpmdW5jdGlvbihlLHQpe2lmKCFTZi5pc0VsZW1lbnQoZSkpcmV0dXJuIHQ7dmFyIG49ZS50ZXh0QWxpZ24scj10O3JldHVybiBuJiZLeihyLHt0ZXh0QWxpZ246bn0pLHJ9LHN0eWxlVG9IdG1sOmZ1bmN0aW9uKGUsdCl7aWYoIVNmLmlzRWxlbWVudChlKSlyZXR1cm4gdDt2YXIgbj1lLnRleHRBbGlnbjtpZighbilyZXR1cm4gdDt2YXIgcj1NcCh0KTtyZXR1cm4gci5jc3MoXCJ0ZXh0LWFsaWduXCIsbiksSlIocil9LHBhcnNlU3R5bGVIdG1sOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1NcChlKTtpZighU2YuaXNFbGVtZW50KHQpKXJldHVybiB0O3ZhciBvPXQsaT1lTShyLFwidGV4dC1hbGlnblwiKTtyZXR1cm4gaSYmKG8udGV4dEFsaWduPWkpLG99LG1lbnVzOlt7a2V5OlwianVzdGlmeUxlZnRcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTcX19LHtrZXk6XCJqdXN0aWZ5UmlnaHRcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB4cX19LHtrZXk6XCJqdXN0aWZ5Q2VudGVyXCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgQ3F9fSx7a2V5OlwianVzdGlmeUp1c3RpZnlcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBcX19XX0sa3E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50aXRsZT1IUChcImxpbmVIZWlnaHQudGl0bGVcIiksdGhpcy5pY29uU3ZnPSc8c3ZnIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCI+PHBhdGggZD1cIk05NjQgNzg4YTggOCAwIDAgMSA4IDh2OThhOCA4IDAgMCAxLTggOEg0MzhhOCA4IDAgMCAxLTgtOHYtOThhOCA4IDAgMCAxIDgtOGg1MjZ6TTE5OC45MyAxNDQuMzA2YzYuNjY4LTUuNzk4IDE2Ljc3NC01LjA5NCAyMi41NzMgMS41NzRsMTIyLjI2IDE0MC41ODJhMTYgMTYgMCAwIDEgMy45MjcgMTAuNWMwIDguODM2LTcuMTY0IDE2LTE2IDE2aC02MS44YTggOCAwIDAgMC04IDh2MzkwLjA3N2g2OS44MTlhMTYgMTYgMCAwIDEgMTAuNTAyIDMuOTI4YzYuNjY2IDUuOCA3LjM3IDE1LjkwNiAxLjU3IDIyLjU3M0wyMjEuNDc2IDg3OC4xMjNhMTYgMTYgMCAwIDEtMS41NyAxLjU3Yy02LjY2OCA1LjgtMTYuNzc0IDUuMDk3LTIyLjU3NC0xLjU3TDc1LjA1MSA3MzcuNTM4YTE2IDE2IDAgMCAxLTMuOTI4LTEwLjVjMC04LjgzNyA3LjE2My0xNiAxNi0xNmg2OS44MjJWMzEyLjk2SDg3LjEyN2ExNiAxNiAwIDAgMS0xMC41MDItMy45MjhjLTYuNjY2LTUuOC03LjM3LTE1LjkwNi0xLjU3LTIyLjU3M2wxMjIuMzAzLTE0MC41ODJhMTYgMTYgMCAwIDEgMS41NzItMS41NzJ6TTk2NCA0NjVhOCA4IDAgMCAxIDggOHY5OGE4IDggMCAwIDEtOCA4SDQzOGE4IDggMCAwIDEtOC04di05OGE4IDggMCAwIDEgOC04aDUyNnogbTAtMzIzYTggOCAwIDAgMSA4IDh2OThhOCA4IDAgMCAxLTggOEg0MzhhOCA4IDAgMCAxLTgtOHYtOThhOCA4IDAgMCAxIDgtOGg1MjZ6XCI+PC9wYXRoPjwvc3ZnPicsdGhpcy50YWc9XCJzZWxlY3RcIix0aGlzLndpZHRoPTgwfXJldHVybiBlLnByb3RvdHlwZS5nZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49ZS5nZXRNZW51Q29uZmlnKFwibGluZUhlaWdodFwiKS5saW5lSGVpZ2h0TGlzdCxyPXZvaWQgMD09PW4/W106bjt0LnB1c2goe3RleHQ6SFAoXCJsaW5lSGVpZ2h0LmRlZmF1bHRcIiksdmFsdWU6XCJcIn0pLHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKHt0ZXh0OmUsdmFsdWU6ZX0pfSkpO3ZhciBvPXRoaXMuZ2V0VmFsdWUoZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS52YWx1ZT09PW8/ZS5zZWxlY3RlZD0hMDpkZWxldGUgZS5zZWxlY3RlZH0pKSx0fSxlLnByb3RvdHlwZS5nZXRNYXRjaE5vZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9c00oQmYubm9kZXMoZSx7bWF0Y2g6ZnVuY3Rpb24oZSl7dmFyIHQ9UU8uZ2V0Tm9kZVR5cGUoZSk7cmV0dXJuISF0LnN0YXJ0c1dpdGgoXCJoZWFkZXJcIil8fCEhW1wicGFyYWdyYXBoXCIsXCJibG9ja3F1b3RlXCIsXCJsaXN0LWl0ZW1cIl0uaW5jbHVkZXModCl9LHVuaXZlcnNhbDohMCxtb2RlOlwiaGlnaGVzdFwifSksMSlbMF07cmV0dXJuIG51bGw9PXQ/bnVsbDp0WzBdfSxlLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRNYXRjaE5vZGUoZSk7cmV0dXJuIG51bGw9PXQ/XCJcIjpTZi5pc0VsZW1lbnQodCkmJnQubGluZUhlaWdodHx8XCJcIn0sZS5wcm90b3R5cGUuaXNEaXNhYmxlZD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5zZWxlY3Rpb258fG51bGw9PXRoaXMuZ2V0TWF0Y2hOb2RlKGUpfSxlLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGUsdCl7bWQuc2V0Tm9kZXMoZSx7bGluZUhlaWdodDp0LnRvU3RyaW5nKCl9LHttb2RlOlwiaGlnaGVzdFwifSl9LGV9KCksQnE9e3JlbmRlclN0eWxlOmZ1bmN0aW9uKGUsdCl7aWYoIVNmLmlzRWxlbWVudChlKSlyZXR1cm4gdDt2YXIgbj1lLmxpbmVIZWlnaHQscj10O3JldHVybiBuJiZLeihyLHtsaW5lSGVpZ2h0Om59KSxyfSxzdHlsZVRvSHRtbDpmdW5jdGlvbihlLHQpe2lmKCFTZi5pc0VsZW1lbnQoZSkpcmV0dXJuIHQ7dmFyIG49ZS5saW5lSGVpZ2h0O2lmKCFuKXJldHVybiB0O3ZhciByPU1wKHQpO3JldHVybiByLmNzcyhcImxpbmUtaGVpZ2h0XCIsbiksSlIocil9LHBhcnNlU3R5bGVIdG1sOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1NcChlKTtpZighU2YuaXNFbGVtZW50KHQpKXJldHVybiB0O3ZhciBvPXQsaT1uLmdldE1lbnVDb25maWcoXCJsaW5lSGVpZ2h0XCIpLmxpbmVIZWlnaHRMaXN0LGE9dm9pZCAwPT09aT9bXTppLHU9ZU0ocixcImxpbmUtaGVpZ2h0XCIpO3JldHVybiB1JiZhLmluY2x1ZGVzKHUpJiYoby5saW5lSGVpZ2h0PXUpLG99LG1lbnVzOlt7a2V5OlwibGluZUhlaWdodFwiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtxfSxjb25maWc6e2xpbmVIZWlnaHRMaXN0OltcIjFcIixcIjEuMTVcIixcIjEuNVwiLFwiMlwiLFwiMi41XCIsXCIzXCJdfX1dfSxGcT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnRpdGxlPUhQKFwidW5kby5yZWRvXCIpLHRoaXMuaWNvblN2Zz0nPHN2ZyB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiPjxwYXRoIGQ9XCJNMC4wMDAzMiA1NzZhNTEwLjcyIDUxMC43MiAwIDAgMCAxNzMuMzQ0IDM4NGw4NC42NzItOTZBMzgzLjEzNiAzODMuMTM2IDAgMCAxIDEyOC4wMDAzMiA1NzZDMTI4LjAwMDMyIDM2My45MzYgMjk5LjkzNjMyIDE5MiA1MTIuMDAwMzIgMTkyYzEwNi4wNDggMCAyMDIuMDQ4IDQyLjk3NiAyNzEuNTIgMTEyLjQ4TDY0MC4wMDAzMiA0NDhoMzg0VjY0bC0xNDkuOTg0IDE0OS45ODRBNTEwLjI3MiA1MTAuMjcyIDAgMCAwIDUxMi4wMDAzMiA2NEMyMjkuMjE2MzIgNjQgMC4wMDAzMiAyOTMuMjE2IDAuMDAwMzIgNTc2elwiPjwvcGF0aD48L3N2Zz4nLHRoaXMudGFnPVwiYnV0dG9uXCJ9cmV0dXJuIGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVyblwiXCJ9LGUucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiExfSxlLnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLnNlbGVjdGlvbn0sZS5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihlLHQpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGUucmVkbyYmZS5yZWRvKCl9LGV9KCksVHE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50aXRsZT1IUChcInVuZG8udW5kb1wiKSx0aGlzLmljb25Tdmc9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTUxMiA2NEE1MTAuMjcyIDUxMC4yNzIgMCAwIDAgMTQ5Ljk4NCAyMTMuOTg0TDAuMDMyIDY0djM4NGgzODRMMjQwLjUxMiAzMDQuNDhBMzgyLjc4NCAzODIuNzg0IDAgMCAxIDUxMi4wMzIgMTkyYzIxMi4wNjQgMCAzODQgMTcxLjkzNiAzODQgMzg0IDAgMTE0LjY4OC01MC4zMDQgMjE3LjYzMi0xMzAuMDE2IDI4OGw4NC42NzIgOTZhNTEwLjcyIDUxMC43MiAwIDAgMCAxNzMuMzQ0LTM4NGMwLTI4Mi43ODQtMjI5LjIxNi01MTItNTEyLTUxMnpcIj48L3BhdGg+PC9zdmc+Jyx0aGlzLnRhZz1cImJ1dHRvblwifXJldHVybiBlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm5cIlwifSxlLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaXNEaXNhYmxlZD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5zZWxlY3Rpb259LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnVuZG8mJmUudW5kbygpfSxlfSgpLF9xPXttZW51czpbe2tleTpcInJlZG9cIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGcX19LHtrZXk6XCJ1bmRvXCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgVHF9fV19LFBxPXt0eXBlOlwiZGl2aWRlclwiLHJlbmRlckVsZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBwZyhcImRpdlwiLHtwcm9wczp7Y29udGVudEVkaXRhYmxlOiExLGNsYXNzTmFtZTpcInctZS10ZXh0YXJlYS1kaXZpZGVyXCJ9LGRhdGFzZXQ6e3NlbGVjdGVkOlFPLmlzTm9kZVNlbGVjdGVkKG4sZSk/XCJ0cnVlXCI6XCJcIn0sc3R5bGU6e30sb246e21vdXNlZG93bjpmdW5jdGlvbihlKXtyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpfX19LFtwZyhcImhyXCIpXSl9fSxqcT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnRpdGxlPUhQKFwiZGl2aWRlci50aXRsZVwiKSx0aGlzLmljb25Tdmc9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDkyIDEwMjRcIj48cGF0aCBkPVwiTTAgNTEuMm01MS4yIDBsOTg5Ljg2NjY2NyAwcTUxLjIgMCA1MS4yIDUxLjJsMCAwcTAgNTEuMi01MS4yIDUxLjJsLTk4OS44NjY2NjcgMHEtNTEuMiAwLTUxLjItNTEuMmwwIDBxMC01MS4yIDUxLjItNTEuMlpcIj48L3BhdGg+PHBhdGggZD1cIk0wIDQ2MC44bTUxLjIgMGwxNzAuNjY2NjY3IDBxNTEuMiAwIDUxLjIgNTEuMmwwIDBxMCA1MS4yLTUxLjIgNTEuMmwtMTcwLjY2NjY2NyAwcS01MS4yIDAtNTEuMi01MS4ybDAgMHEwLTUxLjIgNTEuMi01MS4yWlwiPjwvcGF0aD48cGF0aCBkPVwiTTgxOS4yIDQ2MC44bTUxLjIgMGwxNzAuNjY2NjY3IDBxNTEuMiAwIDUxLjIgNTEuMmwwIDBxMCA1MS4yLTUxLjIgNTEuMmwtMTcwLjY2NjY2NyAwcS01MS4yIDAtNTEuMi01MS4ybDAgMHEwLTUxLjIgNTEuMi01MS4yWlwiPjwvcGF0aD48cGF0aCBkPVwiTTQwOS42IDQ2MC44bTUxLjIgMGwxNzAuNjY2NjY3IDBxNTEuMiAwIDUxLjIgNTEuMmwwIDBxMCA1MS4yLTUxLjIgNTEuMmwtMTcwLjY2NjY2NyAwcS01MS4yIDAtNTEuMi01MS4ybDAgMHEwLTUxLjIgNTEuMi01MS4yWlwiPjwvcGF0aD48cGF0aCBkPVwiTTAgODcwLjRtNTEuMiAwbDk4OS44NjY2NjcgMHE1MS4yIDAgNTEuMiA1MS4ybDAgMHEwIDUxLjItNTEuMiA1MS4ybC05ODkuODY2NjY3IDBxLTUxLjIgMC01MS4yLTUxLjJsMCAwcTAtNTEuMiA1MS4yLTUxLjJaXCI+PC9wYXRoPjwvc3ZnPicsdGhpcy50YWc9XCJidXR0b25cIn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuc2VsZWN0aW9ufHwhIVFPLmdldFNlbGVjdGVkRWxlbXMoZSkuc29tZSgoZnVuY3Rpb24odCl7aWYoZS5pc1ZvaWQodCkpcmV0dXJuITA7dmFyIG49UU8uZ2V0Tm9kZVR5cGUodCk7cmV0dXJuXCJ0YWJsZVwiPT09bnx8XCJwcmVcIj09PW58fHZvaWQgMH0pKX0sZS5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihlLHQpe21kLmluc2VydE5vZGVzKGUse3R5cGU6XCJkaXZpZGVyXCIsY2hpbGRyZW46W3t0ZXh0OlwiXCJ9XX0se21vZGU6XCJoaWdoZXN0XCJ9KX0sZX0oKSxOcT17cmVuZGVyRWxlbXM6W1BxXSxlbGVtc1RvSHRtbDpbe3R5cGU6XCJkaXZpZGVyXCIsZWxlbVRvSHRtbDpmdW5jdGlvbihlLHQpe3JldHVyblwiPGhyLz5cIn19XSxwYXJzZUVsZW1zSHRtbDpbe3NlbGVjdG9yOlwiaHI6bm90KFtkYXRhLXctZS10eXBlXSlcIixwYXJzZUVsZW1IdG1sOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57dHlwZTpcImRpdmlkZXJcIixjaGlsZHJlbjpbe3RleHQ6XCJcIn1dfX19XSxtZW51czpbe2tleTpcImRpdmlkZXJcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqcX19XSxlZGl0b3JQbHVnaW46ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pc1ZvaWQsbj1lLm5vcm1hbGl6ZU5vZGUscj1lO3JldHVybiByLmlzVm9pZD1mdW5jdGlvbihlKXtyZXR1cm5cImRpdmlkZXJcIj09PWUudHlwZXx8dChlKX0sci5ub3JtYWxpemVOb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PXNNKGUsMiksbz10WzBdLGk9dFsxXTtpZihcImRpdmlkZXJcIiE9PVFPLmdldE5vZGVUeXBlKG8pKXJldHVybiBuKFtvLGldKTtRTy5pc0xhc3ROb2RlKHIsbykmJm1kLmluc2VydE5vZGVzKHIsUU8uZ2VuRW1wdHlQYXJhZ3JhcGgoKSx7YXQ6W2lbMF0rMV19KX0scn19LElxPWlMLm1hcDtMSSh7dGFyZ2V0OlwiQXJyYXlcIixwcm90bzohMCxmb3JjZWQ6IXVMKFwibWFwXCIpfSx7bWFwOmZ1bmN0aW9uKGUpe3JldHVybiBJcSh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pO3ZhciBMcT1CaihbXS5qb2luKSxScT1OaiE9T2JqZWN0LE1xPUVNKFwiam9pblwiLFwiLFwiKTtMSSh7dGFyZ2V0OlwiQXJyYXlcIixwcm90bzohMCxmb3JjZWQ6UnF8fCFNcX0se2pvaW46ZnVuY3Rpb24oZSl7cmV0dXJuIExxKFJqKHRoaXMpLHZvaWQgMD09PWU/XCIsXCI6ZSl9fSk7dmFyIHpxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMudGl0bGU9SFAoXCJjb2RlQmxvY2sudGl0bGVcIiksdGhpcy5pY29uU3ZnPSc8c3ZnIHZpZXdCb3g9XCIwIDAgMTI4MCAxMDI0XCI+PHBhdGggZD1cIk04MzIgNzM2bDk2IDk2IDMyMC0zMjBMOTI4IDE5MmwtOTYgOTYgMjI0IDIyNHpNNDQ4IDI4OGwtOTYtOTZMMzIgNTEybDMyMCAzMjAgOTYtOTYtMjI0LTIyNHpNNzAxLjMxMiAxNTAuNTI4bDY5LjQ3MiAxOC45NDQtMTkyIDcwNC4wMzItNjkuNDcyLTE4Ljk0NCAxOTItNzA0LjAzMnpcIj48L3BhdGg+PC9zdmc+Jyx0aGlzLnRhZz1cImJ1dHRvblwifXJldHVybiBlLnByb3RvdHlwZS5nZXRTZWxlY3RDb2RlRWxlbT1mdW5jdGlvbihlKXt2YXIgdD1RTy5nZXRTZWxlY3RlZE5vZGVCeVR5cGUoZSxcImNvZGVcIik7aWYobnVsbD09dClyZXR1cm4gbnVsbDt2YXIgbj1RTy5nZXRQYXJlbnROb2RlKGUsdCk7cmV0dXJuIG51bGw9PW58fFwicHJlXCIhPT1RTy5nZXROb2RlVHlwZShuKT9udWxsOnR9LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U2VsZWN0Q29kZUVsZW0oZSk7cmV0dXJuIG51bGw9PXQ/XCJcIjp0Lmxhbmd1YWdlfHxcIlwifSxlLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4hIXRoaXMuZ2V0U2VsZWN0Q29kZUVsZW0oZSl9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZS5zZWxlY3Rpb24pcmV0dXJuITA7dmFyIHQ9UU8uZ2V0U2VsZWN0ZWRFbGVtcyhlKTtyZXR1cm4hIXQuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIGUuaXNWb2lkKHQpfSkpfHwhdC5zb21lKChmdW5jdGlvbihlKXt2YXIgdD1RTy5nZXROb2RlVHlwZShlKTtpZihcInByZVwiPT09dHx8XCJwYXJhZ3JhcGhcIj09PXQpcmV0dXJuITB9KSl9LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXt0aGlzLmlzQWN0aXZlKGUpP3RoaXMuY2hhbmdlVG9QbGFpblRleHQoZSk6dGhpcy5jaGFuZ2VUb0NvZGVCbG9jayhlLHQudG9TdHJpbmcoKSl9LGUucHJvdG90eXBlLmNoYW5nZVRvUGxhaW5UZXh0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U2VsZWN0Q29kZUVsZW0oZSk7aWYobnVsbCE9dCl7dmFyIG49TmYuc3RyaW5nKHQpO21kLnJlbW92ZU5vZGVzKGUse21vZGU6XCJoaWdoZXN0XCJ9KTt2YXIgcj1uLnNwbGl0KFwiXFxuXCIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6XCJwYXJhZ3JhcGhcIixjaGlsZHJlbjpbe3RleHQ6ZX1dfX0pKTttZC5pbnNlcnROb2RlcyhlLHIse21vZGU6XCJoaWdoZXN0XCJ9KX19LGUucHJvdG90eXBlLmNoYW5nZVRvQ29kZUJsb2NrPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvPVtdLGk9QmYubm9kZXMoZSx7bWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2hpbGRyZW4uaW5jbHVkZXModCl9LHVuaXZlcnNhbDohMH0pO3RyeXtmb3IodmFyIGE9dU0oaSksdT1hLm5leHQoKTshdS5kb25lO3U9YS5uZXh0KCkpe3ZhciBzPXNNKHUudmFsdWUsMSlbMF07cyYmby5wdXNoKE5mLnN0cmluZyhzKSl9fWNhdGNoKGUpe249e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e3UmJiF1LmRvbmUmJihyPWEucmV0dXJuKSYmci5jYWxsKGEpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1tZC5yZW1vdmVOb2RlcyhlLHttb2RlOlwiaGlnaGVzdFwifSk7dmFyIGw9e3R5cGU6XCJwcmVcIixjaGlsZHJlbjpbe3R5cGU6XCJjb2RlXCIsbGFuZ3VhZ2U6dCxjaGlsZHJlbjpbe3RleHQ6by5qb2luKFwiXFxuXCIpfV19XX07bWQuaW5zZXJ0Tm9kZXMoZSxsLHttb2RlOlwiaGlnaGVzdFwifSl9LGV9KCksJHE9e2tleTpcImNvZGVCbG9ja1wiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHpxfX07TEkoe3RhcmdldDpcIlN0cmluZ1wiLHByb3RvOiEwLGZvcmNlZDpoTShcImFuY2hvclwiKX0se2FuY2hvcjpmdW5jdGlvbihlKXtyZXR1cm4gcE0odGhpcyxcImFcIixcIm5hbWVcIixlKX19KSxKTChcIm1hdGNoXCIsKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bZnVuY3Rpb24odCl7dmFyIG49TGoodGhpcykscj1udWxsPT10P3ZvaWQgMDpvTih0LGUpO3JldHVybiByP2JqKHIsdCxuKTpuZXcgUmVnRXhwKHQpW2VdKGRMKG4pKX0sZnVuY3Rpb24oZSl7dmFyIHI9ak4odGhpcyksbz1kTChlKSxpPW4odCxyLG8pO2lmKGkuZG9uZSlyZXR1cm4gaS52YWx1ZTtpZighci5nbG9iYWwpcmV0dXJuIHBSKHIsbyk7dmFyIGE9ci51bmljb2RlO3IubGFzdEluZGV4PTA7Zm9yKHZhciB1LHM9W10sbD0wO251bGwhPT0odT1wUihyLG8pKTspe3ZhciBjPWRMKHVbMF0pO3NbbF09YyxcIlwiPT09YyYmKHIubGFzdEluZGV4PW9SKG8sZ0koci5sYXN0SW5kZXgpLGEpKSxsKyt9cmV0dXJuIDA9PT1sP251bGw6c31dfSkpO3ZhciBIcT17dHlwZTpcInByZVwiLHJlbmRlckVsZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBQZyhcInByZVwiLG51bGwsdCl9fSxWcT17dHlwZTpcImNvZGVcIixyZW5kZXJFbGVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUGcoXCJjb2RlXCIsbnVsbCx0KX19LFVxPXtzZWxlY3RvcjpcInByZTpub3QoW2RhdGEtdy1lLXR5cGVdKVwiLHBhcnNlRWxlbUh0bWw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU1wKGUpO3JldHVybiAwPT09KHQ9dC5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVyblwiY29kZVwiPT09UU8uZ2V0Tm9kZVR5cGUoZSl9KSkpLmxlbmd0aCYmKHQ9W3t0eXBlOlwiY29kZVwiLGxhbmd1YWdlOlwiXCIsY2hpbGRyZW46W3t0ZXh0OnJbMF0udGV4dENvbnRlbnR8fFwiXCJ9XX1dKSx7dHlwZTpcInByZVwiLGNoaWxkcmVuOnQuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm5cImNvZGVcIj09PVFPLmdldE5vZGVUeXBlKGUpfSkpfX19LFdxPXttZW51czpbJHFdLGVkaXRvclBsdWdpbjpmdW5jdGlvbihlKXt2YXIgdD1lLmluc2VydEJyZWFrLG49ZS5ub3JtYWxpemVOb2RlLHI9ZS5pbnNlcnREYXRhO2UuaW5zZXJ0Tm9kZTt2YXIgbz1lO3JldHVybiBvLmluc2VydEJyZWFrPWZ1bmN0aW9uKCl7dmFyIGU9UU8uZ2V0U2VsZWN0ZWROb2RlQnlUeXBlKG8sXCJjb2RlXCIpO2lmKG51bGwhPWUpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5zZWxlY3Rpb247aWYobnVsbD09bilyZXR1cm5cIlwiO3ZhciByPU5mLnN0cmluZyhlKSxvPW4uYW5jaG9yLm9mZnNldCxpPXIuc2xpY2UoMCxvKS5zcGxpdChcIlxcblwiKSxhPWkubGVuZ3RoO3JldHVybiAwPT09YT9cIlwiOmlbYS0xXX0oZSxvKTtpZihuKXt2YXIgcj1uLm1hdGNoKC9eXFxzKy8pO2lmKG51bGwhPXImJm51bGwhPXJbMF0pe3ZhciBpPXJbMF07cmV0dXJuIHZvaWQgby5pbnNlcnRUZXh0KFwiXFxuXCIraSl9fW8uaW5zZXJ0VGV4dChcIlxcblwiKX1lbHNlIHQoKX0sby5ub3JtYWxpemVOb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PXNNKGUsMikscj10WzBdLGk9dFsxXSxhPVFPLmdldE5vZGVUeXBlKHIpO3JldHVyblwiY29kZVwiPT09YSYmaS5sZW5ndGg8PTEmJm1kLnNldE5vZGVzKG8se3R5cGU6XCJwYXJhZ3JhcGhcIn0se2F0Oml9KSxcInByZVwiPT09YSYmKFFPLmlzTGFzdE5vZGUobyxyKSYmbWQuaW5zZXJ0Tm9kZXMobyxRTy5nZW5FbXB0eVBhcmFncmFwaCgpLHthdDpbaVswXSsxXX0pLFwiY29kZVwiIT09UU8uZ2V0Tm9kZVR5cGUoci5jaGlsZHJlblswXSkmJihtZC51bndyYXBOb2RlcyhvKSxtZC5zZXROb2RlcyhvLHt0eXBlOlwicGFyYWdyYXBoXCJ9LHttb2RlOlwiaGlnaGVzdFwifSkpKSxuKFtyLGldKX0sby5pbnNlcnREYXRhPWZ1bmN0aW9uKGUpe2lmKG51bGwhPVFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShvLFwiY29kZVwiKSl7dmFyIHQ9ZS5nZXREYXRhKFwidGV4dC9wbGFpblwiKTtCZi5pbnNlcnRUZXh0KG8sdCl9ZWxzZSByKGUpfSxvfSxyZW5kZXJFbGVtczpbSHEsVnFdLGVsZW1zVG9IdG1sOlt7dHlwZTpcImNvZGVcIixlbGVtVG9IdG1sOmZ1bmN0aW9uKGUsdCl7cmV0dXJuXCI8Y29kZT5cIit0K1wiPC9jb2RlPlwifX0se3R5cGU6XCJwcmVcIixlbGVtVG9IdG1sOmZ1bmN0aW9uKGUsdCl7cmV0dXJuXCI8cHJlPlwiK3QrXCI8L3ByZT5cIn19XSxwcmVQYXJzZUh0bWw6W3tzZWxlY3RvcjpcInByZT5jb2RlXCIscHJlUGFyc2VIdG1sOmZ1bmN0aW9uKGUpe3ZhciB0PU1wKGUpO2lmKFwiY29kZVwiIT09UVIodCkpcmV0dXJuIGU7dmFyIG49dC5maW5kKFwieG1wXCIpO2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gZTt2YXIgcj1uLnRleHQoKTtyZXR1cm4gbi5yZW1vdmUoKSx0LnRleHQociksdFswXX19XSxwYXJzZUVsZW1zSHRtbDpbe3NlbGVjdG9yOlwicHJlOm5vdChbZGF0YS13LWUtdHlwZV0pPmNvZGVcIixwYXJzZUVsZW1IdG1sOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57dHlwZTpcImNvZGVcIixsYW5ndWFnZTpcIlwiLGNoaWxkcmVuOlt7dGV4dDpNcChlKVswXS50ZXh0Q29udGVudHx8XCJcIn1dfX19LFVxXX0sR3E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50aXRsZT1IUChcImZ1bGxTY3JlZW4udGl0bGVcIiksdGhpcy5pY29uU3ZnPSc8c3ZnIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCI+PHBhdGggZD1cIk0xMzMuNzA1MTQzIDMzNS40MzMxNDNWMTMzLjg1MTQyOWgyMDEuNTgxNzE0YTI5LjYyMjg1NyAyOS42MjI4NTcgMCAwIDAgMjkuNjIyODU3LTI5LjU0OTcxNVY2OC43NTQyODZhMjkuNjIyODU3IDI5LjYyMjg1NyAwIDAgMC0yOS42MjI4NTctMjkuNjIyODU3SDYxLjczMjU3MUEyMi44OTM3MTQgMjIuODkzNzE0IDAgMCAwIDM4Ljc2NTcxNCA2Mi4wMjUxNDNWMzM1LjcyNTcxNGMwIDE2LjMxMDg1NyAxMy4yMzg4NTcgMjkuNjIyODU3IDI5LjYyMjg1NyAyOS42MjI4NTdoMzUuNTQ3NDI5YTI5Ljg0MjI4NiAyOS44NDIyODYgMCAwIDAgMjkuNjk2LTI5Ljg0MjI4NXpNNjkwLjk4MDU3MSAxMzMuODUxNDI5aDIwMS41ODE3MTV2MjAxLjY1NDg1N2MwIDE2LjMxMDg1NyAxMy4yMzg4NTcgMjkuNTQ5NzE0IDI5LjYyMjg1NyAyOS41NDk3MTRoMzUuNTQ3NDI4YTI5LjYyMjg1NyAyOS42MjI4NTcgMCAwIDAgMjkuNTQ5NzE1LTI5LjU0OTcxNFY2MS45NTJhMjIuODkzNzE0IDIyLjg5MzcxNCAwIDAgMC0yMi44MjA1NzItMjIuODkzNzE0aC0yNzMuNTU0Mjg1YTI5LjYyMjg1NyAyOS42MjI4NTcgMCAwIDAtMjkuNTQ5NzE1IDI5LjYyMjg1N3YzNS41NDc0MjhjMCAxNi4zMTA4NTcgMTMuMjM4ODU3IDI5LjY5NiAyOS42MjI4NTcgMjkuNjk2ek0zMzUuMjg2ODU3IDg5Mi43ODE3MTRIMTMzLjcwNTE0M1Y2OTEuMmEyOS42MjI4NTcgMjkuNjIyODU3IDAgMCAwLTI5LjYyMjg1Ny0yOS42MjI4NTdINjguNTM0ODU3YTI5LjYyMjg1NyAyOS42MjI4NTcgMCAwIDAtMjkuNTQ5NzE0IDI5LjYyMjg1N3YyNzMuNTU0Mjg2YzAgMTIuNjUzNzE0IDEwLjI0IDIyLjg5MzcxNCAyMi44MjA1NzEgMjIuODkzNzE0aDI3My41NTQyODZhMjkuNjIyODU3IDI5LjYyMjg1NyAwIDAgMCAyOS42OTYtMjkuNjIyODU3di0zNS41NDc0MjlhMjkuNzY5MTQzIDI5Ljc2OTE0MyAwIDAgMC0yOS43NjkxNDMtMjkuNjk2eiBtNTU3LjM0ODU3Mi0yMDEuNTgxNzE0djIwMS41ODE3MTRINjkwLjkwNzQyOWEyOS42MjI4NTcgMjkuNjIyODU3IDAgMCAwLTI5LjYyMjg1OCAyOS42MjI4NTd2MzUuNTQ3NDI5YzAgMTYuMzEwODU3IDEzLjIzODg1NyAyOS42MjI4NTcgMjkuNjIyODU4IDI5LjYyMjg1N2gyNzMuNTU0Mjg1YzEyLjU4MDU3MSAwIDIyLjg5MzcxNC0xMC4zMTMxNDMgMjIuODkzNzE1LTIyLjg5MzcxNFY2OTEuMmEyOS42MjI4NTcgMjkuNjIyODU3IDAgMCAwLTI5LjYyMjg1OC0yOS42MjI4NTdoLTM1LjU0NzQyOGEyOS42MjI4NTcgMjkuNjIyODU3IDAgMCAwLTI5LjY5NiAyOS42MjI4NTd6XCI+PC9wYXRoPjwvc3ZnPicsdGhpcy50YWc9XCJidXR0b25cIix0aGlzLmFsd2F5c0VuYWJsZT0hMH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNGdWxsU2NyZWVufSxlLnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKGUpe3JldHVybiExfSxlLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGUsdCl7ZS5pc0Z1bGxTY3JlZW4/ZS51bkZ1bGxTY3JlZW4oKTplLmZ1bGxTY3JlZW4oKX0sZX0oKSxxcT17bWVudXM6W3trZXk6XCJmdWxsU2NyZWVuXCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgR3F9fV19LEtxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMudGl0bGU9SFAoXCJjb21tb24uZW50ZXJcIiksdGhpcy5pY29uU3ZnPSc8c3ZnIHZpZXdCb3g9XCIwIDAgMTI1NSAxMDI0XCI+PHBhdGggZD1cIk0xMDk1LjExMTExMSA3MzEuNDc3MzMzaC02MjUuNzc3Nzc4VjEwMjRMMCA2NTguMzE4MjIyIDQ2OS4zMzMzMzMgMjkyLjQwODg4OXYyOTIuNjM2NDQ0aDYyNS43Nzc3NzhWMGgxNTYuNDQ0NDQ1djczMS40NzczMzN6XCI+PC9wYXRoPjwvc3ZnPicsdGhpcy50YWc9XCJidXR0b25cIn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWxlY3Rpb247cmV0dXJuIG51bGw9PXR8fCEhcWYuaXNFeHBhbmRlZCh0KX0sZS5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihlLHQpe3ZhciBuPWUuc2VsZWN0aW9uO2lmKG51bGwhPW4pe3ZhciByPVtuLmFuY2hvci5wYXRoWzBdXTttZC5pbnNlcnROb2RlcyhlLHt0eXBlOlwicGFyYWdyYXBoXCIsY2hpbGRyZW46W3t0ZXh0OlwiXCJ9XX0se2F0OnJ9KSxlLnNlbGVjdChCZi5zdGFydChlLHIpKX19LGV9KCksWXE9W256LGUkLHZxLEVxLE9xLEJxLEokLE5xLGhILEUkLFdxLGRILFZ6LGNNLG5ILF9xLHFxLHttZW51czpbe2tleTpcImVudGVyXCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgS3F9fV19XTtNUChcImVuXCIse2xpc3RNb2R1bGU6e3VuT3JkZXJlZExpc3Q6XCJVbm9yZGVyZWQgbGlzdFwiLG9yZGVyZWRMaXN0OlwiT3JkZXJlZCBsaXN0XCJ9fSksTVAoXCJ6aC1DTlwiLHtsaXN0TW9kdWxlOnt1bk9yZGVyZWRMaXN0Olwi5peg5bqP5YiX6KGoXCIsb3JkZXJlZExpc3Q6XCLmnInluo/liJfooahcIn19KTt2YXIgWHE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIFpxKGUpe3ZhciB0PXtleHBvcnRzOnt9fTtyZXR1cm4gZSh0LHQuZXhwb3J0cyksdC5leHBvcnRzfXZhciBKcSxRcSxlSz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5NYXRoPT1NYXRoJiZlfSx0Sz1lSyhcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyl8fGVLKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyl8fGVLKFwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmKXx8ZUsoXCJvYmplY3RcIj09dHlwZW9mIFhxJiZYcSl8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCl8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxuSz1GdW5jdGlvbi5wcm90b3R5cGUscks9bksuYmluZCxvSz1uSy5jYWxsLGlLPXJLJiZySy5iaW5kKG9LKSxhSz1ySz9mdW5jdGlvbihlKXtyZXR1cm4gZSYmaUsob0ssZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZmdW5jdGlvbigpe3JldHVybiBvSy5hcHBseShlLGFyZ3VtZW50cyl9fSx1Sz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fSxzSz1hSyh7fS50b1N0cmluZyksbEs9YUsoXCJcIi5zbGljZSksY0s9ZnVuY3Rpb24oZSl7cmV0dXJuIGxLKHNLKGUpLDgsLTEpfSxmSz10Sy5PYmplY3QsZEs9YUsoXCJcIi5zcGxpdCkscEs9dUsoKGZ1bmN0aW9uKCl7cmV0dXJuIWZLKFwielwiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbihlKXtyZXR1cm5cIlN0cmluZ1wiPT1jSyhlKT9kSyhlLFwiXCIpOmZLKGUpfTpmSyxoSz10Sy5UeXBlRXJyb3IsZ0s9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSl0aHJvdyBoSyhcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiK2UpO3JldHVybiBlfSx2Sz1mdW5jdGlvbihlKXtyZXR1cm4gcEsoZ0soZSkpfSx5Sz1PYmplY3QuZGVmaW5lUHJvcGVydHksbUs9ZnVuY3Rpb24oZSx0KXt0cnl7eUsodEssZSx7dmFsdWU6dCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChuKXt0S1tlXT10fXJldHVybiB0fSxiSz10S1tcIl9fY29yZS1qc19zaGFyZWRfX1wiXXx8bUsoXCJfX2NvcmUtanNfc2hhcmVkX19cIix7fSksd0s9WnEoKGZ1bmN0aW9uKGUpeyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYktbZV18fChiS1tlXT12b2lkIDAhPT10P3Q6e30pfSkoXCJ2ZXJzaW9uc1wiLFtdKS5wdXNoKHt2ZXJzaW9uOlwiMy4xOS4zXCIsbW9kZTpcImdsb2JhbFwiLGNvcHlyaWdodDpcIsKpIDIwMjEgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSlcIn0pfSkpLEVLPXRLLk9iamVjdCxESz1mdW5jdGlvbihlKXtyZXR1cm4gRUsoZ0soZSkpfSxTSz1hSyh7fS5oYXNPd25Qcm9wZXJ0eSkseEs9T2JqZWN0Lmhhc093bnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gU0soREsoZSksdCl9LENLPTAsQUs9TWF0aC5yYW5kb20oKSxPSz1hSygxLi50b1N0cmluZyksa0s9ZnVuY3Rpb24oZSl7cmV0dXJuXCJTeW1ib2woXCIrKHZvaWQgMD09PWU/XCJcIjplKStcIilfXCIrT0soKytDSytBSywzNil9LEJLPWZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9LEZLPWZ1bmN0aW9uKGUpe3JldHVybiBCSyhlKT9lOnZvaWQgMH0sVEs9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP0ZLKHRLW2VdKTp0S1tlXSYmdEtbZV1bdF19LF9LPVRLKFwibmF2aWdhdG9yXCIsXCJ1c2VyQWdlbnRcIil8fFwiXCIsUEs9dEsucHJvY2VzcyxqSz10Sy5EZW5vLE5LPVBLJiZQSy52ZXJzaW9uc3x8aksmJmpLLnZlcnNpb24sSUs9TksmJk5LLnY4O0lLJiYoUXE9KEpxPUlLLnNwbGl0KFwiLlwiKSlbMF0+MCYmSnFbMF08ND8xOisoSnFbMF0rSnFbMV0pKSwhUXEmJl9LJiYoIShKcT1fSy5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pKXx8SnFbMV0+PTc0KSYmKEpxPV9LLm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKSkmJihRcT0rSnFbMV0pO3ZhciBMSyxSSz1RcSxNSz0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiF1SygoZnVuY3Rpb24oKXt2YXIgZT1TeW1ib2woKTtyZXR1cm4hU3RyaW5nKGUpfHwhKE9iamVjdChlKWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZSSyYmUks8NDF9KSkseks9TUsmJiFTeW1ib2wuc2hhbSYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvciwkSz13SyhcIndrc1wiKSxISz10Sy5TeW1ib2wsVks9SEsmJkhLLmZvcixVSz16Sz9ISzpISyYmSEsud2l0aG91dFNldHRlcnx8a0ssV0s9ZnVuY3Rpb24oZSl7aWYoIXhLKCRLLGUpfHwhTUsmJlwic3RyaW5nXCIhPXR5cGVvZiAkS1tlXSl7dmFyIHQ9XCJTeW1ib2wuXCIrZTtNSyYmeEsoSEssZSk/JEtbZV09SEtbZV06JEtbZV09eksmJlZLP1ZLKHQpOlVLKHQpfXJldHVybiAkS1tlXX0sR0s9ZnVuY3Rpb24oZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGU/bnVsbCE9PWU6QksoZSl9LHFLPXRLLlN0cmluZyxLSz10Sy5UeXBlRXJyb3IsWUs9ZnVuY3Rpb24oZSl7aWYoR0soZSkpcmV0dXJuIGU7dGhyb3cgS0socUsoZSkrXCIgaXMgbm90IGFuIG9iamVjdFwiKX0sWEs9IXVLKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KSksWks9dEsuZG9jdW1lbnQsSks9R0soWkspJiZHSyhaSy5jcmVhdGVFbGVtZW50KSxRSz1mdW5jdGlvbihlKXtyZXR1cm4gSks/WksuY3JlYXRlRWxlbWVudChlKTp7fX0sZVk9IVhLJiYhdUsoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShRSyhcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKSx0WT1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxuWT10WS5iaW5kP3RZLmJpbmQodFkpOmZ1bmN0aW9uKCl7cmV0dXJuIHRZLmFwcGx5KHRZLGFyZ3VtZW50cyl9LHJZPWFLKHt9LmlzUHJvdG90eXBlT2YpLG9ZPXRLLk9iamVjdCxpWT16Sz9mdW5jdGlvbihlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7dmFyIHQ9VEsoXCJTeW1ib2xcIik7cmV0dXJuIEJLKHQpJiZyWSh0LnByb3RvdHlwZSxvWShlKSl9LGFZPXRLLlN0cmluZyx1WT1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIGFZKGUpfWNhdGNoKGUpe3JldHVyblwiT2JqZWN0XCJ9fSxzWT10Sy5UeXBlRXJyb3IsbFk9ZnVuY3Rpb24oZSl7aWYoQksoZSkpcmV0dXJuIGU7dGhyb3cgc1kodVkoZSkrXCIgaXMgbm90IGEgZnVuY3Rpb25cIil9LGNZPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVt0XTtyZXR1cm4gbnVsbD09bj92b2lkIDA6bFkobil9LGZZPXRLLlR5cGVFcnJvcixkWT10Sy5UeXBlRXJyb3IscFk9V0soXCJ0b1ByaW1pdGl2ZVwiKSxoWT1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlLHQpe2lmKCFHSyhlKXx8aVkoZSkpcmV0dXJuIGU7dmFyIG4scj1jWShlLHBZKTtpZihyKXtpZih2b2lkIDA9PT10JiYodD1cImRlZmF1bHRcIiksbj1uWShyLGUsdCksIUdLKG4pfHxpWShuKSlyZXR1cm4gbjt0aHJvdyBkWShcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX1yZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJudW1iZXJcIiksZnVuY3Rpb24oZSx0KXt2YXIgbixyO2lmKFwic3RyaW5nXCI9PT10JiZCSyhuPWUudG9TdHJpbmcpJiYhR0socj1uWShuLGUpKSlyZXR1cm4gcjtpZihCSyhuPWUudmFsdWVPZikmJiFHSyhyPW5ZKG4sZSkpKXJldHVybiByO2lmKFwic3RyaW5nXCIhPT10JiZCSyhuPWUudG9TdHJpbmcpJiYhR0socj1uWShuLGUpKSlyZXR1cm4gcjt0aHJvdyBmWShcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX0oZSx0KX0oZSxcInN0cmluZ1wiKTtyZXR1cm4gaVkodCk/dDp0K1wiXCJ9LGdZPXRLLlR5cGVFcnJvcix2WT1PYmplY3QuZGVmaW5lUHJvcGVydHkseVk9e2Y6WEs/dlk6ZnVuY3Rpb24oZSx0LG4pe2lmKFlLKGUpLHQ9aFkodCksWUsobiksZVkpdHJ5e3JldHVybiB2WShlLHQsbil9Y2F0Y2goZSl7fWlmKFwiZ2V0XCJpbiBufHxcInNldFwiaW4gbil0aHJvdyBnWShcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkXCIpO3JldHVyblwidmFsdWVcImluIG4mJihlW3RdPW4udmFsdWUpLGV9fSxtWT1NYXRoLmNlaWwsYlk9TWF0aC5mbG9vcix3WT1mdW5jdGlvbihlKXt2YXIgdD0rZTtyZXR1cm4gdCE9dHx8MD09PXQ/MDoodD4wP2JZOm1ZKSh0KX0sRVk9TWF0aC5tYXgsRFk9TWF0aC5taW4sU1k9ZnVuY3Rpb24oZSx0KXt2YXIgbj13WShlKTtyZXR1cm4gbjwwP0VZKG4rdCwwKTpEWShuLHQpfSx4WT1NYXRoLm1pbixDWT1mdW5jdGlvbihlKXtyZXR1cm4gZT4wP3hZKHdZKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9LEFZPWZ1bmN0aW9uKGUpe3JldHVybiBDWShlLmxlbmd0aCl9LE9ZPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7dmFyIG8saT12Syh0KSxhPUFZKGkpLHU9U1kocixhKTtpZihlJiZuIT1uKXtmb3IoO2E+dTspaWYoKG89aVt1KytdKSE9bylyZXR1cm4hMH1lbHNlIGZvcig7YT51O3UrKylpZigoZXx8dSBpbiBpKSYmaVt1XT09PW4pcmV0dXJuIGV8fHV8fDA7cmV0dXJuIWUmJi0xfX0sa1k9e2luY2x1ZGVzOk9ZKCEwKSxpbmRleE9mOk9ZKCExKX0sQlk9e30sRlk9a1kuaW5kZXhPZixUWT1hSyhbXS5wdXNoKSxfWT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dksoZSksbz0wLGk9W107Zm9yKG4gaW4gcikheEsoQlksbikmJnhLKHIsbikmJlRZKGksbik7Zm9yKDt0Lmxlbmd0aD5vOyl4SyhyLG49dFtvKytdKSYmKH5GWShpLG4pfHxUWShpLG4pKTtyZXR1cm4gaX0sUFk9W1wiY29uc3RydWN0b3JcIixcImhhc093blByb3BlcnR5XCIsXCJpc1Byb3RvdHlwZU9mXCIsXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLFwidG9Mb2NhbGVTdHJpbmdcIixcInRvU3RyaW5nXCIsXCJ2YWx1ZU9mXCJdLGpZPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXtyZXR1cm4gX1koZSxQWSl9LE5ZPVhLP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUsdCl7WUsoZSk7Zm9yKHZhciBuLHI9dksodCksbz1qWSh0KSxpPW8ubGVuZ3RoLGE9MDtpPmE7KXlZLmYoZSxuPW9bYSsrXSxyW25dKTtyZXR1cm4gZX0sSVk9VEsoXCJkb2N1bWVudFwiLFwiZG9jdW1lbnRFbGVtZW50XCIpLExZPXdLKFwia2V5c1wiKSxSWT1mdW5jdGlvbihlKXtyZXR1cm4gTFlbZV18fChMWVtlXT1rSyhlKSl9LE1ZPVJZKFwiSUVfUFJPVE9cIikselk9ZnVuY3Rpb24oKXt9LCRZPWZ1bmN0aW9uKGUpe3JldHVyblwiPHNjcmlwdD5cIitlK1wiPFxcL3NjcmlwdD5cIn0sSFk9ZnVuY3Rpb24oZSl7ZS53cml0ZSgkWShcIlwiKSksZS5jbG9zZSgpO3ZhciB0PWUucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gZT1udWxsLHR9LFZZPWZ1bmN0aW9uKCl7dHJ5e0xLPW5ldyBBY3RpdmVYT2JqZWN0KFwiaHRtbGZpbGVcIil9Y2F0Y2goZSl7fXZhciBlLHQ7Vlk9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmTEs/SFkoTEspOigodD1RSyhcImlmcmFtZVwiKSkuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixJWS5hcHBlbmRDaGlsZCh0KSx0LnNyYz1TdHJpbmcoXCJqYXZhc2NyaXB0OlwiKSwoZT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxlLndyaXRlKCRZKFwiZG9jdW1lbnQuRj1PYmplY3RcIikpLGUuY2xvc2UoKSxlLkYpOkhZKExLKTtmb3IodmFyIG49UFkubGVuZ3RoO24tLTspZGVsZXRlIFZZLnByb3RvdHlwZVtQWVtuXV07cmV0dXJuIFZZKCl9O0JZW01ZXT0hMDt2YXIgVVk9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PWU/KHpZLnByb3RvdHlwZT1ZSyhlKSxuPW5ldyB6WSx6WS5wcm90b3R5cGU9bnVsbCxuW01ZXT1lKTpuPVZZKCksdm9pZCAwPT09dD9uOk5ZKG4sdCl9LFdZPVdLKFwidW5zY29wYWJsZXNcIiksR1k9QXJyYXkucHJvdG90eXBlO251bGw9PUdZW1dZXSYmeVkuZihHWSxXWSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOlVZKG51bGwpfSk7dmFyIHFZPWZ1bmN0aW9uKGUpe0dZW1dZXVtlXT0hMH0sS1k9e30sWVk9YUsoRnVuY3Rpb24udG9TdHJpbmcpO0JLKGJLLmluc3BlY3RTb3VyY2UpfHwoYksuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gWVkoZSl9KTt2YXIgWFksWlksSlksUVk9YksuaW5zcGVjdFNvdXJjZSxlWD10Sy5XZWFrTWFwLHRYPUJLKGVYKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFFZKGVYKSksblg9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19LHJYPVhLP2Z1bmN0aW9uKGUsdCxuKXtyZXR1cm4geVkuZihlLHQsblgoMSxuKSl9OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZVt0XT1uLGV9LG9YPXRLLlR5cGVFcnJvcixpWD10Sy5XZWFrTWFwO2lmKHRYfHxiSy5zdGF0ZSl7dmFyIGFYPWJLLnN0YXRlfHwoYksuc3RhdGU9bmV3IGlYKSx1WD1hSyhhWC5nZXQpLHNYPWFLKGFYLmhhcyksbFg9YUsoYVguc2V0KTtYWT1mdW5jdGlvbihlLHQpe2lmKHNYKGFYLGUpKXRocm93IG5ldyBvWChcIk9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkXCIpO3JldHVybiB0LmZhY2FkZT1lLGxYKGFYLGUsdCksdH0sWlk9ZnVuY3Rpb24oZSl7cmV0dXJuIHVYKGFYLGUpfHx7fX0sSlk9ZnVuY3Rpb24oZSl7cmV0dXJuIHNYKGFYLGUpfX1lbHNle3ZhciBjWD1SWShcInN0YXRlXCIpO0JZW2NYXT0hMCxYWT1mdW5jdGlvbihlLHQpe2lmKHhLKGUsY1gpKXRocm93IG5ldyBvWChcIk9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkXCIpO3JldHVybiB0LmZhY2FkZT1lLHJYKGUsY1gsdCksdH0sWlk9ZnVuY3Rpb24oZSl7cmV0dXJuIHhLKGUsY1gpP2VbY1hdOnt9fSxKWT1mdW5jdGlvbihlKXtyZXR1cm4geEsoZSxjWCl9fXZhciBmWCxkWCxwWCxoWD17c2V0OlhZLGdldDpaWSxoYXM6SlksZW5mb3JjZTpmdW5jdGlvbihlKXtyZXR1cm4gSlkoZSk/WlkoZSk6WFkoZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG47aWYoIUdLKHQpfHwobj1aWSh0KSkudHlwZSE9PWUpdGhyb3cgb1goXCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsIFwiK2UrXCIgcmVxdWlyZWRcIik7cmV0dXJuIG59fX0sZ1g9e30ucHJvcGVydHlJc0VudW1lcmFibGUsdlg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix5WD17Zjp2WCYmIWdYLmNhbGwoezE6Mn0sMSk/ZnVuY3Rpb24oZSl7dmFyIHQ9dlgodGhpcyxlKTtyZXR1cm4hIXQmJnQuZW51bWVyYWJsZX06Z1h9LG1YPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsYlg9e2Y6WEs/bVg6ZnVuY3Rpb24oZSx0KXtpZihlPXZLKGUpLHQ9aFkodCksZVkpdHJ5e3JldHVybiBtWChlLHQpfWNhdGNoKGUpe31pZih4SyhlLHQpKXJldHVybiBuWCghblkoeVguZixlLHQpLGVbdF0pfX0sd1g9RnVuY3Rpb24ucHJvdG90eXBlLEVYPVhLJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLERYPXhLKHdYLFwibmFtZVwiKSxTWD17RVhJU1RTOkRYLFBST1BFUjpEWCYmXCJzb21ldGhpbmdcIj09PWZ1bmN0aW9uKCl7fS5uYW1lLENPTkZJR1VSQUJMRTpEWCYmKCFYS3x8WEsmJkVYKHdYLFwibmFtZVwiKS5jb25maWd1cmFibGUpfSx4WD1acSgoZnVuY3Rpb24oZSl7dmFyIHQ9U1guQ09ORklHVVJBQkxFLG49aFguZ2V0LHI9aFguZW5mb3JjZSxvPVN0cmluZyhTdHJpbmcpLnNwbGl0KFwiU3RyaW5nXCIpOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSxuLGksYSl7dmFyIHUscz0hIWEmJiEhYS51bnNhZmUsbD0hIWEmJiEhYS5lbnVtZXJhYmxlLGM9ISFhJiYhIWEubm9UYXJnZXRHZXQsZj1hJiZ2b2lkIDAhPT1hLm5hbWU/YS5uYW1lOm47QksoaSkmJihcIlN5bWJvbChcIj09PVN0cmluZyhmKS5zbGljZSgwLDcpJiYoZj1cIltcIitTdHJpbmcoZikucmVwbGFjZSgvXlN5bWJvbFxcKChbXildKilcXCkvLFwiJDFcIikrXCJdXCIpLCgheEsoaSxcIm5hbWVcIil8fHQmJmkubmFtZSE9PWYpJiZyWChpLFwibmFtZVwiLGYpLCh1PXIoaSkpLnNvdXJjZXx8KHUuc291cmNlPW8uam9pbihcInN0cmluZ1wiPT10eXBlb2YgZj9mOlwiXCIpKSksZSE9PXRLPyhzPyFjJiZlW25dJiYobD0hMCk6ZGVsZXRlIGVbbl0sbD9lW25dPWk6clgoZSxuLGkpKTpsP2Vbbl09aTptSyhuLGkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLFwidG9TdHJpbmdcIiwoZnVuY3Rpb24oKXtyZXR1cm4gQksodGhpcykmJm4odGhpcykuc291cmNlfHxRWSh0aGlzKX0pKX0pKSxDWD1QWS5jb25jYXQoXCJsZW5ndGhcIixcInByb3RvdHlwZVwiKSxBWD17ZjpPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24oZSl7cmV0dXJuIF9ZKGUsQ1gpfX0sT1g9e2Y6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sa1g9YUsoW10uY29uY2F0KSxCWD1USyhcIlJlZmxlY3RcIixcIm93bktleXNcIil8fGZ1bmN0aW9uKGUpe3ZhciB0PUFYLmYoWUsoZSkpLG49T1guZjtyZXR1cm4gbj9rWCh0LG4oZSkpOnR9LEZYPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPUJYKHQpLHI9eVkuZixvPWJYLmYsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO3hLKGUsYSl8fHIoZSxhLG8odCxhKSl9fSxUWD0vI3xcXC5wcm90b3R5cGVcXC4vLF9YPWZ1bmN0aW9uKGUsdCl7dmFyIG49alhbUFgoZSldO3JldHVybiBuPT1JWHx8biE9TlgmJihCSyh0KT91Syh0KTohIXQpfSxQWD1fWC5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKFRYLFwiLlwiKS50b0xvd2VyQ2FzZSgpfSxqWD1fWC5kYXRhPXt9LE5YPV9YLk5BVElWRT1cIk5cIixJWD1fWC5QT0xZRklMTD1cIlBcIixMWD1fWCxSWD1iWC5mLE1YPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGksYSx1PWUudGFyZ2V0LHM9ZS5nbG9iYWwsbD1lLnN0YXQ7aWYobj1zP3RLOmw/dEtbdV18fG1LKHUse30pOih0S1t1XXx8e30pLnByb3RvdHlwZSlmb3IociBpbiB0KXtpZihpPXRbcl0sbz1lLm5vVGFyZ2V0R2V0PyhhPVJYKG4scikpJiZhLnZhbHVlOm5bcl0sIUxYKHM/cjp1KyhsP1wiLlwiOlwiI1wiKStyLGUuZm9yY2VkKSYmdm9pZCAwIT09byl7aWYodHlwZW9mIGk9PXR5cGVvZiBvKWNvbnRpbnVlO0ZYKGksbyl9KGUuc2hhbXx8byYmby5zaGFtKSYmclgoaSxcInNoYW1cIiwhMCkseFgobixyLGksZSl9fSx6WD0hdUsoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IGUpIT09ZS5wcm90b3R5cGV9KSksJFg9UlkoXCJJRV9QUk9UT1wiKSxIWD10Sy5PYmplY3QsVlg9SFgucHJvdG90eXBlLFVYPXpYP0hYLmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3ZhciB0PURLKGUpO2lmKHhLKHQsJFgpKXJldHVybiB0WyRYXTt2YXIgbj10LmNvbnN0cnVjdG9yO3JldHVybiBCSyhuKSYmdCBpbnN0YW5jZW9mIG4/bi5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIEhYP1ZYOm51bGx9LFdYPVdLKFwiaXRlcmF0b3JcIiksR1g9ITE7W10ua2V5cyYmKFwibmV4dFwiaW4ocFg9W10ua2V5cygpKT8oZFg9VVgoVVgocFgpKSkhPT1PYmplY3QucHJvdG90eXBlJiYoZlg9ZFgpOkdYPSEwKTt2YXIgcVg9bnVsbD09Zlh8fHVLKChmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBmWFtXWF0uY2FsbChlKSE9PWV9KSk7cVgmJihmWD17fSksQksoZlhbV1hdKXx8eFgoZlgsV1gsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIEtYPXtJdGVyYXRvclByb3RvdHlwZTpmWCxCVUdHWV9TQUZBUklfSVRFUkFUT1JTOkdYfSxZWD15WS5mLFhYPVdLKFwidG9TdHJpbmdUYWdcIiksWlg9ZnVuY3Rpb24oZSx0LG4pe2UmJiF4SyhlPW4/ZTplLnByb3RvdHlwZSxYWCkmJllYKGUsWFgse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp0fSl9LEpYPUtYLkl0ZXJhdG9yUHJvdG90eXBlLFFYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGVaPXRLLlN0cmluZyx0Wj10Sy5UeXBlRXJyb3Isblo9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoXCJfX3Byb3RvX19cImlue30/ZnVuY3Rpb24oKXt2YXIgZSx0PSExLG49e307dHJ5eyhlPWFLKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSxcIl9fcHJvdG9fX1wiKS5zZXQpKShuLFtdKSx0PW4gaW5zdGFuY2VvZiBBcnJheX1jYXRjaChlKXt9cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIFlLKG4pLGZ1bmN0aW9uKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlfHxCSyhlKSlyZXR1cm4gZTt0aHJvdyB0WihcIkNhbid0IHNldCBcIitlWihlKStcIiBhcyBhIHByb3RvdHlwZVwiKX0ociksdD9lKG4scik6bi5fX3Byb3RvX189cixufX0oKTp2b2lkIDApLHJaPVNYLlBST1BFUixvWj1TWC5DT05GSUdVUkFCTEUsaVo9S1guSXRlcmF0b3JQcm90b3R5cGUsYVo9S1guQlVHR1lfU0FGQVJJX0lURVJBVE9SUyx1Wj1XSyhcIml0ZXJhdG9yXCIpLHNaPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGxaPWZ1bmN0aW9uKGUsdCxuLHIsbyxpLGEpeyFmdW5jdGlvbihlLHQsbixyKXt2YXIgbz10K1wiIEl0ZXJhdG9yXCI7ZS5wcm90b3R5cGU9VVkoSlgse25leHQ6blgoMSxuKX0pLFpYKGUsbywhMSksS1lbb109UVh9KG4sdCxyKTt2YXIgdSxzLGwsYz1mdW5jdGlvbihlKXtpZihlPT09byYmZylyZXR1cm4gZztpZighYVomJmUgaW4gcClyZXR1cm4gcFtlXTtzd2l0Y2goZSl7Y2FzZVwia2V5c1wiOmNhc2VcInZhbHVlc1wiOmNhc2VcImVudHJpZXNcIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMpfX0sZj10K1wiIEl0ZXJhdG9yXCIsZD0hMSxwPWUucHJvdG90eXBlLGg9cFt1Wl18fHBbXCJAQGl0ZXJhdG9yXCJdfHxvJiZwW29dLGc9IWFaJiZofHxjKG8pLHY9XCJBcnJheVwiPT10JiZwLmVudHJpZXN8fGg7aWYodiYmKHU9VVgodi5jYWxsKG5ldyBlKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmdS5uZXh0JiYoVVgodSkhPT1pWiYmKG5aP25aKHUsaVopOkJLKHVbdVpdKXx8eFgodSx1WixzWikpLFpYKHUsZiwhMCkpLHJaJiZcInZhbHVlc1wiPT1vJiZoJiZcInZhbHVlc1wiIT09aC5uYW1lJiYob1o/clgocCxcIm5hbWVcIixcInZhbHVlc1wiKTooZD0hMCxnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ZKGgsdGhpcyl9KSksbylpZihzPXt2YWx1ZXM6YyhcInZhbHVlc1wiKSxrZXlzOmk/ZzpjKFwia2V5c1wiKSxlbnRyaWVzOmMoXCJlbnRyaWVzXCIpfSxhKWZvcihsIGluIHMpKGFafHxkfHwhKGwgaW4gcCkpJiZ4WChwLGwsc1tsXSk7ZWxzZSBNWCh7dGFyZ2V0OnQscHJvdG86ITAsZm9yY2VkOmFafHxkfSxzKTtyZXR1cm4gcFt1Wl0hPT1nJiZ4WChwLHVaLGcse25hbWU6b30pLEtZW3RdPWcsc30sY1o9aFguc2V0LGZaPWhYLmdldHRlckZvcihcIkFycmF5IEl0ZXJhdG9yXCIpLGRaPWxaKEFycmF5LFwiQXJyYXlcIiwoZnVuY3Rpb24oZSx0KXtjWih0aGlzLHt0eXBlOlwiQXJyYXkgSXRlcmF0b3JcIix0YXJnZXQ6dksoZSksaW5kZXg6MCxraW5kOnR9KX0pLChmdW5jdGlvbigpe3ZhciBlPWZaKHRoaXMpLHQ9ZS50YXJnZXQsbj1lLmtpbmQscj1lLmluZGV4Kys7cmV0dXJuIXR8fHI+PXQubGVuZ3RoPyhlLnRhcmdldD12b2lkIDAse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk6XCJrZXlzXCI9PW4/e3ZhbHVlOnIsZG9uZTohMX06XCJ2YWx1ZXNcIj09bj97dmFsdWU6dFtyXSxkb25lOiExfTp7dmFsdWU6W3IsdFtyXV0sZG9uZTohMX19KSxcInZhbHVlc1wiKTtLWS5Bcmd1bWVudHM9S1kuQXJyYXkscVkoXCJrZXlzXCIpLHFZKFwidmFsdWVzXCIpLHFZKFwiZW50cmllc1wiKTt2YXIgcFo9e307cFpbV0soXCJ0b1N0cmluZ1RhZ1wiKV09XCJ6XCI7dmFyIGhaPVwiW29iamVjdCB6XVwiPT09U3RyaW5nKHBaKSxnWj1XSyhcInRvU3RyaW5nVGFnXCIpLHZaPXRLLk9iamVjdCx5Wj1cIkFyZ3VtZW50c1wiPT1jSyhmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpLG1aPWhaP2NLOmZ1bmN0aW9uKGUpe3ZhciB0LG4scjtyZXR1cm4gdm9pZCAwPT09ZT9cIlVuZGVmaW5lZFwiOm51bGw9PT1lP1wiTnVsbFwiOlwic3RyaW5nXCI9PXR5cGVvZihuPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoKGUpe319KHQ9dlooZSksZ1opKT9uOnlaP2NLKHQpOlwiT2JqZWN0XCI9PShyPWNLKHQpKSYmQksodC5jYWxsZWUpP1wiQXJndW1lbnRzXCI6cn0sYlo9aFo/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5cIltvYmplY3QgXCIrbVoodGhpcykrXCJdXCJ9O2hafHx4WChPYmplY3QucHJvdG90eXBlLFwidG9TdHJpbmdcIixiWix7dW5zYWZlOiEwfSk7dmFyIHdaPXRLLlN0cmluZyxFWj1mdW5jdGlvbihlKXtpZihcIlN5bWJvbFwiPT09bVooZSkpdGhyb3cgVHlwZUVycm9yKFwiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmdcIik7cmV0dXJuIHdaKGUpfSxEWj1hSyhcIlwiLmNoYXJBdCksU1o9YUsoXCJcIi5jaGFyQ29kZUF0KSx4Wj1hSyhcIlwiLnNsaWNlKSxDWj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcixvLGk9RVooZ0sodCkpLGE9d1kobiksdT1pLmxlbmd0aDtyZXR1cm4gYTwwfHxhPj11P2U/XCJcIjp2b2lkIDA6KHI9U1ooaSxhKSk8NTUyOTZ8fHI+NTYzMTl8fGErMT09PXV8fChvPVNaKGksYSsxKSk8NTYzMjB8fG8+NTczNDM/ZT9EWihpLGEpOnI6ZT94WihpLGEsYSsyKTpvLTU2MzIwKyhyLTU1Mjk2PDwxMCkrNjU1MzZ9fSxBWj17Y29kZUF0OkNaKCExKSxjaGFyQXQ6Q1ooITApfSxPWj1BWi5jaGFyQXQsa1o9aFguc2V0LEJaPWhYLmdldHRlckZvcihcIlN0cmluZyBJdGVyYXRvclwiKTtsWihTdHJpbmcsXCJTdHJpbmdcIiwoZnVuY3Rpb24oZSl7a1oodGhpcyx7dHlwZTpcIlN0cmluZyBJdGVyYXRvclwiLHN0cmluZzpFWihlKSxpbmRleDowfSl9KSwoZnVuY3Rpb24oKXt2YXIgZSx0PUJaKHRoaXMpLG49dC5zdHJpbmcscj10LmluZGV4O3JldHVybiByPj1uLmxlbmd0aD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9OihlPU9aKG4sciksdC5pbmRleCs9ZS5sZW5ndGgse3ZhbHVlOmUsZG9uZTohMX0pfSkpO3ZhciBGWj1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByIGluIHQpeFgoZSxyLHRbcl0sbik7cmV0dXJuIGV9LFRaPXRLLkFycmF5LF9aPU1hdGgubWF4LFBaPUFYLmYsalo9XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpOltdLE5aPXtmOmZ1bmN0aW9uKGUpe3JldHVybiBqWiYmXCJXaW5kb3dcIj09Y0soZSk/ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBQWihlKX1jYXRjaChlKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcixvLGksYSx1PUFZKGUpLHM9U1kodm9pZCAwLHUpLGw9U1kodSx1KSxjPVRaKF9aKGwtcywwKSksZj0wO3M8bDtzKyssZisrKXI9YyxvPWYsaT1lW3NdLChhPWhZKG8pKWluIHI/eVkuZihyLGEsblgoMCxpKSk6clthXT1pO3JldHVybiBjLmxlbmd0aD1mLGN9KGpaKX19KGUpOlBaKHZLKGUpKX19LElaPXVLKChmdW5jdGlvbigpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIEFycmF5QnVmZmVyKXt2YXIgZT1uZXcgQXJyYXlCdWZmZXIoOCk7T2JqZWN0LmlzRXh0ZW5zaWJsZShlKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJhXCIse3ZhbHVlOjh9KX19KSksTFo9T2JqZWN0LmlzRXh0ZW5zaWJsZSxSWj11SygoZnVuY3Rpb24oKXtMWigxKX0pKXx8SVo/ZnVuY3Rpb24oZSl7cmV0dXJuISFHSyhlKSYmKCFJWnx8XCJBcnJheUJ1ZmZlclwiIT1jSyhlKSkmJighTFp8fExaKGUpKX06TFosTVo9IXVLKChmdW5jdGlvbigpe3JldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSkpLHpaPVpxKChmdW5jdGlvbihlKXt2YXIgdD15WS5mLG49ITEscj1rSyhcIm1ldGFcIiksbz0wLGk9ZnVuY3Rpb24oZSl7dChlLHIse3ZhbHVlOntvYmplY3RJRDpcIk9cIitvKyssd2Vha0RhdGE6e319fSl9LGE9ZS5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXthLmVuYWJsZT1mdW5jdGlvbigpe30sbj0hMDt2YXIgZT1BWC5mLHQ9YUsoW10uc3BsaWNlKSxvPXt9O29bcl09MSxlKG8pLmxlbmd0aCYmKEFYLmY9ZnVuY3Rpb24obil7Zm9yKHZhciBvPWUobiksaT0wLGE9by5sZW5ndGg7aTxhO2krKylpZihvW2ldPT09cil7dChvLGksMSk7YnJlYWt9cmV0dXJuIG99LE1YKHt0YXJnZXQ6XCJPYmplY3RcIixzdGF0OiEwLGZvcmNlZDohMH0se2dldE93blByb3BlcnR5TmFtZXM6TlouZn0pKX0sZmFzdEtleTpmdW5jdGlvbihlLHQpe2lmKCFHSyhlKSlyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZT9lOihcInN0cmluZ1wiPT10eXBlb2YgZT9cIlNcIjpcIlBcIikrZTtpZigheEsoZSxyKSl7aWYoIVJaKGUpKXJldHVyblwiRlwiO2lmKCF0KXJldHVyblwiRVwiO2koZSl9cmV0dXJuIGVbcl0ub2JqZWN0SUR9LGdldFdlYWtEYXRhOmZ1bmN0aW9uKGUsdCl7aWYoIXhLKGUscikpe2lmKCFSWihlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTtpKGUpfXJldHVybiBlW3JdLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbihlKXtyZXR1cm4gTVomJm4mJlJaKGUpJiYheEsoZSxyKSYmaShlKSxlfX07Qllbcl09ITB9KSksJFo9YUsoYUsuYmluZCksSFo9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbFkoZSksdm9pZCAwPT09dD9lOiRaPyRaKGUsdCk6ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fSxWWj1XSyhcIml0ZXJhdG9yXCIpLFVaPUFycmF5LnByb3RvdHlwZSxXWj1XSyhcIml0ZXJhdG9yXCIpLEdaPWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpcmV0dXJuIGNZKGUsV1opfHxjWShlLFwiQEBpdGVyYXRvclwiKXx8S1lbbVooZSldfSxxWj10Sy5UeXBlRXJyb3IsS1o9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG87WUsoZSk7dHJ5e2lmKCEocj1jWShlLFwicmV0dXJuXCIpKSl7aWYoXCJ0aHJvd1wiPT09dCl0aHJvdyBuO3JldHVybiBufXI9blkocixlKX1jYXRjaChlKXtvPSEwLHI9ZX1pZihcInRocm93XCI9PT10KXRocm93IG47aWYobyl0aHJvdyByO3JldHVybiBZSyhyKSxufSxZWj10Sy5UeXBlRXJyb3IsWFo9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0b3BwZWQ9ZSx0aGlzLnJlc3VsdD10fSxaWj1YWi5wcm90b3R5cGUsSlo9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saSxhLHUscyxsLGMsZj1uJiZuLnRoYXQsZD0hKCFufHwhbi5BU19FTlRSSUVTKSxwPSEoIW58fCFuLklTX0lURVJBVE9SKSxoPSEoIW58fCFuLklOVEVSUlVQVEVEKSxnPUhaKHQsZiksdj1mdW5jdGlvbihlKXtyZXR1cm4gciYmS1oocixcIm5vcm1hbFwiLGUpLG5ldyBYWighMCxlKX0seT1mdW5jdGlvbihlKXtyZXR1cm4gZD8oWUsoZSksaD9nKGVbMF0sZVsxXSx2KTpnKGVbMF0sZVsxXSkpOmg/ZyhlLHYpOmcoZSl9O2lmKHApcj1lO2Vsc2V7aWYoIShvPUdaKGUpKSl0aHJvdyBZWih1WShlKStcIiBpcyBub3QgaXRlcmFibGVcIik7aWYodm9pZCAwIT09KGM9bykmJihLWS5BcnJheT09PWN8fFVaW1ZaXT09PWMpKXtmb3IoaT0wLGE9QVkoZSk7YT5pO2krKylpZigodT15KGVbaV0pKSYmclkoWlosdSkpcmV0dXJuIHU7cmV0dXJuIG5ldyBYWighMSl9cj1mdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mj9HWihlKTp0O2lmKGxZKG4pKXJldHVybiBZSyhuWShuLGUpKTt0aHJvdyBxWih1WShlKStcIiBpcyBub3QgaXRlcmFibGVcIil9KGUsbyl9Zm9yKHM9ci5uZXh0OyEobD1uWShzLHIpKS5kb25lOyl7dHJ5e3U9eShsLnZhbHVlKX1jYXRjaChlKXtLWihyLFwidGhyb3dcIixlKX1pZihcIm9iamVjdFwiPT10eXBlb2YgdSYmdSYmclkoWlosdSkpcmV0dXJuIHV9cmV0dXJuIG5ldyBYWighMSl9LFFaPXRLLlR5cGVFcnJvcixlSj1mdW5jdGlvbihlLHQpe2lmKHJZKHQsZSkpcmV0dXJuIGU7dGhyb3cgUVooXCJJbmNvcnJlY3QgaW52b2NhdGlvblwiKX0sdEo9V0soXCJpdGVyYXRvclwiKSxuSj0hMTt0cnl7dmFyIHJKPTAsb0o9e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohIXJKKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtuSj0hMH19O29KW3RKXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKG9KLChmdW5jdGlvbigpe3Rocm93IDJ9KSl9Y2F0Y2goTWwpe312YXIgaUo9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuXCJBcnJheVwiPT1jSyhlKX0sYUo9ZnVuY3Rpb24oKXt9LHVKPVtdLHNKPVRLKFwiUmVmbGVjdFwiLFwiY29uc3RydWN0XCIpLGxKPS9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi8sY0o9YUsobEouZXhlYyksZko9IWxKLmV4ZWMoYUopLGRKPWZ1bmN0aW9uKGUpe2lmKCFCSyhlKSlyZXR1cm4hMTt0cnl7cmV0dXJuIHNKKGFKLHVKLGUpLCEwfWNhdGNoKGUpe3JldHVybiExfX0scEo9IXNKfHx1SygoZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZEooZEouY2FsbCl8fCFkSihPYmplY3QpfHwhZEooKGZ1bmN0aW9uKCl7ZT0hMH0pKXx8ZX0pKT9mdW5jdGlvbihlKXtpZighQksoZSkpcmV0dXJuITE7c3dpdGNoKG1aKGUpKXtjYXNlXCJBc3luY0Z1bmN0aW9uXCI6Y2FzZVwiR2VuZXJhdG9yRnVuY3Rpb25cIjpjYXNlXCJBc3luY0dlbmVyYXRvckZ1bmN0aW9uXCI6cmV0dXJuITF9cmV0dXJuIGZKfHwhIWNKKGxKLFFZKGUpKX06ZEosaEo9V0soXCJzcGVjaWVzXCIpLGdKPXRLLkFycmF5LHZKPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyhmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gaUooZSkmJih0PWUuY29uc3RydWN0b3IsKHBKKHQpJiYodD09PWdKfHxpSih0LnByb3RvdHlwZSkpfHxHSyh0KSYmbnVsbD09PSh0PXRbaEpdKSkmJih0PXZvaWQgMCkpLHZvaWQgMD09PXQ/Z0o6dH0oZSkpKDA9PT10PzA6dCl9LHlKPWFLKFtdLnB1c2gpLG1KPWZ1bmN0aW9uKGUpe3ZhciB0PTE9PWUsbj0yPT1lLHI9Mz09ZSxvPTQ9PWUsaT02PT1lLGE9Nz09ZSx1PTU9PWV8fGk7cmV0dXJuIGZ1bmN0aW9uKHMsbCxjLGYpe2Zvcih2YXIgZCxwLGg9REsocyksZz1wSyhoKSx2PUhaKGwsYykseT1BWShnKSxtPTAsYj1mfHx2Six3PXQ/YihzLHkpOm58fGE/YihzLDApOnZvaWQgMDt5Pm07bSsrKWlmKCh1fHxtIGluIGcpJiYocD12KGQ9Z1ttXSxtLGgpLGUpKWlmKHQpd1ttXT1wO2Vsc2UgaWYocClzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZDtjYXNlIDY6cmV0dXJuIG07Y2FzZSAyOnlKKHcsZCl9ZWxzZSBzd2l0Y2goZSl7Y2FzZSA0OnJldHVybiExO2Nhc2UgNzp5Sih3LGQpfXJldHVybiBpPy0xOnJ8fG8/bzp3fX0sYko9e2ZvckVhY2g6bUooMCksbWFwOm1KKDEpLGZpbHRlcjptSigyKSxzb21lOm1KKDMpLGV2ZXJ5Om1KKDQpLGZpbmQ6bUooNSksZmluZEluZGV4Om1KKDYpLGZpbHRlclJlamVjdDptSig3KX0sd0o9elouZ2V0V2Vha0RhdGEsRUo9aFguc2V0LERKPWhYLmdldHRlckZvcixTSj1iSi5maW5kLHhKPWJKLmZpbmRJbmRleCxDSj1hSyhbXS5zcGxpY2UpLEFKPTAsT0o9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZnJvemVufHwoZS5mcm96ZW49bmV3IGtKKX0sa0o9ZnVuY3Rpb24oKXt0aGlzLmVudHJpZXM9W119LEJKPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFNKKGUuZW50cmllcywoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF09PT10fSkpfTtrSi5wcm90b3R5cGU9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1CSih0aGlzLGUpO2lmKHQpcmV0dXJuIHRbMV19LGhhczpmdW5jdGlvbihlKXtyZXR1cm4hIUJKKHRoaXMsZSl9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuPUJKKHRoaXMsZSk7bj9uWzFdPXQ6dGhpcy5lbnRyaWVzLnB1c2goW2UsdF0pfSxkZWxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ9eEoodGhpcy5lbnRyaWVzLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PWV9KSk7cmV0dXJufnQmJkNKKHRoaXMuZW50cmllcyx0LDEpLCEhfnR9fTt2YXIgRkosVEo9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWUoKGZ1bmN0aW9uKGUsbyl7ZUooZSxpKSxFSihlLHt0eXBlOnQsaWQ6QUorKyxmcm96ZW46dm9pZCAwfSksbnVsbCE9byYmSloobyxlW3JdLHt0aGF0OmUsQVNfRU5UUklFUzpufSl9KSksaT1vLnByb3RvdHlwZSxhPURKKHQpLHU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWEoZSksbz13SihZSyh0KSwhMCk7cmV0dXJuITA9PT1vP09KKHIpLnNldCh0LG4pOm9bci5pZF09bixlfTtyZXR1cm4gRlooaSx7ZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PWEodGhpcyk7aWYoIUdLKGUpKXJldHVybiExO3ZhciBuPXdKKGUpO3JldHVybiEwPT09bj9PSih0KS5kZWxldGUoZSk6biYmeEsobix0LmlkKSYmZGVsZXRlIG5bdC5pZF19LGhhczpmdW5jdGlvbihlKXt2YXIgdD1hKHRoaXMpO2lmKCFHSyhlKSlyZXR1cm4hMTt2YXIgbj13SihlKTtyZXR1cm4hMD09PW4/T0oodCkuaGFzKGUpOm4mJnhLKG4sdC5pZCl9fSksRlooaSxuP3tnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9YSh0aGlzKTtpZihHSyhlKSl7dmFyIG49d0ooZSk7cmV0dXJuITA9PT1uP09KKHQpLmdldChlKTpuP25bdC5pZF06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUodGhpcyxlLHQpfX06e2FkZDpmdW5jdGlvbihlKXtyZXR1cm4gdSh0aGlzLGUsITApfX0pLG99fSxfSj1oWC5lbmZvcmNlLFBKPSF0Sy5BY3RpdmVYT2JqZWN0JiZcIkFjdGl2ZVhPYmplY3RcImluIHRLLGpKPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19LE5KPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0tMSE9PWUuaW5kZXhPZihcIk1hcFwiKSxvPS0xIT09ZS5pbmRleE9mKFwiV2Vha1wiKSxpPXI/XCJzZXRcIjpcImFkZFwiLGE9dEtbZV0sdT1hJiZhLnByb3RvdHlwZSxzPWEsbD17fSxjPWZ1bmN0aW9uKGUpe3ZhciB0PWFLKHVbZV0pO3hYKHUsZSxcImFkZFwiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMsMD09PWU/MDplKSx0aGlzfTpcImRlbGV0ZVwiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiEobyYmIUdLKGUpKSYmdCh0aGlzLDA9PT1lPzA6ZSl9OlwiZ2V0XCI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIG8mJiFHSyhlKT92b2lkIDA6dCh0aGlzLDA9PT1lPzA6ZSl9OlwiaGFzXCI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIShvJiYhR0soZSkpJiZ0KHRoaXMsMD09PWU/MDplKX06ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdCh0aGlzLDA9PT1lPzA6ZSxuKSx0aGlzfSl9O2lmKExYKGUsIUJLKGEpfHwhKG98fHUuZm9yRWFjaCYmIXVLKChmdW5jdGlvbigpeyhuZXcgYSkuZW50cmllcygpLm5leHQoKX0pKSkpKXM9bi5nZXRDb25zdHJ1Y3Rvcih0LGUscixpKSx6Wi5lbmFibGUoKTtlbHNlIGlmKExYKGUsITApKXt2YXIgZj1uZXcgcyxkPWZbaV0obz97fTotMCwxKSE9ZixwPXVLKChmdW5jdGlvbigpe2YuaGFzKDEpfSkpLGg9ZnVuY3Rpb24oZSx0KXtpZighbkopcmV0dXJuITE7dmFyIG49ITE7dHJ5e3ZhciByPXt9O3JbdEpdPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpuPSEwfX19fSxmdW5jdGlvbihlKXtuZXcgYShlKX0ocil9Y2F0Y2goZSl7fXJldHVybiBufSgpLGc9IW8mJnVLKChmdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgYSx0PTU7dC0tOyllW2ldKHQsdCk7cmV0dXJuIWUuaGFzKC0wKX0pKTtofHwoKHM9dCgoZnVuY3Rpb24oZSx0KXtlSihlLHUpO3ZhciBuPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvO3JldHVybiBuWiYmQksocj10LmNvbnN0cnVjdG9yKSYmciE9PW4mJkdLKG89ci5wcm90b3R5cGUpJiZvIT09bi5wcm90b3R5cGUmJm5aKGUsbyksZX0obmV3IGEsZSxzKTtyZXR1cm4gbnVsbCE9dCYmSloodCxuW2ldLHt0aGF0Om4sQVNfRU5UUklFUzpyfSksbn0pKSkucHJvdG90eXBlPXUsdS5jb25zdHJ1Y3Rvcj1zKSwocHx8ZykmJihjKFwiZGVsZXRlXCIpLGMoXCJoYXNcIiksciYmYyhcImdldFwiKSksKGd8fGQpJiZjKGkpLG8mJnUuY2xlYXImJmRlbGV0ZSB1LmNsZWFyfXJldHVybiBsW2VdPXMsTVgoe2dsb2JhbDohMCxmb3JjZWQ6cyE9YX0sbCksWlgocyxlKSxvfHxuLnNldFN0cm9uZyhzLGUsciksc30oXCJXZWFrTWFwXCIsakosVEopO2lmKHRYJiZQSil7Rko9VEouZ2V0Q29uc3RydWN0b3IoakosXCJXZWFrTWFwXCIsITApLHpaLmVuYWJsZSgpO3ZhciBJSj1OSi5wcm90b3R5cGUsTEo9YUsoSUouZGVsZXRlKSxSSj1hSyhJSi5oYXMpLE1KPWFLKElKLmdldCkseko9YUsoSUouc2V0KTtGWihJSix7ZGVsZXRlOmZ1bmN0aW9uKGUpe2lmKEdLKGUpJiYhUlooZSkpe3ZhciB0PV9KKHRoaXMpO3JldHVybiB0LmZyb3plbnx8KHQuZnJvemVuPW5ldyBGSiksTEoodGhpcyxlKXx8dC5mcm96ZW4uZGVsZXRlKGUpfXJldHVybiBMSih0aGlzLGUpfSxoYXM6ZnVuY3Rpb24oZSl7aWYoR0soZSkmJiFSWihlKSl7dmFyIHQ9X0oodGhpcyk7cmV0dXJuIHQuZnJvemVufHwodC5mcm96ZW49bmV3IEZKKSxSSih0aGlzLGUpfHx0LmZyb3plbi5oYXMoZSl9cmV0dXJuIFJKKHRoaXMsZSl9LGdldDpmdW5jdGlvbihlKXtpZihHSyhlKSYmIVJaKGUpKXt2YXIgdD1fSih0aGlzKTtyZXR1cm4gdC5mcm96ZW58fCh0LmZyb3plbj1uZXcgRkopLFJKKHRoaXMsZSk/TUoodGhpcyxlKTp0LmZyb3plbi5nZXQoZSl9cmV0dXJuIE1KKHRoaXMsZSl9LHNldDpmdW5jdGlvbihlLHQpe2lmKEdLKGUpJiYhUlooZSkpe3ZhciBuPV9KKHRoaXMpO24uZnJvemVufHwobi5mcm96ZW49bmV3IEZKKSxSSih0aGlzLGUpP3pKKHRoaXMsZSx0KTpuLmZyb3plbi5zZXQoZSx0KX1lbHNlIHpKKHRoaXMsZSx0KTtyZXR1cm4gdGhpc319KX12YXIgJEo9e0NTU1J1bGVMaXN0OjAsQ1NTU3R5bGVEZWNsYXJhdGlvbjowLENTU1ZhbHVlTGlzdDowLENsaWVudFJlY3RMaXN0OjAsRE9NUmVjdExpc3Q6MCxET01TdHJpbmdMaXN0OjAsRE9NVG9rZW5MaXN0OjEsRGF0YVRyYW5zZmVySXRlbUxpc3Q6MCxGaWxlTGlzdDowLEhUTUxBbGxDb2xsZWN0aW9uOjAsSFRNTENvbGxlY3Rpb246MCxIVE1MRm9ybUVsZW1lbnQ6MCxIVE1MU2VsZWN0RWxlbWVudDowLE1lZGlhTGlzdDowLE1pbWVUeXBlQXJyYXk6MCxOYW1lZE5vZGVNYXA6MCxOb2RlTGlzdDoxLFBhaW50UmVxdWVzdExpc3Q6MCxQbHVnaW46MCxQbHVnaW5BcnJheTowLFNWR0xlbmd0aExpc3Q6MCxTVkdOdW1iZXJMaXN0OjAsU1ZHUGF0aFNlZ0xpc3Q6MCxTVkdQb2ludExpc3Q6MCxTVkdTdHJpbmdMaXN0OjAsU1ZHVHJhbnNmb3JtTGlzdDowLFNvdXJjZUJ1ZmZlckxpc3Q6MCxTdHlsZVNoZWV0TGlzdDowLFRleHRUcmFja0N1ZUxpc3Q6MCxUZXh0VHJhY2tMaXN0OjAsVG91Y2hMaXN0OjB9LEhKPVFLKFwic3BhblwiKS5jbGFzc0xpc3QsVko9SEomJkhKLmNvbnN0cnVjdG9yJiZISi5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsVUo9Vko9PT1PYmplY3QucHJvdG90eXBlP3ZvaWQgMDpWSixXSj1XSyhcIml0ZXJhdG9yXCIpLEdKPVdLKFwidG9TdHJpbmdUYWdcIikscUo9ZFoudmFsdWVzLEtKPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoZVtXSl0hPT1xSil0cnl7clgoZSxXSixxSil9Y2F0Y2godCl7ZVtXSl09cUp9aWYoZVtHSl18fHJYKGUsR0osdCksJEpbdF0pZm9yKHZhciBuIGluIGRaKWlmKGVbbl0hPT1kWltuXSl0cnl7clgoZSxuLGRaW25dKX1jYXRjaCh0KXtlW25dPWRaW25dfX19O2Zvcih2YXIgWUogaW4gJEopS0oodEtbWUpdJiZ0S1tZSl0ucHJvdG90eXBlLFlKKTtLSihVSixcIkRPTVRva2VuTGlzdFwiKTt2YXIgWEo9bmV3IFdlYWtNYXAsWko9e3R5cGU6XCJsaXN0LWl0ZW1cIixyZW5kZXJFbGVtOmZ1bmN0aW9uKGUsdCxuKXtYSi5zZXQoZSxuKTt2YXIgcj1lLG89ci5sZXZlbCxpPXZvaWQgMD09PW8/MDpvLGE9ci5vcmRlcmVkLHU9e21hcmdpbjpcIjVweCAwIDVweCBcIisyMCppK1wicHhcIn0scz1cIlwiO2lmKHZvaWQgMCE9PWEmJmEpe3ZhciBsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dCxyPW4udHlwZSxvPW4ubGV2ZWwsaT12b2lkIDA9PT1vPzA6byxhPW4ub3JkZXJlZCx1PXZvaWQgMCE9PWEmJmE7aWYoIXUpcmV0dXJuLTE7dmFyIHM9MSxsPXQsYz1RTy5maW5kUGF0aChlLGwpO2lmKDA9PT1jWzBdKXJldHVybiAxO2Zvcig7Y1swXT4wOyl7dmFyIGY9TWYucHJldmlvdXMoYyksZD1CZi5ub2RlKGUsZik7aWYobnVsbD09ZClicmVhazt2YXIgcD1kWzBdLGg9cC5sZXZlbCxnPXZvaWQgMD09PWg/MDpoLHY9cC50eXBlLHk9cC5vcmRlcmVkO2lmKHYhPT1yKWJyZWFrO2lmKGc8aSlicmVhaztpZihnPT09aSl7aWYoeSE9PXUpYnJlYWs7cysrfWw9cCxjPWZ9cmV0dXJuIHN9KG4sZSk7cz1sK1wiLlwifWVsc2Ugcz1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT0wKTt2YXIgdD1cIlwiO3N3aXRjaChlKXtjYXNlIDA6dD1cIuKAolwiO2JyZWFrO2Nhc2UgMTp0PVwi4pemXCI7YnJlYWs7ZGVmYXVsdDp0PVwi4paqXCJ9cmV0dXJuIHR9KGkpO3ZhciBjPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5jaGlsZHJlbnx8W10scj1uLmxlbmd0aDtpZigwPT09cilyZXR1cm5cIlwiO2Zvcih2YXIgbz0wO288ciYmIXQ7bysrKXt2YXIgaT1uW29dO2VkLmlzVGV4dChpKSYmKHQ9aSl9cmV0dXJuIG51bGw9PXQ/XCJcIjp0LmNvbG9yfHxcIlwifShlKTtyZXR1cm4gUGcoXCJkaXZcIix7c3R5bGU6dX0sUGcoXCJzcGFuXCIse2NvbnRlbnRFZGl0YWJsZTohMSxzdHlsZTp7bWFyZ2luUmlnaHQ6XCIwLjVlbVwiLGNvbG9yOmN9LFwiZGF0YS13LWUtcmVzZXJ2ZVwiOiEwfSxzKSxQZyhcInNwYW5cIixudWxsLHQpKX19LEpKPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEpKPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0sSkooZSx0KVxuLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovfTtmdW5jdGlvbiBRSihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiK1N0cmluZyh0KStcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9SkooZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9ZnVuY3Rpb24gZVEoZSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3Isbj10JiZlW3RdLHI9MDtpZihuKXJldHVybiBuLmNhbGwoZSk7aWYoZSYmXCJudW1iZXJcIj09dHlwZW9mIGUubGVuZ3RoKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGUmJnI+PWUubGVuZ3RoJiYoZT12b2lkIDApLHt2YWx1ZTplJiZlW3IrK10sZG9uZTohZX19fTt0aHJvdyBuZXcgVHlwZUVycm9yKHQ/XCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiOlwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKX1mdW5jdGlvbiB0UShlLHQpe3ZhciBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiBlO3ZhciByLG8saT1uLmNhbGwoZSksYT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09dHx8dC0tID4wKSYmIShyPWkubmV4dCgpKS5kb25lOylhLnB1c2goci52YWx1ZSl9Y2F0Y2goZSl7bz17ZXJyb3I6ZX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKG49aS5yZXR1cm4pJiZuLmNhbGwoaSl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybiBhfWZ1bmN0aW9uIG5RKGUpe3JldHVybiBCZi5ub2RlcyhlLHthdDplLnNlbGVjdGlvbnx8dm9pZCAwLG1hdGNoOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09UU8uZmluZFBhdGgoZSx0KS5sZW5ndGh9fSl9dmFyIHJRPWtZLmluY2x1ZGVzO01YKHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwfSx7aW5jbHVkZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHJRKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSkscVkoXCJpbmNsdWRlc1wiKTt2YXIgb1EsaVEsYVE9ZnVuY3Rpb24oKXt2YXIgZT1ZSyh0aGlzKSx0PVwiXCI7cmV0dXJuIGUuZ2xvYmFsJiYodCs9XCJnXCIpLGUuaWdub3JlQ2FzZSYmKHQrPVwiaVwiKSxlLm11bHRpbGluZSYmKHQrPVwibVwiKSxlLmRvdEFsbCYmKHQrPVwic1wiKSxlLnVuaWNvZGUmJih0Kz1cInVcIiksZS5zdGlja3kmJih0Kz1cInlcIiksdH0sdVE9dEsuUmVnRXhwLHNRPXVLKChmdW5jdGlvbigpe3ZhciBlPXVRKFwiYVwiLFwieVwiKTtyZXR1cm4gZS5sYXN0SW5kZXg9MixudWxsIT1lLmV4ZWMoXCJhYmNkXCIpfSkpLGxRPXNRfHx1SygoZnVuY3Rpb24oKXtyZXR1cm4hdVEoXCJhXCIsXCJ5XCIpLnN0aWNreX0pKSxjUT17QlJPS0VOX0NBUkVUOnNRfHx1SygoZnVuY3Rpb24oKXt2YXIgZT11UShcIl5yXCIsXCJneVwiKTtyZXR1cm4gZS5sYXN0SW5kZXg9MixudWxsIT1lLmV4ZWMoXCJzdHJcIil9KSksTUlTU0VEX1NUSUNLWTpsUSxVTlNVUFBPUlRFRF9ZOnNRfSxmUT10Sy5SZWdFeHAsZFE9dUsoKGZ1bmN0aW9uKCl7dmFyIGU9ZlEoXCIuXCIsXCJzXCIpO3JldHVybiEoZS5kb3RBbGwmJmUuZXhlYyhcIlxcblwiKSYmXCJzXCI9PT1lLmZsYWdzKX0pKSxwUT10Sy5SZWdFeHAsaFE9dUsoKGZ1bmN0aW9uKCl7dmFyIGU9cFEoXCIoPzxhPmIpXCIsXCJnXCIpO3JldHVyblwiYlwiIT09ZS5leGVjKFwiYlwiKS5ncm91cHMuYXx8XCJiY1wiIT09XCJiXCIucmVwbGFjZShlLFwiJDxhPmNcIil9KSksZ1E9aFguZ2V0LHZRPXdLKFwibmF0aXZlLXN0cmluZy1yZXBsYWNlXCIsU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSx5UT1SZWdFeHAucHJvdG90eXBlLmV4ZWMsbVE9eVEsYlE9YUsoXCJcIi5jaGFyQXQpLHdRPWFLKFwiXCIuaW5kZXhPZiksRVE9YUsoXCJcIi5yZXBsYWNlKSxEUT1hSyhcIlwiLnNsaWNlKSxTUT0oaVE9L2IqL2csblkoeVEsb1E9L2EvLFwiYVwiKSxuWSh5USxpUSxcImFcIiksMCE9PW9RLmxhc3RJbmRleHx8MCE9PWlRLmxhc3RJbmRleCkseFE9Y1EuQlJPS0VOX0NBUkVULENRPXZvaWQgMCE9PS8oKT8/Ly5leGVjKFwiXCIpWzFdOyhTUXx8Q1F8fHhRfHxkUXx8aFEpJiYobVE9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG8saSxhLHUscz10aGlzLGw9Z1EocyksYz1FWihlKSxmPWwucmF3O2lmKGYpcmV0dXJuIGYubGFzdEluZGV4PXMubGFzdEluZGV4LHQ9blkobVEsZixjKSxzLmxhc3RJbmRleD1mLmxhc3RJbmRleCx0O3ZhciBkPWwuZ3JvdXBzLHA9eFEmJnMuc3RpY2t5LGg9blkoYVEscyksZz1zLnNvdXJjZSx2PTAseT1jO2lmKHAmJihoPUVRKGgsXCJ5XCIsXCJcIiksLTE9PT13UShoLFwiZ1wiKSYmKGgrPVwiZ1wiKSx5PURRKGMscy5sYXN0SW5kZXgpLHMubGFzdEluZGV4PjAmJighcy5tdWx0aWxpbmV8fHMubXVsdGlsaW5lJiZcIlxcblwiIT09YlEoYyxzLmxhc3RJbmRleC0xKSkmJihnPVwiKD86IFwiK2crXCIpXCIseT1cIiBcIit5LHYrKyksbj1uZXcgUmVnRXhwKFwiXig/OlwiK2crXCIpXCIsaCkpLENRJiYobj1uZXcgUmVnRXhwKFwiXlwiK2crXCIkKD8hXFxcXHMpXCIsaCkpLFNRJiYocj1zLmxhc3RJbmRleCksbz1uWSh5USxwP246cyx5KSxwP28/KG8uaW5wdXQ9RFEoby5pbnB1dCx2KSxvWzBdPURRKG9bMF0sdiksby5pbmRleD1zLmxhc3RJbmRleCxzLmxhc3RJbmRleCs9b1swXS5sZW5ndGgpOnMubGFzdEluZGV4PTA6U1EmJm8mJihzLmxhc3RJbmRleD1zLmdsb2JhbD9vLmluZGV4K29bMF0ubGVuZ3RoOnIpLENRJiZvJiZvLmxlbmd0aD4xJiZuWSh2USxvWzBdLG4sKGZ1bmN0aW9uKCl7Zm9yKGk9MTtpPGFyZ3VtZW50cy5sZW5ndGgtMjtpKyspdm9pZCAwPT09YXJndW1lbnRzW2ldJiYob1tpXT12b2lkIDApfSkpLG8mJmQpZm9yKG8uZ3JvdXBzPWE9VVkobnVsbCksaT0wO2k8ZC5sZW5ndGg7aSsrKWFbKHU9ZFtpXSlbMF1dPW9bdVsxXV07cmV0dXJuIG99KTt2YXIgQVE9bVE7TVgoe3RhcmdldDpcIlJlZ0V4cFwiLHByb3RvOiEwLGZvcmNlZDovLi8uZXhlYyE9PUFRfSx7ZXhlYzpBUX0pO3ZhciBPUT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnR5cGU9XCJsaXN0LWl0ZW1cIix0aGlzLnRhZz1cImJ1dHRvblwifXJldHVybiBlLnByb3RvdHlwZS5nZXRMaXN0Tm9kZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnR5cGU7cmV0dXJuIFFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShlLHQpfSxlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm5cIlwifSxlLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldExpc3ROb2RlKGUpO2lmKG51bGw9PXQpcmV0dXJuITE7dmFyIG49dC5vcmRlcmVkO3JldHVybih2b2lkIDAhPT1uJiZuKT09PXRoaXMub3JkZXJlZH0sZS5wcm90b3R5cGUuaXNEaXNhYmxlZD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5zZWxlY3Rpb258fCEhUU8uZ2V0U2VsZWN0ZWRFbGVtcyhlKS5zb21lKChmdW5jdGlvbih0KXtpZihCZi5pc1ZvaWQoZSx0KSYmQmYuaXNCbG9jayhlLHQpKXJldHVybiEwO3ZhciBuPXQudHlwZTtyZXR1cm4hIVtcInByZVwiLFwiY29kZVwiLFwidGFibGVcIl0uaW5jbHVkZXMobil8fHZvaWQgMH0pKX0sZS5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihlLHQpe3RoaXMuaXNBY3RpdmUoZSk/bWQuc2V0Tm9kZXMoZSx7dHlwZTpcInBhcmFncmFwaFwiLG9yZGVyZWQ6dm9pZCAwLGxldmVsOnZvaWQgMH0pOm1kLnNldE5vZGVzKGUse3R5cGU6XCJsaXN0LWl0ZW1cIixvcmRlcmVkOnRoaXMub3JkZXJlZCxpbmRlbnQ6dm9pZCAwfSl9LGV9KCksa1E9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTM4NCA2NGg2NDB2MTI4SDM4NFY2NHogbTAgMzg0aDY0MHYxMjhIMzg0di0xMjh6IG0wIDM4NGg2NDB2MTI4SDM4NHYtMTI4ek0wIDEyOGExMjggMTI4IDAgMSAxIDI1NiAwIDEyOCAxMjggMCAwIDEtMjU2IDB6IG0wIDM4NGExMjggMTI4IDAgMSAxIDI1NiAwIDEyOCAxMjggMCAwIDEtMjU2IDB6IG0wIDM4NGExMjggMTI4IDAgMSAxIDI1NiAwIDEyOCAxMjggMCAwIDEtMjU2IDB6XCI+PC9wYXRoPjwvc3ZnPicsQlE9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTM4NCA4MzJoNjQwdjEyOEgzODR6IG0wLTM4NGg2NDB2MTI4SDM4NHogbTAtMzg0aDY0MHYxMjhIMzg0ek0xOTIgMHYyNTZIMTI4VjY0SDY0VjB6TTEyOCA1MjYuMDE2djUwLjAxNmgxMjh2NjRINjR2LTE0Ni4wMTZsMTI4LTYwVjM4NEg2NHYtNjRoMTkydjE0Ni4wMTZ6TTI1NiA3MDR2MzIwSDY0di02NGgxMjh2LTY0SDY0di02NGgxMjh2LTY0SDY0di02NHpcIj48L3BhdGg+PC9zdmc+JyxGUT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0Lm9yZGVyZWQ9ITEsdC50aXRsZT1IUChcImxpc3RNb2R1bGUudW5PcmRlcmVkTGlzdFwiKSx0Lmljb25Tdmc9a1EsdH1yZXR1cm4gUUoodCxlKSx0fShPUSksVFE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5vcmRlcmVkPSEwLHQudGl0bGU9SFAoXCJsaXN0TW9kdWxlLm9yZGVyZWRMaXN0XCIpLHQuaWNvblN2Zz1CUSx0fXJldHVybiBRSih0LGUpLHR9KE9RKSxfUT17a2V5OlwiYnVsbGV0ZWRMaXN0XCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgRlF9fSxQUT17a2V5OlwibnVtYmVyZWRMaXN0XCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgVFF9fSxqUT1bXSxOUT17dHlwZTpcImxpc3QtaXRlbVwiLGVsZW1Ub0h0bWw6ZnVuY3Rpb24oZSx0KXt2YXIgbj1cIlwiLHI9XCJcIixvPWUub3JkZXJlZCxpPXZvaWQgMCE9PW8mJm8/XCJvbFwiOlwidWxcIixhPWZ1bmN0aW9uKGUpe3ZhciB0PVhKLmdldChlKTtpZihudWxsPT10KXJldHVybiAwO3ZhciBuPWUscj1uLnR5cGUsbz1uLm9yZGVyZWQsaT12b2lkIDAhPT1vJiZvLGE9bi5sZXZlbCx1PXZvaWQgMD09PWE/MDphLHM9UU8uZmluZFBhdGgodCxlKTtpZigwPT09c1swXSlyZXR1cm4gdSsxO3ZhciBsPU1mLnByZXZpb3VzKHMpLGM9QmYubm9kZSh0LGwpO2lmKCFjKXJldHVybiAwO3ZhciBmPXRRKGMsMSlbMF07aWYoUU8uZ2V0Tm9kZVR5cGUoZikhPT1yKXJldHVybiB1KzE7dmFyIGQ9ZixwPWQub3JkZXJlZCxoPXZvaWQgMCE9PXAmJnAsZz1kLmxldmVsLHY9dm9pZCAwPT09Zz8wOmc7cmV0dXJuIHY8dT91LXY6dj51PzA6dj09PXU/aD09PWk/MDoxOjB9KGUpO2lmKGE+MClmb3IodmFyIHU9MDt1PGE7dSsrKW4rPVwiPFwiK2krXCI+XCIsalEucHVzaChpKTt2YXIgcz1mdW5jdGlvbihlKXt2YXIgdD1YSi5nZXQoZSk7aWYobnVsbD09dClyZXR1cm4gMDt2YXIgbj1lLHI9bi50eXBlLG89bi5vcmRlcmVkLGk9dm9pZCAwIT09byYmbyxhPW4ubGV2ZWwsdT12b2lkIDA9PT1hPzA6YSxzPVFPLmZpbmRQYXRoKHQsZSk7aWYoc1swXT09PXQuY2hpbGRyZW4ubGVuZ3RoLTEpcmV0dXJuIHUrMTt2YXIgbD1NZi5uZXh0KHMpLGM9QmYubm9kZSh0LGwpO2lmKCFjKXJldHVybiAwO3ZhciBmPXRRKGMsMSlbMF07aWYoUU8uZ2V0Tm9kZVR5cGUoZikhPT1yKXJldHVybiB1KzE7dmFyIGQ9ZixwPWQub3JkZXJlZCxoPXZvaWQgMCE9PXAmJnAsZz1kLmxldmVsLHY9dm9pZCAwPT09Zz8wOmc7cmV0dXJuIHY8dT91LXY6dj51PzA6dj09PXU/aD09PWk/MDoxOjB9KGUpO2lmKHM+MClmb3IodT0wO3U8czt1Kyspcis9XCI8L1wiK2pRLnBvcCgpK1wiPlwiO3JldHVybntodG1sOlwiPGxpPlwiK3QrXCI8L2xpPlwiLHByZWZpeDpuLHN1ZmZpeDpyfX19LElRPVdLKFwic3BlY2llc1wiKSxMUT1iSi5maWx0ZXIsUlE9KFwiZmlsdGVyXCIsUks+PTUxfHwhdUsoKGZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuKGUuY29uc3RydWN0b3I9e30pW0lRXT1mdW5jdGlvbigpe3JldHVybntmb286MX19LDEhPT1lLmZpbHRlcihCb29sZWFuKS5mb299KSkpO01YKHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwLGZvcmNlZDohUlF9LHtmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIExRKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyIE1RPUZ1bmN0aW9uLnByb3RvdHlwZSx6UT1NUS5hcHBseSwkUT1NUS5iaW5kLEhRPU1RLmNhbGwsVlE9XCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuYXBwbHl8fCgkUT9IUS5iaW5kKHpRKTpmdW5jdGlvbigpe3JldHVybiBIUS5hcHBseSh6USxhcmd1bWVudHMpfSksVVE9KFdLKFwic3BlY2llc1wiKSxSZWdFeHAucHJvdG90eXBlKSxXUT1BWi5jaGFyQXQsR1E9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0KyhuP1dRKGUsdCkubGVuZ3RoOjEpfSxxUT1NYXRoLmZsb29yLEtRPWFLKFwiXCIuY2hhckF0KSxZUT1hSyhcIlwiLnJlcGxhY2UpLFhRPWFLKFwiXCIuc2xpY2UpLFpRPS9cXCQoWyQmJ2BdfFxcZHsxLDJ9fDxbXj5dKj4pL2csSlE9L1xcJChbJCYnYF18XFxkezEsMn0pL2csUVE9ZnVuY3Rpb24oZSx0LG4scixvLGkpe3ZhciBhPW4rZS5sZW5ndGgsdT1yLmxlbmd0aCxzPUpRO3JldHVybiB2b2lkIDAhPT1vJiYobz1ESyhvKSxzPVpRKSxZUShpLHMsKGZ1bmN0aW9uKGkscyl7dmFyIGw7c3dpdGNoKEtRKHMsMCkpe2Nhc2VcIiRcIjpyZXR1cm5cIiRcIjtjYXNlXCImXCI6cmV0dXJuIGU7Y2FzZVwiYFwiOnJldHVybiBYUSh0LDAsbik7Y2FzZVwiJ1wiOnJldHVybiBYUSh0LGEpO2Nhc2VcIjxcIjpsPW9bWFEocywxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgYz0rcztpZigwPT09YylyZXR1cm4gaTtpZihjPnUpe3ZhciBmPXFRKGMvMTApO3JldHVybiAwPT09Zj9pOmY8PXU/dm9pZCAwPT09cltmLTFdP0tRKHMsMSk6cltmLTFdK0tRKHMsMSk6aX1sPXJbYy0xXX1yZXR1cm4gdm9pZCAwPT09bD9cIlwiOmx9KSl9LGUwPXRLLlR5cGVFcnJvcix0MD1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhlYztpZihCSyhuKSl7dmFyIHI9blkobixlLHQpO3JldHVybiBudWxsIT09ciYmWUsocikscn1pZihcIlJlZ0V4cFwiPT09Y0soZSkpcmV0dXJuIG5ZKEFRLGUsdCk7dGhyb3cgZTAoXCJSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyXCIpfSxuMD1XSyhcInJlcGxhY2VcIikscjA9TWF0aC5tYXgsbzA9TWF0aC5taW4saTA9YUsoW10uY29uY2F0KSxhMD1hSyhbXS5wdXNoKSx1MD1hSyhcIlwiLmluZGV4T2YpLHMwPWFLKFwiXCIuc2xpY2UpLGwwPVwiJDBcIj09PVwiYVwiLnJlcGxhY2UoLy4vLFwiJDBcIiksYzA9ISEvLi9bbjBdJiZcIlwiPT09Ly4vW24wXShcImFcIixcIiQwXCIpOyFmdW5jdGlvbihlLHQsbixyKXt2YXIgbz1XSyhlKSxpPSF1SygoZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdFtvXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT1cIlwiW2VdKHQpfSkpLGE9aSYmIXVLKChmdW5jdGlvbigpe3ZhciBlPSExLHQ9L2EvO3JldHVybiB0LmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gZT0hMCxudWxsfSx0W29dKFwiXCIpLCFlfSkpO2lmKCFpfHwhYXx8bil7dmFyIHU9YUsoLy4vW29dKSxzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1jMD9cIiRcIjpcIiQwXCI7cmV0dXJuW2Z1bmN0aW9uKGUsbil7dmFyIHI9Z0sodGhpcyksbz1udWxsPT1lP3ZvaWQgMDpjWShlLG4wKTtyZXR1cm4gbz9uWShvLGUscixuKTpuWSh0LEVaKHIpLGUsbil9LGZ1bmN0aW9uKGUsbyl7dmFyIGk9WUsodGhpcyksYT1FWihlKTtpZihcInN0cmluZ1wiPT10eXBlb2YgbyYmLTE9PT11MChvLHIpJiYtMT09PXUwKG8sXCIkPFwiKSl7dmFyIHU9bih0LGksYSxvKTtpZih1LmRvbmUpcmV0dXJuIHUudmFsdWV9dmFyIHM9Qksobyk7c3x8KG89RVoobykpO3ZhciBsPWkuZ2xvYmFsO2lmKGwpe3ZhciBjPWkudW5pY29kZTtpLmxhc3RJbmRleD0wfWZvcih2YXIgZj1bXTs7KXt2YXIgZD10MChpLGEpO2lmKG51bGw9PT1kKWJyZWFrO2lmKGEwKGYsZCksIWwpYnJlYWs7XCJcIj09PUVaKGRbMF0pJiYoaS5sYXN0SW5kZXg9R1EoYSxDWShpLmxhc3RJbmRleCksYykpfWZvcih2YXIgcCxoPVwiXCIsZz0wLHY9MDt2PGYubGVuZ3RoO3YrKyl7Zm9yKHZhciB5PUVaKChkPWZbdl0pWzBdKSxtPXIwKG8wKHdZKGQuaW5kZXgpLGEubGVuZ3RoKSwwKSxiPVtdLHc9MTt3PGQubGVuZ3RoO3crKylhMChiLHZvaWQgMD09PShwPWRbd10pP3A6U3RyaW5nKHApKTt2YXIgRT1kLmdyb3VwcztpZihzKXt2YXIgRD1pMChbeV0sYixtLGEpO3ZvaWQgMCE9PUUmJmEwKEQsRSk7dmFyIFM9RVooVlEobyx2b2lkIDAsRCkpfWVsc2UgUz1RUSh5LGEsbSxiLEUsbyk7bT49ZyYmKGgrPXMwKGEsZyxtKStTLGc9bSt5Lmxlbmd0aCl9cmV0dXJuIGgrczAoYSxnKX1dfSgwLFwiXCJbZV0sKGZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGE9YUsoZSkscz10LmV4ZWM7cmV0dXJuIHM9PT1BUXx8cz09PVVRLmV4ZWM/aSYmIW8/e2RvbmU6ITAsdmFsdWU6dSh0LG4scil9Ontkb25lOiEwLHZhbHVlOmEobix0LHIpfTp7ZG9uZTohMX19KSk7eFgoU3RyaW5nLnByb3RvdHlwZSxlLHNbMF0pLHhYKFVRLG8sc1sxXSl9fShcInJlcGxhY2VcIiwwLCEhdUsoKGZ1bmN0aW9uKCl7dmFyIGU9Ly4vO3JldHVybiBlLmV4ZWM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gZS5ncm91cHM9e2E6XCI3XCJ9LGV9LFwiN1wiIT09XCJcIi5yZXBsYWNlKGUsXCIkPGE+XCIpfSkpfHwhbDB8fGMwKTt2YXIgZjA9dEsuVHlwZUVycm9yLGQwPWZ1bmN0aW9uKGUsdCxuLHIsbyxpLGEsdSl7Zm9yKHZhciBzLGwsYz1vLGY9MCxkPSEhYSYmSFooYSx1KTtmPHI7KXtpZihmIGluIG4pe2lmKHM9ZD9kKG5bZl0sZix0KTpuW2ZdLGk+MCYmaUoocykpbD1BWShzKSxjPWQwKGUsdCxzLGwsYyxpLTEpLTE7ZWxzZXtpZihjPj05MDA3MTk5MjU0NzQwOTkxKXRocm93IGYwKFwiRXhjZWVkIHRoZSBhY2NlcHRhYmxlIGFycmF5IGxlbmd0aFwiKTtlW2NdPXN9YysrfWYrK31yZXR1cm4gY30scDA9ZDA7ZnVuY3Rpb24gaDAoZSl7cmV0dXJuIGUubGVuZ3RoP2VbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpOlwiXCJ9TVgoe3RhcmdldDpcIkFycmF5XCIscHJvdG86ITB9LHtmbGF0OmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwLHQ9REsodGhpcyksbj1BWSh0KSxyPXZKKHQsMCk7cmV0dXJuIHIubGVuZ3RoPXAwKHIsdCx0LG4sMCx2b2lkIDA9PT1lPzE6d1koZSkpLHJ9fSkscVkoXCJmbGF0XCIpLE1YKHtnbG9iYWw6ITB9LHtnbG9iYWxUaGlzOnRLfSksYWgmJihNcC5mbi5hcHBlbmQ9YWgpLFZwJiYoTXAuZm4uYXR0cj1WcCksc2gmJihNcC5mbi5wYXJlbnQ9c2gpO3ZhciBnMD17cmVuZGVyRWxlbXM6W1pKXSxlZGl0b3JQbHVnaW46ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kZWxldGVCYWNrd2FyZCxuPWUuaGFuZGxlVGFiLHI9ZS5ub3JtYWxpemVOb2RlLG89ZTtyZXR1cm4gby5kZWxldGVCYWNrd2FyZD1mdW5jdGlvbihlKXt2YXIgbj1vLnNlbGVjdGlvbjtpZihudWxsIT1uKWlmKHFmLmlzRXhwYW5kZWQobikpdChlKTtlbHNle3ZhciByPVFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShvLFwibGlzdC1pdGVtXCIpO2lmKG51bGwhPXIpaWYoMCE9PW4uZm9jdXMub2Zmc2V0KXQoZSk7ZWxzZXt2YXIgaT1yLmxldmVsLGE9dm9pZCAwPT09aT8wOmk7YT4wP21kLnNldE5vZGVzKG8se2xldmVsOmEtMX0pOm1kLnNldE5vZGVzKG8se3R5cGU6XCJwYXJhZ3JhcGhcIixvcmRlcmVkOnZvaWQgMCxsZXZlbDp2b2lkIDB9KX1lbHNlIHQoZSl9ZWxzZSB0KGUpfSxvLmhhbmRsZVRhYj1mdW5jdGlvbigpe3ZhciBlLHQscixpLGE9by5zZWxlY3Rpb247aWYobnVsbCE9YSl7aWYocWYuaXNDb2xsYXBzZWQoYSkpe3ZhciB1PVFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShvLFwibGlzdC1pdGVtXCIpO2lmKG51bGw9PXUpcmV0dXJuIHZvaWQgbigpO2lmKDA9PT1hLmZvY3VzLm9mZnNldCl7dmFyIHM9dS5sZXZlbCxsPXZvaWQgMD09PXM/MDpzO3JldHVybiB2b2lkIG1kLnNldE5vZGVzKG8se2xldmVsOmwrMX0pfX1pZihxZi5pc0V4cGFuZGVkKGEpKXt2YXIgYz0wLGY9ITE7dHJ5e2Zvcih2YXIgZD1lUShuUShvKSkscD1kLm5leHQoKTshcC5kb25lO3A9ZC5uZXh0KCkpe3ZhciBoPXRRKHAudmFsdWUsMSlbMF07XCJsaXN0LWl0ZW1cIj09PVFPLmdldE5vZGVUeXBlKGgpP2MrKzpmPSEwfX1jYXRjaCh0KXtlPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtwJiYhcC5kb25lJiYodD1kLnJldHVybikmJnQuY2FsbChkKX1maW5hbGx5e2lmKGUpdGhyb3cgZS5lcnJvcn19aWYoZnx8Yzw9MSlyZXR1cm4gdm9pZCBuKCk7dHJ5e2Zvcih2YXIgZz1lUShuUShvKSksdj1nLm5leHQoKTshdi5kb25lO3Y9Zy5uZXh0KCkpe3ZhciB5PXRRKHYudmFsdWUsMiksbT0oaD15WzBdLHlbMV0pLGI9aC5sZXZlbDtsPXZvaWQgMD09PWI/MDpiLG1kLnNldE5vZGVzKG8se2xldmVsOmwrMX0se2F0Om19KX19Y2F0Y2goZSl7cj17ZXJyb3I6ZX19ZmluYWxseXt0cnl7diYmIXYuZG9uZSYmKGk9Zy5yZXR1cm4pJiZpLmNhbGwoZyl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fX1lbHNlIG4oKX1lbHNlIG4oKX0sby5ub3JtYWxpemVOb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PXRRKGUsMiksbj10WzBdLGk9dFsxXSxhPVFPLmdldE5vZGVUeXBlKG4pO3JldHVyblwiYnVsbGV0ZWQtbGlzdFwiIT09YSYmXCJudW1iZXJlZC1saXN0XCIhPT1hfHxtZC51bndyYXBOb2RlcyhvLHthdDppfSkscihbbixpXSl9LG99LG1lbnVzOltfUSxQUV0sZWxlbXNUb0h0bWw6W05RXSxwYXJzZUVsZW1zSHRtbDpbe3NlbGVjdG9yOlwidWw6bm90KFtkYXRhLXctZS10eXBlXSksb2w6bm90KFtkYXRhLXctZS10eXBlXSlcIixwYXJzZUVsZW1IdG1sOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdC5mbGF0KDEvMCl9fSx7c2VsZWN0b3I6XCJsaTpub3QoW2RhdGEtdy1lLXR5cGVdKVwiLHBhcnNlRWxlbUh0bWw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU1wKGUpOzA9PT0odD10LmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuISFlZC5pc1RleHQoZSl8fCEhbi5pc0lubGluZShlKX0pKSkubGVuZ3RoJiYodD1be3RleHQ6ci50ZXh0KCkucmVwbGFjZSgvXFxzKy9nbSxcIiBcIil9XSk7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuXCJvbFwiPT09aDAoZS5wYXJlbnQoKSl9KHIpLGk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1lLnBhcmVudCgpLHI9aDAobik7XCJ1bFwiPT09cnx8XCJvbFwiPT09cjspcj1oMChuPW4ucGFyZW50KCkpLHQrKztyZXR1cm4gdC0xfShyKTtyZXR1cm57dHlwZTpcImxpc3QtaXRlbVwiLG9yZGVyZWQ6byxsZXZlbDppLGNoaWxkcmVuOnR9fX1dfSx2MD1uKChmdW5jdGlvbih0LG4pe3ZhciByPVwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfX1wiLG89OTAwNzE5OTI1NDc0MDk5MSxpPVwiW29iamVjdCBBcmd1bWVudHNdXCIsYT1cIltvYmplY3QgQXJyYXldXCIsdT1cIltvYmplY3QgQm9vbGVhbl1cIixzPVwiW29iamVjdCBEYXRlXVwiLGw9XCJbb2JqZWN0IEVycm9yXVwiLGM9XCJbb2JqZWN0IEZ1bmN0aW9uXVwiLGY9XCJbb2JqZWN0IE1hcF1cIixkPVwiW29iamVjdCBOdW1iZXJdXCIscD1cIltvYmplY3QgT2JqZWN0XVwiLGg9XCJbb2JqZWN0IFByb21pc2VdXCIsZz1cIltvYmplY3QgUmVnRXhwXVwiLHY9XCJbb2JqZWN0IFNldF1cIix5PVwiW29iamVjdCBTdHJpbmddXCIsbT1cIltvYmplY3QgU3ltYm9sXVwiLGI9XCJbb2JqZWN0IFdlYWtNYXBdXCIsdz1cIltvYmplY3QgQXJyYXlCdWZmZXJdXCIsRT1cIltvYmplY3QgRGF0YVZpZXddXCIsRD0vXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvLFM9L14oPzowfFsxLTldXFxkKikkLyx4PXt9O3hbXCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIl09eFtcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiXT14W1wiW29iamVjdCBJbnQ4QXJyYXldXCJdPXhbXCJbb2JqZWN0IEludDE2QXJyYXldXCJdPXhbXCJbb2JqZWN0IEludDMyQXJyYXldXCJdPXhbXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCJdPXhbXCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiXT14W1wiW29iamVjdCBVaW50MTZBcnJheV1cIl09eFtcIltvYmplY3QgVWludDMyQXJyYXldXCJdPSEwLHhbaV09eFthXT14W3ddPXhbdV09eFtFXT14W3NdPXhbbF09eFtjXT14W2ZdPXhbZF09eFtwXT14W2ddPXhbdl09eFt5XT14W2JdPSExO3ZhciBDPVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiZlLk9iamVjdD09PU9iamVjdCYmZSxBPVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixPPUN8fEF8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxrPW4mJiFuLm5vZGVUeXBlJiZuLEI9ayYmdCYmIXQubm9kZVR5cGUmJnQsRj1CJiZCLmV4cG9ydHM9PT1rLFQ9RiYmQy5wcm9jZXNzLF89ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIFQmJlQuYmluZGluZyYmVC5iaW5kaW5nKFwidXRpbFwiKX1jYXRjaChlKXt9fSgpLFA9XyYmXy5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gaihlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aDsrK248cjspaWYodChlW25dLG4sZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTihlKXt2YXIgdD0tMSxuPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtuWysrdF09W3IsZV19KSksbn1mdW5jdGlvbiBJKGUpe3ZhciB0PS0xLG49QXJyYXkoZS5zaXplKTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtuWysrdF09ZX0pKSxufXZhciBMPUFycmF5LnByb3RvdHlwZSxSPUZ1bmN0aW9uLnByb3RvdHlwZSxNPU9iamVjdC5wcm90b3R5cGUsej1PW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdLCQ9Ui50b1N0cmluZyxIPU0uaGFzT3duUHJvcGVydHksVj1mdW5jdGlvbigpe3ZhciBlPS9bXi5dKyQvLmV4ZWMoeiYmei5rZXlzJiZ6LmtleXMuSUVfUFJPVE98fFwiXCIpO3JldHVybiBlP1wiU3ltYm9sKHNyYylfMS5cIitlOlwiXCJ9KCksVT1NLnRvU3RyaW5nLFc9UmVnRXhwKFwiXlwiKyQuY2FsbChIKS5yZXBsYWNlKC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLFwiJDEuKj9cIikrXCIkXCIpLEc9Rj9PLkJ1ZmZlcjp2b2lkIDAscT1PLlN5bWJvbCxLPU8uVWludDhBcnJheSxZPU0ucHJvcGVydHlJc0VudW1lcmFibGUsWD1MLnNwbGljZSxaPXE/cS50b1N0cmluZ1RhZzp2b2lkIDAsSj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLFE9Rz9HLmlzQnVmZmVyOnZvaWQgMCxlZT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZSh0KG4pKX19KE9iamVjdC5rZXlzLE9iamVjdCksdGU9QmUoTyxcIkRhdGFWaWV3XCIpLG5lPUJlKE8sXCJNYXBcIikscmU9QmUoTyxcIlByb21pc2VcIiksb2U9QmUoTyxcIlNldFwiKSxpZT1CZShPLFwiV2Vha01hcFwiKSxhZT1CZShPYmplY3QsXCJjcmVhdGVcIiksdWU9UGUodGUpLHNlPVBlKG5lKSxsZT1QZShyZSksY2U9UGUob2UpLGZlPVBlKGllKSxkZT1xP3EucHJvdG90eXBlOnZvaWQgMCxwZT1kZT9kZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBoZShlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiBnZShlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiB2ZShlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxuOyl7dmFyIHI9ZVt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1mdW5jdGlvbiB5ZShlKXt2YXIgdD0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgdmU7Kyt0PG47KXRoaXMuYWRkKGVbdF0pfWZ1bmN0aW9uIG1lKGUpe3ZhciB0PXRoaXMuX19kYXRhX189bmV3IGdlKGUpO3RoaXMuc2l6ZT10LnNpemV9ZnVuY3Rpb24gYmUoZSx0KXt2YXIgbj1JZShlKSxyPSFuJiZOZShlKSxvPSFuJiYhciYmTGUoZSksaT0hbiYmIXImJiFvJiZIZShlKSxhPW58fHJ8fG98fGksdT1hP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPS0xLHI9QXJyYXkoZSk7KytuPGU7KXJbbl09dChuKTtyZXR1cm4gcn0oZS5sZW5ndGgsU3RyaW5nKTpbXSxzPXUubGVuZ3RoO2Zvcih2YXIgbCBpbiBlKSF0JiYhSC5jYWxsKGUsbCl8fGEmJihcImxlbmd0aFwiPT1sfHxvJiYoXCJvZmZzZXRcIj09bHx8XCJwYXJlbnRcIj09bCl8fGkmJihcImJ1ZmZlclwiPT1sfHxcImJ5dGVMZW5ndGhcIj09bHx8XCJieXRlT2Zmc2V0XCI9PWwpfHxfZShsLHMpKXx8dS5wdXNoKGwpO3JldHVybiB1fWZ1bmN0aW9uIHdlKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoO24tLTspaWYoamUoZVtuXVswXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBFZShlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA9PT1lP1wiW29iamVjdCBVbmRlZmluZWRdXCI6XCJbb2JqZWN0IE51bGxdXCI6WiYmWiBpbiBPYmplY3QoZSk/ZnVuY3Rpb24oZSl7dmFyIHQ9SC5jYWxsKGUsWiksbj1lW1pdO3RyeXtlW1pdPXZvaWQgMDt2YXIgcj0hMH1jYXRjaChlKXt9dmFyIG89VS5jYWxsKGUpO3ImJih0P2VbWl09bjpkZWxldGUgZVtaXSk7cmV0dXJuIG99KGUpOmZ1bmN0aW9uKGUpe3JldHVybiBVLmNhbGwoZSl9KGUpfWZ1bmN0aW9uIERlKGUpe3JldHVybiAkZShlKSYmRWUoZSk9PWl9ZnVuY3Rpb24gU2UoZSx0LG4scixvKXtyZXR1cm4gZT09PXR8fChudWxsPT1lfHxudWxsPT10fHwhJGUoZSkmJiEkZSh0KT9lIT1lJiZ0IT10OmZ1bmN0aW9uKGUsdCxuLHIsbyxjKXt2YXIgaD1JZShlKSxiPUllKHQpLEQ9aD9hOlRlKGUpLFM9Yj9hOlRlKHQpLHg9KEQ9RD09aT9wOkQpPT1wLEM9KFM9Uz09aT9wOlMpPT1wLEE9RD09UztpZihBJiZMZShlKSl7aWYoIUxlKHQpKXJldHVybiExO2g9ITAseD0hMX1pZihBJiYheClyZXR1cm4gY3x8KGM9bmV3IG1lKSxofHxIZShlKT9BZShlLHQsbixyLG8sYyk6ZnVuY3Rpb24oZSx0LG4scixvLGksYSl7c3dpdGNoKG4pe2Nhc2UgRTppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2UgdzpyZXR1cm4hKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHwhaShuZXcgSyhlKSxuZXcgSyh0KSkpO2Nhc2UgdTpjYXNlIHM6Y2FzZSBkOnJldHVybiBqZSgrZSwrdCk7Y2FzZSBsOnJldHVybiBlLm5hbWU9PXQubmFtZSYmZS5tZXNzYWdlPT10Lm1lc3NhZ2U7Y2FzZSBnOmNhc2UgeTpyZXR1cm4gZT09dCtcIlwiO2Nhc2UgZjp2YXIgYz1OO2Nhc2Ugdjp2YXIgcD0xJnI7aWYoY3x8KGM9SSksZS5zaXplIT10LnNpemUmJiFwKXJldHVybiExO3ZhciBoPWEuZ2V0KGUpO2lmKGgpcmV0dXJuIGg9PXQ7cnw9MixhLnNldChlLHQpO3ZhciBiPUFlKGMoZSksYyh0KSxyLG8saSxhKTtyZXR1cm4gYS5kZWxldGUoZSksYjtjYXNlIG06aWYocGUpcmV0dXJuIHBlLmNhbGwoZSk9PXBlLmNhbGwodCl9cmV0dXJuITF9KGUsdCxELG4scixvLGMpO2lmKCEoMSZuKSl7dmFyIE89eCYmSC5jYWxsKGUsXCJfX3dyYXBwZWRfX1wiKSxrPUMmJkguY2FsbCh0LFwiX193cmFwcGVkX19cIik7aWYoT3x8ayl7dmFyIEI9Tz9lLnZhbHVlKCk6ZSxGPWs/dC52YWx1ZSgpOnQ7cmV0dXJuIGN8fChjPW5ldyBtZSksbyhCLEYsbixyLGMpfX1pZighQSlyZXR1cm4hMTtyZXR1cm4gY3x8KGM9bmV3IG1lKSxmdW5jdGlvbihlLHQsbixyLG8saSl7dmFyIGE9MSZuLHU9T2UoZSkscz11Lmxlbmd0aCxsPU9lKHQpLmxlbmd0aDtpZihzIT1sJiYhYSlyZXR1cm4hMTt2YXIgYz1zO2Zvcig7Yy0tOyl7dmFyIGY9dVtjXTtpZighKGE/ZiBpbiB0OkguY2FsbCh0LGYpKSlyZXR1cm4hMX12YXIgZD1pLmdldChlKTtpZihkJiZpLmdldCh0KSlyZXR1cm4gZD09dDt2YXIgcD0hMDtpLnNldChlLHQpLGkuc2V0KHQsZSk7dmFyIGg9YTtmb3IoOysrYzxzOyl7dmFyIGc9ZVtmPXVbY11dLHY9dFtmXTtpZihyKXZhciB5PWE/cih2LGcsZix0LGUsaSk6cihnLHYsZixlLHQsaSk7aWYoISh2b2lkIDA9PT15P2c9PT12fHxvKGcsdixuLHIsaSk6eSkpe3A9ITE7YnJlYWt9aHx8KGg9XCJjb25zdHJ1Y3RvclwiPT1mKX1pZihwJiYhaCl7dmFyIG09ZS5jb25zdHJ1Y3RvcixiPXQuY29uc3RydWN0b3I7bT09Ynx8IShcImNvbnN0cnVjdG9yXCJpbiBlKXx8IShcImNvbnN0cnVjdG9yXCJpbiB0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgbSYmbSBpbnN0YW5jZW9mIG0mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGImJmIgaW5zdGFuY2VvZiBifHwocD0hMSl9cmV0dXJuIGkuZGVsZXRlKGUpLGkuZGVsZXRlKHQpLHB9KGUsdCxuLHIsbyxjKX0oZSx0LG4scixTZSxvKSl9ZnVuY3Rpb24geGUoZSl7cmV0dXJuISghemUoZSl8fGZ1bmN0aW9uKGUpe3JldHVybiEhViYmViBpbiBlfShlKSkmJihSZShlKT9XOkQpLnRlc3QoUGUoZSkpfWZ1bmN0aW9uIENlKGUpe2lmKG49KHQ9ZSkmJnQuY29uc3RydWN0b3Iscj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZuLnByb3RvdHlwZXx8TSx0IT09cilyZXR1cm4gZWUoZSk7dmFyIHQsbixyLG89W107Zm9yKHZhciBpIGluIE9iamVjdChlKSlILmNhbGwoZSxpKSYmXCJjb25zdHJ1Y3RvclwiIT1pJiZvLnB1c2goaSk7cmV0dXJuIG99ZnVuY3Rpb24gQWUoZSx0LG4scixvLGkpe3ZhciBhPTEmbix1PWUubGVuZ3RoLHM9dC5sZW5ndGg7aWYodSE9cyYmIShhJiZzPnUpKXJldHVybiExO3ZhciBsPWkuZ2V0KGUpO2lmKGwmJmkuZ2V0KHQpKXJldHVybiBsPT10O3ZhciBjPS0xLGY9ITAsZD0yJm4/bmV3IHllOnZvaWQgMDtmb3IoaS5zZXQoZSx0KSxpLnNldCh0LGUpOysrYzx1Oyl7dmFyIHA9ZVtjXSxoPXRbY107aWYocil2YXIgZz1hP3IoaCxwLGMsdCxlLGkpOnIocCxoLGMsZSx0LGkpO2lmKHZvaWQgMCE9PWcpe2lmKGcpY29udGludWU7Zj0hMTticmVha31pZihkKXtpZighaih0LChmdW5jdGlvbihlLHQpe2lmKGE9dCwhZC5oYXMoYSkmJihwPT09ZXx8byhwLGUsbixyLGkpKSlyZXR1cm4gZC5wdXNoKHQpO3ZhciBhfSkpKXtmPSExO2JyZWFrfX1lbHNlIGlmKHAhPT1oJiYhbyhwLGgsbixyLGkpKXtmPSExO2JyZWFrfX1yZXR1cm4gaS5kZWxldGUoZSksaS5kZWxldGUodCksZn1mdW5jdGlvbiBPZShlKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQoZSk7cmV0dXJuIEllKGUpP3I6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49LTEscj10Lmxlbmd0aCxvPWUubGVuZ3RoOysrbjxyOyllW28rbl09dFtuXTtyZXR1cm4gZX0ocixuKGUpKX0oZSxWZSxGZSl9ZnVuY3Rpb24ga2UoZSx0KXt2YXIgbixyLG89ZS5fX2RhdGFfXztyZXR1cm4oXCJzdHJpbmdcIj09KHI9dHlwZW9mKG49dCkpfHxcIm51bWJlclwiPT1yfHxcInN5bWJvbFwiPT1yfHxcImJvb2xlYW5cIj09cj9cIl9fcHJvdG9fX1wiIT09bjpudWxsPT09bik/b1tcInN0cmluZ1wiPT10eXBlb2YgdD9cInN0cmluZ1wiOlwiaGFzaFwiXTpvLm1hcH1mdW5jdGlvbiBCZShlLHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19KGUsdCk7cmV0dXJuIHhlKG4pP246dm9pZCAwfWhlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189YWU/YWUobnVsbCk6e30sdGhpcy5zaXplPTB9LGhlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oYXMoZSkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2VdO3JldHVybiB0aGlzLnNpemUtPXQ/MTowLHR9LGhlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztpZihhZSl7dmFyIG49dFtlXTtyZXR1cm4gbj09PXI/dm9pZCAwOm59cmV0dXJuIEguY2FsbCh0LGUpP3RbZV06dm9pZCAwfSxoZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIGFlP3ZvaWQgMCE9PXRbZV06SC5jYWxsKHQsZSl9LGhlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGUpPzA6MSxuW2VdPWFlJiZ2b2lkIDA9PT10P3I6dCx0aGlzfSxnZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSxnZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18sbj13ZSh0LGUpO3JldHVybiEobjwwKSYmKG49PXQubGVuZ3RoLTE/dC5wb3AoKTpYLmNhbGwodCxuLDEpLC0tdGhpcy5zaXplLCEwKX0sZ2UucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49d2UodCxlKTtyZXR1cm4gbjwwP3ZvaWQgMDp0W25dWzFdfSxnZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiB3ZSh0aGlzLl9fZGF0YV9fLGUpPi0xfSxnZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXyxyPXdlKG4sZSk7cmV0dXJuIHI8MD8oKyt0aGlzLnNpemUsbi5wdXNoKFtlLHRdKSk6bltyXVsxXT10LHRoaXN9LHZlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IGhlLG1hcDpuZXcobmV8fGdlKSxzdHJpbmc6bmV3IGhlfX0sdmUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD1rZSh0aGlzLGUpLmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSx2ZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBrZSh0aGlzLGUpLmdldChlKX0sdmUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4ga2UodGhpcyxlKS5oYXMoZSl9LHZlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1rZSh0aGlzLGUpLHI9bi5zaXplO3JldHVybiBuLnNldChlLHQpLHRoaXMuc2l6ZSs9bi5zaXplPT1yPzA6MSx0aGlzfSx5ZS5wcm90b3R5cGUuYWRkPXllLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLHIpLHRoaXN9LHllLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfSxtZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyBnZSx0aGlzLnNpemU9MH0sbWUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLG49dC5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUsbn0sbWUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoZSl9LG1lLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfSxtZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fX2RhdGFfXztpZihuIGluc3RhbmNlb2YgZ2Upe3ZhciByPW4uX19kYXRhX187aWYoIW5lfHxyLmxlbmd0aDwxOTkpcmV0dXJuIHIucHVzaChbZSx0XSksdGhpcy5zaXplPSsrbi5zaXplLHRoaXM7bj10aGlzLl9fZGF0YV9fPW5ldyB2ZShyKX1yZXR1cm4gbi5zZXQoZSx0KSx0aGlzLnNpemU9bi5zaXplLHRoaXN9O3ZhciBGZT1KP2Z1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOihlPU9iamVjdChlKSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0tMSxyPW51bGw9PWU/MDplLmxlbmd0aCxvPTAsaT1bXTsrK248cjspe3ZhciBhPWVbbl07dChhLG4sZSkmJihpW28rK109YSl9cmV0dXJuIGl9KEooZSksKGZ1bmN0aW9uKHQpe3JldHVybiBZLmNhbGwoZSx0KX0pKSl9OmZ1bmN0aW9uKCl7cmV0dXJuW119LFRlPUVlO2Z1bmN0aW9uIF9lKGUsdCl7cmV0dXJuISEodD1udWxsPT10P286dCkmJihcIm51bWJlclwiPT10eXBlb2YgZXx8Uy50ZXN0KGUpKSYmZT4tMSYmZSUxPT0wJiZlPHR9ZnVuY3Rpb24gUGUoZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiAkLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZStcIlwifWNhdGNoKGUpe319cmV0dXJuXCJcIn1mdW5jdGlvbiBqZShlLHQpe3JldHVybiBlPT09dHx8ZSE9ZSYmdCE9dH0odGUmJlRlKG5ldyB0ZShuZXcgQXJyYXlCdWZmZXIoMSkpKSE9RXx8bmUmJlRlKG5ldyBuZSkhPWZ8fHJlJiZUZShyZS5yZXNvbHZlKCkpIT1ofHxvZSYmVGUobmV3IG9lKSE9dnx8aWUmJlRlKG5ldyBpZSkhPWIpJiYoVGU9ZnVuY3Rpb24oZSl7dmFyIHQ9RWUoZSksbj10PT1wP2UuY29uc3RydWN0b3I6dm9pZCAwLHI9bj9QZShuKTpcIlwiO2lmKHIpc3dpdGNoKHIpe2Nhc2UgdWU6cmV0dXJuIEU7Y2FzZSBzZTpyZXR1cm4gZjtjYXNlIGxlOnJldHVybiBoO2Nhc2UgY2U6cmV0dXJuIHY7Y2FzZSBmZTpyZXR1cm4gYn1yZXR1cm4gdH0pO3ZhciBOZT1EZShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0RlOmZ1bmN0aW9uKGUpe3JldHVybiAkZShlKSYmSC5jYWxsKGUsXCJjYWxsZWVcIikmJiFZLmNhbGwoZSxcImNhbGxlZVwiKX0sSWU9QXJyYXkuaXNBcnJheTt2YXIgTGU9UXx8ZnVuY3Rpb24oKXtyZXR1cm4hMX07ZnVuY3Rpb24gUmUoZSl7aWYoIXplKGUpKXJldHVybiExO3ZhciB0PUVlKGUpO3JldHVybiB0PT1jfHxcIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dXCI9PXR8fFwiW29iamVjdCBBc3luY0Z1bmN0aW9uXVwiPT10fHxcIltvYmplY3QgUHJveHldXCI9PXR9ZnVuY3Rpb24gTWUoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+LTEmJmUlMT09MCYmZTw9b31mdW5jdGlvbiB6ZShlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4gbnVsbCE9ZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9ZnVuY3Rpb24gJGUoZSl7cmV0dXJuIG51bGwhPWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfXZhciBIZT1QP2Z1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KX19KFApOmZ1bmN0aW9uKGUpe3JldHVybiAkZShlKSYmTWUoZS5sZW5ndGgpJiYhIXhbRWUoZSldfTtmdW5jdGlvbiBWZShlKXtyZXR1cm4gbnVsbCE9KHQ9ZSkmJk1lKHQubGVuZ3RoKSYmIVJlKHQpP2JlKGUpOkNlKGUpO3ZhciB0fXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBTZShlLHQpfX0pKTtNUChcImVuXCIse3RhYmxlTW9kdWxlOntkZWxldGVDb2w6XCJEZWxldGUgY29sdW1uXCIsZGVsZXRlUm93OlwiRGVsZXRlIHJvd1wiLGRlbGV0ZVRhYmxlOlwiRGVsZXRlIHRhYmxlXCIsd2lkdGhBdXRvOlwiV2lkdGggYXV0b1wiLGluc2VydENvbDpcIkluc2VydCBjb2x1bW5cIixpbnNlcnRSb3c6XCJJbnNlcnQgcm93XCIsaW5zZXJ0VGFibGU6XCJJbnNlcnQgdGFibGVcIixoZWFkZXI6XCJIZWFkZXJcIn19KSxNUChcInpoLUNOXCIse3RhYmxlTW9kdWxlOntkZWxldGVDb2w6XCLliKDpmaTliJdcIixkZWxldGVSb3c6XCLliKDpmaTooYxcIixkZWxldGVUYWJsZTpcIuWIoOmZpOihqOagvFwiLHdpZHRoQXV0bzpcIuWuveW6puiHqumAguW6lFwiLGluc2VydENvbDpcIuaPkuWFpeWIl1wiLGluc2VydFJvdzpcIuaPkuWFpeihjFwiLGluc2VydFRhYmxlOlwi5o+S5YWl6KGo5qC8XCIsaGVhZGVyOlwi6KGo5aS0XCJ9fSk7dmFyIHkwPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBtMChlKXt2YXIgdD17ZXhwb3J0czp7fX07cmV0dXJuIGUodCx0LmV4cG9ydHMpLHQuZXhwb3J0c312YXIgYjAsdzAsRTA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuTWF0aD09TWF0aCYmZX0sRDA9RTAoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxFMChcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxFMChcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZil8fEUwKFwib2JqZWN0XCI9PXR5cGVvZiB5MCYmeTApfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksUzA9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiEhZSgpfWNhdGNoKGUpe3JldHVybiEwfX0seDA9IVMwKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KSksQzA9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsQTA9QzAuYmluZD9DMC5iaW5kKEMwKTpmdW5jdGlvbigpe3JldHVybiBDMC5hcHBseShDMCxhcmd1bWVudHMpfSxPMD17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxrMD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEIwPXtmOmswJiYhTzAuY2FsbCh7MToyfSwxKT9mdW5jdGlvbihlKXt2YXIgdD1rMCh0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTpPMH0sRjA9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19LFQwPUZ1bmN0aW9uLnByb3RvdHlwZSxfMD1UMC5iaW5kLFAwPVQwLmNhbGwsajA9XzAmJl8wLmJpbmQoUDApLE4wPV8wP2Z1bmN0aW9uKGUpe3JldHVybiBlJiZqMChQMCxlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmZ1bmN0aW9uKCl7cmV0dXJuIFAwLmFwcGx5KGUsYXJndW1lbnRzKX19LEkwPU4wKHt9LnRvU3RyaW5nKSxMMD1OMChcIlwiLnNsaWNlKSxSMD1mdW5jdGlvbihlKXtyZXR1cm4gTDAoSTAoZSksOCwtMSl9LE0wPUQwLk9iamVjdCx6MD1OMChcIlwiLnNwbGl0KSwkMD1TMCgoZnVuY3Rpb24oKXtyZXR1cm4hTTAoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKGUpe3JldHVyblwiU3RyaW5nXCI9PVIwKGUpP3owKGUsXCJcIik6TTAoZSl9Ok0wLEgwPUQwLlR5cGVFcnJvcixWMD1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IEgwKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIrZSk7cmV0dXJuIGV9LFUwPWZ1bmN0aW9uKGUpe3JldHVybiAkMChWMChlKSl9LFcwPWZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9LEcwPWZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlP251bGwhPT1lOlcwKGUpfSxxMD1mdW5jdGlvbihlKXtyZXR1cm4gVzAoZSk/ZTp2b2lkIDB9LEswPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9xMChEMFtlXSk6RDBbZV0mJkQwW2VdW3RdfSxZMD1OMCh7fS5pc1Byb3RvdHlwZU9mKSxYMD1LMChcIm5hdmlnYXRvclwiLFwidXNlckFnZW50XCIpfHxcIlwiLFowPUQwLnByb2Nlc3MsSjA9RDAuRGVubyxRMD1aMCYmWjAudmVyc2lvbnN8fEowJiZKMC52ZXJzaW9uLGUxPVEwJiZRMC52ODtlMSYmKHcwPShiMD1lMS5zcGxpdChcIi5cIikpWzBdPjAmJmIwWzBdPDQ/MTorKGIwWzBdK2IwWzFdKSksIXcwJiZYMCYmKCEoYjA9WDAubWF0Y2goL0VkZ2VcXC8oXFxkKykvKSl8fGIwWzFdPj03NCkmJihiMD1YMC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLykpJiYodzA9K2IwWzFdKTt2YXIgdDE9dzAsbjE9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhUzAoKGZ1bmN0aW9uKCl7dmFyIGU9U3ltYm9sKCk7cmV0dXJuIVN0cmluZyhlKXx8IShPYmplY3QoZSlpbnN0YW5jZW9mIFN5bWJvbCl8fCFTeW1ib2wuc2hhbSYmdDEmJnQxPDQxfSkpLHIxPW4xJiYhU3ltYm9sLnNoYW0mJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IsbzE9RDAuT2JqZWN0LGkxPXIxP2Z1bmN0aW9uKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfTpmdW5jdGlvbihlKXt2YXIgdD1LMChcIlN5bWJvbFwiKTtyZXR1cm4gVzAodCkmJlkwKHQucHJvdG90eXBlLG8xKGUpKX0sYTE9RDAuU3RyaW5nLHUxPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gYTEoZSl9Y2F0Y2goZSl7cmV0dXJuXCJPYmplY3RcIn19LHMxPUQwLlR5cGVFcnJvcixsMT1mdW5jdGlvbihlKXtpZihXMChlKSlyZXR1cm4gZTt0aHJvdyBzMSh1MShlKStcIiBpcyBub3QgYSBmdW5jdGlvblwiKX0sYzE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lW3RdO3JldHVybiBudWxsPT1uP3ZvaWQgMDpsMShuKX0sZjE9RDAuVHlwZUVycm9yLGQxPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxwMT1mdW5jdGlvbihlLHQpe3RyeXtkMShEMCxlLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoKG4pe0QwW2VdPXR9cmV0dXJuIHR9LGgxPUQwW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdfHxwMShcIl9fY29yZS1qc19zaGFyZWRfX1wiLHt9KSxnMT1tMCgoZnVuY3Rpb24oZSl7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBoMVtlXXx8KGgxW2VdPXZvaWQgMCE9PXQ/dDp7fSl9KShcInZlcnNpb25zXCIsW10pLnB1c2goe3ZlcnNpb246XCIzLjE5LjNcIixtb2RlOlwiZ2xvYmFsXCIsY29weXJpZ2h0OlwiwqkgMjAyMSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KVwifSl9KSksdjE9RDAuT2JqZWN0LHkxPWZ1bmN0aW9uKGUpe3JldHVybiB2MShWMChlKSl9LG0xPU4wKHt9Lmhhc093blByb3BlcnR5KSxiMT1PYmplY3QuaGFzT3dufHxmdW5jdGlvbihlLHQpe3JldHVybiBtMSh5MShlKSx0KX0sdzE9MCxFMT1NYXRoLnJhbmRvbSgpLEQxPU4wKDEuLnRvU3RyaW5nKSxTMT1mdW5jdGlvbihlKXtyZXR1cm5cIlN5bWJvbChcIisodm9pZCAwPT09ZT9cIlwiOmUpK1wiKV9cIitEMSgrK3cxK0UxLDM2KX0seDE9ZzEoXCJ3a3NcIiksQzE9RDAuU3ltYm9sLEExPUMxJiZDMS5mb3IsTzE9cjE/QzE6QzEmJkMxLndpdGhvdXRTZXR0ZXJ8fFMxLGsxPWZ1bmN0aW9uKGUpe2lmKCFiMSh4MSxlKXx8IW4xJiZcInN0cmluZ1wiIT10eXBlb2YgeDFbZV0pe3ZhciB0PVwiU3ltYm9sLlwiK2U7bjEmJmIxKEMxLGUpP3gxW2VdPUMxW2VdOngxW2VdPXIxJiZBMT9BMSh0KTpPMSh0KX1yZXR1cm4geDFbZV19LEIxPUQwLlR5cGVFcnJvcixGMT1rMShcInRvUHJpbWl0aXZlXCIpLFQxPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoIUcwKGUpfHxpMShlKSlyZXR1cm4gZTt2YXIgbixyPWMxKGUsRjEpO2lmKHIpe2lmKHZvaWQgMD09PXQmJih0PVwiZGVmYXVsdFwiKSxuPUEwKHIsZSx0KSwhRzAobil8fGkxKG4pKXJldHVybiBuO3Rocm93IEIxKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfXJldHVybiB2b2lkIDA9PT10JiYodD1cIm51bWJlclwiKSxmdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYoXCJzdHJpbmdcIj09PXQmJlcwKG49ZS50b1N0cmluZykmJiFHMChyPUEwKG4sZSkpKXJldHVybiByO2lmKFcwKG49ZS52YWx1ZU9mKSYmIUcwKHI9QTAobixlKSkpcmV0dXJuIHI7aWYoXCJzdHJpbmdcIiE9PXQmJlcwKG49ZS50b1N0cmluZykmJiFHMChyPUEwKG4sZSkpKXJldHVybiByO3Rocm93IGYxKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfShlLHQpfShlLFwic3RyaW5nXCIpO3JldHVybiBpMSh0KT90OnQrXCJcIn0sXzE9RDAuZG9jdW1lbnQsUDE9RzAoXzEpJiZHMChfMS5jcmVhdGVFbGVtZW50KSxqMT1mdW5jdGlvbihlKXtyZXR1cm4gUDE/XzEuY3JlYXRlRWxlbWVudChlKTp7fX0sTjE9IXgwJiYhUzAoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShqMShcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKSxJMT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEwxPXtmOngwP0kxOmZ1bmN0aW9uKGUsdCl7aWYoZT1VMChlKSx0PVQxKHQpLE4xKXRyeXtyZXR1cm4gSTEoZSx0KX1jYXRjaChlKXt9aWYoYjEoZSx0KSlyZXR1cm4gRjAoIUEwKEIwLmYsZSx0KSxlW3RdKX19LFIxPUQwLlN0cmluZyxNMT1EMC5UeXBlRXJyb3IsejE9ZnVuY3Rpb24oZSl7aWYoRzAoZSkpcmV0dXJuIGU7dGhyb3cgTTEoUjEoZSkrXCIgaXMgbm90IGFuIG9iamVjdFwiKX0sJDE9RDAuVHlwZUVycm9yLEgxPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWMT17Zjp4MD9IMTpmdW5jdGlvbihlLHQsbil7aWYoejEoZSksdD1UMSh0KSx6MShuKSxOMSl0cnl7cmV0dXJuIEgxKGUsdCxuKX1jYXRjaChlKXt9aWYoXCJnZXRcImluIG58fFwic2V0XCJpbiBuKXRocm93ICQxKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWRcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gbiYmKGVbdF09bi52YWx1ZSksZX19LFUxPXgwP2Z1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVjEuZihlLHQsRjAoMSxuKSl9OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZVt0XT1uLGV9LFcxPU4wKEZ1bmN0aW9uLnRvU3RyaW5nKTtXMChoMS5pbnNwZWN0U291cmNlKXx8KGgxLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIFcxKGUpfSk7dmFyIEcxLHExLEsxLFkxPWgxLmluc3BlY3RTb3VyY2UsWDE9RDAuV2Vha01hcCxaMT1XMChYMSkmJi9uYXRpdmUgY29kZS8udGVzdChZMShYMSkpLEoxPWcxKFwia2V5c1wiKSxRMT1mdW5jdGlvbihlKXtyZXR1cm4gSjFbZV18fChKMVtlXT1TMShlKSl9LGUyPXt9LHQyPUQwLlR5cGVFcnJvcixuMj1EMC5XZWFrTWFwO2lmKFoxfHxoMS5zdGF0ZSl7dmFyIHIyPWgxLnN0YXRlfHwoaDEuc3RhdGU9bmV3IG4yKSxvMj1OMChyMi5nZXQpLGkyPU4wKHIyLmhhcyksYTI9TjAocjIuc2V0KTtHMT1mdW5jdGlvbihlLHQpe2lmKGkyKHIyLGUpKXRocm93IG5ldyB0MihcIk9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkXCIpO3JldHVybiB0LmZhY2FkZT1lLGEyKHIyLGUsdCksdH0scTE9ZnVuY3Rpb24oZSl7cmV0dXJuIG8yKHIyLGUpfHx7fX0sSzE9ZnVuY3Rpb24oZSl7cmV0dXJuIGkyKHIyLGUpfX1lbHNle3ZhciB1Mj1RMShcInN0YXRlXCIpO2UyW3UyXT0hMCxHMT1mdW5jdGlvbihlLHQpe2lmKGIxKGUsdTIpKXRocm93IG5ldyB0MihcIk9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkXCIpO3JldHVybiB0LmZhY2FkZT1lLFUxKGUsdTIsdCksdH0scTE9ZnVuY3Rpb24oZSl7cmV0dXJuIGIxKGUsdTIpP2VbdTJdOnt9fSxLMT1mdW5jdGlvbihlKXtyZXR1cm4gYjEoZSx1Mil9fXZhciBzMj17c2V0OkcxLGdldDpxMSxoYXM6SzEsZW5mb3JjZTpmdW5jdGlvbihlKXtyZXR1cm4gSzEoZSk/cTEoZSk6RzEoZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG47aWYoIUcwKHQpfHwobj1xMSh0KSkudHlwZSE9PWUpdGhyb3cgdDIoXCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsIFwiK2UrXCIgcmVxdWlyZWRcIik7cmV0dXJuIG59fX0sbDI9RnVuY3Rpb24ucHJvdG90eXBlLGMyPXgwJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGYyPWIxKGwyLFwibmFtZVwiKSxkMj17RVhJU1RTOmYyLFBST1BFUjpmMiYmXCJzb21ldGhpbmdcIj09PWZ1bmN0aW9uKCl7fS5uYW1lLENPTkZJR1VSQUJMRTpmMiYmKCF4MHx8eDAmJmMyKGwyLFwibmFtZVwiKS5jb25maWd1cmFibGUpfSxwMj1tMCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZDIuQ09ORklHVVJBQkxFLG49czIuZ2V0LHI9czIuZW5mb3JjZSxvPVN0cmluZyhTdHJpbmcpLnNwbGl0KFwiU3RyaW5nXCIpOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSxuLGksYSl7dmFyIHUscz0hIWEmJiEhYS51bnNhZmUsbD0hIWEmJiEhYS5lbnVtZXJhYmxlLGM9ISFhJiYhIWEubm9UYXJnZXRHZXQsZj1hJiZ2b2lkIDAhPT1hLm5hbWU/YS5uYW1lOm47VzAoaSkmJihcIlN5bWJvbChcIj09PVN0cmluZyhmKS5zbGljZSgwLDcpJiYoZj1cIltcIitTdHJpbmcoZikucmVwbGFjZSgvXlN5bWJvbFxcKChbXildKilcXCkvLFwiJDFcIikrXCJdXCIpLCghYjEoaSxcIm5hbWVcIil8fHQmJmkubmFtZSE9PWYpJiZVMShpLFwibmFtZVwiLGYpLCh1PXIoaSkpLnNvdXJjZXx8KHUuc291cmNlPW8uam9pbihcInN0cmluZ1wiPT10eXBlb2YgZj9mOlwiXCIpKSksZSE9PUQwPyhzPyFjJiZlW25dJiYobD0hMCk6ZGVsZXRlIGVbbl0sbD9lW25dPWk6VTEoZSxuLGkpKTpsP2Vbbl09aTpwMShuLGkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLFwidG9TdHJpbmdcIiwoZnVuY3Rpb24oKXtyZXR1cm4gVzAodGhpcykmJm4odGhpcykuc291cmNlfHxZMSh0aGlzKX0pKX0pKSxoMj1NYXRoLmNlaWwsZzI9TWF0aC5mbG9vcix2Mj1mdW5jdGlvbihlKXt2YXIgdD0rZTtyZXR1cm4gdCE9dHx8MD09PXQ/MDoodD4wP2cyOmgyKSh0KX0seTI9TWF0aC5tYXgsbTI9TWF0aC5taW4sYjI9ZnVuY3Rpb24oZSx0KXt2YXIgbj12MihlKTtyZXR1cm4gbjwwP3kyKG4rdCwwKTptMihuLHQpfSx3Mj1NYXRoLm1pbixFMj1mdW5jdGlvbihlKXtyZXR1cm4gZT4wP3cyKHYyKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9LEQyPWZ1bmN0aW9uKGUpe3JldHVybiBFMihlLmxlbmd0aCl9LFMyPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7dmFyIG8saT1VMCh0KSxhPUQyKGkpLHU9YjIocixhKTtpZihlJiZuIT1uKXtmb3IoO2E+dTspaWYoKG89aVt1KytdKSE9bylyZXR1cm4hMH1lbHNlIGZvcig7YT51O3UrKylpZigoZXx8dSBpbiBpKSYmaVt1XT09PW4pcmV0dXJuIGV8fHV8fDA7cmV0dXJuIWUmJi0xfX0seDI9KFMyKCEwKSxTMighMSkpLEMyPU4wKFtdLnB1c2gpLEEyPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1VMChlKSxvPTAsaT1bXTtmb3IobiBpbiByKSFiMShlMixuKSYmYjEocixuKSYmQzIoaSxuKTtmb3IoO3QubGVuZ3RoPm87KWIxKHIsbj10W28rK10pJiYofngyKGksbil8fEMyKGksbikpO3JldHVybiBpfSxPMj1bXCJjb25zdHJ1Y3RvclwiLFwiaGFzT3duUHJvcGVydHlcIixcImlzUHJvdG90eXBlT2ZcIixcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsXCJ0b0xvY2FsZVN0cmluZ1wiLFwidG9TdHJpbmdcIixcInZhbHVlT2ZcIl0sazI9TzIuY29uY2F0KFwibGVuZ3RoXCIsXCJwcm90b3R5cGVcIiksQjI9e2Y6T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3JldHVybiBBMihlLGsyKX19LEYyPXtmOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LFQyPU4wKFtdLmNvbmNhdCksXzI9SzAoXCJSZWZsZWN0XCIsXCJvd25LZXlzXCIpfHxmdW5jdGlvbihlKXt2YXIgdD1CMi5mKHoxKGUpKSxuPUYyLmY7cmV0dXJuIG4/VDIodCxuKGUpKTp0fSxQMj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1fMih0KSxyPVYxLmYsbz1MMS5mLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXTtiMShlLGEpfHxyKGUsYSxvKHQsYSkpfX0sajI9LyN8XFwucHJvdG90eXBlXFwuLyxOMj1mdW5jdGlvbihlLHQpe3ZhciBuPUwyW0kyKGUpXTtyZXR1cm4gbj09TTJ8fG4hPVIyJiYoVzAodCk/UzAodCk6ISF0KX0sSTI9TjIubm9ybWFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZShqMixcIi5cIikudG9Mb3dlckNhc2UoKX0sTDI9TjIuZGF0YT17fSxSMj1OMi5OQVRJVkU9XCJOXCIsTTI9TjIuUE9MWUZJTEw9XCJQXCIsejI9TjIsJDI9TDEuZixIMj1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxpLGEsdT1lLnRhcmdldCxzPWUuZ2xvYmFsLGw9ZS5zdGF0O2lmKG49cz9EMDpsP0QwW3VdfHxwMSh1LHt9KTooRDBbdV18fHt9KS5wcm90b3R5cGUpZm9yKHIgaW4gdCl7aWYoaT10W3JdLG89ZS5ub1RhcmdldEdldD8oYT0kMihuLHIpKSYmYS52YWx1ZTpuW3JdLCF6MihzP3I6dSsobD9cIi5cIjpcIiNcIikrcixlLmZvcmNlZCkmJnZvaWQgMCE9PW8pe2lmKHR5cGVvZiBpPT10eXBlb2Ygbyljb250aW51ZTtQMihpLG8pfShlLnNoYW18fG8mJm8uc2hhbSkmJlUxKGksXCJzaGFtXCIsITApLHAyKG4scixpLGUpfX0sVjI9e307VjJbazEoXCJ0b1N0cmluZ1RhZ1wiKV09XCJ6XCI7dmFyIFUyPVwiW29iamVjdCB6XVwiPT09U3RyaW5nKFYyKSxXMj1rMShcInRvU3RyaW5nVGFnXCIpLEcyPUQwLk9iamVjdCxxMj1cIkFyZ3VtZW50c1wiPT1SMChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpLEsyPVUyP1IwOmZ1bmN0aW9uKGUpe3ZhciB0LG4scjtyZXR1cm4gdm9pZCAwPT09ZT9cIlVuZGVmaW5lZFwiOm51bGw9PT1lP1wiTnVsbFwiOlwic3RyaW5nXCI9PXR5cGVvZihuPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoKGUpe319KHQ9RzIoZSksVzIpKT9uOnEyP1IwKHQpOlwiT2JqZWN0XCI9PShyPVIwKHQpKSYmVzAodC5jYWxsZWUpP1wiQXJndW1lbnRzXCI6cn0sWTI9RDAuU3RyaW5nLFgyPWZ1bmN0aW9uKGUpe2lmKFwiU3ltYm9sXCI9PT1LMihlKSl0aHJvdyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZ1wiKTtyZXR1cm4gWTIoZSl9LFoyPS9cIi9nLEoyPU4wKFwiXCIucmVwbGFjZSk7SDIoe3RhcmdldDpcIlN0cmluZ1wiLHByb3RvOiEwLGZvcmNlZDooXCJhbmNob3JcIixTMCgoZnVuY3Rpb24oKXt2YXIgZT1cIlwiLmFuY2hvcignXCInKTtyZXR1cm4gZSE9PWUudG9Mb3dlckNhc2UoKXx8ZS5zcGxpdCgnXCInKS5sZW5ndGg+M30pKSl9LHthbmNob3I6ZnVuY3Rpb24oZSl7cmV0dXJuXCJhXCIsXCJuYW1lXCIsdD1lLG49WDIoVjAodGhpcykpLHI9XCI8YVwiLChyKz0nIG5hbWU9XCInK0oyKFgyKHQpLFoyLFwiJnF1b3Q7XCIpKydcIicpK1wiPlwiK24rXCI8L2E+XCI7dmFyIHQsbixyfX0pO3ZhciBRMixlND1mdW5jdGlvbigpe3ZhciBlPXoxKHRoaXMpLHQ9XCJcIjtyZXR1cm4gZS5nbG9iYWwmJih0Kz1cImdcIiksZS5pZ25vcmVDYXNlJiYodCs9XCJpXCIpLGUubXVsdGlsaW5lJiYodCs9XCJtXCIpLGUuZG90QWxsJiYodCs9XCJzXCIpLGUudW5pY29kZSYmKHQrPVwidVwiKSxlLnN0aWNreSYmKHQrPVwieVwiKSx0fSx0ND1EMC5SZWdFeHAsbjQ9UzAoKGZ1bmN0aW9uKCl7dmFyIGU9dDQoXCJhXCIsXCJ5XCIpO3JldHVybiBlLmxhc3RJbmRleD0yLG51bGwhPWUuZXhlYyhcImFiY2RcIil9KSkscjQ9bjR8fFMwKChmdW5jdGlvbigpe3JldHVybiF0NChcImFcIixcInlcIikuc3RpY2t5fSkpLG80PXtCUk9LRU5fQ0FSRVQ6bjR8fFMwKChmdW5jdGlvbigpe3ZhciBlPXQ0KFwiXnJcIixcImd5XCIpO3JldHVybiBlLmxhc3RJbmRleD0yLG51bGwhPWUuZXhlYyhcInN0clwiKX0pKSxNSVNTRURfU1RJQ0tZOnI0LFVOU1VQUE9SVEVEX1k6bjR9LGk0PU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXtyZXR1cm4gQTIoZSxPMil9LGE0PXgwP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUsdCl7ejEoZSk7Zm9yKHZhciBuLHI9VTAodCksbz1pNCh0KSxpPW8ubGVuZ3RoLGE9MDtpPmE7KVYxLmYoZSxuPW9bYSsrXSxyW25dKTtyZXR1cm4gZX0sdTQ9SzAoXCJkb2N1bWVudFwiLFwiZG9jdW1lbnRFbGVtZW50XCIpLHM0PVExKFwiSUVfUFJPVE9cIiksbDQ9ZnVuY3Rpb24oKXt9LGM0PWZ1bmN0aW9uKGUpe3JldHVyblwiPHNjcmlwdD5cIitlK1wiPFxcL3NjcmlwdD5cIn0sZjQ9ZnVuY3Rpb24oZSl7ZS53cml0ZShjNChcIlwiKSksZS5jbG9zZSgpO3ZhciB0PWUucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gZT1udWxsLHR9LGQ0PWZ1bmN0aW9uKCl7dHJ5e1EyPW5ldyBBY3RpdmVYT2JqZWN0KFwiaHRtbGZpbGVcIil9Y2F0Y2goZSl7fXZhciBlLHQ7ZDQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmUTI/ZjQoUTIpOigodD1qMShcImlmcmFtZVwiKSkuc3R5bGUuZGlzcGxheT1cIm5vbmVcIix1NC5hcHBlbmRDaGlsZCh0KSx0LnNyYz1TdHJpbmcoXCJqYXZhc2NyaXB0OlwiKSwoZT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxlLndyaXRlKGM0KFwiZG9jdW1lbnQuRj1PYmplY3RcIikpLGUuY2xvc2UoKSxlLkYpOmY0KFEyKTtmb3IodmFyIG49TzIubGVuZ3RoO24tLTspZGVsZXRlIGQ0LnByb3RvdHlwZVtPMltuXV07cmV0dXJuIGQ0KCl9O2UyW3M0XT0hMDt2YXIgcDQsaDQsZzQ9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PWU/KGw0LnByb3RvdHlwZT16MShlKSxuPW5ldyBsNCxsNC5wcm90b3R5cGU9bnVsbCxuW3M0XT1lKTpuPWQ0KCksdm9pZCAwPT09dD9uOmE0KG4sdCl9LHY0PUQwLlJlZ0V4cCx5ND1TMCgoZnVuY3Rpb24oKXt2YXIgZT12NChcIi5cIixcInNcIik7cmV0dXJuIShlLmRvdEFsbCYmZS5leGVjKFwiXFxuXCIpJiZcInNcIj09PWUuZmxhZ3MpfSkpLG00PUQwLlJlZ0V4cCxiND1TMCgoZnVuY3Rpb24oKXt2YXIgZT1tNChcIig/PGE+YilcIixcImdcIik7cmV0dXJuXCJiXCIhPT1lLmV4ZWMoXCJiXCIpLmdyb3Vwcy5hfHxcImJjXCIhPT1cImJcIi5yZXBsYWNlKGUsXCIkPGE+Y1wiKX0pKSx3ND1zMi5nZXQsRTQ9ZzEoXCJuYXRpdmUtc3RyaW5nLXJlcGxhY2VcIixTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLEQ0PVJlZ0V4cC5wcm90b3R5cGUuZXhlYyxTND1ENCx4ND1OMChcIlwiLmNoYXJBdCksQzQ9TjAoXCJcIi5pbmRleE9mKSxBND1OMChcIlwiLnJlcGxhY2UpLE80PU4wKFwiXCIuc2xpY2UpLGs0PShoND0vYiovZyxBMChENCxwND0vYS8sXCJhXCIpLEEwKEQ0LGg0LFwiYVwiKSwwIT09cDQubGFzdEluZGV4fHwwIT09aDQubGFzdEluZGV4KSxCND1vNC5CUk9LRU5fQ0FSRVQsRjQ9dm9pZCAwIT09LygpPz8vLmV4ZWMoXCJcIilbMV07KGs0fHxGNHx8QjR8fHk0fHxiNCkmJihTND1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxpLGEsdSxzPXRoaXMsbD13NChzKSxjPVgyKGUpLGY9bC5yYXc7aWYoZilyZXR1cm4gZi5sYXN0SW5kZXg9cy5sYXN0SW5kZXgsdD1BMChTNCxmLGMpLHMubGFzdEluZGV4PWYubGFzdEluZGV4LHQ7dmFyIGQ9bC5ncm91cHMscD1CNCYmcy5zdGlja3ksaD1BMChlNCxzKSxnPXMuc291cmNlLHY9MCx5PWM7aWYocCYmKGg9QTQoaCxcInlcIixcIlwiKSwtMT09PUM0KGgsXCJnXCIpJiYoaCs9XCJnXCIpLHk9TzQoYyxzLmxhc3RJbmRleCkscy5sYXN0SW5kZXg+MCYmKCFzLm11bHRpbGluZXx8cy5tdWx0aWxpbmUmJlwiXFxuXCIhPT14NChjLHMubGFzdEluZGV4LTEpKSYmKGc9XCIoPzogXCIrZytcIilcIix5PVwiIFwiK3ksdisrKSxuPW5ldyBSZWdFeHAoXCJeKD86XCIrZytcIilcIixoKSksRjQmJihuPW5ldyBSZWdFeHAoXCJeXCIrZytcIiQoPyFcXFxccylcIixoKSksazQmJihyPXMubGFzdEluZGV4KSxvPUEwKEQ0LHA/bjpzLHkpLHA/bz8oby5pbnB1dD1PNChvLmlucHV0LHYpLG9bMF09TzQob1swXSx2KSxvLmluZGV4PXMubGFzdEluZGV4LHMubGFzdEluZGV4Kz1vWzBdLmxlbmd0aCk6cy5sYXN0SW5kZXg9MDprNCYmbyYmKHMubGFzdEluZGV4PXMuZ2xvYmFsP28uaW5kZXgrb1swXS5sZW5ndGg6ciksRjQmJm8mJm8ubGVuZ3RoPjEmJkEwKEU0LG9bMF0sbiwoZnVuY3Rpb24oKXtmb3IoaT0xO2k8YXJndW1lbnRzLmxlbmd0aC0yO2krKyl2b2lkIDA9PT1hcmd1bWVudHNbaV0mJihvW2ldPXZvaWQgMCl9KSksbyYmZClmb3Ioby5ncm91cHM9YT1nNChudWxsKSxpPTA7aTxkLmxlbmd0aDtpKyspYVsodT1kW2ldKVswXV09b1t1WzFdXTtyZXR1cm4gb30pO3ZhciBUND1TNDtIMih7dGFyZ2V0OlwiUmVnRXhwXCIscHJvdG86ITAsZm9yY2VkOi8uLy5leGVjIT09VDR9LHtleGVjOlQ0fSk7dmFyIF80PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVyblwiQXJyYXlcIj09UjAoZSl9LFA0PWZ1bmN0aW9uKCl7fSxqND1bXSxOND1LMChcIlJlZmxlY3RcIixcImNvbnN0cnVjdFwiKSxJND0vXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvLEw0PU4wKEk0LmV4ZWMpLFI0PSFJNC5leGVjKFA0KSxNND1mdW5jdGlvbihlKXtpZighVzAoZSkpcmV0dXJuITE7dHJ5e3JldHVybiBONChQNCxqNCxlKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19LHo0PSFONHx8UzAoKGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIE00KE00LmNhbGwpfHwhTTQoT2JqZWN0KXx8IU00KChmdW5jdGlvbigpe2U9ITB9KSl8fGV9KSk/ZnVuY3Rpb24oZSl7aWYoIVcwKGUpKXJldHVybiExO3N3aXRjaChLMihlKSl7Y2FzZVwiQXN5bmNGdW5jdGlvblwiOmNhc2VcIkdlbmVyYXRvckZ1bmN0aW9uXCI6Y2FzZVwiQXN5bmNHZW5lcmF0b3JGdW5jdGlvblwiOnJldHVybiExfXJldHVybiBSNHx8ISFMNChJNCxZMShlKSl9Ok00LCQ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1UMSh0KTtyIGluIGU/VjEuZihlLHIsRjAoMCxuKSk6ZVtyXT1ufSxIND1rMShcInNwZWNpZXNcIiksVjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQxPj01MXx8IVMwKChmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybih0LmNvbnN0cnVjdG9yPXt9KVtINF09ZnVuY3Rpb24oKXtyZXR1cm57Zm9vOjF9fSwxIT09dFtlXShCb29sZWFuKS5mb299KSl9LFU0PU4wKFtdLnNsaWNlKSxXND1WNChcInNsaWNlXCIpLEc0PWsxKFwic3BlY2llc1wiKSxxND1EMC5BcnJheSxLND1NYXRoLm1heDtmdW5jdGlvbiBZNChlLHQpe3ZhciBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiBlO3ZhciByLG8saT1uLmNhbGwoZSksYT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09dHx8dC0tID4wKSYmIShyPWkubmV4dCgpKS5kb25lOylhLnB1c2goci52YWx1ZSl9Y2F0Y2goZSl7bz17ZXJyb3I6ZX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKG49aS5yZXR1cm4pJiZuLmNhbGwoaSl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybiBhfWZ1bmN0aW9uIFg0KGUpe3ZhciB0PWUuc2VsZWN0aW9uO2lmKG51bGw9PXQpcmV0dXJuITE7dmFyIG49WTQoQmYubm9kZXMoZSx7bWF0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFFPLmNoZWNrTm9kZVR5cGUoZSxcInRhYmxlLWNlbGxcIil9fSksMSlbMF07aWYobil7dmFyIHI9WTQobiwyKVsxXSxvPUJmLnN0YXJ0KGUscik7aWYoVmYuZXF1YWxzKHQuYW5jaG9yLG8pKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFo0KGUsdCl7dmFyIG4scixvPUJmLm5vZGVzKGUse2F0OnQsbWF0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuXCJ0YWJsZVwiPT09UU8uZ2V0Tm9kZVR5cGUoZSl9fSksaT0hMTt0cnl7Zm9yKHZhciBhPVxuLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5mdW5jdGlvbihlKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixuPXQmJmVbdF0scj0wO2lmKG4pcmV0dXJuIG4uY2FsbChlKTtpZihlJiZcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSYmcj49ZS5sZW5ndGgmJihlPXZvaWQgMCkse3ZhbHVlOmUmJmVbcisrXSxkb25lOiFlfX19O3Rocm93IG5ldyBUeXBlRXJyb3IodD9cIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCI6XCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpfShvKSx1PWEubmV4dCgpOyF1LmRvbmU7dT1hLm5leHQoKSl1LnZhbHVlLGk9ITB9Y2F0Y2goZSl7bj17ZXJyb3I6ZX19ZmluYWxseXt0cnl7dSYmIXUuZG9uZSYmKHI9YS5yZXR1cm4pJiZyLmNhbGwoYSl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiBpfUgyKHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwLGZvcmNlZDohVzR9LHtzbGljZTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxpPVUwKHRoaXMpLGE9RDIoaSksdT1iMihlLGEpLHM9YjIodm9pZCAwPT09dD9hOnQsYSk7aWYoXzQoaSkmJihuPWkuY29uc3RydWN0b3IsKHo0KG4pJiYobj09PXE0fHxfNChuLnByb3RvdHlwZSkpfHxHMChuKSYmbnVsbD09PShuPW5bRzRdKSkmJihuPXZvaWQgMCksbj09PXE0fHx2b2lkIDA9PT1uKSlyZXR1cm4gVTQoaSx1LHMpO2ZvcihyPW5ldyh2b2lkIDA9PT1uP3E0Om4pKEs0KHMtdSwwKSksbz0wO3U8czt1KyssbysrKXUgaW4gaSYmJDQocixvLGlbdV0pO3JldHVybiByLmxlbmd0aD1vLHJ9fSk7dmFyIEo0PU4wKE4wLmJpbmQpLFE0PWsxKFwic3BlY2llc1wiKSxlNj1EMC5BcnJheSx0Nj1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIF80KGUpJiYodD1lLmNvbnN0cnVjdG9yLCh6NCh0KSYmKHQ9PT1lNnx8XzQodC5wcm90b3R5cGUpKXx8RzAodCkmJm51bGw9PT0odD10W1E0XSkpJiYodD12b2lkIDApKSx2b2lkIDA9PT10P2U2OnR9KGUpKSgwPT09dD8wOnQpfSxuNj1OMChbXS5wdXNoKSxyNj1mdW5jdGlvbihlKXt2YXIgdD0xPT1lLG49Mj09ZSxyPTM9PWUsbz00PT1lLGk9Nj09ZSxhPTc9PWUsdT01PT1lfHxpO3JldHVybiBmdW5jdGlvbihzLGwsYyxmKXtmb3IodmFyIGQscCxoPXkxKHMpLGc9JDAoaCksdj1mdW5jdGlvbihlLHQpe3JldHVybiBsMShlKSx2b2lkIDA9PT10P2U6SjQ/SjQoZSx0KTpmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19KGwsYykseT1EMihnKSxtPTAsYj1mfHx0Nix3PXQ/YihzLHkpOm58fGE/YihzLDApOnZvaWQgMDt5Pm07bSsrKWlmKCh1fHxtIGluIGcpJiYocD12KGQ9Z1ttXSxtLGgpLGUpKWlmKHQpd1ttXT1wO2Vsc2UgaWYocClzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZDtjYXNlIDY6cmV0dXJuIG07Y2FzZSAyOm42KHcsZCl9ZWxzZSBzd2l0Y2goZSl7Y2FzZSA0OnJldHVybiExO2Nhc2UgNzpuNih3LGQpfXJldHVybiBpPy0xOnJ8fG8/bzp3fX0sbzY9e2ZvckVhY2g6cjYoMCksbWFwOnI2KDEpLGZpbHRlcjpyNigyKSxzb21lOnI2KDMpLGV2ZXJ5OnI2KDQpLGZpbmQ6cjYoNSksZmluZEluZGV4OnI2KDYpLGZpbHRlclJlamVjdDpyNig3KX0saTY9bzYubWFwO0gyKHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwLGZvcmNlZDohVjQoXCJtYXBcIil9LHttYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIGk2KHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyIGE2PVUyP3t9LnRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuXCJbb2JqZWN0IFwiK0syKHRoaXMpK1wiXVwifTtmdW5jdGlvbiB1NihlKXt2YXIgdD1lLmNoaWxkcmVufHxbXTtyZXR1cm4gMD09PXQubGVuZ3RoP1tdOih0WzBdfHx7fSkuY2hpbGRyZW58fFtdfWZ1bmN0aW9uIHM2KGUpe3JldHVybiB1NihlKS5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuISFlLmlzSGVhZGVyfSkpfVUyfHxwMihPYmplY3QucHJvdG90eXBlLFwidG9TdHJpbmdcIixhNix7dW5zYWZlOiEwfSk7dmFyIGw2PWQyLlBST1BFUixjNj1SZWdFeHAucHJvdG90eXBlLGY2PWM2LnRvU3RyaW5nLGQ2PU4wKGU0KSxwNj1TMCgoZnVuY3Rpb24oKXtyZXR1cm5cIi9hL2JcIiE9ZjYuY2FsbCh7c291cmNlOlwiYVwiLGZsYWdzOlwiYlwifSl9KSksaDY9bDYmJlwidG9TdHJpbmdcIiE9ZjYubmFtZTsocDZ8fGg2KSYmcDIoUmVnRXhwLnByb3RvdHlwZSxcInRvU3RyaW5nXCIsKGZ1bmN0aW9uKCl7dmFyIGU9ejEodGhpcyksdD1YMihlLnNvdXJjZSksbj1lLmZsYWdzO3JldHVyblwiL1wiK3QrXCIvXCIrWDIodm9pZCAwPT09biYmWTAoYzYsZSkmJiEoXCJmbGFnc1wiaW4gYzYpP2Q2KGUpOm4pfSkse3Vuc2FmZTohMH0pO3ZhciBnNj1rMShcInVuc2NvcGFibGVzXCIpLHY2PUFycmF5LnByb3RvdHlwZTtudWxsPT12NltnNl0mJlYxLmYodjYsZzYse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpnNChudWxsKX0pO3ZhciB5Nj1vNi5maW5kLG02PSEwO1wiZmluZFwiaW5bXSYmQXJyYXkoMSkuZmluZCgoZnVuY3Rpb24oKXttNj0hMX0pKSxIMih7dGFyZ2V0OlwiQXJyYXlcIixwcm90bzohMCxmb3JjZWQ6bTZ9LHtmaW5kOmZ1bmN0aW9uKGUpe3JldHVybiB5Nih0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHY2W2c2XS5maW5kPSEwO3ZhciBiNj1GdW5jdGlvbi5wcm90b3R5cGUsdzY9YjYuYXBwbHksRTY9YjYuYmluZCxENj1iNi5jYWxsLFM2PVwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fHwoRTY/RDYuYmluZCh3Nik6ZnVuY3Rpb24oKXtyZXR1cm4gRDYuYXBwbHkodzYsYXJndW1lbnRzKX0pLHg2PWsxKFwic3BlY2llc1wiKSxDNj1SZWdFeHAucHJvdG90eXBlLEE2PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWsxKGUpLGk9IVMwKChmdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0W29dPWZ1bmN0aW9uKCl7cmV0dXJuIDd9LDchPVwiXCJbZV0odCl9KSksYT1pJiYhUzAoKGZ1bmN0aW9uKCl7dmFyIHQ9ITEsbj0vYS87cmV0dXJuXCJzcGxpdFwiPT09ZSYmKChuPXt9KS5jb25zdHJ1Y3Rvcj17fSxuLmNvbnN0cnVjdG9yW3g2XT1mdW5jdGlvbigpe3JldHVybiBufSxuLmZsYWdzPVwiXCIsbltvXT0vLi9bb10pLG4uZXhlYz1mdW5jdGlvbigpe3JldHVybiB0PSEwLG51bGx9LG5bb10oXCJcIiksIXR9KSk7aWYoIWl8fCFhfHxuKXt2YXIgdT1OMCgvLi9bb10pLHM9dChvLFwiXCJbZV0sKGZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGE9TjAoZSkscz10LmV4ZWM7cmV0dXJuIHM9PT1UNHx8cz09PUM2LmV4ZWM/aSYmIW8/e2RvbmU6ITAsdmFsdWU6dSh0LG4scil9Ontkb25lOiEwLHZhbHVlOmEobix0LHIpfTp7ZG9uZTohMX19KSk7cDIoU3RyaW5nLnByb3RvdHlwZSxlLHNbMF0pLHAyKEM2LG8sc1sxXSl9ciYmVTEoQzZbb10sXCJzaGFtXCIsITApfSxPNj1rMShcIm1hdGNoXCIpLGs2PUQwLlR5cGVFcnJvcixCNj1rMShcInNwZWNpZXNcIiksRjY9TjAoXCJcIi5jaGFyQXQpLFQ2PU4wKFwiXCIuY2hhckNvZGVBdCksXzY9TjAoXCJcIi5zbGljZSksUDY9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHIsbyxpPVgyKFYwKHQpKSxhPXYyKG4pLHU9aS5sZW5ndGg7cmV0dXJuIGE8MHx8YT49dT9lP1wiXCI6dm9pZCAwOihyPVQ2KGksYSkpPDU1Mjk2fHxyPjU2MzE5fHxhKzE9PT11fHwobz1UNihpLGErMSkpPDU2MzIwfHxvPjU3MzQzP2U/RjYoaSxhKTpyOmU/XzYoaSxhLGErMik6by01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fX0sajY9KFA2KCExKSxQNighMCkpLE42PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCsobj9qNihlLHQpLmxlbmd0aDoxKX0sSTY9RDAuQXJyYXksTDY9TWF0aC5tYXgsUjY9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1EMihlKSxvPWIyKHQsciksaT1iMih2b2lkIDA9PT1uP3I6bixyKSxhPUk2KEw2KGktbywwKSksdT0wO288aTtvKyssdSsrKSQ0KGEsdSxlW29dKTtyZXR1cm4gYS5sZW5ndGg9dSxhfSxNNj1EMC5UeXBlRXJyb3IsejY9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4ZWM7aWYoVzAobikpe3ZhciByPUEwKG4sZSx0KTtyZXR1cm4gbnVsbCE9PXImJnoxKHIpLHJ9aWYoXCJSZWdFeHBcIj09PVIwKGUpKXJldHVybiBBMChUNCxlLHQpO3Rocm93IE02KFwiUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlclwiKX0sJDY9bzQuVU5TVVBQT1JURURfWSxINj1NYXRoLm1pbixWNj1bXS5wdXNoLFU2PU4wKC8uLy5leGVjKSxXNj1OMChWNiksRzY9TjAoXCJcIi5zbGljZSk7QTYoXCJzcGxpdFwiLChmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHI9XCJjXCI9PVwiYWJiY1wiLnNwbGl0KC8oYikqLylbMV18fDQhPVwidGVzdFwiLnNwbGl0KC8oPzopLywtMSkubGVuZ3RofHwyIT1cImFiXCIuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGh8fDQhPVwiLlwiLnNwbGl0KC8oLj8pKC4/KS8pLmxlbmd0aHx8XCIuXCIuc3BsaXQoLygpKCkvKS5sZW5ndGg+MXx8XCJcIi5zcGxpdCgvLj8vKS5sZW5ndGg/ZnVuY3Rpb24oZSxuKXt2YXIgcixvLGk9WDIoVjAodGhpcykpLGE9dm9pZCAwPT09bj80Mjk0OTY3Mjk1Om4+Pj4wO2lmKDA9PT1hKXJldHVybltdO2lmKHZvaWQgMD09PWUpcmV0dXJuW2ldO2lmKCFHMChyPWUpfHwhKHZvaWQgMCE9PShvPXJbTzZdKT9vOlwiUmVnRXhwXCI9PVIwKHIpKSlyZXR1cm4gQTAodCxpLGUsYSk7Zm9yKHZhciB1LHMsbCxjPVtdLGY9KGUuaWdub3JlQ2FzZT9cImlcIjpcIlwiKSsoZS5tdWx0aWxpbmU/XCJtXCI6XCJcIikrKGUudW5pY29kZT9cInVcIjpcIlwiKSsoZS5zdGlja3k/XCJ5XCI6XCJcIiksZD0wLHA9bmV3IFJlZ0V4cChlLnNvdXJjZSxmK1wiZ1wiKTsodT1BMChUNCxwLGkpKSYmISgocz1wLmxhc3RJbmRleCk+ZCYmKFc2KGMsRzYoaSxkLHUuaW5kZXgpKSx1Lmxlbmd0aD4xJiZ1LmluZGV4PGkubGVuZ3RoJiZTNihWNixjLFI2KHUsMSkpLGw9dVswXS5sZW5ndGgsZD1zLGMubGVuZ3RoPj1hKSk7KXAubGFzdEluZGV4PT09dS5pbmRleCYmcC5sYXN0SW5kZXgrKztyZXR1cm4gZD09PWkubGVuZ3RoPyFsJiZVNihwLFwiXCIpfHxXNihjLFwiXCIpOlc2KGMsRzYoaSxkKSksYy5sZW5ndGg+YT9SNihjLDAsYSk6Y306XCIwXCIuc3BsaXQodm9pZCAwLDApLmxlbmd0aD9mdW5jdGlvbihlLG4pe3JldHVybiB2b2lkIDA9PT1lJiYwPT09bj9bXTpBMCh0LHRoaXMsZSxuKX06dCxbZnVuY3Rpb24odCxuKXt2YXIgbz1WMCh0aGlzKSxpPW51bGw9PXQ/dm9pZCAwOmMxKHQsZSk7cmV0dXJuIGk/QTAoaSx0LG8sbik6QTAocixYMihvKSx0LG4pfSxmdW5jdGlvbihlLG8pe3ZhciBpPXoxKHRoaXMpLGE9WDIoZSksdT1uKHIsaSxhLG8sciE9PXQpO2lmKHUuZG9uZSlyZXR1cm4gdS52YWx1ZTt2YXIgcz1mdW5jdGlvbihlLHQpe3ZhciBuLHI9ejEoZSkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PXJ8fG51bGw9PShuPXoxKHIpW0I2XSk/dDpmdW5jdGlvbihlKXtpZih6NChlKSlyZXR1cm4gZTt0aHJvdyBrNih1MShlKStcIiBpcyBub3QgYSBjb25zdHJ1Y3RvclwiKX0obil9KGksUmVnRXhwKSxsPWkudW5pY29kZSxjPShpLmlnbm9yZUNhc2U/XCJpXCI6XCJcIikrKGkubXVsdGlsaW5lP1wibVwiOlwiXCIpKyhpLnVuaWNvZGU/XCJ1XCI6XCJcIikrKCQ2P1wiZ1wiOlwieVwiKSxmPW5ldyBzKCQ2P1wiXig/OlwiK2kuc291cmNlK1wiKVwiOmksYyksZD12b2lkIDA9PT1vPzQyOTQ5NjcyOTU6bz4+PjA7aWYoMD09PWQpcmV0dXJuW107aWYoMD09PWEubGVuZ3RoKXJldHVybiBudWxsPT09ejYoZixhKT9bYV06W107Zm9yKHZhciBwPTAsaD0wLGc9W107aDxhLmxlbmd0aDspe2YubGFzdEluZGV4PSQ2PzA6aDt2YXIgdix5PXo2KGYsJDY/RzYoYSxoKTphKTtpZihudWxsPT09eXx8KHY9SDYoRTIoZi5sYXN0SW5kZXgrKCQ2P2g6MCkpLGEubGVuZ3RoKSk9PT1wKWg9TjYoYSxoLGwpO2Vsc2V7aWYoVzYoZyxHNihhLHAsaCkpLGcubGVuZ3RoPT09ZClyZXR1cm4gZztmb3IodmFyIG09MTttPD15Lmxlbmd0aC0xO20rKylpZihXNihnLHlbbV0pLGcubGVuZ3RoPT09ZClyZXR1cm4gZztoPXA9dn19cmV0dXJuIFc2KGcsRzYoYSxwKSksZ31dfSksISFTMCgoZnVuY3Rpb24oKXt2YXIgZT0vKD86KS8sdD1lLmV4ZWM7ZS5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgbj1cImFiXCIuc3BsaXQoZSk7cmV0dXJuIDIhPT1uLmxlbmd0aHx8XCJhXCIhPT1uWzBdfHxcImJcIiE9PW5bMV19KSksJDYpO3ZhciBxNj1cIlxcdFxcblxcdlxcZlxcciDCoOGagOKAgOKAgeKAguKAg+KAhOKAheKAhuKAh+KAiOKAieKAiuKAr+KBn+OAgFxcdTIwMjhcXHUyMDI5XFx1ZmVmZlwiLEs2PU4wKFwiXCIucmVwbGFjZSksWTY9XCJbXCIrcTYrXCJdXCIsWDY9UmVnRXhwKFwiXlwiK1k2K1k2K1wiKlwiKSxaNj1SZWdFeHAoWTYrWTYrXCIqJFwiKSxKNj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49WDIoVjAodCkpO3JldHVybiAxJmUmJihuPUs2KG4sWDYsXCJcIikpLDImZSYmKG49SzYobixaNixcIlwiKSksbn19LFE2PXtzdGFydDpKNigxKSxlbmQ6SjYoMiksdHJpbTpKNigzKX0sZTM9ZDIuUFJPUEVSLHQzPVE2LnRyaW07ZnVuY3Rpb24gbjMoZSl7cmV0dXJuIGUubGVuZ3RoP2VbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpOlwiXCJ9SDIoe3RhcmdldDpcIlN0cmluZ1wiLHByb3RvOiEwLGZvcmNlZDpmdW5jdGlvbihlKXtyZXR1cm4gUzAoKGZ1bmN0aW9uKCl7cmV0dXJuISFxNltlXSgpfHxcIuKAi8KF4aCOXCIhPT1cIuKAi8KF4aCOXCJbZV0oKXx8ZTMmJnE2W2VdLm5hbWUhPT1lfSkpfShcInRyaW1cIil9LHt0cmltOmZ1bmN0aW9uKCl7cmV0dXJuIHQzKHRoaXMpfX0pLEgyKHtnbG9iYWw6ITB9LHtnbG9iYWxUaGlzOkQwfSksYWgmJihNcC5mbi5hcHBlbmQ9YWgpLHFwJiYoTXAuZm4ub249cXApLHloJiYoTXAuZm4uZm9jdXM9eWgpLFZwJiYoTXAuZm4uYXR0cj1WcCksR3AmJihNcC5mbi52YWw9R3ApLHJoJiYoTXAuZm4uaHRtbD1yaCksV3AmJihNcC5mbi5kYXRhc2V0PVdwKSx6cCYmKE1wLmZuLmFkZENsYXNzPXpwKSwkcCYmKE1wLmZuLnJlbW92ZUNsYXNzPSRwKSxmaCYmKE1wLmZuLmNoaWxkcmVuPWZoKSx0aCYmKE1wLmZuLmVhY2g9dGgpLGNoJiYoTXAuZm4uZmluZD1jaCk7dmFyIHIzPSExLG8zPTAsaTM9MCxhMz1udWxsLHUzPW51bGwsczM9TXAoXCJib2R5XCIpO2Z1bmN0aW9uIGwzKGUpe3IzPSExLHUzPW51bGwsYTM9bnVsbCxzMy5vZmYoXCJtb3VzZW1vdmVcIixjMyksczMub2ZmKFwibW91c2V1cFwiLGwzKX1zMy5vbihcIm1vdXNlZG93blwiLChmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtpZigoXCJUSFwiPT09dC50YWdOYW1lfHxcIlREXCI9PT10LnRhZ05hbWUpJiZcImNvbC1yZXNpemVcIj09PXQuc3R5bGUuY3Vyc29yKXt0LnN0eWxlLmN1cnNvcj1cImF1dG9cIixlLnByZXZlbnREZWZhdWx0KCkscjM9ITA7dmFyIG49ZS5jbGllbnRYO28zPW47dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtpMz1yLHMzLm9uKFwibW91c2Vtb3ZlXCIsYzMpLHMzLm9uKFwibW91c2V1cFwiLGwzKX19KSk7dmFyIGMzPWVnKChmdW5jdGlvbihlKXtpZihyMyYmbnVsbCE9dTMmJm51bGwhPWEzKXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIHQ9ZS5jbGllbnRYLG49aTMrKHQtbzMpOyhuPU1hdGguZmxvb3IoMTAwKm4pLzEwMCk8MzAmJihuPTMwKSxtZC5zZXROb2Rlcyh1Myx7d2lkdGg6bi50b1N0cmluZygpfSx7YXQ6YTN9KX19KSwxMDApLGYzPXt0eXBlOlwidGFibGVcIixyZW5kZXJFbGVtOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlLHQpe2lmKGUuaXNEaXNhYmxlZCgpKXJldHVybiExO3ZhciBuPWUuc2VsZWN0aW9uO2lmKG51bGw9PW4pcmV0dXJuITA7aWYocWYuaXNDb2xsYXBzZWQobikpcmV0dXJuITA7dmFyIHI9bi5hbmNob3Isbz1uLmZvY3VzLGk9UU8uZmluZFBhdGgoZSx0KSxhPUJmLnN0YXJ0KGUsaSksdT1CZi5lbmQoZSxpKSxzPVZmLmNvbXBhcmUocix1KTw9MCYmVmYuY29tcGFyZShyLGEpPj0wLGw9VmYuY29tcGFyZShvLHUpPD0wJiZWZi5jb21wYXJlKG8sYSk+PTA7cmV0dXJuISEocyYmbCYmTWYuZXF1YWxzKHIucGF0aC5zbGljZSgwLDMpLG8ucGF0aC5zbGljZSgwLDMpKSl9KG4sZSksbz1lLndpZHRoLGk9dm9pZCAwPT09bz9cImF1dG9cIjpvLGE9UGcoXCJkaXZcIix7Y2xhc3NOYW1lOlwidGFibGUtY29udGFpbmVyXCIsXCJkYXRhLXNlbGVjdGVkXCI6UU8uaXNOb2RlU2VsZWN0ZWQobixlKSxvbjp7bW91c2Vkb3duOmZ1bmN0aW9uKHQpe2lmKFwiRElWXCI9PT10LnRhcmdldC50YWdOYW1lJiZ0LnByZXZlbnREZWZhdWx0KCksIW4uaXNEaXNhYmxlZCgpKXt2YXIgcj1RTy5maW5kUGF0aChuLGUpLG89QmYuc3RhcnQobixyKSxpPW4uc2VsZWN0aW9uO251bGwhPWk/aS5hbmNob3IucGF0aFswXSE9PXJbMF0mJm4uc2VsZWN0KG8pOm4uc2VsZWN0KG8pfX19fSxQZyhcInRhYmxlXCIse3dpZHRoOmksY29udGVudEVkaXRhYmxlOnJ9LFBnKFwiY29sZ3JvdXBcIixudWxsLHU2KGUpLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS53aWR0aDtyZXR1cm4gUGcoXCJjb2xcIix7d2lkdGg6dm9pZCAwPT09dD9cImF1dG9cIjp0fSl9KSkpLFBnKFwidGJvZHlcIixudWxsLHQpKSk7cmV0dXJuIGF9fSxkMz17dHlwZTpcInRhYmxlLXJvd1wiLHJlbmRlckVsZW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBQZyhcInRyXCIsbnVsbCx0KX19LHAzPXt0eXBlOlwidGFibGUtY2VsbFwiLHJlbmRlckVsZW06ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWZ1bmN0aW9uKGUsdCl7dmFyIG49UU8uZ2V0UGFyZW50Tm9kZShlLHQpO2lmKG51bGw9PW4pcmV0dXJuITE7dmFyIHI9UU8uZ2V0UGFyZW50Tm9kZShlLG4pO3JldHVybiBudWxsIT1yJiZ1NihyKS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZT09PXR9KSl9KG4sZSksbz1lLGk9by5jb2xTcGFuLGE9dm9pZCAwPT09aT8xOmksdT1vLnJvd1NwYW4scz12b2lkIDA9PT11PzE6dSxsPW8uaXNIZWFkZXIsYz12b2lkIDAhPT1sJiZsO2lmKCFyKXJldHVybiBQZyhcInRkXCIse2NvbFNwYW46YSxyb3dTcGFuOnN9LHQpO3ZhciBmPVBnKGM/XCJ0aFwiOlwidGRcIix7Y29sU3BhbjphLHJvd1NwYW46cyxzdHlsZTp7Ym9yZGVyUmlnaHRXaWR0aDpcIjNweFwifSxvbjp7bW91c2Vtb3ZlOmVnKChmdW5jdGlvbih0KXt2YXIgcj10aGlzLmVsbTtpZihudWxsIT1yKXt2YXIgbz1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9by5sZWZ0LGE9by53aWR0aCx1PW8udG9wLHM9by5oZWlnaHQsbD10LmNsaWVudFgsYz10LmNsaWVudFk7cjN8fChsPmkrYS01JiZsPGkrYSYmYz51JiZjPHUrcz8oci5zdHlsZS5jdXJzb3I9XCJjb2wtcmVzaXplXCIsdTM9bixhMz1RTy5maW5kUGF0aChuLGUpKTpyM3x8KHIuc3R5bGUuY3Vyc29yPVwiYXV0b1wiLHUzPW51bGwsYTM9bnVsbCkpfX0pLDEwMCl9fSx0KTtyZXR1cm4gZn19LGgzPXtzZWxlY3RvcjpcInRhYmxlXCIscHJlUGFyc2VIdG1sOmZ1bmN0aW9uKGUpe3ZhciB0PU1wKGUpO2lmKFwidGFibGVcIiE9PW4zKHQpKXJldHVybiBlO3ZhciBuPXQuZmluZChcInRib2R5XCIpO2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gZTt2YXIgcj10LmZpbmQoXCJ0clwiKTtyZXR1cm4gdC5hcHBlbmQociksbi5yZW1vdmUoKSx0WzBdfX0sZzM9bzYuZmlsdGVyO0gyKHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwLGZvcmNlZDohVjQoXCJmaWx0ZXJcIil9LHtmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGczKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyIHYzPU1hdGguZmxvb3IseTM9TjAoXCJcIi5jaGFyQXQpLG0zPU4wKFwiXCIucmVwbGFjZSksYjM9TjAoXCJcIi5zbGljZSksdzM9L1xcJChbJCYnYF18XFxkezEsMn18PFtePl0qPikvZyxFMz0vXFwkKFskJidgXXxcXGR7MSwyfSkvZyxEMz1mdW5jdGlvbihlLHQsbixyLG8saSl7dmFyIGE9bitlLmxlbmd0aCx1PXIubGVuZ3RoLHM9RTM7cmV0dXJuIHZvaWQgMCE9PW8mJihvPXkxKG8pLHM9dzMpLG0zKGkscywoZnVuY3Rpb24oaSxzKXt2YXIgbDtzd2l0Y2goeTMocywwKSl7Y2FzZVwiJFwiOnJldHVyblwiJFwiO2Nhc2VcIiZcIjpyZXR1cm4gZTtjYXNlXCJgXCI6cmV0dXJuIGIzKHQsMCxuKTtjYXNlXCInXCI6cmV0dXJuIGIzKHQsYSk7Y2FzZVwiPFwiOmw9b1tiMyhzLDEsLTEpXTticmVhaztkZWZhdWx0OnZhciBjPStzO2lmKDA9PT1jKXJldHVybiBpO2lmKGM+dSl7dmFyIGY9djMoYy8xMCk7cmV0dXJuIDA9PT1mP2k6Zjw9dT92b2lkIDA9PT1yW2YtMV0/eTMocywxKTpyW2YtMV0reTMocywxKTppfWw9cltjLTFdfXJldHVybiB2b2lkIDA9PT1sP1wiXCI6bH0pKX0sUzM9azEoXCJyZXBsYWNlXCIpLHgzPU1hdGgubWF4LEMzPU1hdGgubWluLEEzPU4wKFtdLmNvbmNhdCksTzM9TjAoW10ucHVzaCksazM9TjAoXCJcIi5pbmRleE9mKSxCMz1OMChcIlwiLnNsaWNlKSxGMz1cIiQwXCI9PT1cImFcIi5yZXBsYWNlKC8uLyxcIiQwXCIpLFQzPSEhLy4vW1MzXSYmXCJcIj09PS8uL1tTM10oXCJhXCIsXCIkMFwiKTtBNihcInJlcGxhY2VcIiwoZnVuY3Rpb24oZSx0LG4pe3ZhciByPVQzP1wiJFwiOlwiJDBcIjtyZXR1cm5bZnVuY3Rpb24oZSxuKXt2YXIgcj1WMCh0aGlzKSxvPW51bGw9PWU/dm9pZCAwOmMxKGUsUzMpO3JldHVybiBvP0EwKG8sZSxyLG4pOkEwKHQsWDIociksZSxuKX0sZnVuY3Rpb24oZSxvKXt2YXIgaT16MSh0aGlzKSxhPVgyKGUpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBvJiYtMT09PWszKG8scikmJi0xPT09azMobyxcIiQ8XCIpKXt2YXIgdT1uKHQsaSxhLG8pO2lmKHUuZG9uZSlyZXR1cm4gdS52YWx1ZX12YXIgcz1XMChvKTtzfHwobz1YMihvKSk7dmFyIGw9aS5nbG9iYWw7aWYobCl7dmFyIGM9aS51bmljb2RlO2kubGFzdEluZGV4PTB9Zm9yKHZhciBmPVtdOzspe3ZhciBkPXo2KGksYSk7aWYobnVsbD09PWQpYnJlYWs7aWYoTzMoZixkKSwhbClicmVhaztcIlwiPT09WDIoZFswXSkmJihpLmxhc3RJbmRleD1ONihhLEUyKGkubGFzdEluZGV4KSxjKSl9Zm9yKHZhciBwLGg9XCJcIixnPTAsdj0wO3Y8Zi5sZW5ndGg7disrKXtmb3IodmFyIHk9WDIoKGQ9Zlt2XSlbMF0pLG09eDMoQzModjIoZC5pbmRleCksYS5sZW5ndGgpLDApLGI9W10sdz0xO3c8ZC5sZW5ndGg7dysrKU8zKGIsdm9pZCAwPT09KHA9ZFt3XSk/cDpTdHJpbmcocCkpO3ZhciBFPWQuZ3JvdXBzO2lmKHMpe3ZhciBEPUEzKFt5XSxiLG0sYSk7dm9pZCAwIT09RSYmTzMoRCxFKTt2YXIgUz1YMihTNihvLHZvaWQgMCxEKSl9ZWxzZSBTPUQzKHksYSxtLGIsRSxvKTttPj1nJiYoaCs9QjMoYSxnLG0pK1MsZz1tK3kubGVuZ3RoKX1yZXR1cm4gaCtCMyhhLGcpfV19KSwhIVMwKChmdW5jdGlvbigpe3ZhciBlPS8uLztyZXR1cm4gZS5leGVjPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIGUuZ3JvdXBzPXthOlwiN1wifSxlfSxcIjdcIiE9PVwiXCIucmVwbGFjZShlLFwiJDxhPlwiKX0pKXx8IUYzfHxUMyk7dmFyIF8zPXtzZWxlY3RvcjpcInRkOm5vdChbZGF0YS13LWUtdHlwZV0pLHRoOm5vdChbZGF0YS13LWUtdHlwZV0pXCIscGFyc2VFbGVtSHRtbDpmdW5jdGlvbihlLHQsbil7dmFyIHI9TXAoZSk7MD09PSh0PXQuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hIWVkLmlzVGV4dChlKXx8ISFuLmlzSW5saW5lKGUpfSkpKS5sZW5ndGgmJih0PVt7dGV4dDpyLnRleHQoKS5yZXBsYWNlKC9cXHMrL2dtLFwiIFwiKX1dKTt2YXIgbz1wYXJzZUludChyLmF0dHIoXCJjb2xTcGFuXCIpfHxcIjFcIiksaT1wYXJzZUludChyLmF0dHIoXCJyb3dTcGFuXCIpfHxcIjFcIiksYT1yLmF0dHIoXCJ3aWR0aFwiKXx8XCJhdXRvXCI7cmV0dXJue3R5cGU6XCJ0YWJsZS1jZWxsXCIsaXNIZWFkZXI6XCJ0aFwiPT09bjMociksY29sU3BhbjpvLHJvd1NwYW46aSx3aWR0aDphLGNoaWxkcmVuOnR9fX0sUDM9e3NlbGVjdG9yOlwidHI6bm90KFtkYXRhLXctZS10eXBlXSlcIixwYXJzZUVsZW1IdG1sOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57dHlwZTpcInRhYmxlLXJvd1wiLGNoaWxkcmVuOnQuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm5cInRhYmxlLWNlbGxcIj09PVFPLmdldE5vZGVUeXBlKGUpfSkpfX19LGozPXtzZWxlY3RvcjpcInRhYmxlOm5vdChbZGF0YS13LWUtdHlwZV0pXCIscGFyc2VFbGVtSHRtbDpmdW5jdGlvbihlLHQsbil7dmFyIHI9TXAoZSksbz1cImF1dG9cIjtyZXR1cm5cIjEwMCVcIj09PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVwiXCIscj0oZS5hdHRyKFwic3R5bGVcIil8fFwiXCIpLnNwbGl0KFwiO1wiKSxvPXIubGVuZ3RoLGk9MDtpPG87aSsrKXt2YXIgYT1yW2ldO2lmKGEpe3ZhciB1PWEuc3BsaXQoXCI6XCIpO1wid2lkdGhcIj09PXVbMF0udHJpbSgpJiYobj11WzFdLnRyaW0oKSl9fXJldHVybiBufShyKSYmKG89XCIxMDAlXCIpLFwiMTAwJVwiPT09ci5hdHRyKFwid2lkdGhcIikmJihvPVwiMTAwJVwiKSx7dHlwZTpcInRhYmxlXCIsd2lkdGg6byxjaGlsZHJlbjp0LmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuXCJ0YWJsZS1yb3dcIj09PVFPLmdldE5vZGVUeXBlKGUpfSkpfX19LE4zPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMudGl0bGU9SFAoXCJ0YWJsZU1vZHVsZS5pbnNlcnRUYWJsZVwiKSx0aGlzLmljb25Tdmc9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTAgNjR2ODk2aDEwMjRWNjRIMHogbTM4NCA1NzZ2LTE5MmgyNTZ2MTkyaC0yNTZ6IG0yNTYgNjR2MTkyaC0yNTZ2LTE5MmgyNTZ6IG0wLTUxMnYxOTJoLTI1NlYxOTJoMjU2ek0zMjAgMTkydjE5Mkg2NFYxOTJoMjU2eiBtLTI1NiAyNTZoMjU2djE5Mkg2NHYtMTkyeiBtNjQwIDBoMjU2djE5MmgtMjU2di0xOTJ6IG0wLTY0VjE5MmgyNTZ2MTkyaC0yNTZ6TTY0IDcwNGgyNTZ2MTkySDY0di0xOTJ6IG02NDAgMTkydi0xOTJoMjU2djE5MmgtMjU2elwiPjwvcGF0aD48L3N2Zz4nLHRoaXMudGFnPVwiYnV0dG9uXCIsdGhpcy5zaG93RHJvcFBhbmVsPSEwLHRoaXMuJGNvbnRlbnQ9bnVsbH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXt9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWxlY3Rpb247cmV0dXJuIG51bGw9PXR8fCFxZi5pc0NvbGxhcHNlZCh0KXx8ISFRTy5nZXRTZWxlY3RlZEVsZW1zKGUpLnNvbWUoKGZ1bmN0aW9uKHQpe3ZhciBuPVFPLmdldE5vZGVUeXBlKHQpO3JldHVyblwicHJlXCI9PT1ufHxcInRhYmxlXCI9PT1ufHxcImxpc3QtaXRlbVwiPT09bnx8ISFlLmlzVm9pZCh0KX0pKX0sZS5wcm90b3R5cGUuZ2V0UGFuZWxDb250ZW50RWxlbT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKHRoaXMuJGNvbnRlbnQpcmV0dXJuIHRoaXMuJGNvbnRlbnRbMF07Zm9yKHZhciBuPU1wKCc8ZGl2IGNsYXNzPVwidy1lLXBhbmVsLWNvbnRlbnQtdGFibGVcIj48L2Rpdj4nKSxyPU1wKFwiPHNwYW4+MCAmdGltZXM7IDA8L3NwYW4+XCIpLG89TXAoXCI8dGFibGU+PC90YWJsZT5cIiksaT0wO2k8MTA7aSsrKXtmb3IodmFyIGE9TXAoXCI8dHI+PC90cj5cIiksdT0wO3U8MTA7dSsrKXt2YXIgcz1NcChcIjx0ZD48L3RkPlwiKTtzLmF0dHIoXCJkYXRhLXhcIix1LnRvU3RyaW5nKCkpLHMuYXR0cihcImRhdGEteVwiLGkudG9TdHJpbmcoKSksYS5hcHBlbmQocykscy5vbihcIm1vdXNlZW50ZXJcIiwoZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7aWYobnVsbCE9dCl7dmFyIG49TXAodCkuZGF0YXNldCgpLGk9bi54LGE9bi55O3JbMF0uaW5uZXJIVE1MPWkrMStcIiAmdGltZXM7IFwiKyhhKzEpLG8uY2hpbGRyZW4oKS5lYWNoKChmdW5jdGlvbihlKXtNcChlKS5jaGlsZHJlbigpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PU1wKGUpLG49dC5kYXRhc2V0KCkscj1uLngsbz1uLnk7cjw9aSYmbzw9YT90LmFkZENsYXNzKFwiYWN0aXZlXCIpOnQucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIil9KSl9KSl9fSkpLHMub24oXCJjbGlja1wiLChmdW5jdGlvbihuKXtuLnByZXZlbnREZWZhdWx0KCk7dmFyIHI9bi50YXJnZXQ7aWYobnVsbCE9cil7dmFyIG89TXAocikuZGF0YXNldCgpLGk9by54LGE9by55O3QuaW5zZXJ0VGFibGUoZSxhKzEsaSsxKX19KSl9by5hcHBlbmQoYSl9cmV0dXJuIG4uYXBwZW5kKG8pLG4uYXBwZW5kKHIpLHRoaXMuJGNvbnRlbnQ9bixuWzBdfSxlLnByb3RvdHlwZS5pbnNlcnRUYWJsZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9cGFyc2VJbnQodCwxMCksbz1wYXJzZUludChuLDEwKTtpZihyJiZvJiYhKHI8PTB8fG88PTApKXtRTy5pc1NlbGVjdGVkRW1wdHlQYXJhZ3JhcGgoZSkmJm1kLnJlbW92ZU5vZGVzKGUse21vZGU6XCJoaWdoZXN0XCJ9KTt2YXIgaT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxyPTA7cjxlO3IrKyl7Zm9yKHZhciBvPVtdLGk9MDtpPHQ7aSsrKXt2YXIgYT17dHlwZTpcInRhYmxlLWNlbGxcIixjaGlsZHJlbjpbe3RleHQ6XCJcIn1dfTswPT09ciYmKGEuaXNIZWFkZXI9ITApLG8ucHVzaChhKX1uLnB1c2goe3R5cGU6XCJ0YWJsZS1yb3dcIixjaGlsZHJlbjpvfSl9cmV0dXJue3R5cGU6XCJ0YWJsZVwiLHdpZHRoOlwiYXV0b1wiLGNoaWxkcmVuOm59fShyLG8pO21kLmluc2VydE5vZGVzKGUsaSx7bW9kZTpcImhpZ2hlc3RcIn0pfX0sZX0oKSxJMz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnRpdGxlPUhQKFwidGFibGVNb2R1bGUuZGVsZXRlVGFibGVcIiksdGhpcy5pY29uU3ZnPSc8c3ZnIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCI+PHBhdGggZD1cIk04MjYuODAzMiAzNTYuNTMxMmMtMTkuMzI4IDAtMzYuMzc3NiAxNS42OTI4LTM2LjM3NzYgMzUuMDQ2NHY1MjQuMjYyNGMwIDE5LjMyOC0xNiAzNC41Ni0zNS4zMjggMzQuNTZIMjY0LjkzNDRjLTE5LjMyOCAwLTM1LjUwNzItMTUuMzA4OC0zNS41MDcyLTM0LjU2VjM5MC4wNDE2YzAtMTkuMzI4LTE0LjE1NjgtMzUuMDQ2NC0zMy41MTA0LTM1LjA0NjRzLTMzLjUxMDQgMTUuNjkyOC0zMy41MTA0IDM1LjA0NjRWOTE1LjcxMmMwIDU3LjkzMjggNDQuNjIwOCAxMDguMjg4IDEwMi41MjggMTA4LjI4OEg3NTUuMmM1Ny45MzI4IDAgMTA4LjA4MzItNTAuNDU3NiAxMDguMDgzMi0xMDguMjg4VjM5MS40NzUyYy0wLjEwMjQtMTkuMjUxMi0xNy4xMjY0LTM0Ljk0NC0zNi40OC0zNC45NDR6XCIgcC1pZD1cIjk1NzdcIj48L3BhdGg+PHBhdGggZD1cIk00MzcuMTcxMiA3NzUuNzU2OFYzOTAuNjA0OGMwLTE5LjMyOC0xNC4xNTY4LTM1LjA0NjQtMzMuNTEwNC0zNS4wNDY0cy0zMy41MTA0IDE1LjYxNi0zMy41MTA0IDM1LjA0NjR2Mzg1LjE1MmMwIDE5LjMyOCAxNC4xNTY4IDM1LjA0NjQgMzMuNTEwNCAzNS4wNDY0czMzLjUxMDQtMTUuNzE4NCAzMy41MTA0LTM1LjA0NjR6TTY0OS43MDI0IDc3NS43NTY4VjM5MC42MDQ4YzAtMTkuMzI4LTE3LjA0OTYtMzUuMDQ2NC0zNi4zNzc2LTM1LjA0NjRzLTM2LjM3NzYgMTUuNjE2LTM2LjM3NzYgMzUuMDQ2NHYzODUuMTUyYzAgMTkuMzI4IDE3LjA0OTYgMzUuMDQ2NCAzNi4zNzc2IDM1LjA0NjRzMzYuMzc3Ni0xNS43MTg0IDM2LjM3NzYtMzUuMDQ2NHpNOTY1LjA0MzIgMjE3LjAzNjhoLTE3NC42MTc2VjE0NS41MTA0YzAtNTcuOTMyOC00Ny4yMDY0LTEwMS43Ni0xMDQuNjUyOC0xMDEuNzZoLTM1MC45NzZjLTU3LjgzMDQgMC0xMDUuMzk1MiA0My44NTI4LTEwNS4zOTUyIDEwMS43NnY3MS41MjY0SDU0Ljc4NGMtMTkuNDMwNCAwLTM1LjA0NjQgMTQuMTU2OC0zNS4wNDY0IDMzLjUxMDQgMCAxOS4zMjggMTUuNjE2IDMzLjUxMDQgMzUuMDQ2NCAzMy41MTA0aDkxMC4zNjE2YzE5LjMyOCAwIDM1LjA0NjQtMTQuMTU2OCAzNS4wNDY0LTMzLjUxMDQgMC0xOS4zNTM2LTE1LjY5MjgtMzMuNTEwNC0zNS4xNDg4LTMzLjUxMDR6IG0tMjQ3LjM3MjggMEgyOTcuMzk1MlYxNDUuNTEwNGMwLTE5LjMyOCAxOC4yMDE2LTM0Ljc2NDggMzcuNDI3Mi0zNC43NjQ4aDM1MC45NzZjMTkuMTQ4OCAwIDMxLjg3MiAxNS4xMjk2IDMxLjg3MiAzNC43NjQ4djcxLjUyNjR6XCI+PC9wYXRoPjwvc3ZnPicsdGhpcy50YWc9XCJidXR0b25cIn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuc2VsZWN0aW9ufHxudWxsPT1RTy5nZXRTZWxlY3RlZE5vZGVCeVR5cGUoZSxcInRhYmxlXCIpfSxlLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGUsdCl7dGhpcy5pc0Rpc2FibGVkKGUpfHxtZC5yZW1vdmVOb2RlcyhlLHttb2RlOlwiaGlnaGVzdFwifSl9LGV9KCksTDM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50aXRsZT1IUChcInRhYmxlTW9kdWxlLmluc2VydFJvd1wiKSx0aGlzLmljb25Tdmc9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDQ4IDEwMjRcIj48cGF0aCBkPVwiTTcwNy43ODg4IDUyMS4wMTEyaC0xNDcuNDU2di0xNDcuNDU2SDQ4OC4yNDMydjE0Ny40NTZoLTE0Ny40NTZ2NjguODEyOGgxNDcuNDU2djE0Ny40NTZoNzIuMDg5NnYtMTQ3LjQ1NmgxNDcuNDU2ek0wIDkxNy41MDRWMGgxMDQ4LjU3NnY5MTcuNTA0SDB6TTMyNy42OCA2NS41MzZINjUuNTM2djE5Ni42MDhIMzI3LjY4VjY1LjUzNnogbTMyNy42OCAwSDM5My4yMTZ2MTk2LjYwOGgyNjIuMTQ0VjY1LjUzNnogbTMyNy42OCAwaC0yNjIuMTQ0djE5Ni42MDhoMjYyLjE0NFY2NS41MzZ6IG0wIDI1OC44NjcySDY1LjUzNnY0NjIuMDI4OEg5ODMuMDRWMzI0LjQwMzJ6XCI+PC9wYXRoPjwvc3ZnPicsdGhpcy50YWc9XCJidXR0b25cIn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWxlY3Rpb247cmV0dXJuIG51bGw9PXR8fCFxZi5pc0NvbGxhcHNlZCh0KXx8bnVsbD09UU8uZ2V0U2VsZWN0ZWROb2RlQnlUeXBlKGUsXCJ0YWJsZVwiKX0sZS5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihlLHQpe2lmKCF0aGlzLmlzRGlzYWJsZWQoZSkpe3ZhciBuPVk0KEJmLm5vZGVzKGUse21hdGNoOmZ1bmN0aW9uKGUpe3JldHVybiBRTy5jaGVja05vZGVUeXBlKGUsXCJ0YWJsZS1jZWxsXCIpfSx1bml2ZXJzYWw6ITB9KSwxKSxyPVk0KG5bMF0sMiksbz1yWzBdLGk9clsxXSxhPVFPLmdldFBhcmVudE5vZGUoZSxvKSx1PShudWxsPT1hP3ZvaWQgMDphLmNoaWxkcmVuLmxlbmd0aCl8fDA7aWYoMCE9PXUpe2Zvcih2YXIgcz17dHlwZTpcInRhYmxlLXJvd1wiLGNoaWxkcmVuOltdfSxsPTA7bDx1O2wrKylzLmNoaWxkcmVuLnB1c2goe3R5cGU6XCJ0YWJsZS1jZWxsXCIsY2hpbGRyZW46W3t0ZXh0OlwiXCJ9XX0pO3ZhciBjPU1mLnBhcmVudChpKSxmPU1mLm5leHQoYyk7bWQuaW5zZXJ0Tm9kZXMoZSxzLHthdDpmfSl9fX0sZX0oKSxSMz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnRpdGxlPUhQKFwidGFibGVNb2R1bGUuZGVsZXRlUm93XCIpLHRoaXMuaWNvblN2Zz0nPHN2ZyB2aWV3Qm94PVwiMCAwIDEwNDggMTAyNFwiPjxwYXRoIGQ9XCJNOTA3LjY3MzYgNTg2LjU0NzJMNzQ3LjExMDQgNDI1Ljk4NGwxNjMuODQtMTYzLjg0LTc4LjY0MzItNzguNjQzMi0xNjMuODQgMTYzLjg0TDUwNy45MDQgMTg2Ljc3NzYgNDI5LjI2MDggMjYyLjE0NGwxNjMuODQgMTYzLjg0LTE2Ny4xMTY4IDE2Ny4xMTY4IDc4LjY0MzIgNzguNjQzMiAxNjcuMTE2OC0xNjcuMTE2OCAxNjAuNTYzMiAxNjAuNTYzMiA3NS4zNjY0LTc4LjY0MzJ6TTAgOTE3LjUwNFYwaDEwNDguNTc2djkxNy41MDRIMHogbTk4My4wNC0zMjcuNjhoLTIyLjkzNzZsLTY1LjUzNi02NS41MzZIOTgzLjA0VjMyNy42OGgtOTEuNzUwNGw2NS41MzYtNjUuNTM2aDI2LjIxNDRWNjUuNTM2SDY1LjUzNnYxOTYuNjA4aDMxNy44NDk2bDY1LjUzNiA2NS41MzZINjUuNTM2djE5Ni42MDhoMzgwLjEwODhsLTY1LjUzNiA2NS41MzZINjUuNTM2djE5Ni42MDhIOTgzLjA0di0xOTYuNjA4elwiPjwvcGF0aD48L3N2Zz4nLHRoaXMudGFnPVwiYnV0dG9uXCJ9cmV0dXJuIGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVyblwiXCJ9LGUucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiExfSxlLnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2VsZWN0aW9uO3JldHVybiBudWxsPT10fHwhcWYuaXNDb2xsYXBzZWQodCl8fG51bGw9PVFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShlLFwidGFibGUtcm93XCIpfSxlLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuaXNEaXNhYmxlZChlKSl7dmFyIG49WTQoQmYubm9kZXMoZSx7bWF0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFFPLmNoZWNrTm9kZVR5cGUoZSxcInRhYmxlLXJvd1wiKX0sdW5pdmVyc2FsOiEwfSksMSkscj1ZNChuWzBdLDIpLG89clswXSxpPXJbMV0sYT1RTy5nZXRQYXJlbnROb2RlKGUsbyk7KChudWxsPT1hP3ZvaWQgMDphLmNoaWxkcmVuLmxlbmd0aCl8fDApPD0xP21kLnJlbW92ZU5vZGVzKGUse21vZGU6XCJoaWdoZXN0XCJ9KTptZC5yZW1vdmVOb2RlcyhlLHthdDppfSl9fSxlfSgpLE0zPXtDU1NSdWxlTGlzdDowLENTU1N0eWxlRGVjbGFyYXRpb246MCxDU1NWYWx1ZUxpc3Q6MCxDbGllbnRSZWN0TGlzdDowLERPTVJlY3RMaXN0OjAsRE9NU3RyaW5nTGlzdDowLERPTVRva2VuTGlzdDoxLERhdGFUcmFuc2Zlckl0ZW1MaXN0OjAsRmlsZUxpc3Q6MCxIVE1MQWxsQ29sbGVjdGlvbjowLEhUTUxDb2xsZWN0aW9uOjAsSFRNTEZvcm1FbGVtZW50OjAsSFRNTFNlbGVjdEVsZW1lbnQ6MCxNZWRpYUxpc3Q6MCxNaW1lVHlwZUFycmF5OjAsTmFtZWROb2RlTWFwOjAsTm9kZUxpc3Q6MSxQYWludFJlcXVlc3RMaXN0OjAsUGx1Z2luOjAsUGx1Z2luQXJyYXk6MCxTVkdMZW5ndGhMaXN0OjAsU1ZHTnVtYmVyTGlzdDowLFNWR1BhdGhTZWdMaXN0OjAsU1ZHUG9pbnRMaXN0OjAsU1ZHU3RyaW5nTGlzdDowLFNWR1RyYW5zZm9ybUxpc3Q6MCxTb3VyY2VCdWZmZXJMaXN0OjAsU3R5bGVTaGVldExpc3Q6MCxUZXh0VHJhY2tDdWVMaXN0OjAsVGV4dFRyYWNrTGlzdDowLFRvdWNoTGlzdDowfSx6Mz1qMShcInNwYW5cIikuY2xhc3NMaXN0LCQzPXozJiZ6My5jb25zdHJ1Y3RvciYmejMuY29uc3RydWN0b3IucHJvdG90eXBlLEgzPSQzPT09T2JqZWN0LnByb3RvdHlwZT92b2lkIDA6JDMsVjM9bzYuZm9yRWFjaCxVMz1mdW5jdGlvbihlLHQpe3ZhciBuPVtdLmZvckVhY2g7cmV0dXJuISFuJiZTMCgoZnVuY3Rpb24oKXtuLmNhbGwobnVsbCwoZnVuY3Rpb24oKXt0aHJvdyAxfSksMSl9KSl9KCksVzM9VTM/W10uZm9yRWFjaDpmdW5jdGlvbihlKXtyZXR1cm4gVjModGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0sRzM9ZnVuY3Rpb24oZSl7aWYoZSYmZS5mb3JFYWNoIT09VzMpdHJ5e1UxKGUsXCJmb3JFYWNoXCIsVzMpfWNhdGNoKHQpe2UuZm9yRWFjaD1XM319O2Zvcih2YXIgcTMgaW4gTTMpTTNbcTNdJiZHMyhEMFtxM10mJkQwW3EzXS5wcm90b3R5cGUpO0czKEgzKTt2YXIgSzM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50aXRsZT1IUChcInRhYmxlTW9kdWxlLmluc2VydENvbFwiKSx0aGlzLmljb25Tdmc9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDQ4IDEwMjRcIj48cGF0aCBkPVwiTTMyNy42OCAxOTMuMzMxMnYxODYuNzc3NkgxNDAuOTAyNHY5MS43NTA0SDMyNy42OHYxODYuNzc3Nmg4OC40NzM2VjQ3MS44NTkyaDE5MC4wNTQ0VjM4MC4xMDg4SDQxNi4xNTM2VjE5My4zMzEyek0wIDkxNy41MDRWMGgxMDQ4LjU3NnY5MTcuNTA0SDB6TTY1NS4zNiA2NS41MzZINjUuNTM2djcyMC44OTZINjU1LjM2VjY1LjUzNnogbTMyNy42OCAwaC0yNjIuMTQ0djE5Ni42MDhoMjYyLjE0NFY2NS41MzZ6IG0wIDI2Mi4xNDRoLTI2Mi4xNDR2MTk2LjYwOGgyNjIuMTQ0VjMyNy42OHogbTAgMjYyLjE0NGgtMjYyLjE0NHYxOTYuNjA4aDI2Mi4xNDR2LTE5Ni42MDh6XCI+PC9wYXRoPjwvc3ZnPicsdGhpcy50YWc9XCJidXR0b25cIn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWxlY3Rpb247cmV0dXJuIG51bGw9PXR8fCFxZi5pc0NvbGxhcHNlZCh0KXx8bnVsbD09UU8uZ2V0U2VsZWN0ZWROb2RlQnlUeXBlKGUsXCJ0YWJsZVwiKX0sZS5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihlLHQpe2lmKCF0aGlzLmlzRGlzYWJsZWQoZSkpe3ZhciBuPVk0KEJmLm5vZGVzKGUse21hdGNoOmZ1bmN0aW9uKGUpe3JldHVybiBRTy5jaGVja05vZGVUeXBlKGUsXCJ0YWJsZS1jZWxsXCIpfSx1bml2ZXJzYWw6ITB9KSwxKSxyPVk0KG5bMF0sMiksbz1yWzBdLGk9clsxXSxhPVFPLmdldFBhcmVudE5vZGUoZSxvKTtpZihudWxsIT1hKXt2YXIgdT1RTy5nZXRQYXJlbnROb2RlKGUsYSk7bnVsbCE9dSYmKHUuY2hpbGRyZW58fFtdKS5mb3JFYWNoKChmdW5jdGlvbih0LG4pe1NmLmlzRWxlbWVudCh0KSYmKHQuY2hpbGRyZW58fFtdKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgcj1RTy5maW5kUGF0aChlLHQpO2lmKHIubGVuZ3RoPT09aS5sZW5ndGgmJnYwKHIuc2xpY2UoLTEpLGkuc2xpY2UoLTEpKSl7dmFyIG89e3R5cGU6XCJ0YWJsZS1jZWxsXCIsY2hpbGRyZW46W3t0ZXh0OlwiXCJ9XX07MD09PW4mJnM2KHUpJiYoby5pc0hlYWRlcj0hMCksbWQuaW5zZXJ0Tm9kZXMoZSxvLHthdDpyfSl9fSkpfSkpfX19LGV9KCksWTM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50aXRsZT1IUChcInRhYmxlTW9kdWxlLmRlbGV0ZUNvbFwiKSx0aGlzLmljb25Tdmc9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDQ4IDEwMjRcIj48cGF0aCBkPVwiTTMyNy42OCA1MTAuOTc2TDM5My4yMTYgNDQ1LjQ0di0xMy4xMDcyTDMyNy42OCAzNjYuNzk2OFY1MTAuOTc2eiBtMzI3LjY4LTc4LjQzODRsNjUuNTM2LTY1LjUzNlY1MDcuOTA0TDY1NS4zNiA0NDIuMzY4di05LjgzMDR6IG0zOTMuMjE2IDQ4NC45NjY0VjBIMHY5MTcuNTA0aDEwNDguNTc2eiBtLTY1LjUzNi0xMzEuMDcyaC0yNjIuMTQ0di01Mi40Mjg4bC0xMy4xMDcyIDEzLjEwNzItNTIuNDI4OC01Mi40Mjg4djkxLjc1MDRIMzkzLjIxNnYtOTEuNzUwNGwtNTIuNDI4OCA1Mi40Mjg4LTEzLjEwNzItMTMuMTA3MnY1Mi40Mjg4SDY1LjUzNlY2NS41MzZIMzI3LjY4djEyMS4yNDE2bDM2LjA0NDgtMzYuMDQ0OCAyOS40OTEyIDI5LjQ5MTJWNjIuMjU5MmgyNjIuMTQ0VjE4MC4yMjRsNDkuMTUyLTQ5LjE1MiAxNi4zODQgMTYuMzg0VjYyLjI1OTJoMjYyLjE0NFY3ODYuNDMyeiBtLTI5NC45MTItMTA4LjEzNDRsLTE2MC41NjMyLTE2MC41NjMyLTE2Ny4xMTY4IDE2Ny4xMTY4LTc4LjY0MzItNzguNjQzMiAxNjcuMTE2OC0xNjcuMTE2OEwyODguMzU4NCAyNzguNTI4bDc4LjY0MzItNzguNjQzMiAxNjAuNTYzMiAxNjAuNTYzMiAxNjMuODQtMTYzLjg0IDc4LjY0MzIgNzguNjQzMi0xNjMuODQgMTYzLjg0IDE2MC41NjMyIDE2MC41NjMyLTc4LjY0MzIgNzguNjQzMnpcIj48L3BhdGg+PC9zdmc+Jyx0aGlzLnRhZz1cImJ1dHRvblwifXJldHVybiBlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm5cIlwifSxlLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaXNEaXNhYmxlZD1mdW5jdGlvbihlKXt2YXIgdD1lLnNlbGVjdGlvbjtyZXR1cm4gbnVsbD09dHx8IXFmLmlzQ29sbGFwc2VkKHQpfHxudWxsPT1RTy5nZXRTZWxlY3RlZE5vZGVCeVR5cGUoZSxcInRhYmxlLWNlbGxcIil9LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5pc0Rpc2FibGVkKGUpKXt2YXIgbj1ZNChCZi5ub2RlcyhlLHttYXRjaDpmdW5jdGlvbihlKXtyZXR1cm4gUU8uY2hlY2tOb2RlVHlwZShlLFwidGFibGUtY2VsbFwiKX0sdW5pdmVyc2FsOiEwfSksMSkscj1ZNChuWzBdLDIpLG89clswXSxpPXJbMV0sYT1RTy5nZXRQYXJlbnROb2RlKGUsbyksdT0obnVsbD09YT92b2lkIDA6YS5jaGlsZHJlbi5sZW5ndGgpfHwwO2lmKCFhfHx1PD0xKW1kLnJlbW92ZU5vZGVzKGUse21vZGU6XCJoaWdoZXN0XCJ9KTtlbHNle3ZhciBzPVFPLmdldFBhcmVudE5vZGUoZSxhKTtudWxsIT1zJiYocy5jaGlsZHJlbnx8W10pLmZvckVhY2goKGZ1bmN0aW9uKHQpe1NmLmlzRWxlbWVudCh0KSYmKHQuY2hpbGRyZW58fFtdKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1RTy5maW5kUGF0aChlLHQpO24ubGVuZ3RoPT09aS5sZW5ndGgmJnYwKG4uc2xpY2UoLTEpLGkuc2xpY2UoLTEpKSYmbWQucmVtb3ZlTm9kZXMoZSx7YXQ6bn0pfSkpfSkpfX19LGV9KCksWDM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50aXRsZT1IUChcInRhYmxlTW9kdWxlLmhlYWRlclwiKSx0aGlzLmljb25Tdmc9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTcwNCAxMjhsLTY0IDBMMzg0IDEyOCAzMjAgMTI4IDAgMTI4bDAgMjU2IDAgNjQgMCAxOTIgMCA2NCAwIDI1NiAzMjAgMCA2NCAwIDI1NiAwIDY0IDAgMzIwIDAgMC0yNTYgMC02NEwxMDI0IDQ0OCAxMDI0IDM4NCAxMDI0IDEyOCA3MDQgMTI4ek02NDAgNjQwIDM4NCA2NDAgMzg0IDQ0OGwyNTYgMEw2NDAgNjQwek02NCA0NDhsMjU2IDAgMCAxOTJMNjQgNjQwIDY0IDQ0OHpNMzIwIDg5NiA2NCA4OTZsMC0xOTIgMjU2IDBMMzIwIDg5NnpNNjQwIDg5NiAzODQgODk2bDAtMTkyIDI1NiAwTDY0MCA4OTZ6TTk2MCA4OTZsLTI1NiAwIDAtMTkyIDI1NiAwTDk2MCA4OTZ6TTk2MCA2NDBsLTI1NiAwTDcwNCA0NDhsMjU2IDBMOTYwIDY0MHpcIj48L3BhdGg+PC9zdmc+Jyx0aGlzLnRhZz1cImJ1dHRvblwifXJldHVybiBlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD1RTy5nZXRTZWxlY3RlZE5vZGVCeVR5cGUoZSxcInRhYmxlXCIpO3JldHVybiBudWxsIT10JiZzNih0KX0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuISF0aGlzLmdldFZhbHVlKGUpfSxlLnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2VsZWN0aW9uO3JldHVybiBudWxsPT10fHwhcWYuaXNDb2xsYXBzZWQodCl8fG51bGw9PVFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShlLFwidGFibGVcIil9LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5pc0Rpc2FibGVkKGUpKXt2YXIgbj0hdCxyPVFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShlLFwidGFibGVcIik7bnVsbCE9ciYmdTYocikuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIG1kLnNldE5vZGVzKGUse2lzSGVhZGVyOm59LHthdDpRTy5maW5kUGF0aChlLHQpfSl9KSl9fSxlfSgpLFozPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMudGl0bGU9SFAoXCJ0YWJsZU1vZHVsZS53aWR0aEF1dG9cIiksdGhpcy5pY29uU3ZnPSc8c3ZnIHZpZXdCb3g9XCIwIDAgMTIyOCAxMDI0XCI+PHBhdGggZD1cIk04NjIuNTE0MzM3IDU2My4yMDA0NjFINDA0LjU4MTk5NXYxMjEuNzUzNDc4YTEzLjMxMTk4NyAxMy4zMTE5ODcgMCAwIDEtNi42NTU5OTMgMTEuNDY4Nzg5IDEwLjIzOTk5IDEwLjIzOTk5IDAgMCAxLTEyLjA4MzE4OC0xLjQzMzU5OWwtMjA0Ljc5OTc5NS0xNzkuMTk5ODIxYTEzLjcyMTU4NiAxMy43MjE1ODYgMCAwIDEgMC0yMC40Nzk5NzlsMjA0Ljc5OTc5NS0xNzkuMzAyMjIxYTEwLjIzOTk5IDEwLjIzOTk5IDAgMCAxIDEyLjE4NTU4OC0xLjUzNTk5OCAxMy4yMDk1ODcgMTMuMjA5NTg3IDAgMCAxIDYuNTUzNTkzIDExLjY3MzU4OHYxMTUuMDk3NDg1aDQ1Ny45MzIzNDJWMzE5LjY5MzUwNGExMS41NzExODggMTEuNTcxMTg4IDAgMCAxIDE4Ljg0MTU4Mi0xMC4yMzk5ODlsMjA0Ljc5OTc5NSAxNzkuMTk5ODJhMTMuNzIxNTg2IDEzLjcyMTU4NiAwIDAgMSAwIDIwLjQ3OTk4bC0yMDQuNzk5Nzk1IDE3OS4xOTk4MjFhMTAuMjM5OTkgMTAuMjM5OTkgMCAwIDEtMTIuMTg1NTg4IDEuNTM1OTk4IDEzLjMxMTk4NyAxMy4zMTE5ODcgMCAwIDEtNi42NTU5OTQtMTEuNTcxMTg4VjU2My4yMDA0NjF6TTEzNi40OTkwNjQgMTQuOTUxNDA5djk5My44OTM0MDZhMTUuMjU3NTg1IDE1LjI1NzU4NSAwIDAgMS0xNS4xNTUxODUgMTUuMDUyNzg1SDE1LjE1NTE4NUExNS4xNTUxODUgMTUuMTU1MTg1IDAgMCAxIDAgMTAwOC44NDQ4MTVWMTQuOTUxNDA5YTE1LjI1NzU4NSAxNS4yNTc1ODUgMCAwIDEgMTUuMTU1MTg1LTE1LjA1Mjc4NWgxMDYuMDg2Mjk0YTE1LjE1NTE4NSAxNS4xNTUxODUgMCAwIDEgMTUuMjU3NTg1IDE1LjE1NTE4NXpNMTIyOC43OTg3NzEgMTQuOTUxNDA5djk5My44OTM0MDZhMTUuMjU3NTg1IDE1LjI1NzU4NSAwIDAgMS0xNS4xNTUxODUgMTUuMDUyNzg1aC0xMDYuMTg4NjkzYTE1LjE1NTE4NSAxNS4xNTUxODUgMCAwIDEtMTUuMTU1MTg1LTE1LjA1Mjc4NVYxNC45NTE0MDlhMTUuMjU3NTg1IDE1LjI1NzU4NSAwIDAgMSAxNS4xNTUxODUtMTUuMDUyNzg1aDEwNi4wODYyOTNBMTUuMTU1MTg1IDE1LjE1NTE4NSAwIDAgMSAxMjI4Ljc5ODc3MSAxNS4wNTM4MDl6XCI+PC9wYXRoPjwvc3ZnPicsdGhpcy50YWc9XCJidXR0b25cIn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9UU8uZ2V0U2VsZWN0ZWROb2RlQnlUeXBlKGUsXCJ0YWJsZVwiKTtyZXR1cm4gbnVsbCE9dCYmXCIxMDAlXCI9PT10LndpZHRofSxlLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4hIXRoaXMuZ2V0VmFsdWUoZSl9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWxlY3Rpb247cmV0dXJuIG51bGw9PXR8fCFxZi5pc0NvbGxhcHNlZCh0KXx8bnVsbD09UU8uZ2V0U2VsZWN0ZWROb2RlQnlUeXBlKGUsXCJ0YWJsZVwiKX0sZS5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihlLHQpe2lmKCF0aGlzLmlzRGlzYWJsZWQoZSkpe3ZhciBuPXt3aWR0aDp0P1wiYXV0b1wiOlwiMTAwJVwifTttZC5zZXROb2RlcyhlLG4se21vZGU6XCJoaWdoZXN0XCJ9KX19LGV9KCksSjM9e3JlbmRlckVsZW1zOltmMyxkMyxwM10sZWxlbXNUb0h0bWw6W3t0eXBlOlwidGFibGVcIixlbGVtVG9IdG1sOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS53aWR0aDtyZXR1cm4nPHRhYmxlIHN0eWxlPVwid2lkdGg6ICcrKHZvaWQgMD09PW4/XCJhdXRvXCI6bikrJztcIj48dGJvZHk+Jyt0K1wiPC90Ym9keT48L3RhYmxlPlwifX0se3R5cGU6XCJ0YWJsZS1yb3dcIixlbGVtVG9IdG1sOmZ1bmN0aW9uKGUsdCl7cmV0dXJuXCI8dHI+XCIrdCtcIjwvdHI+XCJ9fSx7dHlwZTpcInRhYmxlLWNlbGxcIixlbGVtVG9IdG1sOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZSxyPW4uY29sU3BhbixvPXZvaWQgMD09PXI/MTpyLGk9bi5yb3dTcGFuLGE9dm9pZCAwPT09aT8xOmksdT1uLmlzSGVhZGVyLHM9dm9pZCAwIT09dSYmdSxsPW4ud2lkdGgsYz1zP1widGhcIjpcInRkXCI7cmV0dXJuXCI8XCIrYysnIGNvbFNwYW49XCInK28rJ1wiIHJvd1NwYW49XCInK2ErJ1wiIHdpZHRoPVwiJysodm9pZCAwPT09bD9cImF1dG9cIjpsKSsnXCI+Jyt0K1wiPC9cIitjK1wiPlwifX1dLHByZVBhcnNlSHRtbDpbaDNdLHBhcnNlRWxlbXNIdG1sOltfMyxQMyxqM10sbWVudXM6W3trZXk6XCJpbnNlcnRUYWJsZVwiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE4zfX0se2tleTpcImRlbGV0ZVRhYmxlXCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgSTN9fSx7a2V5OlwiaW5zZXJ0VGFibGVSb3dcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBMM319LHtrZXk6XCJkZWxldGVUYWJsZVJvd1wiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFIzfX0se2tleTpcImluc2VydFRhYmxlQ29sXCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgSzN9fSx7a2V5OlwiZGVsZXRlVGFibGVDb2xcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBZM319LHtrZXk6XCJ0YWJsZUhlYWRlclwiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFgzfX0se2tleTpcInRhYmxlRnVsbFdpZHRoXCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgWjN9fV0sZWRpdG9yUGx1Z2luOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5zZXJ0QnJlYWssbj1lLmRlbGV0ZUJhY2t3YXJkLHI9ZS5kZWxldGVGb3J3YXJkLG89ZS5ub3JtYWxpemVOb2RlLGk9ZS5pbnNlcnREYXRhLGE9ZS5oYW5kbGVUYWIsdT1lLnNlbGVjdEFsbCxzPWU7cmV0dXJuIHMuaW5zZXJ0QnJlYWs9ZnVuY3Rpb24oKXtudWxsPT1RTy5nZXRTZWxlY3RlZE5vZGVCeVR5cGUocyxcInRhYmxlXCIpP3QoKTpzLmluc2VydFRleHQoXCJcXG5cIil9LHMuZGVsZXRlQmFja3dhcmQ9ZnVuY3Rpb24oZSl7aWYoIVg0KHMpKXt2YXIgdD1zLnNlbGVjdGlvbjtpZih0KXt2YXIgcj1CZi5iZWZvcmUocyx0KTtpZihyKXt2YXIgbz1aNChzLHIpLGk9WjQocyx0KTtpZihvJiYhaSlyZXR1cm59fW4oZSl9fSxzLmhhbmRsZVRhYj1mdW5jdGlvbigpe3ZhciB0O2lmKFFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShzLFwidGFibGVcIikpe3ZhciBuPUJmLmFib3ZlKGUpO1FPLmNoZWNrTm9kZVR5cGUoblswXSxcInRhYmxlLWNlbGxcIikmJm1kLnNlbGVjdChlLG5bMV0pO3ZhciByPUJmLm5leHQoZSk7aWYocilyWzBdJiZyWzBdLnRleHQmJihyPW51bGwhPT0odD1CZi5hYm92ZShlLHthdDpyWzFdfSkpJiZ2b2lkIDAhPT10P3Q6ciksbWQuc2VsZWN0KGUsclsxXSk7ZWxzZXt2YXIgbz1zLmNoaWxkcmVufHxbXSxpPW8ubGVuZ3RoO2lmKFFPLmNoZWNrTm9kZVR5cGUob1tpLTFdLFwidGFibGVcIikpe3ZhciB1PVFPLmdlbkVtcHR5UGFyYWdyYXBoKCk7bWQuaW5zZXJ0Tm9kZXMocyx1LHthdDpbaV19KSxzLmhhbmRsZVRhYigpfX19ZWxzZSBhKCl9LHMuZGVsZXRlRm9yd2FyZD1mdW5jdGlvbihlKXtYNChzKXx8cihlKX0scy5ub3JtYWxpemVOb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PVk0KGUsMiksbj10WzBdLHI9dFsxXTtpZihcInRhYmxlXCIhPT1RTy5nZXROb2RlVHlwZShuKSlyZXR1cm4gbyhbbixyXSk7aWYoUU8uaXNMYXN0Tm9kZShzLG4pKXt2YXIgaT1RTy5nZW5FbXB0eVBhcmFncmFwaCgpO21kLmluc2VydE5vZGVzKHMsaSx7YXQ6W3JbMF0rMV19KX19LHMuaW5zZXJ0RGF0YT1mdW5jdGlvbihlKXtpZihudWxsIT1RTy5nZXRTZWxlY3RlZE5vZGVCeVR5cGUocyxcInRhYmxlXCIpKXt2YXIgdD1lLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpO1wiXFxuXCI9PT10fHwvPGltZ1tePl0rPi8udGVzdChlLmdldERhdGEoXCJ0ZXh0L2h0bWxcIikpP2koZSk6QmYuaW5zZXJ0VGV4dChzLHQpfWVsc2UgaShlKX0scy5zZWxlY3RBbGw9ZnVuY3Rpb24oKXt2YXIgZT1zLnNlbGVjdGlvbjtpZihudWxsIT1lKXt2YXIgdD1RTy5nZXRTZWxlY3RlZE5vZGVCeVR5cGUocyxcInRhYmxlLWNlbGxcIik7aWYobnVsbCE9dCl7dmFyIG49ZS5hbmNob3Iscj1lLmZvY3VzO2lmKE1mLmVxdWFscyhuLnBhdGguc2xpY2UoMCwzKSxyLnBhdGguc2xpY2UoMCwzKSkpaWYoMCE9PU5mLnN0cmluZyh0KS5sZW5ndGgpe3ZhciBvPVFPLmZpbmRQYXRoKHMsdCksaT17YW5jaG9yOkJmLnN0YXJ0KHMsbyksZm9jdXM6QmYuZW5kKHMsbyl9O3Muc2VsZWN0KGkpfWVsc2UgdSgpO2Vsc2UgdSgpfWVsc2UgdSgpfWVsc2UgdSgpfSxzfX07TVAoXCJlblwiLHt2aWRlb01vZHVsZTp7ZGVsZXRlOlwiRGVsZXRlXCIsdXBsb2FkVmlkZW86XCJVcGxvYWQgdmlkZW9cIixpbnNlcnRWaWRlbzpcIkluc2VydCB2aWRlb1wiLHZpZGVvU3JjOlwiVmlkZW8gc291cmNlXCIsdmlkZW9TcmNQbGFjZUhvbGRlcjpcIlZpZGVvIGZpbGUgdXJsLCBvciB0aGlyZC1wYXJ0eSA8aWZyYW1lPlwiLHZpZGVvUG9zdGVyOlwiVmlkZW8gcG9zdGVyXCIsdmlkZW9Qb3N0ZXJQbGFjZUhvbGRlcjpcIlBvc3RlciBpbWFnZSB1cmxcIixvazpcIk9rXCIsZWRpdFNpemU6XCJFZGl0IHNpemVcIix3aWR0aDpcIldpZHRoXCIsaGVpZ2h0OlwiSGVpZ2h0XCJ9fSksTVAoXCJ6aC1DTlwiLHt2aWRlb01vZHVsZTp7ZGVsZXRlOlwi5Yig6Zmk6KeG6aKRXCIsdXBsb2FkVmlkZW86XCLkuIrkvKDop4bpopFcIixpbnNlcnRWaWRlbzpcIuaPkuWFpeinhumikVwiLHZpZGVvU3JjOlwi6KeG6aKR5Zyw5Z2AXCIsdmlkZW9TcmNQbGFjZUhvbGRlcjpcIuinhumikeaWh+S7tiB1cmwg5oiW56ys5LiJ5pa5IDxpZnJhbWU+XCIsdmlkZW9Qb3N0ZXI6XCLop4bpopHlsIHpnaJcIix2aWRlb1Bvc3RlclBsYWNlSG9sZGVyOlwi5bCB6Z2i5Zu+54mHIHVybFwiLG9rOlwi56Gu5a6aXCIsZWRpdFNpemU6XCLkv67mlLnlsLrlr7hcIix3aWR0aDpcIuWuveW6plwiLGhlaWdodDpcIumrmOW6plwifX0pO1xuLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG52YXIgUTM9ZnVuY3Rpb24oKXtyZXR1cm4gUTM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSxRMy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIGU1KGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihvLGkpe2Z1bmN0aW9uIGEoZSl7dHJ5e3Moci5uZXh0KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiB1KGUpe3RyeXtzKHIudGhyb3coZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIHMoZSl7dmFyIHQ7ZS5kb25lP28oZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEsdSl9cygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfWZ1bmN0aW9uIHQ1KGUsdCl7dmFyIG4scixvLGksYT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZvWzBdKXRocm93IG9bMV07cmV0dXJuIG9bMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gaT17bmV4dDp1KDApLHRocm93OnUoMSkscmV0dXJuOnUoMil9LFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksaTtmdW5jdGlvbiB1KGkpe3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gZnVuY3Rpb24oaSl7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtmb3IoO2E7KXRyeXtpZihuPTEsciYmKG89MiZpWzBdP3IucmV0dXJuOmlbMF0/ci50aHJvd3x8KChvPXIucmV0dXJuKSYmby5jYWxsKHIpLDApOnIubmV4dCkmJiEobz1vLmNhbGwocixpWzFdKSkuZG9uZSlyZXR1cm4gbztzd2l0Y2gocj0wLG8mJihpPVsyJmlbMF0sby52YWx1ZV0pLGlbMF0pe2Nhc2UgMDpjYXNlIDE6bz1pO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYS5sYWJlbCsrLHt2YWx1ZTppWzFdLGRvbmU6ITF9O2Nhc2UgNTphLmxhYmVsKysscj1pWzFdLGk9WzBdO2NvbnRpbnVlO2Nhc2UgNzppPWEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKG89KG89YS50cnlzKS5sZW5ndGg+MCYmb1tvLmxlbmd0aC0xXSl8fDYhPT1pWzBdJiYyIT09aVswXSkpe2E9MDtjb250aW51ZX1pZigzPT09aVswXSYmKCFvfHxpWzFdPm9bMF0mJmlbMV08b1szXSkpe2EubGFiZWw9aVsxXTticmVha31pZig2PT09aVswXSYmYS5sYWJlbDxvWzFdKXthLmxhYmVsPW9bMV0sbz1pO2JyZWFrfWlmKG8mJmEubGFiZWw8b1syXSl7YS5sYWJlbD1vWzJdLGEub3BzLnB1c2goaSk7YnJlYWt9b1syXSYmYS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlfWk9dC5jYWxsKGUsYSl9Y2F0Y2goZSl7aT1bNixlXSxyPTB9ZmluYWxseXtuPW89MH1pZig1JmlbMF0pdGhyb3cgaVsxXTtyZXR1cm57dmFsdWU6aVswXT9pWzFdOnZvaWQgMCxkb25lOiEwfX0oW2ksdV0pfX19ZnVuY3Rpb24gbjUoZSx0KXt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXTtpZighbilyZXR1cm4gZTt2YXIgcixvLGk9bi5jYWxsKGUpLGE9W107dHJ5e2Zvcig7KHZvaWQgMD09PXR8fHQtLSA+MCkmJiEocj1pLm5leHQoKSkuZG9uZTspYS5wdXNoKHIudmFsdWUpfWNhdGNoKGUpe289e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihuPWkucmV0dXJuKSYmbi5jYWxsKGkpfWZpbmFsbHl7aWYobyl0aHJvdyBvLmVycm9yfX1yZXR1cm4gYX1mdW5jdGlvbiByNShlKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTt2YXIgdCxuPWVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdO3JldHVybiBuP24uY2FsbChlKTooZT1mdW5jdGlvbihlKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixuPXQmJmVbdF0scj0wO2lmKG4pcmV0dXJuIG4uY2FsbChlKTtpZihlJiZcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSYmcj49ZS5sZW5ndGgmJihlPXZvaWQgMCkse3ZhbHVlOmUmJmVbcisrXSxkb25lOiFlfX19O3Rocm93IG5ldyBUeXBlRXJyb3IodD9cIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCI6XCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpfShlKSx0PXt9LHIoXCJuZXh0XCIpLHIoXCJ0aHJvd1wiKSxyKFwicmV0dXJuXCIpLHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQpO2Z1bmN0aW9uIHIobil7dFtuXT1lW25dJiZmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbyl7IWZ1bmN0aW9uKGUsdCxuLHIpe1Byb21pc2UucmVzb2x2ZShyKS50aGVuKChmdW5jdGlvbih0KXtlKHt2YWx1ZTp0LGRvbmU6bn0pfSksdCl9KHIsbywodD1lW25dKHQpKS5kb25lLHQudmFsdWUpfSkpfX19dmFyIG81PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBpNShlKXt2YXIgdD17ZXhwb3J0czp7fX07cmV0dXJuIGUodCx0LmV4cG9ydHMpLHQuZXhwb3J0c312YXIgYTUsdTUsczU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuTWF0aD09TWF0aCYmZX0sbDU9czUoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxzNShcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxzNShcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZil8fHM1KFwib2JqZWN0XCI9PXR5cGVvZiBvNSYmbzUpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksYzU9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiEhZSgpfWNhdGNoKGUpe3JldHVybiEwfX0sZjU9IWM1KChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KSksZDU9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwscDU9ZDUuYmluZD9kNS5iaW5kKGQ1KTpmdW5jdGlvbigpe3JldHVybiBkNS5hcHBseShkNSxhcmd1bWVudHMpfSxoNT17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxnNT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHY1PXtmOmc1JiYhaDUuY2FsbCh7MToyfSwxKT9mdW5jdGlvbihlKXt2YXIgdD1nNSh0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTpoNX0seTU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19LG01PUZ1bmN0aW9uLnByb3RvdHlwZSxiNT1tNS5iaW5kLHc1PW01LmNhbGwsRTU9YjUmJmI1LmJpbmQodzUpLEQ1PWI1P2Z1bmN0aW9uKGUpe3JldHVybiBlJiZFNSh3NSxlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmZ1bmN0aW9uKCl7cmV0dXJuIHc1LmFwcGx5KGUsYXJndW1lbnRzKX19LFM1PUQ1KHt9LnRvU3RyaW5nKSx4NT1ENShcIlwiLnNsaWNlKSxDNT1mdW5jdGlvbihlKXtyZXR1cm4geDUoUzUoZSksOCwtMSl9LEE1PWw1Lk9iamVjdCxPNT1ENShcIlwiLnNwbGl0KSxrNT1jNSgoZnVuY3Rpb24oKXtyZXR1cm4hQTUoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKGUpe3JldHVyblwiU3RyaW5nXCI9PUM1KGUpP081KGUsXCJcIik6QTUoZSl9OkE1LEI1PWw1LlR5cGVFcnJvcixGNT1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IEI1KFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIrZSk7cmV0dXJuIGV9LFQ1PWZ1bmN0aW9uKGUpe3JldHVybiBrNShGNShlKSl9LF81PWZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9LFA1PWZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlP251bGwhPT1lOl81KGUpfSxqNT1mdW5jdGlvbihlKXtyZXR1cm4gXzUoZSk/ZTp2b2lkIDB9LE41PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9qNShsNVtlXSk6bDVbZV0mJmw1W2VdW3RdfSxJNT1ENSh7fS5pc1Byb3RvdHlwZU9mKSxMNT1ONShcIm5hdmlnYXRvclwiLFwidXNlckFnZW50XCIpfHxcIlwiLFI1PWw1LnByb2Nlc3MsTTU9bDUuRGVubyx6NT1SNSYmUjUudmVyc2lvbnN8fE01JiZNNS52ZXJzaW9uLCQ1PXo1JiZ6NS52ODskNSYmKHU1PShhNT0kNS5zcGxpdChcIi5cIikpWzBdPjAmJmE1WzBdPDQ/MTorKGE1WzBdK2E1WzFdKSksIXU1JiZMNSYmKCEoYTU9TDUubWF0Y2goL0VkZ2VcXC8oXFxkKykvKSl8fGE1WzFdPj03NCkmJihhNT1MNS5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLykpJiYodTU9K2E1WzFdKTt2YXIgSDU9dTUsVjU9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhYzUoKGZ1bmN0aW9uKCl7dmFyIGU9U3ltYm9sKCk7cmV0dXJuIVN0cmluZyhlKXx8IShPYmplY3QoZSlpbnN0YW5jZW9mIFN5bWJvbCl8fCFTeW1ib2wuc2hhbSYmSDUmJkg1PDQxfSkpLFU1PVY1JiYhU3ltYm9sLnNoYW0mJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IsVzU9bDUuT2JqZWN0LEc1PVU1P2Z1bmN0aW9uKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfTpmdW5jdGlvbihlKXt2YXIgdD1ONShcIlN5bWJvbFwiKTtyZXR1cm4gXzUodCkmJkk1KHQucHJvdG90eXBlLFc1KGUpKX0scTU9bDUuU3RyaW5nLEs1PWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gcTUoZSl9Y2F0Y2goZSl7cmV0dXJuXCJPYmplY3RcIn19LFk1PWw1LlR5cGVFcnJvcixYNT1mdW5jdGlvbihlKXtpZihfNShlKSlyZXR1cm4gZTt0aHJvdyBZNShLNShlKStcIiBpcyBub3QgYSBmdW5jdGlvblwiKX0sWjU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lW3RdO3JldHVybiBudWxsPT1uP3ZvaWQgMDpYNShuKX0sSjU9bDUuVHlwZUVycm9yLFE1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxlOD1mdW5jdGlvbihlLHQpe3RyeXtRNShsNSxlLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoKG4pe2w1W2VdPXR9cmV0dXJuIHR9LHQ4PWw1W1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdfHxlOChcIl9fY29yZS1qc19zaGFyZWRfX1wiLHt9KSxuOD1pNSgoZnVuY3Rpb24oZSl7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiB0OFtlXXx8KHQ4W2VdPXZvaWQgMCE9PXQ/dDp7fSl9KShcInZlcnNpb25zXCIsW10pLnB1c2goe3ZlcnNpb246XCIzLjE5LjNcIixtb2RlOlwiZ2xvYmFsXCIsY29weXJpZ2h0OlwiwqkgMjAyMSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KVwifSl9KSkscjg9bDUuT2JqZWN0LG84PWZ1bmN0aW9uKGUpe3JldHVybiByOChGNShlKSl9LGk4PUQ1KHt9Lmhhc093blByb3BlcnR5KSxhOD1PYmplY3QuaGFzT3dufHxmdW5jdGlvbihlLHQpe3JldHVybiBpOChvOChlKSx0KX0sdTg9MCxzOD1NYXRoLnJhbmRvbSgpLGw4PUQ1KDEuLnRvU3RyaW5nKSxjOD1mdW5jdGlvbihlKXtyZXR1cm5cIlN5bWJvbChcIisodm9pZCAwPT09ZT9cIlwiOmUpK1wiKV9cIitsOCgrK3U4K3M4LDM2KX0sZjg9bjgoXCJ3a3NcIiksZDg9bDUuU3ltYm9sLHA4PWQ4JiZkOC5mb3IsaDg9VTU/ZDg6ZDgmJmQ4LndpdGhvdXRTZXR0ZXJ8fGM4LGc4PWZ1bmN0aW9uKGUpe2lmKCFhOChmOCxlKXx8IVY1JiZcInN0cmluZ1wiIT10eXBlb2YgZjhbZV0pe3ZhciB0PVwiU3ltYm9sLlwiK2U7VjUmJmE4KGQ4LGUpP2Y4W2VdPWQ4W2VdOmY4W2VdPVU1JiZwOD9wOCh0KTpoOCh0KX1yZXR1cm4gZjhbZV19LHY4PWw1LlR5cGVFcnJvcix5OD1nOChcInRvUHJpbWl0aXZlXCIpLG04PWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoIVA1KGUpfHxHNShlKSlyZXR1cm4gZTt2YXIgbixyPVo1KGUseTgpO2lmKHIpe2lmKHZvaWQgMD09PXQmJih0PVwiZGVmYXVsdFwiKSxuPXA1KHIsZSx0KSwhUDUobil8fEc1KG4pKXJldHVybiBuO3Rocm93IHY4KFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfXJldHVybiB2b2lkIDA9PT10JiYodD1cIm51bWJlclwiKSxmdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYoXCJzdHJpbmdcIj09PXQmJl81KG49ZS50b1N0cmluZykmJiFQNShyPXA1KG4sZSkpKXJldHVybiByO2lmKF81KG49ZS52YWx1ZU9mKSYmIVA1KHI9cDUobixlKSkpcmV0dXJuIHI7aWYoXCJzdHJpbmdcIiE9PXQmJl81KG49ZS50b1N0cmluZykmJiFQNShyPXA1KG4sZSkpKXJldHVybiByO3Rocm93IEo1KFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfShlLHQpfShlLFwic3RyaW5nXCIpO3JldHVybiBHNSh0KT90OnQrXCJcIn0sYjg9bDUuZG9jdW1lbnQsdzg9UDUoYjgpJiZQNShiOC5jcmVhdGVFbGVtZW50KSxFOD1mdW5jdGlvbihlKXtyZXR1cm4gdzg/YjguY3JlYXRlRWxlbWVudChlKTp7fX0sRDg9IWY1JiYhYzUoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShFOChcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKSxTOD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHg4PXtmOmY1P1M4OmZ1bmN0aW9uKGUsdCl7aWYoZT1UNShlKSx0PW04KHQpLEQ4KXRyeXtyZXR1cm4gUzgoZSx0KX1jYXRjaChlKXt9aWYoYTgoZSx0KSlyZXR1cm4geTUoIXA1KHY1LmYsZSx0KSxlW3RdKX19LEM4PWw1LlN0cmluZyxBOD1sNS5UeXBlRXJyb3IsTzg9ZnVuY3Rpb24oZSl7aWYoUDUoZSkpcmV0dXJuIGU7dGhyb3cgQTgoQzgoZSkrXCIgaXMgbm90IGFuIG9iamVjdFwiKX0sazg9bDUuVHlwZUVycm9yLEI4PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxGOD17ZjpmNT9CODpmdW5jdGlvbihlLHQsbil7aWYoTzgoZSksdD1tOCh0KSxPOChuKSxEOCl0cnl7cmV0dXJuIEI4KGUsdCxuKX1jYXRjaChlKXt9aWYoXCJnZXRcImluIG58fFwic2V0XCJpbiBuKXRocm93IGs4KFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWRcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gbiYmKGVbdF09bi52YWx1ZSksZX19LFQ4PWY1P2Z1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRjguZihlLHQseTUoMSxuKSl9OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZVt0XT1uLGV9LF84PUQ1KEZ1bmN0aW9uLnRvU3RyaW5nKTtfNSh0OC5pbnNwZWN0U291cmNlKXx8KHQ4Lmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIF84KGUpfSk7dmFyIFA4LGo4LE44LEk4PXQ4Lmluc3BlY3RTb3VyY2UsTDg9bDUuV2Vha01hcCxSOD1fNShMOCkmJi9uYXRpdmUgY29kZS8udGVzdChJOChMOCkpLE04PW44KFwia2V5c1wiKSx6OD1mdW5jdGlvbihlKXtyZXR1cm4gTThbZV18fChNOFtlXT1jOChlKSl9LCQ4PXt9LEg4PWw1LlR5cGVFcnJvcixWOD1sNS5XZWFrTWFwO2lmKFI4fHx0OC5zdGF0ZSl7dmFyIFU4PXQ4LnN0YXRlfHwodDguc3RhdGU9bmV3IFY4KSxXOD1ENShVOC5nZXQpLEc4PUQ1KFU4LmhhcykscTg9RDUoVTguc2V0KTtQOD1mdW5jdGlvbihlLHQpe2lmKEc4KFU4LGUpKXRocm93IG5ldyBIOChcIk9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkXCIpO3JldHVybiB0LmZhY2FkZT1lLHE4KFU4LGUsdCksdH0sajg9ZnVuY3Rpb24oZSl7cmV0dXJuIFc4KFU4LGUpfHx7fX0sTjg9ZnVuY3Rpb24oZSl7cmV0dXJuIEc4KFU4LGUpfX1lbHNle3ZhciBLOD16OChcInN0YXRlXCIpOyQ4W0s4XT0hMCxQOD1mdW5jdGlvbihlLHQpe2lmKGE4KGUsSzgpKXRocm93IG5ldyBIOChcIk9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkXCIpO3JldHVybiB0LmZhY2FkZT1lLFQ4KGUsSzgsdCksdH0sajg9ZnVuY3Rpb24oZSl7cmV0dXJuIGE4KGUsSzgpP2VbSzhdOnt9fSxOOD1mdW5jdGlvbihlKXtyZXR1cm4gYTgoZSxLOCl9fXZhciBZOD17c2V0OlA4LGdldDpqOCxoYXM6TjgsZW5mb3JjZTpmdW5jdGlvbihlKXtyZXR1cm4gTjgoZSk/ajgoZSk6UDgoZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG47aWYoIVA1KHQpfHwobj1qOCh0KSkudHlwZSE9PWUpdGhyb3cgSDgoXCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsIFwiK2UrXCIgcmVxdWlyZWRcIik7cmV0dXJuIG59fX0sWDg9RnVuY3Rpb24ucHJvdG90eXBlLFo4PWY1JiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEo4PWE4KFg4LFwibmFtZVwiKSxROD17RVhJU1RTOko4LFBST1BFUjpKOCYmXCJzb21ldGhpbmdcIj09PWZ1bmN0aW9uKCl7fS5uYW1lLENPTkZJR1VSQUJMRTpKOCYmKCFmNXx8ZjUmJlo4KFg4LFwibmFtZVwiKS5jb25maWd1cmFibGUpfSxlNz1pNSgoZnVuY3Rpb24oZSl7dmFyIHQ9UTguQ09ORklHVVJBQkxFLG49WTguZ2V0LHI9WTguZW5mb3JjZSxvPVN0cmluZyhTdHJpbmcpLnNwbGl0KFwiU3RyaW5nXCIpOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSxuLGksYSl7dmFyIHUscz0hIWEmJiEhYS51bnNhZmUsbD0hIWEmJiEhYS5lbnVtZXJhYmxlLGM9ISFhJiYhIWEubm9UYXJnZXRHZXQsZj1hJiZ2b2lkIDAhPT1hLm5hbWU/YS5uYW1lOm47XzUoaSkmJihcIlN5bWJvbChcIj09PVN0cmluZyhmKS5zbGljZSgwLDcpJiYoZj1cIltcIitTdHJpbmcoZikucmVwbGFjZSgvXlN5bWJvbFxcKChbXildKilcXCkvLFwiJDFcIikrXCJdXCIpLCghYTgoaSxcIm5hbWVcIil8fHQmJmkubmFtZSE9PWYpJiZUOChpLFwibmFtZVwiLGYpLCh1PXIoaSkpLnNvdXJjZXx8KHUuc291cmNlPW8uam9pbihcInN0cmluZ1wiPT10eXBlb2YgZj9mOlwiXCIpKSksZSE9PWw1PyhzPyFjJiZlW25dJiYobD0hMCk6ZGVsZXRlIGVbbl0sbD9lW25dPWk6VDgoZSxuLGkpKTpsP2Vbbl09aTplOChuLGkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLFwidG9TdHJpbmdcIiwoZnVuY3Rpb24oKXtyZXR1cm4gXzUodGhpcykmJm4odGhpcykuc291cmNlfHxJOCh0aGlzKX0pKX0pKSx0Nz1NYXRoLmNlaWwsbjc9TWF0aC5mbG9vcixyNz1mdW5jdGlvbihlKXt2YXIgdD0rZTtyZXR1cm4gdCE9dHx8MD09PXQ/MDoodD4wP243OnQ3KSh0KX0sbzc9TWF0aC5tYXgsaTc9TWF0aC5taW4sYTc9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yNyhlKTtyZXR1cm4gbjwwP283KG4rdCwwKTppNyhuLHQpfSx1Nz1NYXRoLm1pbixzNz1mdW5jdGlvbihlKXtyZXR1cm4gZT4wP3U3KHI3KGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9LGw3PWZ1bmN0aW9uKGUpe3JldHVybiBzNyhlLmxlbmd0aCl9LGM3PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7dmFyIG8saT1UNSh0KSxhPWw3KGkpLHU9YTcocixhKTtpZihlJiZuIT1uKXtmb3IoO2E+dTspaWYoKG89aVt1KytdKSE9bylyZXR1cm4hMH1lbHNlIGZvcig7YT51O3UrKylpZigoZXx8dSBpbiBpKSYmaVt1XT09PW4pcmV0dXJuIGV8fHV8fDA7cmV0dXJuIWUmJi0xfX0sZjc9e2luY2x1ZGVzOmM3KCEwKSxpbmRleE9mOmM3KCExKX0sZDc9ZjcuaW5kZXhPZixwNz1ENShbXS5wdXNoKSxoNz1mdW5jdGlvbihlLHQpe3ZhciBuLHI9VDUoZSksbz0wLGk9W107Zm9yKG4gaW4gcikhYTgoJDgsbikmJmE4KHIsbikmJnA3KGksbik7Zm9yKDt0Lmxlbmd0aD5vOylhOChyLG49dFtvKytdKSYmKH5kNyhpLG4pfHxwNyhpLG4pKTtyZXR1cm4gaX0sZzc9W1wiY29uc3RydWN0b3JcIixcImhhc093blByb3BlcnR5XCIsXCJpc1Byb3RvdHlwZU9mXCIsXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLFwidG9Mb2NhbGVTdHJpbmdcIixcInRvU3RyaW5nXCIsXCJ2YWx1ZU9mXCJdLHY3PWc3LmNvbmNhdChcImxlbmd0aFwiLFwicHJvdG90eXBlXCIpLHk3PXtmOk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihlKXtyZXR1cm4gaDcoZSx2Nyl9fSxtNz17ZjpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSxiNz1ENShbXS5jb25jYXQpLHc3PU41KFwiUmVmbGVjdFwiLFwib3duS2V5c1wiKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9eTcuZihPOChlKSksbj1tNy5mO3JldHVybiBuP2I3KHQsbihlKSk6dH0sRTc9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dzcodCkscj1GOC5mLG89eDguZixpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07YTgoZSxhKXx8cihlLGEsbyh0LGEpKX19LEQ3PS8jfFxcLnByb3RvdHlwZVxcLi8sUzc9ZnVuY3Rpb24oZSx0KXt2YXIgbj1DN1t4NyhlKV07cmV0dXJuIG49PU83fHxuIT1BNyYmKF81KHQpP2M1KHQpOiEhdCl9LHg3PVM3Lm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoRDcsXCIuXCIpLnRvTG93ZXJDYXNlKCl9LEM3PVM3LmRhdGE9e30sQTc9UzcuTkFUSVZFPVwiTlwiLE83PVM3LlBPTFlGSUxMPVwiUFwiLGs3PVM3LEI3PXg4LmYsRjc9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8saSxhLHU9ZS50YXJnZXQscz1lLmdsb2JhbCxsPWUuc3RhdDtpZihuPXM/bDU6bD9sNVt1XXx8ZTgodSx7fSk6KGw1W3VdfHx7fSkucHJvdG90eXBlKWZvcihyIGluIHQpe2lmKGk9dFtyXSxvPWUubm9UYXJnZXRHZXQ/KGE9QjcobixyKSkmJmEudmFsdWU6bltyXSwhazcocz9yOnUrKGw/XCIuXCI6XCIjXCIpK3IsZS5mb3JjZWQpJiZ2b2lkIDAhPT1vKXtpZih0eXBlb2YgaT09dHlwZW9mIG8pY29udGludWU7RTcoaSxvKX0oZS5zaGFtfHxvJiZvLnNoYW0pJiZUOChpLFwic2hhbVwiLCEwKSxlNyhuLHIsaSxlKX19LFQ3PXt9O1Q3W2c4KFwidG9TdHJpbmdUYWdcIildPVwielwiO3ZhciBfNz1cIltvYmplY3Qgel1cIj09PVN0cmluZyhUNyksUDc9ZzgoXCJ0b1N0cmluZ1RhZ1wiKSxqNz1sNS5PYmplY3QsTjc9XCJBcmd1bWVudHNcIj09QzUoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKSxJNz1fNz9DNTpmdW5jdGlvbihlKXt2YXIgdCxuLHI7cmV0dXJuIHZvaWQgMD09PWU/XCJVbmRlZmluZWRcIjpudWxsPT09ZT9cIk51bGxcIjpcInN0cmluZ1wiPT10eXBlb2Yobj1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZVt0XX1jYXRjaChlKXt9fSh0PWo3KGUpLFA3KSk/bjpONz9DNSh0KTpcIk9iamVjdFwiPT0ocj1DNSh0KSkmJl81KHQuY2FsbGVlKT9cIkFyZ3VtZW50c1wiOnJ9LEw3PWw1LlN0cmluZyxSNz1mdW5jdGlvbihlKXtpZihcIlN5bWJvbFwiPT09STcoZSkpdGhyb3cgVHlwZUVycm9yKFwiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmdcIik7cmV0dXJuIEw3KGUpfSxNNz1cIlxcdFxcblxcdlxcZlxcciDCoOGagOKAgOKAgeKAguKAg+KAhOKAheKAhuKAh+KAiOKAieKAiuKAr+KBn+OAgFxcdTIwMjhcXHUyMDI5XFx1ZmVmZlwiLHo3PUQ1KFwiXCIucmVwbGFjZSksJDc9XCJbXCIrTTcrXCJdXCIsSDc9UmVnRXhwKFwiXlwiKyQ3KyQ3K1wiKlwiKSxWNz1SZWdFeHAoJDcrJDcrXCIqJFwiKSxVNz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49UjcoRjUodCkpO3JldHVybiAxJmUmJihuPXo3KG4sSDcsXCJcIikpLDImZSYmKG49ejcobixWNyxcIlwiKSksbn19LFc3PXtzdGFydDpVNygxKSxlbmQ6VTcoMiksdHJpbTpVNygzKX0sRzc9UTguUFJPUEVSLHE3PVc3LnRyaW07ZnVuY3Rpb24gSzcoZSl7cmV0dXJuIGUubGVuZ3RoP2VbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpOlwiXCJ9ZnVuY3Rpb24gWTcoZSx0LG4pe3ZvaWQgMD09PXQmJih0PVwiYXV0b1wiKSx2b2lkIDA9PT1uJiYobj1cImF1dG9cIik7dmFyIHI9TXAoZSk7cmV0dXJuIHIuYXR0cihcIndpZHRoXCIsdCksci5hdHRyKFwiaGVpZ2h0XCIsbiksclswXS5vdXRlckhUTUx9Rjcoe3RhcmdldDpcIlN0cmluZ1wiLHByb3RvOiEwLGZvcmNlZDooXCJ0cmltXCIsYzUoKGZ1bmN0aW9uKCl7cmV0dXJuISFNNy50cmltKCl8fFwi4oCLwoXhoI5cIiE9PVwi4oCLwoXhoI5cIi50cmltKCl8fEc3JiZcInRyaW1cIiE9PU03LnRyaW0ubmFtZX0pKSl9LHt0cmltOmZ1bmN0aW9uKCl7cmV0dXJuIHE3KHRoaXMpfX0pLEY3KHtnbG9iYWw6ITB9LHtnbG9iYWxUaGlzOmw1fSksYWgmJihNcC5mbi5hcHBlbmQ9YWgpLHFwJiYoTXAuZm4ub249cXApLHloJiYoTXAuZm4uZm9jdXM9eWgpLFZwJiYoTXAuZm4uYXR0cj1WcCksR3AmJihNcC5mbi52YWw9R3ApLHJoJiYoTXAuZm4uaHRtbD1yaCksc2gmJihNcC5mbi5wYXJlbnQ9c2gpLEhwJiYoTXAuZm4uaGFzQ2xhc3M9SHApLHBoJiYoTXAuZm4uZW1wdHk9cGgpO3ZhciBYNyxaNz17dHlwZTpcInZpZGVvXCIscmVuZGVyRWxlbTpmdW5jdGlvbihlLHQsbil7dmFyIHIsbz1lLGk9by5zcmMsYT12b2lkIDA9PT1pP1wiXCI6aSx1PW8ucG9zdGVyLHM9dm9pZCAwPT09dT9cIlwiOnUsbD1vLndpZHRoLGM9dm9pZCAwPT09bD9cImF1dG9cIjpsLGY9by5oZWlnaHQsZD12b2lkIDA9PT1mP1wiYXV0b1wiOmYscD1RTy5pc05vZGVTZWxlY3RlZChuLGUpO2lmKDA9PT1hLnRyaW0oKS5pbmRleE9mKFwiPGlmcmFtZSBcIikpe3I9UGcoXCJkaXZcIix7Y2xhc3NOYW1lOlwidy1lLXRleHRhcmVhLXZpZGVvLWNvbnRhaW5lclwiLFwiZGF0YS1zZWxlY3RlZFwiOnA/XCJ0cnVlXCI6XCJcIixpbm5lckhUTUw6WTcoYSxjLGQpfSl9ZWxzZXt2YXIgaD1QZyhcInZpZGVvXCIse3Bvc3RlcjpzLGNvbnRyb2xzOiEwfSxQZyhcInNvdXJjZVwiLHtzcmM6YSx0eXBlOlwidmlkZW8vbXA0XCJ9KSxcIlNvcnJ5LCB5b3VyIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGVtYmVkZGVkIHZpZGVvcy5cXG4g5oqx5q2J77yM5rWP6KeI5Zmo5LiN5pSv5oyBIHZpZGVvIOinhumikVwiKTtcImF1dG9cIiE9PWMmJihoLmRhdGEud2lkdGg9YyksXCJhdXRvXCIhPT1kJiYoaC5kYXRhLmhlaWdodD1kKSxyPVBnKFwiZGl2XCIse2NsYXNzTmFtZTpcInctZS10ZXh0YXJlYS12aWRlby1jb250YWluZXJcIixcImRhdGEtc2VsZWN0ZWRcIjpwP1widHJ1ZVwiOlwiXCJ9LGgpfXJldHVybiBwZyhcImRpdlwiLHtwcm9wczp7Y29udGVudEVkaXRhYmxlOiExfSxvbjp7bW91c2Vkb3duOmZ1bmN0aW9uKGUpe3JldHVybiBlLnByZXZlbnREZWZhdWx0KCl9fX0scil9fSxKNz17dHlwZTpcInZpZGVvXCIsZWxlbVRvSHRtbDpmdW5jdGlvbihlLHQpe3ZhciBuPWUscj1uLnNyYyxvPXZvaWQgMD09PXI/XCJcIjpyLGk9bi5wb3N0ZXIsYT12b2lkIDA9PT1pP1wiXCI6aSx1PW4ud2lkdGgscz12b2lkIDA9PT11P1wiYXV0b1wiOnUsbD1uLmhlaWdodCxjPXZvaWQgMD09PWw/XCJhdXRvXCI6bCxmPSc8ZGl2IGRhdGEtdy1lLXR5cGU9XCJ2aWRlb1wiIGRhdGEtdy1lLWlzLXZvaWQ+XFxuJztyZXR1cm4gMD09PW8udHJpbSgpLmluZGV4T2YoXCI8aWZyYW1lIFwiKT9mKz1ZNyhvLHMsYyk6Zis9Jzx2aWRlbyBwb3N0ZXI9XCInK2ErJ1wiIGNvbnRyb2xzPVwidHJ1ZVwiIHdpZHRoPVwiJytzKydcIiBoZWlnaHQ9XCInK2MrJ1wiPjxzb3VyY2Ugc3JjPVwiJytvKydcIiB0eXBlPVwidmlkZW8vbXA0XCIvPjwvdmlkZW8+JyxmK1wiXFxuPC9kaXY+XCJ9fSxRNz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIGg3KGUsZzcpfSxlOT1mNT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe084KGUpO2Zvcih2YXIgbixyPVQ1KHQpLG89UTcodCksaT1vLmxlbmd0aCxhPTA7aT5hOylGOC5mKGUsbj1vW2ErK10scltuXSk7cmV0dXJuIGV9LHQ5PU41KFwiZG9jdW1lbnRcIixcImRvY3VtZW50RWxlbWVudFwiKSxuOT16OChcIklFX1BST1RPXCIpLHI5PWZ1bmN0aW9uKCl7fSxvOT1mdW5jdGlvbihlKXtyZXR1cm5cIjxzY3JpcHQ+XCIrZStcIjxcXC9zY3JpcHQ+XCJ9LGk5PWZ1bmN0aW9uKGUpe2Uud3JpdGUobzkoXCJcIikpLGUuY2xvc2UoKTt2YXIgdD1lLnBhcmVudFdpbmRvdy5PYmplY3Q7cmV0dXJuIGU9bnVsbCx0fSxhOT1mdW5jdGlvbigpe3RyeXtYNz1uZXcgQWN0aXZlWE9iamVjdChcImh0bWxmaWxlXCIpfWNhdGNoKGUpe312YXIgZSx0O2E5PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5kb21haW4mJlg3P2k5KFg3KTooKHQ9RTgoXCJpZnJhbWVcIikpLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdDkuYXBwZW5kQ2hpbGQodCksdC5zcmM9U3RyaW5nKFwiamF2YXNjcmlwdDpcIiksKGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksZS53cml0ZShvOShcImRvY3VtZW50LkY9T2JqZWN0XCIpKSxlLmNsb3NlKCksZS5GKTppOShYNyk7Zm9yKHZhciBuPWc3Lmxlbmd0aDtuLS07KWRlbGV0ZSBhOS5wcm90b3R5cGVbZzdbbl1dO3JldHVybiBhOSgpfTskOFtuOV09ITA7dmFyIHU5PU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT1lPyhyOS5wcm90b3R5cGU9TzgoZSksbj1uZXcgcjkscjkucHJvdG90eXBlPW51bGwsbltuOV09ZSk6bj1hOSgpLHZvaWQgMD09PXQ/bjplOShuLHQpfSxzOT1nOChcInVuc2NvcGFibGVzXCIpLGw5PUFycmF5LnByb3RvdHlwZTtudWxsPT1sOVtzOV0mJkY4LmYobDksczkse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp1OShudWxsKX0pO3ZhciBjOT1mdW5jdGlvbihlKXtsOVtzOV1bZV09ITB9LGY5PWY3LmluY2x1ZGVzO0Y3KHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwfSx7aW5jbHVkZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGY5KHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksYzkoXCJpbmNsdWRlc1wiKTt2YXIgZDk9e3NlbGVjdG9yOlwiaWZyYW1lLHZpZGVvLHBcIixwcmVQYXJzZUh0bWw6ZnVuY3Rpb24oZSl7dmFyIHQ9TXAoZSksbj10O2lmKFwicFwiPT09SzcodCkpe3ZhciByPXQuY2hpbGRyZW4oKTtpZigxPT09ci5sZW5ndGgpe3ZhciBvPXJbMF0saT1vLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtbXCJpZnJhbWVcIixcInZpZGVvXCJdLmluY2x1ZGVzKGkpJiYobj1NcChvKSl9fXZhciBhPUs3KG4pO2lmKFwiaWZyYW1lXCIhPT1hJiZcInZpZGVvXCIhPT1hKXJldHVybiBuWzBdO2lmKFwidmlkZW9cIj09PW4ucGFyZW50KCkuYXR0cihcImRhdGEtdy1lLXR5cGVcIikpcmV0dXJuIG5bMF07dmFyIHU9TXAoJzxkaXYgZGF0YS13LWUtdHlwZT1cInZpZGVvXCIgZGF0YS13LWUtaXMtdm9pZD48L2Rpdj4nKTtyZXR1cm4gdS5hcHBlbmQobiksdVswXX19LHA5PUQ1KEQ1LmJpbmQpLGg5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFg1KGUpLHZvaWQgMD09PXQ/ZTpwOT9wOShlLHQpOmZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX0sZzk9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuXCJBcnJheVwiPT1DNShlKX0sdjk9ZnVuY3Rpb24oKXt9LHk5PVtdLG05PU41KFwiUmVmbGVjdFwiLFwiY29uc3RydWN0XCIpLGI5PS9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi8sdzk9RDUoYjkuZXhlYyksRTk9IWI5LmV4ZWModjkpLEQ5PWZ1bmN0aW9uKGUpe2lmKCFfNShlKSlyZXR1cm4hMTt0cnl7cmV0dXJuIG05KHY5LHk5LGUpLCEwfWNhdGNoKGUpe3JldHVybiExfX0sUzk9IW05fHxjNSgoZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gRDkoRDkuY2FsbCl8fCFEOShPYmplY3QpfHwhRDkoKGZ1bmN0aW9uKCl7ZT0hMH0pKXx8ZX0pKT9mdW5jdGlvbihlKXtpZighXzUoZSkpcmV0dXJuITE7c3dpdGNoKEk3KGUpKXtjYXNlXCJBc3luY0Z1bmN0aW9uXCI6Y2FzZVwiR2VuZXJhdG9yRnVuY3Rpb25cIjpjYXNlXCJBc3luY0dlbmVyYXRvckZ1bmN0aW9uXCI6cmV0dXJuITF9cmV0dXJuIEU5fHwhIXc5KGI5LEk4KGUpKX06RDkseDk9ZzgoXCJzcGVjaWVzXCIpLEM5PWw1LkFycmF5LEE5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyhmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZzkoZSkmJih0PWUuY29uc3RydWN0b3IsKFM5KHQpJiYodD09PUM5fHxnOSh0LnByb3RvdHlwZSkpfHxQNSh0KSYmbnVsbD09PSh0PXRbeDldKSkmJih0PXZvaWQgMCkpLHZvaWQgMD09PXQ/Qzk6dH0oZSkpKDA9PT10PzA6dCl9LE85PUQ1KFtdLnB1c2gpLGs5PWZ1bmN0aW9uKGUpe3ZhciB0PTE9PWUsbj0yPT1lLHI9Mz09ZSxvPTQ9PWUsaT02PT1lLGE9Nz09ZSx1PTU9PWV8fGk7cmV0dXJuIGZ1bmN0aW9uKHMsbCxjLGYpe2Zvcih2YXIgZCxwLGg9bzgocyksZz1rNShoKSx2PWg5KGwsYykseT1sNyhnKSxtPTAsYj1mfHxBOSx3PXQ/YihzLHkpOm58fGE/YihzLDApOnZvaWQgMDt5Pm07bSsrKWlmKCh1fHxtIGluIGcpJiYocD12KGQ9Z1ttXSxtLGgpLGUpKWlmKHQpd1ttXT1wO2Vsc2UgaWYocClzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZDtjYXNlIDY6cmV0dXJuIG07Y2FzZSAyOk85KHcsZCl9ZWxzZSBzd2l0Y2goZSl7Y2FzZSA0OnJldHVybiExO2Nhc2UgNzpPOSh3LGQpfXJldHVybiBpPy0xOnJ8fG8/bzp3fX0sQjk9e2ZvckVhY2g6azkoMCksbWFwOms5KDEpLGZpbHRlcjprOSgyKSxzb21lOms5KDMpLGV2ZXJ5Oms5KDQpLGZpbmQ6azkoNSksZmluZEluZGV4Oms5KDYpLGZpbHRlclJlamVjdDprOSg3KX0sRjk9QjkuZmluZCxUOT0hMDtcImZpbmRcImluW10mJkFycmF5KDEpLmZpbmQoKGZ1bmN0aW9uKCl7VDk9ITF9KSksRjcoe3RhcmdldDpcIkFycmF5XCIscHJvdG86ITAsZm9yY2VkOlQ5fSx7ZmluZDpmdW5jdGlvbihlKXtyZXR1cm4gRjkodGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxjOShcImZpbmRcIik7dmFyIF85PV83P3t9LnRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuXCJbb2JqZWN0IFwiK0k3KHRoaXMpK1wiXVwifTtmdW5jdGlvbiBQOShlLHQsbixyKXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJcIiksdm9pZCAwPT09biYmKG49XCJhdXRvXCIpLHZvaWQgMD09PXImJihyPVwiYXV0b1wiKSx7dHlwZTpcInZpZGVvXCIsc3JjOmUscG9zdGVyOnQsd2lkdGg6bixoZWlnaHQ6cixjaGlsZHJlbjpbe3RleHQ6XCJcIn1dfX1fN3x8ZTcoT2JqZWN0LnByb3RvdHlwZSxcInRvU3RyaW5nXCIsXzkse3Vuc2FmZTohMH0pO3ZhciBqOSxOOSxJOT17c2VsZWN0b3I6J2RpdltkYXRhLXctZS10eXBlPVwidmlkZW9cIl0nLHBhcnNlRWxlbUh0bWw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPU1wKGUpLG89XCJcIixpPVwiXCIsYT1cImF1dG9cIix1PVwiYXV0b1wiLHM9ci5maW5kKFwiaWZyYW1lXCIpO2lmKHMubGVuZ3RoPjApcmV0dXJuIGE9cy5hdHRyKFwid2lkdGhcIil8fFwiYXV0b1wiLHU9cy5hdHRyKFwiaGVpZ2h0XCIpfHxcImF1dG9cIixQOShvPXNbMF0ub3V0ZXJIVE1MLGksYSx1KTt2YXIgbD1yLmZpbmQoXCJ2aWRlb1wiKTtyZXR1cm4obz1sLmF0dHIoXCJzcmNcIil8fFwiXCIpfHxsLmxlbmd0aD4wJiYobz1sLmZpbmQoXCJzb3VyY2VcIikuYXR0cihcInNyY1wiKXx8XCJcIiksYT1sLmF0dHIoXCJ3aWR0aFwiKXx8XCJhdXRvXCIsdT1sLmF0dHIoXCJoZWlnaHRcIil8fFwiYXV0b1wiLFA5KG8saT1sLmF0dHIoXCJwb3N0ZXJcIil8fFwiXCIsYSx1KX19LEw5PWZ1bmN0aW9uKCl7dmFyIGU9TzgodGhpcyksdD1cIlwiO3JldHVybiBlLmdsb2JhbCYmKHQrPVwiZ1wiKSxlLmlnbm9yZUNhc2UmJih0Kz1cImlcIiksZS5tdWx0aWxpbmUmJih0Kz1cIm1cIiksZS5kb3RBbGwmJih0Kz1cInNcIiksZS51bmljb2RlJiYodCs9XCJ1XCIpLGUuc3RpY2t5JiYodCs9XCJ5XCIpLHR9LFI5PWw1LlJlZ0V4cCxNOT1jNSgoZnVuY3Rpb24oKXt2YXIgZT1SOShcImFcIixcInlcIik7cmV0dXJuIGUubGFzdEluZGV4PTIsbnVsbCE9ZS5leGVjKFwiYWJjZFwiKX0pKSx6OT1NOXx8YzUoKGZ1bmN0aW9uKCl7cmV0dXJuIVI5KFwiYVwiLFwieVwiKS5zdGlja3l9KSksJDk9e0JST0tFTl9DQVJFVDpNOXx8YzUoKGZ1bmN0aW9uKCl7dmFyIGU9UjkoXCJeclwiLFwiZ3lcIik7cmV0dXJuIGUubGFzdEluZGV4PTIsbnVsbCE9ZS5leGVjKFwic3RyXCIpfSkpLE1JU1NFRF9TVElDS1k6ejksVU5TVVBQT1JURURfWTpNOX0sSDk9bDUuUmVnRXhwLFY5PWM1KChmdW5jdGlvbigpe3ZhciBlPUg5KFwiLlwiLFwic1wiKTtyZXR1cm4hKGUuZG90QWxsJiZlLmV4ZWMoXCJcXG5cIikmJlwic1wiPT09ZS5mbGFncyl9KSksVTk9bDUuUmVnRXhwLFc5PWM1KChmdW5jdGlvbigpe3ZhciBlPVU5KFwiKD88YT5iKVwiLFwiZ1wiKTtyZXR1cm5cImJcIiE9PWUuZXhlYyhcImJcIikuZ3JvdXBzLmF8fFwiYmNcIiE9PVwiYlwiLnJlcGxhY2UoZSxcIiQ8YT5jXCIpfSkpLEc5PVk4LmdldCxxOT1uOChcIm5hdGl2ZS1zdHJpbmctcmVwbGFjZVwiLFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksSzk9UmVnRXhwLnByb3RvdHlwZS5leGVjLFk5PUs5LFg5PUQ1KFwiXCIuY2hhckF0KSxaOT1ENShcIlwiLmluZGV4T2YpLEo5PUQ1KFwiXCIucmVwbGFjZSksUTk9RDUoXCJcIi5zbGljZSksZWVlPShOOT0vYiovZyxwNShLOSxqOT0vYS8sXCJhXCIpLHA1KEs5LE45LFwiYVwiKSwwIT09ajkubGFzdEluZGV4fHwwIT09TjkubGFzdEluZGV4KSx0ZWU9JDkuQlJPS0VOX0NBUkVULG5lZT12b2lkIDAhPT0vKCk/Py8uZXhlYyhcIlwiKVsxXTsoZWVlfHxuZWV8fHRlZXx8Vjl8fFc5KSYmKFk5PWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGksYSx1LHM9dGhpcyxsPUc5KHMpLGM9UjcoZSksZj1sLnJhdztpZihmKXJldHVybiBmLmxhc3RJbmRleD1zLmxhc3RJbmRleCx0PXA1KFk5LGYsYykscy5sYXN0SW5kZXg9Zi5sYXN0SW5kZXgsdDt2YXIgZD1sLmdyb3VwcyxwPXRlZSYmcy5zdGlja3ksaD1wNShMOSxzKSxnPXMuc291cmNlLHY9MCx5PWM7aWYocCYmKGg9SjkoaCxcInlcIixcIlwiKSwtMT09PVo5KGgsXCJnXCIpJiYoaCs9XCJnXCIpLHk9UTkoYyxzLmxhc3RJbmRleCkscy5sYXN0SW5kZXg+MCYmKCFzLm11bHRpbGluZXx8cy5tdWx0aWxpbmUmJlwiXFxuXCIhPT1YOShjLHMubGFzdEluZGV4LTEpKSYmKGc9XCIoPzogXCIrZytcIilcIix5PVwiIFwiK3ksdisrKSxuPW5ldyBSZWdFeHAoXCJeKD86XCIrZytcIilcIixoKSksbmVlJiYobj1uZXcgUmVnRXhwKFwiXlwiK2crXCIkKD8hXFxcXHMpXCIsaCkpLGVlZSYmKHI9cy5sYXN0SW5kZXgpLG89cDUoSzkscD9uOnMseSkscD9vPyhvLmlucHV0PVE5KG8uaW5wdXQsdiksb1swXT1ROShvWzBdLHYpLG8uaW5kZXg9cy5sYXN0SW5kZXgscy5sYXN0SW5kZXgrPW9bMF0ubGVuZ3RoKTpzLmxhc3RJbmRleD0wOmVlZSYmbyYmKHMubGFzdEluZGV4PXMuZ2xvYmFsP28uaW5kZXgrb1swXS5sZW5ndGg6ciksbmVlJiZvJiZvLmxlbmd0aD4xJiZwNShxOSxvWzBdLG4sKGZ1bmN0aW9uKCl7Zm9yKGk9MTtpPGFyZ3VtZW50cy5sZW5ndGgtMjtpKyspdm9pZCAwPT09YXJndW1lbnRzW2ldJiYob1tpXT12b2lkIDApfSkpLG8mJmQpZm9yKG8uZ3JvdXBzPWE9dTkobnVsbCksaT0wO2k8ZC5sZW5ndGg7aSsrKWFbKHU9ZFtpXSlbMF1dPW9bdVsxXV07cmV0dXJuIG99KTt2YXIgcmVlPVk5O0Y3KHt0YXJnZXQ6XCJSZWdFeHBcIixwcm90bzohMCxmb3JjZWQ6Ly4vLmV4ZWMhPT1yZWV9LHtleGVjOnJlZX0pO3ZhciBvZWU9RnVuY3Rpb24ucHJvdG90eXBlLGllZT1vZWUuYXBwbHksYWVlPW9lZS5iaW5kLHVlZT1vZWUuY2FsbCxzZWU9XCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuYXBwbHl8fChhZWU/dWVlLmJpbmQoaWVlKTpmdW5jdGlvbigpe3JldHVybiB1ZWUuYXBwbHkoaWVlLGFyZ3VtZW50cyl9KSxsZWU9KGc4KFwic3BlY2llc1wiKSxSZWdFeHAucHJvdG90eXBlKSxjZWU9RDUoXCJcIi5jaGFyQXQpLGZlZT1ENShcIlwiLmNoYXJDb2RlQXQpLGRlZT1ENShcIlwiLnNsaWNlKSxwZWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHIsbyxpPVI3KEY1KHQpKSxhPXI3KG4pLHU9aS5sZW5ndGg7cmV0dXJuIGE8MHx8YT49dT9lP1wiXCI6dm9pZCAwOihyPWZlZShpLGEpKTw1NTI5Nnx8cj41NjMxOXx8YSsxPT09dXx8KG89ZmVlKGksYSsxKSk8NTYzMjB8fG8+NTczNDM/ZT9jZWUoaSxhKTpyOmU/ZGVlKGksYSxhKzIpOm8tNTYzMjArKHItNTUyOTY8PDEwKSs2NTUzNn19LGhlZT17Y29kZUF0OnBlZSghMSksY2hhckF0OnBlZSghMCl9LGdlZT1oZWUuY2hhckF0LHZlZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQrKG4/Z2VlKGUsdCkubGVuZ3RoOjEpfSx5ZWU9TWF0aC5mbG9vcixtZWU9RDUoXCJcIi5jaGFyQXQpLGJlZT1ENShcIlwiLnJlcGxhY2UpLHdlZT1ENShcIlwiLnNsaWNlKSxFZWU9L1xcJChbJCYnYF18XFxkezEsMn18PFtePl0qPikvZyxEZWU9L1xcJChbJCYnYF18XFxkezEsMn0pL2csU2VlPWZ1bmN0aW9uKGUsdCxuLHIsbyxpKXt2YXIgYT1uK2UubGVuZ3RoLHU9ci5sZW5ndGgscz1EZWU7cmV0dXJuIHZvaWQgMCE9PW8mJihvPW84KG8pLHM9RWVlKSxiZWUoaSxzLChmdW5jdGlvbihpLHMpe3ZhciBsO3N3aXRjaChtZWUocywwKSl7Y2FzZVwiJFwiOnJldHVyblwiJFwiO2Nhc2VcIiZcIjpyZXR1cm4gZTtjYXNlXCJgXCI6cmV0dXJuIHdlZSh0LDAsbik7Y2FzZVwiJ1wiOnJldHVybiB3ZWUodCxhKTtjYXNlXCI8XCI6bD1vW3dlZShzLDEsLTEpXTticmVhaztkZWZhdWx0OnZhciBjPStzO2lmKDA9PT1jKXJldHVybiBpO2lmKGM+dSl7dmFyIGY9eWVlKGMvMTApO3JldHVybiAwPT09Zj9pOmY8PXU/dm9pZCAwPT09cltmLTFdP21lZShzLDEpOnJbZi0xXSttZWUocywxKTppfWw9cltjLTFdfXJldHVybiB2b2lkIDA9PT1sP1wiXCI6bH0pKX0seGVlPWw1LlR5cGVFcnJvcixDZWU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4ZWM7aWYoXzUobikpe3ZhciByPXA1KG4sZSx0KTtyZXR1cm4gbnVsbCE9PXImJk84KHIpLHJ9aWYoXCJSZWdFeHBcIj09PUM1KGUpKXJldHVybiBwNShyZWUsZSx0KTt0aHJvdyB4ZWUoXCJSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyXCIpfSxBZWU9ZzgoXCJyZXBsYWNlXCIpLE9lZT1NYXRoLm1heCxrZWU9TWF0aC5taW4sQmVlPUQ1KFtdLmNvbmNhdCksRmVlPUQ1KFtdLnB1c2gpLFRlZT1ENShcIlwiLmluZGV4T2YpLF9lZT1ENShcIlwiLnNsaWNlKSxQZWU9XCIkMFwiPT09XCJhXCIucmVwbGFjZSgvLi8sXCIkMFwiKSxqZWU9ISEvLi9bQWVlXSYmXCJcIj09PS8uL1tBZWVdKFwiYVwiLFwiJDBcIik7ZnVuY3Rpb24gTmVlKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1cInJcIiksZStcIi1cIitSaCgpfSFmdW5jdGlvbihlLHQsbixyKXt2YXIgbz1nOChlKSxpPSFjNSgoZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdFtvXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT1cIlwiW2VdKHQpfSkpLGE9aSYmIWM1KChmdW5jdGlvbigpe3ZhciBlPSExLHQ9L2EvO3JldHVybiB0LmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gZT0hMCxudWxsfSx0W29dKFwiXCIpLCFlfSkpO2lmKCFpfHwhYXx8bil7dmFyIHU9RDUoLy4vW29dKSxzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1qZWU/XCIkXCI6XCIkMFwiO3JldHVybltmdW5jdGlvbihlLG4pe3ZhciByPUY1KHRoaXMpLG89bnVsbD09ZT92b2lkIDA6WjUoZSxBZWUpO3JldHVybiBvP3A1KG8sZSxyLG4pOnA1KHQsUjcociksZSxuKX0sZnVuY3Rpb24oZSxvKXt2YXIgaT1POCh0aGlzKSxhPVI3KGUpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBvJiYtMT09PVRlZShvLHIpJiYtMT09PVRlZShvLFwiJDxcIikpe3ZhciB1PW4odCxpLGEsbyk7aWYodS5kb25lKXJldHVybiB1LnZhbHVlfXZhciBzPV81KG8pO3N8fChvPVI3KG8pKTt2YXIgbD1pLmdsb2JhbDtpZihsKXt2YXIgYz1pLnVuaWNvZGU7aS5sYXN0SW5kZXg9MH1mb3IodmFyIGY9W107Oyl7dmFyIGQ9Q2VlKGksYSk7aWYobnVsbD09PWQpYnJlYWs7aWYoRmVlKGYsZCksIWwpYnJlYWs7XCJcIj09PVI3KGRbMF0pJiYoaS5sYXN0SW5kZXg9dmVlKGEsczcoaS5sYXN0SW5kZXgpLGMpKX1mb3IodmFyIHAsaD1cIlwiLGc9MCx2PTA7djxmLmxlbmd0aDt2Kyspe2Zvcih2YXIgeT1SNygoZD1mW3ZdKVswXSksbT1PZWUoa2VlKHI3KGQuaW5kZXgpLGEubGVuZ3RoKSwwKSxiPVtdLHc9MTt3PGQubGVuZ3RoO3crKylGZWUoYix2b2lkIDA9PT0ocD1kW3ddKT9wOlN0cmluZyhwKSk7dmFyIEU9ZC5ncm91cHM7aWYocyl7dmFyIEQ9QmVlKFt5XSxiLG0sYSk7dm9pZCAwIT09RSYmRmVlKEQsRSk7dmFyIFM9Ujcoc2VlKG8sdm9pZCAwLEQpKX1lbHNlIFM9U2VlKHksYSxtLGIsRSxvKTttPj1nJiYoaCs9X2VlKGEsZyxtKStTLGc9bSt5Lmxlbmd0aCl9cmV0dXJuIGgrX2VlKGEsZyl9XX0oMCxcIlwiW2VdLChmdW5jdGlvbihlLHQsbixyLG8pe3ZhciBhPUQ1KGUpLHM9dC5leGVjO3JldHVybiBzPT09cmVlfHxzPT09bGVlLmV4ZWM/aSYmIW8/e2RvbmU6ITAsdmFsdWU6dSh0LG4scil9Ontkb25lOiEwLHZhbHVlOmEobix0LHIpfTp7ZG9uZTohMX19KSk7ZTcoU3RyaW5nLnByb3RvdHlwZSxlLHNbMF0pLGU3KGxlZSxvLHNbMV0pfX0oXCJyZXBsYWNlXCIsMCwhIWM1KChmdW5jdGlvbigpe3ZhciBlPS8uLztyZXR1cm4gZS5leGVjPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIGUuZ3JvdXBzPXthOlwiN1wifSxlfSxcIjdcIiE9PVwiXCIucmVwbGFjZShlLFwiJDxhPlwiKX0pKXx8IVBlZXx8amVlKTt2YXIgSWVlPWw1LlByb21pc2UsTGVlPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIgaW4gdCllNyhlLHIsdFtyXSxuKTtyZXR1cm4gZX0sUmVlPWw1LlN0cmluZyxNZWU9bDUuVHlwZUVycm9yLHplZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fChcIl9fcHJvdG9fX1wiaW57fT9mdW5jdGlvbigpe3ZhciBlLHQ9ITEsbj17fTt0cnl7KGU9RDUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLFwiX19wcm90b19fXCIpLnNldCkpKG4sW10pLHQ9biBpbnN0YW5jZW9mIEFycmF5fWNhdGNoKGUpe31yZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gTzgobiksZnVuY3Rpb24oZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV8fF81KGUpKXJldHVybiBlO3Rocm93IE1lZShcIkNhbid0IHNldCBcIitSZWUoZSkrXCIgYXMgYSBwcm90b3R5cGVcIil9KHIpLHQ/ZShuLHIpOm4uX19wcm90b19fPXIsbn19KCk6dm9pZCAwKSwkZWU9RjguZixIZWU9ZzgoXCJ0b1N0cmluZ1RhZ1wiKSxWZWU9ZnVuY3Rpb24oZSx0LG4pe2UmJiFhOChlPW4/ZTplLnByb3RvdHlwZSxIZWUpJiYkZWUoZSxIZWUse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp0fSl9LFVlZT1nOChcInNwZWNpZXNcIiksV2VlPWw1LlR5cGVFcnJvcixHZWU9ZnVuY3Rpb24oZSx0KXtpZihJNSh0LGUpKXJldHVybiBlO3Rocm93IFdlZShcIkluY29ycmVjdCBpbnZvY2F0aW9uXCIpfSxxZWU9e30sS2VlPWc4KFwiaXRlcmF0b3JcIiksWWVlPUFycmF5LnByb3RvdHlwZSxYZWU9ZzgoXCJpdGVyYXRvclwiKSxaZWU9ZnVuY3Rpb24oZSl7aWYobnVsbCE9ZSlyZXR1cm4gWjUoZSxYZWUpfHxaNShlLFwiQEBpdGVyYXRvclwiKXx8cWVlW0k3KGUpXX0sSmVlPWw1LlR5cGVFcnJvcixRZWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG87TzgoZSk7dHJ5e2lmKCEocj1aNShlLFwicmV0dXJuXCIpKSl7aWYoXCJ0aHJvd1wiPT09dCl0aHJvdyBuO3JldHVybiBufXI9cDUocixlKX1jYXRjaChlKXtvPSEwLHI9ZX1pZihcInRocm93XCI9PT10KXRocm93IG47aWYobyl0aHJvdyByO3JldHVybiBPOChyKSxufSxldGU9bDUuVHlwZUVycm9yLHR0ZT1mdW5jdGlvbihlLHQpe3RoaXMuc3RvcHBlZD1lLHRoaXMucmVzdWx0PXR9LG50ZT10dGUucHJvdG90eXBlLHJ0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpLGEsdSxzLGwsYyxmPW4mJm4udGhhdCxkPSEoIW58fCFuLkFTX0VOVFJJRVMpLHA9ISghbnx8IW4uSVNfSVRFUkFUT1IpLGg9ISghbnx8IW4uSU5URVJSVVBURUQpLGc9aDkodCxmKSx2PWZ1bmN0aW9uKGUpe3JldHVybiByJiZRZWUocixcIm5vcm1hbFwiLGUpLG5ldyB0dGUoITAsZSl9LHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGQ/KE84KGUpLGg/ZyhlWzBdLGVbMV0sdik6ZyhlWzBdLGVbMV0pKTpoP2coZSx2KTpnKGUpfTtpZihwKXI9ZTtlbHNle2lmKCEobz1aZWUoZSkpKXRocm93IGV0ZShLNShlKStcIiBpcyBub3QgaXRlcmFibGVcIik7aWYodm9pZCAwIT09KGM9bykmJihxZWUuQXJyYXk9PT1jfHxZZWVbS2VlXT09PWMpKXtmb3IoaT0wLGE9bDcoZSk7YT5pO2krKylpZigodT15KGVbaV0pKSYmSTUobnRlLHUpKXJldHVybiB1O3JldHVybiBuZXcgdHRlKCExKX1yPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwyP1plZShlKTp0O2lmKFg1KG4pKXJldHVybiBPOChwNShuLGUpKTt0aHJvdyBKZWUoSzUoZSkrXCIgaXMgbm90IGl0ZXJhYmxlXCIpfShlLG8pfWZvcihzPXIubmV4dDshKGw9cDUocyxyKSkuZG9uZTspe3RyeXt1PXkobC52YWx1ZSl9Y2F0Y2goZSl7UWVlKHIsXCJ0aHJvd1wiLGUpfWlmKFwib2JqZWN0XCI9PXR5cGVvZiB1JiZ1JiZJNShudGUsdSkpcmV0dXJuIHV9cmV0dXJuIG5ldyB0dGUoITEpfSxvdGU9ZzgoXCJpdGVyYXRvclwiKSxpdGU9ITE7dHJ5e3ZhciBhdGU9MCx1dGU9e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohIWF0ZSsrfX0scmV0dXJuOmZ1bmN0aW9uKCl7aXRlPSEwfX07dXRlW290ZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sQXJyYXkuZnJvbSh1dGUsKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaChNbCl7fXZhciBzdGUsbHRlLGN0ZSxmdGUsZHRlPWZ1bmN0aW9uKGUsdCl7aWYoIXQmJiFpdGUpcmV0dXJuITE7dmFyIG49ITE7dHJ5e3ZhciByPXt9O3Jbb3RlXT1mdW5jdGlvbigpe3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6bj0hMH19fX0sZShyKX1jYXRjaChlKXt9cmV0dXJuIG59LHB0ZT1sNS5UeXBlRXJyb3IsaHRlPWc4KFwic3BlY2llc1wiKSxndGU9RDUoW10uc2xpY2UpLHZ0ZT0vKD86aXBhZHxpcGhvbmV8aXBvZCkuKmFwcGxld2Via2l0L2kudGVzdChMNSkseXRlPVwicHJvY2Vzc1wiPT1DNShsNS5wcm9jZXNzKSxtdGU9bDUuc2V0SW1tZWRpYXRlLGJ0ZT1sNS5jbGVhckltbWVkaWF0ZSx3dGU9bDUucHJvY2VzcyxFdGU9bDUuRGlzcGF0Y2gsRHRlPWw1LkZ1bmN0aW9uLFN0ZT1sNS5NZXNzYWdlQ2hhbm5lbCx4dGU9bDUuU3RyaW5nLEN0ZT0wLEF0ZT17fTt0cnl7c3RlPWw1LmxvY2F0aW9ufWNhdGNoKE1sKXt9dmFyIE90ZT1mdW5jdGlvbihlKXtpZihhOChBdGUsZSkpe3ZhciB0PUF0ZVtlXTtkZWxldGUgQXRlW2VdLHQoKX19LGt0ZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtPdGUoZSl9fSxCdGU9ZnVuY3Rpb24oZSl7T3RlKGUuZGF0YSl9LEZ0ZT1mdW5jdGlvbihlKXtsNS5wb3N0TWVzc2FnZSh4dGUoZSksc3RlLnByb3RvY29sK1wiLy9cIitzdGUuaG9zdCl9O210ZSYmYnRlfHwobXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWd0ZShhcmd1bWVudHMsMSk7cmV0dXJuIEF0ZVsrK0N0ZV09ZnVuY3Rpb24oKXtzZWUoXzUoZSk/ZTpEdGUoZSksdm9pZCAwLHQpfSxsdGUoQ3RlKSxDdGV9LGJ0ZT1mdW5jdGlvbihlKXtkZWxldGUgQXRlW2VdfSx5dGU/bHRlPWZ1bmN0aW9uKGUpe3d0ZS5uZXh0VGljayhrdGUoZSkpfTpFdGUmJkV0ZS5ub3c/bHRlPWZ1bmN0aW9uKGUpe0V0ZS5ub3coa3RlKGUpKX06U3RlJiYhdnRlPyhmdGU9KGN0ZT1uZXcgU3RlKS5wb3J0MixjdGUucG9ydDEub25tZXNzYWdlPUJ0ZSxsdGU9aDkoZnRlLnBvc3RNZXNzYWdlLGZ0ZSkpOmw1LmFkZEV2ZW50TGlzdGVuZXImJl81KGw1LnBvc3RNZXNzYWdlKSYmIWw1LmltcG9ydFNjcmlwdHMmJnN0ZSYmXCJmaWxlOlwiIT09c3RlLnByb3RvY29sJiYhYzUoRnRlKT8obHRlPUZ0ZSxsNS5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLEJ0ZSwhMSkpOmx0ZT1cIm9ucmVhZHlzdGF0ZWNoYW5nZVwiaW4gRTgoXCJzY3JpcHRcIik/ZnVuY3Rpb24oZSl7dDkuYXBwZW5kQ2hpbGQoRTgoXCJzY3JpcHRcIikpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe3Q5LnJlbW92ZUNoaWxkKHRoaXMpLE90ZShlKX19OmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoa3RlKGUpLDApfSk7dmFyIFR0ZSxfdGUsUHRlLGp0ZSxOdGUsSXRlLEx0ZSxSdGUsTXRlPXtzZXQ6bXRlLGNsZWFyOmJ0ZX0senRlPS9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdChMNSkmJnZvaWQgMCE9PWw1LlBlYmJsZSwkdGU9L3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdChMNSksSHRlPXg4LmYsVnRlPU10ZS5zZXQsVXRlPWw1Lk11dGF0aW9uT2JzZXJ2ZXJ8fGw1LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsV3RlPWw1LmRvY3VtZW50LEd0ZT1sNS5wcm9jZXNzLHF0ZT1sNS5Qcm9taXNlLEt0ZT1IdGUobDUsXCJxdWV1ZU1pY3JvdGFza1wiKSxZdGU9S3RlJiZLdGUudmFsdWU7WXRlfHwoVHRlPWZ1bmN0aW9uKCl7dmFyIGUsdDtmb3IoeXRlJiYoZT1HdGUuZG9tYWluKSYmZS5leGl0KCk7X3RlOyl7dD1fdGUuZm4sX3RlPV90ZS5uZXh0O3RyeXt0KCl9Y2F0Y2goZSl7dGhyb3cgX3RlP2p0ZSgpOlB0ZT12b2lkIDAsZX19UHRlPXZvaWQgMCxlJiZlLmVudGVyKCl9LHZ0ZXx8eXRlfHwkdGV8fCFVdGV8fCFXdGU/IXp0ZSYmcXRlJiZxdGUucmVzb2x2ZT8oKEx0ZT1xdGUucmVzb2x2ZSh2b2lkIDApKS5jb25zdHJ1Y3Rvcj1xdGUsUnRlPWg5KEx0ZS50aGVuLEx0ZSksanRlPWZ1bmN0aW9uKCl7UnRlKFR0ZSl9KTp5dGU/anRlPWZ1bmN0aW9uKCl7R3RlLm5leHRUaWNrKFR0ZSl9OihWdGU9aDkoVnRlLGw1KSxqdGU9ZnVuY3Rpb24oKXtWdGUoVHRlKX0pOihOdGU9ITAsSXRlPVd0ZS5jcmVhdGVUZXh0Tm9kZShcIlwiKSxuZXcgVXRlKFR0ZSkub2JzZXJ2ZShJdGUse2NoYXJhY3RlckRhdGE6ITB9KSxqdGU9ZnVuY3Rpb24oKXtJdGUuZGF0YT1OdGU9IU50ZX0pKTt2YXIgWHRlLFp0ZSxKdGUsUXRlLGVuZT1ZdGV8fGZ1bmN0aW9uKGUpe3ZhciB0PXtmbjplLG5leHQ6dm9pZCAwfTtQdGUmJihQdGUubmV4dD10KSxfdGV8fChfdGU9dCxqdGUoKSksUHRlPXR9LHRuZT1mdW5jdGlvbihlKXt2YXIgdCxuO3RoaXMucHJvbWlzZT1uZXcgZSgoZnVuY3Rpb24oZSxyKXtpZih2b2lkIDAhPT10fHx2b2lkIDAhPT1uKXRocm93IFR5cGVFcnJvcihcIkJhZCBQcm9taXNlIGNvbnN0cnVjdG9yXCIpO3Q9ZSxuPXJ9KSksdGhpcy5yZXNvbHZlPVg1KHQpLHRoaXMucmVqZWN0PVg1KG4pfSxubmU9e2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0bmUoZSl9fSxybmU9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybntlcnJvcjohMSx2YWx1ZTplKCl9fWNhdGNoKGUpe3JldHVybntlcnJvcjohMCx2YWx1ZTplfX19LG9uZT1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93LGluZT1NdGUuc2V0LGFuZT1nOChcInNwZWNpZXNcIiksdW5lPVwiUHJvbWlzZVwiLHNuZT1ZOC5nZXR0ZXJGb3IodW5lKSxsbmU9WTguc2V0LGNuZT1ZOC5nZXR0ZXJGb3IodW5lKSxmbmU9SWVlJiZJZWUucHJvdG90eXBlLGRuZT1JZWUscG5lPWZuZSxobmU9bDUuVHlwZUVycm9yLGduZT1sNS5kb2N1bWVudCx2bmU9bDUucHJvY2Vzcyx5bmU9bm5lLmYsbW5lPXluZSxibmU9ISEoZ25lJiZnbmUuY3JlYXRlRXZlbnQmJmw1LmRpc3BhdGNoRXZlbnQpLHduZT1fNShsNS5Qcm9taXNlUmVqZWN0aW9uRXZlbnQpLEVuZT0hMSxEbmU9azcodW5lLChmdW5jdGlvbigpe3ZhciBlPUk4KGRuZSksdD1lIT09U3RyaW5nKGRuZSk7aWYoIXQmJjY2PT09SDUpcmV0dXJuITA7aWYoSDU+PTUxJiYvbmF0aXZlIGNvZGUvLnRlc3QoZSkpcmV0dXJuITE7dmFyIG49bmV3IGRuZSgoZnVuY3Rpb24oZSl7ZSgxKX0pKSxyPWZ1bmN0aW9uKGUpe2UoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKCl7fSkpfTtyZXR1cm4obi5jb25zdHJ1Y3Rvcj17fSlbYW5lXT1yLCEoRW5lPW4udGhlbigoZnVuY3Rpb24oKXt9KSlpbnN0YW5jZW9mIHIpfHwhdCYmb25lJiYhd25lfSkpLFNuZT1EbmV8fCFkdGUoKGZ1bmN0aW9uKGUpe2RuZS5hbGwoZSkuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpfSkpLHhuZT1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4hKCFQNShlKXx8IV81KHQ9ZS50aGVuKSkmJnR9LENuZT1mdW5jdGlvbihlLHQpe2lmKCFlLm5vdGlmaWVkKXtlLm5vdGlmaWVkPSEwO3ZhciBuPWUucmVhY3Rpb25zO2VuZSgoZnVuY3Rpb24oKXtmb3IodmFyIHI9ZS52YWx1ZSxvPTE9PWUuc3RhdGUsaT0wO24ubGVuZ3RoPmk7KXt2YXIgYSx1LHMsbD1uW2krK10sYz1vP2wub2s6bC5mYWlsLGY9bC5yZXNvbHZlLGQ9bC5yZWplY3QscD1sLmRvbWFpbjt0cnl7Yz8ob3x8KDI9PT1lLnJlamVjdGlvbiYmQm5lKGUpLGUucmVqZWN0aW9uPTEpLCEwPT09Yz9hPXI6KHAmJnAuZW50ZXIoKSxhPWMocikscCYmKHAuZXhpdCgpLHM9ITApKSxhPT09bC5wcm9taXNlP2QoaG5lKFwiUHJvbWlzZS1jaGFpbiBjeWNsZVwiKSk6KHU9eG5lKGEpKT9wNSh1LGEsZixkKTpmKGEpKTpkKHIpfWNhdGNoKGUpe3AmJiFzJiZwLmV4aXQoKSxkKGUpfX1lLnJlYWN0aW9ucz1bXSxlLm5vdGlmaWVkPSExLHQmJiFlLnJlamVjdGlvbiYmT25lKGUpfSkpfX0sQW5lPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvO2JuZT8oKHI9Z25lLmNyZWF0ZUV2ZW50KFwiRXZlbnRcIikpLnByb21pc2U9dCxyLnJlYXNvbj1uLHIuaW5pdEV2ZW50KGUsITEsITApLGw1LmRpc3BhdGNoRXZlbnQocikpOnI9e3Byb21pc2U6dCxyZWFzb246bn0sIXduZSYmKG89bDVbXCJvblwiK2VdKT9vKHIpOlwidW5oYW5kbGVkcmVqZWN0aW9uXCI9PT1lJiZmdW5jdGlvbihlLHQpe3ZhciBuPWw1LmNvbnNvbGU7biYmbi5lcnJvciYmKDE9PWFyZ3VtZW50cy5sZW5ndGg/bi5lcnJvcihlKTpuLmVycm9yKGUsdCkpfShcIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvblwiLG4pfSxPbmU9ZnVuY3Rpb24oZSl7cDUoaW5lLGw1LChmdW5jdGlvbigpe3ZhciB0LG49ZS5mYWNhZGUscj1lLnZhbHVlO2lmKGtuZShlKSYmKHQ9cm5lKChmdW5jdGlvbigpe3l0ZT92bmUuZW1pdChcInVuaGFuZGxlZFJlamVjdGlvblwiLHIsbik6QW5lKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsbixyKX0pKSxlLnJlamVjdGlvbj15dGV8fGtuZShlKT8yOjEsdC5lcnJvcikpdGhyb3cgdC52YWx1ZX0pKX0sa25lPWZ1bmN0aW9uKGUpe3JldHVybiAxIT09ZS5yZWplY3Rpb24mJiFlLnBhcmVudH0sQm5lPWZ1bmN0aW9uKGUpe3A1KGluZSxsNSwoZnVuY3Rpb24oKXt2YXIgdD1lLmZhY2FkZTt5dGU/dm5lLmVtaXQoXCJyZWplY3Rpb25IYW5kbGVkXCIsdCk6QW5lKFwicmVqZWN0aW9uaGFuZGxlZFwiLHQsZS52YWx1ZSl9KSl9LEZuZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe2UodCxyLG4pfX0sVG5lPWZ1bmN0aW9uKGUsdCxuKXtlLmRvbmV8fChlLmRvbmU9ITAsbiYmKGU9biksZS52YWx1ZT10LGUuc3RhdGU9MixDbmUoZSwhMCkpfSxfbmU9ZnVuY3Rpb24oZSx0LG4pe2lmKCFlLmRvbmUpe2UuZG9uZT0hMCxuJiYoZT1uKTt0cnl7aWYoZS5mYWNhZGU9PT10KXRocm93IGhuZShcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO3ZhciByPXhuZSh0KTtyP2VuZSgoZnVuY3Rpb24oKXt2YXIgbj17ZG9uZTohMX07dHJ5e3A1KHIsdCxGbmUoX25lLG4sZSksRm5lKFRuZSxuLGUpKX1jYXRjaCh0KXtUbmUobix0LGUpfX0pKTooZS52YWx1ZT10LGUuc3RhdGU9MSxDbmUoZSwhMSkpfWNhdGNoKHQpe1RuZSh7ZG9uZTohMX0sdCxlKX19fTtpZihEbmUmJihwbmU9KGRuZT1mdW5jdGlvbihlKXtHZWUodGhpcyxwbmUpLFg1KGUpLHA1KFh0ZSx0aGlzKTt2YXIgdD1zbmUodGhpcyk7dHJ5e2UoRm5lKF9uZSx0KSxGbmUoVG5lLHQpKX1jYXRjaChlKXtUbmUodCxlKX19KS5wcm90b3R5cGUsKFh0ZT1mdW5jdGlvbihlKXtsbmUodGhpcyx7dHlwZTp1bmUsZG9uZTohMSxub3RpZmllZDohMSxwYXJlbnQ6ITEscmVhY3Rpb25zOltdLHJlamVjdGlvbjohMSxzdGF0ZTowLHZhbHVlOnZvaWQgMH0pfSkucHJvdG90eXBlPUxlZShwbmUse3RoZW46ZnVuY3Rpb24oZSx0KXt2YXIgbj1jbmUodGhpcykscj1uLnJlYWN0aW9ucyxvPXluZShmdW5jdGlvbihlLHQpe3ZhciBuLHI9TzgoZSkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PXJ8fG51bGw9PShuPU84KHIpW2h0ZV0pP3Q6ZnVuY3Rpb24oZSl7aWYoUzkoZSkpcmV0dXJuIGU7dGhyb3cgcHRlKEs1KGUpK1wiIGlzIG5vdCBhIGNvbnN0cnVjdG9yXCIpfShuKX0odGhpcyxkbmUpKTtyZXR1cm4gby5vaz0hXzUoZSl8fGUsby5mYWlsPV81KHQpJiZ0LG8uZG9tYWluPXl0ZT92bmUuZG9tYWluOnZvaWQgMCxuLnBhcmVudD0hMCxyW3IubGVuZ3RoXT1vLDAhPW4uc3RhdGUmJkNuZShuLCExKSxvLnByb21pc2V9LGNhdGNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLGUpfX0pLFp0ZT1mdW5jdGlvbigpe3ZhciBlPW5ldyBYdGUsdD1zbmUoZSk7dGhpcy5wcm9taXNlPWUsdGhpcy5yZXNvbHZlPUZuZShfbmUsdCksdGhpcy5yZWplY3Q9Rm5lKFRuZSx0KX0sbm5lLmY9eW5lPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09ZG5lfHxlPT09SnRlP25ldyBadGUoZSk6bW5lKGUpfSxfNShJZWUpJiZmbmUhPT1PYmplY3QucHJvdG90eXBlKSl7UXRlPWZuZS50aGVuLEVuZXx8KGU3KGZuZSxcInRoZW5cIiwoZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybiBuZXcgZG5lKChmdW5jdGlvbihlLHQpe3A1KFF0ZSxuLGUsdCl9KSkudGhlbihlLHQpfSkse3Vuc2FmZTohMH0pLGU3KGZuZSxcImNhdGNoXCIscG5lLmNhdGNoLHt1bnNhZmU6ITB9KSk7dHJ5e2RlbGV0ZSBmbmUuY29uc3RydWN0b3J9Y2F0Y2goTWwpe316ZWUmJnplZShmbmUscG5lKX1mdW5jdGlvbiBQbmUoZSx0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj1cIlwiKSxlNSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIHIsbyxpLGEsdSxzLGw7cmV0dXJuIHQ1KHRoaXMsKGZ1bmN0aW9uKGMpe3N3aXRjaChjLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHQ/KGUucmVzdG9yZVNlbGVjdGlvbigpLHI9ZS5nZXRNZW51Q29uZmlnKFwiaW5zZXJ0VmlkZW9cIiksbz1yLm9uSW5zZXJ0ZWRWaWRlbyxpPXIuY2hlY2tWaWRlbyxhPXIucGFyc2VWaWRlb1NyYyxbNCxpKHQsbildKTpbMl07Y2FzZSAxOnJldHVyblwic3RyaW5nXCI9PXR5cGVvZih1PWMuc2VudCgpKT8oZS5hbGVydCh1LFwiZXJyb3JcIiksWzJdKTpudWxsPT11P1syXTpbNCxhKHQpXTtjYXNlIDI6cmV0dXJuIDAhPT0ocz1jLnNlbnQoKSkudHJpbSgpLmluZGV4T2YoXCI8aWZyYW1lIFwiKSYmKHM9cy5yZXBsYWNlKC88L2csXCImbHQ7XCIpLnJlcGxhY2UoLz4vZyxcIiZndDtcIikpLGw9e3R5cGU6XCJ2aWRlb1wiLHNyYzpzLHBvc3RlcjpuLGNoaWxkcmVuOlt7dGV4dDpcIlwifV19LFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKGZ1bmN0aW9uKCl7bWQuaW5zZXJ0Tm9kZXMoZSxsKX0pKSxvKGwpLFsyXX19KSl9KSl9ZnVuY3Rpb24gam5lKCl7cmV0dXJuIE5lZShcInctZS1pbnNlcnQtdmlkZW9cIil9Rjcoe2dsb2JhbDohMCx3cmFwOiEwLGZvcmNlZDpEbmV9LHtQcm9taXNlOmRuZX0pLFZlZShkbmUsdW5lLCExKSxmdW5jdGlvbihlKXt2YXIgdD1ONShcIlByb21pc2VcIiksbj1GOC5mO2Y1JiZ0JiYhdFtVZWVdJiZuKHQsVWVlLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9KCksSnRlPU41KHVuZSksRjcoe3RhcmdldDp1bmUsc3RhdDohMCxmb3JjZWQ6RG5lfSx7cmVqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0PXluZSh0aGlzKTtyZXR1cm4gcDUodC5yZWplY3Qsdm9pZCAwLGUpLHQucHJvbWlzZX19KSxGNyh7dGFyZ2V0OnVuZSxzdGF0OiEwLGZvcmNlZDpEbmV9LHtyZXNvbHZlOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKE84KGUpLFA1KHQpJiZ0LmNvbnN0cnVjdG9yPT09ZSlyZXR1cm4gdDt2YXIgbj1ubmUuZihlKTtyZXR1cm4oMCxuLnJlc29sdmUpKHQpLG4ucHJvbWlzZX0odGhpcyxlKX19KSxGNyh7dGFyZ2V0OnVuZSxzdGF0OiEwLGZvcmNlZDpTbmV9LHthbGw6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXluZSh0KSxyPW4ucmVzb2x2ZSxvPW4ucmVqZWN0LGk9cm5lKChmdW5jdGlvbigpe3ZhciBuPVg1KHQucmVzb2x2ZSksaT1bXSxhPTAsdT0xO3J0ZShlLChmdW5jdGlvbihlKXt2YXIgcz1hKyssbD0hMTt1KysscDUobix0LGUpLnRoZW4oKGZ1bmN0aW9uKGUpe2x8fChsPSEwLGlbc109ZSwtLXV8fHIoaSkpfSksbyl9KSksLS11fHxyKGkpfSkpO3JldHVybiBpLmVycm9yJiZvKGkudmFsdWUpLG4ucHJvbWlzZX0scmFjZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49eW5lKHQpLHI9bi5yZWplY3Qsbz1ybmUoKGZ1bmN0aW9uKCl7dmFyIG89WDUodC5yZXNvbHZlKTtydGUoZSwoZnVuY3Rpb24oZSl7cDUobyx0LGUpLnRoZW4obi5yZXNvbHZlLHIpfSkpfSkpO3JldHVybiBvLmVycm9yJiZyKG8udmFsdWUpLG4ucHJvbWlzZX19KTt2YXIgTm5lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMudGl0bGU9SFAoXCJ2aWRlb01vZHVsZS5pbnNlcnRWaWRlb1wiKSx0aGlzLmljb25Tdmc9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTk4MS4xODQgMTYwLjA5NkM4MzcuNTY4IDEzOS40NTYgNjc4Ljg0OCAxMjggNTEyIDEyOFMxODYuNDMyIDEzOS40NTYgNDIuODE2IDE2MC4wOTZDMTUuMjk2IDI2Ny44MDggMCAzODYuODQ4IDAgNTEyczE1LjI2NCAyNDQuMTYgNDIuODE2IDM1MS45MDRDMTg2LjQ2NCA4ODQuNTQ0IDM0NS4xNTIgODk2IDUxMiA4OTZzMzI1LjU2OC0xMS40NTYgNDY5LjE4NC0zMi4wOTZDMTAwOC43MDQgNzU2LjE5MiAxMDI0IDYzNy4xNTIgMTAyNCA1MTJzLTE1LjI2NC0yNDQuMTYtNDIuODE2LTM1MS45MDR6TTM4NCA3MDRWMzIwbDMyMCAxOTItMzIwIDE5MnpcIj48L3BhdGg+PC9zdmc+Jyx0aGlzLnRhZz1cImJ1dHRvblwiLHRoaXMuc2hvd01vZGFsPSEwLHRoaXMubW9kYWxXaWR0aD0zMjAsdGhpcy4kY29udGVudD1udWxsLHRoaXMuc3JjSW5wdXRJZD1qbmUoKSx0aGlzLnBvc3RlcklucHV0SWQ9am5lKCksdGhpcy5idXR0b25JZD1qbmUoKX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXt9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWxlY3Rpb247cmV0dXJuIG51bGw9PXR8fCFxZi5pc0NvbGxhcHNlZCh0KXx8ISFRTy5nZXRTZWxlY3RlZEVsZW1zKGUpLnNvbWUoKGZ1bmN0aW9uKHQpe3ZhciBuPVFPLmdldE5vZGVUeXBlKHQpO3JldHVyblwicHJlXCI9PT1ufHxcImxpc3QtaXRlbVwiPT09bnx8ISFlLmlzVm9pZCh0KX0pKX0sZS5wcm90b3R5cGUuZ2V0TW9kYWxQb3NpdGlvbk5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLmdldE1vZGFsQ29udGVudEVsZW09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMscj1uLnNyY0lucHV0SWQsbz1uLnBvc3RlcklucHV0SWQsaT1uLmJ1dHRvbklkLGE9bjUoU18oSFAoXCJ2aWRlb01vZHVsZS52aWRlb1NyY1wiKSxyLEhQKFwidmlkZW9Nb2R1bGUudmlkZW9TcmNQbGFjZUhvbGRlclwiKSksMiksdT1hWzBdLHM9YVsxXSxsPW41KFNfKEhQKFwidmlkZW9Nb2R1bGUudmlkZW9Qb3N0ZXJcIiksbyxIUChcInZpZGVvTW9kdWxlLnZpZGVvUG9zdGVyUGxhY2VIb2xkZXJcIikpLDIpLGM9bFswXSxmPWxbMV0sZD1NcChzKSxwPU1wKGYpLGg9bjUoQ18oaSxIUChcInZpZGVvTW9kdWxlLm9rXCIpKSwxKVswXTtpZihudWxsPT10aGlzLiRjb250ZW50KXt2YXIgZz1NcChcIjxkaXY+PC9kaXY+XCIpO2cub24oXCJjbGlja1wiLFwiI1wiK2ksKGZ1bmN0aW9uKG4pe3JldHVybiBlNSh0LHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIHQsaTtyZXR1cm4gdDUodGhpcywoZnVuY3Rpb24oYSl7c3dpdGNoKGEubGFiZWwpe2Nhc2UgMDpyZXR1cm4gbi5wcmV2ZW50RGVmYXVsdCgpLHQ9Zy5maW5kKFwiI1wiK3IpLnZhbCgpLnRyaW0oKSxpPWcuZmluZChcIiNcIitvKS52YWwoKS50cmltKCksWzQsUG5lKGUsdCxpKV07Y2FzZSAxOnJldHVybiBhLnNlbnQoKSxlLmhpZGVQYW5lbE9yTW9kYWwoKSxbMl19fSkpfSkpfSkpLHRoaXMuJGNvbnRlbnQ9Z312YXIgdj10aGlzLiRjb250ZW50O3JldHVybiB2LmVtcHR5KCksdi5hcHBlbmQodSksdi5hcHBlbmQoYyksdi5hcHBlbmQoaCksZC52YWwoXCJcIikscC52YWwoXCJcIiksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtkLmZvY3VzKCl9KSksdlswXX0sZX0oKSxJbmU9RDUoW10uam9pbiksTG5lPWs1IT1PYmplY3QsUm5lPWZ1bmN0aW9uKGUsdCl7dmFyIG49W10uam9pbjtyZXR1cm4hIW4mJmM1KChmdW5jdGlvbigpe24uY2FsbChudWxsLFwiLFwiLDEpfSkpfSgpO0Y3KHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwLGZvcmNlZDpMbmV8fCFSbmV9LHtqb2luOmZ1bmN0aW9uKGUpe3JldHVybiBJbmUoVDUodGhpcyksdm9pZCAwPT09ZT9cIixcIjplKX19KTt2YXIgTW5lLHpuZSwkbmUsSG5lPSFjNSgoZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgZSkhPT1lLnByb3RvdHlwZX0pKSxWbmU9ejgoXCJJRV9QUk9UT1wiKSxVbmU9bDUuT2JqZWN0LFduZT1VbmUucHJvdG90eXBlLEduZT1IbmU/VW5lLmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3ZhciB0PW84KGUpO2lmKGE4KHQsVm5lKSlyZXR1cm4gdFtWbmVdO3ZhciBuPXQuY29uc3RydWN0b3I7cmV0dXJuIF81KG4pJiZ0IGluc3RhbmNlb2Ygbj9uLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgVW5lP1duZTpudWxsfSxxbmU9ZzgoXCJpdGVyYXRvclwiKSxLbmU9ITE7W10ua2V5cyYmKFwibmV4dFwiaW4oJG5lPVtdLmtleXMoKSk/KHpuZT1HbmUoR25lKCRuZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJihNbmU9em5lKTpLbmU9ITApO3ZhciBZbmU9bnVsbD09TW5lfHxjNSgoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gTW5lW3FuZV0uY2FsbChlKSE9PWV9KSk7WW5lJiYoTW5lPXt9KSxfNShNbmVbcW5lXSl8fGU3KE1uZSxxbmUsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIFhuZT17SXRlcmF0b3JQcm90b3R5cGU6TW5lLEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6S25lfSxabmU9WG5lLkl0ZXJhdG9yUHJvdG90eXBlLEpuZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxRbmU9UTguUFJPUEVSLGVyZT1ROC5DT05GSUdVUkFCTEUsdHJlPVhuZS5JdGVyYXRvclByb3RvdHlwZSxucmU9WG5lLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMscnJlPWc4KFwiaXRlcmF0b3JcIiksb3JlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGlyZT1mdW5jdGlvbihlLHQsbixyLG8saSxhKXshZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dCtcIiBJdGVyYXRvclwiO2UucHJvdG90eXBlPXU5KFpuZSx7bmV4dDp5NSgxLG4pfSksVmVlKGUsbywhMSkscWVlW29dPUpuZX0obix0LHIpO3ZhciB1LHMsbCxjPWZ1bmN0aW9uKGUpe2lmKGU9PT1vJiZnKXJldHVybiBnO2lmKCFucmUmJmUgaW4gcClyZXR1cm4gcFtlXTtzd2l0Y2goZSl7Y2FzZVwia2V5c1wiOmNhc2VcInZhbHVlc1wiOmNhc2VcImVudHJpZXNcIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMpfX0sZj10K1wiIEl0ZXJhdG9yXCIsZD0hMSxwPWUucHJvdG90eXBlLGg9cFtycmVdfHxwW1wiQEBpdGVyYXRvclwiXXx8byYmcFtvXSxnPSFucmUmJmh8fGMobyksdj1cIkFycmF5XCI9PXQmJnAuZW50cmllc3x8aDtpZih2JiYodT1HbmUodi5jYWxsKG5ldyBlKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmdS5uZXh0JiYoR25lKHUpIT09dHJlJiYoemVlP3plZSh1LHRyZSk6XzUodVtycmVdKXx8ZTcodSxycmUsb3JlKSksVmVlKHUsZiwhMCkpLFFuZSYmXCJ2YWx1ZXNcIj09byYmaCYmXCJ2YWx1ZXNcIiE9PWgubmFtZSYmKGVyZT9UOChwLFwibmFtZVwiLFwidmFsdWVzXCIpOihkPSEwLGc9ZnVuY3Rpb24oKXtyZXR1cm4gcDUoaCx0aGlzKX0pKSxvKWlmKHM9e3ZhbHVlczpjKFwidmFsdWVzXCIpLGtleXM6aT9nOmMoXCJrZXlzXCIpLGVudHJpZXM6YyhcImVudHJpZXNcIil9LGEpZm9yKGwgaW4gcykobnJlfHxkfHwhKGwgaW4gcCkpJiZlNyhwLGwsc1tsXSk7ZWxzZSBGNyh7dGFyZ2V0OnQscHJvdG86ITAsZm9yY2VkOm5yZXx8ZH0scyk7cmV0dXJuIHBbcnJlXSE9PWcmJmU3KHAscnJlLGcse25hbWU6b30pLHFlZVt0XT1nLHN9LGFyZT1ZOC5zZXQsdXJlPVk4LmdldHRlckZvcihcIkFycmF5IEl0ZXJhdG9yXCIpLHNyZT1pcmUoQXJyYXksXCJBcnJheVwiLChmdW5jdGlvbihlLHQpe2FyZSh0aGlzLHt0eXBlOlwiQXJyYXkgSXRlcmF0b3JcIix0YXJnZXQ6VDUoZSksaW5kZXg6MCxraW5kOnR9KX0pLChmdW5jdGlvbigpe3ZhciBlPXVyZSh0aGlzKSx0PWUudGFyZ2V0LG49ZS5raW5kLHI9ZS5pbmRleCsrO3JldHVybiF0fHxyPj10Lmxlbmd0aD8oZS50YXJnZXQ9dm9pZCAwLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pOlwia2V5c1wiPT1uP3t2YWx1ZTpyLGRvbmU6ITF9OlwidmFsdWVzXCI9PW4/e3ZhbHVlOnRbcl0sZG9uZTohMX06e3ZhbHVlOltyLHRbcl1dLGRvbmU6ITF9fSksXCJ2YWx1ZXNcIik7cWVlLkFyZ3VtZW50cz1xZWUuQXJyYXksYzkoXCJrZXlzXCIpLGM5KFwidmFsdWVzXCIpLGM5KFwiZW50cmllc1wiKTt2YXIgbHJlPWhlZS5jaGFyQXQsY3JlPVk4LnNldCxmcmU9WTguZ2V0dGVyRm9yKFwiU3RyaW5nIEl0ZXJhdG9yXCIpO2lyZShTdHJpbmcsXCJTdHJpbmdcIiwoZnVuY3Rpb24oZSl7Y3JlKHRoaXMse3R5cGU6XCJTdHJpbmcgSXRlcmF0b3JcIixzdHJpbmc6UjcoZSksaW5kZXg6MH0pfSksKGZ1bmN0aW9uKCl7dmFyIGUsdD1mcmUodGhpcyksbj10LnN0cmluZyxyPXQuaW5kZXg7cmV0dXJuIHI+PW4ubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KGU9bHJlKG4sciksdC5pbmRleCs9ZS5sZW5ndGgse3ZhbHVlOmUsZG9uZTohMX0pfSkpO3ZhciBkcmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW04KHQpO3IgaW4gZT9GOC5mKGUscix5NSgwLG4pKTplW3JdPW59LHByZT1sNS5BcnJheSxocmU9TWF0aC5tYXgsZ3JlPXk3LmYsdnJlPVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXSx5cmU9e2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIHZyZSYmXCJXaW5kb3dcIj09QzUoZSk/ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBncmUoZSl9Y2F0Y2goZSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bDcoZSksbz1hNyh2b2lkIDAsciksaT1hNyhyLHIpLGE9cHJlKGhyZShpLW8sMCkpLHU9MDtvPGk7bysrLHUrKylkcmUoYSx1LGVbb10pO3JldHVybiBhLmxlbmd0aD11LGF9KHZyZSl9fShlKTpncmUoVDUoZSkpfX0sbXJlPWM1KChmdW5jdGlvbigpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIEFycmF5QnVmZmVyKXt2YXIgZT1uZXcgQXJyYXlCdWZmZXIoOCk7T2JqZWN0LmlzRXh0ZW5zaWJsZShlKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJhXCIse3ZhbHVlOjh9KX19KSksYnJlPU9iamVjdC5pc0V4dGVuc2libGUsd3JlPWM1KChmdW5jdGlvbigpe2JyZSgxKX0pKXx8bXJlP2Z1bmN0aW9uKGUpe3JldHVybiEhUDUoZSkmJighbXJlfHxcIkFycmF5QnVmZmVyXCIhPUM1KGUpKSYmKCFicmV8fGJyZShlKSl9OmJyZSxFcmU9IWM1KChmdW5jdGlvbigpe3JldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSkpLERyZT1pNSgoZnVuY3Rpb24oZSl7dmFyIHQ9RjguZixuPSExLHI9YzgoXCJtZXRhXCIpLG89MCxpPWZ1bmN0aW9uKGUpe3QoZSxyLHt2YWx1ZTp7b2JqZWN0SUQ6XCJPXCIrbysrLHdlYWtEYXRhOnt9fX0pfSxhPWUuZXhwb3J0cz17ZW5hYmxlOmZ1bmN0aW9uKCl7YS5lbmFibGU9ZnVuY3Rpb24oKXt9LG49ITA7dmFyIGU9eTcuZix0PUQ1KFtdLnNwbGljZSksbz17fTtvW3JdPTEsZShvKS5sZW5ndGgmJih5Ny5mPWZ1bmN0aW9uKG4pe2Zvcih2YXIgbz1lKG4pLGk9MCxhPW8ubGVuZ3RoO2k8YTtpKyspaWYob1tpXT09PXIpe3QobyxpLDEpO2JyZWFrfXJldHVybiBvfSxGNyh7dGFyZ2V0OlwiT2JqZWN0XCIsc3RhdDohMCxmb3JjZWQ6ITB9LHtnZXRPd25Qcm9wZXJ0eU5hbWVzOnlyZS5mfSkpfSxmYXN0S2V5OmZ1bmN0aW9uKGUsdCl7aWYoIVA1KGUpKXJldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlP2U6KFwic3RyaW5nXCI9PXR5cGVvZiBlP1wiU1wiOlwiUFwiKStlO2lmKCFhOChlLHIpKXtpZighd3JlKGUpKXJldHVyblwiRlwiO2lmKCF0KXJldHVyblwiRVwiO2koZSl9cmV0dXJuIGVbcl0ub2JqZWN0SUR9LGdldFdlYWtEYXRhOmZ1bmN0aW9uKGUsdCl7aWYoIWE4KGUscikpe2lmKCF3cmUoZSkpcmV0dXJuITA7aWYoIXQpcmV0dXJuITE7aShlKX1yZXR1cm4gZVtyXS53ZWFrRGF0YX0sb25GcmVlemU6ZnVuY3Rpb24oZSl7cmV0dXJuIEVyZSYmbiYmd3JlKGUpJiYhYTgoZSxyKSYmaShlKSxlfX07JDhbcl09ITB9KSksU3JlPURyZS5nZXRXZWFrRGF0YSx4cmU9WTguc2V0LENyZT1ZOC5nZXR0ZXJGb3IsQXJlPUI5LmZpbmQsT3JlPUI5LmZpbmRJbmRleCxrcmU9RDUoW10uc3BsaWNlKSxCcmU9MCxGcmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZnJvemVufHwoZS5mcm96ZW49bmV3IFRyZSl9LFRyZT1mdW5jdGlvbigpe3RoaXMuZW50cmllcz1bXX0sX3JlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEFyZShlLmVudHJpZXMsKGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09dH0pKX07VHJlLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PV9yZSh0aGlzLGUpO2lmKHQpcmV0dXJuIHRbMV19LGhhczpmdW5jdGlvbihlKXtyZXR1cm4hIV9yZSh0aGlzLGUpfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1fcmUodGhpcyxlKTtuP25bMV09dDp0aGlzLmVudHJpZXMucHVzaChbZSx0XSl9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgdD1PcmUodGhpcy5lbnRyaWVzLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PWV9KSk7cmV0dXJufnQmJmtyZSh0aGlzLmVudHJpZXMsdCwxKSwhIX50fX07dmFyIFByZSxqcmU9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWUoKGZ1bmN0aW9uKGUsbyl7R2VlKGUsaSkseHJlKGUse3R5cGU6dCxpZDpCcmUrKyxmcm96ZW46dm9pZCAwfSksbnVsbCE9byYmcnRlKG8sZVtyXSx7dGhhdDplLEFTX0VOVFJJRVM6bn0pfSkpLGk9by5wcm90b3R5cGUsYT1DcmUodCksdT1mdW5jdGlvbihlLHQsbil7dmFyIHI9YShlKSxvPVNyZShPOCh0KSwhMCk7cmV0dXJuITA9PT1vP0ZyZShyKS5zZXQodCxuKTpvW3IuaWRdPW4sZX07cmV0dXJuIExlZShpLHtkZWxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ9YSh0aGlzKTtpZighUDUoZSkpcmV0dXJuITE7dmFyIG49U3JlKGUpO3JldHVybiEwPT09bj9GcmUodCkuZGVsZXRlKGUpOm4mJmE4KG4sdC5pZCkmJmRlbGV0ZSBuW3QuaWRdfSxoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9YSh0aGlzKTtpZighUDUoZSkpcmV0dXJuITE7dmFyIG49U3JlKGUpO3JldHVybiEwPT09bj9GcmUodCkuaGFzKGUpOm4mJmE4KG4sdC5pZCl9fSksTGVlKGksbj97Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWEodGhpcyk7aWYoUDUoZSkpe3ZhciBuPVNyZShlKTtyZXR1cm4hMD09PW4/RnJlKHQpLmdldChlKTpuP25bdC5pZF06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUodGhpcyxlLHQpfX06e2FkZDpmdW5jdGlvbihlKXtyZXR1cm4gdSh0aGlzLGUsITApfX0pLG99fSxOcmU9WTguZW5mb3JjZSxJcmU9IWw1LkFjdGl2ZVhPYmplY3QmJlwiQWN0aXZlWE9iamVjdFwiaW4gbDUsTHJlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19LFJyZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9LTEhPT1lLmluZGV4T2YoXCJNYXBcIiksbz0tMSE9PWUuaW5kZXhPZihcIldlYWtcIiksaT1yP1wic2V0XCI6XCJhZGRcIixhPWw1W2VdLHU9YSYmYS5wcm90b3R5cGUscz1hLGw9e30sYz1mdW5jdGlvbihlKXt2YXIgdD1ENSh1W2VdKTtlNyh1LGUsXCJhZGRcIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLDA9PT1lPzA6ZSksdGhpc306XCJkZWxldGVcIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKG8mJiFQNShlKSkmJnQodGhpcywwPT09ZT8wOmUpfTpcImdldFwiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiBvJiYhUDUoZSk/dm9pZCAwOnQodGhpcywwPT09ZT8wOmUpfTpcImhhc1wiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiEobyYmIVA1KGUpKSYmdCh0aGlzLDA9PT1lPzA6ZSl9OmZ1bmN0aW9uKGUsbil7cmV0dXJuIHQodGhpcywwPT09ZT8wOmUsbiksdGhpc30pfTtpZihrNyhlLCFfNShhKXx8IShvfHx1LmZvckVhY2gmJiFjNSgoZnVuY3Rpb24oKXsobmV3IGEpLmVudHJpZXMoKS5uZXh0KCl9KSkpKSlzPW4uZ2V0Q29uc3RydWN0b3IodCxlLHIsaSksRHJlLmVuYWJsZSgpO2Vsc2UgaWYoazcoZSwhMCkpe3ZhciBmPW5ldyBzLGQ9ZltpXShvP3t9Oi0wLDEpIT1mLHA9YzUoKGZ1bmN0aW9uKCl7Zi5oYXMoMSl9KSksaD1kdGUoKGZ1bmN0aW9uKGUpe25ldyBhKGUpfSkpLGc9IW8mJmM1KChmdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgYSx0PTU7dC0tOyllW2ldKHQsdCk7cmV0dXJuIWUuaGFzKC0wKX0pKTtofHwoKHM9dCgoZnVuY3Rpb24oZSx0KXtHZWUoZSx1KTt2YXIgbj1mdW5jdGlvbihlLHQsbil7dmFyIHIsbztyZXR1cm4gemVlJiZfNShyPXQuY29uc3RydWN0b3IpJiZyIT09biYmUDUobz1yLnByb3RvdHlwZSkmJm8hPT1uLnByb3RvdHlwZSYmemVlKGUsbyksZX0obmV3IGEsZSxzKTtyZXR1cm4gbnVsbCE9dCYmcnRlKHQsbltpXSx7dGhhdDpuLEFTX0VOVFJJRVM6cn0pLG59KSkpLnByb3RvdHlwZT11LHUuY29uc3RydWN0b3I9cyksKHB8fGcpJiYoYyhcImRlbGV0ZVwiKSxjKFwiaGFzXCIpLHImJmMoXCJnZXRcIikpLChnfHxkKSYmYyhpKSxvJiZ1LmNsZWFyJiZkZWxldGUgdS5jbGVhcn1yZXR1cm4gbFtlXT1zLEY3KHtnbG9iYWw6ITAsZm9yY2VkOnMhPWF9LGwpLFZlZShzLGUpLG98fG4uc2V0U3Ryb25nKHMsZSxyKSxzfShcIldlYWtNYXBcIixMcmUsanJlKTtpZihSOCYmSXJlKXtQcmU9anJlLmdldENvbnN0cnVjdG9yKExyZSxcIldlYWtNYXBcIiwhMCksRHJlLmVuYWJsZSgpO3ZhciBNcmU9UnJlLnByb3RvdHlwZSx6cmU9RDUoTXJlLmRlbGV0ZSksJHJlPUQ1KE1yZS5oYXMpLEhyZT1ENShNcmUuZ2V0KSxWcmU9RDUoTXJlLnNldCk7TGVlKE1yZSx7ZGVsZXRlOmZ1bmN0aW9uKGUpe2lmKFA1KGUpJiYhd3JlKGUpKXt2YXIgdD1OcmUodGhpcyk7cmV0dXJuIHQuZnJvemVufHwodC5mcm96ZW49bmV3IFByZSksenJlKHRoaXMsZSl8fHQuZnJvemVuLmRlbGV0ZShlKX1yZXR1cm4genJlKHRoaXMsZSl9LGhhczpmdW5jdGlvbihlKXtpZihQNShlKSYmIXdyZShlKSl7dmFyIHQ9TnJlKHRoaXMpO3JldHVybiB0LmZyb3plbnx8KHQuZnJvemVuPW5ldyBQcmUpLCRyZSh0aGlzLGUpfHx0LmZyb3plbi5oYXMoZSl9cmV0dXJuICRyZSh0aGlzLGUpfSxnZXQ6ZnVuY3Rpb24oZSl7aWYoUDUoZSkmJiF3cmUoZSkpe3ZhciB0PU5yZSh0aGlzKTtyZXR1cm4gdC5mcm96ZW58fCh0LmZyb3plbj1uZXcgUHJlKSwkcmUodGhpcyxlKT9IcmUodGhpcyxlKTp0LmZyb3plbi5nZXQoZSl9cmV0dXJuIEhyZSh0aGlzLGUpfSxzZXQ6ZnVuY3Rpb24oZSx0KXtpZihQNShlKSYmIXdyZShlKSl7dmFyIG49TnJlKHRoaXMpO24uZnJvemVufHwobi5mcm96ZW49bmV3IFByZSksJHJlKHRoaXMsZSk/VnJlKHRoaXMsZSx0KTpuLmZyb3plbi5zZXQoZSx0KX1lbHNlIFZyZSh0aGlzLGUsdCk7cmV0dXJuIHRoaXN9fSl9dmFyIFVyZT17Q1NTUnVsZUxpc3Q6MCxDU1NTdHlsZURlY2xhcmF0aW9uOjAsQ1NTVmFsdWVMaXN0OjAsQ2xpZW50UmVjdExpc3Q6MCxET01SZWN0TGlzdDowLERPTVN0cmluZ0xpc3Q6MCxET01Ub2tlbkxpc3Q6MSxEYXRhVHJhbnNmZXJJdGVtTGlzdDowLEZpbGVMaXN0OjAsSFRNTEFsbENvbGxlY3Rpb246MCxIVE1MQ29sbGVjdGlvbjowLEhUTUxGb3JtRWxlbWVudDowLEhUTUxTZWxlY3RFbGVtZW50OjAsTWVkaWFMaXN0OjAsTWltZVR5cGVBcnJheTowLE5hbWVkTm9kZU1hcDowLE5vZGVMaXN0OjEsUGFpbnRSZXF1ZXN0TGlzdDowLFBsdWdpbjowLFBsdWdpbkFycmF5OjAsU1ZHTGVuZ3RoTGlzdDowLFNWR051bWJlckxpc3Q6MCxTVkdQYXRoU2VnTGlzdDowLFNWR1BvaW50TGlzdDowLFNWR1N0cmluZ0xpc3Q6MCxTVkdUcmFuc2Zvcm1MaXN0OjAsU291cmNlQnVmZmVyTGlzdDowLFN0eWxlU2hlZXRMaXN0OjAsVGV4dFRyYWNrQ3VlTGlzdDowLFRleHRUcmFja0xpc3Q6MCxUb3VjaExpc3Q6MH0sV3JlPUU4KFwic3BhblwiKS5jbGFzc0xpc3QsR3JlPVdyZSYmV3JlLmNvbnN0cnVjdG9yJiZXcmUuY29uc3RydWN0b3IucHJvdG90eXBlLHFyZT1HcmU9PT1PYmplY3QucHJvdG90eXBlP3ZvaWQgMDpHcmUsS3JlPWc4KFwiaXRlcmF0b3JcIiksWXJlPWc4KFwidG9TdHJpbmdUYWdcIiksWHJlPXNyZS52YWx1ZXMsWnJlPWZ1bmN0aW9uKGUsdCl7aWYoZSl7aWYoZVtLcmVdIT09WHJlKXRyeXtUOChlLEtyZSxYcmUpfWNhdGNoKHQpe2VbS3JlXT1YcmV9aWYoZVtZcmVdfHxUOChlLFlyZSx0KSxVcmVbdF0pZm9yKHZhciBuIGluIHNyZSlpZihlW25dIT09c3JlW25dKXRyeXtUOChlLG4sc3JlW25dKX1jYXRjaCh0KXtlW25dPXNyZVtuXX19fTtmb3IodmFyIEpyZSBpbiBVcmUpWnJlKGw1W0pyZV0mJmw1W0pyZV0ucHJvdG90eXBlLEpyZSk7WnJlKHFyZSxcIkRPTVRva2VuTGlzdFwiKTt2YXIgUXJlPVE4LkVYSVNUUyxlb2U9RjguZix0b2U9RnVuY3Rpb24ucHJvdG90eXBlLG5vZT1ENSh0b2UudG9TdHJpbmcpLHJvZT0vZnVuY3Rpb25cXGIoPzpcXHN8XFwvXFwqW1xcU1xcc10qP1xcKlxcL3xcXC9cXC9bXlxcblxccl0qW1xcblxccl0rKSooW15cXHMoL10qKS8sb29lPUQ1KHJvZS5leGVjKTtmNSYmIVFyZSYmZW9lKHRvZSxcIm5hbWVcIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3RyeXtyZXR1cm4gb29lKHJvZSxub2UodGhpcykpWzFdfWNhdGNoKGUpe3JldHVyblwiXCJ9fX0pO3ZhciBpb2U9ZzgoXCJzcGVjaWVzXCIpLGFvZT1INT49NTF8fCFjNSgoZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4oZS5jb25zdHJ1Y3Rvcj17fSlbaW9lXT1mdW5jdGlvbigpe3JldHVybntmb286MX19LDEhPT1lLnNsaWNlKEJvb2xlYW4pLmZvb30pKSx1b2U9ZzgoXCJzcGVjaWVzXCIpLHNvZT1sNS5BcnJheSxsb2U9TWF0aC5tYXg7ZnVuY3Rpb24gY29lKGUpe3JldHVybiBlLmdldE1lbnVDb25maWcoXCJ1cGxvYWRWaWRlb1wiKX1GNyh7dGFyZ2V0OlwiQXJyYXlcIixwcm90bzohMCxmb3JjZWQ6IWFvZX0se3NsaWNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGk9VDUodGhpcyksYT1sNyhpKSx1PWE3KGUsYSkscz1hNyh2b2lkIDA9PT10P2E6dCxhKTtpZihnOShpKSYmKG49aS5jb25zdHJ1Y3RvciwoUzkobikmJihuPT09c29lfHxnOShuLnByb3RvdHlwZSkpfHxQNShuKSYmbnVsbD09PShuPW5bdW9lXSkpJiYobj12b2lkIDApLG49PT1zb2V8fHZvaWQgMD09PW4pKXJldHVybiBndGUoaSx1LHMpO2ZvcihyPW5ldyh2b2lkIDA9PT1uP3NvZTpuKShsb2Uocy11LDApKSxvPTA7dTxzO3UrKyxvKyspdSBpbiBpJiZkcmUocixvLGlbdV0pO3JldHVybiByLmxlbmd0aD1vLHJ9fSk7dmFyIGZvZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBkb2UoZSx0KXtyZXR1cm4gZTUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciBuLHIsbyxpO3JldHVybiB0NSh0aGlzLChmdW5jdGlvbihhKXtzd2l0Y2goYS5sYWJlbCl7Y2FzZSAwOnJldHVybiBuPWZ1bmN0aW9uKGUpe3ZhciB0PWZvZS5nZXQoZSk7aWYobnVsbCE9dClyZXR1cm4gdDt2YXIgbj1jb2UoZSkscj1uLm9uU3VjY2VzcyxvPW4ub25Qcm9ncmVzcyxpPW4ub25GYWlsZWQsYT1uLmN1c3RvbUluc2VydCx1PW4ub25FcnJvcjtyZXR1cm4gdD1LXyhRMyhRMyh7fSxuKSx7b25Qcm9ncmVzczpmdW5jdGlvbih0KXtlLnNob3dQcm9ncmVzc0Jhcih0KSxvJiZvKHQpfSxvblN1Y2Nlc3M6ZnVuY3Rpb24odCxuKXtpZihhKXJldHVybiBhKG4sKGZ1bmN0aW9uKHQsbil7cmV0dXJuIFBuZShlLHQsbil9KSksdm9pZCByKHQsbik7dmFyIG89bi5lcnJubyx1PXZvaWQgMD09PW8/MTpvLHM9bi5kYXRhLGw9dm9pZCAwPT09cz97fTpzO2lmKDA9PT11KXt2YXIgYz1sLnVybCxmPXZvaWQgMD09PWM/XCJcIjpjLGQ9bC5wb3N0ZXI7UG5lKGUsZix2b2lkIDA9PT1kP1wiXCI6ZCkscih0LG4pfWVsc2UgaSh0LG4pfSxvbkVycm9yOmZ1bmN0aW9uKGUsdCxuKXt1KGUsdCxuKX19KSksZm9lLnNldChlLHQpLHR9KGUpLHI9dC5uYW1lLG89dC50eXBlLGk9dC5zaXplLG4uYWRkRmlsZSh7bmFtZTpyLHR5cGU6byxzaXplOmksZGF0YTp0fSksWzQsbi51cGxvYWQoKV07Y2FzZSAxOnJldHVybiBhLnNlbnQoKSxbMl19fSkpfSkpfXZhciBwb2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50aXRsZT1IUChcInZpZGVvTW9kdWxlLnVwbG9hZFZpZGVvXCIpLHRoaXMuaWNvblN2Zz0nPHN2ZyB2aWV3Qm94PVwiMCAwIDEwNTYgMTAyNFwiPjxwYXRoIGQ9XCJNODA1LjkwMjI2MSA1MjEuODE5ODgyYTI1MS40NDE0NTIgMjUxLjQ0MTQ1MiAwIDAgMC0yNTEuMDExOTcyIDI0Ni42MDAwMzMgMjUxLjA1MTAxNSAyNTEuMDUxMDE1IDAgMSAwIDUwMi4wMjM5NDQgOC44MjM4NzcgMjUzLjIzNzQ2MyAyNTMuMjM3NDYzIDAgMCAwLTI1MS4wMTE5NzItMjU1LjQyMzkxeiBtNTkuNDYzNTYxIDI0MC4wMDE2NDd2MTI5Ljg5ODQwM2gtMTE2LjcwMTYzMXYtMTI5Ljg5ODQwM2gtNDQuMDQxMjk4bDEwMS4yNzkzNjgtMTAzLjUwNDg1OSAxMDEuMjc5MzY4IDEwMy41MDQ4NTl6XCIgcC1pZD1cIjY4MDJcIj48L3BhdGg+PHBhdGggZD1cIk03ODguMjU0NTA3IDAuMDAwNzgxSDk5LjA5NDA5MkE5OC42NjM0MzkgOTguNjYzNDM5IDAgMCAwIDAuMDAxMTcxIDk5LjA5MzcwMXY1OTAuMDY3NDk1YTk4LjY2MzQzOSA5OC42NjM0MzkgMCAwIDAgOTkuMDkyOTIxIDk5LjA5MjkyMWg0MTEuNzU0OWEyNjYuNDM0MjM1IDI2Ni40MzQyMzUgMCAwIDEtMi4xODY0NDgtNDEuODE1ODA3IDI3NS44NDM3NjcgMjc1Ljg0Mzc2NyAwIDAgMSAyNzUuMTgwMDI0LTI3MC43MjkwNDIgMjcwLjY1MDk1NSAyNzAuNjUwOTU1IDAgMCAxIDEwMy41MDQ4NTkgMTkuODM0MjAxVjk5LjA5MzcwMUExMDEuNTEzNjMgMTAxLjUxMzYzIDAgMCAwIDc4OC4yNTQ1MDcgMC4wMDA3ODF6TTI5NS4wNTQ0NDEgNjQwLjc0NzAwNFYxNDcuNTA3ODk0bDM5NC4xNDYxODkgMjQ2LjYwMDAzM3pcIj48L3BhdGg+PC9zdmc+Jyx0aGlzLnRhZz1cImJ1dHRvblwifXJldHVybiBlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm5cIlwifSxlLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0TWVudUNvbmZpZyhlKSxyPW4uYWxsb3dlZEZpbGVUeXBlcyxvPXZvaWQgMD09PXI/W106cixpPW4uY3VzdG9tQnJvd3NlQW5kVXBsb2FkO2lmKGkpaSgoZnVuY3Rpb24odCxuKXtyZXR1cm4gUG5lKGUsdCxuKX0pKTtlbHNle3ZhciBhPVwiXCI7by5sZW5ndGg+MCYmKGE9J2FjY2VwdD1cIicrby5qb2luKFwiLCBcIikrJ1wiJyk7dmFyIHU9TXAoXCJib2R5XCIpLHM9TXAoJzxpbnB1dCB0eXBlPVwiZmlsZVwiICcrYStcIiBtdWx0aXBsZS8+XCIpO3MuaGlkZSgpLHUuYXBwZW5kKHMpLHMuY2xpY2soKSxzLm9uKFwiY2hhbmdlXCIsKGZ1bmN0aW9uKCl7dmFyIHQ9c1swXS5maWxlczshZnVuY3Rpb24oZSx0KXt2YXIgbixyO2U1KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgbyxpLGEsdSxzLGw7cmV0dXJuIHQ1KHRoaXMsKGZ1bmN0aW9uKGMpe3N3aXRjaChjLmxhYmVsKXtjYXNlIDA6aWYobnVsbD09dClyZXR1cm5bMl07bz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSxpPWNvZShlKS5jdXN0b21VcGxvYWQsYy5sYWJlbD0xO2Nhc2UgMTpjLnRyeXMucHVzaChbMSw5LDEwLDE1XSksYT1yNShvKSxjLmxhYmVsPTI7Y2FzZSAyOnJldHVybls0LGEubmV4dCgpXTtjYXNlIDM6cmV0dXJuKHU9Yy5zZW50KCkpLmRvbmU/WzMsOF06KHM9dS52YWx1ZSxpP1s0LGkocywoZnVuY3Rpb24odCxuKXtyZXR1cm4gUG5lKGUsdCxuKX0pKV06WzMsNV0pO2Nhc2UgNDpyZXR1cm4gYy5zZW50KCksWzMsN107Y2FzZSA1OnJldHVybls0LGRvZShlLHMpXTtjYXNlIDY6Yy5zZW50KCksYy5sYWJlbD03O2Nhc2UgNzpyZXR1cm5bMywyXTtjYXNlIDg6cmV0dXJuWzMsMTVdO2Nhc2UgOTpyZXR1cm4gbD1jLnNlbnQoKSxuPXtlcnJvcjpsfSxbMywxNV07Y2FzZSAxMDpyZXR1cm4gYy50cnlzLnB1c2goWzEwLCwxMywxNF0pLHUmJiF1LmRvbmUmJihyPWEucmV0dXJuKT9bNCxyLmNhbGwoYSldOlszLDEyXTtjYXNlIDExOmMuc2VudCgpLGMubGFiZWw9MTI7Y2FzZSAxMjpyZXR1cm5bMywxNF07Y2FzZSAxMzppZihuKXRocm93IG4uZXJyb3I7cmV0dXJuWzddO2Nhc2UgMTQ6cmV0dXJuWzddO2Nhc2UgMTU6cmV0dXJuWzJdfX0pKX0pKX0oZSx0KX0pKX19LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWxlY3Rpb247cmV0dXJuIG51bGw9PXR8fCFxZi5pc0NvbGxhcHNlZCh0KXx8ISFRTy5nZXRTZWxlY3RlZEVsZW1zKGUpLnNvbWUoKGZ1bmN0aW9uKHQpe3ZhciBuPVFPLmdldE5vZGVUeXBlKHQpO3JldHVyblwicHJlXCI9PT1ufHxcImxpc3QtaXRlbVwiPT09bnx8ISFlLmlzVm9pZCh0KX0pKX0sZS5wcm90b3R5cGUuZ2V0TWVudUNvbmZpZz1mdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNZW51Q29uZmlnKFwidXBsb2FkVmlkZW9cIil9LGV9KCksaG9lPVE4LlBST1BFUixnb2U9UmVnRXhwLnByb3RvdHlwZSx2b2U9Z29lLnRvU3RyaW5nLHlvZT1ENShMOSksbW9lPWM1KChmdW5jdGlvbigpe3JldHVyblwiL2EvYlwiIT12b2UuY2FsbCh7c291cmNlOlwiYVwiLGZsYWdzOlwiYlwifSl9KSksYm9lPWhvZSYmXCJ0b1N0cmluZ1wiIT12b2UubmFtZTtmdW5jdGlvbiB3b2UoKXtyZXR1cm4gTmVlKFwidy1lLWluc2VydC12aWRlb1wiKX0obW9lfHxib2UpJiZlNyhSZWdFeHAucHJvdG90eXBlLFwidG9TdHJpbmdcIiwoZnVuY3Rpb24oKXt2YXIgZT1POCh0aGlzKSx0PVI3KGUuc291cmNlKSxuPWUuZmxhZ3M7cmV0dXJuXCIvXCIrdCtcIi9cIitSNyh2b2lkIDA9PT1uJiZJNShnb2UsZSkmJiEoXCJmbGFnc1wiaW4gZ29lKT95b2UoZSk6bil9KSx7dW5zYWZlOiEwfSk7dmFyIEVvZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnRpdGxlPUhQKFwidmlkZW9Nb2R1bGUuZWRpdFNpemVcIiksdGhpcy50YWc9XCJidXR0b25cIix0aGlzLnNob3dNb2RhbD0hMCx0aGlzLm1vZGFsV2lkdGg9MzIwLHRoaXMuJGNvbnRlbnQ9bnVsbCx0aGlzLndpZHRoSW5wdXRJZD13b2UoKSx0aGlzLmhlaWdodElucHV0SWQ9d29lKCksdGhpcy5idXR0b25JZD13b2UoKX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRWaWRlb05vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFFPLmdldFNlbGVjdGVkTm9kZUJ5VHlwZShlLFwidmlkZW9cIil9LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVyblwiXCJ9LGUucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiExfSxlLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGUsdCl7fSxlLnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLnNlbGVjdGlvbnx8bnVsbD09dGhpcy5nZXRTZWxlY3RlZFZpZGVvTm9kZShlKX0sZS5wcm90b3R5cGUuZ2V0TW9kYWxQb3NpdGlvbk5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWRWaWRlb05vZGUoZSl9LGUucHJvdG90eXBlLmdldE1vZGFsQ29udGVudEVsZW09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQud2lkdGhJbnB1dElkLHI9dC5oZWlnaHRJbnB1dElkLG89dC5idXR0b25JZCxpPW41KFNfKEhQKFwidmlkZW9Nb2R1bGUud2lkdGhcIiksbixcImF1dG9cIiksMiksYT1pWzBdLHU9TXAoaVsxXSkscz1uNShTXyhIUChcInZpZGVvTW9kdWxlLmhlaWdodFwiKSxyLFwiYXV0b1wiKSwyKSxsPXNbMF0sYz1NcChzWzFdKSxmPW41KENfKG8sSFAoXCJ2aWRlb01vZHVsZS5va1wiKSksMSlbMF07aWYobnVsbD09dGhpcy4kY29udGVudCl7dmFyIGQ9TXAoXCI8ZGl2PjwvZGl2PlwiKTtkLm9uKFwiY2xpY2tcIixcIiNcIitvLChmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCk7dmFyIG89ZC5maW5kKFwiI1wiK24pLnZhbCgpLnRyaW0oKSxpPWQuZmluZChcIiNcIityKS52YWwoKS50cmltKCksYT1wYXJzZUludChvKSx1PXBhcnNlSW50KGkpLHM9YT9hLnRvU3RyaW5nKCk6XCJhdXRvXCIsbD11P3UudG9TdHJpbmcoKTpcImF1dG9cIjtlLnJlc3RvcmVTZWxlY3Rpb24oKSxtZC5zZXROb2RlcyhlLHt3aWR0aDpzLGhlaWdodDpsfSx7bWF0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFFPLmNoZWNrTm9kZVR5cGUoZSxcInZpZGVvXCIpfX0pLGUuaGlkZVBhbmVsT3JNb2RhbCgpfSkpLHRoaXMuJGNvbnRlbnQ9ZH12YXIgcD10aGlzLiRjb250ZW50O3AuZW1wdHkoKSxwLmFwcGVuZChhKSxwLmFwcGVuZChsKSxwLmFwcGVuZChmKTt2YXIgaD10aGlzLmdldFNlbGVjdGVkVmlkZW9Ob2RlKGUpO2lmKG51bGw9PWgpcmV0dXJuIHBbMF07dmFyIGc9aC53aWR0aCx2PXZvaWQgMD09PWc/XCJhdXRvXCI6Zyx5PWguaGVpZ2h0LG09dm9pZCAwPT09eT9cImF1dG9cIjp5O3JldHVybiB1LnZhbCh2KSxjLnZhbChtKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3UuZm9jdXMoKX0pKSxwWzBdfSxlfSgpLERvZT17cmVuZGVyRWxlbXM6W1o3XSxlbGVtc1RvSHRtbDpbSjddLHByZVBhcnNlSHRtbDpbZDldLHBhcnNlRWxlbXNIdG1sOltJOV0sbWVudXM6W3trZXk6XCJpbnNlcnRWaWRlb1wiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE5uZX0sY29uZmlnOntvbkluc2VydGVkVmlkZW86ZnVuY3Rpb24oZSl7fSxjaGVja1ZpZGVvOmZ1bmN0aW9uKGUsdCl7cmV0dXJuITB9LHBhcnNlVmlkZW9TcmM6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fX0se2tleTpcInVwbG9hZFZpZGVvXCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgcG9lfSxjb25maWc6e3NlcnZlcjpcIlwiLGZpZWxkTmFtZTpcIndhbmdlZGl0b3ItdXBsb2FkZWQtdmlkZW9cIixtYXhGaWxlU2l6ZToxMDQ4NTc2MCxtYXhOdW1iZXJPZkZpbGVzOjUsYWxsb3dlZEZpbGVUeXBlczpbXCJ2aWRlby8qXCJdLG1ldGE6e30sbWV0YVdpdGhVcmw6ITEsd2l0aENyZWRlbnRpYWxzOiExLHRpbWVvdXQ6M2U0LG9uQmVmb3JlVXBsb2FkOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxvblByb2dyZXNzOmZ1bmN0aW9uKGUpe30sb25TdWNjZXNzOmZ1bmN0aW9uKGUsdCl7fSxvbkZhaWxlZDpmdW5jdGlvbihlLHQpe2NvbnNvbGUuZXJyb3IoXCInXCIrZS5uYW1lK1wiJyB1cGxvYWQgZmFpbGVkXCIsdCl9LG9uRXJyb3I6ZnVuY3Rpb24oZSx0LG4pe2NvbnNvbGUuZXJyb3IoXCInXCIrZS5uYW1lK1wiIHVwbG9hZCBlcnJvclwiLHQsbil9fX0se2tleTpcImVkaXRWaWRlb1NpemVcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFb2V9fV0sZWRpdG9yUGx1Z2luOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaXNWb2lkLG49ZS5ub3JtYWxpemVOb2RlLHI9ZTtyZXR1cm4gci5pc1ZvaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJ2aWRlb1wiPT09ZS50eXBlfHx0KGUpfSxyLm5vcm1hbGl6ZU5vZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9bjUoZSwyKSxvPXRbMF0saT10WzFdO3JldHVyblwidmlkZW9cIj09PVFPLmdldE5vZGVUeXBlKG8pJiZRTy5pc0xhc3ROb2RlKHIsbykmJm1kLmluc2VydE5vZGVzKHIsUU8uZ2VuRW1wdHlQYXJhZ3JhcGgoKSx7YXQ6W2lbMF0rMV19KSxuKFtvLGldKX0scn19O01QKFwiZW5cIix7dXBsb2FkSW1nTW9kdWxlOnt1cGxvYWRJbWFnZTpcIlVwbG9hZCBJbWFnZVwiLHVwbG9hZEVycm9yOlwie3tmaWxlTmFtZX19IHVwbG9hZCBlcnJvclwifX0pLE1QKFwiemgtQ05cIix7dXBsb2FkSW1nTW9kdWxlOnt1cGxvYWRJbWFnZTpcIuS4iuS8oOWbvueJh1wiLHVwbG9hZEVycm9yOlwie3tmaWxlTmFtZX19IOS4iuS8oOWHuumUmVwifX0pO3ZhciBTb2U9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIHhvZShlKXt2YXIgdD17ZXhwb3J0czp7fX07cmV0dXJuIGUodCx0LmV4cG9ydHMpLHQuZXhwb3J0c312YXIgQ29lLEFvZSxPb2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuTWF0aD09TWF0aCYmZX0sa29lPU9vZShcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyl8fE9vZShcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxPb2UoXCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYpfHxPb2UoXCJvYmplY3RcIj09dHlwZW9mIFNvZSYmU29lKXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpLEJvZT1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fSxGb2U9IUJvZSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpLFRvZT1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxfb2U9VG9lLmJpbmQ/VG9lLmJpbmQoVG9lKTpmdW5jdGlvbigpe3JldHVybiBUb2UuYXBwbHkoVG9lLGFyZ3VtZW50cyl9LFBvZT17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxqb2U9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixOb2U9e2Y6am9lJiYhUG9lLmNhbGwoezE6Mn0sMSk/ZnVuY3Rpb24oZSl7dmFyIHQ9am9lKHRoaXMsZSk7cmV0dXJuISF0JiZ0LmVudW1lcmFibGV9OlBvZX0sSW9lPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fSxMb2U9RnVuY3Rpb24ucHJvdG90eXBlLFJvZT1Mb2UuYmluZCxNb2U9TG9lLmNhbGwsem9lPVJvZSYmUm9lLmJpbmQoTW9lKSwkb2U9Um9lP2Z1bmN0aW9uKGUpe3JldHVybiBlJiZ6b2UoTW9lLGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmZnVuY3Rpb24oKXtyZXR1cm4gTW9lLmFwcGx5KGUsYXJndW1lbnRzKX19LEhvZT0kb2Uoe30udG9TdHJpbmcpLFZvZT0kb2UoXCJcIi5zbGljZSksVW9lPWZ1bmN0aW9uKGUpe3JldHVybiBWb2UoSG9lKGUpLDgsLTEpfSxXb2U9a29lLk9iamVjdCxHb2U9JG9lKFwiXCIuc3BsaXQpLHFvZT1Cb2UoKGZ1bmN0aW9uKCl7cmV0dXJuIVdvZShcInpcIikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KSk/ZnVuY3Rpb24oZSl7cmV0dXJuXCJTdHJpbmdcIj09VW9lKGUpP0dvZShlLFwiXCIpOldvZShlKX06V29lLEtvZT1rb2UuVHlwZUVycm9yLFlvZT1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IEtvZShcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiK2UpO3JldHVybiBlfSxYb2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHFvZShZb2UoZSkpfSxab2U9ZnVuY3Rpb24oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZX0sSm9lPWZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlP251bGwhPT1lOlpvZShlKX0sUW9lPWZ1bmN0aW9uKGUpe3JldHVybiBab2UoZSk/ZTp2b2lkIDB9LGVpZT1mdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/UW9lKGtvZVtlXSk6a29lW2VdJiZrb2VbZV1bdF19LHRpZT0kb2Uoe30uaXNQcm90b3R5cGVPZiksbmllPWVpZShcIm5hdmlnYXRvclwiLFwidXNlckFnZW50XCIpfHxcIlwiLHJpZT1rb2UucHJvY2VzcyxvaWU9a29lLkRlbm8saWllPXJpZSYmcmllLnZlcnNpb25zfHxvaWUmJm9pZS52ZXJzaW9uLGFpZT1paWUmJmlpZS52ODthaWUmJihBb2U9KENvZT1haWUuc3BsaXQoXCIuXCIpKVswXT4wJiZDb2VbMF08ND8xOisoQ29lWzBdK0NvZVsxXSkpLCFBb2UmJm5pZSYmKCEoQ29lPW5pZS5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pKXx8Q29lWzFdPj03NCkmJihDb2U9bmllLm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKSkmJihBb2U9K0NvZVsxXSk7dmFyIHVpZT1Bb2Usc2llPSEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmIUJvZSgoZnVuY3Rpb24oKXt2YXIgZT1TeW1ib2woKTtyZXR1cm4hU3RyaW5nKGUpfHwhKE9iamVjdChlKWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZ1aWUmJnVpZTw0MX0pKSxsaWU9c2llJiYhU3ltYm9sLnNoYW0mJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IsY2llPWtvZS5PYmplY3QsZmllPWxpZT9mdW5jdGlvbihlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7dmFyIHQ9ZWllKFwiU3ltYm9sXCIpO3JldHVybiBab2UodCkmJnRpZSh0LnByb3RvdHlwZSxjaWUoZSkpfSxkaWU9a29lLlN0cmluZyxwaWU9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBkaWUoZSl9Y2F0Y2goZSl7cmV0dXJuXCJPYmplY3RcIn19LGhpZT1rb2UuVHlwZUVycm9yLGdpZT1mdW5jdGlvbihlKXtpZihab2UoZSkpcmV0dXJuIGU7dGhyb3cgaGllKHBpZShlKStcIiBpcyBub3QgYSBmdW5jdGlvblwiKX0sdmllPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVt0XTtyZXR1cm4gbnVsbD09bj92b2lkIDA6Z2llKG4pfSx5aWU9a29lLlR5cGVFcnJvcixtaWU9T2JqZWN0LmRlZmluZVByb3BlcnR5LGJpZT1mdW5jdGlvbihlLHQpe3RyeXttaWUoa29lLGUse3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9Y2F0Y2gobil7a29lW2VdPXR9cmV0dXJuIHR9LHdpZT1rb2VbXCJfX2NvcmUtanNfc2hhcmVkX19cIl18fGJpZShcIl9fY29yZS1qc19zaGFyZWRfX1wiLHt9KSxFaWU9eG9lKChmdW5jdGlvbihlKXsoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHdpZVtlXXx8KHdpZVtlXT12b2lkIDAhPT10P3Q6e30pfSkoXCJ2ZXJzaW9uc1wiLFtdKS5wdXNoKHt2ZXJzaW9uOlwiMy4xOS4zXCIsbW9kZTpcImdsb2JhbFwiLGNvcHlyaWdodDpcIsKpIDIwMjEgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSlcIn0pfSkpLERpZT1rb2UuT2JqZWN0LFNpZT1mdW5jdGlvbihlKXtyZXR1cm4gRGllKFlvZShlKSl9LHhpZT0kb2Uoe30uaGFzT3duUHJvcGVydHkpLENpZT1PYmplY3QuaGFzT3dufHxmdW5jdGlvbihlLHQpe3JldHVybiB4aWUoU2llKGUpLHQpfSxBaWU9MCxPaWU9TWF0aC5yYW5kb20oKSxraWU9JG9lKDEuLnRvU3RyaW5nKSxCaWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJTeW1ib2woXCIrKHZvaWQgMD09PWU/XCJcIjplKStcIilfXCIra2llKCsrQWllK09pZSwzNil9LEZpZT1FaWUoXCJ3a3NcIiksVGllPWtvZS5TeW1ib2wsX2llPVRpZSYmVGllLmZvcixQaWU9bGllP1RpZTpUaWUmJlRpZS53aXRob3V0U2V0dGVyfHxCaWUsamllPWZ1bmN0aW9uKGUpe2lmKCFDaWUoRmllLGUpfHwhc2llJiZcInN0cmluZ1wiIT10eXBlb2YgRmllW2VdKXt2YXIgdD1cIlN5bWJvbC5cIitlO3NpZSYmQ2llKFRpZSxlKT9GaWVbZV09VGllW2VdOkZpZVtlXT1saWUmJl9pZT9faWUodCk6UGllKHQpfXJldHVybiBGaWVbZV19LE5pZT1rb2UuVHlwZUVycm9yLElpZT1qaWUoXCJ0b1ByaW1pdGl2ZVwiKSxMaWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXtpZighSm9lKGUpfHxmaWUoZSkpcmV0dXJuIGU7dmFyIG4scj12aWUoZSxJaWUpO2lmKHIpe2lmKHZvaWQgMD09PXQmJih0PVwiZGVmYXVsdFwiKSxuPV9vZShyLGUsdCksIUpvZShuKXx8ZmllKG4pKXJldHVybiBuO3Rocm93IE5pZShcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX1yZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJudW1iZXJcIiksZnVuY3Rpb24oZSx0KXt2YXIgbixyO2lmKFwic3RyaW5nXCI9PT10JiZab2Uobj1lLnRvU3RyaW5nKSYmIUpvZShyPV9vZShuLGUpKSlyZXR1cm4gcjtpZihab2Uobj1lLnZhbHVlT2YpJiYhSm9lKHI9X29lKG4sZSkpKXJldHVybiByO2lmKFwic3RyaW5nXCIhPT10JiZab2Uobj1lLnRvU3RyaW5nKSYmIUpvZShyPV9vZShuLGUpKSlyZXR1cm4gcjt0aHJvdyB5aWUoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9KGUsdCl9KGUsXCJzdHJpbmdcIik7cmV0dXJuIGZpZSh0KT90OnQrXCJcIn0sUmllPWtvZS5kb2N1bWVudCxNaWU9Sm9lKFJpZSkmJkpvZShSaWUuY3JlYXRlRWxlbWVudCksemllPWZ1bmN0aW9uKGUpe3JldHVybiBNaWU/UmllLmNyZWF0ZUVsZW1lbnQoZSk6e319LCRpZT0hRm9lJiYhQm9lKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoemllKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpLEhpZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFZpZT17ZjpGb2U/SGllOmZ1bmN0aW9uKGUsdCl7aWYoZT1Yb2UoZSksdD1MaWUodCksJGllKXRyeXtyZXR1cm4gSGllKGUsdCl9Y2F0Y2goZSl7fWlmKENpZShlLHQpKXJldHVybiBJb2UoIV9vZShOb2UuZixlLHQpLGVbdF0pfX0sVWllPWtvZS5TdHJpbmcsV2llPWtvZS5UeXBlRXJyb3IsR2llPWZ1bmN0aW9uKGUpe2lmKEpvZShlKSlyZXR1cm4gZTt0aHJvdyBXaWUoVWllKGUpK1wiIGlzIG5vdCBhbiBvYmplY3RcIil9LHFpZT1rb2UuVHlwZUVycm9yLEtpZT1PYmplY3QuZGVmaW5lUHJvcGVydHksWWllPXtmOkZvZT9LaWU6ZnVuY3Rpb24oZSx0LG4pe2lmKEdpZShlKSx0PUxpZSh0KSxHaWUobiksJGllKXRyeXtyZXR1cm4gS2llKGUsdCxuKX1jYXRjaChlKXt9aWYoXCJnZXRcImluIG58fFwic2V0XCJpbiBuKXRocm93IHFpZShcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkXCIpO3JldHVyblwidmFsdWVcImluIG4mJihlW3RdPW4udmFsdWUpLGV9fSxYaWU9Rm9lP2Z1bmN0aW9uKGUsdCxuKXtyZXR1cm4gWWllLmYoZSx0LElvZSgxLG4pKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4sZX0sWmllPSRvZShGdW5jdGlvbi50b1N0cmluZyk7Wm9lKHdpZS5pbnNwZWN0U291cmNlKXx8KHdpZS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBaaWUoZSl9KTt2YXIgSmllLFFpZSxlYWUsdGFlPXdpZS5pbnNwZWN0U291cmNlLG5hZT1rb2UuV2Vha01hcCxyYWU9Wm9lKG5hZSkmJi9uYXRpdmUgY29kZS8udGVzdCh0YWUobmFlKSksb2FlPUVpZShcImtleXNcIiksaWFlPWZ1bmN0aW9uKGUpe3JldHVybiBvYWVbZV18fChvYWVbZV09QmllKGUpKX0sYWFlPXt9LHVhZT1rb2UuVHlwZUVycm9yLHNhZT1rb2UuV2Vha01hcDtpZihyYWV8fHdpZS5zdGF0ZSl7dmFyIGxhZT13aWUuc3RhdGV8fCh3aWUuc3RhdGU9bmV3IHNhZSksY2FlPSRvZShsYWUuZ2V0KSxmYWU9JG9lKGxhZS5oYXMpLGRhZT0kb2UobGFlLnNldCk7SmllPWZ1bmN0aW9uKGUsdCl7aWYoZmFlKGxhZSxlKSl0aHJvdyBuZXcgdWFlKFwiT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWRcIik7cmV0dXJuIHQuZmFjYWRlPWUsZGFlKGxhZSxlLHQpLHR9LFFpZT1mdW5jdGlvbihlKXtyZXR1cm4gY2FlKGxhZSxlKXx8e319LGVhZT1mdW5jdGlvbihlKXtyZXR1cm4gZmFlKGxhZSxlKX19ZWxzZXt2YXIgcGFlPWlhZShcInN0YXRlXCIpO2FhZVtwYWVdPSEwLEppZT1mdW5jdGlvbihlLHQpe2lmKENpZShlLHBhZSkpdGhyb3cgbmV3IHVhZShcIk9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkXCIpO3JldHVybiB0LmZhY2FkZT1lLFhpZShlLHBhZSx0KSx0fSxRaWU9ZnVuY3Rpb24oZSl7cmV0dXJuIENpZShlLHBhZSk/ZVtwYWVdOnt9fSxlYWU9ZnVuY3Rpb24oZSl7cmV0dXJuIENpZShlLHBhZSl9fXZhciBoYWU9e3NldDpKaWUsZ2V0OlFpZSxoYXM6ZWFlLGVuZm9yY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGVhZShlKT9RaWUoZSk6SmllKGUse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuO2lmKCFKb2UodCl8fChuPVFpZSh0KSkudHlwZSE9PWUpdGhyb3cgdWFlKFwiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCBcIitlK1wiIHJlcXVpcmVkXCIpO3JldHVybiBufX19LGdhZT1GdW5jdGlvbi5wcm90b3R5cGUsdmFlPUZvZSYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix5YWU9Q2llKGdhZSxcIm5hbWVcIiksbWFlPXtFWElTVFM6eWFlLFBST1BFUjp5YWUmJlwic29tZXRoaW5nXCI9PT1mdW5jdGlvbigpe30ubmFtZSxDT05GSUdVUkFCTEU6eWFlJiYoIUZvZXx8Rm9lJiZ2YWUoZ2FlLFwibmFtZVwiKS5jb25maWd1cmFibGUpfSxiYWU9eG9lKChmdW5jdGlvbihlKXt2YXIgdD1tYWUuQ09ORklHVVJBQkxFLG49aGFlLmdldCxyPWhhZS5lbmZvcmNlLG89U3RyaW5nKFN0cmluZykuc3BsaXQoXCJTdHJpbmdcIik7KGUuZXhwb3J0cz1mdW5jdGlvbihlLG4saSxhKXt2YXIgdSxzPSEhYSYmISFhLnVuc2FmZSxsPSEhYSYmISFhLmVudW1lcmFibGUsYz0hIWEmJiEhYS5ub1RhcmdldEdldCxmPWEmJnZvaWQgMCE9PWEubmFtZT9hLm5hbWU6bjtab2UoaSkmJihcIlN5bWJvbChcIj09PVN0cmluZyhmKS5zbGljZSgwLDcpJiYoZj1cIltcIitTdHJpbmcoZikucmVwbGFjZSgvXlN5bWJvbFxcKChbXildKilcXCkvLFwiJDFcIikrXCJdXCIpLCghQ2llKGksXCJuYW1lXCIpfHx0JiZpLm5hbWUhPT1mKSYmWGllKGksXCJuYW1lXCIsZiksKHU9cihpKSkuc291cmNlfHwodS5zb3VyY2U9by5qb2luKFwic3RyaW5nXCI9PXR5cGVvZiBmP2Y6XCJcIikpKSxlIT09a29lPyhzPyFjJiZlW25dJiYobD0hMCk6ZGVsZXRlIGVbbl0sbD9lW25dPWk6WGllKGUsbixpKSk6bD9lW25dPWk6YmllKG4saSl9KShGdW5jdGlvbi5wcm90b3R5cGUsXCJ0b1N0cmluZ1wiLChmdW5jdGlvbigpe3JldHVybiBab2UodGhpcykmJm4odGhpcykuc291cmNlfHx0YWUodGhpcyl9KSl9KSksd2FlPU1hdGguY2VpbCxFYWU9TWF0aC5mbG9vcixEYWU9ZnVuY3Rpb24oZSl7dmFyIHQ9K2U7cmV0dXJuIHQhPXR8fDA9PT10PzA6KHQ+MD9FYWU6d2FlKSh0KX0sU2FlPU1hdGgubWF4LHhhZT1NYXRoLm1pbixDYWU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1EYWUoZSk7cmV0dXJuIG48MD9TYWUobit0LDApOnhhZShuLHQpfSxBYWU9TWF0aC5taW4sT2FlPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/QWFlKERhZShlKSw5MDA3MTk5MjU0NzQwOTkxKTowfSxrYWU9ZnVuY3Rpb24oZSl7cmV0dXJuIE9hZShlLmxlbmd0aCl9LEJhZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe3ZhciBvLGk9WG9lKHQpLGE9a2FlKGkpLHU9Q2FlKHIsYSk7aWYoZSYmbiE9bil7Zm9yKDthPnU7KWlmKChvPWlbdSsrXSkhPW8pcmV0dXJuITB9ZWxzZSBmb3IoO2E+dTt1KyspaWYoKGV8fHUgaW4gaSkmJmlbdV09PT1uKXJldHVybiBlfHx1fHwwO3JldHVybiFlJiYtMX19LEZhZT0oQmFlKCEwKSxCYWUoITEpKSxUYWU9JG9lKFtdLnB1c2gpLF9hZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9WG9lKGUpLG89MCxpPVtdO2ZvcihuIGluIHIpIUNpZShhYWUsbikmJkNpZShyLG4pJiZUYWUoaSxuKTtmb3IoO3QubGVuZ3RoPm87KUNpZShyLG49dFtvKytdKSYmKH5GYWUoaSxuKXx8VGFlKGksbikpO3JldHVybiBpfSxQYWU9W1wiY29uc3RydWN0b3JcIixcImhhc093blByb3BlcnR5XCIsXCJpc1Byb3RvdHlwZU9mXCIsXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLFwidG9Mb2NhbGVTdHJpbmdcIixcInRvU3RyaW5nXCIsXCJ2YWx1ZU9mXCJdLGphZT1QYWUuY29uY2F0KFwibGVuZ3RoXCIsXCJwcm90b3R5cGVcIiksTmFlPXtmOk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihlKXtyZXR1cm4gX2FlKGUsamFlKX19LElhZT17ZjpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSxMYWU9JG9lKFtdLmNvbmNhdCksUmFlPWVpZShcIlJlZmxlY3RcIixcIm93bktleXNcIil8fGZ1bmN0aW9uKGUpe3ZhciB0PU5hZS5mKEdpZShlKSksbj1JYWUuZjtyZXR1cm4gbj9MYWUodCxuKGUpKTp0fSxNYWU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49UmFlKHQpLHI9WWllLmYsbz1WaWUuZixpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07Q2llKGUsYSl8fHIoZSxhLG8odCxhKSl9fSx6YWU9LyN8XFwucHJvdG90eXBlXFwuLywkYWU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1WYWVbSGFlKGUpXTtyZXR1cm4gbj09V2FlfHxuIT1VYWUmJihab2UodCk/Qm9lKHQpOiEhdCl9LEhhZT0kYWUubm9ybWFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZSh6YWUsXCIuXCIpLnRvTG93ZXJDYXNlKCl9LFZhZT0kYWUuZGF0YT17fSxVYWU9JGFlLk5BVElWRT1cIk5cIixXYWU9JGFlLlBPTFlGSUxMPVwiUFwiLEdhZT0kYWUscWFlPVZpZS5mLEthZT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxpLGEsdT1lLnRhcmdldCxzPWUuZ2xvYmFsLGw9ZS5zdGF0O2lmKG49cz9rb2U6bD9rb2VbdV18fGJpZSh1LHt9KTooa29lW3VdfHx7fSkucHJvdG90eXBlKWZvcihyIGluIHQpe2lmKGk9dFtyXSxvPWUubm9UYXJnZXRHZXQ/KGE9cWFlKG4scikpJiZhLnZhbHVlOm5bcl0sIUdhZShzP3I6dSsobD9cIi5cIjpcIiNcIikrcixlLmZvcmNlZCkmJnZvaWQgMCE9PW8pe2lmKHR5cGVvZiBpPT10eXBlb2Ygbyljb250aW51ZTtNYWUoaSxvKX0oZS5zaGFtfHxvJiZvLnNoYW0pJiZYaWUoaSxcInNoYW1cIiwhMCksYmFlKG4scixpLGUpfX0sWWFlPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVyblwiQXJyYXlcIj09VW9lKGUpfSxYYWU9e307WGFlW2ppZShcInRvU3RyaW5nVGFnXCIpXT1cInpcIjt2YXIgWmFlPVwiW29iamVjdCB6XVwiPT09U3RyaW5nKFhhZSksSmFlPWppZShcInRvU3RyaW5nVGFnXCIpLFFhZT1rb2UuT2JqZWN0LGV1ZT1cIkFyZ3VtZW50c1wiPT1Vb2UoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKSx0dWU9WmFlP1VvZTpmdW5jdGlvbihlKXt2YXIgdCxuLHI7cmV0dXJuIHZvaWQgMD09PWU/XCJVbmRlZmluZWRcIjpudWxsPT09ZT9cIk51bGxcIjpcInN0cmluZ1wiPT10eXBlb2Yobj1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZVt0XX1jYXRjaChlKXt9fSh0PVFhZShlKSxKYWUpKT9uOmV1ZT9Vb2UodCk6XCJPYmplY3RcIj09KHI9VW9lKHQpKSYmWm9lKHQuY2FsbGVlKT9cIkFyZ3VtZW50c1wiOnJ9LG51ZT1mdW5jdGlvbigpe30scnVlPVtdLG91ZT1laWUoXCJSZWZsZWN0XCIsXCJjb25zdHJ1Y3RcIiksaXVlPS9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi8sYXVlPSRvZShpdWUuZXhlYyksdXVlPSFpdWUuZXhlYyhudWUpLHN1ZT1mdW5jdGlvbihlKXtpZighWm9lKGUpKXJldHVybiExO3RyeXtyZXR1cm4gb3VlKG51ZSxydWUsZSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSxsdWU9IW91ZXx8Qm9lKChmdW5jdGlvbigpe3ZhciBlO3JldHVybiBzdWUoc3VlLmNhbGwpfHwhc3VlKE9iamVjdCl8fCFzdWUoKGZ1bmN0aW9uKCl7ZT0hMH0pKXx8ZX0pKT9mdW5jdGlvbihlKXtpZighWm9lKGUpKXJldHVybiExO3N3aXRjaCh0dWUoZSkpe2Nhc2VcIkFzeW5jRnVuY3Rpb25cIjpjYXNlXCJHZW5lcmF0b3JGdW5jdGlvblwiOmNhc2VcIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb25cIjpyZXR1cm4hMX1yZXR1cm4gdXVlfHwhIWF1ZShpdWUsdGFlKGUpKX06c3VlLGN1ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TGllKHQpO3IgaW4gZT9ZaWUuZihlLHIsSW9lKDAsbikpOmVbcl09bn0sZnVlPWppZShcInNwZWNpZXNcIiksZHVlPSRvZShbXS5zbGljZSkscHVlPShcInNsaWNlXCIsdWllPj01MXx8IUJvZSgoZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4oZS5jb25zdHJ1Y3Rvcj17fSlbZnVlXT1mdW5jdGlvbigpe3JldHVybntmb286MX19LDEhPT1lLnNsaWNlKEJvb2xlYW4pLmZvb30pKSksaHVlPWppZShcInNwZWNpZXNcIiksZ3VlPWtvZS5BcnJheSx2dWU9TWF0aC5tYXg7S2FlKHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwLGZvcmNlZDohcHVlfSx7c2xpY2U6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8saT1Yb2UodGhpcyksYT1rYWUoaSksdT1DYWUoZSxhKSxzPUNhZSh2b2lkIDA9PT10P2E6dCxhKTtpZihZYWUoaSkmJihuPWkuY29uc3RydWN0b3IsKGx1ZShuKSYmKG49PT1ndWV8fFlhZShuLnByb3RvdHlwZSkpfHxKb2UobikmJm51bGw9PT0obj1uW2h1ZV0pKSYmKG49dm9pZCAwKSxuPT09Z3VlfHx2b2lkIDA9PT1uKSlyZXR1cm4gZHVlKGksdSxzKTtmb3Iocj1uZXcodm9pZCAwPT09bj9ndWU6bikodnVlKHMtdSwwKSksbz0wO3U8czt1KyssbysrKXUgaW4gaSYmY3VlKHIsbyxpW3VdKTtyZXR1cm4gci5sZW5ndGg9byxyfX0pO3ZhciB5dWU9WmFlP3t9LnRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuXCJbb2JqZWN0IFwiK3R1ZSh0aGlzKStcIl1cIn07WmFlfHxiYWUoT2JqZWN0LnByb3RvdHlwZSxcInRvU3RyaW5nXCIseXVlLHt1bnNhZmU6ITB9KTt2YXIgbXVlLGJ1ZT1rb2UuU3RyaW5nLHd1ZT1mdW5jdGlvbihlKXtpZihcIlN5bWJvbFwiPT09dHVlKGUpKXRocm93IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nXCIpO3JldHVybiBidWUoZSl9LEV1ZT1mdW5jdGlvbigpe3ZhciBlPUdpZSh0aGlzKSx0PVwiXCI7cmV0dXJuIGUuZ2xvYmFsJiYodCs9XCJnXCIpLGUuaWdub3JlQ2FzZSYmKHQrPVwiaVwiKSxlLm11bHRpbGluZSYmKHQrPVwibVwiKSxlLmRvdEFsbCYmKHQrPVwic1wiKSxlLnVuaWNvZGUmJih0Kz1cInVcIiksZS5zdGlja3kmJih0Kz1cInlcIiksdH0sRHVlPWtvZS5SZWdFeHAsU3VlPUJvZSgoZnVuY3Rpb24oKXt2YXIgZT1EdWUoXCJhXCIsXCJ5XCIpO3JldHVybiBlLmxhc3RJbmRleD0yLG51bGwhPWUuZXhlYyhcImFiY2RcIil9KSkseHVlPVN1ZXx8Qm9lKChmdW5jdGlvbigpe3JldHVybiFEdWUoXCJhXCIsXCJ5XCIpLnN0aWNreX0pKSxDdWU9e0JST0tFTl9DQVJFVDpTdWV8fEJvZSgoZnVuY3Rpb24oKXt2YXIgZT1EdWUoXCJeclwiLFwiZ3lcIik7cmV0dXJuIGUubGFzdEluZGV4PTIsbnVsbCE9ZS5leGVjKFwic3RyXCIpfSkpLE1JU1NFRF9TVElDS1k6eHVlLFVOU1VQUE9SVEVEX1k6U3VlfSxBdWU9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3JldHVybiBfYWUoZSxQYWUpfSxPdWU9Rm9lP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUsdCl7R2llKGUpO2Zvcih2YXIgbixyPVhvZSh0KSxvPUF1ZSh0KSxpPW8ubGVuZ3RoLGE9MDtpPmE7KVlpZS5mKGUsbj1vW2ErK10scltuXSk7cmV0dXJuIGV9LGt1ZT1laWUoXCJkb2N1bWVudFwiLFwiZG9jdW1lbnRFbGVtZW50XCIpLEJ1ZT1pYWUoXCJJRV9QUk9UT1wiKSxGdWU9ZnVuY3Rpb24oKXt9LFR1ZT1mdW5jdGlvbihlKXtyZXR1cm5cIjxzY3JpcHQ+XCIrZStcIjxcXC9zY3JpcHQ+XCJ9LF91ZT1mdW5jdGlvbihlKXtlLndyaXRlKFR1ZShcIlwiKSksZS5jbG9zZSgpO3ZhciB0PWUucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gZT1udWxsLHR9LFB1ZT1mdW5jdGlvbigpe3RyeXttdWU9bmV3IEFjdGl2ZVhPYmplY3QoXCJodG1sZmlsZVwiKX1jYXRjaChlKXt9dmFyIGUsdDtQdWU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmbXVlP191ZShtdWUpOigodD16aWUoXCJpZnJhbWVcIikpLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsa3VlLmFwcGVuZENoaWxkKHQpLHQuc3JjPVN0cmluZyhcImphdmFzY3JpcHQ6XCIpLChlPXQuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLGUud3JpdGUoVHVlKFwiZG9jdW1lbnQuRj1PYmplY3RcIikpLGUuY2xvc2UoKSxlLkYpOl91ZShtdWUpO2Zvcih2YXIgbj1QYWUubGVuZ3RoO24tLTspZGVsZXRlIFB1ZS5wcm90b3R5cGVbUGFlW25dXTtyZXR1cm4gUHVlKCl9O2FhZVtCdWVdPSEwO3ZhciBqdWUsTnVlLEl1ZT1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09ZT8oRnVlLnByb3RvdHlwZT1HaWUoZSksbj1uZXcgRnVlLEZ1ZS5wcm90b3R5cGU9bnVsbCxuW0J1ZV09ZSk6bj1QdWUoKSx2b2lkIDA9PT10P246T3VlKG4sdCl9LEx1ZT1rb2UuUmVnRXhwLFJ1ZT1Cb2UoKGZ1bmN0aW9uKCl7dmFyIGU9THVlKFwiLlwiLFwic1wiKTtyZXR1cm4hKGUuZG90QWxsJiZlLmV4ZWMoXCJcXG5cIikmJlwic1wiPT09ZS5mbGFncyl9KSksTXVlPWtvZS5SZWdFeHAsenVlPUJvZSgoZnVuY3Rpb24oKXt2YXIgZT1NdWUoXCIoPzxhPmIpXCIsXCJnXCIpO3JldHVyblwiYlwiIT09ZS5leGVjKFwiYlwiKS5ncm91cHMuYXx8XCJiY1wiIT09XCJiXCIucmVwbGFjZShlLFwiJDxhPmNcIil9KSksJHVlPWhhZS5nZXQsSHVlPUVpZShcIm5hdGl2ZS1zdHJpbmctcmVwbGFjZVwiLFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksVnVlPVJlZ0V4cC5wcm90b3R5cGUuZXhlYyxVdWU9VnVlLFd1ZT0kb2UoXCJcIi5jaGFyQXQpLEd1ZT0kb2UoXCJcIi5pbmRleE9mKSxxdWU9JG9lKFwiXCIucmVwbGFjZSksS3VlPSRvZShcIlwiLnNsaWNlKSxZdWU9KE51ZT0vYiovZyxfb2UoVnVlLGp1ZT0vYS8sXCJhXCIpLF9vZShWdWUsTnVlLFwiYVwiKSwwIT09anVlLmxhc3RJbmRleHx8MCE9PU51ZS5sYXN0SW5kZXgpLFh1ZT1DdWUuQlJPS0VOX0NBUkVULFp1ZT12b2lkIDAhPT0vKCk/Py8uZXhlYyhcIlwiKVsxXTsoWXVlfHxadWV8fFh1ZXx8UnVlfHx6dWUpJiYoVXVlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixvLGksYSx1LHM9dGhpcyxsPSR1ZShzKSxjPXd1ZShlKSxmPWwucmF3O2lmKGYpcmV0dXJuIGYubGFzdEluZGV4PXMubGFzdEluZGV4LHQ9X29lKFV1ZSxmLGMpLHMubGFzdEluZGV4PWYubGFzdEluZGV4LHQ7dmFyIGQ9bC5ncm91cHMscD1YdWUmJnMuc3RpY2t5LGg9X29lKEV1ZSxzKSxnPXMuc291cmNlLHY9MCx5PWM7aWYocCYmKGg9cXVlKGgsXCJ5XCIsXCJcIiksLTE9PT1HdWUoaCxcImdcIikmJihoKz1cImdcIikseT1LdWUoYyxzLmxhc3RJbmRleCkscy5sYXN0SW5kZXg+MCYmKCFzLm11bHRpbGluZXx8cy5tdWx0aWxpbmUmJlwiXFxuXCIhPT1XdWUoYyxzLmxhc3RJbmRleC0xKSkmJihnPVwiKD86IFwiK2crXCIpXCIseT1cIiBcIit5LHYrKyksbj1uZXcgUmVnRXhwKFwiXig/OlwiK2crXCIpXCIsaCkpLFp1ZSYmKG49bmV3IFJlZ0V4cChcIl5cIitnK1wiJCg/IVxcXFxzKVwiLGgpKSxZdWUmJihyPXMubGFzdEluZGV4KSxvPV9vZShWdWUscD9uOnMseSkscD9vPyhvLmlucHV0PUt1ZShvLmlucHV0LHYpLG9bMF09S3VlKG9bMF0sdiksby5pbmRleD1zLmxhc3RJbmRleCxzLmxhc3RJbmRleCs9b1swXS5sZW5ndGgpOnMubGFzdEluZGV4PTA6WXVlJiZvJiYocy5sYXN0SW5kZXg9cy5nbG9iYWw/by5pbmRleCtvWzBdLmxlbmd0aDpyKSxadWUmJm8mJm8ubGVuZ3RoPjEmJl9vZShIdWUsb1swXSxuLChmdW5jdGlvbigpe2ZvcihpPTE7aTxhcmd1bWVudHMubGVuZ3RoLTI7aSsrKXZvaWQgMD09PWFyZ3VtZW50c1tpXSYmKG9baV09dm9pZCAwKX0pKSxvJiZkKWZvcihvLmdyb3Vwcz1hPUl1ZShudWxsKSxpPTA7aTxkLmxlbmd0aDtpKyspYVsodT1kW2ldKVswXV09b1t1WzFdXTtyZXR1cm4gb30pO3ZhciBKdWU9VXVlO0thZSh7dGFyZ2V0OlwiUmVnRXhwXCIscHJvdG86ITAsZm9yY2VkOi8uLy5leGVjIT09SnVlfSx7ZXhlYzpKdWV9KTt2YXIgUXVlPUZ1bmN0aW9uLnByb3RvdHlwZSxlc2U9UXVlLmFwcGx5LHRzZT1RdWUuYmluZCxuc2U9UXVlLmNhbGwscnNlPVwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fHwodHNlP25zZS5iaW5kKGVzZSk6ZnVuY3Rpb24oKXtyZXR1cm4gbnNlLmFwcGx5KGVzZSxhcmd1bWVudHMpfSksb3NlPWppZShcInNwZWNpZXNcIiksaXNlPVJlZ0V4cC5wcm90b3R5cGUsYXNlPWppZShcIm1hdGNoXCIpLHVzZT1rb2UuVHlwZUVycm9yLHNzZT1qaWUoXCJzcGVjaWVzXCIpLGxzZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9R2llKGUpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1yfHxudWxsPT0obj1HaWUocilbc3NlXSk/dDpmdW5jdGlvbihlKXtpZihsdWUoZSkpcmV0dXJuIGU7dGhyb3cgdXNlKHBpZShlKStcIiBpcyBub3QgYSBjb25zdHJ1Y3RvclwiKX0obil9LGNzZT0kb2UoXCJcIi5jaGFyQXQpLGZzZT0kb2UoXCJcIi5jaGFyQ29kZUF0KSxkc2U9JG9lKFwiXCIuc2xpY2UpLHBzZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcixvLGk9d3VlKFlvZSh0KSksYT1EYWUobiksdT1pLmxlbmd0aDtyZXR1cm4gYTwwfHxhPj11P2U/XCJcIjp2b2lkIDA6KHI9ZnNlKGksYSkpPDU1Mjk2fHxyPjU2MzE5fHxhKzE9PT11fHwobz1mc2UoaSxhKzEpKTw1NjMyMHx8bz41NzM0Mz9lP2NzZShpLGEpOnI6ZT9kc2UoaSxhLGErMik6by01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fX0saHNlPXtjb2RlQXQ6cHNlKCExKSxjaGFyQXQ6cHNlKCEwKX0sZ3NlPWhzZS5jaGFyQXQsdnNlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCsobj9nc2UoZSx0KS5sZW5ndGg6MSl9LHlzZT1rb2UuQXJyYXksbXNlPU1hdGgubWF4LGJzZT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPWthZShlKSxvPUNhZSh0LHIpLGk9Q2FlKHZvaWQgMD09PW4/cjpuLHIpLGE9eXNlKG1zZShpLW8sMCkpLHU9MDtvPGk7bysrLHUrKyljdWUoYSx1LGVbb10pO3JldHVybiBhLmxlbmd0aD11LGF9LHdzZT1rb2UuVHlwZUVycm9yLEVzZT1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhlYztpZihab2Uobikpe3ZhciByPV9vZShuLGUsdCk7cmV0dXJuIG51bGwhPT1yJiZHaWUocikscn1pZihcIlJlZ0V4cFwiPT09VW9lKGUpKXJldHVybiBfb2UoSnVlLGUsdCk7dGhyb3cgd3NlKFwiUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlclwiKX0sRHNlPUN1ZS5VTlNVUFBPUlRFRF9ZLFNzZT1NYXRoLm1pbix4c2U9W10ucHVzaCxDc2U9JG9lKC8uLy5leGVjKSxBc2U9JG9lKHhzZSksT3NlPSRvZShcIlwiLnNsaWNlKTshZnVuY3Rpb24oZSx0LG4scil7dmFyIG89amllKGUpLGk9IUJvZSgoZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdFtvXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT1cIlwiW2VdKHQpfSkpLGE9aSYmIUJvZSgoZnVuY3Rpb24oKXt2YXIgZT0hMSx0PS9hLztyZXR1cm4odD17fSkuY29uc3RydWN0b3I9e30sdC5jb25zdHJ1Y3Rvcltvc2VdPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHQuZmxhZ3M9XCJcIix0W29dPS8uL1tvXSx0LmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gZT0hMCxudWxsfSx0W29dKFwiXCIpLCFlfSkpO2lmKCFpfHwhYXx8bil7dmFyIHU9JG9lKC8uL1tvXSkscz1mdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHI9XCJjXCI9PVwiYWJiY1wiLnNwbGl0KC8oYikqLylbMV18fDQhPVwidGVzdFwiLnNwbGl0KC8oPzopLywtMSkubGVuZ3RofHwyIT1cImFiXCIuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGh8fDQhPVwiLlwiLnNwbGl0KC8oLj8pKC4/KS8pLmxlbmd0aHx8XCIuXCIuc3BsaXQoLygpKCkvKS5sZW5ndGg+MXx8XCJcIi5zcGxpdCgvLj8vKS5sZW5ndGg/ZnVuY3Rpb24oZSxuKXt2YXIgcixvLGk9d3VlKFlvZSh0aGlzKSksYT12b2lkIDA9PT1uPzQyOTQ5NjcyOTU6bj4+PjA7aWYoMD09PWEpcmV0dXJuW107aWYodm9pZCAwPT09ZSlyZXR1cm5baV07aWYoIUpvZShyPWUpfHwhKHZvaWQgMCE9PShvPXJbYXNlXSk/bzpcIlJlZ0V4cFwiPT1Vb2UocikpKXJldHVybiBfb2UodCxpLGUsYSk7Zm9yKHZhciB1LHMsbCxjPVtdLGY9KGUuaWdub3JlQ2FzZT9cImlcIjpcIlwiKSsoZS5tdWx0aWxpbmU/XCJtXCI6XCJcIikrKGUudW5pY29kZT9cInVcIjpcIlwiKSsoZS5zdGlja3k/XCJ5XCI6XCJcIiksZD0wLHA9bmV3IFJlZ0V4cChlLnNvdXJjZSxmK1wiZ1wiKTsodT1fb2UoSnVlLHAsaSkpJiYhKChzPXAubGFzdEluZGV4KT5kJiYoQXNlKGMsT3NlKGksZCx1LmluZGV4KSksdS5sZW5ndGg+MSYmdS5pbmRleDxpLmxlbmd0aCYmcnNlKHhzZSxjLGJzZSh1LDEpKSxsPXVbMF0ubGVuZ3RoLGQ9cyxjLmxlbmd0aD49YSkpOylwLmxhc3RJbmRleD09PXUuaW5kZXgmJnAubGFzdEluZGV4Kys7cmV0dXJuIGQ9PT1pLmxlbmd0aD8hbCYmQ3NlKHAsXCJcIil8fEFzZShjLFwiXCIpOkFzZShjLE9zZShpLGQpKSxjLmxlbmd0aD5hP2JzZShjLDAsYSk6Y306XCIwXCIuc3BsaXQodm9pZCAwLDApLmxlbmd0aD9mdW5jdGlvbihlLG4pe3JldHVybiB2b2lkIDA9PT1lJiYwPT09bj9bXTpfb2UodCx0aGlzLGUsbil9OnQsW2Z1bmN0aW9uKHQsbil7dmFyIG89WW9lKHRoaXMpLGk9bnVsbD09dD92b2lkIDA6dmllKHQsZSk7cmV0dXJuIGk/X29lKGksdCxvLG4pOl9vZShyLHd1ZShvKSx0LG4pfSxmdW5jdGlvbihlLG8pe3ZhciBpPUdpZSh0aGlzKSxhPXd1ZShlKSx1PW4ocixpLGEsbyxyIT09dCk7aWYodS5kb25lKXJldHVybiB1LnZhbHVlO3ZhciBzPWxzZShpLFJlZ0V4cCksbD1pLnVuaWNvZGUsYz0oaS5pZ25vcmVDYXNlP1wiaVwiOlwiXCIpKyhpLm11bHRpbGluZT9cIm1cIjpcIlwiKSsoaS51bmljb2RlP1widVwiOlwiXCIpKyhEc2U/XCJnXCI6XCJ5XCIpLGY9bmV3IHMoRHNlP1wiXig/OlwiK2kuc291cmNlK1wiKVwiOmksYyksZD12b2lkIDA9PT1vPzQyOTQ5NjcyOTU6bz4+PjA7aWYoMD09PWQpcmV0dXJuW107aWYoMD09PWEubGVuZ3RoKXJldHVybiBudWxsPT09RXNlKGYsYSk/W2FdOltdO2Zvcih2YXIgcD0wLGg9MCxnPVtdO2g8YS5sZW5ndGg7KXtmLmxhc3RJbmRleD1Ec2U/MDpoO3ZhciB2LHk9RXNlKGYsRHNlP09zZShhLGgpOmEpO2lmKG51bGw9PT15fHwodj1Tc2UoT2FlKGYubGFzdEluZGV4KyhEc2U/aDowKSksYS5sZW5ndGgpKT09PXApaD12c2UoYSxoLGwpO2Vsc2V7aWYoQXNlKGcsT3NlKGEscCxoKSksZy5sZW5ndGg9PT1kKXJldHVybiBnO2Zvcih2YXIgbT0xO208PXkubGVuZ3RoLTE7bSsrKWlmKEFzZShnLHlbbV0pLGcubGVuZ3RoPT09ZClyZXR1cm4gZztoPXA9dn19cmV0dXJuIEFzZShnLE9zZShhLHApKSxnfV19KG8sXCJcIltlXSwoZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgYT0kb2UoZSkscz10LmV4ZWM7cmV0dXJuIHM9PT1KdWV8fHM9PT1pc2UuZXhlYz9pJiYhbz97ZG9uZTohMCx2YWx1ZTp1KHQsbixyKX06e2RvbmU6ITAsdmFsdWU6YShuLHQscil9Ontkb25lOiExfX0pKTtiYWUoU3RyaW5nLnByb3RvdHlwZSxlLHNbMF0pLGJhZShpc2UsbyxzWzFdKX1yJiZYaWUoaXNlW29dLFwic2hhbVwiLCEwKX0oXCJzcGxpdFwiLDAsISFCb2UoKGZ1bmN0aW9uKCl7dmFyIGU9Lyg/OikvLHQ9ZS5leGVjO2UuZXhlYz1mdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIG49XCJhYlwiLnNwbGl0KGUpO3JldHVybiAyIT09bi5sZW5ndGh8fFwiYVwiIT09blswXXx8XCJiXCIhPT1uWzFdfSkpLERzZSk7XG4vKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbnZhciBrc2U9ZnVuY3Rpb24oKXtyZXR1cm4ga3NlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW25dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0sa3NlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gQnNlKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihvLGkpe2Z1bmN0aW9uIGEoZSl7dHJ5e3Moci5uZXh0KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiB1KGUpe3RyeXtzKHIudGhyb3coZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIHMoZSl7dmFyIHQ7ZS5kb25lP28oZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEsdSl9cygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfWZ1bmN0aW9uIEZzZShlLHQpe3ZhciBuLHIsbyxpLGE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb1swXSl0aHJvdyBvWzFdO3JldHVybiBvWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGk9e25leHQ6dSgwKSx0aHJvdzp1KDEpLHJldHVybjp1KDIpfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGk7ZnVuY3Rpb24gdShpKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGZ1bmN0aW9uKGkpe2lmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDthOyl0cnl7aWYobj0xLHImJihvPTImaVswXT9yLnJldHVybjppWzBdP3IudGhyb3d8fCgobz1yLnJldHVybikmJm8uY2FsbChyKSwwKTpyLm5leHQpJiYhKG89by5jYWxsKHIsaVsxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKHI9MCxvJiYoaT1bMiZpWzBdLG8udmFsdWVdKSxpWzBdKXtjYXNlIDA6Y2FzZSAxOm89aTticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6aVsxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9aVsxXSxpPVswXTtjb250aW51ZTtjYXNlIDc6aT1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChvPShvPWEudHJ5cykubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pfHw2IT09aVswXSYmMiE9PWlbMF0pKXthPTA7Y29udGludWV9aWYoMz09PWlbMF0mJighb3x8aVsxXT5vWzBdJiZpWzFdPG9bM10pKXthLmxhYmVsPWlbMV07YnJlYWt9aWYoNj09PWlbMF0mJmEubGFiZWw8b1sxXSl7YS5sYWJlbD1vWzFdLG89aTticmVha31pZihvJiZhLmxhYmVsPG9bMl0pe2EubGFiZWw9b1syXSxhLm9wcy5wdXNoKGkpO2JyZWFrfW9bMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1pPXQuY2FsbChlLGEpfWNhdGNoKGUpe2k9WzYsZV0scj0wfWZpbmFsbHl7bj1vPTB9aWYoNSZpWzBdKXRocm93IGlbMV07cmV0dXJue3ZhbHVlOmlbMF0/aVsxXTp2b2lkIDAsZG9uZTohMH19KFtpLHVdKX19fWZ1bmN0aW9uIFRzZShlKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTt2YXIgdCxuPWVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdO3JldHVybiBuP24uY2FsbChlKTooZT1mdW5jdGlvbihlKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixuPXQmJmVbdF0scj0wO2lmKG4pcmV0dXJuIG4uY2FsbChlKTtpZihlJiZcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSYmcj49ZS5sZW5ndGgmJihlPXZvaWQgMCkse3ZhbHVlOmUmJmVbcisrXSxkb25lOiFlfX19O3Rocm93IG5ldyBUeXBlRXJyb3IodD9cIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCI6XCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpfShlKSx0PXt9LHIoXCJuZXh0XCIpLHIoXCJ0aHJvd1wiKSxyKFwicmV0dXJuXCIpLHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQpO2Z1bmN0aW9uIHIobil7dFtuXT1lW25dJiZmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbyl7IWZ1bmN0aW9uKGUsdCxuLHIpe1Byb21pc2UucmVzb2x2ZShyKS50aGVuKChmdW5jdGlvbih0KXtlKHt2YWx1ZTp0LGRvbmU6bn0pfSksdCl9KHIsbywodD1lW25dKHQpKS5kb25lLHQudmFsdWUpfSkpfX19dmFyIF9zZT1qaWUoXCJ1bnNjb3BhYmxlc1wiKSxQc2U9QXJyYXkucHJvdG90eXBlO251bGw9PVBzZVtfc2VdJiZZaWUuZihQc2UsX3NlLHtjb25maWd1cmFibGU6ITAsdmFsdWU6SXVlKG51bGwpfSk7dmFyIGpzZSxOc2UsSXNlLExzZT1mdW5jdGlvbihlKXtQc2VbX3NlXVtlXT0hMH0sUnNlPXt9LE1zZT0hQm9lKChmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBlKSE9PWUucHJvdG90eXBlfSkpLHpzZT1pYWUoXCJJRV9QUk9UT1wiKSwkc2U9a29lLk9iamVjdCxIc2U9JHNlLnByb3RvdHlwZSxWc2U9TXNlPyRzZS5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXt2YXIgdD1TaWUoZSk7aWYoQ2llKHQsenNlKSlyZXR1cm4gdFt6c2VdO3ZhciBuPXQuY29uc3RydWN0b3I7cmV0dXJuIFpvZShuKSYmdCBpbnN0YW5jZW9mIG4/bi5wcm90b3R5cGU6dCBpbnN0YW5jZW9mICRzZT9Ic2U6bnVsbH0sVXNlPWppZShcIml0ZXJhdG9yXCIpLFdzZT0hMTtbXS5rZXlzJiYoXCJuZXh0XCJpbihJc2U9W10ua2V5cygpKT8oTnNlPVZzZShWc2UoSXNlKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKGpzZT1Oc2UpOldzZT0hMCk7dmFyIEdzZT1udWxsPT1qc2V8fEJvZSgoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4ganNlW1VzZV0uY2FsbChlKSE9PWV9KSk7R3NlJiYoanNlPXt9KSxab2UoanNlW1VzZV0pfHxiYWUoanNlLFVzZSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgcXNlPXtJdGVyYXRvclByb3RvdHlwZTpqc2UsQlVHR1lfU0FGQVJJX0lURVJBVE9SUzpXc2V9LEtzZT1ZaWUuZixZc2U9amllKFwidG9TdHJpbmdUYWdcIiksWHNlPWZ1bmN0aW9uKGUsdCxuKXtlJiYhQ2llKGU9bj9lOmUucHJvdG90eXBlLFlzZSkmJktzZShlLFlzZSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnR9KX0sWnNlPXFzZS5JdGVyYXRvclByb3RvdHlwZSxKc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sUXNlPWtvZS5TdHJpbmcsZWxlPWtvZS5UeXBlRXJyb3IsdGxlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8KFwiX19wcm90b19fXCJpbnt9P2Z1bmN0aW9uKCl7dmFyIGUsdD0hMSxuPXt9O3RyeXsoZT0kb2UoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLFwiX19wcm90b19fXCIpLnNldCkpKG4sW10pLHQ9biBpbnN0YW5jZW9mIEFycmF5fWNhdGNoKGUpe31yZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gR2llKG4pLGZ1bmN0aW9uKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlfHxab2UoZSkpcmV0dXJuIGU7dGhyb3cgZWxlKFwiQ2FuJ3Qgc2V0IFwiK1FzZShlKStcIiBhcyBhIHByb3RvdHlwZVwiKX0ociksdD9lKG4scik6bi5fX3Byb3RvX189cixufX0oKTp2b2lkIDApLG5sZT1tYWUuUFJPUEVSLHJsZT1tYWUuQ09ORklHVVJBQkxFLG9sZT1xc2UuSXRlcmF0b3JQcm90b3R5cGUsaWxlPXFzZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTLGFsZT1qaWUoXCJpdGVyYXRvclwiKSx1bGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sc2xlPWZ1bmN0aW9uKGUsdCxuLHIsbyxpLGEpeyFmdW5jdGlvbihlLHQsbixyKXt2YXIgbz10K1wiIEl0ZXJhdG9yXCI7ZS5wcm90b3R5cGU9SXVlKFpzZSx7bmV4dDpJb2UoMSxuKX0pLFhzZShlLG8sITEpLFJzZVtvXT1Kc2V9KG4sdCxyKTt2YXIgdSxzLGwsYz1mdW5jdGlvbihlKXtpZihlPT09byYmZylyZXR1cm4gZztpZighaWxlJiZlIGluIHApcmV0dXJuIHBbZV07c3dpdGNoKGUpe2Nhc2VcImtleXNcIjpjYXNlXCJ2YWx1ZXNcIjpjYXNlXCJlbnRyaWVzXCI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzKX19LGY9dCtcIiBJdGVyYXRvclwiLGQ9ITEscD1lLnByb3RvdHlwZSxoPXBbYWxlXXx8cFtcIkBAaXRlcmF0b3JcIl18fG8mJnBbb10sZz0haWxlJiZofHxjKG8pLHY9XCJBcnJheVwiPT10JiZwLmVudHJpZXN8fGg7aWYodiYmKHU9VnNlKHYuY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJnUubmV4dCYmKFZzZSh1KSE9PW9sZSYmKHRsZT90bGUodSxvbGUpOlpvZSh1W2FsZV0pfHxiYWUodSxhbGUsdWxlKSksWHNlKHUsZiwhMCkpLG5sZSYmXCJ2YWx1ZXNcIj09byYmaCYmXCJ2YWx1ZXNcIiE9PWgubmFtZSYmKHJsZT9YaWUocCxcIm5hbWVcIixcInZhbHVlc1wiKTooZD0hMCxnPWZ1bmN0aW9uKCl7cmV0dXJuIF9vZShoLHRoaXMpfSkpLG8paWYocz17dmFsdWVzOmMoXCJ2YWx1ZXNcIiksa2V5czppP2c6YyhcImtleXNcIiksZW50cmllczpjKFwiZW50cmllc1wiKX0sYSlmb3IobCBpbiBzKShpbGV8fGR8fCEobCBpbiBwKSkmJmJhZShwLGwsc1tsXSk7ZWxzZSBLYWUoe3RhcmdldDp0LHByb3RvOiEwLGZvcmNlZDppbGV8fGR9LHMpO3JldHVybiBwW2FsZV0hPT1nJiZiYWUocCxhbGUsZyx7bmFtZTpvfSksUnNlW3RdPWcsc30sbGxlPWhhZS5zZXQsY2xlPWhhZS5nZXR0ZXJGb3IoXCJBcnJheSBJdGVyYXRvclwiKSxmbGU9c2xlKEFycmF5LFwiQXJyYXlcIiwoZnVuY3Rpb24oZSx0KXtsbGUodGhpcyx7dHlwZTpcIkFycmF5IEl0ZXJhdG9yXCIsdGFyZ2V0OlhvZShlKSxpbmRleDowLGtpbmQ6dH0pfSksKGZ1bmN0aW9uKCl7dmFyIGU9Y2xlKHRoaXMpLHQ9ZS50YXJnZXQsbj1lLmtpbmQscj1lLmluZGV4Kys7cmV0dXJuIXR8fHI+PXQubGVuZ3RoPyhlLnRhcmdldD12b2lkIDAse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk6XCJrZXlzXCI9PW4/e3ZhbHVlOnIsZG9uZTohMX06XCJ2YWx1ZXNcIj09bj97dmFsdWU6dFtyXSxkb25lOiExfTp7dmFsdWU6W3IsdFtyXV0sZG9uZTohMX19KSxcInZhbHVlc1wiKTtSc2UuQXJndW1lbnRzPVJzZS5BcnJheSxMc2UoXCJrZXlzXCIpLExzZShcInZhbHVlc1wiKSxMc2UoXCJlbnRyaWVzXCIpO3ZhciBkbGU9aHNlLmNoYXJBdCxwbGU9aGFlLnNldCxobGU9aGFlLmdldHRlckZvcihcIlN0cmluZyBJdGVyYXRvclwiKTtzbGUoU3RyaW5nLFwiU3RyaW5nXCIsKGZ1bmN0aW9uKGUpe3BsZSh0aGlzLHt0eXBlOlwiU3RyaW5nIEl0ZXJhdG9yXCIsc3RyaW5nOnd1ZShlKSxpbmRleDowfSl9KSwoZnVuY3Rpb24oKXt2YXIgZSx0PWhsZSh0aGlzKSxuPXQuc3RyaW5nLHI9dC5pbmRleDtyZXR1cm4gcj49bi5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfTooZT1kbGUobixyKSx0LmluZGV4Kz1lLmxlbmd0aCx7dmFsdWU6ZSxkb25lOiExfSl9KSk7dmFyIGdsZT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByIGluIHQpYmFlKGUscix0W3JdLG4pO3JldHVybiBlfSx2bGU9TmFlLmYseWxlPVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXSxtbGU9e2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIHlsZSYmXCJXaW5kb3dcIj09VW9lKGUpP2Z1bmN0aW9uKGUpe3RyeXtyZXR1cm4gdmxlKGUpfWNhdGNoKGUpe3JldHVybiBic2UoeWxlKX19KGUpOnZsZShYb2UoZSkpfX0sYmxlPUJvZSgoZnVuY3Rpb24oKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBBcnJheUJ1ZmZlcil7dmFyIGU9bmV3IEFycmF5QnVmZmVyKDgpO09iamVjdC5pc0V4dGVuc2libGUoZSkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiYVwiLHt2YWx1ZTo4fSl9fSkpLHdsZT1PYmplY3QuaXNFeHRlbnNpYmxlLEVsZT1Cb2UoKGZ1bmN0aW9uKCl7d2xlKDEpfSkpfHxibGU/ZnVuY3Rpb24oZSl7cmV0dXJuISFKb2UoZSkmJighYmxlfHxcIkFycmF5QnVmZmVyXCIhPVVvZShlKSkmJighd2xlfHx3bGUoZSkpfTp3bGUsRGxlPSFCb2UoKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSksU2xlPXhvZSgoZnVuY3Rpb24oZSl7dmFyIHQ9WWllLmYsbj0hMSxyPUJpZShcIm1ldGFcIiksbz0wLGk9ZnVuY3Rpb24oZSl7dChlLHIse3ZhbHVlOntvYmplY3RJRDpcIk9cIitvKyssd2Vha0RhdGE6e319fSl9LGE9ZS5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXthLmVuYWJsZT1mdW5jdGlvbigpe30sbj0hMDt2YXIgZT1OYWUuZix0PSRvZShbXS5zcGxpY2UpLG89e307b1tyXT0xLGUobykubGVuZ3RoJiYoTmFlLmY9ZnVuY3Rpb24obil7Zm9yKHZhciBvPWUobiksaT0wLGE9by5sZW5ndGg7aTxhO2krKylpZihvW2ldPT09cil7dChvLGksMSk7YnJlYWt9cmV0dXJuIG99LEthZSh7dGFyZ2V0OlwiT2JqZWN0XCIsc3RhdDohMCxmb3JjZWQ6ITB9LHtnZXRPd25Qcm9wZXJ0eU5hbWVzOm1sZS5mfSkpfSxmYXN0S2V5OmZ1bmN0aW9uKGUsdCl7aWYoIUpvZShlKSlyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZT9lOihcInN0cmluZ1wiPT10eXBlb2YgZT9cIlNcIjpcIlBcIikrZTtpZighQ2llKGUscikpe2lmKCFFbGUoZSkpcmV0dXJuXCJGXCI7aWYoIXQpcmV0dXJuXCJFXCI7aShlKX1yZXR1cm4gZVtyXS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24oZSx0KXtpZighQ2llKGUscikpe2lmKCFFbGUoZSkpcmV0dXJuITA7aWYoIXQpcmV0dXJuITE7aShlKX1yZXR1cm4gZVtyXS53ZWFrRGF0YX0sb25GcmVlemU6ZnVuY3Rpb24oZSl7cmV0dXJuIERsZSYmbiYmRWxlKGUpJiYhQ2llKGUscikmJmkoZSksZX19O2FhZVtyXT0hMH0pKSx4bGU9JG9lKCRvZS5iaW5kKSxDbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZ2llKGUpLHZvaWQgMD09PXQ/ZTp4bGU/eGxlKGUsdCk6ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fSxBbGU9amllKFwiaXRlcmF0b3JcIiksT2xlPUFycmF5LnByb3RvdHlwZSxrbGU9amllKFwiaXRlcmF0b3JcIiksQmxlPWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpcmV0dXJuIHZpZShlLGtsZSl8fHZpZShlLFwiQEBpdGVyYXRvclwiKXx8UnNlW3R1ZShlKV19LEZsZT1rb2UuVHlwZUVycm9yLFRsZT1mdW5jdGlvbihlLHQsbil7dmFyIHIsbztHaWUoZSk7dHJ5e2lmKCEocj12aWUoZSxcInJldHVyblwiKSkpe2lmKFwidGhyb3dcIj09PXQpdGhyb3cgbjtyZXR1cm4gbn1yPV9vZShyLGUpfWNhdGNoKGUpe289ITAscj1lfWlmKFwidGhyb3dcIj09PXQpdGhyb3cgbjtpZihvKXRocm93IHI7cmV0dXJuIEdpZShyKSxufSxfbGU9a29lLlR5cGVFcnJvcixQbGU9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0b3BwZWQ9ZSx0aGlzLnJlc3VsdD10fSxqbGU9UGxlLnByb3RvdHlwZSxObGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saSxhLHUscyxsLGMsZj1uJiZuLnRoYXQsZD0hKCFufHwhbi5BU19FTlRSSUVTKSxwPSEoIW58fCFuLklTX0lURVJBVE9SKSxoPSEoIW58fCFuLklOVEVSUlVQVEVEKSxnPUNsZSh0LGYpLHY9ZnVuY3Rpb24oZSl7cmV0dXJuIHImJlRsZShyLFwibm9ybWFsXCIsZSksbmV3IFBsZSghMCxlKX0seT1mdW5jdGlvbihlKXtyZXR1cm4gZD8oR2llKGUpLGg/ZyhlWzBdLGVbMV0sdik6ZyhlWzBdLGVbMV0pKTpoP2coZSx2KTpnKGUpfTtpZihwKXI9ZTtlbHNle2lmKCEobz1CbGUoZSkpKXRocm93IF9sZShwaWUoZSkrXCIgaXMgbm90IGl0ZXJhYmxlXCIpO2lmKHZvaWQgMCE9PShjPW8pJiYoUnNlLkFycmF5PT09Y3x8T2xlW0FsZV09PT1jKSl7Zm9yKGk9MCxhPWthZShlKTthPmk7aSsrKWlmKCh1PXkoZVtpXSkpJiZ0aWUoamxlLHUpKXJldHVybiB1O3JldHVybiBuZXcgUGxlKCExKX1yPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwyP0JsZShlKTp0O2lmKGdpZShuKSlyZXR1cm4gR2llKF9vZShuLGUpKTt0aHJvdyBGbGUocGllKGUpK1wiIGlzIG5vdCBpdGVyYWJsZVwiKX0oZSxvKX1mb3Iocz1yLm5leHQ7IShsPV9vZShzLHIpKS5kb25lOyl7dHJ5e3U9eShsLnZhbHVlKX1jYXRjaChlKXtUbGUocixcInRocm93XCIsZSl9aWYoXCJvYmplY3RcIj09dHlwZW9mIHUmJnUmJnRpZShqbGUsdSkpcmV0dXJuIHV9cmV0dXJuIG5ldyBQbGUoITEpfSxJbGU9a29lLlR5cGVFcnJvcixMbGU9ZnVuY3Rpb24oZSx0KXtpZih0aWUodCxlKSlyZXR1cm4gZTt0aHJvdyBJbGUoXCJJbmNvcnJlY3QgaW52b2NhdGlvblwiKX0sUmxlPWppZShcIml0ZXJhdG9yXCIpLE1sZT0hMTt0cnl7dmFyIHpsZT0wLCRsZT17bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEhemxlKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtNbGU9ITB9fTskbGVbUmxlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKCRsZSwoZnVuY3Rpb24oKXt0aHJvdyAyfSkpfWNhdGNoKE1sKXt9dmFyIEhsZT1mdW5jdGlvbihlLHQpe2lmKCF0JiYhTWxlKXJldHVybiExO3ZhciBuPSExO3RyeXt2YXIgcj17fTtyW1JsZV09ZnVuY3Rpb24oKXtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fX19LGUocil9Y2F0Y2goZSl7fXJldHVybiBufSxWbGU9amllKFwic3BlY2llc1wiKSxVbGU9a29lLkFycmF5LFdsZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIFlhZShlKSYmKHQ9ZS5jb25zdHJ1Y3RvciwobHVlKHQpJiYodD09PVVsZXx8WWFlKHQucHJvdG90eXBlKSl8fEpvZSh0KSYmbnVsbD09PSh0PXRbVmxlXSkpJiYodD12b2lkIDApKSx2b2lkIDA9PT10P1VsZTp0fShlKSkoMD09PXQ/MDp0KX0sR2xlPSRvZShbXS5wdXNoKSxxbGU9ZnVuY3Rpb24oZSl7dmFyIHQ9MT09ZSxuPTI9PWUscj0zPT1lLG89ND09ZSxpPTY9PWUsYT03PT1lLHU9NT09ZXx8aTtyZXR1cm4gZnVuY3Rpb24ocyxsLGMsZil7Zm9yKHZhciBkLHAsaD1TaWUocyksZz1xb2UoaCksdj1DbGUobCxjKSx5PWthZShnKSxtPTAsYj1mfHxXbGUsdz10P2Iocyx5KTpufHxhP2IocywwKTp2b2lkIDA7eT5tO20rKylpZigodXx8bSBpbiBnKSYmKHA9dihkPWdbbV0sbSxoKSxlKSlpZih0KXdbbV09cDtlbHNlIGlmKHApc3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIGQ7Y2FzZSA2OnJldHVybiBtO2Nhc2UgMjpHbGUodyxkKX1lbHNlIHN3aXRjaChlKXtjYXNlIDQ6cmV0dXJuITE7Y2FzZSA3OkdsZSh3LGQpfXJldHVybiBpPy0xOnJ8fG8/bzp3fX0sS2xlPXtmb3JFYWNoOnFsZSgwKSxtYXA6cWxlKDEpLGZpbHRlcjpxbGUoMiksc29tZTpxbGUoMyksZXZlcnk6cWxlKDQpLGZpbmQ6cWxlKDUpLGZpbmRJbmRleDpxbGUoNiksZmlsdGVyUmVqZWN0OnFsZSg3KX0sWWxlPVNsZS5nZXRXZWFrRGF0YSxYbGU9aGFlLnNldCxabGU9aGFlLmdldHRlckZvcixKbGU9S2xlLmZpbmQsUWxlPUtsZS5maW5kSW5kZXgsZWNlPSRvZShbXS5zcGxpY2UpLHRjZT0wLG5jZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5mcm96ZW58fChlLmZyb3plbj1uZXcgcmNlKX0scmNlPWZ1bmN0aW9uKCl7dGhpcy5lbnRyaWVzPVtdfSxvY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSmxlKGUuZW50cmllcywoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF09PT10fSkpfTtyY2UucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9b2NlKHRoaXMsZSk7aWYodClyZXR1cm4gdFsxXX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiEhb2NlKHRoaXMsZSl9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuPW9jZSh0aGlzLGUpO24/blsxXT10OnRoaXMuZW50cmllcy5wdXNoKFtlLHRdKX0sZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PVFsZSh0aGlzLmVudHJpZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09ZX0pKTtyZXR1cm5+dCYmZWNlKHRoaXMuZW50cmllcyx0LDEpLCEhfnR9fTt2YXIgaWNlLGFjZT17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89ZSgoZnVuY3Rpb24oZSxvKXtMbGUoZSxpKSxYbGUoZSx7dHlwZTp0LGlkOnRjZSsrLGZyb3plbjp2b2lkIDB9KSxudWxsIT1vJiZObGUobyxlW3JdLHt0aGF0OmUsQVNfRU5UUklFUzpufSl9KSksaT1vLnByb3RvdHlwZSxhPVpsZSh0KSx1PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1hKGUpLG89WWxlKEdpZSh0KSwhMCk7cmV0dXJuITA9PT1vP25jZShyKS5zZXQodCxuKTpvW3IuaWRdPW4sZX07cmV0dXJuIGdsZShpLHtkZWxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ9YSh0aGlzKTtpZighSm9lKGUpKXJldHVybiExO3ZhciBuPVlsZShlKTtyZXR1cm4hMD09PW4/bmNlKHQpLmRlbGV0ZShlKTpuJiZDaWUobix0LmlkKSYmZGVsZXRlIG5bdC5pZF19LGhhczpmdW5jdGlvbihlKXt2YXIgdD1hKHRoaXMpO2lmKCFKb2UoZSkpcmV0dXJuITE7dmFyIG49WWxlKGUpO3JldHVybiEwPT09bj9uY2UodCkuaGFzKGUpOm4mJkNpZShuLHQuaWQpfX0pLGdsZShpLG4/e2dldDpmdW5jdGlvbihlKXt2YXIgdD1hKHRoaXMpO2lmKEpvZShlKSl7dmFyIG49WWxlKGUpO3JldHVybiEwPT09bj9uY2UodCkuZ2V0KGUpOm4/blt0LmlkXTp2b2lkIDB9fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdSh0aGlzLGUsdCl9fTp7YWRkOmZ1bmN0aW9uKGUpe3JldHVybiB1KHRoaXMsZSwhMCl9fSksb319LHVjZT1oYWUuZW5mb3JjZSxzY2U9IWtvZS5BY3RpdmVYT2JqZWN0JiZcIkFjdGl2ZVhPYmplY3RcImluIGtvZSxsY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0sY2NlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0tMSE9PWUuaW5kZXhPZihcIk1hcFwiKSxvPS0xIT09ZS5pbmRleE9mKFwiV2Vha1wiKSxpPXI/XCJzZXRcIjpcImFkZFwiLGE9a29lW2VdLHU9YSYmYS5wcm90b3R5cGUscz1hLGw9e30sYz1mdW5jdGlvbihlKXt2YXIgdD0kb2UodVtlXSk7YmFlKHUsZSxcImFkZFwiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMsMD09PWU/MDplKSx0aGlzfTpcImRlbGV0ZVwiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiEobyYmIUpvZShlKSkmJnQodGhpcywwPT09ZT8wOmUpfTpcImdldFwiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiBvJiYhSm9lKGUpP3ZvaWQgMDp0KHRoaXMsMD09PWU/MDplKX06XCJoYXNcIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKG8mJiFKb2UoZSkpJiZ0KHRoaXMsMD09PWU/MDplKX06ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdCh0aGlzLDA9PT1lPzA6ZSxuKSx0aGlzfSl9O2lmKEdhZShlLCFab2UoYSl8fCEob3x8dS5mb3JFYWNoJiYhQm9lKChmdW5jdGlvbigpeyhuZXcgYSkuZW50cmllcygpLm5leHQoKX0pKSkpKXM9bi5nZXRDb25zdHJ1Y3Rvcih0LGUscixpKSxTbGUuZW5hYmxlKCk7ZWxzZSBpZihHYWUoZSwhMCkpe3ZhciBmPW5ldyBzLGQ9ZltpXShvP3t9Oi0wLDEpIT1mLHA9Qm9lKChmdW5jdGlvbigpe2YuaGFzKDEpfSkpLGg9SGxlKChmdW5jdGlvbihlKXtuZXcgYShlKX0pKSxnPSFvJiZCb2UoKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBhLHQ9NTt0LS07KWVbaV0odCx0KTtyZXR1cm4hZS5oYXMoLTApfSkpO2h8fCgocz10KChmdW5jdGlvbihlLHQpe0xsZShlLHUpO3ZhciBuPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvO3JldHVybiB0bGUmJlpvZShyPXQuY29uc3RydWN0b3IpJiZyIT09biYmSm9lKG89ci5wcm90b3R5cGUpJiZvIT09bi5wcm90b3R5cGUmJnRsZShlLG8pLGV9KG5ldyBhLGUscyk7cmV0dXJuIG51bGwhPXQmJk5sZSh0LG5baV0se3RoYXQ6bixBU19FTlRSSUVTOnJ9KSxufSkpKS5wcm90b3R5cGU9dSx1LmNvbnN0cnVjdG9yPXMpLChwfHxnKSYmKGMoXCJkZWxldGVcIiksYyhcImhhc1wiKSxyJiZjKFwiZ2V0XCIpKSwoZ3x8ZCkmJmMoaSksbyYmdS5jbGVhciYmZGVsZXRlIHUuY2xlYXJ9cmV0dXJuIGxbZV09cyxLYWUoe2dsb2JhbDohMCxmb3JjZWQ6cyE9YX0sbCksWHNlKHMsZSksb3x8bi5zZXRTdHJvbmcocyxlLHIpLHN9KFwiV2Vha01hcFwiLGxjZSxhY2UpO2lmKHJhZSYmc2NlKXtpY2U9YWNlLmdldENvbnN0cnVjdG9yKGxjZSxcIldlYWtNYXBcIiwhMCksU2xlLmVuYWJsZSgpO3ZhciBmY2U9Y2NlLnByb3RvdHlwZSxkY2U9JG9lKGZjZS5kZWxldGUpLHBjZT0kb2UoZmNlLmhhcyksaGNlPSRvZShmY2UuZ2V0KSxnY2U9JG9lKGZjZS5zZXQpO2dsZShmY2Use2RlbGV0ZTpmdW5jdGlvbihlKXtpZihKb2UoZSkmJiFFbGUoZSkpe3ZhciB0PXVjZSh0aGlzKTtyZXR1cm4gdC5mcm96ZW58fCh0LmZyb3plbj1uZXcgaWNlKSxkY2UodGhpcyxlKXx8dC5mcm96ZW4uZGVsZXRlKGUpfXJldHVybiBkY2UodGhpcyxlKX0saGFzOmZ1bmN0aW9uKGUpe2lmKEpvZShlKSYmIUVsZShlKSl7dmFyIHQ9dWNlKHRoaXMpO3JldHVybiB0LmZyb3plbnx8KHQuZnJvemVuPW5ldyBpY2UpLHBjZSh0aGlzLGUpfHx0LmZyb3plbi5oYXMoZSl9cmV0dXJuIHBjZSh0aGlzLGUpfSxnZXQ6ZnVuY3Rpb24oZSl7aWYoSm9lKGUpJiYhRWxlKGUpKXt2YXIgdD11Y2UodGhpcyk7cmV0dXJuIHQuZnJvemVufHwodC5mcm96ZW49bmV3IGljZSkscGNlKHRoaXMsZSk/aGNlKHRoaXMsZSk6dC5mcm96ZW4uZ2V0KGUpfXJldHVybiBoY2UodGhpcyxlKX0sc2V0OmZ1bmN0aW9uKGUsdCl7aWYoSm9lKGUpJiYhRWxlKGUpKXt2YXIgbj11Y2UodGhpcyk7bi5mcm96ZW58fChuLmZyb3plbj1uZXcgaWNlKSxwY2UodGhpcyxlKT9nY2UodGhpcyxlLHQpOm4uZnJvemVuLnNldChlLHQpfWVsc2UgZ2NlKHRoaXMsZSx0KTtyZXR1cm4gdGhpc319KX12YXIgdmNlPXtDU1NSdWxlTGlzdDowLENTU1N0eWxlRGVjbGFyYXRpb246MCxDU1NWYWx1ZUxpc3Q6MCxDbGllbnRSZWN0TGlzdDowLERPTVJlY3RMaXN0OjAsRE9NU3RyaW5nTGlzdDowLERPTVRva2VuTGlzdDoxLERhdGFUcmFuc2Zlckl0ZW1MaXN0OjAsRmlsZUxpc3Q6MCxIVE1MQWxsQ29sbGVjdGlvbjowLEhUTUxDb2xsZWN0aW9uOjAsSFRNTEZvcm1FbGVtZW50OjAsSFRNTFNlbGVjdEVsZW1lbnQ6MCxNZWRpYUxpc3Q6MCxNaW1lVHlwZUFycmF5OjAsTmFtZWROb2RlTWFwOjAsTm9kZUxpc3Q6MSxQYWludFJlcXVlc3RMaXN0OjAsUGx1Z2luOjAsUGx1Z2luQXJyYXk6MCxTVkdMZW5ndGhMaXN0OjAsU1ZHTnVtYmVyTGlzdDowLFNWR1BhdGhTZWdMaXN0OjAsU1ZHUG9pbnRMaXN0OjAsU1ZHU3RyaW5nTGlzdDowLFNWR1RyYW5zZm9ybUxpc3Q6MCxTb3VyY2VCdWZmZXJMaXN0OjAsU3R5bGVTaGVldExpc3Q6MCxUZXh0VHJhY2tDdWVMaXN0OjAsVGV4dFRyYWNrTGlzdDowLFRvdWNoTGlzdDowfSx5Y2U9emllKFwic3BhblwiKS5jbGFzc0xpc3QsbWNlPXljZSYmeWNlLmNvbnN0cnVjdG9yJiZ5Y2UuY29uc3RydWN0b3IucHJvdG90eXBlLGJjZT1tY2U9PT1PYmplY3QucHJvdG90eXBlP3ZvaWQgMDptY2Usd2NlPWppZShcIml0ZXJhdG9yXCIpLEVjZT1qaWUoXCJ0b1N0cmluZ1RhZ1wiKSxEY2U9ZmxlLnZhbHVlcyxTY2U9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZihlW3djZV0hPT1EY2UpdHJ5e1hpZShlLHdjZSxEY2UpfWNhdGNoKHQpe2Vbd2NlXT1EY2V9aWYoZVtFY2VdfHxYaWUoZSxFY2UsdCksdmNlW3RdKWZvcih2YXIgbiBpbiBmbGUpaWYoZVtuXSE9PWZsZVtuXSl0cnl7WGllKGUsbixmbGVbbl0pfWNhdGNoKHQpe2Vbbl09ZmxlW25dfX19O2Zvcih2YXIgeGNlIGluIHZjZSlTY2Uoa29lW3hjZV0mJmtvZVt4Y2VdLnByb3RvdHlwZSx4Y2UpO1NjZShiY2UsXCJET01Ub2tlbkxpc3RcIik7dmFyIENjZT1mdW5jdGlvbihlLHQpe3ZhciBuPVtdW2VdO3JldHVybiEhbiYmQm9lKChmdW5jdGlvbigpe24uY2FsbChudWxsLHR8fGZ1bmN0aW9uKCl7dGhyb3cgMX0sMSl9KSl9LEFjZT1LbGUuZm9yRWFjaCxPY2U9Q2NlKFwiZm9yRWFjaFwiKT9bXS5mb3JFYWNoOmZ1bmN0aW9uKGUpe3JldHVybiBBY2UodGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0sa2NlPWZ1bmN0aW9uKGUpe2lmKGUmJmUuZm9yRWFjaCE9PU9jZSl0cnl7WGllKGUsXCJmb3JFYWNoXCIsT2NlKX1jYXRjaCh0KXtlLmZvckVhY2g9T2NlfX07Zm9yKHZhciBCY2UgaW4gdmNlKXZjZVtCY2VdJiZrY2Uoa29lW0JjZV0mJmtvZVtCY2VdLnByb3RvdHlwZSk7a2NlKGJjZSk7dmFyIEZjZSxUY2UsX2NlLFBjZSxqY2U9a29lLlByb21pc2UsTmNlPWppZShcInNwZWNpZXNcIiksSWNlPS8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KG5pZSksTGNlPVwicHJvY2Vzc1wiPT1Vb2Uoa29lLnByb2Nlc3MpLFJjZT1rb2Uuc2V0SW1tZWRpYXRlLE1jZT1rb2UuY2xlYXJJbW1lZGlhdGUsemNlPWtvZS5wcm9jZXNzLCRjZT1rb2UuRGlzcGF0Y2gsSGNlPWtvZS5GdW5jdGlvbixWY2U9a29lLk1lc3NhZ2VDaGFubmVsLFVjZT1rb2UuU3RyaW5nLFdjZT0wLEdjZT17fTt0cnl7RmNlPWtvZS5sb2NhdGlvbn1jYXRjaChNbCl7fXZhciBxY2U9ZnVuY3Rpb24oZSl7aWYoQ2llKEdjZSxlKSl7dmFyIHQ9R2NlW2VdO2RlbGV0ZSBHY2VbZV0sdCgpfX0sS2NlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3FjZShlKX19LFljZT1mdW5jdGlvbihlKXtxY2UoZS5kYXRhKX0sWGNlPWZ1bmN0aW9uKGUpe2tvZS5wb3N0TWVzc2FnZShVY2UoZSksRmNlLnByb3RvY29sK1wiLy9cIitGY2UuaG9zdCl9O1JjZSYmTWNlfHwoUmNlPWZ1bmN0aW9uKGUpe3ZhciB0PWR1ZShhcmd1bWVudHMsMSk7cmV0dXJuIEdjZVsrK1djZV09ZnVuY3Rpb24oKXtyc2UoWm9lKGUpP2U6SGNlKGUpLHZvaWQgMCx0KX0sVGNlKFdjZSksV2NlfSxNY2U9ZnVuY3Rpb24oZSl7ZGVsZXRlIEdjZVtlXX0sTGNlP1RjZT1mdW5jdGlvbihlKXt6Y2UubmV4dFRpY2soS2NlKGUpKX06JGNlJiYkY2Uubm93P1RjZT1mdW5jdGlvbihlKXskY2Uubm93KEtjZShlKSl9OlZjZSYmIUljZT8oUGNlPShfY2U9bmV3IFZjZSkucG9ydDIsX2NlLnBvcnQxLm9ubWVzc2FnZT1ZY2UsVGNlPUNsZShQY2UucG9zdE1lc3NhZ2UsUGNlKSk6a29lLmFkZEV2ZW50TGlzdGVuZXImJlpvZShrb2UucG9zdE1lc3NhZ2UpJiYha29lLmltcG9ydFNjcmlwdHMmJkZjZSYmXCJmaWxlOlwiIT09RmNlLnByb3RvY29sJiYhQm9lKFhjZSk/KFRjZT1YY2Usa29lLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsWWNlLCExKSk6VGNlPVwib25yZWFkeXN0YXRlY2hhbmdlXCJpbiB6aWUoXCJzY3JpcHRcIik/ZnVuY3Rpb24oZSl7a3VlLmFwcGVuZENoaWxkKHppZShcInNjcmlwdFwiKSkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7a3VlLnJlbW92ZUNoaWxkKHRoaXMpLHFjZShlKX19OmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoS2NlKGUpLDApfSk7dmFyIFpjZSxKY2UsUWNlLGVmZSx0ZmUsbmZlLHJmZSxvZmUsaWZlPXtzZXQ6UmNlLGNsZWFyOk1jZX0sYWZlPS9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdChuaWUpJiZ2b2lkIDAhPT1rb2UuUGViYmxlLHVmZT0vd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KG5pZSksc2ZlPVZpZS5mLGxmZT1pZmUuc2V0LGNmZT1rb2UuTXV0YXRpb25PYnNlcnZlcnx8a29lLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsZmZlPWtvZS5kb2N1bWVudCxkZmU9a29lLnByb2Nlc3MscGZlPWtvZS5Qcm9taXNlLGhmZT1zZmUoa29lLFwicXVldWVNaWNyb3Rhc2tcIiksZ2ZlPWhmZSYmaGZlLnZhbHVlO2dmZXx8KFpjZT1mdW5jdGlvbigpe3ZhciBlLHQ7Zm9yKExjZSYmKGU9ZGZlLmRvbWFpbikmJmUuZXhpdCgpO0pjZTspe3Q9SmNlLmZuLEpjZT1KY2UubmV4dDt0cnl7dCgpfWNhdGNoKGUpe3Rocm93IEpjZT9lZmUoKTpRY2U9dm9pZCAwLGV9fVFjZT12b2lkIDAsZSYmZS5lbnRlcigpfSxJY2V8fExjZXx8dWZlfHwhY2ZlfHwhZmZlPyFhZmUmJnBmZSYmcGZlLnJlc29sdmU/KChyZmU9cGZlLnJlc29sdmUodm9pZCAwKSkuY29uc3RydWN0b3I9cGZlLG9mZT1DbGUocmZlLnRoZW4scmZlKSxlZmU9ZnVuY3Rpb24oKXtvZmUoWmNlKX0pOkxjZT9lZmU9ZnVuY3Rpb24oKXtkZmUubmV4dFRpY2soWmNlKX06KGxmZT1DbGUobGZlLGtvZSksZWZlPWZ1bmN0aW9uKCl7bGZlKFpjZSl9KToodGZlPSEwLG5mZT1mZmUuY3JlYXRlVGV4dE5vZGUoXCJcIiksbmV3IGNmZShaY2UpLm9ic2VydmUobmZlLHtjaGFyYWN0ZXJEYXRhOiEwfSksZWZlPWZ1bmN0aW9uKCl7bmZlLmRhdGE9dGZlPSF0ZmV9KSk7dmFyIHZmZSx5ZmUsbWZlLGJmZSx3ZmU9Z2ZlfHxmdW5jdGlvbihlKXt2YXIgdD17Zm46ZSxuZXh0OnZvaWQgMH07UWNlJiYoUWNlLm5leHQ9dCksSmNlfHwoSmNlPXQsZWZlKCkpLFFjZT10fSxFZmU9ZnVuY3Rpb24oZSl7dmFyIHQsbjt0aGlzLnByb21pc2U9bmV3IGUoKGZ1bmN0aW9uKGUscil7aWYodm9pZCAwIT09dHx8dm9pZCAwIT09bil0aHJvdyBUeXBlRXJyb3IoXCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvclwiKTt0PWUsbj1yfSkpLHRoaXMucmVzb2x2ZT1naWUodCksdGhpcy5yZWplY3Q9Z2llKG4pfSxEZmU9e2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBFZmUoZSl9fSxTZmU9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybntlcnJvcjohMSx2YWx1ZTplKCl9fWNhdGNoKGUpe3JldHVybntlcnJvcjohMCx2YWx1ZTplfX19LHhmZT1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93LENmZT1pZmUuc2V0LEFmZT1qaWUoXCJzcGVjaWVzXCIpLE9mZT1cIlByb21pc2VcIixrZmU9aGFlLmdldHRlckZvcihPZmUpLEJmZT1oYWUuc2V0LEZmZT1oYWUuZ2V0dGVyRm9yKE9mZSksVGZlPWpjZSYmamNlLnByb3RvdHlwZSxfZmU9amNlLFBmZT1UZmUsamZlPWtvZS5UeXBlRXJyb3IsTmZlPWtvZS5kb2N1bWVudCxJZmU9a29lLnByb2Nlc3MsTGZlPURmZS5mLFJmZT1MZmUsTWZlPSEhKE5mZSYmTmZlLmNyZWF0ZUV2ZW50JiZrb2UuZGlzcGF0Y2hFdmVudCksemZlPVpvZShrb2UuUHJvbWlzZVJlamVjdGlvbkV2ZW50KSwkZmU9ITEsSGZlPUdhZShPZmUsKGZ1bmN0aW9uKCl7dmFyIGU9dGFlKF9mZSksdD1lIT09U3RyaW5nKF9mZSk7aWYoIXQmJjY2PT09dWllKXJldHVybiEwO2lmKHVpZT49NTEmJi9uYXRpdmUgY29kZS8udGVzdChlKSlyZXR1cm4hMTt2YXIgbj1uZXcgX2ZlKChmdW5jdGlvbihlKXtlKDEpfSkpLHI9ZnVuY3Rpb24oZSl7ZSgoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24oKXt9KSl9O3JldHVybihuLmNvbnN0cnVjdG9yPXt9KVtBZmVdPXIsISgkZmU9bi50aGVuKChmdW5jdGlvbigpe30pKWluc3RhbmNlb2Ygcil8fCF0JiZ4ZmUmJiF6ZmV9KSksVmZlPUhmZXx8IUhsZSgoZnVuY3Rpb24oZSl7X2ZlLmFsbChlKS5jYXRjaCgoZnVuY3Rpb24oKXt9KSl9KSksVWZlPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiEoIUpvZShlKXx8IVpvZSh0PWUudGhlbikpJiZ0fSxXZmU9ZnVuY3Rpb24oZSx0KXtpZighZS5ub3RpZmllZCl7ZS5ub3RpZmllZD0hMDt2YXIgbj1lLnJlYWN0aW9uczt3ZmUoKGZ1bmN0aW9uKCl7Zm9yKHZhciByPWUudmFsdWUsbz0xPT1lLnN0YXRlLGk9MDtuLmxlbmd0aD5pOyl7dmFyIGEsdSxzLGw9bltpKytdLGM9bz9sLm9rOmwuZmFpbCxmPWwucmVzb2x2ZSxkPWwucmVqZWN0LHA9bC5kb21haW47dHJ5e2M/KG98fCgyPT09ZS5yZWplY3Rpb24mJllmZShlKSxlLnJlamVjdGlvbj0xKSwhMD09PWM/YT1yOihwJiZwLmVudGVyKCksYT1jKHIpLHAmJihwLmV4aXQoKSxzPSEwKSksYT09PWwucHJvbWlzZT9kKGpmZShcIlByb21pc2UtY2hhaW4gY3ljbGVcIikpOih1PVVmZShhKSk/X29lKHUsYSxmLGQpOmYoYSkpOmQocil9Y2F0Y2goZSl7cCYmIXMmJnAuZXhpdCgpLGQoZSl9fWUucmVhY3Rpb25zPVtdLGUubm90aWZpZWQ9ITEsdCYmIWUucmVqZWN0aW9uJiZxZmUoZSl9KSl9fSxHZmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG87TWZlPygocj1OZmUuY3JlYXRlRXZlbnQoXCJFdmVudFwiKSkucHJvbWlzZT10LHIucmVhc29uPW4sci5pbml0RXZlbnQoZSwhMSwhMCksa29lLmRpc3BhdGNoRXZlbnQocikpOnI9e3Byb21pc2U6dCxyZWFzb246bn0sIXpmZSYmKG89a29lW1wib25cIitlXSk/byhyKTpcInVuaGFuZGxlZHJlamVjdGlvblwiPT09ZSYmZnVuY3Rpb24oZSx0KXt2YXIgbj1rb2UuY29uc29sZTtuJiZuLmVycm9yJiYoMT09YXJndW1lbnRzLmxlbmd0aD9uLmVycm9yKGUpOm4uZXJyb3IoZSx0KSl9KFwiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uXCIsbil9LHFmZT1mdW5jdGlvbihlKXtfb2UoQ2ZlLGtvZSwoZnVuY3Rpb24oKXt2YXIgdCxuPWUuZmFjYWRlLHI9ZS52YWx1ZTtpZihLZmUoZSkmJih0PVNmZSgoZnVuY3Rpb24oKXtMY2U/SWZlLmVtaXQoXCJ1bmhhbmRsZWRSZWplY3Rpb25cIixyLG4pOkdmZShcInVuaGFuZGxlZHJlamVjdGlvblwiLG4scil9KSksZS5yZWplY3Rpb249TGNlfHxLZmUoZSk/MjoxLHQuZXJyb3IpKXRocm93IHQudmFsdWV9KSl9LEtmZT1mdW5jdGlvbihlKXtyZXR1cm4gMSE9PWUucmVqZWN0aW9uJiYhZS5wYXJlbnR9LFlmZT1mdW5jdGlvbihlKXtfb2UoQ2ZlLGtvZSwoZnVuY3Rpb24oKXt2YXIgdD1lLmZhY2FkZTtMY2U/SWZlLmVtaXQoXCJyZWplY3Rpb25IYW5kbGVkXCIsdCk6R2ZlKFwicmVqZWN0aW9uaGFuZGxlZFwiLHQsZS52YWx1ZSl9KSl9LFhmZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe2UodCxyLG4pfX0sWmZlPWZ1bmN0aW9uKGUsdCxuKXtlLmRvbmV8fChlLmRvbmU9ITAsbiYmKGU9biksZS52YWx1ZT10LGUuc3RhdGU9MixXZmUoZSwhMCkpfSxKZmU9ZnVuY3Rpb24oZSx0LG4pe2lmKCFlLmRvbmUpe2UuZG9uZT0hMCxuJiYoZT1uKTt0cnl7aWYoZS5mYWNhZGU9PT10KXRocm93IGpmZShcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO3ZhciByPVVmZSh0KTtyP3dmZSgoZnVuY3Rpb24oKXt2YXIgbj17ZG9uZTohMX07dHJ5e19vZShyLHQsWGZlKEpmZSxuLGUpLFhmZShaZmUsbixlKSl9Y2F0Y2godCl7WmZlKG4sdCxlKX19KSk6KGUudmFsdWU9dCxlLnN0YXRlPTEsV2ZlKGUsITEpKX1jYXRjaCh0KXtaZmUoe2RvbmU6ITF9LHQsZSl9fX07aWYoSGZlJiYoUGZlPShfZmU9ZnVuY3Rpb24oZSl7TGxlKHRoaXMsUGZlKSxnaWUoZSksX29lKHZmZSx0aGlzKTt2YXIgdD1rZmUodGhpcyk7dHJ5e2UoWGZlKEpmZSx0KSxYZmUoWmZlLHQpKX1jYXRjaChlKXtaZmUodCxlKX19KS5wcm90b3R5cGUsKHZmZT1mdW5jdGlvbihlKXtCZmUodGhpcyx7dHlwZTpPZmUsZG9uZTohMSxub3RpZmllZDohMSxwYXJlbnQ6ITEscmVhY3Rpb25zOltdLHJlamVjdGlvbjohMSxzdGF0ZTowLHZhbHVlOnZvaWQgMH0pfSkucHJvdG90eXBlPWdsZShQZmUse3RoZW46ZnVuY3Rpb24oZSx0KXt2YXIgbj1GZmUodGhpcykscj1uLnJlYWN0aW9ucyxvPUxmZShsc2UodGhpcyxfZmUpKTtyZXR1cm4gby5vaz0hWm9lKGUpfHxlLG8uZmFpbD1ab2UodCkmJnQsby5kb21haW49TGNlP0lmZS5kb21haW46dm9pZCAwLG4ucGFyZW50PSEwLHJbci5sZW5ndGhdPW8sMCE9bi5zdGF0ZSYmV2ZlKG4sITEpLG8ucHJvbWlzZX0sY2F0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsZSl9fSkseWZlPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHZmZSx0PWtmZShlKTt0aGlzLnByb21pc2U9ZSx0aGlzLnJlc29sdmU9WGZlKEpmZSx0KSx0aGlzLnJlamVjdD1YZmUoWmZlLHQpfSxEZmUuZj1MZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1fZmV8fGU9PT1tZmU/bmV3IHlmZShlKTpSZmUoZSl9LFpvZShqY2UpJiZUZmUhPT1PYmplY3QucHJvdG90eXBlKSl7YmZlPVRmZS50aGVuLCRmZXx8KGJhZShUZmUsXCJ0aGVuXCIsKGZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gbmV3IF9mZSgoZnVuY3Rpb24oZSx0KXtfb2UoYmZlLG4sZSx0KX0pKS50aGVuKGUsdCl9KSx7dW5zYWZlOiEwfSksYmFlKFRmZSxcImNhdGNoXCIsUGZlLmNhdGNoLHt1bnNhZmU6ITB9KSk7dHJ5e2RlbGV0ZSBUZmUuY29uc3RydWN0b3J9Y2F0Y2goTWwpe310bGUmJnRsZShUZmUsUGZlKX1LYWUoe2dsb2JhbDohMCx3cmFwOiEwLGZvcmNlZDpIZmV9LHtQcm9taXNlOl9mZX0pLFhzZShfZmUsT2ZlLCExKSxmdW5jdGlvbihlKXt2YXIgdD1laWUoXCJQcm9taXNlXCIpLG49WWllLmY7Rm9lJiZ0JiYhdFtOY2VdJiZuKHQsTmNlLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9KCksbWZlPWVpZShPZmUpLEthZSh7dGFyZ2V0Ok9mZSxzdGF0OiEwLGZvcmNlZDpIZmV9LHtyZWplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9TGZlKHRoaXMpO3JldHVybiBfb2UodC5yZWplY3Qsdm9pZCAwLGUpLHQucHJvbWlzZX19KSxLYWUoe3RhcmdldDpPZmUsc3RhdDohMCxmb3JjZWQ6SGZlfSx7cmVzb2x2ZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZihHaWUoZSksSm9lKHQpJiZ0LmNvbnN0cnVjdG9yPT09ZSlyZXR1cm4gdDt2YXIgbj1EZmUuZihlKTtyZXR1cm4oMCxuLnJlc29sdmUpKHQpLG4ucHJvbWlzZX0odGhpcyxlKX19KSxLYWUoe3RhcmdldDpPZmUsc3RhdDohMCxmb3JjZWQ6VmZlfSx7YWxsOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1MZmUodCkscj1uLnJlc29sdmUsbz1uLnJlamVjdCxpPVNmZSgoZnVuY3Rpb24oKXt2YXIgbj1naWUodC5yZXNvbHZlKSxpPVtdLGE9MCx1PTE7TmxlKGUsKGZ1bmN0aW9uKGUpe3ZhciBzPWErKyxsPSExO3UrKyxfb2Uobix0LGUpLnRoZW4oKGZ1bmN0aW9uKGUpe2x8fChsPSEwLGlbc109ZSwtLXV8fHIoaSkpfSksbyl9KSksLS11fHxyKGkpfSkpO3JldHVybiBpLmVycm9yJiZvKGkudmFsdWUpLG4ucHJvbWlzZX0scmFjZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49TGZlKHQpLHI9bi5yZWplY3Qsbz1TZmUoKGZ1bmN0aW9uKCl7dmFyIG89Z2llKHQucmVzb2x2ZSk7TmxlKGUsKGZ1bmN0aW9uKGUpe19vZShvLHQsZSkudGhlbihuLnJlc29sdmUscil9KSl9KSk7cmV0dXJuIG8uZXJyb3ImJnIoby52YWx1ZSksbi5wcm9taXNlfX0pO3ZhciBRZmU9bWFlLlBST1BFUixlZGU9UmVnRXhwLnByb3RvdHlwZSx0ZGU9ZWRlLnRvU3RyaW5nLG5kZT0kb2UoRXVlKSxyZGU9Qm9lKChmdW5jdGlvbigpe3JldHVyblwiL2EvYlwiIT10ZGUuY2FsbCh7c291cmNlOlwiYVwiLGZsYWdzOlwiYlwifSl9KSksb2RlPVFmZSYmXCJ0b1N0cmluZ1wiIT10ZGUubmFtZTsocmRlfHxvZGUpJiZiYWUoUmVnRXhwLnByb3RvdHlwZSxcInRvU3RyaW5nXCIsKGZ1bmN0aW9uKCl7dmFyIGU9R2llKHRoaXMpLHQ9d3VlKGUuc291cmNlKSxuPWUuZmxhZ3M7cmV0dXJuXCIvXCIrdCtcIi9cIit3dWUodm9pZCAwPT09biYmdGllKGVkZSxlKSYmIShcImZsYWdzXCJpbiBlZGUpP25kZShlKTpuKX0pLHt1bnNhZmU6ITB9KTt2YXIgaWRlPW1hZS5FWElTVFMsYWRlPVlpZS5mLHVkZT1GdW5jdGlvbi5wcm90b3R5cGUsc2RlPSRvZSh1ZGUudG9TdHJpbmcpLGxkZT0vZnVuY3Rpb25cXGIoPzpcXHN8XFwvXFwqW1xcU1xcc10qP1xcKlxcL3xcXC9cXC9bXlxcblxccl0qW1xcblxccl0rKSooW15cXHMoL10qKS8sY2RlPSRvZShsZGUuZXhlYyk7Rm9lJiYhaWRlJiZhZGUodWRlLFwibmFtZVwiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBjZGUobGRlLHNkZSh0aGlzKSlbMV19Y2F0Y2goZSl7cmV0dXJuXCJcIn19fSk7dmFyIGZkZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBkZGUoZSl7cmV0dXJuIGUuZ2V0TWVudUNvbmZpZyhcInVwbG9hZEltYWdlXCIpfWZ1bmN0aW9uIHBkZShlLHQpe3JldHVybiBCc2UodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBGc2UodGhpcywoZnVuY3Rpb24obil7cmV0dXJuWzIsbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4pe3ZhciByPW5ldyBGaWxlUmVhZGVyO3IucmVhZEFzRGF0YVVSTCh0KSxyLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBvPXIucmVzdWx0O2lmKG8pe3ZhciBpPW8udG9TdHJpbmcoKSxhPTA9PT1pLmluZGV4T2YoXCJkYXRhOmltYWdlXCIpP1wiXCI6aTtNJChlLGksdC5uYW1lLGEpLG4oXCJva1wiKX19fSkpXX0pKX0pKX1mdW5jdGlvbiBoZGUoZSx0KXtyZXR1cm4gQnNlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgbixyLG8saTtyZXR1cm4gRnNlKHRoaXMsKGZ1bmN0aW9uKGEpe3N3aXRjaChhLmxhYmVsKXtjYXNlIDA6cmV0dXJuIG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZmRlLmdldChlKTtpZihudWxsIT10KXJldHVybiB0O3ZhciBuPWRkZShlKSxyPW4ub25TdWNjZXNzLG89bi5vblByb2dyZXNzLGk9bi5vbkZhaWxlZCxhPW4uY3VzdG9tSW5zZXJ0LHU9bi5vbkVycm9yO3JldHVybiB0PUtfKGtzZShrc2Uoe30sbikse29uUHJvZ3Jlc3M6ZnVuY3Rpb24odCl7ZS5zaG93UHJvZ3Jlc3NCYXIodCksbyYmbyh0KX0sb25TdWNjZXNzOmZ1bmN0aW9uKHQsbil7aWYoYSlyZXR1cm4gYShuLChmdW5jdGlvbih0LG4scil7cmV0dXJuIE0kKGUsdCxuLHIpfSkpLHZvaWQgcih0LG4pO3ZhciBvPW4uZXJybm8sdT12b2lkIDA9PT1vPzE6byxzPW4uZGF0YSxsPXZvaWQgMD09PXM/e306cztpZigwPT09dSl7aWYoQXJyYXkuaXNBcnJheShsKSlsLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQudXJsLHI9dm9pZCAwPT09bj9cIlwiOm4sbz10LmFsdCxpPXZvaWQgMD09PW8/XCJcIjpvLGE9dC5ocmVmO00kKGUscixpLHZvaWQgMD09PWE/XCJcIjphKX0pKTtlbHNle3ZhciBjPWwudXJsLGY9dm9pZCAwPT09Yz9cIlwiOmMsZD1sLmFsdCxwPXZvaWQgMD09PWQ/XCJcIjpkLGg9bC5ocmVmO00kKGUsZixwLHZvaWQgMD09PWg/XCJcIjpoKX1yKHQsbil9ZWxzZSBpKHQsbil9LG9uRXJyb3I6ZnVuY3Rpb24oZSx0LG4pe3UoZSx0LG4pfX0pKSxmZGUuc2V0KGUsdCksdH0oZSkscj10Lm5hbWUsbz10LnR5cGUsaT10LnNpemUsbi5hZGRGaWxlKHtuYW1lOnIsdHlwZTpvLHNpemU6aSxkYXRhOnR9KSxbNCxuLnVwbG9hZCgpXTtjYXNlIDE6cmV0dXJuIGEuc2VudCgpLFsyXX19KSl9KSl9ZnVuY3Rpb24gZ2RlKGUsdCl7dmFyIG4scjtyZXR1cm4gQnNlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgbyxpLGEsdSxzLGwsYyxmLGQ7cmV0dXJuIEZzZSh0aGlzLChmdW5jdGlvbihwKXtzd2l0Y2gocC5sYWJlbCl7Y2FzZSAwOmlmKG51bGw9PXQpcmV0dXJuWzJdO289QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCksaT1kZGUoZSksYT1pLmN1c3RvbVVwbG9hZCx1PWkuYmFzZTY0TGltaXRTaXplLHAubGFiZWw9MTtjYXNlIDE6cC50cnlzLnB1c2goWzEsMTEsMTIsMTddKSxzPVRzZShvKSxwLmxhYmVsPTI7Y2FzZSAyOnJldHVybls0LHMubmV4dCgpXTtjYXNlIDM6cmV0dXJuKGw9cC5zZW50KCkpLmRvbmU/WzMsMTBdOihjPWwudmFsdWUsZj1jLnNpemUsdSYmZjw9dT9bNCxwZGUoZSxjKV06WzMsNV0pO2Nhc2UgNDpyZXR1cm4gcC5zZW50KCksWzMsOV07Y2FzZSA1OnJldHVybiBhP1s0LGEoYywoZnVuY3Rpb24odCxuLHIpe3JldHVybiBNJChlLHQsbixyKX0pKV06WzMsN107Y2FzZSA2OnJldHVybiBwLnNlbnQoKSxbMyw5XTtjYXNlIDc6cmV0dXJuWzQsaGRlKGUsYyldO2Nhc2UgODpwLnNlbnQoKSxwLmxhYmVsPTk7Y2FzZSA5OnJldHVyblszLDJdO2Nhc2UgMTA6cmV0dXJuWzMsMTddO2Nhc2UgMTE6cmV0dXJuIGQ9cC5zZW50KCksbj17ZXJyb3I6ZH0sWzMsMTddO2Nhc2UgMTI6cmV0dXJuIHAudHJ5cy5wdXNoKFsxMiwsMTUsMTZdKSxsJiYhbC5kb25lJiYocj1zLnJldHVybik/WzQsci5jYWxsKHMpXTpbMywxNF07Y2FzZSAxMzpwLnNlbnQoKSxwLmxhYmVsPTE0O2Nhc2UgMTQ6cmV0dXJuWzMsMTZdO2Nhc2UgMTU6aWYobil0aHJvdyBuLmVycm9yO3JldHVybls3XTtjYXNlIDE2OnJldHVybls3XTtjYXNlIDE3OnJldHVyblsyXX19KSl9KSl9dmFyIHZkZT0kb2UoW10uam9pbikseWRlPXFvZSE9T2JqZWN0LG1kZT1DY2UoXCJqb2luXCIsXCIsXCIpO0thZSh7dGFyZ2V0OlwiQXJyYXlcIixwcm90bzohMCxmb3JjZWQ6eWRlfHwhbWRlfSx7am9pbjpmdW5jdGlvbihlKXtyZXR1cm4gdmRlKFhvZSh0aGlzKSx2b2lkIDA9PT1lP1wiLFwiOmUpfX0pLGFoJiYoTXAuZm4uYXBwZW5kPWFoKSxxcCYmKE1wLmZuLm9uPXFwKSxkaCYmKE1wLmZuLnJlbW92ZT1kaCksR3AmJihNcC5mbi52YWw9R3ApLHZoJiYoTXAuZm4uY2xpY2s9dmgpLEpwJiYoTXAuZm4uaGlkZT1KcCk7dmFyIGJkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnRpdGxlPUhQKFwidXBsb2FkSW1nTW9kdWxlLnVwbG9hZEltYWdlXCIpLHRoaXMuaWNvblN2Zz0nPHN2ZyB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiPjxwYXRoIGQ9XCJNODI4LjcwODU3MSA1ODUuMDQ1MzMzYTQ4Ljc2MTkwNSA0OC43NjE5MDUgMCAwIDAtNDguNzM3NTIzIDQ4Ljc2MTkwNXYxOC41Mjk1MjRsLTcyLjE0MzIzOC03Mi4xNjc2MTlhMTM1Ljk3MjU3MSAxMzUuOTcyNTcxIDAgMCAwLTE5MS41ODU1MjQgMGwtMzQuMTMzMzM0IDM0LjEzMzMzMy0xMjAuODgwNzYyLTEyMC45NTM5MDVhMTM4Ljg5ODI4NiAxMzguODk4Mjg2IDAgMCAwLTE5MS41ODU1MjMgMGwtNzIuMTY3NjE5IDcyLjE2NzYxOVYyOTIuNDAwNzYyYTQ4Ljc4NjI4NiA0OC43ODYyODYgMCAwIDEgNDguNzYxOTA0LTQ4Ljc2MTkwNWgzNDEuMjM1ODFhNDguNzM3NTI0IDQ4LjczNzUyNCAwIDAgMCAzNC40NzQ2NjctODMuMjg1MzMzIDQ4LjczNzUyNCA0OC43Mzc1MjQgMCAwIDAtMzQuNDc0NjY3LTE0LjI4NzIzOEgxNDYuMjM2OTUyQTE0Ni4yMTI1NzEgMTQ2LjIxMjU3MSAwIDAgMCAwIDI5Mi40MDA3NjJ2NTg1LjI4OTE0M0ExNDYuMzU4ODU3IDE0Ni4zNTg4NTcgMCAwIDAgMTQ2LjIzNjk1MiAxMDI0aDU4NC45OTY1NzJhMTQ2LjIxMjU3MSAxNDYuMjEyNTcxIDAgMCAwIDE0Ni4yMzY5NTItMTQ2LjMxMDA5NVY2MzMuODA3MjM4YTQ4Ljc4NjI4NiA0OC43ODYyODYgMCAwIDAtNDguNzYxOTA1LTQ4Ljc2MTkwNXpNMTQ2LjI2MTMzMyA5MjYuNDUxODFhNDguNzM3NTI0IDQ4LjczNzUyNCAwIDAgMS00OC43NjE5MDQtNDguNzYxOTA1di0xNzQuMTI4NzYybDE0MS40MDk1MjMtMTQxLjQ1ODI4NmEzOC40OTc1MjQgMzguNDk3NTI0IDAgMCAxIDUzLjEyNjA5NiAwbDE1NC41MjY0NzYgMTU0LjYyNCAyMDkuNjI3NDI4IDIwOS43MjQ5NTNIMTQ2LjIzNjk1MnogbTYzMy43MzQwOTYtNDguNzYxOTA1Yy0wLjA3MzE0MyA5LjMzNzkwNS0zLjE0NTE0MyAxOC4zODMyMzgtOC43NzcxNDMgMjUuODQzODA5bC0yMTkuODQzMDQ4LTIyMC45NDAxOSAzNC4xMzMzMzMtMzQuMTMzMzM0YTM3LjU0NjY2NyAzNy41NDY2NjcgMCAwIDEgNTMuNjEzNzE1IDBsMTQwLjg3MzE0MyAxNDEuODk3MTQzVjg3Ny43MTQyODZ6TTEwMDkuNjE1MjM4IDE2MC4yMzE2MTlMODYzLjMyOTUyNCAxMy44OTcxNDNhNDguNzM3NTI0IDQ4LjczNzUyNCAwIDAgMC0xNi4wOTE0MjktMTAuMjRjLTExLjg0OTE0My00Ljg3NjE5LTI1LjE2MTE0My00Ljg3NjE5LTM3LjA1OTA0NyAwYTQ4Ljc2MTkwNSA0OC43NjE5MDUgMCAwIDAtMTYuMDY3MDQ4IDEwLjI0bC0xNDYuMjM2OTUyIDE0Ni4zMzQ0NzZhNDkuMDA1NzE0IDQ5LjAwNTcxNCAwIDAgMCA2OS4yMTc1MjMgNjkuMjQxOTA1bDYyLjkwMjg1OC02My4zOTA0NzZ2MjcyLjYyNzgwOWE0OC43NjE5MDUgNDguNzYxOTA1IDAgMSAwIDk3LjQ3NTA0NyAwVjE2Ni4wODMwNDhsNjIuOTAyODU3IDYzLjM5MDQ3NmE0OC43Mzc1MjQgNDguNzM3NTI0IDAgMCAwIDY5LjIxNzUyNCAwIDQ4Ljc2MTkwNSA0OC43NjE5MDUgMCAwIDAgMC02OS4yNDE5MDV6XCI+PC9wYXRoPjwvc3ZnPicsdGhpcy50YWc9XCJidXR0b25cIn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJcIn0sZS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHokKGUpfSxlLnByb3RvdHlwZS5nZXRNZW51Q29uZmlnPWZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1lbnVDb25maWcoXCJ1cGxvYWRJbWFnZVwiKX0sZS5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0TWVudUNvbmZpZyhlKSxyPW4uYWxsb3dlZEZpbGVUeXBlcyxvPXZvaWQgMD09PXI/W106cixpPW4uY3VzdG9tQnJvd3NlQW5kVXBsb2FkO2lmKGkpaSgoZnVuY3Rpb24odCxuLHIpe3JldHVybiBNJChlLHQsbixyKX0pKTtlbHNle3ZhciBhPVwiXCI7by5sZW5ndGg+MCYmKGE9J2FjY2VwdD1cIicrby5qb2luKFwiLCBcIikrJ1wiJyk7dmFyIHU9TXAoXCJib2R5XCIpLHM9TXAoJzxpbnB1dCB0eXBlPVwiZmlsZVwiICcrYStcIiBtdWx0aXBsZS8+XCIpO3MuaGlkZSgpLHUuYXBwZW5kKHMpLHMuY2xpY2soKSxzLm9uKFwiY2hhbmdlXCIsKGZ1bmN0aW9uKCl7dmFyIHQ9c1swXS5maWxlcztnZGUoZSx0KX0pKX19LGV9KCksd2RlPXttZW51czpbe2tleTpcInVwbG9hZEltYWdlXCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgYmRlfSxjb25maWc6e3NlcnZlcjpcIlwiLGZpZWxkTmFtZTpcIndhbmdlZGl0b3ItdXBsb2FkZWQtaW1hZ2VcIixtYXhGaWxlU2l6ZToyMDk3MTUyLG1heE51bWJlck9mRmlsZXM6MTAwLGFsbG93ZWRGaWxlVHlwZXM6W1wiaW1hZ2UvKlwiXSxtZXRhOnt9LG1ldGFXaXRoVXJsOiExLHdpdGhDcmVkZW50aWFsczohMSx0aW1lb3V0OjFlNCxvbkJlZm9yZVVwbG9hZDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sb25Qcm9ncmVzczpmdW5jdGlvbihlKXt9LG9uU3VjY2VzczpmdW5jdGlvbihlLHQpe30sb25GYWlsZWQ6ZnVuY3Rpb24oZSx0KXtjb25zb2xlLmVycm9yKFwiJ1wiK2UubmFtZStcIicgdXBsb2FkIGZhaWxlZFwiLHQpfSxvbkVycm9yOmZ1bmN0aW9uKGUsdCxuKXtjb25zb2xlLmVycm9yKFwiJ1wiK2UubmFtZStcIicgdXBsb2FkIGVycm9yXCIsbil9LGJhc2U2NExpbWl0U2l6ZTowfX1dLGVkaXRvclBsdWdpbjpmdW5jdGlvbihlKXt2YXIgdD1lLmluc2VydERhdGEsbj1lO3JldHVybiBuLmluc2VydERhdGE9ZnVuY3Rpb24ocil7aWYoeiQobikpdChyKTtlbHNlIGlmKHIuZ2V0RGF0YShcInRleHQvcGxhaW5cIikpdChyKTtlbHNle3ZhciBvPXIuZmlsZXM7by5sZW5ndGg8PTA/dChyKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvKS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm5cImltYWdlXCI9PT1mdW5jdGlvbihlLHQpe3ZhciBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiBlO3ZhciByLG8saT1uLmNhbGwoZSksYT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09dHx8dC0tID4wKSYmIShyPWkubmV4dCgpKS5kb25lOylhLnB1c2goci52YWx1ZSl9Y2F0Y2goZSl7bz17ZXJyb3I6ZX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKG49aS5yZXR1cm4pJiZuLmNhbGwoaSl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybiBhfShlLnR5cGUuc3BsaXQoXCIvXCIpLDEpWzBdfSkpP2dkZShlLG8pOnQocil9fSxufX07TVAoXCJlblwiLHtoaWdoTGlnaHRNb2R1bGU6e3NlbGVjdExhbmc6XCJMYW5ndWFnZVwifX0pLE1QKFwiemgtQ05cIix7aGlnaExpZ2h0TW9kdWxlOntzZWxlY3RMYW5nOlwi6YCJ5oup6K+t6KiAXCJ9fSk7dmFyIEVkZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gRGRlKGUpe3ZhciB0PXtleHBvcnRzOnt9fTtyZXR1cm4gZSh0LHQuZXhwb3J0cyksdC5leHBvcnRzfXZhciBTZGUseGRlLENkZT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5NYXRoPT1NYXRoJiZlfSxBZGU9Q2RlKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8Q2RlKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyl8fENkZShcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZil8fENkZShcIm9iamVjdFwiPT10eXBlb2YgRWRlJiZFZGUpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksT2RlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxrZGU9ZnVuY3Rpb24oZSx0KXt0cnl7T2RlKEFkZSxlLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoKG4pe0FkZVtlXT10fXJldHVybiB0fSxCZGU9QWRlW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdfHxrZGUoXCJfX2NvcmUtanNfc2hhcmVkX19cIix7fSksRmRlPURkZSgoZnVuY3Rpb24oZSl7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBCZGVbZV18fChCZGVbZV09dm9pZCAwIT09dD90Ont9KX0pKFwidmVyc2lvbnNcIixbXSkucHVzaCh7dmVyc2lvbjpcIjMuMTkuM1wiLG1vZGU6XCJnbG9iYWxcIixjb3B5cmlnaHQ6XCLCqSAyMDIxIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpXCJ9KX0pKSxUZGU9RnVuY3Rpb24ucHJvdG90eXBlLF9kZT1UZGUuYmluZCxQZGU9VGRlLmNhbGwsamRlPV9kZSYmX2RlLmJpbmQoUGRlKSxOZGU9X2RlP2Z1bmN0aW9uKGUpe3JldHVybiBlJiZqZGUoUGRlLGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmZnVuY3Rpb24oKXtyZXR1cm4gUGRlLmFwcGx5KGUsYXJndW1lbnRzKX19LElkZT1BZGUuVHlwZUVycm9yLExkZT1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IElkZShcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiK2UpO3JldHVybiBlfSxSZGU9QWRlLk9iamVjdCxNZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFJkZShMZGUoZSkpfSx6ZGU9TmRlKHt9Lmhhc093blByb3BlcnR5KSwkZGU9T2JqZWN0Lmhhc093bnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gemRlKE1kZShlKSx0KX0sSGRlPTAsVmRlPU1hdGgucmFuZG9tKCksVWRlPU5kZSgxLi50b1N0cmluZyksV2RlPWZ1bmN0aW9uKGUpe3JldHVyblwiU3ltYm9sKFwiKyh2b2lkIDA9PT1lP1wiXCI6ZSkrXCIpX1wiK1VkZSgrK0hkZStWZGUsMzYpfSxHZGU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZX0scWRlPWZ1bmN0aW9uKGUpe3JldHVybiBHZGUoZSk/ZTp2b2lkIDB9LEtkZT1mdW5jdGlvbihlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/cWRlKEFkZVtlXSk6QWRlW2VdJiZBZGVbZV1bdF19LFlkZT1LZGUoXCJuYXZpZ2F0b3JcIixcInVzZXJBZ2VudFwiKXx8XCJcIixYZGU9QWRlLnByb2Nlc3MsWmRlPUFkZS5EZW5vLEpkZT1YZGUmJlhkZS52ZXJzaW9uc3x8WmRlJiZaZGUudmVyc2lvbixRZGU9SmRlJiZKZGUudjg7UWRlJiYoeGRlPShTZGU9UWRlLnNwbGl0KFwiLlwiKSlbMF0+MCYmU2RlWzBdPDQ/MTorKFNkZVswXStTZGVbMV0pKSwheGRlJiZZZGUmJighKFNkZT1ZZGUubWF0Y2goL0VkZ2VcXC8oXFxkKykvKSl8fFNkZVsxXT49NzQpJiYoU2RlPVlkZS5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLykpJiYoeGRlPStTZGVbMV0pO3ZhciBlcGU9eGRlLHRwZT1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fSxucGU9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhdHBlKChmdW5jdGlvbigpe3ZhciBlPVN5bWJvbCgpO3JldHVybiFTdHJpbmcoZSl8fCEoT2JqZWN0KGUpaW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLnNoYW0mJmVwZSYmZXBlPDQxfSkpLHJwZT1ucGUmJiFTeW1ib2wuc2hhbSYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcixvcGU9RmRlKFwid2tzXCIpLGlwZT1BZGUuU3ltYm9sLGFwZT1pcGUmJmlwZS5mb3IsdXBlPXJwZT9pcGU6aXBlJiZpcGUud2l0aG91dFNldHRlcnx8V2RlLHNwZT1mdW5jdGlvbihlKXtpZighJGRlKG9wZSxlKXx8IW5wZSYmXCJzdHJpbmdcIiE9dHlwZW9mIG9wZVtlXSl7dmFyIHQ9XCJTeW1ib2wuXCIrZTtucGUmJiRkZShpcGUsZSk/b3BlW2VdPWlwZVtlXTpvcGVbZV09cnBlJiZhcGU/YXBlKHQpOnVwZSh0KX1yZXR1cm4gb3BlW2VdfSxscGU9e307bHBlW3NwZShcInRvU3RyaW5nVGFnXCIpXT1cInpcIjt2YXIgY3BlPVwiW29iamVjdCB6XVwiPT09U3RyaW5nKGxwZSksZnBlPSF0cGUoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwxLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KVsxXX0pKSxkcGU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGU/bnVsbCE9PWU6R2RlKGUpfSxwcGU9QWRlLmRvY3VtZW50LGhwZT1kcGUocHBlKSYmZHBlKHBwZS5jcmVhdGVFbGVtZW50KSxncGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGhwZT9wcGUuY3JlYXRlRWxlbWVudChlKTp7fX0sdnBlPSFmcGUmJiF0cGUoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShncGUoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSkseXBlPUFkZS5TdHJpbmcsbXBlPUFkZS5UeXBlRXJyb3IsYnBlPWZ1bmN0aW9uKGUpe2lmKGRwZShlKSlyZXR1cm4gZTt0aHJvdyBtcGUoeXBlKGUpK1wiIGlzIG5vdCBhbiBvYmplY3RcIil9LHdwZT1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxFcGU9d3BlLmJpbmQ/d3BlLmJpbmQod3BlKTpmdW5jdGlvbigpe3JldHVybiB3cGUuYXBwbHkod3BlLGFyZ3VtZW50cyl9LERwZT1OZGUoe30uaXNQcm90b3R5cGVPZiksU3BlPUFkZS5PYmplY3QseHBlPXJwZT9mdW5jdGlvbihlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7dmFyIHQ9S2RlKFwiU3ltYm9sXCIpO3JldHVybiBHZGUodCkmJkRwZSh0LnByb3RvdHlwZSxTcGUoZSkpfSxDcGU9QWRlLlN0cmluZyxBcGU9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBDcGUoZSl9Y2F0Y2goZSl7cmV0dXJuXCJPYmplY3RcIn19LE9wZT1BZGUuVHlwZUVycm9yLGtwZT1mdW5jdGlvbihlKXtpZihHZGUoZSkpcmV0dXJuIGU7dGhyb3cgT3BlKEFwZShlKStcIiBpcyBub3QgYSBmdW5jdGlvblwiKX0sQnBlPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVt0XTtyZXR1cm4gbnVsbD09bj92b2lkIDA6a3BlKG4pfSxGcGU9QWRlLlR5cGVFcnJvcixUcGU9QWRlLlR5cGVFcnJvcixfcGU9c3BlKFwidG9QcmltaXRpdmVcIiksUHBlPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoIWRwZShlKXx8eHBlKGUpKXJldHVybiBlO3ZhciBuLHI9QnBlKGUsX3BlKTtpZihyKXtpZih2b2lkIDA9PT10JiYodD1cImRlZmF1bHRcIiksbj1FcGUocixlLHQpLCFkcGUobil8fHhwZShuKSlyZXR1cm4gbjt0aHJvdyBUcGUoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9cmV0dXJuIHZvaWQgMD09PXQmJih0PVwibnVtYmVyXCIpLGZ1bmN0aW9uKGUsdCl7dmFyIG4scjtpZihcInN0cmluZ1wiPT09dCYmR2RlKG49ZS50b1N0cmluZykmJiFkcGUocj1FcGUobixlKSkpcmV0dXJuIHI7aWYoR2RlKG49ZS52YWx1ZU9mKSYmIWRwZShyPUVwZShuLGUpKSlyZXR1cm4gcjtpZihcInN0cmluZ1wiIT09dCYmR2RlKG49ZS50b1N0cmluZykmJiFkcGUocj1FcGUobixlKSkpcmV0dXJuIHI7dGhyb3cgRnBlKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfShlLHQpfShlLFwic3RyaW5nXCIpO3JldHVybiB4cGUodCk/dDp0K1wiXCJ9LGpwZT1BZGUuVHlwZUVycm9yLE5wZT1PYmplY3QuZGVmaW5lUHJvcGVydHksSXBlPXtmOmZwZT9OcGU6ZnVuY3Rpb24oZSx0LG4pe2lmKGJwZShlKSx0PVBwZSh0KSxicGUobiksdnBlKXRyeXtyZXR1cm4gTnBlKGUsdCxuKX1jYXRjaChlKXt9aWYoXCJnZXRcImluIG58fFwic2V0XCJpbiBuKXRocm93IGpwZShcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkXCIpO3JldHVyblwidmFsdWVcImluIG4mJihlW3RdPW4udmFsdWUpLGV9fSxMcGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19LFJwZT1mcGU/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBJcGUuZihlLHQsTHBlKDEsbikpfTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbdF09bixlfSxNcGU9TmRlKEZ1bmN0aW9uLnRvU3RyaW5nKTtHZGUoQmRlLmluc3BlY3RTb3VyY2UpfHwoQmRlLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIE1wZShlKX0pO3ZhciB6cGUsJHBlLEhwZSxWcGU9QmRlLmluc3BlY3RTb3VyY2UsVXBlPUFkZS5XZWFrTWFwLFdwZT1HZGUoVXBlKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFZwZShVcGUpKSxHcGU9RmRlKFwia2V5c1wiKSxxcGU9ZnVuY3Rpb24oZSl7cmV0dXJuIEdwZVtlXXx8KEdwZVtlXT1XZGUoZSkpfSxLcGU9e30sWXBlPUFkZS5UeXBlRXJyb3IsWHBlPUFkZS5XZWFrTWFwO2lmKFdwZXx8QmRlLnN0YXRlKXt2YXIgWnBlPUJkZS5zdGF0ZXx8KEJkZS5zdGF0ZT1uZXcgWHBlKSxKcGU9TmRlKFpwZS5nZXQpLFFwZT1OZGUoWnBlLmhhcyksZWhlPU5kZShacGUuc2V0KTt6cGU9ZnVuY3Rpb24oZSx0KXtpZihRcGUoWnBlLGUpKXRocm93IG5ldyBZcGUoXCJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZFwiKTtyZXR1cm4gdC5mYWNhZGU9ZSxlaGUoWnBlLGUsdCksdH0sJHBlPWZ1bmN0aW9uKGUpe3JldHVybiBKcGUoWnBlLGUpfHx7fX0sSHBlPWZ1bmN0aW9uKGUpe3JldHVybiBRcGUoWnBlLGUpfX1lbHNle3ZhciB0aGU9cXBlKFwic3RhdGVcIik7S3BlW3RoZV09ITAsenBlPWZ1bmN0aW9uKGUsdCl7aWYoJGRlKGUsdGhlKSl0aHJvdyBuZXcgWXBlKFwiT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWRcIik7cmV0dXJuIHQuZmFjYWRlPWUsUnBlKGUsdGhlLHQpLHR9LCRwZT1mdW5jdGlvbihlKXtyZXR1cm4gJGRlKGUsdGhlKT9lW3RoZV06e319LEhwZT1mdW5jdGlvbihlKXtyZXR1cm4gJGRlKGUsdGhlKX19dmFyIG5oZT17c2V0OnpwZSxnZXQ6JHBlLGhhczpIcGUsZW5mb3JjZTpmdW5jdGlvbihlKXtyZXR1cm4gSHBlKGUpPyRwZShlKTp6cGUoZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG47aWYoIWRwZSh0KXx8KG49JHBlKHQpKS50eXBlIT09ZSl0aHJvdyBZcGUoXCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsIFwiK2UrXCIgcmVxdWlyZWRcIik7cmV0dXJuIG59fX0scmhlPUZ1bmN0aW9uLnByb3RvdHlwZSxvaGU9ZnBlJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGloZT0kZGUocmhlLFwibmFtZVwiKSxhaGU9e0VYSVNUUzppaGUsUFJPUEVSOmloZSYmXCJzb21ldGhpbmdcIj09PWZ1bmN0aW9uKCl7fS5uYW1lLENPTkZJR1VSQUJMRTppaGUmJighZnBlfHxmcGUmJm9oZShyaGUsXCJuYW1lXCIpLmNvbmZpZ3VyYWJsZSl9LHVoZT1EZGUoKGZ1bmN0aW9uKGUpe3ZhciB0PWFoZS5DT05GSUdVUkFCTEUsbj1uaGUuZ2V0LHI9bmhlLmVuZm9yY2Usbz1TdHJpbmcoU3RyaW5nKS5zcGxpdChcIlN0cmluZ1wiKTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUsbixpLGEpe3ZhciB1LHM9ISFhJiYhIWEudW5zYWZlLGw9ISFhJiYhIWEuZW51bWVyYWJsZSxjPSEhYSYmISFhLm5vVGFyZ2V0R2V0LGY9YSYmdm9pZCAwIT09YS5uYW1lP2EubmFtZTpuO0dkZShpKSYmKFwiU3ltYm9sKFwiPT09U3RyaW5nKGYpLnNsaWNlKDAsNykmJihmPVwiW1wiK1N0cmluZyhmKS5yZXBsYWNlKC9eU3ltYm9sXFwoKFteKV0qKVxcKS8sXCIkMVwiKStcIl1cIiksKCEkZGUoaSxcIm5hbWVcIil8fHQmJmkubmFtZSE9PWYpJiZScGUoaSxcIm5hbWVcIixmKSwodT1yKGkpKS5zb3VyY2V8fCh1LnNvdXJjZT1vLmpvaW4oXCJzdHJpbmdcIj09dHlwZW9mIGY/ZjpcIlwiKSkpLGUhPT1BZGU/KHM/IWMmJmVbbl0mJihsPSEwKTpkZWxldGUgZVtuXSxsP2Vbbl09aTpScGUoZSxuLGkpKTpsP2Vbbl09aTprZGUobixpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxcInRvU3RyaW5nXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEdkZSh0aGlzKSYmbih0aGlzKS5zb3VyY2V8fFZwZSh0aGlzKX0pKX0pKSxzaGU9TmRlKHt9LnRvU3RyaW5nKSxsaGU9TmRlKFwiXCIuc2xpY2UpLGNoZT1mdW5jdGlvbihlKXtyZXR1cm4gbGhlKHNoZShlKSw4LC0xKX0sZmhlPXNwZShcInRvU3RyaW5nVGFnXCIpLGRoZT1BZGUuT2JqZWN0LHBoZT1cIkFyZ3VtZW50c1wiPT1jaGUoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKSxoaGU9Y3BlP2NoZTpmdW5jdGlvbihlKXt2YXIgdCxuLHI7cmV0dXJuIHZvaWQgMD09PWU/XCJVbmRlZmluZWRcIjpudWxsPT09ZT9cIk51bGxcIjpcInN0cmluZ1wiPT10eXBlb2Yobj1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZVt0XX1jYXRjaChlKXt9fSh0PWRoZShlKSxmaGUpKT9uOnBoZT9jaGUodCk6XCJPYmplY3RcIj09KHI9Y2hlKHQpKSYmR2RlKHQuY2FsbGVlKT9cIkFyZ3VtZW50c1wiOnJ9LGdoZT1jcGU/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5cIltvYmplY3QgXCIraGhlKHRoaXMpK1wiXVwifTtjcGV8fHVoZShPYmplY3QucHJvdG90eXBlLFwidG9TdHJpbmdcIixnaGUse3Vuc2FmZTohMH0pO3ZhciB2aGUseWhlPXtDU1NSdWxlTGlzdDowLENTU1N0eWxlRGVjbGFyYXRpb246MCxDU1NWYWx1ZUxpc3Q6MCxDbGllbnRSZWN0TGlzdDowLERPTVJlY3RMaXN0OjAsRE9NU3RyaW5nTGlzdDowLERPTVRva2VuTGlzdDoxLERhdGFUcmFuc2Zlckl0ZW1MaXN0OjAsRmlsZUxpc3Q6MCxIVE1MQWxsQ29sbGVjdGlvbjowLEhUTUxDb2xsZWN0aW9uOjAsSFRNTEZvcm1FbGVtZW50OjAsSFRNTFNlbGVjdEVsZW1lbnQ6MCxNZWRpYUxpc3Q6MCxNaW1lVHlwZUFycmF5OjAsTmFtZWROb2RlTWFwOjAsTm9kZUxpc3Q6MSxQYWludFJlcXVlc3RMaXN0OjAsUGx1Z2luOjAsUGx1Z2luQXJyYXk6MCxTVkdMZW5ndGhMaXN0OjAsU1ZHTnVtYmVyTGlzdDowLFNWR1BhdGhTZWdMaXN0OjAsU1ZHUG9pbnRMaXN0OjAsU1ZHU3RyaW5nTGlzdDowLFNWR1RyYW5zZm9ybUxpc3Q6MCxTb3VyY2VCdWZmZXJMaXN0OjAsU3R5bGVTaGVldExpc3Q6MCxUZXh0VHJhY2tDdWVMaXN0OjAsVGV4dFRyYWNrTGlzdDowLFRvdWNoTGlzdDowfSxtaGU9Z3BlKFwic3BhblwiKS5jbGFzc0xpc3QsYmhlPW1oZSYmbWhlLmNvbnN0cnVjdG9yJiZtaGUuY29uc3RydWN0b3IucHJvdG90eXBlLHdoZT1iaGU9PT1PYmplY3QucHJvdG90eXBlP3ZvaWQgMDpiaGUsRWhlPU5kZShOZGUuYmluZCksRGhlPUFkZS5PYmplY3QsU2hlPU5kZShcIlwiLnNwbGl0KSx4aGU9dHBlKChmdW5jdGlvbigpe3JldHVybiFEaGUoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKGUpe3JldHVyblwiU3RyaW5nXCI9PWNoZShlKT9TaGUoZSxcIlwiKTpEaGUoZSl9OkRoZSxDaGU9TWF0aC5jZWlsLEFoZT1NYXRoLmZsb29yLE9oZT1mdW5jdGlvbihlKXt2YXIgdD0rZTtyZXR1cm4gdCE9dHx8MD09PXQ/MDoodD4wP0FoZTpDaGUpKHQpfSxraGU9TWF0aC5taW4sQmhlPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/a2hlKE9oZShlKSw5MDA3MTk5MjU0NzQwOTkxKTowfSxGaGU9ZnVuY3Rpb24oZSl7cmV0dXJuIEJoZShlLmxlbmd0aCl9LFRoZT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm5cIkFycmF5XCI9PWNoZShlKX0sX2hlPWZ1bmN0aW9uKCl7fSxQaGU9W10samhlPUtkZShcIlJlZmxlY3RcIixcImNvbnN0cnVjdFwiKSxOaGU9L15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLyxJaGU9TmRlKE5oZS5leGVjKSxMaGU9IU5oZS5leGVjKF9oZSksUmhlPWZ1bmN0aW9uKGUpe2lmKCFHZGUoZSkpcmV0dXJuITE7dHJ5e3JldHVybiBqaGUoX2hlLFBoZSxlKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19LE1oZT0hamhlfHx0cGUoKGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIFJoZShSaGUuY2FsbCl8fCFSaGUoT2JqZWN0KXx8IVJoZSgoZnVuY3Rpb24oKXtlPSEwfSkpfHxlfSkpP2Z1bmN0aW9uKGUpe2lmKCFHZGUoZSkpcmV0dXJuITE7c3dpdGNoKGhoZShlKSl7Y2FzZVwiQXN5bmNGdW5jdGlvblwiOmNhc2VcIkdlbmVyYXRvckZ1bmN0aW9uXCI6Y2FzZVwiQXN5bmNHZW5lcmF0b3JGdW5jdGlvblwiOnJldHVybiExfXJldHVybiBMaGV8fCEhSWhlKE5oZSxWcGUoZSkpfTpSaGUsemhlPXNwZShcInNwZWNpZXNcIiksJGhlPUFkZS5BcnJheSxIaGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3KGZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBUaGUoZSkmJih0PWUuY29uc3RydWN0b3IsKE1oZSh0KSYmKHQ9PT0kaGV8fFRoZSh0LnByb3RvdHlwZSkpfHxkcGUodCkmJm51bGw9PT0odD10W3poZV0pKSYmKHQ9dm9pZCAwKSksdm9pZCAwPT09dD8kaGU6dH0oZSkpKDA9PT10PzA6dCl9LFZoZT1OZGUoW10ucHVzaCksVWhlPWZ1bmN0aW9uKGUpe3ZhciB0PTE9PWUsbj0yPT1lLHI9Mz09ZSxvPTQ9PWUsaT02PT1lLGE9Nz09ZSx1PTU9PWV8fGk7cmV0dXJuIGZ1bmN0aW9uKHMsbCxjLGYpe2Zvcih2YXIgZCxwLGg9TWRlKHMpLGc9eGhlKGgpLHY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ga3BlKGUpLHZvaWQgMD09PXQ/ZTpFaGU/RWhlKGUsdCk6ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fShsLGMpLHk9RmhlKGcpLG09MCxiPWZ8fEhoZSx3PXQ/YihzLHkpOm58fGE/YihzLDApOnZvaWQgMDt5Pm07bSsrKWlmKCh1fHxtIGluIGcpJiYocD12KGQ9Z1ttXSxtLGgpLGUpKWlmKHQpd1ttXT1wO2Vsc2UgaWYocClzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZDtjYXNlIDY6cmV0dXJuIG07Y2FzZSAyOlZoZSh3LGQpfWVsc2Ugc3dpdGNoKGUpe2Nhc2UgNDpyZXR1cm4hMTtjYXNlIDc6VmhlKHcsZCl9cmV0dXJuIGk/LTE6cnx8bz9vOnd9fSxXaGU9W1VoZSgwKSxVaGUoMSksVWhlKDIpLFVoZSgzKSxVaGUoNCksVWhlKDUpLFVoZSg2KSxVaGUoNyldWzBdLEdoZT0odmhlPVtdLmZvckVhY2gpJiZ0cGUoKGZ1bmN0aW9uKCl7dmhlLmNhbGwobnVsbCwoZnVuY3Rpb24oKXt0aHJvdyAxfSksMSl9KSk/W10uZm9yRWFjaDpmdW5jdGlvbihlKXtyZXR1cm4gV2hlKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LHFoZT1mdW5jdGlvbihlKXtpZihlJiZlLmZvckVhY2ghPT1HaGUpdHJ5e1JwZShlLFwiZm9yRWFjaFwiLEdoZSl9Y2F0Y2godCl7ZS5mb3JFYWNoPUdoZX19O2Zvcih2YXIgS2hlIGluIHloZSl5aGVbS2hlXSYmcWhlKEFkZVtLaGVdJiZBZGVbS2hlXS5wcm90b3R5cGUpO3FoZSh3aGUpO3ZhciBZaGU9e30ucHJvcGVydHlJc0VudW1lcmFibGUsWGhlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsWmhlPXtmOlhoZSYmIVloZS5jYWxsKHsxOjJ9LDEpP2Z1bmN0aW9uKGUpe3ZhciB0PVhoZSh0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTpZaGV9LEpoZT1mdW5jdGlvbihlKXtyZXR1cm4geGhlKExkZShlKSl9LFFoZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGVnZT17ZjpmcGU/UWhlOmZ1bmN0aW9uKGUsdCl7aWYoZT1KaGUoZSksdD1QcGUodCksdnBlKXRyeXtyZXR1cm4gUWhlKGUsdCl9Y2F0Y2goZSl7fWlmKCRkZShlLHQpKXJldHVybiBMcGUoIUVwZShaaGUuZixlLHQpLGVbdF0pfX0sdGdlPU1hdGgubWF4LG5nZT1NYXRoLm1pbixyZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj1PaGUoZSk7cmV0dXJuIG48MD90Z2Uobit0LDApOm5nZShuLHQpfSxvZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXt2YXIgbyxpPUpoZSh0KSxhPUZoZShpKSx1PXJnZShyLGEpO2lmKGUmJm4hPW4pe2Zvcig7YT51OylpZigobz1pW3UrK10pIT1vKXJldHVybiEwfWVsc2UgZm9yKDthPnU7dSsrKWlmKChlfHx1IGluIGkpJiZpW3VdPT09bilyZXR1cm4gZXx8dXx8MDtyZXR1cm4hZSYmLTF9fSxpZ2U9KG9nZSghMCksb2dlKCExKSksYWdlPU5kZShbXS5wdXNoKSx1Z2U9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPUpoZShlKSxvPTAsaT1bXTtmb3IobiBpbiByKSEkZGUoS3BlLG4pJiYkZGUocixuKSYmYWdlKGksbik7Zm9yKDt0Lmxlbmd0aD5vOykkZGUocixuPXRbbysrXSkmJih+aWdlKGksbil8fGFnZShpLG4pKTtyZXR1cm4gaX0sc2dlPVtcImNvbnN0cnVjdG9yXCIsXCJoYXNPd25Qcm9wZXJ0eVwiLFwiaXNQcm90b3R5cGVPZlwiLFwicHJvcGVydHlJc0VudW1lcmFibGVcIixcInRvTG9jYWxlU3RyaW5nXCIsXCJ0b1N0cmluZ1wiLFwidmFsdWVPZlwiXSxsZ2U9c2dlLmNvbmNhdChcImxlbmd0aFwiLFwicHJvdG90eXBlXCIpLGNnZT17ZjpPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24oZSl7cmV0dXJuIHVnZShlLGxnZSl9fSxmZ2U9e2Y6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sZGdlPU5kZShbXS5jb25jYXQpLHBnZT1LZGUoXCJSZWZsZWN0XCIsXCJvd25LZXlzXCIpfHxmdW5jdGlvbihlKXt2YXIgdD1jZ2UuZihicGUoZSkpLG49ZmdlLmY7cmV0dXJuIG4/ZGdlKHQsbihlKSk6dH0saGdlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXBnZSh0KSxyPUlwZS5mLG89ZWdlLmYsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldOyRkZShlLGEpfHxyKGUsYSxvKHQsYSkpfX0sZ2dlPS8jfFxcLnByb3RvdHlwZVxcLi8sdmdlPWZ1bmN0aW9uKGUsdCl7dmFyIG49bWdlW3lnZShlKV07cmV0dXJuIG49PXdnZXx8biE9YmdlJiYoR2RlKHQpP3RwZSh0KTohIXQpfSx5Z2U9dmdlLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoZ2dlLFwiLlwiKS50b0xvd2VyQ2FzZSgpfSxtZ2U9dmdlLmRhdGE9e30sYmdlPXZnZS5OQVRJVkU9XCJOXCIsd2dlPXZnZS5QT0xZRklMTD1cIlBcIixFZ2U9dmdlLERnZT1lZ2UuZixTZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLG8saSxhLHU9ZS50YXJnZXQscz1lLmdsb2JhbCxsPWUuc3RhdDtpZihuPXM/QWRlOmw/QWRlW3VdfHxrZGUodSx7fSk6KEFkZVt1XXx8e30pLnByb3RvdHlwZSlmb3IociBpbiB0KXtpZihpPXRbcl0sbz1lLm5vVGFyZ2V0R2V0PyhhPURnZShuLHIpKSYmYS52YWx1ZTpuW3JdLCFFZ2Uocz9yOnUrKGw/XCIuXCI6XCIjXCIpK3IsZS5mb3JjZWQpJiZ2b2lkIDAhPT1vKXtpZih0eXBlb2YgaT09dHlwZW9mIG8pY29udGludWU7aGdlKGksbyl9KGUuc2hhbXx8byYmby5zaGFtKSYmUnBlKGksXCJzaGFtXCIsITApLHVoZShuLHIsaSxlKX19LHhnZT1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIHVnZShlLHNnZSl9LENnZT1PYmplY3QuYXNzaWduLEFnZT1PYmplY3QuZGVmaW5lUHJvcGVydHksT2dlPU5kZShbXS5jb25jYXQpLGtnZT0hQ2dlfHx0cGUoKGZ1bmN0aW9uKCl7aWYoZnBlJiYxIT09Q2dlKHtiOjF9LENnZShBZ2Uoe30sXCJhXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7QWdlKHRoaXMsXCJiXCIse3ZhbHVlOjMsZW51bWVyYWJsZTohMX0pfX0pLHtiOjJ9KSkuYilyZXR1cm4hMDt2YXIgZT17fSx0PXt9LG49U3ltYm9sKCkscj1cImFiY2RlZmdoaWprbG1ub3BxcnN0XCI7cmV0dXJuIGVbbl09NyxyLnNwbGl0KFwiXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RbZV09ZX0pKSw3IT1DZ2Uoe30sZSlbbl18fHhnZShDZ2Uoe30sdCkpLmpvaW4oXCJcIikhPXJ9KSk/ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49TWRlKGUpLHI9YXJndW1lbnRzLmxlbmd0aCxvPTEsaT1mZ2UuZixhPVpoZS5mO3I+bzspZm9yKHZhciB1LHM9eGhlKGFyZ3VtZW50c1tvKytdKSxsPWk/T2dlKHhnZShzKSxpKHMpKTp4Z2UocyksYz1sLmxlbmd0aCxmPTA7Yz5mOyl1PWxbZisrXSxmcGUmJiFFcGUoYSxzLHUpfHwoblt1XT1zW3VdKTtyZXR1cm4gbn06Q2dlO1NnZSh7dGFyZ2V0OlwiT2JqZWN0XCIsc3RhdDohMCxmb3JjZWQ6T2JqZWN0LmFzc2lnbiE9PWtnZX0se2Fzc2lnbjprZ2V9KTt2YXIgQmdlPURkZSgoZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9L1xcYmxhbmcoPzp1YWdlKT8tKFtcXHctXSspXFxiL2ksbj0wLHI9e30sbz17bWFudWFsOmUuUHJpc20mJmUuUHJpc20ubWFudWFsLGRpc2FibGVXb3JrZXJNZXNzYWdlSGFuZGxlcjplLlByaXNtJiZlLlByaXNtLmRpc2FibGVXb3JrZXJNZXNzYWdlSGFuZGxlcix1dGlsOntlbmNvZGU6ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGk/bmV3IGkodC50eXBlLGUodC5jb250ZW50KSx0LmFsaWFzKTpBcnJheS5pc0FycmF5KHQpP3QubWFwKGUpOnQucmVwbGFjZSgvJi9nLFwiJmFtcDtcIikucmVwbGFjZSgvPC9nLFwiJmx0O1wiKS5yZXBsYWNlKC9cXHUwMGEwL2csXCIgXCIpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSl9LG9iaklkOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9faWR8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19pZFwiLHt2YWx1ZTorK259KSxlLl9faWR9LGNsb25lOmZ1bmN0aW9uIGUodCxuKXt2YXIgcixpO3N3aXRjaChuPW58fHt9LG8udXRpbC50eXBlKHQpKXtjYXNlXCJPYmplY3RcIjppZihpPW8udXRpbC5vYmpJZCh0KSxuW2ldKXJldHVybiBuW2ldO2Zvcih2YXIgYSBpbiByPXt9LG5baV09cix0KXQuaGFzT3duUHJvcGVydHkoYSkmJihyW2FdPWUodFthXSxuKSk7cmV0dXJuIHI7Y2FzZVwiQXJyYXlcIjpyZXR1cm4gaT1vLnV0aWwub2JqSWQodCksbltpXT9uW2ldOihyPVtdLG5baV09cix0LmZvckVhY2goKGZ1bmN0aW9uKHQsbyl7cltvXT1lKHQsbil9KSkscik7ZGVmYXVsdDpyZXR1cm4gdH19LGdldExhbmd1YWdlOmZ1bmN0aW9uKGUpe2Zvcig7ZSYmIXQudGVzdChlLmNsYXNzTmFtZSk7KWU9ZS5wYXJlbnRFbGVtZW50O3JldHVybiBlPyhlLmNsYXNzTmFtZS5tYXRjaCh0KXx8WyxcIm5vbmVcIl0pWzFdLnRvTG93ZXJDYXNlKCk6XCJub25lXCJ9LGN1cnJlbnRTY3JpcHQ6ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoXCJjdXJyZW50U2NyaXB0XCJpbiBkb2N1bWVudClyZXR1cm4gZG9jdW1lbnQuY3VycmVudFNjcmlwdDt0cnl7dGhyb3cgbmV3IEVycm9yfWNhdGNoKHIpe3ZhciBlPSgvYXQgW14oXFxyXFxuXSpcXCgoLiopOlteOl0rOlteOl0rXFwpJC9pLmV4ZWMoci5zdGFjayl8fFtdKVsxXTtpZihlKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtmb3IodmFyIG4gaW4gdClpZih0W25dLnNyYz09ZSlyZXR1cm4gdFtuXX1yZXR1cm4gbnVsbH19LGlzQWN0aXZlOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9XCJuby1cIit0O2U7KXt2YXIgbz1lLmNsYXNzTGlzdDtpZihvLmNvbnRhaW5zKHQpKXJldHVybiEwO2lmKG8uY29udGFpbnMocikpcmV0dXJuITE7ZT1lLnBhcmVudEVsZW1lbnR9cmV0dXJuISFufX0sbGFuZ3VhZ2VzOntwbGFpbjpyLHBsYWludGV4dDpyLHRleHQ6cix0eHQ6cixleHRlbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1vLnV0aWwuY2xvbmUoby5sYW5ndWFnZXNbZV0pO2Zvcih2YXIgciBpbiB0KW5bcl09dFtyXTtyZXR1cm4gbn0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPShyPXJ8fG8ubGFuZ3VhZ2VzKVtlXSxhPXt9O2Zvcih2YXIgdSBpbiBpKWlmKGkuaGFzT3duUHJvcGVydHkodSkpe2lmKHU9PXQpZm9yKHZhciBzIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShzKSYmKGFbc109bltzXSk7bi5oYXNPd25Qcm9wZXJ0eSh1KXx8KGFbdV09aVt1XSl9dmFyIGw9cltlXTtyZXR1cm4gcltlXT1hLG8ubGFuZ3VhZ2VzLkRGUyhvLmxhbmd1YWdlcywoZnVuY3Rpb24odCxuKXtuPT09bCYmdCE9ZSYmKHRoaXNbdF09YSl9KSksYX0sREZTOmZ1bmN0aW9uIGUodCxuLHIsaSl7aT1pfHx7fTt2YXIgYT1vLnV0aWwub2JqSWQ7Zm9yKHZhciB1IGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eSh1KSl7bi5jYWxsKHQsdSx0W3VdLHJ8fHUpO3ZhciBzPXRbdV0sbD1vLnV0aWwudHlwZShzKTtcIk9iamVjdFwiIT09bHx8aVthKHMpXT9cIkFycmF5XCIhPT1sfHxpW2EocyldfHwoaVthKHMpXT0hMCxlKHMsbix1LGkpKTooaVthKHMpXT0hMCxlKHMsbixudWxsLGkpKX19fSxwbHVnaW5zOnt9LGhpZ2hsaWdodEFsbDpmdW5jdGlvbihlLHQpe28uaGlnaGxpZ2h0QWxsVW5kZXIoZG9jdW1lbnQsZSx0KX0saGlnaGxpZ2h0QWxsVW5kZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtjYWxsYmFjazpuLGNvbnRhaW5lcjplLHNlbGVjdG9yOidjb2RlW2NsYXNzKj1cImxhbmd1YWdlLVwiXSwgW2NsYXNzKj1cImxhbmd1YWdlLVwiXSBjb2RlLCBjb2RlW2NsYXNzKj1cImxhbmctXCJdLCBbY2xhc3MqPVwibGFuZy1cIl0gY29kZSd9O28uaG9va3MucnVuKFwiYmVmb3JlLWhpZ2hsaWdodGFsbFwiLHIpLHIuZWxlbWVudHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KHIuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoci5zZWxlY3RvcikpLG8uaG9va3MucnVuKFwiYmVmb3JlLWFsbC1lbGVtZW50cy1oaWdobGlnaHRcIixyKTtmb3IodmFyIGksYT0wO2k9ci5lbGVtZW50c1thKytdOylvLmhpZ2hsaWdodEVsZW1lbnQoaSwhMD09PXQsci5jYWxsYmFjayl9LGhpZ2hsaWdodEVsZW1lbnQ6ZnVuY3Rpb24obixyLGkpe3ZhciBhPW8udXRpbC5nZXRMYW5ndWFnZShuKSx1PW8ubGFuZ3VhZ2VzW2FdO24uY2xhc3NOYW1lPW4uY2xhc3NOYW1lLnJlcGxhY2UodCxcIlwiKS5yZXBsYWNlKC9cXHMrL2csXCIgXCIpK1wiIGxhbmd1YWdlLVwiK2E7dmFyIHM9bi5wYXJlbnRFbGVtZW50O3MmJlwicHJlXCI9PT1zLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJihzLmNsYXNzTmFtZT1zLmNsYXNzTmFtZS5yZXBsYWNlKHQsXCJcIikucmVwbGFjZSgvXFxzKy9nLFwiIFwiKStcIiBsYW5ndWFnZS1cIithKTt2YXIgbD17ZWxlbWVudDpuLGxhbmd1YWdlOmEsZ3JhbW1hcjp1LGNvZGU6bi50ZXh0Q29udGVudH07ZnVuY3Rpb24gYyhlKXtsLmhpZ2hsaWdodGVkQ29kZT1lLG8uaG9va3MucnVuKFwiYmVmb3JlLWluc2VydFwiLGwpLGwuZWxlbWVudC5pbm5lckhUTUw9bC5oaWdobGlnaHRlZENvZGUsby5ob29rcy5ydW4oXCJhZnRlci1oaWdobGlnaHRcIixsKSxvLmhvb2tzLnJ1bihcImNvbXBsZXRlXCIsbCksaSYmaS5jYWxsKGwuZWxlbWVudCl9aWYoby5ob29rcy5ydW4oXCJiZWZvcmUtc2FuaXR5LWNoZWNrXCIsbCksKHM9bC5lbGVtZW50LnBhcmVudEVsZW1lbnQpJiZcInByZVwiPT09cy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYhcy5oYXNBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKSYmcy5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiMFwiKSwhbC5jb2RlKXJldHVybiBvLmhvb2tzLnJ1bihcImNvbXBsZXRlXCIsbCksdm9pZChpJiZpLmNhbGwobC5lbGVtZW50KSk7aWYoby5ob29rcy5ydW4oXCJiZWZvcmUtaGlnaGxpZ2h0XCIsbCksbC5ncmFtbWFyKWlmKHImJmUuV29ya2VyKXt2YXIgZj1uZXcgV29ya2VyKG8uZmlsZW5hbWUpO2Yub25tZXNzYWdlPWZ1bmN0aW9uKGUpe2MoZS5kYXRhKX0sZi5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh7bGFuZ3VhZ2U6bC5sYW5ndWFnZSxjb2RlOmwuY29kZSxpbW1lZGlhdGVDbG9zZTohMH0pKX1lbHNlIGMoby5oaWdobGlnaHQobC5jb2RlLGwuZ3JhbW1hcixsLmxhbmd1YWdlKSk7ZWxzZSBjKG8udXRpbC5lbmNvZGUobC5jb2RlKSl9LGhpZ2hsaWdodDpmdW5jdGlvbihlLHQsbil7dmFyIHI9e2NvZGU6ZSxncmFtbWFyOnQsbGFuZ3VhZ2U6bn07cmV0dXJuIG8uaG9va3MucnVuKFwiYmVmb3JlLXRva2VuaXplXCIsciksci50b2tlbnM9by50b2tlbml6ZShyLmNvZGUsci5ncmFtbWFyKSxvLmhvb2tzLnJ1bihcImFmdGVyLXRva2VuaXplXCIsciksaS5zdHJpbmdpZnkoby51dGlsLmVuY29kZShyLnRva2Vucyksci5sYW5ndWFnZSl9LHRva2VuaXplOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5yZXN0O2lmKG4pe2Zvcih2YXIgciBpbiBuKXRbcl09bltyXTtkZWxldGUgdC5yZXN0fXZhciBvPW5ldyBzO3JldHVybiBsKG8sby5oZWFkLGUpLHUoZSxvLHQsby5oZWFkLDApLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPWUuaGVhZC5uZXh0O24hPT1lLnRhaWw7KXQucHVzaChuLnZhbHVlKSxuPW4ubmV4dDtyZXR1cm4gdH0obyl9LGhvb2tzOnthbGw6e30sYWRkOmZ1bmN0aW9uKGUsdCl7dmFyIG49by5ob29rcy5hbGw7bltlXT1uW2VdfHxbXSxuW2VdLnB1c2godCl9LHJ1bjpmdW5jdGlvbihlLHQpe3ZhciBuPW8uaG9va3MuYWxsW2VdO2lmKG4mJm4ubGVuZ3RoKWZvcih2YXIgcixpPTA7cj1uW2krK107KXIodCl9fSxUb2tlbjppfTtmdW5jdGlvbiBpKGUsdCxuLHIpe3RoaXMudHlwZT1lLHRoaXMuY29udGVudD10LHRoaXMuYWxpYXM9bix0aGlzLmxlbmd0aD0wfChyfHxcIlwiKS5sZW5ndGh9ZnVuY3Rpb24gYShlLHQsbixyKXtlLmxhc3RJbmRleD10O3ZhciBvPWUuZXhlYyhuKTtpZihvJiZyJiZvWzFdKXt2YXIgaT1vWzFdLmxlbmd0aDtvLmluZGV4Kz1pLG9bMF09b1swXS5zbGljZShpKX1yZXR1cm4gb31mdW5jdGlvbiB1KGUsdCxuLHIscyxmKXtmb3IodmFyIGQgaW4gbilpZihuLmhhc093blByb3BlcnR5KGQpJiZuW2RdKXt2YXIgcD1uW2RdO3A9QXJyYXkuaXNBcnJheShwKT9wOltwXTtmb3IodmFyIGg9MDtoPHAubGVuZ3RoOysraCl7aWYoZiYmZi5jYXVzZT09ZCtcIixcIitoKXJldHVybjt2YXIgZz1wW2hdLHY9Zy5pbnNpZGUseT0hIWcubG9va2JlaGluZCxtPSEhZy5ncmVlZHksYj1nLmFsaWFzO2lmKG0mJiFnLnBhdHRlcm4uZ2xvYmFsKXt2YXIgdz1nLnBhdHRlcm4udG9TdHJpbmcoKS5tYXRjaCgvW2ltc3V5XSokLylbMF07Zy5wYXR0ZXJuPVJlZ0V4cChnLnBhdHRlcm4uc291cmNlLHcrXCJnXCIpfWZvcih2YXIgRT1nLnBhdHRlcm58fGcsRD1yLm5leHQsUz1zO0QhPT10LnRhaWwmJiEoZiYmUz49Zi5yZWFjaCk7Uys9RC52YWx1ZS5sZW5ndGgsRD1ELm5leHQpe3ZhciB4PUQudmFsdWU7aWYodC5sZW5ndGg+ZS5sZW5ndGgpcmV0dXJuO2lmKCEoeCBpbnN0YW5jZW9mIGkpKXt2YXIgQyxBPTE7aWYobSl7aWYoIShDPWEoRSxTLGUseSkpKWJyZWFrO3ZhciBPPUMuaW5kZXgsaz1DLmluZGV4K0NbMF0ubGVuZ3RoLEI9Uztmb3IoQis9RC52YWx1ZS5sZW5ndGg7Tz49QjspQis9KEQ9RC5uZXh0KS52YWx1ZS5sZW5ndGg7aWYoUz1CLT1ELnZhbHVlLmxlbmd0aCxELnZhbHVlIGluc3RhbmNlb2YgaSljb250aW51ZTtmb3IodmFyIEY9RDtGIT09dC50YWlsJiYoQjxrfHxcInN0cmluZ1wiPT10eXBlb2YgRi52YWx1ZSk7Rj1GLm5leHQpQSsrLEIrPUYudmFsdWUubGVuZ3RoO0EtLSx4PWUuc2xpY2UoUyxCKSxDLmluZGV4LT1TfWVsc2UgaWYoIShDPWEoRSwwLHgseSkpKWNvbnRpbnVlO089Qy5pbmRleDt2YXIgVD1DWzBdLF89eC5zbGljZSgwLE8pLFA9eC5zbGljZShPK1QubGVuZ3RoKSxqPVMreC5sZW5ndGg7ZiYmaj5mLnJlYWNoJiYoZi5yZWFjaD1qKTt2YXIgTj1ELnByZXY7aWYoXyYmKE49bCh0LE4sXyksUys9Xy5sZW5ndGgpLGModCxOLEEpLEQ9bCh0LE4sbmV3IGkoZCx2P28udG9rZW5pemUoVCx2KTpULGIsVCkpLFAmJmwodCxELFApLEE+MSl7dmFyIEk9e2NhdXNlOmQrXCIsXCIraCxyZWFjaDpqfTt1KGUsdCxuLEQucHJldixTLEkpLGYmJkkucmVhY2g+Zi5yZWFjaCYmKGYucmVhY2g9SS5yZWFjaCl9fX19fX1mdW5jdGlvbiBzKCl7dmFyIGU9e3ZhbHVlOm51bGwscHJldjpudWxsLG5leHQ6bnVsbH0sdD17dmFsdWU6bnVsbCxwcmV2OmUsbmV4dDpudWxsfTtlLm5leHQ9dCx0aGlzLmhlYWQ9ZSx0aGlzLnRhaWw9dCx0aGlzLmxlbmd0aD0wfWZ1bmN0aW9uIGwoZSx0LG4pe3ZhciByPXQubmV4dCxvPXt2YWx1ZTpuLHByZXY6dCxuZXh0OnJ9O3JldHVybiB0Lm5leHQ9byxyLnByZXY9byxlLmxlbmd0aCsrLG99ZnVuY3Rpb24gYyhlLHQsbil7Zm9yKHZhciByPXQubmV4dCxvPTA7bzxuJiZyIT09ZS50YWlsO28rKylyPXIubmV4dDt0Lm5leHQ9cixyLnByZXY9dCxlLmxlbmd0aC09b31pZihlLlByaXNtPW8saS5zdHJpbmdpZnk9ZnVuY3Rpb24gZSh0LG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXJldHVybiB0O2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByPVwiXCI7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7cis9ZSh0LG4pfSkpLHJ9dmFyIGk9e3R5cGU6dC50eXBlLGNvbnRlbnQ6ZSh0LmNvbnRlbnQsbiksdGFnOlwic3BhblwiLGNsYXNzZXM6W1widG9rZW5cIix0LnR5cGVdLGF0dHJpYnV0ZXM6e30sbGFuZ3VhZ2U6bn0sYT10LmFsaWFzO2EmJihBcnJheS5pc0FycmF5KGEpP0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGkuY2xhc3NlcyxhKTppLmNsYXNzZXMucHVzaChhKSksby5ob29rcy5ydW4oXCJ3cmFwXCIsaSk7dmFyIHU9XCJcIjtmb3IodmFyIHMgaW4gaS5hdHRyaWJ1dGVzKXUrPVwiIFwiK3MrJz1cIicrKGkuYXR0cmlidXRlc1tzXXx8XCJcIikucmVwbGFjZSgvXCIvZyxcIiZxdW90O1wiKSsnXCInO3JldHVyblwiPFwiK2kudGFnKycgY2xhc3M9XCInK2kuY2xhc3Nlcy5qb2luKFwiIFwiKSsnXCInK3UrXCI+XCIraS5jb250ZW50K1wiPC9cIitpLnRhZytcIj5cIn0sIWUuZG9jdW1lbnQpcmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcj8oby5kaXNhYmxlV29ya2VyTWVzc2FnZUhhbmRsZXJ8fGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwoZnVuY3Rpb24odCl7dmFyIG49SlNPTi5wYXJzZSh0LmRhdGEpLHI9bi5sYW5ndWFnZSxpPW4uY29kZSxhPW4uaW1tZWRpYXRlQ2xvc2U7ZS5wb3N0TWVzc2FnZShvLmhpZ2hsaWdodChpLG8ubGFuZ3VhZ2VzW3JdLHIpKSxhJiZlLmNsb3NlKCl9KSwhMSksbyk6bzt2YXIgZj1vLnV0aWwuY3VycmVudFNjcmlwdCgpO2Z1bmN0aW9uIGQoKXtvLm1hbnVhbHx8by5oaWdobGlnaHRBbGwoKX1pZihmJiYoby5maWxlbmFtZT1mLnNyYyxmLmhhc0F0dHJpYnV0ZShcImRhdGEtbWFudWFsXCIpJiYoby5tYW51YWw9ITApKSwhby5tYW51YWwpe3ZhciBwPWRvY3VtZW50LnJlYWR5U3RhdGU7XCJsb2FkaW5nXCI9PT1wfHxcImludGVyYWN0aXZlXCI9PT1wJiZmJiZmLmRlZmVyP2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsZCk6d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpOndpbmRvdy5zZXRUaW1lb3V0KGQsMTYpfXJldHVybiBvfShcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZT9zZWxmOnt9KTtcbi8qKlxuICogUHJpc206IExpZ2h0d2VpZ2h0LCByb2J1c3QsIGVsZWdhbnQgc3ludGF4IGhpZ2hsaWdodGluZ1xuICpcbiAqIEBsaWNlbnNlIE1JVCA8aHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQ+XG4gKiBAYXV0aG9yIExlYSBWZXJvdSA8aHR0cHM6Ly9sZWEudmVyb3UubWU+XG4gKiBAbmFtZXNwYWNlXG4gKiBAcHVibGljXG4gKi9lLmV4cG9ydHMmJihlLmV4cG9ydHM9dCksdm9pZCAwIT09RWRlJiYoRWRlLlByaXNtPXQpLHQubGFuZ3VhZ2VzLm1hcmt1cD17Y29tbWVudDp7cGF0dGVybjovPCEtLSg/Oig/ITwhLS0pW1xcc1xcU10pKj8tLT4vLGdyZWVkeTohMH0scHJvbG9nOntwYXR0ZXJuOi88XFw/W1xcc1xcU10rP1xcPz4vLGdyZWVkeTohMH0sZG9jdHlwZTp7cGF0dGVybjovPCFET0NUWVBFKD86W14+XCInW1xcXV18XCJbXlwiXSpcInwnW14nXSonKSsoPzpcXFsoPzpbXjxcIidcXF1dfFwiW15cIl0qXCJ8J1teJ10qJ3w8KD8hIS0tKXw8IS0tKD86W14tXXwtKD8hLT4pKSotLT4pKlxcXVxccyopPz4vaSxncmVlZHk6ITAsaW5zaWRlOntcImludGVybmFsLXN1YnNldFwiOntwYXR0ZXJuOi8oXlteXFxbXSpcXFspW1xcc1xcU10rKD89XFxdPiQpLyxsb29rYmVoaW5kOiEwLGdyZWVkeTohMCxpbnNpZGU6bnVsbH0sc3RyaW5nOntwYXR0ZXJuOi9cIlteXCJdKlwifCdbXiddKicvLGdyZWVkeTohMH0scHVuY3R1YXRpb246L148IXw+JHxbW1xcXV0vLFwiZG9jdHlwZS10YWdcIjovXkRPQ1RZUEUvaSxuYW1lOi9bXlxcczw+J1wiXSsvfX0sY2RhdGE6e3BhdHRlcm46LzwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPi9pLGdyZWVkeTohMH0sdGFnOntwYXR0ZXJuOi88XFwvPyg/IVxcZClbXlxccz5cXC89JDwlXSsoPzpcXHMoPzpcXHMqW15cXHM+XFwvPV0rKD86XFxzKj1cXHMqKD86XCJbXlwiXSpcInwnW14nXSonfFteXFxzJ1wiPj1dKyg/PVtcXHM+XSkpfCg/PVtcXHMvPl0pKSkrKT9cXHMqXFwvPz4vLGdyZWVkeTohMCxpbnNpZGU6e3RhZzp7cGF0dGVybjovXjxcXC8/W15cXHM+XFwvXSsvLGluc2lkZTp7cHVuY3R1YXRpb246L148XFwvPy8sbmFtZXNwYWNlOi9eW15cXHM+XFwvOl0rOi99fSxcInNwZWNpYWwtYXR0clwiOltdLFwiYXR0ci12YWx1ZVwiOntwYXR0ZXJuOi89XFxzKig/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXlxccydcIj49XSspLyxpbnNpZGU6e3B1bmN0dWF0aW9uOlt7cGF0dGVybjovXj0vLGFsaWFzOlwiYXR0ci1lcXVhbHNcIn0sL1wifCcvXX19LHB1bmN0dWF0aW9uOi9cXC8/Pi8sXCJhdHRyLW5hbWVcIjp7cGF0dGVybjovW15cXHM+XFwvXSsvLGluc2lkZTp7bmFtZXNwYWNlOi9eW15cXHM+XFwvOl0rOi99fX19LGVudGl0eTpbe3BhdHRlcm46LyZbXFxkYS16XXsxLDh9Oy9pLGFsaWFzOlwibmFtZWQtZW50aXR5XCJ9LC8mI3g/W1xcZGEtZl17MSw4fTsvaV19LHQubGFuZ3VhZ2VzLm1hcmt1cC50YWcuaW5zaWRlW1wiYXR0ci12YWx1ZVwiXS5pbnNpZGUuZW50aXR5PXQubGFuZ3VhZ2VzLm1hcmt1cC5lbnRpdHksdC5sYW5ndWFnZXMubWFya3VwLmRvY3R5cGUuaW5zaWRlW1wiaW50ZXJuYWwtc3Vic2V0XCJdLmluc2lkZT10Lmxhbmd1YWdlcy5tYXJrdXAsdC5ob29rcy5hZGQoXCJ3cmFwXCIsKGZ1bmN0aW9uKGUpe1wiZW50aXR5XCI9PT1lLnR5cGUmJihlLmF0dHJpYnV0ZXMudGl0bGU9ZS5jb250ZW50LnJlcGxhY2UoLyZhbXA7LyxcIiZcIikpfSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0Lmxhbmd1YWdlcy5tYXJrdXAudGFnLFwiYWRkSW5saW5lZFwiLHt2YWx1ZTpmdW5jdGlvbihlLG4pe3ZhciByPXt9O3JbXCJsYW5ndWFnZS1cIituXT17cGF0dGVybjovKF48IVxcW0NEQVRBXFxbKVtcXHNcXFNdKz8oPz1cXF1cXF0+JCkvaSxsb29rYmVoaW5kOiEwLGluc2lkZTp0Lmxhbmd1YWdlc1tuXX0sci5jZGF0YT0vXjwhXFxbQ0RBVEFcXFt8XFxdXFxdPiQvaTt2YXIgbz17XCJpbmNsdWRlZC1jZGF0YVwiOntwYXR0ZXJuOi88IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4vaSxpbnNpZGU6cn19O29bXCJsYW5ndWFnZS1cIituXT17cGF0dGVybjovW1xcc1xcU10rLyxpbnNpZGU6dC5sYW5ndWFnZXNbbl19O3ZhciBpPXt9O2lbZV09e3BhdHRlcm46UmVnRXhwKC8oPF9fW14+XSo+KSg/OjwhXFxbQ0RBVEFcXFsoPzpbXlxcXV18XFxdKD8hXFxdPikpKlxcXVxcXT58KD8hPCFcXFtDREFUQVxcWylbXFxzXFxTXSkqPyg/PTxcXC9fXz4pLy5zb3VyY2UucmVwbGFjZSgvX18vZywoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKSxcImlcIiksbG9va2JlaGluZDohMCxncmVlZHk6ITAsaW5zaWRlOm99LHQubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShcIm1hcmt1cFwiLFwiY2RhdGFcIixpKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5sYW5ndWFnZXMubWFya3VwLnRhZyxcImFkZEF0dHJpYnV0ZVwiLHt2YWx1ZTpmdW5jdGlvbihlLG4pe3QubGFuZ3VhZ2VzLm1hcmt1cC50YWcuaW5zaWRlW1wic3BlY2lhbC1hdHRyXCJdLnB1c2goe3BhdHRlcm46UmVnRXhwKC8oXnxbXCInXFxzXSkvLnNvdXJjZStcIig/OlwiK2UrXCIpXCIrL1xccyo9XFxzKig/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXlxccydcIj49XSsoPz1bXFxzPl0pKS8uc291cmNlLFwiaVwiKSxsb29rYmVoaW5kOiEwLGluc2lkZTp7XCJhdHRyLW5hbWVcIjovXlteXFxzPV0rLyxcImF0dHItdmFsdWVcIjp7cGF0dGVybjovPVtcXHNcXFNdKy8saW5zaWRlOnt2YWx1ZTp7cGF0dGVybjovKF49XFxzKihbXCInXXwoPyFbXCInXSkpKVxcU1tcXHNcXFNdKig/PVxcMiQpLyxsb29rYmVoaW5kOiEwLGFsaWFzOltuLFwibGFuZ3VhZ2UtXCIrbl0saW5zaWRlOnQubGFuZ3VhZ2VzW25dfSxwdW5jdHVhdGlvbjpbe3BhdHRlcm46L149LyxhbGlhczpcImF0dHItZXF1YWxzXCJ9LC9cInwnL119fX19KX19KSx0Lmxhbmd1YWdlcy5odG1sPXQubGFuZ3VhZ2VzLm1hcmt1cCx0Lmxhbmd1YWdlcy5tYXRobWw9dC5sYW5ndWFnZXMubWFya3VwLHQubGFuZ3VhZ2VzLnN2Zz10Lmxhbmd1YWdlcy5tYXJrdXAsdC5sYW5ndWFnZXMueG1sPXQubGFuZ3VhZ2VzLmV4dGVuZChcIm1hcmt1cFwiLHt9KSx0Lmxhbmd1YWdlcy5zc21sPXQubGFuZ3VhZ2VzLnhtbCx0Lmxhbmd1YWdlcy5hdG9tPXQubGFuZ3VhZ2VzLnhtbCx0Lmxhbmd1YWdlcy5yc3M9dC5sYW5ndWFnZXMueG1sLGZ1bmN0aW9uKGUpe3ZhciB0PS8oPzpcIig/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXCJcXFxcXFxyXFxuXSkqXCJ8Jyg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteJ1xcXFxcXHJcXG5dKSonKS87ZS5sYW5ndWFnZXMuY3NzPXtjb21tZW50Oi9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxhdHJ1bGU6e3BhdHRlcm46L0BbXFx3LV0oPzpbXjt7XFxzXXxcXHMrKD8hW1xcc3tdKSkqKD86O3woPz1cXHMqXFx7KSkvLGluc2lkZTp7cnVsZTovXkBbXFx3LV0rLyxcInNlbGVjdG9yLWZ1bmN0aW9uLWFyZ3VtZW50XCI6e3BhdHRlcm46LyhcXGJzZWxlY3RvclxccypcXChcXHMqKD8hW1xccyldKSkoPzpbXigpXFxzXXxcXHMrKD8hW1xccyldKXxcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKSkrKD89XFxzKlxcKSkvLGxvb2tiZWhpbmQ6ITAsYWxpYXM6XCJzZWxlY3RvclwifSxrZXl3b3JkOntwYXR0ZXJuOi8oXnxbXlxcdy1dKSg/OmFuZHxub3R8b25seXxvcikoPyFbXFx3LV0pLyxsb29rYmVoaW5kOiEwfX19LHVybDp7cGF0dGVybjpSZWdFeHAoXCJcXFxcYnVybFxcXFwoKD86XCIrdC5zb3VyY2UrXCJ8XCIrLyg/OlteXFxcXFxcclxcbigpXCInXXxcXFxcW1xcc1xcU10pKi8uc291cmNlK1wiKVxcXFwpXCIsXCJpXCIpLGdyZWVkeTohMCxpbnNpZGU6e2Z1bmN0aW9uOi9edXJsL2kscHVuY3R1YXRpb246L15cXCh8XFwpJC8sc3RyaW5nOntwYXR0ZXJuOlJlZ0V4cChcIl5cIit0LnNvdXJjZStcIiRcIiksYWxpYXM6XCJ1cmxcIn19fSxzZWxlY3Rvcjp7cGF0dGVybjpSZWdFeHAoXCIoXnxbe31cXFxcc10pW157fVxcXFxzXSg/Oltee307XFxcIidcXFxcc118XFxcXHMrKD8hW1xcXFxze10pfFwiK3Quc291cmNlK1wiKSooPz1cXFxccypcXFxceylcIiksbG9va2JlaGluZDohMH0sc3RyaW5nOntwYXR0ZXJuOnQsZ3JlZWR5OiEwfSxwcm9wZXJ0eTp7cGF0dGVybjovKF58W14tXFx3XFx4QTAtXFx1RkZGRl0pKD8hXFxzKVstX2EtelxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVstXFx3XFx4QTAtXFx1RkZGRl0pKig/PVxccyo6KS9pLGxvb2tiZWhpbmQ6ITB9LGltcG9ydGFudDovIWltcG9ydGFudFxcYi9pLGZ1bmN0aW9uOntwYXR0ZXJuOi8oXnxbXi1hLXowLTldKVstYS16MC05XSsoPz1cXCgpL2ksbG9va2JlaGluZDohMH0scHVuY3R1YXRpb246L1soKXt9OzosXS99LGUubGFuZ3VhZ2VzLmNzcy5hdHJ1bGUuaW5zaWRlLnJlc3Q9ZS5sYW5ndWFnZXMuY3NzO3ZhciBuPWUubGFuZ3VhZ2VzLm1hcmt1cDtuJiYobi50YWcuYWRkSW5saW5lZChcInN0eWxlXCIsXCJjc3NcIiksbi50YWcuYWRkQXR0cmlidXRlKFwic3R5bGVcIixcImNzc1wiKSl9KHQpLHQubGFuZ3VhZ2VzLmNsaWtlPXtjb21tZW50Olt7cGF0dGVybjovKF58W15cXFxcXSlcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxsb29rYmVoaW5kOiEwLGdyZWVkeTohMH0se3BhdHRlcm46LyhefFteXFxcXDpdKVxcL1xcLy4qLyxsb29rYmVoaW5kOiEwLGdyZWVkeTohMH1dLHN0cmluZzp7cGF0dGVybjovKFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLGdyZWVkeTohMH0sXCJjbGFzcy1uYW1lXCI6e3BhdHRlcm46LyhcXGIoPzpjbGFzc3xpbnRlcmZhY2V8ZXh0ZW5kc3xpbXBsZW1lbnRzfHRyYWl0fGluc3RhbmNlb2Z8bmV3KVxccyt8XFxiY2F0Y2hcXHMrXFwoKVtcXHcuXFxcXF0rL2ksbG9va2JlaGluZDohMCxpbnNpZGU6e3B1bmN0dWF0aW9uOi9bLlxcXFxdL319LGtleXdvcmQ6L1xcYig/OmlmfGVsc2V8d2hpbGV8ZG98Zm9yfHJldHVybnxpbnxpbnN0YW5jZW9mfGZ1bmN0aW9ufG5ld3x0cnl8dGhyb3d8Y2F0Y2h8ZmluYWxseXxudWxsfGJyZWFrfGNvbnRpbnVlKVxcYi8sYm9vbGVhbjovXFxiKD86dHJ1ZXxmYWxzZSlcXGIvLGZ1bmN0aW9uOi9cXGJcXHcrKD89XFwoKS8sbnVtYmVyOi9cXGIweFtcXGRhLWZdK1xcYnwoPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/L2ksb3BlcmF0b3I6L1s8Pl09P3xbIT1dPT89P3wtLT98XFwrXFwrP3wmJj98XFx8XFx8P3xbPyovfl4lXS8scHVuY3R1YXRpb246L1t7fVtcXF07KCksLjpdL30sdC5sYW5ndWFnZXMuamF2YXNjcmlwdD10Lmxhbmd1YWdlcy5leHRlbmQoXCJjbGlrZVwiLHtcImNsYXNzLW5hbWVcIjpbdC5sYW5ndWFnZXMuY2xpa2VbXCJjbGFzcy1uYW1lXCJdLHtwYXR0ZXJuOi8oXnxbXiRcXHdcXHhBMC1cXHVGRkZGXSkoPyFcXHMpW18kQS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKD89XFwuKD86cHJvdG90eXBlfGNvbnN0cnVjdG9yKSkvLGxvb2tiZWhpbmQ6ITB9XSxrZXl3b3JkOlt7cGF0dGVybjovKCg/Ol58XFx9KVxccyopY2F0Y2hcXGIvLGxvb2tiZWhpbmQ6ITB9LHtwYXR0ZXJuOi8oXnxbXi5dfFxcLlxcLlxcLlxccyopXFxiKD86YXN8YXNzZXJ0KD89XFxzKlxceyl8YXN5bmMoPz1cXHMqKD86ZnVuY3Rpb25cXGJ8XFwofFskXFx3XFx4QTAtXFx1RkZGRl18JCkpfGF3YWl0fGJyZWFrfGNhc2V8Y2xhc3N8Y29uc3R8Y29udGludWV8ZGVidWdnZXJ8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxlbnVtfGV4cG9ydHxleHRlbmRzfGZpbmFsbHkoPz1cXHMqKD86XFx7fCQpKXxmb3J8ZnJvbSg/PVxccyooPzpbJ1wiXXwkKSl8ZnVuY3Rpb258KD86Z2V0fHNldCkoPz1cXHMqKD86WyNcXFskXFx3XFx4QTAtXFx1RkZGRl18JCkpfGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGluc3RhbmNlb2Z8aW50ZXJmYWNlfGxldHxuZXd8bnVsbHxvZnxwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZXR1cm58c3RhdGljfHN1cGVyfHN3aXRjaHx0aGlzfHRocm93fHRyeXx0eXBlb2Z8dW5kZWZpbmVkfHZhcnx2b2lkfHdoaWxlfHdpdGh8eWllbGQpXFxiLyxsb29rYmVoaW5kOiEwfV0sZnVuY3Rpb246LyM/KD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKig/PVxccyooPzpcXC5cXHMqKD86YXBwbHl8YmluZHxjYWxsKVxccyopP1xcKCkvLG51bWJlcjovXFxiKD86KD86MFt4WF0oPzpbXFxkQS1GYS1mXSg/Ol9bXFxkQS1GYS1mXSk/KSt8MFtiQl0oPzpbMDFdKD86X1swMV0pPykrfDBbb09dKD86WzAtN10oPzpfWzAtN10pPykrKW4/fCg/OlxcZCg/Ol9cXGQpPykrbnxOYU58SW5maW5pdHkpXFxifCg/OlxcYig/OlxcZCg/Ol9cXGQpPykrXFwuPyg/OlxcZCg/Ol9cXGQpPykqfFxcQlxcLig/OlxcZCg/Ol9cXGQpPykrKSg/OltFZV1bKy1dPyg/OlxcZCg/Ol9cXGQpPykrKT8vLG9wZXJhdG9yOi8tLXxcXCtcXCt8XFwqXFwqPT98PT58JiY9P3xcXHxcXHw9P3xbIT1dPT18PDw9P3w+Pj4/PT98Wy0rKi8lJnxeIT08Pl09P3xcXC57M318XFw/XFw/PT98XFw/XFwuP3xbfjpdL30pLHQubGFuZ3VhZ2VzLmphdmFzY3JpcHRbXCJjbGFzcy1uYW1lXCJdWzBdLnBhdHRlcm49LyhcXGIoPzpjbGFzc3xpbnRlcmZhY2V8ZXh0ZW5kc3xpbXBsZW1lbnRzfGluc3RhbmNlb2Z8bmV3KVxccyspW1xcdy5cXFxcXSsvLHQubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShcImphdmFzY3JpcHRcIixcImtleXdvcmRcIix7cmVnZXg6e3BhdHRlcm46LygoPzpefFteJFxcd1xceEEwLVxcdUZGRkYuXCInXFxdKVxcc118XFxiKD86cmV0dXJufHlpZWxkKSlcXHMqKVxcLyg/OlxcWyg/OlteXFxdXFxcXFxcclxcbl18XFxcXC4pKlxcXXxcXFxcLnxbXi9cXFxcXFxbXFxyXFxuXSkrXFwvW2RnaW15dXNdezAsN30oPz0oPzpcXHN8XFwvXFwqKD86W14qXXxcXCooPyFcXC8pKSpcXCpcXC8pKig/OiR8W1xcclxcbiwuOzp9KVxcXV18XFwvXFwvKSkvLGxvb2tiZWhpbmQ6ITAsZ3JlZWR5OiEwLGluc2lkZTp7XCJyZWdleC1zb3VyY2VcIjp7cGF0dGVybjovXihcXC8pW1xcc1xcU10rKD89XFwvW2Etel0qJCkvLGxvb2tiZWhpbmQ6ITAsYWxpYXM6XCJsYW5ndWFnZS1yZWdleFwiLGluc2lkZTp0Lmxhbmd1YWdlcy5yZWdleH0sXCJyZWdleC1kZWxpbWl0ZXJcIjovXlxcL3xcXC8kLyxcInJlZ2V4LWZsYWdzXCI6L15bYS16XSskL319LFwiZnVuY3Rpb24tdmFyaWFibGVcIjp7cGF0dGVybjovIz8oPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKD89XFxzKls9Ol1cXHMqKD86YXN5bmNcXHMqKT8oPzpcXGJmdW5jdGlvblxcYnwoPzpcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXwoPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKVxccyo9PikpLyxhbGlhczpcImZ1bmN0aW9uXCJ9LHBhcmFtZXRlcjpbe3BhdHRlcm46LyhmdW5jdGlvbig/OlxccysoPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKT9cXHMqXFwoXFxzKikoPyFcXHMpKD86W14oKVxcc118XFxzKyg/IVtcXHMpXSl8XFwoW14oKV0qXFwpKSsoPz1cXHMqXFwpKS8sbG9va2JlaGluZDohMCxpbnNpZGU6dC5sYW5ndWFnZXMuamF2YXNjcmlwdH0se3BhdHRlcm46LyhefFteJFxcd1xceEEwLVxcdUZGRkZdKSg/IVxccylbXyRhLXpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSooPz1cXHMqPT4pL2ksbG9va2JlaGluZDohMCxpbnNpZGU6dC5sYW5ndWFnZXMuamF2YXNjcmlwdH0se3BhdHRlcm46LyhcXChcXHMqKSg/IVxccykoPzpbXigpXFxzXXxcXHMrKD8hW1xccyldKXxcXChbXigpXSpcXCkpKyg/PVxccypcXClcXHMqPT4pLyxsb29rYmVoaW5kOiEwLGluc2lkZTp0Lmxhbmd1YWdlcy5qYXZhc2NyaXB0fSx7cGF0dGVybjovKCg/OlxcYnxcXHN8XikoPyEoPzphc3xhc3luY3xhd2FpdHxicmVha3xjYXNlfGNhdGNofGNsYXNzfGNvbnN0fGNvbnRpbnVlfGRlYnVnZ2VyfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZW51bXxleHBvcnR8ZXh0ZW5kc3xmaW5hbGx5fGZvcnxmcm9tfGZ1bmN0aW9ufGdldHxpZnxpbXBsZW1lbnRzfGltcG9ydHxpbnxpbnN0YW5jZW9mfGludGVyZmFjZXxsZXR8bmV3fG51bGx8b2Z8cGFja2FnZXxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8cmV0dXJufHNldHxzdGF0aWN8c3VwZXJ8c3dpdGNofHRoaXN8dGhyb3d8dHJ5fHR5cGVvZnx1bmRlZmluZWR8dmFyfHZvaWR8d2hpbGV8d2l0aHx5aWVsZCkoPyFbJFxcd1xceEEwLVxcdUZGRkZdKSkoPzooPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqXFxzKilcXChcXHMqfFxcXVxccypcXChcXHMqKSg/IVxccykoPzpbXigpXFxzXXxcXHMrKD8hW1xccyldKXxcXChbXigpXSpcXCkpKyg/PVxccypcXClcXHMqXFx7KS8sbG9va2JlaGluZDohMCxpbnNpZGU6dC5sYW5ndWFnZXMuamF2YXNjcmlwdH1dLGNvbnN0YW50Oi9cXGJbQS1aXSg/OltBLVpfXXxcXGR4PykqXFxiL30pLHQubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShcImphdmFzY3JpcHRcIixcInN0cmluZ1wiLHtoYXNoYmFuZzp7cGF0dGVybjovXiMhLiovLGdyZWVkeTohMCxhbGlhczpcImNvbW1lbnRcIn0sXCJ0ZW1wbGF0ZS1zdHJpbmdcIjp7cGF0dGVybjovYCg/OlxcXFxbXFxzXFxTXXxcXCRcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHtbXn1dKlxcfSkqXFx9KStcXH18KD8hXFwkXFx7KVteXFxcXGBdKSpgLyxncmVlZHk6ITAsaW5zaWRlOntcInRlbXBsYXRlLXB1bmN0dWF0aW9uXCI6e3BhdHRlcm46L15gfGAkLyxhbGlhczpcInN0cmluZ1wifSxpbnRlcnBvbGF0aW9uOntwYXR0ZXJuOi8oKD86XnxbXlxcXFxdKSg/OlxcXFx7Mn0pKilcXCRcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHtbXn1dKlxcfSkqXFx9KStcXH0vLGxvb2tiZWhpbmQ6ITAsaW5zaWRlOntcImludGVycG9sYXRpb24tcHVuY3R1YXRpb25cIjp7cGF0dGVybjovXlxcJFxce3xcXH0kLyxhbGlhczpcInB1bmN0dWF0aW9uXCJ9LHJlc3Q6dC5sYW5ndWFnZXMuamF2YXNjcmlwdH19LHN0cmluZzovW1xcc1xcU10rL319fSksdC5sYW5ndWFnZXMubWFya3VwJiYodC5sYW5ndWFnZXMubWFya3VwLnRhZy5hZGRJbmxpbmVkKFwic2NyaXB0XCIsXCJqYXZhc2NyaXB0XCIpLHQubGFuZ3VhZ2VzLm1hcmt1cC50YWcuYWRkQXR0cmlidXRlKC9vbig/OmFib3J0fGJsdXJ8Y2hhbmdlfGNsaWNrfGNvbXBvc2l0aW9uKD86ZW5kfHN0YXJ0fHVwZGF0ZSl8ZGJsY2xpY2t8ZXJyb3J8Zm9jdXMoPzppbnxvdXQpP3xrZXkoPzpkb3dufHVwKXxsb2FkfG1vdXNlKD86ZG93bnxlbnRlcnxsZWF2ZXxtb3ZlfG91dHxvdmVyfHVwKXxyZXNldHxyZXNpemV8c2Nyb2xsfHNlbGVjdHxzbG90Y2hhbmdlfHN1Ym1pdHx1bmxvYWR8d2hlZWwpLy5zb3VyY2UsXCJqYXZhc2NyaXB0XCIpKSx0Lmxhbmd1YWdlcy5qcz10Lmxhbmd1YWdlcy5qYXZhc2NyaXB0LGZ1bmN0aW9uKCl7aWYodm9pZCAwIT09dCYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50KXtFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzfHwoRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcz1FbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3Rvcnx8RWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yKTt2YXIgZT17anM6XCJqYXZhc2NyaXB0XCIscHk6XCJweXRob25cIixyYjpcInJ1YnlcIixwczE6XCJwb3dlcnNoZWxsXCIscHNtMTpcInBvd2Vyc2hlbGxcIixzaDpcImJhc2hcIixiYXQ6XCJiYXRjaFwiLGg6XCJjXCIsdGV4OlwibGF0ZXhcIn0sbj1cImRhdGEtc3JjLXN0YXR1c1wiLHI9J3ByZVtkYXRhLXNyY106bm90KFtkYXRhLXNyYy1zdGF0dXM9XCJsb2FkZWRcIl0pOm5vdChbZGF0YS1zcmMtc3RhdHVzPVwibG9hZGluZ1wiXSknLG89L1xcYmxhbmcoPzp1YWdlKT8tKFtcXHctXSspXFxiL2k7dC5ob29rcy5hZGQoXCJiZWZvcmUtaGlnaGxpZ2h0YWxsXCIsKGZ1bmN0aW9uKGUpe2Uuc2VsZWN0b3IrPVwiLCBcIityfSkpLHQuaG9va3MuYWRkKFwiYmVmb3JlLXNhbml0eS1jaGVja1wiLChmdW5jdGlvbihvKXt2YXIgaT1vLmVsZW1lbnQ7aWYoaS5tYXRjaGVzKHIpKXtvLmNvZGU9XCJcIixpLnNldEF0dHJpYnV0ZShuLFwibG9hZGluZ1wiKTt2YXIgdT1pLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJDT0RFXCIpKTt1LnRleHRDb250ZW50PVwiTG9hZGluZ+KAplwiO3ZhciBzPWkuZ2V0QXR0cmlidXRlKFwiZGF0YS1zcmNcIiksbD1vLmxhbmd1YWdlO2lmKFwibm9uZVwiPT09bCl7dmFyIGM9KC9cXC4oXFx3KykkLy5leGVjKHMpfHxbLFwibm9uZVwiXSlbMV07bD1lW2NdfHxjfWEodSxsKSxhKGksbCk7dmFyIGY9dC5wbHVnaW5zLmF1dG9sb2FkZXI7ZiYmZi5sb2FkTGFuZ3VhZ2VzKGwpO3ZhciBkPW5ldyBYTUxIdHRwUmVxdWVzdDtkLm9wZW4oXCJHRVRcIixzLCEwKSxkLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQ9PWQucmVhZHlTdGF0ZSYmKGQuc3RhdHVzPDQwMCYmZC5yZXNwb25zZVRleHQ/KGkuc2V0QXR0cmlidXRlKG4sXCJsb2FkZWRcIiksdS50ZXh0Q29udGVudD1kLnJlc3BvbnNlVGV4dCx0LmhpZ2hsaWdodEVsZW1lbnQodSkpOihpLnNldEF0dHJpYnV0ZShuLFwiZmFpbGVkXCIpLGQuc3RhdHVzPj00MDA/dS50ZXh0Q29udGVudD1cIuKcliBFcnJvciBcIitkLnN0YXR1cytcIiB3aGlsZSBmZXRjaGluZyBmaWxlOiBcIitkLnN0YXR1c1RleHQ6dS50ZXh0Q29udGVudD1cIuKcliBFcnJvcjogRmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBlbXB0eVwiKSl9LGQuc2VuZChudWxsKX19KSksdC5wbHVnaW5zLmZpbGVIaWdobGlnaHQ9e2hpZ2hsaWdodDpmdW5jdGlvbihlKXtmb3IodmFyIG4sbz0oZXx8ZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwociksaT0wO249b1tpKytdOyl0LmhpZ2hsaWdodEVsZW1lbnQobil9fTt2YXIgaT0hMTt0LmZpbGVIaWdobGlnaHQ9ZnVuY3Rpb24oKXtpfHwoY29uc29sZS53YXJuKFwiUHJpc20uZmlsZUhpZ2hsaWdodCBpcyBkZXByZWNhdGVkLiBVc2UgYFByaXNtLnBsdWdpbnMuZmlsZUhpZ2hsaWdodC5oaWdobGlnaHRgIGluc3RlYWQuXCIpLGk9ITApLHQucGx1Z2lucy5maWxlSGlnaGxpZ2h0LmhpZ2hsaWdodC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGEoZSx0KXt2YXIgbj1lLmNsYXNzTmFtZTtuPW4ucmVwbGFjZShvLFwiIFwiKStcIiBsYW5ndWFnZS1cIit0LGUuY2xhc3NOYW1lPW4ucmVwbGFjZSgvXFxzKy9nLFwiIFwiKS50cmltKCl9fSgpfSkpOyFmdW5jdGlvbihlKXt2YXIgdD1lLnV0aWwuY2xvbmUoZS5sYW5ndWFnZXMuamF2YXNjcmlwdCksbj0vKD86XFxzfFxcL1xcLy4qKD8hLil8XFwvXFwqKD86W14qXXxcXCooPyFcXC8pKVxcKlxcLykvLnNvdXJjZSxyPS8oPzpcXHsoPzpcXHsoPzpcXHtbXnt9XSpcXH18W157fV0pKlxcfXxbXnt9XSkqXFx9KS8uc291cmNlLG89Lyg/OlxcezxTPipcXC57M30oPzpbXnt9XXw8QlJBQ0VTPikqXFx9KS8uc291cmNlO2Z1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZT1lLnJlcGxhY2UoLzxTPi9nLChmdW5jdGlvbigpe3JldHVybiBufSkpLnJlcGxhY2UoLzxCUkFDRVM+L2csKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSkucmVwbGFjZSgvPFNQUkVBRD4vZywoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxSZWdFeHAoZSx0KX1vPWkobykuc291cmNlLGUubGFuZ3VhZ2VzLmpzeD1lLmxhbmd1YWdlcy5leHRlbmQoXCJtYXJrdXBcIix0KSxlLmxhbmd1YWdlcy5qc3gudGFnLnBhdHRlcm49aSgvPFxcLz8oPzpbXFx3LjotXSsoPzo8Uz4rKD86W1xcdy46JC1dKyg/Oj0oPzpcIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pKlwifCcoPzpcXFxcW1xcc1xcU118W15cXFxcJ10pKid8W15cXHN7J1wiLz49XSt8PEJSQUNFUz4pKT98PFNQUkVBRD4pKSo8Uz4qXFwvPyk/Pi8uc291cmNlKSxlLmxhbmd1YWdlcy5qc3gudGFnLmluc2lkZS50YWcucGF0dGVybj0vXjxcXC8/W15cXHM+XFwvXSovaSxlLmxhbmd1YWdlcy5qc3gudGFnLmluc2lkZVtcImF0dHItdmFsdWVcIl0ucGF0dGVybj0vPSg/IVxceykoPzpcIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pKlwifCcoPzpcXFxcW1xcc1xcU118W15cXFxcJ10pKid8W15cXHMnXCI+XSspL2ksZS5sYW5ndWFnZXMuanN4LnRhZy5pbnNpZGUudGFnLmluc2lkZVtcImNsYXNzLW5hbWVcIl09L15bQS1aXVxcdyooPzpcXC5bQS1aXVxcdyopKiQvLGUubGFuZ3VhZ2VzLmpzeC50YWcuaW5zaWRlLmNvbW1lbnQ9dC5jb21tZW50LGUubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShcImluc2lkZVwiLFwiYXR0ci1uYW1lXCIse3NwcmVhZDp7cGF0dGVybjppKC88U1BSRUFEPi8uc291cmNlKSxpbnNpZGU6ZS5sYW5ndWFnZXMuanN4fX0sZS5sYW5ndWFnZXMuanN4LnRhZyksZS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKFwiaW5zaWRlXCIsXCJzcGVjaWFsLWF0dHJcIix7c2NyaXB0OntwYXR0ZXJuOmkoLz08QlJBQ0VTPi8uc291cmNlKSxpbnNpZGU6e1wic2NyaXB0LXB1bmN0dWF0aW9uXCI6e3BhdHRlcm46L149KD89XFx7KS8sYWxpYXM6XCJwdW5jdHVhdGlvblwifSxyZXN0OmUubGFuZ3VhZ2VzLmpzeH0sYWxpYXM6XCJsYW5ndWFnZS1qYXZhc2NyaXB0XCJ9fSxlLmxhbmd1YWdlcy5qc3gudGFnKTt2YXIgYT1mdW5jdGlvbihlKXtyZXR1cm4gZT9cInN0cmluZ1wiPT10eXBlb2YgZT9lOlwic3RyaW5nXCI9PXR5cGVvZiBlLmNvbnRlbnQ/ZS5jb250ZW50OmUuY29udGVudC5tYXAoYSkuam9pbihcIlwiKTpcIlwifSx1PWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1bXSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl0saT0hMTtpZihcInN0cmluZ1wiIT10eXBlb2YgbyYmKFwidGFnXCI9PT1vLnR5cGUmJm8uY29udGVudFswXSYmXCJ0YWdcIj09PW8uY29udGVudFswXS50eXBlP1wiPC9cIj09PW8uY29udGVudFswXS5jb250ZW50WzBdLmNvbnRlbnQ/bi5sZW5ndGg+MCYmbltuLmxlbmd0aC0xXS50YWdOYW1lPT09YShvLmNvbnRlbnRbMF0uY29udGVudFsxXSkmJm4ucG9wKCk6XCIvPlwiPT09by5jb250ZW50W28uY29udGVudC5sZW5ndGgtMV0uY29udGVudHx8bi5wdXNoKHt0YWdOYW1lOmEoby5jb250ZW50WzBdLmNvbnRlbnRbMV0pLG9wZW5lZEJyYWNlczowfSk6bi5sZW5ndGg+MCYmXCJwdW5jdHVhdGlvblwiPT09by50eXBlJiZcIntcIj09PW8uY29udGVudD9uW24ubGVuZ3RoLTFdLm9wZW5lZEJyYWNlcysrOm4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV0ub3BlbmVkQnJhY2VzPjAmJlwicHVuY3R1YXRpb25cIj09PW8udHlwZSYmXCJ9XCI9PT1vLmNvbnRlbnQ/bltuLmxlbmd0aC0xXS5vcGVuZWRCcmFjZXMtLTppPSEwKSwoaXx8XCJzdHJpbmdcIj09dHlwZW9mIG8pJiZuLmxlbmd0aD4wJiYwPT09bltuLmxlbmd0aC0xXS5vcGVuZWRCcmFjZXMpe3ZhciBzPWEobyk7cjx0Lmxlbmd0aC0xJiYoXCJzdHJpbmdcIj09dHlwZW9mIHRbcisxXXx8XCJwbGFpbi10ZXh0XCI9PT10W3IrMV0udHlwZSkmJihzKz1hKHRbcisxXSksdC5zcGxpY2UocisxLDEpKSxyPjAmJihcInN0cmluZ1wiPT10eXBlb2YgdFtyLTFdfHxcInBsYWluLXRleHRcIj09PXRbci0xXS50eXBlKSYmKHM9YSh0W3ItMV0pK3MsdC5zcGxpY2Uoci0xLDEpLHItLSksdFtyXT1uZXcgZS5Ub2tlbihcInBsYWluLXRleHRcIixzLG51bGwscyl9by5jb250ZW50JiZcInN0cmluZ1wiIT10eXBlb2Ygby5jb250ZW50JiZ1KG8uY29udGVudCl9fTtlLmhvb2tzLmFkZChcImFmdGVyLXRva2VuaXplXCIsKGZ1bmN0aW9uKGUpe1wianN4XCIhPT1lLmxhbmd1YWdlJiZcInRzeFwiIT09ZS5sYW5ndWFnZXx8dShlLnRva2Vucyl9KSl9KFByaXNtKSxmdW5jdGlvbihlKXtlLmxhbmd1YWdlcy50eXBlc2NyaXB0PWUubGFuZ3VhZ2VzLmV4dGVuZChcImphdmFzY3JpcHRcIix7XCJjbGFzcy1uYW1lXCI6e3BhdHRlcm46LyhcXGIoPzpjbGFzc3xleHRlbmRzfGltcGxlbWVudHN8aW5zdGFuY2VvZnxpbnRlcmZhY2V8bmV3fHR5cGUpXFxzKykoPyFrZXlvZlxcYikoPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKD86XFxzKjwoPzpbXjw+XXw8KD86W148Pl18PFtePD5dKj4pKj4pKj4pPy8sbG9va2JlaGluZDohMCxncmVlZHk6ITAsaW5zaWRlOm51bGx9LGJ1aWx0aW46L1xcYig/OnN0cmluZ3xGdW5jdGlvbnxhbnl8bnVtYmVyfGJvb2xlYW58QXJyYXl8c3ltYm9sfGNvbnNvbGV8UHJvbWlzZXx1bmtub3dufG5ldmVyKVxcYi99KSxlLmxhbmd1YWdlcy50eXBlc2NyaXB0LmtleXdvcmQucHVzaCgvXFxiKD86YWJzdHJhY3R8YXN8ZGVjbGFyZXxpbXBsZW1lbnRzfGlzfGtleW9mfHJlYWRvbmx5fHJlcXVpcmUpXFxiLywvXFxiKD86YXNzZXJ0c3xpbmZlcnxpbnRlcmZhY2V8bW9kdWxlfG5hbWVzcGFjZXx0eXBlKVxcYig/PVxccyooPzpbe18kYS16QS1aXFx4QTAtXFx1RkZGRl18JCkpLywvXFxidHlwZVxcYig/PVxccyooPzpbXFx7Kl18JCkpLyksZGVsZXRlIGUubGFuZ3VhZ2VzLnR5cGVzY3JpcHQucGFyYW1ldGVyO3ZhciB0PWUubGFuZ3VhZ2VzLmV4dGVuZChcInR5cGVzY3JpcHRcIix7fSk7ZGVsZXRlIHRbXCJjbGFzcy1uYW1lXCJdLGUubGFuZ3VhZ2VzLnR5cGVzY3JpcHRbXCJjbGFzcy1uYW1lXCJdLmluc2lkZT10LGUubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShcInR5cGVzY3JpcHRcIixcImZ1bmN0aW9uXCIse2RlY29yYXRvcjp7cGF0dGVybjovQFskXFx3XFx4QTAtXFx1RkZGRl0rLyxpbnNpZGU6e2F0OntwYXR0ZXJuOi9eQC8sYWxpYXM6XCJvcGVyYXRvclwifSxmdW5jdGlvbjovXltcXHNcXFNdKy99fSxcImdlbmVyaWMtZnVuY3Rpb25cIjp7cGF0dGVybjovIz8oPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqXFxzKjwoPzpbXjw+XXw8KD86W148Pl18PFtePD5dKj4pKj4pKj4oPz1cXHMqXFwoKS8sZ3JlZWR5OiEwLGluc2lkZTp7ZnVuY3Rpb246L14jPyg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSovLGdlbmVyaWM6e3BhdHRlcm46LzxbXFxzXFxTXSsvLGFsaWFzOlwiY2xhc3MtbmFtZVwiLGluc2lkZTp0fX19fSksZS5sYW5ndWFnZXMudHM9ZS5sYW5ndWFnZXMudHlwZXNjcmlwdH0oUHJpc20pLFByaXNtLmxhbmd1YWdlcy5tYXJrdXA9e2NvbW1lbnQ6e3BhdHRlcm46LzwhLS0oPzooPyE8IS0tKVtcXHNcXFNdKSo/LS0+LyxncmVlZHk6ITB9LHByb2xvZzp7cGF0dGVybjovPFxcP1tcXHNcXFNdKz9cXD8+LyxncmVlZHk6ITB9LGRvY3R5cGU6e3BhdHRlcm46LzwhRE9DVFlQRSg/OltePlwiJ1tcXF1dfFwiW15cIl0qXCJ8J1teJ10qJykrKD86XFxbKD86W148XCInXFxdXXxcIlteXCJdKlwifCdbXiddKid8PCg/ISEtLSl8PCEtLSg/OlteLV18LSg/IS0+KSkqLS0+KSpcXF1cXHMqKT8+L2ksZ3JlZWR5OiEwLGluc2lkZTp7XCJpbnRlcm5hbC1zdWJzZXRcIjp7cGF0dGVybjovKF5bXlxcW10qXFxbKVtcXHNcXFNdKyg/PVxcXT4kKS8sbG9va2JlaGluZDohMCxncmVlZHk6ITAsaW5zaWRlOm51bGx9LHN0cmluZzp7cGF0dGVybjovXCJbXlwiXSpcInwnW14nXSonLyxncmVlZHk6ITB9LHB1bmN0dWF0aW9uOi9ePCF8PiR8W1tcXF1dLyxcImRvY3R5cGUtdGFnXCI6L15ET0NUWVBFL2ksbmFtZTovW15cXHM8PidcIl0rL319LGNkYXRhOntwYXR0ZXJuOi88IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4vaSxncmVlZHk6ITB9LHRhZzp7cGF0dGVybjovPFxcLz8oPyFcXGQpW15cXHM+XFwvPSQ8JV0rKD86XFxzKD86XFxzKlteXFxzPlxcLz1dKyg/Olxccyo9XFxzKig/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXlxccydcIj49XSsoPz1bXFxzPl0pKXwoPz1bXFxzLz5dKSkpKyk/XFxzKlxcLz8+LyxncmVlZHk6ITAsaW5zaWRlOnt0YWc6e3BhdHRlcm46L148XFwvP1teXFxzPlxcL10rLyxpbnNpZGU6e3B1bmN0dWF0aW9uOi9ePFxcLz8vLG5hbWVzcGFjZTovXlteXFxzPlxcLzpdKzovfX0sXCJzcGVjaWFsLWF0dHJcIjpbXSxcImF0dHItdmFsdWVcIjp7cGF0dGVybjovPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHMnXCI+PV0rKS8saW5zaWRlOntwdW5jdHVhdGlvbjpbe3BhdHRlcm46L149LyxhbGlhczpcImF0dHItZXF1YWxzXCJ9LC9cInwnL119fSxwdW5jdHVhdGlvbjovXFwvPz4vLFwiYXR0ci1uYW1lXCI6e3BhdHRlcm46L1teXFxzPlxcL10rLyxpbnNpZGU6e25hbWVzcGFjZTovXlteXFxzPlxcLzpdKzovfX19fSxlbnRpdHk6W3twYXR0ZXJuOi8mW1xcZGEtel17MSw4fTsvaSxhbGlhczpcIm5hbWVkLWVudGl0eVwifSwvJiN4P1tcXGRhLWZdezEsOH07L2ldfSxQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZy5pbnNpZGVbXCJhdHRyLXZhbHVlXCJdLmluc2lkZS5lbnRpdHk9UHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC5lbnRpdHksUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC5kb2N0eXBlLmluc2lkZVtcImludGVybmFsLXN1YnNldFwiXS5pbnNpZGU9UHJpc20ubGFuZ3VhZ2VzLm1hcmt1cCxQcmlzbS5ob29rcy5hZGQoXCJ3cmFwXCIsKGZ1bmN0aW9uKGUpe1wiZW50aXR5XCI9PT1lLnR5cGUmJihlLmF0dHJpYnV0ZXMudGl0bGU9ZS5jb250ZW50LnJlcGxhY2UoLyZhbXA7LyxcIiZcIikpfSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZyxcImFkZElubGluZWRcIix7dmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtuW1wibGFuZ3VhZ2UtXCIrdF09e3BhdHRlcm46LyhePCFcXFtDREFUQVxcWylbXFxzXFxTXSs/KD89XFxdXFxdPiQpL2ksbG9va2JlaGluZDohMCxpbnNpZGU6UHJpc20ubGFuZ3VhZ2VzW3RdfSxuLmNkYXRhPS9ePCFcXFtDREFUQVxcW3xcXF1cXF0+JC9pO3ZhciByPXtcImluY2x1ZGVkLWNkYXRhXCI6e3BhdHRlcm46LzwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPi9pLGluc2lkZTpufX07cltcImxhbmd1YWdlLVwiK3RdPXtwYXR0ZXJuOi9bXFxzXFxTXSsvLGluc2lkZTpQcmlzbS5sYW5ndWFnZXNbdF19O3ZhciBvPXt9O29bZV09e3BhdHRlcm46UmVnRXhwKC8oPF9fW14+XSo+KSg/OjwhXFxbQ0RBVEFcXFsoPzpbXlxcXV18XFxdKD8hXFxdPikpKlxcXVxcXT58KD8hPCFcXFtDREFUQVxcWylbXFxzXFxTXSkqPyg/PTxcXC9fXz4pLy5zb3VyY2UucmVwbGFjZSgvX18vZywoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKSxcImlcIiksbG9va2JlaGluZDohMCxncmVlZHk6ITAsaW5zaWRlOnJ9LFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoXCJtYXJrdXBcIixcImNkYXRhXCIsbyl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFByaXNtLmxhbmd1YWdlcy5tYXJrdXAudGFnLFwiYWRkQXR0cmlidXRlXCIse3ZhbHVlOmZ1bmN0aW9uKGUsdCl7UHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC50YWcuaW5zaWRlW1wic3BlY2lhbC1hdHRyXCJdLnB1c2goe3BhdHRlcm46UmVnRXhwKC8oXnxbXCInXFxzXSkvLnNvdXJjZStcIig/OlwiK2UrXCIpXCIrL1xccyo9XFxzKig/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXlxccydcIj49XSsoPz1bXFxzPl0pKS8uc291cmNlLFwiaVwiKSxsb29rYmVoaW5kOiEwLGluc2lkZTp7XCJhdHRyLW5hbWVcIjovXlteXFxzPV0rLyxcImF0dHItdmFsdWVcIjp7cGF0dGVybjovPVtcXHNcXFNdKy8saW5zaWRlOnt2YWx1ZTp7cGF0dGVybjovKF49XFxzKihbXCInXXwoPyFbXCInXSkpKVxcU1tcXHNcXFNdKig/PVxcMiQpLyxsb29rYmVoaW5kOiEwLGFsaWFzOlt0LFwibGFuZ3VhZ2UtXCIrdF0saW5zaWRlOlByaXNtLmxhbmd1YWdlc1t0XX0scHVuY3R1YXRpb246W3twYXR0ZXJuOi9ePS8sYWxpYXM6XCJhdHRyLWVxdWFsc1wifSwvXCJ8Jy9dfX19fSl9fSksUHJpc20ubGFuZ3VhZ2VzLmh0bWw9UHJpc20ubGFuZ3VhZ2VzLm1hcmt1cCxQcmlzbS5sYW5ndWFnZXMubWF0aG1sPVByaXNtLmxhbmd1YWdlcy5tYXJrdXAsUHJpc20ubGFuZ3VhZ2VzLnN2Zz1QcmlzbS5sYW5ndWFnZXMubWFya3VwLFByaXNtLmxhbmd1YWdlcy54bWw9UHJpc20ubGFuZ3VhZ2VzLmV4dGVuZChcIm1hcmt1cFwiLHt9KSxQcmlzbS5sYW5ndWFnZXMuc3NtbD1QcmlzbS5sYW5ndWFnZXMueG1sLFByaXNtLmxhbmd1YWdlcy5hdG9tPVByaXNtLmxhbmd1YWdlcy54bWwsUHJpc20ubGFuZ3VhZ2VzLnJzcz1QcmlzbS5sYW5ndWFnZXMueG1sLFByaXNtLmxhbmd1YWdlcy5nbz1QcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKFwiY2xpa2VcIix7c3RyaW5nOntwYXR0ZXJuOi8oW1wiJ2BdKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxLyxncmVlZHk6ITB9LGtleXdvcmQ6L1xcYig/OmJyZWFrfGNhc2V8Y2hhbnxjb25zdHxjb250aW51ZXxkZWZhdWx0fGRlZmVyfGVsc2V8ZmFsbHRocm91Z2h8Zm9yfGZ1bmN8Z28oPzp0byk/fGlmfGltcG9ydHxpbnRlcmZhY2V8bWFwfHBhY2thZ2V8cmFuZ2V8cmV0dXJufHNlbGVjdHxzdHJ1Y3R8c3dpdGNofHR5cGV8dmFyKVxcYi8sYm9vbGVhbjovXFxiKD86X3xpb3RhfG5pbHx0cnVlfGZhbHNlKVxcYi8sbnVtYmVyOi8oPzpcXGIweFthLWZcXGRdK3woPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZVstK10/XFxkKyk/KWk/L2ksb3BlcmF0b3I6L1sqXFwvJV4hPV09P3xcXCtbPStdP3wtWz0tXT98XFx8Wz18XT98Jig/Oj18JnxcXF49Pyk/fD4oPzo+PT98PSk/fDwoPzo8PT98PXwtKT98Oj18XFwuXFwuXFwuLyxidWlsdGluOi9cXGIoPzpib29sfGJ5dGV8Y29tcGxleCg/OjY0fDEyOCl8ZXJyb3J8ZmxvYXQoPzozMnw2NCl8cnVuZXxzdHJpbmd8dT9pbnQoPzo4fDE2fDMyfDY0KT98dWludHB0cnxhcHBlbmR8Y2FwfGNsb3NlfGNvbXBsZXh8Y29weXxkZWxldGV8aW1hZ3xsZW58bWFrZXxuZXd8cGFuaWN8cHJpbnQoPzpsbik/fHJlYWx8cmVjb3ZlcilcXGIvfSksZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5nb1tcImNsYXNzLW5hbWVcIl0sZnVuY3Rpb24oZSl7dmFyIHQ9L1xcL1xcKltcXHNcXFNdKj9cXCpcXC98XFwvXFwvLip8Iyg/IVxcWykuKi8sbj1be3BhdHRlcm46L1xcYig/OmZhbHNlfHRydWUpXFxiL2ksYWxpYXM6XCJib29sZWFuXCJ9LHtwYXR0ZXJuOi8oOjpcXHMqKVxcYlthLXpfXVxcdypcXGIoPyFcXHMqXFwoKS9pLGdyZWVkeTohMCxsb29rYmVoaW5kOiEwfSx7cGF0dGVybjovKFxcYig/OmNhc2V8Y29uc3QpXFxzKylcXGJbYS16X11cXHcqKD89XFxzKls7PV0pL2ksZ3JlZWR5OiEwLGxvb2tiZWhpbmQ6ITB9LC9cXGIoPzpudWxsKVxcYi9pLC9cXGJbQS1aX11bQS1aMC05X10qXFxiKD8hXFxzKlxcKCkvXSxyPS9cXGIwYlswMV0rKD86X1swMV0rKSpcXGJ8XFxiMG9bMC03XSsoPzpfWzAtN10rKSpcXGJ8XFxiMHhbXFxkYS1mXSsoPzpfW1xcZGEtZl0rKSpcXGJ8KD86XFxiXFxkKyg/Ol9cXGQrKSpcXC4/KD86XFxkKyg/Ol9cXGQrKSopP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspPy9pLG89Lzw/PT58XFw/XFw/PT98XFwuezN9fFxcPz8tPnxbIT1dPT89P3w6OnxcXCpcXCo9P3wtLXxcXCtcXCt8JiZ8XFx8XFx8fDw8fD4+fFs/fl18Wy9efCUqJjw+ListXT0/LyxpPS9be31cXFtcXF0oKSw6O10vO2UubGFuZ3VhZ2VzLnBocD17ZGVsaW1pdGVyOntwYXR0ZXJuOi9cXD8+JHxePFxcPyg/OnBocCg/PVxccyl8PSk/L2ksYWxpYXM6XCJpbXBvcnRhbnRcIn0sY29tbWVudDp0LHZhcmlhYmxlOi9cXCQrKD86XFx3K1xcYnwoPz1cXHspKS9pLHBhY2thZ2U6e3BhdHRlcm46LyhuYW1lc3BhY2VcXHMrfHVzZVxccysoPzpmdW5jdGlvblxccyspPykoPzpcXFxcP1xcYlthLXpfXVxcdyopK1xcYig/IVxcXFwpL2ksbG9va2JlaGluZDohMCxpbnNpZGU6e3B1bmN0dWF0aW9uOi9cXFxcL319LFwiY2xhc3MtbmFtZS1kZWZpbml0aW9uXCI6e3BhdHRlcm46LyhcXGIoPzpjbGFzc3xlbnVtfGludGVyZmFjZXx0cmFpdClcXHMrKVxcYlthLXpfXVxcdyooPyFcXFxcKVxcYi9pLGxvb2tiZWhpbmQ6ITAsYWxpYXM6XCJjbGFzcy1uYW1lXCJ9LFwiZnVuY3Rpb24tZGVmaW5pdGlvblwiOntwYXR0ZXJuOi8oXFxiZnVuY3Rpb25cXHMrKVthLXpfXVxcdyooPz1cXHMqXFwoKS9pLGxvb2tiZWhpbmQ6ITAsYWxpYXM6XCJmdW5jdGlvblwifSxrZXl3b3JkOlt7cGF0dGVybjovKFxcKFxccyopXFxiKD86Ym9vbHxib29sZWFufGludHxpbnRlZ2VyfGZsb2F0fHN0cmluZ3xvYmplY3R8YXJyYXkpXFxiKD89XFxzKlxcKSkvaSxhbGlhczpcInR5cGUtY2FzdGluZ1wiLGdyZWVkeTohMCxsb29rYmVoaW5kOiEwfSx7cGF0dGVybjovKFsoLD9dXFxzKilcXGIoPzpib29sfGludHxmbG9hdHxzdHJpbmd8b2JqZWN0fGFycmF5KD8hXFxzKlxcKCl8bWl4ZWR8c2VsZnxzdGF0aWN8Y2FsbGFibGV8aXRlcmFibGV8KD86bnVsbHxmYWxzZSkoPz1cXHMqXFx8KSlcXGIoPz1cXHMqXFwkKS9pLGFsaWFzOlwidHlwZS1oaW50XCIsZ3JlZWR5OiEwLGxvb2tiZWhpbmQ6ITB9LHtwYXR0ZXJuOi8oWygsP11cXHMqW1xcd3xdXFx8XFxzKikoPzpudWxsfGZhbHNlKVxcYig/PVxccypcXCQpL2ksYWxpYXM6XCJ0eXBlLWhpbnRcIixncmVlZHk6ITAsbG9va2JlaGluZDohMH0se3BhdHRlcm46LyhcXClcXHMqOlxccyooPzpcXD9cXHMqKT8pXFxiKD86Ym9vbHxpbnR8ZmxvYXR8c3RyaW5nfG9iamVjdHx2b2lkfGFycmF5KD8hXFxzKlxcKCl8bWl4ZWR8c2VsZnxzdGF0aWN8Y2FsbGFibGV8aXRlcmFibGV8KD86bnVsbHxmYWxzZSkoPz1cXHMqXFx8KSlcXGIvaSxhbGlhczpcInJldHVybi10eXBlXCIsZ3JlZWR5OiEwLGxvb2tiZWhpbmQ6ITB9LHtwYXR0ZXJuOi8oXFwpXFxzKjpcXHMqKD86XFw/XFxzKik/W1xcd3xdXFx8XFxzKikoPzpudWxsfGZhbHNlKVxcYi9pLGFsaWFzOlwicmV0dXJuLXR5cGVcIixncmVlZHk6ITAsbG9va2JlaGluZDohMH0se3BhdHRlcm46L1xcYig/OmJvb2x8aW50fGZsb2F0fHN0cmluZ3xvYmplY3R8dm9pZHxhcnJheSg/IVxccypcXCgpfG1peGVkfGl0ZXJhYmxlfCg/Om51bGx8ZmFsc2UpKD89XFxzKlxcfCkpXFxiL2ksYWxpYXM6XCJ0eXBlLWRlY2xhcmF0aW9uXCIsZ3JlZWR5OiEwfSx7cGF0dGVybjovKFxcfFxccyopKD86bnVsbHxmYWxzZSlcXGIvaSxhbGlhczpcInR5cGUtZGVjbGFyYXRpb25cIixncmVlZHk6ITAsbG9va2JlaGluZDohMH0se3BhdHRlcm46L1xcYig/OnBhcmVudHxzZWxmfHN0YXRpYykoPz1cXHMqOjopL2ksYWxpYXM6XCJzdGF0aWMtY29udGV4dFwiLGdyZWVkeTohMH0se3BhdHRlcm46LyhcXGJ5aWVsZFxccyspZnJvbVxcYi9pLGxvb2tiZWhpbmQ6ITB9LC9cXGJjbGFzc1xcYi9pLHtwYXR0ZXJuOi8oKD86XnxbXlxccz46XXwoPzpefFteLV0pPnwoPzpefFteOl0pOilcXHMqKVxcYig/Ol9faGFsdF9jb21waWxlcnxhYnN0cmFjdHxhbmR8YXJyYXl8YXN8YnJlYWt8Y2FsbGFibGV8Y2FzZXxjYXRjaHxjbG9uZXxjb25zdHxjb250aW51ZXxkZWNsYXJlfGRlZmF1bHR8ZGllfGRvfGVjaG98ZWxzZXxlbHNlaWZ8ZW1wdHl8ZW5kZGVjbGFyZXxlbmRmb3J8ZW5kZm9yZWFjaHxlbmRpZnxlbmRzd2l0Y2h8ZW5kd2hpbGV8ZW51bXxldmFsfGV4aXR8ZXh0ZW5kc3xmaW5hbHxmaW5hbGx5fGZufGZvcnxmb3JlYWNofGZ1bmN0aW9ufGdsb2JhbHxnb3RvfGlmfGltcGxlbWVudHN8aW5jbHVkZXxpbmNsdWRlX29uY2V8aW5zdGFuY2VvZnxpbnN0ZWFkb2Z8aW50ZXJmYWNlfGlzc2V0fGxpc3R8bmFtZXNwYWNlfG1hdGNofG5ld3xvcnxwYXJlbnR8cHJpbnR8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJlcXVpcmV8cmVxdWlyZV9vbmNlfHJldHVybnxzZWxmfHN0YXRpY3xzd2l0Y2h8dGhyb3d8dHJhaXR8dHJ5fHVuc2V0fHVzZXx2YXJ8d2hpbGV8eG9yfHlpZWxkKVxcYi9pLGxvb2tiZWhpbmQ6ITB9XSxcImFyZ3VtZW50LW5hbWVcIjp7cGF0dGVybjovKFsoLF1cXHMrKVxcYlthLXpfXVxcdyooPz1cXHMqOig/ITopKS9pLGxvb2tiZWhpbmQ6ITB9LFwiY2xhc3MtbmFtZVwiOlt7cGF0dGVybjovKFxcYig/OmV4dGVuZHN8aW1wbGVtZW50c3xpbnN0YW5jZW9mfG5ldyg/IVxccytzZWxmfFxccytzdGF0aWMpKVxccyt8XFxiY2F0Y2hcXHMqXFwoKVxcYlthLXpfXVxcdyooPyFcXFxcKVxcYi9pLGdyZWVkeTohMCxsb29rYmVoaW5kOiEwfSx7cGF0dGVybjovKFxcfFxccyopXFxiW2Etel9dXFx3Kig/IVxcXFwpXFxiL2ksZ3JlZWR5OiEwLGxvb2tiZWhpbmQ6ITB9LHtwYXR0ZXJuOi9cXGJbYS16X11cXHcqKD8hXFxcXClcXGIoPz1cXHMqXFx8KS9pLGdyZWVkeTohMH0se3BhdHRlcm46LyhcXHxcXHMqKSg/OlxcXFw/XFxiW2Etel9dXFx3KikrXFxiL2ksYWxpYXM6XCJjbGFzcy1uYW1lLWZ1bGx5LXF1YWxpZmllZFwiLGdyZWVkeTohMCxsb29rYmVoaW5kOiEwLGluc2lkZTp7cHVuY3R1YXRpb246L1xcXFwvfX0se3BhdHRlcm46Lyg/OlxcXFw/XFxiW2Etel9dXFx3KikrXFxiKD89XFxzKlxcfCkvaSxhbGlhczpcImNsYXNzLW5hbWUtZnVsbHktcXVhbGlmaWVkXCIsZ3JlZWR5OiEwLGluc2lkZTp7cHVuY3R1YXRpb246L1xcXFwvfX0se3BhdHRlcm46LyhcXGIoPzpleHRlbmRzfGltcGxlbWVudHN8aW5zdGFuY2VvZnxuZXcoPyFcXHMrc2VsZlxcYnxcXHMrc3RhdGljXFxiKSlcXHMrfFxcYmNhdGNoXFxzKlxcKCkoPzpcXFxcP1xcYlthLXpfXVxcdyopK1xcYig/IVxcXFwpL2ksYWxpYXM6XCJjbGFzcy1uYW1lLWZ1bGx5LXF1YWxpZmllZFwiLGdyZWVkeTohMCxsb29rYmVoaW5kOiEwLGluc2lkZTp7cHVuY3R1YXRpb246L1xcXFwvfX0se3BhdHRlcm46L1xcYlthLXpfXVxcdyooPz1cXHMqXFwkKS9pLGFsaWFzOlwidHlwZS1kZWNsYXJhdGlvblwiLGdyZWVkeTohMH0se3BhdHRlcm46Lyg/OlxcXFw/XFxiW2Etel9dXFx3KikrKD89XFxzKlxcJCkvaSxhbGlhczpbXCJjbGFzcy1uYW1lLWZ1bGx5LXF1YWxpZmllZFwiLFwidHlwZS1kZWNsYXJhdGlvblwiXSxncmVlZHk6ITAsaW5zaWRlOntwdW5jdHVhdGlvbjovXFxcXC99fSx7cGF0dGVybjovXFxiW2Etel9dXFx3Kig/PVxccyo6OikvaSxhbGlhczpcInN0YXRpYy1jb250ZXh0XCIsZ3JlZWR5OiEwfSx7cGF0dGVybjovKD86XFxcXD9cXGJbYS16X11cXHcqKSsoPz1cXHMqOjopL2ksYWxpYXM6W1wiY2xhc3MtbmFtZS1mdWxseS1xdWFsaWZpZWRcIixcInN0YXRpYy1jb250ZXh0XCJdLGdyZWVkeTohMCxpbnNpZGU6e3B1bmN0dWF0aW9uOi9cXFxcL319LHtwYXR0ZXJuOi8oWygsP11cXHMqKVthLXpfXVxcdyooPz1cXHMqXFwkKS9pLGFsaWFzOlwidHlwZS1oaW50XCIsZ3JlZWR5OiEwLGxvb2tiZWhpbmQ6ITB9LHtwYXR0ZXJuOi8oWygsP11cXHMqKSg/OlxcXFw/XFxiW2Etel9dXFx3KikrKD89XFxzKlxcJCkvaSxhbGlhczpbXCJjbGFzcy1uYW1lLWZ1bGx5LXF1YWxpZmllZFwiLFwidHlwZS1oaW50XCJdLGdyZWVkeTohMCxsb29rYmVoaW5kOiEwLGluc2lkZTp7cHVuY3R1YXRpb246L1xcXFwvfX0se3BhdHRlcm46LyhcXClcXHMqOlxccyooPzpcXD9cXHMqKT8pXFxiW2Etel9dXFx3Kig/IVxcXFwpXFxiL2ksYWxpYXM6XCJyZXR1cm4tdHlwZVwiLGdyZWVkeTohMCxsb29rYmVoaW5kOiEwfSx7cGF0dGVybjovKFxcKVxccyo6XFxzKig/OlxcP1xccyopPykoPzpcXFxcP1xcYlthLXpfXVxcdyopK1xcYig/IVxcXFwpL2ksYWxpYXM6W1wiY2xhc3MtbmFtZS1mdWxseS1xdWFsaWZpZWRcIixcInJldHVybi10eXBlXCJdLGdyZWVkeTohMCxsb29rYmVoaW5kOiEwLGluc2lkZTp7cHVuY3R1YXRpb246L1xcXFwvfX1dLGNvbnN0YW50Om4sZnVuY3Rpb246e3BhdHRlcm46LyhefFteXFxcXFxcd10pXFxcXD9bYS16X10oPzpbXFx3XFxcXF0qXFx3KT8oPz1cXHMqXFwoKS9pLGxvb2tiZWhpbmQ6ITAsaW5zaWRlOntwdW5jdHVhdGlvbjovXFxcXC99fSxwcm9wZXJ0eTp7cGF0dGVybjovKC0+XFxzKilcXHcrLyxsb29rYmVoaW5kOiEwfSxudW1iZXI6cixvcGVyYXRvcjpvLHB1bmN0dWF0aW9uOml9O3ZhciBhPXtwYXR0ZXJuOi9cXHtcXCQoPzpcXHsoPzpcXHtbXnt9XStcXH18W157fV0rKVxcfXxbXnt9XSkrXFx9fChefFteXFxcXHtdKVxcJCsoPzpcXHcrKD86XFxbW15cXHJcXG5cXFtcXF1dK1xcXXwtPlxcdyspPykvLGxvb2tiZWhpbmQ6ITAsaW5zaWRlOmUubGFuZ3VhZ2VzLnBocH0sdT1be3BhdHRlcm46Lzw8PCcoW14nXSspJ1tcXHJcXG5dKD86LipbXFxyXFxuXSkqP1xcMTsvLGFsaWFzOlwibm93ZG9jLXN0cmluZ1wiLGdyZWVkeTohMCxpbnNpZGU6e2RlbGltaXRlcjp7cGF0dGVybjovXjw8PCdbXiddKyd8W2Etel9dXFx3KjskL2ksYWxpYXM6XCJzeW1ib2xcIixpbnNpZGU6e3B1bmN0dWF0aW9uOi9ePDw8Jz98Wyc7XSQvfX19fSx7cGF0dGVybjovPDw8KD86XCIoW15cIl0rKVwiW1xcclxcbl0oPzouKltcXHJcXG5dKSo/XFwxO3woW2Etel9dXFx3KilbXFxyXFxuXSg/Oi4qW1xcclxcbl0pKj9cXDI7KS9pLGFsaWFzOlwiaGVyZWRvYy1zdHJpbmdcIixncmVlZHk6ITAsaW5zaWRlOntkZWxpbWl0ZXI6e3BhdHRlcm46L148PDwoPzpcIlteXCJdK1wifFthLXpfXVxcdyopfFthLXpfXVxcdyo7JC9pLGFsaWFzOlwic3ltYm9sXCIsaW5zaWRlOntwdW5jdHVhdGlvbjovXjw8PFwiP3xbXCI7XSQvfX0saW50ZXJwb2xhdGlvbjphfX0se3BhdHRlcm46L2AoPzpcXFxcW1xcc1xcU118W15cXFxcYF0pKmAvLGFsaWFzOlwiYmFja3RpY2stcXVvdGVkLXN0cmluZ1wiLGdyZWVkeTohMH0se3BhdHRlcm46LycoPzpcXFxcW1xcc1xcU118W15cXFxcJ10pKicvLGFsaWFzOlwic2luZ2xlLXF1b3RlZC1zdHJpbmdcIixncmVlZHk6ITB9LHtwYXR0ZXJuOi9cIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pKlwiLyxhbGlhczpcImRvdWJsZS1xdW90ZWQtc3RyaW5nXCIsZ3JlZWR5OiEwLGluc2lkZTp7aW50ZXJwb2xhdGlvbjphfX1dO2UubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShcInBocFwiLFwidmFyaWFibGVcIix7c3RyaW5nOnUsYXR0cmlidXRlOntwYXR0ZXJuOi8jXFxbKD86W15cIidcXC8jXXxcXC8oPyFbKi9dKXxcXC9cXC8uKiR8Iyg/IVxcWykuKiR8XFwvXFwqKD86W14qXXxcXCooPyFcXC8pKSpcXCpcXC98XCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcInwnKD86XFxcXFtcXHNcXFNdfFteXFxcXCddKSonKStcXF0oPz1cXHMqW2EteiQjXSkvaW0sZ3JlZWR5OiEwLGluc2lkZTp7XCJhdHRyaWJ1dGUtY29udGVudFwiOntwYXR0ZXJuOi9eKCNcXFspW1xcc1xcU10rKD89XFxdJCkvLGxvb2tiZWhpbmQ6ITAsaW5zaWRlOntjb21tZW50OnQsc3RyaW5nOnUsXCJhdHRyaWJ1dGUtY2xhc3MtbmFtZVwiOlt7cGF0dGVybjovKFteOl18XilcXGJbYS16X11cXHcqKD8hXFxcXClcXGIvaSxhbGlhczpcImNsYXNzLW5hbWVcIixncmVlZHk6ITAsbG9va2JlaGluZDohMH0se3BhdHRlcm46LyhbXjpdfF4pKD86XFxcXD9cXGJbYS16X11cXHcqKSsvaSxhbGlhczpbXCJjbGFzcy1uYW1lXCIsXCJjbGFzcy1uYW1lLWZ1bGx5LXF1YWxpZmllZFwiXSxncmVlZHk6ITAsbG9va2JlaGluZDohMCxpbnNpZGU6e3B1bmN0dWF0aW9uOi9cXFxcL319XSxjb25zdGFudDpuLG51bWJlcjpyLG9wZXJhdG9yOm8scHVuY3R1YXRpb246aX19LGRlbGltaXRlcjp7cGF0dGVybjovXiNcXFt8XFxdJC8sYWxpYXM6XCJwdW5jdHVhdGlvblwifX19fSksZS5ob29rcy5hZGQoXCJiZWZvcmUtdG9rZW5pemVcIiwoZnVuY3Rpb24odCl7LzxcXD8vLnRlc3QodC5jb2RlKSYmZS5sYW5ndWFnZXNbXCJtYXJrdXAtdGVtcGxhdGluZ1wiXS5idWlsZFBsYWNlaG9sZGVycyh0LFwicGhwXCIsLzxcXD8oPzpbXlwiJy8jXXxcXC8oPyFbKi9dKXwoXCJ8JykoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMXwoPzpcXC9cXC98Iyg/IVxcWykpKD86W14/XFxuXFxyXXxcXD8oPyE+KSkqKD89JHxcXD8+fFtcXHJcXG5dKXwjXFxbfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSkqKD86XFwqXFwvfCQpKSo/KD86XFw/PnwkKS9naSl9KSksZS5ob29rcy5hZGQoXCJhZnRlci10b2tlbml6ZVwiLChmdW5jdGlvbih0KXtlLmxhbmd1YWdlc1tcIm1hcmt1cC10ZW1wbGF0aW5nXCJdLnRva2VuaXplUGxhY2Vob2xkZXJzKHQsXCJwaHBcIil9KSl9KFByaXNtKSxQcmlzbS5sYW5ndWFnZXMuYz1QcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKFwiY2xpa2VcIix7Y29tbWVudDp7cGF0dGVybjovXFwvXFwvKD86W15cXHJcXG5cXFxcXXxcXFxcKD86XFxyXFxuP3xcXG58KD8hW1xcclxcbl0pKSkqfFxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLGdyZWVkeTohMH0sXCJjbGFzcy1uYW1lXCI6e3BhdHRlcm46LyhcXGIoPzplbnVtfHN0cnVjdClcXHMrKD86X19hdHRyaWJ1dGVfX1xccypcXChcXChbXFxzXFxTXSo/XFwpXFwpXFxzKik/KVxcdyt8XFxiW2Etel1cXHcqX3RcXGIvLGxvb2tiZWhpbmQ6ITB9LGtleXdvcmQ6L1xcYig/Ol9fYXR0cmlidXRlX198X0FsaWduYXN8X0FsaWdub2Z8X0F0b21pY3xfQm9vbHxfQ29tcGxleHxfR2VuZXJpY3xfSW1hZ2luYXJ5fF9Ob3JldHVybnxfU3RhdGljX2Fzc2VydHxfVGhyZWFkX2xvY2FsfGFzbXx0eXBlb2Z8aW5saW5lfGF1dG98YnJlYWt8Y2FzZXxjaGFyfGNvbnN0fGNvbnRpbnVlfGRlZmF1bHR8ZG98ZG91YmxlfGVsc2V8ZW51bXxleHRlcm58ZmxvYXR8Zm9yfGdvdG98aWZ8aW50fGxvbmd8cmVnaXN0ZXJ8cmV0dXJufHNob3J0fHNpZ25lZHxzaXplb2Z8c3RhdGljfHN0cnVjdHxzd2l0Y2h8dHlwZWRlZnx1bmlvbnx1bnNpZ25lZHx2b2lkfHZvbGF0aWxlfHdoaWxlKVxcYi8sZnVuY3Rpb246L1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLG51bWJlcjovKD86XFxiMHgoPzpbXFxkYS1mXSsoPzpcXC5bXFxkYS1mXSopP3xcXC5bXFxkYS1mXSspKD86cFsrLV0/XFxkKyk/fCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8pW2Z1bF17MCw0fS9pLG9wZXJhdG9yOi8+Pj0/fDw8PT98LT58KFstKyZ8Ol0pXFwxfFs/On5dfFstKyovJSZ8XiE9PD5dPT8vfSksUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShcImNcIixcInN0cmluZ1wiLHttYWNybzp7cGF0dGVybjovKF5bXFx0IF0qKSNcXHMqW2Etel0oPzpbXlxcclxcblxcXFwvXXxcXC8oPyFcXCopfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSkqXFwqXFwvfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pKSovaW0sbG9va2JlaGluZDohMCxncmVlZHk6ITAsYWxpYXM6XCJwcm9wZXJ0eVwiLGluc2lkZTp7c3RyaW5nOlt7cGF0dGVybjovXigjXFxzKmluY2x1ZGVcXHMqKTxbXj5dKz4vLGxvb2tiZWhpbmQ6ITB9LFByaXNtLmxhbmd1YWdlcy5jLnN0cmluZ10sY29tbWVudDpQcmlzbS5sYW5ndWFnZXMuYy5jb21tZW50LFwibWFjcm8tbmFtZVwiOlt7cGF0dGVybjovKF4jXFxzKmRlZmluZVxccyspXFx3K1xcYig/IVxcKCkvaSxsb29rYmVoaW5kOiEwfSx7cGF0dGVybjovKF4jXFxzKmRlZmluZVxccyspXFx3K1xcYig/PVxcKCkvaSxsb29rYmVoaW5kOiEwLGFsaWFzOlwiZnVuY3Rpb25cIn1dLGRpcmVjdGl2ZTp7cGF0dGVybjovXigjXFxzKilbYS16XSsvLGxvb2tiZWhpbmQ6ITAsYWxpYXM6XCJrZXl3b3JkXCJ9LFwiZGlyZWN0aXZlLWhhc2hcIjovXiMvLHB1bmN0dWF0aW9uOi8jI3xcXFxcKD89W1xcclxcbl0pLyxleHByZXNzaW9uOntwYXR0ZXJuOi9cXFNbXFxzXFxTXSovLGluc2lkZTpQcmlzbS5sYW5ndWFnZXMuY319fSxjb25zdGFudDovXFxiKD86X19GSUxFX198X19MSU5FX198X19EQVRFX198X19USU1FX198X19USU1FU1RBTVBfX3xfX2Z1bmNfX3xFT0Z8TlVMTHxTRUVLX0NVUnxTRUVLX0VORHxTRUVLX1NFVHxzdGRpbnxzdGRvdXR8c3RkZXJyKVxcYi99KSxkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLmMuYm9vbGVhbixQcmlzbS5sYW5ndWFnZXMucHl0aG9uPXtjb21tZW50OntwYXR0ZXJuOi8oXnxbXlxcXFxdKSMuKi8sbG9va2JlaGluZDohMH0sXCJzdHJpbmctaW50ZXJwb2xhdGlvblwiOntwYXR0ZXJuOi8oPzpmfHJmfGZyKSg/OihcIlwiXCJ8JycnKVtcXHNcXFNdKj9cXDF8KFwifCcpKD86XFxcXC58KD8hXFwyKVteXFxcXFxcclxcbl0pKlxcMikvaSxncmVlZHk6ITAsaW5zaWRlOntpbnRlcnBvbGF0aW9uOntwYXR0ZXJuOi8oKD86XnxbXntdKSg/Olxce1xceykqKVxceyg/IVxceykoPzpbXnt9XXxcXHsoPyFcXHspKD86W157fV18XFx7KD8hXFx7KSg/Oltee31dKStcXH0pK1xcfSkrXFx9Lyxsb29rYmVoaW5kOiEwLGluc2lkZTp7XCJmb3JtYXQtc3BlY1wiOntwYXR0ZXJuOi8oOilbXjooKXt9XSsoPz1cXH0kKS8sbG9va2JlaGluZDohMH0sXCJjb252ZXJzaW9uLW9wdGlvblwiOntwYXR0ZXJuOi8hW3NyYV0oPz1bOn1dJCkvLGFsaWFzOlwicHVuY3R1YXRpb25cIn0scmVzdDpudWxsfX0sc3RyaW5nOi9bXFxzXFxTXSsvfX0sXCJ0cmlwbGUtcXVvdGVkLXN0cmluZ1wiOntwYXR0ZXJuOi8oPzpbcnViXXxyYnxicik/KFwiXCJcInwnJycpW1xcc1xcU10qP1xcMS9pLGdyZWVkeTohMCxhbGlhczpcInN0cmluZ1wifSxzdHJpbmc6e3BhdHRlcm46Lyg/OltydWJdfHJifGJyKT8oXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxL2ksZ3JlZWR5OiEwfSxmdW5jdGlvbjp7cGF0dGVybjovKCg/Ol58XFxzKWRlZlsgXFx0XSspW2EtekEtWl9dXFx3Kig/PVxccypcXCgpL2csbG9va2JlaGluZDohMH0sXCJjbGFzcy1uYW1lXCI6e3BhdHRlcm46LyhcXGJjbGFzc1xccyspXFx3Ky9pLGxvb2tiZWhpbmQ6ITB9LGRlY29yYXRvcjp7cGF0dGVybjovKF5bXFx0IF0qKUBcXHcrKD86XFwuXFx3KykqL2ltLGxvb2tiZWhpbmQ6ITAsYWxpYXM6W1wiYW5ub3RhdGlvblwiLFwicHVuY3R1YXRpb25cIl0saW5zaWRlOntwdW5jdHVhdGlvbjovXFwuL319LGtleXdvcmQ6L1xcYig/OmFuZHxhc3xhc3NlcnR8YXN5bmN8YXdhaXR8YnJlYWt8Y2xhc3N8Y29udGludWV8ZGVmfGRlbHxlbGlmfGVsc2V8ZXhjZXB0fGV4ZWN8ZmluYWxseXxmb3J8ZnJvbXxnbG9iYWx8aWZ8aW1wb3J0fGlufGlzfGxhbWJkYXxub25sb2NhbHxub3R8b3J8cGFzc3xwcmludHxyYWlzZXxyZXR1cm58dHJ5fHdoaWxlfHdpdGh8eWllbGQpXFxiLyxidWlsdGluOi9cXGIoPzpfX2ltcG9ydF9ffGFic3xhbGx8YW55fGFwcGx5fGFzY2lpfGJhc2VzdHJpbmd8YmlufGJvb2x8YnVmZmVyfGJ5dGVhcnJheXxieXRlc3xjYWxsYWJsZXxjaHJ8Y2xhc3NtZXRob2R8Y21wfGNvZXJjZXxjb21waWxlfGNvbXBsZXh8ZGVsYXR0cnxkaWN0fGRpcnxkaXZtb2R8ZW51bWVyYXRlfGV2YWx8ZXhlY2ZpbGV8ZmlsZXxmaWx0ZXJ8ZmxvYXR8Zm9ybWF0fGZyb3plbnNldHxnZXRhdHRyfGdsb2JhbHN8aGFzYXR0cnxoYXNofGhlbHB8aGV4fGlkfGlucHV0fGludHxpbnRlcm58aXNpbnN0YW5jZXxpc3N1YmNsYXNzfGl0ZXJ8bGVufGxpc3R8bG9jYWxzfGxvbmd8bWFwfG1heHxtZW1vcnl2aWV3fG1pbnxuZXh0fG9iamVjdHxvY3R8b3BlbnxvcmR8cG93fHByb3BlcnR5fHJhbmdlfHJhd19pbnB1dHxyZWR1Y2V8cmVsb2FkfHJlcHJ8cmV2ZXJzZWR8cm91bmR8c2V0fHNldGF0dHJ8c2xpY2V8c29ydGVkfHN0YXRpY21ldGhvZHxzdHJ8c3VtfHN1cGVyfHR1cGxlfHR5cGV8dW5pY2hyfHVuaWNvZGV8dmFyc3x4cmFuZ2V8emlwKVxcYi8sYm9vbGVhbjovXFxiKD86VHJ1ZXxGYWxzZXxOb25lKVxcYi8sbnVtYmVyOi9cXGIwKD86Yig/Ol8/WzAxXSkrfG8oPzpfP1swLTddKSt8eCg/Ol8/W2EtZjAtOV0pKylcXGJ8KD86XFxiXFxkKyg/Ol9cXGQrKSooPzpcXC4oPzpcXGQrKD86X1xcZCspKik/KT98XFxCXFwuXFxkKyg/Ol9cXGQrKSopKD86ZVsrLV0/XFxkKyg/Ol9cXGQrKSopP2o/XFxiL2ksb3BlcmF0b3I6L1stKyU9XT0/fCE9fFxcKlxcKj89P3xcXC9cXC8/PT98PFs8PT5dP3w+Wz0+XT98WyZ8Xn5dLyxwdW5jdHVhdGlvbjovW3t9W1xcXTsoKSwuOl0vfSxQcmlzbS5sYW5ndWFnZXMucHl0aG9uW1wic3RyaW5nLWludGVycG9sYXRpb25cIl0uaW5zaWRlLmludGVycG9sYXRpb24uaW5zaWRlLnJlc3Q9UHJpc20ubGFuZ3VhZ2VzLnB5dGhvbixQcmlzbS5sYW5ndWFnZXMucHk9UHJpc20ubGFuZ3VhZ2VzLnB5dGhvbixmdW5jdGlvbihlKXt2YXIgdD0vXFxiKD86YWJzdHJhY3R8YXNzZXJ0fGJvb2xlYW58YnJlYWt8Ynl0ZXxjYXNlfGNhdGNofGNoYXJ8Y2xhc3N8Y29uc3R8Y29udGludWV8ZGVmYXVsdHxkb3xkb3VibGV8ZWxzZXxlbnVtfGV4cG9ydHN8ZXh0ZW5kc3xmaW5hbHxmaW5hbGx5fGZsb2F0fGZvcnxnb3RvfGlmfGltcGxlbWVudHN8aW1wb3J0fGluc3RhbmNlb2Z8aW50fGludGVyZmFjZXxsb25nfG1vZHVsZXxuYXRpdmV8bmV3fG5vbi1zZWFsZWR8bnVsbHxvcGVufG9wZW5zfHBhY2thZ2V8cGVybWl0c3xwcml2YXRlfHByb3RlY3RlZHxwcm92aWRlc3xwdWJsaWN8cmVjb3JkfHJlcXVpcmVzfHJldHVybnxzZWFsZWR8c2hvcnR8c3RhdGljfHN0cmljdGZwfHN1cGVyfHN3aXRjaHxzeW5jaHJvbml6ZWR8dGhpc3x0aHJvd3x0aHJvd3N8dG98dHJhbnNpZW50fHRyYW5zaXRpdmV8dHJ5fHVzZXN8dmFyfHZvaWR8dm9sYXRpbGV8d2hpbGV8d2l0aHx5aWVsZClcXGIvLG49LyhefFteXFx3Ll0pKD86W2Etel1cXHcqXFxzKlxcLlxccyopKig/OltBLVpdXFx3KlxccypcXC5cXHMqKSovLnNvdXJjZSxyPXtwYXR0ZXJuOlJlZ0V4cChuKy9bQS1aXSg/OltcXGRfQS1aXSpbYS16XVxcdyopP1xcYi8uc291cmNlKSxsb29rYmVoaW5kOiEwLGluc2lkZTp7bmFtZXNwYWNlOntwYXR0ZXJuOi9eW2Etel1cXHcqKD86XFxzKlxcLlxccypbYS16XVxcdyopKig/OlxccypcXC4pPy8saW5zaWRlOntwdW5jdHVhdGlvbjovXFwuL319LHB1bmN0dWF0aW9uOi9cXC4vfX07ZS5sYW5ndWFnZXMuamF2YT1lLmxhbmd1YWdlcy5leHRlbmQoXCJjbGlrZVwiLHtcImNsYXNzLW5hbWVcIjpbcix7cGF0dGVybjpSZWdFeHAobisvW0EtWl1cXHcqKD89XFxzK1xcdytcXHMqWzssPSgpXSkvLnNvdXJjZSksbG9va2JlaGluZDohMCxpbnNpZGU6ci5pbnNpZGV9XSxrZXl3b3JkOnQsZnVuY3Rpb246W2UubGFuZ3VhZ2VzLmNsaWtlLmZ1bmN0aW9uLHtwYXR0ZXJuOi8oOjpcXHMqKVthLXpfXVxcdyovLGxvb2tiZWhpbmQ6ITB9XSxudW1iZXI6L1xcYjBiWzAxXVswMV9dKkw/XFxifFxcYjB4KD86XFwuW1xcZGEtZl9wKy1dK3xbXFxkYS1mX10rKD86XFwuW1xcZGEtZl9wKy1dKyk/KVxcYnwoPzpcXGJcXGRbXFxkX10qKD86XFwuW1xcZF9dKik/fFxcQlxcLlxcZFtcXGRfXSopKD86ZVsrLV0/XFxkW1xcZF9dKik/W2RmbF0/L2ksb3BlcmF0b3I6e3BhdHRlcm46LyhefFteLl0pKD86PDw9P3w+Pj4/PT98LT58LS18XFwrXFwrfCYmfFxcfFxcfHw6OnxbPzp+XXxbLSsqLyUmfF4hPTw+XT0/KS9tLGxvb2tiZWhpbmQ6ITB9fSksZS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKFwiamF2YVwiLFwic3RyaW5nXCIse1widHJpcGxlLXF1b3RlZC1zdHJpbmdcIjp7cGF0dGVybjovXCJcIlwiWyBcXHRdKltcXHJcXG5dKD86KD86XCJ8XCJcIik/KD86XFxcXC58W15cIlxcXFxdKSkqXCJcIlwiLyxncmVlZHk6ITAsYWxpYXM6XCJzdHJpbmdcIn19KSxlLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoXCJqYXZhXCIsXCJjbGFzcy1uYW1lXCIse2Fubm90YXRpb246e3BhdHRlcm46LyhefFteLl0pQFxcdysoPzpcXHMqXFwuXFxzKlxcdyspKi8sbG9va2JlaGluZDohMCxhbGlhczpcInB1bmN0dWF0aW9uXCJ9LGdlbmVyaWNzOntwYXR0ZXJuOi88KD86W1xcd1xccywuP118Jig/ISYpfDwoPzpbXFx3XFxzLC4/XXwmKD8hJil8PCg/OltcXHdcXHMsLj9dfCYoPyEmKXw8KD86W1xcd1xccywuP118Jig/ISYpKSo+KSo+KSo+KSo+LyxpbnNpZGU6e1wiY2xhc3MtbmFtZVwiOnIsa2V5d29yZDp0LHB1bmN0dWF0aW9uOi9bPD4oKSwuOl0vLG9wZXJhdG9yOi9bPyZ8XS99fSxuYW1lc3BhY2U6e3BhdHRlcm46UmVnRXhwKC8oXFxiKD86ZXhwb3J0c3xpbXBvcnQoPzpcXHMrc3RhdGljKT98bW9kdWxlfG9wZW58b3BlbnN8cGFja2FnZXxwcm92aWRlc3xyZXF1aXJlc3x0b3x0cmFuc2l0aXZlfHVzZXN8d2l0aClcXHMrKSg/ITxrZXl3b3JkPilbYS16XVxcdyooPzpcXC5bYS16XVxcdyopKlxcLj8vLnNvdXJjZS5yZXBsYWNlKC88a2V5d29yZD4vZywoZnVuY3Rpb24oKXtyZXR1cm4gdC5zb3VyY2V9KSkpLGxvb2tiZWhpbmQ6ITAsaW5zaWRlOntwdW5jdHVhdGlvbjovXFwuL319fSl9KFByaXNtKSxmdW5jdGlvbihlKXt2YXIgdD0vXFxiKD86YWxpZ25hc3xhbGlnbm9mfGFzbXxhdXRvfGJvb2x8YnJlYWt8Y2FzZXxjYXRjaHxjaGFyfGNoYXI4X3R8Y2hhcjE2X3R8Y2hhcjMyX3R8Y2xhc3N8Y29tcGx8Y29uY2VwdHxjb25zdHxjb25zdGV2YWx8Y29uc3RleHByfGNvbnN0aW5pdHxjb25zdF9jYXN0fGNvbnRpbnVlfGNvX2F3YWl0fGNvX3JldHVybnxjb195aWVsZHxkZWNsdHlwZXxkZWZhdWx0fGRlbGV0ZXxkb3xkb3VibGV8ZHluYW1pY19jYXN0fGVsc2V8ZW51bXxleHBsaWNpdHxleHBvcnR8ZXh0ZXJufGZpbmFsfGZsb2F0fGZvcnxmcmllbmR8Z290b3xpZnxpbXBvcnR8aW5saW5lfGludHxpbnQ4X3R8aW50MTZfdHxpbnQzMl90fGludDY0X3R8dWludDhfdHx1aW50MTZfdHx1aW50MzJfdHx1aW50NjRfdHxsb25nfG1vZHVsZXxtdXRhYmxlfG5hbWVzcGFjZXxuZXd8bm9leGNlcHR8bnVsbHB0cnxvcGVyYXRvcnxvdmVycmlkZXxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8cmVnaXN0ZXJ8cmVpbnRlcnByZXRfY2FzdHxyZXF1aXJlc3xyZXR1cm58c2hvcnR8c2lnbmVkfHNpemVvZnxzdGF0aWN8c3RhdGljX2Fzc2VydHxzdGF0aWNfY2FzdHxzdHJ1Y3R8c3dpdGNofHRlbXBsYXRlfHRoaXN8dGhyZWFkX2xvY2FsfHRocm93fHRyeXx0eXBlZGVmfHR5cGVpZHx0eXBlbmFtZXx1bmlvbnx1bnNpZ25lZHx1c2luZ3x2aXJ0dWFsfHZvaWR8dm9sYXRpbGV8d2NoYXJfdHx3aGlsZSlcXGIvLG49L1xcYig/ITxrZXl3b3JkPilcXHcrKD86XFxzKlxcLlxccypcXHcrKSpcXGIvLnNvdXJjZS5yZXBsYWNlKC88a2V5d29yZD4vZywoZnVuY3Rpb24oKXtyZXR1cm4gdC5zb3VyY2V9KSk7ZS5sYW5ndWFnZXMuY3BwPWUubGFuZ3VhZ2VzLmV4dGVuZChcImNcIix7XCJjbGFzcy1uYW1lXCI6W3twYXR0ZXJuOlJlZ0V4cCgvKFxcYig/OmNsYXNzfGNvbmNlcHR8ZW51bXxzdHJ1Y3R8dHlwZW5hbWUpXFxzKykoPyE8a2V5d29yZD4pXFx3Ky8uc291cmNlLnJlcGxhY2UoLzxrZXl3b3JkPi9nLChmdW5jdGlvbigpe3JldHVybiB0LnNvdXJjZX0pKSksbG9va2JlaGluZDohMH0sL1xcYltBLVpdXFx3Kig/PVxccyo6OlxccypcXHcrXFxzKlxcKCkvLC9cXGJbQS1aX11cXHcqKD89XFxzKjo6XFxzKn5cXHcrXFxzKlxcKCkvaSwvXFxiXFx3Kyg/PVxccyo8KD86W148Pl18PCg/OltePD5dfDxbXjw+XSo+KSo+KSo+XFxzKjo6XFxzKlxcdytcXHMqXFwoKS9dLGtleXdvcmQ6dCxudW1iZXI6e3BhdHRlcm46Lyg/OlxcYjBiWzAxJ10rfFxcYjB4KD86W1xcZGEtZiddKyg/OlxcLltcXGRhLWYnXSopP3xcXC5bXFxkYS1mJ10rKSg/OnBbKy1dP1tcXGQnXSspP3woPzpcXGJbXFxkJ10rKD86XFwuW1xcZCddKik/fFxcQlxcLltcXGQnXSspKD86ZVsrLV0/W1xcZCddKyk/KVtmdWxdezAsNH0vaSxncmVlZHk6ITB9LG9wZXJhdG9yOi8+Pj0/fDw8PT98LT58LS18XFwrXFwrfCYmfFxcfFxcfHxbPzp+XXw8PT58Wy0rKi8lJnxeIT08Pl09P3xcXGIoPzphbmR8YW5kX2VxfGJpdGFuZHxiaXRvcnxub3R8bm90X2VxfG9yfG9yX2VxfHhvcnx4b3JfZXEpXFxiLyxib29sZWFuOi9cXGIoPzp0cnVlfGZhbHNlKVxcYi99KSxlLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoXCJjcHBcIixcInN0cmluZ1wiLHttb2R1bGU6e3BhdHRlcm46UmVnRXhwKC8oXFxiKD86bW9kdWxlfGltcG9ydClcXHMrKS8uc291cmNlK1wiKD86XCIrL1wiKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W15cIlxcXFxcXHJcXG5dKSpcInw8W148Plxcclxcbl0qPi8uc291cmNlK1wifFwiKy88bW9kLW5hbWU+KD86XFxzKjpcXHMqPG1vZC1uYW1lPik/fDpcXHMqPG1vZC1uYW1lPi8uc291cmNlLnJlcGxhY2UoLzxtb2QtbmFtZT4vZywoZnVuY3Rpb24oKXtyZXR1cm4gbn0pKStcIilcIiksbG9va2JlaGluZDohMCxncmVlZHk6ITAsaW5zaWRlOntzdHJpbmc6L15bPFwiXVtcXHNcXFNdKy8sb3BlcmF0b3I6LzovLHB1bmN0dWF0aW9uOi9cXC4vfX0sXCJyYXctc3RyaW5nXCI6e3BhdHRlcm46L1JcIihbXigpXFxcXCBdezAsMTZ9KVxcKFtcXHNcXFNdKj9cXClcXDFcIi8sYWxpYXM6XCJzdHJpbmdcIixncmVlZHk6ITB9fSksZS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKFwiY3BwXCIsXCJrZXl3b3JkXCIse1wiZ2VuZXJpYy1mdW5jdGlvblwiOntwYXR0ZXJuOi9cXGIoPyFvcGVyYXRvclxcYilbYS16X11cXHcqXFxzKjwoPzpbXjw+XXw8W148Pl0qPikqPig/PVxccypcXCgpL2ksaW5zaWRlOntmdW5jdGlvbjovXlxcdysvLGdlbmVyaWM6e3BhdHRlcm46LzxbXFxzXFxTXSsvLGFsaWFzOlwiY2xhc3MtbmFtZVwiLGluc2lkZTplLmxhbmd1YWdlcy5jcHB9fX19KSxlLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoXCJjcHBcIixcIm9wZXJhdG9yXCIse1wiZG91YmxlLWNvbG9uXCI6e3BhdHRlcm46Lzo6LyxhbGlhczpcInB1bmN0dWF0aW9uXCJ9fSksZS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKFwiY3BwXCIsXCJjbGFzcy1uYW1lXCIse1wiYmFzZS1jbGF1c2VcIjp7cGF0dGVybjovKFxcYig/OmNsYXNzfHN0cnVjdClcXHMrXFx3K1xccyo6XFxzKilbXjt7fVwiJ1xcc10rKD86XFxzK1teO3t9XCInXFxzXSspKig/PVxccypbO3tdKS8sbG9va2JlaGluZDohMCxncmVlZHk6ITAsaW5zaWRlOmUubGFuZ3VhZ2VzLmV4dGVuZChcImNwcFwiLHt9KX19KSxlLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoXCJpbnNpZGVcIixcImRvdWJsZS1jb2xvblwiLHtcImNsYXNzLW5hbWVcIjovXFxiW2Etel9dXFx3KlxcYig/IVxccyo6OikvaX0sZS5sYW5ndWFnZXMuY3BwW1wiYmFzZS1jbGF1c2VcIl0pfShQcmlzbSksZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQpe3JldHVybiBlLnJlcGxhY2UoLzw8KFxcZCspPj4vZywoZnVuY3Rpb24oZSxuKXtyZXR1cm5cIig/OlwiK3RbK25dK1wiKVwifSkpfWZ1bmN0aW9uIG4oZSxuLHIpe3JldHVybiBSZWdFeHAodChlLG4pLHJ8fFwiXCIpfWZ1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQ7bisrKWU9ZS5yZXBsYWNlKC88PHNlbGY+Pi9nLChmdW5jdGlvbigpe3JldHVyblwiKD86XCIrZStcIilcIn0pKTtyZXR1cm4gZS5yZXBsYWNlKC88PHNlbGY+Pi9nLFwiW15cXFxcc1xcXFxTXVwiKX12YXIgbz1cImJvb2wgYnl0ZSBjaGFyIGRlY2ltYWwgZG91YmxlIGR5bmFtaWMgZmxvYXQgaW50IGxvbmcgb2JqZWN0IHNieXRlIHNob3J0IHN0cmluZyB1aW50IHVsb25nIHVzaG9ydCB2YXIgdm9pZFwiLGk9XCJjbGFzcyBlbnVtIGludGVyZmFjZSByZWNvcmQgc3RydWN0XCIsYT1cImFkZCBhbGlhcyBhbmQgYXNjZW5kaW5nIGFzeW5jIGF3YWl0IGJ5IGRlc2NlbmRpbmcgZnJvbSg/PVxcXFxzKig/OlxcXFx3fCQpKSBnZXQgZ2xvYmFsIGdyb3VwIGludG8gaW5pdCg/PVxcXFxzKjspIGpvaW4gbGV0IG5hbWVvZiBub3Qgbm90bnVsbCBvbiBvciBvcmRlcmJ5IHBhcnRpYWwgcmVtb3ZlIHNlbGVjdCBzZXQgdW5tYW5hZ2VkIHZhbHVlIHdoZW4gd2hlcmUgd2l0aCg/PVxcXFxzKnspXCIsdT1cImFic3RyYWN0IGFzIGJhc2UgYnJlYWsgY2FzZSBjYXRjaCBjaGVja2VkIGNvbnN0IGNvbnRpbnVlIGRlZmF1bHQgZGVsZWdhdGUgZG8gZWxzZSBldmVudCBleHBsaWNpdCBleHRlcm4gZmluYWxseSBmaXhlZCBmb3IgZm9yZWFjaCBnb3RvIGlmIGltcGxpY2l0IGluIGludGVybmFsIGlzIGxvY2sgbmFtZXNwYWNlIG5ldyBudWxsIG9wZXJhdG9yIG91dCBvdmVycmlkZSBwYXJhbXMgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHJlYWRvbmx5IHJlZiByZXR1cm4gc2VhbGVkIHNpemVvZiBzdGFja2FsbG9jIHN0YXRpYyBzd2l0Y2ggdGhpcyB0aHJvdyB0cnkgdHlwZW9mIHVuY2hlY2tlZCB1bnNhZmUgdXNpbmcgdmlydHVhbCB2b2xhdGlsZSB3aGlsZSB5aWVsZFwiO2Z1bmN0aW9uIHMoZSl7cmV0dXJuXCJcXFxcYig/OlwiK2UudHJpbSgpLnJlcGxhY2UoLyAvZyxcInxcIikrXCIpXFxcXGJcIn12YXIgbD1zKGkpLGM9UmVnRXhwKHMobytcIiBcIitpK1wiIFwiK2ErXCIgXCIrdSkpLGY9cyhpK1wiIFwiK2ErXCIgXCIrdSksZD1zKG8rXCIgXCIraStcIiBcIit1KSxwPXIoLzwoPzpbXjw+Oz0rXFwtKi8lJnxeXXw8PHNlbGY+PikqPi8uc291cmNlLDIpLGg9cigvXFwoKD86W14oKV18PDxzZWxmPj4pKlxcKS8uc291cmNlLDIpLGc9L0A/XFxiW0EtWmEtel9dXFx3KlxcYi8uc291cmNlLHY9dCgvPDwwPj4oPzpcXHMqPDwxPj4pPy8uc291cmNlLFtnLHBdKSx5PXQoLyg/ITw8MD4+KTw8MT4+KD86XFxzKlxcLlxccyo8PDE+PikqLy5zb3VyY2UsW2Ysdl0pLG09L1xcW1xccyooPzosXFxzKikqXFxdLy5zb3VyY2UsYj10KC88PDA+Pig/OlxccyooPzpcXD9cXHMqKT88PDE+PikqKD86XFxzKlxcPyk/Ly5zb3VyY2UsW3ksbV0pLHc9dCgvW14sKCk8PltcXF07PStcXC0qLyUmfF5dfDw8MD4+fDw8MT4+fDw8Mj4+Ly5zb3VyY2UsW3AsaCxtXSksRT10KC9cXCg8PDA+PisoPzosPDwwPj4rKStcXCkvLnNvdXJjZSxbd10pLEQ9dCgvKD86PDwwPj58PDwxPj4pKD86XFxzKig/OlxcP1xccyopPzw8Mj4+KSooPzpcXHMqXFw/KT8vLnNvdXJjZSxbRSx5LG1dKSxTPXtrZXl3b3JkOmMscHVuY3R1YXRpb246L1s8PigpPywuOltcXF1dL30seD0vJyg/OlteXFxyXFxuJ1xcXFxdfFxcXFwufFxcXFxbVXV4XVtcXGRhLWZBLUZdezEsOH0pJy8uc291cmNlLEM9L1wiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcIi8uc291cmNlLEE9L0BcIig/OlwiXCJ8XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCIoPyFcIikvLnNvdXJjZTtlLmxhbmd1YWdlcy5jc2hhcnA9ZS5sYW5ndWFnZXMuZXh0ZW5kKFwiY2xpa2VcIix7c3RyaW5nOlt7cGF0dGVybjpuKC8oXnxbXiRcXFxcXSk8PDA+Pi8uc291cmNlLFtBXSksbG9va2JlaGluZDohMCxncmVlZHk6ITB9LHtwYXR0ZXJuOm4oLyhefFteQCRcXFxcXSk8PDA+Pi8uc291cmNlLFtDXSksbG9va2JlaGluZDohMCxncmVlZHk6ITB9LHtwYXR0ZXJuOlJlZ0V4cCh4KSxncmVlZHk6ITAsYWxpYXM6XCJjaGFyYWN0ZXJcIn1dLFwiY2xhc3MtbmFtZVwiOlt7cGF0dGVybjpuKC8oXFxidXNpbmdcXHMrc3RhdGljXFxzKyk8PDA+Pig/PVxccyo7KS8uc291cmNlLFt5XSksbG9va2JlaGluZDohMCxpbnNpZGU6U30se3BhdHRlcm46bigvKFxcYnVzaW5nXFxzKzw8MD4+XFxzKj1cXHMqKTw8MT4+KD89XFxzKjspLy5zb3VyY2UsW2csRF0pLGxvb2tiZWhpbmQ6ITAsaW5zaWRlOlN9LHtwYXR0ZXJuOm4oLyhcXGJ1c2luZ1xccyspPDwwPj4oPz1cXHMqPSkvLnNvdXJjZSxbZ10pLGxvb2tiZWhpbmQ6ITB9LHtwYXR0ZXJuOm4oLyhcXGI8PDA+PlxccyspPDwxPj4vLnNvdXJjZSxbbCx2XSksbG9va2JlaGluZDohMCxpbnNpZGU6U30se3BhdHRlcm46bigvKFxcYmNhdGNoXFxzKlxcKFxccyopPDwwPj4vLnNvdXJjZSxbeV0pLGxvb2tiZWhpbmQ6ITAsaW5zaWRlOlN9LHtwYXR0ZXJuOm4oLyhcXGJ3aGVyZVxccyspPDwwPj4vLnNvdXJjZSxbZ10pLGxvb2tiZWhpbmQ6ITB9LHtwYXR0ZXJuOm4oLyhcXGIoPzppcyg/Olxccytub3QpP3xhcylcXHMrKTw8MD4+Ly5zb3VyY2UsW2JdKSxsb29rYmVoaW5kOiEwLGluc2lkZTpTfSx7cGF0dGVybjpuKC9cXGI8PDA+Pig/PVxccysoPyE8PDE+Pnx3aXRoXFxzKlxceyk8PDI+Pig/OlxccypbPSw7OnspXFxdXXxcXHMrKD86aW58d2hlbilcXGIpKS8uc291cmNlLFtELGQsZ10pLGluc2lkZTpTfV0sa2V5d29yZDpjLG51bWJlcjovKD86XFxiMCg/OnhbXFxkYS1mX10qW1xcZGEtZl18YlswMV9dKlswMV0pfCg/OlxcQlxcLlxcZCsoPzpfK1xcZCspKnxcXGJcXGQrKD86XytcXGQrKSooPzpcXC5cXGQrKD86XytcXGQrKSopPykoPzplWy0rXT9cXGQrKD86XytcXGQrKSopPykoPzp1bHxsdXxbZGZsbXVdKT9cXGIvaSxvcGVyYXRvcjovPj49P3w8PD0/fFstPV0+fChbLSsmfF0pXFwxfH58XFw/XFw/PT98Wy0rKi8lJnxeIT08Pl09Py8scHVuY3R1YXRpb246L1xcP1xcLj98Ojp8W3t9W1xcXTsoKSwuOl0vfSksZS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKFwiY3NoYXJwXCIsXCJudW1iZXJcIix7cmFuZ2U6e3BhdHRlcm46L1xcLlxcLi8sYWxpYXM6XCJvcGVyYXRvclwifX0pLGUubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShcImNzaGFycFwiLFwicHVuY3R1YXRpb25cIix7XCJuYW1lZC1wYXJhbWV0ZXJcIjp7cGF0dGVybjpuKC8oWygsXVxccyopPDwwPj4oPz1cXHMqOikvLnNvdXJjZSxbZ10pLGxvb2tiZWhpbmQ6ITAsYWxpYXM6XCJwdW5jdHVhdGlvblwifX0pLGUubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShcImNzaGFycFwiLFwiY2xhc3MtbmFtZVwiLHtuYW1lc3BhY2U6e3BhdHRlcm46bigvKFxcYig/Om5hbWVzcGFjZXx1c2luZylcXHMrKTw8MD4+KD86XFxzKlxcLlxccyo8PDA+PikqKD89XFxzKls7e10pLy5zb3VyY2UsW2ddKSxsb29rYmVoaW5kOiEwLGluc2lkZTp7cHVuY3R1YXRpb246L1xcLi99fSxcInR5cGUtZXhwcmVzc2lvblwiOntwYXR0ZXJuOm4oLyhcXGIoPzpkZWZhdWx0fHR5cGVvZnxzaXplb2YpXFxzKlxcKFxccyooPyFcXHMpKSg/OlteKClcXHNdfFxccyg/IVxccyl8PDwwPj4pKig/PVxccypcXCkpLy5zb3VyY2UsW2hdKSxsb29rYmVoaW5kOiEwLGFsaWFzOlwiY2xhc3MtbmFtZVwiLGluc2lkZTpTfSxcInJldHVybi10eXBlXCI6e3BhdHRlcm46bigvPDwwPj4oPz1cXHMrKD86PDwxPj5cXHMqKD86PT58Wyh7XXxcXC5cXHMqdGhpc1xccypcXFspfHRoaXNcXHMqXFxbKSkvLnNvdXJjZSxbRCx5XSksaW5zaWRlOlMsYWxpYXM6XCJjbGFzcy1uYW1lXCJ9LFwiY29uc3RydWN0b3ItaW52b2NhdGlvblwiOntwYXR0ZXJuOm4oLyhcXGJuZXdcXHMrKTw8MD4+KD89XFxzKltbKHtdKS8uc291cmNlLFtEXSksbG9va2JlaGluZDohMCxpbnNpZGU6UyxhbGlhczpcImNsYXNzLW5hbWVcIn0sXCJnZW5lcmljLW1ldGhvZFwiOntwYXR0ZXJuOm4oLzw8MD4+XFxzKjw8MT4+KD89XFxzKlxcKCkvLnNvdXJjZSxbZyxwXSksaW5zaWRlOntmdW5jdGlvbjpuKC9ePDwwPj4vLnNvdXJjZSxbZ10pLGdlbmVyaWM6e3BhdHRlcm46UmVnRXhwKHApLGFsaWFzOlwiY2xhc3MtbmFtZVwiLGluc2lkZTpTfX19LFwidHlwZS1saXN0XCI6e3BhdHRlcm46bigvXFxiKCg/Ojw8MD4+XFxzKzw8MT4+fHJlY29yZFxccys8PDE+Plxccyo8PDU+Pnx3aGVyZVxccys8PDI+PilcXHMqOlxccyopKD86PDwzPj58PDw0Pj58PDwxPj5cXHMqPDw1Pj58PDw2Pj4pKD86XFxzKixcXHMqKD86PDwzPj58PDw0Pj58PDw2Pj4pKSooPz1cXHMqKD86d2hlcmV8W3s7XXw9PnwkKSkvLnNvdXJjZSxbbCx2LGcsRCxjLnNvdXJjZSxoLC9cXGJuZXdcXHMqXFwoXFxzKlxcKS8uc291cmNlXSksbG9va2JlaGluZDohMCxpbnNpZGU6e1wicmVjb3JkLWFyZ3VtZW50c1wiOntwYXR0ZXJuOm4oLyheKD8hbmV3XFxzKlxcKCk8PDA+PlxccyopPDwxPj4vLnNvdXJjZSxbdixoXSksbG9va2JlaGluZDohMCxncmVlZHk6ITAsaW5zaWRlOmUubGFuZ3VhZ2VzLmNzaGFycH0sa2V5d29yZDpjLFwiY2xhc3MtbmFtZVwiOntwYXR0ZXJuOlJlZ0V4cChEKSxncmVlZHk6ITAsaW5zaWRlOlN9LHB1bmN0dWF0aW9uOi9bLCgpXS99fSxwcmVwcm9jZXNzb3I6e3BhdHRlcm46LyheW1xcdCBdKikjLiovbSxsb29rYmVoaW5kOiEwLGFsaWFzOlwicHJvcGVydHlcIixpbnNpZGU6e2RpcmVjdGl2ZTp7cGF0dGVybjovKCMpXFxiKD86ZGVmaW5lfGVsaWZ8ZWxzZXxlbmRpZnxlbmRyZWdpb258ZXJyb3J8aWZ8bGluZXxudWxsYWJsZXxwcmFnbWF8cmVnaW9ufHVuZGVmfHdhcm5pbmcpXFxiLyxsb29rYmVoaW5kOiEwLGFsaWFzOlwia2V5d29yZFwifX19fSk7dmFyIE89QytcInxcIit4LGs9dCgvXFwvKD8hWyovXSl8XFwvXFwvW15cXHJcXG5dKltcXHJcXG5dfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSkqXFwqXFwvfDw8MD4+Ly5zb3VyY2UsW09dKSxCPXIodCgvW15cIicvKCldfDw8MD4+fFxcKDw8c2VsZj4+KlxcKS8uc291cmNlLFtrXSksMiksRj0vXFxiKD86YXNzZW1ibHl8ZXZlbnR8ZmllbGR8bWV0aG9kfG1vZHVsZXxwYXJhbXxwcm9wZXJ0eXxyZXR1cm58dHlwZSlcXGIvLnNvdXJjZSxUPXQoLzw8MD4+KD86XFxzKlxcKDw8MT4+KlxcKSk/Ly5zb3VyY2UsW3ksQl0pO2UubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShcImNzaGFycFwiLFwiY2xhc3MtbmFtZVwiLHthdHRyaWJ1dGU6e3BhdHRlcm46bigvKCg/Ol58W15cXHNcXHc+KT9dKVxccypcXFtcXHMqKSg/Ojw8MD4+XFxzKjpcXHMqKT88PDE+Pig/OlxccyosXFxzKjw8MT4+KSooPz1cXHMqXFxdKS8uc291cmNlLFtGLFRdKSxsb29rYmVoaW5kOiEwLGdyZWVkeTohMCxpbnNpZGU6e3RhcmdldDp7cGF0dGVybjpuKC9ePDwwPj4oPz1cXHMqOikvLnNvdXJjZSxbRl0pLGFsaWFzOlwia2V5d29yZFwifSxcImF0dHJpYnV0ZS1hcmd1bWVudHNcIjp7cGF0dGVybjpuKC9cXCg8PDA+PipcXCkvLnNvdXJjZSxbQl0pLGluc2lkZTplLmxhbmd1YWdlcy5jc2hhcnB9LFwiY2xhc3MtbmFtZVwiOntwYXR0ZXJuOlJlZ0V4cCh5KSxpbnNpZGU6e3B1bmN0dWF0aW9uOi9cXC4vfX0scHVuY3R1YXRpb246L1s6LF0vfX19KTt2YXIgXz0vOltefVxcclxcbl0rLy5zb3VyY2UsUD1yKHQoL1teXCInLygpXXw8PDA+PnxcXCg8PHNlbGY+PipcXCkvLnNvdXJjZSxba10pLDIpLGo9dCgvXFx7KD8hXFx7KSg/Oig/IVt9Ol0pPDwwPj4pKjw8MT4+P1xcfS8uc291cmNlLFtQLF9dKSxOPXIodCgvW15cIicvKCldfFxcLyg/IVxcKil8XFwvXFwqKD86W14qXXxcXCooPyFcXC8pKSpcXCpcXC98PDwwPj58XFwoPDxzZWxmPj4qXFwpLy5zb3VyY2UsW09dKSwyKSxJPXQoL1xceyg/IVxceykoPzooPyFbfTpdKTw8MD4+KSo8PDE+Pj9cXH0vLnNvdXJjZSxbTixfXSk7ZnVuY3Rpb24gTCh0LHIpe3JldHVybntpbnRlcnBvbGF0aW9uOntwYXR0ZXJuOm4oLygoPzpefFtee10pKD86XFx7XFx7KSopPDwwPj4vLnNvdXJjZSxbdF0pLGxvb2tiZWhpbmQ6ITAsaW5zaWRlOntcImZvcm1hdC1zdHJpbmdcIjp7cGF0dGVybjpuKC8oXlxceyg/Oig/IVt9Ol0pPDwwPj4pKik8PDE+Pig/PVxcfSQpLy5zb3VyY2UsW3IsX10pLGxvb2tiZWhpbmQ6ITAsaW5zaWRlOntwdW5jdHVhdGlvbjovXjovfX0scHVuY3R1YXRpb246L15cXHt8XFx9JC8sZXhwcmVzc2lvbjp7cGF0dGVybjovW1xcc1xcU10rLyxhbGlhczpcImxhbmd1YWdlLWNzaGFycFwiLGluc2lkZTplLmxhbmd1YWdlcy5jc2hhcnB9fX0sc3RyaW5nOi9bXFxzXFxTXSsvfX1lLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoXCJjc2hhcnBcIixcInN0cmluZ1wiLHtcImludGVycG9sYXRpb24tc3RyaW5nXCI6W3twYXR0ZXJuOm4oLyhefFteXFxcXF0pKD86XFwkQHxAXFwkKVwiKD86XCJcInxcXFxcW1xcc1xcU118XFx7XFx7fDw8MD4+fFteXFxcXHtcIl0pKlwiLy5zb3VyY2UsW2pdKSxsb29rYmVoaW5kOiEwLGdyZWVkeTohMCxpbnNpZGU6TChqLFApfSx7cGF0dGVybjpuKC8oXnxbXkBcXFxcXSlcXCRcIig/OlxcXFwufFxce1xce3w8PDA+PnxbXlxcXFxcIntdKSpcIi8uc291cmNlLFtJXSksbG9va2JlaGluZDohMCxncmVlZHk6ITAsaW5zaWRlOkwoSSxOKX1dfSl9KFByaXNtKSxQcmlzbS5sYW5ndWFnZXMuZG90bmV0PVByaXNtLmxhbmd1YWdlcy5jcz1QcmlzbS5sYW5ndWFnZXMuY3NoYXJwLFByaXNtLmxhbmd1YWdlc1tcInZpc3VhbC1iYXNpY1wiXT17Y29tbWVudDp7cGF0dGVybjovKD86WyfigJjigJldfFJFTVxcYikoPzpbXlxcclxcbl9dfF8oPzpcXHJcXG4/fFxcbik/KSovaSxpbnNpZGU6e2tleXdvcmQ6L15SRU0vaX19LGRpcmVjdGl2ZTp7cGF0dGVybjovIyg/OkNvbnN0fEVsc2V8RWxzZUlmfEVuZHxFeHRlcm5hbENoZWNrc3VtfEV4dGVybmFsU291cmNlfElmfFJlZ2lvbikoPzpbXlxcU1xcclxcbl1fW15cXFNcXHJcXG5dKig/Olxcclxcbj98XFxuKXwuKSsvaSxhbGlhczpcImNvbW1lbnRcIixncmVlZHk6ITB9LHN0cmluZzp7cGF0dGVybjovXFwkP1tcIuKAnOKAnV0oPzpbXCLigJzigJ1dezJ9fFteXCLigJzigJ1dKSpbXCLigJzigJ1dQz8vaSxncmVlZHk6ITB9LGRhdGU6e3BhdHRlcm46LyNbXlxcU1xcclxcbl0qKD86XFxkKyhbLy1dKVxcZCtcXDFcXGQrKD86W15cXFNcXHJcXG5dKyg/OlxcZCtbXlxcU1xcclxcbl0qKD86QU18UE0pfFxcZCs6XFxkKyg/OjpcXGQrKT8oPzpbXlxcU1xcclxcbl0qKD86QU18UE0pKT8pKT98XFxkK1teXFxTXFxyXFxuXSooPzpBTXxQTSl8XFxkKzpcXGQrKD86OlxcZCspPyg/OlteXFxTXFxyXFxuXSooPzpBTXxQTSkpPylbXlxcU1xcclxcbl0qIy9pLGFsaWFzOlwiYnVpbHRpblwifSxudW1iZXI6Lyg/Oig/OlxcYlxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKykoPzpFWystXT9cXGQrKT98JltIT11bXFxkQS1GXSspKD86VT9bSUxTXXxbRlJEXSk/L2ksYm9vbGVhbjovXFxiKD86VHJ1ZXxGYWxzZXxOb3RoaW5nKVxcYi9pLGtleXdvcmQ6L1xcYig/OkFkZEhhbmRsZXJ8QWRkcmVzc09mfEFsaWFzfEFuZCg/OkFsc28pP3xBc3xCb29sZWFufEJ5UmVmfEJ5dGV8QnlWYWx8Q2FsbHxDYXNlfENhdGNofEMoPzpCb29sfEJ5dGV8Q2hhcnxEYXRlfERibHxEZWN8SW50fExuZ3xPYmp8U0J5dGV8U2hvcnR8U25nfFN0cnxUeXBlfFVJbnR8VUxuZ3xVU2hvcnQpfENoYXJ8Q2xhc3N8Q29uc3R8Q29udGludWV8Q3VycmVuY3l8RGF0ZXxEZWNpbWFsfERlY2xhcmV8RGVmYXVsdHxEZWxlZ2F0ZXxEaW18RGlyZWN0Q2FzdHxEb3xEb3VibGV8RWFjaHxFbHNlKD86SWYpP3xFbmQoPzpJZik/fEVudW18RXJhc2V8RXJyb3J8RXZlbnR8RXhpdHxGaW5hbGx5fEZvcnxGcmllbmR8RnVuY3Rpb258R2V0KD86VHlwZXxYTUxOYW1lc3BhY2UpP3xHbG9iYWx8R29TdWJ8R29Ub3xIYW5kbGVzfElmfEltcGxlbWVudHN8SW1wb3J0c3xJbnxJbmhlcml0c3xJbnRlZ2VyfEludGVyZmFjZXxJc3xJc05vdHxMZXR8TGlifExpa2V8TG9uZ3xMb29wfE1lfE1vZHxNb2R1bGV8TXVzdCg/OkluaGVyaXR8T3ZlcnJpZGUpfE15KD86QmFzZXxDbGFzcyl8TmFtZXNwYWNlfE5hcnJvd2luZ3xOZXd8TmV4dHxOb3QoPzpJbmhlcml0YWJsZXxPdmVycmlkYWJsZSk/fE9iamVjdHxPZnxPbnxPcGVyYXRvcnxPcHRpb24oPzphbCk/fE9yKD86RWxzZSk/fE91dHxPdmVybG9hZHN8T3ZlcnJpZGFibGV8T3ZlcnJpZGVzfFBhcmFtQXJyYXl8UGFydGlhbHxQcml2YXRlfFByb3BlcnR5fFByb3RlY3RlZHxQdWJsaWN8UmFpc2VFdmVudHxSZWFkT25seXxSZURpbXxSZW1vdmVIYW5kbGVyfFJlc3VtZXxSZXR1cm58U0J5dGV8U2VsZWN0fFNldHxTaGFkb3dzfFNoYXJlZHxzaG9ydHxTaW5nbGV8U3RhdGljfFN0ZXB8U3RvcHxTdHJpbmd8U3RydWN0dXJlfFN1YnxTeW5jTG9ja3xUaGVufFRocm93fFRvfFRyeXxUcnlDYXN0fFR5cGV8VHlwZU9mfFUoPzpJbnRlZ2VyfExvbmd8U2hvcnQpfFVzaW5nfFZhcmlhbnR8V2VuZHxXaGVufFdoaWxlfFdpZGVuaW5nfFdpdGgoPzpFdmVudHMpP3xXcml0ZU9ubHl8VW50aWx8WG9yKVxcYi9pLG9wZXJhdG9yOlsvWytcXC0qL1xcXFxePD0+JiNAJCUhXS8se3BhdHRlcm46LyhbXlxcU1xcclxcbl0pXyg/PVteXFxTXFxyXFxuXSpbXFxyXFxuXSkvLGxvb2tiZWhpbmQ6ITB9XSxwdW5jdHVhdGlvbjovW3t9KCkuLDo/XS99LFByaXNtLmxhbmd1YWdlcy52Yj1QcmlzbS5sYW5ndWFnZXNbXCJ2aXN1YWwtYmFzaWNcIl0sUHJpc20ubGFuZ3VhZ2VzLnZiYT1QcmlzbS5sYW5ndWFnZXNbXCJ2aXN1YWwtYmFzaWNcIl0sUHJpc20ubGFuZ3VhZ2VzLnNxbD17Y29tbWVudDp7cGF0dGVybjovKF58W15cXFxcXSkoPzpcXC9cXCpbXFxzXFxTXSo/XFwqXFwvfCg/Oi0tfFxcL1xcL3wjKS4qKS8sbG9va2JlaGluZDohMH0sdmFyaWFibGU6W3twYXR0ZXJuOi9AKFtcIidgXSkoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pK1xcMS8sZ3JlZWR5OiEwfSwvQFtcXHcuJF0rL10sc3RyaW5nOntwYXR0ZXJuOi8oXnxbXkBcXFxcXSkoXCJ8JykoPzpcXFxcW1xcc1xcU118KD8hXFwyKVteXFxcXF18XFwyXFwyKSpcXDIvLGdyZWVkeTohMCxsb29rYmVoaW5kOiEwfSxmdW5jdGlvbjovXFxiKD86QVZHfENPVU5UfEZJUlNUfEZPUk1BVHxMQVNUfExDQVNFfExFTnxNQVh8TUlEfE1JTnxNT0R8Tk9XfFJPVU5EfFNVTXxVQ0FTRSkoPz1cXHMqXFwoKS9pLGtleXdvcmQ6L1xcYig/OkFDVElPTnxBRER8QUZURVJ8QUxHT1JJVEhNfEFMTHxBTFRFUnxBTkFMWVpFfEFOWXxBUFBMWXxBU3xBU0N8QVVUSE9SSVpBVElPTnxBVVRPX0lOQ1JFTUVOVHxCQUNLVVB8QkRCfEJFR0lOfEJFUktFTEVZREJ8QklHSU5UfEJJTkFSWXxCSVR8QkxPQnxCT09MfEJPT0xFQU58QlJFQUt8QlJPV1NFfEJUUkVFfEJVTEt8Qll8Q0FMTHxDQVNDQURFRD98Q0FTRXxDSEFJTnxDSEFSKD86QUNURVJ8U0VUKT98Q0hFQ0soPzpQT0lOVCk/fENMT1NFfENMVVNURVJFRHxDT0FMRVNDRXxDT0xMQVRFfENPTFVNTlM/fENPTU1FTlR8Q09NTUlUKD86VEVEKT98Q09NUFVURXxDT05ORUNUfENPTlNJU1RFTlR8Q09OU1RSQUlOVHxDT05UQUlOUyg/OlRBQkxFKT98Q09OVElOVUV8Q09OVkVSVHxDUkVBVEV8Q1JPU1N8Q1VSUkVOVCg/Ol9EQVRFfF9USU1FfF9USU1FU1RBTVB8X1VTRVIpP3xDVVJTT1J8Q1lDTEV8REFUQSg/OkJBU0VTPyk/fERBVEUoPzpUSU1FKT98REFZfERCQ0N8REVBTExPQ0FURXxERUN8REVDSU1BTHxERUNMQVJFfERFRkFVTFR8REVGSU5FUnxERUxBWUVEfERFTEVURXxERUxJTUlURVJTP3xERU5ZfERFU0N8REVTQ1JJQkV8REVURVJNSU5JU1RJQ3xESVNBQkxFfERJU0NBUkR8RElTS3xESVNUSU5DVHxESVNUSU5DVFJPV3xESVNUUklCVVRFRHxET3xET1VCTEV8RFJPUHxEVU1NWXxEVU1QKD86RklMRSk/fERVUExJQ0FURXxFTFNFKD86SUYpP3xFTkFCTEV8RU5DTE9TRUR8RU5EfEVOR0lORXxFTlVNfEVSUkxWTHxFUlJPUlN8RVNDQVBFRD98RVhDRVBUfEVYRUMoPzpVVEUpP3xFWElTVFN8RVhJVHxFWFBMQUlOfEVYVEVOREVEfEZFVENIfEZJRUxEU3xGSUxFfEZJTExGQUNUT1J8RklSU1R8RklYRUR8RkxPQVR8Rk9MTE9XSU5HfEZPUig/OiBFQUNIIFJPVyk/fEZPUkNFfEZPUkVJR058RlJFRVRFWFQoPzpUQUJMRSk/fEZST018RlVMTHxGVU5DVElPTnxHRU9NRVRSWSg/OkNPTExFQ1RJT04pP3xHTE9CQUx8R09UT3xHUkFOVHxHUk9VUHxIQU5ETEVSfEhBU0h8SEFWSU5HfEhPTERMT0NLfEhPVVJ8SURFTlRJVFkoPzpfSU5TRVJUfENPTCk/fElGfElHTk9SRXxJTVBPUlR8SU5ERVh8SU5GSUxFfElOTkVSfElOTk9EQnxJTk9VVHxJTlNFUlR8SU5UfElOVEVHRVJ8SU5URVJTRUNUfElOVEVSVkFMfElOVE98SU5WT0tFUnxJU09MQVRJT058SVRFUkFURXxKT0lOfEtFWVM/fEtJTEx8TEFOR1VBR0V8TEFTVHxMRUFWRXxMRUZUfExFVkVMfExJTUlUfExJTkVOT3xMSU5FU3xMSU5FU1RSSU5HfExPQUR8TE9DQUx8TE9DS3xMT05HKD86QkxPQnxURVhUKXxMT09QfE1BVENIKD86RUQpP3xNRURJVU0oPzpCTE9CfElOVHxURVhUKXxNRVJHRXxNSURETEVJTlR8TUlOVVRFfE1PREV8TU9ESUZJRVN8TU9ESUZZfE1PTlRIfE1VTFRJKD86TElORVNUUklOR3xQT0lOVHxQT0xZR09OKXxOQVRJT05BTHxOQVRVUkFMfE5DSEFSfE5FWFR8Tk98Tk9OQ0xVU1RFUkVEfE5VTExJRnxOVU1FUklDfE9GRj98T0ZGU0VUUz98T058T1BFTig/OkRBVEFTT1VSQ0V8UVVFUll8Uk9XU0VUKT98T1BUSU1JWkV8T1BUSU9OKD86QUxMWSk/fE9SREVSfE9VVCg/OkVSfEZJTEUpP3xPVkVSfFBBUlRJQUx8UEFSVElUSU9OfFBFUkNFTlR8UElWT1R8UExBTnxQT0lOVHxQT0xZR09OfFBSRUNFRElOR3xQUkVDSVNJT058UFJFUEFSRXxQUkVWfFBSSU1BUll8UFJJTlR8UFJJVklMRUdFU3xQUk9DKD86RURVUkUpP3xQVUJMSUN8UFVSR0V8UVVJQ0t8UkFJU0VSUk9SfFJFQURTP3xSRUFMfFJFQ09ORklHVVJFfFJFRkVSRU5DRVN8UkVMRUFTRXxSRU5BTUV8UkVQRUFUKD86QUJMRSk/fFJFUExBQ0V8UkVQTElDQVRJT058UkVRVUlSRXxSRVNJR05BTHxSRVNUT1JFfFJFU1RSSUNUfFJFVFVSTig/OlN8SU5HKT98UkVWT0tFfFJJR0hUfFJPTExCQUNLfFJPVVRJTkV8Uk9XKD86Q09VTlR8R1VJRENPTHxTKT98UlRSRUV8UlVMRXxTQVZFKD86UE9JTlQpP3xTQ0hFTUF8U0VDT05EfFNFTEVDVHxTRVJJQUwoPzpJWkFCTEUpP3xTRVNTSU9OKD86X1VTRVIpP3xTRVQoPzpVU0VSKT98U0hBUkV8U0hPV3xTSFVURE9XTnxTSU1QTEV8U01BTExJTlR8U05BUFNIT1R8U09NRXxTT05BTUV8U1FMfFNUQVJUKD86SU5HKT98U1RBVElTVElDU3xTVEFUVVN8U1RSSVBFRHxTWVNURU1fVVNFUnxUQUJMRVM/fFRBQkxFU1BBQ0V8VEVNUCg/Ok9SQVJZfFRBQkxFKT98VEVSTUlOQVRFRHxURVhUKD86U0laRSk/fFRIRU58VElNRSg/OlNUQU1QKT98VElOWSg/OkJMT0J8SU5UfFRFWFQpfFRPUD98VFJBTig/OlNBQ1RJT05TPyk/fFRSSUdHRVJ8VFJVTkNBVEV8VFNFUVVBTHxUWVBFUz98VU5CT1VOREVEfFVOQ09NTUlUVEVEfFVOREVGSU5FRHxVTklPTnxVTklRVUV8VU5MT0NLfFVOUElWT1R8VU5TSUdORUR8VVBEQVRFKD86VEVYVCk/fFVTQUdFfFVTRXxVU0VSfFVTSU5HfFZBTFVFUz98VkFSKD86QklOQVJZfENIQVJ8Q0hBUkFDVEVSfFlJTkcpfFZJRVd8V0FJVEZPUnxXQVJOSU5HU3xXSEVOfFdIRVJFfFdISUxFfFdJVEgoPzogUk9MTFVQfElOKT98V09SS3xXUklURSg/OlRFWFQpP3xZRUFSKVxcYi9pLGJvb2xlYW46L1xcYig/OlRSVUV8RkFMU0V8TlVMTClcXGIvaSxudW1iZXI6L1xcYjB4W1xcZGEtZl0rXFxifFxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkK1xcYi9pLG9wZXJhdG9yOi9bLSsqXFwvPSVefl18JiY/fFxcfFxcfD98IT0/fDwoPzo9Pj98PHw+KT98Pls+PV0/fFxcYig/OkFORHxCRVRXRUVOfERJVnxJTnxJTElLRXxJU3xMSUtFfE5PVHxPUnxSRUdFWFB8UkxJS0V8U09VTkRTIExJS0V8WE9SKVxcYi9pLHB1bmN0dWF0aW9uOi9bO1tcXF0oKWAsLl0vfSxmdW5jdGlvbihlKXtlLmxhbmd1YWdlcy5ydWJ5PWUubGFuZ3VhZ2VzLmV4dGVuZChcImNsaWtlXCIse2NvbW1lbnQ6Wy8jLiovLHtwYXR0ZXJuOi9ePWJlZ2luXFxzW1xcc1xcU10qP149ZW5kL20sZ3JlZWR5OiEwfV0sXCJjbGFzcy1uYW1lXCI6e3BhdHRlcm46LyhcXGIoPzpjbGFzcylcXHMrfFxcYmNhdGNoXFxzK1xcKClbXFx3LlxcXFxdKy9pLGxvb2tiZWhpbmQ6ITAsaW5zaWRlOntwdW5jdHVhdGlvbjovWy5cXFxcXS99fSxrZXl3b3JkOi9cXGIoPzphbGlhc3xhbmR8QkVHSU58YmVnaW58YnJlYWt8Y2FzZXxjbGFzc3xkZWZ8ZGVmaW5lX21ldGhvZHxkZWZpbmVkfGRvfGVhY2h8ZWxzZXxlbHNpZnxFTkR8ZW5kfGVuc3VyZXxleHRlbmR8Zm9yfGlmfGlufGluY2x1ZGV8bW9kdWxlfG5ld3xuZXh0fG5pbHxub3R8b3J8cHJlcGVuZHxwcm90ZWN0ZWR8cHJpdmF0ZXxwdWJsaWN8cmFpc2V8cmVkb3xyZXF1aXJlfHJlc2N1ZXxyZXRyeXxyZXR1cm58c2VsZnxzdXBlcnx0aGVufHRocm93fHVuZGVmfHVubGVzc3x1bnRpbHx3aGVufHdoaWxlfHlpZWxkKVxcYi99KTt2YXIgdD17cGF0dGVybjovI1xce1tefV0rXFx9LyxpbnNpZGU6e2RlbGltaXRlcjp7cGF0dGVybjovXiNcXHt8XFx9JC8sYWxpYXM6XCJ0YWdcIn0scmVzdDplLmxhbmd1YWdlcy5ydWJ5fX07ZGVsZXRlIGUubGFuZ3VhZ2VzLnJ1YnkuZnVuY3Rpb24sZS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKFwicnVieVwiLFwia2V5d29yZFwiLHtyZWdleDpbe3BhdHRlcm46UmVnRXhwKC8lci8uc291cmNlK1wiKD86XCIrWy8oW15hLXpBLVowLTlcXHN7KFxcWzxdKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwxLy5zb3VyY2UsL1xcKCg/OlteKClcXFxcXXxcXFxcW1xcc1xcU10pKlxcKS8uc291cmNlLC9cXHsoPzpbXiN7fVxcXFxdfCMoPzpcXHtbXn1dK1xcfSk/fFxcXFxbXFxzXFxTXSkqXFx9Ly5zb3VyY2UsL1xcWyg/OlteXFxbXFxdXFxcXF18XFxcXFtcXHNcXFNdKSpcXF0vLnNvdXJjZSwvPCg/OltePD5cXFxcXXxcXFxcW1xcc1xcU10pKj4vLnNvdXJjZV0uam9pbihcInxcIikrXCIpXCIrL1tlZ2ltbm9zdXhdezAsNn0vLnNvdXJjZSksZ3JlZWR5OiEwLGluc2lkZTp7aW50ZXJwb2xhdGlvbjp0fX0se3BhdHRlcm46LyhefFteL10pXFwvKD8hXFwvKSg/OlxcW1teXFxyXFxuXFxdXStcXF18XFxcXC58W15bL1xcXFxcXHJcXG5dKStcXC9bZWdpbW5vc3V4XXswLDZ9KD89XFxzKig/OiR8W1xcclxcbiwuO30pI10pKS8sbG9va2JlaGluZDohMCxncmVlZHk6ITAsaW5zaWRlOntpbnRlcnBvbGF0aW9uOnR9fV0sdmFyaWFibGU6L1tAJF0rW2EtekEtWl9dXFx3Kig/Ols/IV18XFxiKS8sc3ltYm9sOntwYXR0ZXJuOi8oXnxbXjpdKTpbYS16QS1aX11cXHcqKD86Wz8hXXxcXGIpLyxsb29rYmVoaW5kOiEwfSxcIm1ldGhvZC1kZWZpbml0aW9uXCI6e3BhdHRlcm46LyhcXGJkZWZcXHMrKVtcXHcuXSsvLGxvb2tiZWhpbmQ6ITAsaW5zaWRlOntmdW5jdGlvbjovXFx3KyQvLHJlc3Q6ZS5sYW5ndWFnZXMucnVieX19fSksZS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKFwicnVieVwiLFwibnVtYmVyXCIse2J1aWx0aW46L1xcYig/OkFycmF5fEJpZ251bXxCaW5kaW5nfENsYXNzfENvbnRpbnVhdGlvbnxEaXJ8RXhjZXB0aW9ufEZhbHNlQ2xhc3N8RmlsZXxTdGF0fEZpeG51bXxGbG9hdHxIYXNofEludGVnZXJ8SU98TWF0Y2hEYXRhfE1ldGhvZHxNb2R1bGV8TmlsQ2xhc3N8TnVtZXJpY3xPYmplY3R8UHJvY3xSYW5nZXxSZWdleHB8U3RyaW5nfFN0cnVjdHxUTVN8U3ltYm9sfFRocmVhZEdyb3VwfFRocmVhZHxUaW1lfFRydWVDbGFzcylcXGIvLGNvbnN0YW50Oi9cXGJbQS1aXVxcdyooPzpbPyFdfFxcYikvfSksZS5sYW5ndWFnZXMucnVieS5zdHJpbmc9W3twYXR0ZXJuOlJlZ0V4cCgvJVtxUWlJd1d4c10/Ly5zb3VyY2UrXCIoPzpcIitbLyhbXmEtekEtWjAtOVxcc3soXFxbPF0pKD86KD8hXFwxKVteXFxcXF18XFxcXFtcXHNcXFNdKSpcXDEvLnNvdXJjZSwvXFwoKD86W14oKVxcXFxdfFxcXFxbXFxzXFxTXSkqXFwpLy5zb3VyY2UsL1xceyg/OlteI3t9XFxcXF18Iyg/Olxce1tefV0rXFx9KT98XFxcXFtcXHNcXFNdKSpcXH0vLnNvdXJjZSwvXFxbKD86W15cXFtcXF1cXFxcXXxcXFxcW1xcc1xcU10pKlxcXS8uc291cmNlLC88KD86W148PlxcXFxdfFxcXFxbXFxzXFxTXSkqPi8uc291cmNlXS5qb2luKFwifFwiKStcIilcIiksZ3JlZWR5OiEwLGluc2lkZTp7aW50ZXJwb2xhdGlvbjp0fX0se3BhdHRlcm46LyhcInwnKSg/OiNcXHtbXn1dK1xcfXwjKD8hXFx7KXxcXFxcKD86XFxyXFxufFtcXHNcXFNdKXwoPyFcXDEpW15cXFxcI1xcclxcbl0pKlxcMS8sZ3JlZWR5OiEwLGluc2lkZTp7aW50ZXJwb2xhdGlvbjp0fX0se3BhdHRlcm46Lzw8Wy1+XT8oW2Etel9dXFx3KilbXFxyXFxuXSg/Oi4qW1xcclxcbl0pKj9bXFx0IF0qXFwxL2ksYWxpYXM6XCJoZXJlZG9jLXN0cmluZ1wiLGdyZWVkeTohMCxpbnNpZGU6e2RlbGltaXRlcjp7cGF0dGVybjovXjw8Wy1+XT9bYS16X11cXHcqfFthLXpfXVxcdyokL2ksYWxpYXM6XCJzeW1ib2xcIixpbnNpZGU6e3B1bmN0dWF0aW9uOi9ePDxbLX5dPy99fSxpbnRlcnBvbGF0aW9uOnR9fSx7cGF0dGVybjovPDxbLX5dPycoW2Etel9dXFx3KiknW1xcclxcbl0oPzouKltcXHJcXG5dKSo/W1xcdCBdKlxcMS9pLGFsaWFzOlwiaGVyZWRvYy1zdHJpbmdcIixncmVlZHk6ITAsaW5zaWRlOntkZWxpbWl0ZXI6e3BhdHRlcm46L148PFstfl0/J1thLXpfXVxcdyonfFthLXpfXVxcdyokL2ksYWxpYXM6XCJzeW1ib2xcIixpbnNpZGU6e3B1bmN0dWF0aW9uOi9ePDxbLX5dPyd8JyQvfX19fV0sZS5sYW5ndWFnZXMucmI9ZS5sYW5ndWFnZXMucnVieX0oUHJpc20pLFByaXNtLmxhbmd1YWdlcy5zd2lmdD17Y29tbWVudDp7cGF0dGVybjovKF58W15cXFxcOl0pKD86XFwvXFwvLip8XFwvXFwqKD86W14vKl18XFwvKD8hXFwqKXxcXCooPyFcXC8pfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSkqXFwqXFwvKSpcXCpcXC8pLyxsb29rYmVoaW5kOiEwLGdyZWVkeTohMH0sXCJzdHJpbmctbGl0ZXJhbFwiOlt7cGF0dGVybjpSZWdFeHAoLyhefFteXCIjXSkvLnNvdXJjZStcIig/OlwiKy9cIig/OlxcXFwoPzpcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXxcXHJcXG58W14oXSl8W15cXFxcXFxyXFxuXCJdKSpcIi8uc291cmNlK1wifFwiKy9cIlwiXCIoPzpcXFxcKD86XFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCl8W14oXSl8W15cXFxcXCJdfFwiKD8hXCJcIikpKlwiXCJcIi8uc291cmNlK1wiKVwiKy8oPyFbXCIjXSkvLnNvdXJjZSksbG9va2JlaGluZDohMCxncmVlZHk6ITAsaW5zaWRlOntpbnRlcnBvbGF0aW9uOntwYXR0ZXJuOi8oXFxcXFxcKCkoPzpbXigpXXxcXChbXigpXSpcXCkpKig/PVxcKSkvLGxvb2tiZWhpbmQ6ITAsaW5zaWRlOm51bGx9LFwiaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvblwiOntwYXR0ZXJuOi9eXFwpfFxcXFxcXCgkLyxhbGlhczpcInB1bmN0dWF0aW9uXCJ9LHB1bmN0dWF0aW9uOi9cXFxcKD89W1xcclxcbl0pLyxzdHJpbmc6L1tcXHNcXFNdKy99fSx7cGF0dGVybjpSZWdFeHAoLyhefFteXCIjXSkoIyspLy5zb3VyY2UrXCIoPzpcIisvXCIoPzpcXFxcKD86IytcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXxcXHJcXG58W14jXSl8W15cXFxcXFxyXFxuXSkqP1wiLy5zb3VyY2UrXCJ8XCIrL1wiXCJcIig/OlxcXFwoPzojK1xcKCg/OlteKCldfFxcKFteKCldKlxcKSkqXFwpfFteI10pfFteXFxcXF0pKj9cIlwiXCIvLnNvdXJjZStcIilcXFxcMlwiKSxsb29rYmVoaW5kOiEwLGdyZWVkeTohMCxpbnNpZGU6e2ludGVycG9sYXRpb246e3BhdHRlcm46LyhcXFxcIytcXCgpKD86W14oKV18XFwoW14oKV0qXFwpKSooPz1cXCkpLyxsb29rYmVoaW5kOiEwLGluc2lkZTpudWxsfSxcImludGVycG9sYXRpb24tcHVuY3R1YXRpb25cIjp7cGF0dGVybjovXlxcKXxcXFxcIytcXCgkLyxhbGlhczpcInB1bmN0dWF0aW9uXCJ9LHN0cmluZzovW1xcc1xcU10rL319XSxkaXJlY3RpdmU6e3BhdHRlcm46UmVnRXhwKC8jLy5zb3VyY2UrXCIoPzpcIisvKD86ZWxzZWlmfGlmKVxcYi8uc291cmNlK1wiKD86WyBcXHRdKlwiKy8oPzohWyBcXHRdKik/KD86XFxiXFx3K1xcYig/OlsgXFx0XSpcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKSk/fFxcKCg/OlteKCldfFxcKFteKCldKlxcKSkqXFwpKSg/OlsgXFx0XSooPzomJnxcXHxcXHwpKT8vLnNvdXJjZStcIikrfFwiKy8oPzplbHNlfGVuZGlmKVxcYi8uc291cmNlK1wiKVwiKSxhbGlhczpcInByb3BlcnR5XCIsaW5zaWRlOntcImRpcmVjdGl2ZS1uYW1lXCI6L14jXFx3Ky8sYm9vbGVhbjovXFxiKD86dHJ1ZXxmYWxzZSlcXGIvLG51bWJlcjovXFxiXFxkKyg/OlxcLlxcZCspKlxcYi8sb3BlcmF0b3I6LyF8JiZ8XFx8XFx8fFs8Pl09Py8scHVuY3R1YXRpb246L1soKSxdL319LGxpdGVyYWw6e3BhdHRlcm46LyMoPzpjb2xvckxpdGVyYWx8Y29sdW1ufGRzb2hhbmRsZXxmaWxlKD86SUR8TGl0ZXJhbHxQYXRoKT98ZnVuY3Rpb258aW1hZ2VMaXRlcmFsfGxpbmUpXFxiLyxhbGlhczpcImNvbnN0YW50XCJ9LFwib3RoZXItZGlyZWN0aXZlXCI6e3BhdHRlcm46LyNcXHcrXFxiLyxhbGlhczpcInByb3BlcnR5XCJ9LGF0dHJpYnV0ZTp7cGF0dGVybjovQFxcdysvLGFsaWFzOlwiYXRydWxlXCJ9LFwiZnVuY3Rpb24tZGVmaW5pdGlvblwiOntwYXR0ZXJuOi8oXFxiZnVuY1xccyspXFx3Ky8sbG9va2JlaGluZDohMCxhbGlhczpcImZ1bmN0aW9uXCJ9LGxhYmVsOntwYXR0ZXJuOi9cXGIoYnJlYWt8Y29udGludWUpXFxzK1xcdyt8XFxiW2EtekEtWl9dXFx3Kig/PVxccyo6XFxzKig/OmZvcnxyZXBlYXR8d2hpbGUpXFxiKS8sbG9va2JlaGluZDohMCxhbGlhczpcImltcG9ydGFudFwifSxrZXl3b3JkOi9cXGIoPzpBbnl8UHJvdG9jb2x8U2VsZnxUeXBlfGFjdG9yfGFzfGFzc2lnbm1lbnR8YXNzb2NpYXRlZHR5cGV8YXNzb2NpYXRpdml0eXxhc3luY3xhd2FpdHxicmVha3xjYXNlfGNhdGNofGNsYXNzfGNvbnRpbnVlfGNvbnZlbmllbmNlfGRlZmF1bHR8ZGVmZXJ8ZGVpbml0fGRpZFNldHxkb3xkeW5hbWljfGVsc2V8ZW51bXxleHRlbnNpb258ZmFsbHRocm91Z2h8ZmlsZXByaXZhdGV8ZmluYWx8Zm9yfGZ1bmN8Z2V0fGd1YXJkfGhpZ2hlclRoYW58aWZ8aW1wb3J0fGlufGluZGlyZWN0fGluZml4fGluaXR8aW5vdXR8aW50ZXJuYWx8aXN8bGF6eXxsZWZ0fGxldHxsb3dlclRoYW58bXV0YXRpbmd8bm9uZXxub25pc29sYXRlZHxub25tdXRhdGluZ3xvcGVufG9wZXJhdG9yfG9wdGlvbmFsfG92ZXJyaWRlfHBvc3RmaXh8cHJlY2VkZW5jZWdyb3VwfHByZWZpeHxwcml2YXRlfHByb3RvY29sfHB1YmxpY3xyZXBlYXR8cmVxdWlyZWR8cmV0aHJvd3N8cmV0dXJufHJpZ2h0fHNhZmV8c2VsZnxzZXR8c29tZXxzdGF0aWN8c3RydWN0fHN1YnNjcmlwdHxzdXBlcnxzd2l0Y2h8dGhyb3d8dGhyb3dzfHRyeXx0eXBlYWxpYXN8dW5vd25lZHx1bnNhZmV8dmFyfHdlYWt8d2hlcmV8d2hpbGV8d2lsbFNldClcXGIvLGJvb2xlYW46L1xcYig/OnRydWV8ZmFsc2UpXFxiLyxuaWw6e3BhdHRlcm46L1xcYm5pbFxcYi8sYWxpYXM6XCJjb25zdGFudFwifSxcInNob3J0LWFyZ3VtZW50XCI6L1xcJFxcZCtcXGIvLG9taXQ6e3BhdHRlcm46L1xcYl9cXGIvLGFsaWFzOlwia2V5d29yZFwifSxudW1iZXI6L1xcYig/OltcXGRfXSsoPzpcXC5bXFxkZV9dKyk/fDB4W2EtZjAtOV9dKyg/OlxcLlthLWYwLTlwX10rKT98MGJbMDFfXSt8MG9bMC03X10rKVxcYi9pLFwiY2xhc3MtbmFtZVwiOi9cXGJbQS1aXSg/OltBLVpfXFxkXSpbYS16XVxcdyopP1xcYi8sZnVuY3Rpb246L1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLGNvbnN0YW50Oi9cXGIoPzpbQS1aX117Mix9fGtbQS1aXVtBLVphLXpfXSspXFxiLyxvcGVyYXRvcjovWy0rKi8lPSE8PiZ8Xn4/XSt8XFwuWy5cXC0rKi8lPSE8PiZ8Xn4/XSsvLHB1bmN0dWF0aW9uOi9be31bXFxdKCk7LC46XFxcXF0vfSxQcmlzbS5sYW5ndWFnZXMuc3dpZnRbXCJzdHJpbmctbGl0ZXJhbFwiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmluc2lkZS5pbnRlcnBvbGF0aW9uLmluc2lkZT1QcmlzbS5sYW5ndWFnZXMuc3dpZnR9KSksZnVuY3Rpb24oZSl7dmFyIHQ9XCJcXFxcYig/OkJBU0h8QkFTSE9QVFN8QkFTSF9BTElBU0VTfEJBU0hfQVJHQ3xCQVNIX0FSR1Z8QkFTSF9DTURTfEJBU0hfQ09NUExFVElPTl9DT01QQVRfRElSfEJBU0hfTElORU5PfEJBU0hfUkVNQVRDSHxCQVNIX1NPVVJDRXxCQVNIX1ZFUlNJTkZPfEJBU0hfVkVSU0lPTnxDT0xPUlRFUk18Q09MVU1OU3xDT01QX1dPUkRCUkVBS1N8REJVU19TRVNTSU9OX0JVU19BRERSRVNTfERFRkFVTFRTX1BBVEh8REVTS1RPUF9TRVNTSU9OfERJUlNUQUNLfERJU1BMQVl8RVVJRHxHRE1TRVNTSU9OfEdETV9MQU5HfEdOT01FX0tFWVJJTkdfQ09OVFJPTHxHTk9NRV9LRVlSSU5HX1BJRHxHUEdfQUdFTlRfSU5GT3xHUk9VUFN8SElTVENPTlRST0x8SElTVEZJTEV8SElTVEZJTEVTSVpFfEhJU1RTSVpFfEhPTUV8SE9TVE5BTUV8SE9TVFRZUEV8SUZTfElOU1RBTkNFfEpPQnxMQU5HfExBTkdVQUdFfExDX0FERFJFU1N8TENfQUxMfExDX0lERU5USUZJQ0FUSU9OfExDX01FQVNVUkVNRU5UfExDX01PTkVUQVJZfExDX05BTUV8TENfTlVNRVJJQ3xMQ19QQVBFUnxMQ19URUxFUEhPTkV8TENfVElNRXxMRVNTQ0xPU0V8TEVTU09QRU58TElORVN8TE9HTkFNRXxMU19DT0xPUlN8TUFDSFRZUEV8TUFJTENIRUNLfE1BTkRBVE9SWV9QQVRIfE5PX0FUX0JSSURHRXxPTERQV0R8T1BURVJSfE9QVElORHxPUkJJVF9TT0NLRVRESVJ8T1NUWVBFfFBBUEVSU0laRXxQQVRIfFBJUEVTVEFUVVN8UFBJRHxQUzF8UFMyfFBTM3xQUzR8UFdEfFJBTkRPTXxSRVBMWXxTRUNPTkRTfFNFTElOVVhfSU5JVHxTRVNTSU9OfFNFU1NJT05UWVBFfFNFU1NJT05fTUFOQUdFUnxTSEVMTHxTSEVMTE9QVFN8U0hMVkx8U1NIX0FVVEhfU09DS3xURVJNfFVJRHxVUFNUQVJUX0VWRU5UU3xVUFNUQVJUX0lOU1RBTkNFfFVQU1RBUlRfSk9CfFVQU1RBUlRfU0VTU0lPTnxVU0VSfFdJTkRPV0lEfFhBVVRIT1JJVFl8WERHX0NPTkZJR19ESVJTfFhER19DVVJSRU5UX0RFU0tUT1B8WERHX0RBVEFfRElSU3xYREdfR1JFRVRFUl9EQVRBX0RJUnxYREdfTUVOVV9QUkVGSVh8WERHX1JVTlRJTUVfRElSfFhER19TRUFUfFhER19TRUFUX1BBVEh8WERHX1NFU1NJT05fREVTS1RPUHxYREdfU0VTU0lPTl9JRHxYREdfU0VTU0lPTl9QQVRIfFhER19TRVNTSU9OX1RZUEV8WERHX1ZUTlJ8WE1PRElGSUVSUylcXFxcYlwiLG49e3BhdHRlcm46LyheKFtcIiddPylcXHcrXFwyKVsgXFx0XStcXFMuKi8sbG9va2JlaGluZDohMCxhbGlhczpcInB1bmN0dWF0aW9uXCIsaW5zaWRlOm51bGx9LHI9e2Jhc2g6bixlbnZpcm9ubWVudDp7cGF0dGVybjpSZWdFeHAoXCJcXFxcJFwiK3QpLGFsaWFzOlwiY29uc3RhbnRcIn0sdmFyaWFibGU6W3twYXR0ZXJuOi9cXCQ/XFwoXFwoW1xcc1xcU10rP1xcKVxcKS8sZ3JlZWR5OiEwLGluc2lkZTp7dmFyaWFibGU6W3twYXR0ZXJuOi8oXlxcJFxcKFxcKFtcXHNcXFNdKylcXClcXCkvLGxvb2tiZWhpbmQ6ITB9LC9eXFwkXFwoXFwoL10sbnVtYmVyOi9cXGIweFtcXGRBLUZhLWZdK1xcYnwoPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86W0VlXS0/XFxkKyk/LyxvcGVyYXRvcjovLS18XFwrXFwrfFxcKlxcKj0/fDw8PT98Pj49P3wmJnxcXHxcXHx8Wz0hK1xcLSovJTw+XiZ8XT0/fFs/fjpdLyxwdW5jdHVhdGlvbjovXFwoXFwoP3xcXClcXCk/fCx8Oy99fSx7cGF0dGVybjovXFwkXFwoKD86XFwoW14pXStcXCl8W14oKV0pK1xcKXxgW15gXStgLyxncmVlZHk6ITAsaW5zaWRlOnt2YXJpYWJsZTovXlxcJFxcKHxeYHxcXCkkfGAkL319LHtwYXR0ZXJuOi9cXCRcXHtbXn1dK1xcfS8sZ3JlZWR5OiEwLGluc2lkZTp7b3BlcmF0b3I6LzpbLT0/K10/fFshXFwvXXwjIz98JSU/fFxcXlxcXj98LCw/LyxwdW5jdHVhdGlvbjovW1xcW1xcXV0vLGVudmlyb25tZW50OntwYXR0ZXJuOlJlZ0V4cChcIihcXFxceylcIit0KSxsb29rYmVoaW5kOiEwLGFsaWFzOlwiY29uc3RhbnRcIn19fSwvXFwkKD86XFx3K3xbIz8qIUAkXSkvXSxlbnRpdHk6L1xcXFwoPzpbYWJjZUVmbnJ0dlxcXFxcIl18Tz9bMC03XXsxLDN9fHhbMC05YS1mQS1GXXsxLDJ9fHVbMC05YS1mQS1GXXs0fXxVWzAtOWEtZkEtRl17OH0pL307ZS5sYW5ndWFnZXMuYmFzaD17c2hlYmFuZzp7cGF0dGVybjovXiMhXFxzKlxcLy4qLyxhbGlhczpcImltcG9ydGFudFwifSxjb21tZW50OntwYXR0ZXJuOi8oXnxbXlwie1xcXFwkXSkjLiovLGxvb2tiZWhpbmQ6ITB9LFwiZnVuY3Rpb24tbmFtZVwiOlt7cGF0dGVybjovKFxcYmZ1bmN0aW9uXFxzKylbXFx3LV0rKD89KD86XFxzKlxcKD86XFxzKlxcKSk/XFxzKlxceykvLGxvb2tiZWhpbmQ6ITAsYWxpYXM6XCJmdW5jdGlvblwifSx7cGF0dGVybjovXFxiW1xcdy1dKyg/PVxccypcXChcXHMqXFwpXFxzKlxceykvLGFsaWFzOlwiZnVuY3Rpb25cIn1dLFwiZm9yLW9yLXNlbGVjdFwiOntwYXR0ZXJuOi8oXFxiKD86Zm9yfHNlbGVjdClcXHMrKVxcdysoPz1cXHMraW5cXHMpLyxhbGlhczpcInZhcmlhYmxlXCIsbG9va2JlaGluZDohMH0sXCJhc3NpZ24tbGVmdFwiOntwYXR0ZXJuOi8oXnxbXFxzO3wmXXxbPD5dXFwoKVxcdysoPz1cXCs/PSkvLGluc2lkZTp7ZW52aXJvbm1lbnQ6e3BhdHRlcm46UmVnRXhwKFwiKF58W1xcXFxzO3wmXXxbPD5dXFxcXCgpXCIrdCksbG9va2JlaGluZDohMCxhbGlhczpcImNvbnN0YW50XCJ9fSxhbGlhczpcInZhcmlhYmxlXCIsbG9va2JlaGluZDohMH0sc3RyaW5nOlt7cGF0dGVybjovKCg/Ol58W148XSk8PC0/XFxzKikoXFx3KylcXHNbXFxzXFxTXSo/KD86XFxyP1xcbnxcXHIpXFwyLyxsb29rYmVoaW5kOiEwLGdyZWVkeTohMCxpbnNpZGU6cn0se3BhdHRlcm46LygoPzpefFtePF0pPDwtP1xccyopKFtcIiddKShcXHcrKVxcMlxcc1tcXHNcXFNdKj8oPzpcXHI/XFxufFxccilcXDMvLGxvb2tiZWhpbmQ6ITAsZ3JlZWR5OiEwLGluc2lkZTp7YmFzaDpufX0se3BhdHRlcm46LyhefFteXFxcXF0oPzpcXFxcXFxcXCkqKVwiKD86XFxcXFtcXHNcXFNdfFxcJFxcKFteKV0rXFwpfFxcJCg/IVxcKCl8YFteYF0rYHxbXlwiXFxcXGAkXSkqXCIvLGxvb2tiZWhpbmQ6ITAsZ3JlZWR5OiEwLGluc2lkZTpyfSx7cGF0dGVybjovKF58W14kXFxcXF0pJ1teJ10qJy8sbG9va2JlaGluZDohMCxncmVlZHk6ITB9LHtwYXR0ZXJuOi9cXCQnKD86W14nXFxcXF18XFxcXFtcXHNcXFNdKSonLyxncmVlZHk6ITAsaW5zaWRlOntlbnRpdHk6ci5lbnRpdHl9fV0sZW52aXJvbm1lbnQ6e3BhdHRlcm46UmVnRXhwKFwiXFxcXCQ/XCIrdCksYWxpYXM6XCJjb25zdGFudFwifSx2YXJpYWJsZTpyLnZhcmlhYmxlLGZ1bmN0aW9uOntwYXR0ZXJuOi8oXnxbXFxzO3wmXXxbPD5dXFwoKSg/OmFkZHxhcHJvcG9zfGFwdHxhcHRpdHVkZXxhcHQtY2FjaGV8YXB0LWdldHxhc3BlbGx8YXV0b215c3FsYmFja3VwfGF3a3xiYXNlbmFtZXxiYXNofGJjfGJjb25zb2xlfGJnfGJ6aXAyfGNhbHxjYXR8Y2ZkaXNrfGNoZ3JwfGNoa2NvbmZpZ3xjaG1vZHxjaG93bnxjaHJvb3R8Y2tzdW18Y2xlYXJ8Y21wfGNvbHVtbnxjb21tfGNvbXBvc2VyfGNwfGNyb258Y3JvbnRhYnxjc3BsaXR8Y3VybHxjdXR8ZGF0ZXxkY3xkZHxkZHJlc2N1ZXxkZWJvb3RzdHJhcHxkZnxkaWZmfGRpZmYzfGRpZ3xkaXJ8ZGlyY29sb3JzfGRpcm5hbWV8ZGlyc3xkbWVzZ3xkdXxlZ3JlcHxlamVjdHxlbnZ8ZXRodG9vbHxleHBhbmR8ZXhwZWN0fGV4cHJ8ZmRmb3JtYXR8ZmRpc2t8Zmd8ZmdyZXB8ZmlsZXxmaW5kfGZtdHxmb2xkfGZvcm1hdHxmcmVlfGZzY2t8ZnRwfGZ1c2VyfGdhd2t8Z2l0fGdwYXJ0ZWR8Z3JlcHxncm91cGFkZHxncm91cGRlbHxncm91cG1vZHxncm91cHN8Z3J1Yi1ta2NvbmZpZ3xnemlwfGhhbHR8aGVhZHxoZ3xoaXN0b3J5fGhvc3R8aG9zdG5hbWV8aHRvcHxpY29udnxpZHxpZmNvbmZpZ3xpZmRvd258aWZ1cHxpbXBvcnR8aW5zdGFsbHxpcHxqb2JzfGpvaW58a2lsbHxraWxsYWxsfGxlc3N8bGlua3xsbnxsb2NhdGV8bG9nbmFtZXxsb2dyb3RhdGV8bG9va3xscGN8bHByfGxwcmludHxscHJpbnRkfGxwcmludHF8bHBybXxsc3xsc29mfGx5bnh8bWFrZXxtYW58bWN8bWRhZG18bWtjb25maWd8bWtkaXJ8bWtlMmZzfG1rZmlmb3xta2ZzfG1raXNvZnN8bWtub2R8bWtzd2FwfG1tdnxtb3JlfG1vc3R8bW91bnR8bXRvb2xzfG10cnxtdXR0fG12fG5hbm98bmN8bmV0c3RhdHxuaWNlfG5sfG5vaHVwfG5vdGlmeS1zZW5kfG5wbXxuc2xvb2t1cHxvcHxvcGVufHBhcnRlZHxwYXNzd2R8cGFzdGV8cGF0aGNoa3xwaW5nfHBraWxsfHBucG18cG9wZHxwcnxwcmludGNhcHxwcmludGVudnxwc3xwdXNoZHxwdnxxdW90YXxxdW90YWNoZWNrfHF1b3RhY3RsfHJhbXxyYXJ8cmNwfHJlYm9vdHxyZW1zeW5jfHJlbmFtZXxyZW5pY2V8cmV2fHJtfHJtZGlyfHJwbXxyc3luY3xzY3B8c2NyZWVufHNkaWZmfHNlZHxzZW5kbWFpbHxzZXF8c2VydmljZXxzZnRwfHNofHNoZWxsY2hlY2t8c2h1ZnxzaHV0ZG93bnxzbGVlcHxzbG9jYXRlfHNvcnR8c3BsaXR8c3NofHN0YXR8c3RyYWNlfHN1fHN1ZG98c3VtfHN1c3BlbmR8c3dhcG9ufHN5bmN8dGFjfHRhaWx8dGFyfHRlZXx0aW1lfHRpbWVvdXR8dG9wfHRvdWNofHRyfHRyYWNlcm91dGV8dHNvcnR8dHR5fHVtb3VudHx1bmFtZXx1bmV4cGFuZHx1bmlxfHVuaXRzfHVucmFyfHVuc2hhcnx1bnppcHx1cGRhdGUtZ3J1Ynx1cHRpbWV8dXNlcmFkZHx1c2VyZGVsfHVzZXJtb2R8dXNlcnN8dXVkZWNvZGV8dXVlbmNvZGV8dnx2ZGlyfHZpfHZpbXx2aXJzaHx2bXN0YXR8d2FpdHx3YXRjaHx3Y3x3Z2V0fHdoZXJlaXN8d2hpY2h8d2hvfHdob2FtaXx3cml0ZXx4YXJnc3x4ZGctb3Blbnx5YXJufHllc3x6ZW5pdHl8emlwfHpzaHx6eXBwZXIpKD89JHxbKVxcczt8Jl0pLyxsb29rYmVoaW5kOiEwfSxrZXl3b3JkOntwYXR0ZXJuOi8oXnxbXFxzO3wmXXxbPD5dXFwoKSg/OmlmfHRoZW58ZWxzZXxlbGlmfGZpfGZvcnx3aGlsZXxpbnxjYXNlfGVzYWN8ZnVuY3Rpb258c2VsZWN0fGRvfGRvbmV8dW50aWwpKD89JHxbKVxcczt8Jl0pLyxsb29rYmVoaW5kOiEwfSxidWlsdGluOntwYXR0ZXJuOi8oXnxbXFxzO3wmXXxbPD5dXFwoKSg/OlxcLnw6fGJyZWFrfGNkfGNvbnRpbnVlfGV2YWx8ZXhlY3xleGl0fGV4cG9ydHxnZXRvcHRzfGhhc2h8cHdkfHJlYWRvbmx5fHJldHVybnxzaGlmdHx0ZXN0fHRpbWVzfHRyYXB8dW1hc2t8dW5zZXR8YWxpYXN8YmluZHxidWlsdGlufGNhbGxlcnxjb21tYW5kfGRlY2xhcmV8ZWNob3xlbmFibGV8aGVscHxsZXR8bG9jYWx8bG9nb3V0fG1hcGZpbGV8cHJpbnRmfHJlYWR8cmVhZGFycmF5fHNvdXJjZXx0eXBlfHR5cGVzZXR8dWxpbWl0fHVuYWxpYXN8c2V0fHNob3B0KSg/PSR8WylcXHM7fCZdKS8sbG9va2JlaGluZDohMCxhbGlhczpcImNsYXNzLW5hbWVcIn0sYm9vbGVhbjp7cGF0dGVybjovKF58W1xcczt8Jl18Wzw+XVxcKCkoPzp0cnVlfGZhbHNlKSg/PSR8WylcXHM7fCZdKS8sbG9va2JlaGluZDohMH0sXCJmaWxlLWRlc2NyaXB0b3JcIjp7cGF0dGVybjovXFxCJlxcZFxcYi8sYWxpYXM6XCJpbXBvcnRhbnRcIn0sb3BlcmF0b3I6e3BhdHRlcm46L1xcZD88Pnw+XFx8fFxcKz18PVs9fl0/fCE9P3w8PFs8LV0/fFsmXFxkXT8+PnxcXGRbPD5dJj98Wzw+XVsmPV0/fCZbPiZdP3xcXHxbJnxdPy8saW5zaWRlOntcImZpbGUtZGVzY3JpcHRvclwiOntwYXR0ZXJuOi9eXFxkLyxhbGlhczpcImltcG9ydGFudFwifX19LHB1bmN0dWF0aW9uOi9cXCQ/XFwoXFwoP3xcXClcXCk/fFxcLlxcLnxbe31bXFxdO1xcXFxdLyxudW1iZXI6e3BhdHRlcm46LyhefFxccykoPzpbMS05XVxcZCp8MCkoPzpbLixdXFxkKyk/XFxiLyxsb29rYmVoaW5kOiEwfX0sbi5pbnNpZGU9ZS5sYW5ndWFnZXMuYmFzaDtmb3IodmFyIG89W1wiY29tbWVudFwiLFwiZnVuY3Rpb24tbmFtZVwiLFwiZm9yLW9yLXNlbGVjdFwiLFwiYXNzaWduLWxlZnRcIixcInN0cmluZ1wiLFwiZW52aXJvbm1lbnRcIixcImZ1bmN0aW9uXCIsXCJrZXl3b3JkXCIsXCJidWlsdGluXCIsXCJib29sZWFuXCIsXCJmaWxlLWRlc2NyaXB0b3JcIixcIm9wZXJhdG9yXCIsXCJwdW5jdHVhdGlvblwiLFwibnVtYmVyXCJdLGk9ci52YXJpYWJsZVsxXS5pbnNpZGUsYT0wO2E8by5sZW5ndGg7YSsrKWlbb1thXV09ZS5sYW5ndWFnZXMuYmFzaFtvW2FdXTtlLmxhbmd1YWdlcy5zaGVsbD1lLmxhbmd1YWdlcy5iYXNofShQcmlzbSksZnVuY3Rpb24oZSl7dmFyIHQ9Lyg/OlxcXFwufFteXFxcXFxcblxccl18KD86XFxufFxcclxcbj8pKD8hW1xcclxcbl0pKS8uc291cmNlO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKC88aW5uZXI+L2csKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSksUmVnRXhwKC8oKD86XnxbXlxcXFxdKSg/OlxcXFx7Mn0pKikvLnNvdXJjZStcIig/OlwiK2UrXCIpXCIpfXZhciByPS8oPzpcXFxcLnxgYCg/OlteYFxcclxcbl18YCg/IWApKStgYHxgW15gXFxyXFxuXStgfFteXFxcXHxcXHJcXG5gXSkrLy5zb3VyY2Usbz0vXFx8P19fKD86XFx8X18pK1xcfD8oPzooPzpcXG58XFxyXFxuPyl8KD8hW1xcc1xcU10pKS8uc291cmNlLnJlcGxhY2UoL19fL2csKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSksaT0vXFx8P1sgXFx0XSo6Py17Myx9Oj9bIFxcdF0qKD86XFx8WyBcXHRdKjo/LXszLH06P1sgXFx0XSopK1xcfD8oPzpcXG58XFxyXFxuPykvLnNvdXJjZTtlLmxhbmd1YWdlcy5tYXJrZG93bj1lLmxhbmd1YWdlcy5leHRlbmQoXCJtYXJrdXBcIix7fSksZS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKFwibWFya2Rvd25cIixcInByb2xvZ1wiLHtcImZyb250LW1hdHRlci1ibG9ja1wiOntwYXR0ZXJuOi8oXig/OlxccypbXFxyXFxuXSk/KS0tLSg/IS4pW1xcc1xcU10qP1tcXHJcXG5dLS0tKD8hLikvLGxvb2tiZWhpbmQ6ITAsZ3JlZWR5OiEwLGluc2lkZTp7cHVuY3R1YXRpb246L14tLS18LS0tJC8sXCJmb250LW1hdHRlclwiOntwYXR0ZXJuOi9cXFMrKD86XFxzK1xcUyspKi8sYWxpYXM6W1wieWFtbFwiLFwibGFuZ3VhZ2UteWFtbFwiXSxpbnNpZGU6ZS5sYW5ndWFnZXMueWFtbH19fSxibG9ja3F1b3RlOntwYXR0ZXJuOi9ePig/OltcXHQgXSo+KSovbSxhbGlhczpcInB1bmN0dWF0aW9uXCJ9LHRhYmxlOntwYXR0ZXJuOlJlZ0V4cChcIl5cIitvK2krXCIoPzpcIitvK1wiKSpcIixcIm1cIiksaW5zaWRlOntcInRhYmxlLWRhdGEtcm93c1wiOntwYXR0ZXJuOlJlZ0V4cChcIl4oXCIrbytpK1wiKSg/OlwiK28rXCIpKiRcIiksbG9va2JlaGluZDohMCxpbnNpZGU6e1widGFibGUtZGF0YVwiOntwYXR0ZXJuOlJlZ0V4cChyKSxpbnNpZGU6ZS5sYW5ndWFnZXMubWFya2Rvd259LHB1bmN0dWF0aW9uOi9cXHwvfX0sXCJ0YWJsZS1saW5lXCI6e3BhdHRlcm46UmVnRXhwKFwiXihcIitvK1wiKVwiK2krXCIkXCIpLGxvb2tiZWhpbmQ6ITAsaW5zaWRlOntwdW5jdHVhdGlvbjovXFx8fDo/LXszLH06Py99fSxcInRhYmxlLWhlYWRlci1yb3dcIjp7cGF0dGVybjpSZWdFeHAoXCJeXCIrbytcIiRcIiksaW5zaWRlOntcInRhYmxlLWhlYWRlclwiOntwYXR0ZXJuOlJlZ0V4cChyKSxhbGlhczpcImltcG9ydGFudFwiLGluc2lkZTplLmxhbmd1YWdlcy5tYXJrZG93bn0scHVuY3R1YXRpb246L1xcfC99fX19LGNvZGU6W3twYXR0ZXJuOi8oKD86XnxcXG4pWyBcXHRdKlxcbnwoPzpefFxcclxcbj8pWyBcXHRdKlxcclxcbj8pKD86IHs0fXxcXHQpLisoPzooPzpcXG58XFxyXFxuPykoPzogezR9fFxcdCkuKykqLyxsb29rYmVoaW5kOiEwLGFsaWFzOlwia2V5d29yZFwifSx7cGF0dGVybjovXmBgYFtcXHNcXFNdKj9eYGBgJC9tLGdyZWVkeTohMCxpbnNpZGU6e1wiY29kZS1ibG9ja1wiOntwYXR0ZXJuOi9eKGBgYC4qKD86XFxufFxcclxcbj8pKVtcXHNcXFNdKz8oPz0oPzpcXG58XFxyXFxuPyleYGBgJCkvbSxsb29rYmVoaW5kOiEwfSxcImNvZGUtbGFuZ3VhZ2VcIjp7cGF0dGVybjovXihgYGApLisvLGxvb2tiZWhpbmQ6ITB9LHB1bmN0dWF0aW9uOi9gYGAvfX1dLHRpdGxlOlt7cGF0dGVybjovXFxTLiooPzpcXG58XFxyXFxuPykoPzo9PSt8LS0rKSg/PVsgXFx0XSokKS9tLGFsaWFzOlwiaW1wb3J0YW50XCIsaW5zaWRlOntwdW5jdHVhdGlvbjovPT0rJHwtLSskL319LHtwYXR0ZXJuOi8oXlxccyopIy4rL20sbG9va2JlaGluZDohMCxhbGlhczpcImltcG9ydGFudFwiLGluc2lkZTp7cHVuY3R1YXRpb246L14jK3wjKyQvfX1dLGhyOntwYXR0ZXJuOi8oXlxccyopKFsqLV0pKD86W1xcdCBdKlxcMil7Mix9KD89XFxzKiQpL20sbG9va2JlaGluZDohMCxhbGlhczpcInB1bmN0dWF0aW9uXCJ9LGxpc3Q6e3BhdHRlcm46LyheXFxzKikoPzpbKistXXxcXGQrXFwuKSg/PVtcXHQgXS4pL20sbG9va2JlaGluZDohMCxhbGlhczpcInB1bmN0dWF0aW9uXCJ9LFwidXJsLXJlZmVyZW5jZVwiOntwYXR0ZXJuOi8hP1xcW1teXFxdXStcXF06W1xcdCBdKyg/OlxcUyt8PCg/OlxcXFwufFtePlxcXFxdKSs+KSg/OltcXHQgXSsoPzpcIig/OlxcXFwufFteXCJcXFxcXSkqXCJ8Jyg/OlxcXFwufFteJ1xcXFxdKSonfFxcKCg/OlxcXFwufFteKVxcXFxdKSpcXCkpKT8vLGluc2lkZTp7dmFyaWFibGU6e3BhdHRlcm46L14oIT9cXFspW15cXF1dKy8sbG9va2JlaGluZDohMH0sc3RyaW5nOi8oPzpcIig/OlxcXFwufFteXCJcXFxcXSkqXCJ8Jyg/OlxcXFwufFteJ1xcXFxdKSonfFxcKCg/OlxcXFwufFteKVxcXFxdKSpcXCkpJC8scHVuY3R1YXRpb246L15bXFxbXFxdITpdfFs8Pl0vfSxhbGlhczpcInVybFwifSxib2xkOntwYXR0ZXJuOm4oL1xcYl9fKD86KD8hXyk8aW5uZXI+fF8oPzooPyFfKTxpbm5lcj4pK18pK19fXFxifFxcKlxcKig/Oig/IVxcKik8aW5uZXI+fFxcKig/Oig/IVxcKik8aW5uZXI+KStcXCopK1xcKlxcKi8uc291cmNlKSxsb29rYmVoaW5kOiEwLGdyZWVkeTohMCxpbnNpZGU6e2NvbnRlbnQ6e3BhdHRlcm46LyheLi4pW1xcc1xcU10rKD89Li4kKS8sbG9va2JlaGluZDohMCxpbnNpZGU6e319LHB1bmN0dWF0aW9uOi9cXCpcXCp8X18vfX0saXRhbGljOntwYXR0ZXJuOm4oL1xcYl8oPzooPyFfKTxpbm5lcj58X18oPzooPyFfKTxpbm5lcj4pK19fKStfXFxifFxcKig/Oig/IVxcKik8aW5uZXI+fFxcKlxcKig/Oig/IVxcKik8aW5uZXI+KStcXCpcXCopK1xcKi8uc291cmNlKSxsb29rYmVoaW5kOiEwLGdyZWVkeTohMCxpbnNpZGU6e2NvbnRlbnQ6e3BhdHRlcm46LyheLilbXFxzXFxTXSsoPz0uJCkvLGxvb2tiZWhpbmQ6ITAsaW5zaWRlOnt9fSxwdW5jdHVhdGlvbjovWypfXS99fSxzdHJpa2U6e3BhdHRlcm46bigvKH5+PykoPzooPyF+KTxpbm5lcj4pK1xcMi8uc291cmNlKSxsb29rYmVoaW5kOiEwLGdyZWVkeTohMCxpbnNpZGU6e2NvbnRlbnQ6e3BhdHRlcm46Lyhefn4/KVtcXHNcXFNdKyg/PVxcMSQpLyxsb29rYmVoaW5kOiEwLGluc2lkZTp7fX0scHVuY3R1YXRpb246L35+Py99fSxcImNvZGUtc25pcHBldFwiOntwYXR0ZXJuOi8oXnxbXlxcXFxgXSkoPzpgYFteYFxcclxcbl0rKD86YFteYFxcclxcbl0rKSpgYCg/IWApfGBbXmBcXHJcXG5dK2AoPyFgKSkvLGxvb2tiZWhpbmQ6ITAsZ3JlZWR5OiEwLGFsaWFzOltcImNvZGVcIixcImtleXdvcmRcIl19LHVybDp7cGF0dGVybjpuKC8hP1xcWyg/Oig/IVxcXSk8aW5uZXI+KStcXF0oPzpcXChbXlxccyldKyg/OltcXHQgXStcIig/OlxcXFwufFteXCJcXFxcXSkqXCIpP1xcKXxbIFxcdF0/XFxbKD86KD8hXFxdKTxpbm5lcj4pK1xcXSkvLnNvdXJjZSksbG9va2JlaGluZDohMCxncmVlZHk6ITAsaW5zaWRlOntvcGVyYXRvcjovXiEvLGNvbnRlbnQ6e3BhdHRlcm46LyheXFxbKVteXFxdXSsoPz1cXF0pLyxsb29rYmVoaW5kOiEwLGluc2lkZTp7fX0sdmFyaWFibGU6e3BhdHRlcm46LyheXFxdWyBcXHRdP1xcWylbXlxcXV0rKD89XFxdJCkvLGxvb2tiZWhpbmQ6ITB9LHVybDp7cGF0dGVybjovKF5cXF1cXCgpW15cXHMpXSsvLGxvb2tiZWhpbmQ6ITB9LHN0cmluZzp7cGF0dGVybjovKF5bIFxcdF0rKVwiKD86XFxcXC58W15cIlxcXFxdKSpcIig/PVxcKSQpLyxsb29rYmVoaW5kOiEwfX19fSksW1widXJsXCIsXCJib2xkXCIsXCJpdGFsaWNcIixcInN0cmlrZVwiXS5mb3JFYWNoKChmdW5jdGlvbih0KXtbXCJ1cmxcIixcImJvbGRcIixcIml0YWxpY1wiLFwic3RyaWtlXCIsXCJjb2RlLXNuaXBwZXRcIl0uZm9yRWFjaCgoZnVuY3Rpb24obil7dCE9PW4mJihlLmxhbmd1YWdlcy5tYXJrZG93blt0XS5pbnNpZGUuY29udGVudC5pbnNpZGVbbl09ZS5sYW5ndWFnZXMubWFya2Rvd25bbl0pfSkpfSkpLGUuaG9va3MuYWRkKFwiYWZ0ZXItdG9rZW5pemVcIiwoZnVuY3Rpb24oZSl7XCJtYXJrZG93blwiIT09ZS5sYW5ndWFnZSYmXCJtZFwiIT09ZS5sYW5ndWFnZXx8ZnVuY3Rpb24gZSh0KXtpZih0JiZcInN0cmluZ1wiIT10eXBlb2YgdClmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspe3ZhciBvPXRbbl07aWYoXCJjb2RlXCI9PT1vLnR5cGUpe3ZhciBpPW8uY29udGVudFsxXSxhPW8uY29udGVudFszXTtpZihpJiZhJiZcImNvZGUtbGFuZ3VhZ2VcIj09PWkudHlwZSYmXCJjb2RlLWJsb2NrXCI9PT1hLnR5cGUmJlwic3RyaW5nXCI9PXR5cGVvZiBpLmNvbnRlbnQpe3ZhciB1PWkuY29udGVudC5yZXBsYWNlKC9cXGIjL2csXCJzaGFycFwiKS5yZXBsYWNlKC9cXGJcXCtcXCsvZyxcInBwXCIpLHM9XCJsYW5ndWFnZS1cIisodT0oL1thLXpdW1xcdy1dKi9pLmV4ZWModSl8fFtcIlwiXSlbMF0udG9Mb3dlckNhc2UoKSk7YS5hbGlhcz9cInN0cmluZ1wiPT10eXBlb2YgYS5hbGlhcz9hLmFsaWFzPVthLmFsaWFzLHNdOmEuYWxpYXMucHVzaChzKTphLmFsaWFzPVtzXX19ZWxzZSBlKG8uY29udGVudCl9fShlLnRva2Vucyl9KSksZS5ob29rcy5hZGQoXCJ3cmFwXCIsKGZ1bmN0aW9uKHQpe2lmKFwiY29kZS1ibG9ja1wiPT09dC50eXBlKXtmb3IodmFyIG49XCJcIixyPTAsbz10LmNsYXNzZXMubGVuZ3RoO3I8bztyKyspe3ZhciBpPXQuY2xhc3Nlc1tyXSxsPS9sYW5ndWFnZS0oLispLy5leGVjKGkpO2lmKGwpe249bFsxXTticmVha319dmFyIGM9ZS5sYW5ndWFnZXNbbl07aWYoYyl0LmNvbnRlbnQ9ZS5oaWdobGlnaHQoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKGEsXCJcIik7cmV0dXJuIHQucmVwbGFjZSgvJihcXHd7MSw4fXwjeD9bXFxkYS1mXXsxLDh9KTsvZ2ksKGZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuXCIjXCI9PT0odD10LnRvTG93ZXJDYXNlKCkpWzBdPyhuPVwieFwiPT09dFsxXT9wYXJzZUludCh0LnNsaWNlKDIpLDE2KTpOdW1iZXIodC5zbGljZSgxKSkscyhuKSk6dVt0XXx8ZX0pKX0odC5jb250ZW50KSxjLG4pO2Vsc2UgaWYobiYmXCJub25lXCIhPT1uJiZlLnBsdWdpbnMuYXV0b2xvYWRlcil7dmFyIGY9XCJtZC1cIisobmV3IERhdGUpLnZhbHVlT2YoKStcIi1cIitNYXRoLmZsb29yKDFlMTYqTWF0aC5yYW5kb20oKSk7dC5hdHRyaWJ1dGVzLmlkPWYsZS5wbHVnaW5zLmF1dG9sb2FkZXIubG9hZExhbmd1YWdlcyhuLChmdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpO3QmJih0LmlubmVySFRNTD1lLmhpZ2hsaWdodCh0LnRleHRDb250ZW50LGUubGFuZ3VhZ2VzW25dLG4pKX0pKX19fSkpO3ZhciBhPVJlZ0V4cChlLmxhbmd1YWdlcy5tYXJrdXAudGFnLnBhdHRlcm4uc291cmNlLFwiZ2lcIiksdT17YW1wOlwiJlwiLGx0OlwiPFwiLGd0OlwiPlwiLHF1b3Q6J1wiJ30scz1TdHJpbmcuZnJvbUNvZGVQb2ludHx8U3RyaW5nLmZyb21DaGFyQ29kZTtlLmxhbmd1YWdlcy5tZD1lLmxhbmd1YWdlcy5tYXJrZG93bn0oUHJpc20pLFByaXNtLmxhbmd1YWdlcy5sdWE9e2NvbW1lbnQ6L14jIS4rfC0tKD86XFxbKD0qKVxcW1tcXHNcXFNdKj9cXF1cXDFcXF18LiopL20sc3RyaW5nOntwYXR0ZXJuOi8oW1wiJ10pKD86KD8hXFwxKVteXFxcXFxcclxcbl18XFxcXHooPzpcXHJcXG58XFxzKXxcXFxcKD86XFxyXFxufFteel0pKSpcXDF8XFxbKD0qKVxcW1tcXHNcXFNdKj9cXF1cXDJcXF0vLGdyZWVkeTohMH0sbnVtYmVyOi9cXGIweFthLWZcXGRdKyg/OlxcLlthLWZcXGRdKik/KD86cFsrLV0/XFxkKyk/XFxifFxcYlxcZCsoPzpcXC5cXEJ8KD86XFwuXFxkKik/KD86ZVsrLV0/XFxkKyk/XFxiKXxcXEJcXC5cXGQrKD86ZVsrLV0/XFxkKyk/XFxiL2ksa2V5d29yZDovXFxiKD86YW5kfGJyZWFrfGRvfGVsc2V8ZWxzZWlmfGVuZHxmYWxzZXxmb3J8ZnVuY3Rpb258Z290b3xpZnxpbnxsb2NhbHxuaWx8bm90fG9yfHJlcGVhdHxyZXR1cm58dGhlbnx0cnVlfHVudGlsfHdoaWxlKVxcYi8sZnVuY3Rpb246Lyg/IVxcZClcXHcrKD89XFxzKig/Olsoe10pKS8sb3BlcmF0b3I6Wy9bLSsqJV4mfCNdfFxcL1xcLz98PFs8PV0/fD5bPj1dP3xbPX5dPT8vLHtwYXR0ZXJuOi8oXnxbXi5dKVxcLlxcLig/IVxcLikvLGxvb2tiZWhpbmQ6ITB9XSxwdW5jdHVhdGlvbjovW1xcW1xcXSgpe30sO118XFwuK3w6Ky99LFByaXNtLmxhbmd1YWdlcy5ncm9vdnk9UHJpc20ubGFuZ3VhZ2VzLmV4dGVuZChcImNsaWtlXCIse3N0cmluZzpbe3BhdHRlcm46LyhcIlwiXCJ8JycnKSg/OlteXFxcXF18XFxcXFtcXHNcXFNdKSo/XFwxfFxcJFxcLyg/OlteLyRdfFxcJCg/OlsvJF18KD8hWy8kXSkpfFxcLyg/IVxcJCkpKlxcL1xcJC8sZ3JlZWR5OiEwfSx7cGF0dGVybjovKFtcIicvXSkoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxncmVlZHk6ITB9XSxrZXl3b3JkOi9cXGIoPzphc3xkZWZ8aW58YWJzdHJhY3R8YXNzZXJ0fGJvb2xlYW58YnJlYWt8Ynl0ZXxjYXNlfGNhdGNofGNoYXJ8Y2xhc3N8Y29uc3R8Y29udGludWV8ZGVmYXVsdHxkb3xkb3VibGV8ZWxzZXxlbnVtfGV4dGVuZHN8ZmluYWx8ZmluYWxseXxmbG9hdHxmb3J8Z290b3xpZnxpbXBsZW1lbnRzfGltcG9ydHxpbnN0YW5jZW9mfGludHxpbnRlcmZhY2V8bG9uZ3xuYXRpdmV8bmV3fHBhY2thZ2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJldHVybnxzaG9ydHxzdGF0aWN8c3RyaWN0ZnB8c3VwZXJ8c3dpdGNofHN5bmNocm9uaXplZHx0aGlzfHRocm93fHRocm93c3x0cmFpdHx0cmFuc2llbnR8dHJ5fHZvaWR8dm9sYXRpbGV8d2hpbGUpXFxiLyxudW1iZXI6L1xcYig/OjBiWzAxX10rfDB4W1xcZGEtZl9dKyg/OlxcLltcXGRhLWZfcFxcLV0rKT98W1xcZF9dKyg/OlxcLltcXGRfXSspPyg/OmVbKy1dP1xcZCspPylbZ2xpZGZdP1xcYi9pLG9wZXJhdG9yOntwYXR0ZXJuOi8oXnxbXi5dKSg/On58PT0/fj98XFw/Wy46XT98XFwqKD86Wy49XXxcXCo9Pyk/fFxcLltAJl18XFwuXFwuPHxcXC5cXC4oPyFcXC4pfC1bLT0+XT98XFwrWys9XT98IT0/fDwoPzo8PT98PT4/KT98Pig/Oj4+Pz0/fD0pP3wmWyY9XT98XFx8W3w9XT98XFwvPT98XFxePT98JT0/KS8sbG9va2JlaGluZDohMH0scHVuY3R1YXRpb246L1xcLit8W3t9W1xcXTsoKSw6JF0vfSksUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShcImdyb292eVwiLFwic3RyaW5nXCIse3NoZWJhbmc6e3BhdHRlcm46LyMhLisvLGFsaWFzOlwiY29tbWVudFwifX0pLFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoXCJncm9vdnlcIixcInB1bmN0dWF0aW9uXCIse1wic3BvY2stYmxvY2tcIjovXFxiKD86c2V0dXB8Z2l2ZW58d2hlbnx0aGVufGFuZHxjbGVhbnVwfGV4cGVjdHx3aGVyZSk6L30pLFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoXCJncm9vdnlcIixcImZ1bmN0aW9uXCIse2Fubm90YXRpb246e3BhdHRlcm46LyhefFteLl0pQFxcdysvLGxvb2tiZWhpbmQ6ITAsYWxpYXM6XCJwdW5jdHVhdGlvblwifX0pLFByaXNtLmhvb2tzLmFkZChcIndyYXBcIiwoZnVuY3Rpb24oZSl7aWYoXCJncm9vdnlcIj09PWUubGFuZ3VhZ2UmJlwic3RyaW5nXCI9PT1lLnR5cGUpe3ZhciB0PWUuY29udGVudFswXTtpZihcIidcIiE9dCl7dmFyIG49LyhbXlxcXFxdKSg/OlxcJCg/Olxcey4qP1xcfXxbXFx3Ll0rKSkvO1wiJFwiPT09dCYmKG49LyhbXlxcJF0pKD86XFwkKD86XFx7Lio/XFx9fFtcXHcuXSspKS8pLGUuY29udGVudD1lLmNvbnRlbnQucmVwbGFjZSgvJmx0Oy9nLFwiPFwiKS5yZXBsYWNlKC8mYW1wOy9nLFwiJlwiKSxlLmNvbnRlbnQ9UHJpc20uaGlnaGxpZ2h0KGUuY29udGVudCx7ZXhwcmVzc2lvbjp7cGF0dGVybjpuLGxvb2tiZWhpbmQ6ITAsaW5zaWRlOlByaXNtLmxhbmd1YWdlcy5ncm9vdnl9fSksZS5jbGFzc2VzLnB1c2goXCIvXCI9PT10P1wicmVnZXhcIjpcImdzdHJpbmdcIil9fX0pKTt2YXIgRmdlPVtcImNvbW1lbnRcIixcInByb2xvZ1wiLFwiZG9jdHlwZVwiLFwiY2RhdGFcIixcInB1bmN0dWF0aW9uXCIsXCJuYW1lc3BhY2VcIixcInByb3BlcnR5XCIsXCJ0YWdcIixcImJvb2xlYW5cIixcIm51bWJlclwiLFwiY29uc3RhbnRcIixcInN5bWJvbFwiLFwiZGVsZXRlZFwiLFwic2VsZWN0b3JcIixcImF0dHItbmFtZVwiLFwic3RyaW5nXCIsXCJidWlsdGluXCIsXCJpbnNlcnRlZFwiLFwib3BlcmF0b3JcIixcImVudGl0eVwiLFwidXJsXCIsXCJzdHJpbmdcIixcImF0cnVsZVwiLFwiYXR0ci12YWx1ZVwiLFwia2V5d29yZFwiLFwiZnVuY3Rpb25cIixcImNsYXNzLW5hbWVcIixcInJlZ2V4XCIsXCJpbXBvcnRhbnRcIixcInZhcmlhYmxlXCIsXCJib2xkXCIsXCJpdGFsaWNcIixcImVudGl0eVwiLFwiY2hhclwiXTtmdW5jdGlvbiBUZ2UoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/ZS5sZW5ndGg6XCJzdHJpbmdcIj09dHlwZW9mIGUuY29udGVudD9lLmNvbnRlbnQubGVuZ3RoOmUuY29udGVudC5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrVGdlKHQpfSksMCl9dmFyIF9nZSxQZ2U9QWRlLlN0cmluZyxqZ2U9ZnVuY3Rpb24oZSl7aWYoXCJTeW1ib2xcIj09PWhoZShlKSl0aHJvdyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZ1wiKTtyZXR1cm4gUGdlKGUpfSxOZ2U9ZnVuY3Rpb24oKXt2YXIgZT1icGUodGhpcyksdD1cIlwiO3JldHVybiBlLmdsb2JhbCYmKHQrPVwiZ1wiKSxlLmlnbm9yZUNhc2UmJih0Kz1cImlcIiksZS5tdWx0aWxpbmUmJih0Kz1cIm1cIiksZS5kb3RBbGwmJih0Kz1cInNcIiksZS51bmljb2RlJiYodCs9XCJ1XCIpLGUuc3RpY2t5JiYodCs9XCJ5XCIpLHR9LElnZT1BZGUuUmVnRXhwLExnZT10cGUoKGZ1bmN0aW9uKCl7dmFyIGU9SWdlKFwiYVwiLFwieVwiKTtyZXR1cm4gZS5sYXN0SW5kZXg9MixudWxsIT1lLmV4ZWMoXCJhYmNkXCIpfSkpLFJnZT1MZ2V8fHRwZSgoZnVuY3Rpb24oKXtyZXR1cm4hSWdlKFwiYVwiLFwieVwiKS5zdGlja3l9KSksTWdlPXtCUk9LRU5fQ0FSRVQ6TGdlfHx0cGUoKGZ1bmN0aW9uKCl7dmFyIGU9SWdlKFwiXnJcIixcImd5XCIpO3JldHVybiBlLmxhc3RJbmRleD0yLG51bGwhPWUuZXhlYyhcInN0clwiKX0pKSxNSVNTRURfU1RJQ0tZOlJnZSxVTlNVUFBPUlRFRF9ZOkxnZX0semdlPWZwZT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe2JwZShlKTtmb3IodmFyIG4scj1KaGUodCksbz14Z2UodCksaT1vLmxlbmd0aCxhPTA7aT5hOylJcGUuZihlLG49b1thKytdLHJbbl0pO3JldHVybiBlfSwkZ2U9S2RlKFwiZG9jdW1lbnRcIixcImRvY3VtZW50RWxlbWVudFwiKSxIZ2U9cXBlKFwiSUVfUFJPVE9cIiksVmdlPWZ1bmN0aW9uKCl7fSxVZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuXCI8c2NyaXB0PlwiK2UrXCI8XFwvc2NyaXB0PlwifSxXZ2U9ZnVuY3Rpb24oZSl7ZS53cml0ZShVZ2UoXCJcIikpLGUuY2xvc2UoKTt2YXIgdD1lLnBhcmVudFdpbmRvdy5PYmplY3Q7cmV0dXJuIGU9bnVsbCx0fSxHZ2U9ZnVuY3Rpb24oKXt0cnl7X2dlPW5ldyBBY3RpdmVYT2JqZWN0KFwiaHRtbGZpbGVcIil9Y2F0Y2goZSl7fXZhciBlLHQ7R2dlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5kb21haW4mJl9nZT9XZ2UoX2dlKTooKHQ9Z3BlKFwiaWZyYW1lXCIpKS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLCRnZS5hcHBlbmRDaGlsZCh0KSx0LnNyYz1TdHJpbmcoXCJqYXZhc2NyaXB0OlwiKSwoZT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxlLndyaXRlKFVnZShcImRvY3VtZW50LkY9T2JqZWN0XCIpKSxlLmNsb3NlKCksZS5GKTpXZ2UoX2dlKTtmb3IodmFyIG49c2dlLmxlbmd0aDtuLS07KWRlbGV0ZSBHZ2UucHJvdG90eXBlW3NnZVtuXV07cmV0dXJuIEdnZSgpfTtLcGVbSGdlXT0hMDt2YXIgcWdlLEtnZSxZZ2U9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PWU/KFZnZS5wcm90b3R5cGU9YnBlKGUpLG49bmV3IFZnZSxWZ2UucHJvdG90eXBlPW51bGwsbltIZ2VdPWUpOm49R2dlKCksdm9pZCAwPT09dD9uOnpnZShuLHQpfSxYZ2U9QWRlLlJlZ0V4cCxaZ2U9dHBlKChmdW5jdGlvbigpe3ZhciBlPVhnZShcIi5cIixcInNcIik7cmV0dXJuIShlLmRvdEFsbCYmZS5leGVjKFwiXFxuXCIpJiZcInNcIj09PWUuZmxhZ3MpfSkpLEpnZT1BZGUuUmVnRXhwLFFnZT10cGUoKGZ1bmN0aW9uKCl7dmFyIGU9SmdlKFwiKD88YT5iKVwiLFwiZ1wiKTtyZXR1cm5cImJcIiE9PWUuZXhlYyhcImJcIikuZ3JvdXBzLmF8fFwiYmNcIiE9PVwiYlwiLnJlcGxhY2UoZSxcIiQ8YT5jXCIpfSkpLGV2ZT1uaGUuZ2V0LHR2ZT1GZGUoXCJuYXRpdmUtc3RyaW5nLXJlcGxhY2VcIixTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLG52ZT1SZWdFeHAucHJvdG90eXBlLmV4ZWMscnZlPW52ZSxvdmU9TmRlKFwiXCIuY2hhckF0KSxpdmU9TmRlKFwiXCIuaW5kZXhPZiksYXZlPU5kZShcIlwiLnJlcGxhY2UpLHV2ZT1OZGUoXCJcIi5zbGljZSksc3ZlPShLZ2U9L2IqL2csRXBlKG52ZSxxZ2U9L2EvLFwiYVwiKSxFcGUobnZlLEtnZSxcImFcIiksMCE9PXFnZS5sYXN0SW5kZXh8fDAhPT1LZ2UubGFzdEluZGV4KSxsdmU9TWdlLkJST0tFTl9DQVJFVCxjdmU9dm9pZCAwIT09LygpPz8vLmV4ZWMoXCJcIilbMV07KHN2ZXx8Y3ZlfHxsdmV8fFpnZXx8UWdlKSYmKHJ2ZT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxpLGEsdSxzPXRoaXMsbD1ldmUocyksYz1qZ2UoZSksZj1sLnJhdztpZihmKXJldHVybiBmLmxhc3RJbmRleD1zLmxhc3RJbmRleCx0PUVwZShydmUsZixjKSxzLmxhc3RJbmRleD1mLmxhc3RJbmRleCx0O3ZhciBkPWwuZ3JvdXBzLHA9bHZlJiZzLnN0aWNreSxoPUVwZShOZ2UscyksZz1zLnNvdXJjZSx2PTAseT1jO2lmKHAmJihoPWF2ZShoLFwieVwiLFwiXCIpLC0xPT09aXZlKGgsXCJnXCIpJiYoaCs9XCJnXCIpLHk9dXZlKGMscy5sYXN0SW5kZXgpLHMubGFzdEluZGV4PjAmJighcy5tdWx0aWxpbmV8fHMubXVsdGlsaW5lJiZcIlxcblwiIT09b3ZlKGMscy5sYXN0SW5kZXgtMSkpJiYoZz1cIig/OiBcIitnK1wiKVwiLHk9XCIgXCIreSx2KyspLG49bmV3IFJlZ0V4cChcIl4oPzpcIitnK1wiKVwiLGgpKSxjdmUmJihuPW5ldyBSZWdFeHAoXCJeXCIrZytcIiQoPyFcXFxccylcIixoKSksc3ZlJiYocj1zLmxhc3RJbmRleCksbz1FcGUobnZlLHA/bjpzLHkpLHA/bz8oby5pbnB1dD11dmUoby5pbnB1dCx2KSxvWzBdPXV2ZShvWzBdLHYpLG8uaW5kZXg9cy5sYXN0SW5kZXgscy5sYXN0SW5kZXgrPW9bMF0ubGVuZ3RoKTpzLmxhc3RJbmRleD0wOnN2ZSYmbyYmKHMubGFzdEluZGV4PXMuZ2xvYmFsP28uaW5kZXgrb1swXS5sZW5ndGg6ciksY3ZlJiZvJiZvLmxlbmd0aD4xJiZFcGUodHZlLG9bMF0sbiwoZnVuY3Rpb24oKXtmb3IoaT0xO2k8YXJndW1lbnRzLmxlbmd0aC0yO2krKyl2b2lkIDA9PT1hcmd1bWVudHNbaV0mJihvW2ldPXZvaWQgMCl9KSksbyYmZClmb3Ioby5ncm91cHM9YT1ZZ2UobnVsbCksaT0wO2k8ZC5sZW5ndGg7aSsrKWFbKHU9ZFtpXSlbMF1dPW9bdVsxXV07cmV0dXJuIG99KTt2YXIgZnZlPXJ2ZTtTZ2Uoe3RhcmdldDpcIlJlZ0V4cFwiLHByb3RvOiEwLGZvcmNlZDovLi8uZXhlYyE9PWZ2ZX0se2V4ZWM6ZnZlfSk7dmFyIGR2ZT1GdW5jdGlvbi5wcm90b3R5cGUscHZlPWR2ZS5hcHBseSxodmU9ZHZlLmJpbmQsZ3ZlPWR2ZS5jYWxsLHZ2ZT1cIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5hcHBseXx8KGh2ZT9ndmUuYmluZChwdmUpOmZ1bmN0aW9uKCl7cmV0dXJuIGd2ZS5hcHBseShwdmUsYXJndW1lbnRzKX0pLHl2ZT1zcGUoXCJzcGVjaWVzXCIpLG12ZT1SZWdFeHAucHJvdG90eXBlLGJ2ZT1zcGUoXCJtYXRjaFwiKSx3dmU9QWRlLlR5cGVFcnJvcixFdmU9c3BlKFwic3BlY2llc1wiKSxEdmU9TmRlKFwiXCIuY2hhckF0KSxTdmU9TmRlKFwiXCIuY2hhckNvZGVBdCkseHZlPU5kZShcIlwiLnNsaWNlKSxDdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHIsbyxpPWpnZShMZGUodCkpLGE9T2hlKG4pLHU9aS5sZW5ndGg7cmV0dXJuIGE8MHx8YT49dT9lP1wiXCI6dm9pZCAwOihyPVN2ZShpLGEpKTw1NTI5Nnx8cj41NjMxOXx8YSsxPT09dXx8KG89U3ZlKGksYSsxKSk8NTYzMjB8fG8+NTczNDM/ZT9EdmUoaSxhKTpyOmU/eHZlKGksYSxhKzIpOm8tNTYzMjArKHItNTUyOTY8PDEwKSs2NTUzNn19LEF2ZT0oQ3ZlKCExKSxDdmUoITApKSxPdmU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0KyhuP0F2ZShlLHQpLmxlbmd0aDoxKX0sa3ZlPUFkZS5BcnJheSxCdmU9TWF0aC5tYXgsRnZlPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIsbyxpLGEsdT1GaGUoZSkscz1yZ2UodCx1KSxsPXJnZSh2b2lkIDA9PT1uP3U6bix1KSxjPWt2ZShCdmUobC1zLDApKSxmPTA7czxsO3MrKyxmKyspcj1jLG89ZixpPWVbc10sdm9pZCAwLChhPVBwZShvKSlpbiByP0lwZS5mKHIsYSxMcGUoMCxpKSk6clthXT1pO3JldHVybiBjLmxlbmd0aD1mLGN9LFR2ZT1BZGUuVHlwZUVycm9yLF92ZT1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhlYztpZihHZGUobikpe3ZhciByPUVwZShuLGUsdCk7cmV0dXJuIG51bGwhPT1yJiZicGUocikscn1pZihcIlJlZ0V4cFwiPT09Y2hlKGUpKXJldHVybiBFcGUoZnZlLGUsdCk7dGhyb3cgVHZlKFwiUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlclwiKX0sUHZlPU1nZS5VTlNVUFBPUlRFRF9ZLGp2ZT1NYXRoLm1pbixOdmU9W10ucHVzaCxJdmU9TmRlKC8uLy5leGVjKSxMdmU9TmRlKE52ZSksUnZlPU5kZShcIlwiLnNsaWNlKTshZnVuY3Rpb24oZSx0LG4scil7dmFyIG89c3BlKGUpLGk9IXRwZSgoZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdFtvXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT1cIlwiW2VdKHQpfSkpLGE9aSYmIXRwZSgoZnVuY3Rpb24oKXt2YXIgZT0hMSx0PS9hLztyZXR1cm4odD17fSkuY29uc3RydWN0b3I9e30sdC5jb25zdHJ1Y3Rvclt5dmVdPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHQuZmxhZ3M9XCJcIix0W29dPS8uL1tvXSx0LmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gZT0hMCxudWxsfSx0W29dKFwiXCIpLCFlfSkpO2lmKCFpfHwhYXx8bil7dmFyIHU9TmRlKC8uL1tvXSkscz1mdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHI9XCJjXCI9PVwiYWJiY1wiLnNwbGl0KC8oYikqLylbMV18fDQhPVwidGVzdFwiLnNwbGl0KC8oPzopLywtMSkubGVuZ3RofHwyIT1cImFiXCIuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGh8fDQhPVwiLlwiLnNwbGl0KC8oLj8pKC4/KS8pLmxlbmd0aHx8XCIuXCIuc3BsaXQoLygpKCkvKS5sZW5ndGg+MXx8XCJcIi5zcGxpdCgvLj8vKS5sZW5ndGg/ZnVuY3Rpb24oZSxuKXt2YXIgcixvLGk9amdlKExkZSh0aGlzKSksYT12b2lkIDA9PT1uPzQyOTQ5NjcyOTU6bj4+PjA7aWYoMD09PWEpcmV0dXJuW107aWYodm9pZCAwPT09ZSlyZXR1cm5baV07aWYoIWRwZShyPWUpfHwhKHZvaWQgMCE9PShvPXJbYnZlXSk/bzpcIlJlZ0V4cFwiPT1jaGUocikpKXJldHVybiBFcGUodCxpLGUsYSk7Zm9yKHZhciB1LHMsbCxjPVtdLGY9KGUuaWdub3JlQ2FzZT9cImlcIjpcIlwiKSsoZS5tdWx0aWxpbmU/XCJtXCI6XCJcIikrKGUudW5pY29kZT9cInVcIjpcIlwiKSsoZS5zdGlja3k/XCJ5XCI6XCJcIiksZD0wLHA9bmV3IFJlZ0V4cChlLnNvdXJjZSxmK1wiZ1wiKTsodT1FcGUoZnZlLHAsaSkpJiYhKChzPXAubGFzdEluZGV4KT5kJiYoTHZlKGMsUnZlKGksZCx1LmluZGV4KSksdS5sZW5ndGg+MSYmdS5pbmRleDxpLmxlbmd0aCYmdnZlKE52ZSxjLEZ2ZSh1LDEpKSxsPXVbMF0ubGVuZ3RoLGQ9cyxjLmxlbmd0aD49YSkpOylwLmxhc3RJbmRleD09PXUuaW5kZXgmJnAubGFzdEluZGV4Kys7cmV0dXJuIGQ9PT1pLmxlbmd0aD8hbCYmSXZlKHAsXCJcIil8fEx2ZShjLFwiXCIpOkx2ZShjLFJ2ZShpLGQpKSxjLmxlbmd0aD5hP0Z2ZShjLDAsYSk6Y306XCIwXCIuc3BsaXQodm9pZCAwLDApLmxlbmd0aD9mdW5jdGlvbihlLG4pe3JldHVybiB2b2lkIDA9PT1lJiYwPT09bj9bXTpFcGUodCx0aGlzLGUsbil9OnQsW2Z1bmN0aW9uKHQsbil7dmFyIG89TGRlKHRoaXMpLGk9bnVsbD09dD92b2lkIDA6QnBlKHQsZSk7cmV0dXJuIGk/RXBlKGksdCxvLG4pOkVwZShyLGpnZShvKSx0LG4pfSxmdW5jdGlvbihlLG8pe3ZhciBpPWJwZSh0aGlzKSxhPWpnZShlKSx1PW4ocixpLGEsbyxyIT09dCk7aWYodS5kb25lKXJldHVybiB1LnZhbHVlO3ZhciBzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1icGUoZSkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PXJ8fG51bGw9PShuPWJwZShyKVtFdmVdKT90OmZ1bmN0aW9uKGUpe2lmKE1oZShlKSlyZXR1cm4gZTt0aHJvdyB3dmUoQXBlKGUpK1wiIGlzIG5vdCBhIGNvbnN0cnVjdG9yXCIpfShuKX0oaSxSZWdFeHApLGw9aS51bmljb2RlLGM9KGkuaWdub3JlQ2FzZT9cImlcIjpcIlwiKSsoaS5tdWx0aWxpbmU/XCJtXCI6XCJcIikrKGkudW5pY29kZT9cInVcIjpcIlwiKSsoUHZlP1wiZ1wiOlwieVwiKSxmPW5ldyBzKFB2ZT9cIl4oPzpcIitpLnNvdXJjZStcIilcIjppLGMpLGQ9dm9pZCAwPT09bz80Mjk0OTY3Mjk1Om8+Pj4wO2lmKDA9PT1kKXJldHVybltdO2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gbnVsbD09PV92ZShmLGEpP1thXTpbXTtmb3IodmFyIHA9MCxoPTAsZz1bXTtoPGEubGVuZ3RoOyl7Zi5sYXN0SW5kZXg9UHZlPzA6aDt2YXIgdix5PV92ZShmLFB2ZT9SdmUoYSxoKTphKTtpZihudWxsPT09eXx8KHY9anZlKEJoZShmLmxhc3RJbmRleCsoUHZlP2g6MCkpLGEubGVuZ3RoKSk9PT1wKWg9T3ZlKGEsaCxsKTtlbHNle2lmKEx2ZShnLFJ2ZShhLHAsaCkpLGcubGVuZ3RoPT09ZClyZXR1cm4gZztmb3IodmFyIG09MTttPD15Lmxlbmd0aC0xO20rKylpZihMdmUoZyx5W21dKSxnLmxlbmd0aD09PWQpcmV0dXJuIGc7aD1wPXZ9fXJldHVybiBMdmUoZyxSdmUoYSxwKSksZ31dfShvLFwiXCJbZV0sKGZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGE9TmRlKGUpLHM9dC5leGVjO3JldHVybiBzPT09ZnZlfHxzPT09bXZlLmV4ZWM/aSYmIW8/e2RvbmU6ITAsdmFsdWU6dSh0LG4scil9Ontkb25lOiEwLHZhbHVlOmEobix0LHIpfTp7ZG9uZTohMX19KSk7dWhlKFN0cmluZy5wcm90b3R5cGUsZSxzWzBdKSx1aGUobXZlLG8sc1sxXSl9ciYmUnBlKG12ZVtvXSxcInNoYW1cIiwhMCl9KFwic3BsaXRcIiwwLCEhdHBlKChmdW5jdGlvbigpe3ZhciBlPS8oPzopLyx0PWUuZXhlYztlLmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBuPVwiYWJcIi5zcGxpdChlKTtyZXR1cm4gMiE9PW4ubGVuZ3RofHxcImFcIiE9PW5bMF18fFwiYlwiIT09blsxXX0pKSxQdmUpLFNnZSh7Z2xvYmFsOiEwfSx7Z2xvYmFsVGhpczpBZGV9KSxWcCYmKE1wLmZuLmF0dHI9VnApO3ZhciBNdmU9YWhlLlBST1BFUix6dmU9UmVnRXhwLnByb3RvdHlwZSwkdmU9enZlLnRvU3RyaW5nLEh2ZT1OZGUoTmdlKSxWdmU9dHBlKChmdW5jdGlvbigpe3JldHVyblwiL2EvYlwiIT0kdmUuY2FsbCh7c291cmNlOlwiYVwiLGZsYWdzOlwiYlwifSl9KSksVXZlPU12ZSYmXCJ0b1N0cmluZ1wiIT0kdmUubmFtZTsoVnZlfHxVdmUpJiZ1aGUoUmVnRXhwLnByb3RvdHlwZSxcInRvU3RyaW5nXCIsKGZ1bmN0aW9uKCl7dmFyIGU9YnBlKHRoaXMpLHQ9amdlKGUuc291cmNlKSxuPWUuZmxhZ3M7cmV0dXJuXCIvXCIrdCtcIi9cIitqZ2Uodm9pZCAwPT09biYmRHBlKHp2ZSxlKSYmIShcImZsYWdzXCJpbiB6dmUpP0h2ZShlKTpuKX0pLHt1bnNhZmU6ITB9KTt2YXIgV3ZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMudGl0bGU9SFAoXCJoaWdoTGlnaHRNb2R1bGUuc2VsZWN0TGFuZ1wiKSx0aGlzLmljb25Tdmc9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTY0IDY0djg5Nmg4OTZWNjRINjR6IG00ODcuNiA2OTguOGMwIDg3LjItNTEuMiAxMjctMTI1LjggMTI3LTY3LjQgMC0xMDYuNC0zNC44LTEyNi40LTc3bDY4LjYtNDEuNGMxMy4yIDIzLjQgMjUuMiA0My4yIDU0LjIgNDMuMiAyNy42IDAgNDUuMi0xMC44IDQ1LjItNTNWNDc1LjRoODQuMnYyODcuNHogbTE5OS4yIDEyN2MtNzguMiAwLTEyOC44LTM3LjItMTUzLjQtODZsNjguNi0zOS42YzE4IDI5LjQgNDEuNiA1MS4yIDgzIDUxLjIgMzQuOCAwIDU3LjItMTcuNCA1Ny4yLTQxLjYgMC0yOC44LTIyLjgtMzktNjEuNC01NmwtMjEtOWMtNjAuOC0yNS44LTEwMS01OC40LTEwMS0xMjcgMC02My4yIDQ4LjItMTExLjIgMTIzLjItMTExLjIgNTMuNiAwIDkyIDE4LjYgMTE5LjYgNjcuNEw4MDAgNTgwYy0xNC40LTI1LjgtMzAtMzYtNTQuMi0zNi0yNC42IDAtNDAuMiAxNS42LTQwLjIgMzYgMCAyNS4yIDE1LjYgMzUuNCA1MS44IDUxLjJsMjEgOWM3MS42IDMwLjYgMTExLjggNjIgMTExLjggMTMyLjQgMCA3NS42LTU5LjYgMTE3LjItMTM5LjQgMTE3LjJ6XCI+PC9wYXRoPjwvc3ZnPicsdGhpcy50YWc9XCJzZWxlY3RcIix0aGlzLndpZHRoPTk1LHRoaXMuc2VsZWN0UGFuZWxXaWR0aD0xMTV9cmV0dXJuIGUucHJvdG90eXBlLmdldE9wdGlvbnM9ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1lLmdldE1lbnVDb25maWcoXCJjb2RlU2VsZWN0TGFuZ1wiKS5jb2RlTGFuZ3Mscj12b2lkIDA9PT1uP1tdOm47dC5wdXNoKHt0ZXh0OlwicGxhaW4gdGV4dFwiLHZhbHVlOlwiXCJ9KSxyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPWUudGV4dCxyPWUudmFsdWU7dC5wdXNoKHt0ZXh0Om4sdmFsdWU6cn0pfSkpO3ZhciBvPXRoaXMuZ2V0VmFsdWUoZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS52YWx1ZT09PW8/ZS5zZWxlY3RlZD0hMDpkZWxldGUgZS5zZWxlY3RlZH0pKSx0fSxlLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRTZWxlY3RDb2RlRWxlbShlKTtpZihudWxsPT10KXJldHVyblwiXCI7aWYoIVNmLmlzRWxlbWVudCh0KSlyZXR1cm5cIlwiO3ZhciBuPXQubGFuZ3VhZ2UudG9TdHJpbmcoKSxyPWUuZ2V0TWVudUNvbmZpZyhcImNvZGVTZWxlY3RMYW5nXCIpLmNvZGVMYW5ncztyZXR1cm4odm9pZCAwPT09cj9bXTpyKS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZT09PW59KSk/bjpcIlwifSxlLnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLnNlbGVjdGlvbnx8IXRoaXMuZ2V0U2VsZWN0Q29kZUVsZW0oZSl9LGUucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT10aGlzLmdldFNlbGVjdENvZGVFbGVtKGUpKXt2YXIgbj17bGFuZ3VhZ2U6dC50b1N0cmluZygpfTttZC5zZXROb2RlcyhlLG4se21hdGNoOmZ1bmN0aW9uKGUpe3JldHVybiBRTy5jaGVja05vZGVUeXBlKGUsXCJjb2RlXCIpfX0pfX0sZS5wcm90b3R5cGUuZ2V0U2VsZWN0Q29kZUVsZW09ZnVuY3Rpb24oZSl7dmFyIHQ9UU8uZ2V0U2VsZWN0ZWROb2RlQnlUeXBlKGUsXCJjb2RlXCIpO2lmKG51bGw9PXQpcmV0dXJuIG51bGw7dmFyIG49UU8uZ2V0UGFyZW50Tm9kZShlLHQpO3JldHVybiBTZi5pc0VsZW1lbnQobik/XCJwcmVcIiE9PW4udHlwZT9udWxsOnQ6bnVsbH0sZX0oKSxHdmU9e3JlbmRlclN0eWxlOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZSxyPXQsbz1cIlwiO3JldHVybiBGZ2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bltlXSYmKG89ZSl9KSksbyYmZnVuY3Rpb24oZSx0KXtudWxsPT1lLmRhdGEmJihlLmRhdGE9e30pO3ZhciBuPWUuZGF0YTtudWxsPT1uLnByb3BzJiYobi5wcm9wcz17fSksT2JqZWN0LmFzc2lnbihuLnByb3BzLHtjbGFzc05hbWU6dH0pfShyLG89XCJ0b2tlbiBcIitvKSxyfSxwYXJzZVN0eWxlSHRtbDpmdW5jdGlvbihlLHQsbil7dmFyIHI9TXAoZSk7aWYoIVNmLmlzRWxlbWVudCh0KSlyZXR1cm4gdDtpZihcImNvZGVcIiE9PVFPLmdldE5vZGVUeXBlKHQpKXJldHVybiB0O3ZhciBvPXQsaT1yLmF0dHIoXCJjbGFzc1wiKXx8XCJcIjtyZXR1cm4gMD09PWkuaW5kZXhPZihcImxhbmd1YWdlLVwiKT9vLmxhbmd1YWdlPWkuc3BsaXQoXCItXCIpWzFdfHxcIlwiOm8ubGFuZ3VhZ2U9aS50b0xvd2VyQ2FzZSgpLG99LG1lbnVzOlt7a2V5OlwiY29kZVNlbGVjdExhbmdcIixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXdmV9LGNvbmZpZzp7Y29kZUxhbmdzOlt7dGV4dDpcIkNTU1wiLHZhbHVlOlwiY3NzXCJ9LHt0ZXh0OlwiSFRNTFwiLHZhbHVlOlwiaHRtbFwifSx7dGV4dDpcIlhNTFwiLHZhbHVlOlwieG1sXCJ9LHt0ZXh0OlwiSmF2YXNjcmlwdFwiLHZhbHVlOlwiamF2YXNjcmlwdFwifSx7dGV4dDpcIlR5cGVzY3JpcHRcIix2YWx1ZTpcInR5cGVzY3JpcHRcIn0se3RleHQ6XCJKU1hcIix2YWx1ZTpcImpzeFwifSx7dGV4dDpcIkdvXCIsdmFsdWU6XCJnb1wifSx7dGV4dDpcIlBIUFwiLHZhbHVlOlwicGhwXCJ9LHt0ZXh0OlwiQ1wiLHZhbHVlOlwiY1wifSx7dGV4dDpcIlB5dGhvblwiLHZhbHVlOlwicHl0aG9uXCJ9LHt0ZXh0OlwiSmF2YVwiLHZhbHVlOlwiamF2YVwifSx7dGV4dDpcIkMrK1wiLHZhbHVlOlwiY3BwXCJ9LHt0ZXh0OlwiQyNcIix2YWx1ZTpcImNzaGFycFwifSx7dGV4dDpcIlZpc3VhbCBCYXNpY1wiLHZhbHVlOlwidmlzdWFsLWJhc2ljXCJ9LHt0ZXh0OlwiU1FMXCIsdmFsdWU6XCJzcWxcIn0se3RleHQ6XCJSdWJ5XCIsdmFsdWU6XCJydWJ5XCJ9LHt0ZXh0OlwiU3dpZnRcIix2YWx1ZTpcInN3aWZ0XCJ9LHt0ZXh0OlwiQmFzaFwiLHZhbHVlOlwiYmFzaFwifSx7dGV4dDpcIkx1YVwiLHZhbHVlOlwibHVhXCJ9LHt0ZXh0OlwiR3Jvb3Z5XCIsdmFsdWU6XCJncm9vdnlcIn0se3RleHQ6XCJNYXJrZG93blwiLHZhbHVlOlwibWFya2Rvd25cIn1dfX1dLGVsZW1zVG9IdG1sOlt7dHlwZTpcImNvZGVcIixlbGVtVG9IdG1sOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5sYW5ndWFnZSxyPXZvaWQgMD09PW4/XCJcIjpuO3JldHVyblwiPGNvZGUgXCIrKHI/J2NsYXNzPVwibGFuZ3VhZ2UtJytyKydcIic6XCJcIikrXCI+XCIrdCtcIjwvY29kZT5cIn19XX0scXZlPS9cIi9nLEt2ZT1OZGUoXCJcIi5yZXBsYWNlKTtTZ2Uoe3RhcmdldDpcIlN0cmluZ1wiLHByb3RvOiEwLGZvcmNlZDp0cGUoKGZ1bmN0aW9uKCl7dmFyIGU9XCJcIi5hbmNob3IoJ1wiJyk7cmV0dXJuIGUhPT1lLnRvTG93ZXJDYXNlKCl8fGUuc3BsaXQoJ1wiJykubGVuZ3RoPjN9KSl9LHthbmNob3I6ZnVuY3Rpb24oZSl7cmV0dXJuXCJhXCIsXCJuYW1lXCIsdD1lLG49amdlKExkZSh0aGlzKSkscj1cIjxhXCIsKHIrPScgbmFtZT1cIicrS3ZlKGpnZSh0KSxxdmUsXCImcXVvdDtcIikrJ1wiJykrXCI+XCIrbitcIjwvYT5cIjt2YXIgdCxuLHJ9fSk7dmFyIFl2ZT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbz1mdW5jdGlvbihlLHQpe3ZhciBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiBlO3ZhciByLG8saT1uLmNhbGwoZSksYT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09dHx8dC0tID4wKSYmIShyPWkubmV4dCgpKS5kb25lOylhLnB1c2goci52YWx1ZSl9Y2F0Y2goZSl7bz17ZXJyb3I6ZX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKG49aS5yZXR1cm4pJiZuLmNhbGwoaSl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybiBhfShlLDIpLGk9b1swXSxhPW9bMV0sdT1bXSxzPWZ1bmN0aW9uKGUpe2lmKCFlZC5pc1RleHQoZSkpcmV0dXJuIG51bGw7dmFyIHQ9UU8uZ2V0UGFyZW50Tm9kZShudWxsLGUpO2lmKHQmJlwiY29kZVwiPT09UU8uZ2V0Tm9kZVR5cGUodCkpe3ZhciBuPVFPLmdldFBhcmVudE5vZGUobnVsbCx0KTtpZihuJiZcInByZVwiPT09UU8uZ2V0Tm9kZVR5cGUobikpcmV0dXJuIHR9cmV0dXJuIG51bGx9KGkpO2lmKG51bGw9PXMpcmV0dXJuIHU7dmFyIGw9cy5sYW5ndWFnZSxjPXZvaWQgMD09PWw/XCJcIjpsO2lmKCFjKXJldHVybiB1O3ZhciBmPWZ1bmN0aW9uKGUsdCl7aWYoIXQpcmV0dXJuW107dmFyIG49QmdlLmxhbmd1YWdlc1t0XTtyZXR1cm4gbj9CZ2UudG9rZW5pemUoZS50ZXh0LG4pOltdfShpLGMpLGQ9MDt0cnl7Zm9yKHZhciBwPVxuLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5mdW5jdGlvbihlKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixuPXQmJmVbdF0scj0wO2lmKG4pcmV0dXJuIG4uY2FsbChlKTtpZihlJiZcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSYmcj49ZS5sZW5ndGgmJihlPXZvaWQgMCkse3ZhbHVlOmUmJmVbcisrXSxkb25lOiFlfX19O3Rocm93IG5ldyBUeXBlRXJyb3IodD9cIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCI6XCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpfShmKSxoPXAubmV4dCgpOyFoLmRvbmU7aD1wLm5leHQoKSl7dmFyIGc9aC52YWx1ZSx2PWQrVGdlKGcpO1wic3RyaW5nXCIhPXR5cGVvZiBnJiZ1LnB1c2goKChyPXt9KVtnLnR5cGVdPSEwLHIuYW5jaG9yPXtwYXRoOmEsb2Zmc2V0OmR9LHIuZm9jdXM9e3BhdGg6YSxvZmZzZXQ6dn0scikpLGQ9dn19Y2F0Y2goZSl7dD17ZXJyb3I6ZX19ZmluYWxseXt0cnl7aCYmIWguZG9uZSYmKG49cC5yZXR1cm4pJiZuLmNhbGwocCl9ZmluYWxseXtpZih0KXRocm93IHQuZXJyb3J9fXJldHVybiB1fSxYdmU9ZnVuY3Rpb24oKXtyZXR1cm4gWHZlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW25dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0sWHZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sWnZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3Rocm93IG5ldyBFcnJvcihcIuS4jeiDveWunuS+i+WMllxcbkNhbiBub3QgY29uc3RydWN0IGEgaW5zdGFuY2VcIil9cmV0dXJuIGUuc2V0RWRpdG9yQ29uZmlnPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLmVkaXRvckNvbmZpZz1YdmUoWHZlKHt9LHRoaXMuZWRpdG9yQ29uZmlnKSxlKX0sZS5zZXRTaW1wbGVFZGl0b3JDb25maWc9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuc2ltcGxlRWRpdG9yQ29uZmlnPVh2ZShYdmUoe30sdGhpcy5zaW1wbGVFZGl0b3JDb25maWcpLGUpfSxlLnNldFRvb2xiYXJDb25maWc9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMudG9vbGJhckNvbmZpZz1YdmUoWHZlKHt9LHRoaXMudG9vbGJhckNvbmZpZyksZSl9LGUuc2V0U2ltcGxlVG9vbGJhckNvbmZpZz1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5zaW1wbGVUb29sYmFyQ29uZmlnPVh2ZShYdmUoe30sdGhpcy5zaW1wbGVUb29sYmFyQ29uZmlnKSxlKX0sZS5yZWdpc3RlclBsdWdpbj1mdW5jdGlvbihlKXt0aGlzLnBsdWdpbnMucHVzaChlKX0sZS5yZWdpc3Rlck1lbnU9ZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmtleSxyPWUuZmFjdG9yeSxvPWUuY29uZmlnLGk9b0Eob0Eoe30sbyksdHx8e30pO2lmKG51bGwhPW5rW25dKXRocm93IG5ldyBFcnJvcihcIkR1cGxpY2F0ZWQga2V5ICdcIituK1wiJyBpbiBtZW51IGl0ZW1zXCIpO25rW25dPXIsZnVuY3Rpb24oZSx0KXtudWxsIT10JiYodGtbZV09dCl9KG4saSl9KGUsdCl9LGUucmVnaXN0ZXJSZW5kZXJFbGVtPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGUsbj1lLnJlbmRlckVsZW07elRbdHx8XCJcIl09bn0oZSl9LGUucmVnaXN0ZXJSZW5kZXJTdHlsZT1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7TVQucHVzaChlKX0oZSl9LGUucmVnaXN0ZXJFbGVtVG9IdG1sPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGUsbj1lLmVsZW1Ub0h0bWw7Z2tbdHx8XCJcIl09bn0oZSl9LGUucmVnaXN0ZXJTdHlsZVRvSHRtbD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7aGsucHVzaChlKX0oZSl9LGUucmVnaXN0ZXJQcmVQYXJzZUh0bWw9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe3JGLnB1c2goZSl9KGUpfSxlLnJlZ2lzdGVyUGFyc2VFbGVtSHRtbD1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWxlY3RvcixuPWUucGFyc2VFbGVtSHRtbDtpRlt0XT1ufShlKX0sZS5yZWdpc3RlclBhcnNlU3R5bGVIdG1sPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlKXtvRi5wdXNoKGUpfShlKX0sZS5yZWdpc3Rlck1vZHVsZT1mdW5jdGlvbihlKXtKdmUoZSl9LGUuZWRpdG9yQ29uZmlnPXt9LGUuc2ltcGxlRWRpdG9yQ29uZmlnPXt9LGUudG9vbGJhckNvbmZpZz17fSxlLnNpbXBsZVRvb2xiYXJDb25maWc9e30sZS5wbHVnaW5zPVtdLGV9KCk7XG4vKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9mdW5jdGlvbiBKdmUoZSl7dmFyIHQ9ZS5tZW51cyxuPWUucmVuZGVyRWxlbXMscj1lLnJlbmRlclN0eWxlLG89ZS5lbGVtc1RvSHRtbCxpPWUuc3R5bGVUb0h0bWwsYT1lLnByZVBhcnNlSHRtbCx1PWUucGFyc2VFbGVtc0h0bWwscz1lLnBhcnNlU3R5bGVIdG1sLGw9ZS5lZGl0b3JQbHVnaW47dCYmdC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gWnZlLnJlZ2lzdGVyTWVudShlKX0pKSxuJiZuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBadmUucmVnaXN0ZXJSZW5kZXJFbGVtKGUpfSkpLHImJlp2ZS5yZWdpc3RlclJlbmRlclN0eWxlKHIpLG8mJm8uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFp2ZS5yZWdpc3RlckVsZW1Ub0h0bWwoZSl9KSksaSYmWnZlLnJlZ2lzdGVyU3R5bGVUb0h0bWwoaSksYSYmYS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gWnZlLnJlZ2lzdGVyUHJlUGFyc2VIdG1sKGUpfSkpLHUmJnUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFp2ZS5yZWdpc3RlclBhcnNlRWxlbUh0bWwoZSl9KSkscyYmWnZlLnJlZ2lzdGVyUGFyc2VTdHlsZUh0bWwocyksbCYmWnZlLnJlZ2lzdGVyUGx1Z2luKGwpfVlxLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBKdmUoZSl9KSksSnZlKGcwKSxKdmUoSjMpLEp2ZShEb2UpLEp2ZSh3ZGUpLEp2ZShHdmUpO3ZhciBRdmU9Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTk1OS44NzcgMTI4bDAuMTIzIDAuMTIzdjc2Ny43NzVsLTAuMTIzIDAuMTIySDY0LjEwMmwtMC4xMjItMC4xMjJWMTI4LjEyM2wwLjEyMi0wLjEyM2g4OTUuNzc1ek05NjAgNjRINjRDMjguNzk1IDY0IDAgOTIuNzk1IDAgMTI4djc2OGMwIDM1LjIwNSAyOC43OTUgNjQgNjQgNjRoODk2YzM1LjIwNSAwIDY0LTI4Ljc5NSA2NC02NFYxMjhjMC0zNS4yMDUtMjguNzk1LTY0LTY0LTY0ek04MzIgMjg4LjAxYzAgNTMuMDIzLTQyLjk4OCA5Ni4wMS05Ni4wMSA5Ni4wMXMtOTYuMDEtNDIuOTg3LTk2LjAxLTk2LjAxUzY4Mi45NjcgMTkyIDczNS45OSAxOTIgODMyIDIzNC45ODggODMyIDI4OC4wMXpNODk2IDgzMkgxMjhWNzA0bDIyNC4wMS0zODQgMjU2IDMyMGg2NGwyMjQuMDEtMTkyelwiPjwvcGF0aD48L3N2Zz4nO3ZhciBleWU9e2xpbms6e21lbnVLZXlzOltcImVkaXRMaW5rXCIsXCJ1bkxpbmtcIixcInZpZXdMaW5rXCJdfSxpbWFnZTp7bWVudUtleXM6W1wiaW1hZ2VXaWR0aDMwXCIsXCJpbWFnZVdpZHRoNTBcIixcImltYWdlV2lkdGgxMDBcIixcImVkaXRJbWFnZVwiLFwidmlld0ltYWdlTGlua1wiLFwiZGVsZXRlSW1hZ2VcIl19LHByZTp7bWVudUtleXM6W1wiZW50ZXJcIixcImNvZGVCbG9ja1wiLFwiY29kZVNlbGVjdExhbmdcIl19LHRhYmxlOnttZW51S2V5czpbXCJlbnRlclwiLFwidGFibGVIZWFkZXJcIixcInRhYmxlRnVsbFdpZHRoXCIsXCJpbnNlcnRUYWJsZVJvd1wiLFwiZGVsZXRlVGFibGVSb3dcIixcImluc2VydFRhYmxlQ29sXCIsXCJkZWxldGVUYWJsZUNvbFwiLFwiZGVsZXRlVGFibGVcIl19LGRpdmlkZXI6e21lbnVLZXlzOltcImVudGVyXCJdfSx2aWRlbzp7bWVudUtleXM6W1wiZW50ZXJcIixcImVkaXRWaWRlb1NpemVcIl19fTt2YXIgdHllPXtob3ZlcmJhcktleXM6WHZlKFh2ZSh7fSxleWUpLHt0ZXh0OnttZW51S2V5czpbXCJoZWFkZXJTZWxlY3RcIixcImluc2VydExpbmtcIixcImJ1bGxldGVkTGlzdFwiLFwifFwiLFwiYm9sZFwiLFwidGhyb3VnaFwiLFwiY29sb3JcIixcImJnQ29sb3JcIixcImNsZWFyU3R5bGVcIl19fSl9O1p2ZS5zZXRFZGl0b3JDb25maWcoWHZlKFh2ZSh7fSx0eWUpLHtkZWNvcmF0ZTpZdmV9KSk7dmFyIG55ZT17aG92ZXJiYXJLZXlzOmV5ZX07WnZlLnNldFNpbXBsZUVkaXRvckNvbmZpZyhYdmUoWHZlKHt9LG55ZSkse2RlY29yYXRlOll2ZX0pKTt2YXIgcnllPXt0b29sYmFyS2V5czpbXCJoZWFkZXJTZWxlY3RcIixcImJsb2NrcXVvdGVcIixcInxcIixcImJvbGRcIixcInVuZGVybGluZVwiLFwiaXRhbGljXCIse2tleTpcImdyb3VwLW1vcmUtc3R5bGVcIix0aXRsZTpIUChcImVkaXRvci5tb3JlXCIpLGljb25Tdmc6Jzxzdmcgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIj48cGF0aCBkPVwiTTIwNC44IDUwNS42bS03Ni44IDBhNzYuOCA3Ni44IDAgMSAwIDE1My42IDAgNzYuOCA3Ni44IDAgMSAwLTE1My42IDBaXCI+PC9wYXRoPjxwYXRoIGQ9XCJNNTA1LjYgNTA1LjZtLTc2LjggMGE3Ni44IDc2LjggMCAxIDAgMTUzLjYgMCA3Ni44IDc2LjggMCAxIDAtMTUzLjYgMFpcIj48L3BhdGg+PHBhdGggZD1cIk04MDYuNCA1MDUuNm0tNzYuOCAwYTc2LjggNzYuOCAwIDEgMCAxNTMuNiAwIDc2LjggNzYuOCAwIDEgMC0xNTMuNiAwWlwiPjwvcGF0aD48L3N2Zz4nLG1lbnVLZXlzOltcInRocm91Z2hcIixcImNvZGVcIixcInN1cFwiLFwic3ViXCIsXCJjbGVhclN0eWxlXCJdfSxcImNvbG9yXCIsXCJiZ0NvbG9yXCIsXCJ8XCIsXCJmb250U2l6ZVwiLFwiZm9udEZhbWlseVwiLFwibGluZUhlaWdodFwiLFwifFwiLFwiYnVsbGV0ZWRMaXN0XCIsXCJudW1iZXJlZExpc3RcIixcInRvZG9cIix7a2V5OlwiZ3JvdXAtanVzdGlmeVwiLHRpdGxlOkhQKFwiZWRpdG9yLmp1c3RpZnlcIiksaWNvblN2ZzonPHN2ZyB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiPjxwYXRoIGQ9XCJNNzY4IDc5My42djEwMi40SDUxLjJ2LTEwMi40aDcxNi44eiBtMjA0LjgtMjMwLjR2MTAyLjRINTEuMnYtMTAyLjRoOTIxLjZ6IG0tMjA0LjgtMjMwLjR2MTAyLjRINTEuMnYtMTAyLjRoNzE2Ljh6TTk3Mi44IDEwMi40djEwMi40SDUxLjJWMTAyLjRoOTIxLjZ6XCI+PC9wYXRoPjwvc3ZnPicsbWVudUtleXM6W1wianVzdGlmeUxlZnRcIixcImp1c3RpZnlSaWdodFwiLFwianVzdGlmeUNlbnRlclwiLFwianVzdGlmeUp1c3RpZnlcIl19LHtrZXk6XCJncm91cC1pbmRlbnRcIix0aXRsZTpIUChcImVkaXRvci5pbmRlbnRcIiksaWNvblN2ZzonPHN2ZyB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiPjxwYXRoIGQ9XCJNMCA2NGgxMDI0djEyOEgweiBtMzg0IDE5Mmg2NDB2MTI4SDM4NHogbTAgMTkyaDY0MHYxMjhIMzg0eiBtMCAxOTJoNjQwdjEyOEgzODR6TTAgODMyaDEwMjR2MTI4SDB6IG0wLTEyOFYzMjBsMjU2IDE5MnpcIj48L3BhdGg+PC9zdmc+JyxtZW51S2V5czpbXCJpbmRlbnRcIixcImRlbEluZGVudFwiXX0sXCJ8XCIsXCJlbW90aW9uXCIsXCJpbnNlcnRMaW5rXCIse2tleTpcImdyb3VwLWltYWdlXCIsdGl0bGU6SFAoXCJlZGl0b3IuaW1hZ2VcIiksaWNvblN2ZzpRdmUsbWVudUtleXM6W1wiaW5zZXJ0SW1hZ2VcIixcInVwbG9hZEltYWdlXCJdfSx7a2V5OlwiZ3JvdXAtdmlkZW9cIix0aXRsZTpIUChcImVkaXRvci52aWRlb1wiKSxpY29uU3ZnOic8c3ZnIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCI+PHBhdGggZD1cIk05ODEuMTg0IDE2MC4wOTZDODM3LjU2OCAxMzkuNDU2IDY3OC44NDggMTI4IDUxMiAxMjhTMTg2LjQzMiAxMzkuNDU2IDQyLjgxNiAxNjAuMDk2QzE1LjI5NiAyNjcuODA4IDAgMzg2Ljg0OCAwIDUxMnMxNS4yNjQgMjQ0LjE2IDQyLjgxNiAzNTEuOTA0QzE4Ni40NjQgODg0LjU0NCAzNDUuMTUyIDg5NiA1MTIgODk2czMyNS41NjgtMTEuNDU2IDQ2OS4xODQtMzIuMDk2QzEwMDguNzA0IDc1Ni4xOTIgMTAyNCA2MzcuMTUyIDEwMjQgNTEycy0xNS4yNjQtMjQ0LjE2LTQyLjgxNi0zNTEuOTA0ek0zODQgNzA0VjMyMGwzMjAgMTkyLTMyMCAxOTJ6XCI+PC9wYXRoPjwvc3ZnPicsbWVudUtleXM6W1wiaW5zZXJ0VmlkZW9cIixcInVwbG9hZFZpZGVvXCJdfSxcImluc2VydFRhYmxlXCIsXCJjb2RlQmxvY2tcIixcImRpdmlkZXJcIixcInxcIixcInVuZG9cIixcInJlZG9cIixcInxcIixcImZ1bGxTY3JlZW5cIl19O1p2ZS5zZXRUb29sYmFyQ29uZmlnKHJ5ZSk7dmFyIG95ZT17dG9vbGJhcktleXM6W1wiYmxvY2txdW90ZVwiLFwiaGVhZGVyMVwiLFwiaGVhZGVyMlwiLFwiaGVhZGVyM1wiLFwifFwiLFwiYm9sZFwiLFwidW5kZXJsaW5lXCIsXCJpdGFsaWNcIixcInRocm91Z2hcIixcImNvbG9yXCIsXCJiZ0NvbG9yXCIsXCJjbGVhclN0eWxlXCIsXCJ8XCIsXCJidWxsZXRlZExpc3RcIixcIm51bWJlcmVkTGlzdFwiLFwidG9kb1wiLFwianVzdGlmeUxlZnRcIixcImp1c3RpZnlSaWdodFwiLFwianVzdGlmeUNlbnRlclwiLFwifFwiLFwiaW5zZXJ0TGlua1wiLHtrZXk6XCJncm91cC1pbWFnZVwiLHRpdGxlOkhQKFwiZWRpdG9yLmltYWdlXCIpLGljb25Tdmc6UXZlLG1lbnVLZXlzOltcImluc2VydEltYWdlXCIsXCJ1cGxvYWRJbWFnZVwiXX0sXCJpbnNlcnRWaWRlb1wiLFwiaW5zZXJ0VGFibGVcIixcImNvZGVCbG9ja1wiLFwifFwiLFwidW5kb1wiLFwicmVkb1wiLFwifFwiLFwiZnVsbFNjcmVlblwiXX07ZnVuY3Rpb24gaXllKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgdD1lLnNlbGVjdG9yLG49dm9pZCAwPT09dD9cIlwiOnQscj1lLmNvbnRlbnQsbz12b2lkIDA9PT1yP1tdOnIsaT1lLmh0bWwsYT1lLmNvbmZpZyx1PXZvaWQgMD09PWE/e306YSxzPWUubW9kZSxsPVwic2ltcGxlXCI9PT0odm9pZCAwPT09cz9cImRlZmF1bHRcIjpzKT9admUuc2ltcGxlRWRpdG9yQ29uZmlnOlp2ZS5lZGl0b3JDb25maWcsYz1YdmUoWHZlKHt9LGwuaG92ZXJiYXJLZXlzfHx7fSksdS5ob3ZlcmJhcktleXN8fHt9KTtyZXR1cm4gSV8oe3NlbGVjdG9yOm4sY29uZmlnOlh2ZShYdmUoWHZlKHt9LGwpLHUpLHtob3ZlcmJhcktleXM6Y30pLGNvbnRlbnQ6byxodG1sOmkscGx1Z2luczpadmUucGx1Z2luc30pfWZ1bmN0aW9uIGF5ZShlKXt2YXIgdD1lLnNlbGVjdG9yLG49ZS5lZGl0b3Iscj1lLmNvbmZpZyxvPXZvaWQgMD09PXI/e306cixpPWUubW9kZSxhPXZvaWQgMD09PWk/XCJkZWZhdWx0XCI6aTtpZighdCl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCAnc2VsZWN0b3InIHdoZW4gY3JlYXRlIHRvb2xiYXJcIik7dmFyIHU9XCJzaW1wbGVcIj09PWE/WnZlLnNpbXBsZVRvb2xiYXJDb25maWc6WnZlLnRvb2xiYXJDb25maWcscz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNyZWF0ZSB0b29sYmFyLCBiZWNhdXNlIGVkaXRvciBpcyBudWxsXCIpO3ZhciBuPXQuc2VsZWN0b3Iscj10LmNvbmZpZyxvPXZvaWQgMD09PXI/e306cjtpZihmdW5jdGlvbihlLHQpe3JldHVybiBMRihlLFwiZGF0YS13LWUtdG9vbGJhclwiLHQpfShlLG4pKXRocm93IG5ldyBFcnJvcihcIlJlcGVhdGVkIGNyZWF0ZSB0b29sYmFyIGJ5IHNlbGVjdG9yICdcIituK1wiJ1wiKTt2YXIgaT1vQSh7dG9vbGJhcktleXM6W10sZXhjbHVkZUtleXM6W10saW5zZXJ0S2V5czp7aW5kZXg6MCxrZXlzOltdfSxtb2RhbEFwcGVuZFRvQm9keTohMX0sb3x8e30pLGE9bmV3ICRfKG4saSk7cmV0dXJuIHVPLnNldChhLGUpLHNPLnNldChlLGEpLGF9KG4se3NlbGVjdG9yOnQsY29uZmlnOlh2ZShYdmUoe30sdSksbyl9KTtyZXR1cm4gc31admUuc2V0U2ltcGxlVG9vbGJhckNvbmZpZyhveWUpO3ZhciB1eWU9e307ZXhwb3J0e1p2ZSBhcyBCb290LFFPIGFzIERvbUVkaXRvcixCZiBhcyBTbGF0ZUVkaXRvcixTZiBhcyBTbGF0ZUVsZW1lbnQsRmYgYXMgU2xhdGVMb2NhdGlvbixOZiBhcyBTbGF0ZU5vZGUsTWYgYXMgU2xhdGVQYXRoLFZmIGFzIFNsYXRlUG9pbnQscWYgYXMgU2xhdGVSYW5nZSxlZCBhcyBTbGF0ZVRleHQsbWQgYXMgU2xhdGVUcmFuc2Zvcm1zLCRfIGFzIFRvb2xiYXIsaXllIGFzIGNyZWF0ZUVkaXRvcixheWUgYXMgY3JlYXRlVG9vbGJhcixLXyBhcyBjcmVhdGVVcGxvYWRlcix1eWUgYXMgZGVmYXVsdCxDXyBhcyBnZW5Nb2RhbEJ1dHRvbkVsZW1zLFNfIGFzIGdlbk1vZGFsSW5wdXRFbGVtcyx4XyBhcyBnZW5Nb2RhbFRleHRhcmVhRWxlbXMsTVAgYXMgaTE4bkFkZFJlc291cmNlcyx6UCBhcyBpMThuQ2hhbmdlTGFuZ3VhZ2UsJFAgYXMgaTE4bkdldFJlc291cmNlcyxIUCBhcyB0fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmVzbS5qcy5tYXBcbiIsIi8qISBAbGljZW5zZSBET01QdXJpZnkgMy4xLjYgfCAoYykgQ3VyZTUzIGFuZCBvdGhlciBjb250cmlidXRvcnMgfCBSZWxlYXNlZCB1bmRlciB0aGUgQXBhY2hlIGxpY2Vuc2UgMi4wIGFuZCBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDIuMCB8IGdpdGh1Yi5jb20vY3VyZTUzL0RPTVB1cmlmeS9ibG9iLzMuMS42L0xJQ0VOU0UgKi9cblxuY29uc3Qge1xuICBlbnRyaWVzLFxuICBzZXRQcm90b3R5cGVPZixcbiAgaXNGcm96ZW4sXG4gIGdldFByb3RvdHlwZU9mLFxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Jcbn0gPSBPYmplY3Q7XG5sZXQge1xuICBmcmVlemUsXG4gIHNlYWwsXG4gIGNyZWF0ZVxufSA9IE9iamVjdDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tbXV0YWJsZS1leHBvcnRzXG5sZXQge1xuICBhcHBseSxcbiAgY29uc3RydWN0XG59ID0gdHlwZW9mIFJlZmxlY3QgIT09ICd1bmRlZmluZWQnICYmIFJlZmxlY3Q7XG5pZiAoIWZyZWV6ZSkge1xuICBmcmVlemUgPSBmdW5jdGlvbiBmcmVlemUoeCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuaWYgKCFzZWFsKSB7XG4gIHNlYWwgPSBmdW5jdGlvbiBzZWFsKHgpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbmlmICghYXBwbHkpIHtcbiAgYXBwbHkgPSBmdW5jdGlvbiBhcHBseShmdW4sIHRoaXNWYWx1ZSwgYXJncykge1xuICAgIHJldHVybiBmdW4uYXBwbHkodGhpc1ZhbHVlLCBhcmdzKTtcbiAgfTtcbn1cbmlmICghY29uc3RydWN0KSB7XG4gIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIGNvbnN0cnVjdChGdW5jLCBhcmdzKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jKC4uLmFyZ3MpO1xuICB9O1xufVxuY29uc3QgYXJyYXlGb3JFYWNoID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUuZm9yRWFjaCk7XG5jb25zdCBhcnJheVBvcCA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLnBvcCk7XG5jb25zdCBhcnJheVB1c2ggPSB1bmFwcGx5KEFycmF5LnByb3RvdHlwZS5wdXNoKTtcbmNvbnN0IHN0cmluZ1RvTG93ZXJDYXNlID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKTtcbmNvbnN0IHN0cmluZ1RvU3RyaW5nID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nKTtcbmNvbnN0IHN0cmluZ01hdGNoID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLm1hdGNoKTtcbmNvbnN0IHN0cmluZ1JlcGxhY2UgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG5jb25zdCBzdHJpbmdJbmRleE9mID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLmluZGV4T2YpO1xuY29uc3Qgc3RyaW5nVHJpbSA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS50cmltKTtcbmNvbnN0IG9iamVjdEhhc093blByb3BlcnR5ID0gdW5hcHBseShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbmNvbnN0IHJlZ0V4cFRlc3QgPSB1bmFwcGx5KFJlZ0V4cC5wcm90b3R5cGUudGVzdCk7XG5jb25zdCB0eXBlRXJyb3JDcmVhdGUgPSB1bmNvbnN0cnVjdChUeXBlRXJyb3IpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2l0aCBhIHNwZWNpZmllZCB0aGlzQXJnIGFuZCBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyAtIFRoZSBmdW5jdGlvbiB0byBiZSB3cmFwcGVkIGFuZCBjYWxsZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgbmV3IGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIGdpdmVuIGZ1bmN0aW9uIHdpdGggYSBzcGVjaWZpZWQgdGhpc0FyZyBhbmQgYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiB1bmFwcGx5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzQXJnKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZ1bmN0aW9uIHRoYXQgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gY29uc3RydWN0b3IgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgLSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gdG8gYmUgd3JhcHBlZCBhbmQgY2FsbGVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB0aGF0IGNvbnN0cnVjdHMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gdW5jb25zdHJ1Y3QoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cbiAgICByZXR1cm4gY29uc3RydWN0KGZ1bmMsIGFyZ3MpO1xuICB9O1xufVxuXG4vKipcbiAqIEFkZCBwcm9wZXJ0aWVzIHRvIGEgbG9va3VwIHRhYmxlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHNldCAtIFRoZSBzZXQgdG8gd2hpY2ggZWxlbWVudHMgd2lsbCBiZSBhZGRlZC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IC0gVGhlIGFycmF5IGNvbnRhaW5pbmcgZWxlbWVudHMgdG8gYmUgYWRkZWQgdG8gdGhlIHNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybUNhc2VGdW5jIC0gQW4gb3B0aW9uYWwgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBjYXNlIG9mIGVhY2ggZWxlbWVudCBiZWZvcmUgYWRkaW5nIHRvIHRoZSBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgbW9kaWZpZWQgc2V0IHdpdGggYWRkZWQgZWxlbWVudHMuXG4gKi9cbmZ1bmN0aW9uIGFkZFRvU2V0KHNldCwgYXJyYXkpIHtcbiAgbGV0IHRyYW5zZm9ybUNhc2VGdW5jID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBzdHJpbmdUb0xvd2VyQ2FzZTtcbiAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgLy8gTWFrZSAnaW4nIGFuZCB0cnV0aHkgY2hlY2tzIGxpa2UgQm9vbGVhbihzZXQuY29uc3RydWN0b3IpXG4gICAgLy8gaW5kZXBlbmRlbnQgb2YgYW55IHByb3BlcnRpZXMgZGVmaW5lZCBvbiBPYmplY3QucHJvdG90eXBlLlxuICAgIC8vIFByZXZlbnQgcHJvdG90eXBlIHNldHRlcnMgZnJvbSBpbnRlcmNlcHRpbmcgc2V0IGFzIGEgdGhpcyB2YWx1ZS5cbiAgICBzZXRQcm90b3R5cGVPZihzZXQsIG51bGwpO1xuICB9XG4gIGxldCBsID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobC0tKSB7XG4gICAgbGV0IGVsZW1lbnQgPSBhcnJheVtsXTtcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBsY0VsZW1lbnQgPSB0cmFuc2Zvcm1DYXNlRnVuYyhlbGVtZW50KTtcbiAgICAgIGlmIChsY0VsZW1lbnQgIT09IGVsZW1lbnQpIHtcbiAgICAgICAgLy8gQ29uZmlnIHByZXNldHMgKGUuZy4gdGFncy5qcywgYXR0cnMuanMpIGFyZSBpbW11dGFibGUuXG4gICAgICAgIGlmICghaXNGcm96ZW4oYXJyYXkpKSB7XG4gICAgICAgICAgYXJyYXlbbF0gPSBsY0VsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudCA9IGxjRWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgc2V0W2VsZW1lbnRdID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gc2V0O1xufVxuXG4vKipcbiAqIENsZWFuIHVwIGFuIGFycmF5IHRvIGhhcmRlbiBhZ2FpbnN0IENTUFBcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAtIFRoZSBhcnJheSB0byBiZSBjbGVhbmVkLlxuICogQHJldHVybnMge0FycmF5fSBUaGUgY2xlYW5lZCB2ZXJzaW9uIG9mIHRoZSBhcnJheVxuICovXG5mdW5jdGlvbiBjbGVhbkFycmF5KGFycmF5KSB7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBpc1Byb3BlcnR5RXhpc3QgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShhcnJheSwgaW5kZXgpO1xuICAgIGlmICghaXNQcm9wZXJ0eUV4aXN0KSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbi8qKlxuICogU2hhbGxvdyBjbG9uZSBhbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IC0gVGhlIG9iamVjdCB0byBiZSBjbG9uZWQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBIG5ldyBvYmplY3QgdGhhdCBjb3BpZXMgdGhlIG9yaWdpbmFsLlxuICovXG5mdW5jdGlvbiBjbG9uZShvYmplY3QpIHtcbiAgY29uc3QgbmV3T2JqZWN0ID0gY3JlYXRlKG51bGwpO1xuICBmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgdmFsdWVdIG9mIGVudHJpZXMob2JqZWN0KSkge1xuICAgIGNvbnN0IGlzUHJvcGVydHlFeGlzdCA9IG9iamVjdEhhc093blByb3BlcnR5KG9iamVjdCwgcHJvcGVydHkpO1xuICAgIGlmIChpc1Byb3BlcnR5RXhpc3QpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBuZXdPYmplY3RbcHJvcGVydHldID0gY2xlYW5BcnJheSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuICAgICAgICBuZXdPYmplY3RbcHJvcGVydHldID0gY2xvbmUodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3T2JqZWN0W3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3T2JqZWN0O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGF1dG9tYXRpY2FsbHkgY2hlY2tzIGlmIHRoZSBwcm9wIGlzIGZ1bmN0aW9uIG9yIGdldHRlciBhbmQgYmVoYXZlcyBhY2NvcmRpbmdseS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IC0gVGhlIG9iamVjdCB0byBsb29rIHVwIHRoZSBnZXR0ZXIgZnVuY3Rpb24gaW4gaXRzIHByb3RvdHlwZSBjaGFpbi5cbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wIC0gVGhlIHByb3BlcnR5IG5hbWUgZm9yIHdoaWNoIHRvIGZpbmQgdGhlIGdldHRlciBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gVGhlIGdldHRlciBmdW5jdGlvbiBmb3VuZCBpbiB0aGUgcHJvdG90eXBlIGNoYWluIG9yIGEgZmFsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGxvb2t1cEdldHRlcihvYmplY3QsIHByb3ApIHtcbiAgd2hpbGUgKG9iamVjdCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGRlc2MgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wKTtcbiAgICBpZiAoZGVzYykge1xuICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgIHJldHVybiB1bmFwcGx5KGRlc2MuZ2V0KTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZGVzYy52YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdW5hcHBseShkZXNjLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgfVxuICBmdW5jdGlvbiBmYWxsYmFja1ZhbHVlKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBmYWxsYmFja1ZhbHVlO1xufVxuXG5jb25zdCBodG1sJDEgPSBmcmVlemUoWydhJywgJ2FiYnInLCAnYWNyb255bScsICdhZGRyZXNzJywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdhdWRpbycsICdiJywgJ2JkaScsICdiZG8nLCAnYmlnJywgJ2JsaW5rJywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdicicsICdidXR0b24nLCAnY2FudmFzJywgJ2NhcHRpb24nLCAnY2VudGVyJywgJ2NpdGUnLCAnY29kZScsICdjb2wnLCAnY29sZ3JvdXAnLCAnY29udGVudCcsICdkYXRhJywgJ2RhdGFsaXN0JywgJ2RkJywgJ2RlY29yYXRvcicsICdkZWwnLCAnZGV0YWlscycsICdkZm4nLCAnZGlhbG9nJywgJ2RpcicsICdkaXYnLCAnZGwnLCAnZHQnLCAnZWxlbWVudCcsICdlbScsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb250JywgJ2Zvb3RlcicsICdmb3JtJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWQnLCAnaGVhZGVyJywgJ2hncm91cCcsICdocicsICdodG1sJywgJ2knLCAnaW1nJywgJ2lucHV0JywgJ2lucycsICdrYmQnLCAnbGFiZWwnLCAnbGVnZW5kJywgJ2xpJywgJ21haW4nLCAnbWFwJywgJ21hcmsnLCAnbWFycXVlZScsICdtZW51JywgJ21lbnVpdGVtJywgJ21ldGVyJywgJ25hdicsICdub2JyJywgJ29sJywgJ29wdGdyb3VwJywgJ29wdGlvbicsICdvdXRwdXQnLCAncCcsICdwaWN0dXJlJywgJ3ByZScsICdwcm9ncmVzcycsICdxJywgJ3JwJywgJ3J0JywgJ3J1YnknLCAncycsICdzYW1wJywgJ3NlY3Rpb24nLCAnc2VsZWN0JywgJ3NoYWRvdycsICdzbWFsbCcsICdzb3VyY2UnLCAnc3BhY2VyJywgJ3NwYW4nLCAnc3RyaWtlJywgJ3N0cm9uZycsICdzdHlsZScsICdzdWInLCAnc3VtbWFyeScsICdzdXAnLCAndGFibGUnLCAndGJvZHknLCAndGQnLCAndGVtcGxhdGUnLCAndGV4dGFyZWEnLCAndGZvb3QnLCAndGgnLCAndGhlYWQnLCAndGltZScsICd0cicsICd0cmFjaycsICd0dCcsICd1JywgJ3VsJywgJ3ZhcicsICd2aWRlbycsICd3YnInXSk7XG5cbi8vIFNWR1xuY29uc3Qgc3ZnJDEgPSBmcmVlemUoWydzdmcnLCAnYScsICdhbHRnbHlwaCcsICdhbHRnbHlwaGRlZicsICdhbHRnbHlwaGl0ZW0nLCAnYW5pbWF0ZWNvbG9yJywgJ2FuaW1hdGVtb3Rpb24nLCAnYW5pbWF0ZXRyYW5zZm9ybScsICdjaXJjbGUnLCAnY2xpcHBhdGgnLCAnZGVmcycsICdkZXNjJywgJ2VsbGlwc2UnLCAnZmlsdGVyJywgJ2ZvbnQnLCAnZycsICdnbHlwaCcsICdnbHlwaHJlZicsICdoa2VybicsICdpbWFnZScsICdsaW5lJywgJ2xpbmVhcmdyYWRpZW50JywgJ21hcmtlcicsICdtYXNrJywgJ21ldGFkYXRhJywgJ21wYXRoJywgJ3BhdGgnLCAncGF0dGVybicsICdwb2x5Z29uJywgJ3BvbHlsaW5lJywgJ3JhZGlhbGdyYWRpZW50JywgJ3JlY3QnLCAnc3RvcCcsICdzdHlsZScsICdzd2l0Y2gnLCAnc3ltYm9sJywgJ3RleHQnLCAndGV4dHBhdGgnLCAndGl0bGUnLCAndHJlZicsICd0c3BhbicsICd2aWV3JywgJ3ZrZXJuJ10pO1xuY29uc3Qgc3ZnRmlsdGVycyA9IGZyZWV6ZShbJ2ZlQmxlbmQnLCAnZmVDb2xvck1hdHJpeCcsICdmZUNvbXBvbmVudFRyYW5zZmVyJywgJ2ZlQ29tcG9zaXRlJywgJ2ZlQ29udm9sdmVNYXRyaXgnLCAnZmVEaWZmdXNlTGlnaHRpbmcnLCAnZmVEaXNwbGFjZW1lbnRNYXAnLCAnZmVEaXN0YW50TGlnaHQnLCAnZmVEcm9wU2hhZG93JywgJ2ZlRmxvb2QnLCAnZmVGdW5jQScsICdmZUZ1bmNCJywgJ2ZlRnVuY0cnLCAnZmVGdW5jUicsICdmZUdhdXNzaWFuQmx1cicsICdmZUltYWdlJywgJ2ZlTWVyZ2UnLCAnZmVNZXJnZU5vZGUnLCAnZmVNb3JwaG9sb2d5JywgJ2ZlT2Zmc2V0JywgJ2ZlUG9pbnRMaWdodCcsICdmZVNwZWN1bGFyTGlnaHRpbmcnLCAnZmVTcG90TGlnaHQnLCAnZmVUaWxlJywgJ2ZlVHVyYnVsZW5jZSddKTtcblxuLy8gTGlzdCBvZiBTVkcgZWxlbWVudHMgdGhhdCBhcmUgZGlzYWxsb3dlZCBieSBkZWZhdWx0LlxuLy8gV2Ugc3RpbGwgbmVlZCB0byBrbm93IHRoZW0gc28gdGhhdCB3ZSBjYW4gZG8gbmFtZXNwYWNlXG4vLyBjaGVja3MgcHJvcGVybHkgaW4gY2FzZSBvbmUgd2FudHMgdG8gYWRkIHRoZW0gdG9cbi8vIGFsbG93LWxpc3QuXG5jb25zdCBzdmdEaXNhbGxvd2VkID0gZnJlZXplKFsnYW5pbWF0ZScsICdjb2xvci1wcm9maWxlJywgJ2N1cnNvcicsICdkaXNjYXJkJywgJ2ZvbnQtZmFjZScsICdmb250LWZhY2UtZm9ybWF0JywgJ2ZvbnQtZmFjZS1uYW1lJywgJ2ZvbnQtZmFjZS1zcmMnLCAnZm9udC1mYWNlLXVyaScsICdmb3JlaWdub2JqZWN0JywgJ2hhdGNoJywgJ2hhdGNocGF0aCcsICdtZXNoJywgJ21lc2hncmFkaWVudCcsICdtZXNocGF0Y2gnLCAnbWVzaHJvdycsICdtaXNzaW5nLWdseXBoJywgJ3NjcmlwdCcsICdzZXQnLCAnc29saWRjb2xvcicsICd1bmtub3duJywgJ3VzZSddKTtcbmNvbnN0IG1hdGhNbCQxID0gZnJlZXplKFsnbWF0aCcsICdtZW5jbG9zZScsICdtZXJyb3InLCAnbWZlbmNlZCcsICdtZnJhYycsICdtZ2x5cGgnLCAnbWknLCAnbWxhYmVsZWR0cicsICdtbXVsdGlzY3JpcHRzJywgJ21uJywgJ21vJywgJ21vdmVyJywgJ21wYWRkZWQnLCAnbXBoYW50b20nLCAnbXJvb3QnLCAnbXJvdycsICdtcycsICdtc3BhY2UnLCAnbXNxcnQnLCAnbXN0eWxlJywgJ21zdWInLCAnbXN1cCcsICdtc3Vic3VwJywgJ210YWJsZScsICdtdGQnLCAnbXRleHQnLCAnbXRyJywgJ211bmRlcicsICdtdW5kZXJvdmVyJywgJ21wcmVzY3JpcHRzJ10pO1xuXG4vLyBTaW1pbGFybHkgdG8gU1ZHLCB3ZSB3YW50IHRvIGtub3cgYWxsIE1hdGhNTCBlbGVtZW50cyxcbi8vIGV2ZW4gdGhvc2UgdGhhdCB3ZSBkaXNhbGxvdyBieSBkZWZhdWx0LlxuY29uc3QgbWF0aE1sRGlzYWxsb3dlZCA9IGZyZWV6ZShbJ21hY3Rpb24nLCAnbWFsaWduZ3JvdXAnLCAnbWFsaWdubWFyaycsICdtbG9uZ2RpdicsICdtc2NhcnJpZXMnLCAnbXNjYXJyeScsICdtc2dyb3VwJywgJ21zdGFjaycsICdtc2xpbmUnLCAnbXNyb3cnLCAnc2VtYW50aWNzJywgJ2Fubm90YXRpb24nLCAnYW5ub3RhdGlvbi14bWwnLCAnbXByZXNjcmlwdHMnLCAnbm9uZSddKTtcbmNvbnN0IHRleHQgPSBmcmVlemUoWycjdGV4dCddKTtcblxuY29uc3QgaHRtbCA9IGZyZWV6ZShbJ2FjY2VwdCcsICdhY3Rpb24nLCAnYWxpZ24nLCAnYWx0JywgJ2F1dG9jYXBpdGFsaXplJywgJ2F1dG9jb21wbGV0ZScsICdhdXRvcGljdHVyZWlucGljdHVyZScsICdhdXRvcGxheScsICdiYWNrZ3JvdW5kJywgJ2JnY29sb3InLCAnYm9yZGVyJywgJ2NhcHR1cmUnLCAnY2VsbHBhZGRpbmcnLCAnY2VsbHNwYWNpbmcnLCAnY2hlY2tlZCcsICdjaXRlJywgJ2NsYXNzJywgJ2NsZWFyJywgJ2NvbG9yJywgJ2NvbHMnLCAnY29sc3BhbicsICdjb250cm9scycsICdjb250cm9sc2xpc3QnLCAnY29vcmRzJywgJ2Nyb3Nzb3JpZ2luJywgJ2RhdGV0aW1lJywgJ2RlY29kaW5nJywgJ2RlZmF1bHQnLCAnZGlyJywgJ2Rpc2FibGVkJywgJ2Rpc2FibGVwaWN0dXJlaW5waWN0dXJlJywgJ2Rpc2FibGVyZW1vdGVwbGF5YmFjaycsICdkb3dubG9hZCcsICdkcmFnZ2FibGUnLCAnZW5jdHlwZScsICdlbnRlcmtleWhpbnQnLCAnZmFjZScsICdmb3InLCAnaGVhZGVycycsICdoZWlnaHQnLCAnaGlkZGVuJywgJ2hpZ2gnLCAnaHJlZicsICdocmVmbGFuZycsICdpZCcsICdpbnB1dG1vZGUnLCAnaW50ZWdyaXR5JywgJ2lzbWFwJywgJ2tpbmQnLCAnbGFiZWwnLCAnbGFuZycsICdsaXN0JywgJ2xvYWRpbmcnLCAnbG9vcCcsICdsb3cnLCAnbWF4JywgJ21heGxlbmd0aCcsICdtZWRpYScsICdtZXRob2QnLCAnbWluJywgJ21pbmxlbmd0aCcsICdtdWx0aXBsZScsICdtdXRlZCcsICduYW1lJywgJ25vbmNlJywgJ25vc2hhZGUnLCAnbm92YWxpZGF0ZScsICdub3dyYXAnLCAnb3BlbicsICdvcHRpbXVtJywgJ3BhdHRlcm4nLCAncGxhY2Vob2xkZXInLCAncGxheXNpbmxpbmUnLCAncG9wb3ZlcicsICdwb3BvdmVydGFyZ2V0JywgJ3BvcG92ZXJ0YXJnZXRhY3Rpb24nLCAncG9zdGVyJywgJ3ByZWxvYWQnLCAncHViZGF0ZScsICdyYWRpb2dyb3VwJywgJ3JlYWRvbmx5JywgJ3JlbCcsICdyZXF1aXJlZCcsICdyZXYnLCAncmV2ZXJzZWQnLCAncm9sZScsICdyb3dzJywgJ3Jvd3NwYW4nLCAnc3BlbGxjaGVjaycsICdzY29wZScsICdzZWxlY3RlZCcsICdzaGFwZScsICdzaXplJywgJ3NpemVzJywgJ3NwYW4nLCAnc3JjbGFuZycsICdzdGFydCcsICdzcmMnLCAnc3Jjc2V0JywgJ3N0ZXAnLCAnc3R5bGUnLCAnc3VtbWFyeScsICd0YWJpbmRleCcsICd0aXRsZScsICd0cmFuc2xhdGUnLCAndHlwZScsICd1c2VtYXAnLCAndmFsaWduJywgJ3ZhbHVlJywgJ3dpZHRoJywgJ3dyYXAnLCAneG1sbnMnLCAnc2xvdCddKTtcbmNvbnN0IHN2ZyA9IGZyZWV6ZShbJ2FjY2VudC1oZWlnaHQnLCAnYWNjdW11bGF0ZScsICdhZGRpdGl2ZScsICdhbGlnbm1lbnQtYmFzZWxpbmUnLCAnYXNjZW50JywgJ2F0dHJpYnV0ZW5hbWUnLCAnYXR0cmlidXRldHlwZScsICdhemltdXRoJywgJ2Jhc2VmcmVxdWVuY3knLCAnYmFzZWxpbmUtc2hpZnQnLCAnYmVnaW4nLCAnYmlhcycsICdieScsICdjbGFzcycsICdjbGlwJywgJ2NsaXBwYXRodW5pdHMnLCAnY2xpcC1wYXRoJywgJ2NsaXAtcnVsZScsICdjb2xvcicsICdjb2xvci1pbnRlcnBvbGF0aW9uJywgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycsICdjb2xvci1wcm9maWxlJywgJ2NvbG9yLXJlbmRlcmluZycsICdjeCcsICdjeScsICdkJywgJ2R4JywgJ2R5JywgJ2RpZmZ1c2Vjb25zdGFudCcsICdkaXJlY3Rpb24nLCAnZGlzcGxheScsICdkaXZpc29yJywgJ2R1cicsICdlZGdlbW9kZScsICdlbGV2YXRpb24nLCAnZW5kJywgJ2ZpbGwnLCAnZmlsbC1vcGFjaXR5JywgJ2ZpbGwtcnVsZScsICdmaWx0ZXInLCAnZmlsdGVydW5pdHMnLCAnZmxvb2QtY29sb3InLCAnZmxvb2Qtb3BhY2l0eScsICdmb250LWZhbWlseScsICdmb250LXNpemUnLCAnZm9udC1zaXplLWFkanVzdCcsICdmb250LXN0cmV0Y2gnLCAnZm9udC1zdHlsZScsICdmb250LXZhcmlhbnQnLCAnZm9udC13ZWlnaHQnLCAnZngnLCAnZnknLCAnZzEnLCAnZzInLCAnZ2x5cGgtbmFtZScsICdnbHlwaHJlZicsICdncmFkaWVudHVuaXRzJywgJ2dyYWRpZW50dHJhbnNmb3JtJywgJ2hlaWdodCcsICdocmVmJywgJ2lkJywgJ2ltYWdlLXJlbmRlcmluZycsICdpbicsICdpbjInLCAnaycsICdrMScsICdrMicsICdrMycsICdrNCcsICdrZXJuaW5nJywgJ2tleXBvaW50cycsICdrZXlzcGxpbmVzJywgJ2tleXRpbWVzJywgJ2xhbmcnLCAnbGVuZ3RoYWRqdXN0JywgJ2xldHRlci1zcGFjaW5nJywgJ2tlcm5lbG1hdHJpeCcsICdrZXJuZWx1bml0bGVuZ3RoJywgJ2xpZ2h0aW5nLWNvbG9yJywgJ2xvY2FsJywgJ21hcmtlci1lbmQnLCAnbWFya2VyLW1pZCcsICdtYXJrZXItc3RhcnQnLCAnbWFya2VyaGVpZ2h0JywgJ21hcmtlcnVuaXRzJywgJ21hcmtlcndpZHRoJywgJ21hc2tjb250ZW50dW5pdHMnLCAnbWFza3VuaXRzJywgJ21heCcsICdtYXNrJywgJ21lZGlhJywgJ21ldGhvZCcsICdtb2RlJywgJ21pbicsICduYW1lJywgJ251bW9jdGF2ZXMnLCAnb2Zmc2V0JywgJ29wZXJhdG9yJywgJ29wYWNpdHknLCAnb3JkZXInLCAnb3JpZW50JywgJ29yaWVudGF0aW9uJywgJ29yaWdpbicsICdvdmVyZmxvdycsICdwYWludC1vcmRlcicsICdwYXRoJywgJ3BhdGhsZW5ndGgnLCAncGF0dGVybmNvbnRlbnR1bml0cycsICdwYXR0ZXJudHJhbnNmb3JtJywgJ3BhdHRlcm51bml0cycsICdwb2ludHMnLCAncHJlc2VydmVhbHBoYScsICdwcmVzZXJ2ZWFzcGVjdHJhdGlvJywgJ3ByaW1pdGl2ZXVuaXRzJywgJ3InLCAncngnLCAncnknLCAncmFkaXVzJywgJ3JlZngnLCAncmVmeScsICdyZXBlYXRjb3VudCcsICdyZXBlYXRkdXInLCAncmVzdGFydCcsICdyZXN1bHQnLCAncm90YXRlJywgJ3NjYWxlJywgJ3NlZWQnLCAnc2hhcGUtcmVuZGVyaW5nJywgJ3NwZWN1bGFyY29uc3RhbnQnLCAnc3BlY3VsYXJleHBvbmVudCcsICdzcHJlYWRtZXRob2QnLCAnc3RhcnRvZmZzZXQnLCAnc3RkZGV2aWF0aW9uJywgJ3N0aXRjaHRpbGVzJywgJ3N0b3AtY29sb3InLCAnc3RvcC1vcGFjaXR5JywgJ3N0cm9rZS1kYXNoYXJyYXknLCAnc3Ryb2tlLWRhc2hvZmZzZXQnLCAnc3Ryb2tlLWxpbmVjYXAnLCAnc3Ryb2tlLWxpbmVqb2luJywgJ3N0cm9rZS1taXRlcmxpbWl0JywgJ3N0cm9rZS1vcGFjaXR5JywgJ3N0cm9rZScsICdzdHJva2Utd2lkdGgnLCAnc3R5bGUnLCAnc3VyZmFjZXNjYWxlJywgJ3N5c3RlbWxhbmd1YWdlJywgJ3RhYmluZGV4JywgJ3RhcmdldHgnLCAndGFyZ2V0eScsICd0cmFuc2Zvcm0nLCAndHJhbnNmb3JtLW9yaWdpbicsICd0ZXh0LWFuY2hvcicsICd0ZXh0LWRlY29yYXRpb24nLCAndGV4dC1yZW5kZXJpbmcnLCAndGV4dGxlbmd0aCcsICd0eXBlJywgJ3UxJywgJ3UyJywgJ3VuaWNvZGUnLCAndmFsdWVzJywgJ3ZpZXdib3gnLCAndmlzaWJpbGl0eScsICd2ZXJzaW9uJywgJ3ZlcnQtYWR2LXknLCAndmVydC1vcmlnaW4teCcsICd2ZXJ0LW9yaWdpbi15JywgJ3dpZHRoJywgJ3dvcmQtc3BhY2luZycsICd3cmFwJywgJ3dyaXRpbmctbW9kZScsICd4Y2hhbm5lbHNlbGVjdG9yJywgJ3ljaGFubmVsc2VsZWN0b3InLCAneCcsICd4MScsICd4MicsICd4bWxucycsICd5JywgJ3kxJywgJ3kyJywgJ3onLCAnem9vbWFuZHBhbiddKTtcbmNvbnN0IG1hdGhNbCA9IGZyZWV6ZShbJ2FjY2VudCcsICdhY2NlbnR1bmRlcicsICdhbGlnbicsICdiZXZlbGxlZCcsICdjbG9zZScsICdjb2x1bW5zYWxpZ24nLCAnY29sdW1ubGluZXMnLCAnY29sdW1uc3BhbicsICdkZW5vbWFsaWduJywgJ2RlcHRoJywgJ2RpcicsICdkaXNwbGF5JywgJ2Rpc3BsYXlzdHlsZScsICdlbmNvZGluZycsICdmZW5jZScsICdmcmFtZScsICdoZWlnaHQnLCAnaHJlZicsICdpZCcsICdsYXJnZW9wJywgJ2xlbmd0aCcsICdsaW5ldGhpY2tuZXNzJywgJ2xzcGFjZScsICdscXVvdGUnLCAnbWF0aGJhY2tncm91bmQnLCAnbWF0aGNvbG9yJywgJ21hdGhzaXplJywgJ21hdGh2YXJpYW50JywgJ21heHNpemUnLCAnbWluc2l6ZScsICdtb3ZhYmxlbGltaXRzJywgJ25vdGF0aW9uJywgJ251bWFsaWduJywgJ29wZW4nLCAncm93YWxpZ24nLCAncm93bGluZXMnLCAncm93c3BhY2luZycsICdyb3dzcGFuJywgJ3JzcGFjZScsICdycXVvdGUnLCAnc2NyaXB0bGV2ZWwnLCAnc2NyaXB0bWluc2l6ZScsICdzY3JpcHRzaXplbXVsdGlwbGllcicsICdzZWxlY3Rpb24nLCAnc2VwYXJhdG9yJywgJ3NlcGFyYXRvcnMnLCAnc3RyZXRjaHknLCAnc3Vic2NyaXB0c2hpZnQnLCAnc3Vwc2NyaXB0c2hpZnQnLCAnc3ltbWV0cmljJywgJ3ZvZmZzZXQnLCAnd2lkdGgnLCAneG1sbnMnXSk7XG5jb25zdCB4bWwgPSBmcmVlemUoWyd4bGluazpocmVmJywgJ3htbDppZCcsICd4bGluazp0aXRsZScsICd4bWw6c3BhY2UnLCAneG1sbnM6eGxpbmsnXSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2JldHRlci1yZWdleFxuY29uc3QgTVVTVEFDSEVfRVhQUiA9IHNlYWwoL1xce1xce1tcXHdcXFddKnxbXFx3XFxXXSpcXH1cXH0vZ20pOyAvLyBTcGVjaWZ5IHRlbXBsYXRlIGRldGVjdGlvbiByZWdleCBmb3IgU0FGRV9GT1JfVEVNUExBVEVTIG1vZGVcbmNvbnN0IEVSQl9FWFBSID0gc2VhbCgvPCVbXFx3XFxXXSp8W1xcd1xcV10qJT4vZ20pO1xuY29uc3QgVE1QTElUX0VYUFIgPSBzZWFsKC9cXCR7W1xcd1xcV10qfS9nbSk7XG5jb25zdCBEQVRBX0FUVFIgPSBzZWFsKC9eZGF0YS1bXFwtXFx3LlxcdTAwQjctXFx1RkZGRl0vKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuY29uc3QgQVJJQV9BVFRSID0gc2VhbCgvXmFyaWEtW1xcLVxcd10rJC8pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG5jb25zdCBJU19BTExPV0VEX1VSSSA9IHNlYWwoL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98c21zfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlxcLV0rKD86W15hLXorLlxcLTpdfCQpKS9pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbik7XG5jb25zdCBJU19TQ1JJUFRfT1JfREFUQSA9IHNlYWwoL14oPzpcXHcrc2NyaXB0fGRhdGEpOi9pKTtcbmNvbnN0IEFUVFJfV0hJVEVTUEFDRSA9IHNlYWwoL1tcXHUwMDAwLVxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwLVxcdTIwMjlcXHUyMDVGXFx1MzAwMF0vZyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbik7XG5jb25zdCBET0NUWVBFX05BTUUgPSBzZWFsKC9eaHRtbCQvaSk7XG5jb25zdCBDVVNUT01fRUxFTUVOVCA9IHNlYWwoL15bYS16XVsuXFx3XSooLVsuXFx3XSspKyQvaSk7XG5cbnZhciBFWFBSRVNTSU9OUyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBNVVNUQUNIRV9FWFBSOiBNVVNUQUNIRV9FWFBSLFxuICBFUkJfRVhQUjogRVJCX0VYUFIsXG4gIFRNUExJVF9FWFBSOiBUTVBMSVRfRVhQUixcbiAgREFUQV9BVFRSOiBEQVRBX0FUVFIsXG4gIEFSSUFfQVRUUjogQVJJQV9BVFRSLFxuICBJU19BTExPV0VEX1VSSTogSVNfQUxMT1dFRF9VUkksXG4gIElTX1NDUklQVF9PUl9EQVRBOiBJU19TQ1JJUFRfT1JfREFUQSxcbiAgQVRUUl9XSElURVNQQUNFOiBBVFRSX1dISVRFU1BBQ0UsXG4gIERPQ1RZUEVfTkFNRTogRE9DVFlQRV9OQU1FLFxuICBDVVNUT01fRUxFTUVOVDogQ1VTVE9NX0VMRU1FTlRcbn0pO1xuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTm9kZS9ub2RlVHlwZVxuY29uc3QgTk9ERV9UWVBFID0ge1xuICBlbGVtZW50OiAxLFxuICBhdHRyaWJ1dGU6IDIsXG4gIHRleHQ6IDMsXG4gIGNkYXRhU2VjdGlvbjogNCxcbiAgZW50aXR5UmVmZXJlbmNlOiA1LFxuICAvLyBEZXByZWNhdGVkXG4gIGVudGl0eU5vZGU6IDYsXG4gIC8vIERlcHJlY2F0ZWRcbiAgcHJvZ3Jlc3NpbmdJbnN0cnVjdGlvbjogNyxcbiAgY29tbWVudDogOCxcbiAgZG9jdW1lbnQ6IDksXG4gIGRvY3VtZW50VHlwZTogMTAsXG4gIGRvY3VtZW50RnJhZ21lbnQ6IDExLFxuICBub3RhdGlvbjogMTIgLy8gRGVwcmVjYXRlZFxufTtcbmNvbnN0IGdldEdsb2JhbCA9IGZ1bmN0aW9uIGdldEdsb2JhbCgpIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHdpbmRvdztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5vLW9wIHBvbGljeSBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG4gKiBEb24ndCBleHBvcnQgdGhpcyBmdW5jdGlvbiBvdXRzaWRlIHRoaXMgbW9kdWxlIVxuICogQHBhcmFtIHtUcnVzdGVkVHlwZVBvbGljeUZhY3Rvcnl9IHRydXN0ZWRUeXBlcyBUaGUgcG9saWN5IGZhY3RvcnkuXG4gKiBAcGFyYW0ge0hUTUxTY3JpcHRFbGVtZW50fSBwdXJpZnlIb3N0RWxlbWVudCBUaGUgU2NyaXB0IGVsZW1lbnQgdXNlZCB0byBsb2FkIERPTVB1cmlmeSAodG8gZGV0ZXJtaW5lIHBvbGljeSBuYW1lIHN1ZmZpeCkuXG4gKiBAcmV0dXJuIHtUcnVzdGVkVHlwZVBvbGljeX0gVGhlIHBvbGljeSBjcmVhdGVkIChvciBudWxsLCBpZiBUcnVzdGVkIFR5cGVzXG4gKiBhcmUgbm90IHN1cHBvcnRlZCBvciBjcmVhdGluZyB0aGUgcG9saWN5IGZhaWxlZCkuXG4gKi9cbmNvbnN0IF9jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3kgPSBmdW5jdGlvbiBfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KHRydXN0ZWRUeXBlcywgcHVyaWZ5SG9zdEVsZW1lbnQpIHtcbiAgaWYgKHR5cGVvZiB0cnVzdGVkVHlwZXMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiB0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBbGxvdyB0aGUgY2FsbGVycyB0byBjb250cm9sIHRoZSB1bmlxdWUgcG9saWN5IG5hbWVcbiAgLy8gYnkgYWRkaW5nIGEgZGF0YS10dC1wb2xpY3ktc3VmZml4IHRvIHRoZSBzY3JpcHQgZWxlbWVudCB3aXRoIHRoZSBET01QdXJpZnkuXG4gIC8vIFBvbGljeSBjcmVhdGlvbiB3aXRoIGR1cGxpY2F0ZSBuYW1lcyB0aHJvd3MgaW4gVHJ1c3RlZCBUeXBlcy5cbiAgbGV0IHN1ZmZpeCA9IG51bGw7XG4gIGNvbnN0IEFUVFJfTkFNRSA9ICdkYXRhLXR0LXBvbGljeS1zdWZmaXgnO1xuICBpZiAocHVyaWZ5SG9zdEVsZW1lbnQgJiYgcHVyaWZ5SG9zdEVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJfTkFNRSkpIHtcbiAgICBzdWZmaXggPSBwdXJpZnlIb3N0RWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKTtcbiAgfVxuICBjb25zdCBwb2xpY3lOYW1lID0gJ2RvbXB1cmlmeScgKyAoc3VmZml4ID8gJyMnICsgc3VmZml4IDogJycpO1xuICB0cnkge1xuICAgIHJldHVybiB0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KHBvbGljeU5hbWUsIHtcbiAgICAgIGNyZWF0ZUhUTUwoaHRtbCkge1xuICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgIH0sXG4gICAgICBjcmVhdGVTY3JpcHRVUkwoc2NyaXB0VXJsKSB7XG4gICAgICAgIHJldHVybiBzY3JpcHRVcmw7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICAvLyBQb2xpY3kgY3JlYXRpb24gZmFpbGVkIChtb3N0IGxpa2VseSBhbm90aGVyIERPTVB1cmlmeSBzY3JpcHQgaGFzXG4gICAgLy8gYWxyZWFkeSBydW4pLiBTa2lwIGNyZWF0aW5nIHRoZSBwb2xpY3ksIGFzIHRoaXMgd2lsbCBvbmx5IGNhdXNlIGVycm9yc1xuICAgIC8vIGlmIFRUIGFyZSBlbmZvcmNlZC5cbiAgICBjb25zb2xlLndhcm4oJ1RydXN0ZWRUeXBlcyBwb2xpY3kgJyArIHBvbGljeU5hbWUgKyAnIGNvdWxkIG5vdCBiZSBjcmVhdGVkLicpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuZnVuY3Rpb24gY3JlYXRlRE9NUHVyaWZ5KCkge1xuICBsZXQgd2luZG93ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBnZXRHbG9iYWwoKTtcbiAgY29uc3QgRE9NUHVyaWZ5ID0gcm9vdCA9PiBjcmVhdGVET01QdXJpZnkocm9vdCk7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gbGFiZWwsIGV4cG9zZWQgZm9yIGVhc2llciBjaGVja3NcbiAgICogaWYgRE9NUHVyaWZ5IGlzIHVwIHRvIGRhdGUgb3Igbm90XG4gICAqL1xuICBET01QdXJpZnkudmVyc2lvbiA9ICczLjEuNic7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIGVsZW1lbnRzIHRoYXQgRE9NUHVyaWZ5IHJlbW92ZWQgZHVyaW5nIHNhbml0YXRpb24uXG4gICAqIEVtcHR5IGlmIG5vdGhpbmcgd2FzIHJlbW92ZWQuXG4gICAqL1xuICBET01QdXJpZnkucmVtb3ZlZCA9IFtdO1xuICBpZiAoIXdpbmRvdyB8fCAhd2luZG93LmRvY3VtZW50IHx8IHdpbmRvdy5kb2N1bWVudC5ub2RlVHlwZSAhPT0gTk9ERV9UWVBFLmRvY3VtZW50KSB7XG4gICAgLy8gTm90IHJ1bm5pbmcgaW4gYSBicm93c2VyLCBwcm92aWRlIGEgZmFjdG9yeSBmdW5jdGlvblxuICAgIC8vIHNvIHRoYXQgeW91IGNhbiBwYXNzIHlvdXIgb3duIFdpbmRvd1xuICAgIERPTVB1cmlmeS5pc1N1cHBvcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBET01QdXJpZnk7XG4gIH1cbiAgbGV0IHtcbiAgICBkb2N1bWVudFxuICB9ID0gd2luZG93O1xuICBjb25zdCBvcmlnaW5hbERvY3VtZW50ID0gZG9jdW1lbnQ7XG4gIGNvbnN0IGN1cnJlbnRTY3JpcHQgPSBvcmlnaW5hbERvY3VtZW50LmN1cnJlbnRTY3JpcHQ7XG4gIGNvbnN0IHtcbiAgICBEb2N1bWVudEZyYWdtZW50LFxuICAgIEhUTUxUZW1wbGF0ZUVsZW1lbnQsXG4gICAgTm9kZSxcbiAgICBFbGVtZW50LFxuICAgIE5vZGVGaWx0ZXIsXG4gICAgTmFtZWROb2RlTWFwID0gd2luZG93Lk5hbWVkTm9kZU1hcCB8fCB3aW5kb3cuTW96TmFtZWRBdHRyTWFwLFxuICAgIEhUTUxGb3JtRWxlbWVudCxcbiAgICBET01QYXJzZXIsXG4gICAgdHJ1c3RlZFR5cGVzXG4gIH0gPSB3aW5kb3c7XG4gIGNvbnN0IEVsZW1lbnRQcm90b3R5cGUgPSBFbGVtZW50LnByb3RvdHlwZTtcbiAgY29uc3QgY2xvbmVOb2RlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdjbG9uZU5vZGUnKTtcbiAgY29uc3QgcmVtb3ZlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdyZW1vdmUnKTtcbiAgY29uc3QgZ2V0TmV4dFNpYmxpbmcgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ25leHRTaWJsaW5nJyk7XG4gIGNvbnN0IGdldENoaWxkTm9kZXMgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ2NoaWxkTm9kZXMnKTtcbiAgY29uc3QgZ2V0UGFyZW50Tm9kZSA9IGxvb2t1cEdldHRlcihFbGVtZW50UHJvdG90eXBlLCAncGFyZW50Tm9kZScpO1xuXG4gIC8vIEFzIHBlciBpc3N1ZSAjNDcsIHRoZSB3ZWItY29tcG9uZW50cyByZWdpc3RyeSBpcyBpbmhlcml0ZWQgYnkgYVxuICAvLyBuZXcgZG9jdW1lbnQgY3JlYXRlZCB2aWEgY3JlYXRlSFRNTERvY3VtZW50LiBBcyBwZXIgdGhlIHNwZWNcbiAgLy8gKGh0dHA6Ly93M2MuZ2l0aHViLmlvL3dlYmNvbXBvbmVudHMvc3BlYy9jdXN0b20vI2NyZWF0aW5nLWFuZC1wYXNzaW5nLXJlZ2lzdHJpZXMpXG4gIC8vIGEgbmV3IGVtcHR5IHJlZ2lzdHJ5IGlzIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRlbXBsYXRlIGNvbnRlbnRzIG93bmVyXG4gIC8vIGRvY3VtZW50LCBzbyB3ZSB1c2UgdGhhdCBhcyBvdXIgcGFyZW50IGRvY3VtZW50IHRvIGVuc3VyZSBub3RoaW5nXG4gIC8vIGlzIGluaGVyaXRlZC5cbiAgaWYgKHR5cGVvZiBIVE1MVGVtcGxhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICAgIGlmICh0ZW1wbGF0ZS5jb250ZW50ICYmIHRlbXBsYXRlLmNvbnRlbnQub3duZXJEb2N1bWVudCkge1xuICAgICAgZG9jdW1lbnQgPSB0ZW1wbGF0ZS5jb250ZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgfVxuICB9XG4gIGxldCB0cnVzdGVkVHlwZXNQb2xpY3k7XG4gIGxldCBlbXB0eUhUTUwgPSAnJztcbiAgY29uc3Qge1xuICAgIGltcGxlbWVudGF0aW9uLFxuICAgIGNyZWF0ZU5vZGVJdGVyYXRvcixcbiAgICBjcmVhdGVEb2N1bWVudEZyYWdtZW50LFxuICAgIGdldEVsZW1lbnRzQnlUYWdOYW1lXG4gIH0gPSBkb2N1bWVudDtcbiAgY29uc3Qge1xuICAgIGltcG9ydE5vZGVcbiAgfSA9IG9yaWdpbmFsRG9jdW1lbnQ7XG4gIGxldCBob29rcyA9IHt9O1xuXG4gIC8qKlxuICAgKiBFeHBvc2Ugd2hldGhlciB0aGlzIGJyb3dzZXIgc3VwcG9ydHMgcnVubmluZyB0aGUgZnVsbCBET01QdXJpZnkuXG4gICAqL1xuICBET01QdXJpZnkuaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZW50cmllcyA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZ2V0UGFyZW50Tm9kZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbXBsZW1lbnRhdGlvbiAmJiBpbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQgIT09IHVuZGVmaW5lZDtcbiAgY29uc3Qge1xuICAgIE1VU1RBQ0hFX0VYUFIsXG4gICAgRVJCX0VYUFIsXG4gICAgVE1QTElUX0VYUFIsXG4gICAgREFUQV9BVFRSLFxuICAgIEFSSUFfQVRUUixcbiAgICBJU19TQ1JJUFRfT1JfREFUQSxcbiAgICBBVFRSX1dISVRFU1BBQ0UsXG4gICAgQ1VTVE9NX0VMRU1FTlRcbiAgfSA9IEVYUFJFU1NJT05TO1xuICBsZXQge1xuICAgIElTX0FMTE9XRURfVVJJOiBJU19BTExPV0VEX1VSSSQxXG4gIH0gPSBFWFBSRVNTSU9OUztcblxuICAvKipcbiAgICogV2UgY29uc2lkZXIgdGhlIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGJlbG93IHRvIGJlIHNhZmUuIElkZWFsbHlcbiAgICogZG9uJ3QgYWRkIGFueSBuZXcgb25lcyBidXQgZmVlbCBmcmVlIHRvIHJlbW92ZSB1bndhbnRlZCBvbmVzLlxuICAgKi9cblxuICAvKiBhbGxvd2VkIGVsZW1lbnQgbmFtZXMgKi9cbiAgbGV0IEFMTE9XRURfVEFHUyA9IG51bGw7XG4gIGNvbnN0IERFRkFVTFRfQUxMT1dFRF9UQUdTID0gYWRkVG9TZXQoe30sIFsuLi5odG1sJDEsIC4uLnN2ZyQxLCAuLi5zdmdGaWx0ZXJzLCAuLi5tYXRoTWwkMSwgLi4udGV4dF0pO1xuXG4gIC8qIEFsbG93ZWQgYXR0cmlidXRlIG5hbWVzICovXG4gIGxldCBBTExPV0VEX0FUVFIgPSBudWxsO1xuICBjb25zdCBERUZBVUxUX0FMTE9XRURfQVRUUiA9IGFkZFRvU2V0KHt9LCBbLi4uaHRtbCwgLi4uc3ZnLCAuLi5tYXRoTWwsIC4uLnhtbF0pO1xuXG4gIC8qXG4gICAqIENvbmZpZ3VyZSBob3cgRE9NUFVyaWZ5IHNob3VsZCBoYW5kbGUgY3VzdG9tIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIGFzIHdlbGwgYXMgY3VzdG9taXplZCBidWlsdC1pbiBlbGVtZW50cy5cbiAgICogQHByb3BlcnR5IHtSZWdFeHB8RnVuY3Rpb258bnVsbH0gdGFnTmFtZUNoZWNrIG9uZSBvZiBbbnVsbCwgcmVnZXhQYXR0ZXJuLCBwcmVkaWNhdGVdLiBEZWZhdWx0OiBgbnVsbGAgKGRpc2FsbG93IGFueSBjdXN0b20gZWxlbWVudHMpXG4gICAqIEBwcm9wZXJ0eSB7UmVnRXhwfEZ1bmN0aW9ufG51bGx9IGF0dHJpYnV0ZU5hbWVDaGVjayBvbmUgb2YgW251bGwsIHJlZ2V4UGF0dGVybiwgcHJlZGljYXRlXS4gRGVmYXVsdDogYG51bGxgIChkaXNhbGxvdyBhbnkgYXR0cmlidXRlcyBub3Qgb24gdGhlIGFsbG93IGxpc3QpXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzIGFsbG93IGN1c3RvbSBlbGVtZW50cyBkZXJpdmVkIGZyb20gYnVpbHQtaW5zIGlmIHRoZXkgcGFzcyBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2suIERlZmF1bHQ6IGBmYWxzZWAuXG4gICAqL1xuICBsZXQgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgPSBPYmplY3Quc2VhbChjcmVhdGUobnVsbCwge1xuICAgIHRhZ05hbWVDaGVjazoge1xuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBudWxsXG4gICAgfSxcbiAgICBhdHRyaWJ1dGVOYW1lQ2hlY2s6IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogbnVsbFxuICAgIH0sXG4gICAgYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOiB7XG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZhbHNlXG4gICAgfVxuICB9KSk7XG5cbiAgLyogRXhwbGljaXRseSBmb3JiaWRkZW4gdGFncyAob3ZlcnJpZGVzIEFMTE9XRURfVEFHUy9BRERfVEFHUykgKi9cbiAgbGV0IEZPUkJJRF9UQUdTID0gbnVsbDtcblxuICAvKiBFeHBsaWNpdGx5IGZvcmJpZGRlbiBhdHRyaWJ1dGVzIChvdmVycmlkZXMgQUxMT1dFRF9BVFRSL0FERF9BVFRSKSAqL1xuICBsZXQgRk9SQklEX0FUVFIgPSBudWxsO1xuXG4gIC8qIERlY2lkZSBpZiBBUklBIGF0dHJpYnV0ZXMgYXJlIG9rYXkgKi9cbiAgbGV0IEFMTE9XX0FSSUFfQVRUUiA9IHRydWU7XG5cbiAgLyogRGVjaWRlIGlmIGN1c3RvbSBkYXRhIGF0dHJpYnV0ZXMgYXJlIG9rYXkgKi9cbiAgbGV0IEFMTE9XX0RBVEFfQVRUUiA9IHRydWU7XG5cbiAgLyogRGVjaWRlIGlmIHVua25vd24gcHJvdG9jb2xzIGFyZSBva2F5ICovXG4gIGxldCBBTExPV19VTktOT1dOX1BST1RPQ09MUyA9IGZhbHNlO1xuXG4gIC8qIERlY2lkZSBpZiBzZWxmLWNsb3NpbmcgdGFncyBpbiBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkLlxuICAgKiBVc3VhbGx5IHJlbW92ZWQgZHVlIHRvIGEgbVhTUyBpc3N1ZSBpbiBqUXVlcnkgMy4wICovXG4gIGxldCBBTExPV19TRUxGX0NMT1NFX0lOX0FUVFIgPSB0cnVlO1xuXG4gIC8qIE91dHB1dCBzaG91bGQgYmUgc2FmZSBmb3IgY29tbW9uIHRlbXBsYXRlIGVuZ2luZXMuXG4gICAqIFRoaXMgbWVhbnMsIERPTVB1cmlmeSByZW1vdmVzIGRhdGEgYXR0cmlidXRlcywgbXVzdGFjaGVzIGFuZCBFUkJcbiAgICovXG4gIGxldCBTQUZFX0ZPUl9URU1QTEFURVMgPSBmYWxzZTtcblxuICAvKiBPdXRwdXQgc2hvdWxkIGJlIHNhZmUgZXZlbiBmb3IgWE1MIHVzZWQgd2l0aGluIEhUTUwgYW5kIGFsaWtlLlxuICAgKiBUaGlzIG1lYW5zLCBET01QdXJpZnkgcmVtb3ZlcyBjb21tZW50cyB3aGVuIGNvbnRhaW5pbmcgcmlza3kgY29udGVudC5cbiAgICovXG4gIGxldCBTQUZFX0ZPUl9YTUwgPSB0cnVlO1xuXG4gIC8qIERlY2lkZSBpZiBkb2N1bWVudCB3aXRoIDxodG1sPi4uLiBzaG91bGQgYmUgcmV0dXJuZWQgKi9cbiAgbGV0IFdIT0xFX0RPQ1VNRU5UID0gZmFsc2U7XG5cbiAgLyogVHJhY2sgd2hldGhlciBjb25maWcgaXMgYWxyZWFkeSBzZXQgb24gdGhpcyBpbnN0YW5jZSBvZiBET01QdXJpZnkuICovXG4gIGxldCBTRVRfQ09ORklHID0gZmFsc2U7XG5cbiAgLyogRGVjaWRlIGlmIGFsbCBlbGVtZW50cyAoZS5nLiBzdHlsZSwgc2NyaXB0KSBtdXN0IGJlIGNoaWxkcmVuIG9mXG4gICAqIGRvY3VtZW50LmJvZHkuIEJ5IGRlZmF1bHQsIGJyb3dzZXJzIG1pZ2h0IG1vdmUgdGhlbSB0byBkb2N1bWVudC5oZWFkICovXG4gIGxldCBGT1JDRV9CT0RZID0gZmFsc2U7XG5cbiAgLyogRGVjaWRlIGlmIGEgRE9NIGBIVE1MQm9keUVsZW1lbnRgIHNob3VsZCBiZSByZXR1cm5lZCwgaW5zdGVhZCBvZiBhIGh0bWxcbiAgICogc3RyaW5nIChvciBhIFRydXN0ZWRIVE1MIG9iamVjdCBpZiBUcnVzdGVkIFR5cGVzIGFyZSBzdXBwb3J0ZWQpLlxuICAgKiBJZiBgV0hPTEVfRE9DVU1FTlRgIGlzIGVuYWJsZWQgYSBgSFRNTEh0bWxFbGVtZW50YCB3aWxsIGJlIHJldHVybmVkIGluc3RlYWRcbiAgICovXG4gIGxldCBSRVRVUk5fRE9NID0gZmFsc2U7XG5cbiAgLyogRGVjaWRlIGlmIGEgRE9NIGBEb2N1bWVudEZyYWdtZW50YCBzaG91bGQgYmUgcmV0dXJuZWQsIGluc3RlYWQgb2YgYSBodG1sXG4gICAqIHN0cmluZyAgKG9yIGEgVHJ1c3RlZEhUTUwgb2JqZWN0IGlmIFRydXN0ZWQgVHlwZXMgYXJlIHN1cHBvcnRlZCkgKi9cbiAgbGV0IFJFVFVSTl9ET01fRlJBR01FTlQgPSBmYWxzZTtcblxuICAvKiBUcnkgdG8gcmV0dXJuIGEgVHJ1c3RlZCBUeXBlIG9iamVjdCBpbnN0ZWFkIG9mIGEgc3RyaW5nLCByZXR1cm4gYSBzdHJpbmcgaW5cbiAgICogY2FzZSBUcnVzdGVkIFR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkICAqL1xuICBsZXQgUkVUVVJOX1RSVVNURURfVFlQRSA9IGZhbHNlO1xuXG4gIC8qIE91dHB1dCBzaG91bGQgYmUgZnJlZSBmcm9tIERPTSBjbG9iYmVyaW5nIGF0dGFja3M/XG4gICAqIFRoaXMgc2FuaXRpemVzIG1hcmt1cHMgbmFtZWQgd2l0aCBjb2xsaWRpbmcsIGNsb2JiZXJhYmxlIGJ1aWx0LWluIERPTSBBUElzLlxuICAgKi9cbiAgbGV0IFNBTklUSVpFX0RPTSA9IHRydWU7XG5cbiAgLyogQWNoaWV2ZSBmdWxsIERPTSBDbG9iYmVyaW5nIHByb3RlY3Rpb24gYnkgaXNvbGF0aW5nIHRoZSBuYW1lc3BhY2Ugb2YgbmFtZWRcbiAgICogcHJvcGVydGllcyBhbmQgSlMgdmFyaWFibGVzLCBtaXRpZ2F0aW5nIGF0dGFja3MgdGhhdCBhYnVzZSB0aGUgSFRNTC9ET00gc3BlYyBydWxlcy5cbiAgICpcbiAgICogSFRNTC9ET00gc3BlYyBydWxlcyB0aGF0IGVuYWJsZSBET00gQ2xvYmJlcmluZzpcbiAgICogICAtIE5hbWVkIEFjY2VzcyBvbiBXaW5kb3cgKMKnNy4zLjMpXG4gICAqICAgLSBET00gVHJlZSBBY2Nlc3NvcnMgKMKnMy4xLjUpXG4gICAqICAgLSBGb3JtIEVsZW1lbnQgUGFyZW50LUNoaWxkIFJlbGF0aW9ucyAowqc0LjEwLjMpXG4gICAqICAgLSBJZnJhbWUgc3JjZG9jIC8gTmVzdGVkIFdpbmRvd1Byb3hpZXMgKMKnNC44LjUpXG4gICAqICAgLSBIVE1MQ29sbGVjdGlvbiAowqc0LjIuMTAuMilcbiAgICpcbiAgICogTmFtZXNwYWNlIGlzb2xhdGlvbiBpcyBpbXBsZW1lbnRlZCBieSBwcmVmaXhpbmcgYGlkYCBhbmQgYG5hbWVgIGF0dHJpYnV0ZXNcbiAgICogd2l0aCBhIGNvbnN0YW50IHN0cmluZywgaS5lLiwgYHVzZXItY29udGVudC1gXG4gICAqL1xuICBsZXQgU0FOSVRJWkVfTkFNRURfUFJPUFMgPSBmYWxzZTtcbiAgY29uc3QgU0FOSVRJWkVfTkFNRURfUFJPUFNfUFJFRklYID0gJ3VzZXItY29udGVudC0nO1xuXG4gIC8qIEtlZXAgZWxlbWVudCBjb250ZW50IHdoZW4gcmVtb3ZpbmcgZWxlbWVudD8gKi9cbiAgbGV0IEtFRVBfQ09OVEVOVCA9IHRydWU7XG5cbiAgLyogSWYgYSBgTm9kZWAgaXMgcGFzc2VkIHRvIHNhbml0aXplKCksIHRoZW4gcGVyZm9ybXMgc2FuaXRpemF0aW9uIGluLXBsYWNlIGluc3RlYWRcbiAgICogb2YgaW1wb3J0aW5nIGl0IGludG8gYSBuZXcgRG9jdW1lbnQgYW5kIHJldHVybmluZyBhIHNhbml0aXplZCBjb3B5ICovXG4gIGxldCBJTl9QTEFDRSA9IGZhbHNlO1xuXG4gIC8qIEFsbG93IHVzYWdlIG9mIHByb2ZpbGVzIGxpa2UgaHRtbCwgc3ZnIGFuZCBtYXRoTWwgKi9cbiAgbGV0IFVTRV9QUk9GSUxFUyA9IHt9O1xuXG4gIC8qIFRhZ3MgdG8gaWdub3JlIGNvbnRlbnQgb2Ygd2hlbiBLRUVQX0NPTlRFTlQgaXMgdHJ1ZSAqL1xuICBsZXQgRk9SQklEX0NPTlRFTlRTID0gbnVsbDtcbiAgY29uc3QgREVGQVVMVF9GT1JCSURfQ09OVEVOVFMgPSBhZGRUb1NldCh7fSwgWydhbm5vdGF0aW9uLXhtbCcsICdhdWRpbycsICdjb2xncm91cCcsICdkZXNjJywgJ2ZvcmVpZ25vYmplY3QnLCAnaGVhZCcsICdpZnJhbWUnLCAnbWF0aCcsICdtaScsICdtbicsICdtbycsICdtcycsICdtdGV4dCcsICdub2VtYmVkJywgJ25vZnJhbWVzJywgJ25vc2NyaXB0JywgJ3BsYWludGV4dCcsICdzY3JpcHQnLCAnc3R5bGUnLCAnc3ZnJywgJ3RlbXBsYXRlJywgJ3RoZWFkJywgJ3RpdGxlJywgJ3ZpZGVvJywgJ3htcCddKTtcblxuICAvKiBUYWdzIHRoYXQgYXJlIHNhZmUgZm9yIGRhdGE6IFVSSXMgKi9cbiAgbGV0IERBVEFfVVJJX1RBR1MgPSBudWxsO1xuICBjb25zdCBERUZBVUxUX0RBVEFfVVJJX1RBR1MgPSBhZGRUb1NldCh7fSwgWydhdWRpbycsICd2aWRlbycsICdpbWcnLCAnc291cmNlJywgJ2ltYWdlJywgJ3RyYWNrJ10pO1xuXG4gIC8qIEF0dHJpYnV0ZXMgc2FmZSBmb3IgdmFsdWVzIGxpa2UgXCJqYXZhc2NyaXB0OlwiICovXG4gIGxldCBVUklfU0FGRV9BVFRSSUJVVEVTID0gbnVsbDtcbiAgY29uc3QgREVGQVVMVF9VUklfU0FGRV9BVFRSSUJVVEVTID0gYWRkVG9TZXQoe30sIFsnYWx0JywgJ2NsYXNzJywgJ2ZvcicsICdpZCcsICdsYWJlbCcsICduYW1lJywgJ3BhdHRlcm4nLCAncGxhY2Vob2xkZXInLCAncm9sZScsICdzdW1tYXJ5JywgJ3RpdGxlJywgJ3ZhbHVlJywgJ3N0eWxlJywgJ3htbG5zJ10pO1xuICBjb25zdCBNQVRITUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnO1xuICBjb25zdCBTVkdfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbiAgY29uc3QgSFRNTF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc7XG4gIC8qIERvY3VtZW50IG5hbWVzcGFjZSAqL1xuICBsZXQgTkFNRVNQQUNFID0gSFRNTF9OQU1FU1BBQ0U7XG4gIGxldCBJU19FTVBUWV9JTlBVVCA9IGZhbHNlO1xuXG4gIC8qIEFsbG93ZWQgWEhUTUwrWE1MIG5hbWVzcGFjZXMgKi9cbiAgbGV0IEFMTE9XRURfTkFNRVNQQUNFUyA9IG51bGw7XG4gIGNvbnN0IERFRkFVTFRfQUxMT1dFRF9OQU1FU1BBQ0VTID0gYWRkVG9TZXQoe30sIFtNQVRITUxfTkFNRVNQQUNFLCBTVkdfTkFNRVNQQUNFLCBIVE1MX05BTUVTUEFDRV0sIHN0cmluZ1RvU3RyaW5nKTtcblxuICAvKiBQYXJzaW5nIG9mIHN0cmljdCBYSFRNTCBkb2N1bWVudHMgKi9cbiAgbGV0IFBBUlNFUl9NRURJQV9UWVBFID0gbnVsbDtcbiAgY29uc3QgU1VQUE9SVEVEX1BBUlNFUl9NRURJQV9UWVBFUyA9IFsnYXBwbGljYXRpb24veGh0bWwreG1sJywgJ3RleHQvaHRtbCddO1xuICBjb25zdCBERUZBVUxUX1BBUlNFUl9NRURJQV9UWVBFID0gJ3RleHQvaHRtbCc7XG4gIGxldCB0cmFuc2Zvcm1DYXNlRnVuYyA9IG51bGw7XG5cbiAgLyogS2VlcCBhIHJlZmVyZW5jZSB0byBjb25maWcgdG8gcGFzcyB0byBob29rcyAqL1xuICBsZXQgQ09ORklHID0gbnVsbDtcblxuICAvKiBJZGVhbGx5LCBkbyBub3QgdG91Y2ggYW55dGhpbmcgYmVsb3cgdGhpcyBsaW5lICovXG4gIC8qIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gKi9cblxuICBjb25zdCBmb3JtRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgY29uc3QgaXNSZWdleE9yRnVuY3Rpb24gPSBmdW5jdGlvbiBpc1JlZ2V4T3JGdW5jdGlvbih0ZXN0VmFsdWUpIHtcbiAgICByZXR1cm4gdGVzdFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwIHx8IHRlc3RWYWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uO1xuICB9O1xuXG4gIC8qKlxuICAgKiBfcGFyc2VDb25maWdcbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBjZmcgb3B0aW9uYWwgY29uZmlnIGxpdGVyYWxcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIGNvbnN0IF9wYXJzZUNvbmZpZyA9IGZ1bmN0aW9uIF9wYXJzZUNvbmZpZygpIHtcbiAgICBsZXQgY2ZnID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICBpZiAoQ09ORklHICYmIENPTkZJRyA9PT0gY2ZnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyogU2hpZWxkIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZyb20gdGFtcGVyaW5nICovXG4gICAgaWYgKCFjZmcgfHwgdHlwZW9mIGNmZyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGNmZyA9IHt9O1xuICAgIH1cblxuICAgIC8qIFNoaWVsZCBjb25maWd1cmF0aW9uIG9iamVjdCBmcm9tIHByb3RvdHlwZSBwb2xsdXRpb24gKi9cbiAgICBjZmcgPSBjbG9uZShjZmcpO1xuICAgIFBBUlNFUl9NRURJQV9UWVBFID1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItaW5jbHVkZXNcbiAgICBTVVBQT1JURURfUEFSU0VSX01FRElBX1RZUEVTLmluZGV4T2YoY2ZnLlBBUlNFUl9NRURJQV9UWVBFKSA9PT0gLTEgPyBERUZBVUxUX1BBUlNFUl9NRURJQV9UWVBFIDogY2ZnLlBBUlNFUl9NRURJQV9UWVBFO1xuXG4gICAgLy8gSFRNTCB0YWdzIGFuZCBhdHRyaWJ1dGVzIGFyZSBub3QgY2FzZS1zZW5zaXRpdmUsIGNvbnZlcnRpbmcgdG8gbG93ZXJjYXNlLiBLZWVwaW5nIFhIVE1MIGFzIGlzLlxuICAgIHRyYW5zZm9ybUNhc2VGdW5jID0gUEFSU0VSX01FRElBX1RZUEUgPT09ICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnID8gc3RyaW5nVG9TdHJpbmcgOiBzdHJpbmdUb0xvd2VyQ2FzZTtcblxuICAgIC8qIFNldCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKi9cbiAgICBBTExPV0VEX1RBR1MgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdBTExPV0VEX1RBR1MnKSA/IGFkZFRvU2V0KHt9LCBjZmcuQUxMT1dFRF9UQUdTLCB0cmFuc2Zvcm1DYXNlRnVuYykgOiBERUZBVUxUX0FMTE9XRURfVEFHUztcbiAgICBBTExPV0VEX0FUVFIgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdBTExPV0VEX0FUVFInKSA/IGFkZFRvU2V0KHt9LCBjZmcuQUxMT1dFRF9BVFRSLCB0cmFuc2Zvcm1DYXNlRnVuYykgOiBERUZBVUxUX0FMTE9XRURfQVRUUjtcbiAgICBBTExPV0VEX05BTUVTUEFDRVMgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdBTExPV0VEX05BTUVTUEFDRVMnKSA/IGFkZFRvU2V0KHt9LCBjZmcuQUxMT1dFRF9OQU1FU1BBQ0VTLCBzdHJpbmdUb1N0cmluZykgOiBERUZBVUxUX0FMTE9XRURfTkFNRVNQQUNFUztcbiAgICBVUklfU0FGRV9BVFRSSUJVVEVTID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnQUREX1VSSV9TQUZFX0FUVFInKSA/IGFkZFRvU2V0KGNsb25lKERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyksXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICBjZmcuQUREX1VSSV9TQUZFX0FUVFIsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICB0cmFuc2Zvcm1DYXNlRnVuYyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGluZGVudFxuICAgICkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICA6IERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUztcbiAgICBEQVRBX1VSSV9UQUdTID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnQUREX0RBVEFfVVJJX1RBR1MnKSA/IGFkZFRvU2V0KGNsb25lKERFRkFVTFRfREFUQV9VUklfVEFHUyksXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICBjZmcuQUREX0RBVEFfVVJJX1RBR1MsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICB0cmFuc2Zvcm1DYXNlRnVuYyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGluZGVudFxuICAgICkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICA6IERFRkFVTFRfREFUQV9VUklfVEFHUztcbiAgICBGT1JCSURfQ09OVEVOVFMgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdGT1JCSURfQ09OVEVOVFMnKSA/IGFkZFRvU2V0KHt9LCBjZmcuRk9SQklEX0NPTlRFTlRTLCB0cmFuc2Zvcm1DYXNlRnVuYykgOiBERUZBVUxUX0ZPUkJJRF9DT05URU5UUztcbiAgICBGT1JCSURfVEFHUyA9IG9iamVjdEhhc093blByb3BlcnR5KGNmZywgJ0ZPUkJJRF9UQUdTJykgPyBhZGRUb1NldCh7fSwgY2ZnLkZPUkJJRF9UQUdTLCB0cmFuc2Zvcm1DYXNlRnVuYykgOiB7fTtcbiAgICBGT1JCSURfQVRUUiA9IG9iamVjdEhhc093blByb3BlcnR5KGNmZywgJ0ZPUkJJRF9BVFRSJykgPyBhZGRUb1NldCh7fSwgY2ZnLkZPUkJJRF9BVFRSLCB0cmFuc2Zvcm1DYXNlRnVuYykgOiB7fTtcbiAgICBVU0VfUFJPRklMRVMgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdVU0VfUFJPRklMRVMnKSA/IGNmZy5VU0VfUFJPRklMRVMgOiBmYWxzZTtcbiAgICBBTExPV19BUklBX0FUVFIgPSBjZmcuQUxMT1dfQVJJQV9BVFRSICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG4gICAgQUxMT1dfREFUQV9BVFRSID0gY2ZnLkFMTE9XX0RBVEFfQVRUUiAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgIEFMTE9XX1VOS05PV05fUFJPVE9DT0xTID0gY2ZnLkFMTE9XX1VOS05PV05fUFJPVE9DT0xTIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSID0gY2ZnLkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgIFNBRkVfRk9SX1RFTVBMQVRFUyA9IGNmZy5TQUZFX0ZPUl9URU1QTEFURVMgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBTQUZFX0ZPUl9YTUwgPSBjZmcuU0FGRV9GT1JfWE1MICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG4gICAgV0hPTEVfRE9DVU1FTlQgPSBjZmcuV0hPTEVfRE9DVU1FTlQgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBSRVRVUk5fRE9NID0gY2ZnLlJFVFVSTl9ET00gfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBSRVRVUk5fRE9NX0ZSQUdNRU5UID0gY2ZnLlJFVFVSTl9ET01fRlJBR01FTlQgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBSRVRVUk5fVFJVU1RFRF9UWVBFID0gY2ZnLlJFVFVSTl9UUlVTVEVEX1RZUEUgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBGT1JDRV9CT0RZID0gY2ZnLkZPUkNFX0JPRFkgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBTQU5JVElaRV9ET00gPSBjZmcuU0FOSVRJWkVfRE9NICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG4gICAgU0FOSVRJWkVfTkFNRURfUFJPUFMgPSBjZmcuU0FOSVRJWkVfTkFNRURfUFJPUFMgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBLRUVQX0NPTlRFTlQgPSBjZmcuS0VFUF9DT05URU5UICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG4gICAgSU5fUExBQ0UgPSBjZmcuSU5fUExBQ0UgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICBJU19BTExPV0VEX1VSSSQxID0gY2ZnLkFMTE9XRURfVVJJX1JFR0VYUCB8fCBJU19BTExPV0VEX1VSSTtcbiAgICBOQU1FU1BBQ0UgPSBjZmcuTkFNRVNQQUNFIHx8IEhUTUxfTkFNRVNQQUNFO1xuICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HIHx8IHt9O1xuICAgIGlmIChjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiYgaXNSZWdleE9yRnVuY3Rpb24oY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaykpIHtcbiAgICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayA9IGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2s7XG4gICAgfVxuICAgIGlmIChjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiYgaXNSZWdleE9yRnVuY3Rpb24oY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykpIHtcbiAgICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayA9IGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2s7XG4gICAgfVxuICAgIGlmIChjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiYgdHlwZW9mIGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgPT09ICdib29sZWFuJykge1xuICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cztcbiAgICB9XG4gICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgQUxMT1dfREFUQV9BVFRSID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICBSRVRVUk5fRE9NID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiBQYXJzZSBwcm9maWxlIGluZm8gKi9cbiAgICBpZiAoVVNFX1BST0ZJTEVTKSB7XG4gICAgICBBTExPV0VEX1RBR1MgPSBhZGRUb1NldCh7fSwgdGV4dCk7XG4gICAgICBBTExPV0VEX0FUVFIgPSBbXTtcbiAgICAgIGlmIChVU0VfUFJPRklMRVMuaHRtbCA9PT0gdHJ1ZSkge1xuICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIGh0bWwkMSk7XG4gICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgaHRtbCk7XG4gICAgICB9XG4gICAgICBpZiAoVVNFX1BST0ZJTEVTLnN2ZyA9PT0gdHJ1ZSkge1xuICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIHN2ZyQxKTtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBzdmcpO1xuICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHhtbCk7XG4gICAgICB9XG4gICAgICBpZiAoVVNFX1BST0ZJTEVTLnN2Z0ZpbHRlcnMgPT09IHRydWUpIHtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBzdmdGaWx0ZXJzKTtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBzdmcpO1xuICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHhtbCk7XG4gICAgICB9XG4gICAgICBpZiAoVVNFX1BST0ZJTEVTLm1hdGhNbCA9PT0gdHJ1ZSkge1xuICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIG1hdGhNbCQxKTtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBtYXRoTWwpO1xuICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHhtbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogTWVyZ2UgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovXG4gICAgaWYgKGNmZy5BRERfVEFHUykge1xuICAgICAgaWYgKEFMTE9XRURfVEFHUyA9PT0gREVGQVVMVF9BTExPV0VEX1RBR1MpIHtcbiAgICAgICAgQUxMT1dFRF9UQUdTID0gY2xvbmUoQUxMT1dFRF9UQUdTKTtcbiAgICAgIH1cbiAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgY2ZnLkFERF9UQUdTLCB0cmFuc2Zvcm1DYXNlRnVuYyk7XG4gICAgfVxuICAgIGlmIChjZmcuQUREX0FUVFIpIHtcbiAgICAgIGlmIChBTExPV0VEX0FUVFIgPT09IERFRkFVTFRfQUxMT1dFRF9BVFRSKSB7XG4gICAgICAgIEFMTE9XRURfQVRUUiA9IGNsb25lKEFMTE9XRURfQVRUUik7XG4gICAgICB9XG4gICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIGNmZy5BRERfQVRUUiwgdHJhbnNmb3JtQ2FzZUZ1bmMpO1xuICAgIH1cbiAgICBpZiAoY2ZnLkFERF9VUklfU0FGRV9BVFRSKSB7XG4gICAgICBhZGRUb1NldChVUklfU0FGRV9BVFRSSUJVVEVTLCBjZmcuQUREX1VSSV9TQUZFX0FUVFIsIHRyYW5zZm9ybUNhc2VGdW5jKTtcbiAgICB9XG4gICAgaWYgKGNmZy5GT1JCSURfQ09OVEVOVFMpIHtcbiAgICAgIGlmIChGT1JCSURfQ09OVEVOVFMgPT09IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTKSB7XG4gICAgICAgIEZPUkJJRF9DT05URU5UUyA9IGNsb25lKEZPUkJJRF9DT05URU5UUyk7XG4gICAgICB9XG4gICAgICBhZGRUb1NldChGT1JCSURfQ09OVEVOVFMsIGNmZy5GT1JCSURfQ09OVEVOVFMsIHRyYW5zZm9ybUNhc2VGdW5jKTtcbiAgICB9XG5cbiAgICAvKiBBZGQgI3RleHQgaW4gY2FzZSBLRUVQX0NPTlRFTlQgaXMgc2V0IHRvIHRydWUgKi9cbiAgICBpZiAoS0VFUF9DT05URU5UKSB7XG4gICAgICBBTExPV0VEX1RBR1NbJyN0ZXh0J10gPSB0cnVlO1xuICAgIH1cblxuICAgIC8qIEFkZCBodG1sLCBoZWFkIGFuZCBib2R5IHRvIEFMTE9XRURfVEFHUyBpbiBjYXNlIFdIT0xFX0RPQ1VNRU5UIGlzIHRydWUgKi9cbiAgICBpZiAoV0hPTEVfRE9DVU1FTlQpIHtcbiAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgWydodG1sJywgJ2hlYWQnLCAnYm9keSddKTtcbiAgICB9XG5cbiAgICAvKiBBZGQgdGJvZHkgdG8gQUxMT1dFRF9UQUdTIGluIGNhc2UgdGFibGVzIGFyZSBwZXJtaXR0ZWQsIHNlZSAjMjg2LCAjMzY1ICovXG4gICAgaWYgKEFMTE9XRURfVEFHUy50YWJsZSkge1xuICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBbJ3Rib2R5J10pO1xuICAgICAgZGVsZXRlIEZPUkJJRF9UQUdTLnRib2R5O1xuICAgIH1cbiAgICBpZiAoY2ZnLlRSVVNURURfVFlQRVNfUE9MSUNZKSB7XG4gICAgICBpZiAodHlwZW9mIGNmZy5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1MICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgnVFJVU1RFRF9UWVBFU19QT0xJQ1kgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBwcm92aWRlIGEgXCJjcmVhdGVIVE1MXCIgaG9vay4nKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgY2ZnLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZVNjcmlwdFVSTCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyB0eXBlRXJyb3JDcmVhdGUoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhIFwiY3JlYXRlU2NyaXB0VVJMXCIgaG9vay4nKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3ZlcndyaXRlIGV4aXN0aW5nIFRydXN0ZWRUeXBlcyBwb2xpY3kuXG4gICAgICB0cnVzdGVkVHlwZXNQb2xpY3kgPSBjZmcuVFJVU1RFRF9UWVBFU19QT0xJQ1k7XG5cbiAgICAgIC8vIFNpZ24gbG9jYWwgdmFyaWFibGVzIHJlcXVpcmVkIGJ5IGBzYW5pdGl6ZWAuXG4gICAgICBlbXB0eUhUTUwgPSB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTCgnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVuaW5pdGlhbGl6ZWQgcG9saWN5LCBhdHRlbXB0IHRvIGluaXRpYWxpemUgdGhlIGludGVybmFsIGRvbXB1cmlmeSBwb2xpY3kuXG4gICAgICBpZiAodHJ1c3RlZFR5cGVzUG9saWN5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdHJ1c3RlZFR5cGVzUG9saWN5ID0gX2NyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeSh0cnVzdGVkVHlwZXMsIGN1cnJlbnRTY3JpcHQpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBjcmVhdGluZyB0aGUgaW50ZXJuYWwgcG9saWN5IHN1Y2NlZWRlZCBzaWduIGludGVybmFsIHZhcmlhYmxlcy5cbiAgICAgIGlmICh0cnVzdGVkVHlwZXNQb2xpY3kgIT09IG51bGwgJiYgdHlwZW9mIGVtcHR5SFRNTCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZW1wdHlIVE1MID0gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoJycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXZlbnQgZnVydGhlciBtYW5pcHVsYXRpb24gb2YgY29uZmlndXJhdGlvbi5cbiAgICAvLyBOb3QgYXZhaWxhYmxlIGluIElFOCwgU2FmYXJpIDUsIGV0Yy5cbiAgICBpZiAoZnJlZXplKSB7XG4gICAgICBmcmVlemUoY2ZnKTtcbiAgICB9XG4gICAgQ09ORklHID0gY2ZnO1xuICB9O1xuICBjb25zdCBNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFMgPSBhZGRUb1NldCh7fSwgWydtaScsICdtbycsICdtbicsICdtcycsICdtdGV4dCddKTtcbiAgY29uc3QgSFRNTF9JTlRFR1JBVElPTl9QT0lOVFMgPSBhZGRUb1NldCh7fSwgWydmb3JlaWdub2JqZWN0JywgJ2Fubm90YXRpb24teG1sJ10pO1xuXG4gIC8vIENlcnRhaW4gZWxlbWVudHMgYXJlIGFsbG93ZWQgaW4gYm90aCBTVkcgYW5kIEhUTUxcbiAgLy8gbmFtZXNwYWNlLiBXZSBuZWVkIHRvIHNwZWNpZnkgdGhlbSBleHBsaWNpdGx5XG4gIC8vIHNvIHRoYXQgdGhleSBkb24ndCBnZXQgZXJyb25lb3VzbHkgZGVsZXRlZCBmcm9tXG4gIC8vIEhUTUwgbmFtZXNwYWNlLlxuICBjb25zdCBDT01NT05fU1ZHX0FORF9IVE1MX0VMRU1FTlRTID0gYWRkVG9TZXQoe30sIFsndGl0bGUnLCAnc3R5bGUnLCAnZm9udCcsICdhJywgJ3NjcmlwdCddKTtcblxuICAvKiBLZWVwIHRyYWNrIG9mIGFsbCBwb3NzaWJsZSBTVkcgYW5kIE1hdGhNTCB0YWdzXG4gICAqIHNvIHRoYXQgd2UgY2FuIHBlcmZvcm0gdGhlIG5hbWVzcGFjZSBjaGVja3NcbiAgICogY29ycmVjdGx5LiAqL1xuICBjb25zdCBBTExfU1ZHX1RBR1MgPSBhZGRUb1NldCh7fSwgWy4uLnN2ZyQxLCAuLi5zdmdGaWx0ZXJzLCAuLi5zdmdEaXNhbGxvd2VkXSk7XG4gIGNvbnN0IEFMTF9NQVRITUxfVEFHUyA9IGFkZFRvU2V0KHt9LCBbLi4ubWF0aE1sJDEsIC4uLm1hdGhNbERpc2FsbG93ZWRdKTtcblxuICAvKipcbiAgICogQHBhcmFtICB7RWxlbWVudH0gZWxlbWVudCBhIERPTSBlbGVtZW50IHdob3NlIG5hbWVzcGFjZSBpcyBiZWluZyBjaGVja2VkXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm4gZmFsc2UgaWYgdGhlIGVsZW1lbnQgaGFzIGFcbiAgICogIG5hbWVzcGFjZSB0aGF0IGEgc3BlYy1jb21wbGlhbnQgcGFyc2VyIHdvdWxkIG5ldmVyXG4gICAqICByZXR1cm4uIFJldHVybiB0cnVlIG90aGVyd2lzZS5cbiAgICovXG4gIGNvbnN0IF9jaGVja1ZhbGlkTmFtZXNwYWNlID0gZnVuY3Rpb24gX2NoZWNrVmFsaWROYW1lc3BhY2UoZWxlbWVudCkge1xuICAgIGxldCBwYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gICAgLy8gSW4gSlNET00sIGlmIHdlJ3JlIGluc2lkZSBzaGFkb3cgRE9NLCB0aGVuIHBhcmVudE5vZGVcbiAgICAvLyBjYW4gYmUgbnVsbC4gV2UganVzdCBzaW11bGF0ZSBwYXJlbnQgaW4gdGhpcyBjYXNlLlxuICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQudGFnTmFtZSkge1xuICAgICAgcGFyZW50ID0ge1xuICAgICAgICBuYW1lc3BhY2VVUkk6IE5BTUVTUEFDRSxcbiAgICAgICAgdGFnTmFtZTogJ3RlbXBsYXRlJ1xuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgdGFnTmFtZSA9IHN0cmluZ1RvTG93ZXJDYXNlKGVsZW1lbnQudGFnTmFtZSk7XG4gICAgY29uc3QgcGFyZW50VGFnTmFtZSA9IHN0cmluZ1RvTG93ZXJDYXNlKHBhcmVudC50YWdOYW1lKTtcbiAgICBpZiAoIUFMTE9XRURfTkFNRVNQQUNFU1tlbGVtZW50Lm5hbWVzcGFjZVVSSV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFKSB7XG4gICAgICAvLyBUaGUgb25seSB3YXkgdG8gc3dpdGNoIGZyb20gSFRNTCBuYW1lc3BhY2UgdG8gU1ZHXG4gICAgICAvLyBpcyB2aWEgPHN2Zz4uIElmIGl0IGhhcHBlbnMgdmlhIGFueSBvdGhlciB0YWcsIHRoZW5cbiAgICAgIC8vIGl0IHNob3VsZCBiZSBraWxsZWQuXG4gICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdzdmcnO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgb25seSB3YXkgdG8gc3dpdGNoIGZyb20gTWF0aE1MIHRvIFNWRyBpcyB2aWFgXG4gICAgICAvLyBzdmcgaWYgcGFyZW50IGlzIGVpdGhlciA8YW5ub3RhdGlvbi14bWw+IG9yIE1hdGhNTFxuICAgICAgLy8gdGV4dCBpbnRlZ3JhdGlvbiBwb2ludHMuXG4gICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSkge1xuICAgICAgICByZXR1cm4gdGFnTmFtZSA9PT0gJ3N2ZycgJiYgKHBhcmVudFRhZ05hbWUgPT09ICdhbm5vdGF0aW9uLXhtbCcgfHwgTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTW3BhcmVudFRhZ05hbWVdKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2Ugb25seSBhbGxvdyBlbGVtZW50cyB0aGF0IGFyZSBkZWZpbmVkIGluIFNWR1xuICAgICAgLy8gc3BlYy4gQWxsIG90aGVycyBhcmUgZGlzYWxsb3dlZCBpbiBTVkcgbmFtZXNwYWNlLlxuICAgICAgcmV0dXJuIEJvb2xlYW4oQUxMX1NWR19UQUdTW3RhZ05hbWVdKTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBNQVRITUxfTkFNRVNQQUNFKSB7XG4gICAgICAvLyBUaGUgb25seSB3YXkgdG8gc3dpdGNoIGZyb20gSFRNTCBuYW1lc3BhY2UgdG8gTWF0aE1MXG4gICAgICAvLyBpcyB2aWEgPG1hdGg+LiBJZiBpdCBoYXBwZW5zIHZpYSBhbnkgb3RoZXIgdGFnLCB0aGVuXG4gICAgICAvLyBpdCBzaG91bGQgYmUga2lsbGVkLlxuICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnbWF0aCc7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBzd2l0Y2ggZnJvbSBTVkcgdG8gTWF0aE1MIGlzIHZpYVxuICAgICAgLy8gPG1hdGg+IGFuZCBIVE1MIGludGVncmF0aW9uIHBvaW50c1xuICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UpIHtcbiAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdtYXRoJyAmJiBIVE1MX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXTtcbiAgICAgIH1cblxuICAgICAgLy8gV2Ugb25seSBhbGxvdyBlbGVtZW50cyB0aGF0IGFyZSBkZWZpbmVkIGluIE1hdGhNTFxuICAgICAgLy8gc3BlYy4gQWxsIG90aGVycyBhcmUgZGlzYWxsb3dlZCBpbiBNYXRoTUwgbmFtZXNwYWNlLlxuICAgICAgcmV0dXJuIEJvb2xlYW4oQUxMX01BVEhNTF9UQUdTW3RhZ05hbWVdKTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgLy8gVGhlIG9ubHkgd2F5IHRvIHN3aXRjaCBmcm9tIFNWRyB0byBIVE1MIGlzIHZpYVxuICAgICAgLy8gSFRNTCBpbnRlZ3JhdGlvbiBwb2ludHMsIGFuZCBmcm9tIE1hdGhNTCB0byBIVE1MXG4gICAgICAvLyBpcyB2aWEgTWF0aE1MIHRleHQgaW50ZWdyYXRpb24gcG9pbnRzXG4gICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSAmJiAhSFRNTF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IE1BVEhNTF9OQU1FU1BBQ0UgJiYgIU1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIGRpc2FsbG93IHRhZ3MgdGhhdCBhcmUgc3BlY2lmaWMgZm9yIE1hdGhNTFxuICAgICAgLy8gb3IgU1ZHIGFuZCBzaG91bGQgbmV2ZXIgYXBwZWFyIGluIEhUTUwgbmFtZXNwYWNlXG4gICAgICByZXR1cm4gIUFMTF9NQVRITUxfVEFHU1t0YWdOYW1lXSAmJiAoQ09NTU9OX1NWR19BTkRfSFRNTF9FTEVNRU5UU1t0YWdOYW1lXSB8fCAhQUxMX1NWR19UQUdTW3RhZ05hbWVdKTtcbiAgICB9XG5cbiAgICAvLyBGb3IgWEhUTUwgYW5kIFhNTCBkb2N1bWVudHMgdGhhdCBzdXBwb3J0IGN1c3RvbSBuYW1lc3BhY2VzXG4gICAgaWYgKFBBUlNFUl9NRURJQV9UWVBFID09PSAnYXBwbGljYXRpb24veGh0bWwreG1sJyAmJiBBTExPV0VEX05BTUVTUEFDRVNbZWxlbWVudC5uYW1lc3BhY2VVUkldKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBUaGUgY29kZSBzaG91bGQgbmV2ZXIgcmVhY2ggdGhpcyBwbGFjZSAodGhpcyBtZWFuc1xuICAgIC8vIHRoYXQgdGhlIGVsZW1lbnQgc29tZWhvdyBnb3QgbmFtZXNwYWNlIHRoYXQgaXMgbm90XG4gICAgLy8gSFRNTCwgU1ZHLCBNYXRoTUwgb3IgYWxsb3dlZCB2aWEgQUxMT1dFRF9OQU1FU1BBQ0VTKS5cbiAgICAvLyBSZXR1cm4gZmFsc2UganVzdCBpbiBjYXNlLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvKipcbiAgICogX2ZvcmNlUmVtb3ZlXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGV9IG5vZGUgYSBET00gbm9kZVxuICAgKi9cbiAgY29uc3QgX2ZvcmNlUmVtb3ZlID0gZnVuY3Rpb24gX2ZvcmNlUmVtb3ZlKG5vZGUpIHtcbiAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHtcbiAgICAgIGVsZW1lbnQ6IG5vZGVcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLXJlbW92ZVxuICAgICAgZ2V0UGFyZW50Tm9kZShub2RlKS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICByZW1vdmUobm9kZSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBfcmVtb3ZlQXR0cmlidXRlXG4gICAqXG4gICAqIEBwYXJhbSAge1N0cmluZ30gbmFtZSBhbiBBdHRyaWJ1dGUgbmFtZVxuICAgKiBAcGFyYW0gIHtOb2RlfSBub2RlIGEgRE9NIG5vZGVcbiAgICovXG4gIGNvbnN0IF9yZW1vdmVBdHRyaWJ1dGUgPSBmdW5jdGlvbiBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIG5vZGUpIHtcbiAgICB0cnkge1xuICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgIGF0dHJpYnV0ZTogbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpLFxuICAgICAgICBmcm9tOiBub2RlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHtcbiAgICAgICAgYXR0cmlidXRlOiBudWxsLFxuICAgICAgICBmcm9tOiBub2RlXG4gICAgICB9KTtcbiAgICB9XG4gICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cbiAgICAvLyBXZSB2b2lkIGF0dHJpYnV0ZSB2YWx1ZXMgZm9yIHVucmVtb3ZhYmxlIFwiaXNcIlwiIGF0dHJpYnV0ZXNcbiAgICBpZiAobmFtZSA9PT0gJ2lzJyAmJiAhQUxMT1dFRF9BVFRSW25hbWVdKSB7XG4gICAgICBpZiAoUkVUVVJOX0RPTSB8fCBSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgX2ZvcmNlUmVtb3ZlKG5vZGUpO1xuICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCAnJyk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBfaW5pdERvY3VtZW50XG4gICAqXG4gICAqIEBwYXJhbSAge1N0cmluZ30gZGlydHkgYSBzdHJpbmcgb2YgZGlydHkgbWFya3VwXG4gICAqIEByZXR1cm4ge0RvY3VtZW50fSBhIERPTSwgZmlsbGVkIHdpdGggdGhlIGRpcnR5IG1hcmt1cFxuICAgKi9cbiAgY29uc3QgX2luaXREb2N1bWVudCA9IGZ1bmN0aW9uIF9pbml0RG9jdW1lbnQoZGlydHkpIHtcbiAgICAvKiBDcmVhdGUgYSBIVE1MIGRvY3VtZW50ICovXG4gICAgbGV0IGRvYyA9IG51bGw7XG4gICAgbGV0IGxlYWRpbmdXaGl0ZXNwYWNlID0gbnVsbDtcbiAgICBpZiAoRk9SQ0VfQk9EWSkge1xuICAgICAgZGlydHkgPSAnPHJlbW92ZT48L3JlbW92ZT4nICsgZGlydHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIElmIEZPUkNFX0JPRFkgaXNuJ3QgdXNlZCwgbGVhZGluZyB3aGl0ZXNwYWNlIG5lZWRzIHRvIGJlIHByZXNlcnZlZCBtYW51YWxseSAqL1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IHN0cmluZ01hdGNoKGRpcnR5LCAvXltcXHJcXG5cXHQgXSsvKTtcbiAgICAgIGxlYWRpbmdXaGl0ZXNwYWNlID0gbWF0Y2hlcyAmJiBtYXRjaGVzWzBdO1xuICAgIH1cbiAgICBpZiAoUEFSU0VSX01FRElBX1RZUEUgPT09ICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnICYmIE5BTUVTUEFDRSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgIC8vIFJvb3Qgb2YgWEhUTUwgZG9jIG11c3QgY29udGFpbiB4bWxucyBkZWNsYXJhdGlvbiAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvbm9ybWF0aXZlLmh0bWwjc3RyaWN0KVxuICAgICAgZGlydHkgPSAnPGh0bWwgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+PGhlYWQ+PC9oZWFkPjxib2R5PicgKyBkaXJ0eSArICc8L2JvZHk+PC9odG1sPic7XG4gICAgfVxuICAgIGNvbnN0IGRpcnR5UGF5bG9hZCA9IHRydXN0ZWRUeXBlc1BvbGljeSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKGRpcnR5KSA6IGRpcnR5O1xuICAgIC8qXG4gICAgICogVXNlIHRoZSBET01QYXJzZXIgQVBJIGJ5IGRlZmF1bHQsIGZhbGxiYWNrIGxhdGVyIGlmIG5lZWRzIGJlXG4gICAgICogRE9NUGFyc2VyIG5vdCB3b3JrIGZvciBzdmcgd2hlbiBoYXMgbXVsdGlwbGUgcm9vdCBlbGVtZW50LlxuICAgICAqL1xuICAgIGlmIChOQU1FU1BBQ0UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGRpcnR5UGF5bG9hZCwgUEFSU0VSX01FRElBX1RZUEUpO1xuICAgICAgfSBjYXRjaCAoXykge31cbiAgICB9XG5cbiAgICAvKiBVc2UgY3JlYXRlSFRNTERvY3VtZW50IGluIGNhc2UgRE9NUGFyc2VyIGlzIG5vdCBhdmFpbGFibGUgKi9cbiAgICBpZiAoIWRvYyB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZG9jID0gaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoTkFNRVNQQUNFLCAndGVtcGxhdGUnLCBudWxsKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRvYy5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MID0gSVNfRU1QVFlfSU5QVVQgPyBlbXB0eUhUTUwgOiBkaXJ0eVBheWxvYWQ7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIC8vIFN5bnRheCBlcnJvciBpZiBkaXJ0eVBheWxvYWQgaXMgaW52YWxpZCB4bWxcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYm9keSA9IGRvYy5ib2R5IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgaWYgKGRpcnR5ICYmIGxlYWRpbmdXaGl0ZXNwYWNlKSB7XG4gICAgICBib2R5Lmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSksIGJvZHkuY2hpbGROb2Rlc1swXSB8fCBudWxsKTtcbiAgICB9XG5cbiAgICAvKiBXb3JrIG9uIHdob2xlIGRvY3VtZW50IG9yIGp1c3QgaXRzIGJvZHkgKi9cbiAgICBpZiAoTkFNRVNQQUNFID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgcmV0dXJuIGdldEVsZW1lbnRzQnlUYWdOYW1lLmNhbGwoZG9jLCBXSE9MRV9ET0NVTUVOVCA/ICdodG1sJyA6ICdib2R5JylbMF07XG4gICAgfVxuICAgIHJldHVybiBXSE9MRV9ET0NVTUVOVCA/IGRvYy5kb2N1bWVudEVsZW1lbnQgOiBib2R5O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgTm9kZUl0ZXJhdG9yIG9iamVjdCB0aGF0IHlvdSBjYW4gdXNlIHRvIHRyYXZlcnNlIGZpbHRlcmVkIGxpc3RzIG9mIG5vZGVzIG9yIGVsZW1lbnRzIGluIGEgZG9jdW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGV9IHJvb3QgVGhlIHJvb3QgZWxlbWVudCBvciBub2RlIHRvIHN0YXJ0IHRyYXZlcnNpbmcgb24uXG4gICAqIEByZXR1cm4ge05vZGVJdGVyYXRvcn0gVGhlIGNyZWF0ZWQgTm9kZUl0ZXJhdG9yXG4gICAqL1xuICBjb25zdCBfY3JlYXRlTm9kZUl0ZXJhdG9yID0gZnVuY3Rpb24gX2NyZWF0ZU5vZGVJdGVyYXRvcihyb290KSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5vZGVJdGVyYXRvci5jYWxsKHJvb3Qub3duZXJEb2N1bWVudCB8fCByb290LCByb290LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQgfCBOb2RlRmlsdGVyLlNIT1dfQ09NTUVOVCB8IE5vZGVGaWx0ZXIuU0hPV19URVhUIHwgTm9kZUZpbHRlci5TSE9XX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04gfCBOb2RlRmlsdGVyLlNIT1dfQ0RBVEFfU0VDVElPTiwgbnVsbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIF9pc0Nsb2JiZXJlZFxuICAgKlxuICAgKiBAcGFyYW0gIHtOb2RlfSBlbG0gZWxlbWVudCB0byBjaGVjayBmb3IgY2xvYmJlcmluZyBhdHRhY2tzXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgY2xvYmJlcmVkLCBmYWxzZSBpZiBzYWZlXG4gICAqL1xuICBjb25zdCBfaXNDbG9iYmVyZWQgPSBmdW5jdGlvbiBfaXNDbG9iYmVyZWQoZWxtKSB7XG4gICAgcmV0dXJuIGVsbSBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCAmJiAodHlwZW9mIGVsbS5ub2RlTmFtZSAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIGVsbS50ZXh0Q29udGVudCAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIGVsbS5yZW1vdmVDaGlsZCAhPT0gJ2Z1bmN0aW9uJyB8fCAhKGVsbS5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgTmFtZWROb2RlTWFwKSB8fCB0eXBlb2YgZWxtLnJlbW92ZUF0dHJpYnV0ZSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZWxtLnNldEF0dHJpYnV0ZSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZWxtLm5hbWVzcGFjZVVSSSAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIGVsbS5pbnNlcnRCZWZvcmUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVsbS5oYXNDaGlsZE5vZGVzICE9PSAnZnVuY3Rpb24nKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIG9iamVjdCBpcyBhIERPTSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0gIHtOb2RlfSBvYmplY3Qgb2JqZWN0IHRvIGNoZWNrIHdoZXRoZXIgaXQncyBhIERPTSBub2RlXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaXMgb2JqZWN0IGlzIGEgRE9NIG5vZGVcbiAgICovXG4gIGNvbnN0IF9pc05vZGUgPSBmdW5jdGlvbiBfaXNOb2RlKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2YgTm9kZSA9PT0gJ2Z1bmN0aW9uJyAmJiBvYmplY3QgaW5zdGFuY2VvZiBOb2RlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBfZXhlY3V0ZUhvb2tcbiAgICogRXhlY3V0ZSB1c2VyIGNvbmZpZ3VyYWJsZSBob29rc1xuICAgKlxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGVudHJ5UG9pbnQgIE5hbWUgb2YgdGhlIGhvb2sncyBlbnRyeSBwb2ludFxuICAgKiBAcGFyYW0gIHtOb2RlfSBjdXJyZW50Tm9kZSBub2RlIHRvIHdvcmsgb24gd2l0aCB0aGUgaG9va1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGRhdGEgYWRkaXRpb25hbCBob29rIHBhcmFtZXRlcnNcbiAgICovXG4gIGNvbnN0IF9leGVjdXRlSG9vayA9IGZ1bmN0aW9uIF9leGVjdXRlSG9vayhlbnRyeVBvaW50LCBjdXJyZW50Tm9kZSwgZGF0YSkge1xuICAgIGlmICghaG9va3NbZW50cnlQb2ludF0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXJyYXlGb3JFYWNoKGhvb2tzW2VudHJ5UG9pbnRdLCBob29rID0+IHtcbiAgICAgIGhvb2suY2FsbChET01QdXJpZnksIGN1cnJlbnROb2RlLCBkYXRhLCBDT05GSUcpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBfc2FuaXRpemVFbGVtZW50c1xuICAgKlxuICAgKiBAcHJvdGVjdCBub2RlTmFtZVxuICAgKiBAcHJvdGVjdCB0ZXh0Q29udGVudFxuICAgKiBAcHJvdGVjdCByZW1vdmVDaGlsZFxuICAgKlxuICAgKiBAcGFyYW0gICB7Tm9kZX0gY3VycmVudE5vZGUgdG8gY2hlY2sgZm9yIHBlcm1pc3Npb24gdG8gZXhpc3RcbiAgICogQHJldHVybiAge0Jvb2xlYW59IHRydWUgaWYgbm9kZSB3YXMga2lsbGVkLCBmYWxzZSBpZiBsZWZ0IGFsaXZlXG4gICAqL1xuICBjb25zdCBfc2FuaXRpemVFbGVtZW50cyA9IGZ1bmN0aW9uIF9zYW5pdGl6ZUVsZW1lbnRzKGN1cnJlbnROb2RlKSB7XG4gICAgbGV0IGNvbnRlbnQgPSBudWxsO1xuXG4gICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgIF9leGVjdXRlSG9vaygnYmVmb3JlU2FuaXRpemVFbGVtZW50cycsIGN1cnJlbnROb2RlLCBudWxsKTtcblxuICAgIC8qIENoZWNrIGlmIGVsZW1lbnQgaXMgY2xvYmJlcmVkIG9yIGNhbiBjbG9iYmVyICovXG4gICAgaWYgKF9pc0Nsb2JiZXJlZChjdXJyZW50Tm9kZSkpIHtcbiAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiBOb3cgbGV0J3MgY2hlY2sgdGhlIGVsZW1lbnQncyB0eXBlIGFuZCBuYW1lICovXG4gICAgY29uc3QgdGFnTmFtZSA9IHRyYW5zZm9ybUNhc2VGdW5jKGN1cnJlbnROb2RlLm5vZGVOYW1lKTtcblxuICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cbiAgICBfZXhlY3V0ZUhvb2soJ3Vwb25TYW5pdGl6ZUVsZW1lbnQnLCBjdXJyZW50Tm9kZSwge1xuICAgICAgdGFnTmFtZSxcbiAgICAgIGFsbG93ZWRUYWdzOiBBTExPV0VEX1RBR1NcbiAgICB9KTtcblxuICAgIC8qIERldGVjdCBtWFNTIGF0dGVtcHRzIGFidXNpbmcgbmFtZXNwYWNlIGNvbmZ1c2lvbiAqL1xuICAgIGlmIChjdXJyZW50Tm9kZS5oYXNDaGlsZE5vZGVzKCkgJiYgIV9pc05vZGUoY3VycmVudE5vZGUuZmlyc3RFbGVtZW50Q2hpbGQpICYmIHJlZ0V4cFRlc3QoLzxbL1xcd10vZywgY3VycmVudE5vZGUuaW5uZXJIVE1MKSAmJiByZWdFeHBUZXN0KC88Wy9cXHddL2csIGN1cnJlbnROb2RlLnRleHRDb250ZW50KSkge1xuICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qIFJlbW92ZSBhbnkgb2NjdXJyZW5jZSBvZiBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyAqL1xuICAgIGlmIChjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLnByb2dyZXNzaW5nSW5zdHJ1Y3Rpb24pIHtcbiAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiBSZW1vdmUgYW55IGtpbmQgb2YgcG9zc2libHkgaGFybWZ1bCBjb21tZW50cyAqL1xuICAgIGlmIChTQUZFX0ZPUl9YTUwgJiYgY3VycmVudE5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRS5jb21tZW50ICYmIHJlZ0V4cFRlc3QoLzxbL1xcd10vZywgY3VycmVudE5vZGUuZGF0YSkpIHtcbiAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiBSZW1vdmUgZWxlbWVudCBpZiBhbnl0aGluZyBmb3JiaWRzIGl0cyBwcmVzZW5jZSAqL1xuICAgIGlmICghQUxMT1dFRF9UQUdTW3RhZ05hbWVdIHx8IEZPUkJJRF9UQUdTW3RhZ05hbWVdKSB7XG4gICAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIGEgY3VzdG9tIGVsZW1lbnQgdG8gaGFuZGxlICovXG4gICAgICBpZiAoIUZPUkJJRF9UQUdTW3RhZ05hbWVdICYmIF9pc0Jhc2ljQ3VzdG9tRWxlbWVudCh0YWdOYW1lKSkge1xuICAgICAgICBpZiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCB0YWdOYW1lKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKHRhZ05hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIEtlZXAgY29udGVudCBleGNlcHQgZm9yIGJhZC1saXN0ZWQgZWxlbWVudHMgKi9cbiAgICAgIGlmIChLRUVQX0NPTlRFTlQgJiYgIUZPUkJJRF9DT05URU5UU1t0YWdOYW1lXSkge1xuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShjdXJyZW50Tm9kZSkgfHwgY3VycmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IGdldENoaWxkTm9kZXMoY3VycmVudE5vZGUpIHx8IGN1cnJlbnROb2RlLmNoaWxkTm9kZXM7XG4gICAgICAgIGlmIChjaGlsZE5vZGVzICYmIHBhcmVudE5vZGUpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZENvdW50ID0gY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGNoaWxkQ291bnQgLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRDbG9uZSA9IGNsb25lTm9kZShjaGlsZE5vZGVzW2ldLCB0cnVlKTtcbiAgICAgICAgICAgIGNoaWxkQ2xvbmUuX19yZW1vdmFsQ291bnQgPSAoY3VycmVudE5vZGUuX19yZW1vdmFsQ291bnQgfHwgMCkgKyAxO1xuICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGRDbG9uZSwgZ2V0TmV4dFNpYmxpbmcoY3VycmVudE5vZGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiBDaGVjayB3aGV0aGVyIGVsZW1lbnQgaGFzIGEgdmFsaWQgbmFtZXNwYWNlICovXG4gICAgaWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRWxlbWVudCAmJiAhX2NoZWNrVmFsaWROYW1lc3BhY2UoY3VycmVudE5vZGUpKSB7XG4gICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyogTWFrZSBzdXJlIHRoYXQgb2xkZXIgYnJvd3NlcnMgZG9uJ3QgZ2V0IGZhbGxiYWNrLXRhZyBtWFNTICovXG4gICAgaWYgKCh0YWdOYW1lID09PSAnbm9zY3JpcHQnIHx8IHRhZ05hbWUgPT09ICdub2VtYmVkJyB8fCB0YWdOYW1lID09PSAnbm9mcmFtZXMnKSAmJiByZWdFeHBUZXN0KC88XFwvbm8oc2NyaXB0fGVtYmVkfGZyYW1lcykvaSwgY3VycmVudE5vZGUuaW5uZXJIVE1MKSkge1xuICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qIFNhbml0aXplIGVsZW1lbnQgY29udGVudCB0byBiZSB0ZW1wbGF0ZS1zYWZlICovXG4gICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUyAmJiBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLnRleHQpIHtcbiAgICAgIC8qIEdldCB0aGUgZWxlbWVudCdzIHRleHQgY29udGVudCAqL1xuICAgICAgY29udGVudCA9IGN1cnJlbnROb2RlLnRleHRDb250ZW50O1xuICAgICAgYXJyYXlGb3JFYWNoKFtNVVNUQUNIRV9FWFBSLCBFUkJfRVhQUiwgVE1QTElUX0VYUFJdLCBleHByID0+IHtcbiAgICAgICAgY29udGVudCA9IHN0cmluZ1JlcGxhY2UoY29udGVudCwgZXhwciwgJyAnKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGN1cnJlbnROb2RlLnRleHRDb250ZW50ICE9PSBjb250ZW50KSB7XG4gICAgICAgIGFycmF5UHVzaChET01QdXJpZnkucmVtb3ZlZCwge1xuICAgICAgICAgIGVsZW1lbnQ6IGN1cnJlbnROb2RlLmNsb25lTm9kZSgpXG4gICAgICAgIH0pO1xuICAgICAgICBjdXJyZW50Tm9kZS50ZXh0Q29udGVudCA9IGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgIF9leGVjdXRlSG9vaygnYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzJywgY3VycmVudE5vZGUsIG51bGwpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvKipcbiAgICogX2lzVmFsaWRBdHRyaWJ1dGVcbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSBsY1RhZyBMb3dlcmNhc2UgdGFnIG5hbWUgb2YgY29udGFpbmluZyBlbGVtZW50LlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IGxjTmFtZSBMb3dlcmNhc2UgYXR0cmlidXRlIG5hbWUuXG4gICAqIEBwYXJhbSAge3N0cmluZ30gdmFsdWUgQXR0cmlidXRlIHZhbHVlLlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgYHZhbHVlYCBpcyB2YWxpZCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgY29uc3QgX2lzVmFsaWRBdHRyaWJ1dGUgPSBmdW5jdGlvbiBfaXNWYWxpZEF0dHJpYnV0ZShsY1RhZywgbGNOYW1lLCB2YWx1ZSkge1xuICAgIC8qIE1ha2Ugc3VyZSBhdHRyaWJ1dGUgY2Fubm90IGNsb2JiZXIgKi9cbiAgICBpZiAoU0FOSVRJWkVfRE9NICYmIChsY05hbWUgPT09ICdpZCcgfHwgbGNOYW1lID09PSAnbmFtZScpICYmICh2YWx1ZSBpbiBkb2N1bWVudCB8fCB2YWx1ZSBpbiBmb3JtRWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiBBbGxvdyB2YWxpZCBkYXRhLSogYXR0cmlidXRlczogQXQgbGVhc3Qgb25lIGNoYXJhY3RlciBhZnRlciBcIi1cIlxuICAgICAgICAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG9tLmh0bWwjZW1iZWRkaW5nLWN1c3RvbS1ub24tdmlzaWJsZS1kYXRhLXdpdGgtdGhlLWRhdGEtKi1hdHRyaWJ1dGVzKVxuICAgICAgICBYTUwtY29tcGF0aWJsZSAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5mcmFzdHJ1Y3R1cmUuaHRtbCN4bWwtY29tcGF0aWJsZSBhbmQgaHR0cDovL3d3dy53My5vcmcvVFIveG1sLyNkMGU4MDQpXG4gICAgICAgIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIHZhbHVlOyBpdCdzIGFsd2F5cyBVUkkgc2FmZS4gKi9cbiAgICBpZiAoQUxMT1dfREFUQV9BVFRSICYmICFGT1JCSURfQVRUUltsY05hbWVdICYmIHJlZ0V4cFRlc3QoREFUQV9BVFRSLCBsY05hbWUpKSA7IGVsc2UgaWYgKEFMTE9XX0FSSUFfQVRUUiAmJiByZWdFeHBUZXN0KEFSSUFfQVRUUiwgbGNOYW1lKSkgOyBlbHNlIGlmICghQUxMT1dFRF9BVFRSW2xjTmFtZV0gfHwgRk9SQklEX0FUVFJbbGNOYW1lXSkge1xuICAgICAgaWYgKFxuICAgICAgLy8gRmlyc3QgY29uZGl0aW9uIGRvZXMgYSB2ZXJ5IGJhc2ljIGNoZWNrIGlmIGEpIGl0J3MgYmFzaWNhbGx5IGEgdmFsaWQgY3VzdG9tIGVsZW1lbnQgdGFnbmFtZSBBTkRcbiAgICAgIC8vIGIpIGlmIHRoZSB0YWdOYW1lIHBhc3NlcyB3aGF0ZXZlciB0aGUgdXNlciBoYXMgY29uZmlndXJlZCBmb3IgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrXG4gICAgICAvLyBhbmQgYykgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIHBhc3NlcyB3aGF0ZXZlciB0aGUgdXNlciBoYXMgY29uZmlndXJlZCBmb3IgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrXG4gICAgICBfaXNCYXNpY0N1c3RvbUVsZW1lbnQobGNUYWcpICYmIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAgJiYgcmVnRXhwVGVzdChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2ssIGxjVGFnKSB8fCBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sobGNUYWcpKSAmJiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrLCBsY05hbWUpIHx8IENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayhsY05hbWUpKSB8fFxuICAgICAgLy8gQWx0ZXJuYXRpdmUsIHNlY29uZCBjb25kaXRpb24gY2hlY2tzIGlmIGl0J3MgYW4gYGlzYC1hdHRyaWJ1dGUsIEFORFxuICAgICAgLy8gdGhlIHZhbHVlIHBhc3NlcyB3aGF0ZXZlciB0aGUgdXNlciBoYXMgY29uZmlndXJlZCBmb3IgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrXG4gICAgICBsY05hbWUgPT09ICdpcycgJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzICYmIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAgJiYgcmVnRXhwVGVzdChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2ssIHZhbHVlKSB8fCBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sodmFsdWUpKSkgOyBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLyogQ2hlY2sgdmFsdWUgaXMgc2FmZS4gRmlyc3QsIGlzIGF0dHIgaW5lcnQ/IElmIHNvLCBpcyBzYWZlICovXG4gICAgfSBlbHNlIGlmIChVUklfU0FGRV9BVFRSSUJVVEVTW2xjTmFtZV0pIDsgZWxzZSBpZiAocmVnRXhwVGVzdChJU19BTExPV0VEX1VSSSQxLCBzdHJpbmdSZXBsYWNlKHZhbHVlLCBBVFRSX1dISVRFU1BBQ0UsICcnKSkpIDsgZWxzZSBpZiAoKGxjTmFtZSA9PT0gJ3NyYycgfHwgbGNOYW1lID09PSAneGxpbms6aHJlZicgfHwgbGNOYW1lID09PSAnaHJlZicpICYmIGxjVGFnICE9PSAnc2NyaXB0JyAmJiBzdHJpbmdJbmRleE9mKHZhbHVlLCAnZGF0YTonKSA9PT0gMCAmJiBEQVRBX1VSSV9UQUdTW2xjVGFnXSkgOyBlbHNlIGlmIChBTExPV19VTktOT1dOX1BST1RPQ09MUyAmJiAhcmVnRXhwVGVzdChJU19TQ1JJUFRfT1JfREFUQSwgc3RyaW5nUmVwbGFjZSh2YWx1ZSwgQVRUUl9XSElURVNQQUNFLCAnJykpKSA7IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvKipcbiAgICogX2lzQmFzaWNDdXN0b21FbGVtZW50XG4gICAqIGNoZWNrcyBpZiBhdCBsZWFzdCBvbmUgZGFzaCBpcyBpbmNsdWRlZCBpbiB0YWdOYW1lLCBhbmQgaXQncyBub3QgdGhlIGZpcnN0IGNoYXJcbiAgICogZm9yIG1vcmUgc29waGlzdGljYXRlZCBjaGVja2luZyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy92YWxpZGF0ZS1lbGVtZW50LW5hbWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgbmFtZSBvZiB0aGUgdGFnIG9mIHRoZSBub2RlIHRvIHNhbml0aXplXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIHRhZyBuYW1lIG1lZXRzIHRoZSBiYXNpYyBjcml0ZXJpYSBmb3IgYSBjdXN0b20gZWxlbWVudCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgY29uc3QgX2lzQmFzaWNDdXN0b21FbGVtZW50ID0gZnVuY3Rpb24gX2lzQmFzaWNDdXN0b21FbGVtZW50KHRhZ05hbWUpIHtcbiAgICByZXR1cm4gdGFnTmFtZSAhPT0gJ2Fubm90YXRpb24teG1sJyAmJiBzdHJpbmdNYXRjaCh0YWdOYW1lLCBDVVNUT01fRUxFTUVOVCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIF9zYW5pdGl6ZUF0dHJpYnV0ZXNcbiAgICpcbiAgICogQHByb3RlY3QgYXR0cmlidXRlc1xuICAgKiBAcHJvdGVjdCBub2RlTmFtZVxuICAgKiBAcHJvdGVjdCByZW1vdmVBdHRyaWJ1dGVcbiAgICogQHByb3RlY3Qgc2V0QXR0cmlidXRlXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGV9IGN1cnJlbnROb2RlIHRvIHNhbml0aXplXG4gICAqL1xuICBjb25zdCBfc2FuaXRpemVBdHRyaWJ1dGVzID0gZnVuY3Rpb24gX3Nhbml0aXplQXR0cmlidXRlcyhjdXJyZW50Tm9kZSkge1xuICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cbiAgICBfZXhlY3V0ZUhvb2soJ2JlZm9yZVNhbml0aXplQXR0cmlidXRlcycsIGN1cnJlbnROb2RlLCBudWxsKTtcbiAgICBjb25zdCB7XG4gICAgICBhdHRyaWJ1dGVzXG4gICAgfSA9IGN1cnJlbnROb2RlO1xuXG4gICAgLyogQ2hlY2sgaWYgd2UgaGF2ZSBhdHRyaWJ1dGVzOyBpZiBub3Qgd2UgbWlnaHQgaGF2ZSBhIHRleHQgbm9kZSAqL1xuICAgIGlmICghYXR0cmlidXRlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBob29rRXZlbnQgPSB7XG4gICAgICBhdHRyTmFtZTogJycsXG4gICAgICBhdHRyVmFsdWU6ICcnLFxuICAgICAga2VlcEF0dHI6IHRydWUsXG4gICAgICBhbGxvd2VkQXR0cmlidXRlczogQUxMT1dFRF9BVFRSXG4gICAgfTtcbiAgICBsZXQgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoO1xuXG4gICAgLyogR28gYmFja3dhcmRzIG92ZXIgYWxsIGF0dHJpYnV0ZXM7IHNhZmVseSByZW1vdmUgYmFkIG9uZXMgKi9cbiAgICB3aGlsZSAobC0tKSB7XG4gICAgICBjb25zdCBhdHRyID0gYXR0cmlidXRlc1tsXTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbmFtZXNwYWNlVVJJLFxuICAgICAgICB2YWx1ZTogYXR0clZhbHVlXG4gICAgICB9ID0gYXR0cjtcbiAgICAgIGNvbnN0IGxjTmFtZSA9IHRyYW5zZm9ybUNhc2VGdW5jKG5hbWUpO1xuICAgICAgbGV0IHZhbHVlID0gbmFtZSA9PT0gJ3ZhbHVlJyA/IGF0dHJWYWx1ZSA6IHN0cmluZ1RyaW0oYXR0clZhbHVlKTtcblxuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgICAgaG9va0V2ZW50LmF0dHJOYW1lID0gbGNOYW1lO1xuICAgICAgaG9va0V2ZW50LmF0dHJWYWx1ZSA9IHZhbHVlO1xuICAgICAgaG9va0V2ZW50LmtlZXBBdHRyID0gdHJ1ZTtcbiAgICAgIGhvb2tFdmVudC5mb3JjZUtlZXBBdHRyID0gdW5kZWZpbmVkOyAvLyBBbGxvd3MgZGV2ZWxvcGVycyB0byBzZWUgdGhpcyBpcyBhIHByb3BlcnR5IHRoZXkgY2FuIHNldFxuICAgICAgX2V4ZWN1dGVIb29rKCd1cG9uU2FuaXRpemVBdHRyaWJ1dGUnLCBjdXJyZW50Tm9kZSwgaG9va0V2ZW50KTtcbiAgICAgIHZhbHVlID0gaG9va0V2ZW50LmF0dHJWYWx1ZTtcblxuICAgICAgLyogV29yayBhcm91bmQgYSBzZWN1cml0eSBpc3N1ZSB3aXRoIGNvbW1lbnRzIGluc2lkZSBhdHRyaWJ1dGVzICovXG4gICAgICBpZiAoU0FGRV9GT1JfWE1MICYmIHJlZ0V4cFRlc3QoLygoLS0hP3xdKT4pfDxcXC8oc3R5bGV8dGl0bGUpL2ksIHZhbHVlKSkge1xuICAgICAgICBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIGN1cnJlbnROb2RlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8qIERpZCB0aGUgaG9va3MgYXBwcm92ZSBvZiB0aGUgYXR0cmlidXRlPyAqL1xuICAgICAgaWYgKGhvb2tFdmVudC5mb3JjZUtlZXBBdHRyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBSZW1vdmUgYXR0cmlidXRlICovXG4gICAgICBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIGN1cnJlbnROb2RlKTtcblxuICAgICAgLyogRGlkIHRoZSBob29rcyBhcHByb3ZlIG9mIHRoZSBhdHRyaWJ1dGU/ICovXG4gICAgICBpZiAoIWhvb2tFdmVudC5rZWVwQXR0cikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLyogV29yayBhcm91bmQgYSBzZWN1cml0eSBpc3N1ZSBpbiBqUXVlcnkgMy4wICovXG4gICAgICBpZiAoIUFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiAmJiByZWdFeHBUZXN0KC9cXC8+L2ksIHZhbHVlKSkge1xuICAgICAgICBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIGN1cnJlbnROb2RlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8qIFNhbml0aXplIGF0dHJpYnV0ZSBjb250ZW50IHRvIGJlIHRlbXBsYXRlLXNhZmUgKi9cbiAgICAgIGlmIChTQUZFX0ZPUl9URU1QTEFURVMpIHtcbiAgICAgICAgYXJyYXlGb3JFYWNoKFtNVVNUQUNIRV9FWFBSLCBFUkJfRVhQUiwgVE1QTElUX0VYUFJdLCBleHByID0+IHtcbiAgICAgICAgICB2YWx1ZSA9IHN0cmluZ1JlcGxhY2UodmFsdWUsIGV4cHIsICcgJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvKiBJcyBgdmFsdWVgIHZhbGlkIGZvciB0aGlzIGF0dHJpYnV0ZT8gKi9cbiAgICAgIGNvbnN0IGxjVGFnID0gdHJhbnNmb3JtQ2FzZUZ1bmMoY3VycmVudE5vZGUubm9kZU5hbWUpO1xuICAgICAgaWYgKCFfaXNWYWxpZEF0dHJpYnV0ZShsY1RhZywgbGNOYW1lLCB2YWx1ZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8qIEZ1bGwgRE9NIENsb2JiZXJpbmcgcHJvdGVjdGlvbiB2aWEgbmFtZXNwYWNlIGlzb2xhdGlvbixcbiAgICAgICAqIFByZWZpeCBpZCBhbmQgbmFtZSBhdHRyaWJ1dGVzIHdpdGggYHVzZXItY29udGVudC1gXG4gICAgICAgKi9cbiAgICAgIGlmIChTQU5JVElaRV9OQU1FRF9QUk9QUyAmJiAobGNOYW1lID09PSAnaWQnIHx8IGxjTmFtZSA9PT0gJ25hbWUnKSkge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoaXMgdmFsdWVcbiAgICAgICAgX3JlbW92ZUF0dHJpYnV0ZShuYW1lLCBjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgLy8gUHJlZml4IHRoZSB2YWx1ZSBhbmQgbGF0ZXIgcmUtY3JlYXRlIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FuaXRpemVkIHZhbHVlXG4gICAgICAgIHZhbHVlID0gU0FOSVRJWkVfTkFNRURfUFJPUFNfUFJFRklYICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8qIEhhbmRsZSBhdHRyaWJ1dGVzIHRoYXQgcmVxdWlyZSBUcnVzdGVkIFR5cGVzICovXG4gICAgICBpZiAodHJ1c3RlZFR5cGVzUG9saWN5ICYmIHR5cGVvZiB0cnVzdGVkVHlwZXMgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0cnVzdGVkVHlwZXMuZ2V0QXR0cmlidXRlVHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAobmFtZXNwYWNlVVJJKSA7IGVsc2Uge1xuICAgICAgICAgIHN3aXRjaCAodHJ1c3RlZFR5cGVzLmdldEF0dHJpYnV0ZVR5cGUobGNUYWcsIGxjTmFtZSkpIHtcbiAgICAgICAgICAgIGNhc2UgJ1RydXN0ZWRIVE1MJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwodmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdUcnVzdGVkU2NyaXB0VVJMJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZVNjcmlwdFVSTCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogSGFuZGxlIGludmFsaWQgZGF0YS0qIGF0dHJpYnV0ZSBzZXQgYnkgdHJ5LWNhdGNoaW5nIGl0ICovXG4gICAgICB0cnkge1xuICAgICAgICBpZiAobmFtZXNwYWNlVVJJKSB7XG4gICAgICAgICAgY3VycmVudE5vZGUuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLyogRmFsbGJhY2sgdG8gc2V0QXR0cmlidXRlKCkgZm9yIGJyb3dzZXItdW5yZWNvZ25pemVkIG5hbWVzcGFjZXMgZS5nLiBcIngtc2NoZW1hXCIuICovXG4gICAgICAgICAgY3VycmVudE5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2lzQ2xvYmJlcmVkKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJyYXlQb3AoRE9NUHVyaWZ5LnJlbW92ZWQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgIH1cblxuICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cbiAgICBfZXhlY3V0ZUhvb2soJ2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzJywgY3VycmVudE5vZGUsIG51bGwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBfc2FuaXRpemVTaGFkb3dET01cbiAgICpcbiAgICogQHBhcmFtICB7RG9jdW1lbnRGcmFnbWVudH0gZnJhZ21lbnQgdG8gaXRlcmF0ZSBvdmVyIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBjb25zdCBfc2FuaXRpemVTaGFkb3dET00gPSBmdW5jdGlvbiBfc2FuaXRpemVTaGFkb3dET00oZnJhZ21lbnQpIHtcbiAgICBsZXQgc2hhZG93Tm9kZSA9IG51bGw7XG4gICAgY29uc3Qgc2hhZG93SXRlcmF0b3IgPSBfY3JlYXRlTm9kZUl0ZXJhdG9yKGZyYWdtZW50KTtcblxuICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cbiAgICBfZXhlY3V0ZUhvb2soJ2JlZm9yZVNhbml0aXplU2hhZG93RE9NJywgZnJhZ21lbnQsIG51bGwpO1xuICAgIHdoaWxlIChzaGFkb3dOb2RlID0gc2hhZG93SXRlcmF0b3IubmV4dE5vZGUoKSkge1xuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgICAgX2V4ZWN1dGVIb29rKCd1cG9uU2FuaXRpemVTaGFkb3dOb2RlJywgc2hhZG93Tm9kZSwgbnVsbCk7XG5cbiAgICAgIC8qIFNhbml0aXplIHRhZ3MgYW5kIGVsZW1lbnRzICovXG4gICAgICBpZiAoX3Nhbml0aXplRWxlbWVudHMoc2hhZG93Tm9kZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8qIERlZXAgc2hhZG93IERPTSBkZXRlY3RlZCAqL1xuICAgICAgaWYgKHNoYWRvd05vZGUuY29udGVudCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgX3Nhbml0aXplU2hhZG93RE9NKHNoYWRvd05vZGUuY29udGVudCk7XG4gICAgICB9XG5cbiAgICAgIC8qIENoZWNrIGF0dHJpYnV0ZXMsIHNhbml0aXplIGlmIG5lY2Vzc2FyeSAqL1xuICAgICAgX3Nhbml0aXplQXR0cmlidXRlcyhzaGFkb3dOb2RlKTtcbiAgICB9XG5cbiAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgX2V4ZWN1dGVIb29rKCdhZnRlclNhbml0aXplU2hhZG93RE9NJywgZnJhZ21lbnQsIG51bGwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZVxuICAgKiBQdWJsaWMgbWV0aG9kIHByb3ZpZGluZyBjb3JlIHNhbml0YXRpb24gZnVuY3Rpb25hbGl0eVxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xOb2RlfSBkaXJ0eSBzdHJpbmcgb3IgRE9NIG5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGNmZyBvYmplY3RcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIERPTVB1cmlmeS5zYW5pdGl6ZSA9IGZ1bmN0aW9uIChkaXJ0eSkge1xuICAgIGxldCBjZmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIGxldCBib2R5ID0gbnVsbDtcbiAgICBsZXQgaW1wb3J0ZWROb2RlID0gbnVsbDtcbiAgICBsZXQgY3VycmVudE5vZGUgPSBudWxsO1xuICAgIGxldCByZXR1cm5Ob2RlID0gbnVsbDtcbiAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIHN0cmluZyB0byBzYW5pdGl6ZS5cbiAgICAgIERPIE5PVCByZXR1cm4gZWFybHksIGFzIHRoaXMgd2lsbCByZXR1cm4gdGhlIHdyb25nIHR5cGUgaWZcbiAgICAgIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgYSBET00gb2JqZWN0IHJhdGhlciB0aGFuIGEgc3RyaW5nICovXG4gICAgSVNfRU1QVFlfSU5QVVQgPSAhZGlydHk7XG4gICAgaWYgKElTX0VNUFRZX0lOUFVUKSB7XG4gICAgICBkaXJ0eSA9ICc8IS0tPic7XG4gICAgfVxuXG4gICAgLyogU3RyaW5naWZ5LCBpbiBjYXNlIGRpcnR5IGlzIGFuIG9iamVjdCAqL1xuICAgIGlmICh0eXBlb2YgZGlydHkgIT09ICdzdHJpbmcnICYmICFfaXNOb2RlKGRpcnR5KSkge1xuICAgICAgaWYgKHR5cGVvZiBkaXJ0eS50b1N0cmluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBkaXJ0eSA9IGRpcnR5LnRvU3RyaW5nKCk7XG4gICAgICAgIGlmICh0eXBlb2YgZGlydHkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKCdkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0aW5nJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgndG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBSZXR1cm4gZGlydHkgSFRNTCBpZiBET01QdXJpZnkgY2Fubm90IHJ1biAqL1xuICAgIGlmICghRE9NUHVyaWZ5LmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gZGlydHk7XG4gICAgfVxuXG4gICAgLyogQXNzaWduIGNvbmZpZyB2YXJzICovXG4gICAgaWYgKCFTRVRfQ09ORklHKSB7XG4gICAgICBfcGFyc2VDb25maWcoY2ZnKTtcbiAgICB9XG5cbiAgICAvKiBDbGVhbiB1cCByZW1vdmVkIGVsZW1lbnRzICovXG4gICAgRE9NUHVyaWZ5LnJlbW92ZWQgPSBbXTtcblxuICAgIC8qIENoZWNrIGlmIGRpcnR5IGlzIGNvcnJlY3RseSB0eXBlZCBmb3IgSU5fUExBQ0UgKi9cbiAgICBpZiAodHlwZW9mIGRpcnR5ID09PSAnc3RyaW5nJykge1xuICAgICAgSU5fUExBQ0UgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKElOX1BMQUNFKSB7XG4gICAgICAvKiBEbyBzb21lIGVhcmx5IHByZS1zYW5pdGl6YXRpb24gdG8gYXZvaWQgdW5zYWZlIHJvb3Qgbm9kZXMgKi9cbiAgICAgIGlmIChkaXJ0eS5ub2RlTmFtZSkge1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoZGlydHkubm9kZU5hbWUpO1xuICAgICAgICBpZiAoIUFMTE9XRURfVEFHU1t0YWdOYW1lXSB8fCBGT1JCSURfVEFHU1t0YWdOYW1lXSkge1xuICAgICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgncm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXJ0eSBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgIC8qIElmIGRpcnR5IGlzIGEgRE9NIGVsZW1lbnQsIGFwcGVuZCB0byBhbiBlbXB0eSBkb2N1bWVudCB0byBhdm9pZFxuICAgICAgICAgZWxlbWVudHMgYmVpbmcgc3RyaXBwZWQgYnkgdGhlIHBhcnNlciAqL1xuICAgICAgYm9keSA9IF9pbml0RG9jdW1lbnQoJzwhLS0tLT4nKTtcbiAgICAgIGltcG9ydGVkTm9kZSA9IGJvZHkub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKGRpcnR5LCB0cnVlKTtcbiAgICAgIGlmIChpbXBvcnRlZE5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRS5lbGVtZW50ICYmIGltcG9ydGVkTm9kZS5ub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgIC8qIE5vZGUgaXMgYWxyZWFkeSBhIGJvZHksIHVzZSBhcyBpcyAqL1xuICAgICAgICBib2R5ID0gaW1wb3J0ZWROb2RlO1xuICAgICAgfSBlbHNlIGlmIChpbXBvcnRlZE5vZGUubm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgICAgICBib2R5ID0gaW1wb3J0ZWROb2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLWFwcGVuZFxuICAgICAgICBib2R5LmFwcGVuZENoaWxkKGltcG9ydGVkTm9kZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIEV4aXQgZGlyZWN0bHkgaWYgd2UgaGF2ZSBub3RoaW5nIHRvIGRvICovXG4gICAgICBpZiAoIVJFVFVSTl9ET00gJiYgIVNBRkVfRk9SX1RFTVBMQVRFUyAmJiAhV0hPTEVfRE9DVU1FTlQgJiZcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1pbmNsdWRlc1xuICAgICAgZGlydHkuaW5kZXhPZignPCcpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gdHJ1c3RlZFR5cGVzUG9saWN5ICYmIFJFVFVSTl9UUlVTVEVEX1RZUEUgPyB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTChkaXJ0eSkgOiBkaXJ0eTtcbiAgICAgIH1cblxuICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgZG9jdW1lbnQgdG8gd29yayBvbiAqL1xuICAgICAgYm9keSA9IF9pbml0RG9jdW1lbnQoZGlydHkpO1xuXG4gICAgICAvKiBDaGVjayB3ZSBoYXZlIGEgRE9NIG5vZGUgZnJvbSB0aGUgZGF0YSAqL1xuICAgICAgaWYgKCFib2R5KSB7XG4gICAgICAgIHJldHVybiBSRVRVUk5fRE9NID8gbnVsbCA6IFJFVFVSTl9UUlVTVEVEX1RZUEUgPyBlbXB0eUhUTUwgOiAnJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBSZW1vdmUgZmlyc3QgZWxlbWVudCBub2RlIChvdXJzKSBpZiBGT1JDRV9CT0RZIGlzIHNldCAqL1xuICAgIGlmIChib2R5ICYmIEZPUkNFX0JPRFkpIHtcbiAgICAgIF9mb3JjZVJlbW92ZShib2R5LmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIC8qIEdldCBub2RlIGl0ZXJhdG9yICovXG4gICAgY29uc3Qgbm9kZUl0ZXJhdG9yID0gX2NyZWF0ZU5vZGVJdGVyYXRvcihJTl9QTEFDRSA/IGRpcnR5IDogYm9keSk7XG5cbiAgICAvKiBOb3cgc3RhcnQgaXRlcmF0aW5nIG92ZXIgdGhlIGNyZWF0ZWQgZG9jdW1lbnQgKi9cbiAgICB3aGlsZSAoY3VycmVudE5vZGUgPSBub2RlSXRlcmF0b3IubmV4dE5vZGUoKSkge1xuICAgICAgLyogU2FuaXRpemUgdGFncyBhbmQgZWxlbWVudHMgKi9cbiAgICAgIGlmIChfc2FuaXRpemVFbGVtZW50cyhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8qIFNoYWRvdyBET00gZGV0ZWN0ZWQsIHNhbml0aXplIGl0ICovXG4gICAgICBpZiAoY3VycmVudE5vZGUuY29udGVudCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgX3Nhbml0aXplU2hhZG93RE9NKGN1cnJlbnROb2RlLmNvbnRlbnQpO1xuICAgICAgfVxuXG4gICAgICAvKiBDaGVjayBhdHRyaWJ1dGVzLCBzYW5pdGl6ZSBpZiBuZWNlc3NhcnkgKi9cbiAgICAgIF9zYW5pdGl6ZUF0dHJpYnV0ZXMoY3VycmVudE5vZGUpO1xuICAgIH1cblxuICAgIC8qIElmIHdlIHNhbml0aXplZCBgZGlydHlgIGluLXBsYWNlLCByZXR1cm4gaXQuICovXG4gICAgaWYgKElOX1BMQUNFKSB7XG4gICAgICByZXR1cm4gZGlydHk7XG4gICAgfVxuXG4gICAgLyogUmV0dXJuIHNhbml0aXplZCBzdHJpbmcgb3IgRE9NICovXG4gICAgaWYgKFJFVFVSTl9ET00pIHtcbiAgICAgIGlmIChSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICAgIHJldHVybk5vZGUgPSBjcmVhdGVEb2N1bWVudEZyYWdtZW50LmNhbGwoYm9keS5vd25lckRvY3VtZW50KTtcbiAgICAgICAgd2hpbGUgKGJvZHkuZmlyc3RDaGlsZCkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1kb20tbm9kZS1hcHBlbmRcbiAgICAgICAgICByZXR1cm5Ob2RlLmFwcGVuZENoaWxkKGJvZHkuZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybk5vZGUgPSBib2R5O1xuICAgICAgfVxuICAgICAgaWYgKEFMTE9XRURfQVRUUi5zaGFkb3dyb290IHx8IEFMTE9XRURfQVRUUi5zaGFkb3dyb290bW9kZSkge1xuICAgICAgICAvKlxuICAgICAgICAgIEFkb3B0Tm9kZSgpIGlzIG5vdCB1c2VkIGJlY2F1c2UgaW50ZXJuYWwgc3RhdGUgaXMgbm90IHJlc2V0XG4gICAgICAgICAgKGUuZy4gdGhlIHBhc3QgbmFtZXMgbWFwIG9mIGEgSFRNTEZvcm1FbGVtZW50KSwgdGhpcyBpcyBzYWZlXG4gICAgICAgICAgaW4gdGhlb3J5IGJ1dCB3ZSB3b3VsZCByYXRoZXIgbm90IHJpc2sgYW5vdGhlciBhdHRhY2sgdmVjdG9yLlxuICAgICAgICAgIFRoZSBzdGF0ZSB0aGF0IGlzIGNsb25lZCBieSBpbXBvcnROb2RlKCkgaXMgZXhwbGljaXRseSBkZWZpbmVkXG4gICAgICAgICAgYnkgdGhlIHNwZWNzLlxuICAgICAgICAqL1xuICAgICAgICByZXR1cm5Ob2RlID0gaW1wb3J0Tm9kZS5jYWxsKG9yaWdpbmFsRG9jdW1lbnQsIHJldHVybk5vZGUsIHRydWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldHVybk5vZGU7XG4gICAgfVxuICAgIGxldCBzZXJpYWxpemVkSFRNTCA9IFdIT0xFX0RPQ1VNRU5UID8gYm9keS5vdXRlckhUTUwgOiBib2R5LmlubmVySFRNTDtcblxuICAgIC8qIFNlcmlhbGl6ZSBkb2N0eXBlIGlmIGFsbG93ZWQgKi9cbiAgICBpZiAoV0hPTEVfRE9DVU1FTlQgJiYgQUxMT1dFRF9UQUdTWychZG9jdHlwZSddICYmIGJvZHkub3duZXJEb2N1bWVudCAmJiBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZSAmJiBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lICYmIHJlZ0V4cFRlc3QoRE9DVFlQRV9OQU1FLCBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKSkge1xuICAgICAgc2VyaWFsaXplZEhUTUwgPSAnPCFET0NUWVBFICcgKyBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lICsgJz5cXG4nICsgc2VyaWFsaXplZEhUTUw7XG4gICAgfVxuXG4gICAgLyogU2FuaXRpemUgZmluYWwgc3RyaW5nIHRlbXBsYXRlLXNhZmUgKi9cbiAgICBpZiAoU0FGRV9GT1JfVEVNUExBVEVTKSB7XG4gICAgICBhcnJheUZvckVhY2goW01VU1RBQ0hFX0VYUFIsIEVSQl9FWFBSLCBUTVBMSVRfRVhQUl0sIGV4cHIgPT4ge1xuICAgICAgICBzZXJpYWxpemVkSFRNTCA9IHN0cmluZ1JlcGxhY2Uoc2VyaWFsaXplZEhUTUwsIGV4cHIsICcgJyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydXN0ZWRUeXBlc1BvbGljeSAmJiBSRVRVUk5fVFJVU1RFRF9UWVBFID8gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoc2VyaWFsaXplZEhUTUwpIDogc2VyaWFsaXplZEhUTUw7XG4gIH07XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBtZXRob2QgdG8gc2V0IHRoZSBjb25maWd1cmF0aW9uIG9uY2VcbiAgICogc2V0Q29uZmlnXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICovXG4gIERPTVB1cmlmeS5zZXRDb25maWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGNmZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgX3BhcnNlQ29uZmlnKGNmZyk7XG4gICAgU0VUX0NPTkZJRyA9IHRydWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBtZXRob2QgdG8gcmVtb3ZlIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIGNsZWFyQ29uZmlnXG4gICAqXG4gICAqL1xuICBET01QdXJpZnkuY2xlYXJDb25maWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgQ09ORklHID0gbnVsbDtcbiAgICBTRVRfQ09ORklHID0gZmFsc2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBtZXRob2QgdG8gY2hlY2sgaWYgYW4gYXR0cmlidXRlIHZhbHVlIGlzIHZhbGlkLlxuICAgKiBVc2VzIGxhc3Qgc2V0IGNvbmZpZywgaWYgYW55LiBPdGhlcndpc2UsIHVzZXMgY29uZmlnIGRlZmF1bHRzLlxuICAgKiBpc1ZhbGlkQXR0cmlidXRlXG4gICAqXG4gICAqIEBwYXJhbSAge1N0cmluZ30gdGFnIFRhZyBuYW1lIG9mIGNvbnRhaW5pbmcgZWxlbWVudC5cbiAgICogQHBhcmFtICB7U3RyaW5nfSBhdHRyIEF0dHJpYnV0ZSBuYW1lLlxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IHZhbHVlIEF0dHJpYnV0ZSB2YWx1ZS5cbiAgICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgdmFsaWQuIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS5cbiAgICovXG4gIERPTVB1cmlmeS5pc1ZhbGlkQXR0cmlidXRlID0gZnVuY3Rpb24gKHRhZywgYXR0ciwgdmFsdWUpIHtcbiAgICAvKiBJbml0aWFsaXplIHNoYXJlZCBjb25maWcgdmFycyBpZiBuZWNlc3NhcnkuICovXG4gICAgaWYgKCFDT05GSUcpIHtcbiAgICAgIF9wYXJzZUNvbmZpZyh7fSk7XG4gICAgfVxuICAgIGNvbnN0IGxjVGFnID0gdHJhbnNmb3JtQ2FzZUZ1bmModGFnKTtcbiAgICBjb25zdCBsY05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhhdHRyKTtcbiAgICByZXR1cm4gX2lzVmFsaWRBdHRyaWJ1dGUobGNUYWcsIGxjTmFtZSwgdmFsdWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRIb29rXG4gICAqIFB1YmxpYyBtZXRob2QgdG8gYWRkIERPTVB1cmlmeSBob29rc1xuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gYWRkXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhvb2tGdW5jdGlvbiBmdW5jdGlvbiB0byBleGVjdXRlXG4gICAqL1xuICBET01QdXJpZnkuYWRkSG9vayA9IGZ1bmN0aW9uIChlbnRyeVBvaW50LCBob29rRnVuY3Rpb24pIHtcbiAgICBpZiAodHlwZW9mIGhvb2tGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBob29rc1tlbnRyeVBvaW50XSA9IGhvb2tzW2VudHJ5UG9pbnRdIHx8IFtdO1xuICAgIGFycmF5UHVzaChob29rc1tlbnRyeVBvaW50XSwgaG9va0Z1bmN0aW9uKTtcbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlSG9va1xuICAgKiBQdWJsaWMgbWV0aG9kIHRvIHJlbW92ZSBhIERPTVB1cmlmeSBob29rIGF0IGEgZ2l2ZW4gZW50cnlQb2ludFxuICAgKiAocG9wcyBpdCBmcm9tIHRoZSBzdGFjayBvZiBob29rcyBpZiBtb3JlIGFyZSBwcmVzZW50KVxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gcmVtb3ZlXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufSByZW1vdmVkKHBvcHBlZCkgaG9va1xuICAgKi9cbiAgRE9NUHVyaWZ5LnJlbW92ZUhvb2sgPSBmdW5jdGlvbiAoZW50cnlQb2ludCkge1xuICAgIGlmIChob29rc1tlbnRyeVBvaW50XSkge1xuICAgICAgcmV0dXJuIGFycmF5UG9wKGhvb2tzW2VudHJ5UG9pbnRdKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZUhvb2tzXG4gICAqIFB1YmxpYyBtZXRob2QgdG8gcmVtb3ZlIGFsbCBET01QdXJpZnkgaG9va3MgYXQgYSBnaXZlbiBlbnRyeVBvaW50XG4gICAqXG4gICAqIEBwYXJhbSAge1N0cmluZ30gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2tzIHRvIHJlbW92ZVxuICAgKi9cbiAgRE9NUHVyaWZ5LnJlbW92ZUhvb2tzID0gZnVuY3Rpb24gKGVudHJ5UG9pbnQpIHtcbiAgICBpZiAoaG9va3NbZW50cnlQb2ludF0pIHtcbiAgICAgIGhvb2tzW2VudHJ5UG9pbnRdID0gW107XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmVBbGxIb29rc1xuICAgKiBQdWJsaWMgbWV0aG9kIHRvIHJlbW92ZSBhbGwgRE9NUHVyaWZ5IGhvb2tzXG4gICAqL1xuICBET01QdXJpZnkucmVtb3ZlQWxsSG9va3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgaG9va3MgPSB7fTtcbiAgfTtcbiAgcmV0dXJuIERPTVB1cmlmeTtcbn1cbnZhciBwdXJpZnkgPSBjcmVhdGVET01QdXJpZnkoKTtcblxuZXhwb3J0IHsgcHVyaWZ5IGFzIGRlZmF1bHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1cmlmeS5lcy5tanMubWFwXG4iXSwiZmlsZSI6ImFzc2V0cy9pbmRleC1DSFRYTWVoOC5qcyJ9
|
|